Skip to content

Commit 21e9777

Browse files
committedApr 7, 2025·
prevent user/pi/org uid/gid conflicts, avoid debian reserved ranges
1 parent a1679de commit 21e9777

File tree

1 file changed

+16
-36
lines changed

1 file changed

+16
-36
lines changed
 

‎resources/lib/UnityLDAP.php

+16-36
Original file line numberDiff line numberDiff line change
@@ -115,82 +115,62 @@ public function getDefUserShell()
115115
//
116116
// ID Number selection functions
117117
//
118-
public function getNextUIDNumber($UnitySQL)
118+
public function getNextUIDNumber(UnitySQL $UnitySQL): int
119119
{
120-
$max_uid = $UnitySQL->getSiteVar('MAX_UID');
121-
$new_uid = $max_uid + 1;
122-
123-
while ($this->UIDNumInUse($new_uid)) {
124-
$new_uid++;
120+
$new_id = $UnitySQL->getSiteVar('MAX_UID') + 1;
121+
while ($this->IDNumInUse($new_id)) {
122+
$new_id++;
125123
}
126-
127-
$UnitySQL->updateSiteVar('MAX_UID', $new_uid);
128-
129-
return $new_uid;
124+
$UnitySQL->updateSiteVar('MAX_UID', $new_id);
125+
return $new_id;
130126
}
131127

132-
public function getNextPiGIDNumber($UnitySQL)
128+
public function getNextPiGIDNumber(UnitySQL $UnitySQL): int
133129
{
134130
$max_pigid = $UnitySQL->getSiteVar('MAX_PIGID');
135131
$new_pigid = $max_pigid + 1;
136-
137-
while ($this->PIGIDNumInUse($new_pigid)) {
132+
while ($this->IDNumInUse($new_pigid)) {
138133
$new_pigid++;
139134
}
140-
141135
$UnitySQL->updateSiteVar('MAX_PIGID', $new_pigid);
142-
143136
return $new_pigid;
144137
}
145138

146-
public function getNextOrgGIDNumber($UnitySQL)
139+
public function getNextOrgGIDNumber(UnitySQL $UnitySQL): int
147140
{
148141
$max_gid = $UnitySQL->getSiteVar('MAX_GID');
149142
$new_gid = $max_gid + 1;
150-
151-
while ($this->GIDNumInUse($new_gid)) {
143+
while ($this->IDNumInUse($new_gid)) {
152144
$new_gid++;
153145
}
154-
155146
$UnitySQL->updateSiteVar('MAX_GID', $new_gid);
156-
157147
return $new_gid;
158148
}
159149

160-
private function UIDNumInUse($id)
150+
private function IDNumInUse(int $id): bool
161151
{
152+
// id reserved for debian packages
153+
if (($id >= 100 && $id <= 999) || ($id >= 60000 && $id <= 64999)){
154+
return true;
155+
}
162156
$users = $this->userOU->getChildrenArray(true);
163157
foreach ($users as $user) {
164158
if ($user["uidnumber"][0] == $id) {
165159
return true;
166160
}
167161
}
168-
169-
return false;
170-
}
171-
172-
private function PIGIDNumInUse($id)
173-
{
174162
$pi_groups = $this->pi_groupOU->getChildrenArray(true);
175163
foreach ($pi_groups as $pi_group) {
176164
if ($pi_group["gidnumber"][0] == $id) {
177165
return true;
178166
}
179167
}
180-
181-
return false;
182-
}
183-
184-
private function GIDNumInUse($id)
185-
{
186168
$groups = $this->groupOU->getChildrenArray(true);
187169
foreach ($groups as $group) {
188170
if ($group["gidnumber"][0] == $id) {
189171
return true;
190172
}
191173
}
192-
193-
return false;
194174
}
195175

196176
public function getUnassignedID($uid, $UnitySQL)
@@ -208,7 +188,7 @@ public function getUnassignedID($uid, $UnitySQL)
208188

209189
if ($uid == $netid_match || $netid == $netid_match) {
210190
// found a match
211-
if (!$this->UIDNumInUse($uid_match) && !$this->GIDNumInUse($uid_match)) {
191+
if (!$this->IDNumInUse($uid_match)) {
212192
return $uid_match;
213193
}
214194
}

0 commit comments

Comments
 (0)
Please sign in to comment.