Code

Renamed CONNECTION_* constants to SDB_CONNECTION_*.
[sysdb.git] / src / client / sock.c
index fd18a1efc689c331df0740feab0f1d4e2a9d3e86..8602532da9eea9d4575d85d52fdc82cc34976c91 100644 (file)
  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+#if HAVE_CONFIG_H
+#      include "config.h"
+#endif /* HAVE_CONFIG_H */
+
 #include "client/sock.h"
 #include "utils/error.h"
 #include "utils/strbuf.h"
@@ -162,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];
@@ -175,8 +179,10 @@ 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;
+       }
 
        if (status < 0) {
                char errbuf[1024];
@@ -187,10 +193,15 @@ 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) {
+       if (rstatus == SDB_CONNECTION_ERROR) {
                sdb_log(SDB_LOG_ERR, "Access denied for user '%s'", username);
                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);
+       }
 
        sdb_client_close(client);
        sdb_strbuf_destroy(buf);
@@ -205,6 +216,22 @@ sdb_client_sockfd(sdb_client_t *client)
        return client->fd;
 } /* sdb_client_sockfd */
 
+int
+sdb_client_shutdown(sdb_client_t *client, int how)
+{
+       if (! client) {
+               errno = ENOTSOCK;
+               return -1;
+       }
+
+       if (client->fd < 0) {
+               errno = EBADF;
+               return -1;
+       }
+
+       return shutdown(client->fd, how);
+} /* sdb_client_shutdown */
+
 void
 sdb_client_close(sdb_client_t *client)
 {