Sys intercept

Merge request reports

Loading
+41 −0
Changes for CMake/FindSyscall_intercept.cmake: 41 added lines, 0 removed lines.
Original line number Diff line number Diff line
find_package(PkgConfig)
pkg_check_modules(PC_Syscall_intercept QUIET libsyscall_intercept)

find_path(Syscall_intercept_INCLUDE_DIR
  NAMES libsyscall_intercept_hook_point.h
  PATHS ${PC_Syscall_intercept_INCLUDE_DIRS}
)

find_library(Syscall_intercept_LIBRARY
  NAMES syscall_intercept
  PATHS ${PC_Syscall_intercept_LIBRARY_DIRS}
)

include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(
	Syscall_intercept
	DEFAULT_MSG
	Syscall_intercept_INCLUDE_DIR
	Syscall_intercept_LIBRARY
)

if(Syscall_intercept_FOUND)
  set(Syscall_intercept_LIBRARIES ${Syscall_intercept_LIBRARY})
  set(Syscall_intercept_INCLUDE_DIRS ${Syscall_intercept_INCLUDE_DIR})
  set(Syscall_intercept_DEFINITIONS ${PC_Syscall_intercept_CFLAGS_OTHER})

  if(NOT TARGET Syscall_intercept::Syscall_intercept)
	  add_library(Syscall_intercept::Syscall_intercept UNKNOWN IMPORTED)
	  set_target_properties(Syscall_intercept::Syscall_intercept PROPERTIES
		IMPORTED_LOCATION "${Syscall_intercept_LIBRARY}"
		INTERFACE_COMPILE_OPTIONS "${PC_Syscall_intercept_CFLAGS_OTHER}"
		INTERFACE_INCLUDE_DIRECTORIES "${Syscall_intercept_INCLUDE_DIR}"
	  )
	endif()
endif()


mark_as_advanced(
	Syscall_intercept_INCLUDE_DIR
	Syscall_intercept_LIBRARY
)
+3 −1
Changes for include/client/adafs_functions.hpp: 3 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -65,7 +65,9 @@ ssize_t adafs_read(int fd, void* buf, size_t count);

int adafs_opendir(const std::string& path);

struct dirent * adafs_readdir(int fd);
int getdents(unsigned int fd,
             struct linux_dirent *dirp,
             unsigned int count);

int adafs_rmdir(const std::string& path);

+58 −0
Changes for include/client/hooks.hpp: 58 added lines, 0 removed lines.
Original line number Diff line number Diff line
/*
  Copyright 2018-2019, Barcelona Supercomputing Center (BSC), Spain
  Copyright 2015-2019, Johannes Gutenberg Universitaet Mainz, Germany

  This software was partially supported by the
  EC H2020 funded project NEXTGenIO (Project ID: 671951, www.nextgenio.eu).

  This software was partially supported by the
  ADA-FS project under the SPPEXA project funded by the DFG.

  SPDX-License-Identifier: MIT
*/

#ifndef IFS_HOOKS_HPP
#define IFS_HOOKS_HPP

#include <fcntl.h>


int hook_openat(int dirfd, const char *cpath, int flags, mode_t mode);
int hook_close(int fd);
int hook_stat(const char* path, struct stat* buf);
int hook_lstat(const char* path, struct stat* buf);
int hook_fstat(unsigned int fd, struct stat* buf);
int hook_fstatat(int dirfd, const char * cpath, struct stat * buf, int flags);
int hook_read(unsigned int fd, void* buf, size_t count);
int hook_pread(unsigned int fd, char * buf, size_t count, loff_t pos);
int hook_write(unsigned int fd, const char * buf, size_t count);
int hook_pwrite(unsigned int fd, const char * buf, size_t count, loff_t pos);
int hook_writev(unsigned long fd, const struct iovec * iov, unsigned long iovcnt);
int hook_pwritev(unsigned long fd, const struct iovec * iov, unsigned long iovcnt,
                 unsigned long pos_l, unsigned long pos_h);
int hook_unlinkat(int dirfd, const char * cpath, int flags);
int hook_symlinkat(const char * oldname, int newdfd, const char * newname);
int hook_access(const char* path, int mask);
int hook_faccessat(int dirfd, const char * cpath, int mode);
int hook_lseek(unsigned int fd, off_t offset, unsigned int whence);
int hook_truncate(const char *path, long length);
int hook_ftruncate(unsigned int fd, unsigned long length);
int hook_dup(unsigned int fd);
int hook_dup2(unsigned int oldfd, unsigned int newfd);
int hook_dup3(unsigned int oldfd, unsigned int newfd, int flags);
int hook_getdents(unsigned int fd, struct linux_dirent *dirp, unsigned int count);
int hook_mkdirat(int dirfd, const char * cpath, mode_t mode);
int hook_fchmodat(int dirfd, const char* path, mode_t mode);
int hook_fchmod(unsigned int dirfd, mode_t mode);
int hook_chdir(const char* path);
int hook_fchdir(unsigned int fd);
int hook_getcwd(char * buf, unsigned long size);
int hook_readlinkat(int dirfd, const char * cpath, char * buf, int bufsiz);
int hook_fcntl(unsigned int fd, unsigned int cmd, unsigned long arg);
int hook_renameat(int olddfd, const char * oldname, int newdfd, const char * newname,
                  unsigned int flags);
int hook_statfs(const char * path, struct statfs * buf);
int hook_fstatfs(unsigned int fd, struct statfs * buf);


#endif
+26 −0
Changes for include/client/intercept.hpp: 26 added lines, 0 removed lines.
Original line number Diff line number Diff line
/*
  Copyright 2018-2019, Barcelona Supercomputing Center (BSC), Spain
  Copyright 2015-2019, Johannes Gutenberg Universitaet Mainz, Germany

  This software was partially supported by the
  EC H2020 funded project NEXTGenIO (Project ID: 671951, www.nextgenio.eu).

  This software was partially supported by the
  ADA-FS project under the SPPEXA project funded by the DFG.

  SPDX-License-Identifier: MIT
*/

#ifndef IFS_INTERCEPT_HPP
#define IFS_INTERCEPT_HPP

int
hook_guard_wrapper(long syscall_number,
                   long arg0, long arg1, long arg2,
                   long arg3, long arg4, long arg5,
                   long *syscall_return_value);

void start_interception();
void stop_interception();

#endif
+8 −11
Changes for include/client/open_dir.hpp: 8 added lines, 11 removed lines.
Original line number Diff line number Diff line
@@ -23,28 +23,25 @@
#include <client/open_file_map.hpp>


class OpenDir: public OpenFile {
    private:

class DirEntry {
    private:
        std::string name_;
        FileType type_;
    public:
                std::string name;
                FileType type;

        DirEntry(const std::string& name, const FileType type);
        const std::string& name();
        FileType type();
};

class OpenDir: public OpenFile {
    private:
        std::vector<DirEntry> entries;
        struct dirent dirent_;
        bool is_dirent_valid;

        void update_dirent(unsigned int pos);


    public:
        OpenDir(const std::string& path);
        void add(const std::string& name, const FileType& type);
        struct dirent * readdir();
        const DirEntry& getdent(unsigned int pos);
        size_t size();
};

Loading
Loading