Changeset: 2602b22770ef for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/2602b22770ef
Modified Files:
monetdb5/mal/mal_authorize.c
monetdb5/mal/mal_authorize.h
monetdb5/mal/mal_client.c
monetdb5/mal/mal_session.c
sql/backends/monet5/sql_user.c
Branch: userprofile
Log Message:
username callback and disable username validation before SQLinitClient
diffs (142 lines):
diff --git a/monetdb5/mal/mal_authorize.c b/monetdb5/mal/mal_authorize.c
--- a/monetdb5/mal/mal_authorize.c
+++ b/monetdb5/mal/mal_authorize.c
@@ -45,6 +45,7 @@ static BAT *rt_deleted = NULL;
static str vaultKey = NULL;
static str master_password = NULL;
static AUTHCallbackCntx authCallbackCntx = {
+ .get_user_name = NULL,
.get_user_password = NULL,
.get_user_oid = NULL
};
@@ -782,14 +783,13 @@ AUTHresolveUser(str *username, oid uid)
}
/**
- * Verifies the username of the given client exists.
+ * Returns the username of the given client.
*/
str
AUTHgetUsername(str *username, Client cntxt)
{
- oid rid = oid_nil;
- if (*username && authCallbackCntx.get_user_oid && cntxt) {
- if ((rid = authCallbackCntx.get_user_oid(cntxt, *username)) ==
oid_nil) {
+ if (authCallbackCntx.get_user_name && cntxt) {
+ if ((*username = authCallbackCntx.get_user_name(cntxt)) ==
NULL) {
throw(MAL, "getUsername", INVCRED_WRONG_ID" '%s'",
*username);
}
}
@@ -1283,6 +1283,15 @@ AUTHdeleteRemoteTableCredentials(const c
return(MAL_SUCCEED);
}
+
+str
+AUTHRegisterGetUserNameHandler(get_user_name_handler callback)
+{
+ authCallbackCntx.get_user_name = callback;
+ return MAL_SUCCEED;
+}
+
+
str
AUTHRegisterGetPasswordHandler(get_user_password_handler callback)
{
diff --git a/monetdb5/mal/mal_authorize.h b/monetdb5/mal/mal_authorize.h
--- a/monetdb5/mal/mal_authorize.h
+++ b/monetdb5/mal/mal_authorize.h
@@ -50,14 +50,17 @@ mal_export str AUTHdecypherValue(str *re
mal_export str AUTHcypherValue(str *ret, const char *value);
mal_export str AUTHrequireAdmin(Client c);
+typedef str (*get_user_name_handler)(Client c);
typedef str (*get_user_password_handler)(Client c, const char *user);
typedef oid (*get_user_oid_handler)(Client c, const char *user);
typedef struct AUTHCallbackCntx {
+ get_user_name_handler get_user_name;
get_user_password_handler get_user_password;
get_user_oid_handler get_user_oid;
} AUTHCallbackCntx;
+mal_export str AUTHRegisterGetUserNameHandler(get_user_name_handler callback);
mal_export str AUTHRegisterGetPasswordHandler(get_user_password_handler
callback);
mal_export str AUTHRegisterGetUserOIDHandler(get_user_oid_handler callback);
mal_export str AUTHGeneratePasswordHash(str *res, const char *value);
diff --git a/monetdb5/mal/mal_client.c b/monetdb5/mal/mal_client.c
--- a/monetdb5/mal/mal_client.c
+++ b/monetdb5/mal/mal_client.c
@@ -271,11 +271,11 @@ MCinitClientRecord(Client c, oid user, b
c->wlc_kind = 0;
c->wlc = NULL;
/* no authentication in embedded mode */
- if (!GDKembedded()) {
- str msg = AUTHgetUsername(&c->username, c);
- if (msg) /* shouldn't happen */
- freeException(msg);
- }
+ // if (!GDKembedded()) {
+ // str msg = AUTHgetUsername(&c->username, c);
+ // if (msg) /* shouldn't happen */
+ // freeException(msg);
+ // }
c->blocksize = BLOCK;
c->protocol = PROTOCOL_9;
diff --git a/monetdb5/mal/mal_session.c b/monetdb5/mal/mal_session.c
--- a/monetdb5/mal/mal_session.c
+++ b/monetdb5/mal/mal_session.c
@@ -50,6 +50,7 @@ malBootstrap(char *modules[], bool embed
MCfreeClient(c);
return msg;
}
+
if( MCinitClientThread(c) < 0){
MCfreeClient(c);
throw(MAL, "malBootstrap", "Failed to create client thread");
@@ -406,6 +407,9 @@ MSscheduleClient(str command, str challe
return;
}
+ // at this point username should have being verified
+ c->username = GDKstrdup(user);
+
GDKfree(command);
/* NOTE ABOUT STARTING NEW THREADS
diff --git a/sql/backends/monet5/sql_user.c b/sql/backends/monet5/sql_user.c
--- a/sql/backends/monet5/sql_user.c
+++ b/sql/backends/monet5/sql_user.c
@@ -70,6 +70,23 @@ getUserPassword(mvc *m, oid rid)
static str
+getUserNameCallback(Client c)
+{
+ str res;
+ backend *be = (backend *) c->sqlcontext;
+ if (be) {
+ mvc *m = be->mvc;
+ if (mvc_trans(m) == 0) {
+ res = getUserName(m, c->user);
+ sql_trans_end(m->session, SQL_OK);
+ return res;
+ }
+ }
+ return NULL;
+}
+
+
+static str
getUserPasswordCallback(Client c, const char *user)
{
str res;
@@ -178,6 +195,7 @@ monet5_set_user_api_hooks(ptr mvc)
{
(void) mvc;
AUTHRegisterGetPasswordHandler(&getUserPasswordCallback);
+ AUTHRegisterGetUserNameHandler(&getUserNameCallback);
AUTHRegisterGetUserOIDHandler(&getUserOIDCallback);
}
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]