-Рубрики

 -Метки

cтихи Куинджи Поздравляю! анекдоты аудиокнига аудиокнига (отрывок) возвращение в россию генеалогия география россии дебилы демотиваторы документальное кино ежедневник жизнь в ссср здоровье золотые слова игрушка информация история москвы итоги календарь книга книги компьютерный ликбез коронавирус литературный ликбез лотрек любовная лирика любовь безусловная медицина медицинский ликбез международный праздник мои стихи моим подписчикам мой лечащий врач мой праздник мсц сокольники мысли вслух назад в ссср налог народная медицина народный календарь народный праздник наука ностальгия по ссср образование оккуультизм песни песни александра галича плейкаст плэйкаст поздравление политический ликбез поэзия поэтесса поэтический ликбез православие православный праздник праздник праздники притча проекты психология радиоспектакль рассказ рассказы бабы яги ребенок рецепты блюд российский сериал российский фильм саморазвитие сислей сказка смоленск смотреть смотрим сериалы советы от лены ссср стихи стихи мои тигруля туризм учёба философская лирика фильм фильмы онлайн фракталы шестикрылый серафим эзотерика экология юмор юмор в сети юмор каждый день юридический ликбез ютуб ярмарка мастеров

 -Приложения

 -Фотоальбом

Посмотреть все фотографии серии Общая
Общая
23:28 24.02.2016
Фотографий: 2

 -Поиск по дневнику

Поиск сообщений в serzh548

 -Подписка по e-mail

 

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 28.08.2011
Записей: 7031
Комментариев: 1101
Написано: 8460


Учимся патчить и создавать патчи

Вторник, 30 Августа 2016 г. 13:00 + в цитатник

Учимся патчить и создавать патчи

С патчами мы сталкиваемся не так часто, но и не так редко. В этой статье мы научимся патчить и создавать патчи. Патчить на самом деле легче, чем можно себе представить.

1) Учимся патчить.

Патчить будем на примере уязвимости для FreeBSD(http://www.securitylab.ru/vulnerability/368343.php). Качаем оттуда патч (wget http://security.FreeBSD.org/patches/SA-09:05/telnetd.patch). После этого нужно выяснить, куда же его положить, что бы патч прошёл успешно. Для этого можно вывести на экран первые несколько строк:

Index: contrib/telnet/telnetd/sys_term.c
===================================================================
--- contrib/telnet/telnetd/sys_term.c (revision 188667)
+++ contrib/telnet/telnetd/sys_term.c (working copy)
@@ -1271,8 +1271,18 @@

Смотрим внимательно и видим, какой файл он патчит. Поскольку путь начинается с contrib/telnetто можно предполодить, что файл должен находится в папке /usr/src. Копируем его туда и пробуем патчить:

#patch < telnetd.patch

Если после этого у вас на экран вывелось похожее на то, что ниже — значит всё удалось. Обычно стоит прочесть, вывод и удостоверится, что всё прошло succeed:

Hmm... Looks like a new-style context diff to me...
The text leading up to this was:
--------------------------
|*** ../convert.sh Fri Dec 5 17:00:52 2008
|--- convert.sh Sat Apr 11 13:52:43 2009
--------------------------
Patching file convert.sh using Plan A...
Hunk #1 succeeded at 6.
done

Если вдруг патчу не удаётся найти нужный файл, он выдаёт запрос на указания пути вручную:

Hmm... Looks like a new-style context diff to me...
The text leading up to this was:
--------------------------
|*** convert1.sh Sat Apr 11 13:40:58 2009
|--- convert.sh Fri Dec 5 17:00:52 2008
--------------------------
File to patch:

после введения пути:

File to patch: ../convert.sh
Patching file ../convert.sh using Plan A...
Reversed (or previously applied) patch detected! Assume -R?
Hunk #1 succeeded at 6.
done

Хочу заметить, что утилита patch имеет так же параметры, которые можно использовать. Например, довольно позным может оказаться ключ -C (—check), который позволяет посмотреть, какие изменения будут произведены с файлом, но не пропатчит.

2) Создание патчей.

— обычный

Создание патчей происходит немного сложнее, чем патчить. Для этого берём 2 версии одного и того же файла, помещаем их в разные директории, называем одинаково. После этого будем пользоваться командой diff для выявления разницы между файлами. Здесь самое главное соблюсти порядок в котором подаются имена файлов. ИСХОДНЫЙ_ФАЙЛ — эталонный файл, ИЗМЕНЁННЫЙ_ФАЙЛ — файл, который содержит изменения.

$diff -u ИСХОДНЫЙ_ФАЙЛ ИЗМЕНЁННЫЙ_ФАЙЛ > file.patch

где -u — означает унифицированный вывод, то есть с —/+++.

После такой операции будет создан файл file.patch, который собственно будет патчем. Файл патча можно так же открыть в текстовом редакторе и подредактировать пути к файлам, если необходимо.

Вот это и всё. Если хотите большего функционала — читайте man к указанным здесь бинарникам.

— через svn

Расскажу на примере коммита . Это исправление не вышло в качестве патча, зато вошло в коммит 269687. Наша идея такова: делаем diff между 2-мя соседними (нашим 269687 и предыдущим 269686) коммитами и накладываем патч:

# svn diff -r269686:269687 svn://svn.freebsd.org/base/stable/9 > /path/to/openssl.patch
# cd /usr/src && patch < /path/to/openssl.patch


Оригинал статьи здесь.

Опубликовано с разрешения редакции журнала RootUA и газеты FOSS News

Рубрики:  5. Программы/Актуальные программы
Статьи
Метки:  
Понравилось: 1 пользователю

 

Добавить комментарий:
Текст комментария: смайлики

Проверка орфографии: (найти ошибки)

Прикрепить картинку:

 Переводить URL в ссылку
 Подписаться на комментарии
 Подписать картинку