절대 파일 경로 이름이 포함된 패치를 적용하는 방법은 무엇입니까?

절대 파일 경로 이름이 포함된 패치를 적용하는 방법은 무엇입니까?

생성된 이 패치를 적용하고 싶지만 patch명령을 사용하려면 파일 경로 이름을 제공해야 합니다.

administrator@server:~$ diff -Nau /etc/php/8.1/fpm/pool.d/www.conf /etc/php/8.1/fpm/pool.d/www.NEW.conf > ~/php8.1-fpm-www.conf.patch
administrator@server:~$ sudo patch -p0 < ~/php8.1-fpm-www.conf.patch
Ignoring potentially dangerous file name /etc/php/8.1/fpm/pool.d/www.conf
Ignoring potentially dangerous file name /etc/php/8.1/fpm/pool.d/www.NEW.conf
cant find file to patch at input line 3
Perhaps you used the wrong -p or --strip option?
The text leading up to this was:
--------------------------
|--- /etc/php/8.1/fpm/pool.d/www.conf   2022-09-15 13:30:49.000000000 +0200
|+++ /etc/php/8.1/fpm/pool.d/www.NEW.conf       2022-11-07 16:40:35.555078608 +0100
--------------------------
File to patch: ^C
administrator@server:~$

답변1

첫 번째 구성요소를 제거 /하고 루트부터 시작해야 합니다.

cd /
sudo patch -p1 < ~/php8.1-fpm-www.conf.patch

GNU는 patch현재 디렉터리(또는 지정된 디렉터리)에서 시작하는 트리 외부의 파일 이름을 가진 패치 콘텐츠를 -d안전하지 않은 것으로 간주합니다(참조:CVE-2010-4651). 상대 경로를 사용하는 것이 더 낫습니다. 패치를 다른 컨텍스트에서 사용할 수 있도록 가능하면 경로를 최소화하는 것이 좋습니다. 귀하의 경우에는 실제로 디렉터리를 완전히 건너뛸 것입니다.

(
  cd /etc/php/8.1/fpm/pool.d &&
    diff -u www.conf www.NEW.conf
) > ~/php8.1-fpm-www.conf.patch

관련 정보