int ret;
int attempts;
- needs_pass = rsakey_encrypted(filename);
+ /* FIXME: we can acquire comment here and use it in dialog */
+ needs_pass = rsakey_encrypted(filename, NULL);
attempts = 0;
key = malloc(sizeof(*key));
do {
POINT cursorpos;
GetCursorPos(&cursorpos);
PostMessage(hwnd, WM_SYSTRAY2, cursorpos.x, cursorpos.y);
+ } else if (lParam == WM_LBUTTONDBLCLK) {
+ /* Equivalent to IDM_VIEWKEYS. */
+ PostMessage(hwnd, WM_COMMAND, IDM_VIEWKEYS, 0);
}
break;
case WM_SYSTRAY2:
keylist = CreateDialog (instance, MAKEINTRESOURCE(211),
NULL, KeyListProc);
ShowWindow (keylist, SW_SHOWNORMAL);
+ /*
+ * Sometimes the window comes up minimised / hidden
+ * for no obvious reason. Prevent this.
+ */
+ SetForegroundWindow(keylist);
+ SetWindowPos (keylist, HWND_TOP, 0, 0, 0, 0,
+ SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);
}
break;
}
WNDCLASS wndclass;
MSG msg;
+ /*
+ * First bomb out totally if we are already running.
+ */
+ if (FindWindow("Pageant", "Pageant")) {
+ MessageBox(NULL, "Pageant is already running", "Pageant Error",
+ MB_ICONERROR | MB_OK);
+ return 0;
+ }
+
instance = inst;
if (!prev) {
/*
* Process the command line and add RSA keys as listed on it.
- * FIXME: we don't support spaces in filenames here. We should.
*/
{
- char *p = cmdline;
+ char *p;
+ int inquotes = 0;
+ p = cmdline;
while (*p) {
while (*p && isspace(*p)) p++;
if (*p && !isspace(*p)) {
- char *q = p;
- while (*p && !isspace(*p)) p++;
- if (*p) *p++ = '\0';
+ char *q = p, *pp = p;
+ while (*p && (inquotes || !isspace(*p)))
+ {
+ if (*p == '"') {
+ inquotes = !inquotes;
+ p++;
+ continue;
+ }
+ *pp++ = *p++;
+ }
+ if (*pp) {
+ if (*p) p++;
+ *pp++ = '\0';
+ }
add_keyfile(q);
}
}