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