]> git.ozlabs.org Git - petitboot/blobdiff - ui/ncurses/nc-cui.c
Disable shell access when lockdown is active
[petitboot] / ui / ncurses / nc-cui.c
index 0c355ccbe4cee172cb9cfd516171851c9fb83b5b..c2f1c83f1c406bcd698c9b9f782da25b431f3800 100644 (file)
@@ -25,6 +25,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <sys/ioctl.h>
+#include <sys/reboot.h>
 
 #include "log/log.h"
 #include "pb-protocol/pb-protocol.h"
@@ -47,6 +48,14 @@ extern const struct help_text main_menu_help_text;
 
 static struct pmenu *main_menu_init(struct cui *cui);
 
+static bool lockdown_active(void)
+{
+       bool lockdown = false;
+       if (access(LOCKDOWN_FILE, F_OK) != -1)
+               lockdown = true;
+       return lockdown;
+}
+
 static void cui_start(void)
 {
        initscr();                      /* Initialize ncurses. */
@@ -94,6 +103,13 @@ static void cui_atexit(void)
        clear();
        refresh();
        endwin();
+
+       bool lockdown = lockdown_active();
+
+       while (lockdown) {
+               sync();
+               reboot(RB_AUTOBOOT);
+       }
 }
 
 /**
@@ -543,6 +559,7 @@ static int cui_boot_option_add(struct device *dev, struct boot_option *opt,
        cod->bd->initrd = talloc_strdup(cod->bd, opt->initrd_file);
        cod->bd->dtb = talloc_strdup(cod->bd, opt->dtb_file);
        cod->bd->args = talloc_strdup(cod->bd, opt->boot_args);
+       cod->bd->args_sig_file = talloc_strdup(cod->bd, opt->args_sig_file);
 
        /* This disconnects items array from menu. */
        result = set_menu_items(cui->main->ncm, NULL);
@@ -566,6 +583,7 @@ static int cui_boot_option_add(struct device *dev, struct boot_option *opt,
        pb_log("   image  '%s'\n", cod->bd->image);
        pb_log("   initrd '%s'\n", cod->bd->initrd);
        pb_log("   args   '%s'\n", cod->bd->args);
+       pb_log("   argsig '%s'\n", cod->bd->args_sig_file);
 
        /* Re-attach the items array. */
        result = set_menu_items(cui->main->ncm, cui->main->items);
@@ -824,6 +842,7 @@ static struct pmenu *main_menu_init(struct cui *cui)
        struct pmenu_item *i;
        struct pmenu *m;
        int result;
+       bool lockdown = lockdown_active();
 
        m = pmenu_init(cui, 7, cui_on_exit);
        if (!m) {
@@ -867,7 +886,10 @@ static struct pmenu *main_menu_init(struct cui *cui)
        i->on_execute = menu_add_url_execute;
        pmenu_item_insert(m, i, 5);
 
-       i = pmenu_item_create(m, _("Exit to shell"));
+       if (lockdown)
+               i = pmenu_item_create(m, _("Reboot"));
+       else
+               i = pmenu_item_create(m, _("Exit to shell"));
        i->on_execute = pmenu_exit_cb;
        pmenu_item_insert(m, i, 6);