asdasdasd
All checks were successful
Deploy / deploy-staging (push) Successful in 24s
Deploy / deploy-production (push) Has been skipped

This commit is contained in:
2026-06-15 21:50:41 +02:00
parent 5408a2bb89
commit 27c0825111
3 changed files with 31 additions and 12 deletions

View File

@@ -61,6 +61,7 @@ return [
'group_assignment_mode' => getenv('LDAP_GROUP_ASSIGNMENT_MODE') ?: 'group_memberuid', 'group_assignment_mode' => getenv('LDAP_GROUP_ASSIGNMENT_MODE') ?: 'group_memberuid',
'group_member_attribute' => getenv('LDAP_GROUP_MEMBER_ATTRIBUTE') ?: 'memberUid', 'group_member_attribute' => getenv('LDAP_GROUP_MEMBER_ATTRIBUTE') ?: 'memberUid',
'default_login_shell' => '/bin/sh', 'default_login_shell' => '/bin/sh',
'apple_schema_enabled' => filter_var(getenv('LDAP_APPLE_SCHEMA_ENABLED') ?: 'false', FILTER_VALIDATE_BOOL),
'home_directory_prefix' => '/home', 'home_directory_prefix' => '/home',
'uid_number_start' => (int) (getenv('LDAP_UID_NUMBER_START') ?: 1000010), 'uid_number_start' => (int) (getenv('LDAP_UID_NUMBER_START') ?: 1000010),
'gid_number_default' => (int) (getenv('LDAP_GID_NUMBER_DEFAULT') ?: 1000012), 'gid_number_default' => (int) (getenv('LDAP_GID_NUMBER_DEFAULT') ?: 1000012),

View File

@@ -321,16 +321,14 @@ final class LdapProvisioner
$unixHash = $this->cryptSha512($plainPassword); $unixHash = $this->cryptSha512($plainPassword);
$now = time(); $now = time();
$shadowLastChange = (string) floor($now / 86400); $shadowLastChange = (string) floor($now / 86400);
$appleSchemaEnabled = (bool) ($this->config['ldap']['apple_schema_enabled'] ?? false);
return [ $entry = [
'objectClass' => [ 'objectClass' => [
'apple-user',
'extensibleObject',
'inetOrgPerson', 'inetOrgPerson',
'organizationalPerson', 'organizationalPerson',
'person', 'person',
'posixAccount', 'posixAccount',
'sambaIdmapEntry',
'sambaSamAccount', 'sambaSamAccount',
'shadowAccount', 'shadowAccount',
'top', 'top',
@@ -342,13 +340,12 @@ final class LdapProvisioner
'sn' => $familyName !== '' ? $familyName : $username, 'sn' => $familyName !== '' ? $familyName : $username,
'uid' => $username, 'uid' => $username,
'uidNumber' => $uidNumber, 'uidNumber' => $uidNumber,
'apple-generateduid' => $appleGeneratedUid,
'authAuthority' => ';basic;',
'displayName' => $displayName !== '' ? $displayName : $username, 'displayName' => $displayName !== '' ? $displayName : $username,
'gecos' => $gecos, 'gecos' => $gecos,
'givenName' => $givenName, 'givenName' => $givenName,
'loginShell' => $loginShell, 'loginShell' => $loginShell,
'mail' => $mail, 'mail' => $mail,
'pwdLastSet' => '0',
'sambaAcctFlags' => '[U ]', 'sambaAcctFlags' => '[U ]',
'sambaLMPassword' => 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', 'sambaLMPassword' => 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
'sambaNTPassword' => $ntHash, 'sambaNTPassword' => $ntHash,
@@ -363,6 +360,15 @@ final class LdapProvisioner
'shadowWarning' => (string) ($this->config['ldap']['shadow_warning'] ?? 7), 'shadowWarning' => (string) ($this->config['ldap']['shadow_warning'] ?? 7),
'userPassword' => $unixHash, 'userPassword' => $unixHash,
]; ];
if ($appleSchemaEnabled) {
array_unshift($entry['objectClass'], 'extensibleObject');
array_unshift($entry['objectClass'], 'apple-user');
$entry['apple-generateduid'] = $appleGeneratedUid;
$entry['authAuthority'] = ';basic;';
}
return $entry;
} }
/** /**

View File

@@ -35,6 +35,7 @@ final class RegistrationLdifBuilder
$mail = trim((string) ($request['email'] ?? '')); $mail = trim((string) ($request['email'] ?? ''));
$appleGeneratedUid = trim((string) ($provisioning['apple_generateduid'] ?? $this->generateUuidV4())); $appleGeneratedUid = trim((string) ($provisioning['apple_generateduid'] ?? $this->generateUuidV4()));
$sambaSid = trim((string) ($provisioning['samba_sid'] ?? '')); $sambaSid = trim((string) ($provisioning['samba_sid'] ?? ''));
$appleSchemaEnabled = (bool) ($this->config['ldap']['apple_schema_enabled'] ?? false);
$shadowExpire = (string) ($this->config['ldap']['shadow_expire'] ?? 1); $shadowExpire = (string) ($this->config['ldap']['shadow_expire'] ?? 1);
$shadowFlag = (string) ($this->config['ldap']['shadow_flag'] ?? 0); $shadowFlag = (string) ($this->config['ldap']['shadow_flag'] ?? 0);
$shadowInactive = (string) ($this->config['ldap']['shadow_inactive'] ?? 0); $shadowInactive = (string) ($this->config['ldap']['shadow_inactive'] ?? 0);
@@ -77,16 +78,19 @@ final class RegistrationLdifBuilder
} }
$lines[] = 'dn: uid=' . $username . ',' . $usersDn; $lines[] = 'dn: uid=' . $username . ',' . $usersDn;
$lines[] = 'objectClass: apple-user';
$lines[] = 'objectClass: extensibleObject';
$lines[] = 'objectClass: inetOrgPerson'; $lines[] = 'objectClass: inetOrgPerson';
$lines[] = 'objectClass: organizationalPerson'; $lines[] = 'objectClass: organizationalPerson';
$lines[] = 'objectClass: person'; $lines[] = 'objectClass: person';
$lines[] = 'objectClass: posixAccount'; $lines[] = 'objectClass: posixAccount';
$lines[] = 'objectClass: sambaIdmapEntry';
$lines[] = 'objectClass: sambaSamAccount'; $lines[] = 'objectClass: sambaSamAccount';
$lines[] = 'objectClass: shadowAccount'; $lines[] = 'objectClass: shadowAccount';
$lines[] = 'objectClass: top'; $lines[] = 'objectClass: top';
if ($appleSchemaEnabled) {
$lines[] = 'objectClass: apple-user';
$lines[] = 'objectClass: extensibleObject';
}
$lines[] = 'cn: ' . $cn; $lines[] = 'cn: ' . $cn;
if ($gidNumber !== '') { if ($gidNumber !== '') {
@@ -106,9 +110,12 @@ final class RegistrationLdifBuilder
$lines[] = 'uidNumber: ' . $uidNumber; $lines[] = 'uidNumber: ' . $uidNumber;
} }
$lines[] = 'displayName: ' . ($displayName !== '' ? $displayName : $username);
if ($appleSchemaEnabled) {
$lines[] = 'apple-generateduid: ' . strtoupper($appleGeneratedUid); $lines[] = 'apple-generateduid: ' . strtoupper($appleGeneratedUid);
$lines[] = 'authAuthority: ;basic;'; $lines[] = 'authAuthority: ;basic;';
$lines[] = 'displayName: ' . ($displayName !== '' ? $displayName : $username); }
if ($gecos !== '') { if ($gecos !== '') {
$lines[] = 'gecos: ' . $gecos; $lines[] = 'gecos: ' . $gecos;
@@ -125,6 +132,11 @@ final class RegistrationLdifBuilder
$lines[] = 'memberOf: ' . $groupDn; $lines[] = 'memberOf: ' . $groupDn;
} }
$lines[] = 'pwdLastSet: 0';
$lines[] = 'sambaAcctFlags: [U ]';
$lines[] = 'sambaLMPassword: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
$lines[] = 'sambaPasswordHistory: 0000000000000000000000000000000000000000000000000000000000000000';
$lines[] = 'sambaPwdLastSet: 0';
$lines[] = 'shadowExpire: ' . $shadowExpire; $lines[] = 'shadowExpire: ' . $shadowExpire;
$lines[] = 'shadowFlag: ' . $shadowFlag; $lines[] = 'shadowFlag: ' . $shadowFlag;
$lines[] = 'shadowInactive: ' . $shadowInactive; $lines[] = 'shadowInactive: ' . $shadowInactive;