From bf41564ccaba485583b549c8d5d8d43ccb95b500 Mon Sep 17 00:00:00 2001 From: Artem Meleshko Date: Thu, 11 Feb 2016 00:53:47 +0200 Subject: [PATCH 01/96] renamed md4/md5 context methods to prevent compiling issues with other libraries --- contrib/mdx/md4.c | 8 +- contrib/mdx/md4.h | 7 +- contrib/mdx/md5.c | 7 +- contrib/mdx/md5.h | 6 +- libdsm.sh | 117 ++++++++ libtasn1/include/libtasn1.h | 402 ++++++++++++++++++++++++++ src/hmac_md5.c | 12 +- src/netbios_session.c | 2 +- src/smb_defs.h | 4 +- src/smb_ntlm.c | 6 +- universal/include/bdsm/bdsm.h | 46 +++ universal/include/bdsm/netbios_defs.h | 40 +++ universal/include/bdsm/netbios_ns.h | 153 ++++++++++ universal/include/bdsm/smb_defs.h | 187 ++++++++++++ universal/include/bdsm/smb_dir.h | 64 ++++ universal/include/bdsm/smb_file.h | 140 +++++++++ universal/include/bdsm/smb_session.h | 146 ++++++++++ universal/include/bdsm/smb_share.h | 104 +++++++ universal/include/bdsm/smb_stat.h | 153 ++++++++++ universal/include/bdsm/smb_types.h | 100 +++++++ 20 files changed, 1680 insertions(+), 24 deletions(-) create mode 100755 libdsm.sh create mode 100644 libtasn1/include/libtasn1.h create mode 100644 universal/include/bdsm/bdsm.h create mode 100644 universal/include/bdsm/netbios_defs.h create mode 100644 universal/include/bdsm/netbios_ns.h create mode 100644 universal/include/bdsm/smb_defs.h create mode 100644 universal/include/bdsm/smb_dir.h create mode 100644 universal/include/bdsm/smb_file.h create mode 100644 universal/include/bdsm/smb_session.h create mode 100644 universal/include/bdsm/smb_share.h create mode 100644 universal/include/bdsm/smb_stat.h create mode 100644 universal/include/bdsm/smb_types.h diff --git a/contrib/mdx/md4.c b/contrib/mdx/md4.c index f153ea3..5c6fa23 100644 --- a/contrib/mdx/md4.c +++ b/contrib/mdx/md4.c @@ -35,6 +35,8 @@ * compile-time configuration. */ + + #ifndef HAVE_OPENSSL #include @@ -177,7 +179,7 @@ static const void *body(MD4_CTX *ctx, const void *data, unsigned long size) return ptr; } -void MD4_Init(MD4_CTX *ctx) +void MD4_CTX_Init(MD4_CTX *ctx) { ctx->a = 0x67452301; ctx->b = 0xefcdab89; @@ -188,7 +190,7 @@ void MD4_Init(MD4_CTX *ctx) ctx->hi = 0; } -void MD4_Update(MD4_CTX *ctx, const void *data, unsigned long size) +void MD4_CTX_Update(MD4_CTX *ctx, const void *data, unsigned long size) { MD4_u32plus saved_lo; unsigned long used, available; @@ -225,7 +227,7 @@ void MD4_Update(MD4_CTX *ctx, const void *data, unsigned long size) memcpy(ctx->buffer, data, size); } -void MD4_Final(unsigned char *result, MD4_CTX *ctx) +void MD4_CTX_Final(unsigned char *result, MD4_CTX *ctx) { unsigned long used, available; diff --git a/contrib/mdx/md4.h b/contrib/mdx/md4.h index 833b7e8..780bf1b 100644 --- a/contrib/mdx/md4.h +++ b/contrib/mdx/md4.h @@ -23,6 +23,7 @@ * See md4.c for more information. */ + #ifdef HAVE_OPENSSL #include #elif !defined(_MD4_H) @@ -39,8 +40,8 @@ typedef struct MD4_u32plus block[16]; } MD4_CTX; -extern void MD4_Init(MD4_CTX *ctx); -extern void MD4_Update(MD4_CTX *ctx, const void *data, unsigned long size); -extern void MD4_Final(unsigned char *result, MD4_CTX *ctx); +extern void MD4_CTX_Init(MD4_CTX *ctx); +extern void MD4_CTX_Update(MD4_CTX *ctx, const void *data, unsigned long size); +extern void MD4_CTX_Final(unsigned char *result, MD4_CTX *ctx); #endif diff --git a/contrib/mdx/md5.c b/contrib/mdx/md5.c index efa9c92..f8e5b9c 100644 --- a/contrib/mdx/md5.c +++ b/contrib/mdx/md5.c @@ -35,6 +35,7 @@ * compile-time configuration. */ + #ifndef HAVE_OPENSSL #include @@ -199,7 +200,7 @@ static const void *body(MD5_CTX *ctx, const void *data, unsigned long size) return ptr; } -void MD5_Init(MD5_CTX *ctx) +void MD5_CTX_Init(MD5_CTX *ctx) { ctx->a = 0x67452301; ctx->b = 0xefcdab89; @@ -210,7 +211,7 @@ void MD5_Init(MD5_CTX *ctx) ctx->hi = 0; } -void MD5_Update(MD5_CTX *ctx, const void *data, unsigned long size) +void MD5_CTX_Update(MD5_CTX *ctx, const void *data, unsigned long size) { MD5_u32plus saved_lo; unsigned long used, available; @@ -247,7 +248,7 @@ void MD5_Update(MD5_CTX *ctx, const void *data, unsigned long size) memcpy(ctx->buffer, data, size); } -void MD5_Final(unsigned char *result, MD5_CTX *ctx) +void MD5_CTX_Final(unsigned char *result, MD5_CTX *ctx) { unsigned long used, available; diff --git a/contrib/mdx/md5.h b/contrib/mdx/md5.h index ad4de9a..2156e3b 100644 --- a/contrib/mdx/md5.h +++ b/contrib/mdx/md5.h @@ -39,8 +39,8 @@ typedef struct MD5_u32plus block[16]; } MD5_CTX; -extern void MD5_Init(MD5_CTX *ctx); -extern void MD5_Update(MD5_CTX *ctx, const void *data, unsigned long size); -extern void MD5_Final(unsigned char *result, MD5_CTX *ctx); +extern void MD5_CTX_Init(MD5_CTX *ctx); +extern void MD5_CTX_Update(MD5_CTX *ctx, const void *data, unsigned long size); +extern void MD5_CTX_Final(unsigned char *result, MD5_CTX *ctx); #endif diff --git a/libdsm.sh b/libdsm.sh new file mode 100755 index 0000000..9f3b88e --- /dev/null +++ b/libdsm.sh @@ -0,0 +1,117 @@ +#!/bin/bash + +# Global build settings +export SDKPATH=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk +export SIMSDKPATH=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk +export MIN_IOS_VERSION=7.0 +export HOST=arm-apple-darwin +export LDFLAGS_NATIVE="-isysroot $SDKPATH" +export LDFLAGS_SIMULATOR="-isysroot $SIMSDKPATH" +export TASN1_CFLAGS="-Ilibtasn1/include" +export TASN1_LIBS="-Llibtasn1 -ltasn1" +export ARCHES=(armv7 armv7s arm64 i386 x86_64) + +# libtasn1 defines +export TASN1_URL="http://ftp.gnu.org/gnu/libtasn1/libtasn1-4.7.tar.gz" +export TASN1_DIR_NAME="libtasn1-4.7" + +# libdsm defines +export DSM_URL="https://github.com/videolabs/libdsm/archive/v0.1.0.zip" +export DSM_DIR_NAME="libdsm" + +###################################################################### + +echo "Checking libtasn1..." + +# Download the latest libtasn1 library +if [ ! -d $TASN1_DIR_NAME ]; then +echo "Downloading libtasn1..." +curl -o $TASN1_DIR_NAME.tar.gz $TASN1_URL +gunzip -c $TASN1_DIR_NAME.tar.gz | tar xopf - +fi +echo "... Done" + +echo "Checking libdsm..." + +# Download the latest version of libdsm +if [ ! -d $DSM_DIR_NAME ]; then +echo "Downloading libdsm..." +curl -L -J -O $DSM_URL +unzip $DSM_DIR_NAME.zip -d $PWD +fi + +echo "...Done" + +###################################################################### +#Build tasn1 + +#Remove the previous build of libtasn1 from libdsm +rm -rf $DSM_DIR_NAME/libtasn1 + +cd $TASN1_DIR_NAME +rm -rf build + +#Build libtasn1 for each architecture +for i in "${ARCHES[@]}" +do +build_files="$build_files build/$i/lib/libtasn1.a" +export ARCH=$i +if [[ $i == *"arm"* ]] +then +export LDFLAGS=$LDFLAGS_NATIVE +else +export LDFLAGS=$LDFLAGS_SIMULATOR +fi +export CFLAGS="-arch $ARCH $LDFLAGS -miphoneos-version-min=$MIN_IOS_VERSION" +./configure --host=$HOST --prefix=$PWD/build/$ARCH && make && make install +make clean +done + +echo $build_files + +#Merge the compiled binaries into a single universal one +mkdir -p build/universal +lipo -create $build_files -output build/universal/libtasn1.a + +#Copy headers across +mkdir build/universal/include +cp -R build/armv7/include build/universal/ + +cd ../ + +#Copy binary to libdsm folder for its build process +cp -R $TASN1_DIR_NAME/build/universal $DSM_DIR_NAME/libtasn1 + +###################################################################### +#Build libdsm + +cd $DSM_DIR_NAME +rm -rf build + +build_files="" +for i in "${ARCHES[@]}" +do +build_files="$build_files build/$i/lib/libdsm.a" +export ARCH=$i +if [[ $i == *"arm"* ]] +then +export LDFLAGS=$LDFLAGS_NATIVE +else +export LDFLAGS=$LDFLAGS_SIMULATOR +fi +export CFLAGS="-arch $ARCH $LDFLAGS -miphoneos-version-min=$MIN_IOS_VERSION" +./bootstrap +./configure --host=$HOST --prefix=$PWD/build/$ARCH && make && make install +make clean +done + +#Merge the compiled binaries into a single universal one +mkdir -p build/universal +lipo -create $build_files -output build/universal/libdsm.a + +#Copy headers across +mkdir build/universal/include +cp -R build/armv7/include build/universal + +#Move final product to parent directory +cp -R build/universal ../libdsm \ No newline at end of file diff --git a/libtasn1/include/libtasn1.h b/libtasn1/include/libtasn1.h new file mode 100644 index 0000000..6223cf9 --- /dev/null +++ b/libtasn1/include/libtasn1.h @@ -0,0 +1,402 @@ +/* + * Copyright (C) 2002-2014 Free Software Foundation, Inc. + * + * This file is part of LIBTASN1. + * + * LIBTASN1 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; either version 2.1 of + * the License, or (at your option) any later version. + * + * LIBTASN1 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. + * + * You should have received a copy of the GNU Lesser General Public + * License along with LIBTASN1; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + * 02110-1301, USA + * + */ + +#ifndef LIBTASN1_H +#define LIBTASN1_H + +#ifndef ASN1_API +#if defined ASN1_BUILDING && defined HAVE_VISIBILITY && HAVE_VISIBILITY +#define ASN1_API __attribute__((__visibility__("default"))) +#elif defined ASN1_BUILDING && defined _MSC_VER && ! defined ASN1_STATIC +#define ASN1_API __declspec(dllexport) +#elif defined _MSC_VER && ! defined ASN1_STATIC +#define ASN1_API __declspec(dllimport) +#else +#define ASN1_API +#endif +#endif + +#include +#include +#include /* for FILE* */ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#define ASN1_VERSION "4.7" + +#if defined(__GNUC__) && !defined(ASN1_INTERNAL_BUILD) +# define _ASN1_GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) +# if _ASN1_GCC_VERSION >= 30100 +# define _ASN1_GCC_ATTR_DEPRECATED __attribute__ ((__deprecated__)) +# endif +#endif + +#ifndef _ASN1_GCC_ATTR_DEPRECATED +#define _ASN1_GCC_ATTR_DEPRECATED +#endif + + /*****************************************/ + /* Errors returned by libtasn1 functions */ + /*****************************************/ +#define ASN1_SUCCESS 0 +#define ASN1_FILE_NOT_FOUND 1 +#define ASN1_ELEMENT_NOT_FOUND 2 +#define ASN1_IDENTIFIER_NOT_FOUND 3 +#define ASN1_DER_ERROR 4 +#define ASN1_VALUE_NOT_FOUND 5 +#define ASN1_GENERIC_ERROR 6 +#define ASN1_VALUE_NOT_VALID 7 +#define ASN1_TAG_ERROR 8 +#define ASN1_TAG_IMPLICIT 9 +#define ASN1_ERROR_TYPE_ANY 10 +#define ASN1_SYNTAX_ERROR 11 +#define ASN1_MEM_ERROR 12 +#define ASN1_MEM_ALLOC_ERROR 13 +#define ASN1_DER_OVERFLOW 14 +#define ASN1_NAME_TOO_LONG 15 +#define ASN1_ARRAY_ERROR 16 +#define ASN1_ELEMENT_NOT_EMPTY 17 + + /*************************************/ + /* Constants used in asn1_visit_tree */ + /*************************************/ +#define ASN1_PRINT_NAME 1 +#define ASN1_PRINT_NAME_TYPE 2 +#define ASN1_PRINT_NAME_TYPE_VALUE 3 +#define ASN1_PRINT_ALL 4 + + /*****************************************/ + /* Constants returned by asn1_read_tag */ + /*****************************************/ +#define ASN1_CLASS_UNIVERSAL 0x00 /* old: 1 */ +#define ASN1_CLASS_APPLICATION 0x40 /* old: 2 */ +#define ASN1_CLASS_CONTEXT_SPECIFIC 0x80 /* old: 3 */ +#define ASN1_CLASS_PRIVATE 0xC0 /* old: 4 */ +#define ASN1_CLASS_STRUCTURED 0x20 + + /*****************************************/ + /* Constants returned by asn1_read_tag */ + /*****************************************/ +#define ASN1_TAG_BOOLEAN 0x01 +#define ASN1_TAG_INTEGER 0x02 +#define ASN1_TAG_SEQUENCE 0x10 +#define ASN1_TAG_SET 0x11 +#define ASN1_TAG_OCTET_STRING 0x04 +#define ASN1_TAG_BIT_STRING 0x03 +#define ASN1_TAG_UTCTime 0x17 +#define ASN1_TAG_GENERALIZEDTime 0x18 +#define ASN1_TAG_OBJECT_ID 0x06 +#define ASN1_TAG_ENUMERATED 0x0A +#define ASN1_TAG_NULL 0x05 +#define ASN1_TAG_GENERALSTRING 0x1B +#define ASN1_TAG_NUMERIC_STRING 0x12 +#define ASN1_TAG_IA5_STRING 0x16 +#define ASN1_TAG_TELETEX_STRING 0x14 +#define ASN1_TAG_PRINTABLE_STRING 0x13 +#define ASN1_TAG_UNIVERSAL_STRING 0x1C +#define ASN1_TAG_BMP_STRING 0x1E +#define ASN1_TAG_UTF8_STRING 0x0C +#define ASN1_TAG_VISIBLE_STRING 0x1A + + /******************************************************/ + /* Structure definition used for the node of the tree */ + /* that represent an ASN.1 DEFINITION. */ + /******************************************************/ + + typedef struct asn1_node_st asn1_node_st; + + typedef asn1_node_st *asn1_node; + + /* maximum number of characters of a name */ + /* inside a file with ASN1 definitons */ +#define ASN1_MAX_NAME_SIZE 64 + + + /*****************************************/ + /* For the on-disk format of ASN.1 trees */ + /*****************************************/ + struct asn1_static_node_st + { + const char *name; /* Node name */ + unsigned int type; /* Node type */ + const void *value; /* Node value */ + }; + typedef struct asn1_static_node_st asn1_static_node; + +/* List of constants for field type of node_asn */ +#define ASN1_ETYPE_INVALID 0 +#define ASN1_ETYPE_CONSTANT 1 +#define ASN1_ETYPE_IDENTIFIER 2 +#define ASN1_ETYPE_INTEGER 3 +#define ASN1_ETYPE_BOOLEAN 4 +#define ASN1_ETYPE_SEQUENCE 5 +#define ASN1_ETYPE_BIT_STRING 6 +#define ASN1_ETYPE_OCTET_STRING 7 +#define ASN1_ETYPE_TAG 8 +#define ASN1_ETYPE_DEFAULT 9 +#define ASN1_ETYPE_SIZE 10 +#define ASN1_ETYPE_SEQUENCE_OF 11 +#define ASN1_ETYPE_OBJECT_ID 12 +#define ASN1_ETYPE_ANY 13 +#define ASN1_ETYPE_SET 14 +#define ASN1_ETYPE_SET_OF 15 +#define ASN1_ETYPE_DEFINITIONS 16 +#define ASN1_ETYPE_CHOICE 18 +#define ASN1_ETYPE_IMPORTS 19 +#define ASN1_ETYPE_NULL 20 +#define ASN1_ETYPE_ENUMERATED 21 +#define ASN1_ETYPE_GENERALSTRING 27 +#define ASN1_ETYPE_NUMERIC_STRING 28 +#define ASN1_ETYPE_IA5_STRING 29 +#define ASN1_ETYPE_TELETEX_STRING 30 +#define ASN1_ETYPE_PRINTABLE_STRING 31 +#define ASN1_ETYPE_UNIVERSAL_STRING 32 +#define ASN1_ETYPE_BMP_STRING 33 +#define ASN1_ETYPE_UTF8_STRING 34 +#define ASN1_ETYPE_VISIBLE_STRING 35 +#define ASN1_ETYPE_UTC_TIME 36 +#define ASN1_ETYPE_GENERALIZED_TIME 37 + +/* Flags used by asn1_delete_structure2() */ + +/* makes sure the values are zeroized prior to deinitialization */ +#define ASN1_DELETE_FLAG_ZEROIZE 1 + +/* Flags used by asn1_der_decoding2(). */ + +/* This flag would allow arbitrary data past the DER data */ +#define ASN1_DECODE_FLAG_ALLOW_PADDING 1 +/* This flag would ensure that no BER decoding takes place */ +#define ASN1_DECODE_FLAG_STRICT_DER (1<<1) + + + struct asn1_data_node_st + { + const char *name; /* Node name */ + const void *value; /* Node value */ + unsigned int value_len; /* Node value size */ + unsigned int type; /* Node value type (ASN1_ETYPE_*) */ + }; + typedef struct asn1_data_node_st asn1_data_node_st; + + /***********************************/ + /* Fixed constants */ + /***********************************/ + + + /* maximum number of characters */ + /* of a description message */ + /* (null character included) */ +#define ASN1_MAX_ERROR_DESCRIPTION_SIZE 128 + + /***********************************/ + /* Functions definitions */ + /***********************************/ + + extern ASN1_API int + asn1_parser2tree (const char *file, + asn1_node * definitions, char *error_desc); + + extern ASN1_API int + asn1_parser2array (const char *inputFileName, + const char *outputFileName, + const char *vectorName, char *error_desc); + + extern ASN1_API int + asn1_array2tree (const asn1_static_node * array, + asn1_node * definitions, char *errorDescription); + + extern ASN1_API void + asn1_print_structure (FILE * out, asn1_node structure, + const char *name, int mode); + + extern ASN1_API int + asn1_create_element (asn1_node definitions, + const char *source_name, asn1_node * element); + + extern ASN1_API int asn1_delete_structure (asn1_node * structure); + + extern ASN1_API int asn1_delete_structure2 (asn1_node * structure, unsigned int flags); + + extern ASN1_API int + asn1_delete_element (asn1_node structure, const char *element_name); + + extern ASN1_API int + asn1_write_value (asn1_node node_root, const char *name, + const void *ivalue, int len); + + extern ASN1_API int + asn1_read_value (asn1_node root, const char *name, + void *ivalue, int *len); + + extern ASN1_API int + asn1_read_value_type (asn1_node root, const char *name, + void *ivalue, int *len, unsigned int *etype); + + extern ASN1_API int + asn1_read_node_value (asn1_node node, asn1_data_node_st * data); + + extern ASN1_API int + asn1_number_of_elements (asn1_node element, const char *name, int *num); + + extern ASN1_API int + asn1_der_coding (asn1_node element, const char *name, + void *ider, int *len, char *ErrorDescription); + + extern ASN1_API int + asn1_der_decoding2 (asn1_node *element, const void *ider, + int *max_ider_len, unsigned int flags, + char *errorDescription); + + extern ASN1_API int + asn1_der_decoding (asn1_node * element, const void *ider, + int len, char *errorDescription); + + /* Do not use. Use asn1_der_decoding() instead. */ + extern ASN1_API int + asn1_der_decoding_element (asn1_node * structure, + const char *elementName, + const void *ider, int len, + char *errorDescription) _ASN1_GCC_ATTR_DEPRECATED; + + extern ASN1_API int + asn1_der_decoding_startEnd (asn1_node element, + const void *ider, int len, + const char *name_element, + int *start, int *end); + + extern ASN1_API int + asn1_expand_any_defined_by (asn1_node definitions, asn1_node * element); + + extern ASN1_API int + asn1_expand_octet_string (asn1_node definitions, + asn1_node * element, + const char *octetName, const char *objectName); + + extern ASN1_API int + asn1_read_tag (asn1_node root, const char *name, + int *tagValue, int *classValue); + + extern ASN1_API const char *asn1_find_structure_from_oid (asn1_node + definitions, + const char + *oidValue); + + extern ASN1_API const char *asn1_check_version (const char *req_version); + + extern ASN1_API const char *asn1_strerror (int error); + + extern ASN1_API void asn1_perror (int error); + +#define ASN1_MAX_TAG_SIZE 4 +#define ASN1_MAX_LENGTH_SIZE 9 +#define ASN1_MAX_TL_SIZE (ASN1_MAX_TAG_SIZE+ASN1_MAX_LENGTH_SIZE) + extern ASN1_API long + asn1_get_length_der (const unsigned char *der, int der_len, int *len); + + extern ASN1_API long + asn1_get_length_ber (const unsigned char *ber, int ber_len, int *len); + + extern ASN1_API void + asn1_length_der (unsigned long int len, unsigned char *der, int *der_len); + + /* Other utility functions. */ + + extern ASN1_API + int asn1_decode_simple_der (unsigned int etype, const unsigned char *der, + unsigned int der_len, + const unsigned char **str, + unsigned int *str_len); + + extern ASN1_API + int asn1_decode_simple_ber (unsigned int etype, const unsigned char *der, + unsigned int der_len, + unsigned char **str, + unsigned int *str_len, + unsigned int *ber_len); + + extern ASN1_API int + asn1_encode_simple_der (unsigned int etype, const unsigned char *str, + unsigned int str_len, unsigned char *tl, + unsigned int *tl_len); + + extern ASN1_API asn1_node + asn1_find_node (asn1_node pointer, const char *name); + + extern ASN1_API int + asn1_copy_node (asn1_node dst, const char *dst_name, + asn1_node src, const char *src_name); + extern ASN1_API asn1_node + asn1_dup_node (asn1_node src, const char *src_name); + + /* Internal and low-level DER utility functions. */ + + extern ASN1_API int + asn1_get_tag_der (const unsigned char *der, int der_len, + unsigned char *cls, int *len, unsigned long *tag); + + extern ASN1_API void + asn1_octet_der (const unsigned char *str, int str_len, + unsigned char *der, int *der_len); + + extern ASN1_API int + asn1_get_octet_der (const unsigned char *der, int der_len, + int *ret_len, unsigned char *str, + int str_size, int *str_len); + + extern ASN1_API void asn1_bit_der (const unsigned char *str, int bit_len, + unsigned char *der, int *der_len); + + extern ASN1_API int + asn1_get_bit_der (const unsigned char *der, int der_len, + int *ret_len, unsigned char *str, + int str_size, int *bit_len); + + extern ASN1_API int + asn1_get_object_id_der (const unsigned char *der, + int der_len, int *ret_len, + char *str, int str_size); + +/* Compatibility types */ + + typedef int asn1_retCode; /* type returned by libtasn1 functions */ + +#define node_asn_struct asn1_node_st +#define node_asn asn1_node_st +#define ASN1_TYPE asn1_node +#define ASN1_TYPE_EMPTY NULL + +#define static_struct_asn asn1_static_node_st +#define ASN1_ARRAY_TYPE asn1_static_node +#define asn1_static_node_t asn1_static_node + +#define node_data_struct asn1_data_node_st +#define ASN1_DATA_NODE asn1_data_node_st + +#ifdef __cplusplus +} +#endif + +#endif /* LIBTASN1_H */ diff --git a/src/hmac_md5.c b/src/hmac_md5.c index be2f074..f09d187 100644 --- a/src/hmac_md5.c +++ b/src/hmac_md5.c @@ -68,9 +68,9 @@ unsigned char *HMAC_MD5(const void *key, size_t key_len, const void *msg, memcpy(cat + 64, msg, msg_len); // MD5 of the result - MD5_Init(&ctx); - MD5_Update(&ctx, cat, msg_len + 64); - MD5_Final(key_pad, &ctx); + MD5_CTX_Init(&ctx); + MD5_CTX_Update(&ctx, cat, msg_len + 64); + MD5_CTX_Final(key_pad, &ctx); free(cat); memcpy(kcat, o_key_pad, 64); @@ -81,9 +81,9 @@ unsigned char *HMAC_MD5(const void *key, size_t key_len, const void *msg, else out = hmac_static; - MD5_Init(&ctx); - MD5_Update(&ctx, kcat, 80); - MD5_Final(out, &ctx); + MD5_CTX_Init(&ctx); + MD5_CTX_Update(&ctx, kcat, 80); + MD5_CTX_Final(out, &ctx); return out; } diff --git a/src/netbios_session.c b/src/netbios_session.c index ed78f52..b0e62aa 100644 --- a/src/netbios_session.c +++ b/src/netbios_session.c @@ -133,7 +133,7 @@ int netbios_session_connect(struct in_addr *addr, encoded_name = netbios_name_encode(name, 0, NETBIOS_FILESERVER); netbios_session_packet_append(s, encoded_name, strlen(encoded_name) + 1); free(encoded_name); - encoded_name = netbios_name_encode("LIBDSM", 0, NETBIOS_WORKSTATION); + encoded_name = netbios_name_encode("NETBIOS_WORKSTATION", 0, NETBIOS_WORKSTATION); netbios_session_packet_append(s, encoded_name, strlen(encoded_name) + 1); free(encoded_name); diff --git a/src/smb_defs.h b/src/smb_defs.h index 08af676..1ff4dae 100644 --- a/src/smb_defs.h +++ b/src/smb_defs.h @@ -41,8 +41,8 @@ //-----------------------------------------------------------------------------/ // Our own identity //-----------------------------------------------------------------------------/ -#define SMB_OS "Unix" -#define SMB_LANMAN "liBDSM" +#define SMB_OS "SMB_OS" +#define SMB_LANMAN "SMB_LANMAN" //-----------------------------------------------------------------------------/ diff --git a/src/smb_ntlm.c b/src/smb_ntlm.c index 4bb46f7..63c8adc 100644 --- a/src/smb_ntlm.c +++ b/src/smb_ntlm.c @@ -89,9 +89,9 @@ void smb_ntlm_hash(const char *password, smb_ntlmh hash) sz = smb_to_utf16(password, strlen(password), &ucs2le_pass); memset((void *)hash, 0, SMB_NTLM_HASH_SIZE); - MD4_Init(&ctx); - MD4_Update(&ctx, (uint8_t *)ucs2le_pass, sz); - MD4_Final((uint8_t *)hash, &ctx); + MD4_CTX_Init(&ctx); + MD4_CTX_Update(&ctx, (uint8_t *)ucs2le_pass, sz); + MD4_CTX_Final((uint8_t *)hash, &ctx); free(ucs2le_pass); } diff --git a/universal/include/bdsm/bdsm.h b/universal/include/bdsm/bdsm.h new file mode 100644 index 0000000..2567adc --- /dev/null +++ b/universal/include/bdsm/bdsm.h @@ -0,0 +1,46 @@ +/***************************************************************************** + * __________________ _________ _____ _____ .__ ._. + * \______ \______ \ / _____/ / \ / _ \ |__| ____ | | + * | | _/| | \ \_____ \ / \ / \ / /_\ \| _/ __ \ | | + * | | \| ` \/ / Y \ / | | \ ___/ \| + * |______ /_______ /_______ \____|__ / /\ \____|__ |__|\___ | __ + * \/ \/ \/ \/ )/ \/ \/ \/ + * + * This file is part of liBDSM. Copyright © 2014-2015 VideoLabs SAS + * + * Author: Julien 'Lta' BALLET + * + * liBDSM is released under LGPLv2.1 (or later) and is also available + * under a commercial license. + ***************************************************************************** + * 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; either version 2.1 of the License, or + * (at your option) any later version. + * + * 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef __BDSM_H_ +#define __BDSM_H_ + +#define BDSM_VERSION_CURRENT 2 +#define BDSM_VERSION_REVISION 1 +#define BDSM_VERSION_AGE 0 + +#include "bdsm/netbios_ns.h" +#include "bdsm/netbios_defs.h" +#include "bdsm/smb_session.h" +#include "bdsm/smb_share.h" +#include "bdsm/smb_file.h" +#include "bdsm/smb_stat.h" +#include "bdsm/smb_dir.h" + +#endif diff --git a/universal/include/bdsm/netbios_defs.h b/universal/include/bdsm/netbios_defs.h new file mode 100644 index 0000000..396bf61 --- /dev/null +++ b/universal/include/bdsm/netbios_defs.h @@ -0,0 +1,40 @@ +/***************************************************************************** + * __________________ _________ _____ _____ .__ ._. + * \______ \______ \ / _____/ / \ / _ \ |__| ____ | | + * | | _/| | \ \_____ \ / \ / \ / /_\ \| _/ __ \ | | + * | | \| ` \/ / Y \ / | | \ ___/ \| + * |______ /_______ /_______ \____|__ / /\ \____|__ |__|\___ | __ + * \/ \/ \/ \/ )/ \/ \/ \/ + * + * This file is part of liBDSM. Copyright © 2014-2015 VideoLabs SAS + * + * Author: Julien 'Lta' BALLET + * + * liBDSM is released under LGPLv2.1 (or later) and is also available + * under a commercial license. + ***************************************************************************** + * 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; either version 2.1 of the License, or + * (at your option) any later version. + * + * 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef _BDSM_NETBIOS_DEFS_H_ +#define _BDSM_NETBIOS_DEFS_H_ + +// Netbios name types +#define NETBIOS_WORKSTATION 0x00 +#define NETBIOS_MESSENGER 0x03 +#define NETBIOS_FILESERVER 0x20 +#define NETBIOS_DOMAINMASTER 0x1b + +#endif diff --git a/universal/include/bdsm/netbios_ns.h b/universal/include/bdsm/netbios_ns.h new file mode 100644 index 0000000..7eba3b1 --- /dev/null +++ b/universal/include/bdsm/netbios_ns.h @@ -0,0 +1,153 @@ +/***************************************************************************** + * __________________ _________ _____ _____ .__ ._. + * \______ \______ \ / _____/ / \ / _ \ |__| ____ | | + * | | _/| | \ \_____ \ / \ / \ / /_\ \| _/ __ \ | | + * | | \| ` \/ / Y \ / | | \ ___/ \| + * |______ /_______ /_______ \____|__ / /\ \____|__ |__|\___ | __ + * \/ \/ \/ \/ )/ \/ \/ \/ + * + * This file is part of liBDSM. Copyright © 2014-2015 VideoLabs SAS + * + * Author: Julien 'Lta' BALLET + * + * liBDSM is released under LGPLv2.1 (or later) and is also available + * under a commercial license. + ***************************************************************************** + * 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; either version 2.1 of the License, or + * (at your option) any later version. + * + * 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef __BDSM_NETBIOS_NS_H_ +#define __BDSM_NETBIOS_NS_H_ + +#include + +/** + * @file netbios_ns.h + * @brief Netbios name service + */ + +typedef struct netbios_ns_entry netbios_ns_entry; +typedef struct netbios_ns netbios_ns; + +/** + * @brief Get the name of the entry referenced by the iterator iter. + * @details The pointer points to an area of memory owned by the netbios name + * service + * + * @return A null-terminated ASCII string representing the name of a netbios machine. + */ +const char *netbios_ns_entry_name(netbios_ns_entry *entry); + +/** + * @brief Get the name of the entry referenced by the iterator iter. + * @details The pointer points to an area of memory owned by the netbios name + * service + * + * @return A null-terminated ASCII string representing the group of a netbios machine. + */ +const char *netbios_ns_entry_group(netbios_ns_entry *entry); + +/** + * @brief Return the IP address of the correspondance referenced by the iterator + * + * @return The ip address of this entry, in network byte order. + */ +uint32_t netbios_ns_entry_ip(netbios_ns_entry *entry); + +/** + * @brief Return the type of record + * + * @return The type of netbios record (.ie 0x20 for FileServer, + * 0 for workstation, etc.) or a value < 0 if the iterator is invalid or an + * error occured. + */ +char netbios_ns_entry_type(netbios_ns_entry *entry); + +/** + * @brief Allocate and initialize the Netbios name service client object. + * @return A newly allocated netbios_ns ready for querying. + * Deallocate with netbios_ns_destroy(). + */ +netbios_ns *netbios_ns_new(); + +/** + * @brief Destroy the netbios name service object + * @param[in] ns A pointer on the netbios_ns to destroy and deallocate + */ +void netbios_ns_destroy(netbios_ns *ns); + +/** + * @brief Resolve a Netbios name + * @details This function tries to resolves the given NetBIOS name with the + * given type on the LAN, using broadcast queries. No WINS server is called. + * + * @param ns the netbios name service object. + * @param name the null-terminated ASCII netbios name to resolve. If it's + * longer than 15 chars, it'll be truncated. + * @param type The type of the name to look for. @see netbios_defs.h + * @param[out] addr The IP address in network byte order of the machine if found. + * @return a value > 0 if successfull, or 0 otherwise + */ +int netbios_ns_resolve(netbios_ns *ns, const char *name, + char type, uint32_t *addr); + +/** + * @brief Perform an inverse netbios lookup (get name from ip) + * @details This function does a NBSTAT and stores all the returned entry in + * the internal list of entries. It returns one of the name found. (Normally + * the <20> or <0> name) + * + * @param ns The name service object. + * @param ip The ip address in network byte order. + * + * @return A null-terminated ASCII string containing the NETBIOS name. You don't + * own the it (it'll be freed when destroying/clearing the name service) + */ +const char *netbios_ns_inverse(netbios_ns *ns, uint32_t ip); + +typedef struct +{ + // Opaque pointer that will be passed to callbacks + void *p_opaque; + // Called when a new entry is added + void (*pf_on_entry_added) (void *p_opaque, netbios_ns_entry *entry); + // Called when an entry is removed + void (*pf_on_entry_removed)(void *p_opaque, netbios_ns_entry *entry); +} netbios_ns_discover_callbacks; + +/** @brief Perform a NETBIOS discovery in a separate thread. + * + * @details This functions starts a new thread that will send a message to '*' + * Netbios name (broadcast NB query on 255.255.255.255). It'll wait for the + * machine on the LAN to answer. It'll then perform a reverse lookup on all the + * ip he received packet from. Once a name and an ip is found, this function + * will notify the caller by a callback. + * + * @param ns The name service object. @param broadcast_timeout Do a broadcast + * every timeout seconds @param callbacks The callbacks previously setup by the + * caller + * + * @return a value > 0 if successfull, or 0 otherwise + */ +int netbios_ns_discover_start(netbios_ns *ns, unsigned int broadcast_timeout, + netbios_ns_discover_callbacks *callbacks); + +/** + * @brief Stop the NETBIOS discovery. + * @param ns The name service object. + */ +int netbios_ns_discover_stop(netbios_ns *ns); + +#endif diff --git a/universal/include/bdsm/smb_defs.h b/universal/include/bdsm/smb_defs.h new file mode 100644 index 0000000..acd1166 --- /dev/null +++ b/universal/include/bdsm/smb_defs.h @@ -0,0 +1,187 @@ +/***************************************************************************** + * __________________ _________ _____ _____ .__ ._. + * \______ \______ \ / _____/ / \ / _ \ |__| ____ | | + * | | _/| | \ \_____ \ / \ / \ / /_\ \| _/ __ \ | | + * | | \| ` \/ / Y \ / | | \ ___/ \| + * |______ /_______ /_______ \____|__ / /\ \____|__ |__|\___ | __ + * \/ \/ \/ \/ )/ \/ \/ \/ + * + * This file is part of liBDSM. Copyright © 2014-2015 VideoLabs SAS + * + * Author: Julien 'Lta' BALLET + * + * liBDSM is released under LGPLv2.1 (or later) and is also available + * under a commercial license. + ***************************************************************************** + * 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; either version 2.1 of the License, or + * (at your option) any later version. + * + * 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +/** + * @file smb_defs.h + * @brief SMB usefull constants + */ + +#ifndef __BSDM_SMB_DEFS_H_ +#define __BSDM_SMB_DEFS_H_ + +#define SMB_DEFAULT_BUFSIZE (8192) + +enum +{ + /// SMB with Direct-TCP connection (OSX supports only this) + SMB_TRANSPORT_TCP = 1, + /// SMB with Netbios over TCP (older mechanism) + SMB_TRANSPORT_NBT = 2 +}; + +//-----------------------------------------------------------------------------/ +// SMB Session states +//-----------------------------------------------------------------------------/ +enum +{ + /// Error state, there was an error somewhere + SMB_STATE_ERROR = -1, + /// The SMB session has just been created + SMB_STATE_NEW = 0, + /// A Netbios session has been successfully established. + SMB_STATE_NETBIOS_OK = 1, + /// Dialect was successfully negotiated + SMB_STATE_DIALECT_OK = 2, + /// Session Authentication was successfull, you can become nasty + SMB_STATE_SESSION_OK = 3 +}; + +//-----------------------------------------------------------------------------/ +// smb_fseek() operations +//-----------------------------------------------------------------------------/ +// smb_fseek operations +enum +{ + /// Set the read pointer at the given position + SMB_SEEK_SET = 0, + /// Adjusts the read pointer relatively to the actual position + SMB_SEEK_CUR = 1 +}; + +enum smb_session_supports_what +{ + SMB_SESSION_XSEC = 0, +}; + +//-----------------------------------------------------------------------------/ +// File access rights (used when smb_open() files) +//-----------------------------------------------------------------------------/ +/// Flag for smb_file_open. Request right for reading +#define SMB_MOD_READ (1 << 0) +/// Flag for smb_file_open. Request right for writing +#define SMB_MOD_WRITE (1 << 1) +/// Flag for smb_file_open. Request right for appending +#define SMB_MOD_APPEND (1 << 2) +/// Flag for smb_file_open. Request right for extended read (?) +#define SMB_MOD_READ_EXT (1 << 3) +/// Flag for smb_file_open. Request right for extended write (?) +#define SMB_MOD_WRITE_EXT (1 << 4) +/// Flag for smb_file_open. Request right for execution (?) +#define SMB_MOD_EXEC (1 << 5) +/// Flag for smb_file_open. Request right for child removal (?) +#define SMB_MOD_RMCHILD (1 << 6) +/// Flag for smb_file_open. Request right for reading file attributes +#define SMB_MOD_READ_ATTR (1 << 7) +/// Flag for smb_file_open. Request right for writing file attributes +#define SMB_MOD_WRITE_ATTR (1 << 8) +/// Flag for smb_file_open. Request right for removing file +#define SMB_MOD_RM (1 << 16) +/// Flag for smb_file_open. Request right for reading ACL +#define SMB_MOD_READ_CTL (1 << 17) +/// Flag for smb_file_open. Request right for writing ACL +#define SMB_MOD_WRITE_DAC (1 << 18) +/// Flag for smb_file_open. Request right for changing owner +#define SMB_MOD_CHOWN (1 << 19) +/// Flag for smb_file_open. (??) +#define SMB_MOD_SYNC (1 << 20) +/// Flag for smb_file_open. (??) +#define SMB_MOD_SYS (1 << 24) +/// Flag for smb_file_open. (??) +#define SMB_MOD_MAX_ALLOWED (1 << 25) +/// Flag for smb_file_open. Request all generic rights (??) +#define SMB_MOD_GENERIC_ALL (1 << 28) +/// Flag for smb_file_open. Request generic exec right (??) +#define SMB_MOD_GENERIC_EXEC (1 << 29) +/// Flag for smb_file_open. Request generic read right (??) +#define SMB_MOD_GENERIC_READ (1 << 30) +/// Flag for smb_file_open. Request generic write right (??) +#define SMB_MOD_GENERIC_WRITE (1 << 31) +/** + * @brief Flag for smb_file_open. Default R/W mode + * @details A few flags OR'ed + */ +#define SMB_MOD_RW (SMB_MOD_READ | SMB_MOD_WRITE | SMB_MOD_APPEND \ + | SMB_MOD_READ_EXT | SMB_MOD_WRITE_EXT \ + | SMB_MOD_READ_ATTR | SMB_MOD_WRITE_ATTR \ + | SMB_MOD_READ_CTL ) +/** + * @brief Flag for smb_file_open. Default R/O mode + * @details A few flags OR'ed + */ +#define SMB_MOD_RO (SMB_MOD_READ | SMB_MOD_READ_EXT \ + | SMB_MOD_READ_ATTR | SMB_MOD_READ_CTL ) + +//-----------------------------------------------------------------------------/ +// NTSTATUS & internal return codes +//-----------------------------------------------------------------------------/ +#define NT_STATUS_SUCCESS 0x00000000 +#define NT_STATUS_INVALID_SMB 0x00010002 +#define NT_STATUS_SMB_BAD_TID 0x00050002 +#define NT_STATUS_SMB_BAD_UID 0x005b0002 +#define NT_STATUS_NOT_IMPLEMENTED 0xc0000002 +#define NT_STATUS_INVALID_DEVICE_REQUEST 0xc0000010 +#define NT_STATUS_NO_SUCH_DEVICE 0xc000000e +#define NT_STATUS_NO_SUCH_FILE 0xc000000f +#define NT_STATUS_MORE_PROCESSING_REQUIRED 0xc0000016 +#define NT_STATUS_INVALID_LOCK_SEQUENCE 0xc000001e +#define NT_STATUS_INVALID_VIEW_SIZE 0xc000001f +#define NT_STATUS_ALREADY_COMMITTED 0xc0000021 +#define NT_STATUS_ACCESS_DENIED 0xc0000022 +#define NT_STATUS_OBJECT_NAME_NOT_FOUND 0xc0000034 +#define NT_STATUS_OBJECT_NAME_COLLISION 0xc0000035 +#define NT_STATUS_OBJECT_PATH_INVALID 0xc0000039 +#define NT_STATUS_OBJECT_PATH_NOT_FOUND 0xc000003a +#define NT_STATUS_OBJECT_PATH_SYNTAX_BAD 0xc000003b +#define NT_STATUS_PORT_CONNECTION_REFUSED 0xc0000041 +#define NT_STATUS_THREAD_IS_TERMINATING 0xc000004b +#define NT_STATUS_DELETE_PENDING 0xc0000056 +#define NT_STATUS_PRIVILEGE_NOT_HELD 0xc0000061 +#define NT_STATUS_LOGON_FAILURE 0xc000006D +#define NT_STATUS_DFS_EXIT_PATH_FOUND 0xc000009b +#define NT_STATUS_MEDIA_WRITE_PROTECTED 0xc00000a2 +#define NT_STATUS_ILLEGAL_FUNCTION 0xc00000af +#define NT_STATUS_FILE_IS_A_DIRECTORY 0xc00000ba +#define NT_STATUS_FILE_RENAMED 0xc00000d5 +#define NT_STATUS_REDIRECTOR_NOT_STARTED 0xc00000fb +#define NT_STATUS_DIRECTORY_NOT_EMPTY 0xc0000101 +#define NT_STATUS_PROCESS_IS_TERMINATING 0xc000010a +#define NT_STATUS_TOO_MANY_OPENED_FILES 0xc000011f +#define NT_STATUS_CANNOT_DELETE 0xc0000121 +#define NT_STATUS_FILE_DELETED 0xc0000123 +#define NT_STATUS_INSUFF_SERVER_RESOURCES 0xc0000205 + +#define DSM_ERROR_INTERNAL 0xff000001 +#define DSM_ERROR_INVALID_RCV_MESS 0xff000002 +#define DSM_ERROR_UTF16_CONV_FAILED 0xff000003 +#define DSM_ERROR_INVALID_PATH 0xff000004 +#define DSM_ERROR_INVALID_SESSION 0xff000005 +#define DSM_ERROR_INVALID_TID 0xff000006 + +#endif diff --git a/universal/include/bdsm/smb_dir.h b/universal/include/bdsm/smb_dir.h new file mode 100644 index 0000000..d63d019 --- /dev/null +++ b/universal/include/bdsm/smb_dir.h @@ -0,0 +1,64 @@ +/***************************************************************************** + * __________________ _________ _____ _____ .__ ._. + * \______ \______ \ / _____/ / \ / _ \ |__| ____ | | + * | | _/| | \ \_____ \ / \ / \ / /_\ \| _/ __ \ | | + * | | \| ` \/ / Y \ / | | \ ___/ \| + * |______ /_______ /_______ \____|__ / /\ \____|__ |__|\___ | __ + * \/ \/ \/ \/ )/ \/ \/ \/ + * + * This file is part of liBDSM. Copyright © 2014-2015 VideoLabs SAS + * + * Author: Sylver Bruneau + * + * liBDSM is released under LGPLv2.1 (or later) and is also available + * under a commercial license. + ***************************************************************************** + * 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; either version 2.1 of the License, or + * (at your option) any later version. + * + * 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +/** + * @file smb_dir.h + * @brief Directory operations + */ + +#ifndef __BDSM_SMB_DIR_H_ +#define __BDSM_SMB_DIR_H_ + +#include "bdsm/smb_session.h" + + +/** + * @brief remove a directory on a share. + * @details Use this function to delete an empty directory + * + * @param s The session object + * @param tid The tid of the share the file is in, obtained via smb_tree_connect() + * @param path The path of the file to delete + * @return 0 if delete OK or "NT" error code + */ +uint32_t smb_directory_rm(smb_session *s, smb_tid tid, const char *path); + +/** + * @brief create a directory on a share. + * @details Use this function to create a directory + * + * @param s The session object + * @param tid The tid of the share the file is in, obtained via smb_tree_connect() + * @param path The path of the directory to create + * @return 0 if directory creation OK or "NT" error code + */ +uint32_t smb_directory_create(smb_session *s, smb_tid tid, const char *path); + +#endif diff --git a/universal/include/bdsm/smb_file.h b/universal/include/bdsm/smb_file.h new file mode 100644 index 0000000..79cad2f --- /dev/null +++ b/universal/include/bdsm/smb_file.h @@ -0,0 +1,140 @@ +/***************************************************************************** + * __________________ _________ _____ _____ .__ ._. + * \______ \______ \ / _____/ / \ / _ \ |__| ____ | | + * | | _/| | \ \_____ \ / \ / \ / /_\ \| _/ __ \ | | + * | | \| ` \/ / Y \ / | | \ ___/ \| + * |______ /_______ /_______ \____|__ / /\ \____|__ |__|\___ | __ + * \/ \/ \/ \/ )/ \/ \/ \/ + * + * This file is part of liBDSM. Copyright © 2014-2015 VideoLabs SAS + * + * Author: Julien 'Lta' BALLET + * + * liBDSM is released under LGPLv2.1 (or later) and is also available + * under a commercial license. + ***************************************************************************** + * 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; either version 2.1 of the License, or + * (at your option) any later version. + * + * 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +/** + * @file smb_file.h + * @brief File operations + */ + +#ifndef __BDSM_SMB_FILE_H_ +#define __BDSM_SMB_FILE_H_ + +#include "bdsm/smb_session.h" + + +/** + * @brief Open a file on a share. + * @details Use this function to obtain an smb_fd, necesary for file operations + * + * @param s The session object + * @param tid The tid of the share the file is in, obtained via smb_tree_connect() + * @param path The path of the file to open + * @param mod The access modes requested (example: #SMB_MOD_RO) + * @return A smb file description that can be use for further file operations + * or 0 in case of error + * + * @see smb_tree_connect + */ +smb_fd smb_fopen(smb_session *s, smb_tid tid, const char *path, + uint32_t mod); + +/** + * @brief Close an open file + * @details The smb_fd is invalidated and MUST not be use it anymore. You can + * give it the 0 value. + * + * @param s The session object + * @param fd The SMB file descriptor + */ +void smb_fclose(smb_session *s, smb_fd fd); + +/** + * @brief Read from an open file + * @details The semantics is basically the same that the unix read() one. + * At most 'buf_size' bytes are read from the current seek offset and copied into + * the memory pointed by 'buf' from the open file represented by the smb file + * descriptor 'fd'. + * + * @param[in] s The session object + * @param[in] fd [description] + * @param[out] buf [description] + * @param[in] buf_size [description] + * @return The number of bytes read or -1 in case of error. + */ +ssize_t smb_fread(smb_session *s, smb_fd fd, void *buf, size_t buf_size); + +/** + * @brief Write to an open file + * @details At most 'buf_size' bytes from memory pointed by 'buf' are written + * to the current seek offset of the open file represented by the smb file + * descriptor 'fd'. + * + * @param[in] s The session object + * @param[in] fd [description] + * @param[out] buf [description] + * @param[in] buf_size [description] + * @return The number of bytes written or -1 in case of error. + */ +ssize_t smb_fwrite(smb_session *s, smb_fd fd, void *buf, size_t buf_size); + +/** + * @brief Sets/Moves/Get the read/write pointer for a given file + * @details The behavior of this function is the same as the Unix fseek() + * function, except the SEEK_END argument isn't supported. + * + * This functions adjust the read/write pointer depending on the value of + * offset and whence. + * + * - If whence == #SMB_SEEK_SET, the read pointer is set at 'offset' + * - If whence == #SMB_SEEK_CUR, the read pointer is adjusted by 'offset' + * + * @param s The session object + * @param fd The file descriptors for which the read pointer is to be adjusted + * @param offset Set/Adjust quantity + * @param whence Which action to perform. Supported operations are + * #SMB_SEEK_SET and #SMB_SEEK_CUR + * @return The current read pointer position or -1 on error + */ +ssize_t smb_fseek(smb_session *s, smb_fd fd, ssize_t offset, int whence); + +/** + * @brief remove a file on a share. + * @details Use this function to delete a file + * + * @param s The session object + * @param tid The tid of the share the file is in, obtained via smb_tree_connect() + * @param path The path of the file to delete + * @return 0 if delete OK or "NT" error code + */ +uint32_t smb_file_rm(smb_session *s, smb_tid tid, const char *path); + +/** + * @brief move/rename a file/directory on a share. + * @details Use this function to move and/or rename a file/directory + * + * @param s The session object + * @param tid The tid of the share the file is in, obtained via smb_tree_connect() + * @param old_path The current path of the file/directory to move/rename + * @param new_path The new path of the file/directory + * @return 0 if move OK or -1 in case of error + */ +int smb_file_mv(smb_session *s, smb_tid tid, const char *old_path, const char *new_path); + +#endif diff --git a/universal/include/bdsm/smb_session.h b/universal/include/bdsm/smb_session.h new file mode 100644 index 0000000..ee37617 --- /dev/null +++ b/universal/include/bdsm/smb_session.h @@ -0,0 +1,146 @@ +/***************************************************************************** + * __________________ _________ _____ _____ .__ ._. + * \______ \______ \ / _____/ / \ / _ \ |__| ____ | | + * | | _/| | \ \_____ \ / \ / \ / /_\ \| _/ __ \ | | + * | | \| ` \/ / Y \ / | | \ ___/ \| + * |______ /_______ /_______ \____|__ / /\ \____|__ |__|\___ | __ + * \/ \/ \/ \/ )/ \/ \/ \/ + * + * This file is part of liBDSM. Copyright © 2014-2015 VideoLabs SAS + * + * Author: Julien 'Lta' BALLET + * + * liBDSM is released under LGPLv2.1 (or later) and is also available + * under a commercial license. + ***************************************************************************** + * 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; either version 2.1 of the License, or + * (at your option) any later version. + * + * 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef __BDSM_SMB_SESSION_H_ +#define __BDSM_SMB_SESSION_H_ + + +#include "bdsm/smb_defs.h" +#include "bdsm/smb_types.h" + +/** + * @file smb_session.h + * @brief Functions to connect and authenticate to an SMB server + */ + +/** + * @brief Allocates a new Session object + * @details To be able to perform actions on shares and file, you'll need to + * call smb_session_connect, then authenticate with smb_authenticate. + * @return A new Session object. + */ +smb_session *smb_session_new(); + +/** + * @brief Close a session and deallocate its ressources + * @details After destroying a session, all the smb_tid, smb_fid and smb_fd + * associated with this session becomes invalid. + * + * @param s The session to destroy + */ +void smb_session_destroy(smb_session *s); + + +/** + * @brief Returns the current state of the session + * @see SMB_STATE_ERROR + * @see SMB_STATE_NEW + * @see SMB_STATE_SESSION_OK + */ +int smb_session_state(smb_session *s); + +/** + * @brief Set the credentials for this session. + * @details Any of the params except s can be NULL. + * + * @param s The session object. + * @param domain Domain to authenticate on. Often it's the same as netbios host. + * @param login The user to login as. + * @param password the user's password. + */ +void smb_session_set_creds(smb_session *s, const char *domain, + const char *login, const char *password); +#define SMB_CREDS_MAXLEN 128 + + + +/** + * @brief Establish a connection and negotiate a session protocol with a remote + * host + * @details You have to provide both the ip and the name. This is a constraint + * of Netbios, which requires you to know its name before he accepts to speak + * with you. + * + * @param s A session object. + * @param hostname The ASCII netbios name, the name type will be coerced to <20> + * since libdsm is about reading files + * @param ip The ip of the machine to connect to (in network byte order) + * @param transport The type of transport used, it could be SMB_TRANSPORT_TCP + * or SMB_TRANSPORT_NBT (Netbios over TCP, ie legacy) + * @return 0 in case of error, a value > 0 otherwise. + */ +int smb_session_connect(smb_session *s, const char *hostname, + uint32_t ip, int transport); + +/** + * @brief Authenticate on the remote host with the provided credentials + * @details Can be called if session state is SMB_STATE_DIALECT_OK. + * If successfull, session state transition to SMB_STATE_SESSION_OK + * Provides the credentials with smb_session_set_creds. + * + * @param s The session object. + * + * @return 0 in case of failure, > 0 in case of success. Success doesn't mean + * you are logged in with the user you requested. If guest are activated on + * the remote host, when login fails, you are logged in as 'Guest'. Failure + * might also indicate you didn't supplied all the credentials + */ +int smb_session_login(smb_session *s); + +/** + * @brief Am i logged in as Guest ? + * + * @param s The session object + * @return 1 -> Logged in as guest + * 0 -> Logged in as regular user + * -1 -> Error (not logged in, invalid session, etc.) + */ +int smb_session_is_guest(smb_session *s); + +/** + * @brief Returns the server name with the type + * + * @param s The session object + * @return The server name or NULL. The memory is owned by the session object. + */ +const char *smb_session_server_name(smb_session *s); + +/** + * @brief Check if a feature is supported/has been negociated with the server + * + * @param s The session object + * @param what Which features to check ? @see smb_session_supports_what + * + * @return 0 if the feature is not supported, something else otherwise + */ +int smb_session_supports(smb_session *s, int what); + + +#endif diff --git a/universal/include/bdsm/smb_share.h b/universal/include/bdsm/smb_share.h new file mode 100644 index 0000000..24bfeee --- /dev/null +++ b/universal/include/bdsm/smb_share.h @@ -0,0 +1,104 @@ +/***************************************************************************** + * __________________ _________ _____ _____ .__ ._. + * \______ \______ \ / _____/ / \ / _ \ |__| ____ | | + * | | _/| | \ \_____ \ / \ / \ / /_\ \| _/ __ \ | | + * | | \| ` \/ / Y \ / | | \ ___/ \| + * |______ /_______ /_______ \____|__ / /\ \____|__ |__|\___ | __ + * \/ \/ \/ \/ )/ \/ \/ \/ + * + * This file is part of liBDSM. Copyright © 2014-2015 VideoLabs SAS + * + * Author: Julien 'Lta' BALLET + * + * liBDSM is released under LGPLv2.1 (or later) and is also available + * under a commercial license. + ***************************************************************************** + * 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; either version 2.1 of the License, or + * (at your option) any later version. + * + * 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef __BDSM_SMB_SHARE_H_ +#define __BDSM_SMB_SHARE_H_ + +#include "bdsm/smb_session.h" +#include "bdsm/smb_file.h" + +/** + * @file smb_share.h + * @brief List and connect to SMB shares + */ + +/** + * @brief List the existing share of this sessions's machine + * @details This function makes a RPC to the machine this session is currently + * authenticated to and list all the existing shares of this machines. The share + * starting with a $ are supposed to be system/hidden share. + * + * @param[in] s The session object + * @param[out] list A pointer to an opaque share_list object. + * + * @return The number of share listed or 0 if there was an error (There + * theorically cannot be 0 share on a machine, there's at least $IPC) + */ +size_t smb_share_get_list(smb_session *s, smb_share_list *list); + +/** + * @brief Get the number of share in the list + * + * @param list An opaque share list returned by smb_share_list() + * @return The number of share in the opaque share_list object + */ +size_t smb_share_list_count(smb_share_list list); + +/** + * @brief Get the name of the share in the list at the given index + + * @param list An opaque share list object + * @param index The index of the returned item in the list + * + * @return The string has been decoded from UTF16 to you local encoding + */ +const char *smb_share_list_at(smb_share_list list, size_t index); + +/** + * @brief Destroy an opaque share list object + * + * @param list The list to destroy. The object is not usable anymore afterward, + * you can set it to 'NULL' + */ +void smb_share_list_destroy(smb_share_list list); + +/** + * @brief Connects to a SMB share + * @details Before being able to list/read files on a SMB file server, you have + * to be connected to the share containing the files you want to read or + * the directories you want to list + * + * @param s The session object + * @param name The share name @see smb_share_list + * + * @return An opaque value representing an open share (like a file descriptor) + * or -1 if there was an error + */ +smb_tid smb_tree_connect(smb_session *s, const char *name); + +/** + * @brief Disconnect from a share + * @details UNIMPLEMENTED + * + * @return 0 if OK or -1 if there was an error + */ +int smb_tree_disconnect(smb_session *s, smb_tid tid); + +#endif diff --git a/universal/include/bdsm/smb_stat.h b/universal/include/bdsm/smb_stat.h new file mode 100644 index 0000000..622bcb0 --- /dev/null +++ b/universal/include/bdsm/smb_stat.h @@ -0,0 +1,153 @@ +/***************************************************************************** + * __________________ _________ _____ _____ .__ ._. + * \______ \______ \ / _____/ / \ / _ \ |__| ____ | | + * | | _/| | \ \_____ \ / \ / \ / /_\ \| _/ __ \ | | + * | | \| ` \/ / Y \ / | | \ ___/ \| + * |______ /_______ /_______ \____|__ / /\ \____|__ |__|\___ | __ + * \/ \/ \/ \/ )/ \/ \/ \/ + * + * This file is part of liBDSM. Copyright © 2014-2015 VideoLabs SAS + * + * Author: Julien 'Lta' BALLET + * + * liBDSM is released under LGPLv2.1 (or later) and is also available + * under a commercial license. + ***************************************************************************** + * 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; either version 2.1 of the License, or + * (at your option) any later version. + * + * 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +/** + * @file smb_stat.h + * @brief File status / listing + */ + +#ifndef __BDSM_SMB_STAT_H_ +#define __BDSM_SMB_STAT_H_ + +#include "bdsm/smb_defs.h" +#include "bdsm/smb_session.h" + +/// smb_stat_get() OP: Get file size +#define SMB_STAT_SIZE 0 +/// smb_stat_get() OP: Get file allocation size (Size on disk) +#define SMB_STAT_ALLOC_SIZE 1 +/// smb_stat_get() OP: 0 -> not a directory, != 0 -> directory +#define SMB_STAT_ISDIR 2 +/// smb_stat_get() OP: Get file creation time +#define SMB_STAT_CTIME 3 +/// smb_stat_get() OP: Get file last access time +#define SMB_STAT_ATIME 4 +/// smb_stat_get() OP: Get file last write time +#define SMB_STAT_WTIME 5 +/// smb_stat_get() OP: Get file last moditification time +#define SMB_STAT_MTIME 6 + +/** + * @brief Returns infos about files matching a pattern + * @details This functions uses the FIND_FIRST2 SMB operations to list files + * matching a certain pattern. It's basically used to list folder contents + * + * @param s The session object + * @param tid The share inside of which we want to find files obtained by + * smb_tree_connect() + * @param pattern The pattern to match files. '\\*' will list all the files at + * the root of the share. '\\afolder\\*' will list all the files inside of the + * 'afolder' directory. + * @return An opaque list of smb_stat or NULL in case of error + */ +smb_stat_list smb_find(smb_session *s, smb_tid tid, const char *pattern); + +/** + * @brief Get the status of a file from it's path inside of a share + * + * @param s The session object + * @param tid The tree id of a share obtained by smb_tree_connect() + * @param path The full path of the file relative to the root of the share + * (e.g. '\\folder\\file.ext') + * + * @return An opaque smb_stat or NULL in case of error. You need to + * destory this object with smb_stat_destroy after usage. + */ +smb_stat smb_fstat(smb_session *s, smb_tid tid, const char *path); + +/** + * @brief Get the status of an open file from it's file descriptor + * @details The file status will be those at the time of open + * + * @param s The session object + * @param fd The smb_fd from which you want infos/status + * + * @return An opaque smb_stat or NULL in case of error. You don't own + * this object memory, and then don't have to destory it + */ +smb_stat smb_stat_fd(smb_session *s, smb_fd fd); + +/** + * @brief Clear a smb_stat object, reclaiming its memory + * + * @param stat A smb_stat object returned by smb_fstat. + */ +void smb_stat_destroy(smb_stat stat); + +/** + * @brief Get the number of item in a smb_stat_list file info + * + * @param list The list you want the length of + * @return The length of the list. It returns 0 if the list is invalid + */ +size_t smb_stat_list_count(smb_stat_list list); + +/** + * @brief Get the element at the given position. + * + * @param list A stat list + * @param index The position of the element you want. + * + * @return An opaque smb_stat or NULL in case of error + */ +smb_stat smb_stat_list_at(smb_stat_list list, size_t index); + +/** + * @brief Destroy and release a list of file stat returned by smb_find + * + * @param list The stat_list to free + */ +void smb_stat_list_destroy(smb_stat_list list); + +/** + * @brief Get the name of the file from its status + * + * @param info A file status + * @return A null-terminated string in you current locale encoding or NULL. + */ +const char *smb_stat_name(smb_stat info); + +/** + * @brief Get a file attribute + * @details This function is a getter that allow you to retrieve various + * informations about a file on a smb_stat object. You can get its size, + * various timestamps, etc. + * + * @param info The smb_stat object to get info from. + * @param what This parameter tells the functions which information to get, can + * be one of #SMB_STAT_SIZE, #SMB_STAT_ALLOC_SIZE, #SMB_STAT_ISDIR, + * #SMB_STAT_CTIME, #SMB_STAT_ATIME, #SMB_STAT_MTIME, #SMB_STAT_WTIME. + * + * @return The meaning of the returned value depends on the 'what' parameter. + * See each item documentation. + */ +uint64_t smb_stat_get(smb_stat info, int what); + +#endif diff --git a/universal/include/bdsm/smb_types.h b/universal/include/bdsm/smb_types.h new file mode 100644 index 0000000..5aae689 --- /dev/null +++ b/universal/include/bdsm/smb_types.h @@ -0,0 +1,100 @@ +/***************************************************************************** + * __________________ _________ _____ _____ .__ ._. + * \______ \______ \ / _____/ / \ / _ \ |__| ____ | | + * | | _/| | \ \_____ \ / \ / \ / /_\ \| _/ __ \ | | + * | | \| ` \/ / Y \ / | | \ ___/ \| + * |______ /_______ /_______ \____|__ / /\ \____|__ |__|\___ | __ + * \/ \/ \/ \/ )/ \/ \/ \/ + * + * This file is part of liBDSM. Copyright © 2014-2015 VideoLabs SAS + * + * Author: Julien 'Lta' BALLET + * + * liBDSM is released under LGPLv2.1 (or later) and is also available + * under a commercial license. + ***************************************************************************** + * 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; either version 2.1 of the License, or + * (at your option) any later version. + * + * 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +/** + * @file smb_types.h + * @brief liBDSM types and structures + */ + +#ifndef __BDSM_SMB_TYPES_H_ +#define __BDSM_SMB_TYPES_H_ + +#include +#include +#include + +/** + * @struct smb_tid + * @brief The id of a connection to a share within a session. + */ +typedef int32_t smb_tid; + +/** + * @struct smb_fid + * @brief The id of a file within a share within a session. + */ +typedef uint16_t smb_fid; + +// Concatenation of the two above, representing a file inside of a session +// First 4 bytes are the TreeID (smb_tid), last 4 are the File ID (FUID) +// A map between smb_fd and smb_file is maintained inside each session +/** @struct smb_fd + * @brief SMB File descriptor, represents a file within a session. + */ +typedef uint32_t smb_fd; + +// An structure to store user credentials; +// login:password@domain (also DOMAIN\login) +typedef struct +{ + char *domain; + char *login; + char *password; +} smb_creds; + +/** + * @brief An opaque data structure to represent a SMB Session. + */ +typedef struct smb_session smb_session; + +/** + * @struct smb_share_list + * @brief An opaque object representing the list of share of a SMB file server. + */ +typedef char **smb_share_list; + +/** + * @brief An opaque data structure to represent file + */ +typedef struct smb_file smb_file; + +/** + * @struct smb_stat_list + * @brief An opaque structure containing a list of file status + */ +typedef smb_file *smb_stat_list; + +/** + * @struct smb_stat + * @brief An opaque structure containing info about a file + */ +typedef smb_file *smb_stat; + +#endif From c2774c25a9805f0e4e29551c661d892a2e75161f Mon Sep 17 00:00:00 2001 From: Artem Meleshko Date: Sun, 14 Feb 2016 12:50:01 +0200 Subject: [PATCH 02/96] fixed rename request --- src/smb_file.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/smb_file.c b/src/smb_file.c index b9e1b6c..09259a3 100644 --- a/src/smb_file.c +++ b/src/smb_file.c @@ -396,8 +396,8 @@ int smb_file_mv(smb_session *s, smb_tid tid, const char *old_path, const c SMB_MSG_PUT_PKT(req_msg, req); smb_message_put8(req_msg, 0x04); // Buffer format 1, must be 4 smb_message_append(req_msg, utf_old_path, utf_old_len); - smb_message_put8(req_msg, 0x00); // padding to have next byte 16 bits aligned smb_message_put8(req_msg, 0x04); // Buffer format 2, must be 4 + smb_message_put8(req_msg, 0x00); // padding to have next byte 16 bits aligned smb_message_append(req_msg, utf_new_path, utf_new_len); smb_session_send_msg(s, req_msg); From 255b892da10d295309f0b3fa50b7b319af81f69c Mon Sep 17 00:00:00 2001 From: Artem Meleshko Date: Sun, 14 Feb 2016 15:33:19 +0200 Subject: [PATCH 03/96] smb os and smblanman --- src/smb_defs.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/smb_defs.h b/src/smb_defs.h index 1ff4dae..75cda98 100644 --- a/src/smb_defs.h +++ b/src/smb_defs.h @@ -41,8 +41,8 @@ //-----------------------------------------------------------------------------/ // Our own identity //-----------------------------------------------------------------------------/ -#define SMB_OS "SMB_OS" -#define SMB_LANMAN "SMB_LANMAN" +#define SMB_OS "smbos" +#define SMB_LANMAN "smblanman" //-----------------------------------------------------------------------------/ From 90de67ab9d19e928d4f4af0bdefe8df9ad8717c9 Mon Sep 17 00:00:00 2001 From: Artem Meleshko Date: Tue, 16 Feb 2016 23:20:30 +0200 Subject: [PATCH 04/96] added SO_NOSIGPIPE --- src/netbios_ns.c | 3 +++ src/netbios_session.c | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/src/netbios_ns.c b/src/netbios_ns.c index dbbe23d..a7e6d70 100644 --- a/src/netbios_ns.c +++ b/src/netbios_ns.c @@ -123,6 +123,9 @@ static int ns_open_socket(netbios_ns *ns) if ((ns->socket = socket(AF_INET, SOCK_DGRAM, 0)) < 0) goto error; + sock_opt = 1; + setsockopt(ns->socket, SOL_SOCKET, SO_NOSIGPIPE, (void *)&sock_opt, sizeof(sock_opt)); + sock_opt = 1; if (setsockopt(ns->socket, SOL_SOCKET, SO_BROADCAST, (void *)&sock_opt, sizeof(sock_opt)) < 0) diff --git a/src/netbios_session.c b/src/netbios_session.c index b0e62aa..923fbab 100644 --- a/src/netbios_session.c +++ b/src/netbios_session.c @@ -46,6 +46,10 @@ static int open_socket_and_connect(netbios_session *s) { if ((s->socket = socket(AF_INET, SOCK_STREAM, 0)) < 0) goto error; + + int sock_opt = 1; + setsockopt(s->socket, SOL_SOCKET, SO_NOSIGPIPE, (void *)&sock_opt, sizeof(sock_opt)); + if (connect(s->socket, (struct sockaddr *)&s->remote_addr, sizeof(s->remote_addr)) <0) goto error; From bd1ea03c60f8a981d6b858dd0ddd73d7772a0a66 Mon Sep 17 00:00:00 2001 From: Artem Meleshko Date: Wed, 17 Feb 2016 23:45:17 +0200 Subject: [PATCH 05/96] xcode build project --- contrib/rc4/rc4.c | 2 +- contrib/spnego/spnego_asn1.h | 2 +- include/bdsm.h | 14 +- include/bdsm/smb_dir.h | 2 +- include/bdsm/smb_file.h | 2 +- include/bdsm/smb_session.h | 4 +- include/bdsm/smb_share.h | 4 +- include/bdsm/smb_stat.h | 4 +- include/bdsm/smb_types.h | 2 +- src/hmac_md5.h | 2 +- src/netbios_defs.h | 2 +- src/netbios_ns.c | 4 +- src/smb_defs.h | 2 +- src/smb_dir.h | 2 +- src/smb_file.h | 2 +- src/smb_ntlm.c | 4 +- src/smb_session.h | 2 +- src/smb_share.h | 2 +- src/smb_spnego.c | 2 +- src/smb_stat.h | 2 +- src/smb_types.h | 4 +- xcode/dsm.xcodeproj/project.pbxproj | 513 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../UserInterfaceState.xcuserstate | Bin 0 -> 22399 bytes .../xcschemes/libdsm.xcscheme | 80 +++ .../xcschemes/xcschememanagement.plist | 22 + xcode/extra/spnego_asn1.c | 70 +++ xcode/libtasn1/libtasn1.h | 402 ++++++++++++++ 28 files changed, 1127 insertions(+), 33 deletions(-) create mode 100644 xcode/dsm.xcodeproj/project.pbxproj create mode 100644 xcode/dsm.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 xcode/dsm.xcodeproj/project.xcworkspace/xcuserdata/ameleshko.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 xcode/dsm.xcodeproj/xcuserdata/ameleshko.xcuserdatad/xcschemes/libdsm.xcscheme create mode 100644 xcode/dsm.xcodeproj/xcuserdata/ameleshko.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 xcode/extra/spnego_asn1.c create mode 100644 xcode/libtasn1/libtasn1.h diff --git a/contrib/rc4/rc4.c b/contrib/rc4/rc4.c index 2e1fdda..7e99184 100644 --- a/contrib/rc4/rc4.c +++ b/contrib/rc4/rc4.c @@ -36,7 +36,7 @@ * $FreeBSD: src/sys/crypto/rc4/rc4.c,v 1.2.2.1 2000/04/18 04:48:31 archie Exp $ */ -#include "rc4/rc4.h" +#include "rc4.h" static __inline void swap_bytes(uint8_t *a, uint8_t *b) diff --git a/contrib/spnego/spnego_asn1.h b/contrib/spnego/spnego_asn1.h index 3534b99..14af201 100644 --- a/contrib/spnego/spnego_asn1.h +++ b/contrib/spnego/spnego_asn1.h @@ -4,7 +4,7 @@ #include "config.h" -#include +#include "libtasn1.h" extern const asn1_static_node spnego_asn1_conf[]; diff --git a/include/bdsm.h b/include/bdsm.h index 2567adc..855c1a1 100644 --- a/include/bdsm.h +++ b/include/bdsm.h @@ -35,12 +35,12 @@ #define BDSM_VERSION_REVISION 1 #define BDSM_VERSION_AGE 0 -#include "bdsm/netbios_ns.h" -#include "bdsm/netbios_defs.h" -#include "bdsm/smb_session.h" -#include "bdsm/smb_share.h" -#include "bdsm/smb_file.h" -#include "bdsm/smb_stat.h" -#include "bdsm/smb_dir.h" +#include "../include/bdsm/netbios_ns.h" +#include "../include/bdsm/netbios_defs.h" +#include "../include/bdsm/smb_session.h" +#include "../include/bdsm/smb_share.h" +#include "../include/bdsm/smb_file.h" +#include "../include/bdsm/smb_stat.h" +#include "../include/bdsm/smb_dir.h" #endif diff --git a/include/bdsm/smb_dir.h b/include/bdsm/smb_dir.h index d63d019..5976ae1 100644 --- a/include/bdsm/smb_dir.h +++ b/include/bdsm/smb_dir.h @@ -36,7 +36,7 @@ #ifndef __BDSM_SMB_DIR_H_ #define __BDSM_SMB_DIR_H_ -#include "bdsm/smb_session.h" +#include "./smb_session.h" /** diff --git a/include/bdsm/smb_file.h b/include/bdsm/smb_file.h index 79cad2f..4449811 100644 --- a/include/bdsm/smb_file.h +++ b/include/bdsm/smb_file.h @@ -36,7 +36,7 @@ #ifndef __BDSM_SMB_FILE_H_ #define __BDSM_SMB_FILE_H_ -#include "bdsm/smb_session.h" +#include "./smb_session.h" /** diff --git a/include/bdsm/smb_session.h b/include/bdsm/smb_session.h index ee37617..e503234 100644 --- a/include/bdsm/smb_session.h +++ b/include/bdsm/smb_session.h @@ -32,8 +32,8 @@ #define __BDSM_SMB_SESSION_H_ -#include "bdsm/smb_defs.h" -#include "bdsm/smb_types.h" +#include "./smb_defs.h" +#include "./smb_types.h" /** * @file smb_session.h diff --git a/include/bdsm/smb_share.h b/include/bdsm/smb_share.h index 24bfeee..1e80182 100644 --- a/include/bdsm/smb_share.h +++ b/include/bdsm/smb_share.h @@ -31,8 +31,8 @@ #ifndef __BDSM_SMB_SHARE_H_ #define __BDSM_SMB_SHARE_H_ -#include "bdsm/smb_session.h" -#include "bdsm/smb_file.h" +#include "./smb_session.h" +#include "./smb_file.h" /** * @file smb_share.h diff --git a/include/bdsm/smb_stat.h b/include/bdsm/smb_stat.h index 622bcb0..5b4450b 100644 --- a/include/bdsm/smb_stat.h +++ b/include/bdsm/smb_stat.h @@ -36,8 +36,8 @@ #ifndef __BDSM_SMB_STAT_H_ #define __BDSM_SMB_STAT_H_ -#include "bdsm/smb_defs.h" -#include "bdsm/smb_session.h" +#include "./smb_defs.h" +#include "./smb_session.h" /// smb_stat_get() OP: Get file size #define SMB_STAT_SIZE 0 diff --git a/include/bdsm/smb_types.h b/include/bdsm/smb_types.h index 5aae689..c078b36 100644 --- a/include/bdsm/smb_types.h +++ b/include/bdsm/smb_types.h @@ -38,7 +38,7 @@ #include #include -#include +#include "libtasn1.h" /** * @struct smb_tid diff --git a/src/hmac_md5.h b/src/hmac_md5.h index 513ceb8..be087c6 100644 --- a/src/hmac_md5.h +++ b/src/hmac_md5.h @@ -32,7 +32,7 @@ #define _HMAC_MD5_H_ #include -#include +#include "md5.h" // Pay attention that this is not HMAC_MD5 stricto sensus, this is a variation // to respect MS non-standard implementation in NTLMv2 auth. diff --git a/src/netbios_defs.h b/src/netbios_defs.h index 3d9591a..1bfb30e 100644 --- a/src/netbios_defs.h +++ b/src/netbios_defs.h @@ -33,7 +33,7 @@ #include -#include "bdsm/netbios_defs.h" +#include "../include/bdsm/netbios_defs.h" #define NETBIOS_PORT_NAME 137 // UDP #define NETBIOS_PORT_SESSION 139 // TCP diff --git a/src/netbios_ns.c b/src/netbios_ns.c index a7e6d70..6708568 100644 --- a/src/netbios_ns.c +++ b/src/netbios_ns.c @@ -48,7 +48,7 @@ #include #include -#include +#include "../include/bdsm/netbios_ns.h" #include "bdsm_debug.h" #include "netbios_query.h" @@ -732,7 +732,7 @@ static void *netbios_ns_discover_thread(void *opaque) { struct timeval timeout; struct sockaddr_in recv_addr; - int res; + ssize_t res; netbios_ns_name_query name_query; timeout.tv_sec = ns->discover_broadcast_timeout; diff --git a/src/smb_defs.h b/src/smb_defs.h index 75cda98..1bbdffa 100644 --- a/src/smb_defs.h +++ b/src/smb_defs.h @@ -36,7 +36,7 @@ #ifndef _SMB_DEFS_H_ #define _SMB_DEFS_H_ -#include "bdsm/smb_defs.h" +#include "../include/bdsm/smb_defs.h" //-----------------------------------------------------------------------------/ // Our own identity diff --git a/src/smb_dir.h b/src/smb_dir.h index 3c6dbf3..d35087c 100644 --- a/src/smb_dir.h +++ b/src/smb_dir.h @@ -36,6 +36,6 @@ #ifndef _SMB_DIR_H_ #define _SMB_DIR_H_ -#include "bdsm/smb_dir.h" +#include "../include/bdsm/smb_dir.h" #endif diff --git a/src/smb_file.h b/src/smb_file.h index b052fba..b794dfe 100644 --- a/src/smb_file.h +++ b/src/smb_file.h @@ -36,6 +36,6 @@ #ifndef _SMB_FILE_H_ #define _SMB_FILE_H_ -#include "bdsm/smb_file.h" +#include "../include/bdsm/smb_file.h" #endif diff --git a/src/smb_ntlm.c b/src/smb_ntlm.c index 63c8adc..9a0129a 100644 --- a/src/smb_ntlm.c +++ b/src/smb_ntlm.c @@ -44,8 +44,8 @@ #include "compat.h" #endif -#include "mdx/md4.h" -#include "rc4/rc4.h" +#include "md4.h" +#include "rc4.h" #include "bdsm_debug.h" #include "hmac_md5.h" #include "smb_utils.h" diff --git a/src/smb_session.h b/src/smb_session.h index 6d64696..1fd6b55 100644 --- a/src/smb_session.h +++ b/src/smb_session.h @@ -31,7 +31,7 @@ #ifndef _SMB_SESSION_H_ #define _SMB_SESSION_H_ -#include "bdsm/smb_session.h" +#include "../include/bdsm/smb_session.h" /** * @file smb_session.h diff --git a/src/smb_share.h b/src/smb_share.h index 94f1cac..1381d40 100644 --- a/src/smb_share.h +++ b/src/smb_share.h @@ -31,6 +31,6 @@ #ifndef _SMB_SHARE_H_ #define _SMB_SHARE_H_ -#include "bdsm/smb_share.h" +#include "../include/bdsm/smb_share.h" #endif diff --git a/src/smb_spnego.c b/src/smb_spnego.c index 87fedd8..4c27fd8 100644 --- a/src/smb_spnego.c +++ b/src/smb_spnego.c @@ -39,7 +39,7 @@ #include "smb_session_msg.h" #include "smb_message.h" #include "smb_ntlm.h" -#include "spnego/spnego_asn1.h" +#include "spnego_asn1.h" static const char spnego_oid[] = "1.3.6.1.5.5.2"; static const char ntlmssp_oid[] = "1.3.6.1.4.1.311.2.2.10"; diff --git a/src/smb_stat.h b/src/smb_stat.h index ea8d18f..3bac335 100644 --- a/src/smb_stat.h +++ b/src/smb_stat.h @@ -36,6 +36,6 @@ #ifndef _SMB_STAT_H_ #define _SMB_STAT_H_ -#include "bdsm/smb_stat.h" +#include "../include/bdsm/smb_stat.h" #endif diff --git a/src/smb_types.h b/src/smb_types.h index 223151d..99883a7 100644 --- a/src/smb_types.h +++ b/src/smb_types.h @@ -38,10 +38,10 @@ #include #include -#include +#include "libtasn1.h" #include -#include "bdsm/smb_types.h" +#include "../include/bdsm/smb_types.h" #include "smb_buffer.h" #include "smb_packets.h" diff --git a/xcode/dsm.xcodeproj/project.pbxproj b/xcode/dsm.xcodeproj/project.pbxproj new file mode 100644 index 0000000..8064f7a --- /dev/null +++ b/xcode/dsm.xcodeproj/project.pbxproj @@ -0,0 +1,513 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + EF631A111C7475290032F5CC /* hmac_md5.c in Sources */ = {isa = PBXBuildFile; fileRef = EF6319E91C7475290032F5CC /* hmac_md5.c */; }; + EF631A121C7475290032F5CC /* netbios_ns.c in Sources */ = {isa = PBXBuildFile; fileRef = EF6319EC1C7475290032F5CC /* netbios_ns.c */; }; + EF631A131C7475290032F5CC /* netbios_query.c in Sources */ = {isa = PBXBuildFile; fileRef = EF6319ED1C7475290032F5CC /* netbios_query.c */; }; + EF631A141C7475290032F5CC /* netbios_session.c in Sources */ = {isa = PBXBuildFile; fileRef = EF6319EF1C7475290032F5CC /* netbios_session.c */; }; + EF631A151C7475290032F5CC /* netbios_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = EF6319F11C7475290032F5CC /* netbios_utils.c */; }; + EF631A161C7475290032F5CC /* smb_buffer.c in Sources */ = {isa = PBXBuildFile; fileRef = EF6319F31C7475290032F5CC /* smb_buffer.c */; }; + EF631A171C7475290032F5CC /* smb_dir.c in Sources */ = {isa = PBXBuildFile; fileRef = EF6319F61C7475290032F5CC /* smb_dir.c */; }; + EF631A181C7475290032F5CC /* smb_fd.c in Sources */ = {isa = PBXBuildFile; fileRef = EF6319F81C7475290032F5CC /* smb_fd.c */; }; + EF631A191C7475290032F5CC /* smb_file.c in Sources */ = {isa = PBXBuildFile; fileRef = EF6319FA1C7475290032F5CC /* smb_file.c */; }; + EF631A1A1C7475290032F5CC /* smb_message.c in Sources */ = {isa = PBXBuildFile; fileRef = EF6319FC1C7475290032F5CC /* smb_message.c */; }; + EF631A1B1C7475290032F5CC /* smb_ntlm.c in Sources */ = {isa = PBXBuildFile; fileRef = EF6319FE1C7475290032F5CC /* smb_ntlm.c */; }; + EF631A1C1C7475290032F5CC /* smb_session.c in Sources */ = {isa = PBXBuildFile; fileRef = EF631A011C7475290032F5CC /* smb_session.c */; }; + EF631A1D1C7475290032F5CC /* smb_session_msg.c in Sources */ = {isa = PBXBuildFile; fileRef = EF631A031C7475290032F5CC /* smb_session_msg.c */; }; + EF631A1E1C7475290032F5CC /* smb_share.c in Sources */ = {isa = PBXBuildFile; fileRef = EF631A051C7475290032F5CC /* smb_share.c */; }; + EF631A1F1C7475290032F5CC /* smb_spnego.c in Sources */ = {isa = PBXBuildFile; fileRef = EF631A071C7475290032F5CC /* smb_spnego.c */; }; + EF631A201C7475290032F5CC /* smb_stat.c in Sources */ = {isa = PBXBuildFile; fileRef = EF631A091C7475290032F5CC /* smb_stat.c */; }; + EF631A211C7475290032F5CC /* smb_trans2.c in Sources */ = {isa = PBXBuildFile; fileRef = EF631A0B1C7475290032F5CC /* smb_trans2.c */; }; + EF631A221C7475290032F5CC /* smb_transport.c in Sources */ = {isa = PBXBuildFile; fileRef = EF631A0C1C7475290032F5CC /* smb_transport.c */; }; + EF631A231C7475290032F5CC /* smb_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = EF631A0F1C7475290032F5CC /* smb_utils.c */; }; + EF631A291C74BF280032F5CC /* spnego_asn1.c in Sources */ = {isa = PBXBuildFile; fileRef = EF631A251C74BF280032F5CC /* spnego_asn1.c */; }; + EF631A2A1C74BF280032F5CC /* libtasn1.a in Frameworks */ = {isa = PBXBuildFile; fileRef = EF631A271C74BF280032F5CC /* libtasn1.a */; }; + EF631A441C74BF370032F5CC /* md4.c in Sources */ = {isa = PBXBuildFile; fileRef = EF631A321C74BF370032F5CC /* md4.c */; }; + EF631A451C74BF370032F5CC /* md5.c in Sources */ = {isa = PBXBuildFile; fileRef = EF631A341C74BF370032F5CC /* md5.c */; }; + EF631A461C74BF370032F5CC /* rc4.c in Sources */ = {isa = PBXBuildFile; fileRef = EF631A3B1C74BF370032F5CC /* rc4.c */; }; + EF631A611C74C4150032F5CC /* clock_gettime.c in Sources */ = {isa = PBXBuildFile; fileRef = EF631A5D1C74C4150032F5CC /* clock_gettime.c */; }; + EF631A621C74C4150032F5CC /* compat.c in Sources */ = {isa = PBXBuildFile; fileRef = EF631A5E1C74C4150032F5CC /* compat.c */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + EF6319D91C7474D10032F5CC /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = "include/$(PRODUCT_NAME)"; + dstSubfolderSpec = 16; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + EF6319DB1C7474D10032F5CC /* libdsm.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libdsm.a; sourceTree = BUILT_PRODUCTS_DIR; }; + EF6319E81C7475290032F5CC /* bdsm_debug.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bdsm_debug.h; sourceTree = ""; }; + EF6319E91C7475290032F5CC /* hmac_md5.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = hmac_md5.c; sourceTree = ""; }; + EF6319EA1C7475290032F5CC /* hmac_md5.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hmac_md5.h; sourceTree = ""; }; + EF6319EB1C7475290032F5CC /* netbios_defs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = netbios_defs.h; sourceTree = ""; }; + EF6319EC1C7475290032F5CC /* netbios_ns.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = netbios_ns.c; sourceTree = ""; }; + EF6319ED1C7475290032F5CC /* netbios_query.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = netbios_query.c; sourceTree = ""; }; + EF6319EE1C7475290032F5CC /* netbios_query.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = netbios_query.h; sourceTree = ""; }; + EF6319EF1C7475290032F5CC /* netbios_session.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = netbios_session.c; sourceTree = ""; }; + EF6319F01C7475290032F5CC /* netbios_session.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = netbios_session.h; sourceTree = ""; }; + EF6319F11C7475290032F5CC /* netbios_utils.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = netbios_utils.c; sourceTree = ""; }; + EF6319F21C7475290032F5CC /* netbios_utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = netbios_utils.h; sourceTree = ""; }; + EF6319F31C7475290032F5CC /* smb_buffer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = smb_buffer.c; sourceTree = ""; }; + EF6319F41C7475290032F5CC /* smb_buffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = smb_buffer.h; sourceTree = ""; }; + EF6319F51C7475290032F5CC /* smb_defs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = smb_defs.h; sourceTree = ""; }; + EF6319F61C7475290032F5CC /* smb_dir.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = smb_dir.c; sourceTree = ""; }; + EF6319F71C7475290032F5CC /* smb_dir.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = smb_dir.h; sourceTree = ""; }; + EF6319F81C7475290032F5CC /* smb_fd.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = smb_fd.c; sourceTree = ""; }; + EF6319F91C7475290032F5CC /* smb_fd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = smb_fd.h; sourceTree = ""; }; + EF6319FA1C7475290032F5CC /* smb_file.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = smb_file.c; sourceTree = ""; }; + EF6319FB1C7475290032F5CC /* smb_file.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = smb_file.h; sourceTree = ""; }; + EF6319FC1C7475290032F5CC /* smb_message.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = smb_message.c; sourceTree = ""; }; + EF6319FD1C7475290032F5CC /* smb_message.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = smb_message.h; sourceTree = ""; }; + EF6319FE1C7475290032F5CC /* smb_ntlm.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = smb_ntlm.c; sourceTree = ""; }; + EF6319FF1C7475290032F5CC /* smb_ntlm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = smb_ntlm.h; sourceTree = ""; }; + EF631A001C7475290032F5CC /* smb_packets.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = smb_packets.h; sourceTree = ""; }; + EF631A011C7475290032F5CC /* smb_session.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = smb_session.c; sourceTree = ""; }; + EF631A021C7475290032F5CC /* smb_session.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = smb_session.h; sourceTree = ""; }; + EF631A031C7475290032F5CC /* smb_session_msg.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = smb_session_msg.c; sourceTree = ""; }; + EF631A041C7475290032F5CC /* smb_session_msg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = smb_session_msg.h; sourceTree = ""; }; + EF631A051C7475290032F5CC /* smb_share.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = smb_share.c; sourceTree = ""; }; + EF631A061C7475290032F5CC /* smb_share.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = smb_share.h; sourceTree = ""; }; + EF631A071C7475290032F5CC /* smb_spnego.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = smb_spnego.c; sourceTree = ""; }; + EF631A081C7475290032F5CC /* smb_spnego.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = smb_spnego.h; sourceTree = ""; }; + EF631A091C7475290032F5CC /* smb_stat.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = smb_stat.c; sourceTree = ""; }; + EF631A0A1C7475290032F5CC /* smb_stat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = smb_stat.h; sourceTree = ""; }; + EF631A0B1C7475290032F5CC /* smb_trans2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = smb_trans2.c; sourceTree = ""; }; + EF631A0C1C7475290032F5CC /* smb_transport.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = smb_transport.c; sourceTree = ""; }; + EF631A0D1C7475290032F5CC /* smb_transport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = smb_transport.h; sourceTree = ""; }; + EF631A0E1C7475290032F5CC /* smb_types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = smb_types.h; sourceTree = ""; }; + EF631A0F1C7475290032F5CC /* smb_utils.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = smb_utils.c; sourceTree = ""; }; + EF631A101C7475290032F5CC /* smb_utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = smb_utils.h; sourceTree = ""; }; + EF631A251C74BF280032F5CC /* spnego_asn1.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = spnego_asn1.c; sourceTree = ""; }; + EF631A271C74BF280032F5CC /* libtasn1.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libtasn1.a; sourceTree = ""; }; + EF631A281C74BF280032F5CC /* libtasn1.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = libtasn1.h; sourceTree = ""; }; + EF631A321C74BF370032F5CC /* md4.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = md4.c; sourceTree = ""; }; + EF631A331C74BF370032F5CC /* md4.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = md4.h; sourceTree = ""; }; + EF631A341C74BF370032F5CC /* md5.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = md5.c; sourceTree = ""; }; + EF631A351C74BF370032F5CC /* md5.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = md5.h; sourceTree = ""; }; + EF631A3B1C74BF370032F5CC /* rc4.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rc4.c; sourceTree = ""; }; + EF631A3C1C74BF370032F5CC /* rc4.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rc4.h; sourceTree = ""; }; + EF631A431C74BF370032F5CC /* spnego_asn1.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spnego_asn1.h; sourceTree = ""; }; + EF631A471C74C2700032F5CC /* config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = config.h; path = ../config.h; sourceTree = ""; }; + EF631A4C1C74C3480032F5CC /* netbios_defs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = netbios_defs.h; sourceTree = ""; }; + EF631A4D1C74C3480032F5CC /* netbios_ns.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = netbios_ns.h; sourceTree = ""; }; + EF631A4E1C74C3480032F5CC /* smb_defs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = smb_defs.h; sourceTree = ""; }; + EF631A4F1C74C3480032F5CC /* smb_dir.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = smb_dir.h; sourceTree = ""; }; + EF631A501C74C3480032F5CC /* smb_file.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = smb_file.h; sourceTree = ""; }; + EF631A511C74C3480032F5CC /* smb_session.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = smb_session.h; sourceTree = ""; }; + EF631A521C74C3480032F5CC /* smb_share.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = smb_share.h; sourceTree = ""; }; + EF631A531C74C3480032F5CC /* smb_stat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = smb_stat.h; sourceTree = ""; }; + EF631A541C74C3480032F5CC /* smb_types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = smb_types.h; sourceTree = ""; }; + EF631A551C74C3480032F5CC /* bdsm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bdsm.h; sourceTree = ""; }; + EF631A5D1C74C4150032F5CC /* clock_gettime.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = clock_gettime.c; sourceTree = ""; }; + EF631A5E1C74C4150032F5CC /* compat.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = compat.c; sourceTree = ""; }; + EF631A5F1C74C4150032F5CC /* compat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = compat.h; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + EF6319D81C7474D10032F5CC /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + EF631A2A1C74BF280032F5CC /* libtasn1.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + EF6319D21C7474D10032F5CC = { + isa = PBXGroup; + children = ( + EF631A471C74C2700032F5CC /* config.h */, + EF631A561C74C4150032F5CC /* compat */, + EF631A4A1C74C3480032F5CC /* include */, + EF631A2B1C74BF370032F5CC /* contrib */, + EF631A241C74BF280032F5CC /* extra */, + EF631A261C74BF280032F5CC /* libtasn1 */, + EF6319E71C7475290032F5CC /* src */, + EF6319DC1C7474D10032F5CC /* Products */, + ); + sourceTree = ""; + }; + EF6319DC1C7474D10032F5CC /* Products */ = { + isa = PBXGroup; + children = ( + EF6319DB1C7474D10032F5CC /* libdsm.a */, + ); + name = Products; + sourceTree = ""; + }; + EF6319E71C7475290032F5CC /* src */ = { + isa = PBXGroup; + children = ( + EF6319E81C7475290032F5CC /* bdsm_debug.h */, + EF6319E91C7475290032F5CC /* hmac_md5.c */, + EF6319EA1C7475290032F5CC /* hmac_md5.h */, + EF6319EB1C7475290032F5CC /* netbios_defs.h */, + EF6319EC1C7475290032F5CC /* netbios_ns.c */, + EF6319ED1C7475290032F5CC /* netbios_query.c */, + EF6319EE1C7475290032F5CC /* netbios_query.h */, + EF6319EF1C7475290032F5CC /* netbios_session.c */, + EF6319F01C7475290032F5CC /* netbios_session.h */, + EF6319F11C7475290032F5CC /* netbios_utils.c */, + EF6319F21C7475290032F5CC /* netbios_utils.h */, + EF6319F31C7475290032F5CC /* smb_buffer.c */, + EF6319F41C7475290032F5CC /* smb_buffer.h */, + EF6319F51C7475290032F5CC /* smb_defs.h */, + EF6319F61C7475290032F5CC /* smb_dir.c */, + EF6319F71C7475290032F5CC /* smb_dir.h */, + EF6319F81C7475290032F5CC /* smb_fd.c */, + EF6319F91C7475290032F5CC /* smb_fd.h */, + EF6319FA1C7475290032F5CC /* smb_file.c */, + EF6319FB1C7475290032F5CC /* smb_file.h */, + EF6319FC1C7475290032F5CC /* smb_message.c */, + EF6319FD1C7475290032F5CC /* smb_message.h */, + EF6319FE1C7475290032F5CC /* smb_ntlm.c */, + EF6319FF1C7475290032F5CC /* smb_ntlm.h */, + EF631A001C7475290032F5CC /* smb_packets.h */, + EF631A011C7475290032F5CC /* smb_session.c */, + EF631A021C7475290032F5CC /* smb_session.h */, + EF631A031C7475290032F5CC /* smb_session_msg.c */, + EF631A041C7475290032F5CC /* smb_session_msg.h */, + EF631A051C7475290032F5CC /* smb_share.c */, + EF631A061C7475290032F5CC /* smb_share.h */, + EF631A071C7475290032F5CC /* smb_spnego.c */, + EF631A081C7475290032F5CC /* smb_spnego.h */, + EF631A091C7475290032F5CC /* smb_stat.c */, + EF631A0A1C7475290032F5CC /* smb_stat.h */, + EF631A0B1C7475290032F5CC /* smb_trans2.c */, + EF631A0C1C7475290032F5CC /* smb_transport.c */, + EF631A0D1C7475290032F5CC /* smb_transport.h */, + EF631A0E1C7475290032F5CC /* smb_types.h */, + EF631A0F1C7475290032F5CC /* smb_utils.c */, + EF631A101C7475290032F5CC /* smb_utils.h */, + ); + name = src; + path = ../src; + sourceTree = ""; + }; + EF631A241C74BF280032F5CC /* extra */ = { + isa = PBXGroup; + children = ( + EF631A251C74BF280032F5CC /* spnego_asn1.c */, + ); + path = extra; + sourceTree = ""; + }; + EF631A261C74BF280032F5CC /* libtasn1 */ = { + isa = PBXGroup; + children = ( + EF631A271C74BF280032F5CC /* libtasn1.a */, + EF631A281C74BF280032F5CC /* libtasn1.h */, + ); + path = libtasn1; + sourceTree = ""; + }; + EF631A2B1C74BF370032F5CC /* contrib */ = { + isa = PBXGroup; + children = ( + EF631A2C1C74BF370032F5CC /* mdx */, + EF631A361C74BF370032F5CC /* rc4 */, + EF631A3D1C74BF370032F5CC /* spnego */, + ); + name = contrib; + path = ../contrib; + sourceTree = ""; + }; + EF631A2C1C74BF370032F5CC /* mdx */ = { + isa = PBXGroup; + children = ( + EF631A321C74BF370032F5CC /* md4.c */, + EF631A331C74BF370032F5CC /* md4.h */, + EF631A341C74BF370032F5CC /* md5.c */, + EF631A351C74BF370032F5CC /* md5.h */, + ); + path = mdx; + sourceTree = ""; + }; + EF631A361C74BF370032F5CC /* rc4 */ = { + isa = PBXGroup; + children = ( + EF631A3B1C74BF370032F5CC /* rc4.c */, + EF631A3C1C74BF370032F5CC /* rc4.h */, + ); + path = rc4; + sourceTree = ""; + }; + EF631A3D1C74BF370032F5CC /* spnego */ = { + isa = PBXGroup; + children = ( + EF631A431C74BF370032F5CC /* spnego_asn1.h */, + ); + path = spnego; + sourceTree = ""; + }; + EF631A4A1C74C3480032F5CC /* include */ = { + isa = PBXGroup; + children = ( + EF631A4B1C74C3480032F5CC /* bdsm */, + EF631A551C74C3480032F5CC /* bdsm.h */, + ); + name = include; + path = ../include; + sourceTree = ""; + }; + EF631A4B1C74C3480032F5CC /* bdsm */ = { + isa = PBXGroup; + children = ( + EF631A4C1C74C3480032F5CC /* netbios_defs.h */, + EF631A4D1C74C3480032F5CC /* netbios_ns.h */, + EF631A4E1C74C3480032F5CC /* smb_defs.h */, + EF631A4F1C74C3480032F5CC /* smb_dir.h */, + EF631A501C74C3480032F5CC /* smb_file.h */, + EF631A511C74C3480032F5CC /* smb_session.h */, + EF631A521C74C3480032F5CC /* smb_share.h */, + EF631A531C74C3480032F5CC /* smb_stat.h */, + EF631A541C74C3480032F5CC /* smb_types.h */, + ); + path = bdsm; + sourceTree = ""; + }; + EF631A561C74C4150032F5CC /* compat */ = { + isa = PBXGroup; + children = ( + EF631A5D1C74C4150032F5CC /* clock_gettime.c */, + EF631A5E1C74C4150032F5CC /* compat.c */, + EF631A5F1C74C4150032F5CC /* compat.h */, + ); + name = compat; + path = ../compat; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + EF6319DA1C7474D10032F5CC /* dsm */ = { + isa = PBXNativeTarget; + buildConfigurationList = EF6319E41C7474D10032F5CC /* Build configuration list for PBXNativeTarget "dsm" */; + buildPhases = ( + EF6319D71C7474D10032F5CC /* Sources */, + EF6319D81C7474D10032F5CC /* Frameworks */, + EF6319D91C7474D10032F5CC /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = dsm; + productName = libdsm; + productReference = EF6319DB1C7474D10032F5CC /* libdsm.a */; + productType = "com.apple.product-type.library.static"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + EF6319D31C7474D10032F5CC /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0720; + ORGANIZATIONNAME = myorg; + TargetAttributes = { + EF6319DA1C7474D10032F5CC = { + CreatedOnToolsVersion = 7.2; + }; + }; + }; + buildConfigurationList = EF6319D61C7474D10032F5CC /* Build configuration list for PBXProject "dsm" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = EF6319D21C7474D10032F5CC; + productRefGroup = EF6319DC1C7474D10032F5CC /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + EF6319DA1C7474D10032F5CC /* dsm */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXSourcesBuildPhase section */ + EF6319D71C7474D10032F5CC /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + EF631A461C74BF370032F5CC /* rc4.c in Sources */, + EF631A451C74BF370032F5CC /* md5.c in Sources */, + EF631A611C74C4150032F5CC /* clock_gettime.c in Sources */, + EF631A111C7475290032F5CC /* hmac_md5.c in Sources */, + EF631A141C7475290032F5CC /* netbios_session.c in Sources */, + EF631A221C7475290032F5CC /* smb_transport.c in Sources */, + EF631A121C7475290032F5CC /* netbios_ns.c in Sources */, + EF631A1C1C7475290032F5CC /* smb_session.c in Sources */, + EF631A151C7475290032F5CC /* netbios_utils.c in Sources */, + EF631A1B1C7475290032F5CC /* smb_ntlm.c in Sources */, + EF631A621C74C4150032F5CC /* compat.c in Sources */, + EF631A181C7475290032F5CC /* smb_fd.c in Sources */, + EF631A291C74BF280032F5CC /* spnego_asn1.c in Sources */, + EF631A1F1C7475290032F5CC /* smb_spnego.c in Sources */, + EF631A201C7475290032F5CC /* smb_stat.c in Sources */, + EF631A191C7475290032F5CC /* smb_file.c in Sources */, + EF631A1E1C7475290032F5CC /* smb_share.c in Sources */, + EF631A1A1C7475290032F5CC /* smb_message.c in Sources */, + EF631A171C7475290032F5CC /* smb_dir.c in Sources */, + EF631A441C74BF370032F5CC /* md4.c in Sources */, + EF631A1D1C7475290032F5CC /* smb_session_msg.c in Sources */, + EF631A211C7475290032F5CC /* smb_trans2.c in Sources */, + EF631A161C7475290032F5CC /* smb_buffer.c in Sources */, + EF631A131C7475290032F5CC /* netbios_query.c in Sources */, + EF631A231C7475290032F5CC /* smb_utils.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + EF6319E21C7474D10032F5CC /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.2; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + }; + name = Debug; + }; + EF6319E31C7474D10032F5CC /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.2; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + EF6319E51C7474D10032F5CC /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/libtasn1", + ); + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = dsm; + SKIP_INSTALL = YES; + }; + name = Debug; + }; + EF6319E61C7474D10032F5CC /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/libtasn1", + ); + OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = dsm; + SKIP_INSTALL = YES; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + EF6319D61C7474D10032F5CC /* Build configuration list for PBXProject "dsm" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + EF6319E21C7474D10032F5CC /* Debug */, + EF6319E31C7474D10032F5CC /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + EF6319E41C7474D10032F5CC /* Build configuration list for PBXNativeTarget "dsm" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + EF6319E51C7474D10032F5CC /* Debug */, + EF6319E61C7474D10032F5CC /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = EF6319D31C7474D10032F5CC /* Project object */; +} diff --git a/xcode/dsm.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/xcode/dsm.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..ca09337 --- /dev/null +++ b/xcode/dsm.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/xcode/dsm.xcodeproj/project.xcworkspace/xcuserdata/ameleshko.xcuserdatad/UserInterfaceState.xcuserstate b/xcode/dsm.xcodeproj/project.xcworkspace/xcuserdata/ameleshko.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..971c1c32a53f1cfa6a8c354f96c8f0f51669b62e GIT binary patch literal 22399 zcmc(H31Ab&_y5eEy}KA7vzC_Pz1Vz9-uEM2ZO*cFbY(H zD&PdQpaDz-Q^7RAftlbj@Hkiqo&ZmRXTfvedGI1w4qgJQ!Fuo-*a}_;+rS%O2iODl zf_>lscpn@E$G~xL27CrS2WP<-;5_&bxB`9#SHU%CVtLkI(55DbPPFce0^&aexV zK{-r>Nl*#XVFuJf9n?buG(r;`2bR0D~BY;TVCD7==Y*ov@92;wi|mJ`v5zP zeTW^w&S0NmpJQjSOW1eVuh?(c4eTaP;WQqA2jbCqXS@p@gD2xDxDxM*=ipjghwJeo zycoCQC3t^)0A7X<#2>`%_$a&{ci|2AINXhU@J4(xJ_VnOFT|g~pTrm8i}5A+Q~1;P zQv4bGS^PQtd3+hZ8h;sIgRjN6;BVq@;k)qN_}ln9_#XTN{4o9@egr>_e~O>MKf^EJ z-{2SV@A1n7ARvJeI6)93K@mYjC=o`46P*Y(p(FG}E|EucBMJyBQ9|?}?k7eN4-g}X z3gSV+PK+WdiAls{VhS;pm_|$|W)LjF5i^OU#52UR#B;>+#4_Rq;zeRPv4U7lyi9B) zHWAy29mG!JP2z3h7;&69L7XH`5g!wu5T}Vxi3`Lx#6{v~;wo{2_>%-AK?ab4WDprf zhLfGhE@V6@A?0KunMr1m*`$h8lV;LFb|VYOLb8G&@&VF8jwY+gvE(>% zJUN}5L9*n0@*#2o`6T%~*-XAnt|vE>uaR5H?c^?U5BV;6i2R5=Nq$bAB`=WQkXOlT zhzc0;oVLhzh1cs8FgC6-C8S@l-aYqSTaz%AvHBj?z;_R54|xN~oSxU#cH9 zh#EnSqG~9X;;5O_ENV72hnh>xqvlf&Q46R?sVAwW)brGGYAv;nT2F1Dwoz|T+o@gD zJJfsBhtw(RW9n1t3+hYi9Cd;Ep8AQpM%||Vqyy9D#go9Z0(jTKC?&1fxD8w~nPQ?WKDQ>!xRGK(~toJ^Chuuy9%(OC_8 zn{VXKAOR>>gDxNj#DX{w41bfegq&B1i%XkPK4T5H^&($^Op4 zU=C(;P{m3SB}HzBeQblvS>Na>tZa0Sw>LVfDwsH{W3;`gwy~tj+30eYHKMB?o6B83 zpqFQa(9BU*S>vd4AOP{}fTnt@!_(-jw>KgaT*0V%**%TLuDXU=2LkNJTV_uqnxxpR z$nJ4e2_2n{lLj~%Ty8Y`a33QEJL{`l6Fe16%m7Cv>LU{2yUWuM=wpHkXo0c?sDTFL zuwiUC%d`L;&;tV-!6vYy_!-6`UiWWuR*voEa*Y+Cvc!)H#xSJPRprPMe&+OZyZCLR ztf_&g$J@p?s(+gbMk)40*gc(hwJmcsxhoyT2--)d8FT~66~Mwqt^fsWG%Gz0ijnkK zK?$&dQeJ*WA(jkBpKeDjV&QlP3)m>OQw7s|w6oTco1L9q?mgD392y|3|#?+ zuraLU1Q-rRfCtcoM}i7a3hWh3=k}}8&tC25(^NOg;U3!PtV3dCuWJ}yb^n zr_k-TPih8ZKp*jH9Y8|fsZUw&rbhdyT8Gt%bjMY1cTZ{ob-)GsjObI=cFo7cai9?> zn}Hj6SQ(qx44S}rR>79|OT!dl<>eJj&wE*UuKyAS1`TqMb`g9nX-91)OhOt15Lh3od6&6LU0nCV!N>g z&EOMonk{6DSm_{fRR@XUQ^7?0uen#m2Z;lT4Eqv%Rl!Kbc3vUB(=fGwbKq;|hl1QE*4hgmo z+qW4~kY@X_{r_vqBc7p}55Ej8=XoV%v z21{Xg*aO}Vd%|9@H|zuZ!hWzn901GUK(>-~u+^-S9n03SE_NL2VVl?q>?C#yJB^*e za_lU24m*#1h<%uSlzp6if?dQe;fERo2g4z7C>#cd!x8WSI1*OC2caE~f|aleI^bwn z4Qrqij)7xgEv$p}(8WH@zR0$)tJ$^e26hv>g?*jf&c4O&X7{r1vWM6Y*<JA&{E4403{iWJLrnY&AKi~Xj|xK|SMy)3ue(y)@%la~z&G3@ zyvJRc?cAmpMQ&+ zEy#UG%y~%|W8yu!CO*~mG}Jq)T^+CPI$?y#_sAW7b$R0J8*A(QRco_=JGFx8`>(m< z6Q3%_=sT2at1!s)3Z~><2Jx|nmwfc!pZ*;JG+V(G-wU*lFO8EL9Cy&XTL7NA`y(G0kQe+5WI;&-|audJx6 z()sh^oPfKqg0bDpDz>-icdO(#0``;lXtC~+5KoQWeTO~&UKn9<1(Sa-)FY)I?Yu)a zt_X-v-J?|d9RR(-HJ;z1FMbW)Kqn>m3%m}0g}<>&*=N{i+2>ZmoA4IA4R5i}v&+~Q z(0_DNis|Qe)}iQ-?<6 z&ij+efhR{yQLEJmM6J~trwyH=Hkh(^>TJ@ zVerk?rP3Jm!crOa?U!mS*3co~ILs}OwT*qFjjX+v@1^HNrs(y$R;EnCrgw-j17i_U zGua*NPK5EMm#ATqxXHt(n0Sd%=j3Pvnlyei&Bq??5brTBlXv+sx#ym;r+rLbf<4<| z&*!k`5hX9MZ?o?pO7?gusXjleWcU=dPK`!4nzTG6CY_-@cUEF+I>cLxtrNJjkKNzK zojsQ~zV;LnWWAbSv>bgaf3{%TIz)K`+m5K($sS-2B9!+;s`hY`ckSXAP0!1oM$a#r zMrA~T&?W`%VDEMacmO+y01vV6vmYS9!y@3`&-?#iLVy~rpkQhpKTo69Phmg8PId@* z3i}uVo@S4*A0fb_UcmRxZK?IDhRQH)@DyH3+lc!DJKrJJf4r-Ay#4C!Gse#8>RY|< zu`3<+{29B7sQ86F$(}+~eC%Dl=^yP~E(o`d7bI1VFfHCFwUKfQ2OR<85XazcoM2D0 zpCZ6B-f7+UX5=s=m>Pcha&iPbgQh*3@E|^4|@SYe&d}p{ZVz7;Zt;4L1c|;o`(i4VrUzQ20Xt* zJTq=Vcm?dY>?MTvofq%fRDCyIx%nw;)hZDWeQ8w&+=ln;5U&^B8{ze3e_($^ct3f0 zxGMWXh;L1_dJ&J;uQvM1@nId}4aY|aDtd+e8R4OASJ)gTj#;%>6kVhaJ_W@q@fw7I zSK$tPG+xbKV}D_u$U#Wz0i_9m&)-{U&?@h+Kh>XK$^* zC$hIupb_Q2`k*{s8H(l9S9@d0UJb*i;d4Rc%lLGB2F~IfJ`1KrDY^ZV7J3P+1CX`KexlLJ`3dT}3zOhOm zF7uAtxdxNbnxiVxWf~1eYo^v<)MpwC^(C3MLaj<|vKmSZIYome8ub-=?I34A9(t(w zVa(9@IQ;_3@he;K7xCrz3J!*FFqDH~EqDvQ5^6XY&cQ4`#)&fHXu14T-`+Gi3ZIlU z)$v}UxRPa#YQ8K0F)-$?E`1yLbR)XO=TZI9209yS#oQ6T4y;>+ug5pw8}Uu}W)3nO z?83o#4x*J!ZVh4Mui|L8YQbN_x8kpJFoJ`T9PHGBzkzSZcW^L@gV7x9%#*IXYcM}b zkx%M!qlA71lm7P&i|mzS%Nz~J!9{CR!KD6uYp-0}YnvR3f&d}JjjFNaDHxFRv0xwn z_u>aSn#DolSgp-8w?Q6M6K{_^soCTDGxum4B*iH`c8#82TLb5O!TDF+ky z{)`APAXk2eu6>Sw)e*uu{A>I?2jv`0XP)gs+NipA#GSr2QeE7Es z)pno~l@JymTGmuq>2Opzs*XoQ26gHj%TshmVM}vVG)u5#bC(!YY7)o>59(89Lt$jp z66H5t?i11kS&%$2NrA4HIVU^NsH1JQD4C1C^F~ThpcE$`5z6qDDiw@8tGlCiyra=s zY477`a-b@bu|4Y1xo0#gjma!>)m9x-cD*mPqk0AJ(9QRywUsMmWCmqrs}MDVd82~n zC{R__fWV4WfWg@y1gFXIk=v|EL*I3JzjS@Gj=yL$Av@BJM^z&Cnsd`SypHNu`jnw8 zFRE+t79AcnTL!vau0|Gu01$ynbQGw>Py-C8=A$R7rWlTj3SD3v@Srk)87N==7o3Ka`p02fhdAOquJGAahlLS=v!l*%YWnTH`L z>rjF63uB-QPDSN_vr+Ni^Qhc!FDmeRU*tCi#ZOd-;`aw0=Ac5zJmNp#KR(c!akU~r zY(bZP0(}sl`ENc&xq_pV*-OY=T*a^9ujAM8Uj?I)!a*gn8yxJ)!TVmqZ{RoaTlj7C z^CkyVIhe-5bPi?;zohZTB4 ze!ZDXLb{A#z`7Nv9t>wq;`b=9ZW9v^y8#RAOT-YdL>v*1vQai70cEDlz$4_S`lGB> zZa$*n&BYL3{LgXwIbC{IF5|9T8^U+2T!t1XEX9VQD&jmsLRw^3(;>jwINfj(-#>_a%{T7BJD`NyHMz7bEAC$ zRhFO&ece?Kx1*|KSmf#LK-8O7_y>ncXqpc7HRoI~Bf^+2P7*Q+^6mbT+T(zU@ z?j9a*{7v+_y!Y&*irU@s8bYFqs0Ye5go7AOR1-CXlNdvcC2EN}4q7=_!a*AcOF7t` zgFQHSKL>kqu-6*Gg*ZBra1$P)5y*(~!~_oZMhuPP;A#$T;85@_gu~)FOu|Ze$6l$+Ee(hx+CCgu=xiFw3);vr%I@i6fS2m5faF9-W^us;Wpkd|?9AP37iIA{&LO+3!?5OHx4 zv6xswJjI_-2J<}Rxj2o3PjK)_4nE5ZDZ^7_XL4!1Zh-eVTI%AX`E$`JFa?CvU_ z*?ePfX$liHNPL<={9e{Hst&at)~+Md3H9)n$qFNg@N(~^wvty=-|BXFkS8w|NAlHL zUV>WrKMa+8p=BHBb~t>()l94e$`wQl2ZyX6R&j7BKb;hDeD5Ov)et_2HN-j|Vl4-U ztsvHOa5yU+*xT-`_ub!2yapm$h*yX$#H$<}!NCVOII@Mx7m`)CY8juc+glS7a}I0sIc`#ry7+ zOhlE=d^Wtz77h2^L)EOvQ*3A&RqL$Gs?4l$*pbEa&H4=SC5XH`I7EC!oa3Vs92~>J zu|ixzCwL)=_rG7(7O_4_d`nzHzRGvR_rwpxkHk;JWiS${fNyBu$$MlQS-f5fE$Wb1 zv|Z-yVttikV&BoezHRq7h%8n;2a%^y$HrAK*+LOl7SaVjmRMapWLB%)Mb2}RaKsmv z{2CbALi|EpCy?*x;-H&@O=$6no5U?Nfy4Ms;*Vi%LzWA~2+N7Q$Z^9^Rz|36&Z-go zFA|cNSl`>WmZGmN^y_DLx|>PdR|EW)ZM>tCBuNo}aL~iSMl{$E-(U>sYk;bl`3B>8 z{TL^nK>5<<5pX^k0ZLdTdJ|c(_>qhvqdP9bYbHDM1pQ^zF&RU~qWZc!x!Oj&zpyrw zaXj2VZvT(#*M-$0rAR@^1P)GRB`BIRMNB4T$fp=JC~#=fsHXYiYGe}G6~)y^1({5y zkmxutor5zt$a0WdN!~}M;x|cj2$;#idBQp1Ayzu1mt(Y0wK{Zwv${t3ZJ21@1nbO1 z^Jdvs+1hGmy$VBWNCQ7y4yh$|q@IJbI5?Ywb2vD6CA^Kch^K)JsY@IxdlOui_(68J zlUH@L$vYf#_ z0iCxuK3a=NE3(F9F$d?b03#7m$eu?a@5SS)bs+nMPQ3h#eXV4mpq<+`cZ596}D|;3FJ-l-0GeSWz%#xp4OL4Kk9n`*j*c zBHQ{n2N$9kU+Z!x3MPE%*QmWu)MzmW zpKhad0y)`l*eT>x4ld!~Q)pPU+@gI}6gVIB8C$VWji`4}i67m`n)!#jT{7iEm!aQg_M#4gp2dS{cj9+&qiQ5}YO zC#FG6-HK$jyT!p47I5%64!(4XTtqHLV=N(`BA-U%JVriCkmPfqatMlT)>gS4^@C8f z3%LNpD|zVpM)7njukt?Q@K<_09L3Xojsrhd3kQ)a@O(Q05G_3in>o15XP8B4 zX+dU|TuH7XU*g~k9DI?3sFvK%%(hxppLO#$f4-})h&FG<-`YGsE|5DAAD%^lx)Okd zY9&woD&8!j+HG<-Z%-B?*0B=Ng6}2wiHGyn{ld@R^k1xIazAhE__O>!X)ca%fIL{i zDE>j0X7W8A{hu`T$^ZN0;Z|M!kb^J#i%c7Zq|R@q{!Y_Sz|-zH)Olb{C`;Gh)MUu!HVq% z?pQ%ZaB!#3eu?`~p{IT0XsQbmEvhpI-&{eV81`GNv|Y@bl29o?`7$M?5-1rZrxK|o zNT5 zhfw{gvNn)`96a0xGMF0L#?oON{IGQ+qaL6t&@G;Uo)y%C96Zu?tCDh{TLcQ0Hmsm{ z#KqZ~ZO!Q&h}!NHRpJjKC}Irs?&Pjm3o zwNw)rNll<8Qj@63=;u@*qo#B43~ysU=ipBqyv)I$g)Dr3`>gm?Rj9*5EgJ(JTBL}}c zhFU&DJxe_|6a}C?LXMY%UyMk~%F0HnDAd-A6fL7(5RwqyM-s&&Pz$w;dQo_uQ~d5z zr4`gFboQs3sTOJ_2fyOrISzi^LcK(-re5aYc@BQd!S7g|FHeFFiG9lYp@dzv+uk6q zyf^!D5|Ou&+C*)pUZJ*7uTrm3TdCL4gRDZ{g+Da=0yZ&8Nc2jM|f7NYERz4-7oO5gNy);omfp?OJS z0Yh-`5`&4rhp6`}m@cjB?azxA>I3R9zv_S0pacG$ppH-I#J{=Pw-mwbkvSexZItz7(~R zYC)oo1iqPinL@zdaqv3Y9jHBsioHlm4p8s%&gvzvrqF;UI?xoFq;B$>@*C6ziem6i_;)rMpx^}>Ou<0ka8Y#U)}4#)!olBLcP=`PMn#tV z!RxQxvR2Q{2PdObQG}J2(}{Evt)P?X6k17lrSIb~z+sTXFb=~xjNmYm!zd1;IV=E0 zSm|^+gU&>s*|ZA%)F6Kg3*@jM4&%!~uuu*Q<3GcBQuyM861Uss{vSP}2-LE5r$Vjy zJ%PX0>YWM2t-K>89G;6Ni3VQ?0eDa2qS@w8@M70iIKC;m#y{*Y`e}DkgCw^7@V86|fdXA?ja9Avd#rXzq4gQPW8w!N(=pl~()$0rH%9VLb#oI;x&{9vCqTy>d zQME4b1EQ)pR0(J@YJAH#gO4ir;uBUVXmwX^o}Nw5DHpbSAw3@pl0Z6ob3`uahTg(5 z59Jk}M{ix(NW4mHCAOhAuIwV-L80hRk+z1BQc{NAqoP0ouC8P%nNH@C`RGk51!NIf zg5IOjlk81aksJyEtRg=lFHs~#p?9CeAy+*CdFWk{^PNs*qPL**L~l0Ph<37F)Z5fv zYCkeNC#cVm8N7tvTk<1%8%ZfWfF4fU(K|?7=)EH|Xbw?4m!40rq&Lu;=`HkY^nUs* zeUZLKU#EYgZ_>8|$N)Nk3CIr62b2el4QLFQ8o&iC2v{DlI^eZ{cLLrGI2dp!;7GvH zfa3ut1I`7U54aF;F;E{^99R-q8rUOnao~!;wSnscHwJDF+!DAm@U6hzf$s$F4cs62 zXHZ(u(4hH2OM;#adOqldpq8LjL92t-1RV^z6m&J{TF~{No56H2sxb);4~_`#6x=mf z6|4(31e=2Mg1ZOz4(=P=KX_2^klDqU&|{ z^&uNWwuZbJaw6nR$oWtrG&nRpv@mpN=;%;a=(tc%XjABfP&RaC=_8Js8#)HZ5#s*zB;mVe`Y5ggqPfeAo+NEn%y|R)?(#+ZJ{x z?8mTQ!-?>~@Zj*!@W}9}@Xp~e;j!UK;o0HZaDBKj+#KF5yfC~td{p@C@cH3Sgf9+% zDtu}9n(%eu8^Sk*zY@M9{6P2z;U9*76n--NB znXybA<6_1!9;S(zz)WJMFw>YB49Co3<}mY^hnR<%N14Z&CzwUd66OQuL*^sq7;}O- z#eBki%6!J0Wxiz2G3S{J%thuB^F8w;bD8;>xyD>)eq(Mjx0yd8Km-;M9uX1IDIz+; z9#J3B5aEt!jMx)#B;shq@raX=lE~D^^vKM}?8q6Bk3>EexiIp{$a9fDMP7-#8u?47 z!cKiU_3JdC)4)#4J8kH+snaW+UX6lLVNpy}WK>kt(5TT-HBn=tYNOtYIu!Lm)Q3?Y zMa!ZyqO+n^(VFN9(X*rHM$eC45dB&7x6$84{}BCCXG3ReXItm)o$v3wu=BFcFLqwh zxux^fE}#q6h3GD^^mml0h?c6qSNhAun0yxC<}m$zf+n5dY}F)=Z5G4`1Hn1&d4 zOk>Q>n1eBgVm^rZFt$^yJT@sdIaV3#ik%ueJ(i7~8GAJLZ0wh@=VH&tDdJRdnmBEo zK5kar!nkMRo{L)+_hQ_NxV3TX<2J@^j@uIVTHKMi>+wW;c(mS&eLrtX5Vp zYmiNn&5}JVTPj;2Ymu#zt(L8kZIQhudtLU1Y=`Vk*?!qE*%{gAvM*#`$-b6-FZ)q; zS@yH+n(VslPkD&Evs@w1kY~wNa*bRoH_N-p3+2V~5_ze-pL~RTwA>?~DxWTAt2Bwr$bTE1MqLB37CPkvZ_M1E9$Tz*o1R{o{@ocz4}g8ZWViu}*Spu{eT zr~)oAIZ>H-U!poOCsCJZNHitpC0Y~vB@RohPHaeYCpIRIPn?*@CC*BmlQ=K&p~Qz1 z7bh-HT${Kp@$JMtiTe`YO+1)*H1T-i$;6KnPbZ#9JfCjnN6OT{6z8#$*YoIPF|P1F?nn98_7G9-%8${{BufZ ziZUfTB{#*KQjk)dVoT|f(lcd9N=3@36h}%;iYvvP(v&hWWpYYO%F&eHm6S468KF#2 zrYP@IrYp0QI;ByWr?e;wls%L^mHm|?l@4W%a;&mm*`%DPoT8krWR(voA5kt+E?2Hr zu2pVOZdPtn?ohs^d|SCk`M&a)@{IE9)B&mGsUuTsQ$4AZQ|F~FPJKG{+0o zF5|ulCn zSzl*e$oe+xyQ~}8A=xR}<=HjaPiL>q-k!Zb`&jmWvM*+Tm;Gb*mF#QTzh>Xe{#^xB zomA1P7*(7~qDoLDs*+V*RcWdWRX5cT)o9f;)qK?ps&`Z;RbQ%pP+eACRb5xzP~B21 z)GBq3TCX;#^VJr0vAUmnuzHyK0ri9GYV{a(t=gp?r(UMssy?hfr9Q3xOnp}Uo%*Kw zcMZ_s8cGwW3DJaW5;TdLWKCC1nkG}D(r7eVO`)c@rbaVWvsClCW{>8C<}1x5&G(ug zHJ3F%Yi?=&$bmU{4w*yeFgbBK**Qfy{d1~v*qm88b8{Zbc_intoVRn{%lRnhc+RPu z(>Z5yF6La#xsh`_=T9xB4b^tm>a@Aqq1w?}r?yt>(oWP)*3Q!|&_1GlT)RlST-&T& zrCqJvtbJGezV<8aC0(>GPFJF<*Gwcp zef<~u@AW_FujsGof7RbGUHXJb=HJmb> zHhg9{Yq)5*V)(;|8%ZN=3^9fqBaKl;r7_!BU@SMfj0=p98Xq@4XJH3&zW8`Z8L2*y=mHII$%0vI&3;(`Xm?2rE}G}xw#MKI&vS*U7Gt` z?y}tFxh=V?ayRC_n)`b0_S~Jh2XhbS9?3nLdn)&n+%vhK=U&LYn)_Ss&D`60Fb~h8 z@&fWA@)Gj8=B4Fj=Be^>^78Y#`ujk*$ zzn%Z58JbCRq*-BBnp4dg=4`XZtTP+UdFEc`zUBeua`O=LaPvsB-CSiJZLT)gn;Xqj z&8&I8`3dt2=GEr4<_+e}=2y*cns=M`nD?6xnh%+enopWfn=hEZHGgmZ$^5hVngv=g z3vMAT36^wAmPKvRS_~GG#b)VY>1F9_8DJS`v0JJv)s``qI*ZFP)iT2}(=x|0-?G5+ zv}L_zlVyu#tK|*LPRlOKJC=Qx1C~RUFD&OQ=Pln@E?IuCT((@bT(|sYxn=piTXMJi zyN&Pmc(?7{E_VB~KvrNZa2B`=W)#dUc(~xjf|m+*6znfJR&b`^V!?L>KNegmxLHUP z(uGll(!%UQePOr4UWH|ag9?WhqL%{}jxKZ-))v+mjxT(uaAD!9!dD7+6@E~7qVVIw zPYXXQ{G#w&;kSjiivo)xilT}-7sVDO6{Qtr7ZnusEE-(oEE-!>SJY7CE}Bxbr0Dsg z*NfgO`n2e)qDw_rif$JDUJQ!y;?!bIv8mWnTv}XNJf?VV@pHw?ieD;TQ@o}4t>Qh! zhl|e^UoO5{e7*Qa@og(<4X{eADb_S=rd4ItSi4!R)>7;J*1pyO)^h7$Yn64h)oC4X zon~dNv#fKik6IU67g?XOF12p3ZnnN^ecig9~LCK>f zkC&`1*S_J!>$+a=o-+cn#-wwt!wrGcekrA%pLX_wNtQfaBIR8yK) z+P$=QY2VWRrGrX`mX0VLSz24#R64VCUg<-n50@@1T~zv1>C)15rLUFV?oM}CbkFFX e-CfgN+uhc^XZQZXc^zPw_({(dKYc&Dm;E33j=`t^ literal 0 HcmV?d00001 diff --git a/xcode/dsm.xcodeproj/xcuserdata/ameleshko.xcuserdatad/xcschemes/libdsm.xcscheme b/xcode/dsm.xcodeproj/xcuserdata/ameleshko.xcuserdatad/xcschemes/libdsm.xcscheme new file mode 100644 index 0000000..16c188b --- /dev/null +++ b/xcode/dsm.xcodeproj/xcuserdata/ameleshko.xcuserdatad/xcschemes/libdsm.xcscheme @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xcode/dsm.xcodeproj/xcuserdata/ameleshko.xcuserdatad/xcschemes/xcschememanagement.plist b/xcode/dsm.xcodeproj/xcuserdata/ameleshko.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..496e24d --- /dev/null +++ b/xcode/dsm.xcodeproj/xcuserdata/ameleshko.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,22 @@ + + + + + SchemeUserState + + libdsm.xcscheme + + orderHint + 0 + + + SuppressBuildableAutocreation + + EF6319DA1C7474D10032F5CC + + primary + + + + + diff --git a/xcode/extra/spnego_asn1.c b/xcode/extra/spnego_asn1.c new file mode 100644 index 0000000..f8e9381 --- /dev/null +++ b/xcode/extra/spnego_asn1.c @@ -0,0 +1,70 @@ +#if HAVE_CONFIG_H +# include "config.h" +#endif + +#include "libtasn1.h" + +const asn1_static_node spnego_asn1_conf[] = { + { "SPNEGO", 536872976, NULL }, + { NULL, 1073741836, NULL }, + { "MechType", 1073741836, NULL }, + { "MechTypeList", 1610612747, NULL }, + { NULL, 2, "MechType"}, + { "ContextFlags", 1610874886, NULL }, + { "delegFlag", 1073741825, "0"}, + { "mutualFlag", 1073741825, "1"}, + { "replayFlag", 1073741825, "2"}, + { "sequenceFlag", 1073741825, "3"}, + { "anonFlag", 1073741825, "4"}, + { "confFlag", 1073741825, "5"}, + { "integFlag", 1, "6"}, + { "NegHints", 1610612741, NULL }, + { "hintName", 1610637339, NULL }, + { NULL, 2056, "0"}, + { "hintAddress", 536895495, NULL }, + { NULL, 2056, "1"}, + { "NegTokenInitWin", 1610612741, NULL }, + { "mechTypes", 1610620930, "MechTypeList"}, + { NULL, 2056, "0"}, + { "reqFlags", 1610637314, "ContextFlags"}, + { NULL, 2056, "1"}, + { "mechToken", 1610637319, NULL }, + { NULL, 2056, "2"}, + { "negHints", 536895490, "NegHints"}, + { NULL, 2056, "3"}, + { "NegTokenInit", 1610612741, NULL }, + { "mechTypes", 1610620930, "MechTypeList"}, + { NULL, 2056, "0"}, + { "reqFlags", 1610637314, "ContextFlags"}, + { NULL, 2056, "1"}, + { "mechToken", 1610637319, NULL }, + { NULL, 2056, "2"}, + { "mechListMIC", 536895495, NULL }, + { NULL, 2056, "3"}, + { "NegTokenResp", 1610612741, NULL }, + { "negResult", 1610899477, NULL }, + { NULL, 1073743880, "0"}, + { "accept_completed", 1073741825, "0"}, + { "accept_incomplete", 1073741825, "1"}, + { "reject", 1073741825, "2"}, + { "request-mic", 1, "3"}, + { "supportedMech", 1610637314, "MechType"}, + { NULL, 2056, "1"}, + { "responseToken", 1610637319, NULL }, + { NULL, 2056, "2"}, + { "mechListMIC", 536895495, NULL }, + { NULL, 2056, "3"}, + { "NegotiationToken", 1610612754, NULL }, + { "negTokenInit", 1610620930, "NegTokenInit"}, + { NULL, 2056, "0"}, + { "negTokenResp", 536879106, "NegTokenResp"}, + { NULL, 2056, "1"}, + { "NegotiationTokenWin", 1610612754, NULL }, + { "negTokenInit", 536879106, "NegTokenInitWin"}, + { NULL, 2056, "0"}, + { "GSSAPIContextToken", 536879109, NULL }, + { NULL, 1073746952, "0"}, + { "thisMech", 1073741826, "MechType"}, + { "spnego", 2, "NegotiationToken"}, + { NULL, 0, NULL } +}; diff --git a/xcode/libtasn1/libtasn1.h b/xcode/libtasn1/libtasn1.h new file mode 100644 index 0000000..6223cf9 --- /dev/null +++ b/xcode/libtasn1/libtasn1.h @@ -0,0 +1,402 @@ +/* + * Copyright (C) 2002-2014 Free Software Foundation, Inc. + * + * This file is part of LIBTASN1. + * + * LIBTASN1 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; either version 2.1 of + * the License, or (at your option) any later version. + * + * LIBTASN1 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. + * + * You should have received a copy of the GNU Lesser General Public + * License along with LIBTASN1; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + * 02110-1301, USA + * + */ + +#ifndef LIBTASN1_H +#define LIBTASN1_H + +#ifndef ASN1_API +#if defined ASN1_BUILDING && defined HAVE_VISIBILITY && HAVE_VISIBILITY +#define ASN1_API __attribute__((__visibility__("default"))) +#elif defined ASN1_BUILDING && defined _MSC_VER && ! defined ASN1_STATIC +#define ASN1_API __declspec(dllexport) +#elif defined _MSC_VER && ! defined ASN1_STATIC +#define ASN1_API __declspec(dllimport) +#else +#define ASN1_API +#endif +#endif + +#include +#include +#include /* for FILE* */ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#define ASN1_VERSION "4.7" + +#if defined(__GNUC__) && !defined(ASN1_INTERNAL_BUILD) +# define _ASN1_GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) +# if _ASN1_GCC_VERSION >= 30100 +# define _ASN1_GCC_ATTR_DEPRECATED __attribute__ ((__deprecated__)) +# endif +#endif + +#ifndef _ASN1_GCC_ATTR_DEPRECATED +#define _ASN1_GCC_ATTR_DEPRECATED +#endif + + /*****************************************/ + /* Errors returned by libtasn1 functions */ + /*****************************************/ +#define ASN1_SUCCESS 0 +#define ASN1_FILE_NOT_FOUND 1 +#define ASN1_ELEMENT_NOT_FOUND 2 +#define ASN1_IDENTIFIER_NOT_FOUND 3 +#define ASN1_DER_ERROR 4 +#define ASN1_VALUE_NOT_FOUND 5 +#define ASN1_GENERIC_ERROR 6 +#define ASN1_VALUE_NOT_VALID 7 +#define ASN1_TAG_ERROR 8 +#define ASN1_TAG_IMPLICIT 9 +#define ASN1_ERROR_TYPE_ANY 10 +#define ASN1_SYNTAX_ERROR 11 +#define ASN1_MEM_ERROR 12 +#define ASN1_MEM_ALLOC_ERROR 13 +#define ASN1_DER_OVERFLOW 14 +#define ASN1_NAME_TOO_LONG 15 +#define ASN1_ARRAY_ERROR 16 +#define ASN1_ELEMENT_NOT_EMPTY 17 + + /*************************************/ + /* Constants used in asn1_visit_tree */ + /*************************************/ +#define ASN1_PRINT_NAME 1 +#define ASN1_PRINT_NAME_TYPE 2 +#define ASN1_PRINT_NAME_TYPE_VALUE 3 +#define ASN1_PRINT_ALL 4 + + /*****************************************/ + /* Constants returned by asn1_read_tag */ + /*****************************************/ +#define ASN1_CLASS_UNIVERSAL 0x00 /* old: 1 */ +#define ASN1_CLASS_APPLICATION 0x40 /* old: 2 */ +#define ASN1_CLASS_CONTEXT_SPECIFIC 0x80 /* old: 3 */ +#define ASN1_CLASS_PRIVATE 0xC0 /* old: 4 */ +#define ASN1_CLASS_STRUCTURED 0x20 + + /*****************************************/ + /* Constants returned by asn1_read_tag */ + /*****************************************/ +#define ASN1_TAG_BOOLEAN 0x01 +#define ASN1_TAG_INTEGER 0x02 +#define ASN1_TAG_SEQUENCE 0x10 +#define ASN1_TAG_SET 0x11 +#define ASN1_TAG_OCTET_STRING 0x04 +#define ASN1_TAG_BIT_STRING 0x03 +#define ASN1_TAG_UTCTime 0x17 +#define ASN1_TAG_GENERALIZEDTime 0x18 +#define ASN1_TAG_OBJECT_ID 0x06 +#define ASN1_TAG_ENUMERATED 0x0A +#define ASN1_TAG_NULL 0x05 +#define ASN1_TAG_GENERALSTRING 0x1B +#define ASN1_TAG_NUMERIC_STRING 0x12 +#define ASN1_TAG_IA5_STRING 0x16 +#define ASN1_TAG_TELETEX_STRING 0x14 +#define ASN1_TAG_PRINTABLE_STRING 0x13 +#define ASN1_TAG_UNIVERSAL_STRING 0x1C +#define ASN1_TAG_BMP_STRING 0x1E +#define ASN1_TAG_UTF8_STRING 0x0C +#define ASN1_TAG_VISIBLE_STRING 0x1A + + /******************************************************/ + /* Structure definition used for the node of the tree */ + /* that represent an ASN.1 DEFINITION. */ + /******************************************************/ + + typedef struct asn1_node_st asn1_node_st; + + typedef asn1_node_st *asn1_node; + + /* maximum number of characters of a name */ + /* inside a file with ASN1 definitons */ +#define ASN1_MAX_NAME_SIZE 64 + + + /*****************************************/ + /* For the on-disk format of ASN.1 trees */ + /*****************************************/ + struct asn1_static_node_st + { + const char *name; /* Node name */ + unsigned int type; /* Node type */ + const void *value; /* Node value */ + }; + typedef struct asn1_static_node_st asn1_static_node; + +/* List of constants for field type of node_asn */ +#define ASN1_ETYPE_INVALID 0 +#define ASN1_ETYPE_CONSTANT 1 +#define ASN1_ETYPE_IDENTIFIER 2 +#define ASN1_ETYPE_INTEGER 3 +#define ASN1_ETYPE_BOOLEAN 4 +#define ASN1_ETYPE_SEQUENCE 5 +#define ASN1_ETYPE_BIT_STRING 6 +#define ASN1_ETYPE_OCTET_STRING 7 +#define ASN1_ETYPE_TAG 8 +#define ASN1_ETYPE_DEFAULT 9 +#define ASN1_ETYPE_SIZE 10 +#define ASN1_ETYPE_SEQUENCE_OF 11 +#define ASN1_ETYPE_OBJECT_ID 12 +#define ASN1_ETYPE_ANY 13 +#define ASN1_ETYPE_SET 14 +#define ASN1_ETYPE_SET_OF 15 +#define ASN1_ETYPE_DEFINITIONS 16 +#define ASN1_ETYPE_CHOICE 18 +#define ASN1_ETYPE_IMPORTS 19 +#define ASN1_ETYPE_NULL 20 +#define ASN1_ETYPE_ENUMERATED 21 +#define ASN1_ETYPE_GENERALSTRING 27 +#define ASN1_ETYPE_NUMERIC_STRING 28 +#define ASN1_ETYPE_IA5_STRING 29 +#define ASN1_ETYPE_TELETEX_STRING 30 +#define ASN1_ETYPE_PRINTABLE_STRING 31 +#define ASN1_ETYPE_UNIVERSAL_STRING 32 +#define ASN1_ETYPE_BMP_STRING 33 +#define ASN1_ETYPE_UTF8_STRING 34 +#define ASN1_ETYPE_VISIBLE_STRING 35 +#define ASN1_ETYPE_UTC_TIME 36 +#define ASN1_ETYPE_GENERALIZED_TIME 37 + +/* Flags used by asn1_delete_structure2() */ + +/* makes sure the values are zeroized prior to deinitialization */ +#define ASN1_DELETE_FLAG_ZEROIZE 1 + +/* Flags used by asn1_der_decoding2(). */ + +/* This flag would allow arbitrary data past the DER data */ +#define ASN1_DECODE_FLAG_ALLOW_PADDING 1 +/* This flag would ensure that no BER decoding takes place */ +#define ASN1_DECODE_FLAG_STRICT_DER (1<<1) + + + struct asn1_data_node_st + { + const char *name; /* Node name */ + const void *value; /* Node value */ + unsigned int value_len; /* Node value size */ + unsigned int type; /* Node value type (ASN1_ETYPE_*) */ + }; + typedef struct asn1_data_node_st asn1_data_node_st; + + /***********************************/ + /* Fixed constants */ + /***********************************/ + + + /* maximum number of characters */ + /* of a description message */ + /* (null character included) */ +#define ASN1_MAX_ERROR_DESCRIPTION_SIZE 128 + + /***********************************/ + /* Functions definitions */ + /***********************************/ + + extern ASN1_API int + asn1_parser2tree (const char *file, + asn1_node * definitions, char *error_desc); + + extern ASN1_API int + asn1_parser2array (const char *inputFileName, + const char *outputFileName, + const char *vectorName, char *error_desc); + + extern ASN1_API int + asn1_array2tree (const asn1_static_node * array, + asn1_node * definitions, char *errorDescription); + + extern ASN1_API void + asn1_print_structure (FILE * out, asn1_node structure, + const char *name, int mode); + + extern ASN1_API int + asn1_create_element (asn1_node definitions, + const char *source_name, asn1_node * element); + + extern ASN1_API int asn1_delete_structure (asn1_node * structure); + + extern ASN1_API int asn1_delete_structure2 (asn1_node * structure, unsigned int flags); + + extern ASN1_API int + asn1_delete_element (asn1_node structure, const char *element_name); + + extern ASN1_API int + asn1_write_value (asn1_node node_root, const char *name, + const void *ivalue, int len); + + extern ASN1_API int + asn1_read_value (asn1_node root, const char *name, + void *ivalue, int *len); + + extern ASN1_API int + asn1_read_value_type (asn1_node root, const char *name, + void *ivalue, int *len, unsigned int *etype); + + extern ASN1_API int + asn1_read_node_value (asn1_node node, asn1_data_node_st * data); + + extern ASN1_API int + asn1_number_of_elements (asn1_node element, const char *name, int *num); + + extern ASN1_API int + asn1_der_coding (asn1_node element, const char *name, + void *ider, int *len, char *ErrorDescription); + + extern ASN1_API int + asn1_der_decoding2 (asn1_node *element, const void *ider, + int *max_ider_len, unsigned int flags, + char *errorDescription); + + extern ASN1_API int + asn1_der_decoding (asn1_node * element, const void *ider, + int len, char *errorDescription); + + /* Do not use. Use asn1_der_decoding() instead. */ + extern ASN1_API int + asn1_der_decoding_element (asn1_node * structure, + const char *elementName, + const void *ider, int len, + char *errorDescription) _ASN1_GCC_ATTR_DEPRECATED; + + extern ASN1_API int + asn1_der_decoding_startEnd (asn1_node element, + const void *ider, int len, + const char *name_element, + int *start, int *end); + + extern ASN1_API int + asn1_expand_any_defined_by (asn1_node definitions, asn1_node * element); + + extern ASN1_API int + asn1_expand_octet_string (asn1_node definitions, + asn1_node * element, + const char *octetName, const char *objectName); + + extern ASN1_API int + asn1_read_tag (asn1_node root, const char *name, + int *tagValue, int *classValue); + + extern ASN1_API const char *asn1_find_structure_from_oid (asn1_node + definitions, + const char + *oidValue); + + extern ASN1_API const char *asn1_check_version (const char *req_version); + + extern ASN1_API const char *asn1_strerror (int error); + + extern ASN1_API void asn1_perror (int error); + +#define ASN1_MAX_TAG_SIZE 4 +#define ASN1_MAX_LENGTH_SIZE 9 +#define ASN1_MAX_TL_SIZE (ASN1_MAX_TAG_SIZE+ASN1_MAX_LENGTH_SIZE) + extern ASN1_API long + asn1_get_length_der (const unsigned char *der, int der_len, int *len); + + extern ASN1_API long + asn1_get_length_ber (const unsigned char *ber, int ber_len, int *len); + + extern ASN1_API void + asn1_length_der (unsigned long int len, unsigned char *der, int *der_len); + + /* Other utility functions. */ + + extern ASN1_API + int asn1_decode_simple_der (unsigned int etype, const unsigned char *der, + unsigned int der_len, + const unsigned char **str, + unsigned int *str_len); + + extern ASN1_API + int asn1_decode_simple_ber (unsigned int etype, const unsigned char *der, + unsigned int der_len, + unsigned char **str, + unsigned int *str_len, + unsigned int *ber_len); + + extern ASN1_API int + asn1_encode_simple_der (unsigned int etype, const unsigned char *str, + unsigned int str_len, unsigned char *tl, + unsigned int *tl_len); + + extern ASN1_API asn1_node + asn1_find_node (asn1_node pointer, const char *name); + + extern ASN1_API int + asn1_copy_node (asn1_node dst, const char *dst_name, + asn1_node src, const char *src_name); + extern ASN1_API asn1_node + asn1_dup_node (asn1_node src, const char *src_name); + + /* Internal and low-level DER utility functions. */ + + extern ASN1_API int + asn1_get_tag_der (const unsigned char *der, int der_len, + unsigned char *cls, int *len, unsigned long *tag); + + extern ASN1_API void + asn1_octet_der (const unsigned char *str, int str_len, + unsigned char *der, int *der_len); + + extern ASN1_API int + asn1_get_octet_der (const unsigned char *der, int der_len, + int *ret_len, unsigned char *str, + int str_size, int *str_len); + + extern ASN1_API void asn1_bit_der (const unsigned char *str, int bit_len, + unsigned char *der, int *der_len); + + extern ASN1_API int + asn1_get_bit_der (const unsigned char *der, int der_len, + int *ret_len, unsigned char *str, + int str_size, int *bit_len); + + extern ASN1_API int + asn1_get_object_id_der (const unsigned char *der, + int der_len, int *ret_len, + char *str, int str_size); + +/* Compatibility types */ + + typedef int asn1_retCode; /* type returned by libtasn1 functions */ + +#define node_asn_struct asn1_node_st +#define node_asn asn1_node_st +#define ASN1_TYPE asn1_node +#define ASN1_TYPE_EMPTY NULL + +#define static_struct_asn asn1_static_node_st +#define ASN1_ARRAY_TYPE asn1_static_node +#define asn1_static_node_t asn1_static_node + +#define node_data_struct asn1_data_node_st +#define ASN1_DATA_NODE asn1_data_node_st + +#ifdef __cplusplus +} +#endif + +#endif /* LIBTASN1_H */ From 3220daf7b67bbfc26a95eecd1d41f3543ce3af1c Mon Sep 17 00:00:00 2001 From: Artem Meleshko Date: Thu, 18 Feb 2016 00:06:30 +0200 Subject: [PATCH 06/96] refresh project --- .gitignore | 1 - AUTHORS | 17 - COPYING | 514 ---- Makefile.am | 133 - NEWS | 82 - NOTES.md | 36 - README.md | 86 - abi_version.sh | 51 - bin/discover.c | 93 - bin/dsm.c | 252 -- bin/inverse.c | 67 - bin/lookup.c | 68 - bootstrap | 36 - compat/clock_gettime.c | 59 - compat/compat.c | 8 - compat/compat.h | 45 - compat/strlcpy.c | 51 - configure.ac | 124 - contrib/mdx/md4.c | 282 -- contrib/mdx/md4.h | 47 - contrib/mdx/md5.c | 303 --- contrib/mdx/md5.h | 46 - contrib/rc4/rc4.c | 104 - contrib/rc4/rc4.h | 56 - contrib/spnego/spnego.asn1 | 72 - contrib/spnego/spnego_asn1.h | 11 - doc/Doxyfile.in | 2304 ----------------- include/bdsm.h | 46 - include/bdsm/netbios_defs.h | 40 - include/bdsm/netbios_ns.h | 153 -- include/bdsm/smb_defs.h | 187 -- include/bdsm/smb_dir.h | 64 - include/bdsm/smb_file.h | 140 - include/bdsm/smb_session.h | 146 -- include/bdsm/smb_share.h | 104 - include/bdsm/smb_stat.h | 153 -- include/bdsm/smb_types.h | 100 - libdsm.pc.in | 11 - libdsm.sh | 117 - libtasn1/include/libtasn1.h | 402 --- m4/attributes.m4 | 296 --- m4/ax_pthread.m4 | 332 --- m4/dolt.m4 | 173 -- m4/iconv.m4 | 266 -- m4/lib-link.m4 | 777 ------ m4/lib-prefix.m4 | 224 -- m4/pkg.m4 | 214 -- package_version.sh | 40 - src/bdsm_debug.h | 72 - src/hmac_md5.c | 89 - src/hmac_md5.h | 42 - src/netbios_defs.h | 86 - src/netbios_ns.c | 837 ------ src/netbios_query.c | 116 - src/netbios_query.h | 57 - src/netbios_session.c | 286 -- src/netbios_session.h | 78 - src/netbios_utils.c | 138 - src/netbios_utils.h | 46 - src/smb_buffer.c | 67 - src/smb_buffer.h | 70 - src/smb_defs.h | 239 -- src/smb_dir.c | 146 -- src/smb_dir.h | 41 - src/smb_fd.c | 199 -- src/smb_fd.h | 46 - src/smb_file.c | 420 --- src/smb_file.h | 41 - src/smb_message.c | 247 -- src/smb_message.h | 77 - src/smb_ntlm.c | 387 --- src/smb_ntlm.h | 126 - src/smb_packets.h | 548 ---- src/smb_session.c | 365 --- src/smb_session.h | 69 - src/smb_session_msg.c | 78 - src/smb_session_msg.h | 44 - src/smb_share.c | 412 --- src/smb_share.h | 36 - src/smb_spnego.c | 359 --- src/smb_spnego.h | 41 - src/smb_stat.c | 120 - src/smb_stat.h | 41 - src/smb_trans2.c | 484 ---- src/smb_transport.c | 77 - src/smb_transport.h | 49 - src/smb_types.h | 137 - src/smb_utils.c | 126 - src/smb_utils.h | 72 - universal/include/bdsm/bdsm.h | 46 - universal/include/bdsm/netbios_defs.h | 40 - universal/include/bdsm/netbios_ns.h | 153 -- universal/include/bdsm/smb_defs.h | 187 -- universal/include/bdsm/smb_dir.h | 64 - universal/include/bdsm/smb_file.h | 140 - universal/include/bdsm/smb_session.h | 146 -- universal/include/bdsm/smb_share.h | 104 - universal/include/bdsm/smb_stat.h | 153 -- universal/include/bdsm/smb_types.h | 100 - www/.gitignore | 18 - www/Gemfile | 25 - www/Gemfile.lock | 144 -- www/README | 3 - www/Rakefile | 3 - www/config.rb | 6 - www/doxygen.rb | 12 - www/source/c/example1.c | 67 - www/source/c/example2.c | 60 - www/source/images/background.png | Bin 2726 -> 0 bytes www/source/images/escheresque_ste.png | Bin 493 -> 0 bytes www/source/images/middleman.png | Bin 25282 -> 0 bytes www/source/index.html.slim | 225 -- www/source/javascripts/all.js | 7 - www/source/javascripts/highlight.pack.js | 1 - www/source/layouts/layout.slim | 25 - www/source/stylesheets/all.css.sass | 47 - www/source/stylesheets/normalize.css | 375 --- www/source/stylesheets/solarized_dark.css | 108 - xcode/dsm.xcodeproj/project.pbxproj | 513 ---- .../contents.xcworkspacedata | 7 - .../UserInterfaceState.xcuserstate | Bin 22399 -> 0 bytes .../xcschemes/libdsm.xcscheme | 80 - .../xcschemes/xcschememanagement.plist | 22 - xcode/extra/spnego_asn1.c | 70 - xcode/libtasn1/libtasn1.h | 402 --- 125 files changed, 19297 deletions(-) delete mode 100644 AUTHORS delete mode 100644 COPYING delete mode 100644 Makefile.am delete mode 100644 NEWS delete mode 100644 NOTES.md delete mode 100644 README.md delete mode 100755 abi_version.sh delete mode 100644 bin/discover.c delete mode 100644 bin/dsm.c delete mode 100644 bin/inverse.c delete mode 100644 bin/lookup.c delete mode 100755 bootstrap delete mode 100644 compat/clock_gettime.c delete mode 100644 compat/compat.c delete mode 100644 compat/compat.h delete mode 100644 compat/strlcpy.c delete mode 100644 configure.ac delete mode 100644 contrib/mdx/md4.c delete mode 100644 contrib/mdx/md4.h delete mode 100644 contrib/mdx/md5.c delete mode 100644 contrib/mdx/md5.h delete mode 100644 contrib/rc4/rc4.c delete mode 100644 contrib/rc4/rc4.h delete mode 100644 contrib/spnego/spnego.asn1 delete mode 100644 contrib/spnego/spnego_asn1.h delete mode 100644 doc/Doxyfile.in delete mode 100644 include/bdsm.h delete mode 100644 include/bdsm/netbios_defs.h delete mode 100644 include/bdsm/netbios_ns.h delete mode 100644 include/bdsm/smb_defs.h delete mode 100644 include/bdsm/smb_dir.h delete mode 100644 include/bdsm/smb_file.h delete mode 100644 include/bdsm/smb_session.h delete mode 100644 include/bdsm/smb_share.h delete mode 100644 include/bdsm/smb_stat.h delete mode 100644 include/bdsm/smb_types.h delete mode 100644 libdsm.pc.in delete mode 100755 libdsm.sh delete mode 100644 libtasn1/include/libtasn1.h delete mode 100644 m4/attributes.m4 delete mode 100644 m4/ax_pthread.m4 delete mode 100644 m4/dolt.m4 delete mode 100644 m4/iconv.m4 delete mode 100644 m4/lib-link.m4 delete mode 100644 m4/lib-prefix.m4 delete mode 100644 m4/pkg.m4 delete mode 100755 package_version.sh delete mode 100644 src/bdsm_debug.h delete mode 100644 src/hmac_md5.c delete mode 100644 src/hmac_md5.h delete mode 100644 src/netbios_defs.h delete mode 100644 src/netbios_ns.c delete mode 100644 src/netbios_query.c delete mode 100644 src/netbios_query.h delete mode 100644 src/netbios_session.c delete mode 100644 src/netbios_session.h delete mode 100644 src/netbios_utils.c delete mode 100644 src/netbios_utils.h delete mode 100644 src/smb_buffer.c delete mode 100644 src/smb_buffer.h delete mode 100644 src/smb_defs.h delete mode 100644 src/smb_dir.c delete mode 100644 src/smb_dir.h delete mode 100644 src/smb_fd.c delete mode 100644 src/smb_fd.h delete mode 100644 src/smb_file.c delete mode 100644 src/smb_file.h delete mode 100644 src/smb_message.c delete mode 100644 src/smb_message.h delete mode 100644 src/smb_ntlm.c delete mode 100644 src/smb_ntlm.h delete mode 100644 src/smb_packets.h delete mode 100644 src/smb_session.c delete mode 100644 src/smb_session.h delete mode 100644 src/smb_session_msg.c delete mode 100644 src/smb_session_msg.h delete mode 100644 src/smb_share.c delete mode 100644 src/smb_share.h delete mode 100644 src/smb_spnego.c delete mode 100644 src/smb_spnego.h delete mode 100644 src/smb_stat.c delete mode 100644 src/smb_stat.h delete mode 100644 src/smb_trans2.c delete mode 100644 src/smb_transport.c delete mode 100644 src/smb_transport.h delete mode 100644 src/smb_types.h delete mode 100644 src/smb_utils.c delete mode 100644 src/smb_utils.h delete mode 100644 universal/include/bdsm/bdsm.h delete mode 100644 universal/include/bdsm/netbios_defs.h delete mode 100644 universal/include/bdsm/netbios_ns.h delete mode 100644 universal/include/bdsm/smb_defs.h delete mode 100644 universal/include/bdsm/smb_dir.h delete mode 100644 universal/include/bdsm/smb_file.h delete mode 100644 universal/include/bdsm/smb_session.h delete mode 100644 universal/include/bdsm/smb_share.h delete mode 100644 universal/include/bdsm/smb_stat.h delete mode 100644 universal/include/bdsm/smb_types.h delete mode 100644 www/.gitignore delete mode 100644 www/Gemfile delete mode 100644 www/Gemfile.lock delete mode 100644 www/README delete mode 100644 www/Rakefile delete mode 100644 www/config.rb delete mode 100644 www/doxygen.rb delete mode 100644 www/source/c/example1.c delete mode 100644 www/source/c/example2.c delete mode 100644 www/source/images/background.png delete mode 100644 www/source/images/escheresque_ste.png delete mode 100644 www/source/images/middleman.png delete mode 100644 www/source/index.html.slim delete mode 100644 www/source/javascripts/all.js delete mode 100644 www/source/javascripts/highlight.pack.js delete mode 100644 www/source/layouts/layout.slim delete mode 100644 www/source/stylesheets/all.css.sass delete mode 100644 www/source/stylesheets/normalize.css delete mode 100644 www/source/stylesheets/solarized_dark.css delete mode 100644 xcode/dsm.xcodeproj/project.pbxproj delete mode 100644 xcode/dsm.xcodeproj/project.xcworkspace/contents.xcworkspacedata delete mode 100644 xcode/dsm.xcodeproj/project.xcworkspace/xcuserdata/ameleshko.xcuserdatad/UserInterfaceState.xcuserstate delete mode 100644 xcode/dsm.xcodeproj/xcuserdata/ameleshko.xcuserdatad/xcschemes/libdsm.xcscheme delete mode 100644 xcode/dsm.xcodeproj/xcuserdata/ameleshko.xcuserdatad/xcschemes/xcschememanagement.plist delete mode 100644 xcode/extra/spnego_asn1.c delete mode 100644 xcode/libtasn1/libtasn1.h diff --git a/.gitignore b/.gitignore index b100dde..d4d08f9 100644 --- a/.gitignore +++ b/.gitignore @@ -3,7 +3,6 @@ ref/* *.o dsm *.so -*.a dsm_discover dsm_lookup dsm_inverse diff --git a/AUTHORS b/AUTHORS deleted file mode 100644 index 4befd7c..0000000 --- a/AUTHORS +++ /dev/null @@ -1,17 +0,0 @@ -AUTHORS: -======== -Julien 'Lta' BALLET -Thomas Guillem -Martin Storsjö -Reuben Hawkins -Jean-Baptiste Kempf -Luca Barbato -Felix Paul Kühne -Sylver Bruneau -Reuben Hawkins -Adam Thomas-Murphy -Diego Elio Pettenò -Tobias Conradi - - -libDSM is sponsored by VideoLabs SAS diff --git a/COPYING b/COPYING deleted file mode 100644 index 9e74517..0000000 --- a/COPYING +++ /dev/null @@ -1,514 +0,0 @@ -liBDSM is released under LGPLv2.1 (or later) and is also available -under a commercial license. - -By contributing to this project, you allow VideoLabs to reship the -unmodified code under a commercial license. -You also allow VideoLAN and VideoLabs to relicense the project to a -different open source license, never more restrictive than the LGPL -(like a BSD/MIT/Apache license). - -=== - - GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 - - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Lesser General Public License, applies to some -specially designated software packages--typically libraries--of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations below. - - When we speak of free software, we are referring to freedom of use, -not price. Our General Public Licenses are designed to make sure that -you have the freedom to distribute copies of free software (and charge -for this service if you wish); that you receive source code or can get -it if you want it; that you can change the software and use pieces of -it in new free programs; and that you are informed that you can do -these things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. - - Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it becomes -a de-facto standard. To achieve this, non-free programs must be -allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, whereas the latter must -be combined with the library in order to run. - - GNU LESSER GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser General Public License (also called "this License"). -Each licensee is addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also combine or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with. - - c) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - d) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - e) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the materials to be distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties with -this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Lesser General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Libraries - - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms of the -ordinary General Public License). - - To apply these terms, attach the following notices to the library. It is -safest to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This library 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; either - version 2.1 of the License, or (at your option) any later version. - - This library 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. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the library, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James Random Hacker. - - , 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! - diff --git a/Makefile.am b/Makefile.am deleted file mode 100644 index 7e6cf97..0000000 --- a/Makefile.am +++ /dev/null @@ -1,133 +0,0 @@ -ACLOCAL_AMFLAGS = -I m4 - -DISTCLEANFILES = @DOLT_CLEANFILES@ - -EXTRA_DIST = \ - abi_version.sh \ - package_version.sh \ - contrib/spnego/spnego.asn1 \ - contrib/spnego/spnego_asn1.c - -CFLAGS = -I$(top_srcdir)/contrib -I$(top_srcdir)/include -I$(top_srcdir)/compat @TASN1_CFLAGS@ @CFLAGS@ @PTHREAD_CFLAGS@ - -if DEBUG -AM_CFLAGS = -O0 -g3 -else -AM_CFLAGS = -O2 -endif - -bdsmdir = $(includedir)/bdsm - -bdsm_HEADERS = \ - include/bdsm.h \ - include/bdsm/netbios_defs.h \ - include/bdsm/netbios_ns.h \ - include/bdsm/smb_defs.h \ - include/bdsm/smb_dir.h \ - include/bdsm/smb_file.h \ - include/bdsm/smb_session.h \ - include/bdsm/smb_share.h \ - include/bdsm/smb_stat.h \ - include/bdsm/smb_types.h -noinst_HEADERS = \ - compat/compat.h \ - src/bdsm_debug.h \ - src/hmac_md5.h \ - src/netbios_defs.h \ - src/netbios_query.h \ - src/netbios_session.h \ - src/netbios_utils.h \ - src/smb_buffer.h \ - src/smb_defs.h \ - src/smb_dir.h \ - src/smb_fd.h \ - src/smb_file.h \ - src/smb_message.h \ - src/smb_packets.h \ - src/smb_ntlm.h \ - src/smb_session.h \ - src/smb_share.h \ - src/smb_stat.h \ - src/smb_session_msg.h \ - src/smb_spnego.h \ - src/smb_types.h \ - src/smb_transport.h \ - src/smb_utils.h \ - contrib/spnego/spnego_asn1.h \ - contrib/mdx/md4.h \ - contrib/mdx/md5.h \ - contrib/rc4/rc4.h - -lib_LTLIBRARIES = libdsm.la - -libdsm_la_SOURCES = \ - contrib/mdx/md4.c \ - contrib/mdx/md5.c \ - contrib/rc4/rc4.c \ - contrib/spnego/spnego_asn1.c \ - src/hmac_md5.c \ - src/netbios_ns.c \ - src/netbios_query.c \ - src/netbios_session.c \ - src/netbios_utils.c \ - src/smb_buffer.c \ - src/smb_dir.c \ - src/smb_fd.c \ - src/smb_file.c \ - src/smb_spnego.c \ - src/smb_message.c \ - src/smb_ntlm.c \ - src/smb_session.c \ - src/smb_session_msg.c \ - src/smb_share.c \ - src/smb_stat.c \ - src/smb_trans2.c \ - src/smb_transport.c \ - src/smb_utils.c - -noinst_LTLIBRARIES = libcompat.la -libcompat_la_SOURCES = compat/compat.c -libcompat_la_LIBADD = $(LTLIBOBJS) - -pkgconfigdir = $(libdir)/pkgconfig -pkgconfig_DATA = libdsm.pc - -libdsm_la_LIBADD = libcompat.la -libdsm_la_LDFLAGS = -version-info @BDSM_LIBTOOL_VERSION@ @LTLIBICONV@ @TASN1_LIBS@ - -bin_PROGRAMS = - -if PROGRAMS -bin_PROGRAMS += dsm dsm_discover dsm_inverse dsm_lookup -endif - -dsm_SOURCES = bin/dsm.c - -dsm_discover_SOURCES = bin/discover.c - -dsm_inverse_SOURCES = bin/inverse.c - -dsm_lookup_SOURCES = bin/lookup.c - -LDADD = libdsm.la - -clean-local: - rm -rf $(top_builddir)/doc/html - rm -rf $(top_builddir)/contrib/spnego/spnego_asn1.c - -if HAVE_DOXYGEN -doc: - $(DOXYGEN) doc/Doxyfile -else -doc: - echo "Doxygen wasn't detected by configure, it's support has been disabled" -endif - -contrib/spnego/spnego_asn1.c: contrib/spnego/spnego.asn1 - asn1Parser -o $@ -n spnego_asn1_conf $< - -a : all -c : clean -re : clean all - -.PHONY: c a re doc diff --git a/NEWS b/NEWS deleted file mode 100644 index 3380ae2..0000000 --- a/NEWS +++ /dev/null @@ -1,82 +0,0 @@ -Changes between 0.1.0 and 0.2.0: --------------------------------- - - * Add files and folder deletion with smb_directory_rm and smb_file_rm - * Add folder creation with smb_directory_create - * Add files creation with smb_fwrite - * Add files and folder move/rename with smb_file_mv - * Fix smb_tree_connect return value and smb_tree_disconnect implementation - * Fix session state after spnego authentication - - -Changes between 0.0.7 and 0.1.0: --------------------------------- - - * Fix shares listing when server returns a tid equal to 0 - Notably TimeCapsule and AirPort Express/Extreme servers - * Fix crashes and wrong assertions - * Improve BSD compatibility - - -Changes between 0.0.6 and 0.0.7: --------------------------------- - - * Rework folders opening with large number of files (FIND_NEXT) - * Fix for reading from OS X SMB Sharing - * Fix build for old glibc versions - * Fix support for large files (fix for >1GiB and for >4GiB) - * Fix potential deadlock when server disconnects - - -Changes between 0.0.5 and 0.0.6: --------------------------------- - - * Fix iOS compilation - * Fix regression on smb_buffer_alloca that introduced login and discovery - issues - * Fix double-free crash - - -Changes between 0.0.4 and 0.0.5: --------------------------------- - - * Rework netbios_ns timeouts - * Expose less APIs and defines - * Fix support for Darwin OS missing clock_gettime() - - -Changes between 0.0.3 and 0.0.4: --------------------------------- - - * Improve discovery that is now done in a separate thread and lot more robust - * API: Add netbios_ns_discover_start and netbios_ns_discover_stop to start and - stop a discovery task - * API: Remove netbios_ns_discover, netbios_ns_entry_count, netbios_ns_entry_at, - netbios_ns_clear, netbios_ns_abort. Use the new discovers calls instead - * Fix smb_fopen failing to open long path - - -Changes between 0.0.2 and 0.0.3: --------------------------------- - - * Port to Android - * Simplification of the NetBios discovery API - * New abort mechanism when discovery: netbios_ns_abort - * Numerous cleanups, include headers and API - * Provide a replacement for strlcpy - * Fix numerous warnings, build issues and leaks - * Support SMBX servers - - -Changes between 0.0.1 and 0.0.2: --------------------------------- - - * Fix various build failures - - -First release 0.0.1: --------------------- - - * This is the first basic release. - * It should provide the basics for this library, but is not ready yet for - prime-time diff --git a/NOTES.md b/NOTES.md deleted file mode 100644 index a29d8bf..0000000 --- a/NOTES.md +++ /dev/null @@ -1,36 +0,0 @@ -# SMB/NBT Notes. - -I will here throw various notes regarding SMB protocol implementation and -compatibility issues, with the hope it could be usefull to and reduce of pain -of somebody else. There are no particular order. - -Most (if not all) of these notes apply mostly to Win7 (the network i work on has -only Win7 boxes except my Linux one) - -## Discovering network hosts. - -Maybe this information is well known around the net, but it found it by randomly -experimenting with NBNS packets. There a special case of NetBIOS name which is -the wildcard `0x 2a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00` (before -Netbios encoding), that is a '*' followed by 15 zeros. I guess all the machines -on the network are supposed to reply when they see this broadcasted, but in -practice they don't. They don't reply, except if you remove the recursive and -broadcast flag from the NBNS packet, but still broadcast it. In that case, -they'll reply with an error. That's already something :) Now you've got their -IPs, you'll be able to issue a NBSTATE command to each one of them, so you'll -have thei're netbios name. Cool, you know everyone on the LAN. - -PS: I've no idea (yet) of how Samba, older versions of Windows and/or NAS are -behaving regarding this. - -## Windows 7 NTLM2 - -Although Win7 is supposed to support the old NTLM2 authentication, it seems -they actually doesn't handle it oustide of GSSAPI/SPNEGO, which i would like -to avoid, being unnecessarily complicated for my little goals. - -I've been unable to build a packet that would satisfy it, it answers with a BAD -PARAMETER (or something in that area). smbclient exhibits the same behavior. -But, it you just omit the UnicodePassword field with the NTLM2 response and just -provide the simpler LM2 response, it works nicely. Pay attention that in that -case, you MUST uppercase the user name. diff --git a/README.md b/README.md deleted file mode 100644 index 95968c4..0000000 --- a/README.md +++ /dev/null @@ -1,86 +0,0 @@ -# liBDSM - -lib Defective SMb (__libDSM__) is a [SMB protocol](https://en.wikipedia.org/wiki/Server_Message_Block) client implementation in pure old __C__, with -a _lot_ less features than [Samba](https://www.samba.org/) but is simpler, and -has with a more permissive license (currently __LGPL__ + __proprietary__). - -The initial goal of this project is to have a library that can access most SMB shares to -read files and that has with a license compatible with the iOS/Android/WinRT appstores in -order to integrate it into _VLC for iOS_ and _VLC for Android_. - -This library is also licensable under a proprietary license, if LGPL is not good enough -for you. - -The lib is provided as a static library or as a dynamically linked library. -A few useless (yet) utils are also provided, mostly for testing purpose. - -## Features - -Here's a list of the currently supported features: -* NETBIOS - * Basic bi-directionnal NETBIOS name resolution - * Hacky LAN SMB servers discovery (Listing all the smb servers on the LAN, no WINS, etc.) - * Basic NETBIOS Session transport layer -* SMB - * Support only required parts of 'NT LM 0.12' (aka CIFS?) dialect. - * User based authentication - * List Shares - * Browse folders - * Read file - * Write file - * Delete file - * Delete empty folder - * Move and rename file/folder - * Create new folder - * No copy, lock, RPCs, etc. [Hum... yet] - -## Support - -liBDSM has been tested/reported to work with the following devices/OSes: - -* Windows 7 -* Windows 8/8.1 -* Samba -* smbX (OSX new smb implementation) -* QNAP TS-212 -* A cheap NAS whose name i can't remember :) - -Feel free to contribute items to this list (or network trace of not working devices) - -## Building - -### Requirements - -* A Unix system with a bash-compatible shell -* C99 C compiler -* (GNU) Make -* Autotools -* libc with iconv -* getopt_long -* GNU tasn1 compiler/support library - -The build dependencies can be installed on Debian(-based) systems using - - sudo apt-get install build-essential autoconf libtool pkg-config libtasn1-3-dev libtasn1-3-bin libbsd-dev - -### HowTo - - $> ./bootstrap - $> ./configure --prefix=/your/prefix - $> make - $> make install # maybe - - -## TODO - -* HEAVILY refactor. Any help is welcome. -* Support more of the SMBv2 and v3 protocols. - -## Contributing - -* Fork videolabs/libdsm -* Make a feature branch -* Commits your work there -* Make a pull request -* ... -* Profit ! diff --git a/abi_version.sh b/abi_version.sh deleted file mode 100755 index a6dacb6..0000000 --- a/abi_version.sh +++ /dev/null @@ -1,51 +0,0 @@ -#!/bin/sh -# Copyright (c) 2013 Luca Barbato -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), -# to deal in the Software without restriction, including without limitation -# the rights to use, copy, modify, merge, publish, distribute, sublicense, -# and/or sell copies of the Software, and to permit persons to whom -# the Software is furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -# IN THE SOFTWARE. - -version="include/bdsm.h" -PREFIX="BDSM" - -if [ ! -f $version ]; then - echo "abi_version.sh: error: $version does not exist" 1>&2 - exit 1 -fi - -CURRENT=`egrep "^#define +${PREFIX}_VERSION_CURRENT +[0-9]+$" $version` -REVISION=`egrep "^#define +${PREFIX}_VERSION_REVISION +[0-9]+$" $version` -AGE=`egrep "^#define +${PREFIX}_VERSION_AGE +[0-9]+$" $version` - -if [ -z "$CURRENT" -o -z "$REVISION" -o -z "$AGE" ]; then - echo "abi_version.sh: error: could not extract version from $version" 1>&2 - exit 1 -fi - -CURRENT=`echo $CURRENT | awk '{ print $3 }'` -REVISION=`echo $REVISION | awk '{ print $3 }'` -AGE=`echo $AGE | awk '{ print $3 }'` - -case $1 in - -libtool) - printf '%s' "$CURRENT:$REVISION:$AGE" - ;; - *) - printf '%s' "$CURRENT.$REVISION.$AGE" - ;; -esac - diff --git a/bin/discover.c b/bin/discover.c deleted file mode 100644 index ee8cb79..0000000 --- a/bin/discover.c +++ /dev/null @@ -1,93 +0,0 @@ -/***************************************************************************** - * __________________ _________ _____ _____ .__ ._. - * \______ \______ \ / _____/ / \ / _ \ |__| ____ | | - * | | _/| | \ \_____ \ / \ / \ / /_\ \| _/ __ \ | | - * | | \| ` \/ / Y \ / | | \ ___/ \| - * |______ /_______ /_______ \____|__ / /\ \____|__ |__|\___ | __ - * \/ \/ \/ \/ )/ \/ \/ \/ - * - * This file is part of liBDSM. Copyright © 2014-2015 VideoLabs SAS - * - * Author: Julien 'Lta' BALLET - * - * liBDSM is released under LGPLv2.1 (or later) and is also available - * under a commercial license. - ***************************************************************************** - * 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; either version 2.1 of the License, or - * (at your option) any later version. - * - * 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. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. - *****************************************************************************/ - -#include -#include -#include -#include - -#include -#include -#include - -#include "bdsm.h" - -static void print_entry(const char *what, void *p_opaque, - netbios_ns_entry *entry) -{ - struct in_addr addr; - - addr.s_addr = netbios_ns_entry_ip(entry); - - printf("%s(%p): Ip: %s, name: %s/%s<%x>\n", - what, - p_opaque, - inet_ntoa(addr), - netbios_ns_entry_group(entry), - netbios_ns_entry_name(entry), - netbios_ns_entry_type(entry)); -} - -static void on_entry_added(void *p_opaque, netbios_ns_entry *entry) -{ - print_entry("added", p_opaque, entry); -} - -static void on_entry_removed(void *p_opaque, netbios_ns_entry *entry) -{ - print_entry("removed", p_opaque, entry); -} - -int main() -{ - netbios_ns *ns; - netbios_ns_discover_callbacks callbacks; - - ns = netbios_ns_new(); - - callbacks.p_opaque = (void*)0x42; - callbacks.pf_on_entry_added = on_entry_added; - callbacks.pf_on_entry_removed = on_entry_removed; - - printf("Discovering...\nPress Enter to quit\n"); - if (!netbios_ns_discover_start(ns, - 4, // broadcast every 4 seconds - &callbacks)) - { - fprintf(stderr, "Error while discovering local network\n"); - exit(42); - } - - getchar(); - - netbios_ns_discover_stop(ns); - - return 0; -} diff --git a/bin/dsm.c b/bin/dsm.c deleted file mode 100644 index c4b3b32..0000000 --- a/bin/dsm.c +++ /dev/null @@ -1,252 +0,0 @@ -/***************************************************************************** - * __________________ _________ _____ _____ .__ ._. - * \______ \______ \ / _____/ / \ / _ \ |__| ____ | | - * | | _/| | \ \_____ \ / \ / \ / /_\ \| _/ __ \ | | - * | | \| ` \/ / Y \ / | | \ ___/ \| - * |______ /_______ /_______ \____|__ / /\ \____|__ |__|\___ | __ - * \/ \/ \/ \/ )/ \/ \/ \/ - * - * This file is part of liBDSM. Copyright © 2014-2015 VideoLabs SAS - * - * Author: Julien 'Lta' BALLET - * - * liBDSM is released under LGPLv2.1 (or later) and is also available - * under a commercial license. - ***************************************************************************** - * 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; either version 2.1 of the License, or - * (at your option) any later version. - * - * 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. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. - *****************************************************************************/ - -#include "config.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#include - -#include "bdsm.h" - -#define NBT_UDP_PORT 138 -#define NBT_TCP_PORT 139 -#define USAGE - -/* *INDENT-OFF* */ -char usage_str[] = { - "usage: %s [options] host login password share file\n" - " -h, --help Show this help screen.\n" - " -v, --version Print the version and quit.\n" -}; -/* *INDENT-ON* */ - -static void print_usage(const char *pname, int err) -{ - fprintf(stderr, usage_str, pname); - exit(err); -} - -static int parse_options(int argc, char * argv[]) -{ - struct option long_options[] = { - {"help", no_argument, 0, 'h'}, - {"version", no_argument, 0, 'v'}, - {0, 0, 0, 0}, - }; - - int c, opt_index = 0; - - char const *pname = ((pname = strrchr(argv[0], '/')) != NULL) ? pname + 1 : argv[0]; - - while (0 < (c = getopt_long(argc, argv, "hv", long_options, &opt_index)) ) { - switch (c) { - - case 'h': - print_usage(pname, 0); - - case 'v': - fprintf(stderr, "v%s\n", VERSION); - exit(0); - - default: - fprintf(stderr, "unknown option, %c, in getopt_long.\n", c); - exit(-1); - } - } - - return optind; -} - -int main(int ac, char **av) -{ - const char *pname, *host, *login, *password, *fname, *share; - struct sockaddr_in addr; - netbios_ns *ns; - smb_session *session; - int argoffset; - char **share_list; - smb_file *files; - smb_stat st; - - - pname = ((pname = strrchr(av[0], '/')) != NULL) ? pname + 1 : av[0]; - argoffset = parse_options(ac, av); - - if (argoffset >= ac || ac - argoffset != 5) { - print_usage(pname, -1); - } - - host = av[argoffset++]; - login = av[argoffset++]; - password = av[argoffset++]; - share = av[argoffset++]; - fname = av[argoffset++]; - - ns = netbios_ns_new(); - if (!netbios_ns_resolve(ns, host, NETBIOS_FILESERVER, &addr.sin_addr.s_addr)) - exit(-1); - - printf("%s's IP address is : %s\n", host, inet_ntoa(addr.sin_addr)); - - //netbios_ns_discover(ctx->ns); - //exit(0); - - // netbios_session *session; - // session = netbios_session_new(addr.sin_addr.s_addr); - // if (netbios_session_connect(session, "Cerbere")) - // printf("A NetBIOS session with %s has been established\n", host); - // else - // { - // printf("Unable to establish a NetBIOS session with %s\n", host); - // exit(21); - // } - - // netbios_session_destroy(session); - - session = smb_session_new(); - - //inet_aton("192.168.110.138", &addr.sin_addr); - - if (smb_session_connect(session, host, addr.sin_addr.s_addr, SMB_TRANSPORT_TCP)) - { - printf("Successfully connected to %s\n", host); - } - else - { - printf("Unable to connect to %s\n", host); - exit(42); - } - - smb_session_set_creds(session, host, login, password); - if (smb_session_login(session)) - { - if (smb_session_is_guest(session)) - printf("Login FAILED but we were logged in as GUEST \n"); - else - printf("Successfully logged in as %s\\%s\n", host, login); - } - // else if (smb_session_login(session, "WORKGROUP", login, password)) - // { - // if (session->guest) - // printf("Login FAILED but we were logged in as GUEST \n"); - // else - // printf("Successfully logged in as %s\\%s\n", host, login); - // } - else - { - printf("Authentication FAILURE.\n"); - exit(42); - } - - if (!smb_share_get_list(session, &share_list)) - { - fprintf(stderr, "Unable to list share for %s\n", host); - exit(42); - } - - fprintf(stderr, "Share list : \n"); - for (size_t j = 0; share_list[j] != NULL; j++) - fprintf(stderr, "- %s\n", share_list[j]); - smb_share_list_destroy(share_list); - - - smb_tid test = smb_tree_connect(session, share); - if (test != -1) - fprintf(stderr, "Connected to %s share\n", share); - else - { - fprintf(stderr, "Unable to connect to %s share\n", share); - exit(42); - } - - // smb_fd fd = smb_fopen(session, test, "\\BDSM\\test.txt", SMB_MOD_RO); - // if (fd) - // fprintf(stderr, "Successfully opened file: fd = 0x%.8x\n", fd); - // else - // { - // fprintf(stderr, "Unable to open file\n"); - // exit(42); - // } - - //char data[1024]; - - - // smb_fread(session, fd, data, 1024); - // fprintf(stderr, "Read from file:\n%s\n", data); - // smb_fclose(session, fd); - - fprintf(stderr, "Let's find files at share's root :\n"); - files = smb_find(session, test, "\\*"); - - size_t files_count = smb_stat_list_count( files ); - if (files_count <= 0) - fprintf(stderr, "Unable to list files\n"); - else - { - for( size_t i = 0; i < files_count; i++ ) - { - st = smb_stat_list_at( files, i ); - if( st == NULL ) { - fprintf(stderr, "smb_stat_list_at failed\n"); - break; - } - fprintf(stdout, "Found a file %s \n", smb_stat_name( st )); - } - } - smb_stat_list_destroy(files); - - fprintf(stderr, "Query file info for path: %s\n", fname); - st = smb_fstat(session, test, fname); - - if (st != NULL) - { - printf("File '%s' is %"PRIu64" bytes long\n", fname, smb_stat_get(st, SMB_STAT_SIZE)); - } - - - smb_session_destroy(session); - netbios_ns_destroy(ns); - - return 0; -} diff --git a/bin/inverse.c b/bin/inverse.c deleted file mode 100644 index d7e88a9..0000000 --- a/bin/inverse.c +++ /dev/null @@ -1,67 +0,0 @@ -/***************************************************************************** - * __________________ _________ _____ _____ .__ ._. - * \______ \______ \ / _____/ / \ / _ \ |__| ____ | | - * | | _/| | \ \_____ \ / \ / \ / /_\ \| _/ __ \ | | - * | | \| ` \/ / Y \ / | | \ ___/ \| - * |______ /_______ /_______ \____|__ / /\ \____|__ |__|\___ | __ - * \/ \/ \/ \/ )/ \/ \/ \/ - * - * This file is part of liBDSM. Copyright © 2014-2015 VideoLabs SAS - * - * Author: Julien 'Lta' BALLET - * - * liBDSM is released under LGPLv2.1 (or later) and is also available - * under a commercial license. - ***************************************************************************** - * 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; either version 2.1 of the License, or - * (at your option) any later version. - * - * 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. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. - *****************************************************************************/ - -#include -#include -#include -#include - -#include -#include -#include - -#include "bdsm.h" - -int main(int ac, char **av) -{ - netbios_ns *ns; - struct in_addr addr; - const char *name; - - ns = netbios_ns_new(); - - if (ac != 2) - { - fprintf(stderr, "%s usage: %s a.b.c.d\n", av[0], av[0]); - fprintf(stderr, "Print the netbios name for this IP address\n"); - exit(1); - } - - inet_aton(av[1], &addr); - if ((name = netbios_ns_inverse(ns, addr.s_addr)) == NULL) - { - fprintf(stderr, "Unable to perform inverse name resolution for %s\n", av[1]); - exit(42); - } - - printf("%s\n", name); - netbios_ns_destroy(ns); - return 0; -} diff --git a/bin/lookup.c b/bin/lookup.c deleted file mode 100644 index 9299922..0000000 --- a/bin/lookup.c +++ /dev/null @@ -1,68 +0,0 @@ -/***************************************************************************** - * __________________ _________ _____ _____ .__ ._. - * \______ \______ \ / _____/ / \ / _ \ |__| ____ | | - * | | _/| | \ \_____ \ / \ / \ / /_\ \| _/ __ \ | | - * | | \| ` \/ / Y \ / | | \ ___/ \| - * |______ /_______ /_______ \____|__ / /\ \____|__ |__|\___ | __ - * \/ \/ \/ \/ )/ \/ \/ \/ - * - * This file is part of liBDSM. Copyright © 2014-2015 VideoLabs SAS - * - * Author: Julien 'Lta' BALLET - * - * liBDSM is released under LGPLv2.1 (or later) and is also available - * under a commercial license. - ***************************************************************************** - * 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; either version 2.1 of the License, or - * (at your option) any later version. - * - * 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. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. - *****************************************************************************/ - -#include -#include -#include -#include - -#include -#include -#include - -#include "bdsm.h" - -int main(int ac, char **av) -{ - netbios_ns *ns; - struct in_addr addr; - - ns = netbios_ns_new(); - - if (ac != 2) - { - fprintf(stderr, "%s usage: %s NBT_NAME\n", av[0], av[0]); - fprintf(stderr, "Print the ip for this netbios name\n"); - exit(1); - } - - if (!netbios_ns_resolve(ns, av[1], NETBIOS_FILESERVER, &addr.s_addr)) { - exit(-1); - } - if (!addr.s_addr) - { - fprintf(stderr, "Unable to perform name resolution for %s\n", av[1]); - exit(42); - } - - printf("%s's IP address is : %s\n", av[1], inet_ntoa(addr)); - netbios_ns_destroy(ns); - return 0; -} diff --git a/bootstrap b/bootstrap deleted file mode 100755 index a16dbf9..0000000 --- a/bootstrap +++ /dev/null @@ -1,36 +0,0 @@ -#! /bin/sh -## --------------------------------------------------------------------------- -## __________________ _________ _____ _____ .__ ._. -## \______ \______ \ / _____/ / \ / _ \ |__| ____ | | -## | | _/| | \ \_____ \ / \ / \ / /_\ \| _/ __ \ | | -## | | \| ` \/ / Y \ / | | \ ___/ \| -## |______ /_______ /_______ \____|__ / /\ \____|__ |__|\___ | __ -## \/ \/ \/ \/ )/ \/ \/ \/ -## -## This file is part of libdsm. Copyright © 2014 VideoLabs SAS -## -## Author: Julien 'Lta' BALLET - -set -e - -cd "$(dirname "$0")" - -autoreconf --install --force --verbose ${ACLOCAL_ARGS} - -set +x - - -echo '#---------------------------------------------------------------------------#' -echo '# __________________ _________ _____ _____ .__ ._. #' -echo '# \______ \______ \ / _____/ / \ / _ \ |__| ____ | | #' -echo '# | | _/| | \ \_____ \ / \ / \ / /_\ \| _/ __ \ | | #' -echo '# | | \| ` \/ / Y \ / | | \ ___/ \| #' -echo '# li|______ /_______ /_______ \____|__ / /\ \____|__ |__|\___ | __ #' -echo '# \/ \/ \/ \/ )/ \/ \/ \/ #' -echo '#---------------------------------------------------------------------------#' -echo "#-------------| You are now dead, please take your receipt ! |--------------#" -echo '#---------------------------------------------------------------------------#' -echo '' -echo 'See build options with `./configure --help`, make your choiches, then' -echo '$> ./configure [--prefix=/path] [...] && make && make install' - diff --git a/compat/clock_gettime.c b/compat/clock_gettime.c deleted file mode 100644 index b03272c..0000000 --- a/compat/clock_gettime.c +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright (c), MM Weiss - * 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 MM Weiss 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 COPYRIGHT HOLDERS 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 COPYRIGHT OWNER 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 -#include -#include -#include -#include -#include -#include -#include "compat.h" - -int clock_gettime(clockid_t clk_id, struct timespec *tp) { - kern_return_t ret; - clock_serv_t clk; - clock_id_t clk_serv_id; - mach_timespec_t tm; - - if (clk_id != CLOCK_REALTIME) - return -1; - - clk_serv_id = clk_id == CLOCK_REALTIME ? CALENDAR_CLOCK : SYSTEM_CLOCK; - if (KERN_SUCCESS == (ret = host_get_clock_service(mach_host_self(), clk_serv_id, &clk))) { - if (KERN_SUCCESS == (ret = clock_get_time(clk, &tm))) { - tp->tv_sec = tm.tv_sec; - tp->tv_nsec = tm.tv_nsec; - } - } - if (KERN_SUCCESS != ret) - return -1; - - return 0; -} diff --git a/compat/compat.c b/compat/compat.c deleted file mode 100644 index 2ff3e90..0000000 --- a/compat/compat.c +++ /dev/null @@ -1,8 +0,0 @@ -/* This file is just a placeholder so the library isn't empty */ - -/* This function does strictly nothing. It's just here to avoid - libcompat.a to be empty, which is illegal */ -int not_empty() -{ - return 42; -} diff --git a/compat/compat.h b/compat/compat.h deleted file mode 100644 index 7148f3d..0000000 --- a/compat/compat.h +++ /dev/null @@ -1,45 +0,0 @@ -/***************************************************************************** - * __________________ _________ _____ _____ .__ ._. - * \______ \______ \ / _____/ / \ / _ \ |__| ____ | | - * | | _/| | \ \_____ \ / \ / \ / /_\ \| _/ __ \ | | - * | | \| ` \/ / Y \ / | | \ ___/ \| - * |______ /_______ /_______ \____|__ / /\ \____|__ |__|\___ | __ - * \/ \/ \/ \/ )/ \/ \/ \/ - * - * This file is part of liBDSM. Copyright © 2014-2015 VideoLabs SAS - * - * Author: Julien 'Lta' BALLET - * - * liBDSM is released under LGPLv2.1 (or later) and is also available - * under a commercial license. - ***************************************************************************** - * 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; either version 2.1 of the License, or - * (at your option) any later version. - * - * 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. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. - *****************************************************************************/ - -#include "config.h" - -#if !defined HAVE_STRLCPY && !defined HAVE_LIBBSD -size_t strlcpy(char *dst, const char *src, size_t siz); -#endif - -#if !defined HAVE_CLOCK_GETTIME -typedef enum { - CLOCK_REALTIME, - CLOCK_MONOTONIC, - CLOCK_PROCESS_CPUTIME_ID, - CLOCK_THREAD_CPUTIME_ID -} clockid_t; -int clock_gettime(clockid_t clk_id, struct timespec *tp); -#endif diff --git a/compat/strlcpy.c b/compat/strlcpy.c deleted file mode 100644 index d32b659..0000000 --- a/compat/strlcpy.c +++ /dev/null @@ -1,51 +0,0 @@ -/* $OpenBSD: strlcpy.c,v 1.11 2006/05/05 15:27:38 millert Exp $ */ - -/* - * Copyright (c) 1998 Todd C. Miller - * - * 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 THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR 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. - */ - -#include -#include - -/* - * Copy src to string dst of size siz. At most siz-1 characters - * will be copied. Always NUL terminates (unless siz == 0). - * Returns strlen(src); if retval >= siz, truncation occurred. - */ -size_t -strlcpy(char *dst, const char *src, size_t siz) -{ - char *d = dst; - const char *s = src; - size_t n = siz; - - /* Copy as many bytes as will fit */ - if (n != 0) { - while (--n != 0) { - if ((*d++ = *s++) == '\0') - break; - } - } - - /* Not enough room in dst, add NUL and traverse rest of src */ - if (n == 0) { - if (siz != 0) - *d = '\0'; /* NUL-terminate dst */ - while (*s++) - ; - } - - return(s - src - 1); /* count does not include NUL */ -} diff --git a/configure.ac b/configure.ac deleted file mode 100644 index 18aec70..0000000 --- a/configure.ac +++ /dev/null @@ -1,124 +0,0 @@ -AC_PREREQ([2.53]) - -AC_COPYRIGHT([Copyright 2014-2015 VideoLabs]) - -AC_INIT([libdsm], [m4_esyscmd([./package_version.sh])], [], [libdsm], []) -AC_CONFIG_HEADER(config.h) -AC_CONFIG_SRCDIR([include/bdsm.h]) -AC_CONFIG_LIBOBJ_DIR([compat]) -AM_INIT_AUTOMAKE([1.6 foreign subdir-objects tar-ustar dist-zip]) -m4_ifdef([AM_SILENT_RULES], [ - AM_SILENT_RULES([yes]) -]) - -AC_CANONICAL_HOST - -BDSM_ABI_VERSION=m4_esyscmd([./abi_version.sh]) -BDSM_PACKAGE_VERSION=m4_esyscmd([./package_version.sh]) -BDSM_LIBTOOL_VERSION=m4_esyscmd([./abi_version.sh -libtool]) - -AC_SUBST(BDSM_ABI_VERSION) -AC_SUBST(BDSM_PACKAGE_VERSION) -AC_SUBST(BDSM_LIBTOOL_VERSION) - -AC_MSG_NOTICE([dsm package version: $BDSM_PACKAGE_VERSION]) -AC_MSG_NOTICE([dsm ABI version: $BDSM_ABI_VERSION]) - -AC_PROG_CC_C99 -AM_PROG_CC_C_O - -dnl check for -Wall -Wextra support -CC_CHECK_CFLAG_APPEND([-Wall -Wsign-compare -Wextra -Wstrict-aliasing -Wstrict-overflow]) - -dnl Where is iconv? In libc or separate lib? -AM_ICONV - -AC_ARG_ENABLE([programs], - AS_HELP_STRING([--enable-programs], [Build additional programs [default=yes]]) -) - -AC_ARG_ENABLE([debug], - AS_HELP_STRING([--enable-debug], [Additional debugging features [default=yes]]) -) - -AS_IF([test x"$enable_debug" != x"no"], [ - AC_DEFINE([BDSM_DEBUG], [1], [Enable debug message and compile flags]) -]) - -AM_CONDITIONAL([DEBUG], [test x"$enable_debug" != x"no"]) -AM_CONDITIONAL([PROGRAMS], [test x"$enable_programs" != x"no"]) - -LT_INIT - -DOLT - -AC_CONFIG_MACRO_DIR([m4]) - -dnl Check for pthreads -AX_PTHREAD - -############################## -## Checks for the ASN.1 parser -PKG_CHECK_MODULES([TASN1], [libtasn1]) - -## Check if it supports new types -AC_MSG_CHECKING([whether libtasn1 version >= 3.0]) -CFLAGS="$CFLAGS $TASN1_CFLAGS" -AC_COMPILE_IFELSE([ - AC_LANG_PROGRAM([#include ], [ asn1_node test; ]) -], [ - AC_MSG_RESULT([yes]) - HAVE_TASN1_3PLUS=yes -], [ - AC_MSG_RESULT([no]) - HAVE_TASN1_3PLUS=no -]) - -AM_CONDITIONAL([HAVE_TASN1_3PLUS],[test x$HAVE_TASN1_3PLUS = xyes]) -AS_IF([test x"$HAVE_TASN1_3PLUS" = x"yes"], [ - AC_DEFINE([HAVE_TASN1_3PLUS], [1], [libtasn1 has v 3.0 downcase types]) - - dnl Ugly compatibility with old 2.x types - AC_DEFINE([ASN1_ARRAY_TYPE], [asn1_static_node], [...]) -], [ - dnl Ugly compatibility with new 3.x types - AC_DEFINE([asn1_static_node], [ASN1_ARRAY_TYPE], [...]) -]) - -AC_SEARCH_LIBS([strlcpy], [bsd], [ - AC_DEFINE([HAVE_LIBBSD], [1], [Does this system have libbsd strl*** functions implementation]) -]) -AC_SEARCH_LIBS([clock_gettime], [rt]) -AC_REPLACE_FUNCS([strlcpy]) -AC_REPLACE_FUNCS([clock_gettime]) - -AC_CHECK_HEADERS([bsd/string.h langinfo.h alloca.h]) - -## Configure random device path -AC_ARG_WITH([urandom], - [AS_HELP_STRING([--with-urandom=PATH], - [Configure the path of the random generation device used @<:@default=/dev/urandom@:>@ ])], - [], [with_urandom=/dev/urandom]) -AC_DEFINE_UNQUOTED([URANDOM], ["$with_urandom"], [Path of the random number generation device]) - -## Check for doxygen presence -AC_CHECK_PROGS([DOXYGEN], [doxygen]) -AM_CONDITIONAL([HAVE_DOXYGEN], [test -n "$DOXYGEN"]) -if test -z "$DOXYGEN"; - then AC_MSG_WARN([Doxygen not found - continuing without Doxygen support]) -else - AC_CONFIG_FILES([doc/Doxyfile]) -fi - -case "${host_os}" in - *android*) - BDSM_LIB_LOG="-llog" - LDFLAGS="${LDFLAGS} ${BDSM_LIB_LOG}" - ;; -esac -AC_SUBST(BDSM_LIB_LOG) - -AC_OUTPUT([ -Makefile -libdsm.pc -]) diff --git a/contrib/mdx/md4.c b/contrib/mdx/md4.c deleted file mode 100644 index 5c6fa23..0000000 --- a/contrib/mdx/md4.c +++ /dev/null @@ -1,282 +0,0 @@ -/* - * This is an OpenSSL-compatible implementation of the RSA Data Security, Inc. - * MD4 Message-Digest Algorithm (RFC 1320). - * - * Homepage: - * http://openwall.info/wiki/people/solar/software/public-domain-source-code/md4 - * - * Author: - * Alexander Peslyak, better known as Solar Designer - * - * This software was written by Alexander Peslyak in 2001. No copyright is - * claimed, and the software is hereby placed in the public domain. - * In case this attempt to disclaim copyright and place the software in the - * public domain is deemed null and void, then the software is - * Copyright (c) 2001 Alexander Peslyak and it is hereby released to the - * general public under the following terms: - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted. - * - * There's ABSOLUTELY NO WARRANTY, express or implied. - * - * (This is a heavily cut-down "BSD license".) - * - * This differs from Colin Plumb's older public domain implementation in that - * no exactly 32-bit integer data type is required (any 32-bit or wider - * unsigned integer data type will do), there's no compile-time endianness - * configuration, and the function prototypes match OpenSSL's. No code from - * Colin Plumb's implementation has been reused; this comment merely compares - * the properties of the two independent implementations. - * - * The primary goals of this implementation are portability and ease of use. - * It is meant to be fast, but not as fast as possible. Some known - * optimizations are not included to reduce source code size and avoid - * compile-time configuration. - */ - - - -#ifndef HAVE_OPENSSL - -#include - -#include "md4.h" - -/* - * The basic MD4 functions. - * - * F and G are optimized compared to their RFC 1320 definitions, with the - * optimization for F borrowed from Colin Plumb's MD5 implementation. - */ -#define F(x, y, z) ((z) ^ ((x) & ((y) ^ (z)))) -#define G(x, y, z) (((x) & ((y) | (z))) | ((y) & (z))) -#define H(x, y, z) ((x) ^ (y) ^ (z)) - -/* - * The MD4 transformation for all three rounds. - */ -#define STEP(f, a, b, c, d, x, s) \ - (a) += f((b), (c), (d)) + (x); \ - (a) = (((a) << (s)) | (((a) & 0xffffffff) >> (32 - (s)))); - -/* - * SET reads 4 input bytes in little-endian byte order and stores them - * in a properly aligned word in host byte order. - * - * The check for little-endian architectures that tolerate unaligned - * memory accesses is just an optimization. Nothing will break if it - * doesn't work. - */ -#if defined(__i386__) || defined(__x86_64__) || defined(__vax__) -#define SET(n) \ - (*(MD4_u32plus *)&ptr[(n) * 4]) -#define GET(n) \ - SET(n) -#else -#define SET(n) \ - (ctx->block[(n)] = \ - (MD4_u32plus)ptr[(n) * 4] | \ - ((MD4_u32plus)ptr[(n) * 4 + 1] << 8) | \ - ((MD4_u32plus)ptr[(n) * 4 + 2] << 16) | \ - ((MD4_u32plus)ptr[(n) * 4 + 3] << 24)) -#define GET(n) \ - (ctx->block[(n)]) -#endif - -/* - * This processes one or more 64-byte data blocks, but does NOT update - * the bit counters. There are no alignment requirements. - */ -static const void *body(MD4_CTX *ctx, const void *data, unsigned long size) -{ - const unsigned char *ptr; - MD4_u32plus a, b, c, d; - MD4_u32plus saved_a, saved_b, saved_c, saved_d; - - ptr = (const unsigned char *)data; - - a = ctx->a; - b = ctx->b; - c = ctx->c; - d = ctx->d; - - do - { - saved_a = a; - saved_b = b; - saved_c = c; - saved_d = d; - - /* Round 1 */ - STEP(F, a, b, c, d, SET(0), 3) - STEP(F, d, a, b, c, SET(1), 7) - STEP(F, c, d, a, b, SET(2), 11) - STEP(F, b, c, d, a, SET(3), 19) - STEP(F, a, b, c, d, SET(4), 3) - STEP(F, d, a, b, c, SET(5), 7) - STEP(F, c, d, a, b, SET(6), 11) - STEP(F, b, c, d, a, SET(7), 19) - STEP(F, a, b, c, d, SET(8), 3) - STEP(F, d, a, b, c, SET(9), 7) - STEP(F, c, d, a, b, SET(10), 11) - STEP(F, b, c, d, a, SET(11), 19) - STEP(F, a, b, c, d, SET(12), 3) - STEP(F, d, a, b, c, SET(13), 7) - STEP(F, c, d, a, b, SET(14), 11) - STEP(F, b, c, d, a, SET(15), 19) - - /* Round 2 */ - STEP(G, a, b, c, d, GET(0) + 0x5a827999, 3) - STEP(G, d, a, b, c, GET(4) + 0x5a827999, 5) - STEP(G, c, d, a, b, GET(8) + 0x5a827999, 9) - STEP(G, b, c, d, a, GET(12) + 0x5a827999, 13) - STEP(G, a, b, c, d, GET(1) + 0x5a827999, 3) - STEP(G, d, a, b, c, GET(5) + 0x5a827999, 5) - STEP(G, c, d, a, b, GET(9) + 0x5a827999, 9) - STEP(G, b, c, d, a, GET(13) + 0x5a827999, 13) - STEP(G, a, b, c, d, GET(2) + 0x5a827999, 3) - STEP(G, d, a, b, c, GET(6) + 0x5a827999, 5) - STEP(G, c, d, a, b, GET(10) + 0x5a827999, 9) - STEP(G, b, c, d, a, GET(14) + 0x5a827999, 13) - STEP(G, a, b, c, d, GET(3) + 0x5a827999, 3) - STEP(G, d, a, b, c, GET(7) + 0x5a827999, 5) - STEP(G, c, d, a, b, GET(11) + 0x5a827999, 9) - STEP(G, b, c, d, a, GET(15) + 0x5a827999, 13) - - /* Round 3 */ - STEP(H, a, b, c, d, GET(0) + 0x6ed9eba1, 3) - STEP(H, d, a, b, c, GET(8) + 0x6ed9eba1, 9) - STEP(H, c, d, a, b, GET(4) + 0x6ed9eba1, 11) - STEP(H, b, c, d, a, GET(12) + 0x6ed9eba1, 15) - STEP(H, a, b, c, d, GET(2) + 0x6ed9eba1, 3) - STEP(H, d, a, b, c, GET(10) + 0x6ed9eba1, 9) - STEP(H, c, d, a, b, GET(6) + 0x6ed9eba1, 11) - STEP(H, b, c, d, a, GET(14) + 0x6ed9eba1, 15) - STEP(H, a, b, c, d, GET(1) + 0x6ed9eba1, 3) - STEP(H, d, a, b, c, GET(9) + 0x6ed9eba1, 9) - STEP(H, c, d, a, b, GET(5) + 0x6ed9eba1, 11) - STEP(H, b, c, d, a, GET(13) + 0x6ed9eba1, 15) - STEP(H, a, b, c, d, GET(3) + 0x6ed9eba1, 3) - STEP(H, d, a, b, c, GET(11) + 0x6ed9eba1, 9) - STEP(H, c, d, a, b, GET(7) + 0x6ed9eba1, 11) - STEP(H, b, c, d, a, GET(15) + 0x6ed9eba1, 15) - - a += saved_a; - b += saved_b; - c += saved_c; - d += saved_d; - - ptr += 64; - } - while (size -= 64); - - ctx->a = a; - ctx->b = b; - ctx->c = c; - ctx->d = d; - - return ptr; -} - -void MD4_CTX_Init(MD4_CTX *ctx) -{ - ctx->a = 0x67452301; - ctx->b = 0xefcdab89; - ctx->c = 0x98badcfe; - ctx->d = 0x10325476; - - ctx->lo = 0; - ctx->hi = 0; -} - -void MD4_CTX_Update(MD4_CTX *ctx, const void *data, unsigned long size) -{ - MD4_u32plus saved_lo; - unsigned long used, available; - - saved_lo = ctx->lo; - if ((ctx->lo = (saved_lo + size) & 0x1fffffff) < saved_lo) - ctx->hi++; - ctx->hi += size >> 29; - - used = saved_lo & 0x3f; - - if (used) - { - available = 64 - used; - - if (size < available) - { - memcpy(&ctx->buffer[used], data, size); - return; - } - - memcpy(&ctx->buffer[used], data, available); - data = (const unsigned char *)data + available; - size -= available; - body(ctx, ctx->buffer, 64); - } - - if (size >= 64) - { - data = body(ctx, data, size & ~(unsigned long)0x3f); - size &= 0x3f; - } - - memcpy(ctx->buffer, data, size); -} - -void MD4_CTX_Final(unsigned char *result, MD4_CTX *ctx) -{ - unsigned long used, available; - - used = ctx->lo & 0x3f; - - ctx->buffer[used++] = 0x80; - - available = 64 - used; - - if (available < 8) - { - memset(&ctx->buffer[used], 0, available); - body(ctx, ctx->buffer, 64); - used = 0; - available = 64; - } - - memset(&ctx->buffer[used], 0, available - 8); - - ctx->lo <<= 3; - ctx->buffer[56] = ctx->lo; - ctx->buffer[57] = ctx->lo >> 8; - ctx->buffer[58] = ctx->lo >> 16; - ctx->buffer[59] = ctx->lo >> 24; - ctx->buffer[60] = ctx->hi; - ctx->buffer[61] = ctx->hi >> 8; - ctx->buffer[62] = ctx->hi >> 16; - ctx->buffer[63] = ctx->hi >> 24; - - body(ctx, ctx->buffer, 64); - - result[0] = ctx->a; - result[1] = ctx->a >> 8; - result[2] = ctx->a >> 16; - result[3] = ctx->a >> 24; - result[4] = ctx->b; - result[5] = ctx->b >> 8; - result[6] = ctx->b >> 16; - result[7] = ctx->b >> 24; - result[8] = ctx->c; - result[9] = ctx->c >> 8; - result[10] = ctx->c >> 16; - result[11] = ctx->c >> 24; - result[12] = ctx->d; - result[13] = ctx->d >> 8; - result[14] = ctx->d >> 16; - result[15] = ctx->d >> 24; - - memset(ctx, 0, sizeof(*ctx)); -} - -#endif diff --git a/contrib/mdx/md4.h b/contrib/mdx/md4.h deleted file mode 100644 index 780bf1b..0000000 --- a/contrib/mdx/md4.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - * This is an OpenSSL-compatible implementation of the RSA Data Security, Inc. - * MD4 Message-Digest Algorithm (RFC 1320). - * - * Homepage: - * http://openwall.info/wiki/people/solar/software/public-domain-source-code/md4 - * - * Author: - * Alexander Peslyak, better known as Solar Designer - * - * This software was written by Alexander Peslyak in 2001. No copyright is - * claimed, and the software is hereby placed in the public domain. - * In case this attempt to disclaim copyright and place the software in the - * public domain is deemed null and void, then the software is - * Copyright (c) 2001 Alexander Peslyak and it is hereby released to the - * general public under the following terms: - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted. - * - * There's ABSOLUTELY NO WARRANTY, express or implied. - * - * See md4.c for more information. - */ - - -#ifdef HAVE_OPENSSL -#include -#elif !defined(_MD4_H) -#define _MD4_H - -/* Any 32-bit or wider unsigned integer data type will do */ -typedef unsigned int MD4_u32plus; - -typedef struct -{ - MD4_u32plus lo, hi; - MD4_u32plus a, b, c, d; - unsigned char buffer[64]; - MD4_u32plus block[16]; -} MD4_CTX; - -extern void MD4_CTX_Init(MD4_CTX *ctx); -extern void MD4_CTX_Update(MD4_CTX *ctx, const void *data, unsigned long size); -extern void MD4_CTX_Final(unsigned char *result, MD4_CTX *ctx); - -#endif diff --git a/contrib/mdx/md5.c b/contrib/mdx/md5.c deleted file mode 100644 index f8e5b9c..0000000 --- a/contrib/mdx/md5.c +++ /dev/null @@ -1,303 +0,0 @@ -/* - * This is an OpenSSL-compatible implementation of the RSA Data Security, Inc. - * MD5 Message-Digest Algorithm (RFC 1321). - * - * Homepage: - * http://openwall.info/wiki/people/solar/software/public-domain-source-code/md5 - * - * Author: - * Alexander Peslyak, better known as Solar Designer - * - * This software was written by Alexander Peslyak in 2001. No copyright is - * claimed, and the software is hereby placed in the public domain. - * In case this attempt to disclaim copyright and place the software in the - * public domain is deemed null and void, then the software is - * Copyright (c) 2001 Alexander Peslyak and it is hereby released to the - * general public under the following terms: - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted. - * - * There's ABSOLUTELY NO WARRANTY, express or implied. - * - * (This is a heavily cut-down "BSD license".) - * - * This differs from Colin Plumb's older public domain implementation in that - * no exactly 32-bit integer data type is required (any 32-bit or wider - * unsigned integer data type will do), there's no compile-time endianness - * configuration, and the function prototypes match OpenSSL's. No code from - * Colin Plumb's implementation has been reused; this comment merely compares - * the properties of the two independent implementations. - * - * The primary goals of this implementation are portability and ease of use. - * It is meant to be fast, but not as fast as possible. Some known - * optimizations are not included to reduce source code size and avoid - * compile-time configuration. - */ - - -#ifndef HAVE_OPENSSL - -#include - -#include "md5.h" - -/* - * The basic MD5 functions. - * - * F and G are optimized compared to their RFC 1321 definitions for - * architectures that lack an AND-NOT instruction, just like in Colin Plumb's - * implementation. - */ -#define F(x, y, z) ((z) ^ ((x) & ((y) ^ (z)))) -#define G(x, y, z) ((y) ^ ((z) & ((x) ^ (y)))) -#define H(x, y, z) (((x) ^ (y)) ^ (z)) -#define H2(x, y, z) ((x) ^ ((y) ^ (z))) -#define I(x, y, z) ((y) ^ ((x) | ~(z))) - -/* - * The MD5 transformation for all four rounds. - */ -#define STEP(f, a, b, c, d, x, t, s) \ - (a) += f((b), (c), (d)) + (x) + (t); \ - (a) = (((a) << (s)) | (((a) & 0xffffffff) >> (32 - (s)))); \ - (a) += (b); - -/* - * SET reads 4 input bytes in little-endian byte order and stores them - * in a properly aligned word in host byte order. - * - * The check for little-endian architectures that tolerate unaligned - * memory accesses is just an optimization. Nothing will break if it - * doesn't work. - */ -#if defined(__i386__) || defined(__x86_64__) || defined(__vax__) -#define SET(n) \ - (*(MD5_u32plus *)&ptr[(n) * 4]) -#define GET(n) \ - SET(n) -#else -#define SET(n) \ - (ctx->block[(n)] = \ - (MD5_u32plus)ptr[(n) * 4] | \ - ((MD5_u32plus)ptr[(n) * 4 + 1] << 8) | \ - ((MD5_u32plus)ptr[(n) * 4 + 2] << 16) | \ - ((MD5_u32plus)ptr[(n) * 4 + 3] << 24)) -#define GET(n) \ - (ctx->block[(n)]) -#endif - -/* - * This processes one or more 64-byte data blocks, but does NOT update - * the bit counters. There are no alignment requirements. - */ -static const void *body(MD5_CTX *ctx, const void *data, unsigned long size) -{ - const unsigned char *ptr; - MD5_u32plus a, b, c, d; - MD5_u32plus saved_a, saved_b, saved_c, saved_d; - - ptr = (const unsigned char *)data; - - a = ctx->a; - b = ctx->b; - c = ctx->c; - d = ctx->d; - - do - { - saved_a = a; - saved_b = b; - saved_c = c; - saved_d = d; - - /* Round 1 */ - STEP(F, a, b, c, d, SET(0), 0xd76aa478, 7) - STEP(F, d, a, b, c, SET(1), 0xe8c7b756, 12) - STEP(F, c, d, a, b, SET(2), 0x242070db, 17) - STEP(F, b, c, d, a, SET(3), 0xc1bdceee, 22) - STEP(F, a, b, c, d, SET(4), 0xf57c0faf, 7) - STEP(F, d, a, b, c, SET(5), 0x4787c62a, 12) - STEP(F, c, d, a, b, SET(6), 0xa8304613, 17) - STEP(F, b, c, d, a, SET(7), 0xfd469501, 22) - STEP(F, a, b, c, d, SET(8), 0x698098d8, 7) - STEP(F, d, a, b, c, SET(9), 0x8b44f7af, 12) - STEP(F, c, d, a, b, SET(10), 0xffff5bb1, 17) - STEP(F, b, c, d, a, SET(11), 0x895cd7be, 22) - STEP(F, a, b, c, d, SET(12), 0x6b901122, 7) - STEP(F, d, a, b, c, SET(13), 0xfd987193, 12) - STEP(F, c, d, a, b, SET(14), 0xa679438e, 17) - STEP(F, b, c, d, a, SET(15), 0x49b40821, 22) - - /* Round 2 */ - STEP(G, a, b, c, d, GET(1), 0xf61e2562, 5) - STEP(G, d, a, b, c, GET(6), 0xc040b340, 9) - STEP(G, c, d, a, b, GET(11), 0x265e5a51, 14) - STEP(G, b, c, d, a, GET(0), 0xe9b6c7aa, 20) - STEP(G, a, b, c, d, GET(5), 0xd62f105d, 5) - STEP(G, d, a, b, c, GET(10), 0x02441453, 9) - STEP(G, c, d, a, b, GET(15), 0xd8a1e681, 14) - STEP(G, b, c, d, a, GET(4), 0xe7d3fbc8, 20) - STEP(G, a, b, c, d, GET(9), 0x21e1cde6, 5) - STEP(G, d, a, b, c, GET(14), 0xc33707d6, 9) - STEP(G, c, d, a, b, GET(3), 0xf4d50d87, 14) - STEP(G, b, c, d, a, GET(8), 0x455a14ed, 20) - STEP(G, a, b, c, d, GET(13), 0xa9e3e905, 5) - STEP(G, d, a, b, c, GET(2), 0xfcefa3f8, 9) - STEP(G, c, d, a, b, GET(7), 0x676f02d9, 14) - STEP(G, b, c, d, a, GET(12), 0x8d2a4c8a, 20) - - /* Round 3 */ - STEP(H, a, b, c, d, GET(5), 0xfffa3942, 4) - STEP(H2, d, a, b, c, GET(8), 0x8771f681, 11) - STEP(H, c, d, a, b, GET(11), 0x6d9d6122, 16) - STEP(H2, b, c, d, a, GET(14), 0xfde5380c, 23) - STEP(H, a, b, c, d, GET(1), 0xa4beea44, 4) - STEP(H2, d, a, b, c, GET(4), 0x4bdecfa9, 11) - STEP(H, c, d, a, b, GET(7), 0xf6bb4b60, 16) - STEP(H2, b, c, d, a, GET(10), 0xbebfbc70, 23) - STEP(H, a, b, c, d, GET(13), 0x289b7ec6, 4) - STEP(H2, d, a, b, c, GET(0), 0xeaa127fa, 11) - STEP(H, c, d, a, b, GET(3), 0xd4ef3085, 16) - STEP(H2, b, c, d, a, GET(6), 0x04881d05, 23) - STEP(H, a, b, c, d, GET(9), 0xd9d4d039, 4) - STEP(H2, d, a, b, c, GET(12), 0xe6db99e5, 11) - STEP(H, c, d, a, b, GET(15), 0x1fa27cf8, 16) - STEP(H2, b, c, d, a, GET(2), 0xc4ac5665, 23) - - /* Round 4 */ - STEP(I, a, b, c, d, GET(0), 0xf4292244, 6) - STEP(I, d, a, b, c, GET(7), 0x432aff97, 10) - STEP(I, c, d, a, b, GET(14), 0xab9423a7, 15) - STEP(I, b, c, d, a, GET(5), 0xfc93a039, 21) - STEP(I, a, b, c, d, GET(12), 0x655b59c3, 6) - STEP(I, d, a, b, c, GET(3), 0x8f0ccc92, 10) - STEP(I, c, d, a, b, GET(10), 0xffeff47d, 15) - STEP(I, b, c, d, a, GET(1), 0x85845dd1, 21) - STEP(I, a, b, c, d, GET(8), 0x6fa87e4f, 6) - STEP(I, d, a, b, c, GET(15), 0xfe2ce6e0, 10) - STEP(I, c, d, a, b, GET(6), 0xa3014314, 15) - STEP(I, b, c, d, a, GET(13), 0x4e0811a1, 21) - STEP(I, a, b, c, d, GET(4), 0xf7537e82, 6) - STEP(I, d, a, b, c, GET(11), 0xbd3af235, 10) - STEP(I, c, d, a, b, GET(2), 0x2ad7d2bb, 15) - STEP(I, b, c, d, a, GET(9), 0xeb86d391, 21) - - a += saved_a; - b += saved_b; - c += saved_c; - d += saved_d; - - ptr += 64; - } - while (size -= 64); - - ctx->a = a; - ctx->b = b; - ctx->c = c; - ctx->d = d; - - return ptr; -} - -void MD5_CTX_Init(MD5_CTX *ctx) -{ - ctx->a = 0x67452301; - ctx->b = 0xefcdab89; - ctx->c = 0x98badcfe; - ctx->d = 0x10325476; - - ctx->lo = 0; - ctx->hi = 0; -} - -void MD5_CTX_Update(MD5_CTX *ctx, const void *data, unsigned long size) -{ - MD5_u32plus saved_lo; - unsigned long used, available; - - saved_lo = ctx->lo; - if ((ctx->lo = (saved_lo + size) & 0x1fffffff) < saved_lo) - ctx->hi++; - ctx->hi += size >> 29; - - used = saved_lo & 0x3f; - - if (used) - { - available = 64 - used; - - if (size < available) - { - memcpy(&ctx->buffer[used], data, size); - return; - } - - memcpy(&ctx->buffer[used], data, available); - data = (const unsigned char *)data + available; - size -= available; - body(ctx, ctx->buffer, 64); - } - - if (size >= 64) - { - data = body(ctx, data, size & ~(unsigned long)0x3f); - size &= 0x3f; - } - - memcpy(ctx->buffer, data, size); -} - -void MD5_CTX_Final(unsigned char *result, MD5_CTX *ctx) -{ - unsigned long used, available; - - used = ctx->lo & 0x3f; - - ctx->buffer[used++] = 0x80; - - available = 64 - used; - - if (available < 8) - { - memset(&ctx->buffer[used], 0, available); - body(ctx, ctx->buffer, 64); - used = 0; - available = 64; - } - - memset(&ctx->buffer[used], 0, available - 8); - - ctx->lo <<= 3; - ctx->buffer[56] = ctx->lo; - ctx->buffer[57] = ctx->lo >> 8; - ctx->buffer[58] = ctx->lo >> 16; - ctx->buffer[59] = ctx->lo >> 24; - ctx->buffer[60] = ctx->hi; - ctx->buffer[61] = ctx->hi >> 8; - ctx->buffer[62] = ctx->hi >> 16; - ctx->buffer[63] = ctx->hi >> 24; - - body(ctx, ctx->buffer, 64); - - result[0] = ctx->a; - result[1] = ctx->a >> 8; - result[2] = ctx->a >> 16; - result[3] = ctx->a >> 24; - result[4] = ctx->b; - result[5] = ctx->b >> 8; - result[6] = ctx->b >> 16; - result[7] = ctx->b >> 24; - result[8] = ctx->c; - result[9] = ctx->c >> 8; - result[10] = ctx->c >> 16; - result[11] = ctx->c >> 24; - result[12] = ctx->d; - result[13] = ctx->d >> 8; - result[14] = ctx->d >> 16; - result[15] = ctx->d >> 24; - - memset(ctx, 0, sizeof(*ctx)); -} - -#endif diff --git a/contrib/mdx/md5.h b/contrib/mdx/md5.h deleted file mode 100644 index 2156e3b..0000000 --- a/contrib/mdx/md5.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - * This is an OpenSSL-compatible implementation of the RSA Data Security, Inc. - * MD5 Message-Digest Algorithm (RFC 1321). - * - * Homepage: - * http://openwall.info/wiki/people/solar/software/public-domain-source-code/md5 - * - * Author: - * Alexander Peslyak, better known as Solar Designer - * - * This software was written by Alexander Peslyak in 2001. No copyright is - * claimed, and the software is hereby placed in the public domain. - * In case this attempt to disclaim copyright and place the software in the - * public domain is deemed null and void, then the software is - * Copyright (c) 2001 Alexander Peslyak and it is hereby released to the - * general public under the following terms: - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted. - * - * There's ABSOLUTELY NO WARRANTY, express or implied. - * - * See md5.c for more information. - */ - -#ifdef HAVE_OPENSSL -#include -#elif !defined(_MD5_H) -#define _MD5_H - -/* Any 32-bit or wider unsigned integer data type will do */ -typedef unsigned int MD5_u32plus; - -typedef struct -{ - MD5_u32plus lo, hi; - MD5_u32plus a, b, c, d; - unsigned char buffer[64]; - MD5_u32plus block[16]; -} MD5_CTX; - -extern void MD5_CTX_Init(MD5_CTX *ctx); -extern void MD5_CTX_Update(MD5_CTX *ctx, const void *data, unsigned long size); -extern void MD5_CTX_Final(unsigned char *result, MD5_CTX *ctx); - -#endif diff --git a/contrib/rc4/rc4.c b/contrib/rc4/rc4.c deleted file mode 100644 index 7e99184..0000000 --- a/contrib/rc4/rc4.c +++ /dev/null @@ -1,104 +0,0 @@ -/* - * rc4.c - * - * Copyright (c) 1996-2000 Whistle Communications, Inc. - * All rights reserved. - * - * Subject to the following obligations and disclaimer of warranty, use and - * redistribution of this software, in source or object code forms, with or - * without modifications are expressly permitted by Whistle Communications; - * provided, however, that: - * 1. Any and all reproductions of the source or object code must include the - * copyright notice above and the following disclaimer of warranties; and - * 2. No rights are granted, in any manner or form, to use Whistle - * Communications, Inc. trademarks, including the mark "WHISTLE - * COMMUNICATIONS" on advertising, endorsements, or otherwise except as - * such appears in the above copyright notice or in the software. - * - * THIS SOFTWARE IS BEING PROVIDED BY WHISTLE COMMUNICATIONS "AS IS", AND - * TO THE MAXIMUM EXTENT PERMITTED BY LAW, WHISTLE COMMUNICATIONS MAKES NO - * REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, REGARDING THIS SOFTWARE, - * INCLUDING WITHOUT LIMITATION, ANY AND ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. - * WHISTLE COMMUNICATIONS DOES NOT WARRANT, GUARANTEE, OR MAKE ANY - * REPRESENTATIONS REGARDING THE USE OF, OR THE RESULTS OF THE USE OF THIS - * SOFTWARE IN TERMS OF ITS CORRECTNESS, ACCURACY, RELIABILITY OR OTHERWISE. - * IN NO EVENT SHALL WHISTLE COMMUNICATIONS BE LIABLE FOR ANY DAMAGES - * RESULTING FROM OR ARISING OUT OF ANY USE OF THIS SOFTWARE, INCLUDING - * WITHOUT LIMITATION, ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, - * PUNITIVE, OR CONSEQUENTIAL DAMAGES, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES, LOSS OF USE, DATA OR PROFITS, HOWEVER CAUSED AND UNDER 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 WHISTLE COMMUNICATIONS IS ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * $FreeBSD: src/sys/crypto/rc4/rc4.c,v 1.2.2.1 2000/04/18 04:48:31 archie Exp $ - */ - -#include "rc4.h" - -static __inline void -swap_bytes(uint8_t *a, uint8_t *b) -{ - uint8_t temp; - - temp = *a; - *a = *b; - *b = temp; -} - -/* - * Initialize an RC4 state buffer using the supplied key, - * which can have arbitrary length. - */ -void -rc4_init(struct rc4_state *const state, const uint8_t *key, int keylen) -{ - uint8_t j; - int i; - - /* Initialize state with identity permutation */ - for (i = 0; i < 256; i++) - state->perm[i] = (uint8_t)i; - state->index1 = 0; - state->index2 = 0; - - /* Randomize the permutation using key data */ - for (j = i = 0; i < 256; i++) - { - j += state->perm[i] + key[i % keylen]; - swap_bytes(&state->perm[i], &state->perm[j]); - } -} - -/* - * Encrypt some data using the supplied RC4 state buffer. - * The input and output buffers may be the same buffer. - * Since RC4 is a stream cypher, this function is used - * for both encryption and decryption. - */ -void -rc4_crypt(struct rc4_state *const state, - const uint8_t *inbuf, uint8_t *outbuf, int buflen) -{ - int i; - uint8_t j; - - for (i = 0; i < buflen; i++) - { - - /* Update modification indicies */ - state->index1++; - state->index2 += state->perm[state->index1]; - - /* Modify permutation */ - swap_bytes(&state->perm[state->index1], - &state->perm[state->index2]); - - /* Encrypt/decrypt next byte */ - j = state->perm[state->index1] + state->perm[state->index2]; - outbuf[i] = inbuf[i] ^ state->perm[j]; - } -} - diff --git a/contrib/rc4/rc4.h b/contrib/rc4/rc4.h deleted file mode 100644 index 57e14f9..0000000 --- a/contrib/rc4/rc4.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - * rc4.h - * - * Copyright (c) 1996-2000 Whistle Communications, Inc. - * All rights reserved. - * - * Subject to the following obligations and disclaimer of warranty, use and - * redistribution of this software, in source or object code forms, with or - * without modifications are expressly permitted by Whistle Communications; - * provided, however, that: - * 1. Any and all reproductions of the source or object code must include the - * copyright notice above and the following disclaimer of warranties; and - * 2. No rights are granted, in any manner or form, to use Whistle - * Communications, Inc. trademarks, including the mark "WHISTLE - * COMMUNICATIONS" on advertising, endorsements, or otherwise except as - * such appears in the above copyright notice or in the software. - * - * THIS SOFTWARE IS BEING PROVIDED BY WHISTLE COMMUNICATIONS "AS IS", AND - * TO THE MAXIMUM EXTENT PERMITTED BY LAW, WHISTLE COMMUNICATIONS MAKES NO - * REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, REGARDING THIS SOFTWARE, - * INCLUDING WITHOUT LIMITATION, ANY AND ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. - * WHISTLE COMMUNICATIONS DOES NOT WARRANT, GUARANTEE, OR MAKE ANY - * REPRESENTATIONS REGARDING THE USE OF, OR THE RESULTS OF THE USE OF THIS - * SOFTWARE IN TERMS OF ITS CORRECTNESS, ACCURACY, RELIABILITY OR OTHERWISE. - * IN NO EVENT SHALL WHISTLE COMMUNICATIONS BE LIABLE FOR ANY DAMAGES - * RESULTING FROM OR ARISING OUT OF ANY USE OF THIS SOFTWARE, INCLUDING - * WITHOUT LIMITATION, ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, - * PUNITIVE, OR CONSEQUENTIAL DAMAGES, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES, LOSS OF USE, DATA OR PROFITS, HOWEVER CAUSED AND UNDER 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 WHISTLE COMMUNICATIONS IS ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * $FreeBSD: src/sys/crypto/rc4/rc4.h,v 1.2.2.1 2000/04/18 04:48:32 archie Exp $ - */ - -#ifndef _SYS_CRYPTO_RC4_RC4_H_ -#define _SYS_CRYPTO_RC4_RC4_H_ - -#include - -struct rc4_state -{ - uint8_t perm[256]; - uint8_t index1; - uint8_t index2; -}; - -extern void rc4_init(struct rc4_state *state, const uint8_t *key, int keylen); -extern void rc4_crypt(struct rc4_state *state, - const uint8_t *inbuf, uint8_t *outbuf, int buflen); - -#endif - diff --git a/contrib/spnego/spnego.asn1 b/contrib/spnego/spnego.asn1 deleted file mode 100644 index 34424ed..0000000 --- a/contrib/spnego/spnego.asn1 +++ /dev/null @@ -1,72 +0,0 @@ --- This file has been taken from heimdal gssapi implementation --- and modified by Julien 'Lta' BALLET to work with libtasn1 - -SPNEGO { } - -DEFINITIONS EXPLICIT TAGS ::= -BEGIN - -MechType ::= OBJECT IDENTIFIER - -MechTypeList ::= SEQUENCE OF MechType - -ContextFlags ::= BIT STRING { - delegFlag (0), - mutualFlag (1), - replayFlag (2), - sequenceFlag (3), - anonFlag (4), - confFlag (5), - integFlag (6) -} - -NegHints ::= SEQUENCE { - hintName [0] GeneralString OPTIONAL, - hintAddress [1] OCTET STRING OPTIONAL -} - -NegTokenInitWin ::= SEQUENCE { - mechTypes [0] MechTypeList, - reqFlags [1] ContextFlags OPTIONAL, - mechToken [2] OCTET STRING OPTIONAL, - negHints [3] NegHints OPTIONAL -} - -NegTokenInit ::= SEQUENCE { - mechTypes [0] MechTypeList, - reqFlags [1] ContextFlags OPTIONAL, - mechToken [2] OCTET STRING OPTIONAL, - mechListMIC [3] OCTET STRING OPTIONAL --, - -- ... -} - --- NB: negResult is not OPTIONAL in the new SPNEGO spec but --- Windows clients do not always send it -NegTokenResp ::= SEQUENCE { - negResult [0] ENUMERATED { - accept_completed (0), - accept_incomplete (1), - reject (2), - request-mic (3) } OPTIONAL, - supportedMech [1] MechType OPTIONAL, - responseToken [2] OCTET STRING OPTIONAL, - mechListMIC [3] OCTET STRING OPTIONAL -- , - -- ... -} - -NegotiationToken ::= CHOICE { - negTokenInit[0] NegTokenInit, - negTokenResp[1] NegTokenResp -} - -NegotiationTokenWin ::= CHOICE { - negTokenInit[0] NegTokenInitWin -} - -GSSAPIContextToken ::= [APPLICATION 0] IMPLICIT SEQUENCE { - thisMech MechType, - spnego NegotiationToken -} - -END - diff --git a/contrib/spnego/spnego_asn1.h b/contrib/spnego/spnego_asn1.h deleted file mode 100644 index 14af201..0000000 --- a/contrib/spnego/spnego_asn1.h +++ /dev/null @@ -1,11 +0,0 @@ - -#ifndef __SPNEGO_ASN1_CONF_H_ -#define __SPNEGO_ASN1_CONF_H_ - -#include "config.h" - -#include "libtasn1.h" - -extern const asn1_static_node spnego_asn1_conf[]; - -#endif diff --git a/doc/Doxyfile.in b/doc/Doxyfile.in deleted file mode 100644 index 53c5684..0000000 --- a/doc/Doxyfile.in +++ /dev/null @@ -1,2304 +0,0 @@ -# Doxyfile 1.8.6 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project. -# -# All text after a double hash (##) is considered a comment and is placed in -# front of the TAG it is preceding. -# -# All text after a single hash (#) is considered a comment and will be ignored. -# The format is: -# TAG = value [value, ...] -# For lists, items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (\" \"). - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# This tag specifies the encoding used for all characters in the config file -# that follow. The default is UTF-8 which is also the encoding used for all text -# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv -# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv -# for the list of possible encodings. -# The default value is: UTF-8. - -DOXYFILE_ENCODING = UTF-8 - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by -# double-quotes, unless you are using Doxywizard) that should identify the -# project for which the documentation is generated. This name is used in the -# title of most generated pages and in a few other places. -# The default value is: My Project. - -PROJECT_NAME = @PACKAGE_NAME@ - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. This -# could be handy for archiving the generated documentation or if some version -# control system is used. - -PROJECT_NUMBER = @BDSM_PACKAGE_VERSION@ - -# Using the PROJECT_BRIEF tag one can provide an optional one line description -# for a project that appears at the top of each page and should give viewer a -# quick idea about the purpose of the project. Keep the description short. - -PROJECT_BRIEF = "Minimalist and read-only SMB client lib" - -# With the PROJECT_LOGO tag one can specify an logo or icon that is included in -# the documentation. The maximum height of the logo should not exceed 55 pixels -# and the maximum width should not exceed 200 pixels. Doxygen will copy the logo -# to the output directory. - -PROJECT_LOGO = - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path -# into which the generated documentation will be written. If a relative path is -# entered, it will be relative to the location where doxygen was started. If -# left blank the current directory will be used. - -OUTPUT_DIRECTORY = doc - -# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 4096 sub- -# directories (in 2 levels) under the output directory of each output format and -# will distribute the generated files over these directories. Enabling this -# option can be useful when feeding doxygen a huge amount of source files, where -# putting all generated files in the same directory would otherwise causes -# performance problems for the file system. -# The default value is: NO. - -CREATE_SUBDIRS = NO - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, -# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), -# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, -# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), -# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, -# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, -# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, -# Ukrainian and Vietnamese. -# The default value is: English. - -OUTPUT_LANGUAGE = English - -# If the BRIEF_MEMBER_DESC tag is set to YES doxygen will include brief member -# descriptions after the members that are listed in the file and class -# documentation (similar to Javadoc). Set to NO to disable this. -# The default value is: YES. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES doxygen will prepend the brief -# description of a member or function before the detailed description -# -# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. -# The default value is: YES. - -REPEAT_BRIEF = YES - -# This tag implements a quasi-intelligent brief description abbreviator that is -# used to form the text in various listings. Each string in this list, if found -# as the leading text of the brief description, will be stripped from the text -# and the result, after processing the whole list, is used as the annotated -# text. Otherwise, the brief description is used as-is. If left blank, the -# following values are used ($name is automatically replaced with the name of -# the entity):The $name class, The $name widget, The $name file, is, provides, -# specifies, contains, represents, a, an and the. - -ABBREVIATE_BRIEF = - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# doxygen will generate a detailed section even if there is only a brief -# description. -# The default value is: NO. - -ALWAYS_DETAILED_SEC = NO - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all -# inherited members of a class in the documentation of that class as if those -# members were ordinary class members. Constructors, destructors and assignment -# operators of the base classes will not be shown. -# The default value is: NO. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES doxygen will prepend the full path -# before files name in the file list and in the header files. If set to NO the -# shortest path that makes the file name unique will be used -# The default value is: YES. - -FULL_PATH_NAMES = YES - -# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. -# Stripping is only done if one of the specified strings matches the left-hand -# part of the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the path to -# strip. -# -# Note that you can specify absolute paths here, but also relative paths, which -# will be relative from the directory where doxygen is started. -# This tag requires that the tag FULL_PATH_NAMES is set to YES. - -STRIP_FROM_PATH = - -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the -# path mentioned in the documentation of a class, which tells the reader which -# header file to include in order to use a class. If left blank only the name of -# the header file containing the class definition is used. Otherwise one should -# specify the list of include paths that are normally passed to the compiler -# using the -I flag. - -STRIP_FROM_INC_PATH = - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but -# less readable) file names. This can be useful is your file systems doesn't -# support long names like on DOS, Mac, or CD-ROM. -# The default value is: NO. - -SHORT_NAMES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the -# first line (until the first dot) of a Javadoc-style comment as the brief -# description. If set to NO, the Javadoc-style will behave just like regular Qt- -# style comments (thus requiring an explicit @brief command for a brief -# description.) -# The default value is: NO. - -JAVADOC_AUTOBRIEF = NO - -# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first -# line (until the first dot) of a Qt-style comment as the brief description. If -# set to NO, the Qt-style will behave just like regular Qt-style comments (thus -# requiring an explicit \brief command for a brief description.) -# The default value is: NO. - -QT_AUTOBRIEF = NO - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a -# multi-line C++ special comment block (i.e. a block of //! or /// comments) as -# a brief description. This used to be the default behavior. The new default is -# to treat a multi-line C++ comment block as a detailed description. Set this -# tag to YES if you prefer the old behavior instead. -# -# Note that setting this tag to YES also means that rational rose comments are -# not recognized any more. -# The default value is: NO. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the -# documentation from any documented member that it re-implements. -# The default value is: YES. - -INHERIT_DOCS = YES - -# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce a -# new page for each member. If set to NO, the documentation of a member will be -# part of the file/class/namespace that contains it. -# The default value is: NO. - -SEPARATE_MEMBER_PAGES = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen -# uses this value to replace tabs by spaces in code fragments. -# Minimum value: 1, maximum value: 16, default value: 4. - -TAB_SIZE = 2 - -# This tag can be used to specify a number of aliases that act as commands in -# the documentation. An alias has the form: -# name=value -# For example adding -# "sideeffect=@par Side Effects:\n" -# will allow you to put the command \sideeffect (or @sideeffect) in the -# documentation, which will result in a user-defined paragraph with heading -# "Side Effects:". You can put \n's in the value part of an alias to insert -# newlines. - -ALIASES = - -# This tag can be used to specify a number of word-keyword mappings (TCL only). -# A mapping has the form "name=value". For example adding "class=itcl::class" -# will allow you to use the command class in the itcl::class meaning. - -TCL_SUBST = - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources -# only. Doxygen will then generate output that is more tailored for C. For -# instance, some of the names that are used will be different. The list of all -# members will be omitted, etc. -# The default value is: NO. - -OPTIMIZE_OUTPUT_FOR_C = YES - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or -# Python sources only. Doxygen will then generate output that is more tailored -# for that language. For instance, namespaces will be presented as packages, -# qualified scopes will look different, etc. -# The default value is: NO. - -OPTIMIZE_OUTPUT_JAVA = NO - -# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran -# sources. Doxygen will then generate output that is tailored for Fortran. -# The default value is: NO. - -OPTIMIZE_FOR_FORTRAN = NO - -# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL -# sources. Doxygen will then generate output that is tailored for VHDL. -# The default value is: NO. - -OPTIMIZE_OUTPUT_VHDL = NO - -# Doxygen selects the parser to use depending on the extension of the files it -# parses. With this tag you can assign which parser to use for a given -# extension. Doxygen has a built-in mapping, but you can override or extend it -# using this tag. The format is ext=language, where ext is a file extension, and -# language is one of the parsers supported by doxygen: IDL, Java, Javascript, -# C#, C, C++, D, PHP, Objective-C, Python, Fortran, VHDL. For instance to make -# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C -# (default is Fortran), use: inc=Fortran f=C. -# -# Note For files without extension you can use no_extension as a placeholder. -# -# Note that for custom extensions you also need to set FILE_PATTERNS otherwise -# the files are not read by doxygen. - -EXTENSION_MAPPING = - -# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments -# according to the Markdown format, which allows for more readable -# documentation. See http://daringfireball.net/projects/markdown/ for details. -# The output of markdown processing is further processed by doxygen, so you can -# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in -# case of backward compatibilities issues. -# The default value is: YES. - -MARKDOWN_SUPPORT = YES - -# When enabled doxygen tries to link words that correspond to documented -# classes, or namespaces to their corresponding documentation. Such a link can -# be prevented in individual cases by by putting a % sign in front of the word -# or globally by setting AUTOLINK_SUPPORT to NO. -# The default value is: YES. - -AUTOLINK_SUPPORT = YES - -# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want -# to include (a tag file for) the STL sources as input, then you should set this -# tag to YES in order to let doxygen match functions declarations and -# definitions whose arguments contain STL classes (e.g. func(std::string); -# versus func(std::string) {}). This also make the inheritance and collaboration -# diagrams that involve STL classes more complete and accurate. -# The default value is: NO. - -BUILTIN_STL_SUPPORT = NO - -# If you use Microsoft's C++/CLI language, you should set this option to YES to -# enable parsing support. -# The default value is: NO. - -CPP_CLI_SUPPORT = NO - -# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: -# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen -# will parse them like normal C++ but will assume all classes use public instead -# of private inheritance when no explicit protection keyword is present. -# The default value is: NO. - -SIP_SUPPORT = NO - -# For Microsoft's IDL there are propget and propput attributes to indicate -# getter and setter methods for a property. Setting this option to YES will make -# doxygen to replace the get and set methods by a property in the documentation. -# This will only work if the methods are indeed getting or setting a simple -# type. If this is not the case, or you want to show the methods anyway, you -# should set this option to NO. -# The default value is: YES. - -IDL_PROPERTY_SUPPORT = NO - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. -# The default value is: NO. - -DISTRIBUTE_GROUP_DOC = NO - -# Set the SUBGROUPING tag to YES to allow class member groups of the same type -# (for instance a group of public functions) to be put as a subgroup of that -# type (e.g. under the Public Functions section). Set it to NO to prevent -# subgrouping. Alternatively, this can be done per class using the -# \nosubgrouping command. -# The default value is: YES. - -SUBGROUPING = YES - -# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions -# are shown inside the group in which they are included (e.g. using \ingroup) -# instead of on a separate page (for HTML and Man pages) or section (for LaTeX -# and RTF). -# -# Note that this feature does not work in combination with -# SEPARATE_MEMBER_PAGES. -# The default value is: NO. - -INLINE_GROUPED_CLASSES = NO - -# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions -# with only public data fields or simple typedef fields will be shown inline in -# the documentation of the scope in which they are defined (i.e. file, -# namespace, or group documentation), provided this scope is documented. If set -# to NO, structs, classes, and unions are shown on a separate page (for HTML and -# Man pages) or section (for LaTeX and RTF). -# The default value is: NO. - -INLINE_SIMPLE_STRUCTS = NO - -# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or -# enum is documented as struct, union, or enum with the name of the typedef. So -# typedef struct TypeS {} TypeT, will appear in the documentation as a struct -# with name TypeT. When disabled the typedef will appear as a member of a file, -# namespace, or class. And the struct will be named TypeS. This can typically be -# useful for C code in case the coding convention dictates that all compound -# types are typedef'ed and only the typedef is referenced, never the tag name. -# The default value is: NO. - -TYPEDEF_HIDES_STRUCT = NO - -# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This -# cache is used to resolve symbols given their name and scope. Since this can be -# an expensive process and often the same symbol appears multiple times in the -# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small -# doxygen will become slower. If the cache is too large, memory is wasted. The -# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range -# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 -# symbols. At the end of a run doxygen will report the cache usage and suggest -# the optimal cache size from a speed point of view. -# Minimum value: 0, maximum value: 9, default value: 0. - -LOOKUP_CACHE_SIZE = 0 - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. Private -# class members and static file members will be hidden unless the -# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. -# Note: This will also disable the warnings about undocumented members that are -# normally produced when WARNINGS is set to YES. -# The default value is: NO. - -EXTRACT_ALL = NO - -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class will -# be included in the documentation. -# The default value is: NO. - -EXTRACT_PRIVATE = NO - -# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal -# scope will be included in the documentation. -# The default value is: NO. - -EXTRACT_PACKAGE = NO - -# If the EXTRACT_STATIC tag is set to YES all static members of a file will be -# included in the documentation. -# The default value is: NO. - -EXTRACT_STATIC = NO - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) defined -# locally in source files will be included in the documentation. If set to NO -# only classes defined in header files are included. Does not have any effect -# for Java sources. -# The default value is: YES. - -EXTRACT_LOCAL_CLASSES = NO - -# This flag is only useful for Objective-C code. When set to YES local methods, -# which are defined in the implementation section but not in the interface are -# included in the documentation. If set to NO only methods in the interface are -# included. -# The default value is: NO. - -EXTRACT_LOCAL_METHODS = NO - -# If this flag is set to YES, the members of anonymous namespaces will be -# extracted and appear in the documentation as a namespace called -# 'anonymous_namespace{file}', where file will be replaced with the base name of -# the file that contains the anonymous namespace. By default anonymous namespace -# are hidden. -# The default value is: NO. - -EXTRACT_ANON_NSPACES = NO - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all -# undocumented members inside documented classes or files. If set to NO these -# members will be included in the various overviews, but no documentation -# section is generated. This option has no effect if EXTRACT_ALL is enabled. -# The default value is: NO. - -HIDE_UNDOC_MEMBERS = YES - -# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. If set -# to NO these classes will be included in the various overviews. This option has -# no effect if EXTRACT_ALL is enabled. -# The default value is: NO. - -HIDE_UNDOC_CLASSES = YES - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend -# (class|struct|union) declarations. If set to NO these declarations will be -# included in the documentation. -# The default value is: NO. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any -# documentation blocks found inside the body of a function. If set to NO these -# blocks will be appended to the function's detailed documentation block. -# The default value is: NO. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation that is typed after a -# \internal command is included. If the tag is set to NO then the documentation -# will be excluded. Set it to YES to include the internal documentation. -# The default value is: NO. - -INTERNAL_DOCS = NO - -# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file -# names in lower-case letters. If set to YES upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. -# The default value is: system dependent. - -CASE_SENSE_NAMES = YES - -# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with -# their full class and namespace scopes in the documentation. If set to YES the -# scope will be hidden. -# The default value is: NO. - -HIDE_SCOPE_NAMES = NO - -# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of -# the files that are included by a file in the documentation of that file. -# The default value is: YES. - -SHOW_INCLUDE_FILES = YES - -# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each -# grouped member an include statement to the documentation, telling the reader -# which file to include in order to use the member. -# The default value is: NO. - -SHOW_GROUPED_MEMB_INC = NO - -# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include -# files with double quotes in the documentation rather than with sharp brackets. -# The default value is: NO. - -FORCE_LOCAL_INCLUDES = NO - -# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the -# documentation for inline members. -# The default value is: YES. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the -# (detailed) documentation of file and class members alphabetically by member -# name. If set to NO the members will appear in declaration order. -# The default value is: YES. - -SORT_MEMBER_DOCS = YES - -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief -# descriptions of file, namespace and class members alphabetically by member -# name. If set to NO the members will appear in declaration order. Note that -# this will also influence the order of the classes in the class list. -# The default value is: NO. - -SORT_BRIEF_DOCS = NO - -# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the -# (brief and detailed) documentation of class members so that constructors and -# destructors are listed first. If set to NO the constructors will appear in the -# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. -# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief -# member documentation. -# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting -# detailed member documentation. -# The default value is: NO. - -SORT_MEMBERS_CTORS_1ST = NO - -# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy -# of group names into alphabetical order. If set to NO the group names will -# appear in their defined order. -# The default value is: NO. - -SORT_GROUP_NAMES = NO - -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by -# fully-qualified names, including namespaces. If set to NO, the class list will -# be sorted only by class name, not including the namespace part. -# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the alphabetical -# list. -# The default value is: NO. - -SORT_BY_SCOPE_NAME = NO - -# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper -# type resolution of all parameters of a function it will reject a match between -# the prototype and the implementation of a member function even if there is -# only one candidate or it is obvious which candidate to choose by doing a -# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still -# accept a match between prototype and implementation in such cases. -# The default value is: NO. - -STRICT_PROTO_MATCHING = NO - -# The GENERATE_TODOLIST tag can be used to enable ( YES) or disable ( NO) the -# todo list. This list is created by putting \todo commands in the -# documentation. -# The default value is: YES. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable ( YES) or disable ( NO) the -# test list. This list is created by putting \test commands in the -# documentation. -# The default value is: YES. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable ( YES) or disable ( NO) the bug -# list. This list is created by putting \bug commands in the documentation. -# The default value is: YES. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable ( YES) or disable ( NO) -# the deprecated list. This list is created by putting \deprecated commands in -# the documentation. -# The default value is: YES. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional documentation -# sections, marked by \if ... \endif and \cond -# ... \endcond blocks. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the -# initial value of a variable or macro / define can have for it to appear in the -# documentation. If the initializer consists of more lines than specified here -# it will be hidden. Use a value of 0 to hide initializers completely. The -# appearance of the value of individual variables and macros / defines can be -# controlled using \showinitializer or \hideinitializer command in the -# documentation regardless of this setting. -# Minimum value: 0, maximum value: 10000, default value: 30. - -MAX_INITIALIZER_LINES = 30 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at -# the bottom of the documentation of classes and structs. If set to YES the list -# will mention the files that were used to generate the documentation. -# The default value is: YES. - -SHOW_USED_FILES = YES - -# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This -# will remove the Files entry from the Quick Index and from the Folder Tree View -# (if specified). -# The default value is: YES. - -SHOW_FILES = YES - -# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces -# page. This will remove the Namespaces entry from the Quick Index and from the -# Folder Tree View (if specified). -# The default value is: YES. - -SHOW_NAMESPACES = YES - -# The FILE_VERSION_FILTER tag can be used to specify a program or script that -# doxygen should invoke to get the current version for each file (typically from -# the version control system). Doxygen will invoke the program by executing (via -# popen()) the command command input-file, where command is the value of the -# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided -# by doxygen. Whatever the program writes to standard output is used as the file -# version. For an example see the documentation. - -FILE_VERSION_FILTER = - -# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed -# by doxygen. The layout file controls the global structure of the generated -# output files in an output format independent way. To create the layout file -# that represents doxygen's defaults, run doxygen with the -l option. You can -# optionally specify a file name after the option, if omitted DoxygenLayout.xml -# will be used as the name of the layout file. -# -# Note that if you run doxygen from a directory containing a file called -# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE -# tag is left empty. - -LAYOUT_FILE = - -# The CITE_BIB_FILES tag can be used to specify one or more bib files containing -# the reference definitions. This must be a list of .bib files. The .bib -# extension is automatically appended if omitted. This requires the bibtex tool -# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. -# For LaTeX the style of the bibliography can be controlled using -# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the -# search path. Do not use file names with spaces, bibtex cannot handle them. See -# also \cite for info how to create references. - -CITE_BIB_FILES = - -#--------------------------------------------------------------------------- -# Configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated to -# standard output by doxygen. If QUIET is set to YES this implies that the -# messages are off. -# The default value is: NO. - -QUIET = NO - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated to standard error ( stderr) by doxygen. If WARNINGS is set to YES -# this implies that the warnings are on. -# -# Tip: Turn warnings on while writing the documentation. -# The default value is: YES. - -WARNINGS = YES - -# If the WARN_IF_UNDOCUMENTED tag is set to YES, then doxygen will generate -# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag -# will automatically be disabled. -# The default value is: YES. - -WARN_IF_UNDOCUMENTED = NO - -# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some parameters -# in a documented function, or documenting parameters that don't exist or using -# markup commands wrongly. -# The default value is: YES. - -WARN_IF_DOC_ERROR = YES - -# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that -# are documented, but have no documentation for their parameters or return -# value. If set to NO doxygen will only warn about wrong or incomplete parameter -# documentation, but not about the absence of documentation. -# The default value is: NO. - -WARN_NO_PARAMDOC = NO - -# The WARN_FORMAT tag determines the format of the warning messages that doxygen -# can produce. The string should contain the $file, $line, and $text tags, which -# will be replaced by the file and line number from which the warning originated -# and the warning text. Optionally the format may contain $version, which will -# be replaced by the version of the file (if it could be obtained via -# FILE_VERSION_FILTER) -# The default value is: $file:$line: $text. - -WARN_FORMAT = "$file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning and error -# messages should be written. If left blank the output is written to standard -# error (stderr). - -WARN_LOGFILE = - -#--------------------------------------------------------------------------- -# Configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag is used to specify the files and/or directories that contain -# documented source files. You may enter file names like myfile.cpp or -# directories like /usr/src/myproject. Separate the files or directories with -# spaces. -# Note: If this tag is empty the current directory is searched. - -INPUT = @abs_top_srcdir@/include \ - @abs_top_srcdir@/include/bdsm - -# This tag can be used to specify the character encoding of the source files -# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses -# libiconv (or the iconv built into libc) for the transcoding. See the libiconv -# documentation (see: http://www.gnu.org/software/libiconv) for the list of -# possible encodings. -# The default value is: UTF-8. - -INPUT_ENCODING = UTF-8 - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and -# *.h) to filter out the source-files in the directories. If left blank the -# following patterns are tested:*.c, *.cc, *.cxx, *.cpp, *.c++, *.java, *.ii, -# *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, -# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, -# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, -# *.qsf, *.as and *.js. - -FILE_PATTERNS = - -# The RECURSIVE tag can be used to specify whether or not subdirectories should -# be searched for input files as well. -# The default value is: NO. - -RECURSIVE = NO - -# The EXCLUDE tag can be used to specify files and/or directories that should be -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. -# -# Note that relative paths are relative to the directory from which doxygen is -# run. - -EXCLUDE = - -# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or -# directories that are symbolic links (a Unix file system feature) are excluded -# from the input. -# The default value is: NO. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. -# -# Note that the wildcards are matched against the file with absolute path, so to -# exclude all test directories for example use the pattern */test/* - -EXCLUDE_PATTERNS = - -# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names -# (namespaces, classes, functions, etc.) that should be excluded from the -# output. The symbol name can be a fully qualified name, a word, or if the -# wildcard * is used, a substring. Examples: ANamespace, AClass, -# AClass::ANamespace, ANamespace::*Test -# -# Note that the wildcards are matched against the file with absolute path, so to -# exclude all test directories use the pattern */test/* - -EXCLUDE_SYMBOLS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or directories -# that contain example code fragments that are included (see the \include -# command). - -EXAMPLE_PATH = - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and -# *.h) to filter out the source-files in the directories. If left blank all -# files are included. - -EXAMPLE_PATTERNS = - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude commands -# irrespective of the value of the RECURSIVE tag. -# The default value is: NO. - -EXAMPLE_RECURSIVE = NO - -# The IMAGE_PATH tag can be used to specify one or more files or directories -# that contain images that are to be included in the documentation (see the -# \image command). - -IMAGE_PATH = - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command: -# -# -# -# where is the value of the INPUT_FILTER tag, and is the -# name of an input file. Doxygen will then use the output that the filter -# program writes to standard output. If FILTER_PATTERNS is specified, this tag -# will be ignored. -# -# Note that the filter must not add or remove lines; it is applied before the -# code is scanned, but not when the output code is generated. If lines are added -# or removed, the anchors will not be placed correctly. - -INPUT_FILTER = - -# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. The filters are a list of the form: pattern=filter -# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how -# filters are used. If the FILTER_PATTERNS tag is empty or if none of the -# patterns match the file name, INPUT_FILTER is applied. - -FILTER_PATTERNS = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER ) will also be used to filter the input files that are used for -# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). -# The default value is: NO. - -FILTER_SOURCE_FILES = NO - -# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file -# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and -# it is also possible to disable source filtering for a specific pattern using -# *.ext= (so without naming a filter). -# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. - -FILTER_SOURCE_PATTERNS = - -# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that -# is part of the input, its contents will be placed on the main page -# (index.html). This can be useful if you have a project on for instance GitHub -# and want to reuse the introduction page also for the doxygen output. - -USE_MDFILE_AS_MAINPAGE = - -#--------------------------------------------------------------------------- -# Configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will be -# generated. Documented entities will be cross-referenced with these sources. -# -# Note: To get rid of all source code in the generated output, make sure that -# also VERBATIM_HEADERS is set to NO. -# The default value is: NO. - -SOURCE_BROWSER = NO - -# Setting the INLINE_SOURCES tag to YES will include the body of functions, -# classes and enums directly into the documentation. -# The default value is: NO. - -INLINE_SOURCES = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any -# special comment blocks from generated source code fragments. Normal C, C++ and -# Fortran comments will always remain visible. -# The default value is: YES. - -STRIP_CODE_COMMENTS = YES - -# If the REFERENCED_BY_RELATION tag is set to YES then for each documented -# function all documented functions referencing it will be listed. -# The default value is: NO. - -REFERENCED_BY_RELATION = NO - -# If the REFERENCES_RELATION tag is set to YES then for each documented function -# all documented entities called/used by that function will be listed. -# The default value is: NO. - -REFERENCES_RELATION = NO - -# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set -# to YES, then the hyperlinks from functions in REFERENCES_RELATION and -# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will -# link to the documentation. -# The default value is: YES. - -REFERENCES_LINK_SOURCE = YES - -# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the -# source code will show a tooltip with additional information such as prototype, -# brief description and links to the definition and documentation. Since this -# will make the HTML file larger and loading of large files a bit slower, you -# can opt to disable this feature. -# The default value is: YES. -# This tag requires that the tag SOURCE_BROWSER is set to YES. - -SOURCE_TOOLTIPS = YES - -# If the USE_HTAGS tag is set to YES then the references to source code will -# point to the HTML generated by the htags(1) tool instead of doxygen built-in -# source browser. The htags tool is part of GNU's global source tagging system -# (see http://www.gnu.org/software/global/global.html). You will need version -# 4.8.6 or higher. -# -# To use it do the following: -# - Install the latest version of global -# - Enable SOURCE_BROWSER and USE_HTAGS in the config file -# - Make sure the INPUT points to the root of the source tree -# - Run doxygen as normal -# -# Doxygen will invoke htags (and that will in turn invoke gtags), so these -# tools must be available from the command line (i.e. in the search path). -# -# The result: instead of the source browser generated by doxygen, the links to -# source code will now point to the output of htags. -# The default value is: NO. -# This tag requires that the tag SOURCE_BROWSER is set to YES. - -USE_HTAGS = NO - -# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a -# verbatim copy of the header file for each class for which an include is -# specified. Set to NO to disable this. -# See also: Section \class. -# The default value is: YES. - -VERBATIM_HEADERS = NO - -#--------------------------------------------------------------------------- -# Configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all -# compounds will be generated. Enable this if the project contains a lot of -# classes, structs, unions or interfaces. -# The default value is: YES. - -ALPHABETICAL_INDEX = YES - -# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in -# which the alphabetical index list will be split. -# Minimum value: 1, maximum value: 20, default value: 5. -# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. - -COLS_IN_ALPHA_INDEX = 5 - -# In case all classes in a project start with a common prefix, all classes will -# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag -# can be used to specify a prefix (or a list of prefixes) that should be ignored -# while generating the index headers. -# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES doxygen will generate HTML output -# The default value is: YES. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a -# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of -# it. -# The default directory is: html. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_OUTPUT = html - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each -# generated HTML page (for example: .htm, .php, .asp). -# The default value is: .html. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a user-defined HTML header file for -# each generated HTML page. If the tag is left blank doxygen will generate a -# standard header. -# -# To get valid HTML the header file that includes any scripts and style sheets -# that doxygen needs, which is dependent on the configuration options used (e.g. -# the setting GENERATE_TREEVIEW). It is highly recommended to start with a -# default header using -# doxygen -w html new_header.html new_footer.html new_stylesheet.css -# YourConfigFile -# and then modify the file new_header.html. See also section "Doxygen usage" -# for information on how to generate the default header that doxygen normally -# uses. -# Note: The header is subject to change so you typically have to regenerate the -# default header when upgrading to a newer version of doxygen. For a description -# of the possible markers and block names see the documentation. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_HEADER = - -# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each -# generated HTML page. If the tag is left blank doxygen will generate a standard -# footer. See HTML_HEADER for more information on how to generate a default -# footer and what special commands can be used inside the footer. See also -# section "Doxygen usage" for information on how to generate the default footer -# that doxygen normally uses. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_FOOTER = - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style -# sheet that is used by each HTML page. It can be used to fine-tune the look of -# the HTML output. If left blank doxygen will generate a default style sheet. -# See also section "Doxygen usage" for information on how to generate the style -# sheet that doxygen normally uses. -# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as -# it is more robust and this tag (HTML_STYLESHEET) will in the future become -# obsolete. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_STYLESHEET = - -# The HTML_EXTRA_STYLESHEET tag can be used to specify an additional user- -# defined cascading style sheet that is included after the standard style sheets -# created by doxygen. Using this option one can overrule certain style aspects. -# This is preferred over using HTML_STYLESHEET since it does not replace the -# standard style sheet and is therefor more robust against future updates. -# Doxygen will copy the style sheet file to the output directory. For an example -# see the documentation. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_EXTRA_STYLESHEET = - -# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or -# other source files which should be copied to the HTML output directory. Note -# that these files will be copied to the base HTML output directory. Use the -# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these -# files. In the HTML_STYLESHEET file, use the file name only. Also note that the -# files will be copied as-is; there are no commands or markers available. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_EXTRA_FILES = - -# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen -# will adjust the colors in the stylesheet and background images according to -# this color. Hue is specified as an angle on a colorwheel, see -# http://en.wikipedia.org/wiki/Hue for more information. For instance the value -# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 -# purple, and 360 is red again. -# Minimum value: 0, maximum value: 359, default value: 220. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_COLORSTYLE_HUE = 220 - -# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors -# in the HTML output. For a value of 0 the output will use grayscales only. A -# value of 255 will produce the most vivid colors. -# Minimum value: 0, maximum value: 255, default value: 100. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_COLORSTYLE_SAT = 100 - -# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the -# luminance component of the colors in the HTML output. Values below 100 -# gradually make the output lighter, whereas values above 100 make the output -# darker. The value divided by 100 is the actual gamma applied, so 80 represents -# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not -# change the gamma. -# Minimum value: 40, maximum value: 240, default value: 80. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_COLORSTYLE_GAMMA = 80 - -# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML -# page will contain the date and time when the page was generated. Setting this -# to NO can help when comparing the output of multiple runs. -# The default value is: YES. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_TIMESTAMP = YES - -# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML -# documentation will contain sections that can be hidden and shown after the -# page has loaded. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_DYNAMIC_SECTIONS = NO - -# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries -# shown in the various tree structured indices initially; the user can expand -# and collapse entries dynamically later on. Doxygen will expand the tree to -# such a level that at most the specified number of entries are visible (unless -# a fully collapsed tree already exceeds this amount). So setting the number of -# entries 1 will produce a full collapsed tree by default. 0 is a special value -# representing an infinite number of entries and will result in a full expanded -# tree by default. -# Minimum value: 0, maximum value: 9999, default value: 100. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_INDEX_NUM_ENTRIES = 100 - -# If the GENERATE_DOCSET tag is set to YES, additional index files will be -# generated that can be used as input for Apple's Xcode 3 integrated development -# environment (see: http://developer.apple.com/tools/xcode/), introduced with -# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a -# Makefile in the HTML output directory. Running make will produce the docset in -# that directory and running make install will install the docset in -# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at -# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html -# for more information. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_DOCSET = NO - -# This tag determines the name of the docset feed. A documentation feed provides -# an umbrella under which multiple documentation sets from a single provider -# (such as a company or product suite) can be grouped. -# The default value is: Doxygen generated docs. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_FEEDNAME = "Doxygen generated docs" - -# This tag specifies a string that should uniquely identify the documentation -# set bundle. This should be a reverse domain-name style string, e.g. -# com.mycompany.MyDocSet. Doxygen will append .docset to the name. -# The default value is: org.doxygen.Project. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_BUNDLE_ID = org.doxygen.Project - -# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify -# the documentation publisher. This should be a reverse domain-name style -# string, e.g. com.mycompany.MyDocSet.documentation. -# The default value is: org.doxygen.Publisher. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_PUBLISHER_ID = org.doxygen.Publisher - -# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. -# The default value is: Publisher. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_PUBLISHER_NAME = Publisher - -# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three -# additional HTML index files: index.hhp, index.hhc, and index.hhk. The -# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop -# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on -# Windows. -# -# The HTML Help Workshop contains a compiler that can convert all HTML output -# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML -# files are now used as the Windows 98 help format, and will replace the old -# Windows help format (.hlp) on all Windows platforms in the future. Compressed -# HTML files also contain an index, a table of contents, and you can search for -# words in the documentation. The HTML workshop also contains a viewer for -# compressed HTML files. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_HTMLHELP = NO - -# The CHM_FILE tag can be used to specify the file name of the resulting .chm -# file. You can add a path in front of the file if the result should not be -# written to the html output directory. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -CHM_FILE = - -# The HHC_LOCATION tag can be used to specify the location (absolute path -# including file name) of the HTML help compiler ( hhc.exe). If non-empty -# doxygen will try to run the HTML help compiler on the generated index.hhp. -# The file has to be specified with full path. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -HHC_LOCATION = - -# The GENERATE_CHI flag controls if a separate .chi index file is generated ( -# YES) or that it should be included in the master .chm file ( NO). -# The default value is: NO. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -GENERATE_CHI = NO - -# The CHM_INDEX_ENCODING is used to encode HtmlHelp index ( hhk), content ( hhc) -# and project file content. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -CHM_INDEX_ENCODING = - -# The BINARY_TOC flag controls whether a binary table of contents is generated ( -# YES) or a normal table of contents ( NO) in the .chm file. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members to -# the table of contents of the HTML help documentation and to the tree view. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -TOC_EXPAND = NO - -# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and -# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that -# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help -# (.qch) of the generated HTML documentation. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_QHP = NO - -# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify -# the file name of the resulting .qch file. The path specified is relative to -# the HTML output folder. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QCH_FILE = - -# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help -# Project output. For more information please see Qt Help Project / Namespace -# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). -# The default value is: org.doxygen.Project. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_NAMESPACE = org.doxygen.Project - -# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt -# Help Project output. For more information please see Qt Help Project / Virtual -# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- -# folders). -# The default value is: doc. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_VIRTUAL_FOLDER = doc - -# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom -# filter to add. For more information please see Qt Help Project / Custom -# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- -# filters). -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_CUST_FILTER_NAME = - -# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the -# custom filter to add. For more information please see Qt Help Project / Custom -# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- -# filters). -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_CUST_FILTER_ATTRS = - -# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this -# project's filter section matches. Qt Help Project / Filter Attributes (see: -# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_SECT_FILTER_ATTRS = - -# The QHG_LOCATION tag can be used to specify the location of Qt's -# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the -# generated .qhp file. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHG_LOCATION = - -# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be -# generated, together with the HTML files, they form an Eclipse help plugin. To -# install this plugin and make it available under the help contents menu in -# Eclipse, the contents of the directory containing the HTML and XML files needs -# to be copied into the plugins directory of eclipse. The name of the directory -# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. -# After copying Eclipse needs to be restarted before the help appears. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_ECLIPSEHELP = NO - -# A unique identifier for the Eclipse help plugin. When installing the plugin -# the directory name containing the HTML and XML files should also have this -# name. Each documentation set should have its own identifier. -# The default value is: org.doxygen.Project. -# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. - -ECLIPSE_DOC_ID = org.doxygen.Project - -# If you want full control over the layout of the generated HTML pages it might -# be necessary to disable the index and replace it with your own. The -# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top -# of each HTML page. A value of NO enables the index and the value YES disables -# it. Since the tabs in the index contain the same information as the navigation -# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -DISABLE_INDEX = NO - -# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index -# structure should be generated to display hierarchical information. If the tag -# value is set to YES, a side panel will be generated containing a tree-like -# index structure (just like the one that is generated for HTML Help). For this -# to work a browser that supports JavaScript, DHTML, CSS and frames is required -# (i.e. any modern browser). Windows users are probably better off using the -# HTML help feature. Via custom stylesheets (see HTML_EXTRA_STYLESHEET) one can -# further fine-tune the look of the index. As an example, the default style -# sheet generated by doxygen has an example that shows how to put an image at -# the root of the tree instead of the PROJECT_NAME. Since the tree basically has -# the same information as the tab index, you could consider setting -# DISABLE_INDEX to YES when enabling this option. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_TREEVIEW = NO - -# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that -# doxygen will group on one line in the generated HTML documentation. -# -# Note that a value of 0 will completely suppress the enum values from appearing -# in the overview section. -# Minimum value: 0, maximum value: 20, default value: 4. -# This tag requires that the tag GENERATE_HTML is set to YES. - -ENUM_VALUES_PER_LINE = 4 - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used -# to set the initial width (in pixels) of the frame in which the tree is shown. -# Minimum value: 0, maximum value: 1500, default value: 250. -# This tag requires that the tag GENERATE_HTML is set to YES. - -TREEVIEW_WIDTH = 250 - -# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open links to -# external symbols imported via tag files in a separate window. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -EXT_LINKS_IN_WINDOW = NO - -# Use this tag to change the font size of LaTeX formulas included as images in -# the HTML documentation. When you change the font size after a successful -# doxygen run you need to manually remove any form_*.png images from the HTML -# output directory to force them to be regenerated. -# Minimum value: 8, maximum value: 50, default value: 10. -# This tag requires that the tag GENERATE_HTML is set to YES. - -FORMULA_FONTSIZE = 10 - -# Use the FORMULA_TRANPARENT tag to determine whether or not the images -# generated for formulas are transparent PNGs. Transparent PNGs are not -# supported properly for IE 6.0, but are supported on all modern browsers. -# -# Note that when changing this option you need to delete any form_*.png files in -# the HTML output directory before the changes have effect. -# The default value is: YES. -# This tag requires that the tag GENERATE_HTML is set to YES. - -FORMULA_TRANSPARENT = YES - -# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see -# http://www.mathjax.org) which uses client side Javascript for the rendering -# instead of using prerendered bitmaps. Use this if you do not have LaTeX -# installed or if you want to formulas look prettier in the HTML output. When -# enabled you may also need to install MathJax separately and configure the path -# to it using the MATHJAX_RELPATH option. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -USE_MATHJAX = NO - -# When MathJax is enabled you can set the default output format to be used for -# the MathJax output. See the MathJax site (see: -# http://docs.mathjax.org/en/latest/output.html) for more details. -# Possible values are: HTML-CSS (which is slower, but has the best -# compatibility), NativeMML (i.e. MathML) and SVG. -# The default value is: HTML-CSS. -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_FORMAT = HTML-CSS - -# When MathJax is enabled you need to specify the location relative to the HTML -# output directory using the MATHJAX_RELPATH option. The destination directory -# should contain the MathJax.js script. For instance, if the mathjax directory -# is located at the same level as the HTML output directory, then -# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax -# Content Delivery Network so you can quickly see the result without installing -# MathJax. However, it is strongly recommended to install a local copy of -# MathJax from http://www.mathjax.org before deployment. -# The default value is: http://cdn.mathjax.org/mathjax/latest. -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest - -# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax -# extension names that should be enabled during MathJax rendering. For example -# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_EXTENSIONS = - -# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces -# of code that will be used on startup of the MathJax code. See the MathJax site -# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an -# example see the documentation. -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_CODEFILE = - -# When the SEARCHENGINE tag is enabled doxygen will generate a search box for -# the HTML output. The underlying search engine uses javascript and DHTML and -# should work on any modern browser. Note that when using HTML help -# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) -# there is already a search function so this one should typically be disabled. -# For large projects the javascript based search engine can be slow, then -# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to -# search using the keyboard; to jump to the search box use + S -# (what the is depends on the OS and browser, but it is typically -# , /