~kvik/mq

pin(1): don't end in empty section
mq: fix incorrect free in streamclose
mq: various code quality improvements
mq: limit root directory permission
mq: naming is hard, try again
mq: fix Tcreate handling

When handling Tcreate we forgot that create(2) must also act as open(2),
that is, the server must initialize the state associated with the open
file in the same way it does when receiving an Topen call.

It also turned out that we needed to manually replace the fid->file
pointer with the new File, and also set the response qid to the new
file's qid.  This wasn't documented anywhere and it is likely that
the 9pfile(2) library can do it automatically, but until further
investigation we just do it ourselves.
mkfile: remove the 'package' target

It's simple enough to call tar manually.
mq: appease "non-interruptable temporary" warnings

These warnings are vacuous since an interrupted userspace process
has its state fully saved and restored, but they are more annoying
to look at than it is to rewrite the code that produces them.
pin: silence unimportant error
mq: clamp response to request size
mkfile: add 'package' target
README: provide links to formatted manual pages
mq: create an automatic root stream group

mq is quite often used in situations where only a single stream group
is needed.  In these cases it is preferable to just create the streams
immediately under the mq mount, avoiding the need for redundant naming
and an extra level in hierarchy.

We allow this by allocating an automatic root stream group at startup.
pin: add the -s option
mq: fix use after free
pin: get rid of info messages

These are not useful now that specific flags are required for creating
and attaching -- the command itself documents exactly what is supposed
to happen and an error is printed if it didn't.
pin: make command line interface more explicit
pin: don't fork the namespace by default

Forking the namespace for a newly created pinned process makes sense if
perfect isolation from a parent is wanted or needed.  However, doing
this by default prevents implementing a very useful  namespace lifting 
technique, where a process such as a shell is pinned but doesn't fork
the namespace, thus enabling anyone who can attach to this shell a
control over a foreign namespace -- something that generally isn't
possible to do in Plan 9.

This technique and examples are explained in the following article:

	http://docs.a-b.xyz/namespace-lifting.html

Not forking the namespace also follows the behaviour of the usual tools
such as the shell, which never fork if not explicitly told to do so.
This way, at least namespace-wise, running normal rc versus pinned rc is
equivalent.

Users can easily `rfork n` when the namespace forking *is* needed,
which also makes things more transparent.
mq: reading 'ctl' file reports current configuration
Next