Blame e_os.h

Packit Service 084de1
/*
Packit Service 084de1
 * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved.
Packit Service 084de1
 *
Packit Service 084de1
 * Licensed under the OpenSSL license (the "License").  You may not use
Packit Service 084de1
 * this file except in compliance with the License.  You can obtain a copy
Packit Service 084de1
 * in the file LICENSE in the source distribution or at
Packit Service 084de1
 * https://www.openssl.org/source/license.html
Packit Service 084de1
 */
Packit Service 084de1
Packit Service 084de1
#ifndef OSSL_E_OS_H
Packit Service 084de1
# define OSSL_E_OS_H
Packit Service 084de1
Packit Service 084de1
# include <limits.h>
Packit Service 084de1
# include <openssl/opensslconf.h>
Packit Service 084de1
Packit Service 084de1
# include <openssl/e_os2.h>
Packit Service 084de1
# include <openssl/crypto.h>
Packit Service 084de1
# include "internal/nelem.h"
Packit Service 084de1
Packit Service 084de1
/*
Packit Service 084de1
 * <openssl/e_os2.h> contains what we can justify to make visible to the
Packit Service 084de1
 * outside; this file e_os.h is not part of the exported interface.
Packit Service 084de1
 */
Packit Service 084de1
Packit Service 084de1
# ifndef DEVRANDOM
Packit Service 084de1
/*
Packit Service 084de1
 * set this to a comma-separated list of 'random' device files to try out. By
Packit Service 084de1
 * default, we will try to read at least one of these files
Packit Service 084de1
 */
Packit Service 084de1
#  define DEVRANDOM "/dev/urandom", "/dev/random", "/dev/hwrng", "/dev/srandom"
Packit Service 084de1
#  if defined(__linux) && !defined(__ANDROID__)
Packit Service 084de1
#   ifndef DEVRANDOM_WAIT
Packit Service 084de1
#    define DEVRANDOM_WAIT   "/dev/random"
Packit Service 084de1
#   endif
Packit Service 084de1
/*
Packit Service 084de1
 * Linux kernels 4.8 and later changes how their random device works and there
Packit Service 084de1
 * is no reliable way to tell that /dev/urandom has been seeded -- getentropy(2)
Packit Service 084de1
 * should be used instead.
Packit Service 084de1
 */
Packit Service 084de1
#   ifndef DEVRANDOM_SAFE_KERNEL
Packit Service 084de1
#    define DEVRANDOM_SAFE_KERNEL        4, 8
Packit Service 084de1
#   endif
Packit Service 084de1
/*
Packit Service 084de1
 * Some operating systems do not permit select(2) on their random devices,
Packit Service 084de1
 * defining this to zero will force the use of read(2) to extract one byte
Packit Service 084de1
 * from /dev/random.
Packit Service 084de1
 */
Packit Service 084de1
#   ifndef DEVRANDM_WAIT_USE_SELECT
Packit Service 084de1
#    define DEVRANDM_WAIT_USE_SELECT     1
Packit Service 084de1
#   endif
Packit Service 084de1
/*
Packit Service 084de1
 * Define the shared memory identifier used to indicate if the operating
Packit Service 084de1
 * system has properly seeded the DEVRANDOM source.
Packit Service 084de1
 */
Packit Service 084de1
#   ifndef OPENSSL_RAND_SEED_DEVRANDOM_SHM_ID
Packit Service 084de1
#    define OPENSSL_RAND_SEED_DEVRANDOM_SHM_ID 114
Packit Service 084de1
#   endif
Packit Service 084de1
Packit Service 084de1
#  endif
Packit Service 084de1
# endif
Packit Service 084de1
# if !defined(OPENSSL_NO_EGD) && !defined(DEVRANDOM_EGD)
Packit Service 084de1
/*
Packit Service 084de1
 * set this to a comma-separated list of 'egd' sockets to try out. These
Packit Service 084de1
 * sockets will be tried in the order listed in case accessing the device
Packit Service 084de1
 * files listed in DEVRANDOM did not return enough randomness.
Packit Service 084de1
 */
