Module Name: src Committed By: chs Date: Sat Dec 10 18:49:44 UTC 2022
Modified Files: src/sbin/restore: dirs.c tape.c Log Message: apply this change from FreeBSD: commit c028393d7072f1f88efd8d6e6c77bb9b15b3f3b6 Author: Kirk McKusick <mckus...@freebsd.org> Date: Fri Apr 11 21:48:14 2008 +0000 Correctly set file group when restore is run by a user other than root. To generate a diff of this commit: cvs rdiff -u -r1.53 -r1.54 src/sbin/restore/dirs.c cvs rdiff -u -r1.72 -r1.73 src/sbin/restore/tape.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sbin/restore/dirs.c diff -u src/sbin/restore/dirs.c:1.53 src/sbin/restore/dirs.c:1.54 --- src/sbin/restore/dirs.c:1.53 Wed Jun 23 14:22:08 2021 +++ src/sbin/restore/dirs.c Sat Dec 10 18:49:44 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: dirs.c,v 1.53 2021/06/23 14:22:08 riastradh Exp $ */ +/* $NetBSD: dirs.c,v 1.54 2022/12/10 18:49:44 chs Exp $ */ /* * Copyright (c) 1983, 1993 @@ -39,7 +39,7 @@ #if 0 static char sccsid[] = "@(#)dirs.c 8.7 (Berkeley) 5/1/95"; #else -__RCSID("$NetBSD: dirs.c,v 1.53 2021/06/23 14:22:08 riastradh Exp $"); +__RCSID("$NetBSD: dirs.c,v 1.54 2022/12/10 18:49:44 chs Exp $"); #endif #endif /* not lint */ @@ -598,6 +598,7 @@ setdirmodes(int flags) struct entry *ep; char *cp, *buf; int bufsize; + uid_t myuid; vprintf(stdout, "Set directory mode, owner, and times.\n"); if (command == 'r' || command == 'R') @@ -618,6 +619,7 @@ setdirmodes(int flags) clearerr(mf); bufsize = 0; buf = NULL; + myuid = getuid(); for (;;) { (void) fread((char *)&node, 1, sizeof(struct modeinfo), mf); if (ferror(mf)) { @@ -683,10 +685,13 @@ setdirmodes(int flags) "extended attributes for ", cp); } } + if (myuid != 0) + (void) chown(cp, myuid, node.gid); + else + (void) chown(cp, node.uid, node.gid); + (void) chmod(cp, node.mode); (void) utimens(cp, node.ctimep); (void) utimens(cp, node.mtimep); - (void) chown(cp, node.uid, node.gid); - (void) chmod(cp, node.mode); if (Mtreefile) { writemtree(cp, "dir", node.uid, node.gid, node.mode, Index: src/sbin/restore/tape.c diff -u src/sbin/restore/tape.c:1.72 src/sbin/restore/tape.c:1.73 --- src/sbin/restore/tape.c:1.72 Thu May 5 07:45:43 2022 +++ src/sbin/restore/tape.c Sat Dec 10 18:49:44 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: tape.c,v 1.72 2022/05/05 07:45:43 mrg Exp $ */ +/* $NetBSD: tape.c,v 1.73 2022/12/10 18:49:44 chs Exp $ */ /* * Copyright (c) 1983, 1993 @@ -39,7 +39,7 @@ #if 0 static char sccsid[] = "@(#)tape.c 8.9 (Berkeley) 5/1/95"; #else -__RCSID("$NetBSD: tape.c,v 1.72 2022/05/05 07:45:43 mrg Exp $"); +__RCSID("$NetBSD: tape.c,v 1.73 2022/12/10 18:49:44 chs Exp $"); #endif #endif /* not lint */ @@ -656,7 +656,9 @@ extractfile(char *name) ctimep[1].tv_nsec = curfile.birthtime_nsec; } extsize = curfile.extsize; - uid = curfile.uid; + uid = getuid(); + if (uid == 0) + uid = curfile.uid; gid = curfile.gid; mode = curfile.mode; flags = curfile.file_flags;