X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Ffrontend%2Fconnection.c;h=ebc3b99332d92d0e929f51467edbc549f0088630;hb=7d146c24e78c57af633c57fc75883602083fb83b;hp=62e5f9de6cb717c6e5e8807771fae01d040f7de1;hpb=d24d97e4eaeb145fd6be0276ccf1570601a54d94;p=sysdb.git diff --git a/src/frontend/connection.c b/src/frontend/connection.c index 62e5f9d..ebc3b99 100644 --- a/src/frontend/connection.c +++ b/src/frontend/connection.c @@ -125,7 +125,7 @@ connection_init(sdb_object_t *obj, va_list ap) conn->read = conn_read; conn->write = conn_write; conn->finish = NULL; - conn->session = NULL; + conn->ssl_session = NULL; sock_fl = fcntl(conn->fd, F_GETFL); if (fcntl(conn->fd, F_SETFL, sock_fl | O_NONBLOCK)) { @@ -170,7 +170,18 @@ connection_destroy(sdb_object_t *obj) "(%zu byte%s left in buffer)", len, len == 1 ? "" : "s"); } - sdb_log(SDB_LOG_DEBUG, "frontend: Closing connection %s", obj->name); + if (conn->client_addr.ss_family == AF_UNIX) { + sdb_log(SDB_LOG_DEBUG, "frontend: Closing connection %s from peer %s", + obj->name, conn->username); + } + else { + char host[1024] = "", port[32] = ""; + getnameinfo((struct sockaddr *)&conn->client_addr, + conn->client_addr_len, host, sizeof(host), port, sizeof(port), + NI_NUMERICHOST | NI_NUMERICSERV); + sdb_log(SDB_LOG_DEBUG, "frontend: Closing connection %s from peer %s " + "at %s:%s", obj->name, conn->username, host, port); + } sdb_connection_close(conn); if (conn->username) @@ -280,13 +291,11 @@ command_handle(sdb_conn_t *conn) assert(conn && (conn->cmd != SDB_CONNECTION_IDLE)); assert(! conn->skip_len); - sdb_log(SDB_LOG_DEBUG, "frontend: Handling command %u (len: %u)", - conn->cmd, conn->cmd_len); - if (conn->cmd == SDB_CONNECTION_PING) status = sdb_connection_ping(conn); else if (conn->cmd == SDB_CONNECTION_STARTUP) status = sdb_fe_session_start(conn); + else if (conn->cmd == SDB_CONNECTION_QUERY) status = sdb_fe_query(conn); else if (conn->cmd == SDB_CONNECTION_FETCH) @@ -297,6 +306,10 @@ command_handle(sdb_conn_t *conn) status = sdb_fe_lookup(conn); else if (conn->cmd == SDB_CONNECTION_STORE) status = sdb_fe_store(conn); + + else if (conn->cmd == SDB_CONNECTION_SERVER_VERSION) + status = sdb_connection_server_version(conn); + else { sdb_log(SDB_LOG_WARNING, "frontend: Ignoring invalid command %#x", conn->cmd); @@ -535,5 +548,20 @@ sdb_connection_ping(sdb_conn_t *conn) return 0; } /* sdb_connection_ping */ +int +sdb_connection_server_version(sdb_conn_t *conn) +{ + char msg[sizeof(uint32_t) + strlen(SDB_VERSION_EXTRA) + 1]; + + if ((! conn) || (conn->cmd != SDB_CONNECTION_SERVER_VERSION)) + return -1; + + sdb_proto_marshal_int32(msg, sizeof(msg), (uint32_t)SDB_VERSION); + strncpy(msg + sizeof(uint32_t), SDB_VERSION_EXTRA, + sizeof(msg) - sizeof(uint32_t)); + sdb_connection_send(conn, SDB_CONNECTION_OK, (uint32_t)sizeof(msg), msg); + return 0; +} /* sdb_connection_server_version */ + /* vim: set tw=78 sw=4 ts=4 noexpandtab : */