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]

Reply via email to