Packit Service 084de1
#  define DEVRANDOM_EGD "/var/run/egd-pool", "/dev/egd-pool", "/etc/egd-pool", "/etc/entropy"
Packit Service 084de1
# endif
Packit Service 084de1
Packit Service 084de1
# if defined(OPENSSL_SYS_VXWORKS) || defined(OPENSSL_SYS_UEFI)
Packit Service 084de1
#  define NO_CHMOD
Packit Service 084de1
#  define NO_SYSLOG
Packit Service 084de1
# endif
Packit Service 084de1
Packit Service 084de1
# define get_last_sys_error()    errno
Packit Service 084de1
# define clear_sys_error()       errno=0
Packit Service 084de1
# define set_sys_error(e)        errno=(e)
Packit Service 084de1
Packit Service 084de1
/********************************************************************
Packit Service 084de1
 The Microsoft section
Packit Service 084de1
 ********************************************************************/
Packit Service 084de1
# if defined(OPENSSL_SYS_WIN32) && !defined(WIN32)
Packit Service 084de1
#  define WIN32
Packit Service 084de1
# endif
Packit Service 084de1
# if defined(OPENSSL_SYS_WINDOWS) && !defined(WINDOWS)
Packit Service 084de1
#  define WINDOWS
Packit Service 084de1
# endif
Packit Service 084de1
# if defined(OPENSSL_SYS_MSDOS) && !defined(MSDOS)
Packit Service 084de1
#  define MSDOS
Packit Service 084de1
# endif
Packit Service 084de1
Packit Service 084de1
# ifdef WIN32
Packit Service 084de1
#  undef get_last_sys_error
Packit Service 084de1
#  undef clear_sys_error
Packit Service 084de1
#  undef set_sys_error
Packit Service 084de1
#  define get_last_sys_error()    GetLastError()
Packit Service 084de1
#  define clear_sys_error()       SetLastError(0)
Packit Service 084de1
#  define set_sys_error(e)        SetLastError(e)
Packit Service 084de1
#  if !defined(WINNT)
Packit Service 084de1
#   define WIN_CONSOLE_BUG
Packit Service 084de1
#  endif
Packit Service 084de1
# else
Packit Service 084de1
# endif
Packit Service 084de1
Packit Service 084de1
# if (defined(WINDOWS) || defined(MSDOS))
Packit Service 084de1
Packit Service 084de1
#  ifdef __DJGPP__
Packit Service 084de1
#   include <unistd.h>
Packit Service 084de1
#   include <sys/stat.h>
Packit Service 084de1
#   define _setmode setmode
Packit Service 084de1
#   define _O_TEXT O_TEXT
Packit Service 084de1
#   define _O_BINARY O_BINARY
Packit Service 084de1
#   define HAS_LFN_SUPPORT(name)  (pathconf((name), _PC_NAME_MAX) > 12)
Packit Service 084de1
#   undef DEVRANDOM_EGD  /*  Neither MS-DOS nor FreeDOS provide 'egd' sockets.  */
Packit Service 084de1
#   undef DEVRANDOM
Packit Service 084de1
#   define DEVRANDOM "/dev/urandom\x24"
Packit Service 084de1
#  endif                        /* __DJGPP__ */
Packit Service 084de1
Packit Service 084de1
#  ifndef S_IFDIR
Packit Service 084de1
#   define S_IFDIR     _S_IFDIR
Packit Service 084de1
#  endif
Packit Service 084de1
Packit Service 084de1
#  ifndef S_IFMT
Packit Service 084de1
#   define S_IFMT      _S_IFMT
Packit Service 084de1
#  endif
Packit Service 084de1
Packit Service 084de1
#  if !defined(WINNT) && !defined(__DJGPP__)
Packit Service 084de1
#   define NO_SYSLOG
Packit Service 084de1
#  endif
Packit Service 084de1
Packit Service 084de1
#  ifdef WINDOWS
Packit Service 084de1
#   if !defined(_WIN32_WCE) && !defined(_WIN32_WINNT)
Packit Service 084de1
       /*
Packit Service 084de1
        * Defining _WIN32_WINNT here in e_os.h implies certain "discipline."
Packit Service 084de1
        * Most notably we ought to check for availability of each specific
Packit Service 084de1
        * routine that was introduced after denoted _WIN32_WINNT with
Packit Service 084de1
        * GetProcAddress(). Normally newer functions are masked with higher
Packit Service 084de1
        * _WIN32_WINNT in SDK headers. So that if you wish to use them in
Packit Service 084de1
        * some module, you'd need to override _WIN32_WINNT definition in
Packit Service 084de1
        * the target module in order to "reach for" prototypes, but replace
Packit Service 084de1
        * calls to new functions with indirect calls. Alternatively it
Packit Service 084de1
        * might be possible to achieve the goal by /DELAYLOAD-ing .DLLs
Packit Service 084de1
        * and check for current OS version instead.
Packit Service 084de1
        */
