On Tuesday 04 December 2007 16:44, Alessandro wrote:
> Ciao a tutti, mi scuso anticipatamente nel caso che questa richiesta sia
> offtopic, ho un problema di questo genere: su una fedora core 5 il
> massimo numero di caratteri ammissibili passabili con il comando useradd
> è di 31 caratteri. Ho già provato a scaricare i sorgenti e modificare
> il parametro all'interno del file login.c
> int main (int argc, char **argv)
> {
> char username[256]; precedentemente settato a 32
> char tty[BUFSIZ];
>
>
> ho ricompilato il tutto ma niente useradd mi da l'errore:
> useradd: nome utente «alessandro.alessandro.intred.it» non valido
Il fatto che tu abbia incrementato quella grandezza, non significa niente.Nel
codice ci sarà un controllo per validare la lunghezza della stringa
inserita ,che ovviamente non sarà più grande di 32 byte.
Il controllo di useradd sulla lunghezza del dato è eseguito dalla funzione
check_user_name(), nel dettaglio :
"chkname.h"
49: if (strlen (name) > sizeof (ut.ut_user))
50: return 0;
ut fa riferimento ad una struttura utmp, che si occupa della gestione
dell'accounting, e nel dettaglio ut_user è un array grande UT_NAMESIZE,
definito in bits/utmp.h 32 byte.
Ridefinire UT_NAMESIZE...
Non mi sono mai posto il problema, ma se la lunghezza di un username in un
sistema è standard, ci saranno tonnelate di codice che useranno quel dato
(MAX SIZE) per validare la copia del dato stesso in memoria.Vedi login.c
riportato da te, avrebbe ispirato più fiducia se fosse stato dichiarato
username[UT_NAMESIZE], in quel modo anche se hai un username > 32, quel
codice ti segherebbe sempre le gambe, e penso che ci sia parecchio codice
scritto in quel modo.
Ho paura :-) , non voglio chiederti a cosa ti serve aumentare la lunghezza
dell'username, ti scoraggio nell'andare avanti sulla questione, ma non posso
negarti l'euforia di un segmentation fault :-)
Sicuramente qualcuno conoscerà meglio la problematica.
Salut.
________________________________________________________
http://www.sikurezza.org - Italian Security Mailing List