need status codes from cli_net_req_chal() and cli_net_auth2().
[kai/samba.git] / source3 / rpc_client / cli_login.c
index b4cdf3ae50abf886f8c7debcff93634459a8fe12..06a31a607e0b20a7511209904f0dc736e5e42704 100644 (file)
 #include "nterr.h"
 
 extern int DEBUGLEVEL;
-extern fstring global_myworkgroup;
-extern pstring global_myname;
 
 /****************************************************************************
 Initialize domain session credentials.
 ****************************************************************************/
 
-BOOL cli_nt_setup_creds(struct cli_state *cli, unsigned char mach_pwd[16])
+uint32 cli_nt_setup_creds(struct cli_state *cli, uint16 fnum,
+                               const char* trust_acct,
+                               const char* srv_name,
+                               unsigned char trust_pwd[16],
+                               uint16 sec_chan)
 {
   DOM_CHAL clnt_chal;
   DOM_CHAL srv_chal;
-
+       uint32 ret;
   UTIME zerotime;
 
   /******************* Request Challenge ********************/
@@ -43,16 +45,17 @@ BOOL cli_nt_setup_creds(struct cli_state *cli, unsigned char mach_pwd[16])
   generate_random_buffer( clnt_chal.data, 8, False);
        
   /* send a client challenge; receive a server challenge */
-  if (!cli_net_req_chal(cli, &clnt_chal, &srv_chal))
+  ret = cli_net_req_chal(cli, fnum, srv_name, &clnt_chal, &srv_chal);
+  if (ret != 0)
   {
     DEBUG(0,("cli_nt_setup_creds: request challenge failed\n"));
-    return False;
+    return ret;
   }
 
   /**************** Long-term Session key **************/
 
   /* calculate the session key */
-  cred_session_key(&clnt_chal, &srv_chal, mach_pwd, cli->sess_key);
+  cred_session_key(&clnt_chal, &srv_chal, (char *)trust_pwd, cli->sess_key);
   bzero(cli->sess_key+8, 8);
 
   /******************* Authenticate 2 ********************/
@@ -66,34 +69,36 @@ BOOL cli_nt_setup_creds(struct cli_state *cli, unsigned char mach_pwd[16])
    * Receive an auth-2 challenge response and check it.
    */
 
-  if (!cli_net_auth2(cli, SEC_CHAN_WKSTA, 0x000001ff, &srv_chal))
+  ret = cli_net_auth2(cli, fnum, trust_acct, srv_name,
+                      sec_chan, 0x000001ff, &srv_chal);
+  if (ret != 0x0)
   {
     DEBUG(0,("cli_nt_setup_creds: auth2 challenge failed\n"));
-    return False;
   }
 
-  return True;
+  return ret;
 }
 
 /****************************************************************************
  Set machine password.
  ****************************************************************************/
 
-BOOL cli_nt_srv_pwset(struct cli_state *cli, unsigned char *new_hashof_mach_pwd)
+BOOL cli_nt_srv_pwset(struct cli_state *cli, uint16 fnum,
+                     unsigned char *new_hashof_trust_pwd, uint16 sec_chan)
 {
   unsigned char processed_new_pwd[16];
 
-  DEBUG(5,("cli_nt_login_interactive: %d\n", __LINE__));
+  DEBUG(5,("cli_nt_srv_pwset: %d\n", __LINE__));
 
 #ifdef DEBUG_PASSWORD
-  dump_data(6, new_hashof_mach_pwd, 16);
+  dump_data(6, new_hashof_trust_pwd, 16);
 #endif
 
   /* Process the new password. */
-  cred_hash3( processed_new_pwd, new_hashof_mach_pwd, cli->sess_key, 1);
+  cred_hash3( processed_new_pwd, new_hashof_trust_pwd, cli->sess_key, 1);
 
   /* send client srv_pwset challenge */
-  return cli_net_srv_pwset(cli, processed_new_pwd);
+  return cli_net_srv_pwset(cli, fnum, processed_new_pwd, sec_chan);
 }
 
 /****************************************************************************
@@ -102,13 +107,12 @@ NT login - interactive.
 password equivalents, protected by the session key) is inherently insecure
 given the current design of the NT Domain system. JRA.
  ****************************************************************************/
