Index: /trunk/DNSDB.pm
===================================================================
--- /trunk/DNSDB.pm	(revision 541)
+++ /trunk/DNSDB.pm	(revision 542)
@@ -209,4 +209,5 @@
 		max_fcgi_requests => 100,	# reasonable default?
 		force_refresh	=> 1,
+		lowercase	=> 0,	# mangle as little as possible by default
 	);
 
@@ -238,5 +239,5 @@
 
   # Several settings are booleans.  Handle multiple possible ways of setting them.
-  for my $boolopt ('log_failures', 'force_refresh') {
+  for my $boolopt ('log_failures', 'force_refresh', 'lowercase') {
     if ($self->{$boolopt} ne '1' && $self->{$boolopt} ne '0') {
       # true/false, on/off, yes/no all valid.
@@ -1335,4 +1336,5 @@
       $cfg->{perpage}		= $1 if /^perpage\s*=\s*(\d+)/i;
       $cfg->{exportcache}	= $1 if m{^exportcache\s*=\s*([a-z0-9/_.-]+)}i;
+      $cfg->{lowercase}		= $1 if /^lowercase\s*=\s*([a-z01]+)/i;
 # not supported in dns.cgi yet
 #      $cfg->{templatedir}	= $1 if m{^templatedir\s*=\s*([a-z0-9/_.-]+)}i;
@@ -1819,4 +1821,6 @@
 
   return ('FAIL',"Invalid domain status") if $state !~ /^\d+$/;
+
+  $domain = lc($domain) if $self->{lowercase};
 
   return ('FAIL', "Invalid characters in domain") if $domain !~ /^[a-zA-Z0-9_.-]+$/;
@@ -3691,4 +3695,18 @@
   }
 
+  if ($self->{lowercase}) {
+    if ($typemap{$$rectype} ne 'TXT') {
+      $$host = lc($$host);
+      $$val = lc($$val);
+    } else {
+      # TXT records should preserve user entry in the string.
+      if ($revrec eq 'n') {
+        $$host = lc($$host);
+      } else {
+        $$val = lc($$val);
+      }
+    }
+  }
+
   # prep for validation
   my $addr = NetAddr::IP->new($$val);
@@ -3822,4 +3840,18 @@
     $$val =~ s/^\s+//;
     $$val =~ s/\s+$//;
+  }
+
+  if ($self->{lowercase}) {
+    if ($typemap{$$rectype} ne 'TXT') {
+      $$host = lc($$host);
+      $$val = lc($$val);
+    } else {
+      # TXT records should preserve user entry in the string.
+      if ($revrec eq 'n') {
+        $$host = lc($$host);
+      } else {
+        $$val = lc($$val);
+      }
+    }
   }
 
