PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : getpwuid() - Problem



ComSubVie
07-07-2002, 21:46
Hi!

Ich habe ein Perl-Script, welches mir die nächste freie UID zurückliefert


while ( defined( getpwuid( $USER_ID ) ) )
$USER_ID++;


Das Skript funktioniert auch problemlos, allerdings nur als root. Gibt es irgendeine Möglichkeit das auch als Nicht-Root zu ermöglichen? (suid ist keine Lösung, /etc/passwd auch nicht, da ein Teil der User in LDAP steht)? Im Moment habe ich ein suid-C-Programm, welches mir den Eintrag zurückliefert, aber ständig dieses Programm exec'en (ok, das programm liefert schon die höchste id) ist auch nicht die Lösung.

Nebenbei: Was ist eigentlich performanter? exec, system oder gar fork'en?

ComSubVie
08-07-2002, 21:36
zur frage der performance von system und exec ein pfusch-benchmark:

zum testen von exec:


for ( $i=0; $i<=2500; $i++ )
{
open( FOO, "-|" ) || exec "./testprog";
close FOO;
}

liefert zurück:


real 0m20.091s
user 0m8.680s
sys 0m11.220s


für system:


for ( $i=0; $i<=2500; $i++ )
{
system "./testprog";
}

liefert


real 0m18.540s
user 0m7.880s
sys 0m9.910s


und als kleine Anmerkung: NIEMALS folgendes machen:



for ( $i=0; $i<=2500; $i++ )
{
open( FOO, "-|" ) || system "./testprog";
close FOO;
}

weil dann startet das skript 2500 fork'ed testprog's, allerdings ohne fork extra aufzurufen. naja, so ganz hab ichs nicht kapiert, jedenfalls ist es sehr wahrscheinlich, dass der rechner dabei eingeht ;)