diff options
Diffstat (limited to 'source3')
-rw-r--r-- | source3/include/includes.h | 5 | ||||
-rw-r--r-- | source3/rpc_server/srv_netlog.c | 37 | ||||
-rw-r--r-- | source3/smbd/server.c | 2 | ||||
-rw-r--r-- | source3/smbd/trans2.c | 14 |
4 files changed, 33 insertions, 25 deletions
diff --git a/source3/include/includes.h b/source3/include/includes.h index e6dee108a5..5df76668c6 100644 --- a/source3/include/includes.h +++ b/source3/include/includes.h @@ -606,6 +606,11 @@ char *mktemp(char *); /* No standard include */ not good for HPUX */ /* #define SIGCLD_IGNORE */ #define USE_SIGPROCMASK /* Needed to stop zombie processes on HPUX 9.x and 10.x.*/ +#ifdef HPUX10 +#ifdef SEMMSL +#undef SEMMSL +#endif /* SEMMSL */ +#endif /* HPUX10 */ #endif /* HPUX */ diff --git a/source3/rpc_server/srv_netlog.c b/source3/rpc_server/srv_netlog.c index d7a1b9e421..cb3616e4af 100644 --- a/source3/rpc_server/srv_netlog.c +++ b/source3/rpc_server/srv_netlog.c @@ -367,11 +367,9 @@ static void api_net_srv_pwset( int uid, NET_Q_SRV_PWSET q_a; uint32 status = NT_STATUS_WRONG_PASSWORD|0xC0000000; DOM_CRED srv_cred; -#ifdef ALLOW_SRV_PWSET - pstring mach_acct; + pstring mach_acct; struct smb_passwd *smb_pass; BOOL ret; -#endif user_struct *vuser; if ((vuser = get_valid_user_struct(uid)) == NULL) return; @@ -387,8 +385,6 @@ static void api_net_srv_pwset( int uid, DEBUG(5,("api_net_srv_pwset: %d\n", __LINE__)); -#ifdef ALLOW_SRV_PWSET - pstrcpy(mach_acct, unistrn2(q_a.clnt_id.login.uni_acct_name.buffer, q_a.clnt_id.login.uni_acct_name.uni_str_len)); @@ -401,33 +397,26 @@ static void api_net_srv_pwset( int uid, if (smb_pass != NULL) { unsigned char pwd[16]; - uint8 mode = 2; memcpy(pwd, q_a.pwd, 16); - if (obfuscate_pwd(pwd, vuser->dc.sess_key, mode)) + /* lies! nt and lm passwords are _not_ the same: don't care */ + smb_pass->smb_passwd = pwd; + smb_pass->smb_nt_passwd = pwd; + smb_pass->acct_ctrl = ACB_WSTRUST; + + become_root(True); + ret = mod_smbpwd_entry(smb_pass); + unbecome_root(True); + + if (ret) { - /* lies! nt and lm passwords are _not_ the same: don't care */ - smb_pass->smb_passwd = pwd; - smb_pass->smb_nt_passwd = pwd; - smb_pass->acct_ctrl = ACB_WSTRUST; - - become_root(True); - ret = mod_smbpwd_entry(smb_pass); - unbecome_root(True); - - if (ret) - { - /* hooray! */ - status = 0x0; - } + /* hooray! */ + status = 0x0; } } DEBUG(5,("api_net_srv_pwset: %d\n", __LINE__)); -#else - DEBUG(5,("api_net_srv_pwset: server password set being denied\n")); -#endif } else diff --git a/source3/smbd/server.c b/source3/smbd/server.c index ca4326f14e..8166021fc2 100644 --- a/source3/smbd/server.c +++ b/source3/smbd/server.c @@ -4446,7 +4446,7 @@ struct smb_message_struct /* LANMAN2.0 PROTOCOL FOLLOWS */ {SMBfindnclose, "SMBfindnclose", reply_findnclose, AS_USER}, {SMBfindclose, "SMBfindclose", reply_findclose,AS_USER}, - {SMBtrans2, "SMBtrans2", reply_trans2, AS_USER | QUEUE_IN_OPLOCK }, + {SMBtrans2, "SMBtrans2", reply_trans2, AS_USER }, {SMBtranss2, "SMBtranss2", reply_transs2, AS_USER}, /* messaging routines */ diff --git a/source3/smbd/trans2.c b/source3/smbd/trans2.c index 165df56af5..75cf18785c 100644 --- a/source3/smbd/trans2.c +++ b/source3/smbd/trans2.c @@ -33,6 +33,7 @@ extern int Client; extern int oplock_sock; extern int smb_read_error; extern fstring local_machine; +extern int global_oplock_break; /**************************************************************************** Send the required number of replies back. @@ -1743,6 +1744,19 @@ int reply_trans2(char *inbuf,char *outbuf,int length,int bufsize) char *params = NULL, *data = NULL; int num_params, num_params_sofar, num_data, num_data_sofar; + if(global_oplock_break && (tran_call == TRANSACT2_OPEN)) + { + /* + * Queue this open message as we are the process of an oplock break. + */ + + DEBUG(2,("%s: reply_trans2: queueing message trans2open due to being in oplock break state.\n", + timestring() )); + + push_smb_message( inbuf, length); + return -1; + } + outsize = set_message(outbuf,0,0,True); /* All trans2 messages we handle have smb_sucnt == 1 - ensure this |