[SCM] Samba Shared Repository - branch master updated

Jeremy Allison jra at samba.org
Fri Mar 1 01:31:03 UTC 2019


The branch, master has been updated
       via  99ef0ba048c libsmb: Make cli_smb2_rmdir asynchronous
       via  02f40802846 libsmb: add in/out cblobs to cli_smb2_create_fnum
       via  56e08d39965 libsmb: Avoid a separate "cblobs" var sending smb2 create
       via  a787c319f1e libsmb: Reformat the cli_smb2_create_fnum_send args
       via  f3392f0fa32 lib: modify string conversion wrapper to handle signed input
       via  fa2c919e1d0 ctdb-utils: Use wrapper for string to integer conversion
       via  2b2ff12e706 source4: Use wrapper for string to integer conversion
       via  58e2c153442 libcli: Use wrapper for string to integer conversion
       via  e7b7c634e8b common-lib: Use wrapper for string to integer conversion
       via  ebeae5dcbad wbinfo: Use wrapper for string to integer conversion
       via  ea7231dcc0b libwbclient: Use wrapper for string to integer conversion
       via  81cc7a35189 ctdb-tools: Use wrapper for string to integer conversion
       via  55acae774a9 ctdb-server: Use wrapper for string to integer conversion
       via  e96bccc879a ctdb-protocol: Use wrapper for string to integer conversion
       via  414bc3748b6 rpcclient: Use wrapper for string to integer conversion
       via  c067429c32b modules: Use wrapper for string to integer conversion
       via  fdd52979263 winbindd: Use wrapper for string to integer conversion
       via  c957f6cc069 passdb: Use wrapper for string to integer conversion
       via  e82228f2e09 utils: Use wrapper for string to integer conversion
       via  fef2a7ca0a8 groupdb: Use wrapper for string to integer conversion
       via  c9f4b92a613 lib: Use wrapper for string to integer conversion
       via  cef18c2dfd6 util: Add two wrapper for string to int conversion
      from  5cf0764bc4b libcli/security: add "Owner Rights" calculation to access_check_max_allowed()

https://git.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 99ef0ba048ce3b1a1052418708f98ddd47e76162
Author: Volker Lendecke <vl at samba.org>
Date:   Thu Feb 28 13:47:22 2019 +0100

    libsmb: Make cli_smb2_rmdir asynchronous
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>
    
    Autobuild-User(master): Jeremy Allison <jra at samba.org>
    Autobuild-Date(master): Fri Mar  1 01:30:35 UTC 2019 on sn-devel-144

commit 02f4080284610bdfd9771964099af18e7f9a67b8
Author: Volker Lendecke <vl at samba.org>
Date:   Wed Feb 20 17:23:46 2019 +0100

    libsmb: add in/out cblobs to cli_smb2_create_fnum
    
    This is driven by the imminent smb2 unix extensions, we'll want to make use of
    it from source3/libsmb.
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 56e08d399651b1f7d79f60c0b162d4d19d47ae7a
Author: Volker Lendecke <vl at samba.org>
Date:   Wed Feb 20 17:06:32 2019 +0100

    libsmb: Avoid a separate "cblobs" var sending smb2 create
    
    Less lines of code, and we will add custom cblobs soon. This change
    makes that logic easier.
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit a787c319f1eab417233b65c68cbc31d7ccce6378
Author: Volker Lendecke <vl at samba.org>
Date:   Fri Feb 15 18:24:31 2019 +0100

    libsmb: Reformat the cli_smb2_create_fnum_send args
    
    We'll add parameters in the next commit, make that commit a bit more obvious
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit f3392f0fa321d88ac71d9dc0410167523d9696a5
Author: Swen Schillig <swen at linux.ibm.com>
Date:   Tue Feb 5 08:39:14 2019 +0100

    lib: modify string conversion wrapper to handle signed input
    
    The standard string conversion routines convert a "signed string"
    into the positive representation of the resulting value.
    This is not wanted and therefore now detected and flag'ed as an error.
    
    Signed-off-by: Swen Schillig <swen at linux.ibm.com>
    Reviewed-by: Ralph Böhme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit fa2c919e1d05a2033ce1cb41a86f8bdd789d68b8
Author: Swen Schillig <swen at linux.ibm.com>
Date:   Wed Jan 30 10:28:52 2019 +0100

    ctdb-utils: Use wrapper for string to integer conversion
    
    In order to detect an value overflow error during
    the string to integer conversion with strtoul/strtoull,
    the errno variable must be set to zero before the execution and
    checked after the conversion is performed. This is achieved by
    using the wrapper function strtoul_err and strtoull_err.
    
    Signed-off-by: Swen Schillig <swen at linux.ibm.com>
    Reviewed-by: Ralph Böhme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 2b2ff12e706d999ff2d84affa79c64b33cc289a7
