Author image Matthew Horsfall (alh)

NAME

Data::Validate::DNS::NAPTR::Regexp - Validate the NAPTR Regexp field per RFC 2915 / RFC 3403 Section 4

VERSION

version 0.007

SYNOPSIS

Functional API (uses globals!!):

  use Data::Validate::DNS::NAPTR::Regexp;

  # Using <<'EOF' to mirror master-file format exactly
  my $regexp = <<'EOF';
  !test(something)!\\1!i
  EOF

  # Kill newline
  $regexp =~ s/\n//;

  if (is_naptr_regexp($regexp)) {
    print "Regexp '$regexp' is okay!"; 
  } else {
    print "Regexp '$regexp' is invalid: " . naptr_regexp_error();
  }

  # Output:
  # Regexp '!test(something)!\\1!i' is okay!

Object API:

  use Data::Validate::DNS::NAPTR::Regexp ();

  my $v = Data::Validate::DNS::NAPTR::Regexp->new();

  # Using <<'EOF' to mirror master-file format exactly
  my $regexp = <<'EOF';
  !test(something)!\\1!i
  EOF

  # Kill newline
  $regexp =~ s/\n//;

  if ($v->is_naptr_regexp($regexp)) {
    print "Regexp '$regexp' is okay!";
  } else {
    print "Regexp '$regexp' is invalid: " . $v->naptr_regexp_error();
  }

  # Output:
  # Regexp '!test(something)!\\1!i' is okay!

  # $v->error() also works

DESCRIPTION

This module validates the Regexp field in the NAPTR DNS Resource Record as defined by RFC 2915 / RFC 3403 Section 4.

It assumes that the data is in master file format and suitable for use in a ISC BIND zone file.

It validates as much as possible, except the actual POSIX extended regular expression.

EXPORT

By default, "is_naptr_regexp" and "naptr_regexp_error" will be exported. If you're using the "OBJECT API", importing an empty list is recommended.

FUNCTIONAL API

Methods

is_naptr_regexp

  is_naptr_regexp('some-string');

Returns a true value if the provided string is a valid Regexp for an NAPTR record. Returns false otherwise. To determine why a Regexp is invalid, see "naptr_regexp_error" below.

naptr_regexp_error

  naptr_regexp_error();

Returns the last string error from a call to "is_naptr_regexp" above. This is only valid if "is_naptr_regexp" failed and returns a false value.

OBJECT API

This is the preferred method as the functional API uses globals.

Constructor

new

  Data::Validate::DNS::NAPTR::Regexp->new(%args)

Currently no %args are available but this may change in the future.

is_naptr_regexp

  $v->is_naptr_regexp('some-string');

See "is_naptr_regexp" above.

naptr_regexp_error

  $v->naptr_regexp_error();

See "naptr_regexp_error" above.

error

  $v->error();

See "naptr_regexp_error" above.

NOTES

This lib validates the data in master-file format. In RFC 2915, there are examples like:

  IN NAPTR 100   10   ""  ""  "/urn:cid:.+@([^\.]+\.)(.*)$/\2/i"    .

To enter the above into a master-file, all backslashes must be escaped, and so it would look like this:

  IN NAPTR 100   10   ""  ""  "/urn:cid:.+@([^\\.]+\\.)(.*)$/\\2/i"    .

To enter this manually into a Perl script and check it, you'd have to escape all backslashes AGAIN:

  my $regexp = '/urn:cid:.+@([^\\\\.]+\\\\.)(.*)$/\\\\2/i';

Or, if you use a here doc, you can enter it just as you would if putting it in a zone file (but you must clean up the newline):

  my $regexp = <<'EOF';
  /urn:cid:.+@([^\\.]+\\.)(.*)$/\\2/i
  EOF

  $regexp =~ s/\n//;

The single-quote characters around "EOF" above are necessary or the backslashes will be interpolated!

SEE ALSO

RFC 2915 - https://tools.ietf.org/html/rfc2915

RFC 3403 - Obsoletes RFC 2915 - https://tools.ietf.org/html/rfc3403

AUTHOR

Matthew Horsfall (alh) - <wolfsage@gmail.com>

CREDITS

The logic for this module was adapted from ISC's BIND - https://www.isc.org/software/bind.

COPYRIGHT AND LICENSE

Copyright (C) 2013 Dyn, Inc.

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.8.9 or, at your option, any later version of Perl 5 you may have available.