X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Ffrontend%2Fconnection.c;h=a146e29711c3aa1cc4de78f59672d43ee52091e6;hb=45c5e83e104a382734eb30b90bf88aff4370d64f;hp=6b785392a1255311d5fae116a1bfb334186534db;hpb=8e7384947ee57bbbe58e210be4f6ec04ef8ff508;p=sysdb.git diff --git a/src/frontend/connection.c b/src/frontend/connection.c index 6b78539..a146e29 100644 --- a/src/frontend/connection.c +++ b/src/frontend/connection.c @@ -265,18 +265,12 @@ command_handle(sdb_conn_t *conn) if ((! conn->username) && (conn->cmd != CONNECTION_STARTUP)) { const char *errmsg = "Authentication required"; + sdb_strbuf_sprintf(conn->errbuf, errmsg); 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; } - /* reset */ - sdb_strbuf_sprintf(conn->errbuf, ""); - switch (conn->cmd) { case CONNECTION_PING: status = sdb_connection_ping(conn); @@ -363,12 +357,6 @@ command_handle(sdb_conn_t *conn) sdb_connection_send(conn, CONNECTION_ERROR, (uint32_t)sdb_strbuf_len(conn->errbuf), sdb_strbuf_string(conn->errbuf)); - - /* remove the command from the buffer */ - if (conn->cmd_len) - sdb_strbuf_skip(conn->buf, 0, conn->cmd_len); - conn->cmd = CONNECTION_IDLE; - conn->cmd_len = 0; return status; } /* command_handle */ @@ -380,12 +368,17 @@ command_init(sdb_conn_t *conn) assert(conn && (conn->cmd == CONNECTION_IDLE) && (! conn->cmd_len)); + /* reset */ + sdb_strbuf_sprintf(conn->errbuf, ""); + conn->cmd = connection_get_int32(conn, 0); conn->cmd_len = connection_get_int32(conn, sizeof(uint32_t)); len = 2 * sizeof(uint32_t); - if (conn->cmd == CONNECTION_IDLE) + if (conn->cmd == CONNECTION_IDLE) { len += conn->cmd_len; + conn->cmd_len = 0; + } sdb_strbuf_skip(conn->buf, 0, len); return 0; } /* command_init */ @@ -472,9 +465,16 @@ sdb_connection_read(sdb_conn_t *conn) && (sdb_strbuf_len(conn->buf) >= 2 * sizeof(int32_t))) command_init(conn); if ((conn->cmd != CONNECTION_IDLE) - && (sdb_strbuf_len(conn->buf) >= conn->cmd_len)) + && (sdb_strbuf_len(conn->buf) >= conn->cmd_len)) { command_handle(conn); + /* remove the command from the buffer */ + if (conn->cmd_len) + sdb_strbuf_skip(conn->buf, 0, conn->cmd_len); + conn->cmd = CONNECTION_IDLE; + conn->cmd_len = 0; + } + if (status <= 0) break;