Add a registry backend prod_options that replaces the former dynamic overlay.
authorMichael Adam <obnox@samba.org>
Fri, 18 Jan 2008 15:15:43 +0000 (16:15 +0100)
committerMichael Adam <obnox@samba.org>
Sun, 20 Jan 2008 01:03:39 +0000 (02:03 +0100)
Michael
(This used to be commit d9b89e9d30702f64805b3a3a3612066b19c051d1)

source3/Makefile.in
source3/include/reg_objects.h
source3/registry/reg_backend_prod_options.c [new file with mode: 0644]
source3/registry/reg_db.c
source3/registry/reg_dynamic.c
source3/registry/reg_frontend.c

index ea5e5a82a77e2855d1a4444567ba92c271e8ede5..57605d1018df1654b54266953b0fe1ec58a713ee 100644 (file)
@@ -419,6 +419,7 @@ REGISTRY_OBJ = registry/reg_frontend.o registry/reg_cachehook.o registry/reg_pri
               registry/reg_smbconf.o registry/reg_api.o \
               registry/reg_frontend_hilvl.o \
               registry/reg_backend_netlogon_params.o \
+              registry/reg_backend_prod_options.o \
               $(UTIL_REG_API_OBJ) $(UTIL_REG_SMBCONF_OBJ)
 
 RPC_LSA_OBJ = rpc_server/srv_lsa.o rpc_server/srv_lsa_nt.o librpc/gen_ndr/srv_lsa.o
