r19273: - fixed error handling with the ldap backend
authorAndrew Tridgell <tridge@samba.org>
Sat, 14 Oct 2006 04:43:51 +0000 (04:43 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 19:21:00 +0000 (14:21 -0500)
- propogate errors to the ldbadd command line tool

- use the rdn_name module when testing the tdb backend to allow the
  same test code to correctly test the ldap and non-ldap backends
(This used to be commit dd82c474a123d90329bda653a4cb73c93e087b15)

source4/lib/ldb/ldb_ldap/ldb_ldap.c
source4/lib/ldb/tests/test-generic.sh
source4/lib/ldb/tests/test-tdb.sh
source4/lib/ldb/tests/test.ldif
source4/lib/ldb/tools/ldbadd.c

index 10563816b9770bd4279b92e992f4a5def4403746..a34e35c6db3012689cdcddd902b1e91e6d5df1be 100644 (file)
@@ -497,9 +497,11 @@ static int lldb_parse_result(struct ldb_handle *handle, LDAPMessage *result)
        char **referralsp = NULL;
        LDAPControl **serverctrlsp = NULL;
        int ret = LDB_SUCCESS;
-
+       
        type = ldap_msgtype(result);
 
+       handle->status = 0;
+
        switch (type) {
 
        case LDAP_RES_SEARCH_ENTRY:
@@ -631,15 +633,19 @@ static int lldb_parse_result(struct ldb_handle *handle, LDAPMessage *result)
        }
 
        if (matcheddnp) ldap_memfree(matcheddnp);
-       if (errmsgp) {
+       if (errmsgp && *errmsgp) {
                ldb_set_errstring(ac->module->ldb, errmsgp);
+       } else if (handle->status) {
+               ldb_set_errstring(ac->module->ldb, ldap_err2string(handle->status));
+       }
+       if (errmsgp) {
                ldap_memfree(errmsgp);
        }
        if (referralsp) ldap_value_free(referralsp);
        if (serverctrlsp) ldap_controls_free(serverctrlsp);
 
        ldap_msgfree(result);
-       return ret;
+       return lldb_ldap_to_ldb(handle->status);
 
 error:
        handle->state = LDB_ASYNC_DONE;
index e4085c6d6545479652e48efc940a9e13e72c4c6f..14337cc135223920ecf7167b72de17151dbc29c8 100755 (executable)
@@ -10,6 +10,12 @@ echo "LDB_URL: $LDB_URL"
 echo "Adding base elements"
 $VALGRIND ldbadd $LDBDIR/tests/test.ldif || exit 1
 
+echo "Adding again - should fail"
+ldbadd $LDBDIR/tests/test.ldif 2> /dev/null && {
+    echo "Should have failed to add again - gave $?"
+    exit 1
+}
+
 echo "Modifying elements"
 $VALGRIND ldbmodify $LDBDIR/tests/test-modify.ldif || exit 1
 
@@ -32,8 +38,11 @@ if [ $LDB_SPECIALS = 1 ]; then
  $VALGRIND ldbadd $LDBDIR/tests/test-index.ldif  || exit 1
 fi
 
-echo "Adding attributes"
-$VALGRIND ldbadd $LDBDIR/tests/test-wrong_attributes.ldif  || exit 1
+echo "Adding bad attributes - should fail"
+$VALGRIND ldbadd $LDBDIR/tests/test-wrong_attributes.ldif && {
+    echo "Should fhave failed - gave $?"
+    exit 1
+}
 
 echo "testing indexed search"
 $VALGRIND ldbsearch '(uid=uham)'  || exit 1
@@ -75,7 +84,7 @@ echo "Testing binary file attribute value"
 mkdir -p tests/tmp
 cp $LDBDIR/tests/samba4.png tests/tmp/samba4.png
 $VALGRIND ldbmodify $LDBDIR/tests/photo.ldif || exit 1
-count=`$VALGRIND ldbsearch '(cn=Ursula Hampster)' jpegPhoto | grep '^dn' | wc -l`
+count=`$VALGRIND ldbsearch '(cn=Hampster Ursula)' jpegPhoto | grep '^dn' | wc -l`
 if [ $count != 1 ]; then
     echo returned $count records - expected 1
     exit 1
@@ -88,7 +97,7 @@ echo "Testing compare"
 count=`$VALGRIND ldbsearch '(cn>=t)' cn | grep '^dn' | wc -l`
 if [ $count != 2 ]; then
     echo returned $count records - expected 2
-    echo "this fails on opsnLdap ..."
+    echo "this fails on openLdap ..."
 fi
 
 count=`$VALGRIND ldbsearch '(cn<=t)' cn | grep '^dn' | wc -l`
index e1052d165127e14c2b8cfa6a347e887a944252e5..7c4f5205b478b6a649276a1a4201162bac81f900 100755 (executable)
@@ -17,6 +17,13 @@ if [ -z "$LDBDIR" ]; then
     export LDBDIR
 fi
 
+cat <<EOF | $VALGRIND ldbadd || exit 1
+dn: @MODULES
+@LIST: rdn_name
+EOF
+
+$VALGRIND ldbadd $LDBDIR/tests/init.ldif || exit 1
+
 . $LDBDIR/tests/test-generic.sh
 
 . $LDBDIR/tests/test-extended.sh
index ab8b81437a89fcf285e047d753c649e2aef82fd0..e53fadc7009a4ad2687d69c2ddcca9eef284383a 100644 (file)
@@ -409,8 +409,3 @@ homephone: +1 313 555 8421
 pager: +1 313 555 2844
 facsimiletelephonenumber: +1 313 555 9700
 telephonenumber: +1 313 555 5331
-
-dn: ou=Ldb Test,ou=People,o=University of Michigan,c=TEST
-objectclass: organizationalUnit
-ou: Ldb Test
-
index 6a0f51024465e8f430622d35a185ed663bc9d181..9595703e92c32db1ad68dd5aa5c4d462030dbb83 100644 (file)
@@ -54,10 +54,10 @@ static void usage(void)
 /*
   add records from an opened file
 */
-static int process_file(struct ldb_context *ldb, FILE *f)
+static int process_file(struct ldb_context *ldb, FILE *f, int *count)
 {
        struct ldb_ldif *ldif;
-       int ret, count=0;
+       int ret = LDB_SUCCESS;
 
        while ((ldif = ldb_ldif_read_file(ldb, f))) {
                if (ldif->changetype != LDB_CHANGETYPE_ADD &&
@@ -74,12 +74,12 @@ static int process_file(struct ldb_context *ldb, FILE *f)
                                ldb_errstring(ldb), ldb_dn_linearize(ldb, ldif->msg->dn));
                        failures++;
                } else {
-                       count++;
+                       (*count)++;
                }
                ldb_ldif_read_free(ldb, ldif);
        }
 
-       return count;
+       return ret;
 }
 
 
@@ -87,7 +87,7 @@ static int process_file(struct ldb_context *ldb, FILE *f)
 int main(int argc, const char **argv)
 {
        struct ldb_context *ldb;
-       int i, count=0;
+       int i, ret=0, count=0;
        struct ldb_cmdline *options;
 
        ldb_global_init();
@@ -97,7 +97,7 @@ int main(int argc, const char **argv)
        options = ldb_cmdline_process(ldb, argc, argv, usage);
 
        if (options->argc == 0) {
-               count += process_file(ldb, stdin);
+               ret = process_file(ldb, stdin, &count);
        } else {
                for (i=0;i<options->argc;i++) {
                        const char *fname = options->argv[i];
@@ -107,7 +107,7 @@ int main(int argc, const char **argv)
                                perror(fname);
                                exit(1);
                        }
-                       count += process_file(ldb, f);
+                       ret = process_file(ldb, f, &count);
                        fclose(f);
                }
        }
@@ -116,5 +116,5 @@ int main(int argc, const char **argv)
 
        printf("Added %d records with %d failures\n", count, failures);
        
-       return 0;
+       return ret;
 }