aboutsummaryrefslogtreecommitdiff
path: root/lib/curl_ntlm_core.c
diff options
context:
space:
mode:
authorSteve Holme <steve_holme@hotmail.com>2014-01-25 16:35:19 +0000
committerSteve Holme <steve_holme@hotmail.com>2014-01-29 20:22:10 +0000
commit07b66cbfa4d25e7ec0366418b131c9a51c7ada0f (patch)
tree27779a469186908692c3409d0aaf15787fec8695 /lib/curl_ntlm_core.c
parent86724581b6c02d160b52f817550cfdfc9c93af62 (diff)
downloadgnurl-07b66cbfa4d25e7ec0366418b131c9a51c7ada0f.tar.gz
gnurl-07b66cbfa4d25e7ec0366418b131c9a51c7ada0f.tar.bz2
gnurl-07b66cbfa4d25e7ec0366418b131c9a51c7ada0f.zip
ntlm: Added cross platform support for writing NTLMv2 timestamp in buffer
Added conversion functions write32_le() and write64_le() to ensure the NTLMv2 timestamp is always written in little-endian.
Diffstat (limited to 'lib/curl_ntlm_core.c')
-rw-r--r--lib/curl_ntlm_core.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/lib/curl_ntlm_core.c b/lib/curl_ntlm_core.c
index 5e6ec726d..17dc445c9 100644
--- a/lib/curl_ntlm_core.c
+++ b/lib/curl_ntlm_core.c
@@ -394,6 +394,20 @@ static void ascii_uppercase_to_unicode_le(unsigned char *dest,
}
}
+static void write32_le(const int value, unsigned char *buffer)
+{
+ buffer[0] = (char)(value & 0x000000FF);
+ buffer[1] = (char)((value & 0x0000FF00) >> 8);
+ buffer[2] = (char)((value & 0x00FF0000) >> 16);
+ buffer[3] = (char)((value & 0xFF000000) >> 24);
+}
+
+static void write64_le(const long long value, unsigned char *buffer)
+{
+ write32_le((long)value, buffer);
+ write32_le((long)(value >> 32), buffer + 4);
+}
+
/*
* Set up nt hashed passwords
*/
@@ -558,7 +572,7 @@ CURLcode Curl_ntlm_core_mk_ntlmv2_resp(unsigned char *ntlmv2hash,
"%c%c%c%c", /* Reserved = 0 */
0, 0, 0, 0);
- memcpy(ptr + 24, &tw, 8); /*Re-Write this line for Big Endian*/
+ write64_le(tw, ptr + 24);
memcpy(ptr + 32, challenge_client, 8);
memcpy(ptr + 44, ntlm->target_info, ntlm->target_info_len);