Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages


home | help
NDB(3)			   Library Functions Manual			NDB(3)

       ndbopen,	 ndbcat, ndbchanged, ndbclose, ndbreopen, ndbsearch, ndbsnext,
       ndbgetvalue, ndbfree, ipattr, ndbgetipaddr,  ndbipinfo,	ndbhash,  ndb-
       parse,  ndbfindattr, ndbdiscard,	ndbconcatenate,	ndbreorder, ndbsubsti-
       tute, ndbgetval,	ndblookval - network database

       #include	<u.h>
       #include	<libc.h>
       #include	<bio.h>
       #include	<ndb.h>

       Ndb*	  ndbopen(char *file)

       Ndb*	  ndbcat(Ndb *db1, Ndb *db2)

       Ndb*	  ndbchanged(Ndb *db)

       int	  ndbreopen(Ndb	*db)

       void	  ndbclose(Ndb *db)

       Ndbtuple*  ndbsearch(Ndb	*db, Ndbs *s, char *attr, char *val)

       Ndbtuple*  ndbsnext(Ndbs	*s, char *attr,	char *val)

       char*	  ndbgetvalue(Ndb *db, Ndbs *s,	char *attr, char *val,
		  char *rattr, Ndbtuple	**tp)

       char*	  ipattr(char *name)

       Ndbtuple*  ndbgetipaddr(Ndb *db,	char *sys);

       Ndbtuple*  ndbipinfo(Ndb	*db, char *attr, char *val, char **attrs,
		  int nattr)

       ulong	  ndbhash(char *val, int hlen)

       Ndbtuple*  ndbparse(Ndb *db)

       Ndbtuple*  ndbfindattr(Ndbtuple *entry, Ndbtuple	*line, char *attr)

       void	  ndbfree(Ndbtuple *db)

       Ndbtuple*  ndbdiscard(Ndbtuple  *t, Ndbtuple *a)

       Ndbtuple*  ndbconcatenate(Ndbtuple *a, Ndbtuple *b);

       Ndbtuple*  ndbreorder(Ndbtuple *t, Ndbtuple *a);

       Ndbtuple*  ndbsubstitute(Ndbtuple *t, Ndbtuple *from, Ndbtuple *to);

       These routines are used by network administrative  programs  to	search
       the network database.  They operate on the database files described in

       Ndbopen	opens the database file	and calls to allocate a	buffer for it.
       If file is zero,	all network database files are opened.

       Ndbcat concatenates two open databases.	Either argument	may be nil.

       Ndbreopen checks	if the database	files associated with db have  changed
       and if so throws	out any	cached information and reopens the files.

       Ndbclose	 closes	 any  database	files associated with db and frees all
       storage associated with them.

       Ndbsearch and ndbsnext search a database	for an	entry  containing  the
       attribute/value	pair,  attr=val.   Ndbsearch is	used to	find the first
       match and ndbsnext is used to find each successive match.   On  a  suc-
       cessful	search	both  return  a	linked list of Ndbtuple	structures ac-
       quired by that represent	the attribute/value pairs in  the  entry.   On
       failure they return zero.

	      typedef struct Ndbtuple Ndbtuple;
	      struct Ndbtuple {
		      char	attr[Ndbalen];
		      char	*val;
		      Ndbtuple	*entry;
		      Ndbtuple	*line;
		      ulong	ptr;	/* for the application;	starts 0 */
		      char	valbuf[Ndbvlen];  /* initial allocation	for val	*/

       The entry pointers chain	together all pairs in the entry	in a null-ter-
       minated list.  The line pointers	chain together all pairs on  the  same
       line  in	 a  circular  list.  Thus, a program can implement 2 levels of
       binding for pairs in an entry.  In general, pairs on the	same line  are
       bound tighter than pairs	on different lines.

       The  argument  s	 of  ndbsearch	has type Ndbs and should be pointed to
       valid storage before calling ndbsearch, which will fill it with	infor-
       mation  used  by	 ndbsnext  to link successive searches.	 The structure
       Ndbs looks like:

	      typedef struct Ndbs Ndbs;
	      struct Ndbs {
		      Ndb      *db;   /* data base file	being searched */
		      Ndbtuple *t;    /* last attribute	value pair found */

       The t field points to the pair within the entry	matched	 by  the  ndb-
       search or ndbsnext.

       Ndbgetvalue  searches  the database for an entry	containing not only an
       attribute/value pair, attr=val, but also	 a  pair  with	the  attribute
       rattr.	If  successful,	 it returns a malloced copy of the null	termi-
       nated value associated with rattr.  If tp is non	nil, *tp will point to
       the entry.  Otherwise the entry will be freeed.

       Ndbfree frees a list of tuples returned by one of the other routines.

       Ipattr takes the	name of	an IP system and returns the attribute it cor-
       responds	to:

	      dom    domain name

	      ip     Internet number

	      sys    system name

       Ndbgetipaddr looks in db	for an entry matching sys as the  value	 of  a
       sys=  or	 dom= attribute/value pair and returns all IP addresses	in the
       entry.  If sys is already an IP address,	a tuple	containing  just  that
       address is returned.

       Ndbipinfo  looks	up Internet protocol information about a system.  This
       is an IP	aware search.  It looks	first for information in the  system's
       database	 entry	and then in the	database entries for any IP subnets or
       networks	containing the system.	The system is identified by the	attri-
       bute/value  pair,  attr=val.   Ndbipinfo	returns	a list of tuples whose
       attributes match	the attributes in the n	element	array attrs.  For  ex-
       ample,  consider	the following database entries describing a network, a
       subnetwork, and a system.

       ipnet=big ip=
       ipnet=dept ip= ipmask=


	  ndbipinfo(db,	"dom", "", ["bootf" "smtp" "dns"], 3)

       will  return  the  tuples   bootf=/386/9pc,,   and

       The  next  three	routines are used by programs that create the hash ta-
       bles and	database files.	 Ndbhash computes a hash offset	into  a	 table
       of  length hlen for the string val.  Ndbparse reads and parses the next
       entry from the database file.  Multiple calls to	ndbparse parse sequen-
       tial entries in the database file.  A zero is returned at end of	file.

       Ndbfindattr  searches  entry  for the tuple with	attribute attr and re-
       turns a pointer to the tuple.  If line points to	a particular  line  in
       the  entry, the search starts there and then wraps around to the	begin-
       ning of the entry.

       All of the routines provided to search the database provide  an	always
       consistent view of the relevant files.  However,	it may be advantageous
       for an application to read in the whole database	using ndbopen and ndb-
       parse  and provide its own search routines.  The	ndbchanged routine can
       be used by the application to periodicly	check for changes.  It returns
       zero if none of the files comprising the	database have changes and non-
       zero if they have.

       Finally,	a number of routines are provided for manipulating tuples.

       Ndbdiscard removes attr/val pair	a from tuple t and  frees  it.	 If  a
       isn't in	t it is	just freed.

       Ndbconcatenate  concatenates two	tuples and returns the result.	Either
       or both tuples may be nil.

       Ndbreorder reorders a tuple t to	make the line containing attr/val pair
       a first in the entry and	making a first in its line.

       Ndbsubstitute  replaces	a single att/val pair from in t	with the tuple
       to.  All	attr/val pairs in to end up on the same	line.  from is freed.

       /ndb   directory	of network database files


       Ndbgetvalue and ndblookvalue set	errstr to buffer too short if the buf-
       fer provided isn't long enough for the returned value.

       Ndbgetval and ndblookval	are deprecated versions	of ndbgetvalue and nd-
       blookvalue.  They expect	a fixed	64 byte	long result buffer and existed
       when the	values of a Ndbtuple structure where fixed length.



Want to link to this manual page? Use this URL:

home | help