/etc/defaults/services and /etc/services
Matthew Dillon
dillon at apollo.backplane.com
Thu Feb 10 16:23:35 PST 2005
:Hi,
:
:although there's an ongoing discussion about the general way of
:updating system files, which will probably render my work useless,
:here's the patch to have a not-to-be-edited /etc/defaults/services and
:an optional /etc/services.
:
:getservent() now first tries to find a matching protocol name/port
:number in /etc/defaults/services, and, if no match was found, reads
:lines form /etc/services (if it exists).
:
:I also updated the getservent.5 man page to reflect these changes, but
:there's carloads more in the repository. I did not make changes to
:these files, since I'd first like to know if this
:/etc/defaults/services stuff will be integrated or not. Once I get a
:positive feedback, I'll update all the other man pages, etc.
:
:The patch lives here:
:
:http://bettlakenauszuzeln.magic-ceee.com/services.patch.gz
:
:
:Enjoy
:
:--j
Well, regardless of the cvs issue, I think there is a need to
separate /etc/services so I definitely want to go with an
adjustment to libc to support /etc/defaults/services.
Your patch looks like a good first attempt. Here are some comments:
* I see why you created a _PATH_ETC_SERVICES but I think in this case
it makes sense not to add that #define and to simple use the original
_PATH_SERVICES. To keep things similarly named change
_PATH_ETC_DEFAULTS_SERVICES to, say, _PATH_DEFAULT_SERVICES.
* Do not hardwire loops that index into the array. Instead do something
like this define and then use it in your loops. In particular,
the if (servf_count == 1) in getservent() is an example of unintentional
disconnectedness between the size of the array and the termination
check, using (SERVF_ARY_SIZE - 1) makes the check a lot clearer.
#define SERVF_ARY_SIZE (sizeof(servf)/sizeof(servf[0]))
* getservent() needs to deal with duplicates and overrides.
I wonder what we should do about getservent() ... To be entirely
correct and avoid confusing programs which use getservent(), we probably
want to do some sort of merge. To be entirely correct we would probably
want to hash the service names scanned from earlier files and skip
any that are found to match in later files.
That seems like a waste of memory to me but on the bright side there
aren't very many programs which actually use getservent(), and the
memory used by the hash would be returned at the end of the scan,
so it might not be all that bad.
-Matt
Matthew Dillon
<dillon at xxxxxxxxxxxxx>
More information about the Submit
mailing list