X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Futils%2Fsetup.c;h=bb7f542dec09c2fe53248fba5d6f65df9b64386d;hb=a1569587b8bb37d938d476ed6010e28b310a1f68;hp=5eb2ae9d00016884b5b3233cc3e636e3e506a5ea;hpb=01ac23062c565ac60b45e761076a96d266b552e2;p=citadel.git diff --git a/citadel/utils/setup.c b/citadel/utils/setup.c index 5eb2ae9d0..bb7f542de 100644 --- a/citadel/utils/setup.c +++ b/citadel/utils/setup.c @@ -1,7 +1,7 @@ /* * Citadel setup utility * - * Copyright (c) 1987-2012 by the citadel.org team + * Copyright (c) 1987-2014 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. @@ -21,7 +21,6 @@ #include #include #include -#include #include #include #include @@ -104,6 +103,7 @@ char configs[NUM_CONFIGS][1024]; const char *setup_titles[eMaxQuestions]; const char *setup_text[eMaxQuestions]; +char *program_title; void SetTitles(void) { @@ -261,8 +261,6 @@ void cit_backtrace(void) #endif } -int direction; - void title(const char *text) @@ -306,8 +304,9 @@ int yesno(const char *question, int default_value) break; case UI_DIALOG: - sprintf(buf, "exec %s %s --yesno '%s' 15 75", + snprintf(buf, sizeof buf, "exec %s --backtitle '%s' %s --yesno '%s' 15 75", getenv("CTDL_DIALOG"), + program_title, ( default_value ? "" : "--defaultno" ), question); i = system(buf); @@ -335,12 +334,14 @@ void important_message(const char *title, const char *msgtext) printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"); printf(" %s \n\n%s\n\n", title, msgtext); printf("%s", _("Press return to continue...")); - if (fgets(buf, sizeof buf, stdin)); + if (fgets(buf, sizeof buf, stdin)) + ; break; case UI_DIALOG: - sprintf(buf, "exec %s --msgbox '%s' 19 72", + snprintf(buf, sizeof buf, "exec %s --backtitle '%s' --msgbox '%s' 19 72", getenv("CTDL_DIALOG"), + program_title, msgtext); int rv = system(buf); if (rv != 0) { @@ -403,8 +404,9 @@ void progress(char *text, long int curr, long int cmax) case UI_DIALOG: if (curr == 0) { - sprintf(buf, "exec %s --gauge '%s' 7 72 0", + snprintf(buf, sizeof buf, "exec %s --backtitle '%s' --gauge '%s' 7 72 0", getenv("CTDL_DIALOG"), + program_title, text); fp = popen(buf, "w"); if (fp != NULL) { @@ -610,7 +612,7 @@ void disable_other_mta(const char *mta) { int lines = 0; int rv; - sprintf(buf, + snprintf(buf, sizeof buf, "/bin/ls -l /etc/rc*.d/S*%s 2>/dev/null; " "/bin/ls -l /etc/rc.d/rc*.d/S*%s 2>/dev/null", mta, mta @@ -649,12 +651,12 @@ void disable_other_mta(const char *mta) { } - sprintf(buf, "for x in /etc/rc*.d/S*%s; do mv $x `echo $x |sed s/S/K/g`; done >/dev/null 2>&1", mta); + snprintf(buf, sizeof buf, "for x in /etc/rc*.d/S*%s; do mv $x `echo $x |sed s/S/K/g`; done >/dev/null 2>&1", mta); rv = system(buf); if (rv != 0) display_error("%s %s.\n", _("failed to disable other mta"), mta); - sprintf(buf, "/etc/init.d/%s stop >/dev/null 2>&1", mta); + snprintf(buf, sizeof buf, "/etc/init.d/%s stop >/dev/null 2>&1", mta); rv = system(buf); if (rv != 0) display_error(" %s.\n", _("failed to disable other mta"), mta); @@ -724,8 +726,9 @@ void strprompt(const char *prompt_title, const char *prompt_text, char *Target, case UI_DIALOG: CtdlMakeTempFileName(dialog_result, sizeof dialog_result); - sprintf(buf, "exec %s --nocancel --inputbox '%s' 19 72 '%s' 2>%s", + snprintf(buf, sizeof buf, "exec %s --backtitle '%s' --nocancel --inputbox '%s' 19 72 '%s' 2>%s", getenv("CTDL_DIALOG"), + program_title, prompt_text, Target, dialog_result); @@ -995,7 +998,7 @@ void fixnss(void) { ); if (yesno(question, 1)) { - sprintf(buf, "/bin/mv -f %s %s", new_filename, NSSCONF); + snprintf(buf, sizeof buf, "/bin/mv -f %s %s", new_filename, NSSCONF); rv = system(buf); if (rv != 0) { fprintf(stderr, "failed to edit %s.\n", NSSCONF); @@ -1144,6 +1147,8 @@ void set_default_values(void) GetDefaultVALINT(c_managesieve_port, 2020); GetDefaultVALINT(c_xmpp_c2s_port, 5222); GetDefaultVALINT(c_xmpp_s2s_port, 5269); + GetDefaultVALINT(c_nntp_port, 119); + GetDefaultVALINT(c_nntps_port, 563); #endif } @@ -1156,14 +1161,18 @@ int main(int argc, char *argv[]) char buf[1024]; char aaa[128]; int info_only = 0; - int relh=0; - int home=0; + int relh = 0; + int home = 0; + int nRetries = 0; char relhome[PATH_MAX]=""; char ctdldir[PATH_MAX]=CTDLDIR; struct passwd *pw; gid_t gid; char *activity = NULL; + /* Keep a mild groove on */ + program_title = _("Citadel setup program"); + /* set an invalid setup type */ setup_type = (-1); @@ -1214,8 +1223,7 @@ int main(int argc, char *argv[]) enable_home = ( relh | home ); if (chdir(ctdl_run_dir) != 0) { - display_error(_("Citadel Setup"), - "%s: [%s]\n", + display_error("%s: [%s]\n", _("The directory you specified does not exist"), ctdl_run_dir); exit(errno); @@ -1225,11 +1233,17 @@ int main(int argc, char *argv[]) /* * Connect to the running Citadel server. */ - serv_sock = uds_connectsock(file_citadel_admin_socket); + while ((serv_sock < 0) && (nRetries < 10)) { + serv_sock = uds_connectsock(file_citadel_admin_socket); + nRetries ++; + if (serv_sock < 0) + sleep(1); + } if (serv_sock < 0) { display_error( - "%s\n", - _("Setup could not connect to a running Citadel server.") + "%s: %s %s\n", + _("Setup could not connect to a running Citadel server."), + strerror(errno), file_citadel_admin_socket ); exit(1); } @@ -1283,7 +1297,6 @@ int main(int argc, char *argv[]) ++a; } - /* * Now begin. */ @@ -1291,10 +1304,7 @@ int main(int argc, char *argv[]) /* _("Citadel Setup"), */ if (setup_type == UI_TEXT) { - printf("\n\n\n" - " *** %s ***\n\n", - _("Citadel setup program") - ); + printf("\n\n\n *** %s ***\n\n", program_title); } if (setup_type == UI_DIALOG) { @@ -1306,15 +1316,29 @@ int main(int argc, char *argv[]) /* Go through a series of dialogs prompting for config info */ for (curr = 1; curr < eMaxQuestions; ++curr) { edit_value(curr); + if ( (curr == 6) && (atoi(configs[52]) != AUTHMODE_LDAP) && (atoi(configs[52]) != AUTHMODE_LDAP_AD) ) { curr += 5; /* skip LDAP questions if we're not authenticating against LDAP */ } - } - //config.c_setup_level = REV_LEVEL; + if (curr == eSysAdminName) { + if (atoi(configs[52]) == AUTHMODE_NATIVE) { + /* for native auth mode, fetch the admin's existing pw */ + snprintf(buf, sizeof buf, "AGUP %s", configs[13]); + serv_puts(buf); + serv_gets(buf); + if (buf[0] == '2') { + extract_token(admin_pass, &buf[4], 1, '|', sizeof admin_pass); + } + } + else { + ++curr; /* skip the password question for non-native auth modes */ + } + } + } if ((pw = getpwuid(atoi(configs[69]))) == NULL) { gid = getgid(); @@ -1325,19 +1349,45 @@ int main(int argc, char *argv[]) create_run_directories(atoi(configs[69]), gid); activity = _("Reconfiguring Citadel server"); - progress(activity, 0, NUM_CONFIGS+1); + progress(activity, 0, NUM_CONFIGS+3); sleep(1); /* Let the message appear briefly */ serv_puts("CONF SET"); serv_gets(buf); if (buf[0] == '4') { for (i=0; i