Skip to content

Commit 6df1c1d

Browse files
authored
Merge pull request hestiacp#4708 from rjd22/disallow-backticks-cronjob
Disallow ` character in cronjobs to avoid errors in cron list
2 parents b811fc9 + cf7016c commit 6df1c1d

File tree

3 files changed

+19
-14
lines changed

3 files changed

+19
-14
lines changed

bin/v-add-cron-job

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#!/bin/bash
22
# info: add cron job
3-
# options: USER MIN HOUR DAY MONTH WDAY COMMAND [JOB] [RESTART]
3+
# options: USER MIN HOUR DAY MONTH WDAY CRON_COMMAND [JOB] [RESTART]
44
#
55
# example: v-add-cron-job admin * * * * * sudo /usr/local/hestia/bin/v-backup-users
66
#
@@ -18,7 +18,7 @@ hour=$3
1818
day=$4
1919
month=$5
2020
wday=$6
21-
command=$(echo $7 | sed "s/'/%quote%/g")
21+
cron_command=$(echo $7 | sed "s/'/%quote%/g")
2222
job=$8
2323
restart=$9
2424

@@ -36,8 +36,8 @@ HIDE=7
3636
# Verifications #
3737
#----------------------------------------------------------#
3838

39-
check_args '7' "$#" 'USER MIN HOUR DAY MONTH WDAY COMMAND [JOB] [RESTART]'
40-
is_format_valid 'user' 'min' 'hour' 'day' 'month' 'wday' 'command'
39+
check_args '7' "$#" 'USER MIN HOUR DAY MONTH WDAY CRON_COMMAND [JOB] [RESTART]'
40+
is_format_valid 'user' 'min' 'hour' 'day' 'month' 'wday' 'cron_command'
4141
is_system_enabled "$CRON_SYSTEM" 'CRON_SYSTEM'
4242
is_object_valid 'user' 'USER' "$user"
4343
is_object_unsuspended 'user' 'USER' "$user"
@@ -61,7 +61,7 @@ date=$(echo "$time_n_date" | cut -f 2 -d \ )
6161

6262
# Concatenating cron string
6363
str="JOB='$job' MIN='$min' HOUR='$hour' DAY='$day' MONTH='$month' WDAY='$wday'"
64-
str="$str CMD='$command' SUSPENDED='no' TIME='$time' DATE='$date'"
64+
str="$str CMD='$cron_command' SUSPENDED='no' TIME='$time' DATE='$date'"
6565

6666
# Adding to crontab
6767
echo "$str" >> $HESTIA/data/users/$user/cron.conf
@@ -87,7 +87,7 @@ $BIN/v-restart-cron "$restart"
8787
check_result $? "Cron restart failed" > /dev/null
8888

8989
# Logging
90-
$BIN/v-log-action "$user" "Info" "Cron Jobs" "Cron job added (ID: $job, Command: $command)"
90+
$BIN/v-log-action "$user" "Info" "Cron Jobs" "Cron job added (ID: $job, Command: $cron_command)"
9191
log_event "$OK" "$ARGUMENTS"
9292

9393
exit

bin/v-change-cron-job

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#!/bin/bash
22
# info: change cron job
3-
# options: USER JOB MIN HOUR DAY MONTH WDAY COMMAND
3+
# options: USER JOB MIN HOUR DAY MONTH WDAY CRON_COMMAND
44
#
55
# example: v-change-cron-job admin 7 * * * * * /usr/bin/uptime
66
#
@@ -19,7 +19,7 @@ hour=$4
1919
day=$5
2020
month=$6
2121
wday=$7
22-
command=$8
22+
cron_command=$8
2323

2424
# Includes
2525
# shellcheck source=/etc/hestiacp/hestia.conf
@@ -33,8 +33,8 @@ source_conf "$HESTIA/conf/hestia.conf"
3333
# Verifications #
3434
#----------------------------------------------------------#
3535

36-
check_args '7' "$#" 'USER JOB MIN HOUR DAY MONTH WDAY COMMAND'
37-
is_format_valid 'user' 'job' 'min' 'hour' 'day' 'month' 'wday' 'command'
36+
check_args '7' "$#" 'USER JOB MIN HOUR DAY MONTH WDAY CRON_COMMAND'
37+
is_format_valid 'user' 'job' 'min' 'hour' 'day' 'month' 'wday' 'cron_command'
3838
is_system_enabled "$CRON_SYSTEM" 'CRON_SYSTEM'
3939
is_object_valid 'user' 'USER' "$user"
4040
is_object_unsuspended 'user' 'USER' "$user"
@@ -54,9 +54,9 @@ time=$(echo "$time_n_date" | cut -f 1 -d \ )
5454
date=$(echo "$time_n_date" | cut -f 2 -d \ )
5555

5656
# Concatenating cron string
57-
command=$(echo "$command" | sed -e "s/'/%quote%/g")
57+
cron_command=$(echo "$cron_command" | sed -e "s/'/%quote%/g")
5858
str="JOB='$job' MIN='$min' HOUR='$hour' DAY='$day' MONTH='$month' WDAY='$wday'"
59-
str="$str CMD='$command' SUSPENDED='no' TIME='$time' DATE='$date'"
59+
str="$str CMD='$cron_command' SUSPENDED='no' TIME='$time' DATE='$date'"
6060

6161
# Deleting old job
6262
sed -i "/JOB='$job' /d" $USER_DATA/cron.conf
@@ -79,7 +79,7 @@ $BIN/v-restart-cron
7979
check_result $? "Cron restart failed" > /dev/null
8080

8181
# Logging
82-
$BIN/v-log-action "$user" "Info" "Cron Jobs" "Cron job updated (Job: $job, Command: $command)."
82+
$BIN/v-log-action "$user" "Info" "Cron Jobs" "Cron job updated (Job: $job, Command: $cron_command)."
8383
log_event "$OK" "$ARGUMENTS"
8484

8585
exit

func/main.sh

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -991,7 +991,11 @@ is_string_format_valid() {
991991
fi
992992
is_no_new_line_format "$1"
993993
}
994-
994+
is_cron_command_valid_format() {
995+
if [[ ! "$1" =~ ^[^\`]*?$ ]]; then
996+
check_result "$E_INVALID" "Invalid cron command format"
997+
fi
998+
}
995999
# Database format validator
9961000
is_database_format_valid() {
9971001
exclude="[!|@|#|$|^|&|*|(|)|+|=|{|}|:|,|<|>|?|/|\|\"|'|;|%|\`| ]"
@@ -1266,6 +1270,7 @@ is_format_valid() {
12661270
charsets) is_common_format_valid "$arg" 'charsets' ;;
12671271
chain) is_object_format_valid "$arg" 'chain' ;;
12681272
comment) is_object_format_valid "$arg" 'comment' ;;
1273+
cron_command) is_cron_command_valid_format "$arg" ;;
12691274
database) is_database_format_valid "$arg" 'database' ;;
12701275
day) is_cron_format_valid "$arg" $arg_name ;;
12711276
dbpass) is_password_format_valid "$arg" ;;

0 commit comments

Comments
 (0)