editace uzivatele

Juraj Lutter freebsd-users-l at wilbury.sk
Wed Jan 18 17:22:16 CET 2006


On Wed, Jan 18, 2006 at 05:16:37PM +0100, Dan Lukes wrote:
> Juraj Lutter napsal/wrote, On 01/18/06 15:08:
> > 	Ukaz nam pliz pouzitie popen() a pclose() na vyrobenie
> > 	jednoducheho wrapperu okolo ``pw'', ktore eliminuje a) aj b).
> 
> 	Co na tom chces, proboha, ukazovat ? Vzdyt to jsou uplne trivialni funkce:

	Ja osobne nic, len som nemal cas pisat example, kedze posledne
	dni som "v jednom kole" v praci :-)

> 
> /* -------------------------- */
> int
> wrap (const char * restrict uname,const char * restrict pwd) {
> 	char *cmd;
> 	FILE *fsh;
> 
> 	asprintf(&cmd, "pw usermod -h 0 '%s'", uname);
> 	fsh=popen(cmd, "w");
> 	free(cmd);
> 	fputs(password, fsh);
> 	return(pclose(fsh));
> }
> /* -------------------------- */

> 
> 	Pisu to jen "z ruky" a tak to mozna neni uplne dobre - a v kazdem 
> pripade tam netestuji chybove udalosti (ze se povedl asprintf, popen, 
> fputs ...) - ale to uz si urcite dodelas.
> 
> 	Jen pro zajimavost (a uplnost) - popen nevola primo zadany program, ale 
> vola 'sh' a teprve to vola prislusny program. Coz je trochu skoda. Kdyby 
> to udelali bez sh, ten, kdo by ho tam chtel mit by to zaridil snadno, 
> takhle ale nelze popen pouzit primo k volani programu bez sh. Na druhou 
> stranu, neni zas takovy problem se podivat do zdrojaku libc a upravou 
> vyrobit vlastni popen bez sh ...

	Navyse, ja som to cele pojal zle. ``pw'' totiz pri zadani fd 0
	alebo ineho, ktory je terminal, pyta heslo interaktivne. Cize
	riesenie by bolo otvorit si pipe(), nasledne urobit fork(), v
	parente zapisat heslo a v childe odovzdat ``pw'' "druhy"
	koniec vytvorenej pipe.

	otis

-- 
Juraj Lutter                          |  /\  ASCII Ribbon Campaign
otis (at) wilbury.sk                  |  \/  - NO HTML/RTF in e-mail
http://www.wilbury.sk/                |  /\  - NO Word docs in e-mail



More information about the Users-l mailing list