- (djm) More NeXT compatibility from Ben Lindstrom <mouring@pconline.com>

Including sigaction() et al. replacements
This commit is contained in:
Damien Miller 2000-07-09 23:26:27 +10:00
parent f9b625c36e
commit 31abc9addb
10 changed files with 226 additions and 86 deletions

View File

@ -11,6 +11,8 @@
- (djm) Cleanup entropy collection code a little more. Split initialisation - (djm) Cleanup entropy collection code a little more. Split initialisation
from seeding, perform intialisation immediatly at start, be careful with from seeding, perform intialisation immediatly at start, be careful with
uids. Based on problem report from Jim Watt <jimw@peisj.pebio.com> uids. Based on problem report from Jim Watt <jimw@peisj.pebio.com>
- (djm) More NeXT compatibility from Ben Lindstrom <mouring@pconline.com>
Including sigaction() et al. replacements
20000708 20000708
- (djm) Fix bad fprintf format handling in auth-pam.c. Patch from - (djm) Fix bad fprintf format handling in auth-pam.c. Patch from

View File

@ -36,7 +36,7 @@ TARGETS=ssh sshd ssh-add ssh-keygen ssh-agent scp $(EXTRA_TARGETS)
LIBSSH_OBJS=atomicio.o authfd.o authfile.o aux.o bufaux.o buffer.o canohost.o channels.o cipher.o compat.o compress.o crc32.o deattack.o dispatch.o dsa.o fingerprint.o hmac.o hostfile.o key.o kex.o log.o match.o mpaux.o nchan.o packet.o radix.o entropy.o readpass.o rsa.o tildexpand.o ttymodes.o uidswap.o uuencode.o xmalloc.o LIBSSH_OBJS=atomicio.o authfd.o authfile.o aux.o bufaux.o buffer.o canohost.o channels.o cipher.o compat.o compress.o crc32.o deattack.o dispatch.o dsa.o fingerprint.o hmac.o hostfile.o key.o kex.o log.o match.o mpaux.o nchan.o packet.o radix.o entropy.o readpass.o rsa.o tildexpand.o ttymodes.o uidswap.o uuencode.o xmalloc.o
LIBOPENBSD_COMPAT_OBJS=bsd-base64.o bsd-bindresvport.o bsd-daemon.o bsd-misc.o bsd-mktemp.o bsd-rresvport.o bsd-setenv.o bsd-snprintf.o bsd-strlcat.o bsd-strlcpy.o fake-getaddrinfo.o fake-getnameinfo.o next-posix.o LIBOPENBSD_COMPAT_OBJS=bsd-base64.o bsd-bindresvport.o bsd-daemon.o bsd-misc.o bsd-mktemp.o bsd-rresvport.o bsd-setenv.o bsd-sigaction.o bsd-snprintf.o bsd-strlcat.o bsd-strlcpy.o fake-getaddrinfo.o fake-getnameinfo.o next-posix.o
SSHOBJS= ssh.o sshconnect.o sshconnect1.o sshconnect2.o log-client.o readconf.o clientloop.o SSHOBJS= ssh.o sshconnect.o sshconnect1.o sshconnect2.o log-client.o readconf.o clientloop.o

7
TODO
View File

@ -9,3 +9,10 @@
- Cleanup configure.in - Cleanup configure.in
- Next now has sigaction() based on sigvec(). But it sill does not
seem to act correctly. Ctrl-C and Ctrl-Z don't return echo to the
underlying shell.
- scp is broken under NeXT, and will need some TLC to be portable to
such an old platform. "struct dirent" does not exist, and under
next those functions take a single integer input.

102
bsd-sigaction.c Normal file
View File

