merge
diff --git a/CHANGES b/CHANGES
index a6cd0b6..ca6e7bb 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,22 @@
+- Fix crash when fallback initshells() is used, reported by Michael Nowak and Mike Tzou
+
+- Support syslog in dbclient, option -o usesyslog=yes. Patch from Konstantin Tokarev
+
+- Kill a proxycommand when dbclient exits, patch from Konstantin Tokarev
+
+- Option to exit when a TCP forward fails, patch from Konstantin Tokarev
+
+- New "-o" option parsing from Konstantin Tokarev. This allows handling some extra options
+  in the style of OpenSSH, though implementing all OpenSSH options is not planned.
+
+- Various cleanups for issues found by a lint tool, patch from Francois Perrad
+
+- Allow specifying commands eg "dropbearmulti dbclient ..." instead of symlinks
+
+- Fix tab indent consistency, patch from Francois Perrad
+
+- Fix issues found by cppcheck, reported by Mike Tzou
+
 2016.72 - 9 March 2016
 
 - Validate X11 forwarding input. Could allow bypass of authorized_keys command= restrictions,
diff --git a/cli-kex.c b/cli-kex.c
index 077fec9..936b95c 100644
--- a/cli-kex.c
+++ b/cli-kex.c
@@ -186,7 +186,7 @@
 
 	char* fp = NULL;
 	FILE *tty = NULL;
-	char response = 'z';
+	int response = 'z';
 
 	fp = sign_key_fingerprint(keyblob, keybloblen);
 	if (cli_opts.always_accept_key) {
diff --git a/cli-session.c b/cli-session.c
index 60f5518..15a2188 100644
--- a/cli-session.c
+++ b/cli-session.c
@@ -361,9 +361,10 @@
 
 	/* Set std{in,out,err} back to non-blocking - busybox ash dies nastily if
 	 * we don't revert the flags */
-	fcntl(cli_ses.stdincopy, F_SETFL, cli_ses.stdinflags);
-	fcntl(cli_ses.stdoutcopy, F_SETFL, cli_ses.stdoutflags);
-	fcntl(cli_ses.stderrcopy, F_SETFL, cli_ses.stderrflags);
+	/* Ignore return value since there's nothing we can do */
+	(void)fcntl(cli_ses.stdincopy, F_SETFL, cli_ses.stdinflags);
+	(void)fcntl(cli_ses.stdoutcopy, F_SETFL, cli_ses.stdoutflags);
+	(void)fcntl(cli_ses.stderrcopy, F_SETFL, cli_ses.stderrflags);
 
 	cli_tty_cleanup();
 
diff --git a/loginrec.c b/loginrec.c
index d6ec75f..1b8b143 100644
--- a/loginrec.c
+++ b/loginrec.c
@@ -305,21 +305,6 @@
 	li->tv_usec = tv.tv_usec;
 }
 
-/* copy a sockaddr_* into our logininfo */
-void
-login_set_addr(struct logininfo *li, const struct sockaddr *sa,
-	       const unsigned int sa_size)
-{
-	unsigned int bufsize = sa_size;
-
-	/* make sure we don't overrun our union */
-	if (sizeof(li->hostaddr) < sa_size)
-		bufsize = sizeof(li->hostaddr);
-
-	memcpy((void *)&(li->hostaddr.sa), (const void *)sa, bufsize);
-}
-
-
 /**
  ** login_write: Call low-level recording functions based on autoconf
  ** results
diff --git a/loginrec.h b/loginrec.h
index 830c045..b2e3778 100644
--- a/loginrec.h
+++ b/loginrec.h
@@ -173,10 +173,6 @@
 int login_write (struct logininfo *li);
 int login_log_entry(struct logininfo *li);
 
-/* set the network address based on network address type */
-void login_set_addr(struct logininfo *li, const struct sockaddr *sa,
-		    const unsigned int sa_size);
-
 /* produce various forms of the line filename */
 char *line_fullname(char *dst, const char *src, size_t dstsize);
 char *line_stripname(char *dst, const char *src, size_t dstsize);
diff --git a/signkey.c b/signkey.c
index 2b61106..9cbf2b0 100644
--- a/signkey.c
+++ b/signkey.c
@@ -93,7 +93,7 @@
 			}
 #endif
 
-			return i;
+			return (enum signkey_type)i;
 		}
 	}
 
diff --git a/svr-kex.c b/svr-kex.c
index 96f4508..f3828aa 100644
--- a/svr-kex.c
+++ b/svr-kex.c
@@ -138,7 +138,7 @@
 			break;
 #endif
 		default:
-			(void)0;
+			dropbear_assert(0);
 	}
 
 	if (readhostkey(fn, svr_opts.hostkey, &type) == DROPBEAR_SUCCESS) {
diff --git a/svr-x11fwd.c b/svr-x11fwd.c
index 2af4141..cf213e8 100644
--- a/svr-x11fwd.c
+++ b/svr-x11fwd.c
@@ -119,7 +119,7 @@
 	/* cleanup */
 	m_free(chansess->x11authprot);
 	m_free(chansess->x11authcookie);
-	close(fd);
+	m_close(fd);
 
 	return DROPBEAR_FAILURE;
 }