Description of problem: When operating over nis, if two services are configured which have canonically byte swapped port number, getent will return the name of the incorrect service Version-Release number of selected component (if applicable): How reproducible: always Steps to Reproduce: 1.configure an NIS server and NIS client 2.export the services file over NIS and make sure the client looks services up there 3.add two services to the services file, make the entry as follows: servicea 11342/tcp serviceb 20012/tcp 4.issue ypcat services on the client and confirm that the services added in (3) above can be seen (note that htons(11342)=20012 5.on the client issue the commmands: getent services 11342/tcp getent services 20012/tcp Actual results: getent services 20012/tcp returns servicea 11342/tcp and getent services 11342/tcp returns serviceb 20012/tcp Expected results: getent services 11342/tcp should return servicea 11342/tcp and getent services 20012/tcp should return serviceb 20012/tcp Additional info:
Created attachment 99424 [details] patch to correct byte swapping behavior This patch removes the (ostensibly incorrect) htons call from the getent application and allows services to be returned correctly.
The patch is incorrect. http://www.opengroup.org/onlinepubs/007904975/functions/getservbyport.html "The port argument shall be in network byte order." There used to be a bug in _nss_nis_getservbyport_r which did not use ntohs (), but this is fixed in the current U2/U4 glibc candidates. See ftp://people.redhat.com/jakub/glibc/errata/
*** Bug 120878 has been marked as a duplicate of this bug. ***
I'm assuming this is fixed in glibc-2.2.4-32.15 and glibc-2.3.2-95.20. If not, please reopen.