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

📄 cldappgpkeyserver.cpp

📁 可以实现对邮件的加密解密以及签名
💻 CPP
📖 第 1 页 / 共 4 页
字号:
					{
						for(i=2; IsntNull(mod[i]); i++)
						{
							mod[i-2]=mod[i];
							mod[i]=NULL;
						}
					}
				}//endif the attributes in the beginning are objectclass and pgpcertid

				err = PGPldapModifySync(mLDAP, dn,	mod);
			}

			/* If upload fails, put key in errorKeySet */
			if( IsPGPError( err ) )
			{
				(void) PGPAddKey( key, errorKeySet );
				ThrowPGPError_( err );
			}

			if( IsntNull( dn ) )
			{
				(void) PGPFreeData( dn );
				dn = NULL;
			}

			if( IsntNull( exportedKey ) )
			{
				(void) PGPFreeData( exportedKey );
				exportedKey = NULL;
			}

			if( IsntNull( mod ) )
			{
				for( i = 0; IsntNull( mod[i] ); i++ )
				{
					if( IsntNull( mod[i]->value ) )
						(void) PGPFreeData( mod[i]->value );
					if( IsntNull( mod[i] ) )
						(void) PGPFreeData( mod[i] );
				}
				(void) PGPFreeData( mod );
				mod = NULL;
			}

			if( IsntNull( szUserID ) )
			{
				for( i = 0; IsntNull( szUserID[i] ); i++ )
					(void) PGPFreeData( szUserID[i] );
				(void) PGPFreeData( szUserID );
				szUserID = NULL;
			}

			if( IsntNull( szSignerID ) )
			{
				for( i = 0; IsntNull( szSignerID[i] ); i++ )
					(void) PGPFreeData( szSignerID[i] );
				(void) PGPFreeData( szSignerID );
				szSignerID = NULL;
			}

			if( IsntNull( szSubKeyID ) )
			{
				for( i = 0; IsntNull( szSubKeyID[i] ); i++ )
					(void) PGPFreeData( szSubKeyID[i] );
				(void) PGPFreeData( szSubKeyID );
				szSubKeyID = NULL;
			}

			if( IsntNull( szSubKeySize ) )
			{
				for( i = 0; IsntNull( szSubKeySize[i] ); i++ )
					(void) PGPFreeData( szSubKeySize[i] );
				(void) PGPFreeData( szSubKeySize );
				szSubKeySize = NULL;
			}

		}

		if( PGPKeyIterRefIsValid( keyIter ) )
			(void) PGPFreeKeyIter( keyIter );
		keyIter = kInvalidPGPKeyIterRef;

		if( PGPKeyListRefIsValid( keyList ) )
			(void) PGPFreeKeyList( keyList );
		keyList = kInvalidPGPKeyListRef;

		if( IsntNull( outKeysThatFailed ) )
			*outKeysThatFailed = errorKeySet;
	}
	catch( ... )
	{
		if( PGPKeyIterRefIsValid( keyIter ) )
			(void) PGPFreeKeyIter( keyIter );

		if( PGPKeyListRefIsValid( keyList ) )
			(void) PGPFreeKeyList( keyList );

		if( IsntNull( dn ) )
			(void) PGPFreeData( dn );

		if( IsntNull( exportedKey ) )
			(void) PGPFreeData( exportedKey );

		if( IsntNull( mod ) )
		{
			for( i = 0; IsntNull( mod[i] ); i++ )
			{
				if( IsntNull( mod[i]->value ) )
					(void) PGPFreeData( mod[i]->value );
				if( IsntNull( mod[i] ) )
					(void) PGPFreeData( mod[i] );
			}
			(void) PGPFreeData( mod );
		}

		if( IsntNull( szUserID ) )
		{
			for( i = 0; IsntNull( szUserID[i] ); i++ )
				(void) PGPFreeData( szUserID[i] );
			(void) PGPFreeData( szUserID );
		}

		if( IsntNull( szSignerID ) )
		{
			for( i = 0; IsntNull( szSignerID[i] ); i++ )
				(void) PGPFreeData( szSignerID[i] );
			(void) PGPFreeData( szSignerID );
		}

		if( IsntNull( szSubKeyID ) )
		{
			for( i = 0; IsntNull( szSubKeyID[i] ); i++ )
				(void) PGPFreeData( szSubKeyID[i] );
			(void) PGPFreeData( szSubKeyID );
		}

		if( IsntNull( szSubKeySize ) )
		{
			for( i = 0; IsntNull( szSubKeySize[i] ); i++ )
				(void) PGPFreeData( szSubKeySize[i] );
			(void) PGPFreeData( szSubKeySize );
		}

		if( mCanceled )
			ThrowPGPError_( kPGPError_UserAbort );
		else 
		{
			(void) PGPldapGetErrno( mLDAP, NULL, &szError, &ldapResult );
			SetErrorString( szError );
			throw;
		}
	}

	return;
}


	void
