The branch, v3-2-test has been updated
       via  5608c398ad9a0d05d651905a81dd92b7a0e120ff (commit)
       via  a1bb47695a7fb21af239aa9d02537d3de2fea325 (commit)
       via  4a56d3d7075bd8bbd5e139c9433789ab29f6a70e (commit)
       via  b4dca117c09ddb9c8e7eea25c6cde3fbef8c692b (commit)
       via  af5218f1505321236be52df10ebfe8f42b99573d (commit)
       via  9b5d8f4d95ebfd47831906019e11227aecc83aa1 (commit)
      from  332be113a775adce8108a8003682019ae7f5bc21 (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-2-test


- Log -----------------------------------------------------------------
commit 5608c398ad9a0d05d651905a81dd92b7a0e120ff
Author: Michael Adam <[EMAIL PROTECTED]>
Date:   Mon Dec 31 03:57:45 2007 +0100

    Make the last two helper functions in libnet_conf.c static.
    
    Now the registry backend is completely hidden from the API.
    
    Michael

commit a1bb47695a7fb21af239aa9d02537d3de2fea325
Author: Michael Adam <[EMAIL PROTECTED]>
Date:   Mon Dec 31 03:55:22 2007 +0100

    Make grouping in if statement more explicit.
    
    Michael

commit 4a56d3d7075bd8bbd5e139c9433789ab29f6a70e
Author: Michael Adam <[EMAIL PROTECTED]>
Date:   Mon Dec 31 03:25:54 2007 +0100

    Fix a permissions error in reg_deletekey_recursive().
    
    Michael

commit b4dca117c09ddb9c8e7eea25c6cde3fbef8c692b
Author: Michael Adam <[EMAIL PROTECTED]>
Date:   Mon Dec 31 03:02:39 2007 +0100

    Change net_conf_import() to only use libnet_conf API functions.
    
    More precisely, only import_process_service() is changed.
    This removes all references to registry code from net_conf.c.
    
    net_conf_import() is currently -- like net_conf_addshare() -- also
    considered a high-level add-on, not an API function.
    
    Michael

commit af5218f1505321236be52df10ebfe8f42b99573d
Author: Michael Adam <[EMAIL PROTECTED]>
Date:   Mon Dec 31 01:56:18 2007 +0100

    Rewrite net_conf_addshare() to only use libnet_conf API functions.
    
    Also exit on error if the share already exists.
    
    net_conf_addshare() is considered a high level utility function.
    It should not be an libnet_conf API function in itself since it is
    kind of arbitrary.
    
    Michael

commit 9b5d8f4d95ebfd47831906019e11227aecc83aa1
Author: Michael Adam <[EMAIL PROTECTED]>
Date:   Mon Dec 31 01:14:44 2007 +0100

    Rename libnet_smbconf_key_exists() to libnet_smbconf_share_exists()
    
    and move it to the api section of libnet_conf.c
    
    Michael

-----------------------------------------------------------------------

Summary of changes:
 source/libnet/libnet_conf.c |   56 +++++++++++++++++++++---------------------
 source/registry/reg_api.c   |    2 +-
 source/utils/net_conf.c     |   55 ++++++++++++++++++-----------------------
 3 files changed, 53 insertions(+), 60 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/libnet/libnet_conf.c b/source/libnet/libnet_conf.c
index 8fe2c76..21fe857 100644
--- a/source/libnet/libnet_conf.c
+++ b/source/libnet/libnet_conf.c
@@ -100,26 +100,6 @@ static WERROR libnet_smbconf_reg_open_basepath(TALLOC_CTX 
*ctx,
        return libnet_smbconf_reg_open_path(ctx, NULL, desired_access, key);
 }
 
-/*
- * check if a subkey of KEY_SMBCONF of a given name exists
- */
-bool libnet_smbconf_key_exists(const char *subkeyname)
-{
-       bool ret = false;
-       WERROR werr = WERR_OK;
-       TALLOC_CTX *mem_ctx = talloc_stackframe();
-       struct registry_key *key = NULL;
-
-       werr = libnet_smbconf_reg_open_path(mem_ctx, subkeyname, REG_KEY_READ,
-                                           &key);
-       if (W_ERROR_IS_OK(werr)) {
-               ret = true;
-       }
-
-       TALLOC_FREE(mem_ctx);
-       return ret;
-}
-
 static bool libnet_smbconf_value_exists(struct registry_key *key,
                                        const char *param)
 {
@@ -140,9 +120,9 @@ static bool libnet_smbconf_value_exists(struct registry_key 
*key,
 /*
  * create a subkey of KEY_SMBCONF
  */
-WERROR libnet_smbconf_reg_createkey_internal(TALLOC_CTX *ctx,
-                                            const char * subkeyname,
-                                            struct registry_key **newkey)
+static WERROR libnet_smbconf_reg_createkey_internal(TALLOC_CTX *ctx,
+                                                   const char * subkeyname,
+                                                   struct registry_key 
**newkey)
 {
        WERROR werr = WERR_OK;
        struct registry_key *create_parent = NULL;
@@ -182,7 +162,7 @@ done:
 /*
  * add a value to a key.
  */
-WERROR libnet_smbconf_reg_setvalue_internal(struct registry_key *key,
+static WERROR libnet_smbconf_reg_setvalue_internal(struct registry_key *key,
                                                   const char *valname,
                                                   const char *valstr)
 {
@@ -530,7 +510,7 @@ WERROR libnet_smbconf_get_share_names(TALLOC_CTX *mem_ctx, 
uint32_t *num_shares,
        }
 
        /* make sure "global" is always listed first */
-       if (libnet_smbconf_key_exists(GLOBAL_NAME)) {
+       if (libnet_smbconf_share_exists(GLOBAL_NAME)) {
                werr = libnet_smbconf_add_string_to_array(tmp_ctx,
                                                          &tmp_share_names,
                                                          0, GLOBAL_NAME);
@@ -583,6 +563,26 @@ done:
 }
 
 /**
+ * check if a share/service of a given name exists
+ */
+bool libnet_smbconf_share_exists(const char *subkeyname)
+{
+       bool ret = false;
+       WERROR werr = WERR_OK;
+       TALLOC_CTX *mem_ctx = talloc_stackframe();
+       struct registry_key *key = NULL;
+
+       werr = libnet_smbconf_reg_open_path(mem_ctx, subkeyname, REG_KEY_READ,
+                                           &key);
+       if (W_ERROR_IS_OK(werr)) {
+               ret = true;
+       }
+
+       TALLOC_FREE(mem_ctx);
+       return ret;
+}
+
+/**
  * get a definition of a share (service) from configuration.
  */
 WERROR libnet_smbconf_getshare(TALLOC_CTX *mem_ctx, const char *servicename,
@@ -638,7 +638,7 @@ WERROR libnet_smbconf_setparm(const char *service,
        struct registry_key *key = NULL;
        TALLOC_CTX *mem_ctx = talloc_stackframe();
 
-       if (!libnet_smbconf_key_exists(service)) {
+       if (!libnet_smbconf_share_exists(service)) {
                werr = libnet_smbconf_reg_createkey_internal(mem_ctx, service,
                                                             &key);
        } else {
@@ -673,7 +673,7 @@ WERROR libnet_smbconf_getparm(TALLOC_CTX *mem_ctx,
                goto done;
        }
 
-       if (!libnet_smbconf_key_exists(service)) {
+       if (!libnet_smbconf_share_exists(service)) {
                werr = WERR_NO_SUCH_SERVICE;
                goto done;
        }
@@ -716,7 +716,7 @@ WERROR libnet_smbconf_delparm(const char *service,
        WERROR werr = WERR_OK;
        TALLOC_CTX *mem_ctx = talloc_stackframe();
 
-       if (!libnet_smbconf_key_exists(service)) {
+       if (!libnet_smbconf_share_exists(service)) {
                return WERR_NO_SUCH_SERVICE;
        }
 
diff --git a/source/registry/reg_api.c b/source/registry/reg_api.c
index bc4508f..bb410e6 100644
--- a/source/registry/reg_api.c
+++ b/source/registry/reg_api.c
@@ -729,7 +729,7 @@ WERROR reg_deletekey_recursive_internal(TALLOC_CTX *ctx,
        }
 
        /* recurse through subkeys first */
-       werr = reg_openkey(mem_ctx, parent, path, REG_KEY_WRITE, &key);
+       werr = reg_openkey(mem_ctx, parent, path, REG_KEY_ALL, &key);
        if (!W_ERROR_IS_OK(werr)) {
                goto done;
        }
diff --git a/source/utils/net_conf.c b/source/utils/net_conf.c
index 98e6b60..07eb3b8 100644
--- a/source/utils/net_conf.c
+++ b/source/utils/net_conf.c
@@ -191,7 +191,6 @@ static int import_process_service(TALLOC_CTX *ctx,
        struct parm_struct *parm;
        int pnum = 0;
        const char *servicename;
-       struct registry_key *key;
        WERROR werr;
        char *valstr = NULL;
        TALLOC_CTX *tmp_ctx = NULL;
@@ -208,25 +207,21 @@ static int import_process_service(TALLOC_CTX *ctx,
        if (opt_testmode) {
                d_printf("[%s]\n", servicename);
        } else {
-               if (libnet_smbconf_key_exists(servicename)) {
+               if (libnet_smbconf_share_exists(servicename)) {
                        werr = libnet_smbconf_delshare(servicename);
                        if (!W_ERROR_IS_OK(werr)) {
                                goto done;
                        }
                }
-               werr = libnet_smbconf_reg_createkey_internal(tmp_ctx, 
servicename, &key);
-               if (!W_ERROR_IS_OK(werr)) {
-                       d_fprintf(stderr, "Error creating share %s: %s\n",
-                                 servicename, dos_errstr(werr));
-                       goto done;
-               }
        }
 
        while ((parm = lp_next_parameter(share->service, &pnum, 0)))
        {
-               if ((share->service < 0 && parm->p_class == P_LOCAL)
+               if ((share->service < 0) && (parm->p_class == P_LOCAL)
                    && !(parm->flags & FLAG_GLOBAL))
+               {
                        continue;
+               }
 
                valstr = parm_valstr(tmp_ctx, parm, share);
 
@@ -234,8 +229,9 @@ static int import_process_service(TALLOC_CTX *ctx,
                        if (opt_testmode) {
                                d_printf("\t%s = %s\n", parm->label, valstr);
                        } else {
-                               werr = libnet_smbconf_reg_setvalue_internal(key,
-                                                       parm->label, valstr);
+                               werr = libnet_smbconf_setparm(servicename,
+                                                             parm->label,
+                                                             valstr);
                                if (!W_ERROR_IS_OK(werr)) {
                                        d_fprintf(stderr,
                                                  "Error setting parameter '%s'"
@@ -506,11 +502,16 @@ done:
        return ret;
 }
 
+/**
+ * Add a share, with a couple of standard parameters, partly optional.
+ *
+ * This is a high level utility function of the net conf utility,
+ * not a direct frontend to the libnet_conf API.
+ */
 static int net_conf_addshare(int argc, const char **argv)
 {
        int ret = -1;
        WERROR werr = WERR_OK;
-       struct registry_key *newkey = NULL;
        char *sharename = NULL;
        const char *path = NULL;
        const char *comment = NULL;
@@ -562,7 +563,6 @@ static int net_conf_addshare(int argc, const char **argv)
                                        net_conf_addshare_usage(argc, argv);
                                        goto done;
                        }
-
                case 2:
                        path = argv[1];
                        sharename = strdup_lower(argv[0]);
@@ -596,6 +596,12 @@ static int net_conf_addshare(int argc, const char **argv)
                goto done;
        }
 
+       if (libnet_smbconf_share_exists(sharename)) {
+               d_fprintf(stderr, "ERROR: share %s already exists.\n",
+                         sharename);
+               goto done;
+       }
+
        /* validate path */
 
        if (path[0] != '/') {
@@ -622,19 +628,10 @@ static int net_conf_addshare(int argc, const char **argv)
        }
 
        /*
-        * create the share
+        * create the share by adding the parameters
         */
 
-       werr = libnet_smbconf_reg_createkey_internal(NULL, argv[0], &newkey);
-       if (!W_ERROR_IS_OK(werr)) {
-               d_fprintf(stderr, "Error creating share %s: %s\n",
-                         argv[0], dos_errstr(werr));
-               goto done;
-       }
-
-       /* add config params as values */
-
-       werr = libnet_smbconf_reg_setvalue_internal(newkey, "path", path);
+       werr = libnet_smbconf_setparm(sharename, "path", path);
        if (!W_ERROR_IS_OK(werr)) {
                d_fprintf(stderr, "Error setting parameter %s: %s\n",
                          "path", dos_errstr(werr));
@@ -642,8 +639,7 @@ static int net_conf_addshare(int argc, const char **argv)
        }
 
        if (comment != NULL) {
-               werr = libnet_smbconf_reg_setvalue_internal(newkey, "comment",
-                                                           comment);
+               werr = libnet_smbconf_setparm(sharename, "comment", comment);
                if (!W_ERROR_IS_OK(werr)) {
                        d_fprintf(stderr, "Error setting parameter %s: %s\n",
                                  "comment", dos_errstr(werr));
@@ -651,16 +647,14 @@ static int net_conf_addshare(int argc, const char **argv)
                }
        }
 
-       werr = libnet_smbconf_reg_setvalue_internal(newkey, "guest ok",
-                                                   guest_ok);
+       werr = libnet_smbconf_setparm(sharename, "guest ok", guest_ok);
        if (!W_ERROR_IS_OK(werr)) {
                d_fprintf(stderr, "Error setting parameter %s: %s\n",
                          "'guest ok'", dos_errstr(werr));
                goto done;
        }
 
-       werr = libnet_smbconf_reg_setvalue_internal(newkey, "writeable",
-                                                   writeable);
+       werr = libnet_smbconf_setparm(sharename, "writeable", writeable);
        if (!W_ERROR_IS_OK(werr)) {
                d_fprintf(stderr, "Error setting parameter %s: %s\n",
                          "writeable", dos_errstr(werr));
@@ -670,7 +664,6 @@ static int net_conf_addshare(int argc, const char **argv)
        ret = 0;
 
 done:
-       TALLOC_FREE(newkey);
        SAFE_FREE(sharename);
        return ret;
 }


-- 
Samba Shared Repository

Reply via email to