Ignoring symlinks when recovering time zone identifiers in initdb - Mailing list pgsql-hackers

From Florian Weimer
Subject Ignoring symlinks when recovering time zone identifiers in initdb
Date
Msg-id 87v7llzd73.fsf@mid.deneb.enyo.de
Whole thread Raw
Responses Re: Ignoring symlinks when recovering time zone identifiers in initdb
List 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 by date:

Previous
From: Dilip Kumar
Date:
Subject: Re: Proposal: Conflict log history table for Logical Replication
Next
From: Dilip Kumar
Date:
Subject: Re: Incorrect logic in XLogNeedsFlush()