- (bal) redo how we handle 'mysignal()'. Move it to

openbsd-compat/bsd-misc.c, s/mysignal/signal/ and #define signal to
   be our 'mysignal' by default.  OK djm@
This commit is contained in:
Ben Lindstrom 2003-08-25 01:16:21 +00:00
parent af4a6c3a56
commit 5ade9abc37
9 changed files with 52 additions and 47 deletions

View File

@ -2,7 +2,10 @@
- (djm) Bug #621: Select OpenSC keys by usage attributes. Patch from
larsch@trustcenter.de
- (bal) openbsd-compat/ OpenBSD updates. Mostly licensing, ansifications
and minor fixes.
and minor fixes. OK djm@
- (bal) redo how we handle 'mysignal()'. Move it to
openbsd-compat/bsd-misc.c, s/mysignal/signal/ and #define signal to
be our 'mysignal' by default. OK djm@
20030822
- (djm) s/get_progname/ssh_get_progname/g to avoid conflict with Heimdal
@ -857,4 +860,4 @@
- Fix sshd BindAddress and -b options for systems using fake-getaddrinfo.
Report from murple@murple.net, diagnosis from dtucker@zip.com.au
$Id: ChangeLog,v 1.2900 2003/08/25 01:10:51 mouring Exp $
$Id: ChangeLog,v 1.2901 2003/08/25 01:16:21 mouring Exp $

View File

@ -45,7 +45,7 @@
* XXX: we should tell the child how many bytes we need.
*/
RCSID("$Id: entropy.c,v 1.45 2003/05/16 05:51:45 djm Exp $");
RCSID("$Id: entropy.c,v 1.46 2003/08/25 01:16:21 mouring Exp $");
#ifndef OPENSSL_PRNG_ONLY
#define RANDOM_SEED_SIZE 48
@ -75,7 +75,7 @@ seed_rng(void)
if (pipe(p) == -1)
fatal("pipe: %s", strerror(errno));
old_sigchld = mysignal(SIGCHLD, SIG_DFL);
old_sigchld = signal(SIGCHLD, SIG_DFL);
if ((pid = fork()) == -1)
fatal("Couldn't fork: %s", strerror(errno));
if (pid == 0) {
@ -116,7 +116,7 @@ seed_rng(void)
if (waitpid(pid, &ret, 0) == -1)
fatal("Couldn't wait for ssh-rand-helper completion: %s",
strerror(errno));
mysignal(SIGCHLD, old_sigchld);
signal(SIGCHLD, old_sigchld);
/* We don't mind if the child exits upon a SIGPIPE */
if (!WIFEXITED(ret) &&

26
misc.c
View File

@ -323,29 +323,3 @@ addargs(arglist *args, char *fmt, ...)
args->list[args->num++] = xstrdup(buf);
args->list[args->num] = NULL;
}
mysig_t
mysignal(int sig, mysig_t act)
{
#ifdef HAVE_SIGACTION
struct sigaction sa, osa;
if (sigaction(sig, NULL, &osa) == -1)
return (mysig_t) -1;
if (osa.sa_handler != act) {
memset(&sa, 0, sizeof(sa));
sigemptyset(&sa.sa_mask);
sa.sa_flags = 0;
#if defined(SA_INTERRUPT)
if (sig == SIGALRM)
sa.sa_flags |= SA_INTERRUPT;
#endif
sa.sa_handler = act;
if (sigaction(sig, &sa, NULL) == -1)
return (mysig_t) -1;
}
return (osa.sa_handler);
#else
return (signal(sig, act));
#endif
}

4
misc.h
View File

@ -31,7 +31,3 @@ struct arglist {
int nalloc;
};
void addargs(arglist *, char *, ...) __attribute__((format(printf, 2, 3)));
/* wrapper for signal interface */
typedef void (*mysig_t)(int);
mysig_t mysignal(int sig, mysig_t act);

View File

@ -25,7 +25,7 @@
#include "includes.h"
#include "xmalloc.h"
RCSID("$Id: bsd-misc.c,v 1.18 2003/08/21 23:34:42 djm Exp $");
RCSID("$Id: bsd-misc.c,v 1.19 2003/08/25 01:16:21 mouring Exp $");
/*
* NB. duplicate __progname in case it is an alias for argv[0]
@ -200,3 +200,29 @@ tcsendbreak(int fd, int duration)
# endif
}
#endif /* HAVE_TCSENDBREAK */
mysig_t
mysignal(int sig, mysig_t act)
{
#ifdef HAVE_SIGACTION
struct sigaction sa, osa;
if (sigaction(sig, NULL, &osa) == -1)
return (mysig_t) -1;
if (osa.sa_handler != act) {
memset(&sa, 0, sizeof(sa));
sigemptyset(&sa.sa_mask);
sa.sa_flags = 0;
#ifdef SA_INTERRUPT
if (sig == SIGALRM)
sa.sa_flags |= SA_INTERRUPT;
#endif
sa.sa_handler = act;
if (sigaction(sig, &sa, NULL) == -1)
return (mysig_t) -1;
}
return (osa.sa_handler);
#else
return (signal(sig, act));
#endif
}

View File

@ -22,7 +22,7 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/* $Id: bsd-misc.h,v 1.11 2003/08/21 23:34:42 djm Exp $ */
/* $Id: bsd-misc.h,v 1.12 2003/08/25 01:16:22 mouring Exp $ */
#ifndef _BSD_MISC_H
#define _BSD_MISC_H
@ -97,4 +97,10 @@ pid_t tcgetpgrp(int);
int tcsendbreak(int, int);
#endif
/* wrapper for signal interface */
typedef void (*mysig_t)(int);
mysig_t mysignal(int sig, mysig_t act);
#define signal(a,b) mysignal(a,b)
#endif /* _BSD_MISC_H */

View File

@ -212,7 +212,7 @@ update_progress_meter(int ignore)
if (can_output())
refresh_progress_meter();
mysignal(SIGALRM, update_progress_meter);
signal(SIGALRM, update_progress_meter);
alarm(UPDATE_INTERVAL);
errno = save_errno;
}
@ -243,7 +243,7 @@ start_progress_meter(char *f, off_t filesize, off_t *stat)
if (can_output())
refresh_progress_meter();
mysignal(SIGALRM, update_progress_meter);
signal(SIGALRM, update_progress_meter);
alarm(UPDATE_INTERVAL);
}

