Module Name: src Committed By: agc Date: Fri Sep 10 20:14:19 UTC 2010
Modified Files: src/crypto/external/bsd/netpgp/dist/src/lib: netpgp.c Log Message: Allow the user specification of the secret key file as the --sshkeyfile or -S argument, and check that the public key file exists before trying to read it. To generate a diff of this commit: cvs rdiff -u -r1.75 -r1.76 \ src/crypto/external/bsd/netpgp/dist/src/lib/netpgp.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/crypto/external/bsd/netpgp/dist/src/lib/netpgp.c diff -u src/crypto/external/bsd/netpgp/dist/src/lib/netpgp.c:1.75 src/crypto/external/bsd/netpgp/dist/src/lib/netpgp.c:1.76 --- src/crypto/external/bsd/netpgp/dist/src/lib/netpgp.c:1.75 Wed Sep 8 03:21:22 2010 +++ src/crypto/external/bsd/netpgp/dist/src/lib/netpgp.c Fri Sep 10 20:14:19 2010 @@ -34,7 +34,7 @@ #if defined(__NetBSD__) __COPYRIGHT("@(#) Copyright (c) 2009 The NetBSD Foundation, Inc. All rights reserved."); -__RCSID("$NetBSD: netpgp.c,v 1.75 2010/09/08 03:21:22 agc Exp $"); +__RCSID("$NetBSD: netpgp.c,v 1.76 2010/09/10 20:14:19 agc Exp $"); #endif #include <sys/types.h> @@ -256,20 +256,25 @@ { __ops_keyring_t *pubring; __ops_keyring_t *secring; + struct stat st; unsigned hashtype; char *hash; char f[MAXPATHLEN]; char *filename; if ((filename = netpgp_getvar(netpgp, "sshkeyfile")) == NULL) { + /* set reasonable default for RSA key */ (void) snprintf(f, sizeof(f), "%s/id_rsa.pub", homedir); filename = f; - } else { + } else if (strcmp(&filename[strlen(filename) - 4], ".pub") != 0) { /* got ssh keys, check for pub file name */ - if (strcmp(&filename[strlen(filename) - 4], ".pub") != 0) { - (void) fprintf(stderr, "readsshkeys: bad pubkey filename '%s'\n", filename); - return 0; - } + (void) snprintf(f, sizeof(f), "%s.pub", filename); + filename = f; + } + /* check the pub file exists */ + if (stat(filename, &st) != 0) { + (void) fprintf(stderr, "readsshkeys: bad pubkey filename '%s'\n", filename); + return 0; } if ((pubring = calloc(1, sizeof(*pubring))) == NULL) { (void) fprintf(stderr, "readsshkeys: bad alloc\n");