s3-registry: add preg.idl.
authorGünther Deschner <gd@samba.org>
Wed, 7 Jul 2010 00:45:01 +0000 (02:45 +0200)
committerGünther Deschner <gd@samba.org>
Wed, 7 Jul 2010 13:27:04 +0000 (15:27 +0200)
Guenther

source3/Makefile.in
source3/librpc/idl/preg.idl [new file with mode: 0644]
source3/librpc/idl/wscript_build
source3/librpc/ndr/ndr_preg.c [new file with mode: 0644]
source3/librpc/ndr/ndr_preg.h [new file with mode: 0644]

index 8291f4190d6575dc5d990bf71807667e5e2af4e5..867d4f14665df5024f3d1a4ac821cf04423e7309 100644 (file)
@@ -1426,7 +1426,8 @@ IDL_FILES = librpc/idl/messaging.idl \
            librpc/idl/wbint.idl \
            librpc/idl/perfcount.idl \
            librpc/idl/secrets.idl \
-           librpc/idl/libnet_join.idl
+           librpc/idl/libnet_join.idl \
+           librpc/idl/preg.idl
 
 samba3-idl::
        @PIDL_OUTPUTDIR="librpc/gen_ndr" PIDL_ARGS="$(PIDL_ARGS)" CPP="$(CPP)" PIDL="../pidl/pidl" \
