aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeff Garzik <jeff@garzik.org>2006-08-06 05:22:36 -0400
committerJeff Garzik <jeff@garzik.org>2006-08-06 05:22:36 -0400
commita7ea72a03fc47a3586a14eddb515595727c05f3b (patch)
tree80037b1c043b74ad949d9f8629933020b01570d1
parent9323c5dbf69248ee7baae627c42866353b993784 (diff)
downloaddbfs-a7ea72a03fc47a3586a14eddb515595727c05f3b.tar.gz
Implement statfs op. Limit filename component length.
-rw-r--r--dbfs-backend.c2
-rw-r--r--dbfs.c22
-rw-r--r--dbfs.h2
3 files changed, 25 insertions, 1 deletions
diff --git a/dbfs-backend.c b/dbfs-backend.c
index 30ef303..6558d1c 100644
--- a/dbfs-backend.c
+++ b/dbfs-backend.c
@@ -366,6 +366,8 @@ static int dbfs_name_validate(const char *name)
return -EINVAL;
if (!strcmp(name, ".."))
return -EINVAL;
+ if (strlen(name) > DBFS_FILENAME_MAX)
+ return -EINVAL;
return 0;
}
diff --git a/dbfs.c b/dbfs.c
index 006d20a..67c2d3d 100644
--- a/dbfs.c
+++ b/dbfs.c
@@ -529,6 +529,26 @@ static void dbfs_op_fsyncdir (fuse_req_t req, fuse_ino_t ino,
fuse_reply_err(req, 0);
}
+static void dbfs_op_statfs(fuse_req_t req)
+{
+ struct statvfs f;
+
+ memset(&f, 0, sizeof(f));
+ f.f_bsize = 512;
+ f.f_frsize = 512;
+ f.f_blocks = 0xffffffffffff;
+ f.f_bfree = 0xfffffff;
+ f.f_bavail = 0xfffffff;
+ f.f_files = 0xfffffff;
+ f.f_ffree = 0xffffff;
+ f.f_favail = 0xffffff;
+ f.f_fsid = 0xdeadbeef;
+ f.f_flag = 0;
+ f.f_namemax = DBFS_FILENAME_MAX;
+
+ fuse_reply_statfs(req, &f);
+}
+
static void dbfs_op_setxattr(fuse_req_t req, fuse_ino_t ino,
const char *name, const char *value,
size_t size, int flags)
@@ -655,7 +675,7 @@ static struct fuse_lowlevel_ops dbfs_ops = {
.readdir = dbfs_op_readdir,
.releasedir = dbfs_op_releasedir,
.fsyncdir = dbfs_op_fsyncdir,
- .statfs = NULL,
+ .statfs = dbfs_op_statfs,
.setxattr = dbfs_op_setxattr,
.getxattr = dbfs_op_getxattr,
.listxattr = dbfs_op_listxattr,
diff --git a/dbfs.h b/dbfs.h
index 0516fac..2b3b186 100644
--- a/dbfs.h
+++ b/dbfs.h
@@ -32,6 +32,8 @@ enum {
DBFS_DIRENT_ALIGN = 8, /* struct dbfs_dirent alignment */
+ DBFS_FILENAME_MAX = 256, /* max filename component size */
+
DBFS_XATTR_NAME_LEN = 256, /* extended attr limits */
DBFS_XATTR_MAX_LEN = (1024 * 1024),