/* File: smtp/ip-lib.c Version 1.0 Copyright (C) 1999 by Wolfgang Zekoll This source is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 1, or (at your option) any later version. This source is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include #include #include #include #include #include #include #include #include #include #include #include "lib.h" #include "ip-lib.h" static void alarm_handler() { return; } int openip(char *host, unsigned int port) { int socketd; struct sockaddr_in server; struct hostent *hostp, *gethostbyname(); socketd = socket(AF_INET, SOCK_STREAM, 0); if (socketd < 0) return (-1); server.sin_family = AF_INET; hostp = gethostbyname(host); if (hostp == NULL) return (-1); memcpy(&server.sin_addr, hostp->h_addr, hostp->h_length); server.sin_port = htons(port); signal(SIGALRM, alarm_handler); alarm(10); if (connect(socketd, (struct sockaddr *) &server, sizeof(server)) < 0) return (-1); alarm(0); signal(SIGALRM, SIG_DFL); return (socketd); } unsigned int get_port(char *server, unsigned int def_port) { unsigned int port; char *p; if ((p = strchr(server, ':')) == NULL) return (def_port); *p++ = 0; port = atol(p); return (port); } int get_client_info(int pfd, char *ipnum, char *name) { int size; struct sockaddr_in saddr; struct in_addr *addr; struct hostent *hostp = NULL; *ipnum = 0; *name = 0; size = sizeof(saddr); if (getpeername(pfd, (struct sockaddr *) &saddr, &size) < 0 ) { if (isatty(pfd) == 0) { strcpy(ipnum, "127.0.0.2"); strcpy(name, "local.host"); } strcpy(ipnum, "127.0.0.1"); strcpy(name, "local.host"); return (0); } copy_string(ipnum, (char *) inet_ntoa(saddr.sin_addr), 80); addr = &saddr.sin_addr, hostp = gethostbyaddr((char *) addr, sizeof (saddr.sin_addr.s_addr), AF_INET); if (hostp == NULL) copy_string(name, ipnum, 200); else { copy_string(name, hostp->h_name, 200); strlwr(name); } return (0); }