From 9587c1bfbcc51e19d9a1e3a7ac3e7765eb631d23 Mon Sep 17 00:00:00 2001 From: mckusick Date: Fri, 11 Apr 2008 21:48:14 +0000 Subject: Correctly set file group when restore is run by a user other than root. --- sbin/restore/dirs.c | 7 ++++++- sbin/restore/tape.c | 4 +++- 2 files changed, 9 insertions(+), 2 deletions(-) (limited to 'sbin') 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; -- cgit v1.1