-ldb is a light weight embedded database library and API\&. With a programming interface that is very similar to LDAP, ldb can store its data either in a tdb(3) database or in a real LDAP database\&.
-.PP
-When used with the tdb backend ldb does not require any database daemon\&. Instead, ldb function calls are processed immediately by the ldb library, which does IO directly on the database, while allowing multiple readers/writers using operating system byte range locks\&. This leads to an API with very low overheads, often resulting in speeds of more than 10x what can be achieved with a more traditional LDAP architecture\&.
-.PP
-In a taxonomy of databases ldb would sit half way between key/value pair databases (such as berkley db or tdb) and a full LDAP database\&. With a structured attribute oriented API like LDAP and good indexing capabilities, ldb can be used for quite sophisticated applications that need a light weight database, without the administrative overhead of a full LDAP installation\&.
-.PP
-Included with ldb are a number of useful command line tools for manipulating a ldb database\&. These tools are similar in style to the equivalent ldap command line tools\&.
-.PP
-In its default mode of operation with a tdb backend, ldb can also be seen as a "schema\-less LDAP"\&. By default ldb does not require a schema, which greatly reduces the complexity of getting started with ldb databases\&. As the complexity of you application grows you can take advantage of some of the optional schema\-like attributes that ldb offers, or you can migrate to using the full LDAP api while keeping your exiting ldb code\&.
-.PP
-If you are new to ldb, then I suggest starting with the manual pages for ldbsearch(1) and ldbedit(1), and experimenting with a local database\&. Then I suggest you look at the ldb_connect(3) and ldb_search(3) manual pages\&.
-.SH "TOOLS"
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-ldbsearch(1)
-\- command line ldb search utility
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-ldbedit(1)
-\- edit all or part of a ldb database using your favourite editor
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-ldbadd(1)
-\- add records to a ldb database using LDIF formatted input
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-ldbdel(1)
-\- delete records from a ldb database
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-ldbmodify(1)
-\- modify records in a ldb database using LDIF formatted input
-.RE
-.SH "FUNCTIONS"
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_connect(3)\fR
-\- connect to a ldb backend
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_search(3)\fR
-\- perform a database search
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_add(3)\fR
-\- add a record to the database
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_delete(3)\fR
-\- delete a record from the database
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_modify(3)\fR
-\- modify a record in the database
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_errstring(3)\fR
-\- retrieve extended error information from the last operation
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_ldif_write(3)\fR
-\- write a LDIF formatted message
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_ldif_write_file(3)\fR
-\- write a LDIF formatted message to a file
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_ldif_read(3)\fR
-\- read a LDIF formatted message
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_ldif_read_free(3)\fR
-\- free the result of a ldb_ldif_read()
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_ldif_read_file(3)\fR
-\- read a LDIF message from a file
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_ldif_read_string(3)\fR
-\- read a LDIF message from a string
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_msg_find_element(3)\fR
-\- find an element in a ldb_message
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_val_equal_exact(3)\fR
-\- compare two ldb_val structures
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_msg_find_val(3)\fR
-\- find an element by value
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_msg_add_empty(3)\fR
-\- add an empty message element to a ldb_message
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_msg_add(3)\fR
-\- add a non\-empty message element to a ldb_message
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_msg_element_compare(3)\fR
-\- compare two ldb_message_element structures
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_msg_find_int(3)\fR
-\- return an integer value from a ldb_message
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_msg_find_uint(3)\fR
-\- return an unsigned integer value from a ldb_message
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_msg_find_double(3)\fR
-\- return a double value from a ldb_message
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_msg_find_string(3)\fR
-\- return a string value from a ldb_message
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_set_alloc(3)\fR
-\- set the memory allocation function to be used by ldb
-ldbadd adds records to an ldb(3) database\&. It reads the ldif(5) files specified on the command line and adds the records from these files to the LDB database, which is specified by the \-H option or the LDB_URL environment variable\&.
-.PP
-If \- is specified as a ldb file, the ldif input is read from standard input\&.
-.SH "OPTIONS"
-.PP
-\-h
-.RS 4
-Show list of available options\&.
-.RE
-.PP
-\-H <ldb\-url>
-.RS 4
-LDB URL to connect to\&. See ldb(3) for details\&.
-.RE
-.SH "ENVIRONMENT"
-.PP
-LDB_URL
-.RS 4
-LDB URL to connect to (can be overridden by using the \-H command\-line option\&.)
-.RE
-.SH "VERSION"
-.PP
-This man page is correct for version 1\&.1 of LDB\&.
-ldbedit is a utility that allows you to edit LDB entries (in tdb files, sqlite files or LDAP servers) using your preferred editor\&. ldbedit generates an LDIF file based on your query, allows you to edit the LDIF, and then merges that LDIF back into the LDB backend\&.
-.SH "OPTIONS"
-.PP
-\-?, \-\-help
-.RS 4
-Show list of available options, and a phrase describing what that option does\&.
-.RE
-.PP
-\-\-usage
-.RS 4
-Show list of available options\&. This is similar to the help option, however it does not provide any description, and is hence shorter\&.
-.RE
-.PP
-\-H <ldb\-url>
-.RS 4
-LDB URL to connect to\&. For a tdb database, this will be of the form tdb://\fIfilename\fR\&. For a LDAP connection over unix domain sockets, this will be of the form ldapi://\fIsocket\fR\&. For a (potentially remote) LDAP connection over TCP, this will be of the form ldap://\fIhostname\fR\&. For an SQLite database, this will be of the form sqlite://\fIfilename\fR\&.
-.RE
-.PP
-\-s one|sub|base
-.RS 4
-Search scope to use\&. One\-level, subtree or base\&.
-.RE
-.PP
-\-a, \-all
-.RS 4
-Edit all records\&. This allows you to apply the same change to a number of records at once\&. You probably want to combine this with an expression of the form "objectclass=*"\&.
-.RE
-.PP
-\-e editor, \-\-editor editor
-.RS 4
-Specify the editor that should be used (overrides the VISUAL and EDITOR environment variables)\&. If this option is not used, and neither VISUAL nor EDITOR environment variables are set, then the vi editor will be used\&.
-.RE
-.PP
-\-b basedn
-.RS 4
-Specify Base Distinguished Name to use\&.
-.RE
-.PP
-\-v, \-\-verbose
-.RS 4
-Make ldbedit more verbose about the operations that are being performed\&. Without this option, ldbedit will only provide a summary change line\&.
-.RE
-.SH "ENVIRONMENT"
-.PP
-LDB_URL
-.RS 4
-LDB URL to connect to\&. This can be overridden by using the \-H command\-line option\&.)
-.RE
-.PP
-VISUAL and EDITOR
-.RS 4
-Environment variables used to determine what editor to use\&. VISUAL takes precedence over EDITOR, and both are overridden by the \-e command\-line option\&.
-.RE
-.SH "VERSION"
-.PP
-This man page is correct for version 1\&.1 of LDB\&.
-ldbmodify changes, adds and deletes records in a LDB database\&. The changes that should be made to the LDB database are read from the specified LDIF\-file\&. If \- is specified as the filename, input is read from stdin\&.
-.PP
-For now, see ldapmodify(1) for details on the LDIF file format\&.
-.SH "OPTIONS"
-.PP
-\-H <ldb\-url>
-.RS 4
-LDB URL to connect to\&. See ldb(3) for details\&.
-.RE
-.SH "ENVIRONMENT"
-.PP
-LDB_URL
-.RS 4
-LDB URL to connect to (can be overridden by using the \-H command\-line option\&.)
-.RE
-.SH "VERSION"
-.PP
-This man page is correct for version 1\&.1 of LDB\&.
-ldbrename is a utility that allows you to rename trees in an LDB database based by DN\&. This utility takes two arguments: the original DN name of the top element and the DN to change it to\&.
-.SH "OPTIONS"
-.PP
-\-h
-.RS 4
-Show list of available options\&.
-.RE
-.PP
-\-H <ldb\-url>
-.RS 4
-LDB URL to connect to\&. See ldb(3) for details\&.
-.RE
-.PP
-\-o options
-.RS 4
-Extra ldb options, such as modules\&.
-.RE
-.SH "ENVIRONMENT"
-.PP
-LDB_URL
-.RS 4
-LDB URL to connect to (can be overridden by using the \-H command\-line option\&.)
-.RE
-.SH "VERSION"
-.PP
-This man page is correct for version 1\&.1 of LDB\&.
-ldbsearch searches a LDB database for records matching the specified expression (see the ldapsearch(1) manpage for a description of the expression format)\&. For each record, the specified attributes are printed\&.
-.SH "OPTIONS"
-.PP
-\-h
-.RS 4
-Show list of available options\&.
-.RE
-.PP
-\-H <ldb\-url>
-.RS 4
-LDB URL to connect to\&. See ldb(3) for details\&.
-.RE
-.PP
-\-s one|sub|base
-.RS 4
-Search scope to use\&. One\-level, subtree or base\&.
-.RE
-.PP
-\-i
-.RS 4
-Read search expressions from stdin\&.
-.RE
-.PP
-\-b basedn
-.RS 4
-Specify Base DN to use\&.
-.RE
-.SH "ENVIRONMENT"
-.PP
-LDB_URL
-.RS 4
-LDB URL to connect to (can be overridden by using the \-H command\-line option\&.)
-.RE
-.SH "VERSION"
-.PP
-This man page is correct for version 1\&.1 of LDB\&.
-ldb is a light weight embedded database library and API\&. With a programming interface that is very similar to LDAP, ldb can store its data either in a tdb(3) database or in a real LDAP database\&.
-.PP
-When used with the tdb backend ldb does not require any database daemon\&. Instead, ldb function calls are processed immediately by the ldb library, which does IO directly on the database, while allowing multiple readers/writers using operating system byte range locks\&. This leads to an API with very low overheads, often resulting in speeds of more than 10x what can be achieved with a more traditional LDAP architecture\&.
-.PP
-In a taxonomy of databases ldb would sit half way between key/value pair databases (such as berkley db or tdb) and a full LDAP database\&. With a structured attribute oriented API like LDAP and good indexing capabilities, ldb can be used for quite sophisticated applications that need a light weight database, without the administrative overhead of a full LDAP installation\&.
-.PP
-Included with ldb are a number of useful command line tools for manipulating a ldb database\&. These tools are similar in style to the equivalent ldap command line tools\&.
-.PP
-In its default mode of operation with a tdb backend, ldb can also be seen as a "schema\-less LDAP"\&. By default ldb does not require a schema, which greatly reduces the complexity of getting started with ldb databases\&. As the complexity of you application grows you can take advantage of some of the optional schema\-like attributes that ldb offers, or you can migrate to using the full LDAP api while keeping your exiting ldb code\&.
-.PP
-If you are new to ldb, then I suggest starting with the manual pages for ldbsearch(1) and ldbedit(1), and experimenting with a local database\&. Then I suggest you look at the ldb_connect(3) and ldb_search(3) manual pages\&.
-.SH "TOOLS"
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-ldbsearch(1)
-\- command line ldb search utility
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-ldbedit(1)
-\- edit all or part of a ldb database using your favourite editor
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-ldbadd(1)
-\- add records to a ldb database using LDIF formatted input
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-ldbdel(1)
-\- delete records from a ldb database
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-ldbmodify(1)
-\- modify records in a ldb database using LDIF formatted input
-.RE
-.SH "FUNCTIONS"
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_connect(3)\fR
-\- connect to a ldb backend
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_search(3)\fR
-\- perform a database search
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_add(3)\fR
-\- add a record to the database
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_delete(3)\fR
-\- delete a record from the database
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_modify(3)\fR
-\- modify a record in the database
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_errstring(3)\fR
-\- retrieve extended error information from the last operation
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_ldif_write(3)\fR
-\- write a LDIF formatted message
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_ldif_write_file(3)\fR
-\- write a LDIF formatted message to a file
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_ldif_read(3)\fR
-\- read a LDIF formatted message
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_ldif_read_free(3)\fR
-\- free the result of a ldb_ldif_read()
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_ldif_read_file(3)\fR
-\- read a LDIF message from a file
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_ldif_read_string(3)\fR
-\- read a LDIF message from a string
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_msg_find_element(3)\fR
-\- find an element in a ldb_message
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_val_equal_exact(3)\fR
-\- compare two ldb_val structures
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_msg_find_val(3)\fR
-\- find an element by value
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_msg_add_empty(3)\fR
-\- add an empty message element to a ldb_message
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_msg_add(3)\fR
-\- add a non\-empty message element to a ldb_message
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_msg_element_compare(3)\fR
-\- compare two ldb_message_element structures
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_msg_find_int(3)\fR
-\- return an integer value from a ldb_message
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_msg_find_uint(3)\fR
-\- return an unsigned integer value from a ldb_message
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_msg_find_double(3)\fR
-\- return a double value from a ldb_message
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_msg_find_string(3)\fR
-\- return a string value from a ldb_message
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_set_alloc(3)\fR
-\- set the memory allocation function to be used by ldb
-ldbadd adds records to an ldb(3) database\&. It reads the ldif(5) files specified on the command line and adds the records from these files to the LDB database, which is specified by the \-H option or the LDB_URL environment variable\&.
-.PP
-If \- is specified as a ldb file, the ldif input is read from standard input\&.
-.SH "OPTIONS"
-.PP
-\-h
-.RS 4
-Show list of available options\&.
-.RE
-.PP
-\-H <ldb\-url>
-.RS 4
-LDB URL to connect to\&. See ldb(3) for details\&.
-.RE
-.SH "ENVIRONMENT"
-.PP
-LDB_URL
-.RS 4
-LDB URL to connect to (can be overridden by using the \-H command\-line option\&.)
-.RE
-.SH "VERSION"
-.PP
-This man page is correct for version 1\&.1 of LDB\&.
-ldbedit is a utility that allows you to edit LDB entries (in tdb files, sqlite files or LDAP servers) using your preferred editor\&. ldbedit generates an LDIF file based on your query, allows you to edit the LDIF, and then merges that LDIF back into the LDB backend\&.
-.SH "OPTIONS"
-.PP
-\-?, \-\-help
-.RS 4
-Show list of available options, and a phrase describing what that option does\&.
-.RE
-.PP
-\-\-usage
-.RS 4
-Show list of available options\&. This is similar to the help option, however it does not provide any description, and is hence shorter\&.
-.RE
-.PP
-\-H <ldb\-url>
-.RS 4
-LDB URL to connect to\&. For a tdb database, this will be of the form tdb://\fIfilename\fR\&. For a LDAP connection over unix domain sockets, this will be of the form ldapi://\fIsocket\fR\&. For a (potentially remote) LDAP connection over TCP, this will be of the form ldap://\fIhostname\fR\&. For an SQLite database, this will be of the form sqlite://\fIfilename\fR\&.
-.RE
-.PP
-\-s one|sub|base
-.RS 4
-Search scope to use\&. One\-level, subtree or base\&.
-.RE
-.PP
-\-a, \-all
-.RS 4
-Edit all records\&. This allows you to apply the same change to a number of records at once\&. You probably want to combine this with an expression of the form "objectclass=*"\&.
-.RE
-.PP
-\-e editor, \-\-editor editor
-.RS 4
-Specify the editor that should be used (overrides the VISUAL and EDITOR environment variables)\&. If this option is not used, and neither VISUAL nor EDITOR environment variables are set, then the vi editor will be used\&.
-.RE
-.PP
-\-b basedn
-.RS 4
-Specify Base Distinguished Name to use\&.
-.RE
-.PP
-\-v, \-\-verbose
-.RS 4
-Make ldbedit more verbose about the operations that are being performed\&. Without this option, ldbedit will only provide a summary change line\&.
-.RE
-.SH "ENVIRONMENT"
-.PP
-LDB_URL
-.RS 4
-LDB URL to connect to\&. This can be overridden by using the \-H command\-line option\&.)
-.RE
-.PP
-VISUAL and EDITOR
-.RS 4
-Environment variables used to determine what editor to use\&. VISUAL takes precedence over EDITOR, and both are overridden by the \-e command\-line option\&.
-.RE
-.SH "VERSION"
-.PP
-This man page is correct for version 1\&.1 of LDB\&.
-ldbmodify changes, adds and deletes records in a LDB database\&. The changes that should be made to the LDB database are read from the specified LDIF\-file\&. If \- is specified as the filename, input is read from stdin\&.
-.PP
-For now, see ldapmodify(1) for details on the LDIF file format\&.
-.SH "OPTIONS"
-.PP
-\-H <ldb\-url>
-.RS 4
-LDB URL to connect to\&. See ldb(3) for details\&.
-.RE
-.SH "ENVIRONMENT"
-.PP
-LDB_URL
-.RS 4
-LDB URL to connect to (can be overridden by using the \-H command\-line option\&.)
-.RE
-.SH "VERSION"
-.PP
-This man page is correct for version 1\&.1 of LDB\&.
-ldbrename is a utility that allows you to rename trees in an LDB database based by DN\&. This utility takes two arguments: the original DN name of the top element and the DN to change it to\&.
-.SH "OPTIONS"
-.PP
-\-h
-.RS 4
-Show list of available options\&.
-.RE
-.PP
-\-H <ldb\-url>
-.RS 4
-LDB URL to connect to\&. See ldb(3) for details\&.
-.RE
-.PP
-\-o options
-.RS 4
-Extra ldb options, such as modules\&.
-.RE
-.SH "ENVIRONMENT"
-.PP
-LDB_URL
-.RS 4
-LDB URL to connect to (can be overridden by using the \-H command\-line option\&.)
-.RE
-.SH "VERSION"
-.PP
-This man page is correct for version 1\&.1 of LDB\&.
-ldbsearch searches a LDB database for records matching the specified expression (see the ldapsearch(1) manpage for a description of the expression format)\&. For each record, the specified attributes are printed\&.
-.SH "OPTIONS"
-.PP
-\-h
-.RS 4
-Show list of available options\&.
-.RE
-.PP
-\-H <ldb\-url>
-.RS 4
-LDB URL to connect to\&. See ldb(3) for details\&.
-.RE
-.PP
-\-s one|sub|base
-.RS 4
-Search scope to use\&. One\-level, subtree or base\&.
-.RE
-.PP
-\-i
-.RS 4
-Read search expressions from stdin\&.
-.RE
-.PP
-\-b basedn
-.RS 4
-Specify Base DN to use\&.
-.RE
-.SH "ENVIRONMENT"
-.PP
-LDB_URL
-.RS 4
-LDB URL to connect to (can be overridden by using the \-H command\-line option\&.)
-.RE
-.SH "VERSION"
-.PP
-This man page is correct for version 1\&.1 of LDB\&.
-ldb is a light weight embedded database library and API\&. With a programming interface that is very similar to LDAP, ldb can store its data either in a tdb(3) database or in a real LDAP database\&.
-.PP
-When used with the tdb backend ldb does not require any database daemon\&. Instead, ldb function calls are processed immediately by the ldb library, which does IO directly on the database, while allowing multiple readers/writers using operating system byte range locks\&. This leads to an API with very low overheads, often resulting in speeds of more than 10x what can be achieved with a more traditional LDAP architecture\&.
-.PP
-In a taxonomy of databases ldb would sit half way between key/value pair databases (such as berkley db or tdb) and a full LDAP database\&. With a structured attribute oriented API like LDAP and good indexing capabilities, ldb can be used for quite sophisticated applications that need a light weight database, without the administrative overhead of a full LDAP installation\&.
-.PP
-Included with ldb are a number of useful command line tools for manipulating a ldb database\&. These tools are similar in style to the equivalent ldap command line tools\&.
-.PP
-In its default mode of operation with a tdb backend, ldb can also be seen as a "schema\-less LDAP"\&. By default ldb does not require a schema, which greatly reduces the complexity of getting started with ldb databases\&. As the complexity of you application grows you can take advantage of some of the optional schema\-like attributes that ldb offers, or you can migrate to using the full LDAP api while keeping your exiting ldb code\&.
-.PP
-If you are new to ldb, then I suggest starting with the manual pages for ldbsearch(1) and ldbedit(1), and experimenting with a local database\&. Then I suggest you look at the ldb_connect(3) and ldb_search(3) manual pages\&.
-.SH "TOOLS"
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-ldbsearch(1)
-\- command line ldb search utility
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-ldbedit(1)
-\- edit all or part of a ldb database using your favourite editor
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-ldbadd(1)
-\- add records to a ldb database using LDIF formatted input
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-ldbdel(1)
-\- delete records from a ldb database
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-ldbmodify(1)
-\- modify records in a ldb database using LDIF formatted input
-.RE
-.SH "FUNCTIONS"
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_connect(3)\fR
-\- connect to a ldb backend
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_search(3)\fR
-\- perform a database search
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_add(3)\fR
-\- add a record to the database
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_delete(3)\fR
-\- delete a record from the database
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_modify(3)\fR
-\- modify a record in the database
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_errstring(3)\fR
-\- retrieve extended error information from the last operation
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_ldif_write(3)\fR
-\- write a LDIF formatted message
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_ldif_write_file(3)\fR
-\- write a LDIF formatted message to a file
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_ldif_read(3)\fR
-\- read a LDIF formatted message
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_ldif_read_free(3)\fR
-\- free the result of a ldb_ldif_read()
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_ldif_read_file(3)\fR
-\- read a LDIF message from a file
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_ldif_read_string(3)\fR
-\- read a LDIF message from a string
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_msg_find_element(3)\fR
-\- find an element in a ldb_message
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_val_equal_exact(3)\fR
-\- compare two ldb_val structures
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_msg_find_val(3)\fR
-\- find an element by value
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_msg_add_empty(3)\fR
-\- add an empty message element to a ldb_message
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_msg_add(3)\fR
-\- add a non\-empty message element to a ldb_message
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_msg_element_compare(3)\fR
-\- compare two ldb_message_element structures
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_msg_find_int(3)\fR
-\- return an integer value from a ldb_message
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_msg_find_uint(3)\fR
-\- return an unsigned integer value from a ldb_message
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_msg_find_double(3)\fR
-\- return a double value from a ldb_message
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_msg_find_string(3)\fR
-\- return a string value from a ldb_message
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-\fBldb_set_alloc(3)\fR
-\- set the memory allocation function to be used by ldb
-ldbadd adds records to an ldb(3) database\&. It reads the ldif(5) files specified on the command line and adds the records from these files to the LDB database, which is specified by the \-H option or the LDB_URL environment variable\&.
-.PP
-If \- is specified as a ldb file, the ldif input is read from standard input\&.
-.SH "OPTIONS"
-.PP
-\-h
-.RS 4
-Show list of available options\&.
-.RE
-.PP
-\-H <ldb\-url>
-.RS 4
-LDB URL to connect to\&. See ldb(3) for details\&.
-.RE
-.SH "ENVIRONMENT"
-.PP
-LDB_URL
-.RS 4
-LDB URL to connect to (can be overridden by using the \-H command\-line option\&.)
-.RE
-.SH "VERSION"
-.PP
-This man page is correct for version 1\&.1 of LDB\&.
-ldbedit is a utility that allows you to edit LDB entries (in tdb files, sqlite files or LDAP servers) using your preferred editor\&. ldbedit generates an LDIF file based on your query, allows you to edit the LDIF, and then merges that LDIF back into the LDB backend\&.
-.SH "OPTIONS"
-.PP
-\-?, \-\-help
-.RS 4
-Show list of available options, and a phrase describing what that option does\&.
-.RE
-.PP
-\-\-usage
-.RS 4
-Show list of available options\&. This is similar to the help option, however it does not provide any description, and is hence shorter\&.
-.RE
-.PP
-\-H <ldb\-url>
-.RS 4
-LDB URL to connect to\&. For a tdb database, this will be of the form tdb://\fIfilename\fR\&. For a LDAP connection over unix domain sockets, this will be of the form ldapi://\fIsocket\fR\&. For a (potentially remote) LDAP connection over TCP, this will be of the form ldap://\fIhostname\fR\&. For an SQLite database, this will be of the form sqlite://\fIfilename\fR\&.
-.RE
-.PP
-\-s one|sub|base
-.RS 4
-Search scope to use\&. One\-level, subtree or base\&.
-.RE
-.PP
-\-a, \-all
-.RS 4
-Edit all records\&. This allows you to apply the same change to a number of records at once\&. You probably want to combine this with an expression of the form "objectclass=*"\&.
-.RE
-.PP
-\-e editor, \-\-editor editor
-.RS 4
-Specify the editor that should be used (overrides the VISUAL and EDITOR environment variables)\&. If this option is not used, and neither VISUAL nor EDITOR environment variables are set, then the vi editor will be used\&.
-.RE
-.PP
-\-b basedn
-.RS 4
-Specify Base Distinguished Name to use\&.
-.RE
-.PP
-\-v, \-\-verbose
-.RS 4
-Make ldbedit more verbose about the operations that are being performed\&. Without this option, ldbedit will only provide a summary change line\&.
-.RE
-.SH "ENVIRONMENT"
-.PP
-LDB_URL
-.RS 4
-LDB URL to connect to\&. This can be overridden by using the \-H command\-line option\&.)
-.RE
-.PP
-VISUAL and EDITOR
-.RS 4
-Environment variables used to determine what editor to use\&. VISUAL takes precedence over EDITOR, and both are overridden by the \-e command\-line option\&.
-.RE
-.SH "VERSION"
-.PP
-This man page is correct for version 1\&.1 of LDB\&.
-ldbmodify changes, adds and deletes records in a LDB database\&. The changes that should be made to the LDB database are read from the specified LDIF\-file\&. If \- is specified as the filename, input is read from stdin\&.
-.PP
-For now, see ldapmodify(1) for details on the LDIF file format\&.
-.SH "OPTIONS"
-.PP
-\-H <ldb\-url>
-.RS 4
-LDB URL to connect to\&. See ldb(3) for details\&.
-.RE
-.SH "ENVIRONMENT"
-.PP
-LDB_URL
-.RS 4
-LDB URL to connect to (can be overridden by using the \-H command\-line option\&.)
-.RE
-.SH "VERSION"
-.PP
-This man page is correct for version 1\&.1 of LDB\&.
-ldbrename is a utility that allows you to rename trees in an LDB database based by DN\&. This utility takes two arguments: the original DN name of the top element and the DN to change it to\&.
-.SH "OPTIONS"
-.PP
-\-h
-.RS 4
-Show list of available options\&.
-.RE
-.PP
-\-H <ldb\-url>
-.RS 4
-LDB URL to connect to\&. See ldb(3) for details\&.
-.RE
-.PP
-\-o options
-.RS 4
-Extra ldb options, such as modules\&.
-.RE
-.SH "ENVIRONMENT"
-.PP
-LDB_URL
-.RS 4
-LDB URL to connect to (can be overridden by using the \-H command\-line option\&.)
-.RE
-.SH "VERSION"
-.PP
-This man page is correct for version 1\&.1 of LDB\&.
-ldbsearch searches a LDB database for records matching the specified expression (see the ldapsearch(1) manpage for a description of the expression format)\&. For each record, the specified attributes are printed\&.
-.SH "OPTIONS"
-.PP
-\-h
-.RS 4
-Show list of available options\&.
-.RE
-.PP
-\-H <ldb\-url>
-.RS 4
-LDB URL to connect to\&. See ldb(3) for details\&.
-.RE
-.PP
-\-s one|sub|base
-.RS 4
-Search scope to use\&. One\-level, subtree or base\&.
-.RE
-.PP
-\-i
-.RS 4
-Read search expressions from stdin\&.
-.RE
-.PP
-\-b basedn
-.RS 4
-Specify Base DN to use\&.
-.RE
-.SH "ENVIRONMENT"
-.PP
-LDB_URL
-.RS 4
-LDB URL to connect to (can be overridden by using the \-H command\-line option\&.)
-.RE
-.SH "VERSION"
-.PP
-This man page is correct for version 1\&.1 of LDB\&.
-tdbbackup \- tool for backing up and for validating the integrity of samba \&.tdb files
-.SH "SYNOPSIS"
-.HP \w'\fBtdbbackup\fR\ 'u
-\fBtdbbackup\fR [\-s\ suffix] [\-v] [\-h] [\-l]
-.SH "DESCRIPTION"
-.PP
-This tool is part of the
-\fBsamba\fR(1)
-suite\&.
-.PP
-\fBtdbbackup\fR
-is a tool that may be used to backup samba \&.tdb files\&. This tool may also be used to verify the integrity of the \&.tdb files prior to samba startup or during normal operation\&. If it finds file damage and it finds a prior backup the backup file will be restored\&.
-.SH "OPTIONS"
-.PP
-\-h
-.RS 4
-Get help information\&.
-.RE
-.PP
-\-s suffix
-.RS 4
-The
-\fB\-s\fR
-option allows the administrator to specify a file backup extension\&. This way it is possible to keep a history of tdb backup files by using a new suffix for each backup\&.
-.RE
-.PP
-\-v
-.RS 4
-The
-\fB\-v\fR
-will check the database for damages (corrupt data) which if detected causes the backup to be restored\&.
-.RE
-.PP
-\-l
-.RS 4
-This options disables any locking, by passing TDB_NOLOCK to tdb_open_ex()\&. Only use this for database files which are not used by any other process! And also only if it is otherwise not possible to open the database, e\&.g\&. databases which were created with mutex locking\&.
-.RE
-.SH "COMMANDS"
-.PP
-\fIGENERAL INFORMATION\fR
-.PP
-The
-\fBtdbbackup\fR
-utility can safely be run at any time\&. It was designed so that it can be used at any time to validate the integrity of tdb files, even during Samba operation\&. Typical usage for the command will be:
-.PP
-tdbbackup [\-s suffix] *\&.tdb
-.PP
-Before restarting samba the following command may be run to validate \&.tdb files:
-.PP
-tdbbackup \-v [\-s suffix] *\&.tdb
-.PP
-Samba \&.tdb files are stored in various locations, be sure to run backup all \&.tdb file on the system\&. Important files includes:
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-
-\fBsecrets\&.tdb\fR
-\- usual location is in the /usr/local/samba/private directory, or on some systems in /etc/samba\&.
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-
-\fBpassdb\&.tdb\fR
-\- usual location is in the /usr/local/samba/private directory, or on some systems in /etc/samba\&.
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-
-\fB*\&.tdb\fR
-located in the /usr/local/samba/var directory or on some systems in the /var/cache or /var/lib/samba directories\&.
-.RE
-.SH "VERSION"
-.PP
-This man page is correct for version 3 of the Samba suite\&.
-.SH "AUTHOR"
-.PP
-The original Samba software and related utilities were created by Andrew Tridgell\&. Samba is now developed by the Samba Team as an Open Source project similar to the way the Linux kernel is developed\&.
-.PP
-The tdbbackup man page was written by John H Terpstra\&.
-is a very simple utility that \*(Aqdumps\*(Aq the contents of a TDB (Trivial DataBase) file to standard output in a human\-readable format\&.
-.PP
-This tool can be used when debugging problems with TDB files\&. It is intended for those who are somewhat familiar with Samba internals\&.
-.SH "OPTIONS"
-.PP
-\-h
-.RS 4
-Get help information\&.
-.RE
-.PP
-\-k \fIkeyname\fR
-.RS 4
-The
-\fB\-k\fR
-option restricts dumping to a single key, if found\&.
-.RE
-.PP
-\-e
-.RS 4
-The
-\fB\-e\fR
-tries to dump out from a corrupt database\&. Naturally, such a dump is unreliable, at best\&.
-.RE
-.SH "VERSION"
-.PP
-This man page is correct for version 3 of the Samba suite\&.
-.SH "AUTHOR"
-.PP
-The original Samba software and related utilities were created by Andrew Tridgell\&. Samba is now developed by the Samba Team as an Open Source project similar to the way the Linux kernel is developed\&.
-.PP
-The tdbdump man page was written by Jelmer Vernooij\&.
-tdbrestore \- tool for creating a TDB file out of a tdbdump output
-.SH "SYNOPSIS"
-.HP \w'\fBtdbrestore\fR\ 'u
-\fBtdbrestore\fR {tdbfilename}
-.SH "DESCRIPTION"
-.PP
-This tool is part of the
-\fBsamba\fR(1)
-suite\&.
-.PP
-\fBtdbrestore\fR
-is a very simple utility that \*(Aqrestores\*(Aq the contents of dump file into TDB (Trivial DataBase) file\&. The dump file is obtained from the tdbdump command\&.
-.PP
-This tool wait on the standard input for the content of the dump and will write the tdb in the tdbfilename parameter\&.
-.PP
-This tool can be used for unpacking the content of tdb as backup mean\&.
-.SH "VERSION"
-.PP
-This man page is correct for version 3 of the Samba suite\&.
-.SH "AUTHOR"
-.PP
-The original Samba software and related utilities were created by Andrew Tridgell\&. Samba is now developed by the Samba Team as an Open Source project similar to the way the Linux kernel is developed\&. This tool was initially written by Volker Lendecke based on an idea by Simon McVittie\&.
-.PP
-The tdbrestore man page was written by Matthieu Patou\&.
-a tool for displaying and altering the contents of Samba TDB (Trivial DataBase) files\&. Each of the commands listed below can be entered interactively or provided on the command line\&.
-.SH "OPTIONS"
-.PP
-\-l
-.RS 4
-This options disables any locking, by passing TDB_NOLOCK to tdb_open_ex()\&. Only use this for database files which are not used by any other process! And also only if it is otherwise not possible to open the database, e\&.g\&. databases which were created with mutex locking\&.
-.RE
-.SH "COMMANDS"
-.PP
-\fBcreate\fR \fITDBFILE\fR
-.RS 4
-Create a new database named
-\fITDBFILE\fR\&.
-.RE
-.PP
-\fBopen\fR \fITDBFILE\fR
-.RS 4
-Open an existing database named
-\fITDBFILE\fR\&.
-.RE
-.PP
-\fBerase\fR
-.RS 4
-Erase the current database\&.
-.RE
-.PP
-\fBdump\fR
-.RS 4
-Dump the current database as strings\&.
-.RE
-.PP
-\fBcdump\fR
-.RS 4
-Dump the current database as connection records\&.
-.RE
-.PP
-\fBkeys\fR
-.RS 4
-Dump the current database keys as strings\&.
-.RE
-.PP
-\fBhexkeys\fR
-.RS 4
-Dump the current database keys as hex values\&.
-.RE
-.PP
-\fBinfo\fR
-.RS 4
-Print summary information about the current database\&.
-.RE
-.PP
-\fBinsert\fR \fIKEY\fR \fIDATA\fR
-.RS 4
-Insert a record into the current database\&.
-.RE
-.PP
-\fBmove\fR \fIKEY\fR \fITDBFILE\fR
-.RS 4
-Move a record from the current database into
-\fITDBFILE\fR\&.
-.RE
-.PP
-\fBstore\fR \fIKEY\fR \fIDATA\fR
-.RS 4
-Store (replace) a record in the current database\&.
-.RE
-.PP
-\fBshow\fR \fIKEY\fR
-.RS 4
-Show a record by key\&.
-.RE
-.PP
-\fBdelete\fR \fIKEY\fR
-.RS 4
-Delete a record by key\&.
-.RE
-.PP
-\fBlist\fR
-.RS 4
-Print the current database hash table and free list\&.
-.RE
-.PP
-\fBfree\fR
-.RS 4
-Print the current database and free list\&.
-.RE
-.PP
-\fB!\fR \fICOMMAND\fR
-.RS 4
-Execute the given system command\&.
-.RE
-.PP
-\fBfirst\fR
-.RS 4
-Print the first record in the current database\&.
-.RE
-.PP
-\fBnext\fR
-.RS 4
-Print the next record in the current database\&.
-.RE
-.PP
-\fBcheck\fR
-.RS 4
-Check the integrity of the current database\&.
-.RE
-.PP
-\fBrepack\fR
-.RS 4
-Repack a database using a temporary file to remove fragmentation\&.
-.RE
-.PP
-\fBquit\fR
-.RS 4
-Exit
-\fBtdbtool\fR\&.
-.RE
-.SH "CAVEATS"
-.PP
-The contents of the Samba TDB files are private to the implementation and should not be altered with
-\fBtdbtool\fR\&.
-.SH "VERSION"
-.PP
-This man page is correct for version 3\&.6 of the Samba suite\&.
-.SH "AUTHOR"
-.PP
-The original Samba software and related utilities were created by Andrew Tridgell\&. Samba is now developed by the Samba Team as an Open Source project similar to the way the Linux kernel is developed\&.
-tdbbackup \- tool for backing up and for validating the integrity of samba \&.tdb files
-.SH "SYNOPSIS"
-.HP \w'\fBtdbbackup\fR\ 'u
-\fBtdbbackup\fR [\-s\ suffix] [\-v] [\-h] [\-l]
-.SH "DESCRIPTION"
-.PP
-This tool is part of the
-\fBsamba\fR(1)
-suite\&.
-.PP
-\fBtdbbackup\fR
-is a tool that may be used to backup samba \&.tdb files\&. This tool may also be used to verify the integrity of the \&.tdb files prior to samba startup or during normal operation\&. If it finds file damage and it finds a prior backup the backup file will be restored\&.
-.SH "OPTIONS"
-.PP
-\-h
-.RS 4
-Get help information\&.
-.RE
-.PP
-\-s suffix
-.RS 4
-The
-\fB\-s\fR
-option allows the administrator to specify a file backup extension\&. This way it is possible to keep a history of tdb backup files by using a new suffix for each backup\&.
-.RE
-.PP
-\-v
-.RS 4
-The
-\fB\-v\fR
-will check the database for damages (corrupt data) which if detected causes the backup to be restored\&.
-.RE
-.PP
-\-l
-.RS 4
-This options disables any locking, by passing TDB_NOLOCK to tdb_open_ex()\&. Only use this for database files which are not used by any other process! And also only if it is otherwise not possible to open the database, e\&.g\&. databases which were created with mutex locking\&.
-.RE
-.SH "COMMANDS"
-.PP
-\fIGENERAL INFORMATION\fR
-.PP
-The
-\fBtdbbackup\fR
-utility can safely be run at any time\&. It was designed so that it can be used at any time to validate the integrity of tdb files, even during Samba operation\&. Typical usage for the command will be:
-.PP
-tdbbackup [\-s suffix] *\&.tdb
-.PP
-Before restarting samba the following command may be run to validate \&.tdb files:
-.PP
-tdbbackup \-v [\-s suffix] *\&.tdb
-.PP
-Samba \&.tdb files are stored in various locations, be sure to run backup all \&.tdb file on the system\&. Important files includes:
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-
-\fBsecrets\&.tdb\fR
-\- usual location is in the /usr/local/samba/private directory, or on some systems in /etc/samba\&.
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-
-\fBpassdb\&.tdb\fR
-\- usual location is in the /usr/local/samba/private directory, or on some systems in /etc/samba\&.
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-
-\fB*\&.tdb\fR
-located in the /usr/local/samba/var directory or on some systems in the /var/cache or /var/lib/samba directories\&.
-.RE
-.SH "VERSION"
-.PP
-This man page is correct for version 3 of the Samba suite\&.
-.SH "AUTHOR"
-.PP
-The original Samba software and related utilities were created by Andrew Tridgell\&. Samba is now developed by the Samba Team as an Open Source project similar to the way the Linux kernel is developed\&.
-.PP
-The tdbbackup man page was written by John H Terpstra\&.
-is a very simple utility that \*(Aqdumps\*(Aq the contents of a TDB (Trivial DataBase) file to standard output in a human\-readable format\&.
-.PP
-This tool can be used when debugging problems with TDB files\&. It is intended for those who are somewhat familiar with Samba internals\&.
-.SH "OPTIONS"
-.PP
-\-h
-.RS 4
-Get help information\&.
-.RE
-.PP
-\-k \fIkeyname\fR
-.RS 4
-The
-\fB\-k\fR
-option restricts dumping to a single key, if found\&.
-.RE
-.PP
-\-e
-.RS 4
-The
-\fB\-e\fR
-tries to dump out from a corrupt database\&. Naturally, such a dump is unreliable, at best\&.
-.RE
-.SH "VERSION"
-.PP
-This man page is correct for version 3 of the Samba suite\&.
-.SH "AUTHOR"
-.PP
-The original Samba software and related utilities were created by Andrew Tridgell\&. Samba is now developed by the Samba Team as an Open Source project similar to the way the Linux kernel is developed\&.
-.PP
-The tdbdump man page was written by Jelmer Vernooij\&.
-tdbrestore \- tool for creating a TDB file out of a tdbdump output
-.SH "SYNOPSIS"
-.HP \w'\fBtdbrestore\fR\ 'u
-\fBtdbrestore\fR {tdbfilename}
-.SH "DESCRIPTION"
-.PP
-This tool is part of the
-\fBsamba\fR(1)
-suite\&.
-.PP
-\fBtdbrestore\fR
-is a very simple utility that \*(Aqrestores\*(Aq the contents of dump file into TDB (Trivial DataBase) file\&. The dump file is obtained from the tdbdump command\&.
-.PP
-This tool wait on the standard input for the content of the dump and will write the tdb in the tdbfilename parameter\&.
-.PP
-This tool can be used for unpacking the content of tdb as backup mean\&.
-.SH "VERSION"
-.PP
-This man page is correct for version 3 of the Samba suite\&.
-.SH "AUTHOR"
-.PP
-The original Samba software and related utilities were created by Andrew Tridgell\&. Samba is now developed by the Samba Team as an Open Source project similar to the way the Linux kernel is developed\&. This tool was initially written by Volker Lendecke based on an idea by Simon McVittie\&.
-.PP
-The tdbrestore man page was written by Matthieu Patou\&.
-a tool for displaying and altering the contents of Samba TDB (Trivial DataBase) files\&. Each of the commands listed below can be entered interactively or provided on the command line\&.
-.SH "OPTIONS"
-.PP
-\-l
-.RS 4
-This options disables any locking, by passing TDB_NOLOCK to tdb_open_ex()\&. Only use this for database files which are not used by any other process! And also only if it is otherwise not possible to open the database, e\&.g\&. databases which were created with mutex locking\&.
-.RE
-.SH "COMMANDS"
-.PP
-\fBcreate\fR \fITDBFILE\fR
-.RS 4
-Create a new database named
-\fITDBFILE\fR\&.
-.RE
-.PP
-\fBopen\fR \fITDBFILE\fR
-.RS 4
-Open an existing database named
-\fITDBFILE\fR\&.
-.RE
-.PP
-\fBerase\fR
-.RS 4
-Erase the current database\&.
-.RE
-.PP
-\fBdump\fR
-.RS 4
-Dump the current database as strings\&.
-.RE
-.PP
-\fBcdump\fR
-.RS 4
-Dump the current database as connection records\&.
-.RE
-.PP
-\fBkeys\fR
-.RS 4
-Dump the current database keys as strings\&.
-.RE
-.PP
-\fBhexkeys\fR
-.RS 4
-Dump the current database keys as hex values\&.
-.RE
-.PP
-\fBinfo\fR
-.RS 4
-Print summary information about the current database\&.
-.RE
-.PP
-\fBinsert\fR \fIKEY\fR \fIDATA\fR
-.RS 4
-Insert a record into the current database\&.
-.RE
-.PP
-\fBmove\fR \fIKEY\fR \fITDBFILE\fR
-.RS 4
-Move a record from the current database into
-\fITDBFILE\fR\&.
-.RE
-.PP
-\fBstore\fR \fIKEY\fR \fIDATA\fR
-.RS 4
-Store (replace) a record in the current database\&.
-.RE
-.PP
-\fBshow\fR \fIKEY\fR
-.RS 4
-Show a record by key\&.
-.RE
-.PP
-\fBdelete\fR \fIKEY\fR
-.RS 4
-Delete a record by key\&.
-.RE
-.PP
-\fBlist\fR
-.RS 4
-Print the current database hash table and free list\&.
-.RE
-.PP
-\fBfree\fR
-.RS 4
-Print the current database and free list\&.
-.RE
-.PP
-\fB!\fR \fICOMMAND\fR
-.RS 4
-Execute the given system command\&.
-.RE
-.PP
-\fBfirst\fR
-.RS 4
-Print the first record in the current database\&.
-.RE
-.PP
-\fBnext\fR
-.RS 4
-Print the next record in the current database\&.
-.RE
-.PP
-\fBcheck\fR
-.RS 4
-Check the integrity of the current database\&.
-.RE
-.PP
-\fBrepack\fR
-.RS 4
-Repack a database using a temporary file to remove fragmentation\&.
-.RE
-.PP
-\fBquit\fR
-.RS 4
-Exit
-\fBtdbtool\fR\&.
-.RE
-.SH "CAVEATS"
-.PP
-The contents of the Samba TDB files are private to the implementation and should not be altered with
-\fBtdbtool\fR\&.
-.SH "VERSION"
-.PP
-This man page is correct for version 3\&.6 of the Samba suite\&.
-.SH "AUTHOR"
-.PP
-The original Samba software and related utilities were created by Andrew Tridgell\&. Samba is now developed by the Samba Team as an Open Source project similar to the way the Linux kernel is developed\&.
-talloc \- hierarchical reference counted memory pool system with destructors
-.SH "SYNOPSIS"
-.sp
-.nf
-#include <talloc\&.h>
-.fi
-.SH "DESCRIPTION"
-.PP
-If you are used to talloc from Samba3 then please read this carefully, as talloc has changed a lot\&.
-.PP
-The new talloc is a hierarchical, reference counted memory pool system with destructors\&. Quite a mouthful really, but not too bad once you get used to it\&.
-.PP
-Perhaps the biggest change from Samba3 is that there is no distinction between a "talloc context" and a "talloc pointer"\&. Any pointer returned from talloc() is itself a valid talloc context\&. This means you can do this:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
- struct foo *X = talloc(mem_ctx, struct foo);
- X\->name = talloc_strdup(X, "foo");
-
-.fi
-.if n \{\
-.RE
-.\}
-.PP
-and the pointer
-X\->name
-would be a "child" of the talloc context
-X
-which is itself a child of
-mem_ctx\&. So if you do
-talloc_free(mem_ctx)
-then it is all destroyed, whereas if you do
-talloc_free(X)
-then just
-X
-and
-X\->name
-are destroyed, and if you do
-talloc_free(X\->name)
-then just the name element of
-X
-is destroyed\&.
-.PP
-If you think about this, then what this effectively gives you is an n\-ary tree, where you can free any part of the tree with talloc_free()\&.
-.PP
-If you find this confusing, then I suggest you run the
-testsuite
-program to watch talloc in action\&. You may also like to add your own tests to
-testsuite\&.c
-to clarify how some particular situation is handled\&.
-.SH "TALLOC API"
-.PP
-The following is a complete guide to the talloc API\&. Read it all at least twice\&.
-.SS "(type *)talloc(const void *ctx, type);"
-.PP
-The talloc() macro is the core of the talloc library\&. It takes a memory
-\fIctx\fR
-and a
-\fItype\fR, and returns a pointer to a new area of memory of the given
-\fItype\fR\&.
-.PP
-The returned pointer is itself a talloc context, so you can use it as the
-\fIctx\fR
-argument to more calls to talloc() if you wish\&.
-.PP
-The returned pointer is a "child" of the supplied context\&. This means that if you talloc_free() the
-\fIctx\fR
-then the new child disappears as well\&. Alternatively you can free just the child\&.
-.PP
-The
-\fIctx\fR
-argument to talloc() can be NULL, in which case a new top level context is created\&.
-The function talloc_size() should be used when you don\*(Aqt have a convenient type to pass to talloc()\&. Unlike talloc(), it is not type safe (as it returns a void *), so you are on your own for type checking\&.
-The talloc_ptrtype() macro should be used when you have a pointer and want to allocate memory to point at with this pointer\&. When compiling with gcc >= 3 it is typesafe\&. Note this is a wrapper of talloc_size() and talloc_get_name() will return the current location in the source file\&. and not the type\&.
-.SS "int talloc_free(void *ptr);"
-.PP
-The talloc_free() function frees a piece of talloc memory, and all its children\&. You can call talloc_free() on any pointer returned by talloc()\&.
-.PP
-The return value of talloc_free() indicates success or failure, with 0 returned for success and \-1 for failure\&. The only possible failure condition is if
-\fIptr\fR
-had a destructor attached to it and the destructor returned \-1\&. See
-\(lqtalloc_set_destructor()\(rq
-for details on destructors\&.
-.PP
-If this pointer has an additional parent when talloc_free() is called then the memory is not actually released, but instead the most recently established parent is destroyed\&. See
-\(lqtalloc_reference()\(rq
-for details on establishing additional parents\&.
-.PP
-For more control on which parent is removed, see
-\(lqtalloc_unlink()\(rq\&.
-.PP
-talloc_free() operates recursively on its children\&.
-.PP
-From the 2\&.0 version of talloc, as a special case, talloc_free() is refused on pointers that have more than one parent, as talloc would have no way of knowing which parent should be removed\&. To free a pointer that has more than one parent please use talloc_unlink()\&.
-.PP
-To help you find problems in your code caused by this behaviour, if you do try and free a pointer with more than one parent then the talloc logging function will be called to give output like this:
-.PP
-.if n \{\
-.RS 4
-.\}
-.nf
- ERROR: talloc_free with references at some_dir/source/foo\&.c:123
- reference at some_dir/source/other\&.c:325
- reference at some_dir/source/third\&.c:121
-
-.fi
-.if n \{\
-.RE
-.\}
-.PP
-Please see the documentation for talloc_set_log_fn() and talloc_set_log_stderr() for more information on talloc logging functions\&.
-The return value of talloc_reference() is always the original pointer
-\fIptr\fR, unless talloc ran out of memory in creating the reference in which case it will return NULL (each additional reference consumes around 48 bytes of memory on intel x86 platforms)\&.
-.PP
-If
-\fIptr\fR
-is NULL, then the function is a no\-op, and simply returns NULL\&.
-.PP
-After creating a reference you can free it in one of the following ways:
-.PP
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-you can talloc_free() any parent of the original pointer\&. That will reduce the number of parents of this pointer by 1, and will cause this pointer to be freed if it runs out of parents\&.
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-you can talloc_free() the pointer itself if it has at maximum one parent\&. This behaviour has been changed since the release of version 2\&.0\&. Further informations in the description of "talloc_free"\&.
-The talloc_unlink() function removes a specific parent from
-\fIptr\fR\&. The
-\fIctx\fR
-passed must either be a context used in talloc_reference() with this pointer, or must be a direct parent of ptr\&.
-.PP
-Note that if the parent has already been removed using talloc_free() then this function will fail and will return \-1\&. Likewise, if
-\fIptr\fR
-is NULL, then the function will make no modifications and return \-1\&.
-.PP
-Usually you can just use talloc_free() instead of talloc_unlink(), but sometimes it is useful to have the additional control on which parent is removed\&.
-.SS "void talloc_set_destructor(const void *ptr, int (*destructor)(void *));"
-.PP
-The function talloc_set_destructor() sets the
-\fIdestructor\fR
-for the pointer
-\fIptr\fR\&. A
-\fIdestructor\fR
-is a function that is called when the memory used by a pointer is about to be released\&. The destructor receives
-\fIptr\fR
-as an argument, and should return 0 for success and \-1 for failure\&.
-.PP
-The
-\fIdestructor\fR
-can do anything it wants to, including freeing other pieces of memory\&. A common use for destructors is to clean up operating system resources (such as open file descriptors) contained in the structure the destructor is placed on\&.
-.PP
-You can only place one destructor on a pointer\&. If you need more than one destructor then you can create a zero\-length child of the pointer and place an additional destructor on that\&.
-.PP
-To remove a destructor call talloc_set_destructor() with NULL for the destructor\&.
-.PP
-If your destructor attempts to talloc_free() the pointer that it is the destructor for then talloc_free() will return \-1 and the free will be ignored\&. This would be a pointless operation anyway, as the destructor is only called when the memory is just about to go away\&.
-Each talloc pointer has a "name"\&. The name is used principally for debugging purposes, although it is also possible to set and get the name on a pointer in as a way of "marking" pointers in your code\&.
-.PP
-The main use for names on pointer is for "talloc reports"\&. See
-\(lqtalloc_report_depth_cb()\(rq,
-\(lqtalloc_report_depth_file()\(rq,
-\(lqtalloc_report()\(rq
-\(lqtalloc_report()\(rq
-and
-\(lqtalloc_report_full()\(rq
-for details\&. Also see
-\(lqtalloc_enable_leak_report()\(rq
-and
-\(lqtalloc_enable_leak_report_full()\(rq\&.
-.PP
-The talloc_set_name() function allocates memory as a child of the pointer\&. It is logically equivalent to:
-Note that multiple calls to talloc_set_name() will allocate more memory without releasing the name\&. All of the memory is released when the ptr is freed using talloc_free()\&.
-The function talloc_set_name_const() is just like talloc_set_name(), but it takes a string constant, and is much faster\&. It is extensively used by the "auto naming" macros, such as talloc_p()\&.
-.PP
-This function does not allocate any memory\&. It just copies the supplied pointer into the internal representation of the talloc ptr\&. This means you must not pass a
-This function creates a zero length named talloc context as a top level context\&. It is equivalent to:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-talloc_named(NULL, 0, fmt, \&.\&.\&.);
-.fi
-.if n \{\
-.RE
-.\}
-.SS "void *talloc_new(void *\fIctx\fR);"
-.PP
-This is a utility macro that creates a new memory context hanging off an existing context, automatically naming it "talloc_new: __location__" where __location__ is the source line it is called from\&. It is particularly useful for creating a new temporary working context\&.
-talloc_realloc() returns the new pointer, or NULL on failure\&. The call will fail either due to a lack of memory, or because the pointer has more than one parent (see
-the talloc_realloc_size() function is useful when the type is not known so the type\-safe talloc_realloc() cannot be used\&.
-.SS "TYPE *talloc_steal(const void *\fInew_ctx\fR, const TYPE *\fIptr\fR);"
-.PP
-The talloc_steal() function changes the parent context of a talloc pointer\&. It is typically used when the context that the pointer is currently a child of is going to be freed and you wish to keep the memory for a longer time\&.
-.PP
-The talloc_steal() function returns the pointer that you pass it\&. It does not have any failure modes\&.
-.PP
-It is possible to produce loops in the parent/child relationship if you are not careful with talloc_steal()\&. No guarantees are provided as to your sanity or the safety of your data if you do this\&.
-.PP
-Note that if you try and call talloc_steal() on a pointer that has more than one parent then the result is ambiguous\&. Talloc will choose to remove the parent that is currently indicated by talloc_parent() and replace it with the chosen parent\&. You will also get a message like this via the talloc logging functions:
-.PP
-.if n \{\
-.RS 4
-.\}
-.nf
- WARNING: talloc_steal with references at some_dir/source/foo\&.c:123
- reference at some_dir/source/other\&.c:325
- reference at some_dir/source/third\&.c:121
-
-.fi
-.if n \{\
-.RE
-.\}
-.PP
-To unambiguously change the parent of a pointer please see the function
-\(lqtalloc_reparent()\(rq\&. See the talloc_set_log_fn() documentation for more information on talloc logging\&.
-The talloc_reparent() function changes the parent context of a talloc pointer\&. It is typically used when the context that the pointer is currently a child of is going to be freed and you wish to keep the memory for a longer time\&.
-.PP
-The talloc_reparent() function returns the pointer that you pass it\&. It does not have any failure modes\&.
-.PP
-The difference between talloc_reparent() and talloc_steal() is that talloc_reparent() can specify which parent you wish to change\&. This is useful when a pointer has multiple parents via references\&.
-.SS "TYPE *talloc_move(const void *\fInew_ctx\fR, TYPE **\fIptr\fR);"
-.PP
-The talloc_move() function is a wrapper around talloc_steal() which zeros the source pointer after the move\&. This avoids a potential source of bugs where a programmer leaves a pointer in two structures, and uses the pointer from the old structure after it has been moved to a new one\&.
-The talloc_total_size() function returns the total size in bytes used by this pointer and all child pointers\&. Mostly useful for debugging\&.
-.PP
-Passing NULL is allowed, but it will only give a meaningful result if talloc_enable_leak_report() or talloc_enable_leak_report_full() has been called\&.
-The talloc_total_blocks() function returns the total memory block count used by this pointer and all child pointers\&. Mostly useful for debugging\&.
-.PP
-Passing NULL is allowed, but it will only give a meaningful result if talloc_enable_leak_report() or talloc_enable_leak_report_full() has been called\&.
-The talloc_report() function prints a summary report of all memory used by
-\fIptr\fR\&. One line of report is printed for each immediate child of ptr, showing the total memory and number of blocks used by that child\&.
-.PP
-You can pass NULL for the pointer, in which case a report is printed for the top level memory context, but only if talloc_enable_leak_report() or talloc_enable_leak_report_full() has been called\&.
-This provides a more detailed report than talloc_report()\&. It will recursively print the entire tree of memory referenced by the pointer\&. References in the tree are shown by giving the name of the pointer that is referenced\&.
-.PP
-You can pass NULL for the pointer, in which case a report is printed for the top level memory context, but only if talloc_enable_leak_report() or talloc_enable_leak_report_full() has been called\&.
-This provides a more flexible reports than talloc_report()\&. It will recursively call the callback for the entire tree of memory referenced by the pointer\&. References in the tree are passed with
-\fIis_ref = 1\fR
-and the pointer that is referenced\&.
-.PP
-You can pass NULL for the pointer, in which case a report is printed for the top level memory context, but only if talloc_enable_leak_report() or talloc_enable_leak_report_full() has been called\&.
-.PP
-The recursion is stopped when depth >= max_depth\&. max_depth = \-1 means only stop at leaf nodes\&.
-This provides a more flexible reports than talloc_report()\&. It will let you specify the depth and max_depth\&.
-.SS "void talloc_enable_leak_report(void);"
-.PP
-This enables calling of talloc_report(NULL, stderr) when the program exits\&. In Samba4 this is enabled by using the \-\-leak\-report command line option\&.
-.PP
-For it to be useful, this function must be called before any other talloc function as it establishes a "null context" that acts as the top of the tree\&. If you don\*(Aqt call this function first then passing NULL to talloc_report() or talloc_report_full() won\*(Aqt give you the full tree printout\&.
-.PP
-Here is a typical talloc report:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-talloc report on \*(Aqnull_context\*(Aq (total 267 bytes in 15 blocks)
-libcli/auth/spnego_parse\&.c:55 contains 31 bytes in 2 blocks
-libcli/auth/spnego_parse\&.c:55 contains 31 bytes in 2 blocks
-iconv(UTF8,CP850) contains 42 bytes in 2 blocks
-libcli/auth/spnego_parse\&.c:55 contains 31 bytes in 2 blocks
-iconv(CP850,UTF8) contains 42 bytes in 2 blocks
-iconv(UTF8,UTF\-16LE) contains 45 bytes in 2 blocks
-iconv(UTF\-16LE,UTF8) contains 45 bytes in 2 blocks
-
-.fi
-.if n \{\
-.RE
-.\}
-.SS "void talloc_enable_leak_report_full(void);"
-.PP
-This enables calling of talloc_report_full(NULL, stderr) when the program exits\&. In Samba4 this is enabled by using the \-\-leak\-report\-full command line option\&.
-.PP
-For it to be useful, this function must be called before any other talloc function as it establishes a "null context" that acts as the top of the tree\&. If you don\*(Aqt call this function first then passing NULL to talloc_report() or talloc_report_full() won\*(Aqt give you the full tree printout\&.
-.PP
-Here is a typical full report:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-full talloc report on \*(Aqroot\*(Aq (total 18 bytes in 8 blocks)
-The talloc_asprintf_append() function appends the given formatted string to the given string\&.
-.PP
-This function sets the name of the new pointer to the new string\&. This is equivalent to:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-talloc_set_name_const(ptr, ptr)
-.fi
-.if n \{\
-.RE
-.\}
-.SS "(type *)talloc_array(const void *ctx, type, unsigned int count);"
-.PP
-The talloc_array() macro is equivalent to:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-(type *)talloc_size(ctx, sizeof(type) * count);
-.fi
-.if n \{\
-.RE
-.\}
-.PP
-except that it provides integer overflow protection for the multiply, returning NULL if the multiply overflows\&.
-.SS "void *talloc_array_size(const void *ctx, size_t size, unsigned int count);"
-.PP
-The talloc_array_size() function is useful when the type is not known\&. It operates in the same way as talloc_array(), but takes a size instead of a type\&.
-.SS "(typeof(ptr)) talloc_array_ptrtype(const void *ctx, ptr, unsigned int count);"
-.PP
-The talloc_ptrtype() macro should be used when you have a pointer to an array and want to allocate memory of an array to point at with this pointer\&. When compiling with gcc >= 3 it is typesafe\&. Note this is a wrapper of talloc_array_size() and talloc_get_name() will return the current location in the source file\&. and not the type\&.
-This is a non\-macro version of talloc_realloc(), which is useful as libraries sometimes want a realloc function pointer\&. A realloc(3) implementation encapsulates the functionality of malloc(3), free(3) and realloc(3) in one call, which is why it is useful to be able to pass around a single function pointer\&.
-.SS "void *talloc_autofree_context(void);"
-.PP
-This is a handy utility function that returns a talloc context which will be automatically freed on program exit\&. This can be used to reduce the noise in memory leak reports\&.
-This function sets a logging function that talloc will use for warnings and errors\&. By default talloc will not print any warnings or errors\&.
-.SS "talloc_set_log_stderr(void);"
-.PP
-This sets the talloc log function to write log messages to stderr
-.SH "PERFORMANCE"
-.PP
-All the additional features of talloc(3) over malloc(3) do come at a price\&. We have a simple performance test in Samba4 that measures talloc() versus malloc() performance, and it seems that talloc() is about 10% slower than malloc() on my x86 Debian Linux box\&. For Samba, the great reduction in code complexity that we get by using talloc makes this worthwhile, especially as the total overhead of talloc/malloc in Samba is already quite small\&.
-The original Samba software and related utilities were created by Andrew Tridgell\&. Samba is now developed by the Samba Team as an Open Source project similar to the way the Linux kernel is developed\&.
-.SH "COPYRIGHT/LICENSE"
-.PP
-Copyright (C) Andrew Tridgell 2004
-.PP
-This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version\&.
-.PP
-This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE\&. See the GNU General Public License for more details\&.
-.PP
-You should have received a copy of the GNU General Public License along with this program; if not, see http://www\&.gnu\&.org/licenses/\&.
-talloc \- hierarchical reference counted memory pool system with destructors
-.SH "SYNOPSIS"
-.sp
-.nf
-#include <talloc\&.h>
-.fi
-.SH "DESCRIPTION"
-.PP
-If you are used to talloc from Samba3 then please read this carefully, as talloc has changed a lot\&.
-.PP
-The new talloc is a hierarchical, reference counted memory pool system with destructors\&. Quite a mouthful really, but not too bad once you get used to it\&.
-.PP
-Perhaps the biggest change from Samba3 is that there is no distinction between a "talloc context" and a "talloc pointer"\&. Any pointer returned from talloc() is itself a valid talloc context\&. This means you can do this:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
- struct foo *X = talloc(mem_ctx, struct foo);
- X\->name = talloc_strdup(X, "foo");
-
-.fi
-.if n \{\
-.RE
-.\}
-.PP
-and the pointer
-X\->name
-would be a "child" of the talloc context
-X
-which is itself a child of
-mem_ctx\&. So if you do
-talloc_free(mem_ctx)
-then it is all destroyed, whereas if you do
-talloc_free(X)
-then just
-X
-and
-X\->name
-are destroyed, and if you do
-talloc_free(X\->name)
-then just the name element of
-X
-is destroyed\&.
-.PP
-If you think about this, then what this effectively gives you is an n\-ary tree, where you can free any part of the tree with talloc_free()\&.
-.PP
-If you find this confusing, then I suggest you run the
-testsuite
-program to watch talloc in action\&. You may also like to add your own tests to
-testsuite\&.c
-to clarify how some particular situation is handled\&.
-.SH "TALLOC API"
-.PP
-The following is a complete guide to the talloc API\&. Read it all at least twice\&.
-.SS "(type *)talloc(const void *ctx, type);"
-.PP
-The talloc() macro is the core of the talloc library\&. It takes a memory
-\fIctx\fR
-and a
-\fItype\fR, and returns a pointer to a new area of memory of the given
-\fItype\fR\&.
-.PP
-The returned pointer is itself a talloc context, so you can use it as the
-\fIctx\fR
-argument to more calls to talloc() if you wish\&.
-.PP
-The returned pointer is a "child" of the supplied context\&. This means that if you talloc_free() the
-\fIctx\fR
-then the new child disappears as well\&. Alternatively you can free just the child\&.
-.PP
-The
-\fIctx\fR
-argument to talloc() can be NULL, in which case a new top level context is created\&.
-The function talloc_size() should be used when you don\*(Aqt have a convenient type to pass to talloc()\&. Unlike talloc(), it is not type safe (as it returns a void *), so you are on your own for type checking\&.
-The talloc_ptrtype() macro should be used when you have a pointer and want to allocate memory to point at with this pointer\&. When compiling with gcc >= 3 it is typesafe\&. Note this is a wrapper of talloc_size() and talloc_get_name() will return the current location in the source file\&. and not the type\&.
-.SS "int talloc_free(void *ptr);"
-.PP
-The talloc_free() function frees a piece of talloc memory, and all its children\&. You can call talloc_free() on any pointer returned by talloc()\&.
-.PP
-The return value of talloc_free() indicates success or failure, with 0 returned for success and \-1 for failure\&. The only possible failure condition is if
-\fIptr\fR
-had a destructor attached to it and the destructor returned \-1\&. See
-\(lqtalloc_set_destructor()\(rq
-for details on destructors\&.
-.PP
-If this pointer has an additional parent when talloc_free() is called then the memory is not actually released, but instead the most recently established parent is destroyed\&. See
-\(lqtalloc_reference()\(rq
-for details on establishing additional parents\&.
-.PP
-For more control on which parent is removed, see
-\(lqtalloc_unlink()\(rq\&.
-.PP
-talloc_free() operates recursively on its children\&.
-.PP
-From the 2\&.0 version of talloc, as a special case, talloc_free() is refused on pointers that have more than one parent, as talloc would have no way of knowing which parent should be removed\&. To free a pointer that has more than one parent please use talloc_unlink()\&.
-.PP
-To help you find problems in your code caused by this behaviour, if you do try and free a pointer with more than one parent then the talloc logging function will be called to give output like this:
-.PP
-.if n \{\
-.RS 4
-.\}
-.nf
- ERROR: talloc_free with references at some_dir/source/foo\&.c:123
- reference at some_dir/source/other\&.c:325
- reference at some_dir/source/third\&.c:121
-
-.fi
-.if n \{\
-.RE
-.\}
-.PP
-Please see the documentation for talloc_set_log_fn() and talloc_set_log_stderr() for more information on talloc logging functions\&.
-The return value of talloc_reference() is always the original pointer
-\fIptr\fR, unless talloc ran out of memory in creating the reference in which case it will return NULL (each additional reference consumes around 48 bytes of memory on intel x86 platforms)\&.
-.PP
-If
-\fIptr\fR
-is NULL, then the function is a no\-op, and simply returns NULL\&.
-.PP
-After creating a reference you can free it in one of the following ways:
-.PP
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-you can talloc_free() any parent of the original pointer\&. That will reduce the number of parents of this pointer by 1, and will cause this pointer to be freed if it runs out of parents\&.
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-you can talloc_free() the pointer itself if it has at maximum one parent\&. This behaviour has been changed since the release of version 2\&.0\&. Further informations in the description of "talloc_free"\&.
-The talloc_unlink() function removes a specific parent from
-\fIptr\fR\&. The
-\fIctx\fR
-passed must either be a context used in talloc_reference() with this pointer, or must be a direct parent of ptr\&.
-.PP
-Note that if the parent has already been removed using talloc_free() then this function will fail and will return \-1\&. Likewise, if
-\fIptr\fR
-is NULL, then the function will make no modifications and return \-1\&.
-.PP
-Usually you can just use talloc_free() instead of talloc_unlink(), but sometimes it is useful to have the additional control on which parent is removed\&.
-.SS "void talloc_set_destructor(const void *ptr, int (*destructor)(void *));"
-.PP
-The function talloc_set_destructor() sets the
-\fIdestructor\fR
-for the pointer
-\fIptr\fR\&. A
-\fIdestructor\fR
-is a function that is called when the memory used by a pointer is about to be released\&. The destructor receives
-\fIptr\fR
-as an argument, and should return 0 for success and \-1 for failure\&.
-.PP
-The
-\fIdestructor\fR
-can do anything it wants to, including freeing other pieces of memory\&. A common use for destructors is to clean up operating system resources (such as open file descriptors) contained in the structure the destructor is placed on\&.
-.PP
-You can only place one destructor on a pointer\&. If you need more than one destructor then you can create a zero\-length child of the pointer and place an additional destructor on that\&.
-.PP
-To remove a destructor call talloc_set_destructor() with NULL for the destructor\&.
-.PP
-If your destructor attempts to talloc_free() the pointer that it is the destructor for then talloc_free() will return \-1 and the free will be ignored\&. This would be a pointless operation anyway, as the destructor is only called when the memory is just about to go away\&.
-Each talloc pointer has a "name"\&. The name is used principally for debugging purposes, although it is also possible to set and get the name on a pointer in as a way of "marking" pointers in your code\&.
-.PP
-The main use for names on pointer is for "talloc reports"\&. See
-\(lqtalloc_report_depth_cb()\(rq,
-\(lqtalloc_report_depth_file()\(rq,
-\(lqtalloc_report()\(rq
-\(lqtalloc_report()\(rq
-and
-\(lqtalloc_report_full()\(rq
-for details\&. Also see
-\(lqtalloc_enable_leak_report()\(rq
-and
-\(lqtalloc_enable_leak_report_full()\(rq\&.
-.PP
-The talloc_set_name() function allocates memory as a child of the pointer\&. It is logically equivalent to:
-Note that multiple calls to talloc_set_name() will allocate more memory without releasing the name\&. All of the memory is released when the ptr is freed using talloc_free()\&.
-The function talloc_set_name_const() is just like talloc_set_name(), but it takes a string constant, and is much faster\&. It is extensively used by the "auto naming" macros, such as talloc_p()\&.
-.PP
-This function does not allocate any memory\&. It just copies the supplied pointer into the internal representation of the talloc ptr\&. This means you must not pass a
-This function creates a zero length named talloc context as a top level context\&. It is equivalent to:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-talloc_named(NULL, 0, fmt, \&.\&.\&.);
-.fi
-.if n \{\
-.RE
-.\}
-.SS "void *talloc_new(void *\fIctx\fR);"
-.PP
-This is a utility macro that creates a new memory context hanging off an existing context, automatically naming it "talloc_new: __location__" where __location__ is the source line it is called from\&. It is particularly useful for creating a new temporary working context\&.
-talloc_realloc() returns the new pointer, or NULL on failure\&. The call will fail either due to a lack of memory, or because the pointer has more than one parent (see
-the talloc_realloc_size() function is useful when the type is not known so the type\-safe talloc_realloc() cannot be used\&.
-.SS "TYPE *talloc_steal(const void *\fInew_ctx\fR, const TYPE *\fIptr\fR);"
-.PP
-The talloc_steal() function changes the parent context of a talloc pointer\&. It is typically used when the context that the pointer is currently a child of is going to be freed and you wish to keep the memory for a longer time\&.
-.PP
-The talloc_steal() function returns the pointer that you pass it\&. It does not have any failure modes\&.
-.PP
-It is possible to produce loops in the parent/child relationship if you are not careful with talloc_steal()\&. No guarantees are provided as to your sanity or the safety of your data if you do this\&.
-.PP
-Note that if you try and call talloc_steal() on a pointer that has more than one parent then the result is ambiguous\&. Talloc will choose to remove the parent that is currently indicated by talloc_parent() and replace it with the chosen parent\&. You will also get a message like this via the talloc logging functions:
-.PP
-.if n \{\
-.RS 4
-.\}
-.nf
- WARNING: talloc_steal with references at some_dir/source/foo\&.c:123
- reference at some_dir/source/other\&.c:325
- reference at some_dir/source/third\&.c:121
-
-.fi
-.if n \{\
-.RE
-.\}
-.PP
-To unambiguously change the parent of a pointer please see the function
-\(lqtalloc_reparent()\(rq\&. See the talloc_set_log_fn() documentation for more information on talloc logging\&.
-The talloc_reparent() function changes the parent context of a talloc pointer\&. It is typically used when the context that the pointer is currently a child of is going to be freed and you wish to keep the memory for a longer time\&.
-.PP
-The talloc_reparent() function returns the pointer that you pass it\&. It does not have any failure modes\&.
-.PP
-The difference between talloc_reparent() and talloc_steal() is that talloc_reparent() can specify which parent you wish to change\&. This is useful when a pointer has multiple parents via references\&.
-.SS "TYPE *talloc_move(const void *\fInew_ctx\fR, TYPE **\fIptr\fR);"
-.PP
-The talloc_move() function is a wrapper around talloc_steal() which zeros the source pointer after the move\&. This avoids a potential source of bugs where a programmer leaves a pointer in two structures, and uses the pointer from the old structure after it has been moved to a new one\&.
-The talloc_total_size() function returns the total size in bytes used by this pointer and all child pointers\&. Mostly useful for debugging\&.
-.PP
-Passing NULL is allowed, but it will only give a meaningful result if talloc_enable_leak_report() or talloc_enable_leak_report_full() has been called\&.
-The talloc_total_blocks() function returns the total memory block count used by this pointer and all child pointers\&. Mostly useful for debugging\&.
-.PP
-Passing NULL is allowed, but it will only give a meaningful result if talloc_enable_leak_report() or talloc_enable_leak_report_full() has been called\&.
-The talloc_report() function prints a summary report of all memory used by
-\fIptr\fR\&. One line of report is printed for each immediate child of ptr, showing the total memory and number of blocks used by that child\&.
-.PP
-You can pass NULL for the pointer, in which case a report is printed for the top level memory context, but only if talloc_enable_leak_report() or talloc_enable_leak_report_full() has been called\&.
-This provides a more detailed report than talloc_report()\&. It will recursively print the entire tree of memory referenced by the pointer\&. References in the tree are shown by giving the name of the pointer that is referenced\&.
-.PP
-You can pass NULL for the pointer, in which case a report is printed for the top level memory context, but only if talloc_enable_leak_report() or talloc_enable_leak_report_full() has been called\&.
-This provides a more flexible reports than talloc_report()\&. It will recursively call the callback for the entire tree of memory referenced by the pointer\&. References in the tree are passed with
-\fIis_ref = 1\fR
-and the pointer that is referenced\&.
-.PP
-You can pass NULL for the pointer, in which case a report is printed for the top level memory context, but only if talloc_enable_leak_report() or talloc_enable_leak_report_full() has been called\&.
-.PP
-The recursion is stopped when depth >= max_depth\&. max_depth = \-1 means only stop at leaf nodes\&.
-This provides a more flexible reports than talloc_report()\&. It will let you specify the depth and max_depth\&.
-.SS "void talloc_enable_leak_report(void);"
-.PP
-This enables calling of talloc_report(NULL, stderr) when the program exits\&. In Samba4 this is enabled by using the \-\-leak\-report command line option\&.
-.PP
-For it to be useful, this function must be called before any other talloc function as it establishes a "null context" that acts as the top of the tree\&. If you don\*(Aqt call this function first then passing NULL to talloc_report() or talloc_report_full() won\*(Aqt give you the full tree printout\&.
-.PP
-Here is a typical talloc report:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-talloc report on \*(Aqnull_context\*(Aq (total 267 bytes in 15 blocks)
-libcli/auth/spnego_parse\&.c:55 contains 31 bytes in 2 blocks
-libcli/auth/spnego_parse\&.c:55 contains 31 bytes in 2 blocks
-iconv(UTF8,CP850) contains 42 bytes in 2 blocks
-libcli/auth/spnego_parse\&.c:55 contains 31 bytes in 2 blocks
-iconv(CP850,UTF8) contains 42 bytes in 2 blocks
-iconv(UTF8,UTF\-16LE) contains 45 bytes in 2 blocks
-iconv(UTF\-16LE,UTF8) contains 45 bytes in 2 blocks
-
-.fi
-.if n \{\
-.RE
-.\}
-.SS "void talloc_enable_leak_report_full(void);"
-.PP
-This enables calling of talloc_report_full(NULL, stderr) when the program exits\&. In Samba4 this is enabled by using the \-\-leak\-report\-full command line option\&.
-.PP
-For it to be useful, this function must be called before any other talloc function as it establishes a "null context" that acts as the top of the tree\&. If you don\*(Aqt call this function first then passing NULL to talloc_report() or talloc_report_full() won\*(Aqt give you the full tree printout\&.
-.PP
-Here is a typical full report:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-full talloc report on \*(Aqroot\*(Aq (total 18 bytes in 8 blocks)
-The talloc_asprintf_append() function appends the given formatted string to the given string\&.
-.PP
-This function sets the name of the new pointer to the new string\&. This is equivalent to:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-talloc_set_name_const(ptr, ptr)
-.fi
-.if n \{\
-.RE
-.\}
-.SS "(type *)talloc_array(const void *ctx, type, unsigned int count);"
-.PP
-The talloc_array() macro is equivalent to:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-(type *)talloc_size(ctx, sizeof(type) * count);
-.fi
-.if n \{\
-.RE
-.\}
-.PP
-except that it provides integer overflow protection for the multiply, returning NULL if the multiply overflows\&.
-.SS "void *talloc_array_size(const void *ctx, size_t size, unsigned int count);"
-.PP
-The talloc_array_size() function is useful when the type is not known\&. It operates in the same way as talloc_array(), but takes a size instead of a type\&.
-.SS "(typeof(ptr)) talloc_array_ptrtype(const void *ctx, ptr, unsigned int count);"
-.PP
-The talloc_ptrtype() macro should be used when you have a pointer to an array and want to allocate memory of an array to point at with this pointer\&. When compiling with gcc >= 3 it is typesafe\&. Note this is a wrapper of talloc_array_size() and talloc_get_name() will return the current location in the source file\&. and not the type\&.
-This is a non\-macro version of talloc_realloc(), which is useful as libraries sometimes want a realloc function pointer\&. A realloc(3) implementation encapsulates the functionality of malloc(3), free(3) and realloc(3) in one call, which is why it is useful to be able to pass around a single function pointer\&.
-.SS "void *talloc_autofree_context(void);"
-.PP
-This is a handy utility function that returns a talloc context which will be automatically freed on program exit\&. This can be used to reduce the noise in memory leak reports\&.
-This function sets a logging function that talloc will use for warnings and errors\&. By default talloc will not print any warnings or errors\&.
-.SS "talloc_set_log_stderr(void);"
-.PP
-This sets the talloc log function to write log messages to stderr
-.SH "PERFORMANCE"
-.PP
-All the additional features of talloc(3) over malloc(3) do come at a price\&. We have a simple performance test in Samba4 that measures talloc() versus malloc() performance, and it seems that talloc() is about 10% slower than malloc() on my x86 Debian Linux box\&. For Samba, the great reduction in code complexity that we get by using talloc makes this worthwhile, especially as the total overhead of talloc/malloc in Samba is already quite small\&.
-The original Samba software and related utilities were created by Andrew Tridgell\&. Samba is now developed by the Samba Team as an Open Source project similar to the way the Linux kernel is developed\&.
-.SH "COPYRIGHT/LICENSE"
-.PP
-Copyright (C) Andrew Tridgell 2004
-.PP
-This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version\&.
-.PP
-This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE\&. See the GNU General Public License for more details\&.
-.PP
-You should have received a copy of the GNU General Public License along with this program; if not, see http://www\&.gnu\&.org/licenses/\&.