From: Aki Tuomi Date: Thu, 13 Aug 2020 06:46:37 +0000 (+0300) Subject: auth, lib-ntlm: Use dovecot byteorder functions X-Git-Tag: 2.3.13~207 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=4a264f8f7091e498f67eeedebcebe24a21a3f540;p=thirdparty%2Fdovecot%2Fcore.git auth, lib-ntlm: Use dovecot byteorder functions --- diff --git a/src/auth/mech-ntlm.c b/src/auth/mech-ntlm.c index 5f496b9697..db9ce4aad5 100644 --- a/src/auth/mech-ntlm.c +++ b/src/auth/mech-ntlm.c @@ -196,7 +196,7 @@ mech_ntlm_auth_continue(struct auth_request *auth_request, message = ntlmssp_create_challenge(request->pool, ntlm_request, &message_size); - flags = read_le32(&message->flags); + flags = le32_to_cpu(message->flags); request->ntlm2_negotiated = (flags & NTLMSSP_NEGOTIATE_NTLM2) != 0; request->unicode_negotiated = (flags & NTLMSSP_NEGOTIATE_UNICODE) != 0; request->challenge = message->challenge; diff --git a/src/lib-ntlm/Makefile.am b/src/lib-ntlm/Makefile.am index 94cf777440..182af53b39 100644 --- a/src/lib-ntlm/Makefile.am +++ b/src/lib-ntlm/Makefile.am @@ -12,7 +12,6 @@ noinst_HEADERS = \ ntlm.h \ ntlm-types.h \ ntlm-flags.h \ - ntlm-byteorder.h \ ntlm-des.h \ ntlm-encrypt.h \ ntlm-message.h diff --git a/src/lib-ntlm/ntlm-byteorder.h b/src/lib-ntlm/ntlm-byteorder.h deleted file mode 100644 index 584f2c44e0..0000000000 --- a/src/lib-ntlm/ntlm-byteorder.h +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Little-endian data access functions. - * - * Copyright (c) 2004 Andrey Panin - * - * This software is released under the MIT license. - */ - -#ifndef NTLM_BYTEORDER_H -#define NTLM_BYTEORDER_H - -#if defined(__i386__) || defined(__x86_64__) || defined(__vax__) - -static inline uint16_t read_le16(const void *addr) -{ - return *((const uint16_t *) addr); -} - -static inline uint32_t read_le32(const void *addr) -{ - return *((const uint32_t *) addr); -} - -static inline uint64_t read_le64(const void *addr) -{ - return *((const uint64_t *) addr); -} - -static inline void write_le16(void *addr, const uint16_t value) -{ - *((uint16_t *) addr) = value; -} - -static inline void write_le32(void *addr, const uint32_t value) -{ - *((uint32_t *) addr) = value; -} - -static inline void write_le64(void *addr, const uint64_t value) -{ - *((uint64_t *) addr) = value; -} - -#else - -/* - * Dumb and slow, but byteorder and alignment independent code. - */ - -#define readb(addr, pos, type) ((type)(*(((uint8_t *) (addr)) + (pos)))) - -static inline uint16_t read_le16(const void *addr) -{ - return readb(addr, 0, uint16_t) | (readb(addr, 1, uint16_t) << 8); -} - -static inline uint32_t read_le32(const void *addr) -{ - return readb(addr, 0, uint32_t) | - (readb(addr, 1, uint32_t) << 8) | - (readb(addr, 2, uint32_t) << 16) | - (readb(addr, 3, uint32_t) << 24); -} - -static inline uint64_t read_le64(const void *addr) -{ - return readb(addr, 0, uint64_t) | - (readb(addr, 1, uint64_t) << 8) | - (readb(addr, 2, uint64_t) << 16) | - (readb(addr, 3, uint64_t) << 24) | - (readb(addr, 4, uint64_t) << 32) | - (readb(addr, 5, uint64_t) << 40) | - (readb(addr, 6, uint64_t) << 48) | - (readb(addr, 7, uint64_t) << 56); -} - -#define writeb(addr, pos, value) \ - *(((uint8_t *)(addr)) + (pos)) = (uint8_t) (value) - -static inline void write_le16(void *addr, const uint16_t value) -{ - writeb(addr, 0, value & 0xff); - writeb(addr, 1, (value >> 8) & 0xff); -} - -static inline void write_le32(void *addr, const uint32_t value) -{ - writeb(addr, 0, value & 0xff); - writeb(addr, 1, (value >> 8) & 0xff); - writeb(addr, 2, (value >> 16) & 0xff); - writeb(addr, 3, (value >> 24) & 0xff); -} - -static inline void write_le64(void *addr, const uint64_t value) -{ - writeb(addr, 0, value & 0xff); - writeb(addr, 1, (value >> 8) & 0xff); - writeb(addr, 2, (value >> 16) & 0xff); - writeb(addr, 3, (value >> 24) & 0xff); - writeb(addr, 4, (value >> 32) & 0xff); - writeb(addr, 5, (value >> 40) & 0xff); - writeb(addr, 6, (value >> 48) & 0xff); - writeb(addr, 7, (value >> 56) & 0xff); -} - -#endif - -#endif diff --git a/src/lib-ntlm/ntlm-message.c b/src/lib-ntlm/ntlm-message.c index a29413b47e..52b006f6bb 100644 --- a/src/lib-ntlm/ntlm-message.c +++ b/src/lib-ntlm/ntlm-message.c @@ -21,8 +21,8 @@ const char *ntlmssp_t_str_i(const void *message, struct ntlmssp_buffer *buffer, bool unicode) { - unsigned int len = read_le16(&buffer->length); - const char *p = ((const char *) message) + read_le32(&buffer->offset); + unsigned int len = le16_to_cpu(buffer->length); + const char *p = ((const char *) message) + le32_to_cpu(buffer->offset); string_t *str; if (unicode) @@ -61,12 +61,12 @@ static void ntlmssp_append_string(buffer_t *buf, size_t buffer_offset, struct ntlmssp_buffer buffer; unsigned int length; - write_le32(&buffer.offset, buf->used); + buffer.offset = cpu32_to_le(buf->used); length = append_string(buf, str, FALSE, unicode); - write_le16(&buffer.length, length); - write_le16(&buffer.space, length); + buffer.length = cpu16_to_le(length); + buffer.space = cpu16_to_le(length); buffer_write(buf, buffer_offset, &buffer, sizeof(buffer)); } @@ -78,7 +78,7 @@ static void ntlmssp_append_target_info(buffer_t *buf, size_t buffer_offset, ...) unsigned int length, total_length = 0; int type; - write_le32(&buffer.offset, buf->used); + buffer.offset = cpu32_to_le(buf->used); va_start(args, buffer_offset); @@ -87,7 +87,7 @@ static void ntlmssp_append_target_info(buffer_t *buf, size_t buffer_offset, ...) type = va_arg(args, int); i_zero(&info); - write_le16(&info.type, type); + info.type = cpu16_to_le(type); switch (type) { case NTPLMSSP_V2_TARGET_END: @@ -99,8 +99,8 @@ static void ntlmssp_append_target_info(buffer_t *buf, size_t buffer_offset, ...) case NTPLMSSP_V2_TARGET_FQDN: case NTPLMSSP_V2_TARGET_DNS: data = va_arg(args, const char *); - write_le16(&info.length, - strlen(data) * sizeof(ucs2le_t)); + info.length = cpu16_to_le(strlen(data) * + sizeof(ucs2le_t)); buffer_append(buf, &info, sizeof(info)); length = append_string(buf, data, FALSE, TRUE) + sizeof(info); @@ -116,8 +116,8 @@ static void ntlmssp_append_target_info(buffer_t *buf, size_t buffer_offset, ...) va_end(args); - write_le16(&buffer.length, total_length); - write_le16(&buffer.space, total_length); + buffer.length = cpu16_to_le(total_length); + buffer.space = cpu16_to_le(total_length); buffer_write(buf, buffer_offset, &buffer, sizeof(buffer)); } @@ -145,16 +145,16 @@ ntlmssp_create_challenge(pool_t pool, const struct ntlmssp_request *request, size_t *size) { buffer_t *buf; - uint32_t flags = ntlmssp_flags(read_le32(&request->flags)); + uint32_t flags = ntlmssp_flags(le32_to_cpu(request->flags)); bool unicode = (flags & NTLMSSP_NEGOTIATE_UNICODE) != 0; struct ntlmssp_challenge c; buf = buffer_create_dynamic(pool, sizeof(struct ntlmssp_challenge)); i_zero(&c); - write_le64(&c.magic, NTLMSSP_MAGIC); - write_le32(&c.type, NTLMSSP_MSG_TYPE2); - write_le32(&c.flags, flags); + c.magic = cpu64_to_le(NTLMSSP_MAGIC); + c.type = cpu32_to_le(NTLMSSP_MSG_TYPE2); + c.flags = cpu32_to_le(flags); random_fill(c.challenge, sizeof(c.challenge)); buffer_write(buf, 0, &c, sizeof(c)); @@ -176,9 +176,9 @@ ntlmssp_create_challenge(pool_t pool, const struct ntlmssp_request *request, static bool ntlmssp_check_buffer(const struct ntlmssp_buffer *buffer, size_t data_size, const char **error) { - uint32_t offset = read_le32(&buffer->offset); - uint16_t length = read_le16(&buffer->length); - uint16_t space = read_le16(&buffer->space); + uint32_t offset = le32_to_cpu(buffer->offset); + uint16_t length = le16_to_cpu(buffer->length); + uint16_t space = le16_to_cpu(buffer->space); /* Empty buffer is ok */ if (length == 0 && space == 0) @@ -212,17 +212,17 @@ bool ntlmssp_check_request(const struct ntlmssp_request *request, return FALSE; } - if (read_le64(&request->magic) != NTLMSSP_MAGIC) { + if (le64_to_cpu(request->magic) != NTLMSSP_MAGIC) { *error = "signature mismatch"; return FALSE; } - if (read_le32(&request->type) != NTLMSSP_MSG_TYPE1) { + if (le32_to_cpu(request->type) != NTLMSSP_MSG_TYPE1) { *error = "message type mismatch"; return FALSE; } - flags = read_le32(&request->flags); + flags = le32_to_cpu(request->flags); if ((flags & NTLMSSP_NEGOTIATE_NTLM) == 0) { *error = "client doesn't advertise NTLM support"; @@ -240,12 +240,12 @@ bool ntlmssp_check_response(const struct ntlmssp_response *response, return FALSE; } - if (read_le64(&response->magic) != NTLMSSP_MAGIC) { + if (le64_to_cpu(response->magic) != NTLMSSP_MAGIC) { *error = "signature mismatch"; return FALSE; } - if (read_le32(&response->type) != NTLMSSP_MSG_TYPE3) { + if (le32_to_cpu(response->type) != NTLMSSP_MSG_TYPE3) { *error = "message type mismatch"; return FALSE; } diff --git a/src/lib-ntlm/ntlm.h b/src/lib-ntlm/ntlm.h index 704ee418a0..174cbe7ac8 100644 --- a/src/lib-ntlm/ntlm.h +++ b/src/lib-ntlm/ntlm.h @@ -3,9 +3,9 @@ #include +#include "byteorder.h" #include "ntlm-types.h" #include "ntlm-flags.h" -#include "ntlm-byteorder.h" #include "ntlm-encrypt.h" #include "ntlm-message.h" @@ -15,7 +15,7 @@ static inline const void * ntlmssp_buffer_data_i(void *message, struct ntlmssp_buffer *buffer) { - return ((char *) message) + read_le32(&buffer->offset); + return ((char *) message) + le32_to_cpu(buffer->offset); } #define ntlmssp_buffer_length(message, buffer) \ @@ -24,7 +24,7 @@ ntlmssp_buffer_data_i(void *message, struct ntlmssp_buffer *buffer) static inline unsigned int ntlmssp_buffer_length_i(struct ntlmssp_buffer *buffer) { - return read_le16(&buffer->length); + return le16_to_cpu(buffer->length); } #define ntlmssp_t_str(message, buffer, unicode) \