diff options
Diffstat (limited to 'src/rcfile.c')
-rw-r--r-- | src/rcfile.c | 242 |
1 files changed, 125 insertions, 117 deletions
diff --git a/src/rcfile.c b/src/rcfile.c index 27033c3..9590e5b 100644 --- a/src/rcfile.c +++ b/src/rcfile.c @@ -4,3 +4,3 @@ This file is part of GNU Anubis. - Copyright (C) 2001-2014 The Anubis Team. + Copyright (C) 2001-2024 The Anubis Team. @@ -173,3 +173,3 @@ open_rcfile (int method) } - + if (check_filename (rcfile, &global_mtime) == 0) @@ -183,3 +183,3 @@ open_rcfile (int method) break; - + case CF_CLIENT: @@ -195,3 +195,3 @@ open_rcfile (int method) } - + if ((topt & T_RELAX_PERM_CHECK) == 0 && check_filemode (rcfile) == 0) @@ -225,39 +225,44 @@ process_rcfile (int method) /* ************************** The CONTROL Section ************************* */ -#define KW_BIND 0 -#define KW_TERMLEVEL 1 -#define KW_LOGLEVEL 2 -#define KW_LOGFILE 3 -#define KW_TRACEFILE 4 -#define KW_REMOTE_MTA 5 -#define KW_LOCAL_MTA 6 -#define KW_RULE_PRIORITY 7 -#define KW_CONTROL_PRIORITY 8 -#define KW_ESMTP_AUTH 9 -#define KW_DROP_UNKNOWN_USER 10 -#define KW_USER_NOTPRIVILEGED 11 -#define KW_SOCKS_PROXY 13 -#define KW_SOCKS_V4 14 -#define KW_SOCKS_AUTH 15 -#define KW_READ_ENTIRE_BODY 16 -#define KW_LOCAL_DOMAIN 17 -#define KW_MODE 18 -#define KW_ESMTP_ANONYMOUS_TOKEN 19 -#define KW_ESMTP_AUTH_ID 20 -#define KW_ESMTP_AUTHZ_ID 21 -#define KW_ESMTP_PASSWORD 22 -#define KW_ESMTP_SERVICE 23 -#define KW_ESMTP_HOSTNAME 24 -#define KW_ESMTP_GENERIC_SERVICE 25 -#define KW_ESMTP_PASSCODE 26 -#define KW_ESMTP_REALM 27 -#define KW_ESMTP_ALLOWED_MECH 28 -#define KW_ESMTP_REQUIRE_ENCRYPTION 29 -#define KW_INCOMING_MAIL_RULE 30 -#define KW_OUTGOING_MAIL_RULE 31 -#define KW_SMTP_COMMAND_RULE 32 -#define KW_HANG 33 -#define KW_ALLOW_HANG 34 -#define KW_LOG_FACILITY 35 -#define KW_LOG_TAG 36 -#define KW_ESMTP_AUTH_DELAYED 37 +enum + { + KW_BIND, + KW_TERMLEVEL, + KW_LOGLEVEL, + KW_LOGFILE, + KW_TRACEFILE, + KW_REMOTE_MTA, + KW_LOCAL_MTA, + KW_RULE_PRIORITY, + KW_CONTROL_PRIORITY, + KW_ESMTP_AUTH, + KW_DROP_UNKNOWN_USER, + KW_USER_NOTPRIVILEGED, + KW_SOCKS_PROXY, + KW_SOCKS_V4, + KW_SOCKS_AUTH, + KW_READ_ENTIRE_BODY, + KW_LOCAL_DOMAIN, + KW_MODE, + KW_ESMTP_ANONYMOUS_TOKEN, + KW_ESMTP_AUTH_ID, + KW_ESMTP_AUTHZ_ID, + KW_ESMTP_PASSWORD, + KW_ESMTP_SERVICE, + KW_ESMTP_HOSTNAME, + KW_ESMTP_GENERIC_SERVICE, + KW_ESMTP_PASSCODE, + KW_ESMTP_REALM, + KW_ESMTP_ALLOWED_MECH, + KW_ESMTP_REQUIRE_ENCRYPTION, + KW_INCOMING_MAIL_RULE, + KW_OUTGOING_MAIL_RULE, + KW_SMTP_COMMAND_RULE, + KW_HANG, + KW_ALLOW_HANG, + KW_LOG_FACILITY, + KW_LOG_TAG, + KW_ESMTP_AUTH_DELAYED, + KW_USE_PAM, + KW_IDENTD_KEYFILE, + }; @@ -290,3 +295,3 @@ parse_log_facility (const char *arg) struct anubis_keyword kw[] = { - { "USER", LOG_USER }, + { "USER", LOG_USER }, { "DAEMON", LOG_DAEMON }, @@ -307,3 +312,3 @@ parse_log_facility (const char *arg) struct anubis_keyword *p; - + if (strlen (arg) > 4 && strncasecmp (arg, "LOG_", 4) == 0) @@ -320,3 +325,3 @@ parse_log_facility (const char *arg) } - + /* When HANG=NUMBER is set in CONTROL section, `_anubis_hang' is set and @@ -328,19 +333,3 @@ static volatile unsigned long _anubis_hang; /* List of users who are allowed to use HANG in their profiles */ -ANUBIS_LIST allow_hang_users; - -static struct rc_kwdef esmtp_kw[] = { - { "esmtp-auth", KW_ESMTP_AUTH, KWF_HIDDEN }, - { "esmtp-anonymous-token", KW_ESMTP_ANONYMOUS_TOKEN, KWF_HIDDEN }, - { "esmtp-auth-id", KW_ESMTP_AUTH_ID, KWF_HIDDEN }, - { "esmtp-authz-id", KW_ESMTP_AUTHZ_ID, KWF_HIDDEN }, - { "esmtp-password", KW_ESMTP_PASSWORD, KWF_HIDDEN }, - { "esmtp-service", KW_ESMTP_SERVICE, KWF_HIDDEN }, - { "esmtp-hostname", KW_ESMTP_HOSTNAME, KWF_HIDDEN }, - { "esmtp-generic-service", KW_ESMTP_SERVICE, KWF_HIDDEN }, - { "esmtp-passcode", KW_ESMTP_PASSCODE, KWF_HIDDEN }, - { "esmtp-realm", KW_ESMTP_REALM, KWF_HIDDEN }, - { "esmtp-allowed-mech", KW_ESMTP_ALLOWED_MECH }, - { "esmtp-require-encryption", KW_ESMTP_REQUIRE_ENCRYPTION }, - { NULL } -}; +ANUBIS_LIST allow_hang_users; @@ -368,3 +357,3 @@ parse_esmtp_kv (int key, ANUBIS_LIST arglist) break; - + case KW_ESMTP_ANONYMOUS_TOKEN: @@ -373,3 +362,3 @@ parse_esmtp_kv (int key, ANUBIS_LIST arglist) break; - + case KW_ESMTP_AUTH_ID: @@ -378,3 +367,3 @@ parse_esmtp_kv (int key, ANUBIS_LIST arglist) break; - + case KW_ESMTP_AUTHZ_ID: @@ -383,3 +372,3 @@ parse_esmtp_kv (int key, ANUBIS_LIST arglist) break; - + case KW_ESMTP_PASSWORD: @@ -388,3 +377,3 @@ parse_esmtp_kv (int key, ANUBIS_LIST arglist) break; - + case KW_ESMTP_SERVICE: @@ -393,3 +382,3 @@ parse_esmtp_kv (int key, ANUBIS_LIST arglist) break; - + case KW_ESMTP_HOSTNAME: @@ -398,3 +387,3 @@ parse_esmtp_kv (int key, ANUBIS_LIST arglist) break; - + case KW_ESMTP_GENERIC_SERVICE: @@ -403,3 +392,3 @@ parse_esmtp_kv (int key, ANUBIS_LIST arglist) break; - + case KW_ESMTP_PASSCODE: @@ -408,3 +397,3 @@ parse_esmtp_kv (int key, ANUBIS_LIST arglist) break; - + case KW_ESMTP_REALM: @@ -413,3 +402,3 @@ parse_esmtp_kv (int key, ANUBIS_LIST arglist) break; - + case KW_ESMTP_ALLOWED_MECH: @@ -418,3 +407,3 @@ parse_esmtp_kv (int key, ANUBIS_LIST arglist) break; - + case KW_ESMTP_REQUIRE_ENCRYPTION: @@ -425,3 +414,3 @@ parse_esmtp_kv (int key, ANUBIS_LIST arglist) return 1; -#endif +#endif } @@ -435,3 +424,3 @@ control_parser (EVAL_ENV env, int key, ANUBIS_LIST arglist, void *inv_data) int method = eval_env_method (env); - + switch (key) @@ -443,3 +432,3 @@ control_parser (EVAL_ENV env, int key, ANUBIS_LIST arglist, void *inv_data) break; - + case KW_RULE_PRIORITY: @@ -456,3 +445,3 @@ control_parser (EVAL_ENV env, int key, ANUBIS_LIST arglist, void *inv_data) break; - + case KW_CONTROL_PRIORITY: @@ -465,3 +454,3 @@ control_parser (EVAL_ENV env, int key, ANUBIS_LIST arglist, void *inv_data) break; - + case KW_TERMLEVEL: @@ -478,3 +467,3 @@ control_parser (EVAL_ENV env, int key, ANUBIS_LIST arglist, void *inv_data) break; - + case KW_USER_NOTPRIVILEGED: @@ -483,3 +472,3 @@ control_parser (EVAL_ENV env, int key, ANUBIS_LIST arglist, void *inv_data) break; - + case KW_LOGFILE: @@ -500,3 +489,3 @@ control_parser (EVAL_ENV env, int key, ANUBIS_LIST arglist, void *inv_data) break; - + case KW_LOGLEVEL: @@ -511,3 +500,3 @@ control_parser (EVAL_ENV env, int key, ANUBIS_LIST arglist, void *inv_data) break; - + case KW_TRACEFILE: @@ -540,3 +529,3 @@ control_parser (EVAL_ENV env, int key, ANUBIS_LIST arglist, void *inv_data) break; - + case KW_REMOTE_MTA: @@ -544,6 +533,6 @@ control_parser (EVAL_ENV env, int key, ANUBIS_LIST arglist, void *inv_data) break; - + case KW_LOCAL_MTA: xfree (session.execpath); - argcv_free (-1, session.execargs); + argv_free (session.execargs); session.execpath = strdup (arg); @@ -552,3 +541,3 @@ control_parser (EVAL_ENV env, int key, ANUBIS_LIST arglist, void *inv_data) break; - + case KW_LOCAL_DOMAIN: @@ -562,3 +551,3 @@ control_parser (EVAL_ENV env, int key, ANUBIS_LIST arglist, void *inv_data) break; - + case KW_SOCKS_V4: @@ -566,3 +555,3 @@ control_parser (EVAL_ENV env, int key, ANUBIS_LIST arglist, void *inv_data) break; - + case KW_SOCKS_AUTH: @@ -585,3 +574,3 @@ control_parser (EVAL_ENV env, int key, ANUBIS_LIST arglist, void *inv_data) break; - + case KW_DROP_UNKNOWN_USER: @@ -589,6 +578,5 @@ control_parser (EVAL_ENV env, int key, ANUBIS_LIST arglist, void *inv_data) break; - + case KW_MODE: - if (anubis_mode != anubis_mda) /* Special case. See comment to - KW_LOCAL_MAILER directive, though */ + if (anubis_mode != anubis_mda) { @@ -600,3 +588,3 @@ control_parser (EVAL_ENV env, int key, ANUBIS_LIST arglist, void *inv_data) break; - + case KW_INCOMING_MAIL_RULE: @@ -604,3 +592,3 @@ control_parser (EVAL_ENV env, int key, ANUBIS_LIST arglist, void *inv_data) break; - + case KW_OUTGOING_MAIL_RULE: @@ -612,3 +600,3 @@ control_parser (EVAL_ENV env, int key, ANUBIS_LIST arglist, void *inv_data) break; - + case KW_LOG_FACILITY: @@ -616,3 +604,3 @@ control_parser (EVAL_ENV env, int key, ANUBIS_LIST arglist, void *inv_data) break; - + case KW_LOG_TAG: @@ -620,3 +608,3 @@ control_parser (EVAL_ENV env, int key, ANUBIS_LIST arglist, void *inv_data) break; - + case KW_ALLOW_HANG: @@ -625,3 +613,3 @@ control_parser (EVAL_ENV env, int key, ANUBIS_LIST arglist, void *inv_data) ITERATOR itr = iterator_create (arglist); - + allow_hang_users = list_create (); @@ -631,3 +619,3 @@ control_parser (EVAL_ENV env, int key, ANUBIS_LIST arglist, void *inv_data) break; - + case KW_HANG: @@ -636,3 +624,3 @@ control_parser (EVAL_ENV env, int key, ANUBIS_LIST arglist, void *inv_data) int keep_termlevel = options.termlevel; - + _anubis_hang = atoi (arg ? arg : "3600"); @@ -645,3 +633,3 @@ control_parser (EVAL_ENV env, int key, ANUBIS_LIST arglist, void *inv_data) options.termlevel = keep_termlevel; - + while (_anubis_hang-- > 0) @@ -660,2 +648,20 @@ control_parser (EVAL_ENV env, int key, ANUBIS_LIST arglist, void *inv_data) #endif + + case KW_USE_PAM: + setbool (env, arg, use_pam, 1); +#if !defined(HAVE_PAM) + if (use_pam) + eval_error (0, env, + _("statement ignored: anubis compiled without PAM support")); +#endif + break; + + case KW_IDENTD_KEYFILE: + identd_keyfile_name = strdup (arg); +#if !defined(USE_GCRYPT) + eval_error (0, env, + _("statement ignored: anubis compiled without libgcrypt")); +#endif + break; + default: @@ -680,2 +686,4 @@ static struct rc_kwdef init_kw[] = { { "ALLOW-HANG", KW_ALLOW_HANG }, + { "use-pam", KW_USE_PAM }, + { "identd-keyfile", KW_IDENTD_KEYFILE }, { NULL }, @@ -777,3 +785,3 @@ tls_parser (EVAL_ENV env, int key, ANUBIS_LIST arglist, void *inv_data) break; - + case KW_SSL_ONEWAY: @@ -781,3 +789,3 @@ tls_parser (EVAL_ENV env, int key, ANUBIS_LIST arglist, void *inv_data) break; - + case KW_SSL_CERT: @@ -786,3 +794,3 @@ tls_parser (EVAL_ENV env, int key, ANUBIS_LIST arglist, void *inv_data) break; - + case KW_SSL_KEY: @@ -793,3 +801,3 @@ tls_parser (EVAL_ENV env, int key, ANUBIS_LIST arglist, void *inv_data) break; - + case KW_SSL_CAFILE: @@ -803,3 +811,3 @@ tls_parser (EVAL_ENV env, int key, ANUBIS_LIST arglist, void *inv_data) break; - + default: @@ -866,3 +874,3 @@ rule_parser (EVAL_ENV env, int key, ANUBIS_LIST arglist, void *inv_data) break; - + case KW_BODY_APPEND: @@ -870,3 +878,3 @@ rule_parser (EVAL_ENV env, int key, ANUBIS_LIST arglist, void *inv_data) break; - + case KW_BODY_CLEAR: @@ -874,3 +882,3 @@ rule_parser (EVAL_ENV env, int key, ANUBIS_LIST arglist, void *inv_data) break; - + case KW_BODY_CLEAR_APPEND: @@ -879,3 +887,3 @@ rule_parser (EVAL_ENV env, int key, ANUBIS_LIST arglist, void *inv_data) break; - + case KW_EXTERNAL_BODY_PROCESSOR: @@ -883,5 +891,5 @@ rule_parser (EVAL_ENV env, int key, ANUBIS_LIST arglist, void *inv_data) message_external_proc (msg, argv); - argcv_free (-1, argv); + argv_free (argv); break; - + default: @@ -935,3 +943,3 @@ smtp_rule_parser (EVAL_ENV env, int key, ANUBIS_LIST arglist, void *inv_data) break; - + case KW_BODY_APPEND: @@ -939,3 +947,3 @@ smtp_rule_parser (EVAL_ENV env, int key, ANUBIS_LIST arglist, void *inv_data) break; - + case KW_BODY_CLEAR: @@ -943,3 +951,3 @@ smtp_rule_parser (EVAL_ENV env, int key, ANUBIS_LIST arglist, void *inv_data) break; - + case KW_BODY_CLEAR_APPEND: @@ -948,3 +956,3 @@ smtp_rule_parser (EVAL_ENV env, int key, ANUBIS_LIST arglist, void *inv_data) break; - + case KW_EXTERNAL_BODY_PROCESSOR: @@ -952,5 +960,5 @@ smtp_rule_parser (EVAL_ENV env, int key, ANUBIS_LIST arglist, void *inv_data) message_external_proc (msg, argv); - argcv_free (-1, argv); + argv_free (argv); break; - + default: |