/*
Unix SMB / Netbios implementation .
Version 1.9 .
SMB parameters and setup
Copyright ( C ) Andrew Tridgell 1992 - 1997
Copyright ( C ) Luke Kenneth Casson Leighton 1996 - 1997
Copyright ( C ) Paul Ashton 1997
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 .
*/
# ifndef _NT_DOMAIN_H /* _NT_DOMAIN_H */
# define _NT_DOMAIN_H
/* dce/rpc support */
# include "rpc_dce.h"
/* miscellaneous structures / defines */
# include "rpc_misc.h"
/* security descriptor structures */
# include "rpc_secdes.h"
/* different dce/rpc pipes */
# include "rpc_lsa.h"
# include "rpc_netlogon.h"
# include "rpc_reg.h"
# include "rpc_samr.h"
# include "rpc_srvsvc.h"
# include "rpc_svcctl.h"
# include "rpc_wkssvc.h"
# include "rpc_atsvc.h"
# include "rpc_spoolss.h"
# include "rpc_eventlog.h"
/*
* A bunch of stuff that was put into smb . h
* in the NTDOM branch - it didn ' t belong there .
*/
typedef struct
{
struct mem_buf * data ; /* memory buffer */
uint32 offset ; /* offset currently being accessed in memory buffer */
uint8 align ; /* data alignment */
BOOL io ; /* parsing in or out of data stream */
BOOL error ; /* error occurred */
} prs_struct ;
typedef struct pipes_struct
{
struct pipes_struct * next , * prev ;
int pnum ;
connection_struct * conn ;
uint16 vuid ;
BOOL open ; /* open connection */
uint16 device_state ;
uint16 priority ;
fstring name ;
fstring pipe_srv_name ;
prs_struct rhdr ; /* output header */
prs_struct rdata ; /* output data */
prs_struct rdata_i ; /* output data (intermediate, for fragments) */
prs_struct rauth ; /* output authentication verifier */
prs_struct rverf ; /* output verifier */
prs_struct rntlm ; /* output ntlmssp */
RPC_HDR hdr ;
RPC_HDR_BA hdr_ba ;
RPC_HDR_RB hdr_rb ;
RPC_HDR_REQ hdr_req ;
RPC_HDR_RESP hdr_resp ;
RPC_HDR_AUTH auth_info ;
RPC_HDR_AUTHA autha_info ;
RPC_AUTH_NTLMSSP_VERIFIER auth_verifier ;
RPC_AUTH_NTLMSSP_NEG ntlmssp_neg ;
RPC_AUTH_NTLMSSP_CHAL ntlmssp_chal ;
RPC_AUTH_NTLMSSP_RESP ntlmssp_resp ;
RPC_AUTH_NTLMSSP_CHK ntlmssp_chk ;
BOOL ntlmssp_auth ;
BOOL ntlmssp_validated ;
unsigned char ntlmssp_hash [ 258 ] ;
uint32 ntlmssp_seq_num ;
fstring user_name ;
fstring domain ;
fstring wks ;
uint32 file_offset ;
uint32 prev_pdu_file_offset ;
uint32 hdr_offsets ;
} pipes_struct ;
struct api_struct
{
char * name ;
uint8 opnum ;
void ( * fn ) ( pipes_struct * , prs_struct * , prs_struct * ) ;
} ;
struct mem_desc
{
/* array memory offsets */
uint32 start ;
uint32 end ;
} ;
struct mem_buf
{
BOOL dynamic ; /* True iff data has been dynamically allocated
( and therefore can be freed ) */
char * data ;
uint32 data_size ;
uint32 data_used ;
uint32 margin ; /* safety margin when reallocing. */
/* this can be abused quite nicely */
uint8 align ; /* alignment of data structures (smb, dce/rpc, udp etc) */
struct mem_desc offset ;
struct mem_buf * next ;
} ;
struct acct_info
{
fstring acct_name ; /* account name */
fstring acct_desc ; /* account description */
uint32 rid ; /* domain-relative RID */
} ;
/*
* higher order functions for use with msrpc client code
*/
# define ALIAS_FN(fn) void (*fn)(char*, DOM_SID*, uint32, char*)
# define ALIAS_INFO_FN(fn) void (*fn)(char*, DOM_SID*, uint32, ALIAS_INFO_CTR *)
# define ALIAS_MEM_FN(fn) void(*fn)(char*, DOM_SID*, uint32, char*, uint32, DOM_SID**, char**, uint8*)
# define GROUP_FN(fn) void (*fn)(char*, DOM_SID*, uint32, char*)
# define GROUP_INFO_FN(fn) void (*fn)(char*, DOM_SID*, uint32, GROUP_INFO_CTR *)
# define GROUP_MEM_FN(fn) void(*fn)(char*, DOM_SID*, uint32, char*, uint32, uint32*, char**, uint32*)
# define USER_FN(fn) void (*fn)(char*, DOM_SID*, uint32, char*)
# define USER_INFO_FN(fn) void (*fn)(char*, DOM_SID*, uint32, SAM_USER_INFO_21 *)
# define USER_MEM_FN(fn) void (*fn)(char*, DOM_SID*, uint32, char*, uint32, uint32*, char**, uint32*)
# define REG_FN(fn) void (*fn)(int, const char *, int)
# define REG_KEY_FN(fn) void (*fn)(const char*, const char*, time_t)
# define REG_VAL_FN(fn) void (*fn)(const char *, const char*, uint32, BUFFER2 *)
# define SVC_QUERY_FN(fn) void (*fn)(QUERY_SERVICE_CONFIG *)
# define SVC_INFO_FN(fn) void (*fn)(ENUM_SRVC_STATUS *)
# define TPRT_INFO_FN(fn) void (*fn)(SRV_TPRT_INFO_CTR *)
# endif /* _NT_DOMAIN_H */