From 1dea359d15e06576b99be6c09e85e69a8d29d301 Mon Sep 17 00:00:00 2001 From: obarun <eric@obarun.org> Date: Sat, 15 Oct 2022 23:41:47 +1100 Subject: [PATCH] [WIP] adapt headers files --- src/include/66/66.h | 5 +- src/include/66/constants.h | 43 ++-- src/include/66/enum.h | 34 +-- src/include/66/environ.h | 7 +- src/include/66/graph.h | 18 +- src/include/66/info.h | 2 +- src/include/66/parser.h | 5 +- src/include/66/service.h | 435 ++++++++++++++++++++++++------------- src/include/66/ssexec.h | 86 +++++--- src/include/66/svc.h | 67 +----- src/include/66/utils.h | 6 +- src/include/66/write.h | 3 +- 12 files changed, 408 insertions(+), 303 deletions(-) diff --git a/src/include/66/66.h b/src/include/66/66.h index 3c91c14c..cc013428 100644 --- a/src/include/66/66.h +++ b/src/include/66/66.h @@ -15,17 +15,16 @@ #ifndef SS_CONFIG_H #define SS_CONFIG_H -#include <66/backup.h> #include <66/config.h> #include <66/constants.h> -#include <66/db.h> #include <66/enum.h> #include <66/environ.h> +#include <66/graph.h> #include <66/hpr.h> #include <66/info.h> #include <66/parser.h> -#include <66/rc.h> #include <66/resolve.h> +#include <66/sanitize.h> #include <66/service.h> #include <66/ssexec.h> #include <66/state.h> diff --git a/src/include/66/constants.h b/src/include/66/constants.h index a754df73..e6bbc2f9 100644 --- a/src/include/66/constants.h +++ b/src/include/66/constants.h @@ -29,8 +29,6 @@ #define SS_MODULE_LEN (sizeof SS_MODULE - 1) #define SS_SCANDIR "scandir" #define SS_SCANDIR_LEN (sizeof SS_SCANDIR - 1) -#define SS_TREE "tree" -#define SS_TREE_LEN (sizeof SS_TREE - 1) #define SS_NOTIFICATION "notification-fd" #define SS_NOTIFICATION_LEN (sizeof SS_NOTIFICATION - 1) #define SS_MAXDEATHTALLY "max-death-tally" @@ -41,18 +39,11 @@ #define SS_RULES_LEN (sizeof SS_RULES - 1) #define SS_SVDIRS "/servicedirs" #define SS_SVDIRS_LEN (sizeof SS_SVDIRS - 1) -#define SS_BACKUP "/backup" -#define SS_BACKUP_LEN (sizeof SS_BACKUP - 1) -#define SS_LIVETREE_INIT "init" -#define SS_LIVETREE_INIT_LEN (sizeof SS_LIVETREE_INIT - 1) /**service dir*/ #define SS_SVC "/svc" #define SS_SVC_LEN (sizeof SS_SVC - 1) -#define SS_DB "/db" -#define SS_DB_LEN (sizeof SS_DB - 1) -#define SS_SRC "/source" -#define SS_SRC_LEN (sizeof SS_SRC - 1) + #define SS_MASTER "/Master" #define SS_MASTER_LEN (sizeof SS_MASTER - 1) #define SS_CONTENTS "contents" @@ -61,24 +52,13 @@ /** logger */ #define SS_LOG "log" #define SS_LOG_LEN (sizeof SS_LOG - 1) -#define SS_LOG_SUFFIX "-" SS_LOG + +#define SS_LOG_SUFFIX "-log" #define SS_LOG_SUFFIX_LEN (sizeof SS_LOG_SUFFIX - 1) + #define SS_SVSCAN_LOG "/.s6-svscan" #define SS_SVSCAN_LOG_LEN (sizeof SS_SVSCAN_LOG - 1) -/** pipe */ -#define SS_PIPE_NAME "bundle-" -#define SS_PIPE_NAME_LEN (sizeof SS_PIPE_NAME - 1) - -/** backup */ -#define SS_SYM_DB "bdb" -#define SS_SYM_DB_LEN (sizeof SS_SYM_DB - 1) -#define SS_SYM_SVC "bsvc" -#define SS_SYM_SVC_LEN (sizeof SS_SYM_SVC - 1) - -#define SS_SWSRC 0 //switch to source -#define SS_SWBACK 1 //switch to backup - /** environment and data */ #define SS_ENVDIR "/conf" #define SS_ENVDIR_LEN (sizeof SS_ENVDIR - 1) @@ -89,6 +69,18 @@ #define SS_STATE "/state" #define SS_STATE_LEN (sizeof SS_STATE - 1) +#define SS_STATUS "status" +#define SS_STATUS_LEN (sizeof SS_STATUS - 1) + +#define SS_RESOLVE "/.resolve" +#define SS_RESOLVE_LEN (sizeof SS_RESOLVE - 1) + +#define SS_FDHOLDER "fdholder" +#define SS_FDHOLDER_LEN (sizeof SS_FDHOLDER - 1) +#define SS_FDHOLDER_PIPENAME "pipe:66-" +#define SS_FDHOLDER_PIPENAME_LEN (sizeof SS_FDHOLDER_PIPENAME - 1) +#define SS_ONESHOTD "oneshotd" +#define SS_ONESHOTD_LEN (sizeof SS_ONESHOTD - 1) #define SS_VAR_UNEXPORT '!' @@ -99,6 +91,7 @@ #define SS_EVENTDIR "/event" #define SS_EVENTDIR_LEN (sizeof SS_EVENTDIR - 1) + /** boot */ #define SS_BOOT_CONF "init.conf" #define SS_BOOT_CONF_LEN (sizeof SS_BOOT_CONF - 1) @@ -121,6 +114,7 @@ #define SS_BOOT_LOGFIFO_LEN (sizeof SS_BOOT_LOGFIFO - 1) #define SS_BOOT_SHUTDOWND "66-shutdownd" #define SS_BOOT_SHUTDOWND_LEN (sizeof SS_BOOT_SHUTDOWND - 1) + /** container */ #define SS_BOOT_CONTAINER 0 #define SS_BOOT_RCINIT_CONTAINER "rc.init.container" @@ -138,4 +132,5 @@ #define SS_INSTANCE_NAME 1 #define SS_MAX_PATH_LEN (SS_MAX_PATH + SS_SYSTEM_LEN + SS_SVDIRS_LEN + SS_MAX_TREENAME + SS_MAX_SERVICE_NAME + 63 + 1) + #endif diff --git a/src/include/66/enum.h b/src/include/66/enum.h index e3fce9ae..ae36bba2 100644 --- a/src/include/66/enum.h +++ b/src/include/66/enum.h @@ -35,7 +35,6 @@ enum enum_main_e ENUM_BUILD , ENUM_MANDATORY , ENUM_TIME , - ENUM_LOGOPTS , ENUM_SEED , ENUM_ENDOFKEY } ; @@ -60,10 +59,9 @@ enum enum_key_section_main_e KEY_MAIN_TYPE = 0 , KEY_MAIN_VERSION , KEY_MAIN_DESCRIPTION , - KEY_MAIN_CONTENTS , KEY_MAIN_DEPENDS , + KEY_MAIN_REQUIREDBY , KEY_MAIN_OPTSDEPS , - KEY_MAIN_EXTDEPS , KEY_MAIN_OPTIONS , KEY_MAIN_NOTIFY , KEY_MAIN_USER , @@ -106,7 +104,6 @@ enum enum_key_section_logger_e KEY_LOGGER_TIMESTP , KEY_LOGGER_T_FINISH , KEY_LOGGER_T_KILL , - KEY_LOGGER_DEPENDS , KEY_LOGGER_ENDOFKEY } ; @@ -129,6 +126,7 @@ enum enum_key_section_regex_e KEY_REGEX_FILES , KEY_REGEX_INFILES , KEY_REGEX_ADDSERVICES , + KEY_REGEX_APPLYTO , KEY_REGEX_ENDOFKEY } ; @@ -139,7 +137,6 @@ enum enum_type_e { TYPE_CLASSIC = 0 , TYPE_BUNDLE , - TYPE_LONGRUN , TYPE_ONESHOT , TYPE_MODULE , TYPE_ENDOFKEY @@ -167,8 +164,6 @@ enum enum_opts_e { OPTS_LOGGER = 0 , OPTS_ENVIR , - OPTS_HIERCOPY , - OPTS_PIPELINE , OPTS_ENDOFKEY } ; @@ -178,6 +173,7 @@ typedef enum enum_flags_e enum_flags_t, *enum_flags_t_ref ; enum enum_flags_e { FLAGS_DOWN = 0 , + FLAGS_EARLIER, FLAGS_ENDOFKEY } ; @@ -216,17 +212,6 @@ enum enum_time_e extern char const *enum_str_time[] ; -typedef enum enum_logopts_e enum_logotps_t, *enum_logopts_t_ref ; -enum enum_logopts_e -{ - LOGOPTS_PRODUCER = 0 , - LOGOPTS_CONSUMER , - LOGOPTS_PIPE , - LOGOPTS_ENDOFKEY -} ; - -extern char const *enum_str_logopts[] ; - typedef enum enum_seed_e enum_seed_t, *enum_seed_t_ref ; enum enum_seed_e { @@ -294,10 +279,9 @@ static key_description_t const main_section_list[] = { .name = &enum_str_key_section_main[KEY_MAIN_TYPE], .id = KEY_MAIN_TYPE, .expected = EXPECT_LINE }, { .name = &enum_str_key_section_main[KEY_MAIN_VERSION], .id = KEY_MAIN_VERSION, .expected = EXPECT_LINE }, { .name = &enum_str_key_section_main[KEY_MAIN_DESCRIPTION], .id = KEY_MAIN_DESCRIPTION, .expected = EXPECT_QUOTE }, - { .name = &enum_str_key_section_main[KEY_MAIN_CONTENTS], .id = KEY_MAIN_CONTENTS, .expected = EXPECT_BRACKET }, { .name = &enum_str_key_section_main[KEY_MAIN_DEPENDS], .id = KEY_MAIN_DEPENDS, .expected = EXPECT_BRACKET }, + { .name = &enum_str_key_section_main[KEY_MAIN_REQUIREDBY], .id = KEY_MAIN_REQUIREDBY, .expected = EXPECT_BRACKET }, { .name = &enum_str_key_section_main[KEY_MAIN_OPTSDEPS], .id = KEY_MAIN_OPTSDEPS, .expected = EXPECT_BRACKET }, - { .name = &enum_str_key_section_main[KEY_MAIN_EXTDEPS], .id = KEY_MAIN_EXTDEPS, .expected = EXPECT_BRACKET }, { .name = &enum_str_key_section_main[KEY_MAIN_OPTIONS], .id = KEY_MAIN_OPTIONS, .expected = EXPECT_BRACKET }, { .name = &enum_str_key_section_main[KEY_MAIN_NOTIFY], .id = KEY_MAIN_NOTIFY, .expected = EXPECT_UINT }, { .name = &enum_str_key_section_main[KEY_MAIN_USER], .id = KEY_MAIN_USER, .expected = EXPECT_BRACKET }, @@ -324,17 +308,16 @@ static key_description_t const startstop_section_list[] = static key_description_t const logger_section_list[] = { - { .name = &enum_str_key_section_logger[KEY_LOGGER_DESTINATION], .id = KEY_LOGGER_DESTINATION, .expected = EXPECT_SLASH }, { .name = &enum_str_key_section_logger[KEY_LOGGER_BUILD], .id = KEY_LOGGER_BUILD, .expected = EXPECT_LINE }, { .name = &enum_str_key_section_logger[KEY_LOGGER_RUNAS], .id = KEY_LOGGER_RUNAS, .expected = EXPECT_LINE }, - { .name = &enum_str_key_section_logger[KEY_LOGGER_DEPENDS], .id = KEY_LOGGER_DEPENDS, .expected = EXPECT_BRACKET }, { .name = &enum_str_key_section_logger[KEY_LOGGER_SHEBANG], .id = KEY_LOGGER_SHEBANG, .expected = EXPECT_QUOTE }, - { .name = &enum_str_key_section_logger[KEY_LOGGER_T_FINISH], .id = KEY_LOGGER_T_FINISH, .expected = EXPECT_UINT }, - { .name = &enum_str_key_section_logger[KEY_LOGGER_T_KILL], .id = KEY_LOGGER_T_KILL, .expected = EXPECT_UINT }, + { .name = &enum_str_key_section_logger[KEY_LOGGER_EXEC], .id = KEY_LOGGER_EXEC, .expected = EXPECT_BRACKET }, + { .name = &enum_str_key_section_logger[KEY_LOGGER_DESTINATION], .id = KEY_LOGGER_DESTINATION, .expected = EXPECT_SLASH }, { .name = &enum_str_key_section_logger[KEY_LOGGER_BACKUP], .id = KEY_LOGGER_BACKUP, .expected = EXPECT_UINT }, { .name = &enum_str_key_section_logger[KEY_LOGGER_MAXSIZE], .id = KEY_LOGGER_MAXSIZE, .expected = EXPECT_UINT }, { .name = &enum_str_key_section_logger[KEY_LOGGER_TIMESTP], .id = KEY_LOGGER_TIMESTP, .expected = EXPECT_LINE }, - { .name = &enum_str_key_section_logger[KEY_LOGGER_EXEC], .id = KEY_LOGGER_EXEC, .expected = EXPECT_BRACKET }, + { .name = &enum_str_key_section_logger[KEY_LOGGER_T_FINISH], .id = KEY_LOGGER_T_FINISH, .expected = EXPECT_UINT }, + { .name = &enum_str_key_section_logger[KEY_LOGGER_T_KILL], .id = KEY_LOGGER_T_KILL, .expected = EXPECT_UINT }, { .name = &enum_str_key_section_logger[KEY_LOGGER_ENDOFKEY] } } ; @@ -374,5 +357,6 @@ static key_all_t const total_list[] = { .list = 0 } } ; +extern char const *get_key_by_key_all(int const idsec, int const key) ; #endif diff --git a/src/include/66/environ.h b/src/include/66/environ.h index 2b93ec63..b531c2e5 100644 --- a/src/include/66/environ.h +++ b/src/include/66/environ.h @@ -21,12 +21,13 @@ #include <skalibs/stralloc.h> #include <66/parser.h> +#include <66/service.h> extern int env_resolve_conf(stralloc *env,char const *svname,uid_t owner) ; -extern int env_make_symlink(sv_alltype *sv) ; -extern int env_compute(stralloc *result,sv_alltype *sv, uint8_t conf) ; +extern int env_make_symlink(resolve_service_t *res) ; +extern int env_compute(stralloc *result, resolve_service_t *res) ; extern int env_clean_with_comment(stralloc *sa) ; -extern int env_prepare_for_write(stralloc *name, stralloc *dst, stralloc *contents, sv_alltype *sv,uint8_t conf) ; +extern int env_prepare_for_write(stralloc *dst, stralloc *contents, resolve_service_t *res) ; /** version function */ extern int env_find_current_version(stralloc *sa,char const *svconf) ; diff --git a/src/include/66/graph.h b/src/include/66/graph.h index f644c366..fc36ffef 100644 --- a/src/include/66/graph.h +++ b/src/include/66/graph.h @@ -19,11 +19,19 @@ #include <oblibs/graph.h> -extern int graph_build_g(graph_t *g, char const *base, char const *treename, uint8_t data_type, uint8_t general) ; -extern int graph_build_tree(graph_t *g,char const *base) ; -extern int graph_build_service(graph_t *g, char const *base, char const *treename, uint8_t general) ; -extern int graph_build_service_bytree(graph_t *g, char const *tree, uint8_t what) ; +#include <66/service.h> +#include <66/ssexec.h> + + + +//extern void graph_build_g(graph_t *graph, resolve_service_t *ares, unsigned int *areslen, ssexec_t *info) ; +extern void graph_build_tree(graph_t *g,char const *base) ; +extern void graph_build_service(graph_t *g, resolve_service_t *ares, unsigned int *areslen, ssexec_t *info, uint32_t flag) ; +extern int graph_compute_dependencies(graph_t *g, char const *vertex, char const *edge, uint8_t requiredby) ; + + +extern int graph_build_service_bytree(graph_t *g, char const *tree, uint8_t what, uint8_t is_supervised) ; extern int graph_build_service_bytree_from_src(graph_t *g, char const *src, uint8_t what) ; -extern int graph_add_deps(graph_t *g, char const *vertex, char const *edge, uint8_t requiredby) ; + #endif diff --git a/src/include/66/info.h b/src/include/66/info.h index af9afdcf..e00361da 100644 --- a/src/include/66/info.h +++ b/src/include/66/info.h @@ -26,7 +26,7 @@ #define SS_INFO_H #define INFO_FIELD_MAXLEN 30 -#define INFO_NKEY 100 +#define INFO_NKEY 150 typedef int info_graph_func(char const *name, char const *obj) ; typedef info_graph_func *info_graph_func_t_ref ; diff --git a/src/include/66/parser.h b/src/include/66/parser.h index 7db31619..b2da8b7c 100644 --- a/src/include/66/parser.h +++ b/src/include/66/parser.h @@ -46,7 +46,7 @@ extern void ssexec_enable_cleanup(void) ; /** main */ extern void start_parser(char const *sv, ssexec_t *info, uint8_t disable_module, char const *directory_forced) ; -extern void parser(char const *sv, char const *dst, ssexec_t *info, uint8_t force, uint8_t conf) ; +extern void parse_service(char const *sv, ssexec_t *info, uint8_t force, uint8_t conf) ; extern int parse_frontend(char const *sv, resolve_service_t *ares, unsigned int *areslen, ssexec_t *info, uint8_t force, uint8_t conf, unsigned int *residx, char const *forced_directory) ; extern int parse_dependencies(resolve_service_t *res, resolve_service_t *ares, unsigned int *areslen, ssexec_t *info, uint8_t force,uint8_t conf, char const *forced_directory) ; @@ -77,4 +77,7 @@ extern void parse_error(int ierr, int idsec, int idkey) ; /** module */ extern void parse_module(resolve_service_t *res, resolve_service_t *ares, unsigned int *areslen, ssexec_t *info, uint8_t force) ; +/** resolve */ +extern void parse_compute_resolve(resolve_service_t *res, ssexec_t *info) ; + #endif diff --git a/src/include/66/service.h b/src/include/66/service.h index 116cb80a..e0bd8787 100644 --- a/src/include/66/service.h +++ b/src/include/66/service.h @@ -17,52 +17,146 @@ #include <stdint.h> +#include <oblibs/graph.h> + #include <skalibs/stralloc.h> -#include <skalibs/genalloc.h> #include <skalibs/cdb.h> #include <skalibs/cdbmake.h> -#include <66/parser.h> #include <66/ssexec.h> #include <66/resolve.h> +#include <66/state.h> -/** - * - * - * obsolete functions - * - * - * - * */ +typedef struct resolve_service_addon_path_s resolve_service_addon_path_t, *resolve_service_addon_path_t_ref ; +struct resolve_service_addon_path_s +{ + uint32_t home ; // string, /var/lib/66 or /home/user/.66 + uint32_t frontend ; // string, /home/<user>/.66/service or /etc/66/service or /usr/lib/66/service + uint32_t tree ; // string, /var/lib/66/system/treename + uint32_t status ; //string, /var/lib/66/system/treename/servicedirs/svc/service_name/state/status +} ; + +#define RESOLVE_SERVICE_ADDON_PATH_ZERO { 0,0,0,0 } -/** Graph struct */ -typedef struct ss_resolve_graph_ndeps_s ss_resolve_graph_ndeps_t ; -struct ss_resolve_graph_ndeps_s +typedef struct resolve_service_addon_dependencies_s resolve_service_addon_dependencies_t, *resolve_service_addon_dependencies_t_ref ; +struct resolve_service_addon_dependencies_s { - uint32_t idx ;//uint32_t - genalloc ndeps ;//uint32_t + uint32_t depends ; // string + uint32_t requiredby ; // string, + uint32_t optsdeps ; // string, optional dependencies + + uint32_t ndepends ; // integer + uint32_t nrequiredby ; // integer + uint32_t noptsdeps ; // integer } ; -#define RESOLVE_GRAPH_NDEPS_ZERO { 0 , GENALLOC_ZERO } -typedef struct ss_resolve_graph_s ss_resolve_graph_t, *ss_resolve_graph_t_ref ; -struct ss_resolve_graph_s +#define RESOLVE_SERVICE_ADDON_DEPENDENCIES_ZERO { 0,0,0,0,0,0 } + +typedef struct resolve_service_addon_timeout_s resolve_service_addon_timeout_t, *resolve_service_addon_timeout_t_ref ; +struct resolve_service_addon_timeout_s { - genalloc name ;//resolve_service_t - genalloc cp ; //ss_resolve_graph_ndeps_t - genalloc sorted ;//resolve_service_t + uint32_t kill ; // integer + uint32_t finish ; // integer + uint32_t up ; // integer + uint32_t down ; // integer } ; -#define RESOLVE_GRAPH_ZERO { GENALLOC_ZERO , GENALLOC_ZERO , GENALLOC_ZERO } -typedef enum visit_e visit ; -enum visit_e +#define RESOLVE_SERVICE_ADDON_TIMEOUT_ZERO { 0,0,0,0 } + +typedef struct resolve_service_addon_scripts_s resolve_service_addon_scripts_t, *resolve_service_addon_scritps_t_ref ; +struct resolve_service_addon_scripts_s { - SS_WHITE = 0, - SS_GRAY, - SS_BLACK + uint32_t run ; // string, launch before @execute + uint32_t run_user ; // string, @execute field + uint32_t build ; // string, custom or execline + uint32_t shebang ; // string + uint32_t runas ; // string +} ; + +#define RESOLVE_SERVICE_ADDON_SCRIPTS_ZERO { 0,0,0,0,0 } + +typedef struct resolve_service_addon_execute_s resolve_service_addon_execute_t, *resolve_service_addon_execute_t_ref ; +struct resolve_service_addon_execute_s +{ + resolve_service_addon_scripts_t run ; + resolve_service_addon_scripts_t finish ; + resolve_service_addon_timeout_t timeout ; + uint32_t down ; // integer + uint32_t downsignal ; // integer +} ; + +#define RESOLVE_SERVICE_ADDON_EXECUTE_ZERO { \ + RESOLVE_SERVICE_ADDON_SCRIPTS_ZERO, \ + RESOLVE_SERVICE_ADDON_SCRIPTS_ZERO, \ + RESOLVE_SERVICE_ADDON_TIMEOUT_ZERO, \ + 0, \ + 0 \ +} + +typedef struct resolve_service_addon_live_s resolve_service_addon_live_t, *resolve_service_addon_live_t_ref ; +struct resolve_service_addon_live_s +{ + uint32_t livedir ; // string, /run/66 + uint32_t scandir ; // string, /run/66/state/uid/service_name/scandir/service_name -> /var/lib/66/system/treename/svc/service -> /run/66/scandir/uid + uint32_t statedir ; // string, /run/66/state/uid/service_name/state -> /var/lib/66/system/treename/svc/service/state + uint32_t eventdir ; // string, /run/66/state/uid/service_name/event -> /var/lib/66/system/treename/svc/service/event + uint32_t notifdir ; // string, /run/66/state/uid/service_name/notif -> /var/lib/66/system/treename/svc/service/notif + uint32_t supervisedir ; // string, /run/66/state/uid/service_name/supervise -> /var/lib/66/system/treename/svc/service/supervise + uint32_t fdholderdir ; // string, /run/66/state/uid/service_name/scandir/fdholder + uint32_t oneshotddir ; // string, /run/66/state/uid/service_name/scandir/oneshotd +} ; + +#define RESOLVE_SERVICE_ADDON_LIVE_ZERO { 0,0,0,0,0,0,0,0 } + +typedef struct resolve_service_addon_logger_s resolve_service_addon_logger_t, *resolve_service_addon_logger_t_ref ; +struct resolve_service_addon_logger_s +{ + // logger + uint32_t name ; // string, typically "name-log" or 0 if it's the resolve of the logger + uint32_t destination ; // string + uint32_t backup ; // integer + uint32_t maxsize ; // integer + /** integer, default 3 which mean not touched, in this case the value configured by + * at compilation take precedence */ + uint32_t timestamp ; + uint32_t want ; // 1 want, 0 do not want. Want by default + resolve_service_addon_execute_t execute ; + resolve_service_addon_timeout_t timeout ; + +} ; + +#define RESOLVE_SERVICE_ADDON_LOGGER_ZERO { \ + 0,0,3,1000000,3,1, \ + RESOLVE_SERVICE_ADDON_EXECUTE_ZERO, \ + RESOLVE_SERVICE_ADDON_TIMEOUT_ZERO \ +} + +typedef struct resolve_service_addon_environ_s resolve_service_addon_environ_t, *resolve_service_addon_environ_t_ref ; +struct resolve_service_addon_environ_s +{ + uint32_t env ; // string + uint32_t envdir ; // string, /etc/66/conf or /home/user/.66/conf + uint32_t env_overwrite ; // integer, overwrite the environment + +} ; + +#define RESOLVE_SERVICE_ADDON_ENVIRON_ZERO { 0,0,0 } + +typedef struct resolve_service_addon_regex_s resolve_service_addon_regex_t, *resolve_service_addon_regex_t_ref ; +struct resolve_service_addon_regex_s +{ + uint32_t configure ; // string + uint32_t directories ; // string + uint32_t files ; // string + uint32_t infiles ; // string + + uint32_t ndirectories ; // integer + uint32_t nfiles ; // integer + uint32_t ninfiles ; // integer } ; -#define DATA_SERVICE 0 -#define DATA_SERVICE_MASTER 3 +#define RESOLVE_SERVICE_ADDON_REGEX_ZERO { 0,0,0,0,0,0,0 } + typedef struct resolve_service_s resolve_service_t, *resolve_service_t_ref ; struct resolve_service_s @@ -70,80 +164,134 @@ struct resolve_service_s uint32_t salen ; stralloc sa ; - uint32_t name ; - uint32_t description ; - uint32_t version ; - uint32_t logger ; - uint32_t logreal ; - uint32_t logassoc ; - uint32_t dstlog ; - uint32_t depends ; // for module -> list of s6-rc service - uint32_t requiredby ; - uint32_t optsdeps ; //optional dependencies - uint32_t extdeps ; //external dependencies - uint32_t contents ; // module -> list of s6-rc and s6 service - uint32_t src ; //frontend source - uint32_t srconf ; //configuration file source - uint32_t live ; //run/66 - uint32_t runat ; //livetree->longrun,scandir->svc - uint32_t tree ; //var/lib/66/system/tree - uint32_t treename ; - uint32_t state ; //run/66/state/uid/treename/ - uint32_t exec_run ; - uint32_t exec_log_run ; - uint32_t real_exec_run ; - uint32_t real_exec_log_run ; - uint32_t exec_finish ; - uint32_t real_exec_finish ; - - uint32_t type ; - uint32_t ndepends ; - uint32_t nrequiredby ; - uint32_t noptsdeps ; - uint32_t nextdeps ; - uint32_t ncontents ; - uint32_t down ; - uint32_t disen ;//disable->0,enable->1 + // configuration + uint32_t name ; // string + uint32_t description ; // string + uint32_t version ;// string + uint32_t type ; // integer + uint32_t notify ; // integer + uint32_t maxdeath ; // integer + uint32_t earlier ; // integer + uint32_t hiercopy ; // string + uint32_t intree ; // string + uint32_t ownerstr ; // string + uint32_t owner ; // integer, uid of the owner + uint32_t treename ; // string + uint32_t user ; // string + uint32_t inmodule ; // string, name of the module wich depend on + + resolve_service_addon_path_t path ; + resolve_service_addon_dependencies_t dependencies ; + resolve_service_addon_execute_t execute ; + resolve_service_addon_live_t live ; + resolve_service_addon_logger_t logger ; + resolve_service_addon_environ_t environ ; + resolve_service_addon_regex_t regex ; + } ; -#define RESOLVE_SERVICE_ZERO { 0,STRALLOC_ZERO,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } + +#define RESOLVE_SERVICE_ZERO { 0,STRALLOC_ZERO, \ + 0,0,0,0,0,5,0,0,0,0,0,0,0,0, \ + RESOLVE_SERVICE_ADDON_PATH_ZERO, \ + RESOLVE_SERVICE_ADDON_DEPENDENCIES_ZERO, \ + RESOLVE_SERVICE_ADDON_EXECUTE_ZERO, \ + RESOLVE_SERVICE_ADDON_LIVE_ZERO, \ + RESOLVE_SERVICE_ADDON_LOGGER_ZERO, \ + RESOLVE_SERVICE_ADDON_ENVIRON_ZERO, \ + RESOLVE_SERVICE_ADDON_REGEX_ZERO } + + typedef enum resolve_service_enum_e resolve_service_enum_t, *resolve_service_enum_t_ref; enum resolve_service_enum_e { - SERVICE_ENUM_NAME = 0, - SERVICE_ENUM_DESCRIPTION, - SERVICE_ENUM_VERSION, - SERVICE_ENUM_LOGGER, - SERVICE_ENUM_LOGREAL, - SERVICE_ENUM_LOGASSOC, - SERVICE_ENUM_DSTLOG, - SERVICE_ENUM_DEPENDS, - SERVICE_ENUM_REQUIREDBY, - SERVICE_ENUM_OPTSDEPS, - SERVICE_ENUM_EXTDEPS, - SERVICE_ENUM_CONTENTS, - SERVICE_ENUM_SRC, - SERVICE_ENUM_SRCONF, - SERVICE_ENUM_LIVE, - SERVICE_ENUM_RUNAT, - SERVICE_ENUM_TREE, - SERVICE_ENUM_TREENAME, - SERVICE_ENUM_STATE, - SERVICE_ENUM_EXEC_RUN, - SERVICE_ENUM_EXEC_LOG_RUN, - SERVICE_ENUM_REAL_EXEC_RUN, - SERVICE_ENUM_REAL_EXEC_LOG_RUN, - SERVICE_ENUM_EXEC_FINISH, - SERVICE_ENUM_REAL_EXEC_FINISH, - SERVICE_ENUM_TYPE, - SERVICE_ENUM_NDEPENDS, - SERVICE_ENUM_NREQUIREDBY, - SERVICE_ENUM_NOPTSDEPS, - SERVICE_ENUM_NEXTDEPS, - SERVICE_ENUM_NCONTENTS, - SERVICE_ENUM_DOWN, - SERVICE_ENUM_DISEN, - SERVICE_ENUM_ENDOFKEY + E_RESOLVE_SERVICE_NAME = 0, + E_RESOLVE_SERVICE_DESCRIPTION, + E_RESOLVE_SERVICE_VERSION, + E_RESOLVE_SERVICE_TYPE, + E_RESOLVE_SERVICE_NOTIFY, + E_RESOLVE_SERVICE_MAXDEATH, + E_RESOLVE_SERVICE_EARLIER, + E_RESOLVE_SERVICE_HIERCOPY, + E_RESOLVE_SERVICE_INTREE, + E_RESOLVE_SERVICE_OWNERSTR, + E_RESOLVE_SERVICE_OWNER, + E_RESOLVE_SERVICE_TREENAME, + E_RESOLVE_SERVICE_USER, + E_RESOLVE_SERVICE_INMODULE, + + // path + E_RESOLVE_SERVICE_HOME, + E_RESOLVE_SERVICE_FRONTEND, + E_RESOLVE_SERVICE_TREE, + E_RESOLVE_SERVICE_STATUS, + + // dependencies + E_RESOLVE_SERVICE_DEPENDS, + E_RESOLVE_SERVICE_REQUIREDBY, + E_RESOLVE_SERVICE_OPTSDEPS, + E_RESOLVE_SERVICE_NDEPENDS, + E_RESOLVE_SERVICE_NREQUIREDBY, + E_RESOLVE_SERVICE_NOPTSDEPS, + + // execute + E_RESOLVE_SERVICE_RUN, + E_RESOLVE_SERVICE_RUN_USER, + E_RESOLVE_SERVICE_RUN_BUILD, + E_RESOLVE_SERVICE_RUN_SHEBANG, + E_RESOLVE_SERVICE_RUN_RUNAS, + E_RESOLVE_SERVICE_FINISH, + E_RESOLVE_SERVICE_FINISH_USER, + E_RESOLVE_SERVICE_FINISH_BUILD, + E_RESOLVE_SERVICE_FINISH_SHEBANG, + E_RESOLVE_SERVICE_FINISH_RUNAS, + E_RESOLVE_SERVICE_TIMEOUTKILL, + E_RESOLVE_SERVICE_TIMEOUTFINISH, + E_RESOLVE_SERVICE_TIMEOUTUP, + E_RESOLVE_SERVICE_TIMEOUTDOWN, + E_RESOLVE_SERVICE_DOWN, + E_RESOLVE_SERVICE_DOWNSIGNAL, + + // live + E_RESOLVE_SERVICE_LIVEDIR, + E_RESOLVE_SERVICE_SCANDIR, + E_RESOLVE_SERVICE_STATEDIR, + E_RESOLVE_SERVICE_EVENTDIR, + E_RESOLVE_SERVICE_NOTIFDIR, + E_RESOLVE_SERVICE_SUPERVISEDIR, + E_RESOLVE_SERVICE_FDHOLDERDIR, + E_RESOLVE_SERVICE_ONESHOTDDIR, + + // logger + E_RESOLVE_SERVICE_LOGNAME, + E_RESOLVE_SERVICE_LOGDESTINATION, + E_RESOLVE_SERVICE_LOGBACKUP, + E_RESOLVE_SERVICE_LOGMAXSIZE, + E_RESOLVE_SERVICE_LOGTIMESTAMP, + E_RESOLVE_SERVICE_LOGWANT, + E_RESOLVE_SERVICE_LOGRUN, + E_RESOLVE_SERVICE_LOGRUN_USER, + E_RESOLVE_SERVICE_LOGRUN_BUILD, + E_RESOLVE_SERVICE_LOGRUN_SHEBANG, + E_RESOLVE_SERVICE_LOGRUN_RUNAS, + E_RESOLVE_SERVICE_LOGTIMEOUTKILL, + E_RESOLVE_SERVICE_LOGTIMEOUTFINISH, + + // environment + E_RESOLVE_SERVICE_ENV, + E_RESOLVE_SERVICE_ENVDIR, + E_RESOLVE_SERVICE_ENV_OVERWRITE, + + // regex + E_RESOLVE_SERVICE_REGEX_CONFIGURE, + E_RESOLVE_SERVICE_REGEX_DIRECTORIES, + E_RESOLVE_SERVICE_REGEX_FILES, + E_RESOLVE_SERVICE_REGEX_INFILES, + E_RESOLVE_SERVICE_REGEX_NDIRECTORIES, + E_RESOLVE_SERVICE_REGEX_NFILES, + E_RESOLVE_SERVICE_REGEX_NINFILES, + E_RESOLVE_SERVICE_ENDOFKEY + } ; typedef struct resolve_service_master_s resolve_service_master_t, *resolve_service_master_t_ref ; @@ -156,61 +304,59 @@ struct resolve_service_master_s uint32_t classic ; uint32_t bundle ; - uint32_t longrun ; uint32_t oneshot ; uint32_t module ; + uint32_t enabled ; + uint32_t disabled ; + uint32_t contents ; uint32_t nclassic ; uint32_t nbundle ; - uint32_t nlongrun ; uint32_t noneshot ; uint32_t nmodule ; - + uint32_t nenabled ; + uint32_t ndisabled ; + uint32_t ncontents ; } ; -#define RESOLVE_SERVICE_MASTER_ZERO { 0,STRALLOC_ZERO,0,0,0,0,0,0,0,0,0,0,0 } +#define RESOLVE_SERVICE_MASTER_ZERO { 0,STRALLOC_ZERO,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } typedef enum resolve_service_master_enum_e resolve_service_master_enum_t, *resolve_service_master_enum_t_ref; enum resolve_service_master_enum_e { - SERVICE_ENUM_MASTER_NAME = 0, - SERVICE_ENUM_MASTER_CLASSIC, - SERVICE_ENUM_MASTER_BUNDLE, - SERVICE_ENUM_MASTER_LONGRUN, - SERVICE_ENUM_MASTER_ONESHOT, - SERVICE_ENUM_MASTER_MODULE, - SERVICE_ENUM_MASTER_NCLASSIC, - SERVICE_ENUM_MASTER_NBUNDLE, - SERVICE_ENUM_MASTER_NLONGRUN, - SERVICE_ENUM_MASTER_NONESHOT, - SERVICE_ENUM_MASTER_NMODULE, - SERVICE_ENUM_MASTER_ENDOFKEY + E_RESOLVE_SERVICE_MASTER_NAME = 0, + E_RESOLVE_SERVICE_MASTER_CLASSIC, + E_RESOLVE_SERVICE_MASTER_BUNDLE, + E_RESOLVE_SERVICE_MASTER_ONESHOT, + E_RESOLVE_SERVICE_MASTER_MODULE, + E_RESOLVE_SERVICE_MASTER_ENABLED, + E_RESOLVE_SERVICE_MASTER_DISABLED, + E_RESOLVE_SERVICE_MASTER_CONTENTS, + E_RESOLVE_SERVICE_MASTER_NCLASSIC, + E_RESOLVE_SERVICE_MASTER_NBUNDLE, + E_RESOLVE_SERVICE_MASTER_NONESHOT, + E_RESOLVE_SERVICE_MASTER_NMODULE, + E_RESOLVE_SERVICE_MASTER_NENABLED, + E_RESOLVE_SERVICE_MASTER_NDISABLED, + E_RESOLVE_SERVICE_MASTER_NCONTENTS, + E_RESOLVE_SERVICE_MASTER_ENDOFKEY } ; extern resolve_field_table_t resolve_service_field_table[] ; extern resolve_field_table_t resolve_service_master_field_table[] ; -extern int service_isenabled(char const *sv) ; -extern int service_isenabledat(stralloc *tree, char const *sv) ; -extern int service_frontend_src(stralloc *sasrc, char const *name, char const *src) ; -extern int service_frontend_path(stralloc *sasrc,char const *sv, uid_t owner,char const *directory_forced) ; -extern int service_endof_dir(char const *dir, char const *name) ; -extern int service_cmp_basedir(char const *dir) ; -extern int service_intree(stralloc *svtree, char const *svname, char const *tree) ; -/** - * - * Resolve API - * - * */ - -/** Service */ +extern int service_cmp_basedir(char const *dir) ; +extern int service_endof_dir(char const *dir, char const *name) ; +extern int service_frontend_path(stralloc *sasrc,char const *sv, uid_t owner,char const *directory_forced) ; +extern int service_frontend_src(stralloc *sasrc, char const *name, char const *src) ; +extern int service_is_g(char *atree, char const *name, uint32_t flag) ; +extern void service_resolve_array_free(resolve_service_t *ares, unsigned int areslen) ; +extern int service_resolve_array_search(resolve_service_t *ares, unsigned int areslen, char const *name) ; extern int service_resolve_copy(resolve_service_t *dst, resolve_service_t *res) ; extern int service_resolve_get_field_tosa(stralloc *sa, resolve_service_t *res, resolve_service_enum_t field) ; extern int service_resolve_modify_field(resolve_service_t *res, resolve_service_enum_t field, char const *data) ; extern int service_resolve_read_cdb(cdb *c, resolve_service_t *res) ; -extern int service_resolve_setlognwrite(resolve_service_t *sv, char const *dst) ; -extern int service_resolve_setnwrite(sv_alltype *services, ssexec_t *info, char const *dst) ; -extern int service_resolve_sort_bytype(stralloc *list, char const *src) ; +extern int service_resolve_write(resolve_service_t *res) ; extern int service_resolve_write_cdb(cdbmaker *c, resolve_service_t *sres) ; /** Master */ @@ -222,26 +368,19 @@ extern int service_resolve_master_read_cdb(cdb *c, resolve_service_master_t *tre extern int service_resolve_master_write(graph_t *graph, char const *dest) ; extern int service_resolve_master_write_cdb(cdbmaker *c, resolve_service_master_t *mres) ; -/** - * - * - * obsolete function - * - * */ +/** Graph */ +extern void service_graph_g(char const *alist, size_t alen, graph_t *graph, resolve_service_t *ares, unsigned int *areslen, ssexec_t *info, uint32_t flag) ; +extern void service_graph_collect(graph_t *g, char const *alist, size_t alen, resolve_service_t *ares, unsigned int *areslen, ssexec_t *info, uint32_t flag) ; +extern void service_graph_build(graph_t *g, resolve_service_t *ares, unsigned int areslen, uint32_t flag) ; -extern int service_resolve_add_deps(genalloc *tokeep, resolve_service_t *res, char const *src) ; -extern int service_resolve_add_rdeps(genalloc *tokeep, resolve_service_t *res, char const *src) ; -extern int service_resolve_add_logger(genalloc *ga,char const *src) ; +extern int service_is(ss_state_t *ste, uint32_t flag) ; +/** possible remove of it */ +extern int graph_build_service_from_list(char const *const *list, char const *base, graph_t *graph, resolve_service_t *ares, uint8_t requiredby) ; -/** obsolete Graph function */ -extern void ss_resolve_graph_ndeps_free(ss_resolve_graph_ndeps_t *graph) ; -extern void ss_resolve_graph_free(ss_resolve_graph_t *graph) ; -extern int ss_resolve_graph_src(ss_resolve_graph_t *graph, char const *dir, unsigned int reverse, unsigned int what) ; -extern int ss_resolve_graph_build(ss_resolve_graph_t *graph,resolve_service_t *res,char const *src,unsigned int reverse) ; -extern int ss_resolve_graph_sort(ss_resolve_graph_t *graph) ; -extern int ss_resolve_dfs(ss_resolve_graph_t *graph, unsigned int idx, visit *c,unsigned int *ename,unsigned int *edeps) ; -extern int ss_resolve_graph_publish(ss_resolve_graph_t *graph,unsigned int reverse) ; + +/** SHOULD BE NOT USED */ +extern int service_resolve_sort_bytype(stralloc *list, char const *src) ; #endif diff --git a/src/include/66/ssexec.h b/src/include/66/ssexec.h index 402ab23a..666c3e57 100644 --- a/src/include/66/ssexec.h +++ b/src/include/66/ssexec.h @@ -15,20 +15,51 @@ #ifndef SS_SSEXEC_H #define SS_SSEXEC_H +#include <stdint.h> + #include <skalibs/stralloc.h> #include <skalibs/types.h> +#include <66/config.h> + typedef struct ssexec_s ssexec_t , *ssexec_t_ref ; struct ssexec_s { stralloc base ; + + //char base[SS_MAX_SERVICE] ; + //size_t baselen ; + stralloc live ; + + //char live[SS_MAX_SERVICE] ; + //size_t livelen ; + stralloc tree ; - stralloc livetree ; + + //char tree[SS_MAX_SERVICE] ; + //size_t treelen ; + stralloc scandir ; + + //char scandir[SS_MAX_SERVICE] ; + //size_t scandirlen ; + stralloc treename ; - int treeallow ; //1 yes , 0 no + + //char treename[SS_MAX_SERVICE] ; + //size_t treenamelen ; + + /** + * + * verifier pour les cast entre int et uint8_t + * a son call + * + * */ + uint8_t treeallow ; //1 yes , 0 no uid_t owner ; + char ownerstr[UID_FMT] ; + size_t ownerlen ; uint32_t timeout ; char const *prog ; char const *help ; @@ -43,49 +74,50 @@ struct ssexec_s uint8_t skip_opt_tree ; // tree,treename, treeallow will not be set. Also, trees permissions is not checked. } ; -#define SSEXEC_ZERO { .base = STRALLOC_ZERO , \ - .live = STRALLOC_ZERO , \ - .tree = STRALLOC_ZERO , \ - .livetree = STRALLOC_ZERO , \ - .scandir = STRALLOC_ZERO , \ - .treename = STRALLOC_ZERO , \ - .treeallow = 0 , \ - .owner = 0 , \ - .timeout = 0 , \ - .prog = 0 , \ - .help = 0 , \ - .usage = 0 , \ - .opt_verbo = 0 , \ - .opt_live = 0 , \ - .opt_tree = 0 , \ - .opt_timeout = 0 , \ - .opt_color = 0 , \ +#define SSEXEC_ZERO { .base = STRALLOC_ZERO, \ + .live = STRALLOC_ZERO, \ + .tree = STRALLOC_ZERO, \ + .scandir = STRALLOC_ZERO, \ + .treename = STRALLOC_ZERO, \ + .treeallow = 0, \ + .owner = 0, \ + .ownerstr = { 0 }, \ + .ownerlen = 0, \ + .timeout = 0, \ + .prog = 0, \ + .help = 0, \ + .usage = 0, \ + .opt_verbo = 0, \ + .opt_live = 0, \ + .opt_tree = 0, \ + .opt_timeout = 0, \ + .opt_color = 0, \ .skip_opt_tree = 0 } -typedef int ssexec_func_t(int argc, char const *const *argv, char const *const *envp, ssexec_t *info) ; +typedef int ssexec_func_t(int argc, char const *const *argv, ssexec_t *info) ; typedef ssexec_func_t *ssexec_func_t_ref ; extern void ssexec_free(ssexec_t *info) ; extern ssexec_t const ssexec_zero ; extern void set_ssinfo(ssexec_t *info) ; +extern ssexec_func_t ssexec_parse ; extern ssexec_func_t ssexec_init ; extern ssexec_func_t ssexec_enable ; extern ssexec_func_t ssexec_disable ; extern ssexec_func_t ssexec_start ; extern ssexec_func_t ssexec_stop ; extern ssexec_func_t ssexec_svctl ; -extern ssexec_func_t ssexec_dbctl ; extern ssexec_func_t ssexec_env ; extern ssexec_func_t ssexec_all ; extern ssexec_func_t ssexec_tree ; +extern char const *usage_parse ; +extern char const *help_parse ; extern char const *usage_enable ; extern char const *help_enable ; extern char const *usage_disable ; extern char const *help_disable ; -extern char const *usage_dbctl ; -extern char const *help_dbctl ; extern char const *usage_svctl ; extern char const *help_svctl ; extern char const *usage_start ; @@ -101,7 +133,9 @@ extern char const *help_all ; extern char const *usage_tree ; extern char const *help_tree ; -#define OPTS_INIT "cdb" +#define OPTS_PARSE "fFcmCI" +#define OPTS_PARSE_LEN (sizeof OPTS_PARSE - 1) +#define OPTS_INIT "o:" #define OPTS_INIT_LEN (sizeof OPTS_INIT - 1) #define OPTS_ENABLE "fFSI" #define OPTS_ENABLE_LEN (sizeof OPTS_ENABLE - 1) @@ -111,10 +145,8 @@ extern char const *help_tree ; #define OPTS_START_LEN (sizeof OPTS_START - 1) #define OPTS_STOP "uXK" #define OPTS_STOP_LEN (sizeof OPTS_STOP - 1) -#define OPTS_SVCTL "n:urRdXK" +#define OPTS_SVCTL "abqhkti12pcyroduxOw:P" #define OPTS_SVCTL_LEN (sizeof OPTS_SVCTL - 1) -#define OPTS_DBCTL "udr" -#define OPTS_DBCTL_LEN (sizeof OPTS_DBCTL - 1) #define OPTS_ENV "c:s:VLr:e:i:" #define OPTS_ENV_LEN (sizeof OPTS_ENV - 1) #define OPTS_ALL "f" diff --git a/src/include/66/svc.h b/src/include/66/svc.h index f103c818..bf064632 100644 --- a/src/include/66/svc.h +++ b/src/include/66/svc.h @@ -15,70 +15,13 @@ #ifndef SS_SVC_H #define SS_SVC_H -#include <skalibs/tai.h> -#include <skalibs/stralloc.h> -#include <skalibs/genalloc.h> -#include <s6/ftrigr.h> - #include <66/service.h> #include <66/ssexec.h> +#include <66/graph.h> -typedef struct ss_resolve_sig_s ss_resolve_sig_t, *ss_resolve_sig_t_ref ; -struct ss_resolve_sig_s -{ - resolve_service_t res ; - unsigned int notify ; - unsigned int ndeath; - tain deadline ; - uint16_t ids ; - char *sigtosend ; - int sig ; - int state ; - pid_t pid ; -} ; - -#define RESOLVE_SIG_ZERO \ -{ \ - .res = RESOLVE_SERVICE_ZERO, \ - .notify = 0, \ - .ndeath = 3, \ - .deadline = TAIN_ZERO, \ - .ids = 0, \ - .sigtosend = 0, \ - .sig = 0, \ - .state = -1, \ - .pid = 0 \ -} - -typedef enum state_e state_t, *state_t_ref ; -enum state_e -{ - SIGUP = 0, // u - SIGRUP , // U - really up - SIGR, // r - SIGRR, // R - really up - SIGDOWN , // d - SIGRDOWN ,// D - really down - SIGX, //X - SIGO , //0 - SIGSUP //s supervise -} ; -typedef enum sigactions_e sigactions_t, *sigactions_t_ref ; -enum sigactions_e -{ - GOTIT = 0 , - WAIT , - DEAD , - DONE , - PERM , - UKNOW -} ; - - -extern int svc_switch_to(ssexec_t *info,unsigned int where) ; -extern int svc_init(ssexec_t *info,char const *src, genalloc *ga) ; -extern int svc_init_pipe(ftrigr_t *fifo,genalloc *gasv,tain *deadline) ; -extern int svc_send(ssexec_t *info,genalloc *ga,char const *sig,char const *const *envp) ; -extern int svc_unsupervise(ssexec_t *info,genalloc *ga,char const *sig,char const *const *envp) ; +extern int svc_scandir_ok (char const *dir) ; +extern int svc_scandir_send(char const *scandir,char const *signal) ; +extern int svc_send(char const *const *list, unsigned int nservice, char **sig, unsigned int siglen, ssexec_t *info) ; +extern void svc_unsupervise(unsigned int *alist, unsigned int alen, graph_t *g, resolve_service_t *ares, unsigned int areslen) ; #endif diff --git a/src/include/66/utils.h b/src/include/66/utils.h index 84d33459..98c02026 100644 --- a/src/include/66/utils.h +++ b/src/include/66/utils.h @@ -32,8 +32,6 @@ #define YOURGID(passto,owner) yourgid(passto,owner) /** ss_utils.c file */ -extern int scandir_ok (char const *dir) ; -extern int scandir_send_signal(char const *scandir,char const *signal) ; extern char const *get_userhome(uid_t myuid) ; extern int youruid(uid_t *passto,char const *owner) ; extern int yourgid(gid_t *passto,uid_t owner) ; @@ -55,5 +53,9 @@ extern int module_path(stralloc *sdir, stralloc *mdir, char const *sv,char const extern int sa_pointo(stralloc *sa, ssexec_t *info, int type, unsigned int where) ; extern int create_live_state(ssexec_t *info, char const *treename) ; extern int create_live_tree(ssexec_t *info) ; +extern void name_isvalid(char const *name) ; + +extern int set_ownerhome_stack(char *store) ; +extern int set_ownersysdir_stack(char *base, uid_t owner) ; #endif diff --git a/src/include/66/write.h b/src/include/66/write.h index b4b24dc5..1a66d459 100644 --- a/src/include/66/write.h +++ b/src/include/66/write.h @@ -22,8 +22,7 @@ extern int write_services(resolve_service_t *res, char const *workdir, uint8_t f extern void write_classic(resolve_service_t *res, char const *dst, uint8_t force) ; extern void write_common(resolve_service_t *res, char const *dst) ; extern void write_environ(char const *name, char const *contents, char const *dst) ; -extern void write_execute_scripts(resolve_service_t *res, resolve_service_addon_scripts_t *scripts, char const *file, char const *dst) ; -extern void write_execute_scripts_user(resolve_service_t *res, resolve_service_addon_scripts_t *scripts, char const *file, char const *dst) ; +extern void write_execute_scripts(char const *file, char const *contents, char const *dst) ; extern void write_logger(resolve_service_t *res, char const *destination, uint8_t force) ; extern void write_oneshot(resolve_service_t *res, char const *dst) ; extern void write_uint(char const *dst, char const *name, uint32_t ui) ; -- GitLab