Skip to content

Commit 7df5cb3

Browse files
authored
Update logging funciton to use sudo only if allowed (#16)
* Update header with basic functions * Update logging validation, give sudo and exit on error options Co-authored-by: Evert Ramos <evert.ramos@cgu.gov.br>
1 parent 574ec07 commit 7df5cb3

File tree

2 files changed

+77
-13
lines changed

2 files changed

+77
-13
lines changed

header

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,20 +23,31 @@
2323
# This function has one main objective:
2424
# 1.
2525
#
26-
# You must/might inform the parameters below:
26+
# You must/might inform the argument(s) below:
2727
# 1.
2828
# 2. [optional] (default: )
29-
# 99. [optional] (default: true) Stop execution on error
29+
# d1. [optional] (default: true) Stop execution on error
30+
# d2. [optional] (default: true) Allow run with 'sudo'
31+
#
32+
# [CAUTION] The optional argument(s) replaces previously parameter as of:
33+
# d1. STOP_EXECUTION_ON_ERROR
34+
# d2. ALLOW_RUN_WITH_SUDO
3035
#
3136
#-----------------------------------------------------------------------
3237

3338
function_name()
3439
{
35-
local LOCAL_ LOCAL_STOP_EXECUTION_ON_ERROR
36-
40+
# Local variables
41+
local LOCAL_ LOCAL_STOP_EXECUTION_ON_ERROR LOCAL_ALLOW_RUN_WITH_SUDO LOCAL_RUN_WITH_SUDO
42+
43+
# Required arguments
3744
LOCAL_=${1:-null}
38-
LOCAL_STOP_EXECUTION_ON_ERROR=${99:-true}
3945

46+
# Optional arguments
47+
LOCAL_STOP_EXECUTION_ON_ERROR="${d1:-null}" && [[ "$LOCAL_STOP_EXECUTION_ON_ERROR" == null ]] && LOCAL_STOP_EXECUTION_ON_ERROR=${STOP_EXECUTION_ON_ERROR:-true}
48+
# LOCAL_ALLOW_RUN_WITH_SUDO="${d1:-null}" && [[ "$LOCAL_ALLOW_RUN_WITH_SUDO" == null ]] && LOCAL_ALLOW_RUN_WITH_SUDO=${ALLOW_RUN_WITH_SUDO:-true}
49+
50+
# Validate required parameters
4051
if [[ $LOCAL_ == "" || $LOCAL_ == null ]]; then
4152
if [[ ! $(declare -F echoerror) == "" ]]; then
4253
echoerror "You must inform the required argument(s) to the function: '${FUNCNAME[0]}'" ${LOCAL_STOP_EXECUTION_ON_ERROR}
@@ -46,13 +57,23 @@ function_name()
4657
fi
4758
fi
4859

60+
# Show debug message
4961
if [[ "$DEBUG" == true ]]; then
5062
if [[ ! $(declare -F echowarning) == "" ]]; then
5163
echowarning "You are running..... xyz - [function: ${FUNCNAME[0]}]"
5264
else
5365
echo "You are running..... xyz - [function: ${FUNCNAME[0]}]"
54-
[[ "$LOCAL_STOP_EXECUTION_ON_ERROR" == true ]] && exit 1
5566
fi
5667
fi
68+
69+
70+
# [EXAMPLE] Run a function with 'sudo'
71+
# Allows 'sudo' to run in this function with a condition
72+
# [[ "$LOCAL_ALLOW_RUN_WITH_SUDO" == true ]] && LOCAL_RUN_WITH_SUDO=sudo
73+
# $LOCAL_RUN_WITH_SUDO mkdir -p
74+
# [CONDITION] You may add a condition to check if it requires to run a command with 'sudo'
75+
# [[ "$LOCAL_ALLOW_RUN_WITH_SUDO" == true ]] && ! system_check_user_folder_owner ${LOCAL_FOLDER%/*} && LOCAL_RUN_WITH_SUDO=sudo
76+
# $LOCAL_RUN_WITH_SUDO mkdir -p $LOCAL_FOLDER > /dev/null 2>&1
77+
5778
}
5879

log/log.sh

100644100755
Lines changed: 50 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,22 +24,65 @@
2424
# 1. Log activities
2525
#
2626
# You must/might inform the parameters below:
27-
# 1.
28-
# 2. [optional] (default: false)
27+
# 1. [optional] (default: /var/log) Destination path
28+
# 2. [optional] (default: basescript.log) Log's file name
29+
# 3. [optional] (default: +%Y-%m-%d %H:%M:%S) Timestamp log
30+
# 4. [optional] (default: true) Allow to run with sudo
31+
# 5. [optional] (default: false) Stop execution on error
32+
#
33+
# [CAUTION] The optional argument replaces previously set parameter as of:
34+
# 1. BASESCRIPT_LOG_BASE_PATH
35+
# 2. BASESCRIPT_LOG_FILE_NAME
36+
# 3. BASESCRIPT_LOG_TIMESTAMP_FLAG
37+
# 4. ALLOW_RUN_WITH_SUDO
38+
# 5. LOCAL_STOP_EXECUTION_ON_ERROR
2939
#
3040
#-----------------------------------------------------------------------
3141

3242
log()
3343
{
34-
local LOCAL_LOG_BASE_PATH LOCAL_LOG_NAME LOCAL_TIMESTAMP_FLAG LOCAL_TIMESTAMP LOCAL_LOG_FULL_PATH
44+
# Local arguments
45+
local LOCAL_LOG_BASE_PATH LOCAL_LOG_NAME LOCAL_TIMESTAMP_FLAG LOCAL_TIMESTAMP LOCAL_LOG_FULL_PATH LOCAL_STOP_EXECUTION_ON_ERROR LOCAL_ALLOW_RUN_WITH_SUDO LOCAL_RUN_WITH_SUDO
3546

36-
LOCAL_LOG_BASE_PATH=${BASESCRIPT_LOG_BASE_PATH:-"/var/log"}
37-
LOCAL_LOG_NAME=${BASESCRIPT_LOG_FILE_NAME:-basescript.log}
38-
LOCAL_TIMESTAMP_FLAG=${BASESCRIPT_LOG_TIMESTAMP_FLAG:-"+%Y-%m-%d %H:%M:%S"}
47+
# Optional arguments
48+
LOCAL_LOG_BASE_PATH="${1:-null}" && [[ "$LOCAL_LOG_BASE_PATH" == "null" ]] && LOCAL_LOG_BASE_PATH=${BASESCRIPT_LOG_BASE_PATH:-"/var/log"}
49+
LOCAL_LOG_NAME="${2:-null}" && [[ "$LOCAL_LOG_NAME" == null ]] && LOCAL_LOG_NAME=${BASESCRIPT_LOG_FILE_NAME:-basescript.log}
50+
LOCAL_TIMESTAMP_FLAG="${3:-null}" && [[ "$LOCAL_TIMESTAMP_FLAG" == null ]] && LOCAL_TIMESTAMP_FLAG=${BASESCRIPT_LOG_TIMESTAMP_FLAG:-"+%Y-%m-%d %H:%M:%S"}
51+
LOCAL_ALLOW_RUN_WITH_SUDO="${4:-null}" && [[ "$LOCAL_ALLOW_RUN_WITH_SUDO" == null ]] && LOCAL_ALLOW_RUN_WITH_SUDO=${ALLOW_RUN_WITH_SUDO:-false}
52+
LOCAL_STOP_EXECUTION_ON_ERROR="${5:-null}" && [[ "$LOCAL_STOP_EXECUTION_ON_ERROR" == null ]] && LOCAL_STOP_EXECUTION_ON_ERROR=${STOP_EXECUTION_ON_ERROR:-false} # most other scripts this is set to true
3953

54+
# Extra parameters
4055
LOCAL_TIMESTAMP=$(date "$LOCAL_TIMESTAMP_FLAG")
4156
LOCAL_LOG_FULL_PATH="${LOCAL_LOG_BASE_PATH%/}/$LOCAL_LOG_NAME"
4257

43-
echo "$LOCAL_TIMESTAMP USER=$USER SCRIPT=$SCRIPT_PATH/$SCRIPT_NAME LOG='"$@"'" | sudo tee -a $LOCAL_LOG_FULL_PATH >/dev/null
58+
# Allows 'sudo' to run this function if destination path it's not owned by the current user
59+
if [[ "$LOCAL_ALLOW_RUN_WITH_SUDO" == true ]]; then
60+
LOCAL_RUN_WITH_SUDO=sudo
61+
else
62+
LOCAL_RUN_WITH_SUDO="" # Set to empty!
63+
64+
# Check if file exist and users permissions
65+
if [[ -f ${LOCAL_LOG_FULL_PATH} && ! -w ${LOCAL_LOG_FULL_PATH} ]] || [[ -d ${LOCAL_LOG_BASE_PATH} && ! -w ${LOCAL_LOG_BASE_PATH} ]]; then
66+
if [[ ! $(declare -F echoerror) == "" ]]; then
67+
echoerror "You dont have permission to write log at '${LOCAL_LOG_FULL_PATH}' - [${FUNCNAME[0]}]" "${LOCAL_STOP_EXECUTION_ON_ERROR}"
68+
else
69+
echo "You dont have permission to write log at '${LOCAL_LOG_FULL_PATH}' - [${FUNCNAME[0]}]"
70+
[[ "$LOCAL_STOP_EXECUTION_ON_ERROR" == true ]] && exit 1
71+
fi
72+
fi
73+
fi
74+
75+
# Executa comando ou retornar erro
76+
if ! echo "$LOCAL_TIMESTAMP USER=$USER SCRIPT=$SCRIPT_PATH/$SCRIPT_NAME LOG=$*" | $LOCAL_RUN_WITH_SUDO tee -a "${LOCAL_LOG_FULL_PATH}" >/dev/null 2>&1; then
77+
if [[ ! $(declare -F echoerror) == "" ]]; then
78+
echoerror "Logs could not be saved at '${LOCAL_LOG_FULL_PATH}' - [${FUNCNAME[0]}]" "${LOCAL_STOP_EXECUTION_ON_ERROR}"
79+
else
80+
echo "Logs could not be saved at '${LOCAL_LOG_FULL_PATH}' - [${FUNCNAME[0]}]"
81+
[[ "$LOCAL_STOP_EXECUTION_ON_ERROR" == true ]] && exit 1
82+
fi
83+
fi
4484
}
4585

86+
# Implement test case
87+
#BASESCRIPT_LOG_BASE_PATH="/log"
88+
#log $*

0 commit comments

Comments
 (0)