@chilango79:
Der String enthält nach den drei Buchstaben mit der Bezeichnung der Zeitzone den Offset zu GMT - negative Werte bei "rechts" vom Meridian und positive bei "links" davon. Der Offset nach der DST-Zone kann entfallen, wenn er "-1" im Vergleich zum normalen Offset ist, es schadet aber auch nicht, ihn anzugeben ... was bei Dir dann eigentlich "CST6DST5,[...]" heißen müßte, wenn ich mich nicht vertan habe. Das Format der TZ-Zeichenkette steht in irgendwelchen POSIX-Spezifikationen, leichter zu finden ist aber die Beschreibung in der GNU-C-Library:
https://www.gnu.org/software/libc/manual/html_node/TZ-Variable.html
@koy:
Eher nicht - zumindest nicht allgemeingültig und in aktuellen Versionen. Wie man beim Vergleich mit älteren Versionen feststellen kann, werden seit einiger Zeit (;-)) nur noch Variablen in der "featovl.cfg" berücksichtigt, die mit "CONFIG_" beginnen und einen eher simplen Aufbau bei den Werten haben ... auch das Überschreiben von Werten mit Leerzeichen oder anderen Sonderzeichen im Inhalt ist nicht länger möglich und damit ist auch die Gefahr der "command injection" oder für "directory traversals" über solche Variablen gebannt, wenn die mal wieder irgendwo ohne weitere Maßnahmen in `...`-Konstruktionen (die "eval"-Statements sind fast alle raus oder zumindest nicht mehr kritisch) oder beim Bilden von Dateinamen verwendet werden.
- - - Aktualisiert - - -
Wenn man noch einmal genauer in die "rc.conf" schaut (an der Stelle unterscheiden sich die 06.06 für die 7270v2/v3 und die 06.80 für die 7490 auch nicht wesentlich voneinander):
74.06.06
Code:
##########################################################################################
## Time Zone
##########################################################################################
MANUAL_TZ_ENABLED="`echo timezone_manual.enabled | ar7cfgctl -s 2>/dev/null`"
if [ "$MANUAL_TZ_ENABLED" = "yes" ]; then
MANUAL_TZ="`echo timezone_manual.TZ_string | ar7cfgctl -s 2>/dev/null | sed s/\\"//g`"
rm -f /var/TZ
echo $MANUAL_TZ >/var/TZ
else
rm -f /var/TZ
ln -s /etc/default.$Country/TZ /var/TZ
fi
[COLOR="#FF0000"]export TZ=`cat /etc/TZ`[/COLOR]
113.06.80
Code:
##########################################################################################
## Time Zone
##########################################################################################
MANUAL_TZ_ENABLED="`echo timezone_manual.enabled | ar7cfgctl -s 2>/dev/null`"
if [ "$MANUAL_TZ_ENABLED" = "yes" ]; then
MANUAL_TZ="`echo timezone_manual.TZ_string | ar7cfgctl -s 2>/dev/null | sed s/\\"//g`"
rm -f /var/TZ
echo $MANUAL_TZ >/var/TZ
else
rm -f /var/TZ
TZ_EXT="`echo timezone_manual.country_timezone | ar7cfgctl -s 2>/dev/null | sed s/\\"//g`"
if [ -n "${TZ_EXT}" ] && [ -f "/etc/default.$Country/TZ_ext/${TZ_EXT}/TZ_String" ] ; then
ln -s /etc/default.$Country/TZ_ext/${TZ_EXT}/TZ_String /var/TZ
else
if [ -f "/etc/default.$Country/TZ_ext/.default/TZ_String" ] ; then
ln -s /etc/default.$Country/TZ_ext/.default/TZ_String /var/TZ
else
ln -s /etc/default.$Country/TZ /var/TZ
fi
fi
fi
[COLOR="#FF0000"]export TZ=`cat /etc/TZ`[/COLOR]
dann findet man schon in dieser Datei den ersten Grenzfall - hier ist eine "race condition" denkbar und am Ende hat man das bei der 7490 sogar "noch schlimmer" gemacht, denn hier ist die "kritische Zeitspanne" größer und bietet mit mindestens einem zusätzlichen Dateizugriff (von dem zusätzlichen Aufruf von "ar7cfgctl" in diesem kritischen Abschnitt fange ich gar nicht erst an, ich meine hier den Test mit "-f" und das sind "im Normalfall" sogar zwei solche Tests) auch noch zusätzliche "Wahrscheinlichkeiten" für einen zwischenzeitlichen Task-Wechsel des Systems.
Der Teil mit dem Löschen der "/var/TZ" und dem Anlegen als Symlink oder als Textdatei bei "manuellem Eintrag" wird wirklich bei jedem Aufruf der "rc.conf" ausgeführt und dabei wird eben auch immer die "globale" Datei "/var/TZ" angepackt.
Da die auch gleich erst einmal gelöscht wird, bevor sie neu angelegt wird, kann eine Unterbrechung des aktuellen Prozesses vor dem Schreiben der Datei oder vor dem erneuten Verlinken durch einen Task-Wechsel (und das FRITZ!OS arbeitet ja mit mehreren Tasks) dazu führen, daß ein parallel arbeitender Prozess, der nun seinerseits gerade an der Stelle mit dem rot markierten Kommando seine Arbeit wieder aufnimmt, schlicht ins Leere greift und damit wirklich nichts in seiner "TZ"-Variablen steht.
Ich kann mich gerade nicht daran erinnern, daß irgendwelche Aufrufe der "rc.conf" über Semaphoren oder andere Mechanismen serialisiert werden - damit ist auch die theoretische Chance gegeben, daß zwei Instanzen parallel mit der "rc.conf" arbeiten und damit auch die Chance, daß diese irgendwann mal zu einem ungünstigen Zeitpunkt unterbrochen werden - zumal gerade bei Dateizugriffen schon mal ein Taskwechsel dadurch erfolgen kann, daß ein Prozess zuvor eine Sperre auf so einer Datei hatte, diese nun freigegeben wurde und damit ein auf diese Freigabe wartender Prozess jetzt wieder bei der Zuteilung an der Reihe ist.
Hier müßte AVM also für eine "korrekte" Implementierung noch zusätzliche Vorkehrungen treffen, daß zwischen dem Löschen einer "alten" "/var/TZ" und dem Einrichten einer neuen (ob nun als Datei oder als Symlink, ist dabei egal), kein anderer Prozess den Inhalt von "/etc/TZ" auslesen will.
Das ist aber fast nicht zu realisieren (die verwendete C-Library läßt sich bereits auf die Verwendung von /etc/TZ konfigurieren mit der Build-Option UCLIBC_HAS_TZ_FILE), müßte man an die Stelle des Löschens und anschließenden Neuanlegens wahrscheinlich besser einen Vergleich setzen (nur wenn es wirklich eine Differenz zu vorher gibt, muß man die Datei überhaupt ändern) und bei notwendiger Änderung dann wieder einen Mechanismus, der (mit höherer Wahrscheinlichkeit als bisher) jederzeit sicherstellt, daß es eine gültige Datei "/var/TZ" gibt (den Symlink unter "/etc/TZ" kann man im SquashFS nicht ändern).
Dazu könnte man z.B. den Inhalt der "/etc/default.$Country/TZ" in die Datei "/var/TZ" kopieren anstatt von "/var/TZ" noch einmal per Symlink ins SquashFS zu verweisen ... dann handelt es sich bei "/var/TZ" immer um eine reguläre Datei und man könnte nach dem Prinzip "neue Datei samt Inhalt erstellen und anschließend umbenennen, wobei die vorhandene ältere Datei gleichen Namens ersetzt wird" sicherstellen, daß es immer eine Datei "/var/TZ" gibt, denn der Linux-Syscall "sys_rename" arbeitet bei einem derartigen Umbenennen "atomar".