[SCM] Samba Shared Repository - branch v3-2-test updated -
initial-v3-2-unstable-981-g5608c39
Michael Adam
obnox at samba.org
Mon Dec 31 02:59:11 GMT 2007
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 <obnox at samba.org>
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 <obnox at samba.org>
Date: Mon Dec 31 03:55:22 2007 +0100
Make grouping in if statement more explicit.
Michael
commit 4a56d3d7075bd8bbd5e139c9433789ab29f6a70e
Author: Michael Adam <obnox at samba.org>
Date: Mon Dec 31 03:25:54 2007 +0100
Fix a permissions error in reg_deletekey_recursive().
Michael
commit b4dca117c09ddb9c8e7eea25c6cde3fbef8c692b
Author: Michael Adam <obnox at samba.org>
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 <obnox at samba.org>
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 <obnox at samba.org>
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
More information about the samba-cvs
mailing list