| 210 | } |
| 211 | |
| 212 | static 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 | } |
no outgoing calls
no test coverage detected