Code

utils/proto: Replaced sdb_proto_send_msg with sdb_proto_marshal.
[sysdb.git] / src / client / sock.c
index b60bad45e2cf97d47d2c101513c030f4a27fff5e..eaa10ffdb95307a31c0233d10d46b68f33d7f912 100644 (file)
@@ -56,7 +56,7 @@
 struct sdb_client {
        char *address;
        int   fd;
-       _Bool eof;
+       bool  eof;
 };
 
 /*
@@ -166,7 +166,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 +179,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 +193,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 +248,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_proto_send(client->fd, sizeof(buf), buf);
 } /* sdb_client_send */
 
 ssize_t
@@ -322,7 +332,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))