%%
+#include <limits.h>
+
# define RED "\033[91m"
# define GREEN "\033[92m"
# define YELLOW "\033[93m"
# define RESET "\033[0m"
void root(char * filename) {
- char * path, * terminator;
- if (!(path = realpath(filename, NULL))) { return; }
+ char path[PATH_MAX], * terminator;
+ if (!realpath(filename, path)) { return; }
if ((terminator = strrchr(path, '/'))) {
*terminator = '\0';
- chroot(path);
+ chdir(path);
}
- free(path);
}
void args(int n, int rest) {
g_filename = av[0];
root(g_filename);
+
{ /* ensures the filename doesn't have a relative path that would misdirect the command within the new root */
char * tmp = strrchr(g_filename, '/');
if (tmp) { g_filename = tmp+1; }
g_ac = --ac, g_av = ++av;
/* setup pipe and output */
+
if (run) {
pipeopen("/bin/sh -e /dev/stdin", "w");
}