2005-04-08 12:57:09 +04:00
/*
Unix SMB / CIFS implementation .
NBT datagram browse server
Copyright ( C ) Andrew Tridgell 2005
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"
# include "nbt_server/nbt_server.h"
2006-01-10 01:12:53 +03:00
# include "lib/socket/socket.h"
2006-03-16 03:23:11 +03:00
# include "librpc/gen_ndr/ndr_nbt.h"
2005-04-08 12:57:09 +04:00
2006-01-14 13:11:04 +03:00
static const char * nbt_browse_opcode_string ( enum nbt_browse_opcode r )
{
const char * val = NULL ;
switch ( r ) {
case HostAnnouncement : val = " HostAnnouncement " ; break ;
case AnnouncementRequest : val = " AnnouncementRequest " ; break ;
case Election : val = " Election " ; break ;
case GetBackupListReq : val = " GetBackupListReq " ; break ;
case GetBackupListResp : val = " GetBackupListResp " ; break ;
case BecomeBackup : val = " BecomeBackup " ; break ;
case DomainAnnouncement : val = " DomainAnnouncement " ; break ;
case MasterAnnouncement : val = " MasterAnnouncement " ; break ;
case ResetBrowserState : val = " ResetBrowserState " ; break ;
case LocalMasterAnnouncement : val = " LocalMasterAnnouncement " ; break ;
}
return val ;
}
2005-04-08 12:57:09 +04:00
/*
handle incoming browse mailslot requests
*/
void nbtd_mailslot_browse_handler ( struct dgram_mailslot_handler * dgmslot ,
struct nbt_dgram_packet * packet ,
2006-01-10 01:12:53 +03:00
struct socket_address * src )
2005-04-08 12:57:09 +04:00
{
2006-01-14 13:11:04 +03:00
struct nbt_browse_packet * browse = talloc ( dgmslot , struct nbt_browse_packet ) ;
struct nbt_name * name = & packet - > data . msg . dest_name ;
NTSTATUS status ;
2006-10-13 13:14:43 +04:00
if ( browse = = NULL ) {
status = NT_STATUS_INVALID_PARAMETER ;
goto failed ;
}
2006-01-14 13:11:04 +03:00
status = dgram_mailslot_browse_parse ( dgmslot , browse , packet , browse ) ;
if ( ! NT_STATUS_IS_OK ( status ) ) goto failed ;
DEBUG ( 2 , ( " Browse %s (Op %d) on '%s' '%s' from %s:%d \n " ,
nbt_browse_opcode_string ( browse - > opcode ) , browse - > opcode ,
nbt_name_string ( browse , name ) , dgmslot - > mailslot_name ,
src - > addr , src - > port ) ) ;
if ( DEBUGLEVEL > = 10 ) {
NDR_PRINT_DEBUG ( nbt_browse_packet , browse ) ;
}
talloc_free ( browse ) ;
return ;
failed :
2006-03-03 11:01:09 +03:00
DEBUG ( 2 , ( " nbtd browse handler failed from %s:%d to %s - %s \n " ,
src - > addr , src - > port , nbt_name_string ( browse , name ) ,
nt_errstr ( status ) ) ) ;
2006-01-14 13:11:04 +03:00
talloc_free ( browse ) ;
2005-04-08 12:57:09 +04:00
}