mirror of
https://github.com/9fans/plan9port.git
synced 2025-01-12 11:10:07 +00:00
d32deab17b
Suggested by G. Brandon Robinson.
476 lines
9.5 KiB
Groff
476 lines
9.5 KiB
Groff
.TH NDB 3
|
|
.SH NAME
|
|
ndbopen, ndbcat, ndbchanged, ndbclose, ndbreopen, ndbsearch, ndbsnext, ndbgetvalue, ndbfree, ipattr, ndbgetipaddr, ndbipinfo, ndbhash, ndbparse, ndbfindattr, ndbdiscard, ndbconcatenate, ndbreorder, ndbsubstitute, ndbgetval, ndblookval \- network database
|
|
.SH SYNOPSIS
|
|
.B #include <u.h>
|
|
.br
|
|
.B #include <libc.h>
|
|
.br
|
|
.B #include <bio.h>
|
|
.br
|
|
.B #include <ndb.h>
|
|
.ta \w'\fLNdbtuplexx 'u
|
|
.PP
|
|
.B
|
|
Ndb* ndbopen(char *file)
|
|
.PP
|
|
.B
|
|
Ndb* ndbcat(Ndb *db1, Ndb *db2)
|
|
.PP
|
|
.B
|
|
Ndb* ndbchanged(Ndb *db)
|
|
.PP
|
|
.B
|
|
int ndbreopen(Ndb *db)
|
|
.PP
|
|
.B
|
|
void ndbclose(Ndb *db)
|
|
.PP
|
|
.B
|
|
Ndbtuple* ndbsearch(Ndb *db, Ndbs *s, char *attr, char *val)
|
|
.PP
|
|
.B
|
|
Ndbtuple* ndbsnext(Ndbs *s, char *attr, char *val)
|
|
.PP
|
|
.B
|
|
char* ndbgetvalue(Ndb *db, Ndbs *s, char *attr, char *val,
|
|
.br
|
|
.B
|
|
char *rattr, Ndbtuple **tp)
|
|
.\" .PP
|
|
.\" .B
|
|
.\" char* csgetvalue(char *netroot, char *attr, char *val, char *rattr,
|
|
.\" Ndbtuple **tp)
|
|
.PP
|
|
.B
|
|
char* ipattr(char *name)
|
|
.PP
|
|
.B
|
|
Ndbtuple* ndbgetipaddr(Ndb *db, char *sys);
|
|
.PP
|
|
.B
|
|
Ndbtuple* ndbipinfo(Ndb *db, char *attr, char *val, char **attrs,
|
|
.br
|
|
.B int nattr)
|
|
.\" .PP
|
|
.\" .B
|
|
.\" Ndbtuple* csipinfo(char *netroot, char *attr, char *val, char **attrs,
|
|
.\" .br
|
|
.\" .B int nattr)
|
|
.PP
|
|
.B
|
|
ulong ndbhash(char *val, int hlen)
|
|
.PP
|
|
.B
|
|
Ndbtuple* ndbparse(Ndb *db)
|
|
.\" .PP
|
|
.\" .B
|
|
.\" Ndbtuple* dnsquery(char *netroot, char *domainname, char *type)
|
|
.PP
|
|
.B
|
|
Ndbtuple* ndbfindattr(Ndbtuple *entry, Ndbtuple *line, char *attr)
|
|
.PP
|
|
.B
|
|
void ndbfree(Ndbtuple *db)
|
|
.PP
|
|
.B
|
|
Ndbtuple* ndbdiscard(Ndbtuple *t, Ndbtuple *a)
|
|
.PP
|
|
.B
|
|
Ndbtuple* ndbconcatenate(Ndbtuple *a, Ndbtuple *b);
|
|
.PP
|
|
.B
|
|
Ndbtuple* ndbreorder(Ndbtuple *t, Ndbtuple *a);
|
|
.PP
|
|
.B
|
|
Ndbtuple* ndbsubstitute(Ndbtuple *t, Ndbtuple *from, Ndbtuple *to);
|
|
.SH DESCRIPTION
|
|
These routines are used by network administrative programs to search
|
|
the network database.
|
|
They operate on the database files described in
|
|
.MR ndb (7) .
|
|
.PP
|
|
.I Ndbopen
|
|
opens the database
|
|
.I file
|
|
and calls
|
|
.MR malloc (3)
|
|
to allocate a buffer for it.
|
|
If
|
|
.I file
|
|
is zero, all network database files are opened.
|
|
.PP
|
|
.I Ndbcat
|
|
concatenates two open databases. Either argument may be
|
|
nil.
|
|
.PP
|
|
.I Ndbreopen
|
|
checks if the database files associated with
|
|
.I db
|
|
have changed and if so throws out any cached information and reopens
|
|
the files.
|
|
.PP
|
|
.I Ndbclose
|
|
closes any database files associated with
|
|
.I db
|
|
and frees all storage associated with them.
|
|
.PP
|
|
.I Ndbsearch
|
|
and
|
|
.I ndbsnext
|
|
search a database for an entry containing the
|
|
attribute/value pair,
|
|
.IR attr = val .
|
|
.I Ndbsearch
|
|
is used to find the first match and
|
|
.I ndbsnext
|
|
is used to find each successive match.
|
|
On a successful search both return a linked list of
|
|
.I Ndbtuple
|
|
structures acquired by
|
|
.MR malloc (3)
|
|
that represent the attribute/value pairs in the
|
|
entry.
|
|
On failure they return zero.
|
|
.IP
|
|
.EX
|
|
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 */
|
|
};
|
|
.EE
|
|
.LP
|
|
The
|
|
.I entry
|
|
pointers chain together all pairs in the entry in a null-terminated list.
|
|
The
|
|
.I 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.
|
|
.PP
|
|
The argument
|
|
.I s
|
|
of
|
|
.I ndbsearch
|
|
has type
|
|
.I Ndbs
|
|
and should be pointed to valid storage before calling
|
|
.IR ndbsearch ,
|
|
which will fill it with information used by
|
|
.I ndbsnext
|
|
to link successive searches.
|
|
The structure
|
|
.I Ndbs
|
|
looks like:
|
|
.IP
|
|
.EX
|
|
typedef struct Ndbs Ndbs;
|
|
struct Ndbs {
|
|
Ndb *db; /* data base file being searched */
|
|
...
|
|
Ndbtuple *t; /* last attribute value pair found */
|
|
};
|
|
.EE
|
|
.LP
|
|
The
|
|
.I t
|
|
field points to the pair within the entry matched by the
|
|
.I ndbsearch
|
|
or
|
|
.IR ndbsnext .
|
|
.PP
|
|
.I Ndbgetvalue
|
|
searches the database for an entry containing not only an
|
|
attribute/value pair,
|
|
.IR attr = val ,
|
|
but also a pair with the attribute
|
|
.IR rattr .
|
|
If successful, it returns a malloced copy of the null terminated value associated with
|
|
.IR rattr .
|
|
If
|
|
.I tp
|
|
is non nil,
|
|
.I *tp
|
|
will point to the entry. Otherwise the entry will be freeed.
|
|
.\" .PP
|
|
.\" .I Csgetvalue
|
|
.\" is like
|
|
.\" .I ndbgetvalue
|
|
.\" but queries the connection server
|
|
.\" instead of looking directly at the database.
|
|
.\" Its first argument specifies the network root to use.
|
|
.\" If the argument is 0, it defaults to
|
|
.\" \f5"/net"\f1.
|
|
.PP
|
|
.I Ndbfree
|
|
frees a list of tuples returned by one of the other
|
|
routines.
|
|
.PP
|
|
.I Ipattr
|
|
takes the name of an IP system and returns the attribute
|
|
it corresponds to:
|
|
.RS
|
|
.TP
|
|
.B dom
|
|
domain name
|
|
.TP
|
|
.B ip
|
|
Internet number
|
|
.TP
|
|
.B sys
|
|
system name
|
|
.RE
|
|
.PP
|
|
.I Ndbgetipaddr
|
|
looks in
|
|
.I db
|
|
for an entry matching
|
|
.I sys
|
|
as the value of a
|
|
.B sys=
|
|
or
|
|
.B dom=
|
|
attribute/value pair and returns all IP addresses in the entry.
|
|
If
|
|
.I sys
|
|
is already an IP address, a tuple containing just
|
|
that address is returned.
|
|
.PP
|
|
.I 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
|
|
attribute/value pair,
|
|
.IR attr = val .
|
|
.I Ndbipinfo
|
|
returns a list of tuples whose attributes match the
|
|
attributes in the
|
|
.I n
|
|
element array
|
|
.IR attrs .
|
|
For example, consider the following database entries describing a network,
|
|
a subnetwork, and a system.
|
|
.PP
|
|
.EX
|
|
ipnet=big ip=10.0.0.0
|
|
dns=dns.big.com
|
|
smtp=smtp.big.com
|
|
ipnet=dept ip=10.1.1.0 ipmask=255.255.255.0
|
|
smtp=smtp1.big.com
|
|
ip=10.1.1.4 dom=x.big.com
|
|
bootf=/386/9pc
|
|
.EE
|
|
.PP
|
|
Calling
|
|
.PP
|
|
.EX
|
|
ndbipinfo(db, "dom", "x.big.com", ["bootf" "smtp" "dns"], 3)
|
|
.EE
|
|
.PP
|
|
will return the tuples
|
|
.BR bootf=/386/9pc ,
|
|
.BR smtp=smtp1.big.com ,
|
|
and
|
|
.BR dns=dns.big.com .
|
|
.\" .PP
|
|
.\" .I Csipinfo
|
|
.\" is to
|
|
.\" .I ndbipinfo
|
|
.\" as
|
|
.\" .I csgetval
|
|
.\" is to
|
|
.\" .IR ndbgetval .
|
|
.PP
|
|
The next three routines are used by programs that create the
|
|
hash tables and database files.
|
|
.I Ndbhash
|
|
computes a hash offset into a table of length
|
|
.I hlen
|
|
for the string
|
|
.IR val .
|
|
.I Ndbparse
|
|
reads and parses the next entry from the database file.
|
|
Multiple calls to
|
|
.IR ndbparse
|
|
parse sequential entries in the database file.
|
|
A zero is returned at end of file.
|
|
.\" .PP
|
|
.\" .I Dnsquery
|
|
.\" submits a query about
|
|
.\" .I domainname
|
|
.\" to the
|
|
.\" .I ndb/dns
|
|
.\" mounted at
|
|
.\" .IB netroot /dns.
|
|
.\" It returns a linked list of
|
|
.\" .I Ndbtuple's
|
|
.\" representing a single database entry.
|
|
.\" The tuples are logicly arranged into lines using the
|
|
.\" .B line
|
|
.\" fieldin the structure.
|
|
.\" The possible
|
|
.\" .IR type 's
|
|
.\" of query are and the attributes on each returned tuple line is:
|
|
.\" .TP
|
|
.\" .B ip
|
|
.\" find the IP addresses. Returns
|
|
.\" domain name
|
|
.\" .RI ( dom )
|
|
.\" and ip address
|
|
.\" .RI ( ip )
|
|
.\" .TP
|
|
.\" .B mx
|
|
.\" look up the mail exchangers. Returns preference
|
|
.\" .RI ( pref )
|
|
.\" and exchanger
|
|
.\" .RI ( mx )
|
|
.\" .TP
|
|
.\" .B ptr
|
|
.\" do a reverse query. Here
|
|
.\" .I domainname
|
|
.\" must be an
|
|
.\" .SM ASCII
|
|
.\" IP address. Returns reverse name
|
|
.\" .RI ( ptr )
|
|
.\" and domain name
|
|
.\" .RI ( dom )
|
|
.\" .TP
|
|
.\" .B cname
|
|
.\" get the system that this name is a nickname for. Returns the nickname
|
|
.\" .RI ( dom )
|
|
.\" and the real name
|
|
.\" .RI ( cname )
|
|
.\" .TP
|
|
.\" .B soa
|
|
.\" return the start of area record for this field. Returns
|
|
.\" area name
|
|
.\" .RI ( dom ),
|
|
.\" primary name server
|
|
.\" .RI ( ns ),
|
|
.\" serial number
|
|
.\" .RI ( serial ),
|
|
.\" refresh time in seconds
|
|
.\" .RI ( refresh ),
|
|
.\" retry time in seconds
|
|
.\" .RI ( retry ),
|
|
.\" expiration time in seconds
|
|
.\" .RI ( expire ),
|
|
.\" and minimum time to lie
|
|
.\" .RI ( ttl ).
|
|
.\" .TP
|
|
.\" .B ns
|
|
.\" name servers. Returns domain name
|
|
.\" .RI ( dom )
|
|
.\" and name server
|
|
.\" .RI ( ns )
|
|
.PP
|
|
.I Ndbfindattr
|
|
searches
|
|
.I entry
|
|
for the tuple
|
|
with attribute
|
|
.I attr
|
|
and returns a pointer to the tuple.
|
|
If
|
|
.I line
|
|
points to a particular line in the entry, the
|
|
search starts there and then wraps around to the beginning
|
|
of the entry.
|
|
.PP
|
|
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
|
|
.I ndbopen
|
|
and
|
|
.I ndbparse
|
|
and provide its own search routines. The
|
|
.I 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.
|
|
.PP
|
|
Finally, a number of routines are provided for manipulating
|
|
tuples.
|
|
.PP
|
|
.I Ndbdiscard
|
|
removes attr/val pair
|
|
.I a
|
|
from tuple
|
|
.I t
|
|
and frees it.
|
|
If
|
|
.I a
|
|
isn't in
|
|
.I t
|
|
it is just freed.
|
|
.PP
|
|
.I Ndbconcatenate
|
|
concatenates two tuples and returns the result. Either
|
|
or both tuples may be nil.
|
|
.PP
|
|
.I Ndbreorder
|
|
reorders a tuple
|
|
.IR t
|
|
to make the line containing attr/val pair
|
|
.I a
|
|
first in the entry and making
|
|
.I a
|
|
first in its line.
|
|
.PP
|
|
.I Ndbsubstitute
|
|
replaces a single att/val pair
|
|
.I from
|
|
in
|
|
.I t
|
|
with the tuple
|
|
.IR to .
|
|
All attr/val pairs in
|
|
.I to
|
|
end up on the same line.
|
|
.I from
|
|
is freed.
|
|
.SH FILES
|
|
.TP
|
|
.B \*9/ndb
|
|
directory of network database files
|
|
.PD
|
|
.SH SOURCE
|
|
.B \*9/src/libndb
|
|
.SH SEE ALSO
|
|
.MR ndb (1)
|
|
.MR ndb (7)
|
|
.SH DIAGNOSTICS
|
|
.IR Ndbgetvalue
|
|
and
|
|
.I ndblookvalue
|
|
set
|
|
.I errstr
|
|
to
|
|
.B "buffer too short"
|
|
if the buffer provided isn't long enough for the
|
|
returned value.
|
|
.SH BUGS
|
|
.IR Ndbgetval
|
|
and
|
|
.I ndblookval
|
|
are deprecated versions of
|
|
.IR ndbgetvalue
|
|
and
|
|
.IR ndblookvalue .
|
|
They expect a fixed 64 byte long result
|
|
buffer and existed when the values of a
|
|
.I Ndbtuple
|
|
structure where fixed length.
|