upstream commit

refactor channels.c

Move static state to a "struct ssh_channels" that is allocated at
runtime and tracked as a member of struct ssh.

Explicitly pass "struct ssh" to all channels functions.

Replace use of the legacy packet APIs in channels.c.

Rework sshd_config PermitOpen handling: previously the configuration
parser would call directly into the channels layer. After the refactor
this is not possible, as the channels structures are allocated at
connection time and aren't available when the configuration is parsed.
The server config parser now tracks PermitOpen itself and explicitly
configures the channels code later.

ok markus@

Upstream-ID: 11828f161656b965cc306576422613614bea2d8f
diff --git a/session.h b/session.h
index 74c557d..54dd1f0 100644
--- a/session.h
+++ b/session.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: session.h,v 1.34 2017/08/18 05:36:45 djm Exp $ */
+/* $OpenBSD: session.h,v 1.35 2017/09/12 06:32:07 djm Exp $ */
 
 /*
  * Copyright (c) 2000, 2001 Markus Friedl.  All rights reserved.
@@ -62,20 +62,20 @@
 	} *env;
 };
 
-void	 do_authenticated(Authctxt *);
-void	 do_cleanup(Authctxt *);
+void	 do_authenticated(struct ssh *, Authctxt *);
+void	 do_cleanup(struct ssh *, Authctxt *);
 
 int	 session_open(Authctxt *, int);
 void	 session_unused(int);
-int	 session_input_channel_req(Channel *, const char *);
-void	 session_close_by_pid(pid_t, int);
-void	 session_close_by_channel(int, void *);
-void	 session_destroy_all(void (*)(Session *));
+int	 session_input_channel_req(struct ssh *, Channel *, const char *);
+void	 session_close_by_pid(struct ssh *ssh, pid_t, int);
+void	 session_close_by_channel(struct ssh *, int, void *);
+void	 session_destroy_all(struct ssh *, void (*)(Session *));
 void	 session_pty_cleanup2(Session *);
 
 Session	*session_new(void);
 Session	*session_by_tty(char *);
-void	 session_close(Session *);
+void	 session_close(struct ssh *, Session *);
 void	 do_setusercontext(struct passwd *);
 
 const char	*session_get_remote_name_or_ip(struct ssh *, u_int, int);