set_userpass: convert from protocol-specific to generic
authorDaniel Stenberg <daniel@haxx.se>
Thu, 5 May 2011 15:07:21 +0000 (17:07 +0200)
committerDaniel Stenberg <daniel@haxx.se>
Thu, 5 May 2011 15:07:21 +0000 (17:07 +0200)
The protocol handler's flags field now can set that the protocol
requires a password, so that the set_userpass function doesn't have to
have the specific knowledge of which protocols that do.

lib/ftp.c
lib/imap.c
lib/url.c
lib/urldata.h

index 52322df..a0e9280 100644 (file)
--- a/lib/ftp.c
+++ b/lib/ftp.c
@@ -181,7 +181,7 @@ const struct Curl_handler Curl_handler_ftp = {
   ZERO_NULL,                       /* readwrite */
   PORT_FTP,                        /* defport */
   CURLPROTO_FTP,                   /* protocol */
-  PROTOPT_DUAL | PROTOPT_CLOSEACTION /* flags */
+  PROTOPT_DUAL | PROTOPT_CLOSEACTION | PROTOPT_NEEDSPWD /* flags */
 };
 
 
@@ -206,7 +206,8 @@ const struct Curl_handler Curl_handler_ftps = {
   ZERO_NULL,                       /* readwrite */
   PORT_FTPS,                       /* defport */
   CURLPROTO_FTP | CURLPROTO_FTPS,  /* protocol */
-  PROTOPT_SSL | PROTOPT_DUAL | PROTOPT_CLOSEACTION /* flags */
+  PROTOPT_SSL | PROTOPT_DUAL | PROTOPT_CLOSEACTION |
+  PROTOPT_NEEDSPWD /* flags */
 };
 #endif
 
index 67f0328..b135443 100644 (file)
@@ -129,7 +129,7 @@ const struct Curl_handler Curl_handler_imap = {
   ZERO_NULL,                        /* readwrite */
   PORT_IMAP,                        /* defport */
   CURLPROTO_IMAP,                   /* protocol */
-  PROTOPT_CLOSEACTION               /* flags */
+  PROTOPT_CLOSEACTION | PROTOPT_NEEDSPWD /* flags */
 };
 
 
@@ -154,7 +154,7 @@ const struct Curl_handler Curl_handler_imaps = {
   ZERO_NULL,                        /* readwrite */
   PORT_IMAPS,                       /* defport */
   CURLPROTO_IMAP | CURLPROTO_IMAPS, /* protocol */
-  PROTOPT_CLOSEACTION | PROTOPT_SSL /* flags */
+  PROTOPT_CLOSEACTION | PROTOPT_SSL | PROTOPT_NEEDSPWD /* flags */
 };
 #endif
 
index 4771b3b..038a02d 100644 (file)
--- a/lib/url.c
+++ b/lib/url.c
@@ -4452,7 +4452,7 @@ static CURLcode set_userpass(struct connectdata *conn,
                              const char *user, const char *passwd)
 {
   /* If our protocol needs a password and we have none, use the defaults */
-  if((conn->handler->protocol & (CURLPROTO_FTP|CURLPROTO_IMAP)) &&
+  if((conn->handler->flags & PROTOPT_NEEDSPWD) &&
      !conn->bits.user_passwd) {
 
     conn->user = strdup(CURL_DEFAULT_USER);
index e78dbbf..f4b4bcc 100644 (file)
@@ -703,7 +703,9 @@ struct Curl_handler {
    the send function might need to be called while uploading, or vice versa.
 */
 #define PROTOPT_DIRLOCK (1<<3)
-#define PROTOPT_NONETWORK (1<<4)    /* protocol doesn't use the network! */
+#define PROTOPT_NONETWORK (1<<4)   /* protocol doesn't use the network! */
+#define PROTOPT_NEEDSPWD (1<<5)    /* needs a password, and if none is set it
+                                      gets a default */
 
 
 /* return the count of bytes sent, or -1 on error */