"; } elseif(ereg("^version",trim($current_line))){ $ldif_line_found=1; ldif_next_line(); // TODO: handle the version number here } // not valid ldif line was found else{ //set the flag warning $warning=1; $warning_message = "No version found - assuming 1"; } }//end while $warning?0:1; }// end get_version() method /** * Return a warning message * * @return a warning message */ function ldif_warning_message(){ global $warning_message; return $warning_message; } function ldif_error_message(){ global $error_message; return $error_message; } /** * Check if the file is valie * * */ function is_valid_file($path_to_file){ return file_exists($path_to_file)&&is_file($path_to_file)&&is_readable($path_to_file); } /** * Close the file * * */ function ldif_close(){ global $fp; @fclose($fp); } /** * Return the action that the ldap server should do with an entry * The default action is add. * * @return the action the server should do. */ function ldif_get_action(){ global $current_line; // default action is add $action ="add"; if(ereg("changetype:[ ]*(delete|add|modrdn|moddn|modify)",$current_line,$arr)){ $action = $arr[1]; ldif_next_line(); } return $action; } /** * Retrieve the dn of an entry * @return the dn value of an entry */ function ldif_fetch_dn_entry(){ global $error; global $current_line; global $error_message; global $line_number; global $number_of_lines; // the value of the dn $current_dn_value; //boolean flag to see if any dn was found $dn_found=0; while(!ldif_eof()&&!$dn_found&&!$error){ //skip comment and blank line if(ldif_is_blank_line()||ldif_is_comment_line()){ //debug //echo "$line_number - comment\n
"; ldif_next_line(); } // case where the dn is found elseif(ldif_is_dn_line()){ $current_dn=$current_line; //debug //echo "$line_number - $current_line
"; $dn_found=1; } else{ $error=1; $error_message = "Error: Line ".$line_number." - a valid dn is required"; return false; } }//fin while // if mainly to hanlde the case //where a dn was found and is written on several lines // could be use to test if any white line appears after if($dn_found&&!ldif_eof()){ //boolean flag to see if the dn is written on more than one line $dn_has_next=0; //keeping track of the line number of the dn when first encountered $dn_line_number = $line_number; // empty string to store the possible following lines while(!$dn_has_next){ ldif_next_line(); //if next line begin with a space and is not empty // append to the previous line if((substr($current_line,0,1)==" ")){ ereg_replace("\n|\r|\r\n","",$current_dn =trim($current_dn).trim($current_line)); } //else leaving the while loop else{ $dn_has_next=1; } }//end while //debug //echo $dn_line_number." - ".$current_dn."\r\n
"; // handle base 64 case here if(ereg("^dn::",$current_dn)){ $current_dn = base64_decode(trim(substr($current_dn,4,strlen($current_dn)-1))); }else{ $current_dn = trim(substr($current_dn,3,strlen($current_dn)-1)); } // echo $dn_line_number."-".$current_dn."
"; } return $current_dn; } /** * functions which will return a array of attributes * for this entry * * @return attrs the array of attributes */ function ldif_fetch_attributes_for_entry(){ global $error; global $current_line; global $line_number; global $error_message; global $server_id; $attribute_value=""; //array to store the attribute $attrs = array(); // while we dont find any empty line or any error occur while(trim($current_line)!=""&&$error!=1){ //1 - we need to check if it's a valid ldif line. //----------------------------------------------- if(ereg(":",trim($current_line),$arr)&&substr($current_line,0,1)!=" "){ //get the position of the character ":" $pos = strpos($current_line,":"); //get the name of the attribute $attribute_name = substr($current_line,0, $pos); // get the value part of the attribute $attribute_value_part = trim(substr($current_line,$pos+1,strlen($current_line))); //2 - we get the description and the "value" part // now check if it's split over several lines $att_has_next = 0; $attr_line_number=$line_number; while(!$att_has_next){ ldif_next_line(); //if there is a another line for the attribute value,it should: // 1 - begin with a white space // 2 - have a length > 1 // 3 - not have the character : if((substr($current_line,0,1)==" ")&&!ereg(":",trim($current_line))){ ereg_replace("\n|\r|\r\n","",$attribute_value_part =trim($attribute_value_part).trim($current_line)); } else{ $att_has_next=1; } } //3 - need to see if the value is base 64 encoded,an url //------------------------------------------------------- $attribute_value=""; //if the next character in the value part is ":";it's it base 64 encoded if(substr($attribute_value_part,0,1)==":"){ // it is binary data,so we just decode it $attribute_value = base64_decode(trim(substr($attribute_value_part,1))); } //else if the next charachter is <, we have to handle an url elseif(substr($attribute_value_part,0,1)=="<"){ // we need to handle the case for the scheme "file://" as it //doesn't seem to be supported by fopen $file_path_with_scheme= trim(substr($attribute_value_part,1)); if(ereg("^file://",$file_path_with_scheme)){ $file_path = substr(trim($file_path_with_scheme),7); if($handle = @fopen($file_path, "rb")){ $attribute_value = @fread($handle,filesize($file_path)); @fclose($handle); } else{ $error=1; $error_message = "Line: ".$attr_line_number. " - Unable to open file ". $file_path_with_scheme; return false; } } else{ $error=1; $error_message = "Line: ".$attr_line_number. " - the URL seems no to be well formed "; return false; } } //it's a string else{ $attribute_value = trim($attribute_value_part); } $attrs[$attribute_name][] = $attribute_value; //debug // echo $attr_line_number."- ".$attribute_name.":".$attribute_value."\r\n
"; } // the attribute line contains the charachter ":" or there is // at least a white space at the begining else{ $error_message = "Line ". $line_number. " - Attribute not well formed"; $error=1; return false; } } return $attrs; }