[CIFS] Add support for legacy servers part seven. Fix open for write,
begin implementation of Win9x style set file size via open then write of zero bytes. Signed-off-by: Steve French (sfrench@us.ibm.com)
This commit is contained in:
parent
f9f5c81769
commit
3e87d80391
|
@ -766,7 +766,7 @@ OldOpenRetry:
|
||||||
if(create_options & CREATE_OPTION_SPECIAL)
|
if(create_options & CREATE_OPTION_SPECIAL)
|
||||||
pSMB->FileAttributes = cpu_to_le16(ATTR_SYSTEM);
|
pSMB->FileAttributes = cpu_to_le16(ATTR_SYSTEM);
|
||||||
else
|
else
|
||||||
pSMB->FileAttributes = cpu_to_le16(ATTR_NORMAL);
|
pSMB->FileAttributes = cpu_to_le16(0/*ATTR_NORMAL*/); /* BB FIXME */
|
||||||
|
|
||||||
/* if ((omode & S_IWUGO) == 0)
|
/* if ((omode & S_IWUGO) == 0)
|
||||||
pSMB->FileAttributes |= cpu_to_le32(ATTR_READONLY);*/
|
pSMB->FileAttributes |= cpu_to_le32(ATTR_READONLY);*/
|
||||||
|
@ -777,6 +777,8 @@ OldOpenRetry:
|
||||||
/* BB FIXME BB */
|
/* BB FIXME BB */
|
||||||
/* pSMB->CreateOptions = cpu_to_le32(create_options & CREATE_OPTIONS_MASK); */
|
/* pSMB->CreateOptions = cpu_to_le32(create_options & CREATE_OPTIONS_MASK); */
|
||||||
/* BB FIXME END BB */
|
/* BB FIXME END BB */
|
||||||
|
|
||||||
|
pSMB->Sattr = cpu_to_le16(ATTR_HIDDEN | ATTR_SYSTEM | ATTR_DIRECTORY);
|
||||||
pSMB->OpenFunction = convert_disposition(openDisposition);
|
pSMB->OpenFunction = convert_disposition(openDisposition);
|
||||||
count += name_len;
|
count += name_len;
|
||||||
pSMB->hdr.smb_buf_length += count;
|
pSMB->hdr.smb_buf_length += count;
|
||||||
|
@ -3689,7 +3691,7 @@ SetEOFRetry:
|
||||||
PATH_MAX, nls_codepage, remap);
|
PATH_MAX, nls_codepage, remap);
|
||||||
name_len++; /* trailing null */
|
name_len++; /* trailing null */
|
||||||
name_len *= 2;
|
name_len *= 2;
|
||||||
} else { /* BB improve the check for buffer overruns BB */
|
} else { /* BB improve the check for buffer overruns BB */
|
||||||
name_len = strnlen(fileName, PATH_MAX);
|
name_len = strnlen(fileName, PATH_MAX);
|
||||||
name_len++; /* trailing null */
|
name_len++; /* trailing null */
|
||||||
strncpy(pSMB->FileName, fileName, name_len);
|
strncpy(pSMB->FileName, fileName, name_len);
|
||||||
|
@ -3697,7 +3699,7 @@ SetEOFRetry:
|
||||||
params = 6 + name_len;
|
params = 6 + name_len;
|
||||||
data_count = sizeof (struct file_end_of_file_info);
|
data_count = sizeof (struct file_end_of_file_info);
|
||||||
pSMB->MaxParameterCount = cpu_to_le16(2);
|
pSMB->MaxParameterCount = cpu_to_le16(2);
|
||||||
pSMB->MaxDataCount = cpu_to_le16(1000); /* BB find max SMB size from sess */
|
pSMB->MaxDataCount = cpu_to_le16(4100);
|
||||||
pSMB->MaxSetupCount = 0;
|
pSMB->MaxSetupCount = 0;
|
||||||
pSMB->Reserved = 0;
|
pSMB->Reserved = 0;
|
||||||
pSMB->Flags = 0;
|
pSMB->Flags = 0;
|
||||||
|
@ -4079,7 +4081,7 @@ setPermsRetry:
|
||||||
PATH_MAX, nls_codepage, remap);
|
PATH_MAX, nls_codepage, remap);
|
||||||
name_len++; /* trailing null */
|
name_len++; /* trailing null */
|
||||||
name_len *= 2;
|
name_len *= 2;
|
||||||
} else { /* BB improve the check for buffer overruns BB */
|
} else { /* BB improve the check for buffer overruns BB */
|
||||||
name_len = strnlen(fileName, PATH_MAX);
|
name_len = strnlen(fileName, PATH_MAX);
|
||||||
name_len++; /* trailing null */
|
name_len++; /* trailing null */
|
||||||
strncpy(pSMB->FileName, fileName, name_len);
|
strncpy(pSMB->FileName, fileName, name_len);
|
||||||
|
|
|
@ -1030,6 +1030,14 @@ int cifs_setattr(struct dentry *direntry, struct iattr *attrs)
|
||||||
/* now that we found one valid file
|
/* now that we found one valid file
|
||||||
handle no sense continuing to loop
|
handle no sense continuing to loop
|
||||||
trying others, so break here */
|
trying others, so break here */
|
||||||
|
/* if(rc == -EINVAL) {
|
||||||
|
int bytes_written;
|
||||||
|
rc = CIFSSMBWrite(xid, pTcon,
|
||||||
|
nfid, 0,
|
||||||
|
attrs->ia_size,
|
||||||
|
&bytes_written,
|
||||||
|
NULL, NULL, long_op);
|
||||||
|
} */
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1048,6 +1056,13 @@ int cifs_setattr(struct dentry *direntry, struct iattr *attrs)
|
||||||
cifs_sb->mnt_cifs_flags &
|
cifs_sb->mnt_cifs_flags &
|
||||||
CIFS_MOUNT_MAP_SPECIAL_CHR);
|
CIFS_MOUNT_MAP_SPECIAL_CHR);
|
||||||
cFYI(1, (" SetEOF by path (setattrs) rc = %d", rc));
|
cFYI(1, (" SetEOF by path (setattrs) rc = %d", rc));
|
||||||
|
/* if(rc == -EINVAL)
|
||||||
|
old_style_set_eof_via_write(xid, pTcon,
|
||||||
|
full_path,
|
||||||
|
attrs->ia_size,
|
||||||
|
cifs_sb->local_nls,
|
||||||
|
cifs_sb->mnt_cifs_flags &
|
||||||
|
CIFS_MOUNT_MAP_SPECIAL_CHR);*/
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Server is ok setting allocation size implicitly - no need
|
/* Server is ok setting allocation size implicitly - no need
|
||||||
|
|
Loading…
Reference in New Issue