Am Mittwoch, 18. Januar 2006 08:26 schrieb Jens Strohschnitter:
wo kriegt man denn die Sourcen her ?
SUSE <= 9.3: von der zweiten DVD oder vom FTP-Server
SUSE 10.0: von einer extra zu bestellenden DVD oder vom FTP-Server
des openSUSE Projekts (oder nem Mirror)
Hallo,
Das sind aber doch dann die Sourcen, bei denen die Abfrage auf
/dev/null bereits in den Quellen enthalten ist, oder ? Wenn das Ganze
mit dem Linux-Dreisatz ./configure;make;make install kompiliere wird
die Abfrage doch sicher wieder mit reinkompilliert, oder ?
Ja. Ich habe gerade mal eine 9.2er Version der pwdutils heruntergeladen.
Dort steht im Changelog:
2003-12-09 Thorsten Kukuk
[...]
* lib/check_home.c (check_home): New, check path to home
directory.
Also zumindest von SuSE beigetragen.
Du kannst nach der Installation im Verzeichnis
/usr/src/packages/SOURCES/pwdutils-2.6.90/src (oder so ähnlich: DAS hier
ist auf 9.2) in der Datei useradd.c den entsprechenden Code entfernen.
Auf 9.2 findet die Suche nach check_home bzw. nach "Invalid home
directory" die Zeilen:
case 'b': /* for compatibility with shadow useradd.
*/ case 'd':
if (check_home (optarg) == -1)
{
fprintf (stderr, _("%s: Invalid home directory `%s'.\n"),
program, optarg);
return E_BAD_ARG;
}
new_home = optarg;
break;
Wenn Du die gesamte if-Abfrage löschst, sollte das alte Verhalten wieder
hergestellt sein. Das zweite Vorkommen von "Invalid home directory"
scheint sich auf den Default zu beziehen, wo aber witzigerweise kein
check_home durchgeführt wird. Deshalb funktioniert dort auch ein
/dev/null als HOME Verzeichnis. Sehr inkonsistent, würde ich mal
behaupten.
In der Tat findet sich in
/usr/src/packages/SOURCES/pwdutils-2.6.90/lib/check_home.c die Abfrage:
if (strcspn (home, ":\n") != strlen (home) || *home != '/' ||
(stat (home, &st) == 0 && !S_ISDIR(st.st_mode)))
Das !S_ISDIR(st.st_mode) ist die Abfrage, ob es ein Verzeichnis ist.
Also kannst Du alternativ diese check_home Abfrage auch verkürzen:
if (strcspn (home, ":\n") != strlen (home) || *home != '/')
return -1;
== das home Verzeichnis darf keinen Doppelpunkt im Namen führen, und kein
Newline enthalten, und muß ein absoluter Pfad sein, d.h., mit '/'
beginnen.
Wäre es eine Bug Meldung an SuSE wert? Oder würden sie nicht oder nicht
im gewünschten Sinne darauf eingehen?
Viel Erfolg,
Thomas Mack