#include <nss.h>#include <netdb.h>#include <errno.h>/* * gcc -fPIC -shared -o libnss_roman.so.2 -Wl,-soname,libnss_roman.so.2 __FILE__ * Rushed crappy code. DO NOT RUN THIS SHIT ON PRODUCTION SYSTEMS! */enumnss_status_nss_roman_sethostent(inta){returnNSS_STATUS_SUCCESS;}enumnss_status_nss_roman_endhostent(void){returnNSS_STATUS_SUCCESS;}enumnss_status_nss_roman_notfound(int*__restrictperr,int*__restricter){*perr=ENOENT;*er=HOST_NOT_FOUND;returnNSS_STATUS_NOTFOUND;}enumnss_status_nss_roman_gethostbyaddr_r(constvoid*__restricta,size_tl,intt,structhostent*__restrictresult,char*__restrictb,size_tblen,int*__restrictperrno,int*__restricterr){return_nss_roman_notfound(perrno,err);}structbuf_use{structin_addraddr;char*addr_list[2];};enumnss_status_nss_roman_gethostbyname2_r(constchar*__restrictname,intaf,structhostent*__restrictr,char*__restrictbuff,size_tbuflen,int*__restrictperrno,int*__restricterr){if(af!=AF_INET&&af!=AF_UNSPEC)return_nss_roman_notfound(perrno,err);if(buflen<sizeof(structbuf_use)){*perrno=ERANGE;*err=NO_RECOVERY;returnNSS_STATUS_TRYAGAIN;}structbuf_use*buf=(void*)buff;r->h_addrtype=AF_INET;r->h_name="";r->h_length=sizeof(structin_addr);r->h_addr_list=buf->addr_list;r->h_addr_list[0]=(void*)&buf->addr;r->h_addr_list[1]=0;r->h_aliases=&r->h_addr_list[1];buf->addr.s_addr=0;unsignedcurrent_octet=3;unsignedvalue=0;while(*name){unsignedletter_value=0;switch(*name++){case'I': letter_value=1;break;case'V': letter_value=5;break;case'X': letter_value=10;break;case'L': letter_value=50;break;case'C': letter_value=100;break;case'.':
if(current_octet==0||value>255)return_nss_roman_notfound(perrno,err);buf->addr.s_addr|=(value<<(current_octet*8));value=0;--current_octet;continue;default:return_nss_roman_notfound(perrno,err);}value+=letter_value-2*(value%letter_value);}if(current_octet!=0||value>255)return_nss_roman_notfound(perrno,err);buf->addr.s_addr=htonl(buf->addr.s_addr+value);returnNSS_STATUS_SUCCESS;}enumnss_status_nss_roman_gethostbyname_r(constchar*__restrictn,structhostent*__restrictr,char*__restrictbuf,size_tlen,int*__restricterno,int*__restricter){return_nss_roman_gethostbyname2_r(n,AF_INET,r,buf,len,erno,er);}
$ping -c 1 CXXIIIX...I
PING (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_req=1 ttl=64 time=0.053 ms
--- ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.053/0.053/0.053/0.000 ms
$ ping -c 1 CVIIIC.CLXIIX..I
PING (192.168.0.1) 56(84) bytes of data.
64 bytes from 192.168.0.1: icmp_req=1 ttl=64 time=8.70 ms
--- ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 8.702/8.702/8.702/0.000 ms
$ ping -c 1 XIIC.CIXC.CCL.CLXXVI
PING (88.191.250.176) 56(84) bytes of data.
64 bytes from prod.linuxfr.org (88.191.250.176): icmp_req=1 ttl=56 time=7.29 ms
--- ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 7.290/7.290/7.290/0.000 ms
Bizarrement, Firefox et chromium n'aime pas vraiment mes bidouillages… Il y a ptet d'autres trucs à implémenter, ou il faudrait peut être qu'ils arrêtent de transformer le nom d'hôte en minuscule.
[^] # Re: Prochaine étape...
Posté par Batchyx . En réponse au sondage Que pensez vous de l'autorisation des noms de domaine accentués et autres caractères non-ascii ?. Évalué à 10.
C'est pas bien compliqué à faire …
Bizarrement, Firefox et chromium n'aime pas vraiment mes bidouillages… Il y a ptet d'autres trucs à implémenter, ou il faudrait peut être qu'ils arrêtent de transformer le nom d'hôte en minuscule.