summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source3/include/includes.h5
-rw-r--r--source3/rpc_server/srv_netlog.c37
-rw-r--r--source3/smbd/server.c2
-rw-r--r--source3/smbd/trans2.c14
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