Module Name:    othersrc
Committed By:   agc
Date:           Fri Jul 15 05:37:33 UTC 2011

Modified Files:
        othersrc/crypto/external/bsd/sharedkey/dist/src/libsharedkey:
            libsharedkey.c
        othersrc/crypto/external/bsd/sharedkey/sharedkey: Makefile

Log Message:
move from using a system(3) call to tar to package up the individual shares,
to using libmat(3). Removes the remaining "XXX" from this code.

the getopt2 lib is specified explicitly in the Makefiles for the benefit of
all of the sun2 port users out there.

also fix some lint


To generate a diff of this commit:
cvs rdiff -u -r1.1.1.1 -r1.2 \
    othersrc/crypto/external/bsd/sharedkey/dist/src/libsharedkey/libsharedkey.c
cvs rdiff -u -r1.1.1.1 -r1.2 \
    othersrc/crypto/external/bsd/sharedkey/sharedkey/Makefile

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: othersrc/crypto/external/bsd/sharedkey/dist/src/libsharedkey/libsharedkey.c
diff -u othersrc/crypto/external/bsd/sharedkey/dist/src/libsharedkey/libsharedkey.c:1.1.1.1 othersrc/crypto/external/bsd/sharedkey/dist/src/libsharedkey/libsharedkey.c:1.2
--- othersrc/crypto/external/bsd/sharedkey/dist/src/libsharedkey/libsharedkey.c:1.1.1.1	Mon Mar 21 07:10:42 2011
+++ othersrc/crypto/external/bsd/sharedkey/dist/src/libsharedkey/libsharedkey.c	Fri Jul 15 05:37:33 2011
@@ -39,8 +39,13 @@
 #include <time.h>
 #include <unistd.h>
 
+#include "mat.h"
 #include "sharedkey.h"
 
+#ifndef __UNCONST
+#define __UNCONST(a)	((void *)(unsigned long)(const void *)(a))
+#endif
+
 /* copy from one file to another */
 static int
 copy(const char *fromdir, const char *from, const char *todir, const char *to)
@@ -52,8 +57,8 @@
 	char		*mem;
 	FILE		*fpr;
 	FILE		*fpw;
-	int		 wc;
-	int		 cc;
+	ssize_t		 wc;
+	ssize_t		 cc;
 
 	(void) snprintf(fromname, sizeof(fromname), "%s/%s", fromdir, from);
 	(void) snprintf(toname, sizeof(toname), "%s/%s", todir, to);
@@ -102,14 +107,14 @@
 {
 	va_list	args;
 	char	name[MAXPATHLEN];
-	int	cc;
+	ssize_t	cc;
 
 	va_start(args, fmt);
 	vsnprintf(name, sizeof(name), fmt, args);
 	va_end(args);
 	cc = readlink(name, contents, size);
 	contents[cc] = 0x0;
-	return cc;
+	return (int)cc;
 }
 
 /* varargs stat function */
