/etc/profile error when logging in

Operating System & Version
CENTOS 7.8
cPanel & WHM Version
86.0.21

coursevector

Well-Known Member
Feb 23, 2015
162
28
78
cPanel Access Level
Root Administrator
When I log into one of my servers, I immediately get this error:

Code:
bash: /etc/profile: line 1835263: syntax error near unexpected token `newline'
bash: /etc/profile: line 1835263: `        UID=`/usr/bin/id -ru`'
What is this and how can I fix it? I've tried to look at the file in nano but as you can see it's on line 1,835,263, which seems very strange. The beginning is a ton of blank lines before getting to anything relevenat. Using grep I can see the actual contents of the file. What is going on?

This is the contents of the file:
Code:
[root@host ~]# grep . /etc/profile
# /etc/profile
# System wide environment and startup programs, for login setup
# Functions and aliases go in /etc/bashrc
# It's NOT a good idea to change this file unless you know what you
# are doing. It's much better to create a custom.sh shell script in
# /etc/profile.d/ to make custom changes to your environment, as this
# will prevent the need for merging in future updates.
pathmunge () {
    case ":${PATH}:" in
        *:"$1":*)
            ;;
        UID=`/usr/bin/id -ru`
    fi
    USER="`/usr/bin/id -un`"
    LOGNAME=$USER
    MAIL="/var/spool/mail/$USER"
fi
# Path manipulation
if [ "$EUID" = "0" ]; then
    pathmunge /usr/sbin
    pathmunge /usr/local/sbin
else
    pathmunge /usr/local/sbin after
    pathmunge /usr/sbin after
fi
HOSTNAME=`/usr/bin/hostname 2>/dev/null`
HISTSIZE=1000
if [ "$HISTCONTROL" = "ignorespace" ] ; then
    export HISTCONTROL=ignoreboth
else
    export HISTCONTROL=ignoredups
fi
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL
# By default, we want umask to get set. This sets it for login shell
# Current threshold for system reserved uid/gids is 200
# You could check uidgid reservation validity in
# /usr/share/doc/setup-*/uidgid file
if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
    umask 002
else
    umask 022
fi
for i in /etc/profile.d/*.sh /etc/profile.d/sh.local ; do
    if [ -r "$i" ]; then
        if [ "${-#*i}" != "$-" ]; then
            . "$i"
        else
            . "$i" >/dev/null
        fi
    fi
done
unset i
unset -f pathmunge

#cPanel Added User Commands -- BEGIN
# Insert an entry into the PATH after all of the user's home directory paths.
PATH="$(/usr/local/cpanel/3rdparty/bin/perl -e 'print join ":", map { ( ( !/^\Q$ENV{HOME}\E/ && !$seen++ && $_ ne $ARGV[0] ? @ARGV : () ), $_ ) } split /:/, $ENV{PATH};' /usr/local/cpanel/3rdparty/lib/path-bin)"
export PATH
#cPanel Added User Commands -- END

#cPanel Added local::lib -- BEGIN
LOCALLIBUSER=$USER
if [ -e "/usr/bin/whoami" ]; then
    LOCALLIBUSER="$(/usr/bin/whoami)"
fi
if [ "$LOCALLIBUSER" != "root" -a -e "/var/cpanel/users/$LOCALLIBUSER" ]; then
    eval $(perl -Mlocal::lib >/dev/null 2>&1)
fi
#cPanel Added local::lib -- END

#cPanel Added Limit Protections -- BEGIN
#unlimit so we can run the whoami
ulimit -n 4096 -u 14335 -m unlimited -d unlimited -s 8192 -c 1000000 -v unlimited 2>/dev/null
LIMITUSER=$USER
if [ -e "/usr/bin/whoami" ]; then
    LIMITUSER=$(/usr/bin/whoami)
fi
# Limit the user only if we are not root and are a regular user (UID greater
# than or equal to UID_MIN).
if [ "$LIMITUSER" != "root" ] &&
    ! id -Gn | grep -qsP '(^| )wheel( |$)' &&
    [ "$(id -u)" -ge "$( (grep -s '^UID_MIN' /etc/login.defs || echo 'x 500') | awk '{print $2}')" ]
then
    ulimit -n 100 -u 35 -m 200000 -d 200000 -s 8192 -c 200000 -v unlimited 2>/dev/null
else
    ulimit -n 4096 -u 14335 -m unlimited -d unlimited -s 8192 -c 1000000 -v unlimited 2>/dev/null
fi
#cPanel Added Limit Protections -- END
 

cPanelLauren

Product Owner II
Staff member
Nov 14, 2017
13,266
1,304
363
Houston
What you're showing me certainly doesn't have a line 1835263 but the issue appears to be in the custom entry here:
Code:
            ;;
        UID=`/usr/bin/id -ru`
    fi
I'm thinking it's missing double quotes " ". How long has this customization been in place?
 

cPanelLauren

Product Owner II
Staff member
Nov 14, 2017
13,266
1,304
363
Houston
I'm not sure in that case but it is certainly modified:

Code:
[root@server ~]# grep . /etc/profile
# /etc/profile
# System wide environment and startup programs, for login setup
# Functions and aliases go in /etc/bashrc
# It's NOT a good idea to change this file unless you know what you
# are doing. It's much better to create a custom.sh shell script in
# /etc/profile.d/ to make custom changes to your environment, as this
# will prevent the need for merging in future updates.
pathmunge () {
    case ":${PATH}:" in
        *:"$1":*)
            ;;
        *)
            if [ "$2" = "after" ] ; then
                PATH=$PATH:$1
            else
                PATH=$1:$PATH
            fi
    esac
}
cPanel adds it's customizations in the sections noted by comments - the issue in yours though is not in a cPanel specific area and I'm unsure what would have changed that.
 

coursevector

Well-Known Member
Feb 23, 2015
162
28
78
cPanel Access Level
Root Administrator
Is there a way to reset it? I have a script i run on the servers but it only updates /etc/environment to get rid of warnings from Perl for locale issues.