version 1.79, 2012/04/08 06:47:26 |
version 1.80, 2012/05/28 08:55:43 |
|
|
clear_signals(1); |
clear_signals(1); |
log_close(); |
log_close(); |
|
|
if (*wp->cmd != '\0') { |
setenv("SHELL", wp->shell, 1); |
/* Set SHELL but only if it is currently not useful. */ |
ptr = strrchr(wp->shell, '/'); |
shell = getenv("SHELL"); |
|
if (checkshell(shell)) |
|
setenv("SHELL", wp->shell, 1); |
|
|
|
execl(_PATH_BSHELL, "sh", "-c", wp->cmd, (char *) NULL); |
if (*wp->cmd != '\0') { |
|
/* Use the command. */ |
|
if (ptr != NULL && *(ptr + 1) != '\0') |
|
xasprintf(&argv0, "%s", ptr + 1); |
|
else |
|
xasprintf(&argv0, "%s", wp->shell); |
|
execl(wp->shell, argv0, "-c", wp->cmd, (char *) NULL); |
fatal("execl failed"); |
fatal("execl failed"); |
} |
} |
|
|
/* No command; fork a login shell. */ |
/* No command; fork a login shell. */ |
ptr = strrchr(wp->shell, '/'); |
|
if (ptr != NULL && *(ptr + 1) != '\0') |
if (ptr != NULL && *(ptr + 1) != '\0') |
xasprintf(&argv0, "-%s", ptr + 1); |
xasprintf(&argv0, "-%s", ptr + 1); |
else |
else |
xasprintf(&argv0, "-%s", wp->shell); |
xasprintf(&argv0, "-%s", wp->shell); |
setenv("SHELL", wp->shell, 1); |
|
execl(wp->shell, argv0, (char *) NULL); |
execl(wp->shell, argv0, (char *) NULL); |
fatal("execl failed"); |
fatal("execl failed"); |
} |
} |