another major bit of restructuring of rpc in Samba4. Mostly moving
authorAndrew Tridgell <tridge@samba.org>
Thu, 6 Nov 2003 12:34:04 +0000 (12:34 +0000)
committerAndrew Tridgell <tridge@samba.org>
Thu, 6 Nov 2003 12:34:04 +0000 (12:34 +0000)
files around, but also added the first bits of auto-generated code for
the lsa pipe.

I haven't updated the Makefile to call pidl yet, so for now the code
was cut-and-pasted into librpc/ndr/ndr_lsa.c manually
(This used to be commit 6b222d3b6541ee74cf8bf3f0913cd444903ca991)

20 files changed:
source4/Makefile.in
source4/include/includes.h
source4/libcli/ndr/ndr_lsa.c [deleted file]
source4/librpc/idl/lsa.idl [new file with mode: 0644]
source4/librpc/ndr/libndr.h [moved from source4/libcli/ndr/libndr.h with 95% similarity]
source4/librpc/ndr/ndr.c [moved from source4/libcli/ndr/ndr.c with 100% similarity]
source4/librpc/ndr/ndr_basic.c [moved from source4/libcli/ndr/ndr_basic.c with 83% similarity]
source4/librpc/ndr/ndr_echo.c [moved from source4/libcli/ndr/ndr_echo.c with 84% similarity]
source4/librpc/ndr/ndr_echo.h [moved from source4/libcli/ndr/ndr_echo.h with 100% similarity]
source4/librpc/ndr/ndr_lsa.c [new file with mode: 0644]
source4/librpc/ndr/ndr_lsa.h [moved from source4/libcli/ndr/ndr_lsa.h with 85% similarity]
source4/librpc/ndr/ndr_misc.c [moved from source4/libcli/ndr/ndr_misc.c with 100% similarity]
source4/librpc/ndr/ndr_misc.h [moved from source4/libcli/ndr/ndr_misc.h with 100% similarity]
source4/librpc/ndr/ndr_sec.c [moved from source4/libcli/ndr/ndr_sec.c with 79% similarity]
source4/librpc/ndr/ndr_sec.h [moved from source4/libcli/ndr/ndr_sec.h with 100% similarity]
source4/librpc/rpc/dcerpc.c [moved from source4/libcli/rpc/dcerpc.c with 100% similarity]
source4/librpc/rpc/dcerpc.h [moved from source4/libcli/rpc/dcerpc.h with 100% similarity]
source4/librpc/rpc/dcerpc_smb.c [moved from source4/libcli/raw/rawdcerpc.c with 100% similarity]
source4/librpc/rpc/rpc_echo.c [moved from source4/libcli/rpc/rpc_echo.c with 100% similarity]
source4/librpc/rpc/rpc_lsa.c [moved from source4/libcli/rpc/rpc_lsa.c with 88% similarity]

index 1055c0ac6c58a2e4586074cb812686c16c1cf95b..ee26dc58da5f78845c0b13e6d0d706f38bfe3b9a 100644 (file)
@@ -193,10 +193,11 @@ LIBCLIUTIL_OBJ = libcli/util/asn1.o \
             libcli/util/doserr.o libcli/util/errormap.o \
             libcli/util/pwd_cache.o libcli/util/clierror.o libcli/util/cliutil.o
 
-LIBRAW_NDR_OBJ = libcli/ndr/ndr.o libcli/ndr/ndr_basic.o libcli/ndr/ndr_sec.o \
-               libcli/ndr/ndr_echo.o libcli/ndr/ndr_misc.o libcli/ndr/ndr_lsa.o
+LIBRAW_NDR_OBJ = librpc/ndr/ndr.o librpc/ndr/ndr_basic.o librpc/ndr/ndr_sec.o \
+               librpc/ndr/ndr_echo.o librpc/ndr/ndr_misc.o librpc/ndr/ndr_lsa.o
 
-LIBRAW_RPC_OBJ = libcli/rpc/dcerpc.o libcli/rpc/rpc_echo.o libcli/rpc/rpc_lsa.o
+LIBRAW_RPC_OBJ = librpc/rpc/dcerpc.o librpc/rpc/rpc_echo.o librpc/rpc/rpc_lsa.o \
+               librpc/rpc/dcerpc_smb.o
 
 LIBRAW_OBJ = libcli/raw/rawfile.o libcli/raw/smb_signing.o  \
             libcli/raw/clisocket.o libcli/raw/clitransport.o \
@@ -207,7 +208,7 @@ LIBRAW_OBJ = libcli/raw/rawfile.o libcli/raw/smb_signing.o  \
             libcli/raw/rawtrans.o libcli/raw/clioplock.o \
             libcli/raw/rawnegotiate.o libcli/raw/rawfsinfo.o \
             libcli/raw/rawfileinfo.o libcli/raw/rawnotify.o \
-            libcli/raw/rawioctl.o libcli/raw/rawacl.o libcli/raw/rawdcerpc.o \
+            libcli/raw/rawioctl.o libcli/raw/rawacl.o \
             $(LIBRAW_NDR_OBJ) $(LIBRAW_RPC_OBJ) $(LIBSAMBA_OBJ) $(LIBCLIUTIL_OBJ) \
             $(RPC_PARSE_OBJ1) $(LIBNTLMSSP_OBJ) $(LIBNMB_OBJ) $(KRBCLIENT_OBJ)
 
@@ -729,6 +730,7 @@ MAKEDIR = || exec false; \
 
 # 'make pch' is extremely useful for fast compiles if you have gcc-3.4
 pch:
+       rm -f $(srcdir)/include/includes.h.gch
        $(CC) -I. -I$(srcdir) $(FLAGS) -c $(srcdir)/include/includes.h -o $(srcdir)/include/includes.h.gch
 
 
index fb8719b2b647c4e337fe9f823e43f6c8f1acc629..e6a25a9b24523feacc888f0fa751d79dbe0173f6 100644 (file)
@@ -776,8 +776,8 @@ extern int errno;
 
 #include "mutex.h"
 