CLDAPPGPKeyServer::Delete(
	PGPKeySetRef	inKeysToDelete,
	PGPKeySetRef *	outKeysThatFailed)
{
	StPreserveSocketsEventHandler		preserve(this);

	PGPKeyIterRef		keyIter				= kInvalidPGPKeyIterRef;
	PGPKeyListRef		keyList				= kInvalidPGPKeyListRef;
	PGPKeySetRef		errorKeySet			= kInvalidPGPKeySetRef;
	PGPKeyDBObjRef		key					= kInvalidPGPKeyDBObjRef;
	PGPKeyID			keyid;
	char				szCertID[kPGPMaxKeyIDStringSize];
	char *				dn					= NULL;
	char *				szError				= NULL;
	PGPldapResult		ldapResult			= kPGPldapResult_Success;
	PGPError			err					= kPGPError_NoErr;


	SetErrorString( NULL );

	if( !mIsOpen )
		ThrowPGPError_( kPGPError_ServerNotOpen );

	try
	{
		err = pgpEventKeyServer( mContext,
				mEventHandler,
				mEventHandlerData,
				(PGPKeyServerRef) this,
				kPGPKeyServerState_Deleting );
		ThrowIfPGPErrorOrLDAPCanceled_( err );

		err = PGPNewEmptyKeySet( PGPPeekKeySetKeyDB( inKeysToDelete ), &errorKeySet );
		ThrowIfPGPError_( err );

		/* Iterate through inKeysToDelete */
		err = PGPOrderKeySet( inKeysToDelete, kPGPKeyOrdering_Any, FALSE, &keyList );
		ThrowIfPGPError_( err );

		err = PGPNewKeyIter( keyList, &keyIter );
		ThrowIfPGPError_( err );

		while( ( err = PGPKeyIterNextKeyDBObj( keyIter, kPGPKeyDBObjType_Key, &key ) ) 
			== kPGPError_NoErr )
		{
			/* Delete the key */
			err = PGPGetKeyID( key, &keyid );
			ThrowIfPGPError_( err );

			err = PGPGetKeyIDString( &keyid, kPGPKeyIDString_Full, szCertID );
			ThrowIfPGPError_( err );

			dn = (char *)PGPNewData( PGPPeekContextMemoryMgr( mContext ), 
				strlen( kPGPCertIDAttr ) + sizeof( "=" ) + strlen( szCertID ) +
				sizeof( ", " ) +  strlen( mBaseKeySpaceDN ) + 1, 
				kPGPMemoryMgrFlags_Clear );
			if( IsNull( dn ) )
				ThrowPGPError_( kPGPError_OutOfMemory );

			sprintf( dn, "%s=%s, %s", kPGPCertIDAttr, szCertID + 2, mBaseKeySpaceDN );

			err = PGPldapDeleteSync( mLDAP, dn );

			/* If delete fails, put key in errorKeySet */
			if( IsPGPError( err ) )
			{
				err = PGPAddKey( key, errorKeySet );
				ThrowIfPGPError_( err );
			}

			if( IsntNull( dn ) )
			{
				(void) PGPFreeData( dn );
				dn = NULL;
			}

		}

		if( PGPKeyIterRefIsValid( keyIter ) )
			(void) PGPFreeKeyIter( keyIter );
		keyIter = kInvalidPGPKeyIterRef;

		if( PGPKeyListRefIsValid( keyList ) )
			(void) PGPFreeKeyList( keyList );
		keyList = kInvalidPGPKeyListRef;

		if( IsntNull( outKeysThatFailed ) )
			*outKeysThatFailed = errorKeySet;
	}
	catch( ... )
	{
		if( PGPKeyIterRefIsValid( keyIter ) )
			(void) PGPFreeKeyIter( keyIter );

		if( PGPKeyListRefIsValid( keyList ) )
			(void) PGPFreeKeyList( keyList );

		if( IsntNull( dn ) )
			(void) PGPFreeData( dn );

		if( mCanceled )
			ThrowPGPError_( kPGPError_UserAbort );
		else 
		{
			(void) PGPldapGetErrno( mLDAP, NULL, &szError, &ldapResult );
			SetErrorString( szError );
			throw;
		}
	}

	return;
}



	void
