diff options
Diffstat (limited to 'source4')
-rw-r--r-- | source4/libcli/ldap/ldap.c | 17 | ||||
-rw-r--r-- | source4/libcli/util/asn1.c | 2 | ||||
-rw-r--r-- | source4/torture/config.m4 | 2 | ||||
-rw-r--r-- | source4/torture/config.mk | 12 | ||||
-rw-r--r-- | source4/torture/ldap/basic.c | 34 | ||||
-rw-r--r-- | source4/torture/ldap/common.c | 40 | ||||
-rw-r--r-- | source4/torture/torture.c | 3 |
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}}; |