- (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 - (djm) Bug #621: Select OpenSC keys by usage attributes. Patch from
larsch@trustcenter.de larsch@trustcenter.de
- (bal) openbsd-compat/ OpenBSD updates. Mostly licensing, ansifications - (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 20030822
- (djm) s/get_progname/ssh_get_progname/g to avoid conflict with Heimdal - (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. - Fix sshd BindAddress and -b options for systems using fake-getaddrinfo.
Report from murple@murple.net, diagnosis from dtucker@zip.com.au 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. * 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 #ifndef OPENSSL_PRNG_ONLY
#define RANDOM_SEED_SIZE 48 #define RANDOM_SEED_SIZE 48
@ -75,7 +75,7 @@ seed_rng(void)
if (pipe(p) == -1) if (pipe(p) == -1)
fatal("pipe: %s", strerror(errno)); fatal("pipe: %s", strerror(errno));
old_sigchld = mysignal(SIGCHLD, SIG_DFL); old_sigchld = signal(SIGCHLD, SIG_DFL);
if ((pid = fork()) == -1) if ((pid = fork()) == -1)
fatal("Couldn't fork: %s", strerror(errno)); fatal("Couldn't fork: %s", strerror(errno));
if (pid == 0) { if (pid == 0) {
@ -116,7 +116,7 @@ seed_rng(void)
if (waitpid(pid, &ret, 0) == -1) if (waitpid(pid, &ret, 0) == -1)
fatal("Couldn't wait for ssh-rand-helper completion: %s", fatal("Couldn't wait for ssh-rand-helper completion: %s",
strerror(errno)); strerror(errno));
mysignal(SIGCHLD, old_sigchld); signal(SIGCHLD, old_sigchld);
/* We don't mind if the child exits upon a SIGPIPE */ /* We don't mind if the child exits upon a SIGPIPE */
if (!WIFEXITED(ret) && 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++] = xstrdup(buf);
args->list[args->num] = NULL; 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; int nalloc;
}; };
void addargs(arglist *, char *, ...) __attribute__((format(printf, 2, 3))); 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 "includes.h"
#include "xmalloc.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] * NB. duplicate __progname in case it is an alias for argv[0]
@ -200,3 +200,29 @@ tcsendbreak(int fd, int duration)
# endif # endif
} }
#endif /* HAVE_TCSENDBREAK */ #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. * 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 #ifndef _BSD_MISC_H
#define _BSD_MISC_H #define _BSD_MISC_H
@ -97,4 +97,10 @@ pid_t tcgetpgrp(int);
int tcsendbreak(int, int); int tcsendbreak(int, int);
#endif #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 */ #endif /* _BSD_MISC_H */

View File

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

4
sshd.c
View File

@ -1368,7 +1368,7 @@ main(int ac, char **av)
if ((options.protocol & SSH_PROTO_1) && if ((options.protocol & SSH_PROTO_1) &&
key_used == 0) { key_used == 0) {
/* Schedule server key regeneration alarm. */ /* Schedule server key regeneration alarm. */
mysignal(SIGALRM, key_regeneration_alarm); signal(SIGALRM, key_regeneration_alarm);
alarm(options.key_regeneration_time); alarm(options.key_regeneration_time);
key_used = 1; 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 * mode; it is just annoying to have the server exit just when you
* are about to discover the bug. * are about to discover the bug.
*/ */
mysignal(SIGALRM, grace_alarm_handler); signal(SIGALRM, grace_alarm_handler);
if (!debug_flag) if (!debug_flag)
alarm(options.login_grace_time); 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)); error("/dev/ptmx: %.100s", strerror(errno));
return 0; return 0;
} }
old_signal = mysignal(SIGCHLD, SIG_DFL); old_signal = signal(SIGCHLD, SIG_DFL);
if (grantpt(ptm) < 0) { if (grantpt(ptm) < 0) {
error("grantpt: %.100s", strerror(errno)); error("grantpt: %.100s", strerror(errno));
return 0; return 0;
} }
mysignal(SIGCHLD, old_signal); signal(SIGCHLD, old_signal);
if (unlockpt(ptm) < 0) { if (unlockpt(ptm) < 0) {
error("unlockpt: %.100s", strerror(errno)); error("unlockpt: %.100s", strerror(errno));
return 0; return 0;
@ -274,9 +274,9 @@ pty_make_controlling_tty(int *ttyfd, const char *ttyname)
fd = open(ttyname, O_RDWR|O_NOCTTY); fd = open(ttyname, O_RDWR|O_NOCTTY);
if (fd != -1) { if (fd != -1) {
mysignal(SIGHUP, SIG_IGN); signal(SIGHUP, SIG_IGN);
ioctl(fd, TCVHUP, (char *)NULL); ioctl(fd, TCVHUP, (char *)NULL);
mysignal(SIGHUP, SIG_DFL); signal(SIGHUP, SIG_DFL);
setpgid(0, 0); setpgid(0, 0);
close(fd); close(fd);
} else { } else {
@ -323,9 +323,9 @@ pty_make_controlling_tty(int *ttyfd, const char *ttyname)
error("SETPGRP %s",strerror(errno)); error("SETPGRP %s",strerror(errno));
#endif /* HAVE_NEWS4 */ #endif /* HAVE_NEWS4 */
#ifdef USE_VHANGUP #ifdef USE_VHANGUP
old = mysignal(SIGHUP, SIG_IGN); old = signal(SIGHUP, SIG_IGN);
vhangup(); vhangup();
mysignal(SIGHUP, old); signal(SIGHUP, old);
#endif /* USE_VHANGUP */ #endif /* USE_VHANGUP */
fd = open(ttyname, O_RDWR); fd = open(ttyname, O_RDWR);
if (fd < 0) { if (fd < 0) {