#527: octofussd propaga eventuali utenti con uid duplicato ---------------------------+------------------------------------------------ Reporter: piccardi | Owner: cgabriel Type: defect | Status: new Priority: high | Milestone: Component: Fuss Launcher | Version: Severity: critical | Resolution: Keywords: | ---------------------------+------------------------------------------------ Description changed by piccardi:
Old description:
Quando per un qualche motivo si ottiene un uid duplicato su più di un utente (cosa si è verificata in seguito ad una immissione di massa andata male a causa di un utente con la virgoletta singola nel nome), a tutti gli utenti creati in seguito viene assegnato lo stesso uid, cosa che propaga all'infinito il problema.
La causa è nella funzione _get_free_uidnumber, che contiene il seguente codice:
uids.sort() if len(uids) == 0: return FIRSTUID # Look for the first gap last = uids[0] for u in uids[1:]: if u != last + 1: return last + 1 last = u # Else, return the maximum one plus 1 return uids[-1] + 1
ed e` chiaro che se ci sono due uid sono uguali, quando si arriva al secondo la condizione u != last + 1 è vera perché u è uguale a last, e da quel momento in poi si ottiene sempre last + 1.
La soluzione più semplice è lasciar perdere la ricerca del gap, cosa che fanno anche tutti i comandi ordinari, ed eliminare tutto il codice che sta fra i due commenti restituendo sempre il valore successivo all'uid corrente di valore più elevato.
New description:
Quando per un qualche motivo si ottiene un uid duplicato su più di un utente (cosa si è verificata in seguito ad una immissione di massa andata male a causa di un utente con la virgoletta singola nel nome), a tutti gli utenti creati in seguito viene assegnato lo stesso uid, cosa che propaga all'infinito il problema.
La causa è nella funzione _get_free_uidnumber, che contiene il seguente codice: {{{ uids.sort() if len(uids) == 0: return FIRSTUID # Look for the first gap last = uids[0] for u in uids[1:]: if u != last + 1: return last + 1 last = u # Else, return the maximum one plus 1 return uids[-1] + 1 }}} ed e` chiaro che se ci sono due uid sono uguali, quando si arriva al secondo la condizione u != last + 1 è vera perché u è uguale a last, e da quel momento in poi si ottiene sempre last + 1.
La soluzione più semplice è lasciar perdere la ricerca del gap, cosa che fanno anche tutti i comandi ordinari, ed eliminare tutto il codice che sta fra i due commenti restituendo sempre il valore successivo all'uid corrente di valore più elevato.
--