#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 | Keywords: ---------------------------+------------------------------------------------ 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.
#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.
--
#527: octofussd propaga eventuali utenti con uid duplicato ----------------------+----------------------------------------------------- Reporter: piccardi | Owner: cgabriel Type: defect | Status: new Priority: high | Milestone: Component: Octofuss | Version: Severity: critical | Resolution: Keywords: | ----------------------+----------------------------------------------------- Changes (by cgabriel):
* component: Fuss Launcher => Octofuss
#527: octofussd propaga eventuali utenti con uid duplicato ----------------------+----------------------------------------------------- Reporter: piccardi | Owner: cgabriel Type: defect | Status: new Priority: high | Milestone: Component: Octofuss | Version: Severity: critical | Resolution: Keywords: | ----------------------+-----------------------------------------------------
Comment(by piccardi):
Alternativamente si può usare la condizione:
if u > last + 1:
in questo caso se u = last comunque u < last + 1
#527: octofussd propaga eventuali utenti con uid duplicato ----------------------+----------------------------------------------------- Reporter: piccardi | Owner: cgabriel Type: defect | Status: closed Priority: high | Milestone: Component: Octofuss | Version: Severity: critical | Resolution: fixed Keywords: | ----------------------+----------------------------------------------------- Changes (by piccardi):
* status: new => closed * resolution: => fixed
Comment:
Ho committato sul branch di squeeze, dopo averla testata (manualmente), la modifica. Adesso in caso di utente con uid duplicato funziona regolarmente nella creazione di nuovi utenti assegnando il primo UID libero. Ho verificato anche che vada in condizioni normali. Con il nuovo build dei pacchetti dovrebbe andare a posto.