]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
auth, lib-ntlm: Use dovecot byteorder functions
authorAki Tuomi <aki.tuomi@open-xchange.com>
Thu, 13 Aug 2020 06:46:37 +0000 (09:46 +0300)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Fri, 11 Sep 2020 07:07:20 +0000 (07:07 +0000)
src/auth/mech-ntlm.c
src/lib-ntlm/Makefile.am
src/lib-ntlm/ntlm-byteorder.h [deleted file]
src/lib-ntlm/ntlm-message.c
src/lib-ntlm/ntlm.h

index 5f496b969755ffbc1e1831e337190688cdda598e..db9ce4aad50f15d2298b37aafe2168c374ad1e51 100644 (file)
@@ -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;
index 94cf7774403da39b6d1fad5bbe9779a2746c1ad4..182af53b390598a343b3d2bad782b4b240a7d32e 100644 (file)
@@ -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 (file)
index 584f2c4..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Little-endian data access functions.
- *
- * Copyright (c) 2004 Andrey Panin <pazke@donpac.ru>
- *
- * 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
index a29413b47e801343a0e847f254100b91e5375a77..52b006f6bba43dc83f599bc949aed41b5df7ff06 100644 (file)
@@ -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;
        }
index 704ee418a01e5eab4804e28cfa47cb072b32cf86..174cbe7ac8b7654b330091e9af1ad708c3c6678e 100644 (file)
@@ -3,9 +3,9 @@
 
 #include <stddef.h>
 
+#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) \