X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Ffrontend%2Fconnection.c;h=6b785392a1255311d5fae116a1bfb334186534db;hb=8e7384947ee57bbbe58e210be4f6ec04ef8ff508;hp=1fa4ba98c6888a726f8e921cce82f9d7e1d8900a;hpb=1913e0c2281b514d1f38559bd2b88dc5c92d4efc;p=sysdb.git diff --git a/src/frontend/connection.c b/src/frontend/connection.c index 1fa4ba9..6b78539 100644 --- a/src/frontend/connection.c +++ b/src/frontend/connection.c @@ -140,12 +140,15 @@ connection_destroy(sdb_object_t *obj) "(%zu byte%s left in buffer)", len, len == 1 ? "" : "s"); } - sdb_log(SDB_LOG_DEBUG, "frontend: Closing connection on fd=%i", - conn->fd); + sdb_log(SDB_LOG_DEBUG, "frontend: Closing connection %s", obj->name); if (conn->fd >= 0) close(conn->fd); conn->fd = -1; + if (conn->username) + free(conn->username); + conn->username = NULL; + sdb_strbuf_destroy(conn->buf); conn->buf = NULL; sdb_strbuf_destroy(conn->errbuf); @@ -264,6 +267,10 @@ command_handle(sdb_conn_t *conn) const char *errmsg = "Authentication required"; sdb_connection_send(conn, CONNECTION_ERROR, (uint32_t)strlen(errmsg), errmsg); + + /* remove the command from the buffer */ + if (conn->cmd_len) + sdb_strbuf_skip(conn->buf, 0, conn->cmd_len); return -1; } @@ -440,6 +447,14 @@ sdb_connection_accept(int fd) void sdb_connection_close(sdb_conn_t *conn) { + if (! conn) + return; + + /* close the connection even if someone else still references it */ + if (conn->fd >= 0) + close(conn->fd); + conn->fd = -1; + sdb_object_deref(SDB_OBJ(conn)); } /* sdb_connection_close */