# HG changeset patch # User Mark Doliner # Date 1146196329 0 # Node ID 6bee2e80e42c8e2b3fa6e905b4e67beaeadcbac3 # Parent 89ceef5203acb1a3ea85545824b48e47f3d85f04 [gaim-migrate @ 16101] Additional constification, add some comments, remove some superfluous whitespace, and changed gchar to guint8 in a few places. committer: Tailor Script diff -r 89ceef5203ac -r 6bee2e80e42c src/ntlm.c --- a/src/ntlm.c Fri Apr 28 03:39:14 2006 +0000 +++ b/src/ntlm.c Fri Apr 28 03:52:09 2006 +0000 @@ -140,11 +140,11 @@ return gaim_base64_encode((guchar*)msg, sizeof(struct type1_message) + strlen(hostname) + strlen(domain)); } -gchar * +guint8 * gaim_ntlm_parse_type2(const gchar *type2, guint32 *flags) { gsize retlen; - static gchar nonce[8]; + static guint8 nonce[8]; struct type2_message *tmsg = (struct type2_message*)gaim_base64_decode((char*)type2, &retlen); memcpy(nonce, tmsg->nonce, 8); if(flags) *flags = tmsg->flags; @@ -169,7 +169,7 @@ * helper function for gaim cipher.c */ static void -des_ecb_encrypt(char *plaintext, char *result, char *key) +des_ecb_encrypt(const guint8 *plaintext, char *result, char *key) { GaimCipher *cipher; GaimCipherContext *context; @@ -188,17 +188,17 @@ * bytes are stored in the results array. */ static void -calc_resp(unsigned char *keys, unsigned char *plaintext, unsigned char *results) +calc_resp(unsigned char *keys, const guint8 *plaintext, unsigned char *results) { guchar key[8]; setup_des_key(keys, (char*)key); - des_ecb_encrypt((char*)plaintext, (char*)results, (char*)key); + des_ecb_encrypt(plaintext, (char*)results, (char*)key); setup_des_key(keys+7, (char*)key); - des_ecb_encrypt((char*)plaintext, (char*)(results+8), (char*)key); + des_ecb_encrypt(plaintext, (char*)(results+8), (char*)key); setup_des_key(keys+14, (char*)key); - des_ecb_encrypt((char*)plaintext, (char*)(results+16), (char*)key); + des_ecb_encrypt(plaintext, (char*)(results+16), (char*)key); } static void @@ -215,12 +215,11 @@ } gchar * -gaim_ntlm_gen_type3(const gchar *username, const gchar *passw, const gchar *hostname, const gchar *domain, gchar *nonce, guint32 *flags) +gaim_ntlm_gen_type3(const gchar *username, const gchar *passw, const gchar *hostname, const gchar *domain, const guint8 *nonce, guint32 *flags) { char lm_pw[14]; unsigned char lm_hpw[21]; char sesskey[16]; - gchar *sessionnonce = nonce; gchar key[8]; int msglen = sizeof(struct type3_message)+ strlen(domain) + strlen(username)+ @@ -284,13 +283,13 @@ lm_pw[idx] = 0; setup_des_key((unsigned char*)lm_pw, (char*)key); - des_ecb_encrypt((char*)magic, (char*)lm_hpw, (char*)key); + des_ecb_encrypt(magic, (char*)lm_hpw, (char*)key); setup_des_key((unsigned char*)(lm_pw+7), (char*)key); - des_ecb_encrypt((char*)magic, (char*)lm_hpw+8, (char*)key); + des_ecb_encrypt(magic, (char*)lm_hpw+8, (char*)key); memset(lm_hpw+16, 0, 5); - calc_resp(lm_hpw, (guchar*)sessionnonce, lm_resp); + calc_resp(lm_hpw, nonce, lm_resp); /* NTLM */ lennt = strlen(passw); @@ -309,7 +308,7 @@ memset(nt_hpw+16, 0, 5); - calc_resp(nt_hpw, (guchar*)sessionnonce, nt_resp); + calc_resp(nt_hpw, nonce, nt_resp); memcpy(tmp, lm_resp, 0x18); tmp += 0x18; memcpy(tmp, nt_resp, 0x18); diff -r 89ceef5203ac -r 6bee2e80e42c src/ntlm.h --- a/src/ntlm.h Fri Apr 28 03:39:14 2006 +0000 +++ b/src/ntlm.h Fri Apr 28 03:52:09 2006 +0000 @@ -1,13 +1,13 @@ /** * @file ntlm.h - * + * * gaim * * Copyright (C) 2005, Thomas Butter * - * ntlm structs are taken from NTLM description on - * http://www.innovation.ch/java/ntlm.html - * + * ntlm structs are taken from NTLM description on + * http://www.innovation.ch/java/ntlm.html + * * This program 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 2 of the License, or @@ -31,7 +31,8 @@ * * @param hostname Your hostname * @param domain The domain to authenticate to - * @return base64 encoded string to send to the server. has to be freed with g_free + * @return base64 encoded string to send to the server. This should + * be g_free'd by the caller. */ gchar *gaim_ntlm_gen_type1(const gchar *hostname, const gchar *domain); @@ -39,9 +40,10 @@ * Parses the ntlm type 2 message * * @param type2 String containing the base64 encoded type2 message - * @return The nonce for use in message type3 + * @return The nonce for use in message type3. This is a statically + * allocated 8 byte binary string. */ -gchar *gaim_ntlm_parse_type2(const gchar *type2, guint32 *flags); +guint8 *gaim_ntlm_parse_type2(const gchar *type2, guint32 *flags); /** * Generates a type3 message @@ -52,8 +54,9 @@ * @param domain The domain to authenticate against * @param nonce The nonce returned by gaim_ntlm_parse_type2 * @param flags Pointer to the flags returned by gaim_ntlm_parse_type2 - * @return A base64 encoded type3 message + * @return A base64 encoded type3 message. This should be g_free'd by + * the caller. */ -gchar *gaim_ntlm_gen_type3(const gchar *username, const gchar *passw, const gchar *hostname, const gchar *domain, gchar *nonce, guint32 *flags); +gchar *gaim_ntlm_gen_type3(const gchar *username, const gchar *passw, const gchar *hostname, const gchar *domain, const guint8 *nonce, guint32 *flags); #endif /* _GAIM_NTLM_H */ diff -r 89ceef5203ac -r 6bee2e80e42c src/protocols/simple/simple.c --- a/src/protocols/simple/simple.c Fri Apr 28 03:39:14 2006 +0000 +++ b/src/protocols/simple/simple.c Fri Apr 28 03:52:09 2006 +0000 @@ -278,7 +278,8 @@ return ret; } else if(auth->type == 2) { /* NTLM */ if(auth->nc == 3 && auth->nonce) { - ret = gaim_ntlm_gen_type3(authuser, sip->password, "gaim", authdomain, auth->nonce, &auth->flags); + /* TODO: Don't hardcode "gaim" as the hostname */ + ret = gaim_ntlm_gen_type3(authuser, sip->password, "gaim", authdomain, (const guint8 *)auth->nonce, &auth->flags); tmp = g_strdup_printf("NTLM qop=\"auth\", opaque=\"%s\", realm=\"%s\", targetname=\"%s\", gssapi-data=\"%s\"\r\n", auth->opaque, auth->realm, auth->target, ret); g_free(ret); return tmp; @@ -339,7 +340,7 @@ while(parts[i]) { gaim_debug_info("simple", "parts[i] %s\n", parts[i]); if((tmp = parse_attribute("gssapi-data=\"", parts[i]))) { - auth->nonce = g_strdup(gaim_ntlm_parse_type2(tmp, &auth->flags)); + auth->nonce = g_memdup(gaim_ntlm_parse_type2(tmp, &auth->flags), 8); g_free(tmp); } if((tmp = parse_attribute("targetname=\"", diff -r 89ceef5203ac -r 6bee2e80e42c src/proxy.c --- a/src/proxy.c Fri Apr 28 03:39:14 2006 +0000 +++ b/src/proxy.c Fri Apr 28 03:52:09 2006 +0000 @@ -1207,7 +1207,8 @@ if(status == 407 /* Proxy Auth */) { gchar *ntlm; if((ntlm = g_strrstr((const gchar *)phb->read_buffer, "Proxy-Authenticate: NTLM "))) { /* Check for Type-2 */ - gchar *nonce = ntlm; + gchar *tmp = ntlm; + guint8 *nonce; gchar *domain = (gchar*)gaim_proxy_info_get_username(phb->gpi); gchar *username; gchar *request; @@ -1230,8 +1231,8 @@ *username = '\0'; username++; ntlm += strlen("Proxy-Authenticate: NTLM "); - while(*nonce != '\r' && *nonce != '\0') nonce ++; - *nonce = '\0'; + while(*tmp != '\r' && *tmp != '\0') tmp++; + *tmp = '\0'; nonce = gaim_ntlm_parse_type2(ntlm, NULL); response = gaim_ntlm_gen_type3(username, (gchar*) gaim_proxy_info_get_password(phb->gpi),