Skip to content

Commit 286f8ae

Browse files
committed
fix: resolve sync crashes and data corruption on PHP 8.4
- Suppress PHP 8.4 deprecation warnings in worker process to prevent SHUTDOWN-ERROR crashes (vendor libs not yet PHP 8.4 compatible) - Fix assignment instead of comparison in LDAP response check (= vs ===) - Fix undefined array key: API returns 'id' not 'user_id' after save - Validate sip_transport value before PATCH to prevent 422 errors - Disable HTML escaping for userFilter textarea to prevent & -> & corruption on each save cycle
1 parent 458a6d3 commit 286f8ae

File tree

3 files changed

+15
-4
lines changed

3 files changed

+15
-4
lines changed

App/Forms/LdapConfigForm.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,8 @@ public function initialize($entity = null, $options = null): void
7070

7171
// UserFilter
7272
$this->addTextArea('userFilter', $entity->userFilter ?? '(&(objectClass=user)(objectCategory=PERSON))', 90, [
73-
'placeholder' => '(&(objectClass=user)(objectCategory=PERSON))'
73+
'placeholder' => '(&(objectClass=user)(objectCategory=PERSON))',
74+
'skipEscaping' => true,
7475
]);
7576

7677
// Select server type

Lib/LdapSyncMain.php

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ public static function syncUsersPerServer(array $ldapCredentials): AnswerStructu
7171
$processedUsers = [];
7272

7373
// Check if LDAP retrieval was successful
74-
if ($responseFromLdap->success = false) {
74+
if ($responseFromLdap->success === false) {
7575
return $responseFromLdap;
7676
}
7777

@@ -181,7 +181,9 @@ public static function updateUserData(array $ldapCredentials, array $userFromLda
181181
$response->data[Constants::USER_HAD_CHANGES_ON] = Constants::HAD_CHANGES_ON_PBX;
182182
$response->data[Constants::USER_SYNC_RESULT] = Constants::SYNC_RESULT_UPDATED;
183183
$previousSyncUser->domainParamsHash = $domainParamsHash;
184-
$previousSyncUser->user_id = $response->data['user_id'];
184+
if (!empty($response->data['id'])) {
185+
$previousSyncUser->user_id = $response->data['id'];
186+
}
185187
} else {
186188
$response->data[Constants::USER_SYNC_RESULT] = Constants::SYNC_RESULT_CONFLICT;
187189
$response->data[Constants::SYNC_RESULT_CONFLICT_SIDE] = Constants::PBX_UPDATE_CONFLICT;
@@ -467,9 +469,13 @@ public static function createUpdateUser(array $userDataFromLdap, ?string $curren
467469
$employeeData['user_avatar'] = $userDataFromLdap[Constants::USER_AVATAR_ATTR];
468470
}
469471

470-
// Trim transport value
472+
// Validate sip_transport value
473+
$validTransports = ['udp', 'tcp', 'tls', 'udp,tcp'];
471474
if (isset($employeeData['sip_transport'])) {
472475
$employeeData['sip_transport'] = trim($employeeData['sip_transport']);
476+
if (!in_array($employeeData['sip_transport'], $validTransports, true)) {
477+
$employeeData['sip_transport'] = 'udp,tcp';
478+
}
473479
}
474480

475481
// Remove read-only fields before saving

Lib/Workers/WorkerLdapSync.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,10 @@ class WorkerLdapSync extends WorkerBase
4343
*/
4444
public function start(array $argv): void
4545
{
46+
// Suppress deprecation warnings for PHP 8.4 compatibility
47+
// while maintaining support for PHP 7.4
48+
error_reporting(E_ALL & ~E_DEPRECATED);
49+
4650
$managedCache = $this->di->get(ManagedCacheProvider::SERVICE_NAME);
4751

4852
// Retrieve the last sync timestamp from the cache

0 commit comments

Comments
 (0)