A doosy! I added two new modes of operation in support of jails. Only
for BSD of course. First is a "proxy" mode that is used outside of a jail, to forward tmcc requests from inside the jail to boss over the normal ssl channel (when a remote node). We remove the pem files from inside the jail so it has no way to form a secure connection to tmcd on its own, and tmcd rejects non-ssl connections from remote nodes (it should probably reject them from local jails too). Second change is a "unix socket" mode that is the compliment to the proxy; tmcc inside of a jail connects to the tmcc proxy outside the jail via a unix domain socket that can be shared between the two because the outer environment can see inside the jailed filesystems (the jail sees a chroot environment). When the jail is started, the initial root shell gets an environment variable called TMCCUNIXPATH which holds the path to the socket. This makes it easy for anything started from that shell of course, but its still a minor pain when invoking tmcc from elsehwere, but that does not really happen, except when running it by hand. Anyway, tmcc forms a unix socket to the proxy and does its thing. The proxy filters out VNODE= and PRIVKEY= arguments, and inserts its own into the command string. This prevents a jail from trying to impersonate another vnode.
Showing with 440 additions and 184 deletions