X-Git-Url: https://git.exim.org/exim.git/blobdiff_plain/5903c6ff59527362e869fedb565c56935ce8dd68..d12746bc15d83ab821be36975da0179672708bc1:/src/src/transports/lmtp.c diff --git a/src/src/transports/lmtp.c b/src/src/transports/lmtp.c index f26050fdc..240d78b21 100644 --- a/src/src/transports/lmtp.c +++ b/src/src/transports/lmtp.c @@ -2,7 +2,7 @@ * Exim - an Internet mail transport agent * *************************************************/ -/* Copyright (c) University of Cambridge 1995 - 2016 */ +/* Copyright (c) University of Cambridge 1995 - 2018 */ /* See the file NOTICE for conditions of use and distribution. */ @@ -223,20 +223,21 @@ Returns: TRUE if successful, FALSE if not, with errno set static BOOL lmtp_write_command(int fd, const char *format, ...) { -int count, rc; +gstring gs = { .size = big_buffer_size, .ptr = 0, .s = big_buffer }; +int rc; va_list ap; + va_start(ap, format); -if (!string_vformat(big_buffer, big_buffer_size, CS format, ap)) +if (!string_vformat(&gs, FALSE, CS format, ap)) { va_end(ap); errno = ERRNO_SMTPFORMAT; return FALSE; } va_end(ap); -count = Ustrlen(big_buffer); -DEBUG(D_transport|D_v) debug_printf(" LMTP>> %s", big_buffer); -rc = write(fd, big_buffer, count); -big_buffer[count-2] = 0; /* remove \r\n for debug and error message */ +DEBUG(D_transport|D_v) debug_printf(" LMTP>> %s", string_from_gstring(&gs)); +rc = write(fd, gs.s, gs.ptr); +gs.ptr -= 2; string_from_gstring(&gs); /* remove \r\n for debug and error message */ if (rc > 0) return TRUE; DEBUG(D_transport) debug_printf("write failed: %s\n", strerror(errno)); return FALSE; @@ -299,10 +300,10 @@ for (;;) *readptr = 0; /* In case nothing gets read */ sigalrm_seen = FALSE; - alarm(timeout); + ALARM(timeout); rc = Ufgets(readptr, size-1, f); save_errno = errno; - alarm(0); + ALARM_CLR(0); errno = save_errno; if (rc != NULL) break; /* A line has been read */ @@ -490,7 +491,7 @@ if (ob->cmd) return FALSE; /* If the -N option is set, can't do any more. Presume all has gone well. */ - if (dont_deliver) + if (f.dont_deliver) goto MINUS_N; /* As this is a local transport, we are already running with the required @@ -528,7 +529,7 @@ else } /* If the -N option is set, can't do any more. Presume all has gone well. */ - if (dont_deliver) + if (f.dont_deliver) goto MINUS_N; sockun.sun_family = AF_UNIX;