Add libnet_conf API function libnet_smbconf_create_share().
authorMichael Adam <obnox@samba.org>
Thu, 3 Jan 2008 10:30:14 +0000 (11:30 +0100)
committerMichael Adam <obnox@samba.org>
Thu, 3 Jan 2008 10:30:14 +0000 (11:30 +0100)
And make libnet_smbconf_setparm() return error if the share
does not already exist. Adapt net_conf_addshare to this new
situation.

Michael
(This used to be commit de349bd26db3341815f6d8f6c18a5ca1fd664dca)

source3/libnet/libnet_conf.c
source3/utils/net_conf.c

index ebdfd7574483967de22fb0ad6ad8e4e403a380fa..2c67d4735ec9f83bca3641c92ad34a0fe377a856 100644 (file)
@@ -611,6 +611,27 @@ bool libnet_smbconf_share_exists(const char *servicename)
        return ret;
 }
 
+/**
+ * Add a service if it does not already exist.
+ */
+WERROR libnet_smbconf_create_share(const char *servicename)
+{
+       WERROR werr;
+       TALLOC_CTX *mem_ctx = talloc_stackframe();
+       struct registry_key *key = NULL;
+
+       if (libnet_smbconf_share_exists(servicename)) {
+               werr = WERR_ALREADY_EXISTS;
+               goto done;
+       }
+
+       werr = libnet_smbconf_reg_createkey_internal(mem_ctx, servicename, &key);
+
+done:
+       TALLOC_FREE(mem_ctx);
+       return werr;
+}
+
 /**
  * get a definition of a share (service) from configuration.
  */
@@ -668,12 +689,12 @@ WERROR libnet_smbconf_setparm(const char *service,
        TALLOC_CTX *mem_ctx = talloc_stackframe();
 
        if (!libnet_smbconf_share_exists(service)) {
-               werr = libnet_smbconf_reg_createkey_internal(mem_ctx, service,
-                                                            &key);
-       } else {
-               werr = libnet_smbconf_reg_open_service_key(mem_ctx, service,
-                                                          REG_KEY_WRITE, &key);
+               werr = WERR_NO_SUCH_SERVICE;
+               goto done;
        }
+
+       werr = libnet_smbconf_reg_open_service_key(mem_ctx, service,
+                                                  REG_KEY_WRITE, &key);
        if (!W_ERROR_IS_OK(werr)) {
                goto done;
        }
index 07eb3b890ffec3af272320961952b6f2704005d8..feee16f5640f6aa80a014d566019bedb088e8833 100644 (file)
@@ -628,7 +628,18 @@ static int net_conf_addshare(int argc, const char **argv)
        }
 
        /*
-        * create the share by adding the parameters
+        * create the share
+        */
+
+       werr = libnet_smbconf_create_share(sharename);
+       if (!W_ERROR_IS_OK(werr)) {
+               d_fprintf(stderr, "Error creating share %s: %s\n",
+                         sharename, dos_errstr(werr));
+               goto done;
+       }
+
+       /*
+        * fill the share with parameters
         */
 
        werr = libnet_smbconf_setparm(sharename, "path", path);