1 /* Copyright (C) 2002 Ben Goodwin
2 This file is part of the nss-mysql library.
4 The nss-mysql library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU General Public License as published
6 by the Free Software Foundation; either version 2 of the License, or
7 (at your option) any later version.
9 The nss-mysql library is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
13 You should have received a copy of the GNU General Public License
14 along with the nss-mysql library; if not, write to the Free Software
15 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 static const char rcsid[] =
19 "$Id: mysql-grp.c,v 1.15 2004/11/13 16:25:26 cinergi Exp $ ";
26 MYSQL_RES *mresult_grent = NULL;
33 _nss_mysql_getgrnam_r (const char *name, struct group *result, char *buffer,
34 size_t buflen, int *errnop)
35 #elif defined(HAVE_NSS_COMMON_H)
36 _nss_mysql_getgrnam_r (nss_backend_t *be, void *args)
39 DN ("_nss_mysql_getgrnam_r")
41 MYSQL_RES *mresult = NULL;
46 retVal = _nss_mysql_lookup (BYNAME, name, 0, conf.sql.query.getgrnam,
47 nfalse, result, buffer, buflen, errnop,
48 _nss_mysql_load_group, &mresult, FUNCNAME);
49 #elif defined(HAVE_NSS_COMMON_H)
50 retVal = _nss_mysql_lookup (BYNAME, NSS_ARGS(args)->key.name,
51 0, conf.sql.query.getgrnam,
52 nfalse, NSS_ARGS(args)->buf.result,
53 NSS_ARGS(args)->buf.buffer,
54 NSS_ARGS(args)->buf.buflen,
55 &NSS_ARGS(args)->erange,
56 _nss_mysql_load_group, &mresult, FUNCNAME);
57 if (retVal == NSS_SUCCESS)
58 NSS_ARGS(args)->returnval = NSS_ARGS(args)->buf.result;
69 _nss_mysql_getgrgid_r (uid_t uid, struct group *result, char *buffer,
70 size_t buflen, int *errnop)
71 #elif defined(HAVE_NSS_COMMON_H)
72 _nss_mysql_getgrgid_r (nss_backend_t *be, void *args)
75 DN ("_nss_mysql_getgrgid_r")
77 MYSQL_RES *mresult = NULL;
82 retVal = _nss_mysql_lookup (BYNUM, NULL, uid, conf.sql.query.getgrgid,
83 nfalse, result, buffer, buflen, errnop,
84 _nss_mysql_load_group, &mresult, FUNCNAME);
86 retVal = _nss_mysql_lookup (BYNUM, NULL, NSS_ARGS(args)->key.uid,
87 conf.sql.query.getgrgid, nfalse,
88 NSS_ARGS(args)->buf.result,
89 NSS_ARGS(args)->buf.buffer,
90 NSS_ARGS(args)->buf.buflen,
91 &NSS_ARGS(args)->erange,
92 _nss_mysql_load_group, &mresult, FUNCNAME);
93 if (retVal == NSS_SUCCESS)
94 NSS_ARGS(args)->returnval = NSS_ARGS(args)->buf.result;
115 _nss_mysql_getgrent_r (struct group *result, char *buffer, size_t buflen,
117 #elif defined(HAVE_NSS_COMMON_H)
118 _nss_mysql_getgrent_r (nss_backend_t *be, void *args)
121 DN ("_nss_mysql_getgrent_r")
127 retVal = _nss_mysql_lookup (BYNONE, NULL, 0, conf.sql.query.getgrent,
128 nfalse, result, buffer, buflen, errnop,
129 _nss_mysql_load_group, &mresult_grent, FUNCNAME);
131 retVal = _nss_mysql_lookup (BYNONE, NULL, 0, conf.sql.query.getgrent,
132 nfalse, NSS_ARGS(args)->buf.result,
133 NSS_ARGS(args)->buf.buffer,
134 NSS_ARGS(args)->buf.buflen,
135 &NSS_ARGS(args)->erange,
136 _nss_mysql_load_group, &mresult_grent, FUNCNAME);
137 if (retVal == NSS_SUCCESS)
138 NSS_ARGS(args)->returnval = NSS_ARGS(args)->buf.result;
145 * initgroups/getgrmem
149 _nss_mysql_initgroups_dyn (const char *user, gid_t group, long int *start,
150 long int *size, gid_t **groupsp, long int limit,
153 DN ("_nss_mysql_initgroups_dyn")
155 #ifdef HAVE_NSS_COMMON_H
157 _nss_mysql_getgrmem (nss_backend_t *be, void *args)
159 DN ("_nss_mysql_getgrmem")
162 MYSQL_RES *mresult = NULL;
170 gi.groupsp = groupsp;
171 gi.group = (long int) group;
172 #elif defined(HAVE_NSS_COMMON_H)
173 gi.start = (long int *)&((struct nss_groupsbymem *)args)->numgids;
174 gi.limit = ((struct nss_groupsbymem *)args)->maxgids;
176 gi.groupsp = &(((struct nss_groupsbymem *)args)->gid_array);
182 retVal = _nss_mysql_lookup (BYNAME, user, 0, conf.sql.query.gidsbymem,
183 nfalse, &gi, NULL, 0, errnop,
184 _nss_mysql_load_gidsbymem, &mresult,
187 retVal = _nss_mysql_lookup (BYNAME,
188 ((struct nss_groupsbymem *)args)->username,
189 0, conf.sql.query.gidsbymem, nfalse, &gi, NULL,
190 0, NULL, _nss_mysql_load_gidsbymem, &mresult,
194 if (retVal != NSS_SUCCESS)
197 #ifdef HAVE_NSS_COMMON_H
198 DSRETURN (NSS_NOTFOUND)
200 DSRETURN (NSS_SUCCESS)
204 #ifdef HAVE_NSS_COMMON_H
205 static nss_backend_op_t group_ops[] = {
206 _nss_mysql_default_destr, /* NSS_DBOP_DESTRUCTOR */
207 _nss_mysql_endgrent, /* NSS_DBOP_ENDENT */
208 _nss_mysql_setgrent, /* NSS_DBOP_SETENT */
209 _nss_mysql_getgrent_r, /* NSS_DBOP_GETENT */
210 _nss_mysql_getgrnam_r, /* NSS_DBOP_GROUP_BYNAME */
211 _nss_mysql_getgrgid_r, /* NSS_DBOP_GROUP_BYGID */
212 _nss_mysql_getgrmem /* NSS_DBOP_GROUP_BYMEMBER */