CLDAPPGPKeyServer::Disable(
	PGPKeySetRef	inKeysToDisable,
	PGPKeySetRef *	outKeysThatFailed)
{
	StPreserveSocketsEventHandler		preserve(this);

	PGPKeyIterRef		keyIter				= kInvalidPGPKeyIterRef;
	PGPKeyListRef		keyList				= kInvalidPGPKeyListRef;
	PGPKeySetRef		errorKeySet			= kInvalidPGPKeySetRef;
	PGPKeyDBObjRef		key					= kInvalidPGPKeyDBObjRef;
	PGPKeyID			keyid;
	char				szCertID[kPGPMaxKeyIDStringSize];
	char *				dn					= NULL;
	char *				szError				= NULL;
	PGPldapMod			disableMod;
	PGPldapMod *		mod[]				= { &disableMod, NULL };
	PGPldapResult		ldapResult			= kPGPldapResult_Success;
	PGPError			err					= kPGPError_NoErr;


	SetErrorString( NULL );

	if( !mIsOpen )
		ThrowPGPError_( kPGPError_ServerNotOpen );

	try
	{
		err = pgpEventKeyServer( mContext,
				mEventHandler,
				mEventHandlerData,
				(PGPKeyServerRef) this,
				kPGPKeyServerState_Deleting );
		ThrowIfPGPErrorOrLDAPCanceled_( err );

		err = PGPNewEmptyKeySet( PGPPeekKeySetKeyDB( inKeysToDisable ), &errorKeySet );
		ThrowIfPGPError_( err );

		/* Iterate through inKeysToDisable */
		err = PGPOrderKeySet( inKeysToDisable, kPGPKeyOrdering_Any, FALSE, &keyList );
		ThrowIfPGPError_( err );

		err = PGPNewKeyIter( keyList, &keyIter );
		ThrowIfPGPError_( err );

		while( ( err = PGPKeyIterNextKeyDBObj( keyIter, kPGPKeyDBObjType_Key, &key ) ) 
			== kPGPError_NoErr )
		{
			/* Disable the key */
			err = PGPGetKeyID( key, &keyid );
			ThrowIfPGPError_( err );

			err = PGPGetKeyIDString( &keyid, kPGPKeyIDString_Full, szCertID );
			ThrowIfPGPError_( err );

			dn = (char *)PGPNewData( PGPPeekContextMemoryMgr( mContext ), 
				strlen( kPGPCertIDAttr ) + sizeof( "=" ) + strlen( szCertID ) +
				sizeof( ", " ) +  strlen( mBaseKeySpaceDN ) + 1, 
				kPGPMemoryMgrFlags_Clear );
			if( IsNull( dn ) )
				ThrowPGPError_( kPGPError_OutOfMemory );

			sprintf( dn, "%s=%s, %s", kPGPCertIDAttr, szCertID + 2, mBaseKeySpaceDN );

			mod[0]->op		= kPGPldapModOp_Replace;
			mod[0]->type	= (char *) kPGPDisabledAttr;
			mod[0]->value	= (char **) PGPNewData( PGPPeekContextMemoryMgr( mContext ),
									2 * sizeof( char * ),
									kPGPMemoryMgrFlags_Clear );
			if( IsNull( mod[0]->value ) )
				ThrowPGPError_( kPGPError_OutOfMemory );
			mod[0]->value[0] = (char *) "1";
			mod[0]->value[1] = NULL;

			mod[1] = NULL;

			err = PGPldapModifySync( mLDAP, dn, mod );

			/* If disable fails, put key in errorKeySet */
			if( IsPGPError( err ) )
			{
				err = PGPAddKey( key, errorKeySet );
				ThrowIfPGPError_( err );
			}

			if( IsntNull( dn ) )
			{
				(void) PGPFreeData( dn );
				dn = NULL;
			}

			if( IsntNull( mod[0]->value ) )
				(void) PGPFreeData( mod[0]->value );
			mod[0]->value = NULL;

		}

		if( PGPKeyIterRefIsValid( keyIter ) )
			(void) PGPFreeKeyIter( keyIter );
		keyIter = kInvalidPGPKeyIterRef;

		if( PGPKeyListRefIsValid( keyList ) )
			(void) PGPFreeKeyList( keyList );
		keyList = kInvalidPGPKeyListRef;

		if( IsntNull( outKeysThatFailed ) )
			*outKeysThatFailed = errorKeySet;
	}
	catch( ... )
	{
		if( PGPKeyIterRefIsValid( keyIter ) )
			(void) PGPFreeKeyIter( keyIter );

		if( PGPKeyListRefIsValid( keyList ) )
			(void) PGPFreeKeyList( keyList );

		if( IsntNull( dn ) )
			(void) PGPFreeData( dn );

		if( IsntNull( mod[0]->value ) )
			(void) PGPFreeData( mod[0]->value );
		mod[0]->value = NULL;

		if( mCanceled )
			ThrowPGPError_( kPGPError_UserAbort );
		else 
		{
			(void) PGPldapGetErrno( mLDAP, NULL, &szError, &ldapResult );
			SetErrorString( szError );
			throw;
		}
	}

	return;
}





/*__Editor_settings____

	Local Variables:
	tab-width: 4
	End:
	vi: ts=4 sw=4
	vim: si
_____________________*/

⌨️ 快捷键说明

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