summaryrefslogtreecommitdiff
path: root/server
diff options
context:
space:
mode:
Diffstat (limited to 'server')
-rw-r--r--server/monitor/monitor.c14
-rw-r--r--server/providers/data_provider.c19
-rw-r--r--server/providers/data_provider_be.c19
-rw-r--r--server/responder/nss/nsssrv.c20
-rw-r--r--server/responder/pam/pamsrv.c20
5 files changed, 91 insertions, 1 deletions
diff --git a/server/monitor/monitor.c b/server/monitor/monitor.c
index 1247842f..11c35d0f 100644
--- a/server/monitor/monitor.c
+++ b/server/monitor/monitor.c
@@ -34,6 +34,12 @@
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
+
+/* Needed for res_init() */
+#include <netinet/in.h>
+#include <arpa/nameser.h>
+#include <resolv.h>
+
#include "util/util.h"
#include "popt.h"
#include "tevent.h"
@@ -534,12 +540,18 @@ static int monitor_signal_reconf(struct config_file_ctx *file_ctx,
}
static int service_signal_dns_reload(struct mt_svc *svc);
-int monitor_update_resolv(struct config_file_ctx *file_ctx,
+static int monitor_update_resolv(struct config_file_ctx *file_ctx,
const char *filename)
{
+ int ret;
struct mt_svc *cur_svc;
DEBUG(2, ("Resolv.conf has been updated. Reloading.\n"));
+ ret = res_init();
+ if(ret != 0) {
+ return EIO;
+ }
+
/* Signal all services to reload their DNS configuration */
for(cur_svc = file_ctx->mt_ctx->svc_list; cur_svc; cur_svc = cur_svc->next) {
service_signal_dns_reload(cur_svc);
diff --git a/server/providers/data_provider.c b/server/providers/data_provider.c
index 677f677f..4dc9dfaa 100644
--- a/server/providers/data_provider.c
+++ b/server/providers/data_provider.c
@@ -31,6 +31,11 @@
#include <errno.h>
#include <security/pam_modules.h>
+/* Needed for res_init() */
+#include <netinet/in.h>
+#include <arpa/nameser.h>
+#include <resolv.h>
+
#include "popt.h"
#include "util/util.h"
#include "confdb/confdb.h"
@@ -83,11 +88,13 @@ static int dp_frontend_destructor(void *ctx);
static int service_identity(DBusMessage *message, struct sbus_conn_ctx *sconn);
static int service_pong(DBusMessage *message, struct sbus_conn_ctx *sconn);
static int service_reload(DBusMessage *message, struct sbus_conn_ctx *sconn);
+static int service_res_init(DBusMessage *message, struct sbus_conn_ctx *sconn);
struct sbus_method mon_sbus_methods[] = {
{ SERVICE_METHOD_IDENTITY, service_identity },
{ SERVICE_METHOD_PING, service_pong },
{ SERVICE_METHOD_RELOAD, service_reload },
+ { SERVICE_METHOD_RES_INIT, service_res_init },
{ NULL, NULL }
};
@@ -174,6 +181,18 @@ static int service_reload(DBusMessage *message, struct sbus_conn_ctx *sconn)
return service_pong(message, sconn);
}
+static int service_res_init(DBusMessage *message, struct sbus_conn_ctx *sconn)
+{
+ int ret;
+
+ ret = res_init();
+ if(ret != 0) {
+ return EIO;
+ }
+
+ return service_pong(message, sconn);
+}
+
static int dp_monitor_init(struct dp_ctx *dpctx)
{
int ret;
diff --git a/server/providers/data_provider_be.c b/server/providers/data_provider_be.c
index 24254d15..5cd59946 100644
--- a/server/providers/data_provider_be.c
+++ b/server/providers/data_provider_be.c
@@ -34,6 +34,11 @@
#include <security/pam_appl.h>
#include <security/pam_modules.h>
+/* Needed for res_init() */
+#include <netinet/in.h>
+#include <arpa/nameser.h>
+#include <resolv.h>
+
#include "popt.h"
#include "util/util.h"
#include "confdb/confdb.h"
@@ -51,10 +56,12 @@
static int service_identity(DBusMessage *message, struct sbus_conn_ctx *sconn);
static int service_pong(DBusMessage *message, struct sbus_conn_ctx *sconn);
+static int service_res_init(DBusMessage *message, struct sbus_conn_ctx *sconn);
struct sbus_method mon_sbus_methods[] = {
{ SERVICE_METHOD_IDENTITY, service_identity },
{ SERVICE_METHOD_PING, service_pong },
+ { SERVICE_METHOD_RES_INIT, service_res_init },
{ NULL, NULL }
};
@@ -137,6 +144,18 @@ static int service_pong(DBusMessage *message, struct sbus_conn_ctx *sconn)
return EOK;
}
+static int service_res_init(DBusMessage *message, struct sbus_conn_ctx *sconn)
+{
+ int ret;
+
+ ret = res_init();
+ if(ret != 0) {
+ return EIO;
+ }
+
+ return service_pong(message, sconn);
+}
+
static int be_identity(DBusMessage *message, struct sbus_conn_ctx *sconn)
{
dbus_uint16_t version = DATA_PROVIDER_VERSION;
diff --git a/server/responder/nss/nsssrv.c b/server/responder/nss/nsssrv.c
index e04a8c87..9a3d3c45 100644
--- a/server/responder/nss/nsssrv.c
+++ b/server/responder/nss/nsssrv.c
@@ -29,6 +29,12 @@
#include <string.h>
#include <sys/time.h>
#include <errno.h>
+
+/* Needed for res_init() */
+#include <netinet/in.h>
+#include <arpa/nameser.h>
+#include <resolv.h>
+
#include "popt.h"
#include "util/util.h"
#include "responder/nss/nsssrv.h"
@@ -49,11 +55,13 @@
static int service_identity(DBusMessage *message, struct sbus_conn_ctx *sconn);
static int service_pong(DBusMessage *message, struct sbus_conn_ctx *sconn);
static int service_reload(DBusMessage *message, struct sbus_conn_ctx *sconn);
+static int service_res_init(DBusMessage *message, struct sbus_conn_ctx *sconn);
struct sbus_method nss_sbus_methods[] = {
{SERVICE_METHOD_IDENTITY, service_identity},
{SERVICE_METHOD_PING, service_pong},
{SERVICE_METHOD_RELOAD, service_reload},
+ {SERVICE_METHOD_RES_INIT, service_res_init},
{NULL, NULL}
};
@@ -118,6 +126,18 @@ static int service_reload(DBusMessage *message, struct sbus_conn_ctx *sconn)
return service_pong(message, sconn);
}
+static int service_res_init(DBusMessage *message, struct sbus_conn_ctx *sconn)
+{
+ int ret;
+
+ ret = res_init();
+ if(ret != 0) {
+ return EIO;
+ }
+
+ return service_pong(message, sconn);
+}
+
static int nss_get_config(struct nss_ctx *nctx,
struct resp_ctx *rctx,
struct confdb_ctx *cdb)
diff --git a/server/responder/pam/pamsrv.c b/server/responder/pam/pamsrv.c
index e4ddc432..ef01e972 100644
--- a/server/responder/pam/pamsrv.c
+++ b/server/responder/pam/pamsrv.c
@@ -30,6 +30,12 @@
#include <string.h>
#include <sys/time.h>
#include <errno.h>
+
+/* Needed for res_init() */
+#include <netinet/in.h>
+#include <arpa/nameser.h>
+#include <resolv.h>
+
#include "popt.h"
#include "util/util.h"
#include "db/sysdb.h"
@@ -52,11 +58,13 @@
static int service_identity(DBusMessage *message, struct sbus_conn_ctx *sconn);
static int service_pong(DBusMessage *message, struct sbus_conn_ctx *sconn);
static int service_reload(DBusMessage *message, struct sbus_conn_ctx *sconn);
+static int service_res_init(DBusMessage *message, struct sbus_conn_ctx *sconn);
struct sbus_method sss_sbus_methods[] = {
{SERVICE_METHOD_IDENTITY, service_identity},
{SERVICE_METHOD_PING, service_pong},
{SERVICE_METHOD_RELOAD, service_reload},
+ {SERVICE_METHOD_RES_INIT, service_res_init},
{NULL, NULL}
};
@@ -108,6 +116,18 @@ static int service_pong(DBusMessage *message, struct sbus_conn_ctx *sconn)
return EOK;
}
+static int service_res_init(DBusMessage *message, struct sbus_conn_ctx *sconn)
+{
+ int ret;
+
+ ret = res_init();
+ if(ret != 0) {
+ return EIO;
+ }
+
+ return service_pong(message, sconn);
+}
+
static void pam_shutdown(struct resp_ctx *ctx);
static int service_reload(DBusMessage *message, struct sbus_conn_ctx *sconn) {