2019-09-30 10:53:41 -04:00
|
|
|
/******************************************************************************
|
|
|
|
|
* Copyright (c) Huawei Technologies Co., Ltd. 2018-2019. All rights reserved.
|
|
|
|
|
* iSulad licensed under the Mulan PSL v1.
|
|
|
|
|
* You can use this software according to the terms and conditions of the Mulan PSL v1.
|
|
|
|
|
* You may obtain a copy of Mulan PSL v1 at:
|
|
|
|
|
* http://license.coscl.org.cn/MulanPSL
|
|
|
|
|
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
|
|
|
|
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
|
|
|
|
|
* PURPOSE.
|
|
|
|
|
* See the Mulan PSL v1 for more details.
|
|
|
|
|
* Author: tanyifeng
|
|
|
|
|
* Create: 2018-11-1
|
|
|
|
|
* Description: provide container sha256 functions
|
|
|
|
|
********************************************************************************/
|
|
|
|
|
|
|
|
|
|
#ifndef __UTILS_H
|
|
|
|
|
#define __UTILS_H
|
|
|
|
|
|
|
|
|
|
#include <stdio.h>
|
|
|
|
|
#include <errno.h>
|
|
|
|
|
#include <stdbool.h>
|
|
|
|
|
#include <fcntl.h>
|
|
|
|
|
#include <sys/prctl.h>
|
|
|
|
|
#include <signal.h>
|
|
|
|
|
#include <sys/syscall.h>
|
|
|
|
|
#include <stdint.h>
|
|
|
|
|
#include <time.h>
|
|
|
|
|
#include "utils_string.h"
|
|
|
|
|
#include "utils_array.h"
|
|
|
|
|
#include "utils_file.h"
|
|
|
|
|
#include "utils_convert.h"
|
|
|
|
|
#include "utils_verify.h"
|
2019-12-25 15:50:34 +08:00
|
|
|
#include "utils_regex.h"
|
2019-09-30 10:53:41 -04:00
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
|
extern "C" {
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#ifndef MS_REC
|
|
|
|
|
#define MS_REC 16384
|
|
|
|
|
#endif
|
|
|
|
|
|
2019-12-25 15:50:34 +08:00
|
|
|
#if __WORDSIZE == 64
|
|
|
|
|
// current max user memory for 64-machine is 2^47 B
|
|
|
|
|
#define MAX_MEMORY_SIZE ((size_t)1 << 47)
|
|
|
|
|
#else
|
|
|
|
|
// current max user memory for 32-machine is 2^31 B
|
|
|
|
|
#define MAX_MEMORY_SIZE ((size_t)1 << 31)
|
|
|
|
|
#endif
|
|
|
|
|
|
2019-09-30 10:53:41 -04:00
|
|
|
#define MAX_ID_OFFSET 65535
|
|
|
|
|
#define HOST_CHANNLE_ARGS 4
|
|
|
|
|
#define HOST_CHANNLE_MIN_SIZE (4 * SIZE_KB)
|
|
|
|
|
#define MOUNT_PROPERTIES_SIZE 128
|
|
|
|
|
#define HOST_PATH_MODE 0700
|
|
|
|
|
#define DEFAULT_SHM_SIZE (64 * SIZE_MB)
|
|
|
|
|
|
|
|
|
|
#define ECOMMON 1
|
|
|
|
|
|
2020-01-06 05:11:01 -05:00
|
|
|
#define PARAM_NUM 100
|
|
|
|
|
|
2019-09-30 10:53:41 -04:00
|
|
|
/* image error start */
|
|
|
|
|
#define EIMAGEBUSY 2
|
|
|
|
|
#define ENAMECONFLICT 3
|
|
|
|
|
#define EIMAGENOTFOUND 20
|
|
|
|
|
/* image error end. reserved from 2 to 20 */
|
|
|
|
|
#define EINVALIDARGS 125
|
|
|
|
|
#define ESERVERERROR 125
|
|
|
|
|
#define ERRORACCESS 126
|
|
|
|
|
#define ECMDNOTFOUND 127
|
|
|
|
|
|
|
|
|
|
#define MAX_PATH_DEPTH 1024
|
|
|
|
|
|
|
|
|
|
#define MAX_BUFFER_SIZE 4096
|
|
|
|
|
#define LCRD_NUMSTRLEN64 21
|
2019-12-25 15:50:34 +08:00
|
|
|
#define LCRD_NUMSTRLEN32 11
|
2019-09-30 10:53:41 -04:00
|
|
|
#define MAXLINE 4096
|
|
|
|
|
#define MAX_HOST_NAME_LEN 64
|
|
|
|
|
#define MAX_IMAGE_NAME_LEN 255
|
|
|
|
|
#define MAX_IMAGE_REF_LEN 384
|
|
|
|
|
#define MAX_CONTAINER_NAME_LEN 1024
|
|
|
|
|
#define MAX_RUNTIME_NAME_LEN 32
|
|
|
|
|
|
|
|
|
|
#define LOGIN_USERNAME_LEN 255
|
|
|
|
|
#define LOGIN_PASSWORD_LEN 255
|
|
|
|
|
|
|
|
|
|
#define MAX_SHA256_IDENTIFIER 64
|
|
|
|
|
#define SHA256_PREFIX "sha256:"
|
|
|
|
|
|
|
|
|
|
#define UINT_LEN 10
|
|
|
|
|
|
2019-12-25 15:50:34 +08:00
|
|
|
/* container id max length */
|
2019-09-30 10:53:41 -04:00
|
|
|
#define CONTAINER_ID_MAX_LEN 64
|
|
|
|
|
|
2020-01-06 05:11:01 -05:00
|
|
|
#define CONTAINER_EXEC_ID_MAX_LEN 64
|
|
|
|
|
|
2019-09-30 10:53:41 -04:00
|
|
|
#define LIST_SIZE_MAX 1000LL
|
|
|
|
|
#define LIST_DEVICE_SIZE_MAX 10000LL
|
|
|
|
|
#define LIST_ENV_SIZE_MAX 200000LL
|
|
|
|
|
|
|
|
|
|
#define UNIX_SOCKET_PREFIX "unix://"
|
|
|
|
|
|
|
|
|
|
#define SIZE_KB 1024LL
|
|
|
|
|
#define SIZE_MB (1024LL * SIZE_KB)
|
|
|
|
|
#define SIZE_GB (1024LL * SIZE_MB)
|
|
|
|
|
#define SIZE_TB (1024LL * SIZE_GB)
|
|
|
|
|
#define SIZE_PB (1024LL * SIZE_TB)
|
|
|
|
|
|
|
|
|
|
#define Time_Nano 1LL
|
|
|
|
|
#define Time_Micro (1000LL * Time_Nano)
|
|
|
|
|
#define Time_Milli (1000LL * Time_Micro)
|
|
|
|
|
#define Time_Second (1000LL * Time_Milli)
|
|
|
|
|
#define Time_Minute (60LL * Time_Second)
|
|
|
|
|
#define Time_Hour (60LL * Time_Minute)
|
|
|
|
|
|
2019-12-25 15:50:34 +08:00
|
|
|
/* Max regular file size for LCRC\LCRD to open as same as docker */
|
2019-09-30 10:53:41 -04:00
|
|
|
#define REGULAR_FILE_SIZE (10 * SIZE_MB)
|
|
|
|
|
|
|
|
|
|
#define rFC339Local "2006-01-02T15:04:05"
|
|
|
|
|
#define rFC339NanoLocal "2006-01-02T15:04:05.999999999"
|
|
|
|
|
#define dateLocal "2006-01-02"
|
|
|
|
|
#define defaultContainerTime "0001-01-01T00:00:00Z"
|
|
|
|
|
#define TIME_STR_SIZE 512
|
|
|
|
|
|
|
|
|
|
#define HOST_NAME_REGEXP \
|
|
|
|
|
"^(([[:alnum:]]|[[:alnum:]][[:alnum:]\\-]{0,63}[[:alnum:]])\\.){0,63}" \
|
|
|
|
|
"([[:alnum:]]|[[:alnum:]][[:alnum:]\\-]{0,63}[[:alnum:]])$"
|
|
|
|
|
#define __TagPattern "^:([A-Za-z_0-9][A-Za-z_0-9.-]{0,127})$"
|
|
|
|
|
#define __NamePattern \
|
|
|
|
|
"^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])" \
|
|
|
|
|
"((\\.([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9]))+)?(:[0-9]+)?/)?[a-z0-9]" \
|
|
|
|
|
"+((([._]|__|[-]*)[a-z0-9]+)+)?((/[a-z0-9]+((([._]|__|[-]*)[a-z0-9]+)+)?)+)?$"
|
|
|
|
|
|
|
|
|
|
// native umask value
|
|
|
|
|
#define ANNOTATION_UMAKE_KEY "native.umask"
|
|
|
|
|
#define UMASK_NORMAL "normal"
|
|
|
|
|
#define UMASK_SECURE "secure"
|
|
|
|
|
|
|
|
|
|
// proxy value
|
|
|
|
|
#define HTTP_PROXY "http_proxy"
|
|
|
|
|
#define HTTPS_PROXY "https_proxy"
|
|
|
|
|
#define NO_PROXY "no_proxy"
|
|
|
|
|
|
|
|
|
|
#ifndef SIGTRAP
|
|
|
|
|
#define SIGTRAP 5
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#ifndef SIGIOT
|
|
|
|
|
#define SIGIOT 6
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#ifndef SIGEMT
|
|
|
|
|
#define SIGEMT 7
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#ifndef SIGBUS
|
|
|
|
|
#define SIGBUS 7
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#ifndef SIGSTKFLT
|
|
|
|
|
#define SIGSTKFLT 16
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#ifndef SIGCLD
|
|
|
|
|
#define SIGCLD 17
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#ifndef SIGURG
|
|
|
|
|
#define SIGURG 23
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#ifndef SIGXCPU
|
|
|
|
|
#define SIGXCPU 24
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#ifndef SIGXFSZ
|
|
|
|
|
#define SIGXFSZ 25
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#ifndef SIGVTALRM
|
|
|
|
|
#define SIGVTALRM 26
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#ifndef SIGPROF
|
|
|
|
|
#define SIGPROF 27
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#ifndef SIGWINCH
|
|
|
|
|
#define SIGWINCH 28
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#ifndef SIGIO
|
|
|
|
|
#define SIGIO 29
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#ifndef SIGPOLL
|
|
|
|
|
#define SIGPOLL 29
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#ifndef SIGINFO
|
|
|
|
|
#define SIGINFO 29
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#ifndef SIGLOST
|
|
|
|
|
#define SIGLOST 37
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#ifndef SIGPWR
|
|
|
|
|
#define SIGPWR 30
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#ifndef SIGUNUSED
|
|
|
|
|
#define SIGUNUSED 31
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#ifndef SIGSYS
|
|
|
|
|
#define SIGSYS 31
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#ifndef SIGRTMIN1
|
|
|
|
|
#define SIGRTMIN1 34
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#ifndef SIGRTMAX
|
|
|
|
|
#define SIGRTMAX 64
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#define SIGNAL_MAP_DEFAULT \
|
|
|
|
|
{ \
|
|
|
|
|
{ SIGHUP, "HUP" }, \
|
|
|
|
|
{ SIGINT, "INT" }, \
|
|
|
|
|
{ SIGQUIT, "QUIT" }, \
|
|
|
|
|
{ SIGILL, "ILL" }, \
|
|
|
|
|
{ SIGABRT, "ABRT" }, \
|
|
|
|
|
{ SIGFPE, "FPE" }, \
|
|
|
|
|
{ SIGKILL, "KILL" }, \
|
|
|
|
|
{ SIGSEGV, "SEGV" }, \
|
|
|
|
|
{ SIGPIPE, "PIPE" }, \
|
|
|
|
|
{ SIGALRM, "ALRM" }, \
|
|
|
|
|
{ SIGTERM, "TERM" }, \
|
|
|
|
|
{ SIGUSR1, "USR1" }, \
|
|
|
|
|
{ SIGUSR2, "USR2" }, \
|
|
|
|
|
{ SIGCHLD, "CHLD" }, \
|
|
|
|
|
{ SIGCONT, "CONT" }, \
|
|
|
|
|
{ SIGSTOP, "STOP" }, \
|
|
|
|
|
{ SIGTSTP, "TSTP" }, \
|
|
|
|
|
{ SIGTTIN, "TTIN" }, \
|
|
|
|
|
{ SIGTTOU, "TTOU" }, \
|
|
|
|
|
{ SIGTRAP, "TRAP" }, \
|
|
|
|
|
{ SIGIOT, "IOT" }, \
|
|
|
|
|
{ SIGEMT, "EMT" }, \
|
|
|
|
|
{ SIGBUS, "BUS" }, \
|
|
|
|
|
{ SIGSTKFLT, "STKFLT" }, \
|
|
|
|
|
{ SIGCLD, "CLD" }, \
|
|
|
|
|
{ SIGURG, "URG" }, \
|
|
|
|
|
{ SIGXCPU, "XCPU" }, \
|
|
|
|
|
{ SIGXFSZ, "XFSZ" }, \
|
|
|
|
|
{ SIGVTALRM, "VTALRM" }, \
|
|
|
|
|
{ SIGPROF, "PROF" }, \
|
|
|
|
|
{ SIGWINCH, "WINCH" }, \
|
|
|
|
|
{ SIGIO, "IO" }, \
|
|
|
|
|
{ SIGPOLL, "POLL" }, \
|
|
|
|
|
{ SIGINFO, "INFO" }, \
|
|
|
|
|
{ SIGLOST, "LOST" }, \
|
|
|
|
|
{ SIGPWR, "PWR" }, \
|
|
|
|
|
{ SIGUNUSED, "UNUSED" }, \
|
|
|
|
|
{ SIGSYS, "SYS" }, \
|
|
|
|
|
{ SIGRTMIN, "RTMIN" }, \
|
|
|
|
|
{ SIGRTMIN + 1, "RTMIN+1" }, \
|
|
|
|
|
{ SIGRTMIN + 2, "RTMIN+2" }, \
|
|
|
|
|
{ SIGRTMIN + 3, "RTMIN+3" }, \
|
|
|
|
|
{ SIGRTMIN + 4, "RTMIN+4" }, \
|
|
|
|
|
{ SIGRTMIN + 5, "RTMIN+5" }, \
|
|
|
|
|
{ SIGRTMIN + 6, "RTMIN+6" }, \
|
|
|
|
|
{ SIGRTMIN + 7, "RTMIN+7" }, \
|
|
|
|
|
{ SIGRTMIN + 8, "RTMIN+8" }, \
|
|
|
|
|
{ SIGRTMIN + 9, "RTMIN+9" }, \
|
|
|
|
|
{ SIGRTMIN + 10, "RTMIN+10" }, \
|
|
|
|
|
{ SIGRTMIN + 11, "RTMIN+11" }, \
|
|
|
|
|
{ SIGRTMIN + 12, "RTMIN+12" }, \
|
|
|
|
|
{ SIGRTMIN + 13, "RTMIN+13" }, \
|
|
|
|
|
{ SIGRTMIN + 14, "RTMIN+14" }, \
|
|
|
|
|
{ SIGRTMIN + 15, "RTMIN+15" }, \
|
|
|
|
|
{ SIGRTMAX - 14, "RTMAX-14" }, \
|
|
|
|
|
{ SIGRTMAX - 13, "RTMAX-13" }, \
|
|
|
|
|
{ SIGRTMAX - 12, "RTMAX-12" }, \
|
|
|
|
|
{ SIGRTMAX - 11, "RTMAX-11" }, \
|
|
|
|
|
{ SIGRTMAX - 10, "RTMAX-10" }, \
|
|
|
|
|
{ SIGRTMAX - 9, "RTMAX-9" }, \
|
|
|
|
|
{ SIGRTMAX - 8, "RTMAX-8" }, \
|
|
|
|
|
{ SIGRTMAX - 7, "RTMAX-7" }, \
|
|
|
|
|
{ SIGRTMAX - 6, "RTMAX-6" }, \
|
|
|
|
|
{ SIGRTMAX - 5, "RTMAX-5" }, \
|
|
|
|
|
{ SIGRTMAX - 4, "RTMAX-4" }, \
|
|
|
|
|
{ SIGRTMAX - 3, "RTMAX-3" }, \
|
|
|
|
|
{ SIGRTMAX - 2, "RTMAX-2" }, \
|
|
|
|
|
{ SIGRTMAX - 1, "RTMAX-1" }, \
|
|
|
|
|
{ SIGRTMAX, "RTMAX" } \
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Basic data structure which holds all information we can get about a process.
|
|
|
|
|
* (unless otherwise specified, fields are read from /proc/#/stat)
|
|
|
|
|
*
|
|
|
|
|
* Most of it comes from task_struct in linux/sched.h
|
|
|
|
|
*/
|
|
|
|
|
typedef struct _proc_t {
|
|
|
|
|
// 1st 16 bytes
|
|
|
|
|
int pid; /* process id */
|
|
|
|
|
int ppid; /* pid of parent process */
|
|
|
|
|
|
|
|
|
|
char state; /* single-char code for process state (S=sleeping) */
|
|
|
|
|
|
|
|
|
|
unsigned long long utime, /* user-mode CPU time accumulated by process */
|
|
|
|
|
stime, /* kernel-mode CPU time accumulated by process */
|
|
|
|
|
// and so on...
|
|
|
|
|
cutime, /* cumulative utime of process and reaped children */
|
|
|
|
|
cstime, /* cumulative stime of process and reaped children */
|
|
|
|
|
start_time; /* start time of process -- seconds since 1-1-70 */
|
|
|
|
|
|
|
|
|
|
long priority, /* kernel scheduling priority */
|
|
|
|
|
timeout, /* ? */
|
|
|
|
|
nice, /* standard unix nice level of process */
|
|
|
|
|
rss, /* resident set size from /proc/#/stat (pages) */
|
|
|
|
|
it_real_value; /* ? */
|
|
|
|
|
unsigned long rtprio, /* real-time priority */
|
|
|
|
|
sched, /* scheduling class */
|
|
|
|
|
vsize, /* number of pages of virtual memory ... */
|
|
|
|
|
rss_rlim, /* resident set size limit? */
|
|
|
|
|
flags, /* kernel flags for the process */
|
|
|
|
|
min_flt, /* number of minor page faults since process start */
|
|
|
|
|
maj_flt, /* number of major page faults since process start */
|
|
|
|
|
cmin_flt, /* cumulative min_flt of process and child processes */
|
|
|
|
|
cmaj_flt, /* cumulative maj_flt of process and child processes */
|
|
|
|
|
nswap, /* ? */
|
|
|
|
|
cnswap, /* cumulative nswap ? */
|
|
|
|
|
start_code, /* address of beginning of code segment */
|
|
|
|
|
end_code, /* address of end of code segment */
|
|
|
|
|
start_stack, /* address of the bottom of stack for the process */
|
|
|
|
|
kstk_esp, /* kernel stack pointer */
|
|
|
|
|
kstk_eip, /* kernel instruction pointer */
|
|
|
|
|
wchan; /* address of kernel wait channel proc is sleeping in */
|
|
|
|
|
|
|
|
|
|
char cmd[16]; /* basename of executable file in call to exec(2) */
|
|
|
|
|
int pgrp, /* process group id */
|
|
|
|
|
session, /* session id */
|
|
|
|
|
tty, /* full device number of controlling terminal */
|
|
|
|
|
tpgid, /* terminal process group id */
|
|
|
|
|
exit_signal, /* might not be SIGCHLD */
|
|
|
|
|
processor; /* current (or most recent?) CPU */
|
|
|
|
|
} proc_t;
|
|
|
|
|
|
|
|
|
|
struct signame {
|
|
|
|
|
int num;
|
|
|
|
|
const char *name;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
#define UTIL_FREE_AND_SET_NULL(p) \
|
|
|
|
|
do { \
|
|
|
|
|
if ((p) != NULL) { \
|
|
|
|
|
free((void *)(p)); \
|
|
|
|
|
(p) = NULL; \
|
|
|
|
|
} \
|
|
|
|
|
} while (0)
|
|
|
|
|
|
|
|
|
|
int mem_realloc(void **newptr, size_t newsize, void *oldptr, size_t oldsize);
|
|
|
|
|
|
|
|
|
|
int util_check_inherited(bool closeall, int fd_to_ignore);
|
|
|
|
|
|
|
|
|
|
int util_sig_parse(const char *sig_name);
|
|
|
|
|
|
2019-12-25 15:50:34 +08:00
|
|
|
void *util_smart_calloc_s(size_t unit_size, size_t count);
|
|
|
|
|
|
2019-09-30 10:53:41 -04:00
|
|
|
void *util_common_calloc_s(size_t size);
|
|
|
|
|
|
|
|
|
|
char *util_strdup_s(const char *src);
|
|
|
|
|
|
|
|
|
|
int wait_for_pid(pid_t pid);
|
|
|
|
|
|
|
|
|
|
void util_contain_errmsg(const char *errmsg, int *exit_code);
|
|
|
|
|
|
|
|
|
|
char *util_short_digest(const char *digest);
|
|
|
|
|
|
|
|
|
|
char *util_full_digest(const char *digest);
|
|
|
|
|
|
|
|
|
|
proc_t *util_stat2proc(const char *s, size_t len);
|
|
|
|
|
|
|
|
|
|
bool util_process_alive(pid_t pid, unsigned long long start_time);
|
|
|
|
|
|
|
|
|
|
int wait_for_pid_status(pid_t pid);
|
|
|
|
|
|
|
|
|
|
typedef void (*exec_func_t)(void *args);
|
|
|
|
|
bool util_exec_cmd(exec_func_t cb_func, void *args, const char *stdin_msg, char **stdout_msg, char **stderr_msg);
|
|
|
|
|
|
|
|
|
|
typedef void (*exec_top_func_t)(char **args, const char *pid_args, size_t args_len);
|
|
|
|
|
bool util_exec_top_cmd(exec_top_func_t cb_func, char **args, const char *pid_args, size_t args_len, char **stdout_msg,
|
|
|
|
|
char **stderr_msg);
|
|
|
|
|
|
|
|
|
|
char **get_backtrace(void);
|
|
|
|
|
|
|
|
|
|
int util_parse_time_str_to_nanoseconds(const char *value, int64_t *nanoseconds);
|
|
|
|
|
|
|
|
|
|
proc_t *util_get_process_proc_info(pid_t pid);
|
|
|
|
|
|
|
|
|
|
int util_parse_user_remap(const char *user_remap, unsigned int *host_uid, unsigned int *host_gid, unsigned int *size);
|
|
|
|
|
|
|
|
|
|
int util_env_insert(char ***penv, size_t *penv_len, const char *key, size_t key_len, const char *newkv);
|
|
|
|
|
int util_env_set_val(char ***penv, const size_t *penv_len, const char *key, size_t key_len, const char *newkv);
|
|
|
|
|
char *util_env_get_val(char **env, size_t env_len, const char *key, size_t key_len);
|
|
|
|
|
|
|
|
|
|
char *util_str_token(char **input, const char *delimiter);
|
|
|
|
|
bool check_sysctl_valid(const char *sysctl_key);
|
|
|
|
|
bool pid_max_kernel_namespaced();
|
|
|
|
|
void free_sensitive_string(char *str);
|
|
|
|
|
void memset_sensitive_string(char *str);
|
|
|
|
|
bool detect_mount(const char *path);
|
|
|
|
|
|
2019-11-06 19:33:20 +08:00
|
|
|
int util_input_readall(char *buf, size_t maxlen);
|
2019-09-30 10:53:41 -04:00
|
|
|
int util_input_echo(char *buf, size_t maxlen);
|
|
|
|
|
int util_input_noecho(char *buf, size_t maxlen);
|
|
|
|
|
|
|
|
|
|
bool util_check_signal_valid(int sig);
|
|
|
|
|
|
|
|
|
|
void usleep_nointerupt(unsigned long usec);
|
|
|
|
|
|
2020-01-06 05:11:01 -05:00
|
|
|
int util_generate_random_str(char *id, size_t len);
|
|
|
|
|
|
|
|
|
|
void add_array_elem(char **array, size_t total, size_t *pos, const char *elem);
|
|
|
|
|
|
|
|
|
|
void add_array_kv(char **array, size_t total, size_t *pos, const char *k, const char *v);
|
|
|
|
|
|
2019-09-30 10:53:41 -04:00
|
|
|
#ifdef __cplusplus
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#endif /* __UTILS_H */
|
|
|
|
|
|