summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Adam <obnox@samba.org>2007-12-29 14:38:42 +0100
committerMichael Adam <obnox@samba.org>2007-12-29 17:00:27 +0100
commite8cb7cecf2dde62f271a37376cefa5179eb7b7bc (patch)
tree8c26e22001f004a22427d4a6fa3b2d7328d4dd96
parent0e8ca78720ed0fff3853b8dbd407d41044aa4275 (diff)
downloadsamba-e8cb7cecf2dde62f271a37376cefa5179eb7b7bc.tar.gz
samba-e8cb7cecf2dde62f271a37376cefa5179eb7b7bc.tar.bz2
samba-e8cb7cecf2dde62f271a37376cefa5179eb7b7bc.zip
Make sure libnet_smbconf_get_share_names() always lists "global" first.
And don't return count-1 but count. Michael (This used to be commit b7cb9b78231512dc4a88c307048d7fb5334fa319)
-rw-r--r--source3/libnet/libnet_conf.c25
-rw-r--r--source3/utils/net_conf.c2
2 files changed, 22 insertions, 5 deletions
diff --git a/source3/libnet/libnet_conf.c b/source3/libnet/libnet_conf.c
index ad8deda04c..636e966a37 100644
--- a/source3/libnet/libnet_conf.c
+++ b/source3/libnet/libnet_conf.c
@@ -424,6 +424,7 @@ WERROR libnet_smbconf_get_share_names(TALLOC_CTX *mem_ctx, uint32_t *num_shares,
char ***share_names)
{
uint32_t count;
+ uint32_t added_count = 0;
TALLOC_CTX *tmp_ctx = NULL;
WERROR werr = WERR_OK;
struct registry_key *key = NULL;
@@ -441,6 +442,17 @@ WERROR libnet_smbconf_get_share_names(TALLOC_CTX *mem_ctx, uint32_t *num_shares,
goto done;
}
+ /* make sure "global" is always listed first */
+ if (libnet_smbconf_key_exists(GLOBAL_NAME)) {
+ werr = libnet_smbconf_add_string_to_array(tmp_ctx,
+ &tmp_share_names,
+ 0, GLOBAL_NAME);
+ if (!W_ERROR_IS_OK(werr)) {
+ goto done;
+ }
+ added_count++;
+ }
+
werr = libnet_smbconf_reg_open_basepath(tmp_ctx,
SEC_RIGHTS_ENUM_SUBKEYS,
&key);
@@ -453,21 +465,26 @@ WERROR libnet_smbconf_get_share_names(TALLOC_CTX *mem_ctx, uint32_t *num_shares,
&subkey_name, NULL));
count++)
{
+ if (strequal(subkey_name, GLOBAL_NAME)) {
+ continue;
+ }
+
werr = libnet_smbconf_add_string_to_array(tmp_ctx,
&tmp_share_names,
- count, subkey_name);
+ added_count,
+ subkey_name);
if (!W_ERROR_IS_OK(werr)) {
goto done;
}
+ added_count++;
}
if (!W_ERROR_EQUAL(WERR_NO_MORE_ITEMS, werr)) {
goto done;
}
-
werr = WERR_OK;
- *num_shares = count - 1;
- if (count > 0) {
+ *num_shares = added_count;
+ if (added_count > 0) {
*share_names = talloc_move(mem_ctx, &tmp_share_names);
}
diff --git a/source3/utils/net_conf.c b/source3/utils/net_conf.c
index 651948c07c..8791d7cbdd 100644
--- a/source3/utils/net_conf.c
+++ b/source3/utils/net_conf.c
@@ -475,7 +475,7 @@ static int net_conf_listshares(int argc, const char **argv)
goto done;
}
- for (count = 0; count <= num_shares; count++)
+ for (count = 0; count < num_shares; count++)
{
d_printf("%s\n", share_names[count]);
}