Add option to hold lease on unexpected disconnect
[src/drm-lease-manager.git] / drm-lease-manager / lease-server.c
index ac4dd01..a7e3190 100644 (file)
@@ -329,7 +329,7 @@ bool ls_get_request(struct ls *ls, struct ls_req *req)
                        request = parse_client_request(sock);
 
                if (request < 0 && (ev.events & POLLHUP))
-                       request = LS_REQ_RELEASE_LEASE;
+                       request = LS_REQ_CLIENT_DISCONNECT;
 
                struct ls_client *client = sock->client;
                struct ls_server *server = client->serv;
@@ -346,39 +346,21 @@ bool ls_send_fd(struct ls *ls, struct ls_client *client, int fd)
        assert(ls);
        assert(client);
 
+       struct ls_server *serv = client->serv;
+
        if (fd < 0)
                return false;
 
-       char data[1];
-       struct iovec iov = {
-           .iov_base = data,
-           .iov_len = sizeof(data),
-       };
-
-       char ctrl_buf[CMSG_SPACE(sizeof(int))] = {0};
-
-       struct msghdr msg = {
-           .msg_iov = &iov,
-           .msg_iovlen = 1,
-           .msg_controllen = sizeof(ctrl_buf),
-           .msg_control = ctrl_buf,
-       };
-
-       struct cmsghdr *cmsg = CMSG_FIRSTHDR(&msg);
-       cmsg->cmsg_level = SOL_SOCKET;
-       cmsg->cmsg_type = SCM_RIGHTS;
-       cmsg->cmsg_len = CMSG_LEN(sizeof(int));
-       *((int *)CMSG_DATA(cmsg)) = fd;
-
-       struct ls_server *serv = client->serv;
-
-       if (sendmsg(client->socket.fd, &msg, 0) < 0) {
+       if (!send_lease_fd(client->socket.fd, fd)) {
                DEBUG_LOG("sendmsg failed on %s: %s\n", serv->address.sun_path,
                          strerror(errno));
                return false;
        }
 
-       INFO_LOG("Lease request granted on %s\n", serv->address.sun_path);
+       if (fd > 0)
+               INFO_LOG("Lease request granted on %s\n",
+                        serv->address.sun_path);
+
        return true;
 }