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

📄 pgpldap.c

📁 PGP8.0源码 请认真阅读您的文件包然后写出其具体功能
💻 C
📖 第 1 页 / 共 5 页
字号:
	PGPValidatePtr( num );

	for( i = 0; IsntNull( values[i] ); i++ )
		; /* NULL */

	*num = i;

	return kPGPError_NoErr;
}


	PGPError
PGPldapCountValuesLen(
	PGPldapContextRef	pgpLDAP,
	PGPberValue **		values,
	PGPSize *			num )
{
	PGPSize				i		= 0;

	PGPValidateLDAPContextRef( pgpLDAP );
	PGPValidatePtr( values );
	PGPValidatePtr( num );

	for( i = 0; IsntNull( values[i] ); i++ )
		; /* NULL */

	*num = i;

	return kPGPError_NoErr;
}

	PGPError
PGPldapModify(
	PGPldapContextRef	pgpLDAP,
	char *				dn,
	PGPldapMod *		mod[],
	PGPldapMessageID *	messageID )
{
	PGPError			err		= kPGPError_NoErr;
	PGPberElementRef	ber		= kInvalidPGPberElementRef;
	PGPUInt32			i		= 0;

	PGPValidateLDAPContextRef( pgpLDAP );
	PGPValidatePtr( mod );
	PGPValidatePtr( messageID );

	if( IsNull( dn ) )
		dn = (char *) "";

	err = pgpNewBERElement( pgpLDAP->memMgr, &ber ); CKERR;

	err = PGPberAppend( ber, "{it{s{",
			++( pgpLDAP->nextMessageID ),
			kPGPldapRequest_Modify,
			dn ); CKERR;

	for( i = 0; mod[i] != NULL; i++ )
	{
		err = PGPberAppend( ber, "{e",
				mod[i]->op & ~kPGPldapModOpMask_UseBERValues ); CKERR;

		if( mod[i]->op & kPGPldapModOpMask_UseBERValues )
		{
			err = PGPberAppend( ber, "{s[V]}}",
				mod[i]->type,
				mod[i]->bvalue ); CKERR;
		}
		else
		{
			err = PGPberAppend( ber, "{s[v]}}",
				mod[i]->type,
				mod[i]->value ); CKERR;
		}
	}

	err = PGPberAppend( ber, "}}}" ); CKERR;

	err = pgpLDAPSend( pgpLDAP, ber ); CKERR;

	*messageID = pgpLDAP->nextMessageID;

error:

	if( PGPberElementRefIsValid( ber ) )
		(void) PGPFreeBERElement( ber );

	return err;
}

	PGPError
PGPldapModifySync(
	PGPldapContextRef	pgpLDAP,
	char *				dn,
	PGPldapMod *		mod[] )
{
	PGPError			err				= kPGPError_NoErr;
	PGPldapMessageID	messageID		= kInvalidPGPldapMessageID;
	PGPldapType			messageType		= kPGPldapType_None;
	PGPldapMessageRef	resultMessage	= kInvalidPGPldapMessageRef;

	PGPValidateLDAPContextRef( pgpLDAP );
	PGPValidatePtr( mod );

	err = PGPldapModify( pgpLDAP, dn, mod, &messageID ); CKERR;

	err = PGPNewLDAPMessage( pgpLDAP, &resultMessage ); CKERR;

	err = PGPldapGetResult( pgpLDAP, messageID, FALSE, NULL, resultMessage,
				&messageType ); CKERR;

error:
	if( PGPldapMessageRefIsValid( resultMessage ) )
		(void) PGPFreeLDAPMessage( resultMessage );

	return( err ? err : PGPldapResultToError( pgpLDAP, pgpLDAP->result ) );
}

	PGPError
PGPldapAdd(
	PGPldapContextRef	pgpLDAP,
	char *				dn,
	PGPldapMod *		mod[],
	PGPldapMessageID *	messageID )
{
	PGPError			err		= kPGPError_NoErr;
	PGPberElementRef	ber		= kInvalidPGPberElementRef;
	PGPUInt32			i		= 0;

	PGPValidateLDAPContextRef( pgpLDAP );
	PGPValidatePtr( mod );
	PGPValidatePtr( messageID );

	if( IsNull( dn ) )
		dn = (char *) "";

	err = pgpNewBERElement( pgpLDAP->memMgr, &ber ); CKERR;

	err = PGPberAppend( ber, "{it{s{",
			++( pgpLDAP->nextMessageID ),
			kPGPldapRequest_Add,
			dn ); CKERR;

	for( i = 0; mod[i] != NULL; i++ )
	{
		if( mod[i]->op & kPGPldapModOpMask_UseBERValues )
		{
			err = PGPberAppend( ber, "{s[V]}",
				mod[i]->type,
				mod[i]->bvalue ); CKERR;
		}
		else
		{
			err = PGPberAppend( ber, "{s[v]}",
				mod[i]->type,
				mod[i]->value ); CKERR;
		}
	}

	err = PGPberAppend( ber, "}}}" ); CKERR;

	err = pgpLDAPSend( pgpLDAP, ber ); CKERR;

	*messageID = pgpLDAP->nextMessageID;

error:

	if( PGPberElementRefIsValid( ber ) )
		(void) PGPFreeBERElement( ber );

	return err;
}

	PGPError
