shell bypass 403

Cubjrnet7 Shell

: /usr/src/file_protector-1.1-1572/ [ drwxr-xr-x ]

name : file_contexts.h
/**
@file     file_contexts.h
@brief    Store the opened file contexts(inode + pid)
@details  Copyright (c) 2023 Acronis International GmbH
@author   Bruce Wang ([email protected])
@since    $Id: $
*/

#pragma once

#include "interval_tree.h"
#include "transport.h"
#include "transport_id.h"

typedef struct
{
    long long tv_sec;
    long tv_nsec;
} timespec_compat_t;

typedef struct
{
    file_key_t file_key;
    timespec_compat_t i_mtime; /* last modify time */
    timespec_compat_t i_ctime; /* last change time */
} file_context_key_t;

// This struct is stored in msg_t, to keep the necessary information
typedef struct
{
    file_context_key_t key;
    transport_id_t skipped_transport_ids[MAX_TRANSPORT_SIZE];
} file_context_msg_info_t;

// A struct to store the temporary file context information
typedef struct
{
    union
    {
        uint64_t pid_version;
        uint64_t unique_pid;
    };
    uint64_t low;
    uint64_t high;
    int flags;
    file_context_msg_info_t msg_info;
} file_context_info_t;

// Context that is global per file
typedef struct
{
    // currently unused
} file_context_open_file_t;

// Context that is global per file + process
typedef struct
{
    atomic_t flags;
} file_context_open_process_t;

typedef struct
{
    atomic_t flags;
} file_context_process_t;

typedef struct
{
    interval_set_t interval_set;
    spinlock_t spinlock;
    atomic_t is_reported;
} file_context_rw_t;

typedef enum
{
    FILE_CONTEXT_OPEN_TABLE = 0,
    FILE_CONTEXT_READ_TABLE,
    FILE_CONTEXT_WRITE_TABLE,
} file_context_table_type_t;

int file_contexts_init(void);
void file_contexts_init_fail_free(void);
void file_contexts_deinit(void);
void remove_common_cache_all(const file_key_t* file_key);
int acquire_file_context_entry(transport_id_t id);
void release_file_context_entry(transport_id_t id);
bool check_open_cache(const transport_ids_t* ids, file_context_info_t *info);
int add_open_cache(transport_id_t id, const file_context_info_t *info,
                   file_context_open_file_t **file_node, file_context_open_process_t **process_node);
void put_open_cache(file_context_open_file_t *file_node, file_context_open_process_t *process_node);
file_context_rw_t *add_rw_cache(transport_id_t id, file_context_info_t *info, file_context_table_type_t type);
bool check_and_update_read_cache(const transport_ids_t* ids, file_context_info_t *info);
bool check_write_cache(const transport_ids_t* ids, file_context_info_t *info, file_context_table_type_t type);
void put_rw_cache(file_context_rw_t *node);
void clean_interval_tree(interval_set_t *set);
bool insert_interval(uint64_t low, uint64_t high, interval_set_t *set);
bool check_interval(uint64_t low, uint64_t high, interval_set_t *set);
bool check_update_file_modify_cache(file_context_info_t *info);
bool add_file_modify_cache(file_context_info_t *info);
int acquire_file_modify_entry(void);
void release_file_modify_entry(void);

© 2025 Cubjrnet7