Source code of /usr/share/gwhois/subprograms/oid

Last modified: 2015-01-07 16:03:23

Download

#!/usr/bin/php
<?php

#
#  generic Whois - Subprogram "oid" (BETA)
#
#  (c) 2011-2015 by Daniel Marschall, ViaThinkSoft <www.viathinksoft.de>
#
#  Distribution, usage etc. pp. regulated by the current version of GPL.
#
#
#
# History:
# 2011-06-07    mar    0.1    Initial release
# 2011-07-22    mar    0.2    FT: Support for non-validated OIDs
# 2013-12-17    mar     0.3     FT: works again + Output now UTF-8
# 2015-01-07    mar     0.4     FT: fixed UTF-8 problem
#

# OID resolution over WhoIs
# Not really whois, but handy!

# TODO: weitere oid reps einbinden
# TODO: problem bei 2.999: char encoding
# TODO: tabs

# TODO: der encoding anzeigen

# TODO ALVESTRAND_NO fertig machen (404 erkennung, formatierung usw)

require_once __DIR__ '/../includes/common_functions.inc.php';

define('WALK_UP',            true);
define('ASK_FRANCE_TELECOM'true);
define('ASK_ALVESTRAND_NO',  false);

$domain $argv[1];

# normalize to "2.999", removing leading zeros, urn:oid: and oid: as well as leading dot
$domain normalize_oid($domainfalse);

// Check if the OID is correct and handle the special case of the root zone "oid:."
$test_oid explode('.'$domain2);
if (
$domain === '') {
    echo 
"You cannot lookup the root zone of the OIDs.\n";
    echo 
"Please choose at least one of these root OIDs:\n";
    echo 
"- itu-t(0)\n";
    echo 
"- iso(1)\n";
    echo 
"- joint-iso-itu-t(2)\n\n";
    
# exit(1);
    
exit;
} else {
    
$first_arc $test_oid[0];
    
$oid_ok = ($first_arc === '0') || ($first_arc === '1') || ($first_arc === '2');
    if (!
$oid_ok) {
        echo 
"The OID is invalid. The root arc needs to be 0, 1 or 2\n\n";
        
# exit(1);
        
exit;
    }
}

ob_start();

if (
ASK_FRANCE_TELECOM) {
    
check_oidinfo_com($domain);
}

if (
ASK_ALVESTRAND_NO) {
    if (
ASK_FRANCE_TELECOM) {
        echo 
"\n\n";
        echo 
"% ===========================================================\n";
        echo 
"% ===========================================================\n";
        echo 
"\n";
    }
    
check_alvestrand_no($domain);
}

$x ob_get_contents();
ob_end_clean();

$x wordwrap($x75"\n"false);
echo 
html_entity_decode($xENT_QUOTES'utf-8');
#echo $x;

# ----------------- FRANCE TELECOM OID REPOSITORY

# Callback for Link-Replacing
function fto_link_replacing_cb($treffer) {
    
# '[$4] &lt;$2&gt;'

    
$name $treffer[4];
    
$link $treffer[2];

    if (
trim(strip_tags($name)) == '') {
        return 
'';
    }

    
# relative -> absolute links
    
if (substr($link03) == '../') {
        
$link 'http://oid-info.com/'.$link;
    } else if (
$link[0] == '/') {
        
$link 'http://oid-info.com'.$link;
    }

    return 
$name ' &lt;' $link '&gt;';
}

