Module Name:    src
Committed By:   agc
Date:           Thu May 20 14:42:21 UTC 2010

Modified Files:
        src/crypto/external/bsd/netpgp/dist/src/lib: netpgp.c

Log Message:
extend the resolve_userid() function to take a keyring, and use it for
functions which require a secret key as well.


To generate a diff of this commit:
cvs rdiff -u -r1.52 -r1.53 \
    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.52 src/crypto/external/bsd/netpgp/dist/src/lib/netpgp.c:1.53
--- src/crypto/external/bsd/netpgp/dist/src/lib/netpgp.c:1.52	Thu May 20 00:36:31 2010
+++ src/crypto/external/bsd/netpgp/dist/src/lib/netpgp.c	Thu May 20 14:42:21 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.52 2010/05/20 00:36:31 agc Exp $");
+__RCSID("$NetBSD: netpgp.c,v 1.53 2010/05/20 14:42:21 agc Exp $");
 #endif
 
 #include <sys/types.h>
@@ -294,9 +294,9 @@
 	return 1;
 }
 
-/* set ssh uid to first one in ring */
+/* set ssh uid to first one in pubring */
 static void
-set_ssh_userid(__ops_keyring_t *pubring, char *id, size_t len, int last)
+set_first_pubring(__ops_keyring_t *pubring, char *id, size_t len, int last)
 {
 	uint8_t	*src;
 	int	 i;
@@ -383,7 +383,7 @@
 
 /* resolve the userid */
 static const __ops_key_t *
-resolve_userid(netpgp_t *netpgp, const char *userid)
+resolve_userid(netpgp_t *netpgp, const __ops_keyring_t *keyring, const char *userid)
 {
 	const __ops_key_t	*key;
 	__ops_io_t		*io;
@@ -394,7 +394,7 @@
 		userid += 2;
 	}
 	io = netpgp->io;
-	if ((key = __ops_getkeybyname(io, netpgp->pubring, userid)) == NULL) {
+	if ((key = __ops_getkeybyname(io, keyring, userid)) == NULL) {
 		(void) fprintf(io->errs, "Can't find key '%s'\n", userid);
 	}
 	return key;
@@ -511,7 +511,7 @@
 			return 0;
 		}
 		if ((userid = netpgp_getvar(netpgp, "userid")) == NULL) {
-			set_ssh_userid(netpgp->pubring, id, sizeof(id), last);
+			set_first_pubring(netpgp->pubring, id, sizeof(id), last);
 			netpgp_setvar(netpgp, "userid", userid = id);
 		}
 		if (userid == NULL) {
@@ -611,8 +611,10 @@
 			(pubs.c == 1) ? "" : "s");
 	}
 	for (k = 0 ; k < pubs.c ; k++) {
-		(void) fprintf(fp, "%s", pubs.v[k]);
-		free(pubs.v[k]);
+		if (pubs.v[k]) {
+			(void) fprintf(fp, "%s%s", pubs.v[k], (k < pubs.c - 1) ? "\n" : "");
+			free(pubs.v[k]);
+		}
 	}
 	free(pubs.v);
 	return pubs.c;
@@ -669,11 +671,9 @@
 netpgp_get_key(netpgp_t *netpgp, const char *name, const char *fmt)
 {
 	const __ops_key_t	*key;
-	__ops_io_t		*io;
 	char			*newkey;
 
-	io = netpgp->io;
-	if ((key = resolve_userid(netpgp, name)) == NULL) {
+	if ((key = resolve_userid(netpgp, netpgp->pubring, name)) == NULL) {
 		return NULL;
 	}
 	if (strcmp(fmt, "mr") == 0) {
@@ -696,7 +696,7 @@
 	__ops_io_t		*io;
 
 	io = netpgp->io;
-	if ((key = resolve_userid(netpgp, name)) == NULL) {
+	if ((key = resolve_userid(netpgp, netpgp->pubring, name)) == NULL) {
 		return NULL;
 	}
 	return __ops_export_key(io, key, NULL);
@@ -822,7 +822,8 @@
 		return 0;
 	}
 	suffix = (armored) ? ".asc" : ".gpg";
-	if ((keypair = resolve_userid(netpgp, userid)) == NULL) {
+	/* get key with which to sign */
+	if ((keypair = resolve_userid(netpgp, netpgp->pubring, userid)) == NULL) {
 		return 0;
 	}
 	if (out == NULL) {
@@ -893,14 +894,9 @@
 			"netpgp_sign_file: no filename specified\n");
 		return 0;
 	}
-	if (userid == NULL) {
-		userid = netpgp_getvar(netpgp, "userid");
-	}
 	/* get key with which to sign */
-	keypair = __ops_getkeybyname(io, netpgp->secring, userid);
-	if (keypair == NULL) {
-		(void) fprintf(io->errs, "Userid '%s' not found in secring\n",
-				userid);
+	if ((keypair = resolve_userid(netpgp, netpgp->secring, userid)) == NULL) {
+		(void) fprintf(io->errs, "netpgp_sign_file: userid '%s' not found\n", userid);
 		return 0;
 	}
 	ret = 1;
@@ -1027,14 +1023,7 @@
 			"netpgp_sign_memory: no memory to sign\n");
 		return 0;
 	}
-	if (userid == NULL) {
-		userid = netpgp_getvar(netpgp, "userid");
-	}
-	/* get key with which to sign */
-	keypair = __ops_getkeybyname(io, netpgp->secring, userid);
-	if (keypair == NULL) {
-		(void) fprintf(io->errs, "Userid '%s' not found in keyring\n",
-				userid);
+	if ((keypair = resolve_userid(netpgp, netpgp->secring, userid)) == NULL) {
 		return 0;
 	}
 	ret = 1;
@@ -1155,13 +1144,7 @@
 			"netpgp_encrypt_buf: no memory to encrypt\n");
 		return 0;
 	}
-	if (userid == NULL) {
-		userid = netpgp_getvar(netpgp, "userid");
-	}
-	keypair = __ops_getkeybyname(io, netpgp->pubring, userid);
-	if (keypair == NULL) {
-		(void) fprintf(io->errs, "Userid '%s' not found in keyring\n",
-					userid);
+	if ((keypair = resolve_userid(netpgp, netpgp->pubring, userid)) == NULL) {
 		return 0;
 	}
 	if (in == out) {

Reply via email to