tags 360604 patch
thanks
Hello,
As a workarround, you can set the SU_NO_SHELL_ARGS environment variable
before calling dchroot, or execute
dchroot -- -c "command"
instead of
dchroot -- command
I'm also attaching a patch for dchroot.
Kind Regards,
--
Nekral
diff -rauN ../orig/dchroot-0.12/dchroot.c ./dchroot-0.12/dchroot.c
--- ../orig/dchroot-0.12/dchroot.c 2006-01-15 02:08:25.000000000 +0100
+++ ./dchroot-0.12/dchroot.c 2006-04-03 22:19:49.000000000 +0200
@@ -253,39 +253,44 @@
* new chroot.
*/
- int argc = 0;
- int i = 0, j = 0;
+ int command_len = 0;
+ char *command = NULL;
+ int i = 0;
- while (argv[i++] != NULL) {
- argc++;
+ while (argv[i] != NULL) {
+ command_len += strlen(argv[i++])+1;
}
- cmd = malloc(sizeof(char *) * (argc + 5));
+ cmd = malloc(sizeof(char *) * 6);
+ command = malloc(sizeof(char) * command_len);
- if (!cmd) {
+ if (!cmd || !command) {
dchroot_perror("malloc");
exit(EXIT_FAILURE);
}
-
+
+ command[0] = '\0';
+ for (i=0; argv[i] != NULL; i++) {
+ if (command[0] != '\0') {
+ strcat(command, " ");
+ }
+ strcat(command, argv[i]);
+ }
+
i = 0;
cmd[i++] = "/bin/su";
if (opts.dir[0] == '\0') {
- /* /bin/su - username argv[0] argv[1] ... */
+ /* /bin/su - username -c "argv[0] argv[1] ..."
*/
cmd[i++] = "-";
} else {
- /* /bin/su -p username argv[0] argv[1] ... */
+ /* /bin/su -p username -c "argv[0] argv[1] ..."
*/
cmd[i++] = "-p";
}
cmd[i++] = username;
- cmd[i++] = "--";
-
- while (argv[j] != NULL) {
- cmd[i++] = argv[j];
- j++;
- }
-
+ cmd[i++] = "-c";
+ cmd[i++] = command;
cmd[i] = NULL;
if (!opts.quiet) {