Merge pull request #5658 from libgit2/ethomson/ntlm_htonll ntlm: update ntlm dependency for htonll
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142
diff --git a/deps/ntlmclient/compat.h b/deps/ntlmclient/compat.h
index 6e5ef64..befc7cc 100644
--- a/deps/ntlmclient/compat.h
+++ b/deps/ntlmclient/compat.h
@@ -21,40 +21,6 @@
# include <stdbool.h>
#endif
-#if defined(_WIN32) || defined(__APPLE__)
-/* winsock and macOS > 10.9 have htonll already */
-#elif defined(__linux__)
-/* See man page endian(3) */
-# include <endian.h>
-# define htonll htobe64
-#elif defined(__NetBSD__) || defined(__OpenBSD__)
-/* See man page htobe64(3) */
-# include <endian.h>
-# define htonll htobe64
-#elif defined(__FreeBSD__)
-/* See man page bwaps64(9) */
-# include <sys/endian.h>
-# define htonll htobe64
-#elif defined(sun) || defined(__sun)
-/* See man page byteorder(3SOCKET) */
-# include <sys/types.h>
-# include <netinet/in.h>
-# include <inttypes.h>
-
-# if !defined(htonll)
-# if defined(_BIG_ENDIAN)
-# define htonll(x) (x)
-# else
-# define htonll(x) ((((uint64_t)htonl(x)) << 32) + htonl((uint64_t)(x) >> 32))
-# endif
-# endif
-#elif defined(__HAIKU__)
-# include <ByteOrder.h>
-# define htonll B_HOST_TO_BENDIAN_INT64
-#else
-# error "Please implement htonll for your platform"
-#endif
-
#ifndef MIN
# define MIN(x, y) (((x) < (y)) ? (x) : (y))
#endif
diff --git a/deps/ntlmclient/crypt_openssl.c b/deps/ntlmclient/crypt_openssl.c
index 785be10..c0d36d8 100644
--- a/deps/ntlmclient/crypt_openssl.c
+++ b/deps/ntlmclient/crypt_openssl.c
@@ -71,7 +71,7 @@ static inline void HMAC_CTX_free(HMAC_CTX *ctx)
static inline int HMAC_CTX_reset(HMAC_CTX *ctx)
{
HMAC_CTX_cleanup(ctx);
- memzero(ctx, sizeof(HMAC_CTX));
+ ntlm_memzero(ctx, sizeof(HMAC_CTX));
return 1;
}
diff --git a/deps/ntlmclient/ntlm.c b/deps/ntlmclient/ntlm.c
index 74224bb..470a901 100644
--- a/deps/ntlmclient/ntlm.c
+++ b/deps/ntlmclient/ntlm.c
@@ -132,10 +132,10 @@ int ntlm_client_set_hostname(
static void free_credentials(ntlm_client *ntlm)
{
if (ntlm->password)
- memzero(ntlm->password, strlen(ntlm->password));
+ ntlm_memzero(ntlm->password, strlen(ntlm->password));
if (ntlm->password_utf16)
- memzero(ntlm->password_utf16, ntlm->password_utf16_len);
+ ntlm_memzero(ntlm->password_utf16, ntlm->password_utf16_len);
free(ntlm->username);
free(ntlm->username_upper);
@@ -1125,7 +1125,7 @@ static bool generate_lm2_response(ntlm_client *ntlm,
size_t lm2_len = 16;
uint64_t local_nonce;
- local_nonce = htonll(ntlm->nonce);
+ local_nonce = ntlm_htonll(ntlm->nonce);
if (!ntlm_hmac_ctx_reset(ntlm->hmac_ctx) ||
!ntlm_hmac_md5_init(ntlm->hmac_ctx,
@@ -1197,8 +1197,8 @@ static bool generate_ntlm2_response(ntlm_client *ntlm)
/* the blob's integer values are in network byte order */
signature = htonl(0x01010000);
- timestamp = htonll(ntlm->timestamp);
- nonce = htonll(ntlm->nonce);
+ timestamp = ntlm_htonll(ntlm->timestamp);
+ nonce = ntlm_htonll(ntlm->nonce);
/* construct the blob */
memcpy(&blob[0], &signature, 4);
diff --git a/deps/ntlmclient/util.c b/deps/ntlmclient/util.c
index d0e3e53..07d10f6 100644
--- a/deps/ntlmclient/util.c
+++ b/deps/ntlmclient/util.c
@@ -8,14 +8,28 @@
#include <stdlib.h>
#include <stdint.h>
+#include <arpa/inet.h>
#include "compat.h"
#include "util.h"
-void memzero(void *data, size_t size)
+void ntlm_memzero(void *data, size_t size)
{
volatile uint8_t *scan = (volatile uint8_t *)data;
while (size--)
*scan++ = 0x0;
}
+
+uint64_t ntlm_htonll(uint64_t value)
+{
+ static union {
+ uint32_t i;
+ char c[8];
+ } test = { 0x01020304 };
+
+ if (test.c[0] == 0x01)
+ return value;
+ else
+ return ((uint64_t)htonl(value) << 32) | htonl((uint64_t)value >> 32);
+}
diff --git a/deps/ntlmclient/util.h b/deps/ntlmclient/util.h
index 1c1806b..d4bb472 100644
--- a/deps/ntlmclient/util.h
+++ b/deps/ntlmclient/util.h
@@ -9,6 +9,7 @@
#ifndef PRIVATE_UTIL_H__
#define PRIVATE_UTIL_H__
-extern void memzero(void *data, size_t size);
+extern void ntlm_memzero(void *data, size_t size);
+extern uint64_t ntlm_htonll(uint64_t value);
#endif /* PRIVATE_UTIL_H__ */