]> code.citadel.org Git - citadel.git/blobdiff - citadel/utils/setup.c
* get long message texts translateable
[citadel.git] / citadel / utils / setup.c
index 35b04dfb22b18e9cbd0e4f25a419baa19157434a..7a38bc2f731e5205baba9190c59ef226b59f8e1e 100644 (file)
@@ -1,15 +1,9 @@
 /*
- * $Id$
- *
  * Citadel setup utility
- *
  */
 
 #define SHOW_ME_VAPPEND_PRINTF
-
 #include "ctdl_module.h"
-
-
 #include <stdlib.h>
 #include <unistd.h>
 #include <stdio.h>
@@ -76,7 +70,9 @@ typedef enum _SetupStep {
 } eSteupStep;
 
 ///"CREATE_XINETD_ENTRY";
+/* Environment variables, don't translate! */
 const char *EnvNames [eMaxQuestions] = {
+        "HOME_DIRECTORY",
        "SYSADMIN_NAME",
        "SYSADMIN_PW",
        "CITADEL_UID",
@@ -88,106 +84,87 @@ const char *EnvNames [eMaxQuestions] = {
        "LDAP_BASE_DN",
        "LDAP_BIND_DN",
        "LDAP_BIND_PW"
-""
 };
 
 int setup_type;
-char setup_directory[PATH_MAX];
 int using_web_installer = 0;
 int enable_home = 1;
 char admin_pass[SIZ];
 char admin_cmd[SIZ];
 
 const char *setup_titles[eMaxQuestions];
+const char *setup_text[eMaxQuestions];
 
-void SetTitles(void)
-{
-       setup_titles[eCitadelHomeDir] = _("Citadel Home Directory");
-       setup_titles[eSysAdminName] = _("Citadel administrator username:");////
-       setup_titles[eSysAdminPW] = _("Administrator password:");//
-       setup_titles[eUID] = _("Citadel User ID:");
-       setup_titles[eIP_ADDR] = _("Listening address for the Citadel server:");///
-       setup_titles[eCTDL_Port] = _("Server port number:");
-       setup_titles[eAuthType] = _("Authentication method to use:");////
-       setup_titles[eLDAP_Host] = _("LDAP host:");///
-       setup_titles[eLDAP_Port] = _("LDAP port number:");////
-       setup_titles[eLDAP_Base_DN] = _("LDAP base DN:");///
-       setup_titles[eLDAP_Bind_DN] = _("LDAP bind DN:");//
-       setup_titles[eLDAP_Bind_PW] = _("LDAP bind password:");//
-}
-
-/**
- * \brief print the actual stack frame.
- */
-void cit_backtrace(void)
-{
-#ifdef HAVE_BACKTRACE
-       void *stack_frames[50];
-       size_t size, i;
-       char **strings;
-
-
-       size = backtrace(stack_frames, sizeof(stack_frames) / sizeof(void*));
-       strings = backtrace_symbols(stack_frames, size);
-       for (i = 0; i < size; i++) {
-               if (strings != NULL)
-                       fprintf(stderr, "%s\n", strings[i]);
-               else
-                       fprintf(stderr, "%p\n", stack_frames[i]);
-       }
-       free(strings);
-#endif
-}
-
-struct config config;
-
-       /* calculate all our path on a central place */
-    /* where to keep our config */
+/* calculate all our path on a central place */
+/* where to keep our config */
        
 
-char *setup_text[] = {
+
+void SetTitles(void)
+{
+       int have_run_dir;
 #ifndef HAVE_RUN_DIR
+       have_run_dir = 1;
+#else
+       have_run_dir = 0;
+#endif
+       setup_titles[eCitadelHomeDir] = _("Citadel Home Directory");
+       if (have_run_dir)
+               setup_text[eCitadelHomeDir] = _(
 "Enter the full pathname of the directory in which the Citadel\n"
 "installation you are creating or updating resides.  If you\n"
 "specify a directory other than the default, you will need to\n"
-"specify the -h flag to the server when you start it up.\n",
-#else
+"specify the -h flag to the server when you start it up.\n");
+       else
+               setup_text[eCitadelHomeDir] = _(
 "Enter the subdirectory name for an alternate installation of "
 "Citadel. To do a default installation just leave it blank."
 "If you specify a directory other than the default, you will need to\n"
 "specify the -h flag to the server when you start it up.\n"
-"note that it may not have a leading /",
-#endif
+"note that it may not have a leading /");
 
+
+       setup_titles[eSysAdminName] = _("Citadel administrator username:");////
+       setup_text[eSysAdminName] = _(
 "Enter the name of the system administrator (which is probably\n"
 "you).  When an account is created with this name, it will\n"
-"automatically be given administrator-level access.\n",
+"automatically be given administrator-level access.\n");
 
+       setup_titles[eSysAdminPW] = _("Administrator password:");//
+       setup_text[eSysAdminPW] = _(
 "Enter a password for the system administrator. When setup\n"
 "completes it will attempt to create the administrator user\n"
-"and set the password specified here.\n",
+"and set the password specified here.\n");
 
+       setup_titles[eUID] = _("Citadel User ID:");
+       setup_text[eUID] = _(
 "Citadel needs to run under its own user ID.  This would\n"
 "typically be called \"citadel\", but if you are running Citadel\n"
 "as a public BBS, you might also call it \"bbs\" or \"guest\".\n"
 "The server will run under this user ID.  Please specify that\n"
 "user ID here.  You may specify either a user name or a numeric\n"
-"UID.\n",
+"UID.\n");
 
-"Specify the IP address on which your server will run.  If you\n"
-"leave this blank, or if you specify 0.0.0.0, Citadel will listen\n"
-"on all addresses.  You can usually skip this unless you are\n"
-"running multiple instances of Citadel on the same computer.\n",
+       setup_titles[eIP_ADDR] = _("Listening address for the Citadel server:");///
+       setup_text[eIP_ADDR] = _(
+"Specify the IP address on which your server will run.\n"
+"You can name a specific IPv4 or IPv6 address, or you can specify\n"
+"'*' for 'any address', '::' for 'any IPv6 address', or '0.0.0.0'\n"
+"for 'any IPv4 address'.  If you leave this blank, Citadel will\n"
+"listen on all addresses.  You can usually skip this unless you are\n"
+"running multiple instances of Citadel on the same computer.\n");
 
+       setup_titles[eCTDL_Port] = _("Server port number:");
+       setup_text[eCTDL_Port] = _(
 "Specify the TCP port number on which your server will run.\n"
 "Normally, this will be port 504, which is the official port\n"
 "assigned by the IANA for Citadel servers.  You will only need\n"
 "to specify a different port number if you run multiple instances\n"
 "of Citadel on the same computer and there is something else\n"
-"already using port 504.\n",
-
-
+"already using port 504.\n");
 
+       setup_titles[eAuthType] = _("Authentication method to use:");////
+       setup_text[eAuthType] = _(
 "Specify which authentication mode you wish to use.\n"
 "\n"
 " 0. Self contained authentication\n"
@@ -197,25 +174,59 @@ char *setup_text[] = {
 "\n"
 "For help: http://www.citadel.org/doku.php/faq:installation:authmodes\n"
 "\n"
-"ANSWER \"0\" UNLESS YOU COMPLETELY UNDERSTAND THIS OPTION.\n",
+"ANSWER \"0\" UNLESS YOU COMPLETELY UNDERSTAND THIS OPTION.\n");
 
-"Please enter the host name or IP address of your LDAP server.\n",
+       setup_titles[eLDAP_Host] = _("LDAP host:");///
+       setup_text[eLDAP_Host] = _(
+"Please enter the host name or IP address of your LDAP server.\n");
 
-"Please enter the port number of the LDAP service (usually 389).\n",
+       setup_titles[eLDAP_Port] = _("LDAP port number:");////
+       setup_text[eLDAP_Port] = _(
+"Please enter the port number of the LDAP service (usually 389).\n");
 
+       setup_titles[eLDAP_Base_DN] = _("LDAP base DN:");///
+       setup_text[eLDAP_Base_DN] = _(
 "Please enter the Base DN to search for authentication\n"
-"(for example: dc=example,dc=com)\n",
+"(for example: dc=example,dc=com)\n");
 
+       setup_titles[eLDAP_Bind_DN] = _("LDAP bind DN:");//
+       setup_text[eLDAP_Bind_DN] = _(
 "Please enter the DN of an account to use for binding to the LDAP server\n"
 "for performing queries.  The account does not require any other\n"
 "privileges.  If your LDAP server allows anonymous queries, you can.\n"
-"leave this blank.\n",
+"leave this blank.\n");
 
+       setup_titles[eLDAP_Bind_PW] = _("LDAP bind password:");//
+       setup_text[eLDAP_Bind_PW] = _(
 "If you entered a Bind DN in the previous question, you must now enter\n"
 "the password associated with that account.  Otherwise, you can leave this\n"
-"blank.\n"
+"blank.\n");
+}
+
+/*
+ * print the actual stack frame.
+ */
+void cit_backtrace(void)
+{
+#ifdef HAVE_BACKTRACE
+       void *stack_frames[50];
+       size_t size, i;
+       char **strings;
+
+       size = backtrace(stack_frames, sizeof(stack_frames) / sizeof(void*));
+       strings = backtrace_symbols(stack_frames, size);
+       for (i = 0; i < size; i++) {
+               if (strings != NULL)
+                       fprintf(stderr, "%s\n", strings[i]);
+               else
+                       fprintf(stderr, "%p\n", stack_frames[i]);
+       }
+       free(strings);
+#endif
+}
+
+struct config config;
 
-};
 
 struct config config;
 int direction;
@@ -239,7 +250,7 @@ void title(const char *text)
 
 
 
-int yesno(char *question, int default_value)
+int yesno(const char *question, int default_value)
 {
        int i = 0;
        int answer = 0;
@@ -287,7 +298,7 @@ int yesno(char *question, int default_value)
 }
 
 
-void important_message(char *title, char *msgtext)
+void important_message(const char *title, const char *msgtext)
 {
        char buf[SIZ];
        int rv;
@@ -335,8 +346,7 @@ void progress(char *text, long int curr, long int cmax)
        case UI_TEXT:
                if (curr == 0) {
                        printf("%s\n", text);
-                       printf("..........................");
-                       printf("..........................");
+                       printf("....................................................");
                        printf("..........................\r");
                        fflush(stdout);
                        dots_printed = 0;
@@ -420,7 +430,6 @@ void check_services_entry(void)
 
 /*
  * delete_inittab_entry()  -- Remove obsolete /etc/inittab entry for Citadel
- *
  */
 void delete_inittab_entry(void)
 {
@@ -490,7 +499,6 @@ void delete_inittab_entry(void)
 
 /*
  * install_init_scripts()  -- Try to configure to start Citadel at boot
- *
  */
 void install_init_scripts(void)
 {
@@ -544,8 +552,8 @@ void install_init_scripts(void)
                "\n"
                "CITADEL_DIR=%s\n"
                ,
-               setup_directory,
-               setup_directory
+               ctdl_run_dir,
+               ctdl_sbin_dir
                );
        fprintf(fp,     "\n"
                "test -d /var/run || exit 0\n"
@@ -553,7 +561,7 @@ void install_init_scripts(void)
                "case \"$1\" in\n"
                "\n"
                "start)         echo -n \"Starting Citadel... \"\n"
-               "               if $CITADEL_DIR/citserver -lmail -d -h$CITADEL_DIR\n"
+               "               if $CITADEL_DIR/citserver -lmail -d\n"
                "               then\n"
                "                       echo \"ok\"\n"
                "               else\n"
@@ -568,7 +576,7 @@ void install_init_scripts(void)
                "               fi\n"
                "               rm -f %s/citadel.pid 2>/dev/null\n"
                ,
-               setup_directory
+               ctdl_run_dir
                );
        fprintf(fp,     "               ;;\n"
                "restart)       if $CITADEL_DIR/sendcommand DOWN 1 >/dev/null 2>&1 ; then\n"
@@ -597,9 +605,6 @@ void install_init_scripts(void)
 
 
 
-
-
-
 /*
  * On systems which use xinetd, see if we can offer to install Citadel as
  * the default telnet target.
@@ -615,7 +620,7 @@ void check_xinetd_entry(void) {
        if (fp == NULL) return;         /* Not there.  Oh well... */
 
        while (fgets(buf, sizeof buf, fp) != NULL) {
-               if (strstr(buf, setup_directory) != NULL) already_citadel = 1;
+               if (strstr(buf, "/citadel") != NULL) already_citadel = 1;
        }
        fclose(fp);
        if (already_citadel) return;    /* Already set up this way. */
@@ -747,7 +752,7 @@ void disable_other_mtas(void)
 /* 
  * Check to see if our server really works.  Returns 0 on success.
  */
-int test_server(char *setup_directory, char *relhomestr, int relhome) {
+int test_server(char *relhomestr, int relhome) {
        char cmd[256];
        char cookie[256];
        FILE *fp;
@@ -787,7 +792,7 @@ int test_server(char *setup_directory, char *relhomestr, int relhome) {
        return(-1);
 }
 
-void strprompt(const char *prompt_title, char *prompt_text, char *Target, char *DefValue)
+void strprompt(const char *prompt_title, const char *prompt_text, char *Target, char *DefValue)
 {
        char buf[SIZ] = "";
        char setupmsg[SIZ];
@@ -835,12 +840,14 @@ void strprompt(const char *prompt_title, char *prompt_text, char *Target, char *
        }
 }
 
-void set_bool_val(int msgpos, int *ip, char *DefValue) {
+void set_bool_val(int msgpos, int *ip, char *DefValue) 
+{
        title(setup_titles[msgpos]);
        *ip = yesno(setup_text[msgpos], *ip);
 }
 
-void set_str_val(int msgpos, char *Target, char *DefValue) {
+void set_str_val(int msgpos, char *Target, char *DefValue) 
+{
        strprompt(setup_titles[msgpos], 
                  setup_text[msgpos], 
                  Target, 
@@ -885,6 +892,8 @@ void edit_value(int curr)
        {
                Value = getenv(EnvNames[curr]);
        }
+       if (Value == NULL)
+               Value = "";
 
 
        switch (curr) {
@@ -1126,7 +1135,68 @@ void fixnss(void) {
        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(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)
 {
@@ -1221,21 +1291,59 @@ void set_default_values(void)
 }
 
 
+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("setup: cannot append citadel.config");
+               cleanup(errno);
+       }
+       fp = fdopen(a, "ab");
+       if (fp == NULL) {
+               display_error("setup: cannot append citadel.config");
+               cleanup(errno);
+       }
+       for (a = 0; a < sizeof(struct config); ++a) {
+               putc(0, fp);
+       }
+       fclose(fp);
+
+       /* now we re-open it, and read the old or blank configuration */
+       fp = fopen(file_citadel_config, "rb");
+       if (fp == NULL) {
+               display_error("setup: cannot open citadel.config");
+               cleanup(errno);
+       }
+       rv = fread((char *) &config, sizeof(struct config), 1, fp);
+       fclose(fp);
 
+}
 
 int main(int argc, char *argv[])
 {
        int a;
        int curr; 
        char aaa[128];
-       FILE *fp;
        int old_setup_level = 0;
        int info_only = 0;
        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;
@@ -1274,6 +1382,7 @@ int main(int argc, char *argv[])
        }
 
        calc_dirs_n_files(relh, home, relhome, ctdldir, 0);
+       SetTitles();
 
        /* If a setup type was not specified, try to determine automatically
         * the best one to use out of all available types.
@@ -1286,21 +1395,11 @@ int main(int argc, char *argv[])
                cleanup(0);
        }
 
-       /* Get started in a valid setup directory. */
-       strcpy(setup_directory, ctdl_run_dir);
-       strcpy(DefValue, ctdl_run_dir);
-       if ( (using_web_installer) && (getenv("CITADEL") != NULL) ) {
-               strcpy(setup_directory, getenv("CITADEL"));
-       }
-       else {
-               set_str_val(0, setup_directory, DefValue);
-       }
-
        enable_home = ( relh | home );
 
-       if (chdir(setup_directory) != 0) {
+       if (chdir(ctdl_run_dir) != 0) {
                char errmsg[SIZ];
-               sprintf(errmsg, "The directory you specified does not exist: [%s]\n", setup_directory);
+               sprintf(errmsg, "The directory you specified does not exist: [%s]\n", ctdl_run_dir);
                
                important_message("Citadel Setup", errmsg);
                cleanup(errno);
@@ -1313,7 +1412,7 @@ int main(int argc, char *argv[])
        }
 
        /* Make sure Citadel is not running. */
-       if (test_server(setup_directory, relhome, enable_home) == 0) {
+       if (test_server(relhome, enable_home) == 0) {
                important_message("Citadel Setup",
                        "The Citadel service is still running.\n"
                        "Please stop the service manually and run "
@@ -1331,39 +1430,7 @@ int main(int argc, char *argv[])
 
        }
 
-       /*
-        * 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("setup: cannot append citadel.config");
-               cleanup(errno);
-       }
-       fp = fdopen(a, "ab");
-       if (fp == NULL) {
-               display_error("setup: cannot append citadel.config");
-               cleanup(errno);
-       }
-       for (a = 0; a < sizeof(struct config); ++a) {
-               putc(0, fp);
-       }
-       fclose(fp);
-
-       /* now we re-open it, and read the old or blank configuration */
-       fp = fopen(file_citadel_config, "rb");
-       if (fp == NULL) {
-               display_error("setup: cannot open citadel.config");
-               cleanup(errno);
-       }
-       rv = fread((char *) &config, sizeof(struct config), 1, fp);
-       fclose(fp);
+       get_config ();
 
        set_default_values();
 
@@ -1375,8 +1442,7 @@ int main(int argc, char *argv[])
                }
        }
 
-/***** begin version update section ***** */
-       /* take care of any updating that is necessary */
+       /***** begin version update section *****/
 
        old_setup_level = config.c_setup_level;
 
@@ -1385,21 +1451,21 @@ int main(int argc, char *argv[])
        }
 
        if (old_setup_level < 555) {
-               important_message("Citadel Setup",
-                                 "This Citadel installation is too old "
-                                 "to be upgraded.");
+               important_message(
+                       "Citadel Setup",
+                       "This Citadel installation is too old to be upgraded."
+               );
                cleanup(1);
        }
        write_config_to_disk();
 
        old_setup_level = config.c_setup_level;
 
-       /* end of version update section */
+       /***** end of version update section *****/
 
 NEW_INST:
        config.c_setup_level = REV_LEVEL;
 
-/******************************************/
        if ((pw = getpwuid(config.c_ctdluid)) == NULL) {
                gid = getgid();
        } else {
@@ -1412,82 +1478,27 @@ NEW_INST:
 
         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))
+       if (    ((setup_type == UI_SILENT)
+               && (getenv("ALTER_ETC_SERVICES")!=NULL))
+               || (setup_type != UI_SILENT)
+       ) {
                check_services_entry(); /* Check /etc/services */
+       }
+
 #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 */
-
+       fixnss();               /* Check for the 'db' nss and offer to disable it */
 #endif
 
-       /* Check for the 'db' nss and offer to disable it */
-       fixnss();
-
        progress("Setting file permissions", 1, 3);
        rv = chown(file_citadel_config, config.c_ctdluid, gid);
        progress("Setting file permissions", 2, 3);
        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;
 }