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);