More conversion to the new config system. WARNING BROKEN BUILD
[citadel.git] / citadel / control.c
index 0aba124044914bd9b1a2619d21933924ef5999f0..01f3d5fc85d80397b22d826a26f198a0ac351c89 100644 (file)
@@ -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 <stdio.h>
@@ -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", 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_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",         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,13 +636,13 @@ 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);
                                break;
                        case 71:
-                               config.c_nntp_port = atoi(buf);
+                               config.c_nntps_port = atoi(buf);
                                break;
                        }
                        ++a;
@@ -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();
                }
        }