From 755297984b79394fe97afda6a3845dfc7580f752 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Mon, 25 Mar 2019 10:32:08 -0700 Subject: [PATCH 1/5] s3: net: Harden guess_charset() against overflow errors. BUG: https://bugzilla.samba.org/show_bug.cgi?id=13842 Signed-off-by: Jeremy Allison --- source3/registry/reg_parse.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/source3/registry/reg_parse.c b/source3/registry/reg_parse.c index 81815a4fd98..3093e6acf76 100644 --- a/source3/registry/reg_parse.c +++ b/source3/registry/reg_parse.c @@ -688,7 +688,15 @@ static bool guess_charset(const char** ptr, } if (srprs_bom(&pos, &charset, NULL)) { - *len -= (pos - *ptr); + size_t declen; + if (pos < *ptr) { + return false; + } + declen = (pos - *ptr); + if (*len < declen) { + return false; + } + *len -= declen; *ptr = pos; if (*file_enc == NULL) { *file_enc = charset; -- 2.21.0.1020.gf2820cf01a-goog From b0d47e399cb2e745533bf2017e2006331b54ba9d Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Mon, 25 Mar 2019 11:13:24 -0700 Subject: [PATCH 2/5] s3: net: Harden act_val_hex() act_val_sz() against errors. BUG: https://bugzilla.samba.org/show_bug.cgi?id=13842 Signed-off-by: Jeremy Allison --- source3/registry/reg_parse.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source3/registry/reg_parse.c b/source3/registry/reg_parse.c index 3093e6acf76..caf2a063b02 100644 --- a/source3/registry/reg_parse.c +++ b/source3/registry/reg_parse.c @@ -117,6 +117,7 @@ static bool act_val_hex(struct reg_parse* p, cbuf* value, bool cont) cbuf_swapptr(p->valblob, &dst, dlen); } else { DEBUG(0, ("iconvert_talloc failed\n")); + return false; } talloc_free(dst); } @@ -166,6 +167,7 @@ static bool act_val_sz(struct reg_parse* p, cbuf* value, bool cont) } else { DEBUG(0, ("convert_string_talloc failed: >%s<\n" "use it as is\t", src)); + return false; } talloc_free(dst); -- 2.21.0.1020.gf2820cf01a-goog From 95fa5b62d8b0f23fd983f00192538f74020e36ea Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Mon, 13 May 2019 13:45:10 -0700 Subject: [PATCH 3/5] s3: net: Harden srprs_str() against memcmp overread. BUG: https://bugzilla.samba.org/show_bug.cgi?id=13842 Signed-off-by: Jeremy Allison --- source3/lib/srprs.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/source3/lib/srprs.c b/source3/lib/srprs.c index 02f4c80e27b..67ada3796f0 100644 --- a/source3/lib/srprs.c +++ b/source3/lib/srprs.c @@ -46,9 +46,17 @@ bool srprs_char(const char** ptr, char c) { bool srprs_str(const char** ptr, const char* str, ssize_t len) { + /* By definition *ptr must be null terminated. */ + size_t ptr_len = strlen(*ptr); + if (len == -1) len = strlen(str); + /* Don't memcmp read past end of buffer. */ + if (len > ptr_len) { + return false; + } + if (memcmp(*ptr, str, len) == 0) { *ptr += len; return true; -- 2.21.0.1020.gf2820cf01a-goog From 9e9cf52fdf960c00bfbed49d943e5cdc3ce35990 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Tue, 7 May 2019 10:42:55 -0700 Subject: [PATCH 4/5] s3: net: Rewrite of reg_parse_fd() to harden against buffer overwrites. Remove unused handle_iconv_errno(). Fix leaks of iconv handles. BUG: https://bugzilla.samba.org/show_bug.cgi?id=13842 Signed-off-by: Jeremy Allison --- source3/registry/reg_parse.c | 302 +++++++++++++++++++++++------------ 1 file changed, 203 insertions(+), 99 deletions(-) diff --git a/source3/registry/reg_parse.c b/source3/registry/reg_parse.c index caf2a063b02..c64cf66a5ab 100644 --- a/source3/registry/reg_parse.c +++ b/source3/registry/reg_parse.c @@ -265,6 +265,7 @@ struct reg_parse* reg_parse_new(const void* ctx, assert(&s->reg_format_callback == (struct reg_format_callback*)s); return s; fail: + set_iconv(&s->str2UTF16, NULL, NULL); talloc_free(s); return NULL; } @@ -787,59 +788,13 @@ done: return ret; } - -static void -handle_iconv_errno(int err, const char* obuf, size_t linenum, - smb_iconv_t cd, const char** iptr, size_t* ilen, - char** optr, size_t *olen) +static void display_iconv_error_bytes(const char *inbuf, size_t len) { - const char *pos = obuf; - const char *ptr = obuf; - switch(err) { - case EINVAL: - /* DEBUG(0, ("Incomplete multibyte sequence\n")); */ - case E2BIG: - return; - case EILSEQ: - break; - default: - assert(false); - } - - **optr = '\0'; - while (srprs_line(&ptr, NULL) && srprs_nl(&ptr, NULL)) { - pos = ptr; - linenum++; - } - if (pos == *optr) { - pos = MAX(obuf, *optr-60); - } - DEBUG(0, ("Illegal multibyte sequence at line %lu: %s", - (long unsigned)(linenum+1), pos)); - - assert((*ilen) > 0); - do { - size_t il = 1; - DEBUGADD(0, ("<%02x>", (unsigned char)**iptr)); - - if ((*olen) > 0) { - *(*optr)++ = '\?'; - (*iptr)++; - /* Todo: parametrize, e.g. skip: *optr++ = *iptr++; */ - (*ilen)--; - } - - if (smb_iconv(cd, iptr, &il, optr, olen) != (size_t)-1 || (errno != EILSEQ)) { - if(il == 0) - (*ilen)-- ; - break; - } - + size_t i; + for (i = 0; i < 4 && i < len; i++) { + DEBUGADD(0, ("<%02x>", (unsigned char)inbuf[i])); } - while ((*ilen > 0) && (*olen > 0)); - DEBUGADD(0, ("\n")); - } int reg_parse_fd(int fd, const struct reg_parse_callback* cb, const char* opts) @@ -848,106 +803,255 @@ int reg_parse_fd(int fd, const struct reg_parse_callback* cb, const char* opts) cbuf* line = cbuf_new(mem_ctx); smb_iconv_t cd = (smb_iconv_t)-1; struct reg_parse* parser = NULL; - char buf_raw[1024]; - char buf_unix[1025]; - + char buf_in[1024]; + char buf_out[1025] = { 0 }; ssize_t nread; - size_t nconv; - const char* pos; const char* iptr; char* optr; size_t ilen; size_t olen; + size_t avail_osize = sizeof(buf_out)-1; + size_t space_to_read = sizeof(buf_in); int ret = -1; bool eof = false; - size_t linenum = 0; + size_t linecount = 0; struct reg_parse_fd_opt opt = reg_parse_fd_opt(mem_ctx, opts); if (cb == NULL) { - DEBUG(0,("reg_parse_fd: NULL callback\n")); + DBG_ERR("NULL callback\n"); + ret = -1; goto done; } - nread = read(fd, buf_raw, sizeof(buf_raw)); + nread = read(fd, buf_in, space_to_read); if (nread < 0) { - DEBUG(0, ("reg_parse_fd: read failed: %s\n", strerror(errno))); - ret = nread; + DBG_ERR("read failed: %s\n", strerror(errno)); + ret = -1; + goto done; + } + if (nread == 0) { + /* Empty file. */ + eof = true; goto done; } - iptr = &buf_raw[0]; + iptr = buf_in; ilen = nread; if (!guess_charset(&iptr, &ilen, &opt.file_enc, &opt.str_enc)) { - DEBUG(0, ("reg_parse_fd: failed to guess encoding\n")); + DBG_ERR("reg_parse_fd: failed to guess encoding\n"); + ret = -1; goto done; } - DEBUG(10, ("reg_parse_fd: encoding file: %s str: %s\n", - opt.file_enc, opt.str_enc)); + if (ilen == 0) { + /* File only contained charset info. */ + eof = true; + ret = -1; + goto done; + } + + DBG_DEBUG("reg_parse_fd: encoding file: %s str: %s\n", + opt.file_enc, opt.str_enc); if (!set_iconv(&cd, "unix", opt.file_enc)) { - DEBUG(0, ("reg_parse_fd: failed to set file encoding %s\n", - opt.file_enc)); + DBG_ERR("reg_parse_fd: failed to set file encoding %s\n", + opt.file_enc); + ret = -1; goto done; } parser = reg_parse_new(mem_ctx, *cb, opt.str_enc, opt.flags); + if (parser == NULL) { + ret = -1; + goto done; + } + + /* Move input data to start of buf_in. */ + if (iptr > buf_in) { + memmove(buf_in, iptr, ilen); + iptr = buf_in; + } + + optr = buf_out; + /* Leave last byte for null termination. */ + olen = avail_osize; + + /* + * We read from buf_in (iptr), iconv converting into + * buf_out (optr). + */ - optr = &buf_unix[0]; while (!eof) { - olen = sizeof(buf_unix) - (optr - buf_unix) - 1 ; - while ( olen > 0 ) { - memmove(buf_raw, iptr, ilen); - - nread = read(fd, buf_raw + ilen, sizeof(buf_raw) - ilen); - if (nread < 0) { - DEBUG(0, ("reg_parse_fd: read failed: %s\n", strerror(errno))); - ret = nread; + const char *pos; + size_t nconv; + + if (olen == 0) { + /* We're out of possible room. */ + DBG_ERR("no room in output buffer\n"); + ret = -1; + goto done; + } + nconv = smb_iconv(cd, &iptr, &ilen, &optr, &olen); + if (nconv == (size_t)-1) { + bool valid_err = false; + if (errno == EINVAL) { + valid_err = true; + } + if (errno == E2BIG) { + valid_err = true; + } + if (!valid_err) { + DBG_ERR("smb_iconv error in file at line %zu: ", + linecount); + display_iconv_error_bytes(iptr, ilen); + ret = -1; goto done; } + /* + * For valid errors process the + * existing buffer then continue. + */ + } - iptr = buf_raw; - ilen += nread; - - if (ilen == 0) { - smb_iconv(cd, NULL, NULL, &optr, &olen); - eof = true; - break; - } + /* + * We know this is safe as we have an extra + * enforced zero byte at the end of buf_out. + */ + *optr = '\0'; + pos = buf_out; - nconv = smb_iconv(cd, &iptr, &ilen, &optr, &olen); + while (srprs_line(&pos, line) && srprs_nl_no_eos(&pos, line, eof)) { + int retval; - if (nconv == (size_t)-1) { - handle_iconv_errno(errno, buf_unix, linenum, - cd, &iptr, &ilen, - &optr, &olen); - break; + /* Process all lines we got. */ + retval = reg_parse_line(parser, cbuf_gets(line, 0)); + if (retval < opt.fail_level) { + DBG_ERR("reg_parse_line %zu fail %d\n", + linecount, + retval); + ret = -1; + goto done; } + cbuf_clear(line); + linecount++; } - /* process_lines: */ - *optr = '\0'; - pos = &buf_unix[0]; + if (pos > buf_out) { + /* + * The output data we have + * processed starts at buf_out + * and ends at pos. + * The unprocessed output + * data starts at pos and + * ends at optr. + * + * <------ sizeof(buf_out) - 1------------->|0| + * <--------- avail_osize------------------>|0| + * +----------------------+-------+-----------+ + * | | | |0| + * +----------------------+-------+-----------+ + * ^ ^ ^ + * | | | + * buf_out pos optr + */ + size_t unprocessed_len; + + /* Paranoia checks. */ + if (optr < pos) { + ret = -1; + goto done; + } + unprocessed_len = optr - pos; - while ( srprs_line(&pos, line) && srprs_nl_no_eos(&pos, line, eof)) { - linenum ++; - ret = reg_parse_line(parser, cbuf_gets(line, 0)); - if (ret < opt.fail_level) { + /* Paranoia checks. */ + if (avail_osize < unprocessed_len) { + ret = -1; goto done; } - cbuf_clear(line); + /* Move down any unprocessed data. */ + memmove(buf_out, pos, unprocessed_len); + + /* + * After the move, reset the output length. + * + * <------ sizeof(buf_out) - 1------------->|0| + * <--------- avail_osize------------------>|0| + * +----------------------+-------+-----------+ + * | | |0| + * +----------------------+-------+-----------+ + * ^ ^ + * | optr + * buf_out + */ + optr = buf_out + unprocessed_len; + /* + * Calculate the new output space available + * for iconv. + * We already did the paranoia check for this + * arithmetic above. + */ + olen = avail_osize - unprocessed_len; } - memmove(buf_unix, pos, optr - pos); - optr -= (pos - buf_unix); + + /* + * Move any unprocessed data to the start of + * the input buffer (buf_in). + */ + if (ilen > 0 && iptr > buf_in) { + memmove(buf_in, iptr, ilen); + } + + /* Is there any space to read more input ? */ + if (ilen >= sizeof(buf_in)) { + /* No space. Nothing was converted. Error. */ + DBG_ERR("no space in input buffer\n"); + ret = -1; + goto done; + } + + space_to_read = sizeof(buf_in) - ilen; + + /* Read the next chunk from the file. */ + nread = read(fd, buf_in, space_to_read); + if (nread < 0) { + DBG_ERR("read failed: %s\n", strerror(errno)); + ret = -1; + goto done; + } + if (nread == 0) { + /* Empty file. */ + eof = true; + continue; + } + + /* Paranoia check. */ + if (nread + ilen < ilen) { + ret = -1; + goto done; + } + + /* Paranoia check. */ + if (nread + ilen > sizeof(buf_in)) { + ret = -1; + goto done; + } + + iptr = buf_in; + ilen = nread + ilen; } ret = 0; + done: + set_iconv(&cd, NULL, NULL); + if (parser) { + set_iconv(&parser->str2UTF16, NULL, NULL); + } talloc_free(mem_ctx); return ret; } -- 2.21.0.1020.gf2820cf01a-goog From c88ae2c7f0648d40f5ca651b610ce58a3b3a2d69 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Thu, 9 May 2019 14:34:37 -0700 Subject: [PATCH 5/5] s3: net: Test of fuzzer problems with net rpc registry import. BUG: https://bugzilla.samba.org/show_bug.cgi?id=13842 Signed-off-by: Jeremy Allison --- .../script/tests/test_net_registry_import.sh | 192 ++++++++++++++++++ source3/selftest/tests.py | 1 + 2 files changed, 193 insertions(+) create mode 100755 source3/script/tests/test_net_registry_import.sh diff --git a/source3/script/tests/test_net_registry_import.sh b/source3/script/tests/test_net_registry_import.sh new file mode 100755 index 00000000000..40e68fad875 --- /dev/null +++ b/source3/script/tests/test_net_registry_import.sh @@ -0,0 +1,192 @@ +#!/bin/sh + +if [ $# -lt 4 ]; then +cat <&1` + ret=$? + + if [ $ret != 0 ] ; then + echo "$out" + echo "command failed with output $ret" + false + return + fi + + echo "$out" | grep 'Found Byte Order Mark for : UTF-16LE' + ret=$? + + if [ $ret -ne 0 ] ; then + echo "$out" + echo "$samba_net rpc registry import $LOCAL_PATH/case3b45ccc3b.dat failed - should get 'Found Byte Order Mark for : UTF-16LE'" + false + return + fi + +# +# Expect: +# reg_parse_fd: smb_iconv error in file at line 0: <77><41> +# + cmd='$VALGRIND $samba_net rpc registry import $LOCAL_PATH/casecbe8c2427.dat -S$SERVER -U$USERNAME%$PASSWORD $ADDARGS' + + eval echo "$cmd" + out=`eval $cmd 2>&1` + ret=$? + + if [ $? != 0 ] ; then + echo "$out" + echo "command failed with output $ret" + false + return + fi + + echo "$out" | grep 'reg_parse_fd: smb_iconv error in file at line 0: <77><41>' + ret=$? + + if [ $ret -ne 0 ] ; then + echo "$out" + echo "$samba_net rpc registry import $LOCAL_PATH/case3b45ccc3b.dat failed - should get 'reg_parse_fd: smb_iconv error in file at line 0: <77><41>'" + false + return + fi + +# +# For test3.dat, the parse of the first part of the file is successful, +# but fails on upload as we're writing to an unwriteable registry. +# Expect: +# setval ProductType failed: WERR_REGISTRY_IO_FAILED +# reg_parse_fd: reg_parse_line line 21 fail -2 +# This counts as a success test as the file is parsed, but +# the upload failed. +# + cmd='$VALGRIND $samba_net rpc registry import $LOCAL_PATH/regtest3.dat -S$SERVER -U$USERNAME%$PASSWORD $ADDARGS' + + eval echo "$cmd" + out=`eval $cmd 2>&1` + ret=$? + + if [ $? != 0 ] ; then + echo "$out" + echo "command failed with output $ret" + false + return + fi + + echo "$out" | grep 'setval ProductType failed: WERR_REGISTRY_IO_FAILED' + ret=$? + + if [ $ret -ne 0 ] ; then + echo "$out" + echo "$samba_net rpc registry import $LOCAL_PATH/regtest3.dat failed - should get 'setval ProductType failed: WERR_REGISTRY_IO_FAILED'" + false + return + fi + + echo "$out" | grep 'reg_parse_fd: reg_parse_line 20 fail -2' + ret=$? + + if [ $ret -ne 0 ] ; then + echo "$out" + echo "$samba_net rpc registry import $LOCAL_PATH/regtest3.dat failed - should get 'reg_parse_fd: reg_parse_line 20 fail -2'" + false + return + fi + + true + return +} + +########################################################### +# Check net rpc registry import doesn't crash +########################################################### + + rm -f $LOCAL_PATH/case3b45ccc3b.dat + rm -f $LOCAL_PATH/casecbe8c2427.dat + rm -f $LOCAL_PATH/regtest3.dat + +# Create test cases + + base64 -d <<'EOF' | gunzip -c > $LOCAL_PATH/case3b45ccc3b.dat +H4sIAODLjlwCA/v/L5whkyGPIYUhn6GcoZhBgSGIIZUhHShWzFDCUMRQCRRxBcpmAnn5QL4CQxhQ +vggomwnk5wH5pgx6DAZAyMvABcbRDB4M3kA9kQzxDD4M/gzODI5AOp7BF0g7A+U8GfyAsjEMwUAV +wQwhQLYvkOfMUPqRUvDw4yAHnz6OgsELgGlYh8EYCHXA6RnENmLIgbJNGZLh4jEMvEWRee8eXl8u +//f8N9vK5cVVXP9v2rB+/qYw+3xko5Su8jSiLZ0zwJ4GAO4s/cYABAAA +EOF + + base64 -d <<'EOF' | gunzip -c > $LOCAL_PATH/casecbe8c2427.dat +H4sIALjPjlwCA2NwZfBliGFwZihlKALCVIY8hhIgLx9MFwHpHIZgoGgJUA2ILmIoY8hkSAayioEi +OQyJQHW5YLIcqLaIIRsoXgLklwBVgcyIYSgA8oqAOBdsCsiEYoZYBl4GLgYlsG2JDElAc1KB6kCm +ZYLtTWWoAJIgncVACDE5BajeFkjCeFYMBijQEIuZxUCcDPZZJkNJ3f7yK45/V3S8epR2I14uf+4W +ee+dz0RXshv4SHxzff2XJYbx0pWaEs+ul5XKF9hlFIu4RG73Lf3rOXHW3NxpuvVnE9Xk7zxv2p3I +tlLtWjY/i1HIGhdpLy/Gub9nH5jLd/rqdYfv2uumzgq7PIldPY3Labru/65Q/nLJh1oBk/0tT2v2 +eUdbzFg0NfPmamFH421aJxMPhnr7X+y0iRdSX+ex+IJ0Yaf0ahV5440Wj7cbK/jkbSjcNdvpR+WN +/5Knnn8PjvvD9O/Ws4pXUqG3lbdFrf1846zzcTOFW8yhB3QNZRP6TjOsu1rDvIaHZVfMyYd1Mhev +ik/a5m36Y85+y63pPmtXb8nOU5Zd0qK0yVJK8a27WqKHSOKaS7wpwULu1TsM94bVGD3xviR0u1Il +rFHoxeUrm2+6Ke4x2SGitD912ZGfLcmG0xiyIn+bmx0+s+dbXuT8xfl+CgL168yNzYxCgsviz/46 +b7746Wnh8zXZHDof6/yDyxdf31JkzN5YVP4kf/vkvrS1ioauYemc3RIt7znZQvpOy7XO8VU5+KeP +VXKPXrzr+nMv/v5wkpA7v2TukgqHZ4e6i+Zsjfny6vHdg7+mLFjg/th4m55ppH75HYcLjEa/U4/w +SeXMTuVXablo/fmJnlPA6T12usz8nBGVKbVzTNqrTJ6d/+Y0y2bGc5MlzgnymUVq/9/PyZ2QxZvR +4WyR810zd32X5ncJRd/y7VNCd746G/jTTFLTJfHx86dVtlkL02zeCJeYsmkdrXVhtpl7Y5OOyJcD +DJXA9JPJkA5MT8YMOuA0psNgBExRMLYZgwkSOxnM1kdiG6CQkNTpD0zXGeBc4AJMx7nQFF8MTttA +8f8VDBoM5gya4NRNtgN0zczNjM1MDCwMLcwMTCwtLYxNjLE4wK5pwpebAAJ05DUABAAA +EOF + + base64 -d <<'EOF' > $LOCAL_PATH/regtest3.dat +UkVHRURJVDQKCltIS0VZX0xPQ0FMX01BQ0hJTkVdCgpbSEtFWV9MT0NBTF9NQUNISU5FXFNPRlRX +QVJFXQoKW0hLRVlfTE9DQUxfTUFDSElORVxTT0ZUV0FSRVxNaWNyb3NvZnRdCgpbSEtFWV9MT0NB +TF9NQUNISU5FXFNPRlRXQVJFXE1pY3Jvc29mdFxXaW5kb3dzIE5UXQoKW0hLRVlfTE9DQUxfTUFD +SElORVxTT0ZUV0FSRVxNaWNyb3NvZnRcV2luZG93cyBOVFxDdXJyZW50VmVyc2lvbl0KIkN1cnJl +bnRWZXJzaW9uIj0iNi4xIgoKW0hLRVlfTE9DQUxfTUFDSElORVxTWVNURU1dCgpbSEtFWV9MT0NB +TF9NQUNISU5FXFNZU1RFTVxDdXJyZW50Q29udHJvbFNldF0KCltIS0VZX0xPQ0FMX01BQ0hJTkVc +U1lTVEVNXEN1cnJlbnRDb250cm9sU2V0XENvbnRyb2xdCgpbSEtFWV9MT0NBTF9NQUNISU5FXFNZ +U1RFTVxDdXJyZW50Q29udHJvbFNldFxDb250cm9sXFByb2R1Y3RPcHRpb25zXQoiUHJvZHVjdFR5 +cGUiPSJMYW5tYW5OVCIKCltIS0VZX0xPQ0FMX01BQ0hJTkVcU1lTVEVNXEN1cnJlbnRDb250cm9s +U2V0XENvbnRyb2xcUHJpbnRdCgpbSEtFWV9MT0NBTF9NQUNISU5FXFNZU1RFTVxDdXJyZW50Q29u +dHJvbFNldFxDb250cm9sXFRlcm1pbmFsIFNlcnZlcl0KCltIS0VZX0xPQ0FMX01BQ0hJTkVcU1lT +VEVNXQoKW0hLRVlfTE9DQUxfTUFDSElORVxTWVNURU1cQ3VycmVudENvbnRyb2xTZXRdCgpbSEtF +WV9MT0NBTF9NQUNISU5FXFNZU1RFTVxDdXJyZW50Q29udHJvbFNldFxTZXJ2aWNlc10KCltIS0VZ +X0xPQ0FMX01BQ0hJTkVcU1lTVEVNXEN1cnJlbnRDb250cm9sU2V0XFNlcnZpY2VzXE5ldGxvZ29u +XQoKW0hLRVlfTE9DQUxfTUFDSElORVxTWVNURU1cQ3VycmVudENvbnRyb2xTZXRcU2VydmljZXNc +TmV0bG9nb25cUGFyYW1ldGVyc10KIlJlZnVzZVBhc3N3b3JkQ2hhbmdlIj1kd29yZDowMDAwMDAw +MAoKW0hLRVlfTE9DQUxfTUFDSElORVxTWVNURU1cQ3VycmVudENvbnRyb2xTZXRcU2VydmljZXNc +QWxlcnRlcl0KCltIS0VZX0xPQ0FMX01BQ0hJTkVcU1lTVEVNXEN1cnJlbnRDb250cm9sU2V0XA== +EOF + +testit "Test net rpc registry import" \ + test_net_registry_import || \ + failed=`expr $failed + 1` + +# Clean up test cases. + rm -f $LOCAL_PATH/case3b45ccc3b.dat + rm -f $LOCAL_PATH/casecbe8c2427.dat + rm -f $LOCAL_PATH/regtest3.dat + +testok $0 $failed diff --git a/source3/selftest/tests.py b/source3/selftest/tests.py index b18b8f07eba..4df2553a525 100755 --- a/source3/selftest/tests.py +++ b/source3/selftest/tests.py @@ -366,6 +366,7 @@ for env in ["fileserver:local"]: plantestsuite("samba3.blackbox.net_usershare", env, [os.path.join(samba3srcdir, "script/tests/test_net_usershare.sh"), '$SERVER', '$SERVER_IP', '$USERNAME', '$PASSWORD', smbclient3]) plantestsuite("samba3.blackbox.smbstatus", env, [os.path.join(samba3srcdir, "script/tests/test_smbstatus.sh"), '$SERVER', '$SERVER_IP', '$DOMAIN', '$USERNAME', '$PASSWORD', '$USERID', '$LOCAL_PATH', '$PREFIX', smbclient3, smbstatus, configuration, "SMB3"]) + plantestsuite("samba3.blackbox.net_registry_import", env, [os.path.join(samba3srcdir, "script/tests/test_net_registry_import.sh"), '$SERVER', '$LOCAL_PATH', '$USERNAME', '$PASSWORD']) # TODO encrypted against member, with member creds, and with DC creds plantestsuite("samba3.blackbox.net.misc", "nt4_dc:local", -- 2.21.0.1020.gf2820cf01a-goog