1
0
mirror of https://github.com/samba-team/samba.git synced 2025-11-26 04:23:49 +03:00

r18031: Merge my replace fixes:

* libreplace can now build stand-alone
 * add stub testsuite for libreplace
 * make talloc/tdb/ldb use libreplace
This commit is contained in:
Jelmer Vernooij
2006-09-04 12:21:42 +00:00
committed by Gerald (Jerry) Carter
parent cd495d8931
commit fe7ca4b145
31 changed files with 1700 additions and 864 deletions

View File

@@ -1,3 +1,6 @@
source/lib/ldb/bin
*.pc
autom4te.cache
*.d
*.o
*.x
@@ -42,7 +45,8 @@ source/heimdal/lib/krb5/k524_err.?
source/heimdal/lib/krb5/krb5_err.?
source/heimdal/lib/roken/vis.h
source/include/build.h
source/include/config.h
config.h
config.h.in
source/include/config_tmp.h
source/include/config_tmp.h.in
source/ldap_server/proto.h

View File

@@ -2,6 +2,7 @@
# Start MODULE ldb_objectguid
[MODULE::ldb_objectguid]
SUBSYSTEM = ldb
PRIVATE_DEPENDENCIES = LIBTALLOC
INIT_FUNCTION = objectguid_module_init
OBJ_FILES = \
objectguid.o
@@ -14,6 +15,7 @@ PUBLIC_DEPENDENCIES = \
# Start MODULE ldb_samldb
[MODULE::ldb_samldb]
SUBSYSTEM = ldb
PRIVATE_DEPENDENCIES = LIBTALLOC
INIT_FUNCTION = samldb_module_init
OBJ_FILES = \
samldb.o
@@ -26,6 +28,7 @@ OBJ_FILES = \
[MODULE::ldb_samba3sam]
SUBSYSTEM = ldb
INIT_FUNCTION = ldb_samba3sam_module_init
PRIVATE_DEPENDENCIES = LIBTALLOC
OBJ_FILES = \
samba3sam.o
#
@@ -37,6 +40,7 @@ OBJ_FILES = \
[MODULE::ldb_entryUUID]
SUBSYSTEM = ldb
INIT_FUNCTION = ldb_entryUUID_module_init
PRIVATE_DEPENDENCIES = LIBTALLOC
ENABLE = YES
OBJ_FILES = \
entryUUID.o
@@ -60,6 +64,7 @@ OBJ_FILES = \
# Start MODULE ldb_rootdse
[MODULE::ldb_rootdse]
SUBSYSTEM = ldb
PRIVATE_DEPENDENCIES = LIBTALLOC
INIT_FUNCTION = rootdse_module_init
OBJ_FILES = \
rootdse.o
@@ -74,7 +79,7 @@ SUBSYSTEM = ldb
INIT_FUNCTION = password_hash_module_init
OBJ_FILES = password_hash.o
PUBLIC_DEPENDENCIES = HEIMDAL_KRB5
PRIVATE_DEPENDENCIES = HEIMDAL_HDB_KEYS
PRIVATE_DEPENDENCIES = HEIMDAL_HDB_KEYS LIBTALLOC
#
# End MODULE ldb_password_hash
################################################
@@ -82,6 +87,7 @@ PRIVATE_DEPENDENCIES = HEIMDAL_HDB_KEYS
################################################
# Start MODULE ldb_local_password
[MODULE::ldb_local_password]
PRIVATE_DEPENDENCIES = LIBTALLOC
SUBSYSTEM = ldb
INIT_FUNCTION = local_password_module_init
OBJ_FILES = local_password.o
@@ -92,6 +98,7 @@ OBJ_FILES = local_password.o
################################################
# Start MODULE ldb_kludge_acl
[MODULE::ldb_kludge_acl]
PRIVATE_DEPENDENCIES = LIBTALLOC
SUBSYSTEM = ldb
INIT_FUNCTION = ldb_kludge_acl_init
OBJ_FILES = \
@@ -106,6 +113,7 @@ PUBLIC_DEPENDENCIES = \
# Start MODULE ldb_extended_dn
[MODULE::ldb_extended_dn]
SUBSYSTEM = ldb
PRIVATE_DEPENDENCIES = LIBTALLOC
INIT_FUNCTION = ldb_extended_dn_init
OBJ_FILES = \
extended_dn.o
@@ -117,6 +125,7 @@ OBJ_FILES = \
# Start MODULE ldb_partition
[MODULE::ldb_partition]
SUBSYSTEM = ldb
PRIVATE_DEPENDENCIES = LIBTALLOC
INIT_FUNCTION = ldb_partition_init
OBJ_FILES = \
partition.o
@@ -128,6 +137,7 @@ OBJ_FILES = \
# Start MODULE ldb_schema
[MODULE::ldb_schema]
SUBSYSTEM = ldb
PRIVATE_DEPENDENCIES = LIBTALLOC
INIT_FUNCTION = ldb_schema_init
OBJ_FILES = \
schema.o schema_syntax.o

File diff suppressed because it is too large Load Diff

View File