Author: Swen Schillig <swen at linux.ibm.com>
Date:   Wed Jan 30 09:31:34 2019 +0100

    source4: Use wrapper for string to integer conversion
    
    In order to detect an value overflow error during
    the string to integer conversion with strtoul/strtoull,
    the errno variable must be set to zero before the execution and
    checked after the conversion is performed. This is achieved by
    using the wrapper function strtoul_err and strtoull_err.
    
    Signed-off-by: Swen Schillig <swen at linux.ibm.com>
    Reviewed-by: Ralph Böhme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 58e2c1534429c05adb0cf5957d281dca0286fc13
Author: Swen Schillig <swen at linux.ibm.com>
Date:   Wed Jan 30 08:39:15 2019 +0100

    libcli: Use wrapper for string to integer conversion
    
    In order to detect an value overflow error during
    the string to integer conversion with strtoul/strtoull,
    the errno variable must be set to zero before the execution and
    checked after the conversion is performed. This is achieved by
    using the wrapper function strtoul_err and strtoull_err.
    
    Signed-off-by: Swen Schillig <swen at linux.ibm.com>
    Reviewed-by: Ralph Böhme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit e7b7c634e8bb5e9df5c523377458d880a6368ddc
Author: Swen Schillig <swen at linux.ibm.com>
Date:   Wed Jan 30 08:33:02 2019 +0100

    common-lib: Use wrapper for string to integer conversion
    
    In order to detect an value overflow error during
    the string to integer conversion with strtoul/strtoull,
    the errno variable must be set to zero before the execution and
    checked after the conversion is performed. This is achieved by
    using the wrapper function strtoul_err and strtoull_err.
    
    Signed-off-by: Swen Schillig <swen at linux.ibm.com>
    Reviewed-by: Ralph Böhme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit ebeae5dcbad898e8ee0d64c4ed44751b753f27de
Author: Swen Schillig <swen at linux.ibm.com>
Date:   Tue Jan 29 14:36:44 2019 +0100

    wbinfo: Use wrapper for string to integer conversion
    
    In order to detect an value overflow error during
    the string to integer conversion with strtoul/strtoull,
    the errno variable must be set to zero before the execution and
    checked after the conversion is performed. This is achieved by
    using the wrapper function strtoul_err and strtoull_err.
    
    Signed-off-by: Swen Schillig <swen at linux.ibm.com>
    Reviewed-by: Ralph Böhme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit ea7231dcc0b50c535f913f0542d600d0b2119a21
Author: Swen Schillig <swen at linux.ibm.com>
Date:   Tue Jan 29 14:21:25 2019 +0100

    libwbclient: Use wrapper for string to integer conversion
    
    In order to detect an value overflow error during
    the string to integer conversion with strtoul/strtoull,
    the errno variable must be set to zero before the execution and
    checked after the conversion is performed. This is achieved by
    using the wrapper function strtoul_err and strtoull_err.
    
    Signed-off-by: Swen Schillig <swen at linux.ibm.com>
    Reviewed-by: Ralph Böhme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 81cc7a35189fffc0538997e739f4556142ae5458
Author: Swen Schillig <swen at linux.ibm.com>
Date:   Tue Jan 29 13:27:28 2019 +0100

    ctdb-tools: Use wrapper for string to integer conversion
    
    In order to detect an value overflow error during
    the string to integer conversion with strtoul/strtoull,
    the errno variable must be set to zero before the execution and
    checked after the conversion is performed. This is achieved by
    using the wrapper function strtoul_err and strtoull_err.
    
    Signed-off-by: Swen Schillig <swen at linux.ibm.com>
    Reviewed-by: Ralph Böhme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 55acae774a9994715043dfe6e7668c19f514c545
Author: Swen Schillig <swen at linux.ibm.com>
Date:   Tue Jan 29 13:07:56 2019 +0100

    ctdb-server: Use wrapper for string to integer conversion
    
    In order to detect an value overflow error during
    the string to integer conversion with strtoul/strtoull,
    the errno variable must be set to zero before the execution and
    checked after the conversion is performed. This is achieved by
    using the wrapper function strtoul_err and strtoull_err.
    
    Signed-off-by: Swen Schillig <swen at linux.ibm.com>
    Reviewed-by: Ralph Böhme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit e96bccc879a675856b3a875db2d718445410caea
Author: Swen Schillig <swen at linux.ibm.com>
Date:   Tue Jan 29 13:03:20 2019 +0100

    ctdb-protocol: Use wrapper for string to integer conversion
    
    In order to detect an value overflow error during
    the string to integer conversion with strtoul/strtoull,
    the errno variable must be set to zero before the execution and
    checked after the conversion is performed. This is achieved by
    using the wrapper function strtoul_err and strtoull_err.
    
    Signed-off-by: Swen Schillig <swen at linux.ibm.com>
    Reviewed-by: Ralph Böhme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 414bc3748b6fbd54cbd50a0ff1f20cbe31b06ccc
Author: Swen Schillig <swen at linux.ibm.com>
Date:   Mon Jan 28 14:35:30 2019 +0100

    rpcclient: Use wrapper for string to integer conversion
    
    In order to detect an value overflow error during
    the string to integer conversion with strtoul/strtoull,
    the errno variable must be set to zero before the execution and
    checked after the conversion is performed. This is achieved by
    using the wrapper function strtoul_err and strtoull_err.
    
    Signed-off-by: Swen Schillig <swen at linux.ibm.com>
    Reviewed-by: Ralph Böhme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit c067429c32b7e8853274f8711bb5c5bd33b5e628