diff --git a/source3/librpc/idl/preg.idl b/source3/librpc/idl/preg.idl
new file mode 100644 (file)
index 0000000..6738f61
--- /dev/null
@@ -0,0 +1,49 @@
+#include "idl_types.h"
+
+import "misc.idl";
+
+/*
+   IDL structures defining PReg files
+
+   more info can be found at:
+   http://msdn2.microsoft.com/en-us/library/aa374407.aspx
+*/
+
+[
+       pointer_default(unique),
+       helper("../librpc/ndr/ndr_preg.h"),
+       helpstring("PReg structure"),
+       uuid("67655250-0000-0000-0000-00000000")
+]
+       interface preg
+{
+       typedef [public] struct {
+               [charset(DOS),value("["),noprint] uint8 _opening_bracket[2];
+               nstring keyname;
+               [charset(DOS),value(";"),noprint] uint8 _sep1[2];
+               nstring valuename;
+               [charset(DOS),value(";"),noprint] uint8 _sep2[2];
+               winreg_Type type;
+               [charset(DOS),value(";"),noprint] uint8 _sep3[2];
+               uint32 size;
+               [charset(DOS),value(";"),noprint] uint8 _sep4[2];
+               uint8 data[size];
+               [charset(DOS),value("]"),noprint] uint8 _closing_bracket[2];
+       } preg_entry;
+
+       typedef [public] struct {
+               [charset(DOS),value("PReg")] uint8 signature[4];
+               [value(1)] uint32 version;
+       } preg_header;
+
+       typedef [public,flag(NDR_NOALIGN),nopush,nopull] struct {
+               preg_header header;
+               uint32 num_entries;
+               preg_entry entries[num_entries];
+       } preg_file;
+
+       void decode_preg_file(
+               [in] preg_file file
+               );
+
+}
index 3d1e2588b7ff5c080070fc48a415eb389dc3ebe9..1efcc30ff0b2a6b951c07a686e7a5ec8fb760d02 100644 (file)
@@ -1,7 +1,7 @@
 
 bld.SAMBA_PIDL_LIST('PIDL',
                     '''messaging.idl libnetapi.idl notify.idl
-                       wbint.idl perfcount.idl secrets.idl libnet_join.idl''',
+                       wbint.idl perfcount.idl secrets.idl libnet_join.idl preg.idl''',
                     options='--includedir=../librpc/idl --header --ndr-parser --samba3-ndr-server --samba3-ndr-client',
                     output_dir='../gen_ndr')
 
diff --git a/source3/librpc/ndr/ndr_preg.c b/source3/librpc/ndr/ndr_preg.c
new file mode 100644 (file)
index 0000000..2c684e2
--- /dev/null
@@ -0,0 +1,69 @@
+/*
+   Unix SMB/CIFS implementation.
+
+   routines for marshalling/unmarshalling preg structures
+
+   Copyright (C) Guenther Deschner 2010
+
+   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 3 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, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "includes.h"
+#include "librpc/gen_ndr/ndr_preg.h"
+
+_PUBLIC_ enum ndr_err_code ndr_push_preg_file(struct ndr_push *ndr, int ndr_flags, const struct preg_file *r)
+{
+       uint32_t cntr_entries_0;
+       {
+               uint32_t _flags_save_STRUCT = ndr->flags;
+               ndr_set_flags(&ndr->flags, LIBNDR_FLAG_NOALIGN);
+               if (ndr_flags & NDR_SCALARS) {
+                       NDR_CHECK(ndr_push_align(ndr, 4));
+                       NDR_CHECK(ndr_push_preg_header(ndr, NDR_SCALARS, &r->header));
+                       for (cntr_entries_0 = 0; cntr_entries_0 < r->num_entries; cntr_entries_0++) {
+                               NDR_CHECK(ndr_push_preg_entry(ndr, NDR_SCALARS, &r->entries[cntr_entries_0]));
+                       }
+                       NDR_CHECK(ndr_push_trailer_align(ndr, 4));
+               }
+               if (ndr_flags & NDR_BUFFERS) {
+               }
+               ndr->flags = _flags_save_STRUCT;
+       }
+       return NDR_ERR_SUCCESS;
+}
+
+_PUBLIC_ enum ndr_err_code ndr_pull_preg_file(struct ndr_pull *ndr, int ndr_flags, struct preg_file *r)
+{
+       {
+               uint32_t _flags_save_STRUCT = ndr->flags;
+               ndr_set_flags(&ndr->flags, LIBNDR_FLAG_NOALIGN);
+               if (ndr_flags & NDR_SCALARS) {
+                       NDR_CHECK(ndr_pull_align(ndr, 4));
+                       NDR_CHECK(ndr_pull_preg_header(ndr, NDR_SCALARS, &r->header));
+                       r->num_entries = 0;
+                       NDR_PULL_ALLOC_N(ndr, r->entries, r->num_entries);
+                       while (ndr->offset + 12 <= ndr->data_size) {
+                               r->entries = talloc_realloc(ndr, r->entries, struct preg_entry, r->num_entries + 1);
+                               NDR_ERR_HAVE_NO_MEMORY(r->entries);
+                               NDR_CHECK(ndr_pull_preg_entry(ndr, NDR_SCALARS, &r->entries[r->num_entries]));
+                               r->num_entries++;
+                       }
+                       NDR_CHECK(ndr_pull_trailer_align(ndr, 4));
+               }
+               if (ndr_flags & NDR_BUFFERS) {
+               }
+               ndr->flags = _flags_save_STRUCT;
+       }
+       return NDR_ERR_SUCCESS;
+}
diff --git a/source3/librpc/ndr/ndr_preg.h b/source3/librpc/ndr/ndr_preg.h
new file mode 100644 (file)
index 0000000..d781e13
--- /dev/null
@@ -0,0 +1,23 @@
+/*
+   Unix SMB/CIFS implementation.
+
+   routines for marshalling/unmarshalling preg structures
+
+   Copyright (C) Guenther Deschner 2010
+
+   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 3 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, see <http://www.gnu.org/licenses/>.
+*/
+
+_PUBLIC_ enum ndr_err_code ndr_push_preg_file(struct ndr_push *ndr, int ndr_flags, const struct preg_file *r);
+_PUBLIC_ enum ndr_err_code ndr_pull_preg_file(struct ndr_pull *ndr, int ndr_flags, struct preg_file *r);