r18846: Fix the same bug Volker noticed when marshalling/unmarshalling
authorJeremy Allison <jra@samba.org>
Sat, 23 Sep 2006 18:24:03 +0000 (18:24 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 17:01:04 +0000 (12:01 -0500)
SEC_ACE. "type" is also an enum that may be any size. Treat as
a uint8.
Jeremy.

source/rpc_parse/parse_sec.c

index be789b2ef5680d0851fc36e11b9f08f399079d0b..bc33062264884dba79106575b03cbbec8449815b 100644 (file)
@@ -53,6 +53,7 @@ BOOL sec_io_ace(const char *desc, SEC_ACE *psa, prs_struct *ps, int depth)
 {
        uint32 old_offset;
        uint32 offset_ace_size;
+       uint8 type;
 
        if (psa == NULL)
                return False;
@@ -62,9 +63,17 @@ BOOL sec_io_ace(const char *desc, SEC_ACE *psa, prs_struct *ps, int depth)
        
        old_offset = prs_offset(ps);
 
-       if(!prs_uint8("type ", ps, depth, (uint8*)&psa->type))
+       if (MARSHALLING(ps)) {
+               type = (uint8)psa->type;
+       }
+
+       if(!prs_uint8("type ", ps, depth, &type))
                return False;
 
+       if (UNMARSHALLING(ps)) {
+               psa->type = (enum security_ace_type)type;
+       }
+
        if(!prs_uint8("flags", ps, depth, &psa->flags))
                return False;