1 diff -ur ash-0.4.0/bltin/echo.c ash-0.4.0+free/bltin/echo.c
2 --- ash-0.4.0/bltin/echo.c Tue Apr 24 02:03:56 2001
3 +++ ash-0.4.0+free/bltin/echo.c Tue Apr 24 01:43:15 2001
5 case 'a': c = '\007'; break;
6 case 'b': c = '\b'; break;
7 case 'c': return 0; /* exit */
8 + case 'e': c = '\033'; break;
9 case 'f': c = '\f'; break;
10 case 'n': c = '\n'; break;
11 case 'r': c = '\r'; break;
12 diff -ur ash-0.4.0/cd.c ash-0.4.0+free/cd.c
13 --- ash-0.4.0/cd.c Tue Apr 24 02:03:56 2001
14 +++ ash-0.4.0+free/cd.c Tue Apr 24 01:43:57 2001
18 setvar("PWD", curdir, VEXPORT|VTEXTFIXED);
19 + setvar("OLDPWD", prevdir, VEXPORT|VTEXTFIXED);
25 curdir = savestr(stackblock());
26 setvar("PWD", curdir, VEXPORT|VTEXTFIXED);
27 + setvar("OLDPWD", prevdir, VEXPORT|VTEXTFIXED);
31 diff -ur ash-0.4.0/main.c ash-0.4.0+free/main.c
32 --- ash-0.4.0/main.c Tue Apr 24 02:03:57 2001
33 +++ ash-0.4.0+free/main.c Tue Apr 24 02:03:26 2001
35 struct stackmark smark;
40 + priviliged = getuid() != geteuid() || getgid() != getegid();
43 monitor(4, etext, profile_buf, sizeof profile_buf, 50);
45 read_profile("/etc/profile");
48 - read_profile(".profile");
49 + if (priviliged == 0)
50 + read_profile(".profile");
52 + read_profile("/etc/suid_profile");
56 - if (getuid() == geteuid() && getgid() == getegid()) {
57 + if (iflag && !priviliged) {
58 if ((shinit = lookupvar("ENV")) != NULL && *shinit != '\0') {