This is the mail archive of the
cygwin@cygwin.com
mailing list for the Cygwin project.
Re: tar won't restore permissions
- From: Ivan Dobrianov <id11 at cornell dot edu>
- To: cygwin at cygwin dot com
- Cc: awc at bitmover dot com, gmargo at yahoo dot com
- Date: Mon, 08 Apr 2002 21:08:03 -0400
- Subject: Re: tar won't restore permissions
Ok, I posted this question more than a year ago ... and the problem is
still present in the latest Cygwin builds:
tar xpvf myArchive.tar
will not restore read-only permissions, i.e. files with r-- perms will
get rw- permission when restored!!! I am seeing this on Win NT, 2000,
and XP on FAT32 and NTFS with and without setting $CYGWIN to ntea or
ntfs. This used to work right in the days of B20.
I. To see the bug:
1) copy the follwing text to a file called "demo"
-----------------------------------------------------
echo " "
[ -d tar_bug ] || mkdir tar_bug
cd tar_bug
rm -rf *
cat > myFile<<EOF
qwerty
EOF
chmod 444 myFile
ls -l myFile
tar cvf myArchive.tar myFile
tar tvf myArchive.tar
sleep 2
mkdir untarred
cd untarred
tar xpvf ../myArchive.tar -U
ls -l
--------------------------------------------------------
2) Do:
sh demo
3) I get the follwing output:
--------------------------------------------------------
-r--r--r-- 1 administ None 8 Jan 20 11:55 myFile
myFile
-r--r--r-- administrator/None 8 2001-01-20 11:55:14 myFile
myFile
total 0
-rw-r--r-- 1 administ None 8 Jan 20 11:55 myFile
--------------------------------------------------------
*** Note that myFile is writable in the end! ***
NOTE: Yes, if you "CYGWIN=ntea" under NTFS, the problem _SEEMS_ to get
fixed, but upon inspection, with say Explorer, it turns out the file is
still writable - the problem is just being masked!
II. The fix.
Well, I have a tweaked version of tar-1.13.19-1 which seems to work
fine. Here is the hacky patch of extract.c that does the trick
--------------------------------------------------------
~/tar_fix > diff extract.c_DUP_00 extract.c
125a126,127
> /* printf ("File: %s\n", file_name); */
>
135c137,139
< if (permstatus == ARCHIVED_PERMSTATUS
---
> /* Ivan says: for whatever reason the caller THINKS the mode is ok,
> but it is not, at least under Win NT w/ cygwin */
> if (0 && permstatus == ARCHIVED_PERMSTATUS
158a163,164
>
> /* printf ("File: %s -> mode: %o\n", file_name, mode); */
~/tar_fix >
--------------------------------------------------------
I don't know if this is the "right" way to fix the problem - probably it
is not! I'll leave it to more knowledgeable people to do the real thing
... or point the workaround that has been eluding me for that past
year and more :-)
--
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
Bug reporting: http://cygwin.com/bugs.html
Documentation: http://cygwin.com/docs.html
FAQ: http://cygwin.com/faq/