From: Samuel Cabrero Date: Mon, 18 Feb 2019 20:06:02 +0000 (+0100) Subject: s3:rpc_server: Return NTSTATUS in is_known_pipename function X-Git-Tag: talloc-2.3.0~12 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=dde08e8f262633c017c8288991c9e894cb72d0d8;p=thirdparty%2Fsamba.git s3:rpc_server: Return NTSTATUS in is_known_pipename function Signed-off-by: Samuel Cabrero Reviewed-by: Andreas Schneider Reviewed-by: Stefan Metzmacher --- diff --git a/source3/rpc_server/srv_pipe.c b/source3/rpc_server/srv_pipe.c index fec8d276e13..e48d2cf34d0 100644 --- a/source3/rpc_server/srv_pipe.c +++ b/source3/rpc_server/srv_pipe.c @@ -475,44 +475,43 @@ static bool check_bind_req(struct pipes_struct *p, /** * Is a named pipe known? * @param[in] pipename Just the filename - * @result Do we want to serve this? + * @result NT error code */ -bool is_known_pipename(const char *pipename, struct ndr_syntax_id *syntax) +NTSTATUS is_known_pipename(const char *pipename, struct ndr_syntax_id *syntax) { NTSTATUS status; if (strchr(pipename, '/')) { - DEBUG(1, ("Refusing open on pipe %s\n", pipename)); - return false; + DBG_WARNING("Refusing open on pipe %s\n", pipename); + return NT_STATUS_OBJECT_NAME_NOT_FOUND; } if (lp_disable_spoolss() && strequal(pipename, "spoolss")) { - DEBUG(10, ("refusing spoolss access\n")); - return false; + DBG_DEBUG("refusing spoolss access\n"); + return NT_STATUS_OBJECT_NAME_NOT_FOUND; } if (rpc_srv_get_pipe_interface_by_cli_name(pipename, syntax)) { - return true; + return NT_STATUS_OK; } status = smb_probe_module("rpc", pipename); if (!NT_STATUS_IS_OK(status)) { - DEBUG(10, ("is_known_pipename: %s unknown\n", pipename)); - return false; + DBG_DEBUG("Unknown pipe '%s'\n", pipename); + return NT_STATUS_OBJECT_NAME_NOT_FOUND; } - DEBUG(10, ("is_known_pipename: %s loaded dynamically\n", pipename)); + DBG_DEBUG("'%s' loaded dynamically\n", pipename); /* * Scan the list again for the interface id */ if (rpc_srv_get_pipe_interface_by_cli_name(pipename, syntax)) { - return true; + return NT_STATUS_OK; } - DEBUG(10, ("is_known_pipename: pipe %s did not register itself!\n", - pipename)); + DBG_DEBUG("pipe %s did not register itself!\n", pipename); - return false; + return NT_STATUS_OBJECT_NAME_NOT_FOUND; } /******************************************************************* diff --git a/source3/rpc_server/srv_pipe.h b/source3/rpc_server/srv_pipe.h index 453cca18d91..0a28f72d241 100644 --- a/source3/rpc_server/srv_pipe.h +++ b/source3/rpc_server/srv_pipe.h @@ -28,6 +28,7 @@ struct pipes_struct; bool create_next_pdu(struct pipes_struct *p); bool api_pipe_bind_auth3(struct pipes_struct *p, struct ncacn_packet *pkt); bool setup_fault_pdu(struct pipes_struct *p, NTSTATUS status); -bool is_known_pipename(const char *cli_filename, struct ndr_syntax_id *syntax); +NTSTATUS is_known_pipename(const char *cli_filename, + struct ndr_syntax_id *syntax); #endif /* _RPC_SERVER_SRV_PIPE_H_ */ diff --git a/source3/rpc_server/srv_pipe_hnd.c b/source3/rpc_server/srv_pipe_hnd.c index baa4ce96334..963af1486a1 100644 --- a/source3/rpc_server/srv_pipe_hnd.c +++ b/source3/rpc_server/srv_pipe_hnd.c @@ -62,7 +62,6 @@ NTSTATUS np_open(TALLOC_CTX *mem_ctx, const char *name, struct ndr_syntax_id syntax; struct npa_state *npa = NULL; NTSTATUS status; - bool ok; proxy_list = lp_parm_string_list(-1, "np", "proxy", NULL); @@ -99,9 +98,9 @@ NTSTATUS np_open(TALLOC_CTX *mem_ctx, const char *name, break; case RPC_SERVICE_MODE_EMBEDDED: /* Check if we handle this pipe internally */ - ok = is_known_pipename(name, &syntax); - if (!ok) { - DEBUG(2, ("'%s' is not a registered pipe!\n", name)); + status = is_known_pipename(name, &syntax); + if (!NT_STATUS_IS_OK(status)) { + DBG_WARNING("'%s' is not a registered pipe!\n", name); talloc_free(handle); return NT_STATUS_OBJECT_NAME_NOT_FOUND; } diff --git a/testsuite/unittests/test_sambafs_srv_pipe.c b/testsuite/unittests/test_sambafs_srv_pipe.c index 553f5309928..161f7131e8e 100644 --- a/testsuite/unittests/test_sambafs_srv_pipe.c +++ b/testsuite/unittests/test_sambafs_srv_pipe.c @@ -38,26 +38,26 @@ static int teardown_samr(void **state) static void test_is_known_pipename(void **state) { struct ndr_syntax_id syntax_id = ndr_table_samr.syntax_id; - bool is_pipename_ok; + NTSTATUS status; - is_pipename_ok = is_known_pipename("samr", &syntax_id); - assert_true(is_pipename_ok); + status = is_known_pipename("samr", &syntax_id); + assert_true(NT_STATUS_IS_OK(status)); } static void test_is_known_pipename_slash(void **state) { struct ndr_syntax_id syntax_id = ndr_table_samr.syntax_id; - bool is_pipename_ok; char dummy_module_path[4096] = {0}; const char *module_env; + NTSTATUS status; snprintf(dummy_module_path, sizeof(dummy_module_path), "%s/bin/modules/rpc/test_dummy_module.so", SRCDIR); - is_pipename_ok = is_known_pipename(dummy_module_path, &syntax_id); - assert_false(is_pipename_ok); + status = is_known_pipename(dummy_module_path, &syntax_id); + assert_true(NT_STATUS_IS_ERR(status)); module_env = getenv("UNITTEST_DUMMY_MODULE_LOADED"); assert_null(module_env);