openldap/servers/slapd/back-perl/bind.c
Kurt Zeilenga e2a15115b0 Update slap_conn to maintain client provided dn and bound dn.
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.
1999-01-19 05:10:50 +00:00

81 lines
1.5 KiB
C

/*
* Copyright 1999, John C. Quillan, All rights reserved.
*
* Redistribution and use in source and binary forms are permitted only
* as authorized by the OpenLDAP Public License. A copy of this
* license is available at http://www.OpenLDAP.org/license.html or
* in file LICENSE in the top-level directory of the distribution.
*/
#include "portable.h"
/* init.c - initialize shell backend */
#include <stdio.h>
/* #include <ac/types.h>
#include <ac/socket.h>
*/
#include <EXTERN.h>
#include <perl.h>
#include "slap.h"
#include "perl_back.h"
/**********************************************************
*
* Bind
*
**********************************************************/
int
perl_back_bind(
Backend *be,
Connection *conn,
Operation *op,
char *dn,
int method,
struct berval *cred,
char** edn
)
{
int return_code;
int count;
PerlBackend *perl_back = (PerlBackend *) be->be_private;
*edn = NULL;
pthread_mutex_lock( &perl_interpreter_mutex );
{
dSP; ENTER; SAVETMPS;
PUSHMARK(sp);
XPUSHs( perl_back->pb_obj_ref );
XPUSHs(sv_2mortal(newSVpv( dn , 0)));
XPUSHs(sv_2mortal(newSVpv( cred->bv_val , cred->bv_len)));
PUTBACK;
count = perl_call_method("bind", G_SCALAR);
SPAGAIN;
if (count != 1) {
croak("Big trouble in back_search\n");
}
return_code = POPi;
PUTBACK; FREETMPS; LEAVE;
}
pthread_mutex_unlock( &perl_interpreter_mutex );
Debug( LDAP_DEBUG_ANY, "Perl BIND\n", 0, 0, 0 );
return ( return_code );
}