Port ssmtp to -ng
authorFlorian Fainelli <florian@openwrt.org>
Tue, 8 Aug 2006 14:43:17 +0000 (14:43 +0000)
committerFlorian Fainelli <florian@openwrt.org>
Tue, 8 Aug 2006 14:43:17 +0000 (14:43 +0000)
SVN-Revision: 4539

net/ssmtp/Makefile [new file with mode: 0644]
net/ssmtp/patches/500-debian-subset-2.61-2.patch [new file with mode: 0644]
net/ssmtp/patches/901-strftime_space_padding.patch [new file with mode: 0644]

diff --git a/net/ssmtp/Makefile b/net/ssmtp/Makefile
new file mode 100644 (file)
index 0000000..a6e591a
--- /dev/null
@@ -0,0 +1,54 @@
+#
+# Copyright (C) 2006 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+# $Id$
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=ssmtp
+PKG_VERSION:=2.61
+PKG_RELEASE:=1
+PKG_MD5SUM:=957e6fff08625fe34f4fc33d0925bbc9
+
+PKG_SOURCE_URL:=http://ftp.debian.org/debian/pool/main/s/ssmtp/
+PKG_SOURCE:=$(PKG_NAME)_$(PKG_VERSION).orig.tar.gz
+PKG_CAT:=zcat
+
+PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
+PKG_INSTALL_DIR:=$(PKG_BUILD_DIR)/ipkg-install
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/ssmtp
+  SECTION:=net
+  CATEGORY:=Network
+  TITLE:=A minimal and secure mail sender
+  DESCRIPTION:=A secure, effective and simple way of getting mail off a system to your\\\
+       mail hub. It contains no suid-binaries or other dangerous things - no\\\
+       mail spool to poke around in, and no daemons running in the background.\\\
+       mail is simply forwarded to the configured mailhost. Extremely easy\\\
+       configuration.
+  URL:=http://packages.debian.org/stable/mail/ssmtp
+endef
+
+define Build/Configure
+$(call Build/Configure/Default)
+endef
+       
+define Build/Compile
+$(call Build/Compile/Default,all)
+endef
+
+define Package/ssmtp/install   
+       install -m0755 -d $(1)/etc/ssmtp
+       install -m0644 $(PKG_BUILD_DIR)/ssmtp.conf $(1)/etc/ssmtp/
+       install -m0644 $(PKG_BUILD_DIR)/revaliases $(1)/etc/ssmtp/
+       install -m0755 -d $(1)/usr/sbin
+       $(CP) $(PKG_BUILD_DIR)/ssmtp $(1)/usr/sbin/
+       ln -sf ssmtp $(1)/usr/sbin/sendmail
+endef
+
+$(eval $(call BuildPackage,ssmtp))
diff --git a/net/ssmtp/patches/500-debian-subset-2.61-2.patch b/net/ssmtp/patches/500-debian-subset-2.61-2.patch
new file mode 100644 (file)
index 0000000..f682c97
--- /dev/null
@@ -0,0 +1,248 @@
+--- 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
diff --git a/net/ssmtp/patches/901-strftime_space_padding.patch b/net/ssmtp/patches/901-strftime_space_padding.patch
new file mode 100644 (file)
index 0000000..dd0b9b1
--- /dev/null
@@ -0,0 +1,12 @@
+diff -ruN ssmtp-2.60-old/arpadate.c ssmtp-2.60-new/arpadate.c
+--- ssmtp-2.60-old/arpadate.c  2002-12-08 18:30:11.000000000 +0100
++++ ssmtp-2.60-new/arpadate.c  2004-05-23 18:54:32.000000000 +0200
+@@ -79,7 +79,7 @@
+       time_t now;
+       /* RFC822 format string borrowed from GNU shellutils date.c */
+-      const char *format = "%a, %_d %b %Y %H:%M:%S %z";
++      const char *format = "%a, %d %b %Y %H:%M:%S %z";
+       now = time(NULL);