@ -0,0 +1,102 @@
/* $OpenBSD: sigaction.c,v 1.3 1999/06/27 08:14:21 millert Exp $ */
/****************************************************************************
* Copyright (c) 1998 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 *
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
****************************************************************************/
#include <signal.h>
#include "config.h"
#include "bsd-sigaction.h"
/* This file provides sigaction() emulation using sigvec() */
/* Use only if this is non POSIX system */
#if !HAVE_SIGACTION && HAVE_SIGVEC
int
sigaction(int sig, struct sigaction *sigact, struct sigaction *osigact)
{
return sigvec(sig, &(sigact->sv), &(osigact->sv));
}
int
sigemptyset (sigset_t * mask)
{
*mask = 0;
return 0;
}
int
sigprocmask (int mode, sigset_t * mask, sigset_t * omask)
{
sigset_t current = sigsetmask(0);
if (omask) *omask = current;
if (mode==SIG_BLOCK)
current |= *mask;
else if (mode==SIG_UNBLOCK)
current &= ~*mask;
else if (mode==SIG_SETMASK)
current = *mask;
sigsetmask(current);
return 0;
}
int
sigsuspend (sigset_t * mask)
{
return sigpause(*mask);
}
int
sigdelset (sigset_t * mask, int sig)
{
*mask &= ~sigmask(sig);
return 0;
}
int
sigaddset (sigset_t * mask, int sig)
{
*mask |= sigmask(sig);
return 0;
}
int
sigismember (sigset_t * mask, int sig)
{
return (*mask & sigmask(sig)) != 0;
}
#endif

102
bsd-sigaction.h Normal file
View File

@ -0,0 +1,102 @@
/* $OpenBSD: SigAction.h,v 1.2 1999/06/27 08:15:19 millert Exp $ */
/****************************************************************************
* Copyright (c) 1998 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 *
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
****************************************************************************/
/*
* $From: SigAction.h,v 1.5 1999/06/19 23:00:54 tom Exp $
*
* This file exists to handle non-POSIX systems which don't have <unistd.h>,
* and usually no sigaction() nor <termios.h>
*/
#ifndef _SIGACTION_H
#define _SIGACTION_H
#if !defined(HAVE_SIGACTION) && defined(HAVE_SIGVEC)
#undef SIG_BLOCK
#define SIG_BLOCK 00
#undef SIG_UNBLOCK
#define SIG_UNBLOCK 01
#undef SIG_SETMASK
#define SIG_SETMASK 02
/*
* <bsd/signal.h> is in the Linux 1.2.8 + gcc 2.7.0 configuration,
* and is useful for testing this header file.
*/
#if HAVE_BSD_SIGNAL_H
# include <bsd/signal.h>
#endif
struct sigaction
{
struct sigvec sv;
};
#define sigset_t _nc_sigset_t
typedef unsigned long sigset_t;
#undef sa_mask
#define sa_mask sv_mask
#undef sa_handler
#define sa_handler sv_handler
#undef sa_flags
#define sa_flags sv_flags
#undef sigaction
#define sigaction _nc_sigaction
#undef sigprocmask
#define sigprocmask _nc_sigprocmask
#undef sigemptyset
#define sigemptyset _nc_sigemptyset
#undef sigsuspend
#define sigsuspend _nc_sigsuspend
#undef sigdelset
#define sigdelset _nc_sigdelset
#undef sigaddset
#define sigaddset _nc_sigaddset
int sigaction(int sig, struct sigaction *sigact, struct sigaction *osigact);
int sigprocmask (int how, sigset_t *mask, sigset_t *omask);
int sigemptyset (sigset_t *mask);
int sigsuspend (sigset_t *mask);
int sigdelset (sigset_t *mask, int sig);
int sigaddset (sigset_t *mask, int sig);
#endif /* !defined(HAVE_SIGACTION) && defined(HAVE_SIGVEC) */
#endif /* !defined(_SIGACTION_H) */

View File

