7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina/*
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina Authors:
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina Pavel Březina <pbrezina@redhat.com>
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina Copyright (C) 2013 Red Hat
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina This program is free software; you can redistribute it and/or modify
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina it under the terms of the GNU General Public License as published by
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina the Free Software Foundation; either version 3 of the License, or
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina (at your option) any later version.
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina This program is distributed in the hope that it will be useful,
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina but WITHOUT ANY WARRANTY; without even the implied warranty of
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina GNU General Public License for more details.
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina You should have received a copy of the GNU General Public License
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina along with this program. If not, see <http://www.gnu.org/licenses/>.
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina*/
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina#include <talloc.h>
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina#include <tevent.h>
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina#include "providers/ldap/sdap.h"
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina#include "providers/ldap/ldap_common.h"
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina
ab0eda3622b828df2bfb7850c96d1395f614eb13Pavel Březinastruct sdap_refresh_state {
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina struct tevent_context *ev;
ab0eda3622b828df2bfb7850c96d1395f614eb13Pavel Březina struct be_ctx *be_ctx;
3d29430867cf92b2d71afa95abb679711231117cPavel Březina struct dp_id_data *account_req;
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina struct sdap_id_ctx *id_ctx;
b0d3164ca2bd842e176268c26935c5ce54f7f76ePavel Březina struct sdap_domain *sdom;
ab0eda3622b828df2bfb7850c96d1395f614eb13Pavel Březina const char *type;
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina char **names;
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina size_t index;
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina};
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina
ab0eda3622b828df2bfb7850c96d1395f614eb13Pavel Březinastatic errno_t sdap_refresh_step(struct tevent_req *req);
ab0eda3622b828df2bfb7850c96d1395f614eb13Pavel Březinastatic void sdap_refresh_done(struct tevent_req *subreq);
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina
ab0eda3622b828df2bfb7850c96d1395f614eb13Pavel Březinastatic struct tevent_req *sdap_refresh_send(TALLOC_CTX *mem_ctx,
ab0eda3622b828df2bfb7850c96d1395f614eb13Pavel Březina struct tevent_context *ev,
ab0eda3622b828df2bfb7850c96d1395f614eb13Pavel Březina struct be_ctx *be_ctx,
ab0eda3622b828df2bfb7850c96d1395f614eb13Pavel Březina struct sss_domain_info *domain,
ab0eda3622b828df2bfb7850c96d1395f614eb13Pavel Březina int entry_type,
ab0eda3622b828df2bfb7850c96d1395f614eb13Pavel Březina char **names,
ab0eda3622b828df2bfb7850c96d1395f614eb13Pavel Březina void *pvt)
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina{
ab0eda3622b828df2bfb7850c96d1395f614eb13Pavel Březina struct sdap_refresh_state *state = NULL;
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina struct tevent_req *req = NULL;
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina errno_t ret;
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina req = tevent_req_create(mem_ctx, &state,
ab0eda3622b828df2bfb7850c96d1395f614eb13Pavel Březina struct sdap_refresh_state);
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina if (req == NULL) {
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov DEBUG(SSSDBG_CRIT_FAILURE, "tevent_req_create() failed\n");
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina return NULL;
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina }
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina
b0d3164ca2bd842e176268c26935c5ce54f7f76ePavel Březina if (names == NULL) {
b0d3164ca2bd842e176268c26935c5ce54f7f76ePavel Březina ret = EOK;
b0d3164ca2bd842e176268c26935c5ce54f7f76ePavel Březina goto immediately;
b0d3164ca2bd842e176268c26935c5ce54f7f76ePavel Březina }
b0d3164ca2bd842e176268c26935c5ce54f7f76ePavel Březina
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina state->ev = ev;
ab0eda3622b828df2bfb7850c96d1395f614eb13Pavel Březina state->be_ctx = be_ctx;
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina state->id_ctx = talloc_get_type(pvt, struct sdap_id_ctx);
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina state->names = names;
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina state->index = 0;
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina
b0d3164ca2bd842e176268c26935c5ce54f7f76ePavel Březina state->sdom = sdap_domain_get(state->id_ctx->opts, domain);
b0d3164ca2bd842e176268c26935c5ce54f7f76ePavel Březina if (state->sdom == NULL) {
b0d3164ca2bd842e176268c26935c5ce54f7f76ePavel Březina ret = ERR_DOMAIN_NOT_FOUND;
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina goto immediately;
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina }
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina
ab0eda3622b828df2bfb7850c96d1395f614eb13Pavel Březina switch (entry_type) {
e77d6366ff9e49dbbb607f1709f1ae4190b99489Pavel Březina case BE_REQ_USER:
e77d6366ff9e49dbbb607f1709f1ae4190b99489Pavel Březina state->type = "user";
e77d6366ff9e49dbbb607f1709f1ae4190b99489Pavel Březina break;
61c8d13e55ebafc28da1b0b5ad9ae578d687e288Pavel Březina case BE_REQ_GROUP:
61c8d13e55ebafc28da1b0b5ad9ae578d687e288Pavel Březina state->type = "group";
61c8d13e55ebafc28da1b0b5ad9ae578d687e288Pavel Březina break;
ab0eda3622b828df2bfb7850c96d1395f614eb13Pavel Březina case BE_REQ_NETGROUP:
ab0eda3622b828df2bfb7850c96d1395f614eb13Pavel Březina state->type = "netgroup";
ab0eda3622b828df2bfb7850c96d1395f614eb13Pavel Březina break;
ab0eda3622b828df2bfb7850c96d1395f614eb13Pavel Březina default:
ab0eda3622b828df2bfb7850c96d1395f614eb13Pavel Březina DEBUG(SSSDBG_CRIT_FAILURE, "Invalid entry type [%d]!\n", entry_type);
ab0eda3622b828df2bfb7850c96d1395f614eb13Pavel Březina }
ab0eda3622b828df2bfb7850c96d1395f614eb13Pavel Březina
3d29430867cf92b2d71afa95abb679711231117cPavel Březina state->account_req = talloc_zero(state, struct dp_id_data);
ab0eda3622b828df2bfb7850c96d1395f614eb13Pavel Březina if (state->account_req == NULL) {
ab0eda3622b828df2bfb7850c96d1395f614eb13Pavel Březina ret = ENOMEM;
ab0eda3622b828df2bfb7850c96d1395f614eb13Pavel Březina goto immediately;
ab0eda3622b828df2bfb7850c96d1395f614eb13Pavel Březina }
ab0eda3622b828df2bfb7850c96d1395f614eb13Pavel Březina
ab0eda3622b828df2bfb7850c96d1395f614eb13Pavel Březina state->account_req->entry_type = entry_type;
ab0eda3622b828df2bfb7850c96d1395f614eb13Pavel Březina state->account_req->attr_type = BE_ATTR_CORE;
ab0eda3622b828df2bfb7850c96d1395f614eb13Pavel Březina state->account_req->filter_type = BE_FILTER_NAME;
ab0eda3622b828df2bfb7850c96d1395f614eb13Pavel Březina state->account_req->extra_value = NULL;
ab0eda3622b828df2bfb7850c96d1395f614eb13Pavel Březina state->account_req->domain = domain->name;
ab0eda3622b828df2bfb7850c96d1395f614eb13Pavel Březina /* filter will be filled later */
ab0eda3622b828df2bfb7850c96d1395f614eb13Pavel Březina
ab0eda3622b828df2bfb7850c96d1395f614eb13Pavel Březina ret = sdap_refresh_step(req);
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina if (ret == EOK) {
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov DEBUG(SSSDBG_TRACE_FUNC, "Nothing to refresh\n");
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina goto immediately;
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina } else if (ret != EAGAIN) {
ab0eda3622b828df2bfb7850c96d1395f614eb13Pavel Březina DEBUG(SSSDBG_CRIT_FAILURE, "sdap_refresh_step() failed "
ab0eda3622b828df2bfb7850c96d1395f614eb13Pavel Březina "[%d]: %s\n", ret, sss_strerror(ret));
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina goto immediately;
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina }
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina return req;
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březinaimmediately:
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina if (ret == EOK) {
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina tevent_req_done(req);
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina } else {
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina tevent_req_error(req, ret);
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina }
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina tevent_req_post(req, ev);
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina return req;
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina}
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina
ab0eda3622b828df2bfb7850c96d1395f614eb13Pavel Březinastatic errno_t sdap_refresh_step(struct tevent_req *req)
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina{
ab0eda3622b828df2bfb7850c96d1395f614eb13Pavel Březina struct sdap_refresh_state *state = NULL;
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina struct tevent_req *subreq = NULL;
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina errno_t ret;
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina
ab0eda3622b828df2bfb7850c96d1395f614eb13Pavel Březina state = tevent_req_data(req, struct sdap_refresh_state);
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina if (state->names == NULL) {
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina ret = EOK;
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina goto done;
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina }
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina
ab0eda3622b828df2bfb7850c96d1395f614eb13Pavel Březina state->account_req->filter_value = state->names[state->index];
ab0eda3622b828df2bfb7850c96d1395f614eb13Pavel Březina if (state->account_req->filter_value == NULL) {
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina ret = EOK;
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina goto done;
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina }
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina
ab0eda3622b828df2bfb7850c96d1395f614eb13Pavel Březina DEBUG(SSSDBG_TRACE_FUNC, "Issuing refresh of %s %s\n",
ab0eda3622b828df2bfb7850c96d1395f614eb13Pavel Březina state->type, state->account_req->filter_value);
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina
ab0eda3622b828df2bfb7850c96d1395f614eb13Pavel Březina subreq = sdap_handle_acct_req_send(state, state->be_ctx,
ab0eda3622b828df2bfb7850c96d1395f614eb13Pavel Březina state->account_req, state->id_ctx,
ab0eda3622b828df2bfb7850c96d1395f614eb13Pavel Březina state->sdom, state->id_ctx->conn, true);
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina if (subreq == NULL) {
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina ret = ENOMEM;
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina goto done;
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina }
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina
ab0eda3622b828df2bfb7850c96d1395f614eb13Pavel Březina tevent_req_set_callback(subreq, sdap_refresh_done, req);
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina state->index++;
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina ret = EAGAIN;
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březinadone:
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina return ret;
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina}
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina
ab0eda3622b828df2bfb7850c96d1395f614eb13Pavel Březinastatic void sdap_refresh_done(struct tevent_req *subreq)
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina{
ab0eda3622b828df2bfb7850c96d1395f614eb13Pavel Březina struct sdap_refresh_state *state = NULL;
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina struct tevent_req *req = NULL;
ab0eda3622b828df2bfb7850c96d1395f614eb13Pavel Březina const char *err_msg = NULL;
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina errno_t dp_error;
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina int sdap_ret;
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina errno_t ret;
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina req = tevent_req_callback_data(subreq, struct tevent_req);
ab0eda3622b828df2bfb7850c96d1395f614eb13Pavel Březina state = tevent_req_data(req, struct sdap_refresh_state);
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina
ab0eda3622b828df2bfb7850c96d1395f614eb13Pavel Březina ret = sdap_handle_acct_req_recv(subreq, &dp_error, &err_msg, &sdap_ret);
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina talloc_zfree(subreq);
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina if (ret != EOK) {
ab0eda3622b828df2bfb7850c96d1395f614eb13Pavel Březina DEBUG(SSSDBG_CRIT_FAILURE, "Unable to refresh %s [dp_error: %d, "
ab0eda3622b828df2bfb7850c96d1395f614eb13Pavel Březina "sdap_ret: %d, errno: %d]: %s\n", state->type,
ab0eda3622b828df2bfb7850c96d1395f614eb13Pavel Březina dp_error, sdap_ret, ret, err_msg);
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina goto done;
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina }
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina
ab0eda3622b828df2bfb7850c96d1395f614eb13Pavel Březina ret = sdap_refresh_step(req);
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina if (ret == EAGAIN) {
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina return;
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina }
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březinadone:
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina if (ret != EOK) {
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina tevent_req_error(req, ret);
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina return;
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina }
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina tevent_req_done(req);
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina}
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina
ab0eda3622b828df2bfb7850c96d1395f614eb13Pavel Březinastatic errno_t sdap_refresh_recv(struct tevent_req *req)
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina{
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina TEVENT_REQ_RETURN_ON_ERROR(req);
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina return EOK;
7b5e7e539ae9312ab55d75aa94feaad549b2a708Pavel Březina}
ab0eda3622b828df2bfb7850c96d1395f614eb13Pavel Březina
e77d6366ff9e49dbbb607f1709f1ae4190b99489Pavel Březinastatic struct tevent_req *
e77d6366ff9e49dbbb607f1709f1ae4190b99489Pavel Březinasdap_refresh_users_send(TALLOC_CTX *mem_ctx,
e77d6366ff9e49dbbb607f1709f1ae4190b99489Pavel Březina struct tevent_context *ev,
e77d6366ff9e49dbbb607f1709f1ae4190b99489Pavel Březina struct be_ctx *be_ctx,
e77d6366ff9e49dbbb607f1709f1ae4190b99489Pavel Březina struct sss_domain_info *domain,
e77d6366ff9e49dbbb607f1709f1ae4190b99489Pavel Březina char **names,
e77d6366ff9e49dbbb607f1709f1ae4190b99489Pavel Březina void *pvt)
e77d6366ff9e49dbbb607f1709f1ae4190b99489Pavel Březina{
e77d6366ff9e49dbbb607f1709f1ae4190b99489Pavel Březina return sdap_refresh_send(mem_ctx, ev, be_ctx, domain,
e77d6366ff9e49dbbb607f1709f1ae4190b99489Pavel Březina BE_REQ_USER, names, pvt);
e77d6366ff9e49dbbb607f1709f1ae4190b99489Pavel Březina}
e77d6366ff9e49dbbb607f1709f1ae4190b99489Pavel Březina
e77d6366ff9e49dbbb607f1709f1ae4190b99489Pavel Březinastatic errno_t sdap_refresh_users_recv(struct tevent_req *req)
e77d6366ff9e49dbbb607f1709f1ae4190b99489Pavel Březina{
e77d6366ff9e49dbbb607f1709f1ae4190b99489Pavel Březina return sdap_refresh_recv(req);
e77d6366ff9e49dbbb607f1709f1ae4190b99489Pavel Březina}
e77d6366ff9e49dbbb607f1709f1ae4190b99489Pavel Březina
61c8d13e55ebafc28da1b0b5ad9ae578d687e288Pavel Březinastatic struct tevent_req *
61c8d13e55ebafc28da1b0b5ad9ae578d687e288Pavel Březinasdap_refresh_groups_send(TALLOC_CTX *mem_ctx,
61c8d13e55ebafc28da1b0b5ad9ae578d687e288Pavel Březina struct tevent_context *ev,
61c8d13e55ebafc28da1b0b5ad9ae578d687e288Pavel Březina struct be_ctx *be_ctx,
61c8d13e55ebafc28da1b0b5ad9ae578d687e288Pavel Březina struct sss_domain_info *domain,
61c8d13e55ebafc28da1b0b5ad9ae578d687e288Pavel Březina char **names,
61c8d13e55ebafc28da1b0b5ad9ae578d687e288Pavel Březina void *pvt)
61c8d13e55ebafc28da1b0b5ad9ae578d687e288Pavel Březina{
61c8d13e55ebafc28da1b0b5ad9ae578d687e288Pavel Březina return sdap_refresh_send(mem_ctx, ev, be_ctx, domain,
61c8d13e55ebafc28da1b0b5ad9ae578d687e288Pavel Březina BE_REQ_GROUP, names, pvt);
61c8d13e55ebafc28da1b0b5ad9ae578d687e288Pavel Březina}
61c8d13e55ebafc28da1b0b5ad9ae578d687e288Pavel Březina
61c8d13e55ebafc28da1b0b5ad9ae578d687e288Pavel Březinastatic errno_t sdap_refresh_groups_recv(struct tevent_req *req)
61c8d13e55ebafc28da1b0b5ad9ae578d687e288Pavel Březina{
61c8d13e55ebafc28da1b0b5ad9ae578d687e288Pavel Březina return sdap_refresh_recv(req);
61c8d13e55ebafc28da1b0b5ad9ae578d687e288Pavel Březina}
61c8d13e55ebafc28da1b0b5ad9ae578d687e288Pavel Březina
17531a398cc9084036cb08d69fe876a8f12707bbPavel Březinastatic struct tevent_req *
17531a398cc9084036cb08d69fe876a8f12707bbPavel Březinasdap_refresh_netgroups_send(TALLOC_CTX *mem_ctx,
17531a398cc9084036cb08d69fe876a8f12707bbPavel Březina struct tevent_context *ev,
17531a398cc9084036cb08d69fe876a8f12707bbPavel Březina struct be_ctx *be_ctx,
17531a398cc9084036cb08d69fe876a8f12707bbPavel Březina struct sss_domain_info *domain,
17531a398cc9084036cb08d69fe876a8f12707bbPavel Březina char **names,
17531a398cc9084036cb08d69fe876a8f12707bbPavel Březina void *pvt)
ab0eda3622b828df2bfb7850c96d1395f614eb13Pavel Březina{
ab0eda3622b828df2bfb7850c96d1395f614eb13Pavel Březina return sdap_refresh_send(mem_ctx, ev, be_ctx, domain,
ab0eda3622b828df2bfb7850c96d1395f614eb13Pavel Březina BE_REQ_NETGROUP, names, pvt);
ab0eda3622b828df2bfb7850c96d1395f614eb13Pavel Březina}
ab0eda3622b828df2bfb7850c96d1395f614eb13Pavel Březina
17531a398cc9084036cb08d69fe876a8f12707bbPavel Březinastatic errno_t sdap_refresh_netgroups_recv(struct tevent_req *req)
ab0eda3622b828df2bfb7850c96d1395f614eb13Pavel Březina{
ab0eda3622b828df2bfb7850c96d1395f614eb13Pavel Březina return sdap_refresh_recv(req);
ab0eda3622b828df2bfb7850c96d1395f614eb13Pavel Březina}
17531a398cc9084036cb08d69fe876a8f12707bbPavel Březina
17531a398cc9084036cb08d69fe876a8f12707bbPavel Březinaerrno_t sdap_refresh_init(struct be_refresh_ctx *refresh_ctx,
17531a398cc9084036cb08d69fe876a8f12707bbPavel Březina struct sdap_id_ctx *id_ctx)
17531a398cc9084036cb08d69fe876a8f12707bbPavel Březina{
17531a398cc9084036cb08d69fe876a8f12707bbPavel Březina errno_t ret;
17531a398cc9084036cb08d69fe876a8f12707bbPavel Březina
e77d6366ff9e49dbbb607f1709f1ae4190b99489Pavel Březina ret = be_refresh_add_cb(refresh_ctx, BE_REFRESH_TYPE_USERS,
e77d6366ff9e49dbbb607f1709f1ae4190b99489Pavel Březina sdap_refresh_users_send,
e77d6366ff9e49dbbb607f1709f1ae4190b99489Pavel Březina sdap_refresh_users_recv,
e77d6366ff9e49dbbb607f1709f1ae4190b99489Pavel Březina id_ctx);
e77d6366ff9e49dbbb607f1709f1ae4190b99489Pavel Březina if (ret != EOK && ret != EEXIST) {
e77d6366ff9e49dbbb607f1709f1ae4190b99489Pavel Březina DEBUG(SSSDBG_MINOR_FAILURE, "Periodical refresh of users "
e77d6366ff9e49dbbb607f1709f1ae4190b99489Pavel Březina "will not work [%d]: %s\n", ret, strerror(ret));
e77d6366ff9e49dbbb607f1709f1ae4190b99489Pavel Březina }
e77d6366ff9e49dbbb607f1709f1ae4190b99489Pavel Březina
61c8d13e55ebafc28da1b0b5ad9ae578d687e288Pavel Březina ret = be_refresh_add_cb(refresh_ctx, BE_REFRESH_TYPE_GROUPS,
61c8d13e55ebafc28da1b0b5ad9ae578d687e288Pavel Březina sdap_refresh_groups_send,
61c8d13e55ebafc28da1b0b5ad9ae578d687e288Pavel Březina sdap_refresh_groups_recv,
61c8d13e55ebafc28da1b0b5ad9ae578d687e288Pavel Březina id_ctx);
61c8d13e55ebafc28da1b0b5ad9ae578d687e288Pavel Březina if (ret != EOK && ret != EEXIST) {
61c8d13e55ebafc28da1b0b5ad9ae578d687e288Pavel Březina DEBUG(SSSDBG_MINOR_FAILURE, "Periodical refresh of groups "
61c8d13e55ebafc28da1b0b5ad9ae578d687e288Pavel Březina "will not work [%d]: %s\n", ret, strerror(ret));
61c8d13e55ebafc28da1b0b5ad9ae578d687e288Pavel Březina }
61c8d13e55ebafc28da1b0b5ad9ae578d687e288Pavel Březina
17531a398cc9084036cb08d69fe876a8f12707bbPavel Březina ret = be_refresh_add_cb(refresh_ctx, BE_REFRESH_TYPE_NETGROUPS,
17531a398cc9084036cb08d69fe876a8f12707bbPavel Březina sdap_refresh_netgroups_send,
17531a398cc9084036cb08d69fe876a8f12707bbPavel Březina sdap_refresh_netgroups_recv,
17531a398cc9084036cb08d69fe876a8f12707bbPavel Březina id_ctx);
17531a398cc9084036cb08d69fe876a8f12707bbPavel Březina if (ret != EOK && ret != EEXIST) {
17531a398cc9084036cb08d69fe876a8f12707bbPavel Březina DEBUG(SSSDBG_MINOR_FAILURE, "Periodical refresh of netgroups "
17531a398cc9084036cb08d69fe876a8f12707bbPavel Březina "will not work [%d]: %s\n", ret, strerror(ret));
17531a398cc9084036cb08d69fe876a8f12707bbPavel Březina }
17531a398cc9084036cb08d69fe876a8f12707bbPavel Březina
17531a398cc9084036cb08d69fe876a8f12707bbPavel Březina return ret;
17531a398cc9084036cb08d69fe876a8f12707bbPavel Březina}