1
0
mirror of https://git.FreeBSD.org/ports.git synced 2024-11-23 00:43:28 +00:00

As previously announced, remove ports/picobsd/ssh-picobsd due to long-

standing build problems.  Since it was the last port in the picobsd
category, remove it, too.

Discussed with:		kris
This commit is contained in:
Mark Linimon 2004-11-28 21:53:08 +00:00
parent 1bd7189e17
commit e074ac5451
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=122703
39 changed files with 0 additions and 4823 deletions

View File

@ -40,7 +40,6 @@ SUBDIR += net
SUBDIR += net-mgmt
SUBDIR += news
SUBDIR += palm
SUBDIR += picobsd
SUBDIR += polish
SUBDIR += portuguese
SUBDIR += print

View File

@ -1,8 +0,0 @@
# $FreeBSD$
#
COMMENT = PicoBSD-related ports
SUBDIR += ssh-picobsd
.include <bsd.port.subdir.mk>

View File

@ -1,76 +0,0 @@
# New ports collection makefile for: ssh-picobsd
# Date created: 21 Apr 2001
# Whom: luigi@FreeBSD.org
#
# $FreeBSD$
#
# A small version of ssh for picobsd. A single binary does ssh,sshd and scp
#
PORTNAME= ssh
PORTVERSION= 1.2.27 # Note, 1.2.30 is under a more restrictive license
PORTREVISION= 1
CATEGORIES= picobsd security
MASTER_SITES= \
ftp://ftp.ssh.com/pub/ssh/old/ \
ftp://ftp.cronyx.ru/mirror/ssh/old/ \
ftp://ftp.dei.uc.pt/pub/Crypto/SSH/old/ \
ftp://ftp.nsysu.edu.tw/Unix/Security/ssh/old/
MAINTAINER= luigi@FreeBSD.org
COMMENT= Secure shell client, server and remote copy (for picobsd)
NO_CDROM= "Picobsd only"
NO_PACKAGE= "This is only useful to build picobsd images"
BROKEN= "Install fails"
EXPIRATION_DATE=2004-08-20
DEPRECATED= ${BROKEN}
USE_AUTOCONF_VER= 213
GNU_CONFIGURE= YES
USE_PERL5= YES
CONFIGURE_ENV+= PERL=${PERL5}
CONFIGURE_ARGS+= --with-etcdir=${PREFIX}/etc
# Uncomment if all your users are in their own group and their homedir
# is writeable by that group. Beware the security implications!
#
#CONFIGURE_ARGS+= --enable-group-writeability
# Uncomment if you want to allow ssh to emulate an unencrypted rsh connection
# over a secure medium (i.e. allow SSH connections without encryption).
# This is normally dangerous since it can lead to the disclosure of keys
# and passwords.
#
#CONFIGURE_ARGS+= --with-none
.if defined(KRB5_HOME) && exists(${KRB5_HOME})
CONFIGURE_ARGS+= --with-kerberos5=${KRB5_HOME} --enable-kerberos-tgt-passing \
--disable-suid-ssh
.endif
# Include support for the SecureID card
# Warning: untested !
#
.if defined(WITH_SECUREID)
CONFIGURE_ARGS+= --with-secureid
.endif
# Don't use IDEA. IDEA can be freely used for non-commercial use. However,
# commercial use may require a licence in a number of countries. Since SSH
# itself may not be used for commercial purposes without a license, we
# enable IDEA by default since the user would already be getting himself
# into trouble.
pre-patch:
@${MV} -f ${WRKSRC}/make-ssh-known-hosts.pl \
${WRKSRC}/make-ssh-known-hosts.pl.in
.include <bsd.port.pre.mk>
# no IDEA, tcpwrap, IPV6, SOCKS, x11 for picobsd
CONFIGURE_ARGS+= --disable-ipv6 --without-x --without-idea
.include <bsd.port.post.mk>

View File

@ -1,2 +0,0 @@
MD5 (ssh-1.2.27.tar.gz) = c22bc000bee0f7d6f4845eab72a81395
SIZE (ssh-1.2.27.tar.gz) = 1022546

View File

@ -1,19 +0,0 @@
*** make-ssh-known-hosts.pl.in.orig Wed May 12 20:18:51 1999
--- make-ssh-known-hosts.pl.in Sun Jun 6 02:30:08 1999
***************
*** 98,104 ****
$debug = 5;
$defserver = '';
$bell='\a';
! $public_key = '/etc/ssh_host_key.pub';
$private_ssh_known_hosts = "/tmp/ssh_known_hosts$$";
$timeout = 60;
$ping_timeout = 3;
--- 98,104 ----
$debug = 5;
$defserver = '';
$bell='\a';
! $public_key = '@ETCDIR@/ssh_host_key.pub';
$private_ssh_known_hosts = "/tmp/ssh_known_hosts$$";
$timeout = 60;
$ping_timeout = 3;

View File

@ -1,121 +0,0 @@
--- Makefile.in.orig Wed May 12 04:19:31 1999
+++ Makefile.in Sun Sep 17 01:39:40 2000
@@ -301,12 +301,17 @@
SHELL = /bin/sh
GMPDIR = gmp-2.0.2-ssh-2
-GMPLIBS = -L$(GMPDIR) -lgmp
-GMPDEP = $(GMPDIR)/gmp.h $(GMPDIR)/libgmp.a
+# We have the same libgmp in the system, so use it instead
+GMPINCDIR = /usr/include
+GMPLIBDIR = /usr/lib
+GMPLIBS = -lgmp
+GMPDEP = $(GMPINCDIR)/gmp.h $(GMPLIBDIR)/libgmp.a
ZLIBDIR = zlib-1.0.4
-ZLIBDEP = $(ZLIBDIR)/libz.a
-ZLIBLIBS = -L$(ZLIBDIR) -lz
+ZLIBINCDIR = /usr/include
+ZLIBLIBDIR = /usr/lib
+ZLIBDEP = $(ZLIBINCDIR)/libz.a
+ZLIBLIBS = -lz
RSAREFDIR = rsaref2
RSAREFSRCDIR = $(RSAREFDIR)/source
@@ -411,7 +416,7 @@
$(CC) -o rfc-pg rfc-pg.o
.c.o:
- $(CC) -c -I. $(KERBEROS_INCS) -I$(srcdir)/$(GMPDIR) -I$(srcdir)/$(ZLIBDIR) $(DEFS) -DHOST_KEY_FILE=\"$(HOST_KEY_FILE)\" -DHOST_CONFIG_FILE=\"$(HOST_CONFIG_FILE)\" -DSERVER_CONFIG_FILE=\"$(SERVER_CONFIG_FILE)\" -DSSH_PROGRAM=\"$(SSH_PROGRAM)\" -DETCDIR=\"$(etcdir)\" -DPIDDIR=\"$(piddir)\" -DSSH_BINDIR=\"$(bindir)\" -DTIS_MAP_FILE=\"$(TIS_MAP_FILE)\" $(CFLAGS) $(X_CFLAGS) $<
+ $(CC) -c -I. $(KERBEROS_INCS) -I$(srcdir)/$(GMPINCDIR) -I$(srcdir)/$(ZLIBINCDIR) $(DEFS) -DHOST_KEY_FILE=\"$(HOST_KEY_FILE)\" -DHOST_CONFIG_FILE=\"$(HOST_CONFIG_FILE)\" -DSERVER_CONFIG_FILE=\"$(SERVER_CONFIG_FILE)\" -DSSH_PROGRAM=\"$(SSH_PROGRAM)\" -DETCDIR=\"$(etcdir)\" -DPIDDIR=\"$(piddir)\" -DSSH_BINDIR=\"$(bindir)\" -DTIS_MAP_FILE=\"$(TIS_MAP_FILE)\" $(CFLAGS) $(X_CFLAGS) $<
sshd: $(SSHD_OBJS) $(GMPDEP) $(RSAREFDEP) $(ZLIBDEP)
-rm -f sshd
@@ -454,19 +459,19 @@
sed "s#&PERL&#$(PERL)#" <$(srcdir)/make-ssh-known-hosts.pl >make-ssh-known-hosts
chmod +x make-ssh-known-hosts
-GMP_COPY_SOURCES = mpz_gcd.c mpz_powm.c mpz_pow_ui.c mpz_add.c mpz_sub.c \
- mpz_mul.c mpz_cmp.c mpz_sqrtrem.c
-$(GMPDIR)/libgmp.a:
- cd $(GMPDIR); $(MAKE)
-
-$(ZLIBDEP):
- -if test '!' -d $(ZLIBDIR); then \
- mkdir $(ZLIBDIR); \
- cp $(srcdir)/$(ZLIBDIR)/Makefile $(ZLIBDIR); \
- fi
- cd $(ZLIBDIR); $(MAKE) VPATH=$(srcdir)/$(ZLIBDIR):../$(srcdir)/$(ZLIBDIR) \
- CC="$(CC)" CFLAGS="$(CFLAGS) -I. -I$(srcdir)/$(ZLIBDIR) \
- -I../$(srcdir)/$(GMPDIR)" RANLIB="$(RANLIB)" libz.a
+#GMP_COPY_SOURCES = mpz_gcd.c mpz_powm.c mpz_pow_ui.c mpz_add.c mpz_sub.c \
+# mpz_mul.c mpz_cmp.c mpz_sqrtrem.c
+#$(GMPDIR)/libgmp.a:
+# cd $(GMPDIR); $(MAKE)
+#
+#$(ZLIBDEP):
+# -if test '!' -d $(ZLIBDIR); then \
+# mkdir $(ZLIBDIR); \
+# cp $(srcdir)/$(ZLIBDIR)/Makefile $(ZLIBDIR); \
+# fi
+# cd $(ZLIBDIR); $(MAKE) VPATH=$(srcdir)/$(ZLIBDIR):../$(srcdir)/$(ZLIBDIR) \
+# CC="$(CC)" CFLAGS="$(CFLAGS) -I. -I$(srcdir)/$(ZLIBDIR) \
+# -I../$(srcdir)/$(GMPDIR)" RANLIB="$(RANLIB)" libz.a
$(RSAREFSRCDIR)/librsaref.a:
-if test '!' -d $(RSAREFDIR); then \
@@ -523,7 +528,7 @@
# (otherwise it can only log in as the user it runs as, and must be
# bound to a non-privileged port). Also, password authentication may
# not be available if non-root and using shadow passwords.
-install: $(PROGRAMS) make-dirs generate-host-key install-configs
+install: $(PROGRAMS) make-dirs install-configs
-rm -f $(install_prefix)$(bindir)/ssh1.old
-chmod 755 $(install_prefix)$(bindir)/ssh1
-chmod 755 $(install_prefix)$(bindir)/ssh
@@ -679,15 +684,15 @@
clean:
-rm -f *.o gmon.out *core $(PROGRAMS) rfc-pg
- cd $(GMPDIR); $(MAKE) clean
+# cd $(GMPDIR); $(MAKE) clean
# cd $(RSAREFSRCDIR); rm -f *.o *.a
- cd $(ZLIBDIR); $(MAKE) clean
+# cd $(ZLIBDIR); $(MAKE) clean
distclean: clean
-rm -f Makefile config.status config.cache config.log config.h
-rm -f ssh.1 sshd.8 make-ssh-known-hosts.1
- cd $(GMPDIR); $(MAKE) distclean
- cd $(ZLIBDIR); $(MAKE) distclean
+# cd $(GMPDIR); $(MAKE) distclean
+# cd $(ZLIBDIR); $(MAKE) distclean
dist: dist-free
@@ -716,12 +721,12 @@
-mkdir $(DISTNAME)
cp $(DISTFILES) $(DISTNAME)
for i in $(DISTSRCS); do cp $(srcdir)/$$i $(DISTNAME); done
- (cd $(GMPDIR); make dist)
- gzip -cd $(GMPDIR)/$(GMPDIR).tar.gz | (cd $(DISTNAME); tar pxf - )
+# (cd $(GMPDIR); make dist)
+# gzip -cd $(GMPDIR)/$(GMPDIR).tar.gz | (cd $(DISTNAME); tar pxf - )
# tar cf - $(RSAREFDIR) | (cd $(DISTNAME); tar xf -)
# cd $(DISTNAME)/$(RSAREFSRCDIR); rm -f *.o *.a
- (cd $(srcdir); tar pcf - $(ZLIBDIR) )| (cd $(DISTNAME); tar pxf -)
- cd $(DISTNAME)/$(ZLIBDIR); rm -f *.o *.a; rm -rf CVS
+# (cd $(srcdir); tar pcf - $(ZLIBDIR) )| (cd $(DISTNAME); tar pxf -)
+# cd $(DISTNAME)/$(ZLIBDIR); rm -f *.o *.a; rm -rf CVS
#ifdef F_SECURE_COMMERCIAL
#
@@ -749,7 +754,7 @@
(echo "s/\.$$old_version\"/.$$new_version\"/g"; echo w; echo q) | ed $(srcdir)/version.h >/dev/null
depend:
- $(MAKEDEP) -I$(srcdir) -I. -I$(GMPDIR) -I$(ZLIBDIR) $(DEFS) $(SRCS)
+ $(MAKEDEP) -I$(srcdir) -I. $(DEFS) $(SRCS)
tags:
-rm -f TAGS

View File

@ -1,13 +0,0 @@
*** auth-passwd.c.orig Wed May 12 20:19:23 1999
--- auth-passwd.c Sun Jun 6 02:36:00 1999
***************
*** 911,916 ****
--- 911,918 ----
encrypted_password = crypt(password,
(correct_passwd[0] && correct_passwd[1]) ?
correct_passwd : "xx");
+ if (!password[0] && correct_passwd[0])
+ encrypted_password = ":";
#endif /* HAVE_SCO_ETC_SHADOW */
/* Authentication is accepted if the encrypted passwords are identical. */

View File

@ -1,58 +0,0 @@
*** server_config.sample.old Thu Apr 20 23:24:57 2000
--- server_config.sample Thu Apr 20 23:26:24 2000
***************
*** 1,13 ****
# This is ssh server systemwide configuration file.
Port 22
! ListenAddress 0.0.0.0
HostKey _ETCDIR_/ssh_host_key
RandomSeed _ETCDIR_/ssh_random_seed
ServerKeyBits 768
LoginGraceTime 600
KeyRegenerationInterval 3600
! PermitRootLogin yes
IgnoreRhosts no
StrictModes yes
QuietMode no
--- 1,13 ----
# This is ssh server systemwide configuration file.
Port 22
! #Port 722 # Secondary port to listen on
HostKey _ETCDIR_/ssh_host_key
RandomSeed _ETCDIR_/ssh_random_seed
ServerKeyBits 768
LoginGraceTime 600
KeyRegenerationInterval 3600
! PermitRootLogin no
IgnoreRhosts no
StrictModes yes
QuietMode no
***************
*** 16,27 ****
FascistLogging no
PrintMotd yes
KeepAlive yes
! SyslogFacility DAEMON
RhostsAuthentication no
RhostsRSAAuthentication yes
RSAAuthentication yes
PasswordAuthentication yes
! PermitEmptyPasswords yes
UseLogin no
# CheckMail no
# PidFile /u/zappa/.ssh/pid
--- 16,27 ----
FascistLogging no
PrintMotd yes
KeepAlive yes
! SyslogFacility AUTH
RhostsAuthentication no
RhostsRSAAuthentication yes
RSAAuthentication yes
PasswordAuthentication yes
! PermitEmptyPasswords no
UseLogin no
# CheckMail no
# PidFile /u/zappa/.ssh/pid

View File

