Skip to content

Commit ae7c9f4

Browse files
authored
Merge pull request hestiacp#4195 from Aartsie/fix/4181-username-digits-check
Fix: hestiacp#4181 Checks for usernames starting with a alphabetic character.
2 parents 81db1b0 + fe4ae48 commit ae7c9f4

File tree

3 files changed

+74
-3
lines changed

3 files changed

+74
-3
lines changed

bin/v-add-user

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@ name=$5
2121
if [ -n "$6" ]; then
2222
name="$name $6"
2323
fi
24+
25+
FROM_V_ADD_USER=true
26+
2427
# Includes
2528
# shellcheck source=/etc/hestiacp/hestia.conf
2629
source /etc/hestiacp/hestia.conf

func/main.sh

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -704,7 +704,30 @@ sync_cron_jobs() {
704704
chmod 600 $crontab
705705
}
706706

707-
# User format validator
707+
# Validates Local part email and mail alias
708+
is_localpart_format_valid() {
709+
if [ ${#1} -eq 1 ]; then
710+
if ! [[ "$1" =~ ^^[[:alnum:]]$ ]]; then
711+
check_result "$E_INVALID" "invalid $2 format :: $1"
712+
fi
713+
else
714+
if [ -n "$3" ]; then
715+
maxlenght=$(($3 - 2))
716+
if ! [[ "$1" =~ ^[[:alnum:]][-|\.|_[:alnum:]]{0,$maxlenght}[[:alnum:]]$ ]]; then
717+
check_result "$E_INVALID" "invalid $2 format :: $1"
718+
fi
719+
else
720+
if ! [[ "$1" =~ ^[[:alnum:]][-|\.|_[:alnum:]]{0,28}[[:alnum:]]$ ]]; then
721+
check_result "$E_INVALID" "invalid $2 format :: $1"
722+
fi
723+
fi
724+
fi
725+
if [ "$1" != "${1//[^[:ascii:]]/}" ]; then
726+
check_result "$E_INVALID" "invalid $2 format :: $1"
727+
fi
728+
}
729+
730+
# Username / ftp username format validator
708731
is_user_format_valid() {
709732
if [ ${#1} -eq 1 ]; then
710733
if ! [[ "$1" =~ ^^[[:alnum:]]$ ]]; then
@@ -725,6 +748,13 @@ is_user_format_valid() {
725748
if [ "$1" != "${1//[^[:ascii:]]/}" ]; then
726749
check_result "$E_INVALID" "invalid $2 format :: $1"
727750
fi
751+
752+
# Only for new users
753+
if [[ "$FROM_V_ADD_USER" == "true" ]]; then
754+
if ! [[ "$1" =~ ^[a-zA-Z][-|.|_[:alnum:]]{0,28}[[:alnum:]]$ ]]; then
755+
check_result "$E_INVALID" "invalid $2 format :: $1"
756+
fi
757+
fi
728758
}
729759

730760
# Domain format validator
@@ -1185,7 +1215,7 @@ is_format_valid() {
11851215
if [ -n "$arg" ]; then
11861216
case $arg_name in
11871217
access_key_id) is_access_key_id_format_valid "$arg" "$arg_name" ;;
1188-
account) is_user_format_valid "$arg" "$arg_name" '64' ;;
1218+
account) is_localpart_format_valid "$arg" "$arg_name" '64' ;;
11891219
action) is_fw_action_format_valid "$arg" ;;
11901220
active) is_boolean_format_valid "$arg" 'active' ;;
11911221
aliases) is_alias_format_valid "$arg" ;;
@@ -1226,7 +1256,7 @@ is_format_valid() {
12261256
ip_status) is_ip_status_format_valid "$arg" ;;
12271257
job) is_int_format_valid "$arg" 'job' ;;
12281258
key) is_common_format_valid "$arg" "$arg_name" ;;
1229-
malias) is_user_format_valid "$arg" "$arg_name" '64' ;;
1259+
malias) is_localpart_format_valid "$arg" "$arg_name" '64' ;;
12301260
max_db) is_int_format_valid "$arg" 'max db' ;;
12311261
min) is_cron_format_valid "$arg" $arg_name ;;
12321262
month) is_cron_format_valid "$arg" $arg_name ;;

test/test.bats

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -384,6 +384,30 @@ function check_ip_not_banned(){
384384
assert_output --partial 'Error: invalid user format'
385385
}
386386

387+
@test "User: Add new user Failed 4" {
388+
run v-add-user '1234' $user $user@hestiacp2.com default "Super Test"
389+
assert_failure $E_INVALID
390+
assert_output --partial 'Error: invalid user format'
391+
}
392+
393+
@test "User: Add new user Failed 5" {
394+
run v-add-user '1aap' $user $user@hestiacp2.com default "Super Test"
395+
assert_failure $E_INVALID
396+
assert_output --partial 'Error: invalid user format'
397+
}
398+
399+
@test "User: Add new user Success 1" {
400+
run v-add-user 'jaap01' $user $user@hestiacp2.com default "Super Test"
401+
assert_success
402+
refute_output
403+
}
404+
405+
@test "User: Add new user Success 1 Delete" {
406+
run v-delete-user jaap01
407+
assert_success
408+
refute_output
409+
}
410+
387411
@test "User: Change user password" {
388412
run v-change-user-password "$user" "$userpass2"
389413
assert_success
@@ -1644,6 +1668,19 @@ function check_ip_not_banned(){
16441668
refute_output
16451669
}
16461670

1671+
@test "MAIL: Add account 5" {
1672+
run v-add-mail-account $user $domain 01 "$userpass2"
1673+
assert_success
1674+
assert_file_contains /etc/exim4/domains/$domain/limits "01@$domain"
1675+
refute_output
1676+
}
1677+
1678+
@test "MAIL: Add account 6" {
1679+
run v-add-mail-account $user $domain "0aa" "$userpass2"
1680+
assert_success
1681+
assert_file_contains /etc/exim4/domains/$domain/limits "0aa@$domain"
1682+
refute_output
1683+
}
16471684

16481685
@test "MAIL: Add account alias Invalid length" {
16491686
run v-add-mail-account-alias $user $domain test 'hestiacp-realy-rocks-but-i-want-to-have-feature-xyz-and-i-want-it-now'
@@ -1854,6 +1891,7 @@ function check_ip_not_banned(){
18541891
# validate_database mysql database_name database_user password
18551892
validate_database mysql $database $dbuser 1234
18561893
}
1894+
18571895
@test "MYSQL: Add Database (Duplicate)" {
18581896
run v-add-database $user database dbuser 1234 mysql
18591897
assert_failure $E_EXISTS

0 commit comments

Comments
 (0)