Adam Tkac 3e86a6
diff -up bind-9.8.0rc1/bin/named/include/named/globals.h.libnm bind-9.8.0rc1/bin/named/include/named/globals.h
Adam Tkac 3e86a6
--- bind-9.8.0rc1/bin/named/include/named/globals.h.libnm	2011-02-22 16:08:19.538575568 +0100
Adam Tkac 3e86a6
+++ bind-9.8.0rc1/bin/named/include/named/globals.h	2011-02-22 16:08:37.779101415 +0100
Adam Tkac 3e86a6
@@ -151,6 +151,7 @@ EXTERN isc_boolean_t		ns_g_memstatistics
Adam Tkac 3e86a6
 EXTERN isc_boolean_t		ns_g_clienttest		INIT(ISC_FALSE);
Adam Tkac 3e86a6
 EXTERN isc_boolean_t		ns_g_nosoa		INIT(ISC_FALSE);
Adam Tkac 3e86a6
 EXTERN isc_boolean_t		ns_g_noaa		INIT(ISC_FALSE);
Adam Tkac 3e86a6
+EXTERN isc_boolean_t		ns_g_libnm		INIT(ISC_FALSE);
Adam Tkac 3e86a6
 
Adam Tkac 3e86a6
 #undef EXTERN
Adam Tkac 3e86a6
 #undef INIT
Adam Tkac 3e86a6
diff -up bind-9.8.0rc1/bin/named/include/named/server.h.libnm bind-9.8.0rc1/bin/named/include/named/server.h
Adam Tkac 3e86a6
--- bind-9.8.0rc1/bin/named/include/named/server.h.libnm	2011-02-22 16:09:03.039788866 +0100
Adam Tkac 3e86a6
+++ bind-9.8.0rc1/bin/named/include/named/server.h	2011-02-22 16:10:40.552722679 +0100
Adam Tkac 3e86a6
@@ -34,9 +34,12 @@
Adam Tkac 3e86a6
 
Adam Tkac 3e86a6
 #include <named/types.h>
Adam Tkac 3e86a6
 
Adam Tkac 3e86a6
+#include <libnmserver/libnmserver.h>
Adam Tkac 3e86a6
+
Adam Tkac 3e86a6
 #define NS_EVENTCLASS		ISC_EVENTCLASS(0x4E43)
Adam Tkac 3e86a6
 #define NS_EVENT_RELOAD		(NS_EVENTCLASS + 0)
Adam Tkac 3e86a6
 #define NS_EVENT_CLIENTCONTROL	(NS_EVENTCLASS + 1)
Adam Tkac 3e86a6
+#define NS_EVENT_NSEVENT	(NS_EVENTCLASS + 2)
Adam Tkac 3e86a6
 
