diff options
| -rw-r--r-- | gpgmeplug/ChangeLog | 4 | ||||
| -rw-r--r-- | gpgmeplug/cryptplug.h | 12 | ||||
| -rw-r--r-- | gpgmeplug/gpgmeplug.c | 41 | 
3 files changed, 54 insertions, 3 deletions
| diff --git a/gpgmeplug/ChangeLog b/gpgmeplug/ChangeLog index 185bdd24..1acb58df 100644 --- a/gpgmeplug/ChangeLog +++ b/gpgmeplug/ChangeLog @@ -1,3 +1,7 @@ +2002-07-31  Steffen Hansen  <[email protected]> + +	* Renamed importCertificate() to importCertificateWithFPR() and implemented importCertificateFromMem() +  2002-07-03  Werner Koch  <[email protected]>  	* gpgmeplug.c (nextCertificate): Actually free the entire array diff --git a/gpgmeplug/cryptplug.h b/gpgmeplug/cryptplug.h index 26a7e90e..3c522789 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 4af5ffec..f6030083 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; +}  /*  == == == == == == == == == == == == == == == == == == == == == == == == ==     ==                                                                      == | 