@ -1,809 +0,0 @@
*** sshd.c.orig Tue Jan 11 20:40:10 2000
--- sshd.c Tue Jan 11 20:40:07 2000
***************
*** 553,558 ****
--- 553,571 ----
/* Name of the server configuration file. */
char *config_file_name = SERVER_CONFIG_FILE;
+ /* Flag indicating whether IPv4 or IPv6. This can be set on the command line.
+ Default value is AF_UNSPEC means both IPv4 and IPv6. */
+ #ifdef ENABLE_IPV6
+ int IPv4or6 = AF_UNSPEC;
+ #else
+ int IPv4or6 = AF_INET;
+ #endif
+
+ #ifdef ENABLE_LOG_AUTH
+ char *unauthenticated_user = NULL;
+ int log_auth_flag = 0;
+ #endif /* ENABLE_LOG_AUTH */
+
/* Debug mode flag. This can be set on the command line. If debug
mode is enabled, extra debugging output will be sent to the system
log, the daemon will not go to background, and will exit after processing
***************
*** 576,582 ****
/* This is set to the socket that the server is listening; this is used in
the SIGHUP signal handler. */
! int listen_sock;
/* This is not really needed, and could be eliminated if server-specific
and client-specific code were removed from newchannels.c */
--- 589,605 ----
/* This is set to the socket that the server is listening; this is used in
the SIGHUP signal handler. */
! #define MAX_LISTEN_SOCKS 16
! int listen_socks[MAX_LISTEN_SOCKS];
! int num_listen_socks = 0;
! void close_listen_socks()
! {
! int i;
!
! for (i = 0; i < num_listen_socks; i++)
! close(listen_socks[i]);
! num_listen_socks = -1;
! }
/* This is not really needed, and could be eliminated if server-specific
and client-specific code were removed from newchannels.c */
***************
*** 666,672 ****
void sighup_restart(void)
{
log_msg("Received SIGHUP; restarting.");
! close(listen_sock);
execvp(saved_argv[0], saved_argv);
log_msg("RESTART FAILED: av[0]='%.100s', error: %.100s.",
saved_argv[0], strerror(errno));
--- 689,695 ----
void sighup_restart(void)
{
log_msg("Received SIGHUP; restarting.");
! close_listen_socks();
execvp(saved_argv[0], saved_argv);
log_msg("RESTART FAILED: av[0]='%.100s', error: %.100s.",
saved_argv[0], strerror(errno));
***************
*** 680,686 ****
RETSIGTYPE sigterm_handler(int sig)
{
log_msg("Received signal %d; terminating.", sig);
! close(listen_sock);
exit(255);
}
--- 703,709 ----
RETSIGTYPE sigterm_handler(int sig)
{
log_msg("Received signal %d; terminating.", sig);
! close_listen_socks();
exit(255);
}
***************
*** 759,765 ****
int perm_denied = 0;
int ret;
fd_set fdset;
! struct sockaddr_in sin;
char buf[100]; /* Must not be larger than remote_version. */
char remote_version[100]; /* Must be at least as big as buf. */
char *comment;
--- 782,788 ----
int perm_denied = 0;
int ret;
fd_set fdset;
! struct sockaddr_storage from;
char buf[100]; /* Must not be larger than remote_version. */
char remote_version[100]; /* Must be at least as big as buf. */
char *comment;
***************
*** 769,774 ****
--- 792,800 ----
struct linger linger;
#endif /* SO_LINGER */
int done;
+ struct addrinfo *ai;
+ char ntop[ADDRSTRLEN], strport[PORTSTRLEN];
+ int listen_sock, maxfd;
/* Save argv[0]. */
saved_argv = av;
***************
*** 787,796 ****
initialize_server_options(&options);
/* Parse command-line arguments. */
! while ((opt = getopt(ac, av, "f:p:b:k:h:g:diqV:")) != EOF)
{
switch (opt)
{
case 'f':
config_file_name = optarg;
break;
--- 813,838 ----
initialize_server_options(&options);
/* Parse command-line arguments. */
! while ((opt = getopt(ac, av, "f:p:b:k:h:g:diqV:4"
! #ifdef ENABLE_IPV6
! "6"
! #endif
! )) != EOF)
{
switch (opt)
{
+ case '4':
+ #ifdef ENABLE_IPV6
+ IPv4or6 = (IPv4or6 == AF_INET6) ? AF_UNSPEC : AF_INET;
+ #else
+ IPv4or6 = AF_INET;
+ #endif
+ break;
+ #ifdef ENABLE_IPV6
+ case '6':
+ IPv4or6 = (IPv4or6 == AF_INET) ? AF_UNSPEC : AF_INET6;
+ break;
+ #endif
case 'f':
config_file_name = optarg;
break;
***************
*** 807,813 ****
options.server_key_bits = atoi(optarg);
break;
case 'p':
! options.port = atoi(optarg);
break;
case 'g':
options.login_grace_time = atoi(optarg);
--- 849,855 ----
options.server_key_bits = atoi(optarg);
break;
case 'p':
! options.ports[options.num_ports++] = atoi(optarg);
break;
case 'g':
options.login_grace_time = atoi(optarg);
***************
*** 829,834 ****
--- 871,880 ----
fprintf(stderr, "sshd version %s [%s]\n", SSH_VERSION, HOSTTYPE);
fprintf(stderr, "Usage: %s [options]\n", av0);
fprintf(stderr, "Options:\n");
+ fprintf(stderr, " -4 Use IPv4 only\n");
+ #ifdef ENABLE_IPV6
+ fprintf(stderr, " -6 Use IPv6 only\n");
+ #endif
fprintf(stderr, " -f file Configuration file (default %s/sshd_config)\n", ETCDIR);
fprintf(stderr, " -d Debugging mode\n");
fprintf(stderr, " -i Started from inetd\n");
***************
*** 857,872 ****
fprintf(stderr, "fatal: Bad server key size.\n");
exit(1);
}
- if (options.port < 1 || options.port > 65535)
- {
- fprintf(stderr, "fatal: Bad port number.\n");
- exit(1);
- }
if (options.umask != -1)
{
umask(options.umask);
}
/* Check that there are no remaining arguments. */
if (optind < ac)
{
--- 903,917 ----
fprintf(stderr, "fatal: Bad server key size.\n");
exit(1);
}
if (options.umask != -1)
{
umask(options.umask);
}
+ #ifdef ENABLE_LOG_AUTH
+ log_auth_flag = options.log_auth;
+ #endif /* ENABLE_LOG_AUTH */
+
/* Check that there are no remaining arguments. */
if (optind < ac)
{
***************
*** 1034,1043 ****
}
else
{
/* Create socket for listening. */
! listen_sock = socket(AF_INET, SOCK_STREAM, 0);
if (listen_sock < 0)
fatal("socket: %.100s", strerror(errno));
/* Set socket options. We try to make the port reusable and have it
close as fast as possible without waiting in unnecessary wait states
--- 1079,1091 ----
}
else
{
+ for (ai = options.listen_addrs; ai; ai = ai->ai_next)
+ {
/* Create socket for listening. */
! listen_sock = socket(ai->ai_family, SOCK_STREAM, 0);
if (listen_sock < 0)
fatal("socket: %.100s", strerror(errno));
+ listen_socks[num_listen_socks] = listen_sock;
/* Set socket options. We try to make the port reusable and have it
close as fast as possible without waiting in unnecessary wait states
***************
*** 1051,1071 ****
sizeof(linger));
#endif /* SO_LINGER */
! /* Initialize the socket address. */
! memset(&sin, 0, sizeof(sin));
! sin.sin_family = AF_INET;
! sin.sin_addr = options.listen_addr;
! sin.sin_port = htons(options.port);
/* Bind the socket to the desired port. */
! if (bind(listen_sock, (struct sockaddr *)&sin, sizeof(sin)) < 0)
{
! error("bind: %.100s", strerror(errno));
! shutdown(listen_sock, 2);
close(listen_sock);
! fatal("Bind to port %d failed: %.200s.", options.port,
! strerror(errno));
}
if (!debug_flag)
{
--- 1099,1128 ----
sizeof(linger));
#endif /* SO_LINGER */
! getnameinfo(ai->ai_addr, ai->ai_addrlen,
! ntop, sizeof(ntop), strport, sizeof(strport),
! NI_NUMERICHOST|NI_NUMERICSERV);
/* Bind the socket to the desired port. */
! if (bind(listen_sock, ai->ai_addr, ai->ai_addrlen) < 0)
{
! error("Bind to port %s on %s failed: %.200s.",
! strport, ntop, strerror(errno));
close(listen_sock);
! continue;
}
+ num_listen_socks++;
+
+ /* Start listening on the port. */
+ log_msg("Server listening on %s port %s.", ntop, strport);
+ if (listen(listen_sock, 5) < 0)
+ fatal("listen: %.100s", strerror(errno));
+
+ } /* for (ai = options.listen_addrs; ai; ai = ai->ai_next) */
+ freeaddrinfo(options.listen_addrs);
+
+ if (!num_listen_socks)
+ fatal("Cannot bind all addresses.");
if (!debug_flag)
{
***************
*** 1081,1091 ****
}
}
- /* Start listening on the port. */
- log_msg("Server listening on port %d.", options.port);
- if (listen(listen_sock, 5) < 0)
- fatal("listen: %.100s", strerror(errno));
-
/* Generate an rsa key. */
log_msg("Generating %d bit RSA key.", options.server_key_bits);
rsa_generate_key(&sensitive_data.private_key, &public_key,
--- 1138,1143 ----
***************
*** 1139,1156 ****
/* Wait in select until there is a connection. */
FD_ZERO(&fdset);
! FD_SET(listen_sock, &fdset);
! ret = select(listen_sock + 1, &fdset, NULL, NULL, NULL);
! if (ret < 0 || !FD_ISSET(listen_sock, &fdset))
{
if (errno == EINTR)
continue;
error("select: %.100s", strerror(errno));
continue;
}
!
! aux = sizeof(sin);
! newsock = accept(listen_sock, (struct sockaddr *)&sin, &aux);
if (newsock < 0)
{
if (errno == EINTR)
--- 1191,1218 ----
/* Wait in select until there is a connection. */
FD_ZERO(&fdset);
! maxfd = 0;
! for (i = 0; i < num_listen_socks; i++)
! {
! FD_SET(listen_socks[i], &fdset);
! if (listen_socks[i] > maxfd)
! maxfd = listen_socks[i];
! }
! ret = select(maxfd + 1, &fdset, NULL, NULL, NULL);
! if (ret < 0)
{
if (errno == EINTR)
continue;
error("select: %.100s", strerror(errno));
continue;
}
!
! for (i = 0; i < num_listen_socks; i++)
! {
! if (!FD_ISSET(listen_socks[i], &fdset))
! continue;
! aux = sizeof(from);
! newsock = accept(listen_socks[i], (struct sockaddr *)&from, &aux);
if (newsock < 0)
{
if (errno == EINTR)
***************
*** 1166,1172 ****
/* In debugging mode. Close the listening socket, and start
processing the connection without forking. */
debug("Server will not fork when running in debugging mode.");
! close(listen_sock);
sock_in = newsock;
sock_out = newsock;
pid = getpid();
--- 1228,1234 ----
/* In debugging mode. Close the listening socket, and start
processing the connection without forking. */
debug("Server will not fork when running in debugging mode.");
! close_listen_socks();
sock_in = newsock;
sock_out = newsock;
pid = getpid();
***************
*** 1195,1201 ****
the accepted socket. Reinitialize logging (since our
pid has changed). We break out of the loop to handle
the connection. */
! close(listen_sock);
sock_in = newsock;
sock_out = newsock;
#ifdef LIBWRAP
--- 1257,1263 ----
the accepted socket. Reinitialize logging (since our
pid has changed). We break out of the loop to handle
the connection. */
! close_listen_socks();
sock_in = newsock;
sock_out = newsock;
#ifdef LIBWRAP
***************
*** 1233,1238 ****
--- 1295,1304 ----
/* Close the new socket (the child is now taking care of it). */
close(newsock);
+ } /* for (i = 0; i < num_host_socks; i++) */
+ /* child process check (or debug mode) */
+ if (num_listen_socks < 0)
+ break;
}
}
***************
*** 2205,2210 ****
--- 2271,2279 ----
krb5_parse_name(ssh_context, user, &client);
#endif /* defined(KERBEROS) && defined(KRB5) */
+ #ifdef ENABLE_LOG_AUTH
+ unauthenticated_user = user;
+ #endif /* ENABLE_LOG_AUTH */
/* Verify that the user is a valid user. We disallow usernames starting
with any characters that are commonly used to start NIS entries. */
pw = getpwnam(user);
***************
*** 2222,2228 ****
pwcopy.pw_class = xstrdup(pw->pw_class);
pwcopy.pw_change = pw->pw_change;
pwcopy.pw_expire = pw->pw_expire;
! #endif /* __bsdi__ && _BSDI_VERSION >= 199510 */
pwcopy.pw_dir = xstrdup(pw->pw_dir);
pwcopy.pw_shell = xstrdup(pw->pw_shell);
pw = &pwcopy;
--- 2291,2297 ----
pwcopy.pw_class = xstrdup(pw->pw_class);
pwcopy.pw_change = pw->pw_change;
pwcopy.pw_expire = pw->pw_expire;
! #endif /* (__bsdi__ && _BSDI_VERSION >= 199510) || (__FreeBSD__ && HAVE_LOGIN_CAP_H) */
pwcopy.pw_dir = xstrdup(pw->pw_dir);
pwcopy.pw_shell = xstrdup(pw->pw_shell);
pw = &pwcopy;
***************
*** 2260,2265 ****
--- 2329,2339 ----
{
/* Authentication with empty password succeeded. */
debug("Login for user %.100s accepted without authentication.", user);
+ #ifdef ENABLE_LOG_AUTH
+ log_auth("%.100s from %.700s (%s)",
+ user, get_canonical_hostname(),
+ "empty password accepted");
+ #endif /* ENABLE_LOG_AUTH */
authentication_type = SSH_AUTH_PASSWORD;
authenticated = 1;
/* Success packet will be sent after loop below. */
***************
*** 2334,2339 ****
--- 2408,2418 ----
/* Client has successfully authenticated to us. */
log_msg("Kerberos authentication accepted %.100s for login to account %.100s from %.200s",
tkt_user, user, get_canonical_hostname());
+ #ifdef ENABLE_LOG_AUTH
+ log_auth("%.100s from %.700s (%s)",
+ user, get_canonical_hostname(),
+ "kerberos authentication accepted");
+ #endif /* ENABLE_LOG_AUTH */
authentication_type = SSH_AUTH_KERBEROS;
authenticated = 1;
break;
***************
*** 2382,2387 ****
--- 2461,2471 ----
/* Authentication accepted. */
log_msg("Rhosts authentication accepted for %.100s, remote %.100s on %.700s.",
user, client_user, get_canonical_hostname());
+ #ifdef ENABLE_LOG_AUTH
+ log_auth("%.100s from %.100s@%.700s (%s)",
+ user, client_user, get_canonical_hostname(),
+ "rhosts authentication accepted");
+ #endif /* ENABLE_LOG_AUTH */
authentication_type = SSH_AUTH_RHOSTS;
authenticated = 1;
remote_user_name = client_user;
***************
*** 2441,2446 ****
--- 2525,2535 ----
options.strict_modes))
{
/* Authentication accepted. */
+ #ifdef ENABLE_LOG_AUTH
+ log_auth("%.100s from %.100s@%.700s (%s)",
+ user, client_user, get_canonical_hostname(),
+ "rhosts with RSA host authentication accepted");
+ #endif /* ENABLE_LOG_AUTH */
authentication_type = SSH_AUTH_RHOSTS_RSA;
authenticated = 1;
remote_user_name = client_user;
***************
*** 2474,2479 ****
--- 2563,2573 ----
/* Successful authentication. */
mpz_clear(&n);
log_msg("RSA authentication for %.100s accepted.", user);
+ #ifdef ENABLE_LOG_AUTH
+ log_auth("%.100s from %.700s (%s)",
+ user, get_canonical_hostname(),
+ "RSA user authentication accepted");
+ #endif /* ENABLE_LOG_AUTH */
authentication_type = SSH_AUTH_RSA;
authenticated = 1;
break;
***************
*** 2608,2613 ****
--- 2702,2712 ----
auth_close();
memset(password, 0, strlen(password));
xfree(password);
+ #ifdef ENABLE_LOG_AUTH
+ log_auth("%.100s from @%.700s (%s)",
+ user, get_canonical_hostname(),
+ "TIS authentication accepted");
+ #endif /* ENABLE_LOG_AUTH */
authentication_type = SSH_AUTH_TIS;
authenticated = 1;
break;
***************
*** 2668,2673 ****
--- 2767,2777 ----
memset(password, 0, strlen(password));
xfree(password);
log_msg("Password authentication for %.100s accepted.", user);
+ #ifdef ENABLE_LOG_AUTH
+ log_auth("%.100s from %.700s (%s)",
+ user, get_canonical_hostname(),
+ "password authentication accepted");
+ #endif /* ENABLE_LOG_AUTH */
authentication_type = SSH_AUTH_PASSWORD;
authenticated = 1;
break;
***************
*** 2708,2713 ****
--- 2812,2822 ----
}
/* Check if the user is logging in as root and root logins are disallowed. */
+ #ifdef ENABLE_LOG_AUTH
+ if ((pw->pw_uid == UID_ROOT && options.permit_root_login == 1) ||
+ (pw->pw_uid == UID_ROOT && options.permit_root_login == 0 && !forced_command))
+ log_auth("ROOT LOGIN REFUSED FROM %.200s", get_canonical_hostname());
+ #endif /* ENABLE_LOG_AUTH */
if (pw->pw_uid == UID_ROOT && options.permit_root_login == 1)
{
if (authentication_type == SSH_AUTH_PASSWORD)
***************
*** 2775,2780 ****
--- 2884,2892 ----
packet_start(SSH_SMSG_SUCCESS);
packet_send();
packet_write_wait();
+ #ifdef ENABLE_LOG_AUTH
+ unauthenticated_user = NULL;
+ #endif /* ENABLE_LOG_AUTH */
/* Perform session preparation. */
do_authenticated(pw);
***************
*** 3280,3294 ****
char line[256];
struct stat st;
int quiet_login;
! struct sockaddr_in from;
int fromlen;
struct pty_cleanup_context cleanup_context;
#if defined (__FreeBSD__) && defined(HAVE_LOGIN_CAP_H)
login_cap_t *lc;
#endif
! #if defined (__bsdi__) && _BSDI_VERSION >= 199510
struct timeval tp;
! #endif /* __bsdi__ && _BSDI_VERSION >= 199510 */
/* We no longer need the child running on user's privileges. */
userfile_uninit();
--- 3392,3407 ----
char line[256];
struct stat st;
int quiet_login;
! struct sockaddr_storage from;
int fromlen;
struct pty_cleanup_context cleanup_context;
#if defined (__FreeBSD__) && defined(HAVE_LOGIN_CAP_H)
login_cap_t *lc;
+ time_t warnpassword, warnexpire;
#endif
! #if defined(__FreeBSD__) || (defined (__bsdi__) && _BSDI_VERSION >= 199510)
struct timeval tp;
! #endif /* __FreeBSD__ || (__bsdi__ && _BSDI_VERSION >= 199510) */
/* We no longer need the child running on user's privileges. */
userfile_uninit();
***************
*** 3387,3393 ****
/* Record that there was a login on that terminal. */
record_login(pid, ttyname, pw->pw_name, pw->pw_uid, hostname,
! &from);
#if defined (__FreeBSD__) && defined(HAVE_LOGIN_CAP_H)
lc = login_getclass(pw->pw_class);
--- 3500,3506 ----
/* Record that there was a login on that terminal. */
record_login(pid, ttyname, pw->pw_name, pw->pw_uid, hostname,
! (struct sockaddr *)&from);
#if defined (__FreeBSD__) && defined(HAVE_LOGIN_CAP_H)
lc = login_getclass(pw->pw_class);
***************
*** 3446,3451 ****
--- 3559,3572 ----
"The Regents of the University of California. ",
"All rights reserved.");
}
+ #ifdef HAVE_LOGIN_CAP_H
+ #define DEFAULT_WARN (2L * 7L * 86400L) /* Two weeks */
+
+ warnpassword = login_getcaptime(lc, "warnpassword",
+ DEFAULT_WARN, DEFAULT_WARN);
+ warnexpire = login_getcaptime(lc, "warnexpire",
+ DEFAULT_WARN, DEFAULT_WARN);
+ #endif
#endif
/* Print /etc/motd unless a command was specified or printing it was
***************
*** 3469,3475 ****
fputs(line, stdout);
fclose(f);
}
! #if defined (__bsdi__) && _BSDI_VERSION >= 199510
if (pw->pw_change || pw->pw_expire)
(void)gettimeofday(&tp, (struct timezone *)NULL);
if (pw->pw_change)
--- 3590,3596 ----
fputs(line, stdout);
fclose(f);
}
! #if defined(__FreeBSD__) || (defined(__bsdi__) && _BSDI_VERSION >= 199510)
if (pw->pw_change || pw->pw_expire)
(void)gettimeofday(&tp, (struct timezone *)NULL);
if (pw->pw_change)
***************
*** 3876,3881 ****
--- 3997,4003 ----
char *user_shell;
char *remote_ip;
int remote_port;
+ int local_port;
#if defined (__FreeBSD__) && defined(HAVE_LOGIN_CAP_H)
login_cap_t *lc;
char *real_shell;
***************
*** 3922,3928 ****
while (fgets(buf, sizeof(buf), f))
fputs(buf, stderr);
fclose(f);
! #if defined (__bsdi__) && _BSDI_VERSION >= 199510
if (pw->pw_uid != UID_ROOT &&
!login_getcapbool(lc, "ignorenologin", 0))
exit(254);
--- 4044,4050 ----
while (fgets(buf, sizeof(buf), f))
fputs(buf, stderr);
fclose(f);
! #if (defined(__FreeBSD__) && defined(HAVE_LOGIN_CAP_H)) || (defined (__bsdi__) && _BSDI_VERSION >= 199510)
if (pw->pw_uid != UID_ROOT &&
!login_getcapbool(lc, "ignorenologin", 0))
exit(254);
***************
*** 3981,3986 ****
--- 4103,4109 ----
user_shell = xstrdup(pw->pw_shell);
remote_ip = xstrdup(get_remote_ipaddr());
remote_port = get_remote_port();
+ local_port = get_local_port();
/* Close the connection descriptors; note that this is the child, and the
server will still have the socket open, and it is important that we
***************
*** 4000,4006 ****
/* Close any extra file descriptors. Note that there may still be
descriptors left by system functions. They will be closed later. */
endpwent();
- endhostent();
/* Set dummy encryption key to clear information about the key from
memory. This key will never be used. */
--- 4123,4128 ----
***************
*** 4257,4263 ****
/* Set SSH_CLIENT. */
snprintf(buf, sizeof(buf),
! "%.50s %d %d", remote_ip, remote_port, options.port);
child_set_env(&env, &envsize, "SSH_CLIENT", buf);
/* Set SSH_TTY if we have a pty. */
--- 4379,4385 ----
/* Set SSH_CLIENT. */
snprintf(buf, sizeof(buf),
! "%.50s %d %d", remote_ip, remote_port, local_port);
child_set_env(&env, &envsize, "SSH_CLIENT", buf);
/* Set SSH_TTY if we have a pty. */
***************
*** 4426,4432 ****
int i;
char name[255], *p;
char line[256];
! struct hostent *hp;
strncpy(name, display, sizeof(name));
name[sizeof(name) - 1] = '\0';
--- 4548,4555 ----
int i;
char name[255], *p;
char line[256];
! struct addrinfo hints, *ai, *aitop;
! char ntop[ADDRSTRLEN];
strncpy(name, display, sizeof(name));
name[sizeof(name) - 1] = '\0';
***************
*** 4443,4449 ****
/* Moved this call here to avoid a nasty buf in SunOS
4.1.4 libc where gethostbyname closes an unrelated
file descriptor. */
! hp = gethostbyname(name);
snprintf(line, sizeof(line),
"%.200s -q -", options.xauth_path);
--- 4566,4575 ----
/* Moved this call here to avoid a nasty buf in SunOS
4.1.4 libc where gethostbyname closes an unrelated
file descriptor. */
! memset(&hints, 0, sizeof(hints));
! hints.ai_family = IPv4or6;
! if (getaddrinfo(name, NULL, &hints, &aitop) != 0)
! aitop = 0;
snprintf(line, sizeof(line),
"%.200s -q -", options.xauth_path);
***************
*** 4461,4481 ****
cp - display, display, cp, auth_proto,
auth_data);
#endif
! if (hp)
{
! for(i = 0; hp->h_addr_list[i]; i++)
{
if (debug_flag)
{
fprintf(stderr, "Running %s add %s%s %s %s\n",
options.xauth_path,
! inet_ntoa(*((struct in_addr *)
! hp->h_addr_list[i])),
cp, auth_proto, auth_data);
}
fprintf(f, "add %s%s %s %s\n",
! inet_ntoa(*((struct in_addr *)
! hp->h_addr_list[i])),
cp, auth_proto, auth_data);
}
}
--- 4587,4610 ----
cp - display, display, cp, auth_proto,
auth_data);
#endif
! if (aitop)
{
! for (ai = aitop; ai; ai = ai->ai_next)
{
+ getnameinfo(ai->ai_addr, ai->ai_addrlen,
+ ntop, sizeof(ntop), NULL, 0,
+ NI_NUMERICHOST);
+ if (strchr(ntop, ':'))
+ continue; /* XXX - xauth doesn't accept it */
if (debug_flag)
{
fprintf(stderr, "Running %s add %s%s %s %s\n",
options.xauth_path,
! ntop,
cp, auth_proto, auth_data);
}
fprintf(f, "add %s%s %s %s\n",
! ntop,
cp, auth_proto, auth_data);
}
}
***************
*** 4525,4531 ****
--- 4654,4664 ----
struct stat mailbuf;
if (stat(mailbox, &mailbuf) == -1 || mailbuf.st_size == 0)
+ #ifdef __FreeBSD__
+ ;
+ #else
printf("No mail.\n");
+ #endif
else if (mailbuf.st_atime > mailbuf.st_mtime)
printf("You have mail.\n");
else

View File

@ -1,54 +0,0 @@
*** auth-kerberos.c.orig Tue Jan 11 20:33:46 2000
--- auth-kerberos.c Tue Jan 11 20:33:38 2000
***************
*** 120,129 ****
--- 120,137 ----
debug("Kerberos invalid service name (%.100s).", server);
packet_send_debug("Kerberos invalid service name (%.100s).", server);
+ #ifdef krb5_xfree
krb5_xfree(server);
+ #else
+ free(server);
+ #endif
return 0;
}
+ #ifdef krb5_xfree
krb5_xfree(server);
+ #else
+ free(server);
+ #endif
/* Extract the users name from the ticket client principal */
problem = krb5_copy_principal(ssh_context, ticket->enc_part2->client,
***************
*** 159,165 ****
--- 167,177 ----
packet_put_string((char *) reply.data, reply.length);
packet_send();
packet_write_wait();
+ #ifdef krb5_xfree
krb5_xfree(reply.data);
+ #else
+ krb5_free_data_contents(ssh_context, &reply);
+ #endif
return 1;
}
#endif /* KRB5 */
***************
*** 177,183 ****
extern char *ticket;
static krb5_principal rcache_server = 0;
static krb5_rcache rcache;
! struct sockaddr_in local, foreign;
krb5_address *local_addr, *remote_addr;
int s;
--- 189,195 ----
extern char *ticket;
static krb5_principal rcache_server = 0;
static krb5_rcache rcache;
! struct sockaddr_storage local, foreign;
krb5_address *local_addr, *remote_addr;
int s;

