summaryrefslogtreecommitdiff
path: root/package/ssmtp/patches/patch-ssmtp_c
diff options
context:
space:
mode:
Diffstat (limited to 'package/ssmtp/patches/patch-ssmtp_c')
-rw-r--r--package/ssmtp/patches/patch-ssmtp_c224
1 files changed, 224 insertions, 0 deletions
diff --git a/package/ssmtp/patches/patch-ssmtp_c b/package/ssmtp/patches/patch-ssmtp_c
new file mode 100644
index 000000000..38d45ca3d
--- /dev/null
+++ b/package/ssmtp/patches/patch-ssmtp_c
@@ -0,0 +1,224 @@
+--- 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);
+ }