* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
* %sccs.include.redist.c%
static char sccsid
[] = "@(#)verify.c 8.1 (Berkeley) %G%";
extern int crc_total
, ftsoptions
;
extern int dflag
, eflag
, rflag
, sflag
, uflag
;
extern char fullpath
[MAXPATHLEN
];
static char path
[MAXPATHLEN
];
static void miss
__P((NODE
*, char *));
static int vwalk
__P((void));
register NODE
*ep
, *level
;
int ftsdepth
, specdepth
, rval
;
if ((t
= fts_open(argv
, ftsoptions
, NULL
)) == NULL
)
err("fts_open: %s", strerror(errno
));
ftsdepth
= specdepth
= rval
= 0;
while (p
= fts_read(t
)) {
if (specdepth
> ftsdepth
) {
for (level
= level
->parent
; level
->prev
;
(void)fprintf(stderr
, "mtree: %s: %s\n",
for (ep
= level
; ep
; ep
= ep
->next
)
if (ep
->flags
& F_MAGIC
&&
!fnmatch(ep
->name
, p
->fts_name
, FNM_PATHNAME
) ||
!strcmp(ep
->name
, p
->fts_name
)) {
if (compare(ep
->name
, ep
, p
))
(void)fts_set(t
, p
, FTS_SKIP
);
else if (ep
->child
&& ep
->type
== F_DIR
&&
(void)printf("extra: %s", RP(p
));
if (unlink(p
->fts_accpath
)) {
(void)printf(", not removed: %s",
(void)printf(", removed");
(void)fts_set(t
, p
, FTS_SKIP
);
"mtree: %s checksum: %lu\n", fullpath
, crc_total
);
if (p
->type
!= F_DIR
&& (dflag
|| p
->flags
& F_VISIT
))
(void)strcpy(tail
, p
->name
);
if (!(p
->flags
& F_VISIT
))
(void)printf("missing: %s", path
);
if (!(p
->flags
& F_VISIT
) && uflag
)
if (!(p
->flags
& (F_UID
| F_UNAME
)))
(void)printf(" (not created: user not specified)");
else if (!(p
->flags
& (F_GID
| F_GNAME
)))
(void)printf(" (not created: group not specified)");
else if (!(p
->flags
& F_MODE
))
(void)printf(" (not created: mode not specified)");
else if (mkdir(path
, S_IRWXU
))
(void)printf(" (not created: %s)",
(void)printf(" (created)");
if (!(p
->flags
& F_VISIT
))
for (tp
= tail
; *tp
; ++tp
);
if (chown(path
, p
->st_uid
, p
->st_gid
)) {
(void)printf("%s: user/group/mode not modified: %s\n",
if (chmod(path
, p
->st_mode
))
(void)printf("%s: permissions not set: %s\n",