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:26:45 +00:00
parent ba77fe60d0
commit de691e68f7
5 changed files with 48 additions and 0 deletions
+6
View File
@@ -1,3 +1,9 @@
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-11-22 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* include/rtems/cdefs.h: Use _RTEMS_CDEFS_H guards.
@@ -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();
+25
View File
@@ -97,3 +97,28 @@ 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;
}
+6
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.
*/
+6
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 );