Changeset: 284280266e77 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=284280266e77
Modified Files:
        clients/Tests/exports.stable.out
        monetdb5/ChangeLog
        monetdb5/mal/mal_authorize.c
        monetdb5/mal/mal_authorize.h
        monetdb5/mal/mal_session.c
        monetdb5/modules/mal/clients.c
        sql/backends/monet5/sql_user.c
        tools/merovingian/daemon/controlrunner.c
        tools/mserver/mserver5.c
        tools/mserver/shutdowntest.c
Branch: default
Log Message:

Changed interfaces of the AUTH* functions.


diffs (truncated from 781 to 300 lines):

diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out
--- a/clients/Tests/exports.stable.out
+++ b/clients/Tests/exports.stable.out
@@ -740,19 +740,19 @@ str ALGunique1(bat *result, const bat *b
 str ALGunique2(bat *result, const bat *bid, const bat *sid);
 str ALGvariance(dbl *res, const bat *bid);
 str ALGvariancep(dbl *res, const bat *bid);
-str AUTHaddUser(oid *ret, Client c, str *user, str *pass);
-str AUTHchangePassword(Client c, str *oldpass, str *passwd);
-str AUTHchangeUsername(Client c, str *olduser, str *newuser);
-str AUTHcheckCredentials(oid *ret, Client c, str *user, str *passwd, str 
*challenge, str *algo);
-str AUTHgetPasswordHash(str *ret, Client c, str *username);
+str AUTHaddUser(oid *ret, Client c, const char *user, const char *pass);
+str AUTHchangePassword(Client c, const char *oldpass, const char *passwd);
+str AUTHchangeUsername(Client c, const char *olduser, const char *newuser);
+str AUTHcheckCredentials(oid *ret, Client c, const char *user, const char 
*passwd, const char *challenge, const char *algo);
+str AUTHgetPasswordHash(str *ret, Client c, const char *username);
 str AUTHgetUsername(str *ret, Client c);
 str AUTHgetUsers(BAT **ret1, BAT **ret2, Client c);
-str AUTHinitTables(str *passwd);
-str AUTHremoveUser(Client c, str *username);
+str AUTHinitTables(const char *passwd);
+str AUTHremoveUser(Client c, const char *username);
 void AUTHreset(void) __attribute__((__visibility__("hidden")));
-str AUTHresolveUser(str *ret, oid *uid);
-str AUTHsetPassword(Client c, str *username, str *passwd);
-str AUTHunlockVault(str *password);
+str AUTHresolveUser(str *ret, oid uid);
+str AUTHsetPassword(Client c, const char *username, const char *passwd);
+str AUTHunlockVault(const char *password);
 str BATPCREilike(bat *ret, const bat *b, const str *pat, const str *esc);
 str BATPCREilike2(bat *ret, const bat *b, const str *pat);
 str BATPCRElike(bat *ret, const bat *b, const str *pat, const str *esc);
diff --git a/monetdb5/ChangeLog b/monetdb5/ChangeLog
--- a/monetdb5/ChangeLog
+++ b/monetdb5/ChangeLog
@@ -1,6 +1,10 @@
 # ChangeLog file for MonetDB5
 # This file is updated with Maddlog
 
+* Thu Jan  5 2017 Sjoerd Mullender <sjo...@acm.org>
+- Changed the interfaces of the AUTH* functions: pass values, not pointers
+  to values.
+
 * Tue Dec 13 2016 Sjoerd Mullender <sjo...@acm.org>
 - Removed calc.setoid().
 - group.subgroup is now called group.group if it is not refining a group.
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
@@ -39,9 +39,9 @@
 #endif
 #endif
 
-static str AUTHdecypherValue(str *ret, str *value);
-static str AUTHcypherValue(str *ret, str *value);
-static str AUTHverifyPassword(str *passwd);
+static str AUTHdecypherValue(str *ret, const char *value);
+static str AUTHcypherValue(str *ret, const char *value);
+static str AUTHverifyPassword(const char *passwd);
 
 static BAT *user = NULL;
 static BAT *pass = NULL;
@@ -74,7 +74,7 @@ AUTHfindUser(const char *username)
                        if (BUNfnd(duser, &pos) == BUN_NONE)
                                return p;
                }
-       } 
+       }
        return BUN_NONE;
 }
 
@@ -95,7 +95,7 @@ AUTHrequireAdmin(Client cntxt) {
                str user = u;
                str tmp;
 
-               rethrow("requireAdmin", tmp, AUTHresolveUser(&user, &id));
+               rethrow("requireAdmin", tmp, AUTHresolveUser(&user, id));
                throw(INVCRED, "requireAdmin", INVCRED_ACCESS_DENIED " '%s'", 
user);
        }
 
