| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248 | --- ssmtp-2.61.orig/ssmtp.conf+++ ssmtp-2.61/ssmtp.conf@@ -36,3 +36,8 @@  # Use this RSA certificate. #TLSCert=/etc/ssl/certs/ssmtp.pem++# Get enhanced (*really* enhanced) debugging information in the logs+# If you want to have debugging of the config file parsing, move this option+# to the top of the config file and uncomment+#Debug=YES--- ssmtp-2.61.orig/ssmtp.c+++ ssmtp-2.61/ssmtp.c@@ -93,6 +93,7 @@ static char hextab[]="0123456789abcdef"; #endif +ssize_t outbytes;  /* log_event() -- Write event to syslog (or log file if defined)@@ -129,7 +130,7 @@ #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 @@ 	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 @@ 					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 @@ /* 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)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 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 @@  	/* 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 @@ 		}  		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 @@ #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 @@ #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 @@ 	}  	/* 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 @@  		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 @@ 			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 @@ 	}  	/* 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 @@ 		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 @@ 	/* 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); }--- ssmtp-2.61.orig/configure.in+++ ssmtp-2.61/configure.in@@ -24,8 +24,8 @@ AC_STRUCT_TM  dnl Checks for libraries.-AC_CHECK_LIB(nsl, gethostname)-AC_CHECK_LIB(socket, socket)+AC_SEARCH_LIBS(gethostname, nsl)+AC_SEARCH_LIBS(socket, socket)  dnl Checks for library functions. AC_TYPE_SIGNAL
 |