/[anubis]/anubis/src/gpg.c
ViewVC logotype

Diff of /anubis/src/gpg.c

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

revision 1.11 by polak, Wed Aug 20 22:36:41 2003 UTC revision 1.12 by polak, Sun Aug 24 11:18:07 2003 UTC
# Line 31  Line 31 
31    
32  struct gpg_struct {  struct gpg_struct {
33          int inited;          int inited;
34          char *keys;          char *sign_keys;
35            char *encryption_keys;
36          char *passphrase;          char *passphrase;
37  };  };
38    
# Line 108  gpg_sign(char *gpg_data) Line 109  gpg_sign(char *gpg_data)
109          memset(buf, 0, sizeof(buf));          memset(buf, 0, sizeof(buf));
110          fail_if_err(gpgme_new(&ctx));          fail_if_err(gpgme_new(&ctx));
111    
112          if (gpg.keys) {          if (gpg.sign_keys) {
113                  err = gpgme_op_keylist_start(ctx, gpg.keys, 0);                  err = gpgme_op_keylist_start(ctx, gpg.sign_keys, 0);
114                  if (!err) {                  if (!err) {
115                          while ((err = gpgme_op_keylist_next(ctx, &key)) == 0)                          while ((err = gpgme_op_keylist_next(ctx, &key)) == 0)
116                                  err = gpgme_signers_add(ctx, key);                                  err = gpgme_signers_add(ctx, key);
117                  }                  }
118                  if (err && err != GPGME_EOF) {                  if (err && err != GPGME_EOF) {
119                          anubis_error(HARD, _("GPGME: cannot list keys: %s"),                          anubis_error(HARD, _("GPGME: Cannot list keys: %s"),
120                                       gpgme_strerror(err));                                       gpgme_strerror(err));
121                          topt |= T_ERROR;                          topt |= T_ERROR;
122                  }                  }
# Line 192  gpg_encrypt(char *gpg_data) Line 193  gpg_encrypt(char *gpg_data)
193          fail_if_err(gpgme_data_new(&out));          fail_if_err(gpgme_data_new(&out));
194          fail_if_err(gpgme_recipients_new(&rset));          fail_if_err(gpgme_recipients_new(&rset));
195    
196          len = strlen(gpg.keys);          len = strlen(gpg.encryption_keys);
197          for (i = 0; i <= len; i++)          for (i = 0; i <= len; i++)
198          {          {
199                  if (gpg.keys[i] == ',') { /* comma found, so add KEY-ID */                  if (gpg.encryption_keys[i] == ','
200                        || gpg.encryption_keys[i] == '\0') {
201                          fail_if_err(gpgme_recipients_add_name_with_validity(rset,                          fail_if_err(gpgme_recipients_add_name_with_validity(rset,
202                                  current_key, GPGME_VALIDITY_FULL));                                  current_key, GPGME_VALIDITY_FULL));
203                          memset(current_key, 0, sizeof(current_key));                          memset(current_key, 0, sizeof(current_key));
204                          j = 0;                          j = 0;
205                  }                  }
206                  else /* it is not a comma, so add char to KEY_ID string */                  else
207                          current_key[j++] = gpg.keys[i];                          current_key[j++] = gpg.encryption_keys[i];
208          }          }
209          fail_if_err(gpgme_op_encrypt(ctx, rset, in, out));          fail_if_err(gpgme_op_encrypt(ctx, rset, in, out));
210          fail_if_err(gpgme_data_rewind(out));          fail_if_err(gpgme_data_rewind(out));
# Line 264  gpg_sign_encrypt(char *gpg_data) Line 266  gpg_sign_encrypt(char *gpg_data)
266    
267          fail_if_err(gpgme_new(&ctx));          fail_if_err(gpgme_new(&ctx));
268    
269          if (gpg.keys) {          if (gpg.sign_keys) {
270                  err = gpgme_op_keylist_start(ctx, gpg.keys, 0);                  err = gpgme_op_keylist_start(ctx, gpg.sign_keys, 0);
271                  if (!err) {                  if (!err) {
272                          while ((err = gpgme_op_keylist_next(ctx, &key)) == 0)                          while ((err = gpgme_op_keylist_next(ctx, &key)) == 0)
273                                  err = gpgme_signers_add(ctx, key);                                  err = gpgme_signers_add(ctx, key);
274                  }                  }
275                  if (err && err != GPGME_EOF) {                  if (err && err != GPGME_EOF) {
276                          anubis_error(HARD, _("GPGME: cannot list keys: %s"),                          anubis_error(HARD, _("GPGME: Cannot list keys: %s"),
277                                       gpgme_strerror(err));                                       gpgme_strerror(err));
278                          topt |= T_ERROR;                          topt |= T_ERROR;
279                  }                  }
# Line 287  gpg_sign_encrypt(char *gpg_data) Line 289  gpg_sign_encrypt(char *gpg_data)
289          fail_if_err(gpgme_data_new(&out));          fail_if_err(gpgme_data_new(&out));
290          fail_if_err(gpgme_recipients_new(&rset));          fail_if_err(gpgme_recipients_new(&rset));
291    
292          len = strlen(gpg.keys);          len = strlen(gpg.encryption_keys);
293          for (i = 0; i <= len; i++)          for (i = 0; i <= len; i++)
294          {          {
295                  if (gpg.keys[i] == ',') { /* comma found, so add KEY-ID */                  if (gpg.encryption_keys[i] == ','
296                        || gpg.encryption_keys[i] == '\0') {
297                          fail_if_err(gpgme_recipients_add_name_with_validity(rset,                          fail_if_err(gpgme_recipients_add_name_with_validity(rset,
298                                  current_key, GPGME_VALIDITY_FULL));                                  current_key, GPGME_VALIDITY_FULL));
299                          memset(current_key, 0, sizeof(current_key));                          memset(current_key, 0, sizeof(current_key));
300                          j = 0;                          j = 0;
301                  }                  }
302                  else /* it is not a comma, so add char to KEY_ID string */                  else
303                          current_key[j++] = gpg.keys[i];                          current_key[j++] = gpg.encryption_keys[i];
304          }          }
305          fail_if_err(gpgme_op_encrypt_sign(ctx, rset, in, out));          fail_if_err(gpgme_op_encrypt_sign(ctx, rset, in, out));
306          fail_if_err(gpgme_data_rewind(out));          fail_if_err(gpgme_data_rewind(out));
# Line 370  gpg_free(void) Line 373  gpg_free(void)
373                  memset(gpg.passphrase, 0, strlen(gpg.passphrase));                  memset(gpg.passphrase, 0, strlen(gpg.passphrase));
374                  xfree(gpg.passphrase);                  xfree(gpg.passphrase);
375          }          }
376          xfree(gpg.keys);          xfree(gpg.sign_keys);
377            xfree(gpg.encryption_keys);
378  }  }
379    
380  #define KW_GPG_PASSPHRASE         1  #define KW_GPG_PASSPHRASE         1
# Line 391  gpg_parser(int method, int key, LIST *ar Line 395  gpg_parser(int method, int key, LIST *ar
395                          xfree(gpg.passphrase);                          xfree(gpg.passphrase);
396                  }                  }
397                  gpg.passphrase = strdup(arg);                  gpg.passphrase = strdup(arg);
398                    arg = NULL;
399                  break;                  break;
400                                    
401          case KW_GPG_ENCRYPT:          case KW_GPG_ENCRYPT:
402                  xfree(gpg.keys);                  xfree(gpg.encryption_keys);
403                  gpg.keys = allocbuf(arg, 0);                  gpg.encryption_keys = allocbuf(arg, 0);
                 gpg.keys = xrealloc(gpg.keys, strlen(gpg.keys) + 2);  
                 strcat(gpg.keys, ",");  
