mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-12-24 00:29:35 -05:00
Update slap_op to maintain dn and ndn (derived from conn->c_dn). Update ldbm_back_bind to return actual bound dn (including rootdn) for use in slapd_conn. Other backends use client dn. Modify other codes to use ndn (normalized uppercase dn) most everywhere. Aliasing, Suffixing and modrdn could use more work. Applied suffixing to compare and modrdn.
58 lines
1.2 KiB
C
58 lines
1.2 KiB
C
/* bind.c - shell backend bind function */
|
|
|
|
#include "portable.h"
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <ac/socket.h>
|
|
#include <ac/string.h>
|
|
|
|
#include "slap.h"
|
|
#include "shell.h"
|
|
|
|
int
|
|
shell_back_bind(
|
|
Backend *be,
|
|
Connection *conn,
|
|
Operation *op,
|
|
char *dn,
|
|
int method,
|
|
struct berval *cred,
|
|
char **edn
|
|
)
|
|
{
|
|
struct shellinfo *si = (struct shellinfo *) be->be_private;
|
|
FILE *rfp, *wfp;
|
|
int rc;
|
|
|
|
*edn = NULL;
|
|
|
|
if ( si->si_bind == NULL ) {
|
|
send_ldap_result( conn, op, LDAP_UNWILLING_TO_PERFORM, NULL,
|
|
"bind not implemented" );
|
|
return( -1 );
|
|
}
|
|
|
|
if ( (op->o_private = forkandexec( si->si_bind, &rfp, &wfp ))
|
|
== -1 ) {
|
|
send_ldap_result( conn, op, LDAP_OPERATIONS_ERROR, NULL,
|
|
"could not fork/exec" );
|
|
return( -1 );
|
|
}
|
|
|
|
/* write out the request to the bind process */
|
|
fprintf( wfp, "BIND\n" );
|
|
fprintf( wfp, "msgid: %ld\n", op->o_msgid );
|
|
print_suffixes( wfp, be );
|
|
fprintf( wfp, "dn: %s\n", dn );
|
|
fprintf( wfp, "method: %d\n", method );
|
|
fprintf( wfp, "credlen: %lu\n", cred->bv_len );
|
|
fprintf( wfp, "cred: %s\n", cred->bv_val ); /* XXX */
|
|
fclose( wfp );
|
|
|
|
/* read in the results and send them along */
|
|
rc = read_and_send_results( be, conn, op, rfp, NULL, 0 );
|
|
fclose( rfp );
|
|
|
|
return( rc );
|
|
}
|