s3:registry: move higher level function reg_open_path to new module reg_api_util
authorMichael Adam <obnox@samba.org>
Mon, 20 Sep 2010 00:42:10 +0000 (02:42 +0200)
committerMichael Adam <obnox@samba.org>
Mon, 20 Sep 2010 17:58:01 +0000 (19:58 +0200)
The reg_api.c code should just export functions that direclty relate to winreg
api calls.

source3/Makefile.in
source3/include/registry.h
source3/lib/smbconf/smbconf_reg.c
source3/libgpo/gpo_reg.c
source3/registry/reg_api.c
source3/registry/reg_api_util.c [new file with mode: 0644]
source3/registry/reg_api_util.h [new file with mode: 0644]
source3/registry/reg_util_legacy.c
source3/rpc_server/srv_eventlog_nt.c

index 8da8d6e69740ae016f2375533b5d22b50b0045a9..ce8c865cb39030584c35f2938f5164f8bbe05a4a 100644 (file)
@@ -648,6 +648,7 @@ REG_BASE_OBJ = registry/reg_api.o \
 
 REG_SMBCONF_OBJ = $(REG_BASE_OBJ) \
                  registry/reg_util_token.o \
+                 registry/reg_api_util.o \
                  $(REG_BACKENDS_SMBCONF_OBJ) \
                  $(REG_INIT_SMBCONF_OBJ)
 
index 8aa02b9d8586a0c8b0a4aea9bdeaa9f15fef16da..b1741bb8d2ef47f7de2ec4837c05eb91df7f15ea 100644 (file)
@@ -170,9 +170,6 @@ WERROR reg_setkeysecurity(struct registry_key *key,
                          struct security_descriptor *psecdesc);
 WERROR reg_getversion(uint32_t *version);
 WERROR reg_deleteallvalues(struct registry_key *key);
-WERROR reg_open_path(TALLOC_CTX *mem_ctx, const char *orig_path,
-                    uint32 desired_access, const struct security_token *token,
-                    struct registry_key **pkey);
 WERROR reg_deletekey_recursive(TALLOC_CTX *ctx,
                               struct registry_key *parent,
                               const char *path);
index ba27b482067ad2d158e179dc61b58c22ab89ff5f..cafa3bfee479358fe6ba0939bfe320f665aa4fc7 100644 (file)
@@ -22,6 +22,7 @@
 #include "registry.h"
 #include "registry/reg_backend_db.h"
 #include "registry/reg_util_token.h"
+#include "registry/reg_api_util.h"
 #include "lib/smbconf/smbconf_init.h"
 #include "lib/smbconf/smbconf_reg.h"
 
index f599435e6cb4865d944b016df03f3c6405d7b67f..8c05b2f13212c39cc48f8088d4133917b9ffa93c 100644 (file)
@@ -22,6 +22,7 @@
 #include "libgpo/gpo_proto.h"
 #include "registry.h"
 #include "registry/reg_backend_db.h"
