r13354: Add tests to check that controls work properly
authorSimo Sorce <idra@samba.org>
Sun, 5 Feb 2006 20:48:27 +0000 (20:48 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:51:48 +0000 (13:51 -0500)
Fix asq module, add a second_stage_init to register with rootdse
Fix asq control ldap parsing routines (this was nasty to find out)

source/lib/ldb/modules/asq.c
source/libcli/ldap/ldap_controls.c
source/script/tests/test_ldap.sh

index 5d4a5a397007ed8d7702c2f7b96d8ceb56f90aaf..7e6bbdf29ea899e17f62f6f7c9dec7cc1cfa84b0 100644 (file)
@@ -197,9 +197,29 @@ static int asq(struct ldb_module *module, struct ldb_request *req)
        }
 }
 
+static int asq_init_2(struct ldb_module *module)
+{
+       struct ldb_request request;
+       int ret;
+
+       request.operation = LDB_REQ_REGISTER;
+       request.op.reg.oid = LDB_CONTROL_ASQ_OID;
+       request.controls = NULL;
+
+       ret = ldb_request(module->ldb, &request);
+       if (ret != LDB_SUCCESS) {
+               ldb_debug(module->ldb, LDB_DEBUG_ERROR, "asq: Unable to register control with rootdse!\n");
+               return LDB_ERR_OTHER;
+       }
+
+       return ldb_next_second_stage_init(module);
+}
+
+
 static const struct ldb_module_ops asq_ops = {
        .name              = "asq",
-       .request           = asq
+       .request           = asq,
+       .second_stage_init = asq_init_2
 };
 
 struct ldb_module *asq_module_init(struct ldb_context *ldb, const char *options[])
index cb7b52d42360f59e6ba35e41cd3a8b7eaf26be44..e02efdee2c947822cbc9d78d5c435c20f561f83d 100644 (file)
@@ -304,7 +304,7 @@ static BOOL decode_asq_control(void *mem_ctx, DATA_BLOB in, void **out)
                }
                lac->src_attr_len = source_attribute.length;
                if (lac->src_attr_len) {
-                       lac->source_attribute = talloc_memdup(lac, source_attribute.data, source_attribute.length);
+                       lac->source_attribute = talloc_strndup(lac, source_attribute.data, source_attribute.length);
 
                        if (!(lac->source_attribute)) {
                                return False;
index 37baaf92778785783ff6fb6d1beb53b2b1ac1e0d..fc2b27028f60e8ce041f8f2367596b7b49961d73 100755 (executable)
@@ -37,13 +37,42 @@ for p in $PROTOCOLS; do
 
     testit "Listing Groups" bin/ldbsearch $options $CONFIGURATION -H $p://$SERVER '(objectclass=group)' sAMAccountName || failed=`expr $failed + 1`
 
-    nusers=`bin/ldbsearch $options -H $p://$SERVER $CONFIGURATION '(|(|(&(!(groupType:1.2.840.113556.1.4.803:=1))(groupType:1.2.840.113556.1.4.803:=2147483648)(groupType:1.2.840.113556.1.4.804:=10))(samAccountType=805306368))(samAccountType=805306369))' sAMAccountName | grep sAMAccountName | wc -l`
-    echo "Found $nusers users"
-    if [ $nusers -lt 10 ]; then
-       echo "Should have found at least 10 users"
+    nentries=`bin/ldbsearch $options -H $p://$SERVER $CONFIGURATION '(|(|(&(!(groupType:1.2.840.113556.1.4.803:=1))(groupType:1.2.840.113556.1.4.803:=2147483648)(groupType:1.2.840.113556.1.4.804:=10))(samAccountType=805306368))(samAccountType=805306369))' sAMAccountName | grep sAMAccountName | wc -l`
+    echo "Found $nentries entries"
+    if [ $nentries -lt 10 ]; then
+       echo "Should have found at least 10 entries"
        failed=`expr $failed + 1`
     fi
-done
+
+    echo "Test Paged Results Control"
+    nentries=`bin/ldbsearch $options $CONFIGURATION -H $p://$SERVER --controls=paged_results:1:5 '(objectclass=user)' | grep sAMAccountName | wc -l`
+    if [ $nentries -lt 1 ]; then
+       echo "Paged Results Control test returned 0 items"
+       failed=`expr $failed + 1`
+    fi
+
+    echo "Test Server Sort Control"
+    nentries=`bin/ldbsearch $options $CONFIGURATION -H $p://$SERVER --controls=server_sort:1:0:sAMAccountName '(objectclass=user)' | grep sAMAccountName | wc -l`
+    if [ $nentries -lt 1 ]; then
+       echo "Server Sort Control test returned 0 items"
+       failed=`expr $failed + 1`
+    fi
+
+    echo "Test Extended DN Control"
+    nentries=`bin/ldbsearch $options $CONFIGURATION -H $p://$SERVER --controls=extended_dn:1:0 '(objectclass=user)' | grep sAMAccountName | wc -l`
+    if [ $nentries -lt 1 ]; then
+       echo "Extended DN Control test returned 0 items"
+       failed=`expr $failed + 1`
+    fi
+
+    echo "Test Attribute Scope Query Control"
+    nentries=`bin/ldbsearch $options $CONFIGURATION -H $p://$SERVER --controls=asq:1:member -s base -b 'CN=Administrators,CN=Builtin,DC=samba,DC=example,DC=com' | grep sAMAccountName | wc -l`
+   if [ $nentries -lt 1 ]; then
+       echo "Attribute Scope Query test returned 0 items"
+       failed=`expr $failed + 1`
+   fi
+
+ done
 done
 
 testit "CLDAP" bin/smbtorture $TORTURE_OPTIONS //$SERVER/_none_ LDAP-CLDAP || failed=`expr $failed + 1`