-
-BOOL cli_nt_login_interactive(struct cli_state *cli, char *domain, char *username, 
-                              uint32 smb_userid_low, char *password,
+BOOL cli_nt_login_interactive(struct cli_state *cli, uint16 fnum, char *domain, char *username, 
+                              uint32 luid_low, char *password,
                               NET_ID_INFO_CTR *ctr, NET_USER_INFO_3 *user_info3)
 {
-  unsigned char lm_owf_user_pwd[16];
-  unsigned char nt_owf_user_pwd[16];
+  uchar lm_owf_user_pwd[16];
+  uchar nt_owf_user_pwd[16];
   BOOL ret;
 
   DEBUG(5,("cli_nt_login_interactive: %d\n", __LINE__));
@@ -125,16 +129,16 @@ BOOL cli_nt_login_interactive(struct cli_state *cli, char *domain, char *usernam
 
 #endif
 
-  DEBUG(5,("cli_nt_login_network: %d\n", __LINE__));
+  DEBUG(5,("cli_nt_login_interactive: %d\n", __LINE__));
 
   /* indicate an "interactive" login */
   ctr->switch_value = INTERACTIVE_LOGON_TYPE;
 
   /* Create the structure needed for SAM logon. */
   make_id_info1(&ctr->auth.id1, domain, 0, 
-                smb_userid_low, 0,
+                luid_low, 0,
                 username, cli->clnt_name_slash,
-                cli->sess_key, lm_owf_user_pwd, nt_owf_user_pwd);
+                (char *)cli->sess_key, lm_owf_user_pwd, nt_owf_user_pwd);
 
   /* Ensure we overwrite all the plaintext password
      equivalents. */
@@ -142,7 +146,7 @@ BOOL cli_nt_login_interactive(struct cli_state *cli, char *domain, char *usernam
   memset(nt_owf_user_pwd, '\0', sizeof(nt_owf_user_pwd));
 
   /* Send client sam-logon request - update credentials on success. */
-  ret = cli_net_sam_logon(cli, ctr, user_info3);
+  ret = cli_net_sam_logon(cli, fnum, ctr, user_info3);
 
   memset(ctr->auth.id1.lm_owf.data, '\0', sizeof(lm_owf_user_pwd));
   memset(ctr->auth.id1.nt_owf.data, '\0', sizeof(nt_owf_user_pwd));
@@ -156,8 +160,8 @@ NT login - network.
 password equivalents over the network. JRA.
 ****************************************************************************/
 
-BOOL cli_nt_login_network(struct cli_state *cli, char *domain, char *username, 
-                          uint32 smb_userid_low, char lm_chal[8], char lm_chal_resp[24],
+BOOL cli_nt_login_network(struct cli_state *cli, uint16 fnum, char *domain, char *username, 
+                          uint32 luid_low, char lm_chal[8], char lm_chal_resp[24],
                           char nt_chal_resp[24],
                           NET_ID_INFO_CTR *ctr, NET_USER_INFO_3 *user_info3)
 {
@@ -168,22 +172,21 @@ BOOL cli_nt_login_network(struct cli_state *cli, char *domain, char *username,
 
   /* Create the structure needed for SAM logon. */
   make_id_info2(&ctr->auth.id2, domain, 0, 
-                smb_userid_low, 0,
+                luid_low, 0,
                 username, cli->clnt_name_slash,
-                lm_chal, lm_chal_resp, nt_chal_resp);
+                (uchar *)lm_chal, (uchar *)lm_chal_resp, (uchar *)nt_chal_resp);
 
   /* Send client sam-logon request - update credentials on success. */
-  return cli_net_sam_logon(cli, ctr, user_info3);
+  return cli_net_sam_logon(cli, fnum, ctr, user_info3);
 }
 
 /****************************************************************************
 NT Logoff.
 ****************************************************************************/
-
-BOOL cli_nt_logoff(struct cli_state *cli, NET_ID_INFO_CTR *ctr)
+BOOL cli_nt_logoff(struct cli_state *cli, uint16 fnum, NET_ID_INFO_CTR *ctr)
 {
   DEBUG(5,("cli_nt_logoff: %d\n", __LINE__));
 
   /* Send client sam-logoff request - update credentials on success. */
-  return cli_net_sam_logoff(cli, ctr);
+  return cli_net_sam_logoff(cli, fnum, ctr);
 }