From 97297cd99b2e889489ceee435256f862033171bd Mon Sep 17 00:00:00 2001 From: Deon George Date: Tue, 30 Jun 2009 18:12:47 +1000 Subject: [PATCH] RELEASE 0.9.4 --- INSTALL | 18 +- VERSION | 2 +- add_attr.php | 135 + add_attr_form.php | 171 ++ add_oclass.php | 4 + add_oclass_form.php | 14 +- add_value.php | 9 +- add_value_form.php | 43 +- check_lang_files.php | 59 +- collapse.php | 19 +- common.php | 108 +- config.php.example | 227 +- copy.php | 27 +- copy_form.php | 65 +- create.php | 20 +- create_form.php | 32 +- creation_template.php | 11 +- custom_functions.php | 10 + delete.php | 13 +- delete_attr.php | 18 +- delete_form.php | 63 +- doc/CREDITS | 41 +- doc/ChangeLog | 151 +- doc/INSTALL-de.txt | 17 +- doc/INSTALL-es.txt | 1 + doc/INSTALL-fr.txt | 1 + doc/README-translation.txt | 103 + doc/ROADMAP | 63 +- doc/pla-test-i18n.ldif | 67 + documentation.php | 4 +- download_binary_attr.php | 28 +- edit.php | 8 +- emuhash_functions.php | 100 + entry_chooser.js | 1 + entry_chooser.php | 28 +- expand.php | 21 +- export.php | 76 + export_form.php | 110 + export_functions.php | 628 +++++ functions.php | 2170 +++++++++++++---- header.php | 12 +- images/add.png | Bin 0 -> 528 bytes images/catalog.png | Bin 0 -> 1302 bytes images/children.png | Bin 438 -> 342 bytes images/files.png | Bin 0 -> 1113 bytes images/go.png | Bin 0 -> 440 bytes images/hard-drive.png | Bin 0 -> 1308 bytes images/ldap-server.png | Bin 0 -> 1084 bytes images/lock.png | Bin 858 -> 1256 bytes images/n.png | Bin 0 -> 408 bytes images/rename.png | Bin 0 -> 418 bytes images/server-settings.png | Bin 0 -> 1149 bytes images/server-small.png | Bin 0 -> 818 bytes images/tools-no.png | Bin 0 -> 798 bytes images/tools.png | Bin 0 -> 503 bytes index.php | 36 +- lang/Makefile | 44 +- lang/auto.php | 15 +- lang/ca.php | 10 +- lang/de.php | 466 +++- lang/en.php | 288 ++- lang/es.php | 13 +- lang/fr.php | 269 +- lang/it.php | 8 +- lang/nl.php | 18 +- lang/pl.php | 508 ++++ lang/pt-br.php | 361 +++ lang/recoded/auto.php | 21 +- lang/recoded/ca.php | 10 +- lang/recoded/de.php | 466 +++- lang/recoded/en.php | 290 ++- lang/recoded/es.php | 13 +- lang/recoded/fr.php | 483 ++-- lang/recoded/it.php | 8 +- lang/recoded/nl.php | 18 +- lang/recoded/pl.php | 508 ++++ lang/recoded/pt-br.php | 361 +++ lang/recoded/ru.php | 8 +- lang/recoded/sv.php | 387 +++ lang/recoded/zz.php | 13 + lang/recoded/zzz.php | 13 + lang/ru.php | 8 +- lang/sv.php | 387 +++ lang/zz.php | 13 + lang/zzz.php | 13 + ldap_error_codes.txt | 2 +- ldif_export.php | 136 -- ldif_functions.php | 484 ++-- ldif_import.php | 73 +- ldif_import_form.php | 15 +- login.php | 175 +- login_form.php | 39 +- logout.php | 26 +- mass_delete.php | 37 +- new_attr.php | 67 - rdelete.php | 45 +- refresh.php | 9 +- rename.php | 31 +- rename_form.php | 46 + schema.php | 234 +- schema_functions.php | 878 +++++-- search.php | 150 +- search_form_advanced.php | 18 +- search_form_predefined.php | 51 + search_form_simple.php | 27 +- search_util.js | 2 +- server_info.php | 60 +- session_functions.php | 104 + style.css | 131 +- templates/creation/custom.php | 195 +- templates/creation/new_address_template.php | 4 +- templates/creation/new_dns_entry.php | 4 +- templates/creation/new_kolab_template.php | 304 +++ templates/creation/new_nt_machine.php | 2 + templates/creation/new_ou_template.php | 10 +- .../creation/new_posix_group_template.php | 2 + .../creation/new_security_object_template.php | 2 + templates/creation/new_smb3_nt_machine.php | 2 + templates/creation/new_smb3_user_template.php | 356 ++- templates/creation/new_smbgroup_template.php | 130 +- templates/creation/new_smbuser_template.php | 2 + templates/creation/new_user_template.php | 37 +- templates/modification/default.php | 491 ++-- templates/modification/group_of_names.php | 128 + templates/modification/user.php | 5 +- templates/template_config.php | 116 +- tree.php | 155 +- unit_test.php | 108 +- update.php | 17 +- update_confirm.php | 432 ++-- view_jpeg_photo.php | 2 + welcome.php | 8 +- 132 files changed, 11778 insertions(+), 3328 deletions(-) create mode 100644 add_attr.php create mode 100644 add_attr_form.php create mode 100644 doc/README-translation.txt create mode 100644 doc/pla-test-i18n.ldif create mode 100644 emuhash_functions.php create mode 100755 export.php create mode 100755 export_form.php create mode 100755 export_functions.php create mode 100644 images/add.png create mode 100644 images/catalog.png create mode 100644 images/files.png create mode 100644 images/go.png create mode 100644 images/hard-drive.png create mode 100644 images/ldap-server.png create mode 100644 images/n.png create mode 100644 images/rename.png create mode 100644 images/server-settings.png create mode 100644 images/server-small.png create mode 100644 images/tools-no.png create mode 100644 images/tools.png create mode 100644 lang/pl.php create mode 100644 lang/pt-br.php create mode 100644 lang/recoded/pl.php create mode 100644 lang/recoded/pt-br.php create mode 100644 lang/recoded/sv.php create mode 100644 lang/recoded/zz.php create mode 100644 lang/recoded/zzz.php create mode 100644 lang/sv.php create mode 100644 lang/zz.php create mode 100644 lang/zzz.php delete mode 100644 ldif_export.php delete mode 100644 new_attr.php create mode 100644 rename_form.php create mode 100644 search_form_predefined.php create mode 100644 session_functions.php create mode 100644 templates/creation/new_kolab_template.php create mode 100644 templates/modification/group_of_names.php diff --git a/INSTALL b/INSTALL index 4a3e2ce..cec0dba 100644 --- a/INSTALL +++ b/INSTALL @@ -14,8 +14,24 @@ in the "doc" directory. 3. Copy 'config.php.example' to 'config.php' and edit to taste. 4. Then, point your browser to the phpldapadmin directory. -* For help +* For additional help See the files in the "doc" directory. Join our mailing list: https://lists.sourceforge.net/lists/listinfo/phpldapadmin-devel + +* Platform specific notes + + * OpenBSD with chroot'ed Apache: + + For jpeg photos to work properly, you must do this: + # mkdir /var/www/tmp, and then + # chown root:daemon /var/www/tmp + # chmod 1755 /var/www/tmp + Where tmp is the $jpeg_temp_dir configured in config.php + + * Windows + + For jpeg photos to work properly, be sure to change $jpeg_temp_dir + from "/tmp" to "c:\\temp" or similar. + diff --git a/VERSION b/VERSION index 965065d..a602fc9 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.9.3 +0.9.4 diff --git a/add_attr.php b/add_attr.php new file mode 100644 index 0000000..798f0f6 --- /dev/null +++ b/add_attr.php @@ -0,0 +1,135 @@ +createSambaPasswords( $val ); + $val = $mkntPassword->valueOf($attr); +} + +$ds = pla_ldap_connect( $server_id ) or pla_error( $lang['could_not_connect'] ); +$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&modified_attrs[]=$encoded_attr" ); +else + pla_error( $lang['failed_to_add_attr'], ldap_error( $ds ) , ldap_errno( $ds ) ); + +// check if we need to append the ;binary option to the name +// of some binary attribute + +function is_binary_option_required( $server_id, $attr ){ + + // list of the binary attributes which need the ";binary" option + $binary_attributes_with_options = array( + // Superior: Ldapv3 Syntaxes (1.3.6.1.4.1.1466.115.121.1) + '1.3.6.1.4.1.1466.115.121.1.8' => "userCertificate", + '1.3.6.1.4.1.1466.115.121.1.8' => "caCertificate", + '1.3.6.1.4.1.1466.115.121.1.10' => "crossCertificatePair", + '1.3.6.1.4.1.1466.115.121.1.9' => "certificateRevocationList", + '1.3.6.1.4.1.1466.115.121.1.9' => "authorityRevocationList", + // Superior: Netscape Ldap attributes types (2.16.840.1.113730.3.1) + '2.16.840.1.113730.3.1.40' => "userSMIMECertificate" + ); + + // quick check by attr name (short circuits the schema check if possible) + //foreach( $binary_attributes_with_options as $oid => $name ) + //if( 0 == strcasecmp( $attr, $name ) ) + //return true; + + $schema_attr = get_schema_attribute( $server_id, $attr ); + if( ! $schema_attr ) + return false; + + $syntax = $schema_attr->getSyntaxOID(); + if( isset( $binary_attributes_with_options[ $syntax ] ) ) + return true; + + return false; +} + +?> diff --git a/add_attr_form.php b/add_attr_form.php new file mode 100644 index 0000000..d361669 --- /dev/null +++ b/add_attr_form.php @@ -0,0 +1,171 @@ + + + + +

+

:     :

+ +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 ] ); + } +} + +?> + +
+
+ + + + + 0 ) { ?> + +
+
+
+ + + + + + +
+ + +
+
+ () +
+
+ + + + + 0 ) { ?> + +
+ + + +
+ + + + " . $lang['warning_file_uploads_disabled'] . "
"; + else + echo "
" . sprintf( $lang['max_file_size'], ini_get( 'upload_max_filesize' ) ) . "
"; + ?> +
+ + +
+
+ () + + + +
+ + + + $values ) + if( 0 == strcasecmp( $attr, $x ) ) + return false; + return true; +} + + +?> diff --git a/add_oclass.php b/add_oclass.php index 13e4e65..afb3417 100644 --- a/add_oclass.php +++ b/add_oclass.php @@ -1,4 +1,6 @@ 0 ) $attr ) { ?> - - - - - - - - + + diff --git a/add_value.php b/add_value.php index 98a55b9..c9aeb34 100644 --- a/add_value.php +++ b/add_value.php @@ -1,4 +1,6 @@ - $new_value ); +$new_entry = array( $attr => $new_value ); $add_result = @ldap_mod_add( $ds, $dn, $new_entry ); diff --git a/add_value_form.php b/add_value_form.php index 90e8e02..e2eff6a 100644 --- a/add_value_form.php +++ b/add_value_form.php @@ -1,4 +1,6 @@ - - +

:     @@ -61,7 +66,7 @@ include 'header.php'; ?>
- +
@@ -121,19 +126,19 @@ include 'header.php'; ?> - +

- +
-
> @@ -143,17 +148,23 @@ include 'header.php'; ?> + + + getMaxLength() ) echo "maxlength=\"" . $schema_attr->getMaxLength() . "\" "; - ?>name="new_value" size="40" value="" /> + ?>name="new_value" size="40" value="" /> + - +
getDescription() ) { ?> - Description: getDescription(); ?>
+ : getDescription(); ?>
getType() ) { ?> @@ -161,7 +172,7 @@ include 'header.php'; ?> getMaxLength() ) { ?> - Max length: getMaxLength() ); ?> characters
+ : getMaxLength() ); ?>
diff --git a/check_lang_files.php b/check_lang_files.php index 28aab12..e733ce4 100644 --- a/check_lang_files.php +++ b/check_lang_files.php @@ -1,25 +1,54 @@ - +phpldapadmin - check of translation"; -echo "

Incomplete or Erroneous Language Files

\n\n"; -include realpath( 'lang/en.php' ); +include realpath( './lang/en.php' ); $english_lang = $lang; unset( $lang ); -$lang_dir = realpath( 'lang' ); +$lang_dir = realpath( './lang' ); $dir = opendir( $lang_dir ); +// First, detect any unused strings from the english language: +echo "

Checking English language file for unused strings

\n"; +echo "
    \n"; +$unused_keys = false; + +// special case keys that do not occur hard-coded but are dynamically generated +$ignore_keys['equals'] = 1; +$ignore_keys['starts with'] = 1; +$ignore_keys['ends with'] = 1; +$ignore_keys['sounds like'] = 1; +$ignore_keys['contains'] = 1; +foreach( $english_lang as $key => $string ) { + if( isset( $ignore_keys[$key] ) ) + continue; + $grep_cmd = "grep -r \"lang\[['\\\"]$key\" *.php templates/"; + $used = `$grep_cmd`; + if( ! $used ) { + $unused_keys = true; + echo "
  1. Unused English key: $key
        (" . htmlspecialchars( $grep_cmd ) . ")
  2. \n"; + flush(); + } +} +if( false === $unused_keys ) + echo "No unused English strings."; +echo "
\n"; + +echo "

Incomplete or Erroneous Language Files

\n\n"; +flush(); while( ( $file = readdir( $dir ) ) !== false ) { + // skip the devel languages, english, and auto + if( $file == "zz.php" || $file == "zzz.php" || $file == "auto.php" || $file == "en.php" ) + continue; + // Sanity check. Is this really a PHP file? if( ! preg_match( "/\.php$/", $file ) ) continue; - if( $file == 'en.php' // is the mother of all language-files - || $file == 'auto.php' // and ignore auto.php - ) - continue; - echo "

$file

"; - echo "
    "; + echo "

    $file

    \n"; + echo "
      \n"; unset( $lang ); $lang = array(); include realpath( $lang_dir.'/'.$file ); @@ -27,16 +56,16 @@ while( ( $file = readdir( $dir ) ) !== false ) { foreach( $english_lang as $key => $string ) if( ! isset( $lang[ $key ] ) ) { $has_errors = true; - echo "
    1. missing entry: $key
    2. "; + echo "
    3. missing entry: $key
    4. \n"; } foreach( $lang as $key => $string ) if( ! isset( $english_lang[ $key ] ) ){ $has_errors = true; - echo "
    5. extra entry: $key
    6. "; + echo "
    7. extra entry: $key
    8. \n"; } if( ! $has_errors ) - echo "(No errors)"; - echo "
    "; + echo "(No errors)\n"; + echo "
\n"; } diff --git a/collapse.php b/collapse.php index 57b1f64..7d8cbb1 100644 --- a/collapse.php +++ b/collapse.php @@ -1,4 +1,6 @@ - diff --git a/copy.php b/copy.php index 9ce8834..d548915 100644 --- a/copy.php +++ b/copy.php @@ -1,4 +1,6 @@ \n"; @@ -51,7 +52,7 @@ if( $do_recursive ) { echo "\n"; echo $lang['copy_building_snapshot']; flush(); - build_tree( $source_server_id, $source_dn, $snapshot_tree ); + build_tree( $source_server_id, $source_dn, $snapshot_tree, $filter ); echo " " . $lang['success'] . "
\n"; flush(); @@ -69,8 +70,11 @@ if( $copy_result ) $edit_url="edit.php?server_id=$dest_server_id&dn=" . rawurlencode( $dest_dn ); $new_rdn = get_rdn( $dest_dn ); $container = get_container( $dest_dn ); - if( session_is_registered( 'tree' ) ) + + if( array_key_exists( 'tree', $_SESSION ) ) { + // do we not have a tree and tree icons yet? Build a new ones. + initialize_session_tree(); $tree = $_SESSION['tree']; $tree_icons = $_SESSION['tree_icons']; if( isset( $tree[$dest_server_id][$container] ) ) @@ -167,14 +171,13 @@ function copy_dn( $source_server_id, $source_dn, $dest_server_id, $dest_dn ) } } -function build_tree( $source_server_id, $root_dn, &$tree ) +function build_tree( $source_server_id, $root_dn, &$tree, $filter='(objectClass=*)' ) { - $children = get_container_contents( $source_server_id, $root_dn ); + $children = get_container_contents( $source_server_id, $root_dn, 0, $filter ); if( is_array( $children ) && count( $children ) > 0 ) { $tree[ $root_dn ] = $children; foreach( $children as $child_dn ) - build_tree( $source_server_id, $child_dn, $tree ); + build_tree( $source_server_id, $child_dn, $tree, $filter ); } - } diff --git a/copy_form.php b/copy_form.php index 2ebe9b8..4020d2a 100644 --- a/copy_form.php +++ b/copy_form.php @@ -1,4 +1,6 @@ $server ) -{ if( $server['host'] ) - { - $select_server_html .= "\n"; - } -} + $select_server_html .= "\n"; $children = get_container_contents( $server_id, $dn ); -include 'header.php'; ?> +include 'header.php'; + +// Draw some javaScrpt to enable/disable the filter field if this may be a recursive copy +if( is_array( $children ) && count( $children ) > 0 ) { ?> + +

-

Server:     :

+

:     :

:
@@ -50,7 +61,7 @@ include 'header.php'; ?> - +
- - - - - 0 ) { ?> - + + + + + + - +
: @@ -63,25 +74,37 @@ include 'header.php'; ?> :
- : + ()
:
+ + + + + +
diff --git a/create.php b/create.php index b46fa79..5fe338d 100644 --- a/create.php +++ b/create.php @@ -1,4 +1,6 @@ $val ) { if( $val == '' ) pla_error( sprintf( $lang['create_required_attribute'], htmlspecialchars( $attr ) ) ); - $new_entry[ $attr ][] = utf8_encode( $val ); + $new_entry[ $attr ][] = $val; } } @@ -45,7 +47,7 @@ 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] != '' ) { + if( isset( $_FILES['vals']['name'][$i] ) && $_FILES['vals']['name'][$i] != '' ) { // read in the data from the file $file = $_FILES['vals']['tmp_name'][$i]; $f = fopen( $file, 'r' ); @@ -56,7 +58,7 @@ if( isset( $vals ) && is_array( $vals ) ) { } } else { if( '' !== trim($val) ) - $new_entry[ $attr ][] = utf8_encode( $val ); + $new_entry[ $attr ][] = $val; } } } @@ -66,13 +68,14 @@ if( ! in_array( 'top', $new_entry['objectClass'] ) ) $new_entry['objectClass'][] = 'top'; // UTF-8 magic. Must decode the values that have been passed to us +// REMOVED ALL UTF8 Functions foreach( $new_entry as $attr => $vals ) if( ! is_attr_binary( $server_id, $attr ) ) if( is_array( $vals ) ) foreach( $vals as $i => $v ) - $new_entry[ $attr ][ $i ] = utf8_decode( $v ); + $new_entry[ $attr ][ $i ] = $v; else - $new_entry[ $attr ] = utf8_decode( $vals ); + $new_entry[ $attr ] = $vals; //echo "
"; var_dump( $new_dn );print_r( $new_entry ); echo "
"; @@ -88,9 +91,7 @@ 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 - session_start(); - if( session_is_registered( 'tree' ) ) + if( array_key_exists( 'tree', $_SESSION ) ) { $tree = $_SESSION['tree']; $tree_icons = $_SESSION['tree_icons']; @@ -115,6 +116,7 @@ if( $add_result ) and redirect to the edit_dn page --> @@ -122,7 +124,7 @@ if( $add_result ) - ... . + . - + - + - +
Server::
Template:: - - $template ) { - + $template ) { // Check and see if this template should be shown in the list $isValid = false; if (isset($template['regexp'])) { @@ -72,20 +73,17 @@ include 'header.php'; ?> - - + + -
- checked - + id="" + + checked + />
@@ -93,7 +91,7 @@ include 'header.php'; ?>
diff --git a/creation_template.php b/creation_template.php index 6a161f9..44fbb64 100644 --- a/creation_template.php +++ b/creation_template.php @@ -1,4 +1,6 @@

-

'', - using template ''

+

'', ''

' . pretty_print_dn( $dn ) . '' ) ); $ds = pla_ldap_connect( $server_id ) or pla_error( $lang['could_not_connect'] ); @@ -40,9 +43,7 @@ if( $del_result ) // kill the DN from the tree browser session variable and // refresh the tree viewer frame (left_frame) - - session_start(); - if( session_is_registered( 'tree' ) ) + if( array_key_exists( 'tree', $_SESSION ) ) { $tree = $_SESSION['tree']; if( isset( $tree[$server_id] ) && is_array( $tree[$server_id] ) ) { @@ -71,13 +72,13 @@ if( $del_result )

-
+
' .pretty_print_dn($dn) . '' ); ?>
' . pretty_print_dn( $dn ) . '' ), ldap_error( $ds ), ldap_errno( $ds ) ); } diff --git a/delete_attr.php b/delete_attr.php index c9b5773..4210352 100644 --- a/delete_attr.php +++ b/delete_attr.php @@ -1,4 +1,6 @@ - diff --git a/delete_form.php b/delete_form.php index 9fc0d28..0a88746 100644 --- a/delete_form.php +++ b/delete_form.php @@ -1,4 +1,6 @@ -0 ? true : false; @@ -31,22 +33,12 @@ include 'header.php'; ?> -

Delete

-

Server:     Distinguished Name:

- - - -
You cannot delete the base DN entry of the LDAP server.
- - - - - - +

+

:     :

-
Permanently delete all children also?

+


-

This object is the root of a sub-tree containing objects - -phpLDAPadmin can recursively delete this object and all of its children. See below for a list of DNs -that this will delete. Do you want to do this?
+

+ +()
-Note: This is potentially very dangerous and you do this at your own risk. This operation cannot be undone. -Take into consideration aliases and other such things that may cause problems. +
+ +
+
+ +

@@ -76,16 +71,16 @@ Take into consideration aliases and other such things that may cause problems. - + @@ -96,7 +91,7 @@ Take into consideration aliases and other such things that may cause problems.

-A list of all the DNs that this action will delete:
+
- + - +
-Are you sure you want to permanently delete this object?
+

-DN:
-
Server:
+:
+
:

@@ -137,7 +132,7 @@ Are you sure you want to permanently delete this object?
- + @@ -154,5 +149,3 @@ Are you sure you want to permanently delete this object?
- - diff --git a/doc/CREDITS b/doc/CREDITS index 08f3c9c..ca49c28 100644 --- a/doc/CREDITS +++ b/doc/CREDITS @@ -1,35 +1,46 @@ - +$Header: /cvsroot/phpldapadmin/phpldapadmin/doc/CREDITS,v 1.12 2004/03/25 12:50:39 uugdave Exp $ * Project Developers: - David Smith Maintainer - - Xavier Renard LDIF master - - Marius Rieder Schema master - - Nate Rotschafer Release manager + - Xavier Renard Import/Export + - Uwe Ebel I18n * 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 + - 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 + - Marius Rieder Perfected schema parser + - Nick Burch realpath() fixes for *BSD + - Matt Perlman Fix for IBM LDAP schema support + - K Yoder Predefined searches + - Piotr Tarnowski i18n fixes + - Deon George Auto-uidNumber enhancements and many fixes + - Pierre Belanger Speed-ups to auto-uidNumber * 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 - + - Marius Reider, German + Uwe Ebel, + Dieter Kluenter + - Xavier Renard French + - Dave Smith English ;) + - Richard Lucassen Dutch + - Andreu Sanchez Spanish and Català + - Dmitry Gorpinenko, Russian + Aleksey Soldatov + - Unknown Italian + - Alexandre Maciel Brasilian (Portuguese) + - Piotr Tarnowski (DrFugazi) Polish + - Gunnar Nystrom Swedish 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 index db68b62..f5d4d19 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,130 @@ +$Header: /cvsroot/phpldapadmin/phpldapadmin/doc/ChangeLog,v 1.12 2004/04/18 15:54:32 uugdave Exp $ + +* Version 0.9.4, 2004-04-XX + + * Notes: + + This release adds many new features and fixes many minor bugs. + General performance has improved, especially for handling large data + sets. Of particular note is that users can page through search results, + flag individual attributes as read-only, view in-line jpegPhotos in + search results, export DSML, all from the comfort of their own language. + phpLDAPadmin is now availble in 11 languages. + + * Changes: + - Fixed bug 936223 by adding more robust error-handling to the binary + attr viewing code. + - Improved support for Microsoft Active Direcotry + Added many new icons and logic to detect "special" Active Directory + objects. + Fixed a bug which prevented phpLDAPadmin's tree viewer from + properly browsing an Active Directory. + - Improved support for Novell eDirectory + Added many new icons and logic to detect Novell eDirectory (NDS) + entries. + - Enhanced export form + Users can specify the type of export, line ends, search scope, and more + from one handy form similar in appearance to phpMyAdmin export forms (though + more simple). As a result, I cleaned up the links at the top of the default + mod template (removed mac | win | unix links, for example). + - Cleaned up the entry browser link + It now better aligns itself with neighboring form elements. + - Fixed several E_NOTICE bugs + - Added paging to search results Search results are now paged into groups + of 50 entries and users can step through the pages like Google. This is not + only a nicety, but with large searches users may have waited for hours for + their browser to render all the entries. That problem is fixed by paging. + - DNs are pretty-printed + DNs in the tree viewer and else-where are now "syntax-highlighted". + - Faster schema surfing + You can "jump to" schema elements without rendering all other elements in + the schema browser. This is a major speed enhancement. + - Configurable: hide "Create new" + Thanks to a patch from Deon George, users can hide the "create new" link in the + tree viewer if desired. + - DSML exports + - Various XHTML fixes supplied by Uwe Ebel. + - More binary safety: + get_object_attrs() is now completely binary safe. Developers can use it to + fetch jpegPhotos and any other binary data. + - Re-order the search criteria menu + Users can re-order the search criteria drop-down box (for simple search + form) as desired from the config. + - Obfuscated passwords with **** + Users can configure PLA to display userPasswords as ****** if desired. + - Tree browser displays child counts + We found a fast solution to display child counts below each node without + having to expand the node in the tree viewer. Works great. + - "Used by" hyperlinks + The "used by" list in matching rules are now hyper-linked to attributes in + the schema viewer. + - jpegPhotos in the search results. + When a search result includes jpegPhotos, they will be displayed inline + with other attributes. Very handy for address books! + - We can draw any jpeg now + Modified the infrastrucutre to draw any jpegPhoto attribute, regardless of + its name. + - Added a groupOfNames template + For editing groupOfNames and groupOfUniqueNames + - Fixes to the entry browser + The entry browser can be clicked and closed before it's finished loading + - Read-only attributes + Users can now mark certain attributes as read-only, and PLA will refuse to + modify them (ie, objectClasses) and display them without form input fields. + - Configurable handling of aliases and referrals + Admins can configure how phpLDAPadmin should handle aliases and + referrals with fine-grained control. + - Schema caching + Network traffic between the web server and LDAP server has been reduced + drastically and user page loads should run much faster thanks to a + two-level session-based and memory-based schema cache. + - Low bandwidth mode + Users who have a slow link between their LDAP server and web server can + run phpLDAPadmin in low-bandwidth mode to discourage excessive network + traffic. + - Fixed DN explosion + A bug in PHP's LDAP API caused common segmentation faults in + ldap_explode_dn(). We have re-implemented this function in PHP and have + eliminated all segmentation faults. + - Almost complete localization + phpLDAPadmin is 100% internationalized with the exception of creation + templates, available in 11 languages. + - Added support for IBM LDAP and ISODE M-Vault LDAP servers. + - Linkable displayed DNs + When a user views an attribute that contains a DN, an arrow will appear + to the left side. When clicked, the user is taken to the referenced DN. + - Recursive copy fliters + When users copy a sub-tree, they may apply a filter to the copy such + that only entries that match the filter will be copied. + - Auto uidNumber enhancements + Admins can now specify a DN to bind with when auto-searching for the next + available uidNumber. + - Schema code cleanups + Applied object-oriented inheritance to schema items and cleaned up + access functions. No affect on end user, just a developers' itch. + - Custom creation template usability enhancements + - Fixed session bugs + If PHP is auto-starting sessions, we will not throw errors anymore. + - Added new auth_type: http + Users can now use http auth_types for form-based logins. Their + DN/password will be stored on the server in memory rather than in + a cookie on the client. + - TLS fixes + More robust coverage. If users have configured 'tls' = true in + config.php, we use TLS for all transactions with the LDAP + server. + - Error handling fixes + pla_verbose_error() is more tolerant of crappy input (ie, bad LDAP + error codes). + - Cleaned up default mod template + Editing entries is now much cleaner-looking. Buttons at the top are + in two columns. The browser doesn't have to be full-screen anymore + to edit an entry. + - Minor cosmetic fixes to custom creation template + - Added phpDoc commentary to all functions in functions.php and + schema_functions.php, and export_functions.php. This allows us to + auto-doc the code using phpDocumentor. + * Version 0.9.3, 2003-12-19 * Notes: @@ -13,18 +140,18 @@ fixes: 862225 an E_NOTICE on delete fixed 861730 (and many duplicates of it) an E_NOTICE on determining the - language in 'auto' lanuage mode for browsers who don't - set HTTP_ACCEPT_LANGUAGE (like Opera). - 861491 (and many duplicates of it) Anonymous form-based logins - often failed due to several E_NOTICE problems. - 856832 IBM LDAP servers refernece SUP attributes by OID, not name. - A patch was provided to accomodate this circumstance. - 860179 Another anonymous form-based login bug. - 858611 (lots of dups of this one) Fixed the error handler so that - it will not cause a "cannot send header information" message. - 844547 A coulpe E_NOTICE bugs in the posix group creation template. - 841816 An E_NOTICE bug during creation of an entry. - 844340 A sprintf error during login + language in 'auto' lanuage mode for browsers who don't + set HTTP_ACCEPT_LANGUAGE (like Opera). + 861491 (and many duplicates of it) Anonymous form-based logins + often failed due to several E_NOTICE problems. + 856832 IBM LDAP servers refernece SUP attributes by OID, not name. + A patch was provided to accomodate this circumstance. + 860179 Another anonymous form-based login bug. + 858611 (lots of dups of this one) Fixed the error handler so that + it will not cause a "cannot send header information" message. + 844547 A coulpe E_NOTICE bugs in the posix group creation template. + 841816 An E_NOTICE bug during creation of an entry. + 844340 A sprintf error during login - Many many more bug fixes. - The schema viewer was also streamlined. - Support work-around for IBM LDAP Server was added. diff --git a/doc/INSTALL-de.txt b/doc/INSTALL-de.txt index f7a27a2..1de071e 100644 --- a/doc/INSTALL-de.txt +++ b/doc/INSTALL-de.txt @@ -1,13 +1,18 @@ +Installationsanleitung von phpldapadmin auf Deutsch +=================================================== + +$Header: /cvsroot/phpldapadmin/phpldapadmin/doc/INSTALL-de.txt,v 1.3 2004/03/01 19:48:58 i18phpldapadmin Exp $ + 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 +installiert sind und auch funktionieren * Installation von phpLDAPadmin in vier einfachen Schritten: 1. Entpacken des Archives (wenn man diesen Text lesen kann, - dann ist das schon geschechen) + dann ist das schon geschehen) 2. Das entpackte Verzeichnis phpldapadmin sollte vom webroot aus erreicht werden 3. Kopieren der 'config.php.example' nach 'config.php' @@ -43,19 +48,21 @@ installiert und funktioniert Bitte in der Datei INSTALL unter 'Translators:' nachsehen Wer in der Uebersetzung helfen moechte sollte an der Mailingliste - phpldapadmin-devel teilnehmen. + 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 + 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' + abaendern. Weitere Sprachen sieht man im Unterverzeichnis 'lang' diff --git a/doc/INSTALL-es.txt b/doc/INSTALL-es.txt index 16e004c..6f75276 100644 --- a/doc/INSTALL-es.txt +++ b/doc/INSTALL-es.txt @@ -1,3 +1,4 @@ +$Header: /cvsroot/phpldapadmin/phpldapadmin/doc/INSTALL-es.txt,v 1.3 2004/03/19 20:22:54 i18phpldapadmin Exp $ Estas instrucciones dejan por sentado que tienes una instalación funcionando de: a. Servidor Web (Apache, IIS, etc). diff --git a/doc/INSTALL-fr.txt b/doc/INSTALL-fr.txt index 403128d..e29b1a8 100644 --- a/doc/INSTALL-fr.txt +++ b/doc/INSTALL-fr.txt @@ -1,3 +1,4 @@ +$Header: /cvsroot/phpldapadmin/phpldapadmin/doc/INSTALL-fr.txt,v 1.3 2004/03/19 20:22:54 i18phpldapadmin Exp $ 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). diff --git a/doc/README-translation.txt b/doc/README-translation.txt new file mode 100644 index 0000000..d2ab347 --- /dev/null +++ b/doc/README-translation.txt @@ -0,0 +1,103 @@ +README-translation +================== +$Header: /cvsroot/phpldapadmin/phpldapadmin/doc/README-translation.txt,v 1.2 2004/02/29 19:59:06 i18phpldapadmin Exp $ + +This readme is for translators. +phpLDAPadmin support the languages + +* en, of course +* de, german +* es, spanish +* fr, french +* it, italien +* nl, netherland +* pl, polish +* pt-br, portuguese (brazilian) +* ru, russian +* sv, swedish + + +Where are the files located? +All files are unter + + phpldapadmin/lang/ + + +How are the files named? + +Every language is named by its local representing. For example english en and +british english by en_GB but here we use only en. + + +Is the location phpldapadmin/lang/ used in the application? + +No, there is a Makefile in phpldapadmin/lang/ that converts the +native encoding of the language file to utf8 into the directory +phpldapadmin/lang/recoded. For example the file +phpldapadmin/lang/de.php is converted via the programm iconv to the +the encoding utf8 to the file phpldapadmin/lang/recoded/de.php. + + +Is there a rule for the form of the translation? + +* Yes, all translation is stored in an array called lang[]. +* The "mother" of all translation is english (en.php). +* Use your native encoding like iso8859-1 for european + or iso8859-2 for polish. +* Every translation is in single quote "'" +* Don't use html-code in the translation. +* If something should be highlighted we use double quote + '"'. + +Why shouldn't I use html-code? + +* No problemens wich htmlspecialchars +* No JavaScript problems +* Open way for other targets like xml or other (only as a idea) +* No problem with "wellformed" output (maybe) + +For example the ">" is then convert to "&gt;" that we don't +want, so it is better to use ">". If we have a Char like "&" that is +in the used functions convert to "&" what is correct. + +How could I start? +* First, the base for translation is the cvs-Version. + Checkout the cvs-Version and start your translation. +* Create a file that contains your translation. + For me the easiest way was to copy the file phpldapadmin/lang/en.php + to the phpldapadmin/lang/[new-langage].php + That gives the way to put the "original" translation to the "end" + as a comment. Look at the de.php and you know what I mean. +* Modify the Makefile that your langugage is also convert. + +How could I see how complete the translation is? +The phpLDAPadmin contains the file phpldapadmin/check_lang_files.php +Open it in your browser and you see how complete your translation is. + +* extra entry: if entry is not in the en.php, maybe the value was + changed in en.php or you type in a wrong key. +* missing entry: the entry is missing in the translated langugage + +What is zz.php and the zzz.php in the phpldapadmin/lang/? +Well that is not really a language. That is only for developers +and translators. + +The zz.php replace all characters in the lang[] to Z. That helps +in finding hardcoding translation in the the source. + +The ZZZ.php helps you to find the used "key". + +How could I enable the zz and zzz language? +Well, one is to hardcode it in the config.php file. That is not the +best way - but the way that always works. + +Mozilla Users do like this: + * from Menu + Edit->Preferences + * Option Navigator->Lanugages + Klick the button "add" and type into "Other" the + language "zz" + * With Move up / Move down you can change your priority. + * With the Button "OK" you can activate your choice. + +Do the same if you want to activate/test your translation. \ No newline at end of file diff --git a/doc/ROADMAP b/doc/ROADMAP index 51dc23b..aae71e1 100644 --- a/doc/ROADMAP +++ b/doc/ROADMAP @@ -1,3 +1,4 @@ +$Header: /cvsroot/phpldapadmin/phpldapadmin/doc/ROADMAP,v 1.19 2004/03/25 12:50:39 uugdave Exp $ phpLDAPadmin roadmap 0.9.3 planned features: @@ -7,31 +8,49 @@ phpLDAPadmin roadmap Move template config to a new config file: template_config.php (or something) 0.9.4 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) + * Complete i18n. All strings localized. + Modification templates: + * gropOfNames (view full DNs and browse buttons) + * groupOfUniqueNames (view full DNs and browse buttons) + * http auth_type (a la phpMyAdmin) + * read-only attributes (similar to hidden attributes) in config + * Default mod template: Add a "browse" button for attributes that store DNs. + caveat: We don't have a way to reference form elements with "[]" in the name, causing a proble + with our default mod template. The "browser" button is present, but cannot populate the form + element. + * Add output buffering when including lang files so no output is sent to the browser (which could cause problems for sessions and cookies) + * Paging search results. + * Anonymous binds redirect to search page with no tree viewer (as an option in config) + * pretty-printed DNs + * DSML exports + * obfuscated password display + * more linkage in the schema browser (used by links) + * jpegs drawn in-line in searches + * configurable read-only attributes + * paging in search results (ie, viewing entries 1-50 of 436) + * Configuration for templates. + +0.9.5 planned features: + Maybe create a class called Config with static functions for fetching configuration data (ie, Config::isServerReadOnly()). + or: Object-oriented server and general configuration (ie, add a class Server) + Support and test ActiveDirectory and iMail LDAP schema. + Add link to objectClass values in default mod template to jump to that objectClass in the schema viewer. + Make deref param modifiable in the advanced search form (LDAP_DEREF_ALWAYS, LDAP_DEREF_NEVER, etc.) + Better handling of aliases and referals (display the actual alias with aliasedObjectName or ref attrs, and don't follow or perhaps make it configurable like ldapsearch) + Remove all HTML from language files. + Add a random hint on the welcome page + Add blowfish encryption to encrypt cookie-stored passwords and DNs. + Support for modifying replica entries (using ldap_set_rebind_proc()) Modification templates user oragnizationalUnit - posixGroup (view full DNs and browse buttons) sambaUser (v 2 and 3) sambaMachine - 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) - Remove all HTML from language files. - -0.9.5 planned features: + Search filter builder for simple search form (just select AND or OR for a group of criteria) + 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) + i18n localization of all creation templates 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. - Object Oriented migration for server and general configuration (ie, add a class Server) + Serious compatibility testing for additional LDAP servers. + +(* means an item is complete and checed into CVS) diff --git a/doc/pla-test-i18n.ldif b/doc/pla-test-i18n.ldif new file mode 100644 index 0000000..b094593 --- /dev/null +++ b/doc/pla-test-i18n.ldif @@ -0,0 +1,67 @@ +# $Header: /cvsroot/phpldapadmin/phpldapadmin/doc/pla-test-i18n.ldif,v 1.4 2004/03/19 20:22:54 i18phpldapadmin Exp $ +# This is a Test-File for characters / encoding +# 1. Change the +# ,dc=example,dc=com +# to avalue for your organisation +# 2. Import it with phpldapadmin +# +# pla-i18n, example.com +# +dn: ou=pla-i18n,dc=example,dc=com +ou: pla-i18n +objectClass: top +objectClass: organizationalUnit + +# pl, pla-i18n, example.com +dn: ou=pl,ou=pla-i18n,dc=example,dc=com +description:: IGRvcMOza2k= +description:: xITFu8WaxbnEhsWDxYHDk8SYIMSFxbzFm8W6xIfFhMWCw7PEmQ== +description:: V3NrYXrDs3drYQ== +objectClass: top +objectClass: organizationalUnit +ou: pl + +# ru, pla-i18n, example.com +dn: ou=ru,ou=pla-i18n,dc=example,dc=com +description:: 0LfQstGD0YfQuNGCINC/0L7QtNC+0LHQvdC+ +description:: 0J/RgNC+0YHRgtCw0Y8g0YTQvtGA0LzQsCDQv9C+0LjRgdC6 +objectClass: top +objectClass: organizationalUnit +ou: ru + +# jp, pla-i18n, example.com +dn: ou=jp,ou=pla-i18n,dc=example,dc=com +ou: jp +objectClass: top +objectClass: organizationalUnit +description:: SVNPLTIwMjItSlDjga7lpJrlm73nsY3oqIDoqp7jgbjjga7mi6HlvLXmgKc= + +# pt-br, pla-i18n, example.com +dn: ou=pt-br,ou=pla-i18n,dc=example,dc=com +ou: pt-br +objectClass: top +objectClass: organizationalUnit +description:: VmVyIGFzIHJlcXVpc2nDp8O1ZXMgZW0gYWJlcnRv + +# de, pla-i18n, example.com +dn: ou=de,ou=pla-i18n,dc=example,dc=com +ou: de +objectClass: top +objectClass: organizationalUnit +description:: U29uZGVyemVpY2hlbiDDtsOkw7zDnyDDlsOEw5w= +description:: w5bDliDDnMOcIMOEw4Q= + +# sv, pla-i18n, example.com +dn: ou=sv,ou=pla-i18n,dc=example,dc=com +ou: sv +objectClass: top +objectClass: organizationalUnit +description:: U8O2a29tZsOlbmc= +description:: bMOldGVyIHNvbQ== + +# ca, pla-i18n, example.com +dn: ou=ca,ou=pla-i18n,dc=example,dc=com +ou: ca +objectClass: top +objectClass: organizationalUnit +description:: RXMgdGluZHLDoSBxdWUgY29uZmlybWFyIGFxdWVzdGEgZGVjaXNpw7M= diff --git a/documentation.php b/documentation.php index e6f5624..9b1e640 100644 --- a/documentation.php +++ b/documentation.php @@ -1,4 +1,6 @@ - + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + ******************************************************************************/ + +/******************************************************************************/ +/* Do we have builtin mhash support in this PHP version ? */ +/******************************************************************************/ + +if( ! function_exists( 'mhash' ) && ! function_exists( 'mhash_keygen_s2k' ) ) { + if( ! isset( $emuhash_openssl ) ) + $emuhash_openssl = '/usr/bin/openssl'; + + // don't create mhash functions if we don't have a working openssl + if ( ! is_executable( $emuhash_openssl ) ) { + unset( $emuhash_openssl ); + } else { + + if( ! isset( $emuhash_temp_dir ) ) + $emuhash_temp_dir = '/tmp'; + +/******************************************************************************/ +/* Define constants used in the mhash emulation code. */ +/******************************************************************************/ + +define('MHASH_MD5', 'md5'); +define('MHASH_SHA1', 'sha1'); +define('MHASH_RIPEMD160', 'rmd160'); + +/******************************************************************************/ +/* Functions to emulate parts of php-mash. */ +/******************************************************************************/ + +function openssl_hash( $openssl_hash_id, $password_clear ) { + global $emuhash_openssl, $emuhash_temp_dir; + + $current_magic_quotes = get_magic_quotes_runtime(); + set_magic_quotes_runtime( 0 ); + $tmpfile = tempnam( $emuhash_temp_dir, "emuhash" ); + $pwhandle = fopen( $tmpfile, "w" ); + fwrite( $pwhandle, $password_clear ); + fclose( $pwhandle ); + $cmd = $emuhash_openssl . ' ' . $openssl_hash_id . ' -binary < ' . $tmpfile; + $prog = popen( $cmd, "r" ); + $pass = fread( $prog, 1024 ); + pclose( $prog ); + unlink( $tmpfile ); + set_magic_quotes_runtime( $current_magic_quotes ); + + return $pass; +} + +function mhash( $hash_id, $password_clear ) { + switch( $hash_id ) { + case MHASH_MD5: + $emuhash = openssl_hash( MHASH_MD5, $password_clear ); + break; + case MHASH_SHA1: + $emuhash = openssl_hash( MHASH_SHA1, $password_clear ); + break; + case MHASH_RIPEMD160: + $emuhash = openssl_hash( MHASH_RIPEMD160, $password_clear ); + break; + default: + $emuhash = FALSE; + } + + return $emuhash; +} + +function mhash_keygen_s2k( $hash_id, $password_clear, $salt, $bytes ) { + return substr(pack("H*", bin2hex(mhash($hash_id, ($salt . $password_clear)))), 0, $bytes); +} + +/******************************************************************************/ + + } + +} + +?> diff --git a/entry_chooser.js b/entry_chooser.js index 4f0aeca..b9529bf 100644 --- a/entry_chooser.js +++ b/entry_chooser.js @@ -1,3 +1,4 @@ +// $Header: /cvsroot/phpldapadmin/phpldapadmin/entry_chooser.js,v 1.2 2004/03/19 20:18:41 i18phpldapadmin Exp $ function dnChooserPopup( form_element ) { mywindow=open('entry_chooser.php','myname','resizable=no,width=600,height=370,scrollbars=1'); diff --git a/entry_chooser.php b/entry_chooser.php index 8ad6851..b8572a6 100644 --- a/entry_chooser.php +++ b/entry_chooser.php @@ -1,4 +1,6 @@ Automagic Entry Chooser\n"; +echo "

" . $lang['entry_chooser_title'] . "

\n"; +flush(); +?> + + + +" . htmlspecialchars( $servers[ $server_id ][ 'name' ] ) . "
\n"; @@ -21,14 +35,14 @@ if( $server_id !== false && $container !== false ) 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 ); + $dn_list = get_container_contents( $server_id, $container, 0, '(objectClass=*)', get_tree_deref_setting() ); sort( $dn_list ); $base_dn = $servers[ $server_id ][ 'base' ]; if( ! $base_dn ) $base_dn = try_to_get_root_dn( $server_id ); - if( $container == $base_dn ) { + if( 0 == pla_compare_dns( $container, $base_dn ) ) { $parent_container = false; $up_href = "entry_chooser.php?form_element=$return_form_element"; } else { @@ -87,11 +101,3 @@ $elmpart =substr($return_form_element,strpos($return_form_element,".")+1); $return_form_element = $formpart . ".elements[\"" . $elmpart . "\"]"; ?> - - diff --git a/expand.php b/expand.php index 19c41a5..2984c2c 100644 --- a/expand.php +++ b/expand.php @@ -1,4 +1,6 @@ "; //var_dump( $contents ); //exit; -usort( $contents, 'pla_compare_dns' ); -$tree[$server_id][$dn] = $contents; - foreach( $contents as $dn ) $tree_icons[$server_id][$dn] = get_icon( $server_id, $dn ); @@ -62,8 +63,8 @@ $random_junk = md5( strtotime( 'now' ) . $time['usec'] ); // If cookies were disabled, build the url parameter for the session id. // It will be append to the url to be redirect $id_session_param=""; -if(SID != ""){ - $id_session_param = "&".session_name()."=".session_id(); +if( SID != "" ){ + $id_session_param = "&".session_name()."=".session_id(); } session_write_close(); diff --git a/export.php b/export.php new file mode 100755 index 0000000..25c8f1c --- /dev/null +++ b/export.php @@ -0,0 +1,76 @@ +pla_close(); + pla_error( $lang['no_exporter_found'] ); +} + +// set the CLRN +$exporter->setOutputFormat($br); + +// prevent script from bailing early for long search +@set_time_limit( 0 ); + +// send the header +header( "Content-type: application/download" ); +header( "Content-Disposition: filename=$friendly_rdn.".$exporters[$exporter_id]['extension'] ); +header( "Expires: Mon, 26 Jul 1997 05:00:00 GMT" ); +header( "Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT" ); +header( "Cache-Control: post-check=0, pre-check=0", false ); + +// and export +$exporter->export(); +?> diff --git a/export_form.php b/export_form.php new file mode 100755 index 0000000..a167556 --- /dev/null +++ b/export_form.php @@ -0,0 +1,110 @@ + 'UNIX', + 'mac' => 'Macintosh', + 'win' => 'Windows' +); + +$available_scopes = array( + 'base' => $lang['scope_base'], + 'one' => $lang['scope_one'], + 'sub' => $lang['scope_sub'] +); + + +include 'header.php'; ?> + + +

+
+
+
+
- + - +
+ + + + + + + + + + + + + + + +
+
+ + + + + + + + + + +
+ +
DN
+
+
+
+ + $exporter){?> + /> +
+ +
+
+
+ + $desc ) { + $id = htmlspecialchars( $id ); + $desc = htmlspecialchars( $desc ); + ?> + />
+ +
+
+
+ + $desc ) { + $id = htmlspecialchars( $id ); + $desc = htmlspecialchars( $desc ); ?> + />
+ +
+
+ + + + diff --git a/export_functions.php b/export_functions.php new file mode 100755 index 0000000..fda2e95 --- /dev/null +++ b/export_functions.php @@ -0,0 +1,628 @@ +'ldif', + 'desc' => 'LDIF', + 'extension' => 'ldif' + ); + +$exporters[] = array('output_type'=>'dsml', + 'desc' => 'DSML V.1', + 'extension' => 'xml' + ); + + +/** + * This class encapsulate informations about the ldap server + * from which the export is done. + * The following info are provided within this class: + * + * $server_id: the id of the server. + * $base_dn: if the source of the export is the ldap server, + * it indicates the base dn of the search. + * $query_filter: if the source of the export is the ldap server, + * it indicates the query filter for the search. + * $scope: if the source of the export is the ldap server, + * it indicates the scope of the search. + * $server_host: the host name of the server. + * $server_name: the name of the server. + */ + +class LdapInfo{ + + var $base_dn; + var $query_filter; + var $scope; + var $server_host = NULL; + var $server_name = NULL; + var $server_id = NULL; + + /** + * Create a new LdapInfo object + * + * @param int $server_id the server id + * @param String $base_dn the base_dn for the search in a ldap server + * @param String $query_filter the query filter for the search + * @param String scope the scope of the search in a ldap server + */ + + function LdapInfo($server_id,$base_dn = NULL,$query_filter = NULL,$scope = NULL){ + global $servers; + $this->base_dn = $base_dn; + $this->query_filter = $query_filter; + $this->scope = $scope; + $this->server_name = $servers[ $server_id ][ 'name' ]; + $this->server_host = $servers[ $server_id ][ 'host' ]; + $this->server_id = $server_id; + } +} + + +/** + * This class represents the base class of all exporters + * It can be subclassed directly if your intend is to write + * a source exporter(ie. it will act only as a decoree + * which will be wrapped by an another exporter.) + * If you consider writting an exporter for filtering data + * or directly display entries, please consider subclass + * the PlaExporter + * + * @see PlaExporter + */ + +class PlaAbstractExporter{ + + /** + * Return the number of entries + * @return int the number of entries to be exported + */ + function pla_num_entries(){} + + /** + * Return true if there is some more entries to be processed + * @return bool if there is some more entries to be processed + */ + function pla_has_entry(){} + + /** + * Return the entry as an array + * @return array an entry as an array + */ + function pla_fetch_entry_array(){} + + /** + * Return the entry as an Entry object + * @return Entry an entry as an Entry Object + */ + function pla_fetch_entry_object(){} + + /** + * Return a PlaLdapInfo Object + * @return LdapInfo Object with info from the ldap serveur + */ + function pla_get_ldap_info(){} + + /** + * May be call when the processing is finished + * and to free some ressources. + * @return bool true or false if any errors is encountered + */ + function pla_close(){} + +}// end PlaAbstractExporter + + + +/** + * PlaExporter acts a wrapper around another exporter. + * In other words, it will act as a decorator for another decorator + */ + +class PlaExporter extends PlaAbstractExporter{ + // the default CRLN + var $br="\n"; + // the wrapped $exporter + var $exporter; + + /** + * Constructor + * @param source $source the decoree for this exporter + */ + function PlaExporter( $source ){ + $this->exporter = $source; + } + + /** + * Return the number of entries + * @return int the number of entries to be exported + */ + function pla_num_entries(){ + return $this->exporter->pla_num_entries(); + } + + /** + * Return true if there is some more entries to be processed + * @return bool if there is some more entries to be processed + */ + function pla_has_entry(){ + return $this->exporter->pla_has_entry(); + } + + /** + * Return the entry as an array + * @return array an entry as an array + */ + function pla_fetch_entry_array(){ + return $this->exporter->pla_fetch_entry_array(); + } + + /** + * Return the entry as an Entry object + * @return Entry an entry as an Entry Object + */ + function pla_fetch_entry_object(){ + return $this->exporter->pla_fetch_entry_object(); + } + + /** + * Return a PlaLdapInfo Object + * @return LdapInfo Object with info from the ldap serveur + */ + function pla_get_ldap_info(){ + return $this->exporter->pla_get_ldap_info(); + } + + /** + * May be call when the processing is finished + * and to free some ressources. + * @return bool false if any errors are encountered,false otherwise + */ + function pla_close(){ + return $this->exporter->pla_close(); + } + + /** + * Helper method to check if the attribute value should be base 64 encoded. + * @param String $str the string to check. + * @return bool true if the string is safe ascii, false otherwise. + */ + function is_safe_ascii( $str ){ + for( $i=0; $i 127 ) + return false; + return true; + } + + /** + * Abstract method use to export data. + * Must be implemented in a sub-class if you write an exporter + * which export data. + * Leave it empty if you write a sub-class which do only some filtering. + */ + function export(){} + + /** + * Set the carriage return /linefeed for the export + * @param String $br the CRLF to be set + */ + function setOutputFormat( $br ){ + $this->br = $br; + } + +}// end PlaExporter + + +/** + * Export data from a ldap server + * @extends PlaAbstractExporter + */ + +class PlaLdapExporter extends PlaAbstractExporter{ + var $entry_id; + var $results; + var $entry_id; + var $server_id ; + var $scope; + var $entry_array; + var $num_entries; + var $ldap_info; + var $queryFilter; + var $hasNext; + var $connection_open_state; + + /** + * Create a PlaLdapExporter object. + * @param int $server_id the server id + * @param String $queryFilter the queryFilter for the export + * @param String $base_dn the base_dn for the data to export + * @param String $scope the scope for export + */ + function PlaLdapExporter( $server_id , $queryFilter , $base_dn , $scope){ + global $lang; + $this->scope = $scope; + $this->base_dn = $base_dn; + $this->server_id = $server_id; + $this->queryFilter = $queryFilter; + // infos for the server + $this->ldap_info = new LdapInfo($server_id,$base_dn,$queryFilter,$scope); + // boolean to check if there is more entries + $this->hasNext = 0; + // boolean to check the state of the connection + $this->connection_open_state = 0; + + // connect to the server + $this->ds = @pla_ldap_connect( $this->server_id ); + if( ! $this->ds ) { + pla_error( $lang['could_not_connect'] ); + } + else{ + $this->connection_open_state = 1; + } + + // get the data to be exported + if( $this->scope == 'base' ) + $this->results = @ldap_read( $this->ds, $this->base_dn, $this->queryFilter,array(), + 0, 0, 0, get_export_deref_setting() ); + elseif( $this->scope == 'one' ) + $this->results = @ldap_list( $this->ds, $this->base_dn, $this->queryFilter, array(), + 0, 0, 0, get_export_deref_setting() ); + else // scope == 'sub' + $this->results = @ldap_search( $this->ds, $this->base_dn, $this->queryFilter, array(), + 0, 0, 0, get_export_deref_setting() ); + + // if no result, there is a something wrong + if( ! $this->results ) + pla_error( $lang['error_performing_search'], ldap_error( $this->ds ), ldap_errno( $this->ds ) ); + + // get the number of entries to be exported + $this->num_entries = @ldap_count_entries( $this->ds,$this->results ); + + if( $this->entry_id = @ldap_first_entry( $this->ds,$this->results ) ){ + $this->hasNext = 1; + } + }//end constructor + + /** + * Return the entry as an array + * @return array an entry as an array + */ + function pla_fetch_entry_array(){ + return $this->entry_array; + } + + /** + * Return the entry as an Entry object + * @return Entry an entry as an Entry Object + */ + function pla_fetch_entry_object(){ + // to do + } + + /** + * Return a PlaLdapInfo Object + * @return LdapInfo Object with info from the ldap serveur + */ + function pla_get_ldap_info(){ + return $this->ldap_info; + } + + /** + * Return the number of entries + * @return int the number of entries to be exported + */ + function pla_num_entries(){ + return $this->num_entries; + } + + /** + * Return true if there is some more entries to be processed + * @return bool if there is some more entries to be processed + */ + function pla_has_entry(){ + if( $this->hasNext ){ + unset( $this->entry_array ); + $dn = @ldap_get_dn( $this->ds,$this->entry_id ); + $this->entry_array['dn'] = $dn; + + //get the attributes of the entry + $attrs = @ldap_get_attributes($this->ds,$this->entry_id); + if( $attr = @ldap_first_attribute( $this->ds,$this->entry_id,$attrs ) ){ + + //iterate over the attributes + while( $attr ){ + if( is_attr_binary( $this->server_id,$attr ) ){ + $this->entry_array[$attr] = @ldap_get_values_len( $this->ds,$this->entry_id,$attr ); + } + else{ + $this->entry_array[$attr] = @ldap_get_values( $this->ds,$this->entry_id,$attr ); + } + unset( $this->entry_array[$attr]['count'] ); + $attr = @ldap_next_attribute( $this->ds,$this->entry_id,$attrs ); + }// end while attr + + if(!$this->entry_id = @ldap_next_entry( $this->ds,$this->entry_id ) ){ + $this->hasNext = 0; + } + }// end if attr + return true; + } + else{ + $this->pla_close(); + return false; + } + } + + /** + * May be call when the processing is finished + * and to free some ressources. + * @return bool true or false if any errors is encountered + */ + function pla_close(){ + if($this->connection_open_state){ + return @ldap_close( $this->ds ); + } + else{ + return true; + } + } +} // end PlaLdapExporter + +/** + * Export entries to ldif format + * @extends PlaExporter + */ + +class PlaLdifExporter extends PlaExporter{ + + // variable to keep the count of the entries + var $counter = 0; + + // the maximum length of the ldif line + var $MAX_LDIF_LINE_LENGTH = 76; + + /** + * Create a PlaLdifExporter object + * @param PlaAbstractExporter $exporter the source exporter + */ + function PlaLdifExporter( $exporter ){ + $this->exporter = $exporter; + } + + /** + * Export entries to ldif format + */ + function export(){ + $pla_ldap_info = $this->pla_get_ldap_info(); + $this->displayExportInfo($pla_ldap_info); + + //While there is an entry, fecth the entry as an array + while($this->pla_has_entry()){ + $entry = $this->pla_fetch_entry_array(); + $this->counter++; + + // display comment before each entry + global $lang; + $title_string = "# " . $lang['entry'] . " " . $this->counter . ": " . $entry['dn'] ; + if( strlen( $title_string ) > $this->MAX_LDIF_LINE_LENGTH-3 ) + $title_string = substr( $title_string, 0, $this->MAX_LDIF_LINE_LENGTH-3 ) . "..."; + echo "$title_string$this->br"; + + // display dn + if( $this->is_safe_ascii( $entry['dn'] )) + $this->multi_lines_display("dn:". $entry['dn']); + else + $this->multi_lines_display("dn:: " . base64_encode( $entry['dn'] )); + array_shift($entry); + + // display the attributes + foreach( $entry as $key => $attr ){ + foreach( $attr as $value ){ + if( !$this->is_safe_ascii($value) || is_attr_binary($pla_ldap_info->server_id,$key ) ){ + $this->multi_lines_display( $key.":: " . base64_encode( $value ) ); + } + else{ + $this->multi_lines_display( $key.": ".$value ); + } + } + }// end foreach $entry + + echo $this->br; + // flush every 5th entry (sppeds things up a bit) + if( 0 == $this->counter % 5 ) + flush(); + } + } + + // display info related to this export + function displayExportInfo($pla_ldap_info){ + global $lang; + echo "version: 1$this->br$this->br"; + echo "# " . sprintf( $lang['ldif_export_for_dn'], $pla_ldap_info->base_dn ) . $this->br; + echo "# " . sprintf( $lang['generated_on_date'], date("F j, Y g:i a") ) . $this->br; + echo "# " . $lang['server'] . ": " .$pla_ldap_info->server_name . " (" . $pla_ldap_info->server_host . ")" . $this->br; + echo "# " . $lang['search_scope'] . ": " . $pla_ldap_info->scope . $this->br; + echo "# " . $lang['total_entries'] . ": " . $this->pla_num_entries() . $this->br; + echo $this->br; + } + + /** + * Helper method to wrap ldif lines + * @param String $str the line to be wrapped if needed. + */ + function multi_lines_display( $str ){ + + $length_string = strlen($str); + $max_length = $this->MAX_LDIF_LINE_LENGTH; + + while ($length_string > $max_length){ + echo substr($str,0,$max_length).$this->br." "; + $str= substr($str,$max_length,$length_string); + $length_string = strlen($str); + + // need to do minus one to align on the right + // the first line with the possible following lines + // as these will have an extra space + $max_length = $this->MAX_LDIF_LINE_LENGTH-1; + } + echo $str."".$this->br; + } + +} + +/** + * Export entries to DSML v.1 + * @extends PlaExporter + */ + +class PlaDsmlExporter extends PlaExporter{ + + //not in use + var $indent_step = 2; + var $counter = 0; + + /** + * Create a PlaDsmlExporter object + * @param PlaAbstractExporter $exporter the decoree exporter + */ + function PlaDsmlExporter( $exporter ){ + $this->exporter = $exporter; + } + + /** + * Export the entries to DSML + */ + function export(){ + global $lang; + $pla_ldap_info = $this->pla_get_ldap_info(); + // not very elegant, but do the job for the moment as we have just 4 level + $directory_entries_indent = " "; + $entry_indent= " "; + $attr_indent = " "; + $attr_value_indent = " "; + + // print declaration + echo "$this->br"; + + // print root element + echo "$this->br"; + + // print info related to this export + echo "" . $this->br; + + + echo $directory_entries_indent."$this->br"; + //While there is an entry, fetch the entry as an array + while($this->pla_has_entry()){ + $entry = $this->pla_fetch_entry_array(); + $this->counter++; + // display dn + echo $entry_indent."".$this->br; + array_shift($entry); + + // echo the objectclass attributes first + if(isset($entry['objectClass'])){ + echo $attr_indent."".$this->br; + foreach($entry['objectClass'] as $ocValue){ + echo $attr_value_indent."$ocValue".$this->br; + } + echo $attr_indent."".$this->br; + unset($entry['objectClass']); + } + + $binary_mode = 0; + // display the attributes + foreach($entry as $key=>$attr){ + echo $attr_indent."".$this->br; + + // if the attribute is binary, set the flag $binary_mode to true + $binary_mode = is_attr_binary($pla_ldap_info->server_id,$key)?1:0; + + foreach($attr as $value){ + echo $attr_value_indent."".($binary_mode?base64_encode( $value): htmlspecialchars( $value ) )."".$this->br; + } + echo $attr_indent."".$this->br; + }// end foreach $entry + echo $entry_indent."".$this->br; + + // flush every 5th entry (speeds things up a bit) + if( 0 == $this->counter % 5 ) + flush(); + } + echo $directory_entries_indent."$this->br"; + echo "".$this->br; + } +} + + +class MyCustomExporter{ + + function MyCutsomExporter($exporter){ + $this->exporter = $exporer; + } + + /** + * When doing an exporter, the method export need to be overriden. + * A basic implementation is provided here. Customize to your need + **/ + + + function export(){ + + // With the method pla->get_ldap_info, + // you have access to some values related + // to you ldap server + $ldap_info = $this->pla_get_ldap_info(); + $base_dn = $ldap_info->base_dn; + $server_id = $ldap_info->server_id; + $scope = $ldap_info->scope; + $server_name = $ldap_info->server_name; + $server_host = $ldap_info->server_host; + + + // Just a simple loop. For each entry + // do your custom export + // see PlaLdifExporter or PlaDsmlExporter as an example + while( $this->pla_has_entry() ){ + $entry = $this->pla_fetch_entry_array(); + + //fetch the dn + $dn = $entry['dn']; + unset( $entry['dn'] ); + + // loop for the attributes + foreach( $entry as $attr_name=>$attr_values ){ + foreach( $attr_values as $value ){ + + // simple example + // echo "Attribute Name:".$attr_name; + // echo " - value:".$value; + // echo $this->br; + } + } + + }// end while + } + +} +?> diff --git a/functions.php b/functions.php index 51ead3a..5f63e85 100644 --- a/functions.php +++ b/functions.php @@ -1,31 +1,274 @@ + * if( is_muli_line_attr( "postalAddress" ) ) + * echo ""; + * else + * echo ""; + * + * + * @param string $attr_name The name of the attribute of interestd (case insensivite) + * @param string $val (optional) The current value of the attribute (speeds up the + * process by searching for carriage returns already in the attribute value) + * @param int $server_id (optional) The ID of the server of interest. If specified, + * is_multi_line_attr() will read the schema from the server to determine if + * the attr is multi-line capable. (note that schema reads can be expensive, + * but that impact is lessened due to PLA's new caching mechanism) + * @return bool + */ +function is_multi_line_attr( $attr_name, $val=null, $server_id=null ) { - global $servers; - if( isset( $servers[$server_id]['login_attr'] ) && - 0 != strcasecmp( $servers[$server_id]['login_attr'], "dn" ) && - $servers[$server_id]['login_attr'] != "" ) + // First, check the optional val param for a \n or a \r + if( null != $val && + ( false !== strpos( $val, "\n" ) || + false !== strpos( $val, "\r" ) ) ) + return true; + + // Next, compare strictly by name first + global $multi_line_attributes; + if( isset( $multi_line_attributes ) && is_array( $multi_line_attributes ) ) + foreach( $multi_line_attributes as $multi_line_attr_name ) + if( 0 == strcasecmp( $multi_line_attr_name, $attr_name ) ) + return true; + + // If unfound, compare by syntax OID + if( null !== $server_id ) { + global $multi_line_syntax_oids; + if( isset( $multi_line_syntax_oids ) && is_array( $multi_line_syntax_oids ) ) { + $schema_attr = get_schema_attribute( $server_id, $attr_name ); + if( ! $schema_attr ) + return false; + $syntax_oid = $schema_attr->getSyntaxOID(); + if( ! $syntax_oid ) + return false; + foreach( $multi_line_syntax_oids as $multi_line_syntax_oid ) + if( $multi_line_syntax_oid == $syntax_oid ) + return true; + } + } + + return false; + +} + +/** + * Fetches the user setting for $search_deref from config.php. The returned value + * will be one of the four LDAP_DEREF_* constancts defined by the PHP LDAP API. If + * the user has failed to configure this setting or configured an inappropriate + * value, the constant DEFAULT_SEARCH_DEREF_SETTING is returned. + * + * @see DEFAULT_SEARCH_DEREF_SETTING + * @see is_valid_deref_setting() + * @return int + */ +function get_search_deref_setting() +{ + global $search_deref; + if( ! isset( $search_deref ) || ! is_valid_deref_setting( $search_deref ) ) + return DEFAULT_SEARCH_DEREF_SETTING; + else + return $search_deref; +} + +/** + * Fetches the user setting for $tree_deref from config.php. The returned value + * will be one of the four LDAP_DEREF_* constancts defined by the PHP LDAP API. If + * the user has failed to configure this setting or configured an inappropriate + * value, the constant DEFAULT_TREE_DEREF_SETTING is returned. + * + * @see DEFAULT_TREE_DEREF_SETTING + * @see is_valid_deref_setting() + * @return int + */ +function get_tree_deref_setting() +{ + global $tree_deref; + if( ! isset( $tree_deref ) || ! is_valid_deref_setting( $tree_deref ) ) + return DEFAULT_TREE_DEREF_SETTING; + else + return $tree_deref; +} + +/** + * Fetches the user setting for $export_deref from config.php. The returned value + * will be one of the four LDAP_DEREF_* constancts defined by the PHP LDAP API. If + * the user has failed to configure this setting or configured an inappropriate + * value, the constant DEFAULT_EXPORT_DEREF_SETTING is returned. + * + * @see DEFAULT_EXPORT_DEREF_SETTING + * @see is_valid_deref_setting() + * @return int + */ +function get_export_deref_setting() +{ + global $export_deref; + if( ! isset( $export_deref ) || ! is_valid_deref_setting( $export_deref ) ) + return DEFAULT_EXPORT_DEREF_SETTING; + else + return $export_deref; +} + +/** + * Fetches the user setting for $view_deref from config.php. The returned value + * will be one of the four LDAP_DEREF_* constancts defined by the PHP LDAP API. If + * the user has failed to configure this setting or configured an inappropriate + * value, the constant DEFAULT_VIEW_DEREF_SETTING is returned. + * + * @see DEFAULT_VIEW_DEREF_SETTING + * @see is_valid_deref_setting() + * @return int + */ +function get_view_deref_setting() +{ + global $view_deref; + if( ! isset( $view_deref ) || ! is_valid_deref_setting( $view_deref ) ) + return DEFAULT_VIEW_DEREF_SETTING; + else + return $view_deref; +} + +/** + * Checks the user-configured parameter for sanity. For the various *_deref settings, users + * may only use one of LDAP_DEREF_NEVER, LDAP_DEREF_SEARCHING, LDAP_DEREF_FINDING, or + * LDAP_DEREF_ALWAYS. This function can be used to conveniently enforce this. + * + * @param int $deref_setting The deref setting to validate. + * @return bool + */ +function is_valid_deref_setting( $deref_setting ) +{ + if( $deref_setting == LDAP_DEREF_NEVER || + $deref_setting == LDAP_DEREF_SEARCHING || + $deref_setting == LDAP_DEREF_FINDING || + $deref_setting == LDAP_DEREF_ALWAYS ) + return true; + else + return false; + +} + +/** + * Fetch whether the user has configured a certain server as "low bandwidth". Users may + * choose to configure a server as "low bandwidth" in config.php thus: + * + * $servers[$i]['low_bandwidth'] = true; + * + * @param int $server_id The ID of the server of interest from config.php. + * @return bool + */ +function is_server_low_bandwidth( $server_id ) +{ + global $servers; + if( isset( $servers[$server_id]['low_bandwidth'] ) && true == $servers[$server_id]['low_bandwidth'] ) + return true; + else + return false; +} + +/** + * Fetches whether TLS has been configured for use with a certain server. + * Users may configure phpLDAPadmin to use TLS in config,php thus: + * + * $servers[$i]['tls'] = true; + * + * @param int $server_id The ID of the server of interest from config.php. + * @return bool + */ +function tls_enabled( $server_id ) +{ + global $servers; + if( isset( $servers[$server_id]['tls'] ) && true == $servers[$server_id]['tls'] ) + return true; + else + return false; +} + +/** + * Fetches whether phpLDAPadmin has been configured to redirect anonymously bound users + * to a search form with no tree displayed. + * This is configured in config.php thus: + * + * $anonymous_bind_redirect_no_tree = true; + * + * @return bool + */ +function anon_bind_tree_disabled() +{ + global $anonymous_bind_redirect_no_tree; + if( isset( $anonymous_bind_redirect_no_tree ) && true == $anonymous_bind_redirect_no_tree ) return true; else return false; } -/* +/** + * Fetches whether the user has configured phpLDAPadmin to obfuscate passwords + * with "*********" when displaying them. This is configured in config.php thus: + * + * $obfuscate_password_display = true; + * + * @return bool + */ +function obfuscate_password_display() +{ + global $obfuscate_password_display; + if( isset( $obfuscate_password_display ) && true == $obfuscate_password_display ) + return true; + else + return false; +} + +/** + * Fetches whether the login_attr feature is enabled for a specified server. + * This is configured in config.php thus: + * + * $servers[$server_id]['login_attr'] = 'uid'; + * + * By virtue of the fact that the login_attr is not blank and not 'dn', the + * feature is configured to be enabled. + * + * @return bool + */ +function login_attr_enabled( $server_id ) +{ + global $servers; + if( isset( $servers[$server_id]['login_attr'] ) && + 0 != strcasecmp( $servers[$server_id]['login_attr'], "dn" ) && + trim( $servers[$server_id]['login_attr'] != "" ) ) + return true; + else + return false; +} + +/** * Returns an HTML-beautified version of a DN. + * Internally, this function makes use of pla_explode_dn() to break the + * the DN into its components. It then glues them back together with + * "pretty" HTML. The returned HTML is NOT to be used as a real DN, but + * simply displayed. + * + * @param string $dn The DN to pretty-print. + * @return string */ function pretty_print_dn( $dn ) { $dn = pla_explode_dn( $dn ); - if( isset( $dn['count'] ) ) - unset( $dn['count'] ); foreach( $dn as $i => $element ) { $element = htmlspecialchars( $element ); $element = explode( '=', $element, 2 ); @@ -37,32 +280,127 @@ function pretty_print_dn( $dn ) return $dn; } - -/* - * Responsible for setting the cookie to indicate that a user has logged in. +/** + * Returns true if the attribute specified is required to take as input a DN. + * Some examples include 'distinguishedName', 'member' and 'uniqueMember'. + * @param int $server_id The ID of the server of interest + * (required since this operation demands a schema lookup) + * @param string $attr_name The name of the attribute of interest (case insensitive) + * @return bool */ -function set_cookie_login_dn( $server_id, $dn, $password, $anon_bind ) +function is_dn_attr( $server_id, $attr_name ) { - // cookie_time comes from config.php - if( ! check_server_id( $server_id ) ) - return false; - if( $anon_bind ) { - // we set the cookie val to 0 for anonymous binds. - $res1 = pla_set_cookie( "pla_login_dn_$server_id", 'anonymous' ); - $res2 = pla_set_cookie( "pla_login_pass_$server_id", '0' ); - } else { - $res1 = pla_set_cookie( "pla_login_dn_$server_id", $dn ); - $res2 = pla_set_cookie( "pla_login_pass_$server_id", $password ); - } - if( ! $res1 || ! $res2 ) - return false; - else - return true; + // Simple test first + $dn_attrs = array( "aliasedObjectName" ); + foreach( $dn_attrs as $dn_attr ) + if( 0 == strcasecmp( $attr_name, $dn_attr ) ) + return true; + + // Now look at the schema OID + $attr_schema = get_schema_attribute( $server_id, $attr_name ); + if( ! $attr_schema ) + return false; + $syntax_oid = $attr_schema->getSyntaxOID(); + if( '1.3.6.1.4.1.1466.115.121.1.12' == $syntax_oid ) + return true; + if( '1.3.6.1.4.1.1466.115.121.1.34' == $syntax_oid ) + return true; + $syntaxes = get_schema_syntaxes( $server_id ); + if( ! isset( $syntaxes[ $syntax_oid ] ) ) + return false; + $syntax_desc = $syntaxes[ $syntax_oid ]->getDescription(); + if( false !== strpos( strtolower($syntax_desc), 'distinguished name' ) ) + return true; + return false; } -/* - * PLA-only wrapper for setting cookies, which takes into consideration - * configuration values. +/** + * Given a string, this function returns true if the string has the format + * of a DN (ie, looks like "cn=Foo,dc=example,dc=com"). Returns false otherwise. + * The purpose of this function is so that developers can examine a string and + * know if it looks like a DN, and draw a hyperlink as needed. + * + * (See unit_test.php for test cases) + * + * @param string $attr The attribute to examine for "DNness" + * @see unit_test.php + * @return bool + */ +function is_dn_string( $str ) +{ + // Try to break the string into its component parts if it can be done + // ie, "uid=Manager" "dc=example" and "dc=com" + $parts = pla_explode_dn( $str ); + if( ! is_array( $parts ) ) + return false; + if( 0 == count( $parts ) ) + return false; + + // Foreach of the "parts", look for an "=" character, + // and make sure neither the left nor the right is empty + foreach( $parts as $part ) { + if( false === strpos( $part, "=" ) ) + return false; + $sub_parts = explode( "=", $part, 2 ); + $left = $sub_parts[0]; + $right = $sub_parts[1]; + if( 0 == strlen( trim( $left ) ) || 0 == strlen( trim( $right ) ) ) + return false; + if( false !== strpos( $left, '#' ) ) + return false; + } + + // We survived the above rigor. This is a bonified DN string. + return true; +} + +/** + * Get whether a string looks like an email address (user@example.com). + * + * @param string $str The string to analyze. + * @return bool Returns true if the specified string looks like + * an email address or false otherwise. + */ +function is_mail_string( $str ) +{ + $mail_regex = "/^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9-]+)*$/"; + if( preg_match( $mail_regex, $str ) ) + return true; + else + return false; +} + +/** + * Get whether a string looks like a web URL (http://www.example.com/) + * + * @param string $str The string to analyze. + * @return bool Returns true if the specified string looks like + * a web URL or false otherwise. + */ +function is_url_string( $str ) +{ + $url_regex = '/(ftp|https?):\/\/+[\w\.\-\/\?\=\&]*\w+/'; + if( preg_match( $url_regex, $str ) ) + return true; + else + return false; + +} + + +/** + * Utility wrapper for setting cookies, which takes into consideration + * phpLDAPadmin configuration values. On success, true is returned. On + * failure, false is returned. + * + * @param string $name The name of the cookie to set. + * @param string $val The value of the cookie to set. + * @param int $expire (optional) The duration in seconds of this cookie. If unspecified, $cookie_time + * is used from config.php + * @param string $dir (optional) The directory value of this cookie (see php.net/setcookie) + * + * @see setcookie + * @return bool */ function pla_set_cookie( $name, $val, $expire=null, $dir=null ) { @@ -74,12 +412,10 @@ function pla_set_cookie( $name, $val, $expire=null, $dir=null ) } if( $dir == null ) { - global $_SERVER; $dir = dirname( $_SERVER['PHP_SELF'] ); } - if( setcookie( $name, $val, $expire, $dir ) ) { - global $_COOKIE; + if( @setcookie( $name, $val, $expire, $dir ) ) { $_COOKIE[ $name ] = $val; return true; } else { @@ -87,57 +423,182 @@ function pla_set_cookie( $name, $val, $expire=null, $dir=null ) } } -/* - * Responsible for removing a cookie after a user logs out. +/** + * Responsible for setting two cookies/session-vars to indicate that a user has logged in, + * one for the logged in DN and one for the logged in password. Cookies + * are stored unencrypted in the client's browser's cookie cache. Use caution! + * + * This function is only used if 'auth_type' is set to 'cookie' or 'session'. The values + * written have the name "pla_login_dn_X" and "pla_login_pass_X" where X is the + * ID of the server to which the user is attempting login. + * + * Note that as with all cookie/session operations this function must be called BEFORE + * any output is sent to the browser. + * + * On success, true is returned. On failure, false is returned. + * + * @param int $server_id The ID of the server to which the user is logged in. + * @param string $dn The DN with which the user has logged in. + * @param string $password The password of the user logged in. + * @param bool $anon_bind Indicates that this is an anonymous bind such that + * a password of "0" is stored. + * @return bool + * @see unset_login_dn */ -function unset_cookie_login_dn( $server_id ) +function set_login_dn( $server_id, $dn, $password, $anon_bind ) { - global $_SERVER; + global $servers; + if( ! check_server_id( $server_id ) ) return false; - $logged_in_dn = get_logged_in_dn( $server_id ); - $logged_in_pass = get_logged_in_pass( $server_id ); - $anon_bind = $logged_in_dn == 'anonymous' ? true : false; - - $expire = time()-3600; - if( $anon_bind ) { - $res1 = pla_set_cookie( "pla_login_dn_$server_id", 'anonymous', $expire ); - $res2 = pla_set_cookie( "pla_login_pass_$server_id", '0', $expire ); - } else { - $res1 = pla_set_cookie( "pla_login_dn_$server_id", $logged_in_dn, $expire ); - $res2 = pla_set_cookie( "pla_login_pass_$server_id", $logged_in_pass, $expire ); - } - - if( ! $res1 || ! $res2 ) + if( ! isset( $servers[ $server_id ][ 'auth_type' ] ) ) return false; - else - return true; + $auth_type = $servers[ $server_id ][ 'auth_type' ]; + + switch( $auth_type ) + { + case 'cookie': + $cookie_dn_name = "pla_login_dn_$server_id"; + $cookie_pass_name = "pla_login_pass_$server_id"; + if( $anon_bind ) { + // we set the cookie password to 0 for anonymous binds. + $res1 = pla_set_cookie( $cookie_dn_name, 'anonymous' ); + $res2 = pla_set_cookie( $cookie_pass_name, '0' ); + } else { + $res1 = pla_set_cookie( $cookie_dn_name, $dn ); + $res2 = pla_set_cookie( $cookie_pass_name, $password ); + } + if( $res1 && $res2 ) + return true; + else + return false; + break; + case 'session': + $sess_var_dn_name = "pla_login_dn_$server_id"; + $sess_var_pass_name = "pla_login_pass_$server_id"; + if( $anon_bind ) { + $_SESSION[ $sess_var_dn_name ] = 'anonymous'; + $_SESSION[ $sess_var_pass_name ] = 0; + } else { + $_SESSION[ $sess_var_dn_name ] = $dn; + $_SESSION[ $sess_var_pass_name ] = $password; + } + return true; + break; + default: + global $lang; + pla_error( sprintf( $lang['unknown_auth_type'], htmlspecialchars( $auth_type ) ) ); + break; + } } -/* +/** + * Effectively logs a user out from a server. + * Removes the cookies/session-vars set by set_login_dn() + * after a user logs out using "auth_type" of "session" or "cookie". + * Returns true on success, false on failure. + * + * @param int $server_id The ID of the server from which the user is logging out. + * @return bool True on success, false on failure. + * @see set_login_dn + */ +function unset_login_dn( $server_id ) +{ + global $servers; + + if( ! check_server_id( $server_id ) ) + return false; + if( ! isset( $servers[ $server_id ][ 'auth_type' ] ) ) + return false; + $auth_type = $servers[ $server_id ][ 'auth_type' ]; + switch( $auth_type ) + { + case 'cookie': + $logged_in_dn = get_logged_in_dn( $server_id ); + if( ! $logged_in_dn ) + return false; + $logged_in_pass = get_logged_in_pass( $server_id ); + $anon_bind = $logged_in_dn == 'anonymous' ? true : false; + + // set cookie with expire time already passed to erase cookie from client + $expire = time()-3600; + $cookie_dn_name = "pla_login_dn_$server_id"; + $cookie_pass_name = "pla_login_pass_$server_id"; + if( $anon_bind ) { + $res1 = pla_set_cookie( $cookie_dn_name, 'anonymous', $expire ); + $res2 = pla_set_cookie( $cookie_pass_name, '0', $expire ); + } else { + $res1 = pla_set_cookie( $cookie_dn_name, $logged_in_dn, $expire ); + $res2 = pla_set_cookie( $cookie_pass_name, $logged_in_pass, $expire ); + } + + if( ! $res1 || ! $res2 ) + return false; + else + return true; + break; + case 'session': + // unset session variables + $session_var_dn_name = "pla_login_dn_$server_id"; + $session_var_pass_name = "pla_login_pass_$server_id"; + if( array_key_exists( $session_var_dn_name, $_SESSION ) ) + unset( $_SESSION[ $session_var_dn_name ] ); + if( array_key_exists( $session_var_pass_name, $_SESSION ) ) + unset( $_SESSION[ "$session_var_pass_name" ] ); + session_write_close(); + return true; + break; + default: + global $lang; + pla_error( sprintf( $lang['unknown_auth_type'], htmlspecialchars( $auth_type ) ) ); + break; + } +} + +/** * Compares 2 DNs. If they are equivelant, returns 0, otherwise, - * returns their sorting order (similar to strcmp()). - * < 0 if dn1 is less than dn2 - * > 0 if dn1 is greater than dn2 + * returns their sorting order (similar to strcmp()): + * Returns < 0 if dn1 is less than dn2. + * Returns > 0 if dn1 is greater than dn2. + * + * The comparison is performed starting with the top-most element + * of the DN. Thus, the following list: + * + * ou=people,dc=example,dc=com + * cn=Admin,ou=People,dc=example,dc=com + * cn=Joe,ou=people,dc=example,dc=com + * dc=example,dc=com + * cn=Fred,ou=people,dc=example,dc=org + * cn=Dave,ou=people,dc=example,dc=org + * + * Will be sorted thus using usort( $list, "pla_compare_dns" ): + * + * dc=com + * dc=example,dc=com + * ou=people,dc=example,dc=com + * cn=Admin,ou=People,dc=example,dc=com + * cn=Joe,ou=people,dc=example,dc=com + * cn=Dave,ou=people,dc=example,dc=org + * cn=Fred,ou=people,dc=example,dc=org + * + * + * @param string $dn1 The first of two DNs to compare + * @param string $dn2 The second of two DNs to compare + * @return int */ 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 count($dn2_parts) ) { + return 1; + } elseif( count( $dn2_parts ) > count( $dn1_parts ) ) { + return -1; + } else { + return 0; + } } /** - * Prunes off anything after the ";" in an attr name + * Prunes off anything after the ";" in an attr name. This is useful for + * attributes that may have ";binary" appended to their names. With + * real_attr_name(), you can more easily fetch these attributes' schema + * with their "real" attribute name. + * + * @param string $attr_name The name of the attribute to examine. + * @return string */ function real_attr_name( $attr_name ) { @@ -175,9 +649,17 @@ function real_attr_name( $attr_name ) return $attr_name; } -/* +/** * Returns true if the user has configured the specified - * server to enable mass deletion + * server to enable mass deletion. Mass deletion is enabled in config.php this: + * + * $enable_mass_delete = true; + * + * Notice that mass deletes are not enabled on a per-server basis, but this + * function checks that the sever is not in a read-only state as well. + * + * @param int $server_id The ID of the server of interest. + * @return bool */ function mass_delete_enabled( $server_id ) { @@ -193,9 +675,15 @@ function mass_delete_enabled( $server_id ) return false; } -/* +/** * Returns true if the user has configured PLA to show * helpful hints with the $show_hints setting. + * This is configured in config.php thus: + * + * $show_hints = true; + * + * + * @return bool */ function show_hints() { @@ -204,9 +692,9 @@ function show_hints() return true; } -/* +/** * 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 + * 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 @@ -217,6 +705,17 @@ function show_hints() * 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. + * + * Also note that both algorithms are susceptible to a race condition. If two admins + * are adding users simultaneously, the users may get identical uidNumbers with this + * function. + * + * See config.php.example for more notes on the two auto uidNumber mechanisms. + * + * @param int $server_id The ID of the server of interest. + * @return int + * + * @todo eliminate race condition at create time by re-running this function. */ function get_next_uid_number( $server_id ) { @@ -257,9 +756,38 @@ function get_next_uid_number( $server_id ) } 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')); + + // Check see and use our alternate uid_dn and password if we have it. + if ( isset( $servers[ $server_id ][ 'auto_uid_number_search_dn' ] ) && + isset( $servers[ $server_id ][ 'auto_uid_number_search_dn_pass' ] ) ) { + $con = @ldap_connect( $servers[$server_id]['host'], $servers[$server_id]['port'] ); + @ldap_set_option( $con, LDAP_OPT_PROTOCOL_VERSION, 3 ); + @ldap_set_option( $con, LDAP_OPT_REFERRALS, 0); + + // Bind with the alternate ID. + $res = @ldap_bind( $con, + $servers[ $server_id ][ 'auto_uid_number_search_dn' ], + $servers[ $server_id ][ 'auto_uid_number_search_dn_pass' ] ); + if (! $res) pla_error( sprintf( $lang['auto_uid_invalid_credential'] , $server_name ) ); + $search = @ldap_search( $con, $base_dn, $filter, array('uidNumber'), 0, 0, 0, get_search_deref_setting() ); + if( ! $search ) pla_error( sprintf( $lang['bad_auto_uid_search_base'], $server_name ) ); + $search = @ldap_get_entries( $con, $search ); + $res = @ldap_unbind( $con ); + + $results = array(); + for( $i=0; $i<$search['count']; $i++ ) { + $entry = $search[$i]; + $dn['dn'] = $entry['dn']; + $dn['uidnumber'] = $entry['uidnumber'][0]; + $results[] = $dn; + } + + } else { + $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 ) { @@ -295,8 +823,15 @@ function get_next_uid_number( $server_id ) } } -/* - * Used to determine if the specified attribute is indeed a jpegPhoto +/** + * Used to determine if the specified attribute is indeed a jpegPhoto. If the + * specified attribute is one that houses jpeg data, true is returned. Otherwise + * this function returns false. + * + * @param int $server_id The ID of the server hosuing the attribute of interest + * @param string $attr_name The name of the attribute to test. + * @return bool + * @see draw_jpeg_photos */ function is_jpeg_photo( $server_id, $attr_name ) { @@ -322,45 +857,149 @@ function is_jpeg_photo( $server_id, $attr_name ) return false; } -/* - * Given an attribute name and server id number, this function returns - * whether the attrbiute may contain binary data. +/** + * Given an attribute name and server ID number, this function returns + * whether the attrbiute contains boolean data. This is useful for + * developers who wish to display the contents of a boolean attribute + * with a drop-down. + * + * @param int $server_id The ID of the server of interest (required since + * this action requires a schema lookup on the server) + * @param string $attr_name The name of the attribute to test. + * @return bool + */ +function is_attr_boolean( $server_id, $attr_name ) +{ + $type = ( $schema_attr = get_schema_attribute( $server_id, $attr_name ) ) ? + $schema_attr->getType() : + null; + if( 0 == strcasecmp( 'boolean', $type ) || + 0 == strcasecmp( 'isCriticalSystemObject', $attr_name ) || + 0 == strcasecmp( 'showInAdvancedViewOnly', $attr_name ) ) + return true; + else + return false; +} + +/** + * Given an attribute name and server ID number, this function returns + * whether the attrbiute may contain binary data. This is useful for + * developers who wish to display the contents of an arbitrary attribute + * but don't want to dump binary data on the page. + * + * @param int $server_id The ID of the server of interest (required since + * this action requires a schema lookup on the server) + * @param string $attr_name The name of the attribute to test. + * @return bool + * + * @see is_jpeg_photo */ function is_attr_binary( $server_id, $attr_name ) { + $attr_name = strtolower( $attr_name ); + /** Determining if an attribute is binary can be an expensive + operation. We cache the results for each attr name on each + server in the $attr_cache to speed up subsequent calls. + The $attr_cache looks like this: + Array + 0 => Array + 'objectclass' => false + 'cn' => false + 'usercertificate' => true + 1 => Array + 'jpegphoto' => true + 'cn' => false + */ + + static $attr_cache; + if( isset( $attr_cache[ $server_id ][ $attr_name ] ) ) + return $attr_cache[ $server_id ][ $attr_name ]; + + if( $attr_name == 'userpassword' ) { + $attr_cache[ $server_id ][ $attr_name ] = false; + return false; + } + + // Quick check: If the attr name ends in ";binary", then it's binary. + if( 0 == strcasecmp( substr( $attr_name, strlen( $attr_name ) - 7 ), ";binary" ) ) { + $attr_cache[ $server_id ][ $attr_name ] = true; + return true; + } + @require_once realpath( 'schema_functions.php' ); - if( 0 == strcasecmp( substr( $attr_name, strlen( $attr_name ) - 7 ), ";binary" ) ) - return true; - + // See what the server schema says about this attribute $schema_attr = get_schema_attribute( $server_id, $attr_name ); - if( ! $schema_attr ) - return false; + if( ! $schema_attr ) { + // Strangely, some attributeTypes may not show up in the server + // schema. This behavior has been observed in MS Active Directory. + $type = null; + $syntax = null; + } else { + $type = $schema_attr->getType(); + $syntax = $schema_attr->getSyntaxOID(); + } - $type = $schema_attr->getType(); - $syntax = $schema_attr->getSyntaxOID(); - - if( 0 == strcasecmp( substr( $attr_name, strlen( $attr_name ) - 7 ), ";binary" ) || - 0 == strcasecmp( $type, 'Certificate' ) || + if( 0 == strcasecmp( $type, 'Certificate' ) || 0 == strcasecmp( $type, 'Binary' ) || - 0 == strcasecmp( $attr_name, 'networkAddress' ) || - 0 == strcasecmp( $attr_name, 'userCertificate' ) || - 0 == strcasecmp( $attr_name, 'userSMIMECertificate' ) || + 0 == strcasecmp( $attr_name, 'usercertificate' ) || + 0 == strcasecmp( $attr_name, 'usersmimecertificate' ) || + 0 == strcasecmp( $attr_name, 'networkaddress' ) || + 0 == strcasecmp( $attr_name, 'objectGUID' ) || + 0 == strcasecmp( $attr_name, 'objectSID' ) || $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' ) + $syntax == '1.3.6.1.4.1.1466.115.121.1.9' || + $syntax == '1.3.6.1.4.1.1466.115.121.1.40' ) { + $attr_cache[ $server_id ][ $attr_name ] = true; return true; - else + } else { + $attr_cache[ $server_id ][ $attr_name ] = false; return false; + } } -/* +/** + * Returns true if the specified attribute is configured as read only + * in config.php with the $read_only_attrs array. + * Attributes are configured as read-only in config.php thus: + * + * $read_only_attrs = array( "objectClass", "givenName" ); + * + * + * @param string $attr The name of the attribute to test. + * @return bool + */ +function is_attr_read_only( $attr ) +{ + global $read_only_attrs; + $attr = trim( $attr ); + if( '' === $attr ) + return false; + if( ! isset( $read_only_attrs ) ) + return false; + if( ! is_array( $read_only_attrs) ) + return false; + foreach( $read_only_attrs as $attr_name ) + if( 0 == strcasecmp( $attr, trim($attr_name) ) ) + return true; + return false; +} + +/** * Returns true if the specified server is configured to be displayed * in read only mode. If a user has logged in via anonymous bind, and * config.php specifies anonymous_bind_implies_read_only as true, then - * this also returns true. + * this also returns true. Servers can be configured read-only in + * config.php thus: + * + * $server[$i]['read_only'] = true; + * + * + * @param int $server_id The ID of the server of interest from the $servers array in config.php + * @return bool */ function is_server_read_only( $server_id ) { @@ -379,50 +1018,66 @@ function is_server_read_only( $server_id ) return false; } -/* +/** * 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 + * 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 * previously. That means we can afford a little bit of inefficiency here * in favor of coolness. :) + * + * This function returns a string like "country.png". All icon files are assumed + * to be contained in the /images/ directory of phpLDAPadmin. + * + * Developers are encouraged to add new icons to the images directory and modify + * this function as needed to suit their types of LDAP entries. If the modifications + * are general to an LDAP audience, the phpLDAPadmin team will gladly accept them + * as a patch. + * + * @param int $server_id The ID of the LDAP server housing the DN of interest. + * @param string $dn The DN of the entry whose icon you wish to fetch. + * + * @return string */ function get_icon( $server_id, $dn ) { // fetch and lowercase all the objectClasses in an array $object_classes = get_object_attr( $server_id, $dn, 'objectClass', true ); - if( $object_classes === null || $object_classes === false) - return 'object.png'; + if( $object_classes === null || $object_classes === false || ! is_array( $object_classes ) ) + $object_classes = array(); foreach( $object_classes as $i => $class ) $object_classes[$i] = strtolower( $class ); $rdn = get_rdn( $dn ); + $rdn_parts = explode( '=', $rdn, 2 ); + $rdn_value = isset( $rdn_parts[0] ) ? $rdn_parts[0] : null; + $rdn_attr = isset( $rdn_parts[1] ) ? $rdn_parts[1] : null; + unset( $rdn_parts ); - // Is it a samba NT machine (is sambaAccount and ends with '$') + // return icon filename based upon objectClass value if( in_array( 'sambaaccount', $object_classes ) && '$' == $rdn{ strlen($rdn) - 1 } ) return 'nt_machine.png'; - // Is it a samba user account? if( in_array( 'sambaaccount', $object_classes ) ) return 'nt_user.png'; - // Is it a person or some type of account/user? elseif( in_array( 'person', $object_classes ) || in_array( 'organizationalperson', $object_classes ) || in_array( 'inetorgperson', $object_classes ) || in_array( 'account', $object_classes ) || in_array( 'posixaccount', $object_classes ) ) return 'user.png'; - // Is it an organization? - elseif ( in_array( 'organization', $object_classes ) ) + elseif( in_array( 'organization', $object_classes ) ) return 'o.png'; - // Is it an organizational Unit? elseif( in_array( 'organizationalunit', $object_classes ) ) return 'ou.png'; - // Is it a domain controler (dc) + elseif( in_array( 'organizationalrole', $object_classes ) ) + return 'uid.png'; elseif( in_array( 'dcobject', $object_classes ) || - in_array( 'domainrelatedobject', $object_classes ) ) + in_array( 'domainrelatedobject', $object_classes ) || + in_array( 'domain', $object_classes ) || + in_array( 'builtindomain', $object_classes )) return 'dc.png'; elseif( in_array( 'country', $object_classes ) ) return 'country.png'; @@ -431,7 +1086,8 @@ function get_icon( $server_id, $dn ) elseif( in_array( 'locality', $object_classes ) ) return 'locality.png'; elseif( in_array( 'posixgroup', $object_classes ) || - in_array( 'groupofnames', $object_classes ) ) + in_array( 'groupofnames', $object_classes ) || + in_array( 'group', $object_classes ) ) return 'ou.png'; elseif( in_array( 'applicationprocess', $object_classes ) ) return 'process.png'; @@ -439,22 +1095,72 @@ function get_icon( $server_id, $dn ) return 'uniquegroup.png'; elseif( in_array( 'iphost', $object_classes ) ) return 'host.png'; + elseif( in_array( 'nlsproductcontainer', $object_classes ) ) + return 'n.png'; + elseif( in_array( 'ndspkikeymaterial', $object_classes ) ) + return 'lock.png'; + elseif( in_array( 'server', $object_classes ) ) + return 'server-small.png'; + elseif( in_array( 'volume', $object_classes ) ) + return 'hard-drive.png'; + elseif( in_array( 'ndscatcatalog', $object_classes ) ) + return 'catalog.png'; + elseif( in_array( 'resource', $object_classes ) ) + return 'n.png'; + elseif( in_array( 'ldapgroup', $object_classes ) ) + return 'ldap-server.png'; + elseif( in_array( 'ldapserver', $object_classes ) ) + return 'ldap-server.png'; + elseif( in_array( 'nisserver', $object_classes ) ) + return 'ldap-server.png'; + elseif( in_array( 'rbscollection', $object_classes ) ) + return 'ou.png'; + elseif( in_array( 'dfsconfiguration', $object_classes ) ) + return 'nt_machine.png'; + elseif( in_array( 'applicationsettings', $object_classes ) ) + return 'server-settings.png'; + elseif( in_array( 'container', $object_classes ) ) + return 'folder.png'; + elseif( in_array( 'samServer', $object_classes ) ) + return 'server-small.png'; + elseif( in_array( 'lostandfound', $object_classes ) ) + return 'find.png'; + elseif( in_array( 'infrastructureupdate', $object_classes ) ) + return 'server-small.png'; + elseif( in_array( 'filelinktracking', $object_classes ) ) + return 'files.png'; + elseif( in_array( 'automountmap', $object_classes ) ) + return 'hard-drive.png'; + elseif( 0 === strpos( $rdn_value, "ipsec" ) || + 0 == strcasecmp( $rdn_value, "IP Security" ) || + 0 == strcasecmp( $rdn_value, "MSRADIUSPRIVKEY Secret" ) || + 0 === strpos( $rdn_value, "BCKUPKEY_" ) ) + return 'lock.png'; + elseif( 0 == strcasecmp( $rdn_value, "MicrosoftDNS" ) ) + return 'dc.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. + * + * @param int $server_id The ID of the server housing the DN of interest. + * @param string $dn The DN of the entry of interest. + * + * @return string + * + * @see get_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 ] ) ) { + if( array_key_exists( 'tree_icons', $_SESSION ) ) { + if( array_key_exists( $server_id, $_SESSION['tree_icons'] ) && + array_key_exists( $dn, $_SESSION['tree_icons'][$server_id] ) ) + { return $_SESSION['tree_icons'][ $server_id ][ $dn ]; } else { $icon = get_icon( $server_id, $dn ); @@ -464,22 +1170,35 @@ function get_icon_use_cache( $server_id, $dn ) } } -/* +/** * Given a server_id, returns whether or not we have enough information * to authenticate against the server. For example, if the user specifies - * 'cookie' in the config for that server, it checks the $_COOKIE array to - * see if the cookie username and password is set for the server. + * auth_type of 'cookie' in the config for that server, it checks the $_COOKIE array to + * see if the cookie username and password is set for the server. If the auth_type + * is 'session', the $_SESSION array is checked. + * + * There are three cases for this function depending on the auth_type configured for + * the specified server. If the auth_type is form or http, then get_logged_in_dn() is + * called to verify that the user has logged in. If the auth_type is config, then the + * $servers array in config.php is checked to ensure that the user has specified + * login information. In any case, if phpLDAPadmin has enough information to login + * to the server, true is returned. Otherwise false is returned. + * + * @param int $server_id + * @return bool + * @see get_logged_in_dn */ function have_auth_info( $server_id ) { global $servers; - if( ! is_numeric( $server_id ) || ! isset( $servers[$server_id] ) ) + if( ! check_server_id( $server_id ) ) return false; $server = $servers[$server_id]; - if( isset( $server['auth_type'] ) && $server['auth_type'] == 'form' ) { + // For session or cookie auth_types, we check the session or cookie to see if a user has logged in. + if( isset( $server['auth_type'] ) && ( $server['auth_type'] == 'session' || $server['auth_type'] == 'cookie' ) ) { // 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 ) ) @@ -499,88 +1218,216 @@ function have_auth_info( $server_id ) } } -/* - * Returns the password of the currently logged in DN (auth_type form only) +/** + * Fetches the password of the currently logged in user (for auth_types "form" and "http" only) * or false if the current login is anonymous. + * + * @param int $server_id The ID of the server of interest. + * + * @return string + * + * @see have_auth_info + * @see get_logged_in_dn */ function get_logged_in_pass( $server_id ) { + global $servers; if( ! is_numeric( $server_id ) ) return false; - $cookie_name = 'pla_login_pass_' . $server_id; - global $_COOKIE; - $pass = isset( $_COOKIE[ $cookie_name ] ) ? $_COOKIE[ $cookie_name ] : false; - - if( $pass == '0' ) - return null; - else - return $pass; + if( ! isset( $servers[ $server_id ][ 'auth_type' ] ) ) + return false; + $auth_type = $servers[ $server_id ][ 'auth_type' ]; + switch( $auth_type ) { + case 'cookie': + $cookie_name = 'pla_login_pass_' . $server_id; + $pass = isset( $_COOKIE[ $cookie_name ] ) ? $_COOKIE[ $cookie_name ] : false; + if( $pass == '0' ) + return null; + else + return $pass; + break; + case 'session': + $session_var_name = 'pla_login_pass_' . $server_id; + $pass = isset( $_SESSION[ $session_var_name ] ) ? $_SESSION[ $session_var_name ] : false; + if( $pass == '0' ) + return null; + else + return $pass; + break; + case 'config': + return false; + break; + default: + global $lang; + pla_error( sprintf( $lang['unknown_auth_type'], htmlspecialchars( $auth_type ) ) ); + } } -/* +/** * Returns the DN who is logged in currently to the given server, which may - * either be a DN or the string 'anonymous'. + * either be a DN or the string 'anonymous'. This applies only for auth_types + * "form" and "http". + + * One place where this function is used is the tree viewer: + * After a user logs in, the text "Logged in as: " is displayed under the server + * name. This information is retrieved from this function. + * + * @param int $server_id The ID of the server of interest. + * + * @return string + * + * @see have_auth_info + * @see get_logged_in_pass */ function get_logged_in_dn( $server_id ) { + global $servers; 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 { + if( ! isset( $servers[ $server_id ][ 'auth_type' ] ) ) return false; + $auth_type = $servers[ $server_id ][ 'auth_type' ]; + switch( $auth_type ) { + case 'cookie': + $cookie_name = 'pla_login_dn_' . $server_id; + if( isset( $_COOKIE[ $cookie_name ] ) ) { + $dn = $_COOKIE[ $cookie_name ]; + } else { + return false; + } + return $dn; + break; + case 'session': + $session_var_name = 'pla_login_dn_' . $server_id; + if( isset( $_SESSION[ $session_var_name ] ) ) { + $dn = $_SESSION[ $session_var_name ]; + return $dn; + } else { + return false; + } + break; + case 'config': + return false; + break; + default: + global $lang; + pla_error( sprintf( $lang['unknown_auth_type'], htmlspecialchars( $auth_type ) ) ); } - - 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 - * config.php since those values are usually generated dynamically in hrefs. +/** + * Appends a servers base to a "sub" dn or returns the base. + * If $get_base is true, return at least the base, otherwise null. */ -function pla_ldap_connect( $server_id ) +function expand_dn_with_base( $server_id, $sub_dn, $conn = null, $get_base = true ) +{ + global $servers; + + if( ! check_server_id( $server_id ) ) + return false; + + $empty_str = ( is_null($sub_dn) || ( ( $len = strlen( trim( $sub_dn ) ) ) == 0 ) ); + + if ( $empty_str ) { + // If we have no string and want not base + if ( ! $get_base ) + return null; + } // If we have a string which doesn't need a base + elseif ( $sub_dn[$len - 1] != ',' ) + return $sub_dn; + + if( ( $empty_str && $get_base ) || ! $empty_str ) + { + if( isset($servers[$server_id]['base']) ) { + $base = $servers[$server_id]['base']; + if ( strlen( trim( $base ) ) == 0 ) + $base = try_to_get_root_dn( $server_id, $conn ); + } else { $base = try_to_get_root_dn( $server_id, $conn ); } + + if ( $base ) + return ( ! $empty_str ) ? $sub_dn . $base : $base; + } + return null; +} + +/** + * Logs into the specified server using the auth_type configured for that server using + * ldap_connect() and ldap_bind() from the PHP LDAP API. + * If anonymous is true bind information (user / pass) is ignored (= anonymous). + * If anonymous is null a new bind is done (i.e. user changed). + * Returns true on success or false on failure. + * + * @param int $server_id The ID of the server of interest. + * @param bool $anonymous Set to override server config + * @return bool + * + * @see get_logged_in_dn + * @see get_logged_in_pass + * @see have_auth_info + * @see check_server_id + */ +function pla_ldap_connect( $server_id, $anonymous = false ) { if( ! check_server_id( $server_id ) ) return false; - if( ! have_auth_info( $server_id ) ) + if( ! $anonymous && ! have_auth_info( $server_id ) ) return false; - global $servers; + global $servers, $lang; // 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]; + // We can reuse connections for multiple binds if we don't ldap_unbind + if( isset( $conns[$server_id] ) ) { + $conn = $conns[$server_id]['conn']; + $status = $conns[$server_id]['stat']; + + // Status tells us, if we can use the same bind + if( !is_null($status) && $status == $anonymous ) + return $conn; + } else { $host = $servers[$server_id]['host']; - $port = $servers[$server_id]['port']; - if( ! $port ) $port = 389; - $conn = @ldap_connect( $host, $port ); + $port = isset( $servers[$server_id]['port'] ) ? $servers[ $server_id ][ 'port' ] : false; - if( ! $conn ) return false; + if( $port ) + $conn = @ldap_connect( $host, $port ); + else + $conn = @ldap_connect( $host ); + + $conn or pla_error( sprintf( $lang['could_not_connect_to_host_on_port'], htmlspecialchars( $host ), htmlspecialchars( $port ) ) ); // go with LDAP version 3 if possible (needed for renaming and Novell schema fetching) @ldap_set_option( $conn, LDAP_OPT_PROTOCOL_VERSION, 3 ); + // Disabling this makes it possible to browse the tree for Active Directory, and seems + // to not affect other LDAP servers (tested with OpenLDAP) as phpLDAPadmin explicitly + // specifies deref behavior for each ldap_search operation. + @ldap_set_option( $conn, LDAP_OPT_REFERRALS, 0); // try to fire up TLS is specified in the config - if( $servers[ $server_id ][ 'tls' ] == true ) { + if( tls_enabled( $server_id ) ) { 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 - if( $servers[ $server_id ][ 'auth_type' ] == 'config' ) { + // store the cached connection resource + $conns[$server_id]['conn'] = $conn; + $conns[$server_id]['stat'] = null; + } + + if( $anonymous == true ) { + $login_dn = null; + $login_pass = null; + } // grab the auth info based on the auth_type for this server + elseif( $servers[ $server_id ][ 'auth_type' ] == 'config' ) { $login_dn = $servers[$server_id]['login_dn']; $login_pass = $servers[$server_id]['login_pass']; - } elseif( $servers[ $server_id ][ 'auth_type' ] == 'form' ) { + $login_dn = expand_dn_with_base( $server_id, $login_dn, $conn, false ); + } else { $login_dn = get_logged_in_dn( $server_id ); $login_pass = get_logged_in_pass( $server_id ); @@ -589,31 +1436,57 @@ function pla_ldap_connect( $server_id ) $login_dn = null; $login_pass = null; } - } else { - global $lang; - pla_error( sprintf( $lang['auth_type_not_valid'], - htmlspecialchars( $servers[ $server_id ][ 'auth_type' ] ))); - } + } $res = @ldap_bind( $conn, $login_dn, $login_pass ); if( ! $res ) return false; - // store the cached connection resource - $conns[$server_id] = $conn; + // store the bind status + $conns[$server_id]['stat'] = $anonymous; return $conn; } -/* - * Returns an array listing the DNs contained by the specified $dn +/** + * Gets a list of child entries for an entry. Given a DN, this function fetches the list of DNs of + * child entries one level beneath the parent. For example, for the following tree: + * + * + * dc=example,dc=com + * ou=People + * cn=Dave + * cn=Fred + * cn=Joe + * ou=More People + * cn=Mark + * cn=Bob + * + * + * Calling get_container_contents( $server_id, "ou=people,dc=example,dc=com" ) + * would return the following list: + * + * + * cn=Dave + * cn=Fred + * cn=Joe + * ou=More People + * + * + * @param int $server_id The ID of the server housing the entry of interest + * @param string $dn The DN of the entry whose children to return. + * @param int $size_limit (optional) The maximum number of entries to return. + * If unspecified, no limit is applied to the number of entries in the returned. + * @param string $filter (optional) An LDAP filter to apply when fetching children, example: "(objectClass=inetOrgPerson)" + * @return array An array of DN strings listing the immediate children of the specified entry. */ -function get_container_contents( $server_id, $dn, $size_limit=0 ) +function get_container_contents( $server_id, $dn, $size_limit=0, $filter='(objectClass=*)', $deref=LDAP_DEREF_ALWAYS ) { $con = pla_ldap_connect( $server_id ); if( ! $con ) return false; - $search = @ldap_list( $con, $dn, 'objectClass=*', array( 'dn' ), 1, $size_limit ); +// echo "get_container_contents( $server_id, $dn, $size_limit, $filter, $deref )\n"; + $search = @ldap_list( $con, $dn, $filter, array( 'dn' ), 1, $size_limit, 0, $deref ); if( ! $search ) return array(); $search = ldap_get_entries( $con, $search ); @@ -628,10 +1501,23 @@ function get_container_contents( $server_id, $dn, $size_limit=0 ) return $return; } -/* +/** * 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 + * config.php. The structure of the returned array is simple, and looks like + * this: + * + * Array ( + * 0 => Array ( + * dc=example,dc=com => "dcobject.png" + * ), + * 1 => Array ( + * o=Corporation => "o.png" + * ) + * ) + * + * This function is not meant as a user callable function, but rather a convenient, automated method for + * setting up the initial data structure for the tree viewer's icon cache. */ function build_initial_tree() { @@ -648,8 +1534,25 @@ function build_initial_tree() return $tree; } -/* - * Builds the initial array that stores the icon-lookup for each DN in the tree browser +/** + * Builds the initial array that stores the icon-lookup for each server's DN in the tree browser. The returned + * array is then stored in the current session. The structure of the returned array is simple, and looks like + * this: + * + * Array + * ( + * [0] => Array + ( + * [dc=example,dc=com] => "dcobject.png" + * ) + * [1] => Array + ( + * [o=Corporation] => "o.png" + * ) + * ) + * + * This function is not meant as a user-callable function, but rather a convenient, automated method for + * setting up the initial data structure for the tree viewer's icon cache. */ function build_initial_tree_icons() { @@ -667,7 +1570,62 @@ function build_initial_tree_icons() return $tree_icons; } -function get_entry_system_attrs( $server_id, $dn ) +/* + * Checks and fixes an initial session's tree cache if needed. + * + * This function is not meant as a user-callable function, but rather a convenient, + * automated method for checking the initial data structure of the session. + */ +function initialize_session_tree() +{ + // From the PHP manual: If you use $_SESSION don't use + // session_register(), session_is_registered() or session_unregister()! + if( ! array_key_exists( 'tree', $_SESSION ) ) + $_SESSION['tree'] = build_initial_tree(); + if( ! array_key_exists( 'tree_icons', $_SESSION ) ) + $_SESSION['tree_icons'] = build_initial_tree_icons(); + + // Make sure that the tree index is indeed well formed. + if( ! is_array( $_SESSION['tree'] ) ) + $_SESSION['tree'] = build_initial_tree(); + if( ! is_array( $_SESSION['tree_icons'] ) ) + $_SESSION['tree_icons'] = build_initial_tree_icons(); + +} + +/** + * Gets the operational attributes for an entry. Given a DN, this function fetches that entry's + * operational (ie, system or internal) attributes. These attributes include "createTimeStamp", + * "creatorsName", and any other attribute that the LDAP server sets automatically. The returned + * associative array is of this form: + * + * Array + * ( + * [creatorsName] => Array + * ( + * [0] => "cn=Admin,dc=example,dc=com" + * ) + * [createTimeStamp]=> Array + * ( + * [0] => "10401040130" + * ) + * [hasSubordinates] => Array + * ( + * [0] => "FALSE" + * ) + * ) + * + * + * @param int $server_id the ID of the server of interest. + * @param string $dn The DN of the entry whose interal attributes are desired. + * @param int $deref For aliases and referrals, this parameter specifies whether to + * follow references to the referenced DN or to fetch the attributes for + * the referencing DN. See http://php.net/ldap_search for the 4 valid + * options. + * @return array An associative array whose keys are attribute names and whose values + * are arrays of values for the aforementioned attribute. + */ +function get_entry_system_attrs( $server_id, $dn, $deref=LDAP_DEREF_NEVER ) { $conn = pla_ldap_connect( $server_id ); if( ! $conn ) return false; @@ -675,7 +1633,7 @@ function get_entry_system_attrs( $server_id, $dn ) $attrs = array( 'creatorsname', 'createtimestamp', 'modifiersname', 'structuralObjectClass', 'entryUUID', 'modifytimestamp', 'subschemaSubentry', 'hasSubordinates', '+' ); - $search = @ldap_read( $conn, $dn, '(objectClass=*)', $attrs, 0, 0, 0, LDAP_DEREF_ALWAYS ); + $search = @ldap_read( $conn, $dn, '(objectClass=*)', $attrs, 0, 0, 0, $deref ); if( ! $search ) return false; $entry = ldap_first_entry( $conn, $search ); @@ -697,31 +1655,58 @@ 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 - * array of values for that attribute. Here's a sample return value: +/** + * Gets the attributes/values of an entry. Returns an associative array whose + * keys are attribute value names and whose values are arrays of values for + * said attribute. Optionally, callers may specify true for the parameter + * $lower_case_attr_names to force all keys in the associate array (attribute + * names) to be lower case. + * + * Sample return value of get_object_attrs( 0, "cn=Bob,ou=pepole,dc=example,dc=com" ) * + * * Array - * ( - * [objectclass] => Array + * ( + * [objectClass] => Array * ( - * [0] => organizationalRole - * [1] => krb5principal - * [2] => kerberosSecurityObject + * [0] => person + * [1] => top * ) - * [cn] => Manager - * [krbname] => phpldap@EXAMPLE.COM - * [dn] => cn=Manager,dc=example,dc=com - * ) + * [cn] => Array + * ( + * [0] => Bob + * ) + * [sn] => Array + * ( + * [0] => Jones + * ) + * [dn] => Array + * ( + * [0] => cn=Bob,ou=pepole,dc=example,dc=com + * ) + * ) + * + * + * @param int $server_id The ID of the server of interest + * @param string $dn The distinguished name (DN) of the entry whose attributes/values to fetch. + * @param bool $lower_case_attr_names (optional) If true, all keys of the returned associative + * array will be lower case. Otherwise, they will be cased as the LDAP server returns + * them. + * @param int $deref For aliases and referrals, this parameter specifies whether to + * follow references to the referenced DN or to fetch the attributes for + * the referencing DN. See http://php.net/ldap_search for the 4 valid + * options. + * @return array + * @see get_entry_system_attrs + * @see get_object_attr */ -function get_object_attrs( $server_id, $dn, $lower_case_attr_names = false ) +function get_object_attrs( $server_id, $dn, $lower_case_attr_names=false, $deref=LDAP_DEREF_NEVER ) { + //echo "get_object_attrs( $server_id, $dn, $lower_case_attr_names )
"; $conn = pla_ldap_connect( $server_id ); if( ! $conn ) return false; - $search = @ldap_read( $conn, $dn, '(objectClass=*)', array( ), 0, 0, 0, LDAP_DEREF_ALWAYS ); + $search = @ldap_read( $conn, $dn, '(objectClass=*)', array( ), 0, 0, 0, $deref ); if( ! $search ) return false; @@ -744,9 +1729,11 @@ 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 ); + if( is_attr_binary( $server_id, $attr ) ) + $vals = ldap_get_values_len( $conn, $entry, $attr ); unset( $vals['count'] ); $return_array[ $attr ] = $vals; } @@ -756,7 +1743,7 @@ 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 * ASCII characters. Otherwise (like if it contains binary data), * returns false. @@ -772,32 +1759,120 @@ 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 - * returns the single attribute value. - * TODO: Don't call get_object_attrs() and filter. Do the actual ldap_read() ourselves (for efficiencey) +/** + * Much like get_object_attrs(), but only returns the values for + * one attribute of an object. Example calls: + * + * + * print_r( get_object_attr( 0, "cn=Bob,ou=people,dc=example,dc=com", "sn" ) ); + * // prints: + * // Array + * // ( + * // [0] => "Smith" + * // ) + * + * print_r( get_object_attr( 0, "cn=Bob,ou=people,dc=example,dc=com", "objectClass" ) ); + * // prints: + * // Array + * // ( + * // [0] => "top" + * // [1] => "person" + * // ) + * + * + * @param int $server_id The ID of the server of interest + * @param string $dn The distinguished name (DN) of the entry whose attributes/values to fetch. + * @param string $attr The attribute whose value(s) to return (ie, "objectClass", "cn", "userPassword") + * @param bool $lower_case_attr_names (optional) If true, all keys of the returned associative + * array will be lower case. Otherwise, they will be cased as the LDAP server returns + * them. + * @param int $deref For aliases and referrals, this parameter specifies whether to + * follow references to the referenced DN or to fetch the attributes for + * the referencing DN. See http://php.net/ldap_search for the 4 valid + * options. + * @see get_object_attrs */ -function get_object_attr( $server_id, $dn, $attr ) +function get_object_attr( $server_id, $dn, $attr, $deref=LDAP_DEREF_NEVER ) { + /** $attr = strtolower( $attr ); $attrs = get_object_attrs( $server_id, $dn, true ); if( isset( $attrs[$attr] ) ) return $attrs[$attr]; else return false; + */ + + //echo "get_object_attr( $server_id, $dn, $attr )
"; + $conn = pla_ldap_connect( $server_id ); + if( ! $conn ) return false; + + $search = @ldap_read( $conn, $dn, '(objectClass=*)', array( $attr ), 0, 0, 0, $deref ); + + 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 ) + return false; + + if( is_attr_binary( $server_id, $attr ) ) + $vals = ldap_get_values_len( $conn, $entry, $attr ); + else + $vals = ldap_get_values( $conn, $entry, $attr ); + unset( $vals['count'] ); + return $vals; } -/* - * 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. +/** + * A handy ldap searching function very similar to PHP's ldap_search() with the + * following exceptions: Callers may specify a search scope and the return value + * is an array containing the search 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) + * Example usage: + * + * $samba_users = ldap_search( 0, "(&(objcetClass=sambaAccount)(objectClass=posixAccount))", + * "ou=People,dc=example,dc=com", array( "uid", "homeDirectory" ) ); + * print_r( $samba_users ); + * // prints (for example): + * // Array + * // ( + * // [uid=jsmith,ou=People,dc=example,dc=com] => Array + * // ( + * // [dn] => "uid=jsmith,ou=People,dc=example,dc=com" + * // [uid] => "jsmith" + * // [homeDirectory] => "\\server\jsmith" + * // ) + * // [uid=byoung,ou=People,dc=example,dc=com] => Array + * // ( + * // [dn] => "uid=byoung,ou=Samba,ou=People,dc=example,dc=com" + * // [uid] => "byoung" + * // [homeDirectory] => "\\server\byoung" + * // ) + * // ) + * + * + * WARNING: This function will use a lot of memory on large searches since the entire result set is + * stored in a single array. For large searches, you should consider sing the less memory intensive + * PHP LDAP API directly (ldap_search(), ldap_next_entry(), ldap_next_attribute(), etc). + * + * @param int $server_id The ID of the server to search on. + * @param string $filter The LDAP filter to use when searching (example: "(objectClass=*)") (see RFC 2254) + * @param string $base_dn The DN of the base of search. + * @param array $attrs An array of attributes to include in the search result (example: array( "objectClass", "uid", "sn" )). + * @param string $scope The LDAP search scope. Must be one of "base", "one", or "sub". Standard LDAP search scope. + * @param bool $sort_results Specify false to not sort results by DN or true to have the + * returned array sorted by DN (uses ksort) + * @param int $deref When handling aliases or referrals, this specifies whether to follow referrals. Must be one of + * LDAP_DEREF_ALWAYS, LDAP_DEREF_NEVER, LDAP_DEREF_SEARCHING, or LDAP_DEREF_FINDING. See the PHP LDAP API for details. */ -function pla_ldap_search( $server_id, $filter, $base_dn=null, $attrs=array(), $scope='sub', $sort_results=true ) +function pla_ldap_search( $server_id, $filter, $base_dn=null, $attrs=array(), $scope='sub', $sort_results=true, $deref=LDAP_DEREF_ALWAYS ) { global $servers; @@ -813,14 +1888,14 @@ 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, 0, 0, LDAP_DEREF_ALWAYS ); + $search = @ldap_read( $ds, $base_dn, $filter, $attrs, 0, 0, 0, $deref ); break; case 'one': - $search = @ldap_list( $ds, $base_dn, $filter, $attrs, 0, 0, 0, LDAP_DEREF_ALWAYS ); + $search = @ldap_list( $ds, $base_dn, $filter, $attrs, 0, 0, 0, $defef ); break; case 'sub': default: - $search = @ldap_search( $ds, $base_dn, $filter, $attrs, 0, 0, 0, LDAP_DEREF_ALWAYS ); + $search = @ldap_search( $ds, $base_dn, $filter, $attrs, 0, 0, 0, $deref ); break; } @@ -872,11 +1947,55 @@ function pla_ldap_search( $server_id, $filter, $base_dn=null, $attrs=array(), $s return $return; } -/* - * Transforms the user-configured lists into arrays and such. This is a little weird, but - * it takes the comma-separated lists (like the search result attribute list) in config.php +/** + * Reads the query, checks all values and sets defaults. + * + * @param int $query_id The ID of the predefined query. + * + * @return array The fixed query or null on error + */ +function get_fixed_query($query_id) +{ + global $queries; + + if( ! isset( $queries[$query_id] ) ) + return null; + + $query = $queries[$query_id]; + + if( isset( $query['server'] ) && ( is_numeric( $query['server'] ) ) ) + $server_id = $query['server']; + else $server_id = 0; + + $base = ( isset( $query['base'] ) ) ? $query['base'] : null; + $base = expand_dn_with_base( $server_id, $base ); + + if( isset( $query['filter'] ) && strlen( trim( $query['filter'] ) ) > 0 ) + $filter = $query['filter']; + else $filter = 'objectclass=*'; + + $scope = isset( $query['scope'] ) + && ( in_array( $query['scope'], array( 'base', 'sub', 'one' ) ) ) + ? $query['scope'] : 'sub'; + + if( isset( $query['attributes'] ) && strlen( trim( $query['filter'] ) ) > 0 ) + $attrib = $query['attributes']; + else $attrib = "dn, cn"; + + return array ( 'server' => $server_id, 'base' => $base, + 'filter' => $filter, 'scope' => $scope, 'attributes' => $attrib ); +} + +/** + * Transforms the user-configured search lists into arrays for use by other components of phpLDAPadmin. + * This may seem a little strange, and that's because it is strange. + * + * The function takes the comma-separated lists (like the search result attribute list) in config.php * and turns them into arrays. Only call this ONCE per script. Any subsequent call will - * mess up the arrays. This function operates only on global variables defined in config.php. + * mess up the arrays. This function operates on global variables defined in config.php and is currently + * only used by search_form_simple.php + * + * For more details, just read the function's code. It's short and pretty straightforward. */ function process_config() { @@ -893,8 +2012,8 @@ function process_config() array_walk( $search_attributes, "trim_it" ); } -/* - * Call-by-reference to trim a string. Used to filter empty entries out of the arrays +/** + * Trim a string in place (call by reference) Used to filter empty entries out of the arrays * that we generate in process_config(). */ function trim_it( &$str ) @@ -902,22 +2021,31 @@ function trim_it( &$str ) $str = trim($str); } -/* - * Checks the server id for sanity. Ensures that the server is indeed in the configured list and active +/** + * Checks the specified server id for sanity. Ensures that the server is indeed in the configured + * list and active. This is used by many many scripts to ensure that valid server ID values + * are passed in POST and GET. */ function check_server_id( $server_id ) { global $servers; - if( ! is_numeric( $server_id ) || ! isset( $servers[$server_id] ) || $servers[$server_id]['host'] == '' ) + if( ! is_numeric( $server_id ) || ! isset( $servers[$server_id] ) || ! isset( $servers[$server_id]['host'] ) || $servers[$server_id]['host'] == '' ) return false; else return true; } -/* - * Used to generate a random salt for crypt-style passwords +/** + * Used to generate a random salt for crypt-style passwords. Salt strings are used + * to make pre-built hash cracking dictionaries difficult to use as the hash algorithm uses + * not only the user's password but also a randomly generated string. The string is + * stored as the first N characters of the hash for reference of hashing algorithms later. + * * --- added 20021125 by bayu irawan --- * --- ammended 20030625 by S C Rigler --- + * + * @param int $length The length of the salt string to generate. + * @return string The generated salt string. */ function random_salt( $length ) { @@ -931,7 +2059,7 @@ function random_salt( $length ) { $str .= substr( $possible, ( rand() % strlen( $possible ) ), 1 ); } - /* + /** * Commented out following line because of problem * with crypt function in update.php * --- 20030625 by S C Rigler --- @@ -940,10 +2068,12 @@ function random_salt( $length ) return $str; } -/* +/** * Goes through the user-configured server list and looks for an available server_id, - * ie one that has specified enough information to login. This is for choosing the - * server to display in the drop-down box in search.php mostly. + * one that has specified enough information to login. This is for choosing the + * server to display in the drop-down box in search.php. + * + * @return int The first available server ID found. */ function get_avail_server_id() { @@ -955,49 +2085,76 @@ function get_avail_server_id() return false; } -/* +/** * 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()). + * + * @param string $dn The DN whose RDN to return. + * @param bool $include_attrs If true, include attributes in the RDN string. + * See http://php.net/ldap_explode_dn for details + * + * @return string The RDN + * @see get_container */ function get_rdn( $dn, $include_attrs=0 ) { if( $dn == null ) return null; $rdn = pla_explode_dn( $dn, $include_attrs ); - if( $rdn['count'] == 0 ) - return null; + if( 0 == count($rdn) ) + return $dn; if( ! isset( $rdn[0] ) ) - return null; + return $dn; $rdn = $rdn[0]; return $rdn; } -/* - * Given a DN string, this returns the 'container' portion of the string. +/** + * Given a DN string, this returns the parent container portion of the string. * For example. given 'cn=Manager,dc=example,dc=com', this function returns * 'dc=example,dc=com'. + * + * @param string $dn The DN whose container string to return. + * + * @return string The container + * @see get_rdn */ function get_container( $dn ) { - $rdn = pla_explode_dn( $dn ); - $container = @$rdn[ 1 ]; - for( $i=2; $i + * Array + * ( + * [title] => "Invalid Credentials" + * [description] => "An invalid username and/or password was supplied to the LDAP server." + * ) + * */ function pla_verbose_error( $err_no ) { static $err_codes; if( count($err_codes) > 0 ) { - return $err_codes[ $err_no ]; - } else { - } + if( isset( $err_codes[ $err_no ] ) ) + return $err_codes[ $err_no ]; + else + return array( 'title' => null, 'desc' => null ); + } $err_codes_file = 'ldap_error_codes.txt'; @@ -1009,27 +2166,41 @@ function pla_verbose_error( $err_no ) return false; $contents = fread( $f, filesize( $err_codes_file ) ); + fclose( $f ); $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 ) - { + 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]; - $desc = $entry[3]; + $hex_code = isset( $entry[1] ) ? $entry[1] : null; + $title = isset( $entry[2] ) ? $entry[2] : null; + $desc = isset( $entry[3] ) ? $entry[3] : null; $desc = preg_replace( "/\s+/", " ", $desc ); - $err_codes[ $hex_code ] = array( 'title' => $title, 'desc' => $desc ); + $err_codes[ "$hex_code" ] = array( 'title' => $title, 'desc' => $desc ); } - return $err_codes[ $err_no ]; + // Sanity check + if( isset( $err_codes[ $err_no ] ) ) + return $err_codes[ $err_no ]; + else + return array( 'title' => null, 'desc' => null ); } -/* - * Spits out an HTML-formatted error string. If you specify the optional - * parameters, pla_error will lookup the error number and display a - * verbose message in addition to the message you pass it. +/** + * Prints an HTML-formatted error string. If you specify the optional + * parameters $ldap_err_msg and $ldap_err_no, this function will + * lookup the error number and display a verbose message in addition + * to the message you pass it. + * + * @param string $msg The error message to display. + * @param string $ldap_err_msg (optional) The error message supplied by the LDAP server + * @param string $ldap_err_no (optional) The hexadecimal error number string supplied by the LDAP server + * @param bool $fatal (optional) If true, phpLDAPadmin will terminate execution with the PHP die() function. + * + * @see die + * @see ldap_errno + * @see pla_verbose_error */ function pla_error( $msg, $ldap_err_msg=null, $ldap_err_no=-1, $fatal=true ) { @@ -1045,8 +2216,10 @@ function pla_error( $msg, $ldap_err_msg=null, $ldap_err_no=-1, $fatal=true )
'; + } if( $ldap_err_no != -1 ) { $ldap_err_no = ( '0x' . str_pad( dechex( $ldap_err_no ), 2, 0, STR_PAD_LEFT ) ); @@ -1054,20 +2227,24 @@ function pla_error( $msg, $ldap_err_msg=null, $ldap_err_no=-1, $fatal=true ) if( $verbose_error ) { echo sprintf( $lang['ferror_number'], $ldap_err_no, $verbose_error['title']); + echo '
'; echo sprintf( $lang['ferror_discription'], $verbose_error['desc']); } else { echo sprintf($lang['ferror_number_short'], $ldap_err_no); + echo '
'; echo $lang['ferror_discription_short']; } } ?>
+

+ * draw_jpeg_photos( 0, "cn=Bob,ou=People,dc=example,dc=com", "jpegPhoto" true, false, "border: 1px; width: 150px" ); + * draw_jpeg_photos( 1, "cn=Fred,ou=People,dc=example,dc=com" ); + * + * + * @param int $server_id The ID of the server of interest. + * @param string $dn The DN of the entry that contains the jpeg attribute you want to draw. + * @param string $attr_name The name of the attribute containing the jpeg data (usually 'jpegPhoto'). + * @param bool $draw_delete_buttons If true, draws a button beneath the image titled 'Delete' allowing the user + * to delete the jpeg attribute by calling JavaScript function deleteAttribute() provided + * in the default modification template. + * @param bool $draw_bytes_and_size If true, draw text below the image indicating the byte size and dimensions. + * @param string $table_html_attrs Specifies optional CSS style attributes for the table tag. + * + * @return void */ -function draw_jpeg_photos( $server_id, $dn, $draw_delete_buttons=false ) +function draw_jpeg_photos( $server_id, $dn, $attr_name='jpegPhoto', $draw_delete_buttons=false, + $draw_bytes_and_size=true, $table_html_attrs='align="right"') { global $jpeg_temp_dir; global $jpeg_tmp_keep_time; global $lang; $conn = pla_ldap_connect( $server_id ); - $search_result = ldap_search( $conn, $dn, 'objectClass=*', array( 'jpegPhoto' ) ); + $search_result = ldap_read( $conn, $dn, 'objectClass=*', array( $attr_name ) ); $entry = ldap_first_entry( $conn, $search_result ); - echo ""> + + + - + - - +
\n\n"; + echo "
\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"); + $jpeg_data = ldap_get_values_len( $conn, $entry, $attr_name ); for( $i=0; $i<$jpeg_data['count']; $i++ ) { // ensures that the photo is written to the specified jpeg_temp_dir $jpeg_temp_dir = realpath($jpeg_temp_dir.'/'); + if( ! is_writable( $jpeg_temp_dir ) ) + pla_error( 'Please set $jpeg_temp_dir to a writable directory in the phpLDAPadmin config.php' ); $jpeg_filename = tempnam($jpeg_temp_dir.'/', 'pla'); - $outjpeg = fopen($jpeg_filename, "wb"); + $outjpeg = @fopen($jpeg_filename, "wb"); + if( ! $outjpeg ) + pla_error( 'Could not write to the $jpeg_temp_dir directory (' . $jpeg_temp_dir . '). Please verify that your web server can write files there.' ); fwrite($outjpeg, $jpeg_data[$i]); fclose ($outjpeg); $jpeg_data_size = filesize( $jpeg_filename ); - if( $jpeg_data_size < 6 ) { + if( $jpeg_data_size < 6 && $draw_delete_buttons ) { echo $lang['jpeg_contains_errors']; - echo ''. $lang['delete_photo'] .''; + echo ''. $lang['delete_photo'] .''; continue; } @@ -1214,13 +2433,15 @@ function draw_jpeg_photos( $server_id, $dn, $draw_delete_buttons=false ) } echo "
\n"; - echo "" . number_format($jpeg_data_size) . " bytes. "; - echo "$width x $height pixels.
\n\n"; + if( $draw_bytes_and_size ) { + echo "" . number_format($jpeg_data_size) . " bytes. "; + echo "$width x $height pixels.
\n\n"; + } if( $draw_delete_buttons ) { ?> - Delete Photo + Delete Photo
\n\n"; @@ -1229,37 +2450,51 @@ function draw_jpeg_photos( $server_id, $dn, $draw_delete_buttons=false ) if( ! isset( $jpeg_tmp_keep_time ) ) $jpeg_tmp_keep_time = 120; + // If they set keep time to 0, we up it to 10 to allow the browser to fetch it before it is deleted. if( $jpeg_tmp_keep_time == 0 ) $jpeg_tmp_keep_time = 10; // delete old jpeg files. - $jpegtmp_wildcard = "pla.*"; + $jpegtmp_wildcard = "/^pla/"; $handle = opendir($jpeg_temp_dir); - while (($file = readdir($handle)) != false) - if (eregi($jpegtmp_wildcard, $file)) - { + while( ($file = readdir($handle) ) != false ) { + if( preg_match( $jpegtmp_wildcard, $file ) ) { $file = "$jpeg_temp_dir/$file"; - if ((time() - filemtime($file)) > $jpeg_tmp_keep_time) - unlink ( $file ); + if( (time() - filemtime($file) ) > $jpeg_tmp_keep_time ) + @unlink( $file ); } + } closedir($handle); - } -/* - * Returns the root DN of the specified server_id, or false if it - * can't find it (ie, the server won't give it to us). +/** + * Gets the root DN of the specified server_id, or false if it + * can't find it (ie, the server won't give it to us). This is + * used when the user leaves the $servers[$i]['base'] value empty + * to auto-determine the root DN. + * * Tested with OpenLDAP 2.0, Netscape iPlanet, and Novell eDirectory 8.7 (nldap.com) * Please report any and all bugs!! + * + * @param int $server_id The ID of the server whose root DN to fetch. + * @return mixed The root DN of the server on success (string) or false on error. */ -function try_to_get_root_dn( $server_id ) +function try_to_get_root_dn( $server_id, $ds = null ) { + if( ! check_server_id( $server_id ) ) + return false; + + if( isset( $_SESSION[ "pla_root_dn_$server_id" ] ) ) + return $_SESSION[ "pla_root_dn_$server_id" ]; + + if ( $ds == null ) { 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 ) @@ -1268,73 +2503,80 @@ function try_to_get_root_dn( $server_id ) $r = @ldap_get_entries( $ds, $r ); if( isset( $r[0]['namingcontexts'][0] ) ) { $root_dn = $r[0]['namingcontexts'][0]; + $_SESSION[ "pla_root_dn_$server_id" ] = $root_dn; return $root_dn; } else { return false; } } -/* - * 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. +/** + * Hashes a password and returns the hash based on the specified enc_type. + * + * @param string $password_clear The password to hash in clear text. + * @param string $enc_type Standard LDAP encryption type which must be one of + * crypt, md5, md5crypt, sha, smd5, ssha, or clear. + * @return string The hashed password. */ function password_hash( $password_clear, $enc_type ) { global $lang; - $enc_type = strtolower( $enc_type ); - switch( $enc_type ) - { - case 'crypt': - $new_value = '{crypt}' . crypt( $password_clear, random_salt(2) ); - break; - case 'md5': - $new_value = '{md5}' . base64_encode( pack( 'H*' , md5( $password_clear) ) ); - break; - case 'md5crypt': - if( ! defined( 'CRYPT_MD5' ) || 0 == CRYPT_MD5 ) - 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( $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( $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': - default: - $new_value = $password_clear; + $enc_type = strtolower( $enc_type ); + switch( $enc_type ) + { + case 'crypt': + $new_value = '{CRYPT}' . crypt( $password_clear, random_salt(2) ); + break; + case 'md5': + $new_value = '{MD5}' . base64_encode( pack( 'H*' , md5( $password_clear) ) ); + break; + case 'md5crypt': + if( ! defined( 'CRYPT_MD5' ) || 0 == CRYPT_MD5 ) + pla_error( $lang['install_not_support_md5crypt'] ); + $new_value = '{CRYPT}' . crypt( $password_clear , '$1$' . random_salt(9) ); + break; + case 'blowfish': + if( ! defined( 'CRYPT_BLOWFISH' ) || 0 == CRYPT_BLOWFISH ) + 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( $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_MD5, $password_clear.$salt ).$salt ); + } else { + pla_error( $lang['install_no_mash'] ); + } + break; + case 'clear': + default: + $new_value = $password_clear; } - return $new_value; } -/* - * Returns the version as a string as stored in the VERSION file. +/** + * Returns the phpLDAPadmin version currently running. The version + * is read from the file named VERSION. + * + * @return string The current version as read from the VERSION file. */ function pla_version() { @@ -1347,86 +2589,71 @@ function pla_version() return $version; } -function draw_chooser_link( $form_element ) +/** + * Draws an HTML browse button which, when clicked, pops up a DN chooser dialog. + * @param string $form_element The name of the form element to which this chooser + * dialog will publish the user's choice. The form element must be a member + * of a form with the "name" or "id" attribute set in the form tag, and the element + * must also define "name" or "id" for JavaScript to uniquely identify it. + * Example $form_element values may include "creation_form.container" or + * "edit_form.member_uid". See /templates/modification/default.php for example usage. + * @param bool $include_choose_text (optional) If true, the function draws the localized text "choose" to the right of the button. + */ +function draw_chooser_link( $form_element, $include_choose_text=true ) { global $lang; $href = "javascript:dnChooserPopup('$form_element');"; $title = $lang['chooser_link_tooltip']; - echo ""; - echo "". $lang['fbrowse'] ."\n"; -} - -function get_values($link_id,$entry_id,$attr){ - if( 0 == strcasecmp( $attr, 'jpegPhoto' ) ) { - $values = ldap_get_values_len($link_id,$entry_id,$attr); - } else { - $values = ldap_get_values($link_id,$entry_id,$attr); - unset($values['count']); - } - return $values; -} - -/* -function utf8_decode($str) -{ - global $code_page; - if( ! $code_page ) - $code_page = "ISO-8859-1"; - return iconv("UTF8", $code_page, $str); -} - -function utf8_encode($str) -{ - global $code_page; - if( ! $code_page ) - $code_page = "ISO-8859-1"; - return iconv( $code_page, "UTF8", $str); -} -*/ - -function get_code_page() -{ - global $code_page; - if( ! $code_page ) - $code_page = "ISO-8859-1"; - return $code_page; + echo ""; + if( $include_choose_text ) + echo "". $lang['fbrowse'] .""; + echo ""; } /** - * Convert the string to the configured codepage and replace HTML chars - * with their &-encoded equivelants, then echo to browser. - */ -function pla_echo( $str ) -{ - if( function_exists( "iconv" ) ) - $str = iconv( "UTF8", get_code_page(), $str ); - $str = htmlspecialchars( $str ); - echo $str; -} - -/* - * UTF-8 safe method for exploding a DN into its RDN parts. + * Explode a DN into an array of its RDN parts. This function is UTF-8 safe + * and replaces the buggy PHP ldap_explode_dn() which does not properly + * handle UTF-8 DNs and also causes segmentation faults with some inputs. + * + * @param string $dn The DN to explode. + * @param int $with_attriutes (optional) Whether to include attribute names (see http://php.net/ldap_explode_dn for details) + * + * @return array An array of RDN parts of this format: + * + * Array + * ( + * [0] => uid=ppratt + * [1] => ou=People + * [2] => dc=example + * [3] => dc=com + * ) + * */ function pla_explode_dn( $dn, $with_attributes=0 ) { - // This is a work-around for broken imeplementations of ldap_explode_dn() - // that ships with some versions of PHP. It has been known to seg-fault - // when passed the '<' and the '>' characters. - if( '4.2.2' != phpversion() ) - $dn = addcslashes( $dn, "<>" ); + // replace "\," with the hexadecimal value for safe split + $var = preg_replace("/\\\,/","\\\\\\\\2C",$dn); - $result = ldap_explode_dn( $dn, $with_attributes ); - - //translate hex code into ascii again - foreach( $result as $key => $value ) - $result[$key] = preg_replace("/\\\([0-9A-Fa-f]{2})/e", "''.chr(hexdec('\\1')).''", $value); - return $result; + // split the dn + $result = explode(",",$var); + + //translate hex code into ascii for display + foreach( $result as $key => $value ) + $result[$key] = preg_replace("/\\\([0-9A-Fa-f]{2})/e", "''.chr(hexdec('\\1')).''", $value); + + return $result; } -/* - * Convenience function for fetching project HREFs (like bugs) +/** + * Fetches the URL for the specified item. This is a convenience function for + * fetching project HREFs (like bugs) + * + * @param string $type One of "open_bugs", "add_bug", "open_rfes" + * (rfe = request for enhancement), or "add_rfe". + * @return string The URL to the requested item. */ -function get_href( $type ) { +function get_href( $type ) +{ $group_id = "61828"; $bug_atid = "498546"; $rfe_atid = "498549"; @@ -1435,12 +2662,15 @@ function get_href( $type ) { case 'add_bug': return "http://sourceforge.net/tracker/?func=add&group_id=$group_id&atid=$bug_atid"; case 'open_rfes': return "http://sourceforge.net/tracker/?atid=$rfe_atid&group_id=$group_id&func=browse"; case 'add_rfe': return "http://sourceforge.net/tracker/?func=add&group_id=$group_id&atid=$rfe_atid"; + case 'donate': return "https://sourceforge.net/donate/index.php?group_id=$group_id"; default: return null; } } -/* +/** * Returns the current time as a double (including micro-seconds). + * + * @return double The current time in seconds since the beginning of the UNIX epoch (Midnight Jan. 1, 1970) */ function utime () { @@ -1450,4 +2680,116 @@ function utime () return $sec + $usec; } +/** + * Converts an array to a query-string with the option to exclude certain variables + * from the returned query string. This is convenient if callers want to convert the + * current GET query string or POST array into a string and replace certain + * variables with their own. + * + * @param array $array The associate array to convert whose form is such that the keys are the + * names of the variables and the values are said variables' values like this: + * + * Array + * ( + * [server_id] = 0, + * [dn] = "dc=example,dc=com", + * [attr] = "sn" + * ) + * + * This will produce a string like this: "server_id=0&dn=dc=example,dc=com&attr=sn" + * @param array $exclude_vars (optional) An array of variables to exclude in the resulting string + * @param bool $url_encode_ampersands (optional) By default, this function encodes all ampersand-separators + * as & but callers may dislabe this by specifying false here. For example, URLs on HTML + * pages should encode the ampersands but URLs in header( "Location: http://example.com" ) should + * not be encoded. + * @return string The string created from the array. + */ +function array_to_query_string( $array, $exclude_vars=array(), $url_encode_ampersands=true ) +{ + if( ! is_array( $array ) ) + return ''; + if( ! $array ) + return ''; + $str = ''; + $i=0; + foreach( $array as $name => $val ) { + if( ! in_array( $name, $exclude_vars ) ) { + if( $i>0 ) + if( $url_encode_ampersands ) + $str .= '&'; + else + $str .= '&'; + $str .= urlencode( $name ) . '=' . urlencode( $val ); + $i++; + } + } + return $str; +} + +/** + * Gets whether the admin has configured phpLDAPadmin to show the "Create New" link in the tree viewer. + * If $servers[$server_id]['show_create'] is NOT set, then default to show the Create New item. + * If $servers[$server_id]['show_create'] IS set, then return the value (it should be true or false). + * + * @param int $server_id The ID of the server of interest + * @return bool True if the feature is enabled and false otherwise. + */ +function show_create_enabled( $server_id ) +{ + global $servers; + if( isset( $servers[$server_id]['show_create'] )) + return $servers[$server_id]['show_create']; + else + return true; +} + +/** + * Reverses a DN such that the top-level RDN is first and the bottom-level RDN is last + * For example: + * + * cn=Brigham,ou=People,dc=example,dc=com + * + * Becomes: + * + * dc=com,dc=example,ou=People,cn=Brigham + * + * This makes it possible to sort lists of DNs such that they are grouped by container. + * + * @param string $dn The DN to reverse + * + * @return string The reversed DN + * + * @see pla_compare_dns + */ +function pla_reverse_dn($dn) +{ + foreach (pla_explode_dn($dn) as $key => $branch) { + + // pla_expode_dn returns the array with an extra count attribute, we can ignore that. + if ( $key === "count" ) continue; + + if (isset($rev)) { + $rev = $branch.",".$rev; + } else { + $rev = $branch; + } + } + return $rev; +} + +/** + * Strips all slashes from the specified array in place (pass by ref). + * @param Array $array The array to strip slashes from, typically one of + * $_GET, $_POST, or $_COOKIE. + */ +function array_stripslashes(&$array) +{ + if( is_array( $array ) ) + while ( list( $key ) = each( $array ) ) + if ( is_array( $array[$key] ) && $key != $array ) + array_stripslashes( $array[$key] ); + else + $array[$key] = stripslashes( $array[$key] ); +} + ?> diff --git a/header.php b/header.php index 6112da3..f18a238 100644 --- a/header.php +++ b/header.php @@ -1,4 +1,6 @@ -" lang="" dir="ltr"> phpLDAPadmin - - - - + + + + diff --git a/images/add.png b/images/add.png new file mode 100644 index 0000000000000000000000000000000000000000..7c04bad6a1f88c88918c37781b8d1378a054216b GIT binary patch literal 528 zcmV+r0`L8aP)ct=6WrA)4!Hdj;H&6Z};-QC94_&1uZPunWrtz?@GxW!N;e{6--Ve|B`SM6W z#Ns1y!I6L{ismyUNxBd+1+?4km|)vB-ENn3I=vKcDZFn9ypq za9x*PuSd07UFc%!U_2hj1k17rf`D?l{I83daHoJU3}b*op#Z?co!4w$&9j!a_|g)y zTt0(orMP+LI-0JMGIcVx$?mNhKqN0(&y{QIXu8UZn!qrU04TDItVpQ3%({Jfc?O1I zpePEJ8`BWk+O7cb?)fKDrhX1+G#b?F^%%hIcxbxH=MP^|WSOn)3Lp2s;17ljya2yH zItLVs#hDR~f4Eo~gFiuttekGm9}F4!A)|iCiPv9T79oV$Y&N~8yZhuf*N`Vk1*3@H zen`*hQ#-hKT9+j~i2&~3enIw9j-;V6I2rP@bIjh+UP)4pXFCHvZDpV>$L9qlRL?K1g)MO(yP2)ywlQecW|6H^0ZFb-8 zo9UseX#L+?2ZmvIGr#X|zB9k?_rd?YiDz8b1gr$!20j2BAP2k(c+U$eP19W4-rl~u zv9a-}ZQB{sH1m7+?)7_mdIHyV1JCpPiHV76$8pX+_mM)O(81>B=HkA6`-1c5&#Pjw zSW!v^T5Iijp6=`G)9G|t&&hG7^;DM_c( z2qCCcDtMk3D5aiCaVVKgZl9Z*JEfGW357x-fMhaxZ$W*1J?-u796EG}SS-f;{5-i_ z4k@Ju@=v|wEnBuM9yxNv)>+adLYZs?apAPQsHv zZLFGF28V{4J=a~me*JpGaU3x+GSXU8Q}bnOYb)2TUDNjfGMP-pb=}^9fq|*%>FIY8 ziGPLf!9+%C*g9k~c)A)Xw3uk)RSQqE?$PhpbSg6($ z_W>vau%(n|PMkOqcO0kAG)<(G4+K_9aqir?#jdWd8{^~SGaVfru|jrMhBQpf&0rcb zU(q@RgsZGPP=La=?H9x0@K7`wz1h^%l>PqLG51O;rElN9t&7E?zI5qQ(9qD30d`3# zx3smjy}RelZ9O~JC-kQJl{zeqf`GSxRX`)K45$Unf0w!i^hFFa*|DZA5?{H3O|NZM zLjwbgH+~*GDq;9`#rJbTx%A=A-TQw{T}f1wVrX^>L&)!Z6?_9^t8^8Cf_Q{}55Cd7 zZi6j^sPoI7p;VnMq;9h8Akf+?DRpO2E6?gothsvSm#AAVQC0z0=d)T0@rC+_s^5V* zARl^2s}YMEHmn=mzWMdd;X<)~axf(qGFgI3B_x%yOheX1q(I9MrJ#b+no6K(jV@DD zh5XCD4i@e!WokM-=+cs)ZH-ze-OY zD2eCrZdnDZ0qTHAHJ}Fs)$ghbP^ykf{Kp@K`zz6?&Se$oZr1>R126Y5vM0>T^Z)<= M07*qoM6N<$f{EdFd;kCd literal 0 HcmV?d00001 diff --git a/images/children.png b/images/children.png index e3495ebe5e51822e63a4b0be5df8106d835ba297..6fdc884244c2fc8853003865a8ca6e8e81b5750d 100644 GIT binary patch delta 333 zcmV-T0kZzK1J(i|iBL{Q4GJ0x0000DNk~Le0000G0000G2nGNE03Y-JVUZyee*p_g zL_t(|+O1MOO9Md^oOgSt`6vE@RQ?z(1;N%Lg|%HsCxQ}Cu#JV48Vs_vUnG*Vx-LjO z6i+VMdwJ=C7k6({IOXij@OIuK{Dr^`S|&o9>aKr-ar%yYnnUXzCdCxT2WQqqYe2yU zP!Xb9fb{zV+1HPABx^uG3M>XJe+(Z28>y7Sst8;UA_5}v286EWXP7}jRc(lt*CPAv zJ=8Zgv8L8xn89Muxx82iM#&ql&tFQu-(R4^trqSdZjl!`jF?io&1~y{nmb3(k6kbu zgcMbpT_w_Kqm5zwjLc+}W*=m?xh+o z2M(>^Ukz+r#?C<9_cRf8RS|Y#VA4Pmr^62nGSc2DJqM;x*DDBPF>;orh5Z{3(R~-On8B%gB;y<&fIo+rzD*H5+yU!S|40A;7Tp1} znIfZjghsijZiig^l2>!_{_+Gr5~#Kp%dK2`q@n@LW=bXrVlhLt{g23_VF;)0rICLF YD2jYy$@QmV00000NkvXX1g=70f=IHk@&Et; diff --git a/images/files.png b/images/files.png new file mode 100644 index 0000000000000000000000000000000000000000..76864d496e46155ccacb5725d67bedfa583db7d8 GIT binary patch literal 1113 zcmV-f1g86mP)kZGm~O>9UI#?M_TRPb7$xK z=KJQHv%)SzL@lC?Mh^V`71K9=;Lcq)h#>U3x&!0bk zJWbOggs>x#q9{m`#GgNZ{`2(o^cTP^5CP?`%0y9=03Tera%J7!eQj;c(lqrnO}*dm zZ(LcHxw~7p+tuaeWxsUk^Iw5+5!tu7a@m3Tvx$j`6J=RONs@%!m`72>p+g5bb7qvq z#YLT(`Zk`K`TmD2%dP=!U>&e{lc@=C@a);M$F5($-dbB*^Ei&BF|sjJL>L|(rq}Dy z>2&pti*JN^XlKJ^(sH)WZCqMusZkVd7 zH~MatrIAL}h~q$-_L-WR;>nZmc>44yH*el#cJ?Q-EZ=e6G#*IPicOFRxc?`Oh?D09 zBP08nn3!N>WFJ#g)6CC5qb$o^7iIkRL|K+~1&SGfQI>{TNm(j+o^$NjQ7&HmjJdfv z@;paG==b{@)z%B{T>y@m<6b3IRf?jdEKAHvR7=*^-;iY)Aq3nZNn&cbH||>in#r;( zFf&xEgsO^a1sXz(nV_nG;|~3PA2TJ(vdtB22WTeqJVPX)T2PjXnb!c2Bw(ggp@K-m zod4^A)9+_QQN^+>6{zH?5>$RPajNQBmW!&nYAHKxrkeqzmL*4(n!Rqw6-9w43YZ!0 z)@Uvv2yqTIFN&NredF$x=~Z&ATh?$F%#4OVR3@1rP+j=1~#R0sZEpA=s2z!|Ut^y=ih9{Ne0xJ7kv3wsZ% f%}ndNy&do`r4zaIE2bJ-00000NkvXXu0mjf$oM8t literal 0 HcmV?d00001 diff --git a/images/go.png b/images/go.png new file mode 100644 index 0000000000000000000000000000000000000000..78dfcf833710eccf9ad7b4e58542e23f6de06908 GIT binary patch literal 440 zcmV;p0Z0CcP)L-G+J2%#LmLX*2>aOQshrah+ttEh(>%w zn-qe&D;gh}Wp?&j7~_L%valaaHJo$ronZzhXLic|)JRr|WR*y>b(l#akNpSPs%<1n zoL_B@Tj)@;xUj_L{yKpFU!nlfdO&DHj5UOj#@GmL20Xp`NUR9n0(7J~X&-U0UE?Lt zMIaanZtuFZd#6}2KfQ|(6XPfsSIuC=V6EZ0d&bV%Eh z>K%Zh^QBD9{(*tO1Gws4^4|X#3*-yAL>Pv*Fsb57b(wr2Hx>r)hLWU6QsuOfa;22* iEo6be1)2VXsqiQ56R^dOP)`DgOWf1gS|x zK~#90m6c0xTSXX#pE(y_Vmr3u=29naLfxbn)F4tyl~TGaD}4EwTrSSi!Pc5HVs5c8@FkjrZ|`8<|K`8$3D5(KK2ZY2IQncfmfQv=$v_<`M!Ba zBiO0-w$_%f8+;9?cv)4;vTo;c*5^QNd(=y9j~z00%|CtXT>shg=T291xjdRCFbspL za0;`gUSILP6yINjZGDwQ%fZu~+flL-KQz$h@j4XJ5${z58+OPE-z zX}pGy#pE;6x#!GmxXEpm7`}CnM&|&>dyaA9Se&ErRwf>el1L;N8yf=%0Ih%r&~~4J zKq(e-DYn8UiRm#0?%rl9HH#iPfnHMts}Uk?5l;1;;P{bdW~T1(@ct0#bQ(?5kW%V^ zYujAZ0|a1Ht2GvqDeexA;nn@q3Zm237`p$Cielzx;cHmpZ@-SLXANxP6bUkL_%)nXA_K!-skbtc`6*D zwKdJjlPAe!GP@JH0{}p+RwJEG6OYHac<~~BuaD*BWs3O}0Z*Qx@ma7t*HKlzX&@oplK z2-T`XI2_{6ogvoN*7gSoA&5q!n1(@WDMdIOCKL=2>^?{Il{38UauEtQ;qiFUG=Z*b zbai%;NF*qi%lo!S2_f+Ld=&C|%9Rp@f<-XcNNcp6#f5p&YtNaPnZh((#13^53WZTX zLxT^;arOl4xCcrpq^wbuHFQHqB0-0OmFLQpAGmz^63=F57#{wEWHL#iSfE@f5eWG3 z`~CY?@HYq3G|>$mm&>G7+M-h4BGMEl+!Urzu*m1L6pI$+atV|RA;ilzd$mX@g+kF3 zX~OMxqiGtoT8+ua4{2#Rz}Yizva~dZ?((1n*mjXkP3PI%9Hwdhw+aeYfmp1ASjQox zlvFAeRwKDz>E-ca0bM(azhCx?X zCk+h^WP7u0Zfziy1SHvfmIsLkRLXlF@SXs}FnIXr5gxCHo}M1uE)%cUM{|q7=l5gV zMK(6p$>y@$9=L^F+@SCEH?ZyT{Q*iT9LJ$jDKj!M!u0eM(da?i+uKn1DC@?ws zgk*AxN~y}JzSBe^5wh9r{(zO0m5rM>Z~DAmFM&XSrKKfCNAF^q2AZxRYZA+{ux%T+ z+f7^BLDtvT$z(Fvwk>(_$m~#kzJw6sBTdsj6GDW5e`2AO+AD{uKAuv_=TgewfIopD zU=46~FZ2R2;4l!b+rYmEeWyy>#uGpRsO?^;13sW}8}@$yiWe=~0P=tXsJ{R|KLSzf SPxwOs0000WFU8GbZ8({Xk{QrNlj1+3MgYKATls8GayP~Yjt8ECu(VJ zZDC_4AX9W@X>Mh5Co}I@000AjNklFZBx>O9&-t_^ipF8m|jYaF(Ot?Kvbn*dD~bk zMX%kp_uYebRjpQSlN>rQush$*{O3P2-)soKoCXSgHZEU&pBIsP_rAF(^atPH-zS|; z1K>CgSFc{-#`OBZ@z-v-Ri~n#~qxPiGk$9VPR|5`Ub zPXz%0QmGWGss>nia{taPS{i&Gh1+-UcZ?1!FTdUWeqwThCx3{80aR6`*=*uCPS+t4 ziFD6jdj(!j*;JIU&u?vQz5ATWoa9(49t1E=lUOWRyrg z-~R-_vP>>qSnN=7)c{3{2A`m&@_twMzgz_~LJ$TrM|o>bzq40D4Q)+XGo{bL-{}KD)V! zLvXU{Ppbi&qIOt^dgGT$B?LjB(P-c}4yI|cxw%Q9@aRQX#T6gG!NGwqd($-0G>u3k z;$!4E4zXAaQ50ENSm;mGC%zKdw#~-I2BIi3Jv~h}n`LBVq|2yR4-XG%wOaqlBG7|! zxlA^jWqW&@+1XiItrnsv`j|P6Ln4tN6bd~*z|71HTU%SKtgH}^$4MrW3=a2w-h*GZ?-G@DHf z!@x96EX(STWBn6@s0ZK$k4B^Dy3Wzj5td~k%QCvIqpE5*ux;DD7dP~842}cT>vbxX z&JJlb8Yqf_q9|0WRb*MFR;!_D8ufY|S(ba_i~==48C0qSFavz*9zL&r;{MOaykY5; zkgEwG1;pKV!ELmzLe*~RL zL_t(|+KrZ9Y!p=##(#5XXSTbxOVe}>YnK$3wiqxHni|3%V@t$`#)s+yCWZ$vK@(m` z1hnzN_yQOb6Mc{ullB3OF*Nl7iKe237!slli7r$qUF@dYZM#d$cH7z6KeKav=+1Vx zt-wi6X6D}9^PTgZ@7_BK754Dqf5RG9Stu0Bm0p#KVOjF0ns5TI7ktm2J+AK>$%^dX1Y|0ea=s6hK-X4K zX$KA*crhA{-tO(~Ehdvm4jw#6I-Mq!O5ykWi9{mw_xA%_0a#jE;?A8re*oVD-K#;? z0L;zJy##Rj^lA0#)vH!87-akQ?d;gGgRNV)5)Oy+yLa!VudlDXW_EU#2M-@ zzWnHecZToJ^Z^VG4w6VDoCf~3I>NDI$EdAc$wk+7E?v6B;lqb7e*(9Ge;k?=XM=@8 zAu|;pB|krjx%h~D#vq$nVDWJZGm`;8(=_xNH^QZ&xog zDQ(W`9w@mqx%3Q1B1+a+BJ()OTr$Cuu>=x4o*Hzo2UQhl>dHw`S69c)n>X3FZ{G>v zyAr@!71_3pEG|#mkXh~X!LmzSq~Yvja^cAXIB@7 zVW21q+qP{(f7kWp>J_E@?Ck7xQr=kI1KUCtG8A%)G#V|BJD@=QsvamvRYM3jE=?!6v4L7uVw&zM!8w6Kp%B0qfNXAVJ~cTxiJ~av z^ZEZd?20y$BC=S(DipACxl&IoWYGfPm!Y9D9RP>ke`r5>;_aQMoE>dh7DGcr&h$dn zJ^S-FA2adqIN60HSu;y6mnEOgQm~2$6ly#=gQG64UAu;17-*VCFc<_N7K@?lI%8vF z?BBm1;632SGQi7z{e{1i`Kf0)&Gzoy%fP?@w!L!xg~MT_lyrA@1M~tv0e34aPyiLs zOV8DRJQ9`moX_Wrr_<^6=H3VX0PX=f^nh?M4cdc2qp?sR z+Y(m|G+AkyR1>5v)WzBq*1>&re`a=eX7}^rFZqeJwKcNYEUK!qv$Mm@%#2i372o#( z=ytnoZEcB2B!X?*ghC;-L?VF@g45GeW@l$*yEm{Vq!wBuCC&F9#d0OSeAvZ>r75gqN*y3i;Gk$718VU&{S2We^4k81Oer8 znYp<+*4NiXG#aJdZZkGECa0&T$>nm?YBdbQKjp%g=x;~~ErsKC!RhL9c!D&dOuVI=Q0OGMU=~O?gZF~m; znKZ*vfK0@aQbm_45!nY)fB%0vDWt9?x6dNvsYD!V^1d~TG*g(ZIYrbjBR zqt&dxxVF5)Ypow(N(53>!G& znRiG?cd0(U&$&T|-}irJ@4*ue{!qBO)WdUfsM(bAq3gEkdLcf$vclVM&NKhfEx!I@ zAJ4l>K5x>WJHwxc0SEgX?muWFQU=npt2nJgj2P5vzoCVE0>4cne240jd({4|Q`-24 zm9OCFKtp@x!3US$f90)<7x{c)iEGO@a9v0x;nF+s`WyY2nL*-4j6|eKB9=j<5=g7Q z%k_BghLEUS(iVr{z?sH;x%D z#yCD{5m&%=p(kMI?8`K)BA)^mS#w!on$PCbV|FS$#=GvOEa4?2#5M4 zCL|;@8tynZ=lA&o2M+u=d!%E5+KMPPAULMp<;CN4h>54iVEszV>c92klE;8b4*XD4 zWn8YPR4n#KJZfK8BM>}{O_5M$W@bJ-dkRa)dPmVe;xjilM93dxbd#8vEphFD+Hr$9 z8`ZYdh%z6)n*BeO>$F5&&40&zjyymRGku)_5c~;Wxk@=hBCL7e%a;>!fbFVdQ&MBb@0H1D`bpQYW literal 0 HcmV?d00001 diff --git a/images/rename.png b/images/rename.png new file mode 100644 index 0000000000000000000000000000000000000000..320d2e5f174cf3af7c1b5559a86e483253a7f01e GIT binary patch literal 418 zcmV;T0bTxyP)F^cdONE`KCSRK6_m1ODkBGErh`4&LLa7 zM|s>@yS#!{tF@qbwOZwD`;F84^&H?nssm66p`db>WokB?ves%m9&0ojX*e8eFc_%c z?<-AH)$4TuGQaisGrn=Y0l?$&W8oJ51hm_204kNrf<}d>?7hc(Usx=c%lX`U&%@CJ z03iebN~O{lpxf<|BnigMHBFL)EXx)$O2Qa}wU$n&13RP%G!BQHE)NWj~ zMXAsRDK6X6MK=|)h?}mYDcXe=L5kIwk{A^&n1PH*W+o=@&%LLM%nUJoNzH-7d+)w; zzwdtceD6L*a72M7U|0G1Prw0|*Qwuh3<1CO?B6Hbw>Jy$Bk%zb+bmFMo$;@K`2M^8 z_O|URo!(8dW=r?fy$5r^7%NI%IP8G2FEW`-|HB89a_g_#)YsM1*49cQ5kJ<^kv^78 zCaZ;7Yi4FFeu5L@>tSx-KIl zBk!F(dp7*&(W7^Qu&jWwpGHSVZ;27Ttue*Ie4g8P#z}X+LVbNbg+hTsp+K=%#Bm%B z9y~}Ym3n(KTl5gP^7)rv(cIj$w^S<8($Y#IkzjCekeZsU?AX!5p+ko_dh{q-Ym`#! z;Rh-JI0>BGxpNmMPJGDe)29iC!@SX(<>QY|U@6V;@HgDQf1kz0MT{|TM_+cr<1J|&;e)7aR^nKNf_T^A9lrssKx2-$3w zR4OIL7y-oheepa`+m|n2UKWvY-~sSEumwmwdGcgmXJ_ZPckkZC^E^tW5?x(gLX<5$8l(CYQk}x zN|T-P!k+8+hBk$j6LV>4iRI;GM1)u@MkEqhnQU2WE&3ljZAef#HH|TZLLq$Luaau5 z@qHhybwxqoffPibSosk}Dg+`@-4@q%tBNY`$`L8gdyXiGAOs|UOy$rEqF$YW~utOSM{ST-PNMiBv%y#~~C7k z2HpiaRw-4h5>}e3fvdo;z%#)AKLW~tq4KKiRds8x!ivRRz$@QB=cIoDmJ8@U{kAEW P00000NkvXXu0mjf?X@7& literal 0 HcmV?d00001 diff --git a/images/server-small.png b/images/server-small.png new file mode 100644 index 0000000000000000000000000000000000000000..3d1e0f6f2d001067cbcea1886ebdbc288166253b GIT binary patch literal 818 zcmV-21I_%2P)4Q_ zK~#90wU#|g96=bzf46TJJzv-h1Y;XWagBwQkeEmy`Vp-C0M<6aGTk*6rm^)igg`3G zkm|rngMx$@WIb1J?{;@)pA^n6yXSerK?a7~nc4gQ{?9Yd3=99c)t*?lflp)BkAUx! z!tH~DgCniAD5WGx5{ctj`u)B{Q6#-yPxkls1^76T`p(YIky1*OQj(@=0T>Jh6-c|? z7U08UI?iJYmSw#;J3GU5-C{1wG5|z`EX&YZv%0zp@RmnX^(X+q^E|GvuM5E}%Mg)b z97Pdxb93V)#sktcErf@~%g~7cBErqh4O;6$c(^;xSbt9gn$0Fjl2qK6dmP84X*wAI zKq*BK1Y`HW_x;Huh@yyIuUE-?`8kRr=I7@p2l&2^@B4*Y+qNqpfUB#k$p8SIPKS$& z3w+iX#5b7uYVc} z))ubok|ar`n#%Pbh9R4qn*d)H78Wjn-@qyGt5&Q1agL9VyTC1Q!u{>(0M7dQ`fi^4 zQQ}%_9LGUK2!fyud=7#@0UAgF1!xDbjIal|z%yVDKx>WGx^kk+XJC4II*-HyW{hxR zGME9GlatJXZC;u!yG@ehL5U_wLcLzk0XEPFZj7E7fH-DQ-aQ9slp|0|Jva+-92c8x zqMk9S&P*@F@>VlWT)-*Ux^3G4m21MbZ9LB-j^iBA1VWR6!t^k}GS5+`(>dMS+k2Hm zM%_gK=jZ1Dzs&zVV^Wnx^JW?MQ$xLO=3VnnIi+G8_klYT!JXMp83o8Is#Y53bC#JO w-m{GRBFT*Nyl5UokdH@wX$;TFm~mz8AC;p_HNj{qe*gdg07*qoM6N<$f&eym5C8xG literal 0 HcmV?d00001 diff --git a/images/tools-no.png b/images/tools-no.png new file mode 100644 index 0000000000000000000000000000000000000000..96a04d1cab952df906da9a7c824290c60524b51f GIT binary patch literal 798 zcmV+(1L6FMP))%Q5fn%!4!42+UDGb5N)zE?_QiOr03lY&vkw8=i<2%|2x6G zn2u@4#Xl&1EJFn@VhEE_jzx#qk|Of6p#P|of;D@H z&h=~KS>k0@1w}!AP!>Ga#?EHq_mwOEo=ybGn88y)I(YFuqPP3cNC=F-4w6hHI-8o} zGop>1L9SNn(^$QwjL3=R&) zxihE63?3R?bJKF-@WhG7g3p89!JeQo8Q}E;>|C<@FU!qjh9i?1_VZ6ilDF12 zSW#HmR?Xt-{{Ex$Ie`JRqZ$Q*r-#^EkR_fUB}d1O_v7n|ifAF)^7GFJn}hnGFqje;wzwtx6o^wNPsWb)_COSq z%CI`v8@xRZJ&iPOs9h*EuSV011#XyBs9@$?mrtL7+h$i*{&BhYlJ1@!-+uT}S07tT z=)%#Qgx~5nZI+r}>-hN|Wg{bwA3mrfD~8S>r?j}lOZV5=y6|q_@a{z}pe+X~)<5rH zCQp9B1T&j=srvE*UD=eUL^hwg0UBB!Ut!UVJB(CSnMZlTP%h?_%(`dx>EUboE}V7t z*F)Z9e-XE1>1Zn#jAvRMU#)9ze_+q0O9uEM_%XpVSdJ%P7fWBuw(nL9kA9pYbf7cg c`1SSw7dy%o^hCoiNdN!<07*qoM6N<$f=ecQasU7T literal 0 HcmV?d00001 diff --git a/images/tools.png b/images/tools.png new file mode 100644 index 0000000000000000000000000000000000000000..b391a0e8392aef528db3450a6ad70708d75d5d3b GIT binary patch literal 503 zcmV1`c4jv^a zu)KIs0uh982M-p41cI_d5ez+97Y~(+G@b3&N~ib-oK89ga~VEee(#XE7Dn&!{eIr( zectZ_|GBOJ07{$Zcb85i)w3YEs6X~r2D|T+by^3oD0C2zYQ6za5yYL zvmZa`;e!tAU#vRZ**C1DlU2`9T!0#z0|0W;X+0b0H<5-)PSiU%s-%-ucWhiwM<&(S z9MJKY_w##t()q|lyf%0iP;6v^n>VgAG4-B0? z{vz+5^Bq7*C#&9}xcXmC>u!6OZK*AD>9KU8(WrnPbMX4j+xdIDxg0y67ML81;okY9 tOrQwVTnz;6w9-G^2VNaZpy@PO{{}M@%mpE#!`A=+002ovPDHLkV1kCO @@ -26,10 +28,7 @@ if( ! file_exists(realpath( 'config.php' )) ) {

-You need to configure phpLDAPadmin. Edit the file 'config.php' to do so.
-
-An example config file is provided in 'config.php.example' - +
@@ -78,12 +77,12 @@ function check_config() if( ! extension_loaded( 'ldap' ) ) { pla_error( "Your install of PHP appears to be missing LDAP support. Please install " . - "LDAP support before using phpLDAPadmin." ); + "LDAP support before using phpLDAPadmin. (Don't forget to restart your web server afterwards)" ); return false; } /* Make sure they have all the functions we will need */ - $required_functions = array( 'utf8_encode', 'utf8_decode', 'htmlspecialchars' ); + $required_functions = array( 'htmlspecialchars' ); foreach( $required_functions as $function ) { if( ! function_exists( $function ) ) { pla_error( "Your install of PHP appears to be missing the function '$function()' " . @@ -95,7 +94,7 @@ function check_config() /* Make sure the config file is readable */ //if( ! is_readable( 'config.php' ) ) if( ! is_readable( realpath( 'config.php' ) ) ) { - echo "The config file 'config.php' is not readable. Please check its permissions."; + pla_error( "The config file 'config.php' is not readable. Please check its permissions.", false ); return false; } @@ -153,20 +152,22 @@ function check_config() /* check the existence of the servers array */ require 'config.php'; - 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 "; + if( ! isset( $servers ) || ! is_array( $servers ) || count( $servers ) == 0 ) { + pla_error( "Your config.php is missing the \$servers array or the \$servers array is empty. + Please see the sample file config.php.example ", false ); return false; } /* Make sure there is at least one server in the array */ $count = 0; foreach( $servers as $i => $server ) - if( $server['host'] ) + if( isset( $server['host'] ) && $server['host'] ) $count++; 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."; + pla_error( "None of the " . count($servers) . " servers in your \$servers configuration is + active in config.php. At least one of your servers must set the 'host' directive. + Example:
\$servers['host'] = \"ldap.example.com\";
+ phpLDAPadmin cannot proceed util you correct this.", false ); return false; } @@ -176,15 +177,14 @@ function check_config() // 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'."; + pla_error( "Your configuratoin has an error. You omitted the 'auth_type' directive on server number $id + 'auth_type' must be set, and it must be one of 'config', 'cookie', or 'session'.", false ); 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."; + if( $server['auth_type'] != 'config' && $server['auth_type'] != 'cookie' && $server['auth_type'] != 'session') { + pla_error( sprintf( $lang['error_auth_type_config'], htmlspecialchars( $server['auth_type'] ) ) ); return false; } } diff --git a/lang/Makefile b/lang/Makefile index cf31591..213f1a5 100644 --- a/lang/Makefile +++ b/lang/Makefile @@ -1,20 +1,22 @@ # # This Makefile (lang/Makefile) converts the source lang files to UTF8 # coding. You need iconv installed to use it. -# +# $Header: /cvsroot/phpldapadmin/phpldapadmin/lang/Makefile,v 1.18 2004/03/19 20:25:50 i18phpldapadmin Exp $ # ToDo: detect the encoding in the "source" # # posible detect of the language # echo `cat de.php | grep "logged_in_as" | sed s/".*="//g | file - | sed s/".*: "//g | sed s/" .*"//g` # # or -# +# # maybe like this # cat LANG.php | sed s/"^\/"//g | sed s/".*= "//g | sed s/";.*"//g | grep -v "<"| file - | sed s/".*: "//g | sed s/" .*"//g -# + +# Where to place the recoded language files DESTDIR=./recoded +# Path to the iconv binary ICONV=iconv -# php is not on all systems in /usr/bin/php +# Path to the PHP binary PHP=php TARGETS=${DESTDIR}/auto.php \ @@ -25,7 +27,12 @@ TARGETS=${DESTDIR}/auto.php \ ${DESTDIR}/fr.php \ ${DESTDIR}/it.php \ ${DESTDIR}/nl.php \ - ${DESTDIR}/ru.php + ${DESTDIR}/pl.php \ + ${DESTDIR}/pt-br.php \ + ${DESTDIR}/ru.php \ + ${DESTDIR}/sv.php \ + ${DESTDIR}/zz.php \ + ${DESTDIR}/zzz.php default: @echo "usage:" @@ -38,10 +45,10 @@ iconvlang: prepare ${TARGETS} syntax @echo "Done!" syntax: - @echo "Starting syntax" + @echo "Starting syntax checking..." @which $(PHP) >/dev/null 2>&1 || ( echo "You must have '$(PHP)' installed to use this Makefile, but I could not find it in your path!" && exit 1 ) @for i in ${TARGETS}; do ${PHP} -l $$i >/dev/null 2>&1 || ( echo "Syntax errors found in $$i!" && exit 1 ); done - @echo "Ending syntax" + @echo "Done" prepare: @echo "Starting prepare" @@ -87,6 +94,27 @@ ${DESTDIR}/nl.php: nl.php @echo "Fixing encoding nl.php to UTF8 "${DESTDIR}/nl.php @iconv -f iso8859-1 -t utf8 nl.php > ${DESTDIR}/nl.php +${DESTDIR}/pl.php: pl.php + @echo "Fixing encoding pl.php to UTF8 "${DESTDIR}/pl.php + @iconv -f iso8859-2 -t utf8 pl.php > ${DESTDIR}/pl.php + +${DESTDIR}/pt-br.php: pt-br.php + @echo "Fixing encoding pt-br.php to UTF8 "${DESTDIR}/pt-br.php + @iconv -f iso8859-1 -t utf8 pt-br.php > ${DESTDIR}/pt-br.php + +${DESTDIR}/sv.php: sv.php + @echo "Fixing encoding sv.php to UTF8 "${DESTDIR}/sv.php + @iconv -f iso8859-1 -t utf8 sv.php > ${DESTDIR}/sv.php + ${DESTDIR}/ru.php: ru.php @echo "Fixing encoding ru.php to UTF8 "${DESTDIR}/ru.php - @iconv -f utf8 -t utf8 ru.php > ${DESTDIR}/ru.php \ No newline at end of file + @iconv -f utf8 -t utf8 ru.php > ${DESTDIR}/ru.php + +${DESTDIR}/zz.php: zz.php + @echo "Copying only the zz.php" + @cp zz.php ${DESTDIR}/zz.php + +${DESTDIR}/zzz.php: zzz.php + @echo "Copying only the zzz.php" + @cp zzz.php ${DESTDIR}/zzz.php + diff --git a/lang/auto.php b/lang/auto.php index 04d8c95..87bd192 100644 --- a/lang/auto.php +++ b/lang/auto.php @@ -1,7 +1,8 @@ "ca" // catalan ," it "=>"it" // italien ," it-"=>"it" // for it-ch (italien swiss).. ," nl "=>"nl" // dutch - ," nl-"=>"nl" // for ne-be, only one? + ," nl-"=>"nl" // for ne-be, only one? + ," pl "=>"pl" // polish + ," pl-"=>"pl" // maybe exist + ," pt "=>"pt-br" // brazilian portuguese + ," pt-br"=>"pt-br" // brazilian portuguese ," ru "=>"ru" // russian ," ru-"=>"ru" // ru- exits? + ," sv "=>"sv" //swedish + ," sv-"=>"sv" // swedisch to );// all supported languages in this array // test @@ -39,4 +46,6 @@ foreach ($langSupport as $key=>$value) { } //echo "used:$useLang\n"; include realpath ("$useLang".".php");// this should include from recode/ position +$language=$useLang; +//echo "language:".$langugage; ?> diff --git a/lang/ca.php b/lang/ca.php index 42e4f2f..ee52247 100644 --- a/lang/ca.php +++ b/lang/ca.php @@ -1,7 +1,9 @@ * Uwe Ebel * Modifikationen von Dieter Kluenter + * + * + * $Header: /cvsroot/phpldapadmin/phpldapadmin/lang/de.php,v 1.22 2004/04/26 19:49:36 i18phpldapadmin Exp $ + * + * Verwendete CVS-Version von en.php 1.65 */ // 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['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['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'; +//$lang['starts_with'] = 'beginnt mit';//'starts with'; +$lang['contains'] = 'enthält';//'contains'; +//$lang['ends_with'] = 'endet mit';//'ends with'; +//$lang['sounds_like'] = 'ähnlich wie';//'sounds like'; +$lang['predefined_search_str'] = 'oder ein von dieser Liste auswählen';//'or select a predefined search'; +$lang['predefined_searches'] = 'Vordefinierte Suche';//'Predefined Searches'; +$lang['no_predefined_queries'] = 'Keine Abfragen sind in der config.php definiert';// 'No queries have been defined in config.php.'; + // 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['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['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['create'] = 'Erstellen';//'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['new'] = 'Neu';//'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['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['read_only_tooltip'] = 'Diese Attribut wurde vom phpLDAPadmin-Adminstrator als nur lesend markiert.';//This attribute has been flagged as read only by the phpLDAPadmin administrator'; $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...'; +$lang['login'] = '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['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['export'] = 'Exportieren';//'Export to LDIF'; +$lang['export_tooltip'] = 'Speichere einen Abzug diese Objektes';//'Save an LDIF dump of this object'; +$lang['export_subtree_tooltip'] = 'Speicher eine Abzug ab diesem Objekt und alle seine Untereinträge';//'Save an LDIF dump of this object and all of its children'; +$lang['export_subtree'] = 'Export Unterbaum nach LDIF';//'Export subtree to LDIF'; +//$lang['export_mac'] = 'Zeilenende für Macintosh';//'Macintosh style line ends'; +//$lang['export_win'] = 'Zeilenende für Windows';//'Windows style line ends'; +//$lang['export_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['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['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['view_one_child'] = 'Zeige einen Untereintrag';//'View 1 child'; +$lang['view_children'] = 'Zeige %s Untereinträge';//'View %s children'; +$lang['add_new_attribute'] = 'Neues Attribut hinzufügen';//'Add New Attribute'; +// DELETED $lang['add_new_attribute_tooltip'] = 'Füge ein neues Attribut/Wert zu diesem Eintrag hinzu';// 'Add a new attribute/value to this entry'; +$lang['add_new_objectclass'] = 'Neue ObjectClass hinzufügen';//'Add new ObjectClass'; +//$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['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['no_internal_attributes'] = 'Keine internen Attribute.';//'No internal attributes'; +$lang['no_attributes'] = 'Dieser Eintrag hat keine Attribute.';//'This entry has no attributes'; +$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['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['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['no_new_binary_attrs_available'] = 'Keine weiteren Binären Attribute verfügbar für diesen Eintrag.';//'no new binary 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'; +// DELETE $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['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'; +$lang['really_delete_attribute'] = 'Lösche das Attribut wirklich';//'Really delete attribute'; +$lang['add_new_value'] = 'Neuen Wert hinzufügen';//'Add New Value'; // 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['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['schema_retrieve_error_1']='Der Server unterstützt nicht vollständig das LDAP-Protokoll.';//'The server does not fully support the LDAP protocol.'; +$lang['schema_retrieve_error_2']='Die verwendete PHP-Version setzte keine korrekte LDAP-Abfrage ab.';//'Your version of PHP does not correctly perform the query.'; +$lang['schema_retrieve_error_3']='Oder phpLDAPadmin konnte nicht das Schema für den Server abfragen.';//'Or lastly, phpLDAPadmin doesn\'t know how to fetch the schema for your 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['jump_to_matching_rule'] = 'Gehe zur Treffer Regel'; +$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['optional_binary_attrs'] = 'Optinales Binärattribut';//'Optional Binary Attributes'; $lang['OID'] = 'OID';//'OID'; +$lang['aliases']='Pseudonym(e)';//'Aliases'; $lang['desc'] = 'Beschreibung';//'Description'; +$lang['no_description']='Keine Beschreibung';//'no description'; $lang['name'] = 'Name';//'Name'; +$lang['equality']='Gleichheit'; $lang['is_obsolete'] = 'Diese objectClass ist veraltet';//'This objectClass is obsolete'; $lang['inherits'] = 'Abgeleitet von';//'Inherits'; +$lang['inherited_from']='abgeleteitet von';//inherited from'; +$lang['parent_to'] = 'Knoten von';//'Parent to'; $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_applicable'] = 'nicht anwendbar';//'not applicable'; $lang['not_specified'] = 'nicht spezifiziert';//not specified'; +$lang['character']='Zeichen';//'character'; +$lang['characters']='Zeichen';//'characters'; +$lang['used_by_objectclasses']='Verwendet von den Objektklassen';//'Used by objectClasses'; +$lang['used_by_attributes']='Verwendet in den Attributen';//'Used by Attributes'; +$lang['oid']='OID'; +$lang['obsolete']='Veraltet';//'Obsolete'; +$lang['ordering']='Ordnung';//'Ordering'; +$lang['substring_rule']='Teilstring Regel';//'Substring Rule'; +$lang['single_valued']='Einzelner Wert';//'Single Valued'; +$lang['collective']='Sammlung';//'Collective'; +$lang['user_modification']='Benutzer Änderung';//'User Modification'; +$lang['usage']='Verwendung';//'Usage'; +$lang['maximum_length']='Maximale Grösse';//'Maximum Length'; +$lang['attributes']='Attribut Typen';//'Attributes Types'; +$lang['syntaxes']='Syntaxe';//'Syntaxes'; +$lang['objectclasses']='Objekt Klassen';//'objectClasses'; +$lang['matchingrules']='Treffer Regeln';//'Matching Rules'; +$lang['could_not_retrieve_schema_from']='Das Schema konnte nicht abgefragt werden. Betrifft die Einstellung des Servers:';//'Could not retrieve schema from'; +$lang['type']='Typ';// 'Type'; // Deleting entries -$lang['entry_deleted_successfully'] = 'Der Eintrag \'%s\' wurde erfolgreich gelöscht.';//'Entry \'%s\' deleted successfully.'; +$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'; +$lang['could_not_delete_entry'] = 'Konnte den Eintrag nicht löschen: %s';//'Could not delete the entry: %s'; +$lang['no_such_entry'] = 'Keinen solchen Eintrag: %s';//'No such entry: %s'; +$lang['delete_dn'] = 'Löschen von %s';//'Delete %s'; +//$lang['permanently_delete_children'] = 'Ebenso dauerhaftes Löschen aller Untereinträge?';//'Permanently delete all children also?'; +$lang['entry_is_root_sub_tree'] = 'Dies ist ein Root-Eintrag und beinhaltet einen Unterbaum mit %s Einträgen.';//'This entry is the root of a sub-tree containing %s entries.'; +$lang['view_entries'] = 'Zeige Einträge';//'view entries'; +$lang['confirm_recursive_delete'] = 'phpLDAPadmin kann diesen Eintrag und die %s Untereinträge rekursiv löschen. Unten ist eine Liste der Einträge angegeben die von diesem Löschen betroffen wären. Sollen alle Einträge gelöscht werden?';//'phpLDAPadmin can recursively delete this entry and all %s of its children. See below for a list of all the entries that this action will delete. Do you want to do this?'; +$lang['confirm_recursive_delete_note'] = 'Hinweis: Dies ist sehr gefährlich und erfolgt auf eines Risiko. Die Ausführung kann nicht rückgängig gemacht werden. Dies betrifft ebenso Aliase, Referenzen und andere Dinge die zu Problemen führen können.';//'Note: this is potentially very dangerous and you do this at your own risk. This operation cannot be undone. Take into consideration aliases, referrals, and other things that may cause problems.'; +$lang['delete_all_x_objects'] = 'Löschen aller "%s" Objekte';//'Delete all %s objects'; +$lang['recursive_delete_progress'] = 'Rekursives Löschen in Arbeit';//'Recursive delete progress'; +$lang['entry_and_sub_tree_deleted_successfully'] = 'Erfolgreiches Löschen des Eintrages "%s" und dessen Unterbaums.';// 'Entry %s and sub-tree deleted successfully.'; +$lang['failed_to_delete_entry'] = 'Fehler beim Löschen des Eintrages %s.';//'Failed to delete entry %s'; + +// Deleting attributes +$lang['attr_is_read_only'] = 'Das Attribut "%s" ist in der phpLDAPadmin Konfiguration als nur lesend deklariert.';//'The attribute "%s" is flagged as read-only in the phpLDAPadmin configuration.'; +$lang['no_attr_specified'] = 'Kein Attributname angegeben.';//'No attribute name specified.'; +$lang['no_dn_specified'] = 'Kein DN angegeben.';//'No DN specified'; + +// Adding attributes +$lang['left_attr_blank'] = 'Der Wert des Attributes wurde leergelassen. Bitte zurück gehen und erneut versuchen.';//'You left the attribute value blank. Please go back and try again.'; +$lang['failed_to_add_attr'] = 'Fehler beim Hinzufügen des Attributes';//'Failed to add the attribute.'; +$lang['file_empty'] = 'Die ausgewählte Datei ist entweder nicht vorhanden oder leer. Bitte zurückgehen und nochmals versuchen.';//'The file you chose is either empty or does not exist. Please go back and try again.'; +$lang['invalid_file'] = 'Sicherheitsfehler: Die hochgeladene Datei kann bösartig sein.';//'Security error: The file being uploaded may be malicious.'; +$lang['warning_file_uploads_disabled'] = 'Die PHP-Konfiguration (php.ini) gestattet es nicht Dateien hochzuladen. Bitte die php.ini hierzu überprüfen.';//'Your PHP configuration has disabled file uploads. Please check php.ini before proceeding.'; +$lang['uploaded_file_too_big'] = 'Die hochgeladene Datei ist größer als die maximal erlaubte Datei aus der "php.ini". Bitte in der php.ini den Eintrag "upload_max_size" überprüfen.';//'The file you uploaded is too large. Please check php.ini, upload_max_size setting'; +$lang['uploaded_file_partial'] = 'Die auswählte Datei wurde nur unvollständig hochgeladen.';//'The file you selected was only partially uploaded, likley due to a network error.'; +$lang['max_file_size'] = 'Maximal Dateigröße ist: %s';//'Maximum file size: %s'; + +// Updating values +$lang['modification_successful'] = 'Änderung war erfolgreich!';//'Modification successful!'; +$lang['change_password_new_login'] = 'Da das Passwort geändert wurde müssen Sie sich erneut einloggen.'; //'Since you changed your password, you must now login again with your new password.'; // 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_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'; +$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['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['could_not_connect_to_host_on_port'] = 'Konnte keine Verbindung zum Server "%s" am Port "%s" erstellen.';//'Could not connect to "%s" on port "%s"'; +$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['back_up_p'] = 'Eine Ebene höher...';//"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'; +$lang['reasons_for_error']='Dies kann mehrere Gründe haben. Die häufigsten sind:';//'This could happen for several reasons, the most probable of which are:'; +$lang['please_report_this_as_a_bug']='Bitte senden Sie dies als einen Fehlerbericht.';//'Please report this as a bug.'; +$lang['yes']='Ja';//'Yes' +$lang['no']='Nein';//'No' +$lang['go']='Weiter';//'go' +$lang['delete']='Löschen';//'Delete'; +$lang['back']='Zurück';//'Back'; +$lang['object']='Objekt';//'object'; +//$lang['objects']='Objekte';//'objects'; +$lang['delete_all']='Lösche alle';//'Delete all'; +$lang['url_bug_report']=''+$lang['url_bug_report'];//'https://sourceforge.net/tracker/?func=add&group_id=61828&atid=498546'; +$lang['hint'] = 'Hinweis';//'hint'; +$lang['bug'] = 'Programmfehler';//'bug'; +$lang['warning'] = 'Warnung';//'warning'; +$lang['light'] = 'light'; // the word 'light' from 'light bulb' +$lang['proceed_gt'] = 'Weiter';//'Proceed >>'; // Add value form -$lang['add_new'] = 'Neu hinzufügen';//'Add new'; +$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['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_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.'; @@ -186,6 +280,11 @@ $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.'; +$lang['template'] = 'Vorlage';//'Template'; +$lang['must_choose_template'] = 'Eine Vorlage muss ausgewählt sein';//'You must choose a template'; +$lang['invalid_template'] = 'Die Vorlage "%s" ist ungültig';// '%s is an invalid template'; +$lang['using_template'] = 'Verwende Vorlage';//'using template'; +$lang['go_to_dn'] = 'Gehe zu %s';//'Go to %s'; //copy_form.php $lang['copyf_title_copy'] = 'Kopiere';//"Copy '; @@ -195,111 +294,134 @@ $lang['copyf_dest_dn_tooltip'] = 'Der komplette DN des Eintrages der beim Kopier $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.'; +$lang['recursive_copy'] = 'Rekursives kopieren';//'Recursive copy'; +$lang['filter'] = 'Filter';//'Filter'; +$lang['filter_tooltip'] = 'Bei der Ausfürung des rekursiven Kopierens werden nur die Einträge verwendet, die mit dem Filter übereinstimmen';// 'When performing a recursive copy, only copy those entries which match this filter'; + //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.'; +$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['redirecting'] = 'Weiterleitung';//"Redirecting'; moved from create_redirection -> redirection +$lang['here'] = 'hier';//"here'; renamed vom create_here -> 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_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 >>'; +$lang['rdn_field_blank'] = 'Das RDN Feld wurde leer gelassen.';//'You left the RDN field blank.'; +$lang['container_does_not_exist'] = 'Der angegenben Eintrag (%s) ist nicht vorhanden. Bitte erneut versuchen.';// 'The container you specified (%s) does not exist. Please try again.'; +$lang['no_objectclasses_selected'] = 'Es wurde kein ObjectClasses für diesen Eintrag ausgewählt. Bitte zurückgehen und korrigieren';//'You did not select any ObjectClasses for this object. Please go back and do so.'; +$lang['hint_structural_oclass'] = 'Hinweis: Es muss mindestens ein Strukturelle ObjectClass ausgewählt sein.';//'Hint: You must choose at least one structural objectClass'; //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_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.'; +$lang['create_step1'] = 'Schritt 1 von 2: Name und Objektklasse(n)';//'Step 1 of 2: Name and ObjectClass(es)'; +$lang['create_step2'] = 'Schritt 2 von 2: Bestimmen der Attribute und Werte';//'Step 2 of 2: Specify attributes and values'; +$lang['relative_distinguished_name'] = 'Relativer Distingushed Name';//'Relative Distinguished Name'; +$lang['rdn'] = 'RDN';//'RDN'; +$lang['rdn_example'] = '(Beispiel: cn=MeineNeuePerson)';//'(example: cn=MyNewPerson)'; +$lang['container'] = 'Behälter';//'Container'; + // 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['you_have_not_logged_into_server'] = 'Sie haben sich am ausgewählten Server nicht angemeldet. Sie kö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['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['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_sub'] = 'Sub (Suchbasis 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['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.'; +$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['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['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'; +$lang['cancel'] = 'Abbruch';//'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'; +$lang['welcome_note'] = 'Benutzen sie das Menu auf der linken Seite zur Navigation.';//'Use the menu to the left to navigate'; $lang['credits'] = 'Vorspann';//'Credits'; -$lang['changelog'] = 'Änderungsdatei';//'ChangeLog'; -$lang['documentation'] = 'Dokumentation';// 'Documentation'; +$lang['changelog'] = 'Änderungsdatei';//'ChangeLog'; +//$lang['documentation'] = 'Dokumentation';// 'Documentation'; +$lang['donate'] = 'Spende';//'Donate'; // 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['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['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['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['bad_auto_uid_search_base'] = 'Die phpLDAPadmin Konfiguration für den Server "%s" gibt eine ungültige Suchbasis für "auto_uid_search_base" an.';//'Your phpLDAPadmin configuration specifies an invalid auto_uid_search_base for server %s'; +$lang['auto_uid_invalid_credential'] = 'Konnte nicht mit "%s" verbinden';// 'Unable to bind to %s with your with auto_uid credentials. Please check your configuration file.'; +$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['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['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['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['could_not_bind_anon'] = 'Konnte keine Anonymous Anmeldung zum Server herstellen.';//'Could not bind anonymously to server.'; +$lang['could_not_bind'] = 'Konnte keine Verbindung zum LDAP-Server herstellen';//'Could not bind to the LDAP server.'; +//$lang['anon_required_for_login_attr'] = 'Bei der Verwendung des Anmeldeprozedur "login_attr" muss der Server Anonymous Anmelden zulassen.';//'When using the login_attr feature, the LDAP server must support anonymous binds.'; +$lang['anonymous_bind'] = 'Anonymous anmelden';//'Anonymous Bind'; +//$lang['auth_type_not_valid'] = 'Die Konfigurationsdatei enthält einen Fehler. Der Eintrag für \'auth_type\' mit \'%s\' ist nicht gültig';// 'You have an error in your config file. auth_type of %s is not valid.'; +$lang['bad_user_name_or_password'] = 'Falscher Benutzername oder Passwort. Bitte erneut versuchen.';//'Bad username or password. Please try again.'; +$lang['redirecting_click_if_nothing_happens'] = 'Automatische Umleitung. Falls dies nicht automatisch erfolgt dann hier klicken.';//'Redirecting... Click here if nothing happens.'; +$lang['successfully_logged_in_to_server'] = 'Erfolgreich am Server %s angemeldet';//'Successfully logged into server %s'; +$lang['could_not_set_cookie'] = 'Konnte kein \'Cookie\' setzten.';//'Could not set cookie.'; +$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['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_not_support_md5crypt'] = 'Die eingesetzte PHP-Version unterstützt keine MD5-Verschlüsselung.';//'Your PHP install does not support md5crypt 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.

'; @@ -308,22 +430,106 @@ $lang['ferror_congrats_found_bug'] = '
+
%s'; +$lang['authenticate_to_server'] = 'Authentifizierung mit Server %s';//'Authenticate to server %s'; +$lang['warning_this_web_connection_is_unencrypted'] = 'Achtung: Diese Webverbindung ist unverschlüsselt.';//'Warning: This web connection is unencrypted.'; +$lang['not_using_https'] = 'Es wird keine verschlüsselte Verbindung (\'https\') verwendet. Der Webbrowser übermittelt die Anmeldeinformationen im Klartext.';// 'You are not use \'https\'. Web browser will transmit login information in clear text.'; +$lang['login_dn'] = 'Anmelde DN';//'Login DN'; +$lang['user_name'] = 'Benutzername';//'User name'; +$lang['password'] = 'Passwort';//'Password'; +$lang['authenticate'] = 'Authentifizierung';//'Authenticate'; + +// Entry browser +$lang['entry_chooser_title'] = 'Einträge auswählen';//'Entry Chooser'; + +// Index page +$lang['need_to_configure'] = 'phpLDAPadmin muss konfiguriert werden. Bitte die Datei "config.php" erstellen. Ein Beispiel einer "config.php" liegt als Datei "config.php.example" bei.';// ';//'You need to configure phpLDAPadmin. Edit the file \'config.php\' to do so. An example config file is provided in \'config.php.example\''; + +// Mass deletes +$lang['no_deletes_in_read_only'] = 'Löschen ist im Nur-Lese-Modus nicht erlaubt.';//'Deletes not allowed in read only mode.'; +$lang['error_calling_mass_delete'] = 'Fehler im Aufruf von "mass_delete.php". "mass_delete" ist in den POST-Variablen nicht vorhanden.';//'Error calling mass_delete.php. Missing mass_delete in POST vars.'; +$lang['mass_delete_not_array'] = 'Die POST-Variable "mass_delete" ist kein Array.';//'mass_delete POST var is not an array.'; +$lang['mass_delete_not_enabled'] = '"Viel-Löschen" ist nicht aktiviert. Bitte in der der "config.php" aktivieren vor dem Weitermachen.';//'Mass deletion is not enabled. Please enable it in config.php before proceeding.'; +$lang['mass_deleting'] = 'Viel-Löschen';//'Mass Deleting'; +$lang['mass_delete_progress'] = 'Löschprozess auf Server "%s"';//'Deletion progress on server "%s"'; +$lang['malformed_mass_delete_array'] = 'Das Array "mass_delete" ist falsch dargestellt.';//'Malformed mass_delete array.'; +$lang['no_entries_to_delete'] = 'Es wurde kein zu löschender Eintrag ausgewählt.';//'You did not select any entries to delete.'; +$lang['deleting_dn'] = 'Lösche "%s"';//'Deleting %s'; +$lang['total_entries_failed'] = '%s von %s Einträgen konnten nicht gelöscht werden.';//'%s of %s entries failed to be deleted.'; +$lang['all_entries_successful'] = 'Alle Einträge wurden erfolgreich gelöscht.';//'All entries deleted successfully.'; +$lang['confirm_mass_delete'] = 'Bitte das Löschen von %s Einträgen auf dem Server %s bestätigen';//'Confirm mass delete of %s entries on server %s'; +$lang['yes_delete'] = 'Ja, Löschen!';//'Yes, delete!'; + + +// Renaming entries +$lang['non_leaf_nodes_cannot_be_renamed'] = 'Das Umbenennen von einem Eintrag mit Untereinträgen ist nicht Möglich. Es ist nur auf den Untersten Einträgen gestattet.';// 'You cannot rename an entry which has children entries (eg, the rename operation is not allowed on non-leaf entries)'; +$lang['no_rdn_change'] = 'Der RDN wurde nicht verändert';//'You did not change the RDN'; +$lang['invalid_rdn'] = 'Ungültiger RDN Wert';//'Invalid RDN value'; +$lang['could_not_rename'] = 'Der Eintrag konnte nicht umbenannt werden';//'Could not rename the entry'; + + ?> diff --git a/lang/en.php b/lang/en.php index 4fe9a03..c3f7a57 100644 --- a/lang/en.php +++ b/lang/en.php @@ -1,4 +1,6 @@ DN'; +$lang['base_dn'] = 'Base 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'; +$lang['predefined_search_str'] = 'Select a predefined search'; +$lang['predefined_searches'] = 'Predefined Searches'; +$lang['no_predefined_queries'] = 'No queries have been defined in config.php.'; // 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'; @@ -51,61 +48,58 @@ $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['new'] = 'new'; $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['read_only_tooltip'] = 'This attribute has been flagged as read only by the phpLDAPadmin administrator'; $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...'; +$lang['login'] = '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['export'] = 'Export'; +$lang['export_tooltip'] = 'Save a dump of this object'; +$lang['export_subtree_tooltip'] = 'Save a dump of this object and all of its children'; +$lang['export_subtree'] = 'Export subtree'; $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['view_one_child'] = 'View 1 child'; +$lang['view_children'] = 'View %s children'; +$lang['add_new_attribute'] = 'Add new attribute'; +$lang['add_new_objectclass'] = 'Add new ObjectClass'; $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['no_internal_attributes'] = 'No internal attributes'; +$lang['no_attributes'] = 'This entry has no attributes'; $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['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['no_new_binary_attrs_available'] = 'no new binary 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['add_new_binary_attr'] = 'Add new binary attribute'; $lang['alias_for'] = 'Note: \'%s\' is an alias for \'%s\''; $lang['download_value'] = 'download value'; $lang['delete_attribute'] = 'delete attribute'; @@ -113,32 +107,94 @@ $lang['true'] = 'true'; $lang['false'] = 'false'; $lang['none_remove_value'] = 'none, remove value'; $lang['really_delete_attribute'] = 'Really delete attribute'; +$lang['add_new_value'] = 'Add New Value'; // 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['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['schema_retrieve_error_1']='The server does not fully support the LDAP protocol.'; +$lang['schema_retrieve_error_2']='Your version of PHP does not correctly perform the query.'; +$lang['schema_retrieve_error_3']='Or lastly, phpLDAPadmin doesn\'t know how to fetch the schema for your server.'; $lang['jump_to_objectclass'] = 'Jump to an objectClass'; $lang['jump_to_attr'] = 'Jump to an attribute type'; +$lang['jump_to_matching_rule'] = 'Jump to a matching rule'; $lang['schema_for_server'] = 'Schema for server'; $lang['required_attrs'] = 'Required Attributes'; $lang['optional_attrs'] = 'Optional Attributes'; +$lang['optional_binary_attrs'] = 'Optional Binary Attributes'; $lang['OID'] = 'OID'; +$lang['aliases']='Aliases'; $lang['desc'] = 'Description'; +$lang['no_description']='no description'; $lang['name'] = 'Name'; -$lang['is_obsolete'] = 'This objectClass is obsolete'; -$lang['inherits'] = 'Inherits'; +$lang['equality']='Equality'; +$lang['is_obsolete'] = 'This objectClass is obsolete.'; +$lang['inherits'] = 'Inherits from'; +$lang['inherited_from'] = 'Inherited from'; +$lang['parent_to'] = 'Parent to'; $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'; +$lang['character']='character'; +$lang['characters']='characters'; +$lang['used_by_objectclasses']='Used by objectClasses'; +$lang['used_by_attributes']='Used by Attributes'; +$lang['maximum_length']='Maximum Length'; +$lang['attributes']='Attribute Types'; +$lang['syntaxes']='Syntaxes'; +$lang['matchingrules']='Matching Rules'; +$lang['oid']='OID'; +$lang['obsolete']='Obsolete'; +$lang['ordering']='Ordering'; +$lang['substring_rule']='Substring Rule'; +$lang['single_valued']='Single Valued'; +$lang['collective']='Collective'; +$lang['user_modification']='User Modification'; +$lang['usage']='Usage'; +$lang['could_not_retrieve_schema_from']='Could not retrieve schema from'; +$lang['type']='Type'; // Deleting entries -$lang['entry_deleted_successfully'] = 'Entry \'%s\' deleted successfully.'; +$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'; +$lang['no_such_entry'] = 'No such entry: %s'; +$lang['delete_dn'] = 'Delete %s'; +$lang['permanently_delete_children'] = 'Permanently delete all children also?'; +$lang['entry_is_root_sub_tree'] = 'This entry is the root of a sub-tree containing %s entries.'; +$lang['view_entries'] = 'view entries'; +$lang['confirm_recursive_delete'] = 'phpLDAPadmin can recursively delete this entry and all %s of its children. See below for a list of all the entries that this action will delete. Do you want to do this?'; +$lang['confirm_recursive_delete_note'] = 'Note: this is potentially very dangerous and you do this at your own risk. This operation cannot be undone. Take into consideration aliases, referrals, and other things that may cause problems.'; +$lang['delete_all_x_objects'] = 'Delete all %s objects'; +$lang['recursive_delete_progress'] = 'Recursive delete progress'; +$lang['entry_and_sub_tree_deleted_successfully'] = 'Entry %s and sub-tree deleted successfully.'; +$lang['failed_to_delete_entry'] = 'Failed to delete entry %s'; +$lang['list_of_entries_to_be_deleted'] = 'List of entries to be deleted:'; +$lang['sure_permanent_delete_object']='Are you sure you want to permanently delete this object?'; +$lang['dn'] = 'DN'; + +// Deleting attributes +$lang['attr_is_read_only'] = 'The attribute "%s" is flagged as read-only in the phpLDAPadmin configuration.'; +$lang['no_attr_specified'] = 'No attribute name specified.'; +$lang['no_dn_specified'] = 'No DN specified'; + +// Adding attributes +$lang['left_attr_blank'] = 'You left the attribute value blank. Please go back and try again.'; +$lang['failed_to_add_attr'] = 'Failed to add the attribute.'; +$lang['file_empty'] = 'The file you chose is either empty or does not exist. Please go back and try again.'; +$lang['invalid_file'] = 'Security error: The file being uploaded may be malicious.'; +$lang['warning_file_uploads_disabled'] = 'Your PHP configuration has disabled file uploads. Please check php.ini before proceeding.'; +$lang['uploaded_file_too_big'] = 'The file you uploaded is too large. Please check php.ini, upload_max_size setting'; +$lang['uploaded_file_partial'] = 'The file you selected was only partially uploaded, likley due to a network error.'; +$lang['max_file_size'] = 'Maximum file size: %s'; + +// Updating values +$lang['modification_successful'] = 'Modification successful!'; +$lang['change_password_new_login'] = 'Since you changed your password, you must now login again with your new password.'; // Adding objectClass form $lang['new_required_attrs'] = 'New Required Attributes'; @@ -147,6 +203,7 @@ $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'; +$lang['objectclasses'] = 'ObjectClasses'; // General $lang['chooser_link_tooltip'] = 'Click to popup a dialog to select an entry (DN) graphically'; @@ -154,6 +211,7 @@ $lang['no_updates_in_read_only_mode'] = 'You cannot perform updates while server $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_connect_to_host_on_port'] = 'Could not connect to "%s" on port "%s"'; $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'; @@ -165,6 +223,22 @@ $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'; +$lang['please_report_this_as_a_bug']='Please report this as a bug.'; +$lang['reasons_for_error']='This could happen for several reasons, the most probable of which are:'; +$lang['yes']='Yes'; +$lang['no']='No'; +$lang['go']='Go'; +$lang['delete']='Delete'; +$lang['back']='Back'; +$lang['object']='object'; +$lang['delete_all']='Delete all'; +$lang['url_bug_report']='https://sourceforge.net/tracker/?func=add&group_id=61828&atid=498546'; +$lang['hint'] = 'hint'; +$lang['bug'] = 'bug'; +$lang['warning'] = 'warning'; +$lang['light'] = 'light'; // the word 'light' from 'light bulb' +$lang['proceed_gt'] = 'Proceed >>'; + // Add value form $lang['add_new'] = 'Add new'; @@ -172,8 +246,7 @@ $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['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'; @@ -194,6 +267,11 @@ $lang['copy_failed'] = 'Failed to copy DN: '; //edit.php $lang['missing_template_file'] = 'Warning: missing template file, '; $lang['using_default'] = 'Using default.'; +$lang['template'] = 'Template'; +$lang['must_choose_template'] = 'You must choose a template'; +$lang['invalid_template'] = '%s is an invalid template'; +$lang['using_template'] = 'using template'; +$lang['go_to_dn'] = 'Go to %s'; //copy_form.php $lang['copyf_title_copy'] = 'Copy '; @@ -203,11 +281,14 @@ $lang['copyf_dest_dn_tooltip'] = 'The full DN of the new entry to be created whe $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.'; +$lang['recursive_copy'] = 'Recursive copy'; +$lang['filter'] = 'Filter'; +$lang['filter_tooltip'] = 'When performing a recursive copy, only copy those entries which match this filter'; //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_required_attribute'] = 'You left the value blank for required attribute (%s).'; +$lang['redirecting'] = 'Redirecting...'; +$lang['here'] = 'here'; $lang['create_could_not_add'] = 'Could not add the object to the LDAP server.'; //create_form.php @@ -215,12 +296,23 @@ $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'; +$lang['rdn_field_blank'] = 'You left the RDN field blank.'; +$lang['container_does_not_exist'] = 'The container you specified (%s) does not exist. Please try again.'; +$lang['no_objectclasses_selected'] = 'You did not select any ObjectClasses for this object. Please go back and do so.'; +$lang['hint_structural_oclass'] = 'Hint: You must choose at least one structural objectClass'; //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.'; +$lang['create_step1'] = 'Step 1 of 2: Name and ObjectClass(es)'; +$lang['create_step2'] = 'Step 2 of 2: Specify attributes and values'; +$lang['relative_distinguished_name'] = 'Relative Distinguished Name'; +$lang['rdn'] = 'RDN'; +$lang['rdn_example'] = '(example: cn=MyNewPerson)'; +$lang['container'] = 'Container'; +$lang['alias_for'] = 'Alias for %s'; // 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.'; @@ -275,7 +367,7 @@ $lang['go_back'] = 'Go back'; $lang['welcome_note'] = 'Use the menu to the left to navigate'; $lang['credits'] = 'Credits'; $lang['changelog'] = 'ChangeLog'; -$lang['documentation'] = 'Documentation'; +$lang['donate'] = 'Donate'; // view_jpeg_photo.php $lang['unsafe_file_name'] = 'Unsafe file name: '; @@ -285,34 +377,43 @@ $lang['no_such_file'] = 'No such file: '; $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 +$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) +$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 +$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. + "auto_uid_number_search_base". Please specify it before proceeding.'; +$lang['auto_uid_invalid_credential'] = 'Unable to bind to %s with your with auto_uid credentials. Please check your configuration file.'; +$lang['bad_auto_uid_search_base'] = 'Your phpLDAPadmin configuration specifies an invalid auto_uid_search_base for server %s'; +$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\', +$lang['error_auth_type_config'] = 'Error: You have an error in your config file. The only three allowed values + for auth_type in the $servers section are \'session\', \'cookie\', and \'config\'. 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['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['could_not_bind_anon'] = 'Could not bind anonymously to server.'; +$lang['could_not_bind'] = 'Could not bind to the LDAP server.'; +$lang['anonymous_bind'] = 'Anonymous Bind'; +$lang['bad_user_name_or_password'] = 'Bad username or password. Please try again.'; +$lang['redirecting_click_if_nothing_happens'] = 'Redirecting... Click here if nothing happens.'; +$lang['successfully_logged_in_to_server'] = 'Successfully logged into server %s'; +$lang['could_not_set_cookie'] = 'Could not set cookie.'; +$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_not_support_md5crypt'] = 'Your PHP install does not support md5crypt 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_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'] = '
@@ -339,14 +440,23 @@ $lang['ferror_congrats_found_bug'] = 'Congratulations! You found a bug in phpLDA $lang['import_ldif_file_title'] = 'Import LDIF File'; $lang['select_ldif_file'] = 'Select an LDIF file:'; $lang['select_ldif_file_proceed'] = 'Proceed >>'; +$lang['dont_stop_on_errors'] = 'Don\'t stop on errors'; //ldif_import $lang['add_action'] = 'Adding...'; $lang['delete_action'] = 'Deleting...'; $lang['rename_action'] = 'Renaming...'; $lang['modify_action'] = 'Modifying...'; +$lang['warning_no_ldif_version_found'] = 'No version found. Assuming 1.'; +$lang['valid_dn_line_required'] = 'A valid dn line is required.'; +$lang['missing_uploaded_file'] = 'Missing uploaded file.'; +$lang['no_ldif_file_specified.'] = 'No LDIF file specified. Please try again.'; +$lang['ldif_file_empty'] = 'Uploaded LDIF file is empty.'; +$lang['empty'] = 'empty'; +$lang['file'] = 'File'; +$lang['number_bytes'] = '%s bytes'; -$lang['failed'] = 'failed'; +$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:'; @@ -354,4 +464,64 @@ $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:'; + +// Exports +$lang['export_format'] = 'Export format'; +$lang['line_ends'] = 'Line ends'; +$lang['must_choose_export_format'] = 'You must choose an export format.'; +$lang['invalid_export_format'] = 'Invalid export format'; +$lang['no_exporter_found'] = 'No available exporter found.'; +$lang['error_performing_search'] = 'Encountered an error while performing search.'; +$lang['showing_results_x_through_y'] = 'Showing results %s through %s.'; +$lang['searching'] = 'Searching...'; +$lang['size_limit_exceeded'] = 'Notice, search size limit exceeded.'; +$lang['entry'] = 'Entry'; +$lang['ldif_export_for_dn'] = 'LDIF Export for: %s'; +$lang['generated_on_date'] = 'Generated by phpLDAPadmin on %s'; +$lang['total_entries'] = 'Total Entries'; +$lang['dsml_export_for_dn'] = 'DSLM Export for: %s'; + +// logins +$lang['could_not_find_user'] = 'Could not find a user "%s"'; +$lang['password_blank'] = 'You left the password blank.'; +$lang['login_cancelled'] = 'Login cancelled.'; +$lang['no_one_logged_in'] = 'No one is logged in to that server.'; +$lang['could_not_logout'] = 'Could not logout.'; +$lang['unknown_auth_type'] = 'Unknown auth_type: %s'; +$lang['logged_out_successfully'] = 'Logged out successfully from server %s'; +$lang['authenticate_to_server'] = 'Authenticate to server %s'; +$lang['warning_this_web_connection_is_unencrypted'] = 'Warning: This web connection is unencrypted.'; +$lang['not_using_https'] = 'You are not using \'https\'. Web browser will transmit login information in clear text.'; +$lang['login_dn'] = 'Login DN'; +$lang['user_name'] = 'User name'; +$lang['password'] = 'Password'; +$lang['authenticate'] = 'Authenticate'; + +// Entry browser +$lang['entry_chooser_title'] = 'Entry Chooser'; + +// Index page +$lang['need_to_configure'] = 'You need to configure phpLDAPadmin. Edit the file \'config.php\' to do so. An example config file is provided in \'config.php.example\''; + +// Mass deletes +$lang['no_deletes_in_read_only'] = 'Deletes not allowed in read only mode.'; +$lang['error_calling_mass_delete'] = 'Error calling mass_delete.php. Missing mass_delete in POST vars.'; +$lang['mass_delete_not_array'] = 'mass_delete POST var is not an array.'; +$lang['mass_delete_not_enabled'] = 'Mass deletion is not enabled. Please enable it in config.php before proceeding.'; +$lang['mass_deleting'] = 'Mass Deleting'; +$lang['mass_delete_progress'] = 'Deletion progress on server "%s"'; +$lang['malformed_mass_delete_array'] = 'Malformed mass_delete array.'; +$lang['no_entries_to_delete'] = 'You did not select any entries to delete.'; +$lang['deleting_dn'] = 'Deleting %s'; +$lang['total_entries_failed'] = '%s of %s entries failed to be deleted.'; +$lang['all_entries_successful'] = 'All entries deleted successfully.'; +$lang['confirm_mass_delete'] = 'Confirm mass delete of %s entries on server %s'; +$lang['yes_delete'] = 'Yes, delete!'; + +// Renaming entries +$lang['non_leaf_nodes_cannot_be_renamed'] = 'You cannot rename an entry which has children entries (eg, the rename operation is not allowed on non-leaf entries)'; +$lang['no_rdn_change'] = 'You did not change the RDN'; +$lang['invalid_rdn'] = 'Invalid RDN value'; +$lang['could_not_rename'] = 'Could not rename the entry'; + ?> diff --git a/lang/es.php b/lang/es.php index c7e38d8..71b7bf6 100644 --- a/lang/es.php +++ b/lang/es.php @@ -1,4 +1,6 @@ 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['delete_hint'] = 'Note: 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é modifié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['no_new_binary_attrs_available'] = 'plus d\' attributs binaires disponibles pour cette entréé'; $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'; @@ -114,32 +105,89 @@ $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'; +$lang['add_new_value'] = 'Ajouter une nouvelle valeur'; // 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['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['schema_retrieve_error_1']='Le serveur ne supporte pas entièrement le protocol LDAP.'; +$lang['schema_retrieve_error_2']='Votre version de PHP ne permet pas d\'exécute correctement la requête.'; +$lang['schema_retrieve_error_3']='Ou tout du moins, phpLDAPadmin ne sait pas comment récupérer le schéma pour votre serveur.'; $lang['jump_to_objectclass'] = 'Aller à une classe d\'objet'; $lang['jump_to_attr'] = 'Aller à un attribut'; +$lang['jump_to_matching_rule'] = 'Aller à une règle d\'égalité'; $lang['schema_for_server'] = 'Schema pour le serveur'; $lang['required_attrs'] = 'Attributs obligatoires'; -$lang['optional_attrs'] = 'Attributs facultatifs'; +$lang['optional_attrs'] = 'Attributs optionnels'; +$lang['optional_binary_attrs'] = 'Attributs binaires optionnels'; $lang['OID'] = 'OID'; +$lang['aliases']='Alias'; $lang['desc'] = 'Description'; +$lang['no_description']='aucune description'; $lang['name'] = 'Nom'; -$lang['is_obsolete'] = 'Cette classe d\'objet est obsolete'; +$lang['equality']='Egalité'; +$lang['is_obsolete'] = 'Cette classe d\'objet est obsolete'; $lang['inherits'] = 'hérite'; +$lang['inherited_from']='hérite de'; $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é'; +$lang['character']='caractère'; +$lang['characters']='caractères'; +$lang['used_by_objectclasses']='Utilisé par les objectClasses'; +$lang['used_by_attributes']='Utilisé par les attributes'; +$lang['maximum_length']='Maximum Length'; +$lang['attributes']='Types d\'attribut'; +$lang['syntaxes']='Syntaxes'; +$lang['objectclasses']='objectClasses'; +$lang['matchingrules']='Règles d\'égalité'; +$lang['oid']='OID'; +$lang['obsolete']='Obsolète'; +$lang['ordering']='Ordonné'; +$lang['substring_rule']='Substring Rule'; +$lang['single_valued']='Valeur Unique'; +$lang['collective']='Collective'; +$lang['user_modification']='Modification Utilisateur'; +$lang['usage']='Usage'; +$lang['maximum_length']='Longueur maximale'; +$lang['could_not_retrieve_schema_from']='Impossible de récupérer le schéma de'; +$lang['type']='Type'; // 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'; +$lang['no_such_entry'] = 'Aucune entrée de ce type: %s'; +$lang['delete_dn'] = 'Delete %s'; +$lang['permanently_delete_children'] = 'Effacer également les sous-entrées?'; +$lang['entry_is_root_sub_tree'] = 'Cette entrée est la racine d\'une arborescence contenant %s entrées.'; +$lang['view_entries'] = 'voir les entrées'; +$lang['confirm_recursive_delete'] = 'phpLDAPadmin peut supprimer cette entrées ainsi que les %s noeuds enfants de façon récursive. Voir ci-dessous pour une liste des entrées que cette action suprimera. Voulez-vous continuer?'; +$lang['confirm_recursive_delete_note'] = 'Note: ceci est potentiellement très dangereux and vous faîtes cela à vos propres risques. Cette opération ne peut être annulée. Prenez en considération les alias ainsi que d\'autres choses qui pourraient causer des problèmes.'; +$lang['delete_all_x_objects'] = 'Suppressions des %s objets'; +$lang['recursive_delete_progress'] = 'Progression de la suppression récursive'; +$lang['entry_and_sub_tree_deleted_successfully'] = 'L\'entrée %s ainsi que la sous-arborescence de ce noeud ont été supprimés avec succès.'; +$lang['failed_to_delete_entry'] = 'Echec lors de la suppression de l\'entrée %s'; +$lang['list_of_entries_to_be_deleted'] = 'Liste des entrées à supprimer:'; +$lang['sure_permanent_delete_object']='Etes-vous certain de vouloir supprimer définitivement cet objet?'; +$lang['dn'] = 'DN'; + +// Deleting attributes +$lang['attr_is_read_only'] = 'L\'attribut "%s" est marqué comme étant en lecture seule dans la configuration de phpLDAPadmin.'; +$lang['no_attr_specified'] = 'Aucun nom d\'attributs spécifié.'; +$lang['no_dn_specified'] = 'Aucun DN specifié'; + +// Adding attributes +$lang['left_attr_blank'] = 'Vous avez laisser la valeur de l\'attribut vide. Veuillez s\'il vous plaît retourner à la page précédente et recommencer.'; +$lang['failed_to_add_attr'] = 'Echec lors de l\'ajout de l\'attribut.'; + +// Updating values +$lang['modification_successful'] = 'Modification réussie!'; +$lang['change_password_new_login'] = 'Votre mot de passe ayant été changé, vous devez maintenant vous logger avec votre nouveau mot de passe.'; // Adding objectClass form $lang['new_required_attrs'] = 'Nouveaux Attributs Obligatoires'; @@ -155,6 +203,7 @@ $lang['no_updates_in_read_only_mode'] = 'Vous ne pouvez effectuer des mises $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_connect_to_host_on_port'] = 'Impossible de se connecter à "%s" sur le port "%s"'; $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'; @@ -166,6 +215,22 @@ $lang['back_up_p'] = 'Retour...'; $lang['no_entries'] = 'aucune entrée'; $lang['not_logged_in'] = 'Vous n\'êtes pas loggué'; $lang['could_not_det_base_dn'] = 'Impossible de déterminer le DN de base'; +$lang['please_report_this_as_a_bug']='Veuillez s\'il-vous-plaît rapporter ceci comme un bogue.'; +$lang['reasons_for_error']='Ceci peut arriver pour plusieurs raisons, les plus probables sont:'; +$lang['yes']='Oui'; +$lang['no']='Non'; +$lang['go']='Go'; +$lang['delete']='Suppression'; +$lang['back']='Back'; +$lang['object']='object'; +$lang['delete_all']='Tous les supprimer'; +$lang['url_bug_report']='https://sourceforge.net/tracker/?func=add&group_id=61828&atid=498546'; +$lang['hint'] = 'Astuce'; +$lang['bug'] = 'bogue'; +$lang['warning'] = 'Avertissement'; +$lang['light'] = 'lumière'; // the word 'light' from 'light bulb' +$lang['proceed_gt'] = 'Continuer >>'; + // Add value form $lang['add_new'] = 'Ajout d\'une nouvelle valeur '; @@ -174,7 +239,7 @@ $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.'; + '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-êre besoin d\'introduire de nouveaux attributs requis pour cette classe d\'objet'; $lang['syntax'] = 'Syntaxe'; @@ -195,6 +260,14 @@ $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.'; +$lang['template'] = 'Modèle'; +$lang['must_choose_template'] = 'Vous devez choisir un modèle'; +$lang['invalid_template'] = '%s est un modèle non valide'; +$lang['using_template'] = 'Utilisation du modèle'; +$lang['go_to_dn'] = 'Aller à %s'; + + + //copy_form.php $lang['copyf_title_copy'] = 'Copie de '; @@ -204,31 +277,45 @@ $lang['copyf_dest_dn_tooltip'] = 'Le DN de la nouvelle entr $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.'; +$lang['recursive_copy'] = 'Copie récursive'; +$lang['filter'] = 'Filtre'; +$lang['filter_tooltip'] = 'Lors d\'une copie récursive, seuls les entrées correspondant à ce filtre seront copiés'; //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_required_attribute'] = 'Une valeur n\'a pas été spécifiée pour l\'attribut requis %s.'; +$lang['redirecting'] = 'Redirection'; +$lang['here'] = 'ici'; $lang['create_could_not_add'] = 'L\'ajout de l\'objet au serveur LDAP n\'a pu être effectuée.'; +$lang['rdn_field_blank'] = 'Vous avez laisser le champ du RDN vide.'; +$lang['container_does_not_exist'] = 'Le containeur que vous avez spécifié (%s) n\'existe pas. Veuillez, s\'il vous plaît recommencer.'; +$lang['no_objectclasses_selected'] = 'Vous n\'avez sélectionner aucun ObjectClasses pour cet objet. Veuillez s\'il vous plaît retourner à la page précédente et le faire.'; +$lang['hint_structural_oclass'] = 'Note: Vous devez choisir au moins une classe d\'objet de type structural'; //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'; +$lang['relative_distinguished_name'] = 'Relative Distinguished Name'; +$lang['rdn'] = 'RDN'; +$lang['rdn_example'] = '(exemple: cn=MyNewPerson)'; +$lang['container'] = 'Containeur'; +$lang['alias_for'] = 'Alias pour %s'; + //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\'.'; - +$lang['create_step1'] = 'Etape 1 de 2: Nom et classes d\'objet'; +$lang['create_step2'] = 'Etape 2 de 2: Définition des attributs et de leurs valeurs'; //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['entries_found'] = 'Entrées trouvées: '; $lang['filter_performed'] = 'Filtre utilisé: '; $lang['search_duration'] = 'Recherche effectuée par phpLDAPadmin en'; $lang['seconds'] = 'secondes'; @@ -274,24 +361,28 @@ $lang['go_back'] = 'Retour'; // welcome.php $lang['welcome_note'] = 'Utilisez le menu de gauche pour la navigation'; +$lang['credits'] = 'Crédits'; +$lang['changelog'] = 'ChangeLog'; +$lang['donate'] = 'Donation'; // 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 +$lang['auto_update_not_setup'] = '"auto_uid_numbers" a été activé pour %s dans votre configuration, + mais vous n\'avez pas spécifié le mécanisme "auto_uid_number_mechanism". Veuiller corriger ce problème.'; -$lang['uidpool_not_set'] = 'Vous avez spécifié lauto_uid_number_mechanism comme uidpool +$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) +$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) +$lang['specified_uidpool'] = 'Le méchanisme "auto_uid_number_mechanism" a été défini à search dans votre + configuration pour le serveur %s, mais la directive "auto_uid_number_search_base" n\'est pad définie. Veuillez le spécifier avant de continuer.'; +$lang['auto_uid_invalid_credential'] = 'Impossible d\'effectuer un "bind" à %s avec vos droits pour "auto_uid". Veuillez S\'il vous plaît vérifier votre fichier de configuration.'; +$lang['bad_auto_uid_search_base'] = 'Votre fichier de configuration spécifie un invalide auto_uid_search_base pour le serveur %s'; +$lang['auto_uid_invalid_value'] = 'Une valeur non valide a été spécifiée pour le méchaninsme "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 @@ -299,7 +390,12 @@ $lang['error_auth_type_config'] = 'Erreur: Vous avez une erreur dans votre fichi 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['could_not_bind_anon'] = 'Impossible d\'effectuer un "bind" anonyme.'; +$lang['anonymous_bind'] = 'Bind Anonyme'; +$lang['bad_user_name_or_password'] = 'Mauvais nom d\'utilisateur ou mot de passe. Veuillez recommencer s\'il vous plaît.'; +$lang['redirecting_click_if_nothing_happens'] = 'Redirection... Cliquez ici si rien ne se passe.'; +$lang['successfully_logged_in_to_server'] = 'Login réussi sur le serveur %s'; +$lang['could_not_set_cookie'] = 'Impossible d\'activer les cookies.'; $lang['ldap_said'] = 'LDAP said: %s

'; $lang['ferror_error'] = 'Erreur'; $lang['fbrowse'] = 'naviguer'; @@ -343,6 +439,15 @@ $lang['add_action'] = 'Ajout de...'; $lang['delete_action'] = 'Supression de...'; $lang['rename_action'] = 'Renommage de...'; $lang['modify_action'] = 'Modification de...'; +$lang['warning_no_ldif_version_found'] = 'Aucun numéro de version trouvé. Version 1 supposé.'; +$lang['valid_dn_line_required'] = 'Une ligne avec un dn valide est requis.'; +$lang['valid_dn_line_required'] = 'A valid dn line is required.'; +$lang['missing_uploaded_file'] = 'Le fichier est manquant.'; +$lang['no_ldif_file_specified.'] = 'Aucun fichier LDIFspécifié. Veuillez réessayer, s\'il vous plaît.'; +$lang['ldif_file_empty'] = 'Le fichier LDIF est vide.'; +$lang['file'] = 'Fichier'; +$lang['number_bytes'] = '%s bytes'; + $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:'; @@ -352,4 +457,70 @@ $lang['ldif_could_not_modify_object'] = 'Impossible de modifier l\'objet:'; $lang['ldif_line_number'] = 'Numéro de ligne'; $lang['ldif_line'] = 'Ligne'; +//delete_form +$lang['sure_permanent_delete_object']='Etes-vous certain de vouloir supprimer définitivement cet objet?'; +$lang['list_of_entries_to_be_deleted'] = 'Liste des entrées à supprimer:'; +$lang['dn'] = 'DN'; + +// Exports +$lang['export_format'] = 'Format'; +$lang['line_ends'] = 'Fin de ligne'; +$lang['must_choose_export_format'] = 'Vous devez sélectionner un format pour l\'exportation.'; +$lang['invalid_export_format'] = 'Format d\'exportation invalide'; +$lang['no_exporter_found'] = 'Aucun exporteur trouvé.'; +$lang['error_performing_search'] = 'Une erreur a eu lieu lors de la recherche.'; +$lang['showing_results_x_through_y'] = 'Affichage de %s à %s des résultats.'; +$lang['searching'] = 'Recherche...'; +$lang['size_limit_exceeded'] = 'Notice, la limite de taille pour la recherche est atteinte.'; +$lang['entry'] = 'Entrée'; +$lang['ldif_export_for_dn'] = 'Export LDIF pour: %s'; +$lang['generated_on_date'] = 'Generé par phpLDAPadmin le %s'; +$lang['total_entries'] = 'Nombre d\'entrées'; +$lang['dsml_export_for_dn'] = 'Export DSML pour: %s'; + + +// logins +$lang['could_not_find_user'] = 'Impossible de trouver l\'utilisateur "%s"'; +$lang['password_blank'] = 'Le champ pour le mot de passe est vide.'; +$lang['login_cancelled'] = 'Login interrompu.'; +$lang['no_one_logged_in'] = 'Personne n\'est loggé à ce serveur.'; +$lang['could_not_logout'] = 'Impossible de se déconnecter.'; +$lang['unknown_auth_type'] = 'auth_type inconnu: %s'; +$lang['logged_out_successfully'] = 'Déconnection réussie du serveur %s'; +$lang['authenticate_to_server'] = 'Authentification au serveur %s'; +$lang['warning_this_web_connection_is_unencrypted'] = 'Attention: Cette connection web n\'est pas cryptée.'; +$lang['not_using_https'] = 'Vous n\'utilisez pas \'https\'. Le navigateur web transmettra les informations de login en clair.'; +$lang['login_dn'] = 'Login DN'; +$lang['user_name'] = 'Nom de l\'utilisateur'; +$lang['password'] = 'Mot de passe'; +$lang['authenticate'] = 'Authentification'; + +// Entry browser +$lang['entry_chooser_title'] = 'Sélection de l\'entrée'; + +// Index page +$lang['need_to_configure'] = 'phpLDAPadmin a besoin d\'être configuré.Pour cela, éditer le fichier \'config.php\' . Un exemple de fichier de configuration est fourni dans \'config.php.example\''; + +// Mass deletes +$lang['no_deletes_in_read_only'] = 'Les suppressions ne sont pas permises en mode lecure seule.'; +$lang['error_calling_mass_delete'] = 'Erreur lors de l\'appel à mass_delete.php. mass_delete est manquant dans les variables POST.'; +$lang['mass_delete_not_array'] = 'La variable POST mass_delete \'est pas un tableau.'; +$lang['mass_delete_not_enabled'] = 'La suppression de masse n\'est pas disponible. Veuillez l\'activer dans config.php avant de continuer.'; +$lang['mass_deleting'] = 'Suppression en masse'; +$lang['mass_delete_progress'] = 'Progrès de la suppression sur le serveur "%s"'; +$lang['malformed_mass_delete_array'] = 'Le tableau mass_delete n\'est pas bien formé.'; +$lang['no_entries_to_delete'] = 'Vous n\'avez sélectionné aucune entrées à effacer.'; +$lang['deleting_dn'] = 'Deleting %s'; +$lang['total_entries_failed'] = '%s des %s entrées n\'ont pu être supprimées.'; +$lang['all_entries_successful'] = 'Toutes les entrées ont été supprimées avec succès.'; +$lang['confirm_mass_delete'] = 'Confirmation de la suppression en masse de %s entrées sur le serveur %s'; +$lang['yes_delete'] = 'Oui, supprimer!'; + +// Renaming entries +$lang['non_leaf_nodes_cannot_be_renamed'] = 'Vous ne pouvez pas renommer une entrée qui a des sous-entrées'; +$lang['no_rdn_change'] = 'Le RDN n\'a pas été modifié'; +$lang['invalid_rdn'] = 'Valeur invalide du RDN'; +$lang['could_not_rename'] = 'Impossible de renommer l\'entrée'; + + ?> diff --git a/lang/it.php b/lang/it.php index f49d6f7..814eedf 100644 --- a/lang/it.php +++ b/lang/it.php @@ -1,4 +1,6 @@ - * Uwe Ebel + * Vertaling door Richard Lucassen + * Commentaar gaarne naar bovenstaand adres sturen a.u.b. */ // Search form @@ -56,9 +58,9 @@ $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['export_mac'] = 'Macintosh regeleinden';//'Macintosh style line ends'; +$lang['export_win'] = 'Windows regeleinden';//'Windows style line ends'; +$lang['export_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'; @@ -239,6 +241,7 @@ $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'; +$lang['predefined_search_str'] = 'of een van deze lijst uitlezen';//'or select a predefined search'; // server_info.php $lang['could_not_fetch_server_info'] = 'kan geen LDAP van de server krijgen';//'Could not retrieve LDAP information from the server'; @@ -326,4 +329,9 @@ $lang['ldif_could_not_modify_object'] = 'Kan object niet wijzigen'; $lang['ldif_line_number'] = 'regelnummer: '; $lang['ldif_line'] = 'regel: '; +$lang['credits'] = 'Credits';//'Credits'; +$lang['changelog'] = 'Changelog';//'ChangeLog'; +$lang['documentation'] = 'Documentatie';// 'Documentation'; + + ?> diff --git a/lang/pl.php b/lang/pl.php new file mode 100644 index 0000000..70d5cf5 --- /dev/null +++ b/lang/pl.php @@ -0,0 +1,508 @@ + Czy na pewno chcesz to zrobiæ ?'; +$lang['confirm_recursive_delete_note'] = 'Uwaga: ta operacja jest potencjalnie bardzo niebezpieczna i wykonujesz j± na w³asne ryzyko. Ta akcja nie mo¿e zostaæ cofniêta. We¼ pod uwagê aliasy, owo³ania i inne rzeczy, które mog± spowodowaæ problemy.'; +$lang['delete_all_x_objects'] = 'Usuñ wszystkie %s obiekty/ów'; +$lang['recursive_delete_progress'] = 'Postêp rekursywnego usuwania'; +$lang['entry_and_sub_tree_deleted_successfully'] = 'Wpis %s oraz poddrzewo zosta³y pomy¶lnie usuniête.'; +$lang['failed_to_delete_entry'] = 'B³±d podczas usuwania wpisu %s'; + +// Deleting attributes +$lang['attr_is_read_only'] = 'Atrybut "%s" jest oznaczony jako tylko-do-odczytu w konfiguracji phpLDAPadmin.'; +$lang['no_attr_specified'] = 'Nie okre¶lono nazwy atrybutu.'; +$lang['no_dn_specified'] = 'Nie okre¶lono DN'; + +// Adding attributes +$lang['left_attr_blank'] = 'Pozostawi³e¶/a¶ pust± warto¶æ atrybutu. Proszê wróciæ i spróbowaæ ponownie.'; +$lang['failed_to_add_attr'] = 'B³±d podczas dodawania atrybutu.'; + +// Updating values +$lang['modification_successful'] = 'Modyfikacja zakoñczona pomy¶lnie.'; +$lang['change_password_new_login'] = 'Je¶li zmieni³e¶/a¶ has³o, musisz siê zalogowaæ ponownie z nowym has³em.'; + +// Adding objectClass form +$lang['new_required_attrs'] = 'Nowe atrybuty wymagane'; +$lang['requires_to_add'] = 'Ta akcja wymaga, aby¶ doda³/a'; +$lang['new_attributes'] = 'nowe atrybuty'; +$lang['new_required_attrs_instructions'] = 'Instrukcja: Aby dodaæ tê klasê obiektu do tego wpisu, musisz okre¶liæ'; +$lang['that_this_oclass_requires'] = 'co ta klasa obiektu wymaga. Mo¿esz zrobiæ to w tym formularzu.'; +$lang['add_oclass_and_attrs'] = 'Dodaj klasê obiektu i atrybuty'; + +// General +$lang['chooser_link_tooltip'] = 'Kliknij aby wywo³aæ okno i wybraæ wpis (DN) graficznie'; +$lang['no_updates_in_read_only_mode'] = 'Nie mo¿esz wykonaæ modyfikacji dopóki serwer jest w trybie tylko-do-odczytu'; +$lang['bad_server_id'] = 'Z³y identyfikator (id) serwera'; +$lang['not_enough_login_info'] = 'Brak wystarczaj±cych informacji aby zalogowaæ siê do serwera. Proszê sprawdziæ konfiguracjê.'; +$lang['could_not_connect'] = 'Nie mo¿na pod³±czyæ siê do serwera LDAP.'; +$lang['could_not_connect_to_host_on_port'] = 'Nie mo¿na pod³±czyæ siê do "%s" na port "%s"'; +$lang['could_not_perform_ldap_mod_add'] = 'Nie mo¿na dokonaæ operacji ldap_mod_add.'; +$lang['bad_server_id_underline'] = 'Z³y server_id: '; +$lang['success'] = 'Sukces'; +$lang['server_colon_pare'] = 'Serwer: '; +$lang['look_in'] = 'Szukam w: '; +$lang['missing_server_id_in_query_string'] = 'Nie okre¶lono ID serwera w zapytaniu !'; +$lang['missing_dn_in_query_string'] = 'Nie okre¶lono DN w zapytaniu !'; +$lang['back_up_p'] = 'Do góry...'; +$lang['no_entries'] = 'brak wpisów'; +$lang['not_logged_in'] = 'Nie zalogowany/a'; +$lang['could_not_det_base_dn'] = 'Nie mo¿na okre¶liæ bazowego DN'; +$lang['please_report_this_as_a_bug']='Proszê zg³osiæ to jako b³±d.'; +$lang['reasons_for_error']='To mog³o zdarzyæ siê z kilku powodów, z których najbardziej prawdopodobne to:'; +$lang['yes']='Tak'; +$lang['no']='Nie'; +$lang['go']='Id¼'; +$lang['delete']='Usuñ'; +$lang['back']='Powrót'; +$lang['object']='obiekt'; +$lang['delete_all']='Usuñ wszystko'; +$lang['url_bug_report']='https://sourceforge.net/tracker/?func=add&group_id=61828&atid=498546'; +$lang['hint'] = 'wskazówka'; +$lang['bug'] = 'b³±d (bug)'; +$lang['warning'] = 'ostrze¿enie'; +$lang['light'] = '¿arówka'; // the word 'light' from 'light bulb' +$lang['proceed_gt'] = 'Dalej >>'; + +// Add value form +$lang['add_new'] = 'Dodaj'; +$lang['value_to'] = 'warto¶æ do'; +$lang['distinguished_name'] = 'Wyró¿niona Nazwa (DN)'; +$lang['current_list_of'] = 'Aktualna lista'; +$lang['values_for_attribute'] = 'warto¶ci dla atrybutu'; +$lang['inappropriate_matching_note'] = 'Uwaga: Je¶li nie ustawisz regu³y EQUALITY dla tego atrybutu na Twoim serwerze LDAP otrzymasz b³±d "niew³a¶ciwe dopasowanie (inappropriate matching)"'; +$lang['enter_value_to_add'] = 'Wprowad¼ warto¶æ, któr± chcesz dodaæ:'; +$lang['new_required_attrs_note'] = 'Uwaga: mo¿e byæ wymagane wprowadzenie nowych atrybutów wymaganych przez tê klasê obiektu'; +$lang['syntax'] = 'Sk³adnia'; + +//copy.php +$lang['copy_server_read_only'] = 'Nie mo¿esz dokonaæ modyfikacji dopóki serwer jest w trybie tylko-do-odczytu'; +$lang['copy_dest_dn_blank'] = 'Nie wype³niono docelowej DN.'; +$lang['copy_dest_already_exists'] = 'Docelowy wpis (%s) ju¿ istnieje.'; +$lang['copy_dest_container_does_not_exist'] = 'Docelowy kontener (%s) nie istnieje.'; +$lang['copy_source_dest_dn_same'] = '¬ród³owa i docelowa DN s± takie same.'; +$lang['copy_copying'] = 'Kopiowanie '; +$lang['copy_recursive_copy_progress'] = 'Postêp kopiowania rekursywnego'; +$lang['copy_building_snapshot'] = 'Budowanie migawki (snapshot) drzewa do skopiowania... '; +$lang['copy_successful_like_to'] = 'Kopiowanie zakoñczone pomy¶lnie. Czy chcesz '; +$lang['copy_view_new_entry'] = 'zobaczyæ nowy wpis '; +$lang['copy_failed'] = 'B³±d podczas kopiowania DN: '; + +//edit.php +$lang['missing_template_file'] = 'Uwaga: brak pliku szablonu, '; +$lang['using_default'] = 'U¿ywam domy¶lnego.'; +$lang['template'] = 'Szablon'; +$lang['must_choose_template'] = 'Musisz wybraæ szablon'; +$lang['invalid_template'] = '%s nie jest prawid³owym szablonem'; +$lang['using_template'] = 'wykorzystuj±c szablon'; +$lang['go_to_dn'] = 'Id¼ do %s'; + +//copy_form.php +$lang['copyf_title_copy'] = 'Kopiuj '; +$lang['copyf_to_new_object'] = 'do nowego obiektu'; +$lang['copyf_dest_dn'] = 'Docelowa DN'; +$lang['copyf_dest_dn_tooltip'] = 'Pe³na DN nowego wpisu do utworzenia poprzez skopiowanie wpisu ¼ród³owego'; +$lang['copyf_dest_server'] = 'Docelowy serwer'; +$lang['copyf_note'] = 'Wskazówka: Kopiowanie pomiêdzy ró¿nymi serwerami dzia³a wtedy, gdy nie wystêpuje naruszenie schematów'; +$lang['copyf_recursive_copy'] = 'Rekursywne kopiowanie wszystkich potomnych obiektów'; +$lang['recursive_copy'] = 'Kopia rekursywna'; +$lang['filter'] = 'Filtr'; +$lang['filter_tooltip'] = 'Podczas rekursywnego kopiowania, kopiowane s± tylko wpisy pasuj±ce do filtra'; + +//create.php +$lang['create_required_attribute'] = 'Brak warto¶ci dla wymaganego atrybutu (%s).'; +$lang['redirecting'] = 'Przekierowujê'; +$lang['here'] = 'tutaj'; +$lang['create_could_not_add'] = 'Nie mo¿na dodaæ obiektu do serwera LDAP.'; + +//create_form.php +$lang['createf_create_object'] = 'Utwórz obiekt'; +$lang['createf_choose_temp'] = 'Wybierz szablon'; +$lang['createf_select_temp'] = 'Wybierz szablon dla procesu tworzenia'; +$lang['createf_proceed'] = 'Dalej'; +$lang['rdn_field_blank'] = 'Pozostawi³e¶/a¶ puste pole RDN.'; +$lang['container_does_not_exist'] = 'Kontener który okre¶li³e¶/a¶ (%s) nie istnieje. Spróbuj ponownie.'; +$lang['no_objectclasses_selected'] = 'Nie wybra³e¶/a¶ ¿adnych Klas Obiektu dla tego obiektu. Wróæ proszê i zrób to.'; +$lang['hint_structural_oclass'] = 'Wskazówka: Musisz wybraæ co najmniej jedn± strukturaln± klasê obiektu'; + +//creation_template.php +$lang['ctemplate_on_server'] = 'Na serwerze'; +$lang['ctemplate_no_template'] = 'Brak okre¶lenia szablonu w zmiennych POST.'; +$lang['ctemplate_config_handler'] = 'Twoja konfiguracja okre¶la handler'; +$lang['ctemplate_handler_does_not_exist'] = 'dla tego szablonu. Ale, ten handler nie istnieje w szablonach/tworzonym katalogu'; +$lang['create_step1'] = 'Krok 1 z 2: Nazwa i klasa/y obiektu'; +$lang['create_step2'] = 'Krok 2 z 2: Okre¶lenie atrybutów i warto¶ci'; +$lang['relative_distinguished_name'] = 'Relatywna Wyró¿niona Nazwa (RDN)'; +$lang['rdn'] = 'RDN'; +$lang['rdn_example'] = '(przyk³ad: cn=MyNewPerson)'; +$lang['container'] = 'Kontener'; + +// search.php +$lang['you_have_not_logged_into_server'] = 'Nie zalogowa³e¶/a¶ siê jeszcze do wybranego serwera, wiêc nie mo¿esz go przeszukiwaæ.'; +$lang['click_to_go_to_login_form'] = 'Kliknij tutaj aby przej¶æ do formularza logowania'; +$lang['unrecognized_criteria_option'] = 'Nierozpoznane kryterium opcji: '; +$lang['if_you_want_to_add_criteria'] = 'Je¶li chcesz dodaæ w³asne kryteria do listy, zmodyfikuj plik search.php aby to obs³u¿yæ.'; +$lang['entries_found'] = 'Znaleziono wpisów: '; +$lang['filter_performed'] = 'Zastosowano filtr: '; +$lang['search_duration'] = 'Wyszukiwanie wykonane przez phpLDAPadmin w'; +$lang['seconds'] = 'sekund(y)'; + +// search_form_advanced.php +$lang['scope_in_which_to_search'] = 'Przeszukiwany zakres'; +$lang['scope_sub'] = 'Sub (ca³e poddrzewo)'; +$lang['scope_one'] = 'One (jeden poziom poni¿ej bazowej)'; +$lang['scope_base'] = 'Base (tylko bazowa dn)'; +$lang['standard_ldap_search_filter'] = 'Standardowy filtr dla LDAP. Na przyk³ad: (&(sn=Kowalski)(givenname=Jan))'; +$lang['search_filter'] = 'Filtr wyszukiwania'; +$lang['list_of_attrs_to_display_in_results'] = 'Lista atrybutów do wy¶wietlenia rezultatów (rozdzielona przecinkami)'; + +// search_form_simple.php +$lang['starts with'] = 'zaczyna siê od'; +$lang['ends with'] = 'koñczy siê na'; +$lang['sounds like'] = 'brzmi jak'; + +// server_info.php +$lang['could_not_fetch_server_info'] = 'Nie mo¿na uzyskaæ informacji od serwera LDAP'; +$lang['server_info_for'] = 'Informacja o serwerze: '; +$lang['server_reports_following'] = 'Serwer zwróci³ nastêpuj±ce informacje o sobie'; +$lang['nothing_to_report'] = 'Ten serwer nie chce nic powiedzieæ o sobie :).'; + +//update.php +$lang['update_array_malformed'] = 'tablica modyfikacji (update_array) jest zniekszta³cona. To mo¿e byæ b³±d (bug) w phpLDAPadmin. Proszê to zg³osiæ.'; +$lang['could_not_perform_ldap_modify'] = 'Nie mo¿na wykonaæ operacji modyfikacji (ldap_modify).'; + +// update_confirm.php +$lang['do_you_want_to_make_these_changes'] = 'Czy chcesz dokonaæ tych zmian ?'; +$lang['attribute'] = 'Atrybuty'; +$lang['old_value'] = 'Stara warto¶æ'; +$lang['new_value'] = 'Nowa warto¶æ'; +$lang['attr_deleted'] = '[atrybut usuniêty]'; +$lang['commit'] = 'Zatwierd¼'; +$lang['cancel'] = 'Anuluj'; +$lang['you_made_no_changes'] = 'Nie dokonano ¿adnych zmian'; +$lang['go_back'] = 'Powrót'; + +// welcome.php +$lang['welcome_note'] = 'U¿yj menu z lewej strony do nawigacji'; +$lang['credits'] = 'Credits'; +$lang['changelog'] = 'ChangeLog'; +$lang['donate'] = 'Donate'; + +// view_jpeg_photo.php +$lang['unsafe_file_name'] = 'Niebezpieczna nazwa pliku: '; +$lang['no_such_file'] = 'Nie znaleziono pliku: '; + +//function.php +$lang['auto_update_not_setup'] = 'Zezwoli³e¶/a¶ na automatyczne nadawanie uid (auto_uid_numbers) + dla %s w konfiguracji, ale nie okre¶li³e¶/a¶ mechanizmu + (auto_uid_number_mechanism). Proszê skorygowaæ ten problem.'; +$lang['uidpool_not_set'] = 'Okre¶li³e¶/a¶ mechanizm autonumerowania uid "auto_uid_number_mechanism" jako "uidpool" w konfiguracji Twojego serwera %s, lecz nie okre¶li³e¶/a¶ audo_uid_number_uid_pool_dn. Proszê okre¶l to zanim przejdziesz dalej.'; +$lang['uidpool_not_exist'] = 'Wygl±da na to, ¿e uidPool, któr± okre¶li³e¶/a¶ w Twojej konfiguracji ("%s") nie istnieje.'; +$lang['specified_uidpool'] = 'Okre¶li³e¶/a¶ "auto_uid_number_mechanism" jako "search" w konfiguracji Twojego serwera %s, ale nie okre¶li³e¶/a¶ bazy "auto_uid_number_search_base". Zrób to zanim przejdziesz dalej.'; +$lang['auto_uid_invalid_credential'] = 'Nie mo¿na pod³±czyæ do %s z podan± to¿samo¶ci± auto_uid. Sprawd¼ proszê swój plik konfiguracyjny.'; +$lang['bad_auto_uid_search_base'] = 'W Twojej konfiguracji phpLDAPadmin okre¶lona jest nieprawid³owa warto¶æ auto_uid_search_base dla serwera %s'; +$lang['auto_uid_invalid_value'] = 'Okre¶li³e¶/a¶ b³êdn± warto¶æ dla auto_uid_number_mechanism ("%s") w konfiguracji. Tylko "uidpool" i "search" s± poprawne. Proszê skorygowaæ ten problem.'; +$lang['error_auth_type_config'] = 'B³±d: Masz b³±d w pliku konfiguracji. Trzy mo¿liwe warto¶ci dla auth_type w sekcji $servers to \'session\', \'cookie\' oraz \'config\'. Ty wpisa³e¶/a¶ \'%s\', co jest niedozwolone. '; +$lang['php_install_not_supports_tls'] = 'Twoja instalacja PHP nie wspiera TLS.'; +$lang['could_not_start_tls'] = 'Nie mo¿na uruchomiæ TLS. Proszê sprawdziæ konfiguracjê serwera LDAP.'; +$lang['could_not_bind_anon'] = 'Nie mo¿na anonimowo pod³±czyæ do serwera.'; +$lang['could_not_bind'] = 'Nie mo¿na pod³±czyæ siê do serwera LDAP.'; +$lang['anonymous_bind'] = 'Pod³±czenie anonimowe'; +$lang['bad_user_name_or_password'] = 'Z³a nazwa u¿ytkownika lub has³o. Spróbuj ponownie.'; +$lang['redirecting_click_if_nothing_happens'] = 'Przekierowujê... Kliknij tutaj je¶li nic siê nie dzieje.'; +$lang['successfully_logged_in_to_server'] = 'Pomy¶lnie zalogowano do serwera %s'; +$lang['could_not_set_cookie'] = 'Nie mo¿na ustawiæ ciasteczka (cookie).'; +$lang['ldap_said'] = 'LDAP odpowiedzia³: %s'; +$lang['ferror_error'] = 'B³±d'; +$lang['fbrowse'] = 'przegl±daj'; +$lang['delete_photo'] = 'Usuñ fotografiê'; +$lang['install_not_support_blowfish'] = 'Twoja instalacja PHP nie wspiera szyfrowania blowfish.'; +$lang['install_not_support_md5crypt'] = 'Twoja instalacja PHP nie wspiera szyfrowania md5crypt.'; +$lang['install_no_mash'] = 'Twoja instalacja PHP nie posiada funkcji mhash(). Nie mogê tworzyæ haszy SHA.'; +$lang['jpeg_contains_errors'] = 'jpegPhoto zawiera b³êdy
'; +$lang['ferror_number'] = 'B³±d numer: %s (%s)'; +$lang['ferror_discription'] = 'Opis: %s

'; +$lang['ferror_number_short'] = 'B³±d numer: %s

'; +$lang['ferror_discription_short'] = 'Opis: (brak dostêpnego opisu)
'; +$lang['ferror_submit_bug'] = 'Czy jest to b³±d w phpLDAPadmin ? Je¶li tak, proszê go zg³osiæ.'; +$lang['ferror_unrecognized_num'] = 'Nierozpoznany numer b³êdu: '; +$lang['ferror_nonfatil_bug'] = '
+
+ Znalaz³e¶ b³±d w phpLDAPadmin (nie krytyczny) !
B³±d:%s (%s)
Plik:%s linia %s, wywo³ane z %s
Wersje:PLA: %s, PHP: %s, SAPI: %s +
Serwer Web:%s
+ Proszê zg³o¶ ten b³±d klikaj±c tutaj.

'; +$lang['ferror_congrats_found_bug'] = 'Gratulacje ! Znalaz³e¶ b³±d w phpLDAPadmin.

+ + + + + + + + + + +
B³±d:%s
Poziom:%s
Plik:%s
Linia:%s
Wywo³ane z:%s
Wersja PLA:%s
Wersja PHP:%s
PHP SAPI:%s
Serwer Web:%s
+
+ Proszê zg³o¶ ten b³±d klikaj±c poni¿ej !'; + +//ldif_import_form +$lang['import_ldif_file_title'] = 'Importuj plik LDIF'; +$lang['select_ldif_file'] = 'Wybierz plik LDIF:'; +$lang['select_ldif_file_proceed'] = 'Dalej >>'; +$lang['dont_stop_on_errors'] = 'Nie zatrzymuj siê po napotkaniu b³êdów'; + +//ldif_import +$lang['add_action'] = 'Dodawanie...'; +$lang['delete_action'] = 'Usuwanie...'; +$lang['rename_action'] = 'Zmiana nazwy...'; +$lang['modify_action'] = 'Modyfikowanie...'; +$lang['warning_no_ldif_version_found'] = 'Nie znaleziono numeru wersji. Przyjmujê 1.'; +$lang['valid_dn_line_required'] = 'Wymagana jest poprawna linia DN.'; +$lang['missing_uploaded_file'] = 'Brak wgrywanego pliku.'; +$lang['no_ldif_file_specified.'] = 'Nie okre¶lono pliku LDIF. Spróbuj ponownie.'; +$lang['ldif_file_empty'] = 'Wgrany plik LDIF jest pusty.'; +$lang['empty'] = 'pusty'; +$lang['file'] = 'Plik'; +$lang['number_bytes'] = '%s bajtów'; + +$lang['failed'] = 'Nieudane'; +$lang['ldif_parse_error'] = 'B³±d przetwarzania LDIF (Parse Error)'; +$lang['ldif_could_not_add_object'] = 'Nie mo¿na dodaæ obiektu:'; +$lang['ldif_could_not_rename_object'] = 'Nie mo¿na zmieniæ nazwy obiektu:'; +$lang['ldif_could_not_delete_object'] = 'Nie mo¿na usun±æ obiektu:'; +$lang['ldif_could_not_modify_object'] = 'Nie mo¿na zmodyfikowaæ obiektu:'; +$lang['ldif_line_number'] = 'Linia numer:'; +$lang['ldif_line'] = 'Linia:'; + +//delete_form +$lang['sure_permanent_delete_object']='Czy na pewno trwale usun±æ ten obiekt ?'; +$lang['list_of_entries_to_be_deleted'] = 'Lista wpisów do usuniêcia:'; +$lang['dn'] = 'DN'; + +// Exports +$lang['export_format'] = 'Format eksportu'; +$lang['line_ends'] = 'Zakoñczenie linii'; +$lang['must_choose_export_format'] = 'Musisz wybraæ format eksportu.'; +$lang['invalid_export_format'] = 'B³êdny format eksportu'; +$lang['no_exporter_found'] = 'Nie znaleziono dostêpnego eksportera.'; +$lang['error_performing_search'] = 'Napotkano b³±d podczas szukania.'; +$lang['showing_results_x_through_y'] = 'Pokazywanie rezultatów %s przez %s.'; +$lang['searching'] = 'Szukam...'; +$lang['size_limit_exceeded'] = 'Uwaga, przekroczono limit rozmiaru wyszukiwania.'; +$lang['entry'] = 'Wpis'; +$lang['ldif_export_for_dn'] = 'Eksport LDIF dla: %s'; +$lang['generated_on_date'] = 'Wygenerowane przez phpLDAPadmin na %s'; +$lang['total_entries'] = '£±cznie wpisów'; +$lang['dsml_export_for_dn'] = 'Eksport DSLM dla: %s'; + +// logins +$lang['could_not_find_user'] = 'Nie mo¿na znale¼æ u¿ytkownika "%s"'; +$lang['password_blank'] = 'Pozostawi³e¶/a¶ puste has³o.'; +$lang['login_cancelled'] = 'Logowanie anulowane.'; +$lang['no_one_logged_in'] = 'Nikt nie jest zalogowany do tego serwera.'; +$lang['could_not_logout'] = 'Nie mo¿na wylogowaæ.'; +$lang['unknown_auth_type'] = 'Nieznany auth_type: %s'; +$lang['logged_out_successfully'] = 'Pomy¶lnie wylogowano z serwera %s'; +$lang['authenticate_to_server'] = 'Uwierzytelnienie dla serwera %s'; +$lang['warning_this_web_connection_is_unencrypted'] = 'Uwaga: To po³±czenie nie jest szyfrowane.'; +$lang['not_using_https'] = 'Nie u¿ywasz \'https\'. Przegl±darka bêdzie transmitowaæ informacjê logowania czystym tekstem (clear text).'; +$lang['login_dn'] = 'Login DN'; +$lang['user_name'] = 'Nazwa u¿ytkownika'; +$lang['password'] = 'Has³o'; +$lang['authenticate'] = 'Zaloguj'; + +// Entry browser +$lang['entry_chooser_title'] = 'Wybór wpisu'; + +// Index page +$lang['need_to_configure'] = 'Musisz skonfigurowaæ phpLDAPadmin. Wyedytuj plik \'config.php\' aby to zrobiæ. Przyk³ad pliku konfiguracji znajduje siê w \'config.php.example\''; + +// Mass deletes +$lang['no_deletes_in_read_only'] = 'Usuwanie jest niedozwolone w trybie tylko-do-odczytu.'; +$lang['error_calling_mass_delete'] = 'B³±d podczas wywo³ania mass_delete.php. Brakuj±ca mass_delete w zmiennych POST.'; +$lang['mass_delete_not_array'] = 'zmienna POST mass_delete nie jest w tablic±.'; +$lang['mass_delete_not_enabled'] = 'Masowe usuwanie nie jest dozwolone. Odblokuj to proszê w config.php przed kontynuacj±.'; +$lang['mass_deleting'] = 'Masowe usuwanie'; +$lang['mass_delete_progress'] = 'Postêp usuwania na serwerze "%s"'; +$lang['malformed_mass_delete_array'] = 'Zniekszta³cona tablica mass_delete.'; +$lang['no_entries_to_delete'] = 'Nie wybrano ¿adnegych wpisów do usuniêcia.'; +$lang['deleting_dn'] = 'Usuwanie %s'; +$lang['total_entries_failed'] = '%s z %s wpisów nie zosta³o usuniêtych.'; +$lang['all_entries_successful'] = 'Wszystkie wpisy pomy¶lnie usunieto.'; +$lang['confirm_mass_delete'] = 'Potwierd¼ masowe usuniêcie %s wpisów na serwerze %s'; +$lang['yes_delete'] = 'Tak, usuñ !'; + +// Renaming entries +$lang['non_leaf_nodes_cannot_be_renamed'] = 'Nie mo¿esz zmieniæ nazwy wpisu, posiadaj±cego wpisy potomne (np. operacja zmiany nazwy nie jest dozwolona na wpisach nie bêd±cych li¶cmi).'; +$lang['no_rdn_change'] = 'Nie zmieni³e¶/a¶ RDN'; +$lang['invalid_rdn'] = 'B³êdna warto¶æ RDN'; +$lang['could_not_rename'] = 'Nie mo¿na zmieniæ nazwy wpisu'; + +?> diff --git a/lang/pt-br.php b/lang/pt-br.php new file mode 100644 index 0000000..5a19e29 --- /dev/null +++ b/lang/pt-br.php @@ -0,0 +1,361 @@ +DN'; +$lang['search_scope'] = 'Abrangência da Busca'; +$lang['search_ filter'] = 'Filtro de Busca'; +$lang['show_attributes'] = 'Exibir Atributos'; +$lang['Search'] = 'Buscar'; +// $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'] = 'Requisitar um novo recurso'; +$lang['see_open_requests'] = 'Ver as requisições em aberto'; +$lang['report_bug'] = 'Comunicar um problema/defeito'; +$lang['see_open_bugs'] = 'Ver os problemas/defeitos em aberto'; +$lang['schema'] = 'esquemas'; +$lang['search'] = 'buscar'; +$lang['create'] = 'novo'; +$lang['info'] = 'info'; +$lang['import'] = 'importar'; +$lang['refresh'] = 'atualizar'; +$lang['logout'] = 'desconectar'; +$lang['create_new'] = 'Criar Novo'; +$lang['view_schema_for'] = 'ver esquemas de'; +$lang['refresh_expanded_containers'] = 'atualizar todos os containers abertos em'; +$lang['create_new_entry_on'] = 'criar um novo objeto em'; +$lang['view_server_info'] = 'visualizar as informações fornecidas pelo servidor'; +$lang['import_from_ldif'] = 'importar objetos de um arquivo LDIF'; +$lang['logout_of_this_server'] = 'desconectar deste servidor'; +$lang['logged_in_as'] = 'Conectado como: '; +$lang['read_only'] = 'somente leitura'; +$lang['could_not_determine_root'] = 'Incapaz de determinar a raiz do sua árvore LDAP.'; +$lang['ldap_refuses_to_give_root'] = 'Aparentemente o servidor LDAP foi configurado para ocultar sua raiz.'; +$lang['please_specify_in_config'] = 'Por favor, especifique no arquivo config.php'; +$lang['create_new_entry_in'] = 'Criar um novo objeto em'; +$lang['login_link'] = 'Conectar...'; + +// Entry display +$lang['delete_this_entry'] = 'Apagar este objeto'; +$lang['delete_this_entry_tooltip'] = 'Será solicitado que você confirme sua decisão'; +$lang['copy_this_entry'] = 'Copiar este objeto'; +$lang['copy_this_entry_tooltip'] = 'Copia este objeto para outro contexto, para um novo DN ou para outro servidor'; +$lang['export_to_ldif'] = 'Exportar para LDIF'; +$lang['export_to_ldif_tooltip'] = 'Salva um arquivo LDIF com os dados deste objeto'; +$lang['export_subtree_to_ldif_tooltip'] = 'Salva um arquivo LDIF com os dados deste objeto e todos os seus filhos'; +$lang['export_subtree_to_ldif'] = 'Exportar ramos para LDIF'; +$lang['export_mac'] = 'Arquivo texto do tipo Macintosh'; +$lang['export_win'] = 'Arquivo texto do tipo DOS/Windows'; +$lang['export_unix'] = 'Arquivo texto do tipo Unix'; +$lang['create_a_child_entry'] = 'Criar um objeto-filho'; +$lang['add_a_jpeg_photo'] = 'Adicionar uma imagem JPEG'; +$lang['rename_entry'] = 'Renomear Objeto'; +$lang['rename'] = 'Renomear'; +$lang['add'] = 'Adicionar'; +$lang['view'] = 'Ver'; +$lang['add_new_attribute'] = 'Adicionar Novo Atributo'; +$lang['add_new_attribute_tooltip'] = 'Adiciona um novo atributo/valor para este objeto'; +$lang['internal_attributes'] = 'Atributos Internos'; +$lang['hide_internal_attrs'] = 'Ocultar os atributos internos'; +$lang['show_internal_attrs'] = 'Exibir os atributos internos'; +$lang['internal_attrs_tooltip'] = 'Atributos configurados automaticamente pelo sistema'; +$lang['entry_attributes'] = 'Atributos do Objeto'; +$lang['attr_name_tooltip'] = 'Clique para visualizar a definição do esquema para atributos do tipo \'%s\''; +$lang['click_to_display'] = 'Clique em \'+\' para exibir'; +$lang['hidden'] = 'ocultos'; +$lang['none'] = 'nenhum'; +$lang['save_changes'] = 'Salvar Alterações'; +$lang['add_value'] = 'adicionar novo valor'; +$lang['add_value_tooltip'] = 'Adiciona um novo valor para o atributo \'%s\''; +$lang['refresh_entry'] = 'Atualizar'; +$lang['refresh_this_entry'] = 'Atualiza este objeto'; +$lang['delete_hint'] = "Dica: Para apagar um atributo, deixe o campo correspondente vazio e clique em 'Salvar Alterações'."; +$lang['attr_schema_hint'] = 'Dica: Para visualizar o esquema de um atributo, clique no nome do atributo desejado.'; +$lang['attrs_modified'] = 'Alguns atributos (%s) foram modificados e estão destacados abaixo.'; +$lang['attr_modified'] = 'Um atributo (%s) foi modificado e está destacado abaixo.'; +$lang['viewing_read_only'] = 'Visualizando o objeto em modo somente-leitura.'; +$lang['change_entry_rdn'] = 'Alterar o RDN deste objeto'; +$lang['no_new_attrs_available'] = 'não há mais atributos disponíveis para este objeto'; +$lang['binary_value'] = 'Valor binário'; +$lang['add_new_binary_attr'] = 'Adicionar Novo Atributo Binário'; +$lang['add_new_binary_attr_tooltip'] = 'Adiciona um novo atributo/valor binário de um arquivo para este objeto'; +$lang['alias_for'] = 'Nota: \'%s\' é um nome amigável para \'%s\''; +$lang['download_value'] = 'fazer download'; +$lang['delete_attribute'] = 'apagar atributo'; +$lang['true'] = 'verdadeiro'; +$lang['false'] = 'falso'; +$lang['none_remove_value'] = 'nenhum, remover o valor'; +$lang['really_delete_attribute'] = 'Deseja realmente apagar atributo'; + +// Schema browser +$lang['the_following_objectclasses'] = 'As seguintes classes de objetos são suportadas por este servidor LDAP.'; +$lang['the_following_attributes'] = 'Os seguintes tipos de atributos são suportados por este servidor LDAP.'; +$lang['the_following_matching'] = 'As seguintes regras de consistência/b> são suportadas por este servidor LDAP.'; +$lang['the_following_syntaxes'] = 'As seguintes regras de sintaxe são suportadas por este servidor LDAP.'; +$lang['jump_to_objectclass'] = 'Ir para uma classe de objetos'; +$lang['jump_to_attr'] = 'Ir para um atributo'; +$lang['schema_for_server'] = 'Esquemas do servidor'; +$lang['required_attrs'] = 'Atributos Necessários'; +$lang['optional_attrs'] = 'Atributos Opcionais'; +$lang['OID'] = 'OID'; +$lang['desc'] = 'Descrição'; +$lang['name'] = 'Nome'; +$lang['is_obsolete'] = 'Essa classe de objetos é obsoleta'; +$lang['inherits'] = 'Herda de'; +$lang['jump_to_this_oclass'] = 'Ir para a definição desta classe de objetos'; +$lang['matching_rule_oid'] = 'OID da Regra de Consistência'; +$lang['syntax_oid'] = 'OID da Regra de Sintaxe'; +$lang['not_applicable'] = 'não aplicável'; +$lang['not_specified'] = 'não especificado'; + +// Deleting entries +$lang['entry_deleted_successfully'] = 'Objeto \'%s\' apagado com sucesso.'; +$lang['you_must_specify_a_dn'] = 'Você precisa especificar o DN'; +$lang['could_not_delete_entry'] = 'Impossível apagar o objeto: %s'; + +// Adding objectClass form +$lang['new_required_attrs'] = 'Novo(s) Atributo(s) Necessário(s)'; +$lang['requires_to_add'] = 'Essa ação requer que você adicione'; +$lang['new_attributes'] = 'novo(s) atributos(s)'; +$lang['new_required_attrs_instructions'] = 'Instruções: Para poder acrescentar esta Classe de Objetos a este objeto, você precisa especificar'; +$lang['that_this_oclass_requires'] = 'que esta Classe de Objetos necessita. Você pode fazê-lo no formulário abaixo:'; +$lang['add_oclass_and_attrs'] = 'Acrescentar Classe de Objetos e Atributos'; + +// General +$lang['chooser_link_tooltip'] = 'Clique aqui para abrir uma janela e selecionar o valor do atributo (DN) graficamente'; +$lang['no_updates_in_read_only_mode'] = 'Você não pode realizar alterações enquanto o servidor estiver em modo somente-leitura'; +$lang['bad_server_id'] = 'ID do servidor inválido'; +$lang['not_enough_login_info'] = 'Informação insuficiente para efetuar conexão ao servidor. Por favor verifique a sua configuração.'; +$lang['could_not_connect'] = 'Impossível conectar ao servidor LDAP.'; +$lang['could_not_perform_ldap_mod_add'] = 'Impossível realizar operação ldap_mod_add.'; +$lang['bad_server_id_underline'] = 'ID do servidor inválido: '; +$lang['success'] = ' Sucesso'; +$lang['server_colon_pare'] = 'Servidor: '; +$lang['look_in'] = 'Procurando em: '; +$lang['missing_server_id_in_query_string'] = 'Nenhum ID de servidor especificado na busca!'; +$lang['missing_dn_in_query_string'] = 'Nenhum DN especificado na busca!'; +$lang['back_up_p'] = 'Backup...'; +$lang['no_entries'] = 'nenhum objeto'; +$lang['not_logged_in'] = 'Não conectado'; +$lang['could_not_det_base_dn'] = 'Impossível determinar a base DN'; + +// Add value form +$lang['add_new'] = 'Adicionar novo valor'; +$lang['value_to'] = 'para'; +$lang['distinguished_name'] = 'Nome Distinto'; +$lang['current_list_of'] = 'Lista atual de'; +$lang['values_for_attribute'] = 'valor(es) para o atributo'; +$lang['inappropriate_matching_note'] = 'Nota: Você vai receber um erro de "inappropriate matching" se você não
' . + 'configurar uma regra de IGUALDADE no seu servidor LDAP para este atributo.'; +$lang['enter_value_to_add'] = 'Entre com o valor que você gostaria de adicionar:'; +$lang['new_required_attrs_note'] = 'Nota: talvez seja solicitado que você entre com os atributos necessários para esta classe de objetos'; +$lang['syntax'] = 'Sintaxe'; + +//copy.php +$lang['copy_server_read_only'] = 'Você não pode realizar alterações enquanto o servidor estiver em modo somente-leitura'; +$lang['copy_dest_dn_blank'] = 'Você não especificou o DN de destino.'; +$lang['copy_dest_already_exists'] = 'O objeto de destino (%s) já existe.'; +$lang['copy_dest_container_does_not_exist'] = 'O container de destino (%s) não existe.'; +$lang['copy_source_dest_dn_same'] = 'O DN de origem e o DN de destino são iguais.'; +$lang['copy_copying'] = 'Copiando '; +$lang['copy_recursive_copy_progress'] = 'Progresso da cópia recursiva'; +$lang['copy_building_snapshot'] = 'Construindo a imagem da árvore a ser copiada...'; +$lang['copy_successful_like_to'] = 'Cópia bem-sucedida! Você gostaria de '; +$lang['copy_view_new_entry'] = 'visualizar o novo objeto'; +$lang['copy_failed'] = 'Falha ao copiar o DN: '; + +//edit.php +$lang['missing_template_file'] = 'Alerta, o arquivo-modelo não encontrado: '; +$lang['using_default'] = 'Usando padrão.'; + +//copy_form.php +$lang['copyf_title_copy'] = 'Copiar '; +$lang['copyf_to_new_object'] = 'para um novo objeto'; +$lang['copyf_dest_dn'] = 'DN de Destino'; +$lang['copyf_dest_dn_tooltip'] = 'O DN completo do novo objeto que será criado a partir da cópia da origem'; +$lang['copyf_dest_server'] = 'Servidor de Destino'; +$lang['copyf_note'] = 'Dica: Copiar objetos entre servidores diferentes só funcionará se não houverem violações de esquema.'; +$lang['copyf_recursive_copy'] = 'Copiar recursivamente todos os objetos-filhos deste objeto também'; + +//create.php +$lang['create_required_attribute'] = 'Você especificou um valor em branco para %s, que é um atributo necessário.'; +$lang['create_redirecting'] = 'Redirecionando'; +$lang['create_here'] = 'aqui'; +$lang['create_could_not_add'] = 'Impossível adicionar o objeto ao servidor LDAP.'; + +//create_form.php +$lang['createf_create_object'] = 'Criar um Objeto'; +$lang['createf_choose_temp'] = 'Escolha um modelo'; +$lang['createf_select_temp'] = 'Escolha o modelo correspondente ao objeto que deseja criar'; +$lang['createf_proceed'] = 'Prosseguir'; + +//creation_template.php +$lang['ctemplate_on_server'] = 'No servidor'; +$lang['ctemplate_no_template'] = 'Nenhum Modelo foi especificado.'; +$lang['ctemplate_config_handler'] = 'Seu arquivo de configuração determina que o modelo'; +$lang['ctemplate_handler_does_not_exist'] = "é válido. Porém este modelo não existe no diretório 'templates/creation'."; + +// search.php +$lang['you_have_not_logged_into_server'] = 'Você ainda não se conectou ao servidor LDAP selecionado, portanto você não pode efetuar buscas nele.'; +$lang['click_to_go_to_login_form'] = 'Clique aqui para conectar-se ao servidor'; +$lang['unrecognized_criteria_option'] = 'Critério de busca desconhecido: '; +$lang['if_you_want_to_add_criteria'] = 'Se você quer adicionar o seu próprio critério de busca à lista, certifique-se de que você editou \'search.php\' para contemplar o novo critério. Saindo.'; +$lang['entries_found'] = 'Objetos encontrados: '; +$lang['filter_performed'] = 'Filtro utilizado: '; +$lang['search_duration'] = 'A busca foi realizada pelo phpLDAPadmin em'; +$lang['seconds'] = 'segundos'; + +// search_form_advanced.php +$lang['scope_in_which_to_search'] = 'A abrangência de onde é feita a busca pelos objetos'; +$lang['scope_sub'] = 'Sub (toda a sub-arvore)'; +$lang['scope_one'] = 'One (um nivel abaixo do base DN)'; +$lang['scope_base'] = 'Base (apenas no base DN)'; +$lang['standard_ldap_search_filter'] = 'Filtro de busca LDAP padrão. Exemplo: (&(sn=Smith)(givenname=David))'; +$lang['search_filter'] = 'Filtro de Busca'; +$lang['list_of_attrs_to_display_in_results'] = 'A lista de atributos que devem ser mostrados no resultado (separados por vírgula)'; +$lang['show_attributes'] = 'Exibir Atributos'; + +// search_form_simple.php +$lang['search_for_entries_whose'] = 'Procurar por objetos cujo:'; +$lang['equals'] = 'e igual a'; +$lang['starts with'] = 'comeca com'; +$lang['contains'] = 'contem'; +$lang['ends with'] = 'termina com'; +$lang['sounds like'] = 'e semelhante a'; + +// server_info.php +$lang['could_not_fetch_server_info'] = 'Incapaz de obter informações LDAP à partir do servidor'; +$lang['server_info_for'] = 'Informações do servidor: '; +$lang['server_reports_following'] = 'O servidor forneceu as seguintes informações sobre si mesmo'; +$lang['nothing_to_report'] = 'O servidor não tem nenhuma informação sobre si mesmo para fornecer.'; + +//update.php +$lang['update_array_malformed'] = 'update_array est&aaculte; mal-formado. Isto pode ser um problema/defeito do phpLDAPadmin. Por favor comunique isto.'; +$lang['could_not_perform_ldap_modify'] = 'Impossível realizar operação ldap_modify.'; + +// update_confirm.php +$lang['do_you_want_to_make_these_changes'] = 'Você confirma estas alterações?'; +$lang['attribute'] = 'Atributo'; +$lang['old_value'] = 'Valor Antigo'; +$lang['new_value'] = 'Valor Novo'; +$lang['attr_deleted'] = '[atributo apagado]'; +$lang['commit'] = 'Confirma'; +$lang['cancel'] = 'Cancela'; +$lang['you_made_no_changes'] = 'Você não fez nenhuma alteração.'; +$lang['go_back'] = 'Voltar'; + +// welcome.php +$lang['welcome_note'] = 'Use o menu a esquerda para navegar'; +$lang['credits'] = 'Créditos'; +$lang['changelog'] = 'Últimas Atualizações'; +$lang['documentation'] = 'Documentação'; + +// view_jpeg_photo.php +$lang['unsafe_file_name'] = 'Nome de arquivo inseguro: '; +$lang['no_such_file'] = 'Nome de arquivo não encontrado: '; + +//function.php +$lang['auto_update_not_setup'] = 'Você ativou o recurso auto_uid_numbers para %s na sua configuração, + mas você não definiu auto_uid_number_mechanism. Por favor, corrija este problema.'; +$lang['uidpool_not_set'] = 'Você especificou o recurso auto_uid_number_mechanism como uidpool + na sua configuração para o servidor %s, mas você não definiu + audo_uid_number_uid_pool_dn. Por favor, corrija este problema.'; +$lang['uidpool_not_exist'] = 'Aparentemente, o objeto uidPool que você especificou (%s) + não existe.'; +$lang['specified_uidpool'] = 'Você especificou o recurso auto_uid_number_mechanism como search na sua + configuração para o servidor %s, mas você não definiu + auto_uid_number_search_base. Por favor, corrija este problema.'; +$lang['auto_uid_invalid_value'] = 'Você especificou um valor inválido para o recurso auto_uid_number_mechanism (%s) + na sua configuração. Apenas uidpool e search são válidos. + Por favor, corrija este problema.'; +$lang['error_auth_type_config'] = 'Erro: Seu arquivo de configuração possui um erro. Os únicos valores permitidos para + auth_type na seção $servers são \'config\' e \'form\'. Você usou \'%s\', + o que não é permitido. '; +$lang['php_install_not_supports_tls'] = 'Sua instalação do PHP não suporta TLS'; +$lang['could_not_start_tls'] = 'Impossível inicializar TLS.
Por favor, verifique a configuração do seu servidor LDAP.'; +$lang['auth_type_not_valid'] = 'Seu arquivo de configuração possui um erro. O valor %s para auth_type não é permitido.'; +$lang['ldap_said'] = 'O servidor LDAP respondeu: %s

'; +$lang['ferror_error'] = 'Erro'; +$lang['fbrowse'] = 'Procurar'; +$lang['delete_photo'] = 'Apagar Imagem'; +$lang['install_not_support_blowfish'] = 'Sua instalação do PHP não suporta encriptação blowfish.'; +$lang['install_no_mash'] = 'Sua instalação do PHP não possui a função mhash(). Impossível realizar encriptações SHA.'; +$lang['jpeg_contains_errors'] = 'jpegPhoto possui erros
'; +$lang['ferror_number'] = 'Número do erro: %s (%s)

'; +$lang['ferror_discription'] = 'Descrição: %s

'; +$lang['ferror_number_short'] = 'Número do erro: %s

'; +$lang['ferror_discription_short'] = 'Descrição: (nenhuma descrição disponível)
'; +$lang['ferror_submit_bug'] = 'Isto é um problema/defeito do phpLDAPadmin? Se sim, por favor comunique isto.'; +$lang['ferror_unrecognized_num'] = 'Número do erro desconhecido: '; +$lang['ferror_nonfatil_bug'] = '
+
+ Você encontrou um erro não-fatal do phpLDAPadmin!
Erro:%s (%s)
Arquivo:%s Linha %s, Requisitante %s
Versões:PLA: %s, PHP: %s, SAPI: %s +
Servidor Web:%s
+ Por favor, comunique este problema clicando aqui.

'; + +$lang['ferror_congrats_found_bug'] = 'Parabéns! Você encontrou um problema/defeito no phpLDAPadmin.

+ + + + + + + + + + +
Erro:%s
Nível:%s
Arquivo:%s
Linha:%s
Requisitante:%s
Versão do PLA:%s
Versão do PHP:%s
PHP SAPI:%s
Servidor Web:%s
+
+ Por favor comunique esse problema/defeito clicando abaixo!'; + +//ldif_import_form +$lang['import_ldif_file_title'] = 'Importar Arquivo LDIF'; +$lang['select_ldif_file'] = 'Selecione um arquivo LDIF:'; +$lang['select_ldif_file_proceed'] = 'Prosseguir >>'; + +//ldif_import +$lang['add_action'] = 'Adicionando...'; +$lang['delete_action'] = 'Apagando...'; +$lang['rename_action'] = 'Renomeando...'; +$lang['modify_action'] = 'Modificando...'; + +$lang['failed'] = 'falhou'; +$lang['ldif_parse_error'] = 'Erro Analisando Arquivo LDIF'; +$lang['ldif_could_not_add_object'] = 'Impossível adicionar objeto:'; +$lang['ldif_could_not_rename_object'] = 'Impossível renomear objeto:'; +$lang['ldif_could_not_delete_object'] = 'Impossível apagar objeto:'; +$lang['ldif_could_not_modify_object'] = 'Impossível modificar objeto:'; +$lang['ldif_line_number'] = 'Número da Linha:'; +$lang['ldif_line'] = 'Linha:'; +?> diff --git a/lang/recoded/auto.php b/lang/recoded/auto.php index 8acdb9d..1bb9cb2 100644 --- a/lang/recoded/auto.php +++ b/lang/recoded/auto.php @@ -1,25 +1,34 @@ "ct" // catalan is this right? shouldn't it be ca? - ," ct-"=>"ct" // +$langSupport=array(" ca "=>"ca" // catalan + ," ca-"=>"ca" // ," de "=>"de" // german ," de-"=>"de" // for de-at, de-ch... ," German "=>"de" // the browser Moz (1.5)submit German instead of de ," en "=>"en" // englisch ," en-"=>"en" // for en-us,en-gb,en-ca,.. + ," es "=>"es" // spainish + ," es-"=>"es" // es-cr, es-co,.... ," fr "=>"fr" // french ," fr-"=>"fr" // fr-lu,fr-ca,... ," it "=>"it" // italien ," it-"=>"it" // for it-ch (italien swiss).. ," nl "=>"nl" // dutch - ," nl-"=>"nl" // for ne-be, only one? + ," nl-"=>"nl" // for ne-be, only one? + ," pl "=>"pl" // polish + ," pl-"=>"pl" // maybe exist + ," pt "=>"pt-br" // brazilian portuguese + ," pt-br"=>"pt-br" // brazilian portuguese ," ru "=>"ru" // russian ," ru-"=>"ru" // ru- exits? + ," sv "=>"sv" //swedish + ," sv-"=>"sv" // swedisch to );// all supported languages in this array // test @@ -37,4 +46,6 @@ foreach ($langSupport as $key=>$value) { } //echo "used:$useLang\n"; include realpath ("$useLang".".php");// this should include from recode/ position +$language=$useLang; +//echo "language:".$langugage; ?> diff --git a/lang/recoded/ca.php b/lang/recoded/ca.php index 881faa7..0eb41a5 100644 --- a/lang/recoded/ca.php +++ b/lang/recoded/ca.php @@ -1,7 +1,9 @@ * Uwe Ebel * Modifikationen von Dieter Kluenter + * + * + * $Header: /cvsroot/phpldapadmin/phpldapadmin/lang/recoded/de.php,v 1.19 2004/04/26 19:49:36 i18phpldapadmin Exp $ + * + * Verwendete CVS-Version von en.php 1.65 */ // 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['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['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'; +//$lang['starts_with'] = 'beginnt mit';//'starts with'; +$lang['contains'] = 'enthält';//'contains'; +//$lang['ends_with'] = 'endet mit';//'ends with'; +//$lang['sounds_like'] = 'ähnlich wie';//'sounds like'; +$lang['predefined_search_str'] = 'oder ein von dieser Liste auswählen';//'or select a predefined search'; +$lang['predefined_searches'] = 'Vordefinierte Suche';//'Predefined Searches'; +$lang['no_predefined_queries'] = 'Keine Abfragen sind in der config.php definiert';// 'No queries have been defined in config.php.'; + // 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['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['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['create'] = 'Erstellen';//'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['new'] = 'Neu';//'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['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['read_only_tooltip'] = 'Diese Attribut wurde vom phpLDAPadmin-Adminstrator als nur lesend markiert.';//This attribute has been flagged as read only by the phpLDAPadmin administrator'; $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...'; +$lang['login'] = '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['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['export'] = 'Exportieren';//'Export to LDIF'; +$lang['export_tooltip'] = 'Speichere einen Abzug diese Objektes';//'Save an LDIF dump of this object'; +$lang['export_subtree_tooltip'] = 'Speicher eine Abzug ab diesem Objekt und alle seine Untereinträge';//'Save an LDIF dump of this object and all of its children'; +$lang['export_subtree'] = 'Export Unterbaum nach LDIF';//'Export subtree to LDIF'; +//$lang['export_mac'] = 'Zeilenende für Macintosh';//'Macintosh style line ends'; +//$lang['export_win'] = 'Zeilenende für Windows';//'Windows style line ends'; +//$lang['export_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['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['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['view_one_child'] = 'Zeige einen Untereintrag';//'View 1 child'; +$lang['view_children'] = 'Zeige %s Untereinträge';//'View %s children'; +$lang['add_new_attribute'] = 'Neues Attribut hinzufügen';//'Add New Attribute'; +// DELETED $lang['add_new_attribute_tooltip'] = 'Füge ein neues Attribut/Wert zu diesem Eintrag hinzu';// 'Add a new attribute/value to this entry'; +$lang['add_new_objectclass'] = 'Neue ObjectClass hinzufügen';//'Add new ObjectClass'; +//$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['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['no_internal_attributes'] = 'Keine internen Attribute.';//'No internal attributes'; +$lang['no_attributes'] = 'Dieser Eintrag hat keine Attribute.';//'This entry has no attributes'; +$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['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['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['no_new_binary_attrs_available'] = 'Keine weiteren Binären Attribute verfügbar für diesen Eintrag.';//'no new binary 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'; +// DELETE $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['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'; +$lang['really_delete_attribute'] = 'Lösche das Attribut wirklich';//'Really delete attribute'; +$lang['add_new_value'] = 'Neuen Wert hinzufügen';//'Add New Value'; // 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['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['schema_retrieve_error_1']='Der Server unterstützt nicht vollständig das LDAP-Protokoll.';//'The server does not fully support the LDAP protocol.'; +$lang['schema_retrieve_error_2']='Die verwendete PHP-Version setzte keine korrekte LDAP-Abfrage ab.';//'Your version of PHP does not correctly perform the query.'; +$lang['schema_retrieve_error_3']='Oder phpLDAPadmin konnte nicht das Schema für den Server abfragen.';//'Or lastly, phpLDAPadmin doesn\'t know how to fetch the schema for your 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['jump_to_matching_rule'] = 'Gehe zur Treffer Regel'; +$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['optional_binary_attrs'] = 'Optinales Binärattribut';//'Optional Binary Attributes'; $lang['OID'] = 'OID';//'OID'; +$lang['aliases']='Pseudonym(e)';//'Aliases'; $lang['desc'] = 'Beschreibung';//'Description'; +$lang['no_description']='Keine Beschreibung';//'no description'; $lang['name'] = 'Name';//'Name'; +$lang['equality']='Gleichheit'; $lang['is_obsolete'] = 'Diese objectClass ist veraltet';//'This objectClass is obsolete'; $lang['inherits'] = 'Abgeleitet von';//'Inherits'; +$lang['inherited_from']='abgeleteitet von';//inherited from'; +$lang['parent_to'] = 'Knoten von';//'Parent to'; $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_applicable'] = 'nicht anwendbar';//'not applicable'; $lang['not_specified'] = 'nicht spezifiziert';//not specified'; +$lang['character']='Zeichen';//'character'; +$lang['characters']='Zeichen';//'characters'; +$lang['used_by_objectclasses']='Verwendet von den Objektklassen';//'Used by objectClasses'; +$lang['used_by_attributes']='Verwendet in den Attributen';//'Used by Attributes'; +$lang['oid']='OID'; +$lang['obsolete']='Veraltet';//'Obsolete'; +$lang['ordering']='Ordnung';//'Ordering'; +$lang['substring_rule']='Teilstring Regel';//'Substring Rule'; +$lang['single_valued']='Einzelner Wert';//'Single Valued'; +$lang['collective']='Sammlung';//'Collective'; +$lang['user_modification']='Benutzer Änderung';//'User Modification'; +$lang['usage']='Verwendung';//'Usage'; +$lang['maximum_length']='Maximale Grösse';//'Maximum Length'; +$lang['attributes']='Attribut Typen';//'Attributes Types'; +$lang['syntaxes']='Syntaxe';//'Syntaxes'; +$lang['objectclasses']='Objekt Klassen';//'objectClasses'; +$lang['matchingrules']='Treffer Regeln';//'Matching Rules'; +$lang['could_not_retrieve_schema_from']='Das Schema konnte nicht abgefragt werden. Betrifft die Einstellung des Servers:';//'Could not retrieve schema from'; +$lang['type']='Typ';// 'Type'; // Deleting entries -$lang['entry_deleted_successfully'] = 'Der Eintrag \'%s\' wurde erfolgreich gelöscht.';//'Entry \'%s\' deleted successfully.'; +$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'; +$lang['could_not_delete_entry'] = 'Konnte den Eintrag nicht löschen: %s';//'Could not delete the entry: %s'; +$lang['no_such_entry'] = 'Keinen solchen Eintrag: %s';//'No such entry: %s'; +$lang['delete_dn'] = 'Löschen von %s';//'Delete %s'; +//$lang['permanently_delete_children'] = 'Ebenso dauerhaftes Löschen aller Untereinträge?';//'Permanently delete all children also?'; +$lang['entry_is_root_sub_tree'] = 'Dies ist ein Root-Eintrag und beinhaltet einen Unterbaum mit %s Einträgen.';//'This entry is the root of a sub-tree containing %s entries.'; +$lang['view_entries'] = 'Zeige Einträge';//'view entries'; +$lang['confirm_recursive_delete'] = 'phpLDAPadmin kann diesen Eintrag und die %s Untereinträge rekursiv löschen. Unten ist eine Liste der Einträge angegeben die von diesem Löschen betroffen wären. Sollen alle Einträge gelöscht werden?';//'phpLDAPadmin can recursively delete this entry and all %s of its children. See below for a list of all the entries that this action will delete. Do you want to do this?'; +$lang['confirm_recursive_delete_note'] = 'Hinweis: Dies ist sehr gefährlich und erfolgt auf eines Risiko. Die Ausführung kann nicht rückgängig gemacht werden. Dies betrifft ebenso Aliase, Referenzen und andere Dinge die zu Problemen führen können.';//'Note: this is potentially very dangerous and you do this at your own risk. This operation cannot be undone. Take into consideration aliases, referrals, and other things that may cause problems.'; +$lang['delete_all_x_objects'] = 'Löschen aller "%s" Objekte';//'Delete all %s objects'; +$lang['recursive_delete_progress'] = 'Rekursives Löschen in Arbeit';//'Recursive delete progress'; +$lang['entry_and_sub_tree_deleted_successfully'] = 'Erfolgreiches Löschen des Eintrages "%s" und dessen Unterbaums.';// 'Entry %s and sub-tree deleted successfully.'; +$lang['failed_to_delete_entry'] = 'Fehler beim Löschen des Eintrages %s.';//'Failed to delete entry %s'; + +// Deleting attributes +$lang['attr_is_read_only'] = 'Das Attribut "%s" ist in der phpLDAPadmin Konfiguration als nur lesend deklariert.';//'The attribute "%s" is flagged as read-only in the phpLDAPadmin configuration.'; +$lang['no_attr_specified'] = 'Kein Attributname angegeben.';//'No attribute name specified.'; +$lang['no_dn_specified'] = 'Kein DN angegeben.';//'No DN specified'; + +// Adding attributes +$lang['left_attr_blank'] = 'Der Wert des Attributes wurde leergelassen. Bitte zurück gehen und erneut versuchen.';//'You left the attribute value blank. Please go back and try again.'; +$lang['failed_to_add_attr'] = 'Fehler beim Hinzufügen des Attributes';//'Failed to add the attribute.'; +$lang['file_empty'] = 'Die ausgewählte Datei ist entweder nicht vorhanden oder leer. Bitte zurückgehen und nochmals versuchen.';//'The file you chose is either empty or does not exist. Please go back and try again.'; +$lang['invalid_file'] = 'Sicherheitsfehler: Die hochgeladene Datei kann bösartig sein.';//'Security error: The file being uploaded may be malicious.'; +$lang['warning_file_uploads_disabled'] = 'Die PHP-Konfiguration (php.ini) gestattet es nicht Dateien hochzuladen. Bitte die php.ini hierzu überprüfen.';//'Your PHP configuration has disabled file uploads. Please check php.ini before proceeding.'; +$lang['uploaded_file_too_big'] = 'Die hochgeladene Datei ist größer als die maximal erlaubte Datei aus der "php.ini". Bitte in der php.ini den Eintrag "upload_max_size" überprüfen.';//'The file you uploaded is too large. Please check php.ini, upload_max_size setting'; +$lang['uploaded_file_partial'] = 'Die auswählte Datei wurde nur unvollständig hochgeladen.';//'The file you selected was only partially uploaded, likley due to a network error.'; +$lang['max_file_size'] = 'Maximal Dateigröße ist: %s';//'Maximum file size: %s'; + +// Updating values +$lang['modification_successful'] = 'Änderung war erfolgreich!';//'Modification successful!'; +$lang['change_password_new_login'] = 'Da das Passwort geändert wurde müssen Sie sich erneut einloggen.'; //'Since you changed your password, you must now login again with your new password.'; // 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_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'; +$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['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['could_not_connect_to_host_on_port'] = 'Konnte keine Verbindung zum Server "%s" am Port "%s" erstellen.';//'Could not connect to "%s" on port "%s"'; +$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['back_up_p'] = 'Eine Ebene höher...';//"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'; +$lang['reasons_for_error']='Dies kann mehrere Gründe haben. Die häufigsten sind:';//'This could happen for several reasons, the most probable of which are:'; +$lang['please_report_this_as_a_bug']='Bitte senden Sie dies als einen Fehlerbericht.';//'Please report this as a bug.'; +$lang['yes']='Ja';//'Yes' +$lang['no']='Nein';//'No' +$lang['go']='Weiter';//'go' +$lang['delete']='Löschen';//'Delete'; +$lang['back']='Zurück';//'Back'; +$lang['object']='Objekt';//'object'; +//$lang['objects']='Objekte';//'objects'; +$lang['delete_all']='Lösche alle';//'Delete all'; +$lang['url_bug_report']=''+$lang['url_bug_report'];//'https://sourceforge.net/tracker/?func=add&group_id=61828&atid=498546'; +$lang['hint'] = 'Hinweis';//'hint'; +$lang['bug'] = 'Programmfehler';//'bug'; +$lang['warning'] = 'Warnung';//'warning'; +$lang['light'] = 'light'; // the word 'light' from 'light bulb' +$lang['proceed_gt'] = 'Weiter';//'Proceed >>'; // Add value form -$lang['add_new'] = 'Neu hinzufügen';//'Add new'; +$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['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_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.'; @@ -186,6 +280,11 @@ $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.'; +$lang['template'] = 'Vorlage';//'Template'; +$lang['must_choose_template'] = 'Eine Vorlage muss ausgewählt sein';//'You must choose a template'; +$lang['invalid_template'] = 'Die Vorlage "%s" ist ungültig';// '%s is an invalid template'; +$lang['using_template'] = 'Verwende Vorlage';//'using template'; +$lang['go_to_dn'] = 'Gehe zu %s';//'Go to %s'; //copy_form.php $lang['copyf_title_copy'] = 'Kopiere';//"Copy '; @@ -195,111 +294,134 @@ $lang['copyf_dest_dn_tooltip'] = 'Der komplette DN des Eintrages der beim Kopier $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.'; +$lang['recursive_copy'] = 'Rekursives kopieren';//'Recursive copy'; +$lang['filter'] = 'Filter';//'Filter'; +$lang['filter_tooltip'] = 'Bei der Ausfürung des rekursiven Kopierens werden nur die Einträge verwendet, die mit dem Filter übereinstimmen';// 'When performing a recursive copy, only copy those entries which match this filter'; + //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.'; +$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['redirecting'] = 'Weiterleitung';//"Redirecting'; moved from create_redirection -> redirection +$lang['here'] = 'hier';//"here'; renamed vom create_here -> 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_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 >>'; +$lang['rdn_field_blank'] = 'Das RDN Feld wurde leer gelassen.';//'You left the RDN field blank.'; +$lang['container_does_not_exist'] = 'Der angegenben Eintrag (%s) ist nicht vorhanden. Bitte erneut versuchen.';// 'The container you specified (%s) does not exist. Please try again.'; +$lang['no_objectclasses_selected'] = 'Es wurde kein ObjectClasses für diesen Eintrag ausgewählt. Bitte zurückgehen und korrigieren';//'You did not select any ObjectClasses for this object. Please go back and do so.'; +$lang['hint_structural_oclass'] = 'Hinweis: Es muss mindestens ein Strukturelle ObjectClass ausgewählt sein.';//'Hint: You must choose at least one structural objectClass'; //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_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.'; +$lang['create_step1'] = 'Schritt 1 von 2: Name und Objektklasse(n)';//'Step 1 of 2: Name and ObjectClass(es)'; +$lang['create_step2'] = 'Schritt 2 von 2: Bestimmen der Attribute und Werte';//'Step 2 of 2: Specify attributes and values'; +$lang['relative_distinguished_name'] = 'Relativer Distingushed Name';//'Relative Distinguished Name'; +$lang['rdn'] = 'RDN';//'RDN'; +$lang['rdn_example'] = '(Beispiel: cn=MeineNeuePerson)';//'(example: cn=MyNewPerson)'; +$lang['container'] = 'Behälter';//'Container'; + // 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['you_have_not_logged_into_server'] = 'Sie haben sich am ausgewählten Server nicht angemeldet. Sie kö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['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['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_sub'] = 'Sub (Suchbasis 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['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.'; +$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['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['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'; +$lang['cancel'] = 'Abbruch';//'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'; +$lang['welcome_note'] = 'Benutzen sie das Menu auf der linken Seite zur Navigation.';//'Use the menu to the left to navigate'; $lang['credits'] = 'Vorspann';//'Credits'; -$lang['changelog'] = 'Änderungsdatei';//'ChangeLog'; -$lang['documentation'] = 'Dokumentation';// 'Documentation'; +$lang['changelog'] = 'Änderungsdatei';//'ChangeLog'; +//$lang['documentation'] = 'Dokumentation';// 'Documentation'; +$lang['donate'] = 'Spende';//'Donate'; // 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['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['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['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['bad_auto_uid_search_base'] = 'Die phpLDAPadmin Konfiguration für den Server "%s" gibt eine ungültige Suchbasis für "auto_uid_search_base" an.';//'Your phpLDAPadmin configuration specifies an invalid auto_uid_search_base for server %s'; +$lang['auto_uid_invalid_credential'] = 'Konnte nicht mit "%s" verbinden';// 'Unable to bind to %s with your with auto_uid credentials. Please check your configuration file.'; +$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['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['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['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['could_not_bind_anon'] = 'Konnte keine Anonymous Anmeldung zum Server herstellen.';//'Could not bind anonymously to server.'; +$lang['could_not_bind'] = 'Konnte keine Verbindung zum LDAP-Server herstellen';//'Could not bind to the LDAP server.'; +//$lang['anon_required_for_login_attr'] = 'Bei der Verwendung des Anmeldeprozedur "login_attr" muss der Server Anonymous Anmelden zulassen.';//'When using the login_attr feature, the LDAP server must support anonymous binds.'; +$lang['anonymous_bind'] = 'Anonymous anmelden';//'Anonymous Bind'; +//$lang['auth_type_not_valid'] = 'Die Konfigurationsdatei enthält einen Fehler. Der Eintrag für \'auth_type\' mit \'%s\' ist nicht gültig';// 'You have an error in your config file. auth_type of %s is not valid.'; +$lang['bad_user_name_or_password'] = 'Falscher Benutzername oder Passwort. Bitte erneut versuchen.';//'Bad username or password. Please try again.'; +$lang['redirecting_click_if_nothing_happens'] = 'Automatische Umleitung. Falls dies nicht automatisch erfolgt dann hier klicken.';//'Redirecting... Click here if nothing happens.'; +$lang['successfully_logged_in_to_server'] = 'Erfolgreich am Server %s angemeldet';//'Successfully logged into server %s'; +$lang['could_not_set_cookie'] = 'Konnte kein \'Cookie\' setzten.';//'Could not set cookie.'; +$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['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_not_support_md5crypt'] = 'Die eingesetzte PHP-Version unterstützt keine MD5-Verschlüsselung.';//'Your PHP install does not support md5crypt 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.

'; @@ -308,22 +430,106 @@ $lang['ferror_congrats_found_bug'] = '
- + - - + + - + - +
%s'; +$lang['authenticate_to_server'] = 'Authentifizierung mit Server %s';//'Authenticate to server %s'; +$lang['warning_this_web_connection_is_unencrypted'] = 'Achtung: Diese Webverbindung ist unverschlüsselt.';//'Warning: This web connection is unencrypted.'; +$lang['not_using_https'] = 'Es wird keine verschlüsselte Verbindung (\'https\') verwendet. Der Webbrowser übermittelt die Anmeldeinformationen im Klartext.';// 'You are not use \'https\'. Web browser will transmit login information in clear text.'; +$lang['login_dn'] = 'Anmelde DN';//'Login DN'; +$lang['user_name'] = 'Benutzername';//'User name'; +$lang['password'] = 'Passwort';//'Password'; +$lang['authenticate'] = 'Authentifizierung';//'Authenticate'; + +// Entry browser +$lang['entry_chooser_title'] = 'Einträge auswählen';//'Entry Chooser'; + +// Index page +$lang['need_to_configure'] = 'phpLDAPadmin muss konfiguriert werden. Bitte die Datei "config.php" erstellen. Ein Beispiel einer "config.php" liegt als Datei "config.php.example" bei.';// ';//'You need to configure phpLDAPadmin. Edit the file \'config.php\' to do so. An example config file is provided in \'config.php.example\''; + +// Mass deletes +$lang['no_deletes_in_read_only'] = 'Löschen ist im Nur-Lese-Modus nicht erlaubt.';//'Deletes not allowed in read only mode.'; +$lang['error_calling_mass_delete'] = 'Fehler im Aufruf von "mass_delete.php". "mass_delete" ist in den POST-Variablen nicht vorhanden.';//'Error calling mass_delete.php. Missing mass_delete in POST vars.'; +$lang['mass_delete_not_array'] = 'Die POST-Variable "mass_delete" ist kein Array.';//'mass_delete POST var is not an array.'; +$lang['mass_delete_not_enabled'] = '"Viel-Löschen" ist nicht aktiviert. Bitte in der der "config.php" aktivieren vor dem Weitermachen.';//'Mass deletion is not enabled. Please enable it in config.php before proceeding.'; +$lang['mass_deleting'] = 'Viel-Löschen';//'Mass Deleting'; +$lang['mass_delete_progress'] = 'Löschprozess auf Server "%s"';//'Deletion progress on server "%s"'; +$lang['malformed_mass_delete_array'] = 'Das Array "mass_delete" ist falsch dargestellt.';//'Malformed mass_delete array.'; +$lang['no_entries_to_delete'] = 'Es wurde kein zu löschender Eintrag ausgewählt.';//'You did not select any entries to delete.'; +$lang['deleting_dn'] = 'Lösche "%s"';//'Deleting %s'; +$lang['total_entries_failed'] = '%s von %s Einträgen konnten nicht gelöscht werden.';//'%s of %s entries failed to be deleted.'; +$lang['all_entries_successful'] = 'Alle Einträge wurden erfolgreich gelöscht.';//'All entries deleted successfully.'; +$lang['confirm_mass_delete'] = 'Bitte das Löschen von %s Einträgen auf dem Server %s bestätigen';//'Confirm mass delete of %s entries on server %s'; +$lang['yes_delete'] = 'Ja, Löschen!';//'Yes, delete!'; + + +// Renaming entries +$lang['non_leaf_nodes_cannot_be_renamed'] = 'Das Umbenennen von einem Eintrag mit Untereinträgen ist nicht Möglich. Es ist nur auf den Untersten Einträgen gestattet.';// 'You cannot rename an entry which has children entries (eg, the rename operation is not allowed on non-leaf entries)'; +$lang['no_rdn_change'] = 'Der RDN wurde nicht verändert';//'You did not change the RDN'; +$lang['invalid_rdn'] = 'Ungültiger RDN Wert';//'Invalid RDN value'; +$lang['could_not_rename'] = 'Der Eintrag konnte nicht umbenannt werden';//'Could not rename the entry'; + + ?> diff --git a/lang/recoded/en.php b/lang/recoded/en.php index bba4041..0c5a5d6 100644 --- a/lang/recoded/en.php +++ b/lang/recoded/en.php @@ -1,4 +1,6 @@ DN'; +$lang['base_dn'] = 'Base 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'; +$lang['predefined_search_str'] = 'Select a predefined search'; +$lang['predefined_searches'] = 'Predefined Searches'; +$lang['no_predefined_queries'] = 'No queries have been defined in config.php.'; // 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'; @@ -51,61 +48,58 @@ $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['new'] = 'new'; $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['read_only_tooltip'] = 'This attribute has been flagged as read only by the phpLDAPadmin administrator'; $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...'; +$lang['login'] = '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['export'] = 'Export'; +$lang['export_tooltip'] = 'Save a dump of this object'; +$lang['export_subtree_tooltip'] = 'Save a dump of this object and all of its children'; +$lang['export_subtree'] = 'Export subtree'; $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['view_one_child'] = 'View 1 child'; +$lang['view_children'] = 'View %s children'; +$lang['add_new_attribute'] = 'Add new attribute'; +$lang['add_new_objectclass'] = 'Add new ObjectClass'; $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['no_internal_attributes'] = 'No internal attributes'; +$lang['no_attributes'] = 'This entry has no attributes'; $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['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['no_new_binary_attrs_available'] = 'no new binary 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['add_new_binary_attr'] = 'Add new binary attribute'; $lang['alias_for'] = 'Note: \'%s\' is an alias for \'%s\''; $lang['download_value'] = 'download value'; $lang['delete_attribute'] = 'delete attribute'; @@ -113,32 +107,94 @@ $lang['true'] = 'true'; $lang['false'] = 'false'; $lang['none_remove_value'] = 'none, remove value'; $lang['really_delete_attribute'] = 'Really delete attribute'; +$lang['add_new_value'] = 'Add New Value'; // 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['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['schema_retrieve_error_1']='The server does not fully support the LDAP protocol.'; +$lang['schema_retrieve_error_2']='Your version of PHP does not correctly perform the query.'; +$lang['schema_retrieve_error_3']='Or lastly, phpLDAPadmin doesn\'t know how to fetch the schema for your server.'; $lang['jump_to_objectclass'] = 'Jump to an objectClass'; -$lang['jump_to_attr'] = 'Jump to an attribute'; +$lang['jump_to_attr'] = 'Jump to an attribute type'; +$lang['jump_to_matching_rule'] = 'Jump to a matching rule'; $lang['schema_for_server'] = 'Schema for server'; $lang['required_attrs'] = 'Required Attributes'; $lang['optional_attrs'] = 'Optional Attributes'; +$lang['optional_binary_attrs'] = 'Optional Binary Attributes'; $lang['OID'] = 'OID'; +$lang['aliases']='Aliases'; $lang['desc'] = 'Description'; +$lang['no_description']='no description'; $lang['name'] = 'Name'; -$lang['is_obsolete'] = 'This objectClass is obsolete'; -$lang['inherits'] = 'Inherits'; +$lang['equality']='Equality'; +$lang['is_obsolete'] = 'This objectClass is obsolete.'; +$lang['inherits'] = 'Inherits from'; +$lang['inherited_from'] = 'Inherited from'; +$lang['parent_to'] = 'Parent to'; $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'; +$lang['character']='character'; +$lang['characters']='characters'; +$lang['used_by_objectclasses']='Used by objectClasses'; +$lang['used_by_attributes']='Used by Attributes'; +$lang['maximum_length']='Maximum Length'; +$lang['attributes']='Attribute Types'; +$lang['syntaxes']='Syntaxes'; +$lang['matchingrules']='Matching Rules'; +$lang['oid']='OID'; +$lang['obsolete']='Obsolete'; +$lang['ordering']='Ordering'; +$lang['substring_rule']='Substring Rule'; +$lang['single_valued']='Single Valued'; +$lang['collective']='Collective'; +$lang['user_modification']='User Modification'; +$lang['usage']='Usage'; +$lang['could_not_retrieve_schema_from']='Could not retrieve schema from'; +$lang['type']='Type'; // Deleting entries -$lang['entry_deleted_successfully'] = 'Entry \'%s\' deleted successfully.'; +$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'; +$lang['no_such_entry'] = 'No such entry: %s'; +$lang['delete_dn'] = 'Delete %s'; +$lang['permanently_delete_children'] = 'Permanently delete all children also?'; +$lang['entry_is_root_sub_tree'] = 'This entry is the root of a sub-tree containing %s entries.'; +$lang['view_entries'] = 'view entries'; +$lang['confirm_recursive_delete'] = 'phpLDAPadmin can recursively delete this entry and all %s of its children. See below for a list of all the entries that this action will delete. Do you want to do this?'; +$lang['confirm_recursive_delete_note'] = 'Note: this is potentially very dangerous and you do this at your own risk. This operation cannot be undone. Take into consideration aliases, referrals, and other things that may cause problems.'; +$lang['delete_all_x_objects'] = 'Delete all %s objects'; +$lang['recursive_delete_progress'] = 'Recursive delete progress'; +$lang['entry_and_sub_tree_deleted_successfully'] = 'Entry %s and sub-tree deleted successfully.'; +$lang['failed_to_delete_entry'] = 'Failed to delete entry %s'; +$lang['list_of_entries_to_be_deleted'] = 'List of entries to be deleted:'; +$lang['sure_permanent_delete_object']='Are you sure you want to permanently delete this object?'; +$lang['dn'] = 'DN'; + +// Deleting attributes +$lang['attr_is_read_only'] = 'The attribute "%s" is flagged as read-only in the phpLDAPadmin configuration.'; +$lang['no_attr_specified'] = 'No attribute name specified.'; +$lang['no_dn_specified'] = 'No DN specified'; + +// Adding attributes +$lang['left_attr_blank'] = 'You left the attribute value blank. Please go back and try again.'; +$lang['failed_to_add_attr'] = 'Failed to add the attribute.'; +$lang['file_empty'] = 'The file you chose is either empty or does not exist. Please go back and try again.'; +$lang['invalid_file'] = 'Security error: The file being uploaded may be malicious.'; +$lang['warning_file_uploads_disabled'] = 'Your PHP configuration has disabled file uploads. Please check php.ini before proceeding.'; +$lang['uploaded_file_too_big'] = 'The file you uploaded is too large. Please check php.ini, upload_max_size setting'; +$lang['uploaded_file_partial'] = 'The file you selected was only partially uploaded, likley due to a network error.'; +$lang['max_file_size'] = 'Maximum file size: %s'; + +// Updating values +$lang['modification_successful'] = 'Modification successful!'; +$lang['change_password_new_login'] = 'Since you changed your password, you must now login again with your new password.'; // Adding objectClass form $lang['new_required_attrs'] = 'New Required Attributes'; @@ -147,6 +203,7 @@ $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'; +$lang['objectclasses'] = 'ObjectClasses'; // General $lang['chooser_link_tooltip'] = 'Click to popup a dialog to select an entry (DN) graphically'; @@ -154,6 +211,7 @@ $lang['no_updates_in_read_only_mode'] = 'You cannot perform updates while server $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_connect_to_host_on_port'] = 'Could not connect to "%s" on port "%s"'; $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'; @@ -165,6 +223,22 @@ $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'; +$lang['please_report_this_as_a_bug']='Please report this as a bug.'; +$lang['reasons_for_error']='This could happen for several reasons, the most probable of which are:'; +$lang['yes']='Yes'; +$lang['no']='No'; +$lang['go']='Go'; +$lang['delete']='Delete'; +$lang['back']='Back'; +$lang['object']='object'; +$lang['delete_all']='Delete all'; +$lang['url_bug_report']='https://sourceforge.net/tracker/?func=add&group_id=61828&atid=498546'; +$lang['hint'] = 'hint'; +$lang['bug'] = 'bug'; +$lang['warning'] = 'warning'; +$lang['light'] = 'light'; // the word 'light' from 'light bulb' +$lang['proceed_gt'] = 'Proceed >>'; + // Add value form $lang['add_new'] = 'Add new'; @@ -172,8 +246,7 @@ $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['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'; @@ -194,6 +267,11 @@ $lang['copy_failed'] = 'Failed to copy DN: '; //edit.php $lang['missing_template_file'] = 'Warning: missing template file, '; $lang['using_default'] = 'Using default.'; +$lang['template'] = 'Template'; +$lang['must_choose_template'] = 'You must choose a template'; +$lang['invalid_template'] = '%s is an invalid template'; +$lang['using_template'] = 'using template'; +$lang['go_to_dn'] = 'Go to %s'; //copy_form.php $lang['copyf_title_copy'] = 'Copy '; @@ -203,11 +281,14 @@ $lang['copyf_dest_dn_tooltip'] = 'The full DN of the new entry to be created whe $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.'; +$lang['recursive_copy'] = 'Recursive copy'; +$lang['filter'] = 'Filter'; +$lang['filter_tooltip'] = 'When performing a recursive copy, only copy those entries which match this filter'; //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_required_attribute'] = 'You left the value blank for required attribute (%s).'; +$lang['redirecting'] = 'Redirecting...'; +$lang['here'] = 'here'; $lang['create_could_not_add'] = 'Could not add the object to the LDAP server.'; //create_form.php @@ -215,12 +296,23 @@ $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'; +$lang['rdn_field_blank'] = 'You left the RDN field blank.'; +$lang['container_does_not_exist'] = 'The container you specified (%s) does not exist. Please try again.'; +$lang['no_objectclasses_selected'] = 'You did not select any ObjectClasses for this object. Please go back and do so.'; +$lang['hint_structural_oclass'] = 'Hint: You must choose at least one structural objectClass'; //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.'; +$lang['create_step1'] = 'Step 1 of 2: Name and ObjectClass(es)'; +$lang['create_step2'] = 'Step 2 of 2: Specify attributes and values'; +$lang['relative_distinguished_name'] = 'Relative Distinguished Name'; +$lang['rdn'] = 'RDN'; +$lang['rdn_example'] = '(example: cn=MyNewPerson)'; +$lang['container'] = 'Container'; +$lang['alias_for'] = 'Alias for %s'; // 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.'; @@ -275,7 +367,7 @@ $lang['go_back'] = 'Go back'; $lang['welcome_note'] = 'Use the menu to the left to navigate'; $lang['credits'] = 'Credits'; $lang['changelog'] = 'ChangeLog'; -$lang['documentation'] = 'Documentation'; +$lang['donate'] = 'Donate'; // view_jpeg_photo.php $lang['unsafe_file_name'] = 'Unsafe file name: '; @@ -285,34 +377,43 @@ $lang['no_such_file'] = 'No such file: '; $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 +$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) +$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 +$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. + "auto_uid_number_search_base". Please specify it before proceeding.'; +$lang['auto_uid_invalid_credential'] = 'Unable to bind to %s with your with auto_uid credentials. Please check your configuration file.'; +$lang['bad_auto_uid_search_base'] = 'Your phpLDAPadmin configuration specifies an invalid auto_uid_search_base for server %s'; +$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\', +$lang['error_auth_type_config'] = 'Error: You have an error in your config file. The only three allowed values + for auth_type in the $servers section are \'session\', \'cookie\', and \'config\'. 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['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['could_not_bind_anon'] = 'Could not bind anonymously to server.'; +$lang['could_not_bind'] = 'Could not bind to the LDAP server.'; +$lang['anonymous_bind'] = 'Anonymous Bind'; +$lang['bad_user_name_or_password'] = 'Bad username or password. Please try again.'; +$lang['redirecting_click_if_nothing_happens'] = 'Redirecting... Click here if nothing happens.'; +$lang['successfully_logged_in_to_server'] = 'Successfully logged into server %s'; +$lang['could_not_set_cookie'] = 'Could not set cookie.'; +$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_not_support_md5crypt'] = 'Your PHP install does not support md5crypt 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_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'] = '
@@ -339,14 +440,23 @@ $lang['ferror_congrats_found_bug'] = 'Congratulations! You found a bug in phpLDA $lang['import_ldif_file_title'] = 'Import LDIF File'; $lang['select_ldif_file'] = 'Select an LDIF file:'; $lang['select_ldif_file_proceed'] = 'Proceed >>'; +$lang['dont_stop_on_errors'] = 'Don\'t stop on errors'; //ldif_import $lang['add_action'] = 'Adding...'; $lang['delete_action'] = 'Deleting...'; $lang['rename_action'] = 'Renaming...'; $lang['modify_action'] = 'Modifying...'; +$lang['warning_no_ldif_version_found'] = 'No version found. Assuming 1.'; +$lang['valid_dn_line_required'] = 'A valid dn line is required.'; +$lang['missing_uploaded_file'] = 'Missing uploaded file.'; +$lang['no_ldif_file_specified.'] = 'No LDIF file specified. Please try again.'; +$lang['ldif_file_empty'] = 'Uploaded LDIF file is empty.'; +$lang['empty'] = 'empty'; +$lang['file'] = 'File'; +$lang['number_bytes'] = '%s bytes'; -$lang['failed'] = 'failed'; +$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:'; @@ -354,4 +464,64 @@ $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:'; + +// Exports +$lang['export_format'] = 'Export format'; +$lang['line_ends'] = 'Line ends'; +$lang['must_choose_export_format'] = 'You must choose an export format.'; +$lang['invalid_export_format'] = 'Invalid export format'; +$lang['no_exporter_found'] = 'No available exporter found.'; +$lang['error_performing_search'] = 'Encountered an error while performing search.'; +$lang['showing_results_x_through_y'] = 'Showing results %s through %s.'; +$lang['searching'] = 'Searching...'; +$lang['size_limit_exceeded'] = 'Notice, search size limit exceeded.'; +$lang['entry'] = 'Entry'; +$lang['ldif_export_for_dn'] = 'LDIF Export for: %s'; +$lang['generated_on_date'] = 'Generated by phpLDAPadmin on %s'; +$lang['total_entries'] = 'Total Entries'; +$lang['dsml_export_for_dn'] = 'DSLM Export for: %s'; + +// logins +$lang['could_not_find_user'] = 'Could not find a user "%s"'; +$lang['password_blank'] = 'You left the password blank.'; +$lang['login_cancelled'] = 'Login cancelled.'; +$lang['no_one_logged_in'] = 'No one is logged in to that server.'; +$lang['could_not_logout'] = 'Could not logout.'; +$lang['unknown_auth_type'] = 'Unknown auth_type: %s'; +$lang['logged_out_successfully'] = 'Logged out successfully from server %s'; +$lang['authenticate_to_server'] = 'Authenticate to server %s'; +$lang['warning_this_web_connection_is_unencrypted'] = 'Warning: This web connection is unencrypted.'; +$lang['not_using_https'] = 'You are not using \'https\'. Web browser will transmit login information in clear text.'; +$lang['login_dn'] = 'Login DN'; +$lang['user_name'] = 'User name'; +$lang['password'] = 'Password'; +$lang['authenticate'] = 'Authenticate'; + +// Entry browser +$lang['entry_chooser_title'] = 'Entry Chooser'; + +// Index page +$lang['need_to_configure'] = 'You need to configure phpLDAPadmin. Edit the file \'config.php\' to do so. An example config file is provided in \'config.php.example\''; + +// Mass deletes +$lang['no_deletes_in_read_only'] = 'Deletes not allowed in read only mode.'; +$lang['error_calling_mass_delete'] = 'Error calling mass_delete.php. Missing mass_delete in POST vars.'; +$lang['mass_delete_not_array'] = 'mass_delete POST var is not an array.'; +$lang['mass_delete_not_enabled'] = 'Mass deletion is not enabled. Please enable it in config.php before proceeding.'; +$lang['mass_deleting'] = 'Mass Deleting'; +$lang['mass_delete_progress'] = 'Deletion progress on server "%s"'; +$lang['malformed_mass_delete_array'] = 'Malformed mass_delete array.'; +$lang['no_entries_to_delete'] = 'You did not select any entries to delete.'; +$lang['deleting_dn'] = 'Deleting %s'; +$lang['total_entries_failed'] = '%s of %s entries failed to be deleted.'; +$lang['all_entries_successful'] = 'All entries deleted successfully.'; +$lang['confirm_mass_delete'] = 'Confirm mass delete of %s entries on server %s'; +$lang['yes_delete'] = 'Yes, delete!'; + +// Renaming entries +$lang['non_leaf_nodes_cannot_be_renamed'] = 'You cannot rename an entry which has children entries (eg, the rename operation is not allowed on non-leaf entries)'; +$lang['no_rdn_change'] = 'You did not change the RDN'; +$lang['invalid_rdn'] = 'Invalid RDN value'; +$lang['could_not_rename'] = 'Could not rename the entry'; + ?> diff --git a/lang/recoded/es.php b/lang/recoded/es.php index 5bc9cb3..29384c3 100644 --- a/lang/recoded/es.php +++ b/lang/recoded/es.php @@ -1,4 +1,6 @@ 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['refresh_this_entry'] = 'Rafraîchir cette entrée'; +$lang['delete_hint'] = 'Note: 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é modifié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['no_new_attrs_available'] = 'plus d\'attributs disponibles pour cette entrée'; +$lang['no_new_binary_attrs_available'] = 'plus d\' attributs binaires disponibles pour cette entréé'; $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['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'; +$lang['add_new_value'] = 'Ajouter une nouvelle valeur'; // 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['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['schema_retrieve_error_1']='Le serveur ne supporte pas entièrement le protocol LDAP.'; +$lang['schema_retrieve_error_2']='Votre version de PHP ne permet pas d\'exécute correctement la requête.'; +$lang['schema_retrieve_error_3']='Ou tout du moins, phpLDAPadmin ne sait pas comment récupérer le schéma pour votre serveur.'; +$lang['jump_to_objectclass'] = 'Aller à une classe d\'objet'; +$lang['jump_to_attr'] = 'Aller à un attribut'; +$lang['jump_to_matching_rule'] = 'Aller à une règle d\'égalité'; $lang['schema_for_server'] = 'Schema pour le serveur'; $lang['required_attrs'] = 'Attributs obligatoires'; -$lang['optional_attrs'] = 'Attributs facultatifs'; +$lang['optional_attrs'] = 'Attributs optionnels'; +$lang['optional_binary_attrs'] = 'Attributs binaires optionnels'; $lang['OID'] = 'OID'; +$lang['aliases']='Alias'; $lang['desc'] = 'Description'; +$lang['no_description']='aucune 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['equality']='Egalité'; +$lang['is_obsolete'] = 'Cette classe d\'objet est obsolete'; +$lang['inherits'] = 'hérite'; +$lang['inherited_from']='hérite de'; +$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é'; +$lang['not_specified'] = 'non spécifié'; +$lang['character']='caractère'; +$lang['characters']='caractères'; +$lang['used_by_objectclasses']='Utilisé par les objectClasses'; +$lang['used_by_attributes']='Utilisé par les attributes'; +$lang['maximum_length']='Maximum Length'; +$lang['attributes']='Types d\'attribut'; +$lang['syntaxes']='Syntaxes'; +$lang['objectclasses']='objectClasses'; +$lang['matchingrules']='Règles d\'égalité'; +$lang['oid']='OID'; +$lang['obsolete']='Obsolète'; +$lang['ordering']='Ordonné'; +$lang['substring_rule']='Substring Rule'; +$lang['single_valued']='Valeur Unique'; +$lang['collective']='Collective'; +$lang['user_modification']='Modification Utilisateur'; +$lang['usage']='Usage'; +$lang['maximum_length']='Longueur maximale'; +$lang['could_not_retrieve_schema_from']='Impossible de récupérer le schéma de'; +$lang['type']='Type'; // 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'; +$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'; +$lang['no_such_entry'] = 'Aucune entrée de ce type: %s'; +$lang['delete_dn'] = 'Delete %s'; +$lang['permanently_delete_children'] = 'Effacer également les sous-entrées?'; +$lang['entry_is_root_sub_tree'] = 'Cette entrée est la racine d\'une arborescence contenant %s entrées.'; +$lang['view_entries'] = 'voir les entrées'; +$lang['confirm_recursive_delete'] = 'phpLDAPadmin peut supprimer cette entrées ainsi que les %s noeuds enfants de façon récursive. Voir ci-dessous pour une liste des entrées que cette action suprimera. Voulez-vous continuer?'; +$lang['confirm_recursive_delete_note'] = 'Note: ceci est potentiellement très dangereux and vous faîtes cela à vos propres risques. Cette opération ne peut être annulée. Prenez en considération les alias ainsi que d\'autres choses qui pourraient causer des problèmes.'; +$lang['delete_all_x_objects'] = 'Suppressions des %s objets'; +$lang['recursive_delete_progress'] = 'Progression de la suppression récursive'; +$lang['entry_and_sub_tree_deleted_successfully'] = 'L\'entrée %s ainsi que la sous-arborescence de ce noeud ont été supprimés avec succès.'; +$lang['failed_to_delete_entry'] = 'Echec lors de la suppression de l\'entrée %s'; +$lang['list_of_entries_to_be_deleted'] = 'Liste des entrées à supprimer:'; +$lang['sure_permanent_delete_object']='Etes-vous certain de vouloir supprimer définitivement cet objet?'; +$lang['dn'] = 'DN'; + +// Deleting attributes +$lang['attr_is_read_only'] = 'L\'attribut "%s" est marqué comme étant en lecture seule dans la configuration de phpLDAPadmin.'; +$lang['no_attr_specified'] = 'Aucun nom d\'attributs spécifié.'; +$lang['no_dn_specified'] = 'Aucun DN specifié'; + +// Adding attributes +$lang['left_attr_blank'] = 'Vous avez laisser la valeur de l\'attribut vide. Veuillez s\'il vous plaît retourner à la page précédente et recommencer.'; +$lang['failed_to_add_attr'] = 'Echec lors de l\'ajout de l\'attribut.'; + +// Updating values +$lang['modification_successful'] = 'Modification réussie!'; +$lang['change_password_new_login'] = 'Votre mot de passe ayant été changé, vous devez maintenant vous logger avec votre nouveau mot de passe.'; // Adding objectClass form $lang['new_required_attrs'] = 'Nouveaux Attributs Obligatoires'; -$lang['requires_to_add'] = 'Cette action nécessite d\'ajouter'; +$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['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['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['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['could_not_connect_to_host_on_port'] = 'Impossible de se connecter à "%s" sur le port "%s"'; +$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['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['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'; +$lang['no_entries'] = 'aucune entrée'; +$lang['not_logged_in'] = 'Vous n\'êtes pas loggué'; +$lang['could_not_det_base_dn'] = 'Impossible de déterminer le DN de base'; +$lang['please_report_this_as_a_bug']='Veuillez s\'il-vous-plaît rapporter ceci comme un bogue.'; +$lang['reasons_for_error']='Ceci peut arriver pour plusieurs raisons, les plus probables sont:'; +$lang['yes']='Oui'; +$lang['no']='Non'; +$lang['go']='Go'; +$lang['delete']='Suppression'; +$lang['back']='Back'; +$lang['object']='object'; +$lang['delete_all']='Tous les supprimer'; +$lang['url_bug_report']='https://sourceforge.net/tracker/?func=add&group_id=61828&atid=498546'; +$lang['hint'] = 'Astuce'; +$lang['bug'] = 'bogue'; +$lang['warning'] = 'Avertissement'; +$lang['light'] = 'lumière'; // the word 'light' from 'light bulb' +$lang['proceed_gt'] = 'Continuer >>'; + // Add value form $lang['add_new'] = 'Ajout d\'une nouvelle valeur '; @@ -174,151 +239,182 @@ $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.'; + '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['new_required_attrs_note'] = 'Note: vous aurez peut-êre 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_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_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.'; +$lang['missing_template_file'] = 'Avertissement: le fichier modèle est manquant, '; +$lang['using_default'] = 'Utilisation du modèle par défaut.'; +$lang['template'] = 'Modèle'; +$lang['must_choose_template'] = 'Vous devez choisir un modèle'; +$lang['invalid_template'] = '%s est un modèle non valide'; +$lang['using_template'] = 'Utilisation du modèle'; +$lang['go_to_dn'] = 'Aller à %s'; + + + //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_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.'; +$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.'; +$lang['recursive_copy'] = 'Copie récursive'; +$lang['filter'] = 'Filtre'; +$lang['filter_tooltip'] = 'Lors d\'une copie récursive, seuls les entrées correspondant à ce filtre seront copiés'; //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.'; +$lang['create_required_attribute'] = 'Une valeur n\'a pas été spécifiée pour l\'attribut requis %s.'; +$lang['redirecting'] = 'Redirection'; +$lang['here'] = 'ici'; +$lang['create_could_not_add'] = 'L\'ajout de l\'objet au serveur LDAP n\'a pu être effectuée.'; +$lang['rdn_field_blank'] = 'Vous avez laisser le champ du RDN vide.'; +$lang['container_does_not_exist'] = 'Le containeur que vous avez spécifié (%s) n\'existe pas. Veuillez, s\'il vous plaît recommencer.'; +$lang['no_objectclasses_selected'] = 'Vous n\'avez sélectionner aucun ObjectClasses pour cet objet. Veuillez s\'il vous plaît retourner à la page précédente et le faire.'; +$lang['hint_structural_oclass'] = 'Note: Vous devez choisir au moins une classe d\'objet de type structural'; //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_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'; +$lang['relative_distinguished_name'] = 'Relative Distinguished Name'; +$lang['rdn'] = 'RDN'; +$lang['rdn_example'] = '(exemple: cn=MyNewPerson)'; +$lang['container'] = 'Containeur'; +$lang['alias_for'] = 'Alias pour %s'; + //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\'.'; - +$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\'.'; +$lang['create_step1'] = 'Etape 1 de 2: Nom et classes d\'objet'; +$lang['create_step2'] = 'Etape 2 de 2: Définition des attributs et de leurs valeurs'; //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['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['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ées: '; +$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_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'; +$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['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 à'; +$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['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['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.'; +$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['attr_deleted'] = '[attribut supprimé]'; $lang['commit'] = 'Valider'; $lang['cancel'] = 'Annuler'; -$lang['you_made_no_changes'] = 'Aucun changement n\'a été effectué'; +$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'; +$lang['credits'] = 'Crédits'; +$lang['changelog'] = 'ChangeLog'; +$lang['donate'] = 'Donation'; // view_jpeg_photo.php $lang['unsafe_file_name'] = 'Nom de fichier non sûr: '; -$lang['no_such_file'] = 'Aucun fichier trouvé: '; +$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) +$lang['auto_update_not_setup'] = '"auto_uid_numbers" a été activé pour %s dans votre configuration, + mais vous n\'avez pas spécifié le mécanisme "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) +$lang['specified_uidpool'] = 'Le méchanisme "auto_uid_number_mechanism" a été défini à search dans votre + configuration pour le serveur %s, mais la directive "auto_uid_number_search_base" n\'est pad définie. Veuillez le spécifier avant de continuer.'; +$lang['auto_uid_invalid_credential'] = 'Impossible d\'effectuer un "bind" à %s avec vos droits pour "auto_uid". Veuillez S\'il vous plaît vérifier votre fichier de configuration.'; +$lang['bad_auto_uid_search_base'] = 'Votre fichier de configuration spécifie un invalide auto_uid_search_base pour le serveur %s'; +$lang['auto_uid_invalid_value'] = 'Une valeur non valide a été spécifiée pour le méchaninsme "auto_uid_number_mechanism" (%s) dans votre configuration. Seul uidpool et search sont valides. - Veuillez corriger ce problème.'; + 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é.'; + 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['could_not_start_tls'] = 'Impossible de démarrer TLS.
Veuillez,s\'il vous plaît, vérifier la configuration de votre serveur LDAP.'; +$lang['could_not_bind_anon'] = 'Impossible d\'effectuer un "bind" anonyme.'; +$lang['anonymous_bind'] = 'Bind Anonyme'; +$lang['bad_user_name_or_password'] = 'Mauvais nom d\'utilisateur ou mot de passe. Veuillez recommencer s\'il vous plaît.'; +$lang['redirecting_click_if_nothing_happens'] = 'Redirection... Cliquez ici si rien ne se passe.'; +$lang['successfully_logged_in_to_server'] = 'Login réussi sur le serveur %s'; +$lang['could_not_set_cookie'] = 'Impossible d\'activer les cookies.'; $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['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_number'] = 'Numéro de l\'erreur: %s (%s)

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

'; -$lang['ferror_number_short'] = 'Numé de l\'erreur: %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_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!
- Vous avez trouvé un bogue non fatal dans phpLDAPAdmin!
Erreur:%s (%s)
Fichier:
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.

+ 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.

@@ -331,11 +427,11 @@ $lang['ferror_congrats_found_bug'] = 'Félicitations! Vous avez trouv&eacu
Erreur:%s
Niveau:%s
Serveur Webr:%s

- S\'il vous plaît, veuillez rapporter ce bogue en cliquant ici!'; + 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'] = 'Sélectionner un fichier LDIF:'; $lang['select_ldif_file_proceed'] = 'Continuer >>'; //lldif_import @@ -343,13 +439,88 @@ $lang['add_action'] = 'Ajout de...'; $lang['delete_action'] = 'Supression de...'; $lang['rename_action'] = 'Renommage de...'; $lang['modify_action'] = 'Modification de...'; -$lang['failed'] = 'échec'; +$lang['warning_no_ldif_version_found'] = 'Aucun numéro de version trouvé. Version 1 supposé.'; +$lang['valid_dn_line_required'] = 'Une ligne avec un dn valide est requis.'; +$lang['valid_dn_line_required'] = 'A valid dn line is required.'; +$lang['missing_uploaded_file'] = 'Le fichier est manquant.'; +$lang['no_ldif_file_specified.'] = 'Aucun fichier LDIFspécifié. Veuillez réessayer, s\'il vous plaît.'; +$lang['ldif_file_empty'] = 'Le fichier LDIF est vide.'; +$lang['file'] = 'Fichier'; +$lang['number_bytes'] = '%s bytes'; + +$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_number'] = 'Numéro de ligne'; $lang['ldif_line'] = 'Ligne'; +//delete_form +$lang['sure_permanent_delete_object']='Etes-vous certain de vouloir supprimer définitivement cet objet?'; +$lang['list_of_entries_to_be_deleted'] = 'Liste des entrées à supprimer:'; +$lang['dn'] = 'DN'; + +// Exports +$lang['export_format'] = 'Format'; +$lang['line_ends'] = 'Fin de ligne'; +$lang['must_choose_export_format'] = 'Vous devez sélectionner un format pour l\'exportation.'; +$lang['invalid_export_format'] = 'Format d\'exportation invalide'; +$lang['no_exporter_found'] = 'Aucun exporteur trouvé.'; +$lang['error_performing_search'] = 'Une erreur a eu lieu lors de la recherche.'; +$lang['showing_results_x_through_y'] = 'Affichage de %s à %s des résultats.'; +$lang['searching'] = 'Recherche...'; +$lang['size_limit_exceeded'] = 'Notice, la limite de taille pour la recherche est atteinte.'; +$lang['entry'] = 'Entrée'; +$lang['ldif_export_for_dn'] = 'Export LDIF pour: %s'; +$lang['generated_on_date'] = 'Generé par phpLDAPadmin le %s'; +$lang['total_entries'] = 'Nombre d\'entrées'; +$lang['dsml_export_for_dn'] = 'Export DSML pour: %s'; + + +// logins +$lang['could_not_find_user'] = 'Impossible de trouver l\'utilisateur "%s"'; +$lang['password_blank'] = 'Le champ pour le mot de passe est vide.'; +$lang['login_cancelled'] = 'Login interrompu.'; +$lang['no_one_logged_in'] = 'Personne n\'est loggé à ce serveur.'; +$lang['could_not_logout'] = 'Impossible de se déconnecter.'; +$lang['unknown_auth_type'] = 'auth_type inconnu: %s'; +$lang['logged_out_successfully'] = 'Déconnection réussie du serveur %s'; +$lang['authenticate_to_server'] = 'Authentification au serveur %s'; +$lang['warning_this_web_connection_is_unencrypted'] = 'Attention: Cette connection web n\'est pas cryptée.'; +$lang['not_using_https'] = 'Vous n\'utilisez pas \'https\'. Le navigateur web transmettra les informations de login en clair.'; +$lang['login_dn'] = 'Login DN'; +$lang['user_name'] = 'Nom de l\'utilisateur'; +$lang['password'] = 'Mot de passe'; +$lang['authenticate'] = 'Authentification'; + +// Entry browser +$lang['entry_chooser_title'] = 'Sélection de l\'entrée'; + +// Index page +$lang['need_to_configure'] = 'phpLDAPadmin a besoin d\'être configuré.Pour cela, éditer le fichier \'config.php\' . Un exemple de fichier de configuration est fourni dans \'config.php.example\''; + +// Mass deletes +$lang['no_deletes_in_read_only'] = 'Les suppressions ne sont pas permises en mode lecure seule.'; +$lang['error_calling_mass_delete'] = 'Erreur lors de l\'appel à mass_delete.php. mass_delete est manquant dans les variables POST.'; +$lang['mass_delete_not_array'] = 'La variable POST mass_delete \'est pas un tableau.'; +$lang['mass_delete_not_enabled'] = 'La suppression de masse n\'est pas disponible. Veuillez l\'activer dans config.php avant de continuer.'; +$lang['mass_deleting'] = 'Suppression en masse'; +$lang['mass_delete_progress'] = 'Progrès de la suppression sur le serveur "%s"'; +$lang['malformed_mass_delete_array'] = 'Le tableau mass_delete n\'est pas bien formé.'; +$lang['no_entries_to_delete'] = 'Vous n\'avez sélectionné aucune entrées à effacer.'; +$lang['deleting_dn'] = 'Deleting %s'; +$lang['total_entries_failed'] = '%s des %s entrées n\'ont pu être supprimées.'; +$lang['all_entries_successful'] = 'Toutes les entrées ont été supprimées avec succès.'; +$lang['confirm_mass_delete'] = 'Confirmation de la suppression en masse de %s entrées sur le serveur %s'; +$lang['yes_delete'] = 'Oui, supprimer!'; + +// Renaming entries +$lang['non_leaf_nodes_cannot_be_renamed'] = 'Vous ne pouvez pas renommer une entrée qui a des sous-entrées'; +$lang['no_rdn_change'] = 'Le RDN n\'a pas été modifié'; +$lang['invalid_rdn'] = 'Valeur invalide du RDN'; +$lang['could_not_rename'] = 'Impossible de renommer l\'entrée'; + + ?> diff --git a/lang/recoded/it.php b/lang/recoded/it.php index 088b54b..830638b 100644 --- a/lang/recoded/it.php +++ b/lang/recoded/it.php @@ -1,4 +1,6 @@ - * Uwe Ebel + * Vertaling door Richard Lucassen + * Commentaar gaarne naar bovenstaand adres sturen a.u.b. */ // Search form @@ -56,9 +58,9 @@ $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['export_mac'] = 'Macintosh regeleinden';//'Macintosh style line ends'; +$lang['export_win'] = 'Windows regeleinden';//'Windows style line ends'; +$lang['export_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'; @@ -239,6 +241,7 @@ $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'; +$lang['predefined_search_str'] = 'of een van deze lijst uitlezen';//'or select a predefined search'; // server_info.php $lang['could_not_fetch_server_info'] = 'kan geen LDAP van de server krijgen';//'Could not retrieve LDAP information from the server'; @@ -326,4 +329,9 @@ $lang['ldif_could_not_modify_object'] = 'Kan object niet wijzigen'; $lang['ldif_line_number'] = 'regelnummer: '; $lang['ldif_line'] = 'regel: '; +$lang['credits'] = 'Credits';//'Credits'; +$lang['changelog'] = 'Changelog';//'ChangeLog'; +$lang['documentation'] = 'Documentatie';// 'Documentation'; + + ?> diff --git a/lang/recoded/pl.php b/lang/recoded/pl.php new file mode 100644 index 0000000..c7bb2a1 --- /dev/null +++ b/lang/recoded/pl.php @@ -0,0 +1,508 @@ + Czy na pewno chcesz to zrobić ?'; +$lang['confirm_recursive_delete_note'] = 'Uwaga: ta operacja jest potencjalnie bardzo niebezpieczna i wykonujesz jÄ… na wÅ‚asne ryzyko. Ta akcja nie może zostać cofniÄ™ta. Weź pod uwagÄ™ aliasy, owoÅ‚ania i inne rzeczy, które mogÄ… spowodować problemy.'; +$lang['delete_all_x_objects'] = 'UsuÅ„ wszystkie %s obiekty/ów'; +$lang['recursive_delete_progress'] = 'PostÄ™p rekursywnego usuwania'; +$lang['entry_and_sub_tree_deleted_successfully'] = 'Wpis %s oraz poddrzewo zostaÅ‚y pomyÅ›lnie usuniÄ™te.'; +$lang['failed_to_delete_entry'] = 'BÅ‚Ä…d podczas usuwania wpisu %s'; + +// Deleting attributes +$lang['attr_is_read_only'] = 'Atrybut "%s" jest oznaczony jako tylko-do-odczytu w konfiguracji phpLDAPadmin.'; +$lang['no_attr_specified'] = 'Nie okreÅ›lono nazwy atrybutu.'; +$lang['no_dn_specified'] = 'Nie okreÅ›lono DN'; + +// Adding attributes +$lang['left_attr_blank'] = 'PozostawiÅ‚eÅ›/aÅ› pustÄ… wartość atrybutu. ProszÄ™ wrócić i spróbować ponownie.'; +$lang['failed_to_add_attr'] = 'BÅ‚Ä…d podczas dodawania atrybutu.'; + +// Updating values +$lang['modification_successful'] = 'Modyfikacja zakoÅ„czona pomyÅ›lnie.'; +$lang['change_password_new_login'] = 'JeÅ›li zmieniÅ‚eÅ›/aÅ› hasÅ‚o, musisz siÄ™ zalogować ponownie z nowym hasÅ‚em.'; + +// Adding objectClass form +$lang['new_required_attrs'] = 'Nowe atrybuty wymagane'; +$lang['requires_to_add'] = 'Ta akcja wymaga, abyÅ› dodaÅ‚/a'; +$lang['new_attributes'] = 'nowe atrybuty'; +$lang['new_required_attrs_instructions'] = 'Instrukcja: Aby dodać tÄ™ klasÄ™ obiektu do tego wpisu, musisz okreÅ›lić'; +$lang['that_this_oclass_requires'] = 'co ta klasa obiektu wymaga. Możesz zrobić to w tym formularzu.'; +$lang['add_oclass_and_attrs'] = 'Dodaj klasÄ™ obiektu i atrybuty'; + +// General +$lang['chooser_link_tooltip'] = 'Kliknij aby wywoÅ‚ać okno i wybrać wpis (DN) graficznie'; +$lang['no_updates_in_read_only_mode'] = 'Nie możesz wykonać modyfikacji dopóki serwer jest w trybie tylko-do-odczytu'; +$lang['bad_server_id'] = 'ZÅ‚y identyfikator (id) serwera'; +$lang['not_enough_login_info'] = 'Brak wystarczajÄ…cych informacji aby zalogować siÄ™ do serwera. ProszÄ™ sprawdzić konfiguracjÄ™.'; +$lang['could_not_connect'] = 'Nie można podÅ‚Ä…czyć siÄ™ do serwera LDAP.'; +$lang['could_not_connect_to_host_on_port'] = 'Nie można podÅ‚Ä…czyć siÄ™ do "%s" na port "%s"'; +$lang['could_not_perform_ldap_mod_add'] = 'Nie można dokonać operacji ldap_mod_add.'; +$lang['bad_server_id_underline'] = 'ZÅ‚y server_id: '; +$lang['success'] = 'Sukces'; +$lang['server_colon_pare'] = 'Serwer: '; +$lang['look_in'] = 'Szukam w: '; +$lang['missing_server_id_in_query_string'] = 'Nie okreÅ›lono ID serwera w zapytaniu !'; +$lang['missing_dn_in_query_string'] = 'Nie okreÅ›lono DN w zapytaniu !'; +$lang['back_up_p'] = 'Do góry...'; +$lang['no_entries'] = 'brak wpisów'; +$lang['not_logged_in'] = 'Nie zalogowany/a'; +$lang['could_not_det_base_dn'] = 'Nie można okreÅ›lić bazowego DN'; +$lang['please_report_this_as_a_bug']='ProszÄ™ zgÅ‚osić to jako bÅ‚Ä…d.'; +$lang['reasons_for_error']='To mogÅ‚o zdarzyć siÄ™ z kilku powodów, z których najbardziej prawdopodobne to:'; +$lang['yes']='Tak'; +$lang['no']='Nie'; +$lang['go']='Idź'; +$lang['delete']='UsuÅ„'; +$lang['back']='Powrót'; +$lang['object']='obiekt'; +$lang['delete_all']='UsuÅ„ wszystko'; +$lang['url_bug_report']='https://sourceforge.net/tracker/?func=add&group_id=61828&atid=498546'; +$lang['hint'] = 'wskazówka'; +$lang['bug'] = 'bÅ‚Ä…d (bug)'; +$lang['warning'] = 'ostrzeżenie'; +$lang['light'] = 'żarówka'; // the word 'light' from 'light bulb' +$lang['proceed_gt'] = 'Dalej >>'; + +// Add value form +$lang['add_new'] = 'Dodaj'; +$lang['value_to'] = 'wartość do'; +$lang['distinguished_name'] = 'Wyróżniona Nazwa (DN)'; +$lang['current_list_of'] = 'Aktualna lista'; +$lang['values_for_attribute'] = 'wartoÅ›ci dla atrybutu'; +$lang['inappropriate_matching_note'] = 'Uwaga: JeÅ›li nie ustawisz reguÅ‚y EQUALITY dla tego atrybutu na Twoim serwerze LDAP otrzymasz bÅ‚Ä…d "niewÅ‚aÅ›ciwe dopasowanie (inappropriate matching)"'; +$lang['enter_value_to_add'] = 'Wprowadź wartość, którÄ… chcesz dodać:'; +$lang['new_required_attrs_note'] = 'Uwaga: może być wymagane wprowadzenie nowych atrybutów wymaganych przez tÄ™ klasÄ™ obiektu'; +$lang['syntax'] = 'SkÅ‚adnia'; + +//copy.php +$lang['copy_server_read_only'] = 'Nie możesz dokonać modyfikacji dopóki serwer jest w trybie tylko-do-odczytu'; +$lang['copy_dest_dn_blank'] = 'Nie wypeÅ‚niono docelowej DN.'; +$lang['copy_dest_already_exists'] = 'Docelowy wpis (%s) już istnieje.'; +$lang['copy_dest_container_does_not_exist'] = 'Docelowy kontener (%s) nie istnieje.'; +$lang['copy_source_dest_dn_same'] = 'ŹródÅ‚owa i docelowa DN sÄ… takie same.'; +$lang['copy_copying'] = 'Kopiowanie '; +$lang['copy_recursive_copy_progress'] = 'PostÄ™p kopiowania rekursywnego'; +$lang['copy_building_snapshot'] = 'Budowanie migawki (snapshot) drzewa do skopiowania... '; +$lang['copy_successful_like_to'] = 'Kopiowanie zakoÅ„czone pomyÅ›lnie. Czy chcesz '; +$lang['copy_view_new_entry'] = 'zobaczyć nowy wpis '; +$lang['copy_failed'] = 'BÅ‚Ä…d podczas kopiowania DN: '; + +//edit.php +$lang['missing_template_file'] = 'Uwaga: brak pliku szablonu, '; +$lang['using_default'] = 'Używam domyÅ›lnego.'; +$lang['template'] = 'Szablon'; +$lang['must_choose_template'] = 'Musisz wybrać szablon'; +$lang['invalid_template'] = '%s nie jest prawidÅ‚owym szablonem'; +$lang['using_template'] = 'wykorzystujÄ…c szablon'; +$lang['go_to_dn'] = 'Idź do %s'; + +//copy_form.php +$lang['copyf_title_copy'] = 'Kopiuj '; +$lang['copyf_to_new_object'] = 'do nowego obiektu'; +$lang['copyf_dest_dn'] = 'Docelowa DN'; +$lang['copyf_dest_dn_tooltip'] = 'PeÅ‚na DN nowego wpisu do utworzenia poprzez skopiowanie wpisu źródÅ‚owego'; +$lang['copyf_dest_server'] = 'Docelowy serwer'; +$lang['copyf_note'] = 'Wskazówka: Kopiowanie pomiÄ™dzy różnymi serwerami dziaÅ‚a wtedy, gdy nie wystÄ™puje naruszenie schematów'; +$lang['copyf_recursive_copy'] = 'Rekursywne kopiowanie wszystkich potomnych obiektów'; +$lang['recursive_copy'] = 'Kopia rekursywna'; +$lang['filter'] = 'Filtr'; +$lang['filter_tooltip'] = 'Podczas rekursywnego kopiowania, kopiowane sÄ… tylko wpisy pasujÄ…ce do filtra'; + +//create.php +$lang['create_required_attribute'] = 'Brak wartoÅ›ci dla wymaganego atrybutu (%s).'; +$lang['redirecting'] = 'PrzekierowujÄ™'; +$lang['here'] = 'tutaj'; +$lang['create_could_not_add'] = 'Nie można dodać obiektu do serwera LDAP.'; + +//create_form.php +$lang['createf_create_object'] = 'Utwórz obiekt'; +$lang['createf_choose_temp'] = 'Wybierz szablon'; +$lang['createf_select_temp'] = 'Wybierz szablon dla procesu tworzenia'; +$lang['createf_proceed'] = 'Dalej'; +$lang['rdn_field_blank'] = 'PozostawiÅ‚eÅ›/aÅ› puste pole RDN.'; +$lang['container_does_not_exist'] = 'Kontener który okreÅ›liÅ‚eÅ›/aÅ› (%s) nie istnieje. Spróbuj ponownie.'; +$lang['no_objectclasses_selected'] = 'Nie wybraÅ‚eÅ›/aÅ› żadnych Klas Obiektu dla tego obiektu. Wróć proszÄ™ i zrób to.'; +$lang['hint_structural_oclass'] = 'Wskazówka: Musisz wybrać co najmniej jednÄ… strukturalnÄ… klasÄ™ obiektu'; + +//creation_template.php +$lang['ctemplate_on_server'] = 'Na serwerze'; +$lang['ctemplate_no_template'] = 'Brak okreÅ›lenia szablonu w zmiennych POST.'; +$lang['ctemplate_config_handler'] = 'Twoja konfiguracja okreÅ›la handler'; +$lang['ctemplate_handler_does_not_exist'] = 'dla tego szablonu. Ale, ten handler nie istnieje w szablonach/tworzonym katalogu'; +$lang['create_step1'] = 'Krok 1 z 2: Nazwa i klasa/y obiektu'; +$lang['create_step2'] = 'Krok 2 z 2: OkreÅ›lenie atrybutów i wartoÅ›ci'; +$lang['relative_distinguished_name'] = 'Relatywna Wyróżniona Nazwa (RDN)'; +$lang['rdn'] = 'RDN'; +$lang['rdn_example'] = '(przykÅ‚ad: cn=MyNewPerson)'; +$lang['container'] = 'Kontener'; + +// search.php +$lang['you_have_not_logged_into_server'] = 'Nie zalogowaÅ‚eÅ›/aÅ› siÄ™ jeszcze do wybranego serwera, wiÄ™c nie możesz go przeszukiwać.'; +$lang['click_to_go_to_login_form'] = 'Kliknij tutaj aby przejść do formularza logowania'; +$lang['unrecognized_criteria_option'] = 'Nierozpoznane kryterium opcji: '; +$lang['if_you_want_to_add_criteria'] = 'JeÅ›li chcesz dodać wÅ‚asne kryteria do listy, zmodyfikuj plik search.php aby to obsÅ‚użyć.'; +$lang['entries_found'] = 'Znaleziono wpisów: '; +$lang['filter_performed'] = 'Zastosowano filtr: '; +$lang['search_duration'] = 'Wyszukiwanie wykonane przez phpLDAPadmin w'; +$lang['seconds'] = 'sekund(y)'; + +// search_form_advanced.php +$lang['scope_in_which_to_search'] = 'Przeszukiwany zakres'; +$lang['scope_sub'] = 'Sub (caÅ‚e poddrzewo)'; +$lang['scope_one'] = 'One (jeden poziom poniżej bazowej)'; +$lang['scope_base'] = 'Base (tylko bazowa dn)'; +$lang['standard_ldap_search_filter'] = 'Standardowy filtr dla LDAP. Na przykÅ‚ad: (&(sn=Kowalski)(givenname=Jan))'; +$lang['search_filter'] = 'Filtr wyszukiwania'; +$lang['list_of_attrs_to_display_in_results'] = 'Lista atrybutów do wyÅ›wietlenia rezultatów (rozdzielona przecinkami)'; + +// search_form_simple.php +$lang['starts with'] = 'zaczyna siÄ™ od'; +$lang['ends with'] = 'koÅ„czy siÄ™ na'; +$lang['sounds like'] = 'brzmi jak'; + +// server_info.php +$lang['could_not_fetch_server_info'] = 'Nie można uzyskać informacji od serwera LDAP'; +$lang['server_info_for'] = 'Informacja o serwerze: '; +$lang['server_reports_following'] = 'Serwer zwróciÅ‚ nastÄ™pujÄ…ce informacje o sobie'; +$lang['nothing_to_report'] = 'Ten serwer nie chce nic powiedzieć o sobie :).'; + +//update.php +$lang['update_array_malformed'] = 'tablica modyfikacji (update_array) jest znieksztaÅ‚cona. To może być bÅ‚Ä…d (bug) w phpLDAPadmin. ProszÄ™ to zgÅ‚osić.'; +$lang['could_not_perform_ldap_modify'] = 'Nie można wykonać operacji modyfikacji (ldap_modify).'; + +// update_confirm.php +$lang['do_you_want_to_make_these_changes'] = 'Czy chcesz dokonać tych zmian ?'; +$lang['attribute'] = 'Atrybuty'; +$lang['old_value'] = 'Stara wartość'; +$lang['new_value'] = 'Nowa wartość'; +$lang['attr_deleted'] = '[atrybut usuniÄ™ty]'; +$lang['commit'] = 'Zatwierdź'; +$lang['cancel'] = 'Anuluj'; +$lang['you_made_no_changes'] = 'Nie dokonano żadnych zmian'; +$lang['go_back'] = 'Powrót'; + +// welcome.php +$lang['welcome_note'] = 'Użyj menu z lewej strony do nawigacji'; +$lang['credits'] = 'Credits'; +$lang['changelog'] = 'ChangeLog'; +$lang['donate'] = 'Donate'; + +// view_jpeg_photo.php +$lang['unsafe_file_name'] = 'Niebezpieczna nazwa pliku: '; +$lang['no_such_file'] = 'Nie znaleziono pliku: '; + +//function.php +$lang['auto_update_not_setup'] = 'ZezwoliÅ‚eÅ›/aÅ› na automatyczne nadawanie uid (auto_uid_numbers) + dla %s w konfiguracji, ale nie okreÅ›liÅ‚eÅ›/aÅ› mechanizmu + (auto_uid_number_mechanism). ProszÄ™ skorygować ten problem.'; +$lang['uidpool_not_set'] = 'OkreÅ›liÅ‚eÅ›/aÅ› mechanizm autonumerowania uid "auto_uid_number_mechanism" jako "uidpool" w konfiguracji Twojego serwera %s, lecz nie okreÅ›liÅ‚eÅ›/aÅ› audo_uid_number_uid_pool_dn. ProszÄ™ okreÅ›l to zanim przejdziesz dalej.'; +$lang['uidpool_not_exist'] = 'WyglÄ…da na to, że uidPool, którÄ… okreÅ›liÅ‚eÅ›/aÅ› w Twojej konfiguracji ("%s") nie istnieje.'; +$lang['specified_uidpool'] = 'OkreÅ›liÅ‚eÅ›/aÅ› "auto_uid_number_mechanism" jako "search" w konfiguracji Twojego serwera %s, ale nie okreÅ›liÅ‚eÅ›/aÅ› bazy "auto_uid_number_search_base". Zrób to zanim przejdziesz dalej.'; +$lang['auto_uid_invalid_credential'] = 'Nie można podÅ‚Ä…czyć do %s z podanÄ… tożsamoÅ›ciÄ… auto_uid. Sprawdź proszÄ™ swój plik konfiguracyjny.'; +$lang['bad_auto_uid_search_base'] = 'W Twojej konfiguracji phpLDAPadmin okreÅ›lona jest nieprawidÅ‚owa wartość auto_uid_search_base dla serwera %s'; +$lang['auto_uid_invalid_value'] = 'OkreÅ›liÅ‚eÅ›/aÅ› bÅ‚Ä™dnÄ… wartość dla auto_uid_number_mechanism ("%s") w konfiguracji. Tylko "uidpool" i "search" sÄ… poprawne. ProszÄ™ skorygować ten problem.'; +$lang['error_auth_type_config'] = 'BÅ‚Ä…d: Masz bÅ‚Ä…d w pliku konfiguracji. Trzy możliwe wartoÅ›ci dla auth_type w sekcji $servers to \'session\', \'cookie\' oraz \'config\'. Ty wpisaÅ‚eÅ›/aÅ› \'%s\', co jest niedozwolone. '; +$lang['php_install_not_supports_tls'] = 'Twoja instalacja PHP nie wspiera TLS.'; +$lang['could_not_start_tls'] = 'Nie można uruchomić TLS. ProszÄ™ sprawdzić konfiguracjÄ™ serwera LDAP.'; +$lang['could_not_bind_anon'] = 'Nie można anonimowo podÅ‚Ä…czyć do serwera.'; +$lang['could_not_bind'] = 'Nie można podÅ‚Ä…czyć siÄ™ do serwera LDAP.'; +$lang['anonymous_bind'] = 'PodÅ‚Ä…czenie anonimowe'; +$lang['bad_user_name_or_password'] = 'ZÅ‚a nazwa użytkownika lub hasÅ‚o. Spróbuj ponownie.'; +$lang['redirecting_click_if_nothing_happens'] = 'PrzekierowujÄ™... Kliknij tutaj jeÅ›li nic siÄ™ nie dzieje.'; +$lang['successfully_logged_in_to_server'] = 'PomyÅ›lnie zalogowano do serwera %s'; +$lang['could_not_set_cookie'] = 'Nie można ustawić ciasteczka (cookie).'; +$lang['ldap_said'] = 'LDAP odpowiedziaÅ‚: %s'; +$lang['ferror_error'] = 'BÅ‚Ä…d'; +$lang['fbrowse'] = 'przeglÄ…daj'; +$lang['delete_photo'] = 'UsuÅ„ fotografiÄ™'; +$lang['install_not_support_blowfish'] = 'Twoja instalacja PHP nie wspiera szyfrowania blowfish.'; +$lang['install_not_support_md5crypt'] = 'Twoja instalacja PHP nie wspiera szyfrowania md5crypt.'; +$lang['install_no_mash'] = 'Twoja instalacja PHP nie posiada funkcji mhash(). Nie mogÄ™ tworzyć haszy SHA.'; +$lang['jpeg_contains_errors'] = 'jpegPhoto zawiera bÅ‚Ä™dy
'; +$lang['ferror_number'] = 'BÅ‚Ä…d numer: %s (%s)'; +$lang['ferror_discription'] = 'Opis: %s

'; +$lang['ferror_number_short'] = 'BÅ‚Ä…d numer: %s

'; +$lang['ferror_discription_short'] = 'Opis: (brak dostępnego opisu)
'; +$lang['ferror_submit_bug'] = 'Czy jest to błąd w phpLDAPadmin ? Jeśli tak, proszę go zgłosić.'; +$lang['ferror_unrecognized_num'] = 'Nierozpoznany numer błędu: '; +$lang['ferror_nonfatil_bug'] = '
+
+ Znalazłeś błąd w phpLDAPadmin (nie krytyczny) !
BÅ‚Ä…d:%s (%s)
Plik:%s linia %s, wywołane z %s
Wersje:PLA: %s, PHP: %s, SAPI: %s +
Serwer Web:%s
+ Proszę zgłoś ten błąd klikając tutaj.

'; +$lang['ferror_congrats_found_bug'] = 'Gratulacje ! Znalazłeś błąd w phpLDAPadmin.

+ + + + + + + + + + +
BÅ‚Ä…d:%s
Poziom:%s
Plik:%s
Linia:%s
Wywołane z:%s
Wersja PLA:%s
Wersja PHP:%s
PHP SAPI:%s
Serwer Web:%s
+
+ ProszÄ™ zgÅ‚oÅ› ten bÅ‚Ä…d klikajÄ…c poniżej !'; + +//ldif_import_form +$lang['import_ldif_file_title'] = 'Importuj plik LDIF'; +$lang['select_ldif_file'] = 'Wybierz plik LDIF:'; +$lang['select_ldif_file_proceed'] = 'Dalej >>'; +$lang['dont_stop_on_errors'] = 'Nie zatrzymuj siÄ™ po napotkaniu bÅ‚Ä™dów'; + +//ldif_import +$lang['add_action'] = 'Dodawanie...'; +$lang['delete_action'] = 'Usuwanie...'; +$lang['rename_action'] = 'Zmiana nazwy...'; +$lang['modify_action'] = 'Modyfikowanie...'; +$lang['warning_no_ldif_version_found'] = 'Nie znaleziono numeru wersji. PrzyjmujÄ™ 1.'; +$lang['valid_dn_line_required'] = 'Wymagana jest poprawna linia DN.'; +$lang['missing_uploaded_file'] = 'Brak wgrywanego pliku.'; +$lang['no_ldif_file_specified.'] = 'Nie okreÅ›lono pliku LDIF. Spróbuj ponownie.'; +$lang['ldif_file_empty'] = 'Wgrany plik LDIF jest pusty.'; +$lang['empty'] = 'pusty'; +$lang['file'] = 'Plik'; +$lang['number_bytes'] = '%s bajtów'; + +$lang['failed'] = 'Nieudane'; +$lang['ldif_parse_error'] = 'BÅ‚Ä…d przetwarzania LDIF (Parse Error)'; +$lang['ldif_could_not_add_object'] = 'Nie można dodać obiektu:'; +$lang['ldif_could_not_rename_object'] = 'Nie można zmienić nazwy obiektu:'; +$lang['ldif_could_not_delete_object'] = 'Nie można usunąć obiektu:'; +$lang['ldif_could_not_modify_object'] = 'Nie można zmodyfikować obiektu:'; +$lang['ldif_line_number'] = 'Linia numer:'; +$lang['ldif_line'] = 'Linia:'; + +//delete_form +$lang['sure_permanent_delete_object']='Czy na pewno trwale usunąć ten obiekt ?'; +$lang['list_of_entries_to_be_deleted'] = 'Lista wpisów do usuniÄ™cia:'; +$lang['dn'] = 'DN'; + +// Exports +$lang['export_format'] = 'Format eksportu'; +$lang['line_ends'] = 'ZakoÅ„czenie linii'; +$lang['must_choose_export_format'] = 'Musisz wybrać format eksportu.'; +$lang['invalid_export_format'] = 'BÅ‚Ä™dny format eksportu'; +$lang['no_exporter_found'] = 'Nie znaleziono dostÄ™pnego eksportera.'; +$lang['error_performing_search'] = 'Napotkano bÅ‚Ä…d podczas szukania.'; +$lang['showing_results_x_through_y'] = 'Pokazywanie rezultatów %s przez %s.'; +$lang['searching'] = 'Szukam...'; +$lang['size_limit_exceeded'] = 'Uwaga, przekroczono limit rozmiaru wyszukiwania.'; +$lang['entry'] = 'Wpis'; +$lang['ldif_export_for_dn'] = 'Eksport LDIF dla: %s'; +$lang['generated_on_date'] = 'Wygenerowane przez phpLDAPadmin na %s'; +$lang['total_entries'] = 'ÅÄ…cznie wpisów'; +$lang['dsml_export_for_dn'] = 'Eksport DSLM dla: %s'; + +// logins +$lang['could_not_find_user'] = 'Nie można znaleźć użytkownika "%s"'; +$lang['password_blank'] = 'PozostawiÅ‚eÅ›/aÅ› puste hasÅ‚o.'; +$lang['login_cancelled'] = 'Logowanie anulowane.'; +$lang['no_one_logged_in'] = 'Nikt nie jest zalogowany do tego serwera.'; +$lang['could_not_logout'] = 'Nie można wylogować.'; +$lang['unknown_auth_type'] = 'Nieznany auth_type: %s'; +$lang['logged_out_successfully'] = 'PomyÅ›lnie wylogowano z serwera %s'; +$lang['authenticate_to_server'] = 'Uwierzytelnienie dla serwera %s'; +$lang['warning_this_web_connection_is_unencrypted'] = 'Uwaga: To poÅ‚Ä…czenie nie jest szyfrowane.'; +$lang['not_using_https'] = 'Nie używasz \'https\'. PrzeglÄ…darka bÄ™dzie transmitować informacjÄ™ logowania czystym tekstem (clear text).'; +$lang['login_dn'] = 'Login DN'; +$lang['user_name'] = 'Nazwa użytkownika'; +$lang['password'] = 'HasÅ‚o'; +$lang['authenticate'] = 'Zaloguj'; + +// Entry browser +$lang['entry_chooser_title'] = 'Wybór wpisu'; + +// Index page +$lang['need_to_configure'] = 'Musisz skonfigurować phpLDAPadmin. Wyedytuj plik \'config.php\' aby to zrobić. PrzykÅ‚ad pliku konfiguracji znajduje siÄ™ w \'config.php.example\''; + +// Mass deletes +$lang['no_deletes_in_read_only'] = 'Usuwanie jest niedozwolone w trybie tylko-do-odczytu.'; +$lang['error_calling_mass_delete'] = 'BÅ‚Ä…d podczas wywoÅ‚ania mass_delete.php. BrakujÄ…ca mass_delete w zmiennych POST.'; +$lang['mass_delete_not_array'] = 'zmienna POST mass_delete nie jest w tablicÄ….'; +$lang['mass_delete_not_enabled'] = 'Masowe usuwanie nie jest dozwolone. Odblokuj to proszÄ™ w config.php przed kontynuacjÄ….'; +$lang['mass_deleting'] = 'Masowe usuwanie'; +$lang['mass_delete_progress'] = 'PostÄ™p usuwania na serwerze "%s"'; +$lang['malformed_mass_delete_array'] = 'ZnieksztaÅ‚cona tablica mass_delete.'; +$lang['no_entries_to_delete'] = 'Nie wybrano żadnegych wpisów do usuniÄ™cia.'; +$lang['deleting_dn'] = 'Usuwanie %s'; +$lang['total_entries_failed'] = '%s z %s wpisów nie zostaÅ‚o usuniÄ™tych.'; +$lang['all_entries_successful'] = 'Wszystkie wpisy pomyÅ›lnie usunieto.'; +$lang['confirm_mass_delete'] = 'Potwierdź masowe usuniÄ™cie %s wpisów na serwerze %s'; +$lang['yes_delete'] = 'Tak, usuÅ„ !'; + +// Renaming entries +$lang['non_leaf_nodes_cannot_be_renamed'] = 'Nie możesz zmienić nazwy wpisu, posiadajÄ…cego wpisy potomne (np. operacja zmiany nazwy nie jest dozwolona na wpisach nie bÄ™dÄ…cych liÅ›cmi).'; +$lang['no_rdn_change'] = 'Nie zmieniÅ‚eÅ›/aÅ› RDN'; +$lang['invalid_rdn'] = 'BÅ‚Ä™dna wartość RDN'; +$lang['could_not_rename'] = 'Nie można zmienić nazwy wpisu'; + +?> diff --git a/lang/recoded/pt-br.php b/lang/recoded/pt-br.php new file mode 100644 index 0000000..0a25545 --- /dev/null +++ b/lang/recoded/pt-br.php @@ -0,0 +1,361 @@ +DN'; +$lang['search_scope'] = 'Abrangência da Busca'; +$lang['search_ filter'] = 'Filtro de Busca'; +$lang['show_attributes'] = 'Exibir Atributos'; +$lang['Search'] = 'Buscar'; +// $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'] = 'Requisitar um novo recurso'; +$lang['see_open_requests'] = 'Ver as requisições em aberto'; +$lang['report_bug'] = 'Comunicar um problema/defeito'; +$lang['see_open_bugs'] = 'Ver os problemas/defeitos em aberto'; +$lang['schema'] = 'esquemas'; +$lang['search'] = 'buscar'; +$lang['create'] = 'novo'; +$lang['info'] = 'info'; +$lang['import'] = 'importar'; +$lang['refresh'] = 'atualizar'; +$lang['logout'] = 'desconectar'; +$lang['create_new'] = 'Criar Novo'; +$lang['view_schema_for'] = 'ver esquemas de'; +$lang['refresh_expanded_containers'] = 'atualizar todos os containers abertos em'; +$lang['create_new_entry_on'] = 'criar um novo objeto em'; +$lang['view_server_info'] = 'visualizar as informações fornecidas pelo servidor'; +$lang['import_from_ldif'] = 'importar objetos de um arquivo LDIF'; +$lang['logout_of_this_server'] = 'desconectar deste servidor'; +$lang['logged_in_as'] = 'Conectado como: '; +$lang['read_only'] = 'somente leitura'; +$lang['could_not_determine_root'] = 'Incapaz de determinar a raiz do sua árvore LDAP.'; +$lang['ldap_refuses_to_give_root'] = 'Aparentemente o servidor LDAP foi configurado para ocultar sua raiz.'; +$lang['please_specify_in_config'] = 'Por favor, especifique no arquivo config.php'; +$lang['create_new_entry_in'] = 'Criar um novo objeto em'; +$lang['login_link'] = 'Conectar...'; + +// Entry display +$lang['delete_this_entry'] = 'Apagar este objeto'; +$lang['delete_this_entry_tooltip'] = 'Será solicitado que você confirme sua decisão'; +$lang['copy_this_entry'] = 'Copiar este objeto'; +$lang['copy_this_entry_tooltip'] = 'Copia este objeto para outro contexto, para um novo DN ou para outro servidor'; +$lang['export_to_ldif'] = 'Exportar para LDIF'; +$lang['export_to_ldif_tooltip'] = 'Salva um arquivo LDIF com os dados deste objeto'; +$lang['export_subtree_to_ldif_tooltip'] = 'Salva um arquivo LDIF com os dados deste objeto e todos os seus filhos'; +$lang['export_subtree_to_ldif'] = 'Exportar ramos para LDIF'; +$lang['export_mac'] = 'Arquivo texto do tipo Macintosh'; +$lang['export_win'] = 'Arquivo texto do tipo DOS/Windows'; +$lang['export_unix'] = 'Arquivo texto do tipo Unix'; +$lang['create_a_child_entry'] = 'Criar um objeto-filho'; +$lang['add_a_jpeg_photo'] = 'Adicionar uma imagem JPEG'; +$lang['rename_entry'] = 'Renomear Objeto'; +$lang['rename'] = 'Renomear'; +$lang['add'] = 'Adicionar'; +$lang['view'] = 'Ver'; +$lang['add_new_attribute'] = 'Adicionar Novo Atributo'; +$lang['add_new_attribute_tooltip'] = 'Adiciona um novo atributo/valor para este objeto'; +$lang['internal_attributes'] = 'Atributos Internos'; +$lang['hide_internal_attrs'] = 'Ocultar os atributos internos'; +$lang['show_internal_attrs'] = 'Exibir os atributos internos'; +$lang['internal_attrs_tooltip'] = 'Atributos configurados automaticamente pelo sistema'; +$lang['entry_attributes'] = 'Atributos do Objeto'; +$lang['attr_name_tooltip'] = 'Clique para visualizar a definição do esquema para atributos do tipo \'%s\''; +$lang['click_to_display'] = 'Clique em \'+\' para exibir'; +$lang['hidden'] = 'ocultos'; +$lang['none'] = 'nenhum'; +$lang['save_changes'] = 'Salvar Alterações'; +$lang['add_value'] = 'adicionar novo valor'; +$lang['add_value_tooltip'] = 'Adiciona um novo valor para o atributo \'%s\''; +$lang['refresh_entry'] = 'Atualizar'; +$lang['refresh_this_entry'] = 'Atualiza este objeto'; +$lang['delete_hint'] = "Dica: Para apagar um atributo, deixe o campo correspondente vazio e clique em 'Salvar Alterações'."; +$lang['attr_schema_hint'] = 'Dica: Para visualizar o esquema de um atributo, clique no nome do atributo desejado.'; +$lang['attrs_modified'] = 'Alguns atributos (%s) foram modificados e estão destacados abaixo.'; +$lang['attr_modified'] = 'Um atributo (%s) foi modificado e está destacado abaixo.'; +$lang['viewing_read_only'] = 'Visualizando o objeto em modo somente-leitura.'; +$lang['change_entry_rdn'] = 'Alterar o RDN deste objeto'; +$lang['no_new_attrs_available'] = 'não há mais atributos disponíveis para este objeto'; +$lang['binary_value'] = 'Valor binário'; +$lang['add_new_binary_attr'] = 'Adicionar Novo Atributo Binário'; +$lang['add_new_binary_attr_tooltip'] = 'Adiciona um novo atributo/valor binário de um arquivo para este objeto'; +$lang['alias_for'] = 'Nota: \'%s\' é um nome amigável para \'%s\''; +$lang['download_value'] = 'fazer download'; +$lang['delete_attribute'] = 'apagar atributo'; +$lang['true'] = 'verdadeiro'; +$lang['false'] = 'falso'; +$lang['none_remove_value'] = 'nenhum, remover o valor'; +$lang['really_delete_attribute'] = 'Deseja realmente apagar atributo'; + +// Schema browser +$lang['the_following_objectclasses'] = 'As seguintes classes de objetos são suportadas por este servidor LDAP.'; +$lang['the_following_attributes'] = 'Os seguintes tipos de atributos são suportados por este servidor LDAP.'; +$lang['the_following_matching'] = 'As seguintes regras de consistência/b> são suportadas por este servidor LDAP.'; +$lang['the_following_syntaxes'] = 'As seguintes regras de sintaxe são suportadas por este servidor LDAP.'; +$lang['jump_to_objectclass'] = 'Ir para uma classe de objetos'; +$lang['jump_to_attr'] = 'Ir para um atributo'; +$lang['schema_for_server'] = 'Esquemas do servidor'; +$lang['required_attrs'] = 'Atributos Necessários'; +$lang['optional_attrs'] = 'Atributos Opcionais'; +$lang['OID'] = 'OID'; +$lang['desc'] = 'Descrição'; +$lang['name'] = 'Nome'; +$lang['is_obsolete'] = 'Essa classe de objetos é obsoleta'; +$lang['inherits'] = 'Herda de'; +$lang['jump_to_this_oclass'] = 'Ir para a definição desta classe de objetos'; +$lang['matching_rule_oid'] = 'OID da Regra de Consistência'; +$lang['syntax_oid'] = 'OID da Regra de Sintaxe'; +$lang['not_applicable'] = 'não aplicável'; +$lang['not_specified'] = 'não especificado'; + +// Deleting entries +$lang['entry_deleted_successfully'] = 'Objeto \'%s\' apagado com sucesso.'; +$lang['you_must_specify_a_dn'] = 'Você precisa especificar o DN'; +$lang['could_not_delete_entry'] = 'Impossível apagar o objeto: %s'; + +// Adding objectClass form +$lang['new_required_attrs'] = 'Novo(s) Atributo(s) Necessário(s)'; +$lang['requires_to_add'] = 'Essa ação requer que você adicione'; +$lang['new_attributes'] = 'novo(s) atributos(s)'; +$lang['new_required_attrs_instructions'] = 'Instruções: Para poder acrescentar esta Classe de Objetos a este objeto, você precisa especificar'; +$lang['that_this_oclass_requires'] = 'que esta Classe de Objetos necessita. Você pode fazê-lo no formulário abaixo:'; +$lang['add_oclass_and_attrs'] = 'Acrescentar Classe de Objetos e Atributos'; + +// General +$lang['chooser_link_tooltip'] = 'Clique aqui para abrir uma janela e selecionar o valor do atributo (DN) graficamente'; +$lang['no_updates_in_read_only_mode'] = 'Você não pode realizar alterações enquanto o servidor estiver em modo somente-leitura'; +$lang['bad_server_id'] = 'ID do servidor inválido'; +$lang['not_enough_login_info'] = 'Informação insuficiente para efetuar conexão ao servidor. Por favor verifique a sua configuração.'; +$lang['could_not_connect'] = 'Impossível conectar ao servidor LDAP.'; +$lang['could_not_perform_ldap_mod_add'] = 'Impossível realizar operação ldap_mod_add.'; +$lang['bad_server_id_underline'] = 'ID do servidor inválido: '; +$lang['success'] = ' Sucesso'; +$lang['server_colon_pare'] = 'Servidor: '; +$lang['look_in'] = 'Procurando em: '; +$lang['missing_server_id_in_query_string'] = 'Nenhum ID de servidor especificado na busca!'; +$lang['missing_dn_in_query_string'] = 'Nenhum DN especificado na busca!'; +$lang['back_up_p'] = 'Backup...'; +$lang['no_entries'] = 'nenhum objeto'; +$lang['not_logged_in'] = 'Não conectado'; +$lang['could_not_det_base_dn'] = 'Impossível determinar a base DN'; + +// Add value form +$lang['add_new'] = 'Adicionar novo valor'; +$lang['value_to'] = 'para'; +$lang['distinguished_name'] = 'Nome Distinto'; +$lang['current_list_of'] = 'Lista atual de'; +$lang['values_for_attribute'] = 'valor(es) para o atributo'; +$lang['inappropriate_matching_note'] = 'Nota: Você vai receber um erro de "inappropriate matching" se você não
' . + 'configurar uma regra de IGUALDADE no seu servidor LDAP para este atributo.'; +$lang['enter_value_to_add'] = 'Entre com o valor que você gostaria de adicionar:'; +$lang['new_required_attrs_note'] = 'Nota: talvez seja solicitado que você entre com os atributos necessários para esta classe de objetos'; +$lang['syntax'] = 'Sintaxe'; + +//copy.php +$lang['copy_server_read_only'] = 'Você não pode realizar alterações enquanto o servidor estiver em modo somente-leitura'; +$lang['copy_dest_dn_blank'] = 'Você não especificou o DN de destino.'; +$lang['copy_dest_already_exists'] = 'O objeto de destino (%s) já existe.'; +$lang['copy_dest_container_does_not_exist'] = 'O container de destino (%s) não existe.'; +$lang['copy_source_dest_dn_same'] = 'O DN de origem e o DN de destino são iguais.'; +$lang['copy_copying'] = 'Copiando '; +$lang['copy_recursive_copy_progress'] = 'Progresso da cópia recursiva'; +$lang['copy_building_snapshot'] = 'Construindo a imagem da árvore a ser copiada...'; +$lang['copy_successful_like_to'] = 'Cópia bem-sucedida! Você gostaria de '; +$lang['copy_view_new_entry'] = 'visualizar o novo objeto'; +$lang['copy_failed'] = 'Falha ao copiar o DN: '; + +//edit.php +$lang['missing_template_file'] = 'Alerta, o arquivo-modelo não encontrado: '; +$lang['using_default'] = 'Usando padrão.'; + +//copy_form.php +$lang['copyf_title_copy'] = 'Copiar '; +$lang['copyf_to_new_object'] = 'para um novo objeto'; +$lang['copyf_dest_dn'] = 'DN de Destino'; +$lang['copyf_dest_dn_tooltip'] = 'O DN completo do novo objeto que será criado a partir da cópia da origem'; +$lang['copyf_dest_server'] = 'Servidor de Destino'; +$lang['copyf_note'] = 'Dica: Copiar objetos entre servidores diferentes só funcionará se não houverem violações de esquema.'; +$lang['copyf_recursive_copy'] = 'Copiar recursivamente todos os objetos-filhos deste objeto também'; + +//create.php +$lang['create_required_attribute'] = 'Você especificou um valor em branco para %s, que é um atributo necessário.'; +$lang['create_redirecting'] = 'Redirecionando'; +$lang['create_here'] = 'aqui'; +$lang['create_could_not_add'] = 'Impossível adicionar o objeto ao servidor LDAP.'; + +//create_form.php +$lang['createf_create_object'] = 'Criar um Objeto'; +$lang['createf_choose_temp'] = 'Escolha um modelo'; +$lang['createf_select_temp'] = 'Escolha o modelo correspondente ao objeto que deseja criar'; +$lang['createf_proceed'] = 'Prosseguir'; + +//creation_template.php +$lang['ctemplate_on_server'] = 'No servidor'; +$lang['ctemplate_no_template'] = 'Nenhum Modelo foi especificado.'; +$lang['ctemplate_config_handler'] = 'Seu arquivo de configuração determina que o modelo'; +$lang['ctemplate_handler_does_not_exist'] = "é válido. Porém este modelo não existe no diretório 'templates/creation'."; + +// search.php +$lang['you_have_not_logged_into_server'] = 'Você ainda não se conectou ao servidor LDAP selecionado, portanto você não pode efetuar buscas nele.'; +$lang['click_to_go_to_login_form'] = 'Clique aqui para conectar-se ao servidor'; +$lang['unrecognized_criteria_option'] = 'Critério de busca desconhecido: '; +$lang['if_you_want_to_add_criteria'] = 'Se você quer adicionar o seu próprio critério de busca à lista, certifique-se de que você editou \'search.php\' para contemplar o novo critério. Saindo.'; +$lang['entries_found'] = 'Objetos encontrados: '; +$lang['filter_performed'] = 'Filtro utilizado: '; +$lang['search_duration'] = 'A busca foi realizada pelo phpLDAPadmin em'; +$lang['seconds'] = 'segundos'; + +// search_form_advanced.php +$lang['scope_in_which_to_search'] = 'A abrangência de onde é feita a busca pelos objetos'; +$lang['scope_sub'] = 'Sub (toda a sub-arvore)'; +$lang['scope_one'] = 'One (um nivel abaixo do base DN)'; +$lang['scope_base'] = 'Base (apenas no base DN)'; +$lang['standard_ldap_search_filter'] = 'Filtro de busca LDAP padrão. Exemplo: (&(sn=Smith)(givenname=David))'; +$lang['search_filter'] = 'Filtro de Busca'; +$lang['list_of_attrs_to_display_in_results'] = 'A lista de atributos que devem ser mostrados no resultado (separados por vírgula)'; +$lang['show_attributes'] = 'Exibir Atributos'; + +// search_form_simple.php +$lang['search_for_entries_whose'] = 'Procurar por objetos cujo:'; +$lang['equals'] = 'e igual a'; +$lang['starts with'] = 'comeca com'; +$lang['contains'] = 'contem'; +$lang['ends with'] = 'termina com'; +$lang['sounds like'] = 'e semelhante a'; + +// server_info.php +$lang['could_not_fetch_server_info'] = 'Incapaz de obter informações LDAP à partir do servidor'; +$lang['server_info_for'] = 'Informações do servidor: '; +$lang['server_reports_following'] = 'O servidor forneceu as seguintes informações sobre si mesmo'; +$lang['nothing_to_report'] = 'O servidor não tem nenhuma informação sobre si mesmo para fornecer.'; + +//update.php +$lang['update_array_malformed'] = 'update_array est&aaculte; mal-formado. Isto pode ser um problema/defeito do phpLDAPadmin. Por favor comunique isto.'; +$lang['could_not_perform_ldap_modify'] = 'Impossível realizar operação ldap_modify.'; + +// update_confirm.php +$lang['do_you_want_to_make_these_changes'] = 'Você confirma estas alterações?'; +$lang['attribute'] = 'Atributo'; +$lang['old_value'] = 'Valor Antigo'; +$lang['new_value'] = 'Valor Novo'; +$lang['attr_deleted'] = '[atributo apagado]'; +$lang['commit'] = 'Confirma'; +$lang['cancel'] = 'Cancela'; +$lang['you_made_no_changes'] = 'Você não fez nenhuma alteração.'; +$lang['go_back'] = 'Voltar'; + +// welcome.php +$lang['welcome_note'] = 'Use o menu a esquerda para navegar'; +$lang['credits'] = 'Créditos'; +$lang['changelog'] = 'Últimas Atualizações'; +$lang['documentation'] = 'Documentação'; + +// view_jpeg_photo.php +$lang['unsafe_file_name'] = 'Nome de arquivo inseguro: '; +$lang['no_such_file'] = 'Nome de arquivo não encontrado: '; + +//function.php +$lang['auto_update_not_setup'] = 'Você ativou o recurso auto_uid_numbers para %s na sua configuração, + mas você não definiu auto_uid_number_mechanism. Por favor, corrija este problema.'; +$lang['uidpool_not_set'] = 'Você especificou o recurso auto_uid_number_mechanism como uidpool + na sua configuração para o servidor %s, mas você não definiu + audo_uid_number_uid_pool_dn. Por favor, corrija este problema.'; +$lang['uidpool_not_exist'] = 'Aparentemente, o objeto uidPool que você especificou (%s) + não existe.'; +$lang['specified_uidpool'] = 'Você especificou o recurso auto_uid_number_mechanism como search na sua + configuração para o servidor %s, mas você não definiu + auto_uid_number_search_base. Por favor, corrija este problema.'; +$lang['auto_uid_invalid_value'] = 'Você especificou um valor inválido para o recurso auto_uid_number_mechanism (%s) + na sua configuração. Apenas uidpool e search são válidos. + Por favor, corrija este problema.'; +$lang['error_auth_type_config'] = 'Erro: Seu arquivo de configuração possui um erro. Os únicos valores permitidos para + auth_type na seção $servers são \'config\' e \'form\'. Você usou \'%s\', + o que não é permitido. '; +$lang['php_install_not_supports_tls'] = 'Sua instalação do PHP não suporta TLS'; +$lang['could_not_start_tls'] = 'Impossível inicializar TLS.
Por favor, verifique a configuração do seu servidor LDAP.'; +$lang['auth_type_not_valid'] = 'Seu arquivo de configuração possui um erro. O valor %s para auth_type não é permitido.'; +$lang['ldap_said'] = 'O servidor LDAP respondeu: %s

'; +$lang['ferror_error'] = 'Erro'; +$lang['fbrowse'] = 'Procurar'; +$lang['delete_photo'] = 'Apagar Imagem'; +$lang['install_not_support_blowfish'] = 'Sua instalação do PHP não suporta encriptação blowfish.'; +$lang['install_no_mash'] = 'Sua instalação do PHP não possui a função mhash(). Impossível realizar encriptações SHA.'; +$lang['jpeg_contains_errors'] = 'jpegPhoto possui erros
'; +$lang['ferror_number'] = 'Número do erro: %s (%s)

'; +$lang['ferror_discription'] = 'Descrição: %s

'; +$lang['ferror_number_short'] = 'Número do erro: %s

'; +$lang['ferror_discription_short'] = 'Descrição: (nenhuma descrição disponível)
'; +$lang['ferror_submit_bug'] = 'Isto é um problema/defeito do phpLDAPadmin? Se sim, por favor comunique isto.'; +$lang['ferror_unrecognized_num'] = 'Número do erro desconhecido: '; +$lang['ferror_nonfatil_bug'] = '
+
+ Você encontrou um erro não-fatal do phpLDAPadmin!
Erro:%s (%s)
Arquivo:%s Linha %s, Requisitante %s
Versões:PLA: %s, PHP: %s, SAPI: %s +
Servidor Web:%s
+ Por favor, comunique este problema clicando aqui.

'; + +$lang['ferror_congrats_found_bug'] = 'Parabéns! Você encontrou um problema/defeito no phpLDAPadmin.

+ + + + + + + + + + +
Erro:%s
Nível:%s
Arquivo:%s
Linha:%s
Requisitante:%s
Versão do PLA:%s
Versão do PHP:%s
PHP SAPI:%s
Servidor Web:%s
+
+ Por favor comunique esse problema/defeito clicando abaixo!'; + +//ldif_import_form +$lang['import_ldif_file_title'] = 'Importar Arquivo LDIF'; +$lang['select_ldif_file'] = 'Selecione um arquivo LDIF:'; +$lang['select_ldif_file_proceed'] = 'Prosseguir >>'; + +//ldif_import +$lang['add_action'] = 'Adicionando...'; +$lang['delete_action'] = 'Apagando...'; +$lang['rename_action'] = 'Renomeando...'; +$lang['modify_action'] = 'Modificando...'; + +$lang['failed'] = 'falhou'; +$lang['ldif_parse_error'] = 'Erro Analisando Arquivo LDIF'; +$lang['ldif_could_not_add_object'] = 'Impossível adicionar objeto:'; +$lang['ldif_could_not_rename_object'] = 'Impossível renomear objeto:'; +$lang['ldif_could_not_delete_object'] = 'Impossível apagar objeto:'; +$lang['ldif_could_not_modify_object'] = 'Impossível modificar objeto:'; +$lang['ldif_line_number'] = 'Número da Linha:'; +$lang['ldif_line'] = 'Linha:'; +?> diff --git a/lang/recoded/ru.php b/lang/recoded/ru.php index 7b97d19..53ff1c2 100644 --- a/lang/recoded/ru.php +++ b/lang/recoded/ru.php @@ -1,4 +1,6 @@ + * based on 0.9.3 Version + +*/ + +// Search form +$lang['simple_search_form_str'] = 'Enkel sökning';//'Simple Search Form'; +$lang['advanced_search_form_str'] = 'Expertsökning';//'Advanced Search Form'; +$lang['server'] = 'Server';//'Server'; +$lang['search_for_entries_whose'] = 'Sök efter rader som';//'Search for entries whose'; +$lang['base_dn'] = 'Base DN';//'Base DN'; +$lang['search_scope'] = 'SökomfÃ¥ng';//Search Scope'; +$lang['search_ filter'] = 'Sökfilter';//'Search Filter'; +$lang['show_attributes'] = 'Visa attribut';//'Show Attributtes'; +$lang['Search'] = 'Sök';// 'Search'; +$lang['equals'] = 'lika med';//'equals'; +$lang['starts_with'] = 'Börjar med';//'starts with'; +$lang['contains'] = 'innehÃ¥ller';//'contains'; +$lang['ends_with'] = 'slutar med';//'ends with'; +$lang['sounds_like'] = 'lÃ¥ter som';//'sounds like'; + +// Tree browser +$lang['request_new_feature'] = 'Begär en ny funktion';//'Request a new feature'; +$lang['see_open_requests'] = 'Se öppna förfrÃ¥gningar';//'see open requests'; +$lang['report_bug'] = 'Rapportera ett fel';//'Report a bug'; +$lang['see_open_bugs'] = 'Se öppna felrapporter';//'see open bugs'; +$lang['schema'] = 'schema';//'schema'; +$lang['search'] = 'sökning';//'search'; +$lang['create'] = 'skapa';//'create'; +$lang['info'] = 'information';//'info'; +$lang['import'] = 'importera';//'import'; +$lang['refresh'] = 'uppdatera';//'refresh'; +$lang['logout'] = 'logga ut';//'logout'; +$lang['create_new'] = 'Skapa ny';//'Create New'; +$lang['view_schema_for'] = 'Titta pÃ¥ schema för';//'View schema for'; +$lang['refresh_expanded_containers'] = 'Uppdatera alla öpnna behÃ¥llare för';//'Refresh all expanded containers for'; +$lang['create_new_entry_on'] = 'Skapa en ny post för';//'Create a new entry on'; +$lang['view_server_info'] = 'Titta pÃ¥ information som servern tillhandahÃ¥llit';//'View server-supplied information'; +$lang['import_from_ldif'] = 'Importera rader frÃ¥n LDIF file';//'Import entries from an LDIF file'; +$lang['logout_of_this_server'] = 'Logga ut frÃ¥n den här servern';//'Logout of this server'; +$lang['logged_in_as'] = '/Inloggad som';//'Logged in as: '; +$lang['read_only'] = 'Enbart läsning';//'read only'; +$lang['could_not_determine_root'] = 'Kan inte bestämma roten för ditt LDAP träd';//'Could not determine the root of your LDAP tree.'; +$lang['ldap_refuses_to_give_root'] = 'Det ser ut som om LDAP-servern har konfigurerats att inte avslöja sin rot.';//'It appears that the LDAP server has been configured to not reveal its root.'; +$lang['please_specify_in_config'] = 'Var snäll och specificera i config.php';//'Please specify it in config.php'; +$lang['create_new_entry_in'] = 'Skapa en ny post i';//'Create a new entry in'; +$lang['login_link'] = 'Logga in...';//'Login...'; + +// Entry display +$lang['delete_this_entry'] = 'Ta bort den här posten';//'Delete this entry'; +$lang['delete_this_entry_tooltip'] = 'Du kommer att bli tillfrÃ¥gad för att konfirmera det här beslutet';//'You will be prompted to confirm this decision'; +$lang['copy_this_entry'] = 'Kopiera den här posten';//'Copy this entry'; +$lang['copy_this_entry_tooltip'] = 'Kopiera det här objektet till en annan plats, ett nytt DN, eller en annan server';//'Copy this object to another location, a new DN, or another server'; +$lang['export_to_ldif'] = 'Exportera till LDIF';//'Export to LDIF'; +$lang['export_to_ldif_tooltip'] = 'Spara en LDIF kopia av detta objekt';//'Save an LDIF dump of this object'; +$lang['export_subtree_to_ldif_tooltip'] = 'Spara en LDIF kopia av detta objekt och alla dess underobjekt';//'Save an LDIF dump of this object and all of its children'; +$lang['export_subtree_to_ldif'] = 'Exportera subträdet till LDIF';//'Export subtree to LDIF'; +$lang['export_to_ldif_mac'] = 'Radslut enligt Macintosh-standard';// 'Macintosh style line ends'; +$lang['export_to_ldif_win'] = 'Radslut enligt Windows-standard';//'Windows style line ends'; +$lang['export_to_ldif_unix'] = 'Radslut enligt Unix-standard';//'Unix style line ends'; +$lang['create_a_child_entry'] = 'Skapa en subpost';//'Create a child entry'; +$lang['add_a_jpeg_photo'] = 'Lägg till ett JPEG-foto';//'Add a jpegPhoto'; +$lang['rename_entry'] = 'Döp om posten';//'Rename Entry'; +$lang['rename'] = 'Döp om ';//'Rename'; +$lang['add'] = 'Lägg till';//'Add'; +$lang['view'] = 'Titta';//'View'; +$lang['add_new_attribute'] = 'Lägg till ett nytt attribut';//'Add New Attribute'; +$lang['add_new_attribute_tooltip'] = 'Lägg till ett nytt attribut/värde till denna post';//'Add a new attribute/value to this entry'; +$lang['internal_attributes'] = 'Interna attribut';//'Internal Attributes'; +$lang['hide_internal_attrs'] = 'Göm interna attribut';//'Hide internal attributes'; +$lang['show_internal_attrs'] ='Visa interna attribut';// 'Show internal attributes'; +$lang['internal_attrs_tooltip'] = 'Attribut som sätts automatiskt av systemet';//'Attributes set automatically by the system'; +$lang['entry_attributes'] = 'IngÃ¥ngsattribut';//'Entry Attributes'; +$lang['attr_name_tooltip'] = 'Klicka för att titta pÃ¥ schemadefinitionen för attributtyp \'%s\'';//'Click to view the schema defintion for attribute type \'%s\''; +$lang['click_to_display'] = 'klicka\'+\' för att visa';// 'click \'+\' to display'; +$lang['hidden'] = 'gömda';//'hidden'; +$lang['none'] = 'inget';//'none'; +$lang['save_changes'] = 'Spara ändringar';//'Save Changes'; +$lang['add_value'] = 'lägg till värde';//'add value'; +$lang['add_value_tooltip'] = 'Lägg till ett ytterligare värde till attribut \'%s\''; // 'Add an additional value to attribute \'%s\''; +$lang['refresh_entry'] = 'Uppdatera';//'Refresh'; +$lang['refresh_this_entry'] = 'Uppdatera denna post';//'Refresh this entry'; +$lang['delete_hint'] = 'Tips: För att ta bort ett attribut, ta bort all text i textfältet och klicka \'Spara ändringar\'.'; 'Hint: To delete an attribute, empty the text field and click save.'; +$lang['attr_schema_hint'] = 'Tips: För att titta pÃ¥ ett attributs schema, klicka pÃ¥ attributnamnet';//'Hint: To view the schema for an attribute, click the attribute name.'; +$lang['attrs_modified'] = 'NÃ¥gra attribut var ändrade och är markerade nedan.';//'Some attributes (%s) were modified and are highlighted below.'; +$lang['attr_modified'] = 'Ett attribut var ändrat och är markerat nedan.';//An attribute (%s) was modified and is highlighted below.'; +$lang['viewing_read_only'] = 'Titta pÃ¥ en post med enbart lästiilstÃ¥nd';//'Viewing entry in read-only mode.'; +$lang['change_entry_rdn'] = 'ändra denna posts RDN';//'Change this entry\'s RDN'; +$lang['no_new_attrs_available'] = 'inga nya attribut tillgängliga för denna post';//'no new attributes available for this entry'; +$lang['binary_value'] = 'Binärt värde';//'Binary value'; +$lang['add_new_binary_attr'] = 'Lägg till nytt binärt attribut';//'Add New Binary Attribute'; +$lang['add_new_binary_attr_tooltip'] = 'Lägg till nytt binärt attribut/värde frÃ¥n en fil';//'Add a new binary attribute/value from a file'; +$lang['alias_for'] = 'Observera: \'%s\' är ett alias for \'%s\'';//'Note: \'%s\' is an alias for \'%s\''; +$lang['download_value'] = 'ladda ner värde';//'download value'; +$lang['delete_attribute'] = 'ta bort attribut';//'delete attribute'; +$lang['true'] = 'Sant';//'true'; +$lang['false'] = 'Falskt';//'false'; +$lang['none_remove_value'] = 'inget, ta bort värdet';//'none, remove value'; +$lang['really_delete_attribute'] = 'Ta definitivt bort värdet';//'Really delete attribute'; + +// Schema browser +$lang['the_following_objectclasses'] = 'Följande objektklasser stöds av denna LDAP server.';//'The following objectClasses are supported by this LDAP server.'; +$lang['the_following_attributes'] = 'Följande attributtyper stöds av denna LDAP server.';//'The following attributeTypes are supported by this LDAP server.'; +$lang['the_following_matching'] = 'Följande matchningsregler stöds av denna LDAP server.';//'The following matching rules are supported by this LDAP server.'; +$lang['the_following_syntaxes'] = 'Följande syntax stöds av denna LDAP server.';//'The following syntaxes are supported by this LDAP server.'; +$lang['jump_to_objectclass'] = 'Välj en objectClass';//'Jump to an objectClass'; +$lang['jump_to_attr'] = 'Välj en attributtyp';//'Jump to an attribute type'; +$lang['schema_for_server'] = 'Schema för servern';//'Schema for server'; +$lang['required_attrs'] = 'Nödvändiga attribut';//'Required Attributes'; +$lang['optional_attrs'] = 'Valfria attribut';//'Optional Attributes'; +$lang['OID'] = 'OID';//'OID'; +$lang['desc'] = 'Beskrivning';//'Description'; +$lang['name'] = 'Namn';//'Name'; +$lang['is_obsolete'] = 'Denna objectClass är förÃ¥ldrad';//'This objectClass is obsolete'; +$lang['inherits'] = 'ärver';//'Inherits'; +$lang['jump_to_this_oclass'] = 'GÃ¥ till definitionen av denna objectClass';//'Jump to this objectClass definition'; +$lang['matching_rule_oid'] = 'Matchande regel-OID';//'Matching Rule OID'; +$lang['syntax_oid'] = 'Syntax-OID';//'Syntax OID'; +$lang['not_applicable'] = 'inte tillämplig';//'not applicable'; +$lang['not_specified'] = 'inte specificerad';//'not specified'; + +// Deleting entries +$lang['entry_deleted_successfully'] = 'Borttagning av posten \'%s\' lyckades';//'Entry \'%s\' deleted successfully.'; +$lang['you_must_specify_a_dn'] = 'Du mÃ¥ste specificera ett DN';//'You must specify a DN'; +$lang['could_not_delete_entry'] = 'Det gick inte att ta bort posten';//'Could not delete the entry: %s'; + +// Adding objectClass form +$lang['new_required_attrs'] = 'Nya nödvändiga attribut';//'New Required Attributes'; +$lang['requires_to_add'] = 'Den här Ã¥tgärden kräver att du lägger till';//'This action requires you to add'; +$lang['new_attributes'] = 'nya attribut';//'new attributes'; +$lang['new_required_attrs_instructions'] = 'Instruktioner: För att kunna lägga till objektklassen till denna post, mÃ¥ste du specificera';//'Instructions: In order to add this objectClass to this entry, you must specify'; +$lang['that_this_oclass_requires'] = 'att objektklassen kräver. Det kan göras i detta formulär.';//'that this objectClass requires. You can do so in this form.'; +$lang['add_oclass_and_attrs'] = 'Lägg till objektklass och attribut';//'Add ObjectClass and Attributes'; + +// General +$lang['chooser_link_tooltip'] = 'Klicka för att öppna ett fönster för att välja ett grafiskt.';//'Click to popup a dialog to select an entry (DN) graphically'; +$lang['no_updates_in_read_only_mode'] = 'Du kan inte göra uppdateringar medan servern är i lästillstÃ¥nd';//'You cannot perform updates while server is in read-only mode'; +$lang['bad_server_id'] = 'Felaktigt server-id';//'Bad server id'; +$lang['not_enough_login_info'] = 'Det saknas information för att logga in pÃ¥ servern. Var vänlig och kontrollera din konfiguration.';//'Not enough information to login to server. Please check your configuration.'; +$lang['could_not_connect'] = 'Det gick inte att ansluta till LDAP-servern.';//'Could not connect to LDAP server.'; +$lang['could_not_perform_ldap_mod_add'] = 'Det gick inte att utföra ldap_mod_add operationen.';//''Could not perform ldap_mod_add operation.'; +$lang['bad_server_id_underline'] = 'Felaktigt server_id';//'Bad server_id: '; +$lang['success'] = 'Det lyckades';//'Success'; +$lang['server_colon_pare'] = 'Server';//'Server: '; +$lang['look_in'] = 'Tittar in';//'Looking in: '; +$lang['missing_server_id_in_query_string'] = 'Inget server-ID specificerat i frÃ¥gesträgen!';//'No server ID specified in query string!'; +$lang['missing_dn_in_query_string'] = 'Inget DN specificerat i frÃ¥gesträgen!';//'No DN specified in query string!'; +$lang['back_up_p'] = 'Tillbaka';//'Back Up...'; +$lang['no_entries'] = 'inga poster';//'no entries'; +$lang['not_logged_in'] = 'Inte inloggad';//'Not logged in'; +$lang['could_not_det_base_dn'] = 'Det gick inte att bestämma \'base DN\'';//'Could not determine base DN'; + +// Add value form +$lang['add_new'] = 'Lägg till nytt';//'Add new'; +$lang['value_to'] = 'värde till';//'value to'; +$lang['distinguished_name'] = 'Distinguished Name';//'Distinguished Name'; +$lang['current_list_of'] = 'Aktuell lista av';//'Current list of'; +$lang['values_for_attribute'] = 'attributvärden';//'values for attribute'; +$lang['inappropriate_matching_note'] = 'Observera: Du kommer att fÃ¥ ett \'inappropriate matching\'-fel om du inte har
' . + 'satt upp en EQUALITY-regel på din LDAP-server för detta attribut.';// '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'] = 'Skriv in värdet du vill lägga till';//'Enter the value you would like to add:'; +$lang['new_required_attrs_note'] = 'Observera: Du kan bli tvungen att skriva in de nya attribut som denna objectClass behöver';//'Note: you may be required to enter new attributes that this objectClass requires'; +$lang['syntax'] = 'Syntax';//'Syntax'; + +//copy.php +$lang['copy_server_read_only'] = 'Du kan inte göra uppdateringar medan servern är i lästillstånd';//'You cannot perform updates while server is in read-only mode'; +$lang['copy_dest_dn_blank'] = 'Du lämnade destinations-DN tomt';//'You left the destination DN blank.'; +$lang['copy_dest_already_exists'] = 'Destinationen finns redan';//'The destination entry (%s) already exists.'; +$lang['copy_dest_container_does_not_exist'] = 'Destinations-behållaren (%s) finns inte';// 'The destination container (%s) does not exist.'; +$lang['copy_source_dest_dn_same'] = 'Käll- och destinations-DN är samma.';//'The source and destination DN are the same.'; +$lang['copy_copying'] = 'Kopierar';//'Copying '; +$lang['copy_recursive_copy_progress'] = 'Rekursiv kopiering pågår';//'Recursive copy progress'; +$lang['copy_building_snapshot'] = 'Bygger en ögonblicksbild av det träd som ska kopieras';//'Building snapshot of tree to copy... '; +$lang['copy_successful_like_to'] = 'Kopieringen lyckades! Vill du';//'Copy successful! Would you like to '; +$lang['copy_view_new_entry'] = 'titta på den nya posten';//'view the new entry'; +$lang['copy_failed'] = 'Kopiering av DN misslyckades';//'Failed to copy DN: '; + +//edit.php +$lang['missing_template_file'] = 'Varning! mall-filen saknas,';//'Warning: missing template file, '; +$lang['using_default'] = 'använder default.'; //'Using default.'; + +//copy_form.php +$lang['copyf_title_copy'] = 'Kopiera';//'Copy '; +$lang['copyf_to_new_object'] = 'till ett nytt objekt';//'to a new object'; +$lang['copyf_dest_dn'] = 'Destinations-DN';//'Destination DN'; +$lang['copyf_dest_dn_tooltip'] = 'Den nya postens fullständiga DN skapas när källposten kopieras';//'The full DN of the new entry to be created when copying the source entry'; +$lang['copyf_dest_server'] = 'Destinations-server';//'Destination Server'; +$lang['copyf_note'] = 'Tips: Kopiering mellan olika servrar fungerar bara om det inte finns några brott mot schemorna.';// 'Hint: Copying between different servers only works if there are no schema violations'; +$lang['copyf_recursive_copy'] = 'Kopiera även rekursivt alla underobjekt till detta objekt.';//'Recursively copy all children of this object as well.'; + +//create.php +$lang['create_required_attribute'] = 'Du lämnade ett värde tomt för ett nödvändigt attribut %s.';//'You left the value blank for required attribute %s.'; +$lang['create_redirecting'] = 'Omstyrning';//'Redirecting'; +$lang['create_here'] = 'här';//'here'; +$lang['create_could_not_add'] = 'Det gick inte att lägga till objektet till LDAP-servern.';//'Could not add the object to the LDAP server.'; + +//create_form.php +$lang['createf_create_object'] = 'Skapa objekt';//'Create Object'; +$lang['createf_choose_temp'] = 'Välj en mall';//'Choose a template'; +$lang['createf_select_temp'] = 'Välj en mall för att skapa objekt';//'Select a template for the creation process'; +$lang['createf_proceed'] = 'Fortsätt';//'Proceed'; + +//creation_template.php +$lang['ctemplate_on_server'] = 'På servern';//'On server'; +$lang['ctemplate_no_template'] = 'Ingen mall specificerad i POST variablerna.';//'No template specified in POST variables.'; +$lang['ctemplate_config_handler'] = 'Din konfiguration specificerar en hanterare';//'Your config specifies a handler of'; +$lang['ctemplate_handler_does_not_exist'] = 'för denna mall, men hanteraren finns inte i templates/creation-katalogen';//'for this template. But, this handler does not exist in the templates/creation directory.'; + +// search.php +$lang['you_have_not_logged_into_server'] = 'Du har inte loggat in till den valda servern ännu, så du kan inte göra sökningar på den.';//'You have not logged into the selected server yet, so you cannot perform searches on it.'; +$lang['click_to_go_to_login_form'] = 'Klicka här för att komma till login-formuläret';//'Click here to go to the login form'; +$lang['unrecognized_criteria_option'] = 'Känner inte till detta urvals-kriterium';//'Unrecognized criteria option: '; +$lang['if_you_want_to_add_criteria'] = 'Om du vill lägga till ditt eget kriterium till listan, kom ihåg att ändra search.php för att hantera det. Avslutar.';//'If you want to add your own criteria to the list. Be sure to edit search.php to handle them. Quitting.'; +$lang['entries_found'] = 'Poster funna:';//'Entries found: '; +$lang['filter_performed'] = 'Filtrering utförd: ';//'Filter performed: '; +$lang['search_duration'] = 'Sökning utförd av phpLDAPadmin på';//'Search performed by phpLDAPadmin in'; +$lang['seconds'] = 'sekunder';//'seconds'; + +// search_form_advanced.php +$lang['scope_in_which_to_search'] = 'Sökomfattning';//'The scope in which to search'; +$lang['scope_sub'] = 'Sub (Base DN och hela trädet under)';//'Sub (entire subtree)'; +$lang['scope_one'] = 'One (en nivå under Base DN)';//One (one level beneath base)'; +$lang['scope_base'] = 'Base (endast Base DN)';//'Base (base dn only)'; +$lang['standard_ldap_search_filter'] = 'Standard LDAP sökfilter. Exempel: (&(sn=Smith)(givenname=David))';//'Standard LDAP search filter. Example: (&(sn=Smith)(givenname=David))'; +$lang['search_filter'] = 'Sökfilter';//'Search Filter'; +$lang['list_of_attrs_to_display_in_results'] = 'En lista med attribut att visa i resultatet (komma-separerad)';// 'A list of attributes to display in the results (comma-separated)'; +$lang['show_attributes'] = 'Visa attribut';//'Show Attributes'; + +// search_form_simple.php +$lang['search_for_entries_whose'] = 'Sök efter poster som:';//'Search for entries whose:'; +$lang['equals'] = 'är lika med';//'equals'; +$lang['starts with'] = 'börjar med';//'starts with'; +$lang['contains'] = 'innehåller';//'contains'; +$lang['ends with'] = 'slutar med';//'ends with'; +$lang['sounds like'] = 'låter som';//'sounds like'; + +// server_info.php +$lang['could_not_fetch_server_info'] = 'Det gick inte att hämta LDAP information från servern.';//'Could not retrieve LDAP information from the server'; +$lang['server_info_for'] = 'Serverinformation för';//'Server info for: '; +$lang['server_reports_following'] = 'Servern rapporterar följande information om sig själv';//'Server reports the following information about itself'; +$lang['nothing_to_report'] = 'Servern har inget att rapportera';//'This server has nothing to report.'; + +//update.php +$lang['update_array_malformed'] = 'update_array är felaktig. Detta kan vara ett phpLDAPadmin-fel. Var vänlig och rapportera det.';// 'update_array is malformed. This might be a phpLDAPadmin bug. Please report it.'; +$lang['could_not_perform_ldap_modify'] = 'Det gick inte att utföra operationen ldap_modify.';//'Could not perform ldap_modify operation.'; + +// update_confirm.php +$lang['do_you_want_to_make_these_changes'] = 'Vill du göra dessa ändringar?';//'Do you want to make these changes?'; +$lang['attribute'] = 'Attribut';//'Attribute'; +$lang['old_value'] = 'Föregående värde';//'Old Value'; +$lang['new_value'] = 'Nytt värde';//'New Value'; +$lang['attr_deleted'] = '[attributet borttaget]';//'[attribute deleted]'; +$lang['commit'] = 'Bekräfta';//'Commit'; +$lang['cancel'] = 'ångra';//'Cancel'; +$lang['you_made_no_changes'] = 'Du gjorde inga ändringar';//'You made no changes'; +$lang['go_back'] = 'Gå tillbaka';//'Go back'; + +// welcome.php +$lang['welcome_note'] = 'Navigera med hjälp av menyn till vänster';//'Use the menu to the left to navigate'; +$lang['credits'] = 'Tack till';//'Credits'; +$lang['changelog'] = 'ändringslogg';//'ChangeLog'; +$lang['documentation'] = 'Dokumentation';//'Documentation'; + +// view_jpeg_photo.php +$lang['unsafe_file_name'] = 'Osäkert filnamn';//'Unsafe file name: '; +$lang['no_such_file'] = 'Filen finns inte';//'No such file: '; + +//function.php +$lang['auto_update_not_setup'] = 'Du har slagit på auto_uid_numbers för %s i din konfiguration, + men du har inte specificerat auto_uid_number_mechanism. Var vänlig och rätta till + detta problem.'; + //'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'] = 'Du har specificerat auto_uid_number_mechanism som uidpool + i din konfiguration för server%s, men du specificerade inte + audo_uid_number_uid_pool_dn. Var vänlig och specificera den innan du fortsätter.'; + //'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'] = 'Det ser ut som om den uidPool du specificerade i din konfiguration (%s) + inte existerar.'; + // 'It appears that the uidPool you specified in your configuration (%s) + // does not exist.'; +$lang['specified_uidpool'] = 'Du specificerade auto_uid_number_mechanism som search i din + konfiguration för server%s, men du specificerade inte + auto_uid_number_search_base. Var vänlig och specificera den innan du fortsätter.'; + // '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'] = 'Du specificerade ett ogiltigt värde för auto_uid_number_mechanism (%s) + i din konfiguration. Endast uidpool och search are giltiga. + Var vänlig och rätta till detta problem.'; + //'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'] = 'Fel: Du har ett fel i din konfigurationsfil. De enda tillåtna värdena + för auth_type i $servers-sektionen är \'config\' and \'form\'. Du skrev in \'%s\', + vilket inte är tillåtet. '; + //'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'] = 'Din PHP-installation stödjer inte TLS';//'Your PHP install does not support TLS'; +$lang['could_not_start_tls'] = 'Det gick inte att starta TLS.
Var vänlig och kontrollera din LDAP-serverkonfiguration.';//'Could not start TLS.
Please check your LDAP server configuration.'; +$lang['auth_type_not_valid'] = 'Du har ett fel i din konfigurationsfil. auth_type %s är inte tillåten.';//'You have an error in your config file. auth_type of %s is not valid.'; +$lang['ldap_said'] = 'LDAP sa: %s

';//'LDAP said: %s

'; +$lang['ferror_error'] = 'Fel';'Error'; +$lang['fbrowse'] = 'titta';//'browse'; +$lang['delete_photo'] = 'Ta bort foto';//'Delete Photo'; +$lang['install_not_support_blowfish'] = 'Din PHP-installation stödjer inte blowfish-kryptering.';// 'Your PHP install does not support blowfish encryption.'; +$lang['install_no_mash'] = 'Din PHP-installation har inte funktionen mash(). Det går inte att göra SHA hashes.';//'Your PHP install does not have the mhash() function. Cannot do SHA hashes.'; +$lang['jpeg_contains_errors'] = 'JPEG-fotot innehåller fel
';//'jpegPhoto contains errors
'; +$lang['ferror_number'] = 'Felnummer: %s (%s)

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

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

';//'Description: %s

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

';//'Error number: %s

'; +$lang['ferror_discription_short'] = 'Beskrivning: (ingen beskrivning tillgänglig)
';//'Description: (no description available)
'; +$lang['ferror_submit_bug'] = 'är det här ett phpLDAPadmin-fel? Om så är fallet, var vänlig och rapportera det.'; +//'Is this a phpLDAPadmin bug? If so, please report it.'; +$lang['ferror_unrecognized_num'] = 'Okänt felnummer';//'Unrecognized error number: '; +$lang['ferror_nonfatil_bug'] = '
+
+ Du har hittat en icke-kritisk phpLDAPadmin bug!
Fel:%s (%s)
Fil:%s rad %s, anropande %s
Versioner:PLA: %s, PHP: %s, SAPI: %s +
Web server:%s
+ Var vänlig och rapportera felet genom att klicka här.

'; + + //'
+ //
+ //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'] = 'Gratulerar! Du har hittat en bug i phpLDAPadmin.

+ + + + + + + + + + +
Fel:%s
Nivå:%s
Fil:%s
Rad:%s
Anropare:%s
PLA Version:%s
PHP Version:%s
PHP SAPI:%s
Web server:%s
+
+ Var vänlig och rapportera den här buggen genom att klicak här nedan!'; + +//'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'] = 'Importera LDIF-fil';//'Import LDIF File'; +$lang['select_ldif_file'] = 'Välj en LDIF-fil:';//'Select an LDIF file:'; +$lang['select_ldif_file_proceed'] = 'Fortsätt >>';//'Proceed >>'; + +//ldif_import +$lang['add_action'] = 'Lägger till...';//'Adding...'; +$lang['delete_action'] = 'Tar bort...';//'Deleting...'; +$lang['rename_action'] = 'Döper om...';//''Renaming...'; +$lang['modify_action'] = 'ändrar...';//'Modifying...'; + +$lang['failed'] = 'misslyckades';//'failed'; +$lang['ldif_parse_error'] = 'LDIF parsningsfel';//'LDIF Parse Error'; +$lang['ldif_could_not_add_object'] = 'Det gick inte att lägga till objekt';//'Could not add object:'; +$lang['ldif_could_not_rename_object'] = 'Det gick inte att lägga döpa om objekt';//'Could not rename object:'; +$lang['ldif_could_not_delete_object'] = 'Det gick inte att ta bort objekt';//'Could not delete object:'; +$lang['ldif_could_not_modify_object'] = 'Det gick inte att ändra objekt';//'Could not modify object:'; +$lang['ldif_line_number'] = 'Radnummer';//'Line Number:'; +$lang['ldif_line'] = 'Rad:';//'Line:'; +?> diff --git a/lang/recoded/zz.php b/lang/recoded/zz.php new file mode 100644 index 0000000..922fdc0 --- /dev/null +++ b/lang/recoded/zz.php @@ -0,0 +1,13 @@ + diff --git a/lang/recoded/zzz.php b/lang/recoded/zzz.php new file mode 100644 index 0000000..d7822e9 --- /dev/null +++ b/lang/recoded/zzz.php @@ -0,0 +1,13 @@ + diff --git a/lang/ru.php b/lang/ru.php index 7b97d19..d112664 100644 --- a/lang/ru.php +++ b/lang/ru.php @@ -1,4 +1,6 @@ + * based on 0.9.3 Version + +*/ + +// Search form +$lang['simple_search_form_str'] = 'Enkel sökning';//'Simple Search Form'; +$lang['advanced_search_form_str'] = 'Expertsökning';//'Advanced Search Form'; +$lang['server'] = 'Server';//'Server'; +$lang['search_for_entries_whose'] = 'Sök efter rader som';//'Search for entries whose'; +$lang['base_dn'] = 'Base DN';//'Base DN'; +$lang['search_scope'] = 'Sökomfång';//Search Scope'; +$lang['search_ filter'] = 'Sökfilter';//'Search Filter'; +$lang['show_attributes'] = 'Visa attribut';//'Show Attributtes'; +$lang['Search'] = 'Sök';// 'Search'; +$lang['equals'] = 'lika med';//'equals'; +$lang['starts_with'] = 'Börjar med';//'starts with'; +$lang['contains'] = 'innehåller';//'contains'; +$lang['ends_with'] = 'slutar med';//'ends with'; +$lang['sounds_like'] = 'låter som';//'sounds like'; + +// Tree browser +$lang['request_new_feature'] = 'Begär en ny funktion';//'Request a new feature'; +$lang['see_open_requests'] = 'Se öppna förfrågningar';//'see open requests'; +$lang['report_bug'] = 'Rapportera ett fel';//'Report a bug'; +$lang['see_open_bugs'] = 'Se öppna felrapporter';//'see open bugs'; +$lang['schema'] = 'schema';//'schema'; +$lang['search'] = 'sökning';//'search'; +$lang['create'] = 'skapa';//'create'; +$lang['info'] = 'information';//'info'; +$lang['import'] = 'importera';//'import'; +$lang['refresh'] = 'uppdatera';//'refresh'; +$lang['logout'] = 'logga ut';//'logout'; +$lang['create_new'] = 'Skapa ny';//'Create New'; +$lang['view_schema_for'] = 'Titta på schema för';//'View schema for'; +$lang['refresh_expanded_containers'] = 'Uppdatera alla öpnna behållare för';//'Refresh all expanded containers for'; +$lang['create_new_entry_on'] = 'Skapa en ny post för';//'Create a new entry on'; +$lang['view_server_info'] = 'Titta på information som servern tillhandahållit';//'View server-supplied information'; +$lang['import_from_ldif'] = 'Importera rader från LDIF file';//'Import entries from an LDIF file'; +$lang['logout_of_this_server'] = 'Logga ut från den här servern';//'Logout of this server'; +$lang['logged_in_as'] = '/Inloggad som';//'Logged in as: '; +$lang['read_only'] = 'Enbart läsning';//'read only'; +$lang['could_not_determine_root'] = 'Kan inte bestämma roten för ditt LDAP träd';//'Could not determine the root of your LDAP tree.'; +$lang['ldap_refuses_to_give_root'] = 'Det ser ut som om LDAP-servern har konfigurerats att inte avslöja sin rot.';//'It appears that the LDAP server has been configured to not reveal its root.'; +$lang['please_specify_in_config'] = 'Var snäll och specificera i config.php';//'Please specify it in config.php'; +$lang['create_new_entry_in'] = 'Skapa en ny post i';//'Create a new entry in'; +$lang['login_link'] = 'Logga in...';//'Login...'; + +// Entry display +$lang['delete_this_entry'] = 'Ta bort den här posten';//'Delete this entry'; +$lang['delete_this_entry_tooltip'] = 'Du kommer att bli tillfrågad för att konfirmera det här beslutet';//'You will be prompted to confirm this decision'; +$lang['copy_this_entry'] = 'Kopiera den här posten';//'Copy this entry'; +$lang['copy_this_entry_tooltip'] = 'Kopiera det här objektet till en annan plats, ett nytt DN, eller en annan server';//'Copy this object to another location, a new DN, or another server'; +$lang['export_to_ldif'] = 'Exportera till LDIF';//'Export to LDIF'; +$lang['export_to_ldif_tooltip'] = 'Spara en LDIF kopia av detta objekt';//'Save an LDIF dump of this object'; +$lang['export_subtree_to_ldif_tooltip'] = 'Spara en LDIF kopia av detta objekt och alla dess underobjekt';//'Save an LDIF dump of this object and all of its children'; +$lang['export_subtree_to_ldif'] = 'Exportera subträdet till LDIF';//'Export subtree to LDIF'; +$lang['export_to_ldif_mac'] = 'Radslut enligt Macintosh-standard';// 'Macintosh style line ends'; +$lang['export_to_ldif_win'] = 'Radslut enligt Windows-standard';//'Windows style line ends'; +$lang['export_to_ldif_unix'] = 'Radslut enligt Unix-standard';//'Unix style line ends'; +$lang['create_a_child_entry'] = 'Skapa en subpost';//'Create a child entry'; +$lang['add_a_jpeg_photo'] = 'Lägg till ett JPEG-foto';//'Add a jpegPhoto'; +$lang['rename_entry'] = 'Döp om posten';//'Rename Entry'; +$lang['rename'] = 'Döp om ';//'Rename'; +$lang['add'] = 'Lägg till';//'Add'; +$lang['view'] = 'Titta';//'View'; +$lang['add_new_attribute'] = 'Lägg till ett nytt attribut';//'Add New Attribute'; +$lang['add_new_attribute_tooltip'] = 'Lägg till ett nytt attribut/värde till denna post';//'Add a new attribute/value to this entry'; +$lang['internal_attributes'] = 'Interna attribut';//'Internal Attributes'; +$lang['hide_internal_attrs'] = 'Göm interna attribut';//'Hide internal attributes'; +$lang['show_internal_attrs'] ='Visa interna attribut';// 'Show internal attributes'; +$lang['internal_attrs_tooltip'] = 'Attribut som sätts automatiskt av systemet';//'Attributes set automatically by the system'; +$lang['entry_attributes'] = 'Ingångsattribut';//'Entry Attributes'; +$lang['attr_name_tooltip'] = 'Klicka för att titta på schemadefinitionen för attributtyp \'%s\'';//'Click to view the schema defintion for attribute type \'%s\''; +$lang['click_to_display'] = 'klicka\'+\' för att visa';// 'click \'+\' to display'; +$lang['hidden'] = 'gömda';//'hidden'; +$lang['none'] = 'inget';//'none'; +$lang['save_changes'] = 'Spara ändringar';//'Save Changes'; +$lang['add_value'] = 'lägg till värde';//'add value'; +$lang['add_value_tooltip'] = 'Lägg till ett ytterligare värde till attribut \'%s\''; // 'Add an additional value to attribute \'%s\''; +$lang['refresh_entry'] = 'Uppdatera';//'Refresh'; +$lang['refresh_this_entry'] = 'Uppdatera denna post';//'Refresh this entry'; +$lang['delete_hint'] = 'Tips: För att ta bort ett attribut, ta bort all text i textfältet och klicka \'Spara ändringar\'.'; 'Hint: To delete an attribute, empty the text field and click save.'; +$lang['attr_schema_hint'] = 'Tips: För att titta på ett attributs schema, klicka på attributnamnet';//'Hint: To view the schema for an attribute, click the attribute name.'; +$lang['attrs_modified'] = 'Några attribut var ändrade och är markerade nedan.';//'Some attributes (%s) were modified and are highlighted below.'; +$lang['attr_modified'] = 'Ett attribut var ändrat och är markerat nedan.';//An attribute (%s) was modified and is highlighted below.'; +$lang['viewing_read_only'] = 'Titta på en post med enbart lästiilstånd';//'Viewing entry in read-only mode.'; +$lang['change_entry_rdn'] = 'ändra denna posts RDN';//'Change this entry\'s RDN'; +$lang['no_new_attrs_available'] = 'inga nya attribut tillgängliga för denna post';//'no new attributes available for this entry'; +$lang['binary_value'] = 'Binärt värde';//'Binary value'; +$lang['add_new_binary_attr'] = 'Lägg till nytt binärt attribut';//'Add New Binary Attribute'; +$lang['add_new_binary_attr_tooltip'] = 'Lägg till nytt binärt attribut/värde från en fil';//'Add a new binary attribute/value from a file'; +$lang['alias_for'] = 'Observera: \'%s\' är ett alias for \'%s\'';//'Note: \'%s\' is an alias for \'%s\''; +$lang['download_value'] = 'ladda ner värde';//'download value'; +$lang['delete_attribute'] = 'ta bort attribut';//'delete attribute'; +$lang['true'] = 'Sant';//'true'; +$lang['false'] = 'Falskt';//'false'; +$lang['none_remove_value'] = 'inget, ta bort värdet';//'none, remove value'; +$lang['really_delete_attribute'] = 'Ta definitivt bort värdet';//'Really delete attribute'; + +// Schema browser +$lang['the_following_objectclasses'] = 'Följande objektklasser stöds av denna LDAP server.';//'The following objectClasses are supported by this LDAP server.'; +$lang['the_following_attributes'] = 'Följande attributtyper stöds av denna LDAP server.';//'The following attributeTypes are supported by this LDAP server.'; +$lang['the_following_matching'] = 'Följande matchningsregler stöds av denna LDAP server.';//'The following matching rules are supported by this LDAP server.'; +$lang['the_following_syntaxes'] = 'Följande syntax stöds av denna LDAP server.';//'The following syntaxes are supported by this LDAP server.'; +$lang['jump_to_objectclass'] = 'Välj en objectClass';//'Jump to an objectClass'; +$lang['jump_to_attr'] = 'Välj en attributtyp';//'Jump to an attribute type'; +$lang['schema_for_server'] = 'Schema för servern';//'Schema for server'; +$lang['required_attrs'] = 'Nödvändiga attribut';//'Required Attributes'; +$lang['optional_attrs'] = 'Valfria attribut';//'Optional Attributes'; +$lang['OID'] = 'OID';//'OID'; +$lang['desc'] = 'Beskrivning';//'Description'; +$lang['name'] = 'Namn';//'Name'; +$lang['is_obsolete'] = 'Denna objectClass är föråldrad';//'This objectClass is obsolete'; +$lang['inherits'] = 'ärver';//'Inherits'; +$lang['jump_to_this_oclass'] = 'Gå till definitionen av denna objectClass';//'Jump to this objectClass definition'; +$lang['matching_rule_oid'] = 'Matchande regel-OID';//'Matching Rule OID'; +$lang['syntax_oid'] = 'Syntax-OID';//'Syntax OID'; +$lang['not_applicable'] = 'inte tillämplig';//'not applicable'; +$lang['not_specified'] = 'inte specificerad';//'not specified'; + +// Deleting entries +$lang['entry_deleted_successfully'] = 'Borttagning av posten \'%s\' lyckades';//'Entry \'%s\' deleted successfully.'; +$lang['you_must_specify_a_dn'] = 'Du måste specificera ett DN';//'You must specify a DN'; +$lang['could_not_delete_entry'] = 'Det gick inte att ta bort posten';//'Could not delete the entry: %s'; + +// Adding objectClass form +$lang['new_required_attrs'] = 'Nya nödvändiga attribut';//'New Required Attributes'; +$lang['requires_to_add'] = 'Den här åtgärden kräver att du lägger till';//'This action requires you to add'; +$lang['new_attributes'] = 'nya attribut';//'new attributes'; +$lang['new_required_attrs_instructions'] = 'Instruktioner: För att kunna lägga till objektklassen till denna post, måste du specificera';//'Instructions: In order to add this objectClass to this entry, you must specify'; +$lang['that_this_oclass_requires'] = 'att objektklassen kräver. Det kan göras i detta formulär.';//'that this objectClass requires. You can do so in this form.'; +$lang['add_oclass_and_attrs'] = 'Lägg till objektklass och attribut';//'Add ObjectClass and Attributes'; + +// General +$lang['chooser_link_tooltip'] = 'Klicka för att öppna ett fönster för att välja ett grafiskt.';//'Click to popup a dialog to select an entry (DN) graphically'; +$lang['no_updates_in_read_only_mode'] = 'Du kan inte göra uppdateringar medan servern är i lästillstånd';//'You cannot perform updates while server is in read-only mode'; +$lang['bad_server_id'] = 'Felaktigt server-id';//'Bad server id'; +$lang['not_enough_login_info'] = 'Det saknas information för att logga in på servern. Var vänlig och kontrollera din konfiguration.';//'Not enough information to login to server. Please check your configuration.'; +$lang['could_not_connect'] = 'Det gick inte att ansluta till LDAP-servern.';//'Could not connect to LDAP server.'; +$lang['could_not_perform_ldap_mod_add'] = 'Det gick inte att utföra ldap_mod_add operationen.';//''Could not perform ldap_mod_add operation.'; +$lang['bad_server_id_underline'] = 'Felaktigt server_id';//'Bad server_id: '; +$lang['success'] = 'Det lyckades';//'Success'; +$lang['server_colon_pare'] = 'Server';//'Server: '; +$lang['look_in'] = 'Tittar in';//'Looking in: '; +$lang['missing_server_id_in_query_string'] = 'Inget server-ID specificerat i frågesträgen!';//'No server ID specified in query string!'; +$lang['missing_dn_in_query_string'] = 'Inget DN specificerat i frågesträgen!';//'No DN specified in query string!'; +$lang['back_up_p'] = 'Tillbaka';//'Back Up...'; +$lang['no_entries'] = 'inga poster';//'no entries'; +$lang['not_logged_in'] = 'Inte inloggad';//'Not logged in'; +$lang['could_not_det_base_dn'] = 'Det gick inte att bestämma \'base DN\'';//'Could not determine base DN'; + +// Add value form +$lang['add_new'] = 'Lägg till nytt';//'Add new'; +$lang['value_to'] = 'värde till';//'value to'; +$lang['distinguished_name'] = 'Distinguished Name';//'Distinguished Name'; +$lang['current_list_of'] = 'Aktuell lista av';//'Current list of'; +$lang['values_for_attribute'] = 'attributvärden';//'values for attribute'; +$lang['inappropriate_matching_note'] = 'Observera: Du kommer att få ett \'inappropriate matching\'-fel om du inte har
' . + 'satt upp en EQUALITY-regel på din LDAP-server för detta attribut.';// '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'] = 'Skriv in värdet du vill lägga till';//'Enter the value you would like to add:'; +$lang['new_required_attrs_note'] = 'Observera: Du kan bli tvungen att skriva in de nya attribut som denna objectClass behöver';//'Note: you may be required to enter new attributes that this objectClass requires'; +$lang['syntax'] = 'Syntax';//'Syntax'; + +//copy.php +$lang['copy_server_read_only'] = 'Du kan inte göra uppdateringar medan servern är i lästillstånd';//'You cannot perform updates while server is in read-only mode'; +$lang['copy_dest_dn_blank'] = 'Du lämnade destinations-DN tomt';//'You left the destination DN blank.'; +$lang['copy_dest_already_exists'] = 'Destinationen finns redan';//'The destination entry (%s) already exists.'; +$lang['copy_dest_container_does_not_exist'] = 'Destinations-behållaren (%s) finns inte';// 'The destination container (%s) does not exist.'; +$lang['copy_source_dest_dn_same'] = 'Käll- och destinations-DN är samma.';//'The source and destination DN are the same.'; +$lang['copy_copying'] = 'Kopierar';//'Copying '; +$lang['copy_recursive_copy_progress'] = 'Rekursiv kopiering pågår';//'Recursive copy progress'; +$lang['copy_building_snapshot'] = 'Bygger en ögonblicksbild av det träd som ska kopieras';//'Building snapshot of tree to copy... '; +$lang['copy_successful_like_to'] = 'Kopieringen lyckades! Vill du';//'Copy successful! Would you like to '; +$lang['copy_view_new_entry'] = 'titta på den nya posten';//'view the new entry'; +$lang['copy_failed'] = 'Kopiering av DN misslyckades';//'Failed to copy DN: '; + +//edit.php +$lang['missing_template_file'] = 'Varning! mall-filen saknas,';//'Warning: missing template file, '; +$lang['using_default'] = 'använder default.'; //'Using default.'; + +//copy_form.php +$lang['copyf_title_copy'] = 'Kopiera';//'Copy '; +$lang['copyf_to_new_object'] = 'till ett nytt objekt';//'to a new object'; +$lang['copyf_dest_dn'] = 'Destinations-DN';//'Destination DN'; +$lang['copyf_dest_dn_tooltip'] = 'Den nya postens fullständiga DN skapas när källposten kopieras';//'The full DN of the new entry to be created when copying the source entry'; +$lang['copyf_dest_server'] = 'Destinations-server';//'Destination Server'; +$lang['copyf_note'] = 'Tips: Kopiering mellan olika servrar fungerar bara om det inte finns några brott mot schemorna.';// 'Hint: Copying between different servers only works if there are no schema violations'; +$lang['copyf_recursive_copy'] = 'Kopiera även rekursivt alla underobjekt till detta objekt.';//'Recursively copy all children of this object as well.'; + +//create.php +$lang['create_required_attribute'] = 'Du lämnade ett värde tomt för ett nödvändigt attribut %s.';//'You left the value blank for required attribute %s.'; +$lang['create_redirecting'] = 'Omstyrning';//'Redirecting'; +$lang['create_here'] = 'här';//'here'; +$lang['create_could_not_add'] = 'Det gick inte att lägga till objektet till LDAP-servern.';//'Could not add the object to the LDAP server.'; + +//create_form.php +$lang['createf_create_object'] = 'Skapa objekt';//'Create Object'; +$lang['createf_choose_temp'] = 'Välj en mall';//'Choose a template'; +$lang['createf_select_temp'] = 'Välj en mall för att skapa objekt';//'Select a template for the creation process'; +$lang['createf_proceed'] = 'Fortsätt';//'Proceed'; + +//creation_template.php +$lang['ctemplate_on_server'] = 'På servern';//'On server'; +$lang['ctemplate_no_template'] = 'Ingen mall specificerad i POST variablerna.';//'No template specified in POST variables.'; +$lang['ctemplate_config_handler'] = 'Din konfiguration specificerar en hanterare';//'Your config specifies a handler of'; +$lang['ctemplate_handler_does_not_exist'] = 'för denna mall, men hanteraren finns inte i templates/creation-katalogen';//'for this template. But, this handler does not exist in the templates/creation directory.'; + +// search.php +$lang['you_have_not_logged_into_server'] = 'Du har inte loggat in till den valda servern ännu, så du kan inte göra sökningar på den.';//'You have not logged into the selected server yet, so you cannot perform searches on it.'; +$lang['click_to_go_to_login_form'] = 'Klicka här för att komma till login-formuläret';//'Click here to go to the login form'; +$lang['unrecognized_criteria_option'] = 'Känner inte till detta urvals-kriterium';//'Unrecognized criteria option: '; +$lang['if_you_want_to_add_criteria'] = 'Om du vill lägga till ditt eget kriterium till listan, kom ihåg att ändra search.php för att hantera det. Avslutar.';//'If you want to add your own criteria to the list. Be sure to edit search.php to handle them. Quitting.'; +$lang['entries_found'] = 'Poster funna:';//'Entries found: '; +$lang['filter_performed'] = 'Filtrering utförd: ';//'Filter performed: '; +$lang['search_duration'] = 'Sökning utförd av phpLDAPadmin på';//'Search performed by phpLDAPadmin in'; +$lang['seconds'] = 'sekunder';//'seconds'; + +// search_form_advanced.php +$lang['scope_in_which_to_search'] = 'Sökomfattning';//'The scope in which to search'; +$lang['scope_sub'] = 'Sub (Base DN och hela trädet under)';//'Sub (entire subtree)'; +$lang['scope_one'] = 'One (en nivå under Base DN)';//One (one level beneath base)'; +$lang['scope_base'] = 'Base (endast Base DN)';//'Base (base dn only)'; +$lang['standard_ldap_search_filter'] = 'Standard LDAP sökfilter. Exempel: (&(sn=Smith)(givenname=David))';//'Standard LDAP search filter. Example: (&(sn=Smith)(givenname=David))'; +$lang['search_filter'] = 'Sökfilter';//'Search Filter'; +$lang['list_of_attrs_to_display_in_results'] = 'En lista med attribut att visa i resultatet (komma-separerad)';// 'A list of attributes to display in the results (comma-separated)'; +$lang['show_attributes'] = 'Visa attribut';//'Show Attributes'; + +// search_form_simple.php +$lang['search_for_entries_whose'] = 'Sök efter poster som:';//'Search for entries whose:'; +$lang['equals'] = 'är lika med';//'equals'; +$lang['starts with'] = 'börjar med';//'starts with'; +$lang['contains'] = 'innehåller';//'contains'; +$lang['ends with'] = 'slutar med';//'ends with'; +$lang['sounds like'] = 'låter som';//'sounds like'; + +// server_info.php +$lang['could_not_fetch_server_info'] = 'Det gick inte att hämta LDAP information från servern.';//'Could not retrieve LDAP information from the server'; +$lang['server_info_for'] = 'Serverinformation för';//'Server info for: '; +$lang['server_reports_following'] = 'Servern rapporterar följande information om sig själv';//'Server reports the following information about itself'; +$lang['nothing_to_report'] = 'Servern har inget att rapportera';//'This server has nothing to report.'; + +//update.php +$lang['update_array_malformed'] = 'update_array är felaktig. Detta kan vara ett phpLDAPadmin-fel. Var vänlig och rapportera det.';// 'update_array is malformed. This might be a phpLDAPadmin bug. Please report it.'; +$lang['could_not_perform_ldap_modify'] = 'Det gick inte att utföra operationen ldap_modify.';//'Could not perform ldap_modify operation.'; + +// update_confirm.php +$lang['do_you_want_to_make_these_changes'] = 'Vill du göra dessa ändringar?';//'Do you want to make these changes?'; +$lang['attribute'] = 'Attribut';//'Attribute'; +$lang['old_value'] = 'Föregående värde';//'Old Value'; +$lang['new_value'] = 'Nytt värde';//'New Value'; +$lang['attr_deleted'] = '[attributet borttaget]';//'[attribute deleted]'; +$lang['commit'] = 'Bekräfta';//'Commit'; +$lang['cancel'] = 'ångra';//'Cancel'; +$lang['you_made_no_changes'] = 'Du gjorde inga ändringar';//'You made no changes'; +$lang['go_back'] = 'Gå tillbaka';//'Go back'; + +// welcome.php +$lang['welcome_note'] = 'Navigera med hjälp av menyn till vänster';//'Use the menu to the left to navigate'; +$lang['credits'] = 'Tack till';//'Credits'; +$lang['changelog'] = 'ändringslogg';//'ChangeLog'; +$lang['documentation'] = 'Dokumentation';//'Documentation'; + +// view_jpeg_photo.php +$lang['unsafe_file_name'] = 'Osäkert filnamn';//'Unsafe file name: '; +$lang['no_such_file'] = 'Filen finns inte';//'No such file: '; + +//function.php +$lang['auto_update_not_setup'] = 'Du har slagit på auto_uid_numbers för %s i din konfiguration, + men du har inte specificerat auto_uid_number_mechanism. Var vänlig och rätta till + detta problem.'; + //'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'] = 'Du har specificerat auto_uid_number_mechanism som uidpool + i din konfiguration för server%s, men du specificerade inte + audo_uid_number_uid_pool_dn. Var vänlig och specificera den innan du fortsätter.'; + //'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'] = 'Det ser ut som om den uidPool du specificerade i din konfiguration (%s) + inte existerar.'; + // 'It appears that the uidPool you specified in your configuration (%s) + // does not exist.'; +$lang['specified_uidpool'] = 'Du specificerade auto_uid_number_mechanism som search i din + konfiguration för server%s, men du specificerade inte + auto_uid_number_search_base. Var vänlig och specificera den innan du fortsätter.'; + // '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'] = 'Du specificerade ett ogiltigt värde för auto_uid_number_mechanism (%s) + i din konfiguration. Endast uidpool och search are giltiga. + Var vänlig och rätta till detta problem.'; + //'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'] = 'Fel: Du har ett fel i din konfigurationsfil. De enda tillåtna värdena + för auth_type i $servers-sektionen är \'config\' and \'form\'. Du skrev in \'%s\', + vilket inte är tillåtet. '; + //'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'] = 'Din PHP-installation stödjer inte TLS';//'Your PHP install does not support TLS'; +$lang['could_not_start_tls'] = 'Det gick inte att starta TLS.
Var vänlig och kontrollera din LDAP-serverkonfiguration.';//'Could not start TLS.
Please check your LDAP server configuration.'; +$lang['auth_type_not_valid'] = 'Du har ett fel i din konfigurationsfil. auth_type %s är inte tillåten.';//'You have an error in your config file. auth_type of %s is not valid.'; +$lang['ldap_said'] = 'LDAP sa: %s

';//'LDAP said: %s

'; +$lang['ferror_error'] = 'Fel';'Error'; +$lang['fbrowse'] = 'titta';//'browse'; +$lang['delete_photo'] = 'Ta bort foto';//'Delete Photo'; +$lang['install_not_support_blowfish'] = 'Din PHP-installation stödjer inte blowfish-kryptering.';// 'Your PHP install does not support blowfish encryption.'; +$lang['install_no_mash'] = 'Din PHP-installation har inte funktionen mash(). Det går inte att göra SHA hashes.';//'Your PHP install does not have the mhash() function. Cannot do SHA hashes.'; +$lang['jpeg_contains_errors'] = 'JPEG-fotot innehåller fel
';//'jpegPhoto contains errors
'; +$lang['ferror_number'] = 'Felnummer: %s (%s)

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

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

';//'Description: %s

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

';//'Error number: %s

'; +$lang['ferror_discription_short'] = 'Beskrivning: (ingen beskrivning tillgänglig)
';//'Description: (no description available)
'; +$lang['ferror_submit_bug'] = 'är det här ett phpLDAPadmin-fel? Om så är fallet, var vänlig och rapportera det.'; +//'Is this a phpLDAPadmin bug? If so, please report it.'; +$lang['ferror_unrecognized_num'] = 'Okänt felnummer';//'Unrecognized error number: '; +$lang['ferror_nonfatil_bug'] = '
+
+ Du har hittat en icke-kritisk phpLDAPadmin bug!
Fel:%s (%s)
Fil:%s rad %s, anropande %s
Versioner:PLA: %s, PHP: %s, SAPI: %s +
Web server:%s
+ Var vänlig och rapportera felet genom att klicka här.

'; + + //'
+ //
+ //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'] = 'Gratulerar! Du har hittat en bug i phpLDAPadmin.

+ + + + + + + + + + +
Fel:%s
Nivå:%s
Fil:%s
Rad:%s
Anropare:%s
PLA Version:%s
PHP Version:%s
PHP SAPI:%s
Web server:%s
+
+ Var vänlig och rapportera den här buggen genom att klicak här nedan!'; + +//'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'] = 'Importera LDIF-fil';//'Import LDIF File'; +$lang['select_ldif_file'] = 'Välj en LDIF-fil:';//'Select an LDIF file:'; +$lang['select_ldif_file_proceed'] = 'Fortsätt >>';//'Proceed >>'; + +//ldif_import +$lang['add_action'] = 'Lägger till...';//'Adding...'; +$lang['delete_action'] = 'Tar bort...';//'Deleting...'; +$lang['rename_action'] = 'Döper om...';//''Renaming...'; +$lang['modify_action'] = 'ändrar...';//'Modifying...'; + +$lang['failed'] = 'misslyckades';//'failed'; +$lang['ldif_parse_error'] = 'LDIF parsningsfel';//'LDIF Parse Error'; +$lang['ldif_could_not_add_object'] = 'Det gick inte att lägga till objekt';//'Could not add object:'; +$lang['ldif_could_not_rename_object'] = 'Det gick inte att lägga döpa om objekt';//'Could not rename object:'; +$lang['ldif_could_not_delete_object'] = 'Det gick inte att ta bort objekt';//'Could not delete object:'; +$lang['ldif_could_not_modify_object'] = 'Det gick inte att ändra objekt';//'Could not modify object:'; +$lang['ldif_line_number'] = 'Radnummer';//'Line Number:'; +$lang['ldif_line'] = 'Rad:';//'Line:'; +?> diff --git a/lang/zz.php b/lang/zz.php new file mode 100644 index 0000000..e847169 --- /dev/null +++ b/lang/zz.php @@ -0,0 +1,13 @@ + diff --git a/lang/zzz.php b/lang/zzz.php new file mode 100644 index 0000000..522dfef --- /dev/null +++ b/lang/zzz.php @@ -0,0 +1,13 @@ + diff --git a/ldap_error_codes.txt b/ldap_error_codes.txt index 45e7341..56fc941 100644 --- a/ldap_error_codes.txt +++ b/ldap_error_codes.txt @@ -74,7 +74,7 @@ 0x58 LDAP_USER_CANCELLED "The user cancelled the LDAP operation." 0x59 LDAP_PARAM_ERROR "An ldap routine was called with a bad parameter." -0x5a LDAP_NO_MEMORY "An memory allocation (e.g., malloc(3) +0x5a LDAP_NO_MEMORY "A memory allocation (e.g., malloc(3) or other dynamic memory allocator) call failed in an ldap library rou- tine." diff --git a/ldif_export.php b/ldif_export.php deleted file mode 100644 index cd9ff4f..0000000 --- a/ldif_export.php +++ /dev/null @@ -1,136 +0,0 @@ -"; -//print_r( $objects ); -//exit; - -$rdn = get_rdn( $dn ); -$friendly_rdn = get_rdn( $dn, 1 ); - -switch( $format ) { - case 'win': $br = "\r\n"; break; - case 'mac': $br = "\r"; break; - case 'unix': - default: $br = "\n"; break; -} - -if( ! $objects ) - pla_error( "Search on dn (" . htmlspecialchars($dn) . ") came back empty" ); - -// define the max length of a ldif line to 76 -// as it is suggested (implicitely) for (some) binary -// attributes in rfc 2849 (see note 10) - -define("MAX_LDIF_LINE_LENGTH",76); - -header( "Content-type: application/download" ); -header( "Content-Disposition: filename=$friendly_rdn.ldif" ); -header( "Expires: Mon, 26 Jul 1997 05:00:00 GMT" ); -header( "Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT" ); -header( "Cache-Control: post-check=0, pre-check=0", false ); - -echo "version: 1$br$br"; -echo "# LDIF Export for: " . utf8_decode( $dn ) . "$br"; -echo "# Generated by phpLDAPadmin on " . date("F j, Y g:i a") . "$br"; -echo "# Server: " . utf8_decode( $server_name ) . " ($server_host)$br"; -echo "# Search Scope: $scope$br"; -echo "# Total entries: " . count( $objects ) . "$br"; -echo $br; - -$counter = 0; -foreach( $objects as $dn => $attrs ) -{ - $counter++; - unset( $attrs['dn'] ); - unset( $attrs['count'] ); - - - // display "# Entry 3: cn=test,dc=example,dc=com..." - $title_string = "# Entry $counter: " . utf8_decode( $dn ); - if( strlen( $title_string ) > MAX_LDIF_LINE_LENGTH-3 ) - $title_string = substr( $title_string, 0, MAX_LDIF_LINE_LENGTH-3 ) . "..."; - echo "$title_string$br"; - - // display the DN - if( is_safe_ascii( $dn ) ) - multi_lines_display("dn: $dn"); - else - multi_lines_display("dn:: " . base64_encode( $dn )); - - // display all the attrs/values - foreach( $attrs as $attr => $val ) { - if( is_array( $val ) ) { - foreach( $val as $v ) { - if( is_safe_ascii( $v ) ) { - multi_lines_display("$attr: $v"); - } else { - multi_lines_display("$attr:: " . base64_encode( $v )); - } - } - } else { - $v = $val; - if( is_safe_ascii( $v ) ) { - multi_lines_display("$attr: $v"); - } else { - multi_lines_display("$attr:: " . base64_encode( $v )); - } - } - } - echo $br; -} - -function is_safe_ascii( $str ) -{ - for( $i=0; $i 127 ) - return false; - return true; -} - - -function multi_lines_display($str){ - global $br; - - $length_string = strlen($str); - $max_length = MAX_LDIF_LINE_LENGTH; - - while ($length_string > $max_length){ - echo substr($str,0,$max_length).$br." "; - $str= substr($str,$max_length,$length_string); - $length_string = strlen($str); - - // need to do minus one to align on the right - // the first line with the possible following lines - // as these will have an extra space - $max_length = MAX_LDIF_LINE_LENGTH-1; - } - echo $str."".$br; -} - - -?> diff --git a/ldif_functions.php b/ldif_functions.php index cbde523..2ad6595 100644 --- a/ldif_functions.php +++ b/ldif_functions.php @@ -1,25 +1,24 @@ dn=$dn; $this->changeType=$changeType; $this->attributes=$atts; } + /** + * Return the dn of the entry + * + * @return String the dn of the entry + */ function getDn(){ return $this->dn; } @@ -47,10 +50,8 @@ class LdifEntry{ /** * Setter method for the distinguished name * - * @return String the distinguished name of the entry + * @param String $dn the distinguished name of the entry */ - - function setDn($dn){ $this->dn = $dn; } @@ -58,34 +59,30 @@ class LdifEntry{ /** * Getter method for the change type * - * @param String $changeType the changetype - * + * @return String the change type of the entry */ - function getChangeType(){ return $this->changeType; } /** - * Setter method for the distinguished nae + * Setter method for the change type of the entry * - * @return String the distinguished name of the entry + * @param String $changeType the change type of the entry */ - function setChangeType($changeType){ - $this->changeType = $changeType; + $this->changeType = $changeType; } - + /** * Add the attributes to the entry * + * @param String[][] $atts the attributes of the entry */ - function setAttributes($atts){ $this->attributes = $atts; } - /** * Get the attributes of the entry * @@ -98,17 +95,14 @@ class LdifEntry{ } /** - * this exception is similar to the one in LdifReader + * This exception is similar to the one in LdifReader * Should be remove latter * see comment for the class Ldif_LdapEntryReader - * - * - * */ class LdifEntryReaderException{ - + var $lineNumber; var $currentLine; var $message; @@ -126,65 +120,58 @@ class LdifEntryReaderException{ $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; + + // the lines of the entry fetch from the file var $lines; + + // the dn of the entry var $dn=""; - var $_error = 0; - var $_currentLineNumber=1; + + // error flag + var $_error; + + // the current line number of the entry; + var $_currentLineNumber; + /** * Constructor of the LdifEntryReader * * @param String[] $lines the line of the entry */ - - - function LdifEntryReader(&$lines){ + 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); + $this->_currentLineNumber = 1; + $this->_error = 0; } /** * Read the change type action associated with the entry - * Default action is add - * @return String the change type action of the entry * + * @return String the change type action of the entry */ - - function _readChangeType(){ $changeType ="add"; $arr = array(); + + // no lines after the dn one 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)){ + // get the change type of the entry + elseif(ereg("changetype:[ ]*(delete|add|modrdn|moddn|modify)",$this->lines[0],$arr)){ $changeType = $arr[1]; array_shift($this->lines); $this->_currentLineNumber++; @@ -195,34 +182,28 @@ class LdifEntryReader{ /** * Check if the distinguished name is base 64 encoded * - * @return bool true if the dn is base 64 encoded + * @return boolean true if the dn is base 64 encoded, false otherwise */ - 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)){ @@ -230,29 +211,48 @@ class LdifEntryReader{ }else{ $currentDnValue = substr($currentDnLine,3,strlen($currentDnLine)-1); } - // echo $this->_currentLineNumber; + // switch to the next line array_shift($this->lines); $this->_currentLineNumber++; return trim($currentDnValue); } + /** + * Check if the dn line is valid + * + * @return boolean true if the dn is valid, false otherwise. + */ + function isValidDn(){ + return ereg("^dn:",$this->lines[0])?1:0; + } + /** * Return the entry read from the ldif lines * - * + * @return LdifEntry the entry */ - - function getEntry(){ + global $lang; - $changeType = $this->entry->getChangeType(); + // the dn is not valid, throw the exception and return the entry with the non valid dn + if (! $this->isValidDn() ){ + $dn = $this->lines[0]; + $changeType = $this->_readChangeType(); + //For the moment, overwrite the exception + $this->setLdifEntryReaderException(new LdifEntryReaderException($this->_currentLineNumber,$this->lines[0],$lang['valid_dn_line_required'],new LdifEntry($this->dn))); + return new LdifEntry( $dn , $changeType ); + } + + $dn=$this->_getDnValue(); + $changeType = $this->_readChangeType(); + $this->entry = new LdifEntry($dn,$changeType); + if($changeType=="add"){ $this->_getAddAttributes(); } elseif($changeType=="delete"){ //do nothing } - // $atts = $this->entry->getAttributes(); elseif($changeType=="modrdn"||$changeType=="moddn"){ $this->_getModrdnAttributes(); } @@ -260,19 +260,15 @@ class LdifEntryReader{ $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; - } /** @@ -287,7 +283,7 @@ class LdifEntryReader{ $this->_error=1; $this->_ldifEntryReaderException= $ldifEntryReaderException; } - + /** * Return the exception handler of the entry Reader @@ -302,12 +298,7 @@ class LdifEntryReader{ /** * 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)==":"){ @@ -343,6 +334,9 @@ class LdifEntryReader{ } + /** + * Build the attributes array when the change type is add. + */ function _getAddAttributes(){ if(count($this->lines)==0){ @@ -370,18 +364,18 @@ class LdifEntryReader{ // $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 } - } - } - + + /** + * Build the attributes array for the entry when the change type is modify + */ function _getModifyAttributes(){ if(count($this->lines)==0){ $this->lines[0]=""; @@ -400,72 +394,66 @@ class LdifEntryReader{ 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"){ + + 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); - + $this->entry->attributes[$numberModification][$action_attribute_value] = array(); + // 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); + while(trim($currentLine)!="-" && $this->_error!=1 && count($this->lines)!=0 ){ - - // 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)); - } + // if there is a valid line + if(ereg(":",$currentLine)){ + //get the position of the character ":" + $pos = strpos($currentLine,":"); + //get the name of the attribute to modify + $attribute_name = substr($currentLine,0, $pos); + + //check that it correspond to the one specified before + if ($attribute_name == $action_attribute_value){ + + // 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[$numberModification][$attribute_name][]=$attribute_value; + array_shift($this->lines); + $this->_currentLineNumber++; + + if(count($this->lines)!=0) + $currentLine = &$this->lines[0]; } else{ - // flag set to indicate that we need to build an new attribute array and leave the inner while loop - $new_entry_mod = 1; + $this->setLdifEntryReaderException(new LdifEntryReaderException($this->_currentLineNumber,$this->lines[0],"The attribute to modify doesn't match the one specified by the ".$action_attribute." attribute.",$this->entry)); } } 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){ - + }// end inner while + + // we get a "-" charachter, we remove it from the array + if ($currentLine == "-"){ array_shift($this->lines); + $this->_currentLineNumber++; } $numberModification++; } - else{ - $this->setLdifEntryReaderException(new LdifEntryReaderException($this->_currentLineNumber,$this->lines[0],"Attribute is not valid",$this->entry)); - } - }// end while - } - + } + } + /** + * Build the attributes for the entry when the change type is modrdn + */ + function _getModrdnAttributes(){ $attrs = array(); @@ -507,7 +495,6 @@ $arr=array(); 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" @@ -518,8 +505,6 @@ $arr=array(); $this->setLdifEntryReaderException(new LdifEntryReaderException($this->_currentLineNumber,$this->lines[0],"Container is null",$this->entry)); } } - - } else{ $this->setLdifEntryReaderException(new LdifEntryReaderException($this->_currentLineNumber,$this->lines[0],"a valid deleteoldrdn attribute should be specified",$this->entry)); @@ -535,10 +520,8 @@ $arr=array(); /** * Exception which can be raised during processing the ldif file - * */ - class LdifReaderException{ var $lineNumber; @@ -553,8 +536,6 @@ class LdifReaderException{ * @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; @@ -562,6 +543,9 @@ class LdifReaderException{ } } +/** + * Helper base class to read file. + */ class FileReader{ @@ -590,13 +574,11 @@ class FileReader{ */ function eof(){ - return feof($this->_fp); + return @feof($this->_fp); } /** * Helper method to switch to the next line - * - * @static */ function _nextLine(){ @@ -622,19 +604,17 @@ class FileReader{ function _isBlankLine(){ return(trim($this->_currentLine)=="")?1:0; } - + + /** + * Close the handler + */ function close(){ return @fclose($this->_fp); - } - - } /** * Main parser of the ldif file - * - * @package Ldap */ class LdifReader extends FileReader{ @@ -658,6 +638,10 @@ class LdifReader extends FileReader{ var $_warningVersion; var $_dnLineNumber; + + // continuous mode operation flag + var $continuous_mode; + /** * Private constructor of the LDIFReader class. * Marked as private as we need to instantiate the class @@ -675,121 +659,106 @@ class LdifReader extends FileReader{ //need to change this one $this->_currentEntry = new LdifEntry(); } - + /** * Constructor of the class * * @param String $path2File path of the ldif file to read + * @param boolean $continuous_mode 1 if continuous mode operation, 0 otherwise */ - function LdifReader($path2File){ - parent::FileReader($path2File); - $this->_LdifReader(); + function LdifReader( $path2File , $continuous_mode = 0 ){ + parent::FileReader( $path2File ); + $this->continuous_mode = $continuous_mode; + $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); + + // reset the error state + $this->_error = 0; - if($this->_error!=1){ + if( $this->_hasMoreEntries() && !$this->eof() ){ - //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 ){ + //fetch the next line + $this->_nextLine(); - //the first line is the dn one - $this->_currentLines[0]= trim($this->_currentLine); + // if the next line begin with a space,we append it to the current row + // else we push it into the array (unwrap) - $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); - } - - + 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; - } - + }//end while + //return the ldif entry array + return $this->_currentLines; + } + else{ + return false; } - } - /** * Check if the ldif version is present in the ldif * @@ -815,49 +784,38 @@ class LdifReader extends FileReader{ } else{ $this->_warningVersion=1; - $this->_warningMessage = "No version found - assuming 1"; + global $lang; + $this->_warningMessage = $lang['warning_no_ldif_version_found']; $ldifLineFound=1; } - }// end while loop return $this->_warningVersion; } - + /** - * Private method to check if we have a valid dn line + * Private method to check if there is more entries in the file * - * - * return bool true if a valid dn line is found false otherwise. + * @return boolean true if an entry was 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; + function _hasMoreEntries(){ + $entry_found = 0; + while( !$this->eof() && !$entry_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(); + } + else{ + $this->_currentDnLine = $this->_currentLine; + $this->dnLineNumber = $this->_currentLineNumber; + $entry_found=1; + } + } + return $entry_found; } - - - + /** * Associate the ldif reader with a exception which occurs during * proceesing the file. @@ -865,11 +823,10 @@ class LdifReader extends FileReader{ * * @param Ldap_LdifReaderException $ldifReaderException */ - - function setLdapLdifReaderException($ldifReaderException){ $this->_ldifReaderException= $ldifReaderException; - $this->done(); + if( !$this->continuous_mode ) + $this->done(); $this->_error=1; } @@ -878,7 +835,6 @@ class LdifReader extends FileReader{ * * @return Ldap_ldifReaderException */ - function getLdapLdifReaderException(){ return $this->_ldifReaderException; } @@ -889,8 +845,6 @@ class LdifReader extends FileReader{ * * @return true if an error was encountered, false otherwise */ - - function _ldifHasError(){ return $this->_error; } @@ -915,17 +869,15 @@ class LdifReader extends FileReader{ } /** - * Return an entry from the ldif file - * wrapper upon the NextLines method - * + * Return a ldif entry object + * + * @return LdifEntry the entry object buid from the lines of the ldif file */ function readEntry(){ - if($lines = $this->nextLines()){ $ldifEntryReader = new LdifEntryReader($lines); - //fetch entry $entry = $ldifEntryReader->getEntry(); $this->_currentEntry = $entry; @@ -934,28 +886,26 @@ class LdifReader extends FileReader{ $exception = $ldifEntryReader->getLdifEntryReaderException(); $faultyLineNumber = $this->dnLineNumber + $exception->lineNumber - 1; $this->setLdapLdifReaderException(new LdifReaderException($faultyLineNumber,$exception->currentLine,$exception->message)); - return false; - } - else{ - return $entry; + + if ( ! $this->continuous_mode ) + return 0; } + return $entry; } + else + return false; } function getWarningMessage(){ return $this->_warningMessage; - } } /** * Helper class to write entries into the ldap server - * - * */ - class LdapWriter{ var $ldapConnexion; @@ -963,18 +913,29 @@ class LdapWriter{ /** * Constructor - * - * */ function LdapWriter(&$conn){ $this->ldapConnexion = &$conn; } + /** + * Add a new entry to the ldap server + * + * @param LdifEntry $entry the entry to add + * @return true in case of success, false otherwise + */ function ldapAdd($entry){ return @ldap_add($this->ldapConnexion,$entry->dn,$entry->attributes); } + + /** + * Modify an entry + * + * @param LdifEntry $entry the entry to add + * @return true in case of success, false otherwise + */ function ldapModify($entry){ $changeType = $entry->getChangeType(); @@ -1016,7 +977,12 @@ class LdapWriter{ } return $this->_writeError; } - + + /** + * Close the connection to the ldap server + * + * @return boolean true in case of success, false otherwise + */ function ldapClose(){ return @ldap_close($this->ldapConnexion); } diff --git a/ldif_import.php b/ldif_import.php index 472ba5a..3ea13be 100644 --- a/ldif_import.php +++ b/ldif_import.php @@ -1,4 +1,6 @@ - 0 or pla_error( "Uploaded file is empty." ); -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." ); +is_array( $_FILES['ldif_file'] ) or pla_error( $lang['missing_uploaded_file'] ); +file_exists( $file ) or pla_error( $lang['no_ldif_file_specified'] ); +$file_len > 0 or pla_error( $lang['ldif_file_empty'] ); +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'] ); include 'header.php'; ?> -

Import LDIF File

+

- Server: - File: - ( bytes) + : + ": + ()


@@ -61,10 +64,10 @@ $actionErrorMsg['moddn']= $lang['ldif_could_not_rename_object']; $actionErrorMsg['modify']= $lang['ldif_could_not_modify_object']; // get the connection -$ds = pla_ldap_connect( $server_id ) or pla_error( "Could not connect to LDAP server" ); +$ds = pla_ldap_connect( $server_id ) or pla_error( $lang['could_not_connect'] ); //instantiate the reader -$ldifReader = new LdifReader($file); +$ldifReader = new LdifReader($file,$continuous_mode); //instantiate the writer $ldapWriter = new LdapWriter($ds); @@ -73,28 +76,54 @@ $ldapWriter = new LdapWriter($ds); if(!$ldifReader->hasVersionNumber()){ display_warning($ldifReader->getWarningMessage()); } +$i=0; +// if .. else not mandatory but should be easier to maintain +if( $continuous_mode ){ + while( $ldifReader->readEntry() ){ + $i++; + // get the entry. + $currentEntry = $ldifReader->getCurrentEntry(); + $changeType = $currentEntry->getChangeType(); + echo "".$actionString[$changeType]." ".$currentEntry->dn; - + if($ldifReader->hasRaisedException()){ + echo " ".$lang['failed']."
"; + $exception = $ldifReader->getLdapLdifReaderException(); + echo "".$lang['ldif_line_number'].": ".$exception->lineNumber."
"; +echo "".$lang['ldif_line'].": ".$exception->currentLine."
"; +echo "".$lang['desc'].": ".$exception->message."
"; +} + else{ + if($ldapWriter->ldapModify($currentEntry)) + echo " ".$lang['success']."
"; + else{ + echo " ".$lang['failed']."
"; + echo "Error Code: ".ldap_errno($ds)."
"; + echo "".$lang['desc'].": ".ldap_error($ds)."
"; + } + } + if( 0 == $i % 5 ) + flush(); + }// end while +} +else{ //while we have a valid entry, while($entry = $ldifReader->readEntry()){ + $i++; $changeType = $entry->getChangeType(); echo "".$actionString[$changeType]." ".$entry->dn; if($ldapWriter->ldapModify($entry)){ echo " ".$lang['success']."
"; + if( 0 == $i % 5 ) flush(); } else{ echo " ".$lang['failed']."

"; reload_left_frame(); - pla_error( $actionErrorMsg[$changeType]. " " . htmlspecialchars( utf8_decode( $entry->dn ) ), ldap_error( $ds ), ldap_errno( $ds ) ); + pla_error( $actionErrorMsg[$changeType]. " " . htmlspecialchars( $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()){ @@ -110,6 +139,12 @@ echo "
"; echo "
"; display_pla_parse_error($exception,$currentEntry); } +} +// close the file +$ldifReader->done(); + +//close the ldap connection +$ldapWriter->ldapClose(); reload_left_frame(); diff --git a/ldif_import_form.php b/ldif_import_form.php index c6e8ae4..b3eb81e 100644 --- a/ldif_import_form.php +++ b/ldif_import_form.php @@ -1,4 +1,6 @@ - @@ -26,13 +28,18 @@ include 'header.php'; ?>

+file_uploads has the value On in your php_ini file."); ?>

+ -
+ +
+

diff --git a/login.php b/login.php index 00caf2e..c6b1106 100644 --- a/login.php +++ b/login.php @@ -1,8 +1,9 @@ - - - - - - - - - - - - - - - - - Redirecting... Click here if nothing happens.
- - - -
-
-
-
- Successfully logged in to server
- - (anonymous bind) - -
-
+
+
+
+
+
+ + () +
+
+
" . htmlspecialchars( $errstr ) ); +} +?> + diff --git a/login_form.php b/login_form.php index 3c82fa6..a614729 100644 --- a/login_form.php +++ b/login_form.php @@ -1,9 +1,11 @@ - @@ -39,14 +46,19 @@ include 'header.php'; ?>
-

Authenticate to server

+


- +
-Warning: This web connection is unencrypted.
+ + + + +
+
@@ -62,18 +74,23 @@ include 'header.php'; ?>
Login DN';} ?>
Password
diff --git a/logout.php b/logout.php index c04a007..5364fab 100644 --- a/logout.php +++ b/logout.php @@ -1,8 +1,10 @@ - - - - - - -


- Logged out successfully from
+
diff --git a/mass_delete.php b/mass_delete.php index f342769..8ed9978 100644 --- a/mass_delete.php +++ b/mass_delete.php @@ -1,4 +1,6 @@ \n"; -echo "

Mass Deleting

\n"; +echo "

" . $lang['mass_deleting'] . "

\n"; if( $confirmed == true ) { - echo "

Deletion progress on server '$server_name'

\n"; + echo "

" . sprintf( $lang['mass_delete_progress'], $server_name ) . "

\n"; echo "
"; echo "\n"; @@ -54,27 +55,27 @@ if( $confirmed == true ) { $failed_dns = array(); if( ! is_array( $mass_delete ) ) - pla_error( "Malformed mass_delete array" ); + pla_error( $lang['malformed_mass_delete_array'] ); if( count( $mass_delete ) == 0 ) { echo "
"; - echo "
You did not select any entries to delete.
"; + echo "
" . $lang['no_entries_to_delete'] . "
"; die(); } foreach( $mass_delete as $dn => $junk ) { - echo "Deleting " . htmlspecialchars($dn) . "... "; + echo sprintf( $lang['deleting_dn'], htmlspecialchars($dn) ); flush(); if( true === preEntryDelete( $server_id, $dn ) ) { $success = @ldap_delete( $ds, $dn ); if( $success ) { postEntryDelete( $server_id, $dn ); - echo "success.
\n"; + echo " " . $lang['success'] . ".
\n"; $successfully_delete_dns[] = $dn; } else { - echo "failed.\n"; + echo " " . $lang['failed'] . ".\n"; echo "(" . ldap_error( $ds ) . ")
\n"; $failed_dns[] = $dn; } @@ -90,15 +91,15 @@ if( $confirmed == true ) { $total_count = count( $mass_delete ); if( $failed_count > 0 ) { echo "\n"; - echo "$failed_count of $total_count entries failed to be deleted.\n"; + echo sprintf( $lang['total_entries_failed'], $failed_count, $total_count ) . "\n"; } else { echo "\n"; - echo "All entries deleted successfully!\n"; + echo $lang['all_entries_successful'] . "\n"; } // kill the deleted DNs from the tree browser session variable and // refresh the tree viewer frame (left_frame) - if( session_is_registered( 'tree' ) ) + if( array_key_exists( 'tree', $_SESSION ) ) { $tree = $_SESSION['tree']; foreach( $successfully_delete_dns as $dn ) { @@ -124,7 +125,7 @@ if( $confirmed == true ) { } else { $n = count( $mass_delete ); - echo "

Confirm mass delete of $n entries on server '$server_name'

\n"; + echo "

" . sprintf( $lang['confirm_mass_delete'], $n, $server_name ) . "

\n"; ?>
@@ -144,7 +145,7 @@ if( $confirmed == true ) {
-
+ diff --git a/new_attr.php b/new_attr.php deleted file mode 100644 index aefa511..0000000 --- a/new_attr.php +++ /dev/null @@ -1,67 +0,0 @@ - $val ); -$result = @ldap_mod_add( $ds, $dn, $new_entry ); - -if( $result ) - 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 90971ac..d4245e7 100644 --- a/rdelete.php +++ b/rdelete.php @@ -1,4 +1,6 @@ -\n"; -echo "

Deleting" . htmlspecialchars( $dn) . "

\n"; -echo "

Recursive delete progress

\n"; +echo "

" . sprintf( $lang['deleting_dn'], htmlspecialchars($rdn) ) . "

\n"; +echo "

" . $lang['recursive_delete_progress'] . "

"; echo "

"; echo "\n"; flush(); @@ -44,7 +47,7 @@ if( $del_result ) // kill the DN from the tree browser session variable and // refresh the tree viewer frame (left_frame) - if( session_is_registered( 'tree' ) ) + if( array_key_exists( 'tree', $_SESSION ) ) { $tree = $_SESSION['tree']; @@ -68,13 +71,12 @@ if( $del_result ) parent.left_frame.location.reload(); - Object and sub-tree deleted successfully. - ' . htmlspecialchars( $dn ) . '' ); } else { - pla_error( "Could not delete the object: " . htmlspecialchars( $dn ), ldap_error( $ds ), ldap_errno( $ds ) ); + pla_error( sprintf( $lang['could_not_delete_entry'], htmlspecialchars( $dn ) ), ldap_error( $ds ), ldap_errno( $ds ) ); } @@ -83,36 +85,37 @@ exit; function pla_rdelete( $server_id, $dn ) { + global $lang; $children = get_container_contents( $server_id, $dn ); global $ds; $ds = pla_ldap_connect( $server_id ); if( ! is_array( $children ) || count( $children ) == 0 ) { - echo "Deleting " . htmlspecialchars( $dn ) . "..."; + echo "" . sprintf( $lang['deleting_dn'], htmlspecialchars( $dn ) ) . "..."; flush(); if( true === preEntryDelete( $server_id, $dn ) ) if( @ldap_delete( $ds, $dn ) ) { postEntryDelete( $server_id, $dn ); - echo " Success
\n"; + echo " " . $lang['success'] . "
\n"; return true; } else { - pla_error( "Failed to delete dn: " . htmlspecialchars( $dn ), - ldap_error( $ds ), ldap_errno( $ds ) ); + pla_error( sprintf( $lang['failed_to_delete_entry'], htmlspecialchars( $dn ) ), + ldap_error( $ds ), ldap_errno( $ds ) ); } } else { foreach( $children as $child_dn ) { pla_rdelete( $server_id, $child_dn ); } - echo "Deleting " . htmlspecialchars( $dn ) . "..."; + echo "" . sprintf( $lang['deleting_dn'], htmlspecialchars( $dn ) ) . "..."; flush(); if( true === preEntryDelete( $server_id, $dn ) ) if( @ldap_delete( $ds, $dn ) ) { postEntryDelete( $server_id, $dn ); - echo " Success
\n"; + echo " " . $lang['success'] . "
\n"; return true; } else { - pla_error( "Failed to delete dn: " . htmlspecialchars( ( $dn ) ), - ldap_error( $ds ), ldap_errno( $ds ) ); + pla_error( sprintf( $lang['failed_to_delete_entry'], htmlspecialchars( $dn ) ), + ldap_error( $ds ), ldap_errno( $ds ) ); } } diff --git a/refresh.php b/refresh.php index d173d12..5e88ebe 100644 --- a/refresh.php +++ b/refresh.php @@ -1,4 +1,6 @@ - $children ) { - $tree[$server_id][$dn] = get_container_contents( $server_id, $dn ); + $tree[$server_id][$dn] = get_container_contents( $server_id, $dn, 0, '(objectClass=*)', get_tree_deref_setting() ); 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 ); diff --git a/rename.php b/rename.php index 001c08d..16db664 100644 --- a/rename.php +++ b/rename.php @@ -1,4 +1,6 @@ - 0 ) - pla_error( "You cannot rename an entry which has children entries - (eg, the rename operation is not allowed on non-leaf entries)" ); + pla_error( $lang['non_leaf_nodes_cannot_be_renamed'] ); -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 sever" ); +$ds = pla_ldap_connect( $server_id ) or pla_error( $lang['could_not_connect'] ); $container = get_container( $dn ); $new_dn = $new_rdn . ',' . $container; if( $new_dn == $dn ) - pla_error( "You did not change the RDN" ); + pla_error( $lang['no_rdn_change'] ); $dn_attr = explode( '=', $dn ); $dn_attr = $dn_attr[0]; @@ -45,6 +46,8 @@ $old_dn_value = pla_explode_dn( $dn ); $old_dn_value = explode( '=', $old_dn_value[0], 2 ); $old_dn_value = $old_dn_value[1]; $new_dn_value = explode( '=', $new_rdn, 2 ); +if( count( $new_dn_value ) != 2 || ! isset( $new_dn_value[1] ) ) + pla_error( $lang['invalid_rdn'] ); $new_dn_value = $new_dn_value[1]; // Add the new DN attr value to the DN attr (ie, add newName to cn) @@ -56,7 +59,7 @@ $remove_old_dn_attr = array( $dn_attr => $old_dn_value ); $add_dn_attr_success = @ldap_mod_add( $ds, $dn, $add_new_dn_attr ); if( ! @ldap_rename( $ds, $dn, $new_rdn, $container, false ) ) { - pla_error( "Could not rename the object.", ldap_error( $ds ), ldap_errno( $ds ), false ); + pla_error( $lang['could_not_rename'], ldap_error( $ds ), ldap_errno( $ds ), false ); // attempt to undo our changes to the DN attr if( $add_dn_attr_success ) @@ -67,9 +70,7 @@ else // attempt to remove the old DN attr value (if we can't, die a silent death) @ldap_mod_del( $ds, $new_dn, $remove_old_dn_attr ); - // update the session tree to reflect the name change - session_start(); - if( session_is_registered( 'tree' ) ) + if( array_key_exists( 'tree', $_SESSION ) ) { $tree = $_SESSION['tree']; $tree_icons = $_SESSION['tree_icons']; @@ -105,11 +106,11 @@ else location.href=''; - + - Redirecting... click here if you're impatient. + diff --git a/rename_form.php b/rename_form.php new file mode 100644 index 0000000..5fdd056 --- /dev/null +++ b/rename_form.php @@ -0,0 +1,46 @@ + + + + +

+

:     :

+ +
+
+
+ + + + +
+
+ + + diff --git a/schema.php b/schema.php index 8765b48..a978d2f 100644 --- a/schema.php +++ b/schema.php @@ -1,4 +1,6 @@ " . htmlspecialchars($servers[$server_id]['name']) . ".
-
- - This could happen for several reasons, the most probable of which are: -
    -
  • The server does not fully support the LDAP protocol.
  • -
  • Your version of PHP does not correctly perform the query.
  • -
  • Or lastly, phpLDAPadmin doesn't know how to fetch the schema for your server.
  • -
- Please - report this as a bug"; +$schema_error_str = $lang['could_not_retrieve_schema_from']." " + . htmlspecialchars($servers[$server_id]['name']) + . ".

" + .$lang['reasons_for_error'] + ."
  • " + .$lang['schema_retrieve_error_1'] + . "
  • " + .$lang['schema_retrieve_error_2'] + ."
  • " + .$lang['schema_retrieve_error_3'] + ."
".$lang['please_report_this_as_a_bug'].""; ?> @@ -50,20 +49,20 @@ $schema_error_str = "Could not retrieve schema from " . htmlspecialchars($ser
objectClasses' ); ?> + $lang['objectclasses'] : + ''.$lang['objectclasses'].'' ); ?> | Attributes' ); ?> + $lang['attributes']: + ''. $lang['attributes'].'' ); ?> | Syntaxes' ); ?> + $lang['syntaxes'] : + ''.$lang['syntaxes'].'' ); ?> | Matching Rules' ); ?> + $lang['matchingrules'] : + ''.$lang['matchingrules'].'' ); ?>

@@ -123,14 +122,20 @@ if( $view == 'syntaxes' ) { ?> :
- +
+ getName() + .'" ' + .( 0 == strcasecmp( $attr->getName(), $viewvalue ) ? ' selected ' : '' ) + .'>' + . $attr->getName() + .''; + } ?> +
@@ -142,46 +147,45 @@ if( $view == 'syntaxes' ) { $counter = 0; echo "\n"; - echo "\n"; - echo "\n"; + echo "\n"; + echo "\n"; echo "\n\n"; - echo "\n"; - echo "\n"; + echo "\n"; echo "\n"; echo "\n\n"; echo "\n"; - echo "\n"; - echo "\n"; + echo '\n"; + echo "\n"; echo "\n\n"; echo "\n"; echo "\n"; echo "\n"; + echo "getSupAttribute() ) . "\">" . $attr->getSupAttribute() . "\n"; echo "\n\n"; echo "\n"; - echo "\n"; - echo "\n"; + echo "\n"; + echo "\n"; echo "\n\n"; echo "\n"; - echo "\n"; - echo "\n"; + echo "\n"; + echo "\n"; echo "\n\n"; echo "\n"; - echo "\n"; - echo "\n"; + echo "\n"; + echo "\n"; echo "\n\n"; echo "\n"; - echo "\n"; + echo "\n"; echo "\n"; - echo "\n"; - echo "\n"; + echo "\n"; + echo "\n"; echo "\n\n"; echo "\n"; - echo "\n"; - echo "\n"; + echo "\n"; + echo "\n"; echo "\n\n"; echo "\n"; - echo "\n"; - echo "\n"; + echo "\n"; + echo "\n"; echo "\n\n"; echo "\n"; - echo "\n"; - echo "\n"; + echo "\n"; + echo "\n"; echo "\n\n"; echo "\n"; - echo "\n"; - echo "\n"; + echo "\n"; + echo "\n"; echo "\n\n"; echo "\n"; - echo "\n"; + echo "\n"; echo ""; echo "\n\n"; echo "\n"; - echo "\n"; + echo "\n"; echo ""; echo "\n\n"; @@ -250,8 +259,22 @@ if( $view == 'syntaxes' ) { } elseif( $view == 'matching_rules' ) { //echo "
" . $lang['the_following_matching'] . "

\n\n"; + $schema_matching_rules = get_schema_matching_rules( $server_id ); + echo $lang['jump_to_matching_rule']."
"; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; echo "\n\n
Description" . ( $attr->getDescription() == null ? '(no description)' : $attr->getDescription() ). "".$lang['desc']."" . ( $attr->getDescription() == null ? '('.$lang['no_description'].')' : $attr->getDescription() ). "
OID".$lang['oid']."" . $attr->getOID() . "
Obsolete?" . ( $attr->getIsObsolete() ? 'Yes' : 'No' ) . "'.$lang['obsolete']."?" . ( $attr->getIsObsolete() ? '' . $lang['yes'] . '' : $lang['no'] ) . "
".$lang['inherits'].""; if( $attr->getSupAttribute()==null ) - echo '(none)'; + echo '('.$lang['none'].')'; else - echo "getSupAttribute() ) . "\">" . $attr->getSupAttribute() . "
Equality" . ( $attr->getEquality() == null ? '(not specified)' : $attr->getEquality() ) . "".$lang['equality']."" . ( $attr->getEquality() == null ? '('.$lang['not_specified'].')' : "getEquality()."\">".$attr->getEquality() ) . "
Ordering" . ( $attr->getOrdering()==null? '(not specified)' : $attr->getOrdering() ) . "".$lang['ordering']."" . ( $attr->getOrdering()==null? '('.$lang['not_specified'].')' : $attr->getOrdering() ) . "
Substring Rule" . ( $attr->getSubstr()==null? '(not specified)' : $attr->getSubstr() ) . "".$lang['substring_rule']."" . ( $attr->getSubstr()==null? '('.$lang['not_specified'].')' : $attr->getSubstr() ) . "
Syntax".$lang['syntax'].""; if( null != $attr->getType() ) { echo "\n\n"; echo "
Single Valued" . ( $attr->getIsSingleValue() ? 'Yes' : 'No' ) . "".$lang['single_valued']."" . ( $attr->getIsSingleValue() ? $lang['yes'] : $lang['no'] ) . "
Collective?" . ( $attr->getIsCollective() ? 'Yes' : 'No' ) . "".$lang['collective']."?" . ( $attr->getIsCollective() ? $lang['yes'] : $lang['no'] ) . "
User Modification" . ( $attr->getIsNoUserModification() ? 'No' : 'Yes' ) . "".$lang['user_modification']."" . ( $attr->getIsNoUserModification() ? $lang['no'] : $lang['yes'] ) . "
Usage" . ( $attr->getUsage() ? $attr->getUsage() : '(not specified)' ) . "".$lang['usage']."" . ( $attr->getUsage() ? $attr->getUsage() : '('.$lang['not_specified'].')' ) . "
Maximum Length" . ( $attr->getMaxLength() === null ? - '(not applicable)' : - number_format( $attr->getMaxLength() ) . ' characters' ) . "".$lang['maximum_length'].""; + if ( $attr->getMaxLength() === null ) { echo '('.$lang['not_applicable'].')';} + else { + echo number_format( $attr->getMaxLength() ) ." "; + if ( $attr->getMaxLength()>1) {echo $lang['characters'];} + else { echo $lang['character'] ;} + } + echo "
Aliases".$lang['aliases'].""; if( count( $attr->getAliases() ) == 0 ) - echo "(none)"; + echo '('.$lang['none'].')'; else foreach( $attr->getAliases() as $alias_attr_name ) - echo "$alias_attr_name "; + echo "$alias_attr_name "; echo "
Used by objectClasses".$lang['used_by_objectclasses'].""; if( count( $attr->getUsedInObjectClasses() ) == 0 ) - echo "(none)"; + echo '('.$lang['none'].')'; else foreach( $attr->getUsedInObjectClasses() as $used_in_oclass) - echo "$used_in_oclass "; echo "
\n"; - echo "\n"; + echo "\n"; flush(); $counter=1; $schema_matching_rules = get_schema_matching_rules( $server_id ); @@ -260,24 +283,29 @@ if( $view == 'syntaxes' ) { $counter++; $oid = htmlspecialchars( $rule->getOID() ); $desc = htmlspecialchars( $rule->getName() ); - + if ( $viewvalue==null || $viewvalue==($rule->getName() )) + { if( null != $rule->getDescription() ) $desc .= ' (' . $rule->getDescription() . ')'; if( true === $rule->getIsObsolete() ) $desc .= ' ' . $lang['obsolete'] . ''; echo ""; - echo ""; - echo ""; + echo ""; + echo ""; echo "\n"; + } } echo "
" . $lang['matching_rule_oid'] . "" . $lang['name'] . "Used by Attributes
" . $lang['matching_rule_oid'] . "" . $lang['name'] . "".$lang['used_by_attributes']."
$oid$desc$oid$desc"; if( count( $rule->getUsedByAttrs() ) == 0 ) { - echo "
(" . $lang['none'] . ")


\n"; + echo "
(" . $lang['none'] . ")


\n"; } else { - echo "
"; + echo ""; + echo ""; + echo "\n"; + echo "
\n"; } echo "
\n"; @@ -293,23 +321,40 @@ if( $view == 'syntaxes' ) { + $oclass ) { + echo ''; + } ?> + + + + + $oclass ) { + foreach( $oclass->getSupClasses() as $parent_name ) { + $parent_name = strtolower( $parent_name ); + if( isset( $schema_oclasses[ $parent_name ] ) ) { + $schema_oclasses[ $parent_name ]->addChildObjectClass( $oclass->getName() ); + } + } + + } ?> +
$oclass ) { - if ( $viewvalue==null || $viewvalue==$oclass->getName()){ - ?> - + if ( $viewvalue==null || $viewvalue==$oclass->getName()){ ?> +

getName(); ?>

: getOID(); ?>

getDescription() ) { ?>

: getDescription(); ?>

-

Type: getType(); ?>

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

: getType(); ?>

+ getIsObsolete() == true ) { ?>

@@ -319,13 +364,28 @@ if( $view == 'syntaxes' ) { else foreach( $oclass->getSupClasses() as $i => $object_class ) { echo '' . htmlspecialchars( $object_class ) . ''; if( $i < count( $oclass->getSupClasses() ) - 1 ) echo ', '; } ?>
+

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

+ @@ -336,13 +396,13 @@ if( $view == 'syntaxes' ) { getMustAttrs($schema_oclasses) ) > 0 ) { echo '
    '; 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 "
      (".$lang['inherited_from']." "; + echo "getSource() . "\">" . $attr->getSource() . ""; echo ")"; } echo "
  • \n"; @@ -357,13 +417,13 @@ if( $view == 'syntaxes' ) { 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 "
         (".$lang['inherited_from']." "; + echo "getSource() . "\">" . $attr->getSource() . ""; echo ")"; } echo "
    • "; diff --git a/schema_functions.php b/schema_functions.php index 63ee65f..b9e5cc0 100644 --- a/schema_functions.php +++ b/schema_functions.php @@ -1,60 +1,88 @@ oid = null; + $this->description = null; + } + + /** Default constructor. */ + function SchemaItem() + { + $this->initVars(); + } + + function setOID( $new_oid ) { - $this->name=$name; - $this->source=$source; + $this->oid = $new_oid; } - /* getters */ - - function getName () + function setDescription( $new_desc ) { - return $this->name; + $this->description = $new_desc; } - function getSource () - { - return $this->source; - } + function getOID() + { + return $this->oid; + } + + function getDescription() + { + return $this->description; + } } -/* +/** * Represents an LDAP objectClass */ -class ObjectClass +class ObjectClass extends SchemaItem { - /* This objectClass' OID, ie "2.16.840.1.113730.3.2.2" */ - var $oid; - /* This objectClass' name, ie "inetOrgPerson" */ + /** This objectClass' name, ie "inetOrgPerson" */ var $name; - /* This objectClass' description */ - var $description; - /* array of objectClass names from which this objectClass inherits */ + /** array of objectClass names from which this objectClass inherits */ var $sup_classes; - /* one of STRUCTURAL, ABSTRACT, or AUXILIARY */ + /** one of STRUCTURAL, ABSTRACT, or AUXILIARY */ var $type; - /* arrays of attribute names that this objectClass requires */ + /** arrays of attribute names that this objectClass requires */ var $must_attrs; - /* arrays of attribute names that this objectClass allows, but does not require */ + /** arrays of attribute names that this objectClass allows, but does not require */ var $may_attrs; - /* boolean value indicating whether this objectClass is obsolete */ + /** boolean value indicating whether this objectClass is obsolete */ var $is_obsolete; + /** array of objectClasses which inherit from this one (must be set at runtime explicitly by the caller) */ + var $children_objectclasses; - /* Initialize the class' member variables */ + /** Initialize the class' member variables */ function initVars() { + parent::initVars(); $this->oid = null; $this->name = null; $this->description = null; @@ -63,10 +91,11 @@ class ObjectClass $this->must_attrs = array(); $this->may_attrs = array(); $this->is_obsolete = false; + $this->children_objectclasses = array(); } - /* - * Parses a raw LDAP objectClass string into this object's $this vars + /** + * Creates a new ObjectClass object given a raw LDAP objectClass string. */ function ObjectClass( $raw_ldap_schema_string ) { @@ -185,9 +214,20 @@ class ObjectClass $this->description = preg_replace("/\'$/", "", $this->description); } - - /* Getters */ - + /** + * Gets an array of AttributeType objects that entries of this ObjectClass must define. + * This differs from getMustAttrNames in that it returns an array of AttributeType objects + * + * @param array $oclasses An array of ObjectClass objects to use when traversing + * the inheritance tree. This presents some what of a bootstrapping problem + * as we must fetch all objectClasses to determine through inheritance which + * attributes this objectClass requires. + * @return array The array of required AttributeType objects. + * + * @see getMustAttrNames + * @see getMayAttrs + * @see getMayAttrNames + */ function getMustAttrs($oclasses = NULL) { $all_must_attrs = array(); @@ -207,6 +247,21 @@ class ObjectClass return $all_must_attrs; } + /** + * Gets an array of AttributeType objects that entries of this ObjectClass may define. + * This differs from getMayAttrNames in that it returns an array of AttributeType objects + * + * @param array $oclasses An array of ObjectClass objects to use when traversing + * the inheritance tree. This presents some what of a bootstrapping problem + * as we must fetch all objectClasses to determine through inheritance which + * attributes this objectClass provides. + * @return array The array of allowed AttributeType objects. + * + * @see getMustAttrNames + * @see getMustAttrs + * @see getMayAttrNames + * @see AttributeType + */ function getMayAttrs($oclasses = NULL) { $all_may_attrs = array(); @@ -226,6 +281,21 @@ class ObjectClass return $all_may_attrs; } + /** + * Gets an array of attribute names (strings) that entries of this ObjectClass must define. + * This differs from getMustAttrs in that it returns an array of strings rather than + * array of AttributeType objects + * + * @param array $oclasses An array of ObjectClass objects to use when traversing + * the inheritance tree. This presents some what of a bootstrapping problem + * as we must fetch all objectClasses to determine through inheritance which + * attributes this objectClass provides. + * @return array The array of allowed attribute names (strings). + * + * @see getMustAttrs + * @see getMayAttrs + * @see getMayAttrNames + */ function getMustAttrNames( $oclasses = null ) { $attrs = $this->getMustAttrs( $oclasses ); @@ -235,6 +305,21 @@ class ObjectClass return $attr_names; } + /** + * Gets an array of attribute names (strings) that entries of this ObjectClass must define. + * This differs from getMayAttrs in that it returns an array of strings rather than + * array of AttributeType objects + * + * @param array $oclasses An array of ObjectClass objects to use when traversing + * the inheritance tree. This presents some what of a bootstrapping problem + * as we must fetch all objectClasses to determine through inheritance which + * attributes this objectClass provides. + * @return array The array of allowed attribute names (strings). + * + * @see getMustAttrs + * @see getMayAttrs + * @see getMustAttrNames + */ function getMayAttrNames( $oclasses = null ) { $attrs = $this->getMayAttrs( $oclasses ); @@ -244,41 +329,74 @@ class ObjectClass return $attr_names; } + /** + * Adds an objectClass to the list of objectClasses that inherit + * from this objectClass. + * @param String $object_class_name The name of the objectClass to add + * @return bool Returns true on success or false on failure (objectclass already existed for example) + */ + function addChildObjectClass( $object_class_name ) + { + $object_class_name = trim( $object_class_name ); + if( ! is_array( $this->children_objectclasses ) ) + $this->children_objectclasses = array(); + foreach( $this->children_objectclasses as $existing_objectclass ) + if( 0 == strcasecmp( $object_class_name, $existing_objectclass ) ) + return false; + $this->children_objectclasses[] = $object_class_name; + return true; + } + /** + * Returns the array of objectClass names which inherit from this objectClass. + * @return Array Names of objectClasses which inherit from this objectClass. + */ + function getChildObjectClasses() + { + return $this->children_objectclasses; + } + + /** + * Gets the name of this objectClass (ie, "inetOrgPerson") + * @return string The name of the objectClass + */ function getName() { return $this->name; } - function getDescription() - { - return $this->description; - } - - function getOID() - { - return $this->oid; - } - + /** + * Gets the objectClass names from which this objectClass inherits. + * + * @return array An array of objectClass names (strings) + */ function getSupClasses() { return $this->sup_classes; } + /** + * Gets the type of this objectClass: STRUCTURAL, ABSTRACT, or AUXILIARY. + */ function getType() { return $this->type; } + /** + * Gets whether this objectClass is flagged as obsolete by the LDAP server. + */ function getIsObsolete() { return $this->is_obsolete; } - /* + /** * Adds the specified array of attributes to this objectClass' list of * MUST attributes. The resulting array of must attributes will contain * unique members. + * + * @param array $new_must_attrs An array of attribute names (strings) to add. */ function addMustAttrs( $new_must_attrs ) { @@ -289,9 +407,11 @@ class ObjectClass $this->must_attrs = array_values( array_unique( array_merge( $this->must_attrs, $new_must_attrs ) ) ); } - /* + /** * Behaves identically to addMustAttrs, but it operates on the MAY * attributes of this objectClass. + * + * @param array $new_may_attrs An array of attribute names (strings) to add. */ function addMayAttrs( $new_may_attrs ) { @@ -301,54 +421,93 @@ class ObjectClass return; $this->may_attrs = array_values( array_unique( array_merge( $this->may_attrs, $new_may_attrs ) ) ); } - } -/* + /** + * A simple class for representing AttributeTypes used only by the ObjectClass class. + * Users should never instantiate this class. It represents an attribute internal to + * an ObjectClass. If PHP supported inner-classes and variable permissions, this would + * be interior to class ObjectClass and flagged private. The reason this class is used + * and not the "real" class AttributeType is because this class supports the notion of + * a "source" objectClass, meaning that it keeps track of which objectClass originally + * specified it. This class is therefore used by the class ObjectClass to determine + * inheritance. + */ + class ObjectClassAttribute + { + /** This Attribute's name */ + var $name; + /** This Attribute's root */ + var $source; + + /** + * Creates a new ObjectClassAttribute with specified name and source objectClass. + * @param string $name the name of the new attribute. + * @param string $source the name of the ObjectClass which + * specifies this attribute. + */ + function ObjectClassAttribute ($name, $source) + { + $this->name=$name; + $this->source=$source; + } + + /** Gets this attribute's name */ + function getName () + { + return $this->name; + } + + /** Gets the name of the ObjectClass which originally specified this attribute. */ + function getSource () + { + return $this->source; + } + } + + +/** * Represents an LDAP AttributeType */ -class AttributeType +class AttributeType extends SchemaItem { - /* The OID of this attributeType: ie, 1.2.3.4*/ - var $oid; - /* The name of this attributeType */ + /** The name of this attributeType */ var $name; - /* string: the description */ - var $description; - /* boolean: is it obsoloete */ + /** string: the description */ var $is_obsolete; - /* The attribute from which this attribute inherits (if any) */ + /** The attribute from which this attribute inherits (if any) */ var $sup_attribute; - /* The equality rule used */ + /** The equality rule used */ var $equality; - /* The ordering of the attributeType */ + /** The ordering of the attributeType */ var $ordering; - /* Boolean: supports substring matching? */ + /** Boolean: supports substring matching? */ var $sub_str; - /* The full syntax string, ie 1.2.3.4{16} */ + /** The full syntax string, ie 1.2.3.4{16} */ var $syntax; - /* boolean: is single valued only? */ + /** boolean: is single valued only? */ var $is_single_value; - /* boolean: is collective? */ + /** boolean: is collective? */ var $is_collective; - /* boolean: can use modify? */ + /** boolean: can use modify? */ var $is_no_user_modification; - /* The usage string set by the LDAP schema */ + /** The usage string set by the LDAP schema */ var $usage; - /* An array of alias attribute names, strings */ + /** An array of alias attribute names, strings */ var $aliases; - /* The max number of characters this attribute can be */ + /** The max number of characters this attribute can be */ var $max_length; - /* A string description of the syntax type (taken from the LDAPSyntaxes) */ + /** A string description of the syntax type (taken from the LDAPSyntaxes) */ var $type; - /* An array of objectClasses which use this attributeType (must be set by caller) */ + /** An array of objectClasses which use this attributeType (must be set by caller) */ var $used_in_object_classes; - /* + /** * Initialize the class' member variables */ function initVars() { + parent::initVars(); $this->oid = null; $this->name = null; $this->description = null; @@ -369,12 +528,11 @@ class AttributeType $this->used_in_object_classes = array(); } - /* - * Parses a raw LDAP objectClass string into this object's $this vars + /** + * Creates a new AttributeType objcet from a raw LDAP AttributeType string. */ function AttributeType( $raw_ldap_attr_string ) { - //echo "$raw_ldap_attr_string
      "; $this->initVars(); $attr = $raw_ldap_attr_string; $strings = preg_split ("/[\s,]+/", $attr, -1,PREG_SPLIT_DELIM_CAPTURE); @@ -448,7 +606,7 @@ class AttributeType $this->max_length = $this->max_length[1]; else $this->max_length = null; - if($strings[$i+1]=="{") { + if($i < count($strings) - 1 && $strings[$i+1]=="{") { do { $i++; $this->name .= " " . $strings[$i]; @@ -482,111 +640,161 @@ class AttributeType $this->syntax_oid = preg_replace("/\'$/", "", $this->syntax_oid ); } - /* Getters */ - function getOID() - { - return $this->oid; - } - + /** + * Gets this attribute's name + * @return string + */ function getName() { return $this->name; } - function getDescription() - { - return $this->description; - } - + /** + * Gets whether this attribute has been flagged as obsolete by the LDAP server + * @return bool + */ function getIsObsolete() { return $this->is_obsolete; } + /** + * Gets this attribute's usage string as defined by the LDAP server + * @return string + */ function getUsage() { return $this->usage; } + /** + * Gets this attribute's parent attribute (if any). If this attribute does not + * inherit from another attribute, null is returned. + * @return string + */ function getSupAttribute() { return $this->sup_attribute; } + /** + * Gets this attribute's equality string + * @return string + */ function getEquality() { return $this->equality; } + /** + * Gets this attribute's ordering specification. + * @return string + */ function getOrdering() { return $this->ordering; } + /** + * Gets this attribute's substring matching specification + * @return string + */ function getSubstr() { return $this->sub_str; } + /** + * Gets the names of attributes that are an alias for this attribute (if any). + * @return array An array of names of attributes which alias this attribute or + * an empty array if no attribute aliases this object. + */ function getAliases() { return $this->aliases; } - /* - * Returns the entire raw syntax string for this attr, for example: 1.2.3.4{16} + /** + * Gets this attribute's raw syntax string (ie: "1.2.3.4{16}"). + * @return string The raw syntax string */ function getSyntaxString() { return $this->syntax; } - /* - * Differs from getSyntaxString() in that it only returns the actual OID with any length - * specification removed. Ie, if the syntax string is 1.2.3.4{16}, this retruns - * 1.2.3.4. + /** + * Gets this attribute's syntax OID. Differs from getSyntaxString() in that this + * function only returns the actual OID with any length specification removed. + * Ie, if the syntax string is "1.2.3.4{16}", this function only retruns + * "1.2.3.4". + * @return string The syntax OID string. */ function getSyntaxOID() { return $this->syntax_oid; } - /* - * Returns the maximum length specified by this attribute (ie, "16" in 1.2.3.4{16}) + /** + * Gets this attribute's the maximum length. If no maximum is defined by the LDAP server, null is returned. + * @return int The maximum length (in characters) of this attribute or null if no maximum is specified. */ function getMaxLength() { return $this->max_length; } + /** + * Gets whether this attribute is single-valued. If this attribute only supports single values, true + * is returned. If this attribute supports multiple values, false is returned. + * @return bool Returns true if this attribute is single-valued or false otherwise. + */ function getIsSingleValue() { return $this->is_single_value; } + /** + * Sets whether this attribute is single-valued. + * @param bool $is_single_value + */ function setIsSingleValue( $is_single_value ) { $this->is_single_value = $is_single_value; } - + /** + * Gets whether this attribute is collective. + * @return bool Returns true if this attribute is collective and false otherwise. + */ function getIsCollective() { return $this->is_collective; } + /** + * Gets whether this attribute is not modifiable by users. + * @return bool Returns true if this attribute is not modifiable by users. + */ function getIsNoUserModification() { return $this->is_no_user_modification; } + /** + * Gets this attribute's type + * @return string The attribute's type. + */ function getType() { return $this->type; } - /* - * Removes an attribute name from the alias array. + /** + * Removes an attribute name from this attribute's alias array. + * @param string $remove_alias_name The name of the attribute to remove. + * @return bool true on success or false on failure (ie, if the specified + * attribute name is not found in this attribute's list of aliases) */ function removeAlias( $remove_alias_name ) { @@ -600,44 +808,56 @@ class AttributeType return false; } - /* + /** * Adds an attribute name to the alias array. + * @param string $new_alias_name The name of a new attribute to add to this attribute's list of aliases. */ function addAlias( $new_alias_name ) { $this->aliases[] = $new_alias_name; } + /** + * Sets this attriute's name. + * @param string $new_name The new name to give this attribute. + */ function setName( $new_name ) { $this->name = $new_name; } - function setOID( $new_oid ) - { - $this->oid = $new_oid; - } - - function setDescription( $new_desc ) - { - $this->description = $new_desc; - } - + /** + * Sets this attriute's SUP attribute (ie, the attribute from which this attribute inherits). + * @param string $new_sup_attr The name of the new parent (SUP) attribute + */ function setSupAttribute( $new_sup_attr ) { $this->sup_attribute = $new_sup_attr; } + /** + * Sets this attribute's list of aliases. + * @param array $new_aliases The array of alias names (strings) + */ function setAliases( $new_aliases ) { $this->aliases = $new_aliases; } + /** + * Sets this attribute's type. + * @param string $new_type The new type. + */ function setType( $new_type ) { $this->type = $new_type; } + /** + * Adds an objectClass name to this attribute's list of "used in" objectClasses, + * that is the list of objectClasses which provide this attribute. + * @param string $object_class_name The name of the objectClass to add. + */ function addUsedInObjectClass( $object_class_name ) { foreach( $this->used_in_object_classes as $used_in_object_class ) @@ -647,31 +867,32 @@ class AttributeType return true; } + /** + * Gets the list of "used in" objectClasses, that is the list of objectClasses + * which provide this attribute. + * @return array An array of names of objectclasses (strings) which provide this attribute + */ function getUsedInObjectClasses() { return $this->used_in_object_classes; } } -/* +/** * Represents an LDAP Syntax */ -class Syntax +class Syntax extends SchemaItem { - /* This Syntax OID, ie "2.16.840.1.113730.3.2.2" */ - var $oid; - /* This Syntax description */ - var $description; - - /* Initialize the class' member variables */ + /** Initializes the class' member variables */ function initVars() { + parent::initVars(); $this->oid = null; $this->description = null; } - /* - * Parses a raw LDAP objectClass string into this object's $this vars + /** + * Creates a new Syntax object from a raw LDAP syntax string. */ function Syntax( $raw_ldap_syntax_string ) { @@ -699,42 +920,26 @@ class Syntax $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 +class MatchingRule extends SchemaItem { - /* This rule's OID, ie "2.16.840.1.113730.3.2.2" */ - var $oid; - /* This rule's name */ + /** This rule's name */ var $name; - /* This rule's description */ - var $description; - /* This rule's syntax OID */ + /** This rule's syntax OID */ var $syntax; - /* Boolean value indicating whether this MatchingRule is obsolete */ + /** Boolean value indicating whether this MatchingRule is obsolete */ var $is_obsolete; - /* An array of attribute names who use this MatchingRule */ + /** An array of attribute names who use this MatchingRule */ var $used_by_attrs; - /* Initialize the class' member variables */ + /** Initialize the class' member variables */ function initVars() { + parent::initVars(); $this->oid = null; $this->name = null; $this->description = null; @@ -743,8 +948,8 @@ class MatchingRule $this->used_by_attrs = array(); } - /* - * Parses a raw LDAP objectClass string into this object's $this vars + /** + * Creates a new MatchingRule object from a raw LDAP MatchingRule string. */ function MatchingRule( $raw_ldap_matching_rule_string ) { @@ -803,15 +1008,16 @@ class MatchingRule $this->description = preg_replace("/\'$/", "", $this->description); } - /* + /** * Sets the list of used_by_attrs to the array specified by $attrs; + * @param array $attrs The array of attribute names (strings) which use this MatchingRule */ 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) */ @@ -824,55 +1030,58 @@ class MatchingRule return true; } - /* Getters */ - + /** + * Gets this MatchingRule's name. + * @return string The name. + */ function getName() { return $this->name; } - function getDescription() - { - return $this->description; - } - + /** + * Gets whether this MatchingRule is flagged as obsolete by the LDAP server. + * @return bool True if this MatchingRule is obsolete and false otherwise. + */ function getIsObsolete() { return $this->is_obsolete; } + /** + * Gets this MatchingRule's syntax string (an OID). + * @todo Is this function broken? + */ function getSyntax() { return $this->description; } - function getOID() - { - return $this->oid; - } - + /** + * Gets an array of attribute names (strings) which use this MatchingRule + * @return array The array of attribute names (strings). + */ function getUsedByAttrs() { return $this->used_by_attrs; } } -/* +/** * Represents an LDAP schema matchingRuleUse entry */ -class MatchingRuleUse +class MatchingRuleUse extends SchemaItem { - /* The OID of the MatchingRule this applies to */ - var $oid; - /* The name of the MathingRule this applies to */ + /** The name of the MathingRule this applies to */ var $name; - /* An array of attributeType names who make use of the mathingRule + /** 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 */ + /** Initialize the class' member variables */ function initVars() { + parent::initVars(); $this->oid = null; $this->name = null; $this->used_by_attrs = array(); @@ -880,6 +1089,7 @@ class MatchingRuleUse function MatchingRuleUse( $raw_matching_rule_use_string ) { + $this->initVars(); $strings = preg_split ("/[\s,]+/", $raw_matching_rule_use_string, -1,PREG_SPLIT_DELIM_CAPTURE); for($i=0; $iname)==0) + if( ! isset( $this->name ) || strlen( $this->name ) ==0 ) $this->name = $strings[$i]; else $this->name .= " " . $strings[$i]; @@ -939,30 +1149,38 @@ class MatchingRuleUse sort( $this->used_by_attrs ); } - /* Getters */ - - function getOID() - { - return $this->oid; - } - + /** + * Gets this MatchingRuleUse's name + * @return string The name + */ function getName() { return $this->name; } + /** + * Gets an array of attribute names (strings) which use this MatchingRuleUse object. + * @return array The array of attribute names (strings). + */ 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. + * + * @param int $server_id The ID of the server whose schema DN to fetch. + * @param string $dn The DN (may be null) which houses the subschemaSubEntry attribute which + * this function can use to determine the schema entry's DN. + * @param bool $debug Switch to true to see some nice and copious output. :) + * + * @return string The DN of the entry which houses this LDAP server's schema. */ function _get_schema_dn( $server_id, $dn, $debug=false ) { @@ -978,7 +1196,7 @@ function _get_schema_dn( $server_id, $dn, $debug=false ) return false; } - if( ldap_count_entries( $ds, $search ) == 0 ) { + if( @ldap_count_entries( $ds, $search ) == 0 ) { if( $debug ) echo "_get_schema_dn() returning false (ldap_count_entries() == 0).\n"; return false; } @@ -1010,10 +1228,11 @@ function _get_schema_dn( $server_id, $dn, $debug=false ) 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! + * needfully complicated as it now supports many popular LDAP servers that + * don't necessarily expose their schema "the right way". * * @param $server_id - The server ID whose server you want to retrieve * @param $schema_to_fetch - A string indicating which type of schema to @@ -1036,7 +1255,6 @@ function _get_schema_dn( $server_id, $dn, $debug=false ) 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; @@ -1050,14 +1268,11 @@ function _get_raw_schema( $server_id, $schema_to_fetch, $dn='' ) $valid_schema_to_fetch = array( 'objectclasses', 'attributetypes', 'ldapsyntaxes', 'matchingrules', 'matchingruleuse' ); if( ! in_array( $schema_to_fetch, $valid_schema_to_fetch ) ) + // This error message is not localized as only developers should ever see it 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 ); @@ -1073,12 +1288,33 @@ function _get_raw_schema( $server_id, $schema_to_fetch, $dn='' ) $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 ); + + // Were we not able to fetch the schema from the $schema_dn? + $schema_entries = @ldap_get_entries( $ds, $schema_search ); + if( $schema_search === false || + 0 == @ldap_count_entries( $ds, $schema_search ) || + ! isset( $schema_entries[0][$schema_to_fetch] ) ) { + if( $debug ) echo "Did not find the schema with (objectClass=*). Attempting with (objetClass=subschema)\n"; + + // Try again with a different filter (some servers require (objectClass=subschema) like M-Vault) + $schema_search = @ldap_read( $ds, $schema_dn, '(objectClass=subschema)', + array( $schema_to_fetch ), 0, 0, 0, + LDAP_DEREF_ALWAYS ); + $schema_entries = @ldap_get_entries( $ds, $schema_search ); + + // Still didn't get it? + if( $schema_search === false || + 0 == @ldap_count_entries( $ds, $schema_search ) || + ! isset( $schema_entries[0][$schema_to_fetch] ) ) { + if( $debug ) echo "Did not find the schema at DN: $schema_dn (with objectClass=* nor objectClass=subschema).\n"; + unset( $schema_entries ); + unset( $schema_dn ); + $schema_search = null; + } else { + if( $debug ) echo "Found the schema at DN: $schema_dn (with objectClass=subschema).\n"; + } } else { - if( $debug ) echo "Found the schema at DN: $schema_dn.\n"; + if( $debug ) echo "Found the schema at DN: $schema_dn (with objectClass=*).\n"; } } @@ -1130,19 +1366,45 @@ function _get_raw_schema( $server_id, $schema_to_fetch, $dn='' ) array( $schema_to_fetch ), 0, 0, 0, LDAP_DEREF_ALWAYS ); } + // Attempt to pull schema from Root DSE with scope "base" + if( $schema_search == null ) { + // try again, with a different schema DN + if( $debug ) echo "Attempting to pull schema from Root DSE with scope \"base\"...\n"; + if( $base_dn != null ) + $schema_search = @ldap_read($ds, '', '(objectClass=*)', + array( $schema_to_fetch ), 0, 0, 0, LDAP_DEREF_ALWAYS ); + $schema_entries = @ldap_get_entries( $ds, $schema_search ); + if( ! isset( $schema_entries[0][$schema_to_fetch] ) ) + $schema_search = null; + } + + // Attempt to pull schema from Root DSE with scope "one" (work-around for Isode M-Vault X.500/LDAP) + if( $schema_search == null ) { + // try again, with a different schema DN + if( $debug ) echo "Attempting to pull schema from Root DSE with scope \"one\"...\n"; + if( $base_dn != null ) + $schema_search = @ldap_list($ds, '', '(objectClass=*)', + array( $schema_to_fetch ), 0, 0, 0, LDAP_DEREF_ALWAYS ); + $schema_entries = @ldap_get_entries( $ds, $schema_search ); + if( ! isset( $schema_entries[0][$schema_to_fetch] ) ) + $schema_search = null; + } + // Shall we just give up? - if( $schema_search == null ) + if( $schema_search == null ) { + if( $debug ) echo "Returning false since schema_search came back null\n"; 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"; + if( $debug ) echo "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"; + if( $debug ) echo "Returning false since ldap_get_entries() returned false.\n"; return false; } @@ -1152,34 +1414,36 @@ function _get_raw_schema( $server_id, $schema_to_fetch, $dn='' ) // [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"; + if( $debug ) echo "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; - + if( $debug ) echo ""; 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'. +/** + * Gets an associative array of ObjectClass objects for the specified + * server. Each array entry's key is the name of the objectClass + * in lower-case and the value is an ObjectClass object. + * + * @param int $server_id The ID of the server whose objectClasses to fetch + * @param string $dn (optional) It is easier to fetch schema if a DN is provided + * which defines the subschemaSubEntry attribute (all entries should). + * + * @return array An array of ObjectClass objects. + * + * @see ObjectClass + * @see get_schema_objectclass */ function get_schema_objectclasses( $server_id, $dn=null ) { - // cache the schema to prevent multiple schema fetches from LDAP server - static $cache = array(); - if( isset( $cache[$server_id] ) ) { - //echo "Using oclass cache.
      "; - return $cache[$server_id]; - } + if( cached_schema_available( $server_id, 'objectclasses' ) ) { + return get_cached_schema( $server_id, 'objectclasses' ); + } $raw_oclasses = _get_raw_schema( $server_id, 'objectclasses', $dn ); if( ! $raw_oclasses ) @@ -1199,12 +1463,22 @@ function get_schema_objectclasses( $server_id, $dn=null ) ksort( $object_classes ); // cache the schema to prevent multiple schema fetches from LDAP server - $cache[ $server_id ] = $object_classes; + set_cached_schema( $server_id, 'objectclasses', $object_classes ); return( $object_classes ); } -/* - * Returns the schema for a single ObjectClass +/** + * Gets a single ObjectClass object specified by name. + * + * @param int $server_id The ID of the server which houses the objectClass to fetch. + * @param string $oclass_name The name of the objectClass to fetch. + * @param string $dn (optional) It is easier to fetch schema if a DN is provided + * which defines the subschemaSubEntry attribute (all entries should). + * + * @return ObjectClass The specified ObjectClass object or false on error. + * + * @see ObjectClass + * @see get_schema_objectclasses */ function get_schema_objectclass( $server_id, $oclass_name, $dn=null ) { @@ -1218,8 +1492,18 @@ function get_schema_objectclass( $server_id, $oclass_name, $dn=null ) return false; } -/* - * Retrieves the schema for a single attribute. +/** + * Gets a single AttributeType object specified by name. + * + * @param int $server_id The ID of the server which houses the AttributeType to fetch. + * @param string $oclass_name The name of the AttributeType to fetch. + * @param string $dn (optional) It is easier to fetch schema if a DN is provided + * which defines the subschemaSubEntry attribute (all entries should). + * + * @return AttributeType The specified AttributeType object or false on error. + * + * @see AttributeType + * @see get_schema_attributes */ function get_schema_attribute( $server_id, $attr_name, $dn=null ) { @@ -1232,18 +1516,22 @@ function get_schema_attribute( $server_id, $attr_name, $dn=null ) return $schema_attr; } -/* - * 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. +/** + * Gets an associative array of AttributeType objects for the specified + * server. Each array entry's key is the name of the attributeType + * in lower-case and the value is an AttributeType object. + * + * @param int $server_id The ID of the server whose AttributeTypes to fetch + * @param string $dn (optional) It is easier to fetch schema if a DN is provided + * which defines the subschemaSubEntry attribute (all entries should). + * + * @return array An array of AttributeType objects. */ 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 ] ) ) - return $cache[ $server_id ]; + if( cached_schema_available( $server_id, 'attributetypes' ) ) { + return get_cached_schema( $server_id, 'attributetypes' ); + } $raw_attrs = _get_raw_schema( $server_id, 'attributeTypes', $dn ); if( ! $raw_attrs ) @@ -1252,7 +1540,7 @@ function get_schema_attributes( $server_id, $dn = null ) // build the array of attribueTypes $syntaxes = get_schema_syntaxes( $server_id, $dn ); $attrs = array(); - /* + /** * bug 856832: create two arrays - one indexed by name (the standard * $attrs array above) and one indexed by oid (the new $attrs_oid array * below). This will help for directory servers, like IBM's, that use OIDs @@ -1271,7 +1559,7 @@ function get_schema_attributes( $server_id, $dn = null ) $key = strtolower( $name ); $attrs[ $key ] = $attr; - /* + /** * bug 856832: create an entry in the $attrs_oid array too. This * will be a ref to the $attrs entry for maintenance and performance * reasons @@ -1281,7 +1569,7 @@ function get_schema_attributes( $server_id, $dn = null ) } add_aliases_to_attrs( $attrs ); - /* + /** * bug 856832: pass the $attrs_oid array as a second (new) parameter * to add_sup_to_attrs. This will allow lookups by either name or oid. */ @@ -1290,11 +1578,11 @@ function get_schema_attributes( $server_id, $dn = null ) ksort( $attrs ); // cache the schema to prevent multiple schema fetches from LDAP server - $cache[ $server_id ] = $attrs; + set_cached_schema( $server_id, 'attributetypes', $attrs ); return( $attrs ); } -/* +/** * For each attribute that has multiple names, this function adds unique entries to * the attrs array for those names. Ie, attributeType has name 'gn' and 'givenName'. * This function will create a unique entry for 'gn' and 'givenName'. @@ -1319,7 +1607,7 @@ function add_aliases_to_attrs( &$attrs ) } } -/* +/** * Adds inherited values to each attributeType specified by the SUP directive. * Supports infinite levels of inheritance. * Bug 856832: require a second paramter that has all attributes indexed by OID @@ -1344,10 +1632,10 @@ function add_sup_to_attrs( &$attrs, &$attrs_oid ) // 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 ;) */ ) { + while( $i++ < 100 /** 100 == INFINITY ;) */ ) { if( $debug ) echo "Top of loop.\n"; - /* + /** * Bug 856832: check if sup is indexed by OID. If it is, * replace the OID with the appropriate name. Then reset * $sup_attr_name to the name instead of the OID. This will @@ -1434,18 +1722,15 @@ function add_sup_to_attrs( &$attrs, &$attrs_oid ) if( $debug ) echo "\n"; } -/* +/** * 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, $dn=null ) { - static $cache; - - // cache the schema to prevent multiple schema fetches from LDAP server - if( isset( $cache[$server_id] ) ) { - return $cache[$server_id]; - } + if( cached_schema_available( $server_id, 'matchingrules' ) ) { + return get_cached_schema( $server_id, 'matchingrules' ); + } // build the array of MatchingRule objects $raw_matching_rules = _get_raw_schema( $server_id, 'matchingRules', $dn ); @@ -1487,22 +1772,19 @@ function get_schema_matching_rules( $server_id, $dn=null ) } // cache the schema to prevent multiple schema fetches from LDAP server - $cache[$server_id] = $rules; + set_cached_schema( $server_id, 'matchingrules', $rules ); return $rules; } -/* +/** * 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, $dn=null ) { - static $cache; - - // cache the schema to prevent multiple schema fetches from LDAP server - if( isset( $cache[$server_id] ) ) { - return $cache[$server_id]; - } + if( cached_schema_available( $server_id, 'ldapsyntaxes' ) ) { + return get_cached_schema( $server_id, 'ldapsyntaxes' ); + } $raw_syntaxes = _get_raw_schema( $server_id, 'ldapSyntaxes', $dn ); if( ! $raw_syntaxes ) @@ -1520,9 +1802,115 @@ function get_schema_syntaxes( $server_id, $dn=null ) ksort( $syntaxes ); // cache the schema to prevent multiple schema fetches from LDAP server - $cache[$server_id] = $syntaxes; + set_cached_schema( $server_id, 'ldapsyntaxes', $syntaxes ); return $syntaxes; } +// -------------------------------------------------------------------- +// Schema caching functions +// -------------------------------------------------------------------- + +/** + * Returns true if the schema for $schema_type has been cached and + * is availble. $schema_type may be one of (lowercase) the following: + * objectclasses + * attributetypes + * ldapsyntaxes + * matchingrules + * matchingruleuse + * Note that _get_raw_schema() takes a similar parameter. + */ +function cached_schema_available( $server_id, $schema_type ) +{ + // Check config to make sure session-based caching is enabled. + if( ! SCHEMA_SESSION_CACHE_ENABLED ) + return false; + + // Static memory cache available? + // (note: this memory cache buys us a 20% speed improvement over strictly + // checking the session, ie 0.05 to 0.04 secs) + $schema_type = strtolower( $schema_type ); + static $cache_avail; + if( isset( $cache_avail[ $server_id ][ $schema_type ] ) ) { + return true; + } + + // Session cache available? + if( isset( $_SESSION[ 'schema' ][ $server_id ][ $schema_type ] ) ) { + $cache_avail[ $server_id ][ $schema_type ] = true; + return true; + } else { + return false; + } +} + +/** + * Returns the cached array of schemaitem objects for the specified + * $schema_type. For list of valid $schema_type values, see above + * schema_cache_available(). Note that internally, this function + * utilizes a two-layer cache, one in memory using a static variable + * for multiple calls within the same page load, and one in a session + * for multiple calls within the same user session (spanning multiple + * page loads). + * + * Returns an array of SchemaItem objects on success or false on failure. + */ +function get_cached_schema( $server_id, $schema_type ) +{ + // Check config to make sure session-based caching is enabled. + if( ! SCHEMA_SESSION_CACHE_ENABLED ) + return false; + + static $cache; + $schema_type = strtolower( $schema_type ); + if( isset( $cache[ $server_id ][ $schema_type ] ) ) { + //echo "Getting memory-cached schema for \"$schema_type\"...
      \n"; + return $cache[ $server_id ][ $schema_type ]; + } + + //echo "Getting session-cached schema for \"$schema_type\"...
      \n"; + if( cached_schema_available( $server_id, $schema_type ) ) { + $schema = $_SESSION[ 'schema' ][ $server_id ][ $schema_type ]; + $cache[ $server_id ][ $schema_type ] = $schema; + return $schema; + } else { + return false; + } +} + +/** + * Caches the specified $schema_type for the specified $server_id. + * $schema_items should be an array of SchemaItem instances (ie, + * an array of ObjectClass, AttributeType, LDAPSyntax, MatchingRuleUse, + * or MatchingRule objects. + * + * Returns true on success of false on failure. + */ +function set_cached_schema( $server_id, $schema_type, $schema_items ) +{ + // Check config to make sure session-based caching is enabled. + if( ! SCHEMA_SESSION_CACHE_ENABLED ) + return false; + + //echo "Setting cached schema for \"$schema_type\"...
      \n"; + // Sanity check. The schema must be in the form of an array + if( ! is_array( $schema_items ) ) { + die( "While attempting to cache schema, passed a non-array for \$schema_items!" ); + return false; + } + // Make sure we are being passed a valid array of schema_items + foreach( $schema_items as $schema_item ) { + if( ! is_subclass_of( $schema_item, 'SchemaItem' ) && + ! 0 == strcasecmp( 'SchemaItem', get_class( $schema_item ) ) ) { + die( "While attempting to cache schema, one of the schema items passed is not a true SchemaItem instance!" ); + return false; + } + } + + $schema_type = strtolower( $schema_type ); + $_SESSION[ 'schema' ][ $server_id ][ $schema_type ] = $schema_items; + return true; +} + ?> diff --git a/search.php b/search.php index e51ed3b..fdd42a4 100644 --- a/search.php +++ b/search.php @@ -1,4 +1,6 @@ - @@ -73,6 +76,10 @@ include 'header.php'; ?> include 'search_form_advanced.php'; +} elseif( $form == 'predefined' ) { + + include 'search_form_predefined.php'; + } else /* Draw simple search form */ { process_config(); @@ -82,13 +89,12 @@ include 'header.php'; ?> - - Searching...\n"; + echo "
      " . $lang['searching'] . "
      \n"; flush(); // prevent script from bailing early on a long delete @set_time_limit( 0 ); - // grab the time limit set in config.php + // grab the size limit set in config.php $size_limit = isset ( $search_result_size_limit ) && is_numeric( $search_result_size_limit ) ? $search_result_size_limit : 0; + $page = isset( $_GET['page'] ) ? $_GET['page'] : 0; $time_start = utime(); if( $scope == 'base' ) $results = @ldap_read( $ds, $base_dn, $filter, $search_result_attributes, - 0, 0, 0, LDAP_DEREF_ALWAYS ); + 0, 0, 0, get_search_deref_setting() ); elseif( $scope == 'one' ) $results = @ldap_list( $ds, $base_dn, $filter, $search_result_attributes, - 0, 0, 0, LDAP_DEREF_ALWAYS ); + 0, 0, 0, get_search_deref_setting() ); else // scope == 'sub' $results = @ldap_search( $ds, $base_dn, $filter, $search_result_attributes, - 0, 0, 0, LDAP_DEREF_ALWAYS ); - + 0, 0, 0, get_search_deref_setting() ); $errno = @ldap_errno( $ds ); + if( ! $results ) { + pla_error( $lang['error_performing_search'], ldap_error( $ds ), ldap_errno( $ds ) ); + } + $time_end = utime(); $time_elapsed = round( $time_end - $time_start, 2 ); $count = @ldap_count_entries( $ds, $results ); + $start_entry = $page * $size_limit; + $end_entry = min( $start_entry + $size_limit + 1, $count+1 ); + ?>
      - - (in seconds). + ' . number_format( $count ) ?> + ( ).
      Notice, search size limit exceeded.
      \n"; - } - - if( $size_limit > 0 && $count > $size_limit ) { - echo "
      Showing first $size_limit results.
      \n"; - + echo "
      " . $lang['size_limit_exceeded'] . "
      \n"; } ?> - +
      + $size_limit ) { + echo sprintf( $lang['showing_results_x_through_y'], "" . number_format($start_entry+1) . "", "" . number_format($end_entry-1) . "" ) . "
      \n"; + $php_self = $_SERVER['PHP_SELF']; + if( $page != 0 ) { + $query_string = array_to_query_string( $_GET, array( 'page' ) ); + $query_string .= '&page=' . ($page-1); + $pager_html .= "‹‹"; + } else { + $pager_html .= "‹‹"; + } + $pager_html .= '  '; + + // for large search results where we page beyone the first 20 pages, + // print elipsis instead of making the pager be super wide. + $elipsis_printed = false; + for( $i=0; $i<$count; $i+=$size_limit ) { + $page_num = $i/$size_limit; + if( $count > $size_limit * 20 && abs( $page_num - $page ) > 10 ) { + if( ! $elipsis_printed ) { + $pager_html .= '...  '; + $elipsis_printed = true; + } + } else if( $page == $page_num ) { + $pager_html .= ($page_num + 1); + $pager_html .= '  '; + $elipsis_printed = false; + } else { + $query_string = array_to_query_string( $_GET, array( 'page' ) ); + $query_string .= '&page=' . $page_num; + $pager_html .= "" . ($page_num+1) . ""; + $pager_html .= '  '; + $elipsis_printed = false; + } + } + if( $page+1 < ( $count / $size_limit ) ) { + $query_string = array_to_query_string( $_GET, array( 'page' ) ); + $query_string .= '&page=' . ($page+1); + $pager_html .= "››"; + } else { + $pager_html .= "››"; + } + + } + echo $pager_html; + // Done drawing pager + ?> +
      +
      - + $size_limit ) { - break; + if( $i <= $start_entry ) { + $entry_id = ldap_next_entry( $ds, $entry_id ); + continue; } - + if( $i >= $end_entry ) + break; $dn = ldap_get_dn( $ds, $entry_id ); $encoded_dn = rawurlencode( $dn ); $rdn = get_rdn( $dn ); @@ -277,9 +355,12 @@ if( isset( $_GET['search'] ) )
@@ -301,6 +382,11 @@ if( isset( $_GET['search'] ) ) } // end while( $entry_id ) + echo '
'; + echo '
'; + echo $pager_html; + echo '
'; + ?>

diff --git a/search_form_advanced.php b/search_form_advanced.php index 1452a44..cfb91c0 100644 --- a/search_form_advanced.php +++ b/search_form_advanced.php @@ -1,4 +1,6 @@ - - +
-()
+( | + )

\n"; + if( is_jpeg_photo( $server_id, $attr ) ) + draw_jpeg_photos( $server_id, $dn, $attr, false, false, 'align="left"' ); + else + foreach( $values as $value ) + echo str_replace( ' ', ' ', + htmlspecialchars( $value ) ) . "
\n"; ?>
@@ -49,7 +55,7 @@ for($i=0;$i<$num_server;$i++){ - + @@ -65,5 +71,9 @@ for($i=0;$i<$num_server;$i++){
+ diff --git a/search_form_predefined.php b/search_form_predefined.php new file mode 100644 index 0000000..5753cce --- /dev/null +++ b/search_form_predefined.php @@ -0,0 +1,51 @@ +
+ diff --git a/search_form_simple.php b/search_form_simple.php index ded2aea..0ae5877 100644 --- a/search_form_simple.php +++ b/search_form_simple.php @@ -1,4 +1,12 @@ - - + diff --git a/search_util.js b/search_util.js index 84232c3..4475171 100644 --- a/search_util.js +++ b/search_util.js @@ -3,7 +3,7 @@ // This JavaScript file defines some functions used by the two search forms for // auto-populating the base DN dynamically when a server is selected from the // drop-down. -// +// $Header: /cvsroot/phpldapadmin/phpldapadmin/search_util.js,v 1.2 2004/03/19 20:17:51 i18phpldapadmin Exp $ //the array to store the server var servers = new Array(); diff --git a/server_info.php b/server_info.php index dd904d4..f23d6a4 100644 --- a/server_info.php +++ b/server_info.php @@ -1,4 +1,6 @@ - @@ -60,25 +91,24 @@ include 'header.php'; -
\n"; ?>
diff --git a/session_functions.php b/session_functions.php new file mode 100644 index 0000000..2884b08 --- /dev/null +++ b/session_functions.php @@ -0,0 +1,104 @@ + diff --git a/style.css b/style.css index 2fd25d9..d614075 100644 --- a/style.css +++ b/style.css @@ -1,3 +1,14 @@ +/* $Header: /cvsroot/phpldapadmin/phpldapadmin/style.css,v 1.34 2004/04/27 12:28:22 uugdave Exp $ */ +span.hint { + font-size: small; + font-weight: normal; + color: #888; +} + +span.x-small { + font-size: x-small; +} + table.schema_oclasses { border-left: 1px solid black; border-right: 1px solid black; @@ -82,6 +93,10 @@ table.confirm th { font-weight: normal; } +table.confirm tr td { + padding: 4px; +} + table.confirm tr.spacer { background-color: #ddd; } @@ -90,17 +105,23 @@ table.confirm tr.even { background-color: #ccc; } -table.confirm tr.odd{ +table.confirm tr.odd { background-color: #eee; } -table.confirm tr td { - padding: 4px; - vertical-align: top; +table.confirm tr td.heading { + text-align: right; + font-size: 75%; } -table.confirm tr td.heading { - font-size: 75%; +table.confirm td.icon { + text-align: center; +} + +table.browse tr td { + border: 0; + margin: 0; + padding: 0; } table.templates tr td { @@ -112,6 +133,18 @@ table.templates tr { height: 25px; } +table.templates td.icon { + text-align: center; +} + +table.exporters tr td { + text-align: left; + vertical-align: center; +} + +table.exporters tr { + height: 25px; +} a img { border: 0px; @@ -241,27 +274,38 @@ h3.subtitle { font-weight: normal; } -table.edit_dn tr.spacer td { - height: 10px; -} - table.edit_dn { - width: 100%; + border-collapse: collapse; + border-spacing: 0px; + empty-cells: show; + width: 500px; } -table.edit_dn th { - background: #777; - color: white; - font-weight: normal; - font-size: 125%; - padding: 5px; +table.edit_dn input { + margin: 1px; +} + +table.edit_dn input.val { + font-size: 14px; + width: 350px; + font-family: arial, helvetica, sans-serif + background-color: white; +} + +table.edit_dn textarea.val { + font-size: 14px; + width: 350px; + font-family: arial, helvetica, sans-serif + background-color: white; } table.edit_dn tr td { padding: 4px; + padding-right: 0px; } table.edit_dn tr td.attr { + background-color: #eee; vertical-align: top; } @@ -281,20 +325,29 @@ table.edit_dn tr td.attr a:hover { } table.edit_dn tr td.val { - text-align: right; + text-align: left; vertical-align: center; - padding-bottom: 15px; + padding-bottom: 10px; + padding-left: 80px; } -/* When an attr is updated, it is displayed in light blue to indicate such */ -table.edit_dn tr.updated_attr { - background: #def; +/** When an attr is updated, it is highlighted to indicate such */ +table.edit_dn tr.updated_attr td.attr { + border-top: 1px dashed green; + border-left: 1px dashed green; + border-right: 1px dashed green; + background-color: #ded; } -table.edit_dn tr.updated_attr td { - border-top: 1px solid black; - border-bottom: 1px solid black; - color: #005; +/** An extra row that sits at the bottom of recently modified attrs to encase them in dashes */ +table.edit_dn tr.updated_attr td.bottom { + border-top: 1px dashed green; +} + +/** Formatting for the value cell when it is the attribute that has been recently modified */ +table.edit_dn tr.updated_attr td.val { + border-left: 1px dashed green; + border-right: 1px dashed green; } /* Neede to prevent sub-tables (like the one in which jpegPhotos are displayed) @@ -390,9 +443,8 @@ ul.search { div.search_result { list-style-type: none; - background: #ffb; padding: 6px; - padding-left: 10px; + padding-left: 20px; margin-right: 40px; } @@ -400,6 +452,7 @@ table.attrs { font-weight: normal; font-size: 75%; margin: 0px; + margin-left: 35px; } table.attrs td { @@ -421,6 +474,11 @@ table.edit_dn_menu { font-size: 75%; } +table.edit_dn_menu td.icon { + width: 16px; + text-align: center; +} + input.scary { background: red; font-weight: bold; @@ -467,6 +525,7 @@ table.create td.heading { div.add_value { font-size: 10pt; margin: 0px; + padding: 0px; } a.logged_in_dn { @@ -497,3 +556,19 @@ h2.doc { p.doc { margin-left: 100px; } + +table.export_form { + font-size: 75%; + width: 400px; +} + +table.export_form tr td { + text-align: left; + vertical-align: top; + padding: 4px; +} + +img.chooser { + /* This makes the chooser image line up properly when placed next to a form element in a table cell*/ + vertical-align: bottom; +} diff --git a/templates/creation/custom.php b/templates/creation/custom.php index f82ed4f..2949ddb 100644 --- a/templates/creation/custom.php +++ b/templates/creation/custom.php @@ -1,4 +1,6 @@ -

Step 1 of 2: Name and ObjectClass(es)

+

@@ -27,20 +29,21 @@ if( $step == 1 ) - - + + - + - + @@ -62,7 +65,7 @@ if( $step == 1 ) - +
RDN: (example: cn=MyNewObject):
Container:
ObjectClass(es): - Hint: You must choose at least one structural objectClass +
@@ -72,16 +75,15 @@ if( $step == 1 ) if( $step == 2 ) { strlen( trim( $rdn ) ) != 0 or - pla_error( "You left the RDN field blank" ); + pla_error( $lang['rdn_field_blank'] ); strlen( trim( $container ) ) == 0 or dn_exists( $server_id, $container ) or - pla_error( "The container you specified (" . htmlspecialchars( $container ) . ") does not exist. " . - "Please go back and try again." ); + pla_error( sprintf( $lang['container_does_not_exist'], htmlspecialchars( $container ) ) ); $friendly_attrs = process_friendly_attr_table(); $oclasses = $_POST['object_classes']; if( count( $oclasses ) == 0 ) - pla_error( "You did not select any ObjectClasses for this object. Please go back and do so." ); + pla_error( $lang['no_objectclasses_selected'] ); $dn = $rdn . ',' . $container; // incrementally build up the all_attrs and required_attrs arrays @@ -103,6 +105,22 @@ if( $step == 2 ) $all_attrs = array_unique( $all_attrs ); sort( $required_attrs ); sort( $all_attrs ); + + // if for some reason "ObjectClass" ends up in the list of + // $all_attrs or $required_attrs, remove it! This is a fix + // for bug 927487 + foreach( $all_attrs as $i => $attr_name ) + if( 0 == strcasecmp( $attr_name, 'objectClass' ) ) { + unset( $all_attrs[$i] ); + $all_attrs = array_values( $all_attrs ); + break; + } + foreach( $required_attrs as $i => $attr_name ) + if( 0 == strcasecmp( $attr_name, 'objectClass' ) ) { + unset( $required_attrs[$i] ); + $required_attrs = array_values( $required_attrs ); + break; + } // remove binary attributes and add them to the binary_attrs array $binary_attrs = array(); @@ -112,34 +130,12 @@ if( $step == 2 ) $binary_attrs[] = $attr_name; } } + + // If we trim any attrs out above, then we will have a gap in the index + // sequence and will get an "undefined index" error below. This prevents + // that from happening. + $all_attrs = array_values( $all_attrs ); - $attr_select_html = ""; - foreach( $all_attrs as $a ) { - // is there a user-friendly translation available for this attribute? - if( isset( $friendly_attrs[ strtolower( $a ) ] ) ) { - $attr_display = htmlspecialchars( $friendly_attrs[ strtolower( $a ) ] ) . " (" . - htmlspecialchars($a) . ")"; - } else { - $attr_display = htmlspecialchars( $a ); - } - - $attr_select_html .= "\n"; - } - - $binary_attr_select_html = ""; - if( count( $binary_attrs ) > 0 ) { - foreach( $binary_attrs as $a ) { - if( isset( $friendly_attrs[ strtolower( $a ) ] ) ) { - $attr_display = htmlspecialchars( $friendly_attrs[ strtolower( $a ) ] ) . " (" . - htmlspecialchars( $a ) . ")"; - } else { - $attr_display = htmlspecialchars( $a ); - } - - $binary_attr_select_html .= "\n"; - } - } - // add the required attribute based on the RDN provided by the user // (ie, if the user specifies "cn=Bob" for their RDN, make sure "cn" is // in the list of required attributes. @@ -149,14 +145,8 @@ if( $step == 2 ) $required_attrs[] = $rdn_attr; ?> -

Step 2 of 2: Specify attributes and values

+

- Instructions: - Enter values for the required attributes.
- Then specify any optional attributes. 0 ) { ?> - Finally, you may
specify optional binary attributes from a file if needed. -
-
@@ -166,22 +156,18 @@ if( $step == 2 ) - + \n"; + echo "\n"; } else foreach( $required_attrs as $count => $attr ) { ?> - - - - - - + ?> + - + - + - - - - - - - + + + + + + 0 ) { ?> - + - - - - - - - + -
Required Attributes
(none)
(" . $lang['none'] . ")
+ " . + $attr_display = "" . htmlspecialchars( $friendly_attrs[ strtolower( $attr ) ] ) . ""; } else { $attr_display = htmlspecialchars( $attr ); @@ -189,47 +175,92 @@ if( $step == 2 ) echo $attr_display; - ?>
" name="required_attrs[]" - value="" size="40" /> + value="" size="40" />
Optional Attributes
(none)
()
-
Optional Binary Attributes
+
- + +
- +
+ - + + +$attr_display\n"; + } + return $attr_select_html; +} + +function get_binary_attr_select_html( $binary_attrs, $friendly_attrs, $highlight_attr=null ) +{ + $binary_attr_select_html = ""; + if( ! is_array( $binary_attrs ) ) + return null; + if( count( $binary_attrs ) == 0 ) + return null; + foreach( $binary_attrs as $a ) { + // is there a user-friendly translation available for this attribute? + if( isset( $friendly_attrs[ strtolower( $a ) ] ) ) { + $attr_display = htmlspecialchars( $friendly_attrs[ strtolower( $a ) ] ) . " (" . + htmlspecialchars( $a ) . ")"; + } else { + $attr_display = htmlspecialchars( $a ); + } + $binary_attr_select_html .= " diff --git a/templates/creation/new_address_template.php b/templates/creation/new_address_template.php index fb8cabc..e1cd37e 100755 --- a/templates/creation/new_address_template.php +++ b/templates/creation/new_address_template.php @@ -1,4 +1,6 @@ - + + + +

New Kolab Entry
+(extended InetOrgPerson)

+
+ + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Name (First/Last): + + +
Common name:
Email (uid):
Password:
Title:
E-Mail Alias:
Organization:
Organizational Unit:
Room number:
Address:
Post Box:
City:
Postal code:
Country:
Work phone:
Fax:
Container: +

+
+ + +

Confirm entry creation:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Common name:
First name:
Last name:
Organization:
City:
Postal code:
Street:
Work phone:
Fax:
Email:
Container:
+
+
+ + + + + + diff --git a/templates/creation/new_nt_machine.php b/templates/creation/new_nt_machine.php index 8db0d95..1275b28 100644 --- a/templates/creation/new_nt_machine.php +++ b/templates/creation/new_nt_machine.php @@ -1,4 +1,6 @@ -

+

diff --git a/templates/creation/new_posix_group_template.php b/templates/creation/new_posix_group_template.php index 320967f..41e9e23 100644 --- a/templates/creation/new_posix_group_template.php +++ b/templates/creation/new_posix_group_template.php @@ -1,4 +1,6 @@ +$now = time(); +$step = 1; +if( isset($_POST['step']) ) + $step = $_POST['step']; + + //check if the sambaSamAccount objectClass is availaible + if( get_schema_objectclass( $server_id, 'sambaSamAccount' ) == null ) + pla_error( "You LDAP server does not have schema support for the sambaSamAccount objectClass. Cannot continue." ); + + 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." ); + ?> + gidNumber = form.gid_number.value; + if( form.samba_group[0].checked ){ + form.custom_rid.value = ""; + } + else { + form.custom_rid.value = (2*gidNumber)+1001; + } +} +--> +

New Samba3 User Account

- +
@@ -101,27 +119,82 @@ User name: + onChange="autoFillHomeDir(this.form)" onExit="autoFillHomeDir(this.form,this)" /> - Password: + User Password: - Password: + User Password: Encryption: - - - crypt - + + + + Samba Password: + +
+
+ + Use Unix Password +
+
+ + Null Password +
+
+ + No Password +
+
+ + + + + +
New Password : +
+
+
+
+
+ + + + + + + +
Existing Password :
+
+ LM Password: + +
+
+ NT Password: + +
+
+
+
+ + + @@ -150,33 +223,58 @@ - - Unix Group: - + + + : + + + + +
+ - + Windows Group: - Built-In: +
+ + + + + + + +
+ +
+
Custom:
+
+ + +
+
+ + @@ -197,7 +295,7 @@ createSambaPasswords( $clearSambaPassword ) ){ + $sambaLMPassword = $mkntPassword->getsambaLMPassword(); + $sambaNTPassword = $mkntPassword->getsambaNTPassword(); + $smb_passwd_creation_success = 1; + } } ?> @@ -266,7 +410,7 @@ - + @@ -284,14 +428,13 @@ - +
@@ -299,14 +442,19 @@ User name: First name: Last name: - UID Number: - Login Shell: - Samba SID: - GID Number: + Login Shell: + UID Number: + Samba SID: + GID Number: + Samba Group Sid: Container: Home dir: + User Password:[secret] - Password:[secret] + Samba Password:[secret] + Password Last Set: + Password Can Change: + Password Must Change:
diff --git a/templates/creation/new_smbgroup_template.php b/templates/creation/new_smbgroup_template.php index 6f2aca1..e413078 100644 --- a/templates/creation/new_smbgroup_template.php +++ b/templates/creation/new_smbgroup_template.php @@ -1,4 +1,6 @@

New Samba Group Mapping

@@ -66,19 +62,20 @@ function autoFillSambaRID( form ){ - - + + - + - + + + + + + + @@ -98,7 +135,7 @@ function autoFillSambaRID( form ){ - + + + + + +'; - echo ''; + echo ''; echo ''; echo ''; // 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)? + // present the user with a login link (for 'cookie' and 'session' auth_types)? if( have_auth_info( $server_id ) ) { if( pla_ldap_connect( $server_id ) ) { @@ -109,23 +108,29 @@ foreach( $servers as $server_id => $server_tree ) { ' href="' . $search_href . '">' . $lang['search'] . ' | '; echo '' . $lang['refresh'] . ' | '; - echo '' . $lang['create'] . ' | '; + if (show_create_enabled($server_id)) + echo '' . $lang['create'] . ' | '; echo '' . $lang['info'] . ' | '; echo '' . $lang['import'] . ''; - if( $servers[ $server_id ][ 'auth_type' ] == 'form' ) + if( $servers[ $server_id ][ 'auth_type' ] != 'config' ) echo ' | ' . $lang['logout'] . ''; echo ' )'; - if( $servers[$server_id]['auth_type'] == 'form' && have_auth_info( $server_id ) ) - echo ""; + if( $servers[$server_id]['auth_type'] != 'config' && have_auth_info( $server_id ) ) { + $logged_in_dn = get_logged_in_dn( $server_id ); + echo ""; + } if( is_server_read_only( $server_id ) ) echo ""; @@ -147,10 +152,22 @@ foreach( $servers as $server_id => $server_tree ) { $expand_href = "collapse.php?server_id=$server_id&" . "dn=" . rawurlencode( $base_dn ); $expand_img = "images/minus.png"; + $expand_alt = "-"; + $child_count = number_format( count( $tree[$server_id][$base_dn] ) ); } else { $expand_href = "expand.php?server_id=$server_id&" . "dn=" . rawurlencode( $base_dn ); $expand_img = "images/plus.png"; + $expand_alt = "+"; + $limit = isset( $search_result_size_limit ) ? $search_result_size_limit : 50; + if( is_server_low_bandwidth( $server_id ) ) { + $child_count = null; + } else { + $child_count = count( get_container_contents( $server_id, $base_dn, $limit+1, + '(objectClass=*)', get_tree_deref_setting() ) ); + if( $child_count > $limit ) + $child_count = $limit . '+'; + } } $edit_href = "edit.php?server_id=$server_id&dn=" . rawurlencode( $base_dn ); @@ -165,11 +182,14 @@ foreach( $servers as $server_id => $server_tree ) { } echo ""; + echo "\"$expand_alt\""; echo "\n"; + echo "\"img\"\n"; echo "\n"; + echo " target=\"right_frame\">" . pretty_print_dn( $base_dn ) . ''; + if( $child_count ) + echo " ($child_count)"; + echo "\n"; echo "\n"; } else { // end if( $base_dn ) @@ -205,11 +225,13 @@ foreach( $servers as $server_id => $server_tree ) { draw_tree_html( $child_dn, $server_id, 0 ); if( ! is_server_read_only( $server_id ) ) { echo ''; - echo ''; - echo ''; + if( show_create_enabled( $server_id ) ) { + echo ''; + echo ''; + } } } @@ -217,11 +239,11 @@ foreach( $servers as $server_id => $server_tree ) { // could not connect to LDAP server echo "\n"; echo "\n"; - echo "\n"; + echo "\n"; echo "\n"; echo "\n"; - if( $servers[ $server_id ][ 'auth_type' ] == 'form' ) { + if( $servers[ $server_id ][ 'auth_type' ] != 'config' ) { $logout_href = 'logout.php?server_id=' . $server_id; echo "\n"; echo "\n"; @@ -244,7 +266,7 @@ foreach( $servers as $server_id => $server_tree ) { echo ''; echo ''; echo ''; + echo '' . $lang['login'] . ''; echo ''; } @@ -276,7 +298,7 @@ exit; */ function draw_tree_html( $dn, $server_id, $level=0 ) { - global $servers, $tree, $tree_icons, $lang; + global $servers, $tree, $tree_icons, $lang, $search_result_size_limit; $id = $server_id; $encoded_dn = rawurlencode( $dn ); @@ -310,29 +332,38 @@ function draw_tree_html( $dn, $server_id, $level=0 ) if( isset( $tree[$server_id][$dn] ) ) { ?> - (' . count( $tree[$server_id][$dn] ) . ')'; + - $limit ) + $child_count = $limit . '+'; + } } ?> @@ -343,23 +374,23 @@ function draw_tree_html( $dn, $server_id, $level=0 ) foreach( $tree[$server_id][$dn] as $dn ) { draw_tree_html( $dn, $server_id, $level+1 ); } + if( show_create_enabled( $server_id ) ) { - // print the "Create New object" link. - $create_href = "create_form.php?server_id=$server_id&container=$encoded_dn"; - echo ''; - for( $i=0; $i<=$level; $i++ ) { + // print the "Create New object" link. + $create_href = "create_form.php?server_id=$server_id&container=$encoded_dn"; + echo ''; + for( $i=0; $i<=$level; $i++ ) { + echo ''; + } echo ''; + echo ''; + echo ''; + echo ''; } - echo ''; - echo ''; - echo ''; } - - echo ''; - } ?> diff --git a/unit_test.php b/unit_test.php index e864232..f32a8ed 100644 --- a/unit_test.php +++ b/unit_test.php @@ -1,17 +1,107 @@ "; require_once realpath( 'functions.php' ); -$dns1 = array( 'cn=joe,dc=example,dc=com', 'cn=joe,dc=example,dc=com', 'cn = bob, dc= example,dc =com' ); -$dns2 = array( 'cn=joe,dc=example,dc=com', 'CN =joe,dc=Example,dc =com', 'cn= bob, dc= example,dc =com' ); - -for( $i=0; $i"; } -// TESTING PLA_EXPLODE_DN() -var_dump( pla_explode_dn( "cn=,dc=example,dc=" ) ); -var_dump( ldap_explode_dn( "cn=,dc=example,dc=", 0 ) ); +// test pla_verbose_error() using ldap_error_codes.txt +if( false) { + for( $i=0; $i<255; $i++ ) { + $num = "0x" . str_pad( dechex( $i ), 2, "0", STR_PAD_LEFT ); + var_dump( $num ); + print_r( pla_verbose_error( $num ) ); + } +} + +// tests is_dn_string() +if( false ) { + $dn_strs = array( ' cn=joe,dc=example,dc=com', + 'cn = joe, dc= example, dc =com', + ' cn=asdf asdf, ou= foo bar, o =foo bar, dc=com', + 'cn=True!=False,dc=example,dc=com' ); + $not_dn_strs = array( ' asdf asdf ', + '== asdf asdf ', + ' = = = = = = = =' ); + + echo "All should be true:\n"; + foreach( $dn_strs as $str ) { + echo "\"$str\"\n"; + var_dump( is_dn_string( $str ) ); + } + echo "\nAll should be false:\n"; + foreach( $not_dn_strs as $str ) { + echo "\"$str\"\n"; + var_dump( is_dn_string( $str ) ); + } +} + +// tests pla_compare_dns() +if( false ) { + echo "Should all be 0:
"; + $dns1 = array( 'cn=joe,dc=example,dc=com', 'cn=joe,dc=example,dc=com', 'cn = bob, dc= example,dc =com' ); + $dns2 = array( 'cn=joe,dc=example,dc=com', 'CN =joe,dc=Example,dc =com', 'cn= bob, dc= example,dc =com' ); + + for( $i=0; $i"; + $dns1 = array( 'dc=test,dc=example,dc=com', 'cn=Fred,cn=joe,dc=example,dc=com', 'cn=joe2,dc=example,dc=com', 'cn = bob, dc= example,dc =com' ); + $dns2 = array( 'dc=example, dc=com', 'cn=joe,dc=example,dc=com', 'CN =joe,dc=Example2,dc =com', 'cn= 2bob, dc= example,dc =com' ); + + for( $i=0; $i\n"; + echo "Should be dc=com: "; + echo get_rdn( "dc=com" ); + echo "
\n"; + echo "Should be Fred: "; + echo get_rdn( "Fred" ); + echo "
\n"; +} + +// testing get_container() +if( false ) { + echo "Should be ou=People-copy1,ou=People-copy2,ou=People2,dc=example,dc=com: "; + var_dump( get_container( "uid=bäb,ou=People-copy1,ou=People-copy2,ou=People2,dc=example,dc=com" ) ); + echo "
\n"; + echo "Should be null: "; + var_dump( get_container( "dc=com" ) ); + echo "
\n"; + echo "Should be null: "; + var_dump( get_container( "Fred" ) ); + echo "
\n"; +} + +// tests pla_explode_dn() +if( false ) { + var_dump( pla_explode_dn( "cn=,dc=example,dc=" ) ); +} + +?> diff --git a/update.php b/update.php index 0ca1b27..1df67ea 100644 --- a/update.php +++ b/update.php @@ -1,4 +1,6 @@ - $val ) foreach( $update_array as $attr_name => $val ) if( true !== preAttrModify( $server_id, $dn, $attr_name, $val ) ) unset( $update_array[ $attr_name ] ); + elseif( is_attr_read_only( $attr ) ) + pla_error( sprintf( $lang['attr_is_read_only'], htmlspecialchars( $attr_name ) ) ); $ds = pla_ldap_connect( $server_id ); $res = @ldap_modify( $ds, $dn, $update_array ); @@ -71,10 +75,11 @@ if( $res ) if( 0 === strcasecmp( $attr_name, 'userPassword' ) && check_server_id( $server_id ) && isset( $servers[ $server_id ][ 'auth_type' ] ) && - $servers[ $server_id ][ 'auth_type' ] == 'form' && + ( $servers[ $server_id ][ 'auth_type' ] == 'cookie' || + $servers[ $server_id ][ 'auth_type' ] == 'session' ) && 0 === pla_compare_dns( get_logged_in_dn( $server_id ), $dn ) ) { - unset_cookie_login_dn( $server_id ); + unset_login_dn( $server_id ); include realpath( 'header.php' ); ?> @@ -84,10 +89,10 @@ if( $res )
- Modification successful!
+

- Since you changed your password, you must
- now login again with your new password. +   +
diff --git a/update_confirm.php b/update_confirm.php index f260bed..94bb946 100644 --- a/update_confirm.php +++ b/update_confirm.php @@ -1,215 +1,217 @@ - $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:     :

- - $old_val ) -{ - // Did the user delete the field? - if( ! isset( $new_values[ $attr ] ) ) { - $update_array[ $attr ] = ''; - } - // did the user change the field? - elseif( $old_val != $new_values[ $attr ] ) { - - $new_val = $new_values[ $attr ]; - - // 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( 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; -} - -// strip empty vals from update_array and ensure consecutive indices for each attribute -foreach( $update_array as $attr => $val ) { - if( is_array( $val ) ) { - foreach( $val as $i => $v ) - if( null == $v || 0 == strlen( $v ) ) - unset( $update_array[$attr][$i] ); - $update_array[$attr] = array_values( $update_array[$attr] ); - } -} - -// at this point, the update_array should look like this (example): -// Array ( -// cn => Array( -// [0] => 'Dave', -// [1] => 'Bob' ) -// sn => 'Smith', -// telephoneNumber => '555-1234' ) -// This array should be ready to be passed to ldap_modify() - -?> - 0 ) { ?> - -
-
- -
-
- -
Samba Group Name: (example: admins, do not include "cn=")Unix Name: (example: admins, do not include "cn=")
Display Name:Windows Name:
GID Number: (example: 2000) (example: 2000)
Samba Sid: +
+
+
Built-In:
+
+ +
+
+
+
Custom:
+
+ + +
+
+
+
Container DN:
SambaGroupType Number:SambaGroupType :
Description:
Members: (example: dsmith)
@@ -130,15 +172,31 @@ function autoFillSambaRID( form ){ - + @@ -161,16 +219,19 @@ function autoFillSambaRID( form ){ - + - " /> + - + + + + @@ -179,13 +240,14 @@ function autoFillSambaRID( form ){ Really create this new Posix Group entry?

- + - + - + diff --git a/templates/creation/new_smbuser_template.php b/templates/creation/new_smbuser_template.php index dcb3853..23300b0 100644 --- a/templates/creation/new_smbuser_template.php +++ b/templates/creation/new_smbuser_template.php @@ -1,4 +1,6 @@ + + + + + + + + + + + + +

Group:

+ +
+ Using the group of names template. + You may switch to the default template +
+ +List of Members (' . ( $unique ? 'unique' : 'non-unique' ) . ')'; +if( ! is_array( $members ) || 0 == count( $members ) ) { + echo "(none)"; + echo "
"; + echo "
"; +} else { + echo "
    "; + for( $i=0; $i"; + echo ""; + echo htmlspecialchars( $member ) . ""; + echo " (remove)"; + + $member_cn = get_object_attr( $server_id, $member, 'cn' ); + $member_cn = @$member_cn[0]; + $member_sn = get_object_attr( $server_id, $member, 'sn' ); + $member_sn = @$member_sn[0]; + echo ''; + // Don't display the SN if it is a subset of the CN + if( false !== strpos( $member_cn, $member_sn ) ) + $member_sn = ' '; + if( $member_sn && $member_cn ) + echo '
      Name: ' . htmlspecialchars( $member_cn . ' ' . $member_sn ); + $object_classes = get_object_attr( $server_id, $member, 'objectClass' ); + if( is_array( $object_classes ) ) + echo '
      objectClasses: ' . implode( ', ', $object_classes ); + echo '
    '; + ""; + } + echo "
"; +} + +?> + + + + + + +
+ Add a new member:
+ +
+ +
+ + diff --git a/templates/modification/user.php b/templates/modification/user.php index da3de27..1694dac 100644 --- a/templates/modification/user.php +++ b/templates/modification/user.php @@ -1,4 +1,6 @@ - -
Using the user template. You may switch to the default template diff --git a/templates/template_config.php b/templates/template_config.php index 4734969..391582f 100644 --- a/templates/template_config.php +++ b/templates/template_config.php @@ -1,4 +1,6 @@ 'images/user.png', 'handler' => 'new_address_template.php' ); +$templates[] = + array( 'desc' => 'Kolab User Entry', + 'icon' => 'images/user.png', + 'handler' => 'new_kolab_template.php' ); + $templates[] = array( 'desc' => 'Organizational Unit', 'icon' => 'images/ou.png', @@ -79,6 +86,11 @@ $templates[] = array( 'desc' => 'Simple Security Object', 'icon' => 'images/user.png', 'handler' => 'new_security_object_template.php' ); +$templates[] = + array( 'desc' => 'Mozilla User', + 'icon' => 'images/user.png', + 'handler' => 'mozilla_template.php' ); + $templates[] = array( 'desc' => 'Custom', @@ -86,6 +98,19 @@ $templates[] = 'handler' => 'custom.php' ); +/*##################################################################################### +## POSIX GROUP TEMPLATE CONFIGURATION ## +## ---------------------------------- ## +## ## +#####################################################################################*/ + +// uncomment to set the base dn of posix groups +// default is set to the base dn of the server +//$base_posix_groups="ou=People,dc=example,dc=com"; + + + + /*###################################################################################### ## SAMBA TEMPLATE CONFIGURATION ## ## ---------------------------- ## @@ -100,12 +125,26 @@ $templates[] = $mkntpwdCommand = "./templates/creation/mkntpwd"; // Default domains definition (Customize) +// (use `net getlocalsid` on samba server) $default_samba3_domains = array(); $default_samba3_domains[] = array( 'name' => 'My Samba domain Name', - 'sid' => 'S-1-5-21-1234567891-123456789-123456789' ); + 'sid' => 'S-1-5-21-479559372-1547523452-3818884970' ); + +// The base dn of samba group. (CUSTOMIZE) +//$samba_base_groups = "ou=Groups,ou=samba,dc=example,dc=org"; +//Definition of built-in local groups +$built_in_local_groups = array( "S-1-5-32-544" => "Administrators", + "S-1-5-32-545" => "Users", + "S-1-5-32-546" => "Guests", + "S-1-5-32-547" => "Power Users", + "S-1-5-32-548" => "Account Operators", + "S-1-5-32-549" => "Server Operators", + "S-1-5-32-550" => "Print Operators", + "S-1-5-32-551" => "backup Operators", + "S-1-5-32-552" => "Replicator" ); /*###################################################################################### @@ -123,11 +162,6 @@ $default_samba3_domains[] = function get_template( $server_id, $dn ) { - - // For now, just use default. We will add more templates for 0.9.2. - // If you have custom modification templates, just modify this. - return 'default'; - // fetch and lowercase all the objectClasses in an array $object_classes = get_object_attr( $server_id, $dn, 'objectClass', true ); @@ -138,9 +172,14 @@ function get_template( $server_id, $dn ) $object_classes[$i] = strtolower( $class ); $rdn = get_rdn( $dn ); + if( in_array( 'groupofnames', $object_classes ) || + in_array( 'groupofuniquenames', $object_classes ) ) + return 'group_of_names'; + /* 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'; @@ -164,4 +203,69 @@ function get_samba3_domains(){ return $default_samba3_domains; } + +/** + * Utily class to get the samba passwords. + */ + +class MkntPasswdUtil{ + + + var $clearPassword = NULL; + var $sambaPassword ; + function MkntPasswdUtil(){ + $sambaPassword = array("sambaLMPassword" => NULL, + "sambaNTPassword" => NULL); + } + + function createSambaPasswords($password){ + global $mkntpwdCommand; + $this->clearPassword = $password; + file_exists ( $mkntpwdCommand ) && is_executable ( $mkntpwdCommand ) or pla_error(' Unable to create the Samba passwords. Please, check the configuration in template_config.php'); + $sambaPassCommand = $mkntpwdCommand . " " . $password; + if($sambaPassCommandOutput = shell_exec($sambaPassCommand)){ + $this->sambaPassword['sambaLMPassword'] = trim( substr( $sambaPassCommandOutput , 0 , strPos( $sambaPassCommandOutput,':' ) ) ); + $this->sambaPassword['sambaNTPassword'] = trim( substr( $sambaPassCommandOutput, strPos( $sambaPassCommandOutput ,':' ) +1 ) ); + return true; + } + else{ + return false; + } + } + + function getSambaLMPassword(){ + return $this->sambaPassword['sambaLMPassword']; + } + + function getSambaNTPassword(){ + return $this->sambaPassword['sambaNTPassword']; + } + + function getSambaClearPassword(){ + return $this->clearPassword; + } + + function valueOf($key){ + return $this->sambaPassword[$key]; + } + +} + + +/** + * Return posix group entries + * + */ + +function get_posix_groups( $server_id , $base_dn = NULL ){ + global $servers; + if( is_null( $base_dn ) ) + $base_dn = $servers[$server_id]['base']; + + $results = pla_ldap_search( $server_id, "objectclass=posixGroup", $base_dn, array() ); + if( !$results ) + return false; + else + return $results; +} ?> diff --git a/tree.php b/tree.php index 90b2a35..69ba6b6 100644 --- a/tree.php +++ b/tree.php @@ -1,4 +1,6 @@ +include 'header.php'; +?> -

phpLDAPadmin -

Name
Common Name
Container
display Name
gidNumber
sambaSid
sambaSID
sambaGroupType
Member UIDs +
description
Member UIDs $uid ) echo htmlspecialchars($uid) . "
"; ?>
- + - + + + + +
<?php echo $lang['light']; ?> -
<?php echo $lang['bug']; ?> -
<?php echo $lang['donate']; ?>
@@ -67,9 +65,10 @@ include 'header.php'; ?> $server_tree ) { - if( $servers[$server_id]['host'] != '' ) { + if( isset( $servers[$server_id] ) && trim( $servers[$server_id]['host'] ) != '' ) { // Does this server want mass deletion availble? if( mass_delete_enabled( $server_id ) ) { @@ -79,13 +78,13 @@ foreach( $servers as $server_id => $server_tree ) { $server_name = $servers[$server_id]['name']; echo '
server' . $lang['server'] . ''; echo '' . htmlspecialchars( $server_name ) . '
" . - $lang['logged_in_as'] . "" . - htmlspecialchars(get_logged_in_dn($server_id)) . "" . - "
" . $lang['logged_in_as']; + if( strcasecmp( "anonymous", $logged_in_dn ) ) + echo "" . + pretty_print_dn( $logged_in_dn ) . ""; + else + echo "Anonymous"; + echo "
" . "(" . $lang['read_only'] . ")
"; - echo ""; - echo "" . pretty_print_dn( $base_dn ) . "
' . $lang['create_new'] . '
' . $lang['new'] . '' . $lang['create_new'] . '
\""" . $lang['could_not_connect'] . "
- plus + - - minus + + + name="_">img - + + () +
\"'' . + $lang['create_new'] . '
' . - $lang['create_new'] . '
- - - - - - - $new_val ) { $counter++ ?> - - - - \n\n"; - } - - ?> - -
- "; - else - echo htmlspecialchars( utf8_encode( $old_values[ $attr ] ) ) . "
"; - echo "
"; - - // is this a multi-valued attribute? - if( is_array( $new_val ) ) { - foreach( $new_val as $i => $v ) { - if( $v == '' ) { - // remove it from the update array if it's empty - unset( $update_array[ $attr ][ $i ] ); - $update_array[ $attr ] = array_values( $update_array[ $attr ] ); - } else { - echo htmlspecialchars( utf8_encode( $v ) ) . "
"; - } - } - - // was this a multi-valued attribute deletion? If so, - // fix the $update_array to reflect that per update_confirm.php's - // expectations - if( $update_array[ $attr ] == array( 0 => '' ) || $update_array[ $attr ] == array() ) { - $update_array[ $attr ] = ''; - echo '' . $lang['attr_deleted'] . ''; - } - } - else - if( $new_val != '' ) - echo htmlspecialchars( $new_val ) . "
"; - else - echo '' . $lang['attr_deleted'] . ''; - echo "
-
- - - - - - -
- -
- - - $val ) { ?> - - $v ) { ?> - - - - - - - - - -
-
- -
- - - -
-
-
- - - - -
- - . -
- - - - - - - + + +

+

Server:     :

+ $old_val ) +{ + // Did the user delete the field? + if( ! isset( $new_values[ $attr ] ) ) { + $update_array[ $attr ] = ''; + } + // did the user change the field? + elseif( $old_val != $new_values[ $attr ] ) { + + $new_val = $new_values[ $attr ]; + + // special case for userPassword attributes + if( 0 == strcasecmp( $attr, 'userPassword' ) && $new_val != '' ) { + $new_val = password_hash( $new_val, $_POST['enc_type'] ); + $password_already_hashed = true; + } + // special case for samba password + else if (( 0 == strcasecmp($attr,'sambaNTPassword') || 0 == strcasecmp($attr,'sambaLMPassword')) && trim($new_val[0]) != '' ){ + $mkntPassword = new MkntPasswdUtil(); + $mkntPassword->createSambaPasswords( $new_val[0] ) or pla_error("Unable to create samba password. Please check your configuration in template_config.php"); + $new_val = $mkntPassword->valueOf($attr); + } + $update_array[ $attr ] = $new_val; + } +} + +// special case check for a new enc_type for userPassword (not otherwise detected) +if( isset( $_POST['enc_type'] ) && + ! isset( $password_already_hashed ) && + $_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; +} + +// strip empty vals from update_array and ensure consecutive indices for each attribute +foreach( $update_array as $attr => $val ) { + if( is_array( $val ) ) { + foreach( $val as $i => $v ) + if( null == $v || 0 == strlen( $v ) ) + unset( $update_array[$attr][$i] ); + $update_array[$attr] = array_values( $update_array[$attr] ); + } +} + +// at this point, the update_array should look like this (example): +// Array ( +// cn => Array( +// [0] => 'Dave', +// [1] => 'Bob' ) +// sn => 'Smith', +// telephoneNumber => '555-1234' ) +// This array should be ready to be passed to ldap_modify() + +?> + 0 ) { ?> + +
+
+ +
+
+ + + + + + + + + $new_val ) { $counter++ ?> + + + + \n\n"; + } + + ?> + +
+ "; + else + if( 0 == strcasecmp( $attr, 'userPassword' ) && obfuscate_password_display() ) + echo preg_replace( '/./', '*', $old_values[ $attr ] ) . "
"; + else + echo nl2br( htmlspecialchars( $old_values[ $attr ] ) ) . "
"; + echo "
"; + + // is this a multi-valued attribute? + if( is_array( $new_val ) ) { + foreach( $new_val as $i => $v ) { + if( $v == '' ) { + // remove it from the update array if it's empty + unset( $update_array[ $attr ][ $i ] ); + $update_array[ $attr ] = array_values( $update_array[ $attr ] ); + } else { + echo nl2br( htmlspecialchars( $v ) ) . "
"; + } + } + + // was this a multi-valued attribute deletion? If so, + // fix the $update_array to reflect that per update_confirm.php's + // expectations + if( $update_array[ $attr ] == array( 0 => '' ) || $update_array[ $attr ] == array() ) { + $update_array[ $attr ] = ''; + echo '' . $lang['attr_deleted'] . ''; + } + } + else + if( $new_val != '' ) + if( 0 == strcasecmp( $attr, 'userPassword' ) && obfuscate_password_display() ) + echo preg_replace( '/./', '*', $new_val ) . "
"; + else + echo htmlspecialchars( $new_val ) . "
"; + else + echo '' . $lang['attr_deleted'] . ''; + echo "
+
+ + + + + + +
+ +
+ + + $val ) { ?> + + $v ) { ?> + + + + + + + + + +
+
+ +
+ + + +
+
+
+ + + + +
+ + . +
+ + + + + + + diff --git a/view_jpeg_photo.php b/view_jpeg_photo.php index 7645598..6bab1b8 100644 --- a/view_jpeg_photo.php +++ b/view_jpeg_photo.php @@ -1,4 +1,6 @@ @@ -15,8 +17,8 @@

| - - + | +