PGPldapAddSync(
	PGPldapContextRef	pgpLDAP,
	char *				dn,
	PGPldapMod *		mod[] )
{
	PGPError			err				= kPGPError_NoErr;
	PGPldapMessageID	messageID		= kInvalidPGPldapMessageID;
	PGPldapType			messageType		= kPGPldapType_None;
	PGPldapMessageRef	resultMessage	= kInvalidPGPldapMessageRef;

	PGPValidateLDAPContextRef( pgpLDAP );
	PGPValidatePtr( mod );

	err = PGPldapAdd( pgpLDAP, dn, mod, &messageID ); CKERR;

	err = PGPNewLDAPMessage( pgpLDAP, &resultMessage ); CKERR;

	err = PGPldapGetResult( pgpLDAP, messageID, FALSE, NULL, resultMessage,
				&messageType ); CKERR;

error:
	if( PGPldapMessageRefIsValid( resultMessage ) )
		(void) PGPFreeLDAPMessage( resultMessage );

	return( err ? err : PGPldapResultToError( pgpLDAP, pgpLDAP->result ) );
}

	PGPError
PGPldapDelete(
	PGPldapContextRef	pgpLDAP,
	char *				dn,
	PGPldapMessageID *	messageID )
{
	PGPError			err		= kPGPError_NoErr;
	PGPberElementRef	ber		= kInvalidPGPberElementRef;

	PGPValidatePtr( messageID );
	PGPValidatePtr( dn );

	err = pgpNewBERElement( pgpLDAP->memMgr, &ber ); CKERR;

	err = PGPberAppend( ber, "{its}",
			++( pgpLDAP->nextMessageID ),
			kPGPldapRequest_Delete,
			dn ); CKERR;

	err = pgpLDAPSend( pgpLDAP, ber ); CKERR;

	*messageID = pgpLDAP->nextMessageID;

error:

	if( PGPberElementRefIsValid( ber ) )
		(void) PGPFreeBERElement( ber );

	return err;
}

	PGPError
PGPldapDeleteSync(
	PGPldapContextRef	pgpLDAP,
	char *				dn )
{
	PGPError			err				= kPGPError_NoErr;
	PGPldapMessageID	messageID		= kInvalidPGPldapMessageID;
	PGPldapType			messageType		= kPGPldapType_None;
	PGPldapMessageRef	resultMessage	= kInvalidPGPldapMessageRef;

	PGPValidateLDAPContextRef( pgpLDAP );

	err = PGPldapDelete( pgpLDAP, dn, &messageID ); CKERR;

	err = PGPNewLDAPMessage( pgpLDAP, &resultMessage ); CKERR;

	err = PGPldapGetResult( pgpLDAP, messageID, FALSE, NULL, resultMessage,
				&messageType ); CKERR;

error:
	if( PGPldapMessageRefIsValid( resultMessage ) )
		(void) PGPFreeLDAPMessage( resultMessage );

	return( err ? err : PGPldapResultToError( pgpLDAP, pgpLDAP->result ) );
}

	PGPError
PGPldapModifyRDN(
	PGPldapContextRef	pgpLDAP,
	char *				dn,
	char *				newRDN,
	PGPBoolean			deleteOldRDN,
	PGPldapMessageID *	messageID )
{
	PGPError			err				= kPGPError_NoErr;
	PGPberElementRef	ber				= kInvalidPGPberElementRef;

	PGPValidateLDAPContextRef( pgpLDAP );
	PGPValidatePtr( dn );
	PGPValidatePtr( newRDN );
	PGPValidatePtr( messageID );

	err = pgpNewBERElement( pgpLDAP->memMgr, &ber ); CKERR

	err = PGPberAppend( ber, "{it{ssb}}",
			++( pgpLDAP->nextMessageID ),
			kPGPldapRequest_ModifyRDN,
			dn,
			newRDN,
			deleteOldRDN ); CKERR;

	err = pgpLDAPSend( pgpLDAP, ber ); CKERR;

	*messageID = pgpLDAP->nextMessageID;

error:

	if( PGPberElementRefIsValid( ber ) )
		(void) PGPFreeBERElement( ber );

	return err;
}

	PGPError
