Skip to content

Commit

Permalink
NTLM: header inclusion cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
yangtse committed Aug 28, 2011
1 parent 662c1d8 commit 05ef245
Show file tree
Hide file tree
Showing 8 changed files with 150 additions and 196 deletions.
32 changes: 7 additions & 25 deletions lib/curl_ntlm.c
Expand Up @@ -22,42 +22,24 @@


#include "setup.h" #include "setup.h"


/* NTLM details:
http://davenport.sourceforge.net/ntlm.html
http://www.innovation.ch/java/ntlm.html
*/

#ifdef USE_NTLM #ifdef USE_NTLM


#define DEBUG_ME 0 /*

* NTLM details:
#ifdef HAVE_UNISTD_H *
#include <unistd.h> * http://davenport.sourceforge.net/ntlm.html
#endif * http://www.innovation.ch/java/ntlm.html
#ifdef HAVE_SYS_WAIT_H */
#include <sys/wait.h>
#endif
#ifdef HAVE_SIGNAL_H
#include <signal.h>
#endif


#if (defined(NETWARE) && !defined(__NOVELL_LIBC__)) #define DEBUG_ME 0
#include <netdb.h>
#endif


#include "urldata.h" #include "urldata.h"
#include "non-ascii.h" /* for Curl_convert_... prototypes */
#include "sendf.h" #include "sendf.h"
#include "select.h"
#include "rawstr.h" #include "rawstr.h"
#include "curl_base64.h"
#include "curl_ntlm.h" #include "curl_ntlm.h"
#include "curl_ntlm_msgs.h" #include "curl_ntlm_msgs.h"
#include "curl_ntlm_wb.h" #include "curl_ntlm_wb.h"
#include "url.h" #include "url.h"
#include "strerror.h"
#include "curl_gethostname.h"
#include "curl_memory.h" #include "curl_memory.h"


#define _MPRINTF_REPLACE /* use our functions only */ #define _MPRINTF_REPLACE /* use our functions only */
Expand Down
2 changes: 2 additions & 0 deletions lib/curl_ntlm.h
Expand Up @@ -22,6 +22,8 @@
* *
***************************************************************************/ ***************************************************************************/


#include "setup.h"

#ifdef USE_NTLM #ifdef USE_NTLM


/* this is for ntlm header input */ /* this is for ntlm header input */
Expand Down
139 changes: 53 additions & 86 deletions lib/curl_ntlm_core.c
Expand Up @@ -22,108 +22,77 @@


#include "setup.h" #include "setup.h"


/* NTLM details: #if defined(USE_NTLM) && !defined(USE_WINDOWS_SSPI)


http://davenport.sourceforge.net/ntlm.html /*
http://www.innovation.ch/java/ntlm.html * NTLM details:
*/ *

* http://davenport.sourceforge.net/ntlm.html
#ifdef USE_NTLM * http://www.innovation.ch/java/ntlm.html

*/
#include "non-ascii.h"
#include "rawstr.h"
#include "curl_memory.h"

#define _MPRINTF_REPLACE /* use our functions only */
#include <curl/mprintf.h>


#ifdef USE_SSLEAY #ifdef USE_SSLEAY
#include "ssluse.h"
# ifdef USE_OPENSSL
# include <openssl/des.h>
# ifndef OPENSSL_NO_MD4
# include <openssl/md4.h>
# endif
# include <openssl/md5.h>
# include <openssl/ssl.h>
# include <openssl/rand.h>
# else
# include <des.h>
# ifndef OPENSSL_NO_MD4
# include <md4.h>
# endif
# include <md5.h>
# include <ssl.h>
# include <rand.h>
# endif

#ifndef OPENSSL_VERSION_NUMBER
#error "OPENSSL_VERSION_NUMBER not defined"
#endif

#if OPENSSL_VERSION_NUMBER < 0x00907001L
#define DES_key_schedule des_key_schedule
#define DES_cblock des_cblock
#define DES_set_odd_parity des_set_odd_parity
#define DES_set_key des_set_key
#define DES_ecb_encrypt des_ecb_encrypt

/* This is how things were done in the old days */
#define DESKEY(x) x
#define DESKEYARG(x) x
#else
/* Modern version */
#define DESKEYARG(x) *x
#define DESKEY(x) &x
#endif


#ifdef OPENSSL_NO_MD4 # ifdef USE_OPENSSL
/* This requires MD4, but OpenSSL was compiled without it */ # include <openssl/des.h>
#define USE_NTRESPONSES 0 # ifndef OPENSSL_NO_MD4
#define USE_NTLM2SESSION 0 # include <openssl/md4.h>
#endif # endif
# include <openssl/md5.h>
# include <openssl/ssl.h>
# include <openssl/rand.h>
# else
# include <des.h>
# ifndef OPENSSL_NO_MD4
# include <md4.h>
# endif
# include <md5.h>
# include <ssl.h>
# include <rand.h>
# endif
# if (OPENSSL_VERSION_NUMBER < 0x00907001L)
# define DES_key_schedule des_key_schedule
# define DES_cblock des_cblock
# define DES_set_odd_parity des_set_odd_parity
# define DES_set_key des_set_key
# define DES_ecb_encrypt des_ecb_encrypt
# define DESKEY(x) x
# define DESKEYARG(x) x
# else
# define DESKEYARG(x) *x
# define DESKEY(x) &x
# endif


