Update.
authorUlrich Drepper <drepper@redhat.com>
Tue, 4 May 1999 01:48:08 +0000 (01:48 +0000)
committerUlrich Drepper <drepper@redhat.com>
Tue, 4 May 1999 01:48:08 +0000 (01:48 +0000)
1999-05-04  Ulrich Drepper  <drepper@cygnus.com>

* elf/dl-load.c (expand_dynamic_string_token): Recognize { }
around DST.  Correctly ignore ORIGIN IN SUID binaries.

ChangeLog
elf/dl-load.c

index 1c6bf3eb6469670f860962ee79a4be34ccff637d..a126fe9a28b2204dadada9cd827c970f9565fa38 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+1999-05-04  Ulrich Drepper  <drepper@cygnus.com>
+
+       * elf/dl-load.c (expand_dynamic_string_token): Recognize { }
+       around DST.  Correctly ignore ORIGIN IN SUID binaries.
+
 1999-05-03  Ulrich Drepper  <drepper@cygnus.com>
 
        * sysdeps/generic/strtok_r.c: Use rawmemchr instead of strchr.
index 05569edc9c6567dc42352e5526cb4ce100af5e1f..bdae4ba1da24d11c293c924351f1b9b23e21d6a6 100644 (file)
@@ -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 == ':')