summaryrefslogtreecommitdiffstats
path: root/libexec
diff options
context:
space:
mode:
authorbrian <brian@FreeBSD.org>1999-04-06 23:06:00 +0000
committerbrian <brian@FreeBSD.org>1999-04-06 23:06:00 +0000
commita77173a7cd162a0aa47a96361a70cd43d178b4f6 (patch)
tree745fbd61bf8b21361a25b2cd0184e45153a0211c /libexec
parentcf0ba219f719b19bf1fc5862d698b2713d849705 (diff)
downloadFreeBSD-src-a77173a7cd162a0aa47a96361a70cd43d178b4f6.zip
FreeBSD-src-a77173a7cd162a0aa47a96361a70cd43d178b4f6.tar.gz
Use realhostname() rather than various combinations of
gethostbyaddr() & gethostbyname(). Remove brokeness in ftpd for hosts of MAXHOSTNAMELEN length.
Diffstat (limited to 'libexec')
-rw-r--r--libexec/fingerd/fingerd.c14
-rw-r--r--libexec/ftpd/ftpd.c12
-rw-r--r--libexec/rexecd/rexecd.c10
-rw-r--r--libexec/rlogind/rlogind.c29
-rw-r--r--libexec/rshd/rshd.c56
-rw-r--r--libexec/telnetd/telnetd.c47
-rw-r--r--libexec/tftpd/Makefile4
-rw-r--r--libexec/tftpd/tftpd.c25
-rw-r--r--libexec/uucpd/uucpd.c24
9 files changed, 51 insertions, 170 deletions
diff --git a/libexec/fingerd/fingerd.c b/libexec/fingerd/fingerd.c
index 5626a21..088077c 100644
--- a/libexec/fingerd/fingerd.c
+++ b/libexec/fingerd/fingerd.c
@@ -42,10 +42,10 @@ static const char copyright[] =
static char sccsid[] = "@(#)fingerd.c 8.1 (Berkeley) 6/4/93";
#endif
static const char rcsid[] =
- "$Id: fingerd.c,v 1.10 1997/11/20 07:26:04 charnier Exp $";
+ "$Id: fingerd.c,v 1.11 1998/05/15 03:23:28 jb Exp $";
#endif /* not lint */
-#include <sys/types.h>
+#include <sys/param.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/tcp.h>
@@ -70,11 +70,11 @@ main(argc, argv)
register FILE *fp;
register int ch;
register char *lp;
- struct hostent *hp;
struct sockaddr_in sin;
int p[2], logging, secure, sval;
#define ENTRIES 50
char **ap, *av[ENTRIES + 1], **comp, line[1024], *prog;
+ char rhost[MAXHOSTNAMELEN + 1];
prog = _PATH_FINGER;
logging = secure = 0;
@@ -130,12 +130,8 @@ main(argc, argv)
sval = sizeof(sin);
if (getpeername(0, (struct sockaddr *)&sin, &sval) < 0)
logerr("getpeername: %s", strerror(errno));
- if (hp = gethostbyaddr((char *)&sin.sin_addr.s_addr,
- sizeof(sin.sin_addr.s_addr), AF_INET))
- lp = hp->h_name;
- else
- lp = inet_ntoa(sin.sin_addr);
- syslog(LOG_NOTICE, "query from %s: `%s'", lp, t);
+ realhostname(rhost, sizeof rhost - 1, &sin.sin_addr);
+ syslog(LOG_NOTICE, "query from %s: `%s'", rhost, t);
}
comp = &av[1];
diff --git a/libexec/ftpd/ftpd.c b/libexec/ftpd/ftpd.c
index e844fe9..3012fab 100644
--- a/libexec/ftpd/ftpd.c
+++ b/libexec/ftpd/ftpd.c
@@ -44,7 +44,7 @@ static char copyright[] =
static char sccsid[] = "@(#)ftpd.c 8.4 (Berkeley) 4/16/94";
#endif
static const char rcsid[] =
- "$Id: ftpd.c,v 1.51 1998/06/03 11:33:44 jb Exp $";
+ "$Id: ftpd.c,v 1.52 1998/10/13 20:42:01 des Exp $";
#endif /* not lint */
/*
@@ -166,7 +166,7 @@ static struct ftphost {
} *thishost, *firsthost;
#endif
-char remotehost[MAXHOSTNAMELEN];
+char remotehost[MAXHOSTNAMELEN + 1];
char *ident = NULL;
static char ttyline[20];
@@ -1896,14 +1896,8 @@ static void
dolog(sin)
struct sockaddr_in *sin;
{
- struct hostent *hp = gethostbyaddr((char *)&sin->sin_addr,
- sizeof(struct in_addr), AF_INET);
+ realhostname(remotehost, sizeof remotehost - 1, &sin->sin_addr);
- if (hp)
- (void) strncpy(remotehost, hp->h_name, sizeof(remotehost));
- else
- (void) strncpy(remotehost, inet_ntoa(sin->sin_addr),
- sizeof(remotehost));
#ifdef SETPROCTITLE
#ifdef VIRTUAL_HOSTING
if (thishost != firsthost)
diff --git a/libexec/rexecd/rexecd.c b/libexec/rexecd/rexecd.c
index ac7dca9..740368f 100644
--- a/libexec/rexecd/rexecd.c
+++ b/libexec/rexecd/rexecd.c
@@ -42,7 +42,7 @@ static const char copyright[] =
static char sccsid[] = "@(#)rexecd.c 8.1 (Berkeley) 6/4/93";
#endif
static const char rcsid[] =
- "$Id$";
+ "$Id: rexecd.c,v 1.15 1997/11/26 07:29:04 charnier Exp $";
#endif /* not lint */
#include <sys/param.h>
@@ -55,6 +55,7 @@ static const char rcsid[] =
#include <err.h>
#include <netdb.h>
+#include <libutil.h>
#include <paths.h>
#include <pwd.h>
#include <signal.h>
@@ -72,7 +73,7 @@ char path[sizeof(_PATH_DEFPATH) + sizeof("PATH=")] = "PATH=";
char *envinit[] =
{homedir, shell, path, username, 0};
char **environ;
-char *remote;
+char remote[MAXHOSTNAMELEN + 1];
struct sockaddr_in asin = { AF_INET };
@@ -103,10 +104,7 @@ main(argc, argv)
if (getpeername(0, (struct sockaddr *)&from, &fromlen) < 0)
err(1, "getpeername");
- hp = gethostbyaddr((char *) &from.sin_addr, sizeof(from.sin_addr),
- from.sin_family);
- remote = inet_ntoa(from.sin_addr);
- remote = (hp != NULL) ? hp->h_name : inet_ntoa(from.sin_addr);
+ realhostname(remote, sizeof remote - 1, &from.sin_addr);
doit(0, &from);
return(0);
diff --git a/libexec/rlogind/rlogind.c b/libexec/rlogind/rlogind.c
index 64cf70f..a7cdba5 100644
--- a/libexec/rlogind/rlogind.c
+++ b/libexec/rlogind/rlogind.c
@@ -42,7 +42,7 @@ static const char copyright[] =
static const char sccsid[] = "@(#)rlogind.c 8.1 (Berkeley) 6/4/93";
#endif
static const char rcsid[] =
- "$Id: rlogind.c,v 1.19 1997/11/25 07:17:15 charnier Exp $";
+ "$Id: rlogind.c,v 1.20 1998/12/16 07:20:44 peter Exp $";
#endif /* not lint */
/*
@@ -211,7 +211,6 @@ doit(f, fromp)
{
int master, pid, on = 1;
int authenticated = 0;
- register struct hostent *hp;
char hostname[2 * MAXHOSTNAMELEN + 1];
char c;
@@ -227,31 +226,7 @@ doit(f, fromp)
alarm(0);
fromp->sin_port = ntohs((u_short)fromp->sin_port);
- hp = gethostbyaddr((char *)&fromp->sin_addr, sizeof(struct in_addr),
- fromp->sin_family);
- if (hp) {
- strncpy(hostname, hp->h_name, sizeof(hostname) - 1);
- hostname[sizeof(hostname) - 1] = '\0';
- hp = gethostbyname(hostname);
- if (hp == NULL) {
- strncpy(hostname, inet_ntoa(fromp->sin_addr),
- sizeof(hostname) - 1);
- } else for (; ; hp->h_addr_list++) {
- if (hp->h_addr_list[0] == NULL) {
- /* End of list - ditch it */
- strncpy(hostname, inet_ntoa(fromp->sin_addr),
- sizeof(hostname) - 1);
- break;
- }
- if (!bcmp(hp->h_addr_list[0],
- (caddr_t)&fromp->sin_addr,
- sizeof(fromp->sin_addr)))
- break; /* OK! */
- }
- } else {
- strncpy(hostname, inet_ntoa(fromp->sin_addr),
- sizeof(hostname) - 1);
- }
+ realhostname(hostname, sizeof hostname - 1, &fromp->sin_addr);
hostname[sizeof(hostname) - 1] = '\0';
#ifdef KERBEROS
diff --git a/libexec/rshd/rshd.c b/libexec/rshd/rshd.c
index cd2f57c..5ed7437b 100644
--- a/libexec/rshd/rshd.c
+++ b/libexec/rshd/rshd.c
@@ -42,7 +42,7 @@ static const char copyright[] =
static const char sccsid[] = "@(#)rshd.c 8.2 (Berkeley) 4/6/94";
#endif
static const char rcsid[] =
- "$Id: rshd.c,v 1.22 1998/12/01 23:27:24 dg Exp $";
+ "$Id: rshd.c,v 1.23 1998/12/16 07:20:45 peter Exp $";
#endif /* not lint */
/*
@@ -67,6 +67,7 @@ static const char rcsid[] =
#include <errno.h>
#include <fcntl.h>
+#include <libutil.h>
#include <paths.h>
#include <pwd.h>
#include <signal.h>
@@ -207,13 +208,12 @@ doit(fromp)
struct sockaddr_in *fromp;
{
extern char *__rcmd_errstr; /* syslog hook from libc/net/rcmd.c. */
- struct hostent *hp;
struct passwd *pwd;
u_short port;
fd_set ready, readfrom;
int cc, nfd, pv[2], pid, s;
int one = 1;
- char *hostname, *errorstr;
+ char *errorstr;
char *cp, sig, buf[BUFSIZ];
char cmdbuf[NCARGS+1], locuser[16], remuser[16];
char fromhost[2 * MAXHOSTNAMELEN + 1];
@@ -350,36 +350,8 @@ doit(fromp)
errorstr = NULL;
strncpy(fromhost, inet_ntoa(fromp->sin_addr),
sizeof(fromhost) - 1);
- hostname = fromhost;
- hp = gethostbyaddr((char *)&fromp->sin_addr, sizeof (struct in_addr),
- fromp->sin_family);
- if (hp) {
- /*
- * OK, it looks like a DNS name is attached.. Lets see if
- * it looks like we can use it. If it doesn't check out,
- * ditch it and use the IP address for logging instead.
- * Note that iruserok() does it's own hostname checking!!
- */
- strncpy(fromhost, hp->h_name, sizeof(fromhost) - 1);
- fromhost[sizeof(fromhost) - 1] = 0;
- hp = gethostbyname(fromhost);
- if (hp == NULL) {
- strncpy(fromhost, inet_ntoa(fromp->sin_addr),
- sizeof(fromhost) - 1);
- } else for (; ; hp->h_addr_list++) {
- if (hp->h_addr_list[0] == NULL) {
- /* End of list - ditch it */
- strncpy(fromhost, inet_ntoa(fromp->sin_addr),
- sizeof(fromhost) - 1);
- break;
- }
- if (!bcmp(hp->h_addr_list[0],
- (caddr_t)&fromp->sin_addr,
- sizeof(fromp->sin_addr)))
- break; /* OK! */
- }
- }
- fromhost[sizeof(fromhost) - 1] = 0;
+ realhostname(fromhost, sizeof fromhost - 1, &fromp->sin_addr);
+ fromhost[sizeof(fromhost) - 1] = '\0';
#ifdef KERBEROS
if (use_kerberos) {
@@ -426,7 +398,7 @@ doit(fromp)
if (pwd == NULL) {
syslog(LOG_INFO|LOG_AUTH,
"%s@%s as %s: unknown login. cmd='%.80s'",
- remuser, hostname, locuser, cmdbuf);
+ remuser, fromhost, locuser, cmdbuf);
if (errorstr == NULL)
errorstr = "Login incorrect.\n";
goto fail;
@@ -440,7 +412,7 @@ doit(fromp)
login_getcapbool(lc, "requirehome", !!pwd->pw_uid)) {
syslog(LOG_INFO|LOG_AUTH,
"%s@%s as %s: no home directory. cmd='%.80s'",
- remuser, hostname, locuser, cmdbuf);
+ remuser, fromhost, locuser, cmdbuf);
error("No remote home directory.\n");
exit(0);
}
@@ -449,7 +421,7 @@ doit(fromp)
#ifdef notdef
syslog(LOG_INFO|LOG_AUTH,
"%s@%s as %s: no home directory. cmd='%.80s'",
- remuser, hostname, locuser, cmdbuf);
+ remuser, fromhost, locuser, cmdbuf);
error("No remote directory.\n");
exit(1);
#endif
@@ -479,16 +451,16 @@ doit(fromp)
if (__rcmd_errstr)
syslog(LOG_INFO|LOG_AUTH,
"%s@%s as %s: permission denied (%s). cmd='%.80s'",
- remuser, hostname, locuser, __rcmd_errstr,
+ remuser, fromhost, locuser, __rcmd_errstr,
cmdbuf);
else
syslog(LOG_INFO|LOG_AUTH,
"%s@%s as %s: permission denied. cmd='%.80s'",
- remuser, hostname, locuser, cmdbuf);
+ remuser, fromhost, locuser, cmdbuf);
fail:
if (errorstr == NULL)
errorstr = "Login incorrect.\n";
- error(errorstr, hostname);
+ error(errorstr, fromhost);
exit(1);
}
@@ -506,7 +478,7 @@ fail:
if (!auth_hostok(lc, fromhost, remote_ip)) {
syslog(LOG_INFO|LOG_AUTH,
"%s@%s as %s: permission denied (%s). cmd='%.80s'",
- remuser, hostname, locuser, __rcmd_errstr,
+ remuser, fromhost, locuser, __rcmd_errstr,
cmdbuf);
error("Login incorrect.\n");
exit(1);
@@ -729,11 +701,11 @@ fail:
syslog(LOG_INFO|LOG_AUTH,
"Kerberos shell from %s.%s@%s on %s as %s, cmd='%.80s'",
kdata->pname, kdata->pinst, kdata->prealm,
- hostname, locuser, cmdbuf);
+ fromhost, locuser, cmdbuf);
else
#endif
syslog(LOG_INFO|LOG_AUTH, "%s@%s as %s: cmd='%.80s'",
- remuser, hostname, locuser, cmdbuf);
+ remuser, fromhost, locuser, cmdbuf);
}
execl(pwd->pw_shell, cp, "-c", cmdbuf, 0);
perror(pwd->pw_shell);
diff --git a/libexec/telnetd/telnetd.c b/libexec/telnetd/telnetd.c
index c825eab..8baaaf4 100644
--- a/libexec/telnetd/telnetd.c
+++ b/libexec/telnetd/telnetd.c
@@ -42,7 +42,7 @@ static const char copyright[] =
static char sccsid[] = "@(#)telnetd.c 8.2 (Berkeley) 12/15/93";
#endif
static const char rcsid[] =
- "$Id: telnetd.c,v 1.15 1998/12/16 06:04:29 peter Exp $";
+ "$Id: telnetd.c,v 1.16 1999/04/06 00:29:41 brian Exp $";
#endif /* not lint */
#include "telnetd.h"
@@ -61,6 +61,8 @@ static const char rcsid[] =
#include <arpa/inet.h>
#include <sys/mman.h>
+#include <libutil.h>
+#include <utmp.h>
#if defined(_SC_CRAY_SECURE_SYS)
#include <sys/sysv.h>
@@ -756,7 +758,7 @@ terminaltypeok(s)
char *hostname;
char host_name[MAXHOSTNAMELEN];
-char remote_host_name[MAXHOSTNAMELEN];
+char remote_hostname[UT_HOSTSIZE + 1];
extern void telnet P((int, int, char *));
@@ -769,8 +771,6 @@ char user_name[256];
doit(who)
struct sockaddr_in *who;
{
- char *host = NULL;
- struct hostent *hp;
int ptynum;
/*
@@ -813,47 +813,16 @@ doit(who)
#endif /* _SC_CRAY_SECURE_SYS */
/* get name of connected client */
- hp = gethostbyaddr((char *)&who->sin_addr, sizeof (struct in_addr),
- who->sin_family);
-
- if (hp == NULL && registerd_host_only) {
+ if (realhostname(remote_hostname, sizeof remote_hostname - 1,
+ &who->sin_addr) == HOSTNAME_INVALIDADDR && registerd_host_only)
fatal(net, "Couldn't resolve your address into a host name.\r\n\
Please contact your net administrator");
- } else if (hp &&
- (strlen(hp->h_name) <= ((utmp_len < 0) ? -utmp_len : utmp_len))) {
- strncpy(remote_host_name, hp->h_name,
- sizeof(remote_host_name)-1);
- hp = gethostbyname(remote_host_name);
- if (hp == NULL)
- host = inet_ntoa(who->sin_addr);
- else for (; ; hp->h_addr_list++) {
- if (hp->h_addr_list[0] == NULL) {
- /* End of list - ditch it */
- host = inet_ntoa(who->sin_addr);
- break;
- }
- if (!bcmp(hp->h_addr_list[0], (caddr_t)&who->sin_addr,
- sizeof(who->sin_addr))) {
- host = hp->h_name;
- break; /* OK! */
- }
- }
- } else {
- host = inet_ntoa(who->sin_addr);
- }
- /*
- * We must make a copy because Kerberos is probably going
- * to also do a gethost* and overwrite the static data...
- */
- strncpy(remote_host_name, host, sizeof(remote_host_name)-1);
- remote_host_name[sizeof(remote_host_name)-1] = 0;
- host = remote_host_name;
(void) gethostname(host_name, sizeof (host_name));
hostname = host_name;
#if defined(AUTHENTICATION)
- auth_encrypt_init(hostname, host, "TELNETD", 1);
+ auth_encrypt_init(hostname, remote_hostname, "TELNETD", 1);
#endif
init_env();
@@ -873,7 +842,7 @@ doit(who)
}
#endif /* _SC_CRAY_SECURE_SYS */
- telnet(net, pty, host); /* begin server process */
+ telnet(net, pty, remote_hostname); /* begin server process */
/*NOTREACHED*/
} /* end of doit */
diff --git a/libexec/tftpd/Makefile b/libexec/tftpd/Makefile
index b7c600c..301a0d7 100644
--- a/libexec/tftpd/Makefile
+++ b/libexec/tftpd/Makefile
@@ -1,8 +1,10 @@
# @(#)Makefile 8.1 (Berkeley) 6/4/93
-# $Id$
+# $Id: Makefile,v 1.5 1997/02/22 14:22:35 peter Exp $
PROG= tftpd
SRCS= tftpd.c tftpsubs.c
+DPADD= ${LIBUTIL}
+LDADD= -lutil
MAN8= tftpd.8
CFLAGS+=-I${.CURDIR}/../../usr.bin/tftp
.PATH: ${.CURDIR}/../../usr.bin/tftp
diff --git a/libexec/tftpd/tftpd.c b/libexec/tftpd/tftpd.c
index d0499c9..f1f8a9a 100644
--- a/libexec/tftpd/tftpd.c
+++ b/libexec/tftpd/tftpd.c
@@ -42,7 +42,7 @@ static const char copyright[] =
static char sccsid[] = "@(#)tftpd.c 8.1 (Berkeley) 6/4/93";
#endif
static const char rcsid[] =
- "$Id: tftpd.c,v 1.11 1998/04/12 11:15:54 phk Exp $";
+ "$Id: tftpd.c,v 1.12 1998/10/30 16:17:39 dg Exp $";
#endif /* not lint */
/*
@@ -65,6 +65,7 @@ static const char rcsid[] =
#include <ctype.h>
#include <errno.h>
#include <fcntl.h>
+#include <libutil.h>
#include <netdb.h>
#include <pwd.h>
#include <setjmp.h>
@@ -108,7 +109,6 @@ static int logging;
static char *errtomsg __P((int));
static void nak __P((int));
-static char *verifyhost __P((struct sockaddr_in *));
int
main(argc, argv)
@@ -325,8 +325,11 @@ again:
}
ecode = (*pf->f_validate)(&filename, tp->th_opcode);
if (logging) {
- syslog(LOG_INFO, "%s: %s request for %s: %s",
- verifyhost(&from),
+ char host[MAXHOSTNAMELEN + 1];
+
+ realhostname(host, sizeof host - 1, &from.sin_addr);
+ host[sizeof host - 1] = '\0';
+ syslog(LOG_INFO, "%s: %s request for %s: %s", host,
tp->th_opcode == WRQ ? "write" : "read",
filename, errtomsg(ecode));
}
@@ -670,17 +673,3 @@ nak(error)
if (send(peer, buf, length, 0) != length)
syslog(LOG_ERR, "nak: %m");
}
-
-static char *
-verifyhost(fromp)
- struct sockaddr_in *fromp;
-{
- struct hostent *hp;
-
- hp = gethostbyaddr((char *)&fromp->sin_addr, sizeof (fromp->sin_addr),
- fromp->sin_family);
- if (hp)
- return hp->h_name;
- else
- return inet_ntoa(fromp->sin_addr);
-}
diff --git a/libexec/uucpd/uucpd.c b/libexec/uucpd/uucpd.c
index 59a6932..e15c05b 100644
--- a/libexec/uucpd/uucpd.c
+++ b/libexec/uucpd/uucpd.c
@@ -45,7 +45,7 @@ static const char copyright[] =
static char sccsid[] = "@(#)uucpd.c 8.1 (Berkeley) 6/4/93";
#endif
static const char rcsid[] =
- "$Id: uucpd.c,v 1.15 1998/06/30 15:19:51 bde Exp $";
+ "$Id: uucpd.c,v 1.16 1999/03/30 10:23:35 joerg Exp $";
#endif /* not lint */
/*
@@ -121,16 +121,8 @@ void main(int argc, char **argv)
void badlogin(char *name, struct sockaddr_in *sin)
{
char remotehost[MAXHOSTNAMELEN];
- struct hostent *hp = gethostbyaddr((char *)&sin->sin_addr,
- sizeof (struct in_addr), AF_INET);
-
- if (hp) {
- strncpy(remotehost, hp->h_name, sizeof (remotehost));
- endhostent();
- } else
- strncpy(remotehost, inet_ntoa(sin->sin_addr),
- sizeof (remotehost));
+ realhostname(remotehost, sizeof remotehost - 1, &sin->sin_addr);
remotehost[sizeof remotehost - 1] = '\0';
syslog(LOG_NOTICE, "LOGIN FAILURE FROM %s", remotehost);
@@ -251,19 +243,13 @@ void dologout(void)
void dologin(struct passwd *pw, struct sockaddr_in *sin)
{
char line[32];
- char remotehost[MAXHOSTNAMELEN];
+ char remotehost[UT_HOSTSIZE + 1];
int f;
time_t cur_time;
- struct hostent *hp = gethostbyaddr((char *)&sin->sin_addr,
- sizeof (struct in_addr), AF_INET);
- if (hp) {
- strncpy(remotehost, hp->h_name, sizeof (remotehost));
- endhostent();
- } else
- strncpy(remotehost, inet_ntoa(sin->sin_addr),
- sizeof (remotehost));
+ realhostname(remotehost, sizeof remotehost - 1, &sin->sin_addr);
remotehost[sizeof remotehost - 1] = '\0';
+
/* hack, but must be unique and no tty line */
sprintf(line, "uucp%ld", (long)getpid());
time(&cur_time);
OpenPOWER on IntegriCloud