@@ -108,20 +108,21 @@ AUTHrequireAdmin(Client cntxt) {
  * InvalidCredentialsException.
  */
 static str
-AUTHrequireAdminOrUser(Client cntxt, str *username) {
+AUTHrequireAdminOrUser(Client cntxt, const char *username) {
        oid id = cntxt->user;
-       char u[BUFSIZ] = "";
-       str user = u;
+       str user = NULL;
        str tmp = MAL_SUCCEED;
 
        /* root?  then all is well */
        if (id == 0)
                return(MAL_SUCCEED);
 
-       rethrow("requireAdminOrUser", tmp, AUTHresolveUser(&user, &id));
-       if (username == NULL || *username == NULL || strcmp(*username, user) != 
0) {
+       rethrow("requireAdminOrUser", tmp, AUTHresolveUser(&user, id));
+       if (username == NULL || strcmp(username, user) != 0) {
+               GDKfree(user);
                throw(INVCRED, "requireAdminOrUser", INVCRED_ACCESS_DENIED " 
'%s'", user);
        }
+       GDKfree(user);
 
        return(MAL_SUCCEED);
 }
@@ -152,7 +153,7 @@ AUTHcommit(void)
  * after the GDK kernel has been initialized.
  */
 str
-AUTHinitTables(str *passwd) {
+AUTHinitTables(const char *passwd) {
        bat bid;
        int isNew = 1;
        str msg = MAL_SUCCEED;
@@ -224,15 +225,14 @@ AUTHinitTables(str *passwd) {
        if (isNew == 1) {
                /* insert the monetdb/monetdb administrator account on a
                 * complete fresh and new auth tables system */
-               str user = "monetdb";
-               str pw = "monetdb";
+               char *pw;
                oid uid;
                Client c = &mal_clients[0];
 
-               if (passwd != NULL && *passwd != NULL)
-                       pw = *passwd;
-               pw = mcrypt_BackendSum(pw, strlen(pw));
-               msg = AUTHaddUser(&uid, c, &user, &pw);
+               if (passwd == NULL)
+                       passwd = "monetdb";     /* default password */
+               pw = mcrypt_BackendSum(passwd, strlen(passwd));
+               msg = AUTHaddUser(&uid, c, "monetdb", pw);
                free(pw);
                if (msg)
                        return msg;
@@ -252,10 +252,10 @@ str
 AUTHcheckCredentials(
                oid *uid,
                Client cntxt,
-               str *username,
-               str *passwd,
-               str *challenge,
-               str *algo)
+               const char *username,
+               const char *passwd,
+               const char *challenge,
+               const char *algo)
 {
        str tmp;
        str pwd = NULL;
@@ -267,21 +267,21 @@ AUTHcheckCredentials(
        assert(user);
        assert(pass);
 
-       if (*username == NULL || strNil(*username))
+       if (username == NULL || strNil(username))
                throw(INVCRED, "checkCredentials", "invalid credentials for 
unknown user");
 
-       p = AUTHfindUser(*username);
+       p = AUTHfindUser(username);
        if (p == BUN_NONE) {
                /* DO NOT reveal that the user doesn't exist here! */
-               throw(INVCRED, "checkCredentials", INVCRED_INVALID_USER " 
'%s'", *username);
+               throw(INVCRED, "checkCredentials", INVCRED_INVALID_USER " 
'%s'", username);
        }
 
        /* a NULL password is impossible (since we should be dealing with
         * hashes here) so we can bail out immediately
         */
-       if (*passwd == NULL || strNil(*passwd)) {
+       if (passwd == NULL || strNil(passwd)) {
                /* DO NOT reveal that the password is NULL here! */
-               throw(INVCRED, "checkCredentials", INVCRED_INVALID_USER " 
'%s'", *username);
+               throw(INVCRED, "checkCredentials", INVCRED_INVALID_USER " 
'%s'", username);
        }
 
        /* find the corresponding password to the user */
@@ -289,15 +289,15 @@ AUTHcheckCredentials(
        tmp = (str)BUNtail(passi, p);
        assert (tmp != NULL);
        /* decypher the password (we lose the original tmp here) */
-       rethrow("checkCredentials", tmp, AUTHdecypherValue(&pwd, &tmp));
+       rethrow("checkCredentials", tmp, AUTHdecypherValue(&pwd, tmp));
        /* generate the hash as the client should have done */
-       hash = mcrypt_hashPassword(*algo, pwd, *challenge);
+       hash = mcrypt_hashPassword(algo, pwd, challenge);
        GDKfree(pwd);
        /* and now we have it, compare it to what was given to us */
-       if (strcmp(*passwd, hash) != 0) {
+       if (strcmp(passwd, hash) != 0) {
                /* of course we DO NOT print the password here */
                free(hash);
-               throw(INVCRED, "checkCredentials", INVCRED_INVALID_USER " 
'%s'", *username);
+               throw(INVCRED, "checkCredentials", INVCRED_INVALID_USER " 
'%s'", username);
        }
        free(hash);
 
@@ -310,7 +310,7 @@ AUTHcheckCredentials(
  * return value of this function is the user id of the added user.
  */
 str
-AUTHaddUser(oid *uid, Client cntxt, str *username, str *passwd) 
+AUTHaddUser(oid *uid, Client cntxt, const char *username, const char *passwd)
 {
        BUN p;
        str tmp;
@@ -321,25 +321,25 @@ AUTHaddUser(oid *uid, Client cntxt, str 
        assert(pass);
 
        /* some pre-condition checks */
-       if (*username == NULL || strNil(*username))
+       if (username == NULL || strNil(username))
                throw(ILLARG, "addUser", "username should not be nil");
-       if (*passwd == NULL || strNil(*passwd))
+       if (passwd == NULL || strNil(passwd))
                throw(ILLARG, "addUser", "password should not be nil");
        rethrow("addUser", tmp, AUTHverifyPassword(passwd));
 
        /* ensure that the username is not already there */
-       p = AUTHfindUser(*username);
+       p = AUTHfindUser(username);
        if (p != BUN_NONE)
-               throw(MAL, "addUser", "user '%s' already exists", *username);
+               throw(MAL, "addUser", "user '%s' already exists", username);
 
        /* we assume the BATs are still aligned */
        rethrow("addUser", tmp, AUTHcypherValue(&hash, passwd));
        /* needs force, as SQL makes a view over user */
-       BUNappend(user, *username, TRUE);
+       BUNappend(user, username, TRUE);
        BUNappend(pass, hash, TRUE);
        GDKfree(hash);
        /* retrieve the oid of the just inserted user */
-       p = AUTHfindUser(*username);
+       p = AUTHfindUser(username);
 
        /* make the stuff persistent */
        AUTHcommit();
@@ -352,7 +352,7 @@ AUTHaddUser(oid *uid, Client cntxt, str 
  * Removes the given user from the administration.
  */
 str
-AUTHremoveUser(Client cntxt, str *username) 
+AUTHremoveUser(Client cntxt, const char *username)
 {
        BUN p;
        oid id;
@@ -363,13 +363,13 @@ AUTHremoveUser(Client cntxt, str *userna
        assert(pass);
 
        /* pre-condition check */
-       if (*username == NULL || strNil(*username))
+       if (username == NULL || strNil(username))
                throw(ILLARG, "removeUser", "username should not be nil");
 
        /* ensure that the username exists */
-       p = AUTHfindUser(*username);
+       p = AUTHfindUser(username);
        if (p == BUN_NONE)
-               throw(MAL, "removeUser", "no such user: '%s'", *username);
+               throw(MAL, "removeUser", "no such user: '%s'", username);
        id = p;
 
        /* find the name of the administrator and see if it equals username */
@@ -386,11 +386,11 @@ AUTHremoveUser(Client cntxt, str *userna
 
 /**
  * Changes the username of the user indicated by olduser into newuser.
- * If the username is already in use, an exception is thrown and nothing
+ * If the newuser is already in use, an exception is thrown and nothing
  * is modified.
  */
 str
-AUTHchangeUsername(Client cntxt, str *olduser, str *newuser)
+AUTHchangeUsername(Client cntxt, const char *olduser, const char *newuser)
 {
        BUN p, q;
        str tmp;
@@ -398,22 +398,22 @@ AUTHchangeUsername(Client cntxt, str *ol
        rethrow("addUser", tmp, AUTHrequireAdminOrUser(cntxt, olduser));
 
        /* precondition checks */
-       if (*olduser == NULL || strNil(*olduser))
+       if (olduser == NULL || strNil(olduser))
                throw(ILLARG, "changeUsername", "old username should not be 
nil");
-       if (*newuser == NULL || strNil(*newuser))
+       if (newuser == NULL || strNil(newuser))
                throw(ILLARG, "changeUsername", "new username should not be 
nil");
 
        /* see if the olduser is valid */
-       p = AUTHfindUser(*olduser);
+       p = AUTHfindUser(olduser);
        if (p == BUN_NONE)
-               throw(MAL, "changeUsername", "user '%s' does not exist", 
*olduser);
+               throw(MAL, "changeUsername", "user '%s' does not exist", 
olduser);
        /* ... and if the newuser is not there yet */
-       q = AUTHfindUser(*newuser);
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to