Adam Tkac 3e86a6
 /*%
Adam Tkac 3e86a6
  * Name server state.  Better here than in lots of separate global variables.
Adam Tkac 3e86a6
@@ -114,6 +117,8 @@ struct ns_server {
Adam Tkac 3e86a6
 	dns_name_t		*session_keyname;
Adam Tkac 3e86a6
 	unsigned int		session_keyalg;
Adam Tkac 3e86a6
 	isc_uint16_t		session_keybits;
Adam Tkac 3e86a6
+
Adam Tkac 3e86a6
+	nmserver_control_t	*nmcontrol;
Adam Tkac 3e86a6
 };
Adam Tkac 3e86a6
 
Adam Tkac 3e86a6
 #define NS_SERVER_MAGIC			ISC_MAGIC('S','V','E','R')
Adam Tkac 3e86a6
diff -up bind-9.8.0rc1/bin/named/main.c.libnm bind-9.8.0rc1/bin/named/main.c
Adam Tkac 3e86a6
--- bind-9.8.0rc1/bin/named/main.c.libnm	2011-02-22 16:06:25.835268500 +0100
Adam Tkac 3e86a6
+++ bind-9.8.0rc1/bin/named/main.c	2011-02-22 16:06:25.845268792 +0100
Adam Tkac 3e86a6
@@ -416,7 +416,7 @@ parse_command_line(int argc, char *argv[
Adam Tkac 3e86a6
 
Adam Tkac 3e86a6
 	isc_commandline_errprint = ISC_FALSE;
Adam Tkac 3e86a6
 	while ((ch = isc_commandline_parse(argc, argv,
Adam Tkac 3e86a6
-					   "46c:C:d:E:fFgi:lm:n:N:p:P:"
Adam Tkac 3e86a6
+					   "46c:C:d:DE:fFgi:lm:n:N:p:P:"
Adam Tkac 3e86a6
 					   "sS:t:T:u:vVx:")) != -1) {
Adam Tkac 3e86a6
 		switch (ch) {
Adam Tkac 3e86a6
 		case '4':
Adam Tkac 3e86a6
@@ -448,6 +448,9 @@ parse_command_line(int argc, char *argv[
Adam Tkac 3e86a6
 				ns_main_earlyfatal("cannot specify -c and -C");
Adam Tkac 3e86a6
 			lwresd_g_useresolvconf = ISC_TRUE;
Adam Tkac 3e86a6
 			break;
Adam Tkac 3e86a6
+		case 'D':
Adam Tkac 3e86a6
+			ns_g_libnm = ISC_TRUE;
Adam Tkac 3e86a6
+			break;
Adam Tkac 3e86a6
 		case 'd':
Adam Tkac 3e86a6
 			ns_g_debuglevel = parse_int(isc_commandline_argument,
Adam Tkac 3e86a6
 						    "debug level");
Adam Tkac 3e86a6
diff -up bind-9.8.0rc1/bin/named/Makefile.in.libnm bind-9.8.0rc1/bin/named/Makefile.in
Adam Tkac 3e86a6
--- bind-9.8.0rc1/bin/named/Makefile.in.libnm	2011-02-22 16:06:25.835268500 +0100
Adam Tkac 3e86a6
+++ bind-9.8.0rc1/bin/named/Makefile.in	2011-02-22 16:06:25.945271687 +0100
Adam Tkac 3e86a6
@@ -45,7 +45,7 @@ CINCLUDES =	-I${srcdir}/include -I${srcd
Adam Tkac 3e86a6
 		${ISCCFG_INCLUDES} ${ISCCC_INCLUDES} ${ISC_INCLUDES} \
Adam Tkac 3e86a6
 		${DLZDRIVER_INCLUDES} ${DBDRIVER_INCLUDES} @DST_OPENSSL_INC@
Adam Tkac 3e86a6
 
Adam Tkac 3e86a6
-CDEFINES =      @USE_DLZ@ @USE_PKCS11@ @USE_OPENSSL@
Adam Tkac 3e86a6
+CDEFINES =      @USE_DLZ@ @USE_PKCS11@ @USE_OPENSSL@ @LIBNMSERVER_CPPFLAGS@
Adam Tkac 3e86a6
 
Adam Tkac 3e86a6
 CWARNINGS =
Adam Tkac 3e86a6
 
Adam Tkac 3e86a6
@@ -69,11 +69,11 @@ DEPLIBS =	${LWRESDEPLIBS} ${DNSDEPLIBS} 
Adam Tkac 3e86a6
 
Adam Tkac 3e86a6
 LIBS =		${LWRESLIBS} ${DNSLIBS} ${BIND9LIBS} \
Adam Tkac 3e86a6
 		${ISCCFGLIBS} ${ISCCCLIBS} ${ISCLIBS} \
Adam Tkac 3e86a6
-		${DLZDRIVER_LIBS} ${DBDRIVER_LIBS} @LIBS@
Adam Tkac 3e86a6
+		${DLZDRIVER_LIBS} ${DBDRIVER_LIBS} @LIBNMSERVER_LIBS@ @LIBS@
Adam Tkac 3e86a6
 
Adam Tkac 3e86a6
 NOSYMLIBS =	${LWRESLIBS} ${DNSLIBS} ${BIND9LIBS} \
Adam Tkac 3e86a6
 		${ISCCFGLIBS} ${ISCCCLIBS} ${ISCNOSYMLIBS} \
Adam Tkac 3e86a6
-		${DLZDRIVER_LIBS} ${DBDRIVER_LIBS} @LIBS@
Adam Tkac 3e86a6
+		${DLZDRIVER_LIBS} ${DBDRIVER_LIBS} @LIBNMSERVER_LIBS@ @LIBS@
Adam Tkac 3e86a6
 
Adam Tkac 3e86a6
 SUBDIRS =	unix
Adam Tkac 3e86a6
 
Adam Tkac 3e86a6
diff -up bind-9.8.0rc1/bin/named/server.c.libnm bind-9.8.0rc1/bin/named/server.c
Adam Tkac 3e86a6
--- bind-9.8.0rc1/bin/named/server.c.libnm	2011-02-22 16:06:25.845268792 +0100
Adam Tkac 3e86a6
+++ bind-9.8.0rc1/bin/named/server.c	2011-02-22 16:06:26.065275159 +0100
Adam Tkac 3e86a6
@@ -111,6 +111,8 @@
Adam Tkac 3e86a6
 #include <stdlib.h>
Adam Tkac 3e86a6
 #endif
Adam Tkac 3e86a6
 
Adam Tkac 3e86a6
+#include <libnmserver/libnmserver.h>
Adam Tkac 3e86a6
+
Adam Tkac 3e86a6
 #ifndef PATH_MAX
Adam Tkac 3e86a6
 #define PATH_MAX 1024
Adam Tkac 3e86a6
 #endif
Adam Tkac 3e86a6
@@ -216,6 +218,12 @@ struct cfg_context {
Adam Tkac 3e86a6
 	cfg_aclconfctx_t		actx;
Adam Tkac 3e86a6
 };
Adam Tkac 3e86a6
 
Adam Tkac 3e86a6
+typedef struct nmserver_nsevent {
Adam Tkac 3e86a6
+	ISC_EVENT_COMMON(struct nmserver_nsevent);
Adam Tkac 3e86a6
+	ns_server_t		*server;
Adam Tkac 3e86a6
+	isc_sockaddrlist_t	*fwds;
Adam Tkac 3e86a6
+} nmserver_nsevent_t;
Adam Tkac 3e86a6
+
Adam Tkac 3e86a6
 /*
Adam Tkac 3e86a6
  * These zones should not leak onto the Internet.
Adam Tkac 3e86a6
  */
