-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(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;
-}
-
-
-void get_config (void)
-{
- int a;
- int rv;
- FILE *fp;
-
- /*
- * What we're going to try to do here is append a whole bunch of
- * nulls to the citadel.config file, so we can keep the old config
- * values if they exist, but if the file is missing or from an
- * earlier version with a shorter config structure, when setup tries
- * to read the old config parameters, they'll all come up zero.
- * The length of the config file will be set to what it's supposed
- * to be when we rewrite it, because we replace the old file with a
- * completely new copy.
- */
- if ((a = open(file_citadel_config, O_WRONLY | O_CREAT | O_APPEND,
- S_IRUSR | S_IWUSR)) == -1) {
- display_error("%s citadel.config [%s][%s]\n", _("setup: cannot append"), file_citadel_config, strerror(errno));
- cleanup(errno);
- }
- fp = fdopen(a, "ab");
- if (fp == NULL) {
- display_error("%s citadel.config [%s][%s]\n", _("setup: cannot append"), file_citadel_config, strerror(errno));
- cleanup(errno);
- }
- for (a = 0; a < sizeof(struct config); ++a) {
- putc(0, fp);
- }
- fclose(fp);