summaryrefslogtreecommitdiffstats
path: root/source3
diff options
context:
space:
mode:
Diffstat (limited to 'source3')
-rw-r--r--source3/include/smb.h7
-rw-r--r--source3/lib/util.c5
-rw-r--r--source3/lib/util_str.c7
-rw-r--r--source3/smbd/mangle.c8
4 files changed, 15 insertions, 12 deletions
diff --git a/source3/include/smb.h b/source3/include/smb.h
index aa54e387979..4168e34d3f6 100644
--- a/source3/include/smb.h
+++ b/source3/include/smb.h
@@ -6,6 +6,7 @@
Copyright (C) John H Terpstra 1996-2000
Copyright (C) Luke Kenneth Casson Leighton 1996-2000
Copyright (C) Paul Ashton 1998-2000
+ Copyright (C) Simo Sorce 2001-2002
Copyright (C) Martin Pool 2002
This program is free software; you can redistribute it and/or modify
@@ -386,10 +387,8 @@ typedef struct write_cache
typedef struct
{
- smb_ucs2_t *path;
- smb_ucs2_t *name;
- smb_ucs2_t *unixname;
- smb_ucs2_t *dosname;
+ smb_ucs2_t *origname;
+ smb_ucs2_t *filename;
SMB_STRUCT_STAT *statinfo;
} smb_filename;
diff --git a/source3/lib/util.c b/source3/lib/util.c
index 97ff4e24a0f..2b71b3cb3d9 100644
--- a/source3/lib/util.c
+++ b/source3/lib/util.c
@@ -449,13 +449,14 @@ smb_ucs2_t *unix_clean_path(const smb_ucs2_t *s)
/* reduce any /../ */
t = ns;
- while ((r = strstr_wa(t, "/.."))) {
+ while (*t && (r = strstr_wa(t, "/.."))) {
t = &(r[3]);
if (*t == UCS2_CHAR('/') || *t == 0) {
*r = 0;
p = strrchr_w(ns, UCS2_CHAR('/'));
if (!p) p = ns;
- memmove(p, t, (strlen_w(t) + 1) * sizeof(smb_ucs2_t));
+ if (*t == 0) *p = 0;
+ else memmove(p, t, (strlen_w(t) + 1) * sizeof(smb_ucs2_t));
t = p;
}
}
diff --git a/source3/lib/util_str.c b/source3/lib/util_str.c
index dbfaf179a17..a7eeedea3d8 100644
--- a/source3/lib/util_str.c
+++ b/source3/lib/util_str.c
@@ -3,6 +3,7 @@
Version 3.0
Samba utility functions
Copyright (C) Andrew Tridgell 1992-2001
+ Copyright (C) Simo Sorce 2001-2002
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -749,8 +750,8 @@ len is the number of bytes, not chars
if len==0 then no length check is performed
****************************************************************************/
-smb_ucs2_t *all_string_sub_w(smb_ucs2_t *s, const smb_ucs2_t *pattern,
- const smb_ucs2_t *insert)
+smb_ucs2_t *all_string_sub_w(const smb_ucs2_t *s, const smb_ucs2_t *pattern,
+ const smb_ucs2_t *insert)
{
smb_ucs2_t *r, *rp, *sp;
size_t lr, lp, li, lt;
@@ -951,7 +952,7 @@ int pstr_sprintf(pstring s, const char *fmt, ...)
}
-/* Just a typesafety wrapper for snprintf into a pstring */
+/* Just a typesafety wrapper for snprintf into a fstring */
int fstr_sprintf(fstring s, const char *fmt, ...)
{
va_list ap;
diff --git a/source3/smbd/mangle.c b/source3/smbd/mangle.c
index b83168712f0..a6f63371c3a 100644
--- a/source3/smbd/mangle.c
+++ b/source3/smbd/mangle.c
@@ -538,16 +538,18 @@ done:
BOOL is_8_3(const char *fname, BOOL check_case)
{
+ char *f;
smb_ucs2_t *ucs2name;
NTSTATUS ret = NT_STATUS_UNSUCCESSFUL;
if (!fname || !*fname) return False;
+ if ((f = strrchr(fname, '/')) == NULL) f = fname;
- DEBUG(10,("is_8_3: testing [%s]\n", fname));
+ DEBUG(10,("is_8_3: testing [%s]\n", f));
- if (strlen(fname) > 12) return False;
+ if (strlen(f) > 12) return False;
- ucs2name = acnv_uxu2(fname);
+ ucs2name = acnv_uxu2(f);
if (!ucs2name)
{
DEBUG(0,("is_8_3: out of memory!\n"));