Packit Service 084de1
#    define _WIN32_WINNT 0x0501
Packit Service 084de1
#   endif
Packit Service 084de1
#   if defined(_WIN32_WINNT) || defined(_WIN32_WCE)
Packit Service 084de1
       /*
Packit Service 084de1
        * Just like defining _WIN32_WINNT including winsock2.h implies
Packit Service 084de1
        * certain "discipline" for maintaining [broad] binary compatibility.
Packit Service 084de1
        * As long as structures are invariant among Winsock versions,
Packit Service 084de1
        * it's sufficient to check for specific Winsock2 API availability
Packit Service 084de1
        * at run-time [DSO_global_lookup is recommended]...
Packit Service 084de1
        */
Packit Service 084de1
#    include <winsock2.h>
Packit Service 084de1
#    include <ws2tcpip.h>
Packit Service 084de1
       /* yes, they have to be #included prior to <windows.h> */
Packit Service 084de1
#   endif
Packit Service 084de1
#   include <windows.h>
Packit Service 084de1
#   include <stdio.h>
Packit Service 084de1
#   include <stddef.h>
Packit Service 084de1
#   include <errno.h>
Packit Service 084de1
#   if defined(_WIN32_WCE) && !defined(EACCES)
Packit Service 084de1
#    define EACCES   13
Packit Service 084de1
#   endif
Packit Service 084de1
#   include <string.h>
Packit Service 084de1
#   ifdef _WIN64
Packit Service 084de1
#    define strlen(s) _strlen31(s)
Packit Service 084de1
/* cut strings to 2GB */
Packit Service 084de1
static __inline unsigned int _strlen31(const char *str)
Packit Service 084de1
{
Packit Service 084de1
    unsigned int len = 0;
Packit Service 084de1
    while (*str && len < 0x80000000U)
Packit Service 084de1
        str++, len++;
Packit Service 084de1
    return len & 0x7FFFFFFF;
Packit Service 084de1
}
Packit Service 084de1
#   endif
Packit Service 084de1
#   include <malloc.h>
Packit Service 084de1
#   if defined(_MSC_VER) && !defined(_WIN32_WCE) && !defined(_DLL) && defined(stdin)
Packit Service 084de1
#    if _MSC_VER>=1300 && _MSC_VER<1600
Packit Service 084de1
#     undef stdin
Packit Service 084de1
#     undef stdout
Packit Service 084de1
#     undef stderr
Packit Service 084de1
FILE *__iob_func();
Packit Service 084de1
#     define stdin  (&__iob_func()[0])
Packit Service 084de1
#     define stdout (&__iob_func()[1])
Packit Service 084de1
#     define stderr (&__iob_func()[2])
Packit Service 084de1
#    elif _MSC_VER<1300 && defined(I_CAN_LIVE_WITH_LNK4049)
Packit Service 084de1
#     undef stdin
Packit Service 084de1
#     undef stdout
Packit Service 084de1
#     undef stderr
Packit Service 084de1
         /*
Packit Service 084de1
          * pre-1300 has __p__iob(), but it's available only in msvcrt.lib,
Packit Service 084de1
          * or in other words with /MD. Declaring implicit import, i.e. with
Packit Service 084de1
          * _imp_ prefix, works correctly with all compiler options, but
Packit Service 084de1
          * without /MD results in LINK warning LNK4049: 'locally defined
Packit Service 084de1
          * symbol "__iob" imported'.
Packit Service 084de1
          */
