Regular expression for LDAP analysis dn

I have the following line:

cn=abcd,cn=groups,dc=domain,dc=com 

Is it possible to use a regular expression to extract a string after the first cn= and before the first,? In the above example, the answer should be abcd .

+4
source share
5 answers
  /cn=([^,]+),/ 

most languages โ€‹โ€‹will extract a match of $ 1 or matches [1]

If you cannot use indexes for any reason,

 $x =~ s/^cn=// $x =~ s/,.*$// 

This is the way to do it in 2 steps.

If you parsed it from a log with sed

 sed -n -r '/cn=/s/^cn=([^,]+),.*$/\1/p' < logfile > dumpfile 

will provide you with what you want. (Added additional commands for printing only matching lines)

+12
source
 /^cn=([^,]+),/ 
+6
source

Yes, using the syntax perl / java cn=([^,]*), Then you will get the 1st group.

0
source

Also, find a ready-made LDAP parser.

0
source

I had to work in PHP.

Since the LDAP string can sometimes be long and have many attributes, I was thinking about how to use it in a project.

I wanted to use:

 CN=username,OU=UNITNAME,OU=Region,OU=Country,DC=subdomain,DC=domain,DC=com 

And turn it into:

 array ( [CN] => array( username ) [OU] => array( UNITNAME, Region, Country ) [DC] => array ( subdomain, domain, com ) ) 

This is how I built my method.

 /** * Read a LDAP DN, and return what is needed * * Takes care of the character escape and unescape * * Using: * CN=username,OU=UNITNAME,OU=Region,OU=Country,DC=subdomain,DC=domain,DC=com * * Would normally return: * Array ( * [count] => 9 * [0] => CN=username * [1] => OU=UNITNAME * [2] => OU=Region * [5] => OU=Country * [6] => DC=subdomain * [7] => DC=domain * [8] => DC=com * ) * * Returns instead a manageable array: * array ( * [CN] => array( username ) * [OU] => array( UNITNAME, Region, Country ) * [DC] => array ( subdomain, domain, com ) * ) * * * @author gabriel at hrz dot uni-marburg dot de 05-Aug-2003 02:27 (part of the character replacement) * @author Renoir Boulanger * * @param string $dn The DN * @return array */ function parseLdapDn($dn) { $parsr=ldap_explode_dn($dn, 0); //$parsr[] = 'EE=Sรดme Krazรฏ string'; //$parsr[] = 'AndBogusOne'; $out = array(); foreach($parsr as $key=>$value){ if(FALSE !== strstr($value, '=')){ list($prefix,$data) = explode("=",$value); $data=preg_replace("/\\\([0-9A-Fa-f]{2})/e", "''.chr(hexdec('\\1')).''", $data); if(isset($current_prefix) && $prefix == $current_prefix){ $out[$prefix][] = $data; } else { $current_prefix = $prefix; $out[$prefix][] = $data; } } } return $out; } 
0
source

Source: https://habr.com/ru/post/1276892/


All Articles