From 6676c74b6afd6aece8988c19c7b67cda9031efa2 Mon Sep 17 00:00:00 2001 From: Steffen Hansen Date: Wed, 31 Jul 2002 12:37:34 +0000 Subject: [PATCH] new cryptplug function importCertificateFromMem() --- gpgmeplug/ChangeLog | 4 ++++ gpgmeplug/cryptplug.h | 12 +++++++++++- gpgmeplug/gpgmeplug.c | 41 +++++++++++++++++++++++++++++++++++++++-- 3 files changed, 54 insertions(+), 3 deletions(-) diff --git a/gpgmeplug/ChangeLog b/gpgmeplug/ChangeLog index 185bdd2..1acb58d 100644 --- a/gpgmeplug/ChangeLog +++ b/gpgmeplug/ChangeLog @@ -1,3 +1,7 @@ +2002-07-31 Steffen Hansen + + * Renamed importCertificate() to importCertificateWithFPR() and implemented importCertificateFromMem() + 2002-07-03 Werner Koch * gpgmeplug.c (nextCertificate): Actually free the entire array diff --git a/gpgmeplug/cryptplug.h b/gpgmeplug/cryptplug.h index 26a7e90..3c52278 100644 --- a/gpgmeplug/cryptplug.h +++ b/gpgmeplug/cryptplug.h @@ -1849,10 +1849,20 @@ endListCertificates( struct CertIterator* ); Import a certificate that was a result from a search-operation using the startListCertificates(), nextCertificate() funtions. The fingerprint must be passed to identify the key. + + Additional info about the import operation is available in the additional_info parameter. The string must be free'd by the user with free(). */ int -importCertificate( const char* fingerprint ); +importCertificateWithFPR( const char* fingerprint, char** additional_info ); + +/*! + Import a certificate from memory. + + Additional info about the import operation is available in the additional_info parameter. The string must be free'd by the user with free(). +*/ +int +importCertificateFromMem( const char* data, size_t length, char** additional_info ); #ifdef __cplusplus } diff --git a/gpgmeplug/gpgmeplug.c b/gpgmeplug/gpgmeplug.c index 4af5ffe..f603008 100644 --- a/gpgmeplug/gpgmeplug.c +++ b/gpgmeplug/gpgmeplug.c @@ -2234,7 +2234,7 @@ endListCertificates( struct CertIterator* it ) } int -importCertificate( const char* fingerprint ) +importCertificateWithFPR( const char* fingerprint, char** additional_info ) { GpgmeError err; GpgmeCtx ctx; @@ -2296,6 +2296,7 @@ importCertificate( const char* fingerprint ) if( err ) { fprintf( stderr, "gpgme_op_export returned %d\n", err ); free (buf); + *additional_info = gpgme_get_op_info( ctx, 0 ); gpgme_recipients_release( recips ); gpgme_data_release( keydata ); gpgme_release( ctx ); @@ -2305,10 +2306,11 @@ importCertificate( const char* fingerprint ) buf = NULL; err = gpgme_op_import( ctx, keydata ); + *additional_info = gpgme_get_op_info( ctx, 0 ); if( err ) { fprintf( stderr, "gpgme_op_import returned %d\n", err ); gpgme_recipients_release( recips ); - gpgme_data_release( keydata ); + gpgme_data_release( keydata ); gpgme_release( ctx ); return err; } @@ -2318,6 +2320,41 @@ importCertificate( const char* fingerprint ) gpgme_release( ctx ); return 0; } +int +importCertificateFromMem( const char* data, size_t length , char** additional_info ) +{ + GpgmeError err; + GpgmeCtx ctx; + GpgmeData keydata; + + err = gpgme_new( &ctx ); + /*fprintf( stderr, "2: gpgme returned %d\n", err );*/ + if( err != GPGME_No_Error ) { + return err; + } + gpgme_set_protocol( ctx, GPGME_PROTOCOL_CMS ); + gpgme_set_keylist_mode( ctx, GPGME_KEYLIST_MODE_LOCAL ); + + err = gpgme_data_new_from_mem( &keydata, data, length, 0 ); + if( err ) { + fprintf( stderr, "gpgme_data_new returned %d\n", err ); + gpgme_release( ctx ); + return err; + } + + err = gpgme_op_import( ctx, keydata ); + *additional_info = gpgme_get_op_info( ctx, 0 ); + if( err ) { + fprintf( stderr, "gpgme_op_import returned %d\n", err ); + gpgme_data_release( keydata ); + gpgme_release( ctx ); + return err; + } + + gpgme_data_release( keydata ); + gpgme_release( ctx ); + return 0; +} /* == == == == == == == == == == == == == == == == == == == == == == == == == == == -- 2.26.2