Hello all,
I will report to all that restore command doesn't restore the
property of symbolic link at all, that is owner, group,
permissions and utime.
Yamazaki-san first reported this issue on USENET at
fj.os.bsd.freebsd. So I'm Cc'ing he and thread participater.
I will propose below quick patch. How do you feel ?
My environment is FreeBSD 4.3RC (today). Sorry I don't have
current environment.
Thanks !
before dump:
mistral# ls -l /mnt4
total 1
-rw-r--r-- 1 root wheel 5 1/ 3 17:33 foo
lrwxr-xr-x 1 yohta wheel 3 3/19 13:17 foos -> foo
restore with 4.3-RC restore:
mistral# dump 0f - /mnt4 | ( cd /tmp/tmp ; restore rf - )
...
mistral# ls -l /tmp/tmp
total 53
-rw-r--r-- 1 root wheel 5 1/ 3 17:33 foo
lrwx------ 1 root wheel 3 4/20 23:17 foos -> foo
-rw------- 1 root wheel 52580 4/20 23:17 restoresymtable
restore with patch'ed restore:
mistral# dump 0f - /mnt4 | ( cd /tmp/tmp ; /home/yohta/restore/restore rf - )
...
mistral# ls -l
total 53
-rw-r--r-- 1 root wheel 5 1/ 3 17:33 foo
lrwxr-xr-x 1 yohta wheel 3 3/19 13:17 foos -> foo
-rw------- 1 root wheel 52580 4/20 23:18 restoresymtable
Here is sample patch:
--- tape.c.orig Fri Apr 20 22:25:10 2001
+++ tape.c Fri Apr 20 23:12:07 2001
@@ -559,6 +559,14 @@
return (genliteraldir(name, curfile.ino));
case IFLNK:
+ {
+ uid_t uid;
+ gid_t gid;
+ int ret;
+
+ uid = curfile.dip->di_uid;
+ gid = curfile.dip->di_gid;
+
lnkbuf[0] = '\0';
pathlen = 0;
getfile(xtrlnkfile, xtrlnkskip);
@@ -567,7 +575,13 @@
"%s: zero length symbolic link (ignored)\n", name);
return (GOOD);
}
- return (linkit(lnkbuf, name, SYMLINK));
+ ret = linkit(lnkbuf, name, SYMLINK);
+ (void) lchown(name, uid, gid);
+ (void) lchmod(name, mode);
+ lutimes(name, timep);
+ /* symbolic link doesn't have any flags */
+ return (ret);
+ }
case IFIFO:
vprintf(stdout, "extract fifo %s\n", name);
--
Yoshihiko SARUMARU
mail: [EMAIL PROTECTED] web: http://www.imasy.or.jp/~mistral/
To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-current" in the body of the message