]> git.ipfire.org Git - thirdparty/glibc.git/blame - nscd/nscd.h
2.5-18.1
[thirdparty/glibc.git] / nscd / nscd.h
CommitLineData
0ecb606c 1/* Copyright (c) 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006
a95a08b4 2 Free Software Foundation, Inc.
d67281a7 3 This file is part of the GNU C Library.
a1c542bf 4 Contributed by Thorsten Kukuk <kukuk@suse.de>, 1998.
d67281a7
UD
5
6 The GNU C Library is free software; you can redistribute it and/or
41bdb6e2
AJ
7 modify it under the terms of the GNU Lesser General Public
8 License as published by the Free Software Foundation; either
9 version 2.1 of the License, or (at your option) any later version.
d67281a7
UD
10
11 The GNU C Library is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
41bdb6e2 14 Lesser General Public License for more details.
d67281a7 15
41bdb6e2
AJ
16 You should have received a copy of the GNU Lesser General Public
17 License along with the GNU C Library; if not, write to the Free
18 Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
19 02111-1307 USA. */
d67281a7
UD
20
21#ifndef _NSCD_H
67479a70
UD
22#define _NSCD_H 1
23
24#include <pthread.h>
a95a08b4 25#include <stdbool.h>
67479a70
UD
26#include <time.h>
27#include <sys/uio.h>
d67281a7 28
4f6bfa80
RM
29/* The declarations for the request and response types are in the file
30 "nscd-client.h", which should contain everything needed by client
31 functions. */
32#include "nscd-client.h"
67479a70 33
d67281a7 34
67479a70
UD
35/* Handle databases. */
36typedef enum
37{
38 pwddb,
39 grpdb,
40 hstdb,
41 lastdb
42} dbtype;
d67281a7 43
67479a70 44
a95a08b4
UD
45/* Default limit on the number of times a value gets reloaded without
46 being used in the meantime. NSCD does not throw a value out as
47 soon as it times out. It tries to reload the value from the
48 server. Only if the value has not been used for so many rounds it
49 is removed. */
50#define DEFAULT_RELOAD_LIMIT 5
51
52
4401d759
UD
53/* Time before restarting the process in paranoia mode. */
54#define RESTART_INTERVAL (60 * 60)
55
56
a95a08b4
UD
57/* Structure describing dynamic part of one database. */
58struct database_dyn
67479a70
UD
59{
60 pthread_rwlock_t lock;
0ecb606c 61 pthread_mutex_t prunelock;
67479a70
UD
62
63 int enabled;
64 int check_file;
a95a08b4 65 int persistent;
c207f23b 66 int shared;
0ecb606c
JJ
67 int propagate;
68 const char filename[12];
a95a08b4 69 const char *db_filename;
67479a70 70 time_t file_mtime;
a95a08b4 71 size_t suggested_module;
0ecb606c 72 size_t max_db_size;
67479a70 73
a95a08b4
UD
74 unsigned long int postimeout; /* In seconds. */
75 unsigned long int negtimeout; /* In seconds. */
67479a70 76
a95a08b4
UD
77 int wr_fd; /* Writable file descriptor. */
78 int ro_fd; /* Unwritable file descriptor. */
67479a70 79
a95a08b4 80 const struct iovec *disabled_iov;
67479a70 81
a95a08b4
UD
82 struct database_pers_head *head;
83 char *data;
84 size_t memsize;
85 pthread_mutex_t memlock;
86 bool mmap_used;
87 bool last_alloc_failed;
88};
c86e6aec 89
c86e6aec 90
a95a08b4 91/* Paths of the file for the persistent storage. */
457962e5
UD
92#define _PATH_NSCD_PASSWD_DB "/var/db/nscd/passwd"
93#define _PATH_NSCD_GROUP_DB "/var/db/nscd/group"
94#define _PATH_NSCD_HOSTS_DB "/var/db/nscd/hosts"
95
96/* Path used when not using persistent storage. */
97#define _PATH_NSCD_XYZ_DB_TMP "/var/run/nscd/dbXXXXXX"
67479a70 98
0ecb606c
JJ
99/* Maximum alignment requirement we will encounter. */
100#define BLOCK_ALIGN_LOG 3
101#define BLOCK_ALIGN (1 << BLOCK_ALIGN_LOG)
102#define BLOCK_ALIGN_M1 (BLOCK_ALIGN - 1)
103
104/* Default value for the maximum size of the database files. */
105#define DEFAULT_MAX_DB_SIZE (32 * 1024 * 1024)
106
107/* Number of bytes of data we initially reserve for each hash table bucket. */
108#define DEFAULT_DATASIZE_PER_BUCKET 1024
109
67479a70 110
67479a70 111/* Global variables. */
a95a08b4 112extern struct database_dyn dbs[lastdb];
67479a70
UD
113extern const char *dbnames[lastdb];
114extern const char *serv2str[LASTREQ];
115
116extern const struct iovec pwd_iov_disabled;
117extern const struct iovec grp_iov_disabled;
118extern const struct iovec hst_iov_disabled;
119
a95a08b4 120
27e82856 121/* Initial number of threads to run. */
67479a70 122extern int nthreads;
27e82856
UD
123/* Maximum number of threads to use. */
124extern int max_nthreads;
67479a70 125
a12ce44f 126/* User name to run server processes as. */
adcf0e4a
UD
127extern const char *server_user;
128
a12ce44f
UD
129/* Name and UID of user who is allowed to request statistics. */
130extern const char *stat_user;
131extern uid_t stat_uid;
132
c86e6aec
UD
133/* Time the server was started. */
134extern time_t start_time;
135
a16e3585
UD
136/* Number of times clients had to wait. */
137extern unsigned long int client_queued;
138
a95a08b4
UD
139/* Maximum needed alignment. */
140extern const size_t block_align;
141
142/* Number of times a value is reloaded without being used. UINT_MAX
143 means unlimited. */
144extern unsigned int reload_count;
145
3418007e
UD
146/* Pagesize minus one. */
147extern uintptr_t pagesize_m1;
148
4401d759
UD
149/* Nonzero if paranoia mode is enabled. */
150extern int paranoia;
151/* Time after which the process restarts. */
152extern time_t restart_time;
153/* How much time between restarts. */
154extern time_t restart_interval;
155/* Old current working directory. */
156extern const char *oldcwd;
157/* Old user and group ID. */
158extern uid_t old_uid;
159extern gid_t old_gid;
160
161
67479a70
UD
162/* Prototypes for global functions. */
163
164/* nscd.c */
59553897 165extern void termination_handler (int signum) __attribute__ ((__noreturn__));
67479a70
UD
166extern int nscd_open_socket (void);
167
168/* connections.c */
a12ce44f 169extern void nscd_init (void);
67479a70 170extern void close_sockets (void);
8f11d6f9 171extern void start_threads (void) __attribute__ ((__noreturn__));
67479a70
UD
172
173/* nscd_conf.c */
a95a08b4
UD
174extern int nscd_parse_file (const char *fname,
175 struct database_dyn dbs[lastdb]);
67479a70
UD
176
177/* nscd_stat.c */
a95a08b4 178extern void send_stats (int fd, struct database_dyn dbs[lastdb]);
59553897 179extern int receive_print_stats (void) __attribute__ ((__noreturn__));
67479a70
UD
180
181/* cache.c */
a95a08b4
UD
182extern struct datahead *cache_search (request_type, void *key, size_t len,
183 struct database_dyn *table,
184 uid_t owner);
185extern int cache_add (int type, const void *key, size_t len,
186 struct datahead *packet, bool first,
187 struct database_dyn *table, uid_t owner);
0ecb606c 188extern void prune_cache (struct database_dyn *table, time_t now, int fd);
67479a70
UD
189
190/* pwdcache.c */
a95a08b4 191extern void addpwbyname (struct database_dyn *db, int fd, request_header *req,
a1c542bf 192 void *key, uid_t uid);
a95a08b4 193extern void addpwbyuid (struct database_dyn *db, int fd, request_header *req,
a1c542bf 194 void *key, uid_t uid);
a95a08b4
UD
195extern void readdpwbyname (struct database_dyn *db, struct hashentry *he,
196 struct datahead *dh);
197extern void readdpwbyuid (struct database_dyn *db, struct hashentry *he,
198 struct datahead *dh);
67479a70
UD
199
200/* grpcache.c */
a95a08b4 201extern void addgrbyname (struct database_dyn *db, int fd, request_header *req,
a1c542bf 202 void *key, uid_t uid);
a95a08b4 203extern void addgrbygid (struct database_dyn *db, int fd, request_header *req,
a1c542bf 204 void *key, uid_t uid);
a95a08b4
UD
205extern void readdgrbyname (struct database_dyn *db, struct hashentry *he,
206 struct datahead *dh);
207extern void readdgrbygid (struct database_dyn *db, struct hashentry *he,
208 struct datahead *dh);
67479a70
UD
209
210/* hstcache.c */
a95a08b4 211extern void addhstbyname (struct database_dyn *db, int fd, request_header *req,
a1c542bf 212 void *key, uid_t uid);
a95a08b4 213extern void addhstbyaddr (struct database_dyn *db, int fd, request_header *req,
a1c542bf 214 void *key, uid_t uid);
a95a08b4
UD
215extern void addhstbynamev6 (struct database_dyn *db, int fd,
216 request_header *req, void *key, uid_t uid);
217extern void addhstbyaddrv6 (struct database_dyn *db, int fd,
218 request_header *req, void *key, uid_t uid);
219extern void readdhstbyname (struct database_dyn *db, struct hashentry *he,
220 struct datahead *dh);
221extern void readdhstbyaddr (struct database_dyn *db, struct hashentry *he,
222 struct datahead *dh);
223extern void readdhstbynamev6 (struct database_dyn *db, struct hashentry *he,
224 struct datahead *dh);
225extern void readdhstbyaddrv6 (struct database_dyn *db, struct hashentry *he,
226 struct datahead *dh);
227
d19687d6
UD
228/* aicache.c */
229extern void addhstai (struct database_dyn *db, int fd, request_header *req,
230 void *key, uid_t uid);
231extern void readdhstai (struct database_dyn *db, struct hashentry *he,
232 struct datahead *dh);
a95a08b4 233
26235c7c
UD
234
235/* initgrcache.c */
236extern void addinitgroups (struct database_dyn *db, int fd,
237 request_header *req, void *key, uid_t uid);
238extern void readdinitgroups (struct database_dyn *db, struct hashentry *he,
239 struct datahead *dh);
240
a95a08b4
UD
241/* mem.c */
242extern void *mempool_alloc (struct database_dyn *db, size_t len);
243extern void gc (struct database_dyn *db);
4f6bfa80 244
081fc592
UD
245
246/* nscd_setup_thread.c */
247extern void setup_thread (struct database_dyn *db);
248
0ecb606c
JJ
249
250/* Special version of TEMP_FAILURE_RETRY for functions returning error
251 values. */
252#define TEMP_FAILURE_RETRY_VAL(expression) \
253 (__extension__ \
254 ({ long int __result; \
255 do __result = (long int) (expression); \
256 while (__result == EINTR); \
257 __result; }))
258
67479a70 259#endif /* nscd.h */