+ /*
+ * Default port numbers for various services
+ */
+ CtdlSetConfigInt("c_port_number", 504);
+ CtdlSetConfigInt("c_smtp_port", 25);
+ CtdlSetConfigInt("c_pop3_port", 110);
+ CtdlSetConfigInt("c_imap_port", 143);
+ CtdlSetConfigInt("c_msa_port", 587);
+ CtdlSetConfigInt("c_smtps_port", 465);
+ CtdlSetConfigInt("c_pop3s_port", 995);
+ CtdlSetConfigInt("c_imaps_port", 993);
+ CtdlSetConfigInt("c_pftcpdict_port", -1);
+ CtdlSetConfigInt("c_xmpp_c2s_port", 5222);
+ CtdlSetConfigInt("c_xmpp_s2s_port", 5269);
+ CtdlSetConfigInt("c_nntp_port", 119);
+ CtdlSetConfigInt("c_nntps_port", 563);
+
+ /*
+ * Prevent the "new installation, set defaults" behavior from occurring again
+ */
+ CtdlSetConfigLong("c_config_created_or_migrated", (long)time(NULL));
+}
+
+
+/*
+ * Migrate a supplied legacy configuration to the new in-db format.
+ * No individual site should ever have to do this more than once.
+ */
+void migrate_legacy_config(struct legacy_config *lconfig)
+{
+ CtdlSetConfigStr( "c_nodename" , lconfig->c_nodename );
+ CtdlSetConfigStr( "c_fqdn" , lconfig->c_fqdn );
+ CtdlSetConfigStr( "c_humannode" , lconfig->c_humannode );
+ CtdlSetConfigInt( "c_creataide" , lconfig->c_creataide );
+ CtdlSetConfigInt( "c_sleeping" , lconfig->c_sleeping );
+ CtdlSetConfigInt( "c_initax" , lconfig->c_initax );
+ CtdlSetConfigInt( "c_regiscall" , lconfig->c_regiscall );
+ CtdlSetConfigInt( "c_twitdetect" , lconfig->c_twitdetect );
+ CtdlSetConfigStr( "c_twitroom" , lconfig->c_twitroom );
+ CtdlSetConfigStr( "c_moreprompt" , lconfig->c_moreprompt );
+ CtdlSetConfigInt( "c_restrict" , lconfig->c_restrict );
+ CtdlSetConfigStr( "c_site_location" , lconfig->c_site_location );
+ CtdlSetConfigStr( "c_sysadm" , lconfig->c_sysadm );
+ CtdlSetConfigInt( "c_maxsessions" , lconfig->c_maxsessions );
+ CtdlSetConfigStr( "c_ip_addr" , lconfig->c_ip_addr );
+ CtdlSetConfigInt( "c_port_number" , lconfig->c_port_number );
+ CtdlSetConfigInt( "c_ep_mode" , lconfig->c_ep.expire_mode );
+ CtdlSetConfigInt( "c_ep_value" , lconfig->c_ep.expire_value );
+ CtdlSetConfigInt( "c_userpurge" , lconfig->c_userpurge );
+ CtdlSetConfigInt( "c_roompurge" , lconfig->c_roompurge );
+ CtdlSetConfigStr( "c_logpages" , lconfig->c_logpages );
+ CtdlSetConfigInt( "c_createax" , lconfig->c_createax );
+ CtdlSetConfigLong( "c_maxmsglen" , lconfig->c_maxmsglen );
+ CtdlSetConfigInt( "c_min_workers" , lconfig->c_min_workers );
+ CtdlSetConfigInt( "c_max_workers" , lconfig->c_max_workers );
+ CtdlSetConfigInt( "c_pop3_port" , lconfig->c_pop3_port );
+ CtdlSetConfigInt( "c_smtp_port" , lconfig->c_smtp_port );
+ CtdlSetConfigInt( "c_rfc822_strict_from" , lconfig->c_rfc822_strict_from );
+ CtdlSetConfigInt( "c_aide_zap" , lconfig->c_aide_zap );
+ CtdlSetConfigInt( "c_imap_port" , lconfig->c_imap_port );
+ CtdlSetConfigLong( "c_net_freq" , lconfig->c_net_freq );
+ CtdlSetConfigInt( "c_disable_newu" , lconfig->c_disable_newu );
+ CtdlSetConfigInt( "c_enable_fulltext" , lconfig->c_enable_fulltext );
+ CtdlSetConfigStr( "c_baseroom" , lconfig->c_baseroom );
+ CtdlSetConfigStr( "c_aideroom" , lconfig->c_aideroom );
+ CtdlSetConfigInt( "c_purge_hour" , lconfig->c_purge_hour );
+ CtdlSetConfigInt( "c_mbxep_mode" , lconfig->c_mbxep.expire_mode );
+ CtdlSetConfigInt( "c_mbxep_value" , lconfig->c_mbxep.expire_value );
+ CtdlSetConfigStr( "c_ldap_host" , lconfig->c_ldap_host );
+ CtdlSetConfigInt( "c_ldap_port" , lconfig->c_ldap_port );
+ CtdlSetConfigStr( "c_ldap_base_dn" , lconfig->c_ldap_base_dn );
+ CtdlSetConfigStr( "c_ldap_bind_dn" , lconfig->c_ldap_bind_dn );
+ CtdlSetConfigStr( "c_ldap_bind_pw" , lconfig->c_ldap_bind_pw );
+ CtdlSetConfigInt( "c_msa_port" , lconfig->c_msa_port );
+ CtdlSetConfigInt( "c_imaps_port" , lconfig->c_imaps_port );
+ CtdlSetConfigInt( "c_pop3s_port" , lconfig->c_pop3s_port );
+ CtdlSetConfigInt( "c_smtps_port" , lconfig->c_smtps_port );
+ CtdlSetConfigInt( "c_auto_cull" , lconfig->c_auto_cull );
+ CtdlSetConfigInt( "c_allow_spoofing" , lconfig->c_allow_spoofing );
+ CtdlSetConfigInt( "c_journal_email" , lconfig->c_journal_email );
+ CtdlSetConfigInt( "c_journal_pubmsgs" , lconfig->c_journal_pubmsgs );
+ CtdlSetConfigStr( "c_journal_dest" , lconfig->c_journal_dest );
+ CtdlSetConfigStr( "c_default_cal_zone" , lconfig->c_default_cal_zone );
+ CtdlSetConfigInt( "c_pftcpdict_port" , lconfig->c_pftcpdict_port );
+ CtdlSetConfigInt( "c_auth_mode" , lconfig->c_auth_mode );
+ CtdlSetConfigInt( "c_rbl_at_greeting" , lconfig->c_rbl_at_greeting );
+ CtdlSetConfigStr( "c_pager_program" , lconfig->c_pager_program );
+ CtdlSetConfigInt( "c_imap_keep_from" , lconfig->c_imap_keep_from );
+ CtdlSetConfigInt( "c_xmpp_c2s_port" , lconfig->c_xmpp_c2s_port );
+ CtdlSetConfigInt( "c_xmpp_s2s_port" , lconfig->c_xmpp_s2s_port );
+ CtdlSetConfigLong( "c_pop3_fetch" , lconfig->c_pop3_fetch );
+ CtdlSetConfigLong( "c_pop3_fastest" , lconfig->c_pop3_fastest );
+ CtdlSetConfigInt( "c_spam_flag_only" , lconfig->c_spam_flag_only );
+ CtdlSetConfigInt( "c_guest_logins" , lconfig->c_guest_logins );
+ CtdlSetConfigInt( "c_nntp_port" , lconfig->c_nntp_port );
+ CtdlSetConfigInt( "c_nntps_port" , lconfig->c_nntps_port );
+}
+
+
+/*
+ * Called during the initialization of Citadel server.
+ * It verifies the system's integrity and reads citadel.config into memory.
+ */
+void initialize_config_system(void) {
+ FILE *cfp;
+ int rv;
+ struct legacy_config lconfig; // legacy configuration
+ ctdlconfig = NewHash(1, NULL); // set up the real config system