XQuartz: Run applications via '/bin/sh -c ...' to support users who expect shell parsing

(cherry picked from commit 67455e716e)
This commit is contained in:
Jeremy Huddleston 2008-12-21 14:54:11 -08:00
parent 029d255a65
commit 8f04a52373
2 changed files with 11 additions and 51 deletions

View File

@ -314,36 +314,16 @@ BOOL xquartz_resetenv_display = NO;
- (void) launch_client:(NSString *)filename
{
const char *command = [filename UTF8String];
int child1, child2 = 0;
int status;
char newcommand[1024];
char *newargv[1024];
const char *newargv[4];
char buf[128];
size_t newargc;
char *s;
if(strlen(command) > 1023) {
fprintf(stderr, "Error: command is too long: %s\n", command);
return;
}
strlcpy(newcommand, command, 1024);
for(newargc=0, s=newcommand; *s; newargc++) {
for(; *s && *s == ' '; s++);
if(!*s)
break;
newargv[newargc] = s;
for(; *s && *s != ' '; s++);
if(*s) {
*s='\0';
s++;
}
}
newargv[newargc] = NULL;
newargv[0] = [X11App prefs_get_string:@PREFS_LOGIN_SHELL default:"/bin/sh"];
newargv[1] = "-c";
newargv[2] = [filename UTF8String];
newargv[3] = NULL;
s = getenv("DISPLAY");
if (xquartz_resetenv_display || s == NULL || s[0] == 0) {

View File

@ -531,33 +531,13 @@ int main(int argc, char **argv, char **envp) {
}
static int execute(const char *command) {
char newcommand[1024];
char *newargv[1024];
size_t newargc;
char *s;
char **p;
const char *newargv[4];
const char **p;
if(strlen(command) > 1023) {
fprintf(stderr, "Error: command is too long: %s\n", command);
return 1;
}
strlcpy(newcommand, command, 1024);
for(newargc=0, s=newcommand; *s; newargc++) {
for(; *s && *s == ' '; s++);
if(!*s)
break;
newargv[newargc] = s;
for(; *s && *s != ' '; s++);
if(*s) {
*s='\0';
s++;
}
}
newargv[newargc] = NULL;
newargv[0] = command_from_prefs("login_shell", DEFAULT_SHELL);
newargv[1] = "-c";
newargv[2] = command;
newargv[3] = NULL;
fprintf(stderr, "X11.app: Launching %s:\n", command);
for(p=newargv; *p; p++) {