Bug 8346

Summary: DHCPD crashes when failover is used
Product: Sisyphus Reporter: Alex Moskalenko <mav>
Component: dhcp-serverAssignee: Mikhail Efremov <sem>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: critical    
Priority: P2 CC: sem
Version: unstable   
Hardware: all   
OS: Linux   
Attachments:
Description Flags
патч на dhcp-3.0.1rc14-owl-alt-drop_priv.patch
none
dhcp-3.0.3-owl-alt-drop_priv.patch
none
dhcp-3.0.3-alt1.nosrc.rpm none

Description Alex Moskalenko 2005-10-26 14:43:08 MSD
DHCPD падает по sigsegv при определении хотя бы одного failover-сервера в  
dhcpd.conf. Происходит после накладывания патча  
dhcp-3.0.1rc14-owl-alt-drop_priv.patch. В этом патче в файле dhcpd.c функции 
main() переносится часть кода, инициализирующая базу адресов, ниже по тексту 
для инициализации базы после перехода в chroot и сброса привилегий. при этом 
вызов функции postdb_startup() оставлен на старом месте, что приводит к ее 
вызову до инициализации базы адресов. Он и вызывает падение dhcpd. если 
функцию перенести ниже и вызвать после перехода в chroot и инициализации базы, 
то dhcpd стартует и работает. 
Steps to Reproduce:
1. Добавьте описание failover peer в dhcpd.conf 
2. Запустите dhcpd 
3. segfault... 
Actual Results:  
dhcpd прекращает работу  

Expected Results:  
нормальная работа dhcpd
Comment 1 Alex Moskalenko 2005-10-26 15:16:56 MSD
Created attachment 1215 [details]
патч на dhcp-3.0.1rc14-owl-alt-drop_priv.patch
Comment 2 Dmitry V. Levin 2005-10-26 20:57:21 MSD
Reassigned to maintainer.
Comment 3 Dmitry V. Levin 2005-10-26 22:52:02 MSD
Created attachment 1216 [details]
dhcp-3.0.3-owl-alt-drop_priv.patch

Похоже, postdb_startup() надо расщепить.
Попробуйте этот патч.
Comment 4 Dmitry V. Levin 2005-10-27 01:04:10 MSD
Нет, dhcp_failover_startup() после вызова drop_priv() нормально работать не
сможет, поскольку для того, чтобы использовать привилегированные порты,
требуются права, которых после drop_priv() уже нет.

Боюсь, что придётся сбрасывать права по частям.

Другие идеи есть?
Comment 5 Alex Moskalenko 2005-10-27 01:47:15 MSD
> Другие идеи есть? 
 
Использовать непривилегированные порты? Насколько я понял из man dhcpd.conf, 
порты за failover-протоколом не закреплены и выбираются произвольно. Так что 
вариант с портами > 1024 может оказаться вполне рабочим. 
Comment 6 Dmitry V. Levin 2005-10-27 01:54:18 MSD
Уже закреплено, см. https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=167292

Т.е. в качестве временного workaround'а можно использовать непривилегированные
порты, но в пакете должно быть решение и для ставших стандартными
привилегированных портов.
Comment 7 Dmitry V. Levin 2005-10-27 03:15:14 MSD
Created attachment 1217 [details]
dhcp-3.0.3-alt1.nosrc.rpm

Понижение прав в два этапа.  В таком виде должен работать и failover.
Comment 8 Alex Moskalenko 2005-10-27 09:39:25 MSD
> Понижение прав в два этапа.  В таком виде должен работать и failover. 
 
Попробую, спасибо. 
 
Кстати, в мастере 2.4 ситуация аналогичная. Ее б тоже поправить... 
Comment 9 Dmitry V. Levin 2005-11-01 03:29:11 MSK
Должно быть исправлено в dhcp-3.0.3-alt1.

Но вы всё-таки проверьте.