From owner-freebsd-bugs@FreeBSD.ORG Wed Aug 16 12:42:37 2006 Return-Path: X-Original-To: freebsd-bugs@hub.freebsd.org Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 6A5EF16A518 for ; Wed, 16 Aug 2006 12:42:37 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [216.136.204.21]) by mx1.FreeBSD.org (Postfix) with ESMTP id CD9E743E29 for ; Wed, 16 Aug 2006 12:40:18 +0000 (GMT) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.13.4/8.13.4) with ESMTP id k7GCeIql063395 for ; Wed, 16 Aug 2006 12:40:18 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.13.4/8.13.4/Submit) id k7GCeI90063394; Wed, 16 Aug 2006 12:40:18 GMT (envelope-from gnats) Date: Wed, 16 Aug 2006 12:40:18 GMT Message-Id: <200608161240.k7GCeI90063394@freefall.freebsd.org> To: freebsd-bugs@FreeBSD.org From: "Andrey V. Elsukov" Cc: Subject: Re: bin/101660: restore(8) does not preserve uid and gid on short symlinks X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: "Andrey V. Elsukov" List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 16 Aug 2006 12:42:37 -0000 The following reply was made to PR bin/101660; it has been noted by GNATS. From: "Andrey V. Elsukov" To: bug-followup@FreeBSD.org, minear@securecomputing.com Cc: Subject: Re: bin/101660: restore(8) does not preserve uid and gid on short symlinks Date: Wed, 16 Aug 2006 16:28:41 +0400 Can you try the following patch: Index: tape.c =================================================================== RCS file: /mnt/cvs/ncvs/src/sbin/restore/tape.c,v retrieving revision 1.44 diff -u -r1.44 tape.c --- tape.c 29 May 2005 15:57:00 -0000 1.44 +++ tape.c 16 Aug 2006 12:18:00 -0000 @@ -554,6 +554,7 @@ mode_t mode; struct timeval mtimep[2], ctimep[2]; struct entry *ep; + u_int32_t luid, lgid; curfile.name = name; curfile.action = USING; @@ -593,6 +594,8 @@ case IFLNK: lnkbuf[0] = '\0'; pathlen = 0; + luid = curfile.uid; + lgid = curfile.gid; getfile(xtrlnkfile, xtrlnkskip); if (pathlen == 0) { vprintf(stdout, @@ -600,7 +603,7 @@ return (GOOD); } if (linkit(lnkbuf, name, SYMLINK) == GOOD) { - (void) lchown(name, curfile.uid, curfile.gid); + (void) lchown(name, luid, lgid); (void) lchmod(name, mode); (void) lutimes(name, ctimep); (void) lutimes(name, mtimep); -- WBR, Andrey V. Elsukov