1 /* Common database open/close routines for nss_db.
2    Copyright (C) 1999-2022 Free Software Foundation, Inc.
3    This file is part of the GNU C Library.
4 
5    The GNU C Library is free software; you can redistribute it and/or
6    modify it under the terms of the GNU Lesser General Public
7    License as published by the Free Software Foundation; either
8    version 2.1 of the License, or (at your option) any later version.
9 
10    The GNU C Library is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13    Lesser General Public License for more details.
14 
15    You should have received a copy of the GNU Lesser General Public
16    License along with the GNU C Library; if not, see
17    <https://www.gnu.org/licenses/>.  */
18 
19 #ifndef _NSS_DB_H
20 #define _NSS_DB_H	1
21 
22 #include <nss.h>
23 #include <stdint.h>
24 #include <libc-lock.h>
25 
26 NSS_DECLARE_MODULE_FUNCTIONS (db)
27 
28 /* String table index type.  */
29 typedef uint32_t stridx_t;
30 
31 /* Database file header.  */
32 struct nss_db_header
33 {
34   uint32_t magic;
35 #define NSS_DB_MAGIC 0xdd110601
36   uint32_t ndbs;
37   uint64_t valstroffset;
38   uint64_t valstrlen;
39   uint64_t allocate;
40   struct
41   {
42     char id;
43     char pad[sizeof (uint32_t) - 1];
44     uint32_t hashsize;
45     uint64_t hashoffset;
46     uint64_t keyidxoffset;
47     uint64_t keystroffset;
48   } dbs[0];
49 };
50 
51 
52 /* Information about mapped database.  */
53 struct nss_db_map
54 {
55   struct nss_db_header *header;
56   size_t len;
57 };
58 
59 
60 /* Open the database stored in FILE.  If succesful, store the database
61    handle in *MAPPINGP or a file descriptor for the file in *FDP and
62    return NSS_STATUS_SUCCESS.  On failure, return the appropriate
63    lookup status.  */
64 enum nss_status internal_setent (const char *file,
65 				 struct nss_db_map *mappingp);
66 
67 /* Close the database FD.  */
68 extern void internal_endent (struct nss_db_map *mapping);
69 
70 #endif	/* nss_db.h */
71