X-Git-Url: https://git.tokkee.org/?p=sysdb.git;a=blobdiff_plain;f=src%2Ffrontend%2Fconnection.c;h=44247ebd4961988035b7c90c70baf12e377b8c0b;hp=700c84ae42af2e0793b289e82c770807df609e51;hb=23b12088ee320df7b54f5c81011daf8995e22203;hpb=2bdb80165c2e095b169c59ef18607b30f8758ec7 diff --git a/src/frontend/connection.c b/src/frontend/connection.c index 700c84a..44247eb 100644 --- a/src/frontend/connection.c +++ b/src/frontend/connection.c @@ -44,10 +44,14 @@ #include #include +#include +#include + #include #include #include +#include /* * private variables @@ -123,12 +127,6 @@ connection_init(sdb_object_t *obj, va_list ap) conn->finish = NULL; conn->session = NULL; - if (conn->client_addr.ss_family != AF_UNIX) { - sdb_log(SDB_LOG_ERR, "frontend: Accepted connection using " - "unexpected family type %d", conn->client_addr.ss_family); - return -1; - } - sock_fl = fcntl(conn->fd, F_GETFL); if (fcntl(conn->fd, F_SETFL, sock_fl | O_NONBLOCK)) { char buf[1024]; @@ -282,9 +280,6 @@ 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) @@ -413,15 +408,39 @@ sdb_connection_enable_logging(void) } /* sdb_connection_enable_logging */ sdb_conn_t * -sdb_connection_accept(int fd) +sdb_connection_accept(int fd, sdb_conn_setup_cb setup, void *user_data) { + sdb_conn_t *conn; + const char *peer = "unknown"; + if (fd < 0) return NULL; /* the placeholder will be replaced with the accepted file * descriptor when initializing the object */ - return CONN(sdb_object_create(CONN_FD_PREFIX CONN_FD_PLACEHOLDER, + conn = CONN(sdb_object_create(CONN_FD_PREFIX CONN_FD_PLACEHOLDER, connection_type, fd)); + if (setup && (setup(conn, user_data) < 0)) { + sdb_object_deref(SDB_OBJ(conn)); + return NULL; + } + + if (conn->username) + peer = conn->username; + + if (conn->client_addr.ss_family == AF_UNIX) { + sdb_log(SDB_LOG_INFO, + "frontend: Accepted connection from peer %s", peer); + } + 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_INFO, "frontend: Accepted connection from " + "peer %s at %s:%s", peer, host, port); + } + return conn; } /* sdb_connection_create */ void