]> code.citadel.org Git - citadel.git/blobdiff - citadel/control.c
* Applied Matt's patches to submit messages to Funambol
[citadel.git] / citadel / control.c
index 5a7f2e97a9e7920b40561f3f0e5576d8ba312ad9..d340fcd0539795eb36813ef9f91c2e90b4130bc6 100644 (file)
@@ -28,6 +28,7 @@
 #include <errno.h>
 #include <limits.h>
 #include <sys/types.h>
+#include <sys/file.h>
 #include "citadel.h"
 #include "server.h"
 #include "control.h"
@@ -48,12 +49,27 @@ struct CitControl CitControl;
 extern struct config config;
 FILE *control_fp = NULL;
 
+
+
+/*
+ * lock_control  -  acquire a lock on the control record file.
+ *                  This keeps multiple citservers from running concurrently.
+ */
+void lock_control(void)
+{
+       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);
+       }
+}
+
+
 /*
  * get_control  -  read the control record into memory.
  */
 void get_control(void)
 {
-
        /* Zero it out.  If the control record on disk is missing or short,
         * the system functions with all control record fields initialized
         * to zero.
@@ -62,12 +78,14 @@ void get_control(void)
        if (control_fp == NULL) {
                control_fp = fopen(file_citadel_control, "rb+");
                if (control_fp != NULL) {
+                       lock_control();
                        fchown(fileno(control_fp), config.c_ctdluid, -1);
                }
        }
        if (control_fp == NULL) {
                control_fp = fopen(file_citadel_control, "wb+");
                if (control_fp != NULL) {
+                       lock_control();
                        fchown(fileno(control_fp), config.c_ctdluid, -1);
                        memset(&CitControl, 0, sizeof(struct CitControl));
                        fwrite(&CitControl, sizeof(struct CitControl),
@@ -221,6 +239,14 @@ void cmd_conf(char *argbuf)
                cprintf("%d\n", config.c_journal_email);
                cprintf("%d\n", config.c_journal_pubmsgs);
                cprintf("%s\n", config.c_journal_dest);
+               cprintf("%s\n", config.c_default_cal_zone);
+               cprintf("%d\n", config.c_pftcpdict_port);
+               cprintf("%d\n", config.c_managesieve_port);
+               cprintf("%d\n", config.c_auth_mode);
+               cprintf("%s\n", config.c_funambol_host);
+               cprintf("%d\n", config.c_funambol_port);
+               cprintf("%s\n", config.c_funambol_source);
+               cprintf("%s\n", config.c_funambol_auth);
                cprintf("000\n");
        }
 
@@ -416,6 +442,35 @@ void cmd_conf(char *argbuf)
                        case 48:
                                safestrncpy(config.c_journal_dest, buf,
                                                sizeof config.c_journal_dest);
+                       case 49:
+                               safestrncpy(config.c_default_cal_zone, buf,
+                                               sizeof config.c_default_cal_zone);
+                               break;
+                       case 50:
+                               config.c_pftcpdict_port = atoi(buf);
+                               break;
+                       case 51:
+                               config.c_managesieve_port = atoi(buf);
+                               break;
+                       case 52:
+                               config.c_auth_mode = atoi(buf);
+                       case 53:
+                               safestrncpy(config.c_funambol_host, buf,
+                                       sizeof config.c_funambol_host);
+                               break;
+                       case 54:
+                               config.c_funambol_port = atoi(buf);
+                               break;
+                       case 55:
+                               safestrncpy(config.c_funambol_source,
+                                       buf, 
+                                       sizeof config.c_funambol_source);
+                               break;
+                       case 56:
+                               safestrncpy(config.c_funambol_auth,
+                                       buf,
+                                       sizeof config.c_funambol_auth);
+                               break;
                        }
                        ++a;
                }
@@ -423,7 +478,7 @@ void cmd_conf(char *argbuf)
                snprintf(buf, sizeof buf,
                         "The global system configuration has been edited by %s.\n",
                         CC->curr_user);
-               aide_message(buf);
+               aide_message(buf,"Citadel Configuration Manager Message");
 
                if (strlen(config.c_logpages) > 0)
                        create_room(config.c_logpages, 3, "", 0, 1, 1, VIEW_BBS);