@ -108,10 +108,10 @@ case "$host" in
*-next-*) *-next-*)
# hardwire lastlog location (can't detect it on some versions) # hardwire lastlog location (can't detect it on some versions)
conf_lastlog_location="/usr/adm/lastlog" conf_lastlog_location="/usr/adm/lastlog"
conf_utmp_location=/etc/utmp
AC_DEFINE(HAVE_NEXT) AC_DEFINE(HAVE_NEXT)
CFLAGS="$CFLAGS -I/usr/local/include" CFLAGS="$CFLAGS -I/usr/local/include"
MAIL=/usr/spool/mail MAIL=/usr/spool/mail
conf_utmp_location=/etc/utmp
AC_MSG_WARN([*** Tested: PA-RISC/m68k Untested: Sparc/Intel]) AC_MSG_WARN([*** Tested: PA-RISC/m68k Untested: Sparc/Intel])
AC_MSG_WARN([*** Expect 'scp' to fail!]) AC_MSG_WARN([*** Expect 'scp' to fail!])
AC_MSG_WARN([*** Please report any problems, thanks]) AC_MSG_WARN([*** Please report any problems, thanks])
@ -209,7 +209,7 @@ fi
AC_CHECK_HEADERS(bstring.h endian.h lastlog.h limits.h login.h maillock.h netdb.h netgroup.h netinet/in_systm.h paths.h poll.h pty.h shadow.h security/pam_appl.h sys/bitypes.h sys/bsdtty.h sys/cdefs.h sys/poll.h sys/select.h sys/stat.h sys/stropts.h sys/sysmacros.h sys/time.h sys/ttcompat.h stddef.h time.h util.h utmp.h utmpx.h) AC_CHECK_HEADERS(bstring.h endian.h lastlog.h limits.h login.h maillock.h netdb.h netgroup.h netinet/in_systm.h paths.h poll.h pty.h shadow.h security/pam_appl.h sys/bitypes.h sys/bsdtty.h sys/cdefs.h sys/poll.h sys/select.h sys/stat.h sys/stropts.h sys/sysmacros.h sys/time.h sys/ttcompat.h stddef.h time.h util.h utmp.h utmpx.h)
# Checks for library functions. # Checks for library functions.
AC_CHECK_FUNCS(arc4random atexit b64_ntop bcopy bindresvport_af clock freeaddrinfo gai_strerror getaddrinfo getnameinfo getrusage innetgr md5_crypt memmove mkdtemp on_exit openpty rresvport_af setenv seteuid setlogin setproctitle setreuid snprintf strlcat strlcpy vsnprintf vhangup _getpty __b64_ntop) AC_CHECK_FUNCS(arc4random atexit b64_ntop bcopy bindresvport_af clock freeaddrinfo gai_strerror getaddrinfo getnameinfo getrusage innetgr md5_crypt memmove mkdtemp on_exit openpty rresvport_af setenv seteuid setlogin setproctitle setreuid sigaction sigvec snprintf strlcat strlcpy vsnprintf vhangup _getpty __b64_ntop)
dnl checks for time functions dnl checks for time functions
AC_CHECK_FUNCS(gettimeofday time) AC_CHECK_FUNCS(gettimeofday time)
dnl checks for libutil functions dnl checks for libutil functions

View File

@ -156,21 +156,11 @@
#include "includes.h" #include "includes.h"
#if HAVE_UTMP_H
# include <utmp.h>
#endif
#if HAVE_UTMPX_H
# include <utmpx.h>
#endif
#if HAVE_LASTLOG_H
# include <lastlog.h>
#endif
#include "ssh.h" #include "ssh.h"
#include "xmalloc.h" #include "xmalloc.h"
#include "loginrec.h" #include "loginrec.h"
RCSID("$Id: loginrec.c,v 1.15 2000/07/09 11:37:49 djm Exp $"); RCSID("$Id: loginrec.c,v 1.16 2000/07/09 13:26:28 djm Exp $");
/** /**
** prototypes for helper functions in this file ** prototypes for helper functions in this file

View File

@ -18,9 +18,6 @@
#include <errno.h> #include <errno.h>
#include <termios.h> #include <termios.h>
#include <sys/wait.h> #include <sys/wait.h>
#ifdef HAVE_STDDEF_H
#include <stddef.h>
#endif
#include "xmalloc.h" #include "xmalloc.h"
#include "ssh.h" #include "ssh.h"
@ -99,50 +96,9 @@ cfsetospeed(struct termios *t,int speed)
} }
int int
cfsetispeed(struct termios *t, speed_t speed) cfsetispeed(struct termios *t, int speed)
{ {
t->c_ispeed = speed; t->c_ispeed = speed;
return (0); return (0);
} }
#if 0
/*define sigset_t int*/
/* This whole thing is insane. It's purely wrong, but it's a first
go a it. -bl */
int sigemptyset(sigset_t *set)
{
return 0;
}
int sigaddset(sigset_t *set, int signum)
{
*set |= (1 << (signum - 1));
return set;
}
int sigprocmask(int how, const sigset_t *set, sigset_t *oldset)
{
switch(how) {
case SIG_BLOCK:
return 0;
case SIG_UNBLOCK:
return ( 0 & ~ *set);
default:
return 0;
}
}
int sigsuspend(const sigset_t *mask)
{
}
int sigaction(int signum,const struct sigaction *act, struct sigaction *oldact)
{
}
#endif /* 0 */
#endif /* HAVE_NEXT */ #endif /* HAVE_NEXT */

