Index: source/smbd/nttrans.c =================================================================== --- source/smbd/nttrans.c (Revision 25308) +++ source/smbd/nttrans.c (Revision 25309) @@ -543,7 +543,6 @@ */ pstring rel_fname; files_struct *dir_fsp = file_fsp(inbuf,smb_ntcreate_RootDirectoryFid); - size_t dir_name_len; if(!dir_fsp) { END_PROFILE(SMBntcreateX); @@ -583,15 +582,18 @@ */ pstrcpy( fname, dir_fsp->fsp_name ); - dir_name_len = strlen(fname); - /* - * Ensure it ends in a '\'. - */ + if (ISDOT(fname)) { + fname[0] = '\0'; + } else { + size_t dir_name_len = strlen(fname); + /* + * Ensure it ends in a '\'. + */ - if((fname[dir_name_len-1] != '\\') && (fname[dir_name_len-1] != '/')) { - pstrcat(fname, "/"); - dir_name_len++; + if((fname[dir_name_len-1] != '\\') && (fname[dir_name_len-1] != '/')) { + pstrcat(fname, "/"); + } } srvstr_get_path(inbuf, rel_fname, smb_buf(inbuf), sizeof(rel_fname), 0, STR_TERMINATE, &status); @@ -1244,7 +1246,6 @@ * This filename is relative to a directory fid. */ files_struct *dir_fsp = file_fsp(params,4); - size_t dir_name_len; if(!dir_fsp) { return ERROR_DOS(ERRDOS,ERRbadfid); @@ -1272,15 +1273,18 @@ */ pstrcpy( fname, dir_fsp->fsp_name ); - dir_name_len = strlen(fname); - /* - * Ensure it ends in a '\'. - */ + if (ISDOT(fname)) { + fname[0] = '\0'; + } else { + size_t dir_name_len = strlen(fname); + /* + * Ensure it ends in a '\'. + */ - if((fname[dir_name_len-1] != '\\') && (fname[dir_name_len-1] != '/')) { - pstrcat(fname, "/"); - dir_name_len++; + if((fname[dir_name_len-1] != '\\') && (fname[dir_name_len-1] != '/')) { + pstrcat(fname, "/"); + } } {