aboutgitcodelistschat:MatrixIRC
path: root/demo
diff options
context:
space:
mode:
authorStefano Brivio <sbrivio@redhat.com>2024-05-15 08:49:56 +0200
committerStefano Brivio <sbrivio@redhat.com>2024-05-15 08:49:56 +0200
commit5a9302bab9c9bb3d1577f04678d074fb7af4115f (patch)
tree21d04573dfa733e020315d08853c00fc119fb959 /demo
parentbdbec30a849807fb5e6841a38cfe0d168e5962b9 (diff)
downloadseitan-5a9302bab9c9bb3d1577f04678d074fb7af4115f.tar
seitan-5a9302bab9c9bb3d1577f04678d074fb7af4115f.tar.gz
seitan-5a9302bab9c9bb3d1577f04678d074fb7af4115f.tar.bz2
seitan-5a9302bab9c9bb3d1577f04678d074fb7af4115f.tar.lz
seitan-5a9302bab9c9bb3d1577f04678d074fb7af4115f.tar.xz
seitan-5a9302bab9c9bb3d1577f04678d074fb7af4115f.tar.zst
seitan-5a9302bab9c9bb3d1577f04678d074fb7af4115f.zip
Add fsetxattr(), fremovexattr(), open_by_handle_at(), and "virtiofsd demo"HEADmaster
Mostly assorted fixes, a new FDGET operation (get a copy of the target file descriptor via pidfd_getfd()) and a new "FD" flag that means we have to do that on direct tag reference. Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
Diffstat (limited to 'demo')
-rw-r--r--demo/Makefile9
-rw-r--r--demo/fremovexattr.c11
-rw-r--r--demo/fsetxattr.c11
-rw-r--r--demo/open_by_handle_at.c22
-rw-r--r--demo/virtiofsd.hjson93
5 files changed, 146 insertions, 0 deletions
diff --git a/demo/Makefile b/demo/Makefile
new file mode 100644
index 0000000..6b8558f
--- /dev/null
+++ b/demo/Makefile
@@ -0,0 +1,9 @@
+SRCS=$(wildcard *.c)
+
+all: $(SRCS:%.c=%)
+
+clean:
+ $(RM) $(SRCS:%.c=%)
+
+%: %.c
+ $(CC) $(CFLAGS) -o $@ $< \ No newline at end of file
diff --git a/demo/fremovexattr.c b/demo/fremovexattr.c
new file mode 100644
index 0000000..1483975
--- /dev/null
+++ b/demo/fremovexattr.c
@@ -0,0 +1,11 @@
+#include <sys/stat.h>
+#include <sys/xattr.h>
+#include <fcntl.h>
+#include <string.h>
+
+int main(int argc, char **argv)
+{
+ int fd = open(argv[1], O_RDONLY);
+
+ return fremovexattr(fd, argv[2]);
+}
diff --git a/demo/fsetxattr.c b/demo/fsetxattr.c
new file mode 100644
index 0000000..6ee423a
--- /dev/null
+++ b/demo/fsetxattr.c
@@ -0,0 +1,11 @@
+#include <sys/stat.h>
+#include <sys/xattr.h>
+#include <fcntl.h>
+#include <string.h>
+
+int main(int argc, char **argv)
+{
+ int fd = open(argv[1], O_RDONLY);
+
+ return fsetxattr(fd, argv[2], argv[3], strlen(argv[3]) + 1, 0);
+}
diff --git a/demo/open_by_handle_at.c b/demo/open_by_handle_at.c
new file mode 100644
index 0000000..1f48eca
--- /dev/null
+++ b/demo/open_by_handle_at.c
@@ -0,0 +1,22 @@
+#define _GNU_SOURCE
+#include <sys/stat.h>
+#include <sys/xattr.h>
+#include <fcntl.h>
+#include <string.h>
+#include <stdio.h>
+#include <unistd.h>
+
+int main(int argc, char **argv)
+{
+ struct {
+ struct file_handle f;
+ unsigned char h[MAX_HANDLE_SZ];
+ } handle = { .f.handle_bytes = MAX_HANDLE_SZ };
+ int mount_fd, fd;
+ char buf[BUFSIZ];
+
+ name_to_handle_at(AT_FDCWD, argv[1], &handle.f, &mount_fd, 0);
+ fd = open_by_handle_at(mount_fd, &handle.f, 0);
+ read(fd, buf, BUFSIZ);
+ fprintf(stdout, "%s", buf);
+}
diff --git a/demo/virtiofsd.hjson b/demo/virtiofsd.hjson
new file mode 100644
index 0000000..8dfde03
--- /dev/null
+++ b/demo/virtiofsd.hjson
@@ -0,0 +1,93 @@
+[
+ {
+ "match": [
+ {
+ "fsetxattr": {
+ "fd": { "set": "fd" },
+ "name": "security.overrated",
+ "value": { "set": "label" },
+ "size": { "set": "size" },
+ "flags": { "set": "flags" }
+ }
+ }
+ ],
+
+ "call": [
+ {
+ "fsetxattr": {
+ "fd": { "get": "fd" },
+ "name": "security.overrated",
+ "value": { "get": "label" },
+ "size": { "get": "size" },
+ "flags": { "get": "flags" }
+ },
+ "ret": "rc"
+ }
+ ],
+
+ "return": { "value": "rc", "error": "rc" }
+ },
+
+ {
+ "match": [
+ {
+ "fremovexattr": {
+ "fd": { "set": "fd" },
+ "name": "security.overrated"
+ }
+ }
+ ],
+
+ "call": [
+ {
+ "fremovexattr": {
+ "fd": { "get": "fd" },
+ "name": "security.overrated"
+ },
+ "ret": "rc"
+ }
+ ],
+
+ "return": { "value": "rc", "error": "rc" }
+ },
+
+ {
+ "match": [
+ {
+ "open_by_handle_at": {
+ "mount": "/",
+ "handle": {
+ "handle_bytes": { "set": "len" },
+ "f_handle": { "set": "handle" }
+ },
+ "flags": { "set": "flags" }
+ }
+ }
+ ],
+
+ "call": [
+ {
+ "open": {
+ "path": "/",
+ "flags": "rdonly",
+ "mode": "S_IRUSR"
+ },
+ "ret": "fdmount"
+ },
+ {
+ "open_by_handle_at": {
+ "mount": { "get": "fdmount" },
+ "handle": {
+ "handle_type": "ino32_gen",
+ "handle_bytes": { "get": "len" },
+ "f_handle": { "get": "handle" }
+ },
+ "flags": { "get": "flags" }
+ },
+ "ret": "new_fd"
+ }
+ ],
+
+ "fd": { "src": { "get": "new_fd" }, "close_on_exec": false, "return": true }
+ }
+]