X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Ffrontend%2Fsession.c;h=f64a1b967cb541bd0ba4241e426f380b14153b1c;hb=HEAD;hp=9dedcf6d154675e84731e412313675bf306bc48b;hpb=5bed28501c56d1268d49e62d807897d2ce32af3f;p=sysdb.git diff --git a/src/frontend/session.c b/src/frontend/session.c index 9dedcf6..f64a1b9 100644 --- a/src/frontend/session.c +++ b/src/frontend/session.c @@ -25,27 +25,52 @@ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#if HAVE_CONFIG_H +# include "config.h" +#endif /* HAVE_CONFIG_H */ + #include "sysdb.h" #include "frontend/connection-private.h" +#include + /* * public API */ int -sdb_session_start(sdb_conn_t *conn) +sdb_conn_session_start(sdb_conn_t *conn) { - if ((! conn) || (conn->username)) + char username[sdb_strbuf_len(conn->buf) + 1]; + const char *tmp; + + if ((! conn) || (conn->cmd != SDB_CONNECTION_STARTUP)) + return -1; + + tmp = sdb_strbuf_string(conn->buf); + if ((! tmp) || (! conn->cmd_len) || (! *tmp)) { + sdb_strbuf_sprintf(conn->errbuf, "Invalid empty username"); return -1; + } + strncpy(username, tmp, conn->cmd_len); + username[conn->cmd_len] = '\0'; - if (conn->cmd != CONNECTION_STARTUP) + if (! conn->username) { + /* We trust the remote peer. + * TODO: make the auth mechanism configurable */ + conn->username = strdup(username); + } + else if (strcmp(conn->username, username)) { + sdb_strbuf_sprintf(conn->errbuf, "%s cannot act on behalf of %s", + conn->username, username); return -1; + } - /* XXX: for now, simply accept all connections */ - sdb_connection_send(conn, CONNECTION_OK, 0, NULL); + sdb_connection_send(conn, SDB_CONNECTION_OK, 0, NULL); + conn->ready = 1; return 0; -} /* session_start */ +} /* sdb_conn_session_start */ /* vim: set tw=78 sw=4 ts=4 noexpandtab : */