xref: /dragonfly/crypto/openssh/readconf.h (revision ba1276acd1c8c22d225b1bcf370a14c878644f44)
1 /* $OpenBSD: readconf.h,v 1.156 2024/03/04 02:16:11 djm Exp $ */
2 
3 /*
4  * Author: Tatu Ylonen <ylo@cs.hut.fi>
5  * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
6  *                    All rights reserved
7  * Functions for reading the configuration file.
8  *
9  * As far as I am concerned, the code I have written for this software
10  * can be used freely for any purpose.  Any derived versions of this
11  * software must be clearly marked as such, and if the derived work is
12  * incompatible with the protocol description in the RFC file, it must be
13  * called by a name other than "ssh" or "Secure Shell".
14  */
15 
16 #ifndef READCONF_H
17 #define READCONF_H
18 
19 /* Data structure for representing option data. */
20 
21 #define SSH_MAX_HOSTS_FILES   32
22 #define MAX_CANON_DOMAINS     32
23 #define PATH_MAX_SUN                    (sizeof((struct sockaddr_un *)0)->sun_path)
24 
25 struct allowed_cname {
26           char *source_list;
27           char *target_list;
28 };
29 
30 typedef struct {
31           char   *host_arg;   /* Host arg as specified on command line. */
32           int     forward_agent;        /* Forward authentication agent. */
33           char   *forward_agent_sock_path; /* Optional path of the agent. */
34           int     forward_x11;          /* Forward X11 display. */
35           int     forward_x11_timeout;  /* Expiration for Cookies */
36           int     forward_x11_trusted;  /* Trust Forward X11 display. */
37           int     exit_on_forward_failure;        /* Exit if bind(2) fails for -L/-R */
38           char   *xauth_location;       /* Location for xauth program */
39           struct ForwardOptions fwd_opts;         /* forwarding options */
40           int     pubkey_authentication;          /* Try ssh2 pubkey authentication. */
41           int     hostbased_authentication;       /* ssh2's rhosts_rsa */
42           int     gss_authentication;   /* Try GSS authentication */
43           int     gss_deleg_creds;      /* Delegate GSS credentials */
44           int     password_authentication;        /* Try password
45                                                              * authentication. */
46           int     kbd_interactive_authentication; /* Try keyboard-interactive auth. */
47           char      *kbd_interactive_devices; /* Keyboard-interactive auth devices. */
48           int     batch_mode; /* Batch mode: do not ask for passwords. */
49           int     check_host_ip;        /* Also keep track of keys for IP address */
50           int     strict_host_key_checking;       /* Strict host key checking. */
51           int     compression;          /* Compress packets in both directions. */
52           int     tcp_keep_alive;       /* Set SO_KEEPALIVE. */
53           int       ip_qos_interactive; /* IP ToS/DSCP/class for interactive */
54           int       ip_qos_bulk;                  /* IP ToS/DSCP/class for bulk traffic */
55           SyslogFacility log_facility;  /* Facility for system logging. */
56           LogLevel log_level; /* Level for logging. */
57           u_int     num_log_verbose;    /* Verbose log overrides */
58           char   **log_verbose;
59           int     port;                 /* Port to connect. */
60           int     address_family;
61           int     connection_attempts;  /* Max attempts (seconds) before
62                                                    * giving up */
63           int     connection_timeout;   /* Max time (seconds) before
64                                                    * aborting connection attempt */
65           int     number_of_password_prompts;     /* Max number of password
66                                                              * prompts. */
67           char   *ciphers;    /* SSH2 ciphers in order of preference. */
68           char   *macs;                 /* SSH2 macs in order of preference. */
69           char   *hostkeyalgorithms;    /* SSH2 server key types in order of preference. */
70           char   *kex_algorithms;       /* SSH2 kex methods in order of preference. */
71           char   *ca_sign_algorithms;   /* Allowed CA signature algorithms */
72           char   *hostname;   /* Real host to connect. */
73           char   *tag;                  /* Configuration tag name. */
74           char   *host_key_alias;       /* hostname alias for .ssh/known_hosts */
75           char   *proxy_command;        /* Proxy command for connecting the host. */
76           char   *user;                 /* User to log in as. */
77           int     escape_char;          /* Escape character; -2 = none */
78 
79           u_int     num_system_hostfiles;         /* Paths for /etc/ssh/ssh_known_hosts */
80           char   *system_hostfiles[SSH_MAX_HOSTS_FILES];
81           u_int     num_user_hostfiles; /* Path for $HOME/.ssh/known_hosts */
82           char   *user_hostfiles[SSH_MAX_HOSTS_FILES];
83           char   *preferred_authentications;
84           char   *bind_address;         /* local socket address for connection to sshd */
85           char   *bind_interface;       /* local interface for bind address */
86           char   *pkcs11_provider; /* PKCS#11 provider */
87           char   *sk_provider; /* Security key provider */
88           int       verify_host_key_dns;          /* Verify host key using DNS */
89 
90           int     num_identity_files;   /* Number of files for identities. */
91           char   *identity_files[SSH_MAX_IDENTITY_FILES];
92           int    identity_file_userprovided[SSH_MAX_IDENTITY_FILES];
93           struct sshkey *identity_keys[SSH_MAX_IDENTITY_FILES];
94 
95           int       num_certificate_files; /* Number of extra certificates for ssh. */
96           char      *certificate_files[SSH_MAX_CERTIFICATE_FILES];
97           int       certificate_file_userprovided[SSH_MAX_CERTIFICATE_FILES];
98           struct sshkey *certificates[SSH_MAX_CERTIFICATE_FILES];
99 
100           int       add_keys_to_agent;
101           int       add_keys_to_agent_lifespan;
102           char   *identity_agent;                 /* Optional path to ssh-agent socket */
103 
104           /* Local TCP/IP forward requests. */
105           int     num_local_forwards;
106           struct Forward *local_forwards;
107 
108           /* Remote TCP/IP forward requests. */
109           int     num_remote_forwards;
110           struct Forward *remote_forwards;
111           int       clear_forwardings;
112 
113           /* Restrict remote dynamic forwarding */
114           char  **permitted_remote_opens;
115           u_int     num_permitted_remote_opens;
116 
117           /* stdio forwarding (-W) host and port */
118           char   *stdio_forward_host;
119           int       stdio_forward_port;
120 
121           int       enable_ssh_keysign;
122           int64_t rekey_limit;
123           int       rekey_interval;
124           int       no_host_authentication_for_localhost;
125           int       identities_only;
126           int       server_alive_interval;
127           int       server_alive_count_max;
128 
129           u_int     num_send_env;
130           char      **send_env;
131           u_int     num_setenv;
132           char      **setenv;
133 
134           char      *control_path;
135           int       control_master;
136           int     control_persist; /* ControlPersist flag */
137           int     control_persist_timeout; /* ControlPersist timeout (seconds) */
138 
139           int       hash_known_hosts;
140 
141           int       tun_open; /* tun(4) */
142           int     tun_local;  /* force tun device (optional) */
143           int     tun_remote; /* force tun device (optional) */
144 
145           char      *local_command;
146           int       permit_local_command;
147           char      *remote_command;
148           int       visual_host_key;
149 
150           int       request_tty;
151           int       session_type;
152           int       stdin_null;
153           int       fork_after_authentication;
154 
155           int       proxy_use_fdpass;
156 
157           int       num_canonical_domains;
158           char      **canonical_domains;
159           int       canonicalize_hostname;
160           int       canonicalize_max_dots;
161           int       canonicalize_fallback_local;
162           int       num_permitted_cnames;
163           struct allowed_cname *permitted_cnames;
164 
165           char      *revoked_host_keys;
166 
167           int        fingerprint_hash;
168 
169           int        update_hostkeys; /* one of SSH_UPDATE_HOSTKEYS_* */
170 
171           char   *hostbased_accepted_algos;
172           char   *pubkey_accepted_algos;
173 
174           char   *jump_user;
175           char   *jump_host;
176           int       jump_port;
177           char   *jump_extra;
178 
179           char   *known_hosts_command;
180 
181           int       required_rsa_size;  /* minimum size of RSA keys */
182           int       enable_escape_commandline;    /* ~C commandline */
183           int       obscure_keystroke_timing_interval;
184 
185           char      **channel_timeouts; /* inactivity timeout by channel type */
186           u_int     num_channel_timeouts;
187 
188           char      *ignored_unknown; /* Pattern list of unknown tokens to ignore */
189 }       Options;
190 
191 #define SSH_PUBKEY_AUTH_NO    0x00
192 #define SSH_PUBKEY_AUTH_UNBOUND         0x01
193 #define SSH_PUBKEY_AUTH_HBOUND          0x02
194 #define SSH_PUBKEY_AUTH_ALL   0x03
195 
196 #define SSH_CANONICALISE_NO   0
197 #define SSH_CANONICALISE_YES  1
198 #define SSH_CANONICALISE_ALWAYS         2
199 
200 #define SSHCTL_MASTER_NO      0
201 #define SSHCTL_MASTER_YES     1
202 #define SSHCTL_MASTER_AUTO    2
203 #define SSHCTL_MASTER_ASK     3
204 #define SSHCTL_MASTER_AUTO_ASK          4
205 
206 #define REQUEST_TTY_AUTO      0
207 #define REQUEST_TTY_NO                  1
208 #define REQUEST_TTY_YES                 2
209 #define REQUEST_TTY_FORCE     3
210 
211 #define SESSION_TYPE_NONE     0
212 #define SESSION_TYPE_SUBSYSTEM          1
213 #define SESSION_TYPE_DEFAULT  2
214 
215 #define SSHCONF_CHECKPERM     1  /* check permissions on config file */
216 #define SSHCONF_USERCONF      2  /* user provided config file not system */
217 #define SSHCONF_FINAL                   4  /* Final pass over config, after canon. */
218 #define SSHCONF_NEVERMATCH    8  /* Match/Host never matches; internal only */
219 
220 #define SSH_UPDATE_HOSTKEYS_NO          0
221 #define SSH_UPDATE_HOSTKEYS_YES         1
222 #define SSH_UPDATE_HOSTKEYS_ASK         2
223 
224 #define SSH_STRICT_HOSTKEY_OFF          0
225 #define SSH_STRICT_HOSTKEY_NEW          1
226 #define SSH_STRICT_HOSTKEY_YES          2
227 #define SSH_STRICT_HOSTKEY_ASK          3
228 
229 /* ObscureKeystrokes parameters */
230 #define SSH_KEYSTROKE_DEFAULT_INTERVAL_MS         20
231 #define SSH_KEYSTROKE_CHAFF_MIN_MS                1024
232 #define SSH_KEYSTROKE_CHAFF_RNG_MS                2048
233 
234 const char *kex_default_pk_alg(void);
235 char      *ssh_connection_hash(const char *thishost, const char *host,
236     const char *portstr, const char *user, const char *jump_host);
237 void     initialize_options(Options *);
238 int      fill_default_options(Options *);
239 void       fill_default_options_for_canonicalization(Options *);
240 void       free_options(Options *o);
241 int        process_config_line(Options *, struct passwd *, const char *,
242     const char *, char *, const char *, int, int *, int);
243 int        read_config_file(const char *, struct passwd *, const char *,
244     const char *, Options *, int, int *);
245 int        parse_forward(struct Forward *, const char *, int, int);
246 int        parse_jump(const char *, Options *, int);
247 int        parse_ssh_uri(const char *, char **, char **, int *);
248 int        default_ssh_port(void);
249 int        option_clear_or_none(const char *);
250 int        config_has_permitted_cnames(Options *);
251 void       dump_client_config(Options *o, const char *host);
252 
253 void       add_local_forward(Options *, const struct Forward *);
254 void       add_remote_forward(Options *, const struct Forward *);
255 void       add_identity_file(Options *, const char *, const char *, int);
256 void       add_certificate_file(Options *, const char *, int);
257 
258 #endif                                  /* READCONF_H */
259