mirror of
https://github.com/samba-team/samba.git
synced 2025-01-04 05:18:06 +03:00
r2786: - match on both long and short name for search posix backend
- a final name component of . is illegal
(This used to be commit 11c852170b
)
This commit is contained in:
parent
c62a988c39
commit
84bbe948f3
@ -98,11 +98,20 @@ NTSTATUS pvfs_list(struct pvfs_state *pvfs, struct pvfs_filename *name, struct p
|
||||
while ((dent = readdir(odir))) {
|
||||
uint_t i = dir->count;
|
||||
const char *dname = dent->d_name;
|
||||
char *short_name;
|
||||
|
||||
short_name = pvfs_short_name_component(pvfs, dname);
|
||||
|
||||
/* check it matches the wildcard pattern */
|
||||
if (ms_fnmatch(pattern, dname, PROTOCOL_NT1) != 0) {
|
||||
if (ms_fnmatch(pattern, dname,
|
||||
pvfs->tcon->smb_conn->negotiate.protocol) != 0 &&
|
||||
ms_fnmatch(pattern, short_name,
|
||||
pvfs->tcon->smb_conn->negotiate.protocol) != 0) {
|
||||
talloc_free(short_name);
|
||||
continue;
|
||||
}
|
||||
|
||||
talloc_free(short_name);
|
||||
|
||||
if (dir->count >= allocated) {
|
||||
allocated = (allocated + 100) * 1.2;
|
||||
|
@ -159,6 +159,7 @@ static NTSTATUS pvfs_unix_path(struct pvfs_state *pvfs, const char *cifs_name,
|
||||
uint_t flags, struct pvfs_filename *name)
|
||||
{
|
||||
char *ret, *p;
|
||||
size_t len;
|
||||
|
||||
name->original_name = talloc_strdup(name, cifs_name);
|
||||
name->stream_name = NULL;
|
||||
@ -183,8 +184,13 @@ static NTSTATUS pvfs_unix_path(struct pvfs_state *pvfs, const char *cifs_name,
|
||||
|
||||
p = ret + strlen(pvfs->base_directory) + 1;
|
||||
|
||||
if (p[strlen(cifs_name)-1] == '\\') {
|
||||
p[strlen(cifs_name)-1] = 0;
|
||||
len = strlen(cifs_name);
|
||||
if (len>0 && p[len-1] == '\\') {
|
||||
p[len-1] = 0;
|
||||
len--;
|
||||
}
|
||||
if (len>1 && p[len-1] == '.' && p[len-2] == '\\') {
|
||||
return NT_STATUS_OBJECT_NAME_INVALID;
|
||||
}
|
||||
|
||||
/* now do an in-place conversion of '\' to '/', checking
|
||||
|
@ -24,6 +24,16 @@
|
||||
#include "vfs_posix.h"
|
||||
|
||||
|
||||
/*
|
||||
return the short name for a component of a full name
|
||||
TODO: this is obviously not very useful in its current form !
|
||||
*/
|
||||
char *pvfs_short_name_component(struct pvfs_state *pvfs, const char *name)
|
||||
{
|
||||
return talloc_strndup(pvfs, name, 12);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
return the short name for a given entry in a directory
|
||||
TODO: this is obviously not very useful in its current form !
|
||||
@ -31,5 +41,5 @@
|
||||
char *pvfs_short_name(struct pvfs_state *pvfs, struct pvfs_filename *name)
|
||||
{
|
||||
char *p = strrchr(name->full_name, '/');
|
||||
return talloc_strndup(name, p+1, 12);
|
||||
return pvfs_short_name_component(pvfs, p+1);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user