1/* $OpenBSD: sshconnect.h,v 1.47 2023/10/12 02:18:18 djm Exp $ */
2
3/*
4 * Copyright (c) 2000 Markus Friedl.  All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 * 1. Redistributions of source code must retain the above copyright
10 *    notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 *    notice, this list of conditions and the following disclaimer in the
13 *    documentation and/or other materials provided with the distribution.
14 *
15 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
16 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
17 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
18 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
19 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
20 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
21 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
22 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
24 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25 */
26
27typedef struct Sensitive Sensitive;
28struct Sensitive {
29	struct sshkey	**keys;
30	int		nkeys;
31};
32
33struct ssh_conn_info {
34	char *conn_hash_hex;
35	char *shorthost;
36	char *uidstr;
37	char *keyalias;
38	char *thishost;
39	char *host_arg;
40	char *portstr;
41	char *remhost;
42	char *remuser;
43	char *homedir;
44	char *locuser;
45	char *jmphost;
46};
47
48struct addrinfo;
49struct ssh;
50struct hostkeys;
51struct ssh_conn_info;
52
53/* default argument for client percent expansions */
54#define DEFAULT_CLIENT_PERCENT_EXPAND_ARGS(conn_info) \
55	"C", conn_info->conn_hash_hex, \
56	"L", conn_info->shorthost, \
57	"i", conn_info->uidstr, \
58	"k", conn_info->keyalias, \
59	"l", conn_info->thishost, \
60	"n", conn_info->host_arg, \
61	"p", conn_info->portstr, \
62	"d", conn_info->homedir, \
63	"h", conn_info->remhost, \
64	"r", conn_info->remuser, \
65	"u", conn_info->locuser, \
66	"j", conn_info->jmphost
67
68int	 ssh_connect(struct ssh *, const char *, const char *,
69	    struct addrinfo *, struct sockaddr_storage *, u_short,
70	    int, int *, int);
71void	 ssh_kill_proxy_command(void);
72
73void	 ssh_login(struct ssh *, Sensitive *, const char *,
74    struct sockaddr *, u_short, struct passwd *, int,
75    const struct ssh_conn_info *);
76
77int	 verify_host_key(char *, struct sockaddr *, struct sshkey *,
78    const struct ssh_conn_info *);
79
80void	 get_hostfile_hostname_ipaddr(char *, struct sockaddr *, u_short,
81    char **, char **);
82
83void	 ssh_kex2(struct ssh *ssh, char *, struct sockaddr *, u_short,
84    const struct ssh_conn_info *);
85
86void	 ssh_userauth2(struct ssh *ssh, const char *, const char *,
87    char *, Sensitive *);
88
89int	 ssh_local_cmd(const char *);
90
91void	 maybe_add_key_to_agent(const char *, struct sshkey *,
92    const char *, const char *);
93
94void	 load_hostkeys_command(struct hostkeys *, const char *,
95    const char *, const struct ssh_conn_info *,
96    const struct sshkey *, const char *);
97