@@ -144,7 +149,7 @@
 {
 	const char	*last;
 	const char	*s;
-	int	 	 sufflen;
+	size_t	 	 sufflen;
 
 	if ((s = strrchr(name, '/')) == NULL) {
 		s = name;
@@ -240,17 +245,19 @@
 {
 	threshold_t	 threshold;
 	struct stat	 st;
+	const char	*mat = "mattar";
 	netpgp_t	 netpgp;
 	unsigned	 i;
 	size_t		 cc;
 	time_t		 t;
+	char		 archive[MAXPATHLEN];
 	char		 keyrings[MAXPATHLEN];
 	char		 secret[MAXPATHLEN];
 	char		 sharedir[MAXPATHLEN];
 	char		 scratch[MAXPATHLEN];
 	char		 d[MAXPATHLEN];
+	char		 sharenum[32];
 	char		 desc[1024];
-	char		 cmd[8192];
 	char		*share;
 
 	(void) memset(&netpgp, 0x0, sizeof(netpgp));
@@ -289,7 +296,7 @@
 	(void) snprintf(secret, sizeof(secret), "%s/secret.gpg", keyrings);
 	netpgp_encrypt_file(&netpgp, sharedkey->keyid, f, secret, 0);
 	/* share the private key */
-	ssss_init(&threshold, "ssss", (uint8_t)sharedkey->threshold, (uint8_t)sharedkey->shares);
+	ssss_init(&threshold, "ssss", (unsigned)sharedkey->threshold, (unsigned)sharedkey->shares);
 	(void) snprintf(scratch, sizeof(scratch), "%s/secring.gpg", keyrings);
 	ssss_add_share(&threshold, THRESH_SPLIT_SOURCE, scratch, -1);
 	ssss_split(&threshold);
@@ -302,11 +309,10 @@
 		copy(keyrings, "pubring.gpg", sharedir, "pubring.gpg");
 		ssss_get_share(&threshold, i, (void **)(void *)&share, &cc);
 		writeshare(share, cc, "%s/secring.gpg.share", sharedir);
-		(void) snprintf(cmd, sizeof(cmd),
-			"tar -C %s -czf %s/share%.3d.tar.gz share%.3d",
-			sharedkey->splitdir, sharedkey->splitdir, i, i);
-		system(cmd); /* XXX */
-		vsyscall(0600, "chmod", "%s/share%.3d.tar.gz", sharedkey->splitdir, i);
+		snprintf(archive, sizeof(archive), "%s/share%.3d.mat", sharedkey->splitdir, i);
+		snprintf(sharenum, sizeof(sharenum), "share%.3d", i);
+		mat_vtar(__UNCONST(mat), "-cvvf", archive, "-C", sharedkey->splitdir, sharenum, NULL);
+		vsyscall(0600, "chmod", "%s/share%.3d.mat", sharedkey->splitdir, i);
 		recursive_rm(sharedir);
 	}
 	ssss_end(&threshold);
@@ -321,16 +327,14 @@
 {
 	threshold_t	 threshold;
 	struct stat	 st;
+	const char	*mat = "mattar";
 	netpgp_t	 netpgp;
-	//size_t		 size;
 	char		*recoverdir;
-	char		 cmd[8192];
 	char		 keyring[MAXPATHLEN];
 	char		 scratch[MAXPATHLEN];
 	char		 secring[MAXPATHLEN];
 	char		 both[MAXPATHLEN];
 	char		 d[MAXPATHLEN];
-	//char		*share;
 	int		 i;
 
 	(void) snprintf(d, sizeof(d), "/tmp/recover.XXXXXX");
@@ -342,9 +346,8 @@
 		return 0;
 	}
 	for (i = optind ; i < argc ; i++) {
-		(void) snprintf(cmd, sizeof(cmd), "tar -C %s -xzf %s", recoverdir, argv[i]);
-		system(cmd); /* XXX */
-		(void) realbasename(argv[i], ".tar.gz", scratch, sizeof(scratch));
+		mat_vtar(__UNCONST(mat), "-xf", argv[i], "-C", recoverdir, NULL);
+		(void) realbasename(argv[i], ".mat", scratch, sizeof(scratch));
 		if (sharedkey->keyid[0] == 0x0) {
 			vreadlink(sharedkey->keyid, sizeof(sharedkey->keyid), "%s/%s/keyid", recoverdir, scratch);
 		}
@@ -360,7 +363,7 @@
 			copy(both, "pubring.gpg", keyring, "pubring.gpg");
 		}
 		(void) snprintf(scratch, sizeof(scratch), "%s/secring.gpg.share", both);
-		ssss_add_share(&threshold, i - optind, scratch, -1);
+		ssss_add_share(&threshold, (unsigned)(i - optind), scratch, -1);
 	}
 	if (!ssss_combine(&threshold)) {
 		(void) fprintf(stderr, "sharedkey_recover: can't combine shares\n");
@@ -370,6 +373,7 @@
 	ssss_write_share(&threshold, THRESH_JOIN_DEST, secring);
 	(void) memset(&netpgp, 0x0, sizeof(netpgp));
 	netpgp_set_homedir(&netpgp, keyring, NULL, 1);
+	netpgp_setvar(&netpgp, "need seckey", sharedkey->keyid);
 	netpgp_setvar(&netpgp, "userid", sharedkey->keyid);
 	netpgp_init(&netpgp);
 	(void) snprintf(scratch, sizeof(scratch), "%s/secret.gpg", keyring);

Index: othersrc/crypto/external/bsd/sharedkey/sharedkey/Makefile
diff -u othersrc/crypto/external/bsd/sharedkey/sharedkey/Makefile:1.1.1.1 othersrc/crypto/external/bsd/sharedkey/sharedkey/Makefile:1.2
--- othersrc/crypto/external/bsd/sharedkey/sharedkey/Makefile:1.1.1.1	Mon Mar 21 07:10:44 2011
+++ othersrc/crypto/external/bsd/sharedkey/sharedkey/Makefile	Fri Jul 15 05:37:33 2011
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.1.1.1 2011/03/21 07:10:44 agc Exp $
+# $NetBSD: Makefile,v 1.2 2011/07/15 05:37:33 agc Exp $
 
 .include <bsd.own.mk>
 
@@ -8,6 +8,10 @@
 LDADD+=			-L${LIBTHRESHOLDDIR} -lthreshold
 DPADD+=			${LIBTHRESHOLDDIR}/libthreshold.a
 
+LIBMATDIR!=		cd ${.CURDIR}/../../../../../external/bsd/mat/libmat && ${PRINTOBJDIR}
+LDADD+=			-L${LIBMATDIR} -lmat
+DPADD+=			${LIBMATDIR}/libmat.a
+
 LIBSSSSDIR!=		cd ${.CURDIR}/../../ssss/libssss && ${PRINTOBJDIR}
 LDADD+=			-L${LIBSSSSDIR} -lssss
 DPADD+=			${LIBSSSSDIR}/libssss.a
@@ -21,7 +25,7 @@
 BINDIR=/usr/bin
 MAN=sharedkey.1
 WARNS=0 # openssl idea warning
-LDADD+=-lsharedkey -lssss -lthreshold -lnetpgp -lcrypto -lz -lbz2
+LDADD+=-lsharedkey -lssss -lthreshold -lmat -lgetopt2 -lnetpgp -lcrypto -lz -lbz2
 
 EXTSRC=${.CURDIR}/../dist
 .PATH: ${EXTSRC}/src/sharedkey
@@ -30,14 +34,17 @@
 
 split: ${PROG}
 	rm -rf /tmp/share.* /tmp/recover.*
-	./${PROG} -t 2/3 /etc/group
+	env LD_LIBRARY_PATH=${.CURDIR}/../libsharedkey ./${PROG} -t 2/3 /etc/group
 
 join: ${PROG}
-	./${PROG} -o group.recover -r /tmp/share.*/share002.tar.gz /tmp/share.*/share000.tar.gz
+	env LD_LIBRARY_PATH=${.CURDIR}/../libsharedkey ./${PROG} -o group.recover -r /tmp/share.*/share002.mat /tmp/share.*/share000.mat
 
 t: ${PROG}
 	${MAKE} split
-	tar tvzf /tmp/share.*/share000.tar.gz
+	@echo ""
+	mat tvf /tmp/share.*/share000.mat
 	ls -laR /tmp/share.*
+	@echo ""
 	${MAKE} join
+	diff /etc/group group.recover
 

Reply via email to