summaryrefslogtreecommitdiff
path: root/source4/smbd
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2004-01-08 22:55:27 +0000
committerStefan Metzmacher <metze@samba.org>2004-01-08 22:55:27 +0000
commit7e6cf43756b7643e2f0ee7ada5076f36f3a24bb7 (patch)
treead6aebaaf7e3da39992548925135537d66ffabaa /source4/smbd
parent8364fd2853ff4bb608157656878e05ca7984a2b9 (diff)
downloadsamba-7e6cf43756b7643e2f0ee7ada5076f36f3a24bb7.tar.gz
samba-7e6cf43756b7643e2f0ee7ada5076f36f3a24bb7.tar.bz2
samba-7e6cf43756b7643e2f0ee7ada5076f36f3a24bb7.zip
This patch adds a better dcerpc server infastructure.
1.) We now register endpoint servers add startup via register_backend() and later use the smb.conf 'dcerpc endpoint servers' parameter to setup the dcesrv_context 2.) each endpoint server can register at context creation time as much interfaces as it wants (multiple interfaces on one endpoint are supported!) (NOTE: there's a difference between 'endpoint server' and 'endpoint'! for details look at rpc_server/dcesrv_server.h) 3.) one endpoint can have a security descriptor registered to it self this will be checked in the future when a client wants to connect to an smb pipe endpoint. 4.) we now have a 'remote' endpoint server, which works like the ntvfs_cifs module it takes this options in the [globals] section: dcerpc remote:interfaces = srvsvc, winreg, w32time, epmapper dcerpc remote:binding = ... dcerpc remote:user = ... dcerpc remote:password = ... 5.) we currently have tree endpoint servers: epmapper, rpcecho and remote the default for the 'dcerpc endpiont servers = epmapper, rpcecho' for testing you can also do dcerpc endpoint servers = rpcecho, remote, epmapper dcerpc remote:interfaces = srvsvc, samr, netlogon 6,) please notice the the epmapper now only returns NO_ENTRIES (but I think we'll find a solution for this too:-) 7.) also there're some other stuff left, but step by step :-) This patch also includes updates for the register_subsystem() , ntvfs_init(), and some other funtions to check for duplicate subsystem registration metze (hmmm, my first large commit...I hope it works as supposed :-) (This used to be commit 917e45dafd5be4c2cd90ff425b8d6f8403122349)
Diffstat (limited to 'source4/smbd')
-rw-r--r--source4/smbd/process.c6
-rw-r--r--source4/smbd/process_thread.c2
-rw-r--r--source4/smbd/reply.c2
-rw-r--r--source4/smbd/request.c4
4 files changed, 11 insertions, 3 deletions
diff --git a/source4/smbd/process.c b/source4/smbd/process.c
index b5138ac971..411ffef717 100644
--- a/source4/smbd/process.c
+++ b/source4/smbd/process.c
@@ -765,7 +765,7 @@ void init_smbsession(struct event_context *ev, struct model_ops *model_ops, int
event_add_fd(ev, &fde);
/* setup the DCERPC server subsystem */
- dcesrv_init(&smb->dcesrv);
+ dcesrv_init_context(&smb->dcesrv);
}
@@ -825,6 +825,10 @@ void smbd_process_init(void)
if (!ntvfs_init())
exit(1);
+ /* Setup the DCERPC subsystem */
+ if (!dcesrv_init())
+ exit(1);
+
/* re-initialise the timezone */
TimeInit();
diff --git a/source4/smbd/process_thread.c b/source4/smbd/process_thread.c
index 523c38f521..9acd49916b 100644
--- a/source4/smbd/process_thread.c
+++ b/source4/smbd/process_thread.c
@@ -110,7 +110,7 @@ static void accept_rpc_connection(struct event_context *ev, struct fd_event *fde
ev = event_context_init();
MUTEX_LOCK_BY_ID(MUTEX_SMBD);
- init_rpcsession(ev, fde->private, accepted_fd);
+ init_rpc_session(ev, fde->private, accepted_fd);
MUTEX_UNLOCK_BY_ID(MUTEX_SMBD);
pthread_attr_init(&thread_attr);
diff --git a/source4/smbd/reply.c b/source4/smbd/reply.c
index ce203cbf93..7d6450b395 100644
--- a/source4/smbd/reply.c
+++ b/source4/smbd/reply.c
@@ -249,7 +249,7 @@ void reply_ioctl(struct request_context *req)
{
union smb_ioctl *io;
- /* parse requst */
+ /* parse request */
REQ_CHECK_WCT(req, 3);
REQ_TALLOC(io, sizeof(*io));
diff --git a/source4/smbd/request.c b/source4/smbd/request.c
index 65bf71051f..065e63a8d2 100644
--- a/source4/smbd/request.c
+++ b/source4/smbd/request.c
@@ -62,6 +62,10 @@ struct request_context *init_smb_request(struct server_context *smb)
smb->socket.pkt_count++;
req = talloc(mem_ctx, sizeof(*req));
+ if (!req) {
+ return NULL;
+ }
+
ZERO_STRUCTP(req);
/* setup the request context */