On Wed, 2015-05-13 at 00:52 +0200, Samuel Thibault wrote:
> Hello,
>
> Svante Signell, le Tue 12 May 2015 22:09:33 +0200, a écrit :
> > netfs_attempt_chmod() returns an error of EOPNOTSUPP and hits the
> Err, no, see what I wrote earlier: “implement the
> netfs_set_translator stub by just calling file_set_translator on the
> underlying node to set the passive translator.” Do not overwrite
> netfs_S_file_set_translator, it'd disable everything that is done in the
> netfs_S_file_set_translator provided by libnetfs...
>
> > + char trans[sizeof _HURD_IFSOCK + passivelen];
> > + memcpy (trans, _HURD_IFSOCK, sizeof _HURD_IFSOCK);
> > + memcpy (&trans[sizeof _HURD_IFSOCK], passive, passivelen);
>
> Err, no, don't build the translator path by hand, it's already given to
> you in the "passive" parameter! Simply pass passive and passivelen to
> file_set_translator.
New patch attached.
Explanation as follows:
Implement the netfs_set_translator stub by calling file_set_translator
on the underlying node to set the passive translator.
libnetfs/file_set_translator.c:netfs_S_file_set_translator does not
handle the case when the passive translator is a socket.
Q: Why does it work without fakeroot-hurd?
Index: hurd-0.6/trans/fakeroot.c
===================================================================
--- hurd-0.6.orig/trans/fakeroot.c
+++ hurd-0.6/trans/fakeroot.c
@@ -450,6 +450,20 @@ netfs_S_dir_lookup (struct protid *dirus
return err;
}
+/* The user may define this function. Attempt to set the passive
+ translator record for FILE to ARGZ (of length ARGZLEN) for user
+ CRED. */
+error_t
+netfs_set_translator (struct iouser *cred, struct node *np,
+ char *argz, size_t argzlen)
+{
+ return file_set_translator (netfs_node_netnode (np)->file,
+ FS_TRANS_EXCL|FS_TRANS_SET,
+ FS_TRANS_EXCL|FS_TRANS_SET, 0,
+ argz, argzlen,
+ MACH_PORT_NULL, MACH_MSG_TYPE_COPY_SEND);
+}
+
/* These callbacks are used only by the standard netfs_S_dir_lookup,
which we do not use. But the shared library requires us to define them. */
error_t