diff options
-rw-r--r-- | source3/lib/replace/.checker_innocent | 4 | ||||
-rw-r--r-- | source3/lib/replace/README | 1 | ||||
-rw-r--r-- | source3/lib/replace/libreplace.m4 | 3 | ||||
-rw-r--r-- | source3/lib/replace/libreplace_cc.m4 | 38 | ||||
-rw-r--r-- | source3/lib/replace/replace.c | 21 | ||||
-rw-r--r-- | source3/lib/replace/replace.h | 4 | ||||
-rw-r--r-- | source3/lib/replace/snprintf.c | 2 | ||||
-rw-r--r-- | source3/lib/replace/system/aio.h | 29 | ||||
-rw-r--r-- | source3/lib/replace/system/kerberos.h | 1 | ||||
-rw-r--r-- | source3/lib/replace/system/wait.h | 2 | ||||
-rw-r--r-- | source3/lib/replace/test/os2_delete.c | 5 | ||||
-rw-r--r-- | source3/lib/replace/test/testsuite.c | 79 |
12 files changed, 149 insertions, 40 deletions
diff --git a/source3/lib/replace/.checker_innocent b/source3/lib/replace/.checker_innocent new file mode 100644 index 0000000000..e619176540 --- /dev/null +++ b/source3/lib/replace/.checker_innocent @@ -0,0 +1,4 @@ +>>>MISTAKE21_create_files_6a9e68ada99a97cb +>>>MISTAKE21_os2_delete_9b2bfa7f38711d09 +>>>MISTAKE21_os2_delete_2fcc29aaa99a97cb +>>>SECURITY2_os2_delete_9b2bfa7f1c9396ca diff --git a/source3/lib/replace/README b/source3/lib/replace/README index 182a276116..a313984c8e 100644 --- a/source3/lib/replace/README +++ b/source3/lib/replace/README @@ -52,6 +52,7 @@ readline (the library) inet_ntoa strtoll strtoull +socketpair Types: bool diff --git a/source3/lib/replace/libreplace.m4 b/source3/lib/replace/libreplace.m4 index 1dfc823a68..3328dea95e 100644 --- a/source3/lib/replace/libreplace.m4 +++ b/source3/lib/replace/libreplace.m4 @@ -62,6 +62,7 @@ AC_FUNC_MEMCMP AC_CHECK_FUNCS(pipe strftime srandom random srand rand usleep setbuffer lstat getpgrp) AC_CHECK_HEADERS(stdbool.h sys/select.h) +AC_CHECK_HEADERS(setjmp.h) AC_CHECK_TYPE(bool, [AC_DEFINE(HAVE_BOOL, 1, [Whether the bool type is available])],, @@ -147,7 +148,7 @@ AC_TRY_COMPILE([ AC_CHECK_FUNCS(seteuid setresuid setegid setresgid chroot bzero strerror) AC_CHECK_FUNCS(vsyslog setlinebuf mktime ftruncate chsize rename) AC_CHECK_FUNCS(waitpid strlcpy strlcat innetgr initgroups memmove strdup) -AC_CHECK_FUNCS(pread pwrite strndup strcasestr strtok_r mkdtemp) +AC_CHECK_FUNCS(pread pwrite strndup strcasestr strtok_r mkdtemp socketpair) AC_HAVE_DECL(setresuid, [#include <unistd.h>]) AC_HAVE_DECL(setresgid, [#include <unistd.h>]) AC_HAVE_DECL(errno, [#include <errno.h>]) diff --git a/source3/lib/replace/libreplace_cc.m4 b/source3/lib/replace/libreplace_cc.m4 index b8b74036e5..74c53cad99 100644 --- a/source3/lib/replace/libreplace_cc.m4 +++ b/source3/lib/replace/libreplace_cc.m4 @@ -140,23 +140,27 @@ fi ############################################ # check if the compiler can do immediate structures -AC_CACHE_CHECK([for immediate structures],samba_cv_immediate_structures, [ - AC_TRY_COMPILE([ -#include <stdio.h>], -[ - typedef struct {unsigned x;} FOOBAR; - #define X_FOOBAR(x) ((FOOBAR) { x }) - #define FOO_ONE X_FOOBAR(1) - FOOBAR f = FOO_ONE; - static const struct { - FOOBAR y; - } f2[] = { - {FOO_ONE} - }; -], - samba_cv_immediate_structures=yes,samba_cv_immediate_structures=no)]) -if test x"$samba_cv_immediate_structures" = x"yes"; then - AC_DEFINE(HAVE_IMMEDIATE_STRUCTURES,1,[Whether the compiler supports immediate structures]) +AC_SUBST(libreplace_cv_immediate_structures) +AC_CACHE_CHECK([for immediate structures],libreplace_cv_immediate_structures,[ + AC_TRY_COMPILE([ + #include <stdio.h> + ],[ + typedef struct {unsigned x;} FOOBAR; + #define X_FOOBAR(x) ((FOOBAR) { x }) + #define FOO_ONE X_FOOBAR(1) + FOOBAR f = FOO_ONE; + static const struct { + FOOBAR y; + } f2[] = { + {FOO_ONE} + }; + ], + libreplace_cv_immediate_structures=yes, + libreplace_cv_immediate_structures=no, + libreplace_cv_immediate_structures=cross) +]) +if test x"$libreplace_cv_immediate_structures" = x"yes"; then + AC_DEFINE(HAVE_IMMEDIATE_STRUCTURES,1,[Whether the compiler supports immediate structures]) fi AC__LIBREPLACE_ONLY_CC_CHECKS_END diff --git a/source3/lib/replace/replace.c b/source3/lib/replace/replace.c index e7f47d7d52..9e6c75bd35 100644 --- a/source3/lib/replace/replace.c +++ b/source3/lib/replace/replace.c @@ -590,3 +590,24 @@ int rep_setenv(const char *name, const char *value, int overwrite) } #endif +#ifndef HAVE_SOCKETPAIR +int rep_socketpair(int d, int type, int protocol, int sv[2]) +{ + if (d != AF_UNIX) { + errno = EAFNOSUPPORT; + return -1; + } + + if (protocol != 0) { + errno = EPROTONOSUPPORT; + return -1; + } + + if (type != SOCK_STREAM) { + errno = EOPNOTSUPP; + return -1; + } + + return pipe(sv); +} +#endif diff --git a/source3/lib/replace/replace.h b/source3/lib/replace/replace.h index 7a79f335e2..d75394aa1f 100644 --- a/source3/lib/replace/replace.h +++ b/source3/lib/replace/replace.h @@ -209,6 +209,10 @@ void *rep_dlsym(void *handle, const char *symbol); int rep_dlclose(void *handle); #endif +#ifndef HAVE_SOCKETPAIR +#define socketpair rep_socketpair +int rep_socketpair(int d, int type, int protocol, int sv[2]); +#endif #ifndef PRINTF_ATTRIBUTE #if (__GNUC__ >= 3) && (__GNUC_MINOR__ >= 1 ) diff --git a/source3/lib/replace/snprintf.c b/source3/lib/replace/snprintf.c index fcbcdb17e9..b38d8dad34 100644 --- a/source3/lib/replace/snprintf.c +++ b/source3/lib/replace/snprintf.c @@ -540,7 +540,7 @@ static int dopr(char *buffer, size_t maxlen, const char *format, va_list args_in printf("parameter at position %d not used\n", pnum+1); #endif /* eat the parameter */ - (void)va_arg (args, int); + va_arg (args, int); continue; } for (i = 1; i < clist[pnum].num; i++) { diff --git a/source3/lib/replace/system/aio.h b/source3/lib/replace/system/aio.h new file mode 100644 index 0000000000..e1b9d836e7 --- /dev/null +++ b/source3/lib/replace/system/aio.h @@ -0,0 +1,29 @@ +#ifndef _system_aio_h +#define _system_aio_h +/* + Unix SMB/CIFS implementation. + + AIO system include wrappers + + Copyright (C) Andrew Tridgell 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. +*/ + +#if HAVE_LIBAIO_H +#include <libaio.h> +#endif + +#endif diff --git a/source3/lib/replace/system/kerberos.h b/source3/lib/replace/system/kerberos.h index b24196fc25..1617b96aad 100644 --- a/source3/lib/replace/system/kerberos.h +++ b/source3/lib/replace/system/kerberos.h @@ -126,7 +126,6 @@ #define KRB5_PRINC_REALM_RETURNS_REALM 1 #include "heimdal/lib/krb5/krb5.h" -#include "heimdal/lib/gssapi/gssapi.h" #include "heimdal/lib/com_err/com_err.h" #endif diff --git a/source3/lib/replace/system/wait.h b/source3/lib/replace/system/wait.h index 47e3e84bb1..3855f7ae72 100644 --- a/source3/lib/replace/system/wait.h +++ b/source3/lib/replace/system/wait.h @@ -36,6 +36,8 @@ #define SIGNAL_CAST (RETSIGTYPE (*)(int)) #endif +#ifdef HAVE_SETJMP_H #include <setjmp.h> +#endif #endif diff --git a/source3/lib/replace/test/os2_delete.c b/source3/lib/replace/test/os2_delete.c index b2bce7e7ff..c8abfccff9 100644 --- a/source3/lib/replace/test/os2_delete.c +++ b/source3/lib/replace/test/os2_delete.c @@ -20,9 +20,8 @@ #define TESTDIR "test.dir" static int test_readdir_os2_delete_ret; -int test_readdir_os2_delete(void); -#define FAILED(d) (fprintf(stderr, "Failed for %s - %d = %s\n", d, errno, strerror(errno)), test_readdir_os2_delete_ret = 1, 1) +#define FAILED(d) (printf("failure: readdir [\nFailed for %s - %d = %s\n]\n", d, errno, strerror(errno)), test_readdir_os2_delete_ret = 1, 1) #ifndef MIN #define MIN(a,b) ((a)<(b)?(a):(b)) @@ -108,7 +107,7 @@ int test_readdir_os2_delete(void) } closedir(d); - printf("Deleted %d files of %d\n", total_deleted, NUM_FILES); + fprintf(stderr, "Deleted %d files of %d\n", total_deleted, NUM_FILES); rmdir(TESTDIR) == 0 || FAILED("rmdir"); diff --git a/source3/lib/replace/test/testsuite.c b/source3/lib/replace/test/testsuite.c index c10a220d7b..8a9fb9ab87 100644 --- a/source3/lib/replace/test/testsuite.c +++ b/source3/lib/replace/test/testsuite.c @@ -57,26 +57,29 @@ static int test_ftruncate(void) struct stat st; int fd; const int size = 1234; - printf("testing ftruncate\n"); + printf("test: ftruncate\n"); unlink(TESTFILE); fd = open(TESTFILE, O_RDWR|O_CREAT, 0600); if (fd == -1) { - printf("creating '%s' failed - %s\n", TESTFILE, strerror(errno)); + printf("failure: ftruncate [\n" + "creating '%s' failed - %s\n]\n", TESTFILE, strerror(errno)); return false; } if (ftruncate(fd, size) != 0) { - printf("ftruncate failed - %s\n", strerror(errno)); + printf("failure: ftruncate [\n%s\n]\n", strerror(errno)); return false; } if (fstat(fd, &st) != 0) { - printf("fstat failed - %s\n", strerror(errno)); + printf("failure: ftruncate [\nfstat failed - %s\n]\n", strerror(errno)); return false; } if (st.st_size != size) { - printf("ftruncate gave wrong size %d - expected %d\n", + printf("failure: ftruncate [\ngave wrong size %d - expected %d\n]\n", (int)st.st_size, size); return false; } + unlink(TESTFILE); + printf("success: ftruncate\n"); return true; } @@ -98,13 +101,14 @@ static int test_strlcpy(void) { NULL, 0 } }; int i; - printf("testing strlcpy\n"); + printf("test: strlcpy\n"); for (i=0;tests[i].src;i++) { if (strlcpy(buf, tests[i].src, sizeof(buf)) != tests[i].result) { - printf("strlcpy test %d failed\n", i); + printf("failure: strlcpy [\ntest %d failed\n]\n", i); return false; } } + printf("success: strlcpy\n"); return true; } @@ -146,8 +150,9 @@ static int test_strdup(void) static int test_setlinebuf(void) { - printf("testing setlinebuf\n"); + printf("test: setlinebuf\n"); setlinebuf(stdout); + printf("success: setlinebuf\n"); return true; } @@ -233,10 +238,11 @@ extern int test_readdir_os2_delete(void); static int test_readdir(void) { - printf("testing readdir\n"); + printf("test: readdir\n"); if (test_readdir_os2_delete() != 0) { return false; } + printf("success: readdir\n"); return true; } @@ -371,9 +377,48 @@ static int test_MAX(void) return true; } -struct torture_context; +static int test_socketpair(void) +{ + int sock[2]; + char buf[20]; + + printf("test: socketpair\n"); + + if (socketpair(AF_UNIX, SOCK_STREAM, 0, sock) == -1) { + printf("failure: socketpair [\n" + "socketpair() failed\n" + "]\n"); + return false; + } + + if (write(sock[1], "automatisch", 12) == -1) { + printf("failure: socketpair [\n" + "write() failed: %s\n" + "]\n", strerror(errno)); + return false; + } + + if (read(sock[0], buf, 12) == -1) { + printf("failure: socketpair [\n" + "read() failed: %s\n" + "]\n", strerror(errno)); + return false; + } + + if (strcmp(buf, "automatisch") != 0) { + printf("failure: socketpair [\n" + "expected: automatisch, got: %s\n" + "]\n", buf); + return false; + } + + printf("success: socketpair\n"); -static bool torture_local_replace(struct torture_context *torture) + return true; +} + +struct torture_context; +bool torture_local_replace(struct torture_context *ctx) { bool ret = true; ret &= test_ftruncate(); @@ -419,17 +464,17 @@ static bool torture_local_replace(struct torture_context *torture) ret &= test_FUNCTION(); ret &= test_MIN(); ret &= test_MAX(); + ret &= test_socketpair(); return ret; } #if _SAMBA_BUILD_<4 -int main(void) +int main() { - if (!torture_local_replace(NULL)) { - printf("ERROR: TESTSUITE FAILED\n"); - return -1; - } - return 0; + bool ret = torture_local_replace(NULL); + if (ret) + return 0; + return -1; } #endif |