@@ -438,6 +438,40 @@ void Curl_init_CONNECT(struct Curl_easy *data)
438438 data -> state .upload = (data -> state .httpreq == HTTPREQ_PUT );
439439}
440440
441+ /*
442+ * Restore the user credentials to those set in options.
443+ */
444+ CURLcode Curl_reset_userpwd (struct Curl_easy * data )
445+ {
446+ CURLcode result ;
447+ if (data -> set .str [STRING_USERNAME ] || data -> set .str [STRING_PASSWORD ])
448+ data -> state .creds_from = CREDS_OPTION ;
449+ result = Curl_setstropt (& data -> state .aptr .user ,
450+ data -> set .str [STRING_USERNAME ]);
451+ if (!result )
452+ result = Curl_setstropt (& data -> state .aptr .passwd ,
453+ data -> set .str [STRING_PASSWORD ]);
454+ return result ;
455+ }
456+
457+ /*
458+ * Restore the proxy credentials to those set in options.
459+ */
460+ CURLcode Curl_reset_proxypwd (struct Curl_easy * data )
461+ {
462+ #ifndef CURL_DISABLE_PROXY
463+ CURLcode result = Curl_setstropt (& data -> state .aptr .proxyuser ,
464+ data -> set .str [STRING_PROXYUSERNAME ]);
465+ if (!result )
466+ result = Curl_setstropt (& data -> state .aptr .proxypasswd ,
467+ data -> set .str [STRING_PROXYPASSWORD ]);
468+ return result ;
469+ #else
470+ (void )data ;
471+ return CURLE_OK ;
472+ #endif
473+ }
474+
441475/*
442476 * Curl_pretransfer() is called immediately before a transfer starts, and only
443477 * once for one transfer no matter if it has redirects or do multi-pass
@@ -586,23 +620,10 @@ CURLcode Curl_pretransfer(struct Curl_easy *data)
586620 return CURLE_OUT_OF_MEMORY ;
587621 }
588622
589- if (data -> set .str [STRING_USERNAME ] ||
590- data -> set .str [STRING_PASSWORD ])
591- data -> state .creds_from = CREDS_OPTION ;
592623 if (!result )
593- result = Curl_setstropt (& data -> state .aptr .user ,
594- data -> set .str [STRING_USERNAME ]);
624+ result = Curl_reset_userpwd (data );
595625 if (!result )
596- result = Curl_setstropt (& data -> state .aptr .passwd ,
597- data -> set .str [STRING_PASSWORD ]);
598- #ifndef CURL_DISABLE_PROXY
599- if (!result )
600- result = Curl_setstropt (& data -> state .aptr .proxyuser ,
601- data -> set .str [STRING_PROXYUSERNAME ]);
602- if (!result )
603- result = Curl_setstropt (& data -> state .aptr .proxypasswd ,
604- data -> set .str [STRING_PROXYPASSWORD ]);
605- #endif
626+ result = Curl_reset_proxypwd (data );
606627
607628 data -> req .headerbytecount = 0 ;
608629 Curl_headers_cleanup (data );
0 commit comments