/* NTLM code.
- Copyright (C) 2005, 2006, 2007 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+ Inc.
Contributed by Daniel Stenberg.
This file is part of GNU Wget.
You should have received a copy of the GNU General Public License
along with Wget. If not, see <http://www.gnu.org/licenses/>.
-In addition, as a special exception, the Free Software Foundation
-gives permission to link the code of its release of Wget with the
-OpenSSL project's "OpenSSL" library (or with modified versions of it
-that use the same license as the "OpenSSL" library), and distribute
-the linked executables. You must obey the GNU General Public License
-in all respects for all of the code used other than "OpenSSL". If you
-modify this file, you may extend this exception to your version of the
-file, but you are not obligated to do so. If you do not wish to do
-so, delete this exception statement from your version. */
+Additional permission under GNU GPL version 3 section 7
-#include <config.h>
+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. */
+
+#include "wget.h"
/* NTLM details:
-
+
http://davenport.sourceforge.net/ntlm.html
http://www.innovation.ch/java/ntlm.html
#include <openssl/md4.h>
#include <openssl/opensslv.h>
-#include "wget.h"
#include "utils.h"
#include "http-ntlm.h"
return false;
header += 4;
- while (*header && ISSPACE(*header))
+ while (*header && c_isspace(*header))
header++;
if (*header)
if (len > 14)
len = 14;
-
+
for (i=0; i<len; i++)
- pw[i] = TOUPPER (password[i]);
+ pw[i] = c_toupper (password[i]);
for (; i<14; i++)
pw[i] = 0;
setup_des_key(pw, DESKEY(ks));
DES_ecb_encrypt((DES_cblock *)magic, (DES_cblock *)lmbuffer,
DESKEY(ks), DES_ENCRYPT);
-
+
setup_des_key(pw+7, DESKEY(ks));
DES_ecb_encrypt((DES_cblock *)magic, (DES_cblock *)(lmbuffer+8),
DESKEY(ks), DES_ENCRYPT);
if(!passwd)
passwd="";
-
+
switch(ntlm->state) {
case NTLMSTATE_TYPE1:
default: /* for the weird cases we (re)start here */
domoff = hostoff + hostlen;
DEBUGP (("Creating a type-1 NTLM message.\n"));
-
+
/* Create and send a type-1 message:
Index Description Content
output = concat_strings ("NTLM ", base64, (char *) 0);
break;
-
+
case NTLMSTATE_TYPE2:
/* We received the type-2 already, create a type-3 message:
52 (64) start of data block
*/
-
+
{
int lmrespoff;
int ntrespoff;
"%c%c" /* domain allocated space */
"%c%c" /* domain name offset */
"%c%c" /* 2 zeroes */
-
+
"%c%c" /* user length */
"%c%c" /* user allocated space */
"%c%c" /* user offset */
"%c%c" /* 2 zeroes */
-
+
"%c%c" /* host length */
"%c%c" /* host allocated space */
"%c%c" /* host offset */
"%c%c%c%c%c%c" /* 6 zeroes */
-
+
"\xff\xff" /* message length */
"%c%c" /* 2 zeroes */
-
+
"\x01\x82" /* flags */
"%c%c" /* 2 zeroes */
/* Make sure that the user and domain strings fit in the target buffer
before we copy them there. */
- if(size + userlen + domlen >= sizeof(ntlmbuf))
+ if(((size_t) size + userlen + domlen) >= sizeof(ntlmbuf))
return NULL;
-
+
memcpy(&ntlmbuf[size], domain, domlen);
size += domlen;
}
#ifdef USE_NTRESPONSES
- if(size < ((int)sizeof(ntlmbuf) - 0x18)) {
+ if(size < ((int)sizeof(ntlmbuf) - 0x18)) {
memcpy(&ntlmbuf[size], ntresp, 0x18);
size += 0x18;
}