tcp_wrappers i weak_severity

Jakub Bogusz qboosh w pld-linux.org
Pią, 15 Sie 2003, 20:05:51 CEST


Coś z tym patchem jest chyba nie tak.

On dodaje __attribute__((weak)) do deklaracji zmiennych allow_severity
i deny_severity i... nic więcej.
Dołączony jest plik weak_symbols.c z definicjami tych symboli, ale...
nie używany przy linkowaniu.
W ten sposób biblioteka libwrap zawiera niezdefiniowane słabe symbole
*_severity; programy korzystające z <tcpd.h>, zawierające te zmienne,
będą zawierać słabe symbole - co nie szkodzi.
Natomiast w przypadku, kiedy te symbole nie zostaną zdefiniowane (jak
chyba będzie w przypadku nowego pama) - z powodu słabych definicji
linkowanie się powiedzie, ale przy próbie odwołania do zmiennej
dostaniemy SEGV (testowałem różne kombinacje na dwóch krótkich plikach
z jedną zmienną int).


IMO lepiej zrobić to tak:
- deklaracje w <tcpd.h> zostawić jak były (extern int, bez żadnego weak)
- dodać do biblioteki to co jest w weak_symbols.c, ale
  z __attribute__((weak))
W ten sposób będzie można używać libwrap zarówno deklarując w programie
własne zmienne *_severity (tak jak robi większość programów - wtedy
przykryją one definicje z biblioteki), jak i nie deklarując ich (wtedy
zostaną użyte te z biblioteki).

W drugą stronę (w bibliotece normalne, w tcpd.h weak dla programów)
chyba byłoby gorzej - w przypadkach, kiedy w danym programie przed
definicją *_severity nie byłoby dołączone <tcpd.h> lub zmienne te byłyby
inicjowane od razu przy definicji.


Zmieniać, czy są jakieś powody, żeby zrobić inaczej?
Tak jak jest teraz, raczej nie powinno być.


-- 
Jakub Bogusz    http://cyber.cs.net.pl/~qboosh/



Więcej informacji o liście dyskusyjnej pld-devel-pl