2003-11-25 Jennifer Averett <jennifer@OARcorp.com>

PR 519/filesystem
	* include/rtems/libio_.h, src/eval.c, src/rmdir.c, src/unlink.c:
	Check write permissions in parent directory for file or
	directory delete
This commit is contained in:
Jennifer Averett
2003-11-25 17:27:55 +00:00
parent 7fa9718147
commit 86042ae953
5 changed files with 48 additions and 0 deletions

View File

@@ -1,3 +1,10 @@
2003-11-25 Jennifer Averett <jennifer@OARcorp.com>
PR 519/filesystem
* include/rtems/libio_.h, src/eval.c, src/rmdir.c, src/unlink.c:
Check write permissions in parent directory for file or
directory delete
2003-10-22 Joel Sherrill <joel@OARcorp.com>
PR 511/filesystem

View File

@@ -227,6 +227,11 @@ int rtems_filesystem_evaluate_path(
int follow_link
);
int rtems_filesystem_evaluate_parent(
int flags,
rtems_filesystem_location_info_t *pathloc
);
void rtems_filesystem_initialize();
int init_fs_mount_table();

View File

@@ -97,3 +97,27 @@ int rtems_filesystem_evaluate_path(
return result;
}
int rtems_filesystem_evaluate_parent(
int flags,
rtems_filesystem_location_info_t *pathloc
)
{
rtems_filesystem_location_info_t parent;
int result;
if ( !pathloc )
rtems_set_errno_and_return_minus_one( EIO ); /* should never happen */
if ( !pathloc->ops->evalpath_h )
rtems_set_errno_and_return_minus_one( ENOTSUP );
parent = *pathloc;
result = (*pathloc->ops->evalpath_h)( "..", flags, &parent );
if (result != 0){
return -1;
}
rtems_filesystem_freenode( &parent );
return result;
}

View File

@@ -39,6 +39,12 @@ int rmdir(
if ( result != 0 )
return -1;
result = rtems_filesystem_evaluate_parent(RTEMS_LIBIO_PERMS_WRITE, &loc );
if (result != 0){
rtems_filesystem_freenode( &loc );
return -1;
}
/*
* Verify you can remove this node as a directory.
*/

View File

@@ -35,6 +35,12 @@ int unlink(
if ( result != 0 )
return -1;
result = rtems_filesystem_evaluate_parent(RTEMS_LIBIO_PERMS_WRITE, &loc );
if (result != 0){
rtems_filesystem_freenode( &loc );
return -1;
}
if ( !loc.ops->node_type_h ) {
rtems_filesystem_freenode( &loc );
rtems_set_errno_and_return_minus_one( ENOTSUP );