Changeset: e90585e60595 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/e90585e60595
Modified Files:
        clients/Tests/exports.stable.out
        ctest/monetdb5/mal/test_malInclude.c
        monetdb5/mal/mal.c
        monetdb5/mal/mal.h
        monetdb5/mal/mal_authorize.c
        monetdb5/mal/mal_authorize.h
        monetdb5/mal/mal_embedded.c
        monetdb5/mal/mal_prelude.c
        monetdb5/mal/mal_prelude.h
        monetdb5/mal/mal_session.c
        monetdb5/mal/mal_session.h
        sql/backends/monet5/sql_scenario.c
        sql/backends/monet5/sql_user.c
        sql/common/sql_backend.c
        sql/common/sql_backend.h
        sql/server/sql_mvc.c
        sql/server/sql_mvc.h
        sql/server/sql_privileges.c
        sql/server/sql_privileges.h
        tools/mserver/mserver5.c
        tools/mserver/shutdowntest.c
Branch: Sep2022
Log Message:

Fix "monetdb create -p ...".
The initial password is passed down many levels of code, and once even
in a pretty hacky way, but it works.


diffs (truncated from 487 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
@@ -737,7 +737,7 @@ str AUTHdeleteRemoteTableCredentials(con
 str AUTHgetPasswordHash(str *ret, Client c, const char *username);
 str AUTHgetRemoteTableCredentials(const char *local_table, str *uri, str 
*username, str *password);
 str AUTHgetUsername(str *ret, Client c);
-str AUTHinitTables(const char *passwd);
+str AUTHinitTables(void);
 str AUTHrequireAdmin(Client c);
 str AUTHunlockVault(const char *password);
 str AUTHverifyPassword(const char *passwd);
@@ -1099,13 +1099,13 @@ const char *lockRef;
 const char *lookupRef;
 str mal2str(MalBlkPtr mb, int first, int last);
 int malAtomSize(int size, const char *name);
-str malBootstrap(char *modules[], bool embedded);
+str malBootstrap(char *modules[], bool embedded, const char *initpasswd);
 str malEmbeddedBoot(int workerlimit, int memorylimit, int querytimeout, int 
sessionlimit, bool with_mapi_server);
 void malEmbeddedReset(void);
 _Noreturn void malEmbeddedStop(int status);
 str malExtraModulesBoot(Client c, str extraMalModules[], char *mal_scripts);
 str malInclude(Client c, const char *name, int listing);
-str malIncludeModules(Client c, char *modules[], int listing, bool embedded);
+str malIncludeModules(Client c, char *modules[], int listing, bool embedded, 
const char *initpasswd);
 str malIncludeString(Client c, const char *name, str mal, int listing, MALfcn 
address);
 int malLibraryEnabled(const char *name);
 char *malLibraryHowToEnable(const char *name);
@@ -1116,7 +1116,7 @@ MT_Lock mal_contextLock;
 MT_Lock mal_copyLock;
 MT_Lock mal_delayLock;
 _Noreturn void mal_exit(int status);
-int mal_init(char *modules[], bool embedded);
+int mal_init(char *modules[], bool embedded, const char *initpasswd);
 void mal_instruction_reset(void);
 void mal_module(const char *name, mel_atom *atoms, mel_func *funcs);
 void mal_module2(const char *name, mel_atom *atoms, mel_func *funcs, mel_init 
initfunc, const char *code);
diff --git a/ctest/monetdb5/mal/test_malInclude.c 
b/ctest/monetdb5/mal/test_malInclude.c
--- a/ctest/monetdb5/mal/test_malInclude.c
+++ b/ctest/monetdb5/mal/test_malInclude.c
@@ -25,6 +25,6 @@ main(void)
     char *modules[2];
     modules[0] = "sql";
     modules[1] = 0;
-    mal_init(modules, true);
+    mal_init(modules, true, NULL);
     return 0;
 }
diff --git a/monetdb5/mal/mal.c b/monetdb5/mal/mal.c
--- a/monetdb5/mal/mal.c
+++ b/monetdb5/mal/mal.c
@@ -139,7 +139,7 @@ mal_version(void)
  */
 
 int
-mal_init(char *modules[], bool embedded)
+mal_init(char *modules[], bool embedded, const char *initpasswd)
 {
 /* Any error encountered here terminates the process
  * with a message sent to stderr
@@ -161,7 +161,7 @@ mal_init(char *modules[], bool embedded)
        if (initialize_tl_client_key() != 0)
                return -1;
 
-       if ((err = AUTHinitTables(NULL)) != MAL_SUCCEED) {
+       if ((err = AUTHinitTables()) != MAL_SUCCEED) {
                freeException(err);
                return -1;
        }
@@ -177,7 +177,7 @@ mal_init(char *modules[], bool embedded)
        initNamespace();
        initParser();
 
-       err = malBootstrap(modules, embedded);
+       err = malBootstrap(modules, embedded, initpasswd);
        if (err != MAL_SUCCEED) {
                mal_client_reset();
 #ifndef NDEBUG
diff --git a/monetdb5/mal/mal.h b/monetdb5/mal/mal.h
--- a/monetdb5/mal/mal.h
+++ b/monetdb5/mal/mal.h
@@ -72,7 +72,7 @@ mal_export MT_Lock  mal_profileLock ;
 mal_export MT_Lock  mal_copyLock ;
 mal_export MT_Lock  mal_delayLock ;
 
-mal_export int mal_init(char *modules[], bool embedded);
+mal_export int mal_init(char *modules[], bool embedded, const char 
*initpasswd);
 mal_export _Noreturn void mal_exit(int status);
 mal_export void mal_reset(void);
 mal_export const char *mal_version(void);
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
@@ -98,13 +98,11 @@ AUTHcommit(void)
  * after the GDK kernel has been initialized.
  */
 str
-AUTHinitTables(const char *passwd) {
+AUTHinitTables(void) {
        bat bid;
        int isNew = 1;
        str msg = MAL_SUCCEED;
 
-       (void) passwd;
-
        /* skip loading if already loaded */
        if (rt_key != NULL && rt_deleted != NULL)
                return(MAL_SUCCEED);
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
@@ -20,7 +20,7 @@ mal_export str AUTHcheckCredentials(oid 
 mal_export str AUTHgetUsername(str *ret, Client c);
 mal_export str AUTHgetPasswordHash(str *ret, Client c, const char *username);
 
-mal_export str AUTHinitTables(const char *passwd);
+mal_export str AUTHinitTables(void);
 
 mal_export str AUTHaddRemoteTableCredentials(const char *local_table, const 
char *localuser, const char *uri, const char *remoteuser, const char *pass, 
bool pw_encrypted);
 mal_export str AUTHgetRemoteTableCredentials(const char *local_table, str 
*uri, str *username, str *password);
diff --git a/monetdb5/mal/mal_embedded.c b/monetdb5/mal/mal_embedded.c
--- a/monetdb5/mal/mal_embedded.c
+++ b/monetdb5/mal/mal_embedded.c
@@ -83,7 +83,7 @@ malEmbeddedBoot(int workerlimit, int mem
                        return msg;
                }
        }
-       if ((msg = AUTHinitTables(NULL)) != MAL_SUCCEED)
+       if ((msg = AUTHinitTables()) != MAL_SUCCEED)
                return msg;
 
        if (!MCinit())
@@ -124,7 +124,7 @@ malEmbeddedBoot(int workerlimit, int mem
                return msg;
        }
        char *modules[5] = { "embedded", "sql", "generator", "udf" };
-       if ((msg = malIncludeModules(c, modules, 0, !with_mapi_server)) != 
MAL_SUCCEED) {
+       if ((msg = malIncludeModules(c, modules, 0, !with_mapi_server, NULL)) 
!= MAL_SUCCEED) {
                MCcloseClient(c);
                setClientContext(c_old); // restore context
                return msg;
diff --git a/monetdb5/mal/mal_prelude.c b/monetdb5/mal/mal_prelude.c
--- a/monetdb5/mal/mal_prelude.c
+++ b/monetdb5/mal/mal_prelude.c
@@ -71,7 +71,7 @@ mal_module(const char *name, mel_atom *a
 }
 
 static char *
-initModule(Client c, const char *name)
+initModule(Client c, const char *name, const char *initpasswd)
 {
        char *msg = MAL_SUCCEED;
 
@@ -92,6 +92,12 @@ initModule(Client c, const char *name)
                                (void)ret;
                        } else if (pci && pci->token == PATTERNsymbol) {
                                assert(pci->fcn != NULL);
+                               if (strcmp(name, "sql") == 0) {
+                                       /* HACK ALERT: temporarily use 
sqlcontext to pass
+                                        * the initial password to the prelude 
function */
+                                       assert(c->sqlcontext == NULL);
+                                       c->sqlcontext = (void *) initpasswd;
+                               }
                                msg = (*pci->fcn)(c, NULL, NULL, NULL);
                        }
                }
@@ -454,7 +460,7 @@ malPrelude(Client c, int listing, int *s
                                continue;
                        }
                        if (!mel_module[i].inits) {
-                               msg = initModule(c, mel_module[i].name);
+                               msg = initModule(c, mel_module[i].name, NULL);
                                if (msg)
                                        return msg;
                        }
@@ -472,7 +478,7 @@ malPrelude(Client c, int listing, int *s
 }
 
 str
-malIncludeModules(Client c, char *modules[], int listing, bool no_mapi_server)
+malIncludeModules(Client c, char *modules[], int listing, bool no_mapi_server, 
const char *initpasswd)
 {
        str msg;
        int sql = -1, mapi = -1;
@@ -492,15 +498,15 @@ malIncludeModules(Client c, char *module
                if (mel_module[sql].inits)
                        msg = mel_module[sql].inits();
                else
-                       msg = initModule(c, "sql");
+                       msg = initModule(c, "sql", initpasswd);
                if (msg)
                        return msg;
        }
-       if (!no_mapi_server && mapi >= 0) {
+       if (!no_mapi_server && mapi >= 0 && initpasswd == NULL) {
                if (mel_module[mapi].inits)
                        msg = mel_module[mapi].inits();
                else
-                       msg = initModule(c, "mapi");
+                       msg = initModule(c, "mapi", NULL);
                if (msg)
                        return msg;
        }
diff --git a/monetdb5/mal/mal_prelude.h b/monetdb5/mal/mal_prelude.h
--- a/monetdb5/mal/mal_prelude.h
+++ b/monetdb5/mal/mal_prelude.h
@@ -19,6 +19,6 @@ mal_export int mal_startup(void);
 mal_export void mal_module(const char *name, mel_atom *atoms, mel_func *funcs);
 mal_export void mal_module2(const char *name, mel_atom *atoms, mel_func 
*funcs, mel_init initfunc, const char *code);
 
-mal_export str malIncludeModules(Client c, char *modules[], int listing, bool 
embedded);
+mal_export str malIncludeModules(Client c, char *modules[], int listing, bool 
embedded, const char *initpasswd);
 
 #endif /*  _MAL_PRELUDE_H */
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
@@ -27,7 +27,7 @@
  * The startup script is run as user Admin.
  */
 str
-malBootstrap(char *modules[], bool embedded)
+malBootstrap(char *modules[], bool embedded, const char *initpasswd)
 {
        Client c;
        str msg = MAL_SUCCEED;
@@ -55,7 +55,7 @@ malBootstrap(char *modules[], bool embed
                MCfreeClient(c);
                throw(MAL, "malBootstrap", "Failed to create client thread");
        }
-       if ((msg = malIncludeModules(c, modules, 0, embedded)) != MAL_SUCCEED) {
+       if ((msg = malIncludeModules(c, modules, 0, embedded, initpasswd)) != 
MAL_SUCCEED) {
                MCfreeClient(c);
                return msg;
        }
diff --git a/monetdb5/mal/mal_session.h b/monetdb5/mal/mal_session.h
--- a/monetdb5/mal/mal_session.h
+++ b/monetdb5/mal/mal_session.h
@@ -12,7 +12,7 @@
 #include "mal_scenario.h"
 #include "mal_resolve.h"
 
-mal_export str malBootstrap(char *modules[], bool embedded);
+mal_export str malBootstrap(char *modules[], bool embedded, const char 
*initpasswd);
 mal_export str MSinitClientPrg(Client cntxt, const char *mod, const char *nme);
 mal_export void MSscheduleClient(str command, str challenge, bstream *fin, 
stream *fout, protocol_version protocol, size_t blocksize);
 
diff --git a/sql/backends/monet5/sql_scenario.c 
b/sql/backends/monet5/sql_scenario.c
--- a/sql/backends/monet5/sql_scenario.c
+++ b/sql/backends/monet5/sql_scenario.c
@@ -79,7 +79,7 @@ int SQLdebug = 0;
 static const char *sqlinit = NULL;
 static MT_Lock sql_contextLock = MT_LOCK_INITIALIZER(sql_contextLock);
 
-static str SQLinit(Client c);
+static str SQLinit(Client c, const char *initpasswd);
 
 str
 //SQLprelude(void *ret)
@@ -87,6 +87,10 @@ SQLprelude(Client cntxt, MalBlkPtr mb, M
 {
        str tmp;
        Scenario ms, s = getFreeScenario();
+       /* HACK ALERT: temporarily use sqlcontext to pass the initial
+        * password to the prelude function */
+       const char *initpasswd = cntxt->sqlcontext;
+       cntxt->sqlcontext = NULL;
 
        (void) mb;
        (void) stk;
@@ -137,7 +141,7 @@ SQLprelude(Client cntxt, MalBlkPtr mb, M
                .callbackCmd = MALcallback,
        };
 
-       tmp = SQLinit(cntxt);
+       tmp = SQLinit(cntxt, initpasswd);
        if (tmp != MAL_SUCCEED) {
                TRC_CRITICAL(SQL_PARSER, "Fatal error during initialization: 
%s\n", tmp);
                if (!GDKembedded()) {
@@ -365,7 +369,7 @@ SQLresetClient(Client c)
 MT_Id sqllogthread;
 
 static str
-SQLinit(Client c)
+SQLinit(Client c, const char *initpasswd)
 {
        const char *debug_str = GDKgetenv("sql_debug");
        char *msg = MAL_SUCCEED, *other = MAL_SUCCEED;
@@ -398,7 +402,7 @@ SQLinit(Client c)
        if (readonly)
                SQLdebug |= 32;
 
-       if ((SQLstore = mvc_init(SQLdebug, GDKinmemory(0) ? store_mem : 
store_bat, readonly, single_user)) == NULL) {
+       if ((SQLstore = mvc_init(SQLdebug, GDKinmemory(0) ? store_mem : 
store_bat, readonly, single_user, initpasswd)) == NULL) {
                MT_lock_unset(&sql_contextLock);
                throw(SQL, "SQLinit", SQLSTATE(42000) "Catalogue initialization 
failed");
        }
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
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to