diff --git a/INSTALL b/INSTALL index d3a5fcb..4a3e2ce 100644 --- a/INSTALL +++ b/INSTALL @@ -1,49 +1,21 @@ -These instructions assume that you have a working install of: - a. A web server (Apache, IIS, etc). - b. PHP (with LDAP support) +For install instructions in non-English languages, see the files +in the "doc" directory. -* Installing phpLDAPadmin in 4 easy steps: +* Requirements - 1. Untar the archive (if you're reading this, you already did that). + phpLDAPadmin requires the following: + a. A web server (Apache, IIS, etc). + b. PHP 4.1.0 or newer (with LDAP support) + +* To install + + 1. Unpack the archive (if you're reading this, you already did that). 2. Put the resulting 'phpldapadmin' directory somewhere in your webroot. 3. Copy 'config.php.example' to 'config.php' and edit to taste. 4. Then, point your browser to the phpldapadmin directory. -* Browser Notes - - phpLDAPadmin was developed on Mozilla, and will most likely run best thereon. - However, testing has been done on Internet Explorer, and it should work - well also. No testing has been done on either Konqueror (or any khtml-based - browser like Safari) or Opera. If you find a browser incompatibility, - please report it. - -* Contributors (thank you!) - - Project Developers: - - - David Smith Maintainer - - Xavier Renard LDIF master - - Nate Rotschafer Release manager - - Patch writers: - - - Bayu Irawan userPassword hash, html fixes, ldap_modify fixes - - Uwe Ebel short_open_tags fix - - Andrew Tipton SUP support in schema parser - - Eigil Bjørgum UTF-8 support - - Brandon Lederer DNS entry template - Nathan Rotschafer - - Steve Rigler Password hash patch - - Chric Jackson Blowfish and md5crypt passwords - - Marius Rieder Enhanced schema parser - - Nick Burch Many realpath() fixes - - Translators: - - - Uwe Ebel German - - Xavier Renard French - - Dave Smith English ;) - - If you can help translate, please join the phpldapadmin-devel mailing list: - https://lists.sourceforge.net/mailman/listinfo/phpldapadmin-devel +* For help + See the files in the "doc" directory. + Join our mailing list: + https://lists.sourceforge.net/lists/listinfo/phpldapadmin-devel diff --git a/VERSION b/VERSION index f374f66..2003b63 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.9.1 +0.9.2 diff --git a/add_oclass_form.php b/add_oclass_form.php index 80ef6fb..00ba27a 100644 --- a/add_oclass_form.php +++ b/add_oclass_form.php @@ -36,10 +36,18 @@ $entry = get_object_attrs( $server_id, $dn, true ); $current_attrs = array(); foreach( $entry as $attr => $junk ) $current_attrs[] = strtolower($attr); + // grab the required attributes for the new objectClass -$must_attrs = get_schema_objectclasses( $server_id ); -$must_attrs = $must_attrs[ strtolower($new_oclass) ]['must_attrs']; -sort( $must_attrs ); +$oclass = get_schema_objectclass( $server_id, $new_oclass ); +if( $oclass ) + $must_attrs = $oclass->getMustAttrs(); +else + $must_attrs = array(); + +// We don't want any of the attr meta-data, just the string +foreach( $must_attrs as $i => $attr ) + $must_attrs[$i] = $attr->getName(); + // build a list of the attributes that this new objectClass requires, // but that the object does not currently contain $needed_attrs = array(); @@ -54,7 +62,7 @@ if( count( $needed_attrs ) > 0 )

+ ' ' . $lang['new_attributes']; ?> diff --git a/add_value_form.php b/add_value_form.php index 5646e2b..90e8e02 100644 --- a/add_value_form.php +++ b/add_value_form.php @@ -12,8 +12,6 @@ */ require 'common.php'; -require 'config.php'; -require_once 'functions.php'; $dn = $_GET['dn']; $encoded_dn = rawurlencode( $dn ); @@ -43,9 +41,7 @@ if( $is_object_class ) { $schema_attr = get_schema_attribute( $server_id, $attr ); } -?> - - +include 'header.php'; ?> @@ -96,12 +92,12 @@ if( $is_object_class ) { 1 )*/ { foreach( $current_values as $val ) { ?> -
  • +
  • -
  • +
  • @@ -119,15 +115,21 @@ if( $is_object_class ) { -
    +
    + + +
    + +
    + @@ -141,15 +143,25 @@ if( $is_object_class ) { - + getMaxLength() ) + echo "maxlength=\"" . $schema_attr->getMaxLength() . "\" "; + ?>name="new_value" size="40" value="" />
    - : getType(); ?>
    + + getDescription() ) { ?> + Description: getDescription(); ?>
    + + + getType() ) { ?> + : getType(); ?>
    + + getMaxLength() ) { ?> - Max length: getMaxLength() ); ?> - characters + Max length: getMaxLength() ); ?> characters
    diff --git a/check_lang_files.php b/check_lang_files.php new file mode 100644 index 0000000..367143b --- /dev/null +++ b/check_lang_files.php @@ -0,0 +1,41 @@ +

    Incomplete or Erroneous Language Files

    \n\n"; + +include realpath( 'lang/en.php' ); +$english_lang = $lang; +unset( $lang ); +$lang_dir = realpath( 'lang' ); +$dir = opendir( $lang_dir ); + +while( ( $file = readdir( $dir ) ) !== false ) { + if( ! preg_match( "/\.php$/", $file ) ) + continue; + if( $file == 'en.php' ) + continue; + echo "

    $file

    "; + echo "
      "; + unset( $lang ); + $lang = array(); + include realpath( $lang_dir.'/'.$file ); + $has_errors = false; + foreach( $english_lang as $key => $string ) + if( ! isset( $lang[ $key ] ) ) { + $has_errors = true; + echo "
    1. missing entry: $key
    2. "; + } + foreach( $lang as $key => $string ) + if( ! isset( $english_lang[ $key ] ) ){ + $has_errors = true; + echo "
    3. extra entry: $key
    4. "; + } + if( ! $has_errors ) + echo "(No errors)"; + echo "
    "; +} + + + + + +?> diff --git a/collapse.php b/collapse.php index 67dbe2e..57b1f64 100644 --- a/collapse.php +++ b/collapse.php @@ -47,5 +47,5 @@ if(SID != ""){ $id_session_param = "&".session_name()."=".session_id(); } -header( "Location:tree.php?foo=$random_junk%23{$server_id}_{$encoded_dn}$id_session_param" ); +header( "Location:tree.php?foo=$random_junk#{$server_id}_{$encoded_dn}$id_session_param" ); ?> diff --git a/common.php b/common.php index c13714a..ce92ce4 100644 --- a/common.php +++ b/common.php @@ -6,23 +6,93 @@ * include this file at the top of every PHP file. */ +// Turn on all notices and warnings. This helps us write cleaner code (we hope at least) +error_reporting( E_ALL ); + +// We require this version or newer (use @ to surpress errors if we are included twice) +@define( 'REQUIRED_PHP_VERSION', '4.1.0' ); + +// config.php might not exist (if the user hasn't configured PLA yet) +// Only include it if it does exist. if( file_exists( realpath( 'config.php' ) ) ) { + is_readable( realpath( 'config.php' ) ) or pla_error( "Could not read config.php, its permissions are too strict." ); require realpath( 'config.php' ); } + +// General functions (pla_ldap_search(), pla_error(), get_object_attrs(), etc.) +is_readable( realpath( 'functions.php' ) ) + or pla_error( "Cannot read the file 'functions.php' its permissions are too strict." ); require_once realpath( 'functions.php' ); + +// Functions for reading the server schema (get_schema_object_classes(), etc.) +is_readable( realpath( 'schema_functions.php' ) ) + or pla_error( "Cannot read the file 'schema_functions.php' its permissions are too strict." ); require_once realpath( 'schema_functions.php' ); -// grab the language file configured in config.php -if( ! isset( $language ) ) - $language = 'english'; -if( file_exists( realpath( "lang/$language.php" ) ) ) - include realpath( "lang/$language.php" ); +// Functions that can be defined by the user (preEntryDelete(), postEntryDelete(), etc.) +is_readable( realpath( 'custom_functions.php' ) ) + or pla_error( "Cannot read the file 'custom_functions.php' its permissions are too strict." ); +require_once realpath( 'custom_functions.php' ); -// Turn off notices about referencing arrays and such, but leave everything else on. -error_reporting( E_ALL ^ E_NOTICE ); +// Our custom error handler receives all error notices that pass the error_reporting() +// level set above. +set_error_handler( 'pla_error_handler' ); +// Creates the language array which will be populated with localized strings +// based on the user-configured language. +$lang = array(); + +// Little bit of sanity checking +if( ! file_exists( realpath( 'lang/recoded' ) ) ) { + pla_error( "Your install of phpLDAPadmin is missing the 'lang/recoded' directory. This should not happen. You can try running 'make' in the lang directory" ); +} + +// use English as a base-line (in case the selected language is missing strings) +if( file_exists( realpath( 'lang/recoded/en.php' ) ) ) + include realpath( 'lang/recoded/en.php' ); +else + pla_error( "Error! Missing recoded English language file. Run 'make' in the lang/ directory." ); + +// Language configuration. Auto or specified? +// Shall we attempt to auto-determine the language? +if( isset( $language ) ) { + if( 0 == strcasecmp( $language, "auto" ) ) { + // get the languages which are spetcified in the HTTP header + $HTTP_LANGS1 = preg_split ("/[;,]+/", $_SERVER['HTTP_ACCEPT_LANGUAGE'] ); + $HTTP_LANGS2 = preg_split ("/[;,]+/", $_SERVER['HTTP_ACCEPT_LANGUAGE'] ); + foreach( $HTTP_LANGS2 as $key => $value ) { + $value=preg_split ("/[-]+/", $value ); + $HTTP_LANGS2[$key]=$value[0]; + } + + $HTTP_LANGS = array_merge ($HTTP_LANGS1, $HTTP_LANGS2); + foreach( $HTTP_LANGS as $HTTP_LANG) { + // try to grab one after the other the language file + if( file_exists( realpath( "lang/recoded/$HTTP_LANG.php" ) ) && + is_readable( realpath( "lang/recoded/$HTTP_LANG.php" ) ) ) { + include realpath( "lang/recoded/$HTTP_LANG.php" ); + break; + } + } + } else { + // grab the language file configured in config.php + if( $language != null ) { + if( 0 == strcmp( $language, 'english' ) ) + $language = 'en'; + if( file_exists( realpath( "lang/recoded/$language.php" ) ) && + is_readable( realpath( "lang/recoded/$language.php" ) ) ) { + include realpath( "lang/recoded/$language.php" ); + } else { + pla_error( "Could not read language file 'lang/recoded/$language.php'. Either the file + does not exist, or permissions do not allow phpLDAPadmin to read it." ); + } + } + } +} + +// If config.php doesn't create the templates array, create it here. if( ! isset( $templates ) || ! is_array( $templates ) ) - $tempaltes = array(); + $templates = array(); // Always including the 'custom' template (the most generic and flexible) $templates['custom'] = @@ -44,9 +114,9 @@ if ( get_magic_quotes_gpc() && ( ! isset( $slashes_stripped ) || ! $slashes_stri } } - array_stripslashes($_POST); array_stripslashes($_GET); - array_stripslashes($_COOKIES); + array_stripslashes($_POST); + array_stripslashes($_COOKIE); $slashes_stripped = true; } diff --git a/config.php.example b/config.php.example index 0830019..ee7d2f1 100644 --- a/config.php.example +++ b/config.php.example @@ -14,31 +14,58 @@ // Your LDAP servers $i=0; $servers = array(); -$servers[$i]['name'] = 'My LDAP Server'; /* A convenient name that will appear in the tree viewer */ -$servers[$i]['host'] = 'ldap.example.com'; /* Examples: 'ldap.example.com', 'ldaps://ldap.example.com/' - Note: Leave blank to remove it from the list of servers in the - tree viewer*/ -$servers[$i]['base'] = 'dc=example,dc=com';/* The base DN of your LDAP server. Leave this blank to have phpLDAPadmin +$servers[$i]['name'] = 'My LDAP Server'; /* A convenient name that will appear in + the tree viewer */ +$servers[$i]['host'] = 'ldap.example.com'; /* Examples: 'ldap.example.com', + 'ldaps://ldap.example.com/' + Note: Leave blank to remove it from the list + of servers in the tree viewer*/ +$servers[$i]['base'] = 'dc=example,dc=com';/* The base DN of your LDAP server. Leave this + blank to have phpLDAPadmin auto-detect it for you. */ -$servers[$i]['port'] = 389; /* The port your LDAP server listens on (no quotes) */ -$servers[$i]['auth_type'] = 'config'; /* 2 options: 'form': you will be prompted, and a cookie stored - with your login dn and password. 'config': specify your login dn +$servers[$i]['port'] = 389; /* The port your LDAP server listens on + (no quotes) */ +$servers[$i]['auth_type'] = 'config'; /* 2 options: 'form': you will be prompted, and + a cookie stored with your login dn and + password. 'config': specify your login dn and password here. In both cases, use caution! */ -$servers[$i]['login_dn'] = 'cn=Manager,dc=example,dc=com'; /* For anonymous binds, leave the login_dn and - login_pass blank */ -$servers[$i]['login_pass'] = 'secret'; /* Your password (only if you specified 'config' for 'auth_type' */ -$servers[$i]['tls'] = false; /* Use TLS to connect. Requires PHP 4.2 or greater */ -$servers[$i]['default_hash'] = 'crypt'; /* Default password hashing algorith: one of md5, sha, md5crpyt, blowfish or +$servers[$i]['login_dn'] = 'cn=Manager,dc=example,dc=com'; /* For anonymous binds, leave the + login_dn and login_pass blank */ +$servers[$i]['login_pass'] = 'secret'; /* Your password (only if you specified 'config' + for 'auth_type' */ +$servers[$i]['tls'] = false; /* Use TLS to connect. Requires PHP 4.2 or newer */ +$servers[$i]['default_hash'] = 'crypt'; /* Default password hashing algorith; + One of md5, ssha, sha, md5crpyt, blowfish or leave blank for now default algorithm. */ -$servers[$i]['login_attr'] = 'dn'; /* If you specified 'form' as the auth_type above, you can optionally - specify here an attribute to use when logging in. If you enter 'uid', - then login as 'dsmith', phpLDAPadmin will search for uid=dsmith and - log in as such. Leave blank or specify 'dn' to use full DN for logging in .*/ -$servers[$i]['read_only'] = false; /* Specify true If you want phpLDAPadmin to not display or permit any - modification to the LDAP server. */ +$servers[$i]['login_attr'] = 'dn'; /* If you specified 'form' as the auth_type above, + you can optionally specify here an attribute + to use when logging in. If you enter 'uid', + then login as 'dsmith', phpLDAPadmin will + search for uid=dsmith and log in as such. Leave + blank or specify 'dn' to use full DN for + logging in .*/ +$servers[$i]['read_only'] = false; /* Specify true If you want phpLDAPadmin to not + display or permit any modification to the + LDAP server. */ +$servers[$i]['enable_auto_uid_numbers'] = false; /* This feature allows phpLDAPadmin to + automatically determine the next + available uidNumber for a new entry. */ +$servers[$i]['auto_uid_number_mechanism'] = 'search'; + /* The mechanism to use when finding the next available uidNumber. + Two possible values: 'uidpool' or 'search'. The 'uidpool' + mechanism uses an existing uidPool entry in your LDAP server + to blindly lookup the next available uidNumber. The 'search' + mechanism searches for entries with a uidNumber value and finds + the first available uidNumber (slower). */ +$servers[$i]['auto_uid_number_search_base'] = 'ou=People,dc=example,dc=com'; + /* The DN of the search base when the 'search' + mechanism is used above. */ +$servers[$i]['auto_uid_number_uid_pool_dn'] = 'cn=uidPool,dc=example,dc=com'; + /* The DN of the uidPool entry when 'uidpool' + mechanism is used above. */ -/* If you want to configure additional LDAP servers, do so below. */ +// If you want to configure additional LDAP servers, do so below. $i++; $servers[$i]['name'] = 'Another server'; $servers[$i]['host'] = ''; @@ -51,6 +78,10 @@ $servers[$i]['tls'] = false; $servers[$i]['default_hash'] = 'crypt'; $servers[$i]['login_attr'] = ''; $servers[$i]['read_only'] = false; +$servers[$i]['enable_auto_uid_numbers'] = false; +$servers[$i]['auto_uid_number_mechanism'] = 'search'; +$servers[$i]['auto_uid_number_search_base'] = 'ou=People,dc=example,dc=com'; +$servers[$i]['auto_uid_number_uid_pool_dn'] = 'cn=uidPool,dc=example,dc=com'; // If you want to configure more LDAP servers, copy and paste the above (including the "$i++;") @@ -60,13 +91,19 @@ $jpeg_temp_dir = "/tmp"; // Example for Unix systems //$jpeg_temp_dir = "c:\\temp"; // Example for Windows systems /** **/ -/** Appearance and Behavior **/ +/** Appearance and Behavior **/ /** **/ -// The language setting. Right now, 'english', 'german' and 'french' are available +// The language setting. If you set this to 'auto', phpLDAPadmin will +// attempt to determine your language automatically. Otherwise, available +// lanaguages are: 'ct', 'de', 'en', 'es', 'fr', 'it', 'nl', and 'ru' // Localization is not complete yet, but most strings have been translated. -// Please help by writing language files. See lang/english.php for an example. -$language = 'english'; +// Please help by writing language files. See lang/en.php for an example. +$language = 'auto'; + +// Set to true if you want to draw a checkbox next to each entry in the tree viewer +// to be able to delete multiple entries at once +$enable_mass_delete = false; // Set to true if you want LDAP data to be displayed read-only (without input fields) // when a user logs in to a server anonymously @@ -77,11 +114,17 @@ $anonymous_bind_implies_read_only = true; $cookie_time = 0; // seconds // How many pixels wide do you want your left frame view (for the tree browser) -$tree_width = 300; // pixels +$tree_width = 320; // pixels // How long to keep jpegPhoto temporary files in the jpeg_temp_dir directory (in seconds) $jpeg_tmp_keep_time = 120; // seconds +// Would you like to see helpful hint text occacsionally? +$show_hints = true; // set to false to disable hints + +// When using the search page, limit result size to this many entries +$search_result_size_limit = 50; + /** **/ /** Simple Search Form Config **/ /** **/ @@ -89,11 +132,11 @@ $jpeg_tmp_keep_time = 120; // seconds // Which attributes to include in the drop-down menu of the simple search form (comma-separated) // Change this to suit your needs for convenient searching. Be sure to change the correlating // list below ($search_attributes_display) -$search_attributes = "uid, cn, gidNumber, objectClass"; +$search_attributes = "uid, cn, gidNumber, objectClass, telephoneNumber, mail, street"; // This list correlates to the list directly above. If you want to present more readable names // for your search attributes, do so here. Both lists must have the same number of entries. -$search_attributes_display = "User Name, Common Name, Group ID, objectClass"; +$search_attributes_display = "User Name, Common Name, Group ID, Object Class, Phone Number, Email, Address"; // The list of attributes to display in each search result entry summary $search_result_attributes = "dn, cn"; @@ -144,12 +187,6 @@ $templates[] = 'icon' => 'images/dc.png', 'handler' => 'new_dns_entry.php' ); -$templates[] = - array( 'desc' => 'Posix Group', - 'icon' => 'images/ou.png', - 'handler' => 'new_posix_group_template.php' ); - - /** **/ /** User-friendly attribute translation **/ /** **/ diff --git a/copy.php b/copy.php index 008226d..9ce8834 100644 --- a/copy.php +++ b/copy.php @@ -1,4 +1,4 @@ -\n"; - echo "

    Copying " . htmlspecialchars( $source_dn ) . "

    \n"; - echo "

    Recursive copy progress

    \n"; + echo "

    ". $lang['copy_copying'] . htmlspecialchars( $source_dn ) . "

    \n"; + echo "

    " . $lang['copy_recursive_copy_progress'] ."

    \n"; echo "

    "; echo "\n"; - echo "Building snapshot of tree to copy... "; + echo $lang['copy_building_snapshot']; flush(); build_tree( $source_server_id, $source_dn, $snapshot_tree ); - echo " Success
    \n"; + echo " " . $lang['success'] . "
    \n"; flush(); - + // prevent script from bailing early on a long delete @set_time_limit( 0 ); - + $copy_result = r_copy_dn( $source_server_id, $dest_server_id, $snapshot_tree, $source_dn, $dest_dn ); echo "
    \n"; } else { @@ -89,35 +91,37 @@ if( $copy_result ) parent.left_frame.location.reload();
    - Copy successful! Would you like to view the new entry? -
    +
    + " . $lang['copy_view_new_entry'] ."?"?> +
    +



    - Copying " . htmlspecialchars( $root_dn ) . "..."; + global $lang; + echo "". $lang['copy_copying'] . htmlspecialchars( $root_dn ) . "..."; flush(); $copy_result = copy_dn( $source_server_id, $root_dn, $dest_server_id, $dest_dn ); - + if( ! $copy_result ) { - global $R_COPY_ERROR; return false; } - echo "Success
    \n"; + echo "".$lang['success']."
    \n"; flush(); - $children = $tree[ $root_dn ]; + $children = isset( $tree[ $root_dn ] ) ? $tree[ $root_dn ] : null; if( is_array( $children ) && count( $children ) > 0 ) { foreach( $children as $child_dn ) { @@ -136,8 +140,8 @@ function r_copy_dn( $source_server_id, $dest_server_id, &$tree, $root_dn, $dest_ function copy_dn( $source_server_id, $source_dn, $dest_server_id, $dest_dn ) { - global $ds; - $ds = pla_ldap_connect( $dest_server_id ) or pla_error( "Could not connect to LDAP server" ); + global $ds, $lang; + $ds = pla_ldap_connect( $dest_server_id ) or pla_error( $lang['could_not_connect'] ); $attrs = get_object_attrs( $source_server_id, $source_dn ); $new_entry = $attrs; // modify the prefix-value (ie "bob" in cn=bob) to match the destination DN's value. @@ -147,14 +151,20 @@ function copy_dn( $source_server_id, $source_dn, $dest_server_id, $dest_dn ) $new_entry[ $rdn_attr ] = $rdn_value; // don't need a dn attribute in the new entry unset( $new_entry['dn'] ); - $add_result = @ldap_add( $ds, $dest_dn, $new_entry ); - if( ! $add_result ) { - echo "


    "; - pla_error( "Failed to copy $source_dn (server: $source_server_id) to " . - "$dest_dn (server: $dest_server_id)", ldap_error( $ds ), ldap_errno( $ds ) ); - } - return $add_result; + // Check the user-defined custom call back first + if( true === preEntryCreate( $dest_server_id, $dest_dn, $new_entry ) ) { + $add_result = @ldap_add( $ds, $dest_dn, $new_entry ); + if( ! $add_result ) { + postEntryCreate( $dest_server_id, $dest_dn, $new_entry ); + echo "

    "; + pla_error( $lang['copy_failed'] . $dest_dn, ldap_error( $ds ), ldap_errno( $ds ) ); + } + + return $add_result; + } else { + return false; + } } function build_tree( $source_server_id, $root_dn, &$tree ) diff --git a/copy_form.php b/copy_form.php index 101e9fa..2ebe9b8 100644 --- a/copy_form.php +++ b/copy_form.php @@ -1,4 +1,4 @@ - $server ) $children = get_container_contents( $server_id, $dn ); -?> +include 'header.php'; ?> - -

    Copy

    -

    Server:     Distinguished Name:

    +

    +

    Server:     :

    -Copy to a new object:
    + :

    - + - + - + + - + + + 0 ) { ?> + diff --git a/create.php b/create.php index 344d7cb..d4e1abc 100644 --- a/create.php +++ b/create.php @@ -1,4 +1,4 @@ - $val ) - { +if( isset( $required_attrs ) && is_array( $required_attrs ) ) { + foreach( $required_attrs as $attr => $val ) { if( $val == '' ) - pla_error( "Error, you left the value for required attribute " . - htmlspecialchars( $attr ) . " blank." ); - + pla_error( sprintf( $lang['create_required_attribute'], htmlspecialchars( $attr ) ) ); $new_entry[ $attr ][] = utf8_encode( $val ); } } -if( isset( $vals ) && is_array( $vals ) ) -{ - foreach( $vals as $i => $val ) - { +if( isset( $vals ) && is_array( $vals ) ) { + foreach( $vals as $i => $val ) { $attr = $attrs[$i]; if( is_attr_binary( $server_id, $attr ) ) { if( $_FILES['vals']['name'][$i] != '' ) { // read in the data from the file $file = $_FILES['vals']['tmp_name'][$i]; - //echo "Reading in file $file...\n"; $f = fopen( $file, 'r' ); $binary_data = fread( $f, filesize( $file ) ); fclose( $f ); @@ -75,18 +67,25 @@ if( ! in_array( 'top', $new_entry['objectClass'] ) ) // UTF-8 magic. Must decode the values that have been passed to us foreach( $new_entry as $attr => $vals ) - if( is_array( $vals ) ) - foreach( $vals as $i => $v ) - $new_entry[ $attr ][ $i ] = utf8_decode( $v ); - else - $new_entry[ $attr ] = utf8_decode( $vals ); + if( ! is_attr_binary( $server_id, $attr ) ) + if( is_array( $vals ) ) + foreach( $vals as $i => $v ) + $new_entry[ $attr ][ $i ] = utf8_decode( $v ); + else + $new_entry[ $attr ] = utf8_decode( $vals ); //echo "
    "; var_dump( $new_dn );print_r( $new_entry ); echo "
    "; $ds = pla_ldap_connect( $server_id ); -$add_result = @ldap_add( $ds, $new_dn, $new_entry ); + +// Check the user-defined custom call back first +if( true === preEntryCreate( $server_id, $new_dn, $new_entry ) ) + $add_result = @ldap_add( $ds, $new_dn, $new_entry ); +else + exit; if( $add_result ) { + postEntryCreate( $server_id, $new_dn, $new_entry ); $edit_url="edit.php?server_id=$server_id&dn=" . rawurlencode( $new_dn ); // update the session tree to reflect the change @@ -123,14 +122,14 @@ if( $add_result ) - Redirecting... here. + ... . - diff --git a/create_form.php b/create_form.php index 0144f2a..00f116a 100644 --- a/create_form.php +++ b/create_form.php @@ -1,11 +1,11 @@ -'; $js_dn_list = ''; -foreach( $servers as $id => $server ) { - if( $server['host'] ) { +foreach( $servers as $id => $server ) { + if( $server['host'] ) { $server_menu_html .= ''; } } $server_menu_html .= ''; -?> - - +include 'header.php'; ?> -

    Create Object

    -

    Choose a template

    -

    Select a template for the creation process

    +

    +

    +

    Destination DN:: - +
    Destination Server::
    Note: Copying between different servers only works if there are no schema violations
    - Recursively copy all children of this object as well.
    @@ -72,7 +70,7 @@ $server_menu_html .= ''; - +
    diff --git a/creation_template.php b/creation_template.php index dd20562..516b78b 100644 --- a/creation_template.php +++ b/creation_template.php @@ -15,33 +15,33 @@ require 'common.php'; $template = $_POST['template']; $template = $templates[$template]; $server_id = $_POST['server_id']; -check_server_id( $server_id ) or pla_error( "Bad server_id: " . htmlspecialchars( $server_id ) ); -have_auth_info( $server_id ) or pla_error( "Not enough information to login to server. Please check your configuration." ); +check_server_id( $server_id ) or pla_error( $lang['bad_server_id_underline'] . htmlspecialchars( $server_id ) ); +have_auth_info( $server_id ) or pla_error( $lang['not_enough_login_info'] ); $server_name = $servers[ $server_id ][ 'name' ]; if( is_server_read_only( $server_id ) ) - pla_error( "You cannot perform updates while server is in read-only mode" ); + pla_error( $lang['no_updates_in_read_only_mode'] ); include 'header.php'; ?> -

    Create Object

    -

    On server '', +

    +

    '', using template ''

    " . htmlspecialchars( $template['handler'] ) . - " for this template. But, this handler does not exist in the 'templates/creation' directory." ); + pla_error( $lang['ctemplate_config_handler'] . " " . htmlspecialchars( $template['handler'] ) . + " " . $lang['ctemplate_handler_does_not_exist']); diff --git a/custom_functions.php b/custom_functions.php new file mode 100644 index 0000000..b33d4d3 --- /dev/null +++ b/custom_functions.php @@ -0,0 +1,162 @@ + Array ( + * [0] => top + * [1] => person + * [2] => inetOrgPerson + * ) + * [cn] => John + * [sn] => Doe + * ... + * ) + * + */ +function preEntryCreate( $server_id, $dn, $attrs ) +{ + // Fill me in + return true; +} + +/* + * This function is executed before an entry is deleted. + * If it returns true, the entry is deleted, if false + * is returned, the entry is not deleted. + */ +function preEntryDelete( $server_id, $dn ) +{ + // Fill me in + return true; +} + +/* + * This function is executed after an entry is deleted. + * Unlike preEntryDelete(), this function's return + * value is ignored. + */ +function postEntryDelete( $server_id, $dn ) +{ + // Fill me in +} + diff --git a/delete.php b/delete.php index 5d1bdeb..bc17372 100644 --- a/delete.php +++ b/delete.php @@ -9,26 +9,35 @@ * - server_id */ -require 'common.php'; +require realpath( 'common.php' ); -$encoded_dn = $_POST['dn']; -$dn = rawurldecode( $encoded_dn ); +$dn = $_POST['dn']; +$encoded_dn = rawurlencode( $dn ); $server_id = $_POST['server_id']; if( $dn === null ) - pla_error( "You must specify a DN." ); + pla_error( $lang['you_must_specify_a_dn'] ); if( is_server_read_only( $server_id ) ) - pla_error( "You cannot perform updates while server is in read-only mode" ); + pla_error( $lang['no_updates_in_read_only_mode'] ); -check_server_id( $server_id ) or pla_error( "Bad server_id: " . htmlspecialchars( $server_id ) ); -have_auth_info( $server_id ) or pla_error( "Not enough information to login to server. Please check your configuration." ); +check_server_id( $server_id ) or pla_error( $lang['bad_server_id'] ); +have_auth_info( $server_id ) or pla_error( $lang['not_enough_login_info'] ); -$ds = pla_ldap_connect( $server_id ) or pla_error( "Could not connect to LDAP server" ); -$del_result = @ldap_delete( $ds, $dn ); +$ds = pla_ldap_connect( $server_id ) or pla_error( $lang['could_not_connect'] ); + +// Check the user-defined custom callback first. +if( true === preEntryDelete( $server_id, $dn ) ) { + $del_result = @ldap_delete( $ds, $dn ); +} else { + exit; +} if( $del_result ) { + // Custom callback + postEntryDelete( $server_id, $dn ); + // kill the DN from the tree browser session variable and // refresh the tree viewer frame (left_frame) @@ -46,10 +55,11 @@ if( $del_result ) foreach( $subtree as $key => $sub_tree_dn ) if( 0 == strcasecmp( $sub_tree_dn, $dn ) ) unset( $tree[$server_id][$tree_dn][$key] ); + $_SESSION['tree'] = $tree; + session_write_close(); } - $_SESSION['tree'] = $tree; - session_write_close(); + include 'header.php'; ?> @@ -57,11 +67,15 @@ if( $del_result ) parent.left_frame.location.reload(); - Object deleted successfully. +
    +
    +
    0 ? true : false; -?> +include 'header.php'; ?> - -

    Delete

    -

    Server:     Distinguished Name:

    +

    Delete

    +

    Server:     Distinguished Name:

    @@ -75,7 +74,7 @@ Take into consideration aliases and other such things that may cause problems.
    - + @@ -84,7 +83,7 @@ Take into consideration aliases and other such things that may cause problems.
    - +
    @@ -102,7 +101,7 @@ A list of all the
    -DN:
    +
    DN:
    Server:

    @@ -126,7 +125,7 @@ Are you sure you want to permanently delete this object?
    "; else @@ -98,20 +98,20 @@ if( $view == 'syntaxes' ) { // do a reverse-mapping to add in which objectClasses each attributeType is used foreach( $schema_object_classes as $object_class ) { - if( isset( $object_class['must_attrs'] ) && is_array( $object_class['must_attrs'] ) ) - $must_attrs = $object_class['must_attrs']; - else - $must_attrs = array(); - if( isset( $object_class['may_attrs'] ) && is_array( $object_class['may_attrs'] ) ) - $may_attrs = $object_class['may_attrs']; - else - $may_attrs = array(); - $attrs = array_unique( array_merge( $must_attrs, $may_attrs ) ); - foreach( $attrs as $attr_name ) - if( isset( $schema_attrs[ strtolower( $attr_name ) ] ) ) - $schema_attrs[ strtolower( $attr_name ) ]->addUsedInObjectClass( $object_class['name'] ); + $must_attrs = $object_class->getMustAttrNames($schema_object_classes); + $may_attrs = $object_class->getMayAttrNames($schema_object_classes); + $oclass_attrs = array_unique( array_merge( $must_attrs, $may_attrs ) ); + foreach( $oclass_attrs as $attr_name ) { + if( isset( $schema_attrs[ strtolower( $attr_name ) ] ) ) { + $schema_attrs[ strtolower( $attr_name ) ]->addUsedInObjectClass( + $object_class->getName() ); + } else { + //echo "Warning, attr not set: $attr_name
    "; + } + } + } - + //echo "
    ";
     	//print_r( $schema_attrs );
     	//echo "
    "; @@ -129,6 +129,7 @@ if( $view == 'syntaxes' ) {
    - +
    @@ -136,7 +135,7 @@ Are you sure you want to permanently delete this object?
    - + diff --git a/doc/CREDITS b/doc/CREDITS new file mode 100644 index 0000000..b11ffa9 --- /dev/null +++ b/doc/CREDITS @@ -0,0 +1,38 @@ +--------------------------- +phpLDAPadmin - Contributors +--------------------------- + + * Project Developers: + + - David Smith Maintainer + - Xavier Renard LDIF master + - Marius Rieder Schema master + - Nate Rotschafer Release manager + + * Patch writers: + + - Bayu Irawan userPassword hash, html fixes, ldap_modify fixes + - Uwe Ebel short_open_tags fix + - Andrew Tipton SUP support in schema parser + - Eigil Bjørgum UTF-8 support + - Brandon Lederer DNS entry template + Nathan Rotschafer + - Steve Rigler Password hash patch + - Chris Jackson Blowfish and md5crypt passwords + - Marius Rieder Enhanced schema parser + - Nick Burch Many realpath() fixes + + * Translators: + + - Uwe Ebel & Marius Reider German + - Xavier Renard French + - Dave Smith English ;) + - Richard Lucassen Dutch + - Andreu Sanchez Spanish and Català + - Dmitry Gorpinenko Russian + - Unknown Italian + + + If you can help translate, please join the phpldapadmin-devel mailing list: + https://lists.sourceforge.net/mailman/listinfo/phpldapadmin-devel + diff --git a/doc/ChangeLog b/doc/ChangeLog new file mode 100644 index 0000000..9159fae --- /dev/null +++ b/doc/ChangeLog @@ -0,0 +1,107 @@ +------------------------ +phpLDAPadmin - ChangeLog +------------------------ + +* Version 0.9.2, 2003-11-14 + + * Notes: + This release has undergone major code hardening as we've subjected it to + the most stringent standard of PHP error reporting. The result is + fewer unhandled errors, improved usability, and better performance. + We've given more attention to internationalization as well, + and that effort is nearly 80% complete. Translators and coders are still + needed to help complete the localization effort. We've added a whole new + custom callback infrastructure that is event driven. Users can write their + own custom code to be executed as the result of LDAP events. Events include + entry creation, entry deletion, and entry modification. Users can define + custom code to execute automatically before and after each of these events. + See "custom_functions.php" for details and documentation. Lots of other new + features and bug fixes are outlined in the ChangeLog. phpLDAPadmin finally + has a roadmap included with each release. Find it in the file called "ROADMAP" + in the root of the install. This roadmap will be constantly updated to + list our goals for each release. Enjoy 0.9.2! As always, your feedback + is most welcome on the development mailing list and on the SourceForge + bug tracker. + + * Changes: + - Localization work continues. About 80% complete. + - New languages: Ialian, German, Catala + - Fixed major encoding bugs. All pages are now true UTF-8 encoded + - Support for auto-determining user's language based on the browser + - Custom event callbacks infrastructure (see custom_functions.php). Users can now + define custom code to execute as a result of LDAP events (ie, new entries, + modifications, etc). + - Major code cleanup. Removed all E_NOTICE messages and enabled E_ALL error_reporting. + - Added support for smd5 and ssha passwords + - Added configurable hints throughout the application + - Added template-based entry editing. The infrastructure is now in place to use custom + templates for editing LDAP entries. No templates are being shipped with 0.9.2, but + they are on the way for 0.9.3. + - Added photo display support for non-jpegPhoto photo attributes. + - Added mass deletion. If enabled in the configuration, users can mass-delete multiple + entries from the tree browser with checkboxes. + - Much improved schema retrieval code. Now PLA uses the Root DSE (or any relevant DN) + to fetch the schema based on the RFC-complian subSchemaSubEntry value. + - Added support for viewing schema for attributes with ";" in their names (like + userCertificate;binary or sn;lang-fr) + - Schema code is 100% object oriented. + - Enhanced search code can handle large searches without running out of memory. + - Fixed minor XSS vulnerabilities in several creation templates. + - Enhanced the server information viewer to actively retrieve attributes that the server + may not give voluntarily. + - Made the tree viewer more intelligent for failed binds. + - Added better caching of the base DN for the tree viewer, which speeds up page loads + considerably with multiple servers all configured to auto-determine the base DN. + - Added intelligence around password updates on the currently logged-in user entry. + +* Version 0.9.1, 2003-09-24 + + * Notes: + We fixed a mountain of bugs for this release and implemented the + most popular feature requests. The result is a much more robust LDAP + management tool that supports a wider range of harsh environments and spoken + languages. This release was over a month in the making and it shows. We've + had great feed back from users. Special thanks to Nick Burch, Xavier + Renard, Uwe Ebel, Schuller Tom, and Marius Reider for their code + contributions. Thanks to everyone who contributed code and bug reports! + + * Changes: + - Preliminary support for LDIF imports. + - Binary attribute support for viewing, deleting, and adding. + - Users can specify attributes to hide while editing entries. + - Schema browser now displays which objectClasses each attribute is used in. + - Preliminary multi-language support (some localization, infrastructure in place). + - New template for creating posixGroup entries. + - Optional read-only mode of operation. + - Error dialog beautified. + - Localization effort begun, now available in German and French. + - New samba user template. + + * Bugs fixed: + - I18n support was made more robust (UTF-8 problems fixed in *many* places). + - Improved LDIF exports with better LDIF comments and cleaner IE support. + - Cleaned up code in edit.php. + - After updates, modified attribute(s) now highlighted properly. + - Many realpath() fixes to allow symlink installs with multiple configs. + - Simple search form 'Starts with' '*' searches produced PHP error. + - Entry creation now adds the new entry to the tree browser in sorted order. + - Complete re-work of schema browser, much more efficient parser. + - Began effort to remove all E_NOTICE notices. + +* Version 0.9.0, 2003-08-12 + + * Notes: + This is the first release of phpLDAPAdmin. It should be stable enough and + ready for use on your production LDAP servers. This is still a beta release + and the paranoid may want to wait. phpLDAPAdmin is based on an improved + version of DaveDAP 0.8.4. + + * Changes: + phpLDAPAdmin was DaveDAP. Changes since DaveDAP 0.8.4 include: + + - Better LDAP compliance when copying entries. + - Fixed boolean attribute support. + - jpegPhoto scaling when necessary. + - More robust schema browser. + - Added internal attributes support. + - Slightly improved look and feel. diff --git a/doc/INSTALL-de.txt b/doc/INSTALL-de.txt new file mode 100644 index 0000000..f7a27a2 --- /dev/null +++ b/doc/INSTALL-de.txt @@ -0,0 +1,61 @@ +Die Installationsanweisung geht davon aus das: + a) Ein Webserver (Apache, IIS, etc.) + b) PHP 4.1.0 oder neuer (mit LDAP-Support) +installiert und funktioniert + + +* Installation von phpLDAPadmin in vier einfachen Schritten: + + 1. Entpacken des Archives (wenn man diesen Text lesen kann, + dann ist das schon geschechen) + 2. Das entpackte Verzeichnis phpldapadmin sollte vom webroot + aus erreicht werden + 3. Kopieren der 'config.php.example' nach 'config.php' + und anpassen. + 4. Mit einem Browser auf das phpldapadmin-Verzeichnis zugreifen + (wenn Sie das Verzeichnis sehen, dann bitte noch ein index.php + anhaengen) + + +* Browser Hinweise + + phpLDAPadmin wird unter Mozilla entwickelt und sollte auch am + Besten darunter laufen. Andere Browser (bspw. Internet Explorer) + sollten ebenfalls funktionieren. + Keine Tests wurden mit dem Konqueror (oder jeder andere khtml-basierende + Browser wie Safari) oder Opera vorgenommen. Falls es zu Browser + Inkompatibilitaet kommen sollten, dann bitte einen Fehlerreport senden. + + +* Lizenz + Die Verwendete Lizenz ist in der Datei LICENCE zu finden + + +* Mitwirkende: + + Projektentwickler: + Bitte in der Datei INSTALL unter 'Project Developers:' nachsehen + + Patches: + Bitte in der Datei INSTALL unter 'Patch writers:' nachsehen + + Uebersetzungen: + Bitte in der Datei INSTALL unter 'Translators:' nachsehen + + Wer in der Uebersetzung helfen moechte sollte an der Mailingliste + phpldapadmin-devel teilnehmen. + https://lists.sourceforge.net/mailman/listinfo/phpldapadmin-devel + + +* Hinweise zur Konfiguration von config.php + Wer eine Benuetzerfuehrung auf deutsch haben moechte sollte in der + config.php die Zeile + + $language = 'en'; + + mit + $language = 'de'; + + abaendern. Andere Sprachen sieht man im Unterverzeichnis 'lang' + + diff --git a/doc/INSTALL-es.txt b/doc/INSTALL-es.txt new file mode 100644 index 0000000..16e004c --- /dev/null +++ b/doc/INSTALL-es.txt @@ -0,0 +1,55 @@ +Estas instrucciones dejan por sentado que tienes una instalación +funcionando de: + a. Servidor Web (Apache, IIS, etc). + b. PHP 4.1.0 o mas nuevo (con soporte LDAP) + +* Instalando phpLDAPadmin en 4 pasos muy simples: + + 1. Desempaqueta el archivo (si estás leyendo esto, ya lo has hecho). + 2. Pon el directorio resultante 'phpldapadmin' en algún lugar de tu + directorio web raiz. + 3. Copia 'config.php.example' a 'config.php' y edítalo para que se + acomode a tu configuración y tu gusto. + 4. Entonces, con el navegador ve a la dirección que contiene los archivos + del directorio phpldapadmin. + +* Notas del navegador + + phpLDAP se desarrolló bajo Mozilla, y será donde seguramente corra mejor. + Aún así, las pruebas se han hecho bajo Internet Explorer, y tendría que funcionar + bien también. No se ha hecho ninguna prueba con Konqueror (o cualquier navegador + basado en kthml como Safari) o Opera. Si encuentras alguna incompatibilidad, por favor + háznoslo saber. + +* Contribuidores + + Desarrolladores del proyecto: + + - David Smith Mantenedor + - Xavier Renard Master de LDIF + - Marius Rieder Master de los Esquemas + - Nate Rotschafer Encargado de los lanzamientos + + Escribidores de los parches: + + - Bayu Irawan userPassword hash, arreglos html, arreglos ldap_modify + - Uwe Ebel arreglo short_open_tags + - Andrew Tipton soporte SUP en el parseador del esquema + - Eigil Bjørgum soporte UTF-8 + - Brandon Lederer plantilla de entrada de DNS + Nathan Rotschafer + - Steve Rigler Parche para Password hash + - Chris Jackson Contraseñas Blowfish y md5crypt + - Marius Rieder Parseador avanzado de esquema + - Nick Burch Un montón de arreglos de realpath() + + Traductores: + + - Uwe Ebel Alemán + - Xavier Renard Francés + - Dave Smith Inglés ;) + + Si puedes ayudar a traducir, por favor apúntate a la lista de correo phpldapadmin: + https://lists.sourceforge.net/mailman/listinfo/phpldapadmin-devel + + diff --git a/doc/INSTALL-fr.txt b/doc/INSTALL-fr.txt new file mode 100644 index 0000000..403128d --- /dev/null +++ b/doc/INSTALL-fr.txt @@ -0,0 +1,56 @@ +Les instructions suivantes supposent une installation en état de marche de: + a. Un serveur web (Apache, IIS, etc). + b. PHP 4.1.0 ou une version plus récente (avec le support LDAP). + +* Installer phpLDAPadmin en quatre étapes simples: + + 1. Dé-tarrer l'archive (si vous lisez ceci, c'est que vous l'avez déjà fait). + 2. Mettre le répertoire 'phpldapadmin' ainsi obtenu quelque part sous + la racine de votre serveur web. + 3. Copier 'config.php.example' vers 'config.php' et éditer selon vos besoins. + 4. Ensuite, pointer votre navigateur vers le répertoire phpldapadmin. + +* Notes sur les navigateurs + + phpLDAPadmin a été developpé avec Mozilla et fonctionnera vraisemblablement + mieux avec celui-ci. Cependant, des tests ont été effectué avec Internet Explorer + et cela devrait fonctionner également. Aucun test n'a été réalisé ni avec Konqueror + (ou un navigateur basé sur khtml comme Safari par exemple) ni avec Opera. Si + vous trouvez une incompatibilité avec votre navigateur, merci de la reporter. + +* Contributions: + + Developeurs: + + - David Smith Maintenance + - Xavier Renard Responsable LDIF + - Marius Rieder Responsable pour les schéma LDAP + - Nate Rotschafer Directeur des releases + + Auteurs de patchs: + + - Bayu Irawan hachage pour le mot de passe utilisateur, + corrections html, corrections pour ldap_modiy + - Uwe Ebel Corrections pour short_open_tags + - Andrew Tipton Support pour SUP dans le parseur de schémas + - Eigil Bjørgum Support pour UTF-8 + - Brandon Lederer Patron pour les entrées DNS + Nathan Rotschafer + - Steve Rigler Correction pour les hachages des mots de passe + - Chris Jackson Mots de passe Blowfish et md5crypt + - Marius Rieder Amélioration du parseur de schémas + - Nick Burch Corrections multiples pour realpath() + + Traducteurs: + + - Uwe Ebel & Marius Reider Allemand + - Xavier Renard Français + - Dave Smith Anglais ;) + - Richard Lucassen Néerlandais + - Andreu Sanchez Espagnol et Catalan + - Dmitry Gorpinenko Russe + - Unknown Italien + + Si vous pouvez aider à traduire phpLDAPAdmin, veuillez s'il vous plaît vous abonner + à la liste de diffusion phpldapadmin-devel: + https://lists.sourceforge.net/mailman/listinfo/phpldapadmin-devel diff --git a/doc/ROADMAP b/doc/ROADMAP new file mode 100644 index 0000000..ad69408 --- /dev/null +++ b/doc/ROADMAP @@ -0,0 +1,31 @@ +phpLDAPadmin roadmap + +0.9.3 planned features: + Complete i18n. All strings localized. + Add mass-update feature (user provides filter and set of attrs/vals to modify) + No-schema mode of operation (some servers simply won't give us schema. This becomes a problem for normal operation) + Search filter builder for simple search form (just select AND or OR for a group of criteria) + Modification templates + user + oragnizationalUnit + posixGroup (view full DNs and browse buttons) + sambaUser + sambaMachine + Samba 3.0 support in samba user and machine creation templates + http auth_type (a la phpMyAdmin) + read-only attributes (similar to hidden attributes) in config + Support and test ActiveDirectory and iMail LDAP schema. + Support for modifying replica entries (using ldap_set_rebind_proc()) + Add blowfish encryption to encrypt cookie-stored passwords and DNs. + Default mod template: Add a "browse" button for attributes that store DNs. + Add output buffering when including lang files so no output is sent to the browser (which could cause problems for sessions and cookies) + Add a random hint on the welcome page + Paging search results. + Anonymous binds redirect to search page with no tree viewer (as an option in config) + Move template config to a new config file: template_config.php (or something) + +0.9.4 planned features: + Hidden/read-only attrs on a filter-basis (ie, different users have different viewable, writable attributes) + Seious compatibility testing for additional LDAP servers. + Configuration for templates. + Template instances with unique config. diff --git a/edit.php b/edit.php index 5005e73..fffdd61 100644 --- a/edit.php +++ b/edit.php @@ -3,611 +3,49 @@ /* * edit.php * Displays the specified dn from the specified server for editing + * in its template as determined by get_template(). This is a simple + * shell for displaying entries. The real work is done by the templates + * found in tempaltes/modification/ * * Variables that come in as GET vars: * - dn (rawurlencoded) * - server_id - * - modified_attrs (optional) an array of attributes to highlight as - * they were changed by the last operation + * - use_default_template (optional) If set, use the default template no matter what + * - Other vars may be set and used by the modification templates */ -/** If an entry has more children than this, stop searching and display this amount with a '+' */ -$max_children = 100; +require realpath( 'common.php' ); -require 'common.php'; - -$dn= $_GET['dn']; +$dn = isset( $_GET['dn'] ) ? $_GET['dn'] : false; +$dn !== false or pla_error( $lang['missing_dn_in_query_string'] ); $decoded_dn = rawurldecode( $dn ); $encoded_dn = rawurlencode( $decoded_dn ); -$modified_attrs = isset( $_GET['modified_attrs'] ) ? $_GET['modified_attrs'] : false; -$server_id = $_GET['server_id']; -$show_internal_attrs = isset( $_GET['show_internal_attrs'] ) ? true : false; -$rdn = pla_explode_dn( $dn ); -$rdn = $rdn[0]; -check_server_id( $server_id ) or pla_error( "Bad server_id: " . htmlspecialchars( $server_id ) ); -have_auth_info( $server_id ) or pla_error( "Not enough information to login to server. Please check your configuration." ); -pla_ldap_connect( $server_id ) or pla_error( "Coult not connect to LDAP server." ); -$friendly_attrs = process_friendly_attr_table(); -$attrs = get_object_attrs( $server_id, $dn ); +$server_id = isset( $_GET['server_id'] ) ? $_GET['server_id'] : false; +$server_id !== false or pla_error( $lang['missing_server_id_in_query_string'] ); -pla_ldap_connect( $server_id ) or pla_error( "Could not connect to LDAP server" ); -$system_attrs = get_entry_system_attrs( $server_id, $dn ); -if( ! $attrs ) - pla_error( "No such dn, " . htmlspecialchars( utf8_decode( $dn ) ) ); +$use_default_template = isset( $_GET['use_default_template'] ) ? true : false; -$server_name = $servers[$server_id]['name']; +check_server_id( $server_id ) or pla_error( $lang['bad_server_id'] ); +have_auth_info( $server_id ) or pla_error( $lang['not_enough_login_info'] ); +pla_ldap_connect( $server_id ) or pla_error( $lang['could_not_connect'] ); -// build a list of attributes available for this object based on its objectClasses -$oclasses = get_object_attr( $server_id, $dn, 'objectClass' ); -if( ! is_array( $oclasses ) ) - $oclasses = array( $oclasses ); -$avail_attrs = array(); -$schema_oclasses = get_schema_objectclasses( $server_id, true ); -$schema_attrs = get_schema_attributes( $server_id ); -foreach( $oclasses as $oclass ) { - $avail_attrs = array_merge( - $schema_oclasses[ strtolower( $oclass ) ]['must_attrs'], - $schema_oclasses[ strtolower( $oclass ) ]['may_attrs'], - $avail_attrs ); -} -$avail_attrs = array_unique( $avail_attrs ); -$avail_attrs = array_filter( $avail_attrs, "not_an_attr" ); -sort( $avail_attrs ); +if( $use_default_template ) { + require realpath( 'templates/modification/default.php' ); +} else { -$avail_binary_attrs = array(); -foreach( $avail_attrs as $i => $attr ) { - if( is_attr_binary( $server_id, $attr ) ) { - $avail_binary_attrs[] = $attr; - unset( $avail_attrs[ $i ] ); + $template = get_template( $server_id, $dn ); + $template_file = "templates/modification/$template.php"; + if( file_exists( realpath( $template_file ) ) ) + require realpath( $template_file ); + else { + echo "\n\n"; + echo $lang['missing_template_file']; + echo " $template_file. "; + echo $lang['using_default']; + echo "
    \n\n"; + require realpath( 'templates/modification/default.php' ); } } ?> - - - - -

    -

    Server:     Distinguished Name:

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 ) { - if( $children_count == $max_children ) - $children_count = $children_count . '+'; - -?> - - - - - - - - - 0 ) { ?> - - - - - - - - - - - - - - - - - - - - - -
    - (mac) - (win) - (unix) -
    ">
    - (mac) - (win) - (unix) -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - 0 ) { ?> - - - - - - - - - - - - - - - - - - $vals ) { - $counter++ - ?> - - - - - \n"; -} - -?> - - - - - - - - - - - - - - - - - - 0 ) - foreach( $hidden_attrs as $i => $attr_name ) - $hidden_attrs[$i] = strtolower( $attr_name ); - else - $hidden_attrs = array(); -?> - - $vals ) { - - if( isset( $schema_attrs[ strtolower($attr) ] ) ) - $attr_syntax = $schema_attrs[ strtolower( $attr ) ]->getSyntaxOID(); - flush(); - if( 0 == strcasecmp( $attr, 'dn' ) ) - continue; - - // has the config.php specified that this attribute is to be hidden? - if( in_array( strtolower( $attr ), $hidden_attrs ) ) - continue; - - // is there a user-friendly translation available for this attribute? - if( isset( $friendly_attrs[ strtolower( $attr ) ] ) ) { - $attr_display = "" . - $friendly_attrs[ strtolower( $attr ) ] . ""; - } else { - $attr_display = $attr; - } - - ?> - - - - - - - - - - - - - - - - - - $val ) { - $val = utf8_decode( $val ); - echo $val . "
    "; - } - } else { - echo utf8_decode( $vals ) . "
    "; - } - continue; - } - - /* - * Is this a userPassword attribute? - */ - if( 0 == strcasecmp( $attr, 'userpassword' ) ) { - $user_password = $vals[0]; - - /* Capture the stuff in the { } to determine if this is crypt, md5, etc. */ - preg_match( "/{([^}]+)}/", $user_password, $enc_type); - $enc_type = strtolower($enc_type[1]); - - // Set the default hashing type if the password is blank (must be newly created) - if( $val == '' ) { - $enc_type = $servers[$server_id]['default_hash']; - } ?> - - - - - - - - - - - - - getType() ) ) { - $val = $vals[0]; - ?> - - - - - - $val ) { - $val = utf8_decode( $val ); ?> - - - - - - -
    - -

    - - - - - - - $vals ) */ ?> - - - - - - - - -
    - -
    - - - - -
    -
    -
    - - - - - - 0 ) { ?> - - - - - - - - () - - -
    - - - - - - - - - - -
    - - - - - - - - - - - -() - - - - -
    - -
    - -
    (" . $lang['none'] . ")
    - -
    -
    - - - () - -
    - - - - -
    - 1 ) { for( $i=1; $i<=count($vals); $i++ ) { ?> - "> ()
    - -
    - - - - - - -
    -
    - - - - - -
    - - - -
    - - $values ) - if( 0 == strcasecmp( $attr, $x ) ) - return false; - return true; -} - -?> diff --git a/entry_chooser.php b/entry_chooser.php index 6b6465d..4800777 100644 --- a/entry_chooser.php +++ b/entry_chooser.php @@ -4,25 +4,25 @@ require 'common.php'; $container = isset( $_GET['container'] ) ? rawurldecode( $_GET['container'] ) : false; $server_id = isset( $_GET['server_id'] ) ? $_GET['server_id'] : false; -$return_form_element = $_GET['form_element']; +$return_form_element = htmlspecialchars( $_GET['form_element'] ); include "header.php"; echo "

    Automagic Entry Chooser

    \n"; if( $container ) { - echo "Server: " . htmlspecialchars( $servers[ $server_id ][ 'name' ] ) . "
    \n"; - echo "Looking in: " . htmlspecialchars( $container ) . "
    \n"; + echo $lang['server_colon_pare'] . "" . htmlspecialchars( $servers[ $server_id ][ 'name' ] ) . "
    \n"; + echo $lang['look_in'] . "" . htmlspecialchars( $container ) . "
    \n"; } /* Has the use already begun to descend into a specific server tree? */ if( $server_id !== false && $container !== false ) { - check_server_id( $server_id ) or pla_error( "Bad server_id: " . htmlspecialchars( $server_id ) ); - have_auth_info( $server_id ) or pla_error( "Not enough information to login to server. ". - "Please check your configuration." ); - pla_ldap_connect( $server_id ) or pla_error( "Coult not connect to LDAP server." ); + check_server_id( $server_id ) or pla_error( $lang['bad_server_id'] ); + have_auth_info( $server_id ) or pla_error( $lang['not_enough_login_info'] ); + pla_ldap_connect( $server_id ) or pla_error( $lang['could_not_connect'] ); $dn_list = get_container_contents( $server_id, $container ); + sort( $dn_list ); $base_dn = $servers[ $server_id ][ 'base' ]; if( ! $base_dn ) @@ -36,11 +36,11 @@ if( $server_id !== false && $container !== false ) $up_href = "entry_chooser.php?form_element=$return_form_element&server_id=$server_id&container=" . rawurlencode( $parent_container ); } - echo " " . - " Back Up...
    \n"; + echo " " . + " ". $lang['back_up_p'] ."
    \n"; if( count( $dn_list ) == 0 ) - echo "   (no entries)
    \n"; + echo "   (". $lang['no_entries'] .")
    \n"; else foreach( $dn_list as $dn ) { $href = "javascript:returnDN( '$dn' )"; @@ -56,15 +56,15 @@ else foreach( $servers as $id => $server ) { if( $server['host'] ) { echo "" . htmlspecialchars( $server['name'] ) . "
    \n"; - if( ! have_auth_info( $id ) ) - echo "   (Not logged in)
    "; + if( ! have_auth_info( $id ) ) + echo "   (" . $lang['not_logged_in'] . ")
    "; else { - $dn = ( $server['base'] ? $server['base'] : try_to_get_root_dn( $id ) ); + $dn = ( $server['base'] ? $server['base'] : try_to_get_root_dn( $id ) ); if( ! $dn ) { - echo "   (Could not determine base DN)
    "; + echo "   (". $lang['could_not_det_base_dn'] .")
    "; } else { $href = "javascript:returnDN( '$dn' )"; - echo "    " . "" . htmlspecialchars( $dn ) . "
    \n"; diff --git a/expand.php b/expand.php index 268a7d9..19c41a5 100644 --- a/expand.php +++ b/expand.php @@ -1,4 +1,4 @@ -"; //var_dump( $contents ); //exit; -sort( $contents ); +usort( $contents, 'pla_compare_dns' ); $tree[$server_id][$dn] = $contents; foreach( $contents as $dn ) @@ -52,7 +52,6 @@ foreach( $contents as $dn ) $_SESSION['tree'] = $tree; $_SESSION['tree_icons'] = $tree_icons; -session_write_close(); // This is for Opera. By putting "random junk" in the query string, it thinks // that it does not have a cached version of the page, and will thus @@ -67,5 +66,7 @@ if(SID != ""){ $id_session_param = "&".session_name()."=".session_id(); } -header( "Location:tree.php?foo=$random_junk%23{$server_id}_{$encoded_dn}$id_session_param" ); +session_write_close(); + +header( "Location:tree.php?foo=$random_junk#{$server_id}_{$encoded_dn}$id_session_param" ); ?> diff --git a/functions.php b/functions.php index f5c31b7..86dfad4 100644 --- a/functions.php +++ b/functions.php @@ -1,12 +1,292 @@ 0 if dn1 is greater than dn2 + */ +function pla_compare_dns( $dn1, $dn2 ) +{ + $dn1_parts = pla_explode_dn( $dn1 ); + $dn2_parts = pla_explode_dn( $dn2 ); + assert( is_array( $dn1_parts ) ); + assert( is_array( $dn2_parts ) ); + + // If they are obviously the same, return immediately + if( 0 === strcasecmp( $dn1, $dn2 ) ) + return 0; + + // If they are obviously different, immediately + // do a string comparison rather than continuing + if( count( $dn1_parts ) != count( $dn2_parts ) ) + return strcasecmp( $dn1, $dn2 ); + + // Foreach of the "parts" of the DN + for( $i=0; $i $class ) + $object_classes[$i] = strtolower( $class ); + + $rdn = get_rdn( $dn ); + if( in_array( 'person', $object_classes ) && + in_array( 'posixaccount', $object_classes ) ) + return 'user'; + // TODO: Write other templates and criteria therefor + // else if ... + // return 'some other template'; + // else if ... + // return 'some other template'; + // etc. + + return 'default'; +} + +/* + * For hosts who have 'enable_auto_uid_numbers' set to true, this function will + * get the next available uidNumber using the host's preferred mechanism + * (uidpool or search). The uidpool mechanism uses a user-configured entry in + * the LDAP server to store the last used uidNumber. This mechanism simply fetches + * and increments and returns that value. The search mechanism is more complicated + * and slow. It searches all entries that have uidNumber set, finds the smalles and + * "fills in the gaps" by incrementing the smallest uidNumber until an unused value + * is found. Both mechanisms do NOT prevent race conditions or toe-stomping, so + * care must be taken when actually creating the entry to check that the uidNumber + * returned here has not been used in the mean time. Note that the two different + * mechanisms may (will!) return different values as they use different algorithms + * to arrive at their result. Do not be alarmed if (when!) this is the case. + */ +function get_next_uid_number( $server_id ) +{ + global $servers, $lang; + // Some error checking + if( ! check_server_id( $server_id ) ) + return false; + $server_name = isset( $servers[ $server_id ]['name'] ) ? + $servers[$server_id]['name'] : + "Server $server_id"; + if( ! isset( $servers[ $server_id ]['enable_auto_uid_numbers'] ) ) + return false; + if( ! isset( $servers[ $server_id ]['auto_uid_number_mechanism'] ) ) + pla_error( sprintf($lang['auto_update_not_setup'], $server_name)); + + // Based on the configured mechanism, go get the next available uidNumber! + $mechanism = $servers[$server_id]['auto_uid_number_mechanism']; + + // + // case 1: uidpool mechanism + // + if( 0 == strcasecmp( $mechanism, 'uidpool' ) ) { + if( ! isset( $servers[ $server_id ][ 'auto_uid_number_uid_pool_dn' ] ) ) + pla_error( sprintf( $lang['uidpool_not_set'], $server_name ) ); + $uid_pool_dn = $servers[ $server_id ][ 'auto_uid_number_uid_pool_dn' ]; + if( ! dn_exists( $server_id, $uid_pool_dn ) ) + pla_error( sprintf( $lang['uidpool_not_exist'] , $uid_pool_dn ) ); + + $next_uid_number = get_object_attr( $server_id, $uid_pool_dn, 'uidNumber' ); + $next_uid_number = intval( $next_uid_number[ 0 ] ); + $next_uid_number++; + + return $next_uid_number; + + // + // case 2: search mechanism + // + } elseif( 0 == strcasecmp( $mechanism, 'search' ) ) { + if( ! isset( $servers[ $server_id ][ 'auto_uid_number_search_base' ] ) ) + pla_error( sprintf( $lang['specified_uidpool'] , $server_name ) ); + $base_dn = $servers[ $server_id ][ 'auto_uid_number_search_base' ]; + $filter = "(uidNumber=*)"; + $results = pla_ldap_search( $server_id, $filter, $base_dn, array('uidNumber')); + // lower-case all the inices so we can access them by name correctly + foreach( $results as $dn => $attrs ) + foreach( $attrs as $attr => $vals ) { + unset( $results[$dn][$attr] ); + $results[$dn][strtolower( $attr )] = $vals; + } + + // construct a list of used uidNumbers + $uids = array(); + foreach ($results as $result) + $uids[] = $result['uidnumber']; + $uids = array_unique( $uids ); + if( count( $uids ) == 0 ) + return false; + sort( $uids ); + foreach( $uids as $uid ) + $uid_hash[ $uid ] = 1; + // start with the least existing uidNumber and add 1 + $uidNumber = intval( $uids[0] ) + 1; + // this loop terminates as soon as we encounter the next available uidNumber + while( isset( $uid_hash[ $uidNumber ] ) ) + $uidNumber++; + return $uidNumber; + // + // No other cases allowed. The user has an error in the configuration + // + } else { + pla_error( sprintf( $lang['auto_uid_invalid_value'] , $mechanism) ); + } +} + /* * Used to determine if the specified attribute is indeed a jpegPhoto */ @@ -40,30 +320,32 @@ function is_jpeg_photo( $server_id, $attr_name ) */ function is_attr_binary( $server_id, $attr_name ) { - require_once realpath( 'schema_functions.php' ); - $schema_attrs = get_schema_attributes( $server_id ); + @require_once realpath( 'schema_functions.php' ); if( 0 == strcasecmp( substr( $attr_name, strlen( $attr_name ) - 7 ), ";binary" ) ) return true; - if( isset( $schema_attrs[ strtolower( $attr_name ) ] ) ) { - $type = $schema_attrs[ strtolower( $attr_name ) ]->getType(); - $syntax = $schema_attrs[ strtolower( $attr_name ) ]->getSyntaxOID(); - if( 0 == strcasecmp( substr( $attr_name, strlen( $attr_name ) - 7 ), ";binary" ) || - 0 == strcasecmp( $type, 'Certificate' ) || - 0 == strcasecmp( $type, 'Binary' ) || - 0 == strcasecmp( $attr_name, 'networkAddress' ) || - 0 == strcasecmp( $attr_name, 'userCertificate' ) || - 0 == strcasecmp( $attr_name, 'userSMIMECertificate' ) || - $syntax == '1.3.6.1.4.1.1466.115.121.1.10' || - $syntax == '1.3.6.1.4.1.1466.115.121.1.28' || - $syntax == '1.3.6.1.4.1.1466.115.121.1.5' || - $syntax == '1.3.6.1.4.1.1466.115.121.1.8' || - $syntax == '1.3.6.1.4.1.1466.115.121.1.9' ) + + $schema_attr = get_schema_attribute( $server_id, $attr_name ); + if( ! $schema_attr ) + return false; + + $type = $schema_attr->getType(); + $syntax = $schema_attr->getSyntaxOID(); + + if( 0 == strcasecmp( substr( $attr_name, strlen( $attr_name ) - 7 ), ";binary" ) || + 0 == strcasecmp( $type, 'Certificate' ) || + 0 == strcasecmp( $type, 'Binary' ) || + 0 == strcasecmp( $attr_name, 'networkAddress' ) || + 0 == strcasecmp( $attr_name, 'userCertificate' ) || + 0 == strcasecmp( $attr_name, 'userSMIMECertificate' ) || + $syntax == '1.3.6.1.4.1.1466.115.121.1.10' || + $syntax == '1.3.6.1.4.1.1466.115.121.1.28' || + $syntax == '1.3.6.1.4.1.1466.115.121.1.5' || + $syntax == '1.3.6.1.4.1.1466.115.121.1.8' || + $syntax == '1.3.6.1.4.1.1466.115.121.1.9' ) return true; - else + else return false; - } - return false; } /* @@ -78,9 +360,10 @@ function is_server_read_only( $server_id ) if( isset( $servers[$server_id]['read_only'] ) && $servers[$server_id]['read_only'] == true ) return true; - + global $anonymous_bind_implies_read_only; - if( 0 == strcasecmp( "anonymous", get_logged_in_dn( $server_id ) ) && + + if( "anonymous" == get_logged_in_dn( $server_id ) && isset( $anonymous_bind_implies_read_only ) && $anonymous_bind_implies_read_only == true ) return true; @@ -89,7 +372,7 @@ function is_server_read_only( $server_id ) } /* - * Given a DN and server ID, this function reads the DN's objectClasses and + * Given a DN and server ID, this function reads the DN's objectClasses and * determines which icon best represents the entry. The results of this query * are cached in a session variable so it is not run *every* time the tree * browser changes, just when exposing new DNs that were not displayed @@ -114,9 +397,9 @@ function get_icon( $server_id, $dn ) '$' == $rdn{ strlen($rdn) - 1 } ) return 'nt.png'; // Is it a person or some type of account/user? - elseif( in_array( 'person', $object_classes ) || + elseif( in_array( 'person', $object_classes ) || in_array( 'organizationalperson', $object_classes ) || - in_array( 'inetorgperson', $object_classes ) || + in_array( 'inetorgperson', $object_classes ) || in_array( 'account', $object_classes ) || in_array( 'posixaccount', $object_classes ) ) return 'user.png'; @@ -127,7 +410,7 @@ function get_icon( $server_id, $dn ) elseif( in_array( 'organizationalunit', $object_classes ) ) return 'ou.png'; // Is it a domain controler (dc) - elseif( in_array( 'dcobject', $object_classes ) || + elseif( in_array( 'dcobject', $object_classes ) || in_array( 'domainrelatedobject', $object_classes ) ) return 'dc.png'; elseif( in_array( 'country', $object_classes ) ) @@ -136,13 +419,40 @@ function get_icon( $server_id, $dn ) return 'mail.png'; elseif( in_array( 'locality', $object_classes ) ) return 'locality.png'; - elseif( in_array( 'posixgroup', $object_classes ) ) + elseif( in_array( 'posixgroup', $object_classes ) || + in_array( 'groupofnames', $object_classes ) ) return 'ou.png'; + elseif( in_array( 'applicationprocess', $object_classes ) ) + return 'process.png'; + elseif( in_array( 'groupofuniquenames', $object_classes ) ) + return 'uniquegroup.png'; + elseif( in_array( 'iphost', $object_classes ) ) + return 'host.png'; // Oh well, I don't know what it is. Use a generic icon. else return 'object.png'; } +/* + * Does the same thing as get_icon(), but it tries to fetch the icon name from the + * tree_icons session variable first. If not found, resorts to get_icon() and stores + * the icon nmae in the tree_icons session before returing the icon. + */ +function get_icon_use_cache( $server_id, $dn ) +{ + @session_start(); + if( session_is_registered( 'tree_icons' ) ) { + global $_SESSION; + if( isset( $_SESSION['tree_icons'][ $server_id ][ $dn ] ) ) { + return $_SESSION['tree_icons'][ $server_id ][ $dn ]; + } else { + $icon = get_icon( $server_id, $dn ); + $_SESSION['tree_icons'][ $server_id ][ $dn ] = $icon; + return $icon; + } + } +} + /* * Given a server_id, returns whether or not we have enough information * to authenticate against the server. For example, if the user specifies @@ -158,58 +468,66 @@ function have_auth_info( $server_id ) $server = $servers[$server_id]; - if( $server['auth_type'] == 'form' ) - { - global $_COOKIE; - if( isset( $_COOKIE[ 'pla_login_dn_' . $server_id ] ) && - isset( $_COOKIE[ 'pla_pass_' . $server_id ] ) ) + if( isset( $server['auth_type'] ) && $server['auth_type'] == 'form' ) { + // we don't look at get_logged_in_pass() cause it may be null for anonymous binds + // get_logged_in_dn() will never return null if someone is really logged in. + if( get_logged_in_dn( $server_id ) ) return true; else return false; } - // whether or not the login_dn or pass is specified, we return + // whether or not the login_dn or pass is specified, we return // true here. (if they are blank, we do an anonymous bind anyway) - elseif( $server['auth_type'] == 'config' ) - { + elseif( ! isset( $server['auth_type'] ) || $server['auth_type'] == 'config' ) { return true; } else { - pla_error( "Error: You have an error in your config file. The only two allowed - values for 'auth_type' in the $servers section are 'config' and - 'form'. You entered '" . htmlspecialchars($server['auth_type']) . "', which - is not allowed. " ); + global $lang; + pla_error( sprintf( $lang['error_auth_type_config'], htmlspecialchars($server['auth_type'])) ); } } +/* + * Returns the password of the currently logged in DN (auth_type form only) + * or false if the current login is anonymous. + */ function get_logged_in_pass( $server_id ) { + if( ! is_numeric( $server_id ) ) + return false; + $cookie_name = 'pla_login_pass_' . $server_id; global $_COOKIE; - $pass = $_COOKIE[ 'pla_login_pass_' . $server_id ]; + $pass = isset( $_COOKIE[ $cookie_name ] ) ? $_COOKIE[ $cookie_name ] : false; if( $pass == '0' ) - return false; + return null; else return $pass; } + +/* + * Returns the DN who is logged in currently to the given server, which may + * either be a DN or the string 'anonymous'. + */ function get_logged_in_dn( $server_id ) { - global $_COOKIE; - $cookie_name = 'pla_login_dn_' . $server_id; - if( isset( $_COOKIE[ $cookie_name ] ) ) - $dn = $_COOKIE[ $cookie_name ]; - else + if( ! is_numeric( $server_id ) ) return false; + $cookie_name = 'pla_login_dn_' . $server_id; + global $_COOKIE; + if( isset( $_COOKIE[ $cookie_name ] ) ) { + $dn = $_COOKIE[ $cookie_name ]; + } else { + return false; + } - if( $dn == '0' ) - return 'Anonymous'; - else - return $dn; + return $dn; } -/* +/* * Specify a $server_id (0,1,2...) based on the order it appears in config.php. - * The first is 0, the second is 1, etc. You rarely will need to consult + * The first is 0, the second is 1, etc. You rarely will need to consult * config.php since those values are usually generated dynamically in hrefs. */ function pla_ldap_connect( $server_id ) @@ -224,7 +542,7 @@ function pla_ldap_connect( $server_id ) // cache the connection, so if we are called multiple // times, we don't have to reauthenticate with the LDAP server - + static $conns; if( isset( $conns[$server_id] ) && $conns[$server_id] ) return $conns[$server_id]; @@ -234,17 +552,17 @@ function pla_ldap_connect( $server_id ) if( ! $port ) $port = 389; $conn = @ldap_connect( $host, $port ); - + if( ! $conn ) return false; - + // go with LDAP version 3 if possible (needed for renaming and Novell schema fetching) @ldap_set_option( $conn, LDAP_OPT_PROTOCOL_VERSION, 3 ); // try to fire up TLS is specified in the config if( $servers[ $server_id ][ 'tls' ] == true ) { - function_exists( 'ldap_start_tls' ) or pla_error( "Your PHP install does not support TLS" ); - @ldap_start_tls( $conn ) or pla_error( "Could not start TLS.
    Please check your ". - "LDAP server configuration." ); + global $lang; + function_exists( 'ldap_start_tls' ) or pla_error( $lang['php_install_not_supports_tls'] ); + @ldap_start_tls( $conn ) or pla_error( $lang['could_not_start_tls']); } // grab the auth info based on the auth_type for this server @@ -252,19 +570,18 @@ function pla_ldap_connect( $server_id ) $login_dn = $servers[$server_id]['login_dn']; $login_pass = $servers[$server_id]['login_pass']; } elseif( $servers[ $server_id ][ 'auth_type' ] == 'form' ) { - global $_COOKIE; - $login_dn = $_COOKIE['pla_login_dn_' . $server_id ]; - $login_pass = $_COOKIE['pla_pass_' . $server_id ]; + $login_dn = get_logged_in_dn( $server_id ); + $login_pass = get_logged_in_pass( $server_id ); // Was this an anonyous bind (the cookie stores 0 if so)? - if( '0' == $login_dn ) { + if( 'anonymous' == $login_dn ) { $login_dn = null; $login_pass = null; } } else { - pla_error( "You have an error in your config file. auth_type of " . - htmlspecialchars( $servers[ $server_id ][ 'auth_type' ] ) . - " is not valid." ); + global $lang; + pla_error( sprintf( $lang['auth_type_not_valid'], + htmlspecialchars( $servers[ $server_id ][ 'auth_type' ] ))); } $res = @ldap_bind( $conn, $login_dn, $login_pass ); @@ -277,14 +594,14 @@ function pla_ldap_connect( $server_id ) return $conn; } -/* +/* * Returns an array listing the DNs contained by the specified $dn */ function get_container_contents( $server_id, $dn, $size_limit=0 ) { $con = pla_ldap_connect( $server_id ); if( ! $con ) return false; - + $search = @ldap_list( $con, $dn, 'objectClass=*', array( 'dn' ), 1, $size_limit ); if( ! $search ) return array(); @@ -300,8 +617,8 @@ function get_container_contents( $server_id, $dn, $size_limit=0 ) return $return; } -/* - * Builds the initial tree that is stored in the session variable 'tree'. +/* + * Builds the initial tree that is stored in the session variable 'tree'. * Simply returns an array with an entry for each active server in * config.php */ @@ -312,22 +629,15 @@ function build_initial_tree() foreach( $servers as $id => $server ) { if( $server['host'] == '' ) { continue; - /* - $root_dn = try_to_get_root_dn( $id ); - echo "Root is $root_dn
    "; - if( $root_dn ) - $tree[$id][$root_dn] = array(); - */ } - $dn = $server['base']; $tree[$id] = array(); } return $tree; } -/* +/* * Builds the initial array that stores the icon-lookup for each DN in the tree browser */ function build_initial_tree_icons() @@ -351,7 +661,10 @@ function get_entry_system_attrs( $server_id, $dn ) $conn = pla_ldap_connect( $server_id ); if( ! $conn ) return false; - $search = @ldap_read( $conn, $dn, '(objectClass=*)', array("+"), 0, 200, 0, LDAP_DEREF_ALWAYS ); + $attrs = array( 'creatorsname', 'createtimestamp', 'modifiersname', + 'structuralObjectClass', 'entryUUID', 'modifytimestamp', + 'subschemaSubentry', 'hasSubordinates', '+' ); + $search = @ldap_read( $conn, $dn, '(objectClass=*)', $attrs, 0, 0, 0, LDAP_DEREF_ALWAYS ); if( ! $search ) return false; @@ -360,7 +673,7 @@ function get_entry_system_attrs( $server_id, $dn ) $attrs = ldap_get_attributes( $conn, $entry ); $count = $attrs['count']; unset( $attrs['count'] ); - //echo "
    "; print_r( $attrs );
    +	$return_attrs = array();
     	for( $i=0; $i<$count; $i++ ) {
     		$attr_name = $attrs[$i];
     		unset( $attrs[$attr_name]['count'] );
    @@ -369,7 +682,7 @@ function get_entry_system_attrs( $server_id, $dn )
     	return $return_attrs;
     }
     
    -/* 
    +/*
      * Returns the attribute/value pairs for the given $dn on the given
      * $server_id. If the attribute is single valued, it will return
      * a single value for that attribute. Otherwise, it will return an
    @@ -393,17 +706,20 @@ function get_object_attrs( $server_id, $dn, $lower_case_attr_names = false )
     	$conn = pla_ldap_connect( $server_id );
     	if( ! $conn ) return false;
     
    -	$search = @ldap_read( $conn, $dn, '(objectClass=*)', array( ), 0, 200, 0, LDAP_DEREF_ALWAYS );
    -	
    +	$search = @ldap_read( $conn, $dn, '(objectClass=*)', array( ), 0, 0, 0, LDAP_DEREF_ALWAYS );
    +
     	if( ! $search )
     		return false;
     
     	$entry = ldap_first_entry( $conn, $search );
    +
    +	if( ! $entry )
    +		return false;
    +	
     	$attrs = ldap_get_attributes( $conn, $entry );
     
    -	if( ! $attrs || $attrs['count'] == 0 ) {
    +	if( ! $attrs || $attrs['count'] == 0 )
     		return false;
    -	}
     
     	$num_attrs = $attrs['count'];
     	unset( $attrs['count'] );
    @@ -413,10 +729,9 @@ function get_object_attrs( $server_id, $dn, $lower_case_attr_names = false )
     		unset( $attrs[$i] );
     
     	$return_array = array();
    -        foreach( $attrs as $attr => $vals ) {
    +    foreach( $attrs as $attr => $vals ) {
     		if( $lower_case_attr_names )
     			$attr = strtolower( $attr );
    -		$count = $vals['count'];
     		unset( $vals['count'] );
     		$return_array[ $attr ] = $vals;
     	}
    @@ -426,8 +741,8 @@ function get_object_attrs( $server_id, $dn, $lower_case_attr_names = false )
     	return $return_array;
     }
     
    -/* 
    - * Returns true if the passed string $temp contains all printable 
    +/*
    + * Returns true if the passed string $temp contains all printable
      * ASCII characters. Otherwise (like if it contains binary data),
      * returns false.
      */
    @@ -442,7 +757,7 @@ function is_printable_str($temp) {
     	return true;
     }
     
    -/* 
    +/*
      * Much like get_object_attrs(), but only returns the entry for
      * one attribute of an object. Again, if the attribute contains
      * multiple values, returns an array of values. Otherwise, it
    @@ -463,6 +778,9 @@ function get_object_attr( $server_id, $dn, $attr )
      * A do-it-all ldap_search function. You can even specify the search scope. Other than
      * that, it's pretty much the same as the PHP ldap_search() call, except it returns
      * an array of results, rather than an LDAP result resource.
    + *
    + * NOTE: This function will use a lot of memory on large searches. You should consider 
    + * using the PHP LDAP API directly for large searches (ldap_next_entry(), ldap_next_attribute(), etc)
      */
     function pla_ldap_search( $server_id, $filter, $base_dn=null, $attrs=array(), $scope='sub', $sort_results=true )
     {
    @@ -480,20 +798,21 @@ function pla_ldap_search( $server_id, $filter, $base_dn=null, $attrs=array(), $s
     
     	switch( $scope ) {
     		case 'base':
    -			$search = @ldap_read( $ds, $base_dn, $filter, $attrs, 0, 200, 0, LDAP_DEREF_ALWAYS );
    +			$search = @ldap_read( $ds, $base_dn, $filter, $attrs, 0, 0, 0, LDAP_DEREF_ALWAYS );
     			break;
     		case 'one':
    -			$search = @ldap_list( $ds, $base_dn, $filter, $attrs, 0, 200, 0, LDAP_DEREF_ALWAYS );
    +			$search = @ldap_list( $ds, $base_dn, $filter, $attrs, 0, 0, 0, LDAP_DEREF_ALWAYS );
     			break;
     		case 'sub':
     		default:
    -			$search = @ldap_search( $ds, $base_dn, $filter, $attrs, 0, 200, 0, LDAP_DEREF_ALWAYS );
    +			$search = @ldap_search( $ds, $base_dn, $filter, $attrs, 0, 0, 0, LDAP_DEREF_ALWAYS );
     			break;
     	}
     
     	if( ! $search )
     		return array();
     
    +	$return = array();
     	//get the first entry identifier
     	if( $entry_id = ldap_first_entry($ds,$search) )
     
    @@ -510,7 +829,7 @@ function pla_ldap_search( $server_id, $filter, $base_dn=null, $attrs=array(), $s
     			//get the first attribute of the entry
     			if($attr = ldap_first_attribute($ds,$entry_id,$attrs))
     
    -				//iterate over the attributes 
    +				//iterate over the attributes
     				while($attr){
     				  if( is_attr_binary($server_id,$attr))
     						$values = ldap_get_values_len($ds,$entry_id,$attr);
    @@ -582,7 +901,7 @@ function check_server_id( $server_id )
     
     /*
      * Used to generate a random salt for crypt-style passwords
    - * --- added 20021125 by bayu irawan  --- 
    + * --- added 20021125 by bayu irawan  ---
      * --- ammended 20030625 by S C Rigler  ---
      */
     function random_salt( $length )
    @@ -622,7 +941,7 @@ function get_avail_server_id()
     }
     
     /*
    - * Given a DN string, this returns the 'RDN' portion of the string. 
    + * Given a DN string, this returns the 'RDN' portion of the string.
      * For example. given 'cn=Manager,dc=example,dc=com', this function returns
      * 'cn=Manager' (it is really the exact opposite of get_container()).
      */
    @@ -640,7 +959,7 @@ function get_rdn( $dn, $include_attrs=0 )
     }
     
     /*
    - * Given a DN string, this returns the 'container' portion of the string. 
    + * Given a DN string, this returns the 'container' portion of the string.
      * For example. given 'cn=Manager,dc=example,dc=com', this function returns
      * 'dc=example,dc=com'.
      */
    @@ -669,16 +988,18 @@ function pla_verbose_error( $err_no )
     
     	if( ! file_exists( realpath( $err_codes_file ) ) )
     		return false;
    -	if( ! is_readable( realpath( $err_codes_file ) ) ) 
    +	if( ! is_readable( realpath( $err_codes_file ) ) )
     		return false;
     	if( ! ($f = fopen( realpath( $err_codes_file ), 'r' ) ) )
     		return false;
     
     	$contents = fread( $f, filesize( $err_codes_file ) );
    +	$entries = array();
     	preg_match_all( "/0x[A-Fa-f0-9][A-Za-z0-9]\s+[0-9A-Za-z_]+\s+\"[^\"]*\"\n/", $contents, $entries );
     	$err_codes = array();
     	foreach( $entries[0] as $e )
     	{
    +		$entry = array();
     		preg_match( "/(0x[A-Za-z0-9][A-Za-z0-9])\s+([0-9A-Za-z_]+)\s+\"([^\"]*)\"/", $e, $entry );
     		$hex_code = $entry[1];
     		$title    = $entry[2];
    @@ -692,35 +1013,36 @@ function pla_verbose_error( $err_no )
     
     /*
      * Spits out an HTML-formatted error string. If you specify the optional
    - * parameters, pla_error will lookup the error number and display a 
    + * parameters, pla_error will lookup the error number and display a
      * verbose message in addition to the message you pass it.
      */
    -function pla_error( $msg, $ldap_err_msg=null, $ldap_err_no=-1 )
    +function pla_error( $msg, $ldap_err_msg=null, $ldap_err_no=-1, $fatal=true )
     {
     	include_once 'header.php';
    +	global $lang;
     
     	?>
     	
    -

    Error

    +


    +
    LDAP said: " . htmlspecialchars( $ldap_err_msg ) . "

    \n"; + echo sprintf($lang['ldap_said'], htmlspecialchars( $ldap_err_msg )); if( $ldap_err_no != -1 ) { $ldap_err_no = ( '0x' . str_pad( dechex( $ldap_err_no ), 2, 0, STR_PAD_LEFT ) ); $verbose_error = pla_verbose_error( $ldap_err_no ); if( $verbose_error ) { - echo "Error number: $ldap_err_no (" . - $verbose_error['title'] . ")

    \n"; - echo "Description: " . $verbose_error['desc'] . "

    \n\n"; + echo sprintf( $lang['ferror_number'], $ldap_err_no, $verbose_error['title']); + echo sprintf( $lang['ferror_discription'], $verbose_error['desc']); } else { - echo "Error number: $ldap_err_no

    \n"; - echo "Description: (no description available)
    \n\n"; + echo sprintf($lang['ferror_number_short'], $ldap_err_no); + echo $lang['ferror_discription_short']; } } ?> @@ -728,14 +1050,62 @@ function pla_error( $msg, $ldap_err_msg=null, $ldap_err_no=-1 )
    - Is this a phpLDAPadmin bug? If so, please - report it. +
    \n\n"; // for each jpegPhoto in the entry, draw it (there may be only one, and that's okay) $jpeg_data = ldap_get_values_len( $conn, $entry, "jpegphoto"); - for( $i=0; $i<$jpeg_data['count']; $i++ ) + for( $i=0; $i<$jpeg_data['count']; $i++ ) { - $jpeg_filename = $jpeg_temp_dir . '/' . basename( tempnam ('.', 'djp') ); - $jpeg_filename = realpath( $jpeg_filename ); + // ensures that the photo is written to the specified jpeg_temp_dir + $jpeg_temp_dir = realpath($jpeg_temp_dir.'/'); + $jpeg_filename = tempnam($jpeg_temp_dir.'/', 'djp'); $outjpeg = fopen($jpeg_filename, "wb"); fwrite($outjpeg, $jpeg_data[$i]); fclose ($outjpeg); $jpeg_data_size = filesize( $jpeg_filename ); if( $jpeg_data_size < 6 ) { - echo "jpegPhoto contains errors
    "; - echo 'Delete Photo'; + echo $lang['jpeg_contains_errors']; + echo ''. $lang['delete_photo'] .''; continue; } @@ -820,7 +1192,7 @@ function draw_jpeg_photos( $server_id, $dn, $draw_delete_buttons=false ) if( $width > 300 ) { $scale_factor = 300 / $width; $img_width = 300; - $img_height = $height * $scale_factor; + $img_height = $height * $scale_factor; } else { $img_width = $width; $img_height = $height; @@ -842,20 +1214,20 @@ function draw_jpeg_photos( $server_id, $dn, $draw_delete_buttons=false ) if( ! isset( $jpeg_tmp_keep_time ) ) $jpeg_tmp_keep_time = 120; - if( $jpeg_tmp_keep_time == 0 ) + if( $jpeg_tmp_keep_time == 0 ) $jpeg_tmp_keep_time = 10; // delete old jpeg files. $jpegtmp_wildcard = "djp.*"; $handle = opendir($jpeg_temp_dir); while (($file = readdir($handle)) != false) - if (eregi($jpegtmp_wildcard, $file)) + if (eregi($jpegtmp_wildcard, $file)) { $file = "$jpeg_temp_dir/$file"; if ((time() - filemtime($file)) > $jpeg_tmp_keep_time) unlink ( $file ); } - closedir($handle); + closedir($handle); } @@ -867,13 +1239,13 @@ function draw_jpeg_photos( $server_id, $dn, $draw_delete_buttons=false ) */ function try_to_get_root_dn( $server_id ) { - if( ! have_auth_info( $server_id ) ) + if( ! have_auth_info( $server_id ) ) return false; $ds = pla_ldap_connect( $server_id ); - if( ! $ds ) + if( ! $ds ) return false; - + $r = @ldap_read( $ds, '', 'objectClass=*', array( 'namingContexts' ) ); if( ! $r ) return false; @@ -888,11 +1260,13 @@ function try_to_get_root_dn( $server_id ) } /* - * Hashes a password and returns the hash based on the enc_type, which can be one of - * crypt, md5, sha, or clear. + * Hashes a password and returns the hash based on the enc_type, which can be one of + * crypt, md5, md5crypt, sha, smd5, ssha, or clear. */ function password_hash( $password_clear, $enc_type ) { + global $lang; + $enc_type = strtolower( $enc_type ); switch( $enc_type ) { case 'crypt': @@ -903,20 +1277,37 @@ function password_hash( $password_clear, $enc_type ) break; case 'md5crypt': if( ! defined( 'CRYPT_MD5' ) || 0 == CRYPT_MD5 ) - pla_error( "Your PHP install does not support blowfish encryption." ); + pla_error( $lang['install_not_support_blowfish'] ); $new_value = '{crypt}' . crypt( $password_clear , '$1$' . random_salt(9) ); break; case 'blowfish': if( ! defined( 'CRYPT_BLOWFISH' ) || 0 == CRYPT_BLOWFISH ) - pla_error( "Your PHP install does not support blowfish encryption." ); + pla_error( $lang['install_not_support_blowfish'] ); $new_value = '{crypt}' . crypt( $password_clear , '$2$' . random_salt(13) ); break; case 'sha': if( function_exists( 'mhash' ) ) { $new_value = '{sha}' . base64_encode( mhash( MHASH_SHA1, $password_clear) ); } else { - pla_error( "Your PHP install does not have the mhash() function." . - " Cannot do SHA hashes." ); + pla_error( $lang['install_no_mash'] ); + } + break; + case 'ssha': + if( function_exists( 'mhash' ) && function_exists( 'mhash_keygen_s2k' ) ) { + mt_srand( (double) microtime() * 1000000 ); + $salt = mhash_keygen_s2k( MHASH_SHA1, $password_clear, substr( pack( "h*", md5( mt_rand() ) ), 0, 8 ), 4 ); + $new_value = "{ssha}".base64_encode( mhash( MHASH_SHA1, $password_clear.$salt ).$salt ); + } else { + pla_error( $lang['install_no_mash'] ); + } + break; + case 'smd5': + if( function_exists( 'mhash' ) && function_exists( 'mhash_keygen_s2k' ) ) { + mt_srand( (double) microtime() * 1000000 ); + $salt = mhash_keygen_s2k( MHASH_MD5, $password_clear, substr( pack( "h*", md5( mt_rand() ) ), 0, 8 ), 4 ); + $new_value = "{smd5}".base64_encode( mhash( MHASH_SHA1, $password_clear.$salt ).$salt ); + } else { + pla_error( $lang['install_no_mash'] ); } break; case 'clear': @@ -947,7 +1338,7 @@ function draw_chooser_link( $form_element ) $href = "javascript:dnChooserPopup('$form_element');"; $title = $lang['chooser_link_tooltip']; echo ""; - echo "browse\n"; + echo "". $lang['fbrowse'] ."\n"; } function get_values($link_id,$entry_id,$attr){ @@ -959,7 +1350,7 @@ function get_values($link_id,$entry_id,$attr){ } return $values; } - + /* function utf8_decode($str) { @@ -1027,4 +1418,15 @@ function get_href( $type ) { } } +/* + * Returns the current time as a double (including micro-seconds). + */ +function utime () +{ + $time = explode( " ", microtime()); + $usec = (double)$time[0]; + $sec = (double)$time[1]; + return $sec + $usec; +} + ?> diff --git a/header.php b/header.php index 7c7f0ad..4ce6083 100644 --- a/header.php +++ b/header.php @@ -1,12 +1,20 @@ -\n"; ?> + - + // XML version and encoding for well-behaved browsers + echo "\n"; +?> + + + phpLDAPadmin + diff --git a/images/host.png b/images/host.png new file mode 100644 index 0000000..87426e7 Binary files /dev/null and b/images/host.png differ diff --git a/images/nt.png b/images/nt.png index f23a5fa..4d3737a 100644 Binary files a/images/nt.png and b/images/nt.png differ diff --git a/images/process.png b/images/process.png new file mode 100644 index 0000000..e3495eb Binary files /dev/null and b/images/process.png differ diff --git a/images/question.png b/images/question.png new file mode 100644 index 0000000..a0281f2 Binary files /dev/null and b/images/question.png differ diff --git a/images/uniquegroup.png b/images/uniquegroup.png new file mode 100644 index 0000000..c86d4a1 Binary files /dev/null and b/images/uniquegroup.png differ diff --git a/images/warning_small.png b/images/warning_small.png new file mode 100644 index 0000000..a7cdbc7 Binary files /dev/null and b/images/warning_small.png differ diff --git a/index.php b/index.php index 2b9df6c..f724327 100644 --- a/index.php +++ b/index.php @@ -9,12 +9,12 @@ PHP is not installed on your web server!!! *******************************************/ -@require 'common.php'; +require 'common.php'; + +if( ! file_exists(realpath( 'config.php' )) ) { ?> - - phpLDAPadmin - <?php echo pla_version(); ?> @@ -35,6 +35,7 @@ An example config file is provided in 'config.php.example' \n"; @@ -68,6 +69,11 @@ echo "\n"; */ function check_config() { + /* Make sure their PHP version is current enough */ + if( strcmp( phpversion(), REQUIRED_PHP_VERSION ) < 0 ) { + pla_error( "phpLDAPadmin requires PHP version 4.1.0 or greater. You are using " . phpversion() ); + } + /* Make sure this PHP install has LDAP support */ if( ! extension_loaded( 'ldap' ) ) { @@ -88,29 +94,21 @@ function check_config() /* Make sure the config file is readable */ //if( ! is_readable( 'config.php' ) ) - if( ! is_readable(realpath( 'config.php' )) ) - { + if( ! is_readable( realpath( 'config.php' ) ) ) { echo "The config file 'config.php' is not readable. Please check its permissions."; return false; } - /* Make sure their PHP install is up to snuff */ - if( version_compare( phpversion(), "4.1.0" ) < 0 ) - { - echo "You are using php version " . phpversion() . ". phpLDAPadmin requires version 4.1 or greater."; - return false; - } - /* check for syntax errors in config.php */ // capture the result of including the file with output buffering ob_start(); include 'config.php'; $str = ob_get_contents(); ob_end_clean(); - if( $str && false !== strpos( $str, 'error' ) ) - { + if( $str && false !== strpos( $str, 'error' ) ) { $str = strip_tags( $str ); - $parse_error = preg_match( "/on line (\d+)/", $str, $matches ); + $matches = array(); + preg_match( "/on line (\d+)/", $str, $matches ); $line_num = $matches[1]; $file = file( 'config.php' ); ?> @@ -153,15 +151,9 @@ function check_config() return false; } - if( $str && false !== strpos( $str, 'Warning' ) ) - { - - } - /* check the existence of the servers array */ require 'config.php'; - if( ! is_array( $servers ) || count( $servers ) == 0 ) - { + if( ! is_array( $servers ) || count( $servers ) == 0 ) { echo "Your config.php is missing the servers array or the array is empty. "; echo " Please see the sample file config.php.example "; return false; @@ -172,13 +164,32 @@ function check_config() foreach( $servers as $i => $server ) if( $server['host'] ) $count++; - if( $count == 0 ) - { + if( $count == 0 ) { echo "None of the " . count($servers) . " servers in your \$servers array is "; echo "active in config.php. phpLDAPadmin cannot proceed util you correct this."; return false; } + // Check each of the servers in the servers array + foreach( $servers as $id => $server ) { + if( isset( $server['host'] ) ) { + + // Make sure they specified an auth_type + if( ! isset( $server['auth_type'] ) ) { + echo "Your configuratoin has an error. You omitted the 'auth_type' directive on server number $id"; + echo "'auth_type' must be set, and it must be one of 'config' or 'form'."; + return false; + } + + // Make sure they specified a correct auth_type + if( $server['auth_type'] != 'config' && $server['auth_type'] != 'form' ) { + echo "You specified an invalid 'auth_type' (" . htmlspecialchars( $server['auth_type'] ) . ") "; + echo "for server number $id in your configuration."; + return false; + } + } + } + return true; } diff --git a/lang/Makefile b/lang/Makefile new file mode 100644 index 0000000..7e63888 --- /dev/null +++ b/lang/Makefile @@ -0,0 +1,84 @@ +# +# This Makefile recodes source lang files into HTML Unicode. +# You should add your encodings to this file. You need to have GNU Recode +# installed. +# +# It is important to fix first and last lines of the file +# using 'awk' +# +DESTDIR=./recoded +TARGETS=${DESTDIR}/ct.php \ + ${DESTDIR}/de.php \ + ${DESTDIR}/en.php \ + ${DESTDIR}/es.php \ + ${DESTDIR}/fr.php \ + ${DESTDIR}/it.php \ + ${DESTDIR}/nl.php \ + ${DESTDIR}/ru.php + +all: prepare ${TARGETS} syntax + @echo "Setting permissions..." + @chmod 644 ${TARGETS} + @echo "Done!" + +syntax: + @for i in ${TARGETS}; do php -l $$i >/dev/null 2>&1 || ( echo "Syntax errors found in $$i!" && exit 1 ); done + +prepare: + @which recode >/dev/null 2>&1 || ( echo "You must have GNU 'recode' installed to use this Makefile, but I \ + could not find it in your path!" && exit 1 ) + @mkdir -p ${DESTDIR} + @chmod 755 ${DESTDIR} + +clean: + @echo "Blowing away recoded lang files..." + @rm -vf ${TARGETS} + +${DESTDIR}/ct.php: ct.php + @echo "Recoding ct.php..." + @cat ct.php | recode iso-8859-1..html | \ + awk '{ gsub(">",">"); gsub("<","<"); print $0}' \ + > ${DESTDIR}/ct.php + +${DESTDIR}/de.php: de.php + @echo "Recoding de.php..." + @cat de.php | recode html..html | \ + awk '{ gsub(">",">"); gsub("<","<"); print $0}' \ + > ${DESTDIR}/de.php + +${DESTDIR}/en.php: en.php + @echo "Recoding en.php..." + @cat en.php | recode html..html | \ + awk '{ gsub(">",">"); gsub("<","<"); print $0}' \ + > ${DESTDIR}/en.php + +${DESTDIR}/es.php: es.php + @echo "Recoding es.php..." + @cat es.php | recode iso-8859-1..html | \ + awk '{ gsub(">",">"); gsub("<","<"); print $0}' \ + > ${DESTDIR}/es.php + +${DESTDIR}/fr.php: fr.php + @echo "Recoding fr.php..." + @cat fr.php | recode html..html | \ + awk '{ gsub(">",">"); gsub("<","<"); print $0}' \ + > ${DESTDIR}/fr.php + +${DESTDIR}/it.php: it.php + @echo "Recoding it.php..." + @cat it.php | recode latin2..html | \ + awk '{ gsub(">",">"); gsub("<","<"); print $0}' \ + > ${DESTDIR}/it.php + +${DESTDIR}/nl.php: nl.php + @echo "Recoding nl.php..." + @cat nl.php | recode latin1..html | \ + awk '{ gsub(">",">"); gsub("<","<"); print $0}' \ + > ${DESTDIR}/nl.php + +${DESTDIR}/ru.php: ru.php + @echo "Recoding ru.php..." + @cat ru.php | recode utf-8..html | \ + awk '{ gsub(">",">"); gsub("<","<"); print $0}' \ + > ${DESTDIR}/ru.php + diff --git a/lang/ct.php b/lang/ct.php new file mode 100644 index 0000000..787ae1d --- /dev/null +++ b/lang/ct.php @@ -0,0 +1,337 @@ +Per a borrar un atribut, buida el formulari de texte i fes click a Desar.'; +$lang['attr_schema_hint'] = 'Pista: Per veure l\'esquema d\'un atribut, fes click al nom de l\'atribut.'; +$lang['attrs_modified'] = 'Alguns atributs (%s) foren modificats i estan remarcats més abaix.'; +$lang['attr_modified'] = 'Un atribut (%s) fore modificat i està remarcat més abaix.'; +$lang['viewing_read_only'] = 'Mostrant l\'objecte en el mode de no alterar.'; +$lang['change_entry_rdn'] = 'Modificar el RDN d\'aquest objecte'; +$lang['no_new_attrs_available'] = 'No hi han atributs nous disponibles per aquest objecte'; +$lang['binary_value'] = 'Valor binari'; +$lang['add_new_binary_attr'] = 'Afegir valor binari'; +$lang['add_new_binary_attr_tooltip'] = 'Afegir atribut/valor binari d\'un arxiu'; +$lang['alias_for'] = 'Sinònim per a'; +$lang['download_value'] = 'Descarregar valor'; +$lang['delete_attribute'] = 'Esborrar atribut'; +$lang['true'] = 'veritat'; +$lang['false'] = 'fals'; +$lang['none_remove_value'] = 'cap, esborrar valor'; +$lang['really_delete_attribute'] = 'Esborrar realment l\'atribut?'; + +// Schema browser +$lang['the_following_objectclasses'] = 'Les següents ObjectClass són presents en aquest servidor LDAP.'; +$lang['the_following_attributes'] = 'Les següents attributeTypes són presents en aquest servidor LDAP.'; +$lang['the_following_matching'] = 'Les següents matching rules són presents en aquest servidor LDAP.'; +$lang['the_following_syntaxes'] = 'Les següents sintaxis són presents en aquest servidor LDAP.'; +$lang['jump_to_objectclass'] = 'Saltar a una ObjectClass'; +$lang['jump_to_attr'] = 'Saltar a un atribut'; +$lang['schema_for_server'] = 'Esquema del servidor '; +$lang['required_attrs'] = 'Atributs Requerits (MUST)'; +$lang['optional_attrs'] = 'Atributs Opcionals (MAY)'; +$lang['OID'] = 'OID'; +$lang['desc'] = 'Descripció'; +$lang['name'] = 'Nom'; +$lang['is_obsolete'] = 'Aquesta ObjectClass és obsoleta'; +$lang['inherits'] = 'Hereda'; +$lang['jump_to_this_oclass'] = 'Saltar a aquesta ObjectClass'; +$lang['matching_rule_oid'] = 'OID de Matching Rule'; +$lang['syntax_oid'] = 'OID de Sintaxi'; +$lang['not_applicable'] = 'no es aplicable'; +$lang['not_specified'] = 'no especificada'; + +// Deleting entries +$lang['entry_deleted_successfully'] = 'Entrada \'%s\' esborrada correctament.'; +$lang['you_must_specify_a_dn'] = 'Has d\'especificar un DN'; +$lang['could_not_delete_entry'] = 'No he pogut esborrar l\'entrada: %s'; + +// Adding objectClass form +$lang['new_required_attrs'] = 'Nous atributs requerits'; +$lang['requires_to_add'] = 'Aquesta acció exigeix que s\'afegeixin'; +$lang['new_attributes'] = 'nous atributs'; +$lang['new_required_attrs_instructions'] = 'Instruccions: Per afegir aquesta ObjectClass a aquest objecte, s\'ha d\'especificar'; +$lang['that_this_oclass_requires'] = 'que aquest ObjectClass requereix. Es pot fer amb aquest formulari.'; +$lang['add_oclass_and_attrs'] = 'Afegir ObjectClass i Atributs'; + +// General +$lang['chooser_link_tooltip'] = 'Fer click per seleccionar un objecte gràficament'; +$lang['no_updates_in_read_only_mode'] = 'No es pot modificar l\'objecte si el servidor està operant en mode inalterable.'; +$lang['bad_server_id'] = 'L\'identificador de servidor està malament'; +$lang['not_enough_login_info'] = 'No tinc suficient informació per conectar al servidor. Si us plau configurar correctament l\'arxiu config.php'; +$lang['could_not_connect'] = 'No s\'ha pogut conectar al servidor LDAP'; +$lang['could_not_perform_ldap_mod_add'] = 'No s\'ha pogut fer l\'operació del ldap_mod_add.'; +$lang['bad_server_id_underline'] = 'L\'identificador del servidor està malament: '; +$lang['success'] = 'Exit'; +$lang['server_colon_pare'] = 'Servidor: '; +$lang['look_in'] = 'Buscant a: '; +$lang['missing_server_id_in_query_string'] = 'No està present l\'identificador del servidor a la URL'; +$lang['missing_dn_in_query_string'] = 'No està present el DN a la URL'; +$lang['back_up_p'] = 'Tornar a...'; +$lang['no_entries'] = 'no hi han entrades'; +$lang['not_logged_in'] = 'No estàs autenticat'; +$lang['could_not_det_base_dn'] = 'No he pogut determinar la base DN'; + +// Add value form +$lang['add_new'] = 'Afegir'; +$lang['value_to'] = 'valor a'; +$lang['server'] = 'Servidor'; +$lang['distinguished_name'] = 'Nom distinguit'; +$lang['current_list_of'] = 'La llista actual de'; +$lang['values_for_attribute'] = 'valors per a l\'atribut'; +$lang['inappropriate_matching_note'] = 'Nota: Sino has configurat una regla \'EQUALITY\' al servidor LDAP, rebràs un error \'inappropriate matching\''; +$lang['enter_value_to_add'] = 'Proveïr el valor per afegir: '; +$lang['new_required_attrs_note'] = 'Nota: Es posible que es requereixi afegir nous atributs per satisfer els requisits d\'aquesta ObjectClass'; +$lang['syntax'] = 'Sintaxi'; + +//copy.php +$lang['copy_server_read_only'] = 'No es poden realitzar les modificacions si el servidor està operant en mode inalterable'; +$lang['copy_dest_dn_blank'] = 'No se emplenat el formulari de DN.'; +$lang['copy_dest_already_exists'] = 'L\'entrada de destí (%s) encara existeix.'; +$lang['copy_dest_container_does_not_exist'] = 'El contenidor de destí (%s) no existeix.'; +$lang['copy_source_dest_dn_same'] = 'El DN de la font i el DN de destí son els mateixos.'; +$lang['copy_copying'] = 'Copiant '; +$lang['copy_recursive_copy_progress'] = 'El progrés de la còpia recurrent'; +$lang['copy_building_snapshot'] = 'Construïnt la \'foto\' de l\'arbre per a copiar... '; +$lang['copy_successful_like_to'] = 'Exit! Desitges '; +$lang['copy_view_new_entry'] = 'Veure el nou objecte?'; +$lang['copy_failed'] = 'Fallida al copiar DN: '; + +//edit.php +$lang['missing_template_file'] = 'Error: falta la plantilla, '; +$lang['using_default'] = 'Fent anar l\'arxiu per defecte.'; + +//copy_form.php +$lang['copyf_title_copy'] = 'Copiar '; +$lang['copyf_to_new_object'] = 'a un objecte nou'; +$lang['copyf_dest_dn'] = 'DN de destí'; +$lang['copyf_dest_dn_tooltip'] = 'El DN sencer de la nova entrada a ser creada quan es copii l\'entrada font'; +$lang['copyf_dest_server'] = 'Servidor de destí'; +$lang['copyf_note'] = 'Nota: Copiar entre dos servidor funciona solsament si no hi han violacions de l\'esquema.'; +$lang['copyf_recursive_copy'] = 'Esborrar tots els fills recurrentment també?'; + + +//create.php +$lang['create_required_attribute'] = 'T\'has deixar el valor en blanc de l\'atribut requerit %s.'; +$lang['create_redirecting'] = 'Redirigint'; +$lang['create_here'] = 'aquí'; +$lang['create_could_not_add'] = 'No he pogut afegir l\'objecte al servidor LDAP.'; + +//create_form.php +$lang['createf_create_object'] = 'Crear Objecte'; +$lang['createf_choose_temp'] = 'Escull una plantilla'; +$lang['createf_select_temp'] = 'Selecciona una plantilla per al procès de creació'; +$lang['createf_proceed'] = 'Procedir'; + +//creation_template.php +$lang['ctemplate_on_server'] = 'Al servidor'; +$lang['ctemplate_no_template'] = 'No s\'ha especificat cap plantilla a les variables del POST.'; +$lang['ctemplate_config_handler'] = 'La teva configuració especifica un manejador de'; +$lang['ctemplate_handler_does_not_exist'] = 'per aquesta plantilla. Però, aquest manejador no existeix al directori \'plantilla/creació\'.'; + +// search.php +$lang['you_have_not_logged_into_server'] = 'Encara no t\'has autenticat al servidor selectionat, no pots fer cap recerca.'; +$lang['click_to_go_to_login_form'] = 'Clica aquí per anar al formulari d\'autenticació'; +$lang['unrecognized_criteria_option'] = 'Opció de criteri desconeguda: '; +$lang['if_you_want_to_add_criteria'] = 'Si vols afegir el teu propi criteri a la llista. Estigues segur d\'editar search.php per manejar-lo. Sortint.'; +$lang['entries_found'] = 'Entrades trobades: '; +$lang['filter_performed'] = 'Filtre realitzat: '; +$lang['search_duration'] = 'Recerca realitzada per phpLDAPadmin a'; +$lang['seconds'] = 'segons'; + +// search_form_advanced.php +$lang['scope_in_which_to_search'] = 'L\'abast en el que buscar'; +$lang['scope_sub'] = 'Sub (tot el sub-arbre)'; +$lang['scope_one'] = 'Un (un nivell per d\'avall de la base)'; +$lang['scope_base'] = 'Base (sols base dn)'; +$lang['standard_ldap_search_filter'] = 'Filtre de recerca estàndar de LDAP. Exemple: (&(sn=Smith)(givenname=David))'; +$lang['search_filter'] = 'Filtre de recerca'; +$lang['list_of_attrs_to_display_in_results'] = 'Una llista d\'atributs per mostrar als resultats (separats per comes)'; +$lang['show_attributes'] = 'Mostrar atributs'; + +// search_form_simple.php +$lang['search_for_entries_whose'] = 'Buscar entrades les quals:'; +$lang['equals'] = 'sigui igual'; +$lang['starts with'] = 'comenci amb'; +$lang['contains'] = 'contingui'; +$lang['ends with'] = 'acabi amb'; +$lang['sounds like'] = 'soni com'; + +// server_info.php +$lang['could_not_fetch_server_info'] = 'No s\'ha pogut treure informació LDAP del servidor'; +$lang['server_info_for'] = 'Informació del servidor per a: '; +$lang['server_reports_following'] = 'El servidor mostra la següent informació sobre ell mateix'; +$lang['nothing_to_report'] = 'Aquest servidor no té res a mostrar.'; + +//update.php +$lang['update_array_malformed'] = 'l\'update_array està malformat. Aixó podria ser una errada del phpLDAPadmin. Si us plau reportala.'; +$lang['could_not_perform_ldap_modify'] = 'No he pogut executar l\'operació ldap_modify.'; + +// update_confirm.php +$lang['do_you_want_to_make_these_changes'] = 'Vols fer aquests canvis?'; +$lang['attribute'] = 'Atribut'; +$lang['old_value'] = 'Valor vell'; +$lang['new_value'] = 'Valor nou'; +$lang['attr_deleted'] = '[atribut esborrat]'; +$lang['commit'] = 'Cometre'; +$lang['cancel'] = 'Cancel.lar'; +$lang['you_made_no_changes'] = 'No has fet cap canvi'; +$lang['go_back'] = 'Tornar enrera'; + +// welcome.php +$lang['welcome_note'] = 'Fes anar el menú de l\'esquerra per a navegar'; + +// view_jpeg_photo.php +$lang['unsafe_file_name'] = 'Nom d\'arxiu insegur: '; +$lang['no_such_file'] = 'Arxiu no existent: '; + +//function.php +$lang['auto_update_not_setup'] = 'Has activat els auto_uid_numbers per %s a la teva configuració, + pero no has especificat l\'auto_uid_number_mechanism. Si us plau soluciona + aquest problema.'; +$lang['uidpool_not_set'] = 'Has especificat l\'auto_uid_number_mechanism com uidpool + a la teva configuració per al servidor %s, pero no has especificat el + audo_uid_number_uid_pool_dn. Si us plau especifica\'l avans de procedir.'; +$lang['uidpool_not_exist'] = 'Sembla ser que el uidPool que has especificat a la teva configuració (%s) + no existeix.'; +$lang['specified_uidpool'] = 'Has especificat l\'auto_uid_number_mechanism com search a la teva + configuració per al servidor %s, pero no has especificat el + auto_uid_number_search_base. Si us plau especifica\'l avans de procedir.'; +$lang['auto_uid_invalid_value'] = 'Has especificat un valor no vàlid per a l\'auto_uid_number_mechanism (%s) + a la teva configuració. Sols uidpool i search son vàlids. + Si us plau soluciona aquest problema.'; +$lang['error_auth_type_config'] = 'Error: Tens un error al teu arxiu de configuració. Els dos únics valors acceptats per + \'auth_type\' a la secció $servers son \'config\' i \'form\'. Tu has ficat \'%s\', + el qual no està acceptat. '; +$lang['php_install_not_supports_tls'] = 'La teva instalació de PHP no soporta TLS'; +$lang['could_not_start_tls'] = 'No he pogut iniciar el TLS.
    Revisa la teva configuració del servidor LDAP.'; +$lang['auth_type_not_valid'] = 'Tens un error a l\'arxiu de configuració. auth_type de %s no es vàlid.'; +$lang['ldap_said'] = 'LDAP diguè: %s

    '; +$lang['ferror_error'] = 'Error'; +$lang['fbrowse'] = 'mostrar'; +$lang['delete_photo'] = 'Esborrar foto'; +$lang['install_not_support_blowfish'] = 'La teva instalació de PHP no soporta el tipus d\'encriptació blowfish.'; +$lang['install_no_mash'] = 'La teva instalació de PHP no té la funció mhash(). No puc fer hash SHA.'; +$lang['jpeg_contains_errors'] = 'jpegPhoto conté errors
    '; +$lang['ferror_number'] = 'Error número: %s (%s)

    '; +$lang['ferror_discription'] = 'Descripció: %s

    '; +$lang['ferror_number_short'] = 'Error número: %s

    '; +$lang['ferror_discription_short'] = 'Descripció: (no hi ha descripció)
    '; +$lang['ferror_submit_bug'] = 'Es una errada del phpLDAPadmin? Si ho és, si us plau diguen\'s-ho.'; +$lang['ferror_unrecognized_num'] = 'Número d\'error desconegut: '; +$lang['ferror_nonfatil_bug'] = '
    +
    + Has trobat un error fatal del phpLDAPadmin!
    Error:%s (%s)
    Arxiu:%s línia %s, caller %s
    Versions:PLA: %s, PHP: %s, SAPI: %s +
    Servidor Web:%s
    + Envía aquesta errada fent click aquí.

    '; +$lang['ferror_congrats_found_bug'] = 'Felicitats! Has trobat una errada al phpLDAPadmin.

    + + + + + + + + + + +
    Error:%s
    Nivell:%s
    Arxiu:%s
    Línia:%s
    Caller:%s
    Versió PLA:%s
    Versió PHP:%s
    PHP SAPI:%s
    Servidor Web:%s
    +
    + Si us plau envía aquesta errada fent click abaix!'; + +//ldif_import_form +$lang['import_ldif_file_title'] = 'Importar arxiu LDIF'; +$lang['select_ldif_file'] = 'Selecciona un arxiu LDIF:'; +$lang['select_ldif_file_proceed'] = 'Procedir >>'; + +//ldif_import +$lang['add_action'] = 'Afegint...'; +$lang['delete_action'] = 'Esborrant...'; +$lang['rename_action'] = 'Renombrant...'; +$lang['modify_action'] = 'Modificant...'; + +$lang['failed'] = 'fallat'; +$lang['ldif_parse_error'] = 'Error de parsejat LDIF'; +$lang['ldif_could_not_add_object'] = 'No he pogut afegir l\'objecte:'; +$lang['ldif_could_not_rename_object'] = 'No he pogut renombrar l\'objecte:'; +$lang['ldif_could_not_delete_object'] = 'No he pogut esborrar l\'objecte:'; +$lang['ldif_could_not_modify_object'] = 'No he pogut modificar l\'objecte:'; +$lang['ldif_line_number'] = 'Línia Número:'; +$lang['ldif_line'] = 'Línia:'; + +?> diff --git a/lang/de.php b/lang/de.php index 54fac8e..5bccaf1 100644 --- a/lang/de.php +++ b/lang/de.php @@ -1,6 +1,10 @@ + * Uwe Ebel + * Modifikationen von Dieter Kluenter + */ // Search form $lang['simple_search_form_str'] = 'Einfache Suche';//'Simple Search Form'; @@ -8,13 +12,13 @@ $lang['advanced_search_form_str'] = 'Experten Suche';//'Advanced Search Form'; $lang['server'] = 'Server';//'Server'; $lang['search_for_entries_whose'] = 'Suche nach Einträgen die';//'Search for entries whose'; $lang['base_dn'] = 'Base DN';//'Base DN'; -$lang['search_scope'] = 'Suchart';//'Search Scope'; +$lang['search_scope'] = 'Suchbereich';//'Search Scope'; $lang['search_ filter'] = 'Suchfilter';//'Search Filter'; $lang['show_attributes'] = 'Zeige Attribute';//'Show Attributtes'; $lang['Search'] = 'Suchen';//'Search'; $lang['equals'] = 'gleich';//'equals'; $lang['starts_with'] = 'beginnt mit';//'starts with'; -$lang['contains'] = 'enthä';//'contains'; +$lang['contains'] = 'enthält';//'contains'; $lang['ends_with'] = 'endet mit';//'ends with'; $lang['sounds_like'] = 'änlich wie';//'sounds like'; @@ -23,21 +27,33 @@ $lang['request_new_feature'] = 'Anfragen von neuen Möglichkeiten';//'Reques $lang['see_open_requests'] = 'Siehe offene Anfragen';//'see open requests'; $lang['report_bug'] = 'Einen Fehler berichten';//'Report a bug'; $lang['see_open_bugs'] = 'Siehe offene Fehler';//'see open bugs'; -$lang['schema'] = 'schema';//'schema'; +$lang['schema'] = 'Schema';//'schema'; $lang['search'] = 'suche';//'search'; $lang['refresh'] = 'aktualisieren';//'refresh'; -$lang['create'] = 'Neu';//'create'; -$lang['info'] = 'info';//'info'; -$lang['import'] = 'import';//'import'; -$lang['logout'] = 'logout';// 'Abmelden' 'logout'; -$lang['create_new'] = 'Neuen erzeugen';//'Create New'; - +$lang['create'] = 'neu';//'create'; +$lang['info'] = 'Info';//'info'; +$lang['import'] = 'Import';//'import'; +$lang['logout'] = 'abmelden';//'logout'; +$lang['create_new'] = 'Neuen Eintrag erzeugen';//'Create New'; +$lang['view_schema_for'] = 'Zeige Schema für';//'View schema for'; +$lang['refresh_expanded_containers'] = 'Aktualisiere alle geöffneten Container von';//'Refresh all expanded containers for'; +$lang['create_new_entry_on'] = 'Erzeuge einen neuen Eintrag auf';//'Create a new entry on'; +$lang['view_server_info'] = 'Zeige Server Informationen';//'View server-supplied information'; +$lang['import_from_ldif'] = 'Importiere Einträge von einer LDIF-Datei';//'Import entries from an LDIF file'; +$lang['logout_of_this_server'] = 'Von diesem Server abmelden';//'Logout of this server'; +$lang['logged_in_as'] = 'Angemeldet als: ';//'Logged in as: '; +$lang['read_only'] = 'nur lesen';//'read only'; +$lang['could_not_determine_root'] = 'Konnte die Basis ihres LDAP Verzeichnises nicht ermitteln';//'Could not determin the root of your LDAP tree.'; +$lang['ldap_refuses_to_give_root'] = 'Es scheint das ihr LDAP Server nicht dazu konfiguriert wurde seine Basis bekanntzugeben';//'It appears that the LDAP server has been configured to not reveal its root.'; +$lang['please_specify_in_config'] = 'Bitte in config.php angeben';//'Please specify it in config.php'; +$lang['create_new_entry_in'] = 'Neuen Eintrag erzeugen auf';//'Create a new entry in'; +$lang['login_link'] = 'Anmelden...';//'Login...'; // Entry display $lang['delete_this_entry'] = 'Diesen Eintrag löschen';//'Delete this entry'; -$lang['delete_this_entry_tooltip'] = 'You will be prompted to confirm this decision'; +$lang['delete_this_entry_tooltip'] = 'F¨r diese Entscheidung wird nochmals nachgefragt.';//'You will be prompted to confirm this decision'; $lang['copy_this_entry'] = 'Diesen Eintrag kopieren';//'Copy this entry'; -$lang['copy_this_entry_tooltip'] = 'Copy this object to another location, a new DN, or another server'; +$lang['copy_this_entry_tooltip'] = 'Kopiere diese Object an eine anderen Ort: ein neuer DN oder einen anderen Server.';//'Copy this object to another location, a new DN, or another server'; $lang['export_to_ldif'] = 'Exportieren nach LDIF';//'Export to LDIF'; $lang['export_to_ldif_tooltip'] = 'Speichere einen LDIF-Abzug diese Objektes';//'Save an LDIF dump of this object'; $lang['export_subtree_to_ldif_tooltip'] = 'Speicher eine LDIF-Abzug ab diesem Objekt und alle seine Untereinträge';//'Save an LDIF dump of this object and all of its children'; @@ -51,28 +67,32 @@ $lang['rename_entry'] = 'Eintrag umbenennen';//'Rename Entry'; $lang['rename'] = 'Umbenennen';//'Rename'; $lang['add'] = 'Hinzufügen';//'Add'; $lang['view'] = 'Ansehen';//'View'; -$lang['add_new_attribute'] = 'Neues Attribut hinzügen';//'Add New Attribute'; +$lang['add_new_attribute'] = 'Neues Attribut hinzufügen';//'Add New Attribute'; $lang['add_new_attribute_tooltip'] = 'Füge ein neues Attribut/Wert zu diesem Eintrag hinzu';// 'Add a new attribute/value to this entry'; $lang['internal_attributes'] = 'Interne Attribute';//'Internal Attributes'; $lang['hide_internal_attrs'] = 'Verdecke interne Attribute';//'Hide internal attributes'; $lang['show_internal_attrs'] = 'Zeige interne Attribute';//'Show internal attributes'; $lang['internal_attrs_tooltip'] = 'Attribute werden automatisch vom System erzeugt.';//'Attributes set automatically by the system'; -$lang['entry_attributes'] = 'Attribute des Eintrages';//'Entry Attributes'; -$lang['click_to_display'] = 'Klicken zum Ansehen';//'click to display'; +$lang['entry_attributes'] = 'Attribute des Eintrages';//'Entry Attributes'; +$lang['attr_name_tooltip'] = 'Klicken sie um die Schemadefinition für den Attributtyp \'%s\' anzuzeigen.';//'Click to view the schema defintion for attribute type \'%s\''; +$lang['click_to_display'] = 'Klicken zum Ansehen';//'click to display'; $lang['hidden'] = 'verdeckt';//'hidden'; -$lang['none'] = 'Keine';//'none'; +$lang['none'] = 'Keine';//'none'; $lang['save_changes'] = 'Änderungen speichern';//'Save Changes'; $lang['add_value'] = 'Wert hinzufügen';//'add value'; -$lang['add_value_tooltip'] = 'Füg einen weiteren Wert zu dem Attribut hinzu';//'Add an additional value to this attribute'; -//$lang['refresh'] = 'Refresh'; +$lang['add_value_tooltip'] = 'Füge einen weiteren Wert dem Attribut hinzu';//'Add an additional value to this attribute'; +$lang['refresh_entry'] = 'Auffrischen';// 'Refresh'; $lang['refresh_this_entry'] = 'Aktualisiere den Entrag';//'Refresh this entry'; -$lang['delete_hint'] = 'Hinweis: Um ein Attribute zu löschen, leeren Sie den Inhalt des Wertes.';//'Hint: To delete an attribute, empty the text field and click save.'; +$lang['delete_hint'] = 'Hinweis: Um ein Attribut zu löschen, leeren Sie den Inhalt des Wertes.';//'Hint: To delete an attribute, empty the text field and click save.'; +$lang['attr_schema_hint'] = 'Tipp:Um das Schema für ein Attribut anzusehen, genügt ein klick auf den Attributnamen';//'Hint: To view the schema for an attribute, click the attribute name.'; +$lang['attrs_modified'] = 'Einige Attribute (%s) wurden verändert und sind hervorgehoben.';//'Some attributes (%s) were modified and are highlighted below.'; +$lang['attr_modified'] = 'Ein Attribut (%s) wurde verändert und ist hervorgehoben.';//'An attribute (%s) was modified and is highlighted below.'; $lang['viewing_read_only'] = 'Zeige Eintrag im Nurlesemodus';//'Viewing entry in read-only mode.'; $lang['change_entry_rdn'] = 'Ändere den RDN des Eintrages';//'Change this entry\'s RDN'; $lang['no_new_attrs_available'] = 'Keine weiteren Attribute verfügbar für diesen Eintrag';//'no new attributes available for this entry'; $lang['binary_value'] = 'Binärwert';//'Binary value'; $lang['add_new_binary_attr'] = 'Neuen Binärwert hinzufügen';//'Add New Binary Attribute'; -$lang['add_new_binary_attr_tooltip'] = 'ABCDEFGH';//'Add a new binary attribute/value from a file'; +$lang['add_new_binary_attr_tooltip'] = 'Füge einen neuen Binäwert (Attribut/Wert) aus einer Datei hinzu.';//'Add a new binary attribute/value from a file'; $lang['alias_for'] = 'Alias für';//'Alias for'; $lang['download_value'] = 'Wert herunterladen';//'download value'; $lang['delete_attribute'] = 'Lösche Attribut';//'delete attribute'; @@ -82,7 +102,7 @@ $lang['none_remove_value'] = 'nichts, entferne den Wert';//?? //'none, remove va $lang['really_delete_attribute'] = 'Lösche das Attribut wirklich';//'Really delete attribute'; // Schema browser -$lang['the_following_objectclasses'] = 'Die folgenden objectClass werden vom LDAP-Server unterstützt.';//'The following objectClasses are supported by this LDAP server.'; +$lang['the_following_objectclasses'] = 'Die folgenden Objektklassen werden vom LDAP-Server unterstützt.';//'The following objectClasses are supported by this LDAP server.'; $lang['the_following_attributes'] = 'Die folgenden Attribute werden vom LDAP-Server unterstützt.';//'The following attributeTypes are supported by this LDAP server.'; $lang['the_following_matching'] = 'Die folgenden Suchregeln werden vom LDAP-Server unterstützt.';//'The following matching rules are supported by this LDAP server.'; $lang['the_following_syntaxes'] = 'Die folgenden Syntaxe werden vom LDAP-Server unterstützt.';//'The following syntaxes are supported by this LDAP server.'; @@ -93,11 +113,214 @@ $lang['required_attrs'] = 'Notwendige Attribute';//'Required Attributes'; $lang['optional_attrs'] = 'Optionale Attribute';//'Optional Attributes'; $lang['OID'] = 'OID';//'OID'; $lang['desc'] = 'Beschreibung';//'Description'; +$lang['name'] = 'Name';//'Name'; $lang['is_obsolete'] = 'Diese objectClass ist veraltet';//'This objectClass is obsolete'; $lang['inherits'] = 'Abgeleitet von';//'Inherits'; $lang['jump_to_this_oclass'] = 'Gehe zur objectClass Definition';//'Jump to this objectClass definition'; +$lang['matching_rule_oid'] = 'Treffer-Regel OID';//'Matching Rule OID'; +$lang['syntax_oid'] = 'Syntax OID';//'Syntax OID'; +$lang['not_applicable'] = 'keine Angabe';//'not applicable'; +$lang['not_specified'] = 'nicht spezifiziert';//not specified'; + +// Deleting entries +$lang['entry_deleted_successfully'] = 'Der Eintrag \'%s\' wurde erfolgreich gelöscht.';//'Entry \'%s\' deleted successfully.'; +$lang['you_must_specify_a_dn'] = 'Ein DN muss angegeben werden.';//'You must specify a DN'; +$lang['could_not_delete_entry'] = 'Konnte den Eintrag nicht löschen: %s';//'Could not delete the entry: %s'; + + +// Adding objectClass form +$lang['new_required_attrs'] = 'Neue benötigte Attribute';//'New Required Attributes'; +$lang['requires_to_add'] = 'Diese Aktion zwingt sie folgendes hinzuzufügen';//'This action requires you to add'; +$lang['new_attributes'] = 'neue Attribute';//'new attributes'; +$lang['new_required_attrs_instructions'] = 'Anleitung: Um diese objectClass hinzuzuf¨gen müssen sie ';//'Instructions: In order to add this objectClass to this entry, you must specify'; +$lang['that_this_oclass_requires'] = 'die von dieser objectClass benötigt werden. Sie können dies in diesem Formular machen.';//'that this objectClass requires. You can do so in this form.'; +$lang['add_oclass_and_attrs'] = 'ObjectClass und Attribute hinzufügen';//'Add ObjectClass and Attributes'; // General -$lang['chooser_link_tooltip'] = "Click to popup a dialog to select an entry (DN) graphically"; +$lang['chooser_link_tooltip'] = 'Klicken um einen Eintrag (DN) grafisch auszuwählen.';//"Click to popup a dialog to select an entry (DN) graphically'; +$lang['no_updates_in_read_only_mode'] = 'Sie können keine Aktualisierungen durchführen während der Server sich im \'nur lese\'-modus befindet';//'You cannot perform updates while server is in read-only mode'; +$lang['bad_server_id'] = 'Ungültige Server ID';//'Bad server id'; +$lang['not_enough_login_info'] = 'Nicht genügend Angaben zur Anmeldung am Server. Bitte überprüfen sie ihre Konfiguration';//'Not enough information to login to server. Please check your configuration.'; +$lang['could_not_connect'] = 'Konnte keine Verbindung zum LDAP Server herstellen.';//'Could not connect to LDAP server.'; +$lang['could_not_perform_ldap_mod_add'] = 'Kann keine \'ldap_mod_add\' Operationen durchführen.';//'Could not perform ldap_mod_add operation.'; +$lang['bad_server_id_underline'] = 'Ungültige Server ID:';//"Bad server_id: '; +$lang['success'] = 'Erfolgreich';//"Success'; +$lang['server_colon_pare'] = 'Server';//"Server: '; +$lang['look_in'] = 'Sehe nach in:';//"Looking in: '; +$lang['missing_server_id_in_query_string'] = 'Keine Server ID in der Anfrage angegeben';//'No server ID specified in query string!'; +$lang['missing_dn_in_query_string'] = 'Kein DN in der Anfrage angegeben';//'No DN specified in query string!'; +$lang['back_up_p'] = 'Backup...';//"Back Up...'; +$lang['no_entries'] = 'Keine Einträge';//"no entries'; +$lang['not_logged_in'] = 'Nicht eingeloggt';//"Not logged in'; +$lang['could_not_det_base_dn'] = 'Konnten Basis-DN nicht ermitteln.';//"Could not determine base DN'; + + +// Add value form +$lang['add_new'] = 'Neu hinzufügen';//'Add new'; +$lang['value_to'] = 'Wert auf';//'value to'; +$lang['server'] = 'Server';//'Server'; +//also used in copy_form.php +$lang['distinguished_name'] = 'Distinguished Name (eindeutiger Name)';// 'Distinguished Name'; +$lang['current_list_of'] = 'Aktuelle Liste von';//'Current list of'; +$lang['values_for_attribute'] = 'Werte des Attributes';//'values for attribute'; +$lang['inappropriate_matching_note'] = 'Info: Sie werden einen "inappropriate matching" Fehler erhalten, falls sie nicht
    '; //'Note: You will get an "inappropriate matching" error if you have not
    ' . + 'eine EQUALITY Regel für dieses Attribut auf ihren LDAP Server eingerichtet haben.';//'setup an EQUALITY rule on your LDAP server for this attribute.'; +$lang['enter_value_to_add'] = 'Geben sie den Wert ein den sie hinzufügen möchten:';//'Enter the value you would like to add:'; +$lang['new_required_attrs_note'] = 'Info: Sie werden gegebenenfalles gezwungen sein neue Attribute hinzuzufügen.';//'Note: you may be required to enter new attributes
    that this objectClass requires.'; +$lang['syntax'] = 'Syntax';//'Syntax'; + +//Copy.php +$lang['copy_server_read_only'] = 'Sie können keine Aktualisierungen durchführen während der Server sich im \'nur lese\'-modus befindet';//"You cannot perform updates while server is in read-only mode'; +$lang['copy_dest_dn_blank'] = 'Sie haben kein Ziel DN angegeben';//"You left the destination DN blank.'; +$lang['copy_dest_already_exists'] = 'Der Zieleintrag (%s) existiert bereits.';//"The destination entry (%s) already exists.'; +$lang['copy_dest_container_does_not_exist'] = 'Der Zielcontainer (%s) existiert nicht.';//'The destination container (%s) does not exist.'; +$lang['copy_source_dest_dn_same'] = 'Ursprung DN und Ziel DN sind identisch';//"The source and destination DN are the same.'; +$lang['copy_copying'] = 'Kopieren';//"Copying '; +$lang['copy_recursive_copy_progress'] = 'Rekursives Kopieren im Gange';//"Recursive copy progress'; +$lang['copy_building_snapshot'] = 'Erzeuge Speicherauszug des zu kopierenden Verzeichnisses';//"Building snapshot of tree to copy... '; +$lang['copy_successful_like_to'] = 'Kopieren erfolgreich! Wollen sie den';//"Copy successful! Would you like to '; +$lang['copy_view_new_entry'] = 'neuen Eintrag ansehen';//"view the new entry'; +$lang['copy_failed'] = 'Kopieren des DN fehlgeschlagen: ';//'Failed to copy DN: '; + + +//edit.php +$lang['missing_template_file'] = 'Warnung: Template Datei nicht gefunden';//'Warning: missing template file, '; +$lang['using_default'] = 'Standardeinstellung verwenden';//'Using default.'; + +//copy_form.php +$lang['copyf_title_copy'] = 'Kopiere';//"Copy '; +$lang['copyf_to_new_object'] = 'in ein neues Objekt';//"to a new object'; +$lang['copyf_dest_dn'] = 'Ziel DN';//"Destination DN'; +$lang['copyf_dest_dn_tooltip'] = 'Der komplette DN des Eintrages der beim Kopieren erzeugt wird.';//'The full DN of the new entry to be created when copying the source entry'; +$lang['copyf_dest_server'] = 'Zielserver';//"Destination Server'; +$lang['copyf_note'] = 'Info: Kopieren zwischen unterschiedlichen Servern funktioniert nur wenn keine Unvereinbarkeiten im Schema auftreten';//"Note: Copying between different servers only works if there are no schema violations'; +$lang['copyf_recursive_copy'] = 'Rekursiv kopiert auch alle Unterobjekte';//"Recursively copy all children of this object as well.'; + +//create.php +$lang['create_required_attribute'] = 'Fehler, sie haben einen Wert für ein benötigtes Attribut frei gelassen.';//"Error, you left the value blank for required attribute '; +$lang['create_redirecting'] = 'Weiterleitung';//"Redirecting'; +$lang['create_here'] = 'hier';//"here'; +$lang['create_could_not_add'] = 'Konnte das Objekt dem LDAP-Server nicht hinzufügen.';//"Could not add the object to the LDAP server.'; + +//create_form.php +$lang['createf_create_object'] = 'Erzeuge einen neuen Eintag';//"Create Object'; +$lang['createf_choose_temp'] = 'Vorlage wählen';//"Choose a template'; +$lang['createf_select_temp'] = 'Wählen sie eine Vorlage für das Objekt';//"Select a template for the creation process'; +$lang['createf_proceed'] = 'Weiter';//"Proceed >>'; + +//creation_template.php +$lang['ctemplate_on_server'] = 'Auf dem Server';//"On server'; +$lang['ctemplate_no_template'] = 'Keine Vorlage angegeben in den POST Variabeln';//"No template specified in POST variables.'; +$lang['ctemplate_config_handler'] = 'Ihre Konfiguration spezifiziert für diese Vorlage die Routine';//"Your config specifies a handler of'; +$lang['ctemplate_handler_does_not_exist'] = '. Diese Routine existiert nicht im \'templates/creation\' Verzeichnis';//"for this template. But, this handler does not exist in the 'templates/creation' directory.'; + +// search.php +$lang['you_have_not_logged_into_server'] = 'Sie haben sich am ausgewählten Server nicht angemeldet. Sie k&oouml;nnen keine Suche durchführen.';//'You have not logged into the selected server yet, so you cannot perform searches on it.'; +$lang['click_to_go_to_login_form'] = 'Klicken sie hier um zur Anmeldeseite zu gelangen';//'Click here to go to the login form'; +$lang['unrecognized_criteria_option'] = 'Unbekannte Option';// 'Unrecognized criteria option: '; +$lang['if_you_want_to_add_criteria'] = 'Falls eigene Auswahlkriterien hinzugefügt werden sollen, muss \'search.php\' editiert werden';//'If you want to add your own criteria to the list. Be sure to edit search.php to handle them. Quitting.'; +$lang['entries_found'] = 'Gefundene Einträge: ';//'Entries found: '; +$lang['filter_performed'] = 'Angewanter Filter: ';//'Filter performed: '; +$lang['search_duration'] = 'Suche durch phpLDAPadmin ausgeführt in';//'Search performed by phpLDAPadmin in'; +$lang['seconds'] = 'Sekunden';//'seconds'; + +// search_form_advanced.php +$lang['scope_in_which_to_search'] = 'Bereich der durchsucht wird.';//'The scope in which to search'; +$lang['scope_sub'] = 'Sub (Suchbase und alle Unterverzeichnisebenen)';//'Sub (entire subtree)'; +$lang['scope_one'] = 'One (Suchbasis und eine Unterverzeichnisebene)';//'One (one level beneath base)'; +$lang['scope_base'] = 'Base (Nur Suchbasis)';//'Base (base dn only)'; +$lang['standard_ldap_search_filter'] = 'Standard LDAP Suchfilter. Bsp.: (&(sn=Smith)(givenname=David))';//'Standard LDAP search filter. Example: (&(sn=Smith)(givenname=David))'; +$lang['search_filter'] = 'Suchfilter';//'Search Filter'; +$lang['list_of_attrs_to_display_in_results'] = 'Kommaseparierte Liste der anzuzeigenden Attribute.';//'A list of attributes to display in the results (comma-separated)'; +$lang['show_attributes'] = 'Zeige Attribute';//'Show Attributes'; + +// search_form_simple.php +$lang['search_for_entries_whose'] = 'Suche nach Einträgen welche:';//'Search for entries whose:'; +$lang['equals'] = 'entspricht';//'equals'; +$lang['starts with'] = 'beginnt mit';//'starts with'; +$lang['contains'] = 'enthält';//'contains'; +$lang['ends with'] = 'endet auf';//'ends with'; +$lang['sounds like'] = 'klingt wie';//'sounds like'; + +// server_info.php +$lang['could_not_fetch_server_info'] = 'Konnte keine LDAP Informationen vom Server empfangen';//'Could not retrieve LDAP information from the server'; +$lang['server_info_for'] = 'Serverinformationen für: ';//'Server info for: '; +$lang['server_reports_following'] = 'Der Server meldete die folgenden Informationen über sich';//'Server reports the following information about itself'; +$lang['nothing_to_report'] = 'Der Server hat keine Informationen gemeldet';//'This server has nothing to report.'; + +//update.php +$lang['update_array_malformed'] = 'Das \'update_array\' wird falsch dargestellt. Dies könnte ein phpLDAPadmin Fehler sein. Bitte Berichten sie uns davon.';//'update_array is malformed. This might be a phpLDAPadmin bug. Please report it.'; +$lang['could_not_perform_ldap_modify'] = 'Konnte die \'ldap_modify\' Operation nicht ausführen.';//'Could not perform ldap_modify operation.'; + +// update_confirm.php +$lang['do_you_want_to_make_these_changes'] = 'Wollen sie diese Änderungen übernehmen?';//'Do you want to make these changes?'; +$lang['attribute'] = 'Attribute';//'Attribute'; +$lang['old_value'] = 'Alter Wert';//'Old Value'; +$lang['new_value'] = 'Neuer Wert';//'New Value'; +$lang['attr_deleted'] = '[Wert gelöscht]';//'[attribute deleted]'; +$lang['commit'] = 'Anwenden';//'Commit'; +$lang['cancel'] = 'Verwerfen';//'Cancel'; +$lang['you_made_no_changes'] = 'Sie haben keine Änderungen vorgenommen.';//'You made no changes'; +$lang['go_back'] = 'Zurück';//'Go back'; + +// welcome.php +$lang['welcome_note'] = 'Benützen sie das Menu auf der linken Seite zur Navigation.';//'Use the menu to the left to navigate'; + +// view_jpeg_photo.php +$lang['unsafe_file_name'] = 'Unsicherer Dateiname:';//'Unsafe file name: '; +$lang['no_such_file'] = 'Keine Datei unter diesem Namen';//'No such file: '; + +//function.php +$lang['auto_update_not_setup'] = 'auto_uid_numbers wurde in der Konfiguration (%s aktiviert, aber der Mechanismus (auto_uid_number_mechanism) nicht. Bitte diese Problem korrigieren.';//"You have enabled auto_uid_numbers for %s in your configuration, but you have not specified the auto_uid_number_mechanism. Please correct this problem.'; +$lang['uidpool_not_set'] = 'Der Mechanismus auto_uid_number_mechanism ist als uidpool für den Server %s festgelegt, jedoch wurde nicht der auto_uid_number_uid_pool_dn festgelegt. Bitte korrigieren und dann weiter verfahren.';//"You specified the auto_uid_number_mechanism as uidpool in your configuration for server %s, but you did not specify the audo_uid_number_uid_pool_dn. Please specify it before proceeding.'; + +$lang['uidpool_not_exist'] = 'Es scheint so, dass der uidPool - der in der Konfiguration festgelegt ist - nicht vorhanden ist.';//"It appears that the uidPool you specified in your configuration (%s) does not exist.'; + +$lang['specified_uidpool'] = 'Der auto_uid_number_mechanism wurde auf search in der Konfiguration des Servers %s festgelegt, aber es wurde der Wert fü auto_uid_number_search_base nicht gesetzt. Bitte korrigieren und dann weiter verfahren.';//"You specified the auto_uid_number_mechanism as search in your configuration for server %s, but you did not specify the auto_uid_number_search_base. Please specify it before proceeding.'; + +$lang['auto_uid_invalid_value'] = 'Es wurde ein ungültiger Wert für auto_uid_number_mechanism(%s) festgelegt. Gültig sind nur die Werte uidpool und search. Bitte den Fehler korrigieren. ';//"You specified an invalid value for auto_uid_number_mechanism (%s) in your configration. Only uidpool and search are valid. Please correct this problem.'; + +$lang['error_auth_type_config'] = 'Fehler: Ein Fehler ist in der Konfiguration (config.php) aufgetreten. Die einzigen beiden erlaubten Werte im Konfigurationsteil \'auth_type\' zu einem LDAP-Server ist \'config\' oder \'form\'. Eingetragen ist aber %s, was nicht erlaubt ist.';//"Error: You have an error in your config file. The only two allowed values for 'auth_type' in the $servers section are 'config' and 'form'. You entered '%s', which is not allowed. '; + +$lang['php_install_not_supports_tls'] = 'Die verwendete PHP-Version unterstützt kein TLS (verschlüsselte Verbindung).';//"Your PHP install does not support TLS'; +$lang['could_not_start_tls'] = 'TLS konnte nicht gestartet werden.
    Bitte die LDAP-Server-Konfiguration überprüfen.';//"Could not start TLS.
    Please check your LDAP server configuration.'; +$lang['auth_type_not_valid'] = 'Die Konfigurationsdatei enthält einen Fehler. Der Eintrag für \'auth_type\' %s ist nicht gü,ltig';// 'You have an error in your config file. auth_type of %s is not valid.'; +$lang['ldap_said'] = 'LDAP meldet: %s

    ';//"LDAP said: %s

    '; +$lang['ferror_error'] = 'Fehler';//"Error'; +$lang['fbrowse'] = 'Überfliegen';//"browse'; +$lang['delete_photo'] = 'Lösche Foto';//"Delete Photo'; +$lang['install_not_support_blowfish'] = 'Die verwendete PHP-Version unterstützt keine Blowfish Verschlüsselung.';//"Your PHP install does not support blowfish encryption.'; +$lang['install_no_mash'] = 'Die verwendete PHP-Version unterstützt nicht die Funktion mhash(), daher kann kein SHA Hash verwendet werden.';// "Your PHP install does not have the mhash() function. Cannot do SHA hashes.'; +$lang['jpeg_contains_errors'] = 'Die Bilddatei enthält Fehler';//"jpegPhoto contains errors
    '; +$lang['ferror_number'] = 'Fehlernummer: %s(%s)

    ';//"Error number: %s (%s)

    '; +$lang['ferror_discription'] ='Beschreibung: %s

    ';// "Description: %s

    '; +$lang['ferror_number_short'] = 'Fehlernummer:%s

    ';//"Error number: %s

    '; +$lang['ferror_discription_short'] = 'Beschreibung: (keine Beschreibung verfügbar)
    ';//"Description: (no description available)
    '; +$lang['ferror_submit_bug'] = 'Ist das ein phpLDAPadmin Fehler? Wenn dies so ist, dann bitte darüber berichten';//"Is this a phpLDAPadmin bug? If so, please report it.'; +$lang['ferror_unrecognized_num'] = 'Unbekannte Fehlernummer:';//"Unrecognized error number: '; + +$lang['ferror_nonfatil_bug'] = '
    Ein nicht fataler Fehler in phpLDAPadmin gefunden!
    Fehler:%s (%s)
    Datei:%sZeile:%s, aufgerufen von %s
    Version:PLA: %s, PHP: %s, SAPI: %s
    Web server:%s
    Bitte diesen Fehler melden (durch anklicken)..

    ';//"
    You found a non-fatal phpLDAPadmin bug!
    Error:%s (%s)
    File:%s line %s, caller %s
    Versions:PLA: %s, PHP: %s, SAPI: %s
    Web server:%s
    Please report this bug by clicking here.

    '; + +$lang['ferror_congrats_found_bug'] = '
    Gratulation, einen Fehler in phpLDAPadmin gefunden!
    Fehler:%s (%s)
    Datei:%sZeile:%s, aufgerufen von %s
    Version:PLA: %s, PHP: %s, SAPI: %s
    Web server:%s
    Bitte diesen Fehler melden (durch anklicken)..

    ';//"Congratulations! You found a bug in phpLDAPadmin.

    Error:%s
    Level:%s
    File:%s
    Line:%s
    Caller:%s
    PLA Version:%s
    PHP Version:%s
    PHP SAPI:%s
    Web server:%s

    Please report this bug by clicking below!'; + +//ldif_import_form +$lang['import_ldif_file_title'] = 'Importiere LDIF Datei';//'Import LDIF File'; +$lang['select_ldif_file'] = 'LDIF Datei auswählen';//'Select an LDIF file:'; +$lang['select_ldif_file_proceed'] = 'Ausführen >>';//'Proceed >>'; + +//ldif_import +$lang['add_action'] = 'Hinzufügen...';//'Adding...'; +$lang['delete_action'] = 'Entfernen...';//'Deleting...'; +$lang['rename_action'] = 'Umbenennen...';//'Renaming...'; +$lang['modify_action'] = 'Abändern...';//'Modifying...'; + +$lang['failed'] = 'fehlgeschlagen';//'failed'; +$lang['ldif_parse_error'] = 'LDIF Pars Fehler';//'LDIF Parse Error'; +$lang['ldif_could_not_add_object'] = 'Konnte das Objekt nicht hinzufügen:';//'Could not add object:'; +$lang['ldif_could_not_rename_object'] = 'Konnte das Objekt nicht umbenennen:';//'Could not rename object:'; +$lang['ldif_could_not_delete_object'] = 'Konnte das Objekt nicht entfernen:';//'Could not delete object:'; +$lang['ldif_could_not_modify_object'] = 'Konnte das Objekt nicht abändern:';//'Could not modify object:'; +$lang['ldif_line_number'] = 'Anzahl Zeilen:';//'Line Number:'; +$lang['ldif_line'] = 'Zeile:';//'Line:'; ?> diff --git a/lang/en.php b/lang/en.php index c4ce9d7..cfef32a 100644 --- a/lang/en.php +++ b/lang/en.php @@ -1,13 +1,30 @@ DN'; $lang['search_scope'] = 'Search Scope'; $lang['search_ filter'] = 'Search Filter'; $lang['show_attributes'] = 'Show Attributtes'; @@ -25,10 +42,10 @@ $lang['report_bug'] = 'Report a bug'; $lang['see_open_bugs'] = 'see open bugs'; $lang['schema'] = 'schema'; $lang['search'] = 'search'; -$lang['refresh'] = 'refresh'; $lang['create'] = 'create'; $lang['info'] = 'info'; $lang['import'] = 'import'; +$lang['refresh'] = 'refresh'; $lang['logout'] = 'logout'; $lang['create_new'] = 'Create New'; $lang['view_schema_for'] = 'View schema for'; @@ -39,10 +56,11 @@ $lang['import_from_ldif'] = 'Import entries from an LDIF file'; $lang['logout_of_this_server'] = 'Logout of this server'; $lang['logged_in_as'] = 'Logged in as: '; $lang['read_only'] = 'read only'; -$lang['could_not_determine_root'] = 'Could not determin the root of your LDAP tree.'; -$lang['ldap_refuses_to_give_root'] = 'It appears that the LDAP server has been configured to not reveal its root.'; +$lang['could_not_determine_root'] = 'Could not determine the root of your LDAP tree.'; +$lang['ldap_refuses_to_give_root'] = 'It appears that the LDAP server has been configured to not reveal its root.'; $lang['please_specify_in_config'] = 'Please specify it in config.php'; $lang['create_new_entry_in'] = 'Create a new entry in'; +$lang['login_link'] = 'Login...'; // Entry display $lang['delete_this_entry'] = 'Delete this entry'; @@ -68,23 +86,27 @@ $lang['internal_attributes'] = 'Internal Attributes'; $lang['hide_internal_attrs'] = 'Hide internal attributes'; $lang['show_internal_attrs'] = 'Show internal attributes'; $lang['internal_attrs_tooltip'] = 'Attributes set automatically by the system'; -$lang['entry_attributes'] = 'Entry Attributes'; -$lang['click_to_display'] = 'click to display'; -$lang['hidden'] = 'hidden'; -$lang['none'] = 'none'; +$lang['entry_attributes'] = 'Entry Attributes'; +$lang['attr_name_tooltip'] = 'Click to view the schema defintion for attribute type \'%s\''; +$lang['click_to_display'] = 'click \'+\' to display'; +$lang['hidden'] = 'hidden'; +$lang['none'] = 'none'; $lang['save_changes'] = 'Save Changes'; $lang['add_value'] = 'add value'; -$lang['add_value_tooltip'] = 'Add an additional value to this attribute'; -$lang['refresh'] = 'refresh'; +$lang['add_value_tooltip'] = 'Add an additional value to attribute \'%s\''; +$lang['refresh_entry'] = 'Refresh'; $lang['refresh_this_entry'] = 'Refresh this entry'; $lang['delete_hint'] = 'Hint: To delete an attribute, empty the text field and click save.'; +$lang['attr_schema_hint'] = 'Hint: To view the schema for an attribute, click the attribute name.'; +$lang['attrs_modified'] = 'Some attributes (%s) were modified and are highlighted below.'; +$lang['attr_modified'] = 'An attribute (%s) was modified and is highlighted below.'; $lang['viewing_read_only'] = 'Viewing entry in read-only mode.'; $lang['change_entry_rdn'] = 'Change this entry\'s RDN'; $lang['no_new_attrs_available'] = 'no new attributes available for this entry'; $lang['binary_value'] = 'Binary value'; $lang['add_new_binary_attr'] = 'Add New Binary Attribute'; $lang['add_new_binary_attr_tooltip'] = 'Add a new binary attribute/value from a file'; -$lang['alias_for'] = 'Alias for'; +$lang['alias_for'] = 'Note: \'%s\' is an alias for \'%s\''; $lang['download_value'] = 'download value'; $lang['delete_attribute'] = 'delete attribute'; $lang['true'] = 'true'; @@ -104,11 +126,19 @@ $lang['required_attrs'] = 'Required Attributes'; $lang['optional_attrs'] = 'Optional Attributes'; $lang['OID'] = 'OID'; $lang['desc'] = 'Description'; +$lang['name'] = 'Name'; $lang['is_obsolete'] = 'This objectClass is obsolete'; $lang['inherits'] = 'Inherits'; $lang['jump_to_this_oclass'] = 'Jump to this objectClass definition'; $lang['matching_rule_oid'] = 'Matching Rule OID'; $lang['syntax_oid'] = 'Syntax OID'; +$lang['not_applicable'] = 'not applicable'; +$lang['not_specified'] = 'not specified'; + +// Deleting entries +$lang['entry_deleted_successfully'] = 'Entry \'%s\' deleted successfully.'; +$lang['you_must_specify_a_dn'] = 'You must specify a DN'; +$lang['could_not_delete_entry'] = 'Could not delete the entry: %s'; // Adding objectClass form $lang['new_required_attrs'] = 'New Required Attributes'; @@ -125,18 +155,200 @@ $lang['bad_server_id'] = 'Bad server id'; $lang['not_enough_login_info'] = 'Not enough information to login to server. Please check your configuration.'; $lang['could_not_connect'] = 'Could not connect to LDAP server.'; $lang['could_not_perform_ldap_mod_add'] = 'Could not perform ldap_mod_add operation.'; +$lang['bad_server_id_underline'] = 'Bad server_id: '; +$lang['success'] = 'Success'; +$lang['server_colon_pare'] = 'Server: '; +$lang['look_in'] = 'Looking in: '; +$lang['missing_server_id_in_query_string'] = 'No server ID specified in query string!'; +$lang['missing_dn_in_query_string'] = 'No DN specified in query string!'; +$lang['back_up_p'] = 'Back Up...'; +$lang['no_entries'] = 'no entries'; +$lang['not_logged_in'] = 'Not logged in'; +$lang['could_not_det_base_dn'] = 'Could not determine base DN'; // Add value form $lang['add_new'] = 'Add new'; $lang['value_to'] = 'value to'; -$lang['server'] = 'Server'; $lang['distinguished_name'] = 'Distinguished Name'; $lang['current_list_of'] = 'Current list of'; $lang['values_for_attribute'] = 'values for attribute'; $lang['inappropriate_matching_note'] = 'Note: You will get an "inappropriate matching" error if you have not
    ' . 'setup an EQUALITY rule on your LDAP server for this attribute.'; $lang['enter_value_to_add'] = 'Enter the value you would like to add:'; -$lang['new_required_attrs_note'] = 'Note: you may be required to enter new attributes
    that this objectClass requires.'; +$lang['new_required_attrs_note'] = 'Note: you may be required to enter new attributes that this objectClass requires'; $lang['syntax'] = 'Syntax'; +//copy.php +$lang['copy_server_read_only'] = 'You cannot perform updates while server is in read-only mode'; +$lang['copy_dest_dn_blank'] = 'You left the destination DN blank.'; +$lang['copy_dest_already_exists'] = 'The destination entry (%s) already exists.'; +$lang['copy_dest_container_does_not_exist'] = 'The destination container (%s) does not exist.'; +$lang['copy_source_dest_dn_same'] = 'The source and destination DN are the same.'; +$lang['copy_copying'] = 'Copying '; +$lang['copy_recursive_copy_progress'] = 'Recursive copy progress'; +$lang['copy_building_snapshot'] = 'Building snapshot of tree to copy... '; +$lang['copy_successful_like_to'] = 'Copy successful! Would you like to '; +$lang['copy_view_new_entry'] = 'view the new entry'; +$lang['copy_failed'] = 'Failed to copy DN: '; + +//edit.php +$lang['missing_template_file'] = 'Warning: missing template file, '; +$lang['using_default'] = 'Using default.'; + +//copy_form.php +$lang['copyf_title_copy'] = 'Copy '; +$lang['copyf_to_new_object'] = 'to a new object'; +$lang['copyf_dest_dn'] = 'Destination DN'; +$lang['copyf_dest_dn_tooltip'] = 'The full DN of the new entry to be created when copying the source entry'; +$lang['copyf_dest_server'] = 'Destination Server'; +$lang['copyf_note'] = 'Hint: Copying between different servers only works if there are no schema violations'; +$lang['copyf_recursive_copy'] = 'Recursively copy all children of this object as well.'; + +//create.php +$lang['create_required_attribute'] = 'You left the value blank for required attribute %s.'; +$lang['create_redirecting'] = 'Redirecting'; +$lang['create_here'] = 'here'; +$lang['create_could_not_add'] = 'Could not add the object to the LDAP server.'; + +//create_form.php +$lang['createf_create_object'] = 'Create Object'; +$lang['createf_choose_temp'] = 'Choose a template'; +$lang['createf_select_temp'] = 'Select a template for the creation process'; +$lang['createf_proceed'] = 'Proceed'; + +//creation_template.php +$lang['ctemplate_on_server'] = 'On server'; +$lang['ctemplate_no_template'] = 'No template specified in POST variables.'; +$lang['ctemplate_config_handler'] = 'Your config specifies a handler of'; +$lang['ctemplate_handler_does_not_exist'] = 'for this template. But, this handler does not exist in the templates/creation directory.'; + +// search.php +$lang['you_have_not_logged_into_server'] = 'You have not logged into the selected server yet, so you cannot perform searches on it.'; +$lang['click_to_go_to_login_form'] = 'Click here to go to the login form'; +$lang['unrecognized_criteria_option'] = 'Unrecognized criteria option: '; +$lang['if_you_want_to_add_criteria'] = 'If you want to add your own criteria to the list. Be sure to edit search.php to handle them. Quitting.'; +$lang['entries_found'] = 'Entries found: '; +$lang['filter_performed'] = 'Filter performed: '; +$lang['search_duration'] = 'Search performed by phpLDAPadmin in'; +$lang['seconds'] = 'seconds'; + +// search_form_advanced.php +$lang['scope_in_which_to_search'] = 'The scope in which to search'; +$lang['scope_sub'] = 'Sub (entire subtree)'; +$lang['scope_one'] = 'One (one level beneath base)'; +$lang['scope_base'] = 'Base (base dn only)'; +$lang['standard_ldap_search_filter'] = 'Standard LDAP search filter. Example: (&(sn=Smith)(givenname=David))'; +$lang['search_filter'] = 'Search Filter'; +$lang['list_of_attrs_to_display_in_results'] = 'A list of attributes to display in the results (comma-separated)'; +$lang['show_attributes'] = 'Show Attributes'; + +// search_form_simple.php +$lang['search_for_entries_whose'] = 'Search for entries whose:'; +$lang['equals'] = 'equals'; +$lang['starts with'] = 'starts with'; +$lang['contains'] = 'contains'; +$lang['ends with'] = 'ends with'; +$lang['sounds like'] = 'sounds like'; + +// server_info.php +$lang['could_not_fetch_server_info'] = 'Could not retrieve LDAP information from the server'; +$lang['server_info_for'] = 'Server info for: '; +$lang['server_reports_following'] = 'Server reports the following information about itself'; +$lang['nothing_to_report'] = 'This server has nothing to report.'; + +//update.php +$lang['update_array_malformed'] = 'update_array is malformed. This might be a phpLDAPadmin bug. Please report it.'; +$lang['could_not_perform_ldap_modify'] = 'Could not perform ldap_modify operation.'; + +// update_confirm.php +$lang['do_you_want_to_make_these_changes'] = 'Do you want to make these changes?'; +$lang['attribute'] = 'Attribute'; +$lang['old_value'] = 'Old Value'; +$lang['new_value'] = 'New Value'; +$lang['attr_deleted'] = '[attribute deleted]'; +$lang['commit'] = 'Commit'; +$lang['cancel'] = 'Cancel'; +$lang['you_made_no_changes'] = 'You made no changes'; +$lang['go_back'] = 'Go back'; + +// welcome.php +$lang['welcome_note'] = 'Use the menu to the left to navigate'; + +// view_jpeg_photo.php +$lang['unsafe_file_name'] = 'Unsafe file name: '; +$lang['no_such_file'] = 'No such file: '; + +//function.php +$lang['auto_update_not_setup'] = 'You have enabled auto_uid_numbers for %s in your configuration, + but you have not specified the auto_uid_number_mechanism. Please correct + this problem.'; +$lang['uidpool_not_set'] = 'You specified the auto_uid_number_mechanism as uidpool + in your configuration for server %s, but you did not specify the + audo_uid_number_uid_pool_dn. Please specify it before proceeding.'; +$lang['uidpool_not_exist'] = 'It appears that the uidPool you specified in your configuration (%s) + does not exist.'; +$lang['specified_uidpool'] = 'You specified the auto_uid_number_mechanism as search in your + configuration for server %s, but you did not specify the + auto_uid_number_search_base. Please specify it before proceeding.'; +$lang['auto_uid_invalid_value'] = 'You specified an invalid value for auto_uid_number_mechanism (%s) + in your configration. Only uidpool and search are valid. + Please correct this problem.'; +$lang['error_auth_type_config'] = 'Error: You have an error in your config file. The only two allowed values + for auth_type in the $servers section are \'config\' and \'form\'. You entered \'%s\', + which is not allowed. '; +$lang['php_install_not_supports_tls'] = 'Your PHP install does not support TLS'; +$lang['could_not_start_tls'] = 'Could not start TLS.
    Please check your LDAP server configuration.'; +$lang['auth_type_not_valid'] = 'You have an error in your config file. auth_type of %s is not valid.'; +$lang['ldap_said'] = 'LDAP said: %s

    '; +$lang['ferror_error'] = 'Error'; +$lang['fbrowse'] = 'browse'; +$lang['delete_photo'] = 'Delete Photo'; +$lang['install_not_support_blowfish'] = 'Your PHP install does not support blowfish encryption.'; +$lang['install_no_mash'] = 'Your PHP install does not have the mhash() function. Cannot do SHA hashes.'; +$lang['jpeg_contains_errors'] = 'jpegPhoto contains errors
    '; +$lang['ferror_number'] = 'Error number: %s (%s)

    '; +$lang['ferror_discription'] = 'Description: %s

    '; +$lang['ferror_number_short'] = 'Error number: %s

    '; +$lang['ferror_discription_short'] = 'Description: (no description available)
    '; +$lang['ferror_submit_bug'] = 'Is this a phpLDAPadmin bug? If so, please report it.'; +$lang['ferror_unrecognized_num'] = 'Unrecognized error number: '; +$lang['ferror_nonfatil_bug'] = '
    +
    + You found a non-fatal phpLDAPadmin bug!
    Error:%s (%s)
    File:%s line %s, caller %s
    Versions:PLA: %s, PHP: %s, SAPI: %s +
    Web server:%s
    + Please report this bug by clicking here.

    '; +$lang['ferror_congrats_found_bug'] = 'Congratulations! You found a bug in phpLDAPadmin.

    + + + + + + + + + + +
    Error:%s
    Level:%s
    File:%s
    Line:%s
    Caller:%s
    PLA Version:%s
    PHP Version:%s
    PHP SAPI:%s
    Web server:%s
    +
    + Please report this bug by clicking below!'; + +//ldif_import_form +$lang['import_ldif_file_title'] = 'Import LDIF File'; +$lang['select_ldif_file'] = 'Select an LDIF file:'; +$lang['select_ldif_file_proceed'] = 'Proceed >>'; + +//ldif_import +$lang['add_action'] = 'Adding...'; +$lang['delete_action'] = 'Deleting...'; +$lang['rename_action'] = 'Renaming...'; +$lang['modify_action'] = 'Modifying...'; + +$lang['failed'] = 'failed'; +$lang['ldif_parse_error'] = 'LDIF Parse Error'; +$lang['ldif_could_not_add_object'] = 'Could not add object:'; +$lang['ldif_could_not_rename_object'] = 'Could not rename object:'; +$lang['ldif_could_not_delete_object'] = 'Could not delete object:'; +$lang['ldif_could_not_modify_object'] = 'Could not modify object:'; +$lang['ldif_line_number'] = 'Line Number:'; +$lang['ldif_line'] = 'Line:'; ?> diff --git a/lang/es.php b/lang/es.php new file mode 100644 index 0000000..be76f64 --- /dev/null +++ b/lang/es.php @@ -0,0 +1,335 @@ +Para borrar un atributo, vacía el formulario de texto y haz click en Guardar.'; +$lang['attr_schema_hint'] = 'Pista: Para ver el esquema de un atributo, haz click en el nombre del atributo.'; +$lang['attrs_modified'] = 'Algunos atributos (%s) fueron modificados y estan remarcados más abajo.'; +$lang['attr_modified'] = 'Un atributo (%s) fué modificado y está remarcado más abajo.'; +$lang['viewing_read_only'] = 'Mostrando el objeto en modo de no alterar.'; +$lang['change_entry_rdn'] = 'Modificar el RDN de este objeto'; +$lang['no_new_attrs_available'] = 'No hay atributos nuevos disponibles para este objeto'; +$lang['binary_value'] = 'Valor binario'; +$lang['add_new_binary_attr'] = 'Agregar valor binario'; +$lang['add_new_binary_attr_tooltip'] = 'Agregar atributo/valor binario de un archivo'; +$lang['alias_for'] = 'Sinónimo para'; +$lang['download_value'] = 'Descargar valor'; +$lang['delete_attribute'] = 'Borrar atributo'; +$lang['true'] = 'verdad'; +$lang['false'] = 'falso'; +$lang['none_remove_value'] = 'ningo, borrar valor'; +$lang['really_delete_attribute'] = 'Borrar realmente el atributo?'; + +// Schema browser +$lang['the_following_objectclasses'] = 'Los siguientes ObjectClass están presentes en este servidor LDAP.'; +$lang['the_following_attributes'] = 'Los siguientes attributeTypes están presentes en este servidor LDAP.'; +$lang['the_following_matching'] = 'Los siguientes matching rules están presentes en este servidor LDAP.'; +$lang['the_following_syntaxes'] = 'Los siguientes sintaxis están presentes en este servidor LDAP.'; +$lang['jump_to_objectclass'] = 'Saltar a una ObjectClass'; +$lang['jump_to_attr'] = 'Saltar a un atributo'; +$lang['schema_for_server'] = 'Esquema del servidor '; +$lang['required_attrs'] = 'Atributos Requeridos (MUST)'; +$lang['optional_attrs'] = 'Atributos Opcionales (MAY)'; +$lang['OID'] = 'OID'; +$lang['desc'] = 'Descripción'; +$lang['name'] = 'Nom'; +$lang['is_obsolete'] = 'Esta ObjectClass es obsoleta'; +$lang['inherits'] = 'Hereda'; +$lang['jump_to_this_oclass'] = 'Saltar a esta ObjectClass'; +$lang['matching_rule_oid'] = 'OID de Matching Rule'; +$lang['syntax_oid'] = 'OID de Sintaxi'; +$lang['not_applicable'] = 'no es aplicable'; +$lang['not_specified'] = 'no especificada'; + +// Deleting entries +$lang['entry_deleted_successfully'] = 'Entrada \'%s\' borrada correctamente.'; +$lang['you_must_specify_a_dn'] = 'Tienes que especificar un DN'; +$lang['could_not_delete_entry'] = 'No he podido borrar la entrada: %s'; + +// Adding objectClass form +$lang['new_required_attrs'] = 'Nuevos atributos requeridos'; +$lang['requires_to_add'] = 'Esta acción exige que se agreguen'; +$lang['new_attributes'] = 'nuevos atributos'; +$lang['new_required_attrs_instructions'] = 'Instrucciones: Para agregar esta ObjectClass a este objeto, se tiene que especificar'; +$lang['that_this_oclass_requires'] = 'que este ObjectClass requiere. Se puede hacer con este formulario.'; +$lang['add_oclass_and_attrs'] = 'Agregar ObjectClass y Atributos'; + +// General +$lang['chooser_link_tooltip'] = 'Haz click para seleccionar un objeto graficamente'; +$lang['no_updates_in_read_only_mode'] = 'No se puede modificar el objeto si el servidor está operando en modo inalterable.'; +$lang['bad_server_id'] = 'El identificador de servidor está mal'; +$lang['not_enough_login_info'] = 'No tengo suficiente información para conectar al servidor. Por favor configura correctamente el archivo config.php'; +$lang['could_not_connect'] = 'No se ha podido conectar al servidor LDAP'; +$lang['could_not_perform_ldap_mod_add'] = 'No se ha podido ejecutar la operación del ldap_mod_add.'; +$lang['bad_server_id_underline'] = 'El identificador del servidor está mal: '; +$lang['success'] = 'Exito'; +$lang['server_colon_pare'] = 'Servidor: '; +$lang['look_in'] = 'Buscando a: '; +$lang['missing_server_id_in_query_string'] = 'No está presente el identificador del servidor en la URL'; +$lang['missing_dn_in_query_string'] = 'No está presente el DN en la URL'; +$lang['back_up_p'] = 'Volver a...'; +$lang['no_entries'] = 'no hay entradas'; +$lang['not_logged_in'] = 'No estás autenticado'; +$lang['could_not_det_base_dn'] = 'No he podido determinar la base DN'; + +// Add value form +$lang['add_new'] = 'Agregar'; +$lang['value_to'] = 'valor a'; +$lang['server'] = 'Servidor'; +$lang['distinguished_name'] = 'Nombre distinguido'; +$lang['current_list_of'] = 'La lista actual de'; +$lang['values_for_attribute'] = 'valores para el atributo'; +$lang['inappropriate_matching_note'] = 'Nota: Sino has configurado una regla \'EQUALITY\' en el servidor LDAP, recibirás un error \'inappropriate matching\''; +$lang['enter_value_to_add'] = 'Proveer el valor para agregar: '; +$lang['new_required_attrs_note'] = 'Nota: Es posible que se requiera agregar nuevos atributos para satisfacer los requisitos de esta ObjectClass'; +$lang['syntax'] = 'Sintaxi'; + +//copy.php +$lang['copy_server_read_only'] = 'No se pueden realizar las modificaciones si el servidor está operando en modo inalterable'; +$lang['copy_dest_dn_blank'] = 'No se ha rellenado el formulario de DN.'; +$lang['copy_dest_already_exists'] = 'La entrada de destino (%s) encara existe.'; +$lang['copy_dest_container_does_not_exist'] = 'El contenedor de destino (%s) no existe.'; +$lang['copy_source_dest_dn_same'] = 'El DN de la fuente y el DN de destino son los mismos.'; +$lang['copy_copying'] = 'Copiando '; +$lang['copy_recursive_copy_progress'] = 'El progreso de la copia recurrente'; +$lang['copy_building_snapshot'] = 'Construyendo la \'foto\' del arbol para copiar... '; +$lang['copy_successful_like_to'] = 'Exito! Deseas '; +$lang['copy_view_new_entry'] = 'Ver el nuevo objeto?'; +$lang['copy_failed'] = 'Error al copiar DN: '; + +//edit.php +$lang['missing_template_file'] = 'Error: falta la plantilla, '; +$lang['using_default'] = 'Usando el archivo por defecto.'; + +//copy_form.php +$lang['copyf_title_copy'] = 'Copiar '; +$lang['copyf_to_new_object'] = 'a un objeto nuevo'; +$lang['copyf_dest_dn'] = 'DN de destino'; +$lang['copyf_dest_dn_tooltip'] = 'El DN entero de la nueva entrada a ser creada quan se copie la entrada fuente'; +$lang['copyf_dest_server'] = 'Servidor de destino'; +$lang['copyf_note'] = 'Nota: Copiar entre dos servidores funciona solamente si no hay violaciones del esquema.'; +$lang['copyf_recursive_copy'] = 'Borrar todos los hijos recurentemente también?'; + +//create.php +$lang['create_required_attribute'] = 'Te has dejado el valor en blanco del atributo requerido %s.'; +$lang['create_redirecting'] = 'Redirigiendo'; +$lang['create_here'] = 'aquí'; +$lang['create_could_not_add'] = 'No he podido agregar el objeto al servidor LDAP.'; + +//create_form.php +$lang['createf_create_object'] = 'Crear Objeto'; +$lang['createf_choose_temp'] = 'Escoge una plantilla'; +$lang['createf_select_temp'] = 'Selecciona una plantilla para al proceso de creación'; +$lang['createf_proceed'] = 'Proceder'; + +//creation_template.php +$lang['ctemplate_on_server'] = 'Al servidor'; +$lang['ctemplate_no_template'] = 'No se ha especificado ninguna plantilla en las variables del POST.'; +$lang['ctemplate_config_handler'] = 'Tu configuración especifica un manejador de'; +$lang['ctemplate_handler_does_not_exist'] = 'para esta plantilla. Pero este manejador no existe en el directorio \'plantilla/creación\'.'; + +// search.php +$lang['you_have_not_logged_into_server'] = 'Aún no te has autenticado en ell servidor seleccionado, no puedes hacer ninguna búsqueda.'; +$lang['click_to_go_to_login_form'] = 'Hac click aquí para ir al formulario de autenticación'; +$lang['unrecognized_criteria_option'] = 'Opcion de criterio desconocida: '; +$lang['if_you_want_to_add_criteria'] = 'Si quieres agregar tu propio criterio en la lista. Estate seguro de editar search.php para manejarlo. Saliendo.'; +$lang['entries_found'] = 'Entrades encontradas: '; +$lang['filter_performed'] = 'Filtro realitzado: '; +$lang['search_duration'] = 'Búsqueda realitzada para phpLDAPadmin a'; +$lang['seconds'] = 'segundos'; + +// search_form_advanced.php +$lang['scope_in_which_to_search'] = 'El alcance en el que buscar'; +$lang['scope_sub'] = 'Sub (todo el sub-arbol)'; +$lang['scope_one'] = 'Uno (un nivel por debajo de la base)'; +$lang['scope_base'] = 'Base (solo base dn)'; +$lang['standard_ldap_search_filter'] = 'Filtro de búsqueda estándar de LDAP. Ejemplo: (&(sn=Smith)(givenname=David))'; +$lang['search_filter'] = 'Filtro de búsqueda'; +$lang['list_of_attrs_to_display_in_results'] = 'Una lista de atributos para mostrar los resultados (separados por comas)'; +$lang['show_attributes'] = 'Mostrar atributos'; + +// search_form_simple.php +$lang['search_for_entries_whose'] = 'Buscar entradas las cuales:'; +$lang['equals'] = 'sea igual'; +$lang['starts with'] = 'comience con'; +$lang['contains'] = 'contenga'; +$lang['ends with'] = 'termine con'; +$lang['sounds like'] = 'suene como'; + +// server_info.php +$lang['could_not_fetch_server_info'] = 'No se ha podido sacar información LDAP del servidor'; +$lang['server_info_for'] = 'Información del servidor para: '; +$lang['server_reports_following'] = 'El servidor muestra la siguiente información sobre el mismo'; +$lang['nothing_to_report'] = 'Este servidor no tiene nada a mostrar.'; + +//update.php +$lang['update_array_malformed'] = 'el update_array está mal formado. Esto podría ser un error del phpLDAPadmin. Por favor reportalo.'; +$lang['could_not_perform_ldap_modify'] = 'No he podido ejecutar la operación ldap_modify.'; + +// update_confirm.php +$lang['do_you_want_to_make_these_changes'] = 'Quieres hacer estos canvios?'; +$lang['attribute'] = 'Atributo'; +$lang['old_value'] = 'Valor viejo'; +$lang['new_value'] = 'Valor nuevo'; +$lang['attr_deleted'] = '[atributo borrado]'; +$lang['commit'] = 'Cometer'; +$lang['cancel'] = 'Cancelar'; +$lang['you_made_no_changes'] = 'No has hecho ningún canvio'; +$lang['go_back'] = 'Volver atrás'; + +// welcome.php +$lang['welcome_note'] = 'Usa el menú de la izquierda para navegar'; + +// view_jpeg_photo.php +$lang['unsafe_file_name'] = 'Nombre de archivo inseguro: '; +$lang['no_such_file'] = 'Archivo inexistente: '; + +//function.php +$lang['auto_update_not_setup'] = 'Has activado los auto_uid_numbers para %s en tu configuración, + pero no has especificado el auto_uid_number_mechanism. Por favor soluciona + este problema.'; +$lang['uidpool_not_set'] = 'Has especificado el auto_uid_number_mechanism como uidpool + en tu configuración para el servidor %s, pero no has especificado el + audo_uid_number_uid_pool_dn. Por favor especificalo antes de proceder.'; +$lang['uidpool_not_exist'] = 'Parece ser que el uidPool que has especificado en tu configuración (%s) + no existe.'; +$lang['specified_uidpool'] = 'Has especificado el auto_uid_number_mechanism como search en tu + configuración para el servidor %s, pero no has especificado el + auto_uid_number_search_base. Por favor especificalo antes de proceder.'; +$lang['auto_uid_invalid_value'] = 'Has especificado un valor no válido para el auto_uid_number_mechanism (%s) + en tu configuración. Solo uidpool y search son válidos. + Por favor soluciona este problema.'; +$lang['error_auth_type_config'] = 'Error: Tienes un error en tu archivo de configuración. Los dos únicos valores aceptados para + \'auth_type\' en la sección $servers son \'config\' y \'form\'. Tu has puesto \'%s\', + el cual no está aceptado. '; +$lang['php_install_not_supports_tls'] = 'Tu instalación de PHP no soporta TLS'; +$lang['could_not_start_tls'] = 'No he podido iniciar el TLS.
    Revisa tu configuración del servidor LDAP.'; +$lang['auth_type_not_valid'] = 'Tienes un error en el archivo de configuración. auth_type de %s no es válido.'; +$lang['ldap_said'] = 'LDAP dijo: %s

    '; +$lang['ferror_error'] = 'Error'; +$lang['fbrowse'] = 'mostrar'; +$lang['delete_photo'] = 'Borrar foto'; +$lang['install_not_support_blowfish'] = 'Tu instalación de PHP no soporta los tipos de encriptación blowfish.'; +$lang['install_no_mash'] = 'Tu instalación de PHP no tiene la funcion mhash(). No puedo hacer hash SHA.'; +$lang['jpeg_contains_errors'] = 'jpegPhoto contiene errores
    '; +$lang['ferror_number'] = 'Error número: %s (%s)

    '; +$lang['ferror_discription'] = 'Descripción: %s

    '; +$lang['ferror_number_short'] = 'Error número: %s

    '; +$lang['ferror_discription_short'] = 'Descripción: (no hay descripción)
    '; +$lang['ferror_submit_bug'] = 'Es un error del phpLDAPadmin? Si así es, por favor dínoslo.'; +$lang['ferror_unrecognized_num'] = 'Número de error desconocido: '; +$lang['ferror_nonfatil_bug'] = '
    +
    + Has encontrado un error fatal del phpLDAPadmin!
    Error:%s (%s)
    Archivo:%s línea %s, caller %s
    Versiones:PLA: %s, PHP: %s, SAPI: %s +
    Servidor Web:%s
    + Envía este error haciendo click aquí.

    '; +$lang['ferror_congrats_found_bug'] = 'Felicidades! Has encontrado un error en el phpLDAPadmin.

    + + + + + + + + + + +
    Error:%s
    Nivel:%s
    Archivo:%s
    Línea:%s
    Caller:%s
    Versión PLA:%s
    Versión PHP:%s
    PHP SAPI:%s
    Servidor Web:%s
    +
    + Por favor envía este error haciendo click abajo!'; +//ldif_import_form +$lang['import_ldif_file_title'] = 'Importar archivo LDIF'; +$lang['select_ldif_file'] = 'Selecciona un archivo LDIF:'; +$lang['select_ldif_file_proceed'] = 'Proceder >>'; + +//ldif_import +$lang['add_action'] = 'Añadiendo...'; +$lang['delete_action'] = 'Borrando...'; +$lang['rename_action'] = 'Renombrando...'; +$lang['modify_action'] = 'Modificando...'; + +$lang['failed'] = 'fallado'; +$lang['ldif_parse_error'] = 'Error de parseado LDIF'; +$lang['ldif_could_not_add_object'] = 'No he podido añadir el objeto:'; +$lang['ldif_could_not_rename_object'] = 'No he podido renombrar el objeto:'; +$lang['ldif_could_not_delete_object'] = 'No he podido borrar el objeto:'; +$lang['ldif_could_not_modify_object'] = 'No he podido modificar el objeto:'; +$lang['ldif_line_number'] = 'Linea Número:'; +$lang['ldif_line'] = 'Linea:'; + +?> diff --git a/lang/fr.php b/lang/fr.php index f7f02b9..a2461d9 100644 --- a/lang/fr.php +++ b/lang/fr.php @@ -1,70 +1,355 @@ Pour effacer un attribut, laissez le champs vide et cliquez pour sauvegarder.'; +$lang['attr_schema_hint'] = 'Note: Pour voir le schéma pour un attribut, cliquer sur le nom de l\'attribut.'; +$lang['attrs_modified'] = 'Certains attributs (%s) ont été mdoifiés et sont mis en évidence ci-dessous.'; +$lang['attr_modified'] = 'Un attribut (%s) a été modifié et est mis en évidence ci-dessous.'; +$lang['viewing_read_only'] = 'Voir une entrée en lecture seule.'; +$lang['change_entry_rdn'] = 'Changer le RDN de cette entrée'; +$lang['no_new_attrs_available'] = 'plus d\'attributs disponibles pour cette entrée'; +$lang['binary_value'] = 'Valeur de type binaire'; +$lang['add_new_binary_attr'] = 'Ajouter un nouvel attribut de type binaire'; +$lang['add_new_binary_attr_tooltip'] = 'Ajouter un nouvel attribut à partir d\'un fichier'; +$lang['alias_for'] = 'Alias pour'; +$lang['download_value'] = 'Télécharger le contenu'; +$lang['delete_attribute'] = 'Supprimer l\'attribut'; +$lang['true'] = 'vrai'; +$lang['false'] = 'faux'; +$lang['none_remove_value'] = 'aucun, suppression de la valeur'; +$lang['really_delete_attribute'] = 'Voulez-vous vraiment supprimer l\'attribut'; +// Schema browser +$lang['the_following_objectclasses'] = 'Les classes d\'objets (objectClasses) suivantes sont supportés par ce serveur LDAP.'; +$lang['the_following_attributes'] = 'Les types d\'attributs (attributesTypes) suivants sont supportés par ce serveur LDAP.'; +$lang['the_following_matching'] = 'Les opérateurs (matching rules) suivants sont supportés par ce serveur LDAP.'; +$lang['the_following_syntaxes'] = 'Les syntaxes suivantes sont supportés par ce serveur LDAP.'; +$lang['jump_to_objectclass'] = 'Aller à une classe d\'objet'; +$lang['jump_to_attr'] = 'Aller à un attribut'; +$lang['schema_for_server'] = 'Schema pour le serveur'; +$lang['required_attrs'] = 'Attributs obligatoires'; +$lang['optional_attrs'] = 'Attributs facultatifs'; +$lang['OID'] = 'OID'; +$lang['desc'] = 'Description'; +$lang['name'] = 'Nom'; +$lang['is_obsolete'] = 'Cette classe d\'objet est obsolete'; +$lang['inherits'] = 'hérite'; +$lang['jump_to_this_oclass'] = 'Aller à la définition de cette classe d\'objet'; +$lang['matching_rule_oid'] = 'OID de l\'opérateur'; +$lang['syntax_oid'] = 'OID de la syntaxe'; +$lang['not_applicable'] = 'not applicable'; +$lang['not_specified'] = 'non spécifié'; -// Repeat above for *every* string in phpLDAPadmin +// Deleting entries +$lang['entry_deleted_successfully'] = 'Suppression de l\'entrée \'%s\' réussie.'; +$lang['you_must_specify_a_dn'] = 'Un DN doit être spécifié'; +$lang['could_not_delete_entry'] = 'Impossible de supprimer l\'entrée: %s'; + +// Adding objectClass form +$lang['new_required_attrs'] = 'Nouveaux Attributs Obligatoires'; +$lang['requires_to_add'] = 'Cette action nécessite d\'ajouter'; +$lang['new_attributes'] = 'nouveaux attributs'; +$lang['new_required_attrs_instructions'] = 'Instructions: Afin d\'ajouter cette classe d\'objet, vous devez spécifier'; +$lang['that_this_oclass_requires'] = 'dont cette classe d\'objet a besoin. Vous pouvez le faire avec ce formulaire.'; +$lang['add_oclass_and_attrs'] = 'Ajout d\' ObjectClass et d\'attributs'; + +// General +$lang['chooser_link_tooltip'] = 'Cliquer pour choisir un entré(DN)'; +$lang['no_updates_in_read_only_mode'] = 'Vous ne pouvez effectuer des mises à jour si le serveur est en lecture seule'; +$lang['bad_server_id'] = 'Id de serveur invalide'; +$lang['not_enough_login_info'] = 'Informations insuffisantes pour se logguer au serveur. Veuillez, s\'il vous plaî, vérifier votre configuration.'; +$lang['could_not_connect'] = 'Impossible de se connecter au serveur LDAP.'; +$lang['could_not_perform_ldap_mod_add'] = 'Echec lors de l\'opération ldap_mod_add.'; +$lang['bad_server_id_underline'] = 'serveur_id invalide: '; +$lang['success'] = 'Succès'; +$lang['server_colon_pare'] = 'Serveur: '; +$lang['look_in'] = 'Recherche dans: '; +$lang['missing_server_id_in_query_string'] = 'Aucun serveur ID spécifié dans la ligne de requête !'; +$lang['missing_dn_in_query_string'] = 'Aucun DN spécifié dans la ligne de requête !'; +$lang['back_up_p'] = 'Retour...'; +$lang['no_entries'] = 'aucune entrée'; +$lang['not_logged_in'] = 'Vous n\'ê pas loggué'; +$lang['could_not_det_base_dn'] = 'Impossible de déterminer le DN de base'; + +// Add value form +$lang['add_new'] = 'Ajout d\'une nouvelle valeur '; +$lang['value_to'] = 'pour'; +$lang['distinguished_name'] = 'Distinguished Name'; +$lang['current_list_of'] = 'Liste actuelle de'; +$lang['values_for_attribute'] = 'valeur(s) pour l\' attribut'; +$lang['inappropriate_matching_note'] = 'Note: Vous obtiendrez une erreur de type "inappropriate matching" si vous n\'avez pas
    ' . + 'défini une règle EQUALITY pour cet attribut auprès du serveur LDAP.'; +$lang['enter_value_to_add'] = 'Entrez la valeur que vous voulez ajouter:'; +$lang['new_required_attrs_note'] = 'Note: vous aurez peut-être besoin d\'introduire de nouveaux attributs requis pour cette classe d\'objet'; +$lang['syntax'] = 'Syntaxe'; + +//Copy.php +$lang['copy_server_read_only'] = 'Des mises à jours ne peuvent pas être effectuées si le serveur est en lecture seule'; +$lang['copy_dest_dn_blank'] = 'Vous avez laissé le DN de destination vide.'; +$lang['copy_dest_already_exists'] = 'L\'entrée de destination (%s) existe déjà.'; +$lang['copy_dest_container_does_not_exist'] = 'Le conteneur de destination (%s) n\'existe pas.'; +$lang['copy_source_dest_dn_same'] = 'Le DN d\'origine et le DN de destination sont identiques.'; +$lang['copy_copying'] = 'Copie '; +$lang['copy_recursive_copy_progress'] = 'Progression de la copie récursive'; +$lang['copy_building_snapshot'] = 'Construction de l\'image de l\'arborscence à copier... '; +$lang['copy_successful_like_to'] = 'Copie réussite! Voulez-vous '; +$lang['copy_view_new_entry'] = 'éditer cette nouvelle entrée'; +$lang['copy_failed'] = 'Echec lors de la copie de: '; + +//edit.php +$lang['missing_template_file'] = 'Avertissement: le fichier modèle est manquant, '; +$lang['using_default'] = 'Utilisation du modèle par défaut.'; + +//copy_form.php +$lang['copyf_title_copy'] = 'Copie de '; +$lang['copyf_to_new_object'] = 'vers un nouvel objet'; +$lang['copyf_dest_dn'] = 'DN de destination'; +$lang['copyf_dest_dn_tooltip'] = 'Le DN de la nouvelle entrée à créer lors de la copie de l\'entrée source'; +$lang['copyf_dest_server'] = 'Destination Serveur'; +$lang['copyf_note'] = 'Note: La copie entre différents serveurs fonctionne seulement si il n\'y a pas de violation de schéma'; +$lang['copyf_recursive_copy'] = 'Copier récursivement les sous-entrées de cet object.'; + +//create.php +$lang['create_required_attribute'] = 'Une valeur n\'a pas été spécifiée pour l\'attribut requis %s.'; +$lang['create_redirecting'] = 'Redirection'; +$lang['create_here'] = 'ici'; +$lang['create_could_not_add'] = 'L\'ajout de l\'objet au serveur LDAP n\'a pu être effectuée.'; + +//create_form.php +$lang['createf_create_object'] = 'Creation d\'un objet'; +$lang['createf_choose_temp'] = 'Choix d\'un modèle'; +$lang['createf_select_temp'] = 'Selectionner un modèle pour la procédure de création'; +$lang['createf_proceed'] = 'Continuer'; + +//creation_template.php +$lang['ctemplate_on_server'] = 'Sur le serveur'; +$lang['ctemplate_no_template'] = 'Aucun modèle spécifié dans les variables POST.'; +$lang['ctemplate_config_handler'] = 'Votre configuration scécifie un gestionnaire de'; +$lang['ctemplate_handler_does_not_exist'] = 'pour ce modèle. Cependant, ce gestionnaire n\'existe pas dans le répertoire \'templates/creation\'.'; + +//search.php +$lang['you_have_not_logged_into_server'] = 'Vous ne vous êtes pas encore loggé auprès du serveur sélectionné. Vous ne pouvez y effectuer des recherches.'; +$lang['click_to_go_to_login_form'] = 'Cliquer ici pour vous rendre au formulaire de login'; +$lang['unrecognized_criteria_option'] = 'Critère non reconnu: '; +$lang['if_you_want_to_add_criteria'] = 'Si vous voulez ajouter vos propres critère à la liste, soyez cetain d\'éditer search.php afin de pouvoir les gérer.'; +$lang['entries_found'] = 'Entrées trouvée: '; +$lang['filter_performed'] = 'Filtre utilisé: '; +$lang['search_duration'] = 'Recherche effectuée par phpLDAPadmin en'; +$lang['seconds'] = 'secondes'; + +// search_form_advanced.php +$lang['scope_in_which_to_search'] = 'Portée de la recherche'; +$lang['scope_sub'] = 'Sub (le sous-arbre)'; +$lang['scope_one'] = 'One (un niveau sous la base)'; +$lang['scope_base'] = 'Base (le dn de base)'; +$lang['standard_ldap_search_filter'] = 'Un filtre standard de recherche LDAP. Exemple: (&(sn=Smith)(givenname=David))'; +$lang['search_filter'] = 'Filtre pour la recherche'; +$lang['list_of_attrs_to_display_in_results'] = 'Une liste des attributs à afficher dans les résultats(séparés par des virgules)'; +$lang['show_attributes'] = 'Attributs à afficher'; + +// search_form_simple.php +$lang['search_for_entries_whose'] = 'Chercher les entrées dont:'; +$lang['equals'] = 'est egal à;'; +$lang['starts with'] = 'commence par'; +$lang['contains'] = 'contient'; +$lang['ends with'] = 'se termine par'; +$lang['sounds like'] = 'ressemble à'; + +// server_info.php +$lang['could_not_fetch_server_info'] = 'Impossible de récupérer les informations concernant le serveur Ldap'; +$lang['server_info_for'] = 'Informations pour le serveur: '; +$lang['server_reports_following'] = 'Le serveur a rapporté les informations suivantes'; +$lang['nothing_to_report'] = 'Ce serveur n\'a aucunes informations a rapporter.'; + +//update.php +$lang['update_array_malformed'] = 'update_array n\'est pas bien formé. Ceci est peut-être un bogue de phpLDAPadmin. Pourriez-vous effectuer un rapport de bogue, s\'il vous plaît.'; +$lang['could_not_perform_ldap_modify'] = 'L\'opération ldap_modify n\'a pu être effectuée.'; + +// update_confirm.php +$lang['do_you_want_to_make_these_changes'] = 'Voulez-vous effectuer ces changements?'; +$lang['attribute'] = 'Attribut'; +$lang['old_value'] = 'Ancienne Valeur'; +$lang['new_value'] = 'Nouvelle Valeur'; +$lang['attr_deleted'] = '[attribut supprimé]'; +$lang['commit'] = 'Valider'; +$lang['cancel'] = 'Annuler'; +$lang['you_made_no_changes'] = 'Aucun changement n\'a été effectué'; +$lang['go_back'] = 'Retour'; + +// welcome.php +$lang['welcome_note'] = 'Utilisez le menu de gauche pour la navigation'; + +// view_jpeg_photo.php +$lang['unsafe_file_name'] = 'Nom de fichier non sûr: '; +$lang['no_such_file'] = 'Aucun fichier trouvé: '; + +//function.php +$lang['auto_update_not_setup'] = 'auto_uid_numbers a été activé pour %s dans votre configuration, + mais vous n\'avez pas spécifié l\' auto_uid_number_mechanism. Veuiller corriger + ce problème.'; +$lang['uidpool_not_set'] = 'Vous avez spécifié lauto_uid_number_mechanism comme uidpool + dans la configuration du serveur %s, mais vous n\'avez pas spécifié de valeur pour + auto_uid_number_uid_pool_dn. Veuillez le spécifier avant de continuer.'; +$lang['uidpool_not_exist'] = 'Le uidPool que vous avez spécifié dans votre configuration (%s) + n\'existe pas.'; +$lang['specified_uidpool'] = 'L\'auto_uid_number_mechanism a été défini à search dans votre + configuration pour le serveur %s, mais vous n\'avez pas défini + auto_uid_number_search_base. Veuillez le spécifier avant de continuer.'; +$lang['auto_uid_invalid_value'] = 'Une valeur non valide a été spécifiée pour auto_uid_number_mechanism (%s) + dans votre configuration. Seul uidpool et search sont valides. + Veuillez corriger ce problème.'; +$lang['error_auth_type_config'] = 'Erreur: Vous avez une erreur dans votre fichier de configuration.Les valeurs + supportées pour \'auth_type\' sont \'config\' et \'form\' dans la section $servers. + Vous avez mis \'%s\', ce qui n\'est pas autorisé.'; +$lang['php_install_not_supports_tls'] = 'Votre installation PHP ne supporte pas TLS.'; +$lang['could_not_start_tls'] = 'Impossible de démarrer TLS.
    Veuillez,s\'il vous plaît, vérifier la configuration de votre serveur LDAP.'; +$lang['auth_type_not_valid'] = 'Vous avez une erreur dans votre fichier de configuration. auth_type %s n\'est pas valide.'; +$lang['ldap_said'] = 'LDAP said: %s

    '; +$lang['ferror_error'] = 'Erreur'; +$lang['fbrowse'] = 'naviguer'; +$lang['delete_photo'] = 'Supprimer la photo'; +$lang['install_not_support_blowfish'] = 'Votre installation PHP ne support pas l\'encryption blowfish.'; +$lang['install_no_mash'] = 'Votre installation PHP ne supporte pas la fonction mhash(). Impossible de créer un hash SHA.'; +$lang['jpeg_contains_errors'] = 'jpegPhoto contient des erreurs
    '; +$lang['ferror_number'] = 'Numéro de l\'erreur: %s (%s)

    '; +$lang['ferror_discription'] = 'Description: %s

    '; +$lang['ferror_number_short'] = 'Numé de l\'erreur: %s

    '; +$lang['ferror_discription_short'] = 'Description: (pas de description disponible)
    '; +$lang['ferror_submit_bug'] = 'Est-ce un bogue de phpLDAPadmin? Si c\'est le cas,veuillez s\'il vous plaît le rapporter.'; +$lang['ferror_unrecognized_num'] = 'Numéro de l\'erreur non reconnu: '; +$lang['ferror_nonfatil_bug'] = '
    +
    + Vous avez trouvé un bogue non fatal dans phpLDAPAdmin!
    Erreur:%s (%s)
    Fichier:%s ligne %s, origine de l\'appel %s
    Versions:PLA: %s, PHP: %s, SAPI: %s +
    Serveur Web:%s
    + S\'il vous plaît, veuillez rapporter ce bogue en cliquant ici.

    '; +$lang['ferror_congrats_found_bug'] = 'Félicitations! Vous avez trouvé un bogue dans phpLDAPadmin.

    + + + + + + + + + + +
    Erreur:%s
    Niveau:%s
    Fichier:%s
    Ligne:%s
    Origine de l\'appel:%s
    PLA Version:%s
    PHP Version:%s
    PHP SAPI:%s
    Serveur Webr:%s
    +
    + S\'il vous plaît, veuillez rapporter ce bogue en cliquant ici!'; + +//ldif_import_form +$lang['import_ldif_file_title'] = 'Import de fichier LDIF'; +$lang['select_ldif_file'] = 'Sélectionner un fichier LDIF:'; +$lang['select_ldif_file_proceed'] = 'Continuer >>'; + +//lldif_import +$lang['add_action'] = 'Ajout de...'; +$lang['delete_action'] = 'Supression de...'; +$lang['rename_action'] = 'Renommage de...'; +$lang['modify_action'] = 'Modification de...'; +$lang['failed'] = 'échec'; +$lang['ldif_parse_error'] = 'Erreur lors de l\'analyse du fichier LDIF'; +$lang['ldif_could_not_add_object'] = 'Impossible d\'ajouter l\'objet:'; +$lang['ldif_could_not_rename_object'] = 'Impossible de renommer l\'objet:'; +$lang['ldif_could_not_delete_object'] = 'Impossible de supprimer l\'objet:'; +$lang['ldif_could_not_modify_object'] = 'Impossible de modifier l\'objet:'; +$lang['ldif_line_number'] = 'Numéro de ligne'; +$lang['ldif_line'] = 'Ligne'; ?> diff --git a/lang/it.php b/lang/it.php new file mode 100644 index 0000000..f49d6f7 --- /dev/null +++ b/lang/it.php @@ -0,0 +1,139 @@ +Per cancellare un attributo, svuota il campo testo e clicca salva.'; +$lang['viewing_read_only'] = 'Stai guardando la voce in modalità sola-lettura.'; +$lang['change_entry_rdn'] = 'Cambia l\' RDN di questa voce'; +$lang['no_new_attrs_available'] = 'nessun nuovo attributo disponibile per questa voce'; +$lang['binary_value'] = 'Valore binario'; +$lang['add_new_binary_attr'] = 'Aggiungi un Nuovo Attributo Binario'; +$lang['add_new_binary_attr_tooltip'] = 'Aggiungi un nuovo attributo/valore binario da un file'; +$lang['alias_for'] = 'Alias per'; +$lang['download_value'] = 'valore del download'; +$lang['delete_attribute'] = 'cancella l\'attributo'; +$lang['true'] = 'vero'; +$lang['false'] = 'falso'; +$lang['none_remove_value'] = 'nessuno, rimuovi il valore'; +$lang['really_delete_attribute'] = 'Cancella definitivamente il valore'; + +// Schema browser +$lang['the_following_objectclasses'] = 'Le seguenti objectClasses sono supportate da questo server LDAP'; +$lang['the_following_attributes'] = 'Le seguenti attributeTypes sono supportate da questo server LDAP'; +$lang['the_following_matching'] = 'Le seguenti matching rules sono supportate da questo server LDAP'; +$lang['the_following_syntaxes'] = 'Le seguenti syntaxes sono supportate da questo server LDAP'; +$lang['jump_to_objectclass'] = 'Vai a una objectClass'; +$lang['jump_to_attr'] = 'Vai a un attributo'; +$lang['schema_for_server'] = 'Schema per il server'; +$lang['required_attrs'] = 'Attributi Richiesti'; +$lang['optional_attrs'] = 'Attributi Opzionali'; +$lang['OID'] = 'OID'; +$lang['desc'] = 'Descrizione'; +$lang['is_obsolete'] = 'Questa objectClass è obsoleta'; +$lang['inherits'] = 'Eredita da'; +$lang['jump_to_this_oclass'] = 'Vai a questa definizione della objectClass'; +$lang['matching_rule_oid'] = 'Regola Corrispondente OID'; +$lang['syntax_oid'] = 'Sintassi OID'; + +// Adding objectClass form +$lang['new_required_attrs'] = 'Nuovi Attributi Richiesti'; +$lang['requires_to_add'] = 'Questa azione richiede che tu aggiunga'; +$lang['new_attributes'] = 'nuovi attributi'; +$lang['new_required_attrs_instructions'] = 'Istruzioni: Per aggiungere questa objectClass a questa voce, devi specificare:'; +$lang['that_this_oclass_requires'] = 'che questa objectClass richiede. Puoi farlo in questo modulo.'; +$lang['add_oclass_and_attrs'] = 'Aggiungi ObjectClass e Attributi'; + +// General +$lang['chooser_link_tooltip'] = 'Clicca per aprire una finestra di dialogo per la selezione grafica di una voce (DN)'; +$lang['no_updates_in_read_only_mode'] = 'Non puoi operare aggiornamenti mentre il server è in modalità sola-lettura'; +$lang['bad_server_id'] = 'Server id errata'; +$lang['not_enough_login_info'] = 'Non abbastanza informazioni per collegarsi al server. Per piacere controlla la tua configurazione.'; +$lang['could_not_connect'] = 'Non ho potuto collegarmi al server LDAP.'; +$lang['could_not_perform_ldap_mod_add'] = 'Non ho potuto eseguire l\'operazione ldap_mod_add.'; + +// Add value form +$lang['add_new'] = 'Aggiungi nuovo'; +$lang['value_to'] = 'valore a'; +$lang['server'] = 'Server'; +$lang['distinguished_name'] = 'Distinguished Name'; +$lang['current_list_of'] = 'Lista corrente di'; +$lang['values_for_attribute'] = 'valori per l\'attributo'; +$lang['inappropriate_matching_note'] = 'Nota: Tu riceverai un errore "corrispondenza inappropiata" se non hai
    una regola EQUALITY per questo attributo sul tuo server LDAP.'; +$lang['enter_value_to_add'] = 'Inserisci il valore che vorresti aggiungere:'; +$lang['new_required_attrs_note'] = 'Nota: ti potrebbe essere chiesto di inserire nuovi attributi
    che questa objectClass richiede.'; +$lang['syntax'] = 'Sintassi'; + +?> diff --git a/lang/nl.php b/lang/nl.php new file mode 100644 index 0000000..c040532 --- /dev/null +++ b/lang/nl.php @@ -0,0 +1,329 @@ + + * Uwe Ebel + */ + +// Search form +$lang['simple_search_form_str'] = 'eenvoudig zoeken';//'Simple Search Form'; +$lang['advanced_search_form_str'] = 'uitgebreid zoeken';//'Advanced Search Form'; +$lang['server'] = 'server';//'Server'; +$lang['search_for_entries_whose'] = 'zoek naar velden die';//'Search for entries whose'; +$lang['base_dn'] = 'base DN';//'Base DN'; +$lang['search_scope'] = 'zoekbereik';//'Search Scope'; +$lang['search_ filter'] = 'zoekfilter';//'Search Filter'; +$lang['show_attributes'] = 'laat Attributen zien';//'Show Attributtes'; +$lang['Search'] = 'zoeken';//'Search'; +$lang['equals'] = 'gelijk aan';//'equals'; +$lang['starts_with'] = 'begint met';//'starts with'; +$lang['contains'] = 'bevat';//'contains'; +$lang['ends_with'] = 'eindigt met';//'ends with'; +$lang['sounds_like'] = 'klinkt als';//'sounds like'; + +// Tree browser +$lang['request_new_feature'] = 'verzoek nieuwe feature';//'Request a new feature'; +$lang['see_open_requests'] = 'feature verzoeken inzien';//'see open requests'; +$lang['report_bug'] = 'rapporteer een bug';//'Report a bug'; +$lang['see_open_bugs'] = 'buglijst inzien';//'see open bugs'; +$lang['schema'] = 'schema';//'schema'; +$lang['search'] = 'zoeken';//'search'; +$lang['refresh'] = 'vernieuwen';//'refresh'; +$lang['create'] = 'aanmaken';//'create'; +$lang['info'] = 'info';//'info'; +$lang['import'] = 'importeer';//'import'; +$lang['logout'] = 'uitloggen';//'logout'; +$lang['create_new'] = 'aanmaken';//'Create New'; +$lang['view_schema_for'] = 'schema inzien voor';//'View schema for'; +$lang['refresh_expanded_containers'] = 'vernieuw alle uitgeklapte containers voor';//'Refresh all expanded containers for'; +$lang['create_new_entry_on'] = 'nieuw veld aanmaken in';//'Create a new entry on'; +$lang['view_server_info'] = 'server informatie inzien';//'View server-supplied information'; +$lang['import_from_ldif'] = 'importeer LDIF bestand';//'Import entries from an LDIF file'; +$lang['logout_of_this_server'] = 'bij deze server uitloggen';//'Logout of this server'; +$lang['logged_in_as'] = 'ingelogd als: ';//'Logged in as: '; +$lang['read_only'] = 'alleen lezen';//'read only'; +$lang['could_not_determine_root'] = 'kan de root van LDAP structuur niet bepalen.';//'Could not determin the root of your LDAP tree.'; +$lang['ldap_refuses_to_give_root'] = 'kan de root van LDAP structuur niet bepalen';//'It appears that the LDAP server has been configured to not reveal its root.'; +$lang['please_specify_in_config'] = 'in config.php aangeven a.u.b.';//'Please specify it in config.php'; +$lang['create_new_entry_in'] = 'nieuw veld aanmaken in';//'Create a new entry in'; + +// Entry display +$lang['delete_this_entry'] = 'veld verwijderen';//'Delete this entry'; +$lang['delete_this_entry_tooltip'] = 'bevestiging zal worden gevraagd voor deze beslissing';//'You will be prompted to confirm this decision'; +$lang['copy_this_entry'] = 'dit veld kopieren';//'Copy this entry'; +$lang['copy_this_entry_tooltip'] = 'kopieer dit object naar een andere plaats, een niuewe DN of naar een andere server';//'Copy this object to another location, a new DN, or another server'; +$lang['export_to_ldif'] = 'exporteren naar LDIF';//'Export to LDIF'; +$lang['export_to_ldif_tooltip'] = 'maak LDIF dump van dit object';//'Save an LDIF dump of this object'; +$lang['export_subtree_to_ldif_tooltip'] = 'maak LDIF dump van dit object plus alle onderliggende objecten';//'Save an LDIF dump of this object and all of its children'; +$lang['export_subtree_to_ldif'] = 'exporteer deze subvelden naar LDIF';//'Export subtree to LDIF'; +$lang['export_to_ldif_mac'] = 'Macintosh regeleinden';//'Macintosh style line ends'; +$lang['export_to_ldif_win'] = 'Windows regeleinden';//'Windows style line ends'; +$lang['export_to_ldif_unix'] = 'Unix regeleinden';//'Unix style line ends'; +$lang['create_a_child_entry'] = 'subveld aanmaken';//'Create a child entry'; +$lang['add_a_jpeg_photo'] = 'jpeg foto toevoegen';//'Add a jpegPhoto'; +$lang['rename_entry'] = 'veld hernoemen';//'Rename Entry'; +$lang['rename'] = 'hernoemen';//'Rename'; +$lang['add'] = 'toevoegen';//'Add'; +$lang['view'] = 'inzien';//'View'; +$lang['add_new_attribute'] = 'attribuut toevoegen';//'Add New Attribute'; +$lang['add_new_attribute_tooltip'] = 'nieuw attribuut toevoegen/waarde toekennen';// 'Add a new attribute/value to this entry'; +$lang['internal_attributes'] = 'interne attributen';//'Internal Attributes'; +$lang['hide_internal_attrs'] = 'interne attributen verbergen';//'Hide internal attributes'; +$lang['show_internal_attrs'] = 'interne attributen laten zien';//'Show internal attributes'; +$lang['internal_attrs_tooltip'] = 'automatisch ingestelde attributen';//'Attributes set automatically by the system'; +$lang['entry_attributes'] = 'attributen veld';//'Entry Attributes'; +$lang['attr_name_tooltip'] = 'klik hier om de schemadefinitie van attribuuttype \'%s\' te bekijken';//'Click to view the schema defintion for attribute type \'%s\''; +$lang['click_to_display'] = 'klik om te bekijken';//'click to display'; +$lang['hidden'] = 'verborgen';//'hidden'; +$lang['none'] = 'geen';//'none'; +$lang['save_changes'] = 'veranderingen opslaan';//'Save Changes'; +$lang['add_value'] = 'waarde toevoegen';//'add value'; +$lang['add_value_tooltip'] = 'voeg een extra waarde toe aan dit attribuut';//'Add an additional value to this attribute'; +$lang['refresh_entry'] = 'vernieuwen';// 'Refresh'; +$lang['refresh_this_entry'] = 'dit veld vernieuwen';//'Refresh this entry'; +$lang['delete_hint'] = 'tip: om een attribuut te verwijderen, maak deze leeg en sla hem op';//'Hint: To delete an attribute, empty the text field and click save.'; +$lang['attr_schema_hint'] = 'Tip: om het schema voor een attribuut te bekijken, klik op de attribuutnaam';//'Hint: To view the schema for an attribute, click the attribute name.'; +$lang['attrs_modified'] = 'sommige attributen (%s) zijn gewijzigd en worden ge-highlight weergegeven.';//'Some attributes (%s) were modified and are highlighted below.'; +$lang['attr_modified'] = 'een attribuut (%s) is gewijzigd en wordt ge-highlight weergegeven';//'An attribute (%s) was modified and is highlighted below.'; +$lang['viewing_read_only'] = 'veld bekijken (alleen-lezen)';//'Viewing entry in read-only mode.'; +$lang['change_entry_rdn'] = 'verander de RDN van dit veld';//'Change this entry\'s RDN'; +$lang['no_new_attrs_available'] = 'geen nieuwe attributen beschikbaar voor dit veld';//'no new attributes available for this entry'; +$lang['binary_value'] = 'binaire waarde';//'Binary value'; +$lang['add_new_binary_attr'] = 'nieuwe binair attribuut toevoegen';//'Add New Binary Attribute'; +$lang['add_new_binary_attr_tooltip'] = 'lees binair attribuut in vanuit een bestand';//'Add a new binary attribute/value from a file'; +$lang['alias_for'] = 'alias voor';//'Alias for'; +$lang['download_value'] = 'waarde downloaden';//'download value'; +$lang['delete_attribute'] = 'attribuut verwijderen';//'delete attribute'; +$lang['true'] = 'waar';//'true'; +$lang['false'] = 'onwaar';//'false'; +$lang['none_remove_value'] = 'niets, verwijder waarde';//?? //'none, remove value'; +$lang['really_delete_attribute'] = 'dit attribuut echt verwijderen';//'Really delete attribute'; + +// Schema browser +$lang['the_following_objectclasses'] = 'Deze LDAP server ondersteunt de volgende objectClasses.';//'The following objectClasses are supported by this LDAP server.'; +$lang['the_following_attributes'] = 'Deze LDAP server ondersteunt de volgende attributeTypes.';//'The following attributeTypes are supported by this LDAP server.'; +$lang['the_following_matching'] = 'Deze LDAP server ondersteunt de volgende zoekregels.';//'The following matching rules are supported by this LDAP server.'; +$lang['the_following_syntaxes'] = 'Deze LDAP server ondersteunt de volgende syntaxen.';//'The following syntaxes are supported by this LDAP server.'; +$lang['jump_to_objectclass'] = 'ga naar objectClass';//'Jump to an objectClass'; +$lang['jump_to_attr'] = 'ga naar een attribuut';//'Jump to an attribute'; +$lang['schema_for_server'] = 'schema voor server';//'Schema for server'; +$lang['required_attrs'] = 'vereiste attributen';//'Required Attributes'; +$lang['optional_attrs'] = 'niet vereiste attributen';//'Optional Attributes'; +$lang['OID'] = 'OID';//'OID'; +$lang['desc'] = 'omschrijving';//'Description'; +$lang['name'] = 'naam';//'Name'; +$lang['is_obsolete'] = 'deze objectClass is verouderd';//'This objectClass is obsolete'; +$lang['inherits'] = 'afgeleid van';//'Inherits'; +$lang['jump_to_this_oclass'] = 'ga naar objectClass definitie';//'Jump to this objectClass definition'; +$lang['matching_rule_oid'] = 'overeenkomen met OID regel';//'Matching Rule OID'; +$lang['syntax_oid'] = 'Syntax OID';//'Syntax OID'; +$lang['not_applicable'] = 'niet van toepassing';//'not applicable'; +$lang['not_specified'] = 'niet gespecificeerd';//not specified'; + +// Deleting entries +$lang['entry_deleted_successfully'] = 'dit veld \'%s\' succesvol verwijderd';//'Entry \'%s\' deleted successfully.'; +$lang['you_must_specify_a_dn'] = 'U moet een DN aangeven.';//'You must specify a DN'; +$lang['could_not_delete_entry'] = 'kan dit veld niet verwijderen: %s';//'Could not delete the entry: %s'; + + +// Adding objectClass form +$lang['new_required_attrs'] = 'nieuwe benodigde attributen';//'New Required Attributes'; +$lang['requires_to_add'] = 'voor deze actie moet worden toegevoegd:';//'This action requires you to add'; +$lang['new_attributes'] = 'nieuw attribuut';//'new attributes'; +$lang['new_required_attrs_instructions'] = 'Instructies: om deze objectClass toe te voegen, moet u nog specificeren ';//'Instructions: In order to add this objectClass to this entry, you must specify'; +$lang['that_this_oclass_requires'] = 'dat deze objectClass nodig heeft. U kunt dit in dit formulier doen.';//'that this objectClass requires. You can do so in this form.'; +$lang['add_oclass_and_attrs'] = 'objectClass en attributen toevoegen';//'Add ObjectClass and Attributes'; + +// General +$lang['chooser_link_tooltip'] = 'klik om grafisch een veld te kiezen (DN)';//"Click to popup a dialog to select an entry (DN) graphically'; +$lang['no_updates_in_read_only_mode'] = 'U kunt niet opslaan als de server alleen lezen is';//'You cannot perform updates while server is in read-only mode'; +$lang['bad_server_id'] = 'ongeldig server ID';//'Bad server id'; +$lang['not_enough_login_info'] = 'Onvoldoende informatie om in te kunnen loggen. Controleer de configuratie.';//'Not enough information to login to server. Please check your configuration.'; +$lang['could_not_connect'] = 'Kan LDAP server niet vinden.';//'Could not connect to LDAP server.'; +$lang['could_not_perform_ldap_mod_add'] = 'Kan geen ldap_mod_add uitvoeren.';//'Could not perform ldap_mod_add operation.'; +$lang['bad_server_id_underline'] = 'ongeldig server_ID:';//"Bad server_id: '; +$lang['success'] = 'succes';//"Success'; +$lang['server_colon_pare'] = 'server: ';//"Server: '; +$lang['look_in'] = 'bekijken: ';//"Looking in: '; +$lang['missing_server_id_in_query_string'] = 'geen server ID meegegeven';//'No server ID specified in query string!'; +$lang['missing_dn_in_query_string'] = 'geen DN meegeven';//'No DN specified in query string!'; +$lang['back_up_p'] = 'backup...';//"Back Up...'; +$lang['no_entries'] = 'geen velden';//"no entries'; +$lang['not_logged_in'] = 'niet ingelogd';//"Not logged in'; +$lang['could_not_det_base_dn'] = 'kan de basis-DN niet bepalen';//"Could not determine base DN'; + + +// Add value form +$lang['add_new'] = 'nieuw toevoegen';//'Add new'; +$lang['value_to'] = 'waarde';//'value to'; +$lang['server'] = 'server';//'Server'; +//also used in copy_form.php +$lang['distinguished_name'] = 'Distinguished Name';// 'Distinguished Name'; +$lang['current_list_of'] = 'huidige lijst van';//'Current list of'; +$lang['values_for_attribute'] = 'waarden voor attributen';//'values for attribute'; +$lang['inappropriate_matching_note'] = 'Info: U zult een "inappropriate matching" melding krijgen, indien u niet
    ' . //'Note: You will get an "inappropriate matching" error if you have not
    ' . +'een EQUALITY regel op de LDAP Server voor dit attribuut ingesteld heeft.';//'setup an EQUALITY rule on your LDAP server for this attribute.'; +$lang['enter_value_to_add'] = 'geef de waarde die u wilt toevoegen:';//'Enter the value you would like to add:'; +$lang['new_required_attrs_note'] = 'Info: U kunt verzocht worden nieuwe attributen, die voor deze objectClass verplicht zijn, in te voeren.';//'Note: you may be required to enter new attributes
    that this objectClass requires.'; +$lang['syntax'] = 'syntax';//'Syntax'; + +//Copy.php +$lang['copy_server_read_only'] = 'U kunt niet opslaan als de server alleen lezen is';//"You cannot perform updates while server is in read-only mode'; +$lang['copy_dest_dn_blank'] = 'de bestemmings DN is leeg';//"You left the destination DN blank.'; +$lang['copy_dest_already_exists'] = 'het veld (%s) bestaat al.';//"The destination entry (%s) already exists.'; +$lang['copy_dest_container_does_not_exist'] = 'het doel-veld (%s) bestaat niet.';//'The destination container (%s) does not exist.'; +$lang['copy_source_dest_dn_same'] = 'origineel DN en doel DN zijn hetzelfde';//"The source and destination DN are the same.'; +$lang['copy_copying'] = 'kopieren';//"Copying '; +$lang['copy_recursive_copy_progress'] = 'bezig met recursief kopieren';//"Recursive copy progress'; +$lang['copy_building_snapshot'] = 'bezig met het aanmaken van een snapshot van de boomstructuur... ';//"Building snapshot of tree to copy... '; +$lang['copy_successful_like_to'] = 'Kopieren succesvol! Wit u dan';//"Copy successful! Would you like to '; +$lang['copy_view_new_entry'] = 'het nieuwe veld bekijken';//"view the new entry'; +$lang['copy_failed'] = 'Kopieren van DN mislukt: ';//'Failed to copy DN: '; + + +//edit.php +$lang['missing_template_file'] = 'Waarschuwing: kan de template file niet vinden';//'Warning: missing template file, '; +$lang['using_default'] = 'standaardinstelling gebruiken';//'Using default.'; + +//copy_form.php +$lang['copyf_title_copy'] = 'Kopieren';//"Copy '; +$lang['copyf_to_new_object'] = 'naar een nieuw Objekt';//"to a new object'; +$lang['copyf_dest_dn'] = 'doel DN';//"Destination DN'; +$lang['copyf_dest_dn_tooltip'] = 'De complete DN die aangemaakt wordt bij het kopieren van het bron-veld.';//'The full DN of the new entry to be created when copying the source entry'; +$lang['copyf_dest_server'] = 'bestemmings server';//"Destination Server'; +$lang['copyf_note'] = 'Info: kopieren tussen twee servers gaat alleen maar goped als er geen schema problemen zijn';//"Note: Copying between different servers only works if there are no schema violations'; +$lang['copyf_recursive_copy'] = 'Recursief kopieren van alle sub-velden';//"Recursively copy all children of this object as well.'; + +//create.php +$lang['create_required_attribute'] = 'Fout. U heeft een verplicht veld leeggelaten.';//"Error, you left the value blank for required attribute '; +$lang['create_redirecting'] = 'omleiden';//"Redirecting'; +$lang['create_here'] = 'hier';//"here'; +$lang['create_could_not_add'] = 'kan het object niet toevoegen op de LDAP server.';//"Could not add the object to the LDAP server.'; + +//create_form.php +$lang['createf_create_object'] = 'object aanmaken';//"Create Object'; +$lang['createf_choose_temp'] = 'kies een template';//"Choose a template'; +$lang['createf_select_temp'] = 'kies een template voor dit object';//"Select a template for the creation process'; +$lang['createf_proceed'] = 'verder';//"Proceed'; + +//creation_template.php +$lang['ctemplate_on_server'] = 'op server';//"On server'; +$lang['ctemplate_no_template'] = 'geen template gespecifieerd in de POST variabelen';//"No template specified in POST variables.'; +$lang['ctemplate_config_handler'] = 'uw configuratie specificeert een routine';//"Your config specifies a handler of'; +$lang['ctemplate_handler_does_not_exist'] = 'in deze template. Maar deze routine bestaat niet in de \'templates/creation\' directory.';//"for this template. But, this handler does not exist in the 'templates/creation' directory.'; + +// search.php +$lang['you_have_not_logged_into_server'] = 'u bent nog niet ingelogd op de geselecteerde server, dus u kunt geen zoekopdrachten geven.';//'You have not logged into the selected server yet, so you cannot perform searches on it.'; +$lang['click_to_go_to_login_form'] = 'Klik hier om in te loggen';//'Click here to go to the login form'; +$lang['unrecognized_criteria_option'] = 'Unrecognized criteria option: '; +$lang['if_you_want_to_add_criteria'] = 'Als u uw eigen crteria toe wilt voegen aan de lijst, dient u search.php te bewerken. Sluiten.';//'If you want to add your own criteria to the list. Be sure to edit search.php to handle them. Quitting.'; +$lang['entries_found'] = 'gevonden velden: ';//'Entries found: '; +$lang['filter_performed'] = 'toegepast filter: ';//'Filter performed: '; +$lang['search_duration'] = 'zoeken door phpLDAPadmin duurde';//'Search performed by phpLDAPadmin in'; +$lang['seconds'] = 'seconden';//'seconds'; + +// search_form_advanced.php +$lang['scope_in_which_to_search'] = 'zoekbereik';//'The scope in which to search'; +$lang['scope_sub'] = 'Sub (de hele tak)';//'Sub (entire subtree)'; +$lang['scope_one'] = 'One (een laag diep)';//'One (one level beneath base)'; +$lang['scope_base'] = 'Base (alleen de basis)';//'Base (base dn only)'; +$lang['standard_ldap_search_filter'] = 'Standard LDAP zoekfilter. Voorbeeld.: (&(sn=Smith)(givenname=David))';//'Standard LDAP search filter. Example: (&(sn=Smith)(givenname=David))'; +$lang['search_filter'] = 'zoekfilter';//'Search Filter'; +$lang['list_of_attrs_to_display_in_results'] = 'komma gescheiden lijst van de attributen.';//'A list of attributes to display in the results (comma-separated)'; +$lang['show_attributes'] = 'attributen laten zien';//'Show Attributes'; + +// search_form_simple.php +$lang['search_for_entries_whose'] = 'zoek naar velden waarvoor:';//'Search for entries whose:'; +$lang['equals'] = 'gelijk is aan';//'equals'; +$lang['starts with'] = 'begint met';//'starts with'; +$lang['contains'] = 'bevat';//'contains'; +$lang['ends with'] = 'eindigt met';//'ends with'; +$lang['sounds like'] = 'klinkt als';//'sounds like'; + +// server_info.php +$lang['could_not_fetch_server_info'] = 'kan geen LDAP van de server krijgen';//'Could not retrieve LDAP information from the server'; +$lang['server_info_for'] = 'Server info voor: ';//'Server info for: '; +$lang['server_reports_following'] = 'De server geeft de volgende informatie over zichzelf';//'Server reports the following information about itself'; +$lang['nothing_to_report'] = 'De server heeft niets te melden';//'This server has nothing to report.'; + +//update.php +$lang['update_array_malformed'] = 'De update_array is niet goed. Dat kan een phpLDAPadmin bug zijn. Laat het ons weten!';//'update_array is malformed. This might be a phpLDAPadmin bug. Please report it.'; +$lang['could_not_perform_ldap_modify'] = 'Kan ldap_modify niet uitvoeren.';//'Could not perform ldap_modify operation.'; + +// update_confirm.php +$lang['do_you_want_to_make_these_changes'] = 'Deze veranderingen doorvoeren?';//'Do you want to make these changes?'; +$lang['attribute'] = 'attribuut';//'Attribute'; +$lang['old_value'] = 'oude waarde';//'Old Value'; +$lang['new_value'] = 'nieuwe waarde';//'New Value'; +$lang['attr_deleted'] = '[attribuut verwijderd]';//'[attribute deleted]'; +$lang['commit'] = 'uitvoeren';//'Commit'; +$lang['cancel'] = 'annuleren';//'Cancel'; +$lang['you_made_no_changes'] = 'U heeft geen veranderingen gemaakt.';//'You made no changes'; +$lang['go_back'] = 'terug';//'Go back'; + +// welcome.php +$lang['welcome_note'] = 'Gebruik het linkermenu om te navigeren.';//'Use the menu to the left to navigate'; + +// view_jpeg_photo.php +$lang['unsafe_file_name'] = 'onveilige bestandsnaam: ';//'Unsafe file name: '; +$lang['no_such_file'] = 'Bestand bestaat niet: ';//'No such file: '; + +//function.php +$lang['auto_update_not_setup'] = 'auto_uid_numbers is geactiveerd (%s, maar niet het mechanisme (auto_uid_number_mechanism). U dient dit alsnog te doen.';//"You have enabled auto_uid_numbers for %s in your configuration, but you have not specified the auto_uid_number_mechanism. Please correct this problem.'; +$lang['uidpool_not_set'] = 'Het mechanisme auto_uid_number_mechanism is als uidpool voor server %s vastgelegd, maar niet de auto_uid_number_uid_pool_dn. U dient dit alsnog te doen.';//"You specified the auto_uid_number_mechanism as uidpool in your configuration for server %s, but you did not specify the audo_uid_number_uid_pool_dn. Please specify it before proceeding.'; + +$lang['uidpool_not_exist'] = 'De uidPool die gespecificeerd is in de configuratie bestaat niet.';//"It appears that the uidPool you specified in your configuration (%s) does not exist.'; + +$lang['specified_uidpool'] = 'De auto_uid_number_mechanism is als search in de configuratie voor de server %s bepaald, maar de waarde auto_uid_number_search_base niet. U dient dit alsnog te doen.';//"You specified the auto_uid_number_mechanism as search in your configuration for server %s, but you did not specify the auto_uid_number_search_base. Please specify it before proceeding.'; + +$lang['auto_uid_invalid_value'] = 'Ongeldige waarde voor auto_uid_number_mechanism(%s). Alleen uidpool und search zijn geldig. Gaarne de fout herstellen ';//"You specified an invalid value for auto_uid_number_mechanism (%s) in your configration. Only uidpool and search are valid. Please correct this problem.'; + +$lang['error_auth_type_config'] = 'Fout: Er zit een fout inde configuratiefile (config.php). De enige twee waarden voor \'auth_type\' in de $servers sectie zijn: \'config\' of \'form\'. U heeft er nu %s in staan en dat kan niet.';//"Error: You have an error in your config file. The only two allowed values for 'auth_type' in the $servers section are 'config' and 'form'. You entered '%s', which is not allowed. '; + +$lang['php_install_not_supports_tls'] = 'Uw installatie ondersteunt geen TLS.';//"Your PHP install does not support TLS'; +$lang['could_not_start_tls'] = 'Kan TLS niet starten.
    Controleer de LDAP-Server-configuratie.';//"Could not start TLS.
    Please check your LDAP server configuration.'; +$lang['auth_type_not_valid'] = 'Fout in de configuratiefile: auth_type %s is niet geldig'; //"You have an error in your config file. auth_type of %s is not valid.'; +$lang['ldap_said'] = 'LDAP zegt: %s

    ';//"LDAP said: %s

    '; +$lang['ferror_error'] = 'Fout';//"Error'; +$lang['fbrowse'] = 'navigeer';//"browse'; +$lang['delete_photo'] = 'Foto verwijderen';//"Delete Photo'; +$lang['install_not_support_blowfish'] = 'Uw PHP-Versie ondersteunt geen Blowfish versleuteling.';//"Your PHP install does not support blowfish encryption.'; +$lang['install_no_mash'] = 'Uw PHP-Versie ondersteunt de functie mhash() niet, dus de SHA-hash is niet mogelijk.';// "Your PHP install does not have the mhash() function. Cannot do SHA hashes.'; +$lang['jpeg_contains_errors'] = 'Foto (jpg) bevat fouten';//"jpegPhoto contains errors
    '; +$lang['ferror_number'] = 'Foutnummer: %s(%s)

    ';//"Error number: %s (%s)

    '; +$lang['ferror_discription'] ='Omschrijving: %s

    ';// "Description: %s

    '; +$lang['ferror_number_short'] = 'Foutnummer:%s

    ';//"Error number: %s

    '; +$lang['ferror_discription_short'] = 'Omschrijving: (geen omschrijving beschikbaar)
    ';//"Description: (no description available)
    '; +$lang['ferror_submit_bug'] = 'Is het een phpLDAPadmin fout? Als dat zo is, dan gaarne een bugreport invullen';//"Is this a phpLDAPadmin bug? If so, please report it.'; +$lang['ferror_unrecognized_num'] = 'Onbekend foutnummer:';//"Unrecognized error number: '; + +$lang['ferror_nonfatil_bug'] = '
    Een niet fatale fout in phpLDAPadmin gevonden!
    Fout:%s (%s)
    Bestand:%sRegel:%s, aangeroepen door %s
    Versie:PLA: %s, PHP: %s, SAPI: %s
    Web server:%s
    Graag een bugreport invullen.

    ';//"
    You found a non-fatal phpLDAPadmin bug!
    Error:%s (%s)
    File:%s line %s, caller %s
    Versions:PLA: %s, PHP: %s, SAPI: %s
    Web server:%s
    Please report this bug by clicking here.

    '; + +$lang['ferror_congrats_found_bug'] = '
    + + + + + +
    Gefeliciteerd! Een fout in phpLDAPadmin gevonden!
    Fout:%s (%s)
    Bestand:%s, aangeroepen door %s
    Versie:PLA: %s, PHP: %s, SAPI: %s
    Web server:%s
    Graag een bugreport invullen.

    ';//"Congratulations! You found a bug in phpLDAPadmin.

    Error:%s
    Level:%s
    File:%s
    Line:%s
    Caller:%s
    PLA Version:%s
    PHP Version:%s
    PHP SAPI:%s
    Web server:%s

    Please report this bug by clicking below!'; + +// extra strings: + +$lang['login_link'] = 'Login...'; +$lang['import_ldif_file_title'] = 'Import file from LDIF'; +$lang['select_ldif_file'] = 'Selecteer een LDIF file:'; +$lang['select_ldif_file_proceed']= 'Ga door >>'; +$lang['add_action'] = 'Toevoegen...'; +$lang['delete_action'] = 'Verwijderen...'; +$lang['rename_action'] = 'Hernoemen...'; +$lang['modify_action'] = 'Veranderen...'; +$lang['failed'] = 'mislukt'; +$lang['ldif_parse_error'] = 'LDIF inleesfout'; +$lang['ldif_could_not_add_object'] = 'Kan object niet toevoegen:'; +$lang['ldif_could_not_rename_object'] = 'Kan object niet hernoemen'; +$lang['ldif_could_not_delete_object'] = 'Kan object niet verwijderen'; +$lang['ldif_could_not_modify_object'] = 'Kan object niet wijzigen'; +$lang['ldif_line_number'] = 'regelnummer: '; +$lang['ldif_line'] = 'regel: '; + +?> diff --git a/lang/recoded/ct.php b/lang/recoded/ct.php new file mode 100644 index 0000000..dbadb96 --- /dev/null +++ b/lang/recoded/ct.php @@ -0,0 +1,337 @@ +Per a borrar un atribut, buida el formulari de texte i fes click a Desar.'; +$lang['attr_schema_hint'] = 'Pista: Per veure l\'esquema d\'un atribut, fes click al nom de l\'atribut.'; +$lang['attrs_modified'] = 'Alguns atributs (%s) foren modificats i estan remarcats més abaix.'; +$lang['attr_modified'] = 'Un atribut (%s) fore modificat i està remarcat més abaix.'; +$lang['viewing_read_only'] = 'Mostrant l\'objecte en el mode de no alterar.'; +$lang['change_entry_rdn'] = 'Modificar el RDN d\'aquest objecte'; +$lang['no_new_attrs_available'] = 'No hi han atributs nous disponibles per aquest objecte'; +$lang['binary_value'] = 'Valor binari'; +$lang['add_new_binary_attr'] = 'Afegir valor binari'; +$lang['add_new_binary_attr_tooltip'] = 'Afegir atribut/valor binari d\'un arxiu'; +$lang['alias_for'] = 'Sinònim per a'; +$lang['download_value'] = 'Descarregar valor'; +$lang['delete_attribute'] = 'Esborrar atribut'; +$lang['true'] = 'veritat'; +$lang['false'] = 'fals'; +$lang['none_remove_value'] = 'cap, esborrar valor'; +$lang['really_delete_attribute'] = 'Esborrar realment l\'atribut?'; + +// Schema browser +$lang['the_following_objectclasses'] = 'Les següents ObjectClass són presents en aquest servidor LDAP.'; +$lang['the_following_attributes'] = 'Les següents attributeTypes són presents en aquest servidor LDAP.'; +$lang['the_following_matching'] = 'Les següents matching rules són presents en aquest servidor LDAP.'; +$lang['the_following_syntaxes'] = 'Les següents sintaxis són presents en aquest servidor LDAP.'; +$lang['jump_to_objectclass'] = 'Saltar a una ObjectClass'; +$lang['jump_to_attr'] = 'Saltar a un atribut'; +$lang['schema_for_server'] = 'Esquema del servidor '; +$lang['required_attrs'] = 'Atributs Requerits (MUST)'; +$lang['optional_attrs'] = 'Atributs Opcionals (MAY)'; +$lang['OID'] = 'OID'; +$lang['desc'] = 'Descripció'; +$lang['name'] = 'Nom'; +$lang['is_obsolete'] = 'Aquesta ObjectClass és obsoleta'; +$lang['inherits'] = 'Hereda'; +$lang['jump_to_this_oclass'] = 'Saltar a aquesta ObjectClass'; +$lang['matching_rule_oid'] = 'OID de Matching Rule'; +$lang['syntax_oid'] = 'OID de Sintaxi'; +$lang['not_applicable'] = 'no es aplicable'; +$lang['not_specified'] = 'no especificada'; + +// Deleting entries +$lang['entry_deleted_successfully'] = 'Entrada \'%s\' esborrada correctament.'; +$lang['you_must_specify_a_dn'] = 'Has d\'especificar un DN'; +$lang['could_not_delete_entry'] = 'No he pogut esborrar l\'entrada: %s'; + +// Adding objectClass form +$lang['new_required_attrs'] = 'Nous atributs requerits'; +$lang['requires_to_add'] = 'Aquesta acció exigeix que s\'afegeixin'; +$lang['new_attributes'] = 'nous atributs'; +$lang['new_required_attrs_instructions'] = 'Instruccions: Per afegir aquesta ObjectClass a aquest objecte, s\'ha d\'especificar'; +$lang['that_this_oclass_requires'] = 'que aquest ObjectClass requereix. Es pot fer amb aquest formulari.'; +$lang['add_oclass_and_attrs'] = 'Afegir ObjectClass i Atributs'; + +// General +$lang['chooser_link_tooltip'] = 'Fer click per seleccionar un objecte gràficament'; +$lang['no_updates_in_read_only_mode'] = 'No es pot modificar l\'objecte si el servidor està operant en mode inalterable.'; +$lang['bad_server_id'] = 'L\'identificador de servidor està malament'; +$lang['not_enough_login_info'] = 'No tinc suficient informació per conectar al servidor. Si us plau configurar correctament l\'arxiu config.php'; +$lang['could_not_connect'] = 'No s\'ha pogut conectar al servidor LDAP'; +$lang['could_not_perform_ldap_mod_add'] = 'No s\'ha pogut fer l\'operació del ldap_mod_add.'; +$lang['bad_server_id_underline'] = 'L\'identificador del servidor està malament: '; +$lang['success'] = 'Exit'; +$lang['server_colon_pare'] = 'Servidor: '; +$lang['look_in'] = 'Buscant a: '; +$lang['missing_server_id_in_query_string'] = 'No està present l\'identificador del servidor a la URL'; +$lang['missing_dn_in_query_string'] = 'No està present el DN a la URL'; +$lang['back_up_p'] = 'Tornar a...'; +$lang['no_entries'] = 'no hi han entrades'; +$lang['not_logged_in'] = 'No estàs autenticat'; +$lang['could_not_det_base_dn'] = 'No he pogut determinar la base DN'; + +// Add value form +$lang['add_new'] = 'Afegir'; +$lang['value_to'] = 'valor a'; +$lang['server'] = 'Servidor'; +$lang['distinguished_name'] = 'Nom distinguit'; +$lang['current_list_of'] = 'La llista actual de'; +$lang['values_for_attribute'] = 'valors per a l\'atribut'; +$lang['inappropriate_matching_note'] = 'Nota: Sino has configurat una regla \'EQUALITY\' al servidor LDAP, rebràs un error \'inappropriate matching\''; +$lang['enter_value_to_add'] = 'Proveïr el valor per afegir: '; +$lang['new_required_attrs_note'] = 'Nota: Es posible que es requereixi afegir nous atributs per satisfer els requisits d\'aquesta ObjectClass'; +$lang['syntax'] = 'Sintaxi'; + +//copy.php +$lang['copy_server_read_only'] = 'No es poden realitzar les modificacions si el servidor està operant en mode inalterable'; +$lang['copy_dest_dn_blank'] = 'No se emplenat el formulari de DN.'; +$lang['copy_dest_already_exists'] = 'L\'entrada de destí (%s) encara existeix.'; +$lang['copy_dest_container_does_not_exist'] = 'El contenidor de destí (%s) no existeix.'; +$lang['copy_source_dest_dn_same'] = 'El DN de la font i el DN de destí son els mateixos.'; +$lang['copy_copying'] = 'Copiant '; +$lang['copy_recursive_copy_progress'] = 'El progrés de la còpia recurrent'; +$lang['copy_building_snapshot'] = 'Construïnt la \'foto\' de l\'arbre per a copiar... '; +$lang['copy_successful_like_to'] = 'Exit! Desitges '; +$lang['copy_view_new_entry'] = 'Veure el nou objecte?'; +$lang['copy_failed'] = 'Fallida al copiar DN: '; + +//edit.php +$lang['missing_template_file'] = 'Error: falta la plantilla, '; +$lang['using_default'] = 'Fent anar l\'arxiu per defecte.'; + +//copy_form.php +$lang['copyf_title_copy'] = 'Copiar '; +$lang['copyf_to_new_object'] = 'a un objecte nou'; +$lang['copyf_dest_dn'] = 'DN de destí'; +$lang['copyf_dest_dn_tooltip'] = 'El DN sencer de la nova entrada a ser creada quan es copii l\'entrada font'; +$lang['copyf_dest_server'] = 'Servidor de destí'; +$lang['copyf_note'] = 'Nota: Copiar entre dos servidor funciona solsament si no hi han violacions de l\'esquema.'; +$lang['copyf_recursive_copy'] = 'Esborrar tots els fills recurrentment també?'; + + +//create.php +$lang['create_required_attribute'] = 'T\'has deixar el valor en blanc de l\'atribut requerit %s.'; +$lang['create_redirecting'] = 'Redirigint'; +$lang['create_here'] = 'aquí'; +$lang['create_could_not_add'] = 'No he pogut afegir l\'objecte al servidor LDAP.'; + +//create_form.php +$lang['createf_create_object'] = 'Crear Objecte'; +$lang['createf_choose_temp'] = 'Escull una plantilla'; +$lang['createf_select_temp'] = 'Selecciona una plantilla per al procès de creació'; +$lang['createf_proceed'] = 'Procedir'; + +//creation_template.php +$lang['ctemplate_on_server'] = 'Al servidor'; +$lang['ctemplate_no_template'] = 'No s\'ha especificat cap plantilla a les variables del POST.'; +$lang['ctemplate_config_handler'] = 'La teva configuració especifica un manejador de'; +$lang['ctemplate_handler_does_not_exist'] = 'per aquesta plantilla. Però, aquest manejador no existeix al directori \'plantilla/creació\'.'; + +// search.php +$lang['you_have_not_logged_into_server'] = 'Encara no t\'has autenticat al servidor selectionat, no pots fer cap recerca.'; +$lang['click_to_go_to_login_form'] = 'Clica aquí per anar al formulari d\'autenticació'; +$lang['unrecognized_criteria_option'] = 'Opció de criteri desconeguda: '; +$lang['if_you_want_to_add_criteria'] = 'Si vols afegir el teu propi criteri a la llista. Estigues segur d\'editar search.php per manejar-lo. Sortint.'; +$lang['entries_found'] = 'Entrades trobades: '; +$lang['filter_performed'] = 'Filtre realitzat: '; +$lang['search_duration'] = 'Recerca realitzada per phpLDAPadmin a'; +$lang['seconds'] = 'segons'; + +// search_form_advanced.php +$lang['scope_in_which_to_search'] = 'L\'abast en el que buscar'; +$lang['scope_sub'] = 'Sub (tot el sub-arbre)'; +$lang['scope_one'] = 'Un (un nivell per d\'avall de la base)'; +$lang['scope_base'] = 'Base (sols base dn)'; +$lang['standard_ldap_search_filter'] = 'Filtre de recerca estàndar de LDAP. Exemple: (&(sn=Smith)(givenname=David))'; +$lang['search_filter'] = 'Filtre de recerca'; +$lang['list_of_attrs_to_display_in_results'] = 'Una llista d\'atributs per mostrar als resultats (separats per comes)'; +$lang['show_attributes'] = 'Mostrar atributs'; + +// search_form_simple.php +$lang['search_for_entries_whose'] = 'Buscar entrades les quals:'; +$lang['equals'] = 'sigui igual'; +$lang['starts with'] = 'comenci amb'; +$lang['contains'] = 'contingui'; +$lang['ends with'] = 'acabi amb'; +$lang['sounds like'] = 'soni com'; + +// server_info.php +$lang['could_not_fetch_server_info'] = 'No s\'ha pogut treure informació LDAP del servidor'; +$lang['server_info_for'] = 'Informació del servidor per a: '; +$lang['server_reports_following'] = 'El servidor mostra la següent informació sobre ell mateix'; +$lang['nothing_to_report'] = 'Aquest servidor no té res a mostrar.'; + +//update.php +$lang['update_array_malformed'] = 'l\'update_array està malformat. Aixó podria ser una errada del phpLDAPadmin. Si us plau reportala.'; +$lang['could_not_perform_ldap_modify'] = 'No he pogut executar l\'operació ldap_modify.'; + +// update_confirm.php +$lang['do_you_want_to_make_these_changes'] = 'Vols fer aquests canvis?'; +$lang['attribute'] = 'Atribut'; +$lang['old_value'] = 'Valor vell'; +$lang['new_value'] = 'Valor nou'; +$lang['attr_deleted'] = '[atribut esborrat]'; +$lang['commit'] = 'Cometre'; +$lang['cancel'] = 'Cancel.lar'; +$lang['you_made_no_changes'] = 'No has fet cap canvi'; +$lang['go_back'] = 'Tornar enrera'; + +// welcome.php +$lang['welcome_note'] = 'Fes anar el menú de l\'esquerra per a navegar'; + +// view_jpeg_photo.php +$lang['unsafe_file_name'] = 'Nom d\'arxiu insegur: '; +$lang['no_such_file'] = 'Arxiu no existent: '; + +//function.php +$lang['auto_update_not_setup'] = 'Has activat els auto_uid_numbers per %s a la teva configuració, + pero no has especificat l\'auto_uid_number_mechanism. Si us plau soluciona + aquest problema.'; +$lang['uidpool_not_set'] = 'Has especificat l\'auto_uid_number_mechanism com uidpool + a la teva configuració per al servidor %s, pero no has especificat el + audo_uid_number_uid_pool_dn. Si us plau especifica\'l avans de procedir.'; +$lang['uidpool_not_exist'] = 'Sembla ser que el uidPool que has especificat a la teva configuració (%s) + no existeix.'; +$lang['specified_uidpool'] = 'Has especificat l\'auto_uid_number_mechanism com search a la teva + configuració per al servidor %s, pero no has especificat el + auto_uid_number_search_base. Si us plau especifica\'l avans de procedir.'; +$lang['auto_uid_invalid_value'] = 'Has especificat un valor no vàlid per a l\'auto_uid_number_mechanism (%s) + a la teva configuració. Sols uidpool i search son vàlids. + Si us plau soluciona aquest problema.'; +$lang['error_auth_type_config'] = 'Error: Tens un error al teu arxiu de configuració. Els dos únics valors acceptats per + \'auth_type\' a la secció $servers son \'config\' i \'form\'. Tu has ficat \'%s\', + el qual no està acceptat. '; +$lang['php_install_not_supports_tls'] = 'La teva instalació de PHP no soporta TLS'; +$lang['could_not_start_tls'] = 'No he pogut iniciar el TLS.
    Revisa la teva configuració del servidor LDAP.'; +$lang['auth_type_not_valid'] = 'Tens un error a l\'arxiu de configuració. auth_type de %s no es vàlid.'; +$lang['ldap_said'] = 'LDAP diguè: %s

    '; +$lang['ferror_error'] = 'Error'; +$lang['fbrowse'] = 'mostrar'; +$lang['delete_photo'] = 'Esborrar foto'; +$lang['install_not_support_blowfish'] = 'La teva instalació de PHP no soporta el tipus d\'encriptació blowfish.'; +$lang['install_no_mash'] = 'La teva instalació de PHP no té la funció mhash(). No puc fer hash SHA.'; +$lang['jpeg_contains_errors'] = 'jpegPhoto conté errors
    '; +$lang['ferror_number'] = 'Error número: %s (%s)

    '; +$lang['ferror_discription'] = 'Descripció: %s

    '; +$lang['ferror_number_short'] = 'Error número: %s

    '; +$lang['ferror_discription_short'] = 'Descripció: (no hi ha descripció)
    '; +$lang['ferror_submit_bug'] = 'Es una errada del phpLDAPadmin? Si ho és, si us plau diguen\'s-ho.'; +$lang['ferror_unrecognized_num'] = 'Número d\'error desconegut: '; +$lang['ferror_nonfatil_bug'] = '
    +
    + Has trobat un error fatal del phpLDAPadmin!
    Error:%s (%s)
    Arxiu:%s línia %s, caller %s
    Versions:PLA: %s, PHP: %s, SAPI: %s +
    Servidor Web:%s
    + Envía aquesta errada fent click aquí.

    '; +$lang['ferror_congrats_found_bug'] = 'Felicitats! Has trobat una errada al phpLDAPadmin.

    + + + + + + + + + + +
    Error:%s
    Nivell:%s
    Arxiu:%s
    Línia:%s
    Caller:%s
    Versió PLA:%s
    Versió PHP:%s
    PHP SAPI:%s
    Servidor Web:%s
    +
    + Si us plau envía aquesta errada fent click abaix!'; + +//ldif_import_form +$lang['import_ldif_file_title'] = 'Importar arxiu LDIF'; +$lang['select_ldif_file'] = 'Selecciona un arxiu LDIF:'; +$lang['select_ldif_file_proceed'] = 'Procedir &gt;&gt;'; + +//ldif_import +$lang['add_action'] = 'Afegint...'; +$lang['delete_action'] = 'Esborrant...'; +$lang['rename_action'] = 'Renombrant...'; +$lang['modify_action'] = 'Modificant...'; + +$lang['failed'] = 'fallat'; +$lang['ldif_parse_error'] = 'Error de parsejat LDIF'; +$lang['ldif_could_not_add_object'] = 'No he pogut afegir l\'objecte:'; +$lang['ldif_could_not_rename_object'] = 'No he pogut renombrar l\'objecte:'; +$lang['ldif_could_not_delete_object'] = 'No he pogut esborrar l\'objecte:'; +$lang['ldif_could_not_modify_object'] = 'No he pogut modificar l\'objecte:'; +$lang['ldif_line_number'] = 'Línia Número:'; +$lang['ldif_line'] = 'Línia:'; + +?> diff --git a/lang/recoded/de.php b/lang/recoded/de.php new file mode 100644 index 0000000..dbbe09f --- /dev/null +++ b/lang/recoded/de.php @@ -0,0 +1,326 @@ + + * Uwe Ebel + * Modifikationen von Dieter Kluenter + */ + +// Search form +$lang['simple_search_form_str'] = 'Einfache Suche';//'Simple Search Form'; +$lang['advanced_search_form_str'] = 'Experten Suche';//'Advanced Search Form'; +$lang['server'] = 'Server';//'Server'; +$lang['search_for_entries_whose'] = 'Suche nach Einträgen die';//'Search for entries whose'; +$lang['base_dn'] = 'Base DN';//'Base DN'; +$lang['search_scope'] = 'Suchbereich';//'Search Scope'; +$lang['search_ filter'] = 'Suchfilter';//'Search Filter'; +$lang['show_attributes'] = 'Zeige Attribute';//'Show Attributtes'; +$lang['Search'] = 'Suchen';//'Search'; +$lang['equals'] = 'gleich';//'equals'; +$lang['starts_with'] = 'beginnt mit';//'starts with'; +$lang['contains'] = 'enthält';//'contains'; +$lang['ends_with'] = 'endet mit';//'ends with'; +$lang['sounds_like'] = 'änlich wie';//'sounds like'; + +// Tree browser +$lang['request_new_feature'] = 'Anfragen von neuen Möglichkeiten';//'Request a new feature'; +$lang['see_open_requests'] = 'Siehe offene Anfragen';//'see open requests'; +$lang['report_bug'] = 'Einen Fehler berichten';//'Report a bug'; +$lang['see_open_bugs'] = 'Siehe offene Fehler';//'see open bugs'; +$lang['schema'] = 'Schema';//'schema'; +$lang['search'] = 'suche';//'search'; +$lang['refresh'] = 'aktualisieren';//'refresh'; +$lang['create'] = 'neu';//'create'; +$lang['info'] = 'Info';//'info'; +$lang['import'] = 'Import';//'import'; +$lang['logout'] = 'abmelden';//'logout'; +$lang['create_new'] = 'Neuen Eintrag erzeugen';//'Create New'; +$lang['view_schema_for'] = 'Zeige Schema für';//'View schema for'; +$lang['refresh_expanded_containers'] = 'Aktualisiere alle geöffneten Container von';//'Refresh all expanded containers for'; +$lang['create_new_entry_on'] = 'Erzeuge einen neuen Eintrag auf';//'Create a new entry on'; +$lang['view_server_info'] = 'Zeige Server Informationen';//'View server-supplied information'; +$lang['import_from_ldif'] = 'Importiere Einträge von einer LDIF-Datei';//'Import entries from an LDIF file'; +$lang['logout_of_this_server'] = 'Von diesem Server abmelden';//'Logout of this server'; +$lang['logged_in_as'] = 'Angemeldet als: ';//'Logged in as: '; +$lang['read_only'] = 'nur lesen';//'read only'; +$lang['could_not_determine_root'] = 'Konnte die Basis ihres LDAP Verzeichnises nicht ermitteln';//'Could not determin the root of your LDAP tree.'; +$lang['ldap_refuses_to_give_root'] = 'Es scheint das ihr LDAP Server nicht dazu konfiguriert wurde seine Basis bekanntzugeben';//'It appears that the LDAP server has been configured to not reveal its root.'; +$lang['please_specify_in_config'] = 'Bitte in config.php angeben';//'Please specify it in config.php'; +$lang['create_new_entry_in'] = 'Neuen Eintrag erzeugen auf';//'Create a new entry in'; +$lang['login_link'] = 'Anmelden...';//'Login...'; + +// Entry display +$lang['delete_this_entry'] = 'Diesen Eintrag löschen';//'Delete this entry'; +$lang['delete_this_entry_tooltip'] = 'F¨r diese Entscheidung wird nochmals nachgefragt.';//'You will be prompted to confirm this decision'; +$lang['copy_this_entry'] = 'Diesen Eintrag kopieren';//'Copy this entry'; +$lang['copy_this_entry_tooltip'] = 'Kopiere diese Object an eine anderen Ort: ein neuer DN oder einen anderen Server.';//'Copy this object to another location, a new DN, or another server'; +$lang['export_to_ldif'] = 'Exportieren nach LDIF';//'Export to LDIF'; +$lang['export_to_ldif_tooltip'] = 'Speichere einen LDIF-Abzug diese Objektes';//'Save an LDIF dump of this object'; +$lang['export_subtree_to_ldif_tooltip'] = 'Speicher eine LDIF-Abzug ab diesem Objekt und alle seine Untereinträge';//'Save an LDIF dump of this object and all of its children'; +$lang['export_subtree_to_ldif'] = 'Export Unterbaum nach LDIF';//'Export subtree to LDIF'; +$lang['export_to_ldif_mac'] = 'Zeilenende für Macintosh';//'Macintosh style line ends'; +$lang['export_to_ldif_win'] = 'Zeilenende für Windows';//'Windows style line ends'; +$lang['export_to_ldif_unix'] = 'Zeilenende für Unix';//'Unix style line ends'; +$lang['create_a_child_entry'] = 'Erzeuge einen Untereintrag';//'Create a child entry'; +$lang['add_a_jpeg_photo'] = 'Ein JPEG-Foto hinzufügen';//'Add a jpegPhoto'; +$lang['rename_entry'] = 'Eintrag umbenennen';//'Rename Entry'; +$lang['rename'] = 'Umbenennen';//'Rename'; +$lang['add'] = 'Hinzufügen';//'Add'; +$lang['view'] = 'Ansehen';//'View'; +$lang['add_new_attribute'] = 'Neues Attribut hinzufügen';//'Add New Attribute'; +$lang['add_new_attribute_tooltip'] = 'Füge ein neues Attribut/Wert zu diesem Eintrag hinzu';// 'Add a new attribute/value to this entry'; +$lang['internal_attributes'] = 'Interne Attribute';//'Internal Attributes'; +$lang['hide_internal_attrs'] = 'Verdecke interne Attribute';//'Hide internal attributes'; +$lang['show_internal_attrs'] = 'Zeige interne Attribute';//'Show internal attributes'; +$lang['internal_attrs_tooltip'] = 'Attribute werden automatisch vom System erzeugt.';//'Attributes set automatically by the system'; +$lang['entry_attributes'] = 'Attribute des Eintrages';//'Entry Attributes'; +$lang['attr_name_tooltip'] = 'Klicken sie um die Schemadefinition für den Attributtyp \'%s\' anzuzeigen.';//'Click to view the schema defintion for attribute type \'%s\''; +$lang['click_to_display'] = 'Klicken zum Ansehen';//'click to display'; +$lang['hidden'] = 'verdeckt';//'hidden'; +$lang['none'] = 'Keine';//'none'; +$lang['save_changes'] = 'Änderungen speichern';//'Save Changes'; +$lang['add_value'] = 'Wert hinzufügen';//'add value'; +$lang['add_value_tooltip'] = 'Füge einen weiteren Wert dem Attribut hinzu';//'Add an additional value to this attribute'; +$lang['refresh_entry'] = 'Auffrischen';// 'Refresh'; +$lang['refresh_this_entry'] = 'Aktualisiere den Entrag';//'Refresh this entry'; +$lang['delete_hint'] = 'Hinweis: Um ein Attribut zu löschen, leeren Sie den Inhalt des Wertes.';//'Hint: To delete an attribute, empty the text field and click save.'; +$lang['attr_schema_hint'] = 'Tipp:Um das Schema für ein Attribut anzusehen, genügt ein klick auf den Attributnamen';//'Hint: To view the schema for an attribute, click the attribute name.'; +$lang['attrs_modified'] = 'Einige Attribute (%s) wurden verändert und sind hervorgehoben.';//'Some attributes (%s) were modified and are highlighted below.'; +$lang['attr_modified'] = 'Ein Attribut (%s) wurde verändert und ist hervorgehoben.';//'An attribute (%s) was modified and is highlighted below.'; +$lang['viewing_read_only'] = 'Zeige Eintrag im Nurlesemodus';//'Viewing entry in read-only mode.'; +$lang['change_entry_rdn'] = 'Ändere den RDN des Eintrages';//'Change this entry\'s RDN'; +$lang['no_new_attrs_available'] = 'Keine weiteren Attribute verfügbar für diesen Eintrag';//'no new attributes available for this entry'; +$lang['binary_value'] = 'Binärwert';//'Binary value'; +$lang['add_new_binary_attr'] = 'Neuen Binärwert hinzufügen';//'Add New Binary Attribute'; +$lang['add_new_binary_attr_tooltip'] = 'Füge einen neuen Binäwert (Attribut/Wert) aus einer Datei hinzu.';//'Add a new binary attribute/value from a file'; +$lang['alias_for'] = 'Alias für';//'Alias for'; +$lang['download_value'] = 'Wert herunterladen';//'download value'; +$lang['delete_attribute'] = 'Lösche Attribut';//'delete attribute'; +$lang['true'] = 'Wahr';//'true'; +$lang['false'] = 'Falsch';//'false'; +$lang['none_remove_value'] = 'nichts, entferne den Wert';//?? //'none, remove value'; +$lang['really_delete_attribute'] = 'Lösche das Attribut wirklich';//'Really delete attribute'; + +// Schema browser +$lang['the_following_objectclasses'] = 'Die folgenden Objektklassen werden vom LDAP-Server unterstützt.';//'The following objectClasses are supported by this LDAP server.'; +$lang['the_following_attributes'] = 'Die folgenden Attribute werden vom LDAP-Server unterstützt.';//'The following attributeTypes are supported by this LDAP server.'; +$lang['the_following_matching'] = 'Die folgenden Suchregeln werden vom LDAP-Server unterstützt.';//'The following matching rules are supported by this LDAP server.'; +$lang['the_following_syntaxes'] = 'Die folgenden Syntaxe werden vom LDAP-Server unterstützt.';//'The following syntaxes are supported by this LDAP server.'; +$lang['jump_to_objectclass'] = 'Gehe zur objectClass';//'Jump to an objectClass'; +$lang['jump_to_attr'] = 'Gehe zum Attribut';//'Jump to an attribute'; +$lang['schema_for_server'] = 'Schema für Server';//'Schema for server'; +$lang['required_attrs'] = 'Notwendige Attribute';//'Required Attributes'; +$lang['optional_attrs'] = 'Optionale Attribute';//'Optional Attributes'; +$lang['OID'] = 'OID';//'OID'; +$lang['desc'] = 'Beschreibung';//'Description'; +$lang['name'] = 'Name';//'Name'; +$lang['is_obsolete'] = 'Diese objectClass ist veraltet';//'This objectClass is obsolete'; +$lang['inherits'] = 'Abgeleitet von';//'Inherits'; +$lang['jump_to_this_oclass'] = 'Gehe zur objectClass Definition';//'Jump to this objectClass definition'; +$lang['matching_rule_oid'] = 'Treffer-Regel OID';//'Matching Rule OID'; +$lang['syntax_oid'] = 'Syntax OID';//'Syntax OID'; +$lang['not_applicable'] = 'keine Angabe';//'not applicable'; +$lang['not_specified'] = 'nicht spezifiziert';//not specified'; + +// Deleting entries +$lang['entry_deleted_successfully'] = 'Der Eintrag \'%s\' wurde erfolgreich gelöscht.';//'Entry \'%s\' deleted successfully.'; +$lang['you_must_specify_a_dn'] = 'Ein DN muss angegeben werden.';//'You must specify a DN'; +$lang['could_not_delete_entry'] = 'Konnte den Eintrag nicht löschen: %s';//'Could not delete the entry: %s'; + + +// Adding objectClass form +$lang['new_required_attrs'] = 'Neue benötigte Attribute';//'New Required Attributes'; +$lang['requires_to_add'] = 'Diese Aktion zwingt sie folgendes hinzuzufügen';//'This action requires you to add'; +$lang['new_attributes'] = 'neue Attribute';//'new attributes'; +$lang['new_required_attrs_instructions'] = 'Anleitung: Um diese objectClass hinzuzuf¨gen müssen sie ';//'Instructions: In order to add this objectClass to this entry, you must specify'; +$lang['that_this_oclass_requires'] = 'die von dieser objectClass benötigt werden. Sie können dies in diesem Formular machen.';//'that this objectClass requires. You can do so in this form.'; +$lang['add_oclass_and_attrs'] = 'ObjectClass und Attribute hinzufügen';//'Add ObjectClass and Attributes'; + +// General +$lang['chooser_link_tooltip'] = 'Klicken um einen Eintrag (DN) grafisch auszuwählen.';//"Click to popup a dialog to select an entry (DN) graphically'; +$lang['no_updates_in_read_only_mode'] = 'Sie können keine Aktualisierungen durchführen während der Server sich im \'nur lese\'-modus befindet';//'You cannot perform updates while server is in read-only mode'; +$lang['bad_server_id'] = 'Ungültige Server ID';//'Bad server id'; +$lang['not_enough_login_info'] = 'Nicht genügend Angaben zur Anmeldung am Server. Bitte überprüfen sie ihre Konfiguration';//'Not enough information to login to server. Please check your configuration.'; +$lang['could_not_connect'] = 'Konnte keine Verbindung zum LDAP Server herstellen.';//'Could not connect to LDAP server.'; +$lang['could_not_perform_ldap_mod_add'] = 'Kann keine \'ldap_mod_add\' Operationen durchführen.';//'Could not perform ldap_mod_add operation.'; +$lang['bad_server_id_underline'] = 'Ungültige Server ID:';//"Bad server_id: '; +$lang['success'] = 'Erfolgreich';//"Success'; +$lang['server_colon_pare'] = 'Server';//"Server: '; +$lang['look_in'] = 'Sehe nach in:';//"Looking in: '; +$lang['missing_server_id_in_query_string'] = 'Keine Server ID in der Anfrage angegeben';//'No server ID specified in query string!'; +$lang['missing_dn_in_query_string'] = 'Kein DN in der Anfrage angegeben';//'No DN specified in query string!'; +$lang['back_up_p'] = 'Backup...';//"Back Up...'; +$lang['no_entries'] = 'Keine Einträge';//"no entries'; +$lang['not_logged_in'] = 'Nicht eingeloggt';//"Not logged in'; +$lang['could_not_det_base_dn'] = 'Konnten Basis-DN nicht ermitteln.';//"Could not determine base DN'; + + +// Add value form +$lang['add_new'] = 'Neu hinzufügen';//'Add new'; +$lang['value_to'] = 'Wert auf';//'value to'; +$lang['server'] = 'Server';//'Server'; +//also used in copy_form.php +$lang['distinguished_name'] = 'Distinguished Name (eindeutiger Name)';// 'Distinguished Name'; +$lang['current_list_of'] = 'Aktuelle Liste von';//'Current list of'; +$lang['values_for_attribute'] = 'Werte des Attributes';//'values for attribute'; +$lang['inappropriate_matching_note'] = 'Info: Sie werden einen "inappropriate matching" Fehler erhalten, falls sie nicht
    '; //'Note: You will get an "inappropriate matching" error if you have not
    ' . + 'eine EQUALITY Regel für dieses Attribut auf ihren LDAP Server eingerichtet haben.';//'setup an EQUALITY rule on your LDAP server for this attribute.'; +$lang['enter_value_to_add'] = 'Geben sie den Wert ein den sie hinzufügen möchten:';//'Enter the value you would like to add:'; +$lang['new_required_attrs_note'] = 'Info: Sie werden gegebenenfalles gezwungen sein neue Attribute hinzuzufügen.';//'Note: you may be required to enter new attributes
    that this objectClass requires.'; +$lang['syntax'] = 'Syntax';//'Syntax'; + +//Copy.php +$lang['copy_server_read_only'] = 'Sie können keine Aktualisierungen durchführen während der Server sich im \'nur lese\'-modus befindet';//"You cannot perform updates while server is in read-only mode'; +$lang['copy_dest_dn_blank'] = 'Sie haben kein Ziel DN angegeben';//"You left the destination DN blank.'; +$lang['copy_dest_already_exists'] = 'Der Zieleintrag (%s) existiert bereits.';//"The destination entry (%s) already exists.'; +$lang['copy_dest_container_does_not_exist'] = 'Der Zielcontainer (%s) existiert nicht.';//'The destination container (%s) does not exist.'; +$lang['copy_source_dest_dn_same'] = 'Ursprung DN und Ziel DN sind identisch';//"The source and destination DN are the same.'; +$lang['copy_copying'] = 'Kopieren';//"Copying '; +$lang['copy_recursive_copy_progress'] = 'Rekursives Kopieren im Gange';//"Recursive copy progress'; +$lang['copy_building_snapshot'] = 'Erzeuge Speicherauszug des zu kopierenden Verzeichnisses';//"Building snapshot of tree to copy... '; +$lang['copy_successful_like_to'] = 'Kopieren erfolgreich! Wollen sie den';//"Copy successful! Would you like to '; +$lang['copy_view_new_entry'] = 'neuen Eintrag ansehen';//"view the new entry'; +$lang['copy_failed'] = 'Kopieren des DN fehlgeschlagen: ';//'Failed to copy DN: '; + + +//edit.php +$lang['missing_template_file'] = 'Warnung: Template Datei nicht gefunden';//'Warning: missing template file, '; +$lang['using_default'] = 'Standardeinstellung verwenden';//'Using default.'; + +//copy_form.php +$lang['copyf_title_copy'] = 'Kopiere';//"Copy '; +$lang['copyf_to_new_object'] = 'in ein neues Objekt';//"to a new object'; +$lang['copyf_dest_dn'] = 'Ziel DN';//"Destination DN'; +$lang['copyf_dest_dn_tooltip'] = 'Der komplette DN des Eintrages der beim Kopieren erzeugt wird.';//'The full DN of the new entry to be created when copying the source entry'; +$lang['copyf_dest_server'] = 'Zielserver';//"Destination Server'; +$lang['copyf_note'] = 'Info: Kopieren zwischen unterschiedlichen Servern funktioniert nur wenn keine Unvereinbarkeiten im Schema auftreten';//"Note: Copying between different servers only works if there are no schema violations'; +$lang['copyf_recursive_copy'] = 'Rekursiv kopiert auch alle Unterobjekte';//"Recursively copy all children of this object as well.'; + +//create.php +$lang['create_required_attribute'] = 'Fehler, sie haben einen Wert für ein benötigtes Attribut frei gelassen.';//"Error, you left the value blank for required attribute '; +$lang['create_redirecting'] = 'Weiterleitung';//"Redirecting'; +$lang['create_here'] = 'hier';//"here'; +$lang['create_could_not_add'] = 'Konnte das Objekt dem LDAP-Server nicht hinzufügen.';//"Could not add the object to the LDAP server.'; + +//create_form.php +$lang['createf_create_object'] = 'Erzeuge einen neuen Eintag';//"Create Object'; +$lang['createf_choose_temp'] = 'Vorlage wählen';//"Choose a template'; +$lang['createf_select_temp'] = 'Wählen sie eine Vorlage für das Objekt';//"Select a template for the creation process'; +$lang['createf_proceed'] = 'Weiter';//"Proceed >>'; + +//creation_template.php +$lang['ctemplate_on_server'] = 'Auf dem Server';//"On server'; +$lang['ctemplate_no_template'] = 'Keine Vorlage angegeben in den POST Variabeln';//"No template specified in POST variables.'; +$lang['ctemplate_config_handler'] = 'Ihre Konfiguration spezifiziert für diese Vorlage die Routine';//"Your config specifies a handler of'; +$lang['ctemplate_handler_does_not_exist'] = '. Diese Routine existiert nicht im \'templates/creation\' Verzeichnis';//"for this template. But, this handler does not exist in the 'templates/creation' directory.'; + +// search.php +$lang['you_have_not_logged_into_server'] = 'Sie haben sich am ausgewählten Server nicht angemeldet. Sie k&oouml;nnen keine Suche durchführen.';//'You have not logged into the selected server yet, so you cannot perform searches on it.'; +$lang['click_to_go_to_login_form'] = 'Klicken sie hier um zur Anmeldeseite zu gelangen';//'Click here to go to the login form'; +$lang['unrecognized_criteria_option'] = 'Unbekannte Option';// 'Unrecognized criteria option: '; +$lang['if_you_want_to_add_criteria'] = 'Falls eigene Auswahlkriterien hinzugefügt werden sollen, muss \'search.php\' editiert werden';//'If you want to add your own criteria to the list. Be sure to edit search.php to handle them. Quitting.'; +$lang['entries_found'] = 'Gefundene Einträge: ';//'Entries found: '; +$lang['filter_performed'] = 'Angewanter Filter: ';//'Filter performed: '; +$lang['search_duration'] = 'Suche durch phpLDAPadmin ausgeführt in';//'Search performed by phpLDAPadmin in'; +$lang['seconds'] = 'Sekunden';//'seconds'; + +// search_form_advanced.php +$lang['scope_in_which_to_search'] = 'Bereich der durchsucht wird.';//'The scope in which to search'; +$lang['scope_sub'] = 'Sub (Suchbase und alle Unterverzeichnisebenen)';//'Sub (entire subtree)'; +$lang['scope_one'] = 'One (Suchbasis und eine Unterverzeichnisebene)';//'One (one level beneath base)'; +$lang['scope_base'] = 'Base (Nur Suchbasis)';//'Base (base dn only)'; +$lang['standard_ldap_search_filter'] = 'Standard LDAP Suchfilter. Bsp.: (&(sn=Smith)(givenname=David))';//'Standard LDAP search filter. Example: (&(sn=Smith)(givenname=David))'; +$lang['search_filter'] = 'Suchfilter';//'Search Filter'; +$lang['list_of_attrs_to_display_in_results'] = 'Kommaseparierte Liste der anzuzeigenden Attribute.';//'A list of attributes to display in the results (comma-separated)'; +$lang['show_attributes'] = 'Zeige Attribute';//'Show Attributes'; + +// search_form_simple.php +$lang['search_for_entries_whose'] = 'Suche nach Einträgen welche:';//'Search for entries whose:'; +$lang['equals'] = 'entspricht';//'equals'; +$lang['starts with'] = 'beginnt mit';//'starts with'; +$lang['contains'] = 'enthält';//'contains'; +$lang['ends with'] = 'endet auf';//'ends with'; +$lang['sounds like'] = 'klingt wie';//'sounds like'; + +// server_info.php +$lang['could_not_fetch_server_info'] = 'Konnte keine LDAP Informationen vom Server empfangen';//'Could not retrieve LDAP information from the server'; +$lang['server_info_for'] = 'Serverinformationen für: ';//'Server info for: '; +$lang['server_reports_following'] = 'Der Server meldete die folgenden Informationen über sich';//'Server reports the following information about itself'; +$lang['nothing_to_report'] = 'Der Server hat keine Informationen gemeldet';//'This server has nothing to report.'; + +//update.php +$lang['update_array_malformed'] = 'Das \'update_array\' wird falsch dargestellt. Dies könnte ein phpLDAPadmin Fehler sein. Bitte Berichten sie uns davon.';//'update_array is malformed. This might be a phpLDAPadmin bug. Please report it.'; +$lang['could_not_perform_ldap_modify'] = 'Konnte die \'ldap_modify\' Operation nicht ausführen.';//'Could not perform ldap_modify operation.'; + +// update_confirm.php +$lang['do_you_want_to_make_these_changes'] = 'Wollen sie diese Änderungen übernehmen?';//'Do you want to make these changes?'; +$lang['attribute'] = 'Attribute';//'Attribute'; +$lang['old_value'] = 'Alter Wert';//'Old Value'; +$lang['new_value'] = 'Neuer Wert';//'New Value'; +$lang['attr_deleted'] = '[Wert gelöscht]';//'[attribute deleted]'; +$lang['commit'] = 'Anwenden';//'Commit'; +$lang['cancel'] = 'Verwerfen';//'Cancel'; +$lang['you_made_no_changes'] = 'Sie haben keine Änderungen vorgenommen.';//'You made no changes'; +$lang['go_back'] = 'Zurück';//'Go back'; + +// welcome.php +$lang['welcome_note'] = 'Benützen sie das Menu auf der linken Seite zur Navigation.';//'Use the menu to the left to navigate'; + +// view_jpeg_photo.php +$lang['unsafe_file_name'] = 'Unsicherer Dateiname:';//'Unsafe file name: '; +$lang['no_such_file'] = 'Keine Datei unter diesem Namen';//'No such file: '; + +//function.php +$lang['auto_update_not_setup'] = 'auto_uid_numbers wurde in der Konfiguration (%s aktiviert, aber der Mechanismus (auto_uid_number_mechanism) nicht. Bitte diese Problem korrigieren.';//"You have enabled auto_uid_numbers for %s in your configuration, but you have not specified the auto_uid_number_mechanism. Please correct this problem.'; +$lang['uidpool_not_set'] = 'Der Mechanismus auto_uid_number_mechanism ist als uidpool für den Server %s festgelegt, jedoch wurde nicht der auto_uid_number_uid_pool_dn festgelegt. Bitte korrigieren und dann weiter verfahren.';//"You specified the auto_uid_number_mechanism as uidpool in your configuration for server %s, but you did not specify the audo_uid_number_uid_pool_dn. Please specify it before proceeding.'; + +$lang['uidpool_not_exist'] = 'Es scheint so, dass der uidPool - der in der Konfiguration festgelegt ist - nicht vorhanden ist.';//"It appears that the uidPool you specified in your configuration (%s) does not exist.'; + +$lang['specified_uidpool'] = 'Der auto_uid_number_mechanism wurde auf search in der Konfiguration des Servers %s festgelegt, aber es wurde der Wert fü auto_uid_number_search_base nicht gesetzt. Bitte korrigieren und dann weiter verfahren.';//"You specified the auto_uid_number_mechanism as search in your configuration for server %s, but you did not specify the auto_uid_number_search_base. Please specify it before proceeding.'; + +$lang['auto_uid_invalid_value'] = 'Es wurde ein ungültiger Wert für auto_uid_number_mechanism(%s) festgelegt. Gültig sind nur die Werte uidpool und search. Bitte den Fehler korrigieren. ';//"You specified an invalid value for auto_uid_number_mechanism (%s) in your configration. Only uidpool and search are valid. Please correct this problem.'; + +$lang['error_auth_type_config'] = 'Fehler: Ein Fehler ist in der Konfiguration (config.php) aufgetreten. Die einzigen beiden erlaubten Werte im Konfigurationsteil \'auth_type\' zu einem LDAP-Server ist \'config\' oder \'form\'. Eingetragen ist aber %s, was nicht erlaubt ist.';//"Error: You have an error in your config file. The only two allowed values for 'auth_type' in the $servers section are 'config' and 'form'. You entered '%s', which is not allowed. '; + +$lang['php_install_not_supports_tls'] = 'Die verwendete PHP-Version unterstützt kein TLS (verschlüsselte Verbindung).';//"Your PHP install does not support TLS'; +$lang['could_not_start_tls'] = 'TLS konnte nicht gestartet werden.
    Bitte die LDAP-Server-Konfiguration überprüfen.';//"Could not start TLS.
    Please check your LDAP server configuration.'; +$lang['auth_type_not_valid'] = 'Die Konfigurationsdatei enthält einen Fehler. Der Eintrag für \'auth_type\' %s ist nicht gü,ltig';// 'You have an error in your config file. auth_type of %s is not valid.'; +$lang['ldap_said'] = 'LDAP meldet: %s

    ';//"LDAP said: %s

    '; +$lang['ferror_error'] = 'Fehler';//"Error'; +$lang['fbrowse'] = 'Überfliegen';//"browse'; +$lang['delete_photo'] = 'Lösche Foto';//"Delete Photo'; +$lang['install_not_support_blowfish'] = 'Die verwendete PHP-Version unterstützt keine Blowfish Verschlüsselung.';//"Your PHP install does not support blowfish encryption.'; +$lang['install_no_mash'] = 'Die verwendete PHP-Version unterstützt nicht die Funktion mhash(), daher kann kein SHA Hash verwendet werden.';// "Your PHP install does not have the mhash() function. Cannot do SHA hashes.'; +$lang['jpeg_contains_errors'] = 'Die Bilddatei enthält Fehler';//"jpegPhoto contains errors
    '; +$lang['ferror_number'] = 'Fehlernummer: %s(%s)

    ';//"Error number: %s (%s)

    '; +$lang['ferror_discription'] ='Beschreibung: %s

    ';// "Description: %s

    '; +$lang['ferror_number_short'] = 'Fehlernummer:%s

    ';//"Error number: %s

    '; +$lang['ferror_discription_short'] = 'Beschreibung: (keine Beschreibung verfügbar)
    ';//"Description: (no description available)
    '; +$lang['ferror_submit_bug'] = 'Ist das ein phpLDAPadmin Fehler? Wenn dies so ist, dann bitte darüber berichten';//"Is this a phpLDAPadmin bug? If so, please report it.'; +$lang['ferror_unrecognized_num'] = 'Unbekannte Fehlernummer:';//"Unrecognized error number: '; + +$lang['ferror_nonfatil_bug'] = '
    Ein nicht fataler Fehler in phpLDAPadmin gefunden!
    Fehler:%s (%s)
    Datei:%sZeile:%s, aufgerufen von %s
    Version:PLA: %s, PHP: %s, SAPI: %s
    Web server:%s
    Bitte diesen Fehler melden (durch anklicken)..

    ';//"
    You found a non-fatal phpLDAPadmin bug!
    Error:%s (%s)
    File:%s line %s, caller %s
    Versions:PLA: %s, PHP: %s, SAPI: %s
    Web server:%s
    Please report this bug by clicking here.

    '; + +$lang['ferror_congrats_found_bug'] = '
    Gratulation, einen Fehler in phpLDAPadmin gefunden!
    Fehler:%s (%s)
    Datei:%sZeile:%s, aufgerufen von %s
    Version:PLA: %s, PHP: %s, SAPI: %s
    Web server:%s
    Bitte diesen Fehler melden (durch anklicken)..

    ';//"Congratulations! You found a bug in phpLDAPadmin.

    Error:%s
    Level:%s
    File:%s
    Line:%s
    Caller:%s
    PLA Version:%s
    PHP Version:%s
    PHP SAPI:%s
    Web server:%s

    Please report this bug by clicking below!'; + +//ldif_import_form +$lang['import_ldif_file_title'] = 'Importiere LDIF Datei';//'Import LDIF File'; +$lang['select_ldif_file'] = 'LDIF Datei auswählen';//'Select an LDIF file:'; +$lang['select_ldif_file_proceed'] = 'Ausführen >>';//'Proceed >>'; + +//ldif_import +$lang['add_action'] = 'Hinzufügen...';//'Adding...'; +$lang['delete_action'] = 'Entfernen...';//'Deleting...'; +$lang['rename_action'] = 'Umbenennen...';//'Renaming...'; +$lang['modify_action'] = 'Abändern...';//'Modifying...'; + +$lang['failed'] = 'fehlgeschlagen';//'failed'; +$lang['ldif_parse_error'] = 'LDIF Pars Fehler';//'LDIF Parse Error'; +$lang['ldif_could_not_add_object'] = 'Konnte das Objekt nicht hinzufügen:';//'Could not add object:'; +$lang['ldif_could_not_rename_object'] = 'Konnte das Objekt nicht umbenennen:';//'Could not rename object:'; +$lang['ldif_could_not_delete_object'] = 'Konnte das Objekt nicht entfernen:';//'Could not delete object:'; +$lang['ldif_could_not_modify_object'] = 'Konnte das Objekt nicht abändern:';//'Could not modify object:'; +$lang['ldif_line_number'] = 'Anzahl Zeilen:';//'Line Number:'; +$lang['ldif_line'] = 'Zeile:';//'Line:'; + +?> diff --git a/lang/recoded/en.php b/lang/recoded/en.php new file mode 100644 index 0000000..f112033 --- /dev/null +++ b/lang/recoded/en.php @@ -0,0 +1,354 @@ +DN'; +$lang['search_scope'] = 'Search Scope'; +$lang['search_ filter'] = 'Search Filter'; +$lang['show_attributes'] = 'Show Attributtes'; +$lang['Search'] = 'Search'; +$lang['equals'] = 'equals'; +$lang['starts_with'] = 'starts with'; +$lang['contains'] = 'contains'; +$lang['ends_with'] = 'ends with'; +$lang['sounds_like'] = 'sounds like'; + +// Tree browser +$lang['request_new_feature'] = 'Request a new feature'; +$lang['see_open_requests'] = 'see open requests'; +$lang['report_bug'] = 'Report a bug'; +$lang['see_open_bugs'] = 'see open bugs'; +$lang['schema'] = 'schema'; +$lang['search'] = 'search'; +$lang['create'] = 'create'; +$lang['info'] = 'info'; +$lang['import'] = 'import'; +$lang['refresh'] = 'refresh'; +$lang['logout'] = 'logout'; +$lang['create_new'] = 'Create New'; +$lang['view_schema_for'] = 'View schema for'; +$lang['refresh_expanded_containers'] = 'Refresh all expanded containers for'; +$lang['create_new_entry_on'] = 'Create a new entry on'; +$lang['view_server_info'] = 'View server-supplied information'; +$lang['import_from_ldif'] = 'Import entries from an LDIF file'; +$lang['logout_of_this_server'] = 'Logout of this server'; +$lang['logged_in_as'] = 'Logged in as: '; +$lang['read_only'] = 'read only'; +$lang['could_not_determine_root'] = 'Could not determine the root of your LDAP tree.'; +$lang['ldap_refuses_to_give_root'] = 'It appears that the LDAP server has been configured to not reveal its root.'; +$lang['please_specify_in_config'] = 'Please specify it in config.php'; +$lang['create_new_entry_in'] = 'Create a new entry in'; +$lang['login_link'] = 'Login...'; + +// Entry display +$lang['delete_this_entry'] = 'Delete this entry'; +$lang['delete_this_entry_tooltip'] = 'You will be prompted to confirm this decision'; +$lang['copy_this_entry'] = 'Copy this entry'; +$lang['copy_this_entry_tooltip'] = 'Copy this object to another location, a new DN, or another server'; +$lang['export_to_ldif'] = 'Export to LDIF'; +$lang['export_to_ldif_tooltip'] = 'Save an LDIF dump of this object'; +$lang['export_subtree_to_ldif_tooltip'] = 'Save an LDIF dump of this object and all of its children'; +$lang['export_subtree_to_ldif'] = 'Export subtree to LDIF'; +$lang['export_to_ldif_mac'] = 'Macintosh style line ends'; +$lang['export_to_ldif_win'] = 'Windows style line ends'; +$lang['export_to_ldif_unix'] = 'Unix style line ends'; +$lang['create_a_child_entry'] = 'Create a child entry'; +$lang['add_a_jpeg_photo'] = 'Add a jpegPhoto'; +$lang['rename_entry'] = 'Rename Entry'; +$lang['rename'] = 'Rename'; +$lang['add'] = 'Add'; +$lang['view'] = 'View'; +$lang['add_new_attribute'] = 'Add New Attribute'; +$lang['add_new_attribute_tooltip'] = 'Add a new attribute/value to this entry'; +$lang['internal_attributes'] = 'Internal Attributes'; +$lang['hide_internal_attrs'] = 'Hide internal attributes'; +$lang['show_internal_attrs'] = 'Show internal attributes'; +$lang['internal_attrs_tooltip'] = 'Attributes set automatically by the system'; +$lang['entry_attributes'] = 'Entry Attributes'; +$lang['attr_name_tooltip'] = 'Click to view the schema defintion for attribute type \'%s\''; +$lang['click_to_display'] = 'click \'+\' to display'; +$lang['hidden'] = 'hidden'; +$lang['none'] = 'none'; +$lang['save_changes'] = 'Save Changes'; +$lang['add_value'] = 'add value'; +$lang['add_value_tooltip'] = 'Add an additional value to attribute \'%s\''; +$lang['refresh_entry'] = 'Refresh'; +$lang['refresh_this_entry'] = 'Refresh this entry'; +$lang['delete_hint'] = 'Hint: To delete an attribute, empty the text field and click save.'; +$lang['attr_schema_hint'] = 'Hint: To view the schema for an attribute, click the attribute name.'; +$lang['attrs_modified'] = 'Some attributes (%s) were modified and are highlighted below.'; +$lang['attr_modified'] = 'An attribute (%s) was modified and is highlighted below.'; +$lang['viewing_read_only'] = 'Viewing entry in read-only mode.'; +$lang['change_entry_rdn'] = 'Change this entry\'s RDN'; +$lang['no_new_attrs_available'] = 'no new attributes available for this entry'; +$lang['binary_value'] = 'Binary value'; +$lang['add_new_binary_attr'] = 'Add New Binary Attribute'; +$lang['add_new_binary_attr_tooltip'] = 'Add a new binary attribute/value from a file'; +$lang['alias_for'] = 'Note: \'%s\' is an alias for \'%s\''; +$lang['download_value'] = 'download value'; +$lang['delete_attribute'] = 'delete attribute'; +$lang['true'] = 'true'; +$lang['false'] = 'false'; +$lang['none_remove_value'] = 'none, remove value'; +$lang['really_delete_attribute'] = 'Really delete attribute'; + +// Schema browser +$lang['the_following_objectclasses'] = 'The following objectClasses are supported by this LDAP server.'; +$lang['the_following_attributes'] = 'The following attributeTypes are supported by this LDAP server.'; +$lang['the_following_matching'] = 'The following matching rules are supported by this LDAP server.'; +$lang['the_following_syntaxes'] = 'The following syntaxes are supported by this LDAP server.'; +$lang['jump_to_objectclass'] = 'Jump to an objectClass'; +$lang['jump_to_attr'] = 'Jump to an attribute'; +$lang['schema_for_server'] = 'Schema for server'; +$lang['required_attrs'] = 'Required Attributes'; +$lang['optional_attrs'] = 'Optional Attributes'; +$lang['OID'] = 'OID'; +$lang['desc'] = 'Description'; +$lang['name'] = 'Name'; +$lang['is_obsolete'] = 'This objectClass is obsolete'; +$lang['inherits'] = 'Inherits'; +$lang['jump_to_this_oclass'] = 'Jump to this objectClass definition'; +$lang['matching_rule_oid'] = 'Matching Rule OID'; +$lang['syntax_oid'] = 'Syntax OID'; +$lang['not_applicable'] = 'not applicable'; +$lang['not_specified'] = 'not specified'; + +// Deleting entries +$lang['entry_deleted_successfully'] = 'Entry \'%s\' deleted successfully.'; +$lang['you_must_specify_a_dn'] = 'You must specify a DN'; +$lang['could_not_delete_entry'] = 'Could not delete the entry: %s'; + +// Adding objectClass form +$lang['new_required_attrs'] = 'New Required Attributes'; +$lang['requires_to_add'] = 'This action requires you to add'; +$lang['new_attributes'] = 'new attributes'; +$lang['new_required_attrs_instructions'] = 'Instructions: In order to add this objectClass to this entry, you must specify'; +$lang['that_this_oclass_requires'] = 'that this objectClass requires. You can do so in this form.'; +$lang['add_oclass_and_attrs'] = 'Add ObjectClass and Attributes'; + +// General +$lang['chooser_link_tooltip'] = 'Click to popup a dialog to select an entry (DN) graphically'; +$lang['no_updates_in_read_only_mode'] = 'You cannot perform updates while server is in read-only mode'; +$lang['bad_server_id'] = 'Bad server id'; +$lang['not_enough_login_info'] = 'Not enough information to login to server. Please check your configuration.'; +$lang['could_not_connect'] = 'Could not connect to LDAP server.'; +$lang['could_not_perform_ldap_mod_add'] = 'Could not perform ldap_mod_add operation.'; +$lang['bad_server_id_underline'] = 'Bad server_id: '; +$lang['success'] = 'Success'; +$lang['server_colon_pare'] = 'Server: '; +$lang['look_in'] = 'Looking in: '; +$lang['missing_server_id_in_query_string'] = 'No server ID specified in query string!'; +$lang['missing_dn_in_query_string'] = 'No DN specified in query string!'; +$lang['back_up_p'] = 'Back Up...'; +$lang['no_entries'] = 'no entries'; +$lang['not_logged_in'] = 'Not logged in'; +$lang['could_not_det_base_dn'] = 'Could not determine base DN'; + +// Add value form +$lang['add_new'] = 'Add new'; +$lang['value_to'] = 'value to'; +$lang['distinguished_name'] = 'Distinguished Name'; +$lang['current_list_of'] = 'Current list of'; +$lang['values_for_attribute'] = 'values for attribute'; +$lang['inappropriate_matching_note'] = 'Note: You will get an "inappropriate matching" error if you have not
    ' . + 'setup an EQUALITY rule on your LDAP server for this attribute.'; +$lang['enter_value_to_add'] = 'Enter the value you would like to add:'; +$lang['new_required_attrs_note'] = 'Note: you may be required to enter new attributes that this objectClass requires'; +$lang['syntax'] = 'Syntax'; + +//copy.php +$lang['copy_server_read_only'] = 'You cannot perform updates while server is in read-only mode'; +$lang['copy_dest_dn_blank'] = 'You left the destination DN blank.'; +$lang['copy_dest_already_exists'] = 'The destination entry (%s) already exists.'; +$lang['copy_dest_container_does_not_exist'] = 'The destination container (%s) does not exist.'; +$lang['copy_source_dest_dn_same'] = 'The source and destination DN are the same.'; +$lang['copy_copying'] = 'Copying '; +$lang['copy_recursive_copy_progress'] = 'Recursive copy progress'; +$lang['copy_building_snapshot'] = 'Building snapshot of tree to copy... '; +$lang['copy_successful_like_to'] = 'Copy successful! Would you like to '; +$lang['copy_view_new_entry'] = 'view the new entry'; +$lang['copy_failed'] = 'Failed to copy DN: '; + +//edit.php +$lang['missing_template_file'] = 'Warning: missing template file, '; +$lang['using_default'] = 'Using default.'; + +//copy_form.php +$lang['copyf_title_copy'] = 'Copy '; +$lang['copyf_to_new_object'] = 'to a new object'; +$lang['copyf_dest_dn'] = 'Destination DN'; +$lang['copyf_dest_dn_tooltip'] = 'The full DN of the new entry to be created when copying the source entry'; +$lang['copyf_dest_server'] = 'Destination Server'; +$lang['copyf_note'] = 'Hint: Copying between different servers only works if there are no schema violations'; +$lang['copyf_recursive_copy'] = 'Recursively copy all children of this object as well.'; + +//create.php +$lang['create_required_attribute'] = 'You left the value blank for required attribute %s.'; +$lang['create_redirecting'] = 'Redirecting'; +$lang['create_here'] = 'here'; +$lang['create_could_not_add'] = 'Could not add the object to the LDAP server.'; + +//create_form.php +$lang['createf_create_object'] = 'Create Object'; +$lang['createf_choose_temp'] = 'Choose a template'; +$lang['createf_select_temp'] = 'Select a template for the creation process'; +$lang['createf_proceed'] = 'Proceed'; + +//creation_template.php +$lang['ctemplate_on_server'] = 'On server'; +$lang['ctemplate_no_template'] = 'No template specified in POST variables.'; +$lang['ctemplate_config_handler'] = 'Your config specifies a handler of'; +$lang['ctemplate_handler_does_not_exist'] = 'for this template. But, this handler does not exist in the templates/creation directory.'; + +// search.php +$lang['you_have_not_logged_into_server'] = 'You have not logged into the selected server yet, so you cannot perform searches on it.'; +$lang['click_to_go_to_login_form'] = 'Click here to go to the login form'; +$lang['unrecognized_criteria_option'] = 'Unrecognized criteria option: '; +$lang['if_you_want_to_add_criteria'] = 'If you want to add your own criteria to the list. Be sure to edit search.php to handle them. Quitting.'; +$lang['entries_found'] = 'Entries found: '; +$lang['filter_performed'] = 'Filter performed: '; +$lang['search_duration'] = 'Search performed by phpLDAPadmin in'; +$lang['seconds'] = 'seconds'; + +// search_form_advanced.php +$lang['scope_in_which_to_search'] = 'The scope in which to search'; +$lang['scope_sub'] = 'Sub (entire subtree)'; +$lang['scope_one'] = 'One (one level beneath base)'; +$lang['scope_base'] = 'Base (base dn only)'; +$lang['standard_ldap_search_filter'] = 'Standard LDAP search filter. Example: (&(sn=Smith)(givenname=David))'; +$lang['search_filter'] = 'Search Filter'; +$lang['list_of_attrs_to_display_in_results'] = 'A list of attributes to display in the results (comma-separated)'; +$lang['show_attributes'] = 'Show Attributes'; + +// search_form_simple.php +$lang['search_for_entries_whose'] = 'Search for entries whose:'; +$lang['equals'] = 'equals'; +$lang['starts with'] = 'starts with'; +$lang['contains'] = 'contains'; +$lang['ends with'] = 'ends with'; +$lang['sounds like'] = 'sounds like'; + +// server_info.php +$lang['could_not_fetch_server_info'] = 'Could not retrieve LDAP information from the server'; +$lang['server_info_for'] = 'Server info for: '; +$lang['server_reports_following'] = 'Server reports the following information about itself'; +$lang['nothing_to_report'] = 'This server has nothing to report.'; + +//update.php +$lang['update_array_malformed'] = 'update_array is malformed. This might be a phpLDAPadmin bug. Please report it.'; +$lang['could_not_perform_ldap_modify'] = 'Could not perform ldap_modify operation.'; + +// update_confirm.php +$lang['do_you_want_to_make_these_changes'] = 'Do you want to make these changes?'; +$lang['attribute'] = 'Attribute'; +$lang['old_value'] = 'Old Value'; +$lang['new_value'] = 'New Value'; +$lang['attr_deleted'] = '[attribute deleted]'; +$lang['commit'] = 'Commit'; +$lang['cancel'] = 'Cancel'; +$lang['you_made_no_changes'] = 'You made no changes'; +$lang['go_back'] = 'Go back'; + +// welcome.php +$lang['welcome_note'] = 'Use the menu to the left to navigate'; + +// view_jpeg_photo.php +$lang['unsafe_file_name'] = 'Unsafe file name: '; +$lang['no_such_file'] = 'No such file: '; + +//function.php +$lang['auto_update_not_setup'] = 'You have enabled auto_uid_numbers for %s in your configuration, + but you have not specified the auto_uid_number_mechanism. Please correct + this problem.'; +$lang['uidpool_not_set'] = 'You specified the auto_uid_number_mechanism as uidpool + in your configuration for server %s, but you did not specify the + audo_uid_number_uid_pool_dn. Please specify it before proceeding.'; +$lang['uidpool_not_exist'] = 'It appears that the uidPool you specified in your configuration (%s) + does not exist.'; +$lang['specified_uidpool'] = 'You specified the auto_uid_number_mechanism as search in your + configuration for server %s, but you did not specify the + auto_uid_number_search_base. Please specify it before proceeding.'; +$lang['auto_uid_invalid_value'] = 'You specified an invalid value for auto_uid_number_mechanism (%s) + in your configration. Only uidpool and search are valid. + Please correct this problem.'; +$lang['error_auth_type_config'] = 'Error: You have an error in your config file. The only two allowed values + for auth_type in the $servers section are \'config\' and \'form\'. You entered \'%s\', + which is not allowed. '; +$lang['php_install_not_supports_tls'] = 'Your PHP install does not support TLS'; +$lang['could_not_start_tls'] = 'Could not start TLS.
    Please check your LDAP server configuration.'; +$lang['auth_type_not_valid'] = 'You have an error in your config file. auth_type of %s is not valid.'; +$lang['ldap_said'] = 'LDAP said: %s

    '; +$lang['ferror_error'] = 'Error'; +$lang['fbrowse'] = 'browse'; +$lang['delete_photo'] = 'Delete Photo'; +$lang['install_not_support_blowfish'] = 'Your PHP install does not support blowfish encryption.'; +$lang['install_no_mash'] = 'Your PHP install does not have the mhash() function. Cannot do SHA hashes.'; +$lang['jpeg_contains_errors'] = 'jpegPhoto contains errors
    '; +$lang['ferror_number'] = 'Error number: %s (%s)

    '; +$lang['ferror_discription'] = 'Description: %s

    '; +$lang['ferror_number_short'] = 'Error number: %s

    '; +$lang['ferror_discription_short'] = 'Description: (no description available)
    '; +$lang['ferror_submit_bug'] = 'Is this a phpLDAPadmin bug? If so, please report it.'; +$lang['ferror_unrecognized_num'] = 'Unrecognized error number: '; +$lang['ferror_nonfatil_bug'] = '
    +
    + You found a non-fatal phpLDAPadmin bug!
    Error:%s (%s)
    File:%s line %s, caller %s
    Versions:PLA: %s, PHP: %s, SAPI: %s +
    Web server:%s
    + Please report this bug by clicking here.

    '; +$lang['ferror_congrats_found_bug'] = 'Congratulations! You found a bug in phpLDAPadmin.

    + + + + + + + + + + +
    Error:%s
    Level:%s
    File:%s
    Line:%s
    Caller:%s
    PLA Version:%s
    PHP Version:%s
    PHP SAPI:%s
    Web server:%s
    +
    + Please report this bug by clicking below!'; + +//ldif_import_form +$lang['import_ldif_file_title'] = 'Import LDIF File'; +$lang['select_ldif_file'] = 'Select an LDIF file:'; +$lang['select_ldif_file_proceed'] = 'Proceed >>'; + +//ldif_import +$lang['add_action'] = 'Adding...'; +$lang['delete_action'] = 'Deleting...'; +$lang['rename_action'] = 'Renaming...'; +$lang['modify_action'] = 'Modifying...'; + +$lang['failed'] = 'failed'; +$lang['ldif_parse_error'] = 'LDIF Parse Error'; +$lang['ldif_could_not_add_object'] = 'Could not add object:'; +$lang['ldif_could_not_rename_object'] = 'Could not rename object:'; +$lang['ldif_could_not_delete_object'] = 'Could not delete object:'; +$lang['ldif_could_not_modify_object'] = 'Could not modify object:'; +$lang['ldif_line_number'] = 'Line Number:'; +$lang['ldif_line'] = 'Line:'; +?> diff --git a/lang/recoded/es.php b/lang/recoded/es.php new file mode 100644 index 0000000..3e4018f --- /dev/null +++ b/lang/recoded/es.php @@ -0,0 +1,335 @@ +Para borrar un atributo, vacía el formulario de texto y haz click en Guardar.'; +$lang['attr_schema_hint'] = 'Pista: Para ver el esquema de un atributo, haz click en el nombre del atributo.'; +$lang['attrs_modified'] = 'Algunos atributos (%s) fueron modificados y estan remarcados más abajo.'; +$lang['attr_modified'] = 'Un atributo (%s) fué modificado y está remarcado más abajo.'; +$lang['viewing_read_only'] = 'Mostrando el objeto en modo de no alterar.'; +$lang['change_entry_rdn'] = 'Modificar el RDN de este objeto'; +$lang['no_new_attrs_available'] = 'No hay atributos nuevos disponibles para este objeto'; +$lang['binary_value'] = 'Valor binario'; +$lang['add_new_binary_attr'] = 'Agregar valor binario'; +$lang['add_new_binary_attr_tooltip'] = 'Agregar atributo/valor binario de un archivo'; +$lang['alias_for'] = 'Sinónimo para'; +$lang['download_value'] = 'Descargar valor'; +$lang['delete_attribute'] = 'Borrar atributo'; +$lang['true'] = 'verdad'; +$lang['false'] = 'falso'; +$lang['none_remove_value'] = 'ningo, borrar valor'; +$lang['really_delete_attribute'] = 'Borrar realmente el atributo?'; + +// Schema browser +$lang['the_following_objectclasses'] = 'Los siguientes ObjectClass están presentes en este servidor LDAP.'; +$lang['the_following_attributes'] = 'Los siguientes attributeTypes están presentes en este servidor LDAP.'; +$lang['the_following_matching'] = 'Los siguientes matching rules están presentes en este servidor LDAP.'; +$lang['the_following_syntaxes'] = 'Los siguientes sintaxis están presentes en este servidor LDAP.'; +$lang['jump_to_objectclass'] = 'Saltar a una ObjectClass'; +$lang['jump_to_attr'] = 'Saltar a un atributo'; +$lang['schema_for_server'] = 'Esquema del servidor '; +$lang['required_attrs'] = 'Atributos Requeridos (MUST)'; +$lang['optional_attrs'] = 'Atributos Opcionales (MAY)'; +$lang['OID'] = 'OID'; +$lang['desc'] = 'Descripción'; +$lang['name'] = 'Nom'; +$lang['is_obsolete'] = 'Esta ObjectClass es obsoleta'; +$lang['inherits'] = 'Hereda'; +$lang['jump_to_this_oclass'] = 'Saltar a esta ObjectClass'; +$lang['matching_rule_oid'] = 'OID de Matching Rule'; +$lang['syntax_oid'] = 'OID de Sintaxi'; +$lang['not_applicable'] = 'no es aplicable'; +$lang['not_specified'] = 'no especificada'; + +// Deleting entries +$lang['entry_deleted_successfully'] = 'Entrada \'%s\' borrada correctamente.'; +$lang['you_must_specify_a_dn'] = 'Tienes que especificar un DN'; +$lang['could_not_delete_entry'] = 'No he podido borrar la entrada: %s'; + +// Adding objectClass form +$lang['new_required_attrs'] = 'Nuevos atributos requeridos'; +$lang['requires_to_add'] = 'Esta acción exige que se agreguen'; +$lang['new_attributes'] = 'nuevos atributos'; +$lang['new_required_attrs_instructions'] = 'Instrucciones: Para agregar esta ObjectClass a este objeto, se tiene que especificar'; +$lang['that_this_oclass_requires'] = 'que este ObjectClass requiere. Se puede hacer con este formulario.'; +$lang['add_oclass_and_attrs'] = 'Agregar ObjectClass y Atributos'; + +// General +$lang['chooser_link_tooltip'] = 'Haz click para seleccionar un objeto graficamente'; +$lang['no_updates_in_read_only_mode'] = 'No se puede modificar el objeto si el servidor está operando en modo inalterable.'; +$lang['bad_server_id'] = 'El identificador de servidor está mal'; +$lang['not_enough_login_info'] = 'No tengo suficiente información para conectar al servidor. Por favor configura correctamente el archivo config.php'; +$lang['could_not_connect'] = 'No se ha podido conectar al servidor LDAP'; +$lang['could_not_perform_ldap_mod_add'] = 'No se ha podido ejecutar la operación del ldap_mod_add.'; +$lang['bad_server_id_underline'] = 'El identificador del servidor está mal: '; +$lang['success'] = 'Exito'; +$lang['server_colon_pare'] = 'Servidor: '; +$lang['look_in'] = 'Buscando a: '; +$lang['missing_server_id_in_query_string'] = 'No está presente el identificador del servidor en la URL'; +$lang['missing_dn_in_query_string'] = 'No está presente el DN en la URL'; +$lang['back_up_p'] = 'Volver a...'; +$lang['no_entries'] = 'no hay entradas'; +$lang['not_logged_in'] = 'No estás autenticado'; +$lang['could_not_det_base_dn'] = 'No he podido determinar la base DN'; + +// Add value form +$lang['add_new'] = 'Agregar'; +$lang['value_to'] = 'valor a'; +$lang['server'] = 'Servidor'; +$lang['distinguished_name'] = 'Nombre distinguido'; +$lang['current_list_of'] = 'La lista actual de'; +$lang['values_for_attribute'] = 'valores para el atributo'; +$lang['inappropriate_matching_note'] = 'Nota: Sino has configurado una regla \'EQUALITY\' en el servidor LDAP, recibirás un error \'inappropriate matching\''; +$lang['enter_value_to_add'] = 'Proveer el valor para agregar: '; +$lang['new_required_attrs_note'] = 'Nota: Es posible que se requiera agregar nuevos atributos para satisfacer los requisitos de esta ObjectClass'; +$lang['syntax'] = 'Sintaxi'; + +//copy.php +$lang['copy_server_read_only'] = 'No se pueden realizar las modificaciones si el servidor está operando en modo inalterable'; +$lang['copy_dest_dn_blank'] = 'No se ha rellenado el formulario de DN.'; +$lang['copy_dest_already_exists'] = 'La entrada de destino (%s) encara existe.'; +$lang['copy_dest_container_does_not_exist'] = 'El contenedor de destino (%s) no existe.'; +$lang['copy_source_dest_dn_same'] = 'El DN de la fuente y el DN de destino son los mismos.'; +$lang['copy_copying'] = 'Copiando '; +$lang['copy_recursive_copy_progress'] = 'El progreso de la copia recurrente'; +$lang['copy_building_snapshot'] = 'Construyendo la \'foto\' del arbol para copiar... '; +$lang['copy_successful_like_to'] = 'Exito! Deseas '; +$lang['copy_view_new_entry'] = 'Ver el nuevo objeto?'; +$lang['copy_failed'] = 'Error al copiar DN: '; + +//edit.php +$lang['missing_template_file'] = 'Error: falta la plantilla, '; +$lang['using_default'] = 'Usando el archivo por defecto.'; + +//copy_form.php +$lang['copyf_title_copy'] = 'Copiar '; +$lang['copyf_to_new_object'] = 'a un objeto nuevo'; +$lang['copyf_dest_dn'] = 'DN de destino'; +$lang['copyf_dest_dn_tooltip'] = 'El DN entero de la nueva entrada a ser creada quan se copie la entrada fuente'; +$lang['copyf_dest_server'] = 'Servidor de destino'; +$lang['copyf_note'] = 'Nota: Copiar entre dos servidores funciona solamente si no hay violaciones del esquema.'; +$lang['copyf_recursive_copy'] = 'Borrar todos los hijos recurentemente también?'; + +//create.php +$lang['create_required_attribute'] = 'Te has dejado el valor en blanco del atributo requerido %s.'; +$lang['create_redirecting'] = 'Redirigiendo'; +$lang['create_here'] = 'aquí'; +$lang['create_could_not_add'] = 'No he podido agregar el objeto al servidor LDAP.'; + +//create_form.php +$lang['createf_create_object'] = 'Crear Objeto'; +$lang['createf_choose_temp'] = 'Escoge una plantilla'; +$lang['createf_select_temp'] = 'Selecciona una plantilla para al proceso de creación'; +$lang['createf_proceed'] = 'Proceder'; + +//creation_template.php +$lang['ctemplate_on_server'] = 'Al servidor'; +$lang['ctemplate_no_template'] = 'No se ha especificado ninguna plantilla en las variables del POST.'; +$lang['ctemplate_config_handler'] = 'Tu configuración especifica un manejador de'; +$lang['ctemplate_handler_does_not_exist'] = 'para esta plantilla. Pero este manejador no existe en el directorio \'plantilla/creación\'.'; + +// search.php +$lang['you_have_not_logged_into_server'] = 'Aún no te has autenticado en ell servidor seleccionado, no puedes hacer ninguna búsqueda.'; +$lang['click_to_go_to_login_form'] = 'Hac click aquí para ir al formulario de autenticación'; +$lang['unrecognized_criteria_option'] = 'Opcion de criterio desconocida: '; +$lang['if_you_want_to_add_criteria'] = 'Si quieres agregar tu propio criterio en la lista. Estate seguro de editar search.php para manejarlo. Saliendo.'; +$lang['entries_found'] = 'Entrades encontradas: '; +$lang['filter_performed'] = 'Filtro realitzado: '; +$lang['search_duration'] = 'Búsqueda realitzada para phpLDAPadmin a'; +$lang['seconds'] = 'segundos'; + +// search_form_advanced.php +$lang['scope_in_which_to_search'] = 'El alcance en el que buscar'; +$lang['scope_sub'] = 'Sub (todo el sub-arbol)'; +$lang['scope_one'] = 'Uno (un nivel por debajo de la base)'; +$lang['scope_base'] = 'Base (solo base dn)'; +$lang['standard_ldap_search_filter'] = 'Filtro de búsqueda estándar de LDAP. Ejemplo: (&(sn=Smith)(givenname=David))'; +$lang['search_filter'] = 'Filtro de búsqueda'; +$lang['list_of_attrs_to_display_in_results'] = 'Una lista de atributos para mostrar los resultados (separados por comas)'; +$lang['show_attributes'] = 'Mostrar atributos'; + +// search_form_simple.php +$lang['search_for_entries_whose'] = 'Buscar entradas las cuales:'; +$lang['equals'] = 'sea igual'; +$lang['starts with'] = 'comience con'; +$lang['contains'] = 'contenga'; +$lang['ends with'] = 'termine con'; +$lang['sounds like'] = 'suene como'; + +// server_info.php +$lang['could_not_fetch_server_info'] = 'No se ha podido sacar información LDAP del servidor'; +$lang['server_info_for'] = 'Información del servidor para: '; +$lang['server_reports_following'] = 'El servidor muestra la siguiente información sobre el mismo'; +$lang['nothing_to_report'] = 'Este servidor no tiene nada a mostrar.'; + +//update.php +$lang['update_array_malformed'] = 'el update_array está mal formado. Esto podría ser un error del phpLDAPadmin. Por favor reportalo.'; +$lang['could_not_perform_ldap_modify'] = 'No he podido ejecutar la operación ldap_modify.'; + +// update_confirm.php +$lang['do_you_want_to_make_these_changes'] = 'Quieres hacer estos canvios?'; +$lang['attribute'] = 'Atributo'; +$lang['old_value'] = 'Valor viejo'; +$lang['new_value'] = 'Valor nuevo'; +$lang['attr_deleted'] = '[atributo borrado]'; +$lang['commit'] = 'Cometer'; +$lang['cancel'] = 'Cancelar'; +$lang['you_made_no_changes'] = 'No has hecho ningún canvio'; +$lang['go_back'] = 'Volver atrás'; + +// welcome.php +$lang['welcome_note'] = 'Usa el menú de la izquierda para navegar'; + +// view_jpeg_photo.php +$lang['unsafe_file_name'] = 'Nombre de archivo inseguro: '; +$lang['no_such_file'] = 'Archivo inexistente: '; + +//function.php +$lang['auto_update_not_setup'] = 'Has activado los auto_uid_numbers para %s en tu configuración, + pero no has especificado el auto_uid_number_mechanism. Por favor soluciona + este problema.'; +$lang['uidpool_not_set'] = 'Has especificado el auto_uid_number_mechanism como uidpool + en tu configuración para el servidor %s, pero no has especificado el + audo_uid_number_uid_pool_dn. Por favor especificalo antes de proceder.'; +$lang['uidpool_not_exist'] = 'Parece ser que el uidPool que has especificado en tu configuración (%s) + no existe.'; +$lang['specified_uidpool'] = 'Has especificado el auto_uid_number_mechanism como search en tu + configuración para el servidor %s, pero no has especificado el + auto_uid_number_search_base. Por favor especificalo antes de proceder.'; +$lang['auto_uid_invalid_value'] = 'Has especificado un valor no válido para el auto_uid_number_mechanism (%s) + en tu configuración. Solo uidpool y search son válidos. + Por favor soluciona este problema.'; +$lang['error_auth_type_config'] = 'Error: Tienes un error en tu archivo de configuración. Los dos únicos valores aceptados para + \'auth_type\' en la sección $servers son \'config\' y \'form\'. Tu has puesto \'%s\', + el cual no está aceptado. '; +$lang['php_install_not_supports_tls'] = 'Tu instalación de PHP no soporta TLS'; +$lang['could_not_start_tls'] = 'No he podido iniciar el TLS.
    Revisa tu configuración del servidor LDAP.'; +$lang['auth_type_not_valid'] = 'Tienes un error en el archivo de configuración. auth_type de %s no es válido.'; +$lang['ldap_said'] = 'LDAP dijo: %s

    '; +$lang['ferror_error'] = 'Error'; +$lang['fbrowse'] = 'mostrar'; +$lang['delete_photo'] = 'Borrar foto'; +$lang['install_not_support_blowfish'] = 'Tu instalación de PHP no soporta los tipos de encriptación blowfish.'; +$lang['install_no_mash'] = 'Tu instalación de PHP no tiene la funcion mhash(). No puedo hacer hash SHA.'; +$lang['jpeg_contains_errors'] = 'jpegPhoto contiene errores
    '; +$lang['ferror_number'] = 'Error número: %s (%s)

    '; +$lang['ferror_discription'] = 'Descripción: %s

    '; +$lang['ferror_number_short'] = 'Error número: %s

    '; +$lang['ferror_discription_short'] = 'Descripción: (no hay descripción)
    '; +$lang['ferror_submit_bug'] = 'Es un error del phpLDAPadmin? Si así es, por favor dínoslo.'; +$lang['ferror_unrecognized_num'] = 'Número de error desconocido: '; +$lang['ferror_nonfatil_bug'] = '
    +
    + Has encontrado un error fatal del phpLDAPadmin!
    Error:%s (%s)
    Archivo:%s línea %s, caller %s
    Versiones:PLA: %s, PHP: %s, SAPI: %s +
    Servidor Web:%s
    + Envía este error haciendo click aquí.

    '; +$lang['ferror_congrats_found_bug'] = 'Felicidades! Has encontrado un error en el phpLDAPadmin.

    + + + + + + + + + + +
    Error:%s
    Nivel:%s
    Archivo:%s
    Línea:%s
    Caller:%s
    Versión PLA:%s
    Versión PHP:%s
    PHP SAPI:%s
    Servidor Web:%s
    +
    + Por favor envía este error haciendo click abajo!'; +//ldif_import_form +$lang['import_ldif_file_title'] = 'Importar archivo LDIF'; +$lang['select_ldif_file'] = 'Selecciona un archivo LDIF:'; +$lang['select_ldif_file_proceed'] = 'Proceder &gt;&gt;'; + +//ldif_import +$lang['add_action'] = 'Añadiendo...'; +$lang['delete_action'] = 'Borrando...'; +$lang['rename_action'] = 'Renombrando...'; +$lang['modify_action'] = 'Modificando...'; + +$lang['failed'] = 'fallado'; +$lang['ldif_parse_error'] = 'Error de parseado LDIF'; +$lang['ldif_could_not_add_object'] = 'No he podido añadir el objeto:'; +$lang['ldif_could_not_rename_object'] = 'No he podido renombrar el objeto:'; +$lang['ldif_could_not_delete_object'] = 'No he podido borrar el objeto:'; +$lang['ldif_could_not_modify_object'] = 'No he podido modificar el objeto:'; +$lang['ldif_line_number'] = 'Linea Número:'; +$lang['ldif_line'] = 'Linea:'; + +?> diff --git a/lang/recoded/fr.php b/lang/recoded/fr.php new file mode 100644 index 0000000..7e870c0 --- /dev/null +++ b/lang/recoded/fr.php @@ -0,0 +1,355 @@ +Pour effacer un attribut, laissez le champs vide et cliquez pour sauvegarder.'; +$lang['attr_schema_hint'] = 'Note: Pour voir le schéma pour un attribut, cliquer sur le nom de l\'attribut.'; +$lang['attrs_modified'] = 'Certains attributs (%s) ont été mdoifiés et sont mis en évidence ci-dessous.'; +$lang['attr_modified'] = 'Un attribut (%s) a été modifié et est mis en évidence ci-dessous.'; +$lang['viewing_read_only'] = 'Voir une entrée en lecture seule.'; +$lang['change_entry_rdn'] = 'Changer le RDN de cette entrée'; +$lang['no_new_attrs_available'] = 'plus d\'attributs disponibles pour cette entrée'; +$lang['binary_value'] = 'Valeur de type binaire'; +$lang['add_new_binary_attr'] = 'Ajouter un nouvel attribut de type binaire'; +$lang['add_new_binary_attr_tooltip'] = 'Ajouter un nouvel attribut à partir d\'un fichier'; +$lang['alias_for'] = 'Alias pour'; +$lang['download_value'] = 'Télécharger le contenu'; +$lang['delete_attribute'] = 'Supprimer l\'attribut'; +$lang['true'] = 'vrai'; +$lang['false'] = 'faux'; +$lang['none_remove_value'] = 'aucun, suppression de la valeur'; +$lang['really_delete_attribute'] = 'Voulez-vous vraiment supprimer l\'attribut'; + +// Schema browser +$lang['the_following_objectclasses'] = 'Les classes d\'objets (objectClasses) suivantes sont supportés par ce serveur LDAP.'; +$lang['the_following_attributes'] = 'Les types d\'attributs (attributesTypes) suivants sont supportés par ce serveur LDAP.'; +$lang['the_following_matching'] = 'Les opérateurs (matching rules) suivants sont supportés par ce serveur LDAP.'; +$lang['the_following_syntaxes'] = 'Les syntaxes suivantes sont supportés par ce serveur LDAP.'; +$lang['jump_to_objectclass'] = 'Aller à une classe d\'objet'; +$lang['jump_to_attr'] = 'Aller à un attribut'; +$lang['schema_for_server'] = 'Schema pour le serveur'; +$lang['required_attrs'] = 'Attributs obligatoires'; +$lang['optional_attrs'] = 'Attributs facultatifs'; +$lang['OID'] = 'OID'; +$lang['desc'] = 'Description'; +$lang['name'] = 'Nom'; +$lang['is_obsolete'] = 'Cette classe d\'objet est obsolete'; +$lang['inherits'] = 'hérite'; +$lang['jump_to_this_oclass'] = 'Aller à la définition de cette classe d\'objet'; +$lang['matching_rule_oid'] = 'OID de l\'opérateur'; +$lang['syntax_oid'] = 'OID de la syntaxe'; +$lang['not_applicable'] = 'not applicable'; +$lang['not_specified'] = 'non spécifié'; + +// Deleting entries +$lang['entry_deleted_successfully'] = 'Suppression de l\'entrée \'%s\' réussie.'; +$lang['you_must_specify_a_dn'] = 'Un DN doit être spécifié'; +$lang['could_not_delete_entry'] = 'Impossible de supprimer l\'entrée: %s'; + +// Adding objectClass form +$lang['new_required_attrs'] = 'Nouveaux Attributs Obligatoires'; +$lang['requires_to_add'] = 'Cette action nécessite d\'ajouter'; +$lang['new_attributes'] = 'nouveaux attributs'; +$lang['new_required_attrs_instructions'] = 'Instructions: Afin d\'ajouter cette classe d\'objet, vous devez spécifier'; +$lang['that_this_oclass_requires'] = 'dont cette classe d\'objet a besoin. Vous pouvez le faire avec ce formulaire.'; +$lang['add_oclass_and_attrs'] = 'Ajout d\' ObjectClass et d\'attributs'; + +// General +$lang['chooser_link_tooltip'] = 'Cliquer pour choisir un entré(DN)'; +$lang['no_updates_in_read_only_mode'] = 'Vous ne pouvez effectuer des mises à jour si le serveur est en lecture seule'; +$lang['bad_server_id'] = 'Id de serveur invalide'; +$lang['not_enough_login_info'] = 'Informations insuffisantes pour se logguer au serveur. Veuillez, s\'il vous plaî, vérifier votre configuration.'; +$lang['could_not_connect'] = 'Impossible de se connecter au serveur LDAP.'; +$lang['could_not_perform_ldap_mod_add'] = 'Echec lors de l\'opération ldap_mod_add.'; +$lang['bad_server_id_underline'] = 'serveur_id invalide: '; +$lang['success'] = 'Succès'; +$lang['server_colon_pare'] = 'Serveur: '; +$lang['look_in'] = 'Recherche dans: '; +$lang['missing_server_id_in_query_string'] = 'Aucun serveur ID spécifié dans la ligne de requête !'; +$lang['missing_dn_in_query_string'] = 'Aucun DN spécifié dans la ligne de requête !'; +$lang['back_up_p'] = 'Retour...'; +$lang['no_entries'] = 'aucune entrée'; +$lang['not_logged_in'] = 'Vous n\'ê pas loggué'; +$lang['could_not_det_base_dn'] = 'Impossible de déterminer le DN de base'; + +// Add value form +$lang['add_new'] = 'Ajout d\'une nouvelle valeur '; +$lang['value_to'] = 'pour'; +$lang['distinguished_name'] = 'Distinguished Name'; +$lang['current_list_of'] = 'Liste actuelle de'; +$lang['values_for_attribute'] = 'valeur(s) pour l\' attribut'; +$lang['inappropriate_matching_note'] = 'Note: Vous obtiendrez une erreur de type "inappropriate matching" si vous n\'avez pas
    ' . + 'défini une règle EQUALITY pour cet attribut auprès du serveur LDAP.'; +$lang['enter_value_to_add'] = 'Entrez la valeur que vous voulez ajouter:'; +$lang['new_required_attrs_note'] = 'Note: vous aurez peut-être besoin d\'introduire de nouveaux attributs requis pour cette classe d\'objet'; +$lang['syntax'] = 'Syntaxe'; + +//Copy.php +$lang['copy_server_read_only'] = 'Des mises à jours ne peuvent pas être effectuées si le serveur est en lecture seule'; +$lang['copy_dest_dn_blank'] = 'Vous avez laissé le DN de destination vide.'; +$lang['copy_dest_already_exists'] = 'L\'entrée de destination (%s) existe déjà.'; +$lang['copy_dest_container_does_not_exist'] = 'Le conteneur de destination (%s) n\'existe pas.'; +$lang['copy_source_dest_dn_same'] = 'Le DN d\'origine et le DN de destination sont identiques.'; +$lang['copy_copying'] = 'Copie '; +$lang['copy_recursive_copy_progress'] = 'Progression de la copie récursive'; +$lang['copy_building_snapshot'] = 'Construction de l\'image de l\'arborscence à copier... '; +$lang['copy_successful_like_to'] = 'Copie réussite! Voulez-vous '; +$lang['copy_view_new_entry'] = 'éditer cette nouvelle entrée'; +$lang['copy_failed'] = 'Echec lors de la copie de: '; + +//edit.php +$lang['missing_template_file'] = 'Avertissement: le fichier modèle est manquant, '; +$lang['using_default'] = 'Utilisation du modèle par défaut.'; + +//copy_form.php +$lang['copyf_title_copy'] = 'Copie de '; +$lang['copyf_to_new_object'] = 'vers un nouvel objet'; +$lang['copyf_dest_dn'] = 'DN de destination'; +$lang['copyf_dest_dn_tooltip'] = 'Le DN de la nouvelle entrée à créer lors de la copie de l\'entrée source'; +$lang['copyf_dest_server'] = 'Destination Serveur'; +$lang['copyf_note'] = 'Note: La copie entre différents serveurs fonctionne seulement si il n\'y a pas de violation de schéma'; +$lang['copyf_recursive_copy'] = 'Copier récursivement les sous-entrées de cet object.'; + +//create.php +$lang['create_required_attribute'] = 'Une valeur n\'a pas été spécifiée pour l\'attribut requis %s.'; +$lang['create_redirecting'] = 'Redirection'; +$lang['create_here'] = 'ici'; +$lang['create_could_not_add'] = 'L\'ajout de l\'objet au serveur LDAP n\'a pu être effectuée.'; + +//create_form.php +$lang['createf_create_object'] = 'Creation d\'un objet'; +$lang['createf_choose_temp'] = 'Choix d\'un modèle'; +$lang['createf_select_temp'] = 'Selectionner un modèle pour la procédure de création'; +$lang['createf_proceed'] = 'Continuer'; + +//creation_template.php +$lang['ctemplate_on_server'] = 'Sur le serveur'; +$lang['ctemplate_no_template'] = 'Aucun modèle spécifié dans les variables POST.'; +$lang['ctemplate_config_handler'] = 'Votre configuration scécifie un gestionnaire de'; +$lang['ctemplate_handler_does_not_exist'] = 'pour ce modèle. Cependant, ce gestionnaire n\'existe pas dans le répertoire \'templates/creation\'.'; + +//search.php +$lang['you_have_not_logged_into_server'] = 'Vous ne vous êtes pas encore loggé auprès du serveur sélectionné. Vous ne pouvez y effectuer des recherches.'; +$lang['click_to_go_to_login_form'] = 'Cliquer ici pour vous rendre au formulaire de login'; +$lang['unrecognized_criteria_option'] = 'Critère non reconnu: '; +$lang['if_you_want_to_add_criteria'] = 'Si vous voulez ajouter vos propres critère à la liste, soyez cetain d\'éditer search.php afin de pouvoir les gérer.'; +$lang['entries_found'] = 'Entrées trouvée: '; +$lang['filter_performed'] = 'Filtre utilisé: '; +$lang['search_duration'] = 'Recherche effectuée par phpLDAPadmin en'; +$lang['seconds'] = 'secondes'; + +// search_form_advanced.php +$lang['scope_in_which_to_search'] = 'Portée de la recherche'; +$lang['scope_sub'] = 'Sub (le sous-arbre)'; +$lang['scope_one'] = 'One (un niveau sous la base)'; +$lang['scope_base'] = 'Base (le dn de base)'; +$lang['standard_ldap_search_filter'] = 'Un filtre standard de recherche LDAP. Exemple: (&(sn=Smith)(givenname=David))'; +$lang['search_filter'] = 'Filtre pour la recherche'; +$lang['list_of_attrs_to_display_in_results'] = 'Une liste des attributs à afficher dans les résultats(séparés par des virgules)'; +$lang['show_attributes'] = 'Attributs à afficher'; + +// search_form_simple.php +$lang['search_for_entries_whose'] = 'Chercher les entrées dont:'; +$lang['equals'] = 'est egal à;'; +$lang['starts with'] = 'commence par'; +$lang['contains'] = 'contient'; +$lang['ends with'] = 'se termine par'; +$lang['sounds like'] = 'ressemble à'; + +// server_info.php +$lang['could_not_fetch_server_info'] = 'Impossible de récupérer les informations concernant le serveur Ldap'; +$lang['server_info_for'] = 'Informations pour le serveur: '; +$lang['server_reports_following'] = 'Le serveur a rapporté les informations suivantes'; +$lang['nothing_to_report'] = 'Ce serveur n\'a aucunes informations a rapporter.'; + +//update.php +$lang['update_array_malformed'] = 'update_array n\'est pas bien formé. Ceci est peut-être un bogue de phpLDAPadmin. Pourriez-vous effectuer un rapport de bogue, s\'il vous plaît.'; +$lang['could_not_perform_ldap_modify'] = 'L\'opération ldap_modify n\'a pu être effectuée.'; + +// update_confirm.php +$lang['do_you_want_to_make_these_changes'] = 'Voulez-vous effectuer ces changements?'; +$lang['attribute'] = 'Attribut'; +$lang['old_value'] = 'Ancienne Valeur'; +$lang['new_value'] = 'Nouvelle Valeur'; +$lang['attr_deleted'] = '[attribut supprimé]'; +$lang['commit'] = 'Valider'; +$lang['cancel'] = 'Annuler'; +$lang['you_made_no_changes'] = 'Aucun changement n\'a été effectué'; +$lang['go_back'] = 'Retour'; + +// welcome.php +$lang['welcome_note'] = 'Utilisez le menu de gauche pour la navigation'; + +// view_jpeg_photo.php +$lang['unsafe_file_name'] = 'Nom de fichier non sûr: '; +$lang['no_such_file'] = 'Aucun fichier trouvé: '; + +//function.php +$lang['auto_update_not_setup'] = 'auto_uid_numbers a été activé pour %s dans votre configuration, + mais vous n\'avez pas spécifié l\' auto_uid_number_mechanism. Veuiller corriger + ce problème.'; +$lang['uidpool_not_set'] = 'Vous avez spécifié lauto_uid_number_mechanism comme uidpool + dans la configuration du serveur %s, mais vous n\'avez pas spécifié de valeur pour + auto_uid_number_uid_pool_dn. Veuillez le spécifier avant de continuer.'; +$lang['uidpool_not_exist'] = 'Le uidPool que vous avez spécifié dans votre configuration (%s) + n\'existe pas.'; +$lang['specified_uidpool'] = 'L\'auto_uid_number_mechanism a été défini à search dans votre + configuration pour le serveur %s, mais vous n\'avez pas défini + auto_uid_number_search_base. Veuillez le spécifier avant de continuer.'; +$lang['auto_uid_invalid_value'] = 'Une valeur non valide a été spécifiée pour auto_uid_number_mechanism (%s) + dans votre configuration. Seul uidpool et search sont valides. + Veuillez corriger ce problème.'; +$lang['error_auth_type_config'] = 'Erreur: Vous avez une erreur dans votre fichier de configuration.Les valeurs + supportées pour \'auth_type\' sont \'config\' et \'form\' dans la section $servers. + Vous avez mis \'%s\', ce qui n\'est pas autorisé.'; +$lang['php_install_not_supports_tls'] = 'Votre installation PHP ne supporte pas TLS.'; +$lang['could_not_start_tls'] = 'Impossible de démarrer TLS.
    Veuillez,s\'il vous plaît, vérifier la configuration de votre serveur LDAP.'; +$lang['auth_type_not_valid'] = 'Vous avez une erreur dans votre fichier de configuration. auth_type %s n\'est pas valide.'; +$lang['ldap_said'] = 'LDAP said: %s

    '; +$lang['ferror_error'] = 'Erreur'; +$lang['fbrowse'] = 'naviguer'; +$lang['delete_photo'] = 'Supprimer la photo'; +$lang['install_not_support_blowfish'] = 'Votre installation PHP ne support pas l\'encryption blowfish.'; +$lang['install_no_mash'] = 'Votre installation PHP ne supporte pas la fonction mhash(). Impossible de créer un hash SHA.'; +$lang['jpeg_contains_errors'] = 'jpegPhoto contient des erreurs
    '; +$lang['ferror_number'] = 'Numéro de l\'erreur: %s (%s)

    '; +$lang['ferror_discription'] = 'Description: %s

    '; +$lang['ferror_number_short'] = 'Numé de l\'erreur: %s

    '; +$lang['ferror_discription_short'] = 'Description: (pas de description disponible)
    '; +$lang['ferror_submit_bug'] = 'Est-ce un bogue de phpLDAPadmin? Si c\'est le cas,veuillez s\'il vous plaît le rapporter.'; +$lang['ferror_unrecognized_num'] = 'Numéro de l\'erreur non reconnu: '; +$lang['ferror_nonfatil_bug'] = '
    +
    + Vous avez trouvé un bogue non fatal dans phpLDAPAdmin!
    Erreur:%s (%s)
    Fichier:%s ligne %s, origine de l\'appel %s
    Versions:PLA: %s, PHP: %s, SAPI: %s +
    Serveur Web:%s
    + S\'il vous plaît, veuillez rapporter ce bogue en cliquant ici.

    '; +$lang['ferror_congrats_found_bug'] = 'Félicitations! Vous avez trouvé un bogue dans phpLDAPadmin.

    + + + + + + + + + + +
    Erreur:%s
    Niveau:%s
    Fichier:%s
    Ligne:%s
    Origine de l\'appel:%s
    PLA Version:%s
    PHP Version:%s
    PHP SAPI:%s
    Serveur Webr:%s
    +
    + S\'il vous plaît, veuillez rapporter ce bogue en cliquant ici!'; + +//ldif_import_form +$lang['import_ldif_file_title'] = 'Import de fichier LDIF'; +$lang['select_ldif_file'] = 'Sélectionner un fichier LDIF:'; +$lang['select_ldif_file_proceed'] = 'Continuer >>'; + +//lldif_import +$lang['add_action'] = 'Ajout de...'; +$lang['delete_action'] = 'Supression de...'; +$lang['rename_action'] = 'Renommage de...'; +$lang['modify_action'] = 'Modification de...'; +$lang['failed'] = 'échec'; +$lang['ldif_parse_error'] = 'Erreur lors de l\'analyse du fichier LDIF'; +$lang['ldif_could_not_add_object'] = 'Impossible d\'ajouter l\'objet:'; +$lang['ldif_could_not_rename_object'] = 'Impossible de renommer l\'objet:'; +$lang['ldif_could_not_delete_object'] = 'Impossible de supprimer l\'objet:'; +$lang['ldif_could_not_modify_object'] = 'Impossible de modifier l\'objet:'; +$lang['ldif_line_number'] = 'Numéro de ligne'; +$lang['ldif_line'] = 'Ligne'; + +?> diff --git a/lang/recoded/it.php b/lang/recoded/it.php new file mode 100644 index 0000000..7233757 --- /dev/null +++ b/lang/recoded/it.php @@ -0,0 +1,139 @@ +Per cancellare un attributo, svuota il campo testo e clicca salva.'; +$lang['viewing_read_only'] = 'Stai guardando la voce in modalitŕ sola-lettura.'; +$lang['change_entry_rdn'] = 'Cambia l\' RDN di questa voce'; +$lang['no_new_attrs_available'] = 'nessun nuovo attributo disponibile per questa voce'; +$lang['binary_value'] = 'Valore binario'; +$lang['add_new_binary_attr'] = 'Aggiungi un Nuovo Attributo Binario'; +$lang['add_new_binary_attr_tooltip'] = 'Aggiungi un nuovo attributo/valore binario da un file'; +$lang['alias_for'] = 'Alias per'; +$lang['download_value'] = 'valore del download'; +$lang['delete_attribute'] = 'cancella l\'attributo'; +$lang['true'] = 'vero'; +$lang['false'] = 'falso'; +$lang['none_remove_value'] = 'nessuno, rimuovi il valore'; +$lang['really_delete_attribute'] = 'Cancella definitivamente il valore'; + +// Schema browser +$lang['the_following_objectclasses'] = 'Le seguenti objectClasses sono supportate da questo server LDAP'; +$lang['the_following_attributes'] = 'Le seguenti attributeTypes sono supportate da questo server LDAP'; +$lang['the_following_matching'] = 'Le seguenti matching rules sono supportate da questo server LDAP'; +$lang['the_following_syntaxes'] = 'Le seguenti syntaxes sono supportate da questo server LDAP'; +$lang['jump_to_objectclass'] = 'Vai a una objectClass'; +$lang['jump_to_attr'] = 'Vai a un attributo'; +$lang['schema_for_server'] = 'Schema per il server'; +$lang['required_attrs'] = 'Attributi Richiesti'; +$lang['optional_attrs'] = 'Attributi Opzionali'; +$lang['OID'] = 'OID'; +$lang['desc'] = 'Descrizione'; +$lang['is_obsolete'] = 'Questa objectClass č obsoleta'; +$lang['inherits'] = 'Eredita da'; +$lang['jump_to_this_oclass'] = 'Vai a questa definizione della objectClass'; +$lang['matching_rule_oid'] = 'Regola Corrispondente OID'; +$lang['syntax_oid'] = 'Sintassi OID'; + +// Adding objectClass form +$lang['new_required_attrs'] = 'Nuovi Attributi Richiesti'; +$lang['requires_to_add'] = 'Questa azione richiede che tu aggiunga'; +$lang['new_attributes'] = 'nuovi attributi'; +$lang['new_required_attrs_instructions'] = 'Istruzioni: Per aggiungere questa objectClass a questa voce, devi specificare:'; +$lang['that_this_oclass_requires'] = 'che questa objectClass richiede. Puoi farlo in questo modulo.'; +$lang['add_oclass_and_attrs'] = 'Aggiungi ObjectClass e Attributi'; + +// General +$lang['chooser_link_tooltip'] = 'Clicca per aprire una finestra di dialogo per la selezione grafica di una voce (DN)'; +$lang['no_updates_in_read_only_mode'] = 'Non puoi operare aggiornamenti mentre il server č in modalitŕ sola-lettura'; +$lang['bad_server_id'] = 'Server id errata'; +$lang['not_enough_login_info'] = 'Non abbastanza informazioni per collegarsi al server. Per piacere controlla la tua configurazione.'; +$lang['could_not_connect'] = 'Non ho potuto collegarmi al server LDAP.'; +$lang['could_not_perform_ldap_mod_add'] = 'Non ho potuto eseguire l\'operazione ldap_mod_add.'; + +// Add value form +$lang['add_new'] = 'Aggiungi nuovo'; +$lang['value_to'] = 'valore a'; +$lang['server'] = 'Server'; +$lang['distinguished_name'] = 'Distinguished Name'; +$lang['current_list_of'] = 'Lista corrente di'; +$lang['values_for_attribute'] = 'valori per l\'attributo'; +$lang['inappropriate_matching_note'] = 'Nota: Tu riceverai un errore "corrispondenza inappropiata" se non hai
    una regola EQUALITY per questo attributo sul tuo server LDAP.'; +$lang['enter_value_to_add'] = 'Inserisci il valore che vorresti aggiungere:'; +$lang['new_required_attrs_note'] = 'Nota: ti potrebbe essere chiesto di inserire nuovi attributi
    che questa objectClass richiede.'; +$lang['syntax'] = 'Sintassi'; + +?> diff --git a/lang/recoded/nl.php b/lang/recoded/nl.php new file mode 100644 index 0000000..ca6c234 --- /dev/null +++ b/lang/recoded/nl.php @@ -0,0 +1,329 @@ + + * Uwe Ebel + */ + +// Search form +$lang['simple_search_form_str'] = 'eenvoudig zoeken';//'Simple Search Form'; +$lang['advanced_search_form_str'] = 'uitgebreid zoeken';//'Advanced Search Form'; +$lang['server'] = 'server';//'Server'; +$lang['search_for_entries_whose'] = 'zoek naar velden die';//'Search for entries whose'; +$lang['base_dn'] = 'base DN';//'Base DN'; +$lang['search_scope'] = 'zoekbereik';//'Search Scope'; +$lang['search_ filter'] = 'zoekfilter';//'Search Filter'; +$lang['show_attributes'] = 'laat Attributen zien';//'Show Attributtes'; +$lang['Search'] = 'zoeken';//'Search'; +$lang['equals'] = 'gelijk aan';//'equals'; +$lang['starts_with'] = 'begint met';//'starts with'; +$lang['contains'] = 'bevat';//'contains'; +$lang['ends_with'] = 'eindigt met';//'ends with'; +$lang['sounds_like'] = 'klinkt als';//'sounds like'; + +// Tree browser +$lang['request_new_feature'] = 'verzoek nieuwe feature';//'Request a new feature'; +$lang['see_open_requests'] = 'feature verzoeken inzien';//'see open requests'; +$lang['report_bug'] = 'rapporteer een bug';//'Report a bug'; +$lang['see_open_bugs'] = 'buglijst inzien';//'see open bugs'; +$lang['schema'] = 'schema';//'schema'; +$lang['search'] = 'zoeken';//'search'; +$lang['refresh'] = 'vernieuwen';//'refresh'; +$lang['create'] = 'aanmaken';//'create'; +$lang['info'] = 'info';//'info'; +$lang['import'] = 'importeer';//'import'; +$lang['logout'] = 'uitloggen';//'logout'; +$lang['create_new'] = 'aanmaken';//'Create New'; +$lang['view_schema_for'] = 'schema inzien voor';//'View schema for'; +$lang['refresh_expanded_containers'] = 'vernieuw alle uitgeklapte containers voor';//'Refresh all expanded containers for'; +$lang['create_new_entry_on'] = 'nieuw veld aanmaken in';//'Create a new entry on'; +$lang['view_server_info'] = 'server informatie inzien';//'View server-supplied information'; +$lang['import_from_ldif'] = 'importeer LDIF bestand';//'Import entries from an LDIF file'; +$lang['logout_of_this_server'] = 'bij deze server uitloggen';//'Logout of this server'; +$lang['logged_in_as'] = 'ingelogd als: ';//'Logged in as: '; +$lang['read_only'] = 'alleen lezen';//'read only'; +$lang['could_not_determine_root'] = 'kan de root van LDAP structuur niet bepalen.';//'Could not determin the root of your LDAP tree.'; +$lang['ldap_refuses_to_give_root'] = 'kan de root van LDAP structuur niet bepalen';//'It appears that the LDAP server has been configured to not reveal its root.'; +$lang['please_specify_in_config'] = 'in config.php aangeven a.u.b.';//'Please specify it in config.php'; +$lang['create_new_entry_in'] = 'nieuw veld aanmaken in';//'Create a new entry in'; + +// Entry display +$lang['delete_this_entry'] = 'veld verwijderen';//'Delete this entry'; +$lang['delete_this_entry_tooltip'] = 'bevestiging zal worden gevraagd voor deze beslissing';//'You will be prompted to confirm this decision'; +$lang['copy_this_entry'] = 'dit veld kopieren';//'Copy this entry'; +$lang['copy_this_entry_tooltip'] = 'kopieer dit object naar een andere plaats, een niuewe DN of naar een andere server';//'Copy this object to another location, a new DN, or another server'; +$lang['export_to_ldif'] = 'exporteren naar LDIF';//'Export to LDIF'; +$lang['export_to_ldif_tooltip'] = 'maak LDIF dump van dit object';//'Save an LDIF dump of this object'; +$lang['export_subtree_to_ldif_tooltip'] = 'maak LDIF dump van dit object plus alle onderliggende objecten';//'Save an LDIF dump of this object and all of its children'; +$lang['export_subtree_to_ldif'] = 'exporteer deze subvelden naar LDIF';//'Export subtree to LDIF'; +$lang['export_to_ldif_mac'] = 'Macintosh regeleinden';//'Macintosh style line ends'; +$lang['export_to_ldif_win'] = 'Windows regeleinden';//'Windows style line ends'; +$lang['export_to_ldif_unix'] = 'Unix regeleinden';//'Unix style line ends'; +$lang['create_a_child_entry'] = 'subveld aanmaken';//'Create a child entry'; +$lang['add_a_jpeg_photo'] = 'jpeg foto toevoegen';//'Add a jpegPhoto'; +$lang['rename_entry'] = 'veld hernoemen';//'Rename Entry'; +$lang['rename'] = 'hernoemen';//'Rename'; +$lang['add'] = 'toevoegen';//'Add'; +$lang['view'] = 'inzien';//'View'; +$lang['add_new_attribute'] = 'attribuut toevoegen';//'Add New Attribute'; +$lang['add_new_attribute_tooltip'] = 'nieuw attribuut toevoegen/waarde toekennen';// 'Add a new attribute/value to this entry'; +$lang['internal_attributes'] = 'interne attributen';//'Internal Attributes'; +$lang['hide_internal_attrs'] = 'interne attributen verbergen';//'Hide internal attributes'; +$lang['show_internal_attrs'] = 'interne attributen laten zien';//'Show internal attributes'; +$lang['internal_attrs_tooltip'] = 'automatisch ingestelde attributen';//'Attributes set automatically by the system'; +$lang['entry_attributes'] = 'attributen veld';//'Entry Attributes'; +$lang['attr_name_tooltip'] = 'klik hier om de schemadefinitie van attribuuttype \'%s\' te bekijken';//'Click to view the schema defintion for attribute type \'%s\''; +$lang['click_to_display'] = 'klik om te bekijken';//'click to display'; +$lang['hidden'] = 'verborgen';//'hidden'; +$lang['none'] = 'geen';//'none'; +$lang['save_changes'] = 'veranderingen opslaan';//'Save Changes'; +$lang['add_value'] = 'waarde toevoegen';//'add value'; +$lang['add_value_tooltip'] = 'voeg een extra waarde toe aan dit attribuut';//'Add an additional value to this attribute'; +$lang['refresh_entry'] = 'vernieuwen';// 'Refresh'; +$lang['refresh_this_entry'] = 'dit veld vernieuwen';//'Refresh this entry'; +$lang['delete_hint'] = 'tip: om een attribuut te verwijderen, maak deze leeg en sla hem op';//'Hint: To delete an attribute, empty the text field and click save.'; +$lang['attr_schema_hint'] = 'Tip: om het schema voor een attribuut te bekijken, klik op de attribuutnaam';//'Hint: To view the schema for an attribute, click the attribute name.'; +$lang['attrs_modified'] = 'sommige attributen (%s) zijn gewijzigd en worden ge-highlight weergegeven.';//'Some attributes (%s) were modified and are highlighted below.'; +$lang['attr_modified'] = 'een attribuut (%s) is gewijzigd en wordt ge-highlight weergegeven';//'An attribute (%s) was modified and is highlighted below.'; +$lang['viewing_read_only'] = 'veld bekijken (alleen-lezen)';//'Viewing entry in read-only mode.'; +$lang['change_entry_rdn'] = 'verander de RDN van dit veld';//'Change this entry\'s RDN'; +$lang['no_new_attrs_available'] = 'geen nieuwe attributen beschikbaar voor dit veld';//'no new attributes available for this entry'; +$lang['binary_value'] = 'binaire waarde';//'Binary value'; +$lang['add_new_binary_attr'] = 'nieuwe binair attribuut toevoegen';//'Add New Binary Attribute'; +$lang['add_new_binary_attr_tooltip'] = 'lees binair attribuut in vanuit een bestand';//'Add a new binary attribute/value from a file'; +$lang['alias_for'] = 'alias voor';//'Alias for'; +$lang['download_value'] = 'waarde downloaden';//'download value'; +$lang['delete_attribute'] = 'attribuut verwijderen';//'delete attribute'; +$lang['true'] = 'waar';//'true'; +$lang['false'] = 'onwaar';//'false'; +$lang['none_remove_value'] = 'niets, verwijder waarde';//?? //'none, remove value'; +$lang['really_delete_attribute'] = 'dit attribuut echt verwijderen';//'Really delete attribute'; + +// Schema browser +$lang['the_following_objectclasses'] = 'Deze LDAP server ondersteunt de volgende objectClasses.';//'The following objectClasses are supported by this LDAP server.'; +$lang['the_following_attributes'] = 'Deze LDAP server ondersteunt de volgende attributeTypes.';//'The following attributeTypes are supported by this LDAP server.'; +$lang['the_following_matching'] = 'Deze LDAP server ondersteunt de volgende zoekregels.';//'The following matching rules are supported by this LDAP server.'; +$lang['the_following_syntaxes'] = 'Deze LDAP server ondersteunt de volgende syntaxen.';//'The following syntaxes are supported by this LDAP server.'; +$lang['jump_to_objectclass'] = 'ga naar objectClass';//'Jump to an objectClass'; +$lang['jump_to_attr'] = 'ga naar een attribuut';//'Jump to an attribute'; +$lang['schema_for_server'] = 'schema voor server';//'Schema for server'; +$lang['required_attrs'] = 'vereiste attributen';//'Required Attributes'; +$lang['optional_attrs'] = 'niet vereiste attributen';//'Optional Attributes'; +$lang['OID'] = 'OID';//'OID'; +$lang['desc'] = 'omschrijving';//'Description'; +$lang['name'] = 'naam';//'Name'; +$lang['is_obsolete'] = 'deze objectClass is verouderd';//'This objectClass is obsolete'; +$lang['inherits'] = 'afgeleid van';//'Inherits'; +$lang['jump_to_this_oclass'] = 'ga naar objectClass definitie';//'Jump to this objectClass definition'; +$lang['matching_rule_oid'] = 'overeenkomen met OID regel';//'Matching Rule OID'; +$lang['syntax_oid'] = 'Syntax OID';//'Syntax OID'; +$lang['not_applicable'] = 'niet van toepassing';//'not applicable'; +$lang['not_specified'] = 'niet gespecificeerd';//not specified'; + +// Deleting entries +$lang['entry_deleted_successfully'] = 'dit veld \'%s\' succesvol verwijderd';//'Entry \'%s\' deleted successfully.'; +$lang['you_must_specify_a_dn'] = 'U moet een DN aangeven.';//'You must specify a DN'; +$lang['could_not_delete_entry'] = 'kan dit veld niet verwijderen: %s';//'Could not delete the entry: %s'; + + +// Adding objectClass form +$lang['new_required_attrs'] = 'nieuwe benodigde attributen';//'New Required Attributes'; +$lang['requires_to_add'] = 'voor deze actie moet worden toegevoegd:';//'This action requires you to add'; +$lang['new_attributes'] = 'nieuw attribuut';//'new attributes'; +$lang['new_required_attrs_instructions'] = 'Instructies: om deze objectClass toe te voegen, moet u nog specificeren ';//'Instructions: In order to add this objectClass to this entry, you must specify'; +$lang['that_this_oclass_requires'] = 'dat deze objectClass nodig heeft. U kunt dit in dit formulier doen.';//'that this objectClass requires. You can do so in this form.'; +$lang['add_oclass_and_attrs'] = 'objectClass en attributen toevoegen';//'Add ObjectClass and Attributes'; + +// General +$lang['chooser_link_tooltip'] = 'klik om grafisch een veld te kiezen (DN)';//"Click to popup a dialog to select an entry (DN) graphically'; +$lang['no_updates_in_read_only_mode'] = 'U kunt niet opslaan als de server alleen lezen is';//'You cannot perform updates while server is in read-only mode'; +$lang['bad_server_id'] = 'ongeldig server ID';//'Bad server id'; +$lang['not_enough_login_info'] = 'Onvoldoende informatie om in te kunnen loggen. Controleer de configuratie.';//'Not enough information to login to server. Please check your configuration.'; +$lang['could_not_connect'] = 'Kan LDAP server niet vinden.';//'Could not connect to LDAP server.'; +$lang['could_not_perform_ldap_mod_add'] = 'Kan geen ldap_mod_add uitvoeren.';//'Could not perform ldap_mod_add operation.'; +$lang['bad_server_id_underline'] = 'ongeldig server_ID:';//"Bad server_id: '; +$lang['success'] = 'succes';//"Success'; +$lang['server_colon_pare'] = 'server: ';//"Server: '; +$lang['look_in'] = 'bekijken: ';//"Looking in: '; +$lang['missing_server_id_in_query_string'] = 'geen server ID meegegeven';//'No server ID specified in query string!'; +$lang['missing_dn_in_query_string'] = 'geen DN meegeven';//'No DN specified in query string!'; +$lang['back_up_p'] = 'backup...';//"Back Up...'; +$lang['no_entries'] = 'geen velden';//"no entries'; +$lang['not_logged_in'] = 'niet ingelogd';//"Not logged in'; +$lang['could_not_det_base_dn'] = 'kan de basis-DN niet bepalen';//"Could not determine base DN'; + + +// Add value form +$lang['add_new'] = 'nieuw toevoegen';//'Add new'; +$lang['value_to'] = 'waarde';//'value to'; +$lang['server'] = 'server';//'Server'; +//also used in copy_form.php +$lang['distinguished_name'] = 'Distinguished Name';// 'Distinguished Name'; +$lang['current_list_of'] = 'huidige lijst van';//'Current list of'; +$lang['values_for_attribute'] = 'waarden voor attributen';//'values for attribute'; +$lang['inappropriate_matching_note'] = 'Info: U zult een "inappropriate matching" melding krijgen, indien u niet
    ' . //'Note: You will get an "inappropriate matching" error if you have not
    ' . +'een EQUALITY regel op de LDAP Server voor dit attribuut ingesteld heeft.';//'setup an EQUALITY rule on your LDAP server for this attribute.'; +$lang['enter_value_to_add'] = 'geef de waarde die u wilt toevoegen:';//'Enter the value you would like to add:'; +$lang['new_required_attrs_note'] = 'Info: U kunt verzocht worden nieuwe attributen, die voor deze objectClass verplicht zijn, in te voeren.';//'Note: you may be required to enter new attributes
    that this objectClass requires.'; +$lang['syntax'] = 'syntax';//'Syntax'; + +//Copy.php +$lang['copy_server_read_only'] = 'U kunt niet opslaan als de server alleen lezen is';//"You cannot perform updates while server is in read-only mode'; +$lang['copy_dest_dn_blank'] = 'de bestemmings DN is leeg';//"You left the destination DN blank.'; +$lang['copy_dest_already_exists'] = 'het veld (%s) bestaat al.';//"The destination entry (%s) already exists.'; +$lang['copy_dest_container_does_not_exist'] = 'het doel-veld (%s) bestaat niet.';//'The destination container (%s) does not exist.'; +$lang['copy_source_dest_dn_same'] = 'origineel DN en doel DN zijn hetzelfde';//"The source and destination DN are the same.'; +$lang['copy_copying'] = 'kopieren';//"Copying '; +$lang['copy_recursive_copy_progress'] = 'bezig met recursief kopieren';//"Recursive copy progress'; +$lang['copy_building_snapshot'] = 'bezig met het aanmaken van een snapshot van de boomstructuur... ';//"Building snapshot of tree to copy... '; +$lang['copy_successful_like_to'] = 'Kopieren succesvol! Wit u dan';//"Copy successful! Would you like to '; +$lang['copy_view_new_entry'] = 'het nieuwe veld bekijken';//"view the new entry'; +$lang['copy_failed'] = 'Kopieren van DN mislukt: ';//'Failed to copy DN: '; + + +//edit.php +$lang['missing_template_file'] = 'Waarschuwing: kan de template file niet vinden';//'Warning: missing template file, '; +$lang['using_default'] = 'standaardinstelling gebruiken';//'Using default.'; + +//copy_form.php +$lang['copyf_title_copy'] = 'Kopieren';//"Copy '; +$lang['copyf_to_new_object'] = 'naar een nieuw Objekt';//"to a new object'; +$lang['copyf_dest_dn'] = 'doel DN';//"Destination DN'; +$lang['copyf_dest_dn_tooltip'] = 'De complete DN die aangemaakt wordt bij het kopieren van het bron-veld.';//'The full DN of the new entry to be created when copying the source entry'; +$lang['copyf_dest_server'] = 'bestemmings server';//"Destination Server'; +$lang['copyf_note'] = 'Info: kopieren tussen twee servers gaat alleen maar goped als er geen schema problemen zijn';//"Note: Copying between different servers only works if there are no schema violations'; +$lang['copyf_recursive_copy'] = 'Recursief kopieren van alle sub-velden';//"Recursively copy all children of this object as well.'; + +//create.php +$lang['create_required_attribute'] = 'Fout. U heeft een verplicht veld leeggelaten.';//"Error, you left the value blank for required attribute '; +$lang['create_redirecting'] = 'omleiden';//"Redirecting'; +$lang['create_here'] = 'hier';//"here'; +$lang['create_could_not_add'] = 'kan het object niet toevoegen op de LDAP server.';//"Could not add the object to the LDAP server.'; + +//create_form.php +$lang['createf_create_object'] = 'object aanmaken';//"Create Object'; +$lang['createf_choose_temp'] = 'kies een template';//"Choose a template'; +$lang['createf_select_temp'] = 'kies een template voor dit object';//"Select a template for the creation process'; +$lang['createf_proceed'] = 'verder';//"Proceed'; + +//creation_template.php +$lang['ctemplate_on_server'] = 'op server';//"On server'; +$lang['ctemplate_no_template'] = 'geen template gespecifieerd in de POST variabelen';//"No template specified in POST variables.'; +$lang['ctemplate_config_handler'] = 'uw configuratie specificeert een routine';//"Your config specifies a handler of'; +$lang['ctemplate_handler_does_not_exist'] = 'in deze template. Maar deze routine bestaat niet in de \'templates/creation\' directory.';//"for this template. But, this handler does not exist in the 'templates/creation' directory.'; + +// search.php +$lang['you_have_not_logged_into_server'] = 'u bent nog niet ingelogd op de geselecteerde server, dus u kunt geen zoekopdrachten geven.';//'You have not logged into the selected server yet, so you cannot perform searches on it.'; +$lang['click_to_go_to_login_form'] = 'Klik hier om in te loggen';//'Click here to go to the login form'; +$lang['unrecognized_criteria_option'] = 'Unrecognized criteria option: '; +$lang['if_you_want_to_add_criteria'] = 'Als u uw eigen crteria toe wilt voegen aan de lijst, dient u search.php te bewerken. Sluiten.';//'If you want to add your own criteria to the list. Be sure to edit search.php to handle them. Quitting.'; +$lang['entries_found'] = 'gevonden velden: ';//'Entries found: '; +$lang['filter_performed'] = 'toegepast filter: ';//'Filter performed: '; +$lang['search_duration'] = 'zoeken door phpLDAPadmin duurde';//'Search performed by phpLDAPadmin in'; +$lang['seconds'] = 'seconden';//'seconds'; + +// search_form_advanced.php +$lang['scope_in_which_to_search'] = 'zoekbereik';//'The scope in which to search'; +$lang['scope_sub'] = 'Sub (de hele tak)';//'Sub (entire subtree)'; +$lang['scope_one'] = 'One (een laag diep)';//'One (one level beneath base)'; +$lang['scope_base'] = 'Base (alleen de basis)';//'Base (base dn only)'; +$lang['standard_ldap_search_filter'] = 'Standard LDAP zoekfilter. Voorbeeld.: (&(sn=Smith)(givenname=David))';//'Standard LDAP search filter. Example: (&(sn=Smith)(givenname=David))'; +$lang['search_filter'] = 'zoekfilter';//'Search Filter'; +$lang['list_of_attrs_to_display_in_results'] = 'komma gescheiden lijst van de attributen.';//'A list of attributes to display in the results (comma-separated)'; +$lang['show_attributes'] = 'attributen laten zien';//'Show Attributes'; + +// search_form_simple.php +$lang['search_for_entries_whose'] = 'zoek naar velden waarvoor:';//'Search for entries whose:'; +$lang['equals'] = 'gelijk is aan';//'equals'; +$lang['starts with'] = 'begint met';//'starts with'; +$lang['contains'] = 'bevat';//'contains'; +$lang['ends with'] = 'eindigt met';//'ends with'; +$lang['sounds like'] = 'klinkt als';//'sounds like'; + +// server_info.php +$lang['could_not_fetch_server_info'] = 'kan geen LDAP van de server krijgen';//'Could not retrieve LDAP information from the server'; +$lang['server_info_for'] = 'Server info voor: ';//'Server info for: '; +$lang['server_reports_following'] = 'De server geeft de volgende informatie over zichzelf';//'Server reports the following information about itself'; +$lang['nothing_to_report'] = 'De server heeft niets te melden';//'This server has nothing to report.'; + +//update.php +$lang['update_array_malformed'] = 'De update_array is niet goed. Dat kan een phpLDAPadmin bug zijn. Laat het ons weten!';//'update_array is malformed. This might be a phpLDAPadmin bug. Please report it.'; +$lang['could_not_perform_ldap_modify'] = 'Kan ldap_modify niet uitvoeren.';//'Could not perform ldap_modify operation.'; + +// update_confirm.php +$lang['do_you_want_to_make_these_changes'] = 'Deze veranderingen doorvoeren?';//'Do you want to make these changes?'; +$lang['attribute'] = 'attribuut';//'Attribute'; +$lang['old_value'] = 'oude waarde';//'Old Value'; +$lang['new_value'] = 'nieuwe waarde';//'New Value'; +$lang['attr_deleted'] = '[attribuut verwijderd]';//'[attribute deleted]'; +$lang['commit'] = 'uitvoeren';//'Commit'; +$lang['cancel'] = 'annuleren';//'Cancel'; +$lang['you_made_no_changes'] = 'U heeft geen veranderingen gemaakt.';//'You made no changes'; +$lang['go_back'] = 'terug';//'Go back'; + +// welcome.php +$lang['welcome_note'] = 'Gebruik het linkermenu om te navigeren.';//'Use the menu to the left to navigate'; + +// view_jpeg_photo.php +$lang['unsafe_file_name'] = 'onveilige bestandsnaam: ';//'Unsafe file name: '; +$lang['no_such_file'] = 'Bestand bestaat niet: ';//'No such file: '; + +//function.php +$lang['auto_update_not_setup'] = 'auto_uid_numbers is geactiveerd (%s, maar niet het mechanisme (auto_uid_number_mechanism). U dient dit alsnog te doen.';//"You have enabled auto_uid_numbers for %s in your configuration, but you have not specified the auto_uid_number_mechanism. Please correct this problem.'; +$lang['uidpool_not_set'] = 'Het mechanisme auto_uid_number_mechanism is als uidpool voor server %s vastgelegd, maar niet de auto_uid_number_uid_pool_dn. U dient dit alsnog te doen.';//"You specified the auto_uid_number_mechanism as uidpool in your configuration for server %s, but you did not specify the audo_uid_number_uid_pool_dn. Please specify it before proceeding.'; + +$lang['uidpool_not_exist'] = 'De uidPool die gespecificeerd is in de configuratie bestaat niet.';//"It appears that the uidPool you specified in your configuration (%s) does not exist.'; + +$lang['specified_uidpool'] = 'De auto_uid_number_mechanism is als search in de configuratie voor de server %s bepaald, maar de waarde auto_uid_number_search_base niet. U dient dit alsnog te doen.';//"You specified the auto_uid_number_mechanism as search in your configuration for server %s, but you did not specify the auto_uid_number_search_base. Please specify it before proceeding.'; + +$lang['auto_uid_invalid_value'] = 'Ongeldige waarde voor auto_uid_number_mechanism(%s). Alleen uidpool und search zijn geldig. Gaarne de fout herstellen ';//"You specified an invalid value for auto_uid_number_mechanism (%s) in your configration. Only uidpool and search are valid. Please correct this problem.'; + +$lang['error_auth_type_config'] = 'Fout: Er zit een fout inde configuratiefile (config.php). De enige twee waarden voor \'auth_type\' in de $servers sectie zijn: \'config\' of \'form\'. U heeft er nu %s in staan en dat kan niet.';//"Error: You have an error in your config file. The only two allowed values for 'auth_type' in the $servers section are 'config' and 'form'. You entered '%s', which is not allowed. '; + +$lang['php_install_not_supports_tls'] = 'Uw installatie ondersteunt geen TLS.';//"Your PHP install does not support TLS'; +$lang['could_not_start_tls'] = 'Kan TLS niet starten.
    Controleer de LDAP-Server-configuratie.';//"Could not start TLS.
    Please check your LDAP server configuration.'; +$lang['auth_type_not_valid'] = 'Fout in de configuratiefile: auth_type %s is niet geldig'; //"You have an error in your config file. auth_type of %s is not valid.'; +$lang['ldap_said'] = 'LDAP zegt: %s

    ';//"LDAP said: %s

    '; +$lang['ferror_error'] = 'Fout';//"Error'; +$lang['fbrowse'] = 'navigeer';//"browse'; +$lang['delete_photo'] = 'Foto verwijderen';//"Delete Photo'; +$lang['install_not_support_blowfish'] = 'Uw PHP-Versie ondersteunt geen Blowfish versleuteling.';//"Your PHP install does not support blowfish encryption.'; +$lang['install_no_mash'] = 'Uw PHP-Versie ondersteunt de functie mhash() niet, dus de SHA-hash is niet mogelijk.';// "Your PHP install does not have the mhash() function. Cannot do SHA hashes.'; +$lang['jpeg_contains_errors'] = 'Foto (jpg) bevat fouten';//"jpegPhoto contains errors
    '; +$lang['ferror_number'] = 'Foutnummer: %s(%s)

    ';//"Error number: %s (%s)

    '; +$lang['ferror_discription'] ='Omschrijving: %s

    ';// "Description: %s

    '; +$lang['ferror_number_short'] = 'Foutnummer:%s

    ';//"Error number: %s

    '; +$lang['ferror_discription_short'] = 'Omschrijving: (geen omschrijving beschikbaar)
    ';//"Description: (no description available)
    '; +$lang['ferror_submit_bug'] = 'Is het een phpLDAPadmin fout? Als dat zo is, dan gaarne een bugreport invullen';//"Is this a phpLDAPadmin bug? If so, please report it.'; +$lang['ferror_unrecognized_num'] = 'Onbekend foutnummer:';//"Unrecognized error number: '; + +$lang['ferror_nonfatil_bug'] = '
    Een niet fatale fout in phpLDAPadmin gevonden!
    Fout:%s (%s)
    Bestand:%sRegel:%s, aangeroepen door %s
    Versie:PLA: %s, PHP: %s, SAPI: %s
    Web server:%s
    Graag een bugreport invullen.

    ';//"
    You found a non-fatal phpLDAPadmin bug!
    Error:%s (%s)
    File:%s line %s, caller %s
    Versions:PLA: %s, PHP: %s, SAPI: %s
    Web server:%s
    Please report this bug by clicking here.

    '; + +$lang['ferror_congrats_found_bug'] = '
    + + + + + +
    Gefeliciteerd! Een fout in phpLDAPadmin gevonden!
    Fout:%s (%s)
    Bestand:%s, aangeroepen door %s
    Versie:PLA: %s, PHP: %s, SAPI: %s
    Web server:%s
    Graag een bugreport invullen.

    ';//"Congratulations! You found a bug in phpLDAPadmin.

    Error:%s
    Level:%s
    File:%s
    Line:%s
    Caller:%s
    PLA Version:%s
    PHP Version:%s
    PHP SAPI:%s
    Web server:%s

    Please report this bug by clicking below!'; + +// extra strings: + +$lang['login_link'] = 'Login...'; +$lang['import_ldif_file_title'] = 'Import file from LDIF'; +$lang['select_ldif_file'] = 'Selecteer een LDIF file:'; +$lang['select_ldif_file_proceed']= 'Ga door &gt;&gt;'; +$lang['add_action'] = 'Toevoegen...'; +$lang['delete_action'] = 'Verwijderen...'; +$lang['rename_action'] = 'Hernoemen...'; +$lang['modify_action'] = 'Veranderen...'; +$lang['failed'] = 'mislukt'; +$lang['ldif_parse_error'] = 'LDIF inleesfout'; +$lang['ldif_could_not_add_object'] = 'Kan object niet toevoegen:'; +$lang['ldif_could_not_rename_object'] = 'Kan object niet hernoemen'; +$lang['ldif_could_not_delete_object'] = 'Kan object niet verwijderen'; +$lang['ldif_could_not_modify_object'] = 'Kan object niet wijzigen'; +$lang['ldif_line_number'] = 'regelnummer: '; +$lang['ldif_line'] = 'regel: '; + +?> diff --git a/lang/recoded/ru.php b/lang/recoded/ru.php new file mode 100644 index 0000000..088e5d4 --- /dev/null +++ b/lang/recoded/ru.php @@ -0,0 +1,259 @@ +Удалить атрибут, очистите текстовое поле и нажмите сохрнить.';//'Hint: To delete an attribute, empty the text field and click save.'; +$lang['viewing_read_only'] = 'Просмотреть запись в режиме только для чтения';//'Viewing entry in read-only mode.'; +$lang['change_entry_rdn'] = 'Change this entry\'s RDN'; +$lang['no_new_attrs_available'] = 'нет новых атрибутов для этой записи';//'no new attributes available for this entry'; +$lang['binary_value'] = 'Бинарное значение';//'Binary value'; +$lang['add_new_binary_attr'] = 'Добавить новый бинарный атрибут';//'Add New Binary Attribute'; +$lang['add_new_binary_attr_tooltip'] = 'Добавить новый бинарный атрибут/значение с файла';//'Add a new binary attribute/value from a file'; +$lang['alias_for'] = 'Алиас для';//'Alias for'; +$lang['download_value'] = 'загрузить значение';//'download value'; +$lang['delete_attribute'] = 'удалить атрибут';//'delete attribute'; +$lang['true'] = 'да';//'true'; +$lang['false'] = 'нет';//'false'; +$lang['none_remove_value'] = 'нет, удалите значение';//'none, remove value'; +$lang['really_delete_attribute'] = 'Really delete attribute'; + +// Schema browser +$lang['the_following_objectclasses'] = 'Следующий objectClasses поддерживаеться этим LDAP сервером.';;//'The following objectClasses are supported by this LDAP server.'; +$lang['the_following_attributes'] = 'Следующий attributeTypes поддерживаеться этим LDAP севером.';//The following attributeTypes are supported by this LDAP server.'; +$lang['the_following_matching'] = 'Следующий matching rules поддерживаеться этим LDAP севером.';//'The following matching rules are supported by this LDAP server.'; +$lang['the_following_syntaxes'] = 'Следующий syntaxes поддерживаеться этим LDAP сервером.';//'The following syntaxes are supported by this LDAP server.'; +$lang['jump_to_objectclass'] = 'Перейти к objectClass';//'Jump to an objectClass'; +$lang['jump_to_attr'] = 'Перейти к атрибутам';//'Jump to an attribute'; +$lang['schema_for_server'] = 'Схема для сервера';//'Schema for server'; +$lang['required_attrs'] = 'Запрошеные атрибуты';//'Required Attributes'; +$lang['optional_attrs'] = 'Оптимальные отрибуты';//'Optional Attributes'; +$lang['OID'] = 'OID'; +$lang['desc'] = 'Описание';//'Description'; +$lang['is_obsolete'] = 'Этот objectClass есть obsolete';//'This objectClass is obsolete'; +$lang['inherits'] = 'Наследование'; +$lang['jump_to_this_oclass'] = 'Перейти к этому objectClass описанию';//'Jump to this objectClass definition'; +$lang['matching_rule_oid'] = 'Matching Rule OID'; +$lang['syntax_oid'] = 'Syntax OID'; + +// Adding objectClass form +$lang['new_required_attrs'] = 'Новые запрошеные параметры';// 'New Required Attributes'; +$lang['requires_to_add'] = 'Это действие запрошено вами к добавлению';//'This action requires you to add'; +$lang['new_attributes'] = 'новые атрибуты';//'new attributes'; +$lang['new_required_attrs_instructions'] = 'Instructions: In order to add this objectClass to this entry, you must specify'; +$lang['that_this_oclass_requires'] = 'that this objectClass requires. You can do so in this form.'; +$lang['add_oclass_and_attrs'] = 'И ObjectClass и Attributes';//'Add ObjectClass and Attributes'; + +// General +$lang['chooser_link_tooltip'] = 'Click to popup a dialog to select an entry (DN) graphically'; +$lang['no_updates_in_read_only_mode'] = 'You cannot perform updates while server is in read-only mode'; +$lang['bad_server_id'] = 'Плохой сервера id';//'Bad server id'; +$lang['not_enough_login_info'] = 'Не достаточно информации для подключения к серверу. Пожалуста проверте Вашу конфигулацию.';//'Not enough information to login to server. Please check your configuration.'; +$lang['could_not_connect'] = 'Не могу подключиться к LDAP сервером';//'Could not connect to LDAP server.'; +$lang['could_not_perform_ldap_mod_add'] = 'Could not perform ldap_mod_add operation.'; + +// Add value form +$lang['add_new'] = 'Добавить новый';//'Add new'; +$lang['value_to'] = 'Значение к';//'value to'; +$lang['server'] = 'Сервер';//'Server'; +$lang['distinguished_name'] = 'Distinguished Name'; +$lang['current_list_of'] = 'Текущий список';//'Current list of'; +$lang['values_for_attribute'] = 'значение для атрибута';//'values for attribute'; +$lang['inappropriate_matching_note'] = 'Note: You will get an "inappropriate matching" error if you have not
    ' . + 'setup an EQUALITY rule on your LDAP server for this attribute.'; +$lang['enter_value_to_add'] = 'Enter the value you would like to add:'; +$lang['new_required_attrs_note'] = 'Note: you may be required to enter new attributes
    that this objectClass requires.'; +$lang['syntax'] = 'Синтаксис';//'Syntax'; + +// Incomplete or Erroneous Language Files +$lang['attr_name_tooltip'] = 'attr_name_tooltip'; +$lang['refresh_entry']= 'обновить запись'; +$lang['attr_schema_hint']='атрибут схемы подсказки'; +$lang['attrs_modified']='атрибуты изменены'; +$lang['attr_modified']='атрибут изменен'; +$lang['name']='имя'; +$lang['not_applicable']='не применимый'; +$lang['not_specified']='не орпеделенный'; +$lang['entry_deleted_successfully']='запись удалена успешно'; +$lang['you_must_specify_a_dn']='вы должны определить DN'; +$lang['could_not_delete_entry']='не возможно удалить запись'; +$lang['bad_server_id_underline']='неверный id сервера подчеркивать'; +$lang['success']='успешно'; +$lang['server_colon_pare']='вырезать двоеточие севера'; +$lang['look_in']='рассматривать'; +$lang['missing_server_id_in_query_string']='отсутсвует id сервера в строке запроса'; +$lang['missing_dn_in_query_string']='отсутсвует dn в строке запроса'; +$lang['back_up_p']='back up p'; +$lang['no_entries']='нет записей'; +$lang['not_logged_in']='не зарагестрирован в'; +$lang['could_not_det_base_dn']='не возможно определить Base DN'; +$lang['copy_server_read_only']='корировать сервер только для чтения'; +$lang['copy_dest_dn_blank']='копировать в расположение пустого DN'; +$lang['copy_dest_already_exists']='копировать в расположение уже существующее'; +$lang['copy_dest_container_does_not_exist']='копировать в расположение которое не существует'; +$lang['copy_source_dest_dn_same']='копировать с исходного расположения в тот же DN '; +$lang['copy_copying']='копировать копирование'; +$lang['copy_recursive_copy_progress']='копирование процес рекурсивного копирования'; +$lang['copy_building_snapshot']='копирование кадра построение'; +$lang['copy_successful_like_to']='копирование успешно подобно до '; +$lang['copy_view_new_entry']='копирование просмотр новых записей'; +$lang['copy_failed']='копирование неудачно'; +$lang['missing_template_file']='нет временого файла'; +$lang['using_default']='использовать по умолчанию'; +$lang['copyf_title_copy']='копировать заголовок копировать'; +$lang['copyf_to_new_object']='копировать новый объект'; +$lang['copyf_dest_dn']='копировать расположение DN'; +$lang['copyf_dest_dn_tooltip']='копировать расположение DN toolip'; +$lang['copyf_dest_server']='копировать расположение сервера'; +$lang['copyf_note']='копировать записку'; +$lang['copyf_recursive_copy']='копирование рекурсивное копирование'; +$lang['create_required_attribute']='создать необходимый атрибут'; +$lang['create_redirecting']='создать переназначение'; +$lang['create_here']='создать сдесь'; +$lang['create_could_not_add']='создание не может добавление'; +$lang['createf_create_object']='создать объект'; +$lang['createf_choose_temp']='выбрать шаблон'; +$lang['createf_select_temp']='выбрать шаблон'; +$lang['createf_proceed']='обработаный'; +$lang['ctemplate_on_server']='на сервер'; +$lang['ctemplate_no_template']='нет шаблона'; +$lang['ctemplate_config_handler']='скофигурировать инструктора'; +$lang['ctemplate_handler_does_not_exist']='конструктор не существует'; +$lang['you_have_not_logged_into_server']='Вы не зарегестрировались на сервере'; +$lang['click_to_go_to_login_form']='нажмите для регистрации'; +$lang['unrecognized_criteria_option']='неизвесна опция критерия'; +$lang['if_you_want_to_add_criteria']='если Вы хотите добавить критерий'; +$lang['entries_found']='записи найдены'; +$lang['filter_performed']='фильтер выполнен'; +$lang['search_duration']='поиск длительный'; +$lang['seconds']='секунды'; +$lang['scope_in_which_to_search']='в которой искать'; +$lang['scope_sub']='под'; +$lang['scope_one']='одна область'; +$lang['scope_base']='база'; +$lang['standard_ldap_search_filter']='стандартный ldap поисковый фильтер'; +$lang['search_filter']='фильтер поиска'; +$lang['list_of_attrs_to_display_in_results']='список атрибутов показать в результате'; +$lang['starts with']='начинать с'; +$lang['ends with']='заканчивать с'; +$lang['sounds like']='звучит подобно'; +$lang['could_not_fetch_server_info']='не могу получить информацию с сервера'; +$lang['server_info_for']='инфа сервера для'; +$lang['server_reports_following']='отчет сервера следует'; +$lang['nothing_to_report']='нечего показать для отчета'; +$lang['update_array_malformed']='update_array_malformed'; +$lang['could_not_perform_ldap_modify']='нельзя разрешить изменение ldap'; +$lang['do_you_want_to_make_these_changes']='хотите сделать эти изменения'; +$lang['attribute']='атрибут'; +$lang['old_value']='старое значение'; +$lang['new_value']='новое значение'; +$lang['attr_deleted']='атрибут удален'; +$lang['commit']='подтвердить'; +$lang['cancel']='отменить'; +$lang['you_made_no_changes']='Вы ничего не изменили '; +$lang['go_back']='назад'; +$lang['welcome_note']='пригасительная запись'; +$lang['unsafe_file_name']='ненадежное имя файла'; +$lang['no_such_file']='нет такого файла'; +$lang['auto_update_not_setup']='авто-обновление не устанавливать'; +$lang['uidpool_not_set']='uidpool не указан'; +$lang['uidpool_not_exist']='uidpool не существует'; +$lang['specified_uidpool']='определите uidpool'; +$lang['auto_uid_invalid_value']='auto uid неправильное значение'; +$lang['error_auth_type_config']='error_auth_type_config'; +$lang['php_install_not_supports_tls']='установленый PHP не поддерживает tls'; +$lang['could_not_start_tls']='нельзя начать tls'; +$lang['auth_type_not_valid']='тип авторизации не правильный'; +$lang['ldap_said']='ldap сказал'; +$lang['ferror_error']='ошибка'; +$lang['fbrowse']='просмотреть'; +$lang['delete_photo']='удалить фото'; +$lang['install_not_support_blowfish']='установка не поддерживает blowfish'; +$lang['install_no_mash']='install_no_mash'; +$lang['jpeg_contains_errors']='jpeg содержит ошибки'; +$lang['ferror_number']='номер ошибки'; +$lang['ferror_discription']='ошибка описания'; +$lang['ferror_number_short']='число короткое'; +$lang['ferror_discription_short']='описание короткое'; +$lang['ferror_submit_bug']='подтвердите баг'; +$lang['ferror_unrecognized_num']='неивесный номер ошибки '; +$lang['ferror_nonfatil_bug']='не фатальная ошибка'; +$lang['ferror_congrats_found_bug']='поздравление нашедшим баг'; + +?> diff --git a/lang/ru.php b/lang/ru.php new file mode 100644 index 0000000..f93dd24 --- /dev/null +++ b/lang/ru.php @@ -0,0 +1,259 @@ +Удалить атрибут, очиÑтите текÑтовое поле и нажмите Ñохрнить.';//'Hint: To delete an attribute, empty the text field and click save.'; +$lang['viewing_read_only'] = 'ПроÑмотреть запиÑÑŒ в режиме только Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ';//'Viewing entry in read-only mode.'; +$lang['change_entry_rdn'] = 'Change this entry\'s RDN'; +$lang['no_new_attrs_available'] = 'нет новых атрибутов Ð´Ð»Ñ Ñтой запиÑи';//'no new attributes available for this entry'; +$lang['binary_value'] = 'Бинарное значение';//'Binary value'; +$lang['add_new_binary_attr'] = 'Добавить новый бинарный атрибут';//'Add New Binary Attribute'; +$lang['add_new_binary_attr_tooltip'] = 'Добавить новый бинарный атрибут/значение Ñ Ñ„Ð°Ð¹Ð»Ð°';//'Add a new binary attribute/value from a file'; +$lang['alias_for'] = 'ÐÐ»Ð¸Ð°Ñ Ð´Ð»Ñ';//'Alias for'; +$lang['download_value'] = 'загрузить значение';//'download value'; +$lang['delete_attribute'] = 'удалить атрибут';//'delete attribute'; +$lang['true'] = 'да';//'true'; +$lang['false'] = 'нет';//'false'; +$lang['none_remove_value'] = 'нет, удалите значение';//'none, remove value'; +$lang['really_delete_attribute'] = 'Really delete attribute'; + +// Schema browser +$lang['the_following_objectclasses'] = 'Следующий objectClasses поддерживаетьÑÑ Ñтим LDAP Ñервером.';;//'The following objectClasses are supported by this LDAP server.'; +$lang['the_following_attributes'] = 'Следующий attributeTypes поддерживаетьÑÑ Ñтим LDAP Ñевером.';//The following attributeTypes are supported by this LDAP server.'; +$lang['the_following_matching'] = 'Следующий matching rules поддерживаетьÑÑ Ñтим LDAP Ñевером.';//'The following matching rules are supported by this LDAP server.'; +$lang['the_following_syntaxes'] = 'Следующий syntaxes поддерживаетьÑÑ Ñтим LDAP Ñервером.';//'The following syntaxes are supported by this LDAP server.'; +$lang['jump_to_objectclass'] = 'Перейти к objectClass';//'Jump to an objectClass'; +$lang['jump_to_attr'] = 'Перейти к атрибутам';//'Jump to an attribute'; +$lang['schema_for_server'] = 'Схема Ð´Ð»Ñ Ñервера';//'Schema for server'; +$lang['required_attrs'] = 'Запрошеные атрибуты';//'Required Attributes'; +$lang['optional_attrs'] = 'Оптимальные отрибуты';//'Optional Attributes'; +$lang['OID'] = 'OID'; +$lang['desc'] = 'ОпиÑание';//'Description'; +$lang['is_obsolete'] = 'Этот objectClass еÑÑ‚ÑŒ obsolete';//'This objectClass is obsolete'; +$lang['inherits'] = 'ÐаÑледование'; +$lang['jump_to_this_oclass'] = 'Перейти к Ñтому objectClass опиÑанию';//'Jump to this objectClass definition'; +$lang['matching_rule_oid'] = 'Matching Rule OID'; +$lang['syntax_oid'] = 'Syntax OID'; + +// Adding objectClass form +$lang['new_required_attrs'] = 'Ðовые запрошеные параметры';// 'New Required Attributes'; +$lang['requires_to_add'] = 'Это дейÑтвие запрошено вами к добавлению';//'This action requires you to add'; +$lang['new_attributes'] = 'новые атрибуты';//'new attributes'; +$lang['new_required_attrs_instructions'] = 'Instructions: In order to add this objectClass to this entry, you must specify'; +$lang['that_this_oclass_requires'] = 'that this objectClass requires. You can do so in this form.'; +$lang['add_oclass_and_attrs'] = 'И ObjectClass и Attributes';//'Add ObjectClass and Attributes'; + +// General +$lang['chooser_link_tooltip'] = 'Click to popup a dialog to select an entry (DN) graphically'; +$lang['no_updates_in_read_only_mode'] = 'You cannot perform updates while server is in read-only mode'; +$lang['bad_server_id'] = 'Плохой Ñервера id';//'Bad server id'; +$lang['not_enough_login_info'] = 'Ðе доÑтаточно информации Ð´Ð»Ñ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ðº Ñерверу. ПожалуÑта проверте Вашу конфигулацию.';//'Not enough information to login to server. Please check your configuration.'; +$lang['could_not_connect'] = 'Ðе могу подключитьÑÑ Ðº LDAP Ñервером';//'Could not connect to LDAP server.'; +$lang['could_not_perform_ldap_mod_add'] = 'Could not perform ldap_mod_add operation.'; + +// Add value form +$lang['add_new'] = 'Добавить новый';//'Add new'; +$lang['value_to'] = 'Значение к';//'value to'; +$lang['server'] = 'Сервер';//'Server'; +$lang['distinguished_name'] = 'Distinguished Name'; +$lang['current_list_of'] = 'Текущий ÑпиÑок';//'Current list of'; +$lang['values_for_attribute'] = 'значение Ð´Ð»Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð°';//'values for attribute'; +$lang['inappropriate_matching_note'] = 'Note: You will get an "inappropriate matching" error if you have not
    ' . + 'setup an EQUALITY rule on your LDAP server for this attribute.'; +$lang['enter_value_to_add'] = 'Enter the value you would like to add:'; +$lang['new_required_attrs_note'] = 'Note: you may be required to enter new attributes
    that this objectClass requires.'; +$lang['syntax'] = 'СинтакÑиÑ';//'Syntax'; + +// Incomplete or Erroneous Language Files +$lang['attr_name_tooltip'] = 'attr_name_tooltip'; +$lang['refresh_entry']= 'обновить запиÑÑŒ'; +$lang['attr_schema_hint']='атрибут Ñхемы подÑказки'; +$lang['attrs_modified']='атрибуты изменены'; +$lang['attr_modified']='атрибут изменен'; +$lang['name']='имÑ'; +$lang['not_applicable']='не применимый'; +$lang['not_specified']='не орпеделенный'; +$lang['entry_deleted_successfully']='запиÑÑŒ удалена уÑпешно'; +$lang['you_must_specify_a_dn']='вы должны определить DN'; +$lang['could_not_delete_entry']='не возможно удалить запиÑÑŒ'; +$lang['bad_server_id_underline']='неверный id Ñервера подчеркивать'; +$lang['success']='уÑпешно'; +$lang['server_colon_pare']='вырезать двоеточие Ñевера'; +$lang['look_in']='раÑÑматривать'; +$lang['missing_server_id_in_query_string']='отÑутÑвует id Ñервера в Ñтроке запроÑа'; +$lang['missing_dn_in_query_string']='отÑутÑвует dn в Ñтроке запроÑа'; +$lang['back_up_p']='back up p'; +$lang['no_entries']='нет запиÑей'; +$lang['not_logged_in']='не зарагеÑтрирован в'; +$lang['could_not_det_base_dn']='не возможно определить Base DN'; +$lang['copy_server_read_only']='корировать Ñервер только Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ'; +$lang['copy_dest_dn_blank']='копировать в раÑположение пуÑтого DN'; +$lang['copy_dest_already_exists']='копировать в раÑположение уже ÑущеÑтвующее'; +$lang['copy_dest_container_does_not_exist']='копировать в раÑположение которое не ÑущеÑтвует'; +$lang['copy_source_dest_dn_same']='копировать Ñ Ð¸Ñходного раÑÐ¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð² тот же DN '; +$lang['copy_copying']='копировать копирование'; +$lang['copy_recursive_copy_progress']='копирование Ð¿Ñ€Ð¾Ñ†ÐµÑ Ñ€ÐµÐºÑƒÑ€Ñивного копированиÑ'; +$lang['copy_building_snapshot']='копирование кадра поÑтроение'; +$lang['copy_successful_like_to']='копирование уÑпешно подобно до '; +$lang['copy_view_new_entry']='копирование проÑмотр новых запиÑей'; +$lang['copy_failed']='копирование неудачно'; +$lang['missing_template_file']='нет временого файла'; +$lang['using_default']='иÑпользовать по умолчанию'; +$lang['copyf_title_copy']='копировать заголовок копировать'; +$lang['copyf_to_new_object']='копировать новый объект'; +$lang['copyf_dest_dn']='копировать раÑположение DN'; +$lang['copyf_dest_dn_tooltip']='копировать раÑположение DN toolip'; +$lang['copyf_dest_server']='копировать раÑположение Ñервера'; +$lang['copyf_note']='копировать запиÑку'; +$lang['copyf_recursive_copy']='копирование рекурÑивное копирование'; +$lang['create_required_attribute']='Ñоздать необходимый атрибут'; +$lang['create_redirecting']='Ñоздать переназначение'; +$lang['create_here']='Ñоздать ÑдеÑÑŒ'; +$lang['create_could_not_add']='Ñоздание не может добавление'; +$lang['createf_create_object']='Ñоздать объект'; +$lang['createf_choose_temp']='выбрать шаблон'; +$lang['createf_select_temp']='выбрать шаблон'; +$lang['createf_proceed']='обработаный'; +$lang['ctemplate_on_server']='на Ñервер'; +$lang['ctemplate_no_template']='нет шаблона'; +$lang['ctemplate_config_handler']='Ñкофигурировать инÑтруктора'; +$lang['ctemplate_handler_does_not_exist']='конÑтруктор не ÑущеÑтвует'; +$lang['you_have_not_logged_into_server']='Ð’Ñ‹ не зарегеÑтрировалиÑÑŒ на Ñервере'; +$lang['click_to_go_to_login_form']='нажмите Ð´Ð»Ñ Ñ€ÐµÐ³Ð¸Ñтрации'; +$lang['unrecognized_criteria_option']='неизвеÑна Ð¾Ð¿Ñ†Ð¸Ñ ÐºÑ€Ð¸Ñ‚ÐµÑ€Ð¸Ñ'; +$lang['if_you_want_to_add_criteria']='еÑли Ð’Ñ‹ хотите добавить критерий'; +$lang['entries_found']='запиÑи найдены'; +$lang['filter_performed']='фильтер выполнен'; +$lang['search_duration']='поиÑк длительный'; +$lang['seconds']='Ñекунды'; +$lang['scope_in_which_to_search']='в которой иÑкать'; +$lang['scope_sub']='под'; +$lang['scope_one']='одна облаÑÑ‚ÑŒ'; +$lang['scope_base']='база'; +$lang['standard_ldap_search_filter']='Ñтандартный ldap поиÑковый фильтер'; +$lang['search_filter']='фильтер поиÑка'; +$lang['list_of_attrs_to_display_in_results']='ÑпиÑок атрибутов показать в результате'; +$lang['starts with']='начинать Ñ'; +$lang['ends with']='заканчивать Ñ'; +$lang['sounds like']='звучит подобно'; +$lang['could_not_fetch_server_info']='не могу получить информацию Ñ Ñервера'; +$lang['server_info_for']='инфа Ñервера длÑ'; +$lang['server_reports_following']='отчет Ñервера Ñледует'; +$lang['nothing_to_report']='нечего показать Ð´Ð»Ñ Ð¾Ñ‚Ñ‡ÐµÑ‚Ð°'; +$lang['update_array_malformed']='update_array_malformed'; +$lang['could_not_perform_ldap_modify']='Ð½ÐµÐ»ÑŒÐ·Ñ Ñ€Ð°Ð·Ñ€ÐµÑˆÐ¸Ñ‚ÑŒ изменение ldap'; +$lang['do_you_want_to_make_these_changes']='хотите Ñделать Ñти изменениÑ'; +$lang['attribute']='атрибут'; +$lang['old_value']='Ñтарое значение'; +$lang['new_value']='новое значение'; +$lang['attr_deleted']='атрибут удален'; +$lang['commit']='подтвердить'; +$lang['cancel']='отменить'; +$lang['you_made_no_changes']='Ð’Ñ‹ ничего не изменили '; +$lang['go_back']='назад'; +$lang['welcome_note']='пригаÑÐ¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ'; +$lang['unsafe_file_name']='ненадежное Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð°'; +$lang['no_such_file']='нет такого файла'; +$lang['auto_update_not_setup']='авто-обновление не уÑтанавливать'; +$lang['uidpool_not_set']='uidpool не указан'; +$lang['uidpool_not_exist']='uidpool не ÑущеÑтвует'; +$lang['specified_uidpool']='определите uidpool'; +$lang['auto_uid_invalid_value']='auto uid неправильное значение'; +$lang['error_auth_type_config']='error_auth_type_config'; +$lang['php_install_not_supports_tls']='уÑтановленый PHP не поддерживает tls'; +$lang['could_not_start_tls']='Ð½ÐµÐ»ÑŒÐ·Ñ Ð½Ð°Ñ‡Ð°Ñ‚ÑŒ tls'; +$lang['auth_type_not_valid']='тип авторизации не правильный'; +$lang['ldap_said']='ldap Ñказал'; +$lang['ferror_error']='ошибка'; +$lang['fbrowse']='проÑмотреть'; +$lang['delete_photo']='удалить фото'; +$lang['install_not_support_blowfish']='уÑтановка не поддерживает blowfish'; +$lang['install_no_mash']='install_no_mash'; +$lang['jpeg_contains_errors']='jpeg Ñодержит ошибки'; +$lang['ferror_number']='номер ошибки'; +$lang['ferror_discription']='ошибка опиÑаниÑ'; +$lang['ferror_number_short']='чиÑло короткое'; +$lang['ferror_discription_short']='опиÑание короткое'; +$lang['ferror_submit_bug']='подтвердите баг'; +$lang['ferror_unrecognized_num']='неивеÑный номер ошибки '; +$lang['ferror_nonfatil_bug']='не Ñ„Ð°Ñ‚Ð°Ð»ÑŒÐ½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°'; +$lang['ferror_congrats_found_bug']='поздравление нашедшим баг'; + +?> diff --git a/ldif_export.php b/ldif_export.php index a51b84c..cd9ff4f 100644 --- a/ldif_export.php +++ b/ldif_export.php @@ -13,9 +13,9 @@ require 'common.php'; -$dn = rawurldecode( $_GET['dn'] ); +$dn = $_GET['dn']; $server_id = $_GET['server_id']; -$format = $_GET['format']; +$format = isset( $_GET['format'] ) ? $_GET['format'] : null; $scope = $_GET['scope'] ? $_GET['scope'] : 'base'; check_server_id( $server_id ) or pla_error( "Bad server_id: " . htmlspecialchars( $server_id ) ); diff --git a/ldif_functions.php b/ldif_functions.php index e69062f..cbde523 100644 --- a/ldif_functions.php +++ b/ldif_functions.php @@ -1,418 +1,1024 @@ dn=$dn; + $this->changeType=$changeType; + $this->attributes=$atts; } - $line_number++; - -} - - - -/** - * Get the version of the ldif file - * - **/ - -function ldif_check_version(){ - global $warning; - global $warning_message; - global $error_message; - global $error; - global $line_number; - global $current_line; - - // boolean flag to see if any valid ldif line is found - $ldif_line_found=0; - - while(!ldif_eof()&&!$ldif_line_found &&!$warning){ - - //get the first line - ldif_next_line(); - - // skip line with comment and blank line - if(ldif_is_comment_line()||ldif_is_blank_line()){ - //debug usage - //echo "$line_number -".(ldif_is_comment_line()?"comment":"blank line")."
    "; - } - 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(); + function getDn(){ + return $this->dn; } - return $action; -} + + /** + * Setter method for the distinguished name + * + * @return String the distinguished name of the entry + */ -/** - * Retrieve the dn of an entry - - * @return the dn value of an entry - */ + function setDn($dn){ + $this->dn = $dn; + } -function ldif_fetch_dn_entry(){ + /** + * Getter method for the change type + * + * @param String $changeType the changetype + * + */ - 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; + function getChangeType(){ + return $this->changeType; + } + /** + * Setter method for the distinguished nae + * + * @return String the distinguished name of the entry + */ - while(!ldif_eof()&&!$dn_found&&!$error){ + function setChangeType($changeType){ + $this->changeType = $changeType; + } - //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 - + /** + * Add the attributes to the entry + * + */ - - // 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; -} + function setAttributes($atts){ + $this->attributes = $atts; + } -/** - * 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){ - + /** + * Get the attributes of the entry + * + * @return String[][] the attributes of the entry + */ + function getAttributes(){ + return $this->attributes; - //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; - } +/** + * this exception is similar to the one in LdifReader + * Should be remove latter + * see comment for the class Ldif_LdapEntryReader + * + * + * + */ - } +class LdifEntryReaderException{ + - //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)==":"){ + var $lineNumber; + var $currentLine; + var $message; - // it is binary data,so we just decode it - $attribute_value = base64_decode(trim(substr($attribute_value_part,1))); + /** + * Constructor of the exception + * + * @param int $lineNumber the number of the line where + * the error occured + * @param String currentLine the line wich raised an exception + * @param String the message associated the exception + */ - } - //else if the next charachter is <, we have to handle an url - elseif(substr($attribute_value_part,0,1)=="<"){ + function LdifEntryReaderException($lineNumber,$currentLine,$message){ + $this->lineNumber = $lineNumber; + $this->currentLine =$currentLine; + $this->message = $message; + + } +} + + + +/** + * Class in charge of reading a paricular entry + * Strictly speaking,the fonction of this class + * could go to LdapLdifReader + * + * another reason to delegate to this class + * is that futur change for net_ldap will have to be done only + * in this class + * After we can put it back to the main reader + */ + + + +class LdifEntryReader{ + + //the entry + var $entry; + var $lines; + var $dn=""; + var $_error = 0; + var $_currentLineNumber=1; + /** + * Constructor of the LdifEntryReader + * + * @param String[] $lines the line of the entry + */ + + + function LdifEntryReader(&$lines){ + $this->lines = &$lines; +//need to change the following lines +// $this->_currentLineNumber = $currentLineNumber- count($this->lines); + $dn=$this->_getDnValue(); + $changeType = $this->_readChangeType(); + $this->entry = new LdifEntry($dn,$changeType); + } + + /** + * Read the change type action associated with the entry + * Default action is add + * @return String the change type action of the entry + * + */ + + + function _readChangeType(){ + $changeType ="add"; + $arr = array(); + if(count($this->lines)==0){ + $this->lines[0] = ""; + $this->setLdifEntryReaderException(new LdifEntryReaderException($this->_currentLineNumber,$this->lines[0],"Missing attibutes or changetype attribute for entry",new LdifEntry($this->dn))); + } + if(ereg("changetype:[ ]*(delete|add|modrdn|moddn|modify)",$this->lines[0],$arr)){ + $changeType = $arr[1]; + array_shift($this->lines); + $this->_currentLineNumber++; + } + return $changeType; + } + + /** + * Check if the distinguished name is base 64 encoded + * + * @return bool true if the dn is base 64 encoded + */ + + function _isDnBase64Encoded($dn){ + return ereg("dn::",$dn)?1:0; + } + + + /** + * Return the base64 decoded value of an attribute + * + * @param $attr the attribute to be decoded + * @return String base64 decoded value of an attribute + */ + + function _getBase64DecodedValue($attr){ + return base64_decode(trim($attr)); + } + + + /** + * Fetch the dn value from a line of the ldif file + * + * @param String $currentDnLine line with a distinguished name + * @return the value of the distinguished name + */ + + + function _getDnValue(){ + $currentDnLine=$this->lines[0]; + if($this->_isDNBase64Encoded($currentDnLine)){ + $currentDnValue = $this->_getBase64DecodedValue(substr($currentDnLine,4,strlen($currentDnLine)-1)); + }else{ + $currentDnValue = substr($currentDnLine,3,strlen($currentDnLine)-1); + } + // echo $this->_currentLineNumber; + array_shift($this->lines); + $this->_currentLineNumber++; + return trim($currentDnValue); + } + + /** + * Return the entry read from the ldif lines + * + * + */ + + + function getEntry(){ + + $changeType = $this->entry->getChangeType(); + if($changeType=="add"){ + $this->_getAddAttributes(); + } + elseif($changeType=="delete"){ + //do nothing + } + // $atts = $this->entry->getAttributes(); + elseif($changeType=="modrdn"||$changeType=="moddn"){ + $this->_getModrdnAttributes(); + } + elseif($changeType=="modify"){ + $this->_getModifyAttributes(); + } + return $this->entry; + + } + + /** + * Checked if the parsing of the entry has raised some exception + * + * @return bool true if the reading of the entry raised some exceptions, else otherwise. + * + */ + + function hasRaisedException(){ + return $this->_error; + + } + + /** + * Set the exception handler for the entry reader + * + * @param Ldap_ldifEntryReaderException the exception handler associate + * with the parsing error. + */ + + + function setLdifEntryReaderException($ldifEntryReaderException){ + $this->_error=1; + $this->_ldifEntryReaderException= $ldifEntryReaderException; + } + + + /** + * Return the exception handler of the entry Reader + * + * @return Ldap_LdifEntryReaderException the exception associate with + * the exception wich occur during parsing the file. + */ + function getLdifEntryReaderException(){ + return $this->_ldifEntryReaderException; + } + + /** + * Method to retrieve the attribute value of a ldif line, + * and get the base 64 decoded value if it is encoded + * + * + * + */ + + + function _getAttributeValue($attributeValuePart){ + $attribute_value=""; + if(substr($attributeValuePart,0,1)==":"){ + $attribute_value = $this->_getBase64DecodedValue(trim(substr($attributeValuePart,1))); + } + elseif(substr($attributeValuePart,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_with_scheme= trim(substr($attributeValuePart,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; - } + $file_path = substr(trim($file_path_with_scheme),7); + if($handle = @fopen($file_path, "rb")){ + if(!$attribute_value = @fread($handle,filesize($file_path))){ + $this->setLdifEntryReaderException(new LdifEntryReaderException($this->_currentLineNumber,$this->lines[0],"Unable to read file",$this->entry)); + } + @fclose($handle); + } + else{ + $this->setLdifEntryReaderException(new LdifEntryReaderException($this->_currentLineNumber,$this->lines[0],"Unable to open file",$this->entry)); + } } - //it's a string else{ - $attribute_value = trim($attribute_value_part); - } + $this->setLdifEntryReaderException(new LdifEntryReaderException($this->_currentLineNumber,$this->lines[0],"The url attribute value should begin with file:///",$this->entry)); + } + } + //it's a string + else{ + $attribute_value = $attributeValuePart; + } + return trim($attribute_value); + } + - $attrs[$attribute_name][] = $attribute_value; - //debug - // echo $attr_line_number."- ".$attribute_name.":".$attribute_value."\r\n
    "; + function _getAddAttributes(){ + + if(count($this->lines)==0){ + $this->lines[0]=""; + $this->setLdifEntryReaderException(new LdifEntryReaderException($this->_currentLineNumber,$this->lines[0],"Missing attributes for the entry",$this->entry)); + } + //$attrs =array(); + while(count($this->lines)!=0 &&$this->_error!=1){ + $currentLine = &$this->lines[0]; + // echo $this->_currentLineNumber; + if(ereg(":",$currentLine)){ + + //get the position of the character ":" + $pos = strpos($currentLine,":"); + + //get the description of the attribute + $attributeDescription = substr($currentLine,0, $pos); + + + // get the value part of the attribute + $attribute_value_part = trim(substr($currentLine,$pos+1,strlen($currentLine))); + $attribute_value = $this->_getAttributeValue($attribute_value_part); + $this->entry->attributes[$attributeDescription][] = trim($attribute_value); + //echo count($this->entry->attributes);; + // $this->entry->add($attrs); + array_shift($this->lines); + $this->_currentLineNumber++; + + } + else{ + $this->setLdifEntryReaderException(new LdifEntryReaderException($this->_currentLineNumber,$this->lines[0],"Attribute not well formed",$this->entry)); + + //jetter l'exception + } + + } + + } + + function _getModifyAttributes(){ + if(count($this->lines)==0){ + $this->lines[0]=""; + $this->setLdifEntryReaderException(new LdifEntryReaderException($this->_currentLineNumber,$this->lines[0],"Missing attributes for the entry",$this->entry)); + } + + $numberModification=0; + + // while the array is not empty + while(count($this->lines)!=0 &&$this->_error!=1){ + $new_entry_mod = 0; + // get the current line with the action + $currentLine = &$this->lines[0]; + $attribute= explode(":",$currentLine); + + if(count($attribute)==2){ + $action_attribute = trim($attribute[0]); + $action_attribute_value =trim($attribute[1]); + if($action_attribute != "add" &&$action_attribute!= "delete" &&$action_attribute !=="replace"){ + $this->setLdifEntryReaderException(new LdifEntryReaderException($this->_currentLineNumber,$this->lines[0],"The attribute name should be add, delete or replace",$this->entry)); + } + + // put the action attribute in the array + $this->entry->attributes[$numberModification] = array(); + $this->entry->attributes[$numberModification][$action_attribute] = $this->_getAttributeValue($action_attribute_value); + + // fetching the attribute for the following line + array_shift($this->lines); + + $currentLine=&$this->lines[0]; + $this->_currentLineNumber++; + // while there is attributes for this entry + while(trim($currentLine)!="-"&&trim($currentLine)!=""&&$this->_error!=1 && $new_entry_mod !=1){ + if(ereg(":",$currentLine)){ + + //get the position of the character ":" + $pos = strpos($currentLine,":"); + + //get the description of the attribute + $attribute_name = substr($currentLine,0, $pos); + + // get the value part of the attribute + $attribute_value_part = trim(substr($currentLine,$pos+1,strlen($currentLine))); + $attribute_value = $this->_getAttributeValue($attribute_value_part); + + + // need to handle the special case when whe add an new attribute + if($attribute_name != "add"){ + $this->entry->attributes[$numberModification][$attribute_name][]=$this->_getAttributeValue($attribute_value); + if(count($this->lines)>1){ + array_shift($this->lines); + $this->_currentLineNumber++; + $currentLine = $this->lines[0]; + } + else{ + $this->setLdifEntryReaderException(new LdifEntryReaderException($this->_currentLineNumber,$this->lines[0],"Missing - ?",$this->entry)); + } + } + else{ + // flag set to indicate that we need to build an new attribute array and leave the inner while loop + $new_entry_mod = 1; + } + } + else{ + $this->setLdifEntryReaderException(new LdifEntryReaderException($this->_currentLineNumber,$this->lines[0],"Attribute is not valid",$this->entry)); + } + + }//fin while + $this->_currentLineNumber++; + + //if we encountered the flag new_entry_mod(=1), rebuild an new array and therefore dot not shift + if($new_entry_mod!=1){ + + array_shift($this->lines); + } + $numberModification++; + } + else{ + $this->setLdifEntryReaderException(new LdifEntryReaderException($this->_currentLineNumber,$this->lines[0],"Attribute is not valid",$this->entry)); + } + }// end while + } + + + function _getModrdnAttributes(){ + + $attrs = array(); + $numLines = count($this->lines); + if($numLines != 2 && $numLines !=3){ + if($numLines==0){ + $this->lines[0]=""; + } + $this->setLdifEntryReaderException(new LdifEntryReaderException($this->_currentLineNumber,$this->lines[0],"The entry is not valid",$this->entry)); + } + else{ + $currentLine = $this->lines[0]; + + + //first we need to check if there is an new rdn specified + if(ereg("^newrdn:(:?)",$currentLine)){ + $attributeValue = $this->_getAttributeValue(trim(substr($currentLine,7))); + $attrs['newrdn']=$attributeValue; + + //switch to the deleteoldrdn attribute + array_shift($this->lines); + $this->_currentLineNumber++; +$arr=array(); + if(ereg("^deleteoldrdn:[ ]*(0|1)",$this->lines[0],$arr)){ + $attrs['deleteoldrdn'] = $arr[1]; + + //switch to the possible new superior attribute + if($numLines>2){ + array_shift($this->lines); + $this->_currentLineNumber++; + $currentLine = $this->lines[0]; + + //then the possible new superior attribute + //if(trim($currentLine)!=""){ + + if(ereg("^newsuperior:",$currentLine)){ + $attrs['newsuperior'] = $this->_getAttributeValue(trim(substr($currentLine,12))); + } + else{ + $this->setLdifEntryReaderException(new LdifEntryReaderException($this->_currentLineNumber,$this->lines[0],"the attribute name should be newsuperior",$this->entry)); + } + + } + else{ + //as the first character is not ,,we "can write it this way for teh moment" + if($pos = strpos($this->entry->dn,",")){ + $attrs['newsuperior'] = substr($this->entry->dn,$pos+1); + } + else{ + $this->setLdifEntryReaderException(new LdifEntryReaderException($this->_currentLineNumber,$this->lines[0],"Container is null",$this->entry)); + } + } + } - // 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; + $this->setLdifEntryReaderException(new LdifEntryReaderException($this->_currentLineNumber,$this->lines[0],"a valid deleteoldrdn attribute should be specified",$this->entry)); } } - return $attrs; + else{ + $this->setLdifEntryReaderException(new LdifEntryReaderException($this->_currentLineNumber,$this->lines[0],"a valid newrdn attribute should be specified",$this->entry)); + } + $this->entry->attributes = $attrs; + } + } +} + +/** + * Exception which can be raised during processing the ldif file + * + */ + + +class LdifReaderException{ + + var $lineNumber; + var $message; + var $currentLine; + + /** + * Constructor of the exception + * + * @param int $lineNumber the number of the line where + * the error occured + * @param String currentLine the line wich raised an exception + * @param String the message associated the exception + */ + + + function LdifReaderException($lineNumber,$currentLine,$message){ + $this->lineNumber = $lineNumber; + $this->currentLine =$currentLine; + $this->message = $message; + } } +class FileReader{ + + //the file pointer + var $_fp; + + //the current line number + var $_currentLineNumber; + + // the current line + var $_currentLine; + + /** + * Constructor of the FileReader class + * @param $path2File + */ + + function FileReader($path2File){ + $this->_fp = fopen ($path2File, "r"); + } + + /** + * Returns true if we reached the end of the file. + * + * @return bool true if it's the end of file, false otherwise. + */ + + function eof(){ + return feof($this->_fp); + } + + /** + * Helper method to switch to the next line + * + * @static + */ + + function _nextLine(){ + + //$nextLine=""; + $this->_currentLineNumber++; + $nextLine = fgets($this->_fp, 1024); + $this->_currentLine = $nextLine; + + //need to check if it is a very long line (not folded line for example) + while(!ereg("\n|\r\n|\r",$nextLine) && !$this->eof()){ + $nextLine = fgets($this->_fp, 1024); + $this->_currentLine.= trim($nextLine); + } + } + + /** + * Check if is the current line is a blank line. + * + * @return bool if it is a blank line,false otherwise. + */ + + function _isBlankLine(){ + return(trim($this->_currentLine)=="")?1:0; + } + + function close(){ + return @fclose($this->_fp); + + } + + +} + +/** + * Main parser of the ldif file + * + * @package Ldap + */ + +class LdifReader extends FileReader{ + + // the current entry + var $_currentEntry; + + // array containing the lines of the current entry + var $_currentLines; + + // the reader of the entry + var $_ldapEntryHandler; + + //boolean flag for error + var $_error; + + // warning message. Only use for the verion number + var $_warningMessage; + + // TODO What is this variable? Used below, why? + var $_warningVersion; + + var $_dnLineNumber; + /** + * Private constructor of the LDIFReader class. + * Marked as private as we need to instantiate the class + * by using other constructor with parameters + * Use to initialize instance members. + */ + + function _LdifReader(){ + $this->_error=0; + $this->_warning=0; + $this->_currentLineNumber=0; + $this->_currentLines = array(); + $this->_warningMessage=""; + $this->_warningVersion=""; + //need to change this one + $this->_currentEntry = new LdifEntry(); + } + + /** + * Constructor of the class + * + * @param String $path2File path of the ldif file to read + */ + function LdifReader($path2File){ + parent::FileReader($path2File); + $this->_LdifReader(); + } + + /** + * Returns the lines that generated the Ldif Entry. + * + * @return String[] The lines from the entry. + */ + + function getCurrentLines(){ + return $this->_currentLines; + } + + + /** + * Check if it's a ldif comment line. + * + * @return bool true if it's a comment line,false otherwise + */ + + function _isCommentLine(){ + return substr(trim($this->_currentLine),0,1)=="#"?1:0; + } + + + /** + * Check if the current line is a line containing the distinguished + * name of an entry. + * + * @return bool true if the line contains a dn line, false otherwise. + */ + + function _isDnLine(){ + return ereg("^dn:",$this->_currentLine)?1:0; + } + + /** + * Return the current entry object + * + * @return Ldap_Ldif_entry the current ldif entry + * + */ + + function getCurrentEntry(){ + + return $this->_currentEntry; + + } + + /** + * Get the lines of the next entry + * + * @return String[] the lines (unfolded) of the next entry + * + */ + + function nextLines(){ + $endEntryFound=0; + //free the array (instance member) + unset($this->_currentLines); + + if($this->_error!=1){ + + //if we found a valid dn line go on + if($this->_hasValidDnLine()&&!$this->eof() && $this->_error!=1){ + + //the first line is the dn one + $this->_currentLines[0]= trim($this->_currentLine); + + $count=0; + + // while we end on a blank line, fetch the attribute lines + while(!$this->eof() && !$endEntryFound && !$this->_ldifHasError()){ + //fetch the next line + $this->_nextLine(); + + // if the next line begin with a space,we append it to the current row + // else we push it into the array (unwrap) + + if(substr($this->_currentLine,0,1)==" "){ + $this->_currentLines[$count].=trim($this->_currentLine); + } + elseif(substr($this->_currentLine,0,1)=="#"){ + //do nothing + // echo $this->_currentLine; + } + elseif(trim($this->_currentLine)!=""){ + $this->_currentLines[++$count]=trim($this->_currentLine); + } + + + else{ + $endEntryFound=1; + } + }//end while + //return the ldif entry array + return $this->_currentLines; + } + else{ + return false; + } + + } + + } + + + /** + * Check if the ldif version is present in the ldif + * + * @return true if a version line was found,false otherwise + */ + + function hasVersionNumber(){ + $ldifLineFound = 0; + + while(!$this->eof() && !$ldifLineFound){ + + // fetch the first line + $this->_nextLine(); + + // if it's a ldif comment line or a blank line,leave it and continue + if($this->_isCommentLine() || $this->_isBlankLine()){ + //debug usage + //echo $this->_currentLineNumber." - " .($this->_isCommentLine()?"comment":"blank line\n")."
    "; + } + elseif(ereg("^version",trim($this->_currentLine))){ + $ldifLineFound=1; + $this->_nextLine(); + } + else{ + $this->_warningVersion=1; + $this->_warningMessage = "No version found - assuming 1"; + $ldifLineFound=1; + } + + }// end while loop + return $this->_warningVersion; + } + + + /** + * Private method to check if we have a valid dn line + * + * + * return bool true if a valid dn line is found false otherwise. + */ + + + function _hasValidDnLine(){ + $dn_found=0; + while(!$this->_ldifHasError() && !$this->eof() && !$dn_found ){ + + //if it's a comment or blank line,switch to the next line + if($this->_isCommentLine() || $this->_isBlankLine()){ + //debug usage + // echo $this->_currentLineNumber." - " .($this->_isCommentLine()?"comment":"blank line\n")."
    "; + $this->_nextLine(); + } + // case where a line with a distinguished name is found + elseif($this->_isDnLine()){ + $this->_currentDnLine = $this->_currentLine; + $this->dnLineNumber = $this->_currentLineNumber; + $dn_found=1; + //echo $this->_currentLineNumber." - ".$this->_currentLine."
    "; + } + else{ + $this->setLdapLdifReaderException(new LdifReaderException($this->_currentLineNumber,$this->_currentLine,"A valid dn line is required")); + } + } + return $dn_found; + } + + + + /** + * Associate the ldif reader with a exception which occurs during + * proceesing the file. + * Easier to do exception if we had to switch to php5 + * + * @param Ldap_LdifReaderException $ldifReaderException + */ + + + function setLdapLdifReaderException($ldifReaderException){ + $this->_ldifReaderException= $ldifReaderException; + $this->done(); + $this->_error=1; + } + + /** + * Return the exception raised during processing the file + * + * @return Ldap_ldifReaderException + */ + + function getLdapLdifReaderException(){ + return $this->_ldifReaderException; + } + + /** + * Helper method which return the value + * of the instance member $_error + * + * @return true if an error was encountered, false otherwise + */ + + + function _ldifHasError(){ + return $this->_error; + } + + function hasRaisedException(){ + return $this->_error; + + } + + /** + * Close the ldif file + * + * @return void + */ + + + function done(){ + if (!$this->_ldifHasError()){ + @fclose($this->_fp); + } + + } + + /** + * Return an entry from the ldif file + * wrapper upon the NextLines method + * + */ + + function readEntry(){ + + + if($lines = $this->nextLines()){ + $ldifEntryReader = new LdifEntryReader($lines); + + //fetch entry + $entry = $ldifEntryReader->getEntry(); + $this->_currentEntry = $entry; + // if any exception has raised, catch it and throw it to the main reader + if($ldifEntryReader->hasRaisedException()){ + $exception = $ldifEntryReader->getLdifEntryReaderException(); + $faultyLineNumber = $this->dnLineNumber + $exception->lineNumber - 1; + $this->setLdapLdifReaderException(new LdifReaderException($faultyLineNumber,$exception->currentLine,$exception->message)); + return false; + } + else{ + return $entry; + } + } + } + + function getWarningMessage(){ + return $this->_warningMessage; + + } + +} + +/** + * Helper class to write entries into the ldap server + * + * + */ + + +class LdapWriter{ + + var $ldapConnexion; + var $_writeError=0; + + /** + * Constructor + * + * + */ + + function LdapWriter(&$conn){ + $this->ldapConnexion = &$conn; + } + + function ldapAdd($entry){ + return @ldap_add($this->ldapConnexion,$entry->dn,$entry->attributes); + } + + + function ldapModify($entry){ + $changeType = $entry->getChangeType(); + + switch($changeType){ + case "add": + $this->_writeError= $this->ldapAdd($entry); + break; + case "delete": + $this->_writeError = @ldap_delete($this->ldapConnexion,$entry->dn); + break; + case "modrdn": + $atts=$entry->getAttributes(); + $this->_writeError = @ldap_rename( $this->ldapConnexion, $entry->dn,$atts['newrdn'], $atts['newsuperior'], $atts['deleteoldrdn'] ); + break; + case "moddn": + $atts=$entry->getAttributes(); + $this->_writeError = @ldap_rename( $this->ldapConnexion, $entry->dn,$atts['newrdn'], $atts['newsuperior'], $atts['deleteoldrdn'] ); + break; + case "modify": + $attributes = $entry->attributes; + $num_attributes = count($attributes); + for($i=0;$i<$num_attributes;$i++) + { + $action = key($attributes[$i]); + array_shift($attributes[$i]); + switch($action){ + case "add": + $this->_writeError = @ldap_mod_add($this->ldapConnexion,$entry->dn,$attributes[$i]); + break; + case "delete": + $this->_writeError = @ldap_mod_del($this->ldapConnexion,$entry->dn,$attributes[$i]); + break; + case "replace": + $this->_writeError = @ldap_mod_replace($this->ldapConnexion,$entry->dn,$attributes[$i]); + break; + } + } + } + return $this->_writeError; + } + + function ldapClose(){ + return @ldap_close($this->ldapConnexion); + } +} +?> diff --git a/ldif_import.php b/ldif_import.php index 7b86cf2..472ba5a 100644 --- a/ldif_import.php +++ b/ldif_import.php @@ -38,56 +38,78 @@ include 'header.php'; ?>

    -
    This is an experimental and untested feature. Proceed at your own risk.
    -The add and delete operations are the only operations currently supported. -
    -
    hasVersionNumber()){ + display_warning($ldifReader->getWarningMessage()); } -while($dn_entry= ldif_fetch_dn_entry() ){ - $action = ldif_get_action(); - if($action=="add"){ - echo "Adding dn:".utf8_decode($dn_entry) ."... "; - flush(); - if($attributes = ldif_fetch_attributes_for_entry()){ - if(@ldap_add($ds,$dn_entry,$attributes)){ - echo "Success
    "; - } - else{ - echo "failed

    "; - pla_error( "Could not add object: " . htmlspecialchars( utf8_decode( $dn ) ), ldap_error( $ds ), ldap_errno( $ds ) ); - } - } - else{ - echo "failed

    "; - echo "
    ".display_error_message(ldif_error_message())."
    "; - flush(); - } - } - elseif($action=="delete"){ - echo "Deleting dn: ".$dn_entry." "; - if(@ldap_delete($ds,$dn_entry)){ - echo "Success
    "; - flush(); - } - else{ - echo "Failed

    "; - flush(); - pla_error( "Could not delete object: " . htmlspecialchars( utf8_decode( $dn ) ), ldap_error( $ds ), ldap_errno( $ds ) ); - - } - } - } +//while we have a valid entry, +while($entry = $ldifReader->readEntry()){ + $changeType = $entry->getChangeType(); + + echo "".$actionString[$changeType]." ".$entry->dn; + if($ldapWriter->ldapModify($entry)){ + echo " ".$lang['success']."
    "; + flush(); + } + else{ + echo " ".$lang['failed']."

    "; + reload_left_frame(); + pla_error( $actionErrorMsg[$changeType]. " " . htmlspecialchars( utf8_decode( $entry->dn ) ), ldap_error( $ds ), ldap_errno( $ds ) ); + } +} +// close the file +$ldifReader->done(); + +//close the ldap connection +$ldapWriter->ldapClose(); + +// if any errors occurs during reading file ,"catch" the exception and display it here. + if($ldifReader->hasRaisedException()){ + //get the entry which raise the exception,quick hack here + $currentEntry = $ldifReader->getCurrentEntry(); + + if($currentEntry->dn !=""){ + echo "".$actionString[$currentEntry->getChangeType()]." ".$currentEntry->dn." ".$lang['failed']."
    "; + } + //get the exception wich was raised + $exception = $ldifReader->getLdapLdifReaderException(); +echo "
    "; +echo "
    "; +display_pla_parse_error($exception,$currentEntry); + } reload_left_frame(); @@ -101,18 +123,45 @@ function reload_left_frame(){ } function display_error_message($error_message){ - echo "
    ".$error_message."
    "; + echo "
    ".$error_message."
    "; } function display_warning($warning){ - echo "
    ".$warning."
    "; + echo "
    ".$warning."
    "; +} + +function display_pla_parse_error($exception,$faultyEntry){ + global $lang; + global $actionErrorMsg; + $errorMessage = $actionErrorMsg[$faultyEntry->getChangeType()]; + + print("
    "); + print(""); + print(""); + print("
    "); + } ?> - - - - - diff --git a/ldif_import_form.php b/ldif_import_form.php index 7a37dee..c6e8ae4 100644 --- a/ldif_import_form.php +++ b/ldif_import_form.php @@ -21,27 +21,20 @@ include 'header.php'; ?> -

    Import LDIF File

    -

    Server:

    - +

    +

    :

    -
    -
    -
    This is an experimental and untested feature. Proceed at your own risk. -
    -The add operation is the only operation currently supported. -


    -Select an LDIF file:
    +



    - + diff --git a/login.php b/login.php index babedbe..f473658 100644 --- a/login.php +++ b/login.php @@ -18,11 +18,11 @@ require 'common.php'; $server_id = $_POST['server_id']; -$dn = $_POST['login_dn']; -$uid = $_POST['uid']; -$pass = $_POST['login_pass']; -$redirect = rawurldecode( $_POST['redirect'] ); -$anon_bind = $_POST['anonymous_bind'] == 'on' ? true : false; +$dn = isset( $_POST['login_dn'] ) ? $_POST['login_dn'] : null; +$uid = isset( $_POST['uid'] ) ? $_POST['uid'] : null; +$pass = isset( $_POST['login_pass'] ) ? $_POST['login_pass'] : null; +$redirect = isset( $_POST['redirect'] ) ? rawurldecode( $_POST['redirect'] ) : null; +$anon_bind = isset( $_POST['anonymous_bind'] ) && $_POST['anonymous_bind'] == 'on' ? true : false; check_server_id( $server_id ) or pla_error( "Bad server_id: " . htmlspecialchars( $server_id ) ); if( ! $anon_bind ) { @@ -44,6 +44,7 @@ if ( isset( $servers[$server_id]['login_attr'] ) && // search for the "uid" first $ds = ldap_connect ( $host, $port ); $ds or pla_error( "Could not contact '" . htmlspecialchars( $host ) . "' on port '" . htmlentities( $port ) . "'" ); + @ldap_set_option( $ds, LDAP_OPT_PROTOCOL_VERSION, 3 ); @ldap_bind ($ds) or pla_error( "Could not bind anonymously to server. " . "Unless your server accepts anonymous binds, " . "the login_attr feature will not work properly."); @@ -57,7 +58,7 @@ if ( isset( $servers[$server_id]['login_attr'] ) && $ds = @ldap_connect( $host, $port ); $ds or pla_error( "Could not connect to '" . htmlspecialchars( $host ) . "' on port '" . htmlentities( $port ) . "'" ); -// go with LDAP version 3 if possible (needed for renaming and Novell schema fetching) +// go with LDAP version 3 if possible @ldap_set_option( $ds, LDAP_OPT_PROTOCOL_VERSION, 3 ); $bind_result = @ldap_bind( $ds, $dn, $pass ); @@ -65,19 +66,18 @@ $bind_result = @ldap_bind( $ds, $dn, $pass ); if( ! $bind_result ) pla_error( "Bad username/password. Try again" ); -if( ! isset( $cookie_time ) ) - $cookie_time = 0; -$expire = $cookie_time == 0 ? null : time()+$cookie_time; -if( $anon_bind ) { - // we set the cookie val to 0 for anonymous binds. - $res1 = setcookie( "pla_login_dn_$server_id", '0', $expire, dirname( $_SERVER['PHP_SELF'] ) ); - $res2 = setcookie( "pla_pass_$server_id", '0', $expire, dirname( $_SERVER['PHP_SELF'] ) ); -} else { - $res1 = setcookie( "pla_login_dn_$server_id", $dn, $expire, dirname( $_SERVER['PHP_SELF'] ) ); - $res2 = setcookie( "pla_pass_$server_id", $pass, $expire, dirname( $_SERVER['PHP_SELF'] ) ); -} -if( ! $res1 || ! $res2 ) - pla_error( "Could not set cookie!" ); +set_cookie_login_dn( $server_id, $dn, $pass, $anon_bind ) or pla_error( "Could not set cookie!" ); + +// Clear out any pre-existing tree data in the session for this server +session_start(); +if( session_is_registered( 'tree' ) ) + if( isset( $_SESSION['tree'][$server_id] ) ) + unset( $_SESSION['tree'][$server_id] ); +if( session_is_registered( 'tree_icons' ) ) + if( isset( $_SESSION['tree_icons'][$server_id] ) ) + unset( $_SESSION['tree_icons'][$server_id] ); +session_write_close(); + ?> @@ -108,14 +108,12 @@ if( ! $res1 || ! $res2 )


    - Logged in to
    +
    + Successfully logged in to server
    (anonymous bind)
    -
    -
    - Click here to go to the search form.
    diff --git a/login_form.php b/login_form.php index fefd20d..8330f30 100644 --- a/login_form.php +++ b/login_form.php @@ -16,9 +16,8 @@ $server = $servers[$server_id]; check_server_id( $server_id ) or pla_error( "Bad server_id: " . htmlspecialchars( $server_id ) ); -?> +include 'header.php'; ?> - + Confirm mass delete of $n entries on server '$server_name'\n"; + ?> +
    + + Do you really want to delete + ? + +
    + + + +

    ".$lang['ldif_parse_error']."

    "); + print("
    "); + print($errorMessage." ". $faultyEntry->dn); + print("

    "); + print("".$lang['desc'].": ".$exception->message); + print("

    "); + print("

    "); + print("".$lang['ldif_line'].": ".$exception->currentLine); + print("

    "); + print("

    "); + print("".$lang['ldif_line_number'].": ".$exception->lineNumber); + print("

    "); + print("
    "); + print("

    \r\n"); + print("

    "); + print(""); + print(sprintf($lang['ferror_submit_bug'] , get_href( 'add_bug' ))); + + print("

    "); + print("
    "); + print("
    +
      + $foo ) { + echo "\n"; + echo "
    1. " . htmlspecialchars( $dn ) . "
    2. \n"; + } ?> +
    +
    + +
    + + + + diff --git a/new_attr.php b/new_attr.php index ee3bccb..aefa511 100644 --- a/new_attr.php +++ b/new_attr.php @@ -5,7 +5,7 @@ * Adds an attribute/value pair to an object * * Variables that come in as POST vars: - * - dn (rawurlencoded) + * - dn * - server_id * - attr * - val @@ -14,11 +14,12 @@ require 'common.php'; -$dn = rawurldecode( $_POST['dn'] ); + $server_id = $_POST['server_id']; $attr = $_POST['attr']; -$val = $_POST['val']; +$val = isset( $_POST['val'] ) ? $_POST['val'] : false;; $val = utf8_encode( $val ); +$dn = $_POST['dn'] ; $encoded_dn = rawurlencode( $dn ); $encoded_attr = rawurlencode( $attr ); $is_binary_val = isset( $_POST['binary'] ) ? true : false; @@ -47,10 +48,11 @@ if( $is_binary_val ) { // chosen in config.php. if( 0 == strcasecmp( $attr, 'userpassword' ) ) { - if( $servers[$server_id]['default_hash'] != '' ) { + if( isset( $servers[$server_id]['default_hash'] ) && + $servers[$server_id]['default_hash'] != '' ) + { $enc_type = $servers[$server_id]['default_hash']; - $new_val = password_hash( $new_val, $enc_type ); - $val = $new_val; + $val = password_hash( $val, $enc_type ); } } @@ -60,6 +62,6 @@ $new_entry = array( $attr => $val ); $result = @ldap_mod_add( $ds, $dn, $new_entry ); if( $result ) - header( "Location: edit.php?server_id=$server_id&dn=$encoded_dn&updated_attr=$encoded_attr" ); + header( "Location: edit.php?server_id=$server_id&dn=$encoded_dn&modified_attrs[]=$encoded_attr" ); else pla_error( "Failed to add the attribute.", ldap_error( $ds ) , ldap_errno( $ds ) ); diff --git a/rdelete.php b/rdelete.php index a9f7421..90971ac 100644 --- a/rdelete.php +++ b/rdelete.php @@ -9,10 +9,10 @@ * - server_id */ -require 'common.php'; +require realpath( 'common.php' ); -$encoded_dn = $_POST['dn']; -$dn = rawurldecode( $encoded_dn ); +$dn = $_POST['dn']; +$encoded_dn = rawurlencode( $dn ); $server_id = $_POST['server_id']; if( ! $dn ) @@ -74,7 +74,7 @@ if( $del_result ) } else { - pla_error( "Could not delete the object: " . htmlspecialchars( utf8_decode( $dn ) ), ldap_error( $ds ), ldap_errno( $ds ) ); + pla_error( "Could not delete the object: " . htmlspecialchars( $dn ), ldap_error( $ds ), ldap_errno( $ds ) ); } @@ -90,26 +90,30 @@ function pla_rdelete( $server_id, $dn ) if( ! is_array( $children ) || count( $children ) == 0 ) { echo "Deleting " . htmlspecialchars( $dn ) . "..."; flush(); - if( ldap_delete( $ds, $dn ) ) { - echo " Success
    \n"; - return true; - } else { - pla_error( "Failed to delete dn: " . htmlspecialchars( utf8_decode( $dn ) ), - ldap_error( $ds ), ldap_errno( $ds ) ); - } + if( true === preEntryDelete( $server_id, $dn ) ) + if( @ldap_delete( $ds, $dn ) ) { + postEntryDelete( $server_id, $dn ); + echo " Success
    \n"; + return true; + } else { + pla_error( "Failed to delete dn: " . htmlspecialchars( $dn ), + ldap_error( $ds ), ldap_errno( $ds ) ); + } } else { foreach( $children as $child_dn ) { pla_rdelete( $server_id, $child_dn ); } echo "Deleting " . htmlspecialchars( $dn ) . "..."; flush(); - if( ldap_delete( $ds, $dn ) ) { - echo " Success
    \n"; - return true; - } else { - pla_errror( "Failed to delete dn: " . htmlspecialchars( utf8_decode( $dn ) ), - ldap_error( $ds ), ldap_errno( $ds ) ); - } + if( true === preEntryDelete( $server_id, $dn ) ) + if( @ldap_delete( $ds, $dn ) ) { + postEntryDelete( $server_id, $dn ); + echo " Success
    \n"; + return true; + } else { + pla_error( "Failed to delete dn: " . htmlspecialchars( ( $dn ) ), + ldap_error( $ds ), ldap_errno( $ds ) ); + } } } diff --git a/refresh.php b/refresh.php index fd670aa..d173d12 100644 --- a/refresh.php +++ b/refresh.php @@ -28,14 +28,16 @@ $base_dn = $servers[ $server_id ][ 'base' ]; $tree_icons[$server_id][ $base_dn ] = get_icon( $server_id, $base_dn ); // get all the icons and container contents for all expanded entries -if( $tree[$server_id] && is_array( $tree[$server_id] ) ) +if( isset($tree[$server_id]) && is_array( $tree[$server_id] ) ) { foreach( $tree[$server_id] as $dn => $children ) { $tree[$server_id][$dn] = get_container_contents( $server_id, $dn ); - foreach( $tree[$server_id][$dn] as $child_dn ) - $tree_icons[$server_id][$child_dn] = get_icon( $server_id, $child_dn ); - sort( $tree[ $server_id ][ $dn ] ); + if( is_array( $tree[$server_id][$dn] ) ) { + foreach( $tree[$server_id][$dn] as $child_dn ) + $tree_icons[$server_id][$child_dn] = get_icon( $server_id, $child_dn ); + sort( $tree[ $server_id ][ $dn ] ); + } } } else diff --git a/rename.php b/rename.php index e513a09..aebdb1b 100644 --- a/rename.php +++ b/rename.php @@ -10,12 +10,12 @@ * - new_rdn */ -require 'common.php'; +require realpath( 'common.php' ); -$dn = rawurldecode( $_POST['dn'] ); +$dn = ( $_POST['dn'] ); $server_id = $_POST['server_id']; -$new_rdn = $_POST['new_rdn']; -$new_rdn = utf8_encode($new_rdn); +$new_rdn = ( $_POST['new_rdn'] ); + if( is_server_read_only( $server_id ) ) pla_error( "You cannot perform updates while server is in read-only mode" ); @@ -23,6 +23,11 @@ if( is_server_read_only( $server_id ) ) if( is_server_read_only( $server_id ) ) pla_error( "You cannot perform updates while server is in read-only mode" ); +$children = get_container_contents( $server_id, $dn, 1 ); +if( count( $children ) > 0 ) + pla_error( "You cannot rename an entry which has children entries + (eg, the rename operation is not allowed on non-leaf entries)" ); + check_server_id( $server_id ) or pla_error( "Bad server_id: " . htmlspecialchars( $server_id ) ); have_auth_info( $server_id ) or pla_error( "Not enough information to login to server. Please check your configuration." ); @@ -33,23 +38,48 @@ $old_rdn = pla_explode_dn( $dn ); $container = $old_rdn[ 1 ]; for( $i=2; $i $desc ) { + foreach( $schema_syntaxes as $syntax ) { $counter++; - $oid = htmlspecialchars( $oid ); - $desc = htmlspecialchars( $desc['description'] ); + $oid = htmlspecialchars( $syntax->getOID() ); + $desc = htmlspecialchars( $syntax->getDescription() ); if( $highlight_oid && $highlight_oid == $oid ) echo "
    \n\n"; $counter = 0; @@ -150,7 +151,12 @@ if( $view == 'syntaxes' ) { echo "\n"; echo "\n"; - echo "\n"; + echo "\n"; echo "\n\n"; echo "\n"; @@ -226,7 +232,7 @@ if( $view == 'syntaxes' ) { echo "(none)"; else foreach( $attr->getUsedInObjectClasses() as $used_in_oclass) - echo "$used_in_oclass "; echo ""; echo "\n\n"; @@ -238,16 +244,33 @@ if( $view == 'syntaxes' ) { } elseif( $view == 'matching_rules' ) { echo "
    " . $lang['the_following_matching'] . "

    \n\n"; echo "\n\n
    getName() ) . "\">"; echo $attr->getName() . "
    Inherits" . ( $attr->getSupAttribute()==null? '(none)' : $attr->getSupAttribute() ) . ""; + if( $attr->getSupAttribute()==null ) + echo '(none)'; + else + echo "getSupAttribute() ) . "\">" . + $attr->getSupAttribute() . "
    \n"; - echo "\n"; + echo "\n"; flush(); $counter=1; $schema_matching_rules = get_schema_matching_rules( $server_id ); if( ! $schema_matching_rules ) pla_error( $schema_error_str ); - foreach( $schema_matching_rules as $oid => $attr ) { + foreach( $schema_matching_rules as $rule ) { $counter++; - $oid = htmlspecialchars( $oid ); - $desc = htmlspecialchars( $attr ); - echo "\n"; + $oid = htmlspecialchars( $rule->getOID() ); + $desc = htmlspecialchars( $rule->getName() ); + + if( null != $rule->getDescription() ) + $desc .= ' (' . $rule->getDescription() . ')'; + if( true === $rule->getIsObsolete() ) + $desc .= ' ' . $lang['obsolete'] . ''; + echo ""; + echo ""; + echo ""; + echo "\n"; } echo "
    " . $lang['matching_rule_oid'] . "" . $lang['desc'] . "
    " . $lang['matching_rule_oid'] . "" . $lang['name'] . "Used by Attributes
    $oid$attr
    $oid$desc"; + if( count( $rule->getUsedByAttrs() ) == 0 ) { + echo "
    (" . $lang['none'] . ")


    \n"; + } else { + echo "
    \n"; + } + echo "
    \n"; @@ -260,32 +283,32 @@ if( $view == 'syntaxes' ) { :
    - $attrs ) { ?> - -

    -

    :

    - -

    :

    + $oclass ) { ?> + +

    getName(); ?>

    +

    : getOID(); ?>

    + getDescription() ) { ?> +

    : getDescription(); ?>

    -

    Type:

    - +

    Type: getType(); ?>

    + getIsObsolete() ) && */$oclass->getIsObsolete() == true ) { ?>

    : getSupClasses() ) == 0 ) echo "(" . $lang['none'] . ")"; else - foreach( $attrs['sup'] as $i => $object_class ) { + foreach( $oclass->getSupClasses() as $i => $object_class ) { echo '' . htmlspecialchars( $object_class ) . ''; - if( $i < count( $attrs['sup'] ) - 1 ) + if( $i < count( $oclass->getSupClasses() ) - 1 ) echo ', '; } ?>

    @@ -297,11 +320,20 @@ if( $view == 'syntaxes' ) { - 0 ) { + getMustAttrs($schema_oclasses) ) > 0 ) { echo '
      '; - foreach( $attrs['must_attrs'] as $attr ) - echo "
    • " . htmlspecialchars($attr) . "
    • \n"; + foreach( $oclass->getMustAttrs($schema_oclasses) as $attr ) { + echo "
    • getName() ) ). "\">" . htmlspecialchars($attr->getName()); + echo ""; + if( $attr->getSource() != $oclass->getName() ) + { + echo "
         (inherited from "; + echo "getSource() ) . "\">" . $attr->getSource() . ""; + echo ")"; + } + echo "
    • \n"; + } } else echo "
      (" . $lang['none'] . ")
      \n"; ?> @@ -309,11 +341,20 @@ if( $view == 'syntaxes' ) { 0 ) { - echo '
        '; - foreach( $attrs['may_attrs'] as $attr ) - echo "
      • " . htmlspecialchars($attr) . "
      • \n"; + if( count( $oclass->getMayAttrs($schema_oclasses) ) > 0 ) { + echo '
          '; + foreach( $oclass->getMayAttrs($schema_oclasses) as $attr ) { + echo "
        • getName() ) ) . "\">" . htmlspecialchars($attr->getName() ); + echo "\n"; + if( $attr->getSource() != $oclass->getName() ) + { + echo "
             (inherited from "; + echo "getSource() ) . "\">" . $attr->getSource() . ""; + echo ")"; + } + echo "
        • "; + } } else echo "
          (" . $lang['none'] . ")
          \n"; diff --git a/schema_functions.php b/schema_functions.php index 76fdada..d6713fe 100644 --- a/schema_functions.php +++ b/schema_functions.php @@ -1,5 +1,35 @@ name=$name; + $this->source=$source; + } + + /* getters */ + + function getName () + { + return $this->name; + } + + function getSource () + { + return $this->source; + } + } + /* * Represents an LDAP objectClass */ @@ -69,6 +99,8 @@ class ObjectClass $i++; }while($strings[$i]!=")"); } + $this->name = preg_replace("/^\'/", "", $this->name); + $this->name = preg_replace("/\'$/", "", $this->name); break; case 'DESC': do { @@ -105,57 +137,114 @@ class ObjectClass $this->type='auxiliary'; break; case 'MUST': - if($strings[$i+1]!="(") { + if($strings[$i+1]!="(") + { $i++; - array_push ($this->must_attrs, $strings[$i]); + $attr = new ObjectClassAttribute($strings[$i], $this->name); + array_push ($this->must_attrs, $attr); }else{ $i++; do { $i++; if($strings[$i]!="$") - array_push ($this->must_attrs, $strings[$i]); + { + $attr = new ObjectClassAttribute($strings[$i], $this->name); + array_push ($this->must_attrs, $attr); + } }while($strings[$i+1]!=")"); } sort($this->must_attrs); break; case 'MAY': - if($strings[$i+1]!="(") { + if($strings[$i+1]!="(") + { $i++; - array_push ($this->may_attrs, $strings[$i]); + $attr = new ObjectClassAttribute($strings[$i], $this->name); + array_push ($this->may_attrs, $attr); }else{ $i++; do { $i++; if($strings[$i]!="$") - array_push ($this->may_attrs, $strings[$i]); + { + $attr = new ObjectClassAttribute($strings[$i], $this->name); + array_push ($this->may_attrs, $attr); + } }while($strings[$i+1]!=")"); } sort($this->may_attrs); break; default: - if(preg_match ("/[\d\.]+/i",$strings[$i])) + if(preg_match ("/[\d\.]+/i",$strings[$i]) && $i == 1) $this->oid = $strings[$i]; } } - $this->name = preg_replace("/^\'/", "", $this->name); - $this->name = preg_replace("/\'$/", "", $this->name); $this->description = preg_replace("/^\'/", "", $this->description); $this->description = preg_replace("/\'$/", "", $this->description); } + /* Getters */ - function getMustAttrs() + + function getMustAttrs($oclasses = NULL) { - return $this->must_attrs; + $all_must_attrs = array(); + $all_must_attrs = $this->must_attrs; + foreach( $this->sup_classes as $sup_class) + { + if( $oclasses != null + && $sup_class != "top" + && isset( $oclasses[ strtolower($sup_class) ] ) ) { + $sup_class = $oclasses[ strtolower($sup_class) ]; + $sup_class_must_attrs = $sup_class->getMustAttrs( $oclasses ); + $all_must_attrs = array_merge( $sup_class_must_attrs, $all_must_attrs ); + } + } + + ksort($all_must_attrs); + return $all_must_attrs; } - function getMayAttrs() + function getMayAttrs($oclasses = NULL) { - return $this->may_attrs; + $all_may_attrs = array(); + $all_may_attrs = $this->may_attrs; + foreach( $this->sup_classes as $sup_class_name ) + { + if( $oclasses != null + && $sup_class_name != "top" + && isset( $oclasses[ strtolower($sup_class_name) ] ) ) { + $sup_class = $oclasses[ strtolower($sup_class_name) ]; + $sup_class_may_attrs = $sup_class->getMayAttrs( $oclasses ); + $all_may_attrs = array_merge( $sup_class_may_attrs, $all_may_attrs ); + } + } + + ksort($all_may_attrs); + return $all_may_attrs; } + function getMustAttrNames( $oclasses = null ) + { + $attrs = $this->getMustAttrs( $oclasses ); + $attr_names = array(); + foreach( $attrs as $attr ) + $attr_names[] = $attr->getName(); + return $attr_names; + } + + function getMayAttrNames( $oclasses = null ) + { + $attrs = $this->getMayAttrs( $oclasses ); + $attr_names = array(); + foreach( $attrs as $attr ) + $attr_names[] = $attr->getName(); + return $attr_names; + } + + function getName() { return $this->name; @@ -166,6 +255,11 @@ class ObjectClass return $this->description; } + function getOID() + { + return $this->oid; + } + function getSupClasses() { return $this->sup_classes; @@ -208,24 +302,6 @@ class ObjectClass $this->may_attrs = array_values( array_unique( array_merge( $this->may_attrs, $new_may_attrs ) ) ); } - /* - * Returns an associative array of this objectClass. - * This exists for backwards compatibility for portions of PLA - * that have not yet been made aware of the new object oriented - * ObjectClass code. - */ - function toAssoc() - { - return array ( - 'oid' => $this->oid, - 'name' => $this->name, - 'description' => $this->description, - 'sup' => $this->sup_classes, - 'type' => $this->type, - 'must_attrs' => $this->must_attrs, - 'may_attrs' => $this->may_attrs, - 'is_obsolete' => $this->is_obsolete ); - } } /* @@ -284,7 +360,7 @@ class AttributeType $this->syntax_oid = null; $this->syntax = null; $this->max_length = null; - $this->is_single_value= false; + $this->is_single_value= null; $this->is_collective = false; $this->is_no_user_modification = false; $this->usage = null; @@ -393,7 +469,7 @@ class AttributeType $this->usage = $strings[$i]; break; default: - if(preg_match ("/[\d\.]+/i",$strings[$i])) + if(preg_match ("/[\d\.]+/i",$strings[$i]) && $i == 1) $this->oid = $strings[$i]; } } @@ -402,6 +478,8 @@ class AttributeType $this->name = preg_replace("/\'$/", "", $this->name); $this->description = preg_replace("/^\'/", "", $this->description); $this->description = preg_replace("/\'$/", "", $this->description); + $this->syntax_oid = preg_replace("/^\'/", "", $this->syntax_oid ); + $this->syntax_oid = preg_replace("/\'$/", "", $this->syntax_oid ); } /* Getters */ @@ -486,6 +564,12 @@ class AttributeType return $this->is_single_value; } + function setIsSingleValue( $is_single_value ) + { + $this->is_single_value = $is_single_value; + } + + function getIsCollective() { return $this->is_collective; @@ -529,6 +613,11 @@ class AttributeType $this->name = $new_name; } + function setOID( $new_oid ) + { + $this->oid = $new_oid; + } + function setDescription( $new_desc ) { $this->description = $new_desc; @@ -551,9 +640,11 @@ class AttributeType function addUsedInObjectClass( $object_class_name ) { - if( ! in_array( $object_class_name, $this->used_in_object_classes ) ) { - $this->used_in_object_classes[] = $object_class_name; - } + foreach( $this->used_in_object_classes as $used_in_object_class ) + if( 0 == strcasecmp( $used_in_object_class, $object_class_name ) ) + return false; + $this->used_in_object_classes[] = $object_class_name; + return true; } function getUsedInObjectClasses() @@ -562,17 +653,526 @@ class AttributeType } } +/* + * Represents an LDAP Syntax + */ +class Syntax +{ + /* This Syntax OID, ie "2.16.840.1.113730.3.2.2" */ + var $oid; + /* This Syntax description */ + var $description; + + /* Initialize the class' member variables */ + function initVars() + { + $this->oid = null; + $this->description = null; + } + + /* + * Parses a raw LDAP objectClass string into this object's $this vars + */ + function Syntax( $raw_ldap_syntax_string ) + { + $this->initVars(); + $class = $raw_ldap_syntax_string; + $strings = preg_split ("/[\s,]+/", $class, -1,PREG_SPLIT_DELIM_CAPTURE); + for($i=0; $idescription)==0) + $this->description=$this->description . $strings[$i]; + else + $this->description=$this->description . " " . $strings[$i]; + }while(!preg_match("/\'$/s", $strings[$i])); + break; + default: + if(preg_match ("/[\d\.]+/i",$strings[$i]) && $i == 1) + $this->oid = $strings[$i]; + } + } + $this->description = preg_replace("/^\'/", "", $this->description); + $this->description = preg_replace("/\'$/", "", $this->description); + } + + + /* Getters */ + + function getDescription() + { + return $this->description; + } + + function getOID() + { + return $this->oid; + } +} + +/* + * Represents an LDAP MatchingRule + */ +class MatchingRule +{ + /* This rule's OID, ie "2.16.840.1.113730.3.2.2" */ + var $oid; + /* This rule's name */ + var $name; + /* This rule's description */ + var $description; + /* This rule's syntax OID */ + var $syntax; + /* Boolean value indicating whether this MatchingRule is obsolete */ + var $is_obsolete; + /* An array of attribute names who use this MatchingRule */ + var $used_by_attrs; + + /* Initialize the class' member variables */ + function initVars() + { + $this->oid = null; + $this->name = null; + $this->description = null; + $this->is_obsolete = false; + $this->syntax = null; + $this->used_by_attrs = array(); + } + + /* + * Parses a raw LDAP objectClass string into this object's $this vars + */ + function MatchingRule( $raw_ldap_matching_rule_string ) + { + $this->initVars(); + $strings = preg_split ("/[\s,]+/", $raw_ldap_matching_rule_string, -1,PREG_SPLIT_DELIM_CAPTURE); + for($i=0; $iname)==0) + $this->name = $strings[$i]; + else + $this->name .= " " . $strings[$i]; + }while(!preg_match("/\'$/s", $strings[$i])); + } else { + $i++; + do { + $i++; + if(strlen($this->name) == 0) + $this->name = $strings[$i]; + else + $this->name .= " " . $strings[$i]; + } while(!preg_match("/\'$/s", $strings[$i])); + do { + $i++; + }while($strings[$i]!=")"); + } + $this->name = preg_replace("/^\'/", "", $this->name); + $this->name = preg_replace("/\'$/", "", $this->name); + break; + case 'DESC': + do { + $i++; + if(strlen($this->description)==0) + $this->description=$this->description . $strings[$i]; + else + $this->description=$this->description . " " . $strings[$i]; + }while(!preg_match("/\'$/s", $strings[$i])); + break; + case 'OBSOLETE': + $this->is_obsolete = TRUE; + break; + case 'SYNTAX': + $this->syntax = $strings[++$i]; + break; + default: + if(preg_match ("/[\d\.]+/i",$strings[$i]) && $i == 1) + $this->oid = $strings[$i]; + } + } + $this->description = preg_replace("/^\'/", "", $this->description); + $this->description = preg_replace("/\'$/", "", $this->description); + } + + /* + * Sets the list of used_by_attrs to the array specified by $attrs; + */ + function setUsedByAttrs( $attrs ) + { + $this->used_by_attrs = $attrs; + } + + /* + * Adds an attribute name to the list of attributes who use this MatchingRule + * @return true if the attribute was added and false otherwise (already in the list) + */ + function addUsedByAttr( $new_attr_name ) + { + foreach( $this->used_by_attrs as $attr_name ) + if( 0 == strcasecmp( $attr_name, $new_attr_name ) ) + return false; + $this->used_by_attrs[] = $new_attr_name; + return true; + } + + /* Getters */ + + function getName() + { + return $this->name; + } + + function getDescription() + { + return $this->description; + } + + function getIsObsolete() + { + return $this->is_obsolete; + } + + function getSyntax() + { + return $this->description; + } + + function getOID() + { + return $this->oid; + } + + function getUsedByAttrs() + { + return $this->used_by_attrs; + } +} + +/* + * Represents an LDAP schema matchingRuleUse entry + */ +class MatchingRuleUse +{ + /* The OID of the MatchingRule this applies to */ + var $oid; + /* The name of the MathingRule this applies to */ + var $name; + /* An array of attributeType names who make use of the mathingRule + * identified by $this->oid and $this->name */ + var $used_by_attrs; + + /* Initialize the class' member variables */ + function initVars() + { + $this->oid = null; + $this->name = null; + $this->used_by_attrs = array(); + } + + function MatchingRuleUse( $raw_matching_rule_use_string ) + { + $strings = preg_split ("/[\s,]+/", $raw_matching_rule_use_string, -1,PREG_SPLIT_DELIM_CAPTURE); + for($i=0; $iname)==0) + $this->name = $strings[$i]; + else + $this->name .= " " . $strings[$i]; + }while(!preg_match("/\'$/s", $strings[$i])); + } else { + $i++; + do { + $i++; + if(strlen($this->name) == 0) + $this->name = $strings[$i]; + else + $this->name .= " " . $strings[$i]; + } while(!preg_match("/\'$/s", $strings[$i])); + do { + $i++; + }while($strings[$i]!=")"); + } + $this->name = preg_replace("/^\'/", "", $this->name); + $this->name = preg_replace("/\'$/", "", $this->name); + break; + case 'APPLIES': + // TODO + if($strings[$i+1]!="(") { + // has a single attribute name + $i++; + $this->used_by_attrs = array( $strings[$i] ); + //echo "Adding single: " . $strings[$i] . "
          "; + } else { + // has multiple attribute names + $i++; + while($strings[$i]!=")") { + $i++; + $new_attr = $strings[$i]; + $new_attr = preg_replace("/^\'/", "", $new_attr ); + $new_attr = preg_replace("/\'$/", "", $new_attr ); + $this->used_by_attrs[] = $new_attr; + //echo "Adding $new_attr
          "; + $i++; + } + } + break; + default: + if(preg_match ("/[\d\.]+/i",$strings[$i]) && $i == 1) + $this->oid = $strings[$i]; + } + } + sort( $this->used_by_attrs ); + } + + /* Getters */ + + function getOID() + { + return $this->oid; + } + + function getName() + { + return $this->name; + } + + function getUsedByAttrs() + { + return $this->used_by_attrs; + } +} + +/* + * Helper for _get_raw_schema() which fetches the DN of the schema object + * in an LDAP server based on a DN. Entries should set the subSchemaSubEntry + * attribute pointing to the DN of the server schema. You can specify the + * DN whose subSchemaSubEntry you wish to retrieve of specify an empty string + * to fetch the subScehamSubEntry from the Root DSE. + */ +function _get_schema_dn( $server_id, $dn, $debug=false ) +{ + if( $debug ) echo "
          ";
          +	$ds = pla_ldap_connect( $server_id );
          +	if( ! $ds )
          +		return false;
          +
          +	$search = @ldap_read( $ds, $dn, 'objectClass=*', array( 'subschemaSubentry' ) );
          +	if( $debug ) { echo "Search result (ldap_read): "; var_dump( $search ); echo "\n"; }
          +	if( ! $search ) {
          +		if( $debug ) echo "_get_schema_dn() returning false. (search val is false)\n";
          +		return false;
          +	}
          +
          +	if( ldap_count_entries( $ds, $search ) == 0 ) {
          +		if( $debug ) echo "_get_schema_dn() returning false (ldap_count_entries() == 0).\n";
          +		return false;
          +	}
          +
          +	$entries = @ldap_get_entries( $ds, $search );
          +	if( $debug ) { echo "Entries (ldap_get_entries): "; var_dump( $entries ); echo "\n"; }
          +	if( ! $entries || ! is_array( $entries ) ) {
          +		if( $debug ) echo "_get_schema_dn() returning false (Bad entries val, false or not array).\n";
          +		return false;
          +	}
          +
          +	$entry = isset( $entries[0] ) ? $entries[0] : false;
          +	if( ! $entry ) {
          +		if( $debug ) echo "_get_schema_dn() returning false (entry val is false)\n";
          +		return false;
          +	}
          +
          +	$sub_schema_sub_entry = isset( $entry[0] ) ? $entry[0] : false;
          +	if( ! $sub_schema_sub_entry ) {
          +		if( $debug ) echo "_get_schema_dn() returning false (sub_schema_sub_entry val is false)\n";
          +		return false;
          +	}
          +
          +	$schema_dn = isset( $entry[ $sub_schema_sub_entry ][0] ) ?
          +					$entry[ $sub_schema_sub_entry ][0] :
          +					false;
          +
          +	if( $debug ) echo "_get_schema_dn() returning: \"" . $schema_dn . "\"\n";
          +	return $schema_dn;
          +}
          +
          +/*
          + * Fetches the raw schema array for the subschemaSubentry of the server. Note,
          + * this function has grown many hairs to accomodate more LDAP servers. It is
          + * needfully complicated. If you can find a better way to write it, feel free!
          + *
          + * @param $server_id - The server ID whose server you want to retrieve
          + * @param $schema_to_fetch - A string indicating which type of schema to 
          + *		fetch. Five valid values: 'objectclasses', 'attributetypes', 
          + *		'ldapsyntaxes', 'matchingruleuse', or 'matchingrules'. 
          + *		Case insensitive.
          + * @param $dn (optional) This paremeter is the DN of the entry whose schema you
          + * 		would like to fetch. Entries have the option of specifying
          + * 		their own subschemaSubentry that points to the DN of the system
          + * 		schema entry which applies to this attribute. If unspecified,
          + *		this will try to retrieve the schema from the RootDSE subschemaSubentry.
          + *		Failing that, we use some commonly known schema DNs. Default 
          + *		value is the Root DSE DN (zero-length string)
          + * @return an array of strings of this form:
          + *    Array (
          + *      [0] => "( 1.3.6.1.4.1.7165.1.2.2.4 NAME 'gidPool' DESC 'Pool ...
          + *      [1] => "( 1.3.6.1.4.1.7165.2.2.3 NAME 'sambaAccount' DESC 'Sa ...
          + *      etc.
          + */
          +function _get_raw_schema( $server_id, $schema_to_fetch, $dn='' )
          +{
          +	global $lang;
          +	static $cache = null;
          +
          +	// Swith to true to enable verbose output of schema fetching progress
          +	$debug = false;
          +
          +	$ds = pla_ldap_connect( $server_id );
          +	if( ! $ds )
          +		return false;
          +
          +	// error checking
          +	$schema_to_fetch = strtolower( $schema_to_fetch );
          +	$valid_schema_to_fetch = array( 'objectclasses', 'attributetypes', 'ldapsyntaxes', 
          +					'matchingrules', 'matchingruleuse'  );
          +	if( ! in_array( $schema_to_fetch, $valid_schema_to_fetch ) )
          +		pla_error( "Bad parameter provided to function to _get_raw_schema(). '" 
          +				. htmlspecialchars( $schema_to_fetch ) . "' is 
          +				not valid for the schema_to_fetch parameter." );
          +	
          +	// Minimize the hits to LDAP server by caching the result
          +	if( isset( $cache[ $server_id ][ $schema_to_fetch ] ) )
          +		return $cache[ $server_id ][ $schema_to_fetch ];
          +
          +	// Try to get the schema DN from the specified entry. 
          +	$schema_dn = _get_schema_dn( $server_id, $dn, $debug );
          +
          +	// Do we need to try again with the Root DSE?
          +	if( ! $schema_dn )
          +		$schema_dn = _get_schema_dn( $server_id, '', $debug );
          +
          +	// Store the eventual schema retrieval in $schema_search
          +	$schema_search = null;
          +
          +	if( $schema_dn ) {
          +		if( $debug ) { echo "Found the schema DN: "; var_dump( $schema_dn ); echo "\n"; }
          +		$schema_search = @ldap_read( $ds, $schema_dn, '(objectClass=*)',
          +							array( $schema_to_fetch ), 0, 0, 0, 
          +							LDAP_DEREF_ALWAYS );
          +		if( $schema_search === false ) {
          +			if( $debug ) echo "Did not find the schema at DN: $schema_dn.\n";
          +			$schema_search = null;
          +			unset( $schema_dn );
          +		} else {
          +			if( $debug ) echo "Found the schema at DN: $schema_dn.\n";
          +		}
          +	} 
          +
          +	// Second chance: If the DN or Root DSE didn't give us the subschemaSubentry, ie $schema_search
          +	// is still null, use some common subSchemaSubentry DNs as a work-around.
          +
          +	if( $debug && $schema_search == null )
          +		echo "Attempting work-arounds for 'broken' LDAP servers...\n";
          +
          +	// cn=subschema for OpenLDAP
          +	if( $schema_search == null ) {
          +		if( $debug ) echo "Attempting with cn=subschema (OpenLDAP)...\n";
          +		// try with the standard DN
          +		$schema_search = @ldap_read($ds, 'cn=subschema', '(objectClass=*)',
          +				array( $schema_to_fetch ), 0, 0, 0, LDAP_DEREF_ALWAYS );
          +	}
          +
          +	// cn=schema for Novell eDirectory
          +	if( $schema_search == null ) {
          +		if( $debug ) echo "Attempting with cn=schema (Novell)...\n";
          +		// try again, with a different schema DN
          +		$schema_search = @ldap_read($ds, 'cn=schema', '(objectClass=*)',
          +				array( $schema_to_fetch ), 0, 0, 0, LDAP_DEREF_ALWAYS );
          +	}
          +
          +	// cn=schema,cn=configuration,dc=example,dc=com for ActiveDirectory
          +	if( $schema_search == null ) {
          +		// try again, with a different schema DN
          +		global $servers;
          +		$base_dn = isset( $servers[ $server_id ][ 'base' ] ) ?
          +				$servers[ $server_id ][ 'base' ] :
          +				null;
          +		if( $debug ) echo "Attempting with cn=schema,cn=configuration,$base_dn (ActiveDirectory)...\n";
          +		if( $base_dn != null )
          +			$schema_search = @ldap_read($ds, 'cn=schema,cn=configuration,' . $base_dn, '(objectClass=*)',
          +				array( $schema_to_fetch ), 0, 0, 0, LDAP_DEREF_ALWAYS );
          +	}
          +
          +	// cn=Schema,ou=Admin,dc=example,dc=com for SiteServer
          +	if( $schema_search == null ) {
          +		// try again, with a different schema DN
          +		global $servers;
          +		$base_dn = isset( $servers[ $server_id ][ 'base' ] ) ?
          +				$servers[ $server_id ][ 'base' ] :
          +				null;
          +		if( $debug ) echo "Attempting with cn=Schema,ou=Admin,$base_dn (ActiveDirectory)...\n";
          +		if( $base_dn != null )
          +			$schema_search = @ldap_read($ds, 'cn=Schema,ou=Admin,' . $base_dn, '(objectClass=*)',
          +				array( $schema_to_fetch ), 0, 0, 0, LDAP_DEREF_ALWAYS );
          +	}
          +
          +	// Shall we just give up?
          +	if( $schema_search == null ) 
          +		return false;
          +
          +	// Did we get something unrecognizable?
          +	if( 'resource' != gettype( $schema_search ) ) {
          +		if( $debug ) "Returning false since schema_esarch is not of type 'resource'\n";
          +		return false;
          +	}
          +	
          +	$schema = @ldap_get_entries( $ds, $schema_search );
          +	if( $schema == false ) {
          +		if( $debug ) "Returning false since ldap_get_entries() returned false.\n";
          +		return false;
          +	}
          +
          +	// Make a nice array of this form:
          +	// Array (
          +	//    [0] => "( 1.3.6.1.4.1.7165.1.2.2.4 NAME 'gidPool' DESC 'Pool ...
          +	//    [1] => "( 1.3.6.1.4.1.7165.2.2.3 NAME 'sambaAccount' DESC 'Sa ...
          +	//    etc.
          +	if( ! isset( $schema[0][$schema_to_fetch] ) ) {
          +		if( $debug ) "Returning false since '$schema_to_fetch' isn't in the schema array\n";
          +		return false;
          +	}
          +
          +	$schema = $schema[0][$schema_to_fetch];
          +	unset( $schema['count'] );
          +
          +	// Store the results in cache for subsequent calls
          +	$cache[ $server_id ][ $schema_to_fetch ] = $schema;
          +
          +	return $schema;
          +}
          +
           /* 
            * Returns an associative array of objectClasses for the specified 
            * $server_id. Each array entry's key is the name of the objectClass
            * in lower-case. 
            * The sub-entries consist of sub-arrays called 'must_attrs' and 
            * 'may_attrs', and sub-entries called 'oid', 'name' and 'description'.
          - *
          - * The bulk of this function came from the good code in the 
          - * GPL'ed LDAP Explorer project. Thank you.
            */
          -function get_schema_objectclasses( $server_id )
          +function get_schema_objectclasses( $server_id, $dn=null )
           {
           	// cache the schema to prevent multiple schema fetches from LDAP server
           	static $cache = array();
          @@ -581,45 +1181,19 @@ function get_schema_objectclasses( $server_id )
           		return $cache[$server_id];
           	}
           
          -	$ds = pla_ldap_connect( $server_id );
          -	if( ! $ds )
          -		return false;
          -	
          -	// try with the standard DN
          -	$result = @ldap_read($ds, 'cn=subschema', '(objectClass=*)',
          -				array( 'objectclasses' ), 0, 200, 0, LDAP_DEREF_ALWAYS );
          -	if( ! $result )
          -		// try again, with a different schema DN
          -		$result = @ldap_read($ds, 'cn=schema', '(objectClass=*)',
          -				array( 'objectclasses' ), 0, 200, 0, LDAP_DEREF_ALWAYS );
          -	if( ! $result ) 
          -		// give up
          +	$raw_oclasses = _get_raw_schema( $server_id, 'objectclasses', $dn );
          +	if( ! $raw_oclasses )
           		return false;
           
          -	$raw_oclasses = @ldap_get_entries($ds,$result );
          -	
           	// build the array of objectClasses
           	$object_classes = array();
          -	for( $i=0; $i < $raw_oclasses[0]['objectclasses']['count']; $i++ ) {
          -		$class_string = $raw_oclasses[0]["objectclasses"][$i];
          +	foreach( $raw_oclasses as $class_string  ) {
           		if( $class_string == null || 0 == strlen( $class_string ) )
           			continue;
           		$object_class = new ObjectClass( $class_string );
           		$name = $object_class->getName();
           		$key = strtolower( $name );
          -		$object_classes[ $key ] = $object_class->toAssoc();
          -	}
          -
          -	// go back and add any inherited MUST/MAY attrs to each objectClass
          -	foreach( $object_classes as $name => $object_class ) {
          -		$sup_classes = $object_class['sup'];
          -		$must = $object_class['must_attrs'];
          -		$may = $object_class['may_attrs'];
          -
          -		foreach( $sup_classes as $sup_class )
          -			add_sup_class_attrs( $name, $sup_class, $object_classes, $must, $may );
          -		$object_classes[ $name ][ 'must_attrs' ] = $must;
          -		$object_classes[ $name ][ 'may_attrs' ] = $may;
          +		$object_classes[ $key ] = $object_class;
           	}
           
           	ksort( $object_classes );
          @@ -630,90 +1204,62 @@ function get_schema_objectclasses( $server_id )
           }
           
           /*
          - * Helper function for get_schema_objectclasses. This is a recursive function that 
          - * will add MUST and MAY attributes based on an objectclas' inherited objectclasses.
          + * Returns the schema for a single ObjectClass
            */
          -function add_sup_class_attrs( $oclass, $sup_class, &$oclasses, &$must_attrs, &$may_attrs )
          +function get_schema_objectclass( $server_id, $oclass_name, $dn=null )
           {
          -	//echo "add_sup_class_attrs( $oclass, $sup_class )
          "; - // base cases - if( 0 == strcasecmp( $sup_class, 'top' ) ) return; - if( ! isset( $oclasses[ strtolower( $sup_class ) ] ) ) return; - - // recursive case - $new_must = $oclasses[ strtolower( $sup_class ) ]['must_attrs']; - $new_may = $oclasses[ strtolower( $sup_class ) ]['may_attrs']; - $must_attrs = array_unique( array_merge( $new_must, $must_attrs ) ); - $may_attrs = array_unique( array_merge( $new_may, $may_attrs ) ); - - $sup_classes = $oclasses[ strtolower( $sup_class ) ]['sup']; - if( is_array( $sup_classes ) && count( $sup_classes ) > 0 ) - foreach( $sup_classes as $sup_sup_class ) - add_sup_class_attrs( $sup_class, $sup_sup_class, $oclasses, $must_attrs, $may_attrs ); + $oclass_name = strtolower( $oclass_name ); + $oclasses = get_schema_objectclasses( $server_id, $dn ); + if( ! $oclasses ) + return false; + if( isset( $oclasses[ $oclass_name ] ) ) + return $oclasses[ $oclass_name ]; + else + return false; } /* * Retrieves the schema for a single attribute. */ -function get_schema_attribute( $server_id, $attr_name ) +function get_schema_attribute( $server_id, $attr_name, $dn=null ) { - $attr_name = preg_replace( "/;.*$/U", "", $attr_name ); - $schema_attrs = get_schema_attributes( $server_id ); + $attr_name = real_attr_name( $attr_name ); + $schema_attrs = get_schema_attributes( $server_id, $dn ); $attr_name = strtolower( $attr_name ); $schema_attr = isset( $schema_attrs[ $attr_name ] ) ? $schema_attrs[ $attr_name ] : - null; + false; return $schema_attr; } /* - * Returns an associative array of attributes for the specified + * Returns an array of AttributeType objects for the specified * $server_id. Each array entry's key is the name of the attribute, * in lower-case. - * The sub-entries are 'oid', 'syntax', 'equality', 'substr', 'name', - * and 'single_value'. - * - * The bulk of this function came from the good code in the - * GPL'ed LDAP Explorer project. Thank you. It was extended - * considerably for application here. */ -function get_schema_attributes( $server_id, $lower_case_keys = false ) +function get_schema_attributes( $server_id, $dn = null ) { // Cache gets filled in later (bottom). each subsequent call uses // the cache which has the attributes already fetched and parsed static $cache = null; - if( isset( $cache[ $server_id ] ) ) { - //echo "Using attr cache
          "; + if( isset( $cache[ $server_id ] ) ) return $cache[ $server_id ]; - } - - $ds = pla_ldap_connect( $server_id ); - if( ! $ds ) + + $raw_attrs = _get_raw_schema( $server_id, 'attributeTypes', $dn ); + if( ! $raw_attrs ) return false; - - // get all the attributeTypes - $result = @ldap_read($ds, 'cn=subschema', '(objectClass=*)', - array( 'attributeTypes' ), 0, 200, 0, LDAP_DEREF_ALWAYS ); - if( ! $result ) - $result = @ldap_read($ds, 'cn=schema', '(objectClass=*)', - array( 'attributeTypes' ), 0, 200, 0, LDAP_DEREF_ALWAYS ); - - if( $result ) - $raw_attrs = ldap_get_entries( $ds, $result ); - else - $raw_attrs = array(); - $syntaxes = get_schema_syntaxes( $server_id ); - // build the array of attribueTypes + $syntaxes = get_schema_syntaxes( $server_id, $dn ); $attrs = array(); - for( $i=0; $i < $raw_attrs[0]['attributetypes']['count']; $i++ ) { - $attr_string = $raw_attrs[0]['attributetypes'][$i]; + foreach( $raw_attrs as $attr_string ) { if( $attr_string == null || 0 == strlen( $attr_string ) ) continue; $attr = new AttributeType( $attr_string ); - if( isset( $syntaxes[ $attr->getSyntaxOID() ] ) ) - $attr->setType( $syntaxes[ $attr->getSyntaxOID() ]['description'] ); + if( isset( $syntaxes[ $attr->getSyntaxOID() ] ) ) { + $syntax = $syntaxes[ $attr->getSyntaxOID() ]; + $attr->setType( $syntax->getDescription() ); + } $name = $attr->getName(); $key = strtolower( $name ); $attrs[ $key ] = $attr; @@ -742,7 +1288,7 @@ function add_aliases_to_attrs( &$attrs ) if( is_array( $aliases ) && count( $aliases ) > 0 ) { // foreach of the attribute's aliases, create a new entry in the attrs array // with its name set to the alias name, and all other data copied - foreach( $aliases as $i => $alias_attr_name ) { + foreach( $aliases as $alias_attr_name ) { $new_attr = $attr; $new_attr->setName( $alias_attr_name ); $new_attr->addAlias( $attr->getName() ); @@ -760,143 +1306,183 @@ function add_aliases_to_attrs( &$attrs ) */ function add_sup_to_attrs( &$attrs ) { + $debug = false; + if( $debug ) echo "
          ";
          +
          +	if( $debug ) print_r( $attrs );
          +	
           	// go back and add any inherited descriptions from parent attributes (ie, cn inherits name)
           	foreach( $attrs as $key => $attr ) {
          -		$sup_attr = $attr->getSupAttribute();
          -		while( $sup_attr != null ) {
          -			if( ! isset( $attrs[ strtolower( $sup_attr ) ] ) ){ 
          -				pla_error( "Warning: attributeType '" . $attr->getName() . "' inherits from 
          -						'" . $sup_attr . "', but attributeType '" . $sup_attr . "' does not
          -						exist." );
          -				return;
          -			}
          +		if( $debug ) echo "Analyzing inheritance for attribute '" . $attr->getName() . "'\n";
          +		$sup_attr_name = $attr->getSupAttribute();
          +		$sup_attr = null;
           
          -			$sup_attr = $attrs[ strtolower( $sup_attr ) ];
          -			// if the inhertied attriute does not inherit any furth attributes,
          -			// copy its values and move on to the next attributeType
          -			if( null == $sup_attr->getSupAttribute() )  {
          -				// only three values are allowed to be set when an attributeType SUPs another 
          -				// attributeType: NAME, DESC, and SUP
          -				$tmp_name = $attr->getName();
          -				$tmp_desc = $attr->getDescription();
          -				$tmp_sup = $attr->getSupAttribute();
          -				$tmp_aliases = $attr->getAliases();
          +		// Does this attribute have any inheritance happening here?
          +		if( null != trim( $sup_attr_name ) ) {
           
          -				$attr = $sup_attr;
          +			// This loop really should traverse infinite levels of inheritance (SUP) for attributeTypes,
          +			// but just in case we get carried away, stop at 100. This shouldn't happen, but for
          +			// some weird reason, we have had someone report that it has happened. Oh well.
          +			$i = 0;
          +			while( $i++ < 100 /* 100 == INFINITY ;) */ ) {
          +				if( $debug ) echo "Top of loop.\n";
           
          -				$attr->setName( $tmp_name );
          -				$attr->setDescription( $tmp_desc );
          -				$attr->setSupAttribute( $tmp_sup);
          -				$attr->setAliases( $tmp_aliases );
          -				// replace this attribute in the attrs array now that we have populated
          -				// new values therein
          -				$attrs[$key] = $attr;
          -				$sup_attr = null;
          -			} else {
          -				// set the sup_attr to the name of the attributeType from which
          -				// this attributeType inherits and move up the inheritance chain.
          -				$sup_attr = $sup_attr->getSupAttribute();
          +				if( ! isset( $attrs[ strtolower( $sup_attr_name ) ] ) ){ 
          +					pla_error( "Schema error: attributeType '" . $attr->getName() . "' inherits from 
          +								'" . $sup_attr_name . "', but attributeType '" . $sup_attr_name . "' does not
          +								exist." );
          +						return;
          +				}
          +
          +				if( $debug ) echo " sup_attr_name: $sup_attr_name\n";
          +				$sup_attr = $attrs[ strtolower( $sup_attr_name ) ];
          +				if( $debug ) echo " Sup attr: " . $sup_attr->getName() . "\n";
          +
          +				$sup_attr_name = $sup_attr->getSupAttribute();
          +				if( $debug ) echo " Does the sup attr itself have a sup attr?\n";
          +
          +				// Does this superior attributeType not have a superior attributeType?
          +				if( null == $sup_attr_name || strlen( trim( $sup_attr_name ) ) == 0 ) {
          +
          +					// Since this attribute's superior attribute does not have another superior
          +					// attribute, clone its properties for this attribute. Then, replace
          +					// those cloned values with those that can be explicitly set by the child
          +					// attribute attr). Save those few properties which the child can set here:
          +					if( $debug ) echo "  nope, this is the end of the inheritance chain after $i iterations.\n";
          +					$tmp_name = $attr->getName();
          +					$tmp_oid = $attr->getOID();
          +					$tmp_sup = $attr->getSupAttribute();
          +					$tmp_aliases = $attr->getAliases();
          +					$tmp_single_val = $attr->getIsSingleValue();
          +
          +
          +					if( $debug ) {
          +						echo "  populating values into attribute from sup attribute:\n";
          +						echo "Before: ";
          +						print_r( $attr );
          +					}
          +
          +					// clone the SUP attributeType and populate those values
          +					// that were set by the child attributeType
          +					$attr = $sup_attr;
          +					$attr->setOID( $tmp_oid );
          +					$attr->setName( $tmp_name );
          +					$attr->setSupAttribute( $tmp_sup);
          +					$attr->setAliases( $tmp_aliases );
          +
          +					if( $debug ) {
          +						echo "After (name, sup_attr, and aliases should not have changed!: ";
          +						print_r( $attr );
          +					}
          +					// only overwrite the SINGLE-VALUE property if the child explicitly sets it
          +					// (note: All LDAP attributes default to multi-value if not explicitly set SINGLE-VALUE)
          +					if( true == $tmp_single_val )
          +						$attr->setIsSingleValue( true );
          +
          +					// replace this attribute in the attrs array now that we have populated
          +					// new values therein
          +					$attrs[$key] = $attr;
          +
          +					// very important: break out after we are done with this attribute
          +					$sup_attr_name = null;
          +					$sup_attr = null;
          +					break;
          +
          +				} else {
          +
          +					// do nothing, move on down the chain of inheritance...
          +					if( $debug ) echo "  yup, march down the inheritance chain (iteration $i).\n";
          +					if( $debug ) { echo "  The sup attr is: "; var_dump( $sup_attr_name ); echo "\n"; }
          +
          +				}
           			}
           		}
           	}
          +
          +	if( $debug ) echo "
          \n"; } /* - * Returns an associate array of the server's schema matching rules + * Returns an array of MatchingRule objects for the specified server. + * The key of each entry is the OID of the matching rule. */ -function get_schema_matching_rules( $server_id ) +function get_schema_matching_rules( $server_id, $dn=null ) { static $cache; // cache the schema to prevent multiple schema fetches from LDAP server if( isset( $cache[$server_id] ) ) { - //echo "Using matching rules cache.
          "; return $cache[$server_id]; } - $ds = pla_ldap_connect( $server_id ); - - if( ! $ds ) + // build the array of MatchingRule objects + $raw_matching_rules = _get_raw_schema( $server_id, 'matchingRules', $dn ); + if( ! $raw_matching_rules ) return false; - - // get all the attributeTypes - $result = @ldap_read($ds, 'cn=subschema', '(objectClass=*)', - array( 'matchingRules', 'matchingRuleUse' ), 0, 200, 0, LDAP_DEREF_ALWAYS ); - if( ! $result ) - $result = @ldap_read($ds, 'cn=schema', '(objectClass=*)', - array( 'matchingRules', 'matchingRuleUse' ), 0, 200, 0, LDAP_DEREF_ALWAYS ); - - if( $result ) - $raw = ldap_get_entries( $ds, $result ); - else - return( array() ); - - // build the array of attributes $rules = array(); - for( $i=0; $i < $raw[0]['matchingrules']['count']; $i++ ) - { - $rule = $raw[0]['matchingrules'][$i]; - preg_match( "/[\s]+([\d\.]+)[\s]+/", $rule, $oid); - preg_match( "/[\s]+NAME[\s]+'([\)\(:?\.a-zA-Z0-9\-_ ]+)'/", $rule, $name ); - - $key = strtolower( trim( $oid[1] ) ); - if( ! $key ) continue; - - $rules[$key] = $name[1]; - //$rules[$key]['name'] = $name[1]; + foreach( $raw_matching_rules as $rule_string ) { + if( $rule_string == null || 0 == strlen( $rule_string ) ) + continue; + $rule = new MatchingRule( $rule_string ); + $key = strtolower( $rule->getName() ); + $rules[ $key ] = $rule; } ksort( $rules ); + // For each MatchingRuleUse entry, add the attributes who use it to the + // MatchingRule in the $rules array. + $raw_matching_rule_use = _get_raw_schema( $server_id, 'matchingRuleUse' ); + if( $raw_matching_rule_use != false ) { + foreach( $raw_matching_rule_use as $rule_use_string ) { + if( $rule_use_string == null || 0 == strlen( $rule_use_string ) ) + continue; + $rule_use = new MatchingRuleUse( $rule_use_string ); + $key = strtolower( $rule_use->getName() ); + if( isset( $rules[ $key ] ) ) + $rules[ $key ]->setUsedByAttrs( $rule_use->getUsedByAttrs() ); + } + } else { + // No MatchingRuleUse entry in the subschema, so brute-forcing + // the reverse-map for the "$rule->getUsedByAttrs()" data. + $attrs = get_schema_attributes( $server_id, $dn ); + if( is_array( $attrs ) ) + foreach( $attrs as $attr ) { + $rule_key = strtolower( $attr->getEquality() ); + if( isset( $rules[ $rule_key ] ) ) + $rules[ $rule_key ]->addUsedByAttr( $attr->getName() ); + } + } + // cache the schema to prevent multiple schema fetches from LDAP server $cache[$server_id] = $rules; return $rules; } /* - * Returns an associate array of the syntax OIDs that this LDAP server uses mapped to - * their descriptions. + * Returns an array of Syntax objects that this LDAP server uses mapped to + * their descriptions. The key of each entry is the OID of the Syntax. */ -function get_schema_syntaxes( $server_id ) +function get_schema_syntaxes( $server_id, $dn=null ) { static $cache; // cache the schema to prevent multiple schema fetches from LDAP server if( isset( $cache[$server_id] ) ) { - //echo "Using syntax cache.
          "; return $cache[$server_id]; } - $ds = pla_ldap_connect( $server_id ); - - if( ! $ds ) + $raw_syntaxes = _get_raw_schema( $server_id, 'ldapSyntaxes', $dn ); + if( ! $raw_syntaxes ) return false; - // get all the attributeTypes - $result = @ldap_read($ds, 'cn=subschema', '(objectClass=*)', - array( 'ldapSyntaxes' ), 0, 200, 0, LDAP_DEREF_ALWAYS ); - if( ! $result ) - $result = @ldap_read($ds, 'cn=schema', '(objectClass=*)', - array( 'ldapSyntaxes' ), 0, 200, 0, LDAP_DEREF_ALWAYS ); - - if( $result ) - $raw = ldap_get_entries( $ds, $result ); - else - return( array() ); - // build the array of attributes $syntaxes = array(); - for( $i=0; $i < $raw[0]['ldapsyntaxes']['count']; $i++ ) - { - $syntax = $raw[0]['ldapsyntaxes'][$i]; - preg_match( "/[\s]+([\d\.]+)[\s]+/", $syntax, $oid); - preg_match( "/[\s]+DESC[\s]+'([\)\(:?\.a-zA-Z0-9\-_ ]+)'/", $syntax, $description ); - - $key = strtolower( trim( $oid[1] ) ); + foreach( $raw_syntaxes as $syntax_string ) { + $syntax = new Syntax( $syntax_string ); + $key = strtolower( trim( $syntax->getOID() ) ); if( ! $key ) continue; - - $syntaxes[$key] = array(); - $syntaxes[$key]['description'] = $description[1]; + $syntaxes[$key] = $syntax; } ksort( $syntaxes ); diff --git a/search.php b/search.php index bb48108..e51ed3b 100644 --- a/search.php +++ b/search.php @@ -15,21 +15,18 @@ require 'common.php'; -$server_id = $_GET['server_id']; - // try to get an available server_id if one is not provided -if( ! isset( $server_id ) ) -{ +if( ! isset( $_GET['server_id'] ) ) $server_id = get_avail_server_id(); +else { + $server_id = $_GET['server_id']; + check_server_id( $server_id ) or pla_error( $lang['bad_server_id'] ); } -else -{ - check_server_id( $server_id ) or pla_error( "Bad server_id: " . var_dump( htmlspecialchars( $server_id ) ) ); -} + $js_on_change_string =''; - if( $_GET['form'] == 'advanced' ) { - $js_on_change_string = 'onChange="document.forms[0].base_dn.value=servers[document.forms[0].server_id.value].getBaseDn()"'; - } +if( isset( $_GET['form'] ) && $_GET['form'] == 'advanced' ) + $js_on_change_string = + 'onChange="document.forms[0].base_dn.value=servers[document.forms[0].server_id.value].getBaseDn()"'; // build the server drop-down html and JavaScript array (for base_dns) $server_menu_html = ''; -$filter = $_GET['filter']; -$filter = utf8_encode($filter); -$attr = $_GET['attribute']; +$filter = isset( $_GET['filter'] ) ? $_GET['filter'] : null; +$filter = $filter; +$attr = isset( $_GET['attribute'] ) ? $_GET['attribute'] : null; // grab the base dn for the search if( isset( $_GET['base_dn'] ) ) @@ -62,13 +59,12 @@ elseif( '' != $servers[$server_id]['base'] ) else $base_dn = try_to_get_root_dn( $server_id ); -$criterion = $_GET['criterion']; -$form = $_GET['form']; -$scope = $_GET['scope'] ? $_GET['scope'] : 'sub'; -//echo "
          ";print_r( $_GET );echo "
          "; -?> +$criterion = isset( $_GET['criterion'] ) ? $_GET['criterion'] : null; +$form = isset( $_GET['form'] ) ? $_GET['form'] : null; +$scope = isset( $_GET['scope'] ) ? $_GET['scope'] : 'sub'; + +include 'header.php'; ?> -
          @@ -90,13 +86,15 @@ $scope = $_GET['scope'] ? $_GET['scope'] : 'sub';

          - You haven't logged into server - yet. Go to the login form to do so. +
          + .
          Searching...
          \n"; + flush(); + + // prevent script from bailing early on a long delete + @set_time_limit( 0 ); + + // grab the time limit set in config.php + $size_limit = isset ( $search_result_size_limit ) && is_numeric( $search_result_size_limit ) ? + $search_result_size_limit : + 0; + $time_start = utime(); - $results = pla_ldap_search( $server_id, $filter, $base_dn, $search_result_attributes, $scope ); + if( $scope == 'base' ) + $results = @ldap_read( $ds, $base_dn, $filter, $search_result_attributes, + 0, 0, 0, LDAP_DEREF_ALWAYS ); + elseif( $scope == 'one' ) + $results = @ldap_list( $ds, $base_dn, $filter, $search_result_attributes, + 0, 0, 0, LDAP_DEREF_ALWAYS ); + else // scope == 'sub' + $results = @ldap_search( $ds, $base_dn, $filter, $search_result_attributes, + 0, 0, 0, LDAP_DEREF_ALWAYS ); + + $errno = @ldap_errno( $ds ); $time_end = utime(); $time_elapsed = round( $time_end - $time_start, 2 ); - $count = count( $results ); + $count = @ldap_count_entries( $ds, $results ); ?> -
          -
          Found . +
          + + (in seconds). + Notice, search size limit exceeded.
          \n"; + } + + if( $size_limit > 0 && $count > $size_limit ) { + echo "
          Showing first $size_limit results.
          \n"; + + } + + ?> -
          Filter performed:
          +
          +
          - $attrs ) { ?> - - -
          - - - -
          - - $values ) { ?> + $size_limit ) { + break; + } + + $dn = ldap_get_dn( $ds, $entry_id ); + $encoded_dn = rawurlencode( $dn ); + $rdn = get_rdn( $dn ); + ?> + +
          +
          + + + + +
          +
          + + + + + "; + echo "\n"; + + // Iterate over each attribute for this entry + while( $attr ) { + + if( is_attr_binary( $server_id, $attr ) ) + $values = array( "(binary)" ); + else + $values = ldap_get_values( $ds, $entry_id, $attr ); + if( isset( $values['count'] ) ) + unset( $values['count'] ); + + if( isset( $friendly_attrs[ strtolower( $attr ) ] ) ) + $attr = "" . + htmlspecialchars( $friendly_attrs[ strtolower($attr) ] ) . + ""; + else + $attr = htmlspecialchars( $attr ); + ?> - + + -
          dn" . htmlspecialchars($dn) . "
          - - -
          - - - - + \n"; + ?>
          - +
          -
          Search happily performed by phpLDAPadmin in - seconds.
          + $entry_id = ldap_next_entry( $ds, $entry_id ); + + // flush every 5th entry (sppeds things up a bit) + if( 0 == $i % 5 ) + flush(); + + } // end while( $entry_id ) + + ?> + +

          +
          + + .
          - diff --git a/search_form_advanced.php b/search_form_advanced.php index cecb6a8..1452a44 100644 --- a/search_form_advanced.php +++ b/search_form_advanced.php @@ -19,41 +19,49 @@ for($i=0;$i<$num_server;$i++){ - + - + - + - - + + - + - +
          Server
          Base DN
          Search Scope
          - Search Filter +
          - Show Attributes + + echo isset( $_GET['display_attrs'] ) ? + htmlspecialchars( $_GET['display_attrs'] ) : + $search_result_attributes; ?>" />


          diff --git a/search_form_simple.php b/search_form_simple.php index 6fab9e7..ded2aea 100644 --- a/search_form_simple.php +++ b/search_form_simple.php @@ -10,9 +10,9 @@
          - Server

          +


          - Search for entries whose:
          +
          -
          +

          -
          +
          diff --git a/server_info.php b/server_info.php index 9266d90..dd904d4 100644 --- a/server_info.php +++ b/server_info.php @@ -10,26 +10,48 @@ require 'common.php'; +// The attributes we'll examine when searching the LDAP server's RootDSE +$root_dse_attributes = array( 'namingContexts', + 'subschemaSubentry', + 'altServer', + 'supportedExtension', + 'supportedControl', + 'supportedSASLMechanisms', + 'supportedLDAPVersion', + 'currentTime', + 'dsServiceName', + 'defaultNamingContext', + 'schemaNamingContext', + 'configurationNamingContext', + 'rootDomainNamingContext', + 'supportedLDAPPolicies', + 'highestCommittedUSN', + 'dnsHostName', + 'ldapServiceName', + 'serverName', + 'supportedCapabilities', + 'changeLog', + '+' ); + $server_id = $_GET['server_id']; $server_name = $servers[$server_id]['name']; -$ds = pla_ldap_connect( $server_id ) or pla_error( "Could not connect or authenticate to LDAP server" ); -$r = @ldap_read( $ds, '', 'objectClass=*', array( '+' ) ); +$ds = pla_ldap_connect( $server_id ) or pla_error( $lang['could_not_connect'] ); +$r = @ldap_read( $ds, '', 'objectClass=*', $root_dse_attributes ); if( ! $r ) - pla_error( "Could not fetch any information from the server" ); + pla_error( $lang['could_not_fetch_server_info'] ); $entry = @ldap_first_entry( $ds, $r ); $attrs = @ldap_get_attributes( $ds, $entry ); $count = @ldap_count_entries( $ds, $r ); -//echo "
          "; print_r( $attrs ); echo "
          "; include 'header.php'; ?> -

          Server info for

          -

          Server reports the following information about itself

          +

          +

          -

          This server has nothing to report.
          +

          @@ -38,11 +60,25 @@ include 'header.php'; "; - echo htmlspecialchars($attr) . ""; - for( $j=0; $j<$attrs[ $attr ][ 'count' ]; $j++ ) - echo htmlspecialchars( $attrs[ $attr ][ $j ] ) . "
          \n"; + $schema_href = "schema.php?server_id=$server_id&view=attributes#" . strtolower($attr); + ?> + + "> + + + + + + + \n"; ?> + + + + + diff --git a/style.css b/style.css index 82da314..41906bc 100644 --- a/style.css +++ b/style.css @@ -39,11 +39,24 @@ table.schema_attr tr.highlight{ font-weight: Bold; } +table.notice tr td { + font-size: 9pt; + padding: 2px; + margin: 0px; + background-color: #eee; +} + table.error { width: 500px; border: 2px solid black; } +table.error tr td table.bug tr td{ + padding: 6px; + margin: 0px; + background-color: #eee; +} + table.error tr td { vertical-align: top; text-align: left; @@ -257,9 +270,20 @@ table.edit_dn tr td.heading { font-weight: bold; } +table.edit_dn tr td.attr a { + text-decoration: none; + color: black; +} + +table.edit_dn tr td.attr a:hover { + text-decoration: underline; + color: #016; +} + table.edit_dn tr td.val { text-align: right; vertical-align: center; + padding-bottom: 15px; } /* When an attr is updated, it is displayed in light blue to indicate such */ @@ -331,10 +355,22 @@ h4.oclass_sub { ul.schema { margin: 5px; + margin-left: 0px; + padding-left: 20px; } ul.schema li { - margin-left: 10px; + margin-left: 0px; + padding-left: 0px; +} + +ul.schema li small { + font-size: 75%; + color: #777; +} + +ul.schema li small a { + color: #77c; } ul.current_values { @@ -427,3 +463,8 @@ table.create td.heading { vertical-align: top; padding: 10px; } + +div.add_value { + font-size: 10pt; + margin: 0px; +} diff --git a/templates/creation/custom.php b/templates/creation/custom.php index 8829b39..7da4d88 100644 --- a/templates/creation/custom.php +++ b/templates/creation/custom.php @@ -25,7 +25,7 @@ if( $step == 1 )
          - + @@ -41,14 +41,27 @@ if( $step == 1 ) + + + + + + + + @@ -74,14 +87,16 @@ if( $step == 2 ) // build a list of required attributes: $dn = $rdn . ',' . $container; - //$attrs = get_schema_attributes( $server_id ); $schema_oclasses = get_schema_objectclasses( $server_id ); $required_attrs = array(); $all_attrs = array(); - foreach( $oclasses as $oclass ) { - $required_attrs = array_merge( $required_attrs, $schema_oclasses[strtolower($oclass)]['must_attrs'] ); - $all_attrs = array_merge( $all_attrs, $schema_oclasses[strtolower($oclass)]['must_attrs'], - $schema_oclasses[strtolower($oclass)]['may_attrs'] ); + foreach( $oclasses as $oclass_name ) { + if( isset( $schema_oclasses[ strtolower( $oclass_name ) ] ) ) + $oclass = $schema_oclasses[ strtolower( $oclass_name ) ]; + else + continue; + $required_attrs = array_merge( $required_attrs, $oclass->getMustAttrNames( $oclasses ) ); + $all_attrs = array_merge( $oclass->getMustAttrNames(), $oclass->getMayAttrNames( $oclasses ) ); } $required_attrs = array_unique( $required_attrs ); @@ -111,7 +126,7 @@ if( $step == 2 ) $attr_select_html .= "\n"; } - $binary_select_html = ""; + $binary_attr_select_html = ""; if( count( $binary_attrs ) > 0 ) { foreach( $binary_attrs as $a ) { if( isset( $friendly_attrs[ strtolower( $a ) ] ) ) { @@ -200,8 +215,8 @@ if( $step == 2 ) 0 ) { ?> - - + + diff --git a/templates/creation/new_address_template.php b/templates/creation/new_address_template.php index aef0f0f..fb8cabc 100755 --- a/templates/creation/new_address_template.php +++ b/templates/creation/new_address_template.php @@ -10,9 +10,7 @@ $container = $_POST['container']; $server_id = $_POST['server_id']; // Unique to this template -$step = $_POST['step']; -if( ! $step ) - $step = 1; +$step = isset( $_POST['step'] ) ? $_POST['step'] : 1; check_server_id( $server_id ) or pla_error( "Bad server_id: " . htmlspecialchars( $server_id ) ); have_auth_info( $server_id ) or pla_error( "Not enough information to login to server. Please check your configuration." ); @@ -56,7 +54,7 @@ function autoFillCommonName( form ) - +
          ObjectClass(es):
          + + Hint: You must choose at least one structural objectClass + +
          +
          Optional Binary Attributes
          diff --git a/templates/creation/new_dns_entry.php b/templates/creation/new_dns_entry.php index dd665fc..597e8b3 100755 --- a/templates/creation/new_dns_entry.php +++ b/templates/creation/new_dns_entry.php @@ -7,9 +7,9 @@ $container = $_POST['container']; $server_id = $_POST['server_id']; // Unique to this template -$step = $_POST['step']; -if( ! $step ) - $step = 1; +$step = 1; +if( isset($_POST['step']) ) + $step = $_POST['step']; check_server_id( $server_id ) or die( "Bad server_id: " . htmlspecialchars( $server_id ) ); have_auth_info( $server_id ) or die( "Not enough information to login to server. Please check your configuration." ); @@ -23,7 +23,7 @@ if( ! $step ) - +
          diff --git a/templates/creation/new_nt_machine.php b/templates/creation/new_nt_machine.php index f56d93e..d4cf678 100644 --- a/templates/creation/new_nt_machine.php +++ b/templates/creation/new_nt_machine.php @@ -8,9 +8,9 @@ $server_id = $_POST['server_id']; // Unique to this template -$step = $_POST['step']; -if( ! $step ) - $step = 1; +$step = 1; +if( isset($_POST['step']) ) + $step = $_POST['step']; // A little config for this template $default_gid_number = 30000; @@ -30,7 +30,7 @@ have_auth_info( $server_id ) or pla_error( "Not enough information to login to s - +
          diff --git a/templates/creation/new_ou_template.php b/templates/creation/new_ou_template.php index be501fc..83e4b86 100644 --- a/templates/creation/new_ou_template.php +++ b/templates/creation/new_ou_template.php @@ -7,9 +7,9 @@ $container = $_POST['container']; $server_id = $_POST['server_id']; // Unique to this template -$step = $_POST['step']; -if( ! $step ) - $step = 1; +$step = 1; +if( isset($_POST['step']) ) + $step = $_POST['step']; check_server_id( $server_id ) or pla_error( "Bad server_id: " . htmlspecialchars( $server_id ) ); have_auth_info( $server_id ) or pla_error( "Not enough information to login to server. Please check your configuration." ); @@ -23,7 +23,7 @@ have_auth_info( $server_id ) or pla_error( "Not enough information to login to s - +
          diff --git a/templates/creation/new_posix_group_template.php b/templates/creation/new_posix_group_template.php index 8733f05..320967f 100644 --- a/templates/creation/new_posix_group_template.php +++ b/templates/creation/new_posix_group_template.php @@ -9,9 +9,9 @@ $server_id = $_POST['server_id']; // Change this to suit your needs $default_number_of_users = 10; -$step = $_POST['step']; -if( ! $step ) - $step = 1; +$step = 1; +if( isset($_POST['step']) ) + $step = $_POST['step']; check_server_id( $server_id ) or pla_error( "Bad server_id: " . htmlspecialchars( $server_id ) ); have_auth_info( $server_id ) or pla_error( "Not enough information to login to server. Please check your configuration." ); @@ -88,7 +88,7 @@ have_auth_info( $server_id ) or pla_error( "Not enough information to login to s - + diff --git a/templates/creation/new_smbuser_template.php b/templates/creation/new_smbuser_template.php index bc46243..e5eb261 100644 --- a/templates/creation/new_smbuser_template.php +++ b/templates/creation/new_smbuser_template.php @@ -10,10 +10,9 @@ // Common to all templates $server_id = $_POST['server_id']; - // Unique to this template - $step = $_POST['step']; - if( ! $step ) - $step = 1; + $step = 1; + if( isset($_POST['step']) ) + $step = $_POST['step']; check_server_id( $server_id ) or pla_error( "Bad server_id: " . htmlspecialchars( $server_id ) ); have_auth_info( $server_id ) or pla_error( "Not enough information to login to server. Please check your configuration." ); @@ -68,7 +67,7 @@ - +
          @@ -174,17 +173,17 @@ -1, + 'shadowMax' => 999999, + 'shadowWarning' => 7, + 'shadowInactive' => -1, + 'shadowExpire' => -1, + 'shadowFlag' => 0 + ); // Unique to this template -$step = $_POST['step']; -if( ! $step ) - $step = 1; +$step = 1; +if( isset($_POST['step']) ) + $step = $_POST['step']; check_server_id( $server_id ) or pla_error( "Bad server_id: " . htmlspecialchars( $server_id ) ); have_auth_info( $server_id ) or pla_error( "Not enough information to login to server. Please check your configuration." ); @@ -46,7 +66,7 @@ function autoFillUserName( form ) } /* - * Pipulates the home directory field based on the username provided + * Populates the home directory field based on the username provided */ function autoFillHomeDir( form ) { @@ -65,14 +85,20 @@ function autoFillHomeDir( form ) --> -

          New User Account

          +
          +

          New User Account

          + +Hint: To customize this template, edit the file templates/creation/new_user_template.php
          + +
          +
          - +
          @@ -110,8 +136,10 @@ function autoFillHomeDir( form ) @@ -141,10 +169,18 @@ function autoFillHomeDir( form ) + - + + @@ -162,24 +198,24 @@ function autoFillHomeDir( form ) - +
          UID Number: + (automatically determined)"; ?> +


    " /> - + @@ -224,6 +260,14 @@ function autoFillHomeDir( form ) + $default_val ) { ?> + + + + + + +
    diff --git a/templates/modification/default.php b/templates/modification/default.php new file mode 100644 index 0000000..3097359 --- /dev/null +++ b/templates/modification/default.php @@ -0,0 +1,677 @@ +getMustAttrNames( $schema_oclasses ), + $schema_oclass->getMayAttrNames( $schema_oclasses ), + $avail_attrs ); + } + + $avail_attrs = array_unique( $avail_attrs ); + $avail_attrs = array_filter( $avail_attrs, "not_an_attr" ); + sort( $avail_attrs ); + + $avail_binary_attrs = array(); + foreach( $avail_attrs as $i => $attr ) { + if( is_attr_binary( $server_id, $attr ) ) { + $avail_binary_attrs[] = $attr; + unset( $avail_attrs[ $i ] ); + } + } +} + +include 'header.php'; ?> + + +

    +

    :     :

    + +
    User name:
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 ) { + if( $children_count == $max_children ) + $children_count = $children_count . '+'; + +?> + + + + + + + + + 0 ) { ?> + + + + + + + + + + + + + + + + + + + + + + + + + 1 ) { ?> + + + + + + + + +
    + (mac) + (win) + (unix) +
    ">
    + (mac) + (win) + (unix) +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 ) { ?> + + + + + + + + + + + + + + + + + + $vals ) { + $counter++; + $schema_href = "schema.php?server_id=$server_id&view=attributes#" . strtolower(real_attr_name($attr)); + ?> + + + + + + \n"; +} + +?> + + + + + + + + + + + + + + + + + + 0 ) + foreach( $hidden_attrs as $i => $attr_name ) + $hidden_attrs[$i] = strtolower( $attr_name ); + else + $hidden_attrs = array(); +?> + + $vals ) { + + flush(); + + if( ! is_server_read_only( $server_id ) ) { + $schema_attr = get_schema_attribute( $server_id, $attr, $dn ); + if( $schema_attr ) + $attr_syntax = $schema_attr->getSyntaxOID(); + else + $attr_syntax = null; + } + + if( 0 == strcasecmp( $attr, 'dn' ) ) + continue; + + // has the config.php specified that this attribute is to be hidden? + if( in_array( strtolower( $attr ), $hidden_attrs ) ) + continue; + + // is there a user-friendly translation available for this attribute? + if( isset( $friendly_attrs[ strtolower( $attr ) ] ) ) { + $attr_display = $friendly_attrs[ strtolower( $attr ) ]; + $attr_note = "alias"; + } else { + $attr_note = ""; + $attr_display = $attr; + } + + ?> + + + + + + + + + + + + + + + + $val ) { + $val = ( $val ); + if( $val == "" ) + echo "[empty]
    \n"; + else + echo $val . "
    "; + } + } else { + echo ( $vals ) . "
    "; + } + continue; + } + + /* + * Is this a userPassword attribute? + */ + if( 0 == strcasecmp( $attr, 'userpassword' ) ) { + $user_password = $vals[0]; + + /* Capture the stuff in the { } to determine if this is crypt, md5, etc. */ + if( preg_match( "/{([^}]+)}/", $user_password, $enc_type) ) + $enc_type = strtolower($enc_type[1]); + else + $enc_type = null; + + // Set the default hashing type if the password is blank (must be newly created) + if( $val == '' ) { + $enc_type = $servers[$server_id]['default_hash']; + } ?> + + + + + + + + + + + + + getType() : + null; + + if( 0 == strcasecmp( 'boolean', $type ) ) { + $val = $vals[0]; + + ?> + + + + + + $val ) { + $val = ( $val ); ?> + + + + + + +
    + +

    + + + + getIsSingleValue() ) + { + $add_href = "add_value_form.php?server_id=$server_id&" . + "dn=$encoded_dn&attr=" . rawurlencode( $attr ); + echo "\n"; + } + + ?> + + + + + $vals ) */ ?> + + + + + + + + +
    + + + + + + + + +
    + + + + + + 0 ) { ?> + + + + + + + + () + + +
    + + + + + + + + + + +
    + + + + + + + + + + + +() + + + + +
    + +
    + +
    (" . $lang['none'] . ")
    + +
    + + + +
    +
    + + + + +
    + 1 ) { for( $i=1; $i<=count($vals); $i++ ) { ?> + "> ()
    + +
    + + + + + + +
    +
    + + + + + +
    + + + +
    + + $values ) + if( 0 == strcasecmp( $attr, $x ) ) + return false; + return true; +} + +?> diff --git a/templates/modification/user.php b/templates/modification/user.php new file mode 100644 index 0000000..da3de27 --- /dev/null +++ b/templates/modification/user.php @@ -0,0 +1,39 @@ + + + + +

    Editing User:

    +

    + Server:     + LDAP DN: + +

    + + +
    + Using the user template. + You may switch to the default template +
    + + +

    TODO: FinishMe

    diff --git a/tree.php b/tree.php index b2dfd6d..e9aaced 100644 --- a/tree.php +++ b/tree.php @@ -1,4 +1,4 @@ - - +include 'header.php'; ?> @@ -69,6 +68,12 @@ foreach( $servers as $server_id => $server_tree ) { if( $servers[$server_id]['host'] != '' ) { + // Does this server want mass deletion availble? + if( mass_delete_enabled( $server_id ) ) { + echo "
    \n"; + echo "\n"; + } + $server_name = $servers[$server_id]['name']; echo ''; echo 'server'; @@ -78,129 +83,173 @@ foreach( $servers as $server_id => $server_tree ) { // do we have what it takes to authenticate here, or do we need to // present the user with a login link (for 'form' auth_types)? - if( have_auth_info( $server_id ) ) - { - $schema_href = 'schema.php?server_id=' . $server_id . '" target="right_frame'; - $search_href= 'search.php?server_id=' . $server_id . '" target="right_frame'; - $refresh_href = 'refresh.php?server_id=' . $server_id; - $create_href = 'create_form.php?server_id=' . $server_id . '&container=' . - rawurlencode( $servers[$server_id]['base'] ); - $logout_href = 'logout.php?server_id=' . $server_id; - $info_href = 'server_info.php?server_id=' . $server_id; - $import_href = 'ldif_import_form.php?server_id=' . $server_id; + if( have_auth_info( $server_id ) ) { - // Draw the quick-links below the server name: - // ( schema | search | refresh | create ) - echo ''; - echo ''; - echo '( '; - echo '' . $lang['schema'] . ' | '; - echo '' . $lang['search'] . ' | '; - echo '' . $lang['refresh'] . ' | '; - echo 'create | '; - echo '' . $lang['info'] . ' | '; - echo '' . $lang['import'] . ''; - if( $servers[ $server_id ][ 'auth_type' ] == 'form' ) - echo ' | ' . $lang['logout'] . ''; - echo ' )'; - - if( $servers[$server_id]['auth_type'] == 'form' && have_auth_info( $server_id ) ) - echo "" . - $lang['logged_in_as'] . htmlspecialchars(get_logged_in_dn($server_id)) . - ""; - if( is_server_read_only( $server_id ) ) - echo "" . - "(" . $lang['read_only'] . ")"; - - // Fetch and display the base DN for this server - //$rdn = utf8_decode( $dn ); - if( null == $servers[ $server_id ]['base'] ) { - $base_dn = try_to_get_root_dn( $server_id ); - } else { - $base_dn = $servers[ $server_id ]['base']; - } - - // Did we get a base_dn for this server somehow? - if( $base_dn ) { - // is the root of the tree expanded already? - if( isset( $tree[$server_id][$base_dn] ) ) { - $expand_href = "collapse.php?server_id=$server_id&" . - "dn=" . rawurlencode( $base_dn ); - $expand_img = "images/minus.png"; + if( pla_ldap_connect( $server_id ) ) { + $schema_href = 'schema.php?server_id=' . $server_id . '" target="right_frame'; + $search_href= 'search.php?server_id=' . $server_id . '" target="right_frame'; + $refresh_href = 'refresh.php?server_id=' . $server_id; + $create_href = 'create_form.php?server_id=' . $server_id . '&container=' . + rawurlencode( $servers[$server_id]['base'] ); + $logout_href = 'logout.php?server_id=' . $server_id; + $info_href = 'server_info.php?server_id=' . $server_id; + $import_href = 'ldif_import_form.php?server_id=' . $server_id; + + // Draw the quick-links below the server name: + // ( schema | search | refresh | create ) + echo ''; + echo ''; + echo '( '; + echo '' . $lang['schema'] . ' | '; + echo '' . $lang['search'] . ' | '; + echo '' . $lang['refresh'] . ' | '; + echo '' . $lang['create'] . ' | '; + echo '' . $lang['info'] . ' | '; + echo '' . $lang['import'] . ''; + if( $servers[ $server_id ][ 'auth_type' ] == 'form' ) + echo ' | ' . $lang['logout'] . ''; + echo ' )'; + + if( $servers[$server_id]['auth_type'] == 'form' && have_auth_info( $server_id ) ) + echo "" . + $lang['logged_in_as'] . htmlspecialchars(get_logged_in_dn($server_id)) . + ""; + if( is_server_read_only( $server_id ) ) + echo "" . + "(" . $lang['read_only'] . ")"; + + // Fetch and display the base DN for this server + //$rdn = utf8_decode( $dn ); + if( null == $servers[ $server_id ]['base'] ) { + $base_dn = try_to_get_root_dn( $server_id ); } else { - $expand_href = "expand.php?server_id=$server_id&" . - "dn=" . rawurlencode( $base_dn ); - $expand_img = "images/plus.png"; + $base_dn = $servers[ $server_id ]['base']; + } + + // Did we get a base_dn for this server somehow? + if( $base_dn ) { + + echo "\n\n\n\n"; + + // is the root of the tree expanded already? + if( isset( $tree[$server_id][$base_dn] ) ) { + $expand_href = "collapse.php?server_id=$server_id&" . + "dn=" . rawurlencode( $base_dn ); + $expand_img = "images/minus.png"; + } else { + $expand_href = "expand.php?server_id=$server_id&" . + "dn=" . rawurlencode( $base_dn ); + $expand_img = "images/plus.png"; + } + + $edit_href = "edit.php?server_id=$server_id&dn=" . rawurlencode( $base_dn ); + + $icon = isset( $tree_icons[ $server_id ][ $base_dn ] ) ? + $tree_icons[ $server_id ][ $base_dn ] : + get_icon( $server_id, $base_dn ); + + // Shall we draw the "mass-delete" checkbox? + if( mass_delete_enabled( $server_id ) ) { + echo "\n"; + } + + echo ""; + echo ""; + echo ""; + echo "\n"; + echo "$base_dn\n"; + echo "\n"; + + } else { // end if( $base_dn ) + + if( "" === $base_dn || null === $base_dn ) { + // The server refuses to give out the base dn + echo ""; + echo $lang['could_not_determine_root']; + echo '
    '; + echo $lang['ldap_refuses_to_give_root']; + echo '
    '; + echo $lang['please_specify_in_config']; + echo "
    "; + // Proceed to the next server. We cannot draw anything else for this server. + continue; + } else { + // For some unknown reason, we couldn't determine the base dn + echo ""; + echo $lang['could_not_determine_root']; + echo '
    '; + echo $lang['please_specify_in_config']; + echo "
    "; + // Proceed to the next server. We cannot draw anything else for this server. + continue; + } + } + + flush(); + + // Is the root of the tree expanded already? + if( isset( $tree[$server_id][$base_dn] ) && is_array( $tree[$server_id][$base_dn] ) ) { + foreach( $tree[ $server_id ][ $base_dn ] as $child_dn ) + draw_tree_html( $child_dn, $server_id, 0 ); + if( ! is_server_read_only( $server_id ) ) { + echo ''; + echo '
    '; + echo '' . $lang['create_new'] . ''; + } } - $edit_href = "edit.php?server_id=$server_id&dn=" . rawurlencode( $base_dn ); - - $icon = get_icon( $server_id, $base_dn ); - echo ""; - echo ""; - echo ""; - echo "\n"; - echo "$base_dn\n"; + } else { // end if( pla_ldap_connect( $ds ) ) + // could not connect to LDAP server + echo "\n"; + echo "\n"; + echo "\n"; + echo "" . $lang['could_not_connect'] . "\n"; echo "\n"; - } else { - if( "" === $base_dn || null === $base_dn ) { - // The server refuses to give out the base dn - echo ""; - echo $lang['could_not_determine_root']; - echo '
    '; - echo $lang['ldap_refuses_to_give_root']; - echo '
    '; - echo $lang['please_specify_in_config']; - echo "
    "; - // Proceed to the next server. We cannot draw anything else for this server. - continue; - } else { - // For some unknown reason, we couldn't determine the base dn - echo ""; - echo $lang['could_not_determine_root']; - echo '
    '; - echo $lang['please_specify_in_config']; - echo "
    "; - // Proceed to the next server. We cannot draw anything else for this server. - continue; + + if( $servers[ $server_id ][ 'auth_type' ] == 'form' ) { + $logout_href = 'logout.php?server_id=' . $server_id; + echo "\n"; + echo "\n"; + echo "\n"; + echo ""; + echo "
    " . $lang['logout'] . "\n"; + echo "\n"; } + + + // Proceed to the next server in the list. We cannot do anything mroe here. + continue; } - flush(); + } else { // end if have_auth_info( $server_id ) - // Is the root of the tree expanded already? - if( isset( $tree[$server_id][$base_dn] ) ) { - foreach( $tree[ $server_id ][ $base_dn ] as $child_dn ) - draw_tree_html( $child_dn, $server_id, 0 ); - if( ! is_server_read_only( $server_id ) ) { - echo ''; - echo ''; - echo '' . $lang['create_new'] . ''; - } - } - } - else // have_auth_info() returned false. - { // We don't have enough information to login to this server // Draw the "login..." link $login_href = "login_form.php?server_id=$server_id"; - echo ''; - echo '   '; - echo 'login '; - echo 'login...'; + echo ''; + echo ''; + echo ''; + echo 'login'; + echo '' . $lang['login_link'] . ''; echo ''; } + + if( mass_delete_enabled( $server_id ) ) { + echo "\n"; + echo "\n"; + echo "
    \n"; + } } } @@ -237,14 +286,24 @@ function draw_tree_html( $dn, $server_id, $level=0 ) $img_src = 'images/' . $tree_icons[ $server_id ][ $dn ]; $rdn = pla_explode_dn( $dn ); - $rdn = $rdn[0]; + if( isset( $rdn[0] ) ) + $rdn = $rdn[0]; echo ''; for( $i=0; $i<=$level; $i++ ) { echo '' . "\n"; } - + + // Shall we draw the "mass-delete" checkbox? + if( mass_delete_enabled( $server_id ) ) { + echo " + + \n"; + } + // is this node expanded? (deciding whether to draw "+" or "-") if( isset( $tree[$server_id][$dn] ) ) { ?> @@ -270,7 +329,7 @@ function draw_tree_html( $dn, $server_id, $level=0 ) + target="right_frame"> diff --git a/unit_test.php b/unit_test.php new file mode 100644 index 0000000..32385b4 --- /dev/null +++ b/unit_test.php @@ -0,0 +1,14 @@ +"; +for( $i=0; $i '' foreach( $update_array as $attr => $val ) @@ -46,11 +49,56 @@ foreach( $update_array as $attr => $val ) else foreach( $val as $i => $v ) $update_array[ $attr ][ $i ] = $v; + +// Call the custom callback for each attribute modification +// and verify that it should be modified. +foreach( $update_array as $attr_name => $val ) + if( true !== preAttrModify( $server_id, $dn, $attr_name, $val ) ) + unset( $update_array[ $attr_name ] ); $ds = pla_ldap_connect( $server_id ); $res = @ldap_modify( $ds, $dn, $update_array ); if( $res ) { + // Fire the post modification event to the user's custom + // callback function. + foreach( $update_array as $attr_name => $val ) { + postAttrModify( $server_id, $dn, $attr_name, $val ); + + // Was this a user's password modification who is currently + // logged in? If so, they need to logout and log back in + // with the new password. + if( 0 === strcasecmp( $attr_name, 'userPassword' ) && + check_server_id( $server_id ) && + isset( $servers[ $server_id ][ 'auth_type' ] ) && + $servers[ $server_id ][ 'auth_type' ] == 'form' && + 0 === pla_compare_dns( get_logged_in_dn( $server_id ), $dn ) ) + { + unset_cookie_login_dn( $server_id ); + include realpath( 'header.php' ); + + ?> + + +
    +
    + Modification successful!
    +
    + Since you changed your password, you must
    + now login again with your new password. +
    + + + + $junk ) $redirect_url .= "&modified_attrs[]=$attr"; @@ -58,7 +106,7 @@ if( $res ) } else { - pla_error( "Could not perform ldap_modify operation.", ldap_error( $ds ), ldap_errno( $ds ) ); + pla_error( $lang['could_not_perform_ldap_modify'], ldap_error( $ds ), ldap_errno( $ds ) ); } ?> diff --git a/update_confirm.php b/update_confirm.php index ad5d345..9734b38 100644 --- a/update_confirm.php +++ b/update_confirm.php @@ -15,22 +15,42 @@ require 'common.php'; include 'header.php'; $server_id = $_POST['server_id']; -$encoded_dn = $_POST['dn']; -$dn = rawurldecode( $encoded_dn ); + +check_server_id( $server_id ) or die( $lang['bad_server_id'] ); + +$dn = $_POST['dn']; +$encoded_dn = rawurlencode( $dn ); $rdn = get_rdn( $dn ); $old_values = $_POST['old_values']; $new_values = $_POST['new_values']; -$update_array = array(); +$server_name = $servers[$server_id]['name']; if( is_server_read_only( $server_id ) ) - pla_error( "You cannot perform updates while server is in read-only mode" ); + pla_error( $lang['no_updates_in_read_only_mode'] ); + +// utf8_decode all the incoming new_values and old_values as they were input +// from a utf8 page. +foreach( $old_values as $attr => $vals ) + if( is_array( $vals ) ) + foreach( $vals as $i => $v ) + $old_values[ $attr ][ $i ] = utf8_decode( $v ); + else + $old_values[ $attr ] = utf8_decode( $vals ); +foreach( $new_values as $attr => $vals ) + if( is_array( $vals ) ) + foreach( $vals as $i => $v ) + $new_values[ $attr ][ $i ] = utf8_decode( $v ); + else + $new_values[ $attr ] = utf8_decode( $vals ); + ?> -

    -

    Server:     Distinguished Name:

    +

    +

    Server:     :

    $new_val ) { // did the user change the field? @@ -39,13 +59,16 @@ foreach( $new_values as $attr => $new_val ) // special case for userPassword attributes if( 0 == strcasecmp( $attr, 'userPassword' ) && $new_val != '' ) $new_val = password_hash( $new_val, $_POST['enc_type'] ); - $update_array[ $attr ] = $new_val; } } // special case check for a new enc_type for userPassword (not otherwise detected) -if( $_POST['enc_type'] != $_POST['old_enc_type'] && $_POST['new_values']['userpassword'] != '' ) { +if( isset( $_POST['enc_type'] ) && + $_POST['enc_type'] != $_POST['old_enc_type'] && + $_POST['enc_type'] != 'clear' && + $_POST['new_values']['userpassword'] != '' ) { + $new_password = password_hash( $_POST['new_values']['userpassword'], $_POST['enc_type'] ); $update_array[ 'userpassword' ] = $new_password; } @@ -74,12 +97,17 @@ foreach( $update_array as $attr => $val ) {
    - Do you want to make these changes? +

    - + + + + + + $new_val ) { $counter++ ?> @@ -110,14 +138,14 @@ foreach( $update_array as $attr => $val ) { // expectations if( $update_array[ $attr ] == array( 0 => '' ) || $update_array[ $attr ] == array() ) { $update_array[ $attr ] = ''; - echo '[attribute deleted]'; + echo '' . $lang['attr_deleted'] . ''; } } else if( $new_val != '' ) echo htmlspecialchars( $new_val ) . "
    "; else - echo '[attribute deleted]'; + echo '' . $lang['attr_deleted'] . ''; echo "\n\n"; } @@ -132,29 +160,31 @@ foreach( $update_array as $attr => $val ) { - + $val ) { ?> $v ) { ?> + + - + @@ -167,8 +197,8 @@ foreach( $update_array as $attr => $val ) { } else { ?>
    - You made no changes. - Go back. + + .
    diff --git a/view_jpeg_photo.php b/view_jpeg_photo.php index 12c6c41..8774682 100644 --- a/view_jpeg_photo.php +++ b/view_jpeg_photo.php @@ -6,11 +6,11 @@ $file = $_GET['file']; // Security check (we don't want anyone tryting to get at /etc/passwd or something) preg_match( "/^djp/", $file ) or - pla_error( "Unsafe file name: " . htmlspecialchars( $file ) ); + pla_error( $lang['unsafe_file_name'] . htmlspecialchars( $file ) ); $file = $jpeg_temp_dir . '/' . $file; file_exists( $file ) or - pla_error( "No such file: " . htmlspecialchars( $file ) ); + pla_error( $lang['no_such_file'] . htmlspecialchars( $file ) ); // little security measure here (prevents users from accessing // files, like /etc/passwd for example) diff --git a/welcome.php b/welcome.php index 3e31d5b..e7789e5 100644 --- a/welcome.php +++ b/welcome.php @@ -1,4 +1,7 @@ - +

    @@ -6,5 +9,9 @@


    -Use the menu to the left to navigate. +
    + + + +
    AttributeOld ValueNew Value
    - - + +