s3:smbd/service: switch load_registry_service/shares to use loadparm routines
authorMichael Adam <obnox@samba.org>
Tue, 28 Apr 2009 23:49:53 +0000 (01:49 +0200)
committerMichael Adam <obnox@samba.org>
Wed, 29 Apr 2009 09:42:11 +0000 (11:42 +0200)
instead of reading the registry directly with tdb and activating the
configure options by hand.

This eliminates the need for repeating checks done in loadparm.
For instance it disables registry shares without path in the server
as is the case with text based shares.

Michael
(cherry picked from commit 077bcc11257697b243916fbb02cd72b3a122b9ba)

source/param/loadparm.c
source/smbd/service.c

index a3efd20e0609c86a0a85a45cb77d014a26024d11..bbdb52c514869fa83d100a433743f5d9b7b52863 100644 (file)
@@ -6594,7 +6594,7 @@ static bool process_registry_globals(void)
        return process_registry_service(GLOBAL_NAME);
 }
 
-static bool process_registry_shares(void)
+bool process_registry_shares(void)
 {
        WERROR werr;
        uint32_t count;
index 1c8ffbd627dd6648568d44053eb6e1157943204a..f463e456245047d012fcbd3e6561dac6a03fdc54 100644 (file)
@@ -221,16 +221,6 @@ bool set_current_service(connection_struct *conn, uint16 flags, bool do_chdir)
 
 static int load_registry_service(const char *servicename)
 {
-       struct registry_key *key;
-       char *path;
-       WERROR err;
-
-       uint32 i;
-       char *value_name;
-       struct registry_value *value;
-
-       int res = -1;
-
        if (!lp_registry_shares()) {
                return -1;
        }
@@ -243,79 +233,22 @@ static int load_registry_service(const char *servicename)
                return -2;
        }
 
-       if (asprintf(&path, "%s\\%s", KEY_SMBCONF, servicename) == -1) {
-               return -1;
-       }
-
-       err = reg_open_path(NULL, path, REG_KEY_READ, get_root_nt_token(),
-                           &key);
-       SAFE_FREE(path);
-
-       if (!W_ERROR_IS_OK(err)) {
+       if (!process_registry_service(servicename)) {
                return -1;
        }
 
-       res = lp_add_service(servicename, -1);
-       if (res == -1) {
-               goto error;
-       }
-
-       for (i=0;
-            W_ERROR_IS_OK(reg_enumvalue(key, key, i, &value_name, &value));
-            i++) {
-               switch (value->type) {
-               case REG_DWORD: { 
-                       char *tmp;
-                       if (asprintf(&tmp, "%d", value->v.dword) == -1) {
-                               continue;
-                       }
-                       lp_do_parameter(res, value_name, tmp);
-                       SAFE_FREE(tmp);
-                       break;
-               }
-               case REG_SZ: {
-                       lp_do_parameter(res, value_name, value->v.sz.str);
-                       break;
-               }
-               default:
-                       /* Ignore all the rest */
-                       break;
-               }
-
-               TALLOC_FREE(value_name);
-               TALLOC_FREE(value);
-       }
-
- error:
-
-       TALLOC_FREE(key);
-       return res;
+       return lp_servicenumber(servicename);
 }
 
 void load_registry_shares(void)
 {
-       struct registry_key *key;
-       char *name;
-       WERROR err;
-       int i;
-
        DEBUG(8, ("load_registry_shares()\n"));
        if (!lp_registry_shares()) {
                return;
        }
 
-       err = reg_open_path(NULL, KEY_SMBCONF, REG_KEY_READ,
-                           get_root_nt_token(), &key);
-       if (!(W_ERROR_IS_OK(err))) {
-               return;
-       }
-
-       for (i=0; W_ERROR_IS_OK(reg_enumkey(key, key, i, &name, NULL)); i++) {
-               load_registry_service(name);
-               TALLOC_FREE(name);
-       }
+       process_registry_shares();
 
-       TALLOC_FREE(key);
        return;
 }