X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Fcontrol.c;h=01f3d5fc85d80397b22d826a26f198a0ac351c89;hb=1ce87e9f74acae1f6c294bc19189542b859a466b;hp=2a608eee014a24a78887f6a0c9e62c593dc57208;hpb=6f49b72635d2c113c126eab5579fc5f1a8928bc6;p=citadel.git diff --git a/citadel/control.c b/citadel/control.c index 2a608eee0..01f3d5fc8 100644 --- a/citadel/control.c +++ b/citadel/control.c @@ -1,15 +1,15 @@ /* * This module handles states which are global to the entire server. * - * 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. + * 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. * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. */ #include @@ -22,7 +22,6 @@ #include "user_ops.h" struct CitControl CitControl; -extern struct config config; FILE *control_fp = NULL; long control_highest_user = 0; @@ -133,7 +132,7 @@ void get_control(void) control_fp = fopen(file_citadel_control, "rb+"); if (control_fp != NULL) { lock_control(); - rv = fchown(fileno(control_fp), config.c_ctdluid, -1); + rv = fchown(fileno(control_fp), ctdluid, -1); if (rv == -1) syslog(LOG_EMERG, "Failed to adjust ownership of: %s [%s]\n", file_citadel_control, strerror(errno)); @@ -149,7 +148,7 @@ void get_control(void) lock_control(); memset(&CitControl, 0, sizeof(struct CitControl)); - rv = fchown(fileno(control_fp), config.c_ctdluid, -1); + rv = fchown(fileno(control_fp), ctdluid, -1); if (rv == -1) syslog(LOG_EMERG, "Failed to adjust ownership of: %s [%s]\n", file_citadel_control, strerror(errno)); @@ -176,7 +175,7 @@ void get_control(void) syslog(LOG_EMERG, "Failed to read Controlfile: %s [%s]\n", file_citadel_control, strerror(errno)); already_have_control = 1; - rv = chown(file_citadel_control, config.c_ctdluid, (-1)); + rv = chown(file_citadel_control, ctdluid, (-1)); if (rv == -1) syslog(LOG_EMERG, "Failed to adjust ownership of: %s [%s]\n", file_citadel_control, strerror(errno)); @@ -289,6 +288,17 @@ long get_new_room_number(void) +/* + * Helper function for cmd_conf() to handle boolean values + */ +int confbool(char *v) +{ + if (IsEmptyStr(v)) return(0); + if (atoi(v) != 0) return(1); + return(0); +} + + /* * Get or set global configuration options * @@ -300,7 +310,8 @@ void cmd_conf(char *argbuf) { char cmd[16]; char buf[256]; - int a; + int a, i; + long ii; char *confptr; char confname[128]; @@ -309,44 +320,44 @@ void cmd_conf(char *argbuf) extract_token(cmd, argbuf, 0, '|', sizeof cmd); if (!strcasecmp(cmd, "GET")) { cprintf("%d Configuration...\n", LISTING_FOLLOWS); - cprintf("%s\n", config.c_nodename); - cprintf("%s\n", config.c_fqdn); - cprintf("%s\n", config.c_humannode); - cprintf("%s\n", config.c_phonenum); - cprintf("%d\n", config.c_creataide); - cprintf("%d\n", config.c_sleeping); - cprintf("%d\n", config.c_initax); - cprintf("%d\n", config.c_regiscall); - cprintf("%d\n", config.c_twitdetect); - cprintf("%s\n", config.c_twitroom); - cprintf("%s\n", config.c_moreprompt); - cprintf("%d\n", config.c_restrict); - cprintf("%s\n", config.c_site_location); - cprintf("%s\n", config.c_sysadm); - cprintf("%d\n", config.c_maxsessions); + cprintf("%s\n", CtdlGetConfigStr("c_nodename")); + cprintf("%s\n", CtdlGetConfigStr("c_fqdn")); + cprintf("%s\n", CtdlGetConfigStr("c_humannode")); + cprintf("xxx\n"); /* placeholder -- field no longer in use */ + cprintf("%d\n", CtdlGetConfigInt("c_creataide")); + cprintf("%d\n", CtdlGetConfigInt("c_sleeping")); + cprintf("%d\n", CtdlGetConfigInt("c_initax")); + cprintf("%d\n", CtdlGetConfigInt("c_regiscall")); + cprintf("%d\n", CtdlGetConfigInt("c_twitdetect")); + cprintf("%s\n", CtdlGetConfigStr("c_twitroom")); + cprintf("%s\n", CtdlGetConfigStr("c_moreprompt")); + cprintf("%d\n", CtdlGetConfigInt("c_restrict")); + cprintf("%s\n", CtdlGetConfigStr("c_site_location")); + cprintf("%s\n", CtdlGetConfigStr("c_sysadm")); + cprintf("%d\n", CtdlGetConfigInt("c_maxsessions")); cprintf("xxx\n"); /* placeholder -- field no longer in use */ - cprintf("%d\n", config.c_userpurge); - cprintf("%d\n", config.c_roompurge); - cprintf("%s\n", config.c_logpages); - cprintf("%d\n", config.c_createax); - cprintf("%ld\n", config.c_maxmsglen); - cprintf("%d\n", config.c_min_workers); - cprintf("%d\n", config.c_max_workers); - cprintf("%d\n", config.c_pop3_port); - cprintf("%d\n", config.c_smtp_port); - cprintf("%d\n", config.c_rfc822_strict_from); - cprintf("%d\n", config.c_aide_zap); - cprintf("%d\n", config.c_imap_port); - cprintf("%ld\n", config.c_net_freq); - cprintf("%d\n", config.c_disable_newu); + cprintf("%d\n", CtdlGetConfigInt("c_userpurge")); + cprintf("%d\n", CtdlGetConfigInt("c_roompurge")); + cprintf("%s\n", CtdlGetConfigStr("c_logpages")); + cprintf("%d\n", CtdlGetConfigInt("c_createax")); + cprintf("%ld\n", CtdlGetConfigLong("c_maxmsglen")); + cprintf("%d\n", CtdlGetConfigInt("c_min_workers")); + cprintf("%d\n", CtdlGetConfigInt("c_max_workers")); + cprintf("%d\n", CtdlGetConfigInt("c_pop3_port")); + cprintf("%d\n", CtdlGetConfigInt("c_smtp_port")); + cprintf("%d\n", CtdlGetConfigInt("c_rfc822_strict_from")); + cprintf("%d\n", CtdlGetConfigInt("c_aide_zap")); + cprintf("%d\n", CtdlGetConfigInt("c_imap_port")); + cprintf("%ld\n", CtdlGetConfigLong("c_net_freq")); + cprintf("%d\n", CtdlGetConfigInt("c_disable_newu")); cprintf("1\n"); /* niu */ - cprintf("%d\n", config.c_purge_hour); + cprintf("%d\n", CtdlGetConfigInt("c_purge_hour")); #ifdef HAVE_LDAP - cprintf("%s\n", config.c_ldap_host); - cprintf("%d\n", config.c_ldap_port); - cprintf("%s\n", config.c_ldap_base_dn); - cprintf("%s\n", config.c_ldap_bind_dn); - cprintf("%s\n", config.c_ldap_bind_pw); + cprintf("%s\n", CtdlGetConfigStr("c_ldap_host")); + cprintf("%d\n", CtdlGetConfigInt("c_ldap_port")); + cprintf("%s\n", CtdlGetConfigStr("c_ldap_base_dn")); + cprintf("%s\n", CtdlGetConfigStr("c_ldap_bind_dn")); + cprintf("%s\n", CtdlGetConfigStr("c_ldap_bind_pw")); #else cprintf("\n"); cprintf("0\n"); @@ -354,41 +365,41 @@ void cmd_conf(char *argbuf) cprintf("\n"); cprintf("\n"); #endif - cprintf("%s\n", config.c_ip_addr); - cprintf("%d\n", config.c_msa_port); - cprintf("%d\n", config.c_imaps_port); - cprintf("%d\n", config.c_pop3s_port); - cprintf("%d\n", config.c_smtps_port); - cprintf("%d\n", config.c_enable_fulltext); - cprintf("%d\n", config.c_auto_cull); + cprintf("%s\n", CtdlGetConfigStr("c_ip_addr")); + cprintf("%d\n", CtdlGetConfigInt("c_msa_port")); + cprintf("%d\n", CtdlGetConfigInt("c_imaps_port")); + cprintf("%d\n", CtdlGetConfigInt("c_pop3s_port")); + cprintf("%d\n", CtdlGetConfigInt("c_smtps_port")); + cprintf("%d\n", CtdlGetConfigInt("c_enable_fulltext")); + cprintf("%d\n", CtdlGetConfigInt("c_auto_cull")); cprintf("1\n"); - cprintf("%d\n", config.c_allow_spoofing); - 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("%d\n", config.c_rbl_at_greeting); - 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("%d\n", config.c_spam_flag_only); - cprintf("%d\n", config.c_guest_logins); - cprintf("%d\n", config.c_port_number); - cprintf("%d\n", config.c_ctdluid); - cprintf("%d\n", config.c_nntp_port); - cprintf("%d\n", config.c_nntps_port); + cprintf("%d\n", CtdlGetConfigInt("c_allow_spoofing")); + cprintf("%d\n", CtdlGetConfigInt("c_journal_email")); + cprintf("%d\n", CtdlGetConfigInt("c_journal_pubmsgs")); + cprintf("%s\n", CtdlGetConfigStr("c_journal_dest")); + cprintf("%s\n", CtdlGetConfigStr("c_default_cal_zone")); + cprintf("%d\n", CtdlGetConfigInt("c_pftcpdict_port")); + cprintf("%d\n", CtdlGetConfigInt("c_managesieve_port")); + cprintf("%d\n", CtdlGetConfigInt("c_auth_mode")); + cprintf("%s\n", CtdlGetConfigStr("c_funambol_host")); + cprintf("%d\n", CtdlGetConfigInt("c_funambol_port")); + cprintf("%s\n", CtdlGetConfigStr("c_funambol_source")); + cprintf("%s\n", CtdlGetConfigStr("c_funambol_auth")); + cprintf("%d\n", CtdlGetConfigInt("c_rbl_at_greeting")); + cprintf("%s\n", CtdlGetConfigStr("c_master_user")); + cprintf("%s\n", CtdlGetConfigStr("c_master_pass")); + cprintf("%s\n", CtdlGetConfigStr("c_pager_program")); + cprintf("%d\n", CtdlGetConfigInt("c_imap_keep_from")); + cprintf("%d\n", CtdlGetConfigInt("c_xmpp_c2s_port")); + cprintf("%d\n", CtdlGetConfigInt("c_xmpp_s2s_port")); + cprintf("%ld\n", CtdlGetConfigLong("c_pop3_fetch")); + cprintf("%ld\n", CtdlGetConfigLong("c_pop3_fastest")); + cprintf("%d\n", CtdlGetConfigInt("c_spam_flag_only")); + cprintf("%d\n", CtdlGetConfigInt("c_guest_logins")); + cprintf("%d\n", CtdlGetConfigInt("c_port_number")); + cprintf("%d\n", ctdluid); + cprintf("%d\n", CtdlGetConfigInt("c_nntp_port")); + cprintf("%d\n", CtdlGetConfigInt("c_nntps_port")); cprintf("000\n"); } @@ -399,125 +410,111 @@ void cmd_conf(char *argbuf) while (client_getln(buf, sizeof buf) >= 0 && strcmp(buf, "000")) { switch (a) { case 0: - configlen.c_nodename = safestrncpy(config.c_nodename, buf, - sizeof config.c_nodename); + CtdlSetConfigStr("c_nodename", buf); break; case 1: - configlen.c_fqdn = safestrncpy(config.c_fqdn, buf, - sizeof config.c_fqdn); + CtdlSetConfigStr("c_fqdn", buf); break; case 2: - configlen.c_humannode = safestrncpy(config.c_humannode, buf, - sizeof config.c_humannode); + CtdlSetConfigStr("c_humannode", buf); break; case 3: - configlen.c_phonenum = safestrncpy(config.c_phonenum, buf, - sizeof config.c_phonenum); + /* placeholder -- field no longer in use */ break; case 4: - config.c_creataide = atoi(buf); + CtdlSetConfigInt("c_creataide", atoi(buf)); break; case 5: - config.c_sleeping = atoi(buf); + CtdlSetConfigInt("c_sleeping", atoi(buf)); break; case 6: - config.c_initax = atoi(buf); - if (config.c_initax < 1) - config.c_initax = 1; - if (config.c_initax > 6) - config.c_initax = 6; + i = atoi(buf); + if (i < 1) i = 1; + if (i > 6) i = 6; + CtdlSetConfigInt("c_initax", i); break; case 7: - config.c_regiscall = atoi(buf); - if (config.c_regiscall != 0) - config.c_regiscall = 1; + CtdlSetConfigInt("c_regiscall", confbool(buf)); break; case 8: - config.c_twitdetect = atoi(buf); - if (config.c_twitdetect != 0) - config.c_twitdetect = 1; + CtdlSetConfigInt("c_twitdetect", confbool(buf)); break; case 9: - configlen.c_twitroom = safestrncpy(config.c_twitroom, buf, - sizeof config.c_twitroom); + CtdlSetConfigStr("c_twitroom", buf); break; case 10: - configlen.c_moreprompt = safestrncpy(config.c_moreprompt, buf, - sizeof config.c_moreprompt); + CtdlSetConfigStr("c_moreprompt", buf); break; case 11: - config.c_restrict = atoi(buf); - if (config.c_restrict != 0) - config.c_restrict = 1; + CtdlSetConfigInt("c_restrict", confbool(buf)); break; case 12: - configlen.c_site_location = safestrncpy( - config.c_site_location, buf, - sizeof config.c_site_location); + CtdlSetConfigInt("c_site_location", confbool(buf)); break; case 13: - configlen.c_sysadm = safestrncpy(config.c_sysadm, buf, - sizeof config.c_sysadm); + CtdlSetConfigInt("c_sysadm", confbool(buf)); break; case 14: - config.c_maxsessions = atoi(buf); - if (config.c_maxsessions < 0) - config.c_maxsessions = 0; + i = atoi(buf); + if (i < 0) i = 0; + CtdlSetConfigInt("c_maxsessions", i); break; case 15: /* placeholder -- field no longer in use */ break; case 16: - config.c_userpurge = atoi(buf); + CtdlSetConfigInt("c_userpurge", atoi(buf)); break; case 17: - config.c_roompurge = atoi(buf); + CtdlSetConfigInt("c_roompurge", atoi(buf)); break; case 18: - configlen.c_logpages = safestrncpy(config.c_logpages, buf, - sizeof config.c_logpages); + CtdlSetConfigStr("c_logpages", buf); break; case 19: - config.c_createax = atoi(buf); - if (config.c_createax < 1) - config.c_createax = 1; - if (config.c_createax > 6) - config.c_createax = 6; + i = atoi(buf); + if (i < 1) i = 1; + if (i > 6) i = 6; + CtdlSetConfigInt("c_createax", i); break; case 20: - if (atoi(buf) >= 8192) - config.c_maxmsglen = atoi(buf); + ii = atol(buf); + if (ii >= 8192) { + CtdlSetConfigLong("c_maxmsglen", ii); + } break; case 21: - if (atoi(buf) >= 2) - config.c_min_workers = atoi(buf); + i = atoi(buf); + if (i >= 3) { // minimum value + CtdlSetConfigInt("c_min_workers", i); + } + break; case 22: - if (atoi(buf) >= config.c_min_workers) - config.c_max_workers = atoi(buf); + i = atoi(buf); + if (i >= CtdlGetConfigInt("c_min_workers")) { // max must be >= min + CtdlSetConfigInt("c_max_workers", i); + } + break; case 23: - config.c_pop3_port = atoi(buf); + CtdlSetConfigInt("c_pop3_port", atoi(buf)); break; case 24: - config.c_smtp_port = atoi(buf); + CtdlSetConfigInt("c_smtp_port", atoi(buf)); break; case 25: - config.c_rfc822_strict_from = atoi(buf); + CtdlSetConfigInt("c_rfc822_strict_from", atoi(buf)); break; case 26: - config.c_aide_zap = atoi(buf); - if (config.c_aide_zap != 0) - config.c_aide_zap = 1; + CtdlSetConfigInt("c_aide_zap", confbool(buf)); break; case 27: - config.c_imap_port = atoi(buf); + CtdlSetConfigInt("c_imap_port", atoi(buf)); break; case 28: - config.c_net_freq = atol(buf); + CtdlSetConfigLong("c_net_freq", atol(buf)); break; case 29: - config.c_disable_newu = atoi(buf); - if (config.c_disable_newu != 0) - config.c_disable_newu = 1; + CtdlSetConfigInt("c_disable_newu", confbool(buf)); break; case 30: /* niu */ @@ -530,28 +527,23 @@ void cmd_conf(char *argbuf) break; #ifdef HAVE_LDAP case 32: - configlen.c_ldap_host = safestrncpy(config.c_ldap_host, buf, - sizeof config.c_ldap_host); + safestrncpy(config.c_ldap_host, buf, sizeof config.c_ldap_host); break; case 33: config.c_ldap_port = atoi(buf); break; case 34: - configlen.c_ldap_base_dn = safestrncpy(config.c_ldap_base_dn, buf, - sizeof config.c_ldap_base_dn); + safestrncpy(config.c_ldap_base_dn, buf, sizeof config.c_ldap_base_dn); break; case 35: - configlen.c_ldap_bind_dn = safestrncpy(config.c_ldap_bind_dn, buf, - sizeof config.c_ldap_bind_dn); + safestrncpy(config.c_ldap_bind_dn, buf, sizeof config.c_ldap_bind_dn); break; case 36: - configlen.c_ldap_bind_pw = safestrncpy(config.c_ldap_bind_pw, buf, - sizeof config.c_ldap_bind_pw); + safestrncpy(config.c_ldap_bind_pw, buf, sizeof config.c_ldap_bind_pw); break; #endif case 37: - configlen.c_ip_addr = safestrncpy(config.c_ip_addr, buf, - sizeof config.c_ip_addr); + safestrncpy(config.c_ip_addr, buf, sizeof config.c_ip_addr); case 38: config.c_msa_port = atoi(buf); break; @@ -583,12 +575,9 @@ void cmd_conf(char *argbuf) config.c_journal_pubmsgs = atoi(buf); break; case 48: - configlen.c_journal_dest = safestrncpy(config.c_journal_dest, buf, - sizeof config.c_journal_dest); + safestrncpy(config.c_journal_dest, buf, sizeof config.c_journal_dest); case 49: - configlen.c_default_cal_zone = safestrncpy( - config.c_default_cal_zone, buf, - sizeof config.c_default_cal_zone); + safestrncpy(config.c_default_cal_zone, buf, sizeof config.c_default_cal_zone); break; case 50: config.c_pftcpdict_port = atoi(buf); @@ -599,38 +588,28 @@ void cmd_conf(char *argbuf) case 52: config.c_auth_mode = atoi(buf); case 53: - configlen.c_funambol_host = safestrncpy( - config.c_funambol_host, buf, - sizeof config.c_funambol_host); + safestrncpy(config.c_funambol_host, buf, sizeof config.c_funambol_host); break; case 54: config.c_funambol_port = atoi(buf); break; case 55: - configlen.c_funambol_source = safestrncpy( - config.c_funambol_source, buf, - sizeof config.c_funambol_source); + safestrncpy(config.c_funambol_source, buf, sizeof config.c_funambol_source); break; case 56: - configlen.c_funambol_auth = safestrncpy( - config.c_funambol_auth, buf, - sizeof config.c_funambol_auth); + safestrncpy(config.c_funambol_auth, buf, sizeof config.c_funambol_auth); break; case 57: config.c_rbl_at_greeting = atoi(buf); break; case 58: - configlen.c_master_user = safestrncpy( - config.c_master_user, - buf, sizeof config.c_master_user); + safestrncpy(config.c_master_user, buf, sizeof config.c_master_user); break; case 59: - configlen.c_master_pass = safestrncpy( - config.c_master_pass, buf, sizeof config.c_master_pass); + safestrncpy(config.c_master_pass, buf, sizeof config.c_master_pass); break; case 60: - configlen.c_pager_program = safestrncpy( - config.c_pager_program, buf, sizeof config.c_pager_program); + safestrncpy(config.c_pager_program, buf, sizeof config.c_pager_program); break; case 61: config.c_imap_keep_from = atoi(buf); @@ -657,7 +636,7 @@ void cmd_conf(char *argbuf) config.c_port_number = atoi(buf); break; case 69: - config.c_ctdluid = atoi(buf); + /* niu */ break; case 70: config.c_nntp_port = atoi(buf); @@ -682,7 +661,7 @@ void cmd_conf(char *argbuf) * index so it doesn't try to use it later. */ if (config.c_enable_fulltext == 0) { - CitControl.fulltext_wordbreaker = 0; + CitControl.MM_fulltext_wordbreaker = 0; put_control(); } }