diff options
author | mckusick <mckusick@FreeBSD.org> | 2008-04-11 21:48:14 +0000 |
---|---|---|
committer | mckusick <mckusick@FreeBSD.org> | 2008-04-11 21:48:14 +0000 |
commit | 9587c1bfbcc51e19d9a1e3a7ac3e7765eb631d23 (patch) | |
tree | 84427bf6e4a23919ee28e2b8628803dbacac6a76 /sbin/restore | |
parent | f2c4672082e37afa7a08fef7a585caf446c31b9b (diff) | |
download | FreeBSD-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/restore')
-rw-r--r-- | sbin/restore/dirs.c | 7 | ||||
-rw-r--r-- | sbin/restore/tape.c | 4 |
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; |