Поиск

Газета FOSS News

16 ноября 2011

О газете
Архив
Авторам
Рекламодателям

 

Кабинет читателя

Вход в систему
Введите имя пользователя и пароль для входа в систему:

4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4

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

05.02.10 /

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

1) Учимся патчить.
Патчить будем на примере уязвимости для FreeBSD (www.securitylab.ru/vulnerability/368343.php). Качаем оттуда патч (wget 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 -C 5 ИСХОДНЫЙ_ФАЙЛ ИЗМЕНЁННЫЙ_ФАЙЛ > file.patch

Здесь так же мы указали параметр -C 5, означает количество выводимых строк с изменениями. Вы должны знать сколько у вас строк меняется, и выставлять нужное число. Если не уверены - можете написать больше, главное не меньше, иначе не часть изменений будет потеряна.
После такой операции будет создан файл 
file.patch, который собственно будет патчем. Файл патча можно так же открыть в текстовом редакторе и подредактировать пути к файлам, если необходимо.

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


Автор: skeletor

По материалам:

Loading ...

Комментарии

Добавить комментарий

* - необходимое для заполнения поле

*




Изображение CAPTCHA для предотвращения спама
Если слово непонятно, нажмите здесь..
*
*
Нет комментариев
 
© 2004-2009 Журнал "Root UA" - свидетельство СМИ: КВ №14786-3757Р
Газета "FOSS News" - свидетельство СМИ: ОД №1355-236-Р
При использовании материалов портала ссылка на Root.UA обязательна, для интернет-изданий – гиперссылка, не закрытая для индексации поисковыми системами.

sitenews