# $Id: README,v 1.4 2011/06/04 21:14:28 ksb Exp $ See the wrapper.html in this directory. Basically this program builds a single unix domain socket to tunnel or transport all the current wrappers through (under -m), and builds an environment (as a client) to instance that environment for others. Used with a forwarder for the unix domain socket this becomes a very potent (cross host, cross user, cross platform) data-flow. You can use this a lot if you work with many wrapper driven tools to make sure that the stack you process doesn't have other process's diversions between you and your diversions. Also to reset the diversion stack to avoid leaking information. More to the point the "sshw" program uses this to forward a diversion stack in whole (or part) to another host and/or login. This makes a diversion stack that spans machines, which is really powerful. To make this happen a wrapper sets any_link=1 any_1=/tmp/div00000/real/m1 with the file "/tmp/div00000/real" as the socket, then we can't open the "m1" file (because the socket is not a directory) so we connect to the "real" socket and send "m1" as the name of the service we need to chat with. The socket sends back access rights to the service we really should be talking to, we close the control socket, then just talk on the new socket all the same. This is what makes "gtfw" and "sshw" all work. If you are reading this from "msrc_base" then it won't make you happy yet, since the more advanced wrappers are not included in that package: you've got to walk before you can run. But run we shall, and like a very strong wind. See the mkcmd code for "divconnect.*" (under /usr/local/lib/mkcmd/util, or in the source in ../../lib/mkcmd/util_divconnect.*) where we trap a missing socket, then try to connect to the socket's path without the final component to allow a single socket to provide multiple diversions. -- ksb, Jun 2011 "... four good reason why I can't go back there again." C'Crows