X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=src%2Ftime%2F__tz.c;h=3e2fcdcbb6a48d000497e2bd36234a2e9c88f0cf;hb=937822abb6ac48880939be3c60e6b57bddf62cf6;hp=09a6317e6b2fbf236925e59f770ac3ff4c4b5989;hpb=1f0c7cb1cc2170bf230623dc0b57d9a9f001af08;p=musl diff --git a/src/time/__tz.c b/src/time/__tz.c index 09a6317e..3e2fcdcb 100644 --- a/src/time/__tz.c +++ b/src/time/__tz.c @@ -4,6 +4,7 @@ #include #include #include +#include #include "libc.h" #include "lock.h" #include "fork_impl.h" @@ -154,10 +155,21 @@ static void do_tzset() } if (old_tz) memcpy(old_tz, s, i+1); + int posix_form = 0; + if (*s != ':') { + p = s; + char dummy_name[TZNAME_MAX+1]; + getname(dummy_name, &p); + if (p!=s && (*p == '+' || *p == '-' || isdigit(*p) + || !strcmp(dummy_name, "UTC") + || !strcmp(dummy_name, "GMT"))) + posix_form = 1; + } + /* Non-suid can use an absolute tzfile pathname or a relative * pathame beginning with "."; in secure mode, only the * standard path will be searched. */ - if (*s == ':' || ((p=strchr(s, '/')) && !memchr(s, ',', p-s))) { + if (!posix_form) { if (*s == ':') s++; if (*s == '/' || *s == '.') { if (!libc.secure || !strcmp(s, "/etc/localtime"))