Magento 1.7.2 SECURITY PATCH ERROR Via SSH

2019-02-17 05:44发布

问题:

Following Directions word for word...

Please upload the patch into your Magento root directory and run the appropriate SSH command:
For patch files with the file extension .sh:
sh patch_file_name.sh
Example: sh PATCH_SUPEE-1868_CE_1.7.0.2_v1.sh

I have uploaded the Patch file PATCH_SUPEE-2518_CE_1.5.1.0-1.7.0.2_v1.sh

To the magento root directory (public_html/) and Receive this error on execution.

root@atlas [/home/public_html/]# sh PATCH_SUPEE-2518_CE_1.5.1.0-1.7.0.2_v1.sh
: command not found_1.5.1.0-1.7.0.2_v1.sh: line 7:
'ATCH_SUPEE-2518_CE_1.5.1.0-1.7.0.2_v1.sh: line 9: syntax error near unexpected token `{
'ATCH_SUPEE-2518_CE_1.5.1.0-1.7.0.2_v1.sh: line 9: `_check_installed_tools() {

Line 9 in the .sh patch file is

_check_installed_tools() {
local missed=""

until [ -z "$1" ]; do
    type -t $1 >/dev/null 2>/dev/null
    if (( $? != 0 )); then
        missed="$missed $1"
    fi
    shift
done

echo $missed

I cannot see an error within this file, or understand what is causing this to fail. Any one else have this issue, or know anything about it?

Entire .sh file contents

#!/bin/bash
# Patch apllying tool template
# v0.1.2
# (c) Copyright 2013. Magento Inc.
#
# DO NOT CHANGE ANY LINE IN THIS FILE.

# 1. Check required system tools
_check_installed_tools() {
    local missed=""

    until [ -z "$1" ]; do
        type -t $1 >/dev/null 2>/dev/null
        if (( $? != 0 )); then
            missed="$missed $1"
        fi
        shift
    done

    echo $missed
}

REQUIRED_UTILS='sed patch'
MISSED_REQUIRED_TOOLS=`_check_installed_tools $REQUIRED_UTILS`
if (( `echo $MISSED_REQUIRED_TOOLS | wc -w` > 0 ));
then
    echo -e "Error! Some required system tools, that are utilized in this sh script, are not installed:\nTool(s) \"$MISSED_REQUIRED_TOOLS\" is(are) missed, please install it(them)."
    exit 1
fi

# 2. Determine bin path for system tools
CAT_BIN=`which cat`
PATCH_BIN=`which patch`
SED_BIN=`which sed`
PWD_BIN=`which pwd`
BASENAME_BIN=`which basename`

BASE_NAME=`$BASENAME_BIN "$0"`

# 3. Help menu
if [ "$1" = "-?" -o "$1" = "-h" -o "$1" = "--help" ]
then
    $CAT_BIN << EOFH
Usage: sh $BASE_NAME [--help] [-R|--revert] [--list]
Apply embedded patch.

-R, --revert    Revert previously applied embedded patch
--list          Show list of applied patches
--help          Show this help message
EOFH
    exit 0
fi

# 4. Get "revert" flag and "list applied patches" flag
REVERT_FLAG=
SHOW_APPLIED_LIST=0
if [ "$1" = "-R" -o "$1" = "--revert" ]
then
    REVERT_FLAG=-R
fi
if [ "$1" = "--list" ]
then
    SHOW_APPLIED_LIST=1
fi

# 5. File pathes
CURRENT_DIR=`$PWD_BIN`/
APP_ETC_DIR=`echo "$CURRENT_DIR""app/etc/"`
APPLIED_PATCHES_LIST_FILE=`echo "$APP_ETC_DIR""applied.patches.list"`

# 6. Show applied patches list if requested
if [ "$SHOW_APPLIED_LIST" -eq 1 ] ; then
    echo -e "Applied/reverted patches list:"
    if [ -e "$APPLIED_PATCHES_LIST_FILE" ]
    then
        if [ ! -r "$APPLIED_PATCHES_LIST_FILE" ]
        then
            echo "ERROR: \"$APPLIED_PATCHES_LIST_FILE\" must be readable so applied patches list can be shown."
            exit 1
        else
            $SED_BIN -n "/SUP-\|SUPEE-/p" $APPLIED_PATCHES_LIST_FILE
        fi
    else
        echo "<empty>"
    fi
    exit 0
fi

# 7. Check applied patches track file and its directory
_check_files() {
    if [ ! -e "$APP_ETC_DIR" ]
    then
        echo "ERROR: \"$APP_ETC_DIR\" must exist for proper tool work."
        exit 1
    fi

    if [ ! -w "$APP_ETC_DIR" ]
    then
        echo "ERROR: \"$APP_ETC_DIR\" must be writeable for proper tool work."
        exit 1
    fi

    if [ -e "$APPLIED_PATCHES_LIST_FILE" ]
    then
        if [ ! -w "$APPLIED_PATCHES_LIST_FILE" ]
        then
            echo "ERROR: \"$APPLIED_PATCHES_LIST_FILE\" must be writeable for proper tool work."
            exit 1
        fi
    fi
}

_check_files

# 8. Apply/revert patch
# Note: there is no need to check files permissions for files to be patched.
# "patch" tool will not modify any file if there is not enough permissions for all files to be modified.
# Get start points for additional information and patch data
SKIP_LINES=$((`$SED_BIN -n "/^__PATCHFILE_FOLLOWS__$/=" "$CURRENT_DIR""$BASE_NAME"` + 1))
ADDITIONAL_INFO_LINE=$(($SKIP_LINES - 3))p

_apply_revert_patch() {
    DRY_RUN_FLAG=
    if [ "$1" = "dry-run" ]
    then
        DRY_RUN_FLAG=" --dry-run"
        echo "Checking if patch can be applied/reverted successfully..."
    fi
    PATCH_APPLY_REVERT_RESULT=`$SED_BIN -e '1,/^__PATCHFILE_FOLLOWS__$/d' "$CURRENT_DIR""$BASE_NAME" | $PATCH_BIN $DRY_RUN_FLAG $REVERT_FLAG -p0`
    PATCH_APPLY_REVERT_STATUS=$?
    if [ $PATCH_APPLY_REVERT_STATUS -eq 1 ] ; then
        echo -e "ERROR: Patch can't be applied/reverted successfully.\n\n$PATCH_APPLY_REVERT_RESULT"
        exit 1
    fi
    if [ $PATCH_APPLY_REVERT_STATUS -eq 2 ] ; then
        echo -e "ERROR: Patch can't be applied/reverted successfully."
        exit 2
    fi
}

REVERTED_PATCH_MARK=
if [ -n "$REVERT_FLAG" ]
then
    REVERTED_PATCH_MARK=" | REVERTED"
fi

_apply_revert_patch dry-run
_apply_revert_patch

# 9. Track patch applying result
echo "Patch was applied/reverted successfully."
ADDITIONAL_INFO=`$SED_BIN -n ""$ADDITIONAL_INFO_LINE"" "$CURRENT_DIR""$BASE_NAME"`
APPLIED_REVERTED_ON_DATE=`date -u +"%F %T UTC"`
APPLIED_REVERTED_PATCH_INFO=`echo -n "$APPLIED_REVERTED_ON_DATE"" | ""$ADDITIONAL_INFO""$REVERTED_PATCH_MARK"`
echo -e "$APPLIED_REVERTED_PATCH_INFO\n$PATCH_APPLY_REVERT_RESULT\n\n" >> "$APPLIED_PATCHES_LIST_FILE"

exit 0


SUPEE-2518 | CE_1.7.0.2 | v1 | e6f2d2354843b1ca69988a44de1761ce180e746c | Thu Nov 21 12:44:53 2013 +0200 | v1.7.0.2..SUPEE-2518

__PATCHFILE_FOLLOWS__
diff --git app/code/core/Mage/Cms/Helper/Wysiwyg/Images.php app/code/core/Mage/Cms/Helper/Wysiwyg/Images.php
index 9e8d6be..b106d09 100644
--- app/code/core/Mage/Cms/Helper/Wysiwyg/Images.php
+++ app/code/core/Mage/Cms/Helper/Wysiwyg/Images.php
@@ -197,11 +197,11 @@ class Mage_Cms_Helper_Wysiwyg_Images extends Mage_Core_Helper_Abstract
     public function getCurrentPath()
     {
         if (!$this->_currentPath) {
-            $currentPath = $this->getStorageRoot();
-            $path = $this->_getRequest()->getParam($this->getTreeNodeName());
-            if ($path) {
-                $path = $this->convertIdToPath($path);
-                if (is_dir($path)) {
+            $currentPath = realpath($this->getStorageRoot());
+            $node = $this->_getRequest()->getParam($this->getTreeNodeName());
+            if ($node) {
+                $path = realpath($this->convertIdToPath($node));
+                if (is_dir($path) && false !== stripos($path, $currentPath)) {
                     $currentPath = $path;
                 }
             }

回答1:

Try to create new text file, for example, mypatch.patch and copy diffs from patch to it

diff --git app/code/core/Mage/Cms/Helper/Wysiwyg/Images.php app/code/core/Mage/Cms/Helper/Wysiwyg/Images.php
index 9e8d6be..b106d09 100644
--- app/code/core/Mage/Cms/Helper/Wysiwyg/Images.php
+++ app/code/core/Mage/Cms/Helper/Wysiwyg/Images.php
@@ -197,11 +197,11 @@ class Mage_Cms_Helper_Wysiwyg_Images extends Mage_Core_Helper_Abstract
     public function getCurrentPath()
     {
         if (!$this->_currentPath) {
-            $currentPath = $this->getStorageRoot();
-            $path = $this->_getRequest()->getParam($this->getTreeNodeName());
-            if ($path) {
-                $path = $this->convertIdToPath($path);
-                if (is_dir($path)) {
+            $currentPath = realpath($this->getStorageRoot());
+            $node = $this->_getRequest()->getParam($this->getTreeNodeName());
+            if ($node) {
+                $path = realpath($this->convertIdToPath($node));
+                if (is_dir($path) && false !== stripos($path, $currentPath)) {
                     $currentPath = $path;
                 }
             }

Then copy it into root of your store and do:

patch -p0 < mypatch.patch

OR may be try to change

_check_installed_tools() {

to

function _check_installed_tools {

in base script



回答2:

I ran into the same error:

root@www01:/www/sites/REDACTED/files/html# sh PATCH_SUPEE-2518_EE_1.10.1.0-1.13.0.2_v1.sh
: not found-2518_EE_1.10.1.0-1.13.0.2_v1.sh: 7:
: not found-2518_EE_1.10.1.0-1.13.0.2_v1.sh: 11:
PATCH_SUPEE-2518_EE_1.10.1.0-1.13.0.2_v1.sh: 168: Syntax error: "(" unexpected (expecting "then")

When I checked it out in vim, I saw that it was encoded in DOS. Ran dos2unix on it and the patch installed successfully:

root@www01:/www/sites/REDACTED/files/html# dos2unix PATCH_SUPEE-2518_EE_1.10.1.0-1.13.0.2_v1.sh
dos2unix: converting file PATCH_SUPEE-2518_EE_1.10.1.0-1.13.0.2_v1.sh to UNIX format ...
root@www01:/www/sites/REDACTED/files/html# bash PATCH_SUPEE-2518_EE_1.10.1.0-1.13.0.2_v1.sh
Checking if patch can be applied/reverted successfully...
Patch was applied/reverted successfully.


回答3:

I encountered this same error. I fixed it by installing "Patch". Strangely enough I came to this thread for answers and tried them all except for @hadis suggestion. I misinterpreted his solution by trying to run "yum patch_name.sh"

I eventually looked at the file and after that his solution was fairly obvious. Once "Patch" is installed, execute the script again and voila! :)

yum install patch

sh PATCH_SUPEE-1868_CE_1.7.0.2_v1.sh


回答4:

you must install patch try this: yum install patch



回答5:

I found that this error occurs when the patch file (not the file being patched) has line endings which do not match the system on which it is being run.

eg:

  • You are running on Linux
  • The patch file has Windows line endings

Then you need to check that the file being patched also has line endings for the system on which it's being run

See also Error patching Magento 1.7.1 Hunk #1 Failed at



回答6:

Go to magento download patch site. When you click on the download button on magento site then it will open a new site with the patch-code. make a right click on it and choose view source code (with chrome)

view-source:http://www.magentocommerce.com/index.php/getmagento/ce_patches/PATCH_SUPEE-2629_EE_1.12.0.0_v1.sh

then make a right click once again and save the file as e.g. PATCH_SUPEE-2629_EE_1.12.0.0_v1.sh. Finally move the file to the root directory of your magento install and try to apply the patch once again. For me it works.