Mercurial > dovecot > original-hg > dovecot-1.2
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 |
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 | 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 } |