Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Compatibility fixes for PHP 8.2 #285

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 7 additions & 7 deletions plugins/cacti/plugin.php
Original file line number Diff line number Diff line change
Expand Up @@ -253,7 +253,7 @@ function printNewItemTR ()
echo '<td><input type=text size=48 name=base_url value="' . htmlspecialchars ($server['base_url'], ENT_QUOTES, 'UTF-8') . '"></td>';
echo '<td><input type=text size=24 name=username value="' . htmlspecialchars ($server['username'], ENT_QUOTES, 'UTF-8') . '"></td>';
echo '<td><input type=password size=24 name=password value="' . htmlspecialchars ($server['password'], ENT_QUOTES, 'UTF-8') . '"></td>';
echo "<td class=tdright>${server['num_graphs']}</td>";
echo "<td class=tdright>{$server['num_graphs']}</td>";
echo '<td>' . getImageHREF ('save', 'update this server', TRUE) . '</td>';
echo '</tr></form>';
}
Expand All @@ -268,7 +268,7 @@ function printNewItemTR ($servers)
{
$options = array();
foreach ($servers as $server)
$options[$server['id']] = "${server['id']}: ${server['base_url']}";
$options[$server['id']] = "{$server['id']}: {$server['base_url']}";
echo "<table cellspacing=\"0\" align=\"center\" width=\"50%\">";
echo "<tr><td>&nbsp;</td><th>Server</th><th>Graph ID</th><th>Caption</th><td>&nbsp;</td></tr>\n";
printOpFormIntro ('add');
Expand All @@ -292,13 +292,13 @@ function printNewItemTR ($servers)
foreach (getCactiGraphsForObject ($object_id) as $graph_id => $graph)
{
$cacti_url = $servers[$graph['server_id']]['base_url'];
$text = "(graph ${graph_id} on server ${graph['server_id']})";
$text = "(graph {$graph_id} on server {$graph['server_id']})";
echo "<tr><td>";
echo "<a href='${cacti_url}/graph.php?action=view&local_graph_id=${graph_id}&rra_id=all' target='_blank'>";
echo "<img src='index.php?module=image&img=cactigraph&object_id=${object_id}&server_id=${graph['server_id']}&graph_id=${graph_id}' alt='${text}' title='${text}'></a></td><td>";
echo "<a href='{$cacti_url}/graph.php?action=view&local_graph_id={$graph_id}&rra_id=all' target='_blank'>";
echo "<img src='index.php?module=image&img=cactigraph&object_id={$object_id}&server_id={$graph['server_id']}&graph_id={$graph_id}' alt='{$text}' title='{$text}'></a></td><td>";
if(permitted ('object', 'cacti', 'del'))
echo getOpLink (array ('op' => 'del', 'server_id' => $graph['server_id'], 'graph_id' => $graph_id), '', 'Cut', 'Unlink graph', 'need-confirmation');
echo "&nbsp; &nbsp;${graph['caption']}";
echo "&nbsp; &nbsp;{$graph['caption']}";
echo "</td></tr>\n";
}
echo "</table>\n";
Expand All @@ -314,7 +314,7 @@ function proxyCactiRequest ($server_id, $graph_id)
if (! array_key_exists ($server_id, $servers))
throw new InvalidRequestArgException ('server_id', $server_id);
$cacti_url = $servers[$server_id]['base_url'];
$url = "${cacti_url}/graph_image.php?action=view&local_graph_id=${graph_id}&rra_id=" . getConfigVar ('CACTI_RRA_ID');
$url = "{$cacti_url}/graph_image.php?action=view&local_graph_id={$graph_id}&rra_id=" . getConfigVar ('CACTI_RRA_ID');
$postvars = 'action=login&login_username=' . $servers[$server_id]['username'];
$postvars .= '&login_password=' . $servers[$server_id]['password'];

Expand Down
14 changes: 7 additions & 7 deletions plugins/munin/plugin.php
Original file line number Diff line number Diff line change
Expand Up @@ -248,7 +248,7 @@ function printNewItemTR ()
echo getOpLink (array ('op' => 'del', 'id' => $server['id']), '', 'destroy', 'delete this server');
echo '</td>';
echo '<td><input type=text size=48 name=base_url value="' . htmlspecialchars ($server['base_url'], ENT_QUOTES, 'UTF-8') . '"></td>';
echo "<td class=tdright>${server['num_graphs']}</td>";
echo "<td class=tdright>{$server['num_graphs']}</td>";
echo '<td>' . getImageHREF ('save', 'update this server', TRUE) . '</td>';
echo '</tr></form>';
}
Expand All @@ -263,7 +263,7 @@ function printNewItem ($servers)
{
$options = array();
foreach ($servers as $server)
$options[$server['id']] = "${server['id']}: ${server['base_url']}";
$options[$server['id']] = "{$server['id']}: {$server['base_url']}";
echo "<table cellspacing=\"0\" align=\"center\" width=\"50%\">";
echo "<tr><td>&nbsp;</td><th>Server</th><th>Graph</th><th>Caption</th><td>&nbsp;</td></tr>\n";
printOpFormIntro ('add');
Expand Down Expand Up @@ -300,13 +300,13 @@ function printNewItem ($servers)
foreach (getMuninGraphsForObject ($object_id) as $graph_name => $graph)
{
$munin_url = $servers[$graph['server_id']]['base_url'];
$text = "(graph ${graph_name} on server ${graph['server_id']})";
$text = "(graph {$graph_name} on server {$graph['server_id']})";
echo "<tr><td>";
echo "<a href='${munin_url}/${domain}/${host}.${domain}/${graph_name}.html' target='_blank'>";
echo "<img src='index.php?module=image&img=muningraph&object_id=${object_id}&server_id=${graph['server_id']}&graph=${graph_name}' alt='${text}' title='${text}'></a></td>";
echo "<a href='{$munin_url}/{$domain}/{$host}.{$domain}/{$graph_name}.html' target='_blank'>";
echo "<img src='index.php?module=image&img=muningraph&object_id={$object_id}&server_id={$graph['server_id']}&graph={$graph_name}' alt='{$text}' title='{$text}'></a></td>";
echo "<td>";
echo getOpLink (array ('op' => 'del', 'server_id' => $graph['server_id'], 'graph' => $graph_name), '', 'Cut', 'Unlink graph', 'need-confirmation');
echo "&nbsp; &nbsp;${graph['caption']}";
echo "&nbsp; &nbsp;{$graph['caption']}";
echo "</td></tr>\n";
}
echo "</table>\n";
Expand All @@ -331,7 +331,7 @@ function proxyMuninRequest ($server_id, $graph)
if (! array_key_exists ($server_id, $servers))
throw new InvalidRequestArgException ('server_id', $server_id);
$munin_url = $servers[$server_id]['base_url'];
$url = "${munin_url}/${domain}/${host}.${domain}/${graph}-day.png";
$url = "{$munin_url}/{$domain}/{$host}.{$domain}/{$graph}-day.png";

$session = curl_init ();

Expand Down
18 changes: 9 additions & 9 deletions scripts/syncdomain.php
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ function print_message_line($text, $flags = 0)
global $options;
if (! array_key_exists ('verbose', $options) and $flags & PML_VERBOSE)
return;
$buff = date (DATE_RFC1123) . ": ${text}\n";
$buff = date (DATE_RFC1123) . ": {$text}\n";
echo $buff;
if (array_key_exists ('stderr', $options) and ! ($flags & PML_NOTICE))
fwrite (STDERR, $buff);
Expand Down Expand Up @@ -75,7 +75,7 @@ function print_message_line($text, $flags = 0)
$filename = '/var/tmp/RackTables-syncdomain-' . $domain_key . '.pid';
if (FALSE === $fp = @fopen ($filename, 'c+'))
{
print_message_line ("Failed to open ${filename}");
print_message_line ("Failed to open {$filename}");
exit (1);
}
$wouldblock = 0;
Expand All @@ -85,19 +85,19 @@ function print_message_line($text, $flags = 0)
$stat = fstat ($fp);
if (! isset ($stat['mtime']))
{
print_message_line ("Failed to obtain mtime of ${filename}");
print_message_line ("Failed to obtain mtime of {$filename}");
exit (1);
}
$pidfile_mtime = $stat['mtime'];
if ($current_time < $pidfile_mtime)
{
print_message_line ("Warning: pidfile ${filename} mtime is in future!");
print_message_line ("Warning: pidfile {$filename} mtime is in future!");
exit (1);
}
// don't indicate failure unless the pidfile is 15 minutes or more old
if ($current_time < $pidfile_mtime + 15 * 60)
exit (0);
print_message_line ("Failed to lock ${filename}, already locked by PID " . trim (fgets ($fp, 10)));
print_message_line ("Failed to lock {$filename}, already locked by PID " . trim (fgets ($fp, 10)));
exit (1);
}

