[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[tyndur-devel] CDI/FS Überprüfung der Zugriffsrechte
Noch ein kleine Patch. Diesmal für die CDI-lib
ich bin mir nicht so 100%ig sicher wie das mit dem CDI/FS laufen soll,
aber ich hab mal Überprüfungen für die Zugriffsrechte eingebaut bevor
die entsprechenden Funktionen aufgerufen werden. Das verhindert unter
anderem, dass das ISO9660-Module wegen einem PF beendet wird.
diff -r 4ef475f992a8 trunk/src/modules/cdi/lib/fs/lostio_if.c
--- a/trunk/src/modules/cdi/lib/fs/lostio_if.c Sat May 23 11:21:04 2009 +0200
+++ b/trunk/src/modules/cdi/lib/fs/lostio_if.c Sat May 23 16:53:18 2009 +0200
@@ -294,6 +294,9 @@
memset(&stream, 0, sizeof(stream));
stream.fs = parent_stream->fs;
+ if( !parent_stream->res->flags.create_child ) {
+ goto out_err;
+ }
if (!parent_stream->res->dir->create_child(&stream, child_name,
parent_stream->res))
{
@@ -383,6 +386,10 @@
goto out;
}
+ if (!dh->res->flags.read) {
+ goto out;
+ }
+
size = bs * bc;
if (size > fh->node->size - fh->pos) {
size = fh->node->size - fh->pos;
@@ -418,6 +425,10 @@
goto out;
}
+ if(!stream->res->flags.write) {
+ goto out;
+ }
+
result = stream->res->file->write(stream, fh->pos, size, data);
fh->pos += size;
@@ -486,6 +497,11 @@
*/
static int cdi_remove_res(struct cdi_fs_stream* stream)
{
+ if (!stream->res->flags.remove)
+ {
+ return -1;
+ }
+
if (stream->res->file &&
!stream->res->res->remove_class(stream,CDI_FS_CLASS_FILE))
{
@@ -561,6 +577,10 @@
goto out;
}
+ if (!dh->res->flags.read_link) {
+ goto out;
+ }
+
link = dh->res->link->read_link(dh);
if (size > strlen(link) + 1) {
size = strlen(link) + 1;
@@ -589,6 +609,10 @@
goto out;
}
+ if (!stream->res->flags.write_link) {
+ goto out;
+ }
+
if (stream->res->link->write_link(stream, data)) {
result = size;
}