-if ( $timeZone != SMPREF_NONE && ($timeZone != "")
- && !ini_get("safe_mode")) {
- putenv("TZ=".$timeZone);
+
+/* Check to see if we are allowed to set the TZ environment variable.
+ * We are able to do this if ...
+ * safe_mode is disabled OR
+ * safe_mode_allowed_env_vars is empty (you are allowed to set any) OR
+ * safe_mode_allowed_env_vars contains TZ
+ */
+$tzChangeAllowed = (!ini_get('safe_mode')) ||
+ !strcmp(ini_get('safe_mode_allowed_env_vars'),'') ||
+ preg_match('/^([\w_]+,)*TZ/', ini_get('safe_mode_allowed_env_vars'));
+
+if ( $timeZone != SMPREF_NONE && ($timeZone != "")
+ && $tzChangeAllowed ) {
+
+ // get time zone key, if strict or custom strict timezones are used
+ if (isset($time_zone_type) &&
+ ($time_zone_type == 1 || $time_zone_type == 3)) {
+ /* load time zone functions */
+ require_once(SM_PATH . 'include/timezones.php');
+ $realTimeZone = sq_get_tz_key($timeZone);
+ } else {
+ $realTimeZone = $timeZone;
+ }
+
+ // set time zone
+ if ($realTimeZone) {
+ putenv("TZ=".$realTimeZone);
+ }