diff options
author | Jakub Jelinek <jakub@redhat.com> | 2006-08-31 06:53:32 +0000 |
---|---|---|
committer | Jakub Jelinek <jakub@redhat.com> | 2006-08-31 06:53:32 +0000 |
commit | 936bb2647a835e63e99fa2d1590ab1e14aab4712 (patch) | |
tree | e0fcf856a8a2051f8878dd4c8eca215bc549de13 /elf | |
parent | 2455d11258712bbab8a52c7951301924a483a295 (diff) |
Updated to fedora-glibc-20060831T0640cvs/fedora-glibc-2_4_90-27
Diffstat (limited to 'elf')
-rw-r--r-- | elf/dl-load.c | 20 | ||||
-rw-r--r-- | elf/dl-open.c | 7 |
2 files changed, 19 insertions, 8 deletions
diff --git a/elf/dl-load.c b/elf/dl-load.c index 902ffc4109..36dc123c01 100644 --- a/elf/dl-load.c +++ b/elf/dl-load.c @@ -749,7 +749,25 @@ _dl_init_paths (const char *llp) { size_t nllp; const char *cp = llp; - char *llp_tmp = strdupa (llp); + char *llp_tmp; + +#ifdef SHARED + /* Expand DSTs. */ + size_t cnt = DL_DST_COUNT (llp, 1); + if (__builtin_expect (cnt == 0, 1)) + llp_tmp = strdupa (llp); + else + { + /* Determine the length of the substituted string. */ + size_t total = DL_DST_REQUIRED (l, llp, strlen (llp), cnt); + + /* Allocate the necessary memory. */ + llp_tmp = (char *) alloca (total + 1); + llp_tmp = _dl_dst_substitute (l, llp, llp_tmp, 1); + } +#else + llp_tmp = strdupa (llp); +#endif /* Decompose the LD_LIBRARY_PATH contents. First determine how many elements it has. */ diff --git a/elf/dl-open.c b/elf/dl-open.c index cdbb6601d2..8d057f82eb 100644 --- a/elf/dl-open.c +++ b/elf/dl-open.c @@ -221,13 +221,6 @@ dl_open_worker (void *a) size_t required; char *new_file; - /* DSTs must not appear in SUID/SGID programs. */ - if (INTUSE(__libc_enable_secure)) - /* This is an error. */ - _dl_signal_error (0, "dlopen", NULL, - N_("DST not allowed in SUID/SGID programs")); - - /* Determine how much space we need. We have to allocate the memory locally. */ required = DL_DST_REQUIRED (call_map, file, len, _dl_dst_count (dst, 0)); |