Non sono a conoscenza di un motivo di sicurezza diretto per evitare gethostbyname
. Non è come gets
che non può essere utilizzato senza rischiare un overflow del buffer tranne che in condizioni altamente controllate in cui l'applicazione conosce la dimensione massima possibile dell'input.
Un motivo per cui gethostbyname
è deprecato è che non è thread-safe, perché scrive il suo output in un buffer condiviso. In un programma con multithreading, è necessario utilizzare gethostbyname_r
(se disponibile) oppure i thread devono utilizzare un meccanismo di sincronizzazione in modo che solo un thread utilizzi il buffer condiviso alla volta. Se il programmatore non ne era a conoscenza, l'applicazione potrebbe presentare un bug che può essere attivato causando chiamate in thread diversi quasi alla stessa ora; questo potrebbe bypassare un passaggio di autenticazione, per esempio.
Un altro motivo per cui gethostbyname
(e gethostbyname_r
) è deprecato è che non soddisfa bene IPv6. Non consente all'applicazione di scegliere quale forma di indirizzo desidera. La conseguenza più probabile è che l'applicazione potrebbe smettere di funzionare se si modificano alcune impostazioni relative a IPv6. Ciò potrebbe causare dati inutili o addirittura un overflow del buffer da qualche parte se l'applicazione riceve un indirizzo IPv6 quando si aspetta un indirizzo IPv4 e non controlla il campo h_addrtype
del risultato (perché, nella mente del programmatore, lì era nient'altro che AF_INET
comunque.