X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Futils%2Fsetup.c;h=326564bcd3e5d516f93fc23ab7ee03b77ea7ea10;hb=5ba959c18fdff446e9f54b3062c74e94bbf58b47;hp=cbe30e96b4b04d41c77ea3b493d75b60558081b4;hpb=1c23e93a19b9340effbcd5611d49be9c0d3fd942;p=citadel.git diff --git a/citadel/utils/setup.c b/citadel/utils/setup.c index cbe30e96b..326564bcd 100644 --- a/citadel/utils/setup.c +++ b/citadel/utils/setup.c @@ -1,5 +1,15 @@ /* * Citadel setup utility + * + * Copyright (c) 1987-2012 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. */ #define SHOW_ME_VAPPEND_PRINTF @@ -95,10 +105,6 @@ char admin_cmd[SIZ]; const char *setup_titles[eMaxQuestions]; const char *setup_text[eMaxQuestions]; -/* calculate all our path on a central place */ -/* where to keep our config */ - - void SetTitles(void) { @@ -108,6 +114,15 @@ void SetTitles(void) #else have_run_dir = 0; #endif + +#ifdef ENABLE_NLS + setlocale(LC_MESSAGES, getenv("LANG")); + + bindtextdomain("citadel-setup", LOCALEDIR"/locale"); + textdomain("citadel-setup"); + bind_textdomain_codeset("citadel-setup","UTF8"); +#endif + setup_titles[eCitadelHomeDir] = _("Citadel Home Directory"); if (have_run_dir) setup_text[eCitadelHomeDir] = _( @@ -142,7 +157,7 @@ void SetTitles(void) 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" +"as a public site, 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"); @@ -151,8 +166,8 @@ void SetTitles(void) setup_text[eIP_ADDR] = _( "Please specify the IP address which the server should be listening to. " "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" +"\"*\" 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. " "This can usually be left to the default unless multiple instances of Citadel " "are running on the same computer."); @@ -214,10 +229,23 @@ void SetTitles(void) "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"); + +#if 0 +// Debug loading of locales... Strace does a better job though. + printf("Message catalog directory: %s\n", bindtextdomain("citadel-setup", LOCALEDIR"/locale")); + printf("Text domain: %s\n", textdomain("citadel-setup")); + printf("Text domain Charset: %s\n", bind_textdomain_codeset("citadel-setup","UTF8")); + { + int i; + for (i = 0; i < eMaxQuestions; i++) + printf("%s - %s\n", setup_titles[i], _(setup_titles[i])); + exit(0); + } +#endif } /* - * print the actual stack frame. + * Print the stack frame for a backtrace */ void cit_backtrace(void) { @@ -238,9 +266,6 @@ void cit_backtrace(void) #endif } -struct config config; - - struct config config; int direction; @@ -273,9 +298,10 @@ int yesno(const char *question, int default_value) case UI_TEXT: do { - printf("%s\nYes/No [%s] --> ", - question, - ( default_value ? "Yes" : "No" ) + printf("%s\n%s [%s] --> ", + question, + _("Yes/No"), + ( default_value ? _("Yes") : _("No") ) ); if (fgets(buf, sizeof buf, stdin)) { @@ -321,7 +347,7 @@ void important_message(const char *title, const char *msgtext) case UI_TEXT: 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("Press return to continue..."); + printf("%s", _("Press return to continue...")); if (fgets(buf, sizeof buf, stdin)); break; @@ -330,6 +356,8 @@ void important_message(const char *title, const char *msgtext) getenv("CTDL_DIALOG"), msgtext); rv = system(buf); + if (rv != 0) + fprintf(stderr, _("failed to run the dialog command\n")); break; case UI_SILENT: fprintf(stderr, "%s\n", msgtext); @@ -339,12 +367,21 @@ void important_message(const char *title, const char *msgtext) void important_msgnum(int msgnum) { - important_message("Important Message", setup_text[msgnum]); + important_message(_("Important Message"), setup_text[msgnum]); } -void display_error(char *error_message) +void display_error(char *error_message_format, ...) { - important_message("Error", error_message); + StrBuf *Msg; + va_list arg_ptr; + + Msg = NewStrBuf(); + va_start(arg_ptr, error_message_format); + StrBufVAppendPrintf(Msg, error_message_format, arg_ptr); + va_end(arg_ptr); + + important_message(_("Error"), ChrPtr(Msg)); + FreeStrBuf(&Msg); } void progress(char *text, long int curr, long int cmax) @@ -423,11 +460,11 @@ void check_services_entry(void) if (getservbyname(SERVICE_NAME, PROTO_NAME) == NULL) { for (i=0; i<=2; ++i) { - progress("Adding service entry...", i, 2); + progress(_("Adding service entry..."), i, 2); if (i == 0) { sfp = fopen("/etc/services", "a"); if (sfp == NULL) { - sprintf(errmsg, "Cannot open /etc/services: %s", strerror(errno)); + sprintf(errmsg, "%s /etc/services: %s", _("Cannot open"), strerror(errno)); display_error(errmsg); } else { fprintf(sfp, "%s 504/tcp\n", SERVICE_NAME); @@ -455,11 +492,7 @@ void delete_inittab_entry(void) int rv; /* Determine the fully qualified path name of citserver */ - snprintf(looking_for, - sizeof looking_for, - "%s/citserver", - ctdl_sbin_dir - ); + snprintf(looking_for, sizeof looking_for, "%s/citserver", ctdl_sbin_dir); /* Now tweak /etc/inittab */ infp = fopen("/etc/inittab", "r"); @@ -474,7 +507,7 @@ void delete_inittab_entry(void) /* Other errors might mean something really did go wrong. */ - sprintf(buf, "Cannot open /etc/inittab: %s", strerror(errno)); + sprintf(buf, "%s /etc/inittab: %s", _("Cannot open"), strerror(errno)); display_error(buf); return; } @@ -482,7 +515,7 @@ void delete_inittab_entry(void) strcpy(outfilename, "/tmp/ctdlsetup.XXXXXX"); outfp = fdopen(mkstemp(outfilename), "w+"); if (outfp == NULL) { - sprintf(buf, "Cannot open %s: %s", outfilename, strerror(errno)); + sprintf(buf, "%s %s: %s", _("Cannot open"), outfilename, strerror(errno)); display_error(buf); fclose(infp); return; @@ -491,9 +524,19 @@ void delete_inittab_entry(void) while (fgets(buf, sizeof buf, infp) != NULL) { if (strstr(buf, looking_for) != NULL) { rv = fwrite("#", 1, 1, outfp); + if (rv == -1) + { + display_error("%s %s\n", + _("failed to modify inittab"), + strerror(errno)); + } ++changes_made; } rv = fwrite(buf, strlen(buf), 1, outfp); + if (rv == -1) + { + display_error("%s %s\n", _("failed to modify inittab"), strerror(errno)); + } } fclose(infp); @@ -521,33 +564,36 @@ void install_init_scripts(void) char command[SIZ]; int rv; - if ((stat("/etc/init.d/", &etcinitd) == -1) && - (errno == ENOENT)) - { - if ((stat("/etc/rc.d/init.d/", &etcinitd) == -1) && - (errno == ENOENT)) + if ( (stat("/etc/init.d/", &etcinitd) == -1) + && (errno == ENOENT) + ) { + if ( (stat("/etc/rc.d/init.d/", &etcinitd) == -1) + && (errno == ENOENT) + ) { initfile = CTDLDIR"/citadel.init"; - else + } + else { initfile = "/etc/rc.d/init.d/citadel"; + } } fp = fopen(initfile, "r"); if (fp != NULL) { - if (yesno("Citadel already appears to be configured to start at boot.\n" - "Would you like to keep your boot configuration as is?\n", 1) == 1) { + if (yesno(_("Citadel already appears to be configured to start at boot.\n" + "Would you like to keep your boot configuration as is?\n"), 1) == 1) { return; } fclose(fp); } - if (yesno("Would you like to automatically start Citadel at boot?\n", 1) == 0) { + if (yesno(_("Would you like to automatically start Citadel at boot?\n"), 1) == 0) { return; } fp = fopen(initfile, "w"); if (fp == NULL) { - display_error("Cannot create /etc/init.d/citadel"); + display_error("%s /etc/init.d/citadel", _("Cannot create")); return; } @@ -609,11 +655,21 @@ void install_init_scripts(void) /* Set up the run levels. */ rv = system("/bin/rm -f /etc/rc?.d/[SK]??citadel 2>/dev/null"); + if (rv != 0) { + display_error(_("failed to remove system V init links\n")); + } + snprintf(command, sizeof(command), "for x in 2 3 4 5 ; do [ -d /etc/rc$x.d ] && ln -s %s /etc/rc$x.d/S79citadel ; done 2>/dev/null", initfile); rv = system(command); + if (rv != 0) { + display_error(_("failed to set system V init links\n")); + } + snprintf(command, sizeof(command),"for x in 0 6 S; do [ -d /etc/rc$x.d ] && ln -s %s /etc/rc$x.d/K30citadel ; done 2>/dev/null", initfile); rv = system(command); - + if (rv != 0) { + display_error(_("failed to set system V init links\n")); + } } @@ -646,10 +702,11 @@ void check_xinetd_entry(void) { } else { snprintf(buf, sizeof buf, - "Setup can configure the \"xinetd\" service to automatically\n" - "connect incoming telnet sessions to Citadel, bypassing the\n" - "host system login: prompt. Would you like to do this?\n" - ); + _("Setup can configure the \"xinetd\" service to automatically\n" + "connect incoming telnet sessions to Citadel, bypassing the\n" + "host system login: prompt. Would you like to do this?\n" + ) + ); if (yesno(buf, 1) == 0) { return; } @@ -674,6 +731,8 @@ void check_xinetd_entry(void) { /* Now try to restart the service */ rv = system("/etc/init.d/xinetd restart >/dev/null 2>&1"); + if (rv != 0) + display_error(_("failed to restart xinetd.\n")); } @@ -703,14 +762,22 @@ void disable_other_mta(const char *mta) { /* Offer to replace other MTA with the vastly superior Citadel :) */ snprintf(buf, sizeof buf, - "You appear to have the \"%s\" email program\n" - "running on your system. If you want Citadel mail\n" - "connected with %s, you will have to manually integrate\n" - "them. It is preferable to disable %s, and use Citadel's\n" - "SMTP, POP3, and IMAP services.\n\n" - "May we disable %s so that Citadel has access to ports\n" - "25, 110, and 143?\n", - mta, mta, mta, mta + "%s \"%s\" %s%s%s%s%s%s%s", + _("You appear to have the "), + mta, + _(" email program\n" + "running on your system. If you want Citadel mail\n" + "connected with "), + mta, + _(" you will have to manually integrate\n" + "them. It is preferable to disable "), + mta, + _(", and use Citadel's\n" + "SMTP, POP3, and IMAP services.\n\n" + "May we disable "), + mta, + _("so that Citadel has access to ports\n" + "25, 110, and 143?\n") ); if (yesno(buf, 1) == 0) { return; @@ -719,8 +786,13 @@ 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); 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); rv = system(buf); + if (rv != 0) + display_error(" %s.\n", _("failed to disable other mta"), mta); } const char *other_mtas[] = { @@ -776,17 +848,21 @@ int test_server(char *relhomestr, int relhome) { * to the server and try to get it back. The cookie does not * have to be secret ... just unique. */ - sprintf(cookie, "--test--%d--", getpid()); + generate_uuid(cookie); - if (relhome) + if (relhome) { sprintf(cmd, "%s/sendcommand -h%s ECHO %s 2>&1", ctdl_sbin_dir, relhomestr, - cookie); - else + cookie + ); + } + else { sprintf(cmd, "%s/sendcommand ECHO %s 2>&1", ctdl_sbin_dir, - cookie); + cookie + ); + } fp = popen(cmd, "r"); if (fp == NULL) return(errno); @@ -819,8 +895,8 @@ void strprompt(const char *prompt_title, const char *prompt_text, char *Target, case UI_TEXT: title(prompt_title); printf("\n%s\n", prompt_text); - printf("This is currently set to:\n%s\n", Target); - printf("Enter new value or press return to leave unchanged:\n"); + printf("%s\n%s\n", _("This is currently set to:"), Target); + printf("%s\n", _("Enter new value or press return to leave unchanged:")); if (fgets(buf, sizeof buf, stdin)){ buf[strlen(buf) - 1] = 0; } @@ -836,6 +912,10 @@ void strprompt(const char *prompt_title, const char *prompt_text, char *Target, Target, dialog_result); rv = system(buf); + if (rv != 0) { + fprintf(stderr, "failed to run whiptail or dialog\n"); + } + fp = fopen(dialog_result, "r"); if (fp != NULL) { if (fgets(Target, sizeof buf, fp)) { @@ -848,7 +928,8 @@ void strprompt(const char *prompt_title, const char *prompt_text, char *Target, } break; case UI_SILENT: - strcpy(Target, DefValue); + if (*DefValue != '\0') + strcpy(Target, DefValue); break; } } @@ -864,7 +945,8 @@ void set_str_val(int msgpos, char *Target, char *DefValue) strprompt(setup_titles[msgpos], setup_text[msgpos], Target, - DefValue); + DefValue + ); } void set_int_val(int msgpos, int *ip, char *DefValue) @@ -905,9 +987,9 @@ void edit_value(int curr) { Value = getenv(EnvNames[curr]); } - if (Value == NULL) + if (Value == NULL) { Value = ""; - + } switch (curr) { @@ -929,7 +1011,7 @@ void edit_value(int curr) else { #ifdef __CYGWIN__ - config.c_ctdluid = 0; /* XXX Windows hack, prob. insecure */ + config.c_ctdluid = 0; /* work-around for Windows */ #else i = config.c_ctdluid; pw = getpwuid(i); @@ -1023,15 +1105,20 @@ void write_config_to_disk(void) int rv; if ((fd = creat(file_citadel_config, S_IRUSR | S_IWUSR)) == -1) { - display_error("setup: cannot open citadel.config"); + display_error("%s citadel.config [%s][%s]\n", _("setup: cannot open"), file_citadel_config, strerror(errno)); cleanup(1); } fp = fdopen(fd, "wb"); if (fp == NULL) { - display_error("setup: cannot open citadel.config"); + display_error("%s citadel.config [%s][%s]\n", _("setup: cannot open"), file_citadel_config, strerror(errno)); cleanup(1); + return; } rv = fwrite((char *) &config, sizeof(struct config), 1, fp); + + if (rv == -1) + display_error("%s citadel.config [%s][%s]\n", _("setup: cannot write"), file_citadel_config, strerror(errno)); + fclose(fp); } @@ -1044,7 +1131,7 @@ void write_config_to_disk(void) int discover_ui(void) { - /* Use "dialog" if we have it */ + /* Use "whiptail" or "dialog" if we have it */ if (getenv("CTDL_DIALOG") != NULL) { return UI_DIALOG; } @@ -1054,15 +1141,6 @@ int discover_ui(void) -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"); -} - - /* * Strip "db" entries out of /etc/nsswitch.conf */ @@ -1073,7 +1151,6 @@ void fixnss(void) { char buf_nc[256]; char question[512]; int i; - int changed = 0; int file_changed = 0; char new_filename[64]; int rv; @@ -1091,7 +1168,6 @@ void fixnss(void) { } while (fgets(buf, sizeof buf, fp_read) != NULL) { - changed = 0; strcpy(buf_nc, buf); for (i=0; i 0) { if ((isspace(buf_nc[i+2])) || (buf_nc[i+2]==0)) { - changed = 1; file_changed = 1; strcpy(&buf_nc[i], &buf_nc[i+2]); strcpy(&buf[i], &buf[i+2]); @@ -1130,19 +1205,24 @@ void fixnss(void) { } snprintf(question, sizeof question, - "\n" - "/etc/nsswitch.conf is configured to use the 'db' module for\n" - "one or more services. This is not necessary on most systems,\n" - "and it is known to crash the Citadel server when delivering\n" - "mail to the Internet.\n" - "\n" - "Do you want this module to be automatically disabled?\n" - "\n" + _( + "\n" + "/etc/nsswitch.conf is configured to use the 'db' module for\n" + "one or more services. This is not necessary on most systems,\n" + "and it is known to crash the Citadel server when delivering\n" + "mail to the Internet.\n" + "\n" + "Do you want this module to be automatically disabled?\n" + "\n" + ) ); if (yesno(question, 1)) { sprintf(buf, "/bin/mv -f %s %s", new_filename, NSSCONF); rv = system(buf); + if (rv != 0) + fprintf(stderr, "failed to edit %s.\n", NSSCONF); + chmod(NSSCONF, 0644); } unlink(new_filename); @@ -1164,6 +1244,8 @@ void check_init_script (char *relhome) if (!access("/etc/init.d/citadel", X_OK)) { rv = system("/etc/init.d/citadel start"); + if (rv != 0) + fprintf(stderr, "failed to call our initscript."); sleep(3); } @@ -1190,27 +1272,68 @@ void check_init_script (char *relhome) } 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"); + 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" - ); + 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."); + important_message(_("Setup finished"), + _("Setup is finished. You may now start the server.")); + } +} + + + +#define GetDefaultVALINT(CFGNAME, DEFL) GetDefaultValInt(&config.CFGNAME, "CITADEL_"#CFGNAME, DEFL) +void GetDefaultValInt(int *WhereTo, const char *VarName, int DefVal) +{ + const char *ch; + if (*WhereTo == 0) *WhereTo = DefVal; + + if ((setup_type == UI_SILENT) && + (ch = getenv(VarName), ch != NULL)) + { + *WhereTo = atoi(ch); + } +} +#define GetDefaultVALCHAR(CFGNAME, DEFL) GetDefaultValChar(&config.CFGNAME, "CITADEL_"#CFGNAME, DEFL) +void GetDefaultValChar(char *WhereTo, const char *VarName, char DefVal) +{ + const char *ch; + if (*WhereTo == 0) *WhereTo = DefVal; + + if ((setup_type == UI_SILENT) && + (ch = getenv(VarName), ch != NULL)) + { + *WhereTo = atoi(ch); + } +} +#define GetDefaultVALSTR(CFGNAME, DEFL) GetDefaultValStr(&config.CFGNAME[0], sizeof(config.CFGNAME), "CITADEL_"#CFGNAME, DEFL) +void GetDefaultValStr(char *WhereTo, size_t nMax, const char *VarName, const char *DefVal) +{ + const char *ch; + if (*WhereTo == '\0') + safestrncpy(WhereTo, DefVal, nMax); + + if ((setup_type == UI_SILENT) && + (ch = getenv(VarName), ch != NULL)) + { + safestrncpy(WhereTo, ch, nMax); } } + void set_default_values(void) { struct passwd *pw; @@ -1221,9 +1344,7 @@ void set_default_values(void) 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); + GetDefaultVALSTR(c_nodename, my_utsname.nodename); strtok(config.c_nodename, "."); if (IsEmptyStr(config.c_fqdn) ) { if ((he = gethostbyname(my_utsname.nodename)) != NULL) { @@ -1232,25 +1353,19 @@ void set_default_values(void) 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, ""); - 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; - } + GetDefaultVALSTR(c_humannode, _("My System")); + GetDefaultVALSTR(c_phonenum, _("US 800 555 1212")); + + GetDefaultVALCHAR(c_initax, 4); + + GetDefaultVALSTR(c_moreprompt, ""); + GetDefaultVALSTR(c_twitroom, "Trashcan"); + GetDefaultVALSTR(c_baseroom, BASEROOM); + GetDefaultVALSTR(c_aideroom, "Aide"); + GetDefaultVALINT(c_port_number, 504); + + GetDefaultVALINT(c_sleeping, 900); + if (config.c_ctdluid == 0) { pw = getpwnam("citadel"); if (pw != NULL) { @@ -1290,17 +1405,17 @@ void set_default_values(void) /* * 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; + GetDefaultVALINT(c_smtp_port, 25); + GetDefaultVALINT(c_pop3_port, 110); + GetDefaultVALINT(c_imap_port, 143); + GetDefaultVALINT(c_msa_port, 587); + GetDefaultVALINT(c_smtps_port, 465); + GetDefaultVALINT(c_pop3s_port, 995); + GetDefaultVALINT(c_imaps_port, 993); + GetDefaultVALINT(c_pftcpdict_port, -1); + GetDefaultVALINT(c_managesieve_port, 2020); + GetDefaultVALINT(c_xmpp_c2s_port, 5222); + GetDefaultVALINT(c_xmpp_s2s_port, 5269); } @@ -1322,12 +1437,12 @@ void get_config (void) */ if ((a = open(file_citadel_config, O_WRONLY | O_CREAT | O_APPEND, S_IRUSR | S_IWUSR)) == -1) { - display_error("setup: cannot append citadel.config"); + 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("setup: cannot append citadel.config"); + 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) { @@ -1338,10 +1453,13 @@ void get_config (void) /* 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"); + display_error("%s citadel.config [%s][%s]\n", _("setup: cannot open"), file_citadel_config, strerror(errno)); cleanup(errno); + return; } rv = fread((char *) &config, sizeof(struct config), 1, fp); + if (rv == -1) + display_error("%s citadel.config [%s][%s]\n", _("setup: cannot write"), file_citadel_config, strerror(errno)); fclose(fp); } @@ -1404,17 +1522,17 @@ int main(int argc, char *argv[]) setup_type = discover_ui(); } if (info_only == 1) { - important_message("Citadel Setup", CITADEL); + important_message(_("Citadel Setup"), CITADEL); cleanup(0); } enable_home = ( relh | home ); if (chdir(ctdl_run_dir) != 0) { - char errmsg[SIZ]; - sprintf(errmsg, "The directory you specified does not exist: [%s]\n", ctdl_run_dir); - - important_message("Citadel Setup", errmsg); + display_error(_("Citadel Setup"), + "%s: [%s]\n", + _("The directory you specified does not exist"), + ctdl_run_dir); cleanup(errno); } @@ -1422,14 +1540,16 @@ int main(int argc, char *argv[]) /* Try to stop Citadel if we can */ if (!access("/etc/init.d/citadel", X_OK)) { rv = system("/etc/init.d/citadel stop"); + if (rv != 0) + fprintf(stderr, _("failed to stop us using the initscript.\n")); } /* Make sure Citadel is not running. */ 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 " - "setup again."); + important_message(_("Citadel Setup"), + _("The Citadel service is still running.\n" + "Please stop the service manually and run " + "setup again.")); cleanup(1); } @@ -1438,13 +1558,13 @@ int main(int argc, char *argv[]) case UI_TEXT: printf("\n\n\n" - " *** Citadel setup program ***\n\n"); + " *** %s ***\n\n", + _("Citadel setup program")); break; } - get_config (); - + get_config(); set_default_values(); /* Go through a series of dialogs prompting for config info */ @@ -1465,8 +1585,8 @@ int main(int argc, char *argv[]) if (old_setup_level < 555) { important_message( - "Citadel Setup", - "This Citadel installation is too old to be upgraded." + _("Citadel Setup"), + _("This Citadel installation is too old to be upgraded.") ); cleanup(1); } @@ -1489,8 +1609,6 @@ NEW_INST: write_config_to_disk(); - 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) @@ -1505,15 +1623,13 @@ NEW_INST: fixnss(); /* Check for the 'db' nss and offer to disable it */ #endif - progress("Setting file permissions", 1, 3); + progress(_("Setting file permissions"), 1, 3); rv = chown(file_citadel_config, config.c_ctdluid, gid); - progress("Setting file permissions", 2, 3); + progress(_("Setting file permissions"), 2, 3); rv = chmod(file_citadel_config, S_IRUSR | S_IWUSR); - progress("Setting file permissions", 3, 3); + progress(_("Setting file permissions"), 3, 3); check_init_script(relhome); cleanup(0); return 0; } - -