Mercurial > dovecot > core-2.2
changeset 3917:ae292bd41926 HEAD
Added --build-ssl-parameters option to build them.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Sun, 22 Jan 2006 12:50:54 +0200 |
parents | 3c10e68ceb7c |
children | 40a461d554e6 |
files | src/master/main.c src/master/ssl-init.c src/master/ssl-init.h |
diffstat | 3 files changed, 35 insertions(+), 16 deletions(-) [+] |
line wrap: on
line diff
--- a/src/master/main.c Sun Jan 22 12:27:25 2006 +0200 +++ b/src/master/main.c Sun Jan 22 12:50:54 2006 +0200 @@ -602,8 +602,9 @@ static void print_help(void) { - printf("Usage: dovecot [-F] [-c <config file>] " - "[--version] [--build-options]\n"); + printf( +"Usage: dovecot [-F] [-c <config file>] [-p] [--build-ssl-parameters]\n" +" [--exec-mail <protocol>] [--version] [--build-options]\n"); } static void print_build_options(void) @@ -699,7 +700,7 @@ { /* parse arguments */ const char *exec_protocol = NULL, *exec_section = NULL, *user, *home; - bool foreground = FALSE, ask_key_pass = FALSE; + bool foreground = FALSE, ask_key_pass = FALSE, build_parameters = FALSE; int i; #ifdef DEBUG @@ -729,6 +730,8 @@ exec_protocol = argv[i]; if (i+1 != argc) exec_section = argv[++i]; + } else if (strcmp(argv[i], "--build-ssl-parameters") == 0) { + build_parameters = TRUE; } else if (strcmp(argv[i], "--version") == 0) { printf("%s\n", VERSION); return 0; @@ -768,6 +771,10 @@ sizeof(ssl_manual_key_password)); t_pop(); } + if (build_parameters) { + ssl_check_parameters_file(TRUE); + exit(0); + } /* save TZ environment. AIX depends on it to get the timezone correctly. */
--- a/src/master/ssl-init.c Sun Jan 22 12:27:25 2006 +0200 +++ b/src/master/ssl-init.c Sun Jan 22 12:50:54 2006 +0200 @@ -70,7 +70,7 @@ generating = FALSE; } -static bool check_parameters_file_set(struct settings *set) +static bool check_parameters_file_set(struct settings *set, bool foreground) { const char *path; struct stat st; @@ -100,18 +100,27 @@ st.st_mtime + (time_t)(set->ssl_parameters_regenerate*3600); if (regen_time < ioloop_time || st.st_size == 0 || st.st_uid != master_uid || st.st_gid != getegid()) { - if (st.st_mtime == 0) { - i_info("Generating Diffie-Hellman parameters " - "for the first time. This may take a while.."); + if (foreground) { + i_info("Generating Diffie-Hellman parameters. " + "This may take a while.."); + generate_parameters_file(path); + } else { + if (st.st_mtime == 0) { + i_info("Generating Diffie-Hellman parameters " + "for the first time. This may take " + "a while.."); + } + start_generate_process(path); } - start_generate_process(path); return FALSE; + } else if (foreground) { + i_info("Diffie-Hellman parameter file already exists."); } return TRUE; } -static void check_parameters_file(void *context __attr_unused__) +void ssl_check_parameters_file(bool foreground) { struct server_settings *server; @@ -119,23 +128,25 @@ return; for (server = settings_root; server != NULL; server = server->next) { - if (server->imap != NULL && - !check_parameters_file_set(server->imap)) - break; - if (server->pop3 != NULL && - !check_parameters_file_set(server->pop3)) + if (server->defaults != NULL && + !check_parameters_file_set(server->defaults, foreground)) break; } } +static void check_parameters_file_timeout(void *context __attr_unused__) +{ + ssl_check_parameters_file(FALSE); +} + void ssl_init(void) { generating = FALSE; /* check every 10 mins */ - to = timeout_add(600 * 1000, check_parameters_file, NULL); + to = timeout_add(600 * 1000, check_parameters_file_timeout, NULL); - check_parameters_file(NULL); + ssl_check_parameters_file(FALSE); } void ssl_deinit(void)
--- a/src/master/ssl-init.h Sun Jan 22 12:27:25 2006 +0200 +++ b/src/master/ssl-init.h Sun Jan 22 12:50:54 2006 +0200 @@ -5,6 +5,7 @@ void ssl_parameter_process_destroyed(pid_t pid); +void ssl_check_parameters_file(bool foreground); void _ssl_generate_parameters(int fd, const char *fname); void ssl_init(void);