[SCM] Samba Shared Repository - branch master updated

Stefan Metzmacher metze at samba.org
Wed Jan 13 07:55:42 MST 2010


The branch, master has been updated
       via  ca9bc96... s4:ldb_msg: first try to decode integers as signed and then fallback to unsigned
       via  5d08309... s4:dsdb/common: let samdb_msg_add_uint() call samdb_msg_add_int()
       via  2d7ad93... s4:dsdb/common: let samdb_msg_add_uint64() call samdb_msg_add_int64()
      from  8d4b913... s4:ldb: be more strict in parsing ldb time strings

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


- Log -----------------------------------------------------------------
commit ca9bc96b96425b7cb13797acf57704502bac1514
Author: Stefan Metzmacher <metze at samba.org>
Date:   Mon Jan 11 20:18:09 2010 +0100

    s4:ldb_msg: first try to decode integers as signed and then fallback to unsigned
    
    LDAP only knowns about signed integers, so let
    ldb_msg_find_attr_as_uint() and ldb_msg_find_attr_as_uint64() cope
    with it.
    
    metze

commit 5d08309204e475e85250a34ff7986c896e8c3c01
Author: Stefan Metzmacher <metze at samba.org>
Date:   Mon Jan 11 20:17:53 2010 +0100

    s4:dsdb/common: let samdb_msg_add_uint() call samdb_msg_add_int()
    
    This is important as LDAP servers always play with int32 values
    and we have to encode 0x80000000 as "-2147483648" instead of "2147483648".
    
    metze

commit 2d7ad938d0b9345af920d396d5098ee52e900f2d
Author: Stefan Metzmacher <metze at samba.org>
Date:   Mon Jan 11 20:00:43 2010 +0100

    s4:dsdb/common: let samdb_msg_add_uint64() call samdb_msg_add_int64()
    
    This is important as LDAP servers always play with int64 values
    and we have to encode 0x8000000000000000LL as "-9223372036854775808"
    instead of "9223372036854775808".
    
    metze

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

Summary of changes:
 source4/dsdb/common/util.c       |    6 ++----
 source4/lib/ldb/common/ldb_msg.c |   18 ++++++++++++++++++
 2 files changed, 20 insertions(+), 4 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source4/dsdb/common/util.c b/source4/dsdb/common/util.c
index 6147940..7d3f460 100644
--- a/source4/dsdb/common/util.c
+++ b/source4/dsdb/common/util.c
@@ -851,8 +851,7 @@ int samdb_msg_add_int(struct ldb_context *sam_ldb, TALLOC_CTX *mem_ctx, struct l
 int samdb_msg_add_uint(struct ldb_context *sam_ldb, TALLOC_CTX *mem_ctx, struct ldb_message *msg,
 		       const char *attr_name, uint_t v)
 {
-	const char *s = talloc_asprintf(mem_ctx, "%u", v);
-	return samdb_msg_add_string(sam_ldb, mem_ctx, msg, attr_name, s);
+	return samdb_msg_add_int(sam_ldb, mem_ctx, msg, attr_name, (int)v);
 }
 
 /*
@@ -871,8 +870,7 @@ int samdb_msg_add_int64(struct ldb_context *sam_ldb, TALLOC_CTX *mem_ctx, struct
 int samdb_msg_add_uint64(struct ldb_context *sam_ldb, TALLOC_CTX *mem_ctx, struct ldb_message *msg,
 			const char *attr_name, uint64_t v)
 {
-	const char *s = talloc_asprintf(mem_ctx, "%llu", (unsigned long long)v);
-	return samdb_msg_add_string(sam_ldb, mem_ctx, msg, attr_name, s);
+	return samdb_msg_add_int64(sam_ldb, mem_ctx, msg, attr_name, (int64_t)v);
 }
 
 /*
diff --git a/source4/lib/ldb/common/ldb_msg.c b/source4/lib/ldb/common/ldb_msg.c
index cb8d4a8..9f90f33 100644
--- a/source4/lib/ldb/common/ldb_msg.c
+++ b/source4/lib/ldb/common/ldb_msg.c
@@ -353,10 +353,19 @@ unsigned int ldb_msg_find_attr_as_uint(const struct ldb_message *msg,
 				       const char *attr_name,
 				       unsigned int default_value)
 {
+	unsigned int ret;
 	const struct ldb_val *v = ldb_msg_find_ldb_val(msg, attr_name);
 	if (!v || !v->data) {
 		return default_value;
 	}
+
+	/* in LDAP there're only int32_t values */
+	errno = 0;
+	ret = strtol((const char *)v->data, NULL, 0);
+	if (errno == 0) {
+		return ret;
+	}
+
 	return strtoul((const char *)v->data, NULL, 0);
 }
 
@@ -375,10 +384,19 @@ uint64_t ldb_msg_find_attr_as_uint64(const struct ldb_message *msg,
 				     const char *attr_name,
 				     uint64_t default_value)
 {
+	uint64_t ret;
 	const struct ldb_val *v = ldb_msg_find_ldb_val(msg, attr_name);
 	if (!v || !v->data) {
 		return default_value;
 	}
+
+	/* in LDAP there're only int64_t values */
+	errno = 0;
+	ret = strtoll((const char *)v->data, NULL, 0);
+	if (errno == 0) {
+		return ret;
+	}
+
 	return strtoull((const char *)v->data, NULL, 0);
 }
 


-- 
Samba Shared Repository


More information about the samba-cvs mailing list