2003-08-13 05:53:07 +04:00
/*
Unix SMB / CIFS implementation .
process incoming packets - main loop
Copyright ( C ) Andrew Tridgell 1992 - 2003
Copyright ( C ) James J Myers 2003 < myersjj @ samba . org >
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 2 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 , write to the Free Software
Foundation , Inc . , 675 Mass Ave , Cambridge , MA 0213 9 , USA .
*/
# include "includes.h"
/*
* initialize an smb process
*/
void smbd_process_init ( void )
{
TALLOC_CTX * mem_ctx ;
mem_ctx = talloc_init ( " smbd_process_init talloc " ) ;
if ( ! mem_ctx ) {
DEBUG ( 0 , ( " smbd_process_init: ERROR: No memory \n " ) ) ;
exit ( 1 ) ;
}
namecache_enable ( ) ;
if ( ! locking_init ( 0 ) )
exit ( 1 ) ;
if ( ! share_info_db_init ( ) )
exit ( 1 ) ;
if ( ! init_registry ( ) )
exit ( 1 ) ;
if ( ! initialize_password_db ( False ) )
exit ( 1 ) ;
/* possibly reload the services file. */
reload_services ( NULL , True ) ;
if ( ! get_global_sam_sid ( ) ) {
DEBUG ( 0 , ( " ERROR: Samba cannot create a SAM SID. \n " ) ) ;
exit ( 1 ) ;
}
if ( ! init_account_policy ( ) ) {
DEBUG ( 0 , ( " Could not open account policy tdb. \n " ) ) ;
exit ( 1 ) ;
}
if ( * lp_rootdir ( ) ) {
if ( sys_chroot ( lp_rootdir ( ) ) = = 0 )
DEBUG ( 2 , ( " Changed root to %s \n " , lp_rootdir ( ) ) ) ;
}
/* Setup oplocks */
if ( ! init_oplocks ( ) )
exit ( 1 ) ;
/* Setup change notify */
if ( ! init_change_notify ( ) )
exit ( 1 ) ;
/* Setup the NTVFS subsystem */
if ( ! ntvfs_init ( ) )
exit ( 1 ) ;
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)
2004-01-09 01:55:27 +03:00
/* Setup the DCERPC subsystem */
if ( ! dcesrv_init ( ) )
exit ( 1 ) ;
2003-08-13 05:53:07 +04:00
/* re-initialise the timezone */
TimeInit ( ) ;
talloc_destroy ( mem_ctx ) ;
}