I think the problem is with the pflocal/io.c implementation of S_io_stat.
emacsclient is trying to
compare the uid provided by geteuid with the uid in the stat buffer from
calling fstat on the
file descriptor of a socket created with cloexec_socket (AF_UNIX,
SOCK_STREAM, 0);. But
S_io_stat doesn't set uid.

  memset (st, 0, sizeof (struct stat));

  st->st_fstype = FSTYPE_SOCKET;
  st->st_mode = sock->mode;
  st->st_fsid = getpid ();
  st->st_ino = sock->id;
  /* As we try to be clever with large transfers, ask for them. */
  st->st_blksize = vm_page_size * 16;

And because of that, it's defaulting to 0 (as determined by memset). The
solution could be as
simple as adding

st->st_uid = geteuid(); // or something like that

to S_io_stat. But I'm still trying to figure out how to build and test it.

Andrew


*Andrew Eggenberger*

-- 

*Andrew Eggenberger*

Reply via email to