ifp_iface.c revision c747b0c875785ce693f70b50bdda0237c4b04e35
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen/*
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen Authors:
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen Pavel Březina <pbrezina@redhat.com>
8aacc9e7c84f8376822823ec98c2f551d4919b2eTimo Sirainen
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen Copyright (C) 2015 Red Hat
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen This program is free software; you can redistribute it and/or modify
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen it under the terms of the GNU General Public License as published by
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen the Free Software Foundation; either version 3 of the License, or
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen (at your option) any later version.
e06c0b65c16ccce69bbee009ead14d7d3d17a256Timo Sirainen
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen This program is distributed in the hope that it will be useful,
a0d34d3982507f513a9d800082481e9faeb9a943Timo Sirainen but WITHOUT ANY WARRANTY; without even the implied warranty of
a0d34d3982507f513a9d800082481e9faeb9a943Timo Sirainen MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
bbf796c17f02538058d7559bfe96d677e5b55015Timo Sirainen GNU General Public License for more details.
e6d7d19c328e7043ad35d5a52c1617bde915a16fTimo Sirainen
d7095f3a4466fbb78b2d5eb3d322bc15a5b0ab1fTimo Sirainen You should have received a copy of the GNU General Public License
d7095f3a4466fbb78b2d5eb3d322bc15a5b0ab1fTimo Sirainen along with this program. If not, see <http://www.gnu.org/licenses/>.
d7095f3a4466fbb78b2d5eb3d322bc15a5b0ab1fTimo Sirainen*/
d7095f3a4466fbb78b2d5eb3d322bc15a5b0ab1fTimo Sirainen
bbf796c17f02538058d7559bfe96d677e5b55015Timo Sirainen#include <dbus/dbus.h>
bbf796c17f02538058d7559bfe96d677e5b55015Timo Sirainen
bbf796c17f02538058d7559bfe96d677e5b55015Timo Sirainen#include "sbus/sssd_dbus.h"
bbf796c17f02538058d7559bfe96d677e5b55015Timo Sirainen#include "responder/ifp/ifp_iface_generated.h"
bbf796c17f02538058d7559bfe96d677e5b55015Timo Sirainen#include "responder/ifp/ifp_domains.h"
1b3bb8d39686ed24730cbc31cc9a33dc62c8c6c3Timo Sirainen#include "responder/ifp/ifp_components.h"
e6d7d19c328e7043ad35d5a52c1617bde915a16fTimo Sirainen#include "responder/ifp/ifp_users.h"
e6d7d19c328e7043ad35d5a52c1617bde915a16fTimo Sirainen
e6d7d19c328e7043ad35d5a52c1617bde915a16fTimo Sirainenstruct iface_ifp iface_ifp = {
bbf796c17f02538058d7559bfe96d677e5b55015Timo Sirainen { &iface_ifp_meta, 0 },
8aacc9e7c84f8376822823ec98c2f551d4919b2eTimo Sirainen .Ping = ifp_ping,
e06c0b65c16ccce69bbee009ead14d7d3d17a256Timo Sirainen
e06c0b65c16ccce69bbee009ead14d7d3d17a256Timo Sirainen /* components */
e06c0b65c16ccce69bbee009ead14d7d3d17a256Timo Sirainen .ListComponents = ifp_list_components,
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen .ListResponders = ifp_list_responders,
d482b35af87f5fd872bad007da0475813a401a49Timo Sirainen .ListBackends = ifp_list_backends,
d482b35af87f5fd872bad007da0475813a401a49Timo Sirainen .FindMonitor = ifp_find_monitor,
d482b35af87f5fd872bad007da0475813a401a49Timo Sirainen .FindResponderByName = ifp_find_responder_by_name,
d482b35af87f5fd872bad007da0475813a401a49Timo Sirainen .FindBackendByName = ifp_find_backend_by_name,
d482b35af87f5fd872bad007da0475813a401a49Timo Sirainen
d482b35af87f5fd872bad007da0475813a401a49Timo Sirainen .GetUserAttr = ifp_user_get_attr,
d482b35af87f5fd872bad007da0475813a401a49Timo Sirainen .GetUserGroups = ifp_user_get_groups,
d482b35af87f5fd872bad007da0475813a401a49Timo Sirainen .ListDomains = ifp_list_domains,
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen .FindDomainByName = ifp_find_domain_by_name,
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen};
d482b35af87f5fd872bad007da0475813a401a49Timo Sirainen
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainenstruct iface_ifp_components iface_ifp_components = {
d482b35af87f5fd872bad007da0475813a401a49Timo Sirainen { &iface_ifp_components_meta, 0 },
d482b35af87f5fd872bad007da0475813a401a49Timo Sirainen .Enable = ifp_component_enable,
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen .Disable = ifp_component_disable,
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen .ChangeDebugLevel = ifp_component_change_debug_level,
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen .ChangeDebugLevelTemporarily = ifp_component_change_debug_level_tmp,
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen .get_name = ifp_component_get_name,
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen .get_debug_level = ifp_component_get_debug_level,
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen .get_enabled = ifp_component_get_enabled,
d482b35af87f5fd872bad007da0475813a401a49Timo Sirainen .get_type = ifp_component_get_type,
d482b35af87f5fd872bad007da0475813a401a49Timo Sirainen /* FIXME: This should be part of Components.Backends interface, onece
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen * SSSD supports multiple interfaces per object path. */
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen .get_providers = ifp_backend_get_providers
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen};
e06c0b65c16ccce69bbee009ead14d7d3d17a256Timo Sirainen
e06c0b65c16ccce69bbee009ead14d7d3d17a256Timo Sirainenstruct iface_ifp_domains iface_ifp_domains = {
e06c0b65c16ccce69bbee009ead14d7d3d17a256Timo Sirainen { &iface_ifp_domains_meta, 0 },
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen .get_name = ifp_dom_get_name,
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen .get_provider = ifp_dom_get_provider,
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen .get_primary_servers = ifp_dom_get_primary_servers,
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen .get_backup_servers = ifp_dom_get_backup_servers,
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen .get_min_id = ifp_dom_get_min_id,
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen .get_max_id = ifp_dom_get_max_id,
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen .get_realm = ifp_dom_get_realm,
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen .get_forest = ifp_dom_get_forest,
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen .get_login_format = ifp_dom_get_login_format,
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen .get_fully_qualified_name_format = ifp_dom_get_fqdn_format,
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen .get_enumerable = ifp_dom_get_enumerable,
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen .get_use_fully_qualified_names = ifp_dom_get_use_fqdn,
cd5ee8630497fdbd853ef588a858b4ef619a5e03Timo Sirainen .get_subdomain = ifp_dom_get_subdomain,
cd5ee8630497fdbd853ef588a858b4ef619a5e03Timo Sirainen .get_parent_domain = ifp_dom_get_parent_domain
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen};
7394389230750c45b105cdefb5850c81cae8cdc0Timo Sirainen
e06c0b65c16ccce69bbee009ead14d7d3d17a256Timo Sirainenstruct iface_ifp_users iface_ifp_users = {
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen { &iface_ifp_users_meta, 0 },
e06c0b65c16ccce69bbee009ead14d7d3d17a256Timo Sirainen .FindByName = ifp_users_find_by_name,
6a19e109ee8c5a6f688da83a86a7f6abeb71abddTimo Sirainen .FindByID = ifp_users_find_by_id,
6a19e109ee8c5a6f688da83a86a7f6abeb71abddTimo Sirainen .ListByName = ifp_users_list_by_name,
e06c0b65c16ccce69bbee009ead14d7d3d17a256Timo Sirainen .ListByDomainAndName = ifp_users_list_by_domain_and_name
03dbd273251103f745c08966f1809c02870390ffTimo Sirainen};
03dbd273251103f745c08966f1809c02870390ffTimo Sirainen
03dbd273251103f745c08966f1809c02870390ffTimo Sirainenstruct iface_map {
03dbd273251103f745c08966f1809c02870390ffTimo Sirainen const char *path;
03dbd273251103f745c08966f1809c02870390ffTimo Sirainen struct sbus_vtable *vtable;
03dbd273251103f745c08966f1809c02870390ffTimo Sirainen};
03dbd273251103f745c08966f1809c02870390ffTimo Sirainen
d7095f3a4466fbb78b2d5eb3d322bc15a5b0ab1fTimo Sirainenstatic struct iface_map iface_map[] = {
bbf796c17f02538058d7559bfe96d677e5b55015Timo Sirainen { IFP_PATH, &iface_ifp.vtable },
bbf796c17f02538058d7559bfe96d677e5b55015Timo Sirainen { IFP_PATH_DOMAINS_TREE, &iface_ifp_domains.vtable },
bbf796c17f02538058d7559bfe96d677e5b55015Timo Sirainen { IFP_PATH_COMPONENTS_TREE, &iface_ifp_components.vtable },
bbf796c17f02538058d7559bfe96d677e5b55015Timo Sirainen { IFP_PATH_USERS, &iface_ifp_users.vtable },
bbf796c17f02538058d7559bfe96d677e5b55015Timo Sirainen { NULL, NULL },
d7095f3a4466fbb78b2d5eb3d322bc15a5b0ab1fTimo Sirainen};
e6d7d19c328e7043ad35d5a52c1617bde915a16fTimo Sirainen
bbf796c17f02538058d7559bfe96d677e5b55015Timo Sirainenerrno_t ifp_register_sbus_interface(struct sbus_connection *conn, void *pvt)
e06c0b65c16ccce69bbee009ead14d7d3d17a256Timo Sirainen{
e06c0b65c16ccce69bbee009ead14d7d3d17a256Timo Sirainen errno_t ret;
567e57b09a49bbb2a146b13f8617698eb56237feTimo Sirainen int i;
567e57b09a49bbb2a146b13f8617698eb56237feTimo Sirainen
567e57b09a49bbb2a146b13f8617698eb56237feTimo Sirainen for (i = 0; iface_map[i].path != NULL; i++) {
e06c0b65c16ccce69bbee009ead14d7d3d17a256Timo Sirainen ret = sbus_conn_register_iface(conn, iface_map[i].vtable,
e06c0b65c16ccce69bbee009ead14d7d3d17a256Timo Sirainen iface_map[i].path, pvt);
53238473bf77147660aa6db9daa68a8a685e9381Timo Sirainen if (ret != EOK) {
e06c0b65c16ccce69bbee009ead14d7d3d17a256Timo Sirainen return ret;
3393dabdd2123699241b26b3f07345b6842d9d75Timo Sirainen }
7889c9f65e23c83fc31cecf304cab4ab070d6aa1Timo Sirainen }
7889c9f65e23c83fc31cecf304cab4ab070d6aa1Timo Sirainen
7889c9f65e23c83fc31cecf304cab4ab070d6aa1Timo Sirainen return EOK;
6a19e109ee8c5a6f688da83a86a7f6abeb71abddTimo Sirainen}
553dd384ceb91847ea10de023f026ebfdc2d782dTimo Sirainen