@@ -262,7 +262,7 @@ find_dynamic_method (krb5_context context,
if (prefix == NULL)
krb5_errx(context, 1, "out of memory");
if (asprintf(&path, LIBDIR "/hdb_%s.so", prefix) == -1)
if (asprintf(&path, HDBDIR "/hdb_%s.so", prefix) == -1)
krb5_errx(context, 1, "out of memory");
#ifndef RTLD_NOW

View File

@@ -22,6 +22,8 @@
/* path to sysconf - should we force this to samba LIBDIR ? */
#define SYSCONFDIR "/etc"
/* HDB module dir - set to Samba LIBDIR/hdb ? */
#define HDBDIR "/usr/heimdal/lib"
/* Maximum values on all known systems */
#define MaxHostNameLen (64+4)

View File

@@ -6,6 +6,7 @@ XSLTPROC = @XSLTPROC@
DOXYGEN = @DOXYGEN@
prefix = @prefix@
exec_prefix = @exec_prefix@
datarootdir = @datarootdir@
includedir = @includedir@
libdir = @libdir@
bindir = @bindir@
@@ -21,20 +22,7 @@ CFLAGS=-I$(srcdir)/include -Iinclude -I$(srcdir) -I$(srcdir)/.. \
-I$(srcdir)/../tdb/include -I$(srcdir)/../tdb -I$(srcdir)/../talloc \
-DLIBDIR=\"$(libdir)\" -DSHLIBEXT=\"@SHLIBEXT@\" -DUSE_MMAP=1 @CFLAGS@
LIB_FLAGS=-Llib -lldb @LIBS@
REPDIR=replace
REPLACE_OBJ=$(REPDIR)/replace.o $(REPDIR)/timegm.o
TDBDIR=tdb
TDB_OBJ=$(TDBDIR)/common/tdb.o $(TDBDIR)/common/dump.o \
$(TDBDIR)/common/io.o $(TDBDIR)/common/lock.o \
$(TDBDIR)/common/open.o $(TDBDIR)/common/traverse.o \
$(TDBDIR)/common/freelist.o $(TDBDIR)/common/error.o \
$(TDBDIR)/common/transaction.o
TALLOCDIR=talloc
TALLOC_OBJ=$(TALLOCDIR)/talloc.o
LIB_FLAGS=-L$(srcdir)/../tdb -L$(srcdir)/../talloc -Llib -lldb -ltdb -ltalloc @LIBS@ @REPLACE_LIB@
LDB_TDB_DIR=ldb_tdb
LDB_TDB_OBJ=$(LDB_TDB_DIR)/ldb_tdb.o \
@@ -53,7 +41,7 @@ MODULES_OBJ=$(MODDIR)/operational.o $(MODDIR)/schema.o $(MODDIR)/rdn_name.o \
$(MODDIR)/objectclass.o \
$(MODDIR)/paged_results.o $(MODDIR)/sort.o $(MODDIR)/asq.o
OBJS = $(MODULES_OBJ) $(COMMON_OBJ) $(LDB_TDB_OBJ) $(TDB_OBJ) $(TALLOC_OBJ) $(EXTRA_OBJ) $(REPLACE_OBJ)
OBJS = $(MODULES_OBJ) $(COMMON_OBJ) $(LDB_TDB_OBJ) $(TDB_OBJ) $(TALLOC_OBJ) $(EXTRA_OBJ)
LDB_LIB = lib/libldb.a
@@ -63,7 +51,7 @@ LIBS = $(LDB_LIB)
EXAMPLES = examples/ldbreader examples/ldifreader
DIRS = lib bin common replace ldb_tdb ldb_ldap ldb_sqlite3 modules tools examples tdb talloc
DIRS = lib bin common ldb_tdb ldb_ldap ldb_sqlite3 modules tools examples tdb talloc
all: dirs $(OBJS) $(LDB_LIB) $(BINS) $(EXAMPLES) manpages
@@ -159,3 +147,7 @@ etags:
ctags:
ctags `find $(srcdir) -name "*.[ch]"`
@REPLACE_LIB@:
cd @REPLACE_DIR@ && ./autogen.sh && ./configure
$(MAKE) -C @REPLACE_DIR@

View File

@@ -1,5 +1,7 @@
#!/bin/sh
rm -rf autom4te.cache/
autoheader || exit 1
autoconf || exit 1

View File

@@ -1,6 +1,7 @@
################################################
# Start MODULE ldb_asq
[MODULE::ldb_asq]
PRIVATE_DEPENDENCIES = LIBTALLOC
INIT_FUNCTION = ldb_asq_init
SUBSYSTEM = ldb
OBJ_FILES = \
@@ -11,6 +12,7 @@ OBJ_FILES = \
################################################
# Start MODULE ldb_server_sort
[MODULE::ldb_server_sort]
PRIVATE_DEPENDENCIES = LIBTALLOC
INIT_FUNCTION = ldb_sort_init
SUBSYSTEM = ldb
OBJ_FILES = \
@@ -22,6 +24,7 @@ OBJ_FILES = \
# Start MODULE ldb_paged_results
[MODULE::ldb_paged_results]
INIT_FUNCTION = ldb_paged_results_init
PRIVATE_DEPENDENCIES = LIBTALLOC
SUBSYSTEM = ldb
OBJ_FILES = \
modules/paged_results.o
@@ -32,6 +35,7 @@ OBJ_FILES = \
# Start MODULE ldb_paged_results
[MODULE::ldb_paged_searches]
INIT_FUNCTION = ldb_paged_searches_init
PRIVATE_DEPENDENCIES = LIBTALLOC
SUBSYSTEM = ldb
OBJ_FILES = \
modules/paged_searches.o
@@ -42,6 +46,7 @@ OBJ_FILES = \
# Start MODULE ldb_operational
[MODULE::ldb_operational]
SUBSYSTEM = ldb
PRIVATE_DEPENDENCIES = LIBTALLOC
INIT_FUNCTION = ldb_operational_init
OBJ_FILES = \
modules/operational.o
@@ -52,6 +57,7 @@ OBJ_FILES = \
# Start MODULE ldb_objectclass
[MODULE::ldb_objectclass]
INIT_FUNCTION = ldb_objectclass_init
PRIVATE_DEPENDENCIES = LIBTALLOC
SUBSYSTEM = ldb
OBJ_FILES = \
modules/objectclass.o
@@ -62,6 +68,7 @@ OBJ_FILES = \
# Start MODULE ldb_rdn_name
[MODULE::ldb_rdn_name]
SUBSYSTEM = ldb
PRIVATE_DEPENDENCIES = LIBTALLOC
INIT_FUNCTION = ldb_rdn_name_init
OBJ_FILES = \
modules/rdn_name.o
@@ -82,6 +89,7 @@ OBJ_FILES = \
# Start MODULE ldb_ildap
[MODULE::ldb_ildap]
SUBSYSTEM = ldb
PRIVATE_DEPENDENCIES = LIBTALLOC
INIT_FUNCTION = ldb_ildap_init
ALIASES = ldapi ldaps ldap
OBJ_FILES = \
@@ -94,6 +102,7 @@ PUBLIC_DEPENDENCIES = \
################################################
# Start MODULE ldb_map
[MODULE::ldb_map]
PRIVATE_DEPENDENCIES = LIBTALLOC
SUBSYSTEM = ldb
OBJ_FILES = \
modules/ldb_map_inbound.o \
@@ -106,6 +115,7 @@ OBJ_FILES = \
# Start MODULE ldb_skel
[MODULE::ldb_skel]
SUBSYSTEM = ldb
PRIVATE_DEPENDENCIES = LIBTALLOC
INIT_FUNCTION = ldb_skel_init
OBJ_FILES = modules/skel.o
# End MODULE ldb_skel
@@ -115,11 +125,12 @@ OBJ_FILES = modules/skel.o
# Start MODULE ldb_sqlite3
[MODULE::ldb_sqlite3]
SUBSYSTEM = ldb
PRIVATE_DEPENDENCIES = LIBTALLOC
INIT_FUNCTION = ldb_sqlite3_init
OBJ_FILES = \
ldb_sqlite3/ldb_sqlite3.o
PUBLIC_DEPENDENCIES = \
SQLITE3
SQLITE3 LIBTALLOC
# End MODULE ldb_sqlite3
################################################
@@ -136,23 +147,13 @@ OBJ_FILES = \
ldb_tdb/ldb_cache.o \
ldb_tdb/ldb_tdb_wrap.o
PUBLIC_DEPENDENCIES = \
LIBTDB
LIBTDB LIBTALLOC
# End MODULE ldb_tdb
################################################
################################################
# Start MODULE ldb_replace
[MODULE::ldb_replace]
SUBSYSTEM = ldb
OBJ_FILES = \
replace/timegm.o \
replace/replace.o
# End MODULE ldb_replace
################################################
./lib/ldb/common/ldb_modules.o: lib/ldb/common/ldb_modules.c Makefile
@echo Compiling $<
@$(CC) $(CFLAGS) $(PICFLAG) -DMODULESDIR=\"$(MODULESDIR)/ldb\" -DSHLIBEXT=\"$(SHLIBEXT)\" -c $< -o $@
@$(CC) -Iinclude $(CFLAGS) -Ilib/talloc -Ilib/ldb $(PICFLAG) -DLDBMODULESDIR=\"$(MODULESDIR)/ldb\" -DSHLIBEXT=\"$(SHLIBEXT)\" -c $< -o $@
################################################
# Start SUBSYSTEM ldb
@@ -186,6 +187,7 @@ PUBLIC_HEADERS = include/ldb.h include/ldb_errors.h
################################################
# Start SUBSYSTEM LDBSAMBA
[SUBSYSTEM::LDBSAMBA]
PRIVATE_DEPENDENCIES = ldb
PRIVATE_PROTO_HEADER = samba/ldif_handlers.h
PUBLIC_DEPENDENCIES = LIBSECURITY SAMDB
OBJ_FILES = \

View File

@@ -70,6 +70,9 @@ fi
AC_SUBST(TESTS)
AC_SUBST(EXTRA_OBJ)
sinclude(replace.m4)
SMB_REPLACE_FUNCS(strtoll)
sinclude(config.m4)
sinclude(../talloc/config.m4)
sinclude(../tdb/config.m4)

View File

@@ -6,19 +6,19 @@
#ifdef _SAMBA_BUILD_
#include "system/filesys.h"
#include "system/locale.h"
#include "system/time.h"
/* tell ldb we have the internal ldap code */
#define HAVE_ILDAP 1
#else /*_SAMBA_BUILD_*/
#else
#include "config.h"
#endif /*_SAMBA_BUILD_*/
#ifndef _GNU_SOURCE
#define _GNU_SOURCE
#endif
#include "config.h"
#ifdef HAVE_REPLACE_H
#include "replace.h"
#endif
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
@@ -51,8 +51,6 @@ typedef int (*comparison_fn_t)(const void *, const void *);
#include "talloc.h"
#endif /*_SAMBA_BUILD_*/
#include "ldb.h"
#include "ldb_errors.h"
#include "ldb_private.h"

View File

@@ -1,12 +0,0 @@
AC_CHECK_HEADERS([stdint.h inttypes.h])
AC_CHECK_TYPE(uint8_t, unsigned char)
AC_CHECK_TYPE(int64_t, long long)
AC_CHECK_TYPE(uint64_t, unsigned long long)
AC_CHECK_TYPE(comparison_fn_t,
[AC_DEFINE(HAVE_COMPARISON_FN_T, 1,[Whether or not we have comparison_fn_t])])
AC_CHECK_FUNCS(strerror timegm strnlen setenv)
AC_CHECK_FUNCS(strtoull __strtoull strtouq strtoll __strtoll strtoq)
AC_HAVE_DECL(errno, [#include <errno.h>])
AC_CHECK_HEADERS(strings.h)

View File

@@ -1,100 +0,0 @@
/*
Unix SMB/CIFS implementation.
replacement routines for broken systems
Copyright (C) Andrew Tridgell 1992-2006
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include "includes.h"
#include "ldb/include/includes.h"
#if !defined(HAVE_STRNLEN) && !defined(_SAMBA_BUILD_)
/**
Some platforms don't have strnlen
**/
size_t strnlen(const char *s, size_t n)
{
int i;
for (i=0; s[i] && i<n; i++)
/* noop */ ;
return i;
}
#endif
#ifndef HAVE_STRTOLL
long long int strtoll(const char *str, char **endptr, int base)
{
#ifdef HAVE_STRTOQ
return strtoq(str, endptr, base);
#elif defined(HAVE___STRTOLL)
return __strtoll(str, endptr, base);
#elif SIZEOF_LONG == SIZEOF_LONG_LONG
return (long long int) strtol(str, endptr, base);
#else
# error "You need a strtoll function"
#endif
}
#endif
#ifndef HAVE_STRTOULL
unsigned long long int strtoull(const char *str, char **endptr, int base)
{
#ifdef HAVE_STRTOUQ
return strtouq(str, endptr, base);
#elif defined(HAVE___STRTOULL)
return __strtoull(str, endptr, base);
#elif SIZEOF_LONG == SIZEOF_LONG_LONG
return (unsigned long long int) strtoul(str, endptr, base);
#else
# error "You need a strtoull function"
#endif
}
#endif
#ifndef HAVE_SETENV
int setenv(const char *name, const char *value, int overwrite)
{
char *p;
size_t l1, l2;
int ret;
if (!overwrite && getenv(name)) {
return 0;
}
l1 = strlen(name);
l2 = strlen(value);
p = malloc(l1+l2+2);
if (p == NULL) {
return -1;
}
memcpy(p, name, l1);
p[l1] = '=';
memcpy(p+l1+1, value, l2);
p[l1+l2+1] = 0;
ret = putenv(p);
if (ret != 0) {
free(p);
}
return ret;
}
#endif

View File

@@ -0,0 +1,37 @@
CC = @CC@
prefix = @prefix@
exec_prefix = @exec_prefix@
bindir = @bindir@
includedir = @includedir@
libdir = @libdir@
VPATH = @srcdir@
srcdir = @srcdir@
builddir = @builddir@
INSTALL = @INSTALL@
OBJS = dlfcn.o getpass.o replace.o snprintf.o
all: libreplace.a
install: all
$(INSTALL) libreplace.a $(libdir)
libreplace.a: $(OBJS)
ar -rv $@ $(OBJS)
@-ranlib $@
test: testsuite
./testsuite
TEST_OBJS = test/testsuite.o
testsuite: libreplace.a $(TEST_OBJS)
$(CC) -o testsuite $(TEST_OBJS)
.c.o:
@echo Compiling $*.c
@mkdir -p `dirname $@`
$(CC) $(CFLAGS) -c $< -o $@
clean:
rm -f *.o

View File

@@ -2,10 +2,10 @@ This subsystem ensures that we can always use a certain core set of
functions and types, that are either provided by the OS or by replacement
functions / definitions in this subsystem. The aim is to try to stick
to POSIX functions in here as much as possible. Convenience functions
that are available on no platform at all belong in different subsystems
that are available on no platform at all belong in other subsystems
(such as LIBUTIL).
The following functions are guarenteed:
The following functions are guaranteed:
ftruncate
strlcpy
@@ -21,8 +21,6 @@ setlinebuf
vsyslog
timegm
setenv
strtoull
strtoll
strndup
strnlen
waitpid
@@ -52,6 +50,8 @@ pwrite
getpass
readline (the library)
inet_ntoa
strtoll
strtoull
Types:
bool
@@ -59,6 +59,7 @@ socklen_t
uint_t
uint{8,16,32,64}_t
int{8,16,32,64}_t
intptr_t
Constants:
PATH_NAME_MAX

10
source/lib/replace/autogen.sh Executable file
View File

@@ -0,0 +1,10 @@
#!/bin/sh
rm -rf autom4te.cache
autoheader || exit 1
autoconf || exit 1
echo "Now run ./configure and then make."
exit 0

View File

@@ -1,8 +1,11 @@
AC_CHECK_HEADERS([stdint.h inttypes.h])
AC_CHECK_TYPE(uint_t, unsigned int)
AC_CHECK_TYPE(uint8_t, unsigned char)
AC_CHECK_TYPE(int8_t, char)
AC_CHECK_TYPE(int16_t, short)
AC_CHECK_TYPE(uint16_t, unsigned short)
AC_CHECK_TYPE(int32_t, long)
AC_CHECK_TYPE(intptr_t, unsigned long long)
AC_CHECK_TYPE(uint32_t, unsigned long)
AC_CHECK_TYPE(ssize_t, int)
@@ -170,3 +173,18 @@ else
fi
AC_CHECK_HEADERS([sys/param.h limits.h])
AC_CHECK_TYPE(comparison_fn_t,
[AC_DEFINE(HAVE_COMPARISON_FN_T, 1,[Whether or not we have comparison_fn_t])])
AC_CHECK_FUNCS(timegm strnlen setenv)
AC_CHECK_FUNCS(strtoull __strtoull strtouq strtoll __strtoll strtoq)
AC_TRY_CPP([
#define eprintf(...) fprintf(stderr, __VA_ARGS__)
eprintf("bla", "bar");
], [], [AC_MSG_ERROR([__VA_ARGS__ is required])])
# Check prerequisites
AC_CHECK_FUNCS([memset printf syslog], [],
[ AC_MSG_ERROR([Required function not found])])

View File

@@ -9,6 +9,7 @@ OBJ_FILES = \
##############################
# Start SUBSYSTEM LIBREPLACE
[SUBSYSTEM::LIBREPLACE]
CFLAGS = -Ilib/replace
OBJ_FILES = replace.o \
snprintf.o \
dlfcn.o \

View File

@@ -0,0 +1,52 @@
AC_DEFUN([SMB_EXT_LIB], [echo -n ""])
AC_DEFUN([SMB_ENABLE], [echo -n ""])
dnl see if a declaration exists for a function or variable
dnl defines HAVE_function_DECL if it exists
dnl AC_HAVE_DECL(var, includes)
AC_DEFUN(AC_HAVE_DECL,
[
AC_CACHE_CHECK([for $1 declaration],ac_cv_have_$1_decl,[
AC_TRY_COMPILE([$2],[int i = (int)$1],
ac_cv_have_$1_decl=yes,ac_cv_have_$1_decl=no)])
if test x"$ac_cv_have_$1_decl" = x"yes"; then
AC_DEFINE([HAVE_]translit([$1], [a-z], [A-Z])[_DECL],1,[Whether $1() is available])
fi
])
dnl AC_SEARCH_LIBS_EXT(FUNCTION, SEARCH-LIBS, EXT_LIBS,
dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND],
dnl [OTHER-LIBRARIES])
dnl --------------------------------------------------------
dnl Search for a library defining FUNC, if it's not already available.
AC_DEFUN([AC_SEARCH_LIBS_EXT],
[AC_CACHE_CHECK([for library containing $1], [ac_cv_search_ext_$1],
[
ac_func_search_ext_save_LIBS=$LIBS
ac_cv_search_ext_$1=no
AC_LINK_IFELSE([AC_LANG_CALL([], [$1])],
[ac_cv_search_ext_$1="none required"])
if test "$ac_cv_search_ext_$1" = no; then
for ac_lib in $2; do
LIBS="-l$ac_lib $$3 $6 $ac_func_search_save_ext_LIBS"
AC_LINK_IFELSE([AC_LANG_CALL([], [$1])],
[ac_cv_search_ext_$1="-l$ac_lib"
break])
done
fi
LIBS=$ac_func_search_ext_save_LIBS])
AS_IF([test "$ac_cv_search_ext_$1" != no],
[test "$ac_cv_search_ext_$1" = "none required" || $3="$ac_cv_search_ext_$1 $$3"
$4],
[$5])dnl
])
AC_PREREQ(2.50)
AC_INIT(dlfcn.c)
AC_CONFIG_SRCDIR([dlfcn.c])
AC_CONFIG_HEADER(replace_config.h)
AC_PROG_INSTALL
sinclude(config.m4)
sinclude(win32/config.m4)
sinclude(repdir/config.m4)
AC_OUTPUT(Makefile)

View File

@@ -4,22 +4,27 @@
Copyright (C) Andrew Tridgell 1992-1998
Copyright (C) Jeremy Allison 1998-2002
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
** NOTE! The following LGPL license applies to the replace
** library. This does NOT imply that all of Samba is released
** under the LGPL
This program is distributed in the hope that it will be useful,
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 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 General Public License for more details.
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 General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "includes.h"
#include "replace.h"
#include <stdlib.h>
#ifndef HAVE_DLOPEN
void *dlopen(const char *name, int flags)

View File

@@ -18,9 +18,38 @@ Cambridge, MA 02139, USA. */
/* Modified to use with samba by Jeremy Allison, 8th July 1995. */
#include "includes.h"
#include "system/terminal.h"
#include "system/wait.h"
#include "replace.h"
#include <stdlib.h>
#if defined(HAVE_TERMIOS_H)
/* POSIX terminal handling. */
#include <termios.h>
#elif defined(HAVE_TERMIO_H)
/* Older SYSV terminal handling - don't use if we can avoid it. */
#include <termio.h>
#elif defined(HAVE_SYS_TERMIO_H)
/* Older SYSV terminal handling - don't use if we can avoid it. */
#include <sys/termio.h>
#endif
#ifdef HAVE_SYS_WAIT_H
#include <sys/wait.h>
#endif
/*
* Define additional missing types
*/
#ifndef HAVE_SIG_ATOMIC_T_TYPE
typedef int sig_atomic_t;
#endif
#ifndef SIGCLD
#define SIGCLD SIGCHLD
#endif
#ifndef SIGNAL_CAST
#define SIGNAL_CAST (RETSIGTYPE (*)(int))
#endif
#ifdef REPLACE_GETPASS

View File

@@ -3,19 +3,23 @@
Copyright (C) Andrew Tridgell 2005
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
** NOTE! The following LGPL license applies to the replace
** library. This does NOT imply that all of Samba is released
** under the LGPL
This program is distributed in the hope that it will be useful,
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 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 General Public License for more details.
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 General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/*
a replacement for opendir/readdir/telldir/seekdir/closedir for BSD systems

View File

@@ -3,37 +3,40 @@
replacement routines for broken systems
Copyright (C) Andrew Tridgell 1992-1998
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
** NOTE! The following LGPL license applies to the replace
** library. This does NOT imply that all of Samba is released
** under the LGPL
This program is distributed in the hope that it will be useful,
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 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 General Public License for more details.
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 General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "includes.h"
#include "system/locale.h"
#include "system/wait.h"
#include "system/time.h"
#include "system/network.h"
#include "system/filesys.h"
#include "system/syslog.h"
#include "replace.h"
void replace_dummy(void);
void replace_dummy(void) {}
#include <stdlib.h>
#include <unistd.h>
#include <sys/stat.h>
#include <string.h>
void replace_dummy(void);
void replace_dummy(void) {}
#ifndef HAVE_FTRUNCATE
/*******************************************************************
ftruncate for operating systems that don't have it
********************************************************************/
int ftruncate(int f,off_t l)
int rep_ftruncate(int f, off_t l)
{
#ifdef HAVE_CHSIZE
return chsize(f,l);
@@ -53,7 +56,7 @@ ftruncate for operating systems that don't have it
#ifndef HAVE_STRLCPY
/* like strncpy but does not 0 fill the buffer and always null
terminates. bufsize is the size of the destination buffer */
size_t strlcpy(char *d, const char *s, size_t bufsize)
size_t rep_strlcpy(char *d, const char *s, size_t bufsize)
{
size_t len = strlen(s);
size_t ret = len;
@@ -69,7 +72,7 @@ ftruncate for operating systems that don't have it
/* like strncat but does not 0 fill the buffer and always null
terminates. bufsize is the length of the buffer, which should
be one more than the maximum resulting string length */
size_t strlcat(char *d, const char *s, size_t bufsize)
size_t rep_strlcat(char *d, const char *s, size_t bufsize)
{
size_t len1 = strlen(d);
size_t len2 = strlen(s);
@@ -97,7 +100,7 @@ Corrections by richard.kettlewell@kewill.com
#define HOUR 60*MINUTE
#define DAY 24*HOUR
#define YEAR 365*DAY
time_t mktime(struct tm *t)
time_t rep_mktime(struct tm *t)
{
struct tm *u;
time_t epoch = 0;
@@ -149,7 +152,7 @@ Corrections by richard.kettlewell@kewill.com
#ifndef HAVE_RENAME
/* Rename a file. (from libiberty in GNU binutils) */
int rename(const char *zfrom, const char *zto)
int rep_rename(const char *zfrom, const char *zto)
{
if (link (zfrom, zto) < 0)
{
@@ -169,7 +172,8 @@ Corrections by richard.kettlewell@kewill.com
/*
* Search for a match in a netgroup. This replaces it on broken systems.
*/
int innetgr(const char *group,const char *host,const char *user,const char *dom)
int rep_innetgr(const char *group, const char *host, const char *user,
const char *dom)
{
char *hst, *usr, *dm;
@@ -194,7 +198,7 @@ Corrections by richard.kettlewell@kewill.com
/****************************************************************************
some systems don't have an initgroups call
****************************************************************************/
int initgroups(char *name, gid_t id)
int rep_initgroups(char *name, gid_t id)
{
#ifndef HAVE_SETGROUPS
/* yikes! no SETGROUPS or INITGROUPS? how can this work? */
@@ -246,7 +250,7 @@ Corrections by richard.kettlewell@kewill.com
/* This is needed due to needing the nap() function but we don't want
to include the Xenix libraries since that will break other things...
BTW: system call # 0x0c28 is the same as calling nap() */
long nap(long milliseconds) {
long nap(long milliseconds) {
return syscall(0x0c28, milliseconds);
}
#endif
@@ -259,7 +263,7 @@ this is only used if the machine does not have it's own memmove().
this is not the fastest algorithm in town, but it will do for our
needs.
********************************************************************/
void *memmove(void *dest,const void *src,int size)
void *rep_memmove(void *dest,const void *src,int size)
{
unsigned long d,s;
int i;
@@ -317,7 +321,7 @@ needs.
/****************************************************************************
duplicate a string
****************************************************************************/
char *strdup(const char *s)
char *rep_strdup(const char *s)
{
size_t len;
char *ret;
@@ -335,7 +339,7 @@ duplicate a string
#ifndef WITH_PTHREADS
/* REWRITE: not thread safe */
#ifdef REPLACE_INET_NTOA
char *rep_inet_ntoa(struct in_addr ip)
char *rep_inet_ntoa(struct in_addr ip)
{
uint8_t *p = (uint8_t *)&ip.s_addr;
static char buf[18];
@@ -347,7 +351,7 @@ duplicate a string
#endif
#ifndef HAVE_SETLINEBUF
int setlinebuf(FILE *stream)
int rep_setlinebuf(FILE *stream)
{
return setvbuf(stream, (char *)NULL, _IOLBF, 0);
}
@@ -355,7 +359,7 @@ duplicate a string
#ifndef HAVE_VSYSLOG
#ifdef HAVE_SYSLOG
void vsyslog (int facility_priority, char *format, va_list arglist)
void rep_vsyslog (int facility_priority, char *format, va_list arglist)
{
char *msg = NULL;
vasprintf(&msg, format, arglist);
@@ -388,7 +392,7 @@ duplicate a string
/**
Some platforms don't have strndup.
**/
char *strndup(const char *s, size_t n)
char *rep_strndup(const char *s, size_t n)
{
char *ret;
@@ -404,14 +408,14 @@ duplicate a string
#endif
#ifndef HAVE_WAITPID
int waitpid(pid_t pid,int *status,int options)
int rep_waitpid(pid_t pid,int *status,int options)
{
return wait4(pid, status, options, NULL);
}
#endif
#ifndef HAVE_SETEUID
int seteuid(uid_t euid)
int rep_seteuid(uid_t euid)
{
#ifdef HAVE_SETRESUID
return setresuid(-1, euid, -1);
@@ -422,7 +426,7 @@ int waitpid(pid_t pid,int *status,int options)
#endif
#ifndef HAVE_SETEGID
int setegid(gid_t egid)
int rep_setegid(gid_t egid)
{
#ifdef HAVE_SETRESGID
return setresgid(-1, egid, -1);
@@ -436,7 +440,7 @@ int waitpid(pid_t pid,int *status,int options)
os/2 also doesn't have chroot
********************************************************************/
#ifndef HAVE_CHROOT
int chroot(const char *dname)
int rep_chroot(const char *dname)
{
errno = ENOSYS;
return -1;
@@ -460,7 +464,7 @@ int rep_mkstemp(char *template)
#endif
#ifndef HAVE_MKDTEMP
char * mkdtemp(char *template)
char *rep_mkdtemp(char *template)
{
char *dname;
@@ -475,7 +479,7 @@ char * mkdtemp(char *template)
#endif
#ifndef HAVE_PREAD
static ssize_t pread(int __fd, void *__buf, size_t __nbytes, off_t __offset)
static ssize_t rep_pread(int __fd, void *__buf, size_t __nbytes, off_t __offset)
{
if (lseek(__fd, __offset, SEEK_SET) != __offset) {
return -1;
@@ -485,7 +489,7 @@ static ssize_t pread(int __fd, void *__buf, size_t __nbytes, off_t __offset)
#endif
#ifndef HAVE_PWRITE
static ssize_t pwrite(int __fd, const void *__buf, size_t __nbytes, off_t __offset)
static ssize_t rep_pwrite(int __fd, const void *__buf, size_t __nbytes, off_t __offset)
{
if (lseek(__fd, __offset, SEEK_SET) != __offset) {
return -1;
@@ -495,7 +499,7 @@ static ssize_t pwrite(int __fd, const void *__buf, size_t __nbytes, off_t __offs
#endif
#ifndef HAVE_STRCASESTR
char *strcasestr(const char *haystack, const char *needle)
char *rep_strcasestr(const char *haystack, const char *needle)
{
const char *s;
size_t nlen = strlen(needle);
@@ -511,7 +515,7 @@ char *strcasestr(const char *haystack, const char *needle)
#ifndef HAVE_STRTOK_R
/* based on GLIBC version, copyright Free Software Foundation */
char *strtok_r(char *s, const char *delim, char **save_ptr)
char *rep_strtok_r(char *s, const char *delim, char **save_ptr)
{
char *token;
@@ -535,3 +539,111 @@ char *strtok_r(char *s, const char *delim, char **save_ptr)
return token;
}
#endif
#ifndef HAVE_STRNLEN
/**
Some platforms don't have strnlen
**/
size_t rep_strnlen(const char *s, size_t n)
{
int i;
for (i=0; s[i] && i<n; i++)
/* noop */ ;
return i;
}
#endif
#ifndef HAVE_STRTOLL
long long int rep_strtoll(const char *str, char **endptr, int base)
{
#ifdef HAVE_STRTOQ
return strtoq(str, endptr, base);
#elif defined(HAVE___STRTOLL)
return __strtoll(str, endptr, base);
#elif SIZEOF_LONG == SIZEOF_LONG_LONG
return (long long int) strtol(str, endptr, base);
#else
# error "You need a strtoll function"
#endif
}
#endif
#ifndef HAVE_STRTOULL
unsigned long long int rep_strtoull(const char *str, char **endptr, int base)
{
#ifdef HAVE_STRTOUQ
return strtouq(str, endptr, base);
#elif defined(HAVE___STRTOULL)
return __strtoull(str, endptr, base);
#elif SIZEOF_LONG == SIZEOF_LONG_LONG
return (unsigned long long int) strtoul(str, endptr, base);
#else
# error "You need a strtoull function"
#endif
}
#endif
#ifndef HAVE_SETENV
int rep_setenv(const char *name, const char *value, int overwrite)
{
char *p;
size_t l1, l2;
int ret;
if (!overwrite && getenv(name)) {
return 0;
}
l1 = strlen(name);
l2 = strlen(value);
p = malloc(l1+l2+2);
if (p == NULL) {
return -1;
}
memcpy(p, name, l1);
p[l1] = '=';
memcpy(p+l1+1, value, l2);
p[l1+l2+1] = 0;
ret = putenv(p);
if (ret != 0) {
free(p);
}
return ret;
}
#endif
#if !defined(HAVE_TIMEGM)
static int is_leap(unsigned y)
{
y += 1900;
return (y % 4) == 0 && ((y % 100) != 0 || (y % 400) == 0);
}
time_t timegm(struct tm *tm)
{
static const unsigned ndays[2][12] ={
{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
{31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}};
time_t res = 0;
unsigned i;
for (i = 70; i < tm->tm_year; ++i)
res += is_leap(i) ? 366 : 365;
for (i = 0; i < tm->tm_mon; ++i)
res += ndays[is_leap(tm->tm_year)][i];
res += tm->tm_mday - 1;
res *= 24;
res += tm->tm_hour;
res *= 60;
res += tm->tm_min;
res *= 60;
res += tm->tm_sec;
return res;
}
#endif

View File

@@ -4,25 +4,39 @@
macros to go along with the lib/replace/ portability layer code
Copyright (C) Andrew Tridgell 2005
Copyright (C) Jelmer Vernooij 2006
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
** NOTE! The following LGPL license applies to the replace
** library. This does NOT imply that all of Samba is released
** under the LGPL
This program is distributed in the hope that it will be useful,
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 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 General Public License for more details.
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 General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef _replace_h
#define _replace_h
#ifdef _SAMBA_BUILD_
#include "config.h"
#else
#include "replace_config.h"
#endif /* _SAMBA_BUILD_ */
#include <stdlib.h>
#include <stdarg.h>
#if defined(_MSC_VER) || defined(__MINGW32__)
#include "lib/replace/win32/replace.h"
#endif
@@ -53,59 +67,78 @@ extern int errno;
#endif
#ifndef HAVE_STRDUP
char *strdup(const char *s);
#define strdup rep_strdup
char *rep_strdup(const char *s);
#endif
#ifndef HAVE_MEMMOVE
void *memmove(void *dest,const void *src,int size);
#define memmove rep_memmove
void *rep_memmove(void *dest,const void *src,int size);
#endif
#ifndef HAVE_MKTIME
time_t mktime(struct tm *t);
#define mktime rep_mktime
time_t rep_mktime(struct tm *t);
#endif
#ifndef HAVE_STRLCPY
size_t strlcpy(char *d, const char *s, size_t bufsize);
#define strlcpy rep_strlcpy
size_t rep_strlcpy(char *d, const char *s, size_t bufsize);
#endif
#ifndef HAVE_STRLCAT
size_t strlcat(char *d, const char *s, size_t bufsize);
#define strlcat rep_strlcat
size_t rep_strlcat(char *d, const char *s, size_t bufsize);
#endif
#ifndef HAVE_STRNDUP
char *strndup(const char *s, size_t n);
#define strndup rep_strndup
char *rep_strndup(const char *s, size_t n);
#endif
#ifndef HAVE_STRNLEN
size_t strnlen(const char *s, size_t n);
#endif
#ifndef HAVE_STRTOUL
unsigned long strtoul(const char *nptr, char **endptr, int base);
#define strnlen rep_strnlen
size_t rep_strnlen(const char *s, size_t n);
#endif
#ifndef HAVE_SETENV
int setenv(const char *name, const char *value, int overwrite);
#define setenv rep_setenv
int rep_setenv(const char *name, const char *value, int overwrite);
#endif
#ifndef HAVE_RENAME
int rename(const char *zfrom, const char *zto);
#define rename rep_rename
int rep_rename(const char *zfrom, const char *zto);
#endif
#ifndef HAVE_STRCASESTR
char *strcasestr(const char *haystack, const char *needle);
#define strcasestr rep_strcasestr
char *rep_strcasestr(const char *haystack, const char *needle);
#endif
#ifndef HAVE_STRTOK_R
char *strtok_r(char *s, const char *delim, char **save_ptr);
#define strtok_r rep_strtok_r
char *rep_strtok_r(char *s, const char *delim, char **save_ptr);
#endif
#ifndef HAVE_STRTOLL
#define strtoll rep_strtoll
long long int rep_strtoll(const char *str, char **endptr, int base);
#endif
#ifndef HAVE_STRTOULL
#define strtoull rep_strtoull
unsigned long long int rep_strtoull(const char *str, char **endptr, int base);
#endif
#ifndef HAVE_FTRUNCATE
int ftruncate(int f,long l);
#define ftruncate rep_ftruncate
int rep_ftruncate(int f,long l);
#endif
#ifndef HAVE_VASPRINTF_DECL
int vasprintf(char **ptr, const char *format, va_list ap);
#define vasprintf rep_vasprintf
int rep_vasprintf(char **ptr, const char *format, va_list ap);
#endif
#if !defined(HAVE_BZERO) && defined(HAVE_MEMSET)
@@ -114,7 +147,8 @@ int vasprintf(char **ptr, const char *format, va_list ap);
#ifndef HAVE_TIMEGM
struct tm;
time_t timegm(struct tm *tm);
#define timegm rep_timegm
time_t rep_timegm(struct tm *tm);
#endif
#ifndef PRINTF_ATTRIBUTE
@@ -131,10 +165,12 @@ time_t timegm(struct tm *tm);
/* add varargs prototypes with printf checking */
#ifndef HAVE_SNPRINTF_DECL
int snprintf(char *,size_t ,const char *, ...) PRINTF_ATTRIBUTE(3,4);
#define snprintf rep_snprintf
int rep_snprintf(char *,size_t ,const char *, ...) PRINTF_ATTRIBUTE(3,4);
#endif
#ifndef HAVE_ASPRINTF_DECL
int asprintf(char **,const char *, ...) PRINTF_ATTRIBUTE(2,3);
#define asprintf rep_asprintf
int rep_asprintf(char **,const char *, ...) PRINTF_ATTRIBUTE(2,3);
#endif
@@ -174,7 +210,8 @@ int rep_mkstemp(char *temp);
#endif
#ifndef HAVE_MKDTEMP
char *mkdtemp(char *template);
#define mkdtemp rep_mkdtemp
char *rep_mkdtemp(char *template);
#endif
#ifdef HAVE_LIMITS_H
@@ -248,4 +285,6 @@ typedef int bool;
#define __STRING(x) #x
#endif
#endif

View File

@@ -0,0 +1,58 @@
dnl Try to find a replacement library
dnl Will define HAVE_REPLACE_H if replace.h can be found
AC_DEFUN([SMB_LIBREPLACE], [
AC_ARG_WITH(libreplace,
[ --with-libreplace Specify location to libreplace],
[
# Check whether libreplace can actually be found in this location
if ! test -f "$withval/replace.h"
then
AC_MSG_ERROR([Unable to find replace.h in $withval])
fi
replacedir=$withval
],
[
# Check if we can find libreplace in a common location
for dir in . replace ../replace
do
AC_MSG_CHECKING([for libreplace in $dir])
if test -f "$dir/replace.h"
then
replacedir="$dir"
AC_MSG_RESULT(yes)
break
fi
AC_MSG_RESULT(no)
done
])
AC_SUBST(REPLACE_LIBS)
if test "$replacedir" != ""
then
REPLACE_LIBS="$replacedir/libreplace.a"
CFLAGS="$CFLAGS -I$replacedir"
AC_DEFINE(HAVE_REPLACE_H, 1,
[Whether replace.h is present and should be used])
fi
])
dnl Try to find the specified functions in the system, or
dnl in Samba's replacement library. In the future, this may also
dnl try to find these functions in libroken or GNUlib if libreplace can't be
dnl found.
AC_DEFUN(SMB_REPLACE_FUNCS, [
AC_REQUIRE([SMB_LIBREPLACE])dnl
if test -z "$replacedir" || test -f "$replacedir/libreplace.a"
then
LIBS="$LIBS $REPLACE_LIBS"
for f in $1
do
AC_CHECK_FUNC($f, [], [
AC_MSG_ERROR([Unable to find $f in the system. Consider
specifying the path to the replacement library])
])
done
fi
])

View File

@@ -103,10 +103,10 @@
*
**************************************************************/
#ifndef NO_CONFIG_H
#ifdef _SAMBA_BUILD_
#include "config.h"
#else
#define NULL 0
#include "replace_config.h"
#endif
#ifdef TEST_SNPRINTF /* need math library headers for testing */

View File

@@ -0,0 +1,366 @@
/*
Unix SMB/CIFS implementation.
libreplace tests
Copyright (C) Jelmer Vernooij 2006
** NOTE! The following LGPL license applies to the talloc
** library. This does NOT imply that all of Samba is released
** under the LGPL
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 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "../replace.h"
#include <stdio.h>
int test_ftruncate()
{
/* FIXME */
return true;
}
int test_strlcpy()
{
/* FIXME */
return true;
}
int test_strlcat()
{
/* FIXME */
return true;
}
int test_mktime()
{
/* FIXME */
return true;
}
int test_rename()
{
/* FIXME */
return true;
}
int test_innetgr()
{
/* FIXME */
return true;
}
int test_initgroups()
{
/* FIXME */
return true;
}
int test_memmove()
{
/* FIXME */
return true;
}
int test_strdup()
{
/* FIXME */
return true;
}
int test_setlinebuf()
{
/* FIXME */
return true;
}
int test_vsyslog()
{
/* FIXME */
return true;
}
int test_timegm()
{
/* FIXME */
return true;
}
int test_setenv()
{
/* FIXME */
return true;
}
int test_strndup()
{
/* FIXME */
return true;
}
int test_strnlen()
{
/* FIXME */
return true;
}
int test_waitpid()
{
/* FIXME */
return true;
}
int test_seteuid()
{
/* FIXME */
return true;
}
int test_setegid()
{
/* FIXME */
return true;
}
int test_asprintf()
{
/* FIXME */
return true;
}
int test_snprintf()
{
/* FIXME */
return true;
}
int test_vasprintf()
{
/* FIXME */
return true;
}
int test_vsnprintf()
{
/* FIXME */
return true;
}
int test_opendir()
{
/* FIXME */
return true;
}
int test_readdir()
{
/* FIXME */
return true;
}
int test_telldir()
{
/* FIXME */
return true;
}
int test_seekdir()
{
/* FIXME */
return true;
}
int test_dlopen()
{
/* FIXME: test dlopen, dlsym, dlclose, dlerror */
return true;
}
int test_chroot()
{
/* FIXME: chroot() */
return true;
}
int test_bzero()
{
/* FIXME: bzero */
return true;
}
int test_strerror()
{
/* FIXME */
return true;
}
int test_errno()
{
/* FIXME */
return true;
}
int test_mkdtemp()
{
/* FIXME */
return true;
}
int test_mkstemp()
{
/* FIXME */
return true;
}
int test_pread()
{
/* FIXME */
return true;
}
int test_pwrite()
{
/* FIXME */
return true;
}
int test_getpass()
{
/* FIXME */
return true;
}
int test_inet_ntoa()
{
/* FIXME */
return true;
}
int test_strtoll()
{
/* FIXME */
return true;
}
int test_strtoull()
{
/* FIXME */
return true;
}
/*
FIXME:
Types:
bool
socklen_t
uint_t
uint{8,16,32,64}_t
int{8,16,32,64}_t
intptr_t
Constants:
PATH_NAME_MAX
UINT{16,32,64}_MAX
INT32_MAX
*/
int test_va_copy()
{
/* FIXME */
return true;
}
int test_FUNCTION()
{
/* FIXME: test __FUNCTION__ macro */
return true;
}
int test_MIN()
{
/* FIXME */
return true;
}
int test_MAX()
{
/* FIXME */
return true;
}
int torture_local_replace()
{
int ret = true;
;
ret &= test_ftruncate();
ret &= test_strlcpy();
ret &= test_strlcat();
ret &= test_mktime();
ret &= test_rename();
ret &= test_innetgr();
ret &= test_initgroups();
ret &= test_memmove();
ret &= test_strdup();
ret &= test_setlinebuf();
ret &= test_vsyslog();
ret &= test_timegm();
ret &= test_setenv();
ret &= test_strndup();
ret &= test_strnlen();
ret &= test_waitpid();
ret &= test_seteuid();
ret &= test_setegid();
ret &= test_asprintf();
ret &= test_snprintf();
ret &= test_vasprintf();
ret &= test_vsnprintf();
ret &= test_opendir();
ret &= test_readdir() ;
ret &= test_telldir();
ret &= test_seekdir();
ret &= test_dlopen();
ret &= test_chroot();
ret &= test_bzero();
ret &= test_strerror();
ret &= test_errno();
ret &= test_mkdtemp();
ret &= test_mkstemp();
ret &= test_pread();
ret &= test_pwrite();
ret &= test_getpass();
ret &= test_inet_ntoa();
ret &= test_strtoll();
ret &= test_strtoll();
ret &= test_strtoull();
ret &= test_va_copy();
ret &= test_FUNCTION();
ret &= test_MIN();
ret &= test_MAX();
return ret;
}
#if !defined(_SAMBA_BUILD_) || ((SAMBA_VERSION_MAJOR==3)&&(SAMBA_VERSION_MINOR<9))
int main(void)
{
if (!torture_local_replace(NULL)) {
printf("ERROR: TESTSUITE FAILED\n");
return -1;
}
return 0;
}
#endif

View File

@@ -6,6 +6,7 @@ SO_VERSION = 0
OBJ_FILES = talloc.o
PUBLIC_DEPENDENCIES = LIBREPLACE
MANPAGE = talloc.3
CFLAGS = -Ilib/talloc
PUBLIC_HEADERS = talloc.h
DESCRIPTION = A hierarchical pool based memory system with destructors
#

View File

@@ -40,20 +40,23 @@ install: all
cp $(srcdir)/include/tdb.h $(includedir)
cp tdb.pc $(libdir)/pkgconfig
bin/tdbtest: tools/tdbtest.o $(TDB_OBJ)
$(CC) $(CFLAGS) -o bin/tdbtest tools/tdbtest.o $(TDB_OBJ) -lgdbm
libtdb.a: $(TDB_OBJ)
ar -rv libtdb.a $(TDB_OBJ)
bin/tdbtool: tools/tdbtool.o $(TDB_OBJ)
$(CC) $(CFLAGS) -o bin/tdbtool tools/tdbtool.o $(TDB_OBJ)
bin/tdbtest: tools/tdbtest.o libtdb.a
$(CC) $(CFLAGS) -o bin/tdbtest tools/tdbtest.o -L. -ltdb -lgdbm
bin/tdbtorture: tools/tdbtorture.o $(TDB_OBJ)
$(CC) $(CFLAGS) -o bin/tdbtorture tools/tdbtorture.o $(TDB_OBJ)
bin/tdbtool: tools/tdbtool.o libtdb.a
$(CC) $(CFLAGS) -o bin/tdbtool tools/tdbtool.o -L. -ltdb
bin/tdbdump: tools/tdbdump.o $(TDB_OBJ)
$(CC) $(CFLAGS) -o bin/tdbdump tools/tdbdump.o $(TDB_OBJ)
bin/tdbtorture: tools/tdbtorture.o libtdb.a
$(CC) $(CFLAGS) -o bin/tdbtorture tools/tdbtorture.o -L. -ltdb
bin/tdbbackup: tools/tdbbackup.o $(TDB_OBJ)
$(CC) $(CFLAGS) -o bin/tdbbackup tools/tdbbackup.o $(TDB_OBJ)
bin/tdbdump: tools/tdbdump.o libtdb.a
$(CC) $(CFLAGS) -o bin/tdbdump tools/tdbdump.o -L. -ltdb
bin/tdbbackup: tools/tdbbackup.o libtdb.a
$(CC) $(CFLAGS) -o bin/tdbbackup tools/tdbbackup.o -L. -ltdb
clean:
rm -f $(PROGS) common/*.o tools/*.o *~ *.bak */*~ */*.bak *% core test.db test.tdb test.gdbm