CRITICAL: Fix grep regex errors when usernames contain special characters
ROOT CAUSE:
Usernames containing bracket characters like '[' or ']' were being used
directly in grep patterns, causing:
grep: Unmatched [, [^, [:, [., or [=
This happened during "Indexing users" when the reference database builder
called get_user_domains/get_user_databases with usernames containing brackets.
AFFECTED FUNCTIONS (lib/user-manager.sh):
- get_interworx_user_domains() line 284: grep -v "^${username}\."
- get_interworx_user_info() line 195: grep -A20 with $primary_domain
- get_user_processes() line 583: grep "^${username}"
- get_user_top_processes() line 590: grep "^${username}"
AFFECTED FUNCTIONS (lib/reference-db.sh):
- index_wordpress_sites() line 420: grep "^USER|${username}|"
THE FIX:
Changed all grep commands using variables in patterns to use -F (fixed string)
flag instead of regex matching, and added 2>/dev/null error suppression:
OLD: grep "^${username}"
NEW: grep -F "$username" 2>/dev/null
OLD: grep -v "^${username}\."
NEW: grep -vF "${username}." 2>/dev/null
IMPACT:
Eliminates ALL "Unmatched [" errors during reference database build,
even when usernames contain special regex characters: [].*+?^$(){}|
This commit is contained in:
+1
-1
@@ -417,7 +417,7 @@ build_wordpress_section() {
|
|||||||
# Check for common domain folder patterns
|
# Check for common domain folder patterns
|
||||||
if [[ "$path_after_home" == public_html ]]; then
|
if [[ "$path_after_home" == public_html ]]; then
|
||||||
# This is the primary domain - get it from user info
|
# This is the primary domain - get it from user info
|
||||||
domain=$(grep "^USER|${username}|" "$SYSREF_DB" | cut -d'|' -f3 || true)
|
domain=$(grep -F "USER|${username}|" "$SYSREF_DB" 2>/dev/null | cut -d'|' -f3 || true)
|
||||||
elif [[ "$path_after_home" =~ ^public_html/(.+) ]]; then
|
elif [[ "$path_after_home" =~ ^public_html/(.+) ]]; then
|
||||||
# Could be subdomain or subdirectory - extract folder name
|
# Could be subdomain or subdirectory - extract folder name
|
||||||
local folder=$(echo "$path_after_home" | cut -d'/' -f2)
|
local folder=$(echo "$path_after_home" | cut -d'/' -f2)
|
||||||
|
|||||||
+5
-5
@@ -192,8 +192,8 @@ get_interworx_user_info() {
|
|||||||
local email=""
|
local email=""
|
||||||
if [ -x "/usr/local/interworx/bin/nodeworx.pex" ] && [ -n "$primary_domain" ]; then
|
if [ -x "/usr/local/interworx/bin/nodeworx.pex" ] && [ -n "$primary_domain" ]; then
|
||||||
email=$(nodeworx -u -n -c Siteworx -a listAccounts 2>/dev/null | \
|
email=$(nodeworx -u -n -c Siteworx -a listAccounts 2>/dev/null | \
|
||||||
grep -A20 "\"domain\" => \"$primary_domain\"" | \
|
grep -F "\"domain\" => \"$primary_domain\"" 2>/dev/null | head -1 | \
|
||||||
grep "\"email\"" | head -1 | sed 's/.*=> "\(.*\)".*/\1/')
|
grep "\"email\"" 2>/dev/null | head -1 | sed 's/.*=> "\(.*\)".*/\1/')
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "USER_EXISTS=yes"
|
echo "USER_EXISTS=yes"
|
||||||
@@ -281,7 +281,7 @@ get_interworx_user_domains() {
|
|||||||
if [ -d "/etc/httpd/conf.d" ]; then
|
if [ -d "/etc/httpd/conf.d" ]; then
|
||||||
grep -l "SuexecUserGroup ${username}" /etc/httpd/conf.d/vhost_*.conf 2>/dev/null | \
|
grep -l "SuexecUserGroup ${username}" /etc/httpd/conf.d/vhost_*.conf 2>/dev/null | \
|
||||||
sed 's|.*/vhost_||; s|\.conf$||' | \
|
sed 's|.*/vhost_||; s|\.conf$||' | \
|
||||||
grep -v "^${username}\." | \
|
grep -vF "${username}." 2>/dev/null | \
|
||||||
sort -u
|
sort -u
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
@@ -580,14 +580,14 @@ select_user_interactive() {
|
|||||||
get_user_processes() {
|
get_user_processes() {
|
||||||
local username="$1"
|
local username="$1"
|
||||||
|
|
||||||
ps aux | grep "^${username}" | grep -v grep
|
ps aux | grep -F "$username" 2>/dev/null | grep -v grep
|
||||||
}
|
}
|
||||||
|
|
||||||
get_user_top_processes() {
|
get_user_top_processes() {
|
||||||
local username="$1"
|
local username="$1"
|
||||||
local limit="${2:-10}"
|
local limit="${2:-10}"
|
||||||
|
|
||||||
ps aux | grep "^${username}" | grep -v grep | sort -k3 -rn | head -n "$limit"
|
ps aux | grep -F "$username" 2>/dev/null | grep -v grep | sort -k3 -rn | head -n "$limit"
|
||||||
}
|
}
|
||||||
|
|
||||||
#############################################################################
|
#############################################################################
|
||||||
|
|||||||
Reference in New Issue
Block a user