annotate src/master/ssl-init-main.c @ 7086:7ed926ed7aa4 HEAD

Updated copyright notices to include year 2008.
author Timo Sirainen <tss@iki.fi>
date Tue, 01 Jan 2008 22:05:21 +0200
parents 65c69a53a7be
children b9faf4db2a9f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7086
7ed926ed7aa4 Updated copyright notices to include year 2008.
Timo Sirainen <tss@iki.fi>
parents: 6429
diff changeset
1 /* Copyright (c) 2006-2008 Dovecot authors, see the included COPYING file */
3989
e93e39326ae1 Added ssl-build-param binary to build the ssl-parameters.dat. This way
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
2
e93e39326ae1 Added ssl-build-param binary to build the ssl-parameters.dat. This way
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
3 #include "lib.h"
e93e39326ae1 Added ssl-build-param binary to build the ssl-parameters.dat. This way
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
4 #include "lib-signals.h"
5601
b02af502bcd6 When running multiple Dovecot instances, only one of them needs to
Timo Sirainen <tss@iki.fi>
parents: 3992
diff changeset
5 #include "file-lock.h"
3989
e93e39326ae1 Added ssl-build-param binary to build the ssl-parameters.dat. This way
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
6 #include "randgen.h"
e93e39326ae1 Added ssl-build-param binary to build the ssl-parameters.dat. This way
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
7 #include "ssl-init.h"
e93e39326ae1 Added ssl-build-param binary to build the ssl-parameters.dat. This way
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
8
e93e39326ae1 Added ssl-build-param binary to build the ssl-parameters.dat. This way
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
9 #include <stdio.h>
e93e39326ae1 Added ssl-build-param binary to build the ssl-parameters.dat. This way
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
10 #include <fcntl.h>
e93e39326ae1 Added ssl-build-param binary to build the ssl-parameters.dat. This way
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
11 #include <unistd.h>
e93e39326ae1 Added ssl-build-param binary to build the ssl-parameters.dat. This way
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
12 #include <sys/stat.h>
e93e39326ae1 Added ssl-build-param binary to build the ssl-parameters.dat. This way
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
13
3992
04958ae9a2e3 Fix building without ssl support
Timo Sirainen <tss@iki.fi>
parents: 3989
diff changeset
14 #ifdef HAVE_SSL
5601
b02af502bcd6 When running multiple Dovecot instances, only one of them needs to
Timo Sirainen <tss@iki.fi>
parents: 3992
diff changeset
15 static int generate_parameters_file(const char *fname)
3989
e93e39326ae1 Added ssl-build-param binary to build the ssl-parameters.dat. This way
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
16 {
e93e39326ae1 Added ssl-build-param binary to build the ssl-parameters.dat. This way
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
17 const char *temp_fname;
5601
b02af502bcd6 When running multiple Dovecot instances, only one of them needs to
Timo Sirainen <tss@iki.fi>
parents: 3992
diff changeset
18 struct file_lock *lock;
3989
e93e39326ae1 Added ssl-build-param binary to build the ssl-parameters.dat. This way
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
19 mode_t old_mask;
5601
b02af502bcd6 When running multiple Dovecot instances, only one of them needs to
Timo Sirainen <tss@iki.fi>
parents: 3992
diff changeset
20 int fd, ret;
3989
e93e39326ae1 Added ssl-build-param binary to build the ssl-parameters.dat. This way
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
21
e93e39326ae1 Added ssl-build-param binary to build the ssl-parameters.dat. This way
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
22 temp_fname = t_strconcat(fname, ".tmp", NULL);
e93e39326ae1 Added ssl-build-param binary to build the ssl-parameters.dat. This way
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
23
e93e39326ae1 Added ssl-build-param binary to build the ssl-parameters.dat. This way
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
24 old_mask = umask(0);
5601
b02af502bcd6 When running multiple Dovecot instances, only one of them needs to
Timo Sirainen <tss@iki.fi>
parents: 3992
diff changeset
25 fd = open(temp_fname, O_WRONLY | O_CREAT, 0644);
3989
e93e39326ae1 Added ssl-build-param binary to build the ssl-parameters.dat. This way
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
26 umask(old_mask);
e93e39326ae1 Added ssl-build-param binary to build the ssl-parameters.dat. This way
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
27
e93e39326ae1 Added ssl-build-param binary to build the ssl-parameters.dat. This way
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
28 if (fd == -1) {
e93e39326ae1 Added ssl-build-param binary to build the ssl-parameters.dat. This way
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
29 i_fatal("Can't create temporary SSL parameters file %s: %m",
e93e39326ae1 Added ssl-build-param binary to build the ssl-parameters.dat. This way
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
30 temp_fname);
e93e39326ae1 Added ssl-build-param binary to build the ssl-parameters.dat. This way
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
31 }
e93e39326ae1 Added ssl-build-param binary to build the ssl-parameters.dat. This way
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
32
5601
b02af502bcd6 When running multiple Dovecot instances, only one of them needs to
Timo Sirainen <tss@iki.fi>
parents: 3992
diff changeset
33 /* If multiple dovecot instances are running, only one of them needs
b02af502bcd6 When running multiple Dovecot instances, only one of them needs to
Timo Sirainen <tss@iki.fi>
parents: 3992
diff changeset
34 to regenerate this file. */
b02af502bcd6 When running multiple Dovecot instances, only one of them needs to
Timo Sirainen <tss@iki.fi>
parents: 3992
diff changeset
35 ret = file_try_lock(fd, temp_fname, F_WRLCK,
b02af502bcd6 When running multiple Dovecot instances, only one of them needs to
Timo Sirainen <tss@iki.fi>
parents: 3992
diff changeset
36 FILE_LOCK_METHOD_FCNTL, &lock);
b02af502bcd6 When running multiple Dovecot instances, only one of them needs to
Timo Sirainen <tss@iki.fi>
parents: 3992
diff changeset
37 if (ret < 0)
b02af502bcd6 When running multiple Dovecot instances, only one of them needs to
Timo Sirainen <tss@iki.fi>
parents: 3992
diff changeset
38 i_fatal("file_try_lock(%s) failed: %m", temp_fname);
b02af502bcd6 When running multiple Dovecot instances, only one of them needs to
Timo Sirainen <tss@iki.fi>
parents: 3992
diff changeset
39 if (ret == 0) {
b02af502bcd6 When running multiple Dovecot instances, only one of them needs to
Timo Sirainen <tss@iki.fi>
parents: 3992
diff changeset
40 /* someone else is writing this */
b02af502bcd6 When running multiple Dovecot instances, only one of them needs to
Timo Sirainen <tss@iki.fi>
parents: 3992
diff changeset
41 return -1;
b02af502bcd6 When running multiple Dovecot instances, only one of them needs to
Timo Sirainen <tss@iki.fi>
parents: 3992
diff changeset
42 }
b02af502bcd6 When running multiple Dovecot instances, only one of them needs to
Timo Sirainen <tss@iki.fi>
parents: 3992
diff changeset
43 if (ftruncate(fd, 0) < 0)
b02af502bcd6 When running multiple Dovecot instances, only one of them needs to
Timo Sirainen <tss@iki.fi>
parents: 3992
diff changeset
44 i_fatal("ftruncate(%s) failed: %m", temp_fname);
3989
e93e39326ae1 Added ssl-build-param binary to build the ssl-parameters.dat. This way
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
45
6418
46d9ee79f292 Removed _ prefix from all public APIs.
Timo Sirainen <tss@iki.fi>
parents: 6411
diff changeset
46 ssl_generate_parameters(fd, temp_fname);
3989
e93e39326ae1 Added ssl-build-param binary to build the ssl-parameters.dat. This way
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
47
e93e39326ae1 Added ssl-build-param binary to build the ssl-parameters.dat. This way
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
48 if (rename(temp_fname, fname) < 0)
e93e39326ae1 Added ssl-build-param binary to build the ssl-parameters.dat. This way
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
49 i_fatal("rename(%s, %s) failed: %m", temp_fname, fname);
5601
b02af502bcd6 When running multiple Dovecot instances, only one of them needs to
Timo Sirainen <tss@iki.fi>
parents: 3992
diff changeset
50 if (close(fd) < 0)
b02af502bcd6 When running multiple Dovecot instances, only one of them needs to
Timo Sirainen <tss@iki.fi>
parents: 3992
diff changeset
51 i_fatal("close(%s) failed: %m", temp_fname);
b02af502bcd6 When running multiple Dovecot instances, only one of them needs to
Timo Sirainen <tss@iki.fi>
parents: 3992
diff changeset
52 file_lock_free(&lock);
3989
e93e39326ae1 Added ssl-build-param binary to build the ssl-parameters.dat. This way
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
53
e93e39326ae1 Added ssl-build-param binary to build the ssl-parameters.dat. This way
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
54 i_info("SSL parameters regeneration completed");
5601
b02af502bcd6 When running multiple Dovecot instances, only one of them needs to
Timo Sirainen <tss@iki.fi>
parents: 3992
diff changeset
55 return 0;
3989
e93e39326ae1 Added ssl-build-param binary to build the ssl-parameters.dat. This way
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
56 }
3992
04958ae9a2e3 Fix building without ssl support
Timo Sirainen <tss@iki.fi>
parents: 3989
diff changeset
57 #else
6411
6a64e64fa3a3 Renamed __attr_*__ to ATTR_*. Renamed __attrs_used__ to ATTRS_DEFINED.
Timo Sirainen <tss@iki.fi>
parents: 5615
diff changeset
58 static int generate_parameters_file(const char *fname ATTR_UNUSED)
3992
04958ae9a2e3 Fix building without ssl support
Timo Sirainen <tss@iki.fi>
parents: 3989
diff changeset
59 {
04958ae9a2e3 Fix building without ssl support
Timo Sirainen <tss@iki.fi>
parents: 3989
diff changeset
60 i_fatal("Dovecot built without SSL support");
5601
b02af502bcd6 When running multiple Dovecot instances, only one of them needs to
Timo Sirainen <tss@iki.fi>
parents: 3992
diff changeset
61 return -1;
3992
04958ae9a2e3 Fix building without ssl support
Timo Sirainen <tss@iki.fi>
parents: 3989
diff changeset
62 }
04958ae9a2e3 Fix building without ssl support
Timo Sirainen <tss@iki.fi>
parents: 3989
diff changeset
63 #endif
3989
e93e39326ae1 Added ssl-build-param binary to build the ssl-parameters.dat. This way
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
64
e93e39326ae1 Added ssl-build-param binary to build the ssl-parameters.dat. This way
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
65 int main(int argc, char *argv[])
e93e39326ae1 Added ssl-build-param binary to build the ssl-parameters.dat. This way
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
66 {
5615
Timo Sirainen <tss@iki.fi>
parents: 5601
diff changeset
67 int ret = 0;
5601
b02af502bcd6 When running multiple Dovecot instances, only one of them needs to
Timo Sirainen <tss@iki.fi>
parents: 3992
diff changeset
68
3989
e93e39326ae1 Added ssl-build-param binary to build the ssl-parameters.dat. This way
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
69 lib_init();
e93e39326ae1 Added ssl-build-param binary to build the ssl-parameters.dat. This way
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
70 i_set_failure_internal();
e93e39326ae1 Added ssl-build-param binary to build the ssl-parameters.dat. This way
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
71
e93e39326ae1 Added ssl-build-param binary to build the ssl-parameters.dat. This way
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
72 if (argc < 2)
e93e39326ae1 Added ssl-build-param binary to build the ssl-parameters.dat. This way
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
73 i_fatal("Usage: ssl-build-param <path>");
e93e39326ae1 Added ssl-build-param binary to build the ssl-parameters.dat. This way
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
74
e93e39326ae1 Added ssl-build-param binary to build the ssl-parameters.dat. This way
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
75 random_init();
5601
b02af502bcd6 When running multiple Dovecot instances, only one of them needs to
Timo Sirainen <tss@iki.fi>
parents: 3992
diff changeset
76 if (generate_parameters_file(argv[1]) < 0)
b02af502bcd6 When running multiple Dovecot instances, only one of them needs to
Timo Sirainen <tss@iki.fi>
parents: 3992
diff changeset
77 ret = 1;
3989
e93e39326ae1 Added ssl-build-param binary to build the ssl-parameters.dat. This way
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
78
e93e39326ae1 Added ssl-build-param binary to build the ssl-parameters.dat. This way
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
79 random_deinit();
e93e39326ae1 Added ssl-build-param binary to build the ssl-parameters.dat. This way
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
80 lib_deinit();
5601
b02af502bcd6 When running multiple Dovecot instances, only one of them needs to
Timo Sirainen <tss@iki.fi>
parents: 3992
diff changeset
81 return ret;
3989
e93e39326ae1 Added ssl-build-param binary to build the ssl-parameters.dat. This way
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
82 }