Packit Service 084de1
extern FILE *_imp___iob;
Packit Service 084de1
#     define stdin  (&_imp___iob[0])
Packit Service 084de1
#     define stdout (&_imp___iob[1])
Packit Service 084de1
#     define stderr (&_imp___iob[2])
Packit Service 084de1
#    endif
Packit Service 084de1
#   endif
Packit Service 084de1
#  endif
Packit Service 084de1
#  include <io.h>
Packit Service 084de1
#  include <fcntl.h>
Packit Service 084de1
Packit Service 084de1
#  ifdef OPENSSL_SYS_WINCE
Packit Service 084de1
#   define OPENSSL_NO_POSIX_IO
Packit Service 084de1
#  endif
Packit Service 084de1
Packit Service 084de1
#  define EXIT(n) exit(n)
Packit Service 084de1
#  define LIST_SEPARATOR_CHAR ';'
Packit Service 084de1
#  ifndef W_OK
Packit Service 084de1
#   define W_OK        2
Packit Service 084de1
#  endif
Packit Service 084de1
#  ifndef R_OK
Packit Service 084de1
#   define R_OK        4
Packit Service 084de1
#  endif
Packit Service 084de1
#  ifdef OPENSSL_SYS_WINCE
Packit Service 084de1
#   define DEFAULT_HOME  ""
Packit Service 084de1
#  else
Packit Service 084de1
#   define DEFAULT_HOME  "C:"
Packit Service 084de1
#  endif
Packit Service 084de1
Packit Service 084de1
/* Avoid Visual Studio 13 GetVersion deprecated problems */
Packit Service 084de1
#  if defined(_MSC_VER) && _MSC_VER>=1800
Packit Service 084de1
#   define check_winnt() (1)
Packit Service 084de1
#   define check_win_minplat(x) (1)
Packit Service 084de1
#  else
Packit Service 084de1
#   define check_winnt() (GetVersion() < 0x80000000)
Packit Service 084de1
#   define check_win_minplat(x) (LOBYTE(LOWORD(GetVersion())) >= (x))
Packit Service 084de1
#  endif
Packit Service 084de1
Packit Service 084de1
# else                          /* The non-microsoft world */
Packit Service 084de1
Packit Service 084de1
#  if defined(OPENSSL_SYS_VXWORKS)
Packit Service 084de1
#   include <sys/times.h>
Packit Service 084de1
#  else
Packit Service 084de1
#   include <sys/time.h>
Packit Service 084de1
#  endif
Packit Service 084de1
Packit Service 084de1
#  ifdef OPENSSL_SYS_VMS
Packit Service 084de1
#   define VMS 1
Packit Service 084de1
  /*
Packit Service 084de1
   * some programs don't include stdlib, so exit() and others give implicit
Packit Service 084de1
   * function warnings
Packit Service 084de1
   */
Packit Service 084de1
#   include <stdlib.h>
Packit Service 084de1
#   if defined(__DECC)
Packit Service 084de1
#    include <unistd.h>
Packit Service 084de1
#   else
Packit Service 084de1
#    include <unixlib.h>
Packit Service 084de1
#   endif
Packit Service 084de1
#   define LIST_SEPARATOR_CHAR ','
Packit Service 084de1
  /* We don't have any well-defined random devices on VMS, yet... */
Packit Service 084de1
#   undef DEVRANDOM
Packit Service 084de1
  /*-
Packit Service 084de1
     We need to do this since VMS has the following coding on status codes:
Packit Service 084de1
Packit Service 084de1
     Bits 0-2: status type: 0 = warning, 1 = success, 2 = error, 3 = info ...
Packit Service 084de1
               The important thing to know is that odd numbers are considered
Packit Service 084de1
               good, while even ones are considered errors.
Packit Service 084de1
     Bits 3-15: actual status number
Packit Service 084de1
     Bits 16-27: facility number.  0 is considered "unknown"
Packit Service 084de1
     Bits 28-31: control bits.  If bit 28 is set, the shell won't try to
Packit Service 084de1
                 output the message (which, for random codes, just looks ugly)
Packit Service 084de1
Packit Service 084de1
     So, what we do here is to change 0 to 1 to get the default success status,
Packit Service 084de1
     and everything else is shifted up to fit into the status number field, and
Packit Service 084de1
     the status is tagged as an error, which is what is wanted here.
Packit Service 084de1
Packit Service 084de1
     Finally, we add the VMS C facility code 0x35a000, because there are some
Packit Service 084de1
     programs, such as Perl, that will reinterpret the code back to something
Packit Service 084de1
     POSIX.  'man perlvms' explains it further.
Packit Service 084de1
Packit Service 084de1
     NOTE: the perlvms manual wants to turn all codes 2 to 255 into success
Packit Service 084de1
     codes (status type = 1).  I couldn't disagree more.  Fortunately, the
Packit Service 084de1
     status type doesn't seem to bother Perl.
Packit Service 084de1
     -- Richard Levitte
Packit Service 084de1
  */
