Fixed LDAP_DUMP_* options when data contains binary

Dumping details that were binary, such as the jpegphoto data, would
cause the dump to fail on the encoding to JSON.
This change forces content to be UTF8 before dumping.
Updated existing test to cover.

Closes #3396
This commit is contained in:
Dan Brown 2022-05-09 15:57:50 +01:00
parent 2a99e23e6d
commit 328bc88f02
No known key found for this signature in database
GPG Key ID: 46D9F943C24A2EF9
2 changed files with 8 additions and 3 deletions

View File

@ -19,10 +19,13 @@ class JsonDebugException extends Exception
}
/**
* Covert this exception into a response.
* Convert this exception into a response.
* We add a manual data conversion to UTF8 to ensure any binary data is presentable as a JSON string.
*/
public function render(): JsonResponse
{
return response()->json($this->data);
$cleaned = mb_convert_encoding($this->data, 'UTF-8');
return response()->json($cleaned);
}
}

View File

@ -615,7 +615,7 @@ class LdapTest extends TestCase
public function test_dump_user_details_option_works()
{
config()->set(['services.ldap.dump_user_details' => true]);
config()->set(['services.ldap.dump_user_details' => true, 'services.ldap.thumbnail_attribute' => 'jpegphoto']);
$this->commonLdapMocks(1, 1, 1, 1, 1);
$this->mockLdap->shouldReceive('searchAndGetEntries')->times(1)
@ -623,6 +623,8 @@ class LdapTest extends TestCase
->andReturn(['count' => 1, 0 => [
'uid' => [$this->mockUser->name],
'cn' => [$this->mockUser->name],
// Test dumping binary data for avatar responses
'jpegphoto' => base64_decode('/9j/4AAQSkZJRg=='),
'dn' => ['dc=test' . config('services.ldap.base_dn')],
]]);