Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 15 Mar 1995 21:15:31 -0800 (PST)
From:      "Rodney W. Grimes" <rgrimes@gndrsh.aac.dev.com>
To:        phk@ref.tfs.com (Poul-Henning Kamp)
Cc:        hackers@FreeBSD.org
Subject:   Re: cpio bug ?
Message-ID:  <199503160515.VAA14433@gndrsh.aac.dev.com>
In-Reply-To: <199503160431.UAA09849@ref.tfs.com> from "Poul-Henning Kamp" at Mar 15, 95 08:31:27 pm

next in thread | previous in thread | raw e-mail | index | archive | help
> 
> I think I have found one of the things which have troubled us in the 
> install procedure, and would like to hear people opinions:
> 
> In a cpio file I have:
> 	file usr/bin/passwd (root,bin, setuid+0555)
> 	symlink usr/bin/yppasswd (bin,bin,0755) -> passwd
> 
> Now, cpio will do a chown(bin) on usr/bin/yppasswd, and this will
> make usr/bin/passwd owned by bin instead of root.
> 
> Obviously wrong.
> 
> How to fix this ?
> 
> Who will do it for me ?

Actually it looks simpler than I though at first, -DHAVE_LCHOWN and
implement lchown(const char *path, uid_t owner, gid_t group) as
a NOP :-).

That fixes the CHOWN problem, but it looks like there is still a
chmod done to the symlink which will break things still.... thats
a little tougher to fix.

Look this over and test it out, if you like it commit it!


Index: Makefile
===================================================================
RCS file: /home/ncvs/src/gnu/usr.bin/cpio/Makefile,v
retrieving revision 1.1
diff -c -r1.1 Makefile
*** 1.1	1993/08/07 22:33:10
--- Makefile	1995/03/16 05:06:37
***************
*** 1,8 ****
  PROG= cpio
! CFLAGS+= -I${.CURDIR} -DRETSIGTYPE=void -DHAVE_SYS_MTIO_H=1 -DSTDC_HEADERS=1 -DHAVE_UNISTD_H=1 -DHAVE_STRING_H=1 -DHAVE_FCNTL_H=1 -DHAVE_UTIME_H=1 -DHAVE_STRERROR=1 -DHAVE_VPRINTF=1 -DDIRENT=1
  
  SRCS =	copyin.c copyout.c copypass.c defer.c dstring.c fnmatch.c global.c \
! 	main.c tar.c util.c error.c filemode.c getopt.c getopt1.c version.c \
  	rtapelib.c dirname.c idcache.c makepath.c xmalloc.c stripslash.c \
  	userspec.c xstrdup.c
  
--- 1,9 ----
  PROG= cpio
! CFLAGS+= -I${.CURDIR} -DRETSIGTYPE=void -DHAVE_SYS_MTIO_H=1 -DSTDC_HEADERS=1 -DHAVE_UNISTD_H=1 -DHAVE_STRING_H=1 -DHAVE_FCNTL_H=1 -DHAVE_UTIME_H=1 -DHAVE_STRERROR=1 -DHAVE_VPRINTF=1 -DDIRENT=1 -DHAVE_LCHOWN
  
  SRCS =	copyin.c copyout.c copypass.c defer.c dstring.c fnmatch.c global.c \
! 	lchown.c main.c tar.c util.c error.c filemode.c getopt.c getopt1.c \
! 	version.c \
  	rtapelib.c dirname.c idcache.c makepath.c xmalloc.c stripslash.c \
  	userspec.c xstrdup.c
  
Index: extern.h
===================================================================
RCS file: /home/ncvs/src/gnu/usr.bin/cpio/extern.h,v
retrieving revision 1.1
diff -c -r1.1 extern.h
*** 1.1	1993/08/07 22:33:25
--- extern.h	1995/03/16 05:12:24
***************
*** 114,119 ****
--- 114,124 ----
  gid_t *getgidbyname ();
  #endif
  
+ /* lchown.c */
+ #ifdef HAVE_LCHOWN
+ int lchown P_((const char *path, uid_t owner, gid_t group));
+ #endif
+ 
  /* main.c */
  void process_args P_((int argc, char *argv[]));
  void initialize_buffers P_((void));
*** /dev/null	Wed Mar 15 14:31:13 1995
--- lchown.c	Wed Mar 15 21:11:24 1995
***************
*** 0 ****
--- 1,27 ----
+ /* lchown.c - dummy version of lchown for systems that do not store
+    file owners of symbolic links.
+    Copyright (C) 1995 Rodney W. Grimes, Accurate Automation Company
+ 
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2, or (at your option)
+    any later version.
+ 
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+ 
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
+ 
+ /* Written by Rodney W. Grimes <rgrimes@FreeBSD.Org> */
+ 
+ #include <unistd.h>
+ 
+ int
+ lchown(const char *path, uid_t owner, gid_t group) {
+ 
+ 	return (0);
+ }
-- 
Rod Grimes                                      rgrimes@gndrsh.aac.dev.com
Accurate Automation Company                   Custom computers for FreeBSD



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199503160515.VAA14433>