From 27aa0631c73ee805519f3ac078eaef460f1b4bc3 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Tue, 4 May 1999 01:48:08 +0000 Subject: Update. 1999-05-04 Ulrich Drepper * elf/dl-load.c (expand_dynamic_string_token): Recognize { } around DST. Correctly ignore ORIGIN IN SUID binaries. --- ChangeLog | 5 +++++ elf/dl-load.c | 33 ++++++++++++++++++++++----------- 2 files changed, 27 insertions(+), 11 deletions(-) diff --git a/ChangeLog b/ChangeLog index 1c6bf3e..a126fe9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +1999-05-04 Ulrich Drepper + + * elf/dl-load.c (expand_dynamic_string_token): Recognize { } + around DST. Correctly ignore ORIGIN IN SUID binaries. + 1999-05-03 Ulrich Drepper * sysdeps/generic/strtok_r.c: Use rawmemchr instead of strchr. diff --git a/elf/dl-load.c b/elf/dl-load.c index 05569ed..bdae4ba 100644 --- a/elf/dl-load.c +++ b/elf/dl-load.c @@ -171,10 +171,15 @@ expand_dynamic_string_token (struct link_map *l, const char *s) size_t len = 1; /* $ORIGIN is not expanded for SUID/GUID programs. */ - if (((!__libc_enable_secure - && strncmp (&sf[1], "ORIGIN", 6) == 0 && (len = 7) != 0) - || (strncmp (&sf[1], "PLATFORM", 8) == 0 && (len = 9) != 0)) - && (s[len] == '\0' || s[len] == '/' || s[len] == ':')) + if ((((!__libc_enable_secure + && strncmp (&sf[1], "ORIGIN", 6) == 0 && (len = 7) != 0) + || (strncmp (&sf[1], "PLATFORM", 8) == 0 && (len = 9) != 0)) + && (s[len] == '\0' || s[len] == '/' || s[len] == ':')) + || (s[1] == '{' + && ((!__libc_enable_secure + && strncmp (&sf[2], "ORIGIN}", 7) == 0 && (len = 9) != 0) + || (strncmp (&sf[2], "PLATFORM}", 9) == 0 + && (len = 11) != 0)))) ++cnt; st = sf + len; @@ -220,13 +225,19 @@ expand_dynamic_string_token (struct link_map *l, const char *s) const char *repl; size_t len; - if (((!__libc_enable_secure - && strncmp (&s[1], "ORIGIN", 6) == 0 && (len = 7) != 0) - || (strncmp (&s[1], "PLATFORM", 8) == 0 && (len = 9) != 0)) - && (s[len] == '\0' || s[len] == '/' || s[len] == ':')) + if ((((strncmp (&s[1], "ORIGIN", 6) == 0 && (len = 7) != 0) + || (strncmp (&s[1], "PLATFORM", 8) == 0 && (len = 9) != 0)) + && (s[len] == '\0' || s[len] == '/' || s[len] == ':')) + || (s[1] == '{' + && ((strncmp (&s[2], "ORIGIN}", 7) == 0 && (len = 9) != 0) + || (strncmp (&s[2], "PLATFORM}", 9) == 0 + && (len = 11) != 0)))) { - if ((repl = len == 7 ? l->l_origin : _dl_platform) != NULL - && repl != (const char *) -1) + repl = ((len == 7 || s[2] == 'O') + ? (__libc_enable_secure ? NULL : l->l_origin) + : _dl_platform); + + if (repl != NULL && repl != (const char *) -1) { wp = __stpcpy (wp, repl); s += len; @@ -242,7 +253,7 @@ expand_dynamic_string_token (struct link_map *l, const char *s) } } else - /* No SDK we recognize. */ + /* No DST we recognize. */ *wp++ = *s++; } else if (*s == ':') -- cgit v1.1