mirror of
https://github.com/palera1n/palera1n.git
synced 2026-10-25 02:29:49 +01:00
Fix custom checkra1n
This commit is contained in:
1 parent
08fbb60538
commit
0e9cd5e1f6
1 file changed
+40
-49
+40
-49
@@ -40,10 +40,6 @@ int exec_checkra1n(void) {
|
|||||||
LOG(LOG_INFO, "About to execute checkra1n");
|
LOG(LOG_INFO, "About to execute checkra1n");
|
||||||
int fd_checkra1n, fd_pongo, ret;
|
int fd_checkra1n, fd_pongo, ret;
|
||||||
char* checkra1n_path = NULL;
|
char* checkra1n_path = NULL;
|
||||||
if (ext_checkra1n != NULL) {
|
|
||||||
checkra1n_path = ext_checkra1n;
|
|
||||||
goto checkra1n_exec;
|
|
||||||
}
|
|
||||||
#ifndef NO_CUSTOM_PONGO
|
#ifndef NO_CUSTOM_PONGO
|
||||||
if (pongo_path == NULL) {
|
if (pongo_path == NULL) {
|
||||||
pongo_path = malloc(strlen(tmpdir) + 20);
|
pongo_path = malloc(strlen(tmpdir) + 20);
|
||||||
@@ -69,36 +65,40 @@ int exec_checkra1n(void) {
|
|||||||
}
|
}
|
||||||
} else external_pongo = true;
|
} else external_pongo = true;
|
||||||
#endif
|
#endif
|
||||||
checkra1n_path = malloc(strlen(tmpdir) + 20);
|
if (ext_checkra1n != NULL) {
|
||||||
if (checkra1n_path == NULL) {
|
checkra1n_path = ext_checkra1n;
|
||||||
LOG(LOG_FATAL, "memory allocation failed\n");
|
} else {
|
||||||
return -1;
|
checkra1n_path = malloc(strlen(tmpdir) + 20);
|
||||||
}
|
if (checkra1n_path == NULL) {
|
||||||
snprintf(checkra1n_path, strlen(tmpdir) + 20, "%s/checkra1n.XXXXXX", tmpdir);
|
LOG(LOG_FATAL, "memory allocation failed\n");
|
||||||
fd_checkra1n = mkstemp(checkra1n_path);
|
return -1;
|
||||||
if (fd_checkra1n == -1) {
|
}
|
||||||
LOG(LOG_FATAL, "Cannot open temporary file %s: %d (%s)", checkra1n_path, errno, strerror(errno));
|
snprintf(checkra1n_path, strlen(tmpdir) + 20, "%s/checkra1n.XXXXXX", tmpdir);
|
||||||
free(checkra1n_path);
|
fd_checkra1n = mkstemp(checkra1n_path);
|
||||||
checkra1n_path = NULL;
|
if (fd_checkra1n == -1) {
|
||||||
return -1;
|
LOG(LOG_FATAL, "Cannot open temporary file %s: %d (%s)", checkra1n_path, errno, strerror(errno));
|
||||||
}
|
free(checkra1n_path);
|
||||||
ssize_t didWrite_checkra1n = write(fd_checkra1n, checkra1n, checkra1n_len);
|
checkra1n_path = NULL;
|
||||||
if (didWrite_checkra1n != (ssize_t)checkra1n_len) {
|
return -1;
|
||||||
LOG(LOG_FATAL, "Size written to %s does not match expected: %zd != %" PRIu32 ": %d (%s)", checkra1n_path, didWrite_checkra1n, checkra1n_len, errno, strerror(errno));
|
}
|
||||||
|
ssize_t didWrite_checkra1n = write(fd_checkra1n, checkra1n, checkra1n_len);
|
||||||
|
if (didWrite_checkra1n != (ssize_t)checkra1n_len) {
|
||||||
|
LOG(LOG_FATAL, "Size written to %s does not match expected: %zd != %" PRIu32 ": %d (%s)", checkra1n_path, didWrite_checkra1n, checkra1n_len, errno, strerror(errno));
|
||||||
|
close(fd_checkra1n);
|
||||||
|
unlink(checkra1n_path);
|
||||||
|
free(checkra1n_path);
|
||||||
|
checkra1n_path = NULL;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
close(fd_checkra1n);
|
close(fd_checkra1n);
|
||||||
unlink(checkra1n_path);
|
ret = chmod(checkra1n_path, 0700);
|
||||||
free(checkra1n_path);
|
if (ret) {
|
||||||
checkra1n_path = NULL;
|
LOG(LOG_FATAL, "Cannot chmod %s: %d (%s)", checkra1n_path, errno, strerror(errno));
|
||||||
return -1;
|
unlink(checkra1n_path);
|
||||||
}
|
free(checkra1n_path);
|
||||||
close(fd_checkra1n);
|
checkra1n_path = NULL;
|
||||||
ret = chmod(checkra1n_path, 0700);
|
return -1;
|
||||||
if (ret) {
|
}
|
||||||
LOG(LOG_FATAL, "Cannot chmod %s: %d (%s)", checkra1n_path, errno, strerror(errno));
|
|
||||||
unlink(checkra1n_path);
|
|
||||||
free(checkra1n_path);
|
|
||||||
checkra1n_path = NULL;
|
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
#if defined(__APPLE__) && defined(__arm64__) && (TARGET_OS_IPHONE || defined(FORCE_HELPER))
|
#if defined(__APPLE__) && defined(__arm64__) && (TARGET_OS_IPHONE || defined(FORCE_HELPER))
|
||||||
char* libcheckra1nhelper_dylib_path = NULL;
|
char* libcheckra1nhelper_dylib_path = NULL;
|
||||||
@@ -146,7 +146,6 @@ setenv_ra1n:
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
checkra1n_exec: {};
|
|
||||||
char args[0x10] = "-E";
|
char args[0x10] = "-E";
|
||||||
if ((palerain_flags & palerain_option_demote)) strncat(args, "d", 0xf);
|
if ((palerain_flags & palerain_option_demote)) strncat(args, "d", 0xf);
|
||||||
if (!(palerain_flags & palerain_option_checkrain_is_clone)) {
|
if (!(palerain_flags & palerain_option_checkrain_is_clone)) {
|
||||||
@@ -168,21 +167,13 @@ checkra1n_exec: {};
|
|||||||
posix_spawn_file_actions_addopen(&action, 2, "/dev/null", O_WRONLY, 0);
|
posix_spawn_file_actions_addopen(&action, 2, "/dev/null", O_WRONLY, 0);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if (pongo_path != NULL) {
|
ret = posix_spawn(&pid, checkra1n_path, &action, NULL, (char* []){
|
||||||
ret = posix_spawn(&pid, checkra1n_path, &action, NULL, (char* []){
|
checkra1n_path,
|
||||||
checkra1n_path,
|
args,
|
||||||
args,
|
"-k",
|
||||||
"-k",
|
pongo_path,
|
||||||
pongo_path,
|
NULL
|
||||||
NULL
|
}, environ);
|
||||||
}, environ);
|
|
||||||
} else {
|
|
||||||
ret = posix_spawn(&pid, checkra1n_path, &action, NULL, (char* []){
|
|
||||||
checkra1n_path,
|
|
||||||
args,
|
|
||||||
NULL
|
|
||||||
}, environ);
|
|
||||||
}
|
|
||||||
posix_spawn_file_actions_destroy(&action);
|
posix_spawn_file_actions_destroy(&action);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
LOG(LOG_FATAL, "Cannot posix spawn %s: %d (%s)", checkra1n_path, errno, strerror(errno));
|
LOG(LOG_FATAL, "Cannot posix spawn %s: %d (%s)", checkra1n_path, errno, strerror(errno));
|
||||||
|
|||||||
Reference in new issue
Block a user