Adam Tkac 3e86a6
@@ -2366,9 +2372,15 @@ configure_view(dns_view_t *view, cfg_par
Adam Tkac 3e86a6
 	forwarders = NULL;
Adam Tkac 3e86a6
 	(void)ns_config_get(maps, "forward", &forwardtype);
Adam Tkac 3e86a6
 	(void)ns_config_get(maps, "forwarders", &forwarders);
Adam Tkac 3e86a6
-	if (forwarders != NULL)
Adam Tkac 3e86a6
+	if (forwarders != NULL) {
Adam Tkac 3e86a6
+		if (ns_g_libnm)
Adam Tkac 3e86a6
+			fatal("Cannot use \"forwarders\" directive and "
Adam Tkac 3e86a6
+			      "\"-D\" parameter simultaneously",
Adam Tkac 3e86a6
+			      ISC_R_FAILURE);
Adam Tkac 3e86a6
+
Adam Tkac 3e86a6
 		CHECK(configure_forward(config, view, dns_rootname,
Adam Tkac 3e86a6
 					forwarders, forwardtype));
Adam Tkac 3e86a6
+	}
Adam Tkac 3e86a6
 
Adam Tkac 3e86a6
 	/*
Adam Tkac 3e86a6
 	 * Dual Stack Servers.
Adam Tkac 3e86a6
@@ -5161,6 +5173,126 @@ load_new_zones(ns_server_t *server, isc_
Adam Tkac 3e86a6
 }
Adam Tkac 3e86a6
 
Adam Tkac 3e86a6
 static void
Adam Tkac 3e86a6
+nmserver_errcallback(nmserver_result_t result) {
Adam Tkac 3e86a6
+	isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL, NS_LOGMODULE_SERVER,
Adam Tkac 3e86a6
+		      ISC_LOG_ERROR, "got error from libnmserver: %d", result);
Adam Tkac 3e86a6
+}
Adam Tkac 3e86a6
+
Adam Tkac 3e86a6
+static void
Adam Tkac 3e86a6
+update_forwarders(isc_task_t *task, isc_event_t *event) {
Adam Tkac 3e86a6
+	isc_result_t result;
Adam Tkac 3e86a6
+	dns_view_t *view;
Adam Tkac 3e86a6
+	isc_sockaddr_t *sa;
Adam Tkac 3e86a6
+	nmserver_nsevent_t *nsevent = (nmserver_nsevent_t *)event;
Adam Tkac 3e86a6
+        ns_server_t *server = nsevent->server;
Adam Tkac 3e86a6
+	isc_sockaddrlist_t *salist = nsevent->fwds;
Adam Tkac 3e86a6
+
Adam Tkac 3e86a6
+        INSIST(task = server->task);
Adam Tkac 3e86a6
+
Adam Tkac 3e86a6
+	result = isc_task_beginexclusive(server->task);
Adam Tkac 3e86a6
+	RUNTIME_CHECK(result == ISC_R_SUCCESS);
Adam Tkac 3e86a6
+
Adam Tkac 3e86a6
+	/* Update forwarders in all views */
Adam Tkac 3e86a6
+	for (view = ISC_LIST_HEAD(server->viewlist);
Adam Tkac 3e86a6
+	     view != NULL;
Adam Tkac 3e86a6
+	     view = ISC_LIST_NEXT(view, link)) {
Adam Tkac 3e86a6
+		(void) dns_fwdtable_delete(view->fwdtable, dns_rootname);
Adam Tkac 3e86a6
+
Adam Tkac 3e86a6
+		CHECKFATAL(dns_fwdtable_add(view->fwdtable, dns_rootname,
Adam Tkac 3e86a6
+			   salist, dns_fwdpolicy_only),
Adam Tkac 3e86a6
+			   "adding forwarders from libnmserver");
Adam Tkac 3e86a6
+		isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL, NS_LOGMODULE_SERVER,
Adam Tkac 3e86a6
+			      ISC_LOG_ERROR, "forwarder added");
Adam Tkac 3e86a6
+	}
Adam Tkac 3e86a6
+
Adam Tkac 3e86a6
+	isc_task_endexclusive(server->task);
Adam Tkac 3e86a6
+
Adam Tkac 3e86a6
+	while (!ISC_LIST_EMPTY(*salist)) {
Adam Tkac 3e86a6
+		sa = ISC_LIST_HEAD(*salist);
Adam Tkac 3e86a6
+		ISC_LIST_UNLINK(*salist, sa, link);
Adam Tkac 3e86a6
+		isc_mem_put(server->mctx, sa, sizeof(*sa));
Adam Tkac 3e86a6
+	}
Adam Tkac 3e86a6
+	isc_mem_put(server->mctx, salist, sizeof(*salist));
Adam Tkac 3e86a6
+	isc_mem_put(server->mctx, nsevent, sizeof(*nsevent));
Adam Tkac 3e86a6
+}
Adam Tkac 3e86a6
+
Adam Tkac 3e86a6
+static void
Adam Tkac 3e86a6
+nmserver_nscallback(in_addr_t *servers, void *data) {
Adam Tkac 3e86a6
+	in_addr_t *ptr;
Adam Tkac 3e86a6
+	isc_sockaddr_t *sa;
Adam Tkac 3e86a6
+	isc_sockaddrlist_t *salist;
Adam Tkac 3e86a6
+	char str[ISC_SOCKADDR_FORMATSIZE];
Adam Tkac 3e86a6
+	nmserver_nsevent_t *nsevent;
Adam Tkac 3e86a6
+	isc_result_t result = ISC_R_SUCCESS;
Adam Tkac 3e86a6
+	ns_server_t *server = (ns_server_t *)data;
Adam Tkac 3e86a6
+
Adam Tkac 3e86a6
+	isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL, NS_LOGMODULE_SERVER,
Adam Tkac 3e86a6
+		      ISC_LOG_ERROR, "got servers");
Adam Tkac 3e86a6
+
Adam Tkac 3e86a6
+	salist = isc_mem_get(server->mctx, sizeof(*salist));
Adam Tkac 3e86a6
+	if (salist == NULL) {
Adam Tkac 3e86a6
+		result = ISC_R_NOMEMORY;
Adam Tkac 3e86a6
+		goto cleanup;
Adam Tkac 3e86a6
+	}
Adam Tkac 3e86a6
+	ISC_LIST_INIT(*salist);
Adam Tkac 3e86a6
+
Adam Tkac 3e86a6
+	for (ptr = servers; *ptr != 0; ptr++) {
Adam Tkac 3e86a6
+		sa = isc_mem_get(server->mctx, sizeof(*sa));
Adam Tkac 3e86a6
+		if (sa == NULL) {
Adam Tkac 3e86a6
+			result = ISC_R_NOMEMORY;
Adam Tkac 3e86a6
+			goto cleanup;
Adam Tkac 3e86a6
+		}
Adam Tkac 3e86a6
+#if 0
Adam Tkac 3e86a6
+		in_addr_t asd;
Adam Tkac 3e86a6
+		asd = htonl(10L <<  24 | 34L << 16 | 255L << 8 | 7);
Adam Tkac 3e86a6
+		isc_sockaddr_fromin(sa, (struct in_addr *) &asd, 53);
Adam Tkac 3e86a6
+#endif
Adam Tkac 3e86a6
+		isc_sockaddr_fromin(sa, (struct in_addr *)ptr, 53);
Adam Tkac 3e86a6
+		isc_sockaddr_format(sa, str, ISC_SOCKADDR_FORMATSIZE);
Adam Tkac 3e86a6
+		isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL, NS_LOGMODULE_SERVER,
Adam Tkac 3e86a6
+			      ISC_LOG_ERROR, "got forwarder %s", str);
Adam Tkac 3e86a6
+
Adam Tkac 3e86a6
+		ISC_LINK_INIT(sa, link);
Adam Tkac 3e86a6
+		ISC_LIST_APPEND(*salist, sa, link);
Adam Tkac 3e86a6
+	}
Adam Tkac 3e86a6
+
Adam Tkac 3e86a6
+	nsevent = (nmserver_nsevent_t *)
Adam Tkac 3e86a6
+		  isc_event_allocate(ns_g_mctx, server,
Adam Tkac 3e86a6
+				     NS_EVENT_NSEVENT,
Adam Tkac 3e86a6
+				     update_forwarders,
Adam Tkac 3e86a6
+				     NULL,
Adam Tkac 3e86a6
+				     sizeof(*nsevent));
Adam Tkac 3e86a6
+	if (nsevent == NULL) {
Adam Tkac 3e86a6
+		result = ISC_R_NOMEMORY;
Adam Tkac 3e86a6
+		goto cleanup;
Adam Tkac 3e86a6
+	}
Adam Tkac 3e86a6
+
Adam Tkac 3e86a6
+	nsevent->server = server;
Adam Tkac 3e86a6
+	nsevent->fwds = salist;
Adam Tkac 3e86a6
+	isc_task_send(server->task, ISC_EVENT_PTR(&nsevent));
Adam Tkac 3e86a6
+	result = ISC_R_SUCCESS;
Adam Tkac 3e86a6
+
Adam Tkac 3e86a6
+cleanup:
Adam Tkac 3e86a6
+
Adam Tkac 3e86a6
+	if (result == ISC_R_SUCCESS)
Adam Tkac 3e86a6
+		return;
Adam Tkac 3e86a6
+
Adam Tkac 3e86a6
+	isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL,
Adam Tkac 3e86a6
+		      NS_LOGMODULE_SERVER, ISC_LOG_ERROR,
Adam Tkac 3e86a6
+		      "Failed to obtain forwarders from libnmserver "
Adam Tkac 3e86a6
+		      "library: %s", isc_result_totext(result));
Adam Tkac 3e86a6
+
Adam Tkac 3e86a6
+	if (salist != NULL) {
Adam Tkac 3e86a6
+		while (!ISC_LIST_EMPTY(*salist)) {
Adam Tkac 3e86a6
+			sa = ISC_LIST_HEAD(*salist);
Adam Tkac 3e86a6
+			ISC_LIST_UNLINK(*salist, sa, link);
Adam Tkac 3e86a6
+			isc_mem_put(server->mctx, sa, sizeof(*sa));
Adam Tkac 3e86a6
+		}
Adam Tkac 3e86a6
+		isc_mem_put(server->mctx, salist, sizeof(*salist));
Adam Tkac 3e86a6
+	}
Adam Tkac 3e86a6
+}
Adam Tkac 3e86a6
+
Adam Tkac 3e86a6
+static void
Adam Tkac 3e86a6
 run_server(isc_task_t *task, isc_event_t *event) {
Adam Tkac 3e86a6
 	isc_result_t result;
Adam Tkac 3e86a6
 	ns_server_t *server = (ns_server_t *)event->ev_arg;
Adam Tkac 3e86a6
@@ -5212,6 +5344,25 @@ run_server(isc_task_t *task, isc_event_t
Adam Tkac 3e86a6
 
Adam Tkac 3e86a6
 	CHECKFATAL(load_zones(server, ISC_FALSE), "loading zones");
Adam Tkac 3e86a6
 
Adam Tkac 3e86a6
+	ns_g_server->nmcontrol = NULL;
Adam Tkac 3e86a6
+	if (ns_g_libnm) {
Adam Tkac 3e86a6
+		nmserver_control_t *control = NULL;
Adam Tkac 3e86a6
+		nmserver_result_t result;
Adam Tkac 3e86a6
+
Adam Tkac 3e86a6
+		result = nmserver_control_create(&control, server);
Adam Tkac 3e86a6
+		if (result != NMSERVER_R_OK)
Adam Tkac 3e86a6
+			fatal("loading libnmserver library", ISC_R_FAILURE);
Adam Tkac 3e86a6
+
Adam Tkac 3e86a6
+		nmserver_nscallback_register(control, &nmserver_nscallback);
Adam Tkac 3e86a6
+		nmserver_errcallback_register(control, &nmserver_errcallback);
Adam Tkac 3e86a6
+
Adam Tkac 3e86a6
+		result = nmserver_threaded_run(control);
Adam Tkac 3e86a6
+		if (result != NMSERVER_R_OK)
Adam Tkac 3e86a6
+			fatal("starting libnmserver library", ISC_R_FAILURE);
Adam Tkac 3e86a6
+
Adam Tkac 3e86a6
+		ns_g_server->nmcontrol = control;
Adam Tkac 3e86a6
+	}
Adam Tkac 3e86a6
+
Adam Tkac 3e86a6
 	ns_os_started();
Adam Tkac 3e86a6
 	isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL, NS_LOGMODULE_SERVER,
Adam Tkac 3e86a6
 		      ISC_LOG_NOTICE, "running");
Adam Tkac 3e86a6
@@ -5251,6 +5402,9 @@ shutdown_server(isc_task_t *task, isc_ev
Adam Tkac 3e86a6
 	cfg_obj_destroy(ns_g_parser, &ns_g_config);
Adam Tkac 3e86a6
 	cfg_parser_destroy(&ns_g_parser);
Adam Tkac 3e86a6
 
Adam Tkac 3e86a6
+	if (ns_g_server->nmcontrol)
Adam Tkac 3e86a6
+		nmserver_control_destroy(&ns_g_server->nmcontrol);
Adam Tkac 3e86a6
+
Adam Tkac 3e86a6
 	for (view = ISC_LIST_HEAD(server->viewlist);
Adam Tkac 3e86a6
 	     view != NULL;
Adam Tkac 3e86a6
 	     view = view_next) {
Adam Tkac 3e86a6
diff -up bind-9.8.0rc1/configure.in.libnm bind-9.8.0rc1/configure.in
Adam Tkac 3e86a6
--- bind-9.8.0rc1/configure.in.libnm	2011-02-03 06:50:05.000000000 +0100
Adam Tkac 3e86a6
+++ bind-9.8.0rc1/configure.in	2011-02-22 16:06:26.025274000 +0100
Adam Tkac 3e86a6
@@ -3251,6 +3258,30 @@ for e in $DNS_CRYPTO_LIBS ; do
Adam Tkac 3e86a6
 done
Adam Tkac 3e86a6
 DNS_CRYPTO_LIBS="$NEWFLAGS"
Adam Tkac 3e86a6
 
Adam Tkac 3e86a6
+LIBNMSERVER_CPPFLAGS=
Adam Tkac 3e86a6
+LIBNMSERVER_LIBS=
Adam Tkac 3e86a6
+AC_MSG_CHECKING(for libnmserver support)
Adam Tkac 3e86a6
+AC_ARG_WITH(libnmserver,
Adam Tkac 3e86a6
+	[  --with-libnmserver, libnmserver support requires pkg-config],
Adam Tkac 3e86a6
+	use_libnmserver="$withval", use_libnmserver="no")
Adam Tkac 3e86a6
+case "$use_libnmserver" in
Adam Tkac 3e86a6
+	no)
Adam Tkac 3e86a6
+		AC_MSG_RESULT(no)
Adam Tkac 3e86a6
+		;;
Adam Tkac 3e86a6
+	yes)
Adam Tkac 3e86a6
+		AC_MSG_RESULT(yes)
Adam Tkac 3e86a6
+		AC_PATH_PROG(PKGCONFIG, pkg-config)
Adam Tkac 3e86a6
+		LIBNMSERVER_CPPFLAGS=`$PKGCONFIG libnmserver --cflags`
Adam Tkac 3e86a6
+		LIBNMSERVER_LIBS=`$PKGCONFIG libnmserver --libs`
Adam Tkac 3e86a6
+		;;
Adam Tkac 3e86a6
+	*)
Adam Tkac 3e86a6
+		AC_MSG_ERROR(Specify yes or no)
Adam Tkac 3e86a6
+		;;
Adam Tkac 3e86a6
+esac
Adam Tkac 3e86a6
+
Adam Tkac 3e86a6
+AC_SUBST(LIBNMSERVER_CPPFLAGS)
Adam Tkac 3e86a6
+AC_SUBST(LIBNMSERVER_LIBS)
Adam Tkac 3e86a6
+
Adam Tkac 3e86a6
 AC_SUBST(BUILD_CC)
Adam Tkac 3e86a6
 AC_SUBST(BUILD_CFLAGS)
Adam Tkac 3e86a6
 AC_SUBST(BUILD_CPPFLAGS)