From 27b4c624b3c95f1930a0562722f70cc938d0e3f5 Mon Sep 17 00:00:00 2001 From: Alexey Khromov Date: Tue, 14 May 2024 21:30:43 +0300 Subject: [PATCH] env init probe --- source/bforce/bforce.c | 31 ++++++++++++++++++++++++++++++- source/bforce/os_unix.c | 8 ++++---- source/include/bforce.h | 3 +++ 3 files changed, 37 insertions(+), 5 deletions(-) diff --git a/source/bforce/bforce.c b/source/bforce/bforce.c index 6b16a30..0590b90 100644 --- a/source/bforce/bforce.c +++ b/source/bforce/bforce.c @@ -20,6 +20,8 @@ #include "nodelist.h" #include "session.h" +char ** sessenv; + /* PID of our child process (if use fork) */ pid_t child_pid = 0; @@ -254,6 +256,10 @@ int main(int argc, char *argv[], char *envp[]) int ch = 0; opts.runmode = MODE_UNDEFINED; + int i = 0; + int argsz = 0; + + memset(&opts, '\0', sizeof(s_bforce_opts)); // parsing @@ -453,7 +459,7 @@ int main(int argc, char *argv[], char *envp[]) /* Reopen log file if it was defined in config */ if( log_reopen(log_getfilename(LOG_FILE_SESSION), NULL, NULL) ) { - log("can't continue without logging"); + DEB((D_CONFIG, "can't continue without logging")); gotoexit(BFERR_FATALERROR); } @@ -461,6 +467,21 @@ int main(int argc, char *argv[], char *envp[]) //snprintf(runmode_str, 20, "Run mode: %d", opts.runmode); //log(runmode_str); + /* Init environment table for childs */ + argsz = 4096; + //argsz = sysconf(_SC_ARG_MAX); + DEB((D_CONFIG, "Limits: %d\n",argsz)); + sessenv = malloc(sizeof(sessenv)*argsz); + sessenv[0] = NULL; + i=0; + while (envp[i]) { + sessenv[i] = malloc(strlen(envp[i])+2); + strcpy(sessenv[i], envp[i]); + sessenv[i++] = NULL; + DEB((D_FREE, "session ENV: %s\n", sessenv[(i-1)])); + } + + switch( opts.runmode ) { case MODE_DAEMON: @@ -488,6 +509,14 @@ default: exit: + /* de-init sessenv */ + i=0; + while(sessenv[i]) { + DEB((D_FREE, "De-init session ENV: %s\n", sessenv[(i)])); + free(sessenv[i]); + } + free(sessenv); + deinit_conf(); deinit_opts(&opts); diff --git a/source/bforce/os_unix.c b/source/bforce/os_unix.c index a8ad499..1d932c0 100644 --- a/source/bforce/os_unix.c +++ b/source/bforce/os_unix.c @@ -82,10 +82,10 @@ void exec_options_init(s_exec_options *eopt) eopt->umask = EXEC_DEFAULT_UMASK; eopt->envp[0] = NULL; - while(environ[i]) { - log("EXEC: Added ENV variable: %s\n", environ[i]); - eopt->envp[i] = xmalloc(strlen(environ[i]) + 2); - sprintf(eopt->envp[i], environ[i++]); + while(sessenv[i]) { + log("EXEC: Added ENV variable: %s\n", sessenv[i]); + eopt->envp[i] = xmalloc(strlen(sessenv[i]) + 2); + sprintf(eopt->envp[i], sessenv[i++]); eopt->envp[i] = NULL; } diff --git a/source/include/bforce.h b/source/include/bforce.h index 283be5b..3401eb3 100644 --- a/source/include/bforce.h +++ b/source/include/bforce.h @@ -175,6 +175,9 @@ typedef struct { #define MODE_ANSWER (5) #define MODE_DAEMON (6) +/* Environment for use with external tools as default */ +extern char ** sessenv; + /* * Global variables