123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224 |
- --- ssmtp-2.61.orig/ssmtp.c 2004-07-23 07:58:48.000000000 +0200
- +++ ssmtp-2.61/ssmtp.c 2011-01-17 14:46:46.000000000 +0100
- @@ -93,6 +93,7 @@ SSL *ssl;
- static char hextab[]="0123456789abcdef";
- #endif
-
- +ssize_t outbytes;
-
- /*
- log_event() -- Write event to syslog (or log file if defined)
- @@ -129,7 +130,7 @@ void log_event(int priority, char *forma
- #endif
- }
-
- -void smtp_write(int fd, char *format, ...);
- +ssize_t smtp_write(int fd, char *format, ...);
- int smtp_read(int fd, char *response);
- int smtp_read_all(int fd, char *response);
- int smtp_okay(int fd, char *response);
- @@ -150,7 +151,7 @@ void dead_letter(void)
- if(isatty(fileno(stdin))) {
- if(log_level > 0) {
- log_event(LOG_ERR,
- - "stdin is a TTY - not saving to %s/dead.letter, pw->pw_dir");
- + "stdin is a TTY - not saving to %s/dead.letter", pw->pw_dir);
- }
- return;
- }
- @@ -964,6 +965,17 @@ bool_t read_config()
- log_event(LOG_INFO, "Set AuthMethod=\"%s\"\n", auth_method);
- }
- }
- + else if (strcasecmp(p, "Debug") == 0)
- + {
- + if (strcasecmp(q, "YES") == 0)
- + {
- + log_level = 1;
- + }
- + else
- + {
- + log_level = 0;
- + }
- + }
- else {
- log_event(LOG_INFO, "Unable to set %s=\"%s\"\n", p, q);
- }
- @@ -1232,10 +1244,11 @@ ssize_t fd_puts(int fd, const void *buf,
- /*
- smtp_write() -- A printf to an fd and append <CR/LF>
- */
- -void smtp_write(int fd, char *format, ...)
- +ssize_t smtp_write(int fd, char *format, ...)
- {
- char buf[(BUF_SZ + 1)];
- va_list ap;
- + ssize_t outbytes = 0;
-
- va_start(ap, format);
- if(vsnprintf(buf, (BUF_SZ - 2), format, ap) == -1) {
- @@ -1252,7 +1265,9 @@ void smtp_write(int fd, char *format, ..
- }
- (void)strcat(buf, "\r\n");
-
- - (void)fd_puts(fd, buf, strlen(buf));
- + outbytes = fd_puts(fd, buf, strlen(buf));
- +
- + return (outbytes >= 0) ? outbytes : 0;
- }
-
- /*
- @@ -1282,6 +1297,8 @@ int ssmtp(char *argv[])
- int i, sock;
- uid_t uid;
-
- + outbytes = 0;
- +
- uid = getuid();
- if((pw = getpwuid(uid)) == (struct passwd *)NULL) {
- die("Could not find password entry for UID %d", uid);
- @@ -1335,10 +1352,10 @@ int ssmtp(char *argv[])
-
- /* If user supplied username and password, then try ELHO */
- if(auth_user) {
- - smtp_write(sock, "EHLO %s", hostname);
- + outbytes += smtp_write(sock, "EHLO %s", hostname);
- }
- else {
- - smtp_write(sock, "HELO %s", hostname);
- + outbytes += smtp_write(sock, "HELO %s", hostname);
- }
- (void)alarm((unsigned) MEDWAIT);
-
- @@ -1354,7 +1371,7 @@ int ssmtp(char *argv[])
- }
-
- if(strcasecmp(auth_method, "cram-md5") == 0) {
- - smtp_write(sock, "AUTH CRAM-MD5");
- + outbytes += smtp_write(sock, "AUTH CRAM-MD5");
- (void)alarm((unsigned) MEDWAIT);
-
- if(smtp_read(sock, buf) != 3) {
- @@ -1369,7 +1386,7 @@ int ssmtp(char *argv[])
- #endif
- memset(buf, 0, sizeof(buf));
- to64frombits(buf, auth_user, strlen(auth_user));
- - smtp_write(sock, "AUTH LOGIN %s", buf);
- + outbytes += smtp_write(sock, "AUTH LOGIN %s", buf);
-
- (void)alarm((unsigned) MEDWAIT);
- if(smtp_read(sock, buf) != 3) {
- @@ -1381,7 +1398,7 @@ int ssmtp(char *argv[])
- #ifdef MD5AUTH
- }
- #endif
- - smtp_write(sock, "%s", buf);
- + outbytes += smtp_write(sock, "%s", buf);
- (void)alarm((unsigned) MEDWAIT);
-
- if(smtp_okay(sock, buf) == False) {
- @@ -1390,7 +1407,7 @@ int ssmtp(char *argv[])
- }
-
- /* Send "MAIL FROM:" line */
- - smtp_write(sock, "MAIL FROM:<%s>", uad);
- + outbytes += smtp_write(sock, "MAIL FROM:<%s>", uad);
-
- (void)alarm((unsigned) MEDWAIT);
-
- @@ -1408,7 +1425,7 @@ int ssmtp(char *argv[])
-
- while(rt->next) {
- p = rcpt_remap(rt->string);
- - smtp_write(sock, "RCPT TO:<%s>", p);
- + outbytes += smtp_write(sock, "RCPT TO:<%s>", p);
-
- (void)alarm((unsigned)MEDWAIT);
-
- @@ -1425,7 +1442,7 @@ int ssmtp(char *argv[])
- while(p) {
- /* RFC822 Address -> "foo@bar" */
- q = rcpt_remap(addr_parse(p));
- - smtp_write(sock, "RCPT TO:<%s>", q);
- + outbytes += smtp_write(sock, "RCPT TO:<%s>", q);
-
- (void)alarm((unsigned) MEDWAIT);
-
- @@ -1439,7 +1456,7 @@ int ssmtp(char *argv[])
- }
-
- /* Send DATA */
- - smtp_write(sock, "DATA");
- + outbytes += smtp_write(sock, "DATA");
- (void)alarm((unsigned) MEDWAIT);
-
- if(smtp_read(sock, buf) != 3) {
- @@ -1447,45 +1464,45 @@ int ssmtp(char *argv[])
- die("%s", buf);
- }
-
- - smtp_write(sock,
- + outbytes += smtp_write(sock,
- "Received: by %s (sSMTP sendmail emulation); %s", hostname, arpadate);
-
- if(have_from == False) {
- - smtp_write(sock, "From: %s", from);
- + outbytes += smtp_write(sock, "From: %s", from);
- }
-
- if(have_date == False) {
- - smtp_write(sock, "Date: %s", arpadate);
- + outbytes += smtp_write(sock, "Date: %s", arpadate);
- }
-
- #ifdef HASTO_OPTION
- if(have_to == False) {
- - smtp_write(sock, "To: postmaster");
- + outbytes += smtp_write(sock, "To: postmaster");
- }
- #endif
-
- ht = &headers;
- while(ht->next) {
- - smtp_write(sock, "%s", ht->string);
- + outbytes += smtp_write(sock, "%s", ht->string);
- ht = ht->next;
- }
-
- (void)alarm((unsigned) MEDWAIT);
-
- /* End of headers, start body */
- - smtp_write(sock, "");
- + outbytes += smtp_write(sock, "");
-
- while(fgets(buf, sizeof(buf), stdin)) {
- /* Trim off \n, double leading .'s */
- standardise(buf);
-
- - smtp_write(sock, "%s", buf);
- + outbytes += smtp_write(sock, "%s", buf);
-
- (void)alarm((unsigned) MEDWAIT);
- }
- /* End of body */
-
- - smtp_write(sock, ".");
- + outbytes += smtp_write(sock, ".");
- (void)alarm((unsigned) MAXWAIT);
-
- if(smtp_okay(sock, buf) == 0) {
- @@ -1495,11 +1512,12 @@ int ssmtp(char *argv[])
- /* Close conection */
- (void)signal(SIGALRM, SIG_IGN);
-
- - smtp_write(sock, "QUIT");
- + outbytes += smtp_write(sock, "QUIT");
- (void)smtp_okay(sock, buf);
- (void)close(sock);
-
- - log_event(LOG_INFO, "Sent mail for %s (%s)", from_strip(uad), buf);
- + log_event(LOG_INFO, "Sent mail for %s (%s) uid=%d username=%s outbytes=%d",
- + from_strip(uad), buf, uid, pw->pw_name, outbytes);
-
- return(0);
- }
|