* SMTP-like, for ease of testing.

Data form is 7-bit ASCII, lines terminated by CRLF.  

You send a line of the following form:

<database> <search type> <optional argument>

And get back one of the following return values or as specified in the
detailed description below.

500 System error
501 Invalid command

<database> is one of passwd, group, or auth.

If <database> is auth, then we're doing an authentication.  We send a
username/password pair (so it's 'auth <user> <pass>').  We return either

250 Auth OK

or 

450 Auth Failed

The plaintext transmission of the password hash isn't the security issue it
might seem.  Although we *do* send the password hash, in a conventional
(non-shadow) local /etc/passwd we can get the hash anyway, so sniffing it
isn't going to do much of anything for anybody.  Being able to spoof the
hash in a replay attack doesn't help much either - much more productive to
spoof the reply.

In searching, we either look for a name or numeric ID (by specifying 'name'
or 'id' for for the search type) or we ask for a list of all entries in the
DB (by specifying 'list' in the search type).  Unless we want a list, we
should specify the value we want to look for.

If we search, the result will either be

200 <data line>

or

400 No record found

For a list, the result should be

300 Data to follow
<data line>
<data line>
<data line>
...

The data lines will be terminated by a blank line (ie CRLFCRLF).

Finally, if you're done you can finish things by sending 'quit' and then
disconnecting.

The data lines which are returned are as follows:

passwd: username:pass:uid:gid:GECOS:homedir:shell

group: groupname:pass:gid:members
