diff options
Diffstat (limited to 'usr.bin/talk/io.c')
-rw-r--r-- | usr.bin/talk/io.c | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/usr.bin/talk/io.c b/usr.bin/talk/io.c index 4a6fd9e27f89..782314fbe2e1 100644 --- a/usr.bin/talk/io.c +++ b/usr.bin/talk/io.c @@ -46,10 +46,13 @@ static const char rcsid[] = */ #include <errno.h> +#include <netdb.h> +#include <stdlib.h> #include <string.h> #include <sys/filio.h> #include <unistd.h> #include "talk.h" +#include "talk_ctl.h" #define A_LONG_TIME 10000000 @@ -59,12 +62,32 @@ static const char rcsid[] = void talk() { + struct hostent *hp, *hp2; int nb; fd_set read_set, read_template; - char buf[BUFSIZ]; + char buf[BUFSIZ], **addr, *his_machine_name; struct timeval wait; - message("Connection established"); + his_machine_name = NULL; + hp = gethostbyaddr((const char *)&his_machine_addr.s_addr, + sizeof(his_machine_addr.s_addr), AF_INET); + if (hp != NULL) { + hp2 = gethostbyname(hp->h_name); + if (hp2 != NULL && hp2->h_addrtype == AF_INET && + hp2->h_length == sizeof(his_machine_addr)) + for (addr = hp2->h_addr_list; *addr != NULL; addr++) + if (memcmp(*addr, &his_machine_addr, + sizeof(his_machine_addr)) == 0) { + his_machine_name = strdup(hp->h_name); + break; + } + } + if (his_machine_name == NULL) + his_machine_name = strdup(inet_ntoa(his_machine_addr)); + snprintf(buf, sizeof(buf), "Connection established with %s@%s.", + msg.r_name, his_machine_name); + free(his_machine_name); + message(buf); write(STDOUT_FILENO, "\007\007\007", 3); current_line = 0; |