Packit Service 084de1
#   define EXIT(n)  exit((n) ? (((n) << 3) | 2 | 0x10000000 | 0x35a000) : 1)
Packit Service 084de1
Packit Service 084de1
#   define DEFAULT_HOME "SYS$LOGIN:"
Packit Service 084de1
Packit Service 084de1
#  else
Packit Service 084de1
     /* !defined VMS */
Packit Service 084de1
#   ifdef OPENSSL_UNISTD
Packit Service 084de1
#    include OPENSSL_UNISTD
Packit Service 084de1
#   else
Packit Service 084de1
#    include <unistd.h>
Packit Service 084de1
#   endif
Packit Service 084de1
#   include <sys/types.h>
Packit Service 084de1
#   ifdef OPENSSL_SYS_WIN32_CYGWIN
Packit Service 084de1
#    include <io.h>
Packit Service 084de1
#    include <fcntl.h>
Packit Service 084de1
#   endif
Packit Service 084de1
Packit Service 084de1
#   define LIST_SEPARATOR_CHAR ':'
Packit Service 084de1
#   define EXIT(n)             exit(n)
Packit Service 084de1
#  endif
Packit Service 084de1
Packit Service 084de1
# endif
Packit Service 084de1
Packit Service 084de1
/***********************************************/
Packit Service 084de1
Packit Service 084de1
# if defined(OPENSSL_SYS_WINDOWS)
Packit Service 084de1
#  define strcasecmp _stricmp
Packit Service 084de1
#  define strncasecmp _strnicmp
Packit Service 084de1
#  if (_MSC_VER >= 1310)
Packit Service 084de1
#   define open _open
Packit Service 084de1
#   define fdopen _fdopen
Packit Service 084de1
#   define close _close
Packit Service 084de1
#   ifndef strdup
Packit Service 084de1
#    define strdup _strdup
Packit Service 084de1
#   endif
Packit Service 084de1
#   define unlink _unlink
Packit Service 084de1
#   define fileno _fileno
Packit Service 084de1
#  endif
Packit Service 084de1
# else
Packit Service 084de1
#  include <strings.h>
Packit Service 084de1
# endif
Packit Service 084de1
Packit Service 084de1
/* vxworks */
Packit Service 084de1
# if defined(OPENSSL_SYS_VXWORKS)
Packit Service 084de1
#  include <ioLib.h>
Packit Service 084de1
#  include <tickLib.h>
Packit Service 084de1
#  include <sysLib.h>
Packit Service 084de1
#  include <vxWorks.h>
Packit Service 084de1
#  include <sockLib.h>
Packit Service 084de1
#  include <taskLib.h>
Packit Service 084de1
Packit Service 084de1
#  define TTY_STRUCT int
Packit Service 084de1
#  define sleep(a) taskDelay((a) * sysClkRateGet())
Packit Service 084de1
Packit Service 084de1
/*
Packit Service 084de1
 * NOTE: these are implemented by helpers in database app! if the database is
Packit Service 084de1
 * not linked, we need to implement them elsewhere
Packit Service 084de1
 */
Packit Service 084de1
struct hostent *gethostbyname(const char *name);
Packit Service 084de1
struct hostent *gethostbyaddr(const char *addr, int length, int type);
Packit Service 084de1
struct servent *getservbyname(const char *name, const char *proto);
Packit Service 084de1
Packit Service 084de1
# endif
Packit Service 084de1
/* end vxworks */
Packit Service 084de1
Packit Service 084de1
# ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
Packit Service 084de1
#  define CRYPTO_memcmp memcmp
Packit Service 084de1
# endif
Packit Service 084de1
Packit Service 084de1
/* unistd.h defines _POSIX_VERSION */
Packit Service 084de1
# if !defined(OPENSSL_NO_SECURE_MEMORY) && defined(OPENSSL_SYS_UNIX) \
Packit Service 084de1
     && ( (defined(_POSIX_VERSION) && _POSIX_VERSION >= 200112L)      \
Packit Service 084de1
          || defined(__sun) || defined(__hpux) || defined(__sgi)      \
Packit Service 084de1
          || defined(__osf__) )
Packit Service 084de1
#  define OPENSSL_SECURE_MEMORY  /* secure memory is implemented */
Packit Service 084de1
# endif
Packit Service 084de1
#endif