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) {