Removed the whole configlen thing. Seriously, WTF?
[citadel.git] / citadel / config.c
index 5aee1d72a42782073bef40e060648709db8dd09e..e30f098a28a719ee5c28a0c54fa64f3f451525fc 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Read and write the citadel.config file
  *
- * Copyright (c) 1987-2014 by the citadel.org team
+ * Copyright (c) 1987-2015 by the citadel.org team
  *
  * This program is open source software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 3.
 #include "ctdl_module.h"
 
 struct config config;
-struct configlen configlen;
+
+#define STR_NOT_EMPTY(CFG_FIELDNAME) if (IsEmptyStr(config.CFG_FIELDNAME)) \
+               syslog(LOG_EMERG, "configuration setting "#CFG_FIELDNAME" is empty, but must not - check your config!");
+
+#define TEST_PORT(CFG_PORT, DEFAULTPORT)                       \
+       if ((config.CFG_PORT < -1) ||           \
+           (config.CFG_PORT == 0) ||           \
+           (config.CFG_PORT > UINT16_MAX))     \
+               syslog(LOG_EMERG, "configuration setting "#CFG_PORT" is not -1 (disabled) or a valid TCP-Port - check your config! Default setting is: "#DEFAULTPORT);
+                       
+
+void validate_config(void) {
+/* these shouldn't be empty: */
+       STR_NOT_EMPTY(c_fqdn);
+
+       STR_NOT_EMPTY(c_baseroom);
+       STR_NOT_EMPTY(c_aideroom);
+       STR_NOT_EMPTY(c_twitroom);
+       STR_NOT_EMPTY(c_nodename);
+       STR_NOT_EMPTY(c_default_cal_zone);
+
+/* we bind a lot of ports: */
+       TEST_PORT(c_smtp_port, 25);
+       TEST_PORT(c_pop3_port, 110);
+       TEST_PORT(c_imap_port, 143);
+       TEST_PORT(c_msa_port, 587);
+       TEST_PORT(c_port_number, 504);
+       TEST_PORT(c_smtps_port, 465);
+       TEST_PORT(c_pop3s_port, 995);
+       TEST_PORT(c_imaps_port, 993);
+       TEST_PORT(c_pftcpdict_port, -1);
+       TEST_PORT(c_managesieve_port, 2020);
+       TEST_PORT(c_xmpp_c2s_port, 5222);
+       TEST_PORT(c_xmpp_s2s_port, 5269);
+       TEST_PORT(c_nntp_port, 119);
+       TEST_PORT(c_nntps_port, 563);
+
+       if (config.c_ctdluid == 0)
+               syslog(LOG_EMERG, "citadel should not be configured to run as root! Check the value of c_ctdluid");
+       else if (getpwuid(CTDLUID) == NULL)
+               syslog(LOG_EMERG, "The UID (%d) citadel is configured to use is not defined in your system (/etc/passwd?)! Check the value of c_ctdluid", CTDLUID);
+       
+}
 
 /*
  * Put some sane default values into our configuration.  Some will be overridden when we run setup.
@@ -33,25 +75,25 @@ void brand_new_installation_set_defaults(void) {
 
        /* Determine our host name, in case we need to use it as a default */
        uname(&my_utsname);
-       memset(&configlen, 0, sizeof(struct configlen));
+
        /* set some sample/default values in place of blanks... */
-       configlen.c_nodename = extract_token(config.c_nodename, my_utsname.nodename, 0, '.', sizeof config.c_nodename);
+       extract_token(config.c_nodename, my_utsname.nodename, 0, '.', sizeof config.c_nodename);
        if (IsEmptyStr(config.c_fqdn) ) {
                if ((he = gethostbyname(my_utsname.nodename)) != NULL) {
-                       configlen.c_fqdn = safestrncpy(config.c_fqdn, he->h_name, sizeof config.c_fqdn);
+                       safestrncpy(config.c_fqdn, he->h_name, sizeof config.c_fqdn);
                }
                else {
-                       configlen.c_fqdn = safestrncpy(config.c_fqdn, my_utsname.nodename, sizeof config.c_fqdn);
+                       safestrncpy(config.c_fqdn, my_utsname.nodename, sizeof config.c_fqdn);
                }
        }
 
-       configlen.c_humannode = safestrncpy(config.c_humannode, "Citadel Server", sizeof config.c_humannode);
-       configlen.c_phonenum = safestrncpy(config.c_phonenum, "US 800 555 1212", sizeof config.c_phonenum);
+       safestrncpy(config.c_humannode, "Citadel Server", sizeof config.c_humannode);
+       safestrncpy(config.c_phonenum, "US 800 555 1212", sizeof config.c_phonenum);
        config.c_initax = 4;
-       configlen.c_moreprompt = safestrncpy(config.c_moreprompt, "<more>", sizeof config.c_moreprompt);
-       configlen.c_twitroom = safestrncpy(config.c_twitroom, "Trashcan", sizeof config.c_twitroom);
-       configlen.c_baseroom = safestrncpy(config.c_baseroom, BASEROOM, sizeof config.c_baseroom);
-       configlen.c_aideroom = safestrncpy(config.c_aideroom, "Aide", sizeof config.c_aideroom);
+       safestrncpy(config.c_moreprompt, "<more>", sizeof config.c_moreprompt);
+       safestrncpy(config.c_twitroom, "Trashcan", sizeof config.c_twitroom);
+       safestrncpy(config.c_baseroom, BASEROOM, sizeof config.c_baseroom);
+       safestrncpy(config.c_aideroom, "Aide", sizeof config.c_aideroom);
        config.c_port_number = 504;
        config.c_sleeping = 900;
 
@@ -92,39 +134,13 @@ void brand_new_installation_set_defaults(void) {
        config.c_xmpp_c2s_port = 5222;
        config.c_xmpp_s2s_port = 5269;
        config.c_nntp_port = 119;
+       config.c_nntps_port = 563;
 }
 
-void setcfglen(void)
-{
-       configlen.c_nodename = strlen(config.c_nodename);
-       configlen.c_fqdn = strlen(config.c_fqdn);
-       configlen.c_humannode = strlen(config.c_humannode);
-       configlen.c_phonenum = strlen(config.c_phonenum);
-       configlen.c_twitroom = strlen(config.c_twitroom);
-       configlen.c_moreprompt = strlen(config.c_moreprompt);
-       configlen.c_site_location = strlen(config.c_site_location);
-       configlen.c_sysadm = strlen(config.c_sysadm);
-       configlen.c_niu_2 = strlen(config.c_niu_2);
-       configlen.c_ip_addr = strlen(config.c_ip_addr);
-       configlen.c_logpages = strlen(config.c_logpages);
-       configlen.c_baseroom = strlen(config.c_baseroom);
-       configlen.c_aideroom = strlen(config.c_aideroom);
-       configlen.c_ldap_host = strlen(config.c_ldap_host);
-       configlen.c_ldap_base_dn = strlen(config.c_ldap_base_dn);
-       configlen.c_ldap_bind_dn = strlen(config.c_ldap_bind_dn);
-       configlen.c_ldap_bind_pw = strlen(config.c_ldap_bind_pw);
-       configlen.c_journal_dest = strlen(config.c_journal_dest);
-       configlen.c_default_cal_zone = strlen(config.c_default_cal_zone);
-       configlen.c_funambol_host = strlen(config.c_funambol_host);
-       configlen.c_funambol_source = strlen(config.c_funambol_source);
-       configlen.c_funambol_auth = strlen(config.c_funambol_auth);
-       configlen.c_master_user = strlen(config.c_master_user);
-       configlen.c_master_pass = strlen(config.c_master_pass);
-       configlen.c_pager_program = strlen(config.c_pager_program);
-}
+
 
 /*
- * get_config() is called during the initialization of Citadel server.
+ * Called during the initialization of Citadel server.
  * It verifies the system's integrity and reads citadel.config into memory.
  */
 void get_config(void) {
@@ -152,7 +168,6 @@ void get_config(void) {
                        );
                }
                fclose(cfp);
-               setcfglen();
        }
        else {
                brand_new_installation_set_defaults();