From: Jeremy Allison Date: Mon, 6 Apr 2020 19:18:50 +0000 (-0700) Subject: s3: VFS: Add cmocka tests for pathname parsing in vfs_widelinks. X-Git-Tag: ldb-2.2.0~934 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=f7fe3474298370f592bd06e064712e60cb6181cf;p=thirdparty%2Fsamba.git s3: VFS: Add cmocka tests for pathname parsing in vfs_widelinks. Signed-off-by: Jeremy Allison Reviewed-by: Ralph Boehme --- diff --git a/source3/modules/test_vfs_widelinks.c b/source3/modules/test_vfs_widelinks.c new file mode 100644 index 00000000000..c6055c8c17c --- /dev/null +++ b/source3/modules/test_vfs_widelinks.c @@ -0,0 +1,88 @@ +/* + * Unix SMB/CIFS implementation. + * + * Unit test for widelinks path validator. + * + * Copyright (C) Jeremy Allison 2020 + * + * 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 . + */ + +/* Needed for static build to complete... */ +#include "includes.h" +#include "smbd/smbd.h" +NTSTATUS vfs_widelinks_init(TALLOC_CTX *ctx); + +#include "vfs_widelinks.c" +#include + +struct str_test_values { + const char *src_str; + const char *dst_str; +} ; + +/* As many nasty edge cases as I can think of.. */ + +static struct str_test_values examples[] = { + { "/", "/" }, + { "/../../", "/" }, + { "/foo/../", "/" }, + { "/./././", "/" }, + { "/./././.", "/" }, + { "/.../././.", "/..." }, + { "/./././.foo", "/.foo" }, + { "/./././.foo.", "/.foo." }, + { "/./././foo.", "/foo." }, + { "/foo/bar/..", "/foo" }, + { "/foo/bar/../baz/", "/foo/baz" }, + { "////////////////", "/" }, + { "/////////./././././.", "/" }, + { "/./.././../.boo/../baz", "/baz" }, + { "/a/component/path", "/a/component/path" }, + { "/a/component/path/", "/a/component/path" }, + { "/a/component/path/..", "/a/component" }, + { "/a/component/../path/", "/a/path" }, + { "///a/./././///component/../////path/", "/a/path" } +}; + +/* + * Test our realpath resolution code. + */ +static void test_resolve_realpath_name(void **state) +{ + unsigned i; + TALLOC_CTX *frame = talloc_stackframe(); + + for (i = 0; i < ARRAY_SIZE(examples); i++) { + char *test_dst = resolve_realpath_name(frame, + examples[i].src_str); + if (test_dst == NULL) { + fail(); + } + assert_string_equal(test_dst, examples[i].dst_str); + TALLOC_FREE(test_dst); + } + TALLOC_FREE(frame); +} + +int main(int argc, char **argv) +{ + const struct CMUnitTest tests[] = { + cmocka_unit_test(test_resolve_realpath_name), + }; + + cmocka_set_message_output(CM_OUTPUT_SUBUNIT); + + return cmocka_run_group_tests(tests, NULL, NULL); +} diff --git a/source3/modules/wscript_build b/source3/modules/wscript_build index 57a1bfb59fe..2d81357c513 100644 --- a/source3/modules/wscript_build +++ b/source3/modules/wscript_build @@ -623,3 +623,8 @@ bld.SAMBA3_MODULE('vfs_widelinks', init_function='', internal_module=bld.SAMBA3_IS_STATIC_MODULE('vfs_widelinks'), enabled=bld.SAMBA3_IS_ENABLED_MODULE('vfs_widelinks')) + +bld.SAMBA3_BINARY('test_vfs_widelinks', + source='test_vfs_widelinks.c', + deps='smbd_base cmocka', + for_selftest=True) diff --git a/source3/selftest/tests.py b/source3/selftest/tests.py index 50e77ef8055..1ceb0a5ad5f 100755 --- a/source3/selftest/tests.py +++ b/source3/selftest/tests.py @@ -502,6 +502,10 @@ plantestsuite("samba3.test_nfs4_acl", "none", [os.path.join(bindir(), "test_nfs4_acls"), "$SMB_CONF_PATH"]) +plantestsuite("samba3.test_vfs_widelinks", "none", + [os.path.join(bindir(), "test_vfs_widelinks"), + "$SMB_CONF_PATH"]) + plantestsuite( "samba3.resolvconf", "none", [os.path.join(samba3srcdir, "script/tests/test_resolvconf.sh")])