Extend --conf-dir to allow filtering on file suffixes.
diff --git a/CHANGELOG b/CHANGELOG
index d709adf..941b56f 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -30,6 +30,10 @@
 	    Include an RFC4191 route information option in router 
 	    advertisements for the prefix we're advertising. Thanks to 
 	    Ilya Ponetaev for the patch.
+
+	    Extend --conf-dir to allow filtering of files. So
+	    --conf-dir=/etc/dnsmasq.d,\*.conf
+	    will load all the files in /etc/dnsmasq.d which end in .conf
  
 
 version 2.71
diff --git a/dnsmasq.conf.example b/dnsmasq.conf.example
index 206f4d1..83924fc 100644
--- a/dnsmasq.conf.example
+++ b/dnsmasq.conf.example
@@ -640,3 +640,9 @@
 # Include another lot of configuration options.
 #conf-file=/etc/dnsmasq.more.conf
 #conf-dir=/etc/dnsmasq.d
+
+# Include all the files in a directory except those ending in .bak
+#conf-dir=/etc/dnsmasq.d,.bak
+
+# Include all files in a directory which end in .conf
+#conf-dir=/etc/dnsmasq.d/*.conf
\ No newline at end of file
diff --git a/man/dnsmasq.8 b/man/dnsmasq.8
index 7b4cc98..0b8e04f 100644
--- a/man/dnsmasq.8
+++ b/man/dnsmasq.8
@@ -1725,12 +1725,16 @@
 configuration files, to include multiple configuration files. A
 filename of "-" causes dnsmasq to read configuration from stdin.
 .TP
-.B \-7, --conf-dir=<directory>[,<file-extension>......]
+.B \-7, --conf-dir=<directory>[,<file-extension>......],
 Read all the files in the given directory as configuration
 files. If extension(s) are given, any files which end in those
 extensions are skipped. Any files whose names end in ~ or start with . or start and end
-with # are always skipped. This flag may be given on the command
-line or in a configuration file.
+with # are always skipped. If the extension starts with * then only files 
+which have that extension are loaded. So
+.B --conf-dir=/path/to/dir,*.conf
+loads all files with the suffix .conf in /path/to/dir. This flag may be given on the command
+line or in a configuration file. If giving it on the command line, be sure to
+escape * characters.
 .TP
 .B --servers-file=<file>
 A special case of 
diff --git a/src/option.c b/src/option.c
index 07e7d36..45d8875 100644
--- a/src/option.c
+++ b/src/option.c
@@ -1465,7 +1465,7 @@
 	struct list {
 	  char *suffix;
 	  struct list *next;
-	} *ignore_suffix = NULL, *li;
+	} *ignore_suffix = NULL, *match_suffix = NULL, *li;
 	
 	comma = split(arg);
 	if (!(directory = opt_string_alloc(arg)))
@@ -1475,10 +1475,20 @@
 	  {
 	    comma = split(arg);
 	    li = opt_malloc(sizeof(struct list));
-	    li->next = ignore_suffix;
-	    ignore_suffix = li;
-	    /* Have to copy: buffer is overwritten */
-	    li->suffix = opt_string_alloc(arg);
+	    if (*arg == '*')
+	      {
+		li->next = match_suffix;
+		match_suffix = li;
+		/* Have to copy: buffer is overwritten */
+		li->suffix = opt_string_alloc(arg+1);
+	      }
+	    else
+	      {
+		li->next = ignore_suffix;
+		ignore_suffix = li;
+		/* Have to copy: buffer is overwritten */
+		li->suffix = opt_string_alloc(arg);
+	      }
 	  };
 	
 	if (!(dir_stream = opendir(directory)))
@@ -1496,6 +1506,20 @@
 		ent->d_name[0] == '.')
 	      continue;
 
+	    if (match_suffix)
+	      {
+		for (li = match_suffix; li; li = li->next)
+		  {
+		    /* check for required suffices */
+		    size_t ls = strlen(li->suffix);
+		    if (len > ls &&
+			strcmp(li->suffix, &ent->d_name[len - ls]) == 0)
+		      break;
+		  }
+		if (!li)
+		  continue;
+	      }
+	    
 	    for (li = ignore_suffix; li; li = li->next)
 	      {
 		/* check for proscribed suffices */