From be4d80380a87ab758aecb4e25695b264d36156da Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Tue, 6 May 2003 06:34:21 +0000 Subject: Update. * sysdeps/generic/enbl-secure.c (__libc_enable_secure_decided): New variable. (__libc_init_secure): Don't do anything if __libc_enable_secure_decided is nonzero. * include/unistd.h: Declare __libc_enable_secure_decided. * elf/dl-support.c (_dl_aux_init): Recognize AT_UID, AT_EUID, AT_GID, and AT_EGID. If all found, set __libc_enable_secure and __libc_enable_secure_decided. --- elf/dl-support.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'elf/dl-support.c') diff --git a/elf/dl-support.c b/elf/dl-support.c index 2ff3d2f905..0d6ce6a12b 100644 --- a/elf/dl-support.c +++ b/elf/dl-support.c @@ -148,6 +148,10 @@ void internal_function _dl_aux_init (ElfW(auxv_t) *av) { + int seen = 0; + uid_t uid = 0; + gid_t gid = 0; + for (; av->a_type != AT_NULL; ++av) switch (av->a_type) { @@ -168,7 +172,28 @@ _dl_aux_init (ElfW(auxv_t) *av) GL(dl_sysinfo) = av->a_un.a_val; break; #endif + case AT_UID: + uid ^= av->a_un.a_val; + seen |= 1; + break; + case AT_EUID: + uid ^= av->a_un.a_val; + seen |= 2; + break; + case AT_GID: + gid ^= av->a_un.a_val; + seen |= 4; + break; + case AT_EGID: + gid ^= av->a_un.a_val; + seen |= 8; + break; } + if (seen == 0xf) + { + __libc_enable_secure = uid != 0 || gid != 0; + __libc_enable_secure_decided = 1; + } } #endif -- cgit v1.2.3