Если вы используете какой-либо достаточно хорошо поддерживаемый дистрибутив, вам не нужен сам исходный патч. Большинство дистрибутивов к настоящему времени обновили бы libc и поместили его в свои репозитории, и все, что вам нужно сделать, это использовать диспетчер пакетов для обновления libc. (Если они еще не сделали этого, серьезно подумайте о смене дистрибутива.) И это действительно касается Amazon Linux.Из свои бюллетени по безопасности :
[C] пользователи, использующие Amazon EC2, которые изменили свои конфигурации на { {1}} используют инфраструктуру DNS, отличную от AWS, должны обновлять свои среды Linux сразу после инструкций, предоставленных их дистрибутивом Linux. Клиенты EC2, использующие инфраструктуру AWS DNS, не пострадают и не не нужно предпринимать никаких действий.
Для клиентов Amazon EC2, использующих Amazon Linux и изменивших свою конфигурацию для использования инфраструктуры DNS, отличной от AWS:
Исправление для CVE-2015-7547 было перенесено в AMI Amazon Linux { {1}} репозиториев с рейтингом критичности. Экземпляры, запущенные с конфигурацией Amazon Linux по умолчанию 16.02.2016 или позже , будут автоматически включать необходимое исправление для этого CVE.
Если хотите, патч начинается с diff --git a / resolv / nss_dns / dns-host.cb / resolv / nss_dns / dns-host.c
в электронном письме:
CVE-2015-7547
2016-02-15 Carlos O'Donell
[BZ #18665]
* resolv/nss_dns/dns-host.c (gaih_getanswer_slice): Always set
*herrno_p.
(gaih_getanswer): Document functional behviour. Return tryagain
if any result is tryagain.
* resolv/res_query.c (__libc_res_nsearch): Set buffer size to zero
when freed.
* resolv/res_send.c: Add copyright text.
(__libc_res_nsend): Document that MAXPACKET is expected.
(send_vc): Document. Remove buffer reuse.
(send_dg): Document. Remove buffer reuse. Set *thisanssizp to set the
size of the buffer. Add Dprint for truncated UDP buffer.
diff --git a/resolv/nss_dns/dns-host.c b/resolv/nss_dns/dns-host.c
index a255d5e..47cfe27 100644
--- a/resolv/nss_dns/dns-host.c
+++ b/resolv/nss_dns/dns-host.c
@@ -1031,7 +1031,10 @@ gaih_getanswer_slice (const querybuf *answer, int anslen, const char *qname,
int h_namelen = 0;
if (ancount == 0)
- return NSS_STATUS_NOTFOUND;
+ {
+ *h_errnop = HOST_NOT_FOUND;
+ return NSS_STATUS_NOTFOUND;
+ }
...
-eq
True if the integers n1 and n2 are algebraically equal; otherwise, false.
=
True if the strings s1 and s2 are identical; otherwise, false.
Итак, -eq
сравнивает целые числа, а =
сравнивает строки (, которые также будут работать с некоторыми ограниченными целочисленными случаями ).
У вас есть проблема с синтаксисом, она должна быть:
[ "$rc" = 0 ]
И не
[ $rc=0 ]
[ "$rc" = 0 ]
должен выйти с 1, потому что rc
не равно 0
[ $rc=0 ]
на самом деле должен завершиться с 0, потому что он, скорее всего, будет рассматриваться как строка, а наличие строки в тестовой конструкции [
будет оцениваться как истина
С тестом sh [
есть несколько отличий:
# leading 0
$ [ 01 -eq 1 ]; echo $?
0
# adjacent whitespace
$ [ ' 1' -eq 1 ]; echo $?
0
# negative 0 vs positive 0
$ [ 0 -eq -0 ]; echo $?
0
Однако с тестом bash [[
есть большое количество отличий (В том числе упомянутые выше):
# base 8
$ [[ 032 -eq 26 ]]; echo $?
0
# Arithmetic expressions
$ [[ 1*6+32/15*2-1 -eq 9 ]]; echo $?
0
# Base 64
$ [[ 64#Hello_world -eq -5506400892957379251 ]]; echo $?
0
Для числовых сравнений вы должны использовать -eq
, тогда как =
для сравнения строк (, так как из вашего именования переменных вы, кажется, уже знаете ).
Одним из лучших знакомств с командой test
, также известной как [
, является The Unix Shell’s Humble If