The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

Data::Validate::DNS::NAPTR::Regexp - Validate the NAPTR Regexp field per RFC 2915

VERSION

version 0.004

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.

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

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

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.