Skip to content
Snippets Groups Projects
Commit 57187800 authored by Eric Vidal's avatar Eric Vidal :speech_balloon:
Browse files

switch execl-toc to 66-tools package

parent 71dbd8c8
No related branches found
No related tags found
No related merge requests found
......@@ -30,7 +30,6 @@ src/extra-tools/66-echo.o src/extra-tools/66-echo.lo: src/extra-tools/66-echo.c
src/extra-tools/66-nuke.o src/extra-tools/66-nuke.lo: src/extra-tools/66-nuke.c
src/extra-tools/66-umountall.o src/extra-tools/66-umountall.lo: src/extra-tools/66-umountall.c src/include/66/config.h
src/extra-tools/execl-envfile.o src/extra-tools/execl-envfile.lo: src/extra-tools/execl-envfile.c
src/extra-tools/execl-toc.o src/extra-tools/execl-toc.lo: src/extra-tools/execl-toc.c
src/lib66/enum/enum.o src/lib66/enum/enum.lo: src/lib66/enum/enum.c src/include/66/enum.h
src/lib66/environ/env_append_version.o src/lib66/environ/env_append_version.lo: src/lib66/environ/env_append_version.c src/include/66/environ.h
src/lib66/environ/env_check_version.o src/lib66/environ/env_check_version.lo: src/lib66/environ/env_check_version.c src/include/66/constants.h src/include/66/environ.h
......@@ -273,8 +272,6 @@ src/lib66/write/write_uint.o src/lib66/write/write_uint.lo: src/lib66/write/writ
66-umountall: src/extra-tools/66-umountall.o
execl-envfile: EXTRA_LIBS := -loblibs -lexecline -lskarnet
execl-envfile: src/extra-tools/execl-envfile.o ${LIBEXECLINE}
execl-toc: EXTRA_LIBS := -loblibs -lskarnet
execl-toc: src/extra-tools/execl-toc.o
ifeq ($(strip $(STATIC_LIBS_ARE_PIC)),)
lib66.a.xyzzy: src/lib66/enum/enum.o src/lib66/environ/env_append_version.o src/lib66/environ/env_check_version.o src/lib66/environ/env_clean_with_comment.o src/lib66/environ/env_compute.o src/lib66/environ/env_find_current_version.o src/lib66/environ/env_get_destination.o src/lib66/environ/env_import_version_file.o src/lib66/environ/env_make_symlink.o src/lib66/environ/env_prepare_for_write.o src/lib66/environ/env_resolve_conf.o src/lib66/exec/ssexec_boot.o src/lib66/exec/ssexec_copy.o src/lib66/exec/ssexec_disable.o src/lib66/exec/ssexec_enable.o src/lib66/exec/ssexec_env.o src/lib66/exec/ssexec_free.o src/lib66/exec/ssexec_help.o src/lib66/exec/ssexec_init.o src/lib66/exec/ssexec_parse.o src/lib66/exec/ssexec_reconfigure.o src/lib66/exec/ssexec_reload.o src/lib66/exec/ssexec_resolve.o src/lib66/exec/ssexec_restart.o src/lib66/exec/ssexec_scandir_create.o src/lib66/exec/ssexec_scandir_remove.o src/lib66/exec/ssexec_scandir_signal.o src/lib66/exec/ssexec_scandir_wrapper.o src/lib66/exec/ssexec_shutdown_wrapper.o src/lib66/exec/ssexec_signal.o src/lib66/exec/ssexec_start.o src/lib66/exec/ssexec_state.o src/lib66/exec/ssexec_status.o src/lib66/exec/ssexec_stop.o src/lib66/exec/ssexec_tree_admin.o src/lib66/exec/ssexec_tree_resolve.o src/lib66/exec/ssexec_tree_signal.o src/lib66/exec/ssexec_tree_status.o src/lib66/exec/ssexec_tree_wrapper.o src/lib66/graph/graph_build_service.o src/lib66/graph/graph_build_tree.o src/lib66/graph/graph_compute_dependencies.o src/lib66/graph/graph_compute_visit.o src/lib66/graph/graph_remove_deps.o src/lib66/info/info_display_field_name.o src/lib66/info/info_display_list.o src/lib66/info/info_display_nline.o src/lib66/info/info_field_align.o src/lib66/info/info_getcols_fd.o src/lib66/info/info_graph_display.o src/lib66/info/info_graph_display_service.o src/lib66/info/info_graph_display_tree.o src/lib66/info/info_graph_init.o src/lib66/info/info_length_from_wchar.o src/lib66/info/info_walk.o src/lib66/instance/instance_check.o src/lib66/instance/instance_create.o src/lib66/instance/instance_splitname.o src/lib66/instance/instance_splitname_to_char.o src/lib66/module/get_list.o src/lib66/module/parse_module.o src/lib66/module/parse_module_check_dir.o src/lib66/module/regex_configure.o src/lib66/module/regex_get_file_name.o src/lib66/module/regex_get_regex.o src/lib66/module/regex_get_replace.o src/lib66/module/regex_rename.o src/lib66/module/regex_replace.o src/lib66/parse/parse_clean_line.o src/lib66/parse/parse_clean_list.o src/lib66/parse/parse_clean_quotes.o src/lib66/parse/parse_clean_runas.o src/lib66/parse/parse_compute_list.o src/lib66/parse/parse_compute_resolve.o src/lib66/parse/parse_contents.o src/lib66/parse/parse_db_migrate.o src/lib66/parse/parse_error.o src/lib66/parse/parse_frontend.o src/lib66/parse/parse_interdependences.o src/lib66/parse/parse_line_g.o src/lib66/parse/parse_mandatory.o src/lib66/parse/parse_parentheses.o src/lib66/parse/parse_rename_interdependences.o src/lib66/parse/parse_section.o src/lib66/parse/parse_service.o src/lib66/parse/parse_split_from_section.o src/lib66/parse/parse_store_environ.o src/lib66/parse/parse_store_g.o src/lib66/parse/parse_store_logger.o src/lib66/parse/parse_store_main.o src/lib66/parse/parse_store_regex.o src/lib66/parse/parse_store_start_stop.o src/lib66/resolve/resolve_add_cdb.o src/lib66/resolve/resolve_add_cdb_uint.o src/lib66/resolve/resolve_add_string.o src/lib66/resolve/resolve_check.o src/lib66/resolve/resolve_check_g.o src/lib66/resolve/resolve_find_cdb.o src/lib66/resolve/resolve_free.o src/lib66/resolve/resolve_get_field_tosa.o src/lib66/resolve/resolve_get_field_tosa_g.o src/lib66/resolve/resolve_init.o src/lib66/resolve/resolve_modify_field.o src/lib66/resolve/resolve_modify_field_g.o src/lib66/resolve/resolve_read.o src/lib66/resolve/resolve_read_cdb.o src/lib66/resolve/resolve_read_g.o src/lib66/resolve/resolve_remove.o src/lib66/resolve/resolve_remove_g.o src/lib66/resolve/resolve_set_struct.o src/lib66/resolve/resolve_write.o src/lib66/resolve/resolve_write_cdb.o src/lib66/resolve/resolve_write_g.o src/lib66/sanitize/sanitize_fdholder.o src/lib66/sanitize/sanitize_graph.o src/lib66/sanitize/sanitize_init.o src/lib66/sanitize/sanitize_livestate.o src/lib66/sanitize/sanitize_scandir.o src/lib66/sanitize/sanitize_source.o src/lib66/sanitize/sanitize_system.o src/lib66/sanitize/sanitize_write.o src/lib66/service/service_cmp_basedir.o src/lib66/service/service_db_migrate.o src/lib66/service/service_enable_disable.o src/lib66/service/service_endof_dir.o src/lib66/service/service_frontend_path.o src/lib66/service/service_frontend_src.o src/lib66/service/service_graph_build.o src/lib66/service/service_graph_collect.o src/lib66/service/service_graph_g.o src/lib66/service/service_is_g.o src/lib66/service/service_resolve_array_free.o src/lib66/service/service_resolve_array_search.o src/lib66/service/service_resolve_copy.o src/lib66/service/service_resolve_get_field_tosa.o src/lib66/service/service_resolve_modify_field.o src/lib66/service/service_resolve_write.o src/lib66/service/service_resolve_read_cdb.o src/lib66/service/service_resolve_write_remote.o src/lib66/service/service_resolve_write_cdb.o src/lib66/service/service_switch_tree.o src/lib66/shutdown/hpr_shutdown.o src/lib66/shutdown/hpr_wall.o src/lib66/shutdown/hpr_wallv.o src/lib66/state/state_check.o src/lib66/state/state_messenger.o src/lib66/state/state_pack.o src/lib66/state/state_read_remote.o src/lib66/state/state_read.o src/lib66/state/state_rmfile.o src/lib66/state/state_set_flag.o src/lib66/state/state_unpack.o src/lib66/state/state_write_remote.o src/lib66/state/state_write.o src/lib66/svc/svc_compute_ns.o src/lib66/svc/svc_init_array.o src/lib66/svc/svc_launch.o src/lib66/svc/svc_remove.o src/lib66/svc/svc_scandir_ok.o src/lib66/svc/svc_scandir_send.o src/lib66/svc/svc_send_fdholder.o src/lib66/svc/svc_send_wait.o src/lib66/svc/svc_unsupervise.o src/lib66/symlink/symlink_make.o src/lib66/symlink/symlink_switch.o src/lib66/tree/tree_find_current.o src/lib66/tree/tree_get_permissions.o src/lib66/tree/tree_iscurrent.o src/lib66/tree/tree_isenabled.o src/lib66/tree/tree_isinitialized.o src/lib66/tree/tree_issupervised.o src/lib66/tree/tree_isvalid.o src/lib66/tree/tree_ongroups.o src/lib66/tree/tree_resolve_array_search.o src/lib66/tree/tree_resolve_copy.o src/lib66/tree/tree_resolve_get_field_tosa.o src/lib66/tree/tree_resolve_master_copy.o src/lib66/tree/tree_resolve_master_create.o src/lib66/tree/tree_resolve_master_get_field_tosa.o src/lib66/tree/tree_resolve_master_modify_field.o src/lib66/tree/tree_resolve_master_read_cdb.o src/lib66/tree/tree_resolve_master_write_cdb.o src/lib66/tree/tree_resolve_modify_field.o src/lib66/tree/tree_resolve_read_cdb.o src/lib66/tree/tree_resolve_write_cdb.o src/lib66/tree/tree_seed_file_isvalid.o src/lib66/tree/tree_seed_free.o src/lib66/tree/tree_seed_get_group_permissions.o src/lib66/tree/tree_seed_get_key.o src/lib66/tree/tree_seed_isvalid.o src/lib66/tree/tree_seed_parse_file.o src/lib66/tree/tree_seed_resolve_path.o src/lib66/tree/tree_seed_setseed.o src/lib66/tree/tree_service_add.o src/lib66/tree/tree_service_remove.o src/lib66/tree/tree_sethome.o src/lib66/tree/tree_switch_current.o src/lib66/utils/get_userhome.o src/lib66/utils/name_isvalid.o src/lib66/utils/read_svfile.o src/lib66/utils/set_livedir.o src/lib66/utils/set_livescan.o src/lib66/utils/set_livestate.o src/lib66/utils/set_ownerhome.o src/lib66/utils/set_ownersysdir.o src/lib66/utils/set_treeinfo.o src/lib66/utils/yourgid.o src/lib66/utils/youruid.o src/lib66/write/write_classic.o src/lib66/write/write_common.o src/lib66/write/write_environ.o src/lib66/write/write_execute_scripts.o src/lib66/write/write_logger.o src/lib66/write/write_oneshot.o src/lib66/write/write_service.o src/lib66/write/write_uint.o
else
......
......@@ -2,14 +2,12 @@
66-shutdown 0755
66-shutdownd 0755
66-hpr 0755
66-rebuild 0755
66-umountall 0755
66-echo 0755
66-nuke 0755
66-oneshot 0755
66-fdholder-filler 0755
execl-envfile 0755
execl-toc 0755
init 0755
init.conf 0644
rc.init 0755
......
......@@ -6,7 +6,6 @@ BIN_TARGETS := \
66-umountall \
66-echo \
execl-envfile \
execl-toc \
66-nuke
LIBEXEC_TARGETS := \
......
-loblibs
-lskarnet
This diff is collapsed.
/*
* ssexec_remove.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>
#include <unistd.h>// unlink
#include <oblibs/log.h>
#include <oblibs/string.h>
#include <oblibs/types.h>
#include <oblibs/sastr.h>
#include <oblibs/directory.h>
#include <skalibs/posixplz.h>
#include <skalibs/stralloc.h>
#include <skalibs/sgetopt.h>
#include <66/state.h>
#include <66/enum.h>
#include <66/ssexec.h>
#include <66/resolve.h>
#include <66/service.h>
#include <66/tree.h>
#include <66/config.h>
#include <66/constants.h>
#include <66/svc.h>
#include <66/utils.h>
static void auto_remove(char const *path)
{
log_trace("remove directory: ", path) ;
if (!dir_rm_rf(path))
log_dieusys(LOG_EXIT_SYS, "remove directory: ", path) ;
}
static void remove_service(resolve_service_t *res, ssexec_t *info)
{
int r ;
char sym[strlen(res->sa.s + res->path.home) + SS_SYSTEM_LEN + SS_RESOLVE_LEN + SS_SERVICE_LEN + 1 + SS_MAX_SERVICE_NAME + 1] ;
auto_remove(res->sa.s + res->path.servicedir) ;
if (res->environ.envdir)
auto_remove(res->sa.s + res->environ.envdir) ;
tree_service_remove(info->base.s, res->sa.s + res->treename, res->sa.s + res->name) ;
if ((res->logger.want && (res->type == TYPE_CLASSIC || res->type == TYPE_ONESHOT)) && !res->inns) {
resolve_service_t lres = RESOLVE_SERVICE_ZERO ;
resolve_wrapper_t_ref lwres = resolve_set_struct(DATA_SERVICE, &lres) ;
r = resolve_read_g(lwres, info->base.s, res->sa.s + res->logger.name) ;
if (r <= 0)
log_dieusys(LOG_EXIT_SYS, "read resolve file of: ", res->sa.s + res->logger.name) ;
auto_remove(lres.sa.s + lres.path.servicedir) ;
auto_remove(lres.sa.s + lres.logger.destination) ;
tree_service_remove(info->base.s, lres.sa.s + lres.treename, lres.sa.s + lres.name) ;
auto_strings(sym, lres.sa.s + lres.path.home, SS_SYSTEM, SS_RESOLVE, SS_SERVICE, "/", lres.sa.s + lres.name) ;
log_trace("remove symlink: ", sym) ;
unlink_void(sym) ;
log_trace("remove symlink: ", lres.sa.s + lres.live.scandir) ;
unlink_void(lres.sa.s + lres.live.scandir) ;
log_info("removed successfully: ", lres.sa.s + lres.name) ;
resolve_free(lwres) ;
}
auto_strings(sym, res->sa.s + res->path.home, SS_SYSTEM, SS_RESOLVE, SS_SERVICE, "/", res->sa.s + res->name) ;
log_trace("remove symlink: ", sym) ;
unlink_void(sym) ;
log_trace("remove symlink: ", res->sa.s + res->live.scandir) ;
unlink_void(res->sa.s + res->live.scandir) ;
log_info("removed successfully: ", res->sa.s + res->name) ;
}
int ssexec_remove(int argc, char const *const *argv, ssexec_t *info)
{
log_flow() ;
int r ;
size_t pos = 0 ;
uint32_t flag = 0 ;
uint8_t siglen = 0 ;
unsigned int areslen = 0 ;
ss_state_t ste = STATE_ZERO ;
stralloc sa = STRALLOC_ZERO ;
resolve_wrapper_t_ref wres = 0 ;
FLAGS_SET(flag, STATE_FLAGS_TOPROPAGATE|STATE_FLAGS_ISSUPERVISED|STATE_FLAGS_TOUNSUPERVISE|STATE_FLAGS_WANTDOWN) ;
{
subgetopt l = SUBGETOPT_ZERO ;
for (;;) {
int opt = subgetopt_r(argc,argv, OPTS_START, &l) ;
if (opt == -1) break ;
switch (opt) {
case 'h' :
info_help(info->help, info->usage) ;
return 0 ;
case 'P' :
FLAGS_CLEAR(flag, STATE_FLAGS_TOPROPAGATE) ;
siglen++ ;
break ;
default :
log_usage(info->usage, "\n", info->help) ;
}
}
argc -= l.ind ; argv += l.ind ;
}
if (argc < 1)
log_usage(info->usage, "\n", info->help) ;
resolve_service_t ares[argc] ;
for(; pos < argc ; pos++) {
resolve_service_t res = RESOLVE_SERVICE_ZERO ;
wres = resolve_set_struct(DATA_SERVICE, &res) ;
r = resolve_read_g(wres, info->base.s, argv[pos]) ;
if (r < 0)
log_dieusys(LOG_EXIT_SYS, "read resolve file of: ", argv[pos]) ;
if (!r)
log_dieu(LOG_EXIT_USER, "find service: ", argv[pos], " -- did you parse it?") ;
if (!state_read(&ste, &res))
log_dieusys(LOG_EXIT_SYS, "read state file of: ", argv[pos], " -- please make a bug report") ;
if (ste.issupervised == STATE_FLAGS_TRUE)
if (!sastr_add_string(&sa, argv[pos]))
log_dieusys(LOG_EXIT_SYS, "add service: ", argv[pos], " to selection") ;
ares[areslen++] = res ;
}
r = svc_scandir_ok(info->scandir.s) ;
if (r < 0)
log_dieusys(LOG_EXIT_SYS, "check: ", info->scandir.s) ;
if (sa.len && r) {
pos = 0 ;
char const *prog = PROG ;
int nargc = 2 + siglen + sastr_nelement(&sa) ;
char const *newargv[nargc] ;
unsigned int m = 0 ;
char const *help = info->help ;
char const *usage = info->usage ;
info->help = help_stop ;
info->usage = usage_stop ;
newargv[m++] = "stop" ;
newargv[m++] = "-u" ;
if (siglen)
newargv[m++] = "-P" ;
FOREACH_SASTR(&sa, pos)
newargv[m++] = sa.s + pos ;
newargv[m] = 0 ;
PROG = "stop" ;
if (ssexec_stop(nargc, newargv, info))
log_dieu(LOG_EXIT_SYS, "stop service selection") ;
PROG = prog ;
info->help = help ;
info->usage = usage ;
}
for (pos = 0 ; pos < areslen ; pos++) {
remove_service(&ares[pos], info) ;
if (ares[pos].type == TYPE_MODULE) {
if (ares[pos].dependencies.ncontents) {
size_t pos = 0 ;
sa.len = 0 ;
resolve_service_t mres = RESOLVE_SERVICE_ZERO ;
resolve_wrapper_t_ref mwres = resolve_set_struct(DATA_SERVICE, &mres) ;
if (!sastr_clean_string(&sa, ares[pos].sa.s + ares[pos].dependencies.contents))
log_dieu(LOG_EXIT_SYS, "clean string") ;
FOREACH_SASTR(&sa, pos) {
r = resolve_read_g(mwres, info->base.s, sa.s + pos) ;
if (r <= 0)
log_dieusys(LOG_EXIT_SYS, "read resolve file of: ", sa.s + pos) ;
remove_service(&mres, info) ;
}
resolve_free(mwres) ;
}
/** remove directory made by the module at configuration time */
char dir[SS_MAX_PATH_LEN + 1] ;
if (!info->owner) {
auto_strings(dir, SS_SERVICE_ADMDIR, ares[pos].sa.s + ares[pos].name) ;
} else {
if (!set_ownerhome_stack(dir))
log_dieusys(LOG_EXIT_SYS, "unable to find the home directory of the user") ;
size_t dirlen = strlen(dir) ;
auto_strings(dir + dirlen, SS_SERVICE_USERDIR, ares[pos].sa.s + ares[pos].name) ;
}
auto_remove(dir) ;
}
}
stralloc_free(&sa) ;
service_resolve_array_free(ares, areslen) ;
free(wres) ;
return 0 ;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment