From 79f31e6dd10239715f81639bf8d8f5818b21a5d9 Mon Sep 17 00:00:00 2001 From: obarun <eric@obarun.org> Date: Mon, 26 Sep 2022 20:32:47 +1100 Subject: [PATCH] remove unused or renamed file --- src/lib66/parse/parse_service.c | 415 ------------------ src/lib66/service/service.c | 229 ---------- src/lib66/service/service_isenabled.c | 108 ----- .../service/service_resolve_setlognwrite.c | 107 ----- src/lib66/service/service_resolve_setnwrite.c | 327 -------------- src/lib66/state/state_check_flags.c | 47 -- src/lib66/state/state_setflag.c | 34 -- src/lib66/svc/svc_init.c | 197 --------- src/lib66/svc/svc_switch_to.c | 82 ---- src/lib66/tree/tree_cmd_state.c | 235 ---------- src/lib66/tree/tree_copy.c | 42 -- src/lib66/tree/tree_copy_tmp.c | 175 -------- src/lib66/utils/create_live_state.c | 57 --- src/lib66/utils/create_live_tree.c | 46 -- src/lib66/utils/set_livetree.c | 42 -- 15 files changed, 2143 deletions(-) delete mode 100644 src/lib66/parse/parse_service.c delete mode 100644 src/lib66/service/service.c delete mode 100644 src/lib66/service/service_isenabled.c delete mode 100644 src/lib66/service/service_resolve_setlognwrite.c delete mode 100644 src/lib66/service/service_resolve_setnwrite.c delete mode 100644 src/lib66/state/state_check_flags.c delete mode 100644 src/lib66/state/state_setflag.c delete mode 100644 src/lib66/svc/svc_init.c delete mode 100644 src/lib66/svc/svc_switch_to.c delete mode 100644 src/lib66/tree/tree_cmd_state.c delete mode 100644 src/lib66/tree/tree_copy.c delete mode 100644 src/lib66/tree/tree_copy_tmp.c delete mode 100644 src/lib66/utils/create_live_state.c delete mode 100644 src/lib66/utils/create_live_tree.c delete mode 100644 src/lib66/utils/set_livetree.c diff --git a/src/lib66/parse/parse_service.c b/src/lib66/parse/parse_service.c deleted file mode 100644 index 7ca46c27..00000000 --- a/src/lib66/parse/parse_service.c +++ /dev/null @@ -1,415 +0,0 @@ -/* - * parse_service.c - * - * Copyright (c) 2018-2021 Eric Vidal <eric@obarun.org> - * - * All rights reserved. - * - * This file is part of Obarun. It is subject to the license terms in - * the LICENSE file found in the top-level directory of this - * distribution. - * This file may not be copied, modified, propagated, or distributed - * except according to the terms contained in the LICENSE file./ - */ - -#include <66/parser.h> - -#include <stdint.h> -#include <string.h> - -#include <oblibs/log.h> -#include <oblibs/sastr.h> -#include <oblibs/string.h> -#include <oblibs/types.h> - -#include <skalibs/stralloc.h> -#include <skalibs/genalloc.h> - -#include <66/utils.h> -#include <66/constants.h> -#include <66/ssexec.h> -#include <66/service.h> -#include <66/tree.h> - -static void parse_service_instance(stralloc *frontend, char const *svsrc, char const *sv, int insta) -{ - log_flow() ; - - stralloc sa = STRALLOC_ZERO ; - - if (!instance_splitname(&sa, sv, insta, SS_INSTANCE_TEMPLATE)) - log_die(LOG_EXIT_SYS, "split instance service: ", sv) ; - - log_trace("read frontend service of: ", svsrc, sa.s) ; - - if (read_svfile(frontend, sa.s, svsrc) <= 0) - log_dieusys(LOG_EXIT_SYS, "read frontend service of: ", svsrc, sa.s) ; - - stralloc_free(&sa) ; - - if (!instance_create(frontend, sv, SS_INSTANCE_REGEX, insta)) - log_die(LOG_EXIT_SYS, "create instance service: ", sv) ; - - /** ensure that we have an empty line at the end of the string*/ - if (!auto_stra(frontend, "\n")) - log_die_nomem("stralloc") ; - -} - -static int parse_add_service(stralloc *parsed_list, sv_alltype *alltype, char const *service, uint8_t conf) -{ - log_flow() ; - - log_trace("add service: ", service) ; - - // keep overwrite_conf - alltype->overwrite_conf = conf ; - - // keep source of the frontend file - alltype->src = keep.len ; - - if (!sastr_add_string(&keep, service)) - return 0 ; - - // keep service on current list - if (!sastr_add_string(parsed_list, service)) - return 0 ; - - if (!genalloc_append(sv_alltype, &gasv, alltype)) - return 0 ; - - return 1 ; -} - -static void set_info(ssexec_t *info) -{ - log_flow() ; - - info->tree.len = 0 ; - int r = ssexec_set_treeinfo(info) ; - if (r == -4) log_die(LOG_EXIT_USER,"You're not allowed to use the tree: ",info->tree.s) ; - if (r == -3) log_dieu(LOG_EXIT_USER,"find the current tree. You must use the -t options") ; - if (r == -2) log_dieu(LOG_EXIT_USER,"set the tree name") ; - if (r == -1) log_dieu(LOG_EXIT_USER,"parse seed file") ; - if (!r) log_dieusys(LOG_EXIT_SYS,"find tree: ", info->treename.s) ; - -} -#include <stdio.h> -/* @sv -> name of the service to parse with - * the path of the frontend file source - * @Return 0 on fail - * @Return 1 on success - * @Return 2 -> already parsed */ -int parse_service(char const *sv, stralloc *parsed_list, ssexec_t *info, uint8_t force, uint8_t conf) -{ - - log_flow() ; - - if (sastr_cmp(parsed_list, sv) >= 0) { - - log_warn("ignoring: ", sv, " service -- already parsed") ; - return 2 ; - } - - log_trace("parse service: ", sv) ; - - int insta, r ; - size_t svlen = strlen(sv) ; - char svname[svlen + 1], svsrc[svlen + 1] ; - - sv_alltype alltype = SV_ALLTYPE_ZERO ; - stralloc frontend = STRALLOC_ZERO ; - stralloc satree = STRALLOC_ZERO ; - - if (!ob_basename(svname, sv)) - log_dieu(LOG_EXIT_SYS, "get basename of: ", sv) ; - - if (!ob_dirname(svsrc, sv)) - log_dieu(LOG_EXIT_SYS, "get dirname of: ", sv) ; - - insta = instance_check(svname) ; - if (!insta) { - - log_die(LOG_EXIT_SYS, "invalid instance name: ", svname) ; - - } else if (insta > 0) { - - parse_service_instance(&frontend, svsrc, svname, insta) ; - - } else { - - log_trace("read frontend service of: ", sv) ; - - if (read_svfile(&frontend, svname, svsrc) <= 0) - log_dieusys(LOG_EXIT_SYS, "read frontend service of: ", sv) ; - } - - r = service_isenabledat(&satree, svname) ; - if (r < -1) - log_dieu(LOG_EXIT_SYS, "check already enabled services") ; - - if (r > 0) { - - if (force) { - - /* -t option was used */ - if (!info->skip_opt_tree) { - - if (strcmp(info->treename.s, satree.s)) - log_die(LOG_EXIT_SYS,"you can not force to enable again a service on different tree -- current: ", satree.s, " asked: ", info->treename.s, ". Try first to disable it") ; - - } else { - - if (!auto_stra(&info->treename, satree.s)) - log_die_nomem("stralloc") ; - } - - goto set ; - - } else { - - log_info("ignoring service: ", sv, " -- already enabled at tree: ", satree.s) ; - - /** we don't care about the use of the -t option. The define of the - * info->tree and info->treename is just made to avoid segmentation fault - * at the rest of the process. The service is not parsed or enable again anyway. */ - - info->treename.len = 0 ; - if (!auto_stra(&info->treename, satree.s)) - log_die_nomem("stralloc") ; - - set_info(info) ; - - sv_alltype_free(&alltype) ; - stralloc_free(&frontend) ; - stralloc_free(&satree) ; - return 2 ; - } - } - - if (info->skip_opt_tree) { - - /** first try to find the @intree key at the frontend file*/ - if (!get_svintree(&alltype,frontend.s)) - log_die(LOG_EXIT_USER, "invalid value for key: ",get_key_by_enum(ENUM_KEY_SECTION_MAIN,KEY_MAIN_INTREE)," in service file: ", sv) ; - - if (alltype.cname.intree >= 0) { - - info->treename.len = 0 ; - if (!auto_stra(&info->treename, keep.s + alltype.cname.intree)) - log_die_nomem("stralloc") ; - - } - } - - set: - - set_info(info) ; - - if (!get_svtype(&alltype, frontend.s)) - log_die(LOG_EXIT_USER, "invalid value for key: ", get_key_by_enum(ENUM_KEY_SECTION_MAIN, KEY_MAIN_TYPE), " at frontend service: ", sv) ; - - /** contents of directory should be listed by service_frontend_path - * except for module type */ - if (scan_mode(sv,S_IFDIR) == 1 && alltype.cname.itype != TYPE_MODULE) - goto freed ; - - alltype.cname.name = keep.len ; - if (!sastr_add_string(&keep, svname)) - log_die_nomem("stralloc") ; - - if (!parser(&alltype, &frontend, svname, alltype.cname.itype)) - log_dieu(LOG_EXIT_SYS, "parse service: ", sv) ; - - if (!parse_add_service(parsed_list, &alltype, sv, conf)) - log_dieu(LOG_EXIT_SYS, "add service: ", sv) ; - - freed: - stralloc_free(&frontend) ; - stralloc_free(&satree) ; - - return 1 ; -} - -int parse_service_deps(sv_alltype *alltype, ssexec_t *info, stralloc *parsed_list, uint8_t force, char const *directory_forced) -{ - - log_flow() ; - - int r, e = 0 ; - stralloc sa = STRALLOC_ZERO ; - - if (alltype->cname.nga) { - - size_t id = alltype->cname.idga, nid = alltype->cname.nga ; - for (; nid ; id += strlen(deps.s + id) + 1, nid--) { - - sa.len = 0 ; - - if (alltype->cname.itype != TYPE_BUNDLE) { - - log_trace("service: ", keep.s + alltype->cname.name, " depends on: ", deps.s + id) ; - - } else log_trace("bundle: ", keep.s + alltype->cname.name, " contents: ", deps.s + id," as service") ; - - r = service_frontend_path(&sa, deps.s + id, info->owner, directory_forced) ; - if (r < 1) goto err ;//don't warn here, the ss_revolve_src_path do it - - if (!parse_service(sa.s, parsed_list, info, force, alltype->overwrite_conf)) - goto err ; - } - - } else log_trace(keep.s + alltype->cname.name,": haven't dependencies") ; - - e = 1 ; - - err: - stralloc_free(&sa) ; - return e ; -} - -int parse_service_optsdeps(stralloc *rebuild, sv_alltype *alltype, ssexec_t *info, stralloc *parsed_list, uint8_t force, uint8_t field, char const *directory_forced) -{ - log_flow() ; - - int r, e = 0 ; - stralloc sa = STRALLOC_ZERO ; - - size_t id, nid ; - uint8_t ext = field == KEY_MAIN_EXTDEPS ? 1 : 0 ; - - int idref = alltype->cname.idopts ; - unsigned int nref = alltype->cname.nopts ; - if (ext) { - idref = alltype->cname.idext ; - nref = alltype->cname.next ; - } - - if (nref) { - - id = (size_t)idref, nid = (size_t)nref ; - for (; nid ; id += strlen(deps.s + id) + 1, nid--) { - - sa.len = 0 ; - // 0 -> not found, 1 -> found, -1 -> system error - r = service_isenabled(deps.s + id) ; - if (r == -1) - log_dieu(LOG_EXIT_SYS, "check already enabled services") ; - - if (r > 0) { - if (!ext) - break ; - else - continue ; - } - - r = service_frontend_path(&sa, deps.s + id, info->owner, directory_forced) ; - if (r == -1) - goto err ; - - if (!r) { - - log_trace("unable to find", ext ? " external " : " optional ", "dependency: ", deps.s + id, " for service: ", keep.s + alltype->cname.name) ; - - // external deps must exist - if (ext) - goto err ; - - continue ; - } - - if (!parse_service(sa.s, parsed_list, info, force, alltype->overwrite_conf)) - goto err ; - - if (!sastr_add_string(rebuild, deps.s + id)) - log_die_nomem("stralloc") ; - - // we only keep the first optsdepends found - if (!ext) break ; - } - - } else log_trace(keep.s + alltype->cname.name,": haven't", ext ? " external " : " optional ", "dependencies") ; - - e = 1 ; - - err: - stralloc_free(&sa) ; - return e ; -} - -int parse_service_alldeps(sv_alltype *alltype, ssexec_t *info, stralloc *parsed_list, uint8_t force, char const *directory_forced) -{ - log_flow() ; - - int e = 0 ; - size_t id, nid, pos ; - char *name = keep.s + alltype->cname.name ; - stralloc sa = STRALLOC_ZERO ; - stralloc rebuild = STRALLOC_ZERO ; - - if (!parse_service_deps(alltype, info, parsed_list, force, directory_forced)) { - log_warnu("parse dependencies of: ", name) ; - goto err ; - } - - if (!parse_service_optsdeps(&rebuild, alltype, info, parsed_list, force, KEY_MAIN_EXTDEPS, directory_forced)) { - log_warnu("parse external dependencies of: ", name) ; - goto err ; - } - - if (!parse_service_optsdeps(&rebuild, alltype, info, parsed_list, force, KEY_MAIN_OPTSDEPS, directory_forced)) { - log_warnu("parse optional dependencies of: ", name) ; - goto err ; - } - - // rebuild the dependencies list of the service to add the new dependencies. - if (rebuild.len) { - - pos = 0 ; - sa.len = 0 ; - id = alltype->cname.idga ; - nid = alltype->cname.nga ; - - { - for (; nid ; id += strlen(deps.s + id) + 1, nid--) { - if (!sastr_add_string(&sa, deps.s + id)) { - log_warn("stralloc") ; - goto err ; - } - } - - - FOREACH_SASTR(&rebuild, pos) { - if (!sastr_add_string(&sa, rebuild.s + pos)) { - log_warn("stralloc") ; - goto err ; - } - } - - } - - alltype->cname.idga = deps.len ; - alltype->cname.nga = 0 ; - - pos = 0 ; - FOREACH_SASTR(&sa, pos) { - - log_info("rebuil list", sa.s + pos) ; - - if (!sastr_add_string(&deps,sa.s + pos)) { - log_warn("stralloc") ; - goto err ; - } - - alltype->cname.nga++ ; - } - } - - e = 1 ; - - err: - stralloc_free(&rebuild) ; - stralloc_free(&sa) ; - - return e ; -} diff --git a/src/lib66/service/service.c b/src/lib66/service/service.c deleted file mode 100644 index 26ae543a..00000000 --- a/src/lib66/service/service.c +++ /dev/null @@ -1,229 +0,0 @@ -/* - * service.c - * - * Copyright (c) 2018-2021 Eric Vidal <eric@obarun.org> - * - * All rights reserved. - * - * This file is part of Obarun. It is subject to the license terms in - * the LICENSE file found in the top-level directory of this - * distribution. - * This file may not be copied, modified, propagated, or distributed - * except according to the terms contained in the LICENSE file./ - */ - -#include <string.h> -#include <stdint.h> -#include <stdlib.h>//free - -#include <oblibs/log.h> -#include <oblibs/string.h> -#include <oblibs/sastr.h> - -#include <skalibs/genalloc.h> -#include <skalibs/stralloc.h> -#include <skalibs/types.h> - -#include <66/constants.h> -#include <66/resolve.h> -#include <66/service.h> -#include <66/state.h> - -int service_resolve_add_deps(genalloc *tokeep, resolve_service_t *res, char const *src) -{ - log_flow() ; - - int e = 0 ; - size_t pos = 0 ; - stralloc tmp = STRALLOC_ZERO ; - resolve_wrapper_t_ref wres = resolve_set_struct(DATA_SERVICE, res) ; - - char *name = res->sa.s + res->name ; - char *deps = res->sa.s + res->depends ; - if (!resolve_cmp(tokeep, name, DATA_SERVICE) && (!obstr_equal(name,SS_MASTER+1))) - if (!resolve_append(tokeep,wres)) goto err ; - - if (res->ndepends) - { - if (!sastr_clean_string(&tmp,deps)) return 0 ; - for (;pos < tmp.len ; pos += strlen(tmp.s + pos) + 1) - { - resolve_service_t dres = RESOLVE_SERVICE_ZERO ; - resolve_wrapper_t_ref dwres = resolve_set_struct(DATA_SERVICE, &dres) ; - char *dname = tmp.s + pos ; - if (!resolve_check(src,dname)) goto err ; - if (!resolve_read(dwres,src,dname)) goto err ; - if (dres.ndepends && !resolve_cmp(tokeep, dname, DATA_SERVICE)) - { - if (!service_resolve_add_deps(tokeep,&dres,src)) goto err ; - } - if (!resolve_cmp(tokeep, dname, DATA_SERVICE)) - { - if (!resolve_append(tokeep,dwres)) goto err ; - } - resolve_free(dwres) ; - } - } - - e = 1 ; - - err: - stralloc_free(&tmp) ; - free(wres) ; - return e ; -} - -int service_resolve_add_rdeps(genalloc *tokeep, resolve_service_t *res, char const *src) -{ - log_flow() ; - - int type, e = 0 ; - stralloc tmp = STRALLOC_ZERO ; - stralloc nsv = STRALLOC_ZERO ; - ss_state_t sta = STATE_ZERO ; - resolve_wrapper_t_ref wres = resolve_set_struct(DATA_SERVICE, res) ; - char const *exclude[2] = { SS_MASTER + 1, 0 } ; - - char *name = res->sa.s + res->name ; - size_t srclen = strlen(src), a = 0, b = 0, c = 0 ; - char s[srclen + SS_RESOLVE_LEN + 1] ; - memcpy(s,src,srclen) ; - memcpy(s + srclen,SS_RESOLVE,SS_RESOLVE_LEN) ; - s[srclen + SS_RESOLVE_LEN] = 0 ; - - if (res->type == TYPE_CLASSIC) type = 0 ; - else type = 1 ; - - if (!sastr_dir_get(&nsv,s,exclude,S_IFREG)) goto err ; - - if (!resolve_cmp(tokeep, name, DATA_SERVICE) && (!obstr_equal(name,SS_MASTER+1))) - { - if (!resolve_append(tokeep,wres)) goto err ; - } - if ((res->type == TYPE_BUNDLE || res->type == TYPE_MODULE) && res->ndepends) - { - uint32_t deps = res->type == TYPE_MODULE ? res->contents : res->depends ; - if (!sastr_clean_string(&tmp,res->sa.s + deps)) goto err ; - resolve_service_t dres = RESOLVE_SERVICE_ZERO ; - resolve_wrapper_t_ref dwres = resolve_set_struct(DATA_SERVICE, &dres) ; - for (; a < tmp.len ; a += strlen(tmp.s + a) + 1) - { - char *name = tmp.s + a ; - if (!resolve_check(src,name)) goto err ; - if (!resolve_read(dwres,src,name)) goto err ; - if (dres.type == TYPE_CLASSIC) continue ; - if (!resolve_cmp(tokeep, name, DATA_SERVICE)) - { - if (!resolve_append(tokeep,dwres)) goto err ; - if (!service_resolve_add_rdeps(tokeep,&dres,src)) goto err ; - } - resolve_free(dwres) ; - } - } - for (; b < nsv.len ; b += strlen(nsv.s + b) +1) - { - int dtype = 0 ; - tmp.len = 0 ; - resolve_service_t dres = RESOLVE_SERVICE_ZERO ; - resolve_wrapper_t_ref dwres = resolve_set_struct(DATA_SERVICE, &dres) ; - char *dname = nsv.s + b ; - if (obstr_equal(name,dname)) { resolve_free(wres) ; continue ; } - if (!resolve_check(src,dname)) goto err ; - if (!resolve_read(dwres,src,dname)) goto err ; - - if (dres.type == TYPE_CLASSIC) dtype = 0 ; - else dtype = 1 ; - - if (state_check(dres.sa.s + dres.state,dname)) - { - if (!state_read(&sta,dres.sa.s + dres.state,dname)) goto err ; - if (dtype != type || (!dres.disen && !sta.unsupervise)){ resolve_free(dwres) ; continue ; } - } - else if (dtype != type || (!dres.disen)){ resolve_free(dwres) ; continue ; } - if (dres.type == TYPE_BUNDLE && !dres.ndepends){ resolve_free(dwres) ; continue ; } - - if (!resolve_cmp(tokeep, dname, DATA_SERVICE)) - { - if (dres.ndepends)// || (dres.type == TYPE_BUNDLE && dres.ndepends) || ) - { - if (!sastr_clean_string(&tmp,dres.sa.s + dres.depends)) goto err ; - /** we must check every service inside the module to not add as - * rdeps a service declared inside the module. - * eg. - * module boot@system declare tty-rc@tty1 - * we don't want boot@system as rdeps of tty-rc@tty1 but only - * service inside the module as rdeps of tty-rc@tty1 */ - if (dres.type == TYPE_MODULE) - for (c = 0 ; c < tmp.len ; c += strlen(tmp.s + c) + 1) - if (obstr_equal(name,tmp.s + c)) goto skip ; - - for (c = 0 ; c < tmp.len ; c += strlen(tmp.s + c) + 1) - { - if (obstr_equal(name,tmp.s + c)) - { - if (!resolve_append(tokeep,dwres)) goto err ; - if (!service_resolve_add_rdeps(tokeep,&dres,src)) goto err ; - resolve_free(dwres) ; - break ; - } - } - } - } - skip: - resolve_free(dwres) ; - } - - e = 1 ; - err: - free(wres) ; - stralloc_free(&nsv) ; - stralloc_free(&tmp) ; - return e ; -} - -int service_resolve_add_logger(genalloc *ga,char const *src) -{ - log_flow() ; - - int e = 0 ; - size_t i = 0 ; - genalloc gatmp = GENALLOC_ZERO ; - - for (; i < genalloc_len(resolve_service_t,ga) ; i++) - { - resolve_service_t res = RESOLVE_SERVICE_ZERO ; - resolve_wrapper_t_ref wres = resolve_set_struct(DATA_SERVICE, &res) ; - resolve_service_t dres = RESOLVE_SERVICE_ZERO ; - resolve_wrapper_t_ref dwres = resolve_set_struct(DATA_SERVICE, &dres) ; - if (!service_resolve_copy(&res,&genalloc_s(resolve_service_t,ga)[i])) goto err ; - - char *string = res.sa.s ; - char *name = string + res.name ; - if (!resolve_cmp(&gatmp, name, DATA_SERVICE)) - { - if (!resolve_append(&gatmp,wres)) - goto err ; - - if (res.logger) - { - if (!resolve_check(src,string + res.logger)) goto err ; - if (!resolve_read(dwres,src,string + res.logger)) - goto err ; - if (!resolve_cmp(&gatmp, string + res.logger, DATA_SERVICE)) - if (!resolve_append(&gatmp,dwres)) goto err ; - } - } - resolve_free(wres) ; - resolve_free(dwres) ; - } - resolve_deep_free(DATA_SERVICE, ga) ; - if (!genalloc_copy(resolve_service_t,ga,&gatmp)) goto err ; - - e = 1 ; - - err: - genalloc_free(resolve_service_t,&gatmp) ; - resolve_deep_free(DATA_SERVICE, &gatmp) ; - return e ; -} - diff --git a/src/lib66/service/service_isenabled.c b/src/lib66/service/service_isenabled.c deleted file mode 100644 index 0b8c7931..00000000 --- a/src/lib66/service/service_isenabled.c +++ /dev/null @@ -1,108 +0,0 @@ -/* - * service_isenabled.c - * - * Copyright (c) 2018-2021 Eric Vidal <eric@obarun.org> - * - * All rights reserved. - * - * This file is part of Obarun. It is subject to the license terms in - * the LICENSE file found in the top-level directory of this - * distribution. - * This file may not be copied, modified, propagated, or distributed - * except according to the terms contained in the LICENSE file./ - */ - -#include <unistd.h>//getuid - -#include <oblibs/log.h> -#include <oblibs/string.h> -#include <oblibs/types.h> -#include <oblibs/sastr.h> - -#include <skalibs/stralloc.h> - -#include <66/constants.h> -#include <66/resolve.h> -#include <66/service.h> -#include <66/utils.h> - -/** @Return 0 if not found - * @Return 1 if found - * @Return 2 if found but marked disabled - * @Return -1 system error */ -int service_isenabled(char const *sv) -{ - - log_flow() ; - - stralloc sa = STRALLOC_ZERO ; - resolve_service_t res = RESOLVE_SERVICE_ZERO ; - resolve_wrapper_t_ref wres = resolve_set_struct(DATA_SERVICE, &res) ; - size_t newlen = 0, pos = 0 ; - int e = -1, r ; - char const *exclude[3] = { SS_BACKUP + 1, SS_RESOLVE + 1, 0 } ; - - if (!set_ownersysdir(&sa, getuid())) { - - log_warnusys("set owner directory") ; - stralloc_free(&sa) ; - return 0 ; - } - - char tmp[sa.len + SS_SYSTEM_LEN + 2] ; - auto_strings(tmp, sa.s, SS_SYSTEM) ; - - // no tree exist yet - if (!scan_mode(tmp, S_IFDIR)) - goto empty ; - - auto_strings(tmp, sa.s, SS_SYSTEM, "/") ; - - newlen = sa.len + SS_SYSTEM_LEN + 1 ; - sa.len = 0 ; - - if (!sastr_dir_get(&sa, tmp, exclude, S_IFDIR)) { - - log_warnu("get list of trees from: ", tmp) ; - goto freed ; - } - - FOREACH_SASTR(&sa, pos) { - - char *treename = sa.s + pos ; - - char trees[newlen + strlen(treename) + SS_SVDIRS_LEN + 1] ; - auto_strings(trees, tmp, treename, SS_SVDIRS) ; - - r = resolve_read_g(wres, trees, sv) ; - - if (r < 0) { - - log_warnu("read resolve file: ", trees, "/", sv) ; - e = -1 ; - goto freed ; - - } else if (r) { - - if (res.disen) { - - log_trace(sv, " enabled at tree: ", treename) ; - - e = 1 ; - goto freed ; - - } else { - - log_trace(sv, " disabled at tree: ", treename) ; - e = 2 ; - goto freed ; - } - } - } - empty: - e = 0 ; - freed: - stralloc_free(&sa) ; - resolve_free(wres) ; - return e ; -} diff --git a/src/lib66/service/service_resolve_setlognwrite.c b/src/lib66/service/service_resolve_setlognwrite.c deleted file mode 100644 index 0cf3dfd8..00000000 --- a/src/lib66/service/service_resolve_setlognwrite.c +++ /dev/null @@ -1,107 +0,0 @@ -/* - * service_resolve_setlognwrite.c - * - * Copyright (c) 2018-2021 Eric Vidal <eric@obarun.org> - * - * All rights reserved. - * - * This file is part of Obarun. It is subject to the license terms in - * the LICENSE file found in the top-level directory of this - * distribution. - * This file may not be copied, modified, propagated, or distributed - * except according to the terms contained in the LICENSE file./ - */ - -#include <string.h> - -#include <oblibs/log.h> -#include <oblibs/string.h> - -#include <66/enum.h> -#include <66/state.h> -#include <66/resolve.h> -#include <66/service.h> - -int service_resolve_setlognwrite(resolve_service_t *sv, char const *dst) -{ - log_flow() ; - - if (!sv->logger) return 1 ; - - int e = 0 ; - ss_state_t sta = STATE_ZERO ; - - resolve_service_t res = RESOLVE_SERVICE_ZERO ; - resolve_wrapper_t_ref wres = resolve_set_struct(DATA_SERVICE, &res) ; - - resolve_init(wres) ; - - char *str = sv->sa.s ; - size_t svlen = strlen(str + sv->name) ; - char descrip[svlen + 7 + 1] ; - auto_strings(descrip, str + sv->name, " logger") ; - - size_t runlen = strlen(str + sv->runat) ; - char live[runlen + 4 + 1] ; - memcpy(live,str + sv->runat,runlen) ; - if (sv->type >= TYPE_BUNDLE) { - - memcpy(live + runlen,"-log",4) ; - - } else memcpy(live + runlen,"/log",4) ; - - live[runlen + 4] = 0 ; - - res.type = sv->type ; - res.name = resolve_add_string(wres,str + sv->logger) ; - res.description = resolve_add_string(wres,str + sv->description) ; - res.version = resolve_add_string(wres,str + sv->version) ; - res.logreal = resolve_add_string(wres,str + sv->logreal) ; - res.logassoc = resolve_add_string(wres,str + sv->name) ; - res.dstlog = resolve_add_string(wres,str + sv->dstlog) ; - res.live = resolve_add_string(wres,str + sv->live) ; - res.runat = resolve_add_string(wres,live) ; - res.tree = resolve_add_string(wres,str + sv->tree) ; - res.treename = resolve_add_string(wres,str + sv->treename) ; - res.state = resolve_add_string(wres,str + sv->state) ; - res.src = resolve_add_string(wres,str + sv->src) ; - res.down = sv->down ; - res.disen = sv->disen ; - - if (sv->exec_log_run > 0) - res.exec_log_run = resolve_add_string(wres,str + sv->exec_log_run) ; - - if (sv->real_exec_log_run > 0) - res.real_exec_log_run = resolve_add_string(wres,str + sv->real_exec_log_run) ; - - if (state_check(str + sv->state,str + sv->logger)) { - - if (!state_read(&sta,str + sv->state,str + sv->logger)) { - - log_warnusys("read state file of: ",str + sv->logger) ; - goto err ; - } - - if (!sta.init) - state_setflag(&sta,SS_FLAGS_RELOAD,SS_FLAGS_TRUE) ; - - state_setflag(&sta,SS_FLAGS_INIT,SS_FLAGS_FALSE) ; - state_setflag(&sta,SS_FLAGS_UNSUPERVISE,SS_FLAGS_FALSE) ; - - if (!state_write(&sta,str + sv->state,str + sv->logger)) { - log_warnusys("write state file of: ",str + sv->logger) ; - goto err ; - } - } - - if (!resolve_write(wres,dst,res.sa.s + res.name)) { - log_warnusys("write resolve file: ",dst,SS_RESOLVE,"/",res.sa.s + res.name) ; - goto err ; - } - - e = 1 ; - - err: - resolve_free(wres) ; - return e ; -} diff --git a/src/lib66/service/service_resolve_setnwrite.c b/src/lib66/service/service_resolve_setnwrite.c deleted file mode 100644 index b50a239d..00000000 --- a/src/lib66/service/service_resolve_setnwrite.c +++ /dev/null @@ -1,327 +0,0 @@ -/* - * service_resolve_setnwrite.c - * - * Copyright (c) 2018-2021 Eric Vidal <eric@obarun.org> - * - * All rights reserved. - * - * This file is part of Obarun. It is subject to the license terms in - * the LICENSE file found in the top-level directory of this - * distribution. - * This file may not be copied, modified, propagated, or distributed - * except according to the terms contained in the LICENSE file./ - */ - -#include <string.h> - -#include <oblibs/log.h> -#include <oblibs/string.h> - -#include <skalibs/types.h> -#include <skalibs/stralloc.h> - -#include <66/enum.h> -#include <66/constants.h> -#include <66/resolve.h> -#include <66/state.h> -#include <66/ssexec.h> -#include <66/parser.h> -#include <66/utils.h> -#include <66/service.h> - -int service_resolve_setnwrite(sv_alltype *services, ssexec_t *info, char const *dst) -{ - log_flow() ; - - int e = 0 ; - char ownerstr[UID_FMT] ; - size_t ownerlen = uid_fmt(ownerstr,info->owner), id, nid ; - ownerstr[ownerlen] = 0 ; - - stralloc destlog = STRALLOC_ZERO ; - stralloc ndeps = STRALLOC_ZERO ; - stralloc other_deps = STRALLOC_ZERO ; - - ss_state_t sta = STATE_ZERO ; - resolve_service_t res = RESOLVE_SERVICE_ZERO ; - resolve_wrapper_t_ref wres = resolve_set_struct(DATA_SERVICE, &res) ; - - resolve_init(wres) ; - - char *name = keep.s + services->cname.name ; - size_t namelen = strlen(name) ; - char logname[namelen + SS_LOG_SUFFIX_LEN + 1] ; - char logreal[namelen + SS_LOG_SUFFIX_LEN + 1] ; - char stmp[info->livetree.len + 1 + info->treename.len + SS_SVDIRS_LEN + 1 + namelen + SS_LOG_SUFFIX_LEN + 1] ; - - size_t livelen = info->live.len - 1 ; - char state[livelen + SS_STATE_LEN + 1 + ownerlen + 1 + info->treename.len + 1 + namelen + 1] ; - auto_strings(state, info->live.s, SS_STATE, "/", ownerstr, "/", info->treename.s) ; - - - res.type = services->cname.itype ; - res.name = resolve_add_string(wres,name) ; - res.description = resolve_add_string(wres,keep.s + services->cname.description) ; - res.version = resolve_add_string(wres,keep.s + services->cname.version) ; - res.tree = resolve_add_string(wres,info->tree.s) ; - res.treename = resolve_add_string(wres,info->treename.s) ; - res.live = resolve_add_string(wres,info->live.s) ; - res.state = resolve_add_string(wres,state) ; - res.src = resolve_add_string(wres,keep.s + services->src) ; - - if (services->srconf > 0) - res.srconf = resolve_add_string(wres,keep.s + services->srconf) ; - - if (res.type == TYPE_ONESHOT) { - - if (services->type.oneshot.up.exec >= 0) { - - res.exec_run = resolve_add_string(wres,keep.s + services->type.oneshot.up.exec) ; - res.real_exec_run = resolve_add_string(wres,keep.s + services->type.oneshot.up.real_exec) ; - } - - if (services->type.oneshot.down.exec >= 0) { - - res.exec_finish = resolve_add_string(wres,keep.s + services->type.oneshot.down.exec) ; - res.real_exec_finish = resolve_add_string(wres,keep.s + services->type.oneshot.down.real_exec) ; - } - } - - if (res.type == TYPE_CLASSIC || res.type == TYPE_LONGRUN) { - - if (services->type.classic_longrun.run.exec >= 0) { - res.exec_run = resolve_add_string(wres,keep.s + services->type.classic_longrun.run.exec) ; - res.real_exec_run = resolve_add_string(wres,keep.s + services->type.classic_longrun.run.real_exec) ; - } - - if (services->type.classic_longrun.finish.exec >= 0) { - - res.exec_finish = resolve_add_string(wres,keep.s + services->type.classic_longrun.finish.exec) ; - res.real_exec_finish = resolve_add_string(wres,keep.s + services->type.classic_longrun.finish.real_exec) ; - } - } - - res.ndepends = services->cname.nga ; - res.noptsdeps = services->cname.nopts ; - res.nextdeps = services->cname.next ; - res.ncontents = services->cname.ncontents ; - - if (services->flags[0]) - res.down = 1 ; - - res.disen = 1 ; - - if (res.type == TYPE_CLASSIC) { - - auto_strings(stmp, info->scandir.s, "/", name) ; - res.runat = resolve_add_string(wres,stmp) ; - - } else if (res.type >= TYPE_BUNDLE) { - - auto_strings(stmp, info->livetree.s, "/", info->treename.s, SS_SVDIRS, "/", name) ; - res.runat = resolve_add_string(wres,stmp) ; - } - - if (state_check(state,name)) { - - if (!state_read(&sta,state,name)) { - log_warnusys("read state file of: ",name) ; - goto err ; - } - - if (!sta.init) - state_setflag(&sta,SS_FLAGS_RELOAD,SS_FLAGS_TRUE) ; - - if (sta.init) { - - state_setflag(&sta,SS_FLAGS_INIT,SS_FLAGS_TRUE) ; - - } else { - - state_setflag(&sta,SS_FLAGS_INIT,SS_FLAGS_FALSE) ; - } - - state_setflag(&sta,SS_FLAGS_UNSUPERVISE,SS_FLAGS_FALSE) ; - - if (!state_write(&sta,res.sa.s + res.state,name)) { - log_warnusys("write state file of: ",name) ; - goto err ; - } - } - - if (res.ndepends) - { - id = services->cname.idga, nid = res.ndepends ; - for (;nid; id += strlen(deps.s + id) + 1, nid--) { - - if (!stralloc_catb(&ndeps,deps.s + id,strlen(deps.s + id)) || - !stralloc_catb(&ndeps," ",1)) { - log_warnsys("stralloc") ; - goto err ; - } - } - ndeps.len-- ; - - if (!stralloc_0(&ndeps)) { - log_warnsys("stralloc") ; - goto err ; - } - - res.depends = resolve_add_string(wres,ndeps.s) ; - } - - if (res.noptsdeps) - { - id = services->cname.idopts, nid = res.noptsdeps ; - for (;nid; id += strlen(deps.s + id) + 1, nid--) { - - if (!stralloc_catb(&other_deps,deps.s + id,strlen(deps.s + id)) || - !stralloc_catb(&other_deps," ",1)) { - log_warnsys("stralloc") ; - goto err ; - } - } - other_deps.len-- ; - - if (!stralloc_0(&other_deps)) { - log_warnsys("stralloc") ; - goto err ; - } - - res.optsdeps = resolve_add_string(wres,other_deps.s) ; - } - - if (res.nextdeps) - { - other_deps.len = 0 ; - id = services->cname.idext, nid = res.nextdeps ; - for (;nid; id += strlen(deps.s + id) + 1, nid--) { - - if (!stralloc_catb(&other_deps,deps.s + id,strlen(deps.s + id)) || - !stralloc_catb(&other_deps," ",1)){ - log_warnsys("stralloc") ; - goto err ; - } - } - other_deps.len-- ; - - if (!stralloc_0(&other_deps)){ - log_warnsys("stralloc") ; - goto err ; - } - - res.extdeps = resolve_add_string(wres,other_deps.s) ; - } - - if (res.ncontents) { - - other_deps.len = 0 ; - id = services->cname.idcontents, nid = res.ncontents ; - for (;nid; id += strlen(deps.s + id) + 1, nid--) { - - if (!stralloc_catb(&other_deps,deps.s + id,strlen(deps.s + id)) || - !stralloc_catb(&other_deps," ",1)) { - log_warnsys("stralloc") ; - goto err ; - } - } - other_deps.len-- ; - if (!stralloc_0(&other_deps)) { - log_warnsys("stralloc") ; - goto err ; - } - res.contents = resolve_add_string(wres,other_deps.s) ; - } - - if (services->opts[0]) { - - // destination of the logger - if (services->type.classic_longrun.log.destination < 0) { - - if(info->owner > 0) { - - if (!auto_stra(&destlog, get_userhome(info->owner), "/", SS_LOGGER_USERDIR, name)) { - log_warnsys("stralloc") ; - goto err ; - } - - } else { - - if (!auto_stra(&destlog, SS_LOGGER_SYSDIR, name)) { - log_warnsys("stralloc") ; - goto err ; - } - } - - } else { - - if (!auto_stra(&destlog,keep.s + services->type.classic_longrun.log.destination)) { - log_warnsys("stralloc") ; - goto err ; - } - } - - res.dstlog = resolve_add_string(wres,destlog.s) ; - - if ((res.type == TYPE_CLASSIC) || (res.type == TYPE_LONGRUN)) { - - auto_strings(logname, name, SS_LOG_SUFFIX) ; - auto_strings(logreal, name) ; - - if (res.type == TYPE_CLASSIC) { - auto_strings(logreal + namelen, "/log") ; - - } else { - - auto_strings(logreal + namelen,"-log") ; - } - - res.logger = resolve_add_string(wres,logname) ; - res.logreal = resolve_add_string(wres,logreal) ; - if (ndeps.len) - ndeps.len--; - - if (!stralloc_catb(&ndeps," ",1) || - !stralloc_cats(&ndeps,res.sa.s + res.logger) || - !stralloc_0(&ndeps)) { - log_warnsys("stralloc") ; - goto err ; - } - - res.depends = resolve_add_string(wres,ndeps.s) ; - - if (res.type == TYPE_CLASSIC) { - - res.ndepends = 1 ; - - } else if (res.type == TYPE_LONGRUN) { - - res.ndepends += 1 ; - } - - if (services->type.classic_longrun.log.run.exec >= 0) - res.exec_log_run = resolve_add_string(wres,keep.s + services->type.classic_longrun.log.run.exec) ; - - if (services->type.classic_longrun.log.run.real_exec >= 0) - res.real_exec_log_run = resolve_add_string(wres,keep.s + services->type.classic_longrun.log.run.real_exec) ; - - if (!service_resolve_setlognwrite(&res,dst)) - goto err ; - } - } - - if (!resolve_write(wres,dst,res.sa.s + res.name)) { - - log_warnusys("write resolve file: ",dst,SS_RESOLVE,"/",res.sa.s + res.name) ; - goto err ; - } - - e = 1 ; - - err: - resolve_free(wres) ; - stralloc_free(&ndeps) ; - stralloc_free(&other_deps) ; - stralloc_free(&destlog) ; - return e ; -} diff --git a/src/lib66/state/state_check_flags.c b/src/lib66/state/state_check_flags.c deleted file mode 100644 index 1daf6391..00000000 --- a/src/lib66/state/state_check_flags.c +++ /dev/null @@ -1,47 +0,0 @@ -/* - * state_check_flags.c - * - * Copyright (c) 2018-2021 Eric Vidal <eric@obarun.org> - * - * All rights reserved. - * - * This file is part of Obarun. It is subject to the license terms in - * the LICENSE file found in the top-level directory of this - * distribution. - * This file may not be copied, modified, propagated, or distributed - * except according to the terms contained in the LICENSE file./ - */ - -#include <oblibs/log.h> - -#include <66/state.h> - -int state_check_flags(char const *src, char const *name,int flags) -{ - log_flow() ; - - /** unitialized at all, all flags == 0. - * Return -1 to make a distinction between - * file absent and flag == 0. */ - if (!state_check(src,name)) - return -1 ; - - ss_state_t sta = STATE_ZERO ; - - if (!state_read(&sta,src,name)) - // should not happen - return -1 ; - - switch (flags) - { - case SS_FLAGS_RELOAD: return sta.reload ; - case SS_FLAGS_INIT: return sta.init ; - case SS_FLAGS_UNSUPERVISE: return sta.unsupervise ; - case SS_FLAGS_STATE: return sta.state ; - case SS_FLAGS_PID: return sta.pid ; - default: - // should never happen - return -1 ; - } - -} diff --git a/src/lib66/state/state_setflag.c b/src/lib66/state/state_setflag.c deleted file mode 100644 index 946668ce..00000000 --- a/src/lib66/state/state_setflag.c +++ /dev/null @@ -1,34 +0,0 @@ -/* - * state_setflag.c - * - * Copyright (c) 2018-2021 Eric Vidal <eric@obarun.org> - * - * All rights reserved. - * - * This file is part of Obarun. It is subject to the license terms in - * the LICENSE file found in the top-level directory of this - * distribution. - * This file may not be copied, modified, propagated, or distributed - * except according to the terms contained in the LICENSE file./ - */ - -#include <stdint.h> - -#include <oblibs/log.h> - -#include <66/state.h> - -void state_setflag(ss_state_t *sta,int flags,int flags_val) -{ - log_flow() ; - - switch (flags) - { - case SS_FLAGS_RELOAD: sta->reload = flags_val ; break ; - case SS_FLAGS_INIT: sta->init = flags_val ; break ; - case SS_FLAGS_UNSUPERVISE: sta->unsupervise = flags_val ; break ; - case SS_FLAGS_STATE: sta->state = flags_val ; break ; - case SS_FLAGS_PID: sta->pid = (uint32_t)flags_val ; break ; - default: return ; - } -} diff --git a/src/lib66/svc/svc_init.c b/src/lib66/svc/svc_init.c deleted file mode 100644 index b1339576..00000000 --- a/src/lib66/svc/svc_init.c +++ /dev/null @@ -1,197 +0,0 @@ -/* - * svc_init.c - * - * Copyright (c) 2018-2021 Eric Vidal <eric@obarun.org> - * - * All rights reserved. - * - * This file is part of Obarun. It is subject to the license terms in - * the LICENSE file found in the top-level directory of this - * distribution. - * This file may not be copied, modified, propagated, or distributed - * except according to the terms contained in the LICENSE file./ - */ - -#include <66/svc.h> - -#include <string.h> -#include <stdlib.h> - -#include <oblibs/log.h> -#include <oblibs/string.h> -#include <oblibs/types.h> -#include <oblibs/sastr.h> - -#include <skalibs/genalloc.h> -#include <skalibs/types.h> -#include <skalibs/tai.h> -#include <skalibs/djbunix.h> -#include <skalibs/posixplz.h>//touch - -#include <s6/supervise.h> -#include <s6/ftrigr.h> -#include <s6/ftrigw.h> - -#include <66/utils.h> -#include <66/resolve.h> -#include <66/constants.h> -#include <66/ssexec.h> -#include <66/state.h> - -#define FLAGS_INIT_EARLIER 1 -#define FLAGS_INIT_DOWN (1 << 1) -/** - * @init: array of resolve files of services - * @len: length of the @init array - * @flags: FLAGS_INIT_DOWN -> remove down file, FLAGS_INIT_EARLIER -> earlier services - * */ -int svc_init(ssexec_t *info, resolve_service_t *init, unsigned int len, uint8_t flags) -{ - log_flow() ; - - uint8_t earlier = FLAGS_ISSET(flags, FLAGS_INIT_EARLIER) ; - uint8_t down = FLAGS_ISSET(flags, FLAGS_INIT_DOWN) ; - gid_t gid = getgid() ; - int r, e = 0 ; - unsigned int pos = 0, nsv = 0 ; - unsigned int real[len] ; - unsigned int down[len] ; - ss_state_t sta = STATE_ZERO ; - - for (; pos < len ; pos++) - down[pos] = 0 ; - - for (pos = 0 ; pos < len ; pos++) { - - char *string = init[pos].sa.s ; - char *name = string + init[pos].name ; - size_t namelen = strlen(name) ; - size_t treenamelen = strlen(init[pos].treename) ; - - if (!create_live_state(info, init[pos].treename)) - log_warnusys_return(LOG_EXIT_ZERO, "create the live directory of states") ; - - if (!earlier && s6_svc_ok(string + init[pos].runat)) { - log_info("Skipping: ", name," -- already initialized") ; - continue ; - } - - char svsrc[info->base.len + SS_SYSTEM_LEN + 1 + treenamelen + SS_SVDIRS_LEN + SS_SVC_LEN + 1 + namelen + 1] ; - auto_strings(svsrc, info->base.s, SS_SYSTEM_LEN, "/", treenamelen, SS_SVDIRS, SS_SVC, "/", name) ; - - size_t runatlen = string + init[pos].runat ; - char scandir[runatlen + 6 + 1] ; // +6 event directory name - auto_strings(scandir, string + init[pos].runat) ; - - r = scan_mode(scandir, S_IFDIR) ; - if (r < 0) - log_warnsys_return(LOG_EXIT_ZERO, "conflicting format for: ", scandir) ; - - if (!r) { - - log_trace("copy: ",svsrc, " to ", scandir) ; - if (!hiercopy(svsrc, scandir)) - log_warnusys_return(LOG_EXIT_ZERO, "copy: ",svsrc," to: ",scandir) ; - } - - auto_strings(scandir + runatlen, "/down") ; - fd = open_trunc(scandir) ; - if (fd < 0) - log_warnusys_return(LOG_EXIT_ZERO, "create down file: ", scandir) ; - fd_close(fd) ; - - if (!init[pos].down) - down[nsv] = 1 ; - - if (!earlier) { - - auto_strings(scandir + runatlen, "/event") ; - - log_trace("create fifo: ",scandir) ; - if (!ftrigw_fifodir_make(scandir, gid, 0)) - log_warnusys_return(LOG_EXIT_ZERO, "create fifo: ",scandir) ; - } - - real[nsv++] = init[pos] ; - } - - if (!earlier) { - - ftrigr_t fifo = FTRIGR_ZERO ; - uint16_t ids[len] ; - unsigned int nids = 0 ; - - tain deadline ; - tain_now_set_stopwatch_g() ; - tain_addsec(&deadline, &STAMP, 2) ; - - if (!ftrigr_startf_g(&fifo, &deadline)) - goto err ; - - for (pos = 0 ; pos < nsv ; pos++) { - - char *string = init[real[pos]].sa.s ; - size_t runatlen = string + init[real[pos]].runat ; - char scandir[runatlen + 6 + 1] ; // +6 event directory name - auto_strings(scandir, string + init[real[pos]].runat) ; - - log_trace("subcribe to fifo: ", scandir) ; - /** unsubscribe automatically, options is 0 */ - ids[nids] = ftrigr_subscribe_g(&fifo, scandir, "s", 0, &deadline) ; - if (!ids[nids++]) { - log_warnusys("subcribe to fifo: ", scandir) ; - goto err ; - } - } - - if (nids) { - log_trace("reload scandir: ", info->scandir.s) ; - if (scandir_send_signal(info->scandir.s, "h") <= 0) { - log_warnusys("reload scandir: ", info->scandir.s) ; - goto err ; - } - - log_trace("waiting for events on fifo") ; - if (ftrigr_wait_and_g(&fifo, ids, nids, &deadline) < 0) - goto err ; - } - } - - for (pos = 0 ; pos < nsv ; pos++) { - - char const *string = init[real[pos]].sa.s ; - char const *name = string + init[real[pos]].name ; - char const *state = string + init[real[pos]].state ; - - log_trace("Write state file of: ", name) ; - state_setflag(&sta, SS_FLAGS_RELOAD, SS_FLAGS_FALSE) ; - state_setflag(&sta, SS_FLAGS_INIT, SS_FLAGS_FALSE) ; - state_setflag(&sta, SS_FLAGS_STATE, SS_FLAGS_UNKNOWN) ; - state_setflag(&sta, SS_FLAGS_PID, SS_FLAGS_UNKNOWN) ; - - if (!state_write(&sta,state,name)) { - - log_warnusys("write state file of: ",name) ; - goto err ; - } - - if (down[pos] && down) { - - size_t runatlen = string + init[down[pos]].runat ; - char file[runatlen + 5 + 1] ; - auto_strings(file, string + init[down[pos]].runat, "/down") ; - - log_trace("delete down file: ", file) ; - if (unlink(file) < 0 && errno != ENOENT) { - log_warnusys("delete down file: ", file) - } - } - log_info("Initialized successfully: ",name) ; - } - - e = 1 ; - - err: - ftrigr_end(&fifo) ; - return e ; -} diff --git a/src/lib66/svc/svc_switch_to.c b/src/lib66/svc/svc_switch_to.c deleted file mode 100644 index 82d8ae8b..00000000 --- a/src/lib66/svc/svc_switch_to.c +++ /dev/null @@ -1,82 +0,0 @@ -/* - * svc_switch_to.c - * - * Copyright (c) 2018-2021 Eric Vidal <eric@obarun.org> - * - * All rights reserved. - * - * This file is part of Obarun. It is subject to the license terms in - * the LICENSE file found in the top-level directory of this - * distribution. - * This file may not be copied, modified, propagated, or distributed - * except according to the terms contained in the LICENSE file./ - */ - - -#include <oblibs/log.h> - -#include <string.h> - -#include <skalibs/types.h> - -#include <66/backup.h> -#include <66/utils.h> -#include <66/enum.h> -#include <66/ssexec.h> - -/** 1-> backup - * 0-> ori */ -int svc_switch_to(ssexec_t *info,unsigned int where) -{ - log_flow() ; - - int r ; - - char type[UINT_FMT] ; - size_t typelen = uint_fmt(type, TYPE_CLASSIC) ; - type[typelen] = 0 ; - size_t cmdlen ; - char cmd[typelen + 6 + 1] ; - memcpy(cmd,"-t",2) ; - memcpy(cmd + 2,type,typelen) ; - cmdlen = 2 + typelen ; - memcpy(cmd + cmdlen," -b",3) ; - cmd[cmdlen + 3] = 0 ; - - r = backup_cmd_switcher(VERBOSITY,cmd,info) ; - if (r < 0) - log_warnusys_return(LOG_EXIT_ZERO,"find origin of svc service for: ",info->treename.s) ; - - // point to origin - if (!r && where) - { - log_trace("make a backup of svc service for: ",info->treename.s) ; - if (!backup_make_new(info,TYPE_CLASSIC)) - log_warnusys_return(LOG_EXIT_ZERO,"make a backup of svc service for: ",info->treename.s) ; - - log_trace("switch svc symlink of tree: ",info->treename.s," to backup") ; - memcpy(cmd + cmdlen," -s1",4) ; - cmd[cmdlen + 4] = 0 ; - r = backup_cmd_switcher(VERBOSITY,cmd,info) ; - if (r < 0) - { - log_warnusys("switch svc symlink of tree: ",info->treename.s," to backup") ; - } - } - else if (r > 0 && !where) - { - log_trace("switch svc symlink of tree: ",info->treename.s," to source") ; - memcpy(cmd + cmdlen," -s0",4) ; - cmd[cmdlen + 4] = 0 ; - r = backup_cmd_switcher(VERBOSITY,cmd,info) ; - if (r < 0) - { - log_warnusys("switch svc symlink of tree: ",info->treename.s," to source") ; - } - - log_trace("make a backup of svc service for: ",info->treename.s) ; - if (!backup_make_new(info,TYPE_CLASSIC)) - log_warnusys_return(LOG_EXIT_ZERO,"make a backup of svc service for: ",info->treename.s) ; - } - return 1 ; -} diff --git a/src/lib66/tree/tree_cmd_state.c b/src/lib66/tree/tree_cmd_state.c deleted file mode 100644 index 5d8ae727..00000000 --- a/src/lib66/tree/tree_cmd_state.c +++ /dev/null @@ -1,235 +0,0 @@ -/* - * tree_cmd_state.c - * - * Copyright (c) 2018-2021 Eric Vidal <eric@obarun.org> - * - * All rights reserved. - * - * This file is part of Obarun. It is subject to the license terms in - * the LICENSE file found in the top-level directory of this - * distribution. - * This file may not be copied, modified, propagated, or distributed - * except according to the terms contained in the LICENSE file./ - */ - -#include <errno.h> -#include <string.h> -#include <sys/stat.h> - -#include <oblibs/obgetopt.h> -#include <oblibs/log.h> -#include <oblibs/string.h> -#include <oblibs/types.h> -#include <oblibs/files.h> -#include <oblibs/sastr.h> - -#include <skalibs/stralloc.h> -#include <skalibs/types.h> -#include <skalibs/djbunix.h> - -#include <66/utils.h> -#include <66/constants.h> - -//USAGE "tree_state [ -v verbosity ] [ -a add ] [ -d delete ] [ -s search ] tree" - -int tree_state(int argc, char const *const *argv) -{ - log_flow() ; - - int r, fd,skip = -1 ; - unsigned int add, del, sch, verbosity, err ; - size_t statesize = 0, treelen, statelen, pos = 0 ; - uid_t owner = MYUID ; - char const *tree = 0 ; - - verbosity = 1 ; - add = del = sch = err = 0 ; - { - subgetopt l = SUBGETOPT_ZERO ; - - for (;;) - { - int opt = getopt_args(argc,argv, "v:sad", &l) ; - if (opt == -1) break ; - if (opt == -2) log_warn_return(LOG_EXIT_ZERO,"options must be set first") ; - switch (opt) - { - case 'v' : if (!uint0_scan(l.arg, &verbosity)) return 0 ; break ; - case 'a' : add = 1 ; if (del) return 0 ; break ; - case 'd' : del = 1 ; if (add) return 0 ; break ; - case 's' : sch = 1 ; break ; - default : return 0 ; - } - } - argc -= l.ind ; argv += l.ind ; - } - - if (argc < 1) return 0 ; - - stralloc base = STRALLOC_ZERO ; - stralloc contents = STRALLOC_ZERO ; - - tree = *argv ; - treelen = strlen(tree) ; - - if (!set_ownersysdir(&base,owner)) - { - log_warnusys("set owner directory") ; - stralloc_free(&base) ; - stralloc_free(&contents) ; - return 0 ; - } - /** /system/state */ - char state[base.len + SS_SYSTEM_LEN + SS_STATE_LEN + 1] ; - memcpy(state,base.s,base.len) ; - memcpy(state + base.len,SS_SYSTEM,SS_SYSTEM_LEN) ; - memcpy(state + base.len + SS_SYSTEM_LEN, SS_STATE ,SS_STATE_LEN) ; - statelen = base.len + SS_SYSTEM_LEN + SS_STATE_LEN ; - state[statelen] = 0 ; - - r = scan_mode(state,S_IFREG) ; - if (r == -1) { errno = EEXIST ; goto out ; } - if (!r) - { - log_warnusys("find: ",state) ; - goto out ; - } - - statesize = file_get_size(state) ; - r = openreadfileclose(state,&contents,statesize) ; - if(!r) - { - log_warnusys("open: ", state) ; - goto out ; - } - - if (contents.len) - { - if (!sastr_split_string_in_nline(&contents)) goto out ; - } - - if (add) - { - if (sastr_cmp(&contents,tree) == -1) - { - fd = open_append(state) ; - if (fd < 0) - { - log_warnusys("open: ",state) ; - goto out ; - } - r = write(fd, tree,treelen); - r = write(fd, "\n",1); - if (r < 0) - { - log_warnusys("write: ",state," with ", tree," as content") ; - fd_close(fd) ; - goto out ; - } - fd_close(fd) ; - } - else - { - err = 2 ; - goto out ; - } - } - - if (del) - { - skip = sastr_cmp(&contents,tree) ; - if (skip >= 0) - { - fd = open_trunc(state) ; - if (fd < 0) - { - log_warnusys("open_trunc ", state) ; - goto out ; - } - - /*** replace it by write_file_unsafe*/ - for (;pos < contents.len ; pos += strlen(contents.s + pos) + 1) - { - if (pos == (size_t)skip) continue ; - char *name = contents.s + pos ; - size_t namelen = strlen(contents.s + pos) ; - r = write(fd, name,namelen); - if (r < 0) - { - log_warnusys("write: ",state," with ", name," as content") ; - fd_close(fd) ; - goto out ; - } - r = write(fd, "\n",1); - if (r < 0) - { - log_warnusys("write: ",state," with ", name," as content") ; - fd_close(fd) ; - goto out ; - } - } - fd_close(fd) ; - } - else - { - err = 2 ; - goto out ; - } - } - if (sch) - { - if (sastr_cmp(&contents,tree) >= 0) - { - err = 1 ; - goto out ; - } - else - { - err = 2 ; - goto out ; - } - } - err = 1 ; - out: - stralloc_free(&base) ; - stralloc_free(&contents) ; - - return err ; -} - -int tree_cmd_state(unsigned int verbosity,char const *cmd, char const *tree) -{ - log_flow() ; - - int r ; - size_t pos = 0 ; - stralloc opts = STRALLOC_ZERO ; - - if (!sastr_clean_string(&opts,cmd)) - { - log_warnu("clean: ",cmd) ; - stralloc_free(&opts) ; - return 0 ; - } - int newopts = 5 + sastr_len(&opts) ; - char const *newargv[newopts] ; - unsigned int m = 0 ; - char fmt[UINT_FMT] ; - fmt[uint_fmt(fmt, verbosity)] = 0 ; - - newargv[m++] = "tree_state" ; - newargv[m++] = "-v" ; - newargv[m++] = fmt ; - - for (;pos < opts.len; pos += strlen(opts.s + pos) + 1) - newargv[m++] = opts.s + pos ; - - newargv[m++] = tree ; - newargv[m++] = 0 ; - - r = tree_state(newopts,newargv) ; - - stralloc_free(&opts) ; - - return r ; -} diff --git a/src/lib66/tree/tree_copy.c b/src/lib66/tree/tree_copy.c deleted file mode 100644 index b10d3c59..00000000 --- a/src/lib66/tree/tree_copy.c +++ /dev/null @@ -1,42 +0,0 @@ -/* - * tree_copy.c - * - * Copyright (c) 2018-2021 Eric Vidal <eric@obarun.org> - * - * All rights reserved. - * - * This file is part of Obarun. It is subject to the license terms in - * the LICENSE file found in the top-level directory of this - * distribution. - * This file may not be copied, modified, propagated, or distributed - * except according to the terms contained in the LICENSE file./ - */ - -#include <66/tree.h> - -#include <string.h> - -#include <oblibs/string.h> -#include <oblibs/directory.h> -#include <oblibs/log.h> - -#include <skalibs/djbunix.h> - -#include <66/constants.h> - -int tree_copy(stralloc *dir, char const *tree,char const *treename) -{ - log_flow() ; - - char *fdir = 0 ; - size_t treelen = strlen(tree) ; - char tmp[treelen + SS_SVDIRS_LEN + 1] ; - auto_strings(tmp, tree, SS_SVDIRS) ; - - fdir = dir_create_tmp(dir,"/tmp",treename) ; - if (!fdir) return 0 ; - - if (!hiercopy(tmp,fdir)) return 0 ; - - return 1 ; -} diff --git a/src/lib66/tree/tree_copy_tmp.c b/src/lib66/tree/tree_copy_tmp.c deleted file mode 100644 index 9d17c514..00000000 --- a/src/lib66/tree/tree_copy_tmp.c +++ /dev/null @@ -1,175 +0,0 @@ -/* - * tree_copy_tmp.c - * - * Copyright (c) 2018-2021 Eric Vidal <eric@obarun.org> - * - * All rights reserved. - * - * This file is part of Obarun. It is subject to the license terms in - * the LICENSE file found in the top-level directory of this - * distribution. - * This file may not be copied, modified, propagated, or distributed - * except according to the terms contained in the LICENSE file./ - */ - -#include <66/tree.h> - -#include <string.h> - -#include <oblibs/string.h> -#include <oblibs/log.h> -#include <oblibs/directory.h> -#include <oblibs/types.h> - -#include <skalibs/stralloc.h> -#include <skalibs/djbunix.h> - -#include <66/constants.h> -#include <66/enum.h> -#include <66/utils.h> -#include <66/ssexec.h> -#include <66/resolve.h> - -void err(unsigned int *e, unsigned int msg,char const *resolve,char const *swap, char const *svdir) -{ - switch (msg) - { - case 0: log_warnu("set revolve pointer to source") ; - break ; - case 1: log_warnu("set revolve pointer to backup") ; - break ; - case 2: log_warnu("copy : ",svdir," to ", resolve) ; - break ; - case 3: log_warnu("remove directory: ", svdir) ; - break ; - case 4: log_warnu("set revolve pointer to live") ; - break ; - default: break ; - } - *e = 0 ; -} - -int tree_copy_tmp(char const *workdir, ssexec_t *info) -{ - log_flow() ; - - stralloc saresolve = STRALLOC_ZERO ; - stralloc swap = STRALLOC_ZERO ; - unsigned int e = 1 ; - size_t svdirlen ; - - char svdir[info->tree.len + SS_SVDIRS_LEN + SS_RESOLVE_LEN + 1] ; - memcpy(svdir,info->tree.s,info->tree.len) ; - memcpy(svdir + info->tree.len,SS_SVDIRS,SS_SVDIRS_LEN) ; - svdirlen = info->tree.len + SS_SVDIRS_LEN ; - memcpy(svdir + svdirlen,SS_SVC, SS_SVC_LEN) ; - svdir[svdirlen + SS_SVC_LEN] = 0 ; - - /** svc */ - if (rm_rf(svdir) < 0) - { - if (!sa_pointo(&saresolve,info,TYPE_CLASSIC,SS_RESOLVE_SRC)) - { - err(&e,0,saresolve.s,swap.s,svdir) ; - goto err ; - } - if (!sa_pointo(&swap,info,TYPE_CLASSIC,SS_RESOLVE_BACK)) - { - err(&e,1,saresolve.s,swap.s,svdir) ; - goto err ; - } - if (!hiercopy(swap.s,saresolve.s)) - { - err(&e,2,saresolve.s,swap.s,svdir) ; - goto err ; - } - err(&e,3,saresolve.s,swap.s,svdir) ; - goto err ; - } - - /** db */ - memcpy(svdir + svdirlen,SS_DB, SS_DB_LEN) ; - svdir[svdirlen + SS_DB_LEN] = 0 ; - if (rm_rf(svdir) < 0) - { - if (!sa_pointo(&saresolve,info,TYPE_LONGRUN,SS_RESOLVE_SRC)) - { - err(&e,0,saresolve.s,swap.s,svdir) ; - goto err ; - } - if (!sa_pointo(&swap,info,TYPE_LONGRUN,SS_RESOLVE_BACK)) - { - err(&e,1,saresolve.s,swap.s,svdir) ; - goto err ; - } - if (!hiercopy(swap.s,saresolve.s)) - { - err(&e,2,saresolve.s,swap.s,svdir) ; - goto err ; - } - err(&e,3,saresolve.s,swap.s,svdir) ; - goto err ; - } - - /** resolve */ - memcpy(svdir + svdirlen,SS_RESOLVE,SS_RESOLVE_LEN) ; - svdir[svdirlen + SS_RESOLVE_LEN] = 0 ; - - if (rm_rf(svdir) < 0) - { - if (!sa_pointo(&saresolve,info,SS_NOTYPE,SS_RESOLVE_SRC)) - { - err(&e,0,saresolve.s,swap.s,svdir) ; - goto err ; - } - saresolve.len--; - if (!stralloc_cats(&saresolve,SS_RESOLVE)) log_warnsys_return(LOG_EXIT_ZERO,"tree_copy_tmp") ; - if (!stralloc_0(&saresolve)) log_warnsys_return(LOG_EXIT_ZERO,"tree_copy_tmp") ; - - if (!sa_pointo(&swap,info,SS_NOTYPE,SS_RESOLVE_BACK)) - { - err(&e,1,saresolve.s,swap.s,svdir) ; - goto err ; - } - swap.len--; - if (!stralloc_cats(&swap,SS_RESOLVE)) log_warnsys_return(LOG_EXIT_ZERO,"tree_copy_tmp") ; - if (!stralloc_0(&swap)) log_warnsys_return(LOG_EXIT_ZERO,"tree_copy_tmp") ; - if (!hiercopy(swap.s,saresolve.s)) - { - err(&e,2,saresolve.s,swap.s,svdir) ; - goto err ; - } - err(&e,3,saresolve.s,swap.s,svdir) ; - goto err ; - } - - - svdir[svdirlen] = 0 ; - - if (!hiercopy(workdir,svdir)) - { - if (!sa_pointo(&saresolve,info,SS_NOTYPE,SS_RESOLVE_SRC)) - { - err(&e,0,saresolve.s,swap.s,svdir) ; - goto err ; - } - if (!sa_pointo(&swap,info,SS_NOTYPE,SS_RESOLVE_BACK)) - { - err(&e,1,saresolve.s,swap.s,svdir) ; - goto err ; - } - if (!hiercopy(swap.s,saresolve.s)) - { - err(&e,2,saresolve.s,swap.s,svdir) ; - goto err ; - } - err(&e,2,saresolve.s,swap.s,svdir) ; - goto err ; - } - - err: - stralloc_free(&saresolve) ; - stralloc_free(&swap) ; - - return e ; -} diff --git a/src/lib66/utils/create_live_state.c b/src/lib66/utils/create_live_state.c deleted file mode 100644 index b7b66411..00000000 --- a/src/lib66/utils/create_live_state.c +++ /dev/null @@ -1,57 +0,0 @@ -/* - * create_live_state.c - * - * Copyright (c) 2018-2021 Eric Vidal <eric@obarun.org> - * - * All rights reserved. - * - * This file is part of Obarun. It is subject to the license terms in - * the LICENSE file found in the top-level directory of this - * distribution. - * This file may not be copied, modified, propagated, or distributed - * except according to the terms contained in the LICENSE file./ - */ - -#include <sys/types.h> -#include <unistd.h> - -#include <oblibs/log.h> -#include <oblibs/string.h> -#include <oblibs/types.h> -#include <oblibs/directory.h> - -#include <66/ssexec.h> -#include <66/utils.h> -#include <66/constants.h> - -int create_live_state(ssexec_t *info, char const *treename) -{ - log_flow() ; - - int r ; - - gid_t gidowner ; - size_t treenamelen = strlen(treename) ; - char ste[info->live.len + SS_STATE_LEN + 1 + info->ownerlen + 1 + treenamelen + 1] ; - - if (!yourgid(&gidowner, info->owner)) - log_warnusys_return(LOG_EXIT_ZERO, "get gid of: ", info->ownerstr) ; - - auto_strings(ste, info->live.s, SS_STATE + 1, "/", info->ownerstr, "/", treename) ; - - r = scan_mode(ste, S_IFDIR) ; - if (r < 0) - log_warnsys_return(LOG_EXIT_ZERO, "conflicting format for: ", ste) ; - if (!r) { - - r = dir_create_parent(ste, 0700) ; - if (!r) - log_warnusys_return(LOG_EXIT_ZERO, "create directory: ", ste) ; - - ste[info->live.len + SS_STATE_LEN + info->ownerlen + 1] = 0 ; - if (chown(ste, info->owner, gidowner) < 0) - log_warnusys_return(LOG_EXIT_ZERO, "chown: ", ste) ; - } - - return 1 ; -} diff --git a/src/lib66/utils/create_live_tree.c b/src/lib66/utils/create_live_tree.c deleted file mode 100644 index a5edc61b..00000000 --- a/src/lib66/utils/create_live_tree.c +++ /dev/null @@ -1,46 +0,0 @@ -/* - * create_live_tree.c - * - * Copyright (c) 2018-2021 Eric Vidal <eric@obarun.org> - * - * All rights reserved. - * - * This file is part of Obarun. It is subject to the license terms in - * the LICENSE file found in the top-level directory of this - * distribution. - * This file may not be copied, modified, propagated, or distributed - * except according to the terms contained in the LICENSE file./ - */ - -#include <sys/types.h> -#include <unistd.h> - -#include <oblibs/log.h> -#include <oblibs/string.h> -#include <oblibs/types.h> -#include <oblibs/directory.h> - -#include <66/ssexec.h> -#include <66/utils.h> -#include <66/constants.h> - -int create_live_tree(ssexec_t *info) -{ - log_flow() ; - - int r = scan_mode(info->livetree.s, S_IFDIR) ; - if (r < 0) - log_warn_return(LOG_EXIT_ZERO, "conflicting format for: ", info->livetree.s) ; - if (!r) { - - log_trace("create directory: ", info->livetree.s) ; - if (!dir_create(info->livetree.s, 0700)) - log_warnusys_return(LOG_EXIT_ZERO, "create directory: ", info->livetree.s) ; - - log_trace("chown directory: ", info->livetree.s) ; - if (chown(info->livetree.s,info->owner,gidowner) < 0) - log_warnusys_return(LOG_EXIT_SYS, "chown directory: ", info->livetree.s) ; - } - - return 1 ; -} diff --git a/src/lib66/utils/set_livetree.c b/src/lib66/utils/set_livetree.c deleted file mode 100644 index 0b50e821..00000000 --- a/src/lib66/utils/set_livetree.c +++ /dev/null @@ -1,42 +0,0 @@ -/* - * set_livetree.c - * - * Copyright (c) 2018-2021 Eric Vidal <eric@obarun.org> - * - * All rights reserved. - * - * This file is part of Obarun. It is subject to the license terms in - * the LICENSE file found in the top-level directory of this - * distribution. - * This file may not be copied, modified, propagated, or distributed - * except according to the terms contained in the LICENSE file./ - */ - -#include <oblibs/log.h> - -#include <skalibs/types.h> -#include <skalibs/stralloc.h> - -#include <66/utils.h> -#include <66/constants.h> - -int set_livetree(stralloc *livetree,uid_t owner) -{ - log_flow() ; - - int r ; - char ownerpack[UID_FMT] ; - - r = set_livedir(livetree) ; - if (r < 0) return -1 ; - if (!r) return 0 ; - - size_t ownerlen = uid_fmt(ownerpack,owner) ; - ownerpack[ownerlen] = 0 ; - - if (!stralloc_cats(livetree,SS_TREE "/")) log_warnsys_return(LOG_EXIT_ZERO,"stralloc") ; - if (!stralloc_cats(livetree,ownerpack)) log_warnsys_return(LOG_EXIT_ZERO,"stralloc") ; - if (!stralloc_0(livetree)) log_warnsys_return(LOG_EXIT_ZERO,"stralloc") ; - livetree->len--; - return 1 ; -} -- GitLab