24 |
|
|
25 |
#include "headers.h" |
#include "headers.h" |
26 |
#include "extern.h" |
#include "extern.h" |
27 |
|
#include "rcfile.h" |
28 |
|
|
29 |
#ifdef HAVE_GPG |
#ifdef HAVE_GPG |
30 |
#include <gpgme.h> |
#include <gpgme.h> |
355 |
return; |
return; |
356 |
} |
} |
357 |
|
|
358 |
|
#define KW_GPG_PASSPHRASE 1 |
359 |
|
#define KW_GPG_ENCRYPT 2 |
360 |
|
#define KW_GPG_SIGN 3 |
361 |
|
#define KW_RM_GPG 4 |
362 |
|
#define KW_GPG_HOME 5 |
363 |
|
|
364 |
|
int |
365 |
|
gpg_parser(int method, int key, char *arg, |
366 |
|
void *inv_data, void *func_data, char *line) |
367 |
|
{ |
368 |
|
switch (key) { |
369 |
|
case KW_GPG_PASSPHRASE: |
370 |
|
if (gpg.passphrase) { |
371 |
|
memset(gpg.passphrase, 0, strlen(gpg.passphrase)); |
372 |
|
xfree(gpg.passphrase); |
373 |
|
} |
374 |
|
gpg.passphrase = allocbuf(arg, 0); |
375 |
|
mopt |= M_GPG_PASSPHRASE; |
376 |
|
break; |
377 |
|
|
378 |
|
case KW_GPG_ENCRYPT: |
379 |
|
xfree(gpg.keys); |
380 |
|
gpg.keys = allocbuf(arg, 0); |
381 |
|
gpg.keys = xrealloc(gpg.keys, strlen(gpg.keys) + 2); |
382 |
|
strcat(gpg.keys, ","); |
383 |
|
mopt |= M_GPG_ENCRYPT; |
384 |
|
break; |
385 |
|
|
386 |
|
case KW_GPG_SIGN: |
387 |
|
if (strcmp(arg, "yes") |
388 |
|
|| !(mopt & M_GPG_PASSPHRASE)) { |
389 |
|
if (gpg.passphrase) { |
390 |
|
memset(gpg.passphrase, 0, |
391 |
|
strlen(gpg.passphrase)); |
392 |
|
xfree(gpg.passphrase); |
393 |
|
} |
394 |
|
gpg.passphrase = allocbuf(arg, 0); |
395 |
|
} |
396 |
|
mopt |= M_GPG_SIGN; |
397 |
|
break; |
398 |
|
|
399 |
|
case KW_RM_GPG: |
400 |
|
xfree(gpg.rm_key); |
401 |
|
gpg.rm_key = allocbuf(arg, 0); |
402 |
|
mopt |= M_RMGPG; |
403 |
|
break; |
404 |
|
|
405 |
|
case KW_GPG_HOME: |
406 |
|
setenv("GNUPGHOME", arg, 1); |
407 |
|
break; |
408 |
|
|
409 |
|
default: |
410 |
|
return RC_KW_UNKNOWN; |
411 |
|
} |
412 |
|
return RC_KW_HANDLED; |
413 |
|
} |
414 |
|
|
415 |
|
|
416 |
|
struct rc_kwdef gpg_kw[] = { |
417 |
|
{ "gpg-passphrase", KW_GPG_PASSPHRASE }, |
418 |
|
{ "gpg-encrypt", KW_GPG_ENCRYPT }, |
419 |
|
{ "gpg-sign", KW_GPG_SIGN }, |
420 |
|
{ "rm-gpg", KW_RM_GPG }, |
421 |
|
{ "gpg-home", KW_GPG_HOME }, |
422 |
|
{ NULL }, |
423 |
|
}; |
424 |
|
|
425 |
|
static struct rc_secdef_child gpg_sect_child = { |
426 |
|
NULL, |
427 |
|
CF_CLIENT, |
428 |
|
gpg_kw, |
429 |
|
gpg_parser, |
430 |
|
NULL |
431 |
|
}; |
432 |
|
|
433 |
|
void |
434 |
|
gpg_section_init() |
435 |
|
{ |
436 |
|
struct rc_secdef *sp = anubis_add_section("ALL"); |
437 |
|
|
438 |
|
rc_secdef_add_child(sp, &gpg_sect_child); |
439 |
|
|
440 |
|
sp = anubis_add_section("RULE"); |
441 |
|
rc_secdef_add_child(sp, &gpg_sect_child); |
442 |
|
} |
443 |
|
|
444 |
#endif /* HAVE_GPG */ |
#endif /* HAVE_GPG */ |
445 |
|
|
446 |
/* EOF */ |
/* EOF */ |