summaryrefslogtreecommitdiff
path: root/source3/lib/nss_wrapper/nss_wrapper.c
blob: b8c65c405d0769de73046d21daa226dacd325884 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
/*
 * Copyright (C) Stefan Metzmacher 2007 <metze@samba.org>
 *
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 *
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * 3. Neither the name of the author nor the names of its contributors
 *    may be used to endorse or promote products derived from this software
 *    without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 */

#ifdef _SAMBA_BUILD_

#define NSS_WRAPPER_NOT_REPLACE
#include "lib/replace/replace.h"
#include "system/passwd.h"
#include "system/filesys.h"

#else /* _SAMBA_BUILD_ */

#error nss_wrapper_only_supported_in_samba_yet

#endif

#ifndef _PUBLIC_
#define _PUBLIC_
#endif

/* LD_PRELOAD doesn't work yet, so REWRITE_CALLS is all we support
 * for now */
#define REWRITE_CALLS

#ifdef REWRITE_CALLS

#define real_getpwnam		getpwnam
#define real_getpwnam_r		getpwnam_r
#define real_getpwuid		getpwuid
#define real_getpwuid_r		getpwuid_r

#define real_setpwent		setpwent
#define real_getpwent		getpwent
#define real_getpwent_r		getpwent_r
#define real_endpwent		endpwent

/*
#define real_getgrlst		getgrlst
#define real_getgrlst_r		getgrlst_r
#define real_initgroups_dyn	initgroups_dyn
*/
#define real_initgroups		initgroups

#define real_getgrnam		getgrnam
#define real_getgrnam_r		getgrnam_r
#define real_getgrgid		getgrgid
#define real_getgrgid_r		getgrgid_r

#define real_setgrent		setgrent
#define real_getgrent		getgrent
#define real_getgrent_r		getgrent_r
#define real_endgrent		endgrent

#endif

/* user functions */
_PUBLIC_ struct passwd *nwrap_getpwnam(const char *name)
{
	return real_getpwnam(name);
}

_PUBLIC_ int nwrap_getpwnam_r(const char *name, struct passwd *pwbuf,
			      char *buf, size_t buflen, struct passwd **pwbufp)
{
	return real_getpwnam_r(name, pwbuf, buf, buflen, pwbufp);
}

_PUBLIC_ struct passwd *nwrap_getpwuid(uid_t uid)
{
	return real_getpwuid(uid);
}

_PUBLIC_ int nwrap_getpwuid_r(uid_t uid, struct passwd *pwbuf,
			      char *buf, size_t buflen, struct passwd **pwbufp)
{
	return real_getpwuid_r(uid, pwbuf, buf, buflen, pwbufp);
}

/* user enum functions */
_PUBLIC_ void nwrap_setpwent(void)
{
	real_setpwent();
}

_PUBLIC_ struct passwd *nwrap_getpwent(void)
{
	return real_getpwent();
}

_PUBLIC_ int nwrap_getpwent_r(struct passwd *pwbuf, char *buf,
			      size_t buflen, struct passwd **pwbufp)
{
	return real_getpwent_r(pwbuf, buf, buflen, pwbufp);
}

_PUBLIC_ void nwrap_endpwent(void)
{
	real_endpwent();
}

/* misc functions */
_PUBLIC_ int nwrap_initgroups(const char *user, gid_t group)
{
	return real_initgroups(user, group);
}

/* group functions */
_PUBLIC_ struct group *nwrap_getgrnam(const char *name)
{
	return real_getgrnam(name);
}

_PUBLIC_ int nwrap_getgrnam_r(const char *name, struct group *gbuf,
			      char *buf, size_t buflen, struct group **gbufp)
{
	return real_getgrnam_r(name, gbuf, buf, buflen, gbufp);
}

_PUBLIC_ struct group *nwrap_getgrgid(gid_t gid)
{
	return real_getgrgid(gid);
}

_PUBLIC_ int nwrap_getgrgid_r(gid_t gid, struct group *gbuf,
			      char *buf, size_t buflen, struct group **gbufp)
{
	return real_getgrgid_r(gid, gbuf, buf, buflen, gbufp);
}

/* group enum functions */
_PUBLIC_ void nwrap_setgrent(void)
{
	real_setgrent();
}

_PUBLIC_ struct group *nwrap_getgrent(void)
{
	return real_getgrent();
}

_PUBLIC_ int nwrap_getgrent_r(struct group *gbuf, char *buf,
			      size_t buflen, struct group **gbufp)
{
	return real_getgrent_r(gbuf, buf, buflen, gbufp);
}

_PUBLIC_ void nwrap_endgrent(void)
{
	real_endgrent();
}