Expand Down Expand Up @@ -166,11 +166,11 @@ function print_message_line($text, $flags = 0)
$flags = PML_NOTICE;
if (! $portsdone)
$flags |= PML_VERBOSE;
print_message_line ("Done '${object['dname']}': ${portsdone}", $flags);
print_message_line ("Done '{$object['dname']}': {$portsdone}", $flags);
}
catch (RackTablesError $e)
{
print_message_line ("FAILED '${object['dname']}': " . $e->getMessage());
print_message_line ("FAILED '{$object['dname']}': " . $e->getMessage());
}
if ($i_am_child)
exit (0);
Expand All @@ -180,7 +180,7 @@ function print_message_line($text, $flags = 0)

if (++$switchesdone == $max)
{
print_message_line ("Maximum of ${max} items reached, terminating", PML_NOTICE|PML_VERBOSE);
print_message_line ("Maximum of {$max} items reached, terminating", PML_NOTICE|PML_VERBOSE);
break;
}
}
Expand All @@ -197,7 +197,7 @@ function print_message_line($text, $flags = 0)
flock ($fp, LOCK_UN); // explicitly unlock file as PHP 5.3.2 made it mandatory
if (FALSE === unlink ($filename))
{
print_message_line ("Failed removing pidfile ${filename}");
print_message_line ("Failed removing pidfile {$filename}");
exit (1);
}
}
Expand Down
6 changes: 3 additions & 3 deletions tests/GetChildrenListTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ public static function setUpBeforeClass () : void
self::$locations[] = $parent_location_id = commitAddObject (self::myStringStatic ('location 0', __CLASS__), NULL, 1562, NULL);
for ($i=1; $i<=self::$num_children; $i++)
{
$child_location_id = commitAddObject (self::myStringStatic ("location ${i}", __CLASS__), NULL, 1562, NULL);
$child_location_id = commitAddObject (self::myStringStatic ("location {$i}", __CLASS__), NULL, 1562, NULL);
self::$locations[] = $child_location_id;
commitLinkEntities ('location', $parent_location_id, 'location', $child_location_id);
self::$links[] = lastInsertID();
Expand All @@ -30,7 +30,7 @@ public static function setUpBeforeClass () : void
self::$objects[] = $parent_object_id = commitAddObject (self::myStringStatic ('object 0', __CLASS__), NULL, self::$objtype_id, NULL);
for ($i=1; $i<=self::$num_children; $i++)
{
$child_object_id = commitAddObject (self::myStringStatic ("object ${i}", __CLASS__), NULL, self::$objtype_id, NULL);
$child_object_id = commitAddObject (self::myStringStatic ("object {$i}", __CLASS__), NULL, self::$objtype_id, NULL);
self::$objects[] = $child_object_id;
commitLinkEntities ('object', $parent_object_id, 'object', $child_object_id);
self::$links[] = lastInsertID();
Expand All @@ -42,7 +42,7 @@ public static function setUpBeforeClass () : void
self::$tags[] = $parent_tag_id = lastInsertID ();
for ($i=1; $i<=self::$num_children; $i++)
{
usePreparedInsertBlade ('TagTree', array ('parent_id' => $parent_tag_id, 'tag' => self::myStringStatic ("tag ${i}", __CLASS__)));
usePreparedInsertBlade ('TagTree', array ('parent_id' => $parent_tag_id, 'tag' => self::myStringStatic ("tag {$i}", __CLASS__)));
$parent_tag_id = lastInsertID ();
self::$tags[] = $parent_tag_id;
}
Expand Down
2 changes: 1 addition & 1 deletion tests/RackspaceFunctionsTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ private function createSampleRacksAndObjects ($racklist)
foreach ($objectlist as $each)
{
list ($prefix, $objtype_id, $unit_nos) = $each;
$object_id = $this->createObjectInRack ("${prefix}-${rack_id}", $objtype_id, $rack_id, $unit_nos);
$object_id = $this->createObjectInRack ("{$prefix}-{$rack_id}", $objtype_id, $rack_id, $unit_nos);
$ret[$rack_id][$object_id] = count ($unit_nos);
}
$i++;
Expand Down
4 changes: 2 additions & 2 deletions tests/TagFunctionsTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,9 @@ public function setUp() : void
$this->b_tag_ids = array();
for ($i = 0; $i < self::NUM_TAGS; $i++)
{
usePreparedInsertBlade ('TagTree', array ('tag' => $this->myString ("tag a${i}"), 'color' => self::COLOR_A + $i));
usePreparedInsertBlade ('TagTree', array ('tag' => $this->myString ("tag a{$i}"), 'color' => self::COLOR_A + $i));
$this->a_tag_ids[] = lastInsertID();
usePreparedInsertBlade ('TagTree', array ('tag' => $this->myString ("tag b${i}"), 'color' => self::COLOR_B));
usePreparedInsertBlade ('TagTree', array ('tag' => $this->myString ("tag b{$i}"), 'color' => self::COLOR_B));
$this->b_tag_ids[] = lastInsertID();
}
$taglist = addTraceToNodes (getTagList());
Expand Down
14 changes: 7 additions & 7 deletions tests/UpgradeTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -34,31 +34,31 @@ public function testUpgrades ()
$dbver = $version;
$db_name = getDBName();
$mysql_bin = '/usr/bin/mysql';
$dbxlink->exec ("DROP DATABASE ${db_name}");
$dbxlink->exec ("CREATE DATABASE ${db_name} CHARACTER SET utf8 COLLATE utf8_general_ci");
$dbxlink->exec ("DROP DATABASE {$db_name}");
$dbxlink->exec ("CREATE DATABASE {$db_name} CHARACTER SET utf8 COLLATE utf8_general_ci");
// FIXME: Importing the dump for 0.20.0 (and likely for the subsequent releases) fails when the configured
// MySQL username is different from "racktables", which is the recorded trigger definer in the file.
// A quick workaround, which may be not appropriate for a production server, is to grant the SUPER privilege:
// mysql> GRANT SUPER ON *.* TO racktables_user@localhost;
exec ("${mysql_bin} --user=${db_username} --password=${db_password} ${db_name} < ./data/${version}.sql", $output, $exitcode);
$this->assertEquals (0, $exitcode, "Populating the ${version} database failed");
exec ("{$mysql_bin} --user={$db_username} --password={$db_password} {$db_name} < ./data/{$version}.sql", $output, $exitcode);
$this->assertEquals (0, $exitcode, "Populating the {$version} database failed");

// the DB was deleted & re-created, so the current connection is invalid; re-connect
connectDB ();
$path = getDBUpgradePath ($version, CODE_VERSION);
$this->assertNotNull ($path, "Empty upgrade path when upgrading from ${version}");
$this->assertNotNull ($path, "Empty upgrade path when upgrading from {$version}");

foreach ($path as $batchid)
{
ob_start ();
executeUpgradeBatch ($batchid);
$output = ob_get_clean ();
$this->assertNotContains ('queries failed', $output, "Upgrading from ${version} failed at ${batchid}");
$this->assertNotContains ('queries failed', $output, "Upgrading from {$version} failed at {$batchid}");
}
ob_start ();
executeUpgradeBatch ('dictionary');
$output = ob_get_clean ();
$this->assertNotContains ('queries failed', $output, "Upgrading from ${version} failed when reloading dictionary");
$this->assertNotContains ('queries failed', $output, "Upgrading from {$version} failed when reloading dictionary");
}
}
}
4 changes: 2 additions & 2 deletions wwwroot/inc/ajax-interface.php
Original file line number Diff line number Diff line change
Expand Up @@ -136,10 +136,10 @@ function getLocationSelectAJAX()
{
if ($location['id'] == $current_location_id)
continue;
echo "<option value=${location['id']} ";
echo "<option value={$location['id']} ";
if ($location['id'] == $selected_id)
echo 'selected ';
echo "style='font-weight: bold'>${location['name']}</option>";
echo "style='font-weight: bold'>{$location['name']}</option>";
if ($location['kidc'] > 0)
printLocationChildrenSelectOptions ($location, $selected_id, $current_location_id);
}
Expand Down
6 changes: 3 additions & 3 deletions wwwroot/inc/auth.php
Original file line number Diff line number Diff line change
Expand Up @@ -220,7 +220,7 @@ function gotClearanceForTagChain ($const_base)
}
break;
default:
throw new RackTablesError ("Can't process sentence of unknown type '${sentence['type']}'", RackTablesError::INTERNAL);
throw new RackTablesError ("Can't process sentence of unknown type '{$sentence['type']}'", RackTablesError::INTERNAL);
}
}
return FALSE;
Expand Down Expand Up @@ -573,7 +573,7 @@ function queryLDAPServer ($username, $password)
RackTablesError::MISCONFIGURED
);
}
$results = @ldap_search ($connect, $LDAP_options['search_dn'], '(' . $LDAP_options['search_attr'] . "=${username})", array("dn"));
$results = @ldap_search ($connect, $LDAP_options['search_dn'], '(' . $LDAP_options['search_attr'] . "={$username})", array("dn"));
if ($results === FALSE)
return array ('result' => 'CAN');
if (@ldap_count_entries ($connect, $results) != 1)
Expand Down Expand Up @@ -614,7 +614,7 @@ function queryLDAPServer ($username, $password)
(
$connect,
$LDAP_options['search_dn'],
'(' . $LDAP_options['search_attr'] . "=${username})",
'(' . $LDAP_options['search_attr'] . "={$username})",
array_merge (array ($LDAP_options['group_attr']), explode (' ', $LDAP_options['displayname_attrs']))
);
if (@ldap_count_entries ($connect, $results) != 1)
Expand Down
26 changes: 13 additions & 13 deletions wwwroot/inc/breed-hpprocurveN1178.php
Original file line number Diff line number Diff line change
Expand Up @@ -266,14 +266,14 @@ function hpprocurveN1178TranslatePushQueue ($dummy_object_id, $queue, $dummy_vla
switch ($cmd['opcode'])
{
case 'create VLAN':
$ret .= "vlan ${cmd['arg1']}\nexit\n";
$ret .= "vlan {$cmd['arg1']}\nexit\n";
break;
case 'destroy VLAN':
$ret .= "no vlan ${cmd['arg1']}\n";
$ret .= "no vlan {$cmd['arg1']}\n";
break;
case 'add allowed':
foreach ($cmd['vlans'] as $vlan_id)
$ret .= "vlan ${vlan_id} tagged ${cmd['port']}\n";
$ret .= "vlan {$vlan_id} tagged {$cmd['port']}\n";
///////////////////////////////////////////////////////////////////////////////////////
// Here is a workaround: remove untagged port for case access->trunk(non-native)
if
Expand All @@ -283,7 +283,7 @@ function hpprocurveN1178TranslatePushQueue ($dummy_object_id, $queue, $dummy_vla
$unset_access_data['port_id'] === $cmd['port']
)
{
$ret .= "no vlan ${unset_access_data['vlan_id']} untagged ${unset_access_data['port_id']}\n";
$ret .= "no vlan {$unset_access_data['vlan_id']} untagged {$unset_access_data['port_id']}\n";
unset ($unset_access_data);
}
///////////////////////////////////////////////////////////////////////////////////////
Expand All @@ -293,13 +293,13 @@ function hpprocurveN1178TranslatePushQueue ($dummy_object_id, $queue, $dummy_vla
if (! empty ($port_id) && $port_id === $cmd['port'])
foreach ($vlan_list as $key => $vlan_id)
if (isset ($vlan_id))
$ret .= "no vlan ${vlan_id} tagged ${port_id}\n";
$ret .= "no vlan {$vlan_id} tagged {$port_id}\n";
$rem_tagged_data = array();
break;
case 'rem allowed':
foreach ($cmd['vlans'] as $vlan_id)
{
$ret .= "no vlan ${vlan_id} tagged ${cmd['port']}\n";
$ret .= "no vlan {$vlan_id} tagged {$cmd['port']}\n";
///////////////////////////////////////////////////////////////////////////////////////
// Here is a workaround: we should remove untagged port before
// add it as tagged for case access->trunk(non-native)
Expand All @@ -309,15 +309,15 @@ function hpprocurveN1178TranslatePushQueue ($dummy_object_id, $queue, $dummy_vla
}
break;
case 'set access':
$ret .= "vlan ${cmd['arg2']} untagged ${cmd['arg1']}\n";
$ret .= "vlan {$cmd['arg2']} untagged {$cmd['arg1']}\n";
///////////////////////////////////////////////////////////////////////////////////////
// Now remove tagged port for case trunk(non-native)->access
//file_put_contents ('/var/log/racktables.log', var_export($rem_allowed_data, true), FILE_APPEND | LOCK_EX);
foreach ($rem_allowed_data as $port_id => $vlan_list)
if (! empty ($port_id) && $port_id === $cmd['arg1'] )
foreach ($vlan_list as $key => $vlan_id)
if (isset ($vlan_id))
$ret .= "no vlan ${vlan_id} tagged ${cmd['arg1']}\n";
$ret .= "no vlan {$vlan_id} tagged {$cmd['arg1']}\n";
$rem_allowed_data = array();
break;
case 'unset access':
Expand All @@ -327,18 +327,18 @@ function hpprocurveN1178TranslatePushQueue ($dummy_object_id, $queue, $dummy_vla
// HP L2 switches doesn't allow "orphaned" ports (without tags)
$unset_access_data['port_id'] = $cmd['arg1'];
$unset_access_data['vlan_id'] = $cmd['arg2'];
$ret .= "no vlan ${cmd['arg2']} untagged ${cmd['arg1']}\n";
$ret .= "no vlan {$cmd['arg2']} untagged {$cmd['arg1']}\n";
break;
case 'set native':
$ret .= "vlan ${cmd['arg2']} untagged ${cmd['arg1']}\n";
$ret .= "vlan {$cmd['arg2']} untagged {$cmd['arg1']}\n";
///////////////////////////////////////////////////////////////////////////////////////
// Here is a workaround: we should add tagged port again for case
// when we remove native but keep it as tagged
$ret .= "no vlan ${cmd['arg2']} tagged ${cmd['arg1']}\n";
$ret .= "no vlan {$cmd['arg2']} tagged {$cmd['arg1']}\n";
break;
case 'unset native': // NOP
$ret .= "no vlan ${cmd['arg2']} untagged ${cmd['arg1']}\n";
$ret .= "vlan ${cmd['arg2']} tagged ${cmd['arg1']}\n";
$ret .= "no vlan {$cmd['arg2']} untagged {$cmd['arg1']}\n";
$ret .= "vlan {$cmd['arg2']} tagged {$cmd['arg1']}\n";
break;
case 'set mode': // NOP
break;
Expand Down
2 changes: 1 addition & 1 deletion wwwroot/inc/caching.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ function checkCachedResponse ($creation_ts, $expire)
$result =
(
$client_time !== FALSE && $client_time !== -1 && // IMS header is readable
! in_array ('no-cache', preg_split ('/\s*,\s*/', @$_SERVER['HTTP_CACHE_CONTROL'])) && // no-cache parameter unset
! in_array ('no-cache', preg_split ('/\s*,\s*/', @$_SERVER['HTTP_CACHE_CONTROL'] ?? '')) && // no-cache parameter unset
$client_time <= $server_time && // not in future
$client_time >= $creation_ts && // not modified since
(! $expire || $client_time + $expire >= $server_time) // expiration timeout is not set, or not expired
Expand Down
Loading