function 
check_oidinfo_com($oid) {
    
$url "http://oid-info.com/get/$oid";

    
$x file_get_contents2($url);

    
$father fto_find_father($x);

    
$err 'The following error must be corrected to take your request into account:';

    if (
strpos($x$err) !== false) {
        echo 
"\nError:\n"# TODO: warum \n am anfang?

        
preg_match_all('|<font color="#ff0000">(.*)</font>|ismU'$x$m);

        
$x implode("\n"$m[1]);

        
$x strip_tags($x);

        
$x trim($x);

        echo 
$x;

        if (
WALK_UP && ($father !== false)) {
            echo 
"\n\n";
            echo 
"% ===========================================================\n";
            echo 
"% Requesting father OID '$father'\n";
            echo 
check_oidinfo_com($father);
        }

        return;
    } else {
        if ((
strpos($x'<td>(ASN.1 notation)</td>') === false) &&
            (
strpos($x'This OID description has not yet been validated') === false)) {
            echo 
"\nUnknown error! Please try again later.\n";

            if (
WALK_UP && ($father !== false)) {
                echo 
"\n\n";
                echo 
"% ===========================================================\n";
                echo 
"% Requesting father OID '$father'\n";
                echo 
check_oidinfo_com($father);
            }

            return;
        }
    }

    if (
strpos($x'This OID description has not yet been validated') !== false) {
        
// <i>This OID description has not yet been validated by the OID repository administrator and/or the registrant of the superior OID.</i> 
        
preg_match_all('|<i>(.+?)</i>|'$x$m);
        echo 
$m[1][0];

        if (
WALK_UP && ($father !== false)) {
            echo 
"\n\n";
            echo 
"% ===========================================================\n";
            echo 
"% Requesting father OID '$father'\n";
            echo 
check_oidinfo_com($father);
        }

        return;
    }

    
$x str_replace('<b>Short URL for this page</b>'."\n:"''$x);
    
$x str_replace('<font size="-2">Webmaster</font></td>''</td>'$x);
    
$x str_replace('<b>Disclaimer:</b>'"\n\n".'<b>Disclaimer:</b>'."\n\n"$x);

    
$del '<tr bgcolor="#CCCCCC">';
    
$ary explode($del$x2);
    if (isset(
$ary[1])) $x $ary[1];

    echo 
"% Parsing via regex from '$url'\n\n";

    
$x preg_replace_callback('|<a\s([^>]*?)href="(.*)"([^>]*?)>(.*)</a>|ismU''fto_link_replacing_cb'$x);

    
$x strip_tags($x);

    
$x str_replace('&nbsp;'' '$x);
    
$x str_replace('&nbsp'' '$x);

    
$x html_entity_decode($x);

    
$x preg_replace("| +|"' '$x);
    
$x preg_replace("|\n *|""\n"$x);
    
$x preg_replace("| *\n|""\n"$x);
    
$x preg_replace("|\n+|""\n"$x);

    
$x preg_replace('|<mailto:(.*)&(.*)>|ismU''<$1$2>'$x);
    
$x str_replace("<#top>\n"''$x);
    
$x str_replace('(OID-IRI <http://oid-info.com/faq.htm#iri> notation)''(OID-IRI notation)'$x);

    
$prev_swap_lines = array(
        
'(ASN.1 notation)',
        
'(dot notation)',
        
'(OID-IRI notation)',
    );

    
$ary explode("\n"$x);
    foreach (
$prev_swap_lines as $s) {
        foreach (
$ary as $n => $l) {
            if (
$l == $s) {
                
$tmp $ary[$n-1];
                
$ary[$n-1] = $ary[$n];
                
$ary[$n] = $tmp;
            }
        }
    }
    
$x implode("\n"$ary);

    foreach (
$prev_swap_lines as $s) {
        
$sx str_replace('('''$s);
        
$sx str_replace(')'''$sx);
        
$x str_replace("$s\n""$sx: "$x);
    }

    
$ary explode("\n"$x);
    
$c count($ary);
    
$tmp $ary[$c-2];
    
$ary[$c-2] = "Last modified:\n$tmp";
    
$x implode("\n"$ary);

    
$x preg_replace("|\nFirst Registration Authority$|ismU""\nFirst Registration Authority:"$x);
    
$x preg_replace("|\nCurrent Registration Authority$|ismU""\nCurrent Registration Authority:"$x);

    
$special_words = array(
        
'Name:',
        
'Address:',
        
'Phone:',
        
'Fax:',
        
'Creation date:'
    
);

    foreach (
$special_words as $s) {
        
$x str_replace("$s\n""$s "$x);
    }

    
$special_words = array(
        
'OID:',
        
'Information:',
        
'Description:',
        
'Disclaimer:',
        
'Last modified:',
        
'First Registration Authority:',
        
'Current Registration Authority:'
    
);

    foreach (
$special_words as $s) {
        
$x str_replace("\n$s\n""\n\n".strtoupper($s)."\n\n"$x);
    }

    
$x preg_replace("/To contact the (first|current) Registration Authority, replace \"&\" by \"\" in the email address\n/ismU"''$x);
    
$x preg_replace("/Short URL for this page:\n/ismU"''$x);

    
$x trim($x);

    echo 
$x;

    if (
WALK_UP && ($father !== false)) {
        echo 
"\n\n";
        echo 
"% ===========================================================\n";
        echo 
"% Requesting father OID '$father'\n";
        echo 
check_oidinfo_com($father);
    }
}

