1/*
2   nss sample code for extended winbindd functionality
3
4   Copyright (C) Andrew Tridgell (tridge@samba.org)
5   Copyright (C) Volker Lendecke (vl@samba.org)
6
7   you are free to use this code in any way you see fit, including
8   without restriction, using this code in your own products. You do
9   not need to give any attribution.
10*/
11
12#define _GNU_SOURCE
13
14#include <pwd.h>
15#include <grp.h>
16
17struct nss_state {
18	void *dl_handle;
19	char *nss_name;
20	char pwnam_buf[512];
21};
22
23/*
24  establish a link to the nss library
25  Return 0 on success and -1 on error
26*/
27int nss_open(struct nss_state *nss, const char *nss_path);
28
29/*
30  close and cleanup a nss state
31*/
32void nss_close(struct nss_state *nss);
33
34/*
35  make a getpwnam call.
36  Return 0 on success and -1 on error
37*/
38int nss_getpwent(struct nss_state *nss, struct passwd *pwd);
39
40/*
41  make a setpwent call.
42  Return 0 on success and -1 on error
43*/
44int nss_setpwent(struct nss_state *nss);
45
46/*
47  make a endpwent call.
48  Return 0 on success and -1 on error
49*/
50int nss_endpwent(struct nss_state *nss);
51
52/*
53  convert a name to a SID
54  caller frees
55  Return 0 on success and -1 on error
56*/
57int nss_nametosid(struct nss_state *nss, const char *name, char **sid);
58
59/*
60  convert a SID to a name
61  caller frees
62  Return 0 on success and -1 on error
63*/
64int nss_sidtoname(struct nss_state *nss, const char *sid, char **name);
65
66/*
67  return a list of group SIDs for a user SID
68  the returned list is NULL terminated
69  Return 0 on success and -1 on error
70*/
71int nss_getusersids(struct nss_state *nss, const char *user_sid, char ***sids);
72
73/*
74  convert a sid to a uid
75  Return 0 on success and -1 on error
76*/
77int nss_sidtouid(struct nss_state *nss, const char *sid, uid_t *uid);
78
79/*
80  convert a sid to a gid
81  Return 0 on success and -1 on error
82*/
83int nss_sidtogid(struct nss_state *nss, const char *sid, gid_t *gid);
84
85/*
86  convert a uid to a sid
87  caller frees
88  Return 0 on success and -1 on error
89*/
90int nss_uidtosid(struct nss_state *nss, uid_t uid, char **sid);
91
92/*
93  convert a gid to a sid
94  caller frees
95  Return 0 on success and -1 on error
96*/
97int nss_gidtosid(struct nss_state *nss, gid_t gid, char **sid);
98