1 #ifndef __NSS_PGSQL_H_INCLUDED__
2 #  define __NSS_PGSQL_H_INCLUDED__
3 
4 #  ifdef HAVE_CONFIG_H
5 #    include "config.h"
6 #  endif
7 
8 #  ifdef HAVE_UNISTD_H
9 #    include <unistd.h>
10 #  endif
11 
12 #  ifdef HAVE_NSS_H
13 #    include <nss.h>
14 #  endif
15 
16 #  include <pwd.h>
17 #  include <grp.h>
18 #ifdef HAVE_SHADOW_H
19 #  include <shadow.h>
20 #endif
21 #  include <sys/types.h>
22 
23 #ifndef HAVE_SHADOW_H
24 /* Structure of the password file.  */
25 struct spwd
26   {
27     char *sp_namp;		/* Login name.  */
28     char *sp_pwdp;		/* Encrypted password.  */
29     long int sp_lstchg;		/* Date of last change.  */
30     long int sp_min;		/* Minimum number of days between changes.  */
31     long int sp_max;		/* Maximum number of days between changes.  */
32     long int sp_warn;		/* Number of days to warn user to change
33 				   the password.  */
34     long int sp_inact;		/* Number of days the account may be
35 				   inactive.  */
36     long int sp_expire;		/* Number of days since 1970-01-01 until
37 				   account expires.  */
38     unsigned long int sp_flag;	/* Reserved.  */
39   };
40 #endif
41 
42 #define CFGFILE SYSCONFDIR"/nss-pgsql.conf"
43 #define CFGROOTFILE SYSCONFDIR"/nss-pgsql-root.conf"
44 
45 /* define backend connection types */
46 #define CONNECTION_SHADOW    's'
47 #define CONNECTION_USERGROUP 'n'
48 
49 int readconfig(char type, char* configfile);
50 void cleanup(void);
51 char *getcfg(const char *key);
52 
53 int backend_isopen(char type);
54 int backend_open(char type);
55 void backend_close(char type);
56 enum nss_status getent_prepare(const char *what);
57 void getent_close(char type);
58 
59 enum nss_status backend_getpwent(struct passwd *result,
60 											char *buffer,
61 											size_t buflen,
62 											int *errnop);
63 enum nss_status backend_getgrent(struct group *result,
64 											char *buffer,
65 											size_t buflen,
66 											int *errnop);
67 enum nss_status backend_getpwuid(uid_t uid,
68 											struct passwd *result,
69 											char *buffer,
70 											size_t buflen,
71 											int *errnop);
72 enum nss_status backend_getgrgid(gid_t gid,
73 											struct group *result,
74 											char *buffer,
75 											size_t buflen,
76 											int *errnop);
77 enum nss_status backend_getgrnam(const char *name,
78 											struct group *result,
79 											char *buffer,
80 											size_t buflen,
81 											int *errnop);
82 enum nss_status backend_getpwnam(const char *name,
83 											struct passwd *result,
84 											char *buffer,
85 											size_t buflen,
86 											int *errnop);
87 size_t backend_initgroups_dyn(const char *user,
88 										gid_t group,
89 										long int *start,
90 										long int *size,
91 										gid_t **groupsp,
92 										long int limit,
93 										int *errnop);
94 
95 enum nss_status backend_getspent(struct spwd *result,
96 											char *buffer,
97 											size_t buflen,
98 											int *errnop);
99 
100 enum nss_status backend_getspnam(const char *name,
101 											struct spwd *result,
102 											char *buffer,
103 											size_t buflen,
104 											int *errnop);
105 
106 void print_err(const char *msg, ...);
107 void print_msg(const char *msg, ...);
108 
109 #define _C_  ,    /// Debug , to simulate vararg macros
110 #  ifdef DEBUG
111 #    define DebugPrint(x) print_msg(x)
112 #  else
113 #    define DebugPrint(x)
114 #  endif
115 
116 #endif
117