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);
}
0 votes, average: 0.00 out of 50 votes, average: 0.00 out of 50 votes, average: 0.00 out of 50 votes, average: 0.00 out of 50 votes, average: 0.00 out of 5 (0 votes, average: 0.00 out of 5)
You need to be a registered member to rate this post.
Loading...Loading...

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.

Leave a Reply

No Comments
By: phavekes
Oct 29, 2010
10:32 am
Reads:
1,291
Score:
Unrated