View File

@ -18,14 +18,14 @@
#undef WIFSTOPPED #undef WIFSTOPPED
#undef WIFSIGNALED #undef WIFSIGNALED
#define _W_INT(w) (*(int*)&(w)) /* convert union wait to int */ #define _W_INT(w) (*(int*)&(w)) /* convert union wait to int */
#define WIFEXITED(w) (!((_W_INT(w)) & 0377)) #define WIFEXITED(w) (!((_W_INT(w)) & 0377))
#define WIFSTOPPED(w) ((_W_INT(w)) & 0100) #define WIFSTOPPED(w) ((_W_INT(w)) & 0100)
#define WIFSIGNALED(w) (!WIFEXITED(x) && !WIFSTOPPED(x)) #define WIFSIGNALED(w) (!WIFEXITED(w) && !WIFSTOPPED(w))
#define WEXITSTATUS(w) (int)(WIFEXITED(x) ? ((_W_INT(w) >> 8) & 0377) : -1) #define WEXITSTATUS(w) (int)(WIFEXITED(w) ? ((_W_INT(w) >> 8) & 0377) : -1)
#define WTERMSIG(w) (int)(WIFSIGNALED(x) ? (_W_INT(w) & 0177) : -1) #define WTERMSIG(w) (int)(WIFSIGNALED(w) ? (_W_INT(w) & 0177) : -1)
#define WCOREFLAG 0x80 #define WCOREFLAG 0x80
#define WCOREDUMP(w) ((_W_INT(w)) & WCOREFLAG) #define WCOREDUMP(w) ((_W_INT(w)) & WCOREFLAG)
int waitpid(int pid,int *stat_loc,int options); int waitpid(int pid,int *stat_loc,int options);
#define getpgrp() getpgrp(0) #define getpgrp() getpgrp(0)
@ -38,25 +38,5 @@ int tcsetpgrp(int fd, pid_t pgrp);
speed_t cfgetospeed(const struct termios *t); speed_t cfgetospeed(const struct termios *t);
speed_t cfgetispeed(const struct termios *t); speed_t cfgetispeed(const struct termios *t);
int cfsetospeed(struct termios *t,int speed); int cfsetospeed(struct termios *t,int speed);
/* Sig*() */
typedef sigset_t;
#define SIG_BLOCK 00
#define SIG_UNBLOCK 01
#define SIG_SETMASK 02
#define SA_RESTART 00
struct sigaction {
void (*sa_handler)();
sigset_t sa_mask;
int sa_flags;
};
int sigemptyset(sigset_t *set);
int sigaddset(sigset_t *set, int signum);
int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);
int sigsuspend(const sigset_t *mask);
int sigaction(int signum,const struct sigaction *act, struct sigaction *oldact);
#endif /* HAVE_NEXT */ #endif /* HAVE_NEXT */
#endif /* _NEXT_POSIX_H */ #endif /* _NEXT_POSIX_H */

View File

@ -13,6 +13,7 @@
#include "bsd-snprintf.h" #include "bsd-snprintf.h"
#include "bsd-daemon.h" #include "bsd-daemon.h"
#include "bsd-base64.h" #include "bsd-base64.h"
#include "bsd-sigaction.h"
/* rfc2553 socket API replacements */ /* rfc2553 socket API replacements */
#include "fake-getaddrinfo.h" #include "fake-getaddrinfo.h"