]> code.citadel.org Git - citadel.git/blobdiff - citadel/control.c
* Add CONF options for master user/pass
[citadel.git] / citadel / control.c
index fe596d41a5eb636aecbf552c3cd3d47bae009733..d378f8e15f9a6902ef79df9ed7e42db21aad161e 100644 (file)
@@ -32,7 +32,6 @@
 #include "citadel.h"
 #include "server.h"
 #include "control.h"
-#include "serv_extensions.h"
 #include "sysdep_decls.h"
 #include "support.h"
 #include "config.h"
@@ -57,11 +56,18 @@ FILE *control_fp = NULL;
  */
 void lock_control(void)
 {
+#ifdef HAVE_FLOCK
+/*
+ * TODO: solaris manpages describe this function, but the headers
+ * don't show it! 
+ */
+
        if (flock(fileno(control_fp), (LOCK_EX | LOCK_NB))) {
                lprintf(CTDL_EMERG, "citserver: unable to lock %s.\n", file_citadel_control);
                lprintf(CTDL_EMERG, "Is another citserver already running?\n");
                exit(CTDLEXIT_CONTROL);
        }
+#endif
 }
 
 
@@ -70,6 +76,14 @@ void lock_control(void)
  */
 void get_control(void)
 {
+       static int already_have_control = 0;
+
+       /*
+        * If we already have the control record in memory, there's no point
+        * in reading it from disk again.
+        */
+       if (already_have_control) return;
+
        /* Zero it out.  If the control record on disk is missing or short,
         * the system functions with all control record fields initialized
         * to zero.
@@ -102,6 +116,7 @@ void get_control(void)
 
        rewind(control_fp);
        fread(&CitControl, sizeof(struct CitControl), 1, control_fp);
+       already_have_control = 1;
 }
 
 /*
@@ -257,6 +272,8 @@ void cmd_conf(char *argbuf)
                cprintf("%s\n", config.c_funambol_source);
                cprintf("%s\n", config.c_funambol_auth);
                cprintf("%d\n", config.c_rbl_at_greeting);
+               cprintf("%s\n", config.c_master_user);
+               cprintf("%s\n", config.c_master_pass);
                cprintf("000\n");
        }
 
@@ -484,6 +501,12 @@ void cmd_conf(char *argbuf)
                        case 57:
                                config.c_rbl_at_greeting = atoi(buf);
                                break;
+                       case 58:
+                               safestrncpy(config.c_master_user, buf, sizeof config.c_master_user);
+                               break;
+                       case 59:
+                               safestrncpy(config.c_master_pass, buf, sizeof config.c_master_pass);
+                               break;
                        }
                        ++a;
                }
@@ -493,7 +516,7 @@ void cmd_conf(char *argbuf)
                         CC->curr_user);
                aide_message(buf,"Citadel Configuration Manager Message");
 
-               if (strlen(config.c_logpages) > 0)
+               if (!IsEmptyStr(config.c_logpages))
                        create_room(config.c_logpages, 3, "", 0, 1, 1, VIEW_BBS);
 
                /* If full text indexing has been disabled, invalidate the
@@ -525,8 +548,7 @@ void cmd_conf(char *argbuf)
                extract_token(confname, argbuf, 1, '|', sizeof confname);
                unbuffer_output();
                cprintf("%d %s\n", SEND_LISTING, confname);
-               confptr = CtdlReadMessageBody("000",
-                               config.c_maxmsglen, NULL, 0);
+               confptr = CtdlReadMessageBody("000", config.c_maxmsglen, NULL, 0, 0);
                CtdlPutSysConfig(confname, confptr);
                free(confptr);
        }