summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Harris <jgh146exb@wizmail.org>2022-03-11 15:25:10 +0000
committerJeremy Harris <jgh146exb@wizmail.org>2022-03-11 15:28:07 +0000
commit1ed70f64c0df2c1428057c2ad5b3d43260087396 (patch)
tree1802362bb9567cf71ce84d27b0353466c3147267
parentfaa73f190673ae82a142f000a9ad2c13671f0376 (diff)
downloadexim4-1ed70f64c0df2c1428057c2ad5b3d43260087396.tar.gz
tidying
-rw-r--r--src/src/expand.c395
-rw-r--r--src/src/functions.h2
-rw-r--r--src/src/routers/queryprogram.c4
-rw-r--r--src/src/routers/redirect.c9
-rw-r--r--src/src/transport.c10
-rw-r--r--src/src/transports/smtp.c2
6 files changed, 201 insertions, 221 deletions
diff --git a/src/src/expand.c b/src/src/expand.c
index 0eb9fbff4..b7719f642 100644
--- a/src/src/expand.c
+++ b/src/src/expand.c
@@ -2898,64 +2898,49 @@ switch(cond_type = identify_operator(&s, &opname))
{
case ECOND_NUM_E:
case ECOND_NUM_EE:
- tempcond = (num[0] == num[1]);
- break;
+ tempcond = (num[0] == num[1]); break;
case ECOND_NUM_G:
- tempcond = (num[0] > num[1]);
- break;
+ tempcond = (num[0] > num[1]); break;
case ECOND_NUM_GE:
- tempcond = (num[0] >= num[1]);
- break;
+ tempcond = (num[0] >= num[1]); break;
case ECOND_NUM_L:
- tempcond = (num[0] < num[1]);
- break;
+ tempcond = (num[0] < num[1]); break;
case ECOND_NUM_LE:
- tempcond = (num[0] <= num[1]);
- break;
+ tempcond = (num[0] <= num[1]); break;
case ECOND_STR_LT:
- tempcond = (Ustrcmp(sub[0], sub[1]) < 0);
- break;
+ tempcond = (Ustrcmp(sub[0], sub[1]) < 0); break;
case ECOND_STR_LTI:
- tempcond = (strcmpic(sub[0], sub[1]) < 0);
- break;
+ tempcond = (strcmpic(sub[0], sub[1]) < 0); break;
case ECOND_STR_LE:
- tempcond = (Ustrcmp(sub[0], sub[1]) <= 0);
- break;
+ tempcond = (Ustrcmp(sub[0], sub[1]) <= 0); break;
case ECOND_STR_LEI:
- tempcond = (strcmpic(sub[0], sub[1]) <= 0);
- break;
+ tempcond = (strcmpic(sub[0], sub[1]) <= 0); break;
case ECOND_STR_EQ:
- tempcond = (Ustrcmp(sub[0], sub[1]) == 0);
- break;
+ tempcond = (Ustrcmp(sub[0], sub[1]) == 0); break;
case ECOND_STR_EQI:
- tempcond = (strcmpic(sub[0], sub[1]) == 0);
- break;
+ tempcond = (strcmpic(sub[0], sub[1]) == 0); break;
case ECOND_STR_GT:
- tempcond = (Ustrcmp(sub[0], sub[1]) > 0);
- break;
+ tempcond = (Ustrcmp(sub[0], sub[1]) > 0); break;
case ECOND_STR_GTI:
- tempcond = (strcmpic(sub[0], sub[1]) > 0);
- break;
+ tempcond = (strcmpic(sub[0], sub[1]) > 0); break;
case ECOND_STR_GE:
- tempcond = (Ustrcmp(sub[0], sub[1]) >= 0);
- break;
+ tempcond = (Ustrcmp(sub[0], sub[1]) >= 0); break;
case ECOND_STR_GEI:
- tempcond = (strcmpic(sub[0], sub[1]) >= 0);
- break;
+ tempcond = (strcmpic(sub[0], sub[1]) >= 0); break;
case ECOND_MATCH: /* Regular expression match */
{
@@ -2978,72 +2963,68 @@ switch(cond_type = identify_operator(&s, &opname))
}
case ECOND_MATCH_ADDRESS: /* Match in an address list */
- rc = match_address_list(sub[0], TRUE, FALSE, &(sub[1]), NULL, -1, 0, NULL);
- goto MATCHED_SOMETHING;
+ rc = match_address_list(sub[0], TRUE, FALSE, &(sub[1]), NULL, -1, 0,
+ NULL);
+ goto MATCHED_SOMETHING;
case ECOND_MATCH_DOMAIN: /* Match in a domain list */
- rc = match_isinlist(sub[0], &(sub[1]), 0, &domainlist_anchor, NULL,
- MCL_DOMAIN + MCL_NOEXPAND, TRUE, NULL);
- goto MATCHED_SOMETHING;
+ rc = match_isinlist(sub[0], &(sub[1]), 0, &domainlist_anchor, NULL,
+ MCL_DOMAIN + MCL_NOEXPAND, TRUE, NULL);
+ goto MATCHED_SOMETHING;
case ECOND_MATCH_IP: /* Match IP address in a host list */
- if (sub[0][0] != 0 && string_is_ip_address(sub[0], NULL) == 0)
- {
- expand_string_message = string_sprintf("\"%s\" is not an IP address",
- sub[0]);
- return NULL;
- }
- else
- {
- unsigned int *nullcache = NULL;
- check_host_block cb;
-
- cb.host_name = US"";
- cb.host_address = sub[0];
-
- /* If the host address starts off ::ffff: it is an IPv6 address in
- IPv4-compatible mode. Find the IPv4 part for checking against IPv4
- addresses. */
-
- cb.host_ipv4 = (Ustrncmp(cb.host_address, "::ffff:", 7) == 0)?
- cb.host_address + 7 : cb.host_address;
-
- rc = match_check_list(
- &sub[1], /* the list */
- 0, /* separator character */
- &hostlist_anchor, /* anchor pointer */
- &nullcache, /* cache pointer */
- check_host, /* function for testing */
- &cb, /* argument for function */
- MCL_HOST, /* type of check */
- sub[0], /* text for debugging */
- NULL); /* where to pass back data */
- }
- goto MATCHED_SOMETHING;
+ if (sub[0][0] != 0 && string_is_ip_address(sub[0], NULL) == 0)
+ {
+ expand_string_message = string_sprintf("\"%s\" is not an IP address",
+ sub[0]);
+ return NULL;
+ }
+ else
+ {
+ unsigned int *nullcache = NULL;
+ check_host_block cb;
+
+ cb.host_name = US"";
+ cb.host_address = sub[0];
+
+ /* If the host address starts off ::ffff: it is an IPv6 address in
+ IPv4-compatible mode. Find the IPv4 part for checking against IPv4
+ addresses. */
+
+ cb.host_ipv4 = (Ustrncmp(cb.host_address, "::ffff:", 7) == 0)?
+ cb.host_address + 7 : cb.host_address;
+
+ rc = match_check_list(
+ &sub[1], /* the list */
+ 0, /* separator character */
+ &hostlist_anchor, /* anchor pointer */
+ &nullcache, /* cache pointer */
+ check_host, /* function for testing */
+ &cb, /* argument for function */
+ MCL_HOST, /* type of check */
+ sub[0], /* text for debugging */
+ NULL); /* where to pass back data */
+ }
+ goto MATCHED_SOMETHING;
case ECOND_MATCH_LOCAL_PART:
- rc = match_isinlist(sub[0], &(sub[1]), 0, &localpartlist_anchor, NULL,
- MCL_LOCALPART + MCL_NOEXPAND, TRUE, NULL);
- /* Fall through */
- /* VVVVVVVVVVVV */
- MATCHED_SOMETHING:
- switch(rc)
- {
- case OK:
- tempcond = TRUE;
- break;
-
- case FAIL:
- tempcond = FALSE;
- break;
+ rc = match_isinlist(sub[0], &(sub[1]), 0, &localpartlist_anchor, NULL,
+ MCL_LOCALPART + MCL_NOEXPAND, TRUE, NULL);
+ /* Fall through */
+ /* VVVVVVVVVVVV */
+ MATCHED_SOMETHING:
+ switch(rc)
+ {
+ case OK: tempcond = TRUE; break;
+ case FAIL: tempcond = FALSE; break;
- case DEFER:
- expand_string_message = string_sprintf("unable to complete match "
- "against \"%s\": %s", sub[1], search_error_message);
- return NULL;
- }
+ case DEFER:
+ expand_string_message = string_sprintf("unable to complete match "
+ "against \"%s\": %s", sub[1], search_error_message);
+ return NULL;
+ }
- break;
+ break;
/* Various "encrypted" comparisons. If the second string starts with
"{" then an encryption type is given. Default to crypt() or crypt16()
@@ -3052,138 +3033,138 @@ switch(cond_type = identify_operator(&s, &opname))
case ECOND_CRYPTEQ:
#ifndef SUPPORT_CRYPTEQ
- goto COND_FAILED_NOT_COMPILED;
+ goto COND_FAILED_NOT_COMPILED;
#else
- if (strncmpic(sub[1], US"{md5}", 5) == 0)
- {
- int sublen = Ustrlen(sub[1]+5);
- md5 base;
- uschar digest[16];
+ if (strncmpic(sub[1], US"{md5}", 5) == 0)
+ {
+ int sublen = Ustrlen(sub[1]+5);
+ md5 base;
+ uschar digest[16];
- md5_start(&base);
- md5_end(&base, sub[0], Ustrlen(sub[0]), digest);
+ md5_start(&base);
+ md5_end(&base, sub[0], Ustrlen(sub[0]), digest);
- /* If the length that we are comparing against is 24, the MD5 digest
- is expressed as a base64 string. This is the way LDAP does it. However,
- some other software uses a straightforward hex representation. We assume
- this if the length is 32. Other lengths fail. */
+ /* If the length that we are comparing against is 24, the MD5 digest
+ is expressed as a base64 string. This is the way LDAP does it. However,
+ some other software uses a straightforward hex representation. We assume
+ this if the length is 32. Other lengths fail. */
- if (sublen == 24)
- {
- uschar *coded = b64encode(CUS digest, 16);
- DEBUG(D_auth) debug_printf("crypteq: using MD5+B64 hashing\n"
- " subject=%s\n crypted=%s\n", coded, sub[1]+5);
- tempcond = (Ustrcmp(coded, sub[1]+5) == 0);
- }
- else if (sublen == 32)
- {
- uschar coded[36];
- for (int i = 0; i < 16; i++) sprintf(CS (coded+2*i), "%02X", digest[i]);
- coded[32] = 0;
- DEBUG(D_auth) debug_printf("crypteq: using MD5+hex hashing\n"
- " subject=%s\n crypted=%s\n", coded, sub[1]+5);
- tempcond = (strcmpic(coded, sub[1]+5) == 0);
- }
- else
- {
- DEBUG(D_auth) debug_printf("crypteq: length for MD5 not 24 or 32: "
- "fail\n crypted=%s\n", sub[1]+5);
- tempcond = FALSE;
- }
- }
+ if (sublen == 24)
+ {
+ uschar *coded = b64encode(CUS digest, 16);
+ DEBUG(D_auth) debug_printf("crypteq: using MD5+B64 hashing\n"
+ " subject=%s\n crypted=%s\n", coded, sub[1]+5);
+ tempcond = (Ustrcmp(coded, sub[1]+5) == 0);
+ }
+ else if (sublen == 32)
+ {
+ uschar coded[36];
+ for (int i = 0; i < 16; i++) sprintf(CS (coded+2*i), "%02X", digest[i]);
+ coded[32] = 0;
+ DEBUG(D_auth) debug_printf("crypteq: using MD5+hex hashing\n"
+ " subject=%s\n crypted=%s\n", coded, sub[1]+5);
+ tempcond = (strcmpic(coded, sub[1]+5) == 0);
+ }
+ else
+ {
+ DEBUG(D_auth) debug_printf("crypteq: length for MD5 not 24 or 32: "
+ "fail\n crypted=%s\n", sub[1]+5);
+ tempcond = FALSE;
+ }
+ }
- else if (strncmpic(sub[1], US"{sha1}", 6) == 0)
- {
- int sublen = Ustrlen(sub[1]+6);
- hctx h;
- uschar digest[20];
+ else if (strncmpic(sub[1], US"{sha1}", 6) == 0)
+ {
+ int sublen = Ustrlen(sub[1]+6);
+ hctx h;
+ uschar digest[20];
- sha1_start(&h);
- sha1_end(&h, sub[0], Ustrlen(sub[0]), digest);
+ sha1_start(&h);
+ sha1_end(&h, sub[0], Ustrlen(sub[0]), digest);
- /* If the length that we are comparing against is 28, assume the SHA1
- digest is expressed as a base64 string. If the length is 40, assume a
- straightforward hex representation. Other lengths fail. */
+ /* If the length that we are comparing against is 28, assume the SHA1
+ digest is expressed as a base64 string. If the length is 40, assume a
+ straightforward hex representation. Other lengths fail. */
- if (sublen == 28)
- {
- uschar *coded = b64encode(CUS digest, 20);
- DEBUG(D_auth) debug_printf("crypteq: using SHA1+B64 hashing\n"
- " subject=%s\n crypted=%s\n", coded, sub[1]+6);
- tempcond = (Ustrcmp(coded, sub[1]+6) == 0);
- }
- else if (sublen == 40)
- {
- uschar coded[44];
- for (int i = 0; i < 20; i++) sprintf(CS (coded+2*i), "%02X", digest[i]);
- coded[40] = 0;
- DEBUG(D_auth) debug_printf("crypteq: using SHA1+hex hashing\n"
- " subject=%s\n crypted=%s\n", coded, sub[1]+6);
- tempcond = (strcmpic(coded, sub[1]+6) == 0);
- }
- else
- {
- DEBUG(D_auth) debug_printf("crypteq: length for SHA-1 not 28 or 40: "
- "fail\n crypted=%s\n", sub[1]+6);
- tempcond = FALSE;
- }
- }
+ if (sublen == 28)
+ {
+ uschar *coded = b64encode(CUS digest, 20);
+ DEBUG(D_auth) debug_printf("crypteq: using SHA1+B64 hashing\n"
+ " subject=%s\n crypted=%s\n", coded, sub[1]+6);
+ tempcond = (Ustrcmp(coded, sub[1]+6) == 0);
+ }
+ else if (sublen == 40)
+ {
+ uschar coded[44];
+ for (int i = 0; i < 20; i++) sprintf(CS (coded+2*i), "%02X", digest[i]);
+ coded[40] = 0;
+ DEBUG(D_auth) debug_printf("crypteq: using SHA1+hex hashing\n"
+ " subject=%s\n crypted=%s\n", coded, sub[1]+6);
+ tempcond = (strcmpic(coded, sub[1]+6) == 0);
+ }
+ else
+ {
+ DEBUG(D_auth) debug_printf("crypteq: length for SHA-1 not 28 or 40: "
+ "fail\n crypted=%s\n", sub[1]+6);
+ tempcond = FALSE;
+ }
+ }
- else /* {crypt} or {crypt16} and non-{ at start */
- /* }-for-text-editors */
- {
- int which = 0;
- uschar *coded;
+ else /* {crypt} or {crypt16} and non-{ at start */
+ /* }-for-text-editors */
+ {
+ int which = 0;
+ uschar *coded;
- if (strncmpic(sub[1], US"{crypt}", 7) == 0)
- {
- sub[1] += 7;
- which = 1;
- }
- else if (strncmpic(sub[1], US"{crypt16}", 9) == 0)
- {
- sub[1] += 9;
- which = 2;
- }
- else if (sub[1][0] == '{') /* }-for-text-editors */
- {
- expand_string_message = string_sprintf("unknown encryption mechanism "
- "in \"%s\"", sub[1]);
- return NULL;
- }
+ if (strncmpic(sub[1], US"{crypt}", 7) == 0)
+ {
+ sub[1] += 7;
+ which = 1;
+ }
+ else if (strncmpic(sub[1], US"{crypt16}", 9) == 0)
+ {
+ sub[1] += 9;
+ which = 2;
+ }
+ else if (sub[1][0] == '{') /* }-for-text-editors */
+ {
+ expand_string_message = string_sprintf("unknown encryption mechanism "
+ "in \"%s\"", sub[1]);
+ return NULL;
+ }
- switch(which)
- {
- case 0: coded = US DEFAULT_CRYPT(CS sub[0], CS sub[1]); break;
- case 1: coded = US crypt(CS sub[0], CS sub[1]); break;
- default: coded = US crypt16(CS sub[0], CS sub[1]); break;
- }
+ switch(which)
+ {
+ case 0: coded = US DEFAULT_CRYPT(CS sub[0], CS sub[1]); break;
+ case 1: coded = US crypt(CS sub[0], CS sub[1]); break;
+ default: coded = US crypt16(CS sub[0], CS sub[1]); break;
+ }
- #define STR(s) # s
- #define XSTR(s) STR(s)
- DEBUG(D_auth) debug_printf("crypteq: using %s()\n"
- " subject=%s\n crypted=%s\n",
- which == 0 ? XSTR(DEFAULT_CRYPT) : which == 1 ? "crypt" : "crypt16",
- coded, sub[1]);
- #undef STR
- #undef XSTR
-
- /* If the encrypted string contains fewer than two characters (for the
- salt), force failure. Otherwise we get false positives: with an empty
- string the yield of crypt() is an empty string! */
-
- if (coded)
- tempcond = Ustrlen(sub[1]) < 2 ? FALSE : Ustrcmp(coded, sub[1]) == 0;
- else if (errno == EINVAL)
- tempcond = FALSE;
- else
- {
- expand_string_message = string_sprintf("crypt error: %s\n",
- US strerror(errno));
- return NULL;
+ #define STR(s) # s
+ #define XSTR(s) STR(s)
+ DEBUG(D_auth) debug_printf("crypteq: using %s()\n"
+ " subject=%s\n crypted=%s\n",
+ which == 0 ? XSTR(DEFAULT_CRYPT) : which == 1 ? "crypt" : "crypt16",
+ coded, sub[1]);
+ #undef STR
+ #undef XSTR
+
+ /* If the encrypted string contains fewer than two characters (for the
+ salt), force failure. Otherwise we get false positives: with an empty
+ string the yield of crypt() is an empty string! */
+
+ if (coded)
+ tempcond = Ustrlen(sub[1]) < 2 ? FALSE : Ustrcmp(coded, sub[1]) == 0;
+ else if (errno == EINVAL)
+ tempcond = FALSE;
+ else
+ {
+ expand_string_message = string_sprintf("crypt error: %s\n",
+ US strerror(errno));
+ return NULL;
+ }
}
- }
- break;
+ break;
#endif /* SUPPORT_CRYPTEQ */
case ECOND_INLIST:
diff --git a/src/src/functions.h b/src/src/functions.h
index 43840d4f6..d05d87450 100644
--- a/src/src/functions.h
+++ b/src/src/functions.h
@@ -616,7 +616,7 @@ extern BOOL transport_pass_socket(const uschar *, const uschar *, const uscha
);
extern uschar *transport_rcpt_address(address_item *, BOOL);
extern BOOL transport_set_up_command(const uschar ***, uschar *,
- BOOL, int, address_item *, uschar *, uschar **);
+ BOOL, int, address_item *, const uschar *, uschar **);
extern void transport_update_waiting(host_item *, uschar *);
extern BOOL transport_write_block(transport_ctx *, uschar *, int, BOOL);
extern void transport_write_reset(int);
diff --git a/src/src/routers/queryprogram.c b/src/src/routers/queryprogram.c
index d59da53b2..644025a61 100644
--- a/src/src/routers/queryprogram.c
+++ b/src/src/routers/queryprogram.c
@@ -86,13 +86,13 @@ queryprogram_router_options_block *ob =
/* A command must be given */
-if (ob->command == NULL)
+if (!ob->command)
log_write(0, LOG_PANIC_DIE|LOG_CONFIG_FOR, "%s router:\n "
"a command specification is required", rblock->name);
/* A uid/gid must be supplied */
-if (!ob->cmd_uid_set && ob->expand_cmd_uid == NULL)
+if (!ob->cmd_uid_set && !ob->expand_cmd_uid)
log_write(0, LOG_PANIC_DIE|LOG_CONFIG_FOR, "%s router:\n "
"command_user must be specified", rblock->name);
}
diff --git a/src/src/routers/redirect.c b/src/src/routers/redirect.c
index bcad39402..6a26de9ee 100644
--- a/src/src/routers/redirect.c
+++ b/src/src/routers/redirect.c
@@ -395,14 +395,14 @@ while (generated)
if (next->address[0] == '|')
{
address_pipe = next->address;
- if (rf_get_transport(ob->pipe_transport_name, &(ob->pipe_transport),
+ if (rf_get_transport(ob->pipe_transport_name, &ob->pipe_transport,
next, rblock->name, US"pipe_transport"))
next->transport = ob->pipe_transport;
address_pipe = NULL;
}
else if (next->address[0] == '>')
{
- if (rf_get_transport(ob->reply_transport_name, &(ob->reply_transport),
+ if (rf_get_transport(ob->reply_transport_name, &ob->reply_transport,
next, rblock->name, US"reply_transport"))
next->transport = ob->reply_transport;
}
@@ -418,11 +418,10 @@ while (generated)
next->transport = ob->directory_transport;
}
else
- {
- if (rf_get_transport(ob->file_transport_name, &(ob->file_transport),
+ if (rf_get_transport(ob->file_transport_name, &ob->file_transport,
next, rblock->name, US"file_transport"))
next->transport = ob->file_transport;
- }
+
address_file = NULL;
}
}
diff --git a/src/src/transport.c b/src/src/transport.c
index 37623ea1a..d04ee40cd 100644
--- a/src/src/transport.c
+++ b/src/src/transport.c
@@ -2077,7 +2077,7 @@ Returns: TRUE if all went well; otherwise an error will be
BOOL
transport_set_up_command(const uschar ***argvptr, uschar *cmd,
BOOL expand_arguments, int expand_failed, address_item *addr,
- uschar *etext, uschar **errptr)
+ const uschar * etext, uschar ** errptr)
{
const uschar **argv;
uschar *s, *ss;
@@ -2165,7 +2165,6 @@ if (expand_arguments)
for (int i = 0; argv[i]; i++)
{
-
/* Handle special fudge for passing an address list */
if (addr &&
@@ -2265,8 +2264,9 @@ if (expand_arguments)
}
/* address_pipe_argcount - 1
- * because we are replacing $address_pipe in the argument list
- * with the first thing it expands to */
+ because we are replacing $address_pipe in the argument list
+ with the first thing it expands to */
+
if (argcount + address_pipe_argcount - 1 > max_args)
{
addr->transport_return = FAIL;
@@ -2296,7 +2296,7 @@ if (expand_arguments)
[argv 0][argv 1][argv 2=pipeargv[0]][argv 3=pipeargv[1]][old argv 3][0] */
for (int address_pipe_i = 0;
- address_pipe_argv[address_pipe_i] != US 0;
+ address_pipe_argv[address_pipe_i];
address_pipe_i++, argcount++)
argv[i++] = address_pipe_argv[address_pipe_i];
diff --git a/src/src/transports/smtp.c b/src/src/transports/smtp.c
index 6a979a243..e2c2680a0 100644
--- a/src/src/transports/smtp.c
+++ b/src/src/transports/smtp.c
@@ -3762,7 +3762,7 @@ if (tblock->filter_command)
if (!transport_set_up_command(&transport_filter_argv,
tblock->filter_command, TRUE, DEFER, addrlist,
- string_sprintf("%.50s transport", tblock->name), NULL))
+ string_sprintf("%.50s transport filter", tblock->name), NULL))
{
set_errno_nohost(addrlist->next, addrlist->basic_errno, addrlist->message, DEFER,
FALSE, &sx->delivery_start);