00001 /*************************************************************************** 00002 * _ _ ____ _ 00003 * Project ___| | | | _ \| | 00004 * / __| | | | |_) | | 00005 * | (__| |_| | _ <| |___ 00006 * \___|\___/|_| \_\_____| 00007 * 00008 * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al. 00009 * 00010 * This software is licensed as described in the file COPYING, which 00011 * you should have received as part of this distribution. The terms 00012 * are also available at https://curl.haxx.se/docs/copyright.html. 00013 * 00014 * You may opt to use, copy, modify, merge, publish, distribute and/or sell 00015 * copies of the Software, and permit persons to whom the Software is 00016 * furnished to do so, under the terms of the COPYING file. 00017 * 00018 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY 00019 * KIND, either express or implied. 00020 * 00021 ***************************************************************************/ 00022 #include "test.h" 00023 00024 /* 00025 Based on a bug report recipe by Rene Bernhardt in 00026 https://curl.haxx.se/mail/lib-2011-10/0323.html 00027 00028 It is reproducible by the following steps: 00029 00030 - Use a proxy that offers NTLM and Negotiate ( CURLOPT_PROXY and 00031 CURLOPT_PROXYPORT) 00032 - Tell libcurl NOT to use Negotiate CURL_EASY_SETOPT(CURLOPT_PROXYAUTH, 00033 CURLAUTH_BASIC | CURLAUTH_DIGEST | CURLAUTH_NTLM) 00034 - Start the request 00035 */ 00036 00037 #include "memdebug.h" 00038 00039 int test(char *URL) 00040 { 00041 CURLcode res; 00042 CURL *curl; 00043 00044 if(curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) { 00045 fprintf(stderr, "curl_global_init() failed\n"); 00046 return TEST_ERR_MAJOR_BAD; 00047 } 00048 00049 curl = curl_easy_init(); 00050 if(!curl) { 00051 fprintf(stderr, "curl_easy_init() failed\n"); 00052 curl_global_cleanup(); 00053 return TEST_ERR_MAJOR_BAD; 00054 } 00055 00056 test_setopt(curl, CURLOPT_URL, URL); 00057 test_setopt(curl, CURLOPT_HEADER, 1L); 00058 test_setopt(curl, CURLOPT_PROXYAUTH, 00059 (long) (CURLAUTH_BASIC | CURLAUTH_DIGEST | CURLAUTH_NTLM)); 00060 test_setopt(curl, CURLOPT_PROXY, libtest_arg2); /* set in first.c */ 00061 test_setopt(curl, CURLOPT_PROXYUSERPWD, "me:password"); 00062 00063 res = curl_easy_perform(curl); 00064 00065 test_cleanup: 00066 00067 curl_easy_cleanup(curl); 00068 curl_global_cleanup(); 00069 00070 return (int)res; 00071 } 00072