1 /***********************************************************************
3 * This software is part of the ast package *
4 * Copyright (c) 1985-2010 AT&T Intellectual Property *
5 * and is licensed under the *
6 * Common Public License, Version 1.0 *
7 * by AT&T Intellectual Property *
9 * A copy of the License is available at *
10 * http://www.opensource.org/licenses/cpl1.0.txt *
11 * (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) *
13 * Information and Software Systems Research *
17 * Glenn Fowler <gsf@research.att.com> *
18 * David Korn <dgk@research.att.com> *
19 * Phong Vo <kpv@research.att.com> *
21 ***********************************************************************/
24 * AT&T Bell Laboratories
25 * return 1 if dir [any dir] is the preroot
36 * return 1 if files a and b are the same under preroot
38 * NOTE: the kernel disables preroot for set-uid processes
42 same(const char* a
, const char* b
)
51 if ((ruid
= getuid()) != (euid
= geteuid())) setuid(ruid
);
52 i
= !stat(a
, &ast
) && !stat(b
, &bst
) && ast
.st_dev
== bst
.st_dev
&& ast
.st_ino
== bst
.st_ino
;
53 if (ruid
!= euid
) setuid(euid
);
58 ispreroot(const char* dir
)
60 static int prerooted
= -1;
62 if (dir
) return(same("/", dir
));
63 if (prerooted
< 0) prerooted
= !same("/", PR_REAL
);