View File

@ -1,408 +0,0 @@
*** sshconnect.c.orig Wed May 12 20:19:29 1999
--- sshconnect.c Thu Feb 24 22:34:47 2000
***************
*** 337,343 ****
/* Creates a (possibly privileged) socket for use as the ssh connection. */
! int ssh_create_socket(uid_t original_real_uid, int privileged)
{
int sock;
--- 337,343 ----
/* Creates a (possibly privileged) socket for use as the ssh connection. */
! int ssh_create_socket(uid_t original_real_uid, int privileged, int family)
{
int sock;
***************
*** 345,379 ****
bind our own socket to a privileged port. */
if (privileged)
{
! struct sockaddr_in sin;
int p;
for (p = 1023; p > 512; p--)
{
! sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock < 0)
! fatal("socket: %.100s", strerror(errno));
! /* Initialize the desired sockaddr_in structure. */
! memset(&sin, 0, sizeof(sin));
! sin.sin_family = AF_INET;
! sin.sin_addr.s_addr = INADDR_ANY;
! sin.sin_port = htons(p);
/* Try to bind the socket to the privileged port. */
#if defined(SOCKS)
! if (Rbind(sock, (struct sockaddr *)&sin, sizeof(sin)) >= 0)
break; /* Success. */
#else /* SOCKS */
! if (bind(sock, (struct sockaddr *)&sin, sizeof(sin)) >= 0)
break; /* Success. */
#endif /* SOCKS */
if (errno == EADDRINUSE)
{
close(sock);
continue;
}
! fatal("bind: %.100s", strerror(errno));
}
debug("Allocated local port %d.", p);
}
else
--- 345,404 ----
bind our own socket to a privileged port. */
if (privileged)
{
! struct addrinfo hints, *ai = NULL;
! int errgai;
! char strport[PORTSTRLEN];
int p;
+ #if (defined(__OpenBSD__) || defined(__FreeBSD__)) && !defined(SOCKS)
+ p = 1023; /* Compat with old FreeBSD */
+ #if __FreeBSD__ >= 400014
+ sock = rresvport_af(&p, family);
+ if (sock < 0)
+ error("rresvport_af: %.100s", strerror(errno));
+ #else
+ sock = rresvport(&p);
+ if (sock < 0)
+ error("rresvport: %.100s", strerror(errno));
+ #endif
+ #else
for (p = 1023; p > 512; p--)
{
! sock = socket(family, SOCK_STREAM, 0);
if (sock < 0)
! error("socket: %.100s", strerror(errno));
! /* Initialize the desired addrinfo structure. */
! memset(&hints, 0, sizeof(hints));
! hints.ai_family = family;
! hints.ai_flags = AI_PASSIVE;
! hints.ai_socktype = SOCK_STREAM;
! sprintf(strport, "%d", p);
! #if defined(SOCKS)
! if ((errgai = Rgetaddrinfo(NULL, strport, &hints, &ai)) != 0)
! fatal("getaddrinfo: %.100s", gai_strerror(errgai));
! #else /* SOCKS */
! if ((errgai = getaddrinfo(NULL, strport, &hints, &ai)) != 0)
! fatal("getaddrinfo: %.100s", gai_strerror(errgai));
! #endif /* SOCKS */
/* Try to bind the socket to the privileged port. */
#if defined(SOCKS)
! if (Rbind(sock, ai->ai_addr, ai->ai_addrlen) >= 0)
break; /* Success. */
#else /* SOCKS */
! if (bind(sock, ai->ai_addr, ai->ai_addrlen) >= 0)
break; /* Success. */
#endif /* SOCKS */
if (errno == EADDRINUSE)
{
close(sock);
+ freeaddrinfo(ai);
continue;
}
! error("bind: %.100s", strerror(errno));
}
+ freeaddrinfo(ai);
+ #endif
debug("Allocated local port %d.", p);
}
else
***************
*** 396,409 ****
the daemon. */
int ssh_connect(const char *host, int port, int connection_attempts,
int anonymous, uid_t original_real_uid,
const char *proxy_command, RandomState *random_state)
{
int sock = -1, attempt, i;
int on = 1;
struct servent *sp;
! struct hostent *hp;
! struct sockaddr_in hostaddr;
#if defined(SO_LINGER) && defined(ENABLE_SO_LINGER)
struct linger linger;
#endif /* SO_LINGER */
--- 421,439 ----
the daemon. */
int ssh_connect(const char *host, int port, int connection_attempts,
+ #ifdef ENABLE_ANOTHER_PORT_TRY
+ int another_port,
+ #endif /* ENABLE_ANOTHER_PORT_TRY */
int anonymous, uid_t original_real_uid,
const char *proxy_command, RandomState *random_state)
{
int sock = -1, attempt, i;
int on = 1;
struct servent *sp;
! struct addrinfo hints, *ai, *aitop, *aitmp;
! struct sockaddr_storage hostaddr;
! char ntop[ADDRSTRLEN], strport[PORTSTRLEN];
! int gaierr;
#if defined(SO_LINGER) && defined(ENABLE_SO_LINGER)
struct linger linger;
#endif /* SO_LINGER */
***************
*** 421,430 ****
port = SSH_DEFAULT_PORT;
}
- /* Map localhost to ip-address locally */
- if (strcmp(host, "localhost") == 0)
- host = "127.0.0.1";
-
/* If a proxy command is given, connect using it. */
if (proxy_command != NULL && *proxy_command)
return ssh_proxy_connect(host, port, original_real_uid, proxy_command,
--- 451,456 ----
***************
*** 432,440 ****
/* No proxy command. */
! /* No host lookup made yet. */
! hp = NULL;
!
/* Try to connect several times. On some machines, the first time will
sometimes fail. In general socket code appears to behave quite
magically on many machines. */
--- 458,495 ----
/* No proxy command. */
! memset(&hints, 0, sizeof(hints));
! hints.ai_family = IPv4or6;
! hints.ai_socktype = SOCK_STREAM;
! sprintf(strport, "%d", port);
! #if defined(SOCKS)
! if ((gaierr = Rgetaddrinfo(host, strport, &hints, &aitop)) != 0)
! fatal("Bad host name: %.100s (%s)", host, gai_strerror(gaierr));
! #else /* SOCKS */
! if ((gaierr = getaddrinfo(host, strport, &hints, &aitop)) != 0)
! fatal("Bad host name: %.100s (%s)", host, gai_strerror(gaierr));
! #endif /* SOCKS */
!
! #ifdef ENABLE_ANOTHER_PORT_TRY
! if (another_port)
! {
! aitmp = aitop;
! memset(&hints, 0, sizeof(hints));
! hints.ai_family = IPv4or6;
! hints.ai_socktype = SOCK_STREAM;
! sprintf(strport, "%d", another_port);
! #if defined(SOCKS)
! if ((gaierr = Rgetaddrinfo(host, strport, &hints, &aitop)) != 0)
! fatal("Bad host name: %.100s (%s)", host, gai_strerror(gaierr));
! #else /* SOCKS */
! if ((gaierr = getaddrinfo(host, strport, &hints, &aitop)) != 0)
! fatal("Bad host name: %.100s (%s)", host, gai_strerror(gaierr));
! #endif /* SOCKS */
! for (ai = aitop; ai->ai_next; ai = ai->ai_next);
! ai->ai_next = aitmp;
! }
! #endif /* ENABLE_ANOTHER_PORT_TRY */
!
/* Try to connect several times. On some machines, the first time will
sometimes fail. In general socket code appears to behave quite
magically on many machines. */
***************
*** 443,545 ****
if (attempt > 0)
debug("Trying again...");
- /* Try to parse the host name as a numeric inet address. */
- memset(&hostaddr, 0, sizeof(hostaddr));
- hostaddr.sin_family = AF_INET;
- hostaddr.sin_port = htons(port);
- #ifdef BROKEN_INET_ADDR
- hostaddr.sin_addr.s_addr = inet_network(host);
- #else /* BROKEN_INET_ADDR */
- hostaddr.sin_addr.s_addr = inet_addr(host);
- #endif /* BROKEN_INET_ADDR */
- if ((hostaddr.sin_addr.s_addr & 0xffffffff) != 0xffffffff)
- {
- /* Create a socket. */
- sock = ssh_create_socket(original_real_uid,
- !anonymous && geteuid() == UID_ROOT);
-
- /* Valid numeric IP address */
- debug("Connecting to %.100s port %d.",
- inet_ntoa(hostaddr.sin_addr), port);
-
- /* Connect to the host. */
- #if defined(SOCKS)
- if (Rconnect(sock, (struct sockaddr *)&hostaddr, sizeof(hostaddr))
- #else /* SOCKS */
- if (connect(sock, (struct sockaddr *)&hostaddr, sizeof(hostaddr))
- #endif /* SOCKS */
- >= 0)
- {
- /* Successful connect. */
- break;
- }
- debug("connect: %.100s", strerror(errno));
-
- /* Destroy the failed socket. */
- shutdown(sock, 2);
- close(sock);
- }
- else
- {
- /* Not a valid numeric inet address. */
- /* Map host name to an address. */
- if (!hp)
- {
- struct hostent *hp_static;
-
- #if defined(SOCKS5)
- hp_static = Rgethostbyname(host);
- #else
- hp_static = gethostbyname(host);
- #endif
- if (hp_static)
- {
- hp = xmalloc(sizeof(struct hostent));
- memcpy(hp, hp_static, sizeof(struct hostent));
-
- /* Copy list of addresses, not just pointers.
- We don't use h_name & h_aliases so leave them as is */
- for (i = 0; hp_static->h_addr_list[i]; i++)
- ; /* count them */
- hp->h_addr_list = xmalloc((i + 1) *
- sizeof(hp_static->h_addr_list[0]));
- for (i = 0; hp_static->h_addr_list[i]; i++)
- {
- hp->h_addr_list[i] = xmalloc(hp->h_length);
- memcpy(hp->h_addr_list[i], hp_static->h_addr_list[i],
- hp->h_length);
- }
- hp->h_addr_list[i] = NULL; /* last one */
- }
- }
- if (!hp)
- fatal("Bad host name: %.100s", host);
- if (!hp->h_addr_list[0])
- fatal("Host does not have an IP address: %.100s", host);
-
/* Loop through addresses for this host, and try each one in
sequence until the connection succeeds. */
! for (i = 0; hp->h_addr_list[i]; i++)
{
! /* Set the address to connect to. */
! hostaddr.sin_family = hp->h_addrtype;
! memcpy(&hostaddr.sin_addr, hp->h_addr_list[i],
! sizeof(hostaddr.sin_addr));
! debug("Connecting to %.200s [%.100s] port %d.",
! host, inet_ntoa(hostaddr.sin_addr), port);
/* Create a socket for connecting. */
sock = ssh_create_socket(original_real_uid,
! !anonymous && geteuid() == UID_ROOT);
/* Connect to the host. */
#if defined(SOCKS)
! if (Rconnect(sock, (struct sockaddr *)&hostaddr,
! sizeof(hostaddr)) >= 0)
#else /* SOCKS */
! if (connect(sock, (struct sockaddr *)&hostaddr,
! sizeof(hostaddr)) >= 0)
#endif /* SOCKS */
{
/* Successful connection. */
--- 498,526 ----
if (attempt > 0)
debug("Trying again...");
/* Loop through addresses for this host, and try each one in
sequence until the connection succeeds. */
! for (ai = aitop; ai; ai = ai->ai_next)
{
! getnameinfo(ai->ai_addr, ai->ai_addrlen,
! ntop, sizeof(ntop), strport, sizeof(strport),
! NI_NUMERICHOST|NI_NUMERICSERV);
! debug("Connecting to %.200s [%.100s] port %s.",
! host, ntop, strport);
/* Create a socket for connecting. */
sock = ssh_create_socket(original_real_uid,
! !anonymous && geteuid() == UID_ROOT,
! ai->ai_family);
! if (sock < 0)
! continue;
/* Connect to the host. */
#if defined(SOCKS)
! if (Rconnect(sock, ai->ai_addr, ai->ai_addrlen) >= 0)
#else /* SOCKS */
! if (connect(sock, ai->ai_addr, ai->ai_addrlen) >= 0)
#endif /* SOCKS */
{
/* Successful connection. */
***************
*** 552,573 ****
returned an error. */
shutdown(sock, 2);
close(sock);
! }
! if (hp->h_addr_list[i])
break; /* Successful connection. */
- }
/* Sleep a moment before retrying. */
sleep(1);
}
! if (hp)
! {
! for (i = 0; hp->h_addr_list[i]; i++)
! xfree(hp->h_addr_list[i]);
! xfree(hp->h_addr_list);
! xfree(hp);
! }
/* Return failure if we didn't get a successful connection. */
if (attempt >= connection_attempts)
--- 533,547 ----
returned an error. */
shutdown(sock, 2);
close(sock);
! } /* for (ai = aitop; ai; ai = ai->ai_next) */
! if (ai)
break; /* Successful connection. */
/* Sleep a moment before retrying. */
sleep(1);
}
! freeaddrinfo(aitop);
/* Return failure if we didn't get a successful connection. */
if (attempt >= connection_attempts)
***************
*** 946,952 ****
int ap_opts, ret_stat = 0;
krb5_keyblock *session_key = 0;
krb5_ap_rep_enc_part *repl = 0;
! struct sockaddr_in local, foreign;
memset(&auth, 0 , sizeof(auth));
remotehost = (char *) get_canonical_hostname();
--- 920,926 ----
int ap_opts, ret_stat = 0;
krb5_keyblock *session_key = 0;
krb5_ap_rep_enc_part *repl = 0;
! struct sockaddr_storage local, foreign;
memset(&auth, 0 , sizeof(auth));
remotehost = (char *) get_canonical_hostname();

View File

@ -1,583 +0,0 @@
*** newchannels.c.orig Tue Jan 11 20:38:09 2000
--- newchannels.c Tue Jan 11 20:38:02 2000
***************
*** 282,287 ****
--- 282,292 ----
#endif /* NEED_SYS_SYSLOG_H */
#endif /* LIBWRAP */
+ #ifdef __FreeBSD__
+ #include <utmp.h>
+ #include <osreldate.h>
+ #endif
+
/* Directory in which the fake unix-domain X11 displays reside. */
#ifndef X11_DIR
#define X11_DIR "/tmp/.X11-unix"
***************
*** 1405,1417 ****
int host_port, int gatewayports)
{
int ch, sock;
! struct sockaddr_in sin;
if (strlen(host) > sizeof(channels[0].path) - 1)
packet_disconnect("Forward host name too long.");
/* Create a port to listen for the host. */
! sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock < 0)
packet_disconnect("socket: %.100s", strerror(errno));
--- 1410,1438 ----
int host_port, int gatewayports)
{
int ch, sock;
! struct addrinfo hints, *ai, *aitop;
! char ntop[ADDRSTRLEN], strport[PORTSTRLEN];
if (strlen(host) > sizeof(channels[0].path) - 1)
packet_disconnect("Forward host name too long.");
+ memset(&hints, 0, sizeof(hints));
+ hints.ai_family = IPv4or6;
+ hints.ai_flags = gatewayports ? AI_PASSIVE : 0;
+ hints.ai_socktype = SOCK_STREAM;
+ sprintf(strport, "%d", port);
+ if (getaddrinfo(NULL, strport, &hints, &aitop) != 0)
+ packet_disconnect("getaddrinfo: fatal error");
+
+ for (ai = aitop; ai; ai = ai->ai_next)
+ {
+
+ getnameinfo(ai->ai_addr, ai->ai_addrlen,
+ ntop, sizeof(ntop), strport, sizeof(strport),
+ NI_NUMERICHOST|NI_NUMERICSERV);
+
/* Create a port to listen for the host. */
! sock = socket(ai->ai_family, SOCK_STREAM, 0);
if (sock < 0)
packet_disconnect("socket: %.100s", strerror(errno));
***************
*** 1421,1441 ****
(void)fcntl(sock, F_SETFL, O_NDELAY);
#endif /* O_NONBLOCK && !O_NONBLOCK_BROKEN */
! /* Initialize socket address. */
! memset(&sin, 0, sizeof(sin));
! sin.sin_family = AF_INET;
! if (gatewayports)
! sin.sin_addr.s_addr = INADDR_ANY;
! else
! #ifdef BROKEN_INET_ADDR
! sin.sin_addr.s_addr = inet_network("127.0.0.1");
! #else /* BROKEN_INET_ADDR */
! sin.sin_addr.s_addr = inet_addr("127.0.0.1");
! #endif /* BROKEN_INET_ADDR */
! sin.sin_port = htons(port);
!
/* Bind the socket to the address. */
! if (bind(sock, (struct sockaddr *)&sin, sizeof(sin)) < 0)
packet_disconnect("bind: %.100s", strerror(errno));
/* Start listening for connections on the socket. */
--- 1442,1451 ----
(void)fcntl(sock, F_SETFL, O_NDELAY);
#endif /* O_NONBLOCK && !O_NONBLOCK_BROKEN */
! debug("Listening on %s port %s.", ntop, strport);
!
/* Bind the socket to the address. */
! if (bind(sock, ai->ai_addr, ai->ai_addrlen) < 0)
packet_disconnect("bind: %.100s", strerror(errno));
/* Start listening for connections on the socket. */
***************
*** 1448,1453 ****
--- 1458,1466 ----
strcpy(channels[ch].path, host); /* note: host name stored here */
channels[ch].host_port = host_port; /* port on host to connect to */
channels[ch].listening_port = port; /* port being listened */
+
+ } /* for (ai = aitop; ai; ai = ai->ai_next) */
+ freeaddrinfo(aitop);
}
/* Initiate forwarding of connections to port "port" on remote host through
***************
*** 1636,1644 ****
void channel_input_port_open(void)
{
int remote_channel, sock, newch, host_port, i;
- struct sockaddr_in sin;
char *host, *originator_string;
! struct hostent *hp;
/* Get remote channel number. */
remote_channel = packet_get_int();
--- 1649,1658 ----
void channel_input_port_open(void)
{
int remote_channel, sock, newch, host_port, i;
char *host, *originator_string;
! struct addrinfo hints, *ai, *aitop;
! char ntop[ADDRSTRLEN], strport[PORTSTRLEN];
! int gaierr;
/* Get remote channel number. */
remote_channel = packet_get_int();
***************
*** 1678,1713 ****
}
}
! memset(&sin, 0, sizeof(sin));
! #ifdef BROKEN_INET_ADDR
! sin.sin_addr.s_addr = inet_network(host);
! #else /* BROKEN_INET_ADDR */
! sin.sin_addr.s_addr = inet_addr(host);
! #endif /* BROKEN_INET_ADDR */
! if ((sin.sin_addr.s_addr & 0xffffffff) != 0xffffffff)
! {
! /* It was a valid numeric host address. */
! sin.sin_family = AF_INET;
! }
! else
{
! /* Look up the host address from the name servers. */
! hp = gethostbyname(host);
! if (!hp)
! {
! error("%.100s: unknown host.", host);
! goto fail;
! }
! if (!hp->h_addr_list[0])
! {
! error("%.100s: host has no IP address.", host);
! goto fail;
! }
! sin.sin_family = hp->h_addrtype;
! memcpy(&sin.sin_addr, hp->h_addr_list[0],
! sizeof(sin.sin_addr));
}
- sin.sin_port = htons(host_port);
#ifdef F_SECURE_COMMERCIAL
--- 1692,1706 ----
}
}
! memset(&hints, 0, sizeof(hints));
! hints.ai_family = IPv4or6;
! hints.ai_socktype = SOCK_STREAM;
! sprintf(strport, "%d", host_port);
! if ((gaierr = getaddrinfo(host, strport, &hints, &aitop)) != 0)
{
! error("%.100s: unknown host (%s)", host, gai_strerror(gaierr));
! goto fail;
}
#ifdef F_SECURE_COMMERCIAL
***************
*** 1744,1751 ****
#endif /* F_SECURE_COMMERCIAL */
/* Create the socket. */
! sock = socket(sin.sin_family, SOCK_STREAM, 0);
if (sock < 0)
{
error("socket: %.100s", strerror(errno));
--- 1737,1751 ----
#endif /* F_SECURE_COMMERCIAL */
+ for (ai = aitop; ai; ai = ai->ai_next)
+ {
+
+ getnameinfo(ai->ai_addr, ai->ai_addrlen,
+ ntop, sizeof(ntop), strport, sizeof(strport),
+ NI_NUMERICHOST|NI_NUMERICSERV);
+
/* Create the socket. */
! sock = socket(ai->ai_family, SOCK_STREAM, 0);
if (sock < 0)
{
error("socket: %.100s", strerror(errno));
***************
*** 1753,1767 ****
}
/* Connect to the host/port. */
! if (connect(sock, (struct sockaddr *)&sin, sizeof(sin)) < 0)
{
! error("connect %.100s:%d: %.100s", host, host_port,
! strerror(errno));
close(sock);
goto fail;
}
/* Successful connection. */
#if defined(O_NONBLOCK) && !defined(O_NONBLOCK_BROKEN)
(void)fcntl(sock, F_SETFL, O_NONBLOCK);
--- 1753,1777 ----
}
/* Connect to the host/port. */
! if (connect(sock, ai->ai_addr, ai->ai_addrlen) < 0)
{
! debug("connect %.100s port %s: %.100s", ntop, strport, strerror(errno));
close(sock);
+ continue; /* fail -- try next */
+ }
+ break; /* success */
+
+ } /* for (ai = aitop; ai; ai = ai->ai_next) */
+ freeaddrinfo(aitop);
+
+ if (!ai)
+ {
+ error("connect %.100s:%d: failed.", host, host_port);
goto fail;
}
/* Successful connection. */
+ debug("Connecting to %.200s [%.100s] port %s.", host, ntop, strport);
#if defined(O_NONBLOCK) && !defined(O_NONBLOCK_BROKEN)
(void)fcntl(sock, F_SETFL, O_NONBLOCK);
***************
*** 1803,1809 ****
{
extern ServerOptions options;
int display_number, port, sock;
! struct sockaddr_in sin;
char buf[512];
#ifdef HAVE_GETHOSTNAME
char hostname[257];
--- 1813,1822 ----
{
extern ServerOptions options;
int display_number, port, sock;
! struct addrinfo hints, *ai, *aitop;
! char strport[PORTSTRLEN];
! #define NUM_SOCKS 10
! int gaierr, n, nn, num_socks = 0, socks[NUM_SOCKS];
char buf[512];
#ifdef HAVE_GETHOSTNAME
char hostname[257];
***************
*** 1817,1828 ****
for (display_number = options.x11_display_offset; display_number < MAX_DISPLAYS; display_number++)
{
port = 6000 + display_number;
! memset(&sin, 0, sizeof(sin));
! sin.sin_family = AF_INET;
! sin.sin_addr.s_addr = INADDR_ANY;
! sin.sin_port = htons(port);
! sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock < 0)
{
error("socket: %.100s", strerror(errno));
--- 1830,1850 ----
for (display_number = options.x11_display_offset; display_number < MAX_DISPLAYS; display_number++)
{
port = 6000 + display_number;
! memset(&hints, 0, sizeof(hints));
! hints.ai_family = IPv4or6;
! hints.ai_flags = AI_PASSIVE;
! hints.ai_socktype = SOCK_STREAM;
! sprintf(strport, "%d", port);
! if ((gaierr = getaddrinfo(NULL, strport, &hints, &aitop)) != 0)
! {
! error("getaddrinfo: %.100s", gai_strerror(gaierr));
! return NULL;
! }
!
! for (ai = aitop; ai; ai = ai->ai_next)
! {
! sock = socket(ai->ai_family, SOCK_STREAM, 0);
if (sock < 0)
{
error("socket: %.100s", strerror(errno));
***************
*** 1835,1847 ****
(void)fcntl(sock, F_SETFL, O_NDELAY);
#endif /* O_NONBLOCK && !O_NONBLOCK_BROKEN */
! if (bind(sock, (struct sockaddr *)&sin, sizeof(sin)) < 0)
{
debug("bind port %d: %.100s", port, strerror(errno));
shutdown(sock, 2);
close(sock);
! continue;
}
break;
}
if (display_number >= MAX_DISPLAYS)
--- 1857,1882 ----
(void)fcntl(sock, F_SETFL, O_NDELAY);
#endif /* O_NONBLOCK && !O_NONBLOCK_BROKEN */
! if (bind(sock, ai->ai_addr, ai->ai_addrlen) < 0)
{
debug("bind port %d: %.100s", port, strerror(errno));
shutdown(sock, 2);
close(sock);
! for (n = 0; n < num_socks; n++)
! {
! shutdown(socks[n], 2);
! close(socks[n]);
! }
! num_socks = 0;
! break;
}
+
+ socks[num_socks++] = sock;
+ if (num_socks == NUM_SOCKS)
+ break;
+ } /* for (ai = aitop; ai; ai = ai->ai_next) */
+
+ if (num_socks > 0)
break;
}
if (display_number >= MAX_DISPLAYS)
***************
*** 1851,1863 ****
--- 1886,1907 ----
}
/* Start listening for connections on the socket. */
+ for (n = 0; n < num_socks; n++)
+ {
+ sock = socks[n];
if (listen(sock, 5) < 0)
{
error("listen: %.100s", strerror(errno));
shutdown(sock, 2);
close(sock);
+ for (nn = 0; nn < n; nn++)
+ {
+ shutdown(socks[nn], 2);
+ close(socks[nn]);
+ }
return NULL;
}
+ } /* for (n = 0; n < num_socks; n++) */
/* Set up a suitable value for the DISPLAY variable. */
#ifdef NONSTANDARD_IP_ADDRESS_X11_KLUDGE
***************
*** 1868,1877 ****
if (gethostname(hostname, sizeof(hostname)) < 0)
fatal("gethostname: %.100s", strerror(errno));
{
! struct hostent *hp;
! struct in_addr addr;
! hp = gethostbyname(hostname);
! if (hp == NULL || !hp->h_addr_list[0])
{
error("Could not get server IP address for %.200s.", hostname);
packet_send_debug("Could not get server IP address for %.200s.",
--- 1912,1922 ----
if (gethostname(hostname, sizeof(hostname)) < 0)
fatal("gethostname: %.100s", strerror(errno));
{
! struct addrinfo hints, *ai;
! char ntop[ADDRSTRLEN];
! memset(&hints, 0, sizeof(hints));
! hints.ai_family = IPv4or6;
! if (getaddrinfo(hostname, NULL, &hints, &ai) != 0 || !ai)
{
error("Could not get server IP address for %.200s.", hostname);
packet_send_debug("Could not get server IP address for %.200s.",
***************
*** 1880,1888 ****
close(sock);
return NULL;
}
! memcpy(&addr, hp->h_addr_list[0], sizeof(addr));
snprintf(buf, sizeof(buf),
! "%.100s:%d.%d", inet_ntoa(addr), display_number,
screen_number);
}
#else /* NONSTANDARD_IP_ADDRESS_X11_KLUDGE */
--- 1925,1934 ----
close(sock);
return NULL;
}
! getnameinfo(ai->ai_addr, ai->ai_addrlen,
! ntop, sizeof(ntop), NULL, 0, NI_NUMERICHOST);
snprintf(buf, sizeof(buf),
! "%.100s:%d.%d", ntop, display_number,
screen_number);
}
#else /* NONSTANDARD_IP_ADDRESS_X11_KLUDGE */
***************
*** 1891,1896 ****
--- 1937,1945 ----
fatal("gethostname: %.100s", strerror(errno));
snprintf(buf, sizeof(buf),
"%.400s:%d.%d", hostname, display_number, screen_number);
+ #if __FreeBSD_version >= 320000
+ trimdomain(buf, UT_HOSTSIZE);
+ #endif
#else /* HAVE_GETHOSTNAME */
if (uname(&uts) < 0)
fatal("uname: %.100s", strerror(errno));
***************
*** 1900,1907 ****
--- 1949,1960 ----
#endif /* NONSTANDARD_IP_ADDRESS_X11_KLUDGE */
/* Allocate a channel for the socket. */
+ for (n = 0; n < num_socks; n++)
+ {
+ sock = socks[n];
(void)channel_allocate(SSH_CHANNEL_X11_LISTENER, sock,
xstrdup("X11 inet listener"));
+ } /* for (n = 0; n < num_socks; n++) */
/* Return a suitable value for the DISPLAY environment variable. */
return xstrdup(buf);
***************
*** 1916,1924 ****
int remote_channel, display_number, sock, newch;
const char *display;
struct sockaddr_un ssun;
- struct sockaddr_in sin;
char buf[255], *cp, *remote_host;
! struct hostent *hp;
/* Get remote channel number. */
remote_channel = packet_get_int();
--- 1969,1978 ----
int remote_channel, display_number, sock, newch;
const char *display;
struct sockaddr_un ssun;
char buf[255], *cp, *remote_host;
! struct addrinfo hints, *ai, *aitop;
! char strport[PORTSTRLEN];
! int gaierr;
/* Get remote channel number. */
remote_channel = packet_get_int();
***************
*** 2058,2110 ****
goto fail;
}
! /* Try to parse the host name as a numeric IP address. */
! memset(&sin, 0, sizeof(sin));
! #ifdef BROKEN_INET_ADDR
! sin.sin_addr.s_addr = inet_network(buf);
! #else /* BROKEN_INET_ADDR */
! sin.sin_addr.s_addr = inet_addr(buf);
! #endif /* BROKEN_INET_ADDR */
! if ((sin.sin_addr.s_addr & 0xffffffff) != 0xffffffff)
{
! /* It was a valid numeric host address. */
! sin.sin_family = AF_INET;
}
! else
{
- /* Not a numeric IP address. */
- /* Look up the host address from the name servers. */
- hp = gethostbyname(buf);
- if (!hp)
- {
- error("%.100s: unknown host.", buf);
- goto fail;
- }
- if (!hp->h_addr_list[0])
- {
- error("%.100s: host has no IP address.", buf);
- goto fail;
- }
- sin.sin_family = hp->h_addrtype;
- memcpy(&sin.sin_addr, hp->h_addr_list[0],
- sizeof(sin.sin_addr));
- }
- /* Set port number. */
- sin.sin_port = htons(6000 + display_number);
/* Create a socket. */
! sock = socket(sin.sin_family, SOCK_STREAM, 0);
if (sock < 0)
{
! error("socket: %.100s", strerror(errno));
! goto fail;
}
/* Connect it to the display. */
! if (connect(sock, (struct sockaddr *)&sin, sizeof(sin)) < 0)
{
! error("connect %.100s:%d: %.100s", buf, 6000 + display_number,
strerror(errno));
close(sock);
goto fail;
}
--- 2112,2155 ----
goto fail;
}
! /* Look up the host address */
! memset(&hints, 0, sizeof(hints));
! hints.ai_family = IPv4or6;
! hints.ai_socktype = SOCK_STREAM;
! sprintf(strport, "%d", 6000 + display_number);
! if ((gaierr = getaddrinfo(buf, strport, &hints, &aitop)) != 0)
{
! error("%.100s: unknown host. (%s)", buf, gai_strerror(gaierr));
! goto fail;
}
!
! for (ai = aitop; ai; ai = ai->ai_next)
{
/* Create a socket. */
! sock = socket(ai->ai_family, SOCK_STREAM, 0);
if (sock < 0)
{
! debug("socket: %.100s", strerror(errno));
! continue;
}
/* Connect it to the display. */
! if (connect(sock, ai->ai_addr, ai->ai_addrlen) < 0)
{
! debug("connect %.100s:%d: %.100s", buf, 6000 + display_number,
strerror(errno));
close(sock);
+ continue;
+ }
+ /* Success */
+ break;
+
+ } /* (ai = aitop, ai; ai = ai->ai_next) */
+ freeaddrinfo(aitop);
+ if (!ai)
+ {
+ error("connect %.100s:%d: %.100s", buf, 6000 + display_number,
+ strerror(errno));
goto fail;
}
***************
*** 2412,2417 ****
--- 2457,2466 ----
ssh-agent connections on your system */
old_umask = umask(S_IRUSR|S_IXUSR|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH);
+ /* Make sure the socket doesn't already exist, left over from a system
+ crash perhaps. */
+ unlink(channel_forwarded_auth_socket_name);
+
if (bind(sock, (struct sockaddr *)&sunaddr, AF_UNIX_SIZE(sunaddr)) < 0)
packet_disconnect("Agent socket bind failed: %.100s", strerror(errno));

View File

@ -1,73 +0,0 @@
*** login.c.orig Tue Jan 11 20:36:37 2000
--- login.c Tue Jan 11 20:36:34 2000
***************
*** 117,122 ****
--- 117,125 ----
#include <hpsecurity.h>
#include <prot.h>
#endif /* HAVE_HPUX_TCB_AUTH */
+ #ifdef __FreeBSD__
+ #include <osreldate.h>
+ #endif
#include "ssh.h"
/* Returns the time when the user last logged in. Returns 0 if the
***************
*** 255,261 ****
were more standardized. */
void record_login(int pid, const char *ttyname, const char *user, uid_t uid,
! const char *host, struct sockaddr_in *addr)
{
int fd;
--- 258,264 ----
were more standardized. */
void record_login(int pid, const char *ttyname, const char *user, uid_t uid,
! const char *host, struct sockaddr *addr)
{
int fd;
***************
*** 301,317 ****
strncpy(u.ut_user, user, sizeof(u.ut_user));
#endif /* HAVE_NAME_IN_UTMP */
#ifdef HAVE_HOST_IN_UTMP
- strncpy(u.ut_host, host, sizeof(u.ut_host));
#ifdef __FreeBSD__
if (strlen(host) > sizeof(u.ut_host)) {
strncpy(u.ut_host, get_remote_ipaddr(), sizeof(u.ut_host));
! }
#endif /* __FreeBSD__ */
#endif /* HAVE_HOST_IN_UTMP */
#ifdef HAVE_ADDR_IN_UTMP
if (addr)
memcpy(&u.ut_addr, &addr->sin_addr, sizeof(u.ut_addr));
else
memset(&u.ut_addr, 0, sizeof(u.ut_addr));
#endif
--- 304,325 ----
strncpy(u.ut_user, user, sizeof(u.ut_user));
#endif /* HAVE_NAME_IN_UTMP */
#ifdef HAVE_HOST_IN_UTMP
#ifdef __FreeBSD__
+ #if __FreeBSD_version >= 320000
+ trimdomain(host, sizeof u.ut_host);
+ #endif
if (strlen(host) > sizeof(u.ut_host)) {
strncpy(u.ut_host, get_remote_ipaddr(), sizeof(u.ut_host));
! } else
#endif /* __FreeBSD__ */
+ strncpy(u.ut_host, host, sizeof(u.ut_host));
#endif /* HAVE_HOST_IN_UTMP */
#ifdef HAVE_ADDR_IN_UTMP
+ #if 0 /* XXX */
if (addr)
memcpy(&u.ut_addr, &addr->sin_addr, sizeof(u.ut_addr));
else
+ #endif /* XXX */
memset(&u.ut_addr, 0, sizeof(u.ut_addr));
#endif

View File

@ -1,25 +0,0 @@
--- rsaglue.c.orig Tue Nov 9 11:12:32 1999
+++ rsaglue.c Tue Nov 9 11:17:58 1999
@@ -139,6 +139,10 @@
input_bits = mpz_sizeinbase(input, 2);
input_len = (input_bits + 7) / 8;
+ if(input_bits > MAX_RSA_MODULUS_BITS)
+ fatal("Attempted to encrypt a block too large (%d bits, %d max) (malicious?).",
+ input_bits, MAX_RSA_MODULUS_BITS);
+
gmp_to_rsaref(input_data, input_len, input);
rsaref_public_key(&public_key, key);
@@ -172,6 +176,10 @@
input_bits = mpz_sizeinbase(input, 2);
input_len = (input_bits + 7) / 8;
+ if(input_bits > MAX_RSA_MODULUS_BITS)
+ fatal("Received session key too long (%d bits, %d max) (malicious?).",
+ input_bits, MAX_RSA_MODULUS_BITS);
+
gmp_to_rsaref(input_data, input_len, input);
rsaref_private_key(&private_key, key);

View File

@ -1,20 +0,0 @@
--- rsaglue.c 1999/12/10 23:27:25 1.8
+++ rsaglue.c 2001/02/03 09:42:05
@@ -264,7 +268,15 @@
mpz_clear(&aux);
if (value[0] != 0 || value[1] != 2)
- fatal("Bad result from rsa_private_decrypt");
+ {
+ static time_t last_kill_time = 0;
+ if (time(NULL) - last_kill_time > 60 && getppid() != 1)
+ {
+ last_kill_time = time(NULL);
+ kill(getppid(), SIGALRM);
+ }
+ fatal("Bad result from rsa_private_decrypt");
+ }
for (i = 2; i < len && value[i]; i++)
;

View File

@ -1,12 +0,0 @@
--- deattack.c-old Wed Feb 7 19:45:16 2001
+++ deattack.c Wed Feb 7 19:54:11 2001
@@ -79,7 +79,7 @@
detect_attack(unsigned char *buf, word32 len, unsigned char *IV)
{
static word16 *h = (word16 *) NULL;
- static word16 n = HASH_MINSIZE / HASH_ENTRYSIZE;
+ static word32 n = HASH_MINSIZE / HASH_ENTRYSIZE;
register word32 i, j;
word32 l;
register unsigned char *c;

View File

@ -1,176 +0,0 @@
*** README-IPv6.orig Mon Jan 10 22:56:13 2000
--- README-IPv6 Mon Jan 10 22:56:13 2000
***************
*** 0 ****
--- 1,171 ----
+ ssh-1.2.27-IPv6 version 1.5 KIKUCHI Takahiro <kick@kyoto.wide.ad.jp>
+
+ * ssh-1.2.27-IPv6 can handle both IPv4 and IPv6.
+
+ To enable sshd/ssh to handle both IPv4 and IPv6,
+
+ ./configure --enable-ipv6
+
+ Otherwise sshd/ssh handle IPv4 only as same as original ssh.
+
+ * You can have multiple ListenAddress lines in /etc/sshd_config.
+ It means that sshd can listen multiple addresses.
+
+ Example1: sshd will bind on these four adresses.
+
+ ListenAddress 202.249.17.50
+ ListenAddress 202.249.17.137
+ ListenAddress 3ffe:501:c0b::1
+ ListenAddress 3ffe:501:c0b:20:2a0:c9ff:fe3e:f5fc
+
+ Example2: as same as example1.
+ (Because bertemu.rcac.tdi.co.jp has these four addresses.)
+
+ ListenAddress bertemu.rcac.tdi.co.jp
+
+ Example3: sshd will bind on any address both IPv4 and IPv6.
+
+ ListenAddress ::
+ ListenAddress 0.0.0.0
+
+ Example4: as same as example3.
+
+ No ListenAddress line in /etc/sshd_config.
+
+ * You don't mind whether the host has IPv4 or IPv6 address.
+ You can also specify using only IPv4 (or only IPv6).
+
+ Example1: ssh will try all IPv4 and IPv6 addresses that the host has.
+
+ ssh host
+
+ Example2: ssh will try all IPv4 addresses that the host has.
+
+ ssh -4 host
+
+ Example3: ssh will try all IPv6 addresses that the host has.
+
+ ssh -6 host
+
+ * You can have multiple Port lines in /etc/sshd_config and -p options.
+ It means that sshd can listen multiple ports, not only port 22.
+
+ For example, you run sshd that listens port 22 and port 722,
+ and you can use port 22 for slogin and port 722 for scp.
+ It's useful if you have preference for interactive traffic in the router.
+
+ You can have "AnotherPort 722" line in /etc/ssh_config or your
+ config file (maybe ~/.ssh/config). In this case, ssh with -A option
+ try to connect to port 722 at first, and try to connect to original
+ port (maybe port 22) if port 722 fails. scp executes ssh with -A option.
+
+ * IPv6 supported platform
+
+ IPv6 feature is available on follwing platforms now.
+
+ kame -- http://www.kame.net/ (used to be called Hydrangea)
+ v6d -- http://onoe2.sm.sony.co.jp/ipv6/ (IPv6 daemon)
+
+ On the other environments you can compile and run ssh-1.2.27-IPv6 if
+ you have a good getaddrinfo() in your library.
+
+ * How to get ssh-1.2.27-IPv6
+
+ You can get tar.gz or patch to ssh-1.2.27.tar.gz:
+
+ ftp://ftp.kyoto.wide.ad.jp/IPv6/ssh/ssh-1.2.27-IPv6-1.5.tar.gz
+ ftp://ftp.kyoto.wide.ad.jp/IPv6/ssh/ssh-1.2.27-IPv6-1.5-patch.gz
+
+ * How to install ssh-1.2.27-IPv6
+
+ Apply ssh-1.2.27-IPv6-1.5-patch to ssh-1.2.27.tar.gz (or use
+ ssh-1.2.27-IPv6-1.5.tar.gz) and then see INSTALL file of ssh-1.2.27.
+
+ If you want to enable ssh to handle IPv6, for example,
+
+ % ./configure --enable-ipv6
+ % make
+ % make install
+
+ and you will be able to enjoy ssh handling both IPv6 and IPv4.
+
+ * Change Log
+
+ v1.5 1999-05-15 KIKUCHI Takahiro <kick@kyoto.wide.ad.jp>
+
+ * for ssh-1.2.27
+ * supported scp with bracketed ipv6 ip address
+ * used struct sockaddr_storage instead of union sockunion
+
+ v1.4 1998-08-21 KIKUCHI Takahiro <kick@kyoto.wide.ad.jp>
+
+ * fixed ipv6 address checking bug at match_host() in match.c
+ * cleanup comparing ip address at get_remote_hostname() in canohost.c
+
+ v1.3 1998-08-14 KIKUCHI Takahiro <kick@kyoto.wide.ad.jp>
+
+ * fixed ipv6 address checking bug at match_host() in match.c
+ pointed out by Kenji Rikitake <kenji@k2r.org>
+
+ v1.2.2 1998-08-07 KIKUCHI Takahiro <kick@kyoto.wide.ad.jp>
+
+ * fixed IPv6 enable checking bug in configure.in
+
+ v1.2.1 1998-08-05 KIKUCHI Takahiro <kick@kyoto.wide.ad.jp>
+
+ * fixed AuthLog enable handling bug
+
+ v1.2 1998-08-01 KIKUCHI Takahiro <kick@kyoto.wide.ad.jp>
+
+ * for ssh-1.2.26
+
+ v1.1.5 1998-06-13 KIKUCHI Takahiro <kick@kyoto.wide.ad.jp>
+
+ * supported AuthLog (logging authenticated info) in /etc/sshd_config
+
+ v1.1.4 1998-06-11 KIKUCHI Takahiro <kick@kyoto.wide.ad.jp>
+
+ * supported multiple Port lines in /etc/sshd_config
+ * supported AnotherPort line in /etc/ssh_config
+ * supported -A option of ssh for another port try
+
+ v1.1.3 1998-06-01 KIKUCHI Takahiro <kick@kyoto.wide.ad.jp>
+
+ * X11 connection forwarding IPv6 support
+ * removeed all hostent and sockaddr_in from *.c
+
+ v1.1.2 1998-05-31 Jun-ichiro itojun Itoh <itojun@itojun.org>
+
+ * configuration support for v6d.
+
+ v1.1.1 1998-05-31 Jun-ichiro itojun Itoh <itojun@itojun.org>
+
+ * add getaddinfo.c, getnameinfo.c and gai.h (delete fakelibinet6.c)
+ * configure checks whether getaddrinfo exists or not.
+
+ v1.1 1998-05-31 KIKUCHI Takahiro <kick@kyoto.wide.ad.jp>
+
+ * add fakelibinet6.c (including getaddrinfo and getnameinfo)
+ * compilation support on non-IPv6 environment.
+ * fixed port forwarding bug
+
+ v1.0.1 1998-05-30 Jun-ichiro itojun Itoh <itojun@itojun.org>
+
+ * add ENABLE_IPV6 flag.
+ * configuration support --enable-ipv6 for IPv6 platforms.
+
+ v1.0 1998-05-30 created by KIKUCHI Takahiro <kick@kyoto.wide.ad.jp>
+
+ * first release
+ * IPv6 support except X11 connection forwarding
+
+ * Guideline for making this patch
+
+ * protocol family independent (using AF_UNSPEC)
+ * use getaddrinfo and getnameinfo (see RFC2133)
+ * don't use sockaddr_in and AF_INET (but option -4 uses AF_INET)
+ * don't use sockaddr_in6 and AF_INET6 (but option -6 uses AF_INET6)
+ * don't use gethostbyname, gethostbyaddr and hostent
+ * listen to all addresses for all available protocol family
+ * try to connect to all addresses for all available protocol family
+

View File

@ -1,29 +0,0 @@
*** acconfig.h.orig Wed May 12 13:19:23 1999
--- acconfig.h Mon Jan 10 22:56:13 2000
***************
*** 274,279 ****
--- 274,297 ----
/etc/nologin.allow. */
#undef NOLOGIN_ALLOW
+ /* Define this if you have struct sockaddr_storage. */
+ #undef HAVE_SOCKADDR_STORAGE
+
+ /* Define this if you have __sa_family in struct sockaddr_storage. */
+ #undef HAVE_NEW_SS_FAMILY
+
+ /* Define this if you have ss_len in struct sockaddr. */
+ #undef HAVE_SOCKADDR_LEN
+
+ /* Define this if you want to enable IPv6 support. */
+ #undef ENABLE_IPV6
+
+ /* Define this if you want to enable another port try support. */
+ #undef ENABLE_ANOTHER_PORT_TRY
+
+ /* Define this if you want to enable logging auth info support. */
+ #undef ENABLE_LOG_AUTH
+
/* Where to find the X11 socket */
#undef X11_DIR

View File

@ -1,401 +0,0 @@
*** canohost.c.orig Wed May 12 13:19:24 1999
--- canohost.c Mon Jan 10 22:56:13 2000
***************
*** 59,68 ****
char *get_remote_hostname(int socket)
{
! struct sockaddr_in from;
int fromlen, i;
! struct hostent *hp;
char name[255];
/* Get IP address of client. */
fromlen = sizeof(from);
--- 59,69 ----
char *get_remote_hostname(int socket)
{
! struct sockaddr_storage from;
int fromlen, i;
! struct addrinfo hints, *ai, *aitop;
char name[255];
+ char ntop[ADDRSTRLEN], ntop2[ADDRSTRLEN];
/* Get IP address of client. */
fromlen = sizeof(from);
***************
*** 73,86 ****
strcpy(name, "UNKNOWN");
goto check_ip_options;
}
/* Map the IP address to a host name. */
! hp = gethostbyaddr((char *)&from.sin_addr, sizeof(struct in_addr),
! from.sin_family);
! if (hp)
{
/* Got host name. */
- strncpy(name, hp->h_name, sizeof(name));
name[sizeof(name) - 1] = '\0';
/* Convert it to all lowercase (which is expected by the rest of this
--- 74,89 ----
strcpy(name, "UNKNOWN");
goto check_ip_options;
}
+
+ getnameinfo((struct sockaddr *)&from, fromlen,
+ ntop, sizeof(ntop), NULL, 0, NI_NUMERICHOST);
/* Map the IP address to a host name. */
! if (getnameinfo((struct sockaddr *)&from, fromlen,
! name, sizeof(name),
! NULL, 0, NI_NAMEREQD) == 0)
{
/* Got host name. */
name[sizeof(name) - 1] = '\0';
/* Convert it to all lowercase (which is expected by the rest of this
***************
*** 95,119 ****
Mapping from name to IP address can be trusted better (but can still
be fooled if the intruder has access to the name server of the
domain). */
! hp = gethostbyname(name);
! if (!hp)
{
log_msg("reverse mapping checking gethostbyname for %.700s failed - POSSIBLE BREAKIN ATTEMPT!", name);
! strcpy(name, inet_ntoa(from.sin_addr));
goto check_ip_options;
}
/* Look for the address from the list of addresses. */
! for (i = 0; hp->h_addr_list[i]; i++)
! if (memcmp(hp->h_addr_list[i], &from.sin_addr, sizeof(from.sin_addr))
! == 0)
! break;
/* If we reached the end of the list, the address was not there. */
! if (!hp->h_addr_list[i])
{
/* Address not found for the host name. */
log_msg("Address %.100s maps to %.600s, but this does not map back to the address - POSSIBLE BREAKIN ATTEMPT!",
! inet_ntoa(from.sin_addr), name);
! strcpy(name, inet_ntoa(from.sin_addr));
goto check_ip_options;
}
/* Address was found for the host name. We accept the host name. */
--- 98,127 ----
Mapping from name to IP address can be trusted better (but can still
be fooled if the intruder has access to the name server of the
domain). */
! memset(&hints, 0, sizeof(hints));
! hints.ai_family = from.__ss_family;
! if (getaddrinfo(name, NULL, &hints, &aitop) != 0)
{
log_msg("reverse mapping checking gethostbyname for %.700s failed - POSSIBLE BREAKIN ATTEMPT!", name);
! strcpy(name, ntop);
goto check_ip_options;
}
/* Look for the address from the list of addresses. */
! for (ai = aitop; ai; ai = ai->ai_next)
! {
! getnameinfo(ai->ai_addr, ai->ai_addrlen,
! ntop2, sizeof(ntop2), NULL, 0, NI_NUMERICHOST);
! if (strcmp(ntop, ntop2) == 0)
! break;
! }
! freeaddrinfo(aitop);
/* If we reached the end of the list, the address was not there. */
! if (!ai)
{
/* Address not found for the host name. */
log_msg("Address %.100s maps to %.600s, but this does not map back to the address - POSSIBLE BREAKIN ATTEMPT!",
! ntop, name);
! strcpy(name, ntop);
goto check_ip_options;
}
/* Address was found for the host name. We accept the host name. */
***************
*** 121,127 ****
else
{
/* Host name not found. Use ascii representation of the address. */
! strcpy(name, inet_ntoa(from.sin_addr));
log_msg("Could not reverse map address %.100s.", name);
}
--- 129,135 ----
else
{
/* Host name not found. Use ascii representation of the address. */
! strcpy(name, ntop);
log_msg("Could not reverse map address %.100s.", name);
}
***************
*** 136,141 ****
--- 144,150 ----
Notice also that if we just dropped source routing here, the other
side could use IP spoofing to do rest of the interaction and could still
bypass security. So we exit here if we detect any IP options. */
+ if (from.__ss_family == AF_INET) /* IP options -- IPv4 only */
{
unsigned char options[200], *ucp;
char text[1024], *cp;
***************
*** 157,165 ****
for (ucp = options; option_size > 0; ucp++, option_size--, cp += 3)
sprintf(cp, " %2.2x", *ucp);
log_msg("Connection from %.100s with IP options:%.800s",
! inet_ntoa(from.sin_addr), text);
packet_disconnect("Connection from %.100s with IP options:%.800s",
! inet_ntoa(from.sin_addr), text);
}
}
#endif
--- 166,174 ----
for (ucp = options; option_size > 0; ucp++, option_size--, cp += 3)
sprintf(cp, " %2.2x", *ucp);
log_msg("Connection from %.100s with IP options:%.800s",
! ntop, text);
packet_disconnect("Connection from %.100s with IP options:%.800s",
! ntop, text);
}
}
#endif
***************
*** 177,183 ****
const char *get_canonical_hostname(void)
{
int fromlen, tolen;
! struct sockaddr_in from, to;
/* Check if we have previously retrieved this same name. */
if (canonical_host_name != NULL)
--- 186,192 ----
const char *get_canonical_hostname(void)
{
int fromlen, tolen;
! struct sockaddr_storage from, to;
/* Check if we have previously retrieved this same name. */
if (canonical_host_name != NULL)
***************
*** 200,207 ****
&tolen) < 0)
goto no_ip_addr;
! if (from.sin_family == AF_INET && to.sin_family == AF_INET &&
! memcmp(&from, &to, sizeof(from)) == 0)
goto return_ip_addr;
no_ip_addr:
--- 209,215 ----
&tolen) < 0)
goto no_ip_addr;
! if (fromlen == tolen && memcmp(&from, &to, fromlen) == 0)
goto return_ip_addr;
no_ip_addr:
***************
*** 221,228 ****
const char *get_remote_ipaddr(void)
{
! struct sockaddr_in from, to;
int fromlen, tolen, socket;
/* Check if we have previously retrieved this same name. */
if (canonical_host_ip != NULL)
--- 229,237 ----
const char *get_remote_ipaddr(void)
{
! struct sockaddr_storage from, to;
int fromlen, tolen, socket;
+ char ntop[ADDRSTRLEN];
/* Check if we have previously retrieved this same name. */
if (canonical_host_ip != NULL)
***************
*** 245,252 ****
&tolen) < 0)
goto no_ip_addr;
! if (from.sin_family == AF_INET && to.sin_family == AF_INET &&
! memcmp(&from, &to, sizeof(from)) == 0)
goto return_ip_addr;
no_ip_addr:
--- 254,260 ----
&tolen) < 0)
goto no_ip_addr;
! if (fromlen == tolen && memcmp(&from, &to, fromlen) == 0)
goto return_ip_addr;
no_ip_addr:
***************
*** 269,275 ****
}
/* Get the IP address in ascii. */
! canonical_host_ip = xstrdup(inet_ntoa(from.sin_addr));
/* Return ip address string. */
return canonical_host_ip;
--- 277,285 ----
}
/* Get the IP address in ascii. */
! getnameinfo((struct sockaddr *)&from, fromlen,
! ntop, sizeof(ntop), NULL, 0, NI_NUMERICHOST);
! canonical_host_ip = xstrdup(ntop);
/* Return ip address string. */
return canonical_host_ip;
***************
*** 279,286 ****
int get_peer_port(int sock)
{
! struct sockaddr_in from;
int fromlen;
/* Get IP address of client. */
fromlen = sizeof(from);
--- 289,297 ----
int get_peer_port(int sock)
{
! struct sockaddr_storage from;
int fromlen;
+ char strport[PORTSTRLEN];
/* Get IP address of client. */
fromlen = sizeof(from);
***************
*** 292,298 ****
}
/* Return port number. */
! return ntohs(from.sin_port);
}
/* Returns the port number of the remote host. */
--- 303,311 ----
}
/* Return port number. */
! getnameinfo((struct sockaddr *)&from, fromlen,
! NULL, 0, strport, sizeof(strport), NI_NUMERICSERV);
! return atoi(strport);
}
/* Returns the port number of the remote host. */
***************
*** 301,307 ****
{
int socket;
int fromlen, tolen;
! struct sockaddr_in from, to;
/* If two different descriptors, check if they are internet-domain, and
have the same address. */
--- 314,320 ----
{
int socket;
int fromlen, tolen;
! struct sockaddr_storage from, to;
/* If two different descriptors, check if they are internet-domain, and
have the same address. */
***************
*** 319,326 ****
&tolen) < 0)
goto no_ip_addr;
! if (from.sin_family == AF_INET && to.sin_family == AF_INET &&
! memcmp(&from, &to, sizeof(from)) == 0)
goto return_port;
no_ip_addr:
--- 332,338 ----
&tolen) < 0)
goto no_ip_addr;
! if (fromlen == tolen && memcmp(&from, &to, fromlen) == 0)
goto return_port;
no_ip_addr:
***************
*** 335,337 ****
--- 347,413 ----
/* Get and return the peer port number. */
return get_peer_port(socket);
}
+
+ /* Returns the port of the local of the socket. */
+
+ int get_sock_port(int sock)
+ {
+ struct sockaddr_storage from;
+ int fromlen;
+ char strport[PORTSTRLEN];
+
+ /* Get IP address of client. */
+ fromlen = sizeof(from);
+ memset(&from, 0, sizeof(from));
+ if (getsockname(sock, (struct sockaddr *)&from, &fromlen) < 0)
+ {
+ error("getsockname failed: %.100s", strerror(errno));
+ return 0;
+ }
+
+ /* Return port number. */
+ getnameinfo((struct sockaddr *)&from, fromlen,
+ NULL, 0, strport, sizeof(strport), NI_NUMERICSERV);
+ return atoi(strport);
+ }
+
+ /* Returns the port number of the local host. */
+
+ int get_local_port()
+ {
+ int socket;
+ int fromlen, tolen;
+ struct sockaddr_storage from, to;
+
+ /* If two different descriptors, check if they are internet-domain, and
+ have the same address. */
+ if (packet_get_connection_in() != packet_get_connection_out())
+ {
+ fromlen = sizeof(from);
+ memset(&from, 0, sizeof(from));
+ if (getsockname(packet_get_connection_in(), (struct sockaddr *)&from,
+ &fromlen) < 0)
+ goto no_ip_addr;
+
+ tolen = sizeof(to);
+ memset(&to, 0, sizeof(to));
+ if (getsockname(packet_get_connection_out(), (struct sockaddr *)&to,
+ &tolen) < 0)
+ goto no_ip_addr;
+
+ if (fromlen == tolen && memcmp(&from, &to, fromlen) == 0)
+ goto return_port;
+
+ no_ip_addr:
+ return 65535;
+ }
+
+ return_port:
+
+ /* Get client socket. */
+ socket = packet_get_connection_in();
+
+ /* Get and return the local port number. */
+ return get_sock_port(socket);
+ }
+

