summaryrefslogtreecommitdiffstats
path: root/sbin
diff options
context:
space:
mode:
authormckusick <mckusick@FreeBSD.org>2008-04-11 21:48:14 +0000
committermckusick <mckusick@FreeBSD.org>2008-04-11 21:48:14 +0000
commit9587c1bfbcc51e19d9a1e3a7ac3e7765eb631d23 (patch)
tree84427bf6e4a23919ee28e2b8628803dbacac6a76 /sbin
parentf2c4672082e37afa7a08fef7a585caf446c31b9b (diff)
downloadFreeBSD-src-9587c1bfbcc51e19d9a1e3a7ac3e7765eb631d23.zip
FreeBSD-src-9587c1bfbcc51e19d9a1e3a7ac3e7765eb631d23.tar.gz
Correctly set file group when restore is run by a user other than root.
Diffstat (limited to 'sbin')
-rw-r--r--sbin/restore/dirs.c7
-rw-r--r--sbin/restore/tape.c4
2 files changed, 9 insertions, 2 deletions
diff --git a/sbin/restore/dirs.c b/sbin/restore/dirs.c
index a4cdb3d..fbd85ef 100644
--- a/sbin/restore/dirs.c
+++ b/sbin/restore/dirs.c
@@ -558,6 +558,7 @@ setdirmodes(int flags)
char *cp, *buf;
const char *tmpdir;
int bufsize;
+ uid_t myuid;
vprintf(stdout, "Set directory mode, owner, and times.\n");
if ((tmpdir = getenv("TMPDIR")) == NULL || tmpdir[0] == '\0')
@@ -578,6 +579,7 @@ setdirmodes(int flags)
}
clearerr(mf);
bufsize = 0;
+ myuid = getuid();
for (;;) {
(void) fread((char *)&node, 1, sizeof(struct modeinfo), mf);
if (feof(mf))
@@ -624,7 +626,10 @@ setdirmodes(int flags)
"extended attributes for ", cp);
}
}
- (void) chown(cp, node.uid, node.gid);
+ if (myuid != 0)
+ (void) chown(cp, myuid, node.gid);
+ else
+ (void) chown(cp, node.uid, node.gid);
(void) chmod(cp, node.mode);
utimes(cp, node.ctimep);
utimes(cp, node.mtimep);
diff --git a/sbin/restore/tape.c b/sbin/restore/tape.c
index 6afa591..00b7d85 100644
--- a/sbin/restore/tape.c
+++ b/sbin/restore/tape.c
@@ -582,7 +582,9 @@ extractfile(char *name)
ctimep[1].tv_sec = curfile.birthtime_sec;
ctimep[1].tv_usec = curfile.birthtime_nsec / 1000;
extsize = curfile.extsize;
- uid = curfile.uid;
+ uid = getuid();
+ if (uid == 0)
+ uid = curfile.uid;
gid = curfile.gid;
mode = curfile.mode;
flags = curfile.file_flags;
OpenPOWER on IntegriCloud