From olaf@bigred.inka.de Fri Sep 20 19:36:42 MET DST 1996
Article: 2033 of de.comp.os.linux.networking
Newsgroups: de.comp.os.linux.networking
Path: knorke.saar.de!wg.saar.de!News.Saar.DE!news.coli.uni-sb.de!news.phil.uni-sb.de!news.rhein-neckar.de!rz.uni-karlsruhe.de!ka.sub.net!bigred.inka.de!not-for-mail
From: Olaf Titz <olaf@bigred.inka.de>
Subject: Re: talk will nicht!
Message-ID: <dxvg08.aak@bigred.inka.de>
Date: 17 Sep 1996 12:04:52 +0200
References: <323C8113.3B7D3884@mailserv.rz.fh-merseburg.de>
 <51j972$j5r@rabbit2.isst.fhg.de>
Organization: private Linux site, southern Germany
Lines: 61
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit

Holger Isenberg <isenberg@do.isst.fhg.de> wrote:
> Das gleiche Problem habe ich auch. Es liegt hier daran, dass fuer meinen
> Rechner zwei IP-Nummern eingetragen sind.
> Im lokalen Netz ist der Rechner ueber IP-Nr 10.X.X.X mit dem dummy device
> eingetragen.
> Im Internet wird vom Provider dynamisch eine IP-Nr zugewiesen.
> Talk ist in dieser Konfiguration NUR im lokalen Netz moeglich.
> Von aussen sehe ich nur den talk-request ankommen, kann aber nicht antworten.
> Warum?

Weil im talk-Request-Paket die eigene IP-Adresse eingetragen wird.
Wenn Du davon mehrere hast, wird die erste konfigurierte genommen.
Wenn die nicht erreichbar ist, kann der talkd der Gegenseite nicht
antworten - er nimmt die Adresse, die _im_ Paket steht, und nicht etwa
die, unter der das Paket abgeschickt wurde.

Ergo: talk funktioniert auf multi-homed Hosts nicht und der Grund ist
das (kranke) talk-Protokoll.

Abhilfe: ytalk verwenden, nachdem man es mit untenstehendem Patch
compiliert hat, und vor dem Aufruf von ytalk die Environment-Variable
HOSTNAME so setzen, daß sie sich im DNS zur erreichbaren Adresse
auflöst. (Die Adresse selber reicht auch.)

olaf

--- user.c.orig	Sun Nov 21 17:32:19 1993
+++ user.c	Fri Jun 14 13:39:24 1996
@@ -133,6 +133,7 @@
     int my_uid;
     char *my_name;
     char my_host[100];
+    char *c;
 
     user_list = NULL;
     connect_list = NULL;
@@ -159,10 +160,14 @@
 
     /* get my hostname */
 
-    if(gethostname(my_host, 100) < 0)
-    {
-	show_error("init_user: gethostname() failed");
-	bail(YTE_ERROR);
+    if((c = getenv("HOSTNAME")) == NULL) {
+	if(gethostname(my_host, 100) < 0)
+	{
+	    show_error("init_user: gethostname() failed");
+	    bail(YTE_ERROR);
+	}
+    } else {
+	strncpy(my_host, c, 100);
     }
 
     /* get my user record */

-- 
___        Olaf.Titz@inka.de or @{stud,informatik}.uni-karlsruhe.de       ____
__ o           <URL:http://www.inka.de/~bigred/>     <IRC:praetorius>
__/<_              >> Just as long as the wheels keep on turning round
_)>(_)______________ I will live for the groove 'til the sun goes down << ____


