Date: Fri, 6 Jun 2003 16:44:56 -0700 (PDT) From: Matthew Dillon <dillon@apollo.backplane.com> To: Robert Watson <rwatson@freebsd.org> Cc: freebsd-arch@freebsd.org Subject: Re: Making a dynamically-linked root Message-ID: <200306062344.h56NiuNb028255@apollo.backplane.com> References: <Pine.NEB.3.96L.1030606185312.16933A-100000@fledge.watson.org>
next in thread | previous in thread | raw e-mail | index | archive | help
It would be fairly easy to create a unix-domain or localhost socketed port service and messaging primitives to access just about any configuration data that you would typically store in a file. Initially such a service would simply access the appropriate file and relay the information to the client but ultimately it could incorporate more sophisticated features on its backend without any modifications having to be done on the client side or to the client protocol. Something like this: * client connects to sevice * client sends message with creds (SCM_CREDS) containing request. The message would include a serial id to allow the client side to multi-thread or stream requests, configuration file id or path name, command, and data. * client gets reply (and optionally caches result, default to off). (done) Frontend primitives could be as simple as 'get record N', and 'lookup record with key', plus a timeout/failure and possibly a failsafe feature. The entire implementation in libc would be very small and record data would always be returned in text form (key/data) for maximum portability. Backend sophisitication could include loadable modules to integrate remote services for particular configuration file classes, like NIS, multiple resolver sources, logging/auditing, security restrictions, different backend storage mechanisms such as databases, backend forking and/or multi-threading to handle parallel blockable requests (e.g. DNS lookups), automatic DBM management (no need to run pwd_mkdb and friends), security partitioning (fork/jail) to prevent bugs from corrupting other users using the service, and so forth. It would be nice to be able to get rid of the necessity of running all the *_mkdb commands and to remove PAM, locale, and the resolver from client binaries, and to have a mechanism that anyone can write a simple DLL to support their own special circumstances. -Matt Matthew Dillon <dillon@backplane.com> :I think that would be quite neat; as discussed, irs from the BIND :distribution does the DNS elements of this, although not in our current :framework. An idea I've also been interested in looking at, now that we :have NSS to indirect many of the database operations, is how easy it would :be to indirect new configuration data through NSS. For example, although :we can share account information via directory services such as NIS, LDAP, :etc, we cannot currently share login.conf user class data. Some other :configuration files might also lend themselves quite well to this sort of :configuration -- perhaps even files such as inetd.conf, ftpusers, :login.access, opiekies, etc. : :One of the important goals of elements like NSS is to improve our ability :to centrally manage many FreeBSD systems in a scalable manner; another is :the ability to support more reliable and more easily managed backends, :such as configuration databases originating in local SQL, etc. :Experimenting with ways to take this a few steps further might be quite :interesting, and could have some nice payoffs. : :Robert N M Watson FreeBSD Core Team, TrustedBSD Projects :robert@fledge.watson.org Network Associates Laboratories
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200306062344.h56NiuNb028255>