commit:     b19f6190519f94450e4aa23cde091b8fd24d763d
Author:     Brian Evans <grknight <AT> gentoo <DOT> org>
AuthorDate: Fri Sep 29 02:28:36 2017 +0000
Commit:     Brian Evans <grknight <AT> gentoo <DOT> org>
CommitDate: Fri Sep 29 02:30:51 2017 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=b19f6190

mysql*.eclass: Tighten up creation of directories

 eclass/mysql-cmake.eclass       |  6 +++---
 eclass/mysql-multilib-r1.eclass | 34 ++++++++++++----------------------
 eclass/mysql-multilib.eclass    | 23 +++++++++--------------
 eclass/mysql-v2.eclass          | 23 +++++++++--------------
 4 files changed, 33 insertions(+), 53 deletions(-)

diff --git a/eclass/mysql-cmake.eclass b/eclass/mysql-cmake.eclass
index 25d2c3c80e9..2963a97ada8 100644
--- a/eclass/mysql-cmake.eclass
+++ b/eclass/mysql-cmake.eclass
@@ -338,7 +338,7 @@ mysql-cmake_src_prepare() {
                rm -r "${S}"/storage/mroonga/vendor/groonga || die "could not 
remove packaged groonga"
        fi
 
-       epatch_user
+       cmake-utils_src_prepare
 }
 
 # @FUNCTION: mysql-cmake_src_configure
