| | 1164 | # Method: updateSIDEntries |
| | 1165 | # |
| | 1166 | # Check and correct if there's any user or group with a wrong SID. Note |
| | 1167 | # that depending on when the user/group is created the SID might change. |
| | 1168 | # This method should be run in regenConfig |
| | 1169 | # |
| | 1170 | # |
| | 1171 | sub updateSIDEntries |
| | 1172 | { |
| | 1173 | my ($self) = @_; |
| | 1174 | |
| | 1175 | my $users = EBox::Global->modInstance('users'); |
| | 1176 | my $ldap = $self->{'ldap'}; |
| | 1177 | my $userDN = $users->usersDn(); |
| | 1178 | my $sid = uc(getSID()); |
| | 1179 | $sid = uc($sid); |
| | 1180 | |
| | 1181 | my %attrs = ( |
| | 1182 | base => $userDN, |
| | 1183 | filter => "(&(objectclass=sambaSamAccount)(!(sambaSID=$sid*)))", |
| | 1184 | attrs => ['sambaSID', 'sambaPrimaryGroupSID', 'dn'], |
| | 1185 | scope => 'sub' |
| | 1186 | ); |
| | 1187 | |
| | 1188 | my $result = $ldap->search(\%attrs); |
| | 1189 | |
| | 1190 | for my $entry ($result->entries()) { |
| | 1191 | my $oldSID = $entry->get_value('sambaSID'); |
| | 1192 | my $oldGroupSID = $entry->get_value('sambaPrimaryGroupSID'); |
| | 1193 | my ($lastNumbers) = $oldSID =~ /.*-(\d+)$/; |
| | 1194 | my $newSID = "$sid-$lastNumbers"; |
| | 1195 | my ($lastNumbersGroup) = $oldGroupSID =~ /.*-(\d+)$/; |
| | 1196 | my $newGroupSID = "$sid-$lastNumbersGroup"; |
| | 1197 | $ldap->modifyAttribute($entry->dn(), 'sambaSID', $newSID); |
| | 1198 | $ldap->modifyAttribute($entry->dn(), |
| | 1199 | 'sambaPrimaryGroupSID', |
| | 1200 | $newGroupSID); |
| | 1201 | } |
| | 1202 | |
| | 1203 | my $groupDN = $users->groupsDn(); |
| | 1204 | %attrs = ( |
| | 1205 | base => $groupDN, |
| | 1206 | filter => "(&(objectclass=sambaGroupMapping)(!(sambaSID=$sid*)))", |
| | 1207 | attrs => ['sambaSID'], |
| | 1208 | scope => 'sub' |
| | 1209 | ); |
| | 1210 | |
| | 1211 | $result = $ldap->search(\%attrs); |
| | 1212 | |
| | 1213 | for my $entry ($result->entries()) { |
| | 1214 | my $oldSID = $entry->get_value('sambaSID'); |
| | 1215 | my ($lastNumbers) = $oldSID =~ /.*-(\d+)$/; |
| | 1216 | my $newSID = "$sid-$lastNumbers"; |
| | 1217 | $ldap->modifyAttribute($entry->dn(), 'sambaSID', $newSID); |
| | 1218 | } |
| | 1219 | } |
| | 1220 | |
| | 1221 | |