*
*/
+#define SHOW_ME_VAPPEND_PRINTF
+
#include "ctdl_module.h"
/*
* Offer to disable other MTA's
*/
-void disable_other_mta(char *mta) {
+void disable_other_mta(const char *mta) {
char buf[SIZ];
FILE *fp;
int lines = 0;
rv = system(buf);
}
+const char *other_mtas[] = {
+ "courier-authdaemon",
+ "courier-imap",
+ "courier-imap-ssl",
+ "courier-pop",
+ "courier-pop3",
+ "courier-pop3d",
+ "cyrmaster",
+ "cyrus",
+ "dovecot",
+ "exim",
+ "exim4",
+ "imapd",
+ "mta",
+ "pop3d",
+ "popd",
+ "postfix",
+ "qmail",
+ "saslauthd",
+ "sendmail",
+ "vmailmgrd",
+ ""
+};
-
+void disable_other_mtas(void)
+{
+ int i = 0;
+ if ((getenv("ACT_AS_MTA") == NULL) ||
+ (getenv("ACT_AS_MTA") &&
+ strcasecmp(getenv("ACT_AS_MTA"), "yes") == 0)) {
+ /* Offer to disable other MTA's on the system. */
+ while (!IsEmptyStr(other_mtas[i]))
+ {
+ disable_other_mta(other_mtas[i]);
+ i++;
+ }
+ }
+}
/*
* Check to see if our server really works. Returns 0 on success.
+void migrate_old_installs(void)
+{
+ int rv;
+ rv = system("exec /bin/rm -fr ./rooms ./chatpipes ./expressmsgs ./sessions 2>/dev/null");
+ unlink("citadel.log");
+ unlink("weekly");
+}
/*
unlink(new_filename);
}
+void check_init_script (char *relhome)
+{
+ int rv;
+ FILE *fp;
+
+ /*
+ * If we're running on SysV, install init scripts.
+ */
+ if (!access("/var/run", W_OK)) {
+
+ if (getenv("NO_INIT_SCRIPTS") == NULL) {
+ install_init_scripts();
+ }
+
+ if (!access("/etc/init.d/citadel", X_OK)) {
+ rv = system("/etc/init.d/citadel start");
+ sleep(3);
+ }
+
+ if (test_server(setup_directory, relhome, enable_home) == 0) {
+ char buf[SIZ];
+ int found_it = 0;
+
+ if (config.c_auth_mode == AUTHMODE_NATIVE) {
+ snprintf (admin_cmd, sizeof(admin_cmd), "%s/sendcommand \"CREU %s|%s\" 2>&1",
+ ctdl_sbin_dir, config.c_sysadm, admin_pass);
+ fp = popen(admin_cmd, "r");
+ if (fp != NULL) {
+ while (fgets(buf, sizeof buf, fp) != NULL)
+ {
+ if ((atol(buf) == 574) || (atol(buf) == 200))
+ ++found_it;
+ }
+ pclose(fp);
+ }
+
+ if (found_it == 0) {
+ important_message("Error","Setup failed to create your admin user");
+ }
+ }
+
+ if (setup_type != UI_SILENT)
+ important_message("Setup finished",
+ "Setup of the Citadel server is complete.\n"
+ "If you will be using WebCit, please run its\n"
+ "setup program now; otherwise, run './citadel'\n"
+ "to log in.\n");
+ }
+ else {
+ important_message("Setup failed",
+ "Setup is finished, but the Citadel server failed to start.\n"
+ "Go back and check your configuration.\n"
+ );
+ }
+
+ }
+
+ else {
+ important_message("Setup finished",
+ "Setup is finished. You may now start the server.");
+ }
+}
+
+void set_default_values(void)
+{
+ struct passwd *pw;
+ struct utsname my_utsname;
+ struct hostent *he;
+ /* Determine our host name, in case we need to use it as a default */
+ uname(&my_utsname);
+ /* set some sample/default values in place of blanks... */
+ if (IsEmptyStr(config.c_nodename))
+ safestrncpy(config.c_nodename, my_utsname.nodename,
+ sizeof config.c_nodename);
+ strtok(config.c_nodename, ".");
+ if (IsEmptyStr(config.c_fqdn) ) {
+ if ((he = gethostbyname(my_utsname.nodename)) != NULL) {
+ safestrncpy(config.c_fqdn, he->h_name, sizeof config.c_fqdn);
+ } else {
+ safestrncpy(config.c_fqdn, my_utsname.nodename, sizeof config.c_fqdn);
+ }
+ }
+ if (IsEmptyStr(config.c_humannode)) {
+ strcpy(config.c_humannode, "My System");
+ }
+ if (IsEmptyStr(config.c_phonenum)) {
+ strcpy(config.c_phonenum, "US 800 555 1212");
+ }
+ if (config.c_initax == 0) {
+ config.c_initax = 4;
+ }
+ if (IsEmptyStr(config.c_moreprompt)) strcpy(config.c_moreprompt, "<more>");
+ if (IsEmptyStr(config.c_twitroom)) strcpy(config.c_twitroom, "Trashcan");
+ if (IsEmptyStr(config.c_baseroom)) strcpy(config.c_baseroom, BASEROOM);
+ if (IsEmptyStr(config.c_aideroom)) strcpy(config.c_aideroom, "Aide");
+ if (config.c_port_number == 0) {
+ config.c_port_number = 504;
+ }
+ if (config.c_sleeping == 0) {
+ config.c_sleeping = 900;
+ }
+ if (config.c_ctdluid == 0) {
+ pw = getpwnam("citadel");
+ if (pw != NULL) {
+ config.c_ctdluid = pw->pw_uid;
+ }
+ }
+ if (config.c_ctdluid == 0) {
+ pw = getpwnam("bbs");
+ if (pw != NULL) {
+ config.c_ctdluid = pw->pw_uid;
+ }
+ }
+ if (config.c_ctdluid == 0) {
+ pw = getpwnam("guest");
+ if (pw != NULL) {
+ config.c_ctdluid = pw->pw_uid;
+ }
+ }
+ if (config.c_createax == 0) {
+ config.c_createax = 3;
+ }
+ /*
+ * Negative values for maxsessions are not allowed.
+ */
+ if (config.c_maxsessions < 0) {
+ config.c_maxsessions = 0;
+ }
+ /* We need a system default message expiry policy, because this is
+ * the top level and there's no 'higher' policy to fall back on.
+ * By default, do not expire messages at all.
+ */
+ if (config.c_ep.expire_mode == 0) {
+ config.c_ep.expire_mode = EXPIRE_MANUAL;
+ config.c_ep.expire_value = 0;
+ }
+ /*
+ * Default port numbers for various services
+ */
+ if (config.c_smtp_port == 0) config.c_smtp_port = 25;
+ if (config.c_pop3_port == 0) config.c_pop3_port = 110;
+ if (config.c_imap_port == 0) config.c_imap_port = 143;
+ if (config.c_msa_port == 0) config.c_msa_port = 587;
+ if (config.c_smtps_port == 0) config.c_smtps_port = 465;
+ if (config.c_pop3s_port == 0) config.c_pop3s_port = 995;
+ if (config.c_imaps_port == 0) config.c_imaps_port = 993;
+ if (config.c_pftcpdict_port == 0) config.c_pftcpdict_port = -1;
+ if (config.c_managesieve_port == 0) config.c_managesieve_port = 2020;
+ if (config.c_xmpp_c2s_port == 0) config.c_xmpp_c2s_port = 5222;
+ if (config.c_xmpp_s2s_port == 0) config.c_xmpp_s2s_port = 5269;
+}
FILE *fp;
int old_setup_level = 0;
int info_only = 0;
- struct utsname my_utsname;
- struct passwd *pw;
- struct hostent *he;
- gid_t gid;
int relh=0;
int home=0;
char relhome[PATH_MAX]="";
char ctdldir[PATH_MAX]=CTDLDIR;
char DefValue[PATH_MAX];
int rv;
+ struct passwd *pw;
+ gid_t gid;
/* set an invalid setup type */
setup_type = (-1);
cleanup(errno);
}
- /* Determine our host name, in case we need to use it as a default */
- uname(&my_utsname);
/* Try to stop Citadel if we can */
if (!access("/etc/init.d/citadel", X_OK)) {
rv = fread((char *) &config, sizeof(struct config), 1, fp);
fclose(fp);
- /* set some sample/default values in place of blanks... */
- if (IsEmptyStr(config.c_nodename))
- safestrncpy(config.c_nodename, my_utsname.nodename,
- sizeof config.c_nodename);
- strtok(config.c_nodename, ".");
- if (IsEmptyStr(config.c_fqdn) ) {
- if ((he = gethostbyname(my_utsname.nodename)) != NULL) {
- safestrncpy(config.c_fqdn, he->h_name, sizeof config.c_fqdn);
- } else {
- safestrncpy(config.c_fqdn, my_utsname.nodename, sizeof config.c_fqdn);
- }
- }
- if (IsEmptyStr(config.c_humannode)) {
- strcpy(config.c_humannode, "My System");
- }
- if (IsEmptyStr(config.c_phonenum)) {
- strcpy(config.c_phonenum, "US 800 555 1212");
- }
- if (config.c_initax == 0) {
- config.c_initax = 4;
- }
- if (IsEmptyStr(config.c_moreprompt)) strcpy(config.c_moreprompt, "<more>");
- if (IsEmptyStr(config.c_twitroom)) strcpy(config.c_twitroom, "Trashcan");
- if (IsEmptyStr(config.c_baseroom)) strcpy(config.c_baseroom, BASEROOM);
- if (IsEmptyStr(config.c_aideroom)) strcpy(config.c_aideroom, "Aide");
- if (config.c_port_number == 0) {
- config.c_port_number = 504;
- }
- if (config.c_sleeping == 0) {
- config.c_sleeping = 900;
- }
- if (config.c_ctdluid == 0) {
- pw = getpwnam("citadel");
- if (pw != NULL) {
- config.c_ctdluid = pw->pw_uid;
- }
- }
- if (config.c_ctdluid == 0) {
- pw = getpwnam("bbs");
- if (pw != NULL) {
- config.c_ctdluid = pw->pw_uid;
- }
- }
- if (config.c_ctdluid == 0) {
- pw = getpwnam("guest");
- if (pw != NULL) {
- config.c_ctdluid = pw->pw_uid;
- }
- }
- if (config.c_createax == 0) {
- config.c_createax = 3;
- }
- /*
- * Negative values for maxsessions are not allowed.
- */
- if (config.c_maxsessions < 0) {
- config.c_maxsessions = 0;
- }
- /* We need a system default message expiry policy, because this is
- * the top level and there's no 'higher' policy to fall back on.
- * By default, do not expire messages at all.
- */
- if (config.c_ep.expire_mode == 0) {
- config.c_ep.expire_mode = EXPIRE_MANUAL;
- config.c_ep.expire_value = 0;
- }
-
- /*
- * Default port numbers for various services
- */
- if (config.c_smtp_port == 0) config.c_smtp_port = 25;
- if (config.c_pop3_port == 0) config.c_pop3_port = 110;
- if (config.c_imap_port == 0) config.c_imap_port = 143;
- if (config.c_msa_port == 0) config.c_msa_port = 587;
- if (config.c_smtps_port == 0) config.c_smtps_port = 465;
- if (config.c_pop3s_port == 0) config.c_pop3s_port = 995;
- if (config.c_imaps_port == 0) config.c_imaps_port = 993;
- if (config.c_pftcpdict_port == 0) config.c_pftcpdict_port = -1;
- if (config.c_managesieve_port == 0) config.c_managesieve_port = 2020;
- if (config.c_xmpp_c2s_port == 0) config.c_xmpp_c2s_port = 5222;
- if (config.c_xmpp_s2s_port == 0) config.c_xmpp_s2s_port = 5269;
+ set_default_values();
/* Go through a series of dialogs prompting for config info */
for (curr = 1; curr <= MAXSETUP; ++curr) {
write_config_to_disk();
-
- /* Delete files and directories used by older Citadel versions */
- rv = system("exec /bin/rm -fr ./rooms ./chatpipes ./expressmsgs ./sessions 2>/dev/null");
- unlink("citadel.log");
- unlink("weekly");
+ migrate_old_installs(); /* Delete files and directories used by older Citadel versions */
if (((setup_type == UI_SILENT) && (getenv("ALTER_ETC_SERVICES")!=NULL)) ||
(setup_type != UI_SILENT))
#ifndef __CYGWIN__
delete_inittab_entry(); /* Remove obsolete /etc/inittab entry */
check_xinetd_entry(); /* Check /etc/xinetd.d/telnet */
+ disable_other_mtas(); /* Offer to disable other MTAs */
- if ((getenv("ACT_AS_MTA") == NULL) ||
- (getenv("ACT_AS_MTA") &&
- strcasecmp(getenv("ACT_AS_MTA"), "yes") == 0)) {
- /* Offer to disable other MTA's on the system. */
- disable_other_mta("courier-authdaemon");
- disable_other_mta("courier-imap");
- disable_other_mta("courier-imap-ssl");
- disable_other_mta("courier-pop");
- disable_other_mta("courier-pop3");
- disable_other_mta("courier-pop3d");
- disable_other_mta("cyrmaster");
- disable_other_mta("cyrus");
- disable_other_mta("dovecot");
- disable_other_mta("exim");
- disable_other_mta("exim4");
- disable_other_mta("imapd");
- disable_other_mta("mta");
- disable_other_mta("pop3d");
- disable_other_mta("popd");
- disable_other_mta("postfix");
- disable_other_mta("qmail");
- disable_other_mta("saslauthd");
- disable_other_mta("sendmail");
- disable_other_mta("vmailmgrd");
- }
#endif
-
- /* Check for the 'db' nss and offer to disable it */
- fixnss();
+ fixnss(); /* Check for the 'db' nss and offer to disable it */
progress("Setting file permissions", 1, 3);
rv = chown(file_citadel_config, config.c_ctdluid, gid);
rv = chmod(file_citadel_config, S_IRUSR | S_IWUSR);
progress("Setting file permissions", 3, 3);
- /*
- * If we're running on SysV, install init scripts.
- */
- if (!access("/var/run", W_OK)) {
-
- if (getenv("NO_INIT_SCRIPTS") == NULL) {
- install_init_scripts();
- }
-
- if (!access("/etc/init.d/citadel", X_OK)) {
- rv = system("/etc/init.d/citadel start");
- sleep(3);
- }
-
- if (test_server(setup_directory, relhome, enable_home) == 0) {
- char buf[SIZ];
- int found_it = 0;
-
- if (config.c_auth_mode == AUTHMODE_NATIVE) {
- snprintf (admin_cmd, sizeof(admin_cmd), "%s/sendcommand \"CREU %s|%s\" 2>&1",
- ctdl_sbin_dir, config.c_sysadm, admin_pass);
- fp = popen(admin_cmd, "r");
- if (fp != NULL) {
- while (fgets(buf, sizeof buf, fp) != NULL)
- {
- if ((atol(buf) == 574) || (atol(buf) == 200))
- ++found_it;
- }
- pclose(fp);
- }
-
- if (found_it == 0) {
- important_message("Error","Setup failed to create your admin user");
- }
- }
-
- if (setup_type != UI_SILENT)
- important_message("Setup finished",
- "Setup of the Citadel server is complete.\n"
- "If you will be using WebCit, please run its\n"
- "setup program now; otherwise, run './citadel'\n"
- "to log in.\n");
- }
- else {
- important_message("Setup failed",
- "Setup is finished, but the Citadel server failed to start.\n"
- "Go back and check your configuration.\n"
- );
- }
-
- }
-
- else {
- important_message("Setup finished",
- "Setup is finished. You may now start the server.");
- }
-
+ check_init_script (relhome);
cleanup(0);
return 0;
}