Ignoring symlinks when recovering time zone identifiers in initdb

Поиск
Список
Период
Сортировка
От Florian Weimer
Тема Ignoring symlinks when recovering time zone identifiers in initdb
Дата
Msg-id 87v7llzd73.fsf@mid.deneb.enyo.de
обсуждение исходный текст
Ответы Re: Ignoring symlinks when recovering time zone identifiers in initdb
Список pgsql-hackers
There's a story making the rounds that the removal of the
/usr/share/zoneinfo/US/Pacific etc. in Debian broke installations.
These identifiers should not be used, but they may get picked by
initdb if they are shorter than the alternatives.  The length-based
tie breaking was introduced in commit e3846a00c2f ("Prefer timezone
name "UTC" over alternative spellings.").

Would it make sense to ignore symbolic links when searching for the
time zone identifier under /usr/share/zoneinfo in scan_available_timezones?

Something like this (untested):

diff --git a/src/bin/initdb/findtimezone.c b/src/bin/initdb/findtimezone.c
index 2b2ae39adf3..e492e904993 100644
--- a/src/bin/initdb/findtimezone.c
+++ b/src/bin/initdb/findtimezone.c
@@ -677,7 +677,11 @@ scan_available_timezones(char *tzdir, char *tzdirsub, struct tztry *tt,
         snprintf(tzdir + tzdir_orig_len, MAXPGPATH - tzdir_orig_len,
                  "/%s", name);
 
-        if (stat(tzdir, &statbuf) != 0)
+        /*
+         * Ignore symbolic links, so that shorter aliases in directories such
+         * as "US" are not preferred over the "America" directory.
+         */
+        if (lstat(tzdir, &statbuf) != 0)
         {
 #ifdef DEBUG_IDENTIFY_TIMEZONE
             fprintf(stderr, "could not stat \"%s\": %m\n",
@@ -693,7 +697,7 @@ scan_available_timezones(char *tzdir, char *tzdirsub, struct tztry *tt,
             scan_available_timezones(tzdir, tzdirsub, tt,
                                      bestscore, bestzonename);
         }
-        else
+        else if (S_ISREG(statbuf.st_mode))
         {
             /* Load and test this file */
             int            score = score_timezone(tzdirsub, tt);



В списке pgsql-hackers по дате отправления: