summaryrefslogtreecommitdiff
path: root/source/rpc_client/cli_netlogon.c
diff options
context:
space:
mode:
Diffstat (limited to 'source/rpc_client/cli_netlogon.c')
-rw-r--r--source/rpc_client/cli_netlogon.c665
1 files changed, 349 insertions, 316 deletions
diff --git a/source/rpc_client/cli_netlogon.c b/source/rpc_client/cli_netlogon.c
index 044d2533c7c..5fda8a50213 100644
--- a/source/rpc_client/cli_netlogon.c
+++ b/source/rpc_client/cli_netlogon.c
@@ -37,29 +37,29 @@ extern int DEBUGLEVEL;
Generate the next creds to use.
****************************************************************************/
-void gen_next_creds( struct ntdom_info *nt, DOM_CRED *new_clnt_cred)
+void gen_next_creds(struct ntdom_info *nt, DOM_CRED * new_clnt_cred)
{
- /*
- * Create the new client credentials.
- */
+ /*
+ * Create the new client credentials.
+ */
- nt->clnt_cred.timestamp.time = time(NULL);
+ nt->clnt_cred.timestamp.time = time(NULL);
- memcpy(new_clnt_cred, &nt->clnt_cred, sizeof(*new_clnt_cred));
+ memcpy(new_clnt_cred, &nt->clnt_cred, sizeof(*new_clnt_cred));
- /* Calculate the new credentials. */
- cred_create(nt->sess_key, &(nt->clnt_cred.challenge),
- new_clnt_cred->timestamp, &(new_clnt_cred->challenge));
+ /* Calculate the new credentials. */
+ cred_create(nt->sess_key, &(nt->clnt_cred.challenge),
+ new_clnt_cred->timestamp, &(new_clnt_cred->challenge));
}
/****************************************************************************
do a LSA Logon Control2
****************************************************************************/
-BOOL cli_net_logon_ctrl2(const char* srv_name, uint32 status_level)
+BOOL cli_net_logon_ctrl2(const char *srv_name, uint32 status_level)
{
prs_struct rbuf;
- prs_struct buf;
+ prs_struct buf;
NET_Q_LOGON_CTRL2 q_l;
BOOL ok = False;
@@ -70,18 +70,18 @@ BOOL cli_net_logon_ctrl2(const char* srv_name, uint32 status_level)
return False;
}
- prs_init(&buf , 0, 4, False);
- prs_init(&rbuf, 0, 4, True );
+ prs_init(&buf, 0, 4, False);
+ prs_init(&rbuf, 0, 4, True);
/* create and send a MSRPC command with api NET_LOGON_CTRL2 */
- DEBUG(4,("net_logon_ctrl2 status level:%x\n", status_level));
+ DEBUG(4, ("net_logon_ctrl2 status level:%x\n", status_level));
/* store the parameters */
make_q_logon_ctrl2(&q_l, srv_name, 0, 0, status_level);
/* turn parameters into data stream */
- if (net_io_q_logon_ctrl2("", &q_l, &buf, 0) &&
+ if (net_io_q_logon_ctrl2("", &q_l, &buf, 0) &&
rpc_con_pipe_req(con, NET_LOGON_CTRL2, &buf, &rbuf))
{
NET_R_LOGON_CTRL2 r_l;
@@ -92,13 +92,15 @@ BOOL cli_net_logon_ctrl2(const char* srv_name, uint32 status_level)
if (ok && r_l.status != 0)
{
/* report error code */
- DEBUG(5,("net_logon_ctrl2: Error %s\n", get_nt_error_msg(r_l.status)));
+ DEBUG(5,
+ ("net_logon_ctrl2: Error %s\n",
+ get_nt_error_msg(r_l.status)));
ok = False;
}
}
prs_free_data(&rbuf);
- prs_free_data(&buf );
+ prs_free_data(&buf);
cli_connection_unlink(con);
return ok;
@@ -113,13 +115,12 @@ encrypt of the server challenge originally received. JRA.
****************************************************************************/
uint32 cli_net_auth2(const char *srv_name,
- const char *trust_acct,
- const char *acct_name,
- uint16 sec_chan,
- uint32 *neg_flags, DOM_CHAL *srv_chal)
+ const char *trust_acct,
+ const char *acct_name,
+ uint16 sec_chan, uint32 * neg_flags, DOM_CHAL * srv_chal)
{
prs_struct rbuf;
- prs_struct buf;
+ prs_struct buf;
NET_Q_AUTH_2 q_a;
uint32 status = 0x0;
uint8 sess_key[16];
@@ -129,43 +130,42 @@ uint32 cli_net_auth2(const char *srv_name,
if (!cli_connection_getsrv(srv_name, PIPE_NETLOGON, &con))
{
- return 0xC0000000 | NT_STATUS_INVALID_PARAMETER;
+ return NT_STATUS_INVALID_PARAMETER;
}
if (!cli_get_con_sesskey(con, sess_key))
{
- return 0xC0000000 | NT_STATUS_INVALID_PARAMETER;
+ return NT_STATUS_INVALID_PARAMETER;
}
- prs_init(&buf , 0, 4, False);
- prs_init(&rbuf, 0, 4, True );
+ prs_init(&buf, 0, 4, False);
+ prs_init(&rbuf, 0, 4, True);
/* create and send a MSRPC command with api NET_AUTH2 */
- DEBUG(4,("cli_net_auth2: srv:%s acct:%s sc:%x mc: %s neg: %x\n",
- srv_name, trust_acct, sec_chan, acct_name,
- *neg_flags));
+ DEBUG(4, ("cli_net_auth2: srv:%s acct:%s sc:%x mc: %s neg: %x\n",
+ srv_name, trust_acct, sec_chan, acct_name, *neg_flags));
cli_con_get_cli_cred(con, &clnt_cred);
/* store the parameters */
make_q_auth_2(&q_a, srv_name, trust_acct, sec_chan, acct_name,
- &clnt_cred.challenge, *neg_flags);
+ &clnt_cred.challenge, *neg_flags);
/* turn parameters into data stream */
- if (net_io_q_auth_2("", &q_a, &buf, 0) &&
+ if (net_io_q_auth_2("", &q_a, &buf, 0) &&
rpc_con_pipe_req(con, NET_AUTH2, &buf, &rbuf))
{
NET_R_AUTH_2 r_a;
net_io_r_auth_2("", &r_a, &rbuf, 0);
- status = (rbuf.offset == 0) ? 0xC0000000 | NT_STATUS_INVALID_PARAMETER : 0;
+ status = (rbuf.offset == 0) ? NT_STATUS_INVALID_PARAMETER : 0;
if (status == 0x0 && r_a.status != 0)
{
/* report error code */
- DEBUG(5,("cli_net_auth2: Error %s\n",
- get_nt_error_msg(r_a.status)));
+ DEBUG(5, ("cli_net_auth2: Error %s\n",
+ get_nt_error_msg(r_a.status)));
status = r_a.status;
}
@@ -178,15 +178,15 @@ uint32 cli_net_auth2(const char *srv_name,
UTIME zerotime;
zerotime.time = 0;
- if(cred_assert( &r_a.srv_chal, sess_key,
- srv_chal, zerotime) == 0)
+ if (cred_assert(&r_a.srv_chal, sess_key,
+ srv_chal, zerotime) == 0)
{
/*
* Server replied with bad credential. Fail.
*/
- DEBUG(5,("cli_net_auth2: server %s replied \
+ DEBUG(5, ("cli_net_auth2: server %s replied \
with bad credential (bad trust account password ?).\n", srv_name));
- status = NT_STATUS_NETWORK_CREDENTIAL_CONFLICT | 0xC0000000;
+ status = NT_STATUS_NETWORK_CREDENTIAL_CONFLICT;
}
}
@@ -203,8 +203,10 @@ with bad credential (bad trust account password ?).\n", srv_name));
if (ok && r_a.srv_flgs.neg_flags != q_a.clnt_flgs.neg_flags)
{
/* report different neg_flags */
- DEBUG(5,("cli_net_auth2: error neg_flags (q,r) differ - (%x,%x)\n",
- q_a.clnt_flgs.neg_flags, r_a.srv_flgs.neg_flags));
+ DEBUG(5,
+ ("cli_net_auth2: error neg_flags (q,r) differ - (%x,%x)\n",
+ q_a.clnt_flgs.neg_flags,
+ r_a.srv_flgs.neg_flags));
ok = False;
}
#endif
@@ -212,15 +214,15 @@ with bad credential (bad trust account password ?).\n", srv_name));
}
else
{
- DEBUG(5,("rpc_con_pipe_req FAILED\n"));
- status = 0xC0000000 | NT_STATUS_ACCESS_DENIED;
+ DEBUG(5, ("rpc_con_pipe_req FAILED\n"));
+ status = NT_STATUS_ACCESS_DENIED;
}
- DEBUG(5,("cli_net_auth2 neg_flags: %x status: %x\n",
- (*neg_flags), status));
+ DEBUG(5, ("cli_net_auth2 neg_flags: %x status: %x\n",
+ (*neg_flags), status));
prs_free_data(&rbuf);
- prs_free_data(&buf );
+ prs_free_data(&buf);
return status;
}
@@ -230,89 +232,92 @@ LSA Request Challenge. Sends our challenge to server, then gets
server response. These are used to generate the credentials.
****************************************************************************/
-uint32 cli_net_req_chal( const char *srv_name, const char* myhostname,
- DOM_CHAL *clnt_chal, DOM_CHAL *srv_chal)
+uint32 cli_net_req_chal(const char *srv_name, const char *myhostname,
+ DOM_CHAL * clnt_chal, DOM_CHAL * srv_chal)
{
- prs_struct rbuf;
- prs_struct buf;
- NET_Q_REQ_CHAL q_c;
- uint32 status = 0x0;
+ prs_struct rbuf;
+ prs_struct buf;
+ NET_Q_REQ_CHAL q_c;
+ uint32 status = 0x0;
struct cli_connection *con = NULL;
if (!cli_connection_init(srv_name, PIPE_NETLOGON, &con))
{
- return 0xC0000000 | NT_STATUS_INVALID_PARAMETER;
+ return NT_STATUS_INVALID_PARAMETER;
+ }
+
+ if (srv_chal == NULL || clnt_chal == NULL)
+ return NT_STATUS_INVALID_PARAMETER;
+
+ prs_init(&buf, 0, 4, False);
+ prs_init(&rbuf, 0, 4, True);
+
+ /* create and send a MSRPC command with api NET_REQCHAL */
+
+ DEBUG(4,
+ ("cli_net_req_chal: LSA Request Challenge from %s to %s: %s\n",
+ srv_name, myhostname, credstr(clnt_chal->data)));
+
+ /* store the parameters */
+ make_q_req_chal(&q_c, srv_name, myhostname, clnt_chal);
+
+ /* turn parameters into data stream */
+ if (net_io_q_req_chal("", &q_c, &buf, 0) &&
+ rpc_con_pipe_req(con, NET_REQCHAL, &buf, &rbuf))
+ {
+ NET_R_REQ_CHAL r_c;
+
+ net_io_r_req_chal("", &r_c, &rbuf, 0);
+ status = (rbuf.offset == 0) ? NT_STATUS_INVALID_PARAMETER : 0;
+
+ if (status == 0x0 && r_c.status != 0)
+ {
+ /* report error code */
+ DEBUG(5,
+ ("cli_net_req_chal: Error %s\n",
+ get_nt_error_msg(r_c.status)));
+ status = r_c.status;
+ }
+
+ if (status == 0x0)
+ {
+ /* ok, at last: we're happy. return the challenge */
+ memcpy(srv_chal, r_c.srv_chal.data,
+ sizeof(srv_chal->data));
+ }
+ }
+ else
+ {
+ DEBUG(5, ("rpc_con_pipe_req FAILED\n"));
+ status = NT_STATUS_ACCESS_DENIED;
}
- if (srv_chal == NULL || clnt_chal == NULL)
- return 0xC0000000 | NT_STATUS_INVALID_PARAMETER;
-
- prs_init(&buf , 0, 4, False);
- prs_init(&rbuf, 0, 4, True );
-
- /* create and send a MSRPC command with api NET_REQCHAL */
-
- DEBUG(4,("cli_net_req_chal: LSA Request Challenge from %s to %s: %s\n",
- srv_name, myhostname, credstr(clnt_chal->data)));
-
- /* store the parameters */
- make_q_req_chal(&q_c, srv_name, myhostname, clnt_chal);
-
- /* turn parameters into data stream */
- if (net_io_q_req_chal("", &q_c, &buf, 0) &&
- rpc_con_pipe_req(con, NET_REQCHAL, &buf, &rbuf))
- {
- NET_R_REQ_CHAL r_c;
-
- net_io_r_req_chal("", &r_c, &rbuf, 0);
- status = (rbuf.offset == 0) ? 0xC0000000 | NT_STATUS_INVALID_PARAMETER : 0;
-
- if (status == 0x0 && r_c.status != 0)
- {
- /* report error code */
- DEBUG(5,("cli_net_req_chal: Error %s\n", get_nt_error_msg(r_c.status)));
- status = r_c.status;
- }
-
- if (status == 0x0)
- {
- /* ok, at last: we're happy. return the challenge */
- memcpy(srv_chal, r_c.srv_chal.data, sizeof(srv_chal->data));
- }
- }
- else
- {
- DEBUG(5,("rpc_con_pipe_req FAILED\n"));
- status = 0xC0000000 | NT_STATUS_ACCESS_DENIED;
- }
-
- prs_free_data(&rbuf);
- prs_free_data(&buf );
-
- return status;
+ prs_free_data(&rbuf);
+ prs_free_data(&buf);
+
+ return status;
}
/***************************************************************************
LSA Server Password Set.
****************************************************************************/
-BOOL cli_net_srv_pwset(const char* srv_name,
- const char* myhostname,
- const char* trust_acct,
- const uint8 hashed_trust_pwd[16],
- uint16 sec_chan_type)
+BOOL cli_net_srv_pwset(const char *srv_name,
+ const char *myhostname,
+ const char *trust_acct,
+ const uint8 hashed_trust_pwd[16], uint16 sec_chan_type)
{
- prs_struct rbuf;
- prs_struct buf;
- DOM_CRED new_clnt_cred;
- NET_Q_SRV_PWSET q_s;
- BOOL ok = False;
- unsigned char processed_new_pwd[16];
- /* Process the new password. */
+ prs_struct rbuf;
+ prs_struct buf;
+ DOM_CRED new_clnt_cred;
+ NET_Q_SRV_PWSET q_s;
+ BOOL ok = False;
+ unsigned char processed_new_pwd[16];
+ /* Process the new password. */
uint8 sess_key[16];
-
+
struct cli_connection *con = NULL;
if (!cli_connection_getsrv(srv_name, PIPE_NETLOGON, &con))
@@ -325,152 +330,172 @@ BOOL cli_net_srv_pwset(const char* srv_name,
return False;
}
- cred_hash3( processed_new_pwd, hashed_trust_pwd, sess_key, 1);
-
- cli_con_gen_next_creds( con, &new_clnt_cred);
-
- prs_init(&buf , 0, 4, False);
- prs_init(&rbuf, 0, 4, True );
-
- /* create and send a MSRPC command with api NET_SRV_PWSET */
-
- DEBUG(4,("cli_net_srv_pwset: srv:%s acct:%s sc: %d mc: %s clnt %s %x\n",
- srv_name, trust_acct, sec_chan_type, myhostname,
- credstr(new_clnt_cred.challenge.data), new_clnt_cred.timestamp.time));
-
- /* store the parameters */
- make_q_srv_pwset(&q_s, srv_name, trust_acct, sec_chan_type,
- myhostname, &new_clnt_cred, (char *)processed_new_pwd);
-
- /* turn parameters into data stream */
- if (net_io_q_srv_pwset("", &q_s, &buf, 0) &&
- rpc_con_pipe_req(con, NET_SRVPWSET, &buf, &rbuf))
- {
- NET_R_SRV_PWSET r_s;
-
- net_io_r_srv_pwset("", &r_s, &rbuf, 0);
- ok = (rbuf.offset != 0);
-
- if (ok && r_s.status != 0)
- {
- /* report error code */
- DEBUG(5,("cli_net_srv_pwset: %s\n", get_nt_error_msg(r_s.status)));
- ok = False;
- }
-
- /* Update the credentials. */
- if (ok && !cli_con_deal_with_creds(con, &(r_s.srv_cred)))
- {
- /*
- * Server replied with bad credential. Fail.
- */
- DEBUG(5,("cli_net_srv_pwset: server %s replied with bad credential \
-(bad trust account password ?).\n", srv_name));
- ok = False;
- }
- }
-
- prs_free_data(&rbuf);
- prs_free_data(&buf );
-
- return ok;
+ cred_hash3(processed_new_pwd, hashed_trust_pwd, sess_key, 1);
+
+ cli_con_gen_next_creds(con, &new_clnt_cred);
+
+ prs_init(&buf, 0, 4, False);
+ prs_init(&rbuf, 0, 4, True);
+
+ /* create and send a MSRPC command with api NET_SRV_PWSET */
+
+ DEBUG(4,
+ ("cli_net_srv_pwset: srv:%s acct:%s sc: %d mc: %s clnt %s %x\n",
+ srv_name, trust_acct, sec_chan_type, myhostname,
+ credstr(new_clnt_cred.challenge.data),
+ new_clnt_cred.timestamp.time));
+
+ /* store the parameters */
+ make_q_srv_pwset(&q_s, srv_name, trust_acct, sec_chan_type,
+ myhostname, &new_clnt_cred,
+ (char *)processed_new_pwd);
+
+ /* turn parameters into data stream */
+ if (net_io_q_srv_pwset("", &q_s, &buf, 0) &&
+ rpc_con_pipe_req(con, NET_SRVPWSET, &buf, &rbuf))
+ {
+ NET_R_SRV_PWSET r_s;
+
+ net_io_r_srv_pwset("", &r_s, &rbuf, 0);
+ ok = (rbuf.offset != 0);
+
+ if (ok && r_s.status != 0)
+ {
+ /* report error code */
+ DEBUG(5,
+ ("cli_net_srv_pwset: %s\n",
+ get_nt_error_msg(r_s.status)));
+ ok = False;
+ }
+
+ /* Update the credentials. */
+ if (ok && !cli_con_deal_with_creds(con, &(r_s.srv_cred)))
+ {
+ /*
+ * Server replied with bad credential. Fail.
+ */
+ DEBUG(5,
+ ("cli_net_srv_pwset: server %s replied with bad credential \
+(bad trust account password ?).\n",
+ srv_name));
+ ok = False;
+ }
+ }
+
+ prs_free_data(&rbuf);
+ prs_free_data(&buf);
+
+ return ok;
}
/***************************************************************************
LSA SAM Logon.
****************************************************************************/
-uint32 cli_net_sam_logon(const char* srv_name, const char* myhostname,
- NET_ID_INFO_CTR *ctr,
- NET_USER_INFO_3 *user_info3)
+uint32 cli_net_sam_logon(const char *srv_name, const char *myhostname,
+ NET_ID_INFO_CTR * idc, NET_USER_INFO_CTR * ctr)
{
- DOM_CRED new_clnt_cred;
- DOM_CRED dummy_rtn_creds;
- prs_struct rbuf;
- prs_struct buf;
- uint16 validation_level = 3;
- NET_Q_SAM_LOGON q_s;
- uint32 status = 0x0;
+ DOM_CRED new_clnt_cred;
+ DOM_CRED dummy_rtn_creds;
+ prs_struct rbuf;
+ prs_struct buf;
+ NET_Q_SAM_LOGON q_s;
+ uint32 status = 0x0;
struct cli_connection *con = NULL;
if (!cli_connection_getsrv(srv_name, PIPE_NETLOGON, &con))
{
- return 0xC0000000 | NT_STATUS_INVALID_PARAMETER;
+ return NT_STATUS_INVALID_PARAMETER;
}
- cli_con_gen_next_creds( con, &new_clnt_cred);
+ cli_con_gen_next_creds(con, &new_clnt_cred);
- prs_init(&buf , 0, 4, False);
- prs_init(&rbuf, 0, 4, True );
+ prs_init(&buf, 0, 4, False);
+ prs_init(&rbuf, 0, 4, True);
- /* create and send a MSRPC command with api NET_SAMLOGON */
+ /* create and send a MSRPC command with api NET_SAMLOGON */
- DEBUG(4,("cli_net_sam_logon: srv:%s mc:%s ll: %d\n",
- srv_name, myhostname,
- ctr->switch_value));
+ DEBUG(4, ("cli_net_sam_logon: srv:%s mc:%s ll: %d\n",
+ srv_name, myhostname, idc->switch_value));
- memset(&dummy_rtn_creds, '\0', sizeof(dummy_rtn_creds));
+ memset(&dummy_rtn_creds, '\0', sizeof(dummy_rtn_creds));
dummy_rtn_creds.timestamp.time = time(NULL);
- /* store the parameters */
- make_sam_info(&(q_s.sam_id), srv_name, myhostname,
- &new_clnt_cred, &dummy_rtn_creds, ctr->switch_value, ctr);
-
- q_s.validation_level = validation_level;
-
- /* turn parameters into data stream */
- if (net_io_q_sam_logon("", &q_s, &buf, 0) &&
- rpc_con_pipe_req(con, NET_SAMLOGON, &buf, &rbuf))
- {
- NET_R_SAM_LOGON r_s;
-
- r_s.ctr.usr.id3 = user_info3;
-
- net_io_r_sam_logon("", &r_s, &rbuf, 0);
- status = (rbuf.offset == 0) ? 0xC0000000 | NT_STATUS_INVALID_PARAMETER : 0;
-
- if (status != 0x0)
- {
- /* report error code */
- DEBUG(5,("cli_net_sam_logon: %s\n", get_nt_error_msg(r_s.status)));
- }
-
- if (status == 0x0)
- {
- /* report error code */
- DEBUG(5,("cli_net_sam_logon: %s\n", get_nt_error_msg(r_s.status)));
- status = r_s.status;
- }
-
- /* Update the credentials. */
- if (status == 0x0 && !cli_con_deal_with_creds(con, &(r_s.srv_creds)))
- {
- /*
- * Server replied with bad credential. Fail.
- */
- DEBUG(5,("cli_net_sam_logon: server %s replied with bad credential \
-(bad trust account password ?).\n", srv_name));
- status = 0xC0000000 | NT_STATUS_LOGON_FAILURE;
- }
-
- if (status == 0x0 && r_s.ctr.switch_value != 3)
- {
- /* report different switch_value */
- DEBUG(5,("cli_net_sam_logon: switch_value of 3 expected %x\n",
- r_s.ctr.switch_value));
- status = 0xC0000000 | NT_STATUS_INVALID_INFO_CLASS;
- }
- }
- else
- {
- status = 0xC0000000 | NT_STATUS_INVALID_PARAMETER;
- }
-
- prs_free_data(&rbuf);
- prs_free_data(&buf );
-
- return status;
+ /* store the parameters */
+ make_sam_info(&(q_s.sam_id), srv_name, myhostname,
+ &new_clnt_cred, &dummy_rtn_creds, idc->switch_value,
+ idc);
+
+ q_s.validation_level = ctr->switch_value;
+
+ /* turn parameters into data stream */
+ if (net_io_q_sam_logon("", &q_s, &buf, 0) &&
+ rpc_con_pipe_req(con, NET_SAMLOGON, &buf, &rbuf))
+ {
+ NET_R_SAM_LOGON r_s;
+
+ net_io_r_sam_logon("", &r_s, &rbuf, 0);
+
+ if (rbuf.offset == 0)
+ {
+ status = NT_STATUS_INVALID_PARAMETER;
+ }
+
+ if (status != 0x0)
+ {
+ /* report error code */
+ DEBUG(5,
+ ("cli_net_sam_logon: %s\n",
+ get_nt_error_msg(r_s.status)));
+ }
+
+ if (status == 0x0)
+ {
+ /* report error code */
+ DEBUG(5,
+ ("cli_net_sam_logon: %s\n",
+ get_nt_error_msg(r_s.status)));
+ status = r_s.status;
+ }
+
+ /* Update the credentials. */
+ if (status == 0x0
+ && !cli_con_deal_with_creds(con, &(r_s.srv_creds)))
+ {
+ /*
+ * Server replied with bad credential. Fail.
+ */
+ DEBUG(5,
+ ("cli_net_sam_logon: server %s replied with bad credential \
+(bad trust account password ?).\n",
+ srv_name));
+ status = NT_STATUS_LOGON_FAILURE;
+ }
+
+ if (status == 0x0 && r_s.ctr.switch_value != ctr->switch_value)
+ {
+ /* report different switch_value */
+ DEBUG(5,
+ ("cli_net_sam_logon: wrong switch value %x\n",
+ r_s.ctr.switch_value));
+ status = NT_STATUS_INVALID_INFO_CLASS;
+ }
+
+ if (status == 0x0)
+ {
+ *ctr = r_s.ctr;
+ }
+ }
+ else
+ {
+ status = NT_STATUS_INVALID_PARAMETER;
+ }
+
+ prs_free_data(&rbuf);
+ prs_free_data(&buf);
+
+ return status;
}
/***************************************************************************
@@ -482,15 +507,15 @@ send a different info level. Right now though, I'm not sure
what that needs to be (I need to see one on the wire before
I can be sure). JRA.
****************************************************************************/
-BOOL cli_net_sam_logoff(const char* srv_name, const char* myhostname,
- NET_ID_INFO_CTR *ctr)
+BOOL cli_net_sam_logoff(const char *srv_name, const char *myhostname,
+ NET_ID_INFO_CTR * ctr)
{
- DOM_CRED new_clnt_cred;
- DOM_CRED dummy_rtn_creds;
- prs_struct rbuf;
- prs_struct buf;
- NET_Q_SAM_LOGOFF q_s;
- BOOL ok = False;
+ DOM_CRED new_clnt_cred;
+ DOM_CRED dummy_rtn_creds;
+ prs_struct rbuf;
+ prs_struct buf;
+ NET_Q_SAM_LOGOFF q_s;
+ BOOL ok = False;
struct cli_connection *con = NULL;
@@ -499,74 +524,78 @@ BOOL cli_net_sam_logoff(const char* srv_name, const char* myhostname,
return False;
}
- cli_con_gen_next_creds( con, &new_clnt_cred);
-
- prs_init(&buf , 0, 4, False);
- prs_init(&rbuf, 0, 4, True );
-
- /* create and send a MSRPC command with api NET_SAMLOGOFF */
-
- DEBUG(4,("cli_net_sam_logoff: srv:%s mc:%s clnt %s %x ll: %d\n",
- srv_name, myhostname,
- credstr(new_clnt_cred.challenge.data), new_clnt_cred.timestamp.time,
- ctr->switch_value));
-
- memset(&dummy_rtn_creds, '\0', sizeof(dummy_rtn_creds));
-
- /* store the parameters */
- make_sam_info(&(q_s.sam_id), srv_name, myhostname,
- &new_clnt_cred, &dummy_rtn_creds, ctr->switch_value, ctr);
-
- /* turn parameters into data stream */
- if (net_io_q_sam_logoff("", &q_s, &buf, 0) &&
- rpc_con_pipe_req(con, NET_SAMLOGOFF, &buf, &rbuf))
- {
- NET_R_SAM_LOGOFF r_s;
-
- net_io_r_sam_logoff("", &r_s, &rbuf, 0);
- ok = (rbuf.offset != 0);
-
- if (ok && r_s.status != 0)
- {
- /* report error code */
- DEBUG(5,("cli_net_sam_logoff: %s\n", get_nt_error_msg(r_s.status)));
- ok = False;
- }
-
- /* Update the credentials. */
- if (ok && !cli_con_deal_with_creds(con, &(r_s.srv_creds)))
- {
- /*
- * Server replied with bad credential. Fail.
- */
- DEBUG(5,("cli_net_sam_logoff: server %s replied with bad credential \
-(bad trust account password ?).\n", srv_name ));
- ok = False;
- }
- }
-
- prs_free_data(&rbuf);
- prs_free_data(&buf );
-
- return ok;
+ cli_con_gen_next_creds(con, &new_clnt_cred);
+
+ prs_init(&buf, 0, 4, False);
+ prs_init(&rbuf, 0, 4, True);
+
+ /* create and send a MSRPC command with api NET_SAMLOGOFF */
+
+ DEBUG(4, ("cli_net_sam_logoff: srv:%s mc:%s clnt %s %x ll: %d\n",
+ srv_name, myhostname,
+ credstr(new_clnt_cred.challenge.data),
+ new_clnt_cred.timestamp.time, ctr->switch_value));
+
+ memset(&dummy_rtn_creds, '\0', sizeof(dummy_rtn_creds));
+
+ /* store the parameters */
+ make_sam_info(&(q_s.sam_id), srv_name, myhostname,
+ &new_clnt_cred, &dummy_rtn_creds, ctr->switch_value,
+ ctr);
+
+ /* turn parameters into data stream */
+ if (net_io_q_sam_logoff("", &q_s, &buf, 0) &&
+ rpc_con_pipe_req(con, NET_SAMLOGOFF, &buf, &rbuf))
+ {
+ NET_R_SAM_LOGOFF r_s;
+
+ net_io_r_sam_logoff("", &r_s, &rbuf, 0);
+ ok = (rbuf.offset != 0);
+
+ if (ok && r_s.status != 0)
+ {
+ /* report error code */
+ DEBUG(5,
+ ("cli_net_sam_logoff: %s\n",
+ get_nt_error_msg(r_s.status)));
+ ok = False;
+ }
+
+ /* Update the credentials. */
+ if (ok && !cli_con_deal_with_creds(con, &(r_s.srv_creds)))
+ {
+ /*
+ * Server replied with bad credential. Fail.
+ */
+ DEBUG(5,
+ ("cli_net_sam_logoff: server %s replied with bad credential \
+(bad trust account password ?).\n",
+ srv_name));
+ ok = False;
+ }
+ }
+
+ prs_free_data(&rbuf);
+ prs_free_data(&buf);
+
+ return ok;
}
/***************************************************************************
Synchronise SAM Database (requires SEC_CHAN_BDC).
****************************************************************************/
-BOOL cli_net_sam_sync( const char* srv_name, const char* myhostname,
- uint32 database_id,
- uint32 *num_deltas,
- SAM_DELTA_HDR *hdr_deltas,
- SAM_DELTA_CTR *deltas)
+BOOL cli_net_sam_sync(const char *srv_name, const char *myhostname,
+ uint32 database_id,
+ uint32 * num_deltas,
+ SAM_DELTA_HDR * hdr_deltas, SAM_DELTA_CTR * deltas)
{
NET_Q_SAM_SYNC q_s;
prs_struct rbuf;
- prs_struct buf;
+ prs_struct buf;
DOM_CRED new_clnt_cred;
BOOL ok = False;
uint8 sess_key[16];
-
+
struct cli_connection *con = NULL;
if (!cli_connection_getsrv(srv_name, PIPE_NETLOGON, &con))
@@ -580,17 +609,17 @@ BOOL cli_net_sam_sync( const char* srv_name, const char* myhostname,
}
cli_con_gen_next_creds(con, &new_clnt_cred);
-
- prs_init(&buf , 0, 4, False);
- prs_init(&rbuf, 0, 4, True );
-
+
+ prs_init(&buf, 0, 4, False);
+ prs_init(&rbuf, 0, 4, True);
+
/* create and send a MSRPC command with api NET_SAM_SYNC */
-
+
make_q_sam_sync(&q_s, srv_name, myhostname,
&new_clnt_cred, database_id);
-
+
/* turn parameters into data stream */
- if (net_io_q_sam_sync("", &q_s, &buf, 0) &&
+ if (net_io_q_sam_sync("", &q_s, &buf, 0) &&
rpc_con_pipe_req(con, NET_SAM_SYNC, &buf, &rbuf))
{
NET_R_SAM_SYNC r_s;
@@ -601,17 +630,21 @@ BOOL cli_net_sam_sync( const char* srv_name, const char* myhostname,
net_io_r_sam_sync("", sess_key, &r_s, &rbuf, 0);
ok = (rbuf.offset != 0);
- if (ok && r_s.status != 0 && r_s.status != STATUS_MORE_ENTRIES)
+ if (ok && r_s.status != 0
+ && r_s.status != STATUS_MORE_ENTRIES)
{
/* report error code */
- DEBUG(5,("cli_net_sam_sync: %s\n", get_nt_error_msg(r_s.status)));
+ DEBUG(5,
+ ("cli_net_sam_sync: %s\n",
+ get_nt_error_msg(r_s.status)));
ok = False;
}
-
+
/* Update the credentials. */
if (ok && !cli_con_deal_with_creds(con, &(r_s.srv_creds)))
{
- DEBUG(5,("cli_net_sam_sync: server %s replied with bad \
+ DEBUG(5,
+ ("cli_net_sam_sync: server %s replied with bad \
credential (bad trust account password ?).\n", srv_name));
ok = False;
}
@@ -626,9 +659,9 @@ credential (bad trust account password ?).\n", srv_name));
}
}
}
-
+
prs_free_data(&rbuf);
- prs_free_data(&buf );
-
+ prs_free_data(&buf);
+
return ok;
}