Added proper license headers
This commit is contained in:
parent
64289b2786
commit
d7c20a5d5f
@ -1,28 +1,15 @@
|
||||
|
||||
/*
|
||||
FUSE: Filesystem in Userspace
|
||||
Copyright (C) 2001-2007 Miklos Szeredi <miklos@szeredi.hu>
|
||||
Copyright (C) 2011 Sebastian Pipping <sebastian@pipping.org>
|
||||
|
||||
This program can be distributed under the terms of the GNU GPLv2.
|
||||
See the file COPYING.
|
||||
*/
|
||||
ICFS: Interactively Controlled File System
|
||||
Copyright (C) 2024-2025 Fedir Kovalov
|
||||
|
||||
/** @file
|
||||
*
|
||||
* 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
|
||||
*/
|
||||
This program can be distributed under the terms of the GNU GPLv2.
|
||||
See the file LICENSE.
|
||||
*/
|
||||
|
||||
#define FUSE_USE_VERSION 31
|
||||
|
||||
@ -52,6 +39,28 @@
|
||||
#include "sourcefs.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) {
|
||||
(void)conn;
|
||||
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) {
|
||||
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);
|
||||
if (res == -1)
|
||||
@ -356,34 +380,10 @@ static int xmp_utimens(const char *path, const struct timespec ts[2],
|
||||
}
|
||||
#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,
|
||||
struct fuse_file_info *fi) {
|
||||
int fd;
|
||||
|
||||
struct process_info pi;
|
||||
|
||||
struct fuse_context *fc = fuse_get_context();
|
||||
|
||||
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) {
|
||||
int fd;
|
||||
|
||||
struct process_info pi;
|
||||
|
||||
struct fuse_context *fc = fuse_get_context();
|
||||
|
||||
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
|
||||
#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) 2011 Sebastian Pipping <sebastian@pipping.org>
|
||||
|
||||
This program can be distributed under the terms of the GNU GPLv2.
|
||||
See the file COPYING.
|
||||
*/
|
||||
ICFS: Interactively Controlled File System
|
||||
Copyright (C) 2024-2025 Fedir Kovalov
|
||||
|
||||
/** @file
|
||||
*
|
||||
* 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
|
||||
*/
|
||||
This program can be distributed under the terms of the GNU GPLv2.
|
||||
See the file LICENSE.
|
||||
*/
|
||||
|
||||
#define FUSE_USE_VERSION 31
|
||||
|
||||
@ -42,8 +28,6 @@ const char *mountpoint = NULL;
|
||||
int main(int argc, char *argv[]) {
|
||||
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);
|
||||
|
||||
int ret = source_init(mountpoint);
|
||||
@ -59,6 +43,7 @@ int main(int argc, char *argv[]) {
|
||||
}
|
||||
|
||||
ret = fuse_main(argc, argv, get_fuse_operations(), NULL);
|
||||
|
||||
free(mountpoint);
|
||||
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
|
||||
|
||||
#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
|
||||
#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 <sys/types.h>
|
||||
#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.
|
||||
|
Loading…
Reference in New Issue
Block a user