X-Git-Url: https://git.tokkee.org/?p=sysdb.git;a=blobdiff_plain;f=src%2Fclient%2Fsock.c;h=d4596cd7a858cda76e1144492c5e2cf71c11291b;hp=b60bad45e2cf97d47d2c101513c030f4a27fff5e;hb=e2258e6ee3c933351f81490bac576438ff973ae4;hpb=ab6e6823b628af93e1f5d95ab1677e8843d913af diff --git a/src/client/sock.c b/src/client/sock.c index b60bad4..d4596cd 100644 --- a/src/client/sock.c +++ b/src/client/sock.c @@ -33,6 +33,7 @@ #include "utils/error.h" #include "utils/strbuf.h" #include "utils/proto.h" +#include "utils/os.h" #include @@ -56,7 +57,7 @@ struct sdb_client { char *address; int fd; - _Bool eof; + bool eof; }; /* @@ -166,7 +167,7 @@ sdb_client_connect(sdb_client_t *client, const char *username) if (! username) username = ""; - status = sdb_client_send(client, CONNECTION_STARTUP, + status = sdb_client_send(client, SDB_CONNECTION_STARTUP, (uint32_t)strlen(username), username); if (status < 0) { char errbuf[1024]; @@ -179,7 +180,7 @@ sdb_client_connect(sdb_client_t *client, const char *username) buf = sdb_strbuf_create(64); rstatus = 0; status = sdb_client_recv(client, &rstatus, buf); - if ((status > 0) && (rstatus == CONNECTION_OK)) { + if ((status > 0) && (rstatus == SDB_CONNECTION_OK)) { sdb_strbuf_destroy(buf); return 0; } @@ -193,8 +194,14 @@ sdb_client_connect(sdb_client_t *client, const char *username) sdb_log(SDB_LOG_ERR, "Encountered end-of-file while waiting " "for server response"); - if (rstatus != CONNECTION_OK) { - sdb_log(SDB_LOG_ERR, "Access denied for user '%s'", username); + if (rstatus == SDB_CONNECTION_ERROR) { + sdb_log(SDB_LOG_ERR, "Access denied for user '%s': %s", + username, sdb_strbuf_string(buf)); + status = -((int)rstatus); + } + else if (rstatus != SDB_CONNECTION_OK) { + sdb_log(SDB_LOG_ERR, "Received unsupported authentication request " + "(status %d) during startup", (int)rstatus); status = -((int)rstatus); } @@ -242,10 +249,14 @@ ssize_t sdb_client_send(sdb_client_t *client, uint32_t cmd, uint32_t msg_len, const char *msg) { + char buf[2 * sizeof(uint32_t) + msg_len]; + if ((! client) || (! client->fd)) return -1; + if (sdb_proto_marshal(buf, sizeof(buf), cmd, msg_len, msg) < 0) + return -1; - return sdb_proto_send_msg(client->fd, cmd, msg_len, msg); + return sdb_write(client->fd, sizeof(buf), buf); } /* sdb_client_send */ ssize_t @@ -271,7 +282,7 @@ sdb_client_recv(sdb_client_t *client, while (42) { ssize_t status; - if (sdb_proto_select(client->fd, SDB_PROTO_SELECTIN)) + if (sdb_select(client->fd, SDB_SELECTIN)) return -1; errno = 0; @@ -322,7 +333,7 @@ sdb_client_recv(sdb_client_t *client, return (ssize_t)total; } /* sdb_client_recv */ -_Bool +bool sdb_client_eof(sdb_client_t *client) { if ((! client) || (client->fd < 0))