diff options
Diffstat (limited to 'src/gnutls_config.c')
-rw-r--r-- | src/gnutls_config.c | 405 |
1 files changed, 225 insertions, 180 deletions
diff --git a/src/gnutls_config.c b/src/gnutls_config.c index d3879f1..cad078c 100644 --- a/src/gnutls_config.c +++ b/src/gnutls_config.c | |||
@@ -17,225 +17,275 @@ | |||
17 | 17 | ||
18 | #include "mod_gnutls.h" | 18 | #include "mod_gnutls.h" |
19 | 19 | ||
20 | static int load_datum_from_file(apr_pool_t* pool, | 20 | static int load_datum_from_file(apr_pool_t * pool, |
21 | const char* file, | 21 | const char *file, gnutls_datum_t * data) |
22 | gnutls_datum_t* data) | ||
23 | { | 22 | { |
24 | apr_file_t* fp; | 23 | apr_file_t *fp; |
25 | apr_finfo_t finfo; | 24 | apr_finfo_t finfo; |
26 | apr_status_t rv; | 25 | apr_status_t rv; |
27 | apr_size_t br = 0; | 26 | apr_size_t br = 0; |
28 | 27 | ||
29 | rv = apr_file_open(&fp, file, APR_READ|APR_BINARY, APR_OS_DEFAULT, | 28 | rv = apr_file_open(&fp, file, APR_READ | APR_BINARY, APR_OS_DEFAULT, |
30 | pool); | 29 | pool); |
31 | if (rv != APR_SUCCESS) { | 30 | if (rv != APR_SUCCESS) { |
32 | return rv; | 31 | return rv; |
33 | } | 32 | } |
34 | 33 | ||
35 | rv = apr_file_info_get(&finfo, APR_FINFO_SIZE, fp); | 34 | rv = apr_file_info_get(&finfo, APR_FINFO_SIZE, fp); |
36 | 35 | ||
37 | if (rv != APR_SUCCESS) { | 36 | if (rv != APR_SUCCESS) { |
38 | return rv; | 37 | return rv; |
39 | } | 38 | } |
40 | 39 | ||
41 | data->data = apr_palloc(pool, finfo.size+1); | 40 | data->data = apr_palloc(pool, finfo.size + 1); |
42 | rv = apr_file_read_full(fp, data->data, finfo.size, &br); | 41 | rv = apr_file_read_full(fp, data->data, finfo.size, &br); |
43 | 42 | ||
44 | if (rv != APR_SUCCESS) { | 43 | if (rv != APR_SUCCESS) { |
45 | return rv; | 44 | return rv; |
46 | } | 45 | } |
47 | apr_file_close(fp); | 46 | apr_file_close(fp); |
48 | 47 | ||
49 | data->data[br] = '\0'; | 48 | data->data[br] = '\0'; |
50 | data->size = br; | 49 | data->size = br; |
51 | 50 | ||
52 | return 0; | 51 | return 0; |
53 | } | 52 | } |
54 | 53 | ||
54 | const char *mgs_set_dh_file(cmd_parms * parms, void *dummy, | ||
55 | const char *arg) | ||
56 | { | ||
57 | mgs_srvconf_rec *sc = | ||
58 | (mgs_srvconf_rec *) ap_get_module_config(parms->server-> | ||
59 | module_config, | ||
60 | &gnutls_module); | ||
61 | |||
62 | sc->dh_params_file = ap_server_root_relative(parms->pool, arg); | ||
63 | |||
64 | return NULL; | ||
65 | } | ||
66 | |||
67 | const char *mgs_set_rsa_export_file(cmd_parms * parms, void *dummy, | ||
68 | const char *arg) | ||
69 | { | ||
70 | mgs_srvconf_rec *sc = | ||
71 | (mgs_srvconf_rec *) ap_get_module_config(parms->server-> | ||
72 | module_config, | ||
73 | &gnutls_module); | ||
74 | |||
75 | sc->rsa_params_file = ap_server_root_relative(parms->pool, arg); | ||
76 | |||
77 | return NULL; | ||
78 | } | ||
79 | |||
80 | |||
55 | const char *mgs_set_cert_file(cmd_parms * parms, void *dummy, | 81 | const char *mgs_set_cert_file(cmd_parms * parms, void *dummy, |
56 | const char *arg) | 82 | const char *arg) |
57 | { | 83 | { |
58 | int ret; | 84 | int ret; |
59 | gnutls_datum_t data; | 85 | gnutls_datum_t data; |
60 | const char* file; | 86 | const char *file; |
61 | apr_pool_t* spool; | 87 | apr_pool_t *spool; |
62 | mgs_srvconf_rec *sc = | 88 | mgs_srvconf_rec *sc = |
63 | (mgs_srvconf_rec *) ap_get_module_config(parms->server-> | 89 | (mgs_srvconf_rec *) ap_get_module_config(parms->server-> |
64 | module_config, | 90 | module_config, |
65 | &gnutls_module); | 91 | &gnutls_module); |
66 | apr_pool_create(&spool, parms->pool); | 92 | apr_pool_create(&spool, parms->pool); |
67 | 93 | ||
68 | file = ap_server_root_relative(spool, arg); | 94 | file = ap_server_root_relative(spool, arg); |
69 | 95 | ||
70 | if (load_datum_from_file(spool, file, &data) != 0) { | 96 | if (load_datum_from_file(spool, file, &data) != 0) { |
71 | return apr_psprintf(parms->pool, "GnuTLS: Error Reading " | 97 | return apr_psprintf(parms->pool, "GnuTLS: Error Reading " |
72 | "Certificate '%s'", file); | 98 | "Certificate '%s'", file); |
73 | } | 99 | } |
74 | 100 | ||
75 | gnutls_x509_crt_init(&sc->cert_x509); | 101 | gnutls_x509_crt_init(&sc->cert_x509); |
76 | ret = gnutls_x509_crt_import(sc->cert_x509, &data, GNUTLS_X509_FMT_PEM); | 102 | ret = |
103 | gnutls_x509_crt_import(sc->cert_x509, &data, GNUTLS_X509_FMT_PEM); | ||
77 | if (ret != 0) { | 104 | if (ret != 0) { |
78 | return apr_psprintf(parms->pool, "GnuTLS: Failed to Import " | 105 | return apr_psprintf(parms->pool, "GnuTLS: Failed to Import " |
79 | "Certificate'%s': (%d) %s", file, ret, | 106 | "Certificate'%s': (%d) %s", file, ret, |
80 | gnutls_strerror(ret)); | 107 | gnutls_strerror(ret)); |
81 | } | 108 | } |
82 | 109 | ||
83 | apr_pool_destroy(spool); | 110 | apr_pool_destroy(spool); |
84 | return NULL; | 111 | return NULL; |
85 | } | 112 | } |
86 | 113 | ||
87 | const char *mgs_set_key_file(cmd_parms * parms, void *dummy, | 114 | const char *mgs_set_key_file(cmd_parms * parms, void *dummy, |
88 | const char *arg) | 115 | const char *arg) |
89 | { | 116 | { |
90 | int ret; | 117 | int ret; |
91 | gnutls_datum_t data; | 118 | gnutls_datum_t data; |
92 | const char* file; | 119 | const char *file; |
93 | apr_pool_t* spool; | 120 | apr_pool_t *spool; |
94 | mgs_srvconf_rec *sc = | 121 | mgs_srvconf_rec *sc = |
95 | (mgs_srvconf_rec *) ap_get_module_config(parms->server-> | 122 | (mgs_srvconf_rec *) ap_get_module_config(parms->server-> |
96 | module_config, | 123 | module_config, |
97 | &gnutls_module); | 124 | &gnutls_module); |
98 | apr_pool_create(&spool, parms->pool); | 125 | apr_pool_create(&spool, parms->pool); |
99 | 126 | ||
100 | file = ap_server_root_relative(spool, arg); | 127 | file = ap_server_root_relative(spool, arg); |
101 | 128 | ||
102 | if (load_datum_from_file(spool, file, &data) != 0) { | 129 | if (load_datum_from_file(spool, file, &data) != 0) { |
103 | return apr_psprintf(parms->pool, "GnuTLS: Error Reading " | 130 | return apr_psprintf(parms->pool, "GnuTLS: Error Reading " |
104 | "Private Key '%s'", file); | 131 | "Private Key '%s'", file); |
105 | } | 132 | } |
106 | 133 | ||
107 | gnutls_x509_privkey_init(&sc->privkey_x509); | 134 | gnutls_x509_privkey_init(&sc->privkey_x509); |
108 | ret = gnutls_x509_privkey_import(sc->privkey_x509, &data, GNUTLS_X509_FMT_PEM); | 135 | ret = |
136 | gnutls_x509_privkey_import(sc->privkey_x509, &data, | ||
137 | GNUTLS_X509_FMT_PEM); | ||
109 | if (ret != 0) { | 138 | if (ret != 0) { |
110 | return apr_psprintf(parms->pool, "GnuTLS: Failed to Import " | 139 | return apr_psprintf(parms->pool, "GnuTLS: Failed to Import " |
111 | "Private Key '%s': (%d) %s", file, ret, | 140 | "Private Key '%s': (%d) %s", file, ret, |
112 | gnutls_strerror(ret)); | 141 | gnutls_strerror(ret)); |
113 | } | 142 | } |
114 | apr_pool_destroy(spool); | 143 | apr_pool_destroy(spool); |
115 | return NULL; | 144 | return NULL; |
116 | } | 145 | } |
117 | 146 | ||
147 | const char *mgs_set_srp_tpasswd_file(cmd_parms * parms, void *dummy, | ||
148 | const char *arg) | ||
149 | { | ||
150 | mgs_srvconf_rec *sc = | ||
151 | (mgs_srvconf_rec *) ap_get_module_config(parms->server-> | ||
152 | module_config, | ||
153 | &gnutls_module); | ||
154 | |||
155 | sc->srp_tpasswd_file = ap_server_root_relative(parms->pool, arg); | ||
156 | |||
157 | return NULL; | ||
158 | } | ||
159 | |||
160 | const char *mgs_set_srp_tpasswd_conf_file(cmd_parms * parms, void *dummy, | ||
161 | const char *arg) | ||
162 | { | ||
163 | mgs_srvconf_rec *sc = | ||
164 | (mgs_srvconf_rec *) ap_get_module_config(parms->server-> | ||
165 | module_config, | ||
166 | &gnutls_module); | ||
167 | |||
168 | sc->srp_tpasswd_conf_file = ap_server_root_relative(parms->pool, arg); | ||
169 | |||
170 | return NULL; | ||
171 | } | ||
172 | |||
118 | const char *mgs_set_cache(cmd_parms * parms, void *dummy, | 173 | const char *mgs_set_cache(cmd_parms * parms, void *dummy, |
119 | const char *type, const char* arg) | 174 | const char *type, const char *arg) |
120 | { | 175 | { |
121 | const char* err; | 176 | const char *err; |
122 | mgs_srvconf_rec *sc = ap_get_module_config(parms->server-> | 177 | mgs_srvconf_rec *sc = ap_get_module_config(parms->server-> |
123 | module_config, | 178 | module_config, |
124 | &gnutls_module); | 179 | &gnutls_module); |
125 | if ((err = ap_check_cmd_context(parms, GLOBAL_ONLY))) { | 180 | if ((err = ap_check_cmd_context(parms, GLOBAL_ONLY))) { |
126 | return err; | 181 | return err; |
127 | } | 182 | } |
128 | 183 | ||
129 | if (strcasecmp("none", type) == 0) { | 184 | if (strcasecmp("none", type) == 0) { |
130 | sc->cache_type = mgs_cache_none; | 185 | sc->cache_type = mgs_cache_none; |
131 | } | 186 | } else if (strcasecmp("dbm", type) == 0) { |
132 | else if (strcasecmp("dbm", type) == 0) { | 187 | sc->cache_type = mgs_cache_dbm; |
133 | sc->cache_type = mgs_cache_dbm; | ||
134 | } | 188 | } |
135 | #if HAVE_APR_MEMCACHE | 189 | #if HAVE_APR_MEMCACHE |
136 | else if (strcasecmp("memcache", type) == 0) { | 190 | else if (strcasecmp("memcache", type) == 0) { |
137 | sc->cache_type = mgs_cache_memcache; | 191 | sc->cache_type = mgs_cache_memcache; |
138 | } | 192 | } |
139 | #endif | 193 | #endif |
140 | else { | 194 | else { |
141 | return "Invalid Type for GnuTLSCache!"; | 195 | return "Invalid Type for GnuTLSCache!"; |
142 | } | 196 | } |
143 | 197 | ||
144 | if (sc->cache_type == mgs_cache_dbm) { | 198 | if (sc->cache_type == mgs_cache_dbm) { |
145 | sc->cache_config = ap_server_root_relative(parms->pool, arg); | 199 | sc->cache_config = ap_server_root_relative(parms->pool, arg); |
146 | } | 200 | } else { |
147 | else { | 201 | sc->cache_config = apr_pstrdup(parms->pool, arg); |
148 | sc->cache_config = apr_pstrdup(parms->pool, arg); | ||
149 | } | 202 | } |
150 | 203 | ||
151 | return NULL; | 204 | return NULL; |
152 | } | 205 | } |
153 | 206 | ||
154 | const char *mgs_set_cache_timeout(cmd_parms * parms, void *dummy, | 207 | const char *mgs_set_cache_timeout(cmd_parms * parms, void *dummy, |
155 | const char *arg) | 208 | const char *arg) |
156 | { | 209 | { |
157 | int argint; | 210 | int argint; |
158 | mgs_srvconf_rec *sc = | 211 | mgs_srvconf_rec *sc = |
159 | (mgs_srvconf_rec *) ap_get_module_config(parms->server-> | 212 | (mgs_srvconf_rec *) ap_get_module_config(parms->server-> |
160 | module_config, | 213 | module_config, |
161 | &gnutls_module); | 214 | &gnutls_module); |
162 | 215 | ||
163 | argint = atoi(arg); | 216 | argint = atoi(arg); |
164 | 217 | ||
165 | if (argint < 0) { | 218 | if (argint < 0) { |
166 | return "GnuTLSCacheTimeout: Invalid argument"; | 219 | return "GnuTLSCacheTimeout: Invalid argument"; |
167 | } | 220 | } else if (argint == 0) { |
168 | else if (argint == 0) { | 221 | sc->cache_timeout = 0; |
169 | sc->cache_timeout = 0; | 222 | } else { |
223 | sc->cache_timeout = apr_time_from_sec(argint); | ||
170 | } | 224 | } |
171 | else { | 225 | |
172 | sc->cache_timeout = apr_time_from_sec(argint); | ||
173 | } | ||
174 | |||
175 | return NULL; | 226 | return NULL; |
176 | } | 227 | } |
177 | 228 | ||
178 | const char *mgs_set_client_verify(cmd_parms * parms, void *dummy, | 229 | const char *mgs_set_client_verify(cmd_parms * parms, void *dummy, |
179 | const char *arg) | 230 | const char *arg) |
180 | { | 231 | { |
181 | int mode; | 232 | int mode; |
182 | 233 | ||
183 | if (strcasecmp("none", arg) == 0 || strcasecmp("ignore", arg) == 0) { | 234 | if (strcasecmp("none", arg) == 0 || strcasecmp("ignore", arg) == 0) { |
184 | mode = GNUTLS_CERT_IGNORE; | 235 | mode = GNUTLS_CERT_IGNORE; |
236 | } else if (strcasecmp("optional", arg) == 0 | ||
237 | || strcasecmp("request", arg) == 0) { | ||
238 | mode = GNUTLS_CERT_REQUEST; | ||
239 | } else if (strcasecmp("require", arg) == 0) { | ||
240 | mode = GNUTLS_CERT_REQUIRE; | ||
241 | } else { | ||
242 | return "GnuTLSClientVerify: Invalid argument"; | ||
185 | } | 243 | } |
186 | else if (strcasecmp("optional", arg) == 0 || strcasecmp("request", arg) == 0) { | 244 | |
187 | mode = GNUTLS_CERT_REQUEST; | ||
188 | } | ||
189 | else if (strcasecmp("require", arg) == 0) { | ||
190 | mode = GNUTLS_CERT_REQUIRE; | ||
191 | } | ||
192 | else { | ||
193 | return "GnuTLSClientVerify: Invalid argument"; | ||
194 | } | ||
195 | |||
196 | /* This was set from a directory context */ | 245 | /* This was set from a directory context */ |
197 | if (parms->path) { | 246 | if (parms->path) { |
198 | mgs_dirconf_rec *dc = (mgs_dirconf_rec *)dummy; | 247 | mgs_dirconf_rec *dc = (mgs_dirconf_rec *) dummy; |
199 | dc->client_verify_mode = mode; | 248 | dc->client_verify_mode = mode; |
200 | } | 249 | } else { |
201 | else { | 250 | mgs_srvconf_rec *sc = |
202 | mgs_srvconf_rec *sc = | 251 | (mgs_srvconf_rec *) ap_get_module_config(parms->server-> |
203 | (mgs_srvconf_rec *) ap_get_module_config(parms->server-> | 252 | module_config, |
204 | module_config, | 253 | &gnutls_module); |
205 | &gnutls_module); | 254 | sc->client_verify_mode = mode; |
206 | sc->client_verify_mode = mode; | ||
207 | } | 255 | } |
208 | 256 | ||
209 | return NULL; | 257 | return NULL; |
210 | } | 258 | } |
211 | 259 | ||
212 | const char *mgs_set_client_ca_file(cmd_parms * parms, void *dummy, | 260 | const char *mgs_set_client_ca_file(cmd_parms * parms, void *dummy, |
213 | const char *arg) | 261 | const char *arg) |
214 | { | 262 | { |
215 | int rv; | 263 | int rv; |
216 | const char* file; | 264 | const char *file; |
217 | apr_pool_t* spool; | 265 | apr_pool_t *spool; |
218 | gnutls_datum_t data; | 266 | gnutls_datum_t data; |
219 | 267 | ||
220 | mgs_srvconf_rec *sc = | 268 | mgs_srvconf_rec *sc = |
221 | (mgs_srvconf_rec *) ap_get_module_config(parms->server-> | 269 | (mgs_srvconf_rec *) ap_get_module_config(parms->server-> |
222 | module_config, | 270 | module_config, |
223 | &gnutls_module); | 271 | &gnutls_module); |
224 | apr_pool_create(&spool, parms->pool); | 272 | apr_pool_create(&spool, parms->pool); |
225 | 273 | ||
226 | file = ap_server_root_relative(spool, arg); | 274 | file = ap_server_root_relative(spool, arg); |
227 | 275 | ||
228 | sc->ca_list_size = 16; | 276 | if (load_datum_from_file(spool, file, &data) != 0) { |
229 | 277 | return apr_psprintf(parms->pool, "GnuTLS: Error Reading " | |
230 | load_datum_from_file(spool, file, &data); | 278 | "Client CA File '%s'", file); |
279 | } | ||
231 | 280 | ||
232 | rv = gnutls_x509_crt_list_import(sc->ca_list, &sc->ca_list_size, | 281 | sc->ca_list_size = MAX_CA_CRTS; |
233 | &data, GNUTLS_X509_FMT_PEM, | 282 | rv = gnutls_x509_crt_list_import(sc->ca_list, &sc->ca_list_size, |
234 | GNUTLS_X509_CRT_LIST_IMPORT_FAIL_IF_EXCEED); | 283 | &data, GNUTLS_X509_FMT_PEM, |
284 | GNUTLS_X509_CRT_LIST_IMPORT_FAIL_IF_EXCEED); | ||
235 | if (rv < 0) { | 285 | if (rv < 0) { |
236 | return apr_psprintf(parms->pool, "GnuTLS: Failed to load " | 286 | return apr_psprintf(parms->pool, "GnuTLS: Failed to load " |
237 | "Client CA File '%s': (%d) %s", file, rv, | 287 | "Client CA File '%s': (%d) %s", file, rv, |
238 | gnutls_strerror(rv)); | 288 | gnutls_strerror(rv)); |
239 | } | 289 | } |
240 | 290 | ||
241 | apr_pool_destroy(spool); | 291 | apr_pool_destroy(spool); |
@@ -243,20 +293,57 @@ const char *mgs_set_client_ca_file(cmd_parms * parms, void *dummy, | |||
243 | } | 293 | } |
244 | 294 | ||
245 | const char *mgs_set_enabled(cmd_parms * parms, void *dummy, | 295 | const char *mgs_set_enabled(cmd_parms * parms, void *dummy, |
246 | const char *arg) | 296 | const char *arg) |
247 | { | 297 | { |
248 | mgs_srvconf_rec *sc = | 298 | mgs_srvconf_rec *sc = |
249 | (mgs_srvconf_rec *) ap_get_module_config(parms->server-> | 299 | (mgs_srvconf_rec *) ap_get_module_config(parms->server-> |
250 | module_config, | 300 | module_config, |
251 | &gnutls_module); | 301 | &gnutls_module); |
252 | if (!strcasecmp(arg, "On")) { | 302 | if (!strcasecmp(arg, "On")) { |
253 | sc->enabled = GNUTLS_ENABLED_TRUE; | 303 | sc->enabled = GNUTLS_ENABLED_TRUE; |
304 | } else if (!strcasecmp(arg, "Off")) { | ||
305 | sc->enabled = GNUTLS_ENABLED_FALSE; | ||
306 | } else { | ||
307 | return "GnuTLSEnable must be set to 'On' or 'Off'"; | ||
254 | } | 308 | } |
255 | else if (!strcasecmp(arg, "Off")) { | 309 | |
256 | sc->enabled = GNUTLS_ENABLED_FALSE; | 310 | return NULL; |
311 | } | ||
312 | |||
313 | const char *mgs_set_export_certificates_enabled(cmd_parms * parms, void *dummy, | ||
314 | const char *arg) | ||
315 | { | ||
316 | mgs_srvconf_rec *sc = | ||
317 | (mgs_srvconf_rec *) ap_get_module_config(parms->server-> | ||
318 | module_config, | ||
319 | &gnutls_module); | ||
320 | if (!strcasecmp(arg, "On")) { | ||
321 | sc->export_certificates_enabled = GNUTLS_ENABLED_TRUE; | ||
322 | } else if (!strcasecmp(arg, "Off")) { | ||
323 | sc->export_certificates_enabled = GNUTLS_ENABLED_FALSE; | ||
324 | } else { | ||
325 | return "GnuTLSExportCertificates must be set to 'On' or 'Off'"; | ||
257 | } | 326 | } |
258 | else { | 327 | |
259 | return "GnuTLSEnable must be set to 'On' or 'Off'"; | 328 | return NULL; |
329 | } | ||
330 | |||
331 | |||
332 | const char *mgs_set_priorities(cmd_parms * parms, void *dummy, const char *arg) | ||
333 | { | ||
334 | int ret; | ||
335 | char *err; | ||
336 | mgs_srvconf_rec *sc = | ||
337 | (mgs_srvconf_rec *) ap_get_module_config(parms->server-> | ||
338 | module_config, | ||
339 | &gnutls_module); | ||
340 | |||
341 | |||
342 | ret = gnutls_priority_init( &sc->priorities, arg, &err); | ||
343 | if (ret < 0) { | ||
344 | if (ret == GNUTLS_E_INVALID_REQUEST) | ||
345 | return apr_psprintf(parms->pool, "GnuTLS: Syntax error parsing priorities string at: %s", err); | ||
346 | return "Error setting priorities"; | ||
260 | } | 347 | } |
261 | 348 | ||
262 | return NULL; | 349 | return NULL; |
@@ -264,92 +351,50 @@ const char *mgs_set_enabled(cmd_parms * parms, void *dummy, | |||
264 | 351 | ||
265 | void *mgs_config_server_create(apr_pool_t * p, server_rec * s) | 352 | void *mgs_config_server_create(apr_pool_t * p, server_rec * s) |
266 | { | 353 | { |
267 | int i; | ||
268 | mgs_srvconf_rec *sc = apr_pcalloc(p, sizeof(*sc)); | 354 | mgs_srvconf_rec *sc = apr_pcalloc(p, sizeof(*sc)); |
269 | 355 | ||
270 | sc->enabled = GNUTLS_ENABLED_FALSE; | 356 | sc->enabled = GNUTLS_ENABLED_FALSE; |
271 | 357 | ||
272 | gnutls_certificate_allocate_credentials(&sc->certs); | 358 | gnutls_certificate_allocate_credentials(&sc->certs); |
359 | gnutls_anon_allocate_server_credentials(&sc->anon_creds); | ||
360 | gnutls_srp_allocate_server_credentials(&sc->srp_creds); | ||
361 | |||
362 | sc->srp_tpasswd_conf_file = NULL; | ||
363 | sc->srp_tpasswd_file = NULL; | ||
273 | sc->privkey_x509 = NULL; | 364 | sc->privkey_x509 = NULL; |
274 | sc->cert_x509 = NULL; | 365 | sc->cert_x509 = NULL; |
275 | sc->cache_timeout = apr_time_from_sec(300); | 366 | sc->cache_timeout = apr_time_from_sec(300); |
276 | sc->cache_type = mgs_cache_dbm; | 367 | sc->cache_type = mgs_cache_dbm; |
277 | sc->cache_config = ap_server_root_relative(p, "conf/gnutls_cache"); | 368 | sc->cache_config = ap_server_root_relative(p, "conf/gnutls_cache"); |
278 | 369 | ||
279 | /* TODO: Make this Configurable. But it isn't configurable in mod_ssl? */ | ||
280 | sc->dh_params_file = ap_server_root_relative(p, "conf/dhfile"); | 370 | sc->dh_params_file = ap_server_root_relative(p, "conf/dhfile"); |
281 | sc->rsa_params_file = ap_server_root_relative(p, "conf/rsafile"); | 371 | sc->rsa_params_file = ap_server_root_relative(p, "conf/rsafile"); |
282 | 372 | ||
283 | /* Finish SSL Client Certificate Support */ | ||
284 | sc->client_verify_mode = GNUTLS_CERT_IGNORE; | 373 | sc->client_verify_mode = GNUTLS_CERT_IGNORE; |
285 | 374 | ||
286 | /* TODO: Make this Configurable ! */ | ||
287 | /* mod_ssl uses a flex based parser for this part.. sigh */ | ||
288 | i = 0; | ||
289 | sc->ciphers[i++] = GNUTLS_CIPHER_AES_256_CBC; | ||
290 | sc->ciphers[i++] = GNUTLS_CIPHER_AES_128_CBC; | ||
291 | sc->ciphers[i++] = GNUTLS_CIPHER_ARCFOUR_128; | ||
292 | sc->ciphers[i++] = GNUTLS_CIPHER_3DES_CBC; | ||
293 | sc->ciphers[i++] = GNUTLS_CIPHER_ARCFOUR_40; | ||
294 | sc->ciphers[i] = 0; | ||
295 | |||
296 | i = 0; | ||
297 | sc->key_exchange[i++] = GNUTLS_KX_RSA; | ||
298 | sc->key_exchange[i++] = GNUTLS_KX_RSA_EXPORT; | ||
299 | sc->key_exchange[i++] = GNUTLS_KX_DHE_DSS; | ||
300 | sc->key_exchange[i++] = GNUTLS_KX_DHE_RSA; | ||
301 | sc->key_exchange[i++] = GNUTLS_KX_ANON_DH; | ||
302 | sc->key_exchange[i++] = GNUTLS_KX_SRP; | ||
303 | sc->key_exchange[i++] = GNUTLS_KX_SRP_RSA; | ||
304 | sc->key_exchange[i++] = GNUTLS_KX_SRP_DSS; | ||
305 | sc->key_exchange[i] = 0; | ||
306 | |||
307 | i = 0; | ||
308 | sc->macs[i++] = GNUTLS_MAC_SHA; | ||
309 | sc->macs[i++] = GNUTLS_MAC_MD5; | ||
310 | sc->macs[i++] = GNUTLS_MAC_RMD160; | ||
311 | sc->macs[i] = 0; | ||
312 | |||
313 | i = 0; | ||
314 | sc->protocol[i++] = GNUTLS_TLS1_1; | ||
315 | sc->protocol[i++] = GNUTLS_TLS1; | ||
316 | sc->protocol[i++] = GNUTLS_SSL3; | ||
317 | sc->protocol[i] = 0; | ||
318 | |||
319 | i = 0; | ||
320 | sc->compression[i++] = GNUTLS_COMP_NULL; | ||
321 | sc->compression[i++] = GNUTLS_COMP_ZLIB; | ||
322 | sc->compression[i++] = GNUTLS_COMP_LZO; | ||
323 | sc->compression[i] = 0; | ||
324 | |||
325 | i = 0; | ||
326 | sc->cert_types[i++] = GNUTLS_CRT_X509; | ||
327 | sc->cert_types[i] = 0; | ||
328 | |||
329 | return sc; | 375 | return sc; |
330 | } | 376 | } |
331 | 377 | ||
332 | void *mgs_config_dir_merge(apr_pool_t *p, void *basev, void *addv) | 378 | void *mgs_config_dir_merge(apr_pool_t * p, void *basev, void *addv) |
333 | { | 379 | { |
334 | mgs_dirconf_rec *new; | 380 | mgs_dirconf_rec *new; |
335 | mgs_dirconf_rec *base = (mgs_dirconf_rec *) basev; | 381 | /* mgs_dirconf_rec *base = (mgs_dirconf_rec *) basev; */ |
336 | mgs_dirconf_rec *add = (mgs_dirconf_rec *) addv; | 382 | mgs_dirconf_rec *add = (mgs_dirconf_rec *) addv; |
337 | 383 | ||
338 | new = (mgs_dirconf_rec *) apr_pcalloc(p, sizeof(mgs_dirconf_rec)); | 384 | new = (mgs_dirconf_rec *) apr_pcalloc(p, sizeof(mgs_dirconf_rec)); |
339 | new->lua_bytecode = apr_pstrmemdup(p, add->lua_bytecode, | 385 | new->lua_bytecode = apr_pstrmemdup(p, add->lua_bytecode, |
340 | add->lua_bytecode_len); | 386 | add->lua_bytecode_len); |
341 | new->lua_bytecode_len = add->lua_bytecode_len; | 387 | new->lua_bytecode_len = add->lua_bytecode_len; |
342 | new->client_verify_mode = add->client_verify_mode; | 388 | new->client_verify_mode = add->client_verify_mode; |
343 | return new; | 389 | return new; |
344 | } | 390 | } |
345 | 391 | ||
346 | void *mgs_config_dir_create(apr_pool_t *p, char *dir) | 392 | void *mgs_config_dir_create(apr_pool_t * p, char *dir) |
347 | { | 393 | { |
348 | mgs_dirconf_rec *dc = apr_palloc(p, sizeof(*dc)); | 394 | mgs_dirconf_rec *dc = apr_palloc(p, sizeof(*dc)); |
349 | 395 | ||
350 | dc->client_verify_mode = -1; | 396 | dc->client_verify_mode = -1; |
351 | dc->lua_bytecode = NULL; | 397 | dc->lua_bytecode = NULL; |
352 | dc->lua_bytecode_len = 0; | 398 | dc->lua_bytecode_len = 0; |
353 | return dc; | 399 | return dc; |
354 | } | 400 | } |
355 | |||