diff options
Diffstat (limited to 'security/rdigest/files')
-rw-r--r-- | security/rdigest/files/patch-Makefile.in | 60 | ||||
-rw-r--r-- | security/rdigest/files/patch-digest.1 | 90 | ||||
-rw-r--r-- | security/rdigest/files/patch-digest.c | 210 |
3 files changed, 0 insertions, 360 deletions
diff --git a/security/rdigest/files/patch-Makefile.in b/security/rdigest/files/patch-Makefile.in deleted file mode 100644 index cb5a6e1f303a..000000000000 --- a/security/rdigest/files/patch-Makefile.in +++ /dev/null @@ -1,60 +0,0 @@ -$NetBSD: patch-aa,v 1.2 2005/03/28 20:52:55 agc Exp $ - ---- Makefile.in.orig 2005-03-28 21:39:38.000000000 +0100 -+++ Makefile.in 2005-03-28 21:41:02.000000000 +0100 -@@ -57,7 +57,7 @@ - .c.o: - $(COMPILE) -c $< -o $@ - --all: digest -+all: rdigest - - digest-types.h: bits - ./bits digest-types.h -@@ -65,10 +65,10 @@ - bits: bits.o - $(LINK) $(bits_OBJS) $(LIBS) - --digest: $(digest_OBJS) -+rdigest: $(digest_OBJS) - $(LINK) $(digest_OBJS) $(LIBS) - --check: digest -+check: rdigest - @SHELL@ $(srcdir)/regress.sh - - digest.o: digest-types.h -@@ -84,7 +84,7 @@ - whirlpool.o: digest-types.h - - clean: -- rm -f *.o digest bits digest-types.h -+ rm -f *.o rdigest bits digest-types.h - - distclean: clean - rm -f Makefile config.h -@@ -93,18 +93,18 @@ - maintainer-clean: distclean - rm -f configure config.h.in - --install: digest -+install: rdigest - $(mkinstalldirs) $(DESTDIR)$(bindir) -- @f=`echo digest|sed '$(transform)'`; \ -- echo "$(INSTALL_PROGRAM) digest $(DESTDIR)$(bindir)/$$f"; \ -- $(INSTALL_PROGRAM) digest $(DESTDIR)$(bindir)/$$f -+ @f=`echo rdigest|sed '$(transform)'`; \ -+ echo "$(INSTALL_PROGRAM) rdigest $(DESTDIR)$(bindir)/$$f"; \ -+ $(INSTALL_PROGRAM) rdigest $(DESTDIR)$(bindir)/$$f - $(mkinstalldirs) $(DESTDIR)$(mandir)/man1 -- @f=`echo digest.1|sed '$(transform)'`; \ -+ @f=`echo rdigest.1|sed '$(transform)'`; \ - echo "$(INSTALL_DATA) digest.1 $(DESTDIR)$(mandir)/man1/$$f"; \ - $(INSTALL_DATA) digest.1 $(DESTDIR)$(mandir)/man1/$$f - - uninstall: -- @f=`echo digest|sed '$(transform)'`; \ -+ @f=`echo rdigest|sed '$(transform)'`; \ - echo " rm -f $(DESTDIR)$(bindir)/$$f"; \ - rm -f $(DESTDIR)$(bindir)/$$f - diff --git a/security/rdigest/files/patch-digest.1 b/security/rdigest/files/patch-digest.1 deleted file mode 100644 index 3098b1d69af0..000000000000 --- a/security/rdigest/files/patch-digest.1 +++ /dev/null @@ -1,90 +0,0 @@ -$NetBSD: patch-ab,v 1.3 2005/03/31 05:02:24 atatat Exp $ - ---- digest.1.orig 2005-03-30 23:40:39.000000000 -0500 -+++ digest.1 -@@ -2,5 +2,5 @@ - .\" - .\" --.\" Copyright (c) 2001 Alistair G. Crooks. All rights reserved. -+.\" Copyright (c) 2001-2005 Alistair G. Crooks. All rights reserved. - .\" - .\" Redistribution and use in source and binary forms, with or without -@@ -32,12 +32,13 @@ - .\" - .\" --.Dd March 23, 2005 --.Dt DIGEST 1 -+.Dd March 31, 2005 -+.Dt RDIGEST 1 - .Os - .Sh NAME --.Nm digest --.Nd calculate message digests -+.Nm rdigest -+.Nd calculate message digests of files and directories - .Sh SYNOPSIS - .Nm -+.Op Fl x Ar directory - .Ar algorithm - .Op file ... -@@ -45,6 +46,13 @@ - The - .Nm --utility calculates message digests of files or, -+utility calculates message digests of files, directories, or, - if no file is specified, standard input. -+The -+.Fl x -+option can be used as many times as required to indicate directories -+not to be included in a directory's hash. -+This allows you to skip, eg, CVS subdirectories in a given tree, which -+can have relatively volatile contents not pertinent to the hash. -+.Pp - The list of possible algorithms is: - .Bl -tag -width Ds -@@ -89,4 +97,23 @@ algorithm implementations, which are loc - C library, and was designed to be scalable as new message digest - algorithms are developed. -+The checksum for a directory is implemented as the hash over a list of -+one or two hashes for each of the items in the tree. -+.Bl -bullet -+.It -+For a file, the string -+.Dq f \& -+along with the path make up the data for one hash, and the contents of -+the file is used for the second hash. -+.It -+For a symbolic link, the string -+.Dq l \& -+along with the path to the symbolic link make up the data for one -+hash, and the target of the symbolic link is used for the second hash. -+.It -+For a directory, the string -+.Dq d \& -+along with the path make up the data for one hash. -+There is no second hash for a directory. -+.El - .Pp - The -@@ -95,4 +122,5 @@ utility exits 0 on success, and \*[Gt]0 - .Sh SEE ALSO - .Xr cksum 1 , -+.Xr digest 1 , - .Xr md5 3 , - .Xr rmd160 3 , -@@ -102,8 +130,12 @@ The - .Nm - utility first appeared in --.Nx 1.6 . -+.Nx 2.0 . - .Sh AUTHORS - The -+.Xr digest 1 -+utility was written by Alistair G. Crooks \*[Lt]agc@netbsd.org\*[Gt]. - .Nm --utility was written by --.An Alistair G. Crooks Aq agc@netbsd.org . -+was implemented by Andrew Brown \*[Lt]atatat@netbsd.org\*[Gt] as a -+patch to -+.Xr digest 1 -+to add recursive capabilities. diff --git a/security/rdigest/files/patch-digest.c b/security/rdigest/files/patch-digest.c deleted file mode 100644 index bf6ee0d604a2..000000000000 --- a/security/rdigest/files/patch-digest.c +++ /dev/null @@ -1,210 +0,0 @@ -$NetBSD: patch-ac,v 1.2 2005/01/21 02:18:23 tv Exp $ - ---- digest.c.orig 2005-01-20 21:10:03.000000000 -0500 -+++ digest.c -@@ -43,9 +43,14 @@ __RCSID("$NetBSD: digest.c,v 1.8 2003/07 - #endif - - -+#include <sys/queue.h> -+#include <sys/stat.h> -+ - #ifdef HAVE_ERRNO_H - #include <errno.h> - #endif -+#include <fcntl.h> -+#include <fts.h> - #ifdef HAVE_LOCALE_H - #include <locale.h> - #endif -@@ -147,21 +152,178 @@ digest_file(char *fn, alg_t *alg) - return (rc); - } - -+struct excl { -+ LIST_ENTRY(excl) n; -+ const char *p; -+}; -+ -+LIST_HEAD(, excl) excl; -+ -+static void -+exclude(const char *p) -+{ -+ struct excl *e; -+ -+ e = malloc(sizeof(struct excl)); -+ e->p = p; -+ LIST_INSERT_HEAD(&excl, e, n); -+} -+ -+static int -+skip(const char *p) -+{ -+ struct excl *e; -+ -+#ifdef LIST_FOREACH -+ LIST_FOREACH(e, &excl, n) -+#else -+ for (e = excl.lh_first; e; e = e->n.le_next) -+#endif -+ if (strcmp(e->p, p) == 0) -+ return (1); -+ -+ return (0); -+} -+ -+static int -+compar(const FTSENT **fa, const FTSENT **fb) -+{ -+ return (strcmp((*fa)->fts_name, (*fb)->fts_name)); -+} -+ -+static int -+digest_directory(char *dn, alg_t *alg) -+{ -+ char in[BUFSIZ * 20], dot[2]; -+ char *digest; -+ int cc, rc, l, fd, cwd; -+ char *pathlist[2]; -+ FTS *ftsp; -+ FTSENT *f; -+ -+ rc = 1; -+ l = alg->hash_len * 2; -+ digest = malloc(l + 1); -+ sprintf(dot, "."); -+ pathlist[0] = dot; -+ pathlist[1] = NULL; -+ -+ if ((cwd = open(".", O_RDONLY)) == -1 || -+ chdir(dn) == -1 || -+ (ftsp = fts_open(pathlist, -+ FTS_COMFOLLOW | FTS_NOCHDIR | FTS_PHYSICAL, -+ compar)) == NULL) { -+ (void) fprintf(stderr, "%s\n", dn); -+ free(digest); -+ return (0); -+ } -+ -+ (*alg->hash_init)(&alg->hash_ctx); -+ -+ while ((f = fts_read(ftsp)) != NULL) { -+ /* skip the second pass on a directory */ -+ if (f->fts_info == FTS_DP) -+ continue; -+ -+ /* skip directories named CVS, RCS, or SCCS */ -+ if ((f->fts_info == FTS_NS || -+ S_ISDIR(f->fts_statp->st_mode)) && -+ skip(f->fts_name)) { -+ fts_set(ftsp, f, FTS_SKIP); -+ continue; -+ } -+ -+ /* try to handle things based on stat info */ -+ if (f->fts_info != FTS_NS) { -+ /* only mention directories */ -+ if (S_ISDIR(f->fts_statp->st_mode)) { -+ (*alg->hash_init)(&alg->hash_ctx2); -+ (*alg->hash_update)(&alg->hash_ctx2, "d ", 2); -+ (*alg->hash_update)(&alg->hash_ctx2, f->fts_path, f->fts_pathlen); -+ (*alg->hash_end)(&alg->hash_ctx2, digest); -+ digest[l] = '\n'; -+ (*alg->hash_update)(&alg->hash_ctx, digest, l + 1); -+ -+ /* hash the filename and then the contents separately */ -+ } else if (S_ISREG(f->fts_statp->st_mode)) { -+ if ((fd = open(f->fts_path, O_RDONLY)) != -1) { -+ (*alg->hash_init)(&alg->hash_ctx2); -+ (*alg->hash_update)(&alg->hash_ctx2, "f ", 2); -+ (*alg->hash_update)(&alg->hash_ctx2, f->fts_path, f->fts_pathlen); -+ (*alg->hash_end)(&alg->hash_ctx2, &digest[0]); -+ digest[l] = '\n'; -+ (*alg->hash_update)(&alg->hash_ctx, digest, 33); -+ -+ (*alg->hash_init)(&alg->hash_ctx2); -+ while ((cc = read(fd, in, sizeof(in))) > 0) { -+ (*alg->hash_update)(&alg->hash_ctx2, in, cc); -+ } -+ close(fd); -+ (*alg->hash_end)(&alg->hash_ctx2, digest); -+ digest[l] = '\n'; -+ (*alg->hash_update)(&alg->hash_ctx, digest, l + 1); -+ } else { -+ (void) fprintf(stderr, "%s\n", f->fts_path); -+ rc = 0; -+ } -+ -+ /* hash in symlinks as well, along with the link contents */ -+ } else if (S_ISLNK(f->fts_statp->st_mode)) { -+ if ((cc = readlink(f->fts_path, in, sizeof(in))) > 0) { -+ (*alg->hash_init)(&alg->hash_ctx2); -+ (*alg->hash_update)(&alg->hash_ctx2, "l ", 2); -+ (*alg->hash_update)(&alg->hash_ctx2, f->fts_path, f->fts_pathlen); -+ (*alg->hash_end)(&alg->hash_ctx2, digest); -+ digest[l] = '\n'; -+ (*alg->hash_update)(&alg->hash_ctx, digest, l + 1); -+ -+ (*alg->hash_init)(&alg->hash_ctx2); -+ (*alg->hash_update)(&alg->hash_ctx2, in, cc); -+ (*alg->hash_end)(&alg->hash_ctx2, digest); -+ digest[l] = '\n'; -+ (*alg->hash_update)(&alg->hash_ctx, digest, l + 1); -+ } else { -+ (void) fprintf(stderr, "%s\n", f->fts_path); -+ rc = 0; -+ } -+ } -+ } -+ } -+ -+ fts_close(ftsp); -+ fchdir(cwd); -+ close(cwd); -+ -+ if (rc == 1) { -+ (*alg->hash_end)(&alg->hash_ctx, digest); -+ (void) printf("%s (%s) = %s\n", alg->name, dn, digest); -+ } -+ -+ free(digest); -+ return (rc); -+} -+ - int - main(int argc, char **argv) - { - alg_t *alg; - int rval; - int i; -+ struct stat st; -+ -+ LIST_INIT(&excl); - - #ifdef HAVE_SETLOCALE - (void) setlocale(LC_ALL, ""); - #endif -- while ((i = getopt(argc, argv, "V")) != -1) { -+ while ((i = getopt(argc, argv, "Vx:")) != -1) { - switch(i) { - case 'V': - printf("%s\n", VERSION); - return EXIT_SUCCESS; -+ case 'x': -+ exclude(optarg); -+ break; - } - } - argc -= optind; -@@ -186,7 +348,9 @@ main(int argc, char **argv) - } - } else { - for (i = 0 ; i < argc ; i++) { -- if (!digest_file(argv[i], alg)) { -+ if (stat(argv[i], &st) == -1 || -+ (S_ISREG(st.st_mode) && !digest_file(argv[i], alg)) || -+ (S_ISDIR(st.st_mode) && !digest_directory(argv[i], alg))) { - (void) fprintf(stderr, "%s\n", argv[i]); - rval = EXIT_FAILURE; - } |