mirror of
https://github.com/palera1n/palera1n.git
synced 2026-10-24 02:59:49 +02:00
fix: incorrect handling of flag checks
This commit is contained in:
2 files changed
+60
-39
No files matched your search
+56
-39
@@ -103,6 +103,7 @@ void print_usage(char* argv) {
|
|||||||
" -T, --telnetd Enable TELNET daemon on port 46 (insecure)\n"
|
" -T, --telnetd Enable TELNET daemon on port 46 (insecure)\n"
|
||||||
" -V, --verbose-boot Enable verbose booting\n"
|
" -V, --verbose-boot Enable verbose booting\n"
|
||||||
" -p, --early-exit Exit after uploading Pongo\n"
|
" -p, --early-exit Exit after uploading Pongo\n"
|
||||||
|
" -P, --late-exit Exit after uploading existing images to Pongo\n"
|
||||||
" -e, --extra-bootargs <BOOTARGS> Set extra bootargs\n"
|
" -e, --extra-bootargs <BOOTARGS> Set extra bootargs\n"
|
||||||
" -k, --override-pongo <FILE PATH> Override Pongo image\n"
|
" -k, --override-pongo <FILE PATH> Override Pongo image\n"
|
||||||
" -K, --override-kpf <FILE PATH> Override kernel patchfinder\n"
|
" -K, --override-kpf <FILE PATH> Override kernel patchfinder\n"
|
||||||
@@ -136,6 +137,7 @@ void print_usage(char* argv) {
|
|||||||
" RA1N_TELNETD=1 Enable TELNET daemon on port 46 (insecure)\n"
|
" RA1N_TELNETD=1 Enable TELNET daemon on port 46 (insecure)\n"
|
||||||
" RA1N_VERBOSE_BOOT=1 Enable verbose booting\n"
|
" RA1N_VERBOSE_BOOT=1 Enable verbose booting\n"
|
||||||
" RA1N_EARLY_EXIT=1 Exit after uploading Pongo\n"
|
" RA1N_EARLY_EXIT=1 Exit after uploading Pongo\n"
|
||||||
|
" RA1N_LATE_EXIT=1 Exit after uploading existing images to Pongo\n"
|
||||||
" RA1N_EXTRA_BOOTARGS=<FILE PATH> Set extra bootargs\n"
|
" RA1N_EXTRA_BOOTARGS=<FILE PATH> Set extra bootargs\n"
|
||||||
" RA1N_OVERRIDE_PONGO=<FILE PATH> Override Pongo image\n"
|
" RA1N_OVERRIDE_PONGO=<FILE PATH> Override Pongo image\n"
|
||||||
" RA1N_OVERRIDE_KPF=<FILE PATH> Override kernel patchfinder\n"
|
" RA1N_OVERRIDE_KPF=<FILE PATH> Override kernel patchfinder\n"
|
||||||
@@ -176,7 +178,7 @@ void parse_arguments(int argc, char* argv[]) {
|
|||||||
bool set_rootless = false, set_rootful = false;
|
bool set_rootless = false, set_rootful = false;
|
||||||
bool set_fakefs = false, set_partial_fakefs = false;
|
bool set_fakefs = false, set_partial_fakefs = false;
|
||||||
bool set_safemode = false, set_telnetd = false, set_verbose = false;
|
bool set_safemode = false, set_telnetd = false, set_verbose = false;
|
||||||
bool set_pongo_exit = false, set_no_colors = false, set_quick = false;
|
bool set_pongo_exit = false, set_pongo_late = false, set_no_colors = false, set_quick = false;
|
||||||
bool set_extra_bootargs = false, set_pongo = false, set_kpf = false;
|
bool set_extra_bootargs = false, set_pongo = false, set_kpf = false;
|
||||||
bool set_overlay = false, set_ramdisk = false;
|
bool set_overlay = false, set_ramdisk = false;
|
||||||
|
|
||||||
@@ -202,6 +204,7 @@ void parse_arguments(int argc, char* argv[]) {
|
|||||||
{"telnetd", no_argument, NULL, 'T'},
|
{"telnetd", no_argument, NULL, 'T'},
|
||||||
{"verbose-boot", no_argument, NULL, 'V'},
|
{"verbose-boot", no_argument, NULL, 'V'},
|
||||||
{"early-exit", no_argument, NULL, 'p'},
|
{"early-exit", no_argument, NULL, 'p'},
|
||||||
|
{"late-exit", no_argument, NULL, 'P'},
|
||||||
{"extra-bootargs", required_argument, NULL, 'e'},
|
{"extra-bootargs", required_argument, NULL, 'e'},
|
||||||
{"override-pongo", required_argument, NULL, 'k'},
|
{"override-pongo", required_argument, NULL, 'k'},
|
||||||
{"override-kpf", required_argument, NULL, 'K'},
|
{"override-kpf", required_argument, NULL, 'K'},
|
||||||
@@ -241,7 +244,7 @@ void parse_arguments(int argc, char* argv[]) {
|
|||||||
|
|
||||||
// MARK: Standard
|
// MARK: Standard
|
||||||
|
|
||||||
while ((options = getopt_long(argc, argv, "hvlfcBsTVpe:k:K:o:r:dnq", long_options, &option_index)) != -1) {
|
while ((options = getopt_long(argc, argv, "hvlfcBsTVpPe:k:K:o:r:dnq", long_options, &option_index)) != -1) {
|
||||||
switch (options) {
|
switch (options) {
|
||||||
case 'h': // --help
|
case 'h': // --help
|
||||||
print_usage(argv[0]);
|
print_usage(argv[0]);
|
||||||
@@ -294,11 +297,9 @@ void parse_arguments(int argc, char* argv[]) {
|
|||||||
palerain_flags |= palerain_option_ssv;
|
palerain_flags |= palerain_option_ssv;
|
||||||
break;
|
break;
|
||||||
case 'l': // --rootless
|
case 'l': // --rootless
|
||||||
palerain_flags &= ~palerain_option_rootful;
|
|
||||||
palerain_flags |= palerain_option_rootless;
|
palerain_flags |= palerain_option_rootless;
|
||||||
break;
|
break;
|
||||||
case 'f': // --rootful
|
case 'f': // --rootful
|
||||||
palerain_flags &= ~palerain_option_rootless;
|
|
||||||
palerain_flags |= palerain_option_rootful;
|
palerain_flags |= palerain_option_rootful;
|
||||||
break;
|
break;
|
||||||
case 'c': // --setup-fakefs
|
case 'c': // --setup-fakefs
|
||||||
@@ -319,6 +320,9 @@ void parse_arguments(int argc, char* argv[]) {
|
|||||||
case 'p': // --early-exit
|
case 'p': // --early-exit
|
||||||
palerain_flags |= palerain_option_pongo_exit;
|
palerain_flags |= palerain_option_pongo_exit;
|
||||||
break;
|
break;
|
||||||
|
case 'P': // --late-exit
|
||||||
|
palerain_flags |= palerain_option_pongo_full;
|
||||||
|
break;
|
||||||
case 'e': // --extra-bootargs
|
case 'e': // --extra-bootargs
|
||||||
if (strlen(optarg) > (sizeof(boot_args) - 0x20)) {
|
if (strlen(optarg) > (sizeof(boot_args) - 0x20)) {
|
||||||
LOG_ERROR("Boot arguments too long!");
|
LOG_ERROR("Boot arguments too long!");
|
||||||
@@ -423,11 +427,9 @@ void parse_arguments(int argc, char* argv[]) {
|
|||||||
palerain_flags |= palerain_option_ssv;
|
palerain_flags |= palerain_option_ssv;
|
||||||
}
|
}
|
||||||
if (!set_rootless && get_env_binary("RA1N_ROOTLESS") == 1) {
|
if (!set_rootless && get_env_binary("RA1N_ROOTLESS") == 1) {
|
||||||
palerain_flags &= ~palerain_option_rootful;
|
|
||||||
palerain_flags |= palerain_option_rootless;
|
palerain_flags |= palerain_option_rootless;
|
||||||
}
|
}
|
||||||
if (!set_rootful && get_env_binary("RA1N_ROOTFUL") == 1) {
|
if (!set_rootful && get_env_binary("RA1N_ROOTFUL") == 1) {
|
||||||
palerain_flags &= ~palerain_option_rootless;
|
|
||||||
palerain_flags |= palerain_option_rootful;
|
palerain_flags |= palerain_option_rootful;
|
||||||
}
|
}
|
||||||
if (!set_fakefs && get_env_binary("RA1N_SETUP_FAKEFS") == 1) {
|
if (!set_fakefs && get_env_binary("RA1N_SETUP_FAKEFS") == 1) {
|
||||||
@@ -448,6 +450,9 @@ void parse_arguments(int argc, char* argv[]) {
|
|||||||
if (!set_pongo_exit && get_env_binary("RA1N_EARLY_EXIT") == 1) {
|
if (!set_pongo_exit && get_env_binary("RA1N_EARLY_EXIT") == 1) {
|
||||||
palerain_flags |= palerain_option_pongo_exit;
|
palerain_flags |= palerain_option_pongo_exit;
|
||||||
}
|
}
|
||||||
|
if (!set_pongo_late && get_env_binary("RA1N_LATE_EXIT") == 1) {
|
||||||
|
palerain_flags |= palerain_option_pongo_full;
|
||||||
|
}
|
||||||
if (!set_no_colors && get_env_binary("RA1N_NO_COLORS") == 1) {
|
if (!set_no_colors && get_env_binary("RA1N_NO_COLORS") == 1) {
|
||||||
palerain_flags |= palerain_option_no_colors;
|
palerain_flags |= palerain_option_no_colors;
|
||||||
}
|
}
|
||||||
@@ -533,48 +538,60 @@ void parse_arguments(int argc, char* argv[]) {
|
|||||||
|
|
||||||
// MARK: Flag checks
|
// MARK: Flag checks
|
||||||
|
|
||||||
if (!(palerain_flags & palerain_option_gui) &&
|
if ((palerain_flags & palerain_option_pongo_exit) &&
|
||||||
!(palerain_flags & palerain_option_tui))
|
(palerain_flags & palerain_option_pongo_full))
|
||||||
{
|
{
|
||||||
if ((palerain_flags & palerain_option_pongo_exit) &&
|
LOG_ERROR("You cannot specify both early-exit and late-exit modes.\n");
|
||||||
((palerain_flags & palerain_option_rootful) ||
|
print_usage(argv[0]);
|
||||||
(palerain_flags & palerain_option_rootless) ||
|
exit(1);
|
||||||
(palerain_flags & palerain_option_setup_rootful) ||
|
}
|
||||||
(palerain_flags & palerain_option_setup_partial_root)))
|
|
||||||
|
// Pongo exit modes are standalone and cannot be combined with root modes
|
||||||
|
if (palerain_flags & (palerain_option_pongo_exit | palerain_option_pongo_full))
|
||||||
|
{
|
||||||
|
if (palerain_flags & (palerain_option_rootful | palerain_option_rootless))
|
||||||
{
|
{
|
||||||
LOG_ERROR("[-p, --early-exit] cannot be used with [-f, --rootful], [-l, --rootless], [-c, --setup-fakefs], or [-B, --setup-partial-fakefs].\n");
|
LOG_ERROR("Pongo exit modes cannot be used with [-l, --rootless] or [-f, --rootful].\n");
|
||||||
print_usage(argv[0]);
|
print_usage(argv[0]);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(palerain_flags & palerain_option_pongo_exit) &&
|
goto skip_root_types;
|
||||||
!(palerain_flags & palerain_option_rootful) &&
|
}
|
||||||
!(palerain_flags & palerain_option_rootless))
|
|
||||||
{
|
|
||||||
LOG_ERROR("You must specify either [-l, --rootless] or [-f, --rootful].\n");
|
|
||||||
print_usage(argv[0]);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((palerain_flags & palerain_option_rootful) &&
|
// Normal root checks
|
||||||
(palerain_flags & palerain_option_rootless))
|
if (!(palerain_flags & palerain_option_gui) &&
|
||||||
{
|
!(palerain_flags & palerain_option_tui) &&
|
||||||
LOG_ERROR("You cannot specify both [-l, --rootless] and [-f, --rootful].\n");
|
!(palerain_flags & palerain_option_rootful) &&
|
||||||
print_usage(argv[0]);
|
!(palerain_flags & palerain_option_rootless))
|
||||||
exit(1);
|
{
|
||||||
}
|
LOG_ERROR("You must specify either [-l, --rootless] or [-f, --rootful].\n");
|
||||||
|
print_usage(argv[0]);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
if ((palerain_flags & palerain_option_setup_rootful) &&
|
if ((palerain_flags & palerain_option_rootful) &&
|
||||||
(palerain_flags & palerain_option_setup_partial_root))
|
(palerain_flags & palerain_option_rootless))
|
||||||
{
|
{
|
||||||
LOG_ERROR("You cannot specify both [-c, --setup-fakefs] and [-B, --setup-partial-fakefs].\n");
|
LOG_ERROR("You cannot specify both [-l, --rootless] and [-f, --rootful].\n");
|
||||||
print_usage(argv[0]);
|
print_usage(argv[0]);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (((palerain_flags & palerain_option_setup_rootful) ||
|
skip_root_types:
|
||||||
(palerain_flags & palerain_option_setup_partial_root)) &&
|
|
||||||
!(palerain_flags & palerain_option_rootful))
|
if ((palerain_flags & palerain_option_setup_rootful) &&
|
||||||
|
(palerain_flags & palerain_option_setup_partial_root))
|
||||||
|
{
|
||||||
|
LOG_ERROR("You cannot specify both [-c, --setup-fakefs] and [-B, --setup-partial-fakefs].\n");
|
||||||
|
print_usage(argv[0]);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((palerain_flags & palerain_option_setup_rootful) ||
|
||||||
|
(palerain_flags & palerain_option_setup_partial_root))
|
||||||
|
{
|
||||||
|
if (!(palerain_flags & palerain_option_rootful))
|
||||||
{
|
{
|
||||||
LOG_ERROR("[-c, --setup-fakefs] or [-B, --setup-partial-fakefs] require [-f, --rootful].\n");
|
LOG_ERROR("[-c, --setup-fakefs] or [-B, --setup-partial-fakefs] require [-f, --rootful].\n");
|
||||||
print_usage(argv[0]);
|
print_usage(argv[0]);
|
||||||
|
|||||||
@@ -274,10 +274,14 @@ p1_checkm8_err_t send_full_pongo_jailbreak(p1_usb_handle_t *handle)
|
|||||||
if (result.ret != 0) goto bad;
|
if (result.ret != 0) goto bad;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (palerain_flags & palerain_option_pongo_full)
|
||||||
|
goto good;
|
||||||
|
|
||||||
// TODO: why do we check results
|
// TODO: why do we check results
|
||||||
result = issue_pongo_command(handle, "bootx");
|
result = issue_pongo_command(handle, "bootx");
|
||||||
if (result.ret != 0) goto bad;
|
if (result.ret != 0) goto bad;
|
||||||
|
|
||||||
|
good:
|
||||||
return 0;
|
return 0;
|
||||||
bad:
|
bad:
|
||||||
return 255;
|
return 255;
|
||||||
|
|||||||
Reference in new issue
Block a user