]> git.ozlabs.org Git - petitboot/blobdiff - discover/discover-server.c
doc: Start writing some in-tree documentation
[petitboot] / discover / discover-server.c
index 23d6113ec7ce5de5675feff0e761745d854c2442..e29ce27270ab56841627ddd466afe502619b3928 100644 (file)
@@ -298,7 +298,7 @@ static int discover_server_handle_auth_message(struct client *client,
 {
        struct status *status;
        char *hash;
-       int rc;
+       int rc = 0;
 
        status = talloc_zero(client, struct status);
 
@@ -365,13 +365,29 @@ static int discover_server_handle_auth_message(struct client *client,
                                        _("Password updated successfully"));
                }
                break;
+       case AUTH_MSG_DECRYPT:
+               if (!client->can_modify) {
+                       pb_log("Unauthenticated client tried to open encrypted device %s\n",
+                                       auth_msg->decrypt_dev.device_id);
+                       rc = -1;
+                       status->type = STATUS_ERROR;
+                       status->message = talloc_asprintf(status,
+                                       _("Must authenticate before opening encrypted device"));
+                       break;
+               }
+
+               device_handler_open_encrypted_dev(client->server->device_handler,
+                               auth_msg->decrypt_dev.password,
+                               auth_msg->decrypt_dev.device_id);
+               break;
        default:
                pb_log("%s: unknown op\n", __func__);
                rc = -1;
                break;
        }
 
-       write_boot_status_message(client->server, client, status);
+       if (status->message)
+               write_boot_status_message(client->server, client, status);
        talloc_free(status);
 
        return rc;
@@ -387,7 +403,7 @@ static int discover_server_process_message(void *arg)
        struct client *client = arg;
        struct config *config;
        char *url;
-       int rc;
+       int rc = 0;
 
        message = pb_protocol_read_message(client, client->fd);
 
@@ -444,7 +460,7 @@ static int discover_server_process_message(void *arg)
                                talloc_free(status);
                        }
                }
-               return 0;
+               return rc;
        }
 
        switch (message->action) {
@@ -521,7 +537,7 @@ static int discover_server_process_message(void *arg)
                        break;
                }
 
-               rc = discover_server_handle_auth_message(client, auth_msg);
+               discover_server_handle_auth_message(client, auth_msg);
                talloc_free(auth_msg);
                break;
        default:
@@ -775,8 +791,11 @@ struct discover_server *discover_server_init(struct waitset *waitset)
        /* Allow all clients to communicate on this socket */
        group = getgrnam("petitgroup");
        if (group) {
-               chown(PB_SOCKET_PATH, 0, group->gr_gid);
-               chmod(PB_SOCKET_PATH, 0660);
+               if (chown(PB_SOCKET_PATH, 0, group->gr_gid))
+                       pb_log_fn("Error setting socket ownership: %m\n");
+               errno = 0;
+               if (chmod(PB_SOCKET_PATH, 0660))
+                       pb_log_fn("Error setting socket permissions: %m\n");
        }
 
        if (listen(server->socket, 8)) {