summaryrefslogtreecommitdiff
path: root/source4/torture/ldap/common.c
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2005-05-11 14:38:13 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 13:16:39 -0500
commit2542d54e9384302c6c9a7b2b2bf4be07b6d95f9c (patch)
treea5fadde6b93a9200d4f90aaa328f8b7477da0e5b /source4/torture/ldap/common.c
parentdd0266918748a7da3e0a4f19ba96f96cee2eaca8 (diff)
downloadsamba-2542d54e9384302c6c9a7b2b2bf4be07b6d95f9c.tar.gz
samba-2542d54e9384302c6c9a7b2b2bf4be07b6d95f9c.tar.bz2
samba-2542d54e9384302c6c9a7b2b2bf4be07b6d95f9c.zip
r6732: - move sasl send recv code to the ldap lib
- support 'modrdn' ldif metze (This used to be commit b6a1734699953964fcde6fe6ea7048496492eb33)
Diffstat (limited to 'source4/torture/ldap/common.c')
-rw-r--r--source4/torture/ldap/common.c146
1 files changed, 15 insertions, 131 deletions
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;
-}