aboutsummaryrefslogtreecommitdiff
path: root/src/rcfile.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/rcfile.c')
-rw-r--r--src/rcfile.c242
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:

Return to:

Send suggestions and report system problems to the System administrator.