4
sshd.c
View File

@ -1368,7 +1368,7 @@ main(int ac, char **av)
if ((options.protocol & SSH_PROTO_1) &&
key_used == 0) {
/* Schedule server key regeneration alarm. */
mysignal(SIGALRM, key_regeneration_alarm);
signal(SIGALRM, key_regeneration_alarm);
alarm(options.key_regeneration_time);
key_used = 1;
}
@ -1457,7 +1457,7 @@ main(int ac, char **av)
* mode; it is just annoying to have the server exit just when you
* are about to discover the bug.
*/
mysignal(SIGALRM, grace_alarm_handler);
signal(SIGALRM, grace_alarm_handler);
if (!debug_flag)
alarm(options.login_grace_time);

View File

@ -101,12 +101,12 @@ pty_allocate(int *ptyfd, int *ttyfd, char *namebuf, int namebuflen)
error("/dev/ptmx: %.100s", strerror(errno));
return 0;
}
old_signal = mysignal(SIGCHLD, SIG_DFL);
old_signal = signal(SIGCHLD, SIG_DFL);
if (grantpt(ptm) < 0) {
error("grantpt: %.100s", strerror(errno));
return 0;
}
mysignal(SIGCHLD, old_signal);
signal(SIGCHLD, old_signal);
if (unlockpt(ptm) < 0) {
error("unlockpt: %.100s", strerror(errno));
return 0;
@ -274,9 +274,9 @@ pty_make_controlling_tty(int *ttyfd, const char *ttyname)
fd = open(ttyname, O_RDWR|O_NOCTTY);
if (fd != -1) {
mysignal(SIGHUP, SIG_IGN);
signal(SIGHUP, SIG_IGN);
ioctl(fd, TCVHUP, (char *)NULL);
mysignal(SIGHUP, SIG_DFL);
signal(SIGHUP, SIG_DFL);
setpgid(0, 0);
close(fd);
} else {
@ -323,9 +323,9 @@ pty_make_controlling_tty(int *ttyfd, const char *ttyname)
error("SETPGRP %s",strerror(errno));
#endif /* HAVE_NEWS4 */
#ifdef USE_VHANGUP
old = mysignal(SIGHUP, SIG_IGN);
old = signal(SIGHUP, SIG_IGN);
vhangup();
mysignal(SIGHUP, old);
signal(SIGHUP, old);
#endif /* USE_VHANGUP */
fd = open(ttyname, O_RDWR);
if (fd < 0) {