X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fsrc%2Frda.c;h=13f570928b3a942e803ed9334853292e14d82d51;hb=c8b2f3749e953b254b4d6ac1ea047451eb771953;hp=ee7c1fe96376fcc853e5c64bd270ae7418e8f238;hpb=8768d5483a5894400ae1f70cda1beb44ed9b087c;p=user%2Fhenk%2Fcode%2Fexim.git diff --git a/src/src/rda.c b/src/src/rda.c index ee7c1fe96..13f570928 100644 --- a/src/src/rda.c +++ b/src/src/rda.c @@ -110,7 +110,7 @@ if (saved_errno == ENOENT) slash = Ustrrchr(big_buffer, '/'); Ustrcpy(slash+1, "."); - alarm(30); + ALARM(30); rc = Ustat(big_buffer, &statbuf); if (rc != 0 && errno == EACCES && !sigalrm_seen) { @@ -118,7 +118,7 @@ if (saved_errno == ENOENT) rc = Ustat(big_buffer, &statbuf); } saved_errno = errno; - alarm(0); + ALARM_CLR(0); DEBUG(D_route) debug_printf("stat(%s)=%d\n", big_buffer, rc); } @@ -492,7 +492,7 @@ return TRUE; /* This function is passed a forward list string (unexpanded) or the name of a file (unexpanded) whose contents are the forwarding list. The list may in fact be a filter program if it starts with "#Exim filter" or "#Sieve filter". Other -types of filter, with different inital tag strings, may be introduced in due +types of filter, with different initial tag strings, may be introduced in due course. The job of the function is to process the forwarding list or filter. It is @@ -718,11 +718,13 @@ if ((pid = fork()) == 0) for (addr = *generated; addr; addr = addr->next) { int reply_options = 0; + int ig_err = addr->prop.ignore_error ? 1 : 0; if ( rda_write_string(fd, addr->address) != 0 || write(fd, &addr->mode, sizeof(addr->mode)) != sizeof(addr->mode) || write(fd, &addr->flags, sizeof(addr->flags)) != sizeof(addr->flags) || rda_write_string(fd, addr->prop.errors_address) != 0 + || write(fd, &ig_err, sizeof(ig_err)) != sizeof(ig_err) ) goto bad; @@ -887,9 +889,13 @@ if (yield == FF_DELIVERED || yield == FF_NOTDELIVERED || /* Next comes the mode and the flags fields */ - if (read(fd, &addr->mode, sizeof(addr->mode)) != sizeof(addr->mode) || - read(fd, &addr->flags, sizeof(addr->flags)) != sizeof(addr->flags) || - !rda_read_string(fd, &addr->prop.errors_address)) goto DISASTER; + if ( read(fd, &addr->mode, sizeof(addr->mode)) != sizeof(addr->mode) + || read(fd, &addr->flags, sizeof(addr->flags)) != sizeof(addr->flags) + || !rda_read_string(fd, &addr->prop.errors_address) + || read(fd, &i, sizeof(i)) != sizeof(i) + ) + goto DISASTER; + addr->prop.ignore_error = (i != 0); /* Next comes a possible setting for $thisaddress and any numerical variables for pipe expansion, terminated by a NULL string. The maximum