PGPldapModifyRDNSync(
	PGPldapContextRef	pgpLDAP,
	char *				dn,
	char *				newRDN,
	PGPBoolean			deleteOldRDN )
{
	PGPError			err				= kPGPError_NoErr;
	PGPldapMessageID	messageID		= kInvalidPGPldapMessageID;
	PGPldapType			messageType		= kPGPldapType_None;
	PGPldapMessageRef	resultMessage	= kInvalidPGPldapMessageRef;

	PGPValidateLDAPContextRef( pgpLDAP );
	PGPValidatePtr( dn );
	PGPValidatePtr( newRDN );

	err = PGPldapModifyRDN( pgpLDAP, dn, newRDN, deleteOldRDN, &messageID ); CKERR;

	err = PGPNewLDAPMessage( pgpLDAP, &resultMessage ); CKERR;

	err = PGPldapGetResult( pgpLDAP, messageID, FALSE, NULL, resultMessage,
				&messageType ); CKERR;

error:

	if( PGPldapMessageRefIsValid( resultMessage ) )
		(void) PGPFreeLDAPMessage( resultMessage );

	return( err ? err : PGPldapResultToError( pgpLDAP, pgpLDAP->result ) );
}

	PGPError
PGPldapCompare(
	PGPldapContextRef	pgpLDAP,
	char *				dn,
	char *				type,
	char *				value,
	PGPldapMessageID *	messageID )
{
	PGPError			err			= kPGPError_NoErr;
	PGPberElementRef	ber			= kInvalidPGPberElementRef;

	PGPValidateLDAPContextRef( pgpLDAP );
	PGPValidatePtr( dn );
	PGPValidatePtr( type );
	PGPValidatePtr( value );
	PGPValidatePtr( messageID );

	err = pgpNewBERElement( pgpLDAP->memMgr, &ber ); CKERR;

	err = PGPberAppend( ber, "{it{s{ss}}}",
			++( pgpLDAP->nextMessageID ),
			kPGPldapRequest_Compare,
			dn,
			type,
			value ); CKERR;

	err = pgpLDAPSend( pgpLDAP, ber ); CKERR;

	*messageID = pgpLDAP->nextMessageID;

error:

	if( PGPberElementRefIsValid( ber ) )
		(void) PGPFreeBERElement( ber );

	return err;
}

	PGPError
PGPldapCompareSync(
	PGPldapContextRef	pgpLDAP,
	char *				dn,
	char *				type,
	char *				value,
	PGPBoolean *		equal )
{
	PGPError			err				= kPGPError_NoErr;
	PGPldapMessageID	messageID		= kInvalidPGPldapMessageID;
	PGPldapType			messageType		= kPGPldapType_None;
	PGPldapMessageRef	resultMessage	= kInvalidPGPldapMessageRef;

	PGPValidateLDAPContextRef( pgpLDAP );
	PGPValidateLDAPContextRef( pgpLDAP );

	err = PGPldapCompare( pgpLDAP, dn, type, value, &messageID ); CKERR;

	err = PGPNewLDAPMessage( pgpLDAP, &resultMessage ); CKERR;

	err = PGPldapGetResult( pgpLDAP, messageID, FALSE, NULL, resultMessage,
				&messageType ); CKERR;

	err = PGPldapGetCompareResult( pgpLDAP, messageID, equal ); CKERR;

error:
	if( PGPldapMessageRefIsValid( resultMessage ) )
		(void) PGPFreeLDAPMessage( resultMessage );

	return( err ? err : PGPldapResultToError( pgpLDAP, pgpLDAP->result ) );
}

	PGPError
