From 2542d54e9384302c6c9a7b2b2bf4be07b6d95f9c Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Wed, 11 May 2005 14:38:13 +0000 Subject: r6732: - move sasl send recv code to the ldap lib - support 'modrdn' ldif metze (This used to be commit b6a1734699953964fcde6fe6ea7048496492eb33) --- source4/torture/ldap/common.c | 146 +++++------------------------------------- 1 file changed, 15 insertions(+), 131 deletions(-) (limited to 'source4/torture/ldap/common.c') diff --git a/source4/torture/ldap/common.c b/source4/torture/ldap/common.c index 9dbe2557eb..a65d24804c 100644 --- a/source4/torture/ldap/common.c +++ b/source4/torture/ldap/common.c @@ -24,6 +24,7 @@ #include "includes.h" #include "asn_1.h" #include "libcli/ldap/ldap.h" +#include "auth/gensec/gensec.h" NTSTATUS torture_ldap_bind(struct ldap_connection *conn, const char *userdn, const char *password) { @@ -70,10 +71,9 @@ NTSTATUS torture_ldap_bind_sasl(struct ldap_connection *conn, /* open a ldap connection to a server */ NTSTATUS torture_ldap_connection(TALLOC_CTX *mem_ctx, struct ldap_connection **conn, - const char *url, const char *userdn, const char *password) + const char *url) { NTSTATUS status = NT_STATUS_UNSUCCESSFUL; - int ret; if (!url) { printf("You must specify a url string\n"); @@ -86,6 +86,19 @@ NTSTATUS torture_ldap_connection(TALLOC_CTX *mem_ctx, struct ldap_connection **c return status; } + return NT_STATUS_OK; +} + +/* open a ldap connection to a server */ +NTSTATUS torture_ldap_connection2(TALLOC_CTX *mem_ctx, struct ldap_connection **conn, + const char *url, const char *userdn, const char *password) +{ + NTSTATUS status = NT_STATUS_UNSUCCESSFUL; + int ret; + + status = torture_ldap_connection(mem_ctx, conn, url); + NT_STATUS_NOT_OK_RETURN(status); + ret = ldap_bind_simple(*conn, userdn, password); if (ret != LDAP_SUCCESS) { printf("Failed to connect with url [%s]\n", url); @@ -104,132 +117,3 @@ NTSTATUS torture_ldap_close(struct ldap_connection *conn) :-) sss */ return NT_STATUS_OK; } - - -/* - Write data to a fd -*/ -static ssize_t write_data(int fd, char *buffer, size_t N) -{ - size_t total=0; - ssize_t ret; - - while (total < N) { - ret = sys_write(fd,buffer + total,N - total); - - if (ret == -1) { - DEBUG(0,("write_data: write failure. Error = %s\n", strerror(errno) )); - return -1; - } - if (ret == 0) - return total; - - total += ret; - } - - return (ssize_t)total; -} - - -/* - Read data from the client, reading exactly N bytes -*/ -static ssize_t read_data(int fd, char *buffer, size_t N) -{ - ssize_t ret; - size_t total=0; - - while (total < N) { - - ret = sys_read(fd,buffer + total,N - total); - - if (ret == 0) { - DEBUG(10,("read_data: read of %d returned 0. Error = %s\n", - (int)(N - total), strerror(errno) )); - return 0; - } - - if (ret == -1) { - DEBUG(0,("read_data: read failure for %d. Error = %s\n", - (int)(N - total), strerror(errno) )); - return -1; - } - total += ret; - } - - return (ssize_t)total; -} - -BOOL ldap_sasl_send_msg(struct ldap_connection *conn, struct ldap_message *msg, - const struct timeval *endtime) -{ - NTSTATUS status; - DATA_BLOB request; - BOOL result; - DATA_BLOB wrapped; - int len; - char length[4]; - struct asn1_data asn1; - TALLOC_CTX *mem_ctx; - - msg->messageid = conn->next_msgid++; - - if (!ldap_encode(msg, &request)) - return False; - - status = gensec_wrap(conn->gensec, - msg->mem_ctx, - &request, - &wrapped); - if (!NT_STATUS_IS_OK(status)) { - DEBUG(0,("gensec_wrap: %s\n",nt_errstr(status))); - return False; - } - - RSIVAL(length, 0, wrapped.length); - - result = (write_data(conn->sock, length, 4) == 4); - if (!result) - return result; - - result = (write_data(conn->sock, wrapped.data, wrapped.length) == wrapped.length); - if (!result) - return result; - - wrapped = data_blob(NULL, 0x4000); - data_blob_clear(&wrapped); - - result = (read_data(conn->sock, length, 4) == 4); - if (!result) - return result; - - len = RIVAL(length,0); - - result = (read_data(conn->sock, wrapped.data, MIN(wrapped.length,len)) == len); - if (!result) - return result; - - wrapped.length = len; - - status = gensec_unwrap(conn->gensec, - msg->mem_ctx, - &wrapped, - &request); - if (!NT_STATUS_IS_OK(status)) { - DEBUG(0,("gensec_unwrap: %s\n",nt_errstr(status))); - return False; - } - - mem_ctx = msg->mem_ctx; - ZERO_STRUCTP(msg); - msg->mem_ctx = mem_ctx; - - asn1_load(&asn1, request); - if (!ldap_decode(&asn1, msg)) { - return False; - } - - result = True; - - return result; -} -- cgit