Sample Code – LDAPNetAddr (Updated)



By: phavekes

October 29, 2010 10:32 am

Reads: 310

License:
None

An update to the verry handy cool solution Sample Code – LDAPNetAddr
I found that recently our edir returned an addresstype 9 (tcp) instead of 1 (IP), which wasn’t handled correctly by the sample code. I’ve modified the code to handle these addresses correctly.

function LDAPNetAddr ($networkaddress) {
/*
Initial version: Jay Burrell, Systems & Networks, Mississippi State University
Updated by Peter Havekes to support addresstype 9
   
NetAddr - extract readable network address from the LDAP encoded networkAddress attribute.
Novell Docs, see: http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5624.html#sdk5624
for Address types: http://developer.novell.com/ndk/doc/ndslib/index.html?page=/ndk/doc/ndslib/schm_enu/data/sdk4170.html
LDAP Format, String:
taggedData = uint32String "#" octetstring
byte 0 = uint32String = Address Type: 0= IPX Address; 1 = IP Address
byte 1 = char = "#" - separator
byte 2+ = octetstring - the ordinal value of the address
                                                            
Note: with eDirectory 8.6.2, the IP address (type 1) returns correctly, however, an IPX address does not seem to.  eDir 8.7 may correct this.
*/  

$addr = "";
$addrtype = intval(substr($networkaddress, 0, 1));
$networkaddress = substr($networkaddress, 2);  // throw away bytes 0 and 1 which should be the addrtype and the "#" separator
$addrtypes = array('IPX', 'IP', 'SDLC', 'Token Ring', 'OSI', 'AppleTalk', 'NetBEUI', 'Socket', 'UDP', 'TCP', 'UDP6', 'TCP6', 'Reserved (12)', 'URL', 'Count');
$len = strlen($networkaddress);
if ($len > 0) { 
  for ($i=0; $i<$len; $i+=1) {
    $byte = substr($networkaddress, $i, 1);
    $addr .= ord($byte);

    if ($addrtype == 1){  // dot separate IP addresses...
      $addr .= ".";
      }
    if ($addrtype == 9 ){
      $addr .= ".";
    }
  }  
    if ($addrtype == 1) {  // strip last period from end of $addr
      $addr = substr($addr, 0, strlen($addr)-1);
    }
    if ($addrtype == 9 ){
      $addr = substr($addr,4,strlen($addr)-5);                      
    }
  }   
else {
  $addr .= "address not available.";
  }
return ($addr);
}
VN:F [1.9.22_1171]
Rating: 0.0/5 (0 votes cast)

Tags: , , , ,
Categories: Cool Tools, eDirectory

Disclaimer: As with everything else at NetIQ Cool Solutions, this content is definitely not supported by NetIQ, so Customer Support will not be able to help you if it has any adverse effect on your environment.  It just worked for at least one person, and perhaps it will be useful for you too.  Be sure to test in a non-production environment.

Comment