/* GNU Mailutils -- a suite of utilities for electronic mail Copyright (C) 2003-2021 Free Software Foundation, Inc. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library. If not, see . */ #if HAVE_CONFIG_H # include #endif #include #include #include #include #include #include struct safety_check_closure { int defval; int *data; }; static int cb_safety_checks (const char *name, void *data) { struct safety_check_closure *cp = data; if (mu_file_safety_compose (cp->data, name, cp->defval)) mu_error (_("unknown keyword: %s"), name); return 0; } static int cb_cert_safety_checks (void *data, mu_config_value_t *arg) { struct safety_check_closure clos; clos.defval = MU_TLS_CERT_FILE_CHECKS; clos.data = data; return mu_cfg_string_value_cb (arg, cb_safety_checks, &clos); } static int cb_key_safety_checks (void *data, mu_config_value_t *arg) { struct safety_check_closure clos; clos.defval = MU_TLS_KEY_FILE_CHECKS; clos.data = data; return mu_cfg_string_value_cb (arg, cb_safety_checks, &clos); } static int cb_ca_safety_checks (void *data, mu_config_value_t *arg) { struct safety_check_closure clos; clos.defval = MU_TLS_CA_FILE_CHECKS; clos.data = data; return mu_cfg_string_value_cb (arg, cb_safety_checks, &clos); } static struct mu_cfg_param mu_tls_global_param[] = { { "key-file", mu_cfg_callback, &mu_tls_key_file_checks, 0, cb_key_safety_checks, N_("Configure safety checks for SSL key file. Argument is a list or " "sequence of check names optionally prefixed with '+' to enable or " "'-' to disable the corresponding check. Valid check names are:\n" "\n" " none disable all checks\n" " all enable all checks\n" " gwrfil forbid group writable files\n" " awrfil forbid world writable files\n" " grdfil forbid group readable files\n" " ardfil forbid world writable files\n" " linkwrdir forbid symbolic links in group or world writable directories\n" " gwrdir forbid files in group writable directories\n" " awrdir forbid files in world writable directories\n"), N_("arg: list") }, { "cert-file", mu_cfg_callback, &mu_tls_cert_file_checks, 0, cb_cert_safety_checks, N_("Configure safety checks for SSL certificate. See above for a description of ."), N_("arg: list") }, { "ca-file", mu_cfg_callback, &mu_tls_ca_file_checks, 0, cb_ca_safety_checks, N_("Configure safety checks for SSL certificate authority file. See above for a description of ."), N_("arg: list") }, { NULL } }; static struct mu_cfg_param tls_canned_param[] = { { "ssl-certificate-file", mu_c_string, NULL, mu_offsetof(struct mu_tls_config, cert_file), NULL, N_("Specify SSL certificate file."), N_("file") }, { "ssl-key-file", mu_c_string, NULL, mu_offsetof(struct mu_tls_config, key_file), NULL, N_("Specify SSL certificate key file."), N_("file") }, { "ssl-ca-file", mu_c_string, NULL, mu_offsetof(struct mu_tls_config, ca_file), NULL, N_("Specify trusted CAs file."), N_("file") }, { "ssl-priorities", mu_c_string, NULL, mu_offsetof(struct mu_tls_config, priorities), NULL, N_("Set the priorities to use on the ciphers, key exchange methods, " "macs and compression methods."), NULL }, { NULL } }; void mu_tls_cfg_init (void) { struct mu_cfg_section *section; if (mu_create_canned_section ("tls", §ion)) abort (); section->docstring = N_("Configure TLS"); section->label = NULL; mu_cfg_section_add_params (section, tls_canned_param); } struct mu_auth_module mu_auth_tls_module = { .name = "tls-file-checks", .cfg = mu_tls_global_param, };