]> granicus.if.org Git - curl/commitdiff
socks: deduplicate the code for auth request
authorKamil Dudka <kdudka@redhat.com>
Wed, 8 Mar 2017 11:16:01 +0000 (12:16 +0100)
committerKamil Dudka <kdudka@redhat.com>
Wed, 28 Jun 2017 05:48:34 +0000 (07:48 +0200)
lib/socks.c

index b55fa9b8c828a31d117a9aab7c2583e381cd3c6a..968b720b7ea9b151df762f9c4b7480703f4fbfa0 100644 (file)
@@ -375,6 +375,7 @@ CURLcode Curl_SOCKS5(const char *proxy_user,
   */
 
   unsigned char socksreq[600]; /* room for large user/pw (255 max each) */
+  int idx;
   ssize_t actualread;
   ssize_t written;
   int result;
@@ -426,17 +427,17 @@ CURLcode Curl_SOCKS5(const char *proxy_user,
     return CURLE_COULDNT_CONNECT;
   }
 
-  socksreq[0] = 5; /* version */
+  idx = 0;
+  socksreq[idx++] = 5;   /* version */
+  idx++;                 /* reserve for the number of authentication methods */
+  socksreq[idx++] = 0;   /* no authentication */
 #if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)
-  socksreq[1] = (char)(proxy_user ? 3 : 2); /* number of methods (below) */
-  socksreq[2] = 0; /* no authentication */
-  socksreq[3] = 1; /* GSS-API */
-  socksreq[4] = 2; /* username/password */
-#else
-  socksreq[1] = (char)(proxy_user ? 2 : 1); /* number of methods (below) */
-  socksreq[2] = 0; /* no authentication */
-  socksreq[3] = 2; /* username/password */
+  socksreq[idx++] = 1;   /* GSS-API */
 #endif
+  if(proxy_user)
+    socksreq[idx++] = 2; /* username/password */
+  /* write the number of authentication methods */
+  socksreq[1] = (unsigned char) (idx - 2);
 
   (void)curlx_nonblock(sock, FALSE);