From mkamm@sbox.tu-graz.ac.at  Sun Feb 11 14:43:41 2001
Return-Path: <mkamm@sbox.tu-graz.ac.at>
Received: from ns1.tu-graz.ac.at (ns1.tu-graz.ac.at [129.27.2.3])
	by hub.freebsd.org (Postfix) with ESMTP id A2C3937B491
	for <FreeBSD-gnats-submit@freebsd.org>; Sun, 11 Feb 2001 14:43:40 -0800 (PST)
Received: from homebox.kammerhofer.org (isdn091.tu-graz.ac.at [129.27.240.91])
	by ns1.tu-graz.ac.at (8.9.3/8.9.3) with ESMTP id XAA07800
	for <FreeBSD-gnats-submit@freebsd.org>; Sun, 11 Feb 2001 23:43:33 +0100 (MET)
Received: (from mkamm@localhost)
	by homebox.kammerhofer.org (8.11.2/8.11.2) id f1BMdGh02533;
	Sun, 11 Feb 2001 23:39:16 +0100 (CET)
	(envelope-from mkamm)
Message-Id: <200102112239.f1BMdGh02533@homebox.kammerhofer.org>
Date: Sun, 11 Feb 2001 23:39:16 +0100 (CET)
From: Martin Kammerhofer <mkamm@sbox.tu-graz.ac.at>
Reply-To: mkamm@sbox.tu-graz.ac.at
To: FreeBSD-gnats-submit@freebsd.org
Subject: tar(1) as root does not preserve ownership of symlinks
X-Send-Pr-Version: 3.2

>Number:         25012
>Category:       bin
>Synopsis:       tar(1) as root does not preserve ownership of symlinks
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    freebsd-bugs
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Sun Feb 11 14:50:01 PST 2001
>Closed-Date:    Thu Aug 22 10:19:38 PDT 2002
>Last-Modified:  Thu Aug 22 10:19:38 PDT 2002
>Originator:     Martin Kammerhofer
>Release:        FreeBSD 4.2-STABLE i386
>Organization:
Universitt Graz
>Environment:
>Description:

Tar is supposed to preserve owner/group when invoked as root.
This does not work for extracted symlinks.

Note: FreeBSD's cpio(1) from the base system and gtar from the ports
collection can do that.

>How-To-Repeat:

As root do:
# ln -sf /1/2/3 slink
# chown -h nobody:nogroup slink
# ls -l slink
lrwxr-xr-x   1 nobody  nogroup  -      6 11 Feb 23:35 slink@ -> /1/2/3
# tar cf slink.tar slink
# rm -f slink
# tar xf slink.tar
# ls -l slink
lrwxr-xr-x   1 root    wheel    -      6 11 Feb 23:35 slink@ -> /1/2/3

>Fix:

Index: extract.c
===================================================================
RCS file: /home/ncvs/src/gnu/usr.bin/tar/extract.c,v
retrieving revision 1.5
diff -u -r1.5 extract.c
--- extract.c	1997/04/13 08:39:38	1.5
+++ extract.c	2001/02/10 15:36:35
@@ -605,9 +605,19 @@
 
       check = symlink (current_link_name,
 		       skipcrud + current_file_name);
-      /* FIXME, don't worry uid, gid, etc... */
-      if (check == 0)
-	break;
+      if (check == 0) {
+	  if (we_are_root || f_do_chown)
+	  {
+	      if (lchown (skipcrud + current_file_name,
+			 hstat.st_uid, hstat.st_gid) < 0)
+	      {
+		  msg_perror ("cannot chown slink %s to uid %d gid %d",
+			      skipcrud + current_file_name,
+			      hstat.st_uid, hstat.st_gid);
+	      }
+	  }
+	  break;
+      }
       if (make_dirs (current_file_name + skipcrud))
 	goto again_symlink;
       msg_perror ("Could not create symlink to %s",

>Release-Note:
>Audit-Trail:
State-Changed-From-To: open->patched 
State-Changed-By: sobomax 
State-Changed-When: Tue Jun 4 10:41:31 PDT 2002 
State-Changed-Why:  
More modern tar which was just imported into the 5.0-CURRENT doen't have this 
problem. The problem will be fully resolved when tar upgrade is MFCed in 
about 1 month. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=25012 
State-Changed-From-To: patched->closed 
State-Changed-By: johan 
State-Changed-When: Thu Aug 22 10:19:21 PDT 2002 
State-Changed-Why:  
GNU tar 1.13.25 has been MFCed. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=25012 
>Unformatted:
