]> code.citadel.org Git - citadel.git/blobdiff - citadel/modules/vandelay/serv_vandelay.c
Added code to provide a preliminary single user mode.
[citadel.git] / citadel / modules / vandelay / serv_vandelay.c
index aeaf81ece5cd0faf198ce9dd4965a86afa19034e..79533aa2f2e9160f0d4bbef2c64e9d63dc8c9ec3 100644 (file)
@@ -480,7 +480,7 @@ void artv_do_export(void) {
 
        Ctx = CC;
        cprintf("%d Exporting all Citadel databases.\n", LISTING_FOLLOWS);
-
+       Ctx->dont_term = 1;
        cprintf("version\n%d\n", REV_LEVEL);
 
        /* export the config file (this is done using x-macros) */
@@ -511,8 +511,8 @@ void artv_do_export(void) {
                artv_export_visits();
        if (Ctx->kill_me != 1)
                artv_export_messages();
-
        client_write("000\n", 4);
+       Ctx->dont_term = 0;
 }
 
 void artv_do_dump(void) {
@@ -717,8 +717,8 @@ void artv_import_openid(void) {
        char *data;
        int data_len;
 
-       client_getln(buf, sizeof buf);  usernum = atol(buf);
        client_getln(openid, sizeof openid);
+       client_getln(buf, sizeof buf);  usernum = atol(buf);
        if (IsEmptyStr(openid)) return;
 
        data_len = sizeof(long) + strlen(openid) + 1;
@@ -841,6 +841,8 @@ void artv_do_import(void) {
        plain[0] = 0;
        plain_size = SIZ;
        
+       CC->dont_term = 1;
+
        cprintf("%d sock it to me\n", SEND_LISTING);
        abuf[0] = '\0';
        unbuffer_output();
@@ -892,6 +894,7 @@ void artv_do_import(void) {
        while (client_getln(buf, sizeof buf) >= 0 && strcmp(buf, "000"))  ;;
        rebuild_euid_index();
        rebuild_usersbynumber();
+       CC->dont_term = 0;
 }
 
 
@@ -901,26 +904,28 @@ void cmd_artv(char *cmdbuf) {
        static int is_running = 0;
 
        if (CtdlAccessCheck(ac_internal)) return;
-       if (is_running) {
+       
+       if (CtdlTrySingleUser())
+       {
+               CtdlMakeTempFileName(artv_tempfilename1, sizeof artv_tempfilename1);
+               CtdlMakeTempFileName(artv_tempfilename2, sizeof artv_tempfilename2);
+
+               extract_token(cmd, cmdbuf, 0, '|', sizeof cmd);
+               if (!strcasecmp(cmd, "export")) artv_do_export();
+               else if (!strcasecmp(cmd, "import")) artv_do_import();
+               else if (!strcasecmp(cmd, "dump")) artv_do_dump();
+               else cprintf("%d illegal command\n", ERROR + ILLEGAL_VALUE);
+
+               unlink(artv_tempfilename1);
+               unlink(artv_tempfilename2);
+               
+               CtdlEndSingleUser();
+       }
+       else
+       {
                cprintf("%d The importer/exporter is already running.\n",
                        ERROR + RESOURCE_BUSY);
-               return;
        }
-       is_running = 1;
-
-       CtdlMakeTempFileName(artv_tempfilename1, sizeof artv_tempfilename1);
-       CtdlMakeTempFileName(artv_tempfilename2, sizeof artv_tempfilename2);
-
-       extract_token(cmd, cmdbuf, 0, '|', sizeof cmd);
-       if (!strcasecmp(cmd, "export")) artv_do_export();
-       else if (!strcasecmp(cmd, "import")) artv_do_import();
-       else if (!strcasecmp(cmd, "dump")) artv_do_dump();
-       else cprintf("%d illegal command\n", ERROR + ILLEGAL_VALUE);
-
-       unlink(artv_tempfilename1);
-       unlink(artv_tempfilename2);
-
-       is_running = 0;
 }