Author: Swen Schillig <swen at linux.ibm.com>
Date:   Mon Jan 28 14:30:15 2019 +0100

    modules: Use wrapper for string to integer conversion
    
    In order to detect an value overflow error during
    the string to integer conversion with strtoul/strtoull,
    the errno variable must be set to zero before the execution and
    checked after the conversion is performed. This is achieved by
    using the wrapper function strtoul_err and strtoull_err.
    
    Signed-off-by: Swen Schillig <swen at linux.ibm.com>
    Reviewed-by: Ralph Böhme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit fdd529792639a60683df927a8e02d47d2749fd10
Author: Swen Schillig <swen at linux.ibm.com>
Date:   Mon Jan 28 14:07:39 2019 +0100

    winbindd: Use wrapper for string to integer conversion
    
    In order to detect an value overflow error during
    the string to integer conversion with strtoul/strtoull,
    the errno variable must be set to zero before the execution and
    checked after the conversion is performed. This is achieved by
    using the wrapper function strtoul_err and strtoull_err.
    
    Signed-off-by: Swen Schillig <swen at linux.ibm.com>
    Reviewed-by: Ralph Böhme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit c957f6cc069aef32d88bd6a46584a262c65579db
Author: Swen Schillig <swen at linux.ibm.com>
Date:   Mon Jan 28 13:57:15 2019 +0100

    passdb: Use wrapper for string to integer conversion
    
    In order to detect an value overflow error during
    the string to integer conversion with strtoul/strtoull,
    the errno variable must be set to zero before the execution and
    checked after the conversion is performed. This is achieved by
    using the wrapper function strtoul_err and strtoull_err.
    
    Signed-off-by: Swen Schillig <swen at linux.ibm.com>
    Reviewed-by: Ralph Böhme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit e82228f2e09d66807d0bce150bb1db9731bbd4d4
Author: Swen Schillig <swen at linux.ibm.com>
Date:   Mon Jan 28 13:36:45 2019 +0100

    utils: Use wrapper for string to integer conversion
    
    In order to detect an value overflow error during
    the string to integer conversion with strtoul/strtoull,
    the errno variable must be set to zero before the execution and
    checked after the conversion is performed. This is achieved by
    using the wrapper function strtoul_err and strtoull_err.
    
    Signed-off-by: Swen Schillig <swen at linux.ibm.com>
    Reviewed-by: Ralph Böhme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit fef2a7ca0a87dc3de25480b8070f8090d5f1cb09
Author: Swen Schillig <swen at linux.ibm.com>
Date:   Mon Jan 28 13:12:09 2019 +0100

    groupdb: Use wrapper for string to integer conversion
    
    In order to detect an value overflow error during
    the string to integer conversion with strtoul/strtoull,
    the errno variable must be set to zero before the execution and
    checked after the conversion is performed. This is achieved by
    using the wrapper function strtoul_err and strtoull_err.
    
    Signed-off-by: Swen Schillig <swen at linux.ibm.com>
    Reviewed-by: Ralph Böhme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit c9f4b92a6131dedcaa38d6fe907d17a30a595f06
Author: Swen Schillig <swen at linux.ibm.com>
Date:   Mon Jan 28 12:54:07 2019 +0100

    lib: Use wrapper for string to integer conversion
    
    In order to detect an value overflow error during
    the string to integer conversion with strtoul/strtoull,
    the errno variable must be set to zero before the execution and
    checked after the conversion is performed. This is achieved by
    using the wrapper function strtoul_err and strtoull_err.
    
    Signed-off-by: Swen Schillig <swen at linux.ibm.com>
    Reviewed-by: Ralph Böhme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit cef18c2dfd60be372eee10cbcefd5849ae979d31
Author: Swen Schillig <swen at linux.ibm.com>
Date:   Mon Jan 28 09:42:13 2019 +0100

    util: Add two wrapper for string to int conversion
    
    Adding wrapper strtoull_err and strtoul_err to handle
    error conditions of the conversion process.
    
    Signed-off-by: Swen Schillig <swen at linux.ibm.com>
    Reviewed-by: Ralph Böhme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

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

