⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 compare.c

📁 开放源码的ldap系统
💻 C
字号:
/* compare.c - ldbm backend compare routine *//* $OpenLDAP: pkg/ldap/servers/slapd/back-ldbm/compare.c,v 1.8.2.3 2000/06/13 17:57:34 kurt Exp $ *//* * Copyright 1998-2000 The OpenLDAP Foundation, All Rights Reserved. * COPYING RESTRICTIONS APPLY, see COPYRIGHT file */#include "portable.h"#include <stdio.h>#include <ac/socket.h>#include <ac/string.h>#include "slap.h"#include "back-ldbm.h"#include "proto-back-ldbm.h"intldbm_back_compare(    Backend	*be,    Connection	*conn,    Operation	*op,    const char	*dn,    const char	*ndn,	AttributeAssertion *ava){	struct ldbminfo	*li = (struct ldbminfo *) be->be_private;	Entry		*matched;	Entry		*e;	Attribute	*a;	int		rc;	int		manageDSAit = get_manageDSAit( op );	/* get entry with reader lock */	if ( (e = dn2entry_r( be, ndn, &matched )) == NULL ) {		char *matched_dn = NULL;		struct berval **refs = NULL;		if ( matched != NULL ) {			matched_dn = ch_strdup( matched->e_dn );			refs = is_entry_referral( matched )				? get_entry_referrals( be, conn, op, matched )				: NULL;			cache_return_entry_r( &li->li_cache, matched );		} else {			refs = default_referral;		}		send_ldap_result( conn, op, LDAP_REFERRAL,			matched_dn, NULL, refs, NULL );		if( matched != NULL ) {			ber_bvecfree( refs );			free( matched_dn );		}		return( 1 );	}	if (!manageDSAit && is_entry_referral( e ) ) {		/* entry is a referral, don't allow add */		struct berval **refs = get_entry_referrals( be,			conn, op, e );		Debug( LDAP_DEBUG_TRACE, "entry is referral\n", 0,		    0, 0 );		send_ldap_result( conn, op, LDAP_REFERRAL,		    e->e_dn, NULL, refs, NULL );		ber_bvecfree( refs );		rc = 1;		goto return_results;	}	if ( ! access_allowed( be, conn, op, e,		ava->aa_desc, ava->aa_value, ACL_COMPARE ) )	{		send_ldap_result( conn, op, LDAP_INSUFFICIENT_ACCESS,			NULL, NULL, NULL, NULL );		rc = 1;		goto return_results;	}	rc = LDAP_NO_SUCH_ATTRIBUTE;	for(a = attrs_find( e->e_attrs, ava->aa_desc );		a != NULL;		a = attrs_find( a->a_next, ava->aa_desc ))	{		rc = LDAP_COMPARE_FALSE;		if ( value_find( ava->aa_desc, a->a_vals, ava->aa_value ) == 0 )		{			rc = LDAP_COMPARE_TRUE;			break;		}	}	send_ldap_result( conn, op, rc,		NULL, NULL, NULL, NULL );	if( rc != LDAP_NO_SUCH_ATTRIBUTE ) {		rc = 0;	}return_results:;	cache_return_entry_r( &li->li_cache, e );	return( rc );}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -