summaryrefslogtreecommitdiff
path: root/src/providers/data_provider_fo.c
diff options
context:
space:
mode:
authorPavel Březina <pbrezina@redhat.com>2013-03-13 15:13:46 +0100
committerJakub Hrozek <jhrozek@redhat.com>2013-04-10 15:36:55 +0200
commit77d165f0629966db65753a3aee84a8b4971673af (patch)
tree19e9d6b94426dec048b02d56663da2a981516195 /src/providers/data_provider_fo.c
parentf9961e5f82e0ef474d6492371bfdf9e74e208a99 (diff)
downloadsssd-77d165f0629966db65753a3aee84a8b4971673af.tar.gz
sssd-77d165f0629966db65753a3aee84a8b4971673af.tar.bz2
sssd-77d165f0629966db65753a3aee84a8b4971673af.zip
DNS sites support - SRV DNS lookup plugin
https://fedorahosted.org/sssd/ticket/1032 This plugin mimics the current behaviour. If discovery_domain is set it is the only domain that is tried. If discovery_domain is not set, we try to autodetect domain first and if that fails or SRV lookup on this domain fails, we fallback to SSSD domain name.
Diffstat (limited to 'src/providers/data_provider_fo.c')
-rw-r--r--src/providers/data_provider_fo.c34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/providers/data_provider_fo.c b/src/providers/data_provider_fo.c
index 232717e7..83294b59 100644
--- a/src/providers/data_provider_fo.c
+++ b/src/providers/data_provider_fo.c
@@ -254,6 +254,40 @@ void be_fo_set_srv_lookup_plugin(struct be_ctx *ctx,
}
}
+errno_t be_fo_set_dns_srv_lookup_plugin(struct be_ctx *be_ctx,
+ const char *hostname)
+{
+ struct fo_resolve_srv_dns_ctx *srv_ctx = NULL;
+ char resolved_hostname[HOST_NAME_MAX];
+ errno_t ret;
+
+ if (hostname == NULL) {
+ ret = gethostname(resolved_hostname, HOST_NAME_MAX);
+ if (ret != EOK) {
+ ret = errno;
+ DEBUG(SSSDBG_CRIT_FAILURE,
+ ("gethostname() failed: [%d]: %s\n", ret, strerror(ret)));
+ return ret;
+ }
+ resolved_hostname[HOST_NAME_MAX-1] = '\0';
+ hostname = resolved_hostname;
+ }
+
+ srv_ctx = fo_resolve_srv_dns_ctx_init(be_ctx, be_ctx->be_res->resolv,
+ be_ctx->be_res->family_order,
+ default_host_dbs, hostname,
+ be_ctx->domain->name);
+ if (srv_ctx == NULL) {
+ DEBUG(SSSDBG_FATAL_FAILURE, ("Out of memory?\n"));
+ return ENOMEM;
+ }
+
+ be_fo_set_srv_lookup_plugin(be_ctx, fo_resolve_srv_dns_send,
+ fo_resolve_srv_dns_recv, srv_ctx, "DNS");
+
+ return EOK;
+}
+
int be_fo_add_srv_server(struct be_ctx *ctx,
const char *service_name,
const char *query_service,