r1771: OK Let's add tests for ldap.
authorSimo Sorce <idra@samba.org>
Thu, 12 Aug 2004 08:00:45 +0000 (08:00 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 17:57:56 +0000 (12:57 -0500)
Thanks to Metze and Volker for their unvaluable support :)
(This used to be commit e6a6c0737ab94d58930c0d4e1ef0bb4d99510833)

source4/libcli/ldap/ldap.c
source4/libcli/util/asn1.c
source4/torture/config.m4
source4/torture/config.mk
source4/torture/ldap/basic.c [new file with mode: 0644]
source4/torture/ldap/common.c [new file with mode: 0644]
source4/torture/torture.c

index ef1d43022f8354c26159b6a49576e166f38eeab3..63dd7d4c7be6d8e318d5208d6a39f3cb9fb45780 100644 (file)
@@ -58,6 +58,7 @@ struct ldap_parse_tree {
 };
 
 #define LDAP_ALL_SEP "()&|=!"
+#define LDAP_CONNECTION_TIMEOUT 10000
 
 /*
   return next token element. Caller frees
@@ -1534,6 +1535,8 @@ struct ldap_connection *new_ldap_connection(void)
        result->outstanding = NULL;
        result->searchid = 0;
        result->search_entries = NULL;
+       result->auth_dn = NULL;
+       result->simple_pw = NULL;
        return result;
 }
 
@@ -1553,7 +1556,7 @@ BOOL ldap_connect(struct ldap_connection *conn, const char *url)
 
        putip((char *)&ip, (char *)hp->h_addr);
 
-       conn->sock = open_socket_out(SOCK_STREAM, &ip, conn->port, 10000);
+       conn->sock = open_socket_out(SOCK_STREAM, &ip, conn->port, LDAP_CONNECTION_TIMEOUT);
 
        return (conn->sock >= 0);
 }
@@ -1753,9 +1756,17 @@ BOOL ldap_setup_connection(struct ldap_connection *conn,
        msg->messageid = conn->next_msgid++;
        msg->type = LDAP_TAG_BindRequest;
        msg->r.BindRequest.version = 3;
-       msg->r.BindRequest.dn = conn->auth_dn;
+       if (conn->auth_dn) {
+               msg->r.BindRequest.dn = conn->auth_dn;
+       } else {
+               msg->r.BindRequest.dn = "";
+       }
        msg->r.BindRequest.mechanism = LDAP_AUTH_MECH_SIMPLE;
-       msg->r.BindRequest.creds.password = conn->simple_pw;
+       if (conn->simple_pw) {
+               msg->r.BindRequest.creds.password = conn->simple_pw;
+       } else {
+               msg->r.BindRequest.creds.password = "";
+       }
 
        if ((response = ldap_transaction(conn, msg)) == NULL)
                return False;
index 6ddce7882c0984690f2e7e825e6c28b2af06a479..6dc459d59dbbe376e595a6bef41706486dbb7a92 100644 (file)
@@ -313,7 +313,6 @@ BOOL asn1_start_tag(ASN1_DATA *data, uint8_t tag)
        return !data->has_error;
 }
 
-#if 0
 static BOOL read_one_uint8(int sock, uint8_t *result, ASN1_DATA *data,
                           const struct timeval *endtime)
 {
@@ -375,7 +374,6 @@ BOOL asn1_read_sequence_until(int sock, ASN1_DATA *data,
        
        return True;
 }
-#endif
 
 /* Get the length to be expected in buf */
 BOOL asn1_object_length(uint8_t *buf, size_t buf_length,
index 47b790fb68db311a952e78b54b30d5d4649e757f..e5f1d357e64212d60a235f2c79e47b93428a4454 100644 (file)
@@ -12,6 +12,8 @@ SMB_SUBSYSTEM_MK(TORTURE_AUTH,torture/config.mk)
 
 SMB_SUBSYSTEM_MK(TORTURE_NBENCH,torture/config.mk)
 
+SMB_SUBSYSTEM_MK(TORTURE_LDAP,torture/config.mk)
+
 SMB_BINARY_MK(smbtorture,torture/config.mk)
 SMB_BINARY_MK(gentest,torture/config.mk)
 SMB_BINARY_MK(masktest,torture/config.mk)
index 09a6dcb991d96ac7038fea47886e436374b47ca6..0f758eb0e9cb154ad080456d9a10e1e3324f5b45 100644 (file)
@@ -103,6 +103,17 @@ ADD_OBJ_FILES = \
 # End SUBSYSTEM TORTURE_NBENCH
 #################################
 
+#################################
+# Start SUBSYSTEM TORTURE_LDAP
+[SUBSYSTEM::TORTURE_LDAP]
+ADD_OBJ_FILES = \
+               torture/ldap/common.o \
+               torture/ldap/basic.o
+REQUIRED_SUBSYSTEMS = \
+               LIBCLI_LDAP
+# End SUBSYSTEM TORTURE_LDAP
+#################################
+
 #################################
 # Start BINARY smbtorture
 [BINARY::smbtorture]
@@ -116,6 +127,7 @@ REQUIRED_SUBSYSTEMS = \
                TORTURE_RAP \
                TORTURE_AUTH \
                TORTURE_NBENCH \
+               TORTURE_LDAP \
                CONFIG \
                LIBCMDLINE \
                LIBBASIC
diff --git a/source4/torture/ldap/basic.c b/source4/torture/ldap/basic.c
new file mode 100644 (file)
index 0000000..2227d70
--- /dev/null
@@ -0,0 +1,34 @@
+
+#include "includes.h"
+
+BOOL torture_ldap_basic(int dummy)
+{
+        NTSTATUS status;
+        struct ldap_connection *conn;
+       TALLOC_CTX *mem_ctx;
+       BOOL ret = True;
+       const char *host = lp_parm_string(-1, "torture", "host");
+       char *url;
+
+       mem_ctx = talloc_init("torture_ldap_basic");
+
+       url = talloc_asprintf(mem_ctx, "ldap://%s/", host);
+
+       status = torture_ldap_connection(&conn, url);
+       if (!NT_STATUS_IS_OK(status)) {
+               return False;
+       }
+
+       /* other basic tests here */
+
+       /* ---  nothing yet :-) --- */
+
+       /* no more test we are closing */
+
+       talloc_destroy(mem_ctx);
+
+        torture_ldap_close(conn);
+
+       return ret;
+}
+
diff --git a/source4/torture/ldap/common.c b/source4/torture/ldap/common.c
new file mode 100644 (file)
index 0000000..7d8dcbe
--- /dev/null
@@ -0,0 +1,40 @@
+#include "includes.h"
+
+/* open a ldap connection to a server */
+/* TODO: Add support to pass over credentials */
+NTSTATUS torture_ldap_connection(struct ldap_connection **conn, 
+                               const char *url)
+{
+        NTSTATUS status = NT_STATUS_UNSUCCESSFUL;
+       BOOL ret;
+
+       if (!url) {
+               printf("You must specify a url string\n");
+               return NT_STATUS_INVALID_PARAMETER;
+       }
+
+       *conn = new_ldap_connection();
+       if (!*conn) {
+               printf("Failed to initialize ldap_connection structure\n");
+               return status;
+       }
+
+       ret = ldap_setup_connection(*conn, url);
+       if (!ret) {
+               printf("Failed to connect with url [%s]", url);
+               /* FIXME: what abut actually implementing an ldap_connection_free() function ?
+                         :-) sss */
+               return status;
+       }
+       return NT_STATUS_OK;
+}
+
+/* close an ldap connection to a server */
+NTSTATUS torture_ldap_close(struct ldap_connection *conn)
+{
+       /* FIXME: what about actually implementing ldap_close() ?
+                 :-) sss */
+       return NT_STATUS_OK;
+}
+
index 78a15d22fd4b734952e952b0892a86d0f218b7ad..6048d7c76da0362a0391be6ff09d1614e8908f23 100644 (file)
@@ -4215,6 +4215,9 @@ static struct {
        /* crypto testers */
        {"CRYPT-NTLMSSP", torture_ntlmssp_self_check, 0},
 
+       /* ldap testers */
+       {"LDAP-BASIC", torture_ldap_basic, 0},
+
        {NULL, NULL, 0}};