--- bin/named/sdlz_helper.c_ORIG	2005-03-25 17:24:42.000000000 +0100
+++ bin/named/sdlz_helper.c	2005-03-25 20:09:45.000000000 +0100
@@ -75,7 +75,7 @@
 destroy_querylist(isc_mem_t *mctx, query_list_t **querylist);
 
 isc_result_t
-build_querylist(isc_mem_t *mctx, const char *query_str, char **zone,
+build_querylist(isc_mem_t *mctx, const char *query_str, char **zone, char **zone_domain, char **zone_tld,
 				char **record, char **client, query_list_t **querylist,
 				unsigned int flags);
 
@@ -118,12 +118,14 @@
 
 	/* constructs a query list by parsing a string into query segments */
 isc_result_t
-build_querylist(isc_mem_t *mctx, const char *query_str, char **zone,
+build_querylist(isc_mem_t *mctx, const char *query_str, char **zone, char **zone_domain, char **zone_tld,
 				char **record, char **client, query_list_t **querylist,
 				unsigned int flags)
 {
 	isc_result_t result;
 	isc_boolean_t foundzone = isc_boolean_false;
+	isc_boolean_t foundzone_domain = isc_boolean_false;
+	isc_boolean_t foundzone_tld = isc_boolean_false;
 	isc_boolean_t foundrecord = isc_boolean_false;
 	isc_boolean_t foundclient = isc_boolean_false;
 	char *temp_str = NULL;
@@ -213,6 +215,26 @@
                  // tseg->sql points in-directly poinsts to a string
 			tseg->direct = isc_boolean_false;  
 			foundclient = isc_boolean_true;
+			// check if we encountered zone_domain token (Extended patch)
+		} else if(strcasecmp(tseg->sql, "zone_domain") == 0){
+			// we don't really need, or want the "zone_domain" text, so get rid of it.
+			isc_mem_free(mctx, tseg->sql);
+			tseg->sql = (char **) zone_domain;
+			tseg->strlen = 0;
+			// tseg->sql points in-directly to a string
+			tseg->direct = isc_boolean_false;	
+			foundzone_domain = isc_boolean_true; // isn't usefull ... :-P
+			foundzone = isc_boolean_true; // no segfault
+			// check if we encountered zone_tld token (Extended patch)
+		} else if(strcasecmp(tseg->sql, "zone_tld") == 0){
+			// we don't really need, or want the "zone_tld" text, so get rid of it.
+			isc_mem_free(mctx, tseg->sql);
+			tseg->sql = (char **) zone_tld;
+			tseg->strlen = 0;
+			// tseg->sql points in-directly to a string
+			tseg->direct = isc_boolean_false;	
+			foundzone_tld = isc_boolean_true; // isn't usefull ...  :-P
+			foundzone = isc_boolean_true; // no segfault
 		}
 	}
 
@@ -346,6 +368,8 @@
 	db->client = NULL;
 	db->record = NULL;
 	db->zone = NULL;
+	db->zone_domain = NULL;
+	db->zone_tld = NULL;
 	db->mctx = NULL;
 	db->query_buf = NULL;
 	db->allnodes_q = NULL;
@@ -368,7 +392,7 @@
 	}
 
 		// build the all nodes query list
-	result = build_querylist(mctx, allnodes_str, &db->zone, &db->record, &db->client, 
+	result = build_querylist(mctx, allnodes_str, &db->zone, &db->zone_domain, &db->zone_tld, &db->record, &db->client, 
 				&db->allnodes_q, SDLZH_REQUIRE_ZONE);
 		// if unsuccessful, log err msg and cleanup
 	if(result != ISC_R_SUCCESS){
@@ -379,7 +403,7 @@
 	}
 
 		// build the allow zone transfer query list
-	result = build_querylist(mctx, allowxfr_str, &db->zone, &db->record, &db->client, 
+	result = build_querylist(mctx, allowxfr_str, &db->zone, &db->zone_domain, &db->zone_tld, &db->record, &db->client, 
 				&db->allowxfr_q, SDLZH_REQUIRE_ZONE | SDLZH_REQUIRE_CLIENT);
 		// if unsuccessful, log err msg and cleanup
 	if(result != ISC_R_SUCCESS){
@@ -390,7 +414,7 @@
 	}
 
 		// build the authority query, query list
-	result = build_querylist(mctx, authority_str, &db->zone, &db->record, &db->client, 
+	result = build_querylist(mctx, authority_str, &db->zone, &db->zone_domain, &db->zone_tld, &db->record, &db->client, 
 				&db->authority_q, SDLZH_REQUIRE_ZONE);
 		// if unsuccessful, log err msg and cleanup
 	if(result != ISC_R_SUCCESS){
@@ -401,7 +425,7 @@
 	}
 
 		// build findzone query, query list
-	result = build_querylist(mctx, findzone_str, &db->zone, &db->record, &db->client, 
+	result = build_querylist(mctx, findzone_str, &db->zone, &db->zone_domain, &db->zone_tld, &db->record, &db->client, 
 				&db->findzone_q, SDLZH_REQUIRE_ZONE);
 		// if unsuccessful, log err msg and cleanup
 	if(result != ISC_R_SUCCESS){
@@ -412,7 +436,7 @@
 	}
 
 		// build countzone query, query list
-	result = build_querylist(mctx, countzone_str, &db->zone, &db->record, &db->client, 
+	result = build_querylist(mctx, countzone_str, &db->zone, &db->zone_domain, &db->zone_tld, &db->record, &db->client, 
 				&db->countzone_q, SDLZH_REQUIRE_ZONE);
 		// if unsuccessful, log err msg and cleanup
 	if(result != ISC_R_SUCCESS){
@@ -423,7 +447,7 @@
 	}
 	
 		// build lookup query, query list
-	result = build_querylist(mctx, lookup_str, &db->zone, &db->record, &db->client, 
+	result = build_querylist(mctx, lookup_str, &db->zone, &db->zone_domain, &db->zone_tld, &db->record, &db->client, 
 				&db->lookup_q, SDLZH_REQUIRE_RECORD);
 		// if unsuccessful, log err msg and cleanup
 	if(result != ISC_R_SUCCESS){
