summaryrefslogtreecommitdiff
path: root/source3
diff options
context:
space:
mode:
authorMichael Adam <obnox@samba.org>2007-07-07 23:57:25 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 12:23:52 -0500
commita5946cb46af25ef43d0d554a81f114b85a882190 (patch)
tree17056028ecd1cc3f094988daf09962046d2c7f5b /source3
parent1bea19c1273bdf934663afc0ba63c3873a2fa303 (diff)
downloadsamba-a5946cb46af25ef43d0d554a81f114b85a882190.tar.gz
samba-a5946cb46af25ef43d0d554a81f114b85a882190.tar.bz2
samba-a5946cb46af25ef43d0d554a81f114b85a882190.zip
r23750: Change the behaviour of net conf import when there is a global section
in the current registry and there is no global section in the input file (or only global options with default values): In that case the existing global section is now not touched. Before, it would have been deleted and recreated empty. The new behaviour is how other shares are treated too. Note that since the input file is parsed by lp_load, there is currently no way to distinguish between a section with only default parameters and a non-existing section in net conf import. Michael PS: A couple of trailing white-spaces have been eliminated and a line was broken to be not longer than 80 chars, too. (This used to be commit ec21a0cf9f01986d333b50b883f2105e32cf7fc9)
Diffstat (limited to 'source3')
-rw-r--r--source3/utils/net_conf.c32
1 files changed, 24 insertions, 8 deletions
diff --git a/source3/utils/net_conf.c b/source3/utils/net_conf.c
index 9d4f4601e4..4990541384 100644
--- a/source3/utils/net_conf.c
+++ b/source3/utils/net_conf.c
@@ -583,6 +583,19 @@ done:
return ret;
}
+/* return True iff there are nondefault globals */
+static BOOL globals_exist(void)
+{
+ int i = 0;
+ struct parm_struct *parm;
+
+ while ((parm = lp_next_parameter(GLOBAL_SECTION_SNUM, &i, 0)) != NULL) {
+ if (parm->type != P_SEP) {
+ return True;
+ }
+ }
+ return False;
+}
/*
* the conf functions
@@ -689,7 +702,7 @@ int net_conf_import(int argc, const char **argv)
DEBUG(3,("net_conf_import: reading configuration from file %s.\n",
filename));
- if (!lp_load(filename,
+ if (!lp_load(filename,
False, /* global_only */
True, /* save_defaults */
False, /* add_ipc */
@@ -700,10 +713,13 @@ int net_conf_import(int argc, const char **argv)
}
if (opt_testmode) {
- d_printf("\nTEST MODE - would import the following configuration:\n\n");
+ d_printf("\nTEST MODE - "
+ "would import the following configuration:\n\n");
}
- if ((servicename == NULL) || strequal(servicename, GLOBAL_NAME)) {
+ if (((servicename == NULL) && globals_exist()) ||
+ strequal(servicename, GLOBAL_NAME))
+ {
service_found = True;
if (import_process_service(ctx, &global_share) != 0) {
goto done;
@@ -720,8 +736,8 @@ int net_conf_import(int argc, const char **argv)
goto done;
}
while ((share = next_share(shares)) != NULL) {
- if ((servicename == NULL)
- || strequal(servicename, lp_servicename(share->service)))
+ if ((servicename == NULL)
+ || strequal(servicename, lp_servicename(share->service)))
{
service_found = True;
if (import_process_service(ctx, share)!= 0) {
@@ -729,16 +745,16 @@ int net_conf_import(int argc, const char **argv)
}
}
}
-
+
if ((servicename != NULL) && !service_found) {
- d_printf("Share %s not found in file %s\n",
+ d_printf("Share %s not found in file %s\n",
servicename, filename);
goto done;
}
ret = 0;
-
+
done:
TALLOC_FREE(ctx);
return ret;