Date: Tue, 09 Sep 1997 00:23:54 +0100 From: Brian Somers <brian@awfulhak.org> To: Tom <tom@sdf.com> Cc: Brian Somers <brian@awfulhak.org>, freebsd-stable@FreeBSD.ORG Subject: Re: unix domain sockets in 2.2-stable Message-ID: <199709082323.AAA06597@awfulhak.demon.co.uk> In-Reply-To: Your message of "Mon, 08 Sep 1997 14:18:30 PDT." <Pine.BSF.3.95q.970908141342.23740A-100000@misery.sdf.com>
next in thread | previous in thread | raw e-mail | index | archive | help
>
> On Mon, 8 Sep 1997, Brian Somers wrote:
>
> > >
> > > I use Cyrus for handling a local mail store. It uses a special pwcheck
> > > daemon to check passwords as non-root users can't read the encrypted
> > > password field. The Cyrus imap and pop servers talk to pwcheck on a unix
> > > domain socket at /var/pwcheck/pwcheck
> > >
> > > This all worked well up to a 2.2-stable kernel from Aug 31. My
> > > previous 2.2-stable kernel from Jul 19 still works. If I boot the Aug
> > > 31 kernel, cyrus isn't able to connect to the pwcheck deamon, and if I
> > > boot to the older Jul 19 kernel cyrus works fine.
> > >
> > > The connect() call in the following segment of code fails on Aug 31
> > > kernels, and works on Jul 19 kernels and earlier (code is taken from
> > > unix_unix_pwcheck.c from Cyrus 1.5.2).
> > >
> > > memset((char *)&srvaddr, 0, sizeof(srvaddr));
> > > srvaddr.sun_family = AF_UNIX;
> > > strcpy(srvaddr.sun_path, STATEDIR);
> > > strcat(srvaddr.sun_path, "/pwcheck/pwcheck");
> > > r = connect(s, (struct sockaddr *)&srvaddr, sizeof(srvaddr));
> > > if (r == -1) {
> > > *reply = "cannot connect to pwcheck server";
> > > return 1;
> > > }
> > >
> > >
> > > Does anyone have any idea on what has changed as far as unix domain
> > > sockets in 2.2-stable lately? I've looked at the committ logs, and I
> > > don't see anything that stands out.
> >
> > There are no problems with local sockets and ppp. I've just checked
> > a RELENG_2_2 system built on September 1. Try running ppp in auto
> > mode with a "set server /my/local/socket" in the config (you don't
> > have to actually connect to anything), and then run "pppctl -p xxxx
> > /my/local/socket show ipcp".... works ok.
> >
> > I'd suggest a rebuild of your system.
>
> I already rebuilt my system before sending this.
>
> I found out what is happening. The group and other permissions on unix
> sockets are ignored. In my case the pwcheck daemon runs as root, and
> therefore the socket is owned by root. However, the cyrus daemons can't
> open the socket because it seesm that the other bits (I have r-x
> set) are ignored, and the cyrus daemons run as the cyrus user. If I chown
> the socket after pwcheck opens it, to the cyrus user, everything works ok.
>
> This new behaviour is now very linux-like.
Sounds like you've got a dodgy umask. The bind() that creates the
local socket looks at your umask. The only way to choose your
permissions at bind() time is to get the umask correct.
Take a look at /usr/src/usr.sbin/ppp/server.c - it does and undoes a
umask() around the bind() call to overcome this.
I wasn't aware that this behaviour has changed, but that doesn't mean
much :-I
>
> Tom
>
--
Brian <brian@awfulhak.org>, <brian@freebsd.org>
<http://www.awfulhak.org>
Don't _EVER_ lose your sense of humour....
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199709082323.AAA06597>
