19 #include <sys/types.h>
20 #include <sys/socket.h>
35 int forward_equals(
const struct Forward *,
const struct Forward *);
39 struct ForwardOptions {
41 mode_t streamlocal_bind_mask;
42 int streamlocal_bind_unlink;
48 void skip_space(
char **);
49 char *strdelim(
char **);
50 char *strdelimw(
char **);
51 int set_nonblock(
int);
52 int unset_nonblock(
int);
53 void set_nodelay(
int);
54 int set_reuseaddr(
int);
55 char *get_rdomain(
int);
56 int set_rdomain(
int,
const char *);
58 void set_sock_tos(
int,
int);
59 int waitrfd(
int,
int *);
60 int timeout_connect(
int,
const struct sockaddr *, socklen_t,
int *);
61 int a2port(
const char *);
62 int a2tun(
const char *,
int *);
63 char *put_host_port(
const char *, u_short);
64 char *hpdelim2(
char **,
char *);
65 char *hpdelim(
char **);
66 char *cleanhostname(
char *);
68 int parse_user_host_path(
const char *,
char **,
char **,
char **);
69 int parse_user_host_port(
const char *,
char **,
char **,
int *);
70 int parse_uri(
const char *,
const char *,
char **,
char **,
int *,
char **);
71 int convtime(
const char *);
72 const char *fmt_timeframe(time_t t);
73 char *tilde_expand_filename(
const char *, uid_t);
75 char *dollar_expand(
int *,
const char *
string, ...);
76 char *percent_expand(
const char *, ...) __attribute__((__sentinel__));
77 char *percent_dollar_expand(const
char *, ...) __attribute__((__sentinel__));
78 char *tohex(const
void *,
size_t);
79 void xextendf(
char **s, const
char *sep, const
char *fmt, ...)
80 __attribute__((__format__ (printf, 3, 4))) __attribute__((__nonnull__ (3)));
81 void sanitise_stdfd(
void);
82 void ms_subtract_diff(struct timeval *,
int *);
83 void ms_to_timeval(struct timeval *,
int);
84 void monotime_ts(struct timespec *);
85 void monotime_tv(struct timeval *);
86 time_t monotime(
void);
87 double monotime_double(
void);
88 void lowercase(
char *s);
89 int unix_listener(const
char *,
int,
int);
90 int valid_domain(
char *,
int, const
char **);
91 int valid_env_name(const
char *);
92 const
char *atoi_err(const
char *,
int *);
93 int parse_absolute_time(const
char *, uint64_t *);
94 void format_absolute_time(uint64_t,
char *,
size_t);
95 int path_absolute(const
char *);
96 int stdfd_devnull(
int,
int,
int);
98 void sock_set_v6only(
int);
100 struct passwd *pwcopy(struct passwd *);
101 void pwfree(struct passwd *);
102 const
char *ssh_gai_strerror(
int);
104 typedef
void privdrop_fn(struct passwd *);
105 typedef
void privrestore_fn(
void);
106 #define SSH_SUBPROCESS_STDOUT_DISCARD (1)
107 #define SSH_SUBPROCESS_STDOUT_CAPTURE (1<<1)
108 #define SSH_SUBPROCESS_STDERR_DISCARD (1<<2)
109 #define SSH_SUBPROCESS_UNSAFE_PATH (1<<3)
110 #define SSH_SUBPROCESS_PRESERVE_ENV (1<<4)
111 pid_t subprocess(
const char *,
const char *,
int,
char **, FILE **, u_int,
112 struct passwd *, privdrop_fn *, privrestore_fn *,
int,
void *);
114 typedef struct arglist arglist;
120 void addargs(arglist *,
char *, ...)
121 __attribute__((format(printf, 2, 3)));
122 void replacearg(arglist *, u_int,
char *, ...)
123 __attribute__((format(printf, 3, 4)));
124 void freeargs(arglist *);
126 int tun_open(
int,
int,
char **);
129 #define SSH_TUNMODE_NO 0x00
130 #define SSH_TUNMODE_POINTOPOINT 0x01
131 #define SSH_TUNMODE_ETHERNET 0x02
132 #define SSH_TUNMODE_DEFAULT SSH_TUNMODE_POINTOPOINT
133 #define SSH_TUNMODE_YES (SSH_TUNMODE_POINTOPOINT|SSH_TUNMODE_ETHERNET)
135 #define SSH_TUNID_ANY 0x7fffffff
136 #define SSH_TUNID_ERR (SSH_TUNID_ANY - 1)
137 #define SSH_TUNID_MAX (SSH_TUNID_ANY - 2)
140 #define PORT_STREAMLOCAL -2
143 u_int64_t get_u64(
const void *)
144 __attribute__((__bounded__( __minbytes__, 1, 8)));
145 u_int32_t get_u32(const
void *)
146 __attribute__((__bounded__( __minbytes__, 1, 4)));
147 u_int16_t get_u16(const
void *)
148 __attribute__((__bounded__( __minbytes__, 1, 2)));
149 void put_u64(
void *, u_int64_t)
150 __attribute__((__bounded__( __minbytes__, 1, 8)));
151 void put_u32(
void *, u_int32_t)
152 __attribute__((__bounded__( __minbytes__, 1, 4)));
153 void put_u16(
void *, u_int16_t)
154 __attribute__((__bounded__( __minbytes__, 1, 2)));
157 u_int32_t get_u32_le(const
void *)
158 __attribute__((__bounded__(__minbytes__, 1, 4)));
159 void put_u32_le(
void *, u_int32_t)
160 __attribute__((__bounded__(__minbytes__, 1, 4)));
167 struct timeval bwstart, bwend;
170 void bandwidth_limit_init(
struct bwlimit *, u_int64_t,
size_t);
171 void bandwidth_limit(
struct bwlimit *,
size_t);
173 int parse_ipqos(
const char *);
174 const char *iptos2str(
int);
175 void mktemp_proto(
char *,
size_t);
177 void child_set_env(
char ***envp, u_int *envsizep,
const char *name,
180 int argv_split(
const char *,
int *,
char ***);
181 char *argv_assemble(
int,
char **argv);
182 int exited_cleanly(pid_t,
const char *,
const char *,
int);
185 int safe_path(
const char *,
struct stat *,
const char *, uid_t,
187 int safe_path_fd(
int,
const char *,
struct passwd *,
188 char *err,
size_t errlen);
191 int opt_flag(
const char *opt,
int allow_negate,
const char **optsp);
192 char *opt_dequote(
const char **sp,
const char **errstrp);
193 int opt_match(
const char **opts,
const char *term);
196 void opt_array_append(
const char *file,
const int line,
197 const char *directive,
char ***array, u_int *lp,
const char *s);
198 void opt_array_append2(
const char *file,
const int line,
199 const char *directive,
char ***array,
int **iarray, u_int *lp,
200 const char *s,
int i);
204 #define RP_ECHO 0x0001
205 #define RP_ALLOW_STDIN 0x0002
206 #define RP_ALLOW_EOF 0x0004
207 #define RP_USE_ASKPASS 0x0008
211 char *read_passphrase(
const char *,
int);
212 int ask_permission(
const char *, ...) __attribute__((format(printf, 1, 2)));
213 struct notifier_ctx *notify_start(
int, const
char *, ...)
214 __attribute__((format(printf, 2, 3)));
215 void notify_complete(struct notifier_ctx *, const
char *, ...)
216 __attribute__((format(printf, 2, 3)));
218 #define MINIMUM(a, b) (((a) < (b)) ? (a) : (b))
219 #define MAXIMUM(a, b) (((a) > (b)) ? (a) : (b))
220 #define ROUNDUP(x, y) ((((x)+((y)-1))/(y))*(y))
222 typedef void (*sshsig_t)(int);
223 sshsig_t ssh_signal(
int, sshsig_t);