summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2001-06-08 03:02:34 +0000
committerJeremy Allison <jra@samba.org>2001-06-08 03:02:34 +0000
commit3414c71f6de04d0ba26841bceac381498f43ecad (patch)
treeefb4a7b467f4a9fecbfaedde8bef62e444e858ca
parent79ca1f75bb98bd54feee7f2ad0fcfa36d017b92e (diff)
downloadsamba-3414c71f6de04d0ba26841bceac381498f43ecad.tar.gz
samba-3414c71f6de04d0ba26841bceac381498f43ecad.tar.bz2
samba-3414c71f6de04d0ba26841bceac381498f43ecad.zip
Extra stuff for large readwrite support.
Jeremy. (This used to be commit 4338ee78c3d7bcf4b9fac383ff2f572d882ab97c)
-rw-r--r--source3/include/proto.h6
-rw-r--r--source3/include/smb.h3
-rw-r--r--source3/param/loadparm.c4
-rw-r--r--source3/smbd/negprot.c3
4 files changed, 10 insertions, 6 deletions
diff --git a/source3/include/proto.h b/source3/include/proto.h
index f654f2bec8..830cc1927d 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -509,7 +509,6 @@ void out_ascii(FILE *f, unsigned char *buf,int len);
void out_data(FILE *f,char *buf1,int len, int per_line);
void print_asc(int level, unsigned char *buf,int len);
void dump_data(int level,char *buf1,int len);
-void dump_datac(int class, int level, char *buf1, int len);
char *tab_depth(int depth);
int str_checksum(const char *s);
void zero_free(void *p, size_t size);
@@ -636,7 +635,6 @@ BOOL send_smb(int fd,char *buffer);
BOOL send_one_packet(char *buf,int len,struct in_addr ip,int port,int type);
int open_socket_in(int type, int port, int dlevel,uint32 socket_addr, BOOL rebind);
int open_socket_out(int type, struct in_addr *addr, int port ,int timeout);
-void reset_globals_after_fork(void);
void client_setfd(int fd);
char *client_name(void);
char *client_addr(void);
@@ -1272,8 +1270,6 @@ void SMBOWFencrypt(uchar passwd[16], uchar *c8, uchar p24[24]);
void NTLMSSPOWFencrypt(uchar passwd[8], uchar *ntlmchalresp, uchar p24[24]);
void SMBNTencrypt(uchar *passwd, uchar *c8, uchar *p24);
BOOL make_oem_passwd_hash(char data[516], const char *passwd, uchar old_pw_hash[16], BOOL unicode);
-BOOL encode_pw_buffer(char buffer[516], const char *new_pass,
- int new_pw_len, BOOL nt_pass_set);
BOOL decode_pw_buffer(char in_buffer[516], char *new_pwrd,
int new_pwrd_size, uint32 *new_pw_len,
uchar nt_p16[16], uchar p16[16]);
@@ -1863,6 +1859,7 @@ BOOL lp_use_rhosts(void);
BOOL lp_readprediction(void);
BOOL lp_readbmpx(void);
BOOL lp_readraw(void);
+BOOL lp_large_readwrite(void);
BOOL lp_writeraw(void);
BOOL lp_null_passwords(void);
BOOL lp_obey_pam_restrictions(void);
@@ -2204,6 +2201,7 @@ BOOL secrets_fetch_trust_account_password(char *domain, uint8 ret_pwd[16],
time_t *pass_last_set_time);
BOOL secrets_store_trust_account_password(char *domain, uint8 new_pwd[16]);
BOOL trust_password_delete(char *domain);
+void reset_globals_after_fork(void);
/* The following definitions come from passdb/smbpassfile.c */
diff --git a/source3/include/smb.h b/source3/include/smb.h
index d810e11340..12b6bfd4a0 100644
--- a/source3/include/smb.h
+++ b/source3/include/smb.h
@@ -1323,8 +1323,9 @@ char *strdup(char *s);
#define CAP_LOCK_AND_READ 0x0100
#define CAP_NT_FIND 0x0200
#define CAP_DFS 0x1000
+#define CAP_W2K_SMBS 0x2000
#define CAP_LARGE_READX 0x4000
-#define CAP_LARGE_WRITEX 0x8000
+#define CAP_LARGE_WRITEX 0x8000
#define CAP_EXTENDED_SECURITY 0x80000000
/* protocol types. It assumes that higher protocols include lower protocols
diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c
index 476a10f881..98dddda02f 100644
--- a/source3/param/loadparm.c
+++ b/source3/param/loadparm.c
@@ -250,6 +250,7 @@ typedef struct
BOOL bObeyPamRestrictions;
BOOL bLoadPrinters;
BOOL bUseRhosts;
+ BOOL bLargeReadwrite;
BOOL bReadRaw;
BOOL bWriteRaw;
BOOL bReadPrediction;
@@ -780,6 +781,7 @@ static struct parm_struct parm_table[] = {
{"Protocol Options", P_SEP, P_SEPARATOR},
{"protocol", P_ENUM, P_GLOBAL, &Globals.maxprotocol, NULL, enum_protocol, 0},
+ {"large readwrite", P_BOOL, P_GLOBAL, &Globals.bLargeReadwrite, NULL, NULL, 0},
{"max protocol", P_ENUM, P_GLOBAL, &Globals.maxprotocol, NULL, enum_protocol, 0},
{"min protocol", P_ENUM, P_GLOBAL, &Globals.minprotocol, NULL, enum_protocol, 0},
{"unicode", P_BOOL, P_GLOBAL, &Globals.bUnicode, NULL, NULL, 0},
@@ -1234,6 +1236,7 @@ static void init_globals(void)
Globals.pwordlevel = 0;
Globals.unamelevel = 0;
Globals.deadtime = 0;
+ Globals.bLargeReadwrite = False;
Globals.max_log_size = 5000;
Globals.max_open_files = MAX_OPEN_FILES;
Globals.maxprotocol = PROTOCOL_NT1;
@@ -1530,6 +1533,7 @@ FN_GLOBAL_BOOL(lp_use_rhosts, &Globals.bUseRhosts)
FN_GLOBAL_BOOL(lp_readprediction, &Globals.bReadPrediction)
FN_GLOBAL_BOOL(lp_readbmpx, &Globals.bReadbmpx)
FN_GLOBAL_BOOL(lp_readraw, &Globals.bReadRaw)
+FN_GLOBAL_BOOL(lp_large_readwrite, &Globals.bLargeReadwrite)
FN_GLOBAL_BOOL(lp_writeraw, &Globals.bWriteRaw)
FN_GLOBAL_BOOL(lp_null_passwords, &Globals.bNullPasswords)
FN_GLOBAL_BOOL(lp_obey_pam_restrictions, &Globals.bObeyPamRestrictions)
diff --git a/source3/smbd/negprot.c b/source3/smbd/negprot.c
index 6c45e37654..83c809de1c 100644
--- a/source3/smbd/negprot.c
+++ b/source3/smbd/negprot.c
@@ -160,7 +160,8 @@ static int reply_nt1(char *outbuf)
/* dual names + lock_and_read + nt SMBs + remote API calls */
int capabilities = CAP_NT_FIND|CAP_LOCK_AND_READ|CAP_LEVEL_II_OPLOCKS|
(lp_nt_smb_support() ? CAP_NT_SMBS | CAP_RPC_REMOTE_APIS : 0) |
- CAP_LARGE_READX | CAP_LARGE_WRITEX |
+ ((lp_large_readwrite() && (SMB_OFF_T_BITS == 64)) ?
+ CAP_LARGE_READX | CAP_LARGE_WRITEX | CAP_W2K_SMBS : 0) |
(SMB_OFF_T_BITS == 64 ? CAP_LARGE_FILES : 0);