summaryrefslogtreecommitdiffstats
path: root/hunt/huntd/faketalk.c
diff options
context:
space:
mode:
Diffstat (limited to 'hunt/huntd/faketalk.c')
-rw-r--r--hunt/huntd/faketalk.c199
1 files changed, 2 insertions, 197 deletions
diff --git a/hunt/huntd/faketalk.c b/hunt/huntd/faketalk.c
index a5935cd9..2aef727b 100644
--- a/hunt/huntd/faketalk.c
+++ b/hunt/huntd/faketalk.c
@@ -1,4 +1,4 @@
-/* $NetBSD: faketalk.c,v 1.23 2014/03/29 20:16:09 dholland Exp $ */
+/* $NetBSD: faketalk.c,v 1.24 2014/03/29 20:32:04 dholland Exp $ */
/*
* Copyright (c) 1983-2003, Regents of the University of California.
* All rights reserved.
@@ -32,209 +32,14 @@
#include <sys/cdefs.h>
#ifndef lint
-__RCSID("$NetBSD: faketalk.c,v 1.23 2014/03/29 20:16:09 dholland Exp $");
+__RCSID("$NetBSD: faketalk.c,v 1.24 2014/03/29 20:32:04 dholland Exp $");
#endif /* not lint */
#include "hunt.h"
-#if defined(TALK_43) || defined(TALK_42)
-
-#include <sys/time.h>
-#include <sys/wait.h>
-#include <ctype.h>
-#include <netdb.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include "talk_ctl.h"
-
-/* defines for fake talk message to announce start of game */
-#ifdef TALK_43
-#define MASQUERADE "\"Hunt Game\""
-#else
-#define MASQUERADE "HuntGame"
-#endif
-#define RENDEZVOUS "hunt-players"
-#define ARGV0 "HUNT-ANNOUNCE"
-
-extern char *my_machine_name;
-
-static void do_announce(char *);
-void exorcise(int);
-
-/*
- * exorcise - disspell zombies
- */
-
-void
-exorcise(int dummy __unused)
-{
- (void) wait(0);
-}
-
-/*
- * query the local SMTP daemon to expand the RENDEZVOUS mailing list
- * and fake a talk request to each address thus found.
- */
-
-void
-faketalk(void)
-{
- struct servent *sp;
- char buf[BUFSIZ];
- FILE *f;
- int service; /* socket of service */
- struct sockaddr_in des; /* address of destination */
-
- (void) signal(SIGCHLD, exorcise);
-
- if (fork() != 0)
- return;
-
- (void) signal(SIGINT, SIG_IGN);
- (void) signal(SIGPIPE, SIG_IGN);
-
- /*
- * change argv so that a ps shows ARGV0
- */
- setproctitle("%s", ARGV0);
-
- /*
- * initialize "talk"
- */
- get_local_name(MASQUERADE);
- open_ctl();
-
- /*
- * start fetching addresses
- */
-
- if ((sp = getservbyname("smtp", NULL)) == NULL) {
-#ifdef LOG
- syslog(LOG_ERR, "faketalk: smtp protocol not supported\n");
-#else
- warn("faketalk: smtp protocol not supported");
-#endif
- _exit(1);
- }
-
- memset(&des, 0, sizeof (des));
- des.sin_family = AF_INET;
- des.sin_addr = my_machine_addr;
- des.sin_port = sp->s_port;
-
- if ((service = socket(des.sin_family, SOCK_STREAM, 0)) < 0) {
-#ifdef LOG
- syslog(LOG_ERR, "falktalk: socket");
-#else
- warn("falktalk: socket");
-#endif
- _exit(1);
- }
-
- if (connect(service, (struct sockaddr *) &des, sizeof(des)) != 0) {
-#ifdef LOG
- syslog(LOG_ERR, "faketalk: connect");
-#else
- warn("faketalk: connect");
-#endif
- _exit(1);
- }
- if ((f = fdopen(service, "r")) == NULL) {
-#ifdef LOG
- syslog(LOG_ERR, "fdopen failed\n");
-#else
- warn("faketalk: fdopen");
-#endif
- _exit(2);
- }
-
- (void) fgets(buf, BUFSIZ, f);
- (void) snprintf(buf, sizeof(buf),
- "HELO HuntGame@%s\r\n", my_machine_name);
- (void) write(service, buf, strlen(buf));
- (void) fgets(buf, BUFSIZ, f);
- (void) snprintf(buf, sizeof(buf),
- "EXPN %s@%s\r\n", RENDEZVOUS, my_machine_name);
- (void) write(service, buf, strlen(buf));
- while (fgets(buf, BUFSIZ, f) != NULL) {
- char *s, *t;
-
- if (buf[0] != '2' || buf[1] != '5' || buf[2] != '0')
- break;
- if ((s = strchr(buf + 4, '<')) == NULL)
- s = buf + 4, t = buf + strlen(buf) - 1;
- else {
- s += 1;
- if ((t = strrchr(s, '>')) == NULL)
- t = s + strlen(s) - 1;
- else
- t -= 1;
- }
- while (isspace((unsigned char)*s))
- s += 1;
- if (*s == '\\')
- s += 1;
- while (isspace((unsigned char)*t))
- t -= 1;
- *(t + 1) = '\0';
- do_announce(s); /* construct and send talk request */
- if (buf[3] == ' ')
- break;
- }
- (void) shutdown(service, 2);
- (void) close(service);
- _exit(0);
-}
-
-/*
- * The msg.id's for the invitations on the local and remote machines.
- * These are used to delete the invitations.
- */
-
-static void
-do_announce(char *s)
-{
- CTL_RESPONSE response;
-
- get_remote_name(s); /* setup his_machine_addr, msg.r_name */
-
-#ifdef TALK_43
- /* XXX this is nothing like a safe cast */
- msg.ctl_addr = *(struct talkd_sockaddr *) &ctl_addr;
- msg.ctl_addr.sa_family = htons(msg.ctl_addr.sa_family);
-#else
- msg.ctl_addr = ctl_addr;
- msg.ctl_addr.sin_family = htons(msg.ctl_addr.sin_family);
-#endif
- msg.id_num = (int) htonl((uint32_t) -1); /* an impossible id_num */
- ctl_transact(his_machine_addr, msg, ANNOUNCE, &response);
- if (response.answer != SUCCESS)
- return;
-
- /*
- * Have the daemons delete the invitations now that we
- * have announced.
- */
-
- /* we don't care if cleanup doesn't make it. */
- msg.type = DELETE;
- msg.id_num = (int) htonl(response.id_num);
- daemon_addr.sin_addr = his_machine_addr;
- if (sendto(ctl_sockt, &msg, sizeof (msg), 0,
- (struct sockaddr *) &daemon_addr, sizeof(daemon_addr))
- != sizeof(msg))
- p_error("send delete remote");
-}
-
-#else
-
void
faketalk(void)
{
return;
}
-#endif