]> code.citadel.org Git - citadel.git/blobdiff - citadel/control.c
Sieve will now only process messages that are newer than its script.
[citadel.git] / citadel / control.c
index dbe84067057cc98f8961932dadbc24236251c110..671a9cc741d84433d0ea011ee623f67e6ed78c34 100644 (file)
@@ -29,6 +29,7 @@
 #include <limits.h>
 #include <sys/types.h>
 #include <sys/file.h>
+#include <libcitadel.h>
 #include "citadel.h"
 #include "server.h"
 #include "control.h"
 #include "config.h"
 #include "msgbase.h"
 #include "citserver.h"
-#include "tools.h"
 #include "room_ops.h"
 #include "user_ops.h"
 #include "database.h"
+#include "threads.h"
 
 #ifndef HAVE_SNPRINTF
 #include "snprintf.h"
@@ -65,8 +66,8 @@ 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");
+               CtdlLogPrintf(CTDL_EMERG, "citserver: unable to lock %s.\n", file_citadel_control);
+               CtdlLogPrintf(CTDL_EMERG, "Is another citserver already running?\n");
                exit(CTDLEXIT_CONTROL);
        }
 #endif
@@ -162,7 +163,7 @@ void get_control(void)
                }
        }
        if (control_fp == NULL) {
-               lprintf(CTDL_ALERT, "ERROR opening %s: %s\n",
+               CtdlLogPrintf(CTDL_ALERT, "ERROR opening %s: %s\n",
                                file_citadel_control,
                                strerror(errno));
                return;
@@ -212,6 +213,23 @@ long get_new_message_number(void)
 }
 
 
+/*
+ * CtdlGetCurrentMessageNumber()  -  Obtain the current highest message number in the system
+ * This provides a quick way to initialise a variable that might be used to indicate
+ * messages that should not be processed. EG. a new Sieve script will use this
+ * to record determine that messages older than this should not be processed.
+ */
+long CtdlGetCurrentMessageNumber(void)
+{
+       long retval = 0L;
+       begin_critical_section(S_CONTROL);
+       get_control();
+       retval = CitControl.MMhighest;
+       end_critical_section(S_CONTROL);
+       return(retval);
+}
+
+
 /*
  * get_new_user_number()  -  Obtain a new, unique ID to be used for a user.
  */
@@ -329,6 +347,11 @@ void cmd_conf(char *argbuf)
                cprintf("%s\n", config.c_master_user);
                cprintf("%s\n", config.c_master_pass);
                cprintf("%s\n", config.c_pager_program);
+               cprintf("%d\n", config.c_imap_keep_from);
+               cprintf("%d\n", config.c_xmpp_c2s_port);
+               cprintf("%d\n", config.c_xmpp_s2s_port);
+               cprintf("%ld\n", config.c_pop3_fetch);
+               cprintf("%ld\n", config.c_pop3_fastest);
                cprintf("000\n");
        }
 
@@ -336,7 +359,7 @@ void cmd_conf(char *argbuf)
                unbuffer_output();
                cprintf("%d Send configuration...\n", SEND_LISTING);
                a = 0;
-               while (client_getln(buf, sizeof buf), strcmp(buf, "000")) {
+               while (client_getln(buf, sizeof buf) >= 0 && strcmp(buf, "000")) {
                        switch (a) {
                        case 0:
                                safestrncpy(config.c_nodename, buf,
@@ -567,6 +590,21 @@ void cmd_conf(char *argbuf)
                                        buf,
                                        sizeof config.c_pager_program);
                                break;
+                       case 61:
+                               config.c_imap_keep_from = atoi(buf);
+                               break;
+                       case 62:
+                               config.c_xmpp_c2s_port = atoi(buf);
+                               break;
+                       case 63:
+                               config.c_xmpp_s2s_port = atoi(buf);
+                               break;
+                       case 64:
+                               config.c_pop3_fetch = atol(buf);
+                               break;
+                       case 65:
+                               config.c_pop3_fastest = atol(buf);
+                               break;
                        }
                        ++a;
                }