index 3b846db68176b57a146b58b82b10f0ccc1264399..021ed0e0fd602a73d6549441eace917b70d7ea7c 100644 (file)
@@ -101,6 +101,7 @@ typedef struct {
 #define KEY_SHARES             "HKLM\\SYSTEM\\CurrentControlSet\\Services\\LanmanServer\\Shares"
 #define KEY_SMBCONF            "HKLM\\SOFTWARE\\Samba\\smbconf"
 #define KEY_NETLOGON_PARAMS    "HKLM\\SYSTEM\\CurrentControlSet\\Services\\Netlogon\\Parameters"
+#define KEY_PROD_OPTIONS       "HKLM\\SYSTEM\\CurrentControlSet\\Control\\ProductOptions"
 #define KEY_TREE_ROOT          ""
 
 /*
diff --git a/source3/registry/reg_backend_prod_options.c b/source3/registry/reg_backend_prod_options.c
new file mode 100644 (file)
index 0000000..7be97be
--- /dev/null
@@ -0,0 +1,70 @@
+/*
+ *  Unix SMB/CIFS implementation.
+ *  Virtual Windows Registry Layer
+ *  Copyright (C) Gerald Carter     2002-2005
+ *  Copyright (C) Michael Adam      2008
+ *
+ *  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/>.
+ */
+
+/*
+ * Product options registry backend.
+ *
+ * This replaces the former dynamic product options overlay.
+ */
+
+#include "includes.h"
+
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_REGISTRY
+
+extern REGISTRY_OPS regdb_ops;
+
+static int prod_options_fetch_values(const char *key, REGVAL_CTR *regvals)
+{
+       const char              *value_ascii = "";
+       fstring                 value;
+       int                     value_length;
+       
+       switch (lp_server_role()) {
+               case ROLE_DOMAIN_PDC:
+               case ROLE_DOMAIN_BDC:
+                       value_ascii = "LanmanNT";
+                       break;
+               case ROLE_STANDALONE:
+                       value_ascii = "ServerNT";
+                       break;
+               case ROLE_DOMAIN_MEMBER:
+                       value_ascii = "WinNT";
+                       break;
+       }
+               
+       value_length = push_ucs2( value, value, value_ascii, sizeof(value), 
+               STR_TERMINATE|STR_NOALIGN );
+       regval_ctr_addvalue( regvals, "ProductType", REG_SZ, value, 
+               value_length );
+       
+       return regval_ctr_numvals( regvals );
+}
+
+static int prod_options_fetch_subkeys(const char *key,
+                                     REGSUBKEY_CTR *subkey_ctr)
+{
+       return regdb_ops.fetch_subkeys(key, subkey_ctr);
+}
+
+REGISTRY_OPS prod_options_reg_ops = {
+       .fetch_values = prod_options_fetch_values,
+       .fetch_subkeys = prod_options_fetch_subkeys,
+};
index 1b95c2558c5acd6bef6c265c88807077445082e8..f70e44fd51c62bb07db1d8c72d231e4977d3201d 100644 (file)
@@ -47,7 +47,7 @@ static const char *builtin_registry_paths[] = {
        "HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Perflib",
        "HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Perflib\\009",
        "HKLM\\SYSTEM\\CurrentControlSet\\Control\\Print\\Monitors",
-       "HKLM\\SYSTEM\\CurrentControlSet\\Control\\ProductOptions",
+       KEY_PROD_OPTIONS,
        "HKLM\\SYSTEM\\CurrentControlSet\\Control\\Terminal Server\\DefaultUserConfiguration",
        "HKLM\\SYSTEM\\CurrentControlSet\\Services\\TcpIp\\Parameters",
        KEY_NETLOGON_PARAMS,
index 037bdab0cc6fb37d4c3e611e133e0df56846627b..2735e2a27a949875f73f5549d4f46cd6f64d36db 100644 (file)
@@ -32,36 +32,6 @@ struct reg_dyn_values {
 /***********************************************************************
 ***********************************************************************/
 
-static int prod_options( REGVAL_CTR *regvals )
-{
-       const char              *value_ascii = "";
-       fstring                 value;
-       int                     value_length;
-       
-       switch (lp_server_role()) {
-               case ROLE_DOMAIN_PDC:
-               case ROLE_DOMAIN_BDC:
-                       value_ascii = "LanmanNT";
-                       break;
-               case ROLE_STANDALONE:
-                       value_ascii = "ServerNT";
-                       break;
-               case ROLE_DOMAIN_MEMBER:
-                       value_ascii = "WinNT";
-                       break;
-       }
-               
-       value_length = push_ucs2( value, value, value_ascii, sizeof(value), 
-               STR_TERMINATE|STR_NOALIGN );
-       regval_ctr_addvalue( regvals, "ProductType", REG_SZ, value, 
-               value_length );
-       
-       return regval_ctr_numvals( regvals );
-}
-
-/***********************************************************************
-***********************************************************************/
-
 static int tcpip_params( REGVAL_CTR *regvals )
 {
        fstring                 value;
@@ -184,7 +154,6 @@ static int current_version( REGVAL_CTR *values )
 ***********************************************************************/
 
 static struct reg_dyn_values dynamic_values[] = {
-       { "HKLM/SYSTEM/CURRENTCONTROLSET/CONTROL/PRODUCTOPTIONS",       &prod_options     },
        { "HKLM/SYSTEM/CURRENTCONTROLSET/SERVICES/TCPIP/PARAMETERS",    &tcpip_params     },
        { "HKLM/SOFTWARE/MICROSOFT/WINDOWS NT/CURRENTVERSION/PERFLIB",  &perflib_params   }, 
        { "HKLM/SOFTWARE/MICROSOFT/WINDOWS NT/CURRENTVERSION/PERFLIB/009", &perflib_009_params }, 
index 6674b0ba205c91d389c92e2cca3254e42523da03..32ec7f9a873e8ca0ce2f7e1bf6db5953ff0dfe11 100644 (file)
@@ -29,6 +29,7 @@ extern REGISTRY_OPS eventlog_ops;
 extern REGISTRY_OPS shares_reg_ops;
 extern REGISTRY_OPS smbconf_reg_ops;
 extern REGISTRY_OPS netlogon_params_reg_ops;
+extern REGISTRY_OPS prod_options_reg_ops;
 extern REGISTRY_OPS regdb_ops;         /* these are the default */
 
 /* array of REGISTRY_HOOK's which are read into a tree for easy access */
@@ -42,6 +43,7 @@ REGISTRY_HOOK reg_hooks[] = {
   { KEY_SHARES,                &shares_reg_ops },
   { KEY_SMBCONF,               &smbconf_reg_ops },
   { KEY_NETLOGON_PARAMS,       &netlogon_params_reg_ops },
+  { KEY_PROD_OPTIONS,          &prod_options_reg_ops },
 #endif
   { NULL, NULL }
 };