diff options
| -rw-r--r-- | source3/smbd/nttrans.c | 34 | ||||
| -rw-r--r-- | source3/smbd/reply.c | 56 | ||||
| -rw-r--r-- | source3/smbd/trans2.c | 14 | 
3 files changed, 33 insertions, 71 deletions
diff --git a/source3/smbd/nttrans.c b/source3/smbd/nttrans.c index ba6fd3eb44..2c0955c834 100644 --- a/source3/smbd/nttrans.c +++ b/source3/smbd/nttrans.c @@ -685,10 +685,7 @@ int reply_ntcreate_and_X(connection_struct *conn,  		restore_case_semantics(file_attributes);  		if(!fsp) { -			if((errno == ENOENT) && bad_path) { -				unix_ERR_class = ERRDOS; -				unix_ERR_code = ERRbadpath; -			} +			set_bad_path_error(errno, bad_path);  			END_PROFILE(SMBntcreateX);  			return(UNIXERROR(ERRDOS,ERRnoaccess));  		} @@ -755,22 +752,14 @@ int reply_ntcreate_and_X(connection_struct *conn,  				if(!fsp) {  					restore_case_semantics(file_attributes); -					if((errno == ENOENT) && bad_path) { -						unix_ERR_class = ERRDOS; -						unix_ERR_code = ERRbadpath; -					} +					set_bad_path_error(errno, bad_path);  					END_PROFILE(SMBntcreateX);  					return(UNIXERROR(ERRDOS,ERRnoaccess));  				}  			} else { -				if((errno == ENOENT) && bad_path) { -					unix_ERR_class = ERRDOS; -					unix_ERR_code = ERRbadpath; -				} -				  				restore_case_semantics(file_attributes); -				 +				set_bad_path_error(errno, bad_path);  				END_PROFILE(SMBntcreateX);  				return(UNIXERROR(ERRDOS,ERRnoaccess));  			} @@ -1180,10 +1169,7 @@ static int call_nt_transact_create(connection_struct *conn,      if(!fsp) {        restore_case_semantics(file_attributes); -      if((errno == ENOENT) && bad_path) { -        unix_ERR_class = ERRDOS; -        unix_ERR_code = ERRbadpath; -      } +      set_bad_path_error(errno, bad_path);        return(UNIXERROR(ERRDOS,ERRnoaccess));      } @@ -1217,21 +1203,13 @@ static int call_nt_transact_create(connection_struct *conn,  			if(!fsp) {  				restore_case_semantics(file_attributes); -				if((errno == ENOENT) && bad_path) { -					unix_ERR_class = ERRDOS; -					unix_ERR_code = ERRbadpath; -				} +				set_bad_path_error(errno, bad_path);  				return(UNIXERROR(ERRDOS,ERRnoaccess));  			}  		} else { -			if((errno == ENOENT) && bad_path) { -				unix_ERR_class = ERRDOS; -				unix_ERR_code = ERRbadpath; -			} -  			restore_case_semantics(file_attributes); - +			set_bad_path_error(errno, bad_path);  			return(UNIXERROR(ERRDOS,ERRnoaccess));  		}        }  diff --git a/source3/smbd/reply.c b/source3/smbd/reply.c index 06f068dccc..af582f1a41 100644 --- a/source3/smbd/reply.c +++ b/source3/smbd/reply.c @@ -463,12 +463,7 @@ int reply_getatr(connection_struct *conn, char *inbuf,char *outbuf, int dum_size    if (!ok)    { -    if((errno == ENOENT) && bad_path) -    { -      unix_ERR_class = ERRDOS; -      unix_ERR_code = ERRbadpath; -    } - +    set_bad_path_error(errno, bad_path);      END_PROFILE(SMBgetatr);      return(UNIXERROR(ERRDOS,ERRbadfile));    } @@ -527,12 +522,7 @@ int reply_setatr(connection_struct *conn, char *inbuf,char *outbuf, int dum_size    if (!ok)    { -    if((errno == ENOENT) && bad_path) -    { -      unix_ERR_class = ERRDOS; -      unix_ERR_code = ERRbadpath; -    } - +    set_bad_path_error(errno, bad_path);      END_PROFILE(SMBsetatr);      return(UNIXERROR(ERRDOS,ERRnoaccess));    } @@ -678,12 +668,8 @@ int reply_search(connection_struct *conn, char *inbuf,char *outbuf, int dum_size        {          if(dptr_num == -2)          { -          if((errno == ENOENT) && bad_path) -          { -            unix_ERR_class = ERRDOS; -            unix_ERR_code = ERRbadpath; -          } -	 	 END_PROFILE(SMBsearch); +          set_bad_path_error(errno, bad_path); +          END_PROFILE(SMBsearch);            return (UNIXERROR(ERRDOS,ERRnofids));          }  		END_PROFILE(SMBsearch); @@ -857,11 +843,7 @@ int reply_open(connection_struct *conn, char *inbuf,char *outbuf, int dum_size,    if (!fsp)    { -    if((errno == ENOENT) && bad_path) -    { -      unix_ERR_class = ERRDOS; -      unix_ERR_code = ERRbadpath; -    } +    set_bad_path_error(errno, bad_path);      END_PROFILE(SMBopen);      return(UNIXERROR(ERRDOS,ERRnoaccess));    } @@ -951,11 +933,7 @@ int reply_open_and_X(connection_struct *conn, char *inbuf,char *outbuf,int lengt    if (!fsp)    { -    if((errno == ENOENT) && bad_path) -    { -      unix_ERR_class = ERRDOS; -      unix_ERR_code = ERRbadpath; -    } +    set_bad_path_error(errno, bad_path);      END_PROFILE(SMBopenX);      return(UNIXERROR(ERRDOS,ERRnoaccess));    } @@ -1090,11 +1068,7 @@ int reply_mknew(connection_struct *conn, char *inbuf,char *outbuf, int dum_size,    if (!fsp)    { -    if((errno == ENOENT) && bad_path)  -    { -      unix_ERR_class = ERRDOS; -      unix_ERR_code = ERRbadpath; -    } +    set_bad_path_error(errno, bad_path);      END_PROFILE(SMBcreate);      return(UNIXERROR(ERRDOS,ERRnoaccess));    } @@ -1164,11 +1138,8 @@ int reply_ctemp(connection_struct *conn, char *inbuf,char *outbuf, int dum_size,    /* close fd from smb_mkstemp() */    close(tmpfd); -	if (!fsp) { -		if((errno == ENOENT) && bad_path) { -      unix_ERR_class = ERRDOS; -      unix_ERR_code = ERRbadpath; -    } +  if (!fsp) { +    set_bad_path_error(errno, bad_path);      END_PROFILE(SMBctemp);      return(UNIXERROR(ERRDOS,ERRnoaccess));    } @@ -2724,6 +2695,9 @@ NTSTATUS mkdir_internal(connection_struct *conn, pstring directory)  		ret = vfs_mkdir(conn,directory,unix_mode(conn,aDIR,directory));  	if (ret == -1) { +		NTSTATUS nterr = set_bad_path_error(errno, bad_path); +		if (!NT_STATUS_IS_OK(nterr)) +			return nterr;  		return map_nt_error_from_unix(errno);  	} @@ -2916,11 +2890,7 @@ int reply_rmdir(connection_struct *conn, char *inbuf,char *outbuf, int dum_size,    if (!ok)    { -    if((errno == ENOENT) && bad_path) -    { -      unix_ERR_class = ERRDOS; -      unix_ERR_code = ERRbadpath; -    } +    set_bad_path_error(errno, bad_path);      END_PROFILE(SMBrmdir);      return(UNIXERROR(ERRDOS,ERRbadpath));    } diff --git a/source3/smbd/trans2.c b/source3/smbd/trans2.c index aca7e47d48..ca8ad5fa79 100644 --- a/source3/smbd/trans2.c +++ b/source3/smbd/trans2.c @@ -1413,6 +1413,20 @@ static int call_trans2setfsinfo(connection_struct *conn,  }  /**************************************************************************** + *  Utility function to set bad path error. + ****************************************************************************/ + +NTSTATUS set_bad_path_error(int err, BOOL bad_path) +{ +	if((err == ENOENT) && bad_path) { +		unix_ERR_class = ERRDOS; +		unix_ERR_code = ERRbadpath; +		return NT_STATUS_OBJECT_PATH_NOT_FOUND; +	} +	return NT_STATUS_OK; +} + +/****************************************************************************   Reply to a TRANS2_QFILEPATHINFO or TRANSACT2_QFILEINFO (query file info by   file name or file id).  ****************************************************************************/  | 