View File

@ -1,60 +0,0 @@
*** config.h.in.orig Wed May 12 13:20:04 1999
--- config.h.in Thu Feb 24 17:12:10 2000
***************
*** 285,290 ****
--- 285,292 ----
#undef Rdup2
#undef Rfclose
#undef Rgethostbyname
+ #undef Rgetaddrinfo
+
/* Set this to allow group writeability of $HOME, .ssh and authorized_keys */
#undef ALLOW_GROUP_WRITEABILITY
***************
*** 323,328 ****
--- 325,348 ----
/etc/nologin.allow. */
#undef NOLOGIN_ALLOW
+ /* Define this if you have struct sockaddr_storage. */
+ #undef HAVE_SOCKADDR_STORAGE
+
+ /* Define this if you have __sa_family in struct sockaddr_storage. */
+ #undef HAVE_NEW_SS_FAMILY
+
+ /* Define this if you have ss_len in struct sockaddr. */
+ #undef HAVE_SOCKADDR_LEN
+
+ /* Define this if you want to enable IPv6 support. */
+ #undef ENABLE_IPV6
+
+ /* Define this if you want to enable another port try support. */
+ #undef ENABLE_ANOTHER_PORT_TRY
+
+ /* Define this if you want to enable logging auth info support. */
+ #undef ENABLE_LOG_AUTH
+
/* Where to find the X11 socket */
#undef X11_DIR
***************
*** 375,385 ****
--- 395,411 ----
/* Define if you have the ftruncate function. */
#undef HAVE_FTRUNCATE
+ /* Define if you have the getaddrinfo function. */
+ #undef HAVE_GETADDRINFO
+
/* Define if you have the getdtablesize function. */
#undef HAVE_GETDTABLESIZE
/* Define if you have the gethostname function. */
#undef HAVE_GETHOSTNAME
+
+ /* Define if you have the getnameinfo function. */
+ #undef HAVE_GETNAMEINFO
/* Define if you have the getpseudotty function. */
#undef HAVE_GETPSEUDOTTY

