-
getpwuid() - Problem
Hi!
Ich habe ein Perl-Script, welches mir die nächste freie UID zurückliefert
Code:
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?
-
zur frage der performance von system und exec ein pfusch-benchmark:
zum testen von exec:
Code:
for ( $i=0; $i<=2500; $i++ )
{
open( FOO, "-|" ) || exec "./testprog";
close FOO;
}
liefert zurück:
Code:
real 0m20.091s
user 0m8.680s
sys 0m11.220s
für system:
Code:
for ( $i=0; $i<=2500; $i++ )
{
system "./testprog";
}
liefert
Code:
real 0m18.540s
user 0m7.880s
sys 0m9.910s
und als kleine Anmerkung: NIEMALS folgendes machen:
Code:
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 ;)