-#include "libcli/ndr/libndr.h"
-#include "libcli/rpc/dcerpc.h"
+#include "librpc/ndr/libndr.h"
+#include "librpc/rpc/dcerpc.h"
 
 /*
  * Type for wide character dirent structure.
diff --git a/source4/libcli/ndr/ndr_lsa.c b/source4/libcli/ndr/ndr_lsa.c
deleted file mode 100644 (file)
index dfe978f..0000000
+++ /dev/null
@@ -1,155 +0,0 @@
-/* 
-   Unix SMB/CIFS implementation.
-
-   routines for marshalling/unmarshalling lsa pipe
-
-   Copyright (C) Andrew Tridgell 2003
-   
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
-   (at your option) any later version.
-   
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-   
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-
-#include "includes.h"
-
-NTSTATUS ndr_push_lsa_QosInfo(struct ndr_push *ndr,
-                             struct lsa_QosInfo *r)
-{
-       struct ndr_push_save length;
-
-       NDR_CHECK(ndr_push_length4_start(ndr, &length));
-       NDR_CHECK(ndr_push_u16(ndr, r->impersonation_level));
-       NDR_CHECK(ndr_push_u8(ndr, r->context_mode));
-       NDR_CHECK(ndr_push_u8(ndr, r->effective_only));
-       NDR_CHECK(ndr_push_length4_end(ndr, &length));
-
-       return NT_STATUS_OK;
-}
-
-NTSTATUS ndr_push_lsa_ObjectAttribute(struct ndr_push *ndr,
-                                     struct lsa_ObjectAttribute *r)
-{
-       struct ndr_push_save length;
-
-       NDR_CHECK(ndr_push_length4_start(ndr, &length));
-       NDR_CHECK(ndr_push_ptr(ndr, r->root_dir));
-       NDR_CHECK(ndr_push_ptr(ndr, r->object_name));
-       NDR_CHECK(ndr_push_u32(ndr, r->attributes));
-       NDR_CHECK(ndr_push_ptr(ndr, r->sec_desc));
-       NDR_CHECK(ndr_push_ptr(ndr, r->sec_qos));
-
-       if (r->root_dir)    NDR_CHECK(ndr_push_u8(ndr, r->root_dir[0]));
-       if (r->object_name) NDR_CHECK(ndr_push_unistr(ndr, r->object_name));
-       if (r->sec_desc)    NDR_CHECK(ndr_push_security_descriptor(ndr, r->sec_desc));
-       if (r->sec_qos)     NDR_CHECK(ndr_push_lsa_QosInfo(ndr, r->sec_qos));
-
-       NDR_CHECK(ndr_push_length4_end(ndr, &length));
-
-       return NT_STATUS_OK;
-}
-
-/*
-  push a openpolicy
-*/
-NTSTATUS ndr_push_lsa_OpenPolicy(struct ndr_push *ndr, 
-                                struct lsa_OpenPolicy *r)
-{
-       NDR_CHECK(ndr_push_ptr(ndr, r->in.system_name));
-       NDR_CHECK(ndr_push_u16(ndr, r->in.system_name[0]));
-       NDR_CHECK(ndr_push_lsa_ObjectAttribute(ndr, r->in.attr));
-       NDR_CHECK(ndr_push_u32(ndr, r->in.desired_access));
-       return NT_STATUS_OK;
-}
-
-
-/*
-  parse a openpolicy
-*/
-NTSTATUS ndr_pull_lsa_OpenPolicy(struct ndr_pull *ndr,
-                                struct lsa_OpenPolicy *r)
-{
-       NDR_CHECK(ndr_pull_policy_handle(ndr, &r->out.handle));
-       NDR_CHECK(ndr_pull_status(ndr, &r->out.status));
-       return NT_STATUS_OK;
-}
-
-/*
-  push a openpolicy2
-*/
-NTSTATUS ndr_push_lsa_OpenPolicy2(struct ndr_push *ndr, 
-                                 struct lsa_OpenPolicy2 *r)
-{
-       NDR_CHECK(ndr_push_ptr(ndr, r->in.system_name));
-       NDR_CHECK(ndr_push_unistr(ndr, r->in.system_name));
-       NDR_CHECK(ndr_push_lsa_ObjectAttribute(ndr, r->in.attr));
-       NDR_CHECK(ndr_push_u32(ndr, r->in.desired_access));
-       return NT_STATUS_OK;
-}
-
-
-/*
-  parse a openpolicy2
-*/
-NTSTATUS ndr_pull_lsa_OpenPolicy2(struct ndr_pull *ndr,
-                                struct lsa_OpenPolicy2 *r)
-{
-       NDR_CHECK(ndr_pull_policy_handle(ndr, &r->out.handle));
-       NDR_CHECK(ndr_pull_status(ndr, &r->out.status));
-       return NT_STATUS_OK;
-}
-
-
-/*
-  push a EnumSids
-*/
-NTSTATUS ndr_push_lsa_EnumSids(struct ndr_push *ndr, 
-                              struct lsa_EnumSids *r)
-{
-       NDR_CHECK(ndr_push_policy_handle(ndr, r->in.handle));
-       NDR_CHECK(ndr_push_u32(ndr, r->in.start_at));
-       NDR_CHECK(ndr_push_u32(ndr, r->in.num_entries));
-       return NT_STATUS_OK;
-}
-
-/*
-  pull a EnumSids
-*/
-NTSTATUS ndr_pull_lsa_EnumSids(struct ndr_pull *ndr, 
-                              struct lsa_EnumSids *r)
-{
-       uint32 nptrs, asize, i, ptr;
-
-       NDR_CHECK(ndr_pull_u32(ndr, &r->out.num_entries));
-       NDR_CHECK(ndr_pull_u32(ndr, &nptrs));
-       NDR_CHECK(ndr_pull_u32(ndr, &ptr));
-       if (!ptr) goto done;
-
-       NDR_CHECK(ndr_pull_u32(ndr, &asize));
-       NDR_ALLOC_N(ndr, r->out.sids, nptrs);
-       for (i=0;i<nptrs;i++) {
-               NDR_CHECK(ndr_pull_u32(ndr, &ptr));
-               if (ptr) {
-                       NDR_ALLOC(ndr, r->out.sids[i]);
-               } else {
-                       r->out.sids[i] = NULL;
-               }
-       }
-       for (i=0;i<nptrs;i++) {
-               if (r->out.sids[i]) NDR_CHECK(ndr_pull_dom_sid2(ndr, r->out.sids[i]));
-       }
-
-done:
-       NDR_CHECK(ndr_pull_status(ndr, &r->out.status));
-       return NT_STATUS_OK;
-}
diff --git a/source4/librpc/idl/lsa.idl b/source4/librpc/idl/lsa.idl
new file mode 100644 (file)
index 0000000..566b78f
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+  lsa interface definition
+*/
+
+[ uuid(12345778-1234-abcd-ef00-0123456789ab),
+  version(0.0),
+  pointer_default(unique)
+] interface lsarpc
+{
+
+  typedef struct {
+         [struct_len] uint32 _len;
+         uint16  impersonation_level;
+         uint8   context_mode;
+         uint8   effective_only;
+  } lsa_QosInfo;
+
+  typedef struct {
+         [struct_len] uint32 _len;
+         uint8 *root_dir;
+         unistr *object_name;
+         uint32 attributes;
+         security_descriptor *sec_desc;
+         lsa_QosInfo *sec_qos;
+  } lsa_ObjectAttribute;
+
+  NTSTATUS lsa_OpenPolicy (
+         [in]       uint16 *system_name,
+         [in] [ref] lsa_ObjectAttribute *attr,
+         [in]       uint32 desired_access,
+         [out]      policy_handle *handle
+  );
+
+  NTSTATUS lsa_OpenPolicy2 (
+         [in]        unistr *system_name,
+         [in] [ref]  lsa_ObjectAttribute *attr,
+         [in]        uint32 desired_access,
+         [out] [ref] policy_handle *handle
+  );
+
+  NTSTATUS lsa_EnumSids(
+         [in] [ref] policy_handle *handle,
+         [in]       uint32 start_at,
+         [in] [out] [ref] uint32 *num_entries,
+         [out]      dom_sid **sids
+  );
+
+}
similarity index 95%
rename from source4/libcli/ndr/libndr.h
rename to source4/librpc/ndr/libndr.h
index 7bd92b4cd11a0543f60c56d83e7f7a10d29c2eff..0d28783a6de3843e9dee79766bd594fc5cec8d1b 100644 (file)
@@ -89,7 +89,7 @@ typedef NTSTATUS (*ndr_push_fn_t)(struct ndr_push *, void *);
 typedef NTSTATUS (*ndr_pull_fn_t)(struct ndr_pull *, void *);
 
 /* now pull in the individual parsers */