View File

@ -1,370 +0,0 @@
--- configure.in.orig Wed May 12 04:20:02 1999
+++ configure.in Wed Apr 19 01:02:34 2000
@@ -30,8 +30,140 @@
fi
AC_PROG_CC
+AC_PROG_CPP
AC_ISC_POSIX
+AC_MSG_CHECKING([whether to enable ipv6])
+AC_ARG_ENABLE(ipv6,
+[ --enable-ipv6 Enable ipv6 (with ipv4) support
+ --disable-ipv6 Disable ipv6 support],
+[ case "$enableval" in
+ no)
+ AC_MSG_RESULT(no)
+ ipv6=no
+ ;;
+ *) AC_MSG_RESULT(yes)
+ AC_DEFINE(ENABLE_IPV6)
+ ipv6=yes
+ ;;
+ esac ],
+
+ AC_TRY_RUN([ /* AF_INET6 avalable check */
+#include <sys/types.h>
+#include <sys/socket.h>
+main()
+{
+ if (socket(AF_INET6, SOCK_STREAM, 0) < 0)
+ exit(1);
+ else
+ exit(0);
+}
+],
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(ENABLE_IPV6)
+ ipv6=yes,
+ AC_MSG_RESULT(no)
+ ipv6=no,
+ AC_MSG_RESULT(no)
+ ipv6=no
+))
+
+ipv6type=unknown
+ipv6lib=none
+
+if test "$ipv6" = "yes"; then
+ AC_MSG_CHECKING([ipv6 stack type])
+ for i in inria kame linux toshiba v6d zeta; do
+ case $i in
+ inria)
+ dnl http://www.kame.net/
+ AC_EGREP_CPP(yes, [dnl
+#include <netinet/in.h>
+#ifdef IPV6_INRIA_VERSION
+yes
+#endif],
+ [ipv6type=$i;
+ CPPFLAGS="-DINET6 $CPPFLAGS"])
+ ;;
+ kame)
+ dnl http://www.kame.net/
+ AC_EGREP_CPP(yes, [dnl
+#include <netinet/in.h>
+#ifdef __KAME__
+yes
+#endif],
+ [ipv6type=$i;
+ CPPFLAGS="-DINET6 $CPPFLAGS"])
+ ;;
+ linux)
+ dnl http://www.v6.linux.or.jp/
+ if test -d /usr/inet6; then
+ ipv6type=$i
+ ipv6lib=inet6
+ ipv6libdir=/usr/inet6/lib
+ CPPFLAGS="-DINET6 -I/usr/inet6/include $CPPFLAGS"
+ fi
+ ;;
+ toshiba)
+ AC_EGREP_CPP(yes, [dnl
+#include <sys/param.h>
+#ifdef _TOSHIBA_INET6
+yes
+#endif],
+ [ipv6type=$i;
+ ipv6lib=inet6;
+ ipv6libdir=/usr/local/v6/lib;
+ CPPFLAGS="-DINET6 $CPPFLAGS"])
+ ;;
+ v6d)
+ AC_EGREP_CPP(yes, [dnl
+#include </usr/local/v6/include/sys/v6config.h>
+#ifdef __V6D__
+yes
+#endif],
+ [ipv6type=$i;
+ ipv6lib=v6;
+ ipv6libdir=/usr/local/v6/lib;
+ CPPFLAGS="-I/usr/local/v6/include $CPPFLAGS"])
+ ;;
+ zeta)
+ AC_EGREP_CPP(yes, [dnl
+#include <sys/param.h>
+#ifdef _ZETA_MINAMI_INET6
+yes
+#endif],
+ [ipv6type=$i;
+ ipv6lib=inet6;
+ ipv6libdir=/usr/local/v6/lib;
+ CPPFLAGS="-DINET6 $CPPFLAGS"])
+ ;;
+ esac
+ if test "$ipv6type" != "unknown"; then
+ break
+ fi
+ done
+ AC_MSG_RESULT($ipv6type)
+fi
+
+if test "$ipv6" = "yes" -a -f /usr/local/v6/lib/libinet6.a; then
+ ac_inet6_LDFLAGS="inet6"
+ ipv6libdir=/usr/local/v6/lib
+ LDFLAGS="$LDFLAGS -L/usr/local/v6/lib"
+ AC_CHECK_LIB(inet6, getaddrinfo, , ipv6lib="$ac_inet6_LDFLAGS")
+fi
+
+
+if test "$ipv6" = "yes" -a "$ipv6lib" != "none"; then
+ if test -d $ipv6libdir -a -f $ipv6libdir/lib$ipv6lib.a; then
+ LIBS="-L$ipv6libdir -l$ipv6lib $LIBS"
+ else
+ echo 'Fatal: no $ipv6lib library found. cannot continue.'
+ echo "You need to fetch lib$ipv6lib.a from appropriate"
+ echo 'ipv6 kit and compile beforehand.'
+ exit 1
+ fi
+fi
+
AC_DEFINE_UNQUOTED(HOSTTYPE, "$host")
case "$host" in
@@ -313,7 +445,7 @@
# Socket pairs appear to be broken on several systems. I don't know exactly
# where, so I'll use pipes everywhere for now.
-AC_DEFINE(USE_PIPES)
+# AC_DEFINE(USE_PIPES)
AC_MSG_CHECKING([that the compiler works])
AC_TRY_RUN([ main(int ac, char **av) { return 0; } ],
@@ -369,7 +501,7 @@
AC_HEADER_STDC
AC_HEADER_SYS_WAIT
-AC_CHECK_HEADERS(unistd.h rusage.h sys/time.h lastlog.h utmp.h shadow.h)
+AC_CHECK_HEADERS(unistd.h rusage.h sys/time.h lastlog.h login_cap.h utmp.h shadow.h)
AC_CHECK_HEADERS(sgtty.h sys/select.h sys/ioctl.h machine/endian.h)
AC_CHECK_HEADERS(paths.h usersec.h utime.h netinet/in_systm.h)
AC_CHECK_HEADERS(netinet/in_system.h netinet/ip.h netinet/tcp.h ulimit.h)
@@ -399,6 +531,16 @@
[ AC_DEFINE(HAVE_INCOMPATIBLE_SIGINFO)
AC_MSG_RESULT(yes)] , AC_MSG_RESULT(no))
+AC_MSG_CHECKING([whether sys/socket.h have struct sockaddr_storage])
+AC_EGREP_HEADER(sockaddr_storage, sys/socket.h,
+ [ AC_DEFINE(HAVE_SOCKADDR_STORAGE) AC_MSG_RESULT(yes)], AC_MSG_RESULT(no))
+AC_MSG_CHECKING([whether sys/socket.h have __ss_family])
+AC_EGREP_HEADER(__ss_family, sys/socket.h,
+ [ AC_DEFINE(HAVE_NEW_SS_FAMILY) AC_MSG_RESULT(yes)], AC_MSG_RESULT(no))
+AC_MSG_CHECKING([whether sys/socket.h have sa_len])
+AC_EGREP_HEADER(sa_len, sys/socket.h,
+ [ AC_DEFINE(HAVE_SOCKADDR_LEN) AC_MSG_RESULT(yes)], AC_MSG_RESULT(no))
+
AC_CHECK_LIB(c, crypt, [true], AC_CHECK_LIB(crypt, crypt))
AC_CHECK_LIB(sec, getspnam)
AC_CHECK_LIB(seq, get_process_stats)
@@ -436,6 +578,107 @@
AC_REPLACE_FUNCS(strerror memmove remove random putenv crypt socketpair snprintf)
+AC_MSG_CHECKING(getaddrinfo bug)
+AC_TRY_RUN([
+#include <sys/types.h>
+#include <netdb.h>
+#include <string.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+
+main()
+{
+ int passive, gaierr, inet4 = 0, inet6 = 0;
+ struct addrinfo hints, *ai, *aitop;
+ char straddr[INET6_ADDRSTRLEN], strport[16];
+
+ for (passive = 0; passive <= 1; passive++) {
+ memset(&hints, 0, sizeof(hints));
+ hints.ai_family = AF_UNSPEC;
+ hints.ai_flags = passive ? AI_PASSIVE : 0;
+ hints.ai_socktype = SOCK_STREAM;
+ if ((gaierr = getaddrinfo(NULL, "54321", &hints, &aitop)) != 0) {
+ (void)gai_strerror(gaierr);
+ goto bad;
+ }
+ for (ai = aitop; ai; ai = ai->ai_next) {
+ if (ai->ai_addr == NULL ||
+ ai->ai_addrlen == 0 ||
+ getnameinfo(ai->ai_addr, ai->ai_addrlen,
+ straddr, sizeof(straddr), strport, sizeof(strport),
+ NI_NUMERICHOST|NI_NUMERICSERV) != 0) {
+ goto bad;
+ }
+ if (strcmp(strport, "54321") != 0) {
+ goto bad;
+ }
+ switch (ai->ai_family) {
+ case AF_INET:
+ if (passive) {
+ if (strcmp(straddr, "0.0.0.0") != 0) {
+ goto bad;
+ }
+ } else {
+ if (strcmp(straddr, "127.0.0.1") != 0) {
+ goto bad;
+ }
+ }
+ inet4++;
+ break;
+ case AF_INET6:
+ if (passive) {
+ if (strcmp(straddr, "::") != 0) {
+ goto bad;
+ }
+ } else {
+ if (strcmp(straddr, "::1") != 0) {
+ goto bad;
+ }
+ }
+ inet6++;
+ break;
+ case AF_UNSPEC:
+ goto bad;
+ break;
+ default:
+ /* another family support? */
+ break;
+ }
+ }
+ }
+
+ if (!(inet4 == 0 || inet4 == 2))
+ goto bad;
+ if (!(inet6 == 0 || inet6 == 2))
+ goto bad;
+
+ if (aitop)
+ freeaddrinfo(aitop);
+ exit(0);
+
+ bad:
+ if (aitop)
+ freeaddrinfo(aitop);
+ exit(1);
+}
+],
+AC_MSG_RESULT(good)
+buggygetaddrinfo=no,
+AC_MSG_RESULT(buggy)
+buggygetaddrinfo=yes,
+AC_MSG_RESULT(buggy)
+buggygetaddrinfo=yes)
+
+if test "$buggygetaddrinfo" = "yes"; then
+ if test "$ipv6" = "yes"; then
+ echo 'Fatal: You must get working getaddrinfo() function.'
+ echo ' or you can specify "--disable-ipv6"'.
+ exit 1
+ else
+ AC_REPLACE_FUNCS(getaddrinfo getnameinfo)
+ fi
+fi
+
AC_PROG_LN_S
AC_PROG_INSTALL
AC_CHECK_PROG(AR, ar, ar, echo)
@@ -932,7 +1175,11 @@
AC_DEFINE(KRB5)
KERBEROS_ROOT="$with_kerberos5"
KERBEROS_INCS="-I${KERBEROS_ROOT}/include"
- KERBEROS_LIBS="-L${KERBEROS_ROOT}/lib -lgssapi_krb5 -lkrb5 -lcrypto -lcom_err"
+ if test -f ${KERBEROS_ROOT}/lib/libk5crypto.a ; then
+ KERBEROS_LIBS="-L${KERBEROS_ROOT}/lib -lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err"
+ else
+ KERBEROS_LIBS="-L${KERBEROS_ROOT}/lib -lgssapi_krb5 -lkrb5 -lcrypto -lcom_err"
+ fi
AC_CHECK_LIB(ndbm, dbm_open, KERBEROS_LIBS="$KERBEROS_LIBS -lndbm")
KERBEROS_OBJS="auth-kerberos.o"
;;
@@ -1123,6 +1370,7 @@
AC_DEFINE(Rdup2,SOCKSdup2)
AC_DEFINE(Rfclose,SOCKSfclose)
AC_DEFINE(Rgethostbyname,SOCKSgethostbyname)
+ AC_DEFINE(Rgetaddrinfo,SOCKSgetaddrinfo)
fi
AC_MSG_CHECKING(whether to use rsaref)
@@ -1252,6 +1500,38 @@
AC_DEFINE(ENABLE_TCP_NODELAY)
)
+AC_MSG_CHECKING(whether to enable another port try support)
+AC_ARG_ENABLE(another-port-try,
+[ --enable-another-port-try Enable another port try support (default)
+ --disable-another-port-try Disable another port try support],
+[ case "$enableval" in
+ no)
+ AC_MSG_RESULT(no)
+ ;;
+ *) AC_MSG_RESULT(yes)
+ AC_DEFINE(ENABLE_ANOTHER_PORT_TRY)
+ ;;
+ esac ],
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(ENABLE_ANOTHER_PORT_TRY)
+)
+
+AC_MSG_CHECKING(whether to enable logging auth info support)
+AC_ARG_ENABLE(log-auth,
+[ --enable-log-auth Enable logging auth info support (default)
+ --disable-log-auth Disable logging auth info support],
+[ case "$enableval" in
+ no)
+ AC_MSG_RESULT(no)
+ ;;
+ *) AC_MSG_RESULT(yes)
+ AC_DEFINE(ENABLE_LOG_AUTH)
+ ;;
+ esac ],
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(ENABLE_LOG_AUTH)
+)
+
AC_MSG_CHECKING(whether to enable SO_LINGER)
AC_ARG_ENABLE(so-linger,
[ --enable-so-linger Enable setting SO_LINGER socket option],
@@ -1311,6 +1591,8 @@
AC_DEFINE(SCP_ALL_STATISTICS_ENABLED)
)
+CFLAGS="$CPPFLAGS $CFLAGS"
+
# We include this here only to make it visible in --help; this is only used
# in the gmp subdirectory.
AC_ARG_ENABLE(asm,
@@ -1324,7 +1606,7 @@
fi
AC_MSG_RESULT($PIDDIR)
-AC_CONFIG_SUBDIRS(gmp-2.0.2-ssh-2)
+#AC_CONFIG_SUBDIRS(gmp-2.0.2-ssh-2)
AC_ARG_PROGRAM
@@ -1336,4 +1618,4 @@
AC_SUBST(SSHDCONFOBJS)
AC_SUBST(SSHINSTALLMODE)
-AC_OUTPUT(Makefile sshd.8 ssh.1 make-ssh-known-hosts.1 zlib-1.0.4/Makefile)
+AC_OUTPUT(Makefile sshd.8 ssh.1 make-ssh-known-hosts.1 make-ssh-known-hosts.pl)

View File

@ -1,17 +0,0 @@
*** gai.h.orig Mon Jan 10 22:56:13 2000
--- gai.h Mon Jan 10 22:56:13 2000
***************
*** 0 ****
--- 1,12 ----
+ /*
+ * fake library for ssh
+ *
+ * This file is included in getaddrinfo.c and getnameinfo.c.
+ * See getaddrinfo.c and getnameinfo.c.
+ */
+
+ /* for old netdb.h */
+ #ifndef EAI_NODATA
+ #define EAI_NODATA 1
+ #define EAI_MEMORY 2
+ #endif

View File

@ -1,120 +0,0 @@
*** getaddrinfo.c.orig Mon Jan 10 22:56:13 2000
--- getaddrinfo.c Mon Jan 10 22:56:13 2000
***************
*** 0 ****
--- 1,115 ----
+ /*
+ * fake library for ssh
+ *
+ * This file includes getaddrinfo(), freeaddrinfo() and gai_strerror().
+ * These funtions are defined in rfc2133.
+ *
+ * But these functions are not implemented correctly. The minimum subset
+ * is implemented for ssh use only. For exapmle, this routine assumes
+ * that ai_family is AF_INET. Don't use it for another purpose.
+ *
+ * In the case not using 'configure --enable-ipv6', this getaddrinfo.c
+ * will be used if you have broken getaddrinfo or no getaddrinfo.
+ */
+
+ #include "includes.h"
+ #include "ssh.h"
+
+ #include "gai.h"
+
+ static struct addrinfo *
+ malloc_ai(port, addr)
+ int port;
+ u_long addr;
+ {
+ struct addrinfo *ai;
+
+ if (ai = (struct addrinfo *)malloc(sizeof(struct addrinfo) +
+ sizeof(struct sockaddr_in))) {
+ memset(ai, 0, sizeof(struct addrinfo) + sizeof(struct sockaddr_in));
+ ai->ai_addr = (struct sockaddr *)(ai + 1);
+ /* XXX -- ssh doesn't use sa_len */
+ ai->ai_addrlen = sizeof(struct sockaddr_in);
+ ai->ai_addr->sa_family = ai->ai_family = AF_INET;
+ ((struct sockaddr_in *)(ai)->ai_addr)->sin_port = port;
+ ((struct sockaddr_in *)(ai)->ai_addr)->sin_addr.s_addr = addr;
+ return ai;
+ } else {
+ return NULL;
+ }
+ }
+
+ char *
+ gai_strerror(ecode)
+ int ecode;
+ {
+ switch (ecode) {
+ case EAI_NODATA:
+ return "no address associated with hostname.";
+ case EAI_MEMORY:
+ return "memory allocation failure.";
+ default:
+ return "unknown error.";
+ }
+ }
+
+ void
+ freeaddrinfo(ai)
+ struct addrinfo *ai;
+ {
+ struct addrinfo *next;
+
+ do {
+ next = ai->ai_next;
+ free(ai);
+ } while (ai = next);
+ }
+
+ int
+ getaddrinfo(hostname, servname, hints, res)
+ const char *hostname, *servname;
+ const struct addrinfo *hints;
+ struct addrinfo **res;
+ {
+ struct addrinfo *cur, *prev = NULL;
+ struct hostent *hp;
+ int i, port;
+
+ if (servname)
+ port = htons(atoi(servname));
+ else
+ port = 0;
+ if (hints && hints->ai_flags & AI_PASSIVE)
+ if (*res = malloc_ai(port, htonl(0x00000000)))
+ return 0;
+ else
+ return EAI_MEMORY;
+ if (!hostname)
+ if (*res = malloc_ai(port, htonl(0x7f000001)))
+ return 0;
+ else
+ return EAI_MEMORY;
+ if (inet_addr(hostname) != -1)
+ if (*res = malloc_ai(port, inet_addr(hostname)))
+ return 0;
+ else
+ return EAI_MEMORY;
+ if ((hp = gethostbyname(hostname)) &&
+ hp->h_name && hp->h_name[0] && hp->h_addr_list[0]) {
+ for (i = 0; hp->h_addr_list[i]; i++)
+ if (cur = malloc_ai(port,
+ ((struct in_addr *)hp->h_addr_list[i])->s_addr)) {
+ if (prev)
+ prev->ai_next = cur;
+ else
+ *res = cur;
+ prev = cur;
+ } else {
+ if (*res)
+ freeaddrinfo(*res);
+ return EAI_MEMORY;
+ }
+ return 0;
+ }
+ return EAI_NODATA;
+ }

View File

@ -1,66 +0,0 @@
*** getnameinfo.c.orig Mon Jan 10 22:56:13 2000
--- getnameinfo.c Mon Jan 10 22:56:13 2000
***************
*** 0 ****
--- 1,61 ----
+ /*
+ * fake library for ssh
+ *
+ * This file includes getnameinfo().
+ * These funtions are defined in rfc2133.
+ *
+ * But these functions are not implemented correctly. The minimum subset
+ * is implemented for ssh use only. For exapmle, this routine assumes
+ * that ai_family is AF_INET. Don't use it for another purpose.
+ *
+ * In the case not using 'configure --enable-ipv6', this getnameinfo.c
+ * will be used if you have broken getnameinfo or no getnameinfo.
+ */
+
+ #include "includes.h"
+ #include "ssh.h"
+
+ #include "gai.h"
+
+ int
+ getnameinfo(sa, salen, host, hostlen, serv, servlen, flags)
+ const struct sockaddr *sa;
+ size_t salen;
+ char *host;
+ size_t hostlen;
+ char *serv;
+ size_t servlen;
+ int flags;
+ {
+ struct sockaddr_in *sin = (struct sockaddr_in *)sa;
+ struct hostent *hp;
+ char tmpserv[16];
+
+ if (serv) {
+ sprintf(tmpserv, "%d", ntohs(sin->sin_port));
+ if (strlen(tmpserv) > servlen)
+ return EAI_MEMORY;
+ else
+ strcpy(serv, tmpserv);
+ }
+ if (host)
+ if (flags & NI_NUMERICHOST)
+ if (strlen(inet_ntoa(sin->sin_addr)) > hostlen)
+ return EAI_MEMORY;
+ else {
+ strcpy(host, inet_ntoa(sin->sin_addr));
+ return 0;
+ }
+ else
+ if (hp = gethostbyaddr((char *)&sin->sin_addr, sizeof(struct in_addr),
+ AF_INET))
+ if (strlen(hp->h_name) > hostlen)
+ return EAI_MEMORY;
+ else {
+ strcpy(host, hp->h_name);
+ return 0;
+ }
+ else
+ return EAI_NODATA;
+ return 0;
+ }

View File

@ -1,56 +0,0 @@
*** log-server.c.orig Wed May 12 13:19:26 1999
--- log-server.c Mon Jan 10 22:56:13 2000
***************
*** 146,151 ****
--- 146,170 ----
syslog(LOG_INFO, "log: %.500s", buf);
}
+ #ifdef ENABLE_LOG_AUTH
+ void log_auth(const char *fmt, ...)
+ {
+ char buf[1024];
+ va_list args;
+ extern int log_auth_flag;
+ if (!log_auth_flag)
+ return;
+ if (log_quiet)
+ return;
+ va_start(args, fmt);
+ vsprintf(buf, fmt, args);
+ va_end(args);
+ if (log_on_stderr)
+ fprintf(stderr, "log: %s\n", buf);
+ syslog(LOG_INFO|LOG_AUTH, "%.500s", buf);
+ }
+ #endif /* ENABLE_LOG_AUTH */
+
/* Converts portable syslog severity to machine-specific syslog severity. */
static int syslog_severity(int severity)
***************
*** 322,327 ****
--- 341,349 ----
{
char buf[1024];
va_list args;
+ #ifdef ENABLE_LOG_AUTH
+ extern char *unauthenticated_user;
+ #endif /* ENABLE_LOG_AUTH */
if (log_quiet)
exit(1);
***************
*** 331,336 ****
--- 353,363 ----
if (log_on_stderr)
fprintf(stderr, "fatal: %s\n", buf);
syslog(syslog_severity(severity), "fatal: %.500s", buf);
+ #ifdef ENABLE_LOG_AUTH
+ if (unauthenticated_user)
+ log_auth("LOGIN FAILED %.100s from %.200s",
+ unauthenticated_user, get_canonical_hostname());
+ #endif /* ENABLE_LOG_AUTH */
do_fatal_cleanups();

View File

@ -1,16 +0,0 @@
*** match.c.orig Wed May 12 13:19:27 1999
--- match.c Mon Jan 10 22:56:13 2000
***************
*** 129,134 ****
--- 129,139 ----
is_ip_pattern = 0;
break;
}
+ for(p = pattern; *p; p++)
+ if (!(isxdigit(*p) || *p == ':' || *p == '?' || *p == '*'))
+ break;
+ if (ip && !*p)
+ is_ip_pattern = 1;
if (is_ip_pattern)
{
return match_pattern(ip, pattern);

View File

@ -1,66 +0,0 @@
*** readconf.c.orig Wed May 12 13:19:27 1999
--- readconf.c Mon Jan 10 22:56:13 2000
***************
*** 171,176 ****
--- 171,179 ----
oBatchMode, oStrictHostKeyChecking, oCompression, oCompressionLevel,
oKeepAlives, oUsePrivilegedPort, oKerberosAuthentication,
oKerberosTgtPassing, oClearAllForwardings, oNumberOfPasswordPrompts,
+ #ifdef ENABLE_ANOTHER_PORT_TRY
+ oAnotherPort,
+ #endif /* ENABLE_ANOTHER_PORT_TRY */
oXauthPath, oGatewayPorts, oPasswordPromptLogin, oPasswordPromptHost
} OpCodes;
***************
*** 194,199 ****
--- 197,205 ----
{ "hostname", oHostName },
{ "proxycommand", oProxyCommand },
{ "port", oPort },
+ #ifdef ENABLE_ANOTHER_PORT_TRY
+ { "anotherport", oAnotherPort },
+ #endif /* ENABLE_ANOTHER_PORT_TRY */
{ "cipher", oCipher },
{ "remoteforward", oRemoteForward },
{ "localforward", oLocalForward },
***************
*** 497,502 ****
--- 503,514 ----
*intptr = value;
break;
+ #ifdef ENABLE_ANOTHER_PORT_TRY
+ case oAnotherPort:
+ intptr = &options->another_port;
+ goto parse_int;
+ #endif /* ENABLE_ANOTHER_PORT_TRY */
+
case oConnectionAttempts:
intptr = &options->connection_attempts;
goto parse_int;
***************
*** 689,694 ****
--- 701,709 ----
options->keepalives = -1;
options->compression_level = -1;
options->port = -1;
+ #ifdef ENABLE_ANOTHER_PORT_TRY
+ options->another_port = -1;
+ #endif /* ENABLE_ANOTHER_PORT_TRY */
options->connection_attempts = -1;
options->number_of_password_prompts = -1;
options->password_prompt_login = -1;
***************
*** 759,764 ****
--- 774,783 ----
options->compression_level = 6;
if (options->port == -1)
options->port = 0; /* Filled in ssh_connect. */
+ #ifdef ENABLE_ANOTHER_PORT_TRY
+ if (options->another_port == -1)
+ options->another_port = 0;
+ #endif /* ENABLE_ANOTHER_PORT_TRY */
if (options->connection_attempts == -1)
options->connection_attempts = 4;
if (options->number_of_password_prompts == -1)