#elif defined(USE_GNUTLS) #elif defined(USE_GNUTLS)


#include "gtls.h" # include <gcrypt.h>
#include <gcrypt.h> # define MD5_DIGEST_LENGTH 16

# define MD4_DIGEST_LENGTH 16
#define MD5_DIGEST_LENGTH 16
#define MD4_DIGEST_LENGTH 16


#elif defined(USE_NSS) #elif defined(USE_NSS)


#include "curl_md4.h" # include <nss.h>
#include "nssg.h" # include <pk11pub.h>
#include <nss.h> # include <hasht.h>
#include <pk11pub.h> # include "curl_md4.h"
#include <hasht.h> # define MD5_DIGEST_LENGTH MD5_LENGTH
#define MD5_DIGEST_LENGTH MD5_LENGTH

#elif defined(USE_WINDOWS_SSPI)

#include "curl_sspi.h"


#else #else
# error "Can't compile NTLM support without a crypto library." # error "Can't compile NTLM support without a crypto library."
#endif

#ifndef USE_NTRESPONSES
/* Define this to make the type-3 message include the NT response message */
#define USE_NTRESPONSES 1

/* Define this to make the type-3 message include the NTLM2Session response
message, requires USE_NTRESPONSES. */
#define USE_NTLM2SESSION 1
#endif #endif


#include "urldata.h"
#include "non-ascii.h"
#include "rawstr.h"
#include "curl_memory.h"
#include "curl_ntlm_core.h" #include "curl_ntlm_core.h"


#define _MPRINTF_REPLACE /* use our functions only */
#include <curl/mprintf.h>

/* The last #include file should be: */ /* The last #include file should be: */
#include "memdebug.h" #include "memdebug.h"


#ifndef USE_WINDOWS_SSPI

#ifdef USE_SSLEAY #ifdef USE_SSLEAY
/* /*
* Turns a 56 bit key into the 64 bit, odd parity key and sets the key. The * Turns a 56 bit key into the 64 bit, odd parity key and sets the key. The
Expand Down Expand Up @@ -407,6 +376,4 @@ CURLcode Curl_ntlm_core_mk_nt_hash(struct SessionHandle *data,
} }
#endif /* USE_NTRESPONSES */ #endif /* USE_NTRESPONSES */


#endif /* !USE_WINDOWS_SSPI */ #endif /* USE_NTLM && !USE_WINDOWS_SSPI */

#endif /* USE_NTLM */
31 changes: 28 additions & 3 deletions lib/curl_ntlm_core.h
Expand Up @@ -22,7 +22,32 @@
* *
***************************************************************************/ ***************************************************************************/


#ifdef USE_NTLM #include "setup.h"

#if defined(USE_NTLM) && !defined(USE_WINDOWS_SSPI)

#ifdef USE_SSLEAY
# if !defined(OPENSSL_VERSION_NUMBER) && \
!defined(HEADER_SSL_H) && !defined(HEADER_MD5_H)
# error "curl_ntlm_core.h shall not be included before OpenSSL headers."
# endif
# ifdef OPENSSL_NO_MD4
# define USE_NTRESPONSES 0
# define USE_NTLM2SESSION 0
# endif
#endif

/*
* Define USE_NTRESPONSES to 1 in order to make the type-3 message include
* the NT response message. Define USE_NTLM2SESSION to 1 in order to make
* the type-3 message include the NTLM2Session response message, requires
* USE_NTRESPONSES defined to 1.
*/

#ifndef USE_NTRESPONSES
# define USE_NTRESPONSES 1
# define USE_NTLM2SESSION 1
#endif


void Curl_ntlm_core_lm_resp(const unsigned char *keys, void Curl_ntlm_core_lm_resp(const unsigned char *keys,
const unsigned char *plaintext, const unsigned char *plaintext,
Expand All @@ -32,12 +57,12 @@ void Curl_ntlm_core_mk_lm_hash(struct SessionHandle *data,
const char *password, const char *password,
unsigned char *lmbuffer /* 21 bytes */); unsigned char *lmbuffer /* 21 bytes */);


#if !defined(USE_WINDOWS_SSPI) && (USE_NTRESPONSES != 0) #if USE_NTRESPONSES
CURLcode Curl_ntlm_core_mk_nt_hash(struct SessionHandle *data, CURLcode Curl_ntlm_core_mk_nt_hash(struct SessionHandle *data,
const char *password, const char *password,
unsigned char *ntbuffer /* 21 bytes */); unsigned char *ntbuffer /* 21 bytes */);
#endif #endif


#endif /* USE_NTLM */ #endif /* USE_NTLM && !USE_WINDOWS_SSPI */


#endif /* HEADER_CURL_NTLM_CORE_H */ #endif /* HEADER_CURL_NTLM_CORE_H */

0 comments on commit 05ef245

Please sign in to comment.