30 |
|
return 1; |
31 |
|
} |
32 |
|
|
33 |
– |
typedef struct |
34 |
– |
{ |
35 |
– |
const char *name; |
36 |
– |
char *freebsd, *linux, *darwin; |
37 |
– |
} |
38 |
– |
Shells; |
39 |
– |
|
40 |
– |
typedef enum { sh, csh, tcsh, bash, ksh, zsh, _3sh, custom } Shell; |
41 |
– |
|
42 |
– |
Shells shells[] = { |
43 |
– |
{ "sh", "/bin/sh", "/bin/sh", "/bin/sh" }, |
44 |
– |
{ "csh", "/bin/csh", "/bin/csh", "/bin/csh" }, |
45 |
– |
{ "tcsh", "/bin/tcsh", "/bin/tcsh", "/bin/tcsh" }, |
46 |
– |
{ "bash", "/usr/local/bin/bash", "/bin/bash", "/bin/bash" }, |
47 |
– |
{ "ksh", "/usr/local/bin/ksh", "/bin/ksh", "/bin/ksh" }, |
48 |
– |
{ "zsh", "/usr/local/bin/zsh", "/bin/zsh", "/bin/zsh" }, |
49 |
– |
{ "3sh", "/ccs/bin/3sh", "/ccs/bin/3sh", "/ccs/bin/3sh" }, |
50 |
– |
{ "custom", NULL, NULL, NULL } |
51 |
– |
}; |
52 |
– |
|
33 |
|
char *shell_regex = NULL; |
34 |
|
|
35 |
|
{ |
150 |
|
get("FreeBSD", &path, &shells_->freebsd, environment); |
151 |
|
get("Linux", &path, &shells_->linux, environment); |
152 |
|
get("Darwin", &path, &shells_->darwin, environment); |
153 |
+ |
get("Solaris", &path, &shells_->solaris, environment); |
154 |
|
regfree(&path); |
155 |
|
|
156 |
|
no: check(setuid(geteuid()), environment); |
160 |
|
if (!(bash_ = check(fork(), environment))) |
161 |
|
{ |
162 |
|
check(setenv("USER", user, 1), environment); |
163 |
< |
check(setenv("FREEBSD", shells_->freebsd, 1), environment); |
183 |
< |
check(setenv("LINUX", shells_->linux, 1), environment); |
184 |
< |
check(setenv("DARWIN", shells_->darwin, 1), environment); |
163 |
> |
setshells(shells_, environment); |
164 |
|
check(execl("/ccs/bin/chsh.sh", argv[0], NULL), environment); |
165 |
|
} |
166 |
|
|