diff --git a/src/lib66/parse/deps-lib/deps b/src/lib66/parse/deps-lib/deps index d802130c9d84ab86857c4abbd1788e37f7c0f525..0313af57d79c8f2a9d1c3a112f57a061cabbdfdd 100644 --- a/src/lib66/parse/deps-lib/deps +++ b/src/lib66/parse/deps-lib/deps @@ -3,6 +3,7 @@ parse_clean_list.o parse_clean_quotes.o parse_clean_runas.o parse_compute_list.o +parse_compute_resolve.o parse_contents.o parse_dependencies.o parse_error.o diff --git a/src/lib66/parse/parse_compute_list.c b/src/lib66/parse/parse_compute_list.c index b85f0a1dd83a01f09d7968aefe47eb8a58b500ce..ad6c21575e3427efb672f7161dfcb2eb6c073cd0 100644 --- a/src/lib66/parse/parse_compute_list.c +++ b/src/lib66/parse/parse_compute_list.c @@ -27,14 +27,15 @@ #include <66/service.h> /** - * @opts -> 1 : build list of optional deps + * @opts -> 1 : build list removing commented optional deps * */ int parse_compute_list(resolve_wrapper_t_ref wres, stralloc *sa, uint32_t *res, uint8_t opts) { int r, found = 0 ; size_t len = sa->len, pos = 0 ; - char t[len + 1] ; - char f[len + 1] ; + size_t nelement = sastr_nelement(sa) ; + char t[len + nelement + 2] ; + char f[len + nelement + 2] ; memset(f, 0, len) ; memset(t, 0, len) ; diff --git a/src/lib66/parse/parse_dependencies.c b/src/lib66/parse/parse_dependencies.c index 84265424f72a78d50309cec12dda946233a43eb9..df4740fab5e75889935655a9473dc3eda67df0b2 100644 --- a/src/lib66/parse/parse_dependencies.c +++ b/src/lib66/parse/parse_dependencies.c @@ -44,7 +44,7 @@ int parse_dependencies(resolve_service_t *res, resolve_service_t *ares, unsigned goto freed ; } - char t[sa.len] ; + char t[sa.len + 1] ; sastr_to_char(t, &sa) ; @@ -53,8 +53,8 @@ int parse_dependencies(resolve_service_t *res, resolve_service_t *ares, unsigned for (; pos < len ; pos += strlen(t + pos) + 1) { sa.len = 0 ; - char name[strlen(t + pos)] ; - char ainsta[strlen(t + pos)] ; + char name[strlen(t + pos) + 1] ; + char ainsta[strlen(t + pos) + 1] ; int insta = -1 ; log_trace("parse dependencies: ", t + pos, " of service: ", res->sa.s + res->name) ; diff --git a/src/lib66/parse/parse_split_from_section.c b/src/lib66/parse/parse_split_from_section.c index f1ac67b6993ad3904278ff017ee85ee4e06846eb..18c5b34ccccc61ddab27afd78e48ce3832625eb5 100644 --- a/src/lib66/parse/parse_split_from_section.c +++ b/src/lib66/parse/parse_split_from_section.c @@ -21,6 +21,7 @@ #include <oblibs/mill.h> #include <skalibs/stralloc.h> +#include <skalibs/types.h> //UINT_FMT #include <66/parser.h> #include <66/resolve.h> @@ -44,7 +45,7 @@ int parse_split_from_section(resolve_service_t *res, stralloc *secname, char *st { log_flow() ; - int e = 0, r = 0, found = 0, skip = 0 ; + int e = 0, r = 0, found = 0 ; key_all_t const *list = total_list ; stralloc sakey = STRALLOC_ZERO ; @@ -52,7 +53,7 @@ int parse_split_from_section(resolve_service_t *res, stralloc *secname, char *st // cpos -> current, ipos -> idx pos, tpos -> temporary pos, end -> end the parse process size_t len = strlen(str), cpos = 0, ipos = 0, tpos = 0, end = 0 ; char tline[len + 1] ; - char store[len + 1] ; + char store[len + UINT_FMT + 1] ; // +6 be paranoid char *line ; // find the name of the current section @@ -85,7 +86,6 @@ int parse_split_from_section(resolve_service_t *res, stralloc *secname, char *st while(cpos < len) { - skip = 0 ; ipos = 0 ; tpos = 0 ; end = 0 ; diff --git a/src/lib66/parse/parse_store_environ.c b/src/lib66/parse/parse_store_environ.c index 2f4d644faf9948ef2138084732a5319c8f456ed0..588b4c49b16a43be19d819c1a37a199936bf755a 100644 --- a/src/lib66/parse/parse_store_environ.c +++ b/src/lib66/parse/parse_store_environ.c @@ -25,8 +25,6 @@ #include <66/utils.h> #include <66/environ.h> -#include <stdio.h> - int parse_store_environ(resolve_service_t *res, char *store, int idsec, int idkey) { int e = 0 ; diff --git a/src/lib66/parse/parse_store_logger.c b/src/lib66/parse/parse_store_logger.c index 9dad2be5d8db592e815c14267d103b5b2be27138..3a4449722a23c89123ee516f3fbc1a4770e23f02 100644 --- a/src/lib66/parse/parse_store_logger.c +++ b/src/lib66/parse/parse_store_logger.c @@ -47,6 +47,8 @@ int parse_store_logger(resolve_service_t *res, char *store, int idsec, int idkey case KEY_LOGGER_SHEBANG: + log_1_warn("deprecated key @shebang -- define your complete shebang directly inside your @execute key field") ; + if (!parse_store_start_stop(res, store, idsec, KEY_STARTSTOP_SHEBANG)) goto err ; @@ -97,6 +99,9 @@ int parse_store_logger(resolve_service_t *res, char *store, int idsec, int idkey if (!uint320_scan(store, &res->logger.maxsize)) parse_error_return(0, 3, idsec, idkey) ; + if (res->logger.maxsize < 4096 || res->logger.maxsize > 268435455) + parse_error_return(0, 0, idsec, idkey) ; + break ; case KEY_LOGGER_TIMESTP: diff --git a/src/lib66/parse/parse_store_main.c b/src/lib66/parse/parse_store_main.c index 29331239ae8def71230140b9eaf0edc249974570..075d794becbd2d38cac59fa4559977db7f0d7961 100644 --- a/src/lib66/parse/parse_store_main.c +++ b/src/lib66/parse/parse_store_main.c @@ -73,6 +73,10 @@ int parse_store_main(resolve_service_t *res, char *store, int idsec, int idkey) case KEY_MAIN_TYPE: + if (res->name) + /** already passed through here */ + break ; + if (!parse_clean_line(store)) parse_error_return(0, 8, idsec, idkey) ; @@ -108,6 +112,9 @@ int parse_store_main(resolve_service_t *res, char *store, int idsec, int idkey) if (!uint320_scan(store, &res->maxdeath)) parse_error_return(0, 3, idsec, idkey) ; + if (res->maxdeath > 4096) + parse_error_return(0, 0, idsec, idkey) ; + break ; case KEY_MAIN_FLAGS: @@ -278,6 +285,12 @@ int parse_store_main(resolve_service_t *res, char *store, int idsec, int idkey) if (pos == (size_t)p) { + if (!owner) + /** avoid field e.g root root where originaly + * we want e.g. user root. The term user will be + * root at getpwuid() call */ + continue ; + struct passwd *pw = getpwuid(owner); if (!pw) {