diff options
-rw-r--r-- | source3/Makefile.in | 10 | ||||
-rw-r--r-- | source3/torture/smbiconv.c | 246 | ||||
-rwxr-xr-x | source3/wscript_build | 7 | ||||
-rw-r--r-- | source4/torture/smbiconv.c | 236 |
4 files changed, 1 insertions, 498 deletions
diff --git a/source3/Makefile.in b/source3/Makefile.in index c303fe99a5..502dab7c26 100644 --- a/source3/Makefile.in +++ b/source3/Makefile.in @@ -231,7 +231,7 @@ BIN_PROGS = @EXTRA_BIN_PROGS@ \ EVERYTHING_PROGS = bin/debug2html@EXEEXT@ bin/smbfilter@EXEEXT@ \ $(TALLOCTORT) bin/replacetort@EXEEXT@ \ bin/log2pcap@EXEEXT@ \ - bin/vlp@EXEEXT@ bin/smbiconv@EXEEXT@ \ + bin/vlp@EXEEXT@ \ bin/dbwrap_tool@EXEEXT@ \ bin/dbwrap_torture@EXEEXT@ @@ -1299,8 +1299,6 @@ PDBTEST_OBJ = torture/pdbtest.o $(PARAM_OBJ) $(LIBSMB_OBJ) $(KRBCLIENT_OBJ) \ VFSTEST_OBJ = torture/cmd_vfs.o torture/vfstest.o $(SMBD_OBJ_BASE) $(READLINE_OBJ) -SMBICONV_OBJ = $(PARAM_OBJ) torture/smbiconv.o $(LIB_NONSMBD_OBJ) $(POPT_LIB_OBJ) $(LIBSMB_ERR_OBJ) - LOG2PCAP_OBJ = utils/log2pcaphex.o LOCKTEST2_OBJ = torture/locktest2.o $(PARAM_OBJ) $(LOCKING_OBJ) $(LIBSMB_OBJ) \ @@ -2031,12 +2029,6 @@ bin/vfstest@EXEEXT@: $(BINARY_PREREQS) $(VFSTEST_OBJ) @BUILD_POPT@ $(LIBTALLOC) @SMBD_LIBS@ $(NSCD_LIBS) $(LIBTALLOC_LIBS) $(LIBTDB_LIBS) \ $(LIBWBCLIENT_LIBS) $(ZLIB_LIBS) -bin/smbiconv@EXEEXT@: $(BINARY_PREREQS) $(SMBICONV_OBJ) @BUILD_POPT@ $(LIBTALLOC) $(LIBTDB) - @echo Linking $@ - @$(CC) -o $@ $(SMBICONV_OBJ) $(LDFLAGS) $(TERMLDFLAGS) \ - $(TERMLIBS) $(DYNEXP) $(LIBS) $(LDAP_LIBS) $(POPT_LIBS) \ - $(LIBTALLOC_LIBS) $(LIBTDB_LIBS) - bin/log2pcap@EXEEXT@: $(BINARY_PREREQS) $(LOG2PCAP_OBJ) @BUILD_POPT@ $(LIBTALLOC) @echo Linking $@ @$(CC) -o $@ $(LOG2PCAP_OBJ) $(LDFLAGS) $(DYNEXP) \ diff --git a/source3/torture/smbiconv.c b/source3/torture/smbiconv.c deleted file mode 100644 index 88ad6fef60..0000000000 --- a/source3/torture/smbiconv.c +++ /dev/null @@ -1,246 +0,0 @@ -/* - Unix SMB/CIFS implementation. - Charset module tester - - Copyright (C) Jelmer Vernooij 2003 - Based on iconv/icon_prog.c from the GNU C Library, - Contributed by Ulrich Drepper <drepper@cygnus.com>, 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 3 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, see <http://www.gnu.org/licenses/>. -*/ - -#include "includes.h" -#include "system/filesys.h" -#include "popt_common.h" -#undef realloc - -static int -process_block (smb_iconv_t cd, const char *addr, size_t len, FILE *output) -{ -#define OUTBUF_SIZE 32768 - const char *start = addr; - char outbuf[OUTBUF_SIZE]; - char *outptr; - size_t outlen; - size_t n; - - while (len > 0) - { - outptr = outbuf; - outlen = OUTBUF_SIZE; - n = smb_iconv (cd, &addr, &len, &outptr, &outlen); - - if (outptr != outbuf) - { - /* We have something to write out. */ - int errno_save = errno; - - if (fwrite (outbuf, 1, outptr - outbuf, output) - < (size_t) (outptr - outbuf) - || ferror (output)) - { - /* Error occurred while printing the result. */ - DEBUG (0, ("conversion stopped due to problem in writing the output")); - return -1; - } - - errno = errno_save; - } - - if (errno != E2BIG) - { - /* iconv() ran into a problem. */ - switch (errno) - { - case EILSEQ: - DEBUG(0,("illegal input sequence at position %ld", - (long) (addr - start))); - break; - case EINVAL: - DEBUG(0, ("\ -incomplete character or shift sequence at end of buffer")); - break; - case EBADF: - DEBUG(0, ("internal error (illegal descriptor)")); - break; - default: - DEBUG(0, ("unknown iconv() error %d", errno)); - break; - } - - return -1; - } - } - - return 0; -} - - -static int -process_fd (smb_iconv_t cd, int fd, FILE *output) -{ - /* we have a problem with reading from a descriptor since we must not - provide the iconv() function an incomplete character or shift - sequence at the end of the buffer. Since we have to deal with - arbitrary encodings we must read the whole text in a buffer and - process it in one step. */ - static char *inbuf = NULL; - static size_t maxlen = 0; - char *inptr = NULL; - size_t actlen = 0; - - while (actlen < maxlen) - { - ssize_t n = read (fd, inptr, maxlen - actlen); - - if (n == 0) - /* No more text to read. */ - break; - - if (n == -1) - { - /* Error while reading. */ - DEBUG(0, ("error while reading the input")); - return -1; - } - - inptr += n; - actlen += n; - } - - if (actlen == maxlen) - while (1) - { - ssize_t n; - char *new_inbuf; - - /* Increase the buffer. */ - new_inbuf = (char *) realloc (inbuf, maxlen + 32768); - if (new_inbuf == NULL) - { - DEBUG(0, ("unable to allocate buffer for input")); - return -1; - } - inbuf = new_inbuf; - maxlen += 32768; - inptr = inbuf + actlen; - - do - { - n = read (fd, inptr, maxlen - actlen); - - if (n == 0) - /* No more text to read. */ - break; - - if (n == -1) - { - /* Error while reading. */ - DEBUG(0, ("error while reading the input")); - return -1; - } - - inptr += n; - actlen += n; - } - while (actlen < maxlen); - - if (n == 0) - /* Break again so we leave both loops. */ - break; - } - - /* Now we have all the input in the buffer. Process it in one run. */ - return process_block (cd, inbuf, actlen, output); -} - -/* Main function */ - -int main(int argc, char *argv[]) -{ - const char *file = NULL; - const char *from = ""; - const char *to = ""; - char *output = NULL; - const char *preload_modules[] = {NULL, NULL}; - FILE *out = stdout; - int fd; - smb_iconv_t cd; - - /* make sure the vars that get altered (4th field) are in - a fixed location or certain compilers complain */ - poptContext pc; - struct poptOption long_options[] = { - POPT_AUTOHELP - { "from-code", 'f', POPT_ARG_STRING, &from, 0, "Encoding of original text" }, - { "to-code", 't', POPT_ARG_STRING, &to, 0, "Encoding for output" }, - { "output", 'o', POPT_ARG_STRING, &output, 0, "Write output to this file" }, - { "preload-modules", 'p', POPT_ARG_STRING, &preload_modules[0], 0, "Modules to load" }, - POPT_COMMON_SAMBA - POPT_TABLEEND - }; - - setlinebuf(stdout); - - pc = poptGetContext("smbiconv", argc, (const char **) argv, - long_options, 0); - - poptSetOtherOptionHelp(pc, "[FILE] ..."); - - while(poptGetNextOpt(pc) != -1); - - /* the following functions are part of the Samba debugging - facilities. See lib/debug.c */ - setup_logging("smbiconv", DEBUG_STDOUT); - - if (preload_modules[0]) smb_load_modules(preload_modules); - - if(output) { - out = fopen(output, "w"); - - if(!out) { - DEBUG(0, ("Can't open output file '%s': %s, exiting...\n", output, strerror(errno))); - return 1; - } - } - - cd = smb_iconv_open(to, from); - if (cd == (smb_iconv_t)-1) { - DEBUG(0,("unable to find from or to encoding, exiting...\n")); - if (out != stdout) fclose(out); - return 1; - } - - while((file = poptGetArg(pc))) { - if(strcmp(file, "-") == 0) fd = 0; - else { - fd = open(file, O_RDONLY); - - if(!fd) { - DEBUG(0, ("Can't open input file '%s': %s, ignoring...\n", file, strerror(errno))); - continue; - } - } - - /* Loop thru all arguments */ - process_fd(cd, fd, out); - - close(fd); - } - poptFreeContext(pc); - - fclose(out); - - return 0; -} diff --git a/source3/wscript_build b/source3/wscript_build index f2c4148458..7430d200f9 100755 --- a/source3/wscript_build +++ b/source3/wscript_build @@ -584,8 +584,6 @@ PDBTEST_SRC = '''torture/pdbtest.c''' VFSTEST_SRC = '''torture/cmd_vfs.c torture/vfstest.c''' -SMBICONV_SRC = '''torture/smbiconv.c''' - LOG2PCAP_SRC = '''utils/log2pcaphex.c''' LOCKTEST2_SRC = '''torture/locktest2.c''' @@ -1314,11 +1312,6 @@ bld.SAMBA3_BINARY('vfstest', deps='smbd_base SMBREADLINE', vars=locals()) -bld.SAMBA3_BINARY('smbiconv', - source=SMBICONV_SRC, - deps='''talloc tdb_compat tevent cap param smbd_shim popt_samba3 LIBSMB_ERR''', - vars=locals()) - bld.SAMBA3_BINARY('log2pcap', source=LOG2PCAP_SRC, deps='''talloc popt''', diff --git a/source4/torture/smbiconv.c b/source4/torture/smbiconv.c deleted file mode 100644 index 45166083b7..0000000000 --- a/source4/torture/smbiconv.c +++ /dev/null @@ -1,236 +0,0 @@ -/* - Unix SMB/CIFS implementation. - Charset module tester - - Copyright (C) Jelmer Vernooij 2003 - Based on iconv/icon_prog.c from the GNU C Library, - Contributed by Ulrich Drepper <drepper@cygnus.com>, 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 3 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, see <http://www.gnu.org/licenses/>. -*/ - -#include "includes.h" - -static int process_block (smb_iconv_t cd, const char *addr, size_t len, FILE *output) -{ -#define OUTBUF_SIZE 32768 - const char *start = addr; - char outbuf[OUTBUF_SIZE]; - char *outptr; - size_t outlen; - size_t n; - - while (len > 0) - { - outptr = outbuf; - outlen = OUTBUF_SIZE; - n = smb_iconv (cd, &addr, &len, &outptr, &outlen); - - if (outptr != outbuf) - { - /* We have something to write out. */ - int errno_save = errno; - - if (fwrite (outbuf, 1, outptr - outbuf, output) - < (size_t) (outptr - outbuf) - || ferror (output)) - { - /* Error occurred while printing the result. */ - DEBUG (0, ("conversion stopped due to problem in writing the output")); - return -1; - } - - errno = errno_save; - } - - if (errno != E2BIG) - { - /* iconv() ran into a problem. */ - switch (errno) - { - case EILSEQ: - DEBUG(0,("illegal input sequence at position %ld", - (long) (addr - start))); - break; - case EINVAL: - DEBUG(0, ("\ -incomplete character or shift sequence at end of buffer")); - break; - case EBADF: - DEBUG(0, ("internal error (illegal descriptor)")); - break; - default: - DEBUG(0, ("unknown iconv() error %d", errno)); - break; - } - - return -1; - } - } - - return 0; -} - - -static int process_fd (iconv_t cd, int fd, FILE *output) -{ - /* we have a problem with reading from a descriptor since we must not - provide the iconv() function an incomplete character or shift - sequence at the end of the buffer. Since we have to deal with - arbitrary encodings we must read the whole text in a buffer and - process it in one step. */ - static char *inbuf = NULL; - static size_t maxlen = 0; - char *inptr = NULL; - size_t actlen = 0; - - while (actlen < maxlen) - { - ssize_t n = read (fd, inptr, maxlen - actlen); - - if (n == 0) - /* No more text to read. */ - break; - - if (n == -1) - { - /* Error while reading. */ - DEBUG(0, ("error while reading the input")); - return -1; - } - - inptr += n; - actlen += n; - } - - if (actlen == maxlen) - while (1) - { - ssize_t n; - char *new_inbuf; - - /* Increase the buffer. */ - new_inbuf = (char *) realloc (inbuf, maxlen + 32768); - if (new_inbuf == NULL) - { - DEBUG(0, ("unable to allocate buffer for input")); - return -1; - } - inbuf = new_inbuf; - maxlen += 32768; - inptr = inbuf + actlen; - - do - { - n = read (fd, inptr, maxlen - actlen); - - if (n == 0) - /* No more text to read. */ - break; - - if (n == -1) - { - /* Error while reading. */ - DEBUG(0, ("error while reading the input")); - return -1; - } - - inptr += n; - actlen += n; - } - while (actlen < maxlen); - - if (n == 0) - /* Break again so we leave both loops. */ - break; - } - - /* Now we have all the input in the buffer. Process it in one run. */ - return process_block (cd, inbuf, actlen, output); -} - -/* Main function */ - -int main(int argc, char *argv[]) -{ - const char *file = NULL; - char *from = ""; - char *to = ""; - char *output = NULL; - const char *preload_modules[] = {NULL, NULL}; - FILE *out = stdout; - int fd; - smb_iconv_t cd; - - /* make sure the vars that get altered (4th field) are in - a fixed location or certain compilers complain */ - poptContext pc; - struct poptOption long_options[] = { - POPT_AUTOHELP - { "from-code", 'f', POPT_ARG_STRING, &from, 0, "Encoding of original text" }, - { "to-code", 't', POPT_ARG_STRING, &to, 0, "Encoding for output" }, - { "output", 'o', POPT_ARG_STRING, &output, 0, "Write output to this file" }, - { "preload-modules", 'p', POPT_ARG_STRING, &preload_modules[0], 0, "Modules to load" }, - { NULL } - }; - - setlinebuf(stdout); - - pc = poptGetContext("smbiconv", argc, (const char **) argv, - long_options, 0); - - poptSetOtherOptionHelp(pc, "[FILE] ..."); - - while(poptGetNextOpt(pc) != -1); - - if (preload_modules[0]) smb_load_modules(preload_modules); - - if(output) { - out = fopen(output, "w"); - - if(!out) { - DEBUG(0, ("Can't open output file '%s': %s, exiting...\n", output, strerror(errno))); - return 1; - } - } - - cd = smb_iconv_open_ex(tctx, to, from, lpcfg_parm_bool(tctx->lp_ctx, NULL, "iconv", "use_builtin_handlers", true)); - if((int)cd == -1) { - DEBUG(0,("unable to find from or to encoding, exiting...\n")); - if (out != stdout) fclose(out); - return 1; - } - - while((file = poptGetArg(pc))) { - if(strcmp(file, "-") == 0) fd = 0; - else { - fd = open(file, O_RDONLY); - - if(!fd) { - DEBUG(0, ("Can't open input file '%s': %s, ignoring...\n", file, strerror(errno))); - continue; - } - } - - /* Loop thru all arguments */ - process_fd(cd, fd, out); - - close(fd); - } - poptFreeContext(pc); - - fclose(out); - - return 0; -} |