]> granicus.if.org Git - curl/commitdiff
turned CURLOPT_MAIL_RCPT into a curl_slist list instead to support multiple
authorDaniel Stenberg <daniel@haxx.se>
Thu, 31 Dec 2009 21:52:01 +0000 (21:52 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Thu, 31 Dec 2009 21:52:01 +0000 (21:52 +0000)
receivers, and made the command line tool thus support the option specified
many times

lib/smtp.c
lib/url.c
lib/urldata.h
src/main.c

index 5dd90298b85e8d33ef48eda4a68369846d0b76fd..0f34c4f9e65bfb1862a2fe10805c12d2620d1f10 100644 (file)
@@ -345,8 +345,23 @@ static CURLcode smtp_state_mail_resp(struct connectdata *conn,
   }
   else {
     /* send RCPT TO */
-    result = Curl_pp_sendf(&conn->proto.smtpc.pp, "RCPT TO:%s",
-                           data->set.str[STRING_MAIL_RCPT]);
+    struct curl_slist *rcpt;
+    char *buffer = NULL;
+
+    for(rcpt = data->set.mail_rcpt; rcpt; rcpt=rcpt->next) {
+      char *add = aprintf("%s%s%s", buffer?buffer:"", buffer?", ":"",
+                          rcpt->data);
+      if(!add) {
+        free(buffer);
+        return CURLE_OUT_OF_MEMORY;
+      }
+      buffer = add;
+    }
+
+    result = Curl_pp_sendf(&conn->proto.smtpc.pp, "RCPT TO:%s", buffer);
+
+    free(buffer);
+
     if(result)
       return result;
 
index 05055acbacc7276d56c02ae54465da72be0dfbc8..3f2f1cd72e52a3a6f3a3ad1abfe4429968b43abc 100644 (file)
--- a/lib/url.c
+++ b/lib/url.c
@@ -2314,8 +2314,8 @@ CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option,
     break;
 
   case CURLOPT_MAIL_RCPT:
-    result = setstropt(&data->set.str[STRING_MAIL_RCPT],
-                       va_arg(param, char *));
+    /* get a list of mail recipients */
+    data->set.mail_rcpt = va_arg(param, struct curl_slist *);
     break;
 
   default:
index 6c852e8ad005396058472fc0cd8636ba33590f57..4bcb5bf6f8a7285f2c213d6b171870ce0a914834 100644 (file)
@@ -1166,7 +1166,6 @@ enum dupstring {
   STRING_SOCKS5_GSSAPI_SERVICE,  /* GSSAPI service name */
 #endif
   STRING_MAIL_FROM,
-  STRING_MAIL_RCPT,
 
   /* -- end of strings -- */
   STRING_LAST /* not used, just an end-of-list marker */
@@ -1337,6 +1336,7 @@ struct UserDefined {
 #if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)
   long socks5_gssapi_nec; /* flag to support nec socks5 server */
 #endif
+  struct curl_slist *mail_rcpt; /* linked list of mail recipients */
 };
 
 struct Names {
index 39120913f1dc69569740cc05a921928d668c8c78..09d4c827b7d6968b02ebe039b60501a1f80e8ac6 100644 (file)
@@ -501,7 +501,7 @@ struct Configurable {
   int proxyver;     /* set to CURLPROXY_HTTP* define */
   char *noproxy;
   char *mail_from;
-  char *mail_rcpt;
+  struct curl_slist *mail_rcpt;
   bool proxytunnel;
   bool ftp_append;         /* APPE on ftp */
   bool mute;               /* shutup */
@@ -2279,7 +2279,10 @@ static ParameterError getparameter(char *flag, /* f or -long-flag */
         GetStr(&config->mail_from, nextarg);
         break;
       case 'B': /* --mail-rcpt */
-        GetStr(&config->mail_rcpt, nextarg);
+        /* append receiver to a list */
+        err = add2list(&config->mail_rcpt, nextarg);
+        if(err)
+          return err;
         break;
       }
       break;
@@ -3837,6 +3840,7 @@ static void free_config_fields(struct Configurable *config)
   curl_slist_free_all(config->postquote);
   curl_slist_free_all(config->headers);
   curl_slist_free_all(config->telnet_options);
+  curl_slist_free_all(config->mail_rcpt);
 
   if(config->easy)
     curl_easy_cleanup(config->easy);