+#include "registry/reg_api_util.h"
 
 
 /****************************************************************
index ab5d86c2312ef1f2bd76186e02249df3c89ae21a..8d27240cd81b77b5d3e7170de7389342f291db59 100644 (file)
@@ -778,62 +778,6 @@ WERROR reg_deleteallvalues(struct registry_key *key)
        return WERR_OK;
 }
 
-/*
- * Utility function to open a complete registry path including the hive prefix.
- */
-
-WERROR reg_open_path(TALLOC_CTX *mem_ctx, const char *orig_path,
-                    uint32 desired_access, const struct security_token *token,
-                    struct registry_key **pkey)
-{
-       struct registry_key *hive, *key;
-       char *path, *p;
-       WERROR err;
-
-       if (!(path = SMB_STRDUP(orig_path))) {
-               return WERR_NOMEM;
-       }
-
-       p = strchr(path, '\\');
-
-       if ((p == NULL) || (p[1] == '\0')) {
-               /*
-                * No key behind the hive, just return the hive
-                */
-
-               err = reg_openhive(mem_ctx, path, desired_access, token,
-                                  &hive);
-               if (!W_ERROR_IS_OK(err)) {
-                       SAFE_FREE(path);
-                       return err;
-               }
-               SAFE_FREE(path);
-               *pkey = hive;
-               return WERR_OK;
-       }
-
-       *p = '\0';
-
-       err = reg_openhive(mem_ctx, path, KEY_ENUMERATE_SUB_KEYS, token,
-                          &hive);
-       if (!W_ERROR_IS_OK(err)) {
-               SAFE_FREE(path);
-               return err;
-       }
-
-       err = reg_openkey(mem_ctx, hive, p+1, desired_access, &key);
-
-       TALLOC_FREE(hive);
-       SAFE_FREE(path);
-
-       if (!W_ERROR_IS_OK(err)) {
-               return err;
-       }
-
-       *pkey = key;
-       return WERR_OK;
-}
-
 /*
  * Utility function to delete a registry key with all its subkeys.
  * Note that reg_deletekey returns ACCESS_DENIED when called on a
diff --git a/source3/registry/reg_api_util.c b/source3/registry/reg_api_util.c
new file mode 100644 (file)
index 0000000..2436656
--- /dev/null
@@ -0,0 +1,83 @@
+/*
+ *  Unix SMB/CIFS implementation.
+ *  Virtual Windows Registry Layer
+ *  Copyright (C) Volker Lendecke 2006
+ *  Copyright (C) Michael Adam 2007-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/>.
+ */
+
+/*
+ * Higher level utility functions on top of reg_api.c
+ */
+
+#include "includes.h"
+#include "registry.h"
+#include "reg_api_util.h"
+
+/**
+ * Utility function to open a complete registry path including the hive prefix.
+ */
+WERROR reg_open_path(TALLOC_CTX *mem_ctx, const char *orig_path,
+                    uint32 desired_access, const struct security_token *token,
+                    struct registry_key **pkey)
+{
+       struct registry_key *hive, *key;
+       char *path, *p;
+       WERROR err;
+
+       if (!(path = SMB_STRDUP(orig_path))) {
+               return WERR_NOMEM;
+       }
+
+       p = strchr(path, '\\');
+
+       if ((p == NULL) || (p[1] == '\0')) {
+               /*
+                * No key behind the hive, just return the hive
+                */
+
+               err = reg_openhive(mem_ctx, path, desired_access, token,
+                                  &hive);
+               if (!W_ERROR_IS_OK(err)) {
+                       SAFE_FREE(path);
+                       return err;
+               }
+               SAFE_FREE(path);
+               *pkey = hive;
+               return WERR_OK;
+       }
+
+       *p = '\0';
+
+       err = reg_openhive(mem_ctx, path, KEY_ENUMERATE_SUB_KEYS, token,
+                          &hive);
+       if (!W_ERROR_IS_OK(err)) {
+               SAFE_FREE(path);
+               return err;
+       }
+
+       err = reg_openkey(mem_ctx, hive, p+1, desired_access, &key);
+
+       TALLOC_FREE(hive);
+       SAFE_FREE(path);
+
+       if (!W_ERROR_IS_OK(err)) {
+               return err;
+       }
+
+       *pkey = key;
+       return WERR_OK;
+}
+
diff --git a/source3/registry/reg_api_util.h b/source3/registry/reg_api_util.h
new file mode 100644 (file)
index 0000000..c7dd77e
--- /dev/null
@@ -0,0 +1,35 @@
+/*
+ *  Unix SMB/CIFS implementation.
+ *  Virtual Windows Registry Layer
+ *  Copyright (C) Volker Lendecke 2006
+ *  Copyright (C) Michael Adam 2007-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/>.
+ */
+
+/*
+ * Higher level utility functions on top of reg_api.c
+ */
+
+#ifndef _REG_API_UTIL_H
+#define _REG_API_UTIL_H
+
+/**
+ * Utility function to open a complete registry path including the hive prefix.
+ */
+WERROR reg_open_path(TALLOC_CTX *mem_ctx, const char *orig_path,
+                    uint32 desired_access, const struct security_token *token,
+                    struct registry_key **pkey);
+
+#endif /* _REG_API_UTIL_H */
index 3a3f0207e2ca68939fd680e0ae33eb5c58638458..29b0889402368af8904d2319b30b505e610936e1 100644 (file)
@@ -22,6 +22,7 @@
 #include "includes.h"
 #include "registry.h"
 #include "reg_util_legacy.h"
+#include "reg_api_util.h"
 
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_REGISTRY
index 96787a374f2f6defe46dbcf125a7da4542f9567a..de3439eb930076e6772b131f4b3fcac50834cfe5 100644 (file)
@@ -24,6 +24,7 @@
 #include "../librpc/gen_ndr/srv_eventlog.h"
 #include "lib/eventlog/eventlog.h"
 #include "registry.h"
+#include "registry/reg_api_util.h"
 
 #undef  DBGC_CLASS
 #define DBGC_CLASS DBGC_RPC_SRV