Added proper license headers
This commit is contained in:
parent
64289b2786
commit
d7c20a5d5f
@ -1,28 +1,15 @@
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
FUSE: Filesystem in Userspace
|
FUSE: Filesystem in Userspace
|
||||||
Copyright (C) 2001-2007 Miklos Szeredi <miklos@szeredi.hu>
|
Copyright (C) 2001-2007 Miklos Szeredi <miklos@szeredi.hu>
|
||||||
Copyright (C) 2011 Sebastian Pipping <sebastian@pipping.org>
|
Copyright (C) 2011 Sebastian Pipping <sebastian@pipping.org>
|
||||||
|
|
||||||
This program can be distributed under the terms of the GNU GPLv2.
|
ICFS: Interactively Controlled File System
|
||||||
See the file COPYING.
|
Copyright (C) 2024-2025 Fedir Kovalov
|
||||||
*/
|
|
||||||
|
|
||||||
/** @file
|
This program can be distributed under the terms of the GNU GPLv2.
|
||||||
*
|
See the file LICENSE.
|
||||||
* This file system mirrors the existing file system hierarchy of the
|
*/
|
||||||
* system, starting at the root file system. This is implemented by
|
|
||||||
* just "passing through" all requests to the corresponding user-space
|
|
||||||
* libc functions. This implementation is a little more sophisticated
|
|
||||||
* than the one in passthrough.c, so performance is not quite as bad.
|
|
||||||
*
|
|
||||||
* Compile with:
|
|
||||||
*
|
|
||||||
* gcc -Wall passthrough_fh.c `pkg-config fuse3 --cflags --libs` -lulockmgr
|
|
||||||
* -o passthrough_fh
|
|
||||||
*
|
|
||||||
* ## Source code ##
|
|
||||||
* \include passthrough_fh.c
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define FUSE_USE_VERSION 31
|
#define FUSE_USE_VERSION 31
|
||||||
|
|
||||||
@ -52,6 +39,28 @@
|
|||||||
#include "sourcefs.h"
|
#include "sourcefs.h"
|
||||||
#include "ui-socket.h"
|
#include "ui-socket.h"
|
||||||
|
|
||||||
|
// TODO: move this to other file
|
||||||
|
const char *get_process_name_by_pid(const int pid) {
|
||||||
|
char *name = (char *)calloc(1024, sizeof(char));
|
||||||
|
if (name) {
|
||||||
|
sprintf(name, "/proc/%d/cmdline", pid);
|
||||||
|
FILE *f = fopen(name, "r");
|
||||||
|
if (f) {
|
||||||
|
size_t size;
|
||||||
|
size = fread(name, sizeof(char), 1024, f);
|
||||||
|
if (size > 0) {
|
||||||
|
if ('\n' == name[size - 1])
|
||||||
|
name[size - 1] = '\0';
|
||||||
|
}
|
||||||
|
fclose(f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: move this somewhere else
|
||||||
|
const char *real_filename(const char *filename) { return filename; }
|
||||||
|
|
||||||
static void *xmp_init(struct fuse_conn_info *conn, struct fuse_config *cfg) {
|
static void *xmp_init(struct fuse_conn_info *conn, struct fuse_config *cfg) {
|
||||||
(void)conn;
|
(void)conn;
|
||||||
cfg->use_ino = 1;
|
cfg->use_ino = 1;
|
||||||
@ -245,6 +254,21 @@ static int xmp_mkdir(const char *path, mode_t mode) {
|
|||||||
|
|
||||||
static int xmp_unlink(const char *path) {
|
static int xmp_unlink(const char *path) {
|
||||||
int res;
|
int res;
|
||||||
|
struct process_info pi;
|
||||||
|
struct fuse_context *fc = fuse_get_context();
|
||||||
|
|
||||||
|
// ask the user for the permission for deleting the file
|
||||||
|
pi.PID = fc->pid;
|
||||||
|
pi.UID = fc->uid;
|
||||||
|
pi.name = get_process_name_by_pid(pi.PID);
|
||||||
|
|
||||||
|
// fprintf(stderr, "%s, %d\n", path, ask_access(path, pi));
|
||||||
|
|
||||||
|
if (ask_access(real_filename(path), pi)) {
|
||||||
|
free(pi.name);
|
||||||
|
return -EACCES;
|
||||||
|
}
|
||||||
|
free(pi.name);
|
||||||
|
|
||||||
res = source_unlink(path);
|
res = source_unlink(path);
|
||||||
if (res == -1)
|
if (res == -1)
|
||||||
@ -356,34 +380,10 @@ static int xmp_utimens(const char *path, const struct timespec ts[2],
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// TODO: move this to other file
|
|
||||||
const char *get_process_name_by_pid(const int pid) {
|
|
||||||
char *name = (char *)calloc(1024, sizeof(char));
|
|
||||||
if (name) {
|
|
||||||
sprintf(name, "/proc/%d/cmdline", pid);
|
|
||||||
FILE *f = fopen(name, "r");
|
|
||||||
if (f) {
|
|
||||||
size_t size;
|
|
||||||
size = fread(name, sizeof(char), 1024, f);
|
|
||||||
if (size > 0) {
|
|
||||||
if ('\n' == name[size - 1])
|
|
||||||
name[size - 1] = '\0';
|
|
||||||
}
|
|
||||||
fclose(f);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: move this somewhere else
|
|
||||||
const char *real_filename(const char *filename) { return filename; }
|
|
||||||
|
|
||||||
static int xmp_create(const char *path, mode_t mode,
|
static int xmp_create(const char *path, mode_t mode,
|
||||||
struct fuse_file_info *fi) {
|
struct fuse_file_info *fi) {
|
||||||
int fd;
|
int fd;
|
||||||
|
|
||||||
struct process_info pi;
|
struct process_info pi;
|
||||||
|
|
||||||
struct fuse_context *fc = fuse_get_context();
|
struct fuse_context *fc = fuse_get_context();
|
||||||
|
|
||||||
pi.PID = fc->pid;
|
pi.PID = fc->pid;
|
||||||
@ -409,9 +409,7 @@ static int xmp_create(const char *path, mode_t mode,
|
|||||||
|
|
||||||
static int xmp_open(const char *path, struct fuse_file_info *fi) {
|
static int xmp_open(const char *path, struct fuse_file_info *fi) {
|
||||||
int fd;
|
int fd;
|
||||||
|
|
||||||
struct process_info pi;
|
struct process_info pi;
|
||||||
|
|
||||||
struct fuse_context *fc = fuse_get_context();
|
struct fuse_context *fc = fuse_get_context();
|
||||||
|
|
||||||
pi.PID = fc->pid;
|
pi.PID = fc->pid;
|
||||||
|
@ -1,3 +1,11 @@
|
|||||||
|
/*
|
||||||
|
ICFS: Interactively Controlled File System
|
||||||
|
Copyright (C) 2024-2025 Fedir Kovalov
|
||||||
|
|
||||||
|
This program can be distributed under the terms of the GNU GPLv2.
|
||||||
|
See the file LICENSE.
|
||||||
|
*/
|
||||||
|
|
||||||
#ifndef FUSE_OPERATIONS
|
#ifndef FUSE_OPERATIONS
|
||||||
#define FUSE_OPERATIONS
|
#define FUSE_OPERATIONS
|
||||||
|
|
||||||
|
27
src/main.c
27
src/main.c
@ -3,26 +3,12 @@
|
|||||||
Copyright (C) 2001-2007 Miklos Szeredi <miklos@szeredi.hu>
|
Copyright (C) 2001-2007 Miklos Szeredi <miklos@szeredi.hu>
|
||||||
Copyright (C) 2011 Sebastian Pipping <sebastian@pipping.org>
|
Copyright (C) 2011 Sebastian Pipping <sebastian@pipping.org>
|
||||||
|
|
||||||
This program can be distributed under the terms of the GNU GPLv2.
|
ICFS: Interactively Controlled File System
|
||||||
See the file COPYING.
|
Copyright (C) 2024-2025 Fedir Kovalov
|
||||||
*/
|
|
||||||
|
|
||||||
/** @file
|
This program can be distributed under the terms of the GNU GPLv2.
|
||||||
*
|
See the file LICENSE.
|
||||||
* This file system mirrors the existing file system hierarchy of the
|
*/
|
||||||
* system, starting at the root file system. This is implemented by
|
|
||||||
* just "passing through" all requests to the corresponding user-space
|
|
||||||
* libc functions. This implementation is a little more sophisticated
|
|
||||||
* than the one in passthrough.c, so performance is not quite as bad.
|
|
||||||
*
|
|
||||||
* Compile with:
|
|
||||||
*
|
|
||||||
* gcc -Wall passthrough_fh.c `pkg-config fuse3 --cflags --libs` -lulockmgr
|
|
||||||
* -o passthrough_fh
|
|
||||||
*
|
|
||||||
* ## Source code ##
|
|
||||||
* \include passthrough_fh.c
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define FUSE_USE_VERSION 31
|
#define FUSE_USE_VERSION 31
|
||||||
|
|
||||||
@ -42,8 +28,6 @@ const char *mountpoint = NULL;
|
|||||||
int main(int argc, char *argv[]) {
|
int main(int argc, char *argv[]) {
|
||||||
umask(0);
|
umask(0);
|
||||||
|
|
||||||
// FUSE won't tell us the mountpoint on it's own, so we need to extract it
|
|
||||||
// ourselves.
|
|
||||||
mountpoint = realpath(argv[argc - 1], NULL);
|
mountpoint = realpath(argv[argc - 1], NULL);
|
||||||
|
|
||||||
int ret = source_init(mountpoint);
|
int ret = source_init(mountpoint);
|
||||||
@ -59,6 +43,7 @@ int main(int argc, char *argv[]) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ret = fuse_main(argc, argv, get_fuse_operations(), NULL);
|
ret = fuse_main(argc, argv, get_fuse_operations(), NULL);
|
||||||
|
|
||||||
free(mountpoint);
|
free(mountpoint);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -1,3 +1,11 @@
|
|||||||
|
/*
|
||||||
|
ICFS: Interactively Controlled File System
|
||||||
|
Copyright (C) 2024-2025 Fedir Kovalov
|
||||||
|
|
||||||
|
This program can be distributed under the terms of the GNU GPLv2.
|
||||||
|
See the file LICENSE.
|
||||||
|
*/
|
||||||
|
|
||||||
#define _GNU_SOURCE
|
#define _GNU_SOURCE
|
||||||
|
|
||||||
#include "sourcefs.h"
|
#include "sourcefs.h"
|
||||||
|
@ -1,4 +1,10 @@
|
|||||||
|
/*
|
||||||
|
ICFS: Interactively Controlled File System
|
||||||
|
Copyright (C) 2024-2025 Fedir Kovalov
|
||||||
|
|
||||||
|
This program can be distributed under the terms of the GNU GPLv2.
|
||||||
|
See the file LICENSE.
|
||||||
|
*/
|
||||||
|
|
||||||
#ifndef SOURCEFS_H
|
#ifndef SOURCEFS_H
|
||||||
#define SOURCEFS_H
|
#define SOURCEFS_H
|
||||||
|
@ -1,3 +1,11 @@
|
|||||||
|
/*
|
||||||
|
ICFS: Interactively Controlled File System
|
||||||
|
Copyright (C) 2024-2025 Fedir Kovalov
|
||||||
|
|
||||||
|
This program can be distributed under the terms of the GNU GPLv2.
|
||||||
|
See the file LICENSE.
|
||||||
|
*/
|
||||||
|
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#define _GNU_SOURCE
|
#define _GNU_SOURCE
|
||||||
|
@ -1,3 +1,10 @@
|
|||||||
|
/*
|
||||||
|
ICFS: Interactively Controlled File System
|
||||||
|
Copyright (C) 2024-2025 Fedir Kovalov
|
||||||
|
|
||||||
|
This program can be distributed under the terms of the GNU GPLv2.
|
||||||
|
See the file LICENSE.
|
||||||
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Interface for controlling communication with the UI.
|
* Interface for controlling communication with the UI.
|
||||||
|
Loading…
Reference in New Issue
Block a user