]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/tools/bsmtp.c
Change to inner joins. The outer joins don't get us any more resulting records
[bacula/bacula] / bacula / src / tools / bsmtp.c
index 597cb34979d2363d2e5f808b8db943eb1a764408..93eae1ba38f2352f8ac4088206d4ce78c4167828 100644 (file)
@@ -7,8 +7,8 @@
    many others, a complete list can be found in the file AUTHORS.
    This program is Free Software; you can redistribute it and/or
    modify it under the terms of version two of the GNU General Public
-   License as published by the Free Software Foundation plus additions
-   that are listed in the file LICENSE.
+   License as published by the Free Software Foundation and included
+   in the file LICENSE.
 
    This program is distributed in the hope that it will be useful, but
    WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -70,13 +70,37 @@ static int mailport = 25;
 static char my_hostname[MAXSTRING];
 static bool content_utf8 = false;
 
+/* 
+ * Take input that may have names and other stuff and strip
+ *  it down to the mail box address ... i.e. what is enclosed
+ *  in < >.  Otherwise add < >.
+ */
+static char *cleanup_addr(char *addr, char *buf, int buf_len)
+{
+   char *p, *q;
+
+   if ((p = strchr(from_addr, '<')) == NULL) {
+      snprintf(buf, buf_len, "<%s>", addr);
+   } else {
+      /* Copy <addr> */
+      for (q=buf; *p && *p!='>'; ) {
+         *q++ = *p++;
+      }
+      if (*p) {
+         *q++ = *p;
+      }
+      *q = 0;
+  }
+  Dmsg2(100, "cleanup in=%s out=%s\n", addr, buf);
+  return buf;    
+}
 
 /*
  *  examine message from server
  */
 static void get_response(void)
 {
-    char buf[MAXSTRING];
+    char buf[1000];
 
     Dmsg0(50, "Calling fgets on read socket rfp.\n");
     buf[3] = 0;
@@ -165,11 +189,10 @@ __MINGW_IMPORT long     _dstbias;
    my_timezone /= 60;
 
 #else
-   tzset();
-   my_timezone = timezone / 60;     /* timezone offset in mins */
-   if (tm.tm_isdst == 1) {
-      my_timezone -= 60;            /* adjust for daylight savings */
-   }
+   struct timeval tv;
+   struct timezone tz;
+   gettimeofday(&tv, &tz);
+   my_timezone = tz.tz_minuteswest; /* timezone offset in mins */
 #endif
    strftime(buf, buf_len, "%a, %d %b %Y %H:%M:%S", &tm);
    sprintf(tzbuf, " %+2.2ld%2.2u", -my_timezone / 60, abs(my_timezone) % 60);
@@ -185,7 +208,7 @@ __MINGW_IMPORT long     _dstbias;
  */
 int main (int argc, char *argv[])
 {
-    char buf[MAXSTRING];
+    char buf[1000];
     struct sockaddr_in sin;
     struct hostent *hp;
     int i, ch;
@@ -266,9 +289,6 @@ int main (int argc, char *argv[])
       exit(1);
    }
 
-#if defined(HAVE_WIN32)
-   _setmode(0, _O_BINARY);
-#endif
 
    /*
     *  Determine SMTP server
@@ -284,6 +304,7 @@ int main (int argc, char *argv[])
 #if defined(HAVE_WIN32)
    WSADATA  wsaData;
 
+   _setmode(0, _O_BINARY);
    WSAStartup(MAKEWORD(2,2), &wsaData);
 #endif
 
@@ -406,27 +427,15 @@ hp:
     */
    get_response(); /* banner */
    chat("helo %s\r\n", my_hostname);
-   if (strchr(from_addr, '<') == NULL) {
-      chat("mail from:<%s>\r\n", from_addr);
-   } else {
-      chat("mail from:%s\r\n", from_addr);
-   }
-
+   chat("mail from:%s\r\n", cleanup_addr(from_addr, buf, sizeof(buf)));
+   
    for (i = 0; i < argc; i++) {
       Dmsg1(20, "rcpt to: %s\n", argv[i]);
-      if (strchr(argv[i], '<') == NULL) {
-         chat("rcpt to:<%s>\r\n", argv[i]);
-      } else {
-         chat("rcpt to:%s\r\n", argv[i]);
-      }
+      chat("rcpt to:%s\r\n", cleanup_addr(argv[i], buf, sizeof(buf)));
    }
 
    if (cc_addr) {
-      if (strchr(cc_addr, '<') == NULL) {
-         chat("rcpt to:<%s>\r\n", cc_addr);
-      } else {
-         chat("rcpt to:%s\r\n", cc_addr);
-      }
+      chat("rcpt to:%s\r\n", cleanup_addr(cc_addr, buf, sizeof(buf)));
    }
    Dmsg0(20, "Data\n");
    chat("data\r\n");