#ifndef __HTTP_NTLM_H #define __HTTP_NTLM_H /* Declarations for http_ntlm.c Copyright (C) 1995, 1996, 1997, 2000, 2007, 2008 Free Software Foundation, Inc. Contributed by Daniel Stenberg. This file is part of GNU Wget. GNU Wget is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. GNU Wget is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Wget. If not, see . Additional permission under GNU GPL version 3 section 7 If you modify this program, or any covered work, by linking or combining it with the OpenSSL project's OpenSSL library (or a modified version of that library), containing parts covered by the terms of the OpenSSL or SSLeay licenses, the Free Software Foundation grants you additional permission to convey the resulting work. Corresponding Source for a non-source form of such a combination shall include the source code for the parts of OpenSSL used as well as that of the covered work. */ /* Flag bits definitions available at on http://davenport.sourceforge.net/ntlm.html Additional bits identified from: curl sources python sources */ #define NTLMFLAG_NEGOTIATE_UNICODE (1<<0) /* source: davenport */ #define NTLMFLAG_NEGOTIATE_OEM (1<<1) /* source: davenport */ #define NTLMFLAG_REQUEST_TARGET (1<<2) /* source: davenport */ /* unknown (1<<3) */ #define NTLMFLAG_NEGOTIATE_SIGN (1<<4) /* source: davenport */ #define NTLMFLAG_NEGOTIATE_SEAL (1<<5) /* source: davenport */ #define NTLMFLAG_NEGOTIATE_DATAGRAM_STYLE (1<<6) /* source: davenport */ #define NTLMFLAG_NEGOTIATE_LM_KEY (1<<7) /* source: davenport */ #define NTLMFLAG_NEGOTIATE_NETWARE (1<<8) /* source: davenport */ #define NTLMFLAG_NEGOTIATE_NTLM_KEY (1<<9) /* source: davenport */ #define NTLMFLAG_NEGOTIATE_NT_ONLY (1<<10) /* source: python */ #define NTLMFLAG_NEGOTIATE_ANONYMOUS (1<<11) /* source: curl */ #define NTLMFLAG_NEGOTIATE_DOMAIN_SUPPLIED (1<<12) /* source: davenport */ #define NTLMFLAG_NEGOTIATE_WORKSTATION_SUPPLIED (1<<13) /* source: davenport */ #define NTLMFLAG_NEGOTIATE_LOCAL_CALL (1<<14) /* source: davenport */ #define NTLMFLAG_NEGOTIATE_ALWAYS_SIGN (1<<15) /* source: davenport */ #define NTLMFLAG_TARGET_TYPE_DOMAIN (1<<16) /* source: davenport */ #define NTLMFLAG_TARGET_TYPE_SERVER (1<<17) /* source: davenport */ #define NTLMFLAG_TARGET_TYPE_SHARE (1<<18) /* source: davenport */ #define NTLMFLAG_NEGOTIATE_NTLM2_KEY (1<<19) /* source: davenport */ #define NTLMFLAG_REQUEST_INIT_RESPONSE (1<<20) /* source: davenport */ #define NTLMFLAG_REQUEST_ACCEPT_RESPONSE (1<<21) /* source: davenport */ #define NTLMFLAG_REQUEST_NONNT_SESSION_KEY (1<<22) /* source: davenport */ #define NTLMFLAG_NEGOTIATE_TARGET_INFO (1<<23) /* source: davenport */ /* unknown (1<24) */ #define NTLMFLAG_NEGOTIATE_VERSION (1<<25) /* source: python */ /* unknown (1<26) */ /* unknown (1<27) */ /* unknown (1<28) */ #define NTLMFLAG_NEGOTIATE_128 (1<<29) /* source: davenport */ #define NTLMFLAG_NEGOTIATE_KEY_EXCHANGE (1<<30) /* source: davenport */ #define NTLMFLAG_NEGOTIATE_56 (1<<31) /* source: davenport */ typedef enum { NTLMSTATE_NONE, NTLMSTATE_TYPE1, NTLMSTATE_TYPE2, NTLMSTATE_TYPE3, NTLMSTATE_LAST } wgetntlm; /* Struct used for NTLM challenge-response authentication */ struct ntlmdata { wgetntlm state; unsigned char nonce[8]; int flags; }; /* this is for ntlm header input */ bool ntlm_input (struct ntlmdata *, const char *); /* this is for creating ntlm header output */ char *ntlm_output (struct ntlmdata *, const char *, const char *, bool *); #endif