pledge "getpw" would notice access to /var/run/ypbind.lock, and grant "inet"
authorderaadt <deraadt@openbsd.org>
Fri, 15 Jul 2022 17:20:24 +0000 (17:20 +0000)
committerderaadt <deraadt@openbsd.org>
Fri, 15 Jul 2022 17:20:24 +0000 (17:20 +0000)
commit88d6f3283946754c6900367d275c4da84b397486
treeb518cc04ac4f3b0031e49d7f68585cbbd502e2a8
parent467651fa4a81e090f223fc0a4a50188f6aedcd0f
pledge "getpw" would notice access to /var/run/ypbind.lock, and grant "inet"
rights, so that libc/yp could access YP services via a fairly complex 'protocol'
including file access, sockets, etc.  This YP protocol is also used by ypldap --
this is our way of bringing 'NIS' services into libc without monster sub-libraries.
I have managed to remove this "inet" right by creating a new ypconnect() system
call, which performs parts of the yp_bind.c dance inside the kernel..  It checks if
domainname is set, looks for a binding file with advisory lock, reads it to
get the IP and udp/tcp port numbers, and then establishes a connnected socket
direct to that ypserv.  This socket has a SS_YP flag set, and non-required system
calls are prohibited. libc maintains lifetime on this socket so a process
should never see it, but it seems safer to block udp re-connect and other calls
even in non-pledge mode.
Userland changes to use this will follow in a few days.
Lots of help from claudio and jmatthew, also ok miod
sys/kern/syscalls.master
sys/kern/uipc_syscalls.c
sys/sys/socketvar.h