-#include "libcli/ndr/ndr_sec.h"
-#include "libcli/ndr/ndr_misc.h"
-#include "libcli/ndr/ndr_echo.h"
-#include "libcli/ndr/ndr_lsa.h"
+#include "librpc/ndr/ndr_sec.h"
+#include "librpc/ndr/ndr_misc.h"
+#include "librpc/ndr/ndr_echo.h"
+#include "librpc/ndr/ndr_lsa.h"
similarity index 83%
rename from source4/libcli/ndr/ndr_basic.c
rename to source4/librpc/ndr/ndr_basic.c
index 394d1e2eb15faf61a8d388a64a984f02a0f26080..3bd75e7c0dd2eb38ff1a867dbf2833bf7b2e0107 100644 (file)
@@ -36,9 +36,9 @@
 } while(0)
 
 /*
-  parse a u8
+  parse a uint8
 */
-NTSTATUS ndr_pull_u8(struct ndr_pull *ndr, uint8 *v)
+NTSTATUS ndr_pull_uint8(struct ndr_pull *ndr, uint8 *v)
 {
        NDR_PULL_NEED_BYTES(ndr, 1);
        *v = CVAL(ndr->data, ndr->offset);
@@ -48,9 +48,9 @@ NTSTATUS ndr_pull_u8(struct ndr_pull *ndr, uint8 *v)
 
 
 /*
-  parse a u16
+  parse a uint16
 */
-NTSTATUS ndr_pull_u16(struct ndr_pull *ndr, uint16 *v)
+NTSTATUS ndr_pull_uint16(struct ndr_pull *ndr, uint16 *v)
 {
        NDR_PULL_ALIGN(ndr, 2);
        NDR_PULL_NEED_BYTES(ndr, 2);
@@ -65,9 +65,9 @@ NTSTATUS ndr_pull_u16(struct ndr_pull *ndr, uint16 *v)
 
 
 /*
-  parse a u32
+  parse a uint32
 */
-NTSTATUS ndr_pull_u32(struct ndr_pull *ndr, uint32 *v)
+NTSTATUS ndr_pull_uint32(struct ndr_pull *ndr, uint32 *v)
 {
        NDR_PULL_ALIGN(ndr, 4);
        NDR_PULL_NEED_BYTES(ndr, 4);
@@ -86,7 +86,7 @@ NTSTATUS ndr_pull_u32(struct ndr_pull *ndr, uint32 *v)
 NTSTATUS ndr_pull_status(struct ndr_pull *ndr, NTSTATUS *status)
 {
        uint32 v;
-       NDR_CHECK(ndr_pull_u32(ndr, &v));
+       NDR_CHECK(ndr_pull_uint32(ndr, &v));
        *status = NT_STATUS(v);
        return NT_STATUS_OK;
 }
@@ -121,13 +121,13 @@ NTSTATUS ndr_pull_guid(struct ndr_pull *ndr, GUID *guid)
 
 #define NDR_PUSH_ALIGN(ndr, n) do { \
        uint32 _pad = (ndr->offset & (n-1)); \
-       while (_pad--) NDR_CHECK(ndr_push_u8(ndr, 0)); \
+       while (_pad--) NDR_CHECK(ndr_push_uint8(ndr, 0)); \
 } while(0)
 
 /*
-  push a u8
+  push a uint8
 */
-NTSTATUS ndr_push_u8(struct ndr_push *ndr, uint8 v)
+NTSTATUS ndr_push_uint8(struct ndr_push *ndr, uint8 v)
 {
        NDR_PUSH_NEED_BYTES(ndr, 1);
        SCVAL(ndr->data, ndr->offset, v);
@@ -136,9 +136,9 @@ NTSTATUS ndr_push_u8(struct ndr_push *ndr, uint8 v)
 }
 
 /*
-  push a u16
+  push a uint16
 */
-NTSTATUS ndr_push_u16(struct ndr_push *ndr, uint16 v)
+NTSTATUS ndr_push_uint16(struct ndr_push *ndr, uint16 v)
 {
        NDR_PUSH_ALIGN(ndr, 2);
        NDR_PUSH_NEED_BYTES(ndr, 2);
@@ -148,9 +148,9 @@ NTSTATUS ndr_push_u16(struct ndr_push *ndr, uint16 v)
 }
 
 /*
-  push a u32
+  push a uint32
 */
-NTSTATUS ndr_push_u32(struct ndr_push *ndr, uint32 v)
+NTSTATUS ndr_push_uint32(struct ndr_push *ndr, uint32 v)
 {
        NDR_PUSH_ALIGN(ndr, 4);
        NDR_PUSH_NEED_BYTES(ndr, 4);
@@ -159,6 +159,15 @@ NTSTATUS ndr_push_u32(struct ndr_push *ndr, uint32 v)
        return NT_STATUS_OK;
 }
 
+/*
+  align to a uint32
+*/
+NTSTATUS ndr_push_align_uint32(struct ndr_push *ndr)
+{
+       NDR_PUSH_ALIGN(ndr, 4);
+       return NT_STATUS_OK;
+}
+
 /*
   push some bytes
 */
@@ -194,7 +203,7 @@ NTSTATUS ndr_push_length4_start(struct ndr_push *ndr, struct ndr_push_save *save
 {
        NDR_PUSH_ALIGN(ndr, 4);
        ndr_push_save(ndr, save);
-       return ndr_push_u32(ndr, 0);
+       return ndr_push_uint32(ndr, 0);
 }
 
 NTSTATUS ndr_push_length4_end(struct ndr_push *ndr, struct ndr_push_save *save)
@@ -202,7 +211,7 @@ NTSTATUS ndr_push_length4_end(struct ndr_push *ndr, struct ndr_push_save *save)
        struct ndr_push_save save2;
        ndr_push_save(ndr, &save2);
        ndr_push_restore(ndr, save);
-       NDR_CHECK(ndr_push_u32(ndr, save2.offset - ndr->offset));
+       NDR_CHECK(ndr_push_uint32(ndr, save2.offset - ndr->offset));
        ndr_push_restore(ndr, &save2);
        return NT_STATUS_OK;
 }
@@ -212,7 +221,7 @@ NTSTATUS ndr_push_length4_end(struct ndr_push *ndr, struct ndr_push_save *save)
 */
 NTSTATUS ndr_push_ptr(struct ndr_push *ndr, const void *p)
 {
-       return ndr_push_u32(ndr, p?1:0);
+       return ndr_push_uint32(ndr, p?1:0);
 }
 
 /*
@@ -226,9 +235,9 @@ NTSTATUS ndr_push_unistr(struct ndr_push *ndr, const char *s)
        if (len == -1) {
                return NT_STATUS_INVALID_PARAMETER;
        }
-       NDR_CHECK(ndr_push_u32(ndr, len/2));
-       NDR_CHECK(ndr_push_u32(ndr, 0));
-       NDR_CHECK(ndr_push_u32(ndr, len/2));
+       NDR_CHECK(ndr_push_uint32(ndr, len/2));
+       NDR_CHECK(ndr_push_uint32(ndr, 0));
+       NDR_CHECK(ndr_push_uint32(ndr, len/2));
        NDR_CHECK(ndr_push_bytes(ndr, ws, len));
        return NT_STATUS_OK;
 }
@@ -241,7 +250,7 @@ NTSTATUS ndr_push_offset(struct ndr_push *ndr, struct ndr_push_save *ofs)
 {
        NDR_PUSH_ALIGN(ndr, 4);
        ndr_push_save(ndr, ofs);
-       return ndr_push_u32(ndr, 0);
+       return ndr_push_uint32(ndr, 0);
 }
 
 /*
@@ -255,7 +264,7 @@ NTSTATUS ndr_push_offset_ptr(struct ndr_push *ndr,
        struct ndr_push_save save2;
        ndr_push_save(ndr, &save2);
        ndr_push_restore(ndr, ofs);
-       NDR_CHECK(ndr_push_u32(ndr, save2.offset - save->offset));
+       NDR_CHECK(ndr_push_uint32(ndr, save2.offset - save->offset));
        ndr_push_restore(ndr, &save2);
        return NT_STATUS_OK;
 }
similarity index 84%
rename from source4/libcli/ndr/ndr_echo.c
rename to source4/librpc/ndr/ndr_echo.c
index c60569676c59a557215b02b5628ecc96391aa0c1..e2bb062d2e447bc6c2b0eb1f8c8994044fc2ef68 100644 (file)
@@ -30,7 +30,7 @@
 NTSTATUS ndr_pull_rpcecho_addone(struct ndr_pull *ndr, 
                                 struct rpcecho_addone *r)
 {
-       NDR_CHECK(ndr_pull_u32(ndr, &r->out.data));
+       NDR_CHECK(ndr_pull_uint32(ndr, &r->out.data));
        return NT_STATUS_OK;
 }
 
@@ -41,7 +41,7 @@ NTSTATUS ndr_pull_rpcecho_addone(struct ndr_pull *ndr,
 NTSTATUS ndr_push_rpcecho_addone(struct ndr_push *ndr, 
                                 struct rpcecho_addone *r)
 {
-       NDR_CHECK(ndr_push_u32(ndr, r->in.data));
+       NDR_CHECK(ndr_push_uint32(ndr, r->in.data));
        return NT_STATUS_OK;
 }
 
@@ -52,7 +52,7 @@ NTSTATUS ndr_push_rpcecho_addone(struct ndr_push *ndr,
 NTSTATUS ndr_pull_rpcecho_echodata(struct ndr_pull *ndr, 
                                   struct rpcecho_echodata *r)
 {
-       NDR_CHECK(ndr_pull_u32(ndr, &r->out.len));
+       NDR_CHECK(ndr_pull_uint32(ndr, &r->out.len));
        NDR_ALLOC_N(ndr, r->out.data, r->out.len);
        NDR_CHECK(ndr_pull_bytes(ndr, r->out.data, r->out.len));
        return NT_STATUS_OK;
@@ -64,8 +64,8 @@ NTSTATUS ndr_pull_rpcecho_echodata(struct ndr_pull *ndr,
 NTSTATUS ndr_push_rpcecho_echodata(struct ndr_push *ndr, 
                                   struct rpcecho_echodata *r)
 {
-       NDR_CHECK(ndr_push_u32(ndr, r->in.len));
-       NDR_CHECK(ndr_push_u32(ndr, r->in.len));
+       NDR_CHECK(ndr_push_uint32(ndr, r->in.len));
+       NDR_CHECK(ndr_push_uint32(ndr, r->in.len));
        NDR_CHECK(ndr_push_bytes(ndr, r->in.data, r->in.len));
        return NT_STATUS_OK;
 }
@@ -85,8 +85,8 @@ NTSTATUS ndr_pull_rpcecho_sinkdata(struct ndr_pull *ndr,
 NTSTATUS ndr_push_rpcecho_sinkdata(struct ndr_push *ndr, 
                                   struct rpcecho_sinkdata *r)
 {
-       NDR_CHECK(ndr_push_u32(ndr, r->in.len));
-       NDR_CHECK(ndr_push_u32(ndr, r->in.len));
+       NDR_CHECK(ndr_push_uint32(ndr, r->in.len));
+       NDR_CHECK(ndr_push_uint32(ndr, r->in.len));
        NDR_CHECK(ndr_push_bytes(ndr, r->in.data, r->in.len));
        return NT_STATUS_OK;
 }
@@ -97,7 +97,7 @@ NTSTATUS ndr_push_rpcecho_sinkdata(struct ndr_push *ndr,
 NTSTATUS ndr_pull_rpcecho_sourcedata(struct ndr_pull *ndr, 
                                   struct rpcecho_sourcedata *r)
 {
-       NDR_CHECK(ndr_pull_u32(ndr, &r->out.len));
+       NDR_CHECK(ndr_pull_uint32(ndr, &r->out.len));
        NDR_ALLOC_N(ndr, r->out.data, r->out.len);
        NDR_CHECK(ndr_pull_bytes(ndr, r->out.data, r->out.len));
        return NT_STATUS_OK;
@@ -109,6 +109,6 @@ NTSTATUS ndr_pull_rpcecho_sourcedata(struct ndr_pull *ndr,
 NTSTATUS ndr_push_rpcecho_sourcedata(struct ndr_push *ndr, 
                                   struct rpcecho_sourcedata *r)
 {
-       NDR_CHECK(ndr_push_u32(ndr, r->in.len));
+       NDR_CHECK(ndr_push_uint32(ndr, r->in.len));
        return NT_STATUS_OK;
 }
diff --git a/source4/librpc/ndr/ndr_lsa.c b/source4/librpc/ndr/ndr_lsa.c
new file mode 100644 (file)
index 0000000..bde4506
--- /dev/null
@@ -0,0 +1,167 @@
+/* 
+   Unix SMB/CIFS implementation.
+
+   routines for marshalling/unmarshalling lsa pipe
+
+   Copyright (C) Andrew Tridgell 2003
+   
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+
+#include "includes.h"
+
+/*
+  parse a openpolicy
+*/
+NTSTATUS ndr_pull_lsa_OpenPolicy(struct ndr_pull *ndr,
+                                struct lsa_OpenPolicy *r)
+{
+       NDR_ALLOC(ndr, r->out.handle);
+       NDR_CHECK(ndr_pull_policy_handle(ndr, r->out.handle));
+       NDR_CHECK(ndr_pull_status(ndr, &r->out.result));
+       return NT_STATUS_OK;
+}
+
+/*
+  parse a openpolicy2
+*/
+NTSTATUS ndr_pull_lsa_OpenPolicy2(struct ndr_pull *ndr,
+                                struct lsa_OpenPolicy2 *r)
+{
+       NDR_ALLOC(ndr, r->out.handle);
+       NDR_CHECK(ndr_pull_policy_handle(ndr, r->out.handle));
+       NDR_CHECK(ndr_pull_status(ndr, &r->out.result));
+       return NT_STATUS_OK;
+}
+
+
+/*
+  pull a EnumSids
+*/
+NTSTATUS ndr_pull_lsa_EnumSids(struct ndr_pull *ndr, 
+                              struct lsa_EnumSids *r)
+{
+       uint32 nptrs, asize, i, ptr;
+
+       NDR_CHECK(ndr_pull_uint32(ndr, &r->out.num_entries));
+       NDR_CHECK(ndr_pull_uint32(ndr, &nptrs));
+       NDR_CHECK(ndr_pull_uint32(ndr, &ptr));
+       if (!ptr) goto done;
+
+       NDR_CHECK(ndr_pull_uint32(ndr, &asize));
+       NDR_ALLOC_N(ndr, r->out.sids, nptrs);
+       for (i=0;i<nptrs;i++) {
+               NDR_CHECK(ndr_pull_uint32(ndr, &ptr));
+               if (ptr) {
+                       NDR_ALLOC(ndr, r->out.sids[i]);
+               } else {
+                       r->out.sids[i] = NULL;
+               }
+       }
+       for (i=0;i<nptrs;i++) {
+               if (r->out.sids[i]) NDR_CHECK(ndr_pull_dom_sid2(ndr, r->out.sids[i]));
+       }
+
+done:
+       NDR_CHECK(ndr_pull_status(ndr, &r->out.result));
+       return NT_STATUS_OK;
+}
+
+
+/* parser auto-generated by pidl */
+
+static NTSTATUS ndr_push_lsa_QosInfo(struct ndr_push *ndr, struct lsa_QosInfo *r)
+{
+       struct ndr_push_save len_save1, len_save2, len_save3;
+       ndr_push_save(ndr, &len_save1);
+       NDR_CHECK(ndr_push_align_uint32(ndr));
+       ndr_push_save(ndr, &len_save2);
+       NDR_CHECK(ndr_push_uint32(ndr, 0));
+       NDR_CHECK(ndr_push_uint16(ndr, r->impersonation_level));
+       NDR_CHECK(ndr_push_uint8(ndr, r->context_mode));
+       NDR_CHECK(ndr_push_uint8(ndr, r->effective_only));
+       ndr_push_save(ndr, &len_save3);
+       ndr_push_restore(ndr, &len_save2);
+       NDR_CHECK(ndr_push_uint32(ndr, len_save3.offset - len_save1.offset));
+       ndr_push_restore(ndr, &len_save3);
+       return NT_STATUS_OK;
+}
+
+static NTSTATUS ndr_push_lsa_ObjectAttribute(struct ndr_push *ndr, struct lsa_ObjectAttribute *r)
+{
+       struct ndr_push_save len_save1, len_save2, len_save3;
+       ndr_push_save(ndr, &len_save1);
+       NDR_CHECK(ndr_push_align_uint32(ndr));
+       ndr_push_save(ndr, &len_save2);
+       NDR_CHECK(ndr_push_uint32(ndr, 0));
+       NDR_CHECK(ndr_push_ptr(ndr, r->root_dir));
+       NDR_CHECK(ndr_push_ptr(ndr, r->object_name));
+       NDR_CHECK(ndr_push_uint32(ndr, r->attributes));
+       NDR_CHECK(ndr_push_ptr(ndr, r->sec_desc));
+       NDR_CHECK(ndr_push_ptr(ndr, r->sec_qos));
+       if (r->root_dir) {
+               NDR_CHECK(ndr_push_uint8(ndr, *r->root_dir));
+       }
+       if (r->object_name) {
+               NDR_CHECK(ndr_push_unistr(ndr, r->object_name));
+       }
+       if (r->sec_desc) {
+               NDR_CHECK(ndr_push_security_descriptor(ndr, r->sec_desc));
+       }
+       if (r->sec_qos) {
+               NDR_CHECK(ndr_push_lsa_QosInfo(ndr, r->sec_qos));
+       }
+       ndr_push_save(ndr, &len_save3);
+       ndr_push_restore(ndr, &len_save2);
+       NDR_CHECK(ndr_push_uint32(ndr, len_save3.offset - len_save1.offset));
+       ndr_push_restore(ndr, &len_save3);
+       return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_lsa_OpenPolicy(struct ndr_push *ndr, struct lsa_OpenPolicy *r)
+{
+       NDR_CHECK(ndr_push_ptr(ndr, r->in.system_name));
+       if (r->in.system_name) {
+               NDR_CHECK(ndr_push_uint16(ndr, *r->in.system_name));
+       }
+       NDR_CHECK(ndr_push_lsa_ObjectAttribute(ndr, r->in.attr));
+       NDR_CHECK(ndr_push_uint32(ndr, r->in.desired_access));
+
+       return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_lsa_OpenPolicy2(struct ndr_push *ndr, struct lsa_OpenPolicy2 *r)
+{
+       NDR_CHECK(ndr_push_ptr(ndr, r->in.system_name));
+       if (r->in.system_name) {
+               NDR_CHECK(ndr_push_unistr(ndr, r->in.system_name));
+       }
+       NDR_CHECK(ndr_push_lsa_ObjectAttribute(ndr, r->in.attr));
+       NDR_CHECK(ndr_push_uint32(ndr, r->in.desired_access));
+
+       return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_lsa_EnumSids(struct ndr_push *ndr, struct lsa_EnumSids *r)
+{
+       NDR_CHECK(ndr_push_policy_handle(ndr, r->in.handle));
+       NDR_CHECK(ndr_push_uint32(ndr, r->in.start_at));
+       NDR_CHECK(ndr_push_uint32(ndr, r->in.num_entries));
+
+       return NT_STATUS_OK;
+}
+
+
similarity index 85%
rename from source4/libcli/ndr/ndr_lsa.h
rename to source4/librpc/ndr/ndr_lsa.h
index 0cc43b5f86283d83667a7b5f28aef56e9cbda09a..402227a8bfe07abdf356ede9c4159bc5c890e471 100644 (file)
    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
+/* header auto-generated by pidl */
+
 struct lsa_QosInfo {
        uint16 impersonation_level;
-       uint8  context_mode;
-       uint8  effective_only;
+       uint8 context_mode;
+       uint8 effective_only;
 };
 
 struct lsa_ObjectAttribute {
-       const char *root_dir;
+       uint8 *root_dir;
        const char *object_name;
        uint32 attributes;
        struct security_descriptor *sec_desc;
@@ -36,14 +38,16 @@ struct lsa_ObjectAttribute {
 
 struct lsa_OpenPolicy {
        struct {
-               const char *system_name;
+               uint16 *system_name;
                struct lsa_ObjectAttribute *attr;
                uint32 desired_access;
        } in;
+
        struct {
-               struct policy_handle handle;
-               NTSTATUS status;
+               struct policy_handle *handle;
+               NTSTATUS result;
        } out;
+
 };
 
 struct lsa_OpenPolicy2 {
@@ -52,10 +56,12 @@ struct lsa_OpenPolicy2 {
                struct lsa_ObjectAttribute *attr;
                uint32 desired_access;
        } in;
+
        struct {
-               struct policy_handle handle;
-               NTSTATUS status;
+               struct policy_handle *handle;
+               NTSTATUS result;
        } out;
+
 };
 
 struct lsa_EnumSids {
@@ -64,9 +70,13 @@ struct lsa_EnumSids {
                uint32 start_at;
                uint32 num_entries;
        } in;
+
        struct {
                uint32 num_entries;
                struct dom_sid **sids;
-               NTSTATUS status;
+               NTSTATUS result;
        } out;
+
 };
+
+
similarity index 79%
rename from source4/libcli/ndr/ndr_sec.c
rename to source4/librpc/ndr/ndr_sec.c
index 9ac5240b0f1cf8d217dafce99df33f11ac533bb4..31cf823e0dfbe0fd8e78ae8b42b8e7d936829f2c 100644 (file)
@@ -34,16 +34,16 @@ NTSTATUS ndr_pull_security_ace(struct ndr_pull *ndr, struct security_ace *ace)
 
        ndr_pull_save(ndr, &save);
 
-       NDR_CHECK(ndr_pull_u8(ndr, &ace->type));
-       NDR_CHECK(ndr_pull_u8(ndr, &ace->flags));
-       NDR_CHECK(ndr_pull_u16(ndr, &size));
+       NDR_CHECK(ndr_pull_uint8(ndr, &ace->type));
+       NDR_CHECK(ndr_pull_uint8(ndr, &ace->flags));
+       NDR_CHECK(ndr_pull_uint16(ndr, &size));
        NDR_CHECK(ndr_pull_limit_size(ndr, size, 4));
 
-       NDR_CHECK(ndr_pull_u32(ndr, &ace->access_mask));
+       NDR_CHECK(ndr_pull_uint32(ndr, &ace->access_mask));
 
        if (sec_ace_object(ace->type)) {
                NDR_ALLOC(ndr, ace->obj);
-               NDR_CHECK(ndr_pull_u32(ndr, &ace->obj->flags));
+               NDR_CHECK(ndr_pull_uint32(ndr, &ace->obj->flags));
                if (ace->obj->flags & SEC_ACE_OBJECT_PRESENT) {
                        NDR_CHECK(ndr_pull_guid(ndr, &ace->obj->object_guid));
                }
@@ -72,10 +72,10 @@ NTSTATUS ndr_pull_security_acl(struct ndr_pull *ndr, struct security_acl *acl)
 
        ndr_pull_save(ndr, &save);
 
-       NDR_CHECK(ndr_pull_u16(ndr, &acl->revision));
-       NDR_CHECK(ndr_pull_u16(ndr, &size));
+       NDR_CHECK(ndr_pull_uint16(ndr, &acl->revision));
+       NDR_CHECK(ndr_pull_uint16(ndr, &size));
        NDR_CHECK(ndr_pull_limit_size(ndr, size, 4));
-       NDR_CHECK(ndr_pull_u32(ndr, &acl->num_aces));
+       NDR_CHECK(ndr_pull_uint32(ndr, &acl->num_aces));
 
        NDR_ALLOC_N(ndr, acl->aces, acl->num_aces);
 
@@ -97,7 +97,7 @@ NTSTATUS ndr_pull_security_acl_ofs(struct ndr_pull *ndr, struct security_acl **a
        uint32 ofs;
        struct ndr_pull_save save;
 
-       NDR_CHECK(ndr_pull_u32(ndr, &ofs));
+       NDR_CHECK(ndr_pull_uint32(ndr, &ofs));
        if (ofs == 0) {
                /* it is valid for an acl ptr to be NULL */
                *acl = NULL;
@@ -121,16 +121,16 @@ NTSTATUS ndr_pull_dom_sid(struct ndr_pull *ndr, struct dom_sid *sid)
 {
        int i;
 
-       NDR_CHECK(ndr_pull_u8(ndr, &sid->sid_rev_num));
-       NDR_CHECK(ndr_pull_u8(ndr, &sid->num_auths));
+       NDR_CHECK(ndr_pull_uint8(ndr, &sid->sid_rev_num));
+       NDR_CHECK(ndr_pull_uint8(ndr, &sid->num_auths));
        for (i=0;i<6;i++) {
-               NDR_CHECK(ndr_pull_u8(ndr, &sid->id_auth[i]));
+               NDR_CHECK(ndr_pull_uint8(ndr, &sid->id_auth[i]));
        }
 
        NDR_ALLOC_N(ndr, sid->sub_auths, sid->num_auths);
 
        for (i=0;i<sid->num_auths;i++) {
-               NDR_CHECK(ndr_pull_u32(ndr, &sid->sub_auths[i]));
+               NDR_CHECK(ndr_pull_uint32(ndr, &sid->sub_auths[i]));
        }
 
        return NT_STATUS_OK;
@@ -142,7 +142,7 @@ NTSTATUS ndr_pull_dom_sid(struct ndr_pull *ndr, struct dom_sid *sid)
 NTSTATUS ndr_pull_dom_sid2(struct ndr_pull *ndr, struct dom_sid *sid)
 {
        uint32 num_auths;
-       NDR_CHECK(ndr_pull_u32(ndr, &num_auths));
+       NDR_CHECK(ndr_pull_uint32(ndr, &num_auths));
        return ndr_pull_dom_sid(ndr, sid);
 }
 
@@ -154,7 +154,7 @@ NTSTATUS ndr_pull_dom_sid_ofs(struct ndr_pull *ndr, struct dom_sid **sid)
        uint32 ofs;
        struct ndr_pull_save save;
 
-       NDR_CHECK(ndr_pull_u32(ndr, &ofs));
+       NDR_CHECK(ndr_pull_uint32(ndr, &ofs));
        if (ofs == 0) {
                /* it is valid for a dom_sid ptr to be NULL */
                *sid = NULL;
@@ -178,8 +178,8 @@ NTSTATUS ndr_pull_security_descriptor(struct ndr_pull *ndr,
 {
        NDR_ALLOC(ndr, *sd);
 
-       NDR_CHECK(ndr_pull_u8(ndr, &(*sd)->revision));
-       NDR_CHECK(ndr_pull_u16(ndr, &(*sd)->type));
+       NDR_CHECK(ndr_pull_uint8(ndr, &(*sd)->revision));
+       NDR_CHECK(ndr_pull_uint16(ndr, &(*sd)->type));
        NDR_CHECK(ndr_pull_dom_sid_ofs(ndr, &(*sd)->owner_sid));
        NDR_CHECK(ndr_pull_dom_sid_ofs(ndr, &(*sd)->group_sid));
        NDR_CHECK(ndr_pull_security_acl_ofs(ndr, &(*sd)->sacl));
@@ -196,14 +196,14 @@ NTSTATUS ndr_push_security_ace(struct ndr_push *ndr, struct security_ace *ace)
 {
        struct ndr_push_save save1, save2;
 
-       NDR_CHECK(ndr_push_u8(ndr, ace->type));
-       NDR_CHECK(ndr_push_u8(ndr, ace->flags));
+       NDR_CHECK(ndr_push_uint8(ndr, ace->type));
+       NDR_CHECK(ndr_push_uint8(ndr, ace->flags));
        ndr_push_save(ndr, &save1);
-       NDR_CHECK(ndr_push_u16(ndr, 0));
-       NDR_CHECK(ndr_push_u32(ndr, ace->access_mask));
+       NDR_CHECK(ndr_push_uint16(ndr, 0));
+       NDR_CHECK(ndr_push_uint32(ndr, ace->access_mask));
 
        if (sec_ace_object(ace->type)) {
-               NDR_CHECK(ndr_push_u32(ndr, ace->obj->flags));
+               NDR_CHECK(ndr_push_uint32(ndr, ace->obj->flags));
                if (ace->obj->flags & SEC_ACE_OBJECT_PRESENT) {
                        NDR_CHECK(ndr_push_guid(ndr, &ace->obj->object_guid));
                }
@@ -216,7 +216,7 @@ NTSTATUS ndr_push_security_ace(struct ndr_push *ndr, struct security_ace *ace)
 
        ndr_push_save(ndr, &save2);
        ndr_push_restore(ndr, &save1);
-       NDR_CHECK(ndr_push_u16(ndr, 2 + save2.offset - save1.offset));
+       NDR_CHECK(ndr_push_uint16(ndr, 2 + save2.offset - save1.offset));
        ndr_push_restore(ndr, &save2);
 
        return NT_STATUS_OK;    
@@ -231,16 +231,16 @@ NTSTATUS ndr_push_security_acl(struct ndr_push *ndr, struct security_acl *acl)
        int i;
        struct ndr_push_save save1, save2;
 
-       NDR_CHECK(ndr_push_u16(ndr, acl->revision));
+       NDR_CHECK(ndr_push_uint16(ndr, acl->revision));
        ndr_push_save(ndr, &save1);
-       NDR_CHECK(ndr_push_u16(ndr, 0));
-       NDR_CHECK(ndr_push_u32(ndr, acl->num_aces));
+       NDR_CHECK(ndr_push_uint16(ndr, 0));
+       NDR_CHECK(ndr_push_uint32(ndr, acl->num_aces));
        for (i=0;i<acl->num_aces;i++) {
                NDR_CHECK(ndr_push_security_ace(ndr, &acl->aces[i]));
        }
        ndr_push_save(ndr, &save2);
        ndr_push_restore(ndr, &save1);
-       NDR_CHECK(ndr_push_u16(ndr, 2 + save2.offset - save1.offset));
+       NDR_CHECK(ndr_push_uint16(ndr, 2 + save2.offset - save1.offset));
        ndr_push_restore(ndr, &save2);
 
        return NT_STATUS_OK;
@@ -253,13 +253,13 @@ NTSTATUS ndr_push_dom_sid(struct ndr_push *ndr, struct dom_sid *sid)
 {
        int i;
 
-       NDR_CHECK(ndr_push_u8(ndr, sid->sid_rev_num));
-       NDR_CHECK(ndr_push_u8(ndr, sid->num_auths));
+       NDR_CHECK(ndr_push_uint8(ndr, sid->sid_rev_num));
+       NDR_CHECK(ndr_push_uint8(ndr, sid->num_auths));
        for (i=0;i<6;i++) {
-               NDR_CHECK(ndr_push_u8(ndr, sid->id_auth[i]));
+               NDR_CHECK(ndr_push_uint8(ndr, sid->id_auth[i]));
        }
        for (i=0;i<sid->num_auths;i++) {
-               NDR_CHECK(ndr_push_u32(ndr, sid->sub_auths[i]));
+               NDR_CHECK(ndr_push_uint32(ndr, sid->sub_auths[i]));
        }
 
        return NT_STATUS_OK;
@@ -277,8 +277,8 @@ NTSTATUS ndr_push_security_descriptor(struct ndr_push *ndr,
 
        ndr_push_save(ndr, &save);
 
-       NDR_CHECK(ndr_push_u8(ndr, sd->revision));
-       NDR_CHECK(ndr_push_u16(ndr, sd->type));
+       NDR_CHECK(ndr_push_uint8(ndr, sd->revision));
+       NDR_CHECK(ndr_push_uint16(ndr, sd->type));
 
        NDR_CHECK(ndr_push_offset(ndr, &ofs1));
        NDR_CHECK(ndr_push_offset(ndr, &ofs2));
similarity index 88%
rename from source4/libcli/rpc/rpc_lsa.c
rename to source4/librpc/rpc/rpc_lsa.c
index 65d6a8149176162f348dddf5a06c6654053653ec..2aa3f78730585098743a299a9a957760e488aea8 100644 (file)
 
 #include "includes.h"
 
+
+NTSTATUS ndr_push_lsa_OpenPolicy(struct ndr_push *ndr, struct lsa_OpenPolicy *r);
+NTSTATUS ndr_push_lsa_OpenPolicy2(struct ndr_push *ndr, struct lsa_OpenPolicy2 *r);
+NTSTATUS ndr_push_lsa_EnumSids(struct ndr_push *ndr, struct lsa_EnumSids *r);
+
 /*
   OpenPolicy interface
 */
@@ -34,6 +39,7 @@ NTSTATUS dcerpc_lsa_OpenPolicy(struct dcerpc_pipe *p,
        struct lsa_OpenPolicy r;
        NTSTATUS status;
        TALLOC_CTX *mem_ctx;
+       uint16 s;
 
        mem_ctx = talloc_init("dcerpc_lsa_openpolicy");
        if (!mem_ctx) {
@@ -41,7 +47,8 @@ NTSTATUS dcerpc_lsa_OpenPolicy(struct dcerpc_pipe *p,
        }
 
        /* fill the .in side of the call */
-       r.in.system_name = server;
+       s = server[0];
+       r.in.system_name = &s;
        r.in.attr = attr;
        r.in.desired_access = access_mask;
 
@@ -55,8 +62,8 @@ NTSTATUS dcerpc_lsa_OpenPolicy(struct dcerpc_pipe *p,
        }
        
        /* and extract the .out parameters */
-       *handle = r.out.handle;
-       status = r.out.status;
+       *handle = *r.out.handle;
+       status = r.out.result;
 
 done:
        talloc_destroy(mem_ctx);
@@ -97,8 +104,8 @@ NTSTATUS dcerpc_lsa_OpenPolicy2(struct dcerpc_pipe *p,
        }
        
        /* and extract the .out parameters */
-       *handle = r.out.handle;
-       status = r.out.status;
+       *handle = *r.out.handle;
+       status = r.out.result;
 
 done:
        talloc_destroy(mem_ctx);
@@ -135,7 +142,7 @@ NTSTATUS dcerpc_lsa_EnumSids(struct dcerpc_pipe *p,
        /* and extract the .out parameters */
        *num_entries = r.out.num_entries;
        *sids = r.out.sids;
-       status = r.out.status;
+       status = r.out.result;
 
 done:
        return status;