1296781Sdes/* $OpenBSD: sshconnect.h,v 1.29 2015/11/15 22:26:49 jcs Exp $ */
276262Sgreen
365668Skris/*
465668Skris * Copyright (c) 2000 Markus Friedl.  All rights reserved.
565668Skris *
665668Skris * Redistribution and use in source and binary forms, with or without
765668Skris * modification, are permitted provided that the following conditions
865668Skris * are met:
965668Skris * 1. Redistributions of source code must retain the above copyright
1065668Skris *    notice, this list of conditions and the following disclaimer.
1165668Skris * 2. Redistributions in binary form must reproduce the above copyright
1265668Skris *    notice, this list of conditions and the following disclaimer in the
1365668Skris *    documentation and/or other materials provided with the distribution.
1465668Skris *
1565668Skris * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
1665668Skris * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
1765668Skris * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
1865668Skris * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
1965668Skris * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
2065668Skris * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2165668Skris * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2265668Skris * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2365668Skris * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
2465668Skris * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2565668Skris */
2660573Skris
2798684Sdestypedef struct Sensitive Sensitive;
2898684Sdesstruct Sensitive {
2998684Sdes	Key	**keys;
3098684Sdes	int	nkeys;
3198684Sdes	int	external_keysign;
3298684Sdes};
3398684Sdes
34262566Sdesstruct addrinfo;
35262566Sdesint	 ssh_connect(const char *, struct addrinfo *, struct sockaddr_storage *,
36262566Sdes    u_short, int, int, int *, int, int);
37221420Sdesvoid	 ssh_kill_proxy_command(void);
3876262Sgreen
39221420Sdesvoid	 ssh_login(Sensitive *, const char *, struct sockaddr *, u_short,
40221420Sdes    struct passwd *, int);
4176262Sgreen
42197679Sdesvoid	 ssh_exchange_identification(int);
43197679Sdes
4492559Sdesint	 verify_host_key(char *, struct sockaddr *, Key *);
4560573Skris
46221420Sdesvoid	 get_hostfile_hostname_ipaddr(char *, struct sockaddr *, u_short,
47221420Sdes    char **, char **);
48221420Sdes
4992559Sdesvoid	 ssh_kex(char *, struct sockaddr *);
50221420Sdesvoid	 ssh_kex2(char *, struct sockaddr *, u_short);
5176262Sgreen
5298684Sdesvoid	 ssh_userauth1(const char *, const char *, char *, Sensitive *);
5398684Sdesvoid	 ssh_userauth2(const char *, const char *, char *, Sensitive *);
5460573Skris
5592559Sdesvoid	 ssh_put_password(char *);
56157019Sdesint	 ssh_local_cmd(const char *);
5774500Sgreen
58296781Sdesvoid	 maybe_add_key_to_agent(char *, Key *, char *, char *);
59296781Sdes
6098684Sdes/*
6198684Sdes * Macros to raise/lower permissions.
6298684Sdes */
63162856Sdes#define PRIV_START do {					\
64162856Sdes	int save_errno = errno;				\
65162856Sdes	if (seteuid(original_effective_uid) != 0)	\
66162856Sdes		fatal("PRIV_START: seteuid: %s",	\
67162856Sdes		    strerror(errno));			\
68162856Sdes	errno = save_errno;				\
6998684Sdes} while (0)
7098684Sdes
71162856Sdes#define PRIV_END do {					\
72162856Sdes	int save_errno = errno;				\
73162856Sdes	if (seteuid(original_real_uid) != 0)		\
74162856Sdes		fatal("PRIV_END: seteuid: %s",		\
75162856Sdes		    strerror(errno));			\
76162856Sdes	errno = save_errno;				\
7798684Sdes} while (0)
78