@@ -511,14 +511,14 @@ mysql-cmake_src_install() {
                if [[ ${PREVIOUS_DATADIR} != "yes" ]] ; then
                        dodir "${MY_DATADIR#${EPREFIX}}"
                        keepdir "${MY_DATADIR#${EPREFIX}}"
-                       chown -R mysql:mysql "${D}/${MY_DATADIR}"
+                       nonfatal fowners -R mysql:mysql "${D}/${MY_DATADIR}"
                fi
 
                diropts "-m0755"
                for folder in "${MY_LOGDIR#${EPREFIX}}" ; do
                        dodir "${folder}"
                        keepdir "${folder}"
-                       chown -R mysql:mysql "${ED}/${folder}"
+                       nonfatal fowners -R mysql:mysql "${ED}/${folder}"
                done
        fi
 

diff --git a/eclass/mysql-multilib-r1.eclass b/eclass/mysql-multilib-r1.eclass
index 54954911faa..fcf3b4ef9d1 100644
--- a/eclass/mysql-multilib-r1.eclass
+++ b/eclass/mysql-multilib-r1.eclass
@@ -342,11 +342,7 @@ mysql-multilib-r1_src_prepare() {
                echo > "${S}/support-files/SELinux/CMakeLists.txt" || die
        fi
 
-       if [[ "${EAPI}x" == "5x" ]] ; then
-               epatch_user
-       else
-               default
-       fi
+       cmake-utils_src_prepare
 }
 
 # @FUNCTION: mysql-multilib-r1_src_configure
@@ -608,14 +604,14 @@ multilib_src_install() {
                        if [[ ${PREVIOUS_DATADIR} != "yes" ]] ; then
                                dodir "${MY_DATADIR#${EPREFIX}}"
                                keepdir "${MY_DATADIR#${EPREFIX}}"
-                               chown -R mysql:mysql "${D}/${MY_DATADIR}"
+                               nonfatal fowners -R mysql:mysql 
"${D}/${MY_DATADIR}"
                        fi
 
                        diropts "-m0755"
                        for folder in "${MY_LOGDIR#${EPREFIX}}" ; do
                                dodir "${folder}"
                                keepdir "${folder}"
-                               chown -R mysql:mysql "${ED}/${folder}"
+                               nonfatal fowners -R mysql:mysql 
"${ED}/${folder}"
                        done
 
                        einfo "Including support files and sample 
configurations"
@@ -684,15 +680,9 @@ mysql-multilib-r1_pkg_postinst() {
        # Make sure the vars are correctly initialized
        mysql_init_vars
 
-       # Check FEATURES="collision-protect" before removing this
+       # Create log directory securely if it does not exist
        [[ -d "${ROOT}${MY_LOGDIR}" ]] || install -d -m0750 -o mysql -g mysql 
"${ROOT}${MY_LOGDIR}"
 
-       # Secure the logfiles
-       touch "${ROOT}${MY_LOGDIR}"/mysql.{log,err}
-       chown mysql:mysql "${ROOT}${MY_LOGDIR}"/mysql*
-       chmod 0660 "${ROOT}${MY_LOGDIR}"/mysql*
-
-       # Minimal builds don't have the MySQL server
        if use server ; then
                docinto "support-files"
                for script in \
@@ -929,12 +919,14 @@ mysql-multilib-r1_pkg_config() {
        # Now that /var/run is a tmpfs mount point, we need to ensure it exists 
before using it
        PID_DIR="${EROOT}/var/run/mysqld"
        if [[ ! -d "${PID_DIR}" ]]; then
-               mkdir -p "${PID_DIR}" || die "Could not create pid directory"
-               chown mysql:mysql "${PID_DIR}" || die "Could not set ownership 
on pid directory"
-               chmod 755 "${PID_DIR}" || die "Could not set permissions on pid 
directory"
+               install -d -m 755 -o mysql -g mysql "${PID_DIR}" || die "Could 
not create pid directory"
+       fi
+
+       if [[ ! -d "${MY_DATADIR}" ]]; then
+               install -d -m 750 -o mysql -g mysql "${MY_DATADIR}" || die 
"Could not create data directory"
        fi
 
-       pushd "${TMPDIR}" &>/dev/null
+       pushd "${TMPDIR}" &>/dev/null || die
 
        # Filling timezones, see
        # http://dev.mysql.com/doc/mysql/en/time-zone-support.html
@@ -957,17 +949,15 @@ mysql-multilib-r1_pkg_config() {
        fi
        cmd+=( "--basedir=${EPREFIX}/usr" ${options} 
"--datadir=${ROOT}/${MY_DATADIR}" "--tmpdir=${ROOT}/${MYSQL_TMPDIR}" 
${initialize_options} )
        einfo "Command: ${cmd[*]}"
-       "${cmd[@]}" \
+       su -s /bin/sh -c "${cmd[*]}" mysql \
                >"${TMPDIR}"/mysql_install_db.log 2>&1
        if [ $? -ne 0 ]; then
                grep -B5 -A999 -i "ERROR" "${TMPDIR}"/mysql_install_db.log 1>&2
                die "Failed to initialize mysqld. Please review 
${EPREFIX}/var/log/mysql/mysqld.err AND ${TMPDIR}/mysql_install_db.log"
        fi
-       popd &>/dev/null
+       popd &>/dev/null || die
        [[ -f "${ROOT}/${MY_DATADIR}/mysql/user.frm" ]] \
        || die "MySQL databases not installed"
-       chown -R mysql:mysql "${ROOT}/${MY_DATADIR}" 2>/dev/null
-       chmod 0750 "${ROOT}/${MY_DATADIR}" 2>/dev/null
 
        local socket="${EROOT}/var/run/mysqld/mysqld${RANDOM}.sock"
        local pidfile="${EROOT}/var/run/mysqld/mysqld${RANDOM}.pid"

diff --git a/eclass/mysql-multilib.eclass b/eclass/mysql-multilib.eclass
index aa0930e4475..b172bc0c40a 100644
--- a/eclass/mysql-multilib.eclass
+++ b/eclass/mysql-multilib.eclass
@@ -843,14 +843,9 @@ mysql-multilib_pkg_postinst() {
        # Make sure the vars are correctly initialized
        mysql_init_vars
 
-       # Check FEATURES="collision-protect" before removing this
+       # Create log directory securely if it does not exist
        [[ -d "${ROOT}${MY_LOGDIR}" ]] || install -d -m0750 -o mysql -g mysql 
"${ROOT}${MY_LOGDIR}"
 
-       # Secure the logfiles
-       touch "${ROOT}${MY_LOGDIR}"/mysql.{log,err}
-       chown mysql:mysql "${ROOT}${MY_LOGDIR}"/mysql*
-       chmod 0660 "${ROOT}${MY_LOGDIR}"/mysql*
-
        # Minimal builds don't have the MySQL server
        if use_if_iuse minimal ; then
                :
@@ -1070,28 +1065,28 @@ mysql-multilib_pkg_config() {
        # Now that /var/run is a tmpfs mount point, we need to ensure it exists 
before using it
        PID_DIR="${EROOT}/var/run/mysqld"
        if [[ ! -d "${PID_DIR}" ]]; then
-               mkdir -p "${PID_DIR}" || die "Could not create pid directory"
-               chown mysql:mysql "${PID_DIR}" || die "Could not set ownership 
on pid directory"
-               chmod 755 "${PID_DIR}" || die "Could not set permissions on pid 
directory"
+               install -d -m 755 -o mysql -g mysql "${PID_DIR}" || die "Could 
not create pid directory"
+       fi
+
+       if [[ ! -d "${MY_DATADIR}" ]]; then
+               install -d -m 750 -o mysql -g mysql "${MY_DATADIR}" || die 
"Could not create data directory"
        fi
 
-       pushd "${TMPDIR}" &>/dev/null
+       pushd "${TMPDIR}" &>/dev/null || die
        #cmd="'${EROOT}/usr/share/mysql/scripts/mysql_install_db' 
'--basedir=${EPREFIX}/usr' ${options}"
        cmd=${EROOT}usr/share/mysql/scripts/mysql_install_db
        [[ -f ${cmd} ]] || cmd=${EROOT}usr/bin/mysql_install_db
        cmd="'$cmd' '--basedir=${EPREFIX}/usr' ${options} 
'--datadir=${ROOT}/${MY_DATADIR}' '--tmpdir=${ROOT}/${MYSQL_TMPDIR}'"
        einfo "Command: $cmd"
-       eval $cmd \
+       su -s /bin/sh -c "${cmd}" mysql \
                >"${TMPDIR}"/mysql_install_db.log 2>&1
        if [ $? -ne 0 ]; then
                grep -B5 -A999 -i "ERROR" "${TMPDIR}"/mysql_install_db.log 1>&2
                die "Failed to run mysql_install_db. Please review 
${EPREFIX}/var/log/mysql/mysqld.err AND ${TMPDIR}/mysql_install_db.log"
        fi
-       popd &>/dev/null
+       popd &>/dev/null || die
        [[ -f "${ROOT}/${MY_DATADIR}/mysql/user.frm" ]] \
        || die "MySQL databases not installed"
-       chown -R mysql:mysql "${ROOT}/${MY_DATADIR}" 2>/dev/null
-       chmod 0750 "${ROOT}/${MY_DATADIR}" 2>/dev/null
 
        # Filling timezones, see
        # http://dev.mysql.com/doc/mysql/en/time-zone-support.html

diff --git a/eclass/mysql-v2.eclass b/eclass/mysql-v2.eclass
index 3734e19bca9..53cba1eb729 100644
--- a/eclass/mysql-v2.eclass
+++ b/eclass/mysql-v2.eclass
@@ -587,14 +587,9 @@ mysql-v2_pkg_postinst() {
        # Make sure the vars are correctly initialized
        mysql_init_vars
 
-       # Check FEATURES="collision-protect" before removing this
+       # Create log directory securely if it does not exist
        [[ -d "${ROOT}${MY_LOGDIR}" ]] || install -d -m0750 -o mysql -g mysql 
"${ROOT}${MY_LOGDIR}"
 
-       # Secure the logfiles
-       touch "${ROOT}${MY_LOGDIR}"/mysql.{log,err}
-       chown mysql:mysql "${ROOT}${MY_LOGDIR}"/mysql*
-       chmod 0660 "${ROOT}${MY_LOGDIR}"/mysql*
-
        # Minimal builds don't have the MySQL server
        if ! use minimal ; then
                docinto "support-files"
@@ -821,28 +816,28 @@ mysql-v2_pkg_config() {
        # Now that /var/run is a tmpfs mount point, we need to ensure it exists 
before using it
        PID_DIR="${EROOT}/var/run/mysqld"
        if [[ ! -d "${PID_DIR}" ]]; then
-               mkdir -p "${PID_DIR}" || die "Could not create pid directory"
-               chown mysql:mysql "${PID_DIR}" || die "Could not set ownership 
on pid directory"
-               chmod 755 "${PID_DIR}" || die "Could not set permissions on pid 
directory"
+               install -d -m 755 -o mysql -g mysql "${PID_DIR}" || die "Could 
not create pid directory"
+       fi
+
+       if [[ ! -d "${MY_DATADIR}" ]]; then
+               install -d -m 750 -o mysql -g mysql "${MY_DATADIR}" || die 
"Could not create data directory"
        fi
 
-       pushd "${TMPDIR}" &>/dev/null
+       pushd "${TMPDIR}" &>/dev/null || die
        #cmd="'${EROOT}/usr/share/mysql/scripts/mysql_install_db' 
'--basedir=${EPREFIX}/usr' ${options}"
        cmd=${EROOT}usr/share/mysql/scripts/mysql_install_db
        [[ -f ${cmd} ]] || cmd=${EROOT}usr/bin/mysql_install_db
        cmd="'$cmd' '--basedir=${EPREFIX}/usr' ${options} 
'--datadir=${ROOT}/${MY_DATADIR}' '--tmpdir=${ROOT}/${MYSQL_TMPDIR}'"
        einfo "Command: $cmd"
-       eval $cmd \
+       su -s /bin/sh -c "${cmd}" mysql \
                >"${TMPDIR}"/mysql_install_db.log 2>&1
        if [ $? -ne 0 ]; then
                grep -B5 -A999 -i "ERROR" "${TMPDIR}"/mysql_install_db.log 1>&2
                die "Failed to run mysql_install_db. Please review 
${EPREFIX}/var/log/mysql/mysqld.err AND ${TMPDIR}/mysql_install_db.log"
        fi
-       popd &>/dev/null
+       popd &>/dev/null || die
        [[ -f "${ROOT}/${MY_DATADIR}/mysql/user.frm" ]] \
        || die "MySQL databases not installed"
-       chown -R mysql:mysql "${ROOT}/${MY_DATADIR}" 2>/dev/null
-       chmod 0750 "${ROOT}/${MY_DATADIR}" 2>/dev/null
 
        # Filling timezones, see
        # http://dev.mysql.com/doc/mysql/en/time-zone-support.html

Reply via email to