*/
#include "includes.h"
-#include "rpc_server.h"
#include "fake_file.h"
#include "rpc_dce.h"
#include "ntdomain.h"
#include "rpc_server/rpc_ncacn_np.h"
#include "rpc_server/srv_pipe_hnd.h"
#include "rpc_server/srv_pipe.h"
+#include "rpc_server/rpc_server.h"
+#include "rpc_server/rpc_config.h"
#include "../lib/tsocket/tsocket.h"
#include "../lib/util/tevent_ntstatus.h"
}
DEBUG(6,(" name: %s len: %u\n",
- get_pipe_name_from_syntax(talloc_tos(), &p->syntax),
+ get_pipe_name_from_syntax(talloc_tos(), &p->contexts->syntax),
(unsigned int)n));
/*
DEBUG(5,("read_from_pipe: too large read (%u) requested on "
"pipe %s. We can only service %d sized reads.\n",
(unsigned int)n,
- get_pipe_name_from_syntax(talloc_tos(), &p->syntax),
+ get_pipe_name_from_syntax(talloc_tos(), &p->contexts->syntax),
RPC_MAX_PDU_FRAG_LEN ));
n = RPC_MAX_PDU_FRAG_LEN;
}
DEBUG(10,("read_from_pipe: %s: current_pdu_len = %u, "
"current_pdu_sent = %u returning %d bytes.\n",
- get_pipe_name_from_syntax(talloc_tos(), &p->syntax),
+ get_pipe_name_from_syntax(talloc_tos(), &p->contexts->syntax),
(unsigned int)p->out_data.frag.length,
(unsigned int)p->out_data.current_pdu_sent,
(int)data_returned));
DEBUG(10,("read_from_pipe: %s: fault_state = %d : data_sent_length "
"= %u, p->out_data.rdata.length = %u.\n",
- get_pipe_name_from_syntax(talloc_tos(), &p->syntax),
+ get_pipe_name_from_syntax(talloc_tos(), &p->contexts->syntax),
(int)p->fault_state,
(unsigned int)p->out_data.data_sent_length,
(unsigned int)p->out_data.rdata.length));
if(!create_next_pdu(p)) {
DEBUG(0,("read_from_pipe: %s: create_next_pdu failed.\n",
- get_pipe_name_from_syntax(talloc_tos(), &p->syntax)));
+ get_pipe_name_from_syntax(talloc_tos(), &p->contexts->syntax)));
return -1;
}
NTSTATUS np_open(TALLOC_CTX *mem_ctx, const char *name,
const struct tsocket_address *local_address,
const struct tsocket_address *remote_address,
- struct client_address *client_id,
- struct auth_serversupplied_info *session_info,
+ struct auth_session_info *session_info,
struct messaging_context *msg_ctx,
struct fake_file_handle **phandle)
{
- const char *rpcsrv_type;
+ enum rpc_service_mode_e pipe_mode;
const char **proxy_list;
struct fake_file_handle *handle;
- bool external = false;
+ struct ndr_syntax_id syntax;
proxy_list = lp_parm_string_list(-1, "np", "proxy", NULL);
/* Check what is the server type for this pipe.
Defaults to "embedded" */
- rpcsrv_type = lp_parm_const_string(GLOBAL_SECTION_SNUM,
- "rpc_server", name,
- "embedded");
- if (StrCaseCmp(rpcsrv_type, "embedded") != 0) {
- external = true;
- }
+ pipe_mode = rpc_service_mode(name);
/* Still support the old method for defining external servers */
if ((proxy_list != NULL) && str_list_check_ci(proxy_list, name)) {
- external = true;
+ pipe_mode = RPC_SERVICE_MODE_EXTERNAL;
}
- if (external) {
- struct np_proxy_state *p;
+ switch (pipe_mode) {
+ case RPC_SERVICE_MODE_EXTERNAL:
- p = make_external_rpc_pipe_p(handle, name,
+ handle->private_data = (void *)make_external_rpc_pipe_p(
+ handle, name,
local_address,
remote_address,
session_info);
handle->type = FAKE_FILE_TYPE_NAMED_PIPE_PROXY;
- handle->private_data = p;
- } else {
- struct pipes_struct *p;
- struct ndr_syntax_id syntax;
+ break;
+
+ case RPC_SERVICE_MODE_EMBEDDED:
if (!is_known_pipename(name, &syntax)) {
TALLOC_FREE(handle);
return NT_STATUS_OBJECT_NAME_NOT_FOUND;
}
- p = make_internal_rpc_pipe_p(handle, &syntax, client_id,
+ handle->private_data = (void *)make_internal_rpc_pipe_p(
+ handle, &syntax, remote_address,
session_info, msg_ctx);
handle->type = FAKE_FILE_TYPE_NAMED_PIPE;
- handle->private_data = p;
+ break;
+
+ case RPC_SERVICE_MODE_DISABLED:
+ handle->private_data = NULL;
+ break;
}
if (handle->private_data == NULL) {
struct np_proxy_state *p;
struct np_ipc_readv_next_vector_state next_vector;
- size_t nread;
+ ssize_t nread;
bool is_data_outstanding;
};