Commit d13202f4 authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

modified

parent 9d139a6b
Loading
Loading
Loading
Loading
+15 −6
Original line number Diff line number Diff line
@@ -204,10 +204,17 @@ static void mkhash(char *password,
  unsigned char lmbuffer[21];
  unsigned char ntbuffer[21];
  
  unsigned char pw[256]; /* for maximum 128-letter passwords! */
  int len = strlen(password);
  unsigned char magic[] = { 0x4B, 0x47, 0x53, 0x21, 0x40, 0x23, 0x24, 0x25 };
  unsigned char *pw;
  static const unsigned char magic[] = {
    0x4B, 0x47, 0x53, 0x21, 0x40, 0x23, 0x24, 0x25
  };
  int i;
  int len = strlen(password);

  /* make it fit at least 14 bytes */
  pw = malloc(len<7?14:len*2);
  if(!pw)
    return; /* this will lead to a badly generated package */

  if (len > 14)
    len = 14;
@@ -249,12 +256,14 @@ static void mkhash(char *password,
    MD4_Update(&MD4, pw, 2*len);
    MD4_Final(ntbuffer, &MD4);

    memset(ntbuffer+16, 0, 5);
    memset(ntbuffer+16, 0, 8);
  }

  /* create responses */
  calc_resp(lmbuffer, nonce, lmresp);
  calc_resp(ntbuffer, nonce, ntresp);

  free(pw);
}

/* convert an ascii string to upper case unicode, the destination buffer
@@ -399,8 +408,8 @@ CURLcode Curl_output_ntlm(struct connectdata *conn)
    int lmrespoff;
    int ntrespoff;
    int useroff;
    unsigned char lmresp[0x18+1];
    unsigned char ntresp[0x18+1];
    unsigned char lmresp[0x18]; /* fixed-size */
    unsigned char ntresp[0x18]; /* fixed-size */

    int userlen = strlen(data->state.user);
    
+27 −21
Original line number Diff line number Diff line
@@ -291,6 +291,7 @@ CURLcode Curl_readwrite(struct connectdata *conn,
            int hbufp_index;
            int rest_length;
            int full_length;
            int writetype;
              
            /* str_start is start of line within buf */
            k->str_start = k->str;
@@ -437,13 +438,13 @@ CURLcode Curl_readwrite(struct connectdata *conn,

              /* now, only output this if the header AND body are requested:
               */
              k->writetype = CLIENTWRITE_HEADER;
              writetype = CLIENTWRITE_HEADER;
              if (data->set.http_include_header)
                k->writetype |= CLIENTWRITE_BODY;
                writetype |= CLIENTWRITE_BODY;

              headerlen = k->p - data->state.headerbuff;

              result = Curl_client_write(data, k->writetype,
              result = Curl_client_write(data, writetype,
                                         data->state.headerbuff,
                                         headerlen);
              if(result)
@@ -795,8 +796,6 @@ CURLcode Curl_readwrite(struct connectdata *conn,
                  *ptr = '\0';   /* zero terminate */
                  conn->newurl = strdup(start); /* clone string */
                  *ptr = backup; /* restore ending letter */

                  k->returnbeforebody = TRUE; /* don't wait for contents */
                }
              }
#if 0 /* for consideration */
@@ -812,16 +811,15 @@ CURLcode Curl_readwrite(struct connectdata *conn,
             * End of header-checks. Write them to the client.
             */

            k->writetype = CLIENTWRITE_HEADER;
            writetype = CLIENTWRITE_HEADER;
            if (data->set.http_include_header)
              k->writetype |= CLIENTWRITE_BODY;
              writetype |= CLIENTWRITE_BODY;

            if(data->set.verbose)
              Curl_debug(data, CURLINFO_HEADER_IN,
                         k->p, k->hbuflen);

            result = Curl_client_write(data, k->writetype, k->p,
                                       k->hbuflen);
            result = Curl_client_write(data, writetype, k->p, k->hbuflen);
            if(result)
              return result;

@@ -854,15 +852,22 @@ CURLcode Curl_readwrite(struct connectdata *conn,
               write a piece of the body */
            if(conn->protocol&PROT_HTTP) {
              /* HTTP-only checks */
              if (conn->newurl && k->returnbeforebody) {
                /* abort after the headers if "follow Location" is set */
                infof (data, "Send request to this URL: %s\n", conn->newurl);
              if (conn->newurl) {
                if(conn->bits.close) {
                  /* Abort after the headers if "follow Location" is set
                     and we're set to close anyway. */
                  k->keepon &= ~KEEP_READ;
                  FD_ZERO(&k->rkeepfd);
                  *done = TRUE;
                  return CURLE_OK;
                }
              else if (conn->resume_from &&
                /* We have a new url to load, but since we want to be able
                   to re-use this connection properly, we read the full
                   response in "ignore more" */
                k->ignorebody = TRUE;
                infof(data, "Ignoring the response-body\n");
              }
              if (conn->resume_from &&
                       !k->content_range &&
                       (data->set.httpreq==HTTPREQ_GET)) {
                /* we wanted to resume a download, although the server
@@ -963,7 +968,7 @@ CURLcode Curl_readwrite(struct connectdata *conn,
          if(!conn->bits.chunk && (nread || k->badheader)) {
            /* If this is chunky transfer, it was already written */

            if(k->badheader) {
            if(k->badheader && !k->ignorebody) {
              /* we parsed a piece of data wrongly assuming it was a header
                 and now we output it as body instead */
              result = Curl_client_write(data, CLIENTWRITE_BODY,
@@ -984,6 +989,7 @@ CURLcode Curl_readwrite(struct connectdata *conn,
                   Content-Encoding header. See Curl_readwrite_init; the
                   memset() call initializes k->content_encoding to zero.
                   08/28/02 jhrg */
                if(!k->ignorebody)
                  result = Curl_client_write(data, CLIENTWRITE_BODY, k->str, 
                                             nread);
#ifdef HAVE_LIBZ
@@ -1266,7 +1272,7 @@ CURLcode Curl_readwrite_init(struct connectdata *conn)
  k->maxfd = (conn->sockfd>conn->writesockfd?
              conn->sockfd:conn->writesockfd)+1;
  k->hbufp = data->state.headerbuff;
  k->returnbeforebody=FALSE;
  k->ignorebody=FALSE;

  Curl_pgrsTime(data, TIMER_PRETRANSFER);
  Curl_speedinit(data);
+1 −2
Original line number Diff line number Diff line
@@ -340,7 +340,6 @@ struct Curl_transfer_keeper {
  /* for the low speed checks: */
  time_t timeofdoc;
  long bodywrites;
  int writetype;

  char *buf;
  char *uploadbuf;
@@ -360,7 +359,7 @@ struct Curl_transfer_keeper {
  bool upload_done; /* set to TRUE when doing chunked transfer-encoding upload
                       and we're uploading the last chunk */

  bool returnbeforebody; /* if to break transfer after headers */
  bool ignorebody;  /* we read a response-body but we ignore it! */
};

/*