I've run into a small problem when using GNU install. I'm on Linux 2.2.19,
with the destination directory being mounted via smbfs. (The remote end is
actually samba on Solaris, being used to export a ClearCase view.) The
invocation of install is using the -m switch, but *not* the -o or -g switches.
install was exiting with an "operation not permitted" error.
Running strace, I could see the problem was coming from a call to chown() with
uid=gid=-1 (i.e. leave owner and group the same). I've found that in the Linux
kernel, a chown call with either of these arguments =-1 is taken to mean "copy
that arg from what the file has now", rather than "don't bother changing the
file if both are -1". That method would probably have been wrong anyway, since
the mtime needs to change at least.
The underlying problem is probably that smbfs doesn't support a chown
operation, as I doubt it's part of the SMB protocol.
So, I decided the easiest fix was in install. If neither the -o nor -g
switches have been specified, don't bother trying to do chown() on the
destination file at all. I've attached a patch to do this.
--
Richard | SuperH Core Architecture /// .... At home ...
Curnow | [EMAIL PROTECTED] /// [EMAIL PROTECTED]
| http://www.superh.com/ /// http://www.rrbcurnow.freeuk.com/
--- install.c.orig Thu Oct 25 13:15:02 2001
+++ install.c Thu Oct 25 13:19:37 2001
@@ -465,15 +465,21 @@
want to know. But AFS returns EPERM when you try to change a
file's group; thus the kludge. */
- if (chown (path, owner_id, group_id)
+ /* If we're not changing the owner or group, don't do chown at all.
+ * The chown operation doesn't seem to be permitted on smbfs. */
+
+ if ((owner_id != (uid_t) -1) || (group_id != (gid_t) -1))
+ {
+ if (chown (path, owner_id, group_id)
#ifdef AFS
- && errno != EPERM
+ && errno != EPERM
#endif
- )
+ )
{
error (0, errno, "cannot change ownership of %s", quote (path));
err = 1;
}
+ }
if (!err && chmod (path, mode))
{