Compare commits
388 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 4169484361 | |||
| aed19e6be3 | |||
| 0d7094582f | |||
| 32f1a958bf | |||
| 60e975ee27 | |||
| e27e3e98c7 | |||
| 2b3663b7f2 | |||
| f418bcbd75 | |||
| b90448a71d | |||
| 6cab32aa5a | |||
| a9153e1a2b | |||
| ba6ccb3dbb | |||
| 623b2f8879 | |||
| 5e36b3d56f | |||
| 983ed4e2cb | |||
| e19222597b | |||
| ff2e85e14d | |||
| 5345c065f6 | |||
| 07bfc8e98f | |||
| 1deffbca75 | |||
| 0f36e361a0 | |||
| 085ce82751 | |||
| 74bc407b7a | |||
| 3f25d99a3e | |||
| ae28f55062 | |||
| 9715f28615 | |||
| 46c408c19b | |||
| 76fdc3af55 | |||
| c3fce509c0 | |||
| ac2575bd5b | |||
| e9f0fb2315 | |||
| 9b688f00f9 | |||
| 2c0c337a6d | |||
| 14893629ba | |||
| e82571beed | |||
| bcbc3e41ef | |||
| 5aca7bd1b4 | |||
| 18d3cfeeac | |||
| 96f82d9f3a | |||
| 34bf25066c | |||
| c610f92b7f | |||
| 8469506b0f | |||
| ceaee85d3b | |||
| eda8f71065 | |||
| 57bb0b1e9a | |||
| 7df9051019 | |||
| b9223e0555 | |||
| 2cc1f2d3f7 | |||
| 59bfb5095b | |||
| 6191c740fe | |||
| 9a8fb7a696 | |||
| 99b8190180 | |||
| b6cbaee339 | |||
| 92a1106405 | |||
| 0faf2b9899 | |||
| eafb79546d | |||
| 6c699f2ce5 | |||
| 260efcc5a6 | |||
| d77a9ae509 | |||
| 43f5181b6a | |||
| 0d60caab07 | |||
| acc87400eb | |||
| c87938cd42 | |||
| f5d5b73c26 | |||
| 2fb8017a72 | |||
| db0f47a10a | |||
| 722c1cf7f8 | |||
| c1908949fc | |||
| 164fbfd2d5 | |||
| e6c97f4148 | |||
| cd0adf5550 | |||
| d75ace7440 | |||
| a93b232c68 | |||
| 04cc9d0699 | |||
| f948279583 | |||
| c737565c13 | |||
| f295a3b123 | |||
| 153b5a37f1 | |||
| ba9c401697 | |||
| 4c4545428d | |||
| fd00877141 | |||
| f1c796b129 | |||
| b9617be068 | |||
| e0f230dd15 | |||
| 567e170338 | |||
| d52f0004a4 | |||
| fc02b0306b | |||
| 839d45675c | |||
| 88073e9816 | |||
| 15adc798e5 | |||
| 98261856db | |||
| 668dc88b96 | |||
| f049892e39 | |||
| 1b518e5b46 | |||
| 4445926033 | |||
| e3aaefd2e9 | |||
| 732f1ae851 | |||
| 0dc6f620c1 | |||
| b8745330e4 | |||
| 0b259ce52f | |||
| fdb4428191 | |||
| 33d090e8b6 | |||
| 52838c0f7b | |||
| 10585fff80 | |||
| f5207ea5f4 | |||
| 66e6293a92 | |||
| 159f7d98b7 | |||
| fa58d770be | |||
| 4568bd892e | |||
| 23b6701174 | |||
| 7aec3f702d | |||
| c7bd6fafc7 | |||
| 275963c6fb | |||
| e4567b255b | |||
| 166b2d4658 | |||
| a462413025 | |||
| 58ed05f187 | |||
| 2960938f96 | |||
| 5544b34253 | |||
| 835b076c99 | |||
| b664435ef6 | |||
| 368dca4379 | |||
| ef557fbb6a | |||
| 17fc123a54 | |||
| 0b967cc765 | |||
| 65c9aa63eb | |||
| 3ef108634c | |||
| 0a35bd4c59 | |||
| 2b33e231e4 | |||
| 0e479083f3 | |||
| 2a853f44ee | |||
| 2ecd2bdd13 | |||
| 9b8a547ca8 | |||
| 2f327ce463 | |||
| 2669745975 | |||
| 47b8a13911 | |||
| 5504f85373 | |||
| a42cc8da66 | |||
| 4387556026 | |||
| 005a86da1c | |||
| 1afc4d929d | |||
| 19513cdf14 | |||
| e09b2600c6 | |||
| 280a2f1c00 | |||
| c64fd17550 | |||
| 9d1fa83a39 | |||
| 23d3a73b01 | |||
| 567587718b | |||
| 4c671ead1c | |||
| 3ba160c52a | |||
| 3ef2b78014 | |||
| c7c133ef1d | |||
| 9e8eebac15 | |||
| bfce8ffb61 | |||
| e23fed0a47 | |||
| 775b71134c | |||
| fcb8b3e72b | |||
| d0a23274b4 | |||
| 575ec3f165 | |||
| a699623ada | |||
| f5d13f3263 | |||
| c22653e001 | |||
| 5ba0c006ab | |||
| b6d06e16c0 | |||
| 0bdae3b18c | |||
| 40993037b2 | |||
| 5f5d809b10 | |||
| c40aafcd1a | |||
| d10aaf8ffd | |||
| 02b70e2266 | |||
| dcb693ba54 | |||
| b0fb8d2d12 | |||
| 270c370c2a | |||
| 1ae46203c3 | |||
| 84b0cecfa3 | |||
| 0d8cdd59fa | |||
| 493ddde07a | |||
| 7994bda7b5 | |||
| d459d54271 | |||
| eafc4dd625 | |||
| 52a41b37d5 | |||
| 4a43761e72 | |||
| b2eecb9a3d | |||
| 7bc9067674 | |||
| bac3e5fb41 | |||
| 4d30cf3b07 | |||
| 967935195c | |||
| 43b9f607d3 | |||
| b837adde3c | |||
| 0ee37818f2 | |||
| d9db68ac5f | |||
| cacf778480 | |||
| be3df87b97 | |||
| e2a35c3694 | |||
| 440b189372 | |||
| 0f9bfe3fda | |||
| d3e6a3ee3a | |||
| 30b57a1e42 | |||
| 8b1ae7cee8 | |||
| 59f8837ab2 | |||
| 07d75a6d65 | |||
| 405fa77e3f | |||
| b7f479e9fc | |||
| 93c95407aa | |||
| 1131a79aaf | |||
| a920a3aa67 | |||
| bf4f484fe0 | |||
| a34f6739a5 | |||
| efeede599b | |||
| c1b84508ea | |||
| 74f7acb69d | |||
| bfeccabcdb | |||
| 4046d811a7 | |||
| 6751bd8d52 | |||
| 2debad91d0 | |||
| 2b4ddde690 | |||
| bf213b752d | |||
| e61d38a61d | |||
| c8bbb35aac | |||
| b6b989440d | |||
| e6cf472b01 | |||
| 7dfed291ae | |||
| c43b419939 | |||
| 02b3959ac4 | |||
| 88a89436ae | |||
| 284fffb750 | |||
| c585f73f8c | |||
| e1733604a5 | |||
| 18f6429f32 | |||
| 565b8ef51d | |||
| 68a6a58780 | |||
| 02542a4527 | |||
| 721c2a07d4 | |||
| c8d9e7c5c8 | |||
| 019dc37836 | |||
| 6a6a402cc3 | |||
| 594c8177f5 | |||
| 099c06f11d | |||
| 07261b0389 | |||
| 6be1fb1d02 | |||
| e7e030d54d | |||
| 481b821bae | |||
| 10caea1b92 | |||
| b524f7561b | |||
| 59d17ee112 | |||
| 6b775e1cac | |||
| 309d3fc7c5 | |||
| 82b79ef4d6 | |||
| 5ad93297ed | |||
| 19b023529d | |||
| 8c509d93b2 | |||
| fd412dad00 | |||
| 13750e09e5 | |||
| 701ebe442d | |||
| 8fee805ca1 | |||
| 9365836307 | |||
| c3dfe61b57 | |||
| 488267a6cf | |||
| 0b85c80ac9 | |||
| 2bedc9243e | |||
| a794481941 | |||
| a385c10890 | |||
| 7832c364d7 | |||
| b8897b3250 | |||
| 86a17f9a2b | |||
| 3e442e73ff | |||
| 5a95db314a | |||
| 4d8f04d406 | |||
| 3702139dcf | |||
| 8791e8929e | |||
| cdf375623d | |||
| d98eaed44c | |||
| cea0240240 | |||
| e256e65846 | |||
| 3a7e04c69c | |||
| e28bbf04d2 | |||
| 381b066344 | |||
| 9511b9dde5 | |||
| 7a0a9e2156 | |||
| dd06eeea99 | |||
| 55ec5e4ab4 | |||
| c2cebad52b | |||
| d4d46855c2 | |||
| ba6d9ee127 | |||
| 2b5de12b38 | |||
| 97277cfd1a | |||
| 5bf0cf9fea | |||
| 69d8a34c90 | |||
| 7e70f91686 | |||
| f947c66f66 | |||
| c62d667287 | |||
| 6285933470 | |||
| a48708021c | |||
| edfc8bcff1 | |||
| 4e8c310156 | |||
| 0c8416f5df | |||
| 6b1348a7f1 | |||
| fd2f23f3e7 | |||
| ccfc8c31c2 | |||
| 99e9b70c9b | |||
| e9f98f80f0 | |||
| cb03731e90 | |||
| e2a665e13b | |||
| dc3eb1e735 | |||
| 26de428c18 | |||
| f06aeb2340 | |||
| 309cf8e9a6 | |||
| 5ed6ace0f5 | |||
| 090c212d09 | |||
| 7b354c1cf7 | |||
| 69f5515ea3 | |||
| eda47a1ffc | |||
| a81c480d5e | |||
| 7410465496 | |||
| fbcd6d9c98 | |||
| c6089ba4fd | |||
| 2b70ef0203 | |||
| 8334348a13 | |||
| d3d205ece9 | |||
| d9b1baab76 | |||
| 31799a28c0 | |||
| 42c5dc9288 | |||
| 196c3becb2 | |||
| d7980e5f94 | |||
| c5c953b2f5 | |||
| 929fe9ade7 | |||
| 846dbbeb85 | |||
| eedd984e0d | |||
| 06e33c5421 | |||
| 4aaa9845eb | |||
| d60a7da9c3 | |||
| 20ade83792 | |||
| 80f3b39502 | |||
| 1bb335dc17 | |||
| cfd75ec877 | |||
| c1e4f4c533 | |||
| 80c7f273f2 | |||
| 8b75c064e3 | |||
| 177044c941 | |||
| b38de07b94 | |||
| 07f8349edb | |||
| 40d4dc986e | |||
| d1d7097fe9 | |||
| 268b87d21d | |||
| 120b3f90a0 | |||
| 6a19dac69d | |||
| 16c98885b7 | |||
| ce7af03e66 | |||
| 6d68ec389d | |||
| e44f7a506e | |||
| 2797bfdf02 | |||
| ce40532680 | |||
| 34fc78c89d | |||
| b7e2d57290 | |||
| 3aed346370 | |||
| 5108486af3 | |||
| 9a4c26f13f | |||
| f15cb17755 | |||
| acef784f41 | |||
| 58ed1f8ec6 | |||
| 0490401f3a | |||
| 9dfa482a96 | |||
| b73dd8bb1e | |||
| d97cdf7378 | |||
| b6ac03e8a1 | |||
| 18b1ef5ab4 | |||
| 8641a4198e | |||
| 460b416b7c | |||
| b22ef8d1ce | |||
| 3179ed7d57 | |||
| d31c8960f8 | |||
| 6419df26e0 | |||
| 8affa1126a | |||
| f300de0e01 | |||
| b5fbccb669 | |||
| 04d3c3ba96 | |||
| e30266427e | |||
| d9ac1542ac | |||
| 84709381af | |||
| 3aed0ac0f6 | |||
| 1669d72046 | |||
| 26c462acff | |||
| f9482cc1aa | |||
| d973e99933 | |||
| b39bf70345 | |||
| 130d32ae1a | |||
| 48e8dc008c | |||
| 20f1ee4cef |
+7
-1
@@ -1,6 +1,13 @@
|
||||
# application stuff
|
||||
uploads/*
|
||||
templates_c/*
|
||||
serendipity_config_local.inc.php
|
||||
plugins/additional_plugins*
|
||||
|
||||
# php stuff
|
||||
composer.lock
|
||||
|
||||
# ide / dev stuff
|
||||
.cvsignore
|
||||
.htaccess*
|
||||
*.db
|
||||
@@ -8,7 +15,6 @@ private/*
|
||||
archives/*
|
||||
*~
|
||||
DEADJOE
|
||||
plugins/additional_plugins*
|
||||
/.settings
|
||||
/.buildpath
|
||||
/.project
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
# Contributor Covenant Code of Conduct
|
||||
|
||||
## Our Pledge
|
||||
|
||||
In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.
|
||||
|
||||
## Our Standards
|
||||
|
||||
Examples of behavior that contributes to creating a positive environment include:
|
||||
|
||||
* Using welcoming and inclusive language
|
||||
* Being respectful of differing viewpoints and experiences
|
||||
* Gracefully accepting constructive criticism
|
||||
* Focusing on what is best for the community
|
||||
* Showing empathy towards other community members
|
||||
|
||||
Examples of unacceptable behavior by participants include:
|
||||
|
||||
* The use of sexualized language or imagery and unwelcome sexual attention or advances
|
||||
* Trolling, insulting/derogatory comments, and personal or political attacks
|
||||
* Public or private harassment
|
||||
* Publishing others' private information, such as a physical or electronic address, without explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate in a professional setting
|
||||
|
||||
## Our Responsibilities
|
||||
|
||||
Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
|
||||
|
||||
Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
|
||||
|
||||
## Scope
|
||||
|
||||
This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.
|
||||
|
||||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at `serendipity {at} supergarv (dot) de`. All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
|
||||
|
||||
Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
|
||||
|
||||
## Attribution
|
||||
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]
|
||||
|
||||
[homepage]: http://contributor-covenant.org
|
||||
[version]: http://contributor-covenant.org/version/1/4/
|
||||
@@ -0,0 +1 @@
|
||||
Please see [Contributing/support](https://docs.s9y.org/docs/contributing/index.html).
|
||||
@@ -0,0 +1,29 @@
|
||||
BSD 3-Clause License
|
||||
|
||||
Copyright (c) 2003-2019, Jannis Hermanns (on behalf the Serendipity Developer Team)
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice, this
|
||||
list of conditions and the following disclaimer.
|
||||
|
||||
2. 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.
|
||||
|
||||
3. Neither the name of the copyright holder nor the names of its
|
||||
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 HOLDER 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, STRICT 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.
|
||||
+2
-3
@@ -1,4 +1,3 @@
|
||||
# Serendipity - a PHP Weblog/Blog software
|
||||
|
||||
[Serendipity](http://s9y.org) is a PHP-powered weblog application which gives the user an easy way to maintain an online diary, weblog or even a complete homepage. While the default package is designed for the casual blogger, Serendipity offers a flexible, expandable and easy-to-use framework with the power for professional applications.
|
||||
# Serendipity - A reliable, secure & extensible PHP blog
|
||||
|
||||
[Serendipity](https://s9y.org) is a PHP-powered weblog engine which gives the user an easy way to maintain a blog. While the default package is designed for the casual blogger, Serendipity offers an expandable framework with the power for professional applications.
|
||||
@@ -930,11 +930,6 @@ class HTTP_Request2 implements SplSubject
|
||||
if (empty($this->adapter)) {
|
||||
$this->setAdapter($this->getConfig('adapter'));
|
||||
}
|
||||
// magic_quotes_runtime may break file uploads and chunked response
|
||||
// processing; see bug #4543. Don't use ini_get() here; see bug #16440.
|
||||
if ($magicQuotes = get_magic_quotes_runtime()) {
|
||||
set_magic_quotes_runtime(false);
|
||||
}
|
||||
// force using single byte encoding if mbstring extension overloads
|
||||
// strlen() and substr(); see bug #1781, bug #10605
|
||||
if (extension_loaded('mbstring') && (2 & ini_get('mbstring.func_overload'))) {
|
||||
@@ -947,9 +942,6 @@ class HTTP_Request2 implements SplSubject
|
||||
} catch (Exception $e) {
|
||||
}
|
||||
// cleanup in either case (poor man's "finally" clause)
|
||||
if ($magicQuotes) {
|
||||
set_magic_quotes_runtime(true);
|
||||
}
|
||||
if (!empty($oldEncoding)) {
|
||||
mb_internal_encoding($oldEncoding);
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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:
|
||||
*/
|
||||
?>
|
||||
@@ -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
|
||||
*/
|
||||
|
||||
require_once 'Net/DNS.php';
|
||||
require_once 'Net/DNS2.php';
|
||||
|
||||
/**
|
||||
* PEAR::Net_DNSBL
|
||||
@@ -216,14 +216,19 @@ class Net_DNSBL
|
||||
public function isListed($host, $checkall = false)
|
||||
{
|
||||
$isListed = false;
|
||||
$resolver = new Net_DNS_Resolver;
|
||||
$resolver = new Net_DNS2_Resolver;
|
||||
|
||||
if (!is_string($host)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
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) {
|
||||
$isListed = true;
|
||||
if ($checkall) {
|
||||
@@ -287,7 +292,7 @@ class Net_DNSBL
|
||||
if (filter_var($host, FILTER_VALIDATE_IP)) {
|
||||
$ip = $host;
|
||||
} else {
|
||||
$resolver = new Net_DNS_Resolver;
|
||||
$resolver = new Net_DNS2_Resolver;
|
||||
$response = $resolver->query($host);
|
||||
$ip = isset($response->answer[0]->address) ?
|
||||
$response->answer[0]->address : null;
|
||||
|
||||
@@ -125,7 +125,12 @@ class ONYX_RSS
|
||||
|
||||
require_once S9Y_PEAR_PATH . 'HTTP/Request2.php';
|
||||
serendipity_request_start();
|
||||
$req = new HTTP_Request2($uri, HTTP_Request2::METHOD_GET, array('follow_redirects' => true, 'max_redirects' => 5));
|
||||
$options = array('follow_redirects' => true, 'max_redirects' => 5);
|
||||
if (version_compare(PHP_VERSION, '5.6.0', '<')) {
|
||||
// On earlier PHP versions, the certificate validation fails. We deactivate it on them to restore the functionality we had with HTTP/Request1
|
||||
$options['ssl_verify_peer'] = false;
|
||||
}
|
||||
$req = new HTTP_Request2($uri, HTTP_Request2::METHOD_GET, $options);
|
||||
try {
|
||||
$res = $req->send();
|
||||
|
||||
@@ -348,7 +353,12 @@ class ONYX_RSS
|
||||
{
|
||||
require_once S9Y_PEAR_PATH . 'HTTP/Request2.php';
|
||||
serendipity_request_start();
|
||||
$req = new HTTP_Request2($uri);
|
||||
$options = array();
|
||||
if (version_compare(PHP_VERSION, '5.6.0', '<')) {
|
||||
// On earlier PHP versions, the certificate validation fails. We deactivate it on them to restore the functionality we had with HTTP/Request1
|
||||
$options['ssl_verify_peer'] = false;
|
||||
}
|
||||
$req = new HTTP_Request2($uri, HTTP_Request2::METHOD_GET, $options);
|
||||
|
||||
try {
|
||||
$response = $req->send();
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
|
||||
|
||||
Starting with Smarty 3.1.21 Composer has been configured to load the packages from github.
|
||||
|
||||
*******************************************************************************
|
||||
* *
|
||||
* NOTE: Because of this change you must clear your local composer cache with *
|
||||
* the "composer clearcache" command *
|
||||
* *
|
||||
*******************************************************************************
|
||||
|
||||
To get the latest stable version use
|
||||
"require": {
|
||||
"smarty/smarty": "~3.1"
|
||||
}
|
||||
in your composer.json file.
|
||||
|
||||
To get the trunk version use
|
||||
"require": {
|
||||
"smarty/smarty": "~3.1@dev"
|
||||
}
|
||||
|
||||
The "smarty/smarty" package will start at libs/.... subfolder.
|
||||
|
||||
To retrieve the development and documentation folders add
|
||||
"require-dev": {
|
||||
"smarty/smarty-dev": "~3.1@dev"
|
||||
}
|
||||
|
||||
If you are using (include) the composer generated autoloader.php which is located
|
||||
in the /vendor folder it is no longer needed to require the Smarty.class.php file.
|
||||
@@ -1,4 +1,66 @@
|
||||
In Smarty 3.1 template inheritance is a compile time process. All the extending of {block} tags
|
||||
3.1.3"
|
||||
New tags for inheritance parent and chilD
|
||||
{parent} == {$smarty.block.parent}
|
||||
{child} == {$smarty.block.child}
|
||||
Both tags support the assign attribute like
|
||||
{child assign=foo}
|
||||
|
||||
3.1.31
|
||||
New tags for inheritance parent and child
|
||||
{block_parent} == {$smarty.block.parent}
|
||||
{block_child} == {$smarty.block.child}
|
||||
|
||||
Since 3.1.28 you can mix inheritance by extends resource with the {extends} tag.
|
||||
A template called by extends resource can extend a subtemplate or chain buy the {extends} tag.
|
||||
Since 3.1.31 this feature can be turned off by setting the new Smarty property Smarty::$extends_recursion to false.
|
||||
|
||||
3.1.28
|
||||
Starting with version 3.1.28 template inheritance is no longer a compile time process.
|
||||
All {block} tag parent/child relations are resolved at run time.
|
||||
This does resolve all known existing restrictions (see below).
|
||||
|
||||
The $smarty::$inheritance_merge_compiled_includes property has been removed.
|
||||
Any access to it is ignored.
|
||||
|
||||
New features:
|
||||
|
||||
Any code outside root {block} tags in child templates is now executed but any output will be ignored.
|
||||
|
||||
{extends 'foo.tpl'}
|
||||
{$bar = 'on'} // assigns variable $bar seen in parent templates
|
||||
{block 'buh'}{/block}
|
||||
|
||||
{extends 'foo.tpl'}
|
||||
{$bar} // the output of variable bar is ignored
|
||||
{block 'buh'}{/block}
|
||||
|
||||
{block} tags can be dynamically en/disabled by conditions.
|
||||
|
||||
{block 'root'}
|
||||
{if $foo}
|
||||
{block 'v1'}
|
||||
....
|
||||
{/block}
|
||||
{else}
|
||||
{block 'v1'}
|
||||
....
|
||||
{/block}
|
||||
{/if}
|
||||
{/block}
|
||||
|
||||
{block} tags can have variable names.
|
||||
|
||||
{block $foo}
|
||||
....
|
||||
{/block}
|
||||
|
||||
Starting with 3.1.28 you can mix inheritance by extends resource with the {extends} tag.
|
||||
A template called by extends resource can extend a subtemplate or chain buy the {extends} tag.
|
||||
|
||||
NOTE There is a BC break. If you used the extends resource {extends} tags have been ignored.
|
||||
|
||||
THE FOLLOWING RESTRICTIONS ARE NO LONGER EXISTING:
|
||||
In Smarty 3.1 template inheritance is a compile time process. All the extending of {block} tags
|
||||
is done at compile time and the parent and child templates are compiled in a single compiled template.
|
||||
{include} subtemplate could also {block} tags. Such subtemplate could not compiled by it's own because
|
||||
it could be used in other context where the {block} extended with a different result. For that reasion
|
||||
@@ -7,7 +69,7 @@ the compiled code of {include} subtemplates gets also merged in compiled inherit
|
||||
Merging the code into a single compile template has some drawbacks.
|
||||
1. You could not use variable file names in {include} Smarty would use the {include} of compilation time.
|
||||
2. You could not use individual compile_id in {include}
|
||||
3. Seperate caching of subtemplate was not possible
|
||||
3. Separate caching of subtemplate was not possible
|
||||
4. Any change of the template directory structure between calls was not necessarily seen.
|
||||
|
||||
Starting with 3.1.15 some of the above conditions got checked and resulted in an exception. It turned out
|
||||
@@ -19,17 +81,11 @@ With this setting all {include} subtemplate will be merge into the compiled inhe
|
||||
could be rejected by exception.
|
||||
|
||||
|
||||
If $smarty->inheritance_merge_compiled_includes = false; {include} subtemplate will not be merged.
|
||||
You must now manually merge all {include} subtemplate which do contain {block} tags. This is done by setting the "inline" option.
|
||||
If $smarty->inheritance_merge_compiled_includes = false; {include} subtemplate will not be merged.You must now manually merge all {include} subtemplate which do contain {block} tags. This is done by setting the "inline" option.
|
||||
{include file='foo.bar' inline}
|
||||
|
||||
1. In case of a variable file name like {include file=$foo inline} you must use the variable in a compile_id $smarty->compile_id = $foo;
|
||||
2. If you use individual compile_id in {include file='foo.tpl' compile_id=$bar inline} it must be used in the
|
||||
global compile_id as well $smarty->compile_id = $bar;
|
||||
2. If you use individual compile_id in {include file='foo.tpl' compile_id=$bar inline} it must be used in the global compile_id as well $smarty->compile_id = $bar;
|
||||
3. If call templates with different template_dir configurations and a parent could same named child template from different folders
|
||||
you must make the folder name part of the compile_id.
|
||||
|
||||
|
||||
In the upcomming major release Smarty 3.2 inheritance will no longer be a compile time process.
|
||||
All restrictions will be then removed.
|
||||
|
||||
|
||||
@@ -1,3 +1,17 @@
|
||||
Smarty: the PHP compiling template engine
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
This library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
|
||||
See the GNU Lesser General Public License below for more details.
|
||||
|
||||
|
||||
GNU LESSER GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
||||
@@ -162,4 +176,4 @@ General Public License ever published by the Free Software Foundation.
|
||||
whether future versions of the GNU Lesser General Public License shall
|
||||
apply, that proxy's public statement of acceptance of any version is
|
||||
permanent authorization for you to choose that version for the
|
||||
Library.
|
||||
Library.
|
||||
@@ -2,6 +2,213 @@
|
||||
|
||||
This file contains a brief description of new features which have been added to Smarty 3.1
|
||||
|
||||
Smarty 3.1.33-dev
|
||||
Variable capture name in Smarty special variable
|
||||
================================================
|
||||
{$smarty.capture.$foo} can now be used to access the content of a named
|
||||
capture block
|
||||
|
||||
Smarty 3.1.32
|
||||
New tags for inheritance parent and child
|
||||
=========================================
|
||||
{parent} == {$smarty.block.parent}
|
||||
{child} == {$smarty.block.child}
|
||||
Both tags support the assign attribute like
|
||||
{child assign=foo}
|
||||
|
||||
Deprecate functions Smarty::muteExpectedErrors() and Smarty::unmuteExpectedErrors()
|
||||
===================================================================================
|
||||
These functions to start a special error handler are no longer needed as Smarty does
|
||||
no longer use error suppression like @filemtime().
|
||||
For backward compatibility the functions still can be called.
|
||||
|
||||
Using literals containing Smarty's left and right delimiter
|
||||
===========================================================
|
||||
New Methods
|
||||
$smarty->setLiterals(array $literals)
|
||||
$smarty->addLiterals(array $literals)
|
||||
to define literals containing Smarty delimiter. This can avoid the need for extreme usage
|
||||
of {literal} {/literal} tags.
|
||||
A) Treat '{{' and '}}' as literal
|
||||
If Smarty::$auto_literal is enabled
|
||||
{{ foo }}
|
||||
will be treated now as literal. (This does apply for any number of delimiter repeatations).
|
||||
However {{foo}} is not an literal but will be interpreted as a recursive Smarty tag.
|
||||
If you use
|
||||
$smarty->setLiteral(array('{{','}}'));
|
||||
{{foo}} is now a literal as well.
|
||||
NOTE: In the last example nested Smarty tags starting with '{{' or ending with '}}' will not
|
||||
work any longer, but this should be very very raw occouring restriction.
|
||||
B) Example 2
|
||||
Assume your delimiter are '<-' , '->' and '<--' , '-->' shall be literals
|
||||
$smarty->setLiteral(array('<--','-->'));
|
||||
|
||||
|
||||
The capture buffers can now be accessed as array
|
||||
================================================
|
||||
{capture name='foo'}
|
||||
bah
|
||||
{\capture}
|
||||
{capture name='buh'}
|
||||
blar
|
||||
{\capture}
|
||||
{foreach $smarty.capture as $name => $buffer}
|
||||
....
|
||||
{/foreach}
|
||||
|
||||
Smarty 3.1.31
|
||||
New tags for inheritance parent and child
|
||||
=========================================
|
||||
{block_parent} == {$smarty.block.parent}
|
||||
{block_child} == {$smarty.block.child}
|
||||
|
||||
Smarty 3.1.30
|
||||
|
||||
Loop optimization {foreach} and {section}
|
||||
=========================================
|
||||
Smarty does optimize the {foreach} and {section} loops by removing code for not needed loop
|
||||
properties.
|
||||
The compiler collects needed properties by scanning the current template for $item@property,
|
||||
$smarty.foreach.name.property and $smarty.section.name.property.
|
||||
The compiler does not know if additional properties will be needed outside the current template scope.
|
||||
Additional properties can be generated by adding them with the property attribute.
|
||||
|
||||
Example:
|
||||
index.tpl
|
||||
{foreach $from as $item properties=[iteration, index]}
|
||||
{include 'sub.tpl'}
|
||||
{$item.total}
|
||||
{/foreach}
|
||||
|
||||
sub.tpl
|
||||
{$item.index} {$item.iteration} {$item.total}
|
||||
|
||||
In above example code for the 'total' property is automatically generated as $item.total is used in
|
||||
index.tpl. Code for 'iteration' and 'index' must be added with properties=[iteration, index].
|
||||
|
||||
New tag {make_nocache}
|
||||
======================
|
||||
Syntax: {make_nocache $foo}
|
||||
|
||||
This tag makes a variable which does exists normally only while rendering the compiled template
|
||||
available in the cached template for use in not cached expressions.
|
||||
|
||||
Expample:
|
||||
{foreach from=$list item=item}
|
||||
<li>{$item.name} {make_nocache $item}{if $current==$item.id} ACTIVE{/if}</li>
|
||||
{/foreach}
|
||||
|
||||
The {foreach} loop is rendered while processing the compiled template, but $current is a nocache
|
||||
variable. Normally the {if $current==$item.id} would fail as the $item variable is unknown in the cached template. {make_nocache $item} does make the current $item value known in thee cached template.
|
||||
|
||||
{make_nocache} is ignored when caching is disabled or the variable does exists as nocache variable.
|
||||
|
||||
NOTE: if the variable value does contain objects these must have the __set_state method implemented.
|
||||
|
||||
|
||||
Scope Attributes
|
||||
================
|
||||
The scope handling has been updated to cover all cases of variable assignments in templates.
|
||||
|
||||
The tags {assign}, {append} direct assignments like {$foo = ...}, {$foo[...]= ...} support
|
||||
the following optional scope attributes:
|
||||
scope='parent' - the variable will be assigned in the current template and if the template
|
||||
was included by {include} the calling template
|
||||
scope='tpl_root' - the variable will be assigned in the outermost root template called by $smarty->display()
|
||||
or $smarty->fetch() and is bubbled up all {include} sub-templates to the current template.
|
||||
scope='smarty' - the variable will be assigned in the Smarty object and is bubbled up all {include} sub-templates
|
||||
to the current template.
|
||||
scope='global' - the variable will be assigned as Smarty object global variable and is bubbled up all {include}
|
||||
sub-templates to the current template.
|
||||
scope='root' - the variable will be assigned if a data object was used for variable definitions in the data
|
||||
object or in the Smarty object otherwise and is bubbled up all {include} sub-templates to the
|
||||
current template.
|
||||
scope='local' - this scope has only a meaning if the tag is called within a template {function}.
|
||||
The variable will be assigned in the local scope of the template function and the
|
||||
template which did call the template function.
|
||||
|
||||
|
||||
The {config_load} tag supports all of the above except the global scope.
|
||||
|
||||
The scope attribute can be used also with the {include} tag.
|
||||
Supported scope are parent, tpl_root, smarty, global and root.
|
||||
A scope used together with the {include} tag will cause that with some exceptions any variable
|
||||
assignment within that sub-template will update/assign the variable in other scopes according
|
||||
to the above rules. It does include also variables assigned by plugins, tags supporting the assign=foo attribute and direct assignments in {if} and {while} like {if $foo=$bar}.
|
||||
Excluded are the key and value variables of {foreach}, {for} loop variables , variables passed by attributes
|
||||
in {include} and direct increments/decrements like {$foo++}, {$foo--}
|
||||
|
||||
Note: The scopes should be used only to the extend really need. If a variable value assigned in an included
|
||||
sub-template should be returned to the calling sub-template just use {$foo='bar' scope='parent'}.
|
||||
Use scopes only with variables for which it's realy needed. Avoid general scope settings with the
|
||||
{include} tag as it can have a performance impact.
|
||||
|
||||
The {assign}, {append}, {config_load} and {$foo...=...} tags have a new option flag 'noscope'.Thi
|
||||
Example: {$foo='bar' noscope} This will assign $foo only in the current template and any scope settings
|
||||
at {include} is ignored.
|
||||
|
||||
|
||||
Caching
|
||||
=======
|
||||
Caching does now observe the template_dir setting and will create separate cache files if required
|
||||
|
||||
Compiled Templates
|
||||
==================
|
||||
The template_dir setting is now encoded in the uid of the file name.
|
||||
The content of the compiled template may depend on the template_dir search order
|
||||
{include .... inline} is used or $smarty->merge_compiled_includes is enabled
|
||||
|
||||
APC
|
||||
===
|
||||
If APC is enabled force an apc_compile_file() when compiled or cached template was updated
|
||||
|
||||
Smarty 3.1.28
|
||||
|
||||
OPCACHE
|
||||
=======
|
||||
Smarty does now invalidate automatically updated and cleared compiled or cached template files in OPCACHE.
|
||||
Correct operation is no longer dependent on OPCACHE configuration settings.
|
||||
|
||||
Template inheritance
|
||||
====================
|
||||
Template inheritance is now processed in run time.
|
||||
See the INHERITANCE_RELEASE_NOTES
|
||||
|
||||
Modifier regex_replace
|
||||
======================
|
||||
An optional limit parameter was added
|
||||
|
||||
fetch() and display()
|
||||
=====================
|
||||
The fetch() and display() methods of the template object accept now optionally the same parameter
|
||||
as the corresponding Smarty methods to get the content of another template.
|
||||
Example:
|
||||
$template->display(); Does display template of template object
|
||||
$template->display('foo.tpl'); Does display template 'foo.bar'
|
||||
|
||||
File: resource
|
||||
==============
|
||||
Multiple template_dir entries can now be selected by a comma separated list of indices.
|
||||
The template_dir array is searched in the order of the indices. (Could be used to change the default search order)
|
||||
Example:
|
||||
$smarty->display('[1],[0]foo.bar');
|
||||
|
||||
Filter support
|
||||
==============
|
||||
Optional filter names
|
||||
An optional filter name was added to $smarty->registerFilter(). It can be used to unregister a filter by name.
|
||||
- $smarty->registerFilter('output', $callback, 'name');
|
||||
$smarty->unregister('output', 'name');
|
||||
|
||||
Closures
|
||||
$smarty->registerFilter() does now accept closures.
|
||||
- $smarty->registerFilter('pre', function($source) {return $source;});
|
||||
If no optional filter name was specified it gets the default name 'closure'.
|
||||
If you register multiple closures register each with a unique filter name.
|
||||
- $smarty->registerFilter('pre', function($source) {return $source;}, 'closure_1');
|
||||
- $smarty->registerFilter('pre', function($source) {return $source;}, 'closure_2');
|
||||
|
||||
|
||||
Smarty 3.1.22
|
||||
|
||||
Namespace support within templates
|
||||
@@ -73,14 +280,12 @@ Smarty 3.1.22
|
||||
Debugging
|
||||
=========
|
||||
The layout of the debug window has been changed for better readability
|
||||
|
||||
|
||||
New class constants
|
||||
Smarty::DEBUG_OFF
|
||||
Smarty::DEBUG_ON
|
||||
Smarty::DEBUG_INDIVIDUAL
|
||||
have been introduced for setting the $debugging property.
|
||||
|
||||
Smarty::DEBUG_INDIVIDUAL will create for each display() and fetch() call an individual gebug window.
|
||||
Smarty::DEBUG_INDIVIDUAL will create for each display() and fetch() call an individual debug window.
|
||||
|
||||
.
|
||||
|
||||
+37
-36
@@ -176,7 +176,7 @@ backward compatible with Smarty 2, except for the following items:
|
||||
|
||||
|
||||
There are many things that are new to Smarty 3. Here are the notable items:
|
||||
|
||||
|
||||
LEXER/PARSER
|
||||
============
|
||||
|
||||
@@ -197,8 +197,8 @@ is still supported for BC.
|
||||
Examples:
|
||||
{$x+$y} will output the sum of x and y.
|
||||
{$foo = strlen($bar)} function in assignment
|
||||
{assign var=foo value= $x+$y} in attributes
|
||||
{$foo = myfunct( ($x+$y)*3 )} as function parameter
|
||||
{assign var=foo value= $x+$y} in attributes
|
||||
{$foo = myfunct( ($x+$y)*3 )} as function parameter
|
||||
{$foo[$x+3]} as array index
|
||||
|
||||
Smarty tags can be used as values within other tags.
|
||||
@@ -239,18 +239,18 @@ Examples:
|
||||
|
||||
The original "dot" notation stays, and with improvements.
|
||||
Examples:
|
||||
{$foo.a.b.c} => $foo['a']['b']['c']
|
||||
{$foo.a.b.c} => $foo['a']['b']['c']
|
||||
{$foo.a.$b.c} => $foo['a'][$b]['c'] with variable index
|
||||
{$foo.a.{$b+4}.c} => $foo['a'][$b+4]['c'] with expression as index
|
||||
{$foo.a.{$b.c}} => $foo['a'][$b['c']] with nested index
|
||||
|
||||
note that { and } are used to address ambiguties when nesting the dot syntax.
|
||||
note that { and } are used to address ambiguties when nesting the dot syntax.
|
||||
|
||||
Variable names themselves can be variable and contain expressions.
|
||||
Examples:
|
||||
$foo normal variable
|
||||
$foo_{$bar} variable name containing other variable
|
||||
$foo_{$x+$y} variable name containing expressions
|
||||
$foo_{$bar} variable name containing other variable
|
||||
$foo_{$x+$y} variable name containing expressions
|
||||
$foo_{$bar}_buh_{$blar} variable name with multiple segments
|
||||
{$foo_{$x}} will output the variable $foo_1 if $x has a value of 1.
|
||||
|
||||
@@ -260,12 +260,12 @@ Example: {$object->method1($x)->method2($y)}
|
||||
{for} tag added for looping (replacement for {section} tag):
|
||||
{for $x=0, $y=count($foo); $x<$y; $x++} .... {/for}
|
||||
Any number of statements can be used separated by comma as the first
|
||||
inital expression at {for}.
|
||||
initial expression at {for}.
|
||||
|
||||
{for $x = $start to $end step $step} ... {/for}is in the SVN now .
|
||||
You can use also
|
||||
{for $x = $start to $end} ... {/for}
|
||||
In this case the step value will be automaticall 1 or -1 depending on the start and end values.
|
||||
In this case the step value will be automatically 1 or -1 depending on the start and end values.
|
||||
Instead of $start and $end you can use any valid expression.
|
||||
Inside the loop the following special vars can be accessed:
|
||||
$x@iteration = number of iteration
|
||||
@@ -290,7 +290,7 @@ $var@last true on last iteration
|
||||
|
||||
The Smarty 2 {foreach} tag syntax is still supported.
|
||||
|
||||
NOTE: {$bar[foo]} still indicates a variable inside of a {section} named foo.
|
||||
NOTE: {$bar[foo]} still indicates a variable inside of a {section} named foo.
|
||||
If you want to access an array element with index foo, you must use quotes
|
||||
such as {$bar['foo']}, or use the dot syntax {$bar.foo}.
|
||||
|
||||
@@ -377,12 +377,12 @@ $smarty->display('string:This is my template, {$foo}!'); // php
|
||||
VARIABLE SCOPE / VARIABLE STORAGE
|
||||
=================================
|
||||
|
||||
In Smarty 2, all assigned variables were stored within the Smarty object.
|
||||
Therefore, all variables assigned in PHP were accessible by all subsequent
|
||||
In Smarty 2, all assigned variables were stored within the Smarty object.
|
||||
Therefore, all variables assigned in PHP were accessible by all subsequent
|
||||
fetch and display template calls.
|
||||
|
||||
In Smarty 3, we have the choice to assign variables to the main Smarty object,
|
||||
to user-created data objects, and to user-created template objects.
|
||||
In Smarty 3, we have the choice to assign variables to the main Smarty object,
|
||||
to user-created data objects, and to user-created template objects.
|
||||
These objects can be chained. The object at the end of a chain can access all
|
||||
variables belonging to that template and all variables within the parent objects.
|
||||
The Smarty object can only be the root of a chain, but a chain can be isolated
|
||||
@@ -396,7 +396,7 @@ global variables.
|
||||
A Smarty data object can be created as follows:
|
||||
$data = $smarty->createData(); // create root data object
|
||||
$data->assign('foo','bar'); // assign variables as usual
|
||||
$data->config_load('my.conf'); // load config file
|
||||
$data->config_load('my.conf'); // load config file
|
||||
|
||||
$data= $smarty->createData($smarty); // create data object having a parent link to
|
||||
the Smarty object
|
||||
@@ -414,7 +414,7 @@ The first parameter can be a template name, a smarty object or a data object.
|
||||
Examples:
|
||||
$tpl = $smarty->createTemplate('mytpl.tpl'); // create template object not linked to any parent
|
||||
$tpl->assign('foo','bar'); // directly assign variables
|
||||
$tpl->config_load('my.conf'); // load config file
|
||||
$tpl->config_load('my.conf'); // load config file
|
||||
|
||||
$tpl = $smarty->createTemplate('mytpl.tpl',$smarty); // create template having a parent link to the Smarty object
|
||||
$tpl = $smarty->createTemplate('mytpl.tpl',$data); // create template having a parent link to the $data object
|
||||
@@ -424,31 +424,31 @@ If the $parent parameter is not specified in these method calls, the template ob
|
||||
is will link back to the Smarty object as it's parent.
|
||||
|
||||
If a template is called by an {include...} tag from another template, the
|
||||
subtemplate links back to the calling template as it's parent.
|
||||
subtemplate links back to the calling template as it's parent.
|
||||
|
||||
All variables assigned locally or from a parent template are accessible. If the
|
||||
template creates or modifies a variable by using the {assign var=foo...} or
|
||||
{$foo=...} tags, these new values are only known locally (local scope). When the
|
||||
template exits, none of the new variables or modifications can be seen in the
|
||||
parent template(s). This is same behavior as in Smarty 2.
|
||||
parent template(s). This is same behavior as in Smarty 2.
|
||||
|
||||
With Smarty 3, we can assign variables with a scope attribute which allows the
|
||||
availablility of these new variables or modifications globally (ie in the parent
|
||||
templates.)
|
||||
|
||||
Possible scopes are local, parent, root and global.
|
||||
Possible scopes are local, parent, root and global.
|
||||
Examples:
|
||||
{assign var=foo value='bar'} // no scope is specified, the default 'local'
|
||||
{$foo='bar'} // same, local scope
|
||||
{assign var=foo value='bar' scope='local'} // same, local scope
|
||||
|
||||
{assign var=foo value='bar' scope='parent'} // Values will be available to the parent object
|
||||
{assign var=foo value='bar' scope='parent'} // Values will be available to the parent object
|
||||
{$foo='bar' scope='parent'} // (normally the calling template)
|
||||
|
||||
{assign var=foo value='bar' scope='root'} // Values will be exported up to the root object, so they can
|
||||
{assign var=foo value='bar' scope='root'} // Values will be exported up to the root object, so they can
|
||||
{$foo='bar' scope='root'} // be seen from all templates using the same root.
|
||||
|
||||
{assign var=foo value='bar' scope='global'} // Values will be exported to global variable storage,
|
||||
{assign var=foo value='bar' scope='global'} // Values will be exported to global variable storage,
|
||||
{$foo='bar' scope='global'} // they are available to any and all templates.
|
||||
|
||||
|
||||
@@ -460,19 +460,20 @@ included template.
|
||||
PLUGINS
|
||||
=======
|
||||
|
||||
Smarty3 are following the same coding rules as in Smarty2.
|
||||
The only difference is that the template object is passed as additional third parameter.
|
||||
Smarty 3 plugins follow the same coding rules as in Smarty 2.
|
||||
The main difference is that the template object is now passed in place of the smarty object.
|
||||
The smarty object can be still be accessed through $template->smarty.
|
||||
|
||||
smarty_plugintype_name (array $params, object $smarty, object $template)
|
||||
smarty_plugintype_name (array $params, Smarty_Internal_Template $template)
|
||||
|
||||
The Smarty 2 plugins are still compatible as long as they do not make use of specific Smarty2 internals.
|
||||
The Smarty 2 plugins are still compatible as long as they do not make use of specific Smarty 2 internals.
|
||||
|
||||
|
||||
TEMPLATE INHERITANCE:
|
||||
=====================
|
||||
|
||||
With template inheritance you can define blocks, which are areas that can be
|
||||
overriden by child templates, so your templates could look like this:
|
||||
overridden by child templates, so your templates could look like this:
|
||||
|
||||
parent.tpl:
|
||||
<html>
|
||||
@@ -490,14 +491,14 @@ parent.tpl:
|
||||
</html>
|
||||
|
||||
child.tpl:
|
||||
{extends file='parent.tpl'}
|
||||
{extends file='parent.tpl'}
|
||||
{block name='title'}
|
||||
Child title
|
||||
{/block}
|
||||
|
||||
grandchild.tpl:
|
||||
{extends file='child.tpl'}
|
||||
{block name='title'}Home - {$smarty.block.parent}{/block}
|
||||
{extends file='child.tpl'}
|
||||
{block name='title'}Home - {$smarty.block.parent}{/block}
|
||||
{block name='page-title'}My home{/block}
|
||||
{block name='content'}
|
||||
{foreach $images as $img}
|
||||
@@ -507,10 +508,10 @@ grandchild.tpl:
|
||||
|
||||
We redefined all the blocks here, however in the title block we used {$smarty.block.parent},
|
||||
which tells Smarty to insert the default content from the parent template in its place.
|
||||
The content block was overriden to display the image files, and page-title has also be
|
||||
overriden to display a completely different title.
|
||||
The content block was overridden to display the image files, and page-title has also be
|
||||
overridden to display a completely different title.
|
||||
|
||||
If we render grandchild.tpl we will get this:
|
||||
If we render grandchild.tpl we will get this:
|
||||
<html>
|
||||
<head>
|
||||
<title>Home - Child title</title>
|
||||
@@ -528,8 +529,8 @@ If we render grandchild.tpl we will get this:
|
||||
NOTE: In the child templates everything outside the {extends} or {block} tag sections
|
||||
is ignored.
|
||||
|
||||
The inheritance tree can be as big as you want (meaning you can extend a file that
|
||||
extends another one that extends another one and so on..), but be aware that all files
|
||||
The inheritance tree can be as big as you want (meaning you can extend a file that
|
||||
extends another one that extends another one and so on..), but be aware that all files
|
||||
have to be checked for modifications at runtime so the more inheritance the more overhead you add.
|
||||
|
||||
Instead of defining the parent/child relationships with the {extends} tag in the child template you
|
||||
@@ -537,7 +538,7 @@ can use the resource as follow:
|
||||
|
||||
$smarty->display('extends:parent.tpl|child.tpl|grandchild.tpl');
|
||||
|
||||
Child {block} tags may optionally have a append or prepend attribute. In this case the parent block content
|
||||
Child {block} tags may optionally have a append or prepend attribute. In this case the parent block content
|
||||
is appended or prepended to the child block content.
|
||||
|
||||
{block name='title' append} My title {/block}
|
||||
|
||||
@@ -1,52 +1,72 @@
|
||||
#Smarty 3 template engine
|
||||
##Distribution repository
|
||||
# Smarty 3 template engine
|
||||
[smarty.net](https://www.smarty.net/)
|
||||
|
||||
*Read the NEW_FEATURES file for recent extensions to Smarty 3.1 functionality*
|
||||
## Documentation
|
||||
|
||||
For documentation see
|
||||
[www.smarty.net/docs/en/](https://www.smarty.net/docs/en/)
|
||||
|
||||
## Distribution repository
|
||||
|
||||
> Smarty 3.1.28 introduces run time template inheritance
|
||||
|
||||
> Read the NEW_FEATURES and INHERITANCE_RELEASE_NOTES file for recent extensions to Smarty 3.1 functionality
|
||||
|
||||
Smarty versions 3.1.11 or later are now on github and can be installed with Composer.
|
||||
|
||||
|
||||
The "smarty/smarty" package will start at libs/.... subfolder.
|
||||
|
||||
To get the latest stable version of Smarty 3.1 use
|
||||
To get the latest stable version of Smarty 3.1 use:
|
||||
|
||||
"require": {
|
||||
"smarty/smarty": "~3.1"
|
||||
}
|
||||
```json
|
||||
"require": {
|
||||
"smarty/smarty": "~3.1"
|
||||
}
|
||||
```
|
||||
|
||||
in your composer.json file.
|
||||
|
||||
To get the trunk version use
|
||||
|
||||
"require": {
|
||||
"smarty/smarty": "~3.1@dev"
|
||||
}
|
||||
To get the trunk version use:
|
||||
|
||||
For a specific version use something like
|
||||
```json
|
||||
"require": {
|
||||
"smarty/smarty": "~3.1@dev"
|
||||
}
|
||||
```
|
||||
|
||||
"require": {
|
||||
"smarty/smarty": "3.1.19"
|
||||
}
|
||||
For a specific version use something like:
|
||||
|
||||
PHPUnit test can be installed by corresponding composer entries like
|
||||
```json
|
||||
"require": {
|
||||
"smarty/smarty": "3.1.19"
|
||||
}
|
||||
```
|
||||
|
||||
"require": {
|
||||
"smarty/smarty-phpunit": "3.1.19"
|
||||
}
|
||||
PHPUnit test can be installed by corresponding composer entries like:
|
||||
|
||||
Similar applies for the lexer/parser generator
|
||||
```json
|
||||
"require": {
|
||||
"smarty/smarty-phpunit": "3.1.19"
|
||||
}
|
||||
```
|
||||
|
||||
"require": {
|
||||
"smarty/smarty-lexer": "3.1.19"
|
||||
}
|
||||
Similar applies for the lexer/parser generator.
|
||||
|
||||
Or you could use
|
||||
```json
|
||||
"require": {
|
||||
"smarty/smarty-lexer": "3.1.19"
|
||||
}
|
||||
```
|
||||
|
||||
"require": {
|
||||
"smarty/smarty-dev": "3.1.19"
|
||||
}
|
||||
Or you could use:
|
||||
|
||||
Which is a wrapper to install all 3 packages
|
||||
```json
|
||||
"require": {
|
||||
"smarty/smarty-dev": "3.1.19"
|
||||
}
|
||||
```
|
||||
|
||||
Which is a wrapper to install all 3 packages.
|
||||
|
||||
Composer can also be used for Smarty2 versions 2.6.24 to 2.6.28
|
||||
Composer can also be used for Smarty2 versions 2.6.24 to 2.6.30.
|
||||
|
||||
@@ -1,124 +0,0 @@
|
||||
// enable properties with removing #cache#
|
||||
#cache# $this->setCacheDir($serendipity['serendipityPath'] . 'cache');
|
||||
|
||||
#cache# $this->caching = true; // $this->setCaching(true);
|
||||
/*
|
||||
Caching is disabled, as long as we haven't figured out on how to use it best here....
|
||||
|
||||
Note: rodneyrehm
|
||||
A cache_id is (ideally) supposed to identify a single page.
|
||||
md5(REQUEST_URI) may _seem_ to be doing that, but /foo.html and /foo.html?foo=bar are the same resource
|
||||
from S9Y's point of view - with DIFFERENT REQUEST_URIs. Your approach leads to a number of problems:
|
||||
* flooding the cache space with duplicate content
|
||||
* essentially making clearCache() useless, as md5 checksums of /foo.html and /foo.html?foo=bar have
|
||||
exactly nothing in common.
|
||||
You want to specify the pieces of cachable content yourself. Go with a structure like
|
||||
post-123
|
||||
post-123|comments (if you have a page for all comments belonging to that post)
|
||||
post-123|comments|feed (if you have a comment feed for a certain post)
|
||||
now you can clearCache('post-123') and comments and comments|feed are killed as well.
|
||||
*/
|
||||
|
||||
/*
|
||||
// APC and MEMCACHE are loaded from this libs plugins folder,
|
||||
// but you need to have enabled caching by $smarty->caching = true (see Rodneys upper template structure note),
|
||||
// which makes clear why we can't use Smarty caching currently with S9y
|
||||
|
||||
// enable for APC in-memory (RAM) storage caching - must be enabled in PHP
|
||||
if(APC_EXTENSION_LOADED && !$serendipity['disable_apc']) {
|
||||
$this->addPluginsDir ( SMARTY_DIR . 'plugins/' );
|
||||
$this->caching_type = 'apc'; //$this->setCachingType ( 'apc' );
|
||||
}
|
||||
// enable for MEMCACHE storage caching - must be enabled in PHP
|
||||
if(MEMCACHE_EXTENSION_LOADED && !$serendipity['disable_memcache']) {
|
||||
$this->addPluginsDir ( SMARTY_DIR . 'plugins/' );
|
||||
$this->caching_type = 'memcache'; //$this->setCachingType ( 'memcache' );
|
||||
}
|
||||
*/
|
||||
|
||||
// does set cache also need to be set to true?
|
||||
#cache# $this->cache_modified_check = true; // to be used with display() method only, must be true to enable 304 headers
|
||||
|
||||
/*
|
||||
Note: rodneyrehm
|
||||
$cache_modified_check only works if you're using display() - it won't do anything on fetch().
|
||||
It won't do anything if you have non-caching plugins or {insert} tags, either.
|
||||
|
||||
We're working on making this more intelligent for 3.2, but? work with what you've got in 3.1 first.
|
||||
*/
|
||||
|
||||
// some documentary from the smarty forum
|
||||
/*
|
||||
With Smarty::CACHING_LIFETIME_SAVED the expiration date is written into the cached file.
|
||||
So each cache_id / compile_id combination may have their own cache lifetime.
|
||||
The point is simply, that once the cache lifetime (expiration date) has been saved to the cache file,
|
||||
it cannot be altered except for clearing and regenerating said cache file
|
||||
|
||||
Template Inheritance
|
||||
Using is_cached() on sub-templates has to set up caching before is_cached() calls,
|
||||
e.g if (!$smarty->isCached('sub_test.tpl')) { $smarty->assign('foo', $foo); }.
|
||||
The subtemplate will always be cached as specified in the {include} tag.
|
||||
Otherwise you could never cache a subtemplate with caching disabled for the main template.
|
||||
If you don't want to have the main template cached, turn caching off again after the is_cached() calls for the subtemplate.
|
||||
So the example will cache sub_test.tpl, but not test.tpl
|
||||
Using is_cached() on subtemplates has to set up caching before is_cached() calls.
|
||||
The subtemplate will always be cached as specified in the {include} tag.
|
||||
Otherwise you could never cache a subtemplate with caching disabled for the main template.
|
||||
If you don't want to have the main template cached, turn caching off again after the is_cached() calls for the subtemplate.
|
||||
So the example will cache sub_test.tpl but not test.tpl
|
||||
Use $smarty->caching = Smarty::CACHING_LIFETIME_SAVED; with {include file="sub_test.tpl" cache_lifetime="120"} in test.tpl;
|
||||
Use $smarty->caching = Smarty::CACHING_LIFETIME_CURRENT; with {include .... caching}
|
||||
*/
|
||||
|
||||
#cache# $this->caching = Smarty::CACHING_LIFETIME_CURRENT; // $this->setCaching(2); // 1 will change the end of lifetime immediately.
|
||||
# $this->caching = Smarty::CACHING_LIFETIME_SAVED; // $this->setCaching(Smarty::CACHING_LIFETIME_SAVED);
|
||||
# $this->caching = Smarty::CACHING_OFF; // $this->setCaching(Smarty::CACHING_OFF) // stop caching >= 3.1.4
|
||||
|
||||
/*
|
||||
Note: rodneyrehm
|
||||
The CACHING_LIFETIME_SAVED option is something you only really "need" if many cache files have different lifetimes.
|
||||
I've used Smarty intensively over the past years and I _never_ required LIFETIME_SAVED...
|
||||
|
||||
you can do $force_cache = true; to make the current page re-render to cache. This actually allows you to work with a very high
|
||||
cache_lifetime and poll a secondary modified time from somewhere. You could then implement the serve-stale-until-updated caching approach.
|
||||
I'll blog about this? probably around christmas
|
||||
*/
|
||||
|
||||
// set the cache_lifetime for index.tpl to 5 minutes
|
||||
#cache# $this->cache_lifetime = 300; // $this->setCacheLifetime(300); // 86400; // one day: 60*60*24
|
||||
|
||||
// some documentary from the smarty forum
|
||||
/*
|
||||
Smarty caching is based purely on the fetch() or display() call. So:
|
||||
$smarty->fetch('application.tpl');
|
||||
Will generate a cached output and use that on repeated calls. If you have multiple versions of this call, you need to pass a cache_id. Example:
|
||||
$cache_id = md5($_SERVER['REQUEST_URI']);
|
||||
$smarty->fetch('application.tpl',$cache_id);
|
||||
It is entirely up to you what is taken into account for the cache_id (URL, etc.)
|
||||
*/
|
||||
|
||||
// does this mean $this->setCacheId($id); is useless here and has to be set where the actual templates are called? or does ist work as something default?
|
||||
/*
|
||||
Note: rodneyrehm
|
||||
when fetch(tpl) is called, Smarty::$cache_id is injected. If you need a single cache_id for the whole render complex, this may be the sane thing to do.
|
||||
But you'll probably segment certain content. A Post does not have to be reendered for every new comment. It thus makes sense to separate these entities
|
||||
into their own cache spaces. In turn they'd probably receive their own cache_ids. Although that is not _necessary_ as template_name and cache_id work in
|
||||
conjunction. If both are supplied (to say clearCache()) template_name increases the specificity of cache_id, so only those items are purged that meet
|
||||
both criteria.
|
||||
*/
|
||||
|
||||
// some documentary from the smarty forum
|
||||
/*
|
||||
Smarty will use the cache_id for distributing the cache files into sub_dirs
|
||||
A cache id is used if you cache different output generated by the same template as for example on a product page.
|
||||
In such a case you should use a product id as cache id.
|
||||
$this->cache_id($id); // $this->setCacheId($id);
|
||||
*/
|
||||
|
||||
#cache# $this->cache_id = md5($_SERVER['REQUEST_URI']); // this isn't a good idea either, better have it disabled or use a special id
|
||||
/*
|
||||
Note: Ian
|
||||
What kind of Serendipity ID could this be?
|
||||
- see Rodneys first caching note
|
||||
*/
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
|
||||
== Syntax ==
|
||||
|
||||
Smarty 3 API has a new syntax. Much of the Smarty 2 syntax is supported
|
||||
by a wrapper but deprecated. See the README that comes with Smarty 3 for more
|
||||
Smarty 3 API has a new syntax. Much of the Smarty 2 syntax is supported
|
||||
by a wrapper but deprecated. See the README that comes with Smarty 3 for more
|
||||
information.
|
||||
|
||||
The {$array|@mod} syntax has always been a bit confusing, where an "@" is required
|
||||
@@ -32,9 +32,9 @@ Makes Javascript/CSS easier to work with, eliminating the need for {literal}.
|
||||
This can be disabled by setting $smarty->auto_literal = false;
|
||||
|
||||
== Unquoted Strings ==
|
||||
Smarty 2 was a bit more forgiving (and ambiguous) when it comes to unquoted strings
|
||||
in parameters. Smarty3 is more restrictive. You can still pass strings without quotes
|
||||
so long as they contain no special characters. (anything outside of A-Za-z0-9_)
|
||||
Smarty 2 was a bit more forgiving (and ambiguous) when it comes to unquoted strings
|
||||
in parameters. Smarty3 is more restrictive. You can still pass strings without quotes
|
||||
so long as they contain no special characters. (anything outside of A-Za-z0-9_)
|
||||
|
||||
For example filename strings must be quoted
|
||||
<source lang="smarty">
|
||||
@@ -42,16 +42,16 @@ For example filename strings must be quoted
|
||||
</source>
|
||||
|
||||
== Extending the Smarty class ==
|
||||
Smarty 3 makes use of the __construct method for initialization. If you are extending
|
||||
the Smarty class, its constructor is not called implicitly if the your child class defines
|
||||
its own constructor. In order to run Smarty's constructor, a call to parent::__construct()
|
||||
within your child constructor is required.
|
||||
Smarty 3 makes use of the __construct method for initialization. If you are extending
|
||||
the Smarty class, its constructor is not called implicitly if the your child class defines
|
||||
its own constructor. In order to run Smarty's constructor, a call to parent::__construct()
|
||||
within your child constructor is required.
|
||||
|
||||
<source lang="php">
|
||||
class MySmarty extends Smarty {
|
||||
function __construct() {
|
||||
parent::__construct();
|
||||
|
||||
|
||||
// your initialization code goes here
|
||||
|
||||
}
|
||||
@@ -59,36 +59,36 @@ class MySmarty extends Smarty {
|
||||
</source>
|
||||
|
||||
== Autoloader ==
|
||||
Smarty 3 does register its own autoloader with spl_autoload_register. If your code has
|
||||
an existing __autoload function then this function must be explicitly registered on
|
||||
the __autoload stack. See http://us3.php.net/manual/en/function.spl-autoload-register.php
|
||||
Smarty 3 does register its own autoloader with spl_autoload_register. If your code has
|
||||
an existing __autoload function then this function must be explicitly registered on
|
||||
the __autoload stack. See http://us3.php.net/manual/en/function.spl-autoload-register.php
|
||||
for further details.
|
||||
|
||||
== Plugin Filenames ==
|
||||
Smarty 3 optionally supports the PHP spl_autoloader. The autoloader requires filenames
|
||||
to be lower case. Because of this, Smarty plugin file names must also be lowercase.
|
||||
Smarty 3 optionally supports the PHP spl_autoloader. The autoloader requires filenames
|
||||
to be lower case. Because of this, Smarty plugin file names must also be lowercase.
|
||||
In Smarty 2, mixed case file names did work.
|
||||
|
||||
== Scope of Special Smarty Variables ==
|
||||
In Smarty 2 the special Smarty variables $smarty.section... and $smarty.foreach...
|
||||
had global scope. If you had loops with the same name in subtemplates you could accidentally
|
||||
In Smarty 2 the special Smarty variables $smarty.section... and $smarty.foreach...
|
||||
had global scope. If you had loops with the same name in subtemplates you could accidentally
|
||||
overwrite values of parent template.
|
||||
|
||||
In Smarty 3 these special Smarty variable have only local scope in the template which
|
||||
is defining the loop. If you need their value in a subtemplate you have to pass them
|
||||
In Smarty 3 these special Smarty variable have only local scope in the template which
|
||||
is defining the loop. If you need their value in a subtemplate you have to pass them
|
||||
as parameter.
|
||||
<source lang="smarty">
|
||||
{include file='path/foo.tpl' index=$smarty.section.foo.index}
|
||||
</source>
|
||||
|
||||
== SMARTY_RESOURCE_CHAR_SET ==
|
||||
Smarty 3 sets the constant SMARTY_RESOURCE_CHAR_SET to utf-8 as default template charset.
|
||||
This is now used also on modifiers like escape as default charset. If your templates use
|
||||
other charsets make sure that you define the constant accordingly. Otherwise you may not
|
||||
Smarty 3 sets the constant SMARTY_RESOURCE_CHAR_SET to utf-8 as default template charset.
|
||||
This is now used also on modifiers like escape as default charset. If your templates use
|
||||
other charsets make sure that you define the constant accordingly. Otherwise you may not
|
||||
get any output.
|
||||
|
||||
== newline at {if} tags ==
|
||||
A \n was added to the compiled code of the {if},{else},{elseif},{/if} tags to get output of newlines as expected by the template source.
|
||||
A \n was added to the compiled code of the {if},{else},{elseif},{/if} tags to get output of newlines as expected by the template source.
|
||||
If one of the {if} tags is at the line end you will now get a newline in the HTML output.
|
||||
|
||||
== trigger_error() ==
|
||||
@@ -96,7 +96,7 @@ The API function trigger_error() has been removed because it did just map to PHP
|
||||
However it's still included in the Smarty2 API wrapper.
|
||||
|
||||
== Smarty constants ==
|
||||
The constants
|
||||
The constants
|
||||
SMARTY_PHP_PASSTHRU
|
||||
SMARTY_PHP_QUOTE
|
||||
SMARTY_PHP_REMOVE
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
== Smarty2 backward compatibility ==
|
||||
All Smarty2 specific API functions and deprecated functionallity has been moved
|
||||
All Smarty2 specific API functions and deprecated functionality has been moved
|
||||
to the SmartyBC class.
|
||||
|
||||
== {php} Tag ==
|
||||
The {php} tag is no longer available in the standard Smarty calls.
|
||||
The use of {php} tags is deprecated and only available in the SmartyBC class.
|
||||
The {php} tag is no longer available in the standard Smarty calls.
|
||||
The use of {php} tags is deprecated and only available in the SmartyBC class.
|
||||
|
||||
== {include_php} Tag ==
|
||||
The {include_php} tag is no longer available in the standard Smarty calls.
|
||||
The use of {include_php} tags is deprecated and only available in the SmartyBC class.
|
||||
The {include_php} tag is no longer available in the standard Smarty calls.
|
||||
The use of {include_php} tags is deprecated and only available in the SmartyBC class.
|
||||
|
||||
== php template resource ==
|
||||
The support of the php template resource is removed.
|
||||
|
||||
@@ -50,7 +50,7 @@ The escape modifier now knows the $double_encode option, which will
|
||||
prevent entities from being encoded again.
|
||||
|
||||
The capitalize modifier now know the $lc_rest option, which makes sure
|
||||
all letters following a captial letter are lower-cased.
|
||||
all letters following a capital letter are lower-cased.
|
||||
|
||||
The count_sentences modifier now accepts (.?!) as
|
||||
legitimate endings of a sentence - previously only (.) was
|
||||
@@ -62,7 +62,7 @@ entity.
|
||||
|
||||
default_template_handler_func
|
||||
|
||||
The invocation of $smarty->$default_template_handler_func had to be
|
||||
The invocation of $smarty->$default_template_handler_func had to be
|
||||
altered. Instead of a Smarty_Internal_Template, the fifth argument is
|
||||
now provided with the Smarty instance. New footprint:
|
||||
|
||||
@@ -71,14 +71,14 @@ now provided with the Smarty instance. New footprint:
|
||||
* Default Template Handler
|
||||
*
|
||||
* called when Smarty's file: resource is unable to load a requested file
|
||||
*
|
||||
*
|
||||
* @param string $type resource type (e.g. "file", "string", "eval", "resource")
|
||||
* @param string $name resource name (e.g. "foo/bar.tpl")
|
||||
* @param string &$content template's content
|
||||
* @param integer &$modified template's modification time
|
||||
* @param Smarty $smarty Smarty instance
|
||||
* @return string|boolean path to file or boolean true if $content and $modified
|
||||
* have been filled, boolean false if no default template
|
||||
* @return string|boolean path to file or boolean true if $content and $modified
|
||||
* have been filled, boolean false if no default template
|
||||
* could be loaded
|
||||
*/
|
||||
function default_template_handler_func($type, $name, &$content, &$modified, Smarty $smarty) {
|
||||
@@ -126,7 +126,7 @@ run on variable output.
|
||||
SYNTAX:
|
||||
{setfilter filter1|filter2|filter3....}
|
||||
Smarty3 will lookup up matching filters in the following search order:
|
||||
1. varibale filter plugin in plugins_dir.
|
||||
1. variable filter plugin in plugins_dir.
|
||||
2. a valid modifier. A modifier specification will also accept
|
||||
additional parameter like filter2:'foo'
|
||||
3. a PHP function
|
||||
@@ -186,8 +186,8 @@ Note that old-fashioned registration of $cache_handler is not possible
|
||||
anymore. As the functionality had not been ported to Smarty 3.0.x
|
||||
properly, it has been dropped from 3.1 completely.
|
||||
|
||||
Locking facilities have been implemented to avoid concurrent cache
|
||||
generation. Enable cache locking by setting
|
||||
Locking facilities have been implemented to avoid concurrent cache
|
||||
generation. Enable cache locking by setting
|
||||
$smarty->cache_locking = true;
|
||||
|
||||
Relative Paths in Templates (File-Resource)
|
||||
@@ -258,7 +258,7 @@ default_config_handler_func() has been introduced.
|
||||
|
||||
default_plugin_handler_func()
|
||||
|
||||
An optional default_plugin_handler_func() can be defined which gets called
|
||||
An optional default_plugin_handler_func() can be defined which gets called
|
||||
by the compiler on tags which can't be resolved internally or by plugins.
|
||||
The default_plugin_handler() can map tags to plugins on the fly.
|
||||
|
||||
|
||||
+868
-133
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user