From e4a6f97d5e9c5a6139fa685100771d20091b790b Mon Sep 17 00:00:00 2001 From: Karl-Heinz Zimmer Date: Thu, 31 Oct 2002 16:30:45 +0000 Subject: [PATCH] Adding support for email addresses includes in '<' and '>'. --- gpgmeplug/gpgmeplug.c | 50 ++++++++++++++++++++++++------------------- 1 file changed, 28 insertions(+), 22 deletions(-) diff --git a/gpgmeplug/gpgmeplug.c b/gpgmeplug/gpgmeplug.c index 15f3fb96..8391593c 100644 --- a/gpgmeplug/gpgmeplug.c +++ b/gpgmeplug/gpgmeplug.c @@ -457,16 +457,22 @@ bool warnNoCertificate() bool isEmailInCertificate( const char* email, const char* fingerprint ) { bool bOk = false; - if( fingerprint ){ + if( searchEmail && fingerprint ){ GpgmeCtx ctx; GpgmeError err; GpgmeKey rKey; int UID_idx; const char* attr_string; - int fprLen = strlen( fingerprint ); + const char* email = searchEmail; + int emailLen = strlen( email ); int emailCount = 0; - fprintf( stderr, "gpgmeplug isEmailInCertificate looking for fingerprint %s\n", fingerprint ); + if (email && *email == '<'){ + ++email; + emailLen -= 2; + } + + fprintf( stderr, "gpgmeplug isEmailInCertificate looking address %s\nin certificate with fingerprint %s\n", email, fingerprint ); gpgme_new( &ctx ); gpgme_set_protocol( ctx, GPGMEPLUG_PROTOCOL ); @@ -478,24 +484,21 @@ bool isEmailInCertificate( const char* email, const char* fingerprint ) if ( GPGME_No_Error == err ) { /* extract email(s) */ for( UID_idx = 0; - (attr_string = gpgme_key_get_string_attr( - rKey, GPGME_ATTR_EMAIL, 0, UID_idx ) ); - ++UID_idx ){ - if (attr_string && *attr_string) { - ++emailCount; - fprintf( stderr, "gpgmeplug isEmailInCertificate found email: %s\n", attr_string ); - if( 0 == strcasecmp(attr_string, email) ){ - bOk = true; - break; - }else{ - attr_string = gpgme_key_get_string_attr( - rKey, GPGME_ATTR_USERID, 0, UID_idx ); - if (attr_string && *attr_string == '<'){ - ++attr_string; - if( 0 == strncasecmp(attr_string, email, fprLen) ){ - bOk = true; - break; - } + (attr_string = gpgme_key_get_string_attr( + rKey, GPGME_ATTR_EMAIL, 0, UID_idx)); + ++UID_idx ){ + if( !attr_string || !*attr_string ) + attr_string = gpgme_key_get_string_attr( + rKey, GPGME_ATTR_USERID, 0, UID_idx ); + if( attr_string ){ + if( *attr_string == '<' ) + ++attr_string; + if( *attr_string ){ + ++emailCount; + fprintf( stderr, "gpgmeplug isEmailInCertificate found email: %s\n", attr_string ); + if( 0 == strncasecmp(attr_string, email, emailLen) ){ + bOk = true; + break; } } } @@ -513,7 +516,10 @@ bool isEmailInCertificate( const char* email, const char* fingerprint ) } gpgme_release( ctx ); }else{ - fprintf( stderr, "gpgmeplug isEmailInCertificate called with parameter FINGERPRINT being EMPTY\n" ); + if( searchEmail ) + fprintf( stderr, "gpgmeplug isEmailInCertificate called with parameter FINGERPRINT being EMPTY\n" ); + else + fprintf( stderr, "gpgmeplug isEmailInCertificate called with parameter EMAIL being EMPTY\n" ); } return bOk; }