Disparity between /etc/services and /var/db/services.db

Garrett Cooper yaneurabeya at gmail.com
Tue Dec 2 16:13:23 UTC 2014


On Dec 1, 2014, at 11:28, Benjamin Kaduk <kaduk at MIT.EDU> wrote:

> On Mon, 1 Dec 2014, Garrett Cooper wrote:
> 
>> $ ls -l /scratch/2/etc/services /scratch/2/var/db/services.db
>> -rw-r--r--  1 ngie  wheel    86802 Nov 27 02:23 /scratch/2/etc/services
>> -rw-r--r--  1 ngie  wheel  2097920 Nov 27 02:23 /scratch/2/var/db/services.db
> 
> One's a text file and the other a Berkeley DB file ... I wouldn't expect
> them to be the same size.

Shoot. I didn’t mean for this message to get sent out without a lot of context. For that I apologize...

Basically what I was going to comment on was the fact that the .db file was so large, and by adjusting the number of entries I was able to reduce the size of the file by 4 (it’s bloated by a couple thousand):

From usr.sbin/services_mkdb/services_mkdb.c:

 70 HASHINFO hinfo = {
 71         .bsize = 256,
 72         .ffactor = 4,
 73         .nelem = 32768,
 74         .cachesize = 1024,
 75         .hash = NULL,
 76         .lorder = 0
 77 };

There are a lot less items in the /etc/services file than 32k:

$ cat count_servents.c
#include <netdb.h>
#include <stdio.h>

int
main(void)
{
        int i;

        for (i = 0; getservent() != NULL; i++) ;
        printf("Number of entries: %d\n", i);
        return 0;
}
$ ~/count_servents 
Number of entries: 2358
$

In the upstream [IANA] /etc/services file, there’s only 1k more or so.

I would understand if the database was trying to fill the service number range, but 32k != INT_MAX:

           struct servent {
                   char    *s_name;        /* official name of service */
                   char    **s_aliases;    /* alias list */
                   int     s_port;         /* port service resides at */
                   char    *s_proto;       /* protocol to use */
           };

Is there a reason why this? “Upstream” (NetBSD) doesn’t seem to comment much on this either…

Thanks!

PS I just found this thread by bapt from last year that comments about this issue from a different bend: https://lists.freebsd.org/pipermail/freebsd-hackers/2013-October/043661.html
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 496 bytes
Desc: Message signed with OpenPGP using GPGMail
URL: <http://lists.freebsd.org/pipermail/freebsd-arch/attachments/20141202/f03cd991/attachment.sig>


More information about the freebsd-arch mailing list