diff options
Diffstat (limited to '')
-rw-r--r-- | scd/ChangeLog | 5 | ||||
-rw-r--r-- | scd/scdaemon.c | 30 |
2 files changed, 35 insertions, 0 deletions
diff --git a/scd/ChangeLog b/scd/ChangeLog index 200381ca2..8c63f3b20 100644 --- a/scd/ChangeLog +++ b/scd/ChangeLog @@ -1,3 +1,8 @@ +2008-11-18 Werner Koch <[email protected]> + + * scdaemon.c (make_libversion): New. + (my_strusage): Print libgcrypt and libksba version. + 2008-11-03 Werner Koch <[email protected]> * command.c (server_local_s): Add field DISCONNECT_ALLOWED. diff --git a/scd/scdaemon.c b/scd/scdaemon.c index b65f47e46..8cabec5e6 100644 --- a/scd/scdaemon.c +++ b/scd/scdaemon.c @@ -200,10 +200,30 @@ static int fixed_gcry_pth_init (void) +static char * +make_libversion (const char *libname, const char *(*getfnc)(const char*)) +{ + const char *s; + char *result; + + if (maybe_setuid) + { + gcry_control (GCRYCTL_INIT_SECMEM, 0, 0); /* Drop setuid. */ + maybe_setuid = 0; + } + s = getfnc (NULL); + result = xmalloc (strlen (libname) + 1 + strlen (s) + 1); + strcpy (stpcpy (stpcpy (result, libname), " "), s); + return result; +} + + static const char * my_strusage (int level) { + static char *ver_gcry, *ver_ksba; const char *p; + switch (level) { case 11: p = "scdaemon (GnuPG)"; @@ -212,6 +232,16 @@ my_strusage (int level) case 17: p = PRINTABLE_OS_NAME; break; case 19: p = _("Please report bugs to <" PACKAGE_BUGREPORT ">.\n"); break; + case 20: + if (!ver_gcry) + ver_gcry = make_libversion ("libgcrypt", gcry_check_version); + p = ver_gcry; + break; + case 21: + if (!ver_ksba) + ver_ksba = make_libversion ("libksba", ksba_check_version); + p = ver_ksba; + break; case 1: case 40: p = _("Usage: scdaemon [options] (-h for help)"); break; |