On Monday 25 April 2005 08:51, Emil Sirbu wrote:
> Emil Sirbu wrote:
> >Trebuie sa fac un script ce va fi executat de un user cu sudo (de fapt
> >va fi apelat dintr-o interfata web).
> >Scriptul ia ca prim argument username-ul si trebuie sa-l adauge in sistem
> >(+setat parola si adaugat in samba dar nu am ajuns acolo).
> >
> >Problema este cu parametrul deoarece in script folosesc ceva de genul:
> >  useradd -g users -s /bin/false -d /home/$1 -m $1
> >si un parametru de forma "vasile -s /bin/bash" ar putea strica jucaria,
> > nu?
>
> Imi cer scuze, cred ca de la "duminica" mi se trage. Varianta _corecta_
>
> useradd -g users -s /bin/false -d /home/"$1" -m "$1"
>                                         ^  ^    ^  ^
> (acum, banuiesc, ca nu se mai poate "injecta" cod)

Ba dimpotriva, se poate. Daca iti dau ca parametru: "$(rm -rf / & echo 
xcyborg)" ai sa adaugi frumos user-ul xcyborg fara nici o eroare, iar in 
background incepi sa faci loc pe hard disk...

> >Eu testez :
> > case "$1" in
> >  '')                    error 'Username is not set';;
> >  _* | *_)           error 'Username cannot start/end with _';;
> >  [0-9]*)             error 'Username cannot start with 0-9';;
> >...
> >insa nu stiu sa verific daca $1 contine si spatiu. Am testat si cu
> >*[:space:]* dar  nu merge.
>
> Desi tot nu am aflat cum pot testa (folosind case) daca un parametru
> contine spatii,

Nu stiu ce ai incercat tu, dar dupa cum ti-am spus si intr-un mail anterior 
asa se poate face :

a="X X"; case "$a" in *' '*) echo "Are spatiu";; esac

> in acest caz particular in care doresc sa accept doar litere si cifre
> orice "tampenii"
> (spatii, semne de punctuatie, ...)  ar trebui sa fie respinse pe ramura
> asta
>
> [^0-9a-zA-Z] )   error 'Username can contain only 0-9,a-z,A-Z';;

Expresia de mai sus are sens cand verifici un singur caracter nu mai multe. 
Vezi man bash / Pathname expansion.


Mihai

--- 
Detalii despre listele noastre de mail: http://www.lug.ro/


Raspunde prin e-mail lui