X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fsrc%2Facl.c;h=1bf118764baa1b1e67b8f38fa8dd4df56f9d9695;hb=0103b34645278151851c31cf1c1976150d907bb4;hp=ce8d2189f2331a39d2b376d40b9bdc6697cf669d;hpb=82fecf8fd8f749abfc538a06d9eefc7119e014ae;p=user%2Fhenk%2Fcode%2Fexim.git diff --git a/src/src/acl.c b/src/src/acl.c index ce8d2189f..1bf118764 100644 --- a/src/src/acl.c +++ b/src/src/acl.c @@ -486,7 +486,7 @@ static control_def controls_list[] = { { US"no_delay_flush", FALSE, ACL_BIT_NOTSMTP | ACL_BIT_NOTSMTP_START }, - + [CONTROL_NO_ENFORCE_SYNC] = { US"no_enforce_sync", FALSE, ACL_BIT_NOTSMTP | ACL_BIT_NOTSMTP_START @@ -744,7 +744,7 @@ while ((s = (*func)())) int v, c; BOOL negated = FALSE; uschar *saveline = s; - uschar name[64]; + uschar name[EXIM_DRIVERNAME_MAX]; /* Conditions (but not verbs) are allowed to be negated by an initial exclamation mark. */ @@ -3702,20 +3702,22 @@ for (; cb; cb = cb->next) #endif case ACLC_QUEUE: - if (is_tainted(arg)) - { - *log_msgptr = string_sprintf("Tainted name '%s' for queue not permitted", - arg); - return ERROR; - } - if (Ustrchr(arg, '/')) { - *log_msgptr = string_sprintf( - "Directory separator not permitted in queue name: '%s'", arg); - return ERROR; + uschar *m; + if ((m = is_tainted2(arg, 0, "Tainted name '%s' for queue not permitted", arg))) + { + *log_msgptr = m; + return ERROR; + } + if (Ustrchr(arg, '/')) + { + *log_msgptr = string_sprintf( + "Directory separator not permitted in queue name: '%s'", arg); + return ERROR; + } + queue_name = string_copy_perm(arg, FALSE); + break; } - queue_name = string_copy_perm(arg, FALSE); - break; case ACLC_RATELIMIT: rc = acl_ratelimit(arg, where, log_msgptr); @@ -4088,25 +4090,14 @@ while (isspace(*ss)) ss++; acl_text = ss; -#ifdef notyet_taintwarn if ( !f.running_in_test_harness && is_tainted2(acl_text, LOG_MAIN|LOG_PANIC, - "attempt to use tainted ACL text \"%s\"", acl_text)) + "Tainted ACL text \"%s\"", acl_text)) { /* Avoid leaking info to an attacker */ *log_msgptr = US"internal configuration error"; return ERROR; } -#else -if (is_tainted(acl_text) && !f.running_in_test_harness) - { - log_write(0, LOG_MAIN|LOG_PANIC, - "attempt to use tainted ACL text \"%s\"", acl_text); - /* Avoid leaking info to an attacker */ - *log_msgptr = US"internal configuration error"; - return ERROR; - } -#endi /* Handle the case of a string that does not contain any spaces. Look for a named ACL among those read from the configuration, or a previously read file. @@ -4131,6 +4122,12 @@ if (Ustrchr(ss, ' ') == NULL) else if (*ss == '/') { struct stat statbuf; + if (is_tainted2(ss, LOG_MAIN|LOG_PANIC, "Tainted ACL file name '%s'", ss)) + { + /* Avoid leaking info to an attacker */ + *log_msgptr = US"internal configuration error"; + return ERROR; + } if ((fd = Uopen(ss, O_RDONLY, 0)) < 0) { *log_msgptr = string_sprintf("failed to open ACL file \"%s\": %s", ss,