diff options
-rw-r--r-- | contrib/ChangeLog | 2 | ||||
-rw-r--r-- | contrib/conf-w32ce-msc/config.h | 4 | ||||
-rw-r--r-- | src/ChangeLog | 5 | ||||
-rw-r--r-- | src/assuan-socket-connect.c | 2 | ||||
-rw-r--r-- | src/gpgcedev.c | 4 | ||||
-rw-r--r-- | src/gpgcemgr.c | 181 |
6 files changed, 176 insertions, 22 deletions
diff --git a/contrib/ChangeLog b/contrib/ChangeLog index 3a876a6..2d2c7b6 100644 --- a/contrib/ChangeLog +++ b/contrib/ChangeLog @@ -6,6 +6,8 @@ 2010-11-15 Werner Koch <[email protected]> + * conf-w32ce-msc/config.h (strdup, strcasecmp): Add macros. + * conf-w32ce-msc/build.mk (copy-static-source): Create stdint.h. (all): Add ws2.lib (clean): New. diff --git a/contrib/conf-w32ce-msc/config.h b/contrib/conf-w32ce-msc/config.h index e9b1f3e..c247377 100644 --- a/contrib/conf-w32ce-msc/config.h +++ b/contrib/conf-w32ce-msc/config.h @@ -179,6 +179,10 @@ /* snprintf is not part of oldnames.lib thus we redefine it here. */ #define snprintf _snprintf +/* We also need to define these functions. */ +#define strdup _strdup +#define strcasecmp _stricmp + #endif /*_ASSUAN_CONFIG_H_INCLUDED*/ diff --git a/src/ChangeLog b/src/ChangeLog index 676f3aa..6098e33 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2010-12-14 Werner Koch <[email protected]> + + * gpgcemgr.c (wchar_to_utf8, utf8_to_wchar, set_show_registry): New. + (main): Add commands --gpgme-log and --gnupg-log. + 2010-11-17 Marcus Brinkmann <[email protected]> * vasprintf.c (int_vasprintf) [HAVE_W32CE_SYSTEM && _MSC_VER]: diff --git a/src/assuan-socket-connect.c b/src/assuan-socket-connect.c index 4ccaf1a..fa3db4b 100644 --- a/src/assuan-socket-connect.c +++ b/src/assuan-socket-connect.c @@ -116,7 +116,7 @@ parse_portno (const char *str, uint16_t *r_port) assuan://[<ip6addr>]:<port> Connect using TCP to PORT of the server with the numerical - IPADDR. Not that the '[' and ']' are literal characters. + IPADDR. Note that '[' and ']' are literal characters. */ gpg_error_t diff --git a/src/gpgcedev.c b/src/gpgcedev.c index 0c7391d..69dcd6f 100644 --- a/src/gpgcedev.c +++ b/src/gpgcedev.c @@ -1464,8 +1464,8 @@ GPG_IOControl (DWORD opnctx_arg, DWORD code, void *inbuf, DWORD inbuflen, } if (opnctx->is_log) { - log_debug ("GPG_IOControl (ctx=%i): error: invalid code for log device\n", - opnctx_arg); + log_debug ("GPG_IOControl (ctx=%i): error: invalid code %u" + " for log device\n", opnctx_arg, (unsigned int)code); SetLastError (ERROR_INVALID_PARAMETER); goto leave; } diff --git a/src/gpgcemgr.c b/src/gpgcemgr.c index 34580e6..9dafbc0 100644 --- a/src/gpgcemgr.c +++ b/src/gpgcemgr.c @@ -30,17 +30,67 @@ #define GPGCEDEV_PREFIX L"GPG" +static char * +wchar_to_utf8 (const wchar_t *string) +{ + int n; + size_t length = wcslen (string); + char *result; + + n = WideCharToMultiByte (CP_UTF8, 0, string, length, NULL, 0, NULL, NULL); + if (n < 0 || (n+1) <= 0) + abort (); + + result = malloc (n+1); + if (!result) + abort (); + n = WideCharToMultiByte (CP_ACP, 0, string, length, result, n, NULL, NULL); + if (n < 0) + abort (); + + result[n] = 0; + return result; +} + + +static wchar_t * +utf8_to_wchar (const char *string) +{ + int n; + size_t nbytes; + wchar_t *result; + + if (!string) + abort (); + + n = MultiByteToWideChar (CP_UTF8, 0, string, -1, NULL, 0); + if (n < 0) + abort (); + nbytes = (size_t)(n+1) * sizeof(*result); + if (nbytes / sizeof(*result) != (n+1)) + abort (); + result = malloc (nbytes); + if (!result) + abort (); + + n = MultiByteToWideChar (CP_UTF8, 0, string, -1, result, n); + if (n < 0) + abort (); + return result; +} + + static int install (void) { HKEY handle; DWORD disp, dw; + int rc; - if (RegCreateKeyEx (HKEY_LOCAL_MACHINE, GPGCEDEV_KEY_NAME, 0, NULL, 0, - KEY_WRITE, NULL, &handle, &disp)) + if ((rc=RegCreateKeyEx (HKEY_LOCAL_MACHINE, GPGCEDEV_KEY_NAME, 0, NULL, 0, + KEY_WRITE, NULL, &handle, &disp))) { - fprintf (stderr, PGM": error creating registry key 1: rc=%d\n", - (int)GetLastError ()); + fprintf (stderr, PGM": error creating registry key 1: rc=%d\n", rc); return 1; } @@ -56,11 +106,10 @@ install (void) fprintf (stderr, PGM": registry key 1 created\n"); - if (RegCreateKeyEx (HKEY_LOCAL_MACHINE, GPGCEDEV_KEY_NAME2, 0, NULL, 0, - KEY_WRITE, NULL, &handle, &disp)) + if ((rc=RegCreateKeyEx (HKEY_LOCAL_MACHINE, GPGCEDEV_KEY_NAME2, 0, NULL, 0, + KEY_WRITE, NULL, &handle, &disp))) { - fprintf (stderr, PGM": error creating registry key 2: rc=%d\n", - (int)GetLastError ()); + fprintf (stderr, PGM": error creating registry key 2: rc=%d\n", rc); return 1; } @@ -128,12 +177,12 @@ enable_debug (int yes) { HKEY handle; DWORD disp; + int rc; - if (RegCreateKeyEx (HKEY_LOCAL_MACHINE, GPGCEDEV_KEY_NAME, 0, NULL, 0, - KEY_WRITE, NULL, &handle, &disp)) + if ((rc=RegCreateKeyEx (HKEY_LOCAL_MACHINE, GPGCEDEV_KEY_NAME, 0, NULL, 0, + KEY_WRITE, NULL, &handle, &disp))) { - fprintf (stderr, PGM": error creating debug registry key: rc=%d\n", - (int)GetLastError ()); + fprintf (stderr, PGM": error creating debug registry key: rc=%d\n", rc); return 1; } @@ -149,12 +198,12 @@ enable_log (int yes) { HKEY handle; DWORD disp; + int rc; - if (RegCreateKeyEx (HKEY_LOCAL_MACHINE, GPGCEDEV_KEY_NAME2, 0, NULL, 0, - KEY_WRITE, NULL, &handle, &disp)) + if ((rc=RegCreateKeyEx (HKEY_LOCAL_MACHINE, GPGCEDEV_KEY_NAME2, 0, NULL, 0, + KEY_WRITE, NULL, &handle, &disp))) { - fprintf (stderr, PGM": error creating debug registry key: rc=%d\n", - (int)GetLastError ()); + fprintf (stderr, PGM": error creating debug registry key: rc=%d\n", rc); return 1; } @@ -335,6 +384,79 @@ gps (void) } #endif + +static void +set_show_registry (const wchar_t *key, const wchar_t *name, const char *value) +{ + HKEY handle; + DWORD disp, nbytes, n1, type; + int rc; + + if ((rc=RegCreateKeyEx (HKEY_LOCAL_MACHINE, key, 0, NULL, 0, + KEY_WRITE, NULL, &handle, &disp))) + { + fprintf (stderr, PGM": error creating registry key: rc=%d\n", rc); + return; + } + + if (value && !stricmp (value, "none")) + { + if ((rc=RegDeleteValue (handle, name))) + fprintf (stderr, PGM": error deleting registry value: rc=%d\n", rc); + } + else if (value) + { + wchar_t *tmp = utf8_to_wchar (value); + if ((rc=RegSetValueEx (handle, name, 0, REG_SZ, + (void*)tmp, wcslen (tmp)*sizeof(wchar_t)))) + fprintf (stderr, PGM": error setting registry value: rc=%d\n", rc); + free (tmp); + } + else + { + nbytes = 2; + if ((rc=RegQueryValueEx (handle, name, 0, NULL, NULL, &nbytes))) + { + if (rc == ERROR_FILE_NOT_FOUND) + fprintf (stderr, PGM": registry value not set\n"); + else + fprintf (stderr, PGM": error reading registry value: rc=%d\n", rc); + } + else + { + char *result = malloc ((n1=nbytes+2)); + if (!result) + fprintf (stderr, PGM": malloc failed: rc=%d\n", + (int)GetLastError ()); + else if ((rc=RegQueryValueEx (handle, name, 0, &type, + (void*)result, &n1))) + { + fprintf (stderr, PGM": error reading registry value (2): " + "rc=%d\n", rc); + free (result); + } + else + { + result[nbytes] = 0; /* Make sure it is a string. */ + result[nbytes+1] = 0; + if (type == REG_SZ) + { + wchar_t *tmp = (void*)result; + result = wchar_to_utf8 (tmp); + free (tmp); + printf ("%s\n", result); + } + else + fprintf (stderr, PGM": registry value is not a string\n"); + free (result); + } + } + } + + RegCloseKey (handle); +} + + int main (int argc, char **argv) @@ -427,7 +549,7 @@ main (int argc, char **argv) DWORD nwritten; int i; - for (i=0; i < 5; i++) + for (i=0; i < 3; i++) { if (!WriteFile (hd, marktwain, strlen (marktwain), &nwritten, NULL)) @@ -449,9 +571,30 @@ main (int argc, char **argv) result = enable_log (1); else if (argc > 1 && !strcmp (argv[1], "--disable-log")) result = enable_log (0); - else + else if (argc > 1 && !strcmp (argv[1], "--gpgme-log")) + set_show_registry (L"Software\\GNU\\gpgme", L"debug", + argc > 2? argv[2] : NULL); + else if (argc > 1 && !strcmp (argv[1], "--gnupg-log")) + set_show_registry (L"Software\\GNU\\GnuPG", L"DefaultLogFile", + argc > 2? argv[2] : NULL); + else { - fprintf (stderr, "usage: " PGM " --register|--deactivate|--activate\n"); + fprintf (stderr, + "usage: " PGM " COMMAND\n" + "Commands are:\n" + " --register Register the GPGCEDEV device\n" + " --deactivate Deactivate the GPGCEDEV device\n" + " --activate Activate the GPGCEDEV devive\n" + " --enable-debug Enable debugging of GPGCEDEV device\n" + " --disable-debug Disable debugging of GPGCEDEV device\n" + " --gravity Show output of the gravity sensor\n" + " --enable-log Enable logging via \"GPG2:\"\n" + " --disable-log Disable logging via \"GPG2:\"\n" + " --log Write a test string to \"GPG2:\"\n" + " --gpgme-log [ARG] Show or set GPGME log output\n" + " --gnupg-log [ARG] Show or set GnuPG default log file\n" + " (No ARG shows, \"none\" disables)\n" + ); result = 1; } |