1
0
mirror of https://github.com/samba-team/samba.git synced 2025-02-14 01:57:53 +03:00

sam logon query creation functions. written twice because i deleted it.

This commit is contained in:
Luke Leighton -
parent 82436a3d99
commit 9eee8c2007
2 changed files with 173 additions and 3 deletions

View File

@ -910,17 +910,31 @@ void make_dom_sid2(DOM_SID2 *sid2, char *sid_str);
char* smb_io_dom_sid2(BOOL io, DOM_SID2 *sid2, char *q, char *base, int align, int depth);
void make_dom_rid2(DOM_RID2 *rid2, uint32 rid);
char* smb_io_dom_rid2(BOOL io, DOM_RID2 *rid2, char *q, char *base, int align, int depth);
void make_clnt_srv(DOM_CLNT_SRV *log, char *logon_srv, char *comp_name);
char* smb_io_clnt_srv(BOOL io, DOM_CLNT_SRV *log, char *q, char *base, int align, int depth);
void make_log_info(DOM_LOG_INFO *log, char *logon_srv, char *acct_name,
uint16 sec_chan, char *comp_name);
char* smb_io_log_info(BOOL io, DOM_LOG_INFO *log, char *q, char *base, int align, int depth);
char* smb_io_chal(BOOL io, DOM_CHAL *chal, char *q, char *base, int align, int depth);
char* smb_io_cred(BOOL io, DOM_CRED *cred, char *q, char *base, int align, int depth);
void make_clnt_info2(DOM_CLNT_INFO2 *clnt,
char *logon_srv, char *comp_name,
DOM_CRED *clnt_cred);
char* smb_io_clnt_info2(BOOL io, DOM_CLNT_INFO2 *clnt, char *q, char *base, int align, int depth);
char* smb_io_clnt_info(BOOL io, DOM_CLNT_INFO *clnt, char *q, char *base, int align, int depth);
void make_logon_id(DOM_LOGON_ID *log, uint32 log_id_low, uint32 log_id_high);
char* smb_io_logon_id(BOOL io, DOM_LOGON_ID *log, char *q, char *base, int align, int depth);
void make_arc4_owf(ARC4_OWF *hash, char data[16]);
char* smb_io_arc4_owf(BOOL io, ARC4_OWF *hash, char *q, char *base, int align, int depth);
void make_id_info1(DOM_ID_INFO_1 *id, char *domain_name,
uint32 param_ctrl, uint32 log_id_low, uint32 log_id_high,
char *user_name, char *workgroup_name,
char arc4_lm_owf[16], char arc4_nt_owf[16]);
char* smb_io_id_info1(BOOL io, DOM_ID_INFO_1 *id, char *q, char *base, int align, int depth);
void make_sam_info(DOM_SAM_INFO *sam,
char *logon_srv, char *comp_name, DOM_CRED *clnt_cred,
DOM_CRED *rtn_cred, uint16 switch_value, uint16 logon_level,
DOM_ID_INFO_1 *id1);
char* smb_io_sam_info(BOOL io, DOM_SAM_INFO *sam, char *q, char *base, int align, int depth);
char* smb_io_gid(BOOL io, DOM_GID *gid, char *q, char *base, int align, int depth);
void make_rpc_header(RPC_HDR *hdr, enum RPC_PKT_TYPE pkt_type,

View File

@ -360,6 +360,36 @@ char* smb_io_dom_rid2(BOOL io, DOM_RID2 *rid2, char *q, char *base, int align, i
return q;
}
/*******************************************************************
makes a DOM_CLNT_SRV structure.
********************************************************************/
void make_clnt_srv(DOM_CLNT_SRV *log, char *logon_srv, char *comp_name)
{
if (log == NULL) return;
DEBUG(5,("make_clnt_srv: %d\n", __LINE__));
if (logon_srv != NULL)
{
log->undoc_buffer = 1;
make_unistr2(&(log->uni_logon_srv), logon_srv, strlen(logon_srv));
}
else
{
log->undoc_buffer = 1;
}
if (comp_name != NULL)
{
log->undoc_buffer2 = 1;
make_unistr2(&(log->uni_comp_name), comp_name, strlen(comp_name));
}
else
{
log->undoc_buffer2 = 1;
}
}
/*******************************************************************
reads or writes a DOM_CLNT_SRV structure.
********************************************************************/
@ -372,10 +402,10 @@ char* smb_io_clnt_srv(BOOL io, DOM_CLNT_SRV *log, char *q, char *base, int align
q = align_offset(q, base, align);
DBG_RW_IVAL("undoc_buffer ", depth, base, io, q, log->undoc_buffer); q += 4;
DBG_RW_IVAL("undoc_buffer ", depth, base, io, q, log->undoc_buffer ); q += 4;
q = smb_io_unistr2(io, &(log->uni_logon_srv), q, base, align, depth);
DBG_RW_IVAL("undoc_buffer2", depth, base, io, q, log->undoc_buffer); q += 4;
DBG_RW_IVAL("undoc_buffer2", depth, base, io, q, log->undoc_buffer2); q += 4;
q = smb_io_unistr2(io, &(log->uni_comp_name), q, base, align, depth);
return q;
@ -463,6 +493,30 @@ char* smb_io_cred(BOOL io, DOM_CRED *cred, char *q, char *base, int align, int d
return q;
}
/*******************************************************************
makes a DOM_CLNT_INFO2 structure.
********************************************************************/
void make_clnt_info2(DOM_CLNT_INFO2 *clnt,
char *logon_srv, char *comp_name,
DOM_CRED *clnt_cred)
{
if (clnt == NULL) return;
DEBUG(5,("make_clnt_info: %d\n", __LINE__));
make_clnt_srv(&(clnt->login), logon_srv, comp_name);
if (clnt_cred != NULL)
{
clnt->ptr_cred = 1;
memcpy(&(clnt->cred), clnt_cred, sizeof(clnt->cred));
}
else
{
clnt->ptr_cred = 0;
}
}
/*******************************************************************
reads or writes a DOM_CLNT_INFO2 structure.
********************************************************************/
@ -503,6 +557,19 @@ char* smb_io_clnt_info(BOOL io, DOM_CLNT_INFO *clnt, char *q, char *base, int al
return q;
}
/*******************************************************************
makes a DOM_LOGON_ID structure.
********************************************************************/
void make_logon_id(DOM_LOGON_ID *log, uint32 log_id_low, uint32 log_id_high)
{
if (log == NULL) return;
DEBUG(5,("make_logon_id: %d\n", __LINE__));
log->low = log_id_low;
log->high = log_id_high;
}
/*******************************************************************
reads or writes a DOM_LOGON_ID structure.
********************************************************************/
@ -521,6 +588,18 @@ char* smb_io_logon_id(BOOL io, DOM_LOGON_ID *log, char *q, char *base, int align
return q;
}
/*******************************************************************
makes an ARC4_OWF structure.
********************************************************************/
void make_arc4_owf(ARC4_OWF *hash, char data[16])
{
if (hash == NULL) return;
DEBUG(5,("make_arc4_owf: %d\n", __LINE__));
memcpy(hash->data, data, sizeof(hash->data));
}
/*******************************************************************
reads or writes an ARC4_OWF structure.
********************************************************************/
@ -538,6 +617,40 @@ char* smb_io_arc4_owf(BOOL io, ARC4_OWF *hash, char *q, char *base, int align, i
return q;
}
/*******************************************************************
makes a DOM_ID_INFO_1 structure.
********************************************************************/
void make_id_info1(DOM_ID_INFO_1 *id, char *domain_name,
uint32 param_ctrl, uint32 log_id_low, uint32 log_id_high,
char *user_name, char *workgroup_name,
char arc4_lm_owf[16], char arc4_nt_owf[16])
{
int len_domain_name = strlen(domain_name );
int len_user_name = strlen(user_name );
int len_workgroup_name = strlen(workgroup_name);
if (id == NULL) return;
DEBUG(5,("make_id_info1: %d\n", __LINE__));
id->ptr_id_info1 = 1;
make_uni_hdr(&(id->hdr_domain_name ), len_domain_name , len_domain_name , 4);
id->param_ctrl = param_ctrl;
make_logon_id(&(id->logon_id), log_id_low, log_id_high);
make_uni_hdr(&(id->hdr_user_name ), len_user_name , len_user_name , 4);
make_uni_hdr(&(id->hdr_workgroup_name), len_workgroup_name, len_workgroup_name, 4);
make_arc4_owf(&(id->arc4_lm_owf), arc4_lm_owf);
make_arc4_owf(&(id->arc4_nt_owf), arc4_nt_owf);
make_unistr2(&(id->uni_domain_name ), domain_name , len_domain_name );
make_unistr2(&(id->uni_user_name ), user_name , len_user_name );
make_unistr2(&(id->uni_workgroup_name), workgroup_name, len_workgroup_name);
}
/*******************************************************************
reads or writes an DOM_ID_INFO_1 structure.
********************************************************************/
@ -573,6 +686,49 @@ char* smb_io_id_info1(BOOL io, DOM_ID_INFO_1 *id, char *q, char *base, int align
return q;
}
/*******************************************************************
makes a DOM_SAM_INFO structure.
********************************************************************/
void make_sam_info(DOM_SAM_INFO *sam,
char *logon_srv, char *comp_name, DOM_CRED *clnt_cred,
DOM_CRED *rtn_cred, uint16 switch_value, uint16 logon_level,
DOM_ID_INFO_1 *id1)
{
if (sam == NULL) return;
DEBUG(5,("make_sam_info: %d\n", __LINE__));
make_clnt_info2(&(sam->client), logon_srv, comp_name, clnt_cred);
if (rtn_cred != NULL)
{
sam->ptr_rtn_cred = 1;
memcpy(&(sam->rtn_cred), rtn_cred, sizeof(sam->rtn_cred));
}
else
{
sam->ptr_rtn_cred = 0;
}
sam->logon_level = logon_level;
sam->switch_value = switch_value;
switch (sam->switch_value)
{
case 1:
{
sam->auth.id1 = id1;
break;
}
default:
{
/* PANIC! */
DEBUG(4,("make_sam_info: unknown switch_value!\n"));
break;
}
}
}
/*******************************************************************
reads or writes a DOM_SAM_INFO structure.
********************************************************************/
@ -597,7 +753,7 @@ char* smb_io_sam_info(BOOL io, DOM_SAM_INFO *sam, char *q, char *base, int align
{
case 1:
{
q = smb_io_id_info1(io, &(sam->auth.id1), q, base, align, depth);
q = smb_io_id_info1(io, sam->auth.id1, q, base, align, depth);
break;
}
default: