Репозиторий Sisyphus
Последнее обновление: 1 октября 2023 | Пакетов: 18631 | Посещений: 37332450
en ru br
Репозитории ALT
S:3.7.20050808-alt2.qa1.1
5.1: 3.7.20050808-alt1.1.1
4.1: 3.7.20050808-alt1.1
4.0: 3.7.20050808-alt1.1
3.0: 2.7-alt5
www.altlinux.org/Changes

Группа :: Работа с файлами
Пакет: mtree

 Главная   Изменения   Спек   Патчи   Sources   Загрузить   Gear   Bugs and FR  Repocop 

Патч: mtree-3.7.20050808-owl-alt-linux.patch
Скачать


diff -urpN mtree-3.7.20050808-fixes/Makefile mtree-3.7.20050808-linux/Makefile
--- mtree-3.7.20050808-fixes/Makefile	Thu Jan  1 00:00:00 1970
+++ mtree-3.7.20050808-linux/Makefile	Sun Jul 28 08:18:17 2002
@@ -0,0 +1,2 @@
+all clean:
+	$(MAKE) -C usr.sbin/mtree $@
diff -urpN mtree-3.7.20050808-fixes/lib/libc/gen/setmode.c mtree-3.7.20050808-linux/lib/libc/gen/setmode.c
--- mtree-3.7.20050808-fixes/lib/libc/gen/setmode.c	Mon Aug  8 07:19:51 2005
+++ mtree-3.7.20050808-linux/lib/libc/gen/setmode.c	Mon Aug  8 07:19:51 2005
@@ -208,13 +208,13 @@ setmode(const char *p)
 	if (isdigit(*p)) {
 		perml = strtoul(p, &ep, 8);
 		/* The test on perml will also catch overflow. */
-		if (*ep != '\0' || (perml & ~(STANDARD_BITS|S_ISTXT))) {
+		if (*ep != '\0' || (perml & ~(STANDARD_BITS|S_ISVTX))) {
 			free(saveset);
 			errno = ERANGE;
 			return (NULL);
 		}
 		perm = (mode_t)perml;
-		ADDCMD('=', (STANDARD_BITS|S_ISTXT), perm, mask);
+		ADDCMD('=', (STANDARD_BITS|S_ISVTX), perm, mask);
 		set->cmd = 0;
 		return (saveset);
 	}
@@ -251,7 +251,7 @@ getop:		if ((op = *p++) != '+' && op != 
 		if (op == '=')
 			equalopdone = 0;
 
-		who &= ~S_ISTXT;
+		who &= ~S_ISVTX;
 		for (perm = 0, permXbits = 0;; ++p) {
 			switch (*p) {
 			case 'r':
@@ -271,8 +271,8 @@ getop:		if ((op = *p++) != '+' && op != 
 				 * only "other" bits ignore sticky.
 				 */
 				if (who == 0 || (who & ~S_IRWXO)) {
-					who |= S_ISTXT;
-					perm |= S_ISTXT;
+					who |= S_ISVTX;
+					perm |= S_ISVTX;
 				}
 				break;
 			case 'w':
diff -urpN mtree-3.7.20050808-fixes/usr.sbin/mtree/Makefile mtree-3.7.20050808-linux/usr.sbin/mtree/Makefile
--- mtree-3.7.20050808-fixes/usr.sbin/mtree/Makefile	Sun May  2 17:55:53 2004
+++ mtree-3.7.20050808-linux/usr.sbin/mtree/Makefile	Mon Aug  8 07:23:09 2005
@@ -1,8 +1,33 @@
 #	$OpenBSD: Makefile,v 1.7 2004/05/02 17:55:53 millert Exp $
 
+CC = gcc
+LD = gcc
+RM = rm -f
+ifndef CFLAGS
+CFLAGS = -O2 -fomit-frame-pointer
+endif
+CFLAGS += -I. -I../../include
+CFLAGS += -Wall -Dlint
+LDFLAGS = -s
+LDLIBS = -lcrypto
+
 PROG=	mtree
 #CFLAGS+=-DDEBUG
 MAN=	mtree.8
-SRCS=	compare.c crc.c create.c misc.c mtree.c spec.c verify.c
 
-.include <bsd.prog.mk>
+SRCS=	compare.c crc.c create.c misc.c mtree.c spec.c verify.c \
+	hashfile.c \
+	../../lib/libc/gen/setmode.c \
+	../../lib/libc/gen/vis.c \
+	../../lib/libc/gen/unvis.c
+
+all: $(PROG)
+
+$(PROG): $(SRCS:.c=.o)
+	$(LD) $(LDFLAGS) $+ $(LDLIBS) -o $@
+
+.c.o:
+	$(CC) -c $(CFLAGS) $< -o $@
+
+clean:
+	$(RM) $(PROG) $(SRCS:.c=.o)
diff -urpN mtree-3.7.20050808-fixes/usr.sbin/mtree/compare.c mtree-3.7.20050808-linux/usr.sbin/mtree/compare.c
--- mtree-3.7.20050808-fixes/usr.sbin/mtree/compare.c	Mon Aug  8 13:59:53 2005
+++ mtree-3.7.20050808-linux/usr.sbin/mtree/compare.c	Mon Aug  8 07:17:51 2005
@@ -38,6 +38,7 @@ static const char rcsid[] = "$OpenBSD: c
 #endif
 #endif /* not lint */
 
+#define _GNU_SOURCE
 #include <sys/param.h>
 #include <sys/stat.h>
 #include <fcntl.h>
@@ -45,12 +46,11 @@ static const char rcsid[] = "$OpenBSD: c
 #include <errno.h>
 #include <stdio.h>
 #include <time.h>
+#include <sys/time.h>
 #include <unistd.h>
-#include <md5.h>
-#include <sha1.h>
-#include <rmd160.h>
 #include "mtree.h"
 #include "extern.h"
+#include "hashfile.h"
 
 extern int lflag, tflag, uflag;
 
@@ -189,7 +189,7 @@ typeerr:		LABEL;
 	}
 	if (s->flags & F_SIZE && s->st_size != p->fts_statp->st_size) {
 		LABEL;
-		(void)printf("%ssize (%qd, %qd)\n",
+		(void)printf("%ssize (%lu, %lu)\n",
 		    tab, s->st_size, p->fts_statp->st_size);
 		tab = "\t";
 	}
@@ -205,14 +205,15 @@ typeerr:		LABEL;
 		struct timeval tv[2];
 
 		TIMESPEC_TO_TIMEVAL(&tv[0], &s->st_mtimespec);
-		TIMESPEC_TO_TIMEVAL(&tv[1], &p->fts_statp->st_mtimespec);
+		tv[1].tv_sec = p->fts_statp->st_mtime;
+		tv[1].tv_usec = 0;
 		if (tv[0].tv_sec != tv[1].tv_sec ||
 		    tv[0].tv_usec != tv[1].tv_usec) {
 			LABEL;
 			(void)printf("%smodification time (%.24s, ",
 			    tab, ctime(&s->st_mtimespec.tv_sec));
 			(void)printf("%.24s",
-			    ctime(&p->fts_statp->st_mtimespec.tv_sec));
+			    ctime(&p->fts_statp->st_mtime));
 			if (tflag) {
 				tv[1] = tv[0];
 				if (utimes(p->fts_accpath, tv))
@@ -299,6 +300,7 @@ typeerr:		LABEL;
 		LABEL;
 		(void)printf("%slink ref (%s, %s)\n", tab, cp, s->slink);
 	}
+#if 0
 	if (s->flags & F_FLAGS && s->file_flags != p->fts_statp->st_flags) {
 		char *db_flags = NULL;
 		char *cur_flags = NULL;
@@ -336,6 +338,7 @@ typeerr:		LABEL;
 			free(cur_flags);
 		}
 	}
+#endif
 	return (label);
 }
 
diff -urpN mtree-3.7.20050808-fixes/usr.sbin/mtree/create.c mtree-3.7.20050808-linux/usr.sbin/mtree/create.c
--- mtree-3.7.20050808-fixes/usr.sbin/mtree/create.c	Mon Aug  8 16:56:53 2005
+++ mtree-3.7.20050808-linux/usr.sbin/mtree/create.c	Mon Aug  8 16:58:25 2005
@@ -38,6 +38,7 @@ static const char rcsid[] = "$OpenBSD: c
 #endif
 #endif /* not lint */
 
+#define _GNU_SOURCE
 #include <sys/param.h>
 #include <sys/stat.h>
 #include <time.h>
@@ -51,11 +52,9 @@ static const char rcsid[] = "$OpenBSD: c
 #include <stdio.h>
 #include <stdarg.h>
 #include <vis.h>
-#include <md5.h>
-#include <sha1.h>
-#include <rmd160.h>
 #include "mtree.h"
 #include "extern.h"
+#include "hashfile.h"
 
 #define	INDENTNAMELEN	15
 #define	MAXLINELEN	80
@@ -197,17 +196,16 @@ statf(int indent, FTSENT *p)
 	if (keys & F_NLINK && p->fts_statp->st_nlink != 1)
 		output(indent, &offset, "nlink=%u", p->fts_statp->st_nlink);
 	if (keys & F_SIZE && S_ISREG(p->fts_statp->st_mode))
-		output(indent, &offset, "size=%qd", p->fts_statp->st_size);
+		output(indent, &offset, "size=%lu", p->fts_statp->st_size);
 	if (keys & F_TIME)
-		output(indent, &offset, "time=%ld.%ld",
-		    p->fts_statp->st_mtimespec.tv_sec,
-		    p->fts_statp->st_mtimespec.tv_nsec);
+		output(indent, &offset, "time=%ld.0",
+		    p->fts_statp->st_mtime);
 	if (keys & F_CKSUM && S_ISREG(p->fts_statp->st_mode)) {
 		if ((fd = open(p->fts_accpath, MTREE_O_FLAGS, 0)) < 0 ||
 		    crc(fd, &val, &len))
 			error("%s: %s", p->fts_accpath, strerror(errno));
 		(void)close(fd);
-		output(indent, &offset, "cksum=%lu", val);
+		output(indent, &offset, "cksum=%u", val);
 	}
 	if (keys & F_MD5 && S_ISREG(p->fts_statp->st_mode)) {
 		char *md5digest, buf[MD5_DIGEST_STRING_LENGTH];
@@ -247,6 +245,7 @@ statf(int indent, FTSENT *p)
 		output(indent, &offset, "link=%s", escaped_name);
 		free(escaped_name);
 	}
+#if 0
 	if (keys & F_FLAGS && !S_ISLNK(p->fts_statp->st_mode)) {
 		char *file_flags;
 
@@ -259,6 +258,7 @@ statf(int indent, FTSENT *p)
 			output(indent, &offset, "flags=none");
 		free(file_flags);
 	}
+#endif
 	(void)putchar('\n');
 }
 
diff -urpN mtree-3.7.20050808-fixes/usr.sbin/mtree/hashfile.c mtree-3.7.20050808-linux/usr.sbin/mtree/hashfile.c
--- mtree-3.7.20050808-fixes/usr.sbin/mtree/hashfile.c	Thu Jan  1 00:00:00 1970
+++ mtree-3.7.20050808-linux/usr.sbin/mtree/hashfile.c	Mon Aug  8 14:04:02 2005
@@ -0,0 +1,75 @@
+#define _GNU_SOURCE
+#include <stdio.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <unistd.h>
+
+#include "mtree.h"
+#include "hashfile.h"
+
+#define FILE_BUFFER			0x1000
+
+static char hex[16] =
+	"0123456789abcdef";
+
+#define HASHFile(F, CTX, Init, Update, Final, N) \
+char *F(const char *pathname, char *output) \
+{ \
+	CTX c; \
+	unsigned char binary[N]; \
+	struct stat st; \
+	int fd, n, i; \
+	char *buffer, *p; \
+\
+	if (stat(pathname, &st)) return NULL; \
+	if (!S_ISREG(st.st_mode)) { \
+		errno = EIO; \
+		return NULL; \
+	} \
+\
+	if ((fd = open(pathname, MTREE_O_FLAGS)) < 0) \
+		return NULL; \
+\
+	if (fstat(fd, &st)) { \
+		close(fd); \
+		return NULL; \
+	} \
+	if (!S_ISREG(st.st_mode)) { \
+		close(fd); \
+		errno = EIO; \
+		return NULL; \
+	} \
+\
+	if (!(buffer = malloc(FILE_BUFFER))) { \
+		close(fd); \
+		errno = ENOMEM; \
+		return NULL; \
+	} \
+\
+	Init(&c); \
+	while ((n = read(fd, buffer, FILE_BUFFER)) > 0) \
+		Update(&c, buffer, n); \
+\
+	if (!n) { \
+		Final(binary, &c); \
+		p = output; \
+		for (i = 0; i < N; i++) { \
+			*p++ = hex[(int)binary[i] >> 4]; \
+			*p++ = hex[(int)binary[i] & 0x0f]; \
+		} \
+		*p = '\0'; \
+	} else \
+		output = NULL; \
+\
+	close(fd); \
+	free(buffer); \
+\
+	return output; \
+}
+
+HASHFile(MD5File, MD5_CTX, MD5_Init, MD5_Update, MD5_Final, 16)
+HASHFile(SHA1File, SHA_CTX, SHA1_Init, SHA1_Update, SHA1_Final, 20)
+HASHFile(RMD160File, RIPEMD160_CTX,
+	RIPEMD160_Init, RIPEMD160_Update, RIPEMD160_Final, 20)
diff -urpN mtree-3.7.20050808-fixes/usr.sbin/mtree/hashfile.h mtree-3.7.20050808-linux/usr.sbin/mtree/hashfile.h
--- mtree-3.7.20050808-fixes/usr.sbin/mtree/hashfile.h	Thu Jan  1 00:00:00 1970
+++ mtree-3.7.20050808-linux/usr.sbin/mtree/hashfile.h	Mon Aug  8 14:03:18 2005
@@ -0,0 +1,16 @@
+#ifndef _HASHFILE_H
+#define _HASHFILE_H
+
+#include <openssl/md5.h>
+#include <openssl/sha.h>
+#include <openssl/ripemd.h>
+
+#define MD5_DIGEST_STRING_LENGTH (MD5_DIGEST_LENGTH * 2 + 1)
+#define SHA1_DIGEST_STRING_LENGTH (SHA_DIGEST_LENGTH * 2 + 1)
+#define RMD160_DIGEST_STRING_LENGTH (RIPEMD160_DIGEST_LENGTH * 2 + 1)
+
+extern char *MD5File(const char *pathname, char *output);
+extern char *SHA1File(const char *pathname, char *output);
+extern char *RMD160File(const char *pathname, char *output);
+
+#endif
diff -urpN mtree-3.7.20050808-fixes/usr.sbin/mtree/misc.c mtree-3.7.20050808-linux/usr.sbin/mtree/misc.c
--- mtree-3.7.20050808-fixes/usr.sbin/mtree/misc.c	Sun Aug  1 18:32:20 2004
+++ mtree-3.7.20050808-linux/usr.sbin/mtree/misc.c	Mon Aug  8 07:17:51 2005
@@ -52,7 +52,9 @@ typedef struct _key {
 /* NB: the following table must be sorted lexically. */
 static KEY keylist[] = {
 	{"cksum",	F_CKSUM,	NEEDVALUE},
+#if 0
 	{"flags",	F_FLAGS,	NEEDVALUE},
+#endif
 	{"gid",		F_GID,		NEEDVALUE},
 	{"gname",	F_GNAME,	NEEDVALUE},
 	{"ignore",	F_IGN,		0},
diff -urpN mtree-3.7.20050808-fixes/usr.sbin/mtree/mtree.8 mtree-3.7.20050808-linux/usr.sbin/mtree/mtree.8
--- mtree-3.7.20050808-fixes/usr.sbin/mtree/mtree.8	Thu Dec 30 10:01:47 2004
+++ mtree-3.7.20050808-linux/usr.sbin/mtree/mtree.8	Mon Aug  8 15:48:56 2005
@@ -30,7 +30,7 @@
 .\"
 .\"     @(#)mtree.8	8.2 (Berkeley) 12/11/93
 .\"
-.Dd December 11, 1993
+.Dd August 8, 2005
 .Dt MTREE 8
 .Os
 .Sh NAME
@@ -162,13 +162,6 @@ The checksum of the file using the defau
 the
 .Xr cksum 1
 utility.
-.It Cm flags
-The current file's flags (whitespace or comma separated) in symbolic form
-as specified by
-.Xr chflags 1 .
-The string
-.Dq none
-may be used to indicate that no flags should be set on the file.
 .It Cm gid
 The file group as a numeric value.
 .It Cm gname
@@ -308,13 +301,16 @@ that
 .Cm sha1digest
 be run on the file systems, and a copy of the results stored on a different
 machine, or, at least, in encrypted form.
-The output file itself should be digested using the
-.Xr sha1 1
-utility.
+The output file itself should be digested using
+.Nm openssl
+.Cm dgst
+.Fl sha1 .
 Then, periodically,
 .Nm mtree
 and
-.Xr sha1 1
+.Nm openssl
+.Cm dgst
+.Fl sha1
 should be run against the on-line specifications.
 While it is possible for the bad guys to change the on-line specifications
 to conform to their modified binaries, it is believed to be
@@ -333,17 +329,18 @@ distribution.
 .Sh SEE ALSO
 .Xr chgrp 1 ,
 .Xr chmod 1 ,
+.Xr chown 1 ,
 .Xr cksum 1 ,
-.Xr md5 1 ,
-.Xr rmd160 1 ,
-.Xr sha1 1 ,
+.Xr md5sum 1 ,
+.Xr openssl 1 ,
+.Xr sha1sum 1 ,
+.Xr stat 1 ,
 .Xr stat 2 ,
 .Xr fts 3 ,
 .Xr md5 3 ,
-.Xr rmd160 3 ,
-.Xr sha1 3 ,
-.Xr hier 7 ,
-.Xr chown 8
+.Xr ripemd 3 ,
+.Xr sha 3 ,
+.Xr hier 7
 .Sh HISTORY
 The
 .Nm mtree
diff -urpN mtree-3.7.20050808-fixes/usr.sbin/mtree/mtree.h mtree-3.7.20050808-linux/usr.sbin/mtree/mtree.h
--- mtree-3.7.20050808-fixes/usr.sbin/mtree/mtree.h	Mon Aug  8 13:58:18 2005
+++ mtree-3.7.20050808-linux/usr.sbin/mtree/mtree.h	Mon Aug  8 14:07:38 2005
@@ -55,7 +55,7 @@ typedef struct _node {
 	char	*slink;				/* symbolic link reference */
 	uid_t	st_uid;				/* uid */
 	gid_t	st_gid;				/* gid */
-#define	MBITS	(S_ISUID|S_ISGID|S_ISTXT|S_IRWXU|S_IRWXG|S_IRWXO)
+#define	MBITS	(S_ISUID|S_ISGID|S_ISVTX|S_IRWXU|S_IRWXG|S_IRWXO)
 	mode_t	st_mode;			/* mode */
 	nlink_t	st_nlink;			/* link count */
 	u_int32_t file_flags;			/* file flags */
@@ -79,7 +79,9 @@ typedef struct _node {
 #define	F_UID		0x010000		/* uid */
 #define	F_UNAME		0x020000		/* user name */
 #define	F_VISIT		0x040000		/* file visited */
+#if 0
 #define	F_FLAGS		0x080000		/* file flags */
+#endif
 #define	F_NOCHANGE	0x100000		/* do not change owner/mode */
 	u_int32_t flags;			/* items set */
 
diff -urpN mtree-3.7.20050808-fixes/usr.sbin/mtree/spec.c mtree-3.7.20050808-linux/usr.sbin/mtree/spec.c
--- mtree-3.7.20050808-fixes/usr.sbin/mtree/spec.c	Mon Aug  8 12:28:36 2005
+++ mtree-3.7.20050808-linux/usr.sbin/mtree/spec.c	Mon Aug  8 12:28:36 2005
@@ -50,6 +50,9 @@ static const char rcsid[] = "$OpenBSD: s
 #include "mtree.h"
 #include "extern.h"
 
+extern mode_t getmode(const void *set, mode_t mode);
+extern void * setmode(const char *mode_str);
+
 int lineno;				/* Current spec line number. */
 
 static void	 set(char *, NODE *);
@@ -150,7 +153,7 @@ noparent:		error("no parent node");
 		if (strunvis(centry->name, p) == -1) {
 			fprintf(stderr,
 			    "mtree: filename (%s) encoded incorrectly\n", p);
-			strlcpy(centry->name, p, len);
+			memcpy(centry->name, p, len);
 		}
 		set(NULL, centry);
 
@@ -178,7 +181,9 @@ set(char *t, NODE *ip)
 	struct passwd *pw;
 	void *m;
 	int value;
+#if 0
 	u_int32_t fset, fclr;
+#endif
 	char *ep;
 	size_t len;
 
@@ -197,6 +202,7 @@ set(char *t, NODE *ip)
 			if (!ip->md5digest)
 				error("%s", strerror(errno));
 			break;
+#if 0
 		case F_FLAGS:
 			if (!strcmp(val, "none")) {
 				ip->file_flags = 0;
@@ -206,6 +212,7 @@ set(char *t, NODE *ip)
 				error("%s", strerror(errno));
 			ip->file_flags = fset;
 			break; 
+#endif
 		case F_GID:
 			ip->st_gid = strtoul(val, &ep, 10);
 			if (*ep)
@@ -252,7 +259,7 @@ set(char *t, NODE *ip)
 			if (strunvis(ip->slink, val) == -1) {
 				fprintf(stderr,
 				    "mtree: filename (%s) encoded incorrectly\n", val);
-				strlcpy(ip->slink, val, len);
+				memcpy(ip->slink, val, len);
 			}
 			break;
 		case F_TIME:
diff -urpN mtree-3.7.20050808-fixes/usr.sbin/mtree/verify.c mtree-3.7.20050808-linux/usr.sbin/mtree/verify.c
--- mtree-3.7.20050808-fixes/usr.sbin/mtree/verify.c	Mon Aug  8 13:55:55 2005
+++ mtree-3.7.20050808-linux/usr.sbin/mtree/verify.c	Mon Aug  8 08:11:45 2005
@@ -164,7 +164,10 @@ miss(NODE *p, char *tail, size_t len)
 		if (p->type != F_DIR && (dflag || p->flags & F_VISIT))
 			continue;
 		/* XXX: pathname truncation on overflow */
-		(void)strlcpy(tail, p->name, len);
+		if (len > 0) {
+			tail[0] = '\0';
+			strncat(tail, p->name, len - 1);
+		}
 		if (!(p->flags & F_VISIT)) {
 			/* Don't print missing message if file exists as a
 			   symbolic link and the -q flag is set. */
 
дизайн и разработка: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
текущий майнтейнер: Michael Shigorin