Add error checking for isEmailInCertificate being called with invalid fingerprint parameter.

This commit is contained in:
Karl-Heinz Zimmer 2002-10-31 14:20:47 +00:00
parent 05f1c81b60
commit f1750eee8a

View File

@ -456,62 +456,65 @@ bool warnNoCertificate()
bool isEmailInCertificate( const char* email, const char* fingerprint ) bool isEmailInCertificate( const char* email, const char* fingerprint )
{ {
GpgmeCtx ctx;
GpgmeError err;
GpgmeKey rKey;
int UID_idx;
const char* attr_string;
int emailCount = 0;
bool bOk = false; bool bOk = false;
int fprLen = strlen( fingerprint ); if( fingerprint ){
GpgmeCtx ctx;
GpgmeError err;
GpgmeKey rKey;
int UID_idx;
const char* attr_string;
int fprLen = strlen( fingerprint );
int emailCount = 0;
fprintf( stderr, "gpgmeplug isEmailInCertificate looking for fingerprint %s\n", fingerprint ); fprintf( stderr, "gpgmeplug isEmailInCertificate looking for fingerprint %s\n", fingerprint );
gpgme_new( &ctx ); gpgme_new( &ctx );
gpgme_set_protocol( ctx, GPGMEPLUG_PROTOCOL ); gpgme_set_protocol( ctx, GPGMEPLUG_PROTOCOL );
err = gpgme_op_keylist_start( ctx, fingerprint, 0 ); err = gpgme_op_keylist_start( ctx, fingerprint, 0 );
if ( GPGME_No_Error == err ) {
err = gpgme_op_keylist_next( ctx, &rKey );
gpgme_op_keylist_end( ctx );
if ( GPGME_No_Error == err ) { if ( GPGME_No_Error == err ) {
/* extract email(s) */ err = gpgme_op_keylist_next( ctx, &rKey );
for( UID_idx = 0; gpgme_op_keylist_end( ctx );
(attr_string = gpgme_key_get_string_attr( if ( GPGME_No_Error == err ) {
rKey, GPGME_ATTR_EMAIL, 0, UID_idx ) ); /* extract email(s) */
++UID_idx ){ for( UID_idx = 0;
if (attr_string && *attr_string) { (attr_string = gpgme_key_get_string_attr(
++emailCount; rKey, GPGME_ATTR_EMAIL, 0, UID_idx ) );
fprintf( stderr, "gpgmeplug isEmailInCertificate found email: %s\n", attr_string ); ++UID_idx ){
if( 0 == strcasecmp(attr_string, email) ){ if (attr_string && *attr_string) {
bOk = true; ++emailCount;
break; fprintf( stderr, "gpgmeplug isEmailInCertificate found email: %s\n", attr_string );
}else{ if( 0 == strcasecmp(attr_string, email) ){
attr_string = gpgme_key_get_string_attr( bOk = true;
rKey, GPGME_ATTR_USERID, 0, UID_idx ); break;
if (attr_string && *attr_string == '<'){ }else{
++attr_string; attr_string = gpgme_key_get_string_attr(
if( 0 == strncasecmp(attr_string, email, fprLen) ){ rKey, GPGME_ATTR_USERID, 0, UID_idx );
bOk = true; if (attr_string && *attr_string == '<'){
break; ++attr_string;
if( 0 == strncasecmp(attr_string, email, fprLen) ){
bOk = true;
break;
}
} }
} }
} }
} }
if( !emailCount )
fprintf( stderr, "gpgmeplug isEmailInCertificate found NO EMAIL\n" );
else if( !bOk )
fprintf( stderr, "gpgmeplug isEmailInCertificate found NO MATCHING email\n" );
gpgme_key_release( rKey );
}else{
fprintf( stderr, "gpgmeplug isEmailInCertificate found NO CERTIFICATE for fingerprint %s\n", fingerprint );
} }
if( !emailCount )
fprintf( stderr, "gpgmeplug isEmailInCertificate found NO EMAIL\n" );
else if( !bOk )
fprintf( stderr, "gpgmeplug isEmailInCertificate found NO MATCHING email\n" );
gpgme_key_release( rKey );
}else{ }else{
fprintf( stderr, "gpgmeplug isEmailInCertificate found NO CERTIFICATE for fingerprint %s\n", fingerprint ); fprintf( stderr, "gpgmeplug isEmailInCertificate could NOT open KEYLIST for fingerprint %s\n", fingerprint );
} }
gpgme_release( ctx );
}else{ }else{
fprintf( stderr, "gpgmeplug isEmailInCertificate could NOT open KEYLIST for fingerprint %s\n", fingerprint ); fprintf( stderr, "gpgmeplug isEmailInCertificate called with parameter FINGERPRINT being EMPTY\n" );
} }
gpgme_release( ctx );
return bOk; return bOk;
} }