Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
sudo-project
GitHub Repository: sudo-project/sudo
Path: blob/main/include/compat/nss_dbdefs.h
1532 views
1
/*
2
* SPDX-License-Identifier: ISC
3
*
4
* Copyright (c) 2013 Todd C. Miller <[email protected]>
5
*
6
* Permission to use, copy, modify, and distribute this software for any
7
* purpose with or without fee is hereby granted, provided that the above
8
* copyright notice and this permission notice appear in all copies.
9
*
10
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17
*/
18
19
#ifndef COMPAT_NSS_DBDEFS_H
20
#define COMPAT_NSS_DBDEFS_H
21
22
/*
23
* Bits of nss_dbdefs.h and nss_common.h needed to implement
24
* getgrouplist(3) using nss_search(3).
25
*
26
* HP-UX does not ship those headers so we need this compatibility header.
27
* It may also work on other systems that use a Solaris-derived nsswitch
28
* API.
29
*/
30
31
#ifdef NEED_HPUX_MUTEX
32
# include <synch.h>
33
#endif
34
35
typedef enum {
36
NSS_SUCCESS,
37
NSS_NOTFOUND,
38
NSS_UNAVAIL,
39
NSS_TRYAGAIN
40
} nss_status_t;
41
42
typedef struct nss_db_params {
43
const char *name;
44
const char *config_name;
45
const char *default_config;
46
unsigned int max_active_per_src;
47
unsigned int max_dormant_per_src;
48
int flags;
49
void *finders;
50
void *private;
51
void (*cleanup)(struct nss_db_params *);
52
} nss_db_params_t;
53
54
struct nss_groupsbymem {
55
const char *username;
56
gid_t *gid_array;
57
int maxgids;
58
int force_slow_way;
59
int (*str2ent)(const char *instr, int instr_len, void *ent, char *buffer, int buflen);
60
nss_status_t (*process_cstr)(const char *instr, int instr_len, struct nss_groupsbymem *);
61
int numgids;
62
};
63
64
typedef struct {
65
void *result; /* group struct to fill in. */
66
char *buffer; /* string buffer for above */
67
int buflen; /* string buffer size */
68
} nss_XbyY_buf_t;
69
70
struct nss_db_state;
71
typedef struct {
72
struct nss_db_state *s;
73
#ifdef NEED_HPUX_MUTEX
74
lwp_mutex_t lock;
75
#endif
76
} nss_db_root_t;
77
78
#ifdef NEED_HPUX_MUTEX
79
# define NSS_DB_ROOT_INIT { 0, LWP_MUTEX_INITIALIZER }
80
#else
81
# define NSS_DB_ROOT_INIT { 0 }
82
#endif
83
#define DEFINE_NSS_DB_ROOT(name) nss_db_root_t name = NSS_DB_ROOT_INIT
84
85
/* Backend function to find all groups a user belongs to for initgroups(). */
86
#define NSS_DBOP_GROUP_BYMEMBER 6
87
88
/* str2ent function return values */
89
#define NSS_STR_PARSE_SUCCESS 0
90
#define NSS_STR_PARSE_PARSE 1
91
#define NSS_STR_PARSE_ERANGE 2
92
93
/* Max length for an /etc/group file line. */
94
#define NSS_BUFLEN_GROUP 8192
95
96
/* HP-UX uses an extra underscore for these functions. */
97
#ifdef HAVE___NSS_INITF_GROUP
98
# define _nss_initf_group __nss_initf_group
99
#endif
100
#ifdef HAVE___NSS_XBYY_BUF_ALLOC
101
# define _nss_XbyY_buf_alloc __nss_XbyY_buf_alloc
102
# define _nss_XbyY_buf_free __nss_XbyY_buf_free
103
#endif
104
105
typedef void (*nss_db_initf_t)(nss_db_params_t *);
106
extern nss_status_t nss_search(nss_db_root_t *, nss_db_initf_t, int search_fnum, void *search_args);
107
extern nss_XbyY_buf_t *_nss_XbyY_buf_alloc(int struct_size, int buffer_size);
108
extern void _nss_XbyY_buf_free(nss_XbyY_buf_t *);
109
110
#endif /* COMPAT_NSS_DBDEFS_H */
111
112