HEX
Server: LiteSpeed
System: Linux sarajevo.maychu.cloud 5.14.0-503.40.1.el9_5.x86_64 #1 SMP PREEMPT_DYNAMIC Mon May 5 06:06:04 EDT 2025 x86_64
User: inqua407 (1189)
PHP: 8.3.17
Disabled: exec,execl,system,passthru,shell_exec,escapeshellarg,escapeshellcmd,proc_close,ini_alter,proc_open,dl,popen,show_source,posix_getpwuid,getpwuid,posix_geteuid,posix_getegid,posix_getgrgid,open_basedir,safe_mode_include_dir,pcntl_exec,pcntl_fork,proc_get_status,proc_nice,proc_terminate,pclose,virtual,openlog,popen,pclose,virtual,openlog,escapeshellcmd,escapeshellarg,dl,show_source,symlink,mail
Upload Files
File: //usr/include/lve/secureio.h
// Secure I/O and filesystem operations

#ifndef _SECUREIO_H_
#define _SECUREIO_H_

#include <sys/types.h>


#define SECUREIO_BUFSIZE 8192


// Writes absolute path pointed by descriptor fd to buffer *buf
// Returns buf if successful
// Returns NULL if error has occured
char *get_path_from_descriptor(int fd, char *buf);


// Returns 1 if subdir is subdirectory of dir, 0 otherwise
int is_subdir(const char *dir, const char *subdir);


// Opens path for reading not following symlinks and verifies that opened path is inside parent_path
// Returns:
// descriptor if successful
// -1 if path does not exist or is a symlink
// -2 if opened path is NOT inside parent_path or cannot be determined
int open_not_symlink(const char *path, const char *parent_path);


// Closes descriptor (if it is > 0)
void closefd(int fd);


// Tries to read first directory entry in order to ensure that descriptor is valid
// Returns 0 if reading succeeded or -1 if error has occured
int check_dir(int fd);


// Checks if path is a directory (in secure manner)
// Also opens path (if descriptor fd == -1) and then checks that opened path is inside parent_path
// Returns descriptor if path refers to directory
// Returns -1 if path does not exist or is not a directory
// Returns -2 if opened path is NOT inside parent_path or cannot be determined
int isdir(const char *path, int fd, const char *parent_path);


// Sets permissions to directory (in secure manner)
// Returns descriptor if successful
// Returns -1 if error has occured
// Returns -2 if opened path is NOT inside parent_path or cannot be determined
int set_perm_dir_secure(const char *path, mode_t perm, int fd, const char *parent_path);


// Sets owner and group of directory (in secure manner)
// Returns descriptor if successful
// Returns -1 if error has occured
// Returns -2 if opened path is NOT inside parent_path or cannot be determined
int set_owner_dir_secure(const char *path, uid_t uid, gid_t gid, int fd, const char *parent_path);


// Creates directory if it does not exist, sets permissions/owner otherwise
// Returns descriptor if successful
// Returns -1 if error has occured
int create_dir_secure(const char *path, mode_t perm, uid_t uid, gid_t gid, int fd, const char *parent_path);


// Recursive directory creation function
// Returns 0 if successful
// Returns -1 if error has occured
int makedirs_secure(const char *path, mode_t perm, uid_t uid, gid_t gid, const char *parent_path);


#endif