MCPcopy Create free account
hub / github.com/apache/httpd / authz_dbd_group_query

Function authz_dbd_group_query

modules/aaa/mod_authz_dbd.c:212–271  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

210}
211
212static int authz_dbd_group_query(request_rec *r, authz_dbd_cfg *cfg,
213 apr_array_header_t *groups)
214{
215 /* SELECT user_group FROM authz WHERE user = %s */
216 int rv;
217 const char *message;
218 ap_dbd_t *dbd;
219 apr_dbd_prepared_t *query;
220 apr_dbd_results_t *res = NULL;
221 apr_dbd_row_t *row = NULL;
222
223 if (cfg->query == NULL) {
224 ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(01649)
225 "No query configured for dbd-group!");
226 return HTTP_INTERNAL_SERVER_ERROR;
227 }
228
229 dbd = dbd_handle(r);
230 if (dbd == NULL) {
231 ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(02903)
232 "No db handle available for dbd-query! "
233 "Check your database access");
234 return HTTP_INTERNAL_SERVER_ERROR;
235 }
236
237 query = apr_hash_get(dbd->prepared, cfg->query, APR_HASH_KEY_STRING);
238 if (query == NULL) {
239 ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(01650)
240 "Error retrieving query for dbd-group!");
241 return HTTP_INTERNAL_SERVER_ERROR;
242 }
243 rv = apr_dbd_pvselect(dbd->driver, r->pool, dbd->handle, &res,
244 query, 0, r->user, NULL);
245 if (rv == 0) {
246 for (rv = apr_dbd_get_row(dbd->driver, r->pool, res, &row, -1);
247 rv != -1;
248 rv = apr_dbd_get_row(dbd->driver, r->pool, res, &row, -1)) {
249 if (rv == 0) {
250 APR_ARRAY_PUSH(groups, const char *) =
251 apr_pstrdup(r->pool,
252 apr_dbd_get_entry(dbd->driver, row, 0));
253 }
254 else {
255 message = apr_dbd_error(dbd->driver, dbd->handle, rv);
256 ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(01651)
257 "authz_dbd in get_row; user_group query for user=%s [%s]",
258 r->user, message?message:noerror);
259 return HTTP_INTERNAL_SERVER_ERROR;
260 }
261 }
262 }
263 else {
264 message = apr_dbd_error(dbd->driver, dbd->handle, rv);
265 ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(01652)
266 "authz_dbd, in groups query for %s [%s]",
267 r->user, message?message:noerror);
268 return HTTP_INTERNAL_SERVER_ERROR;
269 }

Callers 1

Calls

no outgoing calls

Tested by

no test coverage detected