PGPldapGetCompareResult(
	PGPldapContextRef	pgpLDAP,
	PGPldapMessageID	messageID,
	PGPBoolean *		equal )
{
	PGPError			err				= kPGPError_NoErr;
	PGPldapType			messageType		= kPGPldapType_None;
	PGPldapMessageRef	resultMessage	= kInvalidPGPldapMessageRef;

	PGPValidateLDAPContextRef( pgpLDAP );
	PGPValidatePtr( equal );

	err = PGPNewLDAPMessage( pgpLDAP, &resultMessage ); CKERR;

	err = PGPldapGetResult( pgpLDAP, messageID, FALSE, NULL, resultMessage,
				&messageType ); CKERR;

	err = PGPFreeLDAPMessage( resultMessage ); CKERR;

	if( pgpLDAP->result == kPGPldapResult_CompareTrue )
		*equal = TRUE;
	else if( pgpLDAP->result == kPGPldapResult_CompareFalse )
		*equal = FALSE;
	else
	{
		err = PGPldapResultToError( pgpLDAP, pgpLDAP->result );
		goto error;
	}

error:

	return err;
}

	PGPError
PGPldapIsLDAPURL(
	PGPldapContextRef	pgpLDAP,
	char *				url,
	PGPBoolean *		isURL )
{
	PGPError			err			= kPGPError_NoErr;
	PGPSize				len			= 0;
	char *				s			= NULL;

	PGPValidateLDAPContextRef( pgpLDAP );
	PGPValidatePtr( url );
	PGPValidatePtr( isURL );

	len = strlen( (char *)url );

	s = url;

	if( url[0] == '<' )
	{
		if( url[len-1] != '>' )
		{
			*isURL = FALSE;
			goto done;
		}
		s++;
	}

	if( pgpCompareStringsIgnoreCaseN( s, "URL:", 4 ) == 0 )
		s += 4;

	if( ( pgpCompareStringsIgnoreCaseN( s, "ldap://",  7 ) == 0 ) ||
		( pgpCompareStringsIgnoreCaseN( s, "ldaps://", 8 ) == 0 ) )
		*isURL = TRUE;
	else
		*isURL = FALSE;

done:
	return err;
}

	PGPError
PGPldapURLParse(
	PGPldapContextRef	pgpLDAP,
	char *				url,
	PGPldapURLDesc **	outLDAPDesc )
{
	PGPError			err			= kPGPError_NoErr;
	PGPUInt32			len			= 0;
	char *				temp		= NULL;
	char *				s			= NULL;
	char				sPort[16];
	PGPldapURLDesc *	lud			= NULL;
	PGPUInt32			i			= 0;
	PGPUInt32			j			= 0;
	PGPUInt32			numAttrs	= 0;

	PGPValidateLDAPContextRef( pgpLDAP );
	PGPValidatePtr( url );
	PGPValidatePtr( outLDAPDesc );

	/*
	 * LDAP URLs look like this:
	 *	ldap://host:port/dn[?attributes[?scope[?filter]]]
	 * They can also look like:
	 *	<ldapurl> and <URL:ldapurl>
	 */

	len = strlen( url );

	if( url[0] == '<' )
	{
		if( url[len-1] == '>' )
		{
			len -= 2;

			temp = PGPNewData( pgpLDAP->memMgr, len + 1, kPGPMemoryMgrFlags_Clear );
			CKNULL( temp );

			pgpCopyMemory( url + 1, temp, len );
			temp[len] = '\0';
		}
		else
		{
			err = kPGPError_BadParams;
			goto error;
		}
	}
	else
	{
		temp = PGPNewData( pgpLDAP->memMgr, len + 1, kPGPMemoryMgrFlags_Clear );
		CKNULL( temp );

		pgpCopyMemory( url, temp, len );
		temp[len] = '\0';
	}

	s = temp;

	if( pgpCompareStringsIgnoreCaseN( s, "URL:", 4 ) == 0 )
		s += 4;

	if( pgpCompareStringsIgnoreCaseN( s, "ldap://", 7 ) == 0 )
		s += 7;
	else if( pgpCompareStringsIgnoreCaseN( s, "ldaps://", 8 ) == 0)
		s += 8;
	else
	{
		err = kPGPError_LDAPNotLDAPURL;
		goto error;
	}

	err = pgpNewLDAPURLDesc( pgpLDAP, &lud ); CKERR;

	*outLDAPDesc = lud;

	if( *s != '/' )
	{
		/* There is a host in this url */
		for( i = 0; ( s[i] != ':' ) && ( s[i] != '/' ) && ( s[i] != '\0' ); i++ )
			; /* NULL */

		lud->host = PGPNewData( pgpLDAP->memMgr, i + 1, kPGPMemoryMgrFlags_Clear );
		CKNULL( lud->host );

		for( i = 0; ( s[i] != ':' ) && ( s[i] != '/' ) && ( s[i] != '\0' ); i++ )
			lud->host[i] = s[i];
		lud->host[i] = '\0';

		/* Skip the host */
		s += i;
	}

	if( s[0] =

⌨️ 快捷键说明

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