referral.c revision 5e45752a44935a6b2445ae1c763867d868fa3fbb
/*
*
* Copyright 1999 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*
*
* Comments:
*
*/
#pragma ident "%Z%%M% %I% %E% SMI"
#include <stdio.h>
#include <string.h>
#include "portable.h"
#include "lber.h"
#include "ldap.h"
#include "ldap-private.h"
#include "ldap-int.h"
static BerElement *
char ** ldap_errormsg2referrals(char *errmsg) {
char ** refs;
int count;
char *p, *ref;
return (NULL);
}
LDAP_REF_STR, LDAP_REF_STR_LEN ) == 0 ) {
*p = '\0';
p += LDAP_REF_STR_LEN;
break;
}
}
if ( len < LDAP_REF_STR_LEN ) {
return( NULL);
}
count = 1;
ref = p;
count++;
return (NULL);
}
count = 0;
*p = '\0';
}
if (p != NULL)
*p++ = '\n';
}
return (refs);
}
char *ldap_referral2error_msg(char ** refs)
{
int i;
return (msg);
}
}
}
return (msg);
}
int
{
*count = 0;
return( LDAP_SUCCESS );
}
#ifdef _REENTRANT
#endif
ld->ld_refhoplimit, 0, 0 );
/* XXX report as error in ld->ld_errno? */
#ifdef _REENTRANT
#endif
return( rc );
}
/* find original request */
;
}
; /* Count number of referrals */
Debug(LDAP_DEBUG_TRACE, catgets(slapdcat, 1, 1277, "%d possible referrals to chase\n"), refcnt, 0,0);
rc = 0;
/* parse out & follow referrals */
/* Parse URL */
/* try next URL */
continue;
}
/* Encode previous request with new URL */
Debug(LDAP_DEBUG_TRACE, catgets(slapdcat, 1, -1, "Error while encoding request for referral\n"), 0, 0,0);
/* try next URL */
continue;
}
#ifdef _REENTRANT
#endif
return( rc );
}
#ifdef _REENTRANT
#endif
return( rc );
}
++*count;
Debug(LDAP_DEBUG_TRACE, catgets(slapdcat, 1, -1, "Request has been forwarded to %s\n"), refs[i], 0,0);
}
break;
} else {
}
}
#ifdef _REENTRANT
#endif
rc = LDAP_SUCCESS;
} else {
Debug(LDAP_DEBUG_TRACE, catgets(slapdcat, 1, -1, "No referral was successfully chased (last error %d)\n"), errCode, 0, 0);
}
return( rc );
}
{
int i;
return;
i = 0;
} else {
if ((lr->lr_ref_followed = (char **)realloc((char *)lr->lr_ref_followed, (i+2) * sizeof(char *))) == NULL){
return;
}
}
return;
}
{
int i;
return;
i = 0;
} else {
if ((lr->lr_ref_tofollow = (char **)realloc((char *)lr->lr_ref_tofollow, (i+2) * sizeof(char *))) == NULL){
return;
}
}
return;
}
{
int i;
return (-1);
}
i = 0;
} else {
if ((lr->lr_ref_unfollowed = (char **)realloc((char *)lr->lr_ref_unfollowed, (i+2) * sizeof(char *))) == NULL){
return (-1);
}
}
return (0);
}
int
{
int first;
if ( *referralsp == NULL ) {
first = 1;
+ 1 );
} else {
first = 0;
}
if ( *referralsp == NULL ) {
return( -1 );
}
if ( first ) {
} else {
}
strcat( *referralsp, s );
return( 0 );
}
static BerElement *
{
/*
* XXX this routine knows way too much about how the lber library works!
*/
/*
* all LDAP requests are sequences that start with a message id,
* followed by a sequence that is tagged with the operation code
*/
/* Bad assumption : delete op is not a sequence.
* So we have a special processing for it : it's much simpler
*/
return( NULL );
}
/* Special case : delete request is not a sequence of... */
if (tag == LDAP_REQ_EXTENDED){
/* return error, I don't know how to do it automatically */
return (NULL);
}
return (NULL);
}
if (tag == LDAP_REQ_DELETE) {
return( NULL );
}
/* Check if controls */
hasCtrls = 0;
hasCtrls = 1;
}
}
return (NULL);
}
/* Now add controls if any */
return( NULL );
}
return( NULL );
}
#ifdef LDAP_DEBUG
if ( ldap_debug & LDAP_DEBUG_PACKETS ) {
0, 0, 0 );
}
#endif /* LDAP_DEBUG */
return (ber);
}
return( NULL );
}
/* Keep length and pointer */
/* bind requests have a version number before the DN & other stuff */
LBER_DEFAULT ) {
return( NULL );
}
/* the rest of the request is the DN followed by other stuff */
return( NULL );
}
}
/* see what to do with CONTROLS */
if ( tag == LDAP_REQ_BIND ) {
} else {
}
if ( rc == -1 ) {
return( NULL );
}
if (tag == LDAP_REQ_SEARCH) {
/* Now for SEARCH, decode more of the request */
if (ber_scanf(&tmpber, "iiiib", &scope, &deref, &sizelimit, &timelimit, &attrsonly) == LBER_DEFAULT){
return( NULL );
}
return( NULL );
}
/* We should then decode and check the filter as opposed to ludp->lud_filter */
/* Same for attributes */
/* Later */
}
/* The rest is the same for all requests */
/* Copy Buffer from tmpber.ber_ptr for along - (tmpber.ber_ptr - seqstart) */
/* It's the rest of the request */
return( NULL );
}
return( NULL );
}
}
return( NULL );
}
#ifdef LDAP_DEBUG
if ( ldap_debug & LDAP_DEBUG_PACKETS ) {
0, 0, 0 );
}
#endif /* LDAP_DEBUG */
return( ber );
}
{
break;
}
}
return( lr );
}