29 #ifndef _LIBSSH_PRIV_H 
   30 #define _LIBSSH_PRIV_H 
   36 #if !defined(HAVE_STRTOULL) 
   37 # if defined(HAVE___STRTOULL) 
   38 #  define strtoull __strtoull 
   39 # elif defined(HAVE__STRTOUI64) 
   40 #  define strtoull _strtoui64 
   41 # elif defined(__hpux) && defined(__LP64__) 
   42 #  define strtoull strtoul 
   44 #  error "no strtoull function found" 
   48 #if !defined(HAVE_STRNDUP) 
   49 char *strndup(
const char *s, 
size_t n);
 
   52 #ifdef HAVE_BYTESWAP_H 
   56 #ifdef HAVE_ARPA_INET_H 
   57 #include <arpa/inet.h> 
   62     ((((x) & 0xff000000) >> 24) | (((x) & 0x00ff0000) >>  8) | \ 
   63      (((x) & 0x0000ff00) <<  8) | (((x) & 0x000000ff) << 24)) 
  103 #  define inline __inline 
  106 #   define va_copy(dest, src) (dest = src) 
  109 #  define strcasecmp _stricmp 
  110 #  define strncasecmp _strnicmp 
  111 #  if ! defined(HAVE_ISBLANK) 
  112 #   define isblank(ch) ((ch) == ' ' || (ch) == '\t' || (ch) == '\n' || (ch) == '\r') 
  115 #  define usleep(X) Sleep(((X)+1000)/1000) 
  118 #  define strtok_r strtok_s 
  120 #  if defined(HAVE__SNPRINTF_S) 
  122 #   define snprintf(d, n, ...) _snprintf_s((d), (n), _TRUNCATE, __VA_ARGS__) 
  124 #   if defined(HAVE__SNPRINTF) 
  126 #     define snprintf _snprintf 
  128 #    if !defined(HAVE_SNPRINTF) 
  129 #     error "no snprintf compatible function found" 
  134 #  if defined(HAVE__VSNPRINTF_S) 
  136 #   define vsnprintf(s, n, f, v) _vsnprintf_s((s), (n), _TRUNCATE, (f), (v)) 
  138 #   if defined(HAVE__VSNPRINTF) 
  140 #    define vsnprintf _vsnprintf 
  142 #    if !defined(HAVE_VSNPRINTF) 
  143 #     error "No vsnprintf compatible function found" 
  148 #  ifndef _SSIZE_T_DEFINED 
  150 #   include <BaseTsd.h> 
  151     typedef _W64 SSIZE_T ssize_t;
 
  152 #   define _SSIZE_T_DEFINED 
  158 int gettimeofday(
struct timeval *__p, 
void *__t);
 
  160 #define _XCLOSESOCKET closesocket 
  167 #define _XCLOSESOCKET close 
  171 #include "libssh/libssh.h" 
  172 #include "libssh/callbacks.h" 
  175 #ifndef MAX_PACKAT_LEN 
  176 #define MAX_PACKET_LEN 262144 
  178 #ifndef ERROR_BUFFERLEN 
  179 #define ERROR_BUFFERLEN 1024 
  182 #ifndef CLIENT_BANNER_SSH2 
  183 #define CLIENT_BANNER_SSH2 "SSH-2.0-libssh_" SSH_STRINGIFY(LIBSSH_VERSION) 
  186 #ifndef KBDINT_MAX_PROMPT 
  187 #define KBDINT_MAX_PROMPT 256  
  190 #define MAX_BUF_SIZE 4096 
  193 #ifndef HAVE_COMPILER__FUNC__ 
  194 # ifdef HAVE_COMPILER__FUNCTION__ 
  195 #  define __func__ __FUNCTION__ 
  197 #  error "Your system must provide a __func__ macro" 
  201 #if defined(HAVE_GCC_THREAD_LOCAL_STORAGE) 
  202 # define LIBSSH_THREAD __thread 
  203 #elif defined(HAVE_MSC_THREAD_LOCAL_STORAGE) 
  204 # define LIBSSH_THREAD __declspec(thread) 
  206 # define LIBSSH_THREAD 
  214 #if defined(HAVE_GCC_VOLATILE_MEMORY_PROTECTION) 
  215 # define LIBSSH_MEM_PROTECTION __asm__ volatile("" : : "r"(&(x)) : "memory") 
  217 # define LIBSSH_MEM_PROTECTION 
  234                        enum ssh_digest_e *digest);
 
  237 void ssh_log_function(
int verbosity,
 
  238                       const char *
function,
 
  240 #define SSH_LOG(priority, ...) \ 
  241     _ssh_log(priority, __func__, __VA_ARGS__) 
  246                     const char *
function,
 
  247                     const char *format, ...) PRINTF_ATTRIBUTE(4, 5);
 
  255     char error_buffer[ERROR_BUFFERLEN];
 
  258 #define ssh_set_error(error, code, ...) \ 
  259     _ssh_set_error(error, code, __func__, __VA_ARGS__) 
  260 void _ssh_set_error(
void *error,
 
  262                     const char *
function,
 
  263                     const char *descr, ...) PRINTF_ATTRIBUTE(4, 5);
 
  265 #define ssh_set_error_oom(error) \ 
  266     _ssh_set_error_oom(error, __func__) 
  267 void _ssh_set_error_oom(
void *error, 
const char *
function);
 
  269 #define ssh_set_error_invalid(error) \ 
  270     _ssh_set_error_invalid(error, __func__) 
  271 void _ssh_set_error_invalid(
void *error, 
const char *
function);
 
  273 void ssh_reset_error(
void *error);
 
  277 int ssh_auth_reply_default(
ssh_session session,
int partial);
 
  278 int ssh_auth_reply_success(
ssh_session session, 
int partial);
 
  282 int ssh_send_banner(
ssh_session session, 
int is_server);
 
  285 socket_t ssh_connect_host_nonblocking(
ssh_session session, 
const char *host,
 
  286         const char *bind_addr, 
int port);
 
  290 uint8_t *bin_to_base64(
const uint8_t *source, 
size_t len);
 
  297 int match_pattern_list(
const char *
string, 
const char *pattern,
 
  298     unsigned int len, 
int dolower);
 
  299 int match_hostname(
const char *host, 
const char *pattern, 
unsigned int len);
 
  306 #define MIN(a,b) ((a) < (b) ? (a) : (b)) 
  310 #define MAX(a,b) ((a) > (b) ? (a) : (b)) 
  314 #define SAFE_FREE(x) do { if ((x) != NULL) {free(x); x=NULL;} } while(0) 
  317 #define ZERO_STRUCT(x) memset((char *)&(x), 0, sizeof(x)) 
  320 #define ZERO_STRUCTP(x) do { if ((x) != NULL) memset((char *)(x), 0, sizeof(*(x))); } while(0) 
  323 #define ARRAY_SIZE(a) (sizeof(a)/sizeof(a[0])) 
  325 #ifndef HAVE_EXPLICIT_BZERO 
  326 void explicit_bzero(
void *s, 
size_t n);
 
  341 #define discard_const(ptr) ((void *)((uintptr_t)(ptr))) 
  346 #define discard_const_p(type, ptr) ((type *)discard_const(ptr)) 
  357 #define VA_APPLY_VARIADIC_MACRO(macro, tuple) macro tuple 
  359 #define __VA_NARG__(...) \ 
  360         (__VA_NARG_(__VA_ARGS__, __RSEQ_N())) 
  361 #define __VA_NARG_(...) \ 
  362         VA_APPLY_VARIADIC_MACRO(__VA_ARG_N, (__VA_ARGS__)) 
  363 #define __VA_ARG_N( \ 
  364          _1, _2, _3, _4, _5, _6, _7, _8, _9,_10, \ 
  365         _11,_12,_13,_14,_15,_16,_17,_18,_19,_20, \ 
  366         _21,_22,_23,_24,_25,_26,_27,_28,_29,_30, \ 
  367         _31,_32,_33,_34,_35,_36,_37,_38,_39,_40, \ 
  368         _41,_42,_43,_44,_45,_46,_47,_48,_49,_50, \ 
  369         _51,_52,_53,_54,_55,_56,_57,_58,_59,_60, \ 
  373         59, 58, 57, 56, 55, 54, 53, 52, 51, 50, \ 
  374         49, 48, 47, 46, 45, 44, 43, 42, 41, 40, \ 
  375         39, 38, 37, 36, 35, 34, 33, 32, 31, 30, \ 
  376         29, 28, 27, 26, 25, 24, 23, 22, 21, 20, \ 
  377         19, 18, 17, 16, 15, 14, 13, 12, 11, 10, \ 
  378          9,  8,  7,  6,  5,  4,  3,  2,  1,  0 
  380 #define CLOSE_SOCKET(s) do { if ((s) != SSH_INVALID_SOCKET) { _XCLOSESOCKET(s); (s) = SSH_INVALID_SOCKET;} } while(0) 
  383 # ifdef WORDS_BIGENDIAN 
  384 #  define htonll(x) (x) 
  387     (((uint64_t)htonl((x) & 0xFFFFFFFF) << 32) | htonl((x) >> 32)) 
  392 # ifdef WORDS_BIGENDIAN 
  393 #  define ntohll(x) (x) 
  396     (((uint64_t)ntohl((x) & 0xFFFFFFFF) << 32) | ntohl((x) >> 32)) 
  401 # ifdef HAVE_FALLTHROUGH_ATTRIBUTE 
  402 #  define FALL_THROUGH __attribute__ ((fallthrough)) 
  404 #  define FALL_THROUGH 
  409 # ifdef HAVE_UNUSED_ATTRIBUTE 
  410 #  define __unused__ __attribute__((unused)) 
  417 #define UNUSED_PARAM(param) param __unused__ 
  421 #define UNUSED_VAR(var) __unused__ var 
  424 void ssh_agent_state_free(
void *data);