summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source3/smbd/filename.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/source3/smbd/filename.c b/source3/smbd/filename.c
index d5c22e81c3..73e3869f50 100644
--- a/source3/smbd/filename.c
+++ b/source3/smbd/filename.c
@@ -173,7 +173,7 @@ NTSTATUS unix_convert(connection_struct *conn,
result =determine_path_error(
&orig_path[2], allow_wcard_last_component);
}
- goto fail;
+ return result;
}
/*
@@ -222,8 +222,8 @@ NTSTATUS unix_convert(connection_struct *conn,
if ((dirpath == NULL) && (!(dirpath = SMB_STRDUP("")))) {
DEBUG(0, ("strdup failed\n"));
- result = NT_STATUS_NO_MEMORY;
- goto fail;
+ SAFE_FREE(name);
+ return NT_STATUS_NO_MEMORY;
}
/*
@@ -602,9 +602,15 @@ NTSTATUS unix_convert(connection_struct *conn,
DEBUG(5,("conversion finished %s -> %s\n",orig_path, name));
done:
- result = NT_STATUS_OK;
pstrcpy(orig_path, name);
+ SAFE_FREE(name);
+ SAFE_FREE(dirpath);
+ return NT_STATUS_OK;
fail:
+ DEBUG(10, ("dirpath = [%s] start = [%s]\n", dirpath, start));
+ pstrcpy(orig_path, dirpath);
+ pstrcat(orig_path, "/");
+ pstrcat(orig_path, start);
SAFE_FREE(name);
SAFE_FREE(dirpath);
return result;