Статусы завершения сравнений в тестовых конструкциях

Если вы используете какой-либо достаточно хорошо поддерживаемый дистрибутив, вам не нужен сам исходный патч. Большинство дистрибутивов к настоящему времени обновили бы 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;
+    }

...

3
07.03.2019, 23:28
2 ответа

-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
3
27.01.2020, 21:20

Для числовых сравнений вы должны использовать -eq, тогда как =для сравнения строк (, так как из вашего именования переменных вы, кажется, уже знаете ).

Одним из лучших знакомств с командой test, также известной как [, является The Unix Shell’s Humble If

0
27.01.2020, 21:20

Теги

Похожие вопросы