586fa3571753ab4a607d40fc31503fc0e8effd70Pavel Březina/*
586fa3571753ab4a607d40fc31503fc0e8effd70Pavel Březina Authors:
586fa3571753ab4a607d40fc31503fc0e8effd70Pavel Březina Pavel Březina <pbrezina@redhat.com>
586fa3571753ab4a607d40fc31503fc0e8effd70Pavel Březina
586fa3571753ab4a607d40fc31503fc0e8effd70Pavel Březina Copyright (C) 2016 Red Hat
586fa3571753ab4a607d40fc31503fc0e8effd70Pavel Březina
586fa3571753ab4a607d40fc31503fc0e8effd70Pavel Březina This program is free software; you can redistribute it and/or modify
586fa3571753ab4a607d40fc31503fc0e8effd70Pavel Březina it under the terms of the GNU General Public License as published by
586fa3571753ab4a607d40fc31503fc0e8effd70Pavel Březina the Free Software Foundation; either version 3 of the License, or
586fa3571753ab4a607d40fc31503fc0e8effd70Pavel Březina (at your option) any later version.
586fa3571753ab4a607d40fc31503fc0e8effd70Pavel Březina
586fa3571753ab4a607d40fc31503fc0e8effd70Pavel Březina This program is distributed in the hope that it will be useful,
586fa3571753ab4a607d40fc31503fc0e8effd70Pavel Březina but WITHOUT ANY WARRANTY; without even the implied warranty of
586fa3571753ab4a607d40fc31503fc0e8effd70Pavel Březina MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
586fa3571753ab4a607d40fc31503fc0e8effd70Pavel Březina GNU General Public License for more details.
586fa3571753ab4a607d40fc31503fc0e8effd70Pavel Březina
586fa3571753ab4a607d40fc31503fc0e8effd70Pavel Březina You should have received a copy of the GNU General Public License
586fa3571753ab4a607d40fc31503fc0e8effd70Pavel Březina along with this program. If not, see <http://www.gnu.org/licenses/>.
586fa3571753ab4a607d40fc31503fc0e8effd70Pavel Březina*/
586fa3571753ab4a607d40fc31503fc0e8effd70Pavel Březina
586fa3571753ab4a607d40fc31503fc0e8effd70Pavel Březina#include <talloc.h>
586fa3571753ab4a607d40fc31503fc0e8effd70Pavel Březina#include <tevent.h>
586fa3571753ab4a607d40fc31503fc0e8effd70Pavel Březina
586fa3571753ab4a607d40fc31503fc0e8effd70Pavel Březina#include "sbus/sssd_dbus.h"
586fa3571753ab4a607d40fc31503fc0e8effd70Pavel Březina#include "sbus/sssd_dbus_errors.h"
586fa3571753ab4a607d40fc31503fc0e8effd70Pavel Březina#include "providers/data_provider/dp_private.h"
586fa3571753ab4a607d40fc31503fc0e8effd70Pavel Březina#include "providers/data_provider/dp_iface.h"
586fa3571753ab4a607d40fc31503fc0e8effd70Pavel Březina#include "providers/backend.h"
586fa3571753ab4a607d40fc31503fc0e8effd70Pavel Březina#include "util/util.h"
586fa3571753ab4a607d40fc31503fc0e8effd70Pavel Březina
586fa3571753ab4a607d40fc31503fc0e8effd70Pavel Březinaerrno_t dp_backend_is_online(struct sbus_request *sbus_req,
586fa3571753ab4a607d40fc31503fc0e8effd70Pavel Březina void *dp_cli,
586fa3571753ab4a607d40fc31503fc0e8effd70Pavel Březina const char *domname)
586fa3571753ab4a607d40fc31503fc0e8effd70Pavel Březina{
586fa3571753ab4a607d40fc31503fc0e8effd70Pavel Březina struct be_ctx *be_ctx;
586fa3571753ab4a607d40fc31503fc0e8effd70Pavel Březina struct sss_domain_info *domain;
586fa3571753ab4a607d40fc31503fc0e8effd70Pavel Březina bool online;
586fa3571753ab4a607d40fc31503fc0e8effd70Pavel Březina
586fa3571753ab4a607d40fc31503fc0e8effd70Pavel Březina be_ctx = dp_client_be(dp_cli);
586fa3571753ab4a607d40fc31503fc0e8effd70Pavel Březina
586fa3571753ab4a607d40fc31503fc0e8effd70Pavel Březina if (SBUS_IS_STRING_EMPTY(domname)) {
586fa3571753ab4a607d40fc31503fc0e8effd70Pavel Březina domain = be_ctx->domain;
586fa3571753ab4a607d40fc31503fc0e8effd70Pavel Březina } else {
586fa3571753ab4a607d40fc31503fc0e8effd70Pavel Březina domain = find_domain_by_name(be_ctx->domain, domname, false);
586fa3571753ab4a607d40fc31503fc0e8effd70Pavel Březina if (domain == NULL) {
a06e23c0bcf0c8669a29b801876aca8aac422931Pavel Březina sbus_request_reply_error(sbus_req, SBUS_ERROR_UNKNOWN_DOMAIN,
a06e23c0bcf0c8669a29b801876aca8aac422931Pavel Březina "Unknown domain %s", domname);
a06e23c0bcf0c8669a29b801876aca8aac422931Pavel Březina return EOK;
586fa3571753ab4a607d40fc31503fc0e8effd70Pavel Březina }
586fa3571753ab4a607d40fc31503fc0e8effd70Pavel Březina }
586fa3571753ab4a607d40fc31503fc0e8effd70Pavel Březina
586fa3571753ab4a607d40fc31503fc0e8effd70Pavel Březina if (domain == be_ctx->domain) {
586fa3571753ab4a607d40fc31503fc0e8effd70Pavel Březina online = be_is_offline(be_ctx) == false;
586fa3571753ab4a607d40fc31503fc0e8effd70Pavel Březina } else {
586fa3571753ab4a607d40fc31503fc0e8effd70Pavel Březina online = domain->state == DOM_ACTIVE;
586fa3571753ab4a607d40fc31503fc0e8effd70Pavel Březina }
586fa3571753ab4a607d40fc31503fc0e8effd70Pavel Březina
586fa3571753ab4a607d40fc31503fc0e8effd70Pavel Březina iface_dp_backend_IsOnline_finish(sbus_req, online);
586fa3571753ab4a607d40fc31503fc0e8effd70Pavel Březina return EOK;
586fa3571753ab4a607d40fc31503fc0e8effd70Pavel Březina}