33 |
|
typedef struct |
34 |
|
{ |
35 |
|
const char *name; |
36 |
< |
char *freebsd, *linux, *darwin; |
36 |
> |
char *freebsd, *linux, *darwin, *solaris; |
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 } |
43 |
> |
{ "sh", "/bin/sh", "/bin/sh", "/bin/sh", "/usr/bin/sh" }, |
44 |
> |
{ "csh", "/bin/csh", "/bin/csh", "/bin/csh", "/usr/bin/csh" }, |
45 |
> |
{ "tcsh", "/bin/tcsh", "/bin/tcsh", "/bin/tcsh", "/usr/bin/tcsh" }, |
46 |
> |
{ "bash", "/usr/local/bin/bash", "/bin/bash", "/bin/bash", "/usr/bin/bash" }, |
47 |
> |
{ "ksh", "/usr/local/bin/ksh", "/bin/ksh", "/bin/ksh", "/usr/bin/ksh" }, |
48 |
> |
{ "zsh", "/usr/local/bin/zsh", "/bin/zsh", "/bin/zsh", "/usr/bin/zsh" }, |
49 |
> |
{ "3sh", "/ccs/bin/3sh", "/ccs/bin/3sh", "/ccs/bin/3sh", "/ccs/bin/3sh" }, |
50 |
> |
{ "custom", NULL, NULL, NULL, NULL } |
51 |
|
}; |
52 |
|
|
53 |
|
char *shell_regex = NULL; |
170 |
|
get("FreeBSD", &path, &shells_->freebsd, environment); |
171 |
|
get("Linux", &path, &shells_->linux, environment); |
172 |
|
get("Darwin", &path, &shells_->darwin, environment); |
173 |
+ |
get("Solaris", &path, &shells_->solaris, environment); |
174 |
|
regfree(&path); |
175 |
|
|
176 |
|
no: check(setuid(geteuid()), environment); |
183 |
|
check(setenv("FREEBSD", shells_->freebsd, 1), environment); |
184 |
|
check(setenv("LINUX", shells_->linux, 1), environment); |
185 |
|
check(setenv("DARWIN", shells_->darwin, 1), environment); |
186 |
+ |
check(setenv("SOLARIS", shells_->solaris, 1), environment); |
187 |
|
check(execl("/ccs/bin/chsh.sh", argv[0], NULL), environment); |
188 |
|
} |
189 |
|
|