Commit 1f9b0e70 authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

Based on Joerg Mueller-Tolk's patch, this introduces support for

CURLINFO_HTTPAUTH_AVAIL and CURLINFO_PROXYAUTH_AVAIL
parent 8fae12b2
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -166,6 +166,12 @@ CURLcode Curl_getinfo(struct SessionHandle *data, CURLINFO info, ...)
  case CURLINFO_PRIVATE:
    *param_charp = data->set.private;
    break;
  case CURLINFO_HTTPAUTH_AVAIL:
    *param_longp = data->info.httpauthavail;
    break;
  case CURLINFO_PROXYAUTH_AVAIL:
    *param_longp = data->info.proxyauthavail;
    break;
  default:
    return CURLE_BAD_FUNCTION_ARGUMENT;
  }
+15 −3
Original line number Diff line number Diff line
@@ -287,9 +287,17 @@ CURLcode Curl_http_auth(struct connectdata *conn,
   */
  struct SessionHandle *data = conn->data;

  char *start = (httpcode == 407) ? 
    header+strlen("Proxy-authenticate:"): 
    header+strlen("WWW-Authenticate:");
  long *availp;
  char *start;

  if (httpcode == 407) {
    start = header+strlen("Proxy-authenticate:");
    availp = &data->info.proxyauthavail;
  }
  else {
    start = header+strlen("WWW-Authenticate:");
    availp = &data->info.httpauthavail;
  }
  /*
   * Switch from proxy to web authentication and back if needed
   */
@@ -305,6 +313,7 @@ CURLcode Curl_http_auth(struct connectdata *conn,

#ifdef GSSAPI
  if (checkprefix("GSS-Negotiate", start)) {
    *availp |= CURLAUTH_GSSNEGOTIATE;
    if(data->state.authwant == CURLAUTH_GSSNEGOTIATE) {
      /* if exactly this is wanted, go */
      int neg = Curl_input_negotiate(conn, start);
@@ -320,6 +329,7 @@ CURLcode Curl_http_auth(struct connectdata *conn,
#ifdef USE_SSLEAY
    /* NTLM support requires the SSL crypto libs */
    if(checkprefix("NTLM", start)) {
      *availp |= CURLAUTH_NTLM;
      if(data->state.authwant == CURLAUTH_NTLM) {
        /* NTLM authentication is activated */
        CURLntlm ntlm =
@@ -337,6 +347,7 @@ CURLcode Curl_http_auth(struct connectdata *conn,
    else
#endif
      if(checkprefix("Digest", start)) {
        *availp |= CURLAUTH_DIGEST;
        if(data->state.authwant == CURLAUTH_DIGEST) {
          /* Digest authentication is activated */
          CURLdigest dig = CURLDIGEST_BAD;
@@ -363,6 +374,7 @@ CURLcode Curl_http_auth(struct connectdata *conn,
          }
      }
      else if(checkprefix("Basic", start)) {
        *availp |= CURLAUTH_BASIC;
        if((data->state.authwant == CURLAUTH_BASIC) && (httpcode == 401)) {
          /* We asked for Basic authentication but got a 401 back
             anyway, which basicly means our name+password isn't
+3 −0
Original line number Diff line number Diff line
@@ -575,6 +575,9 @@ struct PureInfo {
  long header_size;  /* size of read header(s) in bytes */
  long request_size; /* the amount of bytes sent in the request(s) */

  long proxyauthavail;
  long httpauthavail;

  char *contenttype; /* the content type of the object */
};