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