Tips zu GNU Finger und Aehnlichem

GNU Finger

Geschichte von GNU Finger

In der Guten Alten Zeit (TM) begab es sich, dass User Anton regelmässig wissen wollte, ob Userin Beatrice am Computer sass. Da es nur zwei Computer auf dem Campus gab, schrieb Anton ein Programm, welches meldete, wer am Computer sass. Das Programm tat, was es tun musste und Anton sah, dass es gut war.

Einige Jahre später hatte die Universität viele neue, bunte Computer gekauft, so dass pro Benutzer meist eine eigene Workstation zur Verfügung stand. Das Problem war nun, dass die Benutzer ihre Arbeitsstation häufig wechselten. GNU sah, dass dies die ursprüngliche Absicht von finger vereitelte und schrieb GNU finger, welches jeweils alle User eines Clusters zurücklieferte und auf Anfrage die freien Arbeitsstationen meldete.

GNU Finger wurde offenbar bis zur Version 1.37 entwickelt. Diese Version stammt aus dem Jahre 1992...

Es gibt eine Alpha-Version eines neuen GNU Finger (Zur Zeit 1.39a5). Zu finden unter
ftp://alpha.gnu.org/gnu/finger/
Ich habe es bis jetzt nicht getestet, aber offenbar ist es immer noch einigermassen buggy und auf einzelnen Systemen schwer zu installieren.

Compilation

Bitte den Abschnitt Bugfixes beachten.

GNU Finger verwendet eine Version von autoconf aus dem Jahr 1992. Entsprechend ist das configure-script nicht mehr uptodate. Folglich scheitert die Compilation unter Linux, NetBSD und sogar Solaris. Hier einige Tips dazu:

Bugs and Fixes

fingerd-Crash

GNU Finger ist mehr oder weniger komplett buggy... Ohne Bugfix wird sich der fingerd auf dem Server alle 5 Minuten verabschieden. Schuld daran ist eine komplett falsche Memory-Freigabeschleife. Hier der Bugfix:

--- lib/packet.c.orig   Wed Oct 21 23:04:38 1992
+++ lib/packet.c    Wed Mar  3 15:25:45 1999
@@ -314,8 +314,15 @@
 
          end = i;
 
-         for (i = start; i < end; i++)
+         /* IMHO This is completely broken...
+            1. free doesn't set list[i] to NULL
+            2. the second loop should be a while-loop...
+            */
+
+         for (i = start; i < end; i++) {
            free (list[i]);
+           list[i] = (FINGER_PACKET *)NULL; /* added by mgb */
+         }
 
          for (i = 0; list[end + i]; i++)
            list[start + i] = list[end + i];

Sicherheitsloch

Um Skripte in $HOME/.fingerrc auszuführen wechselt GNU Finger seine User- und seine GroupID auf diejenige des Users. Allerdings in der falschen Reihenfolge. Zudem wird der Erfolg nicht abgefragt, was kaum als besonders glücklich zu bezeichnen ist. Hier der Patch:

--- lib/site/userinfo.c.orig       Tue Oct 27 04:07:44 1992
+++ lib/site/userinfo.c    Thu Mar  4 13:32:58 1999
@@ -248,8 +248,14 @@
            }
 
          /* Set uid/gid */
-         setuid (user->pw_uid);
-         setgid (user->pw_gid);
+         if (setgid (user->pw_gid)<0) {
+           printf ("setgid failed: %i\n",errno);
+           exit(-1);
+         }
+         if (setuid (user->pw_uid)<0) {
+           printf ("setuid failed: %i\n",errno);
+           exit(-1);
+         }
 
          /* Set default directory */
          chdir (user->pw_dir);

Ressourcen

GNU Finger kann direkt von GNU besorgt werden. Ebenfalls befindet sich dort ein Online-Manual (bessere FAQ).


Erweiterung von ICSI

Da offenbar an GNU Finger nicht mehr weitergearbeitet wurde von Andreas Stolcke vom ICSI der University of Berkeley eine neue Version herausgebracht, welche einige Probleme von GNU Finger behebt.

ICSI Finger wurde das letzte Mal am 4. 4. 1998 geupdatet, allerdings wurde dabei offenbar nur ein einzelner Fehler behoben. Das zweitletzte Update stammt vom 18. 7. 1996. Auch hier scheint keine rasante Entwickling mehr stattzufinden.

Problematisch ist meiner Meinung nach, dass nicht mehr autoconf verwendet wird, sondern die Konfiguration pmake (Parallel Make) überlassen wird. Das das auf Dauer nicht gutgeht hat ja schon imake gezeigt. Kommt hinzu, dass pmake nicht gerade weit verbreitet ist, es also zunächst ebenfalls übersetzt werden muss.

Ressourcen

Die Sourcen von ICSI Finger und pmake sind unter ftp://ftp.icsi.berkeley.edu/pub/ai/stolcke/software/ erhältlich.


GNU Finger 1.5.0

Nachdem offenbar sich niemand mehr um die Sourcen von GNU Finger kümmert, habe ich versucht die ICSI-Sourcen so zu überarbeiten, dass sie sich mit dem aktuellen autoconf/automake vertragen. Was auch bedeutet, dass die Installation um einiges einfacher wird.

Ich habe diese Version GNU Finger 1.5.0 genannt. Sie kompiliert zumindest unter Linux und Solaris und befindet sich unter ftp://ftp.xelia.ch/pub/linux/gnufinger/gnufinger-1.5.0.tar.gz.


Letzte Aenderung: 22. Juni 2001
Michael Baumer (baumi@vis.ethz.ch) Valid HTML 4.0!