📄 cldappgpkeyserver.cpp
字号:
{
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 + -