Summary of changes:
 ctdb/protocol/protocol_util.c                      |  11 +-
 ctdb/server/ctdb_recovery_helper.c                 |   9 +-
 ctdb/tools/ctdb.c                                  |  66 +++-
 ctdb/utils/ceph/ctdb_mutex_ceph_rados_helper.c     |   8 +-
 examples/fuse/clifuse.c                            |  33 +-
 lib/ldb-samba/ldb_matching_rules.c                 |  23 +-
 lib/ldb-samba/ldif_handlers.c                      |   7 +-
 lib/param/loadparm.c                               |  24 +-
 lib/util/access.c                                  |   7 +-
 lib/util/asn1.c                                    |  17 +-
 lib/util/util.c                                    |  94 +++++
 lib/util/util.h                                    |   7 +
 lib/util/util_str.c                                |  10 +-
 libcli/security/dom_sid.c                          |  14 +-
 nsswitch/libwbclient/wbc_idmap.c                   |  10 +-
 nsswitch/libwbclient/wbc_sid.c                     |  36 +-
 nsswitch/libwbclient/wscript                       |   2 +-
 nsswitch/wbinfo.c                                  |  14 +-
 source3/groupdb/mapping.c                          |  11 +-
 source3/groupdb/mapping_tdb.c                      |  12 +-
 source3/lib/interface.c                            |  18 +-
 source3/lib/messages_dgm.c                         |  15 +-
 source3/lib/namemap_cache.c                        |  17 +-
 source3/lib/sysquotas.c                            |   7 +-
 source3/lib/tldap_util.c                           |  11 +-
 source3/lib/util_str.c                             |   5 +-
 source3/libsmb/cli_smb2_fnum.c                     | 388 ++++++++++++++++-----
 source3/libsmb/cli_smb2_fnum.h                     |  63 ++--
 source3/libsmb/clifile.c                           |  23 +-
 source3/modules/vfs_preopen.c                      |   6 +-
 source3/modules/vfs_snapper.c                      |   5 +-
 source3/modules/vfs_unityed_media.c                |   6 +-
 source3/passdb/account_pol.c                       |   8 +-
 source3/passdb/pdb_ldap.c                          |  73 +++-
 source3/passdb/pdb_tdb.c                           |   6 +-
 source3/rpcclient/cmd_samr.c                       |   7 +-
 source3/rpcclient/cmd_spoolss.c                    |   8 +-
 source3/utils/net_idmap.c                          |   9 +-
 source3/utils/net_registry.c                       |  16 +-
 source3/utils/net_rpc_registry.c                   |   9 +-
 source3/utils/net_sam.c                            |   5 +-
 source3/utils/pdbedit.c                            |  11 +-
 source3/utils/regedit_dialog.c                     |   5 +-
 source3/winbindd/idmap_ldap.c                      |  37 +-
 source3/winbindd/winbindd_lookuprids.c             |   6 +-
 source3/winbindd/winbindd_util.c                   |  24 +-
 source3/wscript_build                              |   2 +
 source4/dns_server/dlz_bind9.c                     |   6 +-
 source4/dsdb/common/dsdb_dn.c                      |   5 +-
 source4/dsdb/common/util.c                         |  17 +-
 source4/dsdb/samdb/ldb_modules/dirsync.c           |  15 +-
 .../dsdb/samdb/ldb_modules/partition_metadata.c    |   7 +-
 source4/dsdb/samdb/ldb_modules/samldb.c            |   5 +-
 source4/dsdb/samdb/ldb_modules/schema_load.c       |   8 +-
 source4/dsdb/schema/schema_prefixmap.c             |   6 +-
 source4/lib/registry/ldb.c                         |  20 +-
 source4/lib/socket/interface.c                     |   6 +-
 source4/libcli/resolve/dns_ex.c                    |   5 +-
 source4/nbt_server/wins/winsdb.c                   |  12 +-
 source4/rpc_server/lsa/dcesrv_lsa.c                |   9 +-
 source4/torture/nbench/nbench.c                    |   8 +-
 source4/torture/smb2/sharemode.c                   |   7 +-
 source4/web_server/web_server.c                    |   7 +-
 63 files changed, 1041 insertions(+), 307 deletions(-)


Changeset truncated at 500 lines:

diff --git a/ctdb/protocol/protocol_util.c b/ctdb/protocol/protocol_util.c
index 75427e44f50..99dbe82404d 100644
--- a/ctdb/protocol/protocol_util.c
+++ b/ctdb/protocol/protocol_util.c
@@ -26,6 +26,7 @@
 
 #include "protocol.h"
 #include "protocol_util.h"
