1*ba1276acSMatthew Dillon /* $OpenBSD: sshconnect.h,v 1.48 2024/04/30 02:10:49 djm Exp $ */ 218de8d7fSPeter Avalos 318de8d7fSPeter Avalos /* 418de8d7fSPeter Avalos * Copyright (c) 2000 Markus Friedl. All rights reserved. 518de8d7fSPeter Avalos * 618de8d7fSPeter Avalos * Redistribution and use in source and binary forms, with or without 718de8d7fSPeter Avalos * modification, are permitted provided that the following conditions 818de8d7fSPeter Avalos * are met: 918de8d7fSPeter Avalos * 1. Redistributions of source code must retain the above copyright 1018de8d7fSPeter Avalos * notice, this list of conditions and the following disclaimer. 1118de8d7fSPeter Avalos * 2. Redistributions in binary form must reproduce the above copyright 1218de8d7fSPeter Avalos * notice, this list of conditions and the following disclaimer in the 1318de8d7fSPeter Avalos * documentation and/or other materials provided with the distribution. 1418de8d7fSPeter Avalos * 1518de8d7fSPeter Avalos * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 1618de8d7fSPeter Avalos * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 1718de8d7fSPeter Avalos * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 1818de8d7fSPeter Avalos * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 1918de8d7fSPeter Avalos * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 2018de8d7fSPeter Avalos * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2118de8d7fSPeter Avalos * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2218de8d7fSPeter Avalos * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2318de8d7fSPeter Avalos * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 2418de8d7fSPeter Avalos * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2518de8d7fSPeter Avalos */ 2618de8d7fSPeter Avalos 27*ba1276acSMatthew Dillon struct sshkey; 28*ba1276acSMatthew Dillon 2918de8d7fSPeter Avalos typedef struct Sensitive Sensitive; 3018de8d7fSPeter Avalos struct Sensitive { 31ce74bacaSMatthew Dillon struct sshkey **keys; 3218de8d7fSPeter Avalos int nkeys; 3318de8d7fSPeter Avalos }; 3418de8d7fSPeter Avalos 3550a69bb5SSascha Wildner struct ssh_conn_info { 3650a69bb5SSascha Wildner char *conn_hash_hex; 3750a69bb5SSascha Wildner char *shorthost; 3850a69bb5SSascha Wildner char *uidstr; 3950a69bb5SSascha Wildner char *keyalias; 4050a69bb5SSascha Wildner char *thishost; 4150a69bb5SSascha Wildner char *host_arg; 4250a69bb5SSascha Wildner char *portstr; 4350a69bb5SSascha Wildner char *remhost; 4450a69bb5SSascha Wildner char *remuser; 4550a69bb5SSascha Wildner char *homedir; 4650a69bb5SSascha Wildner char *locuser; 47*ba1276acSMatthew Dillon char *jmphost; 4850a69bb5SSascha Wildner }; 4950a69bb5SSascha Wildner 5036e94dc5SPeter Avalos struct addrinfo; 51ce74bacaSMatthew Dillon struct ssh; 5250a69bb5SSascha Wildner struct hostkeys; 5350a69bb5SSascha Wildner struct ssh_conn_info; 5450a69bb5SSascha Wildner 5550a69bb5SSascha Wildner /* default argument for client percent expansions */ 5650a69bb5SSascha Wildner #define DEFAULT_CLIENT_PERCENT_EXPAND_ARGS(conn_info) \ 5750a69bb5SSascha Wildner "C", conn_info->conn_hash_hex, \ 5850a69bb5SSascha Wildner "L", conn_info->shorthost, \ 5950a69bb5SSascha Wildner "i", conn_info->uidstr, \ 6050a69bb5SSascha Wildner "k", conn_info->keyalias, \ 6150a69bb5SSascha Wildner "l", conn_info->thishost, \ 6250a69bb5SSascha Wildner "n", conn_info->host_arg, \ 6350a69bb5SSascha Wildner "p", conn_info->portstr, \ 6450a69bb5SSascha Wildner "d", conn_info->homedir, \ 6550a69bb5SSascha Wildner "h", conn_info->remhost, \ 6650a69bb5SSascha Wildner "r", conn_info->remuser, \ 67*ba1276acSMatthew Dillon "u", conn_info->locuser, \ 68*ba1276acSMatthew Dillon "j", conn_info->jmphost 69ce74bacaSMatthew Dillon 700cbfa66cSDaniel Fojt int ssh_connect(struct ssh *, const char *, const char *, 710cbfa66cSDaniel Fojt struct addrinfo *, struct sockaddr_storage *, u_short, 7250a69bb5SSascha Wildner int, int *, int); 739f304aafSPeter Avalos void ssh_kill_proxy_command(void); 7418de8d7fSPeter Avalos 75664f4763Szrj void ssh_login(struct ssh *, Sensitive *, const char *, 7650a69bb5SSascha Wildner struct sockaddr *, u_short, struct passwd *, int, 7750a69bb5SSascha Wildner const struct ssh_conn_info *); 7840c002afSPeter Avalos 7950a69bb5SSascha Wildner int verify_host_key(char *, struct sockaddr *, struct sshkey *, 8050a69bb5SSascha Wildner const struct ssh_conn_info *); 8118de8d7fSPeter Avalos 829f304aafSPeter Avalos void get_hostfile_hostname_ipaddr(char *, struct sockaddr *, u_short, 839f304aafSPeter Avalos char **, char **); 849f304aafSPeter Avalos 8550a69bb5SSascha Wildner void ssh_kex2(struct ssh *ssh, char *, struct sockaddr *, u_short, 8650a69bb5SSascha Wildner const struct ssh_conn_info *); 8718de8d7fSPeter Avalos 88664f4763Szrj void ssh_userauth2(struct ssh *ssh, const char *, const char *, 89664f4763Szrj char *, Sensitive *); 9018de8d7fSPeter Avalos 9118de8d7fSPeter Avalos int ssh_local_cmd(const char *); 9218de8d7fSPeter Avalos 930cbfa66cSDaniel Fojt void maybe_add_key_to_agent(const char *, struct sshkey *, 940cbfa66cSDaniel Fojt const char *, const char *); 9550a69bb5SSascha Wildner 9650a69bb5SSascha Wildner void load_hostkeys_command(struct hostkeys *, const char *, 9750a69bb5SSascha Wildner const char *, const struct ssh_conn_info *, 9850a69bb5SSascha Wildner const struct sshkey *, const char *); 99*ba1276acSMatthew Dillon 100*ba1276acSMatthew Dillon int hostkey_accepted_by_hostkeyalgs(const struct sshkey *); 101