diff options
Diffstat (limited to 'hunt/huntd/get_names.c')
-rw-r--r-- | hunt/huntd/get_names.c | 174 |
1 files changed, 0 insertions, 174 deletions
diff --git a/hunt/huntd/get_names.c b/hunt/huntd/get_names.c deleted file mode 100644 index 6878c8b3..00000000 --- a/hunt/huntd/get_names.c +++ /dev/null @@ -1,174 +0,0 @@ -/* $NetBSD: get_names.c,v 1.16 2014/03/29 20:16:09 dholland Exp $ */ -/* - * Copyright (c) 1983-2003, Regents of the University of California. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * + Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * + Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * + Neither the name of the University of California, San Francisco nor - * the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior written - * permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS - * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A - * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include <sys/cdefs.h> -#ifndef lint -__RCSID("$NetBSD: get_names.c,v 1.16 2014/03/29 20:16:09 dholland Exp $"); -#endif /* not lint */ - -#if defined(TALK_43) || defined(TALK_42) - -#include <sys/param.h> -#include <netdb.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> -#include <assert.h> - -#include "hunt.h" -#include "talk_ctl.h" - -static char hostname[MAXHOSTNAMELEN + 1]; -char *my_machine_name; - -/* - * Determine the local user and machine - */ -void -get_local_name(const char *my_name) -{ - struct hostent *hp; - struct servent *sp; - - /* Load these useful values into the standard message header */ - msg.id_num = 0; - (void) strncpy(msg.l_name, my_name, NAME_SIZE); - msg.l_name[NAME_SIZE - 1] = '\0'; - msg.r_tty[0] = '\0'; - msg.pid = getpid(); -#ifdef TALK_43 - msg.vers = TALK_VERSION; - msg.addr.sa_family = htons(AF_INET); - msg.ctl_addr.sa_family = htons(AF_INET); -#else - msg.addr.sin_family = htons(AF_INET); - msg.ctl_addr.sin_family = htons(AF_INET); -#endif - - (void)gethostname(hostname, sizeof (hostname)); - hostname[sizeof(hostname) - 1] = '\0'; - my_machine_name = hostname; - /* look up the address of the local host */ - hp = gethostbyname(my_machine_name); - if (hp == (struct hostent *) 0) { -#ifdef LOG - syslog(LOG_ERR, - "This machine doesn't exist. Boy, am I confused!"); -#else - perror("This machine doesn't exist. Boy, am I confused!"); -#endif - exit(1); - } - memcpy(&my_machine_addr, hp->h_addr, hp->h_length); - /* find the daemon portal */ -#ifdef TALK_43 - sp = getservbyname("ntalk", "udp"); -#else - sp = getservbyname("talk", "udp"); -#endif - if (sp == 0) { -#ifdef LOG - syslog(LOG_ERR, "This machine doesn't support talk"); -#else - perror("This machine doesn't support talk"); -#endif - exit(1); - } - daemon_port = sp->s_port; -} - -/* - * Determine the remote user and machine - */ -int -get_remote_name(char *his_address) -{ - const char *his_name; - const char *his_machine_name; - char *ptr; - struct addrinfo ai0, *ai; - struct sockaddr_in *sin; - - /* check for, and strip out, the machine name of the target */ - for (ptr = his_address; *ptr != '\0' && *ptr != '@' && *ptr != ':' - && *ptr != '!' && *ptr != '.'; ptr++) - continue; - if (*ptr == '\0') { - /* this is a local to local talk */ - his_name = his_address; - his_machine_name = my_machine_name; - his_machine_addr = my_machine_addr; - } else { - if (*ptr == '@') { - /* user@host */ - his_name = his_address; - his_machine_name = ptr + 1; - } else { - /* host.user or host!user or host:user */ - his_name = ptr + 1; - his_machine_name = his_address; - } - *ptr = '\0'; - - /* - * Look up the address of the recipient's machine. - * Since this is used for sending udp talk packets, - * it has to be AF_INET. - */ - ai0.ai_flags = 0; - ai0.ai_family = AF_INET; - ai0.ai_socktype = SOCK_DGRAM; - ai0.ai_protocol = IPPROTO_UDP; - ai0.ai_addrlen = 0; - ai0.ai_addr = NULL; - ai0.ai_canonname = NULL; - ai0.ai_next = NULL; - if (getaddrinfo(his_machine_name, NULL, &ai0, &ai) != 0) { - return 0; - } - assert(ai->ai_family == AF_INET); - assert(ai->ai_socktype == SOCK_DGRAM); - assert(ai->ai_protocol == IPPROTO_UDP); - assert(ai->ai_addrlen == sizeof(his_machine_addr)); - assert(ai->ai_addr != NULL); - sin = (struct sockaddr_in *)ai->ai_addr; - his_machine_addr = sin->sin_addr; - freeaddrinfo(ai); - } - /* Load these useful values into the standard message header */ - (void) strncpy(msg.r_name, his_name, NAME_SIZE); - msg.r_name[NAME_SIZE - 1] = '\0'; - - return 1; -} -#endif |