sss_nss_idmap  1.15.4
sss_nss_idmap.h
1 /*
2  SSSD
3 
4  NSS Responder ID-mapping interface
5 
6  Authors:
7  Sumit Bose <sbose@redhat.com>
8 
9  Copyright (C) 2013 Red Hat
10 
11  This program is free software; you can redistribute it and/or modify
12  it under the terms of the GNU General Public License as published by
13  the Free Software Foundation; either version 3 of the License, or
14  (at your option) any later version.
15 
16  This program is distributed in the hope that it will be useful,
17  but WITHOUT ANY WARRANTY; without even the implied warranty of
18  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19  GNU General Public License for more details.
20 
21  You should have received a copy of the GNU General Public License
22  along with this program. If not, see <http://www.gnu.org/licenses/>.
23 */
24 
25 #ifndef SSS_NSS_IDMAP_H_
26 #define SSS_NSS_IDMAP_H_
27 
28 #include <stdint.h>
29 #include <sys/types.h>
30 #include <pwd.h>
31 #include <grp.h>
32 
36 enum sss_id_type {
37  SSS_ID_TYPE_NOT_SPECIFIED = 0,
38  SSS_ID_TYPE_UID,
39  SSS_ID_TYPE_GID,
40  SSS_ID_TYPE_BOTH /* used for user or magic private groups */
41 };
42 
43 struct sss_nss_kv {
44  char *key;
45  char *value;
46 };
47 
65 int sss_nss_getsidbyname(const char *fq_name, char **sid,
66  enum sss_id_type *type);
67 
79 int sss_nss_getsidbyid(uint32_t id, char **sid, enum sss_id_type *type);
80 
92 int sss_nss_getnamebysid(const char *sid, char **fq_name,
93  enum sss_id_type *type);
94 
105 int sss_nss_getidbysid(const char *sid, uint32_t *id,
106  enum sss_id_type *id_type);
107 
126 int sss_nss_getorigbyname(const char *fq_name, struct sss_nss_kv **kv_list,
127  enum sss_id_type *type);
128 
141 int sss_nss_getnamebycert(const char *cert, char **fq_name,
142  enum sss_id_type *type);
143 
156 int sss_nss_getlistbycert(const char *cert, char ***fq_name,
157  enum sss_id_type **type);
158 
164 void sss_nss_free_kv(struct sss_nss_kv *kv_list);
165 
170 #define SSS_NSS_EX_FLAG_NO_FLAGS 0
171 
174 #define SSS_NSS_EX_FLAG_NO_CACHE (1 << 0)
175 
180 struct sss_nss_ex_data;
181 
182 enum extra_data_item {
183  EX_DATA_SHORT_NAME = 0,
184  EX_DATA_DOMAIN_NAME,
185  EX_DATA_SHORT_DOMAIN_NAME,
186  EX_DATA_SID_STR,
187  EX_DATA_END
188 };
189 
190 void sss_nss_free_ex_data(struct sss_nss_ex_data *ex);
191 
192 const char *sss_nss_get_extra_data_item(struct sss_nss_ex_data *ex,
193  enum extra_data_item item);
194 #define sss_nss_get_extra_data_short_name(ex) \
195  sss_nss_get_extra_data_item((ex), EX_DATA_SHORT_NAME)
196 #define sss_nss_get_extra_data_domain_name(ex) \
197  sss_nss_get_extra_data_item((ex), EX_DATA_DOMAIN_NAME)
198 #define sss_nss_get_extra_data_short_domain_name(ex) \
199  sss_nss_get_extra_data_item((ex), EX_DATA_SHORT_DOMAIN_NAME)
200 #define sss_nss_get_extra_data_sid_str(ex) \
201  sss_nss_get_extra_data_item((ex), EX_DATA_SID_STR)
202 
228 int sss_nss_getpwnam_ex(const char *name, struct passwd *pwd,
229  char *buf, size_t buflen, struct passwd **result,
230  uint32_t flags, unsigned int timeout,
231  const char *domain,
232  struct sss_nss_ex_data **extra_data);
233 
234 int sss_nss_getpwuid_ex(uid_t uid, struct passwd *pwd,
235  char *buffer, size_t buflen, struct passwd **result,
236  uint32_t flags, unsigned int timeout,
237  const char *domain,
238  struct sss_nss_ex_data **extra_data);
239 
240 int sss_nss_getgrnam_ex(const char *name, struct group *grp,
241  char *buffer, size_t buflen, struct group **result,
242  uint32_t flags, unsigned int timeout,
243  const char *domain,
244  struct sss_nss_ex_data **extra_data);
245 
246 int sss_nss_getgrgid_ex(gid_t gid, struct group *grp,
247  char *buffer, size_t buflen, struct group **result,
248  uint32_t flags, unsigned int timeout,
249  const char *domain,
250  struct sss_nss_ex_data **extra_data);
251 int sss_nss_getgrouplist_ex(const char *name, gid_t *groups, int *ngroups,
252  uint32_t flags, unsigned int timeout,
253  const char *domain);
254 #endif /* SSS_NSS_IDMAP_H_ */