f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březina/*
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březina Authors:
d98fdd80331e93cd698281341360a3ce3e30afbePavel Březina Pavel Březina <pbrezina@redhat.com>
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březina
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březina Copyright (C) 2013 Red Hat
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březina
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březina This program is free software; you can redistribute it and/or modify
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březina it under the terms of the GNU General Public License as published by
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březina the Free Software Foundation; either version 3 of the License, or
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březina (at your option) any later version.
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březina
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březina This program is distributed in the hope that it will be useful,
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březina but WITHOUT ANY WARRANTY; without even the implied warranty of
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březina MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březina GNU General Public License for more details.
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březina
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březina You should have received a copy of the GNU General Public License
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březina along with this program. If not, see <http://www.gnu.org/licenses/>.
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březina*/
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březina
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březina#ifndef __FAIL_OVER_SRV_H__
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březina#define __FAIL_OVER_SRV_H__
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březina
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březina#include <talloc.h>
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březina#include <tevent.h>
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březina
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březina#include "resolv/async_resolv.h"
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březina
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březina/* SRV lookup plugin interface */
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březina
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březinastruct fo_server_info {
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březina char *host;
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březina int port;
002113460c411cab449c0d7dea824cea1a6c68e7Pavel Březina unsigned short priority;
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březina};
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březina
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březina/*
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březina * If discovery_domain is NULL, it should be detected automatically.
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březina */
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březinatypedef struct tevent_req *
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březina(*fo_srv_lookup_plugin_send_t)(TALLOC_CTX *mem_ctx,
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březina struct tevent_context *ev,
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březina const char *service,
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březina const char *protocol,
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březina const char *discovery_domain,
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březina void *pvt);
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březina
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březina/*
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březina * Returns:
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březina * EOK - at least one primary or backup server was found
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březina * ERR_SRV_NOT_FOUND - no primary nor backup server found
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březina * ERR_SRV_LOOKUP_ERROR - error communicating with SRV database
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březina * other code - depends on plugin
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březina *
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březina * If EOK is returned:
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březina * - and no primary server is found:
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březina * *_primary_servers = NULL
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březina * *_num_primary_servers = 0
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březina * - and no backup server is found:
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březina * *_backup_servers = NULL
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březina * *_num_backup_servers = 0
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březina * - *_dns_domain = DNS domain name where the servers were found
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březina */
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březinatypedef errno_t
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březina(*fo_srv_lookup_plugin_recv_t)(TALLOC_CTX *mem_ctx,
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březina struct tevent_req *req,
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březina char **_dns_domain,
8df69bbc58c2f4d3f0b34be9756d9ddf24b1db6dJakub Hrozek uint32_t *_ttl,
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březina struct fo_server_info **_primary_servers,
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březina size_t *_num_primary_servers,
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březina struct fo_server_info **_backup_servers,
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březina size_t *_num_backup_servers);
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březina
77d165f0629966db65753a3aee84a8b4971673afPavel Březinastruct tevent_req *fo_discover_srv_send(TALLOC_CTX *mem_ctx,
77d165f0629966db65753a3aee84a8b4971673afPavel Březina struct tevent_context *ev,
77d165f0629966db65753a3aee84a8b4971673afPavel Březina struct resolv_ctx *resolv_ctx,
77d165f0629966db65753a3aee84a8b4971673afPavel Březina const char *service,
77d165f0629966db65753a3aee84a8b4971673afPavel Březina const char *protocol,
77d165f0629966db65753a3aee84a8b4971673afPavel Březina const char **discovery_domains);
77d165f0629966db65753a3aee84a8b4971673afPavel Březina
77d165f0629966db65753a3aee84a8b4971673afPavel Březinaerrno_t fo_discover_srv_recv(TALLOC_CTX *mem_ctx,
77d165f0629966db65753a3aee84a8b4971673afPavel Březina struct tevent_req *req,
77d165f0629966db65753a3aee84a8b4971673afPavel Březina char **_dns_domain,
8df69bbc58c2f4d3f0b34be9756d9ddf24b1db6dJakub Hrozek uint32_t *_ttl,
77d165f0629966db65753a3aee84a8b4971673afPavel Březina struct fo_server_info **_servers,
77d165f0629966db65753a3aee84a8b4971673afPavel Březina size_t *_num_servers);
77d165f0629966db65753a3aee84a8b4971673afPavel Březina
1099620d87afcee7e239cbb75fd364643c8c1124Pavel Březinastruct tevent_req *fo_discover_servers_send(TALLOC_CTX *mem_ctx,
1099620d87afcee7e239cbb75fd364643c8c1124Pavel Březina struct tevent_context *ev,
1099620d87afcee7e239cbb75fd364643c8c1124Pavel Březina struct resolv_ctx *resolv_ctx,
1099620d87afcee7e239cbb75fd364643c8c1124Pavel Březina const char *service,
1099620d87afcee7e239cbb75fd364643c8c1124Pavel Březina const char *protocol,
1099620d87afcee7e239cbb75fd364643c8c1124Pavel Březina const char *primary_domain,
1099620d87afcee7e239cbb75fd364643c8c1124Pavel Březina const char *backup_domain);
1099620d87afcee7e239cbb75fd364643c8c1124Pavel Březina
1099620d87afcee7e239cbb75fd364643c8c1124Pavel Březinaerrno_t fo_discover_servers_recv(TALLOC_CTX *mem_ctx,
1099620d87afcee7e239cbb75fd364643c8c1124Pavel Březina struct tevent_req *req,
1099620d87afcee7e239cbb75fd364643c8c1124Pavel Březina char **_dns_domain,
8df69bbc58c2f4d3f0b34be9756d9ddf24b1db6dJakub Hrozek uint32_t *_ttl,
1099620d87afcee7e239cbb75fd364643c8c1124Pavel Březina struct fo_server_info **_primary_servers,
1099620d87afcee7e239cbb75fd364643c8c1124Pavel Březina size_t *_num_primary_servers,
1099620d87afcee7e239cbb75fd364643c8c1124Pavel Březina struct fo_server_info **_backup_servers,
1099620d87afcee7e239cbb75fd364643c8c1124Pavel Březina size_t *_num_backup_servers);
1099620d87afcee7e239cbb75fd364643c8c1124Pavel Březina
77d165f0629966db65753a3aee84a8b4971673afPavel Březina/* Simple SRV lookup plugin */
77d165f0629966db65753a3aee84a8b4971673afPavel Březina
77d165f0629966db65753a3aee84a8b4971673afPavel Březinastruct fo_resolve_srv_dns_ctx;
77d165f0629966db65753a3aee84a8b4971673afPavel Březina
77d165f0629966db65753a3aee84a8b4971673afPavel Březinastruct fo_resolve_srv_dns_ctx *
77d165f0629966db65753a3aee84a8b4971673afPavel Březinafo_resolve_srv_dns_ctx_init(TALLOC_CTX *mem_ctx,
77d165f0629966db65753a3aee84a8b4971673afPavel Březina struct resolv_ctx *resolv_ctx,
77d165f0629966db65753a3aee84a8b4971673afPavel Březina enum restrict_family family_order,
77d165f0629966db65753a3aee84a8b4971673afPavel Březina enum host_database *host_dbs,
77d165f0629966db65753a3aee84a8b4971673afPavel Březina const char *hostname,
77d165f0629966db65753a3aee84a8b4971673afPavel Březina const char *sssd_domain);
77d165f0629966db65753a3aee84a8b4971673afPavel Březina
77d165f0629966db65753a3aee84a8b4971673afPavel Březinastruct tevent_req *fo_resolve_srv_dns_send(TALLOC_CTX *mem_ctx,
77d165f0629966db65753a3aee84a8b4971673afPavel Březina struct tevent_context *ev,
77d165f0629966db65753a3aee84a8b4971673afPavel Březina const char *service,
77d165f0629966db65753a3aee84a8b4971673afPavel Březina const char *protocol,
77d165f0629966db65753a3aee84a8b4971673afPavel Březina const char *discovery_domain,
77d165f0629966db65753a3aee84a8b4971673afPavel Březina void *pvt);
77d165f0629966db65753a3aee84a8b4971673afPavel Březina
77d165f0629966db65753a3aee84a8b4971673afPavel Březinaerrno_t fo_resolve_srv_dns_recv(TALLOC_CTX *mem_ctx,
77d165f0629966db65753a3aee84a8b4971673afPavel Březina struct tevent_req *req,
77d165f0629966db65753a3aee84a8b4971673afPavel Březina char **_dns_domain,
8df69bbc58c2f4d3f0b34be9756d9ddf24b1db6dJakub Hrozek uint32_t *_ttl,
77d165f0629966db65753a3aee84a8b4971673afPavel Březina struct fo_server_info **_primary_servers,
77d165f0629966db65753a3aee84a8b4971673afPavel Březina size_t *_num_primary_servers,
77d165f0629966db65753a3aee84a8b4971673afPavel Březina struct fo_server_info **_backup_servers,
77d165f0629966db65753a3aee84a8b4971673afPavel Březina size_t *_num_backup_servers);
77d165f0629966db65753a3aee84a8b4971673afPavel Březina
f9961e5f82e0ef474d6492371bfdf9e74e208a99Pavel Březina#endif /* __FAIL_OVER_SRV_H__ */