ws: Send and expect 'init' control messages over each transport

Each transport when opened sends 'init' control messages to each
other. This is initially used to double check that the same protocol
version is in use. But this will be expanded in later commits.

Reviewed-by: Marius Vollmer <marius.vollmer@redhat.com>
ws: Don't complain if SSH connection already closed when writing

When closing an SSH connection, don't complain if it's already
closed. libssh returns SSH_REQUEST_DENIED in this case.

This happens when the remote has closed but libssh hasn't let us
know yet. We assume that the notification will come soon.

Reviewed-by: Marius Vollmer <marius.vollmer@redhat.com>
ws: Send a 'channel-seed' in the WebSocket init message

This allows various web sockets to generate unique channels, without
having to get into NAT'ing everything in CockpitWebService.

This is necessary once various frames are the source of channels.
They'll need to be seeded appropriately so that they pick unique
channel ids.

The way that channels get their id, also needs to change a bit.
The id can't be allocated until the transport is open. So queueing
of messages happens at the channel level now.

Reviewed-by: Marius Vollmer <marius.vollmer@redhat.com>
session: Rename 'passwd' to 'password' for clarity

In the cases we're dealing with an actual password instead
of a struct passwd, use the full word 'password'

Reviewed-by: Marius Vollmer <marius.vollmer@redhat.com>
session: Lookup user info earlier and use it consistently

Lookup user info via getpwnam() right after authenticating and
use it consistently as the full user name, etc.

Reviewed-by: Marius Vollmer <marius.vollmer@redhat.com>
session: Lookup the user's full name in session

This can be a blocking operation, don't look it up in
cockpit-ws where we can't be blocking waiting for an
LDAP server or something like that.

Reviewed-by: Marius Vollmer <marius.vollmer@redhat.com>
ws: Send user info in the 'init' control channel message

Rather than filling in the user into the index page environment,
send it in the 'init' control message, along with the cockpit
setup info.

The index page will be changing, and this is much cleaner.

Closes #1332
Reviewed-by: Marius Vollmer <marius.vollmer@redhat.com>
ws: Show a login page for any .html resource being accessed

For other resources besides the main page, show a login page if user
doesn't have a cookie.

One big difference, we now refresh the page after completing a
sucessful login.
static: Change the styles of login page when shown inline

When not logging into cockpit as a whole, just show a basic login
screen on a white background. This will help not confuse users as
to what they're logging into.
tools: Ignore another glib leak