r13588: Second attempt to fix Bug #3330 - treat the string as a
authorJeremy Allison <jra@samba.org>
Tue, 21 Feb 2006 03:29:02 +0000 (03:29 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 16:10:16 +0000 (11:10 -0500)
uint8 array and copy as such. Gunther please check (sorry
I reverted your earlier fix).
Jeremy.
(This used to be commit 7a17b39c80703909f102487690d2117d874b0e15)

source3/include/authdata.h
source3/libads/authdata.c

index 194429ab673c446c19d261dfb7b6e962f95ebc20..dbaeda6b9aa59309b58f7c022f123d50f64a08fa 100644 (file)
@@ -42,7 +42,7 @@
 typedef struct pac_logon_name {
        NTTIME logon_time;
        uint16 len;
-       uint16 *username; /* might not be null terminated, so not UNISTR */
+       uint8 *username; /* Actually always little-endian. might not be null terminated, so not UNISTR */
 } PAC_LOGON_NAME;
 
 typedef struct pac_signature_data {
index 55e736ce6aec058bad6c6a8a1c50edfc0493f607..c3c160dafbadae28d71a39fcdbf7a651e6871170 100644 (file)
@@ -42,24 +42,24 @@ static BOOL pac_io_logon_name(const char *desc, PAC_LOGON_NAME *logon_name,
        if (!prs_uint16("len", ps, depth, &logon_name->len))
                return False;
 
+       /* The following string is always in little endian 16 bit values,
+          copy as 8 bits to avoid endian reversal on big-endian machines.
+          len is the length in bytes. */
+
        if (UNMARSHALLING(ps) && logon_name->len) {
-               logon_name->username = PRS_ALLOC_MEM(ps, uint16, logon_name->len);
+               logon_name->username = PRS_ALLOC_MEM(ps, uint8, logon_name->len);
                if (!logon_name->username) {
                        DEBUG(3, ("No memory available\n"));
                        return False;
                }
        }
 
-       if (!prs_uint16s(True, "name", ps, depth, logon_name->username, 
-                        (logon_name->len / sizeof(uint16))))
+       if (!prs_uint8s(True, "name", ps, depth, logon_name->username, logon_name->len))
                return False;
 
        return True;
-
 }
 
-
-
 #if 0 /* Unused (handled now in net_io_user_info3()) - Guenther */
 static BOOL pac_io_krb_sids(const char *desc, KRB_SID_AND_ATTRS *sid_and_attr,
                            prs_struct *ps, int depth)
@@ -891,7 +891,7 @@ static void dump_pac_logon_info(PAC_LOGON_INFO *logon_info) {
                nt_status = NT_STATUS_INVALID_PARAMETER;
                goto out;
        }
-       rpcstr_pull(username, logon_name->username, sizeof(username), -1, STR_TERMINATE);
+       rpcstr_pull(username, logon_name->username, sizeof(username), logon_name->len, 0);
 
        ret = smb_krb5_parse_name_norealm(context, username, &client_principal_pac);
        if (ret) {