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