404                  if (gpg.inited == 0 && gpgme_init())                  if (gpg.inited == 0 && gpgme_init())
405                          break;                          break;
406                  gpg_proc(msg, gpg_encrypt);                  gpg_proc(msg, gpg_encrypt);
# Line 405  gpg_parser(int method, int key, LIST *ar Line 408  gpg_parser(int method, int key, LIST *ar
408                                    
409          case KW_GPG_SIGN:          case KW_GPG_SIGN:
410                  if (strcasecmp(arg, "no")) {                  if (strcasecmp(arg, "no")) {
411                          xfree(gpg.keys);                          xfree(gpg.sign_keys);
412                          if (strcasecmp(arg, "yes"))                          if (strcasecmp(arg, "default") && strcasecmp(arg, "yes"))
413                                  gpg.keys = strdup(arg);                                  gpg.sign_keys = strdup(arg);
414                          if (gpg.inited == 0 && gpgme_init())                          if (gpg.inited == 0 && gpgme_init())
415                                  break;                                  break;
416                          gpg_proc(msg, gpg_sign);                          gpg_proc(msg, gpg_sign);
417                  }                  }
418                  break;                  break;
419    
420          case KW_GPG_SIGN_ENCRYPT:          case KW_GPG_SIGN_ENCRYPT: {
421                  xfree(gpg.keys);                  char *p = strchr(arg, ':');
422                  gpg.keys = allocbuf(arg, 0);                  xfree(gpg.encryption_keys);
423                  gpg.keys = xrealloc(gpg.keys, strlen(gpg.keys) + 2);                  if (p) {
424                  strcat(gpg.keys, ",");                          p++;
425                            if (strcasecmp(p, "default") && strcasecmp(p, "yes")) {
426                                    xfree(gpg.sign_keys);
427                                    gpg.sign_keys = allocbuf(p, 0);
428                            }
429                            *--p = '\0';
430                            gpg.encryption_keys = allocbuf(arg, 0);
431                    }
432                    else
433                            gpg.encryption_keys = allocbuf(arg, 0);
434    
435                  if (gpg.inited == 0 && gpgme_init())                  if (gpg.inited == 0 && gpgme_init())
436                          break;                          break;
437                  gpg_proc(msg, gpg_sign_encrypt);                  gpg_proc(msg, gpg_sign_encrypt);
438            }
439                  break;                  break;
440    
441          case KW_GPG_HOME:          case KW_GPG_HOME:
# Line 440  struct rc_kwdef gpg_kw[] = { Line 454  struct rc_kwdef gpg_kw[] = {
454          { "gpg-encrypt",       KW_GPG_ENCRYPT },          { "gpg-encrypt",       KW_GPG_ENCRYPT },
455          { "gpg-sign",          KW_GPG_SIGN },          { "gpg-sign",          KW_GPG_SIGN },
456          { "gpg-sign-encrypt",  KW_GPG_SIGN_ENCRYPT },          { "gpg-sign-encrypt",  KW_GPG_SIGN_ENCRYPT },
457            { "gpg-se",            KW_GPG_SIGN_ENCRYPT },
458          { "gpg-home",          KW_GPG_HOME },          { "gpg-home",          KW_GPG_HOME },
459          { NULL },          { NULL },
460  };  };

Legend:
Removed from v.1.11  
changed lines
  Added in v.1.12

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26