[systemd-devel] [PATCH v9000 2/3] timedated: gather timezone from /etc/localtime sym target

Frederic Crozat fcrozat at suse.com
Tue Aug 14 02:17:57 PDT 2012


Le mardi 14 août 2012 à 10:32 +0200, Frederic Crozat a écrit :
> Le dimanche 12 août 2012 à 22:36 -0700, Shawn Landden a écrit :
> > /etc/localtime -> /usr/share/zoneinfo/...
> > 
> > or
> > 
> > /etc/localtime -> ../usr/share/zoneinfo/...
> > 
> > (note, ../usr is not the same if /etc is a symlink, as this isn't
> > using canonicalize_file_name())
> > 
> > keep other method for now, consider dropping later.
> > 
> > Supporting relative links here are problematic as timezones in
> > /usr/share/zoneinfo are often themselves symlinks (and symlinks to
> > symlinks), so this implamentation only supports absolute symlinks
> > "/usr/share/zoneinfo/" and relative symlinks starting with
> > "../usr/share/zoneinfo/"
> > 
> > From TODO (kay sievers):
> > * kill /etc/timezone handling entirely? What does it provide?
> >   - /etc/localtime carries the same information already:
> >       $ ls -l /etc/localtime; cat /etc/timezone
> >       lrwxrwxrwx 1 root root 33 Jul 27 09:55 /etc/localtime -> /usr/share/zoneinfo/Europe/Berlin
> >       Europe/Berlin
> >   - systemd enforces /usr to be available at bootup, so we can
> >     enforce the use of the symlink
> > ---
> >  src/timedate/timedated.c |   50 ++++++++++++++++++++++++++++++++++++----------
> >  1 file changed, 40 insertions(+), 10 deletions(-)
> > 
> > diff --git a/src/timedate/timedated.c b/src/timedate/timedated.c
> > index 09fd808..c3067c8 100644
> > --- a/src/timedate/timedated.c
> > +++ b/src/timedate/timedated.c
> > @@ -74,6 +74,9 @@
> >          BUS_GENERIC_INTERFACES_LIST             \
> >          "org.freedesktop.timedate1\0"
> >  
> > +/* Must start and end with '/' */
> > +#define ZONEINFO_PATH "/usr/share/zoneinfo/"
> > +
> >  const char timedate_interface[] _introspect_("timedate1") = INTERFACE;
> >  
> >  typedef struct TZ {
> > @@ -152,16 +155,14 @@ static void verify_timezone(void) {
> >                  return;
> >  
> >          p = strappend("/usr/share/zoneinfo/", tz.zone);
>                         ^^^^^^^^^^^^^^^^^^^^^
> it would be better to replace this with the macro you added
> (ZONEINFO_PATH)

And I've found another occurrence of /usr/share/zoneinfo which would
need to be fixed.

-- 
Frederic Crozat <fcrozat at suse.com>
SUSE



More information about the systemd-devel mailing list