summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source4/libcli/ldap/ldap.c17
-rw-r--r--source4/libcli/util/asn1.c2
-rw-r--r--source4/torture/config.m42
-rw-r--r--source4/torture/config.mk12
-rw-r--r--source4/torture/ldap/basic.c34
-rw-r--r--source4/torture/ldap/common.c40
-rw-r--r--source4/torture/torture.c3
7 files changed, 105 insertions, 5 deletions
diff --git a/source4/libcli/ldap/ldap.c b/source4/libcli/ldap/ldap.c
index ef1d43022f..63dd7d4c7b 100644
--- a/source4/libcli/ldap/ldap.c
+++ b/source4/libcli/ldap/ldap.c
@@ -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;
diff --git a/source4/libcli/util/asn1.c b/source4/libcli/util/asn1.c
index 6ddce7882c..6dc459d59d 100644
--- a/source4/libcli/util/asn1.c
+++ b/source4/libcli/util/asn1.c
@@ -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,
diff --git a/source4/torture/config.m4 b/source4/torture/config.m4
index 47b790fb68..e5f1d357e6 100644
--- a/source4/torture/config.m4
+++ b/source4/torture/config.m4
@@ -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)
diff --git a/source4/torture/config.mk b/source4/torture/config.mk
index 09a6dcb991..0f758eb0e9 100644
--- a/source4/torture/config.mk
+++ b/source4/torture/config.mk
@@ -104,6 +104,17 @@ ADD_OBJ_FILES = \
#################################
#################################
+# 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]
OBJ_FILES = \
@@ -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
index 0000000000..2227d70421
--- /dev/null
+++ b/source4/torture/ldap/basic.c
@@ -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
index 0000000000..7d8dcbe4da
--- /dev/null
+++ b/source4/torture/ldap/common.c
@@ -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;
+}
+
diff --git a/source4/torture/torture.c b/source4/torture/torture.c
index 78a15d22fd..6048d7c76d 100644
--- a/source4/torture/torture.c
+++ b/source4/torture/torture.c
@@ -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}};