--- filename.c 2009-07-03 05:21:14.000000000 -0600 +++ /tmp/filename.c.new 2009-10-28 15:53:08.000000000 -0600 @@ -938,15 +938,25 @@ NTSTATUS status; unsigned int i, num_streams; struct stream_struct *streams = NULL; + char * streamname_tmp = NULL; + + streamname_tmp = talloc_asprintf(mem_ctx, "%s:%s", streamname, + "$DATA"); + if ( streamname_tmp == NULL) { + status = NT_STATUS_NO_MEMORY; + return (status); + } result = talloc_asprintf(mem_ctx, "%s%s", basepath, streamname); if (result == NULL) { + TALLOC_FREE(streamname_tmp); return NT_STATUS_NO_MEMORY; } if (SMB_VFS_STAT(conn, result, &st) == 0) { *pst = st; *path = result; + TALLOC_FREE(streamname_tmp); return NT_STATUS_OK; } @@ -962,6 +972,7 @@ if (NT_STATUS_EQUAL(status, NT_STATUS_OBJECT_NAME_NOT_FOUND)) { SET_STAT_INVALID(*pst); *path = result; + TALLOC_FREE(streamname_tmp); return NT_STATUS_OK; } @@ -971,15 +982,16 @@ } for (i=0; icase_sensitive)) { DEBUGADD(10, ("equal\n")); break; } DEBUGADD(10, ("not equal\n")); } + TALLOC_FREE(streamname_tmp); if (i == num_streams) { SET_STAT_INVALID(*pst); @@ -1009,5 +1021,6 @@ fail: TALLOC_FREE(result); TALLOC_FREE(streams); + TALLOC_FREE(streamname_tmp); return status; }