r21911: Some more work on making the ncacn_np handling in smbd be less special.
authorJelmer Vernooij <jelmer@samba.org>
Wed, 21 Mar 2007 17:05:39 +0000 (17:05 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 19:49:38 +0000 (14:49 -0500)
(This used to be commit 52f32b7330ee1a2dd5850fd0e412279777edc00d)

source4/rpc_server/dcerpc_server.c
source4/rpc_server/dcerpc_sock.c

index 9c7f6dfa289c6dc94dacc1b3e3255c6558e3904f..fddbc6076af4adfbfc4e720c94004da31dae1ca2 100644 (file)
@@ -1409,9 +1409,9 @@ static void dcesrv_task_init(struct task_server *task)
                        break;
                        
                case NCACN_NP:
-/*                     FIXME: status = dcesrv_add_ep_np(dce_ctx, e, task->event_ctx, task->model_ops);
+                       status = dcesrv_add_ep_np(dce_ctx, e, task->event_ctx, task->model_ops);
                        if (!NT_STATUS_IS_OK(status)) goto failed;
-*/                     break;
+                       break;
 
                default:
                        status = NT_STATUS_NOT_SUPPORTED;
index 3808cc01304f3c1610beef3fac1b407d452605da..929c5c162dba3c1ec0fb836575032792afa0892d 100644 (file)
@@ -267,6 +267,52 @@ NTSTATUS dcesrv_add_ep_ncalrpc(struct dcesrv_context *dce_ctx, struct dcesrv_end
        return status;
 }
 
+
+/*
+  add a socket address to the list of events, one event per dcerpc endpoint
+*/
+static NTSTATUS add_socket_rpc_pipe_iface(struct dcesrv_context *dce_ctx, struct dcesrv_endpoint *e,
+                                        struct event_context *event_ctx, const struct model_ops *model_ops)
+{
+       struct dcesrv_socket_context *dcesrv_sock;
+       NTSTATUS status;
+                       
+       if (e->ep_description->endpoint == NULL) {
+               DEBUG(0, ("Endpoint mandatory for named pipes\n"));
+               return NT_STATUS_INVALID_PARAMETER;
+       }
+
+       dcesrv_sock = talloc(event_ctx, struct dcesrv_socket_context);
+       NT_STATUS_HAVE_NO_MEMORY(dcesrv_sock);
+
+       /* remember the endpoint of this socket */
+       dcesrv_sock->endpoint           = e;
+       dcesrv_sock->dcesrv_ctx         = talloc_reference(dcesrv_sock, dce_ctx);
+
+       status = NT_STATUS_OK;
+#if 0
+
+       status = stream_setup_smb_pipe(event_ctx, model_ops, &dcesrv_stream_ops, 
+                                    e->ep_description->endpoint, dcesrv_sock);
+       if (!NT_STATUS_IS_OK(status)) {
+               DEBUG(0,("service_setup_stream_socket(path=%s) failed - %s\n", 
+                        e->ep_description->endpoint, nt_errstr(status)));
+       }
+#endif
+       return status;
+}
+
+NTSTATUS dcesrv_add_ep_np(struct dcesrv_context *dce_ctx, struct dcesrv_endpoint *e,
+                                  struct event_context *event_ctx, const struct model_ops *model_ops)
+{
+       NTSTATUS status;
+
+       status = add_socket_rpc_pipe_iface(dce_ctx, e, event_ctx, model_ops);
+       NT_STATUS_NOT_OK_RETURN(status);
+
+       return status;
+}
+
 /*
   add a socket address to the list of events, one event per dcerpc endpoint
 */
@@ -324,5 +370,3 @@ NTSTATUS dcesrv_add_ep_tcp(struct dcesrv_context *dce_ctx, struct dcesrv_endpoin
 
        return NT_STATUS_OK;
 }
-
-