new cryptplug function importCertificateFromMem()
authorSteffen Hansen <hansen@kde.org>
Wed, 31 Jul 2002 12:37:34 +0000 (12:37 +0000)
committerSteffen Hansen <hansen@kde.org>
Wed, 31 Jul 2002 12:37:34 +0000 (12:37 +0000)
trunk/gpgmeplug/ChangeLog
trunk/gpgmeplug/cryptplug.h
trunk/gpgmeplug/gpgmeplug.c

index 185bdd249bdd490d3b14bf2407c3dc9e9afa1346..1acb58df7e6b17426263c79faff1a42688814434 100644 (file)
@@ -1,3 +1,7 @@
+2002-07-31  Steffen Hansen  <steffen@hrhansen.dk>
+
+       * Renamed importCertificate() to importCertificateWithFPR() and implemented importCertificateFromMem()
+
 2002-07-03  Werner Koch  <wk@gnupg.org>
 
        * gpgmeplug.c (nextCertificate): Actually free the entire array
index 26a7e90ea910732b380c87eb6f1476c4ec6098cc..3c5227894822d6b1a969c5ddd91117d3e37b071a 100644 (file)
@@ -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
 }
index 4af5ffecee1f35a93843cefdb2844ac244ed011b..f603008395183fd4d7175fd292a868ed0335f0b5 100644 (file)
@@ -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;
+}
 
 /*  == == == == == == == == == == == == == == == == == == == == == == == == ==
    ==                                                                      ==