Merge pull request #497 from th-h/thh-netdns2
Add Net/DNS2.php 1.4.3 to core.
This commit is contained in:
commit
6a6a402cc3
1427
bundled-libs/Net/DNS2.php
Normal file
1427
bundled-libs/Net/DNS2.php
Normal file
File diff suppressed because it is too large
Load Diff
254
bundled-libs/Net/DNS2/BitMap.php
Normal file
254
bundled-libs/Net/DNS2/BitMap.php
Normal file
@ -0,0 +1,254 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2010 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 0.6.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* a class to handle converting RR bitmaps to arrays and back; used on NSEC
|
||||||
|
* and NSEC3 RR's
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_Packet
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_BitMap
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* parses a RR bitmap field defined in RFC3845, into an array of RR names.
|
||||||
|
*
|
||||||
|
* Type Bit Map(s) Field = ( Window Block # | Bitmap Length | Bitmap ) +
|
||||||
|
*
|
||||||
|
* @param string $data a bitmap stringto parse
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public static function bitMapToArray($data)
|
||||||
|
{
|
||||||
|
if (strlen($data) == 0) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
$output = array();
|
||||||
|
$offset = 0;
|
||||||
|
$length = strlen($data);
|
||||||
|
|
||||||
|
while ($offset < $length) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// unpack the window and length values
|
||||||
|
//
|
||||||
|
$x = unpack('@' . $offset . '/Cwindow/Clength', $data);
|
||||||
|
$offset += 2;
|
||||||
|
|
||||||
|
//
|
||||||
|
// copy out the bitmap value
|
||||||
|
//
|
||||||
|
$bitmap = unpack('C*', substr($data, $offset, $x['length']));
|
||||||
|
$offset += $x['length'];
|
||||||
|
|
||||||
|
//
|
||||||
|
// I'm not sure if there's a better way of doing this, but PHP doesn't
|
||||||
|
// have a 'B' flag for unpack()
|
||||||
|
//
|
||||||
|
$bitstr = '';
|
||||||
|
foreach ($bitmap as $r) {
|
||||||
|
|
||||||
|
$bitstr .= sprintf('%08b', $r);
|
||||||
|
}
|
||||||
|
|
||||||
|
$blen = strlen($bitstr);
|
||||||
|
for ($i=0; $i<$blen; $i++) {
|
||||||
|
|
||||||
|
if ($bitstr[$i] == '1') {
|
||||||
|
|
||||||
|
$type = $x['window'] * 256 + $i;
|
||||||
|
|
||||||
|
if (isset(Net_DNS2_Lookups::$rr_types_by_id[$type])) {
|
||||||
|
|
||||||
|
$output[] = Net_DNS2_Lookups::$rr_types_by_id[$type];
|
||||||
|
} else {
|
||||||
|
|
||||||
|
$output[] = 'TYPE' . $type;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $output;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* builds a RR Bit map from an array of RR type names
|
||||||
|
*
|
||||||
|
* @param array $data a list of RR names
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public static function arrayToBitMap(array $data)
|
||||||
|
{
|
||||||
|
if (count($data) == 0) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
$current_window = 0;
|
||||||
|
|
||||||
|
//
|
||||||
|
// go through each RR
|
||||||
|
//
|
||||||
|
$max = 0;
|
||||||
|
$bm = array();
|
||||||
|
|
||||||
|
foreach ($data as $rr) {
|
||||||
|
|
||||||
|
$rr = strtoupper($rr);
|
||||||
|
|
||||||
|
//
|
||||||
|
// get the type id for the RR
|
||||||
|
//
|
||||||
|
$type = @Net_DNS2_Lookups::$rr_types_by_name[$rr];
|
||||||
|
if (isset($type)) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// skip meta types or qtypes
|
||||||
|
//
|
||||||
|
if ( (isset(Net_DNS2_Lookups::$rr_qtypes_by_id[$type]))
|
||||||
|
|| (isset(Net_DNS2_Lookups::$rr_metatypes_by_id[$type]))
|
||||||
|
) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
//
|
||||||
|
// if it's not found, then it must be defined as TYPE<id>, per
|
||||||
|
// RFC3845 section 2.2, if it's not, we ignore it.
|
||||||
|
//
|
||||||
|
list($name, $type) = explode('TYPE', $rr);
|
||||||
|
if (!isset($type)) {
|
||||||
|
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// build the current window
|
||||||
|
//
|
||||||
|
$current_window = (int)($type / 256);
|
||||||
|
|
||||||
|
$val = $type - $current_window * 256.0;
|
||||||
|
if ($val > $max) {
|
||||||
|
$max = $val;
|
||||||
|
}
|
||||||
|
|
||||||
|
$bm[$current_window][$val] = 1;
|
||||||
|
$bm[$current_window]['length'] = ceil(($max + 1) / 8);
|
||||||
|
}
|
||||||
|
|
||||||
|
$output = '';
|
||||||
|
|
||||||
|
foreach ($bm as $window => $bitdata) {
|
||||||
|
|
||||||
|
$bitstr = '';
|
||||||
|
|
||||||
|
for ($i=0; $i<$bm[$window]['length'] * 8; $i++) {
|
||||||
|
if (isset($bm[$window][$i])) {
|
||||||
|
$bitstr .= '1';
|
||||||
|
} else {
|
||||||
|
$bitstr .= '0';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$output .= pack('CC', $window, $bm[$window]['length']);
|
||||||
|
$output .= pack('H*', self::bigBaseConvert($bitstr));
|
||||||
|
}
|
||||||
|
|
||||||
|
return $output;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* a base_convert that handles large numbers; forced to 2/16
|
||||||
|
*
|
||||||
|
* @param string $number a bit string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public static function bigBaseConvert($number)
|
||||||
|
{
|
||||||
|
$result = '';
|
||||||
|
|
||||||
|
$bin = substr(chunk_split(strrev($number), 4, '-'), 0, -1);
|
||||||
|
$temp = preg_split('[-]', $bin, -1, PREG_SPLIT_DELIM_CAPTURE);
|
||||||
|
|
||||||
|
for ($i = count($temp)-1;$i >= 0;$i--) {
|
||||||
|
|
||||||
|
$result = $result . base_convert(strrev($temp[$i]), 2, 16);
|
||||||
|
}
|
||||||
|
|
||||||
|
return strtoupper($result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
311
bundled-libs/Net/DNS2/Cache.php
Normal file
311
bundled-libs/Net/DNS2/Cache.php
Normal file
@ -0,0 +1,311 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2010 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 1.1.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A class to provide simple dns lookup caching.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_Packet
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_Cache
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* the filename of the cache file
|
||||||
|
*/
|
||||||
|
protected $cache_file = '';
|
||||||
|
|
||||||
|
/*
|
||||||
|
* the local data store for the cache
|
||||||
|
*/
|
||||||
|
protected $cache_data = array();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* the size of the cache to use
|
||||||
|
*/
|
||||||
|
protected $cache_size = 0;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* the cache serializer
|
||||||
|
*/
|
||||||
|
protected $cache_serializer;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* an internal flag to make sure we don't load the cache content more
|
||||||
|
* than once per instance.
|
||||||
|
*/
|
||||||
|
protected $cache_opened = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns true/false if the provided key is defined in the cache
|
||||||
|
*
|
||||||
|
* @param string $key the key to lookup in the local cache
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function has($key)
|
||||||
|
{
|
||||||
|
return isset($this->cache_data[$key]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns the value for the given key
|
||||||
|
*
|
||||||
|
* @param string $key the key to lookup in the local cache
|
||||||
|
*
|
||||||
|
* @return mixed returns the cache data on sucess, false on error
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function get($key)
|
||||||
|
{
|
||||||
|
if (isset($this->cache_data[$key])) {
|
||||||
|
|
||||||
|
if ($this->cache_serializer == 'json') {
|
||||||
|
return json_decode($this->cache_data[$key]['object']);
|
||||||
|
} else {
|
||||||
|
return unserialize($this->cache_data[$key]['object']);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* adds a new key/value pair to the cache
|
||||||
|
*
|
||||||
|
* @param string $key the key for the new cache entry
|
||||||
|
* @param mixed $data the data to store in cache
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function put($key, $data)
|
||||||
|
{
|
||||||
|
$ttl = 86400 * 365;
|
||||||
|
|
||||||
|
//
|
||||||
|
// clear the rdata values
|
||||||
|
//
|
||||||
|
$data->rdata = '';
|
||||||
|
$data->rdlength = 0;
|
||||||
|
|
||||||
|
//
|
||||||
|
// find the lowest TTL, and use that as the TTL for the whole cached
|
||||||
|
// object. The downside to using one TTL for the whole object, is that
|
||||||
|
// we'll invalidate entries before they actuall expire, causing a
|
||||||
|
// real lookup to happen.
|
||||||
|
//
|
||||||
|
// The upside is that we don't need to require() each RR type in the
|
||||||
|
// cache, so we can look at their individual TTL's on each run- we only
|
||||||
|
// unserialize the actual RR object when it's get() from the cache.
|
||||||
|
//
|
||||||
|
foreach ($data->answer as $index => $rr) {
|
||||||
|
|
||||||
|
if ($rr->ttl < $ttl) {
|
||||||
|
$ttl = $rr->ttl;
|
||||||
|
}
|
||||||
|
|
||||||
|
$rr->rdata = '';
|
||||||
|
$rr->rdlength = 0;
|
||||||
|
}
|
||||||
|
foreach ($data->authority as $index => $rr) {
|
||||||
|
|
||||||
|
if ($rr->ttl < $ttl) {
|
||||||
|
$ttl = $rr->ttl;
|
||||||
|
}
|
||||||
|
|
||||||
|
$rr->rdata = '';
|
||||||
|
$rr->rdlength = 0;
|
||||||
|
}
|
||||||
|
foreach ($data->additional as $index => $rr) {
|
||||||
|
|
||||||
|
if ($rr->ttl < $ttl) {
|
||||||
|
$ttl = $rr->ttl;
|
||||||
|
}
|
||||||
|
|
||||||
|
$rr->rdata = '';
|
||||||
|
$rr->rdlength = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->cache_data[$key] = array(
|
||||||
|
|
||||||
|
'cache_date' => time(),
|
||||||
|
'ttl' => $ttl
|
||||||
|
);
|
||||||
|
|
||||||
|
if ($this->cache_serializer == 'json') {
|
||||||
|
$this->cache_data[$key]['object'] = json_encode($data);
|
||||||
|
} else {
|
||||||
|
$this->cache_data[$key]['object'] = serialize($data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* runs a clean up process on the cache data
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function clean()
|
||||||
|
{
|
||||||
|
if (count($this->cache_data) > 0) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// go through each entry and adjust their TTL, and remove entries that
|
||||||
|
// have expired
|
||||||
|
//
|
||||||
|
$now = time();
|
||||||
|
|
||||||
|
foreach ($this->cache_data as $key => $data) {
|
||||||
|
|
||||||
|
$diff = $now - $data['cache_date'];
|
||||||
|
|
||||||
|
if ($data['ttl'] <= $diff) {
|
||||||
|
|
||||||
|
unset($this->cache_data[$key]);
|
||||||
|
} else {
|
||||||
|
|
||||||
|
$this->cache_data[$key]['ttl'] -= $diff;
|
||||||
|
$this->cache_data[$key]['cache_date'] = $now;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* runs a clean up process on the cache data
|
||||||
|
*
|
||||||
|
* @return mixed
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function resize()
|
||||||
|
{
|
||||||
|
if (count($this->cache_data) > 0) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// serialize the cache data
|
||||||
|
//
|
||||||
|
if ($this->cache_serializer == 'json') {
|
||||||
|
$cache = json_encode($this->cache_data);
|
||||||
|
} else {
|
||||||
|
$cache = serialize($this->cache_data);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// only do this part if the size allocated to the cache storage
|
||||||
|
// is smaller than the actual cache data
|
||||||
|
//
|
||||||
|
if (strlen($cache) > $this->cache_size) {
|
||||||
|
|
||||||
|
while (strlen($cache) > $this->cache_size) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// go through the data, and remove the entries closed to
|
||||||
|
// their expiration date.
|
||||||
|
//
|
||||||
|
$smallest_ttl = time();
|
||||||
|
$smallest_key = null;
|
||||||
|
|
||||||
|
foreach ($this->cache_data as $key => $data) {
|
||||||
|
|
||||||
|
if ($data['ttl'] < $smallest_ttl) {
|
||||||
|
|
||||||
|
$smallest_ttl = $data['ttl'];
|
||||||
|
$smallest_key = $key;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// unset the key with the smallest TTL
|
||||||
|
//
|
||||||
|
unset($this->cache_data[$smallest_key]);
|
||||||
|
|
||||||
|
//
|
||||||
|
// re-serialize
|
||||||
|
//
|
||||||
|
if ($this->cache_serializer == 'json') {
|
||||||
|
$cache = json_encode($this->cache_data);
|
||||||
|
} else {
|
||||||
|
$cache = serialize($this->cache_data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( ($cache == 'a:0:{}') || ($cache == '{}') ) {
|
||||||
|
return null;
|
||||||
|
} else {
|
||||||
|
return $cache;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
247
bundled-libs/Net/DNS2/Cache/File.php
Normal file
247
bundled-libs/Net/DNS2/Cache/File.php
Normal file
@ -0,0 +1,247 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2010 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 1.1.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* File-based caching for the Net_DNS2_Cache class
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_Packet
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_Cache_File extends Net_DNS2_Cache
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* open a cache object
|
||||||
|
*
|
||||||
|
* @param string $cache_file path to a file to use for cache storage
|
||||||
|
* @param integer $size the size of the shared memory segment to create
|
||||||
|
* @param string $serializer the name of the cache serialize to use
|
||||||
|
*
|
||||||
|
* @throws Net_DNS2_Exception
|
||||||
|
* @access public
|
||||||
|
* @return void
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function open($cache_file, $size, $serializer)
|
||||||
|
{
|
||||||
|
$this->cache_size = $size;
|
||||||
|
$this->cache_file = $cache_file;
|
||||||
|
$this->cache_serializer = $serializer;
|
||||||
|
|
||||||
|
//
|
||||||
|
// check that the file exists first
|
||||||
|
//
|
||||||
|
if ( ($this->cache_opened == false)
|
||||||
|
&& (file_exists($this->cache_file) == true)
|
||||||
|
&& (filesize($this->cache_file) > 0)
|
||||||
|
) {
|
||||||
|
//
|
||||||
|
// open the file for reading
|
||||||
|
//
|
||||||
|
$fp = @fopen($this->cache_file, 'r');
|
||||||
|
if ($fp !== false) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// lock the file just in case
|
||||||
|
//
|
||||||
|
flock($fp, LOCK_EX);
|
||||||
|
|
||||||
|
//
|
||||||
|
// read the file contents
|
||||||
|
//
|
||||||
|
$data = fread($fp, filesize($this->cache_file));
|
||||||
|
|
||||||
|
$decoded = null;
|
||||||
|
|
||||||
|
if ($this->cache_serializer == 'json') {
|
||||||
|
|
||||||
|
$decoded = json_decode($data, true);
|
||||||
|
} else {
|
||||||
|
|
||||||
|
$decoded = unserialize($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (is_array($decoded) == true) {
|
||||||
|
|
||||||
|
$this->cache_data = $decoded;
|
||||||
|
} else {
|
||||||
|
|
||||||
|
$this->cache_data = array();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// unlock
|
||||||
|
//
|
||||||
|
flock($fp, LOCK_UN);
|
||||||
|
|
||||||
|
//
|
||||||
|
// close the file
|
||||||
|
//
|
||||||
|
fclose($fp);
|
||||||
|
|
||||||
|
//
|
||||||
|
// clean up the data
|
||||||
|
//
|
||||||
|
$this->clean();
|
||||||
|
|
||||||
|
//
|
||||||
|
// mark this so we don't read this contents more than once per instance.
|
||||||
|
//
|
||||||
|
$this->cache_opened = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Destructor
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function __destruct()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// if there's no cache file set, then there's nothing to do
|
||||||
|
//
|
||||||
|
if (strlen($this->cache_file) == 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// open the file for reading/writing
|
||||||
|
//
|
||||||
|
$fp = fopen($this->cache_file, 'a+');
|
||||||
|
if ($fp !== false) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// lock the file just in case
|
||||||
|
//
|
||||||
|
flock($fp, LOCK_EX);
|
||||||
|
|
||||||
|
//
|
||||||
|
// seek to the start of the file to read
|
||||||
|
//
|
||||||
|
fseek($fp, 0, SEEK_SET);
|
||||||
|
|
||||||
|
//
|
||||||
|
// read the file contents
|
||||||
|
//
|
||||||
|
$data = @fread($fp, filesize($this->cache_file));
|
||||||
|
if ( ($data !== false) && (strlen($data) > 0) ) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// unserialize and store the data
|
||||||
|
//
|
||||||
|
$c = $this->cache_data;
|
||||||
|
|
||||||
|
$decoded = null;
|
||||||
|
|
||||||
|
if ($this->cache_serializer == 'json') {
|
||||||
|
|
||||||
|
$decoded = json_decode($data, true);
|
||||||
|
} else {
|
||||||
|
|
||||||
|
$decoded = unserialize($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (is_array($decoded) == true) {
|
||||||
|
|
||||||
|
$this->cache_data = array_merge($c, $decoded);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// trucate the file
|
||||||
|
//
|
||||||
|
ftruncate($fp, 0);
|
||||||
|
|
||||||
|
//
|
||||||
|
// clean the data
|
||||||
|
//
|
||||||
|
$this->clean();
|
||||||
|
|
||||||
|
//
|
||||||
|
// resize the data
|
||||||
|
//
|
||||||
|
$data = $this->resize();
|
||||||
|
if (!is_null($data)) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// write the file contents
|
||||||
|
//
|
||||||
|
fwrite($fp, $data);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// unlock
|
||||||
|
//
|
||||||
|
flock($fp, LOCK_UN);
|
||||||
|
|
||||||
|
//
|
||||||
|
// close the file
|
||||||
|
//
|
||||||
|
fclose($fp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
318
bundled-libs/Net/DNS2/Cache/Shm.php
Normal file
318
bundled-libs/Net/DNS2/Cache/Shm.php
Normal file
@ -0,0 +1,318 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2010 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 1.1.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shared Memory-based caching for the Net_DNS2_Cache class
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_Packet
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_Cache_Shm extends Net_DNS2_Cache
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* resource id of the shared memory cache
|
||||||
|
*/
|
||||||
|
private $_cache_id = false;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* the IPC key
|
||||||
|
*/
|
||||||
|
private $_cache_file_tok = -1;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* open a cache object
|
||||||
|
*
|
||||||
|
* @param string $cache_file path to a file to use for cache storage
|
||||||
|
* @param integer $size the size of the shared memory segment to create
|
||||||
|
* @param string $serializer the name of the cache serialize to use
|
||||||
|
*
|
||||||
|
* @throws Net_DNS2_Exception
|
||||||
|
* @access public
|
||||||
|
* @return void
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function open($cache_file, $size, $serializer)
|
||||||
|
{
|
||||||
|
$this->cache_size = $size;
|
||||||
|
$this->cache_file = $cache_file;
|
||||||
|
$this->cache_serializer = $serializer;
|
||||||
|
|
||||||
|
//
|
||||||
|
// if we've already loaded the cache data, then just return right away
|
||||||
|
//
|
||||||
|
if ($this->cache_opened == true)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// make sure the file exists first
|
||||||
|
//
|
||||||
|
if (!file_exists($cache_file)) {
|
||||||
|
|
||||||
|
if (file_put_contents($cache_file, '') === false) {
|
||||||
|
|
||||||
|
throw new Net_DNS2_Exception(
|
||||||
|
'failed to create empty SHM file: ' . $cache_file,
|
||||||
|
Net_DNS2_Lookups::E_CACHE_SHM_FILE
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// convert the filename to a IPC key
|
||||||
|
//
|
||||||
|
$this->_cache_file_tok = ftok($cache_file, 't');
|
||||||
|
if ($this->_cache_file_tok == -1) {
|
||||||
|
|
||||||
|
throw new Net_DNS2_Exception(
|
||||||
|
'failed on ftok() file: ' . $this->_cache_file_tok,
|
||||||
|
Net_DNS2_Lookups::E_CACHE_SHM_FILE
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// try to open an existing cache; if it doesn't exist, then there's no
|
||||||
|
// cache, and nothing to do.
|
||||||
|
//
|
||||||
|
$this->_cache_id = @shmop_open($this->_cache_file_tok, 'w', 0, 0);
|
||||||
|
if ($this->_cache_id !== false) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// this returns the size allocated, and not the size used, but it's
|
||||||
|
// still a good check to make sure there's space allocated.
|
||||||
|
//
|
||||||
|
$allocated = shmop_size($this->_cache_id);
|
||||||
|
if ($allocated > 0) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// read the data from the shared memory segment
|
||||||
|
//
|
||||||
|
$data = trim(shmop_read($this->_cache_id, 0, $allocated));
|
||||||
|
if ( ($data !== false) && (strlen($data) > 0) ) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// unserialize and store the data
|
||||||
|
//
|
||||||
|
$decoded = null;
|
||||||
|
|
||||||
|
if ($this->cache_serializer == 'json') {
|
||||||
|
|
||||||
|
$decoded = json_decode($data, true);
|
||||||
|
} else {
|
||||||
|
|
||||||
|
$decoded = unserialize($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (is_array($decoded) == true) {
|
||||||
|
|
||||||
|
$this->cache_data = $decoded;
|
||||||
|
} else {
|
||||||
|
|
||||||
|
$this->cache_data = array();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// call clean to clean up old entries
|
||||||
|
//
|
||||||
|
$this->clean();
|
||||||
|
|
||||||
|
//
|
||||||
|
// mark the cache as loaded, so we don't load it more than once
|
||||||
|
//
|
||||||
|
$this->cache_opened = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Destructor
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function __destruct()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// if there's no cache file set, then there's nothing to do
|
||||||
|
//
|
||||||
|
if (strlen($this->cache_file) == 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$fp = fopen($this->cache_file, 'r');
|
||||||
|
if ($fp !== false) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// lock the file
|
||||||
|
//
|
||||||
|
flock($fp, LOCK_EX);
|
||||||
|
|
||||||
|
//
|
||||||
|
// check to see if we have an open shm segment
|
||||||
|
//
|
||||||
|
if ($this->_cache_id === false) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// try opening it again, incase it was created by another
|
||||||
|
// process in the mean time
|
||||||
|
//
|
||||||
|
$this->_cache_id = @shmop_open(
|
||||||
|
$this->_cache_file_tok, 'w', 0, 0
|
||||||
|
);
|
||||||
|
if ($this->_cache_id === false) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// otherwise, create it.
|
||||||
|
//
|
||||||
|
$this->_cache_id = @shmop_open(
|
||||||
|
$this->_cache_file_tok, 'c', 0, $this->cache_size
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// get the size allocated to the segment
|
||||||
|
//
|
||||||
|
$allocated = shmop_size($this->_cache_id);
|
||||||
|
|
||||||
|
//
|
||||||
|
// read the contents
|
||||||
|
//
|
||||||
|
$data = trim(shmop_read($this->_cache_id, 0, $allocated));
|
||||||
|
|
||||||
|
//
|
||||||
|
// if there was some data
|
||||||
|
//
|
||||||
|
if ( ($data !== false) && (strlen($data) > 0) ) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// unserialize and store the data
|
||||||
|
//
|
||||||
|
$c = $this->cache_data;
|
||||||
|
|
||||||
|
$decoded = null;
|
||||||
|
|
||||||
|
if ($this->cache_serializer == 'json') {
|
||||||
|
|
||||||
|
$decoded = json_decode($data, true);
|
||||||
|
} else {
|
||||||
|
|
||||||
|
$decoded = unserialize($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (is_array($decoded) == true) {
|
||||||
|
|
||||||
|
$this->cache_data = array_merge($c, $decoded);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// delete the segment
|
||||||
|
//
|
||||||
|
shmop_delete($this->_cache_id);
|
||||||
|
|
||||||
|
//
|
||||||
|
// clean the data
|
||||||
|
//
|
||||||
|
$this->clean();
|
||||||
|
|
||||||
|
//
|
||||||
|
// clean up and write the data
|
||||||
|
//
|
||||||
|
$data = $this->resize();
|
||||||
|
if (!is_null($data)) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// re-create segment
|
||||||
|
//
|
||||||
|
$this->_cache_id = @shmop_open(
|
||||||
|
$this->_cache_file_tok, 'c', 0644, $this->cache_size
|
||||||
|
);
|
||||||
|
if ($this->_cache_id === false) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$o = shmop_write($this->_cache_id, $data, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// close the segment
|
||||||
|
//
|
||||||
|
shmop_close($this->_cache_id);
|
||||||
|
|
||||||
|
//
|
||||||
|
// unlock
|
||||||
|
//
|
||||||
|
flock($fp, LOCK_UN);
|
||||||
|
|
||||||
|
//
|
||||||
|
// close the file
|
||||||
|
//
|
||||||
|
fclose($fp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
142
bundled-libs/Net/DNS2/Exception.php
Normal file
142
bundled-libs/Net/DNS2/Exception.php
Normal file
@ -0,0 +1,142 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2010 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 0.6.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Exception handler used by Net_DNS2
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_Exception extends Exception
|
||||||
|
{
|
||||||
|
private $_request;
|
||||||
|
private $_response;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor - overload the constructor so we can pass in the request
|
||||||
|
* and response object (when it's available)
|
||||||
|
*
|
||||||
|
* @param string $message the exception message
|
||||||
|
* @param int $code the exception code
|
||||||
|
* @param object $previous the previous Exception object
|
||||||
|
* @param object $request the Net_DNS2_Packet_Request object for this request
|
||||||
|
* @param object $response the Net_DNS2_Packet_Response object for this request
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function __construct(
|
||||||
|
$message = '',
|
||||||
|
$code = 0,
|
||||||
|
$previous = null,
|
||||||
|
Net_DNS2_Packet_Request $request = null,
|
||||||
|
Net_DNS2_Packet_Response $response = null
|
||||||
|
) {
|
||||||
|
//
|
||||||
|
// store the request/response objects (if passed)
|
||||||
|
//
|
||||||
|
$this->_request = $request;
|
||||||
|
$this->_response = $response;
|
||||||
|
|
||||||
|
//
|
||||||
|
// call the parent constructor
|
||||||
|
//
|
||||||
|
// the "previous" argument was added in PHP 5.3.0
|
||||||
|
//
|
||||||
|
// https://code.google.com/p/netdns2/issues/detail?id=25
|
||||||
|
//
|
||||||
|
if (version_compare(PHP_VERSION, '5.3.0', '>=') == true) {
|
||||||
|
|
||||||
|
parent::__construct($message, $code, $previous);
|
||||||
|
} else {
|
||||||
|
|
||||||
|
parent::__construct($message, $code);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns the Net_DNS2_Packet_Request object (if available)
|
||||||
|
*
|
||||||
|
* @return Net_DNS2_Packet_Request object
|
||||||
|
* @access public
|
||||||
|
* @since function available since release 1.3.1
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function getRequest()
|
||||||
|
{
|
||||||
|
return $this->_request;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns the Net_DNS2_Packet_Response object (if available)
|
||||||
|
*
|
||||||
|
* @return Net_DNS2_Packet_Response object
|
||||||
|
* @access public
|
||||||
|
* @since function available since release 1.3.1
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function getResponse()
|
||||||
|
{
|
||||||
|
return $this->_response;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
277
bundled-libs/Net/DNS2/Header.php
Normal file
277
bundled-libs/Net/DNS2/Header.php
Normal file
@ -0,0 +1,277 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2010 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 0.6.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Packet Header class
|
||||||
|
*
|
||||||
|
* This class handles parsing and constructing DNS Packet Headers as defined
|
||||||
|
* by section 4.1.1 of RFC1035.
|
||||||
|
*
|
||||||
|
* DNS header format - RFC1035 section 4.1.1
|
||||||
|
* DNS header format - RFC4035 section 3.2
|
||||||
|
*
|
||||||
|
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* | ID |
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* |QR| Opcode |AA|TC|RD|RA| Z|AD|CD| RCODE |
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* | QDCOUNT |
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* | ANCOUNT |
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* | NSCOUNT |
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* | ARCOUNT |
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_Header
|
||||||
|
{
|
||||||
|
public $id; // 16 bit - identifier
|
||||||
|
public $qr; // 1 bit - 0 = query, 1 = response
|
||||||
|
public $opcode; // 4 bit - op code
|
||||||
|
public $aa; // 1 bit - Authoritative Answer
|
||||||
|
public $tc; // 1 bit - TrunCation
|
||||||
|
public $rd; // 1 bit - Recursion Desired
|
||||||
|
public $ra; // 1 bit - Recursion Available
|
||||||
|
public $z; // 1 bit - Reserved
|
||||||
|
public $ad; // 1 bit - Authentic Data (RFC4035)
|
||||||
|
public $cd; // 1 bit - Checking Disabled (RFC4035)
|
||||||
|
public $rcode; // 4 bit - Response code
|
||||||
|
public $qdcount; // 16 bit - entries in the question section
|
||||||
|
public $ancount; // 16 bit - resource records in the answer section
|
||||||
|
public $nscount; // 16 bit - name server rr in the authority records section
|
||||||
|
public $arcount; // 16 bit - rr's in the additional records section
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor - builds a new Net_DNS2_Header object
|
||||||
|
*
|
||||||
|
* @param mixed &$packet either a Net_DNS2_Packet object or null
|
||||||
|
*
|
||||||
|
* @throws Net_DNS2_Exception
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function __construct(Net_DNS2_Packet &$packet = null)
|
||||||
|
{
|
||||||
|
if (!is_null($packet)) {
|
||||||
|
|
||||||
|
$this->set($packet);
|
||||||
|
} else {
|
||||||
|
|
||||||
|
$this->id = $this->nextPacketId();
|
||||||
|
$this->qr = Net_DNS2_Lookups::QR_QUERY;
|
||||||
|
$this->opcode = Net_DNS2_Lookups::OPCODE_QUERY;
|
||||||
|
$this->aa = 0;
|
||||||
|
$this->tc = 0;
|
||||||
|
$this->rd = 1;
|
||||||
|
$this->ra = 0;
|
||||||
|
$this->z = 0;
|
||||||
|
$this->ad = 0;
|
||||||
|
$this->cd = 0;
|
||||||
|
$this->rcode = Net_DNS2_Lookups::RCODE_NOERROR;
|
||||||
|
$this->qdcount = 1;
|
||||||
|
$this->ancount = 0;
|
||||||
|
$this->nscount = 0;
|
||||||
|
$this->arcount = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns the next available packet id
|
||||||
|
*
|
||||||
|
* @return integer
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function nextPacketId()
|
||||||
|
{
|
||||||
|
if (++Net_DNS2_Lookups::$next_packet_id > 65535) {
|
||||||
|
|
||||||
|
Net_DNS2_Lookups::$next_packet_id = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Net_DNS2_Lookups::$next_packet_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* magic __toString() method to return the header as a string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function __toString()
|
||||||
|
{
|
||||||
|
$output = ";;\n;; Header:\n";
|
||||||
|
|
||||||
|
$output .= ";;\t id = " . $this->id . "\n";
|
||||||
|
$output .= ";;\t qr = " . $this->qr . "\n";
|
||||||
|
$output .= ";;\t opcode = " . $this->opcode . "\n";
|
||||||
|
$output .= ";;\t aa = " . $this->aa . "\n";
|
||||||
|
$output .= ";;\t tc = " . $this->tc . "\n";
|
||||||
|
$output .= ";;\t rd = " . $this->rd . "\n";
|
||||||
|
$output .= ";;\t ra = " . $this->ra . "\n";
|
||||||
|
$output .= ";;\t z = " . $this->z . "\n";
|
||||||
|
$output .= ";;\t ad = " . $this->ad . "\n";
|
||||||
|
$output .= ";;\t cd = " . $this->cd . "\n";
|
||||||
|
$output .= ";;\t rcode = " . $this->rcode . "\n";
|
||||||
|
$output .= ";;\t qdcount = " . $this->qdcount . "\n";
|
||||||
|
$output .= ";;\t ancount = " . $this->ancount . "\n";
|
||||||
|
$output .= ";;\t nscount = " . $this->nscount . "\n";
|
||||||
|
$output .= ";;\t arcount = " . $this->arcount . "\n";
|
||||||
|
|
||||||
|
return $output;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* constructs a Net_DNS2_Header from a Net_DNS2_Packet object
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet Object
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @throws Net_DNS2_Exception
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function set(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// the header must be at least 12 bytes long.
|
||||||
|
//
|
||||||
|
if ($packet->rdlength < Net_DNS2_Lookups::DNS_HEADER_SIZE) {
|
||||||
|
|
||||||
|
throw new Net_DNS2_Exception(
|
||||||
|
'invalid header data provided; to small',
|
||||||
|
Net_DNS2_Lookups::E_HEADER_INVALID
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
$offset = 0;
|
||||||
|
|
||||||
|
//
|
||||||
|
// parse the values
|
||||||
|
//
|
||||||
|
$this->id = ord($packet->rdata[$offset]) << 8 |
|
||||||
|
ord($packet->rdata[++$offset]);
|
||||||
|
|
||||||
|
++$offset;
|
||||||
|
$this->qr = (ord($packet->rdata[$offset]) >> 7) & 0x1;
|
||||||
|
$this->opcode = (ord($packet->rdata[$offset]) >> 3) & 0xf;
|
||||||
|
$this->aa = (ord($packet->rdata[$offset]) >> 2) & 0x1;
|
||||||
|
$this->tc = (ord($packet->rdata[$offset]) >> 1) & 0x1;
|
||||||
|
$this->rd = ord($packet->rdata[$offset]) & 0x1;
|
||||||
|
|
||||||
|
++$offset;
|
||||||
|
$this->ra = (ord($packet->rdata[$offset]) >> 7) & 0x1;
|
||||||
|
$this->z = (ord($packet->rdata[$offset]) >> 6) & 0x1;
|
||||||
|
$this->ad = (ord($packet->rdata[$offset]) >> 5) & 0x1;
|
||||||
|
$this->cd = (ord($packet->rdata[$offset]) >> 4) & 0x1;
|
||||||
|
$this->rcode = ord($packet->rdata[$offset]) & 0xf;
|
||||||
|
|
||||||
|
$this->qdcount = ord($packet->rdata[++$offset]) << 8 |
|
||||||
|
ord($packet->rdata[++$offset]);
|
||||||
|
$this->ancount = ord($packet->rdata[++$offset]) << 8 |
|
||||||
|
ord($packet->rdata[++$offset]);
|
||||||
|
$this->nscount = ord($packet->rdata[++$offset]) << 8 |
|
||||||
|
ord($packet->rdata[++$offset]);
|
||||||
|
$this->arcount = ord($packet->rdata[++$offset]) << 8 |
|
||||||
|
ord($packet->rdata[++$offset]);
|
||||||
|
|
||||||
|
//
|
||||||
|
// increment the internal offset
|
||||||
|
//
|
||||||
|
$packet->offset += Net_DNS2_Lookups::DNS_HEADER_SIZE;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns a binary packed DNS Header
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet Object
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function get(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
$packet->offset += Net_DNS2_Lookups::DNS_HEADER_SIZE;
|
||||||
|
|
||||||
|
return pack('n', $this->id) .
|
||||||
|
chr(
|
||||||
|
($this->qr << 7) | ($this->opcode << 3) |
|
||||||
|
($this->aa << 2) | ($this->tc << 1) | ($this->rd)
|
||||||
|
) .
|
||||||
|
chr(
|
||||||
|
($this->ra << 7) | ($this->ad << 5) | ($this->cd << 4) | $this->rcode
|
||||||
|
) .
|
||||||
|
pack('n4', $this->qdcount, $this->ancount, $this->nscount, $this->arcount);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
578
bundled-libs/Net/DNS2/Lookups.php
Normal file
578
bundled-libs/Net/DNS2/Lookups.php
Normal file
@ -0,0 +1,578 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2010 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 0.6.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
//
|
||||||
|
// initalize the packet id value
|
||||||
|
//
|
||||||
|
Net_DNS2_Lookups::$next_packet_id = mt_rand(0, 65535);
|
||||||
|
|
||||||
|
//
|
||||||
|
// build the reverse lookup tables; this is just so we don't have to
|
||||||
|
// have duplicate static content laying around.
|
||||||
|
//
|
||||||
|
Net_DNS2_Lookups::$rr_types_by_id = array_flip(Net_DNS2_Lookups::$rr_types_by_name);
|
||||||
|
Net_DNS2_Lookups::$classes_by_id = array_flip(Net_DNS2_Lookups::$classes_by_name);
|
||||||
|
Net_DNS2_Lookups::$rr_types_class_to_id = array_flip(Net_DNS2_Lookups::$rr_types_id_to_class);
|
||||||
|
Net_DNS2_Lookups::$algorithm_name_to_id = array_flip(Net_DNS2_Lookups::$algorithm_id_to_name);
|
||||||
|
Net_DNS2_Lookups::$digest_name_to_id = array_flip(Net_DNS2_Lookups::$digest_id_to_name);
|
||||||
|
Net_DNS2_Lookups::$rr_qtypes_by_id = array_flip(Net_DNS2_Lookups::$rr_qtypes_by_name);
|
||||||
|
Net_DNS2_Lookups::$rr_metatypes_by_id = array_flip(Net_DNS2_Lookups::$rr_metatypes_by_name);
|
||||||
|
Net_DNS2_Lookups::$protocol_by_id = array_flip(Net_DNS2_Lookups::$protocol_by_name);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class provides simple lookups used througout the Net_DNS2 code
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_Lookups
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* size (in bytes) of a header in a standard DNS packet
|
||||||
|
*/
|
||||||
|
const DNS_HEADER_SIZE = 12;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* max size of a UDP packet
|
||||||
|
*/
|
||||||
|
const DNS_MAX_UDP_SIZE = 512;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Query/Response flag
|
||||||
|
*/
|
||||||
|
const QR_QUERY = 0; // RFC 1035
|
||||||
|
const QR_RESPONSE = 1; // RFC 1035
|
||||||
|
|
||||||
|
/*
|
||||||
|
* DNS Op Codes
|
||||||
|
*/
|
||||||
|
const OPCODE_QUERY = 0; // RFC 1035
|
||||||
|
const OPCODE_IQUERY = 1; // RFC 1035, RFC 3425
|
||||||
|
const OPCODE_STATUS = 2; // RFC 1035
|
||||||
|
const OPCODE_NOTIFY = 4; // RFC 1996
|
||||||
|
const OPCODE_UPDATE = 5; // RFC 2136
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Resource Record Classes
|
||||||
|
*/
|
||||||
|
const RR_CLASS_IN = 1; // RFC 1035
|
||||||
|
const RR_CLASS_CH = 3; // RFC 1035
|
||||||
|
const RR_CLASS_HS = 4; // RFC 1035
|
||||||
|
const RR_CLASS_NONE = 254; // RFC 2136
|
||||||
|
const RR_CLASS_ANY = 255; // RFC 1035
|
||||||
|
|
||||||
|
/*
|
||||||
|
* DNS Response Codes
|
||||||
|
*/
|
||||||
|
const RCODE_NOERROR = 0; // RFC 1035
|
||||||
|
const RCODE_FORMERR = 1; // RFC 1035
|
||||||
|
const RCODE_SERVFAIL = 2; // RFC 1035
|
||||||
|
const RCODE_NXDOMAIN = 3; // RFC 1035
|
||||||
|
const RCODE_NOTIMP = 4; // RFC 1035
|
||||||
|
const RCODE_REFUSED = 5; // RFC 1035
|
||||||
|
const RCODE_YXDOMAIN = 6; // RFC 2136
|
||||||
|
const RCODE_YXRRSET = 7; // RFC 2136
|
||||||
|
const RCODE_NXRRSET = 8; // RFC 2136
|
||||||
|
const RCODE_NOTAUTH = 9; // RFC 2136
|
||||||
|
const RCODE_NOTZONE = 10; // RFC 2136
|
||||||
|
|
||||||
|
// 11-15 reserved
|
||||||
|
|
||||||
|
const RCODE_BADSIG = 16; // RFC 2845
|
||||||
|
const RCODE_BADVERS = 16; // RFC 6891
|
||||||
|
const RCODE_BADKEY = 17; // RFC 2845
|
||||||
|
const RCODE_BADTIME = 18; // RFC 2845
|
||||||
|
const RCODE_BADMODE = 19; // RFC 2930
|
||||||
|
const RCODE_BADNAME = 20; // RFC 2930
|
||||||
|
const RCODE_BADALG = 21; // RFC 2930
|
||||||
|
const RCODE_BADTRUNC = 22; // RFC 4635
|
||||||
|
const RCODE_BADCOOKIE = 23; // RFC 7873
|
||||||
|
|
||||||
|
/*
|
||||||
|
* internal errors codes returned by the exceptions class
|
||||||
|
*/
|
||||||
|
const E_NONE = 0;
|
||||||
|
const E_DNS_FORMERR = self::RCODE_FORMERR;
|
||||||
|
const E_DNS_SERVFAIL = self::RCODE_SERVFAIL;
|
||||||
|
const E_DNS_NXDOMAIN = self::RCODE_NXDOMAIN;
|
||||||
|
const E_DNS_NOTIMP = self::RCODE_NOTIMP;
|
||||||
|
const E_DNS_REFUSED = self::RCODE_REFUSED;
|
||||||
|
const E_DNS_YXDOMAIN = self::RCODE_YXDOMAIN;
|
||||||
|
const E_DNS_YXRRSET = self::RCODE_YXRRSET;
|
||||||
|
const E_DNS_NXRRSET = self::RCODE_NXRRSET;
|
||||||
|
const E_DNS_NOTAUTH = self::RCODE_NOTAUTH;
|
||||||
|
const E_DNS_NOTZONE = self::RCODE_NOTZONE;
|
||||||
|
|
||||||
|
// 11-15 reserved
|
||||||
|
|
||||||
|
const E_DNS_BADSIG = self::RCODE_BADSIG;
|
||||||
|
const E_DNS_BADKEY = self::RCODE_BADKEY;
|
||||||
|
const E_DNS_BADTIME = self::RCODE_BADTIME;
|
||||||
|
const E_DNS_BADMODE = self::RCODE_BADMODE;
|
||||||
|
const E_DNS_BADNAME = self::RCODE_BADNAME;
|
||||||
|
const E_DNS_BADALG = self::RCODE_BADALG;
|
||||||
|
const E_DNS_BADTRUNC = self::RCODE_BADTRUNC;
|
||||||
|
const E_DNS_BADCOOKIE = self::RCODE_BADCOOKIE;
|
||||||
|
|
||||||
|
// other error conditions
|
||||||
|
|
||||||
|
const E_NS_INVALID_FILE = 200;
|
||||||
|
const E_NS_INVALID_ENTRY = 201;
|
||||||
|
const E_NS_FAILED = 202;
|
||||||
|
const E_NS_SOCKET_FAILED = 203;
|
||||||
|
const E_NS_INVALID_SOCKET = 204;
|
||||||
|
|
||||||
|
const E_PACKET_INVALID = 300;
|
||||||
|
const E_PARSE_ERROR = 301;
|
||||||
|
const E_HEADER_INVALID = 302;
|
||||||
|
const E_QUESTION_INVALID = 303;
|
||||||
|
const E_RR_INVALID = 304;
|
||||||
|
|
||||||
|
const E_OPENSSL_ERROR = 400;
|
||||||
|
const E_OPENSSL_UNAVAIL = 401;
|
||||||
|
const E_OPENSSL_INV_PKEY = 402;
|
||||||
|
const E_OPENSSL_INV_ALGO = 403;
|
||||||
|
|
||||||
|
const E_CACHE_UNSUPPORTED = 500;
|
||||||
|
const E_CACHE_SHM_FILE = 501;
|
||||||
|
const E_CACHE_SHM_UNAVAIL = 502;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* EDNS0 Option Codes (OPT)
|
||||||
|
*/
|
||||||
|
// 0 - Reserved
|
||||||
|
const EDNS0_OPT_LLQ = 1;
|
||||||
|
const EDNS0_OPT_UL = 2;
|
||||||
|
const EDNS0_OPT_NSID = 3;
|
||||||
|
// 4 - Reserved
|
||||||
|
const EDNS0_OPT_DAU = 5;
|
||||||
|
const EDNS0_OPT_DHU = 6;
|
||||||
|
const EDNS0_OPT_N3U = 7;
|
||||||
|
const EDNS0_OPT_CLIENT_SUBNET = 8;
|
||||||
|
const EDNS0_OPT_EXPIRE = 9;
|
||||||
|
const EDNS0_OPT_COOKIE = 10;
|
||||||
|
const EDNS0_OPT_TCP_KEEPALIVE = 11;
|
||||||
|
const EDNS0_OPT_PADDING = 12;
|
||||||
|
const EDNS0_OPT_CHAIN = 13;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* DNSSEC Algorithms
|
||||||
|
*/
|
||||||
|
const DNSSEC_ALGORITHM_RES = 0;
|
||||||
|
const DNSSEC_ALGORITHM_RSAMD5 = 1;
|
||||||
|
const DNSSEC_ALGORITHM_DH = 2;
|
||||||
|
const DNSSEC_ALGORITHM_DSA = 3;
|
||||||
|
const DNSSEC_ALGORITHM_ECC = 4;
|
||||||
|
const DNSSEC_ALGORITHM_RSASHA1 = 5;
|
||||||
|
const DNSSEC_ALGORITHM_DSANSEC3SHA1 = 6;
|
||||||
|
const DSNSEC_ALGORITHM_RSASHA1NSEC3SHA1 = 7;
|
||||||
|
const DNSSEC_ALGORITHM_RSASHA256 = 8;
|
||||||
|
const DNSSEC_ALGORITHM_RSASHA512 = 10;
|
||||||
|
const DNSSEC_ALGORITHM_ECCGOST = 12;
|
||||||
|
const DNSSEC_ALGORITHM_INDIRECT = 252;
|
||||||
|
const DNSSEC_ALGORITHM_PRIVATEDNS = 253;
|
||||||
|
const DNSSEC_ALGORITHM_PRIVATEOID = 254;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* DNSSEC Digest Types
|
||||||
|
*/
|
||||||
|
const DNSSEC_DIGEST_RES = 0;
|
||||||
|
const DNSSEC_DIGEST_SHA1 = 1;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The packet id used when sending requests
|
||||||
|
*/
|
||||||
|
public static $next_packet_id;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Used to map resource record types to their id's, and back
|
||||||
|
*/
|
||||||
|
public static $rr_types_by_id = array();
|
||||||
|
public static $rr_types_by_name = array(
|
||||||
|
|
||||||
|
'SIG0' => 0, // RFC 2931 pseudo type
|
||||||
|
'A' => 1, // RFC 1035
|
||||||
|
'NS' => 2, // RFC 1035
|
||||||
|
'MD' => 3, // RFC 1035 - obsolete, Not implemented
|
||||||
|
'MF' => 4, // RFC 1035 - obsolete, Not implemented
|
||||||
|
'CNAME' => 5, // RFC 1035
|
||||||
|
'SOA' => 6, // RFC 1035
|
||||||
|
'MB' => 7, // RFC 1035 - obsolete, Not implemented
|
||||||
|
'MG' => 8, // RFC 1035 - obsolete, Not implemented
|
||||||
|
'MR' => 9, // RFC 1035 - obsolete, Not implemented
|
||||||
|
'NULL' => 10, // RFC 1035 - obsolete, Not implemented
|
||||||
|
'WKS' => 11, // RFC 1035
|
||||||
|
'PTR' => 12, // RFC 1035
|
||||||
|
'HINFO' => 13, // RFC 1035
|
||||||
|
'MINFO' => 14, // RFC 1035 - obsolete, Not implemented
|
||||||
|
'MX' => 15, // RFC 1035
|
||||||
|
'TXT' => 16, // RFC 1035
|
||||||
|
'RP' => 17, // RFC 1183
|
||||||
|
'AFSDB' => 18, // RFC 1183
|
||||||
|
'X25' => 19, // RFC 1183
|
||||||
|
'ISDN' => 20, // RFC 1183
|
||||||
|
'RT' => 21, // RFC 1183
|
||||||
|
'NSAP' => 22, // RFC 1706
|
||||||
|
'NSAP_PTR' => 23, // RFC 1348 - obsolete, Not implemented
|
||||||
|
'SIG' => 24, // RFC 2535
|
||||||
|
'KEY' => 25, // RFC 2535, RFC 2930
|
||||||
|
'PX' => 26, // RFC 2163
|
||||||
|
'GPOS' => 27, // RFC 1712 - Not implemented
|
||||||
|
'AAAA' => 28, // RFC 3596
|
||||||
|
'LOC' => 29, // RFC 1876
|
||||||
|
'NXT' => 30, // RFC 2065, obsoleted by by RFC 3755
|
||||||
|
'EID' => 31, // [Patton][Patton1995]
|
||||||
|
'NIMLOC' => 32, // [Patton][Patton1995]
|
||||||
|
'SRV' => 33, // RFC 2782
|
||||||
|
'ATMA' => 34, // Windows only
|
||||||
|
'NAPTR' => 35, // RFC 2915
|
||||||
|
'KX' => 36, // RFC 2230
|
||||||
|
'CERT' => 37, // RFC 4398
|
||||||
|
'A6' => 38, // downgraded to experimental by RFC 3363
|
||||||
|
'DNAME' => 39, // RFC 2672
|
||||||
|
'SINK' => 40, // Not implemented
|
||||||
|
'OPT' => 41, // RFC 2671
|
||||||
|
'APL' => 42, // RFC 3123
|
||||||
|
'DS' => 43, // RFC 4034
|
||||||
|
'SSHFP' => 44, // RFC 4255
|
||||||
|
'IPSECKEY' => 45, // RFC 4025
|
||||||
|
'RRSIG' => 46, // RFC 4034
|
||||||
|
'NSEC' => 47, // RFC 4034
|
||||||
|
'DNSKEY' => 48, // RFC 4034
|
||||||
|
'DHCID' => 49, // RFC 4701
|
||||||
|
'NSEC3' => 50, // RFC 5155
|
||||||
|
'NSEC3PARAM' => 51, // RFC 5155
|
||||||
|
'TLSA' => 52, // RFC 6698
|
||||||
|
'SMIMEA' => 53, // draft-ietf-dane-smime-10
|
||||||
|
|
||||||
|
// 54 unassigned
|
||||||
|
|
||||||
|
'HIP' => 55, // RFC 5205
|
||||||
|
'NINFO' => 56, // Not implemented
|
||||||
|
'RKEY' => 57, // Not implemented
|
||||||
|
'TALINK' => 58, //
|
||||||
|
'CDS' => 59, // RFC 7344
|
||||||
|
'CDNSKEY' => 60, // RFC 7344
|
||||||
|
'OPENPGPKEY' => 61, // RFC 7929
|
||||||
|
'CSYNC' => 62, // RFC 7477
|
||||||
|
|
||||||
|
// 63 - 98 unassigned
|
||||||
|
|
||||||
|
'SPF' => 99, // RFC 4408
|
||||||
|
'UINFO' => 100, // no RFC, Not implemented
|
||||||
|
'UID' => 101, // no RFC, Not implemented
|
||||||
|
'GID' => 102, // no RFC, Not implemented
|
||||||
|
'UNSPEC' => 103, // no RFC, Not implemented
|
||||||
|
'NID' => 104, // RFC 6742
|
||||||
|
'L32' => 105, // RFC 6742
|
||||||
|
'L64' => 106, // RFC 6742
|
||||||
|
'LP' => 107, // RFC 6742
|
||||||
|
'EUI48' => 108, // RFC 7043
|
||||||
|
'EUI64' => 109, // RFC 7043
|
||||||
|
|
||||||
|
// 110 - 248 unassigned
|
||||||
|
|
||||||
|
'TKEY' => 249, // RFC 2930
|
||||||
|
'TSIG' => 250, // RFC 2845
|
||||||
|
'IXFR' => 251, // RFC 1995 - only a full (AXFR) is supported
|
||||||
|
'AXFR' => 252, // RFC 1035
|
||||||
|
'MAILB' => 253, // RFC 883, Not implemented
|
||||||
|
'MAILA' => 254, // RFC 973, Not implemented
|
||||||
|
'ANY' => 255, // RFC 1035 - we support both 'ANY' and '*'
|
||||||
|
'URI' => 256, // tools.ietf.org/html/draft-faltstrom-uri-06
|
||||||
|
'CAA' => 257, // tools.ietf.org/html/draft-ietf-pkix-caa-03
|
||||||
|
'AVC' => 258, // Application Visibility and Control
|
||||||
|
|
||||||
|
// 259 - 32767 unassigned
|
||||||
|
|
||||||
|
'TA' => 32768, // same as DS
|
||||||
|
'DLV' => 32769 // RFC 4431
|
||||||
|
);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Qtypes and Metatypes - defined in RFC2929 section 3.1
|
||||||
|
*/
|
||||||
|
public static $rr_qtypes_by_id = array();
|
||||||
|
public static $rr_qtypes_by_name = array(
|
||||||
|
|
||||||
|
'IXFR' => 251, // RFC 1995 - only a full (AXFR) is supported
|
||||||
|
'AXFR' => 252, // RFC 1035
|
||||||
|
'MAILB' => 253, // RFC 883, Not implemented
|
||||||
|
'MAILA' => 254, // RFC 973, Not implemented
|
||||||
|
'ANY' => 255 // RFC 1035 - we support both 'ANY' and '*'
|
||||||
|
);
|
||||||
|
|
||||||
|
public static $rr_metatypes_by_id = array();
|
||||||
|
public static $rr_metatypes_by_name = array(
|
||||||
|
|
||||||
|
'OPT' => 41, // RFC 2671
|
||||||
|
'TKEY' => 249, // RFC 2930
|
||||||
|
'TSIG' => 250 // RFC 2845
|
||||||
|
);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* used to map resource record id's to RR class names
|
||||||
|
*/
|
||||||
|
public static $rr_types_class_to_id = array();
|
||||||
|
public static $rr_types_id_to_class = array(
|
||||||
|
|
||||||
|
1 => 'Net_DNS2_RR_A',
|
||||||
|
2 => 'Net_DNS2_RR_NS',
|
||||||
|
5 => 'Net_DNS2_RR_CNAME',
|
||||||
|
6 => 'Net_DNS2_RR_SOA',
|
||||||
|
11 => 'Net_DNS2_RR_WKS',
|
||||||
|
12 => 'Net_DNS2_RR_PTR',
|
||||||
|
13 => 'Net_DNS2_RR_HINFO',
|
||||||
|
15 => 'Net_DNS2_RR_MX',
|
||||||
|
16 => 'Net_DNS2_RR_TXT',
|
||||||
|
17 => 'Net_DNS2_RR_RP',
|
||||||
|
18 => 'Net_DNS2_RR_AFSDB',
|
||||||
|
19 => 'Net_DNS2_RR_X25',
|
||||||
|
20 => 'Net_DNS2_RR_ISDN',
|
||||||
|
21 => 'Net_DNS2_RR_RT',
|
||||||
|
22 => 'Net_DNS2_RR_NSAP',
|
||||||
|
24 => 'Net_DNS2_RR_SIG',
|
||||||
|
25 => 'Net_DNS2_RR_KEY',
|
||||||
|
26 => 'Net_DNS2_RR_PX',
|
||||||
|
28 => 'Net_DNS2_RR_AAAA',
|
||||||
|
29 => 'Net_DNS2_RR_LOC',
|
||||||
|
31 => 'Net_DNS2_RR_EID',
|
||||||
|
32 => 'Net_DNS2_RR_NIMLOC',
|
||||||
|
33 => 'Net_DNS2_RR_SRV',
|
||||||
|
34 => 'Net_DNS2_RR_ATMA',
|
||||||
|
35 => 'Net_DNS2_RR_NAPTR',
|
||||||
|
36 => 'Net_DNS2_RR_KX',
|
||||||
|
37 => 'Net_DNS2_RR_CERT',
|
||||||
|
39 => 'Net_DNS2_RR_DNAME',
|
||||||
|
41 => 'Net_DNS2_RR_OPT',
|
||||||
|
42 => 'Net_DNS2_RR_APL',
|
||||||
|
43 => 'Net_DNS2_RR_DS',
|
||||||
|
44 => 'Net_DNS2_RR_SSHFP',
|
||||||
|
45 => 'Net_DNS2_RR_IPSECKEY',
|
||||||
|
46 => 'Net_DNS2_RR_RRSIG',
|
||||||
|
47 => 'Net_DNS2_RR_NSEC',
|
||||||
|
48 => 'Net_DNS2_RR_DNSKEY',
|
||||||
|
49 => 'Net_DNS2_RR_DHCID',
|
||||||
|
50 => 'Net_DNS2_RR_NSEC3',
|
||||||
|
51 => 'Net_DNS2_RR_NSEC3PARAM',
|
||||||
|
52 => 'Net_DNS2_RR_TLSA',
|
||||||
|
53 => 'Net_DNS2_RR_SMIMEA',
|
||||||
|
55 => 'Net_DNS2_RR_HIP',
|
||||||
|
58 => 'Net_DNS2_RR_TALINK',
|
||||||
|
59 => 'Net_DNS2_RR_CDS',
|
||||||
|
60 => 'Net_DNS2_RR_CDNSKEY',
|
||||||
|
61 => 'Net_DNS2_RR_OPENPGPKEY',
|
||||||
|
62 => 'Net_DNS2_RR_CSYNC',
|
||||||
|
99 => 'Net_DNS2_RR_SPF',
|
||||||
|
104 => 'Net_DNS2_RR_NID',
|
||||||
|
105 => 'Net_DNS2_RR_L32',
|
||||||
|
106 => 'Net_DNS2_RR_L64',
|
||||||
|
107 => 'Net_DNS2_RR_LP',
|
||||||
|
108 => 'Net_DNS2_RR_EUI48',
|
||||||
|
109 => 'Net_DNS2_RR_EUI64',
|
||||||
|
|
||||||
|
249 => 'Net_DNS2_RR_TKEY',
|
||||||
|
250 => 'Net_DNS2_RR_TSIG',
|
||||||
|
|
||||||
|
// 251 - IXFR - handled as a full zone transfer (252)
|
||||||
|
// 252 - AXFR - handled as a function call
|
||||||
|
|
||||||
|
255 => 'Net_DNS2_RR_ANY',
|
||||||
|
256 => 'Net_DNS2_RR_URI',
|
||||||
|
257 => 'Net_DNS2_RR_CAA',
|
||||||
|
258 => 'Net_DNS2_RR_AVC',
|
||||||
|
32768 => 'Net_DNS2_RR_TA',
|
||||||
|
32769 => 'Net_DNS2_RR_DLV'
|
||||||
|
);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* used to map resource record class names to their id's, and back
|
||||||
|
*/
|
||||||
|
public static $classes_by_id = array();
|
||||||
|
public static $classes_by_name = array(
|
||||||
|
|
||||||
|
'IN' => self::RR_CLASS_IN, // RFC 1035
|
||||||
|
'CH' => self::RR_CLASS_CH, // RFC 1035
|
||||||
|
'HS' => self::RR_CLASS_HS, // RFC 1035
|
||||||
|
'NONE' => self::RR_CLASS_NONE, // RFC 2136
|
||||||
|
'ANY' => self::RR_CLASS_ANY // RFC 1035
|
||||||
|
);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* maps response codes to error messages
|
||||||
|
*/
|
||||||
|
public static $result_code_messages = array(
|
||||||
|
|
||||||
|
self::RCODE_NOERROR => 'The request completed successfully.',
|
||||||
|
self::RCODE_FORMERR => 'The name server was unable to interpret the query.',
|
||||||
|
self::RCODE_SERVFAIL => 'The name server was unable to process this query due to a problem with the name server.',
|
||||||
|
self::RCODE_NXDOMAIN => 'The domain name referenced in the query does not exist.',
|
||||||
|
self::RCODE_NOTIMP => 'The name server does not support the requested kind of query.',
|
||||||
|
self::RCODE_REFUSED => 'The name server refuses to perform the specified operation for policy reasons.',
|
||||||
|
self::RCODE_YXDOMAIN => 'Name Exists when it should not.',
|
||||||
|
self::RCODE_YXRRSET => 'RR Set Exists when it should not.',
|
||||||
|
self::RCODE_NXRRSET => 'RR Set that should exist does not.',
|
||||||
|
self::RCODE_NOTAUTH => 'Server Not Authoritative for zone.',
|
||||||
|
self::RCODE_NOTZONE => 'Name not contained in zone.',
|
||||||
|
|
||||||
|
self::RCODE_BADSIG => 'TSIG Signature Failure.',
|
||||||
|
self::RCODE_BADKEY => 'Key not recognized.',
|
||||||
|
self::RCODE_BADTIME => 'Signature out of time window.',
|
||||||
|
self::RCODE_BADMODE => 'Bad TKEY Mode.',
|
||||||
|
self::RCODE_BADNAME => 'Duplicate key name.',
|
||||||
|
self::RCODE_BADALG => 'Algorithm not supported.',
|
||||||
|
self::RCODE_BADTRUNC => 'Bad truncation.'
|
||||||
|
);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* maps DNS SEC alrorithms to their mnemonics
|
||||||
|
*/
|
||||||
|
public static $algorithm_name_to_id = array();
|
||||||
|
public static $algorithm_id_to_name = array(
|
||||||
|
|
||||||
|
self::DNSSEC_ALGORITHM_RES => 'RES',
|
||||||
|
self::DNSSEC_ALGORITHM_RSAMD5 => 'RSAMD5',
|
||||||
|
self::DNSSEC_ALGORITHM_DH => 'DH',
|
||||||
|
self::DNSSEC_ALGORITHM_DSA => 'DSA',
|
||||||
|
self::DNSSEC_ALGORITHM_ECC => 'ECC',
|
||||||
|
self::DNSSEC_ALGORITHM_RSASHA1 => 'RSASHA1',
|
||||||
|
self::DNSSEC_ALGORITHM_DSANSEC3SHA1 => 'DSA-NSEC3-SHA1',
|
||||||
|
self::DSNSEC_ALGORITHM_RSASHA1NSEC3SHA1 => 'RSASHA1-NSEC3-SHA1',
|
||||||
|
self::DNSSEC_ALGORITHM_RSASHA256 => 'RSASHA256',
|
||||||
|
self::DNSSEC_ALGORITHM_RSASHA512 => 'RSASHA512',
|
||||||
|
self::DNSSEC_ALGORITHM_ECCGOST => 'ECC-GOST',
|
||||||
|
self::DNSSEC_ALGORITHM_INDIRECT => 'INDIRECT',
|
||||||
|
self::DNSSEC_ALGORITHM_PRIVATEDNS => 'PRIVATEDNS',
|
||||||
|
self::DNSSEC_ALGORITHM_PRIVATEOID => 'PRIVATEOID'
|
||||||
|
);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* maps DNSSEC digest types to their mnemonics
|
||||||
|
*/
|
||||||
|
public static $digest_name_to_id = array();
|
||||||
|
public static $digest_id_to_name = array(
|
||||||
|
|
||||||
|
self::DNSSEC_DIGEST_RES => 'RES',
|
||||||
|
self::DNSSEC_DIGEST_SHA1 => 'SHA-1'
|
||||||
|
);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Protocols names - RFC 1010
|
||||||
|
*/
|
||||||
|
public static $protocol_by_id = array();
|
||||||
|
public static $protocol_by_name = array(
|
||||||
|
|
||||||
|
'ICMP' => 1,
|
||||||
|
'IGMP' => 2,
|
||||||
|
'GGP' => 3,
|
||||||
|
'ST' => 5,
|
||||||
|
'TCP' => 6,
|
||||||
|
'UCL' => 7,
|
||||||
|
'EGP' => 8,
|
||||||
|
'IGP' => 9,
|
||||||
|
'BBN-RCC-MON' => 10,
|
||||||
|
'NVP-II' => 11,
|
||||||
|
'PUP' => 12,
|
||||||
|
'ARGUS' => 13,
|
||||||
|
'EMCON' => 14,
|
||||||
|
'XNET' => 15,
|
||||||
|
'CHAOS' => 16,
|
||||||
|
'UDP' => 17,
|
||||||
|
'MUX' => 18,
|
||||||
|
'DCN-MEAS' => 19,
|
||||||
|
'HMP' => 20,
|
||||||
|
'PRM' => 21,
|
||||||
|
'XNS-IDP' => 22,
|
||||||
|
'TRUNK-1' => 23,
|
||||||
|
'TRUNK-2' => 24,
|
||||||
|
'LEAF-1' => 25,
|
||||||
|
'LEAF-2' => 26,
|
||||||
|
'RDP' => 27,
|
||||||
|
'IRTP' => 28,
|
||||||
|
'ISO-TP4' => 29,
|
||||||
|
'NETBLT' => 30,
|
||||||
|
'MFE-NSP' => 31,
|
||||||
|
'MERIT-INP' => 32,
|
||||||
|
'SEP' => 33,
|
||||||
|
// 34 - 60 - Unassigned
|
||||||
|
// 61 - any host internal protocol
|
||||||
|
'CFTP' => 62,
|
||||||
|
// 63 - any local network
|
||||||
|
'SAT-EXPAK' => 64,
|
||||||
|
'MIT-SUBNET' => 65,
|
||||||
|
'RVD' => 66,
|
||||||
|
'IPPC' => 67,
|
||||||
|
// 68 - any distributed file system
|
||||||
|
'SAT-MON' => 69,
|
||||||
|
// 70 - Unassigned
|
||||||
|
'IPCV' => 71,
|
||||||
|
// 72 - 75 - Unassigned
|
||||||
|
'BR-SAT-MON' => 76,
|
||||||
|
// 77 - Unassigned
|
||||||
|
'WB-MON' => 78,
|
||||||
|
'WB-EXPAK' => 79
|
||||||
|
// 80 - 254 - Unassigned
|
||||||
|
// 255 - Reserved
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
434
bundled-libs/Net/DNS2/Packet.php
Normal file
434
bundled-libs/Net/DNS2/Packet.php
Normal file
@ -0,0 +1,434 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2010 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 0.6.0
|
||||||
|
*
|
||||||
|
* This file contains code based off the Net::DNS Perl module by
|
||||||
|
* Michael Fuhr.
|
||||||
|
*
|
||||||
|
* This is the copyright notice from the PERL Net::DNS module:
|
||||||
|
*
|
||||||
|
* Copyright (c) 1997-2000 Michael Fuhr. All rights reserved. This
|
||||||
|
* program is free software; you can redistribute it and/or modify it
|
||||||
|
* under the same terms as Perl itself.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is the base class that holds a standard DNS packet.
|
||||||
|
*
|
||||||
|
* The Net_DNS2_Packet_Request and Net_DNS2_Packet_Response classes extend this
|
||||||
|
* class.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_Packet_Request, Net_DNS2_Packet_Response
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_Packet
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* the full binary data and length for this packet
|
||||||
|
*/
|
||||||
|
public $rdata;
|
||||||
|
public $rdlength;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* the offset pointer used when building/parsing packets
|
||||||
|
*/
|
||||||
|
public $offset = 0;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Net_DNS2_Header object with the DNS packet header
|
||||||
|
*/
|
||||||
|
public $header;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* array of Net_DNS2_Question objects
|
||||||
|
*
|
||||||
|
* used as "zone" for updates per RFC2136
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public $question = array();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* array of Net_DNS2_RR Objects for Answers
|
||||||
|
*
|
||||||
|
* used as "prerequisite" for updates per RFC2136
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public $answer = array();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* array of Net_DNS2_RR Objects for Authority
|
||||||
|
*
|
||||||
|
* used as "update" for updates per RFC2136
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public $authority = array();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* array of Net_DNS2_RR Objects for Addtitional
|
||||||
|
*/
|
||||||
|
public $additional = array();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* array of compressed labeles
|
||||||
|
*/
|
||||||
|
private $_compressed = array();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* magic __toString() method to return the Net_DNS2_Packet as a string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function __toString()
|
||||||
|
{
|
||||||
|
$output = $this->header->__toString();
|
||||||
|
|
||||||
|
foreach ($this->question as $x) {
|
||||||
|
|
||||||
|
$output .= $x->__toString() . "\n";
|
||||||
|
}
|
||||||
|
foreach ($this->answer as $x) {
|
||||||
|
|
||||||
|
$output .= $x->__toString() . "\n";
|
||||||
|
}
|
||||||
|
foreach ($this->authority as $x) {
|
||||||
|
|
||||||
|
$output .= $x->__toString() . "\n";
|
||||||
|
}
|
||||||
|
foreach ($this->additional as $x) {
|
||||||
|
|
||||||
|
$output .= $x->__toString() . "\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
return $output;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns a full binary DNS packet
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @throws Net_DNS2_Exception
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function get()
|
||||||
|
{
|
||||||
|
$data = $this->header->get($this);
|
||||||
|
|
||||||
|
foreach ($this->question as $x) {
|
||||||
|
|
||||||
|
$data .= $x->get($this);
|
||||||
|
}
|
||||||
|
foreach ($this->answer as $x) {
|
||||||
|
|
||||||
|
$data .= $x->get($this);
|
||||||
|
}
|
||||||
|
foreach ($this->authority as $x) {
|
||||||
|
|
||||||
|
$data .= $x->get($this);
|
||||||
|
}
|
||||||
|
foreach ($this->additional as $x) {
|
||||||
|
|
||||||
|
$data .= $x->get($this);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* applies a standard DNS name compression on the given name/offset
|
||||||
|
*
|
||||||
|
* This logic was based on the Net::DNS::Packet::dn_comp() function
|
||||||
|
* by Michanel Fuhr
|
||||||
|
*
|
||||||
|
* @param string $name the name to be compressed
|
||||||
|
* @param integer &$offset the offset into the given packet object
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function compress($name, &$offset)
|
||||||
|
{
|
||||||
|
$names = explode('.', $name);
|
||||||
|
$compname = '';
|
||||||
|
|
||||||
|
while (!empty($names)) {
|
||||||
|
|
||||||
|
$dname = join('.', $names);
|
||||||
|
|
||||||
|
if (isset($this->_compressed[$dname])) {
|
||||||
|
|
||||||
|
$compname .= pack('n', 0xc000 | $this->_compressed[$dname]);
|
||||||
|
$offset += 2;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->_compressed[$dname] = $offset;
|
||||||
|
$first = array_shift($names);
|
||||||
|
|
||||||
|
$length = strlen($first);
|
||||||
|
if ($length <= 0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// truncate see RFC1035 2.3.1
|
||||||
|
//
|
||||||
|
if ($length > 63) {
|
||||||
|
|
||||||
|
$length = 63;
|
||||||
|
$first = substr($first, 0, $length);
|
||||||
|
}
|
||||||
|
|
||||||
|
$compname .= pack('Ca*', $length, $first);
|
||||||
|
$offset += $length + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (empty($names)) {
|
||||||
|
|
||||||
|
$compname .= pack('C', 0);
|
||||||
|
$offset++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $compname;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* applies a standard DNS name compression on the given name/offset
|
||||||
|
*
|
||||||
|
* This logic was based on the Net::DNS::Packet::dn_comp() function
|
||||||
|
* by Michanel Fuhr
|
||||||
|
*
|
||||||
|
* @param string $name the name to be compressed
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public static function pack($name)
|
||||||
|
{
|
||||||
|
$offset = 0;
|
||||||
|
$names = explode('.', $name);
|
||||||
|
$compname = '';
|
||||||
|
|
||||||
|
while (!empty($names)) {
|
||||||
|
|
||||||
|
$first = array_shift($names);
|
||||||
|
$length = strlen($first);
|
||||||
|
|
||||||
|
$compname .= pack('Ca*', $length, $first);
|
||||||
|
$offset += $length + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
$compname .= "\0";
|
||||||
|
$offset++;
|
||||||
|
|
||||||
|
return $compname;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* expands the domain name stored at a given offset in a DNS Packet
|
||||||
|
*
|
||||||
|
* This logic was based on the Net::DNS::Packet::dn_expand() function
|
||||||
|
* by Michanel Fuhr
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet the DNS packet to look in for the domain name
|
||||||
|
* @param integer &$offset the offset into the given packet object
|
||||||
|
*
|
||||||
|
* @return mixed either the domain name or null if it's not found.
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public static function expand(Net_DNS2_Packet &$packet, &$offset)
|
||||||
|
{
|
||||||
|
$name = '';
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
if ($packet->rdlength < ($offset + 1)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
$xlen = ord($packet->rdata[$offset]);
|
||||||
|
if ($xlen == 0) {
|
||||||
|
|
||||||
|
++$offset;
|
||||||
|
break;
|
||||||
|
|
||||||
|
} else if (($xlen & 0xc0) == 0xc0) {
|
||||||
|
if ($packet->rdlength < ($offset + 2)) {
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
$ptr = ord($packet->rdata[$offset]) << 8 |
|
||||||
|
ord($packet->rdata[$offset+1]);
|
||||||
|
$ptr = $ptr & 0x3fff;
|
||||||
|
|
||||||
|
$name2 = Net_DNS2_Packet::expand($packet, $ptr);
|
||||||
|
if (is_null($name2)) {
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
$name .= $name2;
|
||||||
|
$offset += 2;
|
||||||
|
|
||||||
|
break;
|
||||||
|
} else {
|
||||||
|
++$offset;
|
||||||
|
|
||||||
|
if ($packet->rdlength < ($offset + $xlen)) {
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
$elem = '';
|
||||||
|
$elem = substr($packet->rdata, $offset, $xlen);
|
||||||
|
$name .= $elem . '.';
|
||||||
|
$offset += $xlen;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return trim($name, '.');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses a domain label from a DNS Packet at the given offset
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet the DNS packet to look in for the domain name
|
||||||
|
* @param integer &$offset the offset into the given packet object
|
||||||
|
*
|
||||||
|
* @return mixed either the domain name or null if it's not found.
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public static function label(Net_DNS2_Packet &$packet, &$offset)
|
||||||
|
{
|
||||||
|
$name = '';
|
||||||
|
|
||||||
|
if ($packet->rdlength < ($offset + 1)) {
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
$xlen = ord($packet->rdata[$offset]);
|
||||||
|
++$offset;
|
||||||
|
|
||||||
|
if (($xlen + $offset) > $packet->rdlength) {
|
||||||
|
|
||||||
|
$name = substr($packet->rdata, $offset);
|
||||||
|
$offset = $packet->rdlength;
|
||||||
|
} else {
|
||||||
|
|
||||||
|
$name = substr($packet->rdata, $offset, $xlen);
|
||||||
|
$offset += $xlen;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $name;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* copies the contents of the given packet, to the local packet object. this
|
||||||
|
* function intentionally ignores some of the packet data.
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet $packet the DNS packet to copy the data from
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function copy(Net_DNS2_Packet $packet)
|
||||||
|
{
|
||||||
|
$this->header = $packet->header;
|
||||||
|
$this->question = $packet->question;
|
||||||
|
$this->answer = $packet->answer;
|
||||||
|
$this->authority = $packet->authority;
|
||||||
|
$this->additional = $packet->additional;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* resets the values in the current packet object
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function reset()
|
||||||
|
{
|
||||||
|
$this->header->id = $this->header->nextPacketId();
|
||||||
|
$this->rdata = '';
|
||||||
|
$this->rdlength = 0;
|
||||||
|
$this->offset = 0;
|
||||||
|
$this->answer = array();
|
||||||
|
$this->authority = array();
|
||||||
|
$this->additional = array();
|
||||||
|
$this->_compressed = array();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
217
bundled-libs/Net/DNS2/Packet/Request.php
Normal file
217
bundled-libs/Net/DNS2/Packet/Request.php
Normal file
@ -0,0 +1,217 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2010 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 0.6.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class handles building new DNS request packets; packets used for DNS
|
||||||
|
* queries and updates.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_Packet
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_Packet_Request extends Net_DNS2_Packet
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Constructor - builds a new Net_DNS2_Packet_Request object
|
||||||
|
*
|
||||||
|
* @param string $name the domain name for the packet
|
||||||
|
* @param string $type the DNS RR type for the packet
|
||||||
|
* @param string $class the DNS class for the packet
|
||||||
|
*
|
||||||
|
* @throws Net_DNS2_Exception
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function __construct($name, $type = null, $class = null)
|
||||||
|
{
|
||||||
|
$this->set($name, $type, $class);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* builds a new Net_DNS2_Packet_Request object
|
||||||
|
*
|
||||||
|
* @param string $name the domain name for the packet
|
||||||
|
* @param string $type the DNS RR type for the packet
|
||||||
|
* @param string $class the DNS class for the packet
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @throws Net_DNS2_Exception
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function set($name, $type = 'A', $class = 'IN')
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// generate a new header
|
||||||
|
//
|
||||||
|
$this->header = new Net_DNS2_Header;
|
||||||
|
|
||||||
|
//
|
||||||
|
// add a new question
|
||||||
|
//
|
||||||
|
$q = new Net_DNS2_Question();
|
||||||
|
|
||||||
|
//
|
||||||
|
// allow queries directly to . for the root name servers
|
||||||
|
//
|
||||||
|
if ($name != '.') {
|
||||||
|
$name = trim(strtolower($name), " \t\n\r\0\x0B.");
|
||||||
|
}
|
||||||
|
|
||||||
|
$type = strtoupper(trim($type));
|
||||||
|
$class = strtoupper(trim($class));
|
||||||
|
|
||||||
|
//
|
||||||
|
// check that the input string has some data in it
|
||||||
|
//
|
||||||
|
if (empty($name)) {
|
||||||
|
|
||||||
|
throw new Net_DNS2_Exception(
|
||||||
|
'empty query string provided',
|
||||||
|
Net_DNS2_Lookups::E_PACKET_INVALID
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// if the type is "*", rename it to "ANY"- both are acceptable.
|
||||||
|
//
|
||||||
|
if ($type == '*') {
|
||||||
|
|
||||||
|
$type = 'ANY';
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// check that the type and class are valid
|
||||||
|
//
|
||||||
|
if ( (!isset(Net_DNS2_Lookups::$rr_types_by_name[$type]))
|
||||||
|
|| (!isset(Net_DNS2_Lookups::$classes_by_name[$class]))
|
||||||
|
) {
|
||||||
|
throw new Net_DNS2_Exception(
|
||||||
|
'invalid type (' . $type . ') or class (' . $class . ') specified.',
|
||||||
|
Net_DNS2_Lookups::E_PACKET_INVALID
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($type == 'PTR') {
|
||||||
|
|
||||||
|
//
|
||||||
|
// if it's a PTR request for an IP address, then make sure we tack on
|
||||||
|
// the arpa domain.
|
||||||
|
//
|
||||||
|
// there are other types of PTR requests, so if an IP adress doesn't match,
|
||||||
|
// then just let it flow through and assume it's a hostname
|
||||||
|
//
|
||||||
|
if (Net_DNS2::isIPv4($name) == true) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// IPv4
|
||||||
|
//
|
||||||
|
$name = implode('.', array_reverse(explode('.', $name)));
|
||||||
|
$name .= '.in-addr.arpa';
|
||||||
|
|
||||||
|
} else if (Net_DNS2::isIPv6($name) == true) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// IPv6
|
||||||
|
//
|
||||||
|
$e = Net_DNS2::expandIPv6($name);
|
||||||
|
if ($e !== false) {
|
||||||
|
|
||||||
|
$name = implode(
|
||||||
|
'.', array_reverse(str_split(str_replace(':', '', $e)))
|
||||||
|
);
|
||||||
|
|
||||||
|
$name .= '.ip6.arpa';
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
throw new Net_DNS2_Exception(
|
||||||
|
'unsupported PTR value: ' . $name,
|
||||||
|
Net_DNS2_Lookups::E_PACKET_INVALID
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// store the data
|
||||||
|
//
|
||||||
|
$q->qname = $name;
|
||||||
|
$q->qtype = $type;
|
||||||
|
$q->qclass = $class;
|
||||||
|
|
||||||
|
$this->question[] = $q;
|
||||||
|
|
||||||
|
//
|
||||||
|
// the answer, authority and additional are empty; they can be modified
|
||||||
|
// after the request is created for UPDATE requests if needed.
|
||||||
|
//
|
||||||
|
$this->answer = array();
|
||||||
|
$this->authority = array();
|
||||||
|
$this->additional = array();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
194
bundled-libs/Net/DNS2/Packet/Response.php
Normal file
194
bundled-libs/Net/DNS2/Packet/Response.php
Normal file
@ -0,0 +1,194 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2010 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 0.6.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class handles building new DNS response packets; it parses binary packed
|
||||||
|
* packets that come off the wire
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_Packet
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_Packet_Response extends Net_DNS2_Packet
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* The name servers that this response came from
|
||||||
|
*/
|
||||||
|
public $answer_from;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The socket type the answer came from (TCP/UDP)
|
||||||
|
*/
|
||||||
|
public $answer_socket_type;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The query response time in microseconds
|
||||||
|
*/
|
||||||
|
public $response_time = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor - builds a new Net_DNS2_Packet_Response object
|
||||||
|
*
|
||||||
|
* @param string $data binary DNS packet
|
||||||
|
* @param integer $size the length of the DNS packet
|
||||||
|
*
|
||||||
|
* @throws Net_DNS2_Exception
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function __construct($data, $size)
|
||||||
|
{
|
||||||
|
$this->set($data, $size);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* builds a new Net_DNS2_Packet_Response object
|
||||||
|
*
|
||||||
|
* @param string $data binary DNS packet
|
||||||
|
* @param integer $size the length of the DNS packet
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @throws Net_DNS2_Exception
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function set($data, $size)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// store the full packet
|
||||||
|
//
|
||||||
|
$this->rdata = $data;
|
||||||
|
$this->rdlength = $size;
|
||||||
|
|
||||||
|
//
|
||||||
|
// parse the header
|
||||||
|
//
|
||||||
|
// we don't bother checking the size earlier, because the first thing the
|
||||||
|
// header class does, is check the size and throw and exception if it's
|
||||||
|
// invalid.
|
||||||
|
//
|
||||||
|
$this->header = new Net_DNS2_Header($this);
|
||||||
|
|
||||||
|
//
|
||||||
|
// if the truncation bit is set, then just return right here, because the
|
||||||
|
// rest of the packet is probably empty; and there's no point in processing
|
||||||
|
// anything else.
|
||||||
|
//
|
||||||
|
// we also don't need to worry about checking to see if the the header is
|
||||||
|
// null or not, since the Net_DNS2_Header() constructor will throw an
|
||||||
|
// exception if the packet is invalid.
|
||||||
|
//
|
||||||
|
if ($this->header->tc == 1) {
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// parse the questions
|
||||||
|
//
|
||||||
|
for ($x = 0; $x < $this->header->qdcount; ++$x) {
|
||||||
|
|
||||||
|
$this->question[$x] = new Net_DNS2_Question($this);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// parse the answers
|
||||||
|
//
|
||||||
|
for ($x = 0; $x < $this->header->ancount; ++$x) {
|
||||||
|
|
||||||
|
$o = Net_DNS2_RR::parse($this);
|
||||||
|
if (!is_null($o)) {
|
||||||
|
|
||||||
|
$this->answer[] = $o;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// parse the authority section
|
||||||
|
//
|
||||||
|
for ($x = 0; $x < $this->header->nscount; ++$x) {
|
||||||
|
|
||||||
|
$o = Net_DNS2_RR::parse($this);
|
||||||
|
if (!is_null($o)) {
|
||||||
|
|
||||||
|
$this->authority[] = $o;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// parse the additional section
|
||||||
|
//
|
||||||
|
for ($x = 0; $x < $this->header->arcount; ++$x) {
|
||||||
|
|
||||||
|
$o = Net_DNS2_RR::parse($this);
|
||||||
|
if (!is_null($o)) {
|
||||||
|
|
||||||
|
$this->additional[] = $o;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
424
bundled-libs/Net/DNS2/PrivateKey.php
Normal file
424
bundled-libs/Net/DNS2/PrivateKey.php
Normal file
@ -0,0 +1,424 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2011 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 1.1.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SSL Private Key container class
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_PrivateKey
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* the filename that was loaded; stored for reference
|
||||||
|
*/
|
||||||
|
public $filename;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* the keytag for the signature
|
||||||
|
*/
|
||||||
|
public $keytag;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* the sign name for the signature
|
||||||
|
*/
|
||||||
|
public $signname;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* the algorithm used for the signature
|
||||||
|
*/
|
||||||
|
public $algorithm;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* the key format fo the signature
|
||||||
|
*/
|
||||||
|
public $key_format;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* the openssl private key id
|
||||||
|
*/
|
||||||
|
public $instance;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* RSA: modulus
|
||||||
|
*/
|
||||||
|
private $_modulus;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* RSA: public exponent
|
||||||
|
*/
|
||||||
|
private $_public_exponent;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* RSA: rivate exponent
|
||||||
|
*/
|
||||||
|
private $_private_exponent;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* RSA: prime1
|
||||||
|
*/
|
||||||
|
private $_prime1;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* RSA: prime2
|
||||||
|
*/
|
||||||
|
private $_prime2;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* RSA: exponent 1
|
||||||
|
*/
|
||||||
|
private $_exponent1;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* RSA: exponent 2
|
||||||
|
*/
|
||||||
|
private $_exponent2;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* RSA: coefficient
|
||||||
|
*/
|
||||||
|
private $_coefficient;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* DSA: prime
|
||||||
|
*/
|
||||||
|
public $prime;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* DSA: subprime
|
||||||
|
*/
|
||||||
|
public $subprime;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* DSA: base
|
||||||
|
*/
|
||||||
|
public $base;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* DSA: private value
|
||||||
|
*/
|
||||||
|
public $private_value;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* DSA: public value
|
||||||
|
*/
|
||||||
|
public $public_value;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor - base constructor the private key container class
|
||||||
|
*
|
||||||
|
* @param string $file path to a private-key file to parse and load
|
||||||
|
*
|
||||||
|
* @throws Net_DNS2_Exception
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function __construct($file = null)
|
||||||
|
{
|
||||||
|
if (isset($file)) {
|
||||||
|
$this->parseFile($file);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses a private key file generated by dnssec-keygen
|
||||||
|
*
|
||||||
|
* @param string $file path to a private-key file to parse and load
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @throws Net_DNS2_Exception
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function parseFile($file)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// check for OpenSSL
|
||||||
|
//
|
||||||
|
if (extension_loaded('openssl') === false) {
|
||||||
|
|
||||||
|
throw new Net_DNS2_Exception(
|
||||||
|
'the OpenSSL extension is required to use parse private key.',
|
||||||
|
Net_DNS2_Lookups::E_OPENSSL_UNAVAIL
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// check to make sure the file exists
|
||||||
|
//
|
||||||
|
if (is_readable($file) == false) {
|
||||||
|
|
||||||
|
throw new Net_DNS2_Exception(
|
||||||
|
'invalid private key file: ' . $file,
|
||||||
|
Net_DNS2_Lookups::E_OPENSSL_INV_PKEY
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// get the base filename, and parse it for the local value
|
||||||
|
//
|
||||||
|
$keyname = basename($file);
|
||||||
|
if (strlen($keyname) == 0) {
|
||||||
|
|
||||||
|
throw new Net_DNS2_Exception(
|
||||||
|
'failed to get basename() for: ' . $file,
|
||||||
|
Net_DNS2_Lookups::E_OPENSSL_INV_PKEY
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// parse the keyname
|
||||||
|
//
|
||||||
|
if (preg_match("/K(.*)\.\+(\d{3})\+(\d*)\.private/", $keyname, $matches)) {
|
||||||
|
|
||||||
|
$this->signname = $matches[1];
|
||||||
|
$this->algorithm = intval($matches[2]);
|
||||||
|
$this->keytag = intval($matches[3]);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
throw new Net_DNS2_Exception(
|
||||||
|
'file ' . $keyname . ' does not look like a private key file!',
|
||||||
|
Net_DNS2_Lookups::E_OPENSSL_INV_PKEY
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// read all the data from the
|
||||||
|
//
|
||||||
|
$data = file($file, FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES);
|
||||||
|
if (count($data) == 0) {
|
||||||
|
|
||||||
|
throw new Net_DNS2_Exception(
|
||||||
|
'file ' . $keyname . ' is empty!',
|
||||||
|
Net_DNS2_Lookups::E_OPENSSL_INV_PKEY
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($data as $line) {
|
||||||
|
|
||||||
|
list($key, $value) = explode(':', $line);
|
||||||
|
|
||||||
|
$key = trim($key);
|
||||||
|
$value = trim($value);
|
||||||
|
|
||||||
|
switch(strtolower($key)) {
|
||||||
|
|
||||||
|
case 'private-key-format':
|
||||||
|
$this->_key_format = $value;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'algorithm':
|
||||||
|
if ($this->algorithm != $value) {
|
||||||
|
throw new Net_DNS2_Exception(
|
||||||
|
'Algorithm mis-match! filename is ' . $this->algorithm .
|
||||||
|
', contents say ' . $value,
|
||||||
|
Net_DNS2_Lookups::E_OPENSSL_INV_ALGO
|
||||||
|
);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
//
|
||||||
|
// RSA
|
||||||
|
//
|
||||||
|
case 'modulus':
|
||||||
|
$this->_modulus = $value;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'publicexponent':
|
||||||
|
$this->_public_exponent = $value;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'privateexponent':
|
||||||
|
$this->_private_exponent = $value;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'prime1':
|
||||||
|
$this->_prime1 = $value;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'prime2':
|
||||||
|
$this->_prime2 = $value;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'exponent1':
|
||||||
|
$this->_exponent1 = $value;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'exponent2':
|
||||||
|
$this->_exponent2 = $value;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'coefficient':
|
||||||
|
$this->_coefficient = $value;
|
||||||
|
break;
|
||||||
|
|
||||||
|
//
|
||||||
|
// DSA - this won't work in PHP until the OpenSSL extension is better
|
||||||
|
//
|
||||||
|
case 'prime(p)':
|
||||||
|
$this->prime = $value;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'subprime(q)':
|
||||||
|
$this->subprime = $value;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'base(g)':
|
||||||
|
$this->base = $value;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'private_value(x)':
|
||||||
|
$this->private_value = $value;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'public_value(y)':
|
||||||
|
$this->public_value = $value;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
throw new Net_DNS2_Exception(
|
||||||
|
'unknown private key data: ' . $key . ': ' . $value,
|
||||||
|
Net_DNS2_Lookups::E_OPENSSL_INV_PKEY
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// generate the private key
|
||||||
|
//
|
||||||
|
$args = array();
|
||||||
|
|
||||||
|
switch($this->algorithm) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// RSA
|
||||||
|
//
|
||||||
|
case Net_DNS2_Lookups::DNSSEC_ALGORITHM_RSAMD5:
|
||||||
|
case Net_DNS2_Lookups::DNSSEC_ALGORITHM_RSASHA1:
|
||||||
|
case Net_DNS2_Lookups::DNSSEC_ALGORITHM_RSASHA256:
|
||||||
|
case Net_DNS2_Lookups::DNSSEC_ALGORITHM_RSASHA512:
|
||||||
|
|
||||||
|
$args = array(
|
||||||
|
|
||||||
|
'rsa' => array(
|
||||||
|
|
||||||
|
'n' => base64_decode($this->_modulus),
|
||||||
|
'e' => base64_decode($this->_public_exponent),
|
||||||
|
'd' => base64_decode($this->_private_exponent),
|
||||||
|
'p' => base64_decode($this->_prime1),
|
||||||
|
'q' => base64_decode($this->_prime2),
|
||||||
|
'dmp1' => base64_decode($this->_exponent1),
|
||||||
|
'dmq1' => base64_decode($this->_exponent2),
|
||||||
|
'iqmp' => base64_decode($this->_coefficient)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
//
|
||||||
|
// DSA - this won't work in PHP until the OpenSSL extension is better
|
||||||
|
//
|
||||||
|
case Net_DNS2_Lookups::DNSSEC_ALGORITHM_DSA:
|
||||||
|
|
||||||
|
$args = array(
|
||||||
|
|
||||||
|
'dsa' => array(
|
||||||
|
|
||||||
|
'p' => base64_decode($this->prime),
|
||||||
|
'q' => base64_decode($this->subprime),
|
||||||
|
'g' => base64_decode($this->base),
|
||||||
|
'priv_key' => base64_decode($this->private_value),
|
||||||
|
'pub_key' => base64_decode($this->public_value)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
throw new Net_DNS2_Exception(
|
||||||
|
'we only currently support RSAMD5 and RSASHA1 encryption.',
|
||||||
|
Net_DNS2_Lookups::E_OPENSSL_INV_PKEY
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// generate and store the key
|
||||||
|
//
|
||||||
|
$this->instance = openssl_pkey_new($args);
|
||||||
|
if ($this->instance === false) {
|
||||||
|
throw new Net_DNS2_Exception(
|
||||||
|
openssl_error_string(),
|
||||||
|
Net_DNS2_Lookups::E_OPENSSL_ERROR
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// store the filename incase we need it for something
|
||||||
|
//
|
||||||
|
$this->filename = $file;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
244
bundled-libs/Net/DNS2/Question.php
Normal file
244
bundled-libs/Net/DNS2/Question.php
Normal file
@ -0,0 +1,244 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2010 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 0.6.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class handles parsing and constructing the question sectino of DNS
|
||||||
|
* packets.
|
||||||
|
*
|
||||||
|
* This is referred to as the "zone" for update per RFC2136
|
||||||
|
*
|
||||||
|
* DNS question format - RFC1035 section 4.1.2
|
||||||
|
*
|
||||||
|
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* | |
|
||||||
|
* / QNAME /
|
||||||
|
* / /
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* | QTYPE |
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* | QCLASS |
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_Packet
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_Question
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* The name of the question
|
||||||
|
*
|
||||||
|
* referred to as "zname" for updates per RFC2136
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public $qname;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The RR type for the questino
|
||||||
|
*
|
||||||
|
* referred to as "ztype" for updates per RFC2136
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public $qtype;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The RR class for the questino
|
||||||
|
*
|
||||||
|
* referred to as "zclass" for updates per RFC2136
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public $qclass;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor - builds a new Net_DNS2_Question object
|
||||||
|
*
|
||||||
|
* @param mixed &$packet either a Net_DNS2_Packet object, or null to
|
||||||
|
* build an empty object
|
||||||
|
*
|
||||||
|
* @throws Net_DNS2_Exception
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function __construct(Net_DNS2_Packet &$packet = null)
|
||||||
|
{
|
||||||
|
if (!is_null($packet)) {
|
||||||
|
|
||||||
|
$this->set($packet);
|
||||||
|
} else {
|
||||||
|
|
||||||
|
$this->qname = '';
|
||||||
|
$this->qtype = 'A';
|
||||||
|
$this->qclass = 'IN';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* magic __toString() function to return the Net_DNS2_Question object as a string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function __toString()
|
||||||
|
{
|
||||||
|
return ";;\n;; Question:\n;;\t " . $this->qname . '. ' .
|
||||||
|
$this->qtype . ' ' . $this->qclass . "\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* builds a new Net_DNS2_Header object from a Net_DNS2_Packet object
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet object
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @throws Net_DNS2_Exception
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function set(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// expand the name
|
||||||
|
//
|
||||||
|
$this->qname = $packet->expand($packet, $packet->offset);
|
||||||
|
if ($packet->rdlength < ($packet->offset + 4)) {
|
||||||
|
|
||||||
|
throw new Net_DNS2_Exception(
|
||||||
|
'invalid question section: to small',
|
||||||
|
Net_DNS2_Lookups::E_QUESTION_INVALID
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// unpack the type and class
|
||||||
|
//
|
||||||
|
$type = ord($packet->rdata[$packet->offset++]) << 8 |
|
||||||
|
ord($packet->rdata[$packet->offset++]);
|
||||||
|
$class = ord($packet->rdata[$packet->offset++]) << 8 |
|
||||||
|
ord($packet->rdata[$packet->offset++]);
|
||||||
|
|
||||||
|
//
|
||||||
|
// validate it
|
||||||
|
//
|
||||||
|
$type_name = Net_DNS2_Lookups::$rr_types_by_id[$type];
|
||||||
|
$class_name = Net_DNS2_Lookups::$classes_by_id[$class];
|
||||||
|
|
||||||
|
if ( (!isset($type_name)) || (!isset($class_name)) ) {
|
||||||
|
|
||||||
|
throw new Net_DNS2_Exception(
|
||||||
|
'invalid question section: invalid type (' . $type .
|
||||||
|
') or class (' . $class . ') specified.',
|
||||||
|
Net_DNS2_Lookups::E_QUESTION_INVALID
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// store it
|
||||||
|
//
|
||||||
|
$this->qtype = $type_name;
|
||||||
|
$this->qclass = $class_name;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns a binary packed Net_DNS2_Question object
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet the Net_DNS2_Packet object this question is
|
||||||
|
* part of. This needs to be passed in so that
|
||||||
|
* the compressed qname value can be packed in
|
||||||
|
* with the names of the other parts of the
|
||||||
|
* packet.
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @throws Net_DNS2_Exception
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function get(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// validate the type and class
|
||||||
|
//
|
||||||
|
$type = Net_DNS2_Lookups::$rr_types_by_name[$this->qtype];
|
||||||
|
$class = Net_DNS2_Lookups::$classes_by_name[$this->qclass];
|
||||||
|
|
||||||
|
if ( (!isset($type)) || (!isset($class)) ) {
|
||||||
|
|
||||||
|
throw new Net_DNS2_Exception(
|
||||||
|
'invalid question section: invalid type (' . $this->qtype .
|
||||||
|
') or class (' . $this->qclass . ') specified.',
|
||||||
|
Net_DNS2_Lookups::E_QUESTION_INVALID
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
$data = $packet->compress($this->qname, $packet->offset);
|
||||||
|
|
||||||
|
$data .= chr($type >> 8) . chr($type) . chr($class >> 8) . chr($class);
|
||||||
|
$packet->offset += 4;
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
644
bundled-libs/Net/DNS2/RR.php
Normal file
644
bundled-libs/Net/DNS2/RR.php
Normal file
@ -0,0 +1,644 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2010 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 0.6.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is the base class for DNS Resource Records
|
||||||
|
*
|
||||||
|
* Each resource record type (defined in RR/*.php) extends this class for
|
||||||
|
* base functionality.
|
||||||
|
*
|
||||||
|
* This class handles parsing and constructing the common parts of the DNS
|
||||||
|
* resource records, while the RR specific functionality is handled in each
|
||||||
|
* child class.
|
||||||
|
*
|
||||||
|
* DNS resource record format - RFC1035 section 4.1.3
|
||||||
|
*
|
||||||
|
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* | |
|
||||||
|
* / /
|
||||||
|
* / NAME /
|
||||||
|
* | |
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* | TYPE |
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* | CLASS |
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* | TTL |
|
||||||
|
* | |
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* | RDLENGTH |
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--|
|
||||||
|
* / RDATA /
|
||||||
|
* / /
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
abstract class Net_DNS2_RR
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* The name of the resource record
|
||||||
|
*/
|
||||||
|
public $name;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The resource record type
|
||||||
|
*/
|
||||||
|
public $type;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The resouce record class
|
||||||
|
*/
|
||||||
|
public $class;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The time to live for this resource record
|
||||||
|
*/
|
||||||
|
public $ttl;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The length of the rdata field
|
||||||
|
*/
|
||||||
|
public $rdlength;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The resource record specific data as a packed binary string
|
||||||
|
*/
|
||||||
|
public $rdata;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* abstract definition - method to return a RR as a string; not to
|
||||||
|
* be confused with the __toString() magic method.
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
abstract protected function rrToString();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* abstract definition - parses a RR from a standard DNS config line
|
||||||
|
*
|
||||||
|
* @param array $rdata a string split line of values for the rdata
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
abstract protected function rrFromString(array $rdata);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* abstract definition - sets a Net_DNS2_RR from a Net_DNS2_Packet object
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet to parse the RR from
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
abstract protected function rrSet(Net_DNS2_Packet &$packet);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* abstract definition - returns a binary packet DNS RR object
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet use for
|
||||||
|
* compressed names
|
||||||
|
*
|
||||||
|
* @return mixed either returns a binary packed string or
|
||||||
|
* null on failure
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
abstract protected function rrGet(Net_DNS2_Packet &$packet);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor - builds a new Net_DNS2_RR object
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet or null to create
|
||||||
|
* an empty object
|
||||||
|
* @param array $rr an array with RR parse values or null to
|
||||||
|
* create an empty object
|
||||||
|
*
|
||||||
|
* @throws Net_DNS2_Exception
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function __construct(Net_DNS2_Packet &$packet = null, array $rr = null)
|
||||||
|
{
|
||||||
|
if ( (!is_null($packet)) && (!is_null($rr)) ) {
|
||||||
|
|
||||||
|
if ($this->set($packet, $rr) == false) {
|
||||||
|
|
||||||
|
throw new Net_DNS2_Exception(
|
||||||
|
'failed to generate resource record',
|
||||||
|
Net_DNS2_Lookups::E_RR_INVALID
|
||||||
|
);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
|
||||||
|
$class = Net_DNS2_Lookups::$rr_types_class_to_id[get_class($this)];
|
||||||
|
if (isset($class)) {
|
||||||
|
|
||||||
|
$this->type = Net_DNS2_Lookups::$rr_types_by_id[$class];
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->class = 'IN';
|
||||||
|
$this->ttl = 86400;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* magic __toString() method to return the Net_DNS2_RR object object as a string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function __toString()
|
||||||
|
{
|
||||||
|
return $this->name . '. ' . $this->ttl . ' ' . $this->class .
|
||||||
|
' ' . $this->type . ' ' . $this->rrToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* return a formatted string; if a string has spaces in it, then return
|
||||||
|
* it with double quotes around it, otherwise, return it as it was passed in.
|
||||||
|
*
|
||||||
|
* @param string $string the string to format
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function formatString($string)
|
||||||
|
{
|
||||||
|
return '"' . str_replace('"', '\"', trim($string, '"')) . '"';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* builds an array of strings from an array of chunks of text split by spaces
|
||||||
|
*
|
||||||
|
* @param array $chunks an array of chunks of text split by spaces
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function buildString(array $chunks)
|
||||||
|
{
|
||||||
|
$data = array();
|
||||||
|
$c = 0;
|
||||||
|
$in = false;
|
||||||
|
|
||||||
|
foreach ($chunks as $r) {
|
||||||
|
|
||||||
|
$r = trim($r);
|
||||||
|
if (strlen($r) == 0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( ($r[0] == '"')
|
||||||
|
&& ($r[strlen($r) - 1] == '"')
|
||||||
|
&& ($r[strlen($r) - 2] != '\\')
|
||||||
|
) {
|
||||||
|
|
||||||
|
$data[$c] = $r;
|
||||||
|
++$c;
|
||||||
|
$in = false;
|
||||||
|
|
||||||
|
} else if ($r[0] == '"') {
|
||||||
|
|
||||||
|
$data[$c] = $r;
|
||||||
|
$in = true;
|
||||||
|
|
||||||
|
} else if ( ($r[strlen($r) - 1] == '"')
|
||||||
|
&& ($r[strlen($r) - 2] != '\\')
|
||||||
|
) {
|
||||||
|
|
||||||
|
$data[$c] .= ' ' . $r;
|
||||||
|
++$c;
|
||||||
|
$in = false;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
if ($in == true) {
|
||||||
|
$data[$c] .= ' ' . $r;
|
||||||
|
} else {
|
||||||
|
$data[$c++] = $r;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($data as $index => $string) {
|
||||||
|
|
||||||
|
$data[$index] = str_replace('\"', '"', trim($string, '"'));
|
||||||
|
}
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* builds a new Net_DNS2_RR object
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet or null to create
|
||||||
|
* an empty object
|
||||||
|
* @param array $rr an array with RR parse values or null to
|
||||||
|
* create an empty object
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @throws Net_DNS2_Exception
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function set(Net_DNS2_Packet &$packet, array $rr)
|
||||||
|
{
|
||||||
|
$this->name = $rr['name'];
|
||||||
|
$this->type = Net_DNS2_Lookups::$rr_types_by_id[$rr['type']];
|
||||||
|
|
||||||
|
//
|
||||||
|
// for RR OPT (41), the class value includes the requestors UDP payload size,
|
||||||
|
// and not a class value
|
||||||
|
//
|
||||||
|
if ($this->type == 'OPT') {
|
||||||
|
$this->class = $rr['class'];
|
||||||
|
} else {
|
||||||
|
$this->class = Net_DNS2_Lookups::$classes_by_id[$rr['class']];
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->ttl = $rr['ttl'];
|
||||||
|
$this->rdlength = $rr['rdlength'];
|
||||||
|
$this->rdata = substr($packet->rdata, $packet->offset, $rr['rdlength']);
|
||||||
|
|
||||||
|
return $this->rrSet($packet);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns a binary packed DNS RR object
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet used for
|
||||||
|
* compressing names
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @throws Net_DNS2_Exception
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function get(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
$data = '';
|
||||||
|
$rdata = '';
|
||||||
|
|
||||||
|
//
|
||||||
|
// pack the name
|
||||||
|
//
|
||||||
|
$data = $packet->compress($this->name, $packet->offset);
|
||||||
|
|
||||||
|
//
|
||||||
|
// pack the main values
|
||||||
|
//
|
||||||
|
if ($this->type == 'OPT') {
|
||||||
|
|
||||||
|
//
|
||||||
|
// pre-build the TTL value
|
||||||
|
//
|
||||||
|
$this->preBuild();
|
||||||
|
|
||||||
|
//
|
||||||
|
// the class value is different for OPT types
|
||||||
|
//
|
||||||
|
$data .= pack(
|
||||||
|
'nnN',
|
||||||
|
Net_DNS2_Lookups::$rr_types_by_name[$this->type],
|
||||||
|
$this->class,
|
||||||
|
$this->ttl
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
|
||||||
|
$data .= pack(
|
||||||
|
'nnN',
|
||||||
|
Net_DNS2_Lookups::$rr_types_by_name[$this->type],
|
||||||
|
Net_DNS2_Lookups::$classes_by_name[$this->class],
|
||||||
|
$this->ttl
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// increase the offset, and allow for the rdlength
|
||||||
|
//
|
||||||
|
$packet->offset += 10;
|
||||||
|
|
||||||
|
//
|
||||||
|
// get the RR specific details
|
||||||
|
//
|
||||||
|
if ($this->rdlength != -1) {
|
||||||
|
|
||||||
|
$rdata = $this->rrGet($packet);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// add the RR
|
||||||
|
//
|
||||||
|
$data .= pack('n', strlen($rdata)) . $rdata;
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses a binary packet, and returns the appropriate Net_DNS2_RR object,
|
||||||
|
* based on the RR type of the binary content.
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet used for
|
||||||
|
* decompressing names
|
||||||
|
*
|
||||||
|
* @return mixed returns a new Net_DNS2_RR_* object for
|
||||||
|
* the given RR
|
||||||
|
* @throws Net_DNS2_Exception
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public static function parse(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
$object = array();
|
||||||
|
|
||||||
|
//
|
||||||
|
// expand the name
|
||||||
|
//
|
||||||
|
$object['name'] = $packet->expand($packet, $packet->offset);
|
||||||
|
if (is_null($object['name'])) {
|
||||||
|
|
||||||
|
throw new Net_DNS2_Exception(
|
||||||
|
'failed to parse resource record: failed to expand name.',
|
||||||
|
Net_DNS2_Lookups::E_PARSE_ERROR
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if ($packet->rdlength < ($packet->offset + 10)) {
|
||||||
|
|
||||||
|
throw new Net_DNS2_Exception(
|
||||||
|
'failed to parse resource record: packet too small.',
|
||||||
|
Net_DNS2_Lookups::E_PARSE_ERROR
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// unpack the RR details
|
||||||
|
//
|
||||||
|
$object['type'] = ord($packet->rdata[$packet->offset++]) << 8 |
|
||||||
|
ord($packet->rdata[$packet->offset++]);
|
||||||
|
$object['class'] = ord($packet->rdata[$packet->offset++]) << 8 |
|
||||||
|
ord($packet->rdata[$packet->offset++]);
|
||||||
|
|
||||||
|
$object['ttl'] = ord($packet->rdata[$packet->offset++]) << 24 |
|
||||||
|
ord($packet->rdata[$packet->offset++]) << 16 |
|
||||||
|
ord($packet->rdata[$packet->offset++]) << 8 |
|
||||||
|
ord($packet->rdata[$packet->offset++]);
|
||||||
|
|
||||||
|
$object['rdlength'] = ord($packet->rdata[$packet->offset++]) << 8 |
|
||||||
|
ord($packet->rdata[$packet->offset++]);
|
||||||
|
|
||||||
|
if ($packet->rdlength < ($packet->offset + $object['rdlength'])) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// lookup the class to use
|
||||||
|
//
|
||||||
|
$o = null;
|
||||||
|
$class = Net_DNS2_Lookups::$rr_types_id_to_class[$object['type']];
|
||||||
|
|
||||||
|
if (isset($class)) {
|
||||||
|
|
||||||
|
$o = new $class($packet, $object);
|
||||||
|
if ($o) {
|
||||||
|
|
||||||
|
$packet->offset += $object['rdlength'];
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
|
||||||
|
throw new Net_DNS2_Exception(
|
||||||
|
'un-implemented resource record type: ' . $object['type'],
|
||||||
|
Net_DNS2_Lookups::E_RR_INVALID
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $o;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* cleans up some RR data
|
||||||
|
*
|
||||||
|
* @param string $data the text string to clean
|
||||||
|
*
|
||||||
|
* @return string returns the cleaned string
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function cleanString($data)
|
||||||
|
{
|
||||||
|
return strtolower(rtrim($data, '.'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses a standard RR format lines, as defined by rfc1035 (kinda)
|
||||||
|
*
|
||||||
|
* In our implementation, the domain *must* be specified- format must be
|
||||||
|
*
|
||||||
|
* <name> [<ttl>] [<class>] <type> <rdata>
|
||||||
|
* or
|
||||||
|
* <name> [<class>] [<ttl>] <type> <rdata>
|
||||||
|
*
|
||||||
|
* name, title, class and type are parsed by this function, rdata is passed
|
||||||
|
* to the RR specific classes for parsing.
|
||||||
|
*
|
||||||
|
* @param string $line a standard DNS config line
|
||||||
|
*
|
||||||
|
* @return mixed returns a new Net_DNS2_RR_* object for the given RR
|
||||||
|
* @throws Net_DNS2_Exception
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public static function fromString($line)
|
||||||
|
{
|
||||||
|
if (strlen($line) == 0) {
|
||||||
|
throw new Net_DNS2_Exception(
|
||||||
|
'empty config line provided.',
|
||||||
|
Net_DNS2_Lookups::E_PARSE_ERROR
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
$name = '';
|
||||||
|
$type = '';
|
||||||
|
$class = 'IN';
|
||||||
|
$ttl = 86400;
|
||||||
|
|
||||||
|
//
|
||||||
|
// split the line by spaces
|
||||||
|
//
|
||||||
|
$values = preg_split('/[\s]+/', $line);
|
||||||
|
if (count($values) < 3) {
|
||||||
|
|
||||||
|
throw new Net_DNS2_Exception(
|
||||||
|
'failed to parse config: minimum of name, type and rdata required.',
|
||||||
|
Net_DNS2_Lookups::E_PARSE_ERROR
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// assume the first value is the name
|
||||||
|
//
|
||||||
|
$name = trim(strtolower(array_shift($values)), '.');
|
||||||
|
|
||||||
|
//
|
||||||
|
// The next value is either a TTL, Class or Type
|
||||||
|
//
|
||||||
|
foreach ($values as $value) {
|
||||||
|
|
||||||
|
switch(true) {
|
||||||
|
case is_numeric($value):
|
||||||
|
|
||||||
|
$ttl = array_shift($values);
|
||||||
|
break;
|
||||||
|
|
||||||
|
//
|
||||||
|
// this is here because of a bug in is_numeric() in certain versions of
|
||||||
|
// PHP on windows.
|
||||||
|
//
|
||||||
|
case ($value === 0):
|
||||||
|
|
||||||
|
$ttl = array_shift($values);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case isset(Net_DNS2_Lookups::$classes_by_name[strtoupper($value)]):
|
||||||
|
|
||||||
|
$class = strtoupper(array_shift($values));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case isset(Net_DNS2_Lookups::$rr_types_by_name[strtoupper($value)]):
|
||||||
|
|
||||||
|
$type = strtoupper(array_shift($values));
|
||||||
|
break 2;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
|
||||||
|
throw new Net_DNS2_Exception(
|
||||||
|
'invalid config line provided: unknown file: ' . $value,
|
||||||
|
Net_DNS2_Lookups::E_PARSE_ERROR
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// lookup the class to use
|
||||||
|
//
|
||||||
|
$o = null;
|
||||||
|
$class_name = Net_DNS2_Lookups::$rr_types_id_to_class[
|
||||||
|
Net_DNS2_Lookups::$rr_types_by_name[$type]
|
||||||
|
];
|
||||||
|
|
||||||
|
if (isset($class_name)) {
|
||||||
|
|
||||||
|
$o = new $class_name;
|
||||||
|
if (!is_null($o)) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// set the parsed values
|
||||||
|
//
|
||||||
|
$o->name = $name;
|
||||||
|
$o->class = $class;
|
||||||
|
$o->ttl = $ttl;
|
||||||
|
|
||||||
|
//
|
||||||
|
// parse the rdata
|
||||||
|
//
|
||||||
|
if ($o->rrFromString($values) === false) {
|
||||||
|
|
||||||
|
throw new Net_DNS2_Exception(
|
||||||
|
'failed to parse rdata for config: ' . $line,
|
||||||
|
Net_DNS2_Lookups::E_PARSE_ERROR
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
throw new Net_DNS2_Exception(
|
||||||
|
'failed to create new RR record for type: ' . $type,
|
||||||
|
Net_DNS2_Lookups::E_RR_INVALID
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
throw new Net_DNS2_Exception(
|
||||||
|
'un-implemented resource record type: '. $type,
|
||||||
|
Net_DNS2_Lookups::E_RR_INVALID
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $o;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
156
bundled-libs/Net/DNS2/RR/A.php
Normal file
156
bundled-libs/Net/DNS2/RR/A.php
Normal file
@ -0,0 +1,156 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2010 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 0.6.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A Resource Record - RFC1035 section 3.4.1
|
||||||
|
*
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* | ADDRESS |
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_RR
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_RR_A extends Net_DNS2_RR
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* The IPv4 address in quad-dotted notation
|
||||||
|
*/
|
||||||
|
public $address;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* method to return the rdata portion of the packet as a string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrToString()
|
||||||
|
{
|
||||||
|
return $this->address;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata portion from a standard DNS config line
|
||||||
|
*
|
||||||
|
* @param array $rdata a string split line of values for the rdata
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrFromString(array $rdata)
|
||||||
|
{
|
||||||
|
$value = array_shift($rdata);
|
||||||
|
|
||||||
|
if (Net_DNS2::isIPv4($value) == true) {
|
||||||
|
|
||||||
|
$this->address = $value;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata of the Net_DNS2_Packet object
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet to parse the RR from
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrSet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if ($this->rdlength > 0) {
|
||||||
|
|
||||||
|
$this->address = inet_ntop($this->rdata);
|
||||||
|
if ($this->address !== false) {
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns the rdata portion of the DNS packet
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet use for
|
||||||
|
* compressed names
|
||||||
|
*
|
||||||
|
* @return mixed either returns a binary packed
|
||||||
|
* string or null on failure
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrGet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
$packet->offset += 4;
|
||||||
|
return inet_pton($this->address);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
177
bundled-libs/Net/DNS2/RR/AAAA.php
Normal file
177
bundled-libs/Net/DNS2/RR/AAAA.php
Normal file
@ -0,0 +1,177 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2010 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 0.6.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A Resource Record - RFC1035 section 3.4.1
|
||||||
|
*
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* | |
|
||||||
|
* | |
|
||||||
|
* | |
|
||||||
|
* | ADDRESS |
|
||||||
|
* | |
|
||||||
|
* | (128 bit) |
|
||||||
|
* | |
|
||||||
|
* | |
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_RR
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_RR_AAAA extends Net_DNS2_RR
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* the IPv6 address in the preferred hexadecimal values of the eight
|
||||||
|
* 16-bit pieces
|
||||||
|
* per RFC1884
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public $address;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* method to return the rdata portion of the packet as a string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrToString()
|
||||||
|
{
|
||||||
|
return $this->address;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata portion from a standard DNS config line
|
||||||
|
*
|
||||||
|
* @param array $rdata a string split line of values for the rdata
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrFromString(array $rdata)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// expand out compressed formats
|
||||||
|
//
|
||||||
|
$value = array_shift($rdata);
|
||||||
|
if (Net_DNS2::isIPv6($value) == true) {
|
||||||
|
|
||||||
|
$this->address = $value;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata of the Net_DNS2_Packet object
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet to parse the RR from
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrSet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// must be 8 x 16bit chunks, or 16 x 8bit
|
||||||
|
//
|
||||||
|
if ($this->rdlength == 16) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// PHP's inet_ntop returns IPv6 addresses in their compressed form,
|
||||||
|
// but we want to keep with the preferred standard, so we'll parse
|
||||||
|
// it manually.
|
||||||
|
//
|
||||||
|
$x = unpack('n8', $this->rdata);
|
||||||
|
if (count($x) == 8) {
|
||||||
|
|
||||||
|
$this->address = vsprintf('%x:%x:%x:%x:%x:%x:%x:%x', $x);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns the rdata portion of the DNS packet
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet use for
|
||||||
|
* compressed names
|
||||||
|
*
|
||||||
|
* @return mixed either returns a binary packed
|
||||||
|
* string or null on failure
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrGet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
$packet->offset += 16;
|
||||||
|
return inet_pton($this->address);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
174
bundled-libs/Net/DNS2/RR/AFSDB.php
Normal file
174
bundled-libs/Net/DNS2/RR/AFSDB.php
Normal file
@ -0,0 +1,174 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2010 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 0.6.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AFSDB Resource Record - RFC1183 section 1
|
||||||
|
*
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* | SUBTYPE |
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* / HOSTNAME /
|
||||||
|
* / /
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_RR
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_RR_AFSDB extends Net_DNS2_RR
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* The AFSDB sub type
|
||||||
|
*/
|
||||||
|
public $subtype;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The AFSDB hostname
|
||||||
|
*/
|
||||||
|
public $hostname;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* method to return the rdata portion of the packet as a string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrToString()
|
||||||
|
{
|
||||||
|
return $this->subtype . ' ' . $this->cleanString($this->hostname) . '.';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata portion from a standard DNS config line
|
||||||
|
*
|
||||||
|
* @param array $rdata a string split line of values for the rdata
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrFromString(array $rdata)
|
||||||
|
{
|
||||||
|
$this->subtype = array_shift($rdata);
|
||||||
|
$this->hostname = $this->cleanString(array_shift($rdata));
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata of the Net_DNS2_Packet object
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet to parse the RR from
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrSet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if ($this->rdlength > 0) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// unpack the subtype
|
||||||
|
//
|
||||||
|
$x = unpack('nsubtype', $this->rdata);
|
||||||
|
|
||||||
|
$this->subtype = $x['subtype'];
|
||||||
|
$offset = $packet->offset + 2;
|
||||||
|
|
||||||
|
$this->hostname = Net_DNS2_Packet::expand($packet, $offset);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns the rdata portion of the DNS packet
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet use for
|
||||||
|
* compressed names
|
||||||
|
*
|
||||||
|
* @return mixed either returns a binary packed
|
||||||
|
* string or null on failure
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrGet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if (strlen($this->hostname) > 0) {
|
||||||
|
|
||||||
|
$data = pack('n', $this->subtype);
|
||||||
|
$packet->offset += 2;
|
||||||
|
|
||||||
|
$data .= $packet->compress($this->hostname, $packet->offset);
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
129
bundled-libs/Net/DNS2/RR/ANY.php
Normal file
129
bundled-libs/Net/DNS2/RR/ANY.php
Normal file
@ -0,0 +1,129 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2010 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 0.6.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is only used for generating an empty ANY RR.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_RR
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_RR_ANY extends Net_DNS2_RR
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* method to return the rdata portion of the packet as a string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrToString()
|
||||||
|
{
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata portion from a standard DNS config line
|
||||||
|
*
|
||||||
|
* @param array $rdata a string split line of values for the rdata
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrFromString(array $rdata)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata of the Net_DNS2_Packet object
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet to parse the RR from
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrSet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns the rdata portion of the DNS packet
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet use for
|
||||||
|
* compressed names
|
||||||
|
*
|
||||||
|
* @return mixed either returns a binary packed
|
||||||
|
* string or null on failure
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrGet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
343
bundled-libs/Net/DNS2/RR/APL.php
Normal file
343
bundled-libs/Net/DNS2/RR/APL.php
Normal file
@ -0,0 +1,343 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2010 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 1.0.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* APL Resource Record - RFC3123
|
||||||
|
*
|
||||||
|
* +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|
||||||
|
* | ADDRESSFAMILY |
|
||||||
|
* +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|
||||||
|
* | PREFIX | N | AFDLENGTH |
|
||||||
|
* +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|
||||||
|
* / AFDPART /
|
||||||
|
* | |
|
||||||
|
* +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_RR
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_RR_APL extends Net_DNS2_RR
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* a list of all the address prefix list items
|
||||||
|
*/
|
||||||
|
public $apl_items = array();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* method to return the rdata portion of the packet as a string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrToString()
|
||||||
|
{
|
||||||
|
$out = '';
|
||||||
|
|
||||||
|
foreach ($this->apl_items as $item) {
|
||||||
|
|
||||||
|
if ($item['n'] == 1) {
|
||||||
|
|
||||||
|
$out .= '!';
|
||||||
|
}
|
||||||
|
|
||||||
|
$out .= $item['address_family'] . ':' .
|
||||||
|
$item['afd_part'] . '/' . $item['prefix'] . ' ';
|
||||||
|
}
|
||||||
|
|
||||||
|
return trim($out);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata portion from a standard DNS config line
|
||||||
|
*
|
||||||
|
* @param array $rdata a string split line of values for the rdata
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrFromString(array $rdata)
|
||||||
|
{
|
||||||
|
foreach ($rdata as $item) {
|
||||||
|
|
||||||
|
if (preg_match('/^(!?)([1|2])\:([^\/]*)\/([0-9]{1,3})$/', $item, $m)) {
|
||||||
|
|
||||||
|
$i = array(
|
||||||
|
|
||||||
|
'address_family' => $m[2],
|
||||||
|
'prefix' => $m[4],
|
||||||
|
'n' => ($m[1] == '!') ? 1 : 0,
|
||||||
|
'afd_part' => strtolower($m[3])
|
||||||
|
);
|
||||||
|
|
||||||
|
$address = $this->_trimZeros(
|
||||||
|
$i['address_family'], $i['afd_part']
|
||||||
|
);
|
||||||
|
|
||||||
|
$i['afd_length'] = count(explode('.', $address));
|
||||||
|
|
||||||
|
$this->apl_items[] = $i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata of the Net_DNS2_Packet object
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet to parse the RR from
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrSet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if ($this->rdlength > 0) {
|
||||||
|
|
||||||
|
$offset = 0;
|
||||||
|
|
||||||
|
while ($offset < $this->rdlength) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// unpack the family, prefix, negate and length values
|
||||||
|
//
|
||||||
|
$x = unpack(
|
||||||
|
'naddress_family/Cprefix/Cextra', substr($this->rdata, $offset)
|
||||||
|
);
|
||||||
|
|
||||||
|
$item = array(
|
||||||
|
|
||||||
|
'address_family' => $x['address_family'],
|
||||||
|
'prefix' => $x['prefix'],
|
||||||
|
'n' => ($x['extra'] >> 7) & 0x1,
|
||||||
|
'afd_length' => $x['extra'] & 0xf
|
||||||
|
);
|
||||||
|
|
||||||
|
switch($item['address_family']) {
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
$r = unpack(
|
||||||
|
'C*', substr($this->rdata, $offset + 4, $item['afd_length'])
|
||||||
|
);
|
||||||
|
if (count($r) < 4) {
|
||||||
|
|
||||||
|
for ($c=count($r)+1; $c<4+1; $c++) {
|
||||||
|
|
||||||
|
$r[$c] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$item['afd_part'] = implode('.', $r);
|
||||||
|
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
$r = unpack(
|
||||||
|
'C*', substr($this->rdata, $offset + 4, $item['afd_length'])
|
||||||
|
);
|
||||||
|
if (count($r) < 8) {
|
||||||
|
|
||||||
|
for ($c=count($r)+1; $c<8+1; $c++) {
|
||||||
|
|
||||||
|
$r[$c] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$item['afd_part'] = sprintf(
|
||||||
|
'%x:%x:%x:%x:%x:%x:%x:%x',
|
||||||
|
$r[1], $r[2], $r[3], $r[4], $r[5], $r[6], $r[7], $r[8]
|
||||||
|
);
|
||||||
|
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->apl_items[] = $item;
|
||||||
|
|
||||||
|
$offset += 4 + $item['afd_length'];
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns the rdata portion of the DNS packet
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet use for
|
||||||
|
* compressed names
|
||||||
|
*
|
||||||
|
* @return mixed either returns a binary packed
|
||||||
|
* string or null on failure
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrGet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if (count($this->apl_items) > 0) {
|
||||||
|
|
||||||
|
$data = '';
|
||||||
|
|
||||||
|
foreach ($this->apl_items as $item) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// pack the address_family and prefix values
|
||||||
|
//
|
||||||
|
$data .= pack(
|
||||||
|
'nCC',
|
||||||
|
$item['address_family'],
|
||||||
|
$item['prefix'],
|
||||||
|
($item['n'] << 7) | $item['afd_length']
|
||||||
|
);
|
||||||
|
|
||||||
|
switch($item['address_family']) {
|
||||||
|
case 1:
|
||||||
|
$address = explode(
|
||||||
|
'.',
|
||||||
|
$this->_trimZeros($item['address_family'], $item['afd_part'])
|
||||||
|
);
|
||||||
|
|
||||||
|
foreach ($address as $b) {
|
||||||
|
$data .= chr($b);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
$address = explode(
|
||||||
|
':',
|
||||||
|
$this->_trimZeros($item['address_family'], $item['afd_part'])
|
||||||
|
);
|
||||||
|
|
||||||
|
foreach ($address as $b) {
|
||||||
|
$data .= pack('H', $b);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$packet->offset += strlen($data);
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns an IP address with the right-hand zero's trimmed
|
||||||
|
*
|
||||||
|
* @param integer $family the IP address family from the rdata
|
||||||
|
* @param string $address the IP address
|
||||||
|
*
|
||||||
|
* @return string the trimmed IP addresss.
|
||||||
|
*
|
||||||
|
* @access private
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private function _trimZeros($family, $address)
|
||||||
|
{
|
||||||
|
$a = array();
|
||||||
|
|
||||||
|
switch($family) {
|
||||||
|
case 1:
|
||||||
|
$a = array_reverse(explode('.', $address));
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
$a = array_reverse(explode(':', $address));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($a as $value) {
|
||||||
|
|
||||||
|
if ($value === '0') {
|
||||||
|
|
||||||
|
array_shift($a);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$out = '';
|
||||||
|
|
||||||
|
switch($family) {
|
||||||
|
case 1:
|
||||||
|
$out = implode('.', array_reverse($a));
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
$out = implode(':', array_reverse($a));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
return $out;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
210
bundled-libs/Net/DNS2/RR/ATMA.php
Normal file
210
bundled-libs/Net/DNS2/RR/ATMA.php
Normal file
@ -0,0 +1,210 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2010 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 1.1.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ATMA Resource Record
|
||||||
|
*
|
||||||
|
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* | FORMAT | |
|
||||||
|
* | +--+--+--+--+--+--+--+--+
|
||||||
|
* / ADDRESS /
|
||||||
|
* | |
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_RR
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_RR_ATMA extends Net_DNS2_RR
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* One octet that indicates the format of ADDRESS. The two possible values
|
||||||
|
* for FORMAT are value 0 indicating ATM End System Address (AESA) format
|
||||||
|
* and value 1 indicating E.164 format
|
||||||
|
*/
|
||||||
|
public $format;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The IPv4 address in quad-dotted notation
|
||||||
|
*/
|
||||||
|
public $address;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* method to return the rdata portion of the packet as a string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrToString()
|
||||||
|
{
|
||||||
|
return $this->address;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata portion from a standard DNS config line
|
||||||
|
*
|
||||||
|
* @param array $rdata a string split line of values for the rdata
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrFromString(array $rdata)
|
||||||
|
{
|
||||||
|
$value = array_shift($rdata);
|
||||||
|
|
||||||
|
if (ctype_xdigit($value) == true) {
|
||||||
|
|
||||||
|
$this->format = 0;
|
||||||
|
$this->address = $value;
|
||||||
|
|
||||||
|
} else if (is_numeric($value) == true) {
|
||||||
|
|
||||||
|
$this->format = 1;
|
||||||
|
$this->address = $value;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata of the Net_DNS2_Packet object
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet to parse the RR from
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrSet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if ($this->rdlength > 0) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// unpack the format
|
||||||
|
//
|
||||||
|
$x = unpack('Cformat/N*address', $this->rdata);
|
||||||
|
|
||||||
|
$this->format = $x['format'];
|
||||||
|
|
||||||
|
if ($this->format == 0) {
|
||||||
|
|
||||||
|
$a = unpack('@1/H*address', $this->rdata);
|
||||||
|
|
||||||
|
$this->address = $a['address'];
|
||||||
|
|
||||||
|
} else if ($this->format == 1) {
|
||||||
|
|
||||||
|
$this->address = substr($this->rdata, 1, $this->rdlength - 1);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns the rdata portion of the DNS packet
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet use for
|
||||||
|
* compressed names
|
||||||
|
*
|
||||||
|
* @return mixed either returns a binary packed
|
||||||
|
* string or null on failure
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrGet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
$data = chr($this->format);
|
||||||
|
|
||||||
|
if ($this->format == 0) {
|
||||||
|
|
||||||
|
$data .= pack('H*', $this->address);
|
||||||
|
|
||||||
|
} else if ($this->format == 1) {
|
||||||
|
|
||||||
|
$data .= $this->address;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
$packet->offset += strlen($data);
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
75
bundled-libs/Net/DNS2/RR/AVC.php
Normal file
75
bundled-libs/Net/DNS2/RR/AVC.php
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2016, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2016 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 1.4.2
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The AVC RR is implemented exactly like the TXT record, so
|
||||||
|
* for now we just extend the TXT RR and use it.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_RR
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_RR_AVC extends Net_DNS2_RR_TXT
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
179
bundled-libs/Net/DNS2/RR/CAA.php
Normal file
179
bundled-libs/Net/DNS2/RR/CAA.php
Normal file
@ -0,0 +1,179 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2011, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2011 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 1.2.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* CAA Resource Record - http://tools.ietf.org/html/draft-ietf-pkix-caa-03
|
||||||
|
*
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* | FLAGS | TAG LENGTH |
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* / TAG /
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* / DATA /
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_RR
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_RR_CAA extends Net_DNS2_RR
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* The critcal flag
|
||||||
|
*/
|
||||||
|
public $flags;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The property identifier
|
||||||
|
*/
|
||||||
|
public $tag;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The property value
|
||||||
|
*/
|
||||||
|
public $value;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* method to return the rdata portion of the packet as a string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrToString()
|
||||||
|
{
|
||||||
|
return $this->flags . ' ' . $this->tag . ' "' .
|
||||||
|
trim($this->cleanString($this->value), '"') . '"';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata portion from a standard DNS config line
|
||||||
|
*
|
||||||
|
* @param array $rdata a string split line of values for the rdata
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrFromString(array $rdata)
|
||||||
|
{
|
||||||
|
$this->flags = array_shift($rdata);
|
||||||
|
$this->tag = array_shift($rdata);
|
||||||
|
|
||||||
|
$this->value = trim($this->cleanString(implode($rdata, ' ')), '"');
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata of the Net_DNS2_Packet object
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet to parse the RR from
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrSet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if ($this->rdlength > 0) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// unpack the flags and tag length
|
||||||
|
//
|
||||||
|
$x = unpack('Cflags/Ctag_length', $this->rdata);
|
||||||
|
|
||||||
|
$this->flags = $x['flags'];
|
||||||
|
$offset = 2;
|
||||||
|
|
||||||
|
$this->tag = substr($this->rdata, $offset, $x['tag_length']);
|
||||||
|
$offset += $x['tag_length'];
|
||||||
|
|
||||||
|
$this->value = substr($this->rdata, $offset);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns the rdata portion of the DNS packet
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet use for
|
||||||
|
* compressed names
|
||||||
|
*
|
||||||
|
* @return mixed either returns a binary packed
|
||||||
|
* string or null on failure
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrGet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if (strlen($this->value) > 0) {
|
||||||
|
|
||||||
|
$data = chr($this->flags);
|
||||||
|
$data .= chr(strlen($this->tag)) . $this->tag . $this->value;
|
||||||
|
|
||||||
|
$packet->offset += strlen($data);
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
77
bundled-libs/Net/DNS2/RR/CDNSKEY.php
Normal file
77
bundled-libs/Net/DNS2/RR/CDNSKEY.php
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2014, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2014 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 1.4.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The CDNSKEY RR is implemented exactly like the DNSKEY record, so
|
||||||
|
* for now we just extend the DNSKEY RR and use it.
|
||||||
|
*
|
||||||
|
* http://www.rfc-editor.org/rfc/rfc7344.txt
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_RR
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_RR_CDNSKEY extends Net_DNS2_RR_DNSKEY
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
77
bundled-libs/Net/DNS2/RR/CDS.php
Normal file
77
bundled-libs/Net/DNS2/RR/CDS.php
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2011, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2011 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 1.2.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The CDS RR is implemented exactly like the DS record, so
|
||||||
|
* for now we just extend the DS RR and use it.
|
||||||
|
*
|
||||||
|
* http://www.rfc-editor.org/rfc/rfc7344.txt
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_RR
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_RR_CDS extends Net_DNS2_RR_DS
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
292
bundled-libs/Net/DNS2/RR/CERT.php
Normal file
292
bundled-libs/Net/DNS2/RR/CERT.php
Normal file
@ -0,0 +1,292 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2010 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 0.6.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* CERT Resource Record - RFC4398 section 2
|
||||||
|
*
|
||||||
|
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
* | format | key tag |
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
* | algorithm | /
|
||||||
|
* +---------------+ certificate or CRL /
|
||||||
|
* / /
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-|
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_RR
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_RR_CERT extends Net_DNS2_RR
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* format's allowed for certificates
|
||||||
|
*/
|
||||||
|
const CERT_FORMAT_RES = 0;
|
||||||
|
const CERT_FORMAT_PKIX = 1;
|
||||||
|
const CERT_FORMAT_SPKI = 2;
|
||||||
|
const CERT_FORMAT_PGP = 3;
|
||||||
|
const CERT_FORMAT_IPKIX = 4;
|
||||||
|
const CERT_FORMAT_ISPKI = 5;
|
||||||
|
const CERT_FORMAT_IPGP = 6;
|
||||||
|
const CERT_FORMAT_ACPKIX = 7;
|
||||||
|
const CERT_FORMAT_IACPKIX = 8;
|
||||||
|
const CERT_FORMAT_URI = 253;
|
||||||
|
const CERT_FORMAT_OID = 254;
|
||||||
|
|
||||||
|
public $cert_format_name_to_id = array();
|
||||||
|
public $cert_format_id_to_name = array(
|
||||||
|
|
||||||
|
self::CERT_FORMAT_RES => 'Reserved',
|
||||||
|
self::CERT_FORMAT_PKIX => 'PKIX',
|
||||||
|
self::CERT_FORMAT_SPKI => 'SPKI',
|
||||||
|
self::CERT_FORMAT_PGP => 'PGP',
|
||||||
|
self::CERT_FORMAT_IPKIX => 'IPKIX',
|
||||||
|
self::CERT_FORMAT_ISPKI => 'ISPKI',
|
||||||
|
self::CERT_FORMAT_IPGP => 'IPGP',
|
||||||
|
self::CERT_FORMAT_ACPKIX => 'ACPKIX',
|
||||||
|
self::CERT_FORMAT_IACPKIX => 'IACPKIX',
|
||||||
|
self::CERT_FORMAT_URI => 'URI',
|
||||||
|
self::CERT_FORMAT_OID => 'OID'
|
||||||
|
);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* certificate format
|
||||||
|
*/
|
||||||
|
public $format;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* key tag
|
||||||
|
*/
|
||||||
|
public $keytag;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The algorithm used for the CERt
|
||||||
|
*/
|
||||||
|
public $algorithm;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* certificate
|
||||||
|
*/
|
||||||
|
public $certificate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* we have our own constructor so that we can load our certificate
|
||||||
|
* information for parsing.
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet to parse the RR from
|
||||||
|
* @param array $rr a array with parsed RR values
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function __construct(Net_DNS2_Packet &$packet = null, array $rr = null)
|
||||||
|
{
|
||||||
|
parent::__construct($packet, $rr);
|
||||||
|
|
||||||
|
//
|
||||||
|
// load the lookup values
|
||||||
|
//
|
||||||
|
$this->cert_format_name_to_id = array_flip($this->cert_format_id_to_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* method to return the rdata portion of the packet as a string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrToString()
|
||||||
|
{
|
||||||
|
return $this->format . ' ' . $this->keytag . ' ' . $this->algorithm .
|
||||||
|
' ' . base64_encode($this->certificate);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata portion from a standard DNS config line
|
||||||
|
*
|
||||||
|
* @param array $rdata a string split line of values for the rdata
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrFromString(array $rdata)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// load and check the format; can be an int, or a mnemonic symbol
|
||||||
|
//
|
||||||
|
$this->format = array_shift($rdata);
|
||||||
|
if (!is_numeric($this->format)) {
|
||||||
|
|
||||||
|
$mnemonic = strtoupper(trim($this->format));
|
||||||
|
if (!isset($this->cert_format_name_to_id[$mnemonic])) {
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->format = $this->cert_format_name_to_id[$mnemonic];
|
||||||
|
} else {
|
||||||
|
|
||||||
|
if (!isset($this->cert_format_id_to_name[$this->format])) {
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->keytag = array_shift($rdata);
|
||||||
|
|
||||||
|
//
|
||||||
|
// parse and check the algorithm; can be an int, or a mnemonic symbol
|
||||||
|
//
|
||||||
|
$this->algorithm = array_shift($rdata);
|
||||||
|
if (!is_numeric($this->algorithm)) {
|
||||||
|
|
||||||
|
$mnemonic = strtoupper(trim($this->algorithm));
|
||||||
|
if (!isset(Net_DNS2_Lookups::$algorithm_name_to_id[$mnemonic])) {
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->algorithm = Net_DNS2_Lookups::$algorithm_name_to_id[
|
||||||
|
$mnemonic
|
||||||
|
];
|
||||||
|
} else {
|
||||||
|
|
||||||
|
if (!isset(Net_DNS2_Lookups::$algorithm_id_to_name[$this->algorithm])) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// parse and base64 decode the certificate
|
||||||
|
//
|
||||||
|
// certificates MUST be provided base64 encoded, if not, everything will
|
||||||
|
// be broken after this point, as we assume it's base64 encoded.
|
||||||
|
//
|
||||||
|
$this->certificate = base64_decode(implode(' ', $rdata));
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata of the Net_DNS2_Packet object
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet to parse the RR from
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrSet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if ($this->rdlength > 0) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// unpack the format, keytag and algorithm
|
||||||
|
//
|
||||||
|
$x = unpack('nformat/nkeytag/Calgorithm', $this->rdata);
|
||||||
|
|
||||||
|
$this->format = $x['format'];
|
||||||
|
$this->keytag = $x['keytag'];
|
||||||
|
$this->algorithm = $x['algorithm'];
|
||||||
|
|
||||||
|
//
|
||||||
|
// copy the certificate
|
||||||
|
//
|
||||||
|
$this->certificate = substr($this->rdata, 5, $this->rdlength - 5);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns the rdata portion of the DNS packet
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet use for
|
||||||
|
* compressed names
|
||||||
|
*
|
||||||
|
* @return mixed either returns a binary packed
|
||||||
|
* string or null on failure
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrGet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if (strlen($this->certificate) > 0) {
|
||||||
|
|
||||||
|
$data = pack('nnC', $this->format, $this->keytag, $this->algorithm) .
|
||||||
|
$this->certificate;
|
||||||
|
|
||||||
|
$packet->offset += strlen($data);
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
153
bundled-libs/Net/DNS2/RR/CNAME.php
Normal file
153
bundled-libs/Net/DNS2/RR/CNAME.php
Normal file
@ -0,0 +1,153 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2010 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 0.6.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* CNAME Resource Record - RFC1035 section 3.3.1
|
||||||
|
*
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* / CNAME /
|
||||||
|
* / /
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_RR
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_RR_CNAME extends Net_DNS2_RR
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* The canonical name
|
||||||
|
*/
|
||||||
|
public $cname;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* method to return the rdata portion of the packet as a string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrToString()
|
||||||
|
{
|
||||||
|
return $this->cleanString($this->cname) . '.';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata portion from a standard DNS config line
|
||||||
|
*
|
||||||
|
* @param array $rdata a string split line of values for the rdata
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrFromString(array $rdata)
|
||||||
|
{
|
||||||
|
$this->cname = $this->cleanString(array_shift($rdata));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata of the Net_DNS2_Packet object
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet to parse the RR from
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrSet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if ($this->rdlength > 0) {
|
||||||
|
|
||||||
|
$offset = $packet->offset;
|
||||||
|
$this->cname = Net_DNS2_Packet::expand($packet, $offset);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns the rdata portion of the DNS packet
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet use for
|
||||||
|
* compressed names
|
||||||
|
*
|
||||||
|
* @return mixed either returns a binary packed
|
||||||
|
* string or null on failure
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrGet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if (strlen($this->cname) > 0) {
|
||||||
|
|
||||||
|
return $packet->compress($this->cname, $packet->offset);
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
203
bundled-libs/Net/DNS2/RR/CSYNC.php
Normal file
203
bundled-libs/Net/DNS2/RR/CSYNC.php
Normal file
@ -0,0 +1,203 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2015, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2015 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 1.4.1
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* CSYNC Resource Record - RFC 7477 seciond 2.1.1
|
||||||
|
*
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* | SOA Serial |
|
||||||
|
* | |
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* | Flags |
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* / Type Bit Map /
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_RR
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_RR_CSYNC extends Net_DNS2_RR
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* serial number
|
||||||
|
*/
|
||||||
|
public $serial;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* flags
|
||||||
|
*/
|
||||||
|
public $flags;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* array of RR type names
|
||||||
|
*/
|
||||||
|
public $type_bit_maps = array();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* method to return the rdata portion of the packet as a string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrToString()
|
||||||
|
{
|
||||||
|
$out = $this->serial . ' ' . $this->flags;
|
||||||
|
|
||||||
|
//
|
||||||
|
// show the RR's
|
||||||
|
//
|
||||||
|
foreach ($this->type_bit_maps as $rr) {
|
||||||
|
|
||||||
|
$out .= ' ' . strtoupper($rr);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $out;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata portion from a standard DNS config line
|
||||||
|
*
|
||||||
|
* @param array $rdata a string split line of values for the rdata
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrFromString(array $rdata)
|
||||||
|
{
|
||||||
|
$this->serial = array_shift($rdata);
|
||||||
|
$this->flags = array_shift($rdata);
|
||||||
|
|
||||||
|
$this->type_bit_maps = $rdata;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata of the Net_DNS2_Packet object
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet to parse the RR from
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrSet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if ($this->rdlength > 0) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// unpack the serial and flags values
|
||||||
|
//
|
||||||
|
$x = unpack('@' . $packet->offset . '/Nserial/nflags', $packet->rdata);
|
||||||
|
|
||||||
|
$this->serial = Net_DNS2::expandUint32($x['serial']);
|
||||||
|
$this->flags = $x['flags'];
|
||||||
|
|
||||||
|
//
|
||||||
|
// parse out the RR bitmap
|
||||||
|
//
|
||||||
|
$this->type_bit_maps = Net_DNS2_BitMap::bitMapToArray(
|
||||||
|
substr($this->rdata, 6)
|
||||||
|
);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns the rdata portion of the DNS packet
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet use for
|
||||||
|
* compressed names
|
||||||
|
*
|
||||||
|
* @return mixed either returns a binary packed
|
||||||
|
* string or null on failure
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrGet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// pack the serial and flags values
|
||||||
|
//
|
||||||
|
$data = pack('Nn', $this->serial, $this->flags);
|
||||||
|
|
||||||
|
//
|
||||||
|
// convert the array of RR names to a type bitmap
|
||||||
|
//
|
||||||
|
$data .= Net_DNS2_BitMap::arrayToBitMap($this->type_bit_maps);
|
||||||
|
|
||||||
|
//
|
||||||
|
// advance the offset
|
||||||
|
//
|
||||||
|
$packet->offset += strlen($data);
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
207
bundled-libs/Net/DNS2/RR/DHCID.php
Normal file
207
bundled-libs/Net/DNS2/RR/DHCID.php
Normal file
@ -0,0 +1,207 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2010 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 0.6.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DHCID Resource Record - RFC4701 section 3.1
|
||||||
|
*
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* | ID Type Code |
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* | Digest Type | /
|
||||||
|
* +--+--+--+--+--+--+--+--+ /
|
||||||
|
* / /
|
||||||
|
* / Digest /
|
||||||
|
* / /
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_RR
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_RR_DHCID extends Net_DNS2_RR
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Identifier type
|
||||||
|
*/
|
||||||
|
public $id_type;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Digest Type
|
||||||
|
*/
|
||||||
|
public $digest_type;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The digest
|
||||||
|
*/
|
||||||
|
public $digest;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* method to return the rdata portion of the packet as a string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrToString()
|
||||||
|
{
|
||||||
|
$out = pack('nC', $this->id_type, $this->digest_type);
|
||||||
|
$out .= base64_decode($this->digest);
|
||||||
|
|
||||||
|
return base64_encode($out);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata portion from a standard DNS config line
|
||||||
|
*
|
||||||
|
* @param array $rdata a string split line of values for the rdata
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrFromString(array $rdata)
|
||||||
|
{
|
||||||
|
$data = base64_decode(array_shift($rdata));
|
||||||
|
if (strlen($data) > 0) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// unpack the id type and digest type
|
||||||
|
//
|
||||||
|
$x = unpack('nid_type/Cdigest_type', $data);
|
||||||
|
|
||||||
|
$this->id_type = $x['id_type'];
|
||||||
|
$this->digest_type = $x['digest_type'];
|
||||||
|
|
||||||
|
//
|
||||||
|
// copy out the digest
|
||||||
|
//
|
||||||
|
$this->digest = base64_encode(substr($data, 3, strlen($data) - 3));
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata of the Net_DNS2_Packet object
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet to parse the RR from
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrSet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if ($this->rdlength > 0) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// unpack the id type and digest type
|
||||||
|
//
|
||||||
|
$x = unpack('nid_type/Cdigest_type', $this->rdata);
|
||||||
|
|
||||||
|
$this->id_type = $x['id_type'];
|
||||||
|
$this->digest_type = $x['digest_type'];
|
||||||
|
|
||||||
|
//
|
||||||
|
// copy out the digest
|
||||||
|
//
|
||||||
|
$this->digest = base64_encode(
|
||||||
|
substr($this->rdata, 3, $this->rdlength - 3)
|
||||||
|
);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns the rdata portion of the DNS packet
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet use for
|
||||||
|
* compressed names
|
||||||
|
*
|
||||||
|
* @return mixed either returns a binary packed
|
||||||
|
* string or null on failure
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrGet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if (strlen($this->digest) > 0) {
|
||||||
|
|
||||||
|
$data = pack('nC', $this->id_type, $this->digest_type) .
|
||||||
|
base64_decode($this->digest);
|
||||||
|
|
||||||
|
$packet->offset += strlen($data);
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
75
bundled-libs/Net/DNS2/RR/DLV.php
Normal file
75
bundled-libs/Net/DNS2/RR/DLV.php
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2010 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 0.6.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The DLV RR is implemented exactly like the DS RR; so we just extend that
|
||||||
|
* class, and use all of it's methods
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_RR
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_RR_DLV extends Net_DNS2_RR_DS
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
153
bundled-libs/Net/DNS2/RR/DNAME.php
Normal file
153
bundled-libs/Net/DNS2/RR/DNAME.php
Normal file
@ -0,0 +1,153 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2010 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 0.6.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNAME Resource Record - RFC2672 section 3
|
||||||
|
*
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* / DNAME /
|
||||||
|
* / /
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_RR
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_RR_DNAME extends Net_DNS2_RR
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* The target name
|
||||||
|
*/
|
||||||
|
public $dname;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* method to return the rdata portion of the packet as a string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrToString()
|
||||||
|
{
|
||||||
|
return $this->cleanString($this->dname) . '.';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata portion from a standard DNS config line
|
||||||
|
*
|
||||||
|
* @param array $rdata a string split line of values for the rdata
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrFromString(array $rdata)
|
||||||
|
{
|
||||||
|
$this->dname = $this->cleanString(array_shift($rdata));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata of the Net_DNS2_Packet object
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet to parse the RR from
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrSet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if ($this->rdlength > 0) {
|
||||||
|
|
||||||
|
$offset = $packet->offset;
|
||||||
|
$this->dname = Net_DNS2_Packet::expand($packet, $offset);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns the rdata portion of the DNS packet
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet use for
|
||||||
|
* compressed names
|
||||||
|
*
|
||||||
|
* @return mixed either returns a binary packed
|
||||||
|
* string or null on failure
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrGet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if (strlen($this->dname) > 0) {
|
||||||
|
|
||||||
|
return $packet->compress($this->dname, $packet->offset);
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
198
bundled-libs/Net/DNS2/RR/DNSKEY.php
Normal file
198
bundled-libs/Net/DNS2/RR/DNSKEY.php
Normal file
@ -0,0 +1,198 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2010 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 0.6.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNSKEY Resource Record - RFC4034 sction 2.1
|
||||||
|
*
|
||||||
|
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
* | Flags | Protocol | Algorithm |
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
* / /
|
||||||
|
* / Public Key /
|
||||||
|
* / /
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_RR
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_RR_DNSKEY extends Net_DNS2_RR
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* flags
|
||||||
|
*/
|
||||||
|
public $flags;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* protocol
|
||||||
|
*/
|
||||||
|
public $protocol;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* algorithm used
|
||||||
|
*/
|
||||||
|
public $algorithm;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* the public key
|
||||||
|
*/
|
||||||
|
public $key;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* method to return the rdata portion of the packet as a string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrToString()
|
||||||
|
{
|
||||||
|
return $this->flags . ' ' . $this->protocol . ' ' .
|
||||||
|
$this->algorithm . ' ' . $this->key;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata portion from a standard DNS config line
|
||||||
|
*
|
||||||
|
* @param array $rdata a string split line of values for the rdata
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrFromString(array $rdata)
|
||||||
|
{
|
||||||
|
$this->flags = array_shift($rdata);
|
||||||
|
$this->protocol = array_shift($rdata);
|
||||||
|
$this->algorithm = array_shift($rdata);
|
||||||
|
$this->key = implode(' ', $rdata);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata of the Net_DNS2_Packet object
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet to parse the RR from
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrSet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if ($this->rdlength > 0) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// unpack the flags, protocol and algorithm
|
||||||
|
//
|
||||||
|
$x = unpack('nflags/Cprotocol/Calgorithm', $this->rdata);
|
||||||
|
|
||||||
|
//
|
||||||
|
// TODO: right now we're just displaying what's in DNS; we really
|
||||||
|
// should be parsing bit 7 and bit 15 of the flags field, and store
|
||||||
|
// those separately.
|
||||||
|
//
|
||||||
|
// right now the DNSSEC implementation is really just for display,
|
||||||
|
// we don't validate or handle any of the keys
|
||||||
|
//
|
||||||
|
$this->flags = $x['flags'];
|
||||||
|
$this->protocol = $x['protocol'];
|
||||||
|
$this->algorithm = $x['algorithm'];
|
||||||
|
|
||||||
|
$this->key = base64_encode(substr($this->rdata, 4));
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns the rdata portion of the DNS packet
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet use for
|
||||||
|
* compressed names
|
||||||
|
*
|
||||||
|
* @return mixed either returns a binary packed
|
||||||
|
* string or null on failure
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrGet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if (strlen($this->key) > 0) {
|
||||||
|
|
||||||
|
$data = pack('nCC', $this->flags, $this->protocol, $this->algorithm);
|
||||||
|
$data .= base64_decode($this->key);
|
||||||
|
|
||||||
|
$packet->offset += strlen($data);
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
209
bundled-libs/Net/DNS2/RR/DS.php
Normal file
209
bundled-libs/Net/DNS2/RR/DS.php
Normal file
@ -0,0 +1,209 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2010 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 0.6.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DS Resource Record - RFC4034 sction 5.1
|
||||||
|
*
|
||||||
|
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
* | Key Tag | Algorithm | Digest Type |
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
* / /
|
||||||
|
* / Digest /
|
||||||
|
* / /
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_RR
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_RR_DS extends Net_DNS2_RR
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* key tag
|
||||||
|
*/
|
||||||
|
public $keytag;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* algorithm number
|
||||||
|
*/
|
||||||
|
public $algorithm;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* algorithm used to construct the digest
|
||||||
|
*/
|
||||||
|
public $digesttype;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* the digest data
|
||||||
|
*/
|
||||||
|
public $digest;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* method to return the rdata portion of the packet as a string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrToString()
|
||||||
|
{
|
||||||
|
return $this->keytag . ' ' . $this->algorithm . ' ' .
|
||||||
|
$this->digesttype . ' ' . $this->digest;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata portion from a standard DNS config line
|
||||||
|
*
|
||||||
|
* @param array $rdata a string split line of values for the rdata
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrFromString(array $rdata)
|
||||||
|
{
|
||||||
|
$this->keytag = array_shift($rdata);
|
||||||
|
$this->algorithm = array_shift($rdata);
|
||||||
|
$this->digesttype = array_shift($rdata);
|
||||||
|
$this->digest = implode('', $rdata);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata of the Net_DNS2_Packet object
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet to parse the RR from
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrSet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if ($this->rdlength > 0) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// unpack the keytag, algorithm and digesttype
|
||||||
|
//
|
||||||
|
$x = unpack('nkeytag/Calgorithm/Cdigesttype', $this->rdata);
|
||||||
|
|
||||||
|
$this->keytag = $x['keytag'];
|
||||||
|
$this->algorithm = $x['algorithm'];
|
||||||
|
$this->digesttype = $x['digesttype'];
|
||||||
|
|
||||||
|
//
|
||||||
|
// figure out the digest size
|
||||||
|
//
|
||||||
|
$digest_size = 0;
|
||||||
|
if ($this->digesttype == 1) {
|
||||||
|
|
||||||
|
$digest_size = 20; // SHA1
|
||||||
|
|
||||||
|
} else if ($this->digesttype == 2) {
|
||||||
|
|
||||||
|
$digest_size = 32; // SHA256
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// copy the digest
|
||||||
|
//
|
||||||
|
$x = unpack('H*', substr($this->rdata, 4, $digest_size));
|
||||||
|
$this->digest = $x[1];
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns the rdata portion of the DNS packet
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet use for
|
||||||
|
* compressed names
|
||||||
|
*
|
||||||
|
* @return mixed either returns a binary packed
|
||||||
|
* string or null on failure
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrGet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if (strlen($this->digest) > 0) {
|
||||||
|
|
||||||
|
$data = pack(
|
||||||
|
'nCCH*',
|
||||||
|
$this->keytag, $this->algorithm, $this->digesttype, $this->digest
|
||||||
|
);
|
||||||
|
|
||||||
|
$packet->offset += strlen($data);
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
130
bundled-libs/Net/DNS2/RR/EID.php
Normal file
130
bundled-libs/Net/DNS2/RR/EID.php
Normal file
@ -0,0 +1,130 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2010 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 0.6.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* EID Resource Record - undefined; the rdata is simply used as-is in it's
|
||||||
|
* binary format, so not process has to be done.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_RR
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_RR_EID extends Net_DNS2_RR
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* method to return the rdata portion of the packet as a string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrToString()
|
||||||
|
{
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata portion from a standard DNS config line
|
||||||
|
*
|
||||||
|
* @param array $rdata a string split line of values for the rdata
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrFromString(array $rdata)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata of the Net_DNS2_Packet object
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet to parse the RR from
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrSet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns the rdata portion of the DNS packet
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet use for
|
||||||
|
* compressed names
|
||||||
|
*
|
||||||
|
* @return mixed either returns a binary packed
|
||||||
|
* string or null on failure
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrGet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
return $this->rdata;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
187
bundled-libs/Net/DNS2/RR/EUI48.php
Normal file
187
bundled-libs/Net/DNS2/RR/EUI48.php
Normal file
@ -0,0 +1,187 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2013, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2013 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 1.3.2
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* EUI48 Resource Record - RFC7043 section 3.1
|
||||||
|
*
|
||||||
|
* 0 1 2 3
|
||||||
|
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
* | EUI-48 Address |
|
||||||
|
* | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
* | |
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_RR
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_RR_EUI48 extends Net_DNS2_RR
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* The EUI48 address, in hex format
|
||||||
|
*/
|
||||||
|
public $address;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* method to return the rdata portion of the packet as a string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrToString()
|
||||||
|
{
|
||||||
|
return $this->address;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata portion from a standard DNS config line
|
||||||
|
*
|
||||||
|
* @param array $rdata a string split line of values for the rdata
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrFromString(array $rdata)
|
||||||
|
{
|
||||||
|
$value = array_shift($rdata);
|
||||||
|
|
||||||
|
//
|
||||||
|
// re: RFC 7043, the field must be represented as six two-digit hex numbers
|
||||||
|
// separated by hyphens.
|
||||||
|
//
|
||||||
|
$a = explode('-', $value);
|
||||||
|
if (count($a) != 6) {
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// make sure they're all hex values
|
||||||
|
//
|
||||||
|
foreach ($a as $i) {
|
||||||
|
if (ctype_xdigit($i) == false) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// store it
|
||||||
|
//
|
||||||
|
$this->address = strtolower($value);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata of the Net_DNS2_Packet object
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet to parse the RR from
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrSet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if ($this->rdlength > 0) {
|
||||||
|
|
||||||
|
$x = unpack('C6', $this->rdata);
|
||||||
|
if (count($x) == 6) {
|
||||||
|
|
||||||
|
$this->address = vsprintf('%02x-%02x-%02x-%02x-%02x-%02x', $x);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns the rdata portion of the DNS packet
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet use for
|
||||||
|
* compressed names
|
||||||
|
*
|
||||||
|
* @return mixed either returns a binary packed
|
||||||
|
* string or null on failure
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrGet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
$data = '';
|
||||||
|
|
||||||
|
$a = explode('-', $this->address);
|
||||||
|
foreach ($a as $b) {
|
||||||
|
|
||||||
|
$data .= chr(hexdec($b));
|
||||||
|
}
|
||||||
|
|
||||||
|
$packet->offset += 6;
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
188
bundled-libs/Net/DNS2/RR/EUI64.php
Normal file
188
bundled-libs/Net/DNS2/RR/EUI64.php
Normal file
@ -0,0 +1,188 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2013, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2013 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 1.3.2
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* EUI64 Resource Record - RFC7043 section 4.1
|
||||||
|
*
|
||||||
|
* 0 1 2 3
|
||||||
|
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
* | EUI-48 Address |
|
||||||
|
* | |
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_RR
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_RR_EUI64 extends Net_DNS2_RR
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* The EUI64 address, in hex format
|
||||||
|
*/
|
||||||
|
public $address;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* method to return the rdata portion of the packet as a string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrToString()
|
||||||
|
{
|
||||||
|
return $this->address;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata portion from a standard DNS config line
|
||||||
|
*
|
||||||
|
* @param array $rdata a string split line of values for the rdata
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrFromString(array $rdata)
|
||||||
|
{
|
||||||
|
$value = array_shift($rdata);
|
||||||
|
|
||||||
|
//
|
||||||
|
// re: RFC 7043, the field must be represented as 8 two-digit hex numbers
|
||||||
|
// separated by hyphens.
|
||||||
|
//
|
||||||
|
$a = explode('-', $value);
|
||||||
|
if (count($a) != 8) {
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// make sure they're all hex values
|
||||||
|
//
|
||||||
|
foreach ($a as $i) {
|
||||||
|
if (ctype_xdigit($i) == false) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// store it
|
||||||
|
//
|
||||||
|
$this->address = strtolower($value);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata of the Net_DNS2_Packet object
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet to parse the RR from
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrSet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if ($this->rdlength > 0) {
|
||||||
|
|
||||||
|
$x = unpack('C8', $this->rdata);
|
||||||
|
if (count($x) == 8) {
|
||||||
|
|
||||||
|
$this->address = vsprintf(
|
||||||
|
'%02x-%02x-%02x-%02x-%02x-%02x-%02x-%02x', $x
|
||||||
|
);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns the rdata portion of the DNS packet
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet use for
|
||||||
|
* compressed names
|
||||||
|
*
|
||||||
|
* @return mixed either returns a binary packed
|
||||||
|
* string or null on failure
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrGet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
$data = '';
|
||||||
|
|
||||||
|
$a = explode('-', $this->address);
|
||||||
|
foreach ($a as $b) {
|
||||||
|
|
||||||
|
$data .= chr(hexdec($b));
|
||||||
|
}
|
||||||
|
|
||||||
|
$packet->offset += 8;
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
175
bundled-libs/Net/DNS2/RR/HINFO.php
Normal file
175
bundled-libs/Net/DNS2/RR/HINFO.php
Normal file
@ -0,0 +1,175 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2010 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 0.6.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* HINFO Resource Record - RFC1035 section 3.3.2
|
||||||
|
*
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* / CPU /
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* / OS /
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_RR
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_RR_HINFO extends Net_DNS2_RR
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* computer informatino
|
||||||
|
*/
|
||||||
|
public $cpu;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* operataing system
|
||||||
|
*/
|
||||||
|
public $os;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* method to return the rdata portion of the packet as a string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrToString()
|
||||||
|
{
|
||||||
|
return $this->formatString($this->cpu) . ' ' .
|
||||||
|
$this->formatString($this->os);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata portion from a standard DNS config line
|
||||||
|
*
|
||||||
|
* @param array $rdata a string split line of values for the rdata
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrFromString(array $rdata)
|
||||||
|
{
|
||||||
|
$data = $this->buildString($rdata);
|
||||||
|
if (count($data) == 2) {
|
||||||
|
|
||||||
|
$this->cpu = $data[0];
|
||||||
|
$this->os = $data[1];
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata of the Net_DNS2_Packet object
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet to parse the RR from
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrSet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if ($this->rdlength > 0) {
|
||||||
|
|
||||||
|
$offset = $packet->offset;
|
||||||
|
|
||||||
|
$this->cpu = trim(Net_DNS2_Packet::label($packet, $offset), '"');
|
||||||
|
$this->os = trim(Net_DNS2_Packet::label($packet, $offset), '"');
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns the rdata portion of the DNS packet
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet use for
|
||||||
|
* compressed names
|
||||||
|
*
|
||||||
|
* @return mixed either returns a binary packed
|
||||||
|
* string or null on failure
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrGet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if (strlen($this->cpu) > 0) {
|
||||||
|
|
||||||
|
$data = chr(strlen($this->cpu)) . $this->cpu;
|
||||||
|
$data .= chr(strlen($this->os)) . $this->os;
|
||||||
|
|
||||||
|
$packet->offset += strlen($data);
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
287
bundled-libs/Net/DNS2/RR/HIP.php
Normal file
287
bundled-libs/Net/DNS2/RR/HIP.php
Normal file
@ -0,0 +1,287 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2010 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 1.0.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* HIP Resource Record - RFC5205 section 5
|
||||||
|
*
|
||||||
|
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
* | HIT length | PK algorithm | PK length |
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
* | |
|
||||||
|
* ~ HIT ~
|
||||||
|
* | |
|
||||||
|
* + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
* | | |
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+ +
|
||||||
|
* | Public Key |
|
||||||
|
* ~ ~
|
||||||
|
* | |
|
||||||
|
* + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
* | | |
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +
|
||||||
|
* | |
|
||||||
|
* ~ Rendezvous Servers ~
|
||||||
|
* | |
|
||||||
|
* + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
* | |
|
||||||
|
* +-+-+-+-+-+-+-+
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_RR
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_RR_HIP extends Net_DNS2_RR
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* The length of the HIT field
|
||||||
|
*/
|
||||||
|
public $hit_length;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* the public key cryptographic algorithm
|
||||||
|
*/
|
||||||
|
public $pk_algorithm;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* the length of the public key field
|
||||||
|
*/
|
||||||
|
public $pk_length;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The HIT is stored as a binary value in network byte order.
|
||||||
|
*/
|
||||||
|
public $hit;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The public key
|
||||||
|
*/
|
||||||
|
public $public_key;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* a list of rendezvous servers
|
||||||
|
*/
|
||||||
|
public $rendezvous_servers = array();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* method to return the rdata portion of the packet as a string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrToString()
|
||||||
|
{
|
||||||
|
$out = $this->pk_algorithm . ' ' .
|
||||||
|
$this->hit . ' ' . $this->public_key . ' ';
|
||||||
|
|
||||||
|
foreach ($this->rendezvous_servers as $index => $server) {
|
||||||
|
|
||||||
|
$out .= $server . '. ';
|
||||||
|
}
|
||||||
|
|
||||||
|
return trim($out);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata portion from a standard DNS config line
|
||||||
|
*
|
||||||
|
* @param array $rdata a string split line of values for the rdata
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrFromString(array $rdata)
|
||||||
|
{
|
||||||
|
$this->pk_algorithm = array_shift($rdata);
|
||||||
|
$this->hit = strtoupper(array_shift($rdata));
|
||||||
|
$this->public_key = array_shift($rdata);
|
||||||
|
|
||||||
|
//
|
||||||
|
// anything left on the array, must be one or more rendezevous servers. add
|
||||||
|
// them and strip off the trailing dot
|
||||||
|
//
|
||||||
|
if (count($rdata) > 0) {
|
||||||
|
|
||||||
|
$this->rendezvous_servers = preg_replace('/\.$/', '', $rdata);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// store the lengths;
|
||||||
|
//
|
||||||
|
$this->hit_length = strlen(pack('H*', $this->hit));
|
||||||
|
$this->pk_length = strlen(base64_decode($this->public_key));
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata of the Net_DNS2_Packet object
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet to parse the RR from
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrSet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if ($this->rdlength > 0) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// unpack the algorithm and length values
|
||||||
|
//
|
||||||
|
$x = unpack('Chit_length/Cpk_algorithm/npk_length', $this->rdata);
|
||||||
|
|
||||||
|
$this->hit_length = $x['hit_length'];
|
||||||
|
$this->pk_algorithm = $x['pk_algorithm'];
|
||||||
|
$this->pk_length = $x['pk_length'];
|
||||||
|
|
||||||
|
$offset = 4;
|
||||||
|
|
||||||
|
//
|
||||||
|
// copy out the HIT value
|
||||||
|
//
|
||||||
|
$hit = unpack('H*', substr($this->rdata, $offset, $this->hit_length));
|
||||||
|
|
||||||
|
$this->hit = strtoupper($hit[1]);
|
||||||
|
$offset += $this->hit_length;
|
||||||
|
|
||||||
|
//
|
||||||
|
// copy out the public key
|
||||||
|
//
|
||||||
|
$this->public_key = base64_encode(
|
||||||
|
substr($this->rdata, $offset, $this->pk_length)
|
||||||
|
);
|
||||||
|
$offset += $this->pk_length;
|
||||||
|
|
||||||
|
//
|
||||||
|
// copy out any possible rendezvous servers
|
||||||
|
//
|
||||||
|
$offset = $packet->offset + $offset;
|
||||||
|
|
||||||
|
while ( ($offset - $packet->offset) < $this->rdlength) {
|
||||||
|
|
||||||
|
$this->rendezvous_servers[] = Net_DNS2_Packet::expand(
|
||||||
|
$packet, $offset
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns the rdata portion of the DNS packet
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet use for
|
||||||
|
* compressed names
|
||||||
|
*
|
||||||
|
* @return mixed either returns a binary packed
|
||||||
|
* string or null on failure
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrGet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if ( (strlen($this->hit) > 0) && (strlen($this->public_key) > 0) ) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// pack the length, algorithm and HIT values
|
||||||
|
//
|
||||||
|
$data = pack(
|
||||||
|
'CCnH*',
|
||||||
|
$this->hit_length,
|
||||||
|
$this->pk_algorithm,
|
||||||
|
$this->pk_length,
|
||||||
|
$this->hit
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
// add the public key
|
||||||
|
//
|
||||||
|
$data .= base64_decode($this->public_key);
|
||||||
|
|
||||||
|
//
|
||||||
|
// add the offset
|
||||||
|
//
|
||||||
|
$packet->offset += strlen($data);
|
||||||
|
|
||||||
|
//
|
||||||
|
// add each rendezvous server
|
||||||
|
//
|
||||||
|
foreach ($this->rendezvous_servers as $index => $server) {
|
||||||
|
|
||||||
|
$data .= $packet->compress($server, $packet->offset);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
386
bundled-libs/Net/DNS2/RR/IPSECKEY.php
Normal file
386
bundled-libs/Net/DNS2/RR/IPSECKEY.php
Normal file
@ -0,0 +1,386 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2010 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 0.6.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* IPSECKEY Resource Record - RFC4025 section 2.1
|
||||||
|
*
|
||||||
|
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
* | precedence | gateway type | algorithm | gateway |
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-------------+ +
|
||||||
|
* ~ gateway ~
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
* | /
|
||||||
|
* / public key /
|
||||||
|
* / /
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-|
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_RR
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_RR_IPSECKEY extends Net_DNS2_RR
|
||||||
|
{
|
||||||
|
const GATEWAY_TYPE_NONE = 0;
|
||||||
|
const GATEWAY_TYPE_IPV4 = 1;
|
||||||
|
const GATEWAY_TYPE_IPV6 = 2;
|
||||||
|
const GATEWAY_TYPE_DOMAIN = 3;
|
||||||
|
|
||||||
|
const ALGORITHM_NONE = 0;
|
||||||
|
const ALGORITHM_DSA = 1;
|
||||||
|
const ALGORITHM_RSA = 2;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Precedence (used the same was as a preference field)
|
||||||
|
*/
|
||||||
|
public $precedence;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Gateway type - specifies the format of the gataway information
|
||||||
|
* This can be either:
|
||||||
|
*
|
||||||
|
* 0 No Gateway
|
||||||
|
* 1 IPv4 address
|
||||||
|
* 2 IPV6 address
|
||||||
|
* 3 wire-encoded domain name (not compressed)
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public $gateway_type;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The algorithm used
|
||||||
|
*
|
||||||
|
* This can be:
|
||||||
|
*
|
||||||
|
* 0 No key is present
|
||||||
|
* 1 DSA key is present
|
||||||
|
* 2 RSA key is present
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public $algorithm;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The gatway information
|
||||||
|
*/
|
||||||
|
public $gateway;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* the public key
|
||||||
|
*/
|
||||||
|
public $key;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* method to return the rdata portion of the packet as a string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrToString()
|
||||||
|
{
|
||||||
|
$out = $this->precedence . ' ' . $this->gateway_type . ' ' .
|
||||||
|
$this->algorithm . ' ';
|
||||||
|
|
||||||
|
switch($this->gateway_type) {
|
||||||
|
case self::GATEWAY_TYPE_NONE:
|
||||||
|
$out .= '. ';
|
||||||
|
break;
|
||||||
|
|
||||||
|
case self::GATEWAY_TYPE_IPV4:
|
||||||
|
case self::GATEWAY_TYPE_IPV6:
|
||||||
|
$out .= $this->gateway . ' ';
|
||||||
|
break;
|
||||||
|
|
||||||
|
case self::GATEWAY_TYPE_DOMAIN:
|
||||||
|
$out .= $this->gateway . '. ';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
$out .= $this->key;
|
||||||
|
return $out;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata portion from a standard DNS config line
|
||||||
|
*
|
||||||
|
* @param array $rdata a string split line of values for the rdata
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrFromString(array $rdata)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// load the data
|
||||||
|
//
|
||||||
|
$precedence = array_shift($rdata);
|
||||||
|
$gateway_type = array_shift($rdata);
|
||||||
|
$algorithm = array_shift($rdata);
|
||||||
|
$gateway = strtolower(trim(array_shift($rdata)));
|
||||||
|
$key = array_shift($rdata);
|
||||||
|
|
||||||
|
//
|
||||||
|
// validate it
|
||||||
|
//
|
||||||
|
switch($gateway_type) {
|
||||||
|
case self::GATEWAY_TYPE_NONE:
|
||||||
|
$gateway = '';
|
||||||
|
break;
|
||||||
|
|
||||||
|
case self::GATEWAY_TYPE_IPV4:
|
||||||
|
if (Net_DNS2::isIPv4($gateway) == false) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case self::GATEWAY_TYPE_IPV6:
|
||||||
|
if (Net_DNS2::isIPv6($gateway) == false) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case self::GATEWAY_TYPE_DOMAIN:
|
||||||
|
; // do nothing
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// check the algorithm and key
|
||||||
|
//
|
||||||
|
switch($algorithm) {
|
||||||
|
case self::ALGORITHM_NONE:
|
||||||
|
$key = '';
|
||||||
|
break;
|
||||||
|
|
||||||
|
case self::ALGORITHM_DSA:
|
||||||
|
case self::ALGORITHM_RSA:
|
||||||
|
; // do nothing
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// store the values
|
||||||
|
//
|
||||||
|
$this->precedence = $precedence;
|
||||||
|
$this->gateway_type = $gateway_type;
|
||||||
|
$this->algorithm = $algorithm;
|
||||||
|
$this->gateway = $gateway;
|
||||||
|
$this->key = $key;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata of the Net_DNS2_Packet object
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet to parse the RR from
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrSet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if ($this->rdlength > 0) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// parse off the precedence, gateway type and algorithm
|
||||||
|
//
|
||||||
|
$x = unpack('Cprecedence/Cgateway_type/Calgorithm', $this->rdata);
|
||||||
|
|
||||||
|
$this->precedence = $x['precedence'];
|
||||||
|
$this->gateway_type = $x['gateway_type'];
|
||||||
|
$this->algorithm = $x['algorithm'];
|
||||||
|
|
||||||
|
$offset = 3;
|
||||||
|
|
||||||
|
//
|
||||||
|
// extract the gatway based on the type
|
||||||
|
//
|
||||||
|
switch($this->gateway_type) {
|
||||||
|
case self::GATEWAY_TYPE_NONE:
|
||||||
|
$this->gateway = '';
|
||||||
|
break;
|
||||||
|
|
||||||
|
case self::GATEWAY_TYPE_IPV4:
|
||||||
|
$this->gateway = inet_ntop(substr($this->rdata, $offset, 4));
|
||||||
|
$offset += 4;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case self::GATEWAY_TYPE_IPV6:
|
||||||
|
$ip = unpack('n8', substr($this->rdata, $offset, 16));
|
||||||
|
if (count($ip) == 8) {
|
||||||
|
|
||||||
|
$this->gateway = vsprintf('%x:%x:%x:%x:%x:%x:%x:%x', $ip);
|
||||||
|
$offset += 16;
|
||||||
|
} else {
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case self::GATEWAY_TYPE_DOMAIN:
|
||||||
|
|
||||||
|
$doffset = $offset + $packet->offset;
|
||||||
|
$this->gateway = Net_DNS2_Packet::expand($packet, $doffset);
|
||||||
|
$offset = ($doffset - $packet->offset);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// extract the key
|
||||||
|
//
|
||||||
|
switch($this->algorithm) {
|
||||||
|
case self::ALGORITHM_NONE:
|
||||||
|
$this->key = '';
|
||||||
|
break;
|
||||||
|
|
||||||
|
case self::ALGORITHM_DSA:
|
||||||
|
case self::ALGORITHM_RSA:
|
||||||
|
$this->key = base64_encode(substr($this->rdata, $offset));
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns the rdata portion of the DNS packet
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet use for
|
||||||
|
* compressed names
|
||||||
|
*
|
||||||
|
* @return mixed either returns a binary packed
|
||||||
|
* string or null on failure
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrGet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// pack the precedence, gateway type and algorithm
|
||||||
|
//
|
||||||
|
$data = pack(
|
||||||
|
'CCC', $this->precedence, $this->gateway_type, $this->algorithm
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
// add the gateway based on the type
|
||||||
|
//
|
||||||
|
switch($this->gateway_type) {
|
||||||
|
case self::GATEWAY_TYPE_NONE:
|
||||||
|
; // add nothing
|
||||||
|
break;
|
||||||
|
|
||||||
|
case self::GATEWAY_TYPE_IPV4:
|
||||||
|
case self::GATEWAY_TYPE_IPV6:
|
||||||
|
$data .= inet_pton($this->gateway);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case self::GATEWAY_TYPE_DOMAIN:
|
||||||
|
$data .= chr(strlen($this->gateway)) . $this->gateway;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// add the key if there's one specified
|
||||||
|
//
|
||||||
|
switch($this->algorithm) {
|
||||||
|
case self::ALGORITHM_NONE:
|
||||||
|
; // add nothing
|
||||||
|
break;
|
||||||
|
|
||||||
|
case self::ALGORITHM_DSA:
|
||||||
|
case self::ALGORITHM_RSA:
|
||||||
|
$data .= base64_decode($this->key);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
$packet->offset += strlen($data);
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
190
bundled-libs/Net/DNS2/RR/ISDN.php
Normal file
190
bundled-libs/Net/DNS2/RR/ISDN.php
Normal file
@ -0,0 +1,190 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2010 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 0.6.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ISDN Resource Record - RFC1183 section 3.2
|
||||||
|
*
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* / ISDN-address /
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* / SA /
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_RR
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_RR_ISDN extends Net_DNS2_RR
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* ISDN Number
|
||||||
|
*/
|
||||||
|
public $isdnaddress;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Sub-Address
|
||||||
|
*/
|
||||||
|
public $sa;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* method to return the rdata portion of the packet as a string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrToString()
|
||||||
|
{
|
||||||
|
return $this->formatString($this->isdnaddress) . ' ' .
|
||||||
|
$this->formatString($this->sa);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata portion from a standard DNS config line
|
||||||
|
*
|
||||||
|
* @param array $rdata a string split line of values for the rdata
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrFromString(array $rdata)
|
||||||
|
{
|
||||||
|
$data = $this->buildString($rdata);
|
||||||
|
if (count($data) >= 1) {
|
||||||
|
|
||||||
|
$this->isdnaddress = $data[0];
|
||||||
|
if (isset($data[1])) {
|
||||||
|
|
||||||
|
$this->sa = $data[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata of the Net_DNS2_Packet object
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet to parse the RR from
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrSet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if ($this->rdlength > 0) {
|
||||||
|
|
||||||
|
$this->isdnaddress = Net_DNS2_Packet::label($packet, $packet->offset);
|
||||||
|
|
||||||
|
//
|
||||||
|
// look for a SA (sub address) - it's optional
|
||||||
|
//
|
||||||
|
if ( (strlen($this->isdnaddress) + 1) < $this->rdlength) {
|
||||||
|
|
||||||
|
$this->sa = Net_DNS2_Packet::label($packet, $packet->offset);
|
||||||
|
} else {
|
||||||
|
|
||||||
|
$this->sa = '';
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns the rdata portion of the DNS packet
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet use for
|
||||||
|
* compressed names
|
||||||
|
*
|
||||||
|
* @return mixed either returns a binary packed
|
||||||
|
* string or null on failure
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrGet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if (strlen($this->isdnaddress) > 0) {
|
||||||
|
|
||||||
|
$data = chr(strlen($this->isdnaddress)) . $this->isdnaddress;
|
||||||
|
if (!empty($this->sa)) {
|
||||||
|
|
||||||
|
$data .= chr(strlen($this->sa));
|
||||||
|
$data .= $this->sa;
|
||||||
|
}
|
||||||
|
|
||||||
|
$packet->offset += strlen($data);
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
85
bundled-libs/Net/DNS2/RR/KEY.php
Normal file
85
bundled-libs/Net/DNS2/RR/KEY.php
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2010 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 0.6.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* the KEY RR is implemented the same as the DNSKEY RR, the only difference
|
||||||
|
* is how the flags data is parsed.
|
||||||
|
*
|
||||||
|
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
|
||||||
|
* +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|
||||||
|
* | A/C | Z | XT| Z | Z | NAMTYP| Z | Z | Z | Z | SIG |
|
||||||
|
* +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|
||||||
|
*
|
||||||
|
* DNSKEY only uses bits 7 and 15
|
||||||
|
*
|
||||||
|
* We're not doing anything with these flags right now, so duplicating the
|
||||||
|
* class like this is fine.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_RR
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_RR_KEY extends Net_DNS2_RR_DNSKEY
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
179
bundled-libs/Net/DNS2/RR/KX.php
Normal file
179
bundled-libs/Net/DNS2/RR/KX.php
Normal file
@ -0,0 +1,179 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2010 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 0.6.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* KX Resource Record - RFC2230 section 3.1
|
||||||
|
*
|
||||||
|
* This class is almost identical to MX, except that the the exchanger
|
||||||
|
* domain is not compressed, it's added as a label
|
||||||
|
*
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* | PREFERENCE |
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* / EXCHANGER /
|
||||||
|
* / /
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_RR
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_RR_KX extends Net_DNS2_RR
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* the preference for this mail exchanger
|
||||||
|
*/
|
||||||
|
public $preference;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* the hostname of the mail exchanger
|
||||||
|
*/
|
||||||
|
public $exchange;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* method to return the rdata portion of the packet as a string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrToString()
|
||||||
|
{
|
||||||
|
return $this->preference . ' ' . $this->cleanString($this->exchange) . '.';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata portion from a standard DNS config line
|
||||||
|
*
|
||||||
|
* @param array $rdata a string split line of values for the rdata
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrFromString(array $rdata)
|
||||||
|
{
|
||||||
|
$this->preference = array_shift($rdata);
|
||||||
|
$this->exchange = $this->cleanString(array_shift($rdata));
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata of the Net_DNS2_Packet object
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet to parse the RR from
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrSet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if ($this->rdlength > 0) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// parse the preference
|
||||||
|
//
|
||||||
|
$x = unpack('npreference', $this->rdata);
|
||||||
|
$this->preference = $x['preference'];
|
||||||
|
|
||||||
|
//
|
||||||
|
// get the exchange entry server)
|
||||||
|
//
|
||||||
|
$offset = $packet->offset + 2;
|
||||||
|
$this->exchange = Net_DNS2_Packet::label($packet, $offset);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns the rdata portion of the DNS packet
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet use for
|
||||||
|
* compressed names
|
||||||
|
*
|
||||||
|
* @return mixed either returns a binary packed
|
||||||
|
* string or null on failure
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrGet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if (strlen($this->exchange) > 0) {
|
||||||
|
|
||||||
|
$data = pack('nC', $this->preference, strlen($this->exchange)) .
|
||||||
|
$this->exchange;
|
||||||
|
|
||||||
|
$packet->offset += strlen($data);
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
180
bundled-libs/Net/DNS2/RR/L32.php
Normal file
180
bundled-libs/Net/DNS2/RR/L32.php
Normal file
@ -0,0 +1,180 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2013, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2013 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 1.3.1
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* L32 Resource Record - RFC6742 section 2.2
|
||||||
|
*
|
||||||
|
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
* | Preference | Locator32 (16 MSBs) |
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
* | Locator32 (16 LSBs) |
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_RR
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_RR_L32 extends Net_DNS2_RR
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* The preference
|
||||||
|
*/
|
||||||
|
public $preference;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The locator32 field
|
||||||
|
*/
|
||||||
|
public $locator32;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* method to return the rdata portion of the packet as a string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrToString()
|
||||||
|
{
|
||||||
|
return $this->preference . ' ' . $this->locator32;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata portion from a standard DNS config line
|
||||||
|
*
|
||||||
|
* @param array $rdata a string split line of values for the rdata
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrFromString(array $rdata)
|
||||||
|
{
|
||||||
|
$this->preference = array_shift($rdata);
|
||||||
|
$this->locator32 = array_shift($rdata);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata of the Net_DNS2_Packet object
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet to parse the RR from
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrSet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if ($this->rdlength > 0) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// unpack the values
|
||||||
|
//
|
||||||
|
$x = unpack('npreference/C4locator', $this->rdata);
|
||||||
|
|
||||||
|
$this->preference = $x['preference'];
|
||||||
|
|
||||||
|
//
|
||||||
|
// build the locator value
|
||||||
|
//
|
||||||
|
$this->locator32 = $x['locator1'] . '.' . $x['locator2'] . '.' .
|
||||||
|
$x['locator3'] . '.' . $x['locator4'];
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns the rdata portion of the DNS packet
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet use for
|
||||||
|
* compressed names
|
||||||
|
*
|
||||||
|
* @return mixed either returns a binary packed
|
||||||
|
* string or null on failure
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrGet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if (strlen($this->locator32) > 0) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// break out the locator value
|
||||||
|
//
|
||||||
|
$n = explode('.', $this->locator32);
|
||||||
|
|
||||||
|
//
|
||||||
|
// pack the data
|
||||||
|
//
|
||||||
|
return pack('nC4', $this->preference, $n[0], $n[1], $n[2], $n[3]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
187
bundled-libs/Net/DNS2/RR/L64.php
Normal file
187
bundled-libs/Net/DNS2/RR/L64.php
Normal file
@ -0,0 +1,187 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2013, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2013 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 1.3.1
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* L64 Resource Record - RFC6742 section 2.3
|
||||||
|
*
|
||||||
|
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
* | Preference | |
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +
|
||||||
|
* | Locator64 |
|
||||||
|
* + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
* | |
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_RR
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_RR_L64 extends Net_DNS2_RR
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* The preference
|
||||||
|
*/
|
||||||
|
public $preference;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The locator64 field
|
||||||
|
*/
|
||||||
|
public $locator64;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* method to return the rdata portion of the packet as a string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrToString()
|
||||||
|
{
|
||||||
|
return $this->preference . ' ' . $this->locator64;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata portion from a standard DNS config line
|
||||||
|
*
|
||||||
|
* @param array $rdata a string split line of values for the rdata
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrFromString(array $rdata)
|
||||||
|
{
|
||||||
|
$this->preference = array_shift($rdata);
|
||||||
|
$this->locator64 = array_shift($rdata);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata of the Net_DNS2_Packet object
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet to parse the RR from
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrSet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if ($this->rdlength > 0) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// unpack the values
|
||||||
|
//
|
||||||
|
$x = unpack('npreference/n4locator', $this->rdata);
|
||||||
|
|
||||||
|
$this->preference = $x['preference'];
|
||||||
|
|
||||||
|
//
|
||||||
|
// build the locator64
|
||||||
|
//
|
||||||
|
$this->locator64 = dechex($x['locator1']) . ':' .
|
||||||
|
dechex($x['locator2']) . ':' .
|
||||||
|
dechex($x['locator3']) . ':' .
|
||||||
|
dechex($x['locator4']);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns the rdata portion of the DNS packet
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet use for
|
||||||
|
* compressed names
|
||||||
|
*
|
||||||
|
* @return mixed either returns a binary packed
|
||||||
|
* string or null on failure
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrGet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if (strlen($this->locator64) > 0) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// break out the locator64
|
||||||
|
//
|
||||||
|
$n = explode(':', $this->locator64);
|
||||||
|
|
||||||
|
//
|
||||||
|
// pack the data
|
||||||
|
//
|
||||||
|
return pack(
|
||||||
|
'n5', $this->preference, hexdec($n[0]), hexdec($n[1]),
|
||||||
|
hexdec($n[2]), hexdec($n[3])
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
440
bundled-libs/Net/DNS2/RR/LOC.php
Normal file
440
bundled-libs/Net/DNS2/RR/LOC.php
Normal file
@ -0,0 +1,440 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2010 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 0.6.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* LOC Resource Record - RFC1876 section 2
|
||||||
|
*
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* | VERSION | SIZE |
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* | HORIZ PRE | VERT PRE |
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* | LATITUDE |
|
||||||
|
* | |
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* | LONGITUDE |
|
||||||
|
* | |
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* | ALTITUDE |
|
||||||
|
* | |
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_RR
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_RR_LOC extends Net_DNS2_RR
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* the LOC version- should only ever be 0
|
||||||
|
*/
|
||||||
|
public $version;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The diameter of a sphere enclosing the described entity
|
||||||
|
*/
|
||||||
|
public $size;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The horizontal precision of the data
|
||||||
|
*/
|
||||||
|
public $horiz_pre;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The vertical precision of the data
|
||||||
|
*/
|
||||||
|
public $vert_pre;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The latitude - stored in decimal degrees
|
||||||
|
*/
|
||||||
|
public $latitude;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The longitude - stored in decimal degrees
|
||||||
|
*/
|
||||||
|
public $longitude;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The altitude - stored in decimal
|
||||||
|
*/
|
||||||
|
public $altitude;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* used for quick power-of-ten lookups
|
||||||
|
*/
|
||||||
|
private $_powerOfTen = array(1, 10, 100, 1000, 10000, 100000,
|
||||||
|
1000000,10000000,100000000,1000000000);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* some conversion values
|
||||||
|
*/
|
||||||
|
const CONV_SEC = 1000;
|
||||||
|
const CONV_MIN = 60000;
|
||||||
|
const CONV_DEG = 3600000;
|
||||||
|
|
||||||
|
const REFERENCE_ALT = 10000000;
|
||||||
|
const REFERENCE_LATLON = 2147483648;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* method to return the rdata portion of the packet as a string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrToString()
|
||||||
|
{
|
||||||
|
if ($this->version == 0) {
|
||||||
|
|
||||||
|
return $this->_d2Dms($this->latitude, 'LAT') . ' ' .
|
||||||
|
$this->_d2Dms($this->longitude, 'LNG') . ' ' .
|
||||||
|
sprintf('%.2fm', $this->altitude) . ' ' .
|
||||||
|
sprintf('%.2fm', $this->size) . ' ' .
|
||||||
|
sprintf('%.2fm', $this->horiz_pre) . ' ' .
|
||||||
|
sprintf('%.2fm', $this->vert_pre);
|
||||||
|
}
|
||||||
|
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata portion from a standard DNS config line
|
||||||
|
*
|
||||||
|
* @param array $rdata a string split line of values for the rdata
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrFromString(array $rdata)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// format as defined by RFC1876 section 3
|
||||||
|
//
|
||||||
|
// d1 [m1 [s1]] {"N"|"S"} d2 [m2 [s2]] {"E"|"W"} alt["m"]
|
||||||
|
// [siz["m"] [hp["m"] [vp["m"]]]]
|
||||||
|
//
|
||||||
|
$res = preg_match(
|
||||||
|
'/^(\d+) \s+((\d+) \s+)?(([\d.]+) \s+)?(N|S) \s+(\d+) ' .
|
||||||
|
'\s+((\d+) \s+)?(([\d.]+) \s+)?(E|W) \s+(-?[\d.]+) m?(\s+ ' .
|
||||||
|
'([\d.]+) m?)?(\s+ ([\d.]+) m?)?(\s+ ([\d.]+) m?)?/ix',
|
||||||
|
implode(' ', $rdata), $x
|
||||||
|
);
|
||||||
|
|
||||||
|
if ($res) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// latitude
|
||||||
|
//
|
||||||
|
$latdeg = $x[1];
|
||||||
|
$latmin = (isset($x[3])) ? $x[3] : 0;
|
||||||
|
$latsec = (isset($x[5])) ? $x[5] : 0;
|
||||||
|
$lathem = strtoupper($x[6]);
|
||||||
|
|
||||||
|
$this->latitude = $this->_dms2d($latdeg, $latmin, $latsec, $lathem);
|
||||||
|
|
||||||
|
//
|
||||||
|
// longitude
|
||||||
|
//
|
||||||
|
$londeg = $x[7];
|
||||||
|
$lonmin = (isset($x[9])) ? $x[9] : 0;
|
||||||
|
$lonsec = (isset($x[11])) ? $x[11] : 0;
|
||||||
|
$lonhem = strtoupper($x[12]);
|
||||||
|
|
||||||
|
$this->longitude = $this->_dms2d($londeg, $lonmin, $lonsec, $lonhem);
|
||||||
|
|
||||||
|
//
|
||||||
|
// the rest of teh values
|
||||||
|
//
|
||||||
|
$version = 0;
|
||||||
|
|
||||||
|
$this->size = (isset($x[15])) ? $x[15] : 1;
|
||||||
|
$this->horiz_pre = ((isset($x[17])) ? $x[17] : 10000);
|
||||||
|
$this->vert_pre = ((isset($x[19])) ? $x[19] : 10);
|
||||||
|
$this->altitude = $x[13];
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata of the Net_DNS2_Packet object
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet to parse the RR from
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrSet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if ($this->rdlength > 0) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// unpack all the values
|
||||||
|
//
|
||||||
|
$x = unpack(
|
||||||
|
'Cver/Csize/Choriz_pre/Cvert_pre/Nlatitude/Nlongitude/Naltitude',
|
||||||
|
$this->rdata
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
// version must be 0 per RFC 1876 section 2
|
||||||
|
//
|
||||||
|
$this->version = $x['ver'];
|
||||||
|
if ($this->version == 0) {
|
||||||
|
|
||||||
|
$this->size = $this->_precsizeNtoA($x['size']);
|
||||||
|
$this->horiz_pre = $this->_precsizeNtoA($x['horiz_pre']);
|
||||||
|
$this->vert_pre = $this->_precsizeNtoA($x['vert_pre']);
|
||||||
|
|
||||||
|
//
|
||||||
|
// convert the latitude and longitude to degress in decimal
|
||||||
|
//
|
||||||
|
if ($x['latitude'] < 0) {
|
||||||
|
|
||||||
|
$this->latitude = ($x['latitude'] +
|
||||||
|
self::REFERENCE_LATLON) / self::CONV_DEG;
|
||||||
|
} else {
|
||||||
|
|
||||||
|
$this->latitude = ($x['latitude'] -
|
||||||
|
self::REFERENCE_LATLON) / self::CONV_DEG;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($x['longitude'] < 0) {
|
||||||
|
|
||||||
|
$this->longitude = ($x['longitude'] +
|
||||||
|
self::REFERENCE_LATLON) / self::CONV_DEG;
|
||||||
|
} else {
|
||||||
|
|
||||||
|
$this->longitude = ($x['longitude'] -
|
||||||
|
self::REFERENCE_LATLON) / self::CONV_DEG;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// convert down the altitude
|
||||||
|
//
|
||||||
|
$this->altitude = ($x['altitude'] - self::REFERENCE_ALT) / 100;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns the rdata portion of the DNS packet
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet use for
|
||||||
|
* compressed names
|
||||||
|
*
|
||||||
|
* @return mixed either returns a binary packed
|
||||||
|
* string or null on failure
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrGet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if ($this->version == 0) {
|
||||||
|
|
||||||
|
$lat = 0;
|
||||||
|
$lng = 0;
|
||||||
|
|
||||||
|
if ($this->latitude < 0) {
|
||||||
|
|
||||||
|
$lat = ($this->latitude * self::CONV_DEG) - self::REFERENCE_LATLON;
|
||||||
|
} else {
|
||||||
|
|
||||||
|
$lat = ($this->latitude * self::CONV_DEG) + self::REFERENCE_LATLON;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->longitude < 0) {
|
||||||
|
|
||||||
|
$lng = ($this->longitude * self::CONV_DEG) - self::REFERENCE_LATLON;
|
||||||
|
} else {
|
||||||
|
|
||||||
|
$lng = ($this->longitude * self::CONV_DEG) + self::REFERENCE_LATLON;
|
||||||
|
}
|
||||||
|
|
||||||
|
$packet->offset += 16;
|
||||||
|
|
||||||
|
return pack(
|
||||||
|
'CCCCNNN',
|
||||||
|
$this->version,
|
||||||
|
$this->_precsizeAtoN($this->size),
|
||||||
|
$this->_precsizeAtoN($this->horiz_pre),
|
||||||
|
$this->_precsizeAtoN($this->vert_pre),
|
||||||
|
$lat, $lng,
|
||||||
|
($this->altitude * 100) + self::REFERENCE_ALT
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* takes an XeY precision/size value, returns a string representation.
|
||||||
|
* shamlessly stolen from RFC1876 Appendix A
|
||||||
|
*
|
||||||
|
* @param integer $prec the value to convert
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @access private
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private function _precsizeNtoA($prec)
|
||||||
|
{
|
||||||
|
$mantissa = (($prec >> 4) & 0x0f) % 10;
|
||||||
|
$exponent = (($prec >> 0) & 0x0f) % 10;
|
||||||
|
|
||||||
|
return $mantissa * $this->_powerOfTen[$exponent];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* converts ascii size/precision X * 10**Y(cm) to 0xXY.
|
||||||
|
* shamlessly stolen from RFC1876 Appendix A
|
||||||
|
*
|
||||||
|
* @param string $prec the value to convert
|
||||||
|
*
|
||||||
|
* @return integer
|
||||||
|
* @access private
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private function _precsizeAtoN($prec)
|
||||||
|
{
|
||||||
|
$exponent = 0;
|
||||||
|
while ($prec >= 10) {
|
||||||
|
|
||||||
|
$prec /= 10;
|
||||||
|
++$exponent;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ($prec << 4) | ($exponent & 0x0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* convert lat/lng in deg/min/sec/hem to decimal value
|
||||||
|
*
|
||||||
|
* @param integer $deg the degree value
|
||||||
|
* @param integer $min the minutes value
|
||||||
|
* @param integer $sec the seconds value
|
||||||
|
* @param string $hem the hemisphere (N/E/S/W)
|
||||||
|
*
|
||||||
|
* @return float the decinmal value
|
||||||
|
* @access private
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private function _dms2d($deg, $min, $sec, $hem)
|
||||||
|
{
|
||||||
|
$deg = $deg - 0;
|
||||||
|
$min = $min - 0;
|
||||||
|
|
||||||
|
$sign = ($hem == 'W' || $hem == 'S') ? -1 : 1;
|
||||||
|
return ((($sec/60+$min)/60)+$deg) * $sign;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* convert lat/lng in decimal to deg/min/sec/hem
|
||||||
|
*
|
||||||
|
* @param float $data the decimal value
|
||||||
|
* @param string $latlng either LAT or LNG so we can determine the HEM value
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @access private
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private function _d2Dms($data, $latlng)
|
||||||
|
{
|
||||||
|
$deg = 0;
|
||||||
|
$min = 0;
|
||||||
|
$sec = 0;
|
||||||
|
$msec = 0;
|
||||||
|
$hem = '';
|
||||||
|
|
||||||
|
if ($latlng == 'LAT') {
|
||||||
|
$hem = ($data > 0) ? 'N' : 'S';
|
||||||
|
} else {
|
||||||
|
$hem = ($data > 0) ? 'E' : 'W';
|
||||||
|
}
|
||||||
|
|
||||||
|
$data = abs($data);
|
||||||
|
|
||||||
|
$deg = (int)$data;
|
||||||
|
$min = (int)(($data - $deg) * 60);
|
||||||
|
$sec = (int)(((($data - $deg) * 60) - $min) * 60);
|
||||||
|
$msec = round((((((($data - $deg) * 60) - $min) * 60) - $sec) * 1000));
|
||||||
|
|
||||||
|
return sprintf('%d %02d %02d.%03d %s', $deg, $min, $sec, round($msec), $hem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
177
bundled-libs/Net/DNS2/RR/LP.php
Normal file
177
bundled-libs/Net/DNS2/RR/LP.php
Normal file
@ -0,0 +1,177 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2013, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2013 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 1.3.1
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* LP Resource Record - RFC6742 section 2.4
|
||||||
|
*
|
||||||
|
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
* | Preference | /
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ /
|
||||||
|
* / /
|
||||||
|
* / FQDN /
|
||||||
|
* / /
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_RR
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_RR_LP extends Net_DNS2_RR
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* The preference
|
||||||
|
*/
|
||||||
|
public $preference;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The fdqn field
|
||||||
|
*/
|
||||||
|
public $fqdn;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* method to return the rdata portion of the packet as a string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrToString()
|
||||||
|
{
|
||||||
|
return $this->preference . ' ' . $this->fqdn . '.';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata portion from a standard DNS config line
|
||||||
|
*
|
||||||
|
* @param array $rdata a string split line of values for the rdata
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrFromString(array $rdata)
|
||||||
|
{
|
||||||
|
$this->preference = array_shift($rdata);
|
||||||
|
$this->fqdn = trim(array_shift($rdata), '.');
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata of the Net_DNS2_Packet object
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet to parse the RR from
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrSet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if ($this->rdlength > 0) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// parse the preference
|
||||||
|
//
|
||||||
|
$x = unpack('npreference', $this->rdata);
|
||||||
|
$this->preference = $x['preference'];
|
||||||
|
$offset = $packet->offset + 2;
|
||||||
|
|
||||||
|
//
|
||||||
|
// get the hostname
|
||||||
|
//
|
||||||
|
$this->fqdn = Net_DNS2_Packet::expand($packet, $offset);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns the rdata portion of the DNS packet
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet use for
|
||||||
|
* compressed names
|
||||||
|
*
|
||||||
|
* @return mixed either returns a binary packed
|
||||||
|
* string or null on failure
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrGet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if (strlen($this->fqdn) > 0) {
|
||||||
|
|
||||||
|
$data = pack('n', $this->preference);
|
||||||
|
$packet->offset += 2;
|
||||||
|
|
||||||
|
$data .= $packet->compress($this->fqdn, $packet->offset);
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
175
bundled-libs/Net/DNS2/RR/MX.php
Normal file
175
bundled-libs/Net/DNS2/RR/MX.php
Normal file
@ -0,0 +1,175 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2010 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 0.6.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* MX Resource Record - RFC1035 section 3.3.9
|
||||||
|
*
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* | PREFERENCE |
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* / EXCHANGE /
|
||||||
|
* / /
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_RR
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_RR_MX extends Net_DNS2_RR
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* the preference for this mail exchanger
|
||||||
|
*/
|
||||||
|
public $preference;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* the hostname of the mail exchanger
|
||||||
|
*/
|
||||||
|
public $exchange;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* method to return the rdata portion of the packet as a string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrToString()
|
||||||
|
{
|
||||||
|
return $this->preference . ' ' . $this->cleanString($this->exchange) . '.';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata portion from a standard DNS config line
|
||||||
|
*
|
||||||
|
* @param array $rdata a string split line of values for the rdata
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrFromString(array $rdata)
|
||||||
|
{
|
||||||
|
$this->preference = array_shift($rdata);
|
||||||
|
$this->exchange = $this->cleanString(array_shift($rdata));
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata of the Net_DNS2_Packet object
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet to parse the RR from
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrSet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if ($this->rdlength > 0) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// parse the preference
|
||||||
|
//
|
||||||
|
$x = unpack('npreference', $this->rdata);
|
||||||
|
$this->preference = $x['preference'];
|
||||||
|
|
||||||
|
//
|
||||||
|
// get the exchange entry server)
|
||||||
|
//
|
||||||
|
$offset = $packet->offset + 2;
|
||||||
|
$this->exchange = Net_DNS2_Packet::expand($packet, $offset);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns the rdata portion of the DNS packet
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet use for
|
||||||
|
* compressed names
|
||||||
|
*
|
||||||
|
* @return mixed either returns a binary packed
|
||||||
|
* string or null on failure
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrGet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if (strlen($this->exchange) > 0) {
|
||||||
|
|
||||||
|
$data = pack('n', $this->preference);
|
||||||
|
$packet->offset += 2;
|
||||||
|
|
||||||
|
$data .= $packet->compress($this->exchange, $packet->offset);
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
231
bundled-libs/Net/DNS2/RR/NAPTR.php
Normal file
231
bundled-libs/Net/DNS2/RR/NAPTR.php
Normal file
@ -0,0 +1,231 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2010 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 0.6.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* NAPTR Resource Record - RFC2915
|
||||||
|
*
|
||||||
|
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* | ORDER |
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* | PREFERENCE |
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* / FLAGS /
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* / SERVICES /
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* / REGEXP /
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* / REPLACEMENT /
|
||||||
|
* / /
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_RR
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_RR_NAPTR extends Net_DNS2_RR
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* the order in which the NAPTR records MUST be processed
|
||||||
|
*/
|
||||||
|
public $order;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* specifies the order in which NAPTR records with equal "order"
|
||||||
|
* values SHOULD be processed
|
||||||
|
*/
|
||||||
|
public $preference;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* rewrite flags
|
||||||
|
*/
|
||||||
|
public $flags;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Specifies the service(s) available down this rewrite path
|
||||||
|
*/
|
||||||
|
public $services;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* regular expression
|
||||||
|
*/
|
||||||
|
public $regexp;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The next NAME to query for NAPTR, SRV, or address records
|
||||||
|
* depending on the value of the flags field
|
||||||
|
*/
|
||||||
|
public $replacement;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* method to return the rdata portion of the packet as a string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrToString()
|
||||||
|
{
|
||||||
|
return $this->order . ' ' . $this->preference . ' ' .
|
||||||
|
$this->formatString($this->flags) . ' ' .
|
||||||
|
$this->formatString($this->services) . ' ' .
|
||||||
|
$this->formatString($this->regexp) . ' ' .
|
||||||
|
$this->cleanString($this->replacement) . '.';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata portion from a standard DNS config line
|
||||||
|
*
|
||||||
|
* @param array $rdata a string split line of values for the rdata
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrFromString(array $rdata)
|
||||||
|
{
|
||||||
|
$this->order = array_shift($rdata);
|
||||||
|
$this->preference = array_shift($rdata);
|
||||||
|
|
||||||
|
$data = $this->buildString($rdata);
|
||||||
|
if (count($data) == 4) {
|
||||||
|
|
||||||
|
$this->flags = $data[0];
|
||||||
|
$this->services = $data[1];
|
||||||
|
$this->regexp = $data[2];
|
||||||
|
$this->replacement = $this->cleanString($data[3]);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata of the Net_DNS2_Packet object
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet to parse the RR from
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrSet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if ($this->rdlength > 0) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// unpack the order and preference
|
||||||
|
//
|
||||||
|
$x = unpack('norder/npreference', $this->rdata);
|
||||||
|
|
||||||
|
$this->order = $x['order'];
|
||||||
|
$this->preference = $x['preference'];
|
||||||
|
|
||||||
|
$offset = $packet->offset + 4;
|
||||||
|
|
||||||
|
$this->flags = Net_DNS2_Packet::label($packet, $offset);
|
||||||
|
$this->services = Net_DNS2_Packet::label($packet, $offset);
|
||||||
|
$this->regexp = Net_DNS2_Packet::label($packet, $offset);
|
||||||
|
|
||||||
|
$this->replacement = Net_DNS2_Packet::expand($packet, $offset);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns the rdata portion of the DNS packet
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet use for
|
||||||
|
* compressed names
|
||||||
|
*
|
||||||
|
* @return mixed either returns a binary packed
|
||||||
|
* string or null on failure
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrGet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if ( (isset($this->order)) && (strlen($this->services) > 0) ) {
|
||||||
|
|
||||||
|
$data = pack('nn', $this->order, $this->preference);
|
||||||
|
|
||||||
|
$data .= chr(strlen($this->flags)) . $this->flags;
|
||||||
|
$data .= chr(strlen($this->services)) . $this->services;
|
||||||
|
$data .= chr(strlen($this->regexp)) . $this->regexp;
|
||||||
|
|
||||||
|
$packet->offset += strlen($data);
|
||||||
|
|
||||||
|
$data .= $packet->compress($this->replacement, $packet->offset);
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
187
bundled-libs/Net/DNS2/RR/NID.php
Normal file
187
bundled-libs/Net/DNS2/RR/NID.php
Normal file
@ -0,0 +1,187 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2013, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2013 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 1.3.1
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* NID Resource Record - RFC6742 section 2.1
|
||||||
|
*
|
||||||
|
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
* | Preference | |
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +
|
||||||
|
* | NodeID |
|
||||||
|
* + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
* | |
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_RR
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_RR_NID extends Net_DNS2_RR
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* The preference
|
||||||
|
*/
|
||||||
|
public $preference;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The node ID field
|
||||||
|
*/
|
||||||
|
public $nodeid;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* method to return the rdata portion of the packet as a string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrToString()
|
||||||
|
{
|
||||||
|
return $this->preference . ' ' . $this->nodeid;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata portion from a standard DNS config line
|
||||||
|
*
|
||||||
|
* @param array $rdata a string split line of values for the rdata
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrFromString(array $rdata)
|
||||||
|
{
|
||||||
|
$this->preference = array_shift($rdata);
|
||||||
|
$this->nodeid = array_shift($rdata);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata of the Net_DNS2_Packet object
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet to parse the RR from
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrSet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if ($this->rdlength > 0) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// unpack the values
|
||||||
|
//
|
||||||
|
$x = unpack('npreference/n4nodeid', $this->rdata);
|
||||||
|
|
||||||
|
$this->preference = $x['preference'];
|
||||||
|
|
||||||
|
//
|
||||||
|
// build the node id
|
||||||
|
//
|
||||||
|
$this->nodeid = dechex($x['nodeid1']) . ':' .
|
||||||
|
dechex($x['nodeid2']) . ':' .
|
||||||
|
dechex($x['nodeid3']) . ':' .
|
||||||
|
dechex($x['nodeid4']);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns the rdata portion of the DNS packet
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet use for
|
||||||
|
* compressed names
|
||||||
|
*
|
||||||
|
* @return mixed either returns a binary packed
|
||||||
|
* string or null on failure
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrGet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if (strlen($this->nodeid) > 0) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// break out the node id
|
||||||
|
//
|
||||||
|
$n = explode(':', $this->nodeid);
|
||||||
|
|
||||||
|
//
|
||||||
|
// pack the data
|
||||||
|
//
|
||||||
|
return pack(
|
||||||
|
'n5', $this->preference, hexdec($n[0]), hexdec($n[1]),
|
||||||
|
hexdec($n[2]), hexdec($n[3])
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
130
bundled-libs/Net/DNS2/RR/NIMLOC.php
Normal file
130
bundled-libs/Net/DNS2/RR/NIMLOC.php
Normal file
@ -0,0 +1,130 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2010 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 0.6.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* NIMLOCK Resource Record - undefined; the rdata is simply used as-is in it's
|
||||||
|
* binary format, so not process has to be done.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_RR
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_RR_NIMLOCK extends Net_DNS2_RR
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* method to return the rdata portion of the packet as a string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrToString()
|
||||||
|
{
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata portion from a standard DNS config line
|
||||||
|
*
|
||||||
|
* @param array $rdata a string split line of values for the rdata
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrFromString(array $rdata)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata of the Net_DNS2_Packet object
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet to parse the RR from
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrSet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns the rdata portion of the DNS packet
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet use for
|
||||||
|
* compressed names
|
||||||
|
*
|
||||||
|
* @return mixed either returns a binary packed
|
||||||
|
* string or null on failure
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrGet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
return $this->rdata;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
153
bundled-libs/Net/DNS2/RR/NS.php
Normal file
153
bundled-libs/Net/DNS2/RR/NS.php
Normal file
@ -0,0 +1,153 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2010 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 0.6.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* NS Resource Record - RFC1035 section 3.3.11
|
||||||
|
*
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* / NSDNAME /
|
||||||
|
* / /
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_RR
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_RR_NS extends Net_DNS2_RR
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* the hostname of the DNS server
|
||||||
|
*/
|
||||||
|
public $nsdname;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* method to return the rdata portion of the packet as a string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrToString()
|
||||||
|
{
|
||||||
|
return $this->cleanString($this->nsdname) . '.';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata portion from a standard DNS config line
|
||||||
|
*
|
||||||
|
* @param array $rdata a string split line of values for the rdata
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrFromString(array $rdata)
|
||||||
|
{
|
||||||
|
$this->nsdname = $this->cleanString(array_shift($rdata));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata of the Net_DNS2_Packet object
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet to parse the RR from
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrSet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if ($this->rdlength > 0) {
|
||||||
|
|
||||||
|
$offset = $packet->offset;
|
||||||
|
$this->nsdname = Net_DNS2_Packet::expand($packet, $offset);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns the rdata portion of the DNS packet
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet use for
|
||||||
|
* compressed names
|
||||||
|
*
|
||||||
|
* @return mixed either returns a binary packed
|
||||||
|
* string or null on failure
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrGet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if (strlen($this->nsdname) > 0) {
|
||||||
|
|
||||||
|
return $packet->compress($this->nsdname, $packet->offset);
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
262
bundled-libs/Net/DNS2/RR/NSAP.php
Normal file
262
bundled-libs/Net/DNS2/RR/NSAP.php
Normal file
@ -0,0 +1,262 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2010 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 0.6.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* NSAP Resource Record - RFC1706
|
||||||
|
*
|
||||||
|
* |--------------|
|
||||||
|
* | <-- IDP --> |
|
||||||
|
* |--------------|-------------------------------------|
|
||||||
|
* | AFI | IDI | <-- DSP --> |
|
||||||
|
* |-----|--------|-------------------------------------|
|
||||||
|
* | 47 | 0005 | DFI | AA |Rsvd | RD |Area | ID |Sel |
|
||||||
|
* |-----|--------|-----|----|-----|----|-----|----|----|
|
||||||
|
* octets | 1 | 2 | 1 | 3 | 2 | 2 | 2 | 6 | 1 |
|
||||||
|
* |-----|--------|-----|----|-----|----|-----|----|----|
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_RR
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_RR_NSAP extends Net_DNS2_RR
|
||||||
|
{
|
||||||
|
public $afi;
|
||||||
|
public $idi;
|
||||||
|
public $dfi;
|
||||||
|
public $aa;
|
||||||
|
public $rsvd;
|
||||||
|
public $rd;
|
||||||
|
public $area;
|
||||||
|
public $id;
|
||||||
|
public $sel;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* method to return the rdata portion of the packet as a string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrToString()
|
||||||
|
{
|
||||||
|
return $this->cleanString($this->afi) . '.' .
|
||||||
|
$this->cleanString($this->idi) . '.' .
|
||||||
|
$this->cleanString($this->dfi) . '.' .
|
||||||
|
$this->cleanString($this->aa) . '.' .
|
||||||
|
$this->cleanString($this->rsvd) . '.' .
|
||||||
|
$this->cleanString($this->rd) . '.' .
|
||||||
|
$this->cleanString($this->area) . '.' .
|
||||||
|
$this->cleanString($this->id) . '.' .
|
||||||
|
$this->sel;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata portion from a standard DNS config line
|
||||||
|
*
|
||||||
|
* @param array $rdata a string split line of values for the rdata
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrFromString(array $rdata)
|
||||||
|
{
|
||||||
|
$data = strtolower(trim(array_shift($rdata)));
|
||||||
|
|
||||||
|
//
|
||||||
|
// there is no real standard for format, so we can't rely on the fact that
|
||||||
|
// the value will come in with periods separating the values- so strip
|
||||||
|
// them out if they're included, and parse without them.
|
||||||
|
//
|
||||||
|
$data = str_replace(array('.', '0x'), '', $data);
|
||||||
|
|
||||||
|
//
|
||||||
|
// unpack it as ascii characters
|
||||||
|
//
|
||||||
|
$x = unpack('A2afi/A4idi/A2dfi/A6aa/A4rsvd/A4rd/A4area/A12id/A2sel', $data);
|
||||||
|
|
||||||
|
//
|
||||||
|
// make sure the afi value is 47
|
||||||
|
//
|
||||||
|
if ($x['afi'] == '47') {
|
||||||
|
|
||||||
|
$this->afi = '0x' . $x['afi'];
|
||||||
|
$this->idi = $x['idi'];
|
||||||
|
$this->dfi = $x['dfi'];
|
||||||
|
$this->aa = $x['aa'];
|
||||||
|
$this->rsvd = $x['rsvd'];
|
||||||
|
$this->rd = $x['rd'];
|
||||||
|
$this->area = $x['area'];
|
||||||
|
$this->id = $x['id'];
|
||||||
|
$this->sel = $x['sel'];
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata of the Net_DNS2_Packet object
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet to parse the RR from
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrSet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if ($this->rdlength == 20) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// get the AFI value
|
||||||
|
//
|
||||||
|
$this->afi = dechex(ord($this->rdata[0]));
|
||||||
|
|
||||||
|
//
|
||||||
|
// we only support AFI 47- there arent' any others defined.
|
||||||
|
//
|
||||||
|
if ($this->afi == '47') {
|
||||||
|
|
||||||
|
//
|
||||||
|
// unpack the rest of the values
|
||||||
|
//
|
||||||
|
$x = unpack(
|
||||||
|
'Cafi/nidi/Cdfi/C3aa/nrsvd/nrd/narea/Nidh/nidl/Csel',
|
||||||
|
$this->rdata
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->afi = sprintf('0x%02x', $x['afi']);
|
||||||
|
$this->idi = sprintf('%04x', $x['idi']);
|
||||||
|
$this->dfi = sprintf('%02x', $x['dfi']);
|
||||||
|
$this->aa = sprintf(
|
||||||
|
'%06x', $x['aa1'] << 16 | $x['aa2'] << 8 | $x['aa3']
|
||||||
|
);
|
||||||
|
$this->rsvd = sprintf('%04x', $x['rsvd']);
|
||||||
|
$this->rd = sprintf('%04x', $x['rd']);
|
||||||
|
$this->area = sprintf('%04x', $x['area']);
|
||||||
|
$this->id = sprintf('%08x', $x['idh']) .
|
||||||
|
sprintf('%04x', $x['idl']);
|
||||||
|
$this->sel = sprintf('%02x', $x['sel']);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns the rdata portion of the DNS packet
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet use for
|
||||||
|
* compressed names
|
||||||
|
*
|
||||||
|
* @return mixed either returns a binary packed
|
||||||
|
* string or null on failure
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrGet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if ($this->afi == '0x47') {
|
||||||
|
|
||||||
|
//
|
||||||
|
// build the aa field
|
||||||
|
//
|
||||||
|
$aa = unpack('A2x/A2y/A2z', $this->aa);
|
||||||
|
|
||||||
|
//
|
||||||
|
// build the id field
|
||||||
|
//
|
||||||
|
$id = unpack('A8a/A4b', $this->id);
|
||||||
|
|
||||||
|
//
|
||||||
|
$data = pack(
|
||||||
|
'CnCCCCnnnNnC',
|
||||||
|
hexdec($this->afi),
|
||||||
|
hexdec($this->idi),
|
||||||
|
hexdec($this->dfi),
|
||||||
|
hexdec($aa['x']),
|
||||||
|
hexdec($aa['y']),
|
||||||
|
hexdec($aa['z']),
|
||||||
|
hexdec($this->rsvd),
|
||||||
|
hexdec($this->rd),
|
||||||
|
hexdec($this->area),
|
||||||
|
hexdec($id['a']),
|
||||||
|
hexdec($id['b']),
|
||||||
|
hexdec($this->sel)
|
||||||
|
);
|
||||||
|
|
||||||
|
if (strlen($data) == 20) {
|
||||||
|
|
||||||
|
$packet->offset += 20;
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
184
bundled-libs/Net/DNS2/RR/NSEC.php
Normal file
184
bundled-libs/Net/DNS2/RR/NSEC.php
Normal file
@ -0,0 +1,184 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2010 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 0.6.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* NSEC Resource Record - RFC3845 section 2.1
|
||||||
|
*
|
||||||
|
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
* / Next Domain Name /
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
* / List of Type Bit Map(s) /
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_RR
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_RR_NSEC extends Net_DNS2_RR
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* The next owner name
|
||||||
|
*/
|
||||||
|
public $next_domain_name;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* identifies the RRset types that exist at the NSEC RR's owner name.
|
||||||
|
*/
|
||||||
|
public $type_bit_maps = array();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* method to return the rdata portion of the packet as a string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrToString()
|
||||||
|
{
|
||||||
|
$data = $this->cleanString($this->next_domain_name) . '.';
|
||||||
|
|
||||||
|
foreach ($this->type_bit_maps as $rr) {
|
||||||
|
|
||||||
|
$data .= ' ' . $rr;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata portion from a standard DNS config line
|
||||||
|
*
|
||||||
|
* @param array $rdata a string split line of values for the rdata
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrFromString(array $rdata)
|
||||||
|
{
|
||||||
|
$this->next_domain_name = $this->cleanString(array_shift($rdata));
|
||||||
|
$this->type_bit_maps = $rdata;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata of the Net_DNS2_Packet object
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet to parse the RR from
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrSet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if ($this->rdlength > 0) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// expand the next domain name
|
||||||
|
//
|
||||||
|
$offset = $packet->offset;
|
||||||
|
$this->next_domain_name = Net_DNS2_Packet::expand($packet, $offset);
|
||||||
|
|
||||||
|
//
|
||||||
|
// parse out the RR's from the bitmap
|
||||||
|
//
|
||||||
|
$this->type_bit_maps = Net_DNS2_BitMap::bitMapToArray(
|
||||||
|
substr($this->rdata, $offset - $packet->offset)
|
||||||
|
);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns the rdata portion of the DNS packet
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet use for
|
||||||
|
* compressed names
|
||||||
|
*
|
||||||
|
* @return mixed either returns a binary packed
|
||||||
|
* string or null on failure
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrGet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if (strlen($this->next_domain_name) > 0) {
|
||||||
|
|
||||||
|
$data = $packet->compress($this->next_domain_name, $packet->offset);
|
||||||
|
$bitmap = Net_DNS2_BitMap::arrayToBitMap($this->type_bit_maps);
|
||||||
|
|
||||||
|
$packet->offset += strlen($bitmap);
|
||||||
|
|
||||||
|
return $data . $bitmap;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
310
bundled-libs/Net/DNS2/RR/NSEC3.php
Normal file
310
bundled-libs/Net/DNS2/RR/NSEC3.php
Normal file
@ -0,0 +1,310 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2010 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 0.6.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* NSEC3 Resource Record - RFC5155 section 3.2
|
||||||
|
*
|
||||||
|
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
* | Hash Alg. | Flags | Iterations |
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
* | Salt Length | Salt /
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
* | Hash Length | Next Hashed Owner Name /
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
* / Type Bit Maps /
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_RR
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_RR_NSEC3 extends Net_DNS2_RR
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Algorithm to use
|
||||||
|
*/
|
||||||
|
public $algorithm;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* flags
|
||||||
|
*/
|
||||||
|
public $flags;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* defines the number of additional times the hash is performed.
|
||||||
|
*/
|
||||||
|
public $iterations;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* the length of the salt- not displayed
|
||||||
|
*/
|
||||||
|
public $salt_length;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* the salt
|
||||||
|
*/
|
||||||
|
public $salt;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* the length of the hash value
|
||||||
|
*/
|
||||||
|
public $hash_length;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* the hashed value of the owner name
|
||||||
|
*/
|
||||||
|
public $hashed_owner_name;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* array of RR type names
|
||||||
|
*/
|
||||||
|
public $type_bit_maps = array();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* method to return the rdata portion of the packet as a string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrToString()
|
||||||
|
{
|
||||||
|
$out = $this->algorithm . ' ' . $this->flags . ' ' . $this->iterations . ' ';
|
||||||
|
|
||||||
|
//
|
||||||
|
// per RFC5155, the salt_length value isn't displayed, and if the salt
|
||||||
|
// is empty, the salt is displayed as '-'
|
||||||
|
//
|
||||||
|
if ($this->salt_length > 0) {
|
||||||
|
|
||||||
|
$out .= $this->salt;
|
||||||
|
} else {
|
||||||
|
|
||||||
|
$out .= '-';
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// per RFC5255 the hash length isn't shown
|
||||||
|
//
|
||||||
|
$out .= ' ' . $this->hashed_owner_name;
|
||||||
|
|
||||||
|
//
|
||||||
|
// show the RR's
|
||||||
|
//
|
||||||
|
foreach ($this->type_bit_maps as $rr) {
|
||||||
|
|
||||||
|
$out .= ' ' . strtoupper($rr);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $out;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata portion from a standard DNS config line
|
||||||
|
*
|
||||||
|
* @param array $rdata a string split line of values for the rdata
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrFromString(array $rdata)
|
||||||
|
{
|
||||||
|
$this->algorithm = array_shift($rdata);
|
||||||
|
$this->flags = array_shift($rdata);
|
||||||
|
$this->iterations = array_shift($rdata);
|
||||||
|
|
||||||
|
//
|
||||||
|
// an empty salt is represented as '-' per RFC5155 section 3.3
|
||||||
|
//
|
||||||
|
$salt = array_shift($rdata);
|
||||||
|
if ($salt == '-') {
|
||||||
|
|
||||||
|
$this->salt_length = 0;
|
||||||
|
$this->salt = '';
|
||||||
|
} else {
|
||||||
|
|
||||||
|
$this->salt_length = strlen(pack('H*', $salt));
|
||||||
|
$this->salt = strtoupper($salt);
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->hashed_owner_name = array_shift($rdata);
|
||||||
|
$this->hash_length = strlen(base64_decode($this->hashed_owner_name));
|
||||||
|
|
||||||
|
$this->type_bit_maps = $rdata;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata of the Net_DNS2_Packet object
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet to parse the RR from
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrSet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if ($this->rdlength > 0) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// unpack the first values
|
||||||
|
//
|
||||||
|
$x = unpack('Calgorithm/Cflags/niterations/Csalt_length', $this->rdata);
|
||||||
|
|
||||||
|
$this->algorithm = $x['algorithm'];
|
||||||
|
$this->flags = $x['flags'];
|
||||||
|
$this->iterations = $x['iterations'];
|
||||||
|
$this->salt_length = $x['salt_length'];
|
||||||
|
|
||||||
|
$offset = 5;
|
||||||
|
|
||||||
|
if ($this->salt_length > 0) {
|
||||||
|
|
||||||
|
$x = unpack('H*', substr($this->rdata, $offset, $this->salt_length));
|
||||||
|
$this->salt = strtoupper($x[1]);
|
||||||
|
$offset += $this->salt_length;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// unpack the hash length
|
||||||
|
//
|
||||||
|
$x = unpack('@' . $offset . '/Chash_length', $this->rdata);
|
||||||
|
$offset++;
|
||||||
|
|
||||||
|
//
|
||||||
|
// copy out the hash
|
||||||
|
//
|
||||||
|
$this->hash_length = $x['hash_length'];
|
||||||
|
if ($this->hash_length > 0) {
|
||||||
|
|
||||||
|
$this->hashed_owner_name = base64_encode(
|
||||||
|
substr($this->rdata, $offset, $this->hash_length)
|
||||||
|
);
|
||||||
|
$offset += $this->hash_length;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// parse out the RR bitmap
|
||||||
|
//
|
||||||
|
$this->type_bit_maps = Net_DNS2_BitMap::bitMapToArray(
|
||||||
|
substr($this->rdata, $offset)
|
||||||
|
);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns the rdata portion of the DNS packet
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet use for
|
||||||
|
* compressed names
|
||||||
|
*
|
||||||
|
* @return mixed either returns a binary packed
|
||||||
|
* string or null on failure
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrGet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// pull the salt and build the length
|
||||||
|
//
|
||||||
|
$salt = pack('H*', $this->salt);
|
||||||
|
$this->salt_length = strlen($salt);
|
||||||
|
|
||||||
|
//
|
||||||
|
// pack the algorithm, flags, iterations and salt length
|
||||||
|
//
|
||||||
|
$data = pack(
|
||||||
|
'CCnC',
|
||||||
|
$this->algorithm, $this->flags, $this->iterations, $this->salt_length
|
||||||
|
);
|
||||||
|
$data .= $salt;
|
||||||
|
|
||||||
|
//
|
||||||
|
// add the hash length and hash
|
||||||
|
//
|
||||||
|
$data .= chr($this->hash_length);
|
||||||
|
if ($this->hash_length > 0) {
|
||||||
|
|
||||||
|
$data .= base64_decode($this->hashed_owner_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// conver the array of RR names to a type bitmap
|
||||||
|
//
|
||||||
|
$data .= Net_DNS2_BitMap::arrayToBitMap($this->type_bit_maps);
|
||||||
|
|
||||||
|
$packet->offset += strlen($data);
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
220
bundled-libs/Net/DNS2/RR/NSEC3PARAM.php
Normal file
220
bundled-libs/Net/DNS2/RR/NSEC3PARAM.php
Normal file
@ -0,0 +1,220 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2010 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 0.6.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* NSEC3PARAM Resource Record - RFC5155 section 4.2
|
||||||
|
*
|
||||||
|
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
* | Hash Alg. | Flags | Iterations |
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
* | Salt Length | Salt /
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_RR
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_RR_NSEC3PARAM extends Net_DNS2_RR
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Algorithm to use
|
||||||
|
*
|
||||||
|
* TODO: same as the NSEC3
|
||||||
|
*/
|
||||||
|
public $algorithm;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* flags
|
||||||
|
*/
|
||||||
|
public $flags;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* defines the number of additional times the hash is performed.
|
||||||
|
*/
|
||||||
|
public $iterations;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* the length of the salt- not displayed
|
||||||
|
*/
|
||||||
|
public $salt_length;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* the salt
|
||||||
|
*/
|
||||||
|
public $salt;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* method to return the rdata portion of the packet as a string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrToString()
|
||||||
|
{
|
||||||
|
$out = $this->algorithm . ' ' . $this->flags . ' ' . $this->iterations . ' ';
|
||||||
|
|
||||||
|
//
|
||||||
|
// per RFC5155, the salt_length value isn't displayed, and if the salt
|
||||||
|
// is empty, the salt is displayed as "-"
|
||||||
|
//
|
||||||
|
if ($this->salt_length > 0) {
|
||||||
|
|
||||||
|
$out .= $this->salt;
|
||||||
|
} else {
|
||||||
|
|
||||||
|
$out .= '-';
|
||||||
|
}
|
||||||
|
|
||||||
|
return $out;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata portion from a standard DNS config line
|
||||||
|
*
|
||||||
|
* @param array $rdata a string split line of values for the rdata
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrFromString(array $rdata)
|
||||||
|
{
|
||||||
|
$this->algorithm = array_shift($rdata);
|
||||||
|
$this->flags = array_shift($rdata);
|
||||||
|
$this->iterations = array_shift($rdata);
|
||||||
|
|
||||||
|
$salt = array_shift($rdata);
|
||||||
|
if ($salt == '-') {
|
||||||
|
|
||||||
|
$this->salt_length = 0;
|
||||||
|
$this->salt = '';
|
||||||
|
} else {
|
||||||
|
|
||||||
|
$this->salt_length = strlen(pack('H*', $salt));
|
||||||
|
$this->salt = strtoupper($salt);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata of the Net_DNS2_Packet object
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet to parse the RR from
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrSet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if ($this->rdlength > 0) {
|
||||||
|
|
||||||
|
$x = unpack('Calgorithm/Cflags/niterations/Csalt_length', $this->rdata);
|
||||||
|
|
||||||
|
$this->algorithm = $x['algorithm'];
|
||||||
|
$this->flags = $x['flags'];
|
||||||
|
$this->iterations = $x['iterations'];
|
||||||
|
$this->salt_length = $x['salt_length'];
|
||||||
|
|
||||||
|
if ($this->salt_length > 0) {
|
||||||
|
|
||||||
|
$x = unpack('H*', substr($this->rdata, 5, $this->salt_length));
|
||||||
|
$this->salt = strtoupper($x[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns the rdata portion of the DNS packet
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet use for
|
||||||
|
* compressed names
|
||||||
|
*
|
||||||
|
* @return mixed either returns a binary packed
|
||||||
|
* string or null on failure
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrGet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
$salt = pack('H*', $this->salt);
|
||||||
|
$this->salt_length = strlen($salt);
|
||||||
|
|
||||||
|
$data = pack(
|
||||||
|
'CCnC',
|
||||||
|
$this->algorithm, $this->flags, $this->iterations, $this->salt_length
|
||||||
|
) . $salt;
|
||||||
|
|
||||||
|
$packet->offset += strlen($data);
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
159
bundled-libs/Net/DNS2/RR/OPENPGPKEY.php
Normal file
159
bundled-libs/Net/DNS2/RR/OPENPGPKEY.php
Normal file
@ -0,0 +1,159 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2014, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2014 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 1.4.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* OPENPGPKEY Resource Record - https://tools.ietf.org/html/draft-ietf-dane-openpgpkey-01
|
||||||
|
*
|
||||||
|
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
* / /
|
||||||
|
* / OpenPGP Public KeyRing /
|
||||||
|
* / /
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_RR
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_RR_OPENPGPKEY extends Net_DNS2_RR
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* the public key
|
||||||
|
*/
|
||||||
|
public $key;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* method to return the rdata portion of the packet as a string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrToString()
|
||||||
|
{
|
||||||
|
return $this->key;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata portion from a standard DNS config line
|
||||||
|
*
|
||||||
|
* @param array $rdata a string split line of values for the rdata
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrFromString(array $rdata)
|
||||||
|
{
|
||||||
|
$this->key = array_shift($rdata);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata of the Net_DNS2_Packet object
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet to parse the RR from
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrSet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if ($this->rdlength > 0) {
|
||||||
|
|
||||||
|
$this->key = base64_encode(substr($this->rdata, 0, $this->rdlength));
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns the rdata portion of the DNS packet
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet use for
|
||||||
|
* compressed names
|
||||||
|
*
|
||||||
|
* @return mixed either returns a binary packed
|
||||||
|
* string or null on failure
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrGet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if (strlen($this->key) > 0) {
|
||||||
|
|
||||||
|
$data = base64_decode($this->key);
|
||||||
|
|
||||||
|
$packet->offset += strlen($data);
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
292
bundled-libs/Net/DNS2/RR/OPT.php
Normal file
292
bundled-libs/Net/DNS2/RR/OPT.php
Normal file
@ -0,0 +1,292 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2010 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 1.0.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* OPT Resource Record - RFC2929 section 3.1
|
||||||
|
*
|
||||||
|
* +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|
||||||
|
* | OPTION-CODE |
|
||||||
|
* +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|
||||||
|
* | OPTION-LENGTH |
|
||||||
|
* +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|
||||||
|
* | |
|
||||||
|
* / OPTION-DATA /
|
||||||
|
* / /
|
||||||
|
* +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_RR
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_RR_OPT extends Net_DNS2_RR
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* option code - assigned by IANA
|
||||||
|
*/
|
||||||
|
public $option_code;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* the length of the option data
|
||||||
|
*/
|
||||||
|
public $option_length;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* the option data
|
||||||
|
*/
|
||||||
|
public $option_data;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* the extended response code stored in the TTL
|
||||||
|
*/
|
||||||
|
public $extended_rcode;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* the implementation level
|
||||||
|
*/
|
||||||
|
public $version;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* the DO bit used for DNSSEC - RFC3225
|
||||||
|
*/
|
||||||
|
public $do;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* the extended flags
|
||||||
|
*/
|
||||||
|
public $z;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor - builds a new Net_DNS2_RR_OPT object; normally you wouldn't call
|
||||||
|
* this directly, but OPT RR's are a little different
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet or null to create
|
||||||
|
* an empty object
|
||||||
|
* @param array $rr an array with RR parse values or null to
|
||||||
|
* create an empty object
|
||||||
|
*
|
||||||
|
* @throws Net_DNS2_Exception
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function __construct(Net_DNS2_Packet &$packet = null, array $rr = null)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// this is for when we're manually building an OPT RR object; we aren't
|
||||||
|
// passing in binary data to parse, we just want a clean/empty object.
|
||||||
|
//
|
||||||
|
$this->type = 'OPT';
|
||||||
|
$this->rdlength = 0;
|
||||||
|
|
||||||
|
$this->option_length = 0;
|
||||||
|
$this->extended_rcode = 0;
|
||||||
|
$this->version = 0;
|
||||||
|
$this->do = 0;
|
||||||
|
$this->z = 0;
|
||||||
|
|
||||||
|
//
|
||||||
|
// everthing else gets passed through to the parent.
|
||||||
|
//
|
||||||
|
if ( (!is_null($packet)) && (!is_null($rr)) ) {
|
||||||
|
|
||||||
|
parent::__construct($packet, $rr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* method to return the rdata portion of the packet as a string. There is no
|
||||||
|
* defintion for returning an OPT RR by string- this is just here to validate
|
||||||
|
* the binary parsing / building routines.
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrToString()
|
||||||
|
{
|
||||||
|
return $this->option_code . ' ' . $this->option_data;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata portion from a standard DNS config line. There is no
|
||||||
|
* definition for parsing a OPT RR by string- this is just here to validate
|
||||||
|
* the binary parsing / building routines.
|
||||||
|
*
|
||||||
|
* @param array $rdata a string split line of values for the rdata
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrFromString(array $rdata)
|
||||||
|
{
|
||||||
|
$this->option_code = array_shift($rdata);
|
||||||
|
$this->option_data = array_shift($rdata);
|
||||||
|
$this->option_length = strlen($this->option_data);
|
||||||
|
|
||||||
|
$x = unpack('Cextended/Cversion/Cdo/Cz', pack('N', $this->ttl));
|
||||||
|
|
||||||
|
$this->extended_rcode = $x['extended'];
|
||||||
|
$this->version = $x['version'];
|
||||||
|
$this->do = ($x['do'] >> 7);
|
||||||
|
$this->z = $x['z'];
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata of the Net_DNS2_Packet object
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet to parse the RR from
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrSet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// parse out the TTL value
|
||||||
|
//
|
||||||
|
$x = unpack('Cextended/Cversion/Cdo/Cz', pack('N', $this->ttl));
|
||||||
|
|
||||||
|
$this->extended_rcode = $x['extended'];
|
||||||
|
$this->version = $x['version'];
|
||||||
|
$this->do = ($x['do'] >> 7);
|
||||||
|
$this->z = $x['z'];
|
||||||
|
|
||||||
|
//
|
||||||
|
// parse the data, if there is any
|
||||||
|
//
|
||||||
|
if ($this->rdlength > 0) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// unpack the code and length
|
||||||
|
//
|
||||||
|
$x = unpack('noption_code/noption_length', $this->rdata);
|
||||||
|
|
||||||
|
$this->option_code = $x['option_code'];
|
||||||
|
$this->option_length = $x['option_length'];
|
||||||
|
|
||||||
|
//
|
||||||
|
// copy out the data based on the length
|
||||||
|
//
|
||||||
|
$this->option_data = substr($this->rdata, 4);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* pre-builds the TTL value for this record; we needed to separate this out
|
||||||
|
* from the rrGet() function, as the logic in the Net_DNS2_RR packs the TTL
|
||||||
|
* value before it builds the rdata value.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function preBuild()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// build the TTL value based on the local values
|
||||||
|
//
|
||||||
|
$ttl = unpack(
|
||||||
|
'N',
|
||||||
|
pack('CCCC', $this->extended_rcode, $this->version, ($this->do << 7), 0)
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->ttl = $ttl[1];
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns the rdata portion of the DNS packet
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet use for
|
||||||
|
* compressed names
|
||||||
|
*
|
||||||
|
* @return mixed either returns a binary packed
|
||||||
|
* string or null on failure
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrGet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// if there is an option code, then pack that data too
|
||||||
|
//
|
||||||
|
if ($this->option_code) {
|
||||||
|
|
||||||
|
$data = pack('nn', $this->option_code, $this->option_length) .
|
||||||
|
$this->option_data;
|
||||||
|
|
||||||
|
$packet->offset += strlen($data);
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
152
bundled-libs/Net/DNS2/RR/PTR.php
Normal file
152
bundled-libs/Net/DNS2/RR/PTR.php
Normal file
@ -0,0 +1,152 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2010 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 0.6.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* PTR Resource Record - RFC1035 section 3.3.12
|
||||||
|
*
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* / PTRDNAME /
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_RR
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_RR_PTR extends Net_DNS2_RR
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* the hostname of the PTR entry
|
||||||
|
*/
|
||||||
|
public $ptrdname;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* method to return the rdata portion of the packet as a string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrToString()
|
||||||
|
{
|
||||||
|
return rtrim($this->ptrdname, '.') . '.';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata portion from a standard DNS config line
|
||||||
|
*
|
||||||
|
* @param array $rdata a string split line of values for the rdata
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrFromString(array $rdata)
|
||||||
|
{
|
||||||
|
$this->ptrdname = rtrim(implode(' ', $rdata), '.');
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata of the Net_DNS2_Packet object
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet to parse the RR from
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrSet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if ($this->rdlength > 0) {
|
||||||
|
|
||||||
|
$offset = $packet->offset;
|
||||||
|
$this->ptrdname = Net_DNS2_Packet::expand($packet, $offset);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns the rdata portion of the DNS packet
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet use for
|
||||||
|
* compressed names
|
||||||
|
*
|
||||||
|
* @return mixed either returns a binary packed
|
||||||
|
* string or null on failure
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrGet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if (strlen($this->ptrdname) > 0) {
|
||||||
|
|
||||||
|
return $packet->compress($this->ptrdname, $packet->offset);
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
186
bundled-libs/Net/DNS2/RR/PX.php
Normal file
186
bundled-libs/Net/DNS2/RR/PX.php
Normal file
@ -0,0 +1,186 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2010 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 0.6.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* PX Resource Record - RFC2163 section 4
|
||||||
|
*
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* | PREFERENCE |
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* / MAP822 /
|
||||||
|
* / /
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* / MAPX400 /
|
||||||
|
* / /
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_RR
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_RR_PX extends Net_DNS2_RR
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* preference
|
||||||
|
*/
|
||||||
|
public $preference;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* the RFC822 part of the MCGAM
|
||||||
|
*/
|
||||||
|
public $map822;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* the X.400 part of the MCGAM
|
||||||
|
*/
|
||||||
|
public $mapx400;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* method to return the rdata portion of the packet as a string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrToString()
|
||||||
|
{
|
||||||
|
return $this->preference . ' ' . $this->cleanString($this->map822) . '. ' .
|
||||||
|
$this->cleanString($this->mapx400) . '.';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata portion from a standard DNS config line
|
||||||
|
*
|
||||||
|
* @param array $rdata a string split line of values for the rdata
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrFromString(array $rdata)
|
||||||
|
{
|
||||||
|
$this->preference = $rdata[0];
|
||||||
|
$this->map822 = $this->cleanString($rdata[1]);
|
||||||
|
$this->mapx400 = $this->cleanString($rdata[2]);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata of the Net_DNS2_Packet object
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet to parse the RR from
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrSet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if ($this->rdlength > 0) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// parse the preference
|
||||||
|
//
|
||||||
|
$x = unpack('npreference', $this->rdata);
|
||||||
|
$this->preference = $x['preference'];
|
||||||
|
|
||||||
|
$offset = $packet->offset + 2;
|
||||||
|
|
||||||
|
$this->map822 = Net_DNS2_Packet::expand($packet, $offset);
|
||||||
|
$this->mapx400 = Net_DNS2_Packet::expand($packet, $offset);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns the rdata portion of the DNS packet
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet use for
|
||||||
|
* compressed names
|
||||||
|
*
|
||||||
|
* @return mixed either returns a binary packed
|
||||||
|
* string or null on failure
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrGet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if (strlen($this->map822) > 0) {
|
||||||
|
|
||||||
|
$data = pack('n', $this->preference);
|
||||||
|
$packet->offset += 2;
|
||||||
|
|
||||||
|
$data .= $packet->compress($this->map822, $packet->offset);
|
||||||
|
$data .= $packet->compress($this->mapx400, $packet->offset);
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
167
bundled-libs/Net/DNS2/RR/RP.php
Normal file
167
bundled-libs/Net/DNS2/RR/RP.php
Normal file
@ -0,0 +1,167 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2010 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 0.6.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* RP Resource Record - RFC1183 section 2.2
|
||||||
|
*
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* / mboxdname /
|
||||||
|
* / /
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* / txtdname /
|
||||||
|
* / /
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_RR
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_RR_RP extends Net_DNS2_RR
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* mailbox for the responsible person
|
||||||
|
*/
|
||||||
|
public $mboxdname;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* is a domain name for which TXT RR's exists
|
||||||
|
*/
|
||||||
|
public $txtdname;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* method to return the rdata portion of the packet as a string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrToString()
|
||||||
|
{
|
||||||
|
return $this->cleanString($this->mboxdname) . '. ' .
|
||||||
|
$this->cleanString($this->txtdname) . '.';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata portion from a standard DNS config line
|
||||||
|
*
|
||||||
|
* @param array $rdata a string split line of values for the rdata
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrFromString(array $rdata)
|
||||||
|
{
|
||||||
|
$this->mboxdname = $this->cleanString($rdata[0]);
|
||||||
|
$this->txtdname = $this->cleanString($rdata[1]);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata of the Net_DNS2_Packet object
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet to parse the RR from
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrSet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if ($this->rdlength > 0) {
|
||||||
|
|
||||||
|
$offset = $packet->offset;
|
||||||
|
|
||||||
|
$this->mboxdname = Net_DNS2_Packet::expand($packet, $offset);
|
||||||
|
$this->txtdname = Net_DNS2_Packet::expand($packet, $offset);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns the rdata portion of the DNS packet
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet use for
|
||||||
|
* compressed names
|
||||||
|
*
|
||||||
|
* @return mixed either returns a binary packed
|
||||||
|
* string or null on failure
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrGet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if (strlen($this->mboxdname) > 0) {
|
||||||
|
|
||||||
|
return $packet->compress($this->mboxdname, $packet->offset) .
|
||||||
|
$packet->compress($this->txtdname, $packet->offset);
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
329
bundled-libs/Net/DNS2/RR/RRSIG.php
Normal file
329
bundled-libs/Net/DNS2/RR/RRSIG.php
Normal file
@ -0,0 +1,329 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2010 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 0.6.0
|
||||||
|
*
|
||||||
|
* This file contains code based off the Net::DNS::SEC Perl module by
|
||||||
|
* Olaf M. Kolkman
|
||||||
|
*
|
||||||
|
* This is the copyright notice from the PERL Net::DNS::SEC module:
|
||||||
|
*
|
||||||
|
* Copyright (c) 2001 - 2005 RIPE NCC. Author Olaf M. Kolkman
|
||||||
|
* Copyright (c) 2007 - 2008 NLnet Labs. Author Olaf M. Kolkman
|
||||||
|
* <olaf@net-dns.org>
|
||||||
|
*
|
||||||
|
* All Rights Reserved
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this software and its
|
||||||
|
* documentation for any purpose and without fee is hereby granted,
|
||||||
|
* provided that the above copyright notice appear in all copies and that
|
||||||
|
* both that copyright notice and this permission notice appear in
|
||||||
|
* supporting documentation, and that the name of the author not be
|
||||||
|
* used in advertising or publicity pertaining to distribution of the
|
||||||
|
* software without specific, written prior permission.
|
||||||
|
*
|
||||||
|
* THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
|
||||||
|
* ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL
|
||||||
|
* AUTHOR BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY
|
||||||
|
* DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
|
||||||
|
* AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
|
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* RRSIG Resource Record - RFC4034 sction 3.1
|
||||||
|
*
|
||||||
|
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
* | Type Covered | Algorithm | Labels |
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
* | Original TTL |
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
* | Signature Expiration |
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
* | Signature Inception |
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
* | Key Tag | /
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Signer's Name /
|
||||||
|
* / /
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
* / /
|
||||||
|
* / Signature /
|
||||||
|
* / /
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_RR
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_RR_RRSIG extends Net_DNS2_RR
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* the RR type covered by this signature
|
||||||
|
*/
|
||||||
|
public $typecovered;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* the algorithm used for the signature
|
||||||
|
*/
|
||||||
|
public $algorithm;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* the number of labels in the name
|
||||||
|
*/
|
||||||
|
public $labels;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* the original TTL
|
||||||
|
*/
|
||||||
|
public $origttl;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* the signature expiration
|
||||||
|
*/
|
||||||
|
public $sigexp;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* the inception of the signature
|
||||||
|
*/
|
||||||
|
public $sigincep;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* the keytag used
|
||||||
|
*/
|
||||||
|
public $keytag;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* the signer's name
|
||||||
|
*/
|
||||||
|
public $signname;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* the signature
|
||||||
|
*/
|
||||||
|
public $signature;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* method to return the rdata portion of the packet as a string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrToString()
|
||||||
|
{
|
||||||
|
return $this->typecovered . ' ' . $this->algorithm . ' ' .
|
||||||
|
$this->labels . ' ' . $this->origttl . ' ' .
|
||||||
|
$this->sigexp . ' ' . $this->sigincep . ' ' .
|
||||||
|
$this->keytag . ' ' . $this->cleanString($this->signname) . '. ' .
|
||||||
|
$this->signature;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata portion from a standard DNS config line
|
||||||
|
*
|
||||||
|
* @param array $rdata a string split line of values for the rdata
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrFromString(array $rdata)
|
||||||
|
{
|
||||||
|
$this->typecovered = strtoupper(array_shift($rdata));
|
||||||
|
$this->algorithm = array_shift($rdata);
|
||||||
|
$this->labels = array_shift($rdata);
|
||||||
|
$this->origttl = array_shift($rdata);
|
||||||
|
$this->sigexp = array_shift($rdata);
|
||||||
|
$this->sigincep = array_shift($rdata);
|
||||||
|
$this->keytag = array_shift($rdata);
|
||||||
|
$this->signname = $this->cleanString(array_shift($rdata));
|
||||||
|
|
||||||
|
foreach ($rdata as $line) {
|
||||||
|
|
||||||
|
$this->signature .= $line;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->signature = trim($this->signature);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata of the Net_DNS2_Packet object
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet to parse the RR from
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrSet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if ($this->rdlength > 0) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// unpack
|
||||||
|
//
|
||||||
|
$x = unpack(
|
||||||
|
'ntc/Calgorithm/Clabels/Norigttl/Nsigexp/Nsigincep/nkeytag',
|
||||||
|
$this->rdata
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->typecovered = Net_DNS2_Lookups::$rr_types_by_id[$x['tc']];
|
||||||
|
$this->algorithm = $x['algorithm'];
|
||||||
|
$this->labels = $x['labels'];
|
||||||
|
$this->origttl = Net_DNS2::expandUint32($x['origttl']);
|
||||||
|
|
||||||
|
//
|
||||||
|
// the dates are in GM time
|
||||||
|
//
|
||||||
|
$this->sigexp = gmdate('YmdHis', $x['sigexp']);
|
||||||
|
$this->sigincep = gmdate('YmdHis', $x['sigincep']);
|
||||||
|
|
||||||
|
//
|
||||||
|
// get the keytag
|
||||||
|
//
|
||||||
|
$this->keytag = $x['keytag'];
|
||||||
|
|
||||||
|
//
|
||||||
|
// get teh signers name and signature
|
||||||
|
//
|
||||||
|
$offset = $packet->offset + 18;
|
||||||
|
$sigoffset = $offset;
|
||||||
|
|
||||||
|
$this->signname = strtolower(
|
||||||
|
Net_DNS2_Packet::expand($packet, $sigoffset)
|
||||||
|
);
|
||||||
|
$this->signature = base64_encode(
|
||||||
|
substr($this->rdata, 18 + ($sigoffset - $offset))
|
||||||
|
);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns the rdata portion of the DNS packet
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet use for
|
||||||
|
* compressed names
|
||||||
|
*
|
||||||
|
* @return mixed either returns a binary packed
|
||||||
|
* string or null on failure
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrGet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if (strlen($this->signature) > 0) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// parse the values out of the dates
|
||||||
|
//
|
||||||
|
preg_match(
|
||||||
|
'/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/', $this->sigexp, $e
|
||||||
|
);
|
||||||
|
preg_match(
|
||||||
|
'/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/', $this->sigincep, $i
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
// pack the value
|
||||||
|
//
|
||||||
|
$data = pack(
|
||||||
|
'nCCNNNn',
|
||||||
|
Net_DNS2_Lookups::$rr_types_by_name[$this->typecovered],
|
||||||
|
$this->algorithm,
|
||||||
|
$this->labels,
|
||||||
|
$this->origttl,
|
||||||
|
gmmktime($e[4], $e[5], $e[6], $e[2], $e[3], $e[1]),
|
||||||
|
gmmktime($i[4], $i[5], $i[6], $i[2], $i[3], $i[1]),
|
||||||
|
$this->keytag
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
// the signer name is special; it's not allowed to be compressed
|
||||||
|
// (see section 3.1.7)
|
||||||
|
//
|
||||||
|
$names = explode('.', strtolower($this->signname));
|
||||||
|
foreach ($names as $name) {
|
||||||
|
|
||||||
|
$data .= chr(strlen($name));
|
||||||
|
$data .= $name;
|
||||||
|
}
|
||||||
|
$data .= "\0";
|
||||||
|
|
||||||
|
//
|
||||||
|
// add the signature
|
||||||
|
//
|
||||||
|
$data .= base64_decode($this->signature);
|
||||||
|
|
||||||
|
$packet->offset += strlen($data);
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
175
bundled-libs/Net/DNS2/RR/RT.php
Normal file
175
bundled-libs/Net/DNS2/RR/RT.php
Normal file
@ -0,0 +1,175 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2010 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 0.6.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* RT Resource Record - RFC1183 section 3.3
|
||||||
|
*
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* | preference |
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* / intermediate-host /
|
||||||
|
* / /
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_RR
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_RR_RT extends Net_DNS2_RR
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* the preference of this route
|
||||||
|
*/
|
||||||
|
public $preference;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* host which will servce as an intermediate in reaching the owner host
|
||||||
|
*/
|
||||||
|
public $intermediatehost;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* method to return the rdata portion of the packet as a string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrToString()
|
||||||
|
{
|
||||||
|
return $this->preference . ' ' .
|
||||||
|
$this->cleanString($this->intermediatehost) . '.';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata portion from a standard DNS config line
|
||||||
|
*
|
||||||
|
* @param array $rdata a string split line of values for the rdata
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrFromString(array $rdata)
|
||||||
|
{
|
||||||
|
$this->preference = $rdata[0];
|
||||||
|
$this->intermediatehost = $this->cleanString($rdata[1]);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata of the Net_DNS2_Packet object
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet to parse the RR from
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrSet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if ($this->rdlength > 0) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// unpack the preference
|
||||||
|
//
|
||||||
|
$x = unpack('npreference', $this->rdata);
|
||||||
|
|
||||||
|
$this->preference = $x['preference'];
|
||||||
|
$offset = $packet->offset + 2;
|
||||||
|
|
||||||
|
$this->intermediatehost = Net_DNS2_Packet::expand($packet, $offset);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns the rdata portion of the DNS packet
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet use for
|
||||||
|
* compressed names
|
||||||
|
*
|
||||||
|
* @return mixed either returns a binary packed
|
||||||
|
* string or null on failure
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrGet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if (strlen($this->intermediatehost) > 0) {
|
||||||
|
|
||||||
|
$data = pack('n', $this->preference);
|
||||||
|
$packet->offset += 2;
|
||||||
|
|
||||||
|
$data .= $packet->compress($this->intermediatehost, $packet->offset);
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
459
bundled-libs/Net/DNS2/RR/SIG.php
Normal file
459
bundled-libs/Net/DNS2/RR/SIG.php
Normal file
@ -0,0 +1,459 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2010 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 0.6.0
|
||||||
|
*
|
||||||
|
* This file contains code based off the Net::DNS::SEC Perl module by
|
||||||
|
* Olaf M. Kolkman
|
||||||
|
*
|
||||||
|
* This is the copyright notice from the PERL Net::DNS::SEC module:
|
||||||
|
*
|
||||||
|
* Copyright (c) 2001 - 2005 RIPE NCC. Author Olaf M. Kolkman
|
||||||
|
* Copyright (c) 2007 - 2008 NLnet Labs. Author Olaf M. Kolkman
|
||||||
|
* <olaf@net-dns.org>
|
||||||
|
*
|
||||||
|
* All Rights Reserved
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this software and its
|
||||||
|
* documentation for any purpose and without fee is hereby granted,
|
||||||
|
* provided that the above copyright notice appear in all copies and that
|
||||||
|
* both that copyright notice and this permission notice appear in
|
||||||
|
* supporting documentation, and that the name of the author not be
|
||||||
|
* used in advertising or publicity pertaining to distribution of the
|
||||||
|
* software without specific, written prior permission.
|
||||||
|
*
|
||||||
|
* THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
|
||||||
|
* ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL
|
||||||
|
* AUTHOR BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY
|
||||||
|
* DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
|
||||||
|
* AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
|
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SIG Resource Record - RFC2535 section 4.1
|
||||||
|
*
|
||||||
|
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
* | Type Covered | Algorithm | Labels |
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
* | Original TTL |
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
* | Signature Expiration |
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
* | Signature Inception |
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
* | Key Tag | /
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Signer's Name /
|
||||||
|
* / /
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
* / /
|
||||||
|
* / Signature /
|
||||||
|
* / /
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_RR
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_RR_SIG extends Net_DNS2_RR
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* and instance of a Net_DNS2_PrivateKey object
|
||||||
|
*/
|
||||||
|
public $private_key = null;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* the RR type covered by this signature
|
||||||
|
*/
|
||||||
|
public $typecovered;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* the algorithm used for the signature
|
||||||
|
*/
|
||||||
|
public $algorithm;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* the number of labels in the name
|
||||||
|
*/
|
||||||
|
public $labels;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* the original TTL
|
||||||
|
*/
|
||||||
|
public $origttl;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* the signature expiration
|
||||||
|
*/
|
||||||
|
public $sigexp;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* the inception of the signature
|
||||||
|
*/
|
||||||
|
public $sigincep;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* the keytag used
|
||||||
|
*/
|
||||||
|
public $keytag;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* the signer's name
|
||||||
|
*/
|
||||||
|
public $signname;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* the signature
|
||||||
|
*/
|
||||||
|
public $signature;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* method to return the rdata portion of the packet as a string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrToString()
|
||||||
|
{
|
||||||
|
return $this->typecovered . ' ' . $this->algorithm . ' ' .
|
||||||
|
$this->labels . ' ' . $this->origttl . ' ' .
|
||||||
|
$this->sigexp . ' ' . $this->sigincep . ' ' .
|
||||||
|
$this->keytag . ' ' . $this->cleanString($this->signname) . '. ' .
|
||||||
|
$this->signature;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata portion from a standard DNS config line
|
||||||
|
*
|
||||||
|
* @param array $rdata a string split line of values for the rdata
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrFromString(array $rdata)
|
||||||
|
{
|
||||||
|
$this->typecovered = strtoupper(array_shift($rdata));
|
||||||
|
$this->algorithm = array_shift($rdata);
|
||||||
|
$this->labels = array_shift($rdata);
|
||||||
|
$this->origttl = array_shift($rdata);
|
||||||
|
$this->sigexp = array_shift($rdata);
|
||||||
|
$this->sigincep = array_shift($rdata);
|
||||||
|
$this->keytag = array_shift($rdata);
|
||||||
|
$this->signname = $this->cleanString(array_shift($rdata));
|
||||||
|
|
||||||
|
foreach ($rdata as $line) {
|
||||||
|
|
||||||
|
$this->signature .= $line;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->signature = trim($this->signature);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata of the Net_DNS2_Packet object
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet to parse the RR from
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrSet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if ($this->rdlength > 0) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// unpack
|
||||||
|
//
|
||||||
|
$x = unpack(
|
||||||
|
'ntc/Calgorithm/Clabels/Norigttl/Nsigexp/Nsigincep/nkeytag',
|
||||||
|
$this->rdata
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->typecovered = Net_DNS2_Lookups::$rr_types_by_id[$x['tc']];
|
||||||
|
$this->algorithm = $x['algorithm'];
|
||||||
|
$this->labels = $x['labels'];
|
||||||
|
$this->origttl = Net_DNS2::expandUint32($x['origttl']);
|
||||||
|
|
||||||
|
//
|
||||||
|
// the dates are in GM time
|
||||||
|
//
|
||||||
|
$this->sigexp = gmdate('YmdHis', $x['sigexp']);
|
||||||
|
$this->sigincep = gmdate('YmdHis', $x['sigincep']);
|
||||||
|
|
||||||
|
//
|
||||||
|
// get the keytag
|
||||||
|
//
|
||||||
|
$this->keytag = $x['keytag'];
|
||||||
|
|
||||||
|
//
|
||||||
|
// get teh signers name and signature
|
||||||
|
//
|
||||||
|
$offset = $packet->offset + 18;
|
||||||
|
$sigoffset = $offset;
|
||||||
|
|
||||||
|
$this->signname = strtolower(
|
||||||
|
Net_DNS2_Packet::expand($packet, $sigoffset)
|
||||||
|
);
|
||||||
|
$this->signature = base64_encode(
|
||||||
|
substr($this->rdata, 18 + ($sigoffset - $offset))
|
||||||
|
);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns the rdata portion of the DNS packet
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet use for
|
||||||
|
* compressed names
|
||||||
|
*
|
||||||
|
* @return mixed either returns a binary packed
|
||||||
|
* string or null on failure
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrGet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// parse the values out of the dates
|
||||||
|
//
|
||||||
|
preg_match(
|
||||||
|
'/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/', $this->sigexp, $e
|
||||||
|
);
|
||||||
|
preg_match(
|
||||||
|
'/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/', $this->sigincep, $i
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
// pack the value
|
||||||
|
//
|
||||||
|
$data = pack(
|
||||||
|
'nCCNNNn',
|
||||||
|
Net_DNS2_Lookups::$rr_types_by_name[$this->typecovered],
|
||||||
|
$this->algorithm,
|
||||||
|
$this->labels,
|
||||||
|
$this->origttl,
|
||||||
|
gmmktime($e[4], $e[5], $e[6], $e[2], $e[3], $e[1]),
|
||||||
|
gmmktime($i[4], $i[5], $i[6], $i[2], $i[3], $i[1]),
|
||||||
|
$this->keytag
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
// the signer name is special; it's not allowed to be compressed
|
||||||
|
// (see section 3.1.7)
|
||||||
|
//
|
||||||
|
$names = explode('.', strtolower($this->signname));
|
||||||
|
foreach ($names as $name) {
|
||||||
|
|
||||||
|
$data .= chr(strlen($name));
|
||||||
|
$data .= $name;
|
||||||
|
}
|
||||||
|
|
||||||
|
$data .= chr('0');
|
||||||
|
|
||||||
|
//
|
||||||
|
// if the signature is empty, and $this->private_key is an instance of a
|
||||||
|
// private key object, and we have access to openssl, then assume this
|
||||||
|
// is a SIG(0), and generate a new signature
|
||||||
|
//
|
||||||
|
if ( (strlen($this->signature) == 0)
|
||||||
|
&& ($this->private_key instanceof Net_DNS2_PrivateKey)
|
||||||
|
&& (extension_loaded('openssl') === true)
|
||||||
|
) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// create a new packet for the signature-
|
||||||
|
//
|
||||||
|
$new_packet = new Net_DNS2_Packet_Request('example.com', 'SOA', 'IN');
|
||||||
|
|
||||||
|
//
|
||||||
|
// copy the packet data over
|
||||||
|
//
|
||||||
|
$new_packet->copy($packet);
|
||||||
|
|
||||||
|
//
|
||||||
|
// remove the SIG object from the additional list
|
||||||
|
//
|
||||||
|
array_pop($new_packet->additional);
|
||||||
|
$new_packet->header->arcount = count($new_packet->additional);
|
||||||
|
|
||||||
|
//
|
||||||
|
// copy out the data
|
||||||
|
//
|
||||||
|
$sigdata = $data . $new_packet->get();
|
||||||
|
|
||||||
|
//
|
||||||
|
// based on the algorithm
|
||||||
|
//
|
||||||
|
$algorithm = 0;
|
||||||
|
|
||||||
|
switch($this->algorithm) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// MD5
|
||||||
|
//
|
||||||
|
case Net_DNS2_Lookups::DNSSEC_ALGORITHM_RSAMD5:
|
||||||
|
|
||||||
|
$algorithm = OPENSSL_ALGO_MD5;
|
||||||
|
break;
|
||||||
|
|
||||||
|
//
|
||||||
|
// SHA1
|
||||||
|
//
|
||||||
|
case Net_DNS2_Lookups::DNSSEC_ALGORITHM_RSASHA1:
|
||||||
|
|
||||||
|
$algorithm = OPENSSL_ALGO_SHA1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
//
|
||||||
|
// SHA256 (PHP 5.4.8 or higher)
|
||||||
|
//
|
||||||
|
case Net_DNS2_Lookups::DNSSEC_ALGORITHM_RSASHA256:
|
||||||
|
|
||||||
|
if (version_compare(PHP_VERSION, '5.4.8', '<') == true) {
|
||||||
|
|
||||||
|
throw new Net_DNS2_Exception(
|
||||||
|
'SHA256 support is only available in PHP >= 5.4.8',
|
||||||
|
Net_DNS2_Lookups::E_OPENSSL_INV_ALGO
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
$algorithm = OPENSSL_ALGO_SHA256;
|
||||||
|
break;
|
||||||
|
|
||||||
|
//
|
||||||
|
// SHA512 (PHP 5.4.8 or higher)
|
||||||
|
//
|
||||||
|
case Net_DNS2_Lookups::DNSSEC_ALGORITHM_RSASHA512:
|
||||||
|
|
||||||
|
if (version_compare(PHP_VERSION, '5.4.8', '<') == true) {
|
||||||
|
|
||||||
|
throw new Net_DNS2_Exception(
|
||||||
|
'SHA512 support is only available in PHP >= 5.4.8',
|
||||||
|
Net_DNS2_Lookups::E_OPENSSL_INV_ALGO
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
$algorithm = OPENSSL_ALGO_SHA512;
|
||||||
|
break;
|
||||||
|
|
||||||
|
//
|
||||||
|
// unsupported at the moment
|
||||||
|
//
|
||||||
|
case Net_DNS2_Lookups::DNSSEC_ALGORITHM_DSA:
|
||||||
|
case Net_DNS2_Lookups::DSNSEC_ALGORITHM_RSASHA1NSEC3SHA1:
|
||||||
|
case Net_DNS2_Lookups::DNSSEC_ALGORITHM_DSANSEC3SHA1:
|
||||||
|
default:
|
||||||
|
throw new Net_DNS2_Exception(
|
||||||
|
'invalid or unsupported algorithm',
|
||||||
|
Net_DNS2_Lookups::E_OPENSSL_INV_ALGO
|
||||||
|
);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// sign the data
|
||||||
|
//
|
||||||
|
if (openssl_sign($sigdata, $this->signature, $this->private_key->instance, $algorithm) == false) {
|
||||||
|
|
||||||
|
throw new Net_DNS2_Exception(
|
||||||
|
openssl_error_string(),
|
||||||
|
Net_DNS2_Lookups::E_OPENSSL_ERROR
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// build the signature value based
|
||||||
|
//
|
||||||
|
switch($this->algorithm) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// RSA- add it directly
|
||||||
|
//
|
||||||
|
case Net_DNS2_Lookups::DNSSEC_ALGORITHM_RSAMD5:
|
||||||
|
case Net_DNS2_Lookups::DNSSEC_ALGORITHM_RSASHA1:
|
||||||
|
case Net_DNS2_Lookups::DNSSEC_ALGORITHM_RSASHA256:
|
||||||
|
case Net_DNS2_Lookups::DNSSEC_ALGORITHM_RSASHA512:
|
||||||
|
|
||||||
|
$this->signature = base64_encode($this->signature);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// add the signature
|
||||||
|
//
|
||||||
|
$data .= base64_decode($this->signature);
|
||||||
|
|
||||||
|
$packet->offset += strlen($data);
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
75
bundled-libs/Net/DNS2/RR/SMIMEA.php
Normal file
75
bundled-libs/Net/DNS2/RR/SMIMEA.php
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2016, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2016 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 1.4.2
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The SMIMEA RR is implemented exactly like the TLSA record, so
|
||||||
|
* for now we just extend the TLSA RR and use it.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_RR
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_RR_SMIMEA extends Net_DNS2_RR_TLSA
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
240
bundled-libs/Net/DNS2/RR/SOA.php
Normal file
240
bundled-libs/Net/DNS2/RR/SOA.php
Normal file
@ -0,0 +1,240 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2010 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 0.6.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SOA Resource Record - RFC1035 section 3.3.13
|
||||||
|
*
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* / MNAME /
|
||||||
|
* / /
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* / RNAME /
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* | SERIAL |
|
||||||
|
* | |
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* | REFRESH |
|
||||||
|
* | |
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* | RETRY |
|
||||||
|
* | |
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* | EXPIRE |
|
||||||
|
* | |
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* | MINIMUM |
|
||||||
|
* | |
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_RR
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_RR_SOA extends Net_DNS2_RR
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* The master DNS server
|
||||||
|
*/
|
||||||
|
public $mname;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* mailbox of the responsible person
|
||||||
|
*/
|
||||||
|
public $rname;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* serial number
|
||||||
|
*/
|
||||||
|
public $serial;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* refresh time
|
||||||
|
*/
|
||||||
|
public $refresh;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* retry interval
|
||||||
|
*/
|
||||||
|
public $retry;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* expire time
|
||||||
|
*/
|
||||||
|
public $expire;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* minimum TTL for any RR in this zone
|
||||||
|
*/
|
||||||
|
public $minimum;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* method to return the rdata portion of the packet as a string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrToString()
|
||||||
|
{
|
||||||
|
return $this->cleanString($this->mname) . '. ' .
|
||||||
|
$this->cleanString($this->rname) . '. ' .
|
||||||
|
$this->serial . ' ' . $this->refresh . ' ' . $this->retry . ' ' .
|
||||||
|
$this->expire . ' ' . $this->minimum;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata portion from a standard DNS config line
|
||||||
|
*
|
||||||
|
* @param array $rdata a string split line of values for the rdata
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrFromString(array $rdata)
|
||||||
|
{
|
||||||
|
$this->mname = $this->cleanString($rdata[0]);
|
||||||
|
$this->rname = $this->cleanString($rdata[1]);
|
||||||
|
|
||||||
|
$this->serial = $rdata[2];
|
||||||
|
$this->refresh = $rdata[3];
|
||||||
|
$this->retry = $rdata[4];
|
||||||
|
$this->expire = $rdata[5];
|
||||||
|
$this->minimum = $rdata[6];
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata of the Net_DNS2_Packet object
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet to parse the RR from
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrSet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if ($this->rdlength > 0) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// parse the
|
||||||
|
//
|
||||||
|
$offset = $packet->offset;
|
||||||
|
|
||||||
|
$this->mname = Net_DNS2_Packet::expand($packet, $offset);
|
||||||
|
$this->rname = Net_DNS2_Packet::expand($packet, $offset);
|
||||||
|
|
||||||
|
//
|
||||||
|
// get the SOA values
|
||||||
|
//
|
||||||
|
$x = unpack(
|
||||||
|
'@' . $offset . '/Nserial/Nrefresh/Nretry/Nexpire/Nminimum/',
|
||||||
|
$packet->rdata
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->serial = Net_DNS2::expandUint32($x['serial']);
|
||||||
|
$this->refresh = Net_DNS2::expandUint32($x['refresh']);
|
||||||
|
$this->retry = Net_DNS2::expandUint32($x['retry']);
|
||||||
|
$this->expire = Net_DNS2::expandUint32($x['expire']);
|
||||||
|
$this->minimum = Net_DNS2::expandUint32($x['minimum']);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns the rdata portion of the DNS packet
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet use for
|
||||||
|
* compressed names
|
||||||
|
*
|
||||||
|
* @return mixed either returns a binary packed
|
||||||
|
* string or null on failure
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrGet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if (strlen($this->mname) > 0) {
|
||||||
|
|
||||||
|
$data = $packet->compress($this->mname, $packet->offset);
|
||||||
|
$data .= $packet->compress($this->rname, $packet->offset);
|
||||||
|
|
||||||
|
$data .= pack(
|
||||||
|
'N5', $this->serial, $this->refresh, $this->retry,
|
||||||
|
$this->expire, $this->minimum
|
||||||
|
);
|
||||||
|
|
||||||
|
$packet->offset += 20;
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
75
bundled-libs/Net/DNS2/RR/SPF.php
Normal file
75
bundled-libs/Net/DNS2/RR/SPF.php
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2010 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 0.6.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The SPF RR is implemented exactly like the TXT record, so
|
||||||
|
* for now we just extend the TXT RR and use it.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_RR
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_RR_SPF extends Net_DNS2_RR_TXT
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
186
bundled-libs/Net/DNS2/RR/SRV.php
Normal file
186
bundled-libs/Net/DNS2/RR/SRV.php
Normal file
@ -0,0 +1,186 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2010 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 0.6.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SRV Resource Record - RFC2782
|
||||||
|
*
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* | PRIORITY |
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* | WEIGHT |
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* | PORT |
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* / TARGET /
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_RR
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_RR_SRV extends Net_DNS2_RR
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* The priority of this target host.
|
||||||
|
*/
|
||||||
|
public $priority;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* a relative weight for entries with the same priority
|
||||||
|
*/
|
||||||
|
public $weight;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The port on this target host of this service.
|
||||||
|
*/
|
||||||
|
public $port;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The domain name of the target host
|
||||||
|
*/
|
||||||
|
public $target;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* method to return the rdata portion of the packet as a string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrToString()
|
||||||
|
{
|
||||||
|
return $this->priority . ' ' . $this->weight . ' ' .
|
||||||
|
$this->port . ' ' . $this->cleanString($this->target) . '.';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata portion from a standard DNS config line
|
||||||
|
*
|
||||||
|
* @param array $rdata a string split line of values for the rdata
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrFromString(array $rdata)
|
||||||
|
{
|
||||||
|
$this->priority = $rdata[0];
|
||||||
|
$this->weight = $rdata[1];
|
||||||
|
$this->port = $rdata[2];
|
||||||
|
|
||||||
|
$this->target = $this->cleanString($rdata[3]);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata of the Net_DNS2_Packet object
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet to parse the RR from
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrSet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if ($this->rdlength > 0) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// unpack the priority, weight and port
|
||||||
|
//
|
||||||
|
$x = unpack('npriority/nweight/nport', $this->rdata);
|
||||||
|
|
||||||
|
$this->priority = $x['priority'];
|
||||||
|
$this->weight = $x['weight'];
|
||||||
|
$this->port = $x['port'];
|
||||||
|
|
||||||
|
$offset = $packet->offset + 6;
|
||||||
|
$this->target = Net_DNS2_Packet::expand($packet, $offset);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns the rdata portion of the DNS packet
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet use for
|
||||||
|
* compressed names
|
||||||
|
*
|
||||||
|
* @return mixed either returns a binary packed
|
||||||
|
* string or null on failure
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrGet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if (strlen($this->target) > 0) {
|
||||||
|
|
||||||
|
$data = pack('nnn', $this->priority, $this->weight, $this->port);
|
||||||
|
$packet->offset += 6;
|
||||||
|
|
||||||
|
$data .= $packet->compress($this->target, $packet->offset);
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
250
bundled-libs/Net/DNS2/RR/SSHFP.php
Normal file
250
bundled-libs/Net/DNS2/RR/SSHFP.php
Normal file
@ -0,0 +1,250 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2010 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 0.6.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SSHFP Resource Record - RFC4255 section 3.1
|
||||||
|
*
|
||||||
|
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
* | algorithm | fp type | /
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ /
|
||||||
|
* / /
|
||||||
|
* / fingerprint /
|
||||||
|
* / /
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_RR
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_RR_SSHFP extends Net_DNS2_RR
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* the algorithm used
|
||||||
|
*/
|
||||||
|
public $algorithm;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The finger print type
|
||||||
|
*/
|
||||||
|
public $fp_type;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* the finger print data
|
||||||
|
*/
|
||||||
|
public $fingerprint;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Algorithms
|
||||||
|
*/
|
||||||
|
const SSHFP_ALGORITHM_RES = 0;
|
||||||
|
const SSHFP_ALGORITHM_RSA = 1;
|
||||||
|
const SSHFP_ALGORITHM_DSS = 2;
|
||||||
|
const SSHFP_ALGORITHM_ECDSA = 3;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Fingerprint Types
|
||||||
|
*/
|
||||||
|
const SSHFP_FPTYPE_RES = 0;
|
||||||
|
const SSHFP_FPTYPE_SHA1 = 1;
|
||||||
|
const SSHFP_FPTYPE_SHA256 = 2;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* method to return the rdata portion of the packet as a string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrToString()
|
||||||
|
{
|
||||||
|
return $this->algorithm . ' ' . $this->fp_type . ' ' . $this->fingerprint;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata portion from a standard DNS config line
|
||||||
|
*
|
||||||
|
* @param array $rdata a string split line of values for the rdata
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrFromString(array $rdata)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// "The use of mnemonics instead of numbers is not allowed."
|
||||||
|
//
|
||||||
|
// RFC4255 section 3.2
|
||||||
|
//
|
||||||
|
$algorithm = array_shift($rdata);
|
||||||
|
$fp_type = array_shift($rdata);
|
||||||
|
$fingerprint = strtolower(implode('', $rdata));
|
||||||
|
|
||||||
|
//
|
||||||
|
// There are only two algorithm's defined
|
||||||
|
//
|
||||||
|
if ( ($algorithm != self::SSHFP_ALGORITHM_RSA)
|
||||||
|
&& ($algorithm != self::SSHFP_ALGORITHM_DSS)
|
||||||
|
&& ($algorithm != self::SSHFP_ALGORITHM_ECDSA)
|
||||||
|
) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// there are only two fingerprints defined
|
||||||
|
//
|
||||||
|
if ( ($fp_type != self::SSHFP_FPTYPE_SHA1)
|
||||||
|
&& ($fp_type != self::SSHFP_FPTYPE_SHA256)
|
||||||
|
) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->algorithm = $algorithm;
|
||||||
|
$this->fp_type = $fp_type;
|
||||||
|
$this->fingerprint = $fingerprint;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata of the Net_DNS2_Packet object
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet to parse the RR from
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrSet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if ($this->rdlength > 0) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// unpack the algorithm and finger print type
|
||||||
|
//
|
||||||
|
$x = unpack('Calgorithm/Cfp_type', $this->rdata);
|
||||||
|
|
||||||
|
$this->algorithm = $x['algorithm'];
|
||||||
|
$this->fp_type = $x['fp_type'];
|
||||||
|
|
||||||
|
//
|
||||||
|
// There are only three algorithm's defined
|
||||||
|
//
|
||||||
|
if ( ($this->algorithm != self::SSHFP_ALGORITHM_RSA)
|
||||||
|
&& ($this->algorithm != self::SSHFP_ALGORITHM_DSS)
|
||||||
|
&& ($this->algorithm != self::SSHFP_ALGORITHM_ECDSA)
|
||||||
|
) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// there are only two fingerprints defined
|
||||||
|
//
|
||||||
|
if ( ($this->fp_type != self::SSHFP_FPTYPE_SHA1)
|
||||||
|
&& ($this->fp_type != self::SSHFP_FPTYPE_SHA256)
|
||||||
|
) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// parse the finger print; this assumes SHA-1
|
||||||
|
//
|
||||||
|
$fp = unpack('H*a', substr($this->rdata, 2));
|
||||||
|
$this->fingerprint = strtolower($fp['a']);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns the rdata portion of the DNS packet
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet use for
|
||||||
|
* compressed names
|
||||||
|
*
|
||||||
|
* @return mixed either returns a binary packed
|
||||||
|
* string or null on failure
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrGet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if (strlen($this->fingerprint) > 0) {
|
||||||
|
|
||||||
|
$data = pack(
|
||||||
|
'CCH*', $this->algorithm, $this->fp_type, $this->fingerprint
|
||||||
|
);
|
||||||
|
|
||||||
|
$packet->offset += strlen($data);
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
75
bundled-libs/Net/DNS2/RR/TA.php
Normal file
75
bundled-libs/Net/DNS2/RR/TA.php
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2011, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2011 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 1.2.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The TA RR is implemented exactly like the DS record, so
|
||||||
|
* for now we just extend the DS RR and use it.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_RR
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_RR_TA extends Net_DNS2_RR_DS
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
171
bundled-libs/Net/DNS2/RR/TALINK.php
Normal file
171
bundled-libs/Net/DNS2/RR/TALINK.php
Normal file
@ -0,0 +1,171 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2011, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2011 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 1.2.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TALINK Resource Record - DNSSEC Trust Anchor
|
||||||
|
*
|
||||||
|
* http://tools.ietf.org/id/draft-ietf-dnsop-dnssec-trust-history-00.txt
|
||||||
|
*
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* / PREVIOUS /
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* / NEXT /
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_RR
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_RR_TALINK extends Net_DNS2_RR
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* the previous domain name
|
||||||
|
*/
|
||||||
|
public $previous;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* the next domain name
|
||||||
|
*/
|
||||||
|
public $next;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* method to return the rdata portion of the packet as a string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrToString()
|
||||||
|
{
|
||||||
|
return $this->cleanString($this->previous) . '. ' .
|
||||||
|
$this->cleanString($this->next) . '.';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata portion from a standard DNS config line
|
||||||
|
*
|
||||||
|
* @param array $rdata a string split line of values for the rdata
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrFromString(array $rdata)
|
||||||
|
{
|
||||||
|
$this->previous = $this->cleanString($rdata[0]);
|
||||||
|
$this->next = $this->cleanString($rdata[1]);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata of the Net_DNS2_Packet object
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet to parse the RR from
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrSet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if ($this->rdlength > 0) {
|
||||||
|
|
||||||
|
$offset = $packet->offset;
|
||||||
|
|
||||||
|
$this->previous = Net_DNS2_Packet::label($packet, $offset);
|
||||||
|
$this->next = Net_DNS2_Packet::label($packet, $offset);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns the rdata portion of the DNS packet
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet use for
|
||||||
|
* compressed names
|
||||||
|
*
|
||||||
|
* @return mixed either returns a binary packed
|
||||||
|
* string or null on failure
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrGet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if ( (strlen($this->previous) > 0) || (strlen($this->next) > 0) ) {
|
||||||
|
|
||||||
|
$data = chr(strlen($this->previous)) . $this->previous .
|
||||||
|
chr(strlen($this->next)) . $this->next;
|
||||||
|
|
||||||
|
$packet->offset += strlen($data);
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
307
bundled-libs/Net/DNS2/RR/TKEY.php
Normal file
307
bundled-libs/Net/DNS2/RR/TKEY.php
Normal file
@ -0,0 +1,307 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2010 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 0.6.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TKEY Resource Record - RFC 2930 section 2
|
||||||
|
*
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* / ALGORITHM /
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* | INCEPTION |
|
||||||
|
* | |
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* | EXPIRATION |
|
||||||
|
* | |
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* | MODE |
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* | ERROR |
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* | KEY SIZE |
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* / KEY DATA /
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* | OTHER SIZE |
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* / OTHER DATA /
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_RR
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_RR_TKEY extends Net_DNS2_RR
|
||||||
|
{
|
||||||
|
public $algorithm;
|
||||||
|
public $inception;
|
||||||
|
public $expiration;
|
||||||
|
public $mode;
|
||||||
|
public $error;
|
||||||
|
public $key_size;
|
||||||
|
public $key_data;
|
||||||
|
public $other_size;
|
||||||
|
public $other_data;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* TSIG Modes
|
||||||
|
*/
|
||||||
|
const TSIG_MODE_RES = 0;
|
||||||
|
const TSIG_MODE_SERV_ASSIGN = 1;
|
||||||
|
const TSIG_MODE_DH = 2;
|
||||||
|
const TSIG_MODE_GSS_API = 3;
|
||||||
|
const TSIG_MODE_RESV_ASSIGN = 4;
|
||||||
|
const TSIG_MODE_KEY_DELE = 5;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* map the mod id's to names so we can validate
|
||||||
|
*/
|
||||||
|
public $tsgi_mode_id_to_name = array(
|
||||||
|
|
||||||
|
self::TSIG_MODE_RES => 'Reserved',
|
||||||
|
self::TSIG_MODE_SERV_ASSIGN => 'Server Assignment',
|
||||||
|
self::TSIG_MODE_DH => 'Diffie-Hellman',
|
||||||
|
self::TSIG_MODE_GSS_API => 'GSS-API',
|
||||||
|
self::TSIG_MODE_RESV_ASSIGN => 'Resolver Assignment',
|
||||||
|
self::TSIG_MODE_KEY_DELE => 'Key Deletion'
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* method to return the rdata portion of the packet as a string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrToString()
|
||||||
|
{
|
||||||
|
$out = $this->cleanString($this->algorithm) . '. ' . $this->mode;
|
||||||
|
if ($this->key_size > 0) {
|
||||||
|
|
||||||
|
$out .= ' ' . trim($this->key_data, '.') . '.';
|
||||||
|
} else {
|
||||||
|
|
||||||
|
$out .= ' .';
|
||||||
|
}
|
||||||
|
|
||||||
|
return $out;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata portion from a standard DNS config line
|
||||||
|
*
|
||||||
|
* @param array $rdata a string split line of values for the rdata
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrFromString(array $rdata)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// data passed in is assumed: <algorithm> <mode> <key>
|
||||||
|
//
|
||||||
|
$this->algorithm = $this->cleanString(array_shift($rdata));
|
||||||
|
$this->mode = array_shift($rdata);
|
||||||
|
$this->key_data = trim(array_shift($rdata), '.');
|
||||||
|
|
||||||
|
//
|
||||||
|
// the rest of the data is set manually
|
||||||
|
//
|
||||||
|
$this->inception = time();
|
||||||
|
$this->expiration = time() + 86400; // 1 day
|
||||||
|
$this->error = 0;
|
||||||
|
$this->key_size = strlen($this->key_data);
|
||||||
|
$this->other_size = 0;
|
||||||
|
$this->other_data = '';
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata of the Net_DNS2_Packet object
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet to parse the RR from
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrSet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if ($this->rdlength > 0) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// expand the algorithm
|
||||||
|
//
|
||||||
|
$offset = $packet->offset;
|
||||||
|
$this->algorithm = Net_DNS2_Packet::expand($packet, $offset);
|
||||||
|
|
||||||
|
//
|
||||||
|
// unpack inception, expiration, mode, error and key size
|
||||||
|
//
|
||||||
|
$x = unpack(
|
||||||
|
'@' . $offset . '/Ninception/Nexpiration/nmode/nerror/nkey_size',
|
||||||
|
$packet->rdata
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->inception = Net_DNS2::expandUint32($x['inception']);
|
||||||
|
$this->expiration = Net_DNS2::expandUint32($x['expiration']);
|
||||||
|
$this->mode = $x['mode'];
|
||||||
|
$this->error = $x['error'];
|
||||||
|
$this->key_size = $x['key_size'];
|
||||||
|
|
||||||
|
$offset += 14;
|
||||||
|
|
||||||
|
//
|
||||||
|
// if key_size > 0, then copy out the key
|
||||||
|
//
|
||||||
|
if ($this->key_size > 0) {
|
||||||
|
|
||||||
|
$this->key_data = substr($packet->rdata, $offset, $this->key_size);
|
||||||
|
$offset += $this->key_size;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// unpack the other length
|
||||||
|
//
|
||||||
|
$x = unpack('@' . $offset . '/nother_size', $packet->rdata);
|
||||||
|
|
||||||
|
$this->other_size = $x['other_size'];
|
||||||
|
$offset += 2;
|
||||||
|
|
||||||
|
//
|
||||||
|
// if other_size > 0, then copy out the data
|
||||||
|
//
|
||||||
|
if ($this->other_size > 0) {
|
||||||
|
|
||||||
|
$this->other_data = substr(
|
||||||
|
$packet->rdata, $offset, $this->other_size
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns the rdata portion of the DNS packet
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet use for
|
||||||
|
* compressed names
|
||||||
|
*
|
||||||
|
* @return mixed either returns a binary packed
|
||||||
|
* string or null on failure
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrGet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if (strlen($this->algorithm) > 0) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// make sure the size values are correct
|
||||||
|
//
|
||||||
|
$this->key_size = strlen($this->key_data);
|
||||||
|
$this->other_size = strlen($this->other_data);
|
||||||
|
|
||||||
|
//
|
||||||
|
// add the algorithm without compression
|
||||||
|
//
|
||||||
|
$data = Net_DNS2_Packet::pack($this->algorithm);
|
||||||
|
|
||||||
|
//
|
||||||
|
// pack in the inception, expiration, mode, error and key size
|
||||||
|
//
|
||||||
|
$data .= pack(
|
||||||
|
'NNnnn', $this->inception, $this->expiration,
|
||||||
|
$this->mode, 0, $this->key_size
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
// if the key_size > 0, then add the key
|
||||||
|
//
|
||||||
|
if ($this->key_size > 0) {
|
||||||
|
|
||||||
|
$data .= $this->key_data;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// pack in the other size
|
||||||
|
//
|
||||||
|
$data .= pack('n', $this->other_size);
|
||||||
|
if ($this->other_size > 0) {
|
||||||
|
|
||||||
|
$data .= $this->other_data;
|
||||||
|
}
|
||||||
|
|
||||||
|
$packet->offset += strlen($data);
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
194
bundled-libs/Net/DNS2/RR/TLSA.php
Normal file
194
bundled-libs/Net/DNS2/RR/TLSA.php
Normal file
@ -0,0 +1,194 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2012, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2012 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 1.2.5
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TLSA Resource Record - RFC 6698
|
||||||
|
*
|
||||||
|
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
* | Cert. Usage | Selector | Matching Type | /
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ /
|
||||||
|
* / /
|
||||||
|
* / Certificate Association Data /
|
||||||
|
* / /
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_RR
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_RR_TLSA extends Net_DNS2_RR
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* The Certificate Usage Field
|
||||||
|
*/
|
||||||
|
public $cert_usage;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The Selector Field
|
||||||
|
*/
|
||||||
|
public $selector;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The Matching Type Field
|
||||||
|
*/
|
||||||
|
public $matching_type;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The Certificate Association Data Field
|
||||||
|
*/
|
||||||
|
public $certificate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* method to return the rdata portion of the packet as a string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrToString()
|
||||||
|
{
|
||||||
|
return $this->cert_usage . ' ' . $this->selector . ' ' .
|
||||||
|
$this->matching_type . ' ' . base64_encode($this->certificate);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata portion from a standard DNS config line
|
||||||
|
*
|
||||||
|
* @param array $rdata a string split line of values for the rdata
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrFromString(array $rdata)
|
||||||
|
{
|
||||||
|
$this->cert_usage = array_shift($rdata);
|
||||||
|
$this->selector = array_shift($rdata);
|
||||||
|
$this->matching_type = array_shift($rdata);
|
||||||
|
$this->certificate = base64_decode(implode('', $rdata));
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata of the Net_DNS2_Packet object
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet to parse the RR from
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrSet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if ($this->rdlength > 0) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// unpack the format, keytag and algorithm
|
||||||
|
//
|
||||||
|
$x = unpack('Cusage/Cselector/Ctype', $this->rdata);
|
||||||
|
|
||||||
|
$this->cert_usage = $x['usage'];
|
||||||
|
$this->selector = $x['selector'];
|
||||||
|
$this->matching_type = $x['type'];
|
||||||
|
|
||||||
|
//
|
||||||
|
// copy the certificate
|
||||||
|
//
|
||||||
|
$this->certificate = substr($this->rdata, 3, $this->rdlength - 3);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns the rdata portion of the DNS packet
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet use for
|
||||||
|
* compressed names
|
||||||
|
*
|
||||||
|
* @return mixed either returns a binary packed
|
||||||
|
* string or null on failure
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrGet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if (strlen($this->certificate) > 0) {
|
||||||
|
|
||||||
|
$data = pack(
|
||||||
|
'CCC', $this->cert_usage, $this->selector, $this->matching_type
|
||||||
|
) . $this->certificate;
|
||||||
|
|
||||||
|
$packet->offset += strlen($data);
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
504
bundled-libs/Net/DNS2/RR/TSIG.php
Normal file
504
bundled-libs/Net/DNS2/RR/TSIG.php
Normal file
@ -0,0 +1,504 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2010 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 0.6.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TSIG Resource Record - RFC 2845
|
||||||
|
*
|
||||||
|
* 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
* / algorithm /
|
||||||
|
* / /
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
* | time signed |
|
||||||
|
* | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
* | | fudge |
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
* | mac size | /
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ /
|
||||||
|
* / mac /
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
* | original id | error |
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
* | other length | /
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ /
|
||||||
|
* / other data /
|
||||||
|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_RR
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_RR_TSIG extends Net_DNS2_RR
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* TSIG Algorithm Identifiers
|
||||||
|
*/
|
||||||
|
const HMAC_MD5 = 'hmac-md5.sig-alg.reg.int'; // RFC 2845, required
|
||||||
|
const GSS_TSIG = 'gss-tsig'; // unsupported, optional
|
||||||
|
const HMAC_SHA1 = 'hmac-sha1'; // RFC 4635, required
|
||||||
|
const HMAC_SHA224 = 'hmac-sha224'; // RFC 4635, optional
|
||||||
|
const HMAC_SHA256 = 'hmac-sha256'; // RFC 4635, required
|
||||||
|
const HMAC_SHA384 = 'hmac-sha384'; // RFC 4635, optional
|
||||||
|
const HMAC_SHA512 = 'hmac-sha512'; // RFC 4635, optional
|
||||||
|
|
||||||
|
/*
|
||||||
|
* the map of hash values to names
|
||||||
|
*/
|
||||||
|
public static $hash_algorithms = array(
|
||||||
|
|
||||||
|
self::HMAC_MD5 => 'md5',
|
||||||
|
self::HMAC_SHA1 => 'sha1',
|
||||||
|
self::HMAC_SHA224 => 'sha224',
|
||||||
|
self::HMAC_SHA256 => 'sha256',
|
||||||
|
self::HMAC_SHA384 => 'sha384',
|
||||||
|
self::HMAC_SHA512 => 'sha512'
|
||||||
|
);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* algorithm used; only supports HMAC-MD5
|
||||||
|
*/
|
||||||
|
public $algorithm;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The time it was signed
|
||||||
|
*/
|
||||||
|
public $time_signed;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* fudge- allowed offset from the time signed
|
||||||
|
*/
|
||||||
|
public $fudge;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* size of the digest
|
||||||
|
*/
|
||||||
|
public $mac_size;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* the digest data
|
||||||
|
*/
|
||||||
|
public $mac;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* the original id of the request
|
||||||
|
*/
|
||||||
|
public $original_id;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* additional error code
|
||||||
|
*/
|
||||||
|
public $error;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* length of the "other" data, should only ever be 0 when there is
|
||||||
|
* no error, or 6 when there is the error RCODE_BADTIME
|
||||||
|
*/
|
||||||
|
public $other_length;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* the other data; should only ever be a timestamp when there is the
|
||||||
|
* error RCODE_BADTIME
|
||||||
|
*/
|
||||||
|
public $other_data;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* the key to use for signing - passed in, not included in the rdata
|
||||||
|
*/
|
||||||
|
public $key;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* method to return the rdata portion of the packet as a string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrToString()
|
||||||
|
{
|
||||||
|
$out = $this->cleanString($this->algorithm) . '. ' .
|
||||||
|
$this->time_signed . ' ' .
|
||||||
|
$this->fudge . ' ' . $this->mac_size . ' ' .
|
||||||
|
base64_encode($this->mac) . ' ' . $this->original_id . ' ' .
|
||||||
|
$this->error . ' '. $this->other_length;
|
||||||
|
|
||||||
|
if ($this->other_length > 0) {
|
||||||
|
|
||||||
|
$out .= ' ' . $this->other_data;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $out;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata portion from a standard DNS config line
|
||||||
|
*
|
||||||
|
* @param array $rdata a string split line of values for the rdata
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrFromString(array $rdata)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// the only value passed in is the key-
|
||||||
|
//
|
||||||
|
// this assumes it's passed in base64 encoded.
|
||||||
|
//
|
||||||
|
$this->key = preg_replace('/\s+/', '', array_shift($rdata));
|
||||||
|
|
||||||
|
//
|
||||||
|
// the rest of the data is set to default
|
||||||
|
//
|
||||||
|
$this->algorithm = self::HMAC_MD5;
|
||||||
|
$this->time_signed = time();
|
||||||
|
$this->fudge = 300;
|
||||||
|
$this->mac_size = 0;
|
||||||
|
$this->mac = '';
|
||||||
|
$this->original_id = 0;
|
||||||
|
$this->error = 0;
|
||||||
|
$this->other_length = 0;
|
||||||
|
$this->other_data = '';
|
||||||
|
|
||||||
|
//
|
||||||
|
// per RFC 2845 section 2.3
|
||||||
|
//
|
||||||
|
$this->class = 'ANY';
|
||||||
|
$this->ttl = 0;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata of the Net_DNS2_Packet object
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet to parse the RR from
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrSet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if ($this->rdlength > 0) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// expand the algorithm
|
||||||
|
//
|
||||||
|
$newoffset = $packet->offset;
|
||||||
|
$this->algorithm = Net_DNS2_Packet::expand($packet, $newoffset);
|
||||||
|
$offset = $newoffset - $packet->offset;
|
||||||
|
|
||||||
|
//
|
||||||
|
// unpack time, fudge and mac_size
|
||||||
|
//
|
||||||
|
$x = unpack(
|
||||||
|
'@' . $offset . '/ntime_high/Ntime_low/nfudge/nmac_size',
|
||||||
|
$this->rdata
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->time_signed = Net_DNS2::expandUint32($x['time_low']);
|
||||||
|
$this->fudge = $x['fudge'];
|
||||||
|
$this->mac_size = $x['mac_size'];
|
||||||
|
|
||||||
|
$offset += 10;
|
||||||
|
|
||||||
|
//
|
||||||
|
// copy out the mac
|
||||||
|
//
|
||||||
|
if ($this->mac_size > 0) {
|
||||||
|
|
||||||
|
$this->mac = substr($this->rdata, $offset, $this->mac_size);
|
||||||
|
$offset += $this->mac_size;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// unpack the original id, error, and other_length values
|
||||||
|
//
|
||||||
|
$x = unpack(
|
||||||
|
'@' . $offset . '/noriginal_id/nerror/nother_length',
|
||||||
|
$this->rdata
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->original_id = $x['original_id'];
|
||||||
|
$this->error = $x['error'];
|
||||||
|
$this->other_length = $x['other_length'];
|
||||||
|
|
||||||
|
//
|
||||||
|
// the only time there is actually any "other data", is when there's
|
||||||
|
// a BADTIME error code.
|
||||||
|
//
|
||||||
|
// The other length should be 6, and the other data field includes the
|
||||||
|
// servers current time - per RFC 2845 section 4.5.2
|
||||||
|
//
|
||||||
|
if ($this->error == Net_DNS2_Lookups::RCODE_BADTIME) {
|
||||||
|
|
||||||
|
if ($this->other_length != 6) {
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// other data is a 48bit timestamp
|
||||||
|
//
|
||||||
|
$x = unpack(
|
||||||
|
'nhigh/nlow',
|
||||||
|
substr($this->rdata, $offset + 6, $this->other_length)
|
||||||
|
);
|
||||||
|
$this->other_data = $x['low'];
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns the rdata portion of the DNS packet
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet use for
|
||||||
|
* compressed names
|
||||||
|
*
|
||||||
|
* @return mixed either returns a binary packed
|
||||||
|
* string or null on failure
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrGet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if (strlen($this->key) > 0) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// create a new packet for the signature-
|
||||||
|
//
|
||||||
|
$new_packet = new Net_DNS2_Packet_Request('example.com', 'SOA', 'IN');
|
||||||
|
|
||||||
|
//
|
||||||
|
// copy the packet data over
|
||||||
|
//
|
||||||
|
$new_packet->copy($packet);
|
||||||
|
|
||||||
|
//
|
||||||
|
// remove the TSIG object from the additional list
|
||||||
|
//
|
||||||
|
array_pop($new_packet->additional);
|
||||||
|
$new_packet->header->arcount = count($new_packet->additional);
|
||||||
|
|
||||||
|
//
|
||||||
|
// copy out the data
|
||||||
|
//
|
||||||
|
$sig_data = $new_packet->get();
|
||||||
|
|
||||||
|
//
|
||||||
|
// add the name without compressing
|
||||||
|
//
|
||||||
|
$sig_data .= Net_DNS2_Packet::pack($this->name);
|
||||||
|
|
||||||
|
//
|
||||||
|
// add the class and TTL
|
||||||
|
//
|
||||||
|
$sig_data .= pack(
|
||||||
|
'nN', Net_DNS2_Lookups::$classes_by_name[$this->class], $this->ttl
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
// add the algorithm name without compression
|
||||||
|
//
|
||||||
|
$sig_data .= Net_DNS2_Packet::pack(strtolower($this->algorithm));
|
||||||
|
|
||||||
|
//
|
||||||
|
// add the rest of the values
|
||||||
|
//
|
||||||
|
$sig_data .= pack(
|
||||||
|
'nNnnn', 0, $this->time_signed, $this->fudge,
|
||||||
|
$this->error, $this->other_length
|
||||||
|
);
|
||||||
|
if ($this->other_length > 0) {
|
||||||
|
|
||||||
|
$sig_data .= pack('nN', 0, $this->other_data);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// sign the data
|
||||||
|
//
|
||||||
|
$this->mac = $this->_signHMAC(
|
||||||
|
$sig_data, base64_decode($this->key), $this->algorithm
|
||||||
|
);
|
||||||
|
$this->mac_size = strlen($this->mac);
|
||||||
|
|
||||||
|
//
|
||||||
|
// compress the algorithm
|
||||||
|
//
|
||||||
|
$data = Net_DNS2_Packet::pack(strtolower($this->algorithm));
|
||||||
|
|
||||||
|
//
|
||||||
|
// pack the time, fudge and mac size
|
||||||
|
//
|
||||||
|
$data .= pack(
|
||||||
|
'nNnn', 0, $this->time_signed, $this->fudge, $this->mac_size
|
||||||
|
);
|
||||||
|
$data .= $this->mac;
|
||||||
|
|
||||||
|
//
|
||||||
|
// check the error and other_length
|
||||||
|
//
|
||||||
|
if ($this->error == Net_DNS2_Lookups::RCODE_BADTIME) {
|
||||||
|
|
||||||
|
$this->other_length = strlen($this->other_data);
|
||||||
|
if ($this->other_length != 6) {
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
|
||||||
|
$this->other_length = 0;
|
||||||
|
$this->other_data = '';
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// pack the id, error and other_length
|
||||||
|
//
|
||||||
|
$data .= pack(
|
||||||
|
'nnn', $packet->header->id, $this->error, $this->other_length
|
||||||
|
);
|
||||||
|
if ($this->other_length > 0) {
|
||||||
|
|
||||||
|
$data .= pack('nN', 0, $this->other_data);
|
||||||
|
}
|
||||||
|
|
||||||
|
$packet->offset += strlen($data);
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* signs the given data with the given key, and returns the result
|
||||||
|
*
|
||||||
|
* @param string $data the data to sign
|
||||||
|
* @param string $key key to use for signing
|
||||||
|
* @param string $algorithm the algorithm to use; defaults to MD5
|
||||||
|
*
|
||||||
|
* @return string the signed digest
|
||||||
|
* @throws Net_DNS2_Exception
|
||||||
|
* @access private
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private function _signHMAC($data, $key = null, $algorithm = self::HMAC_MD5)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// use the hash extension; this is included by default in >= 5.1.2 which
|
||||||
|
// is our dependent version anyway- so it's easy to switch to it.
|
||||||
|
//
|
||||||
|
if (extension_loaded('hash')) {
|
||||||
|
|
||||||
|
if (!isset(self::$hash_algorithms[$algorithm])) {
|
||||||
|
|
||||||
|
throw new Net_DNS2_Exception(
|
||||||
|
'invalid or unsupported algorithm',
|
||||||
|
Net_DNS2_Lookups::E_PARSE_ERROR
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return hash_hmac(self::$hash_algorithms[$algorithm], $data, $key, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// if the hash extension isn't loaded, and they selected something other
|
||||||
|
// than MD5, throw an exception
|
||||||
|
//
|
||||||
|
if ($algorithm != self::HMAC_MD5) {
|
||||||
|
|
||||||
|
throw new Net_DNS2_Exception(
|
||||||
|
'only HMAC-MD5 supported. please install the php-extension ' .
|
||||||
|
'"hash" in order to use the sha-family',
|
||||||
|
Net_DNS2_Lookups::E_PARSE_ERROR
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// otherwise, do it ourselves
|
||||||
|
//
|
||||||
|
if (is_null($key)) {
|
||||||
|
|
||||||
|
return pack('H*', md5($data));
|
||||||
|
}
|
||||||
|
|
||||||
|
$key = str_pad($key, 64, chr(0x00));
|
||||||
|
if (strlen($key) > 64) {
|
||||||
|
|
||||||
|
$key = pack('H*', md5($key));
|
||||||
|
}
|
||||||
|
|
||||||
|
$k_ipad = $key ^ str_repeat(chr(0x36), 64);
|
||||||
|
$k_opad = $key ^ str_repeat(chr(0x5c), 64);
|
||||||
|
|
||||||
|
return $this->_signHMAC(
|
||||||
|
$k_opad . pack('H*', md5($k_ipad . $data)), null, $algorithm
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
177
bundled-libs/Net/DNS2/RR/TXT.php
Normal file
177
bundled-libs/Net/DNS2/RR/TXT.php
Normal file
@ -0,0 +1,177 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2010 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 0.6.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TXT Resource Record - RFC1035 section 3.3.14
|
||||||
|
*
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* / TXT-DATA /
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_RR
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_RR_TXT extends Net_DNS2_RR
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* an array of the text strings
|
||||||
|
*/
|
||||||
|
public $text = array();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* method to return the rdata portion of the packet as a string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrToString()
|
||||||
|
{
|
||||||
|
if (count($this->text) == 0) {
|
||||||
|
return '""';
|
||||||
|
}
|
||||||
|
|
||||||
|
$data = '';
|
||||||
|
|
||||||
|
foreach ($this->text as $t) {
|
||||||
|
|
||||||
|
$data .= $this->formatString($t) . ' ';
|
||||||
|
}
|
||||||
|
|
||||||
|
return trim($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata portion from a standard DNS config line
|
||||||
|
*
|
||||||
|
* @param array $rdata a string split line of values for the rdata
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrFromString(array $rdata)
|
||||||
|
{
|
||||||
|
$data = $this->buildString($rdata);
|
||||||
|
if (count($data) > 0) {
|
||||||
|
|
||||||
|
$this->text = $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata of the Net_DNS2_Packet object
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet to parse the RR from
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrSet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if ($this->rdlength > 0) {
|
||||||
|
|
||||||
|
$length = $packet->offset + $this->rdlength;
|
||||||
|
$offset = $packet->offset;
|
||||||
|
|
||||||
|
while ($length > $offset) {
|
||||||
|
|
||||||
|
$this->text[] = Net_DNS2_Packet::label($packet, $offset);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns the rdata portion of the DNS packet
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet use for
|
||||||
|
* compressed names
|
||||||
|
*
|
||||||
|
* @return mixed either returns a binary packed
|
||||||
|
* string or null on failure
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrGet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
$data = null;
|
||||||
|
|
||||||
|
foreach ($this->text as $t) {
|
||||||
|
|
||||||
|
$data .= chr(strlen($t)) . $t;
|
||||||
|
}
|
||||||
|
|
||||||
|
$packet->offset += strlen($data);
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
183
bundled-libs/Net/DNS2/RR/URI.php
Normal file
183
bundled-libs/Net/DNS2/RR/URI.php
Normal file
@ -0,0 +1,183 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2011, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2011 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 1.2.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* URI Resource Record - http://tools.ietf.org/html/draft-faltstrom-uri-06
|
||||||
|
*
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* | PRIORITY |
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* | WEIGHT |
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* / TARGET /
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_RR
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_RR_URI extends Net_DNS2_RR
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* The priority of this target host.
|
||||||
|
*/
|
||||||
|
public $priority;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* a relative weight for entries with the same priority
|
||||||
|
*/
|
||||||
|
public $weight;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The domain name of the target host
|
||||||
|
*/
|
||||||
|
public $target;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* method to return the rdata portion of the packet as a string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrToString()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// presentation format has double quotes (") around the target.
|
||||||
|
//
|
||||||
|
return $this->priority . ' ' . $this->weight . ' "' .
|
||||||
|
$this->cleanString($this->target) . '"';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata portion from a standard DNS config line
|
||||||
|
*
|
||||||
|
* @param array $rdata a string split line of values for the rdata
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrFromString(array $rdata)
|
||||||
|
{
|
||||||
|
$this->priority = $rdata[0];
|
||||||
|
$this->weight = $rdata[1];
|
||||||
|
|
||||||
|
//
|
||||||
|
// make sure to trim the lead/trailing double quote if it's there.
|
||||||
|
//
|
||||||
|
$this->target = trim($this->cleanString($rdata[2]), '"');
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata of the Net_DNS2_Packet object
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet to parse the RR from
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrSet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if ($this->rdlength > 0) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// unpack the priority and weight
|
||||||
|
//
|
||||||
|
$x = unpack('npriority/nweight', $this->rdata);
|
||||||
|
|
||||||
|
$this->priority = $x['priority'];
|
||||||
|
$this->weight = $x['weight'];
|
||||||
|
|
||||||
|
$offset = $packet->offset + 4;
|
||||||
|
$this->target = Net_DNS2_Packet::expand($packet, $offset);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns the rdata portion of the DNS packet
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet use for
|
||||||
|
* compressed names
|
||||||
|
*
|
||||||
|
* @return mixed either returns a binary packed
|
||||||
|
* string or null on failure
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrGet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if (strlen($this->target) > 0) {
|
||||||
|
|
||||||
|
$data = pack('nn', $this->priority, $this->weight);
|
||||||
|
$packet->offset += 4;
|
||||||
|
|
||||||
|
$data .= $packet->compress(trim($this->target, '"'), $packet->offset);
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
235
bundled-libs/Net/DNS2/RR/WKS.php
Normal file
235
bundled-libs/Net/DNS2/RR/WKS.php
Normal file
@ -0,0 +1,235 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2010 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 1.0.1
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* WKS Resource Record - RFC1035 section 3.4.2
|
||||||
|
*
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* | ADDRESS |
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* | PROTOCOL | |
|
||||||
|
* +--+--+--+--+--+--+--+--+ |
|
||||||
|
* | |
|
||||||
|
* / <BIT MAP> /
|
||||||
|
* / /
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_RR
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_RR_WKS extends Net_DNS2_RR
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* The IP address of the service
|
||||||
|
*/
|
||||||
|
public $address;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The protocol of the service
|
||||||
|
*/
|
||||||
|
public $protocol;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* bitmap
|
||||||
|
*/
|
||||||
|
public $bitmap = array();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* method to return the rdata portion of the packet as a string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrToString()
|
||||||
|
{
|
||||||
|
$data = $this->address . ' ' . $this->protocol;
|
||||||
|
|
||||||
|
foreach ($this->bitmap as $port) {
|
||||||
|
$data .= ' ' . $port;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata portion from a standard DNS config line
|
||||||
|
*
|
||||||
|
* @param array $rdata a string split line of values for the rdata
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrFromString(array $rdata)
|
||||||
|
{
|
||||||
|
$this->address = strtolower(trim(array_shift($rdata), '.'));
|
||||||
|
$this->protocol = array_shift($rdata);
|
||||||
|
$this->bitmap = $rdata;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata of the Net_DNS2_Packet object
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet to parse the RR from
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrSet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if ($this->rdlength > 0) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// get the address and protocol value
|
||||||
|
//
|
||||||
|
$x = unpack('Naddress/Cprotocol', $this->rdata);
|
||||||
|
|
||||||
|
$this->address = long2ip($x['address']);
|
||||||
|
$this->protocol = $x['protocol'];
|
||||||
|
|
||||||
|
//
|
||||||
|
// unpack the port list bitmap
|
||||||
|
//
|
||||||
|
$port = 0;
|
||||||
|
foreach (unpack('@5/C*', $this->rdata) as $set) {
|
||||||
|
|
||||||
|
$s = sprintf('%08b', $set);
|
||||||
|
|
||||||
|
for ($i=0; $i<8; $i++, $port++) {
|
||||||
|
if ($s[$i] == '1') {
|
||||||
|
$this->bitmap[] = $port;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns the rdata portion of the DNS packet
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet use for
|
||||||
|
* compressed names
|
||||||
|
*
|
||||||
|
* @return mixed either returns a binary packed
|
||||||
|
* string or null on failure
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrGet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if (strlen($this->address) > 0) {
|
||||||
|
|
||||||
|
$data = pack('NC', ip2long($this->address), $this->protocol);
|
||||||
|
|
||||||
|
$ports = array();
|
||||||
|
|
||||||
|
$n = 0;
|
||||||
|
foreach ($this->bitmap as $port) {
|
||||||
|
$ports[$port] = 1;
|
||||||
|
|
||||||
|
if ($port > $n) {
|
||||||
|
$n = $port;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for ($i=0; $i<ceil($n/8)*8; $i++) {
|
||||||
|
if (!isset($ports[$i])) {
|
||||||
|
$ports[$i] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ksort($ports);
|
||||||
|
|
||||||
|
$string = '';
|
||||||
|
$n = 0;
|
||||||
|
|
||||||
|
foreach ($ports as $s) {
|
||||||
|
|
||||||
|
$string .= $s;
|
||||||
|
$n++;
|
||||||
|
|
||||||
|
if ($n == 8) {
|
||||||
|
|
||||||
|
$data .= chr(bindec($string));
|
||||||
|
$string = '';
|
||||||
|
$n = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$packet->offset += strlen($data);
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
160
bundled-libs/Net/DNS2/RR/X25.php
Normal file
160
bundled-libs/Net/DNS2/RR/X25.php
Normal file
@ -0,0 +1,160 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2010 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 0.6.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* X25 Resource Record - RFC1183 section 3.1
|
||||||
|
*
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* / PSDN-address /
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_RR
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_RR_X25 extends Net_DNS2_RR
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* The PSDN address
|
||||||
|
*/
|
||||||
|
public $psdnaddress;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* method to return the rdata portion of the packet as a string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrToString()
|
||||||
|
{
|
||||||
|
return $this->formatString($this->psdnaddress);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata portion from a standard DNS config line
|
||||||
|
*
|
||||||
|
* @param array $rdata a string split line of values for the rdata
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrFromString(array $rdata)
|
||||||
|
{
|
||||||
|
$data = $this->buildString($rdata);
|
||||||
|
if (count($data) == 1) {
|
||||||
|
|
||||||
|
$this->psdnaddress = $data[0];
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parses the rdata of the Net_DNS2_Packet object
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet to parse the RR from
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrSet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if ($this->rdlength > 0) {
|
||||||
|
|
||||||
|
$this->psdnaddress = Net_DNS2_Packet::label($packet, $packet->offset);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns the rdata portion of the DNS packet
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet use for
|
||||||
|
* compressed names
|
||||||
|
*
|
||||||
|
* @return mixed either returns a binary packed
|
||||||
|
* string or null on failure
|
||||||
|
* @access protected
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function rrGet(Net_DNS2_Packet &$packet)
|
||||||
|
{
|
||||||
|
if (strlen($this->psdnaddress) > 0) {
|
||||||
|
|
||||||
|
$data = chr(strlen($this->psdnaddress)) . $this->psdnaddress;
|
||||||
|
|
||||||
|
$packet->offset += strlen($data);
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
332
bundled-libs/Net/DNS2/Resolver.php
Normal file
332
bundled-libs/Net/DNS2/Resolver.php
Normal file
@ -0,0 +1,332 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2010 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 0.6.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is the main resolver class, providing DNS query functions.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_Resolver extends Net_DNS2
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Constructor - creates a new Net_DNS2_Resolver object
|
||||||
|
*
|
||||||
|
* @param mixed $options either an array with options or null
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function __construct(array $options = null)
|
||||||
|
{
|
||||||
|
parent::__construct($options);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* does a basic DNS lookup query
|
||||||
|
*
|
||||||
|
* @param string $name the DNS name to loookup
|
||||||
|
* @param string $type the name of the RR type to lookup
|
||||||
|
* @param string $class the name of the RR class to lookup
|
||||||
|
*
|
||||||
|
* @return Net_DNS2_RR object
|
||||||
|
* @throws Net_DNS2_Exception
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function query($name, $type = 'A', $class = 'IN')
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// make sure we have some name servers set
|
||||||
|
//
|
||||||
|
$this->checkServers(Net_DNS2::RESOLV_CONF);
|
||||||
|
|
||||||
|
//
|
||||||
|
// we dont' support incremental zone tranfers; so if it's requested, a full
|
||||||
|
// zone transfer can be returned
|
||||||
|
//
|
||||||
|
if ($type == 'IXFR') {
|
||||||
|
|
||||||
|
$type = 'AXFR';
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// if the name *looks* too short, then append the domain from the config
|
||||||
|
//
|
||||||
|
if ( (strpos($name, '.') === false) && ($type != 'PTR') ) {
|
||||||
|
|
||||||
|
$name .= '.' . strtolower($this->domain);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// create a new packet based on the input
|
||||||
|
//
|
||||||
|
$packet = new Net_DNS2_Packet_Request($name, $type, $class);
|
||||||
|
|
||||||
|
//
|
||||||
|
// check for an authentication method; either TSIG or SIG
|
||||||
|
//
|
||||||
|
if ( ($this->auth_signature instanceof Net_DNS2_RR_TSIG)
|
||||||
|
|| ($this->auth_signature instanceof Net_DNS2_RR_SIG)
|
||||||
|
) {
|
||||||
|
$packet->additional[] = $this->auth_signature;
|
||||||
|
$packet->header->arcount = count($packet->additional);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// check for the DNSSEC flag, and if it's true, then add an OPT
|
||||||
|
// RR to the additional section, and set the DO flag to 1.
|
||||||
|
//
|
||||||
|
if ($this->dnssec == true) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// create a new OPT RR
|
||||||
|
//
|
||||||
|
$opt = new Net_DNS2_RR_OPT();
|
||||||
|
|
||||||
|
//
|
||||||
|
// set the DO flag, and the other values
|
||||||
|
//
|
||||||
|
$opt->do = 1;
|
||||||
|
$opt->class = $this->dnssec_payload_size;
|
||||||
|
|
||||||
|
//
|
||||||
|
// add the RR to the additional section.
|
||||||
|
//
|
||||||
|
$packet->additional[] = $opt;
|
||||||
|
$packet->header->arcount = count($packet->additional);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// set the DNSSEC AD or CD bits
|
||||||
|
//
|
||||||
|
if ($this->dnssec_ad_flag == true) {
|
||||||
|
|
||||||
|
$packet->header->ad = 1;
|
||||||
|
}
|
||||||
|
if ($this->dnssec_cd_flag == true) {
|
||||||
|
|
||||||
|
$packet->header->cd = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// if caching is turned on, then check then hash the question, and
|
||||||
|
// do a cache lookup.
|
||||||
|
//
|
||||||
|
// don't use the cache for zone transfers
|
||||||
|
//
|
||||||
|
$packet_hash = '';
|
||||||
|
|
||||||
|
if ( ($this->use_cache == true) && ($this->cacheable($type) == true) ) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// open the cache
|
||||||
|
//
|
||||||
|
$this->cache->open(
|
||||||
|
$this->cache_file, $this->cache_size, $this->cache_serializer
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
// build the key and check for it in the cache.
|
||||||
|
//
|
||||||
|
$packet_hash = md5(
|
||||||
|
$packet->question[0]->qname . '|' . $packet->question[0]->qtype
|
||||||
|
);
|
||||||
|
|
||||||
|
if ($this->cache->has($packet_hash)) {
|
||||||
|
|
||||||
|
return $this->cache->get($packet_hash);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// set the RD (recursion desired) bit to 1 / 0 depending on the config
|
||||||
|
// setting.
|
||||||
|
//
|
||||||
|
if ($this->recurse == false) {
|
||||||
|
$packet->header->rd = 0;
|
||||||
|
} else {
|
||||||
|
$packet->header->rd = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// send the packet and get back the response
|
||||||
|
//
|
||||||
|
// *always* use TCP for zone transfers- does this cause any problems?
|
||||||
|
//
|
||||||
|
$response = $this->sendPacket(
|
||||||
|
$packet, ($type == 'AXFR') ? true : $this->use_tcp
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
// if strict mode is enabled, then make sure that the name that was
|
||||||
|
// looked up is *actually* in the response object.
|
||||||
|
//
|
||||||
|
// only do this is strict_query_mode is turned on, AND we've received
|
||||||
|
// some answers; no point doing any else if there were no answers.
|
||||||
|
//
|
||||||
|
if ( ($this->strict_query_mode == true)
|
||||||
|
&& ($response->header->ancount > 0)
|
||||||
|
) {
|
||||||
|
|
||||||
|
$found = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
// look for the requested name/type/class
|
||||||
|
//
|
||||||
|
foreach ($response->answer as $index => $object) {
|
||||||
|
|
||||||
|
if ( (strcasecmp(trim($object->name, '.'), trim($packet->question[0]->qname, '.')) == 0)
|
||||||
|
&& ($object->type == $packet->question[0]->qtype)
|
||||||
|
&& ($object->class == $packet->question[0]->qclass)
|
||||||
|
) {
|
||||||
|
$found = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// if it's not found, then unset the answer section; it's not correct to
|
||||||
|
// throw an exception here; if the hostname didn't exist, then
|
||||||
|
// sendPacket() would have already thrown an NXDOMAIN error- so the host
|
||||||
|
// *exists*, but just not the request type/class.
|
||||||
|
//
|
||||||
|
// the correct response in this case, is an empty answer section; the
|
||||||
|
// authority section may still have usual information, like a SOA record.
|
||||||
|
//
|
||||||
|
if ($found == false) {
|
||||||
|
|
||||||
|
$response->answer = array();
|
||||||
|
$response->header->ancount = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// cache the response object
|
||||||
|
//
|
||||||
|
if ( ($this->use_cache == true) && ($this->cacheable($type) == true) ) {
|
||||||
|
|
||||||
|
$this->cache->put($packet_hash, $response);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $response;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* does an inverse query for the given RR; most DNS servers do not implement
|
||||||
|
* inverse queries, but they should be able to return "not implemented"
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_RR $rr the RR object to lookup
|
||||||
|
*
|
||||||
|
* @return Net_DNS2_RR object
|
||||||
|
* @throws Net_DNS2_Exception
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function iquery(Net_DNS2_RR $rr)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// make sure we have some name servers set
|
||||||
|
//
|
||||||
|
$this->checkServers(Net_DNS2::RESOLV_CONF);
|
||||||
|
|
||||||
|
//
|
||||||
|
// create an empty packet
|
||||||
|
//
|
||||||
|
$packet = new Net_DNS2_Packet_Request($rr->name, 'A', 'IN');
|
||||||
|
|
||||||
|
//
|
||||||
|
// unset the question
|
||||||
|
//
|
||||||
|
$packet->question = array();
|
||||||
|
$packet->header->qdcount = 0;
|
||||||
|
|
||||||
|
//
|
||||||
|
// set the opcode to IQUERY
|
||||||
|
//
|
||||||
|
$packet->header->opcode = Net_DNS2_Lookups::OPCODE_IQUERY;
|
||||||
|
|
||||||
|
//
|
||||||
|
// add the given RR as the answer
|
||||||
|
//
|
||||||
|
$packet->answer[] = $rr;
|
||||||
|
$packet->header->ancount = 1;
|
||||||
|
|
||||||
|
//
|
||||||
|
// check for an authentication method; either TSIG or SIG
|
||||||
|
//
|
||||||
|
if ( ($this->auth_signature instanceof Net_DNS2_RR_TSIG)
|
||||||
|
|| ($this->auth_signature instanceof Net_DNS2_RR_SIG)
|
||||||
|
) {
|
||||||
|
$packet->additional[] = $this->auth_signature;
|
||||||
|
$packet->header->arcount = count($packet->additional);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// send the packet and get back the response
|
||||||
|
//
|
||||||
|
return $this->sendPacket($packet, $this->use_tcp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
190
bundled-libs/Net/DNS2/Socket.php
Normal file
190
bundled-libs/Net/DNS2/Socket.php
Normal file
@ -0,0 +1,190 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2010 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 0.6.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* check to see if the socket defines exist; if they don't, then define them
|
||||||
|
*/
|
||||||
|
if (defined('SOCK_STREAM') == false) {
|
||||||
|
define('SOCK_STREAM', 1);
|
||||||
|
}
|
||||||
|
if (defined('SOCK_DGRAM') == false) {
|
||||||
|
define('SOCK_DGRAM', 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is the abstract base class for the two sockets classes; this simply
|
||||||
|
* provides the class definition for the two sockets classes.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_Socket_Sockets, Net_DNS2_Socket_Streams
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
abstract class Net_DNS2_Socket
|
||||||
|
{
|
||||||
|
protected $sock;
|
||||||
|
protected $type;
|
||||||
|
protected $host;
|
||||||
|
protected $port;
|
||||||
|
protected $timeout;
|
||||||
|
|
||||||
|
protected $local_host;
|
||||||
|
protected $local_port;
|
||||||
|
|
||||||
|
public $last_error;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* type of sockets
|
||||||
|
*/
|
||||||
|
const SOCK_STREAM = SOCK_STREAM;
|
||||||
|
const SOCK_DGRAM = SOCK_DGRAM;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* constructor - set the port details
|
||||||
|
*
|
||||||
|
* @param integer $type the socket type
|
||||||
|
* @param string $host the IP address of the DNS server to connect to
|
||||||
|
* @param integer $port the port of the DNS server to connect to
|
||||||
|
* @param integer $timeout the timeout value to use for socket functions
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function __construct($type, $host, $port, $timeout)
|
||||||
|
{
|
||||||
|
$this->type = $type;
|
||||||
|
$this->host = $host;
|
||||||
|
$this->port = $port;
|
||||||
|
$this->timeout = $timeout;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* destructor
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
public function __destruct()
|
||||||
|
{
|
||||||
|
$this->close();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* sets the local address/port for the socket to bind to
|
||||||
|
*
|
||||||
|
* @param string $address the local IP address to bind to
|
||||||
|
* @param mixed $port the local port to bind to, or 0 to let the socket
|
||||||
|
* function select a port
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function bindAddress($address, $port = 0)
|
||||||
|
{
|
||||||
|
$this->local_host = $address;
|
||||||
|
$this->local_port = $port;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* opens a socket connection to the DNS server
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
abstract public function open();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* closes a socket connection to the DNS server
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
abstract public function close();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* writes the given string to the DNS server socket
|
||||||
|
*
|
||||||
|
* @param string $data a binary packed DNS packet
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
abstract public function write($data);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* reads a response from a DNS server
|
||||||
|
*
|
||||||
|
* @param integer &$size the size of the DNS packet read is passed back
|
||||||
|
* @param integer $max_size the max data size returned.
|
||||||
|
*
|
||||||
|
* @return mixed returns the data on success and false on error
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
abstract public function read(&$size, $max_size);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
364
bundled-libs/Net/DNS2/Socket/Sockets.php
Normal file
364
bundled-libs/Net/DNS2/Socket/Sockets.php
Normal file
@ -0,0 +1,364 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2010 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 0.6.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Socket handling class using the PHP sockets extension
|
||||||
|
*
|
||||||
|
* The sockets extension is faster than the stream functions in PHP, but it's
|
||||||
|
* not standard. So if the extension is loaded, then this class is used, if
|
||||||
|
* it's not, then the Net_DNS2_Socket_Streams class is used.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_Socket
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_Socket_Sockets extends Net_DNS2_Socket
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* opens a socket connection to the DNS server
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function open()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// create the socket
|
||||||
|
//
|
||||||
|
if (Net_DNS2::isIPv4($this->host) == true) {
|
||||||
|
|
||||||
|
$this->sock = @socket_create(
|
||||||
|
AF_INET, $this->type,
|
||||||
|
($this->type == Net_DNS2_Socket::SOCK_STREAM) ? SOL_TCP : SOL_UDP
|
||||||
|
);
|
||||||
|
|
||||||
|
} else if (Net_DNS2::isIPv6($this->host) == true) {
|
||||||
|
|
||||||
|
$this->sock = @socket_create(
|
||||||
|
AF_INET6, $this->type,
|
||||||
|
($this->type == Net_DNS2_Socket::SOCK_STREAM) ? SOL_TCP : SOL_UDP
|
||||||
|
);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
$this->last_error = 'invalid address type: ' . $this->host;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->sock === false) {
|
||||||
|
|
||||||
|
$this->last_error = socket_strerror(socket_last_error());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@socket_set_option($this->sock, SOL_SOCKET, SO_REUSEADDR, 1);
|
||||||
|
|
||||||
|
//
|
||||||
|
// bind to a local IP/port if it's set
|
||||||
|
//
|
||||||
|
if (strlen($this->local_host) > 0) {
|
||||||
|
|
||||||
|
$result = @socket_bind(
|
||||||
|
$this->sock, $this->local_host,
|
||||||
|
($this->local_port > 0) ? $this->local_port : null
|
||||||
|
);
|
||||||
|
if ($result === false) {
|
||||||
|
|
||||||
|
$this->last_error = socket_strerror(socket_last_error());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// mark the socket as non-blocking
|
||||||
|
//
|
||||||
|
if (@socket_set_nonblock($this->sock) === false) {
|
||||||
|
|
||||||
|
$this->last_error = socket_strerror(socket_last_error());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// connect to the socket; don't check for status here, we'll check it on the
|
||||||
|
// socket_select() call so we can handle timeouts properly
|
||||||
|
//
|
||||||
|
@socket_connect($this->sock, $this->host, $this->port);
|
||||||
|
|
||||||
|
$read = null;
|
||||||
|
$write = array($this->sock);
|
||||||
|
$except = null;
|
||||||
|
|
||||||
|
//
|
||||||
|
// select on write to check if the call to connect worked
|
||||||
|
//
|
||||||
|
$result = @socket_select($read, $write, $except, $this->timeout);
|
||||||
|
if ($result === false) {
|
||||||
|
|
||||||
|
$this->last_error = socket_strerror(socket_last_error());
|
||||||
|
return false;
|
||||||
|
|
||||||
|
} else if ($result == 0) {
|
||||||
|
|
||||||
|
$this->last_error = 'timeout on write select for connect()';
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* closes a socket connection to the DNS server
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function close()
|
||||||
|
{
|
||||||
|
if (is_resource($this->sock) === true) {
|
||||||
|
|
||||||
|
@socket_close($this->sock);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* writes the given string to the DNS server socket
|
||||||
|
*
|
||||||
|
* @param string $data a binary packed DNS packet
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function write($data)
|
||||||
|
{
|
||||||
|
$length = strlen($data);
|
||||||
|
if ($length == 0) {
|
||||||
|
|
||||||
|
$this->last_error = 'empty data on write()';
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$read = null;
|
||||||
|
$write = array($this->sock);
|
||||||
|
$except = null;
|
||||||
|
|
||||||
|
//
|
||||||
|
// select on write
|
||||||
|
//
|
||||||
|
$result = @socket_select($read, $write, $except, $this->timeout);
|
||||||
|
if ($result === false) {
|
||||||
|
|
||||||
|
$this->last_error = socket_strerror(socket_last_error());
|
||||||
|
return false;
|
||||||
|
|
||||||
|
} else if ($result == 0) {
|
||||||
|
|
||||||
|
$this->last_error = 'timeout on write select()';
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// if it's a TCP socket, then we need to packet and send the length of the
|
||||||
|
// data as the first 16bit of data.
|
||||||
|
//
|
||||||
|
if ($this->type == Net_DNS2_Socket::SOCK_STREAM) {
|
||||||
|
|
||||||
|
$s = chr($length >> 8) . chr($length);
|
||||||
|
|
||||||
|
if (@socket_write($this->sock, $s) === false) {
|
||||||
|
|
||||||
|
$this->last_error = socket_strerror(socket_last_error());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// write the data to the socket
|
||||||
|
//
|
||||||
|
$size = @socket_write($this->sock, $data);
|
||||||
|
if ( ($size === false) || ($size != $length) ) {
|
||||||
|
|
||||||
|
$this->last_error = socket_strerror(socket_last_error());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* reads a response from a DNS server
|
||||||
|
*
|
||||||
|
* @param integer &$size the size of the DNS packet read is passed back
|
||||||
|
*
|
||||||
|
* @return mixed returns the data on success and false on error
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function read(&$size, $max_size)
|
||||||
|
{
|
||||||
|
$read = array($this->sock);
|
||||||
|
$write = null;
|
||||||
|
$except = null;
|
||||||
|
|
||||||
|
//
|
||||||
|
// make sure our socket is non-blocking
|
||||||
|
//
|
||||||
|
if (@socket_set_nonblock($this->sock) === false) {
|
||||||
|
|
||||||
|
$this->last_error = socket_strerror(socket_last_error());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// select on read
|
||||||
|
//
|
||||||
|
$result = @socket_select($read, $write, $except, $this->timeout);
|
||||||
|
if ($result === false) {
|
||||||
|
|
||||||
|
$this->last_error = socket_strerror(socket_last_error());
|
||||||
|
return false;
|
||||||
|
|
||||||
|
} else if ($result == 0) {
|
||||||
|
|
||||||
|
$this->last_error = 'timeout on read select()';
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$data = '';
|
||||||
|
$length = $max_size;
|
||||||
|
|
||||||
|
//
|
||||||
|
// if it's a TCP socket, then the first two bytes is the length of the DNS
|
||||||
|
// packet- we need to read that off first, then use that value for the
|
||||||
|
// packet read.
|
||||||
|
//
|
||||||
|
if ($this->type == Net_DNS2_Socket::SOCK_STREAM) {
|
||||||
|
|
||||||
|
if (($size = @socket_recv($this->sock, $data, 2, 0)) === false) {
|
||||||
|
|
||||||
|
$this->last_error = socket_strerror(socket_last_error());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$length = ord($data[0]) << 8 | ord($data[1]);
|
||||||
|
if ($length < Net_DNS2_Lookups::DNS_HEADER_SIZE) {
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// at this point, we know that there is data on the socket to be read,
|
||||||
|
// because we've already extracted the length from the first two bytes.
|
||||||
|
//
|
||||||
|
// so the easiest thing to do, is just turn off socket blocking, and
|
||||||
|
// wait for the data.
|
||||||
|
//
|
||||||
|
if (@socket_set_block($this->sock) === false) {
|
||||||
|
|
||||||
|
$this->last_error = socket_strerror(socket_last_error());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// read the data from the socket
|
||||||
|
//
|
||||||
|
// loop while reading since some OS's (specifically Win < 2003) don't support
|
||||||
|
// MSG_WAITALL properly, so they may return with less data than is available.
|
||||||
|
//
|
||||||
|
// According to M$, XP and below don't support MSG_WAITALL at all; and there
|
||||||
|
// also seems to be some issue in 2003 and 2008 where the MSG_WAITALL is
|
||||||
|
// defined as 0, but if you actually pass 8 (which is the correct defined
|
||||||
|
// value), it works as it's supposed to- so in these cases, it's just the
|
||||||
|
// define that's incorrect- this is likely a PHP issue.
|
||||||
|
//
|
||||||
|
$data = '';
|
||||||
|
$size = 0;
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
|
||||||
|
$chunk_size = @socket_recv($this->sock, $chunk, $length, MSG_WAITALL);
|
||||||
|
if ($chunk_size === false) {
|
||||||
|
|
||||||
|
$size = $chunk_size;
|
||||||
|
$this->last_error = socket_strerror(socket_last_error());
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$data .= $chunk;
|
||||||
|
$size += $chunk_size;
|
||||||
|
|
||||||
|
$length -= $chunk_size;
|
||||||
|
if ( ($length <= 0) || ($this->type == Net_DNS2_Socket::SOCK_DGRAM) ) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
389
bundled-libs/Net/DNS2/Socket/Streams.php
Normal file
389
bundled-libs/Net/DNS2/Socket/Streams.php
Normal file
@ -0,0 +1,389 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2010 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 0.6.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Socket handling class using the PHP Streams
|
||||||
|
*
|
||||||
|
* The sockets extension is faster than the stream functions in PHP, but it's
|
||||||
|
* not standard. So if the extension is loaded, then the Net_DNS2_Socket_Sockets
|
||||||
|
* class it used, otherwise, this class it used.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2_Socket
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_Socket_Streams extends Net_DNS2_Socket
|
||||||
|
{
|
||||||
|
private $_context;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* opens a socket connection to the DNS server
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function open()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// create a list of options for the context
|
||||||
|
//
|
||||||
|
$opts = array('socket' => array());
|
||||||
|
|
||||||
|
//
|
||||||
|
// bind to a local IP/port if it's set
|
||||||
|
//
|
||||||
|
if (strlen($this->local_host) > 0) {
|
||||||
|
|
||||||
|
$opts['socket']['bindto'] = $this->local_host;
|
||||||
|
if ($this->local_port > 0) {
|
||||||
|
|
||||||
|
$opts['socket']['bindto'] .= ':' . $this->local_port;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// create the context
|
||||||
|
//
|
||||||
|
$this->_context = @stream_context_create($opts);
|
||||||
|
|
||||||
|
//
|
||||||
|
// create socket
|
||||||
|
//
|
||||||
|
$errno;
|
||||||
|
$errstr;
|
||||||
|
|
||||||
|
switch($this->type) {
|
||||||
|
case Net_DNS2_Socket::SOCK_STREAM:
|
||||||
|
|
||||||
|
if (Net_DNS2::isIPv4($this->host) == true) {
|
||||||
|
|
||||||
|
$this->sock = @stream_socket_client(
|
||||||
|
'tcp://' . $this->host . ':' . $this->port,
|
||||||
|
$errno, $errstr, $this->timeout,
|
||||||
|
STREAM_CLIENT_CONNECT, $this->_context
|
||||||
|
);
|
||||||
|
} else if (Net_DNS2::isIPv6($this->host) == true) {
|
||||||
|
|
||||||
|
$this->sock = @stream_socket_client(
|
||||||
|
'tcp://[' . $this->host . ']:' . $this->port,
|
||||||
|
$errno, $errstr, $this->timeout,
|
||||||
|
STREAM_CLIENT_CONNECT, $this->_context
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
|
||||||
|
$this->last_error = 'invalid address type: ' . $this->host;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case Net_DNS2_Socket::SOCK_DGRAM:
|
||||||
|
|
||||||
|
if (Net_DNS2::isIPv4($this->host) == true) {
|
||||||
|
|
||||||
|
$this->sock = @stream_socket_client(
|
||||||
|
'udp://' . $this->host . ':' . $this->port,
|
||||||
|
$errno, $errstr, $this->timeout,
|
||||||
|
STREAM_CLIENT_CONNECT, $this->_context
|
||||||
|
);
|
||||||
|
} else if (Net_DNS2::isIPv6($this->host) == true) {
|
||||||
|
|
||||||
|
$this->sock = @stream_socket_client(
|
||||||
|
'udp://[' . $this->host . ']:' . $this->port,
|
||||||
|
$errno, $errstr, $this->timeout,
|
||||||
|
STREAM_CLIENT_CONNECT, $this->_context
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
|
||||||
|
$this->last_error = 'invalid address type: ' . $this->host;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
$this->last_error = 'Invalid socket type: ' . $this->type;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->sock === false) {
|
||||||
|
|
||||||
|
$this->last_error = $errstr;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// set it to non-blocking and set the timeout
|
||||||
|
//
|
||||||
|
@stream_set_blocking($this->sock, 0);
|
||||||
|
@stream_set_timeout($this->sock, $this->timeout);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* closes a socket connection to the DNS server
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function close()
|
||||||
|
{
|
||||||
|
if (is_resource($this->sock) === true) {
|
||||||
|
|
||||||
|
@fclose($this->sock);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* writes the given string to the DNS server socket
|
||||||
|
*
|
||||||
|
* @param string $data a binary packed DNS packet
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function write($data)
|
||||||
|
{
|
||||||
|
$length = strlen($data);
|
||||||
|
if ($length == 0) {
|
||||||
|
|
||||||
|
$this->last_error = 'empty data on write()';
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$read = null;
|
||||||
|
$write = array($this->sock);
|
||||||
|
$except = null;
|
||||||
|
|
||||||
|
//
|
||||||
|
// select on write
|
||||||
|
//
|
||||||
|
$result = stream_select($read, $write, $except, $this->timeout);
|
||||||
|
if ($result === false) {
|
||||||
|
|
||||||
|
$this->last_error = 'failed on write select()';
|
||||||
|
return false;
|
||||||
|
|
||||||
|
} else if ($result == 0) {
|
||||||
|
|
||||||
|
$this->last_error = 'timeout on write select()';
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// if it's a TCP socket, then we need to packet and send the length of the
|
||||||
|
// data as the first 16bit of data.
|
||||||
|
//
|
||||||
|
if ($this->type == Net_DNS2_Socket::SOCK_STREAM) {
|
||||||
|
|
||||||
|
$s = chr($length >> 8) . chr($length);
|
||||||
|
|
||||||
|
if (@fwrite($this->sock, $s) === false) {
|
||||||
|
|
||||||
|
$this->last_error = 'failed to fwrite() 16bit length';
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// write the data to the socket
|
||||||
|
//
|
||||||
|
$size = @fwrite($this->sock, $data);
|
||||||
|
if ( ($size === false) || ($size != $length) ) {
|
||||||
|
|
||||||
|
$this->last_error = 'failed to fwrite() packet';
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* reads a response from a DNS server
|
||||||
|
*
|
||||||
|
* @param integer &$size the size of the DNS packet read is passed back
|
||||||
|
*
|
||||||
|
* @return mixed returns the data on success and false on error
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function read(&$size, $max_size)
|
||||||
|
{
|
||||||
|
$read = array($this->sock);
|
||||||
|
$write = null;
|
||||||
|
$except = null;
|
||||||
|
|
||||||
|
//
|
||||||
|
// make sure our socket is non-blocking
|
||||||
|
//
|
||||||
|
@stream_set_blocking($this->sock, 0);
|
||||||
|
|
||||||
|
//
|
||||||
|
// select on read
|
||||||
|
//
|
||||||
|
$result = stream_select($read, $write, $except, $this->timeout);
|
||||||
|
if ($result === false) {
|
||||||
|
|
||||||
|
$this->last_error = 'error on read select()';
|
||||||
|
return false;
|
||||||
|
|
||||||
|
} else if ($result == 0) {
|
||||||
|
|
||||||
|
$this->last_error = 'timeout on read select()';
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$data = '';
|
||||||
|
$length = $max_size;
|
||||||
|
|
||||||
|
//
|
||||||
|
// if it's a TCP socket, then the first two bytes is the length of the DNS
|
||||||
|
// packet- we need to read that off first, then use that value for the
|
||||||
|
// packet read.
|
||||||
|
//
|
||||||
|
if ($this->type == Net_DNS2_Socket::SOCK_STREAM) {
|
||||||
|
|
||||||
|
if (($data = fread($this->sock, 2)) === false) {
|
||||||
|
|
||||||
|
$this->last_error = 'failed on fread() for data length';
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$length = ord($data[0]) << 8 | ord($data[1]);
|
||||||
|
if ($length < Net_DNS2_Lookups::DNS_HEADER_SIZE) {
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// at this point, we know that there is data on the socket to be read,
|
||||||
|
// because we've already extracted the length from the first two bytes.
|
||||||
|
//
|
||||||
|
// so the easiest thing to do, is just turn off socket blocking, and
|
||||||
|
// wait for the data.
|
||||||
|
//
|
||||||
|
@stream_set_blocking($this->sock, 1);
|
||||||
|
|
||||||
|
//
|
||||||
|
// read the data from the socket
|
||||||
|
//
|
||||||
|
$data = '';
|
||||||
|
|
||||||
|
//
|
||||||
|
// the streams socket is weird for TCP sockets; it doesn't seem to always
|
||||||
|
// return all the data properly; but the looping code I added broke UDP
|
||||||
|
// packets- my fault-
|
||||||
|
//
|
||||||
|
// the sockets library works much better.
|
||||||
|
//
|
||||||
|
if ($this->type == Net_DNS2_Socket::SOCK_STREAM) {
|
||||||
|
|
||||||
|
$chunk = '';
|
||||||
|
$chunk_size = $length;
|
||||||
|
|
||||||
|
//
|
||||||
|
// loop so we make sure we read all the data
|
||||||
|
//
|
||||||
|
while (1) {
|
||||||
|
|
||||||
|
$chunk = fread($this->sock, $chunk_size);
|
||||||
|
if ($chunk === false) {
|
||||||
|
|
||||||
|
$this->last_error = 'failed on fread() for data';
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$data .= $chunk;
|
||||||
|
$chunk_size -= strlen($chunk);
|
||||||
|
|
||||||
|
if (strlen($data) >= $length) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
//
|
||||||
|
// if it's UDP, it's a single fixed-size frame, and the streams library
|
||||||
|
// doesn't seem to have a problem reading it.
|
||||||
|
//
|
||||||
|
$data = fread($this->sock, $length);
|
||||||
|
if ($length === false) {
|
||||||
|
|
||||||
|
$this->last_error = 'failed on fread() for data';
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$size = strlen($data);
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
654
bundled-libs/Net/DNS2/Updater.php
Normal file
654
bundled-libs/Net/DNS2/Updater.php
Normal file
@ -0,0 +1,654 @@
|
|||||||
|
<?php
|
||||||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DNS Library for handling lookups and updates.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, Mike Pultz <mike@mikepultz.com>.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Mike Pultz nor the names of his contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @copyright 2010 Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @since File available since Release 0.6.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The main dynamic DNS updater class.
|
||||||
|
*
|
||||||
|
* This class provices functions to handle all defined dynamic DNS update
|
||||||
|
* requests as defined by RFC 2136.
|
||||||
|
*
|
||||||
|
* This is separate from the Net_DNS2_Resolver class, as while the underlying
|
||||||
|
* protocol is the same, the functionality is completely different.
|
||||||
|
*
|
||||||
|
* Generally, query (recursive) lookups are done against caching server, while
|
||||||
|
* update requests are done against authoratative servers.
|
||||||
|
*
|
||||||
|
* @category Networking
|
||||||
|
* @package Net_DNS2
|
||||||
|
* @author Mike Pultz <mike@mikepultz.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||||
|
* @link http://pear.php.net/package/Net_DNS2
|
||||||
|
* @see Net_DNS2
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Net_DNS2_Updater extends Net_DNS2
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* a Net_DNS2_Packet_Request object used for the update request
|
||||||
|
*/
|
||||||
|
private $_packet;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor - builds a new Net_DNS2_Updater objected used for doing
|
||||||
|
* dynamic DNS updates
|
||||||
|
*
|
||||||
|
* @param string $zone the domain name to use for DNS updates
|
||||||
|
* @param mixed $options an array of config options or null
|
||||||
|
*
|
||||||
|
* @throws Net_DNS2_Exception
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function __construct($zone, array $options = null)
|
||||||
|
{
|
||||||
|
parent::__construct($options);
|
||||||
|
|
||||||
|
//
|
||||||
|
// create the packet
|
||||||
|
//
|
||||||
|
$this->_packet = new Net_DNS2_Packet_Request(
|
||||||
|
strtolower(trim($zone, " \n\r\t.")), 'SOA', 'IN'
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
// make sure the opcode on the packet is set to UPDATE
|
||||||
|
//
|
||||||
|
$this->_packet->header->opcode = Net_DNS2_Lookups::OPCODE_UPDATE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* checks that the given name matches the name for the zone we're updating
|
||||||
|
*
|
||||||
|
* @param string $name The name to be checked.
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @throws Net_DNS2_Exception
|
||||||
|
* @access private
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private function _checkName($name)
|
||||||
|
{
|
||||||
|
if (!preg_match('/' . $this->_packet->question[0]->qname . '$/', $name)) {
|
||||||
|
|
||||||
|
throw new Net_DNS2_Exception(
|
||||||
|
'name provided (' . $name . ') does not match zone name (' .
|
||||||
|
$this->_packet->question[0]->qname . ')',
|
||||||
|
Net_DNS2_Lookups::E_PACKET_INVALID
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* add a signature to the request for authentication
|
||||||
|
*
|
||||||
|
* @param string $keyname the key name to use for the TSIG RR
|
||||||
|
* @param string $signature the key to sign the request.
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @access public
|
||||||
|
* @see Net_DNS2::signTSIG()
|
||||||
|
* @deprecated function deprecated in 1.1.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function signature($keyname, $signature)
|
||||||
|
{
|
||||||
|
return $this->signTSIG($keyname, $signature);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 2.5.1 - Add To An RRset
|
||||||
|
*
|
||||||
|
* RRs are added to the Update Section whose NAME, TYPE, TTL, RDLENGTH
|
||||||
|
* and RDATA are those being added, and CLASS is the same as the zone
|
||||||
|
* class. Any duplicate RRs will be silently ignored by the primary
|
||||||
|
* master.
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_RR $rr the Net_DNS2_RR object to be added to the zone
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @throws Net_DNS2_Exception
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function add(Net_DNS2_RR $rr)
|
||||||
|
{
|
||||||
|
$this->_checkName($rr->name);
|
||||||
|
|
||||||
|
//
|
||||||
|
// add the RR to the "update" section
|
||||||
|
//
|
||||||
|
if (!in_array($rr, $this->_packet->authority)) {
|
||||||
|
$this->_packet->authority[] = $rr;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 2.5.4 - Delete An RR From An RRset
|
||||||
|
*
|
||||||
|
* RRs to be deleted are added to the Update Section. The NAME, TYPE,
|
||||||
|
* RDLENGTH and RDATA must match the RR being deleted. TTL must be
|
||||||
|
* specified as zero (0) and will otherwise be ignored by the primary
|
||||||
|
* master. CLASS must be specified as NONE to distinguish this from an
|
||||||
|
* RR addition. If no such RRs exist, then this Update RR will be
|
||||||
|
* silently ignored by the primary master.
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_RR $rr the Net_DNS2_RR object to be deleted from the zone
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @throws Net_DNS2_Exception
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function delete(Net_DNS2_RR $rr)
|
||||||
|
{
|
||||||
|
$this->_checkName($rr->name);
|
||||||
|
|
||||||
|
$rr->ttl = 0;
|
||||||
|
$rr->class = 'NONE';
|
||||||
|
|
||||||
|
//
|
||||||
|
// add the RR to the "update" section
|
||||||
|
//
|
||||||
|
if (!in_array($rr, $this->_packet->authority)) {
|
||||||
|
$this->_packet->authority[] = $rr;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 2.5.2 - Delete An RRset
|
||||||
|
*
|
||||||
|
* One RR is added to the Update Section whose NAME and TYPE are those
|
||||||
|
* of the RRset to be deleted. TTL must be specified as zero (0) and is
|
||||||
|
* otherwise not used by the primary master. CLASS must be specified as
|
||||||
|
* ANY. RDLENGTH must be zero (0) and RDATA must therefore be empty.
|
||||||
|
* If no such RRset exists, then this Update RR will be silently ignored
|
||||||
|
* by the primary master
|
||||||
|
*
|
||||||
|
* @param string $name the RR name to be removed from the zone
|
||||||
|
* @param string $type the RR type to be removed from the zone
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @throws Net_DNS2_Exception
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function deleteAny($name, $type)
|
||||||
|
{
|
||||||
|
$this->_checkName($name);
|
||||||
|
|
||||||
|
$class = Net_DNS2_Lookups::$rr_types_id_to_class[
|
||||||
|
Net_DNS2_Lookups::$rr_types_by_name[$type]
|
||||||
|
];
|
||||||
|
if (!isset($class)) {
|
||||||
|
|
||||||
|
throw new Net_DNS2_Exception(
|
||||||
|
'unknown or un-supported resource record type: ' . $type,
|
||||||
|
Net_DNS2_Lookups::E_RR_INVALID
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
$rr = new $class;
|
||||||
|
|
||||||
|
$rr->name = $name;
|
||||||
|
$rr->ttl = 0;
|
||||||
|
$rr->class = 'ANY';
|
||||||
|
$rr->rdlength = -1;
|
||||||
|
$rr->rdata = '';
|
||||||
|
|
||||||
|
//
|
||||||
|
// add the RR to the "update" section
|
||||||
|
//
|
||||||
|
if (!in_array($rr, $this->_packet->authority)) {
|
||||||
|
$this->_packet->authority[] = $rr;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 2.5.3 - Delete All RRsets From A Name
|
||||||
|
*
|
||||||
|
* One RR is added to the Update Section whose NAME is that of the name
|
||||||
|
* to be cleansed of RRsets. TYPE must be specified as ANY. TTL must
|
||||||
|
* be specified as zero (0) and is otherwise not used by the primary
|
||||||
|
* master. CLASS must be specified as ANY. RDLENGTH must be zero (0)
|
||||||
|
* and RDATA must therefore be empty. If no such RRsets exist, then
|
||||||
|
* this Update RR will be silently ignored by the primary master.
|
||||||
|
*
|
||||||
|
* @param string $name the RR name to be removed from the zone
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @throws Net_DNS2_Exception
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function deleteAll($name)
|
||||||
|
{
|
||||||
|
$this->_checkName($name);
|
||||||
|
|
||||||
|
//
|
||||||
|
// the Net_DNS2_RR_ANY class is just an empty stub class used for these
|
||||||
|
// cases only
|
||||||
|
//
|
||||||
|
$rr = new Net_DNS2_RR_ANY;
|
||||||
|
|
||||||
|
$rr->name = $name;
|
||||||
|
$rr->ttl = 0;
|
||||||
|
$rr->type = 'ANY';
|
||||||
|
$rr->class = 'ANY';
|
||||||
|
$rr->rdlength = -1;
|
||||||
|
$rr->rdata = '';
|
||||||
|
|
||||||
|
//
|
||||||
|
// add the RR to the "update" section
|
||||||
|
//
|
||||||
|
if (!in_array($rr, $this->_packet->authority)) {
|
||||||
|
$this->_packet->authority[] = $rr;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 2.4.1 - RRset Exists (Value Independent)
|
||||||
|
*
|
||||||
|
* At least one RR with a specified NAME and TYPE (in the zone and class
|
||||||
|
* specified in the Zone Section) must exist.
|
||||||
|
*
|
||||||
|
* For this prerequisite, a requestor adds to the section a single RR
|
||||||
|
* whose NAME and TYPE are equal to that of the zone RRset whose
|
||||||
|
* existence is required. RDLENGTH is zero and RDATA is therefore
|
||||||
|
* empty. CLASS must be specified as ANY to differentiate this
|
||||||
|
* condition from that of an actual RR whose RDLENGTH is naturally zero
|
||||||
|
* (0) (e.g., NULL). TTL is specified as zero (0).
|
||||||
|
*
|
||||||
|
* @param string $name the RR name for the prerequisite
|
||||||
|
* @param string $type the RR type for the prerequisite
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @throws Net_DNS2_Exception
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function checkExists($name, $type)
|
||||||
|
{
|
||||||
|
$this->_checkName($name);
|
||||||
|
|
||||||
|
$class = Net_DNS2_Lookups::$rr_types_id_to_class[
|
||||||
|
Net_DNS2_Lookups::$rr_types_by_name[$type]
|
||||||
|
];
|
||||||
|
if (!isset($class)) {
|
||||||
|
|
||||||
|
throw new Net_DNS2_Exception(
|
||||||
|
'unknown or un-supported resource record type: ' . $type,
|
||||||
|
Net_DNS2_Lookups::E_RR_INVALID
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
$rr = new $class;
|
||||||
|
|
||||||
|
$rr->name = $name;
|
||||||
|
$rr->ttl = 0;
|
||||||
|
$rr->class = 'ANY';
|
||||||
|
$rr->rdlength = -1;
|
||||||
|
$rr->rdata = '';
|
||||||
|
|
||||||
|
//
|
||||||
|
// add the RR to the "prerequisite" section
|
||||||
|
//
|
||||||
|
if (!in_array($rr, $this->_packet->answer)) {
|
||||||
|
$this->_packet->answer[] = $rr;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 2.4.2 - RRset Exists (Value Dependent)
|
||||||
|
*
|
||||||
|
* A set of RRs with a specified NAME and TYPE exists and has the same
|
||||||
|
* members with the same RDATAs as the RRset specified here in this
|
||||||
|
* section. While RRset ordering is undefined and therefore not
|
||||||
|
* significant to this comparison, the sets be identical in their
|
||||||
|
* extent.
|
||||||
|
*
|
||||||
|
* For this prerequisite, a requestor adds to the section an entire
|
||||||
|
* RRset whose preexistence is required. NAME and TYPE are that of the
|
||||||
|
* RRset being denoted. CLASS is that of the zone. TTL must be
|
||||||
|
* specified as zero (0) and is ignored when comparing RRsets for
|
||||||
|
* identity.
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_RR $rr the RR object to be used as a prerequisite
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @throws Net_DNS2_Exception
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function checkValueExists(Net_DNS2_RR $rr)
|
||||||
|
{
|
||||||
|
$this->_checkName($rr->name);
|
||||||
|
|
||||||
|
$rr->ttl = 0;
|
||||||
|
|
||||||
|
//
|
||||||
|
// add the RR to the "prerequisite" section
|
||||||
|
//
|
||||||
|
if (!in_array($rr, $this->_packet->answer)) {
|
||||||
|
$this->_packet->answer[] = $rr;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 2.4.3 - RRset Does Not Exist
|
||||||
|
*
|
||||||
|
* No RRs with a specified NAME and TYPE (in the zone and class denoted
|
||||||
|
* by the Zone Section) can exist.
|
||||||
|
*
|
||||||
|
* For this prerequisite, a requestor adds to the section a single RR
|
||||||
|
* whose NAME and TYPE are equal to that of the RRset whose nonexistence
|
||||||
|
* is required. The RDLENGTH of this record is zero (0), and RDATA
|
||||||
|
* field is therefore empty. CLASS must be specified as NONE in order
|
||||||
|
* to distinguish this condition from a valid RR whose RDLENGTH is
|
||||||
|
* naturally zero (0) (for example, the NULL RR). TTL must be specified
|
||||||
|
* as zero (0).
|
||||||
|
*
|
||||||
|
* @param string $name the RR name for the prerequisite
|
||||||
|
* @param string $type the RR type for the prerequisite
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @throws Net_DNS2_Exception
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function checkNotExists($name, $type)
|
||||||
|
{
|
||||||
|
$this->_checkName($name);
|
||||||
|
|
||||||
|
$class = Net_DNS2_Lookups::$rr_types_id_to_class[
|
||||||
|
Net_DNS2_Lookups::$rr_types_by_name[$type]
|
||||||
|
];
|
||||||
|
if (!isset($class)) {
|
||||||
|
|
||||||
|
throw new Net_DNS2_Exception(
|
||||||
|
'unknown or un-supported resource record type: ' . $type,
|
||||||
|
Net_DNS2_Lookups::E_RR_INVALID
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
$rr = new $class;
|
||||||
|
|
||||||
|
$rr->name = $name;
|
||||||
|
$rr->ttl = 0;
|
||||||
|
$rr->class = 'NONE';
|
||||||
|
$rr->rdlength = -1;
|
||||||
|
$rr->rdata = '';
|
||||||
|
|
||||||
|
//
|
||||||
|
// add the RR to the "prerequisite" section
|
||||||
|
//
|
||||||
|
if (!in_array($rr, $this->_packet->answer)) {
|
||||||
|
$this->_packet->answer[] = $rr;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 2.4.4 - Name Is In Use
|
||||||
|
*
|
||||||
|
* Name is in use. At least one RR with a specified NAME (in the zone
|
||||||
|
* and class specified by the Zone Section) must exist. Note that this
|
||||||
|
* prerequisite is NOT satisfied by empty nonterminals.
|
||||||
|
*
|
||||||
|
* For this prerequisite, a requestor adds to the section a single RR
|
||||||
|
* whose NAME is equal to that of the name whose ownership of an RR is
|
||||||
|
* required. RDLENGTH is zero and RDATA is therefore empty. CLASS must
|
||||||
|
* be specified as ANY to differentiate this condition from that of an
|
||||||
|
* actual RR whose RDLENGTH is naturally zero (0) (e.g., NULL). TYPE
|
||||||
|
* must be specified as ANY to differentiate this case from that of an
|
||||||
|
* RRset existence test. TTL is specified as zero (0).
|
||||||
|
*
|
||||||
|
* @param string $name the RR name for the prerequisite
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @throws Net_DNS2_Exception
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function checkNameInUse($name)
|
||||||
|
{
|
||||||
|
$this->_checkName($name);
|
||||||
|
|
||||||
|
//
|
||||||
|
// the Net_DNS2_RR_ANY class is just an empty stub class used for these
|
||||||
|
// cases only
|
||||||
|
//
|
||||||
|
$rr = new Net_DNS2_RR_ANY;
|
||||||
|
|
||||||
|
$rr->name = $name;
|
||||||
|
$rr->ttl = 0;
|
||||||
|
$rr->type = 'ANY';
|
||||||
|
$rr->class = 'ANY';
|
||||||
|
$rr->rdlength = -1;
|
||||||
|
$rr->rdata = '';
|
||||||
|
|
||||||
|
//
|
||||||
|
// add the RR to the "prerequisite" section
|
||||||
|
//
|
||||||
|
if (!in_array($rr, $this->_packet->answer)) {
|
||||||
|
$this->_packet->answer[] = $rr;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 2.4.5 - Name Is Not In Use
|
||||||
|
*
|
||||||
|
* Name is not in use. No RR of any type is owned by a specified NAME.
|
||||||
|
* Note that this prerequisite IS satisfied by empty nonterminals.
|
||||||
|
*
|
||||||
|
* For this prerequisite, a requestor adds to the section a single RR
|
||||||
|
* whose NAME is equal to that of the name whose nonownership of any RRs
|
||||||
|
* is required. RDLENGTH is zero and RDATA is therefore empty. CLASS
|
||||||
|
* must be specified as NONE. TYPE must be specified as ANY. TTL must
|
||||||
|
* be specified as zero (0).
|
||||||
|
*
|
||||||
|
* @param string $name the RR name for the prerequisite
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @throws Net_DNS2_Exception
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function checkNameNotInUse($name)
|
||||||
|
{
|
||||||
|
$this->_checkName($name);
|
||||||
|
|
||||||
|
//
|
||||||
|
// the Net_DNS2_RR_ANY class is just an empty stub class used for these
|
||||||
|
// cases only
|
||||||
|
//
|
||||||
|
$rr = new Net_DNS2_RR_ANY;
|
||||||
|
|
||||||
|
$rr->name = $name;
|
||||||
|
$rr->ttl = 0;
|
||||||
|
$rr->type = 'ANY';
|
||||||
|
$rr->class = 'NONE';
|
||||||
|
$rr->rdlength = -1;
|
||||||
|
$rr->rdata = '';
|
||||||
|
|
||||||
|
//
|
||||||
|
// add the RR to the "prerequisite" section
|
||||||
|
//
|
||||||
|
if (!in_array($rr, $this->_packet->answer)) {
|
||||||
|
$this->_packet->answer[] = $rr;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns the current internal packet object.
|
||||||
|
*
|
||||||
|
* @return Net_DNS2_Packet_Request
|
||||||
|
* @access public
|
||||||
|
#
|
||||||
|
*/
|
||||||
|
public function packet()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// take a copy
|
||||||
|
//
|
||||||
|
$p = $this->_packet;
|
||||||
|
|
||||||
|
//
|
||||||
|
// check for an authentication method; either TSIG or SIG
|
||||||
|
//
|
||||||
|
if ( ($this->auth_signature instanceof Net_DNS2_RR_TSIG)
|
||||||
|
|| ($this->auth_signature instanceof Net_DNS2_RR_SIG)
|
||||||
|
) {
|
||||||
|
$p->additional[] = $this->auth_signature;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// update the counts
|
||||||
|
//
|
||||||
|
$p->header->qdcount = count($p->question);
|
||||||
|
$p->header->ancount = count($p->answer);
|
||||||
|
$p->header->nscount = count($p->authority);
|
||||||
|
$p->header->arcount = count($p->additional);
|
||||||
|
|
||||||
|
return $p;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* executes the update request with the object informaton
|
||||||
|
*
|
||||||
|
* @param Net_DNS2_Packet_Response &$response ref to the response object
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @throws Net_DNS2_Exception
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function update(&$response = null)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// make sure we have some name servers set
|
||||||
|
//
|
||||||
|
$this->checkServers(Net_DNS2::RESOLV_CONF);
|
||||||
|
|
||||||
|
//
|
||||||
|
// check for an authentication method; either TSIG or SIG
|
||||||
|
//
|
||||||
|
if ( ($this->auth_signature instanceof Net_DNS2_RR_TSIG)
|
||||||
|
|| ($this->auth_signature instanceof Net_DNS2_RR_SIG)
|
||||||
|
) {
|
||||||
|
$this->_packet->additional[] = $this->auth_signature;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// update the counts
|
||||||
|
//
|
||||||
|
$this->_packet->header->qdcount = count($this->_packet->question);
|
||||||
|
$this->_packet->header->ancount = count($this->_packet->answer);
|
||||||
|
$this->_packet->header->nscount = count($this->_packet->authority);
|
||||||
|
$this->_packet->header->arcount = count($this->_packet->additional);
|
||||||
|
|
||||||
|
//
|
||||||
|
// make sure we have some data to send
|
||||||
|
//
|
||||||
|
if ( ($this->_packet->header->qdcount == 0)
|
||||||
|
|| ($this->_packet->header->nscount == 0)
|
||||||
|
) {
|
||||||
|
throw new Net_DNS2_Exception(
|
||||||
|
'empty headers- nothing to send!',
|
||||||
|
Net_DNS2_Lookups::E_PACKET_INVALID
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// send the packet and get back the response
|
||||||
|
//
|
||||||
|
$response = $this->sendPacket($this->_packet, $this->use_tcp);
|
||||||
|
|
||||||
|
//
|
||||||
|
// clear the internal packet so if we make another request, we don't have
|
||||||
|
// old data being sent.
|
||||||
|
//
|
||||||
|
$this->_packet->reset();
|
||||||
|
|
||||||
|
//
|
||||||
|
// for updates, we just need to know it worked- we don't actualy need to
|
||||||
|
// return the response object
|
||||||
|
//
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* c-hanging-comment-ender-p: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
?>
|
@ -31,7 +31,7 @@
|
|||||||
* @since File available since Release 1.0.0
|
* @since File available since Release 1.0.0
|
||||||
*/
|
*/
|
||||||
|
|
||||||
require_once 'Net/DNS.php';
|
require_once 'Net/DNS2.php';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* PEAR::Net_DNSBL
|
* PEAR::Net_DNSBL
|
||||||
@ -216,14 +216,19 @@ class Net_DNSBL
|
|||||||
public function isListed($host, $checkall = false)
|
public function isListed($host, $checkall = false)
|
||||||
{
|
{
|
||||||
$isListed = false;
|
$isListed = false;
|
||||||
$resolver = new Net_DNS_Resolver;
|
$resolver = new Net_DNS2_Resolver;
|
||||||
|
|
||||||
if (!is_string($host)) {
|
if (!is_string($host)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($this->blacklists as $blacklist) {
|
foreach ($this->blacklists as $blacklist) {
|
||||||
$response = $resolver->query($this->getHostForLookup($host, $blacklist));
|
$response = null;
|
||||||
|
try {
|
||||||
|
$response = $resolver->query($this->getHostForLookup($host, $blacklist));
|
||||||
|
} catch (Net_DNS2_Exception $e) {
|
||||||
|
$response = null;
|
||||||
|
}
|
||||||
if ($response) {
|
if ($response) {
|
||||||
$isListed = true;
|
$isListed = true;
|
||||||
if ($checkall) {
|
if ($checkall) {
|
||||||
@ -287,7 +292,7 @@ class Net_DNSBL
|
|||||||
if (filter_var($host, FILTER_VALIDATE_IP)) {
|
if (filter_var($host, FILTER_VALIDATE_IP)) {
|
||||||
$ip = $host;
|
$ip = $host;
|
||||||
} else {
|
} else {
|
||||||
$resolver = new Net_DNS_Resolver;
|
$resolver = new Net_DNS2_Resolver;
|
||||||
$response = $resolver->query($host);
|
$response = $resolver->query($host);
|
||||||
$ip = isset($response->answer[0]->address) ?
|
$ip = isset($response->answer[0]->address) ?
|
||||||
$response->answer[0]->address : null;
|
$response->answer[0]->address : null;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user