]> code.citadel.org Git - citadel.git/blobdiff - citadel/config.c
we need to free the array _after_ releasing the array entries
[citadel.git] / citadel / config.c
index 5328e30369149a50d2c04939d0c6469b1557a17f..7ac1a748bbd478e8ece0e5c6c5b566e62f690e40 100644 (file)
  */
 
 #include "sysdep.h"
-#include <stdlib.h>
-#include <sys/stat.h>
-#include <unistd.h>
 #include <stdio.h>
-#include <errno.h>
-#include <string.h>
-#include <limits.h>
 #include <sys/utsname.h>
 #include <libcitadel.h>
-#include "citadel.h"
-#include "server.h"
 #include "config.h"
 #include "ctdl_module.h"
 
@@ -61,7 +53,6 @@ void brand_new_installation_set_defaults(void) {
        safestrncpy(config.c_aideroom, "Aide", sizeof config.c_aideroom);
        config.c_port_number = 504;
        config.c_sleeping = 900;
-       config.c_instant_expunge = 1;
 
        if (config.c_ctdluid == 0) {
                pw = getpwnam("citadel");
@@ -197,6 +188,7 @@ void get_config(void) {
        }
 }
 
+long config_msgnum = 0;
 
 /*
  * Occasionally, we will need to write the config file, because some operations
@@ -218,3 +210,62 @@ void put_config(void)
        }
        syslog(LOG_EMERG, "%s: %s", file_citadel_config, strerror(errno));
 }
+
+
+
+void CtdlGetSysConfigBackend(long msgnum, void *userdata) {
+       config_msgnum = msgnum;
+}
+
+
+char *CtdlGetSysConfig(char *sysconfname) {
+       char hold_rm[ROOMNAMELEN];
+       long msgnum;
+       char *conf;
+       struct CtdlMessage *msg;
+       char buf[SIZ];
+       
+       strcpy(hold_rm, CC->room.QRname);
+       if (CtdlGetRoom(&CC->room, SYSCONFIGROOM) != 0) {
+               CtdlGetRoom(&CC->room, hold_rm);
+               return NULL;
+       }
+
+
+       /* We want the last (and probably only) config in this room */
+       begin_critical_section(S_CONFIG);
+       config_msgnum = (-1L);
+       CtdlForEachMessage(MSGS_LAST, 1, NULL, sysconfname, NULL,
+                          CtdlGetSysConfigBackend, NULL);
+       msgnum = config_msgnum;
+       end_critical_section(S_CONFIG);
+
+       if (msgnum < 0L) {
+               conf = NULL;
+       }
+       else {
+               msg = CtdlFetchMessage(msgnum, 1);
+               if (msg != NULL) {
+                       conf = strdup(msg->cm_fields[eMesageText]);
+                       CM_Free(msg);
+               }
+               else {
+                       conf = NULL;
+               }
+       }
+
+       CtdlGetRoom(&CC->room, hold_rm);
+
+       if (conf != NULL) do {
+                       extract_token(buf, conf, 0, '\n', sizeof buf);
+                       strcpy(conf, &conf[strlen(buf)+1]);
+               } while ( (!IsEmptyStr(conf)) && (!IsEmptyStr(buf)) );
+
+       return(conf);
+}
+
+
+void CtdlPutSysConfig(char *sysconfname, char *sysconfdata) {
+       CtdlWriteObject(SYSCONFIGROOM, sysconfname, sysconfdata, (strlen(sysconfdata)+1), NULL, 0, 1, 0);
+}
+