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

Reply via email to