I decided to upgrade to OpenSSH 2.5.1p1/openssl 0.9.6 on all my Linux boxes. I ran into a compilation problem with the OpenSSH tarball on a machine running Redhat 5.2. I used the tarball since I don't like RPMs, and there is no binary RPM for RH 5.2 anyway. The error manifests itself in the openbsd-compat directory. This is the compiler warning: make[1]: Entering directory `/usr/home/jfeise/source/openssh-2.5.1p1/openbsd-compat' gcc -g -O2 -Wall -I/usr/local/openssl -I/usr/local/openssl -I. -I.. -I. -I./.. -DHAVE_CONFIG_H -c bsd-arc4random.c In file included from ../includes.h:39, from bsd-arc4random.c:25: /usr/include/signal.h:217: warning: `struct sigaction' declared inside parameter list /usr/include/signal.h:217: warning: its scope is only this definition or declaration, /usr/include/signal.h:217: warning: which is probably not what you want. /usr/include/signal.h:219: warning: `struct sigaction' declared inside parameter list And this is repeated with nearly all files in the openbsd-compat directory. Compilation finally stops in the main source directory with: gcc -g -O2 -Wall -I/usr/local/openssl -I/usr/local/openssl -I. -I./openbsd-compat -I. -DETCDIR=\"/usr/local/etc\" -D_PATH_SSH_PROGRAM=\"/usr/local/bin/ssh\" -D_PATH_SSH_ASKPASS_DEFAULT=\"/usr/local/libexec/ssh-askpass\" -D_PATH_SFTP_SERVER=\"/usr/local/libexec/sftp-server\" -DHAVE_CONFIG_H -c cli.c In file included from includes.h:39, from cli.c:1: /usr/include/signal.h:217: warning: `struct sigaction' declared inside parameter list /usr/include/signal.h:217: warning: its scope is only this definition or declaration, /usr/include/signal.h:217: warning: which is probably not what you want. /usr/include/signal.h:219: warning: `struct sigaction' declared inside parameter list cli.c: In function `cli_echo_disable': cli.c:67: `SIG_BLOCK' undeclared (first use this function) cli.c:67: (Each undeclared identifier is reported only once cli.c:67: for each function it appears in.) cli.c:71: sizeof applied to an incomplete type cli.c:72: invalid use of undefined type `struct sigaction' cli.c:73: warning: passing arg 2 of `sigaction' from incompatible pointer type cli.c:73: warning: passing arg 3 of `sigaction' from incompatible pointer type cli.c: In function `cli_echo_restore': cli.c:93: `SIG_SETMASK' undeclared (first use this function) cli.c:94: warning: passing arg 2 of `sigaction' from incompatible pointer type cli.c: At top level: cli.c:14: storage size of `nsa' isn't known cli.c:15: storage size of `osa' isn't known make: *** [cli.o] Error 1 I traced this down to a filename problem by analyzing the preprocessor output. The openbsd-compat directory contains sigaction.c and sigaction.h The includes.h file in the main source directory contains #include <signal.h>, which results in the inclusion of /usr/include/signal.h That file in turn contains #include <sigaction.h>, which *should* translate to /usr/include/sigaction.h. However, the sigaction.h file in the openbsd-compat directory is included instead. My workaround is to rename the sigaction.h file to bsd-sigaction.h and update the appropriate references to it: --- openbsd-compat.h.orig Thu Feb 22 08:50:50 2001 +++ openbsd-compat.h Thu Feb 22 08:56:03 2001 @@ -16,7 +16,7 @@ #include "mktemp.h" #include "daemon.h" #include "base64.h" -#include "sigaction.h" +#include "bsd-sigaction.h" #include "inet_aton.h" #include "inet_ntoa.h" #include "strsep.h" --- sigaction.c.orig Thu Feb 22 08:51:14 2001 +++ sigaction.c Thu Feb 22 08:56:24 2001 @@ -35,7 +35,7 @@ #include <signal.h> #include "config.h" -#include "sigaction.h" +#include "bsd-sigaction.h" /* This file provides sigaction() emulation using sigvec() */ /* Use only if this is non POSIX system */ Cheers, -Joe