Hi,
I recently ported OpenSSH to my hobbyist operating system. The portable
release is very straightforward to work with, but it had a few minor
issues where it assumes the existence of things that might not be on a
POSIX 2008 system. This are the list of issues I encountered that I
believe makes sense to upstream.
* <sys/param.h> is included in many files and isn't a standard header.
The portability layer already handles all the things it might provide
and I could just remove all its inclusions. The build system should
just detect its absence and generate an empty header in
openbsd-compat/.
* bzero is used in deattack.c (and in regress/) instead of the standard
memset. The code should be changed to use memset or the compatibility
layer should provide its own bzero if absent.
* misc.c uses gettimeofday but doesn't include <sys/time.h> to get it.
* timerclear, timerisset and timercmp are used in misc.c and
ssh-keyscan.c. They are non-standard BSD extensions from <sys/time.h>.
The build system should detect their lack and provide its own
versions, or the code could be rewritten to not use them.
* u_short and u_long are used across the codebase, but defines.h only
provides u_char and u_int.
* size_t len in openbsd-compat/strptime.c is unused and causes a
warning. It's used below by code that's commented out and the variable
should be commented out too.
* utimes in openbsd-compat has char * for the path parameter but that's
supposed to be const char *.
* loginrec.c in utmpx_perform_login does a call to utmpx_write_direct
with a parameter named ut, but such a variable does not exist, that
was probably supposed to be utx. Though that code isn't implemented
so not that important.
* DESTDIR is not inherited from the environment in the makefiles, but
instead assigned to the empty string. autoconf packages typically
inherit it from the environment. This is easily fixed by adding
DESTDIR?= instead, or simply removing the line as it already defaults
to the empty string.
* The install makefile target has check-config as a prerequisite, which
runs the compiled ssh, but this doesn't make sense in a cross
compilation situation. The build system should detect cross
compilation and not do this. check-config also doesn't have the
installation of sshd as a prerequisite, so this might cause parallel
make issues on some make implementations.
* $(LD) is used to link instead of $(CC) but LD might be set to 'ld'.
This is a problem because C code is linked with the compiler so it
links with the standard library. All occurrences of $(LD) should be
changed to $(CC) in the makefiles.
* config.sub and config.guess are from 2012. It's important to keep
them up to date with with the GNU config project, otherwise new
machine types and operating systems won't be supported. The git log
mentions a concern about GPLv3 code. The latest upstream files are
GPLv3 but with the exception:
"if you distribute this file as part of a program that contains a
configuration script generated by Autoconf, you may include it under
the same distribution terms that you use for the rest of that
program".
This is the case with OpenSSH so it shouldn't be a problem to
distribute new versions of those files.
* The install target runs install -s to strip the installed programs.
However this runs strip(1) on the program, not $STRIP. This matters
when cross-compiling where the system strip might not correctly handle
the programs. This happened to me where it changed the OSABI ELF
header value. The build system should instead respect the user CFLAGS
and install a non-stripped version if that's what's built. I hear
some autoconf projects a install-strip target (though I haven't
checked). It's probably desirable to change the default from
--enable-strip to --disable-strip as well.
Hopefully this is useful and things that makes sense to fix in the
official OpenSSH portable, as it would aid future ports to new operating
systems. I patched around these issues locally. I reproduced some of
these fixes properly in the OpenSSH portable git and included it as a
git diff below. I think the rest is better solved by you, but I can try
to submit diffs for those items if you prefer that.
This list is to get a process started, not necessarily because it's the
best way to submit work to you. Please let me know if you would prefer
if I split this into a number of request. As always, thanks for a great
piece of software.
Jonas
diff --git a/Makefile.in b/Makefile.in
index 9e32641..a020463 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -19,7 +19,6 @@ piddir=@piddir@
srcdir=@srcdir@
top_srcdir=@top_srcdir@
-DESTDIR VPATH=@srcdir@
SSH_PROGRAM=@bindir@/ssh
ASKPASS_PROGRAM=$(libexecdir)/ssh-askpass
@@ -163,41 +162,41 @@ libssh.a: $(LIBSSH_OBJS)
$(RANLIB) $@
ssh$(EXEEXT): $(LIBCOMPAT) libssh.a $(SSHOBJS)
- $(LD) -o $@ $(SSHOBJS) $(LDFLAGS) -lssh -lopenbsd-compat $(SSHLIBS) $(LIBS)
$(GSSLIBS)
+ $(CC) -o $@ $(SSHOBJS) $(LDFLAGS) -lssh -lopenbsd-compat $(SSHLIBS) $(LIBS)
$(GSSLIBS)
sshd$(EXEEXT): libssh.a $(LIBCOMPAT) $(SSHDOBJS)
- $(LD) -o $@ $(SSHDOBJS) $(LDFLAGS) -lssh -lopenbsd-compat $(SSHDLIBS) $(LIBS)
$(GSSLIBS) $(K5LIBS)
+ $(CC) -o $@ $(SSHDOBJS) $(LDFLAGS) -lssh -lopenbsd-compat $(SSHDLIBS) $(LIBS)
$(GSSLIBS) $(K5LIBS)
scp$(EXEEXT): $(LIBCOMPAT) libssh.a scp.o progressmeter.o
- $(LD) -o $@ scp.o progressmeter.o bufaux.o $(LDFLAGS) -lssh -lopenbsd-compat
$(LIBS)
+ $(CC) -o $@ scp.o progressmeter.o bufaux.o $(LDFLAGS) -lssh -lopenbsd-compat
$(LIBS)
ssh-add$(EXEEXT): $(LIBCOMPAT) libssh.a ssh-add.o
- $(LD) -o $@ ssh-add.o $(LDFLAGS) -lssh -lopenbsd-compat $(LIBS)
+ $(CC) -o $@ ssh-add.o $(LDFLAGS) -lssh -lopenbsd-compat $(LIBS)
ssh-agent$(EXEEXT): $(LIBCOMPAT) libssh.a ssh-agent.o ssh-pkcs11-client.o
- $(LD) -o $@ ssh-agent.o ssh-pkcs11-client.o $(LDFLAGS) -lssh -lopenbsd-compat
$(LIBS)
+ $(CC) -o $@ ssh-agent.o ssh-pkcs11-client.o $(LDFLAGS) -lssh -lopenbsd-compat
$(LIBS)
ssh-keygen$(EXEEXT): $(LIBCOMPAT) libssh.a ssh-keygen.o
- $(LD) -o $@ ssh-keygen.o $(LDFLAGS) -lssh -lopenbsd-compat $(LIBS)
+ $(CC) -o $@ ssh-keygen.o $(LDFLAGS) -lssh -lopenbsd-compat $(LIBS)
ssh-keysign$(EXEEXT): $(LIBCOMPAT) libssh.a ssh-keysign.o roaming_dummy.o
readconf.o
- $(LD) -o $@ ssh-keysign.o readconf.o roaming_dummy.o $(LDFLAGS) -lssh
-lopenbsd-compat $(LIBS)
+ $(CC) -o $@ ssh-keysign.o readconf.o roaming_dummy.o $(LDFLAGS) -lssh
-lopenbsd-compat $(LIBS)
ssh-pkcs11-helper$(EXEEXT): $(LIBCOMPAT) libssh.a ssh-pkcs11-helper.o
ssh-pkcs11.o
- $(LD) -o $@ ssh-pkcs11-helper.o ssh-pkcs11.o $(LDFLAGS) -lssh -lopenbsd-compat
-lssh -lopenbsd-compat $(LIBS)
+ $(CC) -o $@ ssh-pkcs11-helper.o ssh-pkcs11.o $(LDFLAGS) -lssh -lopenbsd-compat
-lssh -lopenbsd-compat $(LIBS)
ssh-keyscan$(EXEEXT): $(LIBCOMPAT) libssh.a ssh-keyscan.o roaming_dummy.o
- $(LD) -o $@ ssh-keyscan.o roaming_dummy.o $(LDFLAGS) -lssh -lopenbsd-compat
-lssh $(LIBS)
+ $(CC) -o $@ ssh-keyscan.o roaming_dummy.o $(LDFLAGS) -lssh -lopenbsd-compat
-lssh $(LIBS)
sftp-server$(EXEEXT): $(LIBCOMPAT) libssh.a sftp.o sftp-common.o sftp-server.o
sftp-server-main.o
- $(LD) -o $@ sftp-server.o sftp-common.o sftp-server-main.o $(LDFLAGS) -lssh
-lopenbsd-compat $(LIBS)
+ $(CC) -o $@ sftp-server.o sftp-common.o sftp-server-main.o $(LDFLAGS) -lssh
-lopenbsd-compat $(LIBS)
sftp$(EXEEXT): $(LIBCOMPAT) libssh.a sftp.o sftp-client.o sftp-common.o
sftp-glob.o progressmeter.o
- $(LD) -o $@ progressmeter.o sftp.o sftp-client.o sftp-common.o sftp-glob.o
$(LDFLAGS) -lssh -lopenbsd-compat $(LIBS) $(LIBEDIT)
+ $(CC) -o $@ progressmeter.o sftp.o sftp-client.o sftp-common.o sftp-glob.o
$(LDFLAGS) -lssh -lopenbsd-compat $(LIBS) $(LIBEDIT)
# test driver for the loginrec code - not built by default
logintest: logintest.o $(LIBCOMPAT) libssh.a loginrec.o
- $(LD) -o $@ logintest.o $(LDFLAGS) loginrec.o -lopenbsd-compat -lssh $(LIBS)
+ $(CC) -o $@ logintest.o $(LDFLAGS) loginrec.o -lopenbsd-compat -lssh $(LIBS)
$(MANPAGES): $(MANPAGES_IN)
if test "$(MANTYPE)" = "cat"; then \
@@ -456,7 +455,7 @@ UNITTESTS_TEST_SSHBUF_OBJS=\
regress/unittests/sshbuf/test_sshbuf$(EXEEXT): ${UNITTESTS_TEST_SSHBUF_OBJS} \
regress/unittests/test_helper/libtest_helper.a libssh.a
- $(LD) -o $@ $(LDFLAGS) $(UNITTESTS_TEST_SSHBUF_OBJS) \
+ $(CC) -o $@ $(LDFLAGS) $(UNITTESTS_TEST_SSHBUF_OBJS) \
regress/unittests/test_helper/libtest_helper.a \
-lssh -lopenbsd-compat -lssh -lopenbsd-compat $(LIBS)
@@ -469,7 +468,7 @@ UNITTESTS_TEST_SSHKEY_OBJS=\
regress/unittests/sshkey/test_sshkey$(EXEEXT): ${UNITTESTS_TEST_SSHKEY_OBJS} \
regress/unittests/test_helper/libtest_helper.a libssh.a
- $(LD) -o $@ $(LDFLAGS) $(UNITTESTS_TEST_SSHKEY_OBJS) \
+ $(CC) -o $@ $(LDFLAGS) $(UNITTESTS_TEST_SSHKEY_OBJS) \
regress/unittests/test_helper/libtest_helper.a \
-lssh -lopenbsd-compat -lssh -lopenbsd-compat $(LIBS)
@@ -478,7 +477,7 @@ UNITTESTS_TEST_BITMAP_OBJS=\
regress/unittests/bitmap/test_bitmap$(EXEEXT): ${UNITTESTS_TEST_BITMAP_OBJS} \
regress/unittests/test_helper/libtest_helper.a libssh.a
- $(LD) -o $@ $(LDFLAGS) $(UNITTESTS_TEST_BITMAP_OBJS) \
+ $(CC) -o $@ $(LDFLAGS) $(UNITTESTS_TEST_BITMAP_OBJS) \
regress/unittests/test_helper/libtest_helper.a \
-lssh -lopenbsd-compat -lssh -lopenbsd-compat $(LIBS)
@@ -489,7 +488,7 @@ UNITTESTS_TEST_KEX_OBJS=\
regress/unittests/kex/test_kex$(EXEEXT): ${UNITTESTS_TEST_KEX_OBJS} \
regress/unittests/test_helper/libtest_helper.a libssh.a
- $(LD) -o $@ $(LDFLAGS) $(UNITTESTS_TEST_KEX_OBJS) \
+ $(CC) -o $@ $(LDFLAGS) $(UNITTESTS_TEST_KEX_OBJS) \
regress/unittests/test_helper/libtest_helper.a \
-lssh -lopenbsd-compat -lssh -lopenbsd-compat $(LIBS)
@@ -500,7 +499,7 @@ UNITTESTS_TEST_HOSTKEYS_OBJS=\
regress/unittests/hostkeys/test_hostkeys$(EXEEXT): \
${UNITTESTS_TEST_HOSTKEYS_OBJS} \
regress/unittests/test_helper/libtest_helper.a libssh.a
- $(LD) -o $@ $(LDFLAGS) $(UNITTESTS_TEST_HOSTKEYS_OBJS) \
+ $(CC) -o $@ $(LDFLAGS) $(UNITTESTS_TEST_HOSTKEYS_OBJS) \
regress/unittests/test_helper/libtest_helper.a \
-lssh -lopenbsd-compat -lssh -lopenbsd-compat $(LIBS)
diff --git a/contrib/cygwin/Makefile b/contrib/cygwin/Makefile
index a0261f4..89c7dfd 100644
--- a/contrib/cygwin/Makefile
+++ b/contrib/cygwin/Makefile
@@ -14,8 +14,6 @@ inetdefdir=$(defaultsdir)/inetd.d
PRIVSEP_PATH=/var/empty
INSTALL=/usr/bin/install -c
-DESTDIR-
all:
@echo
@echo "Use \`make cygwin-postinstall DESTDIR=[package
directory]'"
diff --git a/deattack.c b/deattack.c
index e76481a..e5193db 100644
--- a/deattack.c
+++ b/deattack.c
@@ -97,7 +97,7 @@ check_crc(const u_char *S, const u_char *buf, u_int32_t len)
void
deattack_init(struct deattack_ctx *dctx)
{
- bzero(dctx, sizeof(*dctx));
+ memset(dctx, sizeof(*dctx));
dctx->n = HASH_MINSIZE / HASH_ENTRYSIZE;
}
diff --git a/loginrec.c b/loginrec.c
index 788553e..332da3e 100644
--- a/loginrec.c
+++ b/loginrec.c
@@ -1032,7 +1032,7 @@ utmpx_perform_login(struct logininfo *li)
return (0);
}
# else
- if (!utmpx_write_direct(li, &ut)) {
+ if (!utmpx_write_direct(li, &utx)) {
logit("%s: utmp_write_direct() failed", __func__);
return (0);
}
diff --git a/misc.c b/misc.c
index 3170218..aee3631 100644
--- a/misc.c
+++ b/misc.c
@@ -29,6 +29,9 @@
#include <sys/types.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
+#ifdef HAVE_SYS_TIME_H
+# include <sys/time.h>
+#endif
#include <sys/un.h>
#include <limits.h>
diff --git a/openbsd-compat/bsd-misc.c b/openbsd-compat/bsd-misc.c
index 2a788e4..97ccf70 100644
--- a/openbsd-compat/bsd-misc.c
+++ b/openbsd-compat/bsd-misc.c
@@ -105,7 +105,7 @@ const char *strerror(int e)
#endif
#ifndef HAVE_UTIMES
-int utimes(char *filename, struct timeval *tvp)
+int utimes(const char *filename, struct timeval *tvp)
{
struct utimbuf ub;
diff --git a/openbsd-compat/bsd-misc.h b/openbsd-compat/bsd-misc.h
index 0d81d17..7e77bd2 100644
--- a/openbsd-compat/bsd-misc.h
+++ b/openbsd-compat/bsd-misc.h
@@ -63,7 +63,7 @@ struct timeval {
}
#endif /* HAVE_STRUCT_TIMEVAL */
-int utimes(char *, struct timeval *);
+int utimes(const char *, struct timeval *);
#endif /* HAVE_UTIMES */
#ifndef HAVE_TRUNCATE
diff --git a/openbsd-compat/strptime.c b/openbsd-compat/strptime.c
index d8d83d9..8958767 100644
--- a/openbsd-compat/strptime.c
+++ b/openbsd-compat/strptime.c
@@ -68,7 +68,9 @@ _strptime(const char *buf, const char *fmt, struct tm *tm, int
initialize)
{
unsigned char c;
const unsigned char *bp;
+#if 0
size_t len;
+#endif
int alt_format, i;
static int century, relyear;
diff --git a/regress/modpipe.c b/regress/modpipe.c
index e854f9e..0ccd222 100755
--- a/regress/modpipe.c
+++ b/regress/modpipe.c
@@ -78,7 +78,7 @@ parse_modification(const char *s, struct modification Hi,
I recently ported OpenSSH to my hobbyist operating system. The portable
release is very straightforward to work with, but it had a few minor issues
where it assumes the existence of things that might not be on a POSIX 2008
system. This are the list of issues I encountered that I believe makes
sense to upstream.
* <sys/param.h> is included in many files and isn't a standard header.
The
portability layer already handles all the things it might provide and I
could just remove all its inclusions. The build system should just detect
its absence and generate an empty header in openbsd-compat/.
* bzero is used in deattack.c (and in regress/) instead of the standard
memset. The code should be changed to use memset or the compatibility
layer should provide its own bzero if absent.
* misc.c uses gettimeofday but doesn't include <sys/time.h> to get it.
* timerclear, timerisset and timercmp are used in misc.c and ssh-keyscan.c.
They are non-standard BSD extensions from <sys/time.h>. The build system
should detect their lack and provide its own versions, or the code could
be rewritten to not use them.
* u_short and u_long are used across the codebase, but defines.h only
provides u_char and u_int.
* size_t len in openbsd-compat/strptime.c is unused and causes a warning.
It's used below by code that's commented out and the variable should be
commented out too.
* utimes in openbsd-compat has char * for the path parameter but that's
supposed to be const char *.
* loginrec.c in utmpx_perform_login does a call to utmpx_write_direct with a
parameter named ut, but such a variable does not exist, that was probably
supposed to be utx. Though that code isn't implemented so not that
important.
* DESTDIR is not inherited from the environment in the makefiles, but
instead assigned to the empty string. autoconf packages typically inherit
it from the environment. This is easily fixed by adding DESTDIR?instead, or
simply removing the line as it already defaults to the empty
string.
* The install makefile target has check-config as a prerequisite, which runs
the compiled ssh, but this doesn't make sense in a cross-compilation
situation. The build system should detect cross-compilation and not do
this. check-config also doesn't have the installation of sshd as a
prerequisite, so this might cause parallel make issues on some make
implementations.
* $(LD) is used to link instead of $(CC) but LD might be set to 'ld'.
This
is a problem because C code is linked with the compiler so it links with
the standard library. All occurrences of $(LD) should be changed to $(CC)
in the makefiles.
* config.sub and config.guess are from 2012. It's important to keep them up
to date with with the GNU config project, otherwise new machine types and
operating systems won't be supported. The git log mentions a concern
about GPLv3 code. The latest upstream files are GPLv3 but with the
exception:
"if you distribute this file as part of a program that contains a
configuration script generated by Autoconf, you may include it under the
same distribution terms that you use for the rest of that program".
This is the case with OpenSSH so it shouldn't be a problem to distribute
new versions of those files.
* The install target runs install -s to strip the installed programs.
However this runs strip(1) on the program, not $STRIP. This matters when
cross-compiling where the system strip might not correctly handle the
programs. This happened to me where it changed the OSABI ELF header
value. The build system should instead respect the user CFLAGS and install
a non-stripped version if that's what's built. I hear some autoconf
projects a install-strip target (though I haven't checked). It's
probably
desirable to change the default from --enable-strip to --disable-strip as
well.
Hopefully this is useful and things that makes sense to fix in the official
OpenSSH portable, as it would aid future ports to new operating systems. I
patched around these issues locally. I reproduced some of these fixes
properly in the OpenSSH portable git and included it as a git diff below. I
think the rest is better solved by you, but I can try to submit diffs for
those items if you prefer that.
This list is to get a process started, not necessarily because it's the best
way to submit work to you. Please let me know if you would prefer if I
split this into a number of request. As always, thanks for a great piece
of software.
Jonas
diff --git a/Makefile.in b/Makefile.in
index 9e32641..a020463 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -19,7 +19,6 @@ piddir=@piddir@
srcdir=@srcdir@
top_srcdir=@top_srcdir@
-DESTDIRVPATH=@srcdir@
SSH_PROGRAM=@bindir@/ssh
ASKPASS_PROGRAM=$(libexecdir)/ssh-askpass
@@ -163,41 +162,41 @@ libssh.a: $(LIBSSH_OBJS)
$(RANLIB) $@
ssh$(EXEEXT): $(LIBCOMPAT) libssh.a $(SSHOBJS)
- $(LD) -o $@ $(SSHOBJS) $(LDFLAGS) -lssh -lopenbsd-compat $(SSHLIBS) $(LIBS)
$(GSSLIBS)
+ $(CC) -o $@ $(SSHOBJS) $(LDFLAGS) -lssh -lopenbsd-compat $(SSHLIBS) $(LIBS)
$(GSSLIBS)
sshd$(EXEEXT): libssh.a $(LIBCOMPAT) $(SSHDOBJS)
- $(LD) -o $@ $(SSHDOBJS) $(LDFLAGS) -lssh -lopenbsd-compat $(SSHDLIBS) $(LIBS)
$(GSSLIBS) $(K5LIBS)
+ $(CC) -o $@ $(SSHDOBJS) $(LDFLAGS) -lssh -lopenbsd-compat $(SSHDLIBS) $(LIBS)
$(GSSLIBS) $(K5LIBS)
scp$(EXEEXT): $(LIBCOMPAT) libssh.a scp.o progressmeter.o
- $(LD) -o $@ scp.o progressmeter.o bufaux.o $(LDFLAGS) -lssh -lopenbsd-compat
$(LIBS)
+ $(CC) -o $@ scp.o progressmeter.o bufaux.o $(LDFLAGS) -lssh -lopenbsd-compat
$(LIBS)
ssh-add$(EXEEXT): $(LIBCOMPAT) libssh.a ssh-add.o
- $(LD) -o $@ ssh-add.o $(LDFLAGS) -lssh -lopenbsd-compat $(LIBS)
+ $(CC) -o $@ ssh-add.o $(LDFLAGS) -lssh -lopenbsd-compat $(LIBS)
ssh-agent$(EXEEXT): $(LIBCOMPAT) libssh.a ssh-agent.o ssh-pkcs11-client.o
- $(LD) -o $@ ssh-agent.o ssh-pkcs11-client.o $(LDFLAGS) -lssh -lopenbsd-compat
$(LIBS)
+ $(CC) -o $@ ssh-agent.o ssh-pkcs11-client.o $(LDFLAGS) -lssh -lopenbsd-compat
$(LIBS)
ssh-keygen$(EXEEXT): $(LIBCOMPAT) libssh.a ssh-keygen.o
- $(LD) -o $@ ssh-keygen.o $(LDFLAGS) -lssh -lopenbsd-compat $(LIBS)
+ $(CC) -o $@ ssh-keygen.o $(LDFLAGS) -lssh -lopenbsd-compat $(LIBS)
ssh-keysign$(EXEEXT): $(LIBCOMPAT) libssh.a ssh-keysign.o roaming_dummy.o
readconf.o
- $(LD) -o $@ ssh-keysign.o readconf.o roaming_dummy.o $(LDFLAGS) -lssh
-lopenbsd-compat $(LIBS)
+ $(CC) -o $@ ssh-keysign.o readconf.o roaming_dummy.o $(LDFLAGS) -lssh
-lopenbsd-compat $(LIBS)
ssh-pkcs11-helper$(EXEEXT): $(LIBCOMPAT) libssh.a ssh-pkcs11-helper.o
ssh-pkcs11.o
- $(LD) -o $@ ssh-pkcs11-helper.o ssh-pkcs11.o $(LDFLAGS) -lssh -lopenbsd-compat
-lssh -lopenbsd-compat $(LIBS)
+ $(CC) -o $@ ssh-pkcs11-helper.o ssh-pkcs11.o $(LDFLAGS) -lssh -lopenbsd-compat
-lssh -lopenbsd-compat $(LIBS)
ssh-keyscan$(EXEEXT): $(LIBCOMPAT) libssh.a ssh-keyscan.o roaming_dummy.o
- $(LD) -o $@ ssh-keyscan.o roaming_dummy.o $(LDFLAGS) -lssh -lopenbsd-compat
-lssh $(LIBS)
+ $(CC) -o $@ ssh-keyscan.o roaming_dummy.o $(LDFLAGS) -lssh -lopenbsd-compat
-lssh $(LIBS)
sftp-server$(EXEEXT): $(LIBCOMPAT) libssh.a sftp.o sftp-common.o sftp-server.o
sftp-server-main.o
- $(LD) -o $@ sftp-server.o sftp-common.o sftp-server-main.o $(LDFLAGS) -lssh
-lopenbsd-compat $(LIBS)
+ $(CC) -o $@ sftp-server.o sftp-common.o sftp-server-main.o $(LDFLAGS) -lssh
-lopenbsd-compat $(LIBS)
sftp$(EXEEXT): $(LIBCOMPAT) libssh.a sftp.o sftp-client.o sftp-common.o
sftp-glob.o progressmeter.o
- $(LD) -o $@ progressmeter.o sftp.o sftp-client.o sftp-common.o sftp-glob.o
$(LDFLAGS) -lssh -lopenbsd-compat $(LIBS) $(LIBEDIT)
+ $(CC) -o $@ progressmeter.o sftp.o sftp-client.o sftp-common.o sftp-glob.o
$(LDFLAGS) -lssh -lopenbsd-compat $(LIBS) $(LIBEDIT)
# test driver for the loginrec code - not built by default
logintest: logintest.o $(LIBCOMPAT) libssh.a loginrec.o
- $(LD) -o $@ logintest.o $(LDFLAGS) loginrec.o -lopenbsd-compat -lssh $(LIBS)
+ $(CC) -o $@ logintest.o $(LDFLAGS) loginrec.o -lopenbsd-compat -lssh $(LIBS)
$(MANPAGES): $(MANPAGES_IN)
if test "$(MANTYPE)" = "cat"; then \
@@ -456,7 +455,7 @@ UNITTESTS_TEST_SSHBUF_OBJS=\
regress/unittests/sshbuf/test_sshbuf$(EXEEXT): ${UNITTESTS_TEST_SSHBUF_OBJS} \
regress/unittests/test_helper/libtest_helper.a libssh.a
- $(LD) -o $@ $(LDFLAGS) $(UNITTESTS_TEST_SSHBUF_OBJS) \
+ $(CC) -o $@ $(LDFLAGS) $(UNITTESTS_TEST_SSHBUF_OBJS) \
regress/unittests/test_helper/libtest_helper.a \
-lssh -lopenbsd-compat -lssh -lopenbsd-compat $(LIBS)
@@ -469,7 +468,7 @@ UNITTESTS_TEST_SSHKEY_OBJS=\
regress/unittests/sshkey/test_sshkey$(EXEEXT): ${UNITTESTS_TEST_SSHKEY_OBJS} \
regress/unittests/test_helper/libtest_helper.a libssh.a
- $(LD) -o $@ $(LDFLAGS) $(UNITTESTS_TEST_SSHKEY_OBJS) \
+ $(CC) -o $@ $(LDFLAGS) $(UNITTESTS_TEST_SSHKEY_OBJS) \
regress/unittests/test_helper/libtest_helper.a \
-lssh -lopenbsd-compat -lssh -lopenbsd-compat $(LIBS)
@@ -478,7 +477,7 @@ UNITTESTS_TEST_BITMAP_OBJS=\
regress/unittests/bitmap/test_bitmap$(EXEEXT): ${UNITTESTS_TEST_BITMAP_OBJS} \
regress/unittests/test_helper/libtest_helper.a libssh.a
- $(LD) -o $@ $(LDFLAGS) $(UNITTESTS_TEST_BITMAP_OBJS) \
+ $(CC) -o $@ $(LDFLAGS) $(UNITTESTS_TEST_BITMAP_OBJS) \
regress/unittests/test_helper/libtest_helper.a \
-lssh -lopenbsd-compat -lssh -lopenbsd-compat $(LIBS)
@@ -489,7 +488,7 @@ UNITTESTS_TEST_KEX_OBJS=\
regress/unittests/kex/test_kex$(EXEEXT): ${UNITTESTS_TEST_KEX_OBJS} \
regress/unittests/test_helper/libtest_helper.a libssh.a
- $(LD) -o $@ $(LDFLAGS) $(UNITTESTS_TEST_KEX_OBJS) \
+ $(CC) -o $@ $(LDFLAGS) $(UNITTESTS_TEST_KEX_OBJS) \
regress/unittests/test_helper/libtest_helper.a \
-lssh -lopenbsd-compat -lssh -lopenbsd-compat $(LIBS)
@@ -500,7 +499,7 @@ UNITTESTS_TEST_HOSTKEYS_OBJS=\
regress/unittests/hostkeys/test_hostkeys$(EXEEXT): \
${UNITTESTS_TEST_HOSTKEYS_OBJS} \
regress/unittests/test_helper/libtest_helper.a libssh.a
- $(LD) -o $@ $(LDFLAGS) $(UNITTESTS_TEST_HOSTKEYS_OBJS) \
+ $(CC) -o $@ $(LDFLAGS) $(UNITTESTS_TEST_HOSTKEYS_OBJS) \
regress/unittests/test_helper/libtest_helper.a \
-lssh -lopenbsd-compat -lssh -lopenbsd-compat $(LIBS)
diff --git a/contrib/cygwin/Makefile b/contrib/cygwin/Makefile
index a0261f4..89c7dfd 100644
--- a/contrib/cygwin/Makefile
+++ b/contrib/cygwin/Makefile
@@ -14,8 +14,6 @@ inetdefdir=$(defaultsdir)/inetd.d
PRIVSEP_PATH=/var/empty
INSTALL=/usr/bin/install -c
-DESTDIR-
all:
@echo
@echo "Use \`make cygwin-postinstall DESTDIR=[package directory]'"
diff --git a/deattack.c b/deattack.c
index e76481a..e5193db 100644
--- a/deattack.c
+++ b/deattack.c
@@ -97,7 +97,7 @@ check_crc(const u_char *S, const u_char *buf, u_int32_t len)
void
deattack_init(struct deattack_ctx *dctx)
{
- bzero(dctx, sizeof(*dctx));
+ memset(dctx, sizeof(*dctx));
dctx->n = HASH_MINSIZE / HASH_ENTRYSIZE;
}
diff --git a/loginrec.c b/loginrec.c
index 788553e..332da3e 100644
--- a/loginrec.c
+++ b/loginrec.c
@@ -1032,7 +1032,7 @@ utmpx_perform_login(struct logininfo *li)
return (0);
}
# else
- if (!utmpx_write_direct(li, &ut)) {
+ if (!utmpx_write_direct(li, &utx)) {
logit("%s: utmp_write_direct() failed", __func__);
return (0);
}
diff --git a/misc.c b/misc.c
index 3170218..aee3631 100644
--- a/misc.c
+++ b/misc.c
@@ -29,6 +29,9 @@
#include <sys/types.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
+#ifdef HAVE_SYS_TIME_H
+# include <sys/time.h>
+#endif
#include <sys/un.h>
#include <limits.h>
diff --git a/openbsd-compat/bsd-misc.c b/openbsd-compat/bsd-misc.c
index 2a788e4..97ccf70 100644
--- a/openbsd-compat/bsd-misc.c
+++ b/openbsd-compat/bsd-misc.c
@@ -105,7 +105,7 @@ const char *strerror(int e)
#endif
#ifndef HAVE_UTIMES
-int utimes(char *filename, struct timeval *tvp)
+int utimes(const char *filename, struct timeval *tvp)
{
struct utimbuf ub;
diff --git a/openbsd-compat/bsd-misc.h b/openbsd-compat/bsd-misc.h
index 0d81d17..7e77bd2 100644
--- a/openbsd-compat/bsd-misc.h
+++ b/openbsd-compat/bsd-misc.h
@@ -63,7 +63,7 @@ struct timeval {
}
#endif /* HAVE_STRUCT_TIMEVAL */
-int utimes(char *, struct timeval *);
+int utimes(const char *, struct timeval *);
#endif /* HAVE_UTIMES */
#ifndef HAVE_TRUNCATE
diff --git a/openbsd-compat/strptime.c b/openbsd-compat/strptime.c
index d8d83d9..8958767 100644
--- a/openbsd-compat/strptime.c
+++ b/openbsd-compat/strptime.c
@@ -68,7 +68,9 @@ _strptime(const char *buf, const char *fmt, struct tm *tm, int
initialize)
{
unsigned char c;
const unsigned char *bp;
+#if 0
size_t len;
+#endif
int alt_format, i;
static int century, relyear;
diff --git a/regress/modpipe.c b/regress/modpipe.c
index e854f9e..0ccd222 100755
--- a/regress/modpipe.c
+++ b/regress/modpipe.c
@@ -78,7 +78,7 @@ parse_modification(const char *s, struct modification *m)
char what[16+1];
int n, m1, m2;
- bzero(m, sizeof(*m));
+ memset(m, 0, sizeof(*m));
if ((n = sscanf(s, "%16[^:]%*[:]%llu%*[:]%i%*[:]%i",
what, &m->offset, &m1, &m2)) < 3)
errx(1, "Invalid modification spec \"%s\"", s);
diff --git a/regress/netcat.c b/regress/netcat.c
index 6234ba0..198a838 100644
--- a/regress/netcat.c
+++ b/regress/netcat.c
@@ -1061,7 +1061,7 @@ fdpass(int nfd)
msg.msg_iov = &vec;
msg.msg_iovlen = 1;
- bzero(&pfd, sizeof(pfd));
+ memset(&pfd, 0, sizeof(pfd));
pfd.fd = STDOUT_FILENO;
for (;;) {
r = sendmsg(STDOUT_FILENO, &msg, 0);*m)
char what[16+1];
int n, m1, m2;
- bzero(m, sizeof(*m));
+ memset(m, 0, sizeof(*m));
if ((n = sscanf(s, "%16[^:]%*[:]%llu%*[:]%i%*[:]%i",
what, &m->offset, &m1, &m2)) < 3)
errx(1, "Invalid modification spec \"%s\"", s);
diff --git a/regress/netcat.c b/regress/netcat.c
index 6234ba0..198a838 100644
--- a/regress/netcat.c
+++ b/regress/netcat.c
@@ -1061,7 +1061,7 @@ fdpass(int nfd)
msg.msg_iov = &vec;
msg.msg_iovlen = 1;
- bzero(&pfd, sizeof(pfd));
+ memset(&pfd, 0, sizeof(pfd));
pfd.fd = STDOUT_FILENO;
for (;;) {
r = sendmsg(STDOUT_FILENO, &msg, 0);