aboutsummaryrefslogtreecommitdiff
path: root/nscd/nscd.h
diff options
context:
space:
mode:
Diffstat (limited to 'nscd/nscd.h')
-rw-r--r--nscd/nscd.h240
1 files changed, 156 insertions, 84 deletions
diff --git a/nscd/nscd.h b/nscd/nscd.h
index 4835542..bc8150a 100644
--- a/nscd/nscd.h
+++ b/nscd/nscd.h
@@ -18,18 +18,37 @@
Boston, MA 02111-1307, USA. */
#ifndef _NSCD_H
-#define _NSCD_H 1
+#define _NSCD_H 1
+
+#include <pthread.h>
+#include <time.h>
+#include <sys/uio.h>
-#include <grp.h>
-#include <pwd.h>
/* Version number of the daemon interface */
-#define NSCD_VERSION 1
+#define NSCD_VERSION 2
+
+/* Path of the file where the PID of the running system is stored. */
+#define _PATH_NSCDPID "/var/run/nscd.pid"
+
+/* Path for the Unix domain socket. */
+#define _PATH_NSCDSOCKET "/var/run/.nscd_socket"
+
+/* Path for the configuration file. */
+#define _PATH_NSCDCONF "/etc/nscd.conf"
+
-/* How many threads do we spawn maximal ? */
-#define MAX_NUM_CONNECTIONS 16
+/* Handle databases. */
+typedef enum
+{
+ pwddb,
+ grpdb,
+ hstdb,
+ lastdb
+} dbtype;
-/* Services provided */
+
+/* Available services. */
typedef enum
{
GETPWBYNAME,
@@ -37,22 +56,67 @@ typedef enum
GETGRBYNAME,
GETGRBYGID,
GETHOSTBYNAME,
+ GETHOSTBYNAMEv6,
GETHOSTBYADDR,
- SHUTDOWN, /* Shut the server down */
- GETSTAT /* Get the server statistic */
+ GETHOSTBYADDRv6,
+ LASTDBREQ = GETHOSTBYADDRv6,
+ SHUTDOWN, /* Shut the server down. */
+ GETSTAT, /* Get the server statistic. */
+ LASTREQ,
} request_type;
+
+/* Structure for one hash table entry. */
+struct hashentry
+{
+ request_type type; /* Which type of dataset. */
+ size_t len; /* Length of key. */
+ void *key; /* Pointer to key. */
+ struct hashentry *next; /* Next entry in this hash bucket list. */
+ time_t timeout; /* Time when this entry becomes invalid. */
+ ssize_t total; /* Number of bytes in PACKET. */
+ const void *packet; /* Records for the result. */
+ void *data; /* The malloc()ed respond record. */
+ int last; /* Nonzero if DATA should be free()d. */
+ struct hashentry *dellist; /* Next record to be deleted. */
+};
+
+/* Structure describing one database. */
+struct database
+{
+ pthread_rwlock_t lock;
+
+ int enabled;
+ int check_file;
+ const char *filename;
+ time_t file_mtime;
+ size_t module;
+
+ const struct iovec *disabled_iov;
+
+ unsigned long int postimeout;
+ unsigned long int negtimeout;
+
+ unsigned long int poshit;
+ unsigned long int neghit;
+ unsigned long int posmiss;
+ unsigned long int negmiss;
+
+ struct hashentry **array;
+};
+
+
/* Header common to all requests */
typedef struct
{
- /* Version number of the daemon interface */
- int version;
- /* Service requested */
- request_type type;
- /* key len */
- ssize_t key_len;
+ int version; /* Version number of the daemon interface. */
+ request_type type; /* Service requested. */
+ ssize_t key_len; /* Key length. */
} request_header;
+
+/* Structure sent in reply to password query. Note that this struct is
+ sent also if the service is disabled or there is no record found. */
typedef struct
{
int version;
@@ -66,6 +130,9 @@ typedef struct
ssize_t pw_shell_len;
} pw_response_header;
+
+/* Structure sent in reply to group query. Note that this struct is
+ sent also if the service is disabled or there is no record found. */
typedef struct
{
int version;
@@ -73,77 +140,82 @@ typedef struct
ssize_t gr_name_len;
ssize_t gr_passwd_len;
gid_t gr_gid;
- ssize_t gr_mem_len;
+ ssize_t gr_mem_cnt;
} gr_response_header;
-typedef struct
-{
- int debug_level;
- int pw_enabled;
- unsigned long pw_poshit;
- unsigned long pw_posmiss;
- unsigned long pw_neghit;
- unsigned long pw_negmiss;
- unsigned long pw_size;
- unsigned long pw_posttl;
- unsigned long pw_negttl;
- int gr_enabled;
- unsigned long gr_poshit;
- unsigned long gr_posmiss;
- unsigned long gr_neghit;
- unsigned long gr_negmiss;
- unsigned long gr_size;
- unsigned long gr_posttl;
- unsigned long gr_negttl;
-} stat_response_header;
-
-#define _PATH_NSCDPID "/var/run/nscd.pid"
-#define _PATH_NSCDSOCKET "/var/run/.nscd_socket"
-#define _PATH_NSCDCONF "/etc/nscd.conf"
+/* Structure sent in reply to host query. Note that this struct is
+ sent also if the service is disabled or there is no record found. */
typedef struct
{
- char *key;
- int conn;
-} param_t;
-
-extern int do_shutdown; /* 1 if we should quit the programm. */
-extern int disabled_passwd;
-extern int disabled_group;
-
-extern int nscd_parse_file __P ((const char *fname));
-extern int set_logfile __P ((const char *logfile));
-extern void set_pos_pwd_ttl __P ((unsigned long));
-extern void set_neg_pwd_ttl __P ((unsigned long));
-extern void set_pos_grp_ttl __P ((unsigned long));
-extern void set_neg_grp_ttl __P ((unsigned long));
-extern void set_pwd_modulo __P ((unsigned long));
-extern void set_grp_modulo __P ((unsigned long));
-
-extern void init_sockets __P ((void));
-extern void close_socket __P ((int conn));
-extern void close_sockets __P ((void));
-extern void get_request __P ((int *conn, request_header *req, char **key));
-extern void pw_send_answer __P ((int conn, struct passwd *pwd));
-extern void pw_send_disabled __P ((int conn));
-extern void gr_send_answer __P ((int conn, struct group *grp));
-extern void gr_send_disabled __P ((int conn));
-
-extern int cache_pwdinit __P ((void));
-extern void *cache_getpwnam __P ((void *param));
-extern void *cache_getpwuid __P ((void *param));
-extern void *cache_pw_disabled __P ((void *param));
-
-extern int cache_grpinit __P ((void));
-extern void *cache_getgrnam __P ((void *param));
-extern void *cache_getgrgid __P ((void *param));
-extern void *cache_gr_disabled __P ((void *param));
-
-extern int __nscd_open_socket __P ((void));
-
-extern void get_pw_stat __P ((stat_response_header *resp));
-extern void get_gr_stat __P ((stat_response_header *resp));
-extern void print_stat __P ((void));
-extern void stat_send __P ((int conn, stat_response_header *resp));
-
-#endif
+ int version;
+ int found;
+ ssize_t h_name_len;
+ ssize_t h_aliases_cnt;
+ int h_addrtype;
+ int h_length;
+ ssize_t h_addr_list_cnt;
+ int error;
+} hst_response_header;
+
+/* Global variables. */
+extern const char *dbnames[lastdb];
+extern const char *serv2str[LASTREQ];
+
+extern const struct iovec pwd_iov_disabled;
+extern const struct iovec grp_iov_disabled;
+extern const struct iovec hst_iov_disabled;
+
+/* Number of threads to run. */
+extern int nthreads;
+
+
+/* Prototypes for global functions. */
+
+/* nscd.c */
+extern void termination_handler (int signum);
+extern int nscd_open_socket (void);
+
+/* connections.c */
+extern void nscd_init (const char *conffile);
+extern void close_sockets (void);
+extern void start_threads (void);
+
+/* nscd_conf.c */
+extern int nscd_parse_file (const char *fname, struct database dbs[lastdb]);
+
+/* nscd_stat.c */
+extern void send_stats (int fd, struct database dbs[lastdb]);
+extern int receive_print_stats (void);
+
+/* cache.c */
+extern struct hashentry *cache_search (int type, void *key, size_t len,
+ struct database *table);
+extern void cache_add (int type, void *key, size_t len,
+ const void *packet, size_t iovtotal, void *data,
+ int last, time_t t, struct database *table);
+extern void prune_cache (struct database *table, time_t now);
+
+/* pwdcache.c */
+extern void addpwbyname (struct database *db, int fd, request_header *req,
+ void *key);
+extern void addpwbyuid (struct database *db, int fd, request_header *req,
+ void *key);
+
+/* grpcache.c */
+extern void addgrbyname (struct database *db, int fd, request_header *req,
+ void *key);
+extern void addgrbygid (struct database *db, int fd, request_header *req,
+ void *key);
+
+/* hstcache.c */
+extern void addhstbyname (struct database *db, int fd, request_header *req,
+ void *key);
+extern void addhstbyaddr (struct database *db, int fd, request_header *req,
+ void *key);
+extern void addhstbynamev6 (struct database *db, int fd, request_header *req,
+ void *key);
+extern void addhstbyaddrv6 (struct database *db, int fd, request_header *req,
+ void *key);
+
+#endif /* nscd.h */