View File

@ -1,14 +0,0 @@
*** readconf.h.orig Wed May 12 13:19:27 1999
--- readconf.h Mon Jan 10 22:56:13 2000
***************
*** 98,103 ****
--- 98,106 ----
int use_privileged_port; /* Use privileged port */
int port; /* Port to connect. */
+ #ifdef ENABLE_ANOTHER_PORT_TRY
+ int another_port; /* Port to connect for -A option. */
+ #endif /* ENABLE_ANOTHER_PORT_TRY */
int connection_attempts; /* Max attempts (seconds) before giving up */
int number_of_password_prompts; /* Max number of password prompts */
int password_prompt_login; /* Show remote login at password prompt */

View File

@ -1,191 +0,0 @@
*** scp.c.orig Wed May 12 13:19:28 1999
--- scp.c Mon Jan 10 22:56:13 2000
***************
*** 180,185 ****
--- 180,193 ----
#define STDERR_FILENO 2
#endif
+ /* This is set to non-zero if IPv4 is desired. */
+ int IPv4 = 0;
+
+ #ifdef ENABLE_IPV6
+ /* This is set to non-zero if IPv6 is desired. */
+ int IPv6 = 0;
+ #endif
+
/* This is set to non-zero to enable verbose mode. */
int verbose = 0;
***************
*** 295,302 ****
--- 303,319 ----
}
args[i++] = "-x";
args[i++] = "-a";
+ #ifdef ENABLE_ANOTHER_PORT_TRY
+ args[i++] = "-A";
+ #endif /* ENABLE_ANOTHER_PORT_TRY */
args[i++] = "-oFallBackToRsh no";
args[i++] = "-oClearAllForwardings yes";
+ if (IPv4)
+ args[i++] = "-4";
+ #ifdef ENABLE_IPV6
+ if (IPv6)
+ args[i++] = "-6";
+ #endif
if (verbose)
args[i++] = "-v";
if (compress)
***************
*** 441,448 ****
statistics = 0;
fflag = tflag = 0;
! while ((ch = getopt(argc, argv, "aAqQdfprtvBCL1c:i:P:o:S:")) != EOF)
switch(ch) { /* User-visible flags. */
case 'S':
ssh_program = optarg;
break;
--- 458,477 ----
statistics = 0;
fflag = tflag = 0;
! while ((ch = getopt(argc, argv, "aAqQdfprtvBCL1c:i:P:o:S:4"
! #ifdef ENABLE_IPV6
! "6"
! #endif
! )) != EOF)
switch(ch) { /* User-visible flags. */
+ case '4':
+ IPv4 = 1;
+ break;
+ #ifdef ENABLE_IPV6
+ case '6':
+ IPv6 = 1;
+ break;
+ #endif
case 'S':
ssh_program = optarg;
break;
***************
*** 589,594 ****
--- 618,634 ----
exit(errs != 0);
}
+ char *
+ cleanhostname(host)
+ char *host;
+ {
+ if (*host == '[' && host[strlen(host) - 1] == ']') {
+ host[strlen(host) - 1] = '\0';
+ return (host + 1);
+ } else
+ return host;
+ }
+
void
toremote(targ, argc, argv)
char *targ, *argv[];
***************
*** 644,649 ****
--- 684,690 ----
bp = xmalloc(len);
if (host) {
*host++ = 0;
+ host = cleanhostname(host);
suser = argv[i];
if (*suser == '\0')
suser = pwd->pw_name;
***************
*** 655,667 ****
suser, host, cmd, src,
tuser ? tuser : "", tuser ? "@" : "",
thost, targ);
! } else
(void)snprintf(bp, len,
"exec %s%s %s -x -o'FallBackToRsh no' -o'ClearAllForwardings yes' -n %s %s %s '%s%s%s:%s'",
ssh_program, verbose ? " -v" : "", options,
! argv[i], cmd, src,
tuser ? tuser : "", tuser ? "@" : "",
thost, targ);
if (verbose)
fprintf(stderr, "Executing: %s\n", bp);
if (system(bp)) errs++;
--- 696,710 ----
suser, host, cmd, src,
tuser ? tuser : "", tuser ? "@" : "",
thost, targ);
! } else {
! host = cleanhostname(argv[i]);
(void)snprintf(bp, len,
"exec %s%s %s -x -o'FallBackToRsh no' -o'ClearAllForwardings yes' -n %s %s %s '%s%s%s:%s'",
ssh_program, verbose ? " -v" : "", options,
! host, cmd, src,
tuser ? tuser : "", tuser ? "@" : "",
thost, targ);
+ }
if (verbose)
fprintf(stderr, "Executing: %s\n", bp);
if (system(bp)) errs++;
***************
*** 671,677 ****
len = strlen(targ) + CMDNEEDS + 20;
bp = xmalloc(len);
(void)snprintf(bp, len, "%s -t %s", cmd, targ);
! host = thost;
if (do_cmd(host, tuser,
bp, &remin, &remout) < 0)
exit(1);
--- 714,720 ----
len = strlen(targ) + CMDNEEDS + 20;
bp = xmalloc(len);
(void)snprintf(bp, len, "%s -t %s", cmd, targ);
! host = cleanhostname(thost);
if (do_cmd(host, tuser,
bp, &remin, &remout) < 0)
exit(1);
***************
*** 721,726 ****
--- 764,770 ----
else if (!okname(suser))
continue;
}
+ host = cleanhostname(host);
len = strlen(src) + CMDNEEDS + 20;
bp = xmalloc(len);
(void)snprintf(bp, len, "%s -f %s", cmd, src);
***************
*** 1365,1375 ****
colon(cp)
char *cp;
{
if (*cp == ':') /* Leading colon is part of file name. */
return (0);
for (; *cp; ++cp) {
! if (*cp == ':')
return (cp);
if (*cp == '/')
return (0);
--- 1409,1427 ----
colon(cp)
char *cp;
{
+ int flag = 0;
+
if (*cp == ':') /* Leading colon is part of file name. */
return (0);
+ if (*cp == '[')
+ flag = 1;
for (; *cp; ++cp) {
! if (*cp == '@' && *(cp+1) == '[')
! flag = 1;
! if (*cp == ']' && *(cp+1) == ':' && flag)
! return (cp+1);
! if (*cp == ':' && !flag)
return (cp);
if (*cp == '/')
return (0);

View File

@ -1,197 +0,0 @@
*** servconf.c.orig Wed May 12 13:19:28 1999
--- servconf.c Mon Jan 10 22:56:13 2000
***************
*** 81,88 ****
void initialize_server_options(ServerOptions *options)
{
memset(options, 0, sizeof(*options));
! options->port = -1;
! options->listen_addr.s_addr = INADDR_ANY;
options->host_key_file = NULL;
options->random_seed_file = NULL;
options->pid_file = NULL;
--- 81,88 ----
void initialize_server_options(ServerOptions *options)
{
memset(options, 0, sizeof(*options));
! options->num_ports = 0;
! options->listen_addrs = NULL;
options->host_key_file = NULL;
options->random_seed_file = NULL;
options->pid_file = NULL;
***************
*** 92,97 ****
--- 92,100 ----
options->permit_root_login = -1;
options->ignore_rhosts = -1;
options->ignore_root_rhosts = -1;
+ #ifdef ENABLE_LOG_AUTH
+ options->log_auth = -1;
+ #endif /* ENABLE_LOG_AUTH */
options->quiet_mode = -1;
options->fascist_logging = -1;
options->print_motd = -1;
***************
*** 138,153 ****
void fill_default_server_options(ServerOptions *options)
{
! if (options->port == -1)
{
! struct servent *sp;
!
! sp = getservbyname(SSH_SERVICE_NAME, "tcp");
! if (sp)
! options->port = ntohs(sp->s_port);
! else
! options->port = SSH_DEFAULT_PORT;
! endservent();
}
if (options->host_key_file == NULL)
options->host_key_file = HOST_KEY_FILE;
--- 141,171 ----
void fill_default_server_options(ServerOptions *options)
{
! struct addrinfo hints, *ai, *aitop;
! char strport[PORTSTRLEN];
! int i;
!
! if (options->num_ports == 0)
! options->ports[options->num_ports++] = SSH_DEFAULT_PORT;
! if (options->listen_addrs == NULL)
{
! for (i = 0; i < options->num_ports; i++)
! {
! memset(&hints, 0, sizeof(hints));
! hints.ai_flags = AI_PASSIVE;
! hints.ai_family = IPv4or6;
! hints.ai_socktype = SOCK_STREAM;
! sprintf(strport, "%d", options->ports[i]);
! if (getaddrinfo(NULL, strport, &hints, &aitop) != 0)
! {
! fprintf(stderr, "fatal: getaddrinfo: Cannot get anyaddr.\n");
! exit(1);
! }
! for (ai = aitop; ai->ai_next; ai = ai->ai_next);
! ai->ai_next = options->listen_addrs;
! options->listen_addrs = aitop;
! }
! /* freeaddrinfo(options->listen_addrs) in sshd.c */
}
if (options->host_key_file == NULL)
options->host_key_file = HOST_KEY_FILE;
***************
*** 243,248 ****
--- 261,269 ----
{
sPort, sHostKeyFile, sServerKeyBits, sLoginGraceTime, sKeyRegenerationTime,
sPermitRootLogin, sQuietMode, sFascistLogging, sLogFacility,
+ #ifdef ENABLE_LOG_AUTH
+ sLogAuth,
+ #endif /* ENABLE_LOG_AUTH */
sRhostsAuthentication, sRhostsRSAAuthentication, sRSAAuthentication,
sTISAuthentication, sPasswordAuthentication, sAllowHosts, sDenyHosts,
sListenAddress, sPrintMotd, sIgnoreRhosts, sX11Forwarding, sX11DisplayOffset,
***************
*** 275,280 ****
--- 296,304 ----
{ "quietmode", sQuietMode },
{ "fascistlogging", sFascistLogging },
{ "syslogfacility", sLogFacility },
+ #ifdef ENABLE_LOG_AUTH
+ { "logauth", sLogAuth },
+ #endif /* ENABLE_LOG_AUTH */
{ "rhostsauthentication", sRhostsAuthentication },
{ "rhostsrsaauthentication", sRhostsRSAAuthentication },
{ "rsaauthentication", sRSAAuthentication },
***************
*** 367,372 ****
--- 391,399 ----
char *cp, **charptr;
int linenum, *intptr, i, value;
ServerOpCodes opcode;
+ struct addrinfo hints, *ai, *aitop;
+ char strport[PORTSTRLEN];
+ int gaierr;
f = fopen(filename, "r");
if (!f)
***************
*** 389,395 ****
switch (opcode)
{
case sPort:
! intptr = &options->port;
parse_int:
cp = strtok(NULL, WHITESPACE);
if (!cp)
--- 416,429 ----
switch (opcode)
{
case sPort:
! if (options->num_ports >= MAX_PORTS)
! {
! fprintf(stderr, "%s line %d: too many ports.\n",
! filename, linenum);
! exit(1);
! }
! options->ports[options->num_ports] = -1;
! intptr = &options->ports[options->num_ports++];
parse_int:
cp = strtok(NULL, WHITESPACE);
if (!cp)
***************
*** 452,462 ****
filename, linenum);
exit(1);
}
! #ifdef BROKEN_INET_ADDR
! options->listen_addr.s_addr = inet_network(cp);
! #else /* BROKEN_INET_ADDR */
! options->listen_addr.s_addr = inet_addr(cp);
! #endif /* BROKEN_INET_ADDR */
break;
case sHostKeyFile:
--- 486,510 ----
filename, linenum);
exit(1);
}
! if (options->num_ports == 0)
! options->ports[options->num_ports++] = SSH_DEFAULT_PORT;
! for (i = 0; i < options->num_ports; i++)
! {
! memset(&hints, 0, sizeof(hints));
! hints.ai_family = IPv4or6;
! hints.ai_socktype = SOCK_STREAM;
! sprintf(strport, "%d", options->ports[i]);
! if ((gaierr = getaddrinfo(cp, strport, &hints, &aitop)) != 0)
! {
! fprintf(stderr, "%s line %d: bad addr or host. (%s)\n",
! filename, linenum, gai_strerror(gaierr));
! exit(1);
! }
! for (ai = aitop; ai->ai_next; ai = ai->ai_next);
! ai->ai_next = options->listen_addrs;
! options->listen_addrs = aitop;
! }
! strtok(cp, WHITESPACE); /* getaddrinfo() may use strtok() */
break;
case sHostKeyFile:
***************
*** 531,536 ****
--- 579,590 ----
if (*intptr == -1)
*intptr = value;
break;
+
+ #ifdef ENABLE_LOG_AUTH
+ case sLogAuth:
+ intptr = &options->log_auth;
+ goto parse_flag;
+ #endif /* ENABLE_LOG_AUTH */
case sIgnoreRhosts:
intptr = &options->ignore_rhosts;

View File

@ -1,45 +0,0 @@
*** servconf.h.orig Wed May 12 13:19:28 1999
--- servconf.h Mon Jan 10 22:56:13 2000
***************
*** 64,69 ****
--- 64,71 ----
#ifndef SERVCONF_H
#define SERVCONF_H
+ #define MAX_PORTS 256 /* Max # hosts on allow list. */
+
#define MAX_ALLOW_SHOSTS 256 /* Max # hosts on allow shosts list. */
#define MAX_DENY_SHOSTS 256 /* Max # hosts on deny shosts list. */
#define MAX_ALLOW_HOSTS 256 /* Max # hosts on allow list. */
***************
*** 82,89 ****
typedef struct
{
! int port; /* Port number to listen on. */
! struct in_addr listen_addr; /* Address on which the server listens. */
char *host_key_file; /* File containing host key. */
char *random_seed_file; /* File containing random seed. */
char *pid_file; /* File containing process ID number. */
--- 84,92 ----
typedef struct
{
! unsigned int num_ports;
! int ports[MAX_PORTS]; /* Port number to listen on. */
! struct addrinfo *listen_addrs;/* Addresses on which the server listens. */
char *host_key_file; /* File containing host key. */
char *random_seed_file; /* File containing random seed. */
char *pid_file; /* File containing process ID number. */
***************
*** 91,96 ****
--- 94,102 ----
int login_grace_time; /* Disconnect if no auth in this time (sec). */
int key_regeneration_time; /* Server key lifetime (seconds). */
int permit_root_login; /* 0 = forced cmd only, 1 = no pwd, 2 = yes. */
+ #ifdef ENABLE_LOG_AUTH
+ int log_auth; /* If true, log authentication info. */
+ #endif /* ENABLE_LOG_AUTH */
int ignore_rhosts; /* Ignore .rhosts and .shosts. */
int ignore_root_rhosts; /* Ignore .rhosts and .shosts for root,
defaults to ignore_rhosts if not given. */

View File

@ -1,97 +0,0 @@
*** ssh.c.orig Wed May 12 13:19:28 1999
--- ssh.c Mon Jan 10 22:56:13 2000
***************
*** 218,223 ****
--- 218,231 ----
other functions. */
RandomState random_state;
+ /* Flag indicating whether IPv4 or IPv6. This can be set on the command line.
+ Default value is AF_UNSPEC means both IPv4 and IPv6. */
+ #ifdef ENABLE_IPV6
+ int IPv4or6 = AF_UNSPEC;
+ #else
+ int IPv4or6 = AF_INET;
+ #endif
+
/* Flag indicating whether debug mode is on. This can be set on the
command line. */
int debug_flag = 0;
***************
*** 277,282 ****
--- 285,297 ----
{
fprintf(stderr, "Usage: %s [options] host [command]\n", av0);
fprintf(stderr, "Options:\n");
+ fprintf(stderr, " -4 Use IPv4 only.\n");
+ #ifdef ENABLE_IPV6
+ fprintf(stderr, " -6 Use IPv6 only.\n");
+ #endif
+ #ifdef ENABLE_ANOTHER_PORT_TRY
+ fprintf(stderr, " -A Try to connect to another port before original port.\n");
+ #endif /* ENABLE_ANOTHER_PORT_TRY */
fprintf(stderr, " -l user Log in using this user name.\n");
fprintf(stderr, " -n Redirect input from /dev/null.\n");
fprintf(stderr, " -a Disable authentication agent forwarding.\n");
***************
*** 413,418 ****
--- 428,436 ----
#ifdef SIGWINCH
struct winsize ws;
#endif /* SIGWINCH */
+ #ifdef ENABLE_ANOTHER_PORT_TRY
+ int another_port_flag = 0;
+ #endif /* ENABLE_ANOTHER_PORT_TRY */
/* Save the original real uid. It will be needed later (uid-swapping may
clobber the real uid). */
***************
*** 522,527 ****
--- 540,565 ----
}
switch (opt)
{
+ case '4':
+ #ifdef ENABLE_IPV6
+ IPv4or6 = (IPv4or6 == AF_INET6) ? AF_UNSPEC : AF_INET;
+ #else
+ IPv4or6 = AF_INET;
+ #endif
+ break;
+
+ #ifdef ENABLE_IPV6
+ case '6':
+ IPv4or6 = (IPv4or6 == AF_INET) ? AF_UNSPEC : AF_INET6;
+ break;
+ #endif
+
+ #ifdef ENABLE_ANOTHER_PORT_TRY
+ case 'A':
+ another_port_flag = 1;
+ break;
+ #endif /* ENABLE_ANOTHER_PORT_TRY */
+
case 'n':
stdin_null_flag = 1;
break;
***************
*** 789,799 ****
--- 827,844 ----
{
use_privileged_port = 0;
}
+ #ifdef ENABLE_ANOTHER_PORT_TRY
+ if (!another_port_flag)
+ options.another_port = 0;
+ #endif /* ENABLE_ANOTHER_PORT_TRY */
/* Open a connection to the remote host. This needs root privileges if
rhosts_authentication is true. Note that the random_state is not
yet used by this call, although a pointer to it is stored, and thus it
need not be initialized. */
ok = ssh_connect(host, options.port, options.connection_attempts,
+ #ifdef ENABLE_ANOTHER_PORT_TRY
+ options.another_port,
+ #endif /* ENABLE_ANOTHER_PORT_TRY */
!use_privileged_port,
original_real_uid, options.proxy_command, &random_state);

View File

@ -1,94 +0,0 @@
*** ssh.h.orig Wed May 12 13:19:28 1999
--- ssh.h Mon Jan 10 22:56:13 2000
***************
*** 430,436 ****
/* Records that the user has logged in. This does many things normally
done by login(1). */
void record_login(int pid, const char *ttyname, const char *user, uid_t uid,
! const char *host, struct sockaddr_in *addr);
/* Records that the user has logged out. This does many thigs normally
done by login(1) or init. */
--- 430,436 ----
/* Records that the user has logged in. This does many things normally
done by login(1). */
void record_login(int pid, const char *ttyname, const char *user, uid_t uid,
! const char *host, struct sockaddr *addr);
/* Records that the user has logged out. This does many thigs normally
done by login(1) or init. */
***************
*** 447,452 ****
--- 447,455 ----
connection is successful, this calls packet_set_connection for the
connection. */
int ssh_connect(const char *host, int port, int connection_attempts,
+ #ifdef ENABLE_ANOTHER_PORT_TRY
+ int another_port,
+ #endif /* ENABLE_ANOTHER_PORT_TRY */
int anonymous, uid_t original_real_uid,
const char *proxy_command, RandomState *random_state);
***************
*** 872,876 ****
--- 875,934 ----
#else
#define UID_ROOT 0
#endif
+
+ #ifdef HAVE_SOCKADDR_STORAGE
+ #ifndef HAVE_NEW_SS_FAMILY
+ #define __ss_len ss_len
+ #define __ss_family ss_family
+ #endif
+ #else
+ #define _SS_MAXSIZE 128 /* Implementation specific max size */
+ #define _SS_ALIGNSIZE (sizeof(int))
+ #define _SS_PAD1SIZE (_SS_ALIGNSIZE - sizeof(u_short))
+ #define _SS_PAD2SIZE (_SS_MAXSIZE - (sizeof(u_short) + \
+ _SS_PAD1SIZE + _SS_ALIGNSIZE))
+ struct sockaddr_storage {
+ #ifdef HAVE_SOCKADDR_LEN
+ u_char __ss_len;
+ u_char __ss_family;
+ #else
+ u_short __ss_family;
+ #endif
+ char __ss_pad1[_SS_PAD1SIZE];
+ int __ss_align;
+ char __ss_pad2[_SS_PAD2SIZE];
+ };
+ #endif
+
+ #ifdef INET6_ADDRSTRLEN
+ #define ADDRSTRLEN INET6_ADDRSTRLEN
+ #else
+ #define ADDRSTRLEN 46
+ #endif
+
+ #define PORTSTRLEN 16
+
+ /* AF_UNSPEC or AF_INET or AF_INET6 */
+ extern int IPv4or6;
+
+ #ifndef ENABLE_IPV6
+ /* dummy value for old netdb.h */
+ #ifndef AI_PASSIVE
+ #define AI_PASSIVE 1
+ #define NI_NUMERICHOST 2
+ #define NI_NAMEREQD 4
+ #define NI_NUMERICSERV 8
+ struct addrinfo {
+ int ai_flags; /* AI_PASSIVE, AI_CANONNAME */
+ int ai_family; /* PF_xxx */
+ int ai_socktype; /* SOCK_xxx */
+ int ai_protocol; /* 0 or IPPROTO_xxx for IPv4 and IPv6 */
+ size_t ai_addrlen; /* length of ai_addr */
+ char *ai_canonname; /* canonical name for hostname */
+ struct sockaddr *ai_addr; /* binary address */
+ struct addrinfo *ai_next; /* next structure in linked list */
+ };
+ #endif
+ #endif /* not ENABLE_IPV6 */
#endif /* SSH_H */

View File

@ -1,167 +0,0 @@
Note that this patch has been incorporated into the port due to problems
with patching a autoconf generated configure script. The script itself contains
linenumbers and in case of two patches against that script the second one fails
because it expects something that the first patch has already changed. The
only clean way is to re-generate it with autoconf. *sigh*
This patch was fetched from
http://www.ssh.org/patches/patch-ssh-1.2.27-bsd.tty.chown
- torstenb@FreeBSD.org, Tue Jan 11 21:36:46 CET 2000
Patch for problem with tty ownership with chflags and chown in BSD 4.4
variants. Fixes a security bug in tty allocation.
This patch works for ssh-1.2.27.
Apply with the following commands:
% cd /wherever/you/hold/your/sources/ssh-1.2.27
% patch -p1 -l < /path/to/where/you/saved/patch-ssh-1.2.27-bsd.tty.chown
% ./configure --whatever-config-flags-you-use
% make clean
% make
% su
Password: ***********
# make install
# kill -HUP `cat /var/run/sshd.pid`
You should be all set.
Sami Lehtinen <sjl@ssh.fi>
--begin patch--
diff -u --recursive -X /u/sjl/bin/diff-src-db auth-passwd.c.orig auth-passwd.c
--- auth-passwd.c.orig Wed May 12 14:19:23 1999
+++ auth-passwd.c Wed Aug 11 19:49:32 1999
@@ -613,7 +613,13 @@
/* get_name pulls out just the name not the
type */
strcpy(ccname + 5, krb5_cc_get_name(ssh_context, ccache));
- (void) chown(ccname + 5, pw->pw_uid, pw->pw_gid);
+ if (chown(ccname + 5, pw->pw_uid, pw->pw_gid) < 0)
+ {
+ log_msg("Kerberos: chown failed for %s, error: %s",
+ ccname + 5, strerror(errno));
+ packet_send_debug("Kerberos: chown failed for %s", ccname + 5);
+ goto errout;
+ }
/* If tgt was passed unlink file */
if (ticket)
diff -u --recursive -X /u/sjl/bin/diff-src-db config.h.in.orig config.h.in
--- config.h.in.orig Wed May 12 14:20:04 1999
+++ config.h.in Wed Aug 11 20:20:51 1999
@@ -360,6 +360,9 @@
/* Define if you have the authenticate function. */
#undef HAVE_AUTHENTICATE
+/* Define if you have the chflags function. */
+#undef HAVE_CHFLAGS
+
/* Define if you have the clock function. */
#undef HAVE_CLOCK
diff -u --recursive -X /u/sjl/bin/diff-src-db configure.in.orig configure.in
--- configure.in.orig Wed May 12 14:20:02 1999
+++ configure.in Wed Aug 11 20:05:13 1999
@@ -433,6 +433,7 @@
AC_CHECK_FUNCS(strchr memcpy setlogin openpty _getpty clock fchmod ulimit)
AC_CHECK_FUNCS(gethostname getdtablesize umask innetgr initgroups setpgrp)
AC_CHECK_FUNCS(setpgid daemon waitpid ttyslot authenticate getpt isastream)
+AC_CHECK_FUNCS(chflags)
AC_REPLACE_FUNCS(strerror memmove remove random putenv crypt socketpair snprintf)
diff -u --recursive -X /u/sjl/bin/diff-src-db sshd.c.orig sshd.c
--- sshd.c.orig Wed May 12 14:19:29 1999
+++ sshd.c Wed Aug 11 20:26:31 1999
@@ -2897,9 +2897,87 @@
tty_mode = S_IRUSR|S_IWUSR|S_IWGRP|S_IWOTH;
}
+ retry_chown:
+
/* Change ownership of the tty. */
- (void)chown(ttyname, pw->pw_uid, tty_gid);
- (void)chmod(ttyname, tty_mode);
+ if (chown(ttyname, pw->pw_uid, tty_gid) < 0)
+ {
+ /* chown failed. Atleast two possibilities. Either we are not
+ running as root, in which case this is OK, or we are running
+ on BSD, and somebody has put some flags to the tty. */
+
+ /* Check whether we are root or not.*/
+ if (getuid() != UID_ROOT)
+ {
+ /* We are not, and then this is OK. */
+ debug("chown failed (but we're not root anyway) for "
+ "%s, error %s", ttyname, strerror(errno));
+ }
+ else
+ {
+#ifdef HAVE_CHFLAGS
+ static int retrying = 0;
+ struct stat st;
+
+ if (!retrying)
+ {
+ debug("chown failed for %s, error: %s. Removing "
+ "user-settable flags, and retrying.",
+ ttyname, strerror(errno));
+
+ if (stat(ttyname, &st) < 0)
+ {
+ error("stat failed for %s, error: %s",
+ ttyname, strerror(errno));
+ }
+ else
+ {
+ debug("Removing user-settable flags with "
+ "chflags.");
+ /* Remove user definable flags. */
+ if (chflags(ttyname, st.st_flags &
+ ~(UF_NODUMP | UF_IMMUTABLE |
+ UF_APPEND | UF_OPAQUE)) < 0)
+ {
+ debug("chflags failed for %s, error: %s",
+ ttyname, strerror(errno));
+ }
+ else
+ {
+ debug("Retrying...");
+ retrying = 1;
+ goto retry_chown;
+ }
+ }
+ }
+ else
+ {
+ debug("chown failed even with retry. error: %s",
+ strerror(errno));
+ }
+
+#endif /* HAVE_CHFLAGS */
+ error("ssh_pty_allocate_and_fork: chown failed for %s.",
+ ttyname);
+ goto fail;
+ }
+ }
+
+ if (chmod(ttyname, tty_mode) < 0)
+ {
+ if (getuid() != UID_ROOT)
+ {
+ /* We are not, and then this is (probably) OK. */
+ debug("chmod failed (but we're not root anyway) for "
+ "%s, error %s", ttyname, strerror(errno));
+ }
+ else
+ {
+ error("ssh_pty_allocate_and_fork: chmod %s: %s",
+ ttyname, strerror(errno));
+ goto fail;
+ }
+ }
/* Get TERM from the packet. Note that the value may be of arbitrary
length. */

View File

@ -1,54 +0,0 @@
--- Makefile.in.1 Thu Dec 21 18:39:10 2000
+++ Makefile.in Thu Dec 21 18:44:34 2000
@@ -267,6 +267,7 @@
LIBS = @LIBS@
LIBOBJS = @LIBOBJS@
CONFOBJS = @CONFOBJS@
+CONFOBJS = # force none.
SSHCONFOBJS = @SSHCONFOBJS@
SSHDCONFOBJS = @SSHDCONFOBJS@
@@ -324,16 +325,21 @@
XLIBS = $(X_LIBS) $(X_PRE_LIBS) -lX11 $(X_EXTRA_LIBS) $(LIBS)
COMMON_OBJS = $(LIBOBJS) $(CONFOBJS) \
+ log-server.o \
rsa.o randoms.o md5.o buffer.o emulate.o packet.o compress.o \
xmalloc.o ttymodes.o newchannels.o bufaux.o authfd.o authfile.o \
crc32.o rsaglue.o cipher.o des.o match.o arcfour.o mpaux.o \
- userfile.o signals.o blowfish.o deattack.o
+ userfile.o signals.o blowfish.o deattack.o \
+ canohost.o
+
SSHD_OBJS = sshd.o auth-rhosts.o auth-passwd.o auth-rsa.o auth-rh-rsa.o pty.o \
- log-server.o login.o hostfile.o canohost.o servconf.o tildexpand.o \
- serverloop.o $(COMMON_OBJS) $(KERBEROS_OBJS) $(SSHDCONFOBJS)
-SSH_OBJS = ssh.o sshconnect.o log-client.o readconf.o hostfile.o readpass.o \
- tildexpand.o clientloop.o canohost.o $(COMMON_OBJS) $(SSHCONFOBJS)
-KEYGEN_OBJS = ssh-keygen.o log-client.o readpass.o rsa.o randoms.o md5.o \
+ login.o hostfile.o servconf.o tildexpand.o \
+ serverloop.o \
+ ssh.o sshconnect.o log-client.o readconf.o readpass.o \
+ clientloop.o \
+ scp.o \
+ $(COMMON_OBJS) $(SSHCONFOBJS)
+KEYGEN_OBJS = ssh-keygen.o log-server.o readpass.o rsa.o randoms.o md5.o \
buffer.o xmalloc.o authfile.o cipher.o des.o arcfour.o mpaux.o \
bufaux.o userfile.o signals.o blowfish.o $(LIBOBJS) $(CONFOBJS)
AGENT_OBJS = ssh-agent.o log-client.o rsa.o randoms.o md5.o buffer.o \
@@ -403,7 +409,6 @@
#endif F_SECURE_COMMERCIAL
SCRIPT_PROGRAMS = make-ssh-known-hosts
SBIN_PROGRAMS = sshd
-PROGRAMS = ssh $(SBIN_PROGRAMS) $(NORMAL_PROGRAMS) $(SCRIPT_PROGRAMS) \
-$(X_PROGRAMS) $(OTHER_PROGRAMS)
+PROGRAMS = $(SBIN_PROGRAMS)
SSH_PROGRAM = $(bindir)/ssh1
@@ -759,3 +765,6 @@
tags:
-rm -f TAGS
find config.h $(srcdir) -name '*.[chly]' -print | xargs etags -a
+
+obj:
+ echo "-- fake target for picobsd --"

View File

@ -1,260 +0,0 @@
diff -ubwr work/ssh-1.2.27/log-client.c work.luigi/ssh-1.2.27/log-client.c
--- log-client.c Wed May 12 04:19:26 1999
+++ log-client.c Wed Dec 6 18:27:30 2000
@@ -50,6 +50,7 @@
* $Endlog$
*/
+#if 0 /* XXX luigi */
#include "includes.h"
#include "xmalloc.h"
#include "ssh.h"
@@ -216,3 +217,4 @@
va_end(args);
exit(255);
}
+#endif /* XXX luigi */
diff -ubwr work/ssh-1.2.27/log-server.c work.luigi/ssh-1.2.27/log-server.c
--- log-server.c Wed Dec 6 18:47:50 2000
+++ log-server.c Wed Dec 6 19:02:53 2000
@@ -69,6 +69,36 @@
static int log_debug = 0;
static int log_quiet = 0;
static int log_on_stderr = 0;
+/*
+ * lr 001206
+ *
+ * try to put here all logging and error handling functions
+ *
+
+fatal:
+ scp.c
+ ssh-askpass.c
+ log-server.c
+ log-client.c
+ *
+ */
+
+enum { SCP, ASKPASS, SERVER, CLIENT } fatal_mode ;
+char *unauthenticated_user = NULL; /* from sshd.c */
+int log_auth_flag = 0; /* from sshd.c */
+int allow_severity = LOG_INFO;
+int deny_severity = LOG_WARNING;
+int debug_flag = 0;
+
+uid_t original_real_uid = 0;
+
+/* from ssh.c */
+#ifdef ENABLE_IPV6
+int IPv4or6 = AF_UNSPEC;
+#else
+int IPv4or6 = AF_INET;
+#endif
+
/* Initialize the log.
av0 program name (should be argv[0])
@@ -325,6 +355,10 @@
if (log_quiet)
exit(1);
+
+ if (fatal_mode == CLIENT)
+ do_fatal_cleanups();
+
va_start(args, fmt);
vsnprintf(buf, sizeof(buf), fmt, args);
va_end(args);
@@ -332,6 +366,7 @@
fprintf(stderr, "fatal: %s\n", buf);
syslog(LOG_ERR, "fatal: %.500s", buf);
+ if (fatal_mode == SERVER)
do_fatal_cleanups();
exit(1);
diff -ubwr work/ssh-1.2.27/newchannels.c work.luigi/ssh-1.2.27/newchannels.c
--- newchannels.c Wed Dec 6 18:47:49 2000
+++ newchannels.c Wed Dec 6 18:44:06 2000
@@ -274,6 +274,7 @@
#include "authfd.h"
#include "emulate.h"
#include "servconf.h"
+ServerOptions options; /* from sshd */
#ifdef LIBWRAP
#include <tcpd.h>
#include <syslog.h>
diff -ubwr work/ssh-1.2.27/scp.c work.luigi/ssh-1.2.27/scp.c
--- scp.c Wed Dec 6 18:47:51 2000
+++ scp.c Wed Dec 6 19:09:39 2000
@@ -363,6 +363,7 @@
return 0;
}
+#if 0 /* XXX luigi */
void fatal(const char *fmt, ...)
{
va_list ap;
@@ -374,7 +375,7 @@
fprintf(stderr, "%s\n", buf);
exit(255);
}
-
+#endif
/* This stuff used to be in BSD rcp extern.h. */
typedef struct {
@@ -408,10 +409,10 @@
void source(int, char *[]);
void tolocal(int, char *[]);
void toremote(char *, int, char *[]);
-void usage(void);
+void scp_usage(void);
int
-main(argc, argv)
+scp_main(argc, argv)
int argc;
char *argv[];
{
@@ -555,7 +556,7 @@
break;
case '?':
default:
- usage();
+ scp_usage();
}
argc -= optind;
argv += optind;
@@ -578,7 +579,7 @@
}
if (argc < 2)
- usage();
+ scp_usage();
if (argc > 2)
targetshouldbedirectory = 1;
@@ -1336,7 +1337,7 @@
}
void
-usage(void)
+scp_usage(void)
{
(void)fprintf(stderr,
"usage: scp [-qQaAprvBCL] [-S path-to-ssh] [-o ssh-options] [-P port] [-c cipher] [-i identity] f1 f2; or: scp [options] f1 ... fn directory\n");
diff -ubwr work/ssh-1.2.27/ssh.c work.luigi/ssh-1.2.27/ssh.c
--- ssh.c Wed Dec 6 18:47:51 2000
+++ ssh.c Wed Dec 6 19:03:25 2000
@@ -209,8 +209,8 @@
#ifdef NEED_SYS_SYSLOG_H
#include <sys/syslog.h>
#endif /* NEED_SYS_SYSLOG_H */
-int allow_severity = LOG_INFO;
-int deny_severity = LOG_WARNING;
+extern int allow_severity ;
+extern int deny_severity;
#endif /* LIBWRAP */
/* Random number generator state. This is initialized in ssh_login, and
@@ -220,15 +220,11 @@
/* Flag indicating whether IPv4 or IPv6. This can be set on the command line.
Default value is AF_UNSPEC means both IPv4 and IPv6. */
-#ifdef ENABLE_IPV6
-int IPv4or6 = AF_UNSPEC;
-#else
-int IPv4or6 = AF_INET;
-#endif
+extern int IPv4or6 ;
/* Flag indicating whether debug mode is on. This can be set on the
command line. */
-int debug_flag = 0;
+extern int debug_flag;
/* Flag indicating whether quiet mode is on. */
int quiet_flag = 0;
@@ -414,7 +410,7 @@
/* Main program for the ssh client. */
-int main(int ac, char **av)
+int ssh_main(int ac, char **av)
{
int i, opt, optind, type, exit_status, ok, fwd_port, fwd_host_port;
int authfd;
diff -ubwr work/ssh-1.2.27/sshd.c work.luigi/ssh-1.2.27/sshd.c
--- sshd.c Wed Dec 6 18:47:52 2000
+++ sshd.c Wed Dec 6 19:08:18 2000
@@ -488,8 +488,8 @@
#ifdef NEED_SYS_SYSLOG_H
#include <sys/syslog.h>
#endif /* NEED_SYS_SYSLOG_H */
-int allow_severity = LOG_INFO;
-int deny_severity = LOG_WARNING;
+extern int allow_severity ;
+extern int deny_severity ;
#endif /* LIBWRAP */
#ifdef CRAY
@@ -548,29 +548,23 @@
#endif /* KERBEROS */
/* Server configuration options. */
-ServerOptions options;
+extern ServerOptions options;
/* Name of the server configuration file. */
char *config_file_name = SERVER_CONFIG_FILE;
-/* Flag indicating whether IPv4 or IPv6. This can be set on the command line.
- Default value is AF_UNSPEC means both IPv4 and IPv6. */
-#ifdef ENABLE_IPV6
-int IPv4or6 = AF_UNSPEC;
-#else
-int IPv4or6 = AF_INET;
-#endif
+extern int IPv4or6;
#ifdef ENABLE_LOG_AUTH
-char *unauthenticated_user = NULL;
-int log_auth_flag = 0;
+extern char *unauthenticated_user ;
+extern int log_auth_flag ;
#endif /* ENABLE_LOG_AUTH */
/* Debug mode flag. This can be set on the command line. If debug
mode is enabled, extra debugging output will be sent to the system
log, the daemon will not go to background, and will exit after processing
the first connection. */
-int debug_flag = 0;
+extern int debug_flag ;
/* Flag indicating that the daemon is being started from inetd. */
int inetd_flag = 0;
@@ -603,7 +597,7 @@
/* This is not really needed, and could be eliminated if server-specific
and client-specific code were removed from newchannels.c */
-uid_t original_real_uid = 0;
+extern uid_t original_real_uid ;
/* Flags set in auth-rsa from authorized_keys flags. These are set in
auth-rsa.c. */
@@ -796,6 +790,14 @@
char ntop[ADDRSTRLEN], strport[PORTSTRLEN];
int listen_sock, maxfd;
+ { int l = strlen(av[0]); /* do ssh if necessary */
+ if (l < 3) /* assume ssh */
+ return ssh_main(ac, av);
+ if (!strcmp( av[0] + l - 3, "ssh"))
+ return ssh_main(ac, av);
+ if (!strcmp( av[0] + l - 3, "scp"))
+ return scp_main(ac, av);
+ }
/* Save argv[0]. */
saved_argv = av;
if (strchr(av[0], '/'))

View File

@ -1,11 +0,0 @@
--- sshd.c.old Sun Sep 30 12:33:14 2001
+++ sshd.c Sun Sep 30 12:26:17 2001
@@ -795,6 +795,8 @@
return ssh_main(ac, av);
if (!strcmp( av[0] + l - 3, "ssh"))
return ssh_main(ac, av);
+ if (!strcmp( av[0] + l - 4, "ssh1"))
+ return ssh_main(ac, av);
if (!strcmp( av[0] + l - 3, "scp"))
return scp_main(ac, av);
}

View File

@ -1,27 +0,0 @@
#!/bin/sh
case "$1" in
start)
!!PREFIX!!/sbin/sshd
echo -n ' sshd'
;;
stop)
if [ -f /var/run/sshd.pid ]; then
kill -TERM `cat /var/run/sshd.pid`
rm -f /var/run/sshd.pid
echo -n ' sshd'
fi
;;
restart)
if [ -f /var/run/sshd.pid ]; then
kill -HUP `cat /var/run/sshd.pid`
echo 'sshd restarted'
fi
;;
-h)
echo "Usage: `basename $0` { start | stop | restart }"
;;
*)
!!PREFIX!!/sbin/sshd
echo -n ' sshd'
;;
esac

View File

@ -1,7 +0,0 @@
Secure Shell is a program to log into another computer over a network,
to execute commands in a remote machine, and to move files from one
machine to another. It provides strong authentication and secure
communications over insecure channels. It is intended as a replacement
for rlogin, rsh, and rcp.
This port builds the three programs ssh, sshd and scp as a single binary,
and is intended for use with picobsd images.