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

add execl-subuidgid

parent d1060d5d
No related branches found
No related tags found
No related merge requests found
......@@ -24,6 +24,7 @@
/66-writenv
/66-getenv
/execl-envfile
/execl-subuidgid
/config.mak
/execl-cmdline
/66-envfile
......
......@@ -39,7 +39,7 @@ src/extra-tools/66-umountall.o src/extra-tools/66-umountall.lo: src/extra-tools/
src/extra-tools/66-writenv.o src/extra-tools/66-writenv.lo: src/extra-tools/66-writenv.c
src/extra-tools/execl-cmdline.o src/extra-tools/execl-cmdline.lo: src/extra-tools/execl-cmdline.c
src/extra-tools/execl-envfile.o src/extra-tools/execl-envfile.lo: src/extra-tools/execl-envfile.c src/include/66/environ.h src/include/66/parser.h
src/extra-tools/execl-getuidgid.o src/extra-tools/execl-getuidgid.lo: src/extra-tools/execl-getuidgid.c
src/extra-tools/execl-getuidgid.o src/extra-tools/execl-getuidgid.lo: src/extra-tools/execl-getuidgid.c src/include/66/environ.h src/include/66/utils.h
src/lib66/backup_cmd_switcher.o src/lib66/backup_cmd_switcher.lo: src/lib66/backup_cmd_switcher.c src/include/66/constants.h src/include/66/enum.h src/include/66/ssexec.h src/include/66/utils.h
src/lib66/backup_make_new.o src/lib66/backup_make_new.lo: src/lib66/backup_make_new.c src/include/66/constants.h src/include/66/db.h src/include/66/enum.h src/include/66/tree.h src/include/66/utils.h
src/lib66/backup_realpath_sym.o src/lib66/backup_realpath_sym.lo: src/lib66/backup_realpath_sym.c src/include/66/constants.h src/include/66/enum.h src/include/66/utils.h
......@@ -154,6 +154,8 @@ execl-cmdline: EXTRA_LIBS :=
execl-cmdline: src/extra-tools/execl-cmdline.o -lexecline -loblibs -lskarnet
execl-envfile: EXTRA_LIBS :=
execl-envfile: src/extra-tools/execl-envfile.o ${LIB66} -lexecline -loblibs -lskarnet ${LIBEXECLINE}
execl-subuidgid: EXTRA_LIBS :=
execl-subuidgid: src/extra-tools/execl-subuidgid.o ${LIB66} -lexecline -loblibs -lskarnet ${LIBEXECLINE}
ifeq ($(strip $(STATIC_LIBS_ARE_PIC)),)
lib66.a.xyzzy: src/lib66/backup_cmd_switcher.o src/lib66/backup_make_new.o src/lib66/backup_realpath_sym.o src/lib66/db_cmd_master.o src/lib66/db_compile.o src/lib66/db_find_compiled_state.o src/lib66/db_get_permissions.o src/lib66/db_ok.o src/lib66/db_switch_to.o src/lib66/db_update.o src/lib66/environ.o src/lib66/get_enum.o src/lib66/get_uidgid.o src/lib66/get_userhome.o src/lib66/hpr_shutdown.o src/lib66/hpr_wall.o src/lib66/instance.o src/lib66/parser.o src/lib66/parser_enabled.o src/lib66/parser_utils.o src/lib66/parser_write.o src/lib66/rc_init.o src/lib66/rc_manage.o src/lib66/rc_send.o src/lib66/rc_unsupervise.o src/lib66/resolve.o src/lib66/resolve_graph.o src/lib66/scandir_ok.o src/lib66/scandir_send_signal.o src/lib66/set_livedir.o src/lib66/set_livescan.o src/lib66/set_livestate.o src/lib66/set_livetree.o src/lib66/set_ownerhome.o src/lib66/set_ownersysdir.o src/lib66/ssexec_dbctl.o src/lib66/ssexec_enable.o src/lib66/ssexec_env.o src/lib66/ssexec_disable.o src/lib66/ssexec_free.o src/lib66/ssexec_help.o src/lib66/ssexec_init.o src/lib66/ssexec_main.o src/lib66/ssexec_start.o src/lib66/ssexec_stop.o src/lib66/ssexec_svctl.o src/lib66/state.o src/lib66/sv_alltype_zero.o src/lib66/svc_init.o src/lib66/svc_init_pipe.o src/lib66/svc_send.o src/lib66/svc_switch_to.o src/lib66/svc_unsupervise.o src/lib66/tree_cmd_state.o src/lib66/tree_copy.o src/lib66/tree_copy_tmp.o src/lib66/tree_find_current.o src/lib66/tree_get_permissions.o src/lib66/tree_sethome.o src/lib66/tree_setname.o src/lib66/tree_switch_current.o
else
......
......@@ -19,6 +19,7 @@
66-hpr 0755
execl-cmdline 0755
execl-envfile 0755
execl-subuidgid 0755
66-writenv 0755
66-getenv 0755
66-gnwenv 0755
......
......@@ -20,6 +20,7 @@ BIN_TARGETS := \
66-hpr \
execl-cmdline \
execl-envfile \
execl-subuidgid \
66-writenv \
66-getenv \
66-gnwenv \
......
${LIB66}
-lexecline
-loblibs
-lskarnet
${LIBEXECLINE}
/*
* execl-subuidgid.c
*
* Copyright (c) 2018-2019 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 <unistd.h>
#include <sys/types.h>
#include <oblibs/error2.h>
#include <skalibs/types.h>
#include <skalibs/buffer.h>
#include <skalibs/stralloc.h>
#include <skalibs/strerr2.h>
#include <skalibs/env.h>
#include <skalibs/sgetopt.h>
#include <skalibs/djbunix.h>
#include <execline/execline.h>
#include <66/environ.h>
#include <66/utils.h>
#define USAGE "execl-subuidgid [ -o owner ] prog..."
static inline void info_help (void)
{
static char const *help =
"execl-subuidgid <options> prog\n"
"\n"
"options :\n"
" -h: print this help\n"
" -o: owner to use\n"
;
if (buffer_putsflush(buffer_1, help) < 0)
strerr_diefu1sys(111, "write to stdout") ;
}
int main (int argc, char const **argv, char const *const *envp)
{
uid_t uid ;
gid_t gid ;
int r ;
char const *owner = 0 ;
stralloc sa = STRALLOC_ZERO ;
stralloc dst = STRALLOC_ZERO ;
exlsn_t info = EXLSN_ZERO;
char cuid[UID_FMT], cgid[GID_FMT] ;
PROG = "execl-subuidgid" ;
{
subgetopt_t l = SUBGETOPT_ZERO ;
for (;;)
{
int opt = subgetopt_r(argc, argv, "ho:", &l) ;
if (opt == -1) break ;
switch (opt)
{
case 'h' : info_help(); return 0 ;
case 'o' : owner = l.arg ; break ;
default : exitusage(USAGE) ;
}
}
argc -= l.ind ; argv += l.ind ;
}
if (owner)
if (!youruid(&uid,owner)) strerr_diefu2sys(111,"get uid of: ",owner) ;
else uid = getuid() ;
if (!yourgid(&gid,uid)) strerr_diefu1sys(111,"get gid") ;
cuid[uid_fmt(cuid,uid)] = 0 ;
cgid[uid_fmt(cgid,gid)] = 0 ;
if (!env_addkv("UID",cuid,&info)) strerr_diefu1sys(111,"set UID") ;
if (!env_addkv("GID",cgid,&info)) strerr_diefu1sys(111,"set GID") ;
if (!env_string(&sa,argv,(unsigned int) argc)) strerr_diefu1sys(111,"environment string") ;
r = el_substitute (&dst, sa.s, sa.len, info.vars.s, info.values.s,
genalloc_s (elsubst_t const, &info.data),genalloc_len (elsubst_t const, &info.data)) ;
if (r < 0) strerr_diefu1sys(111,"el_substitute") ;
else if (!r) _exit(0) ;
stralloc_free(&sa) ;
{
char const *v[r + 1];
if (!env_make (v, r, dst.s, dst.len)) strerr_diefu1sys (111, "env_make") ;
v[r] = 0 ;
pathexec_r (v, envp, env_len (envp), info.modifs.s, info.modifs.len) ;
}
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