The branch, master has been updated
       via  dc2f910 s4:dsdb/tests: add test_timevalues1() to verify timestamp 
values
       via  c7af8ae ldb: version 1.1.20
       via  d1b5155 lib/ldb: fix logic in ldb_val_to_time()
      from  6a56bdf Update the tevent_data.dox tutrial stuff to fix some 
errors, including white space problems.

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


- Log -----------------------------------------------------------------
commit dc2f91020e3b52942f8aab60fd1db70d2afadd51
Author: Stefan Metzmacher <me...@samba.org>
Date:   Fri Jan 9 08:56:59 2015 +0100

    s4:dsdb/tests: add test_timevalues1() to verify timestamp values
    
    Bug: https://bugzilla.samba.org/show_bug.cgi?id=9810
    
    Signed-off-by: Stefan Metzmacher <me...@samba.org>
    Reviewed-by: Andreas Schneider <a...@samba.org>
    Reviewed-by: Günther Deschner <g...@samba.org>
    
    Autobuild-User(master): Stefan Metzmacher <me...@samba.org>
    Autobuild-Date(master): Sat Jan 24 20:17:20 CET 2015 on sn-devel-104

commit c7af8ae9d2aa19db2533e69b8a4d7c1b6f8e2d9f
Author: Stefan Metzmacher <me...@samba.org>
Date:   Mon Jan 19 17:17:13 2015 +0100

    ldb: version 1.1.20
    
    - Bug 9810 - validate_ldb of String(Generalized-Time) does not accept 
millisecond format ".000Z"
    
    Signed-off-by: Stefan Metzmacher <me...@samba.org>
    Reviewed-by: Andreas Schneider <a...@samba.org>
    Reviewed-by: Günther Deschner <g...@samba.org>

commit d1b515535da46591d3a646a848c7427b6ff951a7
Author: Stefan Metzmacher <me...@samba.org>
Date:   Mon Jan 19 15:47:58 2015 +0100

    lib/ldb: fix logic in ldb_val_to_time()
    
    040408072012Z should represent 20040408072012.0Z
    as well as 20040408072012.000Z or
    20040408072012.RandomIgnoredCharaters...Z
    
    Bug: https://bugzilla.samba.org/show_bug.cgi?id=9810
    
    Signed-off-by: Stefan Metzmacher <me...@samba.org>
    Reviewed-by: Andreas Schneider <a...@samba.org>
    Reviewed-by: Günther Deschner <g...@samba.org>

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

Summary of changes:
 lib/ldb/ABI/{ldb-1.1.19.sigs => ldb-1.1.20.sigs}   |  0
 ...ldb-util-1.1.10.sigs => pyldb-util-1.1.20.sigs} |  0
 lib/ldb/common/ldb_msg.c                           | 38 ++++++++++++++++----
 lib/ldb/wscript                                    |  2 +-
 source4/dsdb/tests/python/ldap.py                  | 40 ++++++++++++++++++++++
 5 files changed, 73 insertions(+), 7 deletions(-)
 copy lib/ldb/ABI/{ldb-1.1.19.sigs => ldb-1.1.20.sigs} (100%)
 copy lib/ldb/ABI/{pyldb-util-1.1.10.sigs => pyldb-util-1.1.20.sigs} (100%)


Changeset truncated at 500 lines:

diff --git a/lib/ldb/ABI/ldb-1.1.19.sigs b/lib/ldb/ABI/ldb-1.1.20.sigs
similarity index 100%
copy from lib/ldb/ABI/ldb-1.1.19.sigs
copy to lib/ldb/ABI/ldb-1.1.20.sigs
diff --git a/lib/ldb/ABI/pyldb-util-1.1.10.sigs 
b/lib/ldb/ABI/pyldb-util-1.1.20.sigs
similarity index 100%
copy from lib/ldb/ABI/pyldb-util-1.1.10.sigs
copy to lib/ldb/ABI/pyldb-util-1.1.20.sigs
diff --git a/lib/ldb/common/ldb_msg.c b/lib/ldb/common/ldb_msg.c
index 809e3af..3f65351 100644
--- a/lib/ldb/common/ldb_msg.c
+++ b/lib/ldb/common/ldb_msg.c
@@ -1090,28 +1090,54 @@ time_t ldb_string_to_time(const char *s)
 */
 int ldb_val_to_time(const struct ldb_val *v, time_t *t)
 {
-       struct tm tm;
+       char val[15] = {};
+       struct tm tm = {};
 
-       if (v == NULL || !v->data || (v->length != 17 && v->length != 13)) {
+       if (v == NULL) {
                return LDB_ERR_INVALID_ATTRIBUTE_SYNTAX;
        }
 
-       memset(&tm, 0, sizeof(tm));
+       if (v->data == NULL) {
+               return LDB_ERR_INVALID_ATTRIBUTE_SYNTAX;
+       }
+
+       if (v->length < 16 && v->length != 13) {
+               return LDB_ERR_INVALID_ATTRIBUTE_SYNTAX;
+       }
+
+       if (v->data[v->length - 1] != 'Z') {
+               return LDB_ERR_INVALID_ATTRIBUTE_SYNTAX;
+       }
 
        if (v->length == 13) {
-               if (sscanf((char *)v->data, "%02u%02u%02u%02u%02u%02uZ",
+               memcpy(val, v->data, 12);
+
+               if (sscanf(val, "%02u%02u%02u%02u%02u%02u",
                        &tm.tm_year, &tm.tm_mon, &tm.tm_mday,
                        &tm.tm_hour, &tm.tm_min, &tm.tm_sec) != 6) {
                        return LDB_ERR_INVALID_ATTRIBUTE_SYNTAX;
                }
+               if (tm.tm_year < 50) {
+                       tm.tm_year += 100;
+               }
        } else {
-               if (sscanf((char *)v->data, "%04u%02u%02u%02u%02u%02u.0Z",
+
+               /*
+                * anything between '.' and 'Z' is silently ignored.
+                */
+               if (v->data[14] != '.') {
+                       return LDB_ERR_INVALID_ATTRIBUTE_SYNTAX;
+               }
+
+               memcpy(val, v->data, 14);
+
+               if (sscanf(val, "%04u%02u%02u%02u%02u%02u",
                        &tm.tm_year, &tm.tm_mon, &tm.tm_mday,
                        &tm.tm_hour, &tm.tm_min, &tm.tm_sec) != 6) {
                        return LDB_ERR_INVALID_ATTRIBUTE_SYNTAX;
                }
+               tm.tm_year -= 1900;
        }
-       tm.tm_year -= 1900;
        tm.tm_mon -= 1;
 
        *t = timegm(&tm);
diff --git a/lib/ldb/wscript b/lib/ldb/wscript
index 4d44a0a..6391e74 100755
--- a/lib/ldb/wscript
+++ b/lib/ldb/wscript
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 
 APPNAME = 'ldb'
-VERSION = '1.1.19'
+VERSION = '1.1.20'
 
 blddir = 'bin'
 
diff --git a/source4/dsdb/tests/python/ldap.py 
b/source4/dsdb/tests/python/ldap.py
index 7139f3c..dc12fea 100755
--- a/source4/dsdb/tests/python/ldap.py
+++ b/source4/dsdb/tests/python/ldap.py
@@ -106,6 +106,7 @@ class BasicTests(samba.tests.TestCase):
         delete_force(self.ldb, "description=xyz,cn=users," + self.base_dn)
         delete_force(self.ldb, "ou=testou,cn=users," + self.base_dn)
         delete_force(self.ldb, "cn=Test Secret,cn=system," + self.base_dn)
+        delete_force(self.ldb, "cn=testtimevaluesuser1,cn=users," + 
self.base_dn)
 
     def test_objectclasses(self):
         """Test objectClass behaviour"""
@@ -2859,6 +2860,45 @@ nTSecurityDescriptor:: """ + desc_base64
         self.assertTrue("whenCreated" in res[0])
         self.assertTrue("whenChanged" in res[0])
 
+    def test_timevalues1(self):
+        """Tests possible syntax of time attributes"""
+
+        user_name = "testtimevaluesuser1"
+        user_dn = "CN=%s,CN=Users,%s" % (user_name, self.base_dn)
+
+        delete_force(self.ldb, user_dn)
+        self.ldb.add({ "dn": user_dn,
+                       "objectClass": "user",
+                       "sAMAccountName": user_name })
+
+        #
+        # We check the following values:
+        #
+        #   370101000000Z     => 20370101000000.0Z
+        # 20370102000000.*Z   => 20370102000000.0Z
+        #
+        ext = [ "Z", ".0Z", ".Z", ".000Z", 
".RandomIgnoredCharacters...987654321Z" ]
+        for i in range(0, len(ext)):
+            v_raw = "203701%02d000000" % (i + 1)
+            if ext[i] == "Z":
+                v_set = v_raw[2:] + ext[i]
+            else:
+                v_set = v_raw + ext[i]
+            v_get = v_raw + ".0Z"
+
+            m = Message()
+            m.dn = Dn(ldb, user_dn)
+            m["msTSExpireDate"] = MessageElement([v_set],
+                                                 FLAG_MOD_REPLACE,
+                                                 "msTSExpireDate")
+            self.ldb.modify(m)
+
+            res = self.ldb.search(base=user_dn, scope=SCOPE_BASE, 
attrs=["msTSExpireDate"])
+            self.assertTrue(len(res) == 1)
+            self.assertTrue("msTSExpireDate" in res[0])
+            self.assertTrue(len(res[0]["msTSExpireDate"]) == 1)
+            self.assertEquals(res[0]["msTSExpireDate"][0], v_get)
+
 class BaseDnTests(samba.tests.TestCase):
 
     def setUp(self):


-- 
Samba Shared Repository

Reply via email to