+#include "lib/util/util.h"
 
 static struct {
 	enum ctdb_runstate runstate;
@@ -286,8 +287,8 @@ int ctdb_sock_addr_from_string(const char *str,
 		return EINVAL;
 	}
 
-	port = strtoul(p+1, &endp, 10);
-	if (endp == p+1 || *endp != '\0') {
+	port = strtoul_err(p+1, &endp, 10, &ret);
+	if (endp == p+1 || *endp != '\0' || ret != 0) {
 		/* Empty string or trailing garbage */
 		return EINVAL;
 	}
@@ -309,7 +310,7 @@ int ctdb_sock_addr_mask_from_string(const char *str,
 	unsigned int m;
 	char *endp = NULL;
 	ssize_t len;
-	bool ret;
+	int ret = 0;
 
 	if (addr == NULL || mask == NULL) {
 		return EINVAL;
@@ -325,8 +326,8 @@ int ctdb_sock_addr_mask_from_string(const char *str,
 		return EINVAL;
 	}
 
-	m = strtoul(p+1, &endp, 10);
-	if (endp == p+1 || *endp != '\0') {
+	m = strtoul_err(p+1, &endp, 10, &ret);
+	if (endp == p+1 || *endp != '\0' || ret != 0) {
 		/* Empty string or trailing garbage */
 		return EINVAL;
 	}
diff --git a/ctdb/server/ctdb_recovery_helper.c b/ctdb/server/ctdb_recovery_helper.c
index 7fdcc2e5a29..57e12b47037 100644
--- a/ctdb/server/ctdb_recovery_helper.c
+++ b/ctdb/server/ctdb_recovery_helper.c
@@ -30,6 +30,7 @@
 #include "lib/util/sys_rw.h"
 #include "lib/util/time.h"
 #include "lib/util/tevent_unix.h"
+#include "lib/util/util.h"
 
 #include "protocol/protocol.h"
 #include "protocol/protocol_api.h"
@@ -2739,7 +2740,7 @@ int main(int argc, char *argv[])
 	TALLOC_CTX *mem_ctx;
 	struct tevent_context *ev;
 	struct ctdb_client_context *client;
-	int ret;
+	int ret = 0;
 	struct tevent_req *req;
 	uint32_t generation;
 
@@ -2750,7 +2751,11 @@ int main(int argc, char *argv[])
 
 	write_fd = atoi(argv[1]);
 	sockpath = argv[2];
-	generation = (uint32_t)strtoul(argv[3], NULL, 0);
+	generation = (uint32_t)strtoul_err(argv[3], NULL, 0, &ret);
+	if (ret != 0) {
+		fprintf(stderr, "recovery: unable to initialize generation\n");
+		goto failed;
+	}
 
 	mem_ctx = talloc_new(NULL);
 	if (mem_ctx == NULL) {
diff --git a/ctdb/tools/ctdb.c b/ctdb/tools/ctdb.c
index bef9c5f97fb..8140d7337c5 100644
--- a/ctdb/tools/ctdb.c
+++ b/ctdb/tools/ctdb.c
@@ -315,6 +315,7 @@ static bool parse_nodestring(TALLOC_CTX *mem_ctx, struct ctdb_context *ctdb,
 		goto done;
 	} else {
 		char *ns, *tok;
+		int error = 0;
 
 		ns = talloc_strdup(mem_ctx, nodestring);
 		if (ns == NULL) {
@@ -326,8 +327,8 @@ static bool parse_nodestring(TALLOC_CTX *mem_ctx, struct ctdb_context *ctdb,
 			uint32_t pnn;
 			char *endptr;
 
-			pnn = (uint32_t)strtoul(tok, &endptr, 0);
-			if (pnn == 0 && tok == endptr) {
+			pnn = (uint32_t)strtoul_err(tok, &endptr, 0, &error);
+			if (error != 0 || (pnn == 0 && tok == endptr)) {
 				fprintf(stderr, "Invalid node %s\n", tok);
 					return false;
 			}
@@ -535,7 +536,8 @@ static bool db_exists(TALLOC_CTX *mem_ctx, struct ctdb_context *ctdb,
 	struct ctdb_dbid *db = NULL;
 	uint32_t id = 0;
 	const char *name = NULL;
-	int ret, i;
+	int i;
+	int ret = 0;
 
 	ret = ctdb_ctrl_get_dbmap(mem_ctx, ctdb->ev, ctdb->client,
 				  ctdb->pnn, TIMEOUT(), &dbmap);
@@ -544,7 +546,10 @@ static bool db_exists(TALLOC_CTX *mem_ctx, struct ctdb_context *ctdb,
 	}
 
 	if (strncmp(db_arg, "0x", 2) == 0) {
-		id = strtoul(db_arg, NULL, 0);
+		id = strtoul_err(db_arg, NULL, 0, &ret);
+		if (ret != 0) {
+			return false;
+		}
 		for (i=0; i<dbmap->num; i++) {
 			if (id == dbmap->dbs[i].db_id) {
 				db = &dbmap->dbs[i];
@@ -1059,8 +1064,9 @@ static int control_setvar(TALLOC_CTX *mem_ctx, struct ctdb_context *ctdb,
 {
 	struct ctdb_var_list *tun_var_list;
 	struct ctdb_tunable tunable;
-	int ret, i;
 	bool found;
+	int i;
+	int ret = 0;
 
 	if (argc != 2) {
 		usage("setvar");
@@ -1089,7 +1095,10 @@ static int control_setvar(TALLOC_CTX *mem_ctx, struct ctdb_context *ctdb,
 	}
 
 	tunable.name = argv[0];
-	tunable.value = strtoul(argv[1], NULL, 0);
+	tunable.value = strtoul_err(argv[1], NULL, 0, &ret);
+	if (ret != 0) {
+		return ret;
+	}
 
 	ret = ctdb_ctrl_set_tunable(mem_ctx, ctdb->ev, ctdb->client,
 				    ctdb->cmd_pnn, TIMEOUT(), &tunable);
@@ -1867,7 +1876,8 @@ static int control_process_exists(TALLOC_CTX *mem_ctx,
 {
 	pid_t pid;
 	uint64_t srvid = 0;
-	int ret, status;
+	int status;
+	int ret = 0;
 
 	if (argc != 1 && argc != 2) {
 		usage("process-exists");
@@ -1875,7 +1885,10 @@ static int control_process_exists(TALLOC_CTX *mem_ctx,
 
 	pid = atoi(argv[0]);
 	if (argc == 2) {
-		srvid = strtoull(argv[1], NULL, 0);
+		srvid = strtoull_err(argv[1], NULL, 0, &ret);
+		if (ret != 0) {
+			return ret;
+		}
 	}
 
 	if (srvid == 0) {
@@ -2766,7 +2779,7 @@ static int control_ban(TALLOC_CTX *mem_ctx, struct ctdb_context *ctdb,
 		       int argc, const char **argv)
 {
 	struct ctdb_ban_state ban_state;
-	int ret;
+	int ret = 0;
 
 	if (argc != 1) {
 		usage("ban");
@@ -2779,7 +2792,10 @@ static int control_ban(TALLOC_CTX *mem_ctx, struct ctdb_context *ctdb,
 	}
 
 	ban_state.pnn = ctdb->cmd_pnn;
-	ban_state.time = strtoul(argv[0], NULL, 0);
+	ban_state.time = strtoul_err(argv[0], NULL, 0, &ret);
+	if (ret != 0) {
+		return ret;
+	}
 
 	if (ban_state.time == 0) {
 		fprintf(stderr, "Ban time cannot be zero\n");
@@ -3092,14 +3108,18 @@ static int control_gettickles(TALLOC_CTX *mem_ctx, struct ctdb_context *ctdb,
 	ctdb_sock_addr addr;
 	struct ctdb_tickle_list *tickles;
 	unsigned port = 0;
-	int ret, i;
+	int i;
+	int ret = 0;
 
 	if (argc < 1 || argc > 2) {
 		usage("gettickles");
 	}
 
 	if (argc == 2) {
-		port = strtoul(argv[1], NULL, 10);
+		port = strtoul_err(argv[1], NULL, 10, &ret);
+		if (ret != 0) {
+			return ret;
+		}
 	}
 
 	ret = ctdb_sock_addr_from_string(argv[0], &addr, false);
@@ -3792,7 +3812,8 @@ static int control_moveip(TALLOC_CTX *mem_ctx, struct ctdb_context *ctdb,
 {
 	ctdb_sock_addr addr;
 	uint32_t pnn;
-	int ret, retries = 0;
+	int retries = 0;
+	int ret = 0;
 
 	if (argc != 2) {
 		usage("moveip");
@@ -3804,8 +3825,8 @@ static int control_moveip(TALLOC_CTX *mem_ctx, struct ctdb_context *ctdb,
 		return 1;
 	}
 
-	pnn = strtoul(argv[1], NULL, 10);
-	if (pnn == CTDB_UNKNOWN_PNN) {
+	pnn = strtoul_err(argv[1], NULL, 10, &ret);
+	if (pnn == CTDB_UNKNOWN_PNN || ret != 0) {
 		fprintf(stderr, "Invalid PNN %s\n", argv[1]);
 		return 1;
 	}
@@ -5228,7 +5249,7 @@ static int control_tstore(TALLOC_CTX *mem_ctx, struct ctdb_context *ctdb,
 	struct ctdb_ltdb_header header;
 	uint8_t header_buf[sizeof(struct ctdb_ltdb_header)];
 	size_t np;
-	int ret;
+	int ret = 0;
 
 	if (argc < 3 || argc > 5) {
 		usage("tstore");
@@ -5257,7 +5278,10 @@ static int control_tstore(TALLOC_CTX *mem_ctx, struct ctdb_context *ctdb,
 	ZERO_STRUCT(header);
 
 	if (argc > 3) {
-		header.rsn = (uint64_t)strtoull(argv[3], NULL, 0);
+		header.rsn = (uint64_t)strtoull_err(argv[3], NULL, 0, &ret);
+		if (ret != 0) {
+			return ret;
+		}
 	}
 	if (argc > 4) {
 		header.dmaster = (uint32_t)atol(argv[4]);
@@ -6245,7 +6269,7 @@ int main(int argc, const char *argv[])
 	const struct ctdb_cmd *cmd;
 	int loglevel;
 	bool ok;
-	int ret;
+	int ret = 0;
 
 	setlinebuf(stdout);
 
@@ -6269,7 +6293,11 @@ int main(int argc, const char *argv[])
 
 		ctdb_timeout = getenv("CTDB_TIMEOUT");
 		if (ctdb_timeout != NULL) {
-			options.maxruntime = strtoul(ctdb_timeout, NULL, 0);
+			options.maxruntime = strtoul_err(ctdb_timeout, NULL, 0, &ret);
+			if (ret != 0) {
+				fprintf(stderr, "Invalid value CTDB_TIMEOUT\n");
+				exit(1);
+			}
 		} else {
 			options.maxruntime = 120;
 		}
diff --git a/ctdb/utils/ceph/ctdb_mutex_ceph_rados_helper.c b/ctdb/utils/ceph/ctdb_mutex_ceph_rados_helper.c
index 7ef76c26e02..a43855008c0 100644
--- a/ctdb/utils/ceph/ctdb_mutex_ceph_rados_helper.c
+++ b/ctdb/utils/ceph/ctdb_mutex_ceph_rados_helper.c
@@ -301,10 +301,14 @@ int main(int argc, char *argv[])
 	cmr_state->pool_name = argv[3];
 	cmr_state->object = argv[4];
 	if (argc == 6) {
+		int error = 0;
 		/* optional lock duration provided */
 		char *endptr = NULL;
-		cmr_state->lock_duration_s = strtoull(argv[5], &endptr, 0);
-		if ((endptr == argv[5]) || (*endptr != '\0')) {
+		cmr_state->lock_duration_s = strtoull_err(argv[5],
+							  &endptr,
+							  0,
+							  &error);
+		if ((endptr == argv[5]) || (*endptr != '\0') || (error != 0)) {
 			fprintf(stdout, CTDB_MUTEX_STATUS_ERROR);
 			ret = -EINVAL;
 			goto err_ctx_cleanup;
diff --git a/examples/fuse/clifuse.c b/examples/fuse/clifuse.c
index b724e642d4b..954c412f09c 100644
--- a/examples/fuse/clifuse.c
+++ b/examples/fuse/clifuse.c
@@ -150,11 +150,17 @@ static void cli_ll_create(fuse_req_t freq, fuse_ino_t parent, const char *name,
 	}
 
 	req = cli_smb2_create_fnum_send(
-		state, mstate->ev, mstate->cli, state->path,
-		0, SMB2_IMPERSONATION_IMPERSONATION,
-		FILE_GENERIC_READ|FILE_GENERIC_WRITE, FILE_ATTRIBUTE_NORMAL,
+		state,
+		mstate->ev,
+		mstate->cli, state->path,
+		0,
+		SMB2_IMPERSONATION_IMPERSONATION,
+		FILE_GENERIC_READ|FILE_GENERIC_WRITE,
+		FILE_ATTRIBUTE_NORMAL,
 		FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE,
-		FILE_CREATE, FILE_NON_DIRECTORY_FILE);
+		FILE_CREATE,
+		FILE_NON_DIRECTORY_FILE,
+		NULL);
 	if (req == NULL) {
 		TALLOC_FREE(state);
 		fuse_reply_err(freq, ENOMEM);
@@ -172,7 +178,7 @@ static void cli_ll_create_done(struct tevent_req *req)
 	uint16_t fnum;
 	NTSTATUS status;
 
-	status = cli_smb2_create_fnum_recv(req, &fnum, NULL);
+	status = cli_smb2_create_fnum_recv(req, &fnum, NULL, NULL, NULL);
 	TALLOC_FREE(req);
 	if (!NT_STATUS_IS_OK(status)) {
 		fuse_reply_err(state->freq, map_errno_from_nt_status(status));
@@ -836,11 +842,18 @@ static void cli_ll_open(fuse_req_t freq, fuse_ino_t ino,
 	}
 
 	req = cli_smb2_create_fnum_send(
-		state, mstate->ev, mstate->cli, istate->path,
-		0, SMB2_IMPERSONATION_IMPERSONATION,
-		acc, FILE_ATTRIBUTE_NORMAL,
+		state,
+		mstate->ev,
+		mstate->cli,
+		istate->path,
+		0,
+		SMB2_IMPERSONATION_IMPERSONATION,
+		acc,
+		FILE_ATTRIBUTE_NORMAL,
 		FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE,
-		FILE_OPEN, FILE_NON_DIRECTORY_FILE);
+		FILE_OPEN,
+		FILE_NON_DIRECTORY_FILE,
+		NULL);
 	if (req == NULL) {
 		TALLOC_FREE(state);
 		fuse_reply_err(freq, ENOMEM);
@@ -856,7 +869,7 @@ static void cli_ll_open_done(struct tevent_req *req)
 	uint16_t fnum;
 	NTSTATUS status;
 
-	status = cli_smb2_create_fnum_recv(req, &fnum, NULL);
+	status = cli_smb2_create_fnum_recv(req, &fnum, NULL, NULL, NULL);
 	TALLOC_FREE(req);
 	if (!NT_STATUS_IS_OK(status)) {
 		fuse_reply_err(state->freq, map_errno_from_nt_status(status));
diff --git a/lib/ldb-samba/ldb_matching_rules.c b/lib/ldb-samba/ldb_matching_rules.c
index 2aaaeb7450b..7387c12f10d 100644
--- a/lib/ldb-samba/ldb_matching_rules.c
+++ b/lib/ldb-samba/ldb_matching_rules.c
@@ -383,16 +383,22 @@ static int dsdb_match_for_dns_to_tombstone_time(struct ldb_context *ldb,
 		return LDB_ERR_INVALID_ATTRIBUTE_SYNTAX;
 	} else {
 		char *p = NULL;
+		int error = 0;
 		char s[value_to_match->length+1];
+
 		memcpy(s, value_to_match->data, value_to_match->length);
 		s[value_to_match->length] = 0;
 		if (s[0] == '\0' || s[0] == '-') {
 			DBG_ERR("Empty timestamp passed\n");
 			return LDB_ERR_INVALID_ATTRIBUTE_SYNTAX;
 		}
-		tombstone_time = strtoull(s, &p, 10);
-		if (p == NULL || p == s || *p != '\0' ||
-		    tombstone_time == ULLONG_MAX) {
+		tombstone_time = strtoull_err(s, &p, 10, &error);
+		if (p == NULL ||
+		    p == s ||
+		    *p != '\0' ||
+		    error != 0 ||
+		    tombstone_time == ULLONG_MAX)
+		{
 			DBG_ERR("Invalid timestamp string passed\n");
 			return LDB_ERR_INVALID_ATTRIBUTE_SYNTAX;
 		}
@@ -514,14 +520,21 @@ static int dsdb_match_for_expunge(struct ldb_context *ldb,
 		return LDB_ERR_INVALID_ATTRIBUTE_SYNTAX;
 	} else {
 		char *p = NULL;
+		int error = 0;
 		char s[value_to_match->length+1];
+
 		memcpy(s, value_to_match->data, value_to_match->length);
 		s[value_to_match->length] = 0;
 		if (s[0] == '\0' || s[0] == '-') {
 			return LDB_ERR_INVALID_ATTRIBUTE_SYNTAX;
 		}
-		tombstone_time = strtoull(s, &p, 10);
-		if (p == NULL || p == s || *p != '\0' || tombstone_time == ULLONG_MAX) {
+		tombstone_time = strtoull_err(s, &p, 10, &error);
+		if (p == NULL ||
+		    p == s ||
+		    *p != '\0' ||
+		    error != 0 ||
+		    tombstone_time == ULLONG_MAX)
+		{
 			return LDB_ERR_INVALID_ATTRIBUTE_SYNTAX;
 		}
 	}
diff --git a/lib/ldb-samba/ldif_handlers.c b/lib/ldb-samba/ldif_handlers.c
index ecc02e51c1d..d38cdd0c9a3 100644
--- a/lib/ldb-samba/ldif_handlers.c
+++ b/lib/ldb-samba/ldif_handlers.c
@@ -596,6 +596,8 @@ static int ldif_read_prefixMap(struct ldb_context *ldb, void *mem_ctx,
 
 	line = string;
 	while (line && line[0]) {
+		int error = 0;
+
 		p=strchr(line, ';');
 		if (p) {
 			p[0] = '\0';
@@ -619,9 +621,10 @@ static int ldif_read_prefixMap(struct ldb_context *ldb, void *mem_ctx,
 			return -1;
 		}
 
-		blob->ctr.dsdb.mappings[blob->ctr.dsdb.num_mappings].id_prefix = strtoul(line, &oid, 10);
+		blob->ctr.dsdb.mappings[blob->ctr.dsdb.num_mappings].id_prefix =
+			strtoul_err(line, &oid, 10, &error);
 
-		if (oid[0] != ':') {
+		if (oid[0] != ':' || error != 0) {
 			talloc_free(tmp_ctx);
 			return -1;
 		}
diff --git a/lib/param/loadparm.c b/lib/param/loadparm.c
index 84c83ae91ec..9c7bf892835 100644
--- a/lib/param/loadparm.c
+++ b/lib/param/loadparm.c
@@ -331,13 +331,21 @@ int lp_int(const char *s)
  */
 unsigned long lp_ulong(const char *s)
 {
+	int error = 0;
+	unsigned long int ret;
 
 	if (!s || !*s) {
-		DEBUG(0,("lp_ulong(%s): is called with NULL!\n",s));
+		DBG_DEBUG("lp_ulong(%s): is called with NULL!\n",s);
 		return -1;
 	}
 
-	return strtoul(s, NULL, 0);
+	ret = strtoul_err(s, NULL, 0, &error);
+	if (error != 0) {
+		DBG_DEBUG("lp_ulong(%s): conversion failed\n",s);
+		return -1;
+	}
+
+	return ret;
 }
 
 /**
@@ -345,13 +353,21 @@ unsigned long lp_ulong(const char *s)
  */
 unsigned long long lp_ulonglong(const char *s)
 {
+	int error = 0;
+	unsigned long long int ret;
 
 	if (!s || !*s) {
-		DEBUG(0, ("lp_ulonglong(%s): is called with NULL!\n", s));
+		DBG_DEBUG("lp_ulonglong(%s): is called with NULL!\n", s);
 		return -1;
 	}
 
-	return strtoull(s, NULL, 0);
+	ret = strtoull_err(s, NULL, 0, &error);
+	if (error != 0) {
+		DBG_DEBUG("lp_ulonglong(%s): conversion failed\n",s);
+		return -1;
+	}
+
+	return ret;
 }
 
 /**
diff --git a/lib/util/access.c b/lib/util/access.c
index 7da0573a74d..a05a47c15b2 100644
--- a/lib/util/access.c
+++ b/lib/util/access.c
@@ -71,8 +71,11 @@ static bool masked_match(const char *tok, const char *slash, const char *s)
 		}
         } else {


-- 
Samba Shared Repository



More information about the samba-cvs mailing list