function 
fto_find_father($content) {

    
# Works for...
    # ... root OIDS, e.g. 2
    # ... existing OIDs, e.g. 2.999
    # ... non existing OIDs, 2.999.1 and 2.999.1.2
    # ... orphan OIDs, e.g. 1.3.6.1.4.1.311.1.1.3.1.2
    # ... non validated OIDs...

    
$content str_replace('<img src="/images/bullet.gif" width="10" height="8" border="0"><a href="/basic-search.htm">'''$content);

    
// For non validated OIDs
    
$content str_replace('<br><img src="/images/bullet.gif" width="10" height="8" border="0"><a href="/cgi-bin/manage?father_oid='''$content);

    
$ary explode('<font size="+2" color="#FF5500"><b>OID description</b></font>'$content2);
    
$content $ary[0];

    
preg_match_all('|<img src="/images/bullet.gif" width="10" height="8" border="0"><a href="(.*)">|ismU'$content$m);

    
$c count($m[1]);

    if (
$c == 0) return false;

    
$last $m[1][$c-1];
    
$last str_replace('/cgi-bin/manage?action=create&oid='''$last);
    
$last str_replace('http://www.oid-info.com/get/'''$last);
    
$last str_replace('http://oid-info.com/get/'''$last);

    return 
$last;
}

# ----------------- ALVESTRAND.NO
# Note that oid-info.com usually contains all OIDs in alvestrands repository.

# todo: + submissions checken (not proofread)
# todo: 404
# todo: fertig
# todo: <p> als \n werten, alles andere als nichts

# Callback for Link-Replacing
function alv_link_replacing_cb($treffer) {
    
# '[$4] &lt;$2&gt;'

    
$name $treffer[4];
    
$link $treffer[2];

    if (
trim(strip_tags($name)) == '') {
        return 
'';
    }

    
# relative -> absolute links
    
if (substr($link03) == '../') {
        
$link 'http://www.alvestrand.no/'.$link;
    } else if (
$link[0] == '/') {
        
$link 'http://www.alvestrand.no'.$link;
    }

    return 
$name ' &lt;' $link '&gt;';
}

function 
check_alvestrand_no($oid) {
    
$oid convert_to_dot($oid);

    
$father oid_up($oid);
    if (
$father == $oid$father false;

    
$url "http://www.alvestrand.no/objectid/$oid.html";

    
$x file_get_contents2($url);

    echo 
"% Parsing via regex from '$url'\n\n";

    
$x preg_replace_callback('|<a\s([^>]*?)href="(.*)"([^>]*?)>(.*)</a>|ismU''alv_link_replacing_cb'$x);

    
$x strip_tags($x);

    
$x str_replace('&nbsp;'' '$x);
    
$x str_replace('&nbsp'' '$x);

    
$x html_entity_decode($x);

    
$x preg_replace("| +|"' '$x);
    
$x preg_replace("|\n *|""\n"$x);
    
$x preg_replace("| *\n|""\n"$x);
    
$x preg_replace("|\n+|""\n"$x);

    
$x preg_replace('|<mailto:(.*)&(.*)>|ismU''<$1$2>'$x);

    
$x preg_replace('|Superior references(.*)Incoming OIDs <submissions> that have not been proofread yet|ismU'''$x);

    
$x trim($x);

    echo 
$x;

    if (
WALK_UP && ($father !== false)) {
        echo 
"\n\n";
        echo 
"% ===========================================================\n";
        echo 
"% Requesting father OID '$father'\n";
        echo 
check_alvestrand_no($father);
    }
}

function 
oid_up($oid) {
    
$p strrpos($oid'.');
    if (
$p === false) return $oid;
    return 
substr($oid0$p);
}

function 
convert_to_dot($oid) {
    
// {joint-iso-itu-t(2) example(999) 1 2 3} --> 2.999.1.2.3
    // 2.999 --> 2.999
    // joint-iso-itu-t.999 --> 2.999

    
$oid str_replace('.'' '$oid);

    
# Standardized identifiers
    
$oid $oid ";
    
$oid str_replace(' ccitt ''0 '$oid);
    
$oid str_replace(' itu-r ''0 '$oid);
    
$oid str_replace(' itu-t ''0 '$oid);
    
$oid str_replace(' iso ''1 '$oid);
    
$oid str_replace(' joint-iso-ccitt ''2 '$oid);
    
$oid str_replace(' joint-iso-itu-t ''2 '$oid);

    
$oid preg_replace("|([^0123456789 ]*)|ismU"""$oid);
    
$oid trim($oid);
    
$oid str_replace(' ''.'$oid);
    return 
$oid;
}