#include <freeradius-devel/ident.h>
RCSIDH(smblib_priv_h, "$Id$")
#include "std-includes.h"
#include "smblib-common.h"
typedef unsigned short uint16;
typedef unsigned int uint32;
#include "byteorder.h"
#define max(a,b) (a < b ? b : a)
#define SMB_DEF_IDF 0x424D53FF
#define SMBmkdir 0x00
#define SMBrmdir 0x01
#define SMBopen 0x02
#define SMBcreate 0x03
#define SMBclose 0x04
#define SMBflush 0x05
#define SMBunlink 0x06
#define SMBmv 0x07
#define SMBgetatr 0x08
#define SMBsetatr 0x09
#define SMBread 0x0A
#define SMBwrite 0x0B
#define SMBlock 0x0C
#define SMBunlock 0x0D
#define SMBctemp 0x0E
#define SMBmknew 0x0F
#define SMBchkpth 0x10
#define SMBexit 0x11
#define SMBlseek 0x12
#define SMBtcon 0x70
#define SMBtdis 0x71
#define SMBnegprot 0x72
#define SMBdskattr 0x80
#define SMBsearch 0x81
#define SMBsplopen 0xC0
#define SMBsplwr 0xC1
#define SMBsplclose 0xC2
#define SMBsplretq 0xC3
#define SMBsends 0xD0
#define SMBsendb 0xD1
#define SMBfwdname 0xD2
#define SMBcancelf 0xD3
#define SMBgetmac 0xD4
#define SMBsendstrt 0xD5
#define SMBsendend 0xD6
#define SMBsendtxt 0xD7
#define SMBlockread 0x13
#define SMBwriteunlock 0x14
#define SMBreadbraw 0x1a
#define SMBwritebraw 0x1d
#define SMBwritec 0x20
#define SMBwriteclose 0x2c
#define SMBreadBraw 0x1A
#define SMBreadBmpx 0x1B
#define SMBreadBs 0x1C
#define SMBwriteBraw 0x1D
#define SMBwriteBmpx 0x1E
#define SMBwriteBs 0x1F
#define SMBwriteC 0x20
#define SMBsetattrE 0x22
#define SMBgetattrE 0x23
#define SMBlockingX 0x24
#define SMBtrans 0x25
#define SMBtranss 0x26
#define SMBioctl 0x27
#define SMBioctls 0x28
#define SMBcopy 0x29
#define SMBmove 0x2A
#define SMBecho 0x2B
#define SMBopenX 0x2D
#define SMBreadX 0x2E
#define SMBwriteX 0x2F
#define SMBsesssetupX 0x73
#define SMBtconX 0x75
#define SMBffirst 0x82
#define SMBfunique 0x83
#define SMBfclose 0x84
#define SMBinvalid 0xFE
#define SMBdatablockID 0x01
#define SMBdialectID 0x02
#define SMBpathnameID 0x03
#define SMBasciiID 0x04
#define SMBvariableblockID 0x05
#define SMB_FLG2_NON_DOS 0x01
#define SMB_FLG2_EXT_ATR 0x02
#define SMB_FLG2_LNG_NAM 0x04
typedef unsigned short WORD;
typedef unsigned short UWORD;
typedef unsigned int ULONG;
typedef unsigned char BYTE;
typedef unsigned char UCHAR;
#define SMB_Hdr(p) (char *)(p -> data)
#define SMB_hdr_idf_offset 0
#define SMB_hdr_com_offset 4
#define SMB_hdr_rcls_offset 5
#define SMB_hdr_reh_offset 6
#define SMB_hdr_err_offset 7
#define SMB_hdr_reb_offset 9
#define SMB_hdr_flg_offset 9
#define SMB_hdr_res_offset 10
#define SMB_hdr_res0_offset 10
#define SMB_hdr_flg2_offset 10
#define SMB_hdr_res1_offset 12
#define SMB_hdr_res2_offset 14
#define SMB_hdr_res3_offset 16
#define SMB_hdr_res4_offset 18
#define SMB_hdr_res5_offset 20
#define SMB_hdr_res6_offset 22
#define SMB_hdr_tid_offset 24
#define SMB_hdr_pid_offset 26
#define SMB_hdr_uid_offset 28
#define SMB_hdr_mid_offset 30
#define SMB_hdr_wct_offset 32
#define SMB_hdr_len 33
#define SMB_hdr_axc_offset 33
#define SMB_hdr_axr_offset 34
#define SMB_hdr_axo_offset 35
#define SMB_negp_bcc_offset 33
#define SMB_negp_buf_offset 35
#define SMB_negp_len 35
#define SMB_negrCP_idx_offset 33
#define SMB_negrCP_bcc_offset 35
#define SMB_negrLM_idx_offset 33
#define SMB_negrLM_sec_offset 35
#define SMB_sec_user_mask 0x01
#define SMB_sec_encrypt_mask 0x02
#define SMB_negrLM_mbs_offset 37
#define SMB_negrLM_mmc_offset 39
#define SMB_negrLM_mnv_offset 41
#define SMB_negrLM_rm_offset 43
#define SMB_read_raw_mask 0x01
#define SMB_write_raw_mask 0x02
#define SMB_negrLM_sk_offset 45
#define SMB_negrLM_st_offset 49
#define SMB_negrLM_sd_offset 51
#define SMB_negrLM_stz_offset 53
#define SMB_negrLM_ekl_offset 55
#define SMB_negrLM_res_offset 57
#define SMB_negrLM_bcc_offset 59
#define SMB_negrLM_len 61
#define SMB_negrLM_buf_offset 61
#define SMB_negrNTLM_idx_offset 33
#define SMB_negrNTLM_sec_offset 35
#define SMB_negrNTLM_mmc_offset 36
#define SMB_negrNTLM_mnv_offset 38
#define SMB_negrNTLM_mbs_offset 40
#define SMB_negrNTLM_mrs_offset 44
#define SMB_negrNTLM_sk_offset 48
#define SMB_negrNTLM_cap_offset 52
#define SMB_negrNTLM_stl_offset 56
#define SMB_negrNTLM_sth_offset 60
#define SMB_negrNTLM_stz_offset 64
#define SMB_negrNTLM_ekl_offset 66
#define SMB_negrNTLM_bcc_offset 67
#define SMB_negrNTLM_len 69
#define SMB_negrNTLM_buf_offset 69
#define SMB_tcon_bcc_offset 33
#define SMB_tcon_buf_offset 35
#define SMB_tcon_len 35
#define SMB_tconr_mbs_offset 33
#define SMB_tconr_tid_offset 35
#define SMB_tconr_bcc_offset 37
#define SMB_tconr_len 39
#define SMB_tconx_axc_offset 33
#define SMB_tconx_axr_offset 34
#define SMB_tconx_axo_offset 35
#define SMB_tconx_flg_offset 37
#define SMB_tconx_pwl_offset 39
#define SMB_tconx_bcc_offset 41
#define SMB_tconx_buf_offset 43
#define SMB_tconx_len 43
#define SMB_tconxr_axc_offset 33
#define SMB_tconxr_axr_offset 34
#define SMB_tconxr_axo_offset 35
#define SMB_tdis_bcc_offset 33
#define SMB_tdis_len 35
#define SMB_tdisr_bcc_offset 33
#define SMB_tdisr_len 35
#define SMB_open_mod_offset 33
#define SMB_open_atr_offset 35
#define SMB_open_bcc_offset 37
#define SMB_open_buf_offset 39
#define SMB_open_len 39
#define SMB_openx_axc_offset 33
#define SMB_openx_axr_offset 34
#define SMB_openx_axo_offset 35
#define SMB_openx_flg_offset 37
#define SMB_openx_mod_offset 39
#define SMB_openx_atr_offset 41
#define SMB_openx_fat_offset 43
#define SMB_openx_tim_offset 45
#define SMB_openx_ofn_offset 49
#define SMB_openx_als_offset 51
#define SMB_openx_res_offset 55
#define SMB_openx_bcc_offset 63
#define SMB_openx_buf_offset 65
#define SMB_openx_len 65
#define SMB_openr_fid_offset 33
#define SMB_openr_atr_offset 35
#define SMB_openr_tim_offset 37
#define SMB_openr_fsz_offset 41
#define SMB_openr_acc_offset 45
#define SMB_openr_bcc_offset 47
#define SMB_openr_len 49
#define SMB_openxr_axc_offset 33
#define SMB_openxr_axr_offset 34
#define SMB_openxr_axo_offset 35
#define SMB_openxr_fid_offset 37
#define SMB_openxr_fat_offset 39
#define SMB_openxr_tim_offset 41
#define SMB_openxr_fsz_offset 45
#define SMB_openxr_acc_offset 49
#define SMB_clos_fid_offset 33
#define SMB_clos_tim_offset 35
#define SMB_clos_bcc_offset 39
#define SMB_clos_len 41
#define SMB_write_fid_offset 33
#define SMB_write_cnt_offset 35
#define SMB_write_ofs_offset 37
#define SMB_write_clf_offset 41
#define SMB_write_bcc_offset 43
#define SMB_write_buf_offset 45
#define SMB_write_len 45
#define SMB_writr_cnt_offset 33
#define SMB_writr_bcc_offset 35
#define SMB_writr_len 37
#define SMB_read_fid_offset 33
#define SMB_read_cnt_offset 35
#define SMB_read_ofs_offset 37
#define SMB_read_clf_offset 41
#define SMB_read_bcc_offset 43
#define SMB_read_len 45
#define SMB_readr_cnt_offset 33
#define SMB_readr_res_offset 35
#define SMB_readr_bcc_offset 43
#define SMB_readr_bff_offset 45
#define SMB_readr_len_offset 46
#define SMB_readr_len 45
#define SMB_creat_atr_offset 33
#define SMB_creat_tim_offset 35
#define SMB_creat_dat_offset 37
#define SMB_creat_bcc_offset 39
#define SMB_creat_buf_offset 41
#define SMB_creat_len 41
#define SMB_creatr_fid_offset 33
#define SMB_delet_sat_offset 33
#define SMB_delet_bcc_offset 35
#define SMB_delet_buf_offset 37
#define SMB_delet_len 37
#define SMB_ssetpLM_mbs_offset 37
#define SMB_ssetpLM_mmc_offset 39
#define SMB_ssetpLM_vcn_offset 41
#define SMB_ssetpLM_snk_offset 43
#define SMB_ssetpLM_pwl_offset 47
#define SMB_ssetpLM_res_offset 49
#define SMB_ssetpLM_bcc_offset 53
#define SMB_ssetpLM_len 55
#define SMB_ssetpLM_buf_offset 55
#define SMB_ssetpNTLM_mbs_offset 37
#define SMB_ssetpNTLM_mmc_offset 39
#define SMB_ssetpNTLM_vcn_offset 41
#define SMB_ssetpNTLM_snk_offset 43
#define SMB_ssetpNTLM_cipl_offset 47
#define SMB_ssetpNTLM_cspl_offset 49
#define SMB_ssetpNTLM_res_offset 51
#define SMB_ssetpNTLM_cap_offset 55
#define SMB_ssetpNTLM_bcc_offset 59
#define SMB_ssetpNTLM_len 61
#define SMB_ssetpNTLM_buf_offset 61
#define SMB_ssetpr_axo_offset 35
#define SMB_ssetpr_act_offset 37
#define SMB_ssetpr_bcc_offset 39
#define SMB_ssetpr_buf_offset 41
#define SMB_creatdir_bcc_offset 33
#define SMB_creatdir_buf_offset 35
#define SMB_creatdir_len 35
#define SMB_deletdir_bcc_offset 33
#define SMB_deletdir_buf_offset 35
#define SMB_deletdir_len 35
#define SMB_checkdir_bcc_offset 33
#define SMB_checkdir_buf_offset 35
#define SMB_checkdir_len 35
#define SMB_search_mdc_offset 33
#define SMB_search_atr_offset 35
#define SMB_search_bcc_offset 37
#define SMB_search_buf_offset 39
#define SMB_search_len 39
#define SMB_searchr_dec_offset 33
#define SMB_searchr_bcc_offset 35
#define SMB_searchr_buf_offset 37
#define SMB_searchr_len 37
#define SMB_searchr_dirent_len 43
#define SMB_trans_tpc_offset 33
#define SMB_trans_tdc_offset 35
#define SMB_trans_mpc_offset 37
#define SMB_trans_mdc_offset 39
#define SMB_trans_msc_offset 41
#define SMB_trans_rs1_offset 42
#define SMB_trans_flg_offset 43
#define SMB_trans_tmo_offset 45
#define SMB_trans_rs2_offset 49
#define SMB_trans_pbc_offset 51
#define SMB_trans_pbo_offset 53
#define SMB_trans_dbc_offset 55
#define SMB_trans_dbo_offset 57
#define SMB_trans_suc_offset 59
#define SMB_trans_rs3_offset 60
#define SMB_trans_len 61
#define SMB_transr_tpc_offset 33
#define SMB_transr_tdc_offset 35
#define SMB_transr_rs1_offset 37
#define SMB_transr_pbc_offset 39
#define SMB_transr_pbo_offset 41
#define SMB_transr_pdi_offset 43
#define SMB_transr_dbc_offset 45
#define SMB_transr_dbo_offset 47
#define SMB_transr_ddi_offset 49
#define SMB_transr_suc_offset 51
#define SMB_transr_rs2_offset 52
#define SMB_transr_len 53
#define SMB_cap_raw_mode 0x0001
#define SMB_cap_mpx_mode 0x0002
#define SMB_cap_unicode 0x0004
#define SMB_cap_large_files 0x0008
#define SMB_cap_nt_smbs 0x0010
#define SMB_rpc_remote_apis 0x0020
#define SMB_cap_nt_status 0x0040
#define SMB_cap_level_II_oplocks 0x0080
#define SMB_cap_lock_and_read 0x0100
#define SMB_cap_nt_find 0x0200
#define SMB_LMapi_SetUserInfo 0x0072
#define SMB_LMapi_UserPasswordSet 0x0073
typedef enum {SMB_RFCNB, SMB_IPXNB, SMB_NETBEUI, SMB_X25} SMB_Transport_Types;
typedef enum {SMB_Con_FShare, SMB_Con_PShare, SMB_Con_IPC} SMB_Con_Types;
typedef enum {SMB_State_NoState, SMB_State_Stopped, SMB_State_Started} SMB_State_Types;
static const char *SMB_Prots[] = {"PC NETWORK PROGRAM 1.0",
"MICROSOFT NETWORKS 1.03",
"MICROSOFT NETWORKS 3.0",
"DOS LANMAN1.0",
"LANMAN1.0",
"DOS LM1.2X002",
"LM1.2X002",
"DOS LANMAN2.1",
"LANMAN2.1",
"Samba",
"NT LM 0.12",
"NT LANMAN 1.0",
NULL};
static const int SMB_Types[] = {SMB_P_Core,
SMB_P_CorePlus,
SMB_P_DOSLanMan1,
SMB_P_DOSLanMan1,
SMB_P_LanMan1,
SMB_P_DOSLanMan2,
SMB_P_LanMan2,
SMB_P_LanMan2_1,
SMB_P_LanMan2_1,
SMB_P_NT1,
SMB_P_NT1,
SMB_P_NT1,
-1};
typedef struct SMB_Status {
union {
struct {
unsigned char ErrorClass;
unsigned char Reserved;
unsigned short Error;
} DosError;
unsigned int NtStatus;
} status;
} SMB_Status;
typedef struct SMB_Tree_Structure * SMB_Tree_Handle;
typedef struct SMB_Connect_Def * SMB_Handle_Type;
struct SMB_Connect_Def {
SMB_Handle_Type Next_Con, Prev_Con;
int protocol;
int prot_IDX;
void *Trans_Connect;
char service[80], username[80], password[80], desthost[80], sock_options[80];
char address[80], myname[80];
SMB_Tree_Handle first_tree, last_tree;
int gid;
int mid;
int pid;
int uid;
int port;
int max_xmit;
int Security;
int Raw_Support;
BOOL encrypt_passwords;
int MaxMPX, MaxVC, MaxRaw;
unsigned int SessionKey, Capabilities;
int SvrTZ;
int Encrypt_Key_Len;
char Encrypt_Key[80], Domain[80], PDomain[80], OSName[80], LMType[40];
char Svr_OS[80], Svr_LMType[80], Svr_PDom[80];
};
#define SMBLIB_DEFAULT_DOMAIN "STAFF"
#define SMBLIB_DEFAULT_OSNAME "UNIX of some type"
#define SMBLIB_DEFAULT_LMTYPE "SMBlib LM2.1 minus a bit"
#define SMBLIB_MAX_XMIT 65535
#define SMB_Sec_Mode_Share 0
#define SMB_Sec_Mode_User 1
struct SMB_Tree_Structure {
SMB_Tree_Handle next, prev;
SMB_Handle_Type con;
char path[129];
char device_type[20];
int mbs;
int tid;
};
typedef struct SMB_File_Def SMB_File;
struct SMB_File_Def {
SMB_Tree_Handle tree;
char filename[256];
UWORD fid;
unsigned int lastmod;
unsigned int size;
UWORD access;
off_t fileloc;
};
extern SMB_State_Types SMBlib_State;
#ifndef SMBLIB_ERRNO
extern int SMBlib_errno;
extern int SMBlib_SMB_Error;
#endif
SMB_Tree_Handle SMB_TreeConnect(SMB_Handle_Type con, SMB_Tree_Handle tree,
char *path, char *password, char *dev);