/[winpt]/trunk/MyGPGME/delete.c
ViewVC logotype

Diff of /trunk/MyGPGME/delete.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 2 by twoaday, Mon Jan 31 11:02:21 2005 UTC revision 22 by twoaday, Wed Aug 10 11:33:35 2005 UTC
# Line 1  Line 1 
1  /* delete.c -  delete a key  /* delete.c -  delete a key
2   *      Copyright (C) 2001 Werner Koch (dd9jn), g10 Code GmbH   *      Copyright (C) 2001 Werner Koch (dd9jn), g10 Code GmbH
3   *      Copyright (C) 2001-2004 Timo Schulz   *      Copyright (C) 2001-2005 Timo Schulz
4   *   *
5   * This file is part of MyGPGME.   * This file is part of MyGPGME.
6   *   *
# Line 59  delete_status_handler (gpgme_ctx_t ctx, Line 59  delete_status_handler (gpgme_ctx_t ctx,
59    
60    
61  static const char *  static const char *
62  delete_command_handler( void * opaque, gpg_status_code_t code, const char * key )  delete_command_handler (void * opaque, gpg_status_code_t code, const char * key)
63  {  {
64      gpgme_ctx_t ctx = opaque;      gpgme_ctx_t ctx = opaque;
65            
66      if( !code )      if( !code )
67          return NULL;          return NULL;
68            
69      if( code == STATUS_GET_BOOL && !strcmp( "delete_key.secret.okay", key )      if (code == STATUS_GET_BOOL && !strcmp ("delete_key.secret.okay", key)
70          || code == STATUS_GET_BOOL && !strcmp( "delete_key.okay", key ) )          || code == STATUS_GET_BOOL && !strcmp ("delete_key.okay", key))
71          return "Y";          return "Y";
72            
73      return NULL;      return NULL;
# Line 75  delete_command_handler( void * opaque, g Line 75  delete_command_handler( void * opaque, g
75    
76    
77  static gpgme_error_t  static gpgme_error_t
78  delete_start( gpgme_ctx_t ctx, const gpgme_key_t key, int allow_secret )  delete_start (gpgme_ctx_t ctx, const gpgme_key_t key,
79                  const char *pattern, int allow_secret)
80  {  {
81      gpgme_error_t rc = 0;      gpgme_error_t rc = 0;
82      const char * s;      const char *s;
83            
84      if( !key ) {      if (!key && !pattern) {
85          rc = mk_error( Invalid_Value );          rc = mk_error (Invalid_Value);
86          goto leave;          goto leave;
87      }      }
88    
89      fail_on_pending_request( ctx );      fail_on_pending_request (ctx);
90      ctx->pending = 1;      ctx->pending = 1;
91    
92      _gpgme_gpg_release( &ctx->gpg );          _gpgme_gpg_release (&ctx->gpg);
93      rc = _gpgme_gpg_new( &ctx->gpg );      rc = _gpgme_gpg_new (&ctx->gpg);
94      if( rc )      if( rc )
95          goto leave;          goto leave;
96            
# Line 103  delete_start( gpgme_ctx_t ctx, const gpg Line 104  delete_start( gpgme_ctx_t ctx, const gpg
104                           "--delete-secret-and-public-key" : "--delete-key" );                           "--delete-secret-and-public-key" : "--delete-key" );
105            
106      _gpgme_gpg_add_arg ( ctx->gpg, "--" );      _gpgme_gpg_add_arg ( ctx->gpg, "--" );
107      s = gpgme_key_get_string_attr ( key, GPGME_ATTR_KEYID, NULL, 0 );      if (key != NULL) {
108      if( !s ) {          s = gpgme_key_get_string_attr (key, GPGME_ATTR_KEYID, NULL, 0);
109          rc = mk_error( Invalid_Key );          if(!s) {
110          goto leave;              rc = mk_error (Invalid_Key);
111      }              goto leave;
112      _gpgme_gpg_add_arg( ctx->gpg, s );          }
113        }
114        else
115            s = pattern;
116        _gpgme_gpg_add_arg (ctx->gpg, s);
117      rc = _gpgme_gpg_spawn( ctx->gpg, ctx ); /* do it */      rc = _gpgme_gpg_spawn( ctx->gpg, ctx ); /* do it */
118    
119  leave:  leave:
# Line 120  leave: Line 125  leave:
125  } /* delete_start */  } /* delete_start */
126    
127    
128    static gpgme_error_t
129    get_delete_result (gpgme_ctx_t ctx)
130    {
131        gpgme_error_t err = 0;
132    
133        if (ctx->problem == No_Such_Key)
134            err = mk_error (Invalid_Key);
135        else if (ctx->problem == Delete_Seckey_First)
136            err = mk_error( Conflict );
137        else if (gpgme_get_process_rc (ctx))
138            err = mk_error (General_Error);
139        return err;
140    }
141    
142    
143  gpgme_error_t  gpgme_error_t
144  gpgme_op_delete( gpgme_ctx_t ctx, const gpgme_key_t key, int allow_secret )  gpgme_op_delete (gpgme_ctx_t ctx, const gpgme_key_t key, int allow_secret)
145  {  {
146      gpgme_error_t err;      gpgme_error_t err;
147            
148      err = delete_start( ctx, key, allow_secret );      err = delete_start (ctx, key, NULL, allow_secret);
149      if( !err ) {      if (!err) {
150          gpgme_wait( ctx, 1 );          gpgme_wait (ctx, 1);
151          ctx->pending = 0;          ctx->pending = 0;
152          if( ctx->problem == No_Such_Key )          err = get_delete_result (ctx);
             err = mk_error( Invalid_Key );  
         else if( ctx->problem == Delete_Seckey_First )  
             err = mk_error( Conflict );  
         else if( gpgme_get_process_rc( ctx ) )  
             err = mk_error( General_Error );  
153      }      }
   
154      return err;      return err;
155  } /* gpgme_op_delete */  } /* gpgme_op_delete */
156    
157    
158  /* interface */  /* interface */
159  gpgme_error_t  gpgme_error_t
160  gpgme_op_delete_key( const char * keyid, int allow_secret )  gpgme_op_delete_key (const char *keyid, int allow_secret)
161  {  {
162      gpgme_error_t err = 0;      gpgme_error_t err = 0;
163      gpgme_key_t key = NULL;      gpgme_key_t key = NULL;
164      gpgme_ctx_t ctx;      gpgme_ctx_t ctx;
165    
166      if( !keyid )      if (!keyid)
167          return mk_error( Invalid_Value );          return mk_error (Invalid_Value);
168            
169      err = gpgme_new( &ctx );      err = gpgme_new(&ctx);
170      if( !err )      if (!err)
171          key = _gpgme_key_new_fromkeyid( keyid );                  key = _gpgme_key_new_fromkeyid (keyid);
172      if( !err && key )      if (!err && key)
173          err = gpgme_op_delete( ctx, key, allow_secret );              err = gpgme_op_delete (ctx, key, allow_secret);
174    
175      gpgme_release( ctx );              gpgme_release (ctx);
176      gpgme_key_release( key );      gpgme_key_release (key);
177      return err;      return err;
178  } /* gpgme_op_key_delete */  } /* gpgme_op_key_delete */
179    
# Line 168  gpgme_error_t Line 182  gpgme_error_t
182  gpgme_op_delete_keys (gpgme_recipients_t recp, int allow_secret)  gpgme_op_delete_keys (gpgme_recipients_t recp, int allow_secret)
183  {        {      
184      gpgme_error_t err;      gpgme_error_t err;
185        gpgme_ctx_t ctx;
186      struct user_id_s * u;      struct user_id_s * u;
187        char *list;
188        size_t n=0;
189            
190      if (!recp)      if (!recp)
191          return mk_error (Invalid_Value);          return mk_error (Invalid_Value);
192    
193        for  (u=recp->list; u; u=u->next)
194            n += strlen (u->name) + 1 + 2;
195        list = calloc (1, n+1);
196        if (!list)
197            mk_error (Out_Of_Core);
198    
199      for (u = recp->list; u; u = u->next) {      for (u = recp->list; u; u = u->next) {
200          err = gpgme_op_delete_key (u->name, allow_secret);          strcat (list, u->name);
201          if (err)          strcat (list, " ");
202              break;      }
203    
204        /*DEBUG1 ("delete_keys: '%s'\r\n", list);*/
205        err = gpgme_new (&ctx);
206        if (err)
207            return err;
208        err = delete_start (ctx, NULL, list, allow_secret);
209        if (!err) {
210            gpgme_wait (ctx, 1);
211            ctx->pending = 0;
212            err = get_delete_result (ctx);
213      }      }
214            
215        gpgme_release (ctx);
216        safe_free (list);
217      return err;      return err;
218  } /* gpgme_op_delete_keys */  } /* gpgme_op_delete_keys */

Legend:
Removed from v.2  
changed lines
  Added in v.22

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26