1998-09-26 01:01:52 +04:00
/*
Unix SMB / Netbios implementation .
2001-05-24 04:20:32 +04:00
Version 2.2
RPC pipe client
2001-05-24 12:10:50 +04:00
Copyright ( C ) Andrew Tridgell 1992 - 1999
Copyright ( C ) Luke Kenneth Casson Leighton 1996 - 1999
2001-05-24 04:20:32 +04:00
Copyright ( C ) Tim Potter 2000
1998-09-26 01:01:52 +04:00
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"
2001-05-24 12:10:50 +04:00
/* Display server query info */
static char * get_server_type_str ( uint32 type )
{
static fstring typestr ;
int i ;
if ( type = = SV_TYPE_ALL ) {
fstrcpy ( typestr , " All " ) ;
return typestr ;
}
typestr [ 0 ] = 0 ;
for ( i = 0 ; i < 32 ; i + + ) {
if ( type & ( 1 < < i ) ) {
switch ( 1 < < i ) {
case SV_TYPE_WORKSTATION :
fstrcat ( typestr , " Wk " ) ;
break ;
case SV_TYPE_SERVER :
fstrcat ( typestr , " Sv " ) ;
break ;
case SV_TYPE_SQLSERVER :
fstrcat ( typestr , " Sql " ) ;
break ;
case SV_TYPE_DOMAIN_CTRL :
fstrcat ( typestr , " PDC " ) ;
break ;
case SV_TYPE_DOMAIN_BAKCTRL :
fstrcat ( typestr , " BDC " ) ;
break ;
case SV_TYPE_TIME_SOURCE :
fstrcat ( typestr , " Tim " ) ;
break ;
case SV_TYPE_AFP :
fstrcat ( typestr , " AFP " ) ;
break ;
case SV_TYPE_NOVELL :
fstrcat ( typestr , " Nov " ) ;
break ;
case SV_TYPE_DOMAIN_MEMBER :
fstrcat ( typestr , " Dom " ) ;
break ;
case SV_TYPE_PRINTQ_SERVER :
fstrcat ( typestr , " PrQ " ) ;
break ;
case SV_TYPE_DIALIN_SERVER :
fstrcat ( typestr , " Din " ) ;
break ;
case SV_TYPE_SERVER_UNIX :
fstrcat ( typestr , " Unx " ) ;
break ;
case SV_TYPE_NT :
fstrcat ( typestr , " NT " ) ;
break ;
case SV_TYPE_WFW :
fstrcat ( typestr , " Wfw " ) ;
break ;
case SV_TYPE_SERVER_MFPN :
fstrcat ( typestr , " Mfp " ) ;
break ;
case SV_TYPE_SERVER_NT :
fstrcat ( typestr , " SNT " ) ;
break ;
case SV_TYPE_POTENTIAL_BROWSER :
fstrcat ( typestr , " PtB " ) ;
break ;
case SV_TYPE_BACKUP_BROWSER :
fstrcat ( typestr , " BMB " ) ;
break ;
case SV_TYPE_MASTER_BROWSER :
fstrcat ( typestr , " LMB " ) ;
break ;
case SV_TYPE_DOMAIN_MASTER :
fstrcat ( typestr , " DMB " ) ;
break ;
case SV_TYPE_SERVER_OSF :
fstrcat ( typestr , " OSF " ) ;
break ;
case SV_TYPE_SERVER_VMS :
fstrcat ( typestr , " VMS " ) ;
break ;
case SV_TYPE_WIN95_PLUS :
fstrcat ( typestr , " W95 " ) ;
break ;
case SV_TYPE_ALTERNATE_XPORT :
fstrcat ( typestr , " Xpt " ) ;
break ;
case SV_TYPE_LOCAL_LIST_ONLY :
fstrcat ( typestr , " Dom " ) ;
break ;
case SV_TYPE_DOMAIN_ENUM :
fstrcat ( typestr , " Loc " ) ;
break ;
}
}
}
i = strlen ( typestr ) - 1 ;
if ( typestr [ i ] = = ' ' )
typestr [ i ] = 0 ;
return typestr ;
}
static void display_server ( char * sname , uint32 type , const char * comment )
{
printf ( " \t %-15.15s%-20s %s \n " , sname , get_server_type_str ( type ) ,
comment ) ;
}
static void display_srv_info_101 ( SRV_INFO_101 * sv101 )
{
fstring name ;
fstring comment ;
unistr2_to_ascii ( name , & sv101 - > uni_name , sizeof ( name ) - 1 ) ;
unistr2_to_ascii ( comment , & sv101 - > uni_comment , sizeof ( comment ) - 1 ) ;
display_server ( name , sv101 - > srv_type , comment ) ;
printf ( " \t platform_id : \t %d \n " , sv101 - > platform_id ) ;
printf ( " \t os version : \t %d.%d \n " , sv101 - > ver_major ,
sv101 - > ver_minor ) ;
printf ( " \t server type : \t 0x%x \n " , sv101 - > srv_type ) ;
}
static void display_srv_info_102 ( SRV_INFO_102 * sv102 )
{
fstring name ;
fstring comment ;
fstring usr_path ;
unistr2_to_ascii ( name , & sv102 - > uni_name , sizeof ( name ) - 1 ) ;
unistr2_to_ascii ( comment , & sv102 - > uni_comment , sizeof ( comment ) - 1 ) ;
unistr2_to_ascii ( usr_path , & sv102 - > uni_usr_path , sizeof ( usr_path ) - 1 ) ;
display_server ( name , sv102 - > srv_type , comment ) ;
printf ( " \t platform_id : \t %d \n " , sv102 - > platform_id ) ;
printf ( " \t os version : \t %d.%d \n " , sv102 - > ver_major ,
sv102 - > ver_minor ) ;
printf ( " \t users : \t %x \n " , sv102 - > users ) ;
printf ( " \t disc, hidden : \t %x, %x \n " , sv102 - > disc , sv102 - > hidden ) ;
printf ( " \t announce, delta : \t %d, %d \n " , sv102 - > announce ,
sv102 - > ann_delta ) ;
printf ( " \t licenses : \t %d \n " , sv102 - > licenses ) ;
printf ( " \t user path : \t %s \n " , usr_path ) ;
}
2001-05-24 04:20:32 +04:00
/* Server query info */
1998-09-26 01:01:52 +04:00
2001-09-04 14:57:29 +04:00
static NTSTATUS cmd_srvsvc_srv_query_info ( struct cli_state * cli , int argc ,
2001-05-24 04:20:32 +04:00
char * * argv )
1998-09-26 01:01:52 +04:00
{
1999-12-13 16:27:58 +03:00
uint32 info_level = 101 ;
2001-05-24 04:20:32 +04:00
SRV_INFO_CTR ctr ;
TALLOC_CTX * mem_ctx ;
2001-09-04 14:57:29 +04:00
NTSTATUS result = NT_STATUS_UNSUCCESSFUL ;
1998-09-26 01:01:52 +04:00
2001-05-24 04:20:32 +04:00
if ( argc > 2 ) {
printf ( " Usage: %s [infolevel] \n " , argv [ 0 ] ) ;
2001-09-04 14:57:29 +04:00
return NT_STATUS_OK ;
1998-09-26 01:01:52 +04:00
}
2001-05-24 04:20:32 +04:00
if ( argc = = 2 )
info_level = atoi ( argv [ 1 ] ) ;
1999-12-13 16:27:58 +03:00
2001-05-24 12:10:50 +04:00
if ( ! ( mem_ctx = talloc_init ( ) ) ) {
DEBUG ( 0 , ( " cmd_srvsvc_srv_query_info: talloc_init failed \n " ) ) ;
2001-08-10 13:52:10 +04:00
return result ;
2001-05-24 12:10:50 +04:00
}
/* Initialise RPC connection */
if ( ! cli_nt_session_open ( cli , PIPE_SRVSVC ) ) {
DEBUG ( 0 , ( " Could not initialize srvsvc pipe! \n " ) ) ;
goto done ;
}
2001-09-04 14:57:29 +04:00
result = cli_srvsvc_net_srv_get_info ( cli , mem_ctx , info_level ,
& ctr ) ;
if ( ! NT_STATUS_IS_OK ( result ) ) {
2001-05-24 12:10:50 +04:00
goto done ;
}
/* Display results */
switch ( info_level ) {
case 101 :
display_srv_info_101 ( & ctr . srv . sv101 ) ;
break ;
case 102 :
display_srv_info_102 ( & ctr . srv . sv102 ) ;
break ;
default :
printf ( " unsupported info level %d \n " , info_level ) ;
break ;
}
done :
2001-08-10 13:52:10 +04:00
talloc_destroy ( mem_ctx ) ;
2001-05-24 12:10:50 +04:00
return result ;
1998-09-26 01:01:52 +04:00
}
2001-05-24 04:20:32 +04:00
/* List of commands exported by this module */
1999-12-13 16:27:58 +03:00
2001-05-24 04:20:32 +04:00
struct cmd_set srvsvc_commands [ ] = {
2001-07-20 08:38:58 +04:00
{ " SRVSVC " } ,
{ " srvinfo " , cmd_srvsvc_srv_query_info , " Server query info " , " " } ,
{ NULL }
2001-05-24 04:20:32 +04:00
} ;