2013-06-07
skl
The function deleteUsers in auth_plugin_authplain isn't working properly. If I delete a user with a username
containing a preg special char ('john-doe' for example), just after deleting it remains visible. I have to reload
the page to see he is really deleted.
I propose the following bugfix:
186 public function deleteUsers($users) {
187 global $config_cascade;
188
189 if(!is_array($users) || empty($users)) return 0;
190
191 if($this->users === null) $this->_loadUserData();
192
193 $deleted = array();
194 foreach($users as $user) {
// the original usernames should be preserved:
195 if(isset($this->users[$user])) $deleted[] = preg_quote($user, '/');
// for example:
if(isset($this->users[$user])) $deleted[$user] = preg_quote($user, '/');
196 }
197
198 if(empty($deleted)) return 0;
199
200 $pattern = '/^('.join('|', $deleted).'):/';
201
202 if(io_deleteFromFile($config_cascade['plainauth.users']['default'], $pattern, true)) {
// having done that, the looping should be done over the originals:
203 foreach($deleted as $user) unset($this->users[$user]);
// for example:
foreach(array_keys($deleted) as $user) unset($this->users[$user]);
204 return count($deleted);
205 }
206
207 // problem deleting, reload the user list and count the difference
208 $count = count($this->users);
209 $this->_loadUserData();
210 $count -= count($this->users);
211 return $count;
212 }