r19392: Use torture_setting_* rather than lp_parm_* where possible.
[sfrench/samba-autobuild/.git] / source4 / torture / ldap / basic.c
index b53515fdbc6285292f8293ed6501145d44ca14fc..ba7130677c29135f69b87ef4366e74f85eb12997 100644 (file)
 */
 
 #include "includes.h"
-#include "libcli/ldap/ldap.h"
+#include "libcli/ldap/ldap_client.h"
 #include "lib/cmdline/popt_common.h"
 
-BOOL test_bind_simple(struct ldap_connection *conn, const char *userdn, const char *password)
+#include "torture/torture.h"
+#include "torture/ldap/proto.h"
+
+static BOOL test_bind_simple(struct ldap_connection *conn, const char *userdn, const char *password)
 {
        NTSTATUS status;
        BOOL ret = True;
@@ -38,7 +41,7 @@ BOOL test_bind_simple(struct ldap_connection *conn, const char *userdn, const ch
        return ret;
 }
 
-BOOL test_bind_sasl(struct ldap_connection *conn, struct cli_credentials *creds)
+static BOOL test_bind_sasl(struct ldap_connection *conn, struct cli_credentials *creds)
 {
        NTSTATUS status;
        BOOL ret = True;
@@ -53,7 +56,7 @@ BOOL test_bind_sasl(struct ldap_connection *conn, struct cli_credentials *creds)
        return ret;
 }
 
-BOOL test_multibind(struct ldap_connection *conn, const char *userdn, const char *password)
+static BOOL test_multibind(struct ldap_connection *conn, const char *userdn, const char *password)
 {
        BOOL ret = True;
 
@@ -77,12 +80,14 @@ static BOOL test_search_rootDSE(struct ldap_connection *conn, char **basedn)
 {
        BOOL ret = True;
        struct ldap_message *msg, *result;
+       struct ldap_request *req;
+       int i;
+       struct ldap_SearchResEntry *r;
+       NTSTATUS status;
 
        printf("Testing RootDSE Search\n");
 
        *basedn = NULL;
-       conn->searchid = 0;
-       conn->next_msgid = 30;
 
        msg = new_ldap_message(conn);
        if (!msg) {
@@ -96,50 +101,54 @@ static BOOL test_search_rootDSE(struct ldap_connection *conn, char **basedn)
        msg->r.SearchRequest.timelimit = 0;
        msg->r.SearchRequest.sizelimit = 0;
        msg->r.SearchRequest.attributesonly = False;
-       msg->r.SearchRequest.filter = talloc_strdup(msg->mem_ctx, "(objectclass=*)");
+       msg->r.SearchRequest.tree = ldb_parse_tree(msg, "(objectclass=*)");
        msg->r.SearchRequest.num_attributes = 0;
        msg->r.SearchRequest.attributes = NULL;
 
-       if (!ldap_setsearchent(conn, msg, NULL)) {
-               printf("Could not setsearchent\n");
+       req = ldap_request_send(conn, msg);
+       if (req == NULL) {
+               printf("Could not setup ldap search\n");
                return False;
        }
 
-       result = ldap_getsearchent(conn, NULL);
-       if (result) {
-               int i;
-               struct ldap_SearchResEntry *r = &result->r.SearchResultEntry;
+       status = ldap_result_one(req, &result, LDAP_TAG_SearchResultEntry);
+       if (!NT_STATUS_IS_OK(status)) {
+               printf("search failed - %s\n", nt_errstr(status));
+               return False;
+       }
+
+       printf("received %d replies\n", req->num_replies);
+
+       r = &result->r.SearchResultEntry;
                
-               DEBUG(1,("\tdn: %s\n", r->dn));
-               for (i=0; i<r->num_attributes; i++) {
-                       int j;
-                       for (j=0; j<r->attributes[i].num_values; j++) {
-                               DEBUG(1,("\t%s: %d %.*s\n", r->attributes[i].name,
-                                        r->attributes[i].values[j].length,
-                                        r->attributes[i].values[j].length,
-                                        (char *)r->attributes[i].values[j].data));
-                               if (!(*basedn) && 
-                                   strcasecmp("defaultNamingContext",r->attributes[i].name)==0) {
-                                        *basedn = talloc_asprintf(conn->mem_ctx, "%.*s",
-                                        r->attributes[i].values[j].length,
-                                        (char *)r->attributes[i].values[j].data);
-                               }
+       DEBUG(1,("\tdn: %s\n", r->dn));
+       for (i=0; i<r->num_attributes; i++) {
+               int j;
+               for (j=0; j<r->attributes[i].num_values; j++) {
+                       DEBUG(1,("\t%s: %d %.*s\n", r->attributes[i].name,
+                                (int)r->attributes[i].values[j].length,
+                                (int)r->attributes[i].values[j].length,
+                                (char *)r->attributes[i].values[j].data));
+                       if (!(*basedn) && 
+                           strcasecmp("defaultNamingContext",r->attributes[i].name)==0) {
+                               *basedn = talloc_asprintf(conn, "%.*s",
+                                                         (int)r->attributes[i].values[j].length,
+                                                         (char *)r->attributes[i].values[j].data);
                        }
                }
-       } else {
-               ret = False;
        }
 
-       ldap_endsearchent(conn, NULL);
+       talloc_free(req);
 
        return ret;
 }
 
 static BOOL test_compare_sasl(struct ldap_connection *conn, const char *basedn)
 {
-       BOOL ret = True;
-       struct ldap_message *msg, *result;
+       struct ldap_message *msg, *rep;
+       struct ldap_request *req;
        const char *val;
+       NTSTATUS status;
 
        printf("Testing SASL Compare: %s\n", basedn);
 
@@ -147,8 +156,6 @@ static BOOL test_compare_sasl(struct ldap_connection *conn, const char *basedn)
                return False;
        }
 
-       conn->next_msgid = 55;
-
        msg = new_ldap_message(conn);
        if (!msg) {
                return False;
@@ -156,42 +163,40 @@ static BOOL test_compare_sasl(struct ldap_connection *conn, const char *basedn)
 
        msg->type = LDAP_TAG_CompareRequest;
        msg->r.CompareRequest.dn = basedn;
-       msg->r.CompareRequest.attribute = talloc_strdup(msg->mem_ctx, "objectClass");
+       msg->r.CompareRequest.attribute = talloc_strdup(msg, "objectClass");
        val = "domain";
-       msg->r.CompareRequest.value = data_blob_talloc(msg->mem_ctx, val, strlen(val));
+       msg->r.CompareRequest.value = data_blob_talloc(msg, val, strlen(val));
 
-       if (!ldap_sasl_send_msg(conn, msg, NULL)) {
+       req = ldap_request_send(conn, msg);
+       if (!req) {
                return False;
        }
 
-       DEBUG(5,("Code: %d DN: [%s] ERROR:[%s] REFERRAL:[%s]\n",
-               msg->r.CompareResponse.resultcode,
-               msg->r.CompareResponse.dn,
-               msg->r.CompareResponse.errormessage,
-               msg->r.CompareResponse.referral));
-
-       return True;
-       if (!result) {
+       status = ldap_result_one(req, &rep, LDAP_TAG_CompareResponse);
+       if (!NT_STATUS_IS_OK(status)) {
+               printf("error in ldap compare request - %s\n", nt_errstr(status));
                return False;
        }
 
-       if (result->type != LDAP_TAG_CompareResponse) {
-               return False;
-       }
+       DEBUG(5,("Code: %d DN: [%s] ERROR:[%s] REFERRAL:[%s]\n",
+               rep->r.CompareResponse.resultcode,
+               rep->r.CompareResponse.dn,
+               rep->r.CompareResponse.errormessage,
+               rep->r.CompareResponse.referral));
 
-       return ret;
+       return True;
 }
 
-BOOL torture_ldap_basic(void)
+
+BOOL torture_ldap_basic(struct torture_context *torture)
 {
         NTSTATUS status;
         struct ldap_connection *conn;
        TALLOC_CTX *mem_ctx;
        BOOL ret = True;
-       const char *host = lp_parm_string(-1, "torture", "host");
-       const char *userdn = lp_parm_string(-1, "torture", "ldap_userdn");
-       /*const char *basedn = lp_parm_string(-1, "torture", "ldap_basedn");*/
-       const char *secret = lp_parm_string(-1, "torture", "ldap_secret");
+       const char *host = torture_setting_string(torture, "host", NULL);
+       const char *userdn = torture_setting_string(torture, "ldap_userdn", NULL);
+       const char *secret = torture_setting_string(torture, "ldap_secret", NULL);
        char *url;
        char *basedn;
 
@@ -199,18 +204,18 @@ BOOL torture_ldap_basic(void)
 
        url = talloc_asprintf(mem_ctx, "ldap://%s/", host);
 
-       status = torture_ldap_connection(mem_ctx, &conn, url, userdn, secret);
+       status = torture_ldap_connection(mem_ctx, &conn, url);
        if (!NT_STATUS_IS_OK(status)) {
                return False;
        }
 
-       /* other basic tests here */
-
-       if (!test_multibind(conn, userdn, secret)) {
+       if (!test_search_rootDSE(conn, &basedn)) {
                ret = False;
        }
 
-       if (!test_search_rootDSE(conn, &basedn)) {
+       /* other basic tests here */
+
+       if (!test_multibind(conn, userdn, secret)) {
                ret = False;
        }
 
@@ -223,10 +228,9 @@ BOOL torture_ldap_basic(void)
        }
 
        /* no more test we are closing */
-
+        torture_ldap_close(conn);
        talloc_free(mem_ctx);
 
-        torture_ldap_close(conn);
 
        return ret;
 }