diff --git a/INSTALL b/INSTALL index 78ea6f7..7618b9a 100644 --- a/INSTALL +++ b/INSTALL @@ -1,5 +1,5 @@ For install instructions in non-English languages, see the wiki: - http://wiki.pldapadmin.com + http://wiki.phpldapadmin.info * Requirements @@ -17,7 +17,7 @@ For install instructions in non-English languages, see the wiki: * For additional help See the wiki: - http://wiki.pldapadmin.com + http://wiki.phpldapadmin.info Join our mailing list: https://lists.sourceforge.net/lists/listinfo/phpldapadmin-devel diff --git a/config/config.php.example b/config/config.php.example index 1e4c80f..d119537 100644 --- a/config/config.php.example +++ b/config/config.php.example @@ -1,4 +1,9 @@ default->appearance['lang'] = array( - * 'desc'=>'Language', - * 'default'=>'auto'); + * 'desc'=>'Language', + * 'default'=>'auto'); * * to override this, use $config->custom->appearance['lang'] = 'en'; * @@ -55,6 +60,15 @@ $config->custom->session['blowfish'] = ''; // $config->custom->jpeg['tmpdir'] = "/tmp"; // Example for Unix systems # $config->custom->jpeg['tmpdir'] = "c:\\temp"; // Example for Windows systems +/* Set this to (bool)true if you do NOT want a random salt used when + calling crypt(). Instead, use the first two letters of the user's + password. This is insecure but unfortunately needed for some older + environments. */ +# $config->custom->password['no_random_crypt_salt'] = true; + +/* Configure what objects are shown in left hand tree */ +// $config->custom->appearance['tree_filter'] = '(objectclass=*)'; + /*********************************************/ /* Define your LDAP servers in this section */ /*********************************************/ @@ -117,10 +131,10 @@ $ldapservers->SetValue($i,'server','name','My LDAP Server'); /* Enable SASL authentication LDAP SASL authentication requires PHP 5.x configured with --with-ldap-sasl=DIR. If this option is disabled (ie, set to false), then all other sasl options are ignored. */ -// $ldapservers->SetValue($i,'server','sasl_auth', false); +// $ldapservers->SetValue($i,'server','sasl_auth',false); /* SASL auth mechanism */ -// $ldapservers->SetValue($i,'server','sasl_mech', "PLAIN"); +// $ldapservers->SetValue($i,'server','sasl_mech','PLAIN'); /* SASL authentication realm name */ // $ldapservers->SetValue($i,'server','sasl_realm',''); @@ -134,13 +148,13 @@ $ldapservers->SetValue($i,'server','name','My LDAP Server'); /* SASL authorization id regex and replacement When sasl_authz_id property is not set (default), phpLDAPAdmin will try to figure out authorization id by itself from bind distinguished name (DN). - + This procedure is done by calling preg_replace() php function in the following way: - + $authz_id = preg_replace($sasl_authz_id_regex,$sasl_authz_id_replacement, - $bind_dn); - + $bind_dn); + For info about pcre regexes, see: - pcre(3), perlre(3) - http://www.php.net/preg_replace */ @@ -185,7 +199,7 @@ $ldapservers->SetValue($i,'server','name','My LDAP Server'); /* If 'login_attr' is used above such that phpLDAPadmin will search for your DN at login, you may restrict the search to a specific objectClass. EG, set this to 'posixAccount' or 'inetOrgPerson', depending upon your setup. */ -// $ldapservers->SetValue($i,'login','class',''); +// $ldapservers->SetValue($i,'login','class',null); /* Specify true If you want phpLDAPadmin to not display or permit any modification to the LDAP server. */ @@ -208,50 +222,50 @@ $ldapservers->SetValue($i,'server','name','My LDAP Server'); // $ldapservers->SetValue($i,'auto_number','mechanism','search'); /* The DN of the search base when the 'search' mechanism is used above. */ -// $ldapservers->SetValue($i,'auto_number','search_base','ou=People,dc=example,dc=com'); +# $ldapservers->SetValue($i,'auto_number','search_base','ou=People,dc=example,dc=com'); /* The minimum number to use when searching for the next available UID number (only when 'search' is used for auto_uid_number_mechanism' */ // $ldapservers->SetValue($i,'auto_number','min','1000'); /* The DN of the uidPool entry when 'uidpool' mechanism is used above. */ -// $servers[$i]['auto_uid_number_uid_pool_dn'] = 'cn=uidPool,dc=example,dc=com'; +# $servers[$i]['auto_uid_number_uid_pool_dn'] = 'cn=uidPool,dc=example,dc=com'; /* If you set this, then phpldapadmin will bind to LDAP with this user ID when searching for the uidnumber. The idea is, this user id would have full (readonly) access to uidnumber in your ldap directory (the logged in user may not), so that you can be guaranteed to get a unique uidnumber for your directory. */ -// $ldapservers->SetValue($i,'auto_number','dn',''); +// $ldapservers->SetValue($i,'auto_number','dn',null); /* The password for the dn above. */ -// $ldapservers->SetValue($i,'auto_number','pass',''); +// $ldapservers->SetValue($i,'auto_number','pass',null); /* Enable anonymous bind login. */ // $ldapservers->SetValue($i,'login','anon_bind',true); /* Use customized page with prefix when available. */ -// $ldapservers->SetValue($i,'custom','pages_prefix','custom_'); +# $ldapservers->SetValue($i,'custom','pages_prefix','custom_'); /* If you set this, then phpldapadmin will bind to LDAP with this user when testing for unique attributes (as set in unique_attrs array). If you want to enforce unique attributes, than this id should have full (readonly) access to the attributes in question (the logged in user may not have enough access) */ -// $ldapservers->SetValue($i,'unique_attrs','dn',''); +// $ldapservers->SetValue($i,'unique_attrs','dn',null); /* The password for the dn above */ -// $ldapservers->SetValue($i,'unique_attrs','pass',''); +// $ldapservers->SetValue($i,'unique_attrs','pass',null); /* If you set this, then only these DNs are allowed to log in. This array can contain individual users, groups or ldap search filter(s). Keep in mind that the user has not authenticated yet, so this will be an anonymous search to the LDAP server, so make your ACLs allow these searches to return results! */ -# $ldapservers->SetValue($i,'login','allowed_dns',array( -# 'uid=stran,ou=People,dc=example,dc=com', -# '(&(gidNumber=811)(objectClass=groupOfNames))', -# '(|(uidNumber=200)(uidNumber=201))', -# 'cn=callcenter,ou=Group,dc=example,dc=com')); +# $ldapservers->SetValue($i,'login','allowed_dns',array( +# 'uid=stran,ou=People,dc=example,dc=com', +# '(&(gidNumber=811)(objectClass=groupOfNames))', +# '(|(uidNumber=200)(uidNumber=201))', +# 'cn=callcenter,ou=Group,dc=example,dc=com')); /* Set this if you dont want this LDAP server to show in the tree */ // $ldapservers->SetValue($i,'appearance','visible',true); @@ -284,29 +298,29 @@ $ldapservers->SetValue($i,'server','tls',false); $ldapservers->SetValue($i,'server','low_bandwidth',false); $ldapservers->SetValue($i,'appearance','password_hash','md5'); $ldapservers->SetValue($i,'login','attr','dn'); -$ldapservers->SetValue($i,'login','string',''); -$ldapservers->SetValue($i,'login','class',''); +$ldapservers->SetValue($i,'login','string',null); +$ldapservers->SetValue($i,'login','class',null); $ldapservers->SetValue($i,'server','read_only',false); $ldapservers->SetValue($i,'appearance','show_create',true); $ldapservers->SetValue($i,'auto_number','enable',true); $ldapservers->SetValue($i,'auto_number','mechanism','search'); -$ldapservers->SetValue($i,'auto_number','search_base',''); +$ldapservers->SetValue($i,'auto_number','search_base',null); $ldapservers->SetValue($i,'auto_number','min','1000'); -$ldapservers->SetValue($i,'auto_number','dn',''); -$ldapservers->SetValue($i,'auto_number','pass',''); +$ldapservers->SetValue($i,'auto_number','dn',null); +$ldapservers->SetValue($i,'auto_number','pass',null); $ldapservers->SetValue($i,'login','anon_bind',true); $ldapservers->SetValue($i,'custom','pages_prefix','custom_'); -$ldapservers->SetValue($i,'unique_attrs','dn',''); -$ldapservers->SetValue($i,'unique_attrs','pass',''); +$ldapservers->SetValue($i,'unique_attrs','dn',null); +$ldapservers->SetValue($i,'unique_attrs','pass',null); # SASL auth -$ldapservers->SetValue($i,'server','sasl_auth', true); -$ldapservers->SetValue($i,'server','sasl_mech', "PLAIN"); -$ldapservers->SetValue($i,'server','sasl_realm', "EXAMPLE.COM"); -$ldapservers->SetValue($i,'server','sasl_authz_id', null); -$ldapservers->SetValue($i,'server','sasl_authz_id_regex', '/^uid=([^,]+)(.+)/i'); -$ldapservers->SetValue($i,'server','sasl_authz_id_replacement', '$1'); -$ldapservers->SetValue($i,'server','sasl_props', null); +$ldapservers->SetValue($i,'server','sasl_auth',true); +$ldapservers->SetValue($i,'server','sasl_mech','PLAIN'); +$ldapservers->SetValue($i,'server','sasl_realm','EXAMPLE.COM'); +$ldapservers->SetValue($i,'server','sasl_authz_id',null); +$ldapservers->SetValue($i,'server','sasl_authz_id_regex','/^uid=([^,]+)(.+)/i'); +$ldapservers->SetValue($i,'server','sasl_authz_id_replacement','$1'); +$ldapservers->SetValue($i,'server','sasl_props',null); */ /*********************************************/ @@ -318,7 +332,7 @@ $ldapservers->SetValue($i,'server','sasl_props', null); $friendly_attrs = array(); $friendly_attrs['facsimileTelephoneNumber'] = 'Fax'; -$friendly_attrs['telephoneNumber'] = 'Phone'; +$friendly_attrs['telephoneNumber'] = 'Phone'; /*********************************************/ /* Support for attrs display order */ @@ -330,16 +344,16 @@ $friendly_attrs['telephoneNumber'] = 'Phone'; attributes that are not specified in this array will be displayed after in alphabetical order. */ # $attrs_display_order = array( -# 'givenName', -# 'sn', -# 'cn', -# 'displayName', -# 'uid', -# 'uidNumber', -# 'gidNumber', -# 'homeDirectory', -# 'mail', -# 'userPassword' +# 'givenName', +# 'sn', +# 'cn', +# 'displayName', +# 'uid', +# 'uidNumber', +# 'gidNumber', +# 'homeDirectory', +# 'mail', +# 'userPassword' # ); /*********************************************/ @@ -358,8 +372,8 @@ $friendly_attrs['telephoneNumber'] = 'Phone'; /* Hidden attributes in read-only mode. If undefined, it will be equal to $hidden_attrs. */ # $hidden_attrs_ro = array( -# 'objectClass','shadowWarning', 'shadowLastChange', 'shadowMax', -# 'shadowFlag', 'shadowInactive', 'shadowMin', 'shadowExpire'); +# 'objectClass','shadowWarning', 'shadowLastChange', 'shadowMax', +# 'shadowFlag', 'shadowInactive', 'shadowMin', 'shadowExpire'); /** **/ /** Read-only attributes **/ @@ -389,6 +403,19 @@ $friendly_attrs['telephoneNumber'] = 'Phone'; present a user with the option of changing the unique attributes. */ # $unique_attrs = array('uid','uidNumber','mail'); +/*********************************************/ +/* Group attributes */ +/*********************************************/ + +/* Add "modify group members" link to the attribute. */ +// $config->custom->modify_member['groupattr'] = array('member','uniqueMember','memberUid') + +/* Configure filter for member search. This only applies to "modify group members" feature */ +// $config->custom->modify_member['filter'] = '(objectclass=Person)'; + +/* Attribute that is added to the group member attribute. */ +// $config->custom->modify_member['attr'] = 'dn'; + /*********************************************/ /* Predefined Queries (canned views) */ /*********************************************/ @@ -410,7 +437,7 @@ $queries[$q]['scope'] = 'sub'; $queries[$q]['filter'] = '(&(objectClass=posixAccount)(uid=*))'; /* The attributes to return */ -$queries[$q]['attributes'] = 'cn, uid, homeDirectory'; +$queries[$q]['attributes'] = 'cn, uid, homeDirectory, telephonenumber, jpegphoto'; /* If you want to configure more pre-defined queries, copy and paste the above (including the "$q++;") */ $q++; diff --git a/doc/README-translation.txt b/doc/README-translation.txt index fa1141a..8c4cc33 100644 --- a/doc/README-translation.txt +++ b/doc/README-translation.txt @@ -1,2 +1,2 @@ -Please see http://wiki.pldapadmin.com/Translating now for information on +Please see http://wiki.phpldapadmin.info/Translating now for information on translating PLA. diff --git a/htdocs/add_attr_form.php b/htdocs/add_attr_form.php index e03365f..b3e967a 100644 --- a/htdocs/add_attr_form.php +++ b/htdocs/add_attr_form.php @@ -1,5 +1,5 @@ isReadOnly() ) - pla_error( _('You cannot perform updates while server is in read-only mode') ); -if( ! $ldapserver->haveAuthInfo()) - pla_error( _('Not enough information to login to server. Please check your configuration.') ); +if ($ldapserver->isReadOnly()) + pla_error(_('You cannot perform updates while server is in read-only mode')); +if (! $ldapserver->haveAuthInfo()) + pla_error(_('Not enough information to login to server. Please check your configuration.')); $dn = $_GET['dn']; -$encoded_dn = rawurlencode( $dn ); -$rdn = get_rdn( $dn ); +$encoded_dn = rawurlencode($dn); +$rdn = get_rdn($dn); $friendly_attrs = process_friendly_attr_table(); -include './header.php'; ?> +include './header.php'; - +echo ''; -

-

: name; ?>     :

+printf('

%s %s

',_('Add new attribute'),htmlspecialchars($rdn)); +printf('

%s: %s     %s: %s

', + _('Server'),$ldapserver->name,_('Distinguished Name'),htmlspecialchars($dn)); -getDNAttrs($dn); +$attrs = $ldapserver->getDNAttrs($dn); $oclasses = $ldapserver->getDNAttr($dn,'objectClass'); -if( ! is_array( $oclasses ) ) - $oclasses = array( $oclasses ); +if (! is_array($oclasses)) + $oclasses = array($oclasses); $avail_attrs = array(); -$schema_oclasses = $ldapserver->SchemaObjectClasses($dn); -foreach( $oclasses as $oclass ) { - $schema_oclass = $ldapserver->getSchemaObjectClass($oclass,$dn); +if (array_search('extensibleObject',$oclasses) !== FALSE) { + $schema_attrs = $ldapserver->SchemaAttributes(); - if( $schema_oclass && 0 == strcasecmp( 'objectclass', get_class( $schema_oclass ) ) ) - $avail_attrs = array_merge( $schema_oclass->getMustAttrNames( $schema_oclasses ), - $schema_oclass->getMayAttrNames( $schema_oclasses ), - $avail_attrs ); + foreach ($schema_attrs as $attr) + $avail_attrs[]=$attr->getName(); + +} else { + $schema_oclasses = $ldapserver->SchemaObjectClasses($dn); + + foreach ($oclasses as $oclass) { + $schema_oclass = $ldapserver->getSchemaObjectClass($oclass,$dn); + + if ($schema_oclass && strcasecmp('objectclass',get_class($schema_oclass)) == 0) + $avail_attrs = array_merge($schema_oclass->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_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 ) { + +foreach ($avail_attrs as $i => $attr) { if ($ldapserver->isAttrBinary($attr)) { $avail_binary_attrs[] = $attr; - unset( $avail_attrs[ $i ] ); + unset($avail_attrs[$i]); } } -?> -
+echo '
'; -
+if (is_array($avail_attrs) && count($avail_attrs) > 0) { + echo '
'; + echo _('Add new attribute'); + echo '
'; + echo '
'; -'; + printf('',$ldapserver->server_id); + printf('',htmlspecialchars($dn)); -if( is_array( $avail_attrs ) && count( $avail_attrs ) > 0 ) { ?> + echo ' - + foreach ($avail_attrs as $a) { - + echo ''; - - - + echo ''; + printf('',_('Add')); + echo ''; - +} else { + echo '
'; + printf('(%s)',_('no new attributes available for this entry')); +} -
-
- () -
-
+if (count($avail_binary_attrs) > 0) { + echo '
'; + echo _('Add new binary attribute'); + echo '
'; + echo '
'; - + echo ''; + echo '
'; + printf('',$ldapserver->server_id); + printf('',$dn); + echo ''; - 0 ) { ?> + echo ' - - -
+ $attr_select_html = ''; + usort($avail_binary_attrs,'sortAttrs'); - + echo ''; - - + echo ''; + printf('',_('Add')); - " . _('Your PHP configuration has disabled file uploads. Please check php.ini before proceeding.') . "
"; + if (! ini_get('file_uploads')) + printf('
%s
', + _('Your PHP configuration has disabled file uploads. Please check php.ini before proceeding.')); else - echo "
" . sprintf( _('Maximum file size: %s'), ini_get( 'upload_max_filesize' ) ) . "
"; - ?> + printf('
%s: %s
',_('Maximum file size'),ini_get('upload_max_filesize')); -
+ echo ''; - +} else { + echo '
'; + printf('(%s)',_('no new binary attributes available for this entry')); +} -
-
- () - - - -
- - - -'; +echo ''; +echo ''; /** * Given an attribute $x, this returns true if it is NOT already specified @@ -185,13 +182,13 @@ if( count( $avail_binary_attrs ) > 0 ) { ?> * @return bool * @ignore */ -function not_an_attr( $x ) { +function not_an_attr($x) { global $attrs; - //return ! isset( $attrs[ strtolower( $x ) ] ); - foreach( $attrs as $attr => $values ) - if( 0 == strcasecmp( $attr, $x ) ) + foreach($attrs as $attr => $values) + if (strcasecmp($attr,$x) == 0) return false; + return true; } ?> diff --git a/htdocs/add_value_form.php b/htdocs/add_value_form.php index 870c3fe..d5cd81d 100644 --- a/htdocs/add_value_form.php +++ b/htdocs/add_value_form.php @@ -1,5 +1,5 @@ getDNAttr($dn,$attr); -if ($current_values) - $num_current_values = (is_array($current_values) ? count($current_values) : 1); -else +if ($current_values) { + if (! is_array($current_values)) + $current_values = array($current_values); + + $num_current_values = count($current_values); + +} else { + $current_values = array(); $num_current_values = 0; +} $is_object_class = (strcasecmp($attr, 'objectClass') == 0) ? true : false; @@ -107,18 +113,18 @@ if ($num_current_values) { if (strcasecmp($attr,'userPassword') == 0) { foreach ($current_values as $key => $value) { if (obfuscate_password_display(get_enc_type($value))) - echo '
  • '.preg_replace('/./','*',$value).'
  • '; + echo '
  • '.preg_replace('/./','*',$value).'
  • '; else - echo '
  • '.htmlspecialchars($value).'
  • '; + echo '
  • '.htmlspecialchars($value).'
  • '; } } else { foreach ($current_values as $val) - printf('
  • %s
  • ',htmlspecialchars($val)); + printf('
  • %s
  • ',htmlspecialchars($val)); } } else { - printf('
  • %s
  • ',htmlspecialchars($current_values)); + printf('
  • %s
  • ',htmlspecialchars($current_values)); } echo ''; diff --git a/htdocs/collapse.php b/htdocs/collapse.php index bf84298..d3e1fc8 100644 --- a/htdocs/collapse.php +++ b/htdocs/collapse.php @@ -1,5 +1,5 @@ server_id,'tree'); $tree['browser'][$dn]['open'] = false; set_cached_item($ldapserver->server_id,'tree','null',$tree); -/* This is for Opera. By putting "random junk" in the query string, it thinks - that it does not have a cached version of the page, and will thus - fetch the page rather than display the cached version */ -$time = gettimeofday(); -$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 = sprintf('&%s=%s',session_name(),session_id()); -header(sprintf('Location:tree.php?foo=%s#%s_%s%s',$random_junk,$ldapserver->server_id,rawurlencode($dn),$id_session_param)); +header(sprintf('Location:tree.php?foo=%s#%s_%s%s',random_junk(),$ldapserver->server_id,rawurlencode($dn),$id_session_param)); ?> diff --git a/htdocs/compare.php b/htdocs/compare.php index 78971d7..f4b9944 100644 --- a/htdocs/compare.php +++ b/htdocs/compare.php @@ -1,5 +1,5 @@ - + diff --git a/htdocs/copy.php b/htdocs/copy.php index 143ae24..4b707f4 100644 --- a/htdocs/copy.php +++ b/htdocs/copy.php @@ -1,5 +1,5 @@ '; printf('',$delete_url); } @@ -99,7 +99,7 @@ function r_copy_dn($ldapserver_src,$ldapserver_dst,$snapshottree,$root_dn,$dn_ds debug_log('r_copy_dn: Entered with (%s,%s,%s,%s,%s)',1, $ldapserver_src->server_id,$ldapserver_dst->server_id,$snapshottree,$root_dn,$dn_dst); - printf('%s %s...',_('Copying '),htmlspecialchars($root_dn)); + printf('%s %s...',_('Copying'),htmlspecialchars($root_dn)); flush(); $copy_result = copy_dn($ldapserver_src,$ldapserver_dst,$root_dn,$dn_dst); @@ -107,7 +107,7 @@ function r_copy_dn($ldapserver_src,$ldapserver_dst,$snapshottree,$root_dn,$dn_ds if (! $copy_result) return false; - printf('%s
    ',_('Success')); + printf('%s
    ',_('Success')); flush(); $children = isset($snapshottree[$root_dn]) ? $snapshottree[$root_dn] : null; @@ -172,6 +172,7 @@ function build_tree($ldapserver,$dn,$buildtree) { debug_log('build_tree: Entered with (%s,%s,%s)',1, $ldapserver->server_id,$dn,$buildtree); + # we search all children, not only the visible children in the tree $children = $ldapserver->getContainerContents($dn,0); if (is_array($children) && count($children) > 0) { diff --git a/htdocs/copy_form.php b/htdocs/copy_form.php index e644cc1..c94b035 100644 --- a/htdocs/copy_form.php +++ b/htdocs/copy_form.php @@ -1,5 +1,5 @@ server_id); - $template = $templates->GetTemplate($_POST['template']); + $template = $templates->getCreationTemplate($_POST['template']); foreach ($_POST['presubmit'] as $attr) { $_POST['attrs'][] = $attr; diff --git a/htdocs/create_form.php b/htdocs/create_form.php index 0281f0d..80638ee 100644 --- a/htdocs/create_form.php +++ b/htdocs/create_form.php @@ -1,5 +1,5 @@ '; $i = -1; $template_xml = new Templates($ldapserver->server_id); -$templates = $template_xml->_template; +$templates = $template_xml->getCreationTemplates(); # Remove non-visable templates. foreach ($templates as $index => $template) diff --git a/htdocs/css/style.css b/htdocs/css/style.css index 306f9eb..c389a0c 100644 --- a/htdocs/css/style.css +++ b/htdocs/css/style.css @@ -1,4 +1,4 @@ -/* $Header: /cvsroot/phpldapadmin/phpldapadmin/htdocs/css/style.css,v 1.45 2005/12/10 10:34:54 wurley Exp $ */ +/* $Header: /cvsroot/phpldapadmin/phpldapadmin/htdocs/css/style.css,v 1.47 2006/10/29 11:44:36 wurley Exp $ */ span.hint { font-size: small; font-weight: normal; @@ -56,40 +56,89 @@ table.schema_attr tr.highlight{ font-weight: Bold; } +table.modify_members { + border-left: 1px solid black; + border-right: 1px solid black; + border-bottom: 1px solid black; + border-top: 1px solid black; + margin-bottom: 10px; + background-color: #eee; + width: 80%; +} + +table.modify_members td { + vertical-align: top; + text-align: left; + padding-left: 5px; +} + +table.modify_members th { + background-color: #016; + padding: 5px; + color: white; + font-weight: bold; + font-size: 125%; +} + +table.modify_members td { + padding: 5px; + vertical-align: top; +} + +table.modify_members tr.even { + background-color: #eee; +} + +table.modify_members tr.odd { + background-color: #ccc; +} + +table.modify_members tr.highlight { + background-color: #bcd; + font-weight: Bold; +} + +table.modify_members select { + width: 100%; +} + +/* Bug Notice */ table.notice tr td { font-size: 9pt; padding: 2px; margin: 0px; - background-color: #eee; + background-color: #eeeeee; } +/* Error Dialog Box */ table.error { width: 500px; - border: 2px solid black; + border: 1px solid #aa0000; + background-color: #fff0f0; } -table.error tr td table.bug tr td{ - padding: 6px; - margin: 0px; - background-color: #eee; -} - -table.error tr td { - vertical-align: top; - text-align: left; - padding: 15px; +table.error th { + background-color: #aa0000; border: 0px; + color: #ffffff; + font-size: 12pt; + font-weight: bold; + text-align: center; + vertical-align: middle; + width: 100%; } -table.error tr td h2 { - margin: 5px; - margin-bottom: 20px; -} - -table.error tr td.img { +table.error th.img { vertical-align: middle; text-align: center; - width: 20px; +} + +table.error td { + border: 0px; + background-color: #fff0f0; + padding: 2px; + text-align: left; + vertical-align: top; } table.confirm th { @@ -131,7 +180,7 @@ table.browse tr td { } table.template_display tr td { - vertical-align: top; + vertical-align: top; } table.templates tr td { @@ -346,7 +395,7 @@ table.edit_dn tr td.heading { } table.edit_dn tr td.attr_note { - text-align: right; + text-align: right; background-color: #eee; } @@ -480,26 +529,26 @@ form.new_value { } table.search_result_table { - border-spacing: 0; - border-collapse: collapse; - empty-cells: show; + border-spacing: 0; + border-collapse: collapse; + empty-cells: show; } table.search_result_table td { - vertical-align: top; - border: 1px solid gray; - padding: 4px; + vertical-align: top; + border: 1px solid gray; + padding: 4px; } table.search_result_table th { - border: 1px solid gray; - padding: 10px; - padding-left: 20px; - padding-right: 20px; + border: 1px solid gray; + padding: 10px; + padding-left: 20px; + padding-right: 20px; } table.search_result_table tr.highlight { - background-color: #eee; + background-color: #eee; } @@ -509,8 +558,8 @@ ul.search { table.search_header { background-color: #ddf; - width: 100%; - vertical-align: top; + width: 100%; + vertical-align: top; } div.search_result { @@ -576,13 +625,39 @@ table.delete_confirm { text-align: left; } -table.login { - background-color: #ddf; - padding: 10px; +/* Login Box */ +#pla_login { + background: url('../images/uid.png') no-repeat 0 1px; + background-color: #fafaff; + padding-left: 17px; } -table.login td { - padding: 5px; +#pla_login:focus { + background-color: #ffffba; +} + +#pla_login:disabled { + background-color: #ddddff; +} + +#pla_pass { + background: url('../images/key.png') no-repeat 0 1px; + background-color: #fafaff; + padding-left: 17px; +} + +#pla_pass:focus { + background-color: #ffffba; +} + +#pla_pass:disabled { + background-color: #ddddff; +} + +table.login { + background-color: #eeeeff; + padding: 10px; + border: 1px solid #aaaacc; } table.create { @@ -602,7 +677,7 @@ table.create td.name { div.add_value { font-size: 10pt; margin: 0px; - padding: 0px; + padding: 0px; } a.logged_in_dn { @@ -659,6 +734,6 @@ table.form tr td { } img.chooser { - /* This makes the chooser image line up properly when placed next to a form element in a table cell*/ - vertical-align: bottom; + /* 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/htdocs/delete_form.php b/htdocs/delete_form.php index 00dab16..01229a7 100644 --- a/htdocs/delete_form.php +++ b/htdocs/delete_form.php @@ -1,5 +1,5 @@ haveAuthInfo()) $dn = $_GET['dn']; # We dont need this result, as we'll use the SESSION value when we call tree.php -$ldapserver->getContainerContents($dn,0,'(objectClass=*)',$config->GetValue('deref','tree')); +$ldapserver->getContainerContents($dn,0,$config->GetValue('appearance','tree_filter'),$config->GetValue('deref','tree')); $tree = get_cached_item($ldapserver->server_id,'tree'); $tree['browser'][$dn]['open'] = true; set_cached_item($ldapserver->server_id,'tree','null',$tree); -/* This is for Opera. By putting "random junk" in the query string, it thinks - that it does not have a cached version of the page, and will thus - fetch the page rather than display the cached version */ -$time = gettimeofday(); -$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 = sprintf('&%s=%s',session_name(),session_id()); -header(sprintf('Location:tree.php?foo=%s#%s_%s%s',$random_junk,$ldapserver->server_id,rawurlencode($dn),$id_session_param)); +header(sprintf('Location:tree.php?foo=%s#%s_%s%s',random_junk(),$ldapserver->server_id,rawurlencode($dn),$id_session_param)); ?> diff --git a/htdocs/export_form.php b/htdocs/export_form.php index 03e66d1..b0604ee 100755 --- a/htdocs/export_form.php +++ b/htdocs/export_form.php @@ -1,5 +1,5 @@ %s%s',_('Server'),server_select_list()); echo ''; printf('%s',_('Base DN')); -printf(' ',htmlspecialchars($dn)); +printf(' ',htmlspecialchars($dn)); draw_chooser_link('export_form.dn'); -echo ''; +echo ''; echo ''; echo ''; diff --git a/htdocs/header.php b/htdocs/header.php index 4129f37..74a30cd 100644 --- a/htdocs/header.php +++ b/htdocs/header.php @@ -1,5 +1,5 @@ ',JSDIR printf('',JSDIR); printf('',JSDIR); printf('',JSDIR); +printf('',JSDIR); printf('',JSDIR); printf('',JSDIR); printf('',JSDIR); printf('',JSDIR); printf('',JSDIR); printf('',JSDIR); +printf('',JSDIR); if (isset($meta_refresh_variable)) printf('',$meta_refresh_variable); diff --git a/htdocs/images/key.png b/htdocs/images/key.png new file mode 100755 index 0000000..2ecb08d Binary files /dev/null and b/htdocs/images/key.png differ diff --git a/htdocs/js/date_selector.js b/htdocs/js/date_selector.js index 5edad3c..51b13b7 100644 --- a/htdocs/js/date_selector.js +++ b/htdocs/js/date_selector.js @@ -5,7 +5,11 @@ function dateSelector(id) { var parse = false; var cal = new Calendar(0, null, onSelect, onClose); - cal.showsTime = false; + if (defaults['f_time_'+id]) { + cal.showsTime = true; + } else { + cal.showsTime = false; + } cal.weekNumbers = true; cal.showsOtherMonths = true; cal.create(); diff --git a/htdocs/js/modify_member.js b/htdocs/js/modify_member.js new file mode 100644 index 0000000..8ab0678 --- /dev/null +++ b/htdocs/js/modify_member.js @@ -0,0 +1,98 @@ +/* This function submits the form + * when Save Changes button is pressed. + * see modify_member_form.php + */ +function submitForm(formId) { + var formObj = document.getElementById(formId); + formObj.submit(); +} + +/* This function generates hidden input array from new group members + * when submit button is pressed. + * see modify_member_form.php +*/ +function update_new_values(memberattr,formId) { + el = document.getElementById("dnu"); + + for (i=0;i"; + } + + submitForm(formId); +} + + +/* This function moves members from left select box to right one + * see modify_member_form.php + */ +function one2two() { + + m1len = m1.length ; + for (i=0;i=0;i--){ + if (m1.options[i].selected == true) { + m1.options[i] = null; + } + } +} + +/* This function moves members from right select box to left one + * see modify_member_form.php + */ +function two2one() { + + m2len = m2.length ; + for (i=0;i=0;i--) { + if (m2.options[i].selected == true) { + m2.options[i] = null; + } + } +} + +/* This function moves all members from left select box to right one + * see modify_member_form.php + */ +function all2two() { + + m1len = m1.length ; + for (i=0;i=0;i--) { + m1.options[i] = null; + } +} + +/* This function moves all members from right select box to left one + * see modify_member_form.php + */ +function all2one() { + + m2len = m2.length ; + for (i=0;i=0;i--) { + m2.options[i] = null; + } +} diff --git a/htdocs/js/phplayersmenu/lib/PHPLIB.php b/htdocs/js/phplayersmenu/lib/PHPLIB.php index 6604ccf..a08c2fc 100644 --- a/htdocs/js/phplayersmenu/lib/PHPLIB.php +++ b/htdocs/js/phplayersmenu/lib/PHPLIB.php @@ -8,7 +8,7 @@ // Bjoern Schotte (PEARification) // Martin Jansen (PEAR conformance) // -// $Id: PHPLIB.php,v 1.2 2005/12/10 10:34:54 wurley Exp $ +// $Id: PHPLIB.php,v 1.3 2006/09/17 06:22:04 wurley Exp $ // //require_once "PEAR.php"; @@ -31,37 +31,37 @@ class Template_PHPLIB * If set, echo assignments * @var bool */ - var $debug = false; + public $debug = false; /** * $file[handle] = "filename"; * @var array */ - var $file = array(); + public $file = array(); /** * fallback paths that should be defined in a child class * @var array */ - var $file_fallbacks = array(); + public $file_fallbacks = array(); /** * Relative filenames are relative to this pathname * @var string */ - var $root = ""; + public $root = ""; /* * $_varKeys[key] = "key" * @var array */ - var $_varKeys = array(); + public $_varKeys = array(); /** * $_varVals[key] = "value"; * @var array */ - var $_varVals = array(); + public $_varVals = array(); /** * "remove" => remove undefined variables @@ -69,20 +69,20 @@ class Template_PHPLIB * "keep" => keep undefined variables * @var string */ - var $unknowns = "remove"; + public $unknowns = "remove"; /** * "yes" => halt, "report" => report error, continue, "no" => ignore error quietly * @var string */ - var $haltOnError = "report"; + public $haltOnError = "report"; /** * The last error message is retained here * @var string * @see halt */ - var $_lastError = ""; + public $_lastError = ""; /** diff --git a/htdocs/js/phplayersmenu/lib/layersmenu-common.inc.php b/htdocs/js/phplayersmenu/lib/layersmenu-common.inc.php index 7f271e3..6c0e795 100644 --- a/htdocs/js/phplayersmenu/lib/layersmenu-common.inc.php +++ b/htdocs/js/phplayersmenu/lib/layersmenu-common.inc.php @@ -22,112 +22,112 @@ class LayersMenuCommon * @access private * @var string */ -var $_packageName; +public $_packageName; /** * The version of the package * @access private * @var string */ -var $version; +public $version; /** * The copyright of the package * @access private * @var string */ -var $copyright; +public $copyright; /** * The author of the package * @access private * @var string */ -var $author; +public $author; /** * URL to be prepended to the menu hrefs * @access private * @var string */ -var $prependedUrl = ''; +public $prependedUrl = ''; /** * Do you want that code execution halts on error? * @access private * @var string */ -var $haltOnError = 'yes'; +public $haltOnError = 'yes'; /** * The base directory where the package is installed * @access private * @var string */ -var $dirroot; +public $dirroot; /** * The "libjs" directory of the package * @access private * @var string */ -var $libjsdir; +public $libjsdir; /** * The directory where images related to the menu can be found * @access private * @var string */ -var $imgdir; +public $imgdir; /** * The http path corresponding to imgdir * @access private * @var string */ -var $imgwww; +public $imgwww; /** * The directory where icons of menu items can be found * @access private * @var string */ -var $icondir; +public $icondir; /** * The http path corresponding to icondir * @access private * @var string */ -var $iconwww; +public $iconwww; /** * This array may contain width and height of all icons * @access private * @var integer */ -var $iconsize = array(); +public $iconsize = array(); /** * If this var is false, width and height of icons have to be detected; if this var is true, width and height of icons are not detected and are retrieved from the iconsize array * @access private * @var boolean */ -var $issetIconsize = false; +public $issetIconsize = false; /** * The directory where templates can be found * @access private * @var string */ -var $tpldir; +public $tpldir; /** * The string containing the menu structure * @access private * @var string */ -var $menuStructure; +public $menuStructure; /** * It counts nodes for all menus * @access private * @var integer */ -var $_nodesCount; +public $_nodesCount; /** * A multi-dimensional array to store informations for each menu entry * @access private * @var array */ -var $tree; +public $tree; /** * A multi-dimensional array used only with the DB support; for each $menu_name, it stores the $cnt associated to each item id * @@ -138,56 +138,56 @@ var $tree; * @access private * @var array */ -var $treecnt; +public $treecnt; /** * The maximum hierarchical level of menu items * @access private * @var integer */ -var $_maxLevel; +public $_maxLevel; /** * An array that counts the number of first level items for each menu * @access private * @var array */ -var $_firstLevelCnt; +public $_firstLevelCnt; /** * An array containing the number identifying the first item of each menu * @access private * @var array */ -var $_firstItem; +public $_firstItem; /** * An array containing the number identifying the last item of each menu * @access private * @var array */ -var $_lastItem; +public $_lastItem; /** * Data Source Name: the connection string for PEAR DB * @access private * @var string */ -var $dsn = 'pgsql://dbuser:dbpass@dbhost/dbname'; +public $dsn = 'pgsql://dbuser:dbpass@dbhost/dbname'; /** * DB connections are either persistent or not persistent * @access private * @var boolean */ -var $persistent = false; +public $persistent = false; /** * Name of the table storing data describing the menu * @access private * @var string */ -var $tableName = 'phplayersmenu'; +public $tableName = 'phplayersmenu'; /** * Name of the i18n table corresponding to $tableName * @access private * @var string */ -var $tableName_i18n = 'phplayersmenu_i18n'; +public $tableName_i18n = 'phplayersmenu_i18n'; /** * Names of fields of the table storing data describing the menu * @@ -197,7 +197,7 @@ var $tableName_i18n = 'phplayersmenu_i18n'; * @access private * @var array */ -var $tableFields = array( +public $tableFields = array( 'id' => 'id', 'parent_id' => 'parent_id', 'text' => 'text', @@ -213,7 +213,7 @@ var $tableFields = array( * @access private * @var array */ -var $tableFields_i18n = array( +public $tableFields_i18n = array( 'language' => 'language', 'id' => 'id', 'text' => 'text', @@ -224,7 +224,7 @@ var $tableFields_i18n = array( * @access private * @var array */ -var $_tmpArray = array(); +public $_tmpArray = array(); /** * The constructor method; it initializates the menu system diff --git a/htdocs/js/phplayersmenu/lib/treemenu.inc.php b/htdocs/js/phplayersmenu/lib/treemenu.inc.php index 7beb55c..56c7d41 100644 --- a/htdocs/js/phplayersmenu/lib/treemenu.inc.php +++ b/htdocs/js/phplayersmenu/lib/treemenu.inc.php @@ -22,19 +22,19 @@ class TreeMenu extends LayersMenuCommon * @access private * @var string */ -var $treeMenuImagesType; +public $treeMenuImagesType; /** * Prefix for filenames of images of a theme * @access private * @var string */ -var $treeMenuTheme; +public $treeMenuTheme; /** * An array where we store the Tree Menu code for each menu * @access private * @var array */ -var $_treeMenu; +public $_treeMenu; /** * The constructor method; it initializates the menu system diff --git a/htdocs/js/to_ascii.js b/htdocs/js/to_ascii.js new file mode 100755 index 0000000..287ff65 --- /dev/null +++ b/htdocs/js/to_ascii.js @@ -0,0 +1,80 @@ +// +// Purpose of this file is to remap characters as ASCII characters +// +// + +var to_ascii_array = new Array(); +to_ascii_array['à'] = 'a'; +to_ascii_array['á'] = 'a'; +to_ascii_array['â'] = 'a'; +to_ascii_array['À'] = 'a'; +to_ascii_array['ã'] = 'a'; +to_ascii_array['Ã¥'] = 'a'; +to_ascii_array['À'] = 'A'; +to_ascii_array['Á'] = 'A'; +to_ascii_array['Ä'] = 'A'; +to_ascii_array['Â'] = 'A'; +to_ascii_array['Ã'] = 'A'; +to_ascii_array['Å'] = 'A'; +to_ascii_array['é'] = 'e'; +to_ascii_array['Ú'] = 'e'; +to_ascii_array['ë'] = 'e'; +to_ascii_array['ê'] = 'e'; +to_ascii_array['€'] = 'E'; +to_ascii_array['ï'] = 'i'; +to_ascii_array['î'] = 'i'; +to_ascii_array['ì'] = 'i'; +to_ascii_array['í'] = 'i'; +to_ascii_array['Ï'] = 'I'; +to_ascii_array['Î'] = 'I'; +to_ascii_array['Ì'] = 'I'; +to_ascii_array['Í'] = 'I'; +to_ascii_array['ò'] = 'o'; +to_ascii_array['ó'] = 'o'; +to_ascii_array['ÃŽ'] = 'o'; +to_ascii_array['õ'] = 'o'; +to_ascii_array['ö'] = 'o'; +to_ascii_array['Þ'] = 'o'; +to_ascii_array['Ò'] = 'O'; +to_ascii_array['Ó'] = 'O'; +to_ascii_array['Ô'] = 'O'; +to_ascii_array['Õ'] = 'O'; +to_ascii_array['Ö'] = 'O'; +to_ascii_array['Ø'] = 'O'; +to_ascii_array['ù'] = 'u'; +to_ascii_array['ú'] = 'u'; +to_ascii_array['ÃŒ'] = 'u'; +to_ascii_array['û'] = 'u'; +to_ascii_array['Ù'] = 'U'; +to_ascii_array['Ú'] = 'U'; +to_ascii_array['Ü'] = 'U'; +to_ascii_array['Û'] = 'U'; +to_ascii_array['Ê'] = 'ae'; +to_ascii_array['Æ'] = 'AE'; +to_ascii_array['Ãœ'] = 'y'; +to_ascii_array['ÿ'] = 'y'; +to_ascii_array['ß'] = 'SS'; +to_ascii_array['Ç'] = 'C'; +to_ascii_array['ç'] = 'c'; +to_ascii_array['Ñ'] = 'N'; +to_ascii_array['ñ'] = 'n'; +to_ascii_array['¢'] = 'c'; +to_ascii_array['©'] = '(C)'; +to_ascii_array['®'] = '(R)'; +to_ascii_array['«'] = '<<'; +to_ascii_array['»'] = '>>'; + +function toAscii(text) { + //var text = field.value; + var position = 0; + var output = ""; + for (position = 0 ; position < text.length ; position++) { + var tmp = text.substring(position,position+1); + if (to_ascii_array[tmp] != undefined) { + tmp = to_ascii_array[tmp]; + } + output = output + tmp; + } + return output; +} + diff --git a/htdocs/login.php b/htdocs/login.php index 740413a..2b4c5fd 100644 --- a/htdocs/login.php +++ b/htdocs/login.php @@ -1,5 +1,5 @@ auth_type; if ($anon_bind) { - if (DEBUG_ENABLED) + if (DEBUG_ENABLED) debug_log('Anonymous Login was posted [%s].',64,$anon_bind); $dn = null; @@ -78,14 +78,15 @@ if ($anon_bind) { # Got through each of the BASE DNs and test the login. foreach ($ldapserver->getBaseDN() as $base_dn) { - if (DEBUG_ENABLED) + if (DEBUG_ENABLED) debug_log('Searching LDAP with base [%s]',64,$base_dn); - $result = array_pop($ldapserver->search(null,$base_dn,$filter,array('dn'))); + $result = $ldapserver->search(null,$base_dn,$filter,array('dn')); + $result = array_pop($result); $dn = $result['dn']; if ($dn) { - if (DEBUG_ENABLED) + if (DEBUG_ENABLED) debug_log('Got DN [%s] for user ID [%s]',64,$dn,$uid); break; } diff --git a/htdocs/login_form.php b/htdocs/login_form.php index d7c7a91..1ce916c 100644 --- a/htdocs/login_form.php +++ b/htdocs/login_form.php @@ -1,5 +1,5 @@ auth_type) - pla_error(_('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. ')); if (! in_array($ldapserver->auth_type, array('cookie','session'))) pla_error(sprintf(_('Unknown auth_type: %s'),htmlspecialchars($ldapserver->auth_type))); -include './header.php'; ?> +include './header.php'; - -isAnonBindAllowed() ) { ?> +echo ''; +printf('

    %s %s

    ',_('Authenticate to server'),$ldapserver->name); + +# Check for a secure connection +if (! isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] != 'on') { + echo '
    '; + echo '
    '; + echo ''; + printf('%s: %s.', + _('You are not using \'https\'. Web browser will transmit login information in clear text.'), + _('Warning'),_('This web connection is unencrypted')); + echo ''; + echo '
    '; + echo '
    '; +} + +# Login form. +echo '
    '; +printf('',$ldapserver->server_id); + +if (isset($_GET['redirect'])) + printf('',rawurlencode($_GET['redirect'])); + +echo '
    '; +echo ''; + +printf('',$ldapserver->isLoginAttrEnabled() ? _('Login Name') : _('Login DN')); + +printf('', + $ldapserver->isLoginAttrEnabled() ? 'uid' : 'login_dn', + $ldapserver->isLoginAttrEnabled() ? '' : $ldapserver->login_dn); + +echo ''; +printf('',_('Password')); +echo ''; +echo ''; + +# If Anon bind allowed, then disable the form if the user choose to bind anonymously. +if ($ldapserver->isAnonBindAllowed()) + printf('', + _('Anonymous')); + +printf('', + _('Authenticate')); + +echo ''; +echo '
    '; +echo '
    '; + +if( $ldapserver->isAnonBindAllowed() ) { ?> - +name); ?> -
    - - -
    - - - - - -
    -
    - - -
    - -
    - - - - - - -
    - - -isAnonBindAllowed() ) { ?> - - - - - - - - - - - - - - - - - - - - -
    -
    - - diff --git a/htdocs/modify_member_form.php b/htdocs/modify_member_form.php new file mode 100644 index 0000000..d5b85e7 --- /dev/null +++ b/htdocs/modify_member_form.php @@ -0,0 +1,193 @@ +isReadOnly()) + pla_error(_('You cannot perform updates while server is in read-only mode')); +if (! $ldapserver->haveAuthInfo()) + pla_error(_('Not enough information to login to server. Please check your configuration.')); + +$attr = $_GET['attr']; +$dn = isset($_GET['dn']) ? $_GET['dn'] : null; +$encoded_dn = rawurlencode($dn); +$encoded_attr = rawurlencode($attr); + +if (! is_null($dn)) + $rdn = get_rdn($dn); +else + $rdn = null; + +# Get all current group members +$current_members = $ldapserver->getDNAttr($dn,$attr); +if ($current_members) + $num_current_members = (is_array($current_members) ? count($current_members) : 1); +else + $num_current_members = 0; + +/* + * If there is only one member, convert scalar to array, + * arrays are required later when processing members + */ +if ($num_current_members == 1) + $current_members = array($current_members); + +sort($current_members); + +# Loop through all base dn's and search possible member entries +foreach ($ldapserver->getBaseDN() as $base_dn) { + + # Get all entries that can be added to the group + if (preg_match("/^$attr$/i",$config->GetValue('modify_member','posixgroupattr'))) + $possible_values = array_merge($ldapserver->search(null,$base_dn, + $config->GetValue('modify_member','posixfilter'),array($config->GetValue('modify_member','posixattr')))); + else + $possible_values = array_merge($ldapserver->search(null,$base_dn, + $config->GetValue('modify_member','filter'),array($config->GetValue('modify_member','attr')))); +} + +if ($possible_values) + $num_possible_values = (is_array($possible_values) ? count($possible_values) : 1); +else + $num_possible_values = 0; + +sort($possible_values); + +include './header.php'; + +echo ''; +printf('

    %s %s

    ',_('Modify group'),htmlspecialchars($rdn)); + +printf('

    %s %s     %s: %s

    ', + _('Server'),$ldapserver->name,_('Distinguished Name'),htmlspecialchars($dn)); + +printf('%s %s %s %s:', + _('There are'),$num_current_members,_('members in group'),htmlspecialchars($rdn)); + +for ($i=0; $iGetValue('modify_member','posixgroupattr'))) + $possible_members[$i] = $possible_values[$i][$config->GetValue('modify_member','posixattr')]; + else + $possible_members[$i] = $possible_values[$i][$config->GetValue('modify_member','attr')]; +} + +sort($possible_members); + +/* + * Show only user that are not already in group. + * This loop removes existing users from possible members + */ +foreach ($possible_members as $pkey => $possible) { + foreach ($current_members as $current) { + if (preg_match("/^$current$/i","$possible_members[$pkey]")) { + unset($possible_members[$pkey]); + break; + } + } +} + +/* + * Draw form with select boxes, left for all possible members and + * right one for those that belong to group + */ + +# Modifications will be sent to update_confirm which takes care of rest of the processing +echo '
    '; +echo '
    '; +echo '
    '; + +echo ''; + +echo ''; +printf('',_('Available members')); +printf('',_('Group members')); +echo ''; + +# Generate select box from all possible members +echo ''; +echo ''; + +# Generate select box from all current members +echo ''; + +echo ''; + +# Show buttons which move users from left to right and vice versa +echo ''; +echo ''; +echo ''; +echo ''; + +echo ''; + +echo '
    Users %sMembers %s
    '; +echo ''; +echo ''; +echo ''; +echo '
    '; +printf(' ', + _('Add selected'),_('Add all')); +echo ''; +printf(' ', + _('Remove selected'),('Remove all')); +echo '
    '; + +# Hidden attributes for update_confirm.php +printf('',$ldapserver->server_id); +printf('',$dn); +printf('',$encoded_attr); + +/* + * Generate array of input text boxes from current members. + * update_confirm.php will see this as old_values[member-attribute][item] + */ +for ($i=0; $i<$num_current_members; $i++) + printf('', + htmlspecialchars($attr),$i,htmlspecialchars($current_members[$i])); + +/* + * Javascript generates array of input text boxes from new members. + * update_confirm.php will see this as new_values[member-attribute][item] + * Input text boxes will be generated to div=dnu + */ +echo '
    '; +printf('',htmlspecialchars($attr)); +echo '
    '; + +# Submit values to update_confirm.php and when clicked, run addSelected +printf('',_('Save changes'),$attr); +echo '
    '; +echo '
    '; + +# Variables for Javascript function that moves members from left to right +echo ''; + +echo ''; +?> diff --git a/htdocs/rdelete.php b/htdocs/rdelete.php index f1c7153..ee676cb 100644 --- a/htdocs/rdelete.php +++ b/htdocs/rdelete.php @@ -1,5 +1,5 @@ getContainerContents($dn); if (! is_array($children) || count($children) == 0) { - printf(''._('Deleting %s').'...',htmlspecialchars($dn)); + printf('%s %s...',_('Deleting'),htmlspecialchars($dn)); flush(); if (run_hook('pre_entry_delete',array('server_id'=>$ldapserver->server_id,'dn'=>$dn))) if ($ldapserver->delete($dn)) { run_hook('post_entry_delete',array('server_id'=>$ldapserver->server_id,'dn'=>$dn)); - printf(' %s
    ',_('Success')); + printf(' %s
    ',_('Success')); return true; } else { @@ -74,13 +74,13 @@ function pla_rdelete($ldapserver,$dn) { foreach ($children as $child_dn) pla_rdelete($ldapserver,$child_dn); - printf(''._('Deleting %s').'...',htmlspecialchars($dn)); + printf('%s %s...',_('Deleting'),htmlspecialchars($dn)); flush(); if (run_hook('pre_entry_delete',array('server_id'=>$ldapserver->server_id,'dn'=>$dn))) if ($ldapserver->delete($dn)) { run_hook('post_entry_delete',array('server_id'=>$ldapserver->server_id,'dn'=>$dn)); - printf(' %s
    ',_('Success')); + printf(' %s
    ',_('Success')); return true; } else { diff --git a/htdocs/rename.php b/htdocs/rename.php index 3e08b27..b0b2492 100644 --- a/htdocs/rename.php +++ b/htdocs/rename.php @@ -1,5 +1,5 @@ search(null,dn_escape($base_dn),$filter,$search_result_attributes,$scope,true,$config->GetValue('deref','search')); + $results = $ldapserver->search(null,dn_escape($base_dn),$filter, + $search_result_attributes,$scope,$orderby,$config->GetValue('deref','search')); if ((! $results) && $ldapserver->errno()) pla_error(_('Encountered an error while performing search.'),$ldapserver->error(),$ldapserver->errno()); diff --git a/htdocs/server_info.php b/htdocs/server_info.php index 1aa0c7f..29d905e 100644 --- a/htdocs/server_info.php +++ b/htdocs/server_info.php @@ -1,5 +1,5 @@ haveAuthInfo()) pla_error( _('Not enough information to login to server. Please check your configuration.') ); # Fetch basic RootDSE attributes using the + and *. -$attrs = array_pop($ldapserver->search(null,'','objectClass=*',array('+','*'),'base')); +$attrs = $ldapserver->search(null,'','objectClass=*',array('+','*'),'base'); +$attrs = array_pop($attrs); /* After fetching the "basic" attributes from the RootDSE, try fetching the more advanced ones (from ths list). Add them to the list of attrs to display if they weren't already fetched. (this was added as a work-around for OpenLDAP on RHEL 3. */ -$attrs2 = array_pop($ldapserver->search(null,'','objectClass=*',$root_dse_attributes,'base')); +$attrs2 = $ldapserver->search(null,'','objectClass=*',$root_dse_attributes,'base'); +$attrs2 = array_pop($attrs2); if (is_array($attrs2)) foreach ($attrs2 as $attr => $values) @@ -83,7 +85,7 @@ foreach ($attrs as $attr => $values) { $schema_href = sprintf('schema.php?server_id=%s&view=attributes&viewvalue=%s',$ldapserver->server_id,$attr); echo ''; - printf('%s', + printf('%s', $attr,$schema_href,htmlspecialchars($attr)); echo ''; diff --git a/htdocs/template_engine.php b/htdocs/template_engine.php index f292398..16fb11a 100644 --- a/htdocs/template_engine.php +++ b/htdocs/template_engine.php @@ -1,5 +1,5 @@ server_id); - $template = $templates->GetTemplate($_REQUEST['template']); + $template = $templates->getCreationTemplate($_REQUEST['template']); } } @@ -84,9 +83,25 @@ if (isset($template['empty_attrs'])) { echo "\n\n"; if (isset($_REQUEST['nextpage']) && ! $_REQUEST['nextpage']) { - $new_dn = sprintf('%s=%s,%s',$template['rdn'],$_REQUEST['form'][$template['rdn']],$_REQUEST['container']); - echo '
    '; + /* + * destinationcontainer is an otherride of dn. + * needed for such "actions" other than create.php + */ + if (!isset($template['destinationcontainer'])) + $new_dn = sprintf('%s=%s,%s',$template['rdn'],$_REQUEST['form'][$template['rdn']],$_REQUEST['container']); + else + $new_dn = sprintf('%s',$template['destinationcontainer']); + + /* + * default action is create.php + * you can change this behavior by setting myscript.php in template header + */ + if (!isset($template['action'])) + echo ''; + else + printf ('',rawurlencode($template['action'])); + printf('',htmlspecialchars($new_dn)); } else { @@ -255,7 +270,9 @@ if (isset($template['empty_attrs'])) { # Some conditional checking. # $detail['must'] & $detail['disable'] cannot be set at the same time. - if (isset($detail['must']) && $detail['must'] && isset($detail['disable']) && $detail['disable']) + # except when "action" is other than create.php + if (isset($detail['must']) && $detail['must'] && isset($detail['disable']) && $detail['disable'] + && (!isset($template['action']) || ($template['action']) == 'create.php')) pla_error(sprintf(_('Attribute [%s] is a MUST attribute, so it cannot be disabled.'),$attr)); # If this attribute is disabled, go to the next one. @@ -439,7 +456,7 @@ if (isset($template['empty_attrs'])) { printf('', $type,$attr,$attr.$i,(isset($detail['value']) ? $detail['value'] : ''), - "onBlur=\"fill('$attr', this.value);\"", + '', isset($detail['disable']) ? 'disabled' : ''); if (isset($detail['helper']) && isset($detail['helper']['location']) @@ -507,21 +524,32 @@ if (isset($template['empty_attrs'])) { printf('',($counter++%2==0?'even':'odd')); printf('',$attr); + $countitems = false; if (is_array($value)) foreach ($value as $item) { - if ($item && ! isset($unique[$item])) { + + if (($item || $item == '0') && ! isset($unique[$item])) { $unique[$item] = 1; + if ($countitems) + printf ('',($counter++%2==0?'even':'odd')); + + $countitems = true; + printf('', array_search($attr,$attrs),$item); + printf('%s%s',$attr,htmlspecialchars($item)); } } else { $display = $value; - if (isset($template['attribute'][$attr]['type']) && $template['attribute'][$attr]['type'] == 'password') - if (obfuscate_password_display($_REQUEST['enc'])) + if (isset($template['attribute'][$attr]['type']) && $template['attribute'][$attr]['type'] == 'password') { + + $enc = (isset($_REQUEST['enc'])) ? $_REQUEST['enc'] : get_enc_type($value); + if (obfuscate_password_display($enc)) $display = '********'; + } printf('',$value); printf('%s%s',$attr,htmlspecialchars($display)); @@ -619,7 +647,11 @@ if (isset($template['empty_attrs'])) { return; else { attrTrace[id] = 1; - document.getElementById(id).value = value; + // disable value setting in case of "select multiple" + if ((document.getElementById(id).tagName != "SELECT" + && document.getElementById(id).tagName != "select") + || document.getElementById(id).getAttribute("multiple") == "") + document.getElementById(id).value = value; // here comes template-specific implementation, generated by php if (false) {}'; @@ -738,21 +770,25 @@ foreach ($template['attrs'] as $attr => $vals) { echo ''; echo ''; - - $schema_href = sprintf('schema.php?server_id=%s&view=attributes&viewvalue=%s', + if ($config->GetValue('appearance','show_schema_link')) { + $schema_href = sprintf('schema.php?server_id=%s&view=attributes&viewvalue=%s', $ldapserver->server_id,real_attr_name($attr)); - - printf('%s',$attr,$schema_href,$attr_display); + printf('%s',$attr,$schema_href,$attr_display); + } else { + printf('%s',$attr_display); + } echo ''; - echo ''; - if ($attr_note) - printf('%s',$attr_note); + if ($config->GetValue('appearance','show_attribute_notes')) { + echo ''; + if ($attr_note) + printf('%s',$attr_note); - if ($ldapserver->isAttrReadOnly($attr)) - printf('(%s)',_('This attribute has been flagged as read only by the phpLDAPadmin administrator'),_('read only')); + if ($ldapserver->isAttrReadOnly($attr)) + printf('(%s)',_('This attribute has been flagged as read only by the phpLDAPadmin administrator'),_('read only')); - echo ''; + echo ''; + } echo ''; if ($is_modified_attr) @@ -968,13 +1004,17 @@ foreach ($template['attrs'] as $attr => $vals) { $val = $vals[0]; printf('',htmlspecialchars($attr),htmlspecialchars($val)); - printf(' ', + printf(' ', $attr,htmlspecialchars($attr),htmlspecialchars($val)); draw_date_selector_link($attr); - echo ''; + echo ''; echo ''; $js[] = sprintf('',$attr,$js_date_attrs[$attr]); + $js_datetime_attrs = $config->GetValue('appearance','date_attrs_showtime'); + if (in_array_ignore_case($attr,array_keys($js_datetime_attrs)) && ($js_datetime_attrs[$attr])) + $js[] = sprintf('',$attr,'true'); + if ($is_modified_attr) echo ''; @@ -1005,7 +1045,7 @@ foreach ($template['attrs'] as $attr => $vals) { if (! strcasecmp($attr,'objectClass')) { printf('Info ', - _('View the schema description for this objectClass'),$ldapserver->server_id,htmlspecialchars($val)); + _('View the schema description for this objectClass'),$ldapserver->server_id,strtolower(htmlspecialchars($val))); $schema_object = $ldapserver->getSchemaObjectClass($val); @@ -1022,10 +1062,10 @@ foreach ($template['attrs'] as $attr => $vals) { if (is_dn_string($val) || $ldapserver->isDNAttr($attr)) if ($ldapserver->dnExists($val)) { - printf(' ', + printf('Go ', htmlspecialchars($val),$ldapserver->server_id,rawurlencode($val)); } else { - printf(' ', + printf('N/E ', htmlspecialchars($val),$ldapserver->server_id,rawurlencode($val)); } @@ -1104,6 +1144,14 @@ foreach ($template['attrs'] as $attr => $vals) { printf('
    (%s)
    ', $add_href,sprintf(_('Add an additional value to attribute \'%s\''),$attr),_('add value')); + + if (in_array($schema_attr->name,$config->GetValue('modify_member','groupattr'))) { + $add_href = sprintf('modify_member_form.php?server_id=%s&dn=%s&attr=%s', + $ldapserver->server_id,$encoded_dn,rawurlencode($attr)); + + printf('
    (%s)
    ', + $add_href,sprintf('%s %s',_('Modify members for'),$dn),_('modify group members')); + } } echo ''; diff --git a/htdocs/tree.php b/htdocs/tree.php index 9b6b1ea..b75326c 100644 --- a/htdocs/tree.php +++ b/htdocs/tree.php @@ -1,5 +1,5 @@ '; echo ''; printf('',_('Home')); -printf('',_('Home')); +printf('',_('Home')); printf('',_('Purge caches')); -printf('',_('Purge all cached data in phpLDAPadmin, including server schemas.'),_('Purge caches')); +printf('',_('Purge all cached data in phpLDAPadmin, including server schemas.'),_('Purge caches')); echo ''; if (! $config->GetValue('appearance','hide_configuration_management')) { printf('',_('light')); - printf('',get_href('add_rfe'),_('Request feature')); + printf('',get_href('add_rfe'),_('Request feature')); printf('',_('bug')); - printf('',get_href('add_bug'),_('Report a bug')); + printf('',get_href('add_bug'),_('Report a bug')); echo ''; printf('',_('Donate')); - printf('',get_href('donate'),_('Donate')); + printf('',get_href('donate'),_('Donate')); } printf('',_('Help')); -printf('',_('Help')); +printf('',_('Help')); echo '
    %s%s%s%s%s%s
    %s%s%s%s%s%s
    %s%s%s%s%s%s
    '; echo "\n\n"; diff --git a/htdocs/update_confirm.php b/htdocs/update_confirm.php index 47670f3..bbdc84a 100644 --- a/htdocs/update_confirm.php +++ b/htdocs/update_confirm.php @@ -1,5 +1,5 @@ 0) { printf('',$counter%2 ? 'even' : 'odd'); printf('%s',htmlspecialchars($attr)); - echo ''; + echo ''; if (strcasecmp($attr,'userPassword') == 0) { foreach ($old_values[$attr] as $key => $value) { @@ -161,8 +161,8 @@ if (count($update_array) > 0) { else echo nl2br(htmlspecialchars($old_values[$attr])).'
    '; - echo '
    '; - echo ''; + echo ''; + echo ''; # Is this a multi-valued attribute? if (is_array($new_val)) { @@ -201,7 +201,7 @@ if (count($update_array) > 0) { } elseif ($new_val != '') printf('%s',_('[attribute deleted]')); - echo ''; + echo ''; printf('',htmlspecialchars($attr)); echo ''."\n\n"; diff --git a/lib/common.php b/lib/common.php index 79df572..0b6b41e 100644 --- a/lib/common.php +++ b/lib/common.php @@ -1,5 +1,5 @@ 'Array of attributes that should show a jscalendar', 'default'=>array('shadowExpire'=>'%es','shadowLastChange'=>'%es')); + $this->default->appearance['date_attrs_showtime'] = array( + 'desc'=>'Array of attributes that should show a the time when showing the jscalendar', + 'default'=>array('')); + $this->default->appearance['hide_configuration_management'] = array( 'desc'=>'Hide the Sourceforge related links', 'default'=>false); @@ -94,7 +98,7 @@ class Config { */ $this->default->appearance['obfuscate_password_display'] = array( 'desc'=>'Obfuscate the display of passwords', - 'default'=>false); + 'default'=>true); $this->default->appearance['show_clear_password'] = array( 'desc'=>'Whether to show clear passwords if we dont obfuscate them', @@ -108,6 +112,18 @@ class Config { 'desc'=>'Show helpful hints', 'default'=>true); + $this->default->appearance['show_top_create'] = array( + 'desc'=>'Show a additional create link on the top of the list if there are more than 10 entries', + 'default'=>true); + + $this->default->appearance['show_schema_link'] = array( + 'desc'=>'Show the schema link for each attribute', + 'default'=>true); + + $this->default->appearance['show_attribute_notes'] = array( + 'desc'=>'Show notes for each attribute', + 'default'=>true); + /** Tree display * A format string used to display enties in the tree viewer (left-hand side) * You can use special tokens to draw the entries as you wish. You can even mix in HTML to format the string @@ -141,6 +157,14 @@ class Config { 'desc'=>'Whether to enable the PHPLayersMenu for the tree', 'default'=>false); + /** + * Tree display filter + * LDAP filter used to search entries for the tree viewer (left-hand side) + */ + $this->default->appearance['tree_filter'] = array( + 'desc'=>'LDAP search filter for the tree entries', + 'default'=>'(objectClass=*)'); + /** Caching */ $this->default->cache['schema'] = array( @@ -209,6 +233,56 @@ class Config { 'desc'=>'Time in seconds to keep jpegPhoto temporary files in the temp directory', 'default'=>120); + ## Modify members feature + /** + * Search filter setting for new members. This is used to search possible members that can be added + * to the group. See modify_member_form.php + */ + $this->default->modify_member['filter'] = array( + 'desc'=>'Search filter for member searches', + 'default'=>'(objectclass=Person)'); + + /** + * Group attributes. When these attributes are seen in template_engine.php, add "modify group members" + * link to the attribute + * See template_engine.php + */ + $this->default->modify_member['groupattr'] = array( + 'desc'=>'Group member attributes', + 'default'=>array('member','uniqueMember','memberUid')); + + /** + * Attribute that is added to the group member attribute. For groupOfNames or groupOfUniqueNames this is dn, + * for posixGroup it's uid. See modify_member_form.php + */ + $this->default->modify_member['attr'] = array( + 'desc'=>'Default attribute that is added to the group member attribute', + 'default'=>'dn'); + + /** + * Attribute that is added to the group member attribute. + * For posixGroup it's uid. See modify_member_form.php + */ + $this->default->modify_member['posixattr'] = array( + 'desc'=>'Contents of the group member attribute', + 'default'=>'uid'); + + /** + * Search filter setting for new members to group. This is used to search possible members that can be added + * to the posixGroup. See modify_member_form.php + */ + $this->default->modify_member['posixfilter'] = array( + 'desc'=>'Search filter for posixmember searches', + 'default'=>'(uid=*)'); + + /** + * posixGroup attribute. When this attribute are seen in modify_member_form.php, only posixGroup members are shown + * See modify_member_form.php + */ + $this->default->modify_member['posixgroupattr'] = array( + 'desc'=>'posixGroup member attribute', + 'default'=>'memberUid'); + ## Session Attributes /** Cookie Encryption * phpLDAPadmin can encrypt the content of sensitive cookies if you set this to a big random string. @@ -250,6 +324,10 @@ class Config { 'desc'=>'Whether to use similiar characters', 'default'=>true); + $this->default->password['no_random_crypt_salt'] = array( + 'descr'=>'Disable random salt for crypt()', + 'default'=>false); + /** Search display * By default, when searching you may display a list or a table of results. * Set this to 'table' to see table formatted results. @@ -289,7 +367,7 @@ class Config { 'default'=>array('cn','sn','uid','postalAddress','telephoneNumber')); } - function GetValue($key,$index) { + public function GetValue($key,$index) { $value = null; @@ -321,7 +399,7 @@ class Config { /** * Function to check and warn about any unusual defined variables. */ - function CheckCustom() { + public function CheckCustom() { if (isset($this->custom)) { foreach ($this->custom as $masterkey => $masterdetails) { diff --git a/lib/functions.php b/lib/functions.php index 9a6a708..739e5ef 100644 --- a/lib/functions.php +++ b/lib/functions.php @@ -1,5 +1,5 @@ server_id,$startbase,$type); + debug_log('get_next_number(): Entered with (%s,%s,%s,%s)',1, + $ldapserver->server_id,$startbase,$type,$filter); global $config,$ldapservers; @@ -420,15 +421,16 @@ function get_next_number(&$ldapserver,$startbase='',$type='uid') { if (is_null($base_dn)) pla_error(sprintf(_('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.'),$ldapserver->name)); + configuration for server %s, but you did not specify the + "auto_uid_number_search_base". Please specify it before proceeding.'),$ldapserver->name)); } else { $base_dn = $startbase; } if (! $ldapserver->dnExists($base_dn)) - pla_error(sprintf(_('Your phpLDAPadmin configuration specifies an invalid auto_uid_search_base for server %s'),$ldapserver->name)); + pla_error(sprintf(_('Your phpLDAPadmin configuration specifies an invalid auto_uid_search_base for server %s'), + $ldapserver->name)); $filter = '(|(uidNumber=*)(gidNumber=*))'; $results = array(); @@ -497,11 +499,80 @@ function get_next_number(&$ldapserver,$startbase='',$type='uid') { break; + case 'uidpool': + $con = $ldapserver->connect(false,'auto_search',false, + $ldapservers->GetValue($ldapserver->server_id,'auto_number','dn'), + $ldapservers->GetValue($ldapserver->server_id,'auto_number','pass')); + + if (! $con) + pla_error(sprintf(_('Unable to bind to %s with your with auto_uid credentials. Please check your configuration file.'),$ldapserver->name)); + + # assume that uidpool dn is set in config file if no filter given + if (empty($filter)) + $uidpool_dn = $ldapservers->GetValue($ldapserver->server_id,'auto_number','uidpool_dn'); + + else { + $filter = str_replace(array('&',':::'),array('&',','),$filter); + $dns = $ldapserver->search($con,$startbase,$filter,array('dn'),'sub'); + + switch (count($dns)) { + case '1': + break; + + case '0': + pla_error(_('Uidpool dn not found, please change filter parameter')); + + default: + pla_error(_('There is more than one dn for uidpool,please change filter parameter')); + } + + list ($key,$attrs) = each($dns); + $attrs = array_change_key_case($attrs); + $uidpool_dn = $attrs['dn']; + } + + if (empty($uidpool_dn)) + pla_error(_('uidpool_dn not found. Please check filter (arg 3) or set up uidpool_dn in config file')); + + switch ($type) { + case 'uid': + $attrs = array('sambaNextUserRid'); + $key = 'sambanextuserrid'; + $realkey = 'sambaNextUserRid'; + break; + + case 'gid': + $attrs = array('sambaNextGroupRid'); + $key = 'sambanextgrouprid'; + $realkey = 'sambaNextGroupRid'; + break; + + default: + // It might exists other attributes types... + $attrs = array($type); + $key = strtolower($type); + $realkey = $type; + break; + } + + $number = $ldapserver->search($con,$uidpool_dn,$filter,$attrs,'base'); + list($rkey,$number) = each($number); + $number = array_change_key_case($number); + $number = $number[$key]; + + if (isset($increment) && ($increment == 'true')) { + $updatedattr = array ($key => $number + 1); + $ldapserver->modify($uidpool_dn,$updatedattr); + } + + return $number; + break; + # No other cases allowed. The user has an error in the configuration default : pla_error( sprintf( _('You specified an invalid value for auto_uid_number_mechanism ("%s") - in your configration. Only "uidpool" and "search" are valid. - Please correct this problem.') , $mechanism) ); + in your configration. Only "uidpool" and "search" are valid. + Please correct this problem.') , $mechanism) ); } } @@ -1006,67 +1077,91 @@ function support_oid_to_text($oid_id) { * @see ldap_errno * @see pla_verbose_error */ -function pla_error( $msg, $ldap_err_msg=null, $ldap_err_no=-1, $fatal=true ) { +function pla_error($msg,$ldap_err_msg=null,$ldap_err_no=-1,$fatal=true,$backtrace=null) { if (defined('DEBUG_ENABLED') && (DEBUG_ENABLED)) debug_log('pla_error(): Entered with (%s,%s,%s,%s)',1,$msg,$ldap_err_msg,$ldap_err_no,$fatal); - @include_once HTDOCDIR.'header.php'; + include_once HTDOCDIR.'header.php'; + $server = isset($_SERVER['SERVER_SOFTWARE']) ? $_SERVER['SERVER_SOFTWARE'] : 'undefined'; global $config; - ?> -
    - - ',_('Backtrace')); + + if (is_null($backtrace)) + $backtrace = debug_backtrace(); + + printf('', + 'PHP Version',phpversion()); + printf('', + 'PLA Version',pla_version()); + printf('', + 'PHP SAPI',php_sapi_name()); + printf('', + 'Web Server',$server); + + echo ''; + + foreach ($backtrace as $error => $line) { + printf('',_('File'),$line['file'],$line['line']); + printf(''; + } + + /* +
    + + */ + } + echo '
    Warning

    - -
    -
    - '; + echo ''; + + printf('',_('Error')); + + echo ''; + echo ''; + printf('',$msg); + echo ''; + + echo ''; if (function_exists('syslog_err')) syslog_err($msg); - if( $ldap_err_msg ) { - echo sprintf(_('LDAP said: %s'), htmlspecialchars( $ldap_err_msg )); - echo '
    '; - } + if ($ldap_err_msg) + printf('',_('LDAP said'),htmlspecialchars($ldap_err_msg)); - if( $ldap_err_no != -1 ) { - $ldap_err_no = ( '0x' . str_pad( dechex( $ldap_err_no ), 2, 0, STR_PAD_LEFT ) ); - $verbose_error = pla_verbose_error( $ldap_err_no ); + if ($ldap_err_no != -1) { + $ldap_err_no = ('0x'.str_pad(dechex($ldap_err_no),2,0,STR_PAD_LEFT)); + $verbose_error = pla_verbose_error($ldap_err_no); - if( $verbose_error ) { - echo sprintf( _('Error number: %s (%s)'), $ldap_err_no, $verbose_error['title']); - echo '
    '; - echo sprintf( _('Description: %s

    '), $verbose_error['desc']); + if ($verbose_error) { + printf('',_('Error number'),$ldap_err_no,$verbose_error['title']); + printf('',_('Description'),$verbose_error['desc']); } else { - echo sprintf(_('Error number: %s

    '), $ldap_err_no); - echo '
    '; - echo _('Description: (no description available)
    '); + printf('',_('Error number'),$ldap_err_no); + printf('',_('Description'),_('no description available')); } + echo ''; + if (function_exists('syslog_err')) - syslog_err(sprintf(_('Error number: %s

    '),$ldap_err_no)); - } - ?> -
    - -
    %s
    Warning%s
     
    %s: %s
    %s: %s (%s)
    %s: %s
    %s: %s
    %s: (%s)
     
    - - \n"; + } elseif ((defined('DEBUG_ENABLED') && DEBUG_ENABLED && function_exists('debug_backtrace')) || $backtrace) { + printf('
    %s
     %s%s
     %s%s
     %s%s
     %s%s
     
     %s%s (%s)
    %s%s
    ',_('Function'),$line['function']);
    +			print_r($line['args']);
    +			echo '
    '; + echo '
    '; + + if ($fatal) { + echo ''; + echo ''; die(); } } @@ -1088,69 +1183,66 @@ function pla_error( $msg, $ldap_err_msg=null, $ldap_err_no=-1, $fatal=true ) { * * @see set_error_handler */ -function pla_error_handler( $errno, $errstr, $file, $lineno ) { +function pla_error_handler($errno,$errstr,$file,$lineno) { if (DEBUG_ENABLED) debug_log('pla_error_handler(): Entered with (%s,%s,%s,%s)',1,$errno,$errstr,$file,$lineno); - // error_reporting will be 0 if the error context occurred - // within a function call with '@' preprended (ie, @ldap_bind() ); - // So, don't report errors if the caller has specifically - // disabled them with '@' - if( 0 == ini_get( 'error_reporting' ) || 0 == error_reporting() ) + /* error_reporting will be 0 if the error context occurred + * within a function call with '@' preprended (ie, @ldap_bind() ); + * So, don't report errors if the caller has specifically + * disabled them with '@' + */ + if (ini_get('error_reporting') == 0 || error_reporting() == 0) return; - $file = basename( $file ); - $caller = basename( $_SERVER['PHP_SELF'] ); - $errtype = ""; - switch( $errno ) { - case E_STRICT: $errtype = "E_STRICT"; break; - case E_ERROR: $errtype = "E_ERROR"; break; - case E_WARNING: $errtype = "E_WARNING"; break; - case E_PARSE: $errtype = "E_PARSE"; break; - case E_NOTICE: $errtype = "E_NOTICE"; break; - case E_CORE_ERROR: $errtype = "E_CORE_ERROR"; break; - case E_CORE_WARNING: $errtype = "E_CORE_WARNING"; break; - case E_COMPILE_ERROR: $errtype = "E_COMPILE_ERROR"; break; - case E_COMPILE_WARNING: $errtype = "E_COMPILE_WARNING"; break; - case E_USER_ERROR: $errtype = "E_USER_ERROR"; break; - case E_USER_WARNING: $errtype = "E_USER_WARNING"; break; - case E_USER_NOTICE: $errtype = "E_USER_NOTICE"; break; - case E_ALL: $errtype = "E_ALL"; break; - default: $errtype = _('Unrecognized error number: ') . $errno; + $file = basename($file); + $caller = basename($_SERVER['PHP_SELF']); + $errtype = ''; + + switch ($errno) { + case E_STRICT: $errtype = 'E_STRICT'; break; + case E_ERROR: $errtype = 'E_ERROR'; break; + case E_WARNING: $errtype = 'E_WARNING'; break; + case E_PARSE: $errtype = 'E_PARSE'; break; + case E_NOTICE: $errtype = 'E_NOTICE'; break; + case E_CORE_ERROR: $errtype = 'E_CORE_ERROR'; break; + case E_CORE_WARNING: $errtype = 'E_CORE_WARNING'; break; + case E_COMPILE_ERROR: $errtype = 'E_COMPILE_ERROR'; break; + case E_COMPILE_WARNING: $errtype = 'E_COMPILE_WARNING'; break; + case E_USER_ERROR: $errtype = 'E_USER_ERROR'; break; + case E_USER_WARNING: $errtype = 'E_USER_WARNING'; break; + case E_USER_NOTICE: $errtype = 'E_USER_NOTICE'; break; + case E_ALL: $errtype = 'E_ALL'; break; + + default: $errtype = sprintf('%s: %s',_('Unrecognized error number'),$errno); } - $errstr = preg_replace("/\s+/"," ",$errstr); - if( $errno == E_NOTICE ) { - echo sprintf(_('
    - - - -
    Warning - 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 check and see if this bug has been reported here.
    If it hasnt been reported, you may report this bug by clicking here.

    '), $errstr, $errtype, $file, - $lineno, $caller, pla_version(), phpversion(), php_sapi_name(), - $_SERVER['SERVER_SOFTWARE'], get_href('search_bug',"&summary_keyword=".htmlspecialchars($errstr)),get_href('add_bug')); + $errstr = preg_replace('/\s+/',' ',$errstr); + + if ($errno == E_NOTICE) { + echo '
    '; + + echo ''; + printf('', + _('You found a non-fatal phpLDAPadmin bug!')); + + printf('',_('Error'),$errstr,$errtype); + printf('',_('File'),$file,_('line'),$lineno,_('caller'),$caller); + printf('', + pla_version(),phpversion(),php_sapi_name()); + printf('',$_SERVER['SERVER_SOFTWARE']); + + printf('', + get_href('search_bug',"&summary_keyword=".htmlspecialchars($errstr)), + _('Please check and see if this bug has been reported')); + echo '
    Warning %s
    %s:%s (%s)
    %s:%s %s %s, %s %s
    Versions:PLA: %s, PHP: %s, SAPI: %s
    Web server:%s
    %s.
    '; + + echo '
    '; + return; } - $server = isset( $_SERVER['SERVER_SOFTWARE'] ) ? $_SERVER['SERVER_SOFTWARE'] : 'undefined'; - $phpself = isset( $_SERVER['PHP_SELF'] ) ? basename( $_SERVER['PHP_SELF'] ) : 'undefined'; - pla_error( sprintf(_('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!'), $errstr, $errtype, $file, - $lineno, $phpself, pla_version(), - phpversion(), php_sapi_name(), $server )); + pla_error(sprintf('%s: %s',$errtype,$errstr),null,-1,true,debug_backtrace()); } /** @@ -1216,7 +1308,8 @@ function draw_jpeg_photos($ldapserver,$dn,$attr_name='jpegPhoto',$draw_delete_bu if (isset($table_html_attrs) && trim($table_html_attrs) ) printf(' + + + + + diff --git a/lib/server_functions.php b/lib/server_functions.php index 45ceb4d..63adf18 100644 --- a/lib/server_functions.php +++ b/lib/server_functions.php @@ -1,5 +1,5 @@ _connect($connect_id); - if ($resource && ! $reconnect) + if (is_resource($resource) && ! $reconnect) return $resource; if (DEBUG_ENABLED) @@ -243,7 +243,7 @@ class LDAPserver { # Now that we have worked out the connect_id, lets just check and see if we have already connected. $resource = $this->_connect($connect_id); - if ($resource && ! $reconnect) + if (is_resource($resource) && ! $reconnect) return $resource; run_hook('pre_connect',array('server_id'=>$this->server_id,'connect_id'=>$connect_id)); @@ -419,7 +419,8 @@ class LDAPserver { debug_log('%s::getBaseDN(): Connect to LDAP to find BaseDN',80,get_class($this)); if ($this->connect()) { - $r = array_pop($this->search(null,'','objectClass=*',array('namingContexts'),'base')); + $r = $this->search(null,'','objectClass=*',array('namingContexts'),'base'); + $r = array_pop($r); if (is_array($r)) $r = array_change_key_case($r); @@ -1219,11 +1220,7 @@ class LDAPserver { /* foreach of the attribute's aliases, create a new entry in the attrs array with its name set to the alias name, and all other data copied.*/ foreach ($aliases as $alias_attr_name) { - # clone is a PHP5 function and must be used. - if (version_compare(PHP_VERSION,'5.0') > 0 ) - $new_attr = clone($attr); - else - $new_attr = $attr; + $new_attr = clone $attr; $new_attr->setName($alias_attr_name); $new_attr->addAlias($attr->getName()); @@ -1276,11 +1273,7 @@ class LDAPserver { /* clone the SUP attributeType and populate those values that were set by the child attributeType */ - # clone is a PHP5 function and must be used. - if (function_exists('clone')) - $attr = clone($sup_attr); - else - $attr = $sup_attr; + $attr = clone $sup_attr; $attr->setOID($tmp_oid); $attr->setName($tmp_name); @@ -1754,13 +1747,13 @@ class LDAPserver { * @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) + * 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. + * LDAP_DEREF_ALWAYS, LDAP_DEREF_NEVER, LDAP_DEREF_SEARCHING, or LDAP_DEREF_FINDING. See the PHP LDAP API for details. * @param int $size_limit Size limit for search * @todo: Add entries to tree cache. */ - function search($resource=null,$base_dn=null,$filter,$attrs=array(),$scope='sub',$sort_results=true,$deref=LDAP_DEREF_NEVER,$size_limit=0) { + function search($resource=null,$base_dn=null,$filter,$attrs=array(),$scope='sub',$sort_results=true,$deref=LDAP_DEREF_NEVER,$size_limit=0,$sort_by=null) { if (DEBUG_ENABLED) debug_log('%s::search(): Entered with (%s,%s,%s,%s,%s,%s,%s)',17, get_class($this),is_resource($this),$base_dn,$filter,$attrs,$scope,$sort_results,$deref); @@ -1802,6 +1795,10 @@ class LDAPserver { return array(); $return = array(); + if (is_array($sort_by)) + foreach ($sort_by as $sort) + if (in_array($sort,$attrs)) + ldap_sort($resource,$search,$sort); # Get the first entry identifier if ($entry_id = ldap_first_entry($resource,$search)) @@ -2524,7 +2521,8 @@ class LDAPserver { debug_log('%s:getDNAttrs(): Entered with (%s,%s,%s)',17, get_class($this),$dn,$lower_case_attr_names,$deref); - $attrs = array_pop($this->search(null,dn_escape($dn),'(objectClass=*)',array(),'base',false,$deref)); + $attrs = $this->search(null,dn_escape($dn),'(objectClass=*)',array(),'base',false,$deref); + $attrs = array_pop($attrs); if (is_array($attrs)) { if ($lower_case_attr_names) diff --git a/lib/template_functions.php b/lib/template_functions.php index 6503267..b25e9ca 100644 --- a/lib/template_functions.php +++ b/lib/template_functions.php @@ -1,5 +1,5 @@ _template = get_cached_item($server_id,'template','all')) { + if ($this->_creation_template = get_cached_item($server_id,'template','creation')) { if (DEBUG_ENABLED) debug_log('%s::init(): Using CACHED [%s]',5,get_class($this),'templates'); @@ -119,19 +119,19 @@ class Templates { $this->storeTemplate($template_name,$xmldata); } - masort($this->_template,'title'); - set_cached_item($server_id,'template','all',$this->_template); + masort($this->_creation_template,'title'); + set_cached_item($server_id,'template','creation',$this->_creation_template); } } - function storeTemplate($template,$xmldata) { + function storeTemplate($xtemplate,$xmldata) { if (DEBUG_ENABLED) debug_log('%s::storeTemplate(): Entered with (%s,%s)',5, get_class($this),$template,$xmldata); global $ldapserver; - $this->_template[$template]['objectclass'] = array(); + $template['objectclass'] = array(); foreach ($xmldata['template'] as $xml_key => $xml_value) { if (DEBUG_ENABLED) debug_log('%s::storeTemplate(): Foreach loop Key [%s] Value [%s]',4, @@ -149,10 +149,10 @@ class Templates { if ($schema = $ldapserver->getSchemaObjectClass($details['ID'])) { # If we havent recorded this objectclass already, do so now. - if (! isset($this->_template[$template]['objectclass']) || - ! in_array($schema->getName(),$this->_template[$template]['objectclass'])) { + if (! isset($template['objectclass']) || + ! in_array($schema->getName(),$template['objectclass'])) { - $this->_template[$template]['objectclass'][] = $schema->getName(); + $template['objectclass'][] = $schema->getName(); } # This objectClass doesnt exist. @@ -161,10 +161,10 @@ class Templates { } else { if ($schema = $ldapserver->getSchemaObjectClass($details)) { - if (! isset($this->_template[$template]['objectclass']) || - ! in_array($details,$this->_template[$template]['objectclass'])) { - - $this->_template[$template]['objectclass'][] = $schema->getName(); + if (! isset($template['objectclass']) || + ! in_array($details,$template['objectclass'])) { + + $template['objectclass'][] = $schema->getName(); } # This objectClass doesnt exist. @@ -182,7 +182,7 @@ class Templates { debug_log('%s::storeTemplate(): Case [%s]',4,get_class($this),'attributes'); if (isset($xmldata['template']['attributes']) && is_array($xmldata['template']['attributes'])) { - $this->_template[$template]['attribute'] = array(); + $template['attribute'] = array(); foreach ($xmldata['template']['attributes'] as $tattrs) { foreach ($tattrs as $index => $attr_details) { @@ -194,7 +194,7 @@ class Templates { # Single attribute XML files are not indexed. if (is_numeric($index)) { if ($attr = $ldapserver->getSchemaAttribute($attr_details['ID'])) - $this->_template[$template]['attribute'][$attr->getName()] = $this->_parseXML($index,$attr_details); + $template['attribute'][$attr->getName()] = $this->_parseXML($index,$attr_details); } else { if (! strcmp($index,'ID')) @@ -203,12 +203,12 @@ class Templates { if ($attr = $ldapserver->getSchemaAttribute($tattrs['ID'])) { foreach ($attr_details as $key => $values) { if (is_array($values) && isset($values['ID'])) { - $this->_template[$template]['attribute'][$attr->getName()][$index]['_KEY:'.$values['ID']] = $this->_parseXML($key,$values); + $template['attribute'][$attr->getName()][$index]['_KEY:'.$values['ID']] = $this->_parseXML($key,$values); } elseif (is_array($values) && isset($values['#text'])) { - $this->_template[$template]['attribute'][$attr->getName()][$index][] = $values['#text']; - + $template['attribute'][$attr->getName()][$index][] = $values['#text']; + } else { - $this->_template[$template]['attribute'][$attr->getName()][$index] = $this->_parseXML($key,$values); + $template['attribute'][$attr->getName()][$index] = $this->_parseXML($key,$values); } } } @@ -217,11 +217,11 @@ class Templates { } # Do we have an override parameter? - foreach ($this->_template[$template]['attribute'] as $key => $data) { + foreach ($template['attribute'] as $key => $data) { if (isset($data['override'])) { - $this->_template[$template]['attribute'][$data['override']] = $data; - unset($this->_template[$template]['attribute'][$key]); - $this->_template[$template]['attribute'][$key] = $data['override']; + $template['attribute'][$data['override']] = $data; + unset($template['attribute'][$key]); + $template['attribute'][$key] = $data['override']; } } } @@ -229,23 +229,23 @@ class Templates { break; default : - $this->_template[$template][$xml_key] = $xml_value['#text']; + $template[$xml_key] = $xml_value['#text']; } } - if (! count($this->_template[$template]['objectclass'])) { - $this->_template[$template]['invalid'] = 1; - $this->_template[$template]['invalid_reason'] = _('ObjectClasses in XML dont exist in LDAP server.'); + if (! count($template['objectclass'])) { + $template['invalid'] = 1; + $template['invalid_reason'] = _('ObjectClasses in XML dont exist in LDAP server.'); return; } - + # Collect our structural, must & may attributes. - $this->_template[$template]['must'] = array(); - $this->_template[$template]['may'] = array(); - $this->_template[$template]['empty_attrs'] = array(); + $template['must'] = array(); + $template['may'] = array(); + $template['empty_attrs'] = array(); $superclasslist = array(); - foreach ($this->_template[$template]['objectclass'] as $oclass) { + foreach ($template['objectclass'] as $oclass) { # If we get some superclasses - then we'll need to go through them too. $supclass = true; @@ -257,27 +257,27 @@ class Templates { * Shouldnt be required now... # Test that this is a valid objectclass - disable if an invalid one found. if (! $schema_object) { - $this->_template[$template]['invalid'] = 1; + $template['invalid'] = 1; $supclass = false; continue; } */ if ($schema_object->getType() == 'structural' && (! $enherited)) - $this->_template[$template]['structural'][] = $oclass; + $template['structural'][] = $oclass; if ($schema_object->getMustAttrs() ) foreach ($schema_object->getMustAttrs() as $index => $detail) { $objectclassattr = $detail->getName(); - if (! in_array($objectclassattr,$this->_template[$template]['must']) && + if (! in_array($objectclassattr,$template['must']) && strcasecmp('objectClass',$objectclassattr) != 0) { # Go through the aliases, and ignore any that are already defined. $ignore = false; $attr = $ldapserver->getSchemaAttribute($objectclassattr); foreach ($attr->aliases as $alias) { - if (in_array($alias,$this->_template[$template]['must'])) { + if (in_array($alias,$template['must'])) { $ignore = true; break; } @@ -286,14 +286,14 @@ class Templates { if ($ignore) continue; - if (isset($this->_template[$template]['attribute'][$objectclassattr]) && - ! is_array($this->_template[$template]['attribute'][$objectclassattr])) + if (isset($template['attribute'][$objectclassattr]) && + ! is_array($template['attribute'][$objectclassattr])) - $this->_template[$template]['must'][] = - $this->_template[$template]['attribute'][$objectclassattr]; + $template['must'][] = + $template['attribute'][$objectclassattr]; else - $this->_template[$template]['must'][] = $objectclassattr; + $template['must'][] = $objectclassattr; } } @@ -301,8 +301,8 @@ class Templates { foreach ($schema_object->getMayAttrs() as $index => $detail) { $objectclassattr = $detail->getName(); - if (! in_array($objectclassattr,$this->_template[$template]['may'])) - $this->_template[$template]['may'][] = $objectclassattr; + if (! in_array($objectclassattr,$template['may'])) + $template['may'][] = $objectclassattr; } # Keep a list to objectclasses we have processed, so we dont get into a loop. @@ -327,65 +327,67 @@ class Templates { } # Remove any must attributes in the may list. - foreach ($this->_template[$template]['may'] as $index => $detail) { - if (in_array($detail,$this->_template[$template]['must'])) { - unset($this->_template[$template]['may'][$index]); + foreach ($template['may'] as $index => $detail) { + if (in_array($detail,$template['must'])) { + unset($template['may'][$index]); continue; } } # Remove any attributes not in the xml file and not in the dn. - foreach ($this->_template[$template]['may'] as $index => $detail) { - if (isset($this->_template[$template]['attribute']) - && ! isset($this->_template[$template]['attribute'][$detail])) { + foreach ($template['may'] as $index => $detail) { + if (isset($template['attribute']) + && ! isset($template['attribute'][$detail])) { - unset($this->_template[$template]['may'][$index]); + unset($template['may'][$index]); continue; } if (! isset($attrs[$detail])) - if (isset($this->_template[$template]['attribute'][$detail])) - $this->_template[$template]['empty_attrs'][$detail] = $this->_template[$template]['attribute'][$detail]; + if (isset($template['attribute'][$detail])) + $template['empty_attrs'][$detail] = $template['attribute'][$detail]; else - $this->_template[$template]['empty_attrs'][$detail]['display'] = $detail; + $template['empty_attrs'][$detail]['display'] = $detail; else - $this->_template[$template]['attrs'][$detail] = $attrs[$detail]; + $template['attrs'][$detail] = $attrs[$detail]; } # Add the must attrs to the attributes key. - foreach ($this->_template[$template]['must'] as $index => $detail) { + foreach ($template['must'] as $index => $detail) { if (! isset($attrs[$detail])) { - if (isset($this->_template[$template]['attribute'][$detail])) - $this->_template[$template]['empty_attrs'][$detail] = $this->_template[$template]['attribute'][$detail]; + if (isset($template['attribute'][$detail])) + $template['empty_attrs'][$detail] = $template['attribute'][$detail]; else - $this->_template[$template]['empty_attrs'][$detail]['display'] = $detail; + $template['empty_attrs'][$detail]['display'] = $detail; - $this->_template[$template]['empty_attrs'][$detail]['must'] = true; + $template['empty_attrs'][$detail]['must'] = true; } else - $this->_template[$template]['attrs'][$detail] = $attrs[$detail]; + $template['attrs'][$detail] = $attrs[$detail]; } # Check if there are any items without a page or order parameter, and make it 1 and 255. - foreach ($this->_template[$template]['empty_attrs'] as $index => $detail) { + foreach ($template['empty_attrs'] as $index => $detail) { if (! isset($detail['page'])) - $this->_template[$template]['empty_attrs'][$index]['page'] = 1; + $template['empty_attrs'][$index]['page'] = 1; if (! isset($detail['order'])) - $this->_template[$template]['empty_attrs'][$index]['order'] = 255; + $template['empty_attrs'][$index]['order'] = 255; } # Check we have some manditory items. foreach (array('rdn','structural','visible') as $key) { - if (! isset($this->_template[$template][$key]) - || (! is_array($this->_template[$template][$key]) && ! trim($this->_template[$template][$key]))) { + if (! isset($template[$key]) + || (! is_array($template[$key]) && ! trim($template[$key]))) { - //unset($this->_template[$template]); - $this->_template[$template]['invalid'] = 1; - $this->_template[$template]['invalid_reason'] = sprintf(_('Missing %s in the XML file.'),$key); + //unset($template); + $template['invalid'] = 1; + $template['invalid_reason'] = sprintf(_('Missing %s in the XML file.'),$key); break; } } + + $this->_creation_template[$xtemplate] = $template; } function _parseXML($index,$attr_details) { @@ -423,12 +425,12 @@ class Templates { return $parseXML; } - function getTemplate($template) { - return isset($this->_template[$template]) ? $this->_template[$template] : null; + function getCreationTemplate($template) { + return isset($this->_creation_template[$template]) ? $this->_creation_template[$template] : null; } - function getTemplates() { - return $this->_template; + function getCreationTemplates() { + return $this->_creation_template; } function OnChangeAdd($ldapserver,$origin,$value) { @@ -438,7 +440,8 @@ class Templates { global $_js_hash; - list($command,$arg) = split(':',$value); + # limit to 2 fields because of 'C:\\my directory\\foobar' + list($command,$arg) = split(':',$value,2); switch ($command) { /* @@ -447,7 +450,7 @@ class Templates { to substitute values read from other fields. |start-end is optional, but must be present if the k flag is used. /flags is optional. - + flags may be: T: Read display text from selection item (drop-down list), otherwise, read the value of the field For fields that aren't selection items, /T shouldn't be used, and the field value will always be read. @@ -465,7 +468,7 @@ class Templates { */ case 'autoFill' : list($attr,$string) = preg_split('(([^,]+),(.*))',$arg,-1,PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY); - preg_match_all('/%(\w+)(\|[0-9]*-[0-9]*)?(\/[klTU]+)?%/U',$string,$matchall); + preg_match_all('/%(\w+)(\|[0-9]*-[0-9]*)?(\/[klTUA]+)?%/U',$string,$matchall); //print"
    ";print_r($matchall); //0 = highlevel match, 1 = attr, 2 = subst, 3 = mod
     
     				if (! isset($_js_hash['autoFill'.$origin]))
    @@ -529,17 +532,20 @@ class Templates {
     					if (strstr($match_mod,'U')) {
     						$_js_hash['autoFill'.$origin] .= sprintf("   %s = %s.toUpperCase();\n",$match_attr,$match_attr);
     					}
    +					if (strstr($match_mod,'A')) {
    +						$_js_hash['autoFill'.$origin] .= sprintf("   %s = toAscii(%s);\n",$match_attr,$match_attr);
    +					}
     
     					# Matchfor only entry without modifiers.
     					$formula = preg_replace('/^%('.$match_attr.')%$/U','$1 + \'\'',$formula);
     					# Matchfor only entry with modifiers.
    -					$formula = preg_replace('/^%('.$match_attr.')(\|[0-9]*-[0-9]*)?(\/[klTU]+)?%$/U','$1 + \'\'',$formula);
    +					$formula = preg_replace('/^%('.$match_attr.')(\|[0-9]*-[0-9]*)?(\/[klTUA]+)?%$/U','$1 + \'\'',$formula);
     					# Matchfor begining entry.
    -					$formula = preg_replace('/^%('.$match_attr.')(\|[0-9]*-[0-9]*)?(\/[klTU]+)?%/U','$1 + \'',$formula);
    +					$formula = preg_replace('/^%('.$match_attr.')(\|[0-9]*-[0-9]*)?(\/[klTUA]+)?%/U','$1 + \'',$formula);
     					# Matchfor ending entry.
    -					$formula = preg_replace('/%('.$match_attr.')(\|[0-9]*-[0-9]*)?(\/[klTU]+)?%$/U','\' + $1 ',$formula);
    +					$formula = preg_replace('/%('.$match_attr.')(\|[0-9]*-[0-9]*)?(\/[klTUA]+)?%$/U','\' + $1 ',$formula);
     					# Match for entries not at begin/end.
    -					$formula = preg_replace('/%('.$match_attr.')(\|[0-9]*-[0-9]*)?(\/[:lTU]+)?%/U','\' + $1 + \'',$formula);
    +					$formula = preg_replace('/%('.$match_attr.')(\|[0-9]*-[0-9]*)?(\/[:lTUA]+)?%/U','\' + $1 + \'',$formula);
     				}
     
     				$_js_hash['autoFill'.$origin] .= sprintf(" fillRec('%s', %s);\n",$attr,$formula);
    @@ -570,38 +576,319 @@ class Templates {
     
     			switch($matches[1]) {
     				case 'GetNextNumber' :
    +					/*
    +					 * mandatory arguments:
    +					 * * arg 0
    +					 *   - "$" => 'auto_number','search_base' in config file
    +					 *   - "/","..","." => get container parent as usual
    +					 * * arg 1
    +					 *   - "gid" or "uid" for autosearch
    +					 *   - idem or real attribute name for uidpool mechanism
    +					 *     (gid and uid are mapped to sambaNextGroupRid and sambaNextUserRid)
    +					 * optional arguments:
    +					 * * arg 2 (uidpool mechanism only)
    +					 *   - "true" increments attribute by 1
    +					 *   - "false" do nothing
    +					 * * arg 3 (uidpool mechanism only)
    +					 *   ldap filter (must match one entry only in container)
    +					 * * arg 4
    +					 *   calculus on number, eg:
    +					 *   *2;+1000 => number = (2*number) + 1000
    +					 */
    +
     					if ($args[0] == '$')
     						$args[0] = $ldapservers->GetValue($ldapserver->server_id,'auto_number','search_base');
     
     					$container = $ldapserver->getContainerParent($container,$args[0]);
    +					$detail['value'] = get_next_number($ldapserver,$container,$args[1],
    +						(!empty($args[2]) && ($args[2] == 'true')) ? true : false,(!empty($args[3])) ? $args[3] : false);
     
    -					$detail['value'] = get_next_number($ldapserver,$container,$args[1]);
    +					# operate calculus on next number.
    +					if (!empty($args[4])) {
    +						$mod = split(';',$args[4]);
    +
    +						$next_number = $detail['value'];
    +
    +						foreach ($mod as $calc) {
    +							$operand = $calc{0};
    +							$operator = substr ($calc,1);
    +
    +							switch ($operand) {
    +								case '*':
    +									$next_number = $next_number * $operator;
    +									break;
    +
    +								case '+':
    +									$next_number = $next_number + $operator;
    +									break;
    +
    +								case '-':
    +									$next_number = $next_number - $operator;
    +									break;
    +
    +								case '/':
    +									$next_number = $next_number / $operator;
    +									break;
    +							}
    +						}
    +
    +						$detail['value'] = $next_number;
    +					}
     					break;
     
     				case 'PickList' :
    +					/*
    +					 * PickList Syntax:
    +					 * arg0: container, from current position
    +					 * arg1: LDAP filter. must replace '&' by '&'
    +					 * arg2: list attribute key
    +					 * arg3: display, as usual
    +					 optional arguments:
    +					 * arg4: output attribute
    +					 * arg5: container override
    +					 * arg6: csv list (; separator) of added values. syntax key => display_attribute=value; key...
    +					 * arg7: csv list (; separator) of sort attributes (less to more important)
    +					 * example
    +					 * =php.PickList(/,(&(objectClass=sambaGroupMapping)(|(cn=domain administrator)(cn=domain users)(cn=domain guests))),sambaSID,%cn% (%sambaSID%),sambaPrimaryGroupSID,dmdname=users:::dmdName=groups:::dc=example:::dc=com, S-1-5-XX-YYY => cn=Administrators ; S-1-5-XX-YYY => cn=Users ; S-1-5-XX-YYY => cn=Guests ; S-1-5-XX-YYY => cn=power users,cn)
    +					 */
    +
     					$container = $ldapserver->getContainerParent($container,$args[0]);
     					preg_match_all('/%(\w+)(\|.+)?(\/[lU])?%/U',$args[3],$matchall);
     					//print_r($matchall); // -1 = highlevel match, 1 = attr, 2 = subst, 3 = mod
     
     					$ldap_attrs = $matchall[1];
     					array_push($ldap_attrs,$args[2]);
    -					$picklistvalues = return_ldap_hash($ldapserver,$container,$args[1],$args[2],$ldap_attrs);
    +
    +					$args[1] = str_replace ('&','&',$args[1]);
    +
    +					# arg5 overrides container
    +					if (!empty($args[5]))
    +						$container = str_replace(':::',',',$args[5]);
    +
    +					if (!empty($args[7])) {
    +						$sort_attrs = split(';',$args[7]);
    +						$ldap_attrs = array_merge($ldap_attrs,$sort_attrs);
    +					}
    +
    +					$picklistvalues = return_ldap_hash($ldapserver,$container,$args[1],$args[2],$ldap_attrs,
    +						(isset($args[7])) ? $sort_attrs : false);
    +
    +					if (!empty($args[6])) {
    +						$args[6] = str_replace(':::',',',$args[6]);
    +						$fixedvalues = split(';',$args[6]);
    +
    +						foreach ($fixedvalues as $fixedvalue) {
    +							$fixedvalue = preg_split('#=\>#',$fixedvalue);
    +							$displayvalue = split('=',$fixedvalue[1]);
    +							$newvalue[trim($fixedvalue[0])] = array( $args[2] => trim($fixedvalue[0]),
    +								trim($displayvalue[0]) => trim($displayvalue[1]));
    +							$picklistvalues = array_merge($picklistvalues,$newvalue);
    +						}
    +					}
     
     					$detail['value'] = sprintf('';
    +
    +					break;
    +
    +				case 'MultiList' :
    +					/*
    +					 * MultiList Syntax:
    +					 */
    +					/**
    +					 mandatory fields:
    +						arg 0: "/" ,"..","." - from container dn
    +						arg 1: search filter, may have values like '%gidNumber%, in case of it is replaced
    +								by the gidNumber setted in previous pages. '&' must be replaced by '&'
    +								because of xml...
    +						arg 2: the key of retrived values
    +					optional fields:
    +						arg 3: display, as usual (plus modifier /C: Capitalize). replaced by %arg 2% if not given
    +						arg 4: the value furnished in output - must be attribute id. replaced by arg 2 if not given
    +						arg 5: override of container (replace ',' by ':::' in dn)
    +						arg 6: csv (; separator) list of added values. syntax: value => display_key=display_value
    +						arg 7: csv (; separator) list of attributes which list must be sort by. less to more important
    +						arg 8: size of displayed list (default: 10lines)
    +						arg 9: preselected values filter. see arg 1.
    +						arg 10: key of preselected values. replaced by arg 4 if not given. replaced bty arg 2 if both are not given.
    +						arg 11: base dn override for preselected values
    +
    +					unusual exemple:)
    +					 =php.MultiList(/,(&(objectClass=posixAccount)(uid=groupA*)),uid,%cn/U% (%gidNumber%),memberUid,dmdName=users,root => cn=root; nobody => cn=nobody,gidNumber,10,(gidNuber=%gidNumber%),uid)
    +					minimal exemple:
    +					 =php.MultiList(/,(objectClass=posixAccount),uid)
    +					**/
    +
    +					$container = $ldapserver->getContainerParent($container,$args[0]);
    +
    +					/*
    +					 * process filter (arg 1), eventually replace %attr% by it's value
    +					 * setted in a previous page.
    +					 */
    +					$args[1] = str_replace('&','&',$args[1]);
    +
    +					preg_match_all('/%(\w+)(\|.+)?(\/[lUC])?%/U',$args[1],$filtermatchall);
    +					$formvalues = array_change_key_case($_REQUEST['form']);
    +
    +					foreach ($filtermatchall[1] as $arg) {
    +						$value=$formvalues[strtolower($arg)];
    +						$args[1] = preg_replace('/%('.$arg.')(\|.+)?(\/[lU])?%/U',$value,$args[1]);
    +					}
    +
    +					$args[3] = !empty($args[3]) ? $args[3] : "%{$args[2]}%";
    +
    +					preg_match_all('/%(\w+)(\|.+)?(\/[lUC])?%/U',$args[3],$matchall);
    +					//print_r($matchall); // -1 = highlevel match, 1 = attr, 2 = subst, 3 = mod
    +
    +					$ldap_attrs = $matchall[1];
    +					array_push($ldap_attrs,$args[2]);
    +
    +					/*
    +					 * container is arg 5 if set
    +					 * with arg 5 = 'dc=thissubtree:::dc=thistree' stands for 'dc=subtree,dc=tree'
    +					 * => 'dc=subtree,dc=tree,dc=container'
    +					 */
    +					if (isset($args[5]) && ($args[5]))
    +						$container = str_replace(':::',',',$args[5]);
    +
    +					/*
    +					 * arg 7 is sort attributes
    +					 * eg: 'sn;givenName'
    +					 */
    +					if (isset($args[7])) {
    +						$sort_attrs = split(';',$args[7]);
    +						$ldap_attrs = array_merge($ldap_attrs,$sort_attrs);
    +					}
    +
    +					$picklistvalues = return_ldap_hash($ldapserver,$container,$args[1],$args[2],$ldap_attrs,
    +						(isset($args[7]) && ($args[7])) ? $sort_attrs : false);
    +
    +					# arg 6 is a set of fixed values to add to search result
    +					if (isset($args[6])) {
    +						$args[6] = str_replace(':::',',',$args[6]);
    +						$fixedvalues = split(';',$args[6]);
    +
    +						foreach ($fixedvalues as $fixedvalue) {
    +							if (empty($fixedvalue))
    +								continue;
    +
    +							$fixedvalue = preg_split('#=\>#',$fixedvalue);
    +							$displayvalue = split('=',$fixedvalue[1]);
    +							$newvalue[trim($fixedvalue[0])] = array($args[2] => trim($fixedvalue[0]),
    +								trim($displayvalue[0]) => trim($displayvalue[1]));
    +							$picklistvalues = array_merge($picklistvalues,$newvalue);
    +						}
    +					}
    +
    +					/*
    +					 * arg 9 is the search filter for already selected values, with criteriai eventually
    +					 * coming from previous pages (eg: %uid%)
    +					 */
    +					if (isset($args[9])) {
    +						$args[9] = str_replace('&','&',$args[9]);
    +
    +						preg_match_all('/%(\w+)(\|.+)?(\/[lUC])?%/U',$args[9],$matchallinlist);
    +
    +						foreach ($matchallinlist[1] as $arg) {
    +							$value=$formvalues[strtolower($arg)];
    +
    +							$args[9] = preg_replace('/%('.$arg.')(\|.+)?(\/[lU])?%/U',$value,$args[9]);
     						}
     
    -						if (! isset($picklist[$display])) {
    -							$detail['value'] .= sprintf('',
    -								(isset($args[4]) ? $args[4] : $args[2]),++$counter,$values[$args[2]],
    -								($default == $display ? 'selected' : ''),
    -								$display);
    -							$picklist[$display] = true;
    +						# arg 11 overrides container dn for selected values
    +						if (!empty($args[11]))
    +							$container = str_replace(':::',',',$args[11]);
    +
    +						$inpicklistvalues = return_ldap_hash($ldapserver,$container,$args[9],$args[2],$ldap_attrs);
    +					}
    +
    +					$detail['value'] = sprintf('';
    @@ -666,11 +953,12 @@ class Templates {
     
     		if ($container && $ldapserver && ! is_array($helper)) {
     			if (preg_match('/^=php./',$helper))
    -				return $this->EvaluateDefault($ldapserver,$helper,$container,$counter);
    +				$html = sprintf('',$id,
    +					$this->EvaluateDefault($ldapserver,$helper,$container,$counter));
     
     			else
     				# @todo: Enable size and width configuration in template
    -				$html = sprintf('',$id);
    +				$html = sprintf('',$id);
     
     		} else {
     			if (is_array($helper)) {
    diff --git a/lib/tree_functions.php b/lib/tree_functions.php
    index 1cfbf6f..67cef1e 100644
    --- a/lib/tree_functions.php
    +++ b/lib/tree_functions.php
    @@ -1,5 +1,5 @@
     ';
     	printf('
    ',_('Server')); printf(''; + echo ''; /* do we have what it takes to authenticate here, or do we need to present the user with a login link (for 'cookie' and 'session' auth_types)? */ @@ -62,7 +62,7 @@ function draw_server_tree() { # Draw the quick-links below the server name: echo ''; + echo ' )'; if ($ldapserver->auth_type != 'config') { $logged_in_dn = $ldapserver->getLoggedInDN(); - echo ''; + echo ''; } if ($ldapserver->isReadOnly()) - printf('',_('read only')); + printf('',_('read only')); $javascript_forms = ''; $javascript_id = 0; @@ -176,7 +176,8 @@ function draw_server_tree() { $child_count = null; } else { - $children = $ldapserver->getContainerContents($base_dn,$size_limit+1,'(objectClass=*)', + $children = $ldapserver->getContainerContents($base_dn,$size_limit+1, + $config->GetValue('appearance','tree_filter'), $config->GetValue('deref','tree')); $child_count = count($children); @@ -206,12 +207,12 @@ function draw_server_tree() { printf('',$expand_href,$expand_img,$expand_alt); printf('',$edit_href,$icon); - printf(''; + echo ''; echo ''; } @@ -235,8 +236,9 @@ function draw_server_tree() { # Is the root of the tree expanded already? if (isset($tree['browser'][$base_dn]['open'] ) && $tree['browser'][$base_dn]['open']) { - if ($ldapserver->isShowCreateEnabled() && count($tree['browser'][$base_dn]['children']) > 10 ) - draw_create_link($ldapserver->server_id,$base_dn,-1,urlencode($base_dn)); + if ($config->GetValue('appearance', 'show_top_create')) + if ($ldapserver->isShowCreateEnabled() && count($tree['browser'][$base_dn]['children']) > 10 ) + draw_create_link($ldapserver->server_id,$base_dn,-1,urlencode($base_dn)); foreach ($tree['browser'][$base_dn]['children'] as $child_dn) draw_tree_html($child_dn,$ldapserver,0); @@ -336,9 +338,9 @@ function draw_tree_html($dn,$ldapserver,$level=0) { $child_count = number_format(count($tree['browser'][$dn]['children'])); if ((! $child_count) && (! $ldapserver->isShowCreateEnabled())) - echo ''; + echo ''; else - printf('',$collapse_href); + printf('',$collapse_href); } else { $size_limit = $config->GetValue('search','size_limit'); @@ -354,28 +356,27 @@ function draw_tree_html($dn,$ldapserver,$level=0) { } if ((! $child_count) && (! $ldapserver->isShowCreateEnabled())) - echo ''; + echo ''; else - printf('',$expand_href); + printf('',$expand_href); } printf('', $edit_href,$ldapserver->server_id,$encoded_dn,$img_src); - printf(''; + echo ''; if (isset($tree['browser'][$dn]['open']) && $tree['browser'][$dn]['open']) { - /* Draw the "create new" link at the top of the tree list if there are more than 10 - entries in the listing for this node. */ - - if ((count($tree['browser'][$dn]['children']) > 10) && ($ldapserver->isShowCreateEnabled())) - draw_create_link($ldapserver->server_id,$rdn,$level,$encoded_dn); + + if ($config->GetValue('appearance', 'show_top_create')) + if ((count($tree['browser'][$dn]['children']) > 10) && ($ldapserver->isShowCreateEnabled())) + draw_create_link($ldapserver->server_id,$rdn,$level,$encoded_dn); foreach ($tree['browser'][$dn]['children'] as $dn) draw_tree_html($dn,$ldapserver,$level+1); diff --git a/locale/ca_ES/LC_MESSAGES/messages.po b/locale/ca_ES/LC_MESSAGES/messages.po index 6c49bc8..27d31dd 100644 --- a/locale/ca_ES/LC_MESSAGES/messages.po +++ b/locale/ca_ES/LC_MESSAGES/messages.po @@ -177,6 +177,10 @@ msgid "Rename" msgstr "Renombrar" +msgid "rename" +msgstr "renombrar" + + msgid "Add" msgstr "Afegir" diff --git a/locale/cs_CZ/LC_MESSAGES/messages.po b/locale/cs_CZ/LC_MESSAGES/messages.po index 18d80cb..75afc77 100644 --- a/locale/cs_CZ/LC_MESSAGES/messages.po +++ b/locale/cs_CZ/LC_MESSAGES/messages.po @@ -205,6 +205,10 @@ msgid "Rename" msgstr "Přejmenovat" +msgid "rename" +msgstr "přejmenovat" + + msgid "Add" msgstr "Přidat" diff --git a/locale/de_DE/LC_MESSAGES/messages.po b/locale/de_DE/LC_MESSAGES/messages.po index 93eae08..faa3407 100644 --- a/locale/de_DE/LC_MESSAGES/messages.po +++ b/locale/de_DE/LC_MESSAGES/messages.po @@ -245,6 +245,10 @@ msgid "Rename" msgstr "Umbenennen" +msgid "rename" +msgstr "umbenennen" + + msgid "Add" msgstr "Hinzufügen" diff --git a/locale/es_ES/LC_MESSAGES/messages.po b/locale/es_ES/LC_MESSAGES/messages.po index 2911e0f..864b57b 100644 --- a/locale/es_ES/LC_MESSAGES/messages.po +++ b/locale/es_ES/LC_MESSAGES/messages.po @@ -261,6 +261,10 @@ msgid "Rename" msgstr "Renombrar" +msgid "rename" +msgstr "renombrar" + + msgid "Add" msgstr "Añadir" @@ -293,7 +297,7 @@ msgid "Show internal attributes" msgstr "Mostrar atributos internos" -msgid "Click to view the schema defintion for attribute type '%s'" +msgid "Click to view the schema definition for attribute type '%s'" msgstr "Haga click para ver el esquema del atributo de tipo '%s'" diff --git a/locale/fi_FI/LC_MESSAGES/messages.po b/locale/fi_FI/LC_MESSAGES/messages.po new file mode 100755 index 0000000..a430437 --- /dev/null +++ b/locale/fi_FI/LC_MESSAGES/messages.po @@ -0,0 +1,2270 @@ +# translation of messages_fi.po to +# translation of messages.po to +# phpLDAPadmim +# +# Samuli Seppänen , 2006. +msgid "" +msgstr "" +"Project-Id-Version: messages_fi\n" +"Report-Msgid-Bugs-To: phpldapadmin-devel@lists.sf.net\n" +"POT-Creation-Date: 2004-01-14 17:45+0200\n" +"PO-Revision-Date: 2006-10-13 10:46+0300\n" +"Last-Translator: Samuli Seppänen \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.2\n" + +#: ../../htdocs/mass_delete.php:92 +#, php-format +msgid "%s of %s entries failed to be deleted." +msgstr "%s / %s kohdan poisto epäonnistui." + +#: ../../htdocs/template_engine.php:551 +msgid "(Auto evaluated on submission.)" +msgstr "(Tarkistetaan automaattisesti lähetettäessä.)" + +#: ../../lib/tree_functions.php:287 +msgid "(Session timed out. Automatically logged out.)" +msgstr "(Istunto aikakatkaistiin)" + +#: ../../templates/creation/custom.php:26 +msgid "(example: cn=MyNewPerson)" +msgstr "(esimerkki: cn=MattiMalli)" + +#: ../../lib/functions.php:1124 +#, php-format +msgid "" +"
    ',$table_html_attrs); - $jpeg_data = array_pop($ldapserver->search(null,$dn,'objectClass=*',array($attr_name),'base')); + $jpeg_data = $ldapserver->search(null,$dn,'objectClass=*',array($attr_name),'base'); + $jpeg_data = array_pop($jpeg_data); if (! $jpeg_data) { printf(_('Could not fetch jpeg data from LDAP server for attribute %s.'),htmlspecialchars($attr_name)); return; @@ -1311,7 +1404,13 @@ function password_hash( $password_clear, $enc_type ) { switch( $enc_type ) { case 'crypt': - $new_value = '{CRYPT}' . crypt( $password_clear, random_salt(2) ); + global $config; + + if ($config->GetValue('password','no_random_crypt_salt') == true) + $new_value = '{CRYPT}' . crypt($password_clear,substr($password_clear,0,2)); + else + $new_value = '{CRYPT}' . crypt($password_clear,random_salt(2)); + break; case 'ext_des': @@ -1719,7 +1818,7 @@ function dn_unescape($dn) { */ function get_href($type,$extra_info='') { $sf = 'https://sourceforge.net'; - $pla = 'http://wiki.pldapadmin.com'; + $pla = 'http://wiki.phpldapadmin.info'; $group_id = '61828'; $bug_atid = '498546'; $rfe_atid = '498549'; @@ -2575,12 +2674,15 @@ function masort(&$data,$sortby,$rev=0) { * @param array $attrs LDAP attributes to use as values. * @return array $results Array of values keyed by $key. */ -function return_ldap_hash($ldapserver,$base_dn,$filter,$key,$attrs) { +function return_ldap_hash($ldapserver,$base_dn,$filter,$key,$attrs,$sort=null) { if (DEBUG_ENABLED) debug_log('return_ldap_hash(): Entered with (%s,%s,%s,%s,%s)',0, $ldapserver->server_id,$base_dn,$filter,$key,count($attrs)); - $ldapquery = $ldapserver->search(null,$base_dn,$filter,$attrs); + if (is_array($sort)) + $ldapquery = $ldapserver->search(null,$base_dn,$filter,$attrs,'sub',false,LDAP_DEREF_NEVER,0,$sort); + else + $ldapquery = $ldapserver->search(null,$base_dn,$filter,$attrs); $results = array(); @@ -2666,7 +2768,7 @@ function password_generate() { $leftover = array_merge($leftover,$llower,$lupper,$numbers,$punc); shuffle($leftover); - $outarray = array_merge($outarray, a_array_rand($leftover, $criteria['num'] - $num_spec)); + $outarray = array_merge($outarray, a_array_rand($leftover,$length-$num_spec)); } shuffle($outarray); @@ -2800,4 +2902,14 @@ function no_expire_header() { header('Cache-Control: post-check=0, pre-check=0', false); header('Pragma: no-cache'); } + +/** + * This is for Opera. By putting "random junk" in the query string, it thinks + * that it does not have a cached version of the page, and will thus + * fetch the page rather than display the cached version + */ +function random_junk() { + $time = gettimeofday(); + return md5(strtotime('now').$time['usec']); +} ?> diff --git a/lib/hooks.php b/lib/hooks.php index fad084a..17790ad 100644 --- a/lib/hooks.php +++ b/lib/hooks.php @@ -1,5 +1,5 @@ read() ) ) { - if ( is_file ("hooks/$entry") and eregi ('php[0-9]?$', $entry) ) { - require_once "hooks/$entry"; - } + while (false !== ($entry = $dir->read())) { + $filename = sprintf('%s/%s',HOOKSDIR,$entry); + if (is_file($filename) and eregi('php[0-9]?$',$entry)) + require_once "hooks/$entry"; } $dir -> close(); diff --git a/lib/search_form_advanced.php b/lib/search_form_advanced.php index 1072cea..5bffae9 100644 --- a/lib/search_form_advanced.php +++ b/lib/search_form_advanced.php @@ -1,5 +1,5 @@ GetValue('search','result_attributes')); ?>" />
    +

    %s',$ldapserver->server_id); - printf('%s ',htmlspecialchars($ldapserver->name)); + printf('%s ',htmlspecialchars($ldapserver->name)); if ($ldapserver->haveAuthInfo() && $ldapserver->auth_type != 'config') printf('timeout', sprintf(_('Inactivity will log you off at %s'),strftime('%H:%M',time()+($ldapserver->session_timeout*60)))); - echo '
    %simg%s',$edit_href,pretty_print_dn($base_dn)); + printf('%s',$edit_href,pretty_print_dn($base_dn)); if ($child_count) printf(' (%s)',$child_count); - echo '
    ------++img',97-$level); + printf('',97-$level); printf('%s',$edit_href,draw_formatted_dn($ldapserver,$dn)); if ($child_count) printf(' (%s)',$child_count); - echo '
    \n" +" \n" +"\t\n" +"\t\n" +"\t
    \"Warning\"\n" +" You found a non-fatal phpLDAPadmin bug!
    Error:%s (%s)
    File:%s line %s, caller %s
    Versions:PLA: %s, PHP: %s, SAPI: %s\n" +"
    Web server:%s
    Please check and see " +"if this bug has been reported here.
    If it hasnt been " +"reported, you may report this bug by clicking here.

    " +msgstr "" +"
    \n" +" \n" +"\t\n" +"\t\n" +"\t
    \"Warning\"\n" +" Löysit bugin phpLDAPadminista!
    Virhe:%s (%s)
    Tiedosto:%s rivi %s, kutsuja %s
    Versiot:PLA: %s, PHP: %s, SAPI: %s\n" +"
    Www-palvelin:%s
    Tarkistathan ensin tästä napsauttamalla, ettei bugia ole jo raportoitu.
    Napsauta tästä Jos bugia ei ole vielä raportoitu. Bugiraportit pitää tehdä englanniksi.

    " + +#: ../../lib/search_form_advanced.php:81 +msgid "A list of attributes to display in the results (comma-separated)" +msgstr "Pilkuin eroteltu luettelo attribuuteista, jotka näytetään tuloksissa" + +#: ../../lib/template_functions.php:614 +msgid "A random password was generated for you" +msgstr "Sinulle luotiin satunnainen salasana" + +#: ../../lib/ldif_functions.php:532 +msgid "A valid deleteoldrdn attribute should be specified" +msgstr "attribuutille deleteoldrdn on annettava validi arvo" + +#: ../../lib/ldif_functions.php:243 +msgid "A valid dn line is required." +msgstr "Riville dn on annettava validi arvo." + +#: ../../lib/ldif_functions.php:538 +msgid "A valid newrdn attribute should be specified" +msgstr "attribuutille newrdn on annettava validi arvo" + +#: ../../htdocs/add_attr_form.php:107 ../../htdocs/add_attr_form.php:155 +msgid "Add" +msgstr "Lisää" + +#: ../../htdocs/add_value_form.php:183 +msgid "Add New Value" +msgstr "Lisää uusi arvo" + +#: ../../htdocs/add_oclass_form.php:120 ../../htdocs/compare.php:533 +msgid "Add ObjectClass and Attributes" +msgstr "Lisää objektiluokka ja sen attribuutit" + +#: ../../htdocs/compare.php:544 ../../htdocs/template_engine.php:930 +#: ../../htdocs/template_engine.php:1106 +#, php-format +msgid "Add an additional value to attribute '%s'" +msgstr "Lisää attribuutille %s toinen arvo" + +#: ../../htdocs/add_value_form.php:59 +msgid "Add new" +msgstr "Lisää uusi" + +#: ../../htdocs/add_value_form.php:149 ../../htdocs/compare.php:535 +msgid "Add new ObjectClass" +msgstr "Luo objektiluokka" + +#: ../../htdocs/add_attr_form.php:34 ../../htdocs/add_attr_form.php:73 +#: ../../templates/template_header.php:72 +#, php-format +msgid "Add new attribute" +msgstr "Uusi attribuutti" + +#: ../../htdocs/add_attr_form.php:120 +msgid "Add new binary attribute" +msgstr "Uusi binäärinen attribuutti" + +#: ../../htdocs/ldif_import.php:55 +msgid "Adding..." +msgstr "Lisätään..." + +#: ../../lib/search_form_advanced.php:29 +#: ../../lib/search_form_predefined.php:23 ../../lib/search_form_simple.php:25 +msgid "Advanced Search Form" +msgstr "Tarkka haku" + +#: ../../htdocs/schema.php:254 +msgid "Aliases" +msgstr "Aliakset" + +#: ../../htdocs/mass_delete.php:94 +msgid "All entries deleted successfully." +msgstr "Merkinnän poistaminen onnistui." + +#: ../../templates/template_header.php:107 +#, php-format +msgid "An attribute (%s) was modified and is highlighted below." +msgstr "Muutettu attribuutti %s näkyy alla korostettuna." + +#: ../../htdocs/login.php:162 ../../htdocs/login_form.php:74 +msgid "Anonymous Bind" +msgstr "Yhdistä anonyymisti" + +#: ../../htdocs/delete_form.php:109 +msgid "Are you sure you want to permanently delete this object?" +msgstr "Haluatko varmasti poistaa tämän objektin?" + +#: ../../htdocs/compare.php:59 ../../htdocs/update_confirm.php:131 +msgid "Attribute" +msgstr "Attribuutti" + +#: ../../htdocs/schema.php:55 ../../htdocs/schema.php:57 +msgid "Attribute Types" +msgstr "Attribuuttityypit" + +#: ../../htdocs/template_engine.php:306 +#, php-format +msgid "" +"Attribute [%s] is a HIDDEN attribute, however, it is missing a VALUE in your " +"template." +msgstr "Attribuutti %s on merkitty piilotetuksi (HIDDEN), mutta mallissa siltä puuttuu arvo (VALUE)." + +#: ../../htdocs/template_engine.php:259 +#, php-format +msgid "Attribute [%s] is a MUST attribute, so it cannot be disabled." +msgstr "Attribuutti %s on merkitty pakolliseksi (MUST), joten sitä ei voi poistaa käytöstä." + +#: ../../lib/ldif_functions.php:455 +msgid "Attribute is not valid" +msgstr "Attribuutti ei ole validi" + +#: ../../lib/ldif_functions.php:375 +msgid "Attribute not well formed" +msgstr "Attribuutin muoto on virheellinen" + +#: ../../htdocs/login_form.php:97 +msgid "Authenticate" +msgstr "Tunnistaudu" + +#: ../../htdocs/login_form.php:46 +#, php-format +msgid "Authenticate to server %s" +msgstr "Tunnistaudu palvelimelle %s" + +#: ../../htdocs/entry_chooser.php:65 +msgid "Back Up..." +msgstr "Takaisin..." + +#: ../../htdocs/login.php:97 ../../htdocs/login.php:133 +#: ../../lib/server_functions.php:347 +msgid "Bad username or password. Please try again." +msgstr "Virheellinen käyttäjänimi tai salasana. Yritä uudelleen." + +#: ../../htdocs/export_form.php:30 ../../lib/search_form_advanced.php:66 +msgid "Base (base dn only)" +msgstr "Base (vain base dn)" + +#: ../../htdocs/export_form.php:54 ../../lib/search_form_advanced.php:41 +msgid "Base DN" +msgstr "Base DN" + +#: ../../htdocs/search.php:260 +msgid "Base DN: " +msgstr "Base DN:" + +#: ../../htdocs/compare.php:280 ../../htdocs/template_engine.php:794 +#: ../../templates/template_header.php:141 +msgid "Binary value" +msgstr "Binääriarvo" + +#: ../../htdocs/template_engine.php:537 +msgid "Binary value not displayed" +msgstr "Binääriarvoa ei näytetä" + +#: ../../htdocs/copy.php:61 +msgid "Building snapshot of tree to copy... " +msgstr "Tehdään vedosta LDAP-puusta kopiointia varten... " + +#: ../../lib/export_functions.php:38 +msgid "CSV (Spreadsheet)" +msgstr "CVS (laskentataulukko)" + +#: ../../htdocs/delete_form.php:77 ../../htdocs/delete_form.php:134 +#: ../../htdocs/update_confirm.php:232 +msgid "Cancel" +msgstr "Peruuta" + +#: ../../htdocs/compare.php:387 +msgid "Check password" +msgstr "Tarkista salasana" + +#: ../../htdocs/template_engine.php:877 ../../htdocs/template_engine.php:918 +msgid "Check password..." +msgstr "Tarkista salasana..." + +#: ../../htdocs/create_form.php:33 +msgid "Choose a template" +msgstr "Valitse malli" + +#: ../../htdocs/search.php:109 +msgid "Click here to go to the login form" +msgstr "Napsauta tästä päästäksesi kirjautumisikkunaan" + +#: ../../lib/functions.php:2792 +msgid "Click to popup a dialog to select a date graphically" +msgstr "Napsauta tästä valitaksesi päivämäärän valikosta" + +#: ../../lib/functions.php:1641 +msgid "Click to popup a dialog to select an entry (DN) graphically" +msgstr "Napsauta tästä valitaksesi merkinnän (DN) valikosta" + +#: ../../htdocs/compare.php:166 ../../htdocs/server_info.php:86 +#: ../../htdocs/template_engine.php:745 +#: ../../templates/template_header.php:133 +#, php-format +msgid "Click to view the schema defintion for attribute type '%s'" +msgstr "Napsauta tästä näyttääksesi skeeman määritelmän attribuuttityypille %s" + +#: ../../htdocs/schema.php:225 +msgid "Collective" +msgstr "Jaettu" + +#: ../../htdocs/update_confirm.php:229 +msgid "Commit" +msgstr "Hyväksy" + +#: ../../htdocs/compare_form.php:36 ../../htdocs/compare_form.php:70 +#: ../../htdocs/password_checker.php:32 +msgid "Compare" +msgstr "Vertaa" + +#: ../../htdocs/compare_form.php:28 +msgid "Compare another DN with" +msgstr "Vertaa DN:ä kohteeseen" + +#: ../../htdocs/compare_form.php:47 ../../htdocs/compare_form.php:59 +msgid "Compare this DN with another" +msgstr "Vertaa DN:ä toiseen" + +#: ../../templates/template_header.php:67 +msgid "Compare with another entry" +msgstr "Vertaa toiseen merkintään" + +#: ../../htdocs/compare.php:54 +msgid "Comparing the following DNs" +msgstr "Verrataan seuraavia DN:ä" + +#: ../../htdocs/export_form.php:86 +msgid "Compress" +msgstr "Tiivistä" + +#: ../../htdocs/mass_delete.php:100 +#, php-format +msgid "Confirm mass delete of %s entries on server %s" +msgstr "Haluatko varmasti poistaa %s merkinnän palvelimelta %s" + +#: ../../lib/functions.php:1138 +#, php-format +msgid "" +"Congratulations! You found a bug in phpLDAPadmin.

    \n" +"\t \n" +"\t \n" +"\t \n" +"\t \n" +"\t \n" +"\t\t \n" +"\t \n" +"\t \n" +"\t \n" +"\t \n" +"\t
    Error:%s
    Level:%s
    File:%s
    Line:%s
    Caller:%s
    PLA Version:%s
    PHP Version:%s
    PHP SAPI:%s
    Web server:%s
    \n" +"\t
    \n" +"\t Please report this bug by clicking below!" +msgstr "" +"Onnittelut! Olet löytänyt bugin PHPLDAPadminista.

    \n" +"\t \n" +"\t \n" +"\t \n" +"\t \n" +"\t \n" +"\t\t \n" +"\t \n" +"\t \n" +"\t \n" +"\t \n" +"\t
    Virhe:%s
    Taso:%s
    Tiedosto:%s
    Rivi:%s
    Kutsuja:%s
    PLA:n versio:%s
    PHP:n versio:%s
    PHP SAPI:%s
    Www-palvelin:%s
    \n" +"\t
    \n" +"\t Raportoi bugi (englanniksi) napsauttamalla alta!" + +#: ../../templates/creation/custom.php:29 +msgid "Container" +msgstr "Säilö" + +#: ../../lib/ldif_functions.php:525 +msgid "Container is null" +msgstr "Säilö on tyhjä" + +#: ../../htdocs/copy_form.php:56 ../../htdocs/copy_form.php:62 +msgid "Copy" +msgstr "Kopioi" + +#: ../../htdocs/copy_form.php:106 +msgid "Copy " +msgstr "Kopioi" + +#: ../../templates/template_header.php:44 +msgid "Copy or move this entry" +msgstr "Kopioi tai siirrä merkintä" + +#: ../../htdocs/copy.php:84 +msgid "Copy successful! Would you like to " +msgstr "Kopiointi onnistui! Haluatko " + +#: ../../templates/template_header.php:44 +msgid "Copy this object to another location, a new DN, or another server" +msgstr "Kopioi objekti toiseen paikkaan, toiselle DN:lle tai toiselle palvelimelle" + +#: ../../htdocs/copy.php:57 ../../htdocs/copy.php:102 +msgid "Copying " +msgstr "Kopioidaan" + +#: ../../htdocs/ldif_import.php:63 +msgid "Could not add object:" +msgstr "Objektin lisääminen epäonnistui:" + +#: ../../htdocs/create.php:158 +msgid "Could not add the object to the LDAP server." +msgstr "Objektin lisääminen LDAP-palvelimelle epäonnistui." + +#: ../../htdocs/login.php:131 +msgid "Could not bind anonymously to server." +msgstr "Palvelimeen yhdistäminen anonyymisti ei onnistunut." + +#: ../../lib/server_functions.php:356 +msgid "Could not bind to the LDAP server." +msgstr "Yhdistäminen LDAP-palvelimeen epäonnistui." + +#: ../../lib/server_functions.php:353 +#, php-format +msgid "Could not connect to \"%s\" on port \"%s\"" +msgstr "Yhdistäminen palvelimen \"%s\" porttiin \"%s\" epäonnistui" + +#: ../../htdocs/login.php:174 ../../lib/tree_functions.php:265 +msgid "Could not connect to LDAP server." +msgstr "Yhdistäminen LDAP-palvelimeen epäonnistui." + +#: ../../htdocs/ldif_import.php:64 +msgid "Could not delete object:" +msgstr "Objektin poistaminen epäonnistui:" + +#: ../../htdocs/delete.php:36 ../../htdocs/delete.php:51 +#: ../../htdocs/rdelete.php:52 +#, php-format +msgid "Could not delete the entry: %s" +msgstr "Merkinnän %s poistaminen epäonnistui" + +#: ../../htdocs/entry_chooser.php:98 +msgid "Could not determine base DN" +msgstr "Base DN:ä ei löytynyt" + +#: ../../lib/tree_functions.php:222 +msgid "Could not determine the root of your LDAP tree." +msgstr "LDAP-puun juurta ei löytynyt." + +#: ../../lib/functions.php:1221 +#, php-format +msgid "Could not fetch jpeg data from LDAP server for attribute %s." +msgstr "Attribuutin %s jpeg-datan noutaminen LDAP-palvelimelta epäonnistui." + +#: ../../htdocs/logout.php:23 ../../lib/timeout_functions.php:74 +msgid "Could not logout." +msgstr "Uloskirjautuminen epäonnistui." + +#: ../../htdocs/ldif_import.php:67 +msgid "Could not modify object:" +msgstr "Objektin muuttaminen epäonnistui:" + +#: ../../htdocs/add_oclass.php:60 ../../htdocs/add_value.php:68 +msgid "Could not perform ldap_mod_add operation." +msgstr "Toiminto ldap_mod_add epäonnistui." + +#: ../../htdocs/delete_attr.php:52 ../../htdocs/update.php:155 +msgid "Could not perform ldap_modify operation." +msgstr "Toiminto ldap_modify epäonnistui." + +#: ../../htdocs/ldif_import.php:65 ../../htdocs/ldif_import.php:66 +msgid "Could not rename object:" +msgstr "Objektin nimeäminen epäonnistui:" + +#: ../../htdocs/rename.php:59 ../../lib/server_functions.php:1545 +msgid "Could not rename the entry" +msgstr "Merkinnän uudelleenimeäminen epäonnistui" + +#: ../../htdocs/schema.php:35 +msgid "Could not retrieve schema from" +msgstr "Ei voitu noutaa skeema kohteesta" + +#: ../../htdocs/login.php:139 +msgid "Could not set cookie." +msgstr "Evästeen tallentaminen epäonnistui." + +#: ../../lib/server_functions.php:271 +msgid "Could not start TLS. Please check your LDAP server configuration." +msgstr "TLS:n käyttöönotto ei onnistunut. Tarkista LDAP-palvelimesi asetukset." + +#: ../../lib/functions.php:1236 +#, php-format +msgid "" +"Could not write to the $jpeg_temp_dir directory %s. Please verify that your " +"web server can write files there." +msgstr "Ei voitu kirjoittaa $jpeg_temp_dir hakemistoon %s. Tarkista, että www-palvelimellasi on oikeus kirjoittaa kyseiseen hakemistoon." + +#: ../../htdocs/create_form.php:32 ../../htdocs/template_engine.php:493 +#: ../../htdocs/template_engine.php:557 +#: ../../templates/creation/custom.php:191 +#: ../../templates/template_header.php:171 +msgid "Create Object" +msgstr "Luo objekti" + +#: ../../templates/template_header.php:71 +msgid "Create a child entry" +msgstr "Uusi alamerkintä" + +#: ../../lib/tree_functions.php:477 +msgid "Create a new entry in" +msgstr "Uusi merkintä kohteeseen" + +#: ../../lib/tree_functions.php:163 +msgid "Create it?" +msgstr "Luo pohjamerkintä nyt." + +#: ../../lib/tree_functions.php:477 +msgid "Create new entry here" +msgstr "Uusi merkintä" + +#: ../../htdocs/welcome.php:31 +msgid "Credits" +msgstr "Credits" + +#: ../../htdocs/add_value_form.php:64 +msgid "Current list of" +msgstr "Tällä hetkellä" + +#: ../../htdocs/delete_form.php:112 +msgid "DN" +msgstr "DN" + +#: ../../lib/functions.php:89 +#, php-format +msgid "DN \"%s\" is not an LDAP distinguished name." +msgstr "LDAP ei tunnista DN:ä \"%s\"." + +#: ../../htdocs/template_engine.php:1028 +#, php-format +msgid "DN not available %s" +msgstr "DN puuttuu %s" + +#: ../../lib/export_functions.php:418 +#, php-format +msgid "DSLM Export for: %s" +msgstr "Vie kohde %s DSLM:nä" + +#: ../../htdocs/delete_form.php:125 +msgid "Delete" +msgstr "Poista" + +#: ../../htdocs/delete_form.php:32 +#, php-format +msgid "Delete %s" +msgstr "Poista %s" + +#: ../../lib/tree_functions.php:291 +msgid "Delete Checked Entries" +msgstr "Poista valitut merkinnät" + +#: ../../lib/functions.php:1244 +msgid "Delete Photo" +msgstr "Poista valokuva" + +#: ../../htdocs/copy_form.php:96 ../../htdocs/copy_form.php:102 +msgid "Delete after copy (move):" +msgstr "Poista kopioinnin jälkeen (siirto):" + +#: ../../htdocs/delete_form.php:69 +#, php-format +msgid "Delete all %s objects" +msgstr "Poista kaikki %s objektia" + +#: ../../lib/functions.php:1279 +msgid "Delete photo" +msgstr "Poista valokuva" + +#: ../../templates/template_header.php:56 +msgid "Delete this entry" +msgstr "Poista merkintä" + +#: ../../htdocs/mass_delete.php:64 ../../htdocs/rdelete.php:34 +#: ../../htdocs/rdelete.php:60 ../../htdocs/rdelete.php:77 +#, php-format +msgid "Deleting %s" +msgstr "Poistetaan %s" + +#: ../../htdocs/ldif_import.php:56 +msgid "Deleting..." +msgstr "Poistetaan..." + +#: ../../htdocs/mass_delete.php:46 +#, php-format +msgid "Deletion progress on server \"%s\"" +msgstr "Poisto käynnissä palvelimella \"%s\"" + +#: ../../htdocs/add_value_form.php:187 ../../htdocs/ldif_import.php:103 +#: ../../htdocs/ldif_import.php:113 ../../htdocs/ldif_import.php:189 +#: ../../htdocs/schema.php:79 ../../htdocs/schema.php:150 +#: ../../htdocs/schema.php:409 +msgid "Description" +msgstr "Kuvaus" + +#: ../../lib/functions.php:1040 +#, php-format +msgid "Description: %s

    " +msgstr "Kuvaus: %s

    " + +#: ../../lib/functions.php:1044 +msgid "Description: (no description available)
    " +msgstr "Kuvaus: (ei kuvausta saatavilla)
    " + +#: ../../htdocs/compare_form.php:59 ../../htdocs/copy_form.php:74 +msgid "Destination DN" +msgstr "Kohde DN" + +#: ../../htdocs/compare_form.php:67 ../../htdocs/copy_form.php:80 +msgid "Destination Server" +msgstr "Kohdepalvelin" + +#: ../../htdocs/copy.php:26 +msgid "Destination server is currently READ-ONLY." +msgstr "Kohdepalvelin on VAIN LUKU tilassa." + +#: ../../htdocs/add_attr_form.php:35 ../../htdocs/add_value_form.php:61 +#: ../../htdocs/compare.php:62 ../../htdocs/compare.php:65 +#: ../../htdocs/compare_form.php:31 ../../htdocs/copy_form.php:58 +#: ../../htdocs/delete_form.php:34 ../../htdocs/delete_form.php:112 +#: ../../htdocs/rename_form.php:32 ../../htdocs/update_confirm.php:31 +#: ../../templates/template_header.php:35 +msgid "Distinguished Name" +msgstr "Distinguished Name" + +#: ../../htdocs/mass_delete.php:103 +#, php-format +msgid "Do you really want to delete %s %s %s" +msgstr "Haluatko varmasti poistaa %s %s %s" + +#: ../../htdocs/update_confirm.php:120 +msgid "Do you want to make these changes?" +msgstr "Haluatko tehdä seuraavat muutokset?" + +#: ../../htdocs/welcome.php:32 +msgid "Documentation" +msgstr "Ohjeet" + +#: ../../htdocs/ldif_import_form.php:40 ../../htdocs/ldif_import_form.php:50 +msgid "Don't stop on errors" +msgstr "Älä keskeytä kun kohdataan virhe" + +#: ../../htdocs/tree.php:92 ../../htdocs/tree.php:93 +#: ../../htdocs/welcome.php:33 +msgid "Donate" +msgstr "Tee lahjoitus" + +#: ../../htdocs/search.php:213 ../../lib/export_functions.php:256 +msgid "Encountered an error while performing search." +msgstr "Haku törmäsi virheeseen." + +#: ../../htdocs/add_value_form.php:130 +msgid "Enter the value you would like to add:" +msgstr "Lisättävä arvo:" + +#: ../../htdocs/search.php:228 +msgid "Entries found: " +msgstr "Löytyneet merkinnät: " + +#: ../../lib/export_functions.php:323 +msgid "Entry" +msgstr "Merkintä" + +#: ../../htdocs/rdelete.php:49 +#, php-format +msgid "Entry %s and sub-tree deleted successfully." +msgstr "Merkintä %s ja sen alamerkinnät poistettiin." + +#: ../../htdocs/delete.php:47 +#, php-format +msgid "Entry %s deleted successfully." +msgstr "Merkintä %s poistettiin." + +#: ../../htdocs/entry_chooser.php:20 +msgid "Entry Chooser" +msgstr "Valitse merkintä" + +#: ../../htdocs/schema.php:183 +msgid "Equality" +msgstr "Vastaavuudet" + +#: ../../lib/functions.php:1019 +msgid "Error" +msgstr "Virhe" + +#: ../../htdocs/mass_delete.php:30 +msgid "Error calling mass_delete.php. Missing mass_delete in POST vars." +msgstr "Virhe tiedostossa mass_delete.php. Muuttuja mass_delete puuttuu POST-muuttujista." + +#: ../../htdocs/ldif_import.php:111 +msgid "Error code" +msgstr "Virheen koodi" + +#: ../../lib/functions.php:1038 +#, php-format +msgid "Error number: %s (%s)" +msgstr "Virheen numero: %s (%s)" + +#: ../../lib/functions.php:1042 ../../lib/functions.php:1048 +#, php-format +msgid "Error number: %s

    " +msgstr "Virheen numero: %s

    " + +#: ../../htdocs/login_form.php:20 +#, php-format +msgid "" +"Error: You have an error in your config file. The only three allowed values\n" +" for auth_type in the $servers section " +"are 'session', 'cookie', and 'config'. You entered '%s',\n" +" which is not allowed. " +msgstr "" +"Virhe: asetustiedoston osassa $servers kentän auth_type arvoksi on\n" +" annettu'%s'. Ainoastaan arvot 'session', 'cookie' ja config'\n" +" ovat sallittuja." + +#: ../../lib/server_functions.php:121 +#, php-format +msgid "" +"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." +msgstr "Virhe: Asetustiedostossa on virhe. Osiossa $servers sijaitseva muuttuja auth_type voi saada arvokseen joko 'session', 'cookie' ja 'config'. Tämänhetkinen arvo, (%s), ei kelpaa." + +#: ../../htdocs/export_form.php:39 ../../htdocs/export_form.php:48 +#: ../../templates/template_header.php:41 +msgid "Export" +msgstr "Vie" + +#: ../../htdocs/export_form.php:99 +msgid "Export format" +msgstr "Viennin tiedostomuoto" + +#: ../../templates/template_header.php:88 +msgid "Export subtree" +msgstr "Vie LDAP-haara" + +#: ../../htdocs/ldif_import.php:96 ../../htdocs/ldif_import.php:109 +#: ../../htdocs/ldif_import.php:138 ../../htdocs/ldif_import.php:152 +#: ../../htdocs/mass_delete.php:77 +msgid "Failed" +msgstr "Epäonnistui" + +#: ../../htdocs/add_attr.php:127 +msgid "Failed to add the attribute." +msgstr "Attribuutin lisääminen epäonnistui." + +#: ../../htdocs/copy.php:154 +msgid "Failed to copy DN: " +msgstr "DN:n kopiointi epäonnistui" + +#: ../../htdocs/rdelete.php:70 ../../htdocs/rdelete.php:87 +#, php-format +msgid "Failed to delete entry %s" +msgstr "Merkinnän %s poistaminen epäonnistui" + +#: ../../htdocs/ldif_import.php:47 +msgid "File" +msgstr "Tiedosto" + +#: ../../htdocs/copy_form.php:91 +msgid "Filter" +msgstr "Suodin" + +#: ../../htdocs/search.php:262 +msgid "Filter performed: " +msgstr "Käytetty suodin: " + +#: ../../htdocs/search.php:240 +msgid "Format" +msgstr "Muoto" + +#: ../../lib/export_functions.php:197 +#, php-format +msgid "Generated by phpLDAPadmin ( http://phpldapadmin.sourceforge.net/ ) on %s" +msgstr "Luotu phpLDAPadminilla ( http://phpldapadmin.sourceforge.net/ ) %s" + +#: ../../htdocs/schema.php:125 ../../htdocs/schema.php:316 +#: ../../htdocs/schema.php:361 ../../htdocs/schema.php:393 +msgid "Go" +msgstr "Siirry" + +#: ../../htdocs/update_confirm.php:243 +msgid "Go back" +msgstr "Takaisin" + +#: ../../htdocs/compare.php:455 ../../htdocs/template_engine.php:1025 +#, php-format +msgid "Go to %s" +msgstr "Siirry kohteeseen %s" + +#: ../../htdocs/tree.php:96 ../../htdocs/tree.php:97 +msgid "Help" +msgstr "Ohje" + +#: ../../templates/template_header.php:47 +msgid "Hide internal attributes" +msgstr "Piilota sisäiset attribuutit" + +#: ../../htdocs/copy_form.php:119 +msgid "" +"Hint: Copying between different servers only works if there are no schema " +"violations" +msgstr "Vihje: Tietojen kopiointi palvelimien välillä onnistuu vain, jos skeemat vastaavat toisiaan" + +#: ../../templates/template_header.php:62 +msgid "Hint: To delete an attribute, empty the text field and click save." +msgstr "Vihje: Poistaaksesi attribuutin tyhjennä tekstikenttä ja napsauta \"Tallenna muutokset\"." + +#: ../../templates/template_header.php:94 +msgid "Hint: To view the schema for an attribute, click the attribute name." +msgstr "Vihje: Näyttääksesi attribuutin käyttämän skeeman, napsauta sen nimeä." + +#: ../../templates/creation/custom.php:53 +msgid "" +"Hint: You must choose exactly one structural objectClass (shown in bold " +"above)" +msgstr "Vihje: Rakenteellisista objektiluokista (yllä lihavoituna) on valittava tasan yksi" + +#: ../../htdocs/tree.php:79 ../../htdocs/tree.php:80 +msgid "Home" +msgstr "Pääsivu" + +#: ../../htdocs/ldif_import.php:194 +#, php-format +msgid "If so, please report it." +msgstr "Jos näin on, raportoi asiasta." + +#: ../../htdocs/search.php:176 +msgid "" +"If you want to add your own criteria to the list. Be sure to edit search.php " +"to handle them. Quitting." +msgstr "Jos lisäät luotteloon omia hakuehtojasi, merkitse ne tiedostoon search.php. Poistutaan." + +#: ../../htdocs/ldif_import.php:44 ../../htdocs/ldif_import_form.php:30 +msgid "Import LDIF File" +msgstr "Tuo LDIF-tiedosto" + +#: ../../lib/tree_functions.php:71 +msgid "Import entries from an LDIF file" +msgstr "Tuo merkintöjä LDIF-tiedostosta" + +#: ../../lib/tree_functions.php:46 +#, php-format +msgid "Inactivity will log you off at %s" +msgstr "Toimeton istunto katkaistaan %s" + +#: ../../htdocs/export_form.php:80 +msgid "Include system attributes" +msgstr "Ota mukaan järjestelmän attribuutit" + +#: ../../htdocs/schema.php:470 ../../htdocs/schema.php:496 +msgid "Inherited from" +msgstr "Periytyy kohteesta" + +#: ../../htdocs/schema.php:168 ../../htdocs/schema.php:416 +msgid "Inherits from" +msgstr "Periytyy kohteesta" + +#: ../../htdocs/add_oclass_form.php:94 +msgid "" +"Instructions: In order to add these objectClass(es) to this entry, you must " +"specify" +msgstr "Ohje: Lisätäksesi nämä objektiluokat tähän merkintään sinun on määritettävä" + +#: ../../lib/server_functions.php:350 +msgid "Insufficient access rights." +msgstr "Puutteelliset käyttöoikeudet." + +#: ../../htdocs/rename.php:45 +msgid "Invalid RDN value" +msgstr "Virheellinen RDN-arvo" + +#: ../../htdocs/export.php:42 +msgid "Invalid export format" +msgstr "Virheellinen viennin tiedostomuoto" + +#: ../../htdocs/ldif_import.php:194 +msgid "Is this a phpLDAPadmin bug?" +msgstr "Onkohan tämä phpLDAPadminin bugi?" + +#: ../../lib/functions.php:1056 +#, php-format +msgid "Is this a phpLDAPadmin bug? If so, please report it." +msgstr "Onkohan tämä phpLDAPadminin bugi? Jos on, tee bugiraportti." + +#: ../../lib/tree_functions.php:222 +msgid "It appears that the LDAP server has been configured to not reveal its root." +msgstr "Vaikuttaa siltä, että LDAP-palvelin on asetettu piilottamaan juurihakemistonsa." + +#: ../../lib/server_functions.php:318 +#, php-format +msgid "" +"It seems that sasl_authz_id_regex \"%s\".\" contains invalid PCRE regular " +"expression." +msgstr "Vaikuttaa siltä, että sasl_authz_id_regex \"%s\".\" sisältää virheellisen Perl-tyyppisen säännöllisen lausekkeen." + +#: ../../htdocs/schema.php:299 +msgid "Jump to a matching rule" +msgstr "Siirry täsmäyssääntöön" + +#: ../../htdocs/schema.php:111 +msgid "Jump to an attribute type" +msgstr "Siirry attribuuttityyppiin" + +#: ../../htdocs/schema.php:378 +msgid "Jump to an objectClass" +msgstr "Siirry objektiluokkaan" + +#: ../../htdocs/schema.php:423 ../../htdocs/schema.php:442 +msgid "Jump to this objectClass definition" +msgstr "Siirry tämän objektiluokan määritykseen" + +#: ../../lib/functions.php:1029 +#, php-format +msgid "LDAP said: %s" +msgstr "LDAP:n tuloste: %s" + +#: ../../lib/export_functions.php:313 +#, php-format +msgid "LDIF Export for: %s" +msgstr "LDIF-vienti merkinnälle: %s" + +#: ../../htdocs/ldif_import.php:186 +msgid "LDIF Parse Error" +msgstr "LDIF-tiedoston tulkkaaminen epäonnistui" + +#: ../../htdocs/ldif_import.php:101 ../../htdocs/ldif_import.php:190 +msgid "Line" +msgstr "Rivi" + +#: ../../htdocs/ldif_import.php:99 ../../htdocs/ldif_import.php:191 +msgid "Line Number" +msgstr "Rivinumero" + +#: ../../htdocs/export_form.php:113 +msgid "Line ends" +msgstr "Rivin loppu" + +#: ../../htdocs/delete_form.php:92 +msgid "List of entries to be deleted:" +msgstr "Luettelo poistettavista merkinnöistä:" + +#: ../../lib/tree_functions.php:81 +msgid "Logged in as: " +msgstr "Käyttäjä: " + +#: ../../htdocs/logout.php:45 +#, php-format +msgid "Logged out successfully from server %s" +msgstr "Kirjauduttiin ulos palvelimelta %s" + +#: ../../htdocs/update.php:136 +msgid "Login" +msgstr "Kirjaudu" + +#: ../../htdocs/login_form.php:84 +msgid "Login DN" +msgstr "Kirjaudu DN:än" + +#: ../../htdocs/timeout.php:33 ../../lib/tree_functions.php:283 +msgid "Login..." +msgstr "Kirjaudu..." + +#: ../../lib/tree_functions.php:75 +msgid "Logout of this server" +msgstr "Kirjaudu ulos palvelimelta" + +#: ../../htdocs/entry_chooser.php:35 +msgid "Looking in: " +msgstr "Tarkastellaan kohdetta: " + +#: ../../htdocs/copy_form.php:98 +msgid "Make sure your filter (above) will select all child records." +msgstr "Varmista, että suotimesi (yllä) valitsee myös kaikki alamerkinnät." + +#: ../../htdocs/mass_delete.php:54 +msgid "Malformed mass_delete array." +msgstr "Virheellinen mass_delete-taulukko." + +#: ../../htdocs/mass_delete.php:43 +msgid "Mass Deleting" +msgstr "Massapoisto" + +#: ../../htdocs/mass_delete.php:38 +msgid "" +"Mass deletion is not enabled. Please enable it in config.php before " +"proceeding." +msgstr "Massapoisto ei ole käytössä. Se voin ottaa käyttöön muokkaamalla tiedostoa config.php." + +#: ../../htdocs/schema.php:321 +msgid "Matching Rule OID" +msgstr "OID" + +#: ../../htdocs/schema.php:65 ../../htdocs/schema.php:67 +msgid "Matching Rules" +msgstr "Täsmäyssäännöt" + +#: ../../htdocs/add_value_form.php:194 ../../htdocs/schema.php:240 +msgid "Maximum Length" +msgstr "Maksimipituus" + +#: ../../htdocs/ldif_import_form.php:42 ../../htdocs/template_engine.php:364 +msgid "Maximum file size" +msgstr "Tiedoston maksimikoko" + +#: ../../htdocs/add_attr_form.php:161 +#, php-format +msgid "Maximum file size: %s" +msgstr "Tiedoston maksimikoko: %s" + +#: ../../lib/template_functions.php:385 +#, php-format +msgid "Missing %s in the XML file." +msgstr "XML-tiedostosta puuttu %s." + +#: ../../lib/ldif_functions.php:169 +msgid "Missing attibutes or changetype attribute for entry" +msgstr "Merkinnästä puuttuu joko \"changetype\"-attribuutti tai jokin muu attribuutti" + +#: ../../lib/ldif_functions.php:352 ../../lib/ldif_functions.php:390 +msgid "Missing attributes for the entry" +msgstr "Merkinnästä puuttuu attribuutteja" + +#: ../../htdocs/ldif_import.php:33 +msgid "Missing uploaded file." +msgstr "Kopioitava tiedosto puuttuu." + +#: ../../htdocs/update.php:132 +msgid "Modification successful!" +msgstr "Muutos onnistui!" + +#: ../../htdocs/ldif_import.php:59 +msgid "Modifying..." +msgstr "Muokataan..." + +#: ../../htdocs/schema.php:321 +msgid "Name" +msgstr "Nimi" + +#: ../../htdocs/add_oclass_form.php:88 ../../htdocs/add_oclass_form.php:109 +msgid "New Required Attributes" +msgstr "Uudet välttämättömät attribuutit" + +#: ../../htdocs/update_confirm.php:131 +msgid "New Value" +msgstr "Uusi arvo" + +#: ../../htdocs/template_engine.php:561 +msgid "Next Page" +msgstr "Seuraava sivu" + +#: ../../htdocs/schema.php:164 ../../htdocs/schema.php:221 +#: ../../htdocs/schema.php:226 ../../htdocs/schema.php:231 +msgid "No" +msgstr "Ei" + +#: ../../htdocs/template_engine.php:336 +msgid "No DISPLAY/DESCRIPTION attribute in template file" +msgstr "Mallitiedostosta puuttuu attribuutti DISPLAY/DESCRIPTION" + +#: ../../htdocs/delete_attr.php:29 +msgid "No DN specified" +msgstr "DN puuttuu" + +#: ../../htdocs/ldif_import.php:34 +msgid "No LDIF file specified. Please try again." +msgstr "LDIF-tiedosto puuttuu. Yritä uudelleen." + +#: ../../htdocs/compare.php:210 ../../htdocs/compare.php:223 +msgid "No Value" +msgstr "Arvo puuttuu" + +#: ../../htdocs/delete_attr.php:32 +msgid "No attribute name specified." +msgstr "Attribuutin nimi puuttuu." + +#: ../../htdocs/export.php:86 +msgid "No available exporter found." +msgstr "Tarvittava vientimoduuli puuttuu." + +#: ../../htdocs/purge_cache.php:29 +msgid "No cache to purge." +msgstr "Ei tyhjennettävää välimuistia." + +#: ../../templates/template_header.php:163 +msgid "No internal attributes" +msgstr "Ei sisäisiä attribuutteja" + +#: ../../htdocs/logout.php:19 +msgid "No one is logged in to that server." +msgstr "Kukaan ei ole kirjautunut palvelimelle." + +#: ../../lib/search_form_predefined.php:29 +msgid "No queries have been defined in config.php." +msgstr "Yhtäkään kyselyä ei ole määritetty tiedostossa config.php." + +#: ../../htdocs/compare.php:32 ../../htdocs/compare.php:34 +#: ../../htdocs/delete.php:30 ../../htdocs/download_binary_attr.php:26 +#: ../../htdocs/rdelete.php:29 ../../htdocs/template_engine.php:42 +#, php-format +msgid "No such entry: %s" +msgstr "Merkintä puuttuu: %s" + +#: ../../htdocs/view_jpeg_photo.php:24 +msgid "No such file: " +msgstr "Tiedosto puuttuu: " + +#: ../../htdocs/schema.php:515 +#, php-format +msgid "No such schema item: \"%s\"" +msgstr "Skeemasta puuttuu kohta: \"%s\"" + +#: ../../lib/ldif_functions.php:621 +msgid "No version found. Assuming 1." +msgstr "Versionumero puuttuu. Käytetään 1:stä." + +#: ../../htdocs/add_attr.php:26 ../../htdocs/add_attr_form.php:22 +#: ../../htdocs/add_oclass.php:27 ../../htdocs/add_oclass_form.php:28 +#: ../../htdocs/add_value.php:27 ../../htdocs/add_value_form.php:24 +#: ../../htdocs/compare.php:25 ../../htdocs/compare.php:29 +#: ../../htdocs/compare_form.php:18 ../../htdocs/copy.php:29 +#: ../../htdocs/copy_form.php:22 ../../htdocs/create.php:28 +#: ../../htdocs/create_form.php:23 ../../htdocs/delete.php:22 +#: ../../htdocs/delete_attr.php:23 ../../htdocs/delete_form.php:23 +#: ../../htdocs/download_binary_attr.php:17 ../../htdocs/entry_chooser.php:43 +#: ../../htdocs/expand.php:24 ../../htdocs/export.php:17 +#: ../../htdocs/ldif_import.php:19 ../../htdocs/ldif_import_form.php:24 +#: ../../htdocs/mass_delete.php:26 ../../htdocs/rdelete.php:22 +#: ../../htdocs/rename.php:23 ../../htdocs/rename_form.php:22 +#: ../../htdocs/schema.php:22 ../../htdocs/search.php:25 +#: ../../htdocs/server_info.php:50 ../../htdocs/template_engine.php:19 +#: ../../htdocs/template_engine.php:39 ../../htdocs/update.php:43 +#: ../../templates/creation/custom.php:9 +msgid "Not enough information to login to server. Please check your configuration." +msgstr "Palvelimelle kirjautumiseen tarvittavia tietoja puuttuu. Tarkista asetustiedostot." + +#: ../../templates/creation/custom.php:150 +msgid "Note" +msgstr "Huomautus" + +#: ../../htdocs/compare.php:127 ../../htdocs/template_engine.php:694 +#, php-format +msgid "Note: '%s' is an alias for '%s'" +msgstr "Huom: '%s' on alias '%s':lle" + +#: ../../htdocs/add_value_form.php:154 +msgid "" +"Note: You may be required to enter new attributes that these objectClass(es) " +"require" +msgstr "Huom: Joudut ehkä määrittämään objektiluokkien tarvitsemat uudet attribuutit" + +#: ../../htdocs/add_value_form.php:75 ../../htdocs/add_value_form.php:100 +msgid "" +"Note: You will get an \"inappropriate matching\" error if you have not setup " +"an EQUALITY rule on your LDAP server for this attribute." +msgstr "Huom: Saat virheilmoituksen \"inappropriate matching\" ellet ole määrittänyt tälle attribuutille EQUALITY-sääntöä LDAP-palvelimen asetuksissa." + +#: ../../htdocs/delete_form.php:59 +msgid "" +"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." +msgstr "Huom: Tämä toiminto on erittäin vaarallinen, eikä sitä voi perua. Joudut siis tekemään sen omalla riskilläsi. Ota huomioon aliakset, viittaukset ja muut mahdollisesti seikat, jotka voivat aiheuttaa ongelmia." + +#: ../../htdocs/search.php:274 +msgid "Notice, search size limit exceeded." +msgstr "Hakutuloksien maksimimäärä ylittyi." + +#: ../../htdocs/schema.php:406 +msgid "OID" +msgstr "OID" + +#: ../../htdocs/schema.php:50 ../../htdocs/schema.php:52 +#: ../../templates/creation/custom.php:35 +msgid "ObjectClasses" +msgstr "Objektiluokat" + +#: ../../lib/template_functions.php:238 +msgid "ObjectClasses in XML dont exist in LDAP server." +msgstr "XML:n sisältämiä objektiluokkia ei löydy LDAP-palvelimelta." + +#: ../../htdocs/schema.php:163 ../../htdocs/schema.php:339 +msgid "Obsolete" +msgstr "Vanhentunut" + +#: ../../htdocs/update_confirm.php:131 +msgid "Old Value" +msgstr "Vanha arvo" + +#: ../../htdocs/export_form.php:31 ../../lib/search_form_advanced.php:63 +msgid "One (one level beneath base)" +msgstr "One (yksi taso päätason alapuolella)" + +#: ../../htdocs/schema.php:454 ../../templates/creation/custom.php:165 +msgid "Optional Attributes" +msgstr "Valinnaiset attribuutit" + +#: ../../templates/creation/custom.php:180 +msgid "Optional Binary Attributes" +msgstr "Valinnaiset binääriset attribuutit" + +#: ../../htdocs/schema.php:38 +msgid "Or lastly, your LDAP server doesnt provide this information." +msgstr "Voi myös olla, ettei LDAP-palvelimesi tarjoa näitä tietoja." + +#: ../../htdocs/schema.php:191 +msgid "Ordering" +msgstr "Järjestys" + +#: ../../htdocs/search.php:288 ../../htdocs/search.php:326 +#: ../../htdocs/template_engine.php:576 +#, php-format +msgid "Page %d" +msgstr "Sivu %d" + +#: ../../htdocs/schema.php:432 +msgid "Parent to" +msgstr "Yläluokka kohteille" + +#: ../../htdocs/login_form.php:92 +msgid "Password" +msgstr "Salasana" + +#: ../../htdocs/password_checker.php:26 +msgid "Password Checker Tool" +msgstr "Salasanan tarkistustyökalu" + +#: ../../htdocs/password_checker.php:47 +msgid "Passwords do not match!" +msgstr "Salasanat eivät täsmää!" + +#: ../../htdocs/password_checker.php:45 +msgid "Passwords match!" +msgstr "Salasanat täsmäävät!" + +#: ../../htdocs/ldif_import_form.php:46 +msgid "Paste your LDIF here" +msgstr "Liitä LDIF-tiedostosi tähän" + +#: ../../htdocs/delete_form.php:40 +msgid "Permanently delete all children also?" +msgstr "Poista lopullisesti myös kaikki alamerkinnät?" + +#: ../../lib/functions.php:1227 +msgid "" +"Please set $jpeg_temp_dir to a writable directory in the phpLDAPadmin config." +"php" +msgstr "Tiedostossa config.php olevan muuttujan $jpeg_temp_dir arvoksi on valittava hakemisto, johon on kirjoitusoikeudet" + +#: ../../lib/tree_functions.php:222 +msgid "Please specify it in config.php" +msgstr "Määritettävä tiedostossa config.php" + +#: ../../lib/search_form_advanced.php:31 +#: ../../lib/search_form_predefined.php:20 ../../lib/search_form_simple.php:26 +msgid "Predefined Searches" +msgstr "Valmiit haut" + +#: ../../templates/creation/custom.php:55 +msgid "Proceed >>" +msgstr "Eteenpäin >>" + +#: ../../htdocs/create_form.php:130 ../../htdocs/export_form.php:128 +#: ../../htdocs/ldif_import_form.php:41 ../../htdocs/ldif_import_form.php:51 +#: ../../htdocs/template_engine.php:565 +msgid "Proceed >>" +msgstr "Eteenpäin >>" + +#: ../../htdocs/tree.php:82 +msgid "Purge all cached data in phpLDAPadmin, including server schemas." +msgstr "Tyhjennä kaikki phpLDAPadminin välimuistiin tallennettu data, myös palvelimen skeemat." + +#: ../../htdocs/tree.php:81 ../../htdocs/tree.php:82 +msgid "Purge caches" +msgstr "Tyhjennä välimuistit" + +#: ../../htdocs/purge_cache.php:31 +#, php-format +msgid "Purged %s bytes of cache." +msgstr "Tyhjennetty %s tavua välimuistista." + +#: ../../templates/creation/custom.php:25 +msgid "RDN" +msgstr "RDN" + +#: ../../htdocs/compare.php:572 ../../htdocs/template_engine.php:1145 +msgid "Really delete attribute" +msgstr "Poistetaanko attribuutti" + +#: ../../htdocs/copy_form.php:85 +msgid "Recursive copy" +msgstr "Rekursiivinen kopiointi" + +#: ../../htdocs/copy.php:58 +msgid "Recursive copy progress" +msgstr "Rekursiivinen kopiointi käynnissä" + +#: ../../htdocs/rdelete.php:35 +msgid "Recursive delete progress" +msgstr "Rekursiivinen poisto käynnissä" + +#: ../../htdocs/copy_form.php:87 +msgid "Recursively copy all children of this object as well." +msgstr "Kopioi kaikki objektin alaluokat rekursiivisesti." + +#: ../../htdocs/create.php:154 ../../htdocs/rename.php:74 +msgid "Redirecting..." +msgstr "Uudelleenohjataan..." + +#: ../../templates/template_header.php:40 +msgid "Refresh" +msgstr "Päivitä" + +#: ../../lib/tree_functions.php:69 +msgid "Refresh all expanded containers for" +msgstr "Päivitä kaikki avatut säilöt kohteelle" + +#: ../../templates/template_header.php:40 +msgid "Refresh this entry" +msgstr "Päivitä merkintä" + +#: ../../templates/creation/custom.php:25 +msgid "Relative Distinguished Name" +msgstr "Relative Distinguished Name" + +#: ../../htdocs/rename_form.php:38 ../../templates/template_header.php:57 +msgid "Rename" +msgstr "Nimeä uudelleen" + +#: ../../htdocs/rename_form.php:30 +msgid "Rename Entry" +msgstr "Nimeä merkintä uudelleen" + +#: ../../htdocs/ldif_import.php:57 ../../htdocs/ldif_import.php:58 +msgid "Renaming..." +msgstr "Nimetään uudelleen..." + +#: ../../htdocs/tree.php:89 +msgid "Report a bug" +msgstr "Raportoi bugi" + +#: ../../htdocs/tree.php:87 +msgid "Request feature" +msgstr "Tee muutosehdotus" + +#: ../../htdocs/schema.php:453 ../../templates/creation/custom.php:139 +msgid "Required Attributes" +msgstr "Pakolliset attribuutit" + +#: ../../htdocs/compare.php:175 ../../htdocs/template_engine.php:719 +#, php-format +msgid "Required attribute for objectClass(es) %s" +msgstr "Pakolliset attribuutit objektiluokille %s" + +#: ../../htdocs/compare.php:561 ../../htdocs/template_engine.php:1122 +msgid "Save Changes" +msgstr "Tallenna muutokset" + +#: ../../templates/template_header.php:41 +msgid "Save a dump of this object" +msgstr "Tee objektista vedos" + +#: ../../templates/template_header.php:88 +msgid "Save a dump of this object and all of its children" +msgstr "Tee objektista ja sen alaobjekteista vedos" + +#: ../../htdocs/export_form.php:83 +msgid "Save as file" +msgstr "Tallenna tiedostona" + +#: ../../htdocs/schema.php:43 +msgid "Schema for server" +msgstr "Skeema palvelimelle" + +#: ../../lib/search_form_advanced.php:91 +#: ../../lib/search_form_predefined.php:57 ../../lib/search_form_simple.php:57 +msgid "Search" +msgstr "Etsi" + +#: ../../htdocs/export_form.php:74 ../../lib/export_functions.php:200 +#: ../../lib/search_form_advanced.php:75 +msgid "Search Filter" +msgstr "Hakusuodin" + +#: ../../htdocs/export_form.php:61 ../../lib/export_functions.php:199 +#: ../../lib/search_form_advanced.php:56 +msgid "Search Scope" +msgstr "Hakualue (scope)" + +#: ../../lib/search_form_simple.php:32 +msgid "Search for entries whose" +msgstr "Etsi merkintöjä joiden" + +#: ../../htdocs/search.php:357 +msgid "Search performed by phpLDAPadmin in" +msgstr "Haun teki phpLDAPadmin kohteessa" + +#: ../../htdocs/search.php:180 +msgid "Searching..." +msgstr "Etsitään..." + +#: ../../htdocs/add_attr.php:61 ../../htdocs/add_attr.php:81 +#: ../../htdocs/add_attr.php:86 +msgid "Security error: The file being uploaded may be malicious." +msgstr "Tietoturvavaroitus: Kopioitava tiedosto saattaa olla vahingollinen." + +#: ../../lib/search_form_predefined.php:38 +msgid "Select a predefined search" +msgstr "Valitse valmis haku" + +#: ../../htdocs/create_form.php:34 +msgid "Select a template for the creation process" +msgstr "Valitse luonnissa käytettävä malli" + +#: ../../htdocs/ldif_import_form.php:34 +msgid "Select an LDIF file" +msgstr "Valitse LDIF-tiedosto" + +#: ../../htdocs/add_attr_form.php:35 ../../htdocs/add_value_form.php:61 +#: ../../htdocs/compare.php:62 ../../htdocs/compare.php:65 +#: ../../htdocs/compare_form.php:29 ../../htdocs/copy_form.php:57 +#: ../../htdocs/create_form.php:40 ../../htdocs/delete_form.php:34 +#: ../../htdocs/delete_form.php:114 ../../htdocs/export_form.php:51 +#: ../../htdocs/ldif_import.php:46 ../../htdocs/ldif_import_form.php:31 +#: ../../htdocs/rename_form.php:32 ../../htdocs/update_confirm.php:31 +#: ../../lib/export_functions.php:198 ../../lib/search_form_advanced.php:36 +#: ../../lib/search_form_simple.php:30 ../../lib/tree_functions.php:40 +#: ../../templates/template_header.php:35 +#: ../../templates/template_header.php:173 +msgid "Server" +msgstr "Palvelin" + +#: ../../htdocs/server_info.php:69 +msgid "Server info for: " +msgstr "Tiedot palvelimesta: " + +#: ../../htdocs/server_info.php:70 +msgid "Server reports the following information about itself" +msgstr "Palvelimen antamat tiedot" + +#: ../../htdocs/entry_chooser.php:33 +msgid "Server: " +msgstr "Palvelin: " + +#: ../../htdocs/export_form.php:77 ../../lib/search_form_advanced.php:82 +msgid "Show Attributtes" +msgstr "Näytä attribuutit" + +#: ../../templates/template_header.php:50 +msgid "Show internal attributes" +msgstr "Näytä sisäiset attribuutit" + +#: ../../htdocs/search.php:282 +#, php-format +msgid "Showing results %s through %s." +msgstr "Näytetään tulokset %s - %s." + +#: ../../lib/search_form_advanced.php:30 +#: ../../lib/search_form_predefined.php:22 ../../lib/search_form_simple.php:24 +msgid "Simple Search Form" +msgstr "Perushaku" + +#: ../../htdocs/update.php:134 +msgid "" +"Since you changed your password, you must now login again with your new " +"password." +msgstr "Salasana vaihdettu. Nyt sinun on kirjauduttava sisään uudella salasanallasi." + +#: ../../htdocs/schema.php:220 +msgid "Single Valued" +msgstr "Vain yksi arvo" + +#: ../../htdocs/update_confirm.php:131 +msgid "Skip" +msgstr "Ohita" + +#: ../../templates/template_header.php:108 +#, php-format +msgid "Some attributes (%s) were modified and are highlighted below." +msgstr "Joitain attribuutteja (%s) on muutettu ja ne näkyvät alla korostettuna." + +#: ../../htdocs/login.php:115 +msgid "Sorry, you are not allowed to use phpLDAPadmin with this LDAP server." +msgstr "Tämän LDAP-palvelimen kanssa ei voi käyttää phpLDAPadminia." + +#: ../../htdocs/compare_form.php:47 +msgid "Source DN" +msgstr "Lähde DN" + +#: ../../lib/search_form_advanced.php:74 +msgid "Standard LDAP search filter. Example: (&(sn=Smith)(givenname=David))" +msgstr "Standardi LDAP-hakusuodin. Esimerkki: (&(sn=Smith)(givenname=David))" + +#: ../../templates/creation/custom.php:17 +msgid "Step 1 of 2: Name and ObjectClass(es)" +msgstr "1 / 2: Nimi ja objektiluokat" + +#: ../../templates/creation/custom.php:128 +msgid "Step 2 of 2: Specify attributes and values" +msgstr "2 / 2: Attribuuttien ja niiden arvojen määrittäminen" + +#: ../../htdocs/export_form.php:32 ../../lib/search_form_advanced.php:60 +msgid "Sub (entire subtree)" +msgstr "Sub (koko alahaara)" + +#: ../../htdocs/schema.php:197 +msgid "Substring Rule" +msgstr "Alimerkkijonosääntö" + +#: ../../htdocs/copy.php:66 ../../htdocs/copy.php:110 +#: ../../htdocs/ldif_import.php:107 ../../htdocs/ldif_import.php:132 +#: ../../htdocs/mass_delete.php:73 ../../htdocs/rdelete.php:66 +#: ../../htdocs/rdelete.php:83 +msgid "Success" +msgstr "Onnistui" + +#: ../../htdocs/login.php:159 +#, php-format +msgid "Successfully logged into server %s" +msgstr "Kirjautuneena palvelimelle %s" + +#: ../../htdocs/compare.php:75 +msgid "Switch Entry" +msgstr "Vaihda merkintää" + +#: ../../htdocs/add_value_form.php:190 ../../htdocs/schema.php:203 +msgid "Syntax" +msgstr "Syntaksi" + +#: ../../htdocs/schema.php:79 +msgid "Syntax OID" +msgstr "OID" + +#: ../../htdocs/schema.php:60 ../../htdocs/schema.php:62 +msgid "Syntaxes" +msgstr "Syntaksit" + +#: ../../htdocs/create_form.php:43 +msgid "Template" +msgstr "Malli" + +#: ../../htdocs/add_value.php:38 ../../htdocs/delete_attr.php:37 +#: ../../htdocs/update.php:94 +#, php-format +msgid "" +"The attribute \"%s\" is flagged as read-only in the phpLDAPadmin " +"configuration." +msgstr "Attribuutti \"%s\" on merkitty vain luettavaksi phpLDAPadminin asetustiedostoissa." + +#: ../../lib/ldif_functions.php:410 +msgid "The attribute name should be add, delete or replace" +msgstr "Attribuutin nimen pitää olla \"add\", \"delete\" tai \"replace\"" + +#: ../../lib/ldif_functions.php:514 +msgid "The attribute name should be newsuperior" +msgstr "Attribuutin nimen pitää olla \"newsuperior\"" + +#: ../../lib/ldif_functions.php:448 +#, php-format +msgid "The attribute to modify doesnt match the one specified by the %s attribute." +msgstr "Muokattava attribuuttiei ole sama kuin attribuutin %s määrittämä." + +#: ../../templates/creation/custom.php:65 +#, php-format +msgid "The container you specified (%s) does not exist. Please try again." +msgstr "Määrittämääsi säilöä (%s) ei ole olemassa. Yritä uudelleen." + +#: ../../htdocs/copy.php:49 +#, php-format +msgid "The destination container (%s) does not exist." +msgstr "Kohdesäilöä (%s) ei ole olemassa." + +#: ../../htdocs/copy.php:46 +#, php-format +msgid "The destination entry (%s) already exists." +msgstr "Kohdemerkintä (%s) on jo olemassa." + +#: ../../lib/ldif_functions.php:483 +msgid "The entry is not valid" +msgstr "Virheellinen merkintä" + +#: ../../htdocs/add_attr.php:53 +msgid "" +"The file you chose is either empty or does not exist. Please go back and try " +"again." +msgstr "Tiedosto on joko tyhjä tai sitä ei ole olemassa." + +#: ../../htdocs/add_attr.php:73 +msgid "" +"The file you selected was only partially uploaded, likley due to a network " +"error." +msgstr "Valitsemasi tiedosto kopioitui vain osittain. Siinä oli luultavimmin verkon toiminnan virhe." + +#: ../../htdocs/add_attr.php:65 ../../htdocs/add_attr.php:69 +msgid "" +"The file you uploaded is too large. Please check php.ini, upload_max_size " +"setting" +msgstr "Kopioimasi tiedosto on liian suuri. Tarkista php.ini -tiedoston muuttuja upload_max_size" + +#: ../../htdocs/copy_form.php:74 +msgid "The full DN of the new entry to be created when copying the source entry" +msgstr "Kopioitaessa luotavan uuden merkinnän täydellinen DN" + +#: ../../lib/search_form_advanced.php:56 +msgid "The scope in which to search" +msgstr "Alue (scope), johon haku kohdistetaan" + +#: ../../htdocs/search.php:335 +msgid "The search found no results." +msgstr "Haku ei tuottanut tuloksia." + +#: ../../htdocs/schema.php:36 +msgid "The server does not fully support the LDAP protocol." +msgstr "Palvelin ei tue LDAP-protokollaa täydellisesti." + +#: ../../htdocs/copy.php:43 +msgid "The source and destination DN are the same." +msgstr "Lähde- ja kohde-DN ovat samoja." + +#: ../../lib/ldif_functions.php:333 +msgid "The url attribute value should begin with file:///" +msgstr "URL:n pitäisi alkaa merkkijonolla file:///" + +#: ../../htdocs/add_oclass_form.php:89 +msgid "This action requires you to add" +msgstr "Tässä toiminnossa sinun on lisättävä" + +#: ../../htdocs/compare.php:185 ../../htdocs/template_engine.php:753 +msgid "" +"This attribute has been flagged as read only by the phpLDAPadmin " +"administrator" +msgstr "PhpLDAPadminin ylläpitäjä on merkinnyt attribuutin vain luettevaksi" + +#: ../../htdocs/template_engine.php:727 +msgid "This attribute is required for the RDN." +msgstr "Attribuutti tarvitaan RND:ä varten." + +#: ../../lib/tree_functions.php:163 +msgid "This base entry does not exist." +msgstr "Pohjamerkintä puuttuu." + +#: ../../htdocs/schema.php:36 +msgid "This could happen for several reasons, the most probable of which are:" +msgstr "Syitä voi olla monia, mutta luultavimpia ovat seuraavat:" + +#: ../../lib/search_form_advanced.php:50 +msgid "This entry does not exist." +msgstr "Merkintää ei ole olemassa." + +#: ../../htdocs/compare.php:82 +msgid "This entry has no attributes" +msgstr "Merkinnälle ei ole määritetty attribuutteja" + +#: ../../htdocs/delete_form.php:50 +#, php-format +msgid "This entry is the root of a sub-tree containing %s entries." +msgstr "Merkinnällä on %s alamerkintää." + +#: ../../htdocs/compare.php:442 ../../htdocs/template_engine.php:1015 +#, php-format +msgid "This is a structural ObjectClass and cannot be removed." +msgstr "Tämä on rakenteellinen objektiluokka eikä sitä voi poistaa." + +#: ../../lib/search_form_advanced.php:47 +msgid "This is not a valid DN." +msgstr "Virheellinen DN." + +#: ../../htdocs/schema.php:414 +msgid "This objectClass is obsolete." +msgstr "Objektiluokka on vanhentunut." + +#: ../../htdocs/server_info.php:74 +msgid "This server has nothing to report." +msgstr "Palvelin ei raportoi mitään." + +#: ../../htdocs/create_form.php:110 +msgid "This template has been disabled in the XML file." +msgstr "Malli on poistettu käytöstä XML-tiedostossa." + +#: ../../htdocs/create_form.php:113 +msgid "This template is not allowed in this container." +msgstr "Tätä mallia ei voi käyttää tässä säilössä." + +#: ../../htdocs/password_checker.php:36 +msgid "To" +msgstr "" + +#: ../../htdocs/timeout.php:32 +msgid "To log back in please click on the following link:" +msgstr "Kirjautuaksesi uudelleen sisään napsauta seuraavaa linkkiä:" + +#: ../../lib/export_functions.php:201 +msgid "Total Entries" +msgstr "Merkintöjä yhteensä" + +#: ../../htdocs/schema.php:411 +msgid "Type" +msgstr "Tyyppi" + +#: ../../lib/functions.php:442 +#, php-format +msgid "" +"Unable to bind to %s with your with auto_uid credentials. Please " +"check your configuration file." +msgstr "Yhdistäminen kohteeseen %s auto_uid -valtuuksilla epäonnistui. Tarkista asetustiedostosi." + +#: ../../lib/server_functions.php:2711 +#, php-format +msgid "" +"Unable to bind to %s with your with unique_attrs credentials. Please " +"check your configuration file." +msgstr "Yhdistäminen kohteeseen %s unique_attr -valtuuksilla epäonnistui. Tarkista asetustiedostosi." + +#: ../../htdocs/mass_delete.php:24 +msgid "Unable to delete, server is in READY-ONLY mode." +msgstr "Poistaminen epäonnistui, koska palvelin on VAIN LUKU -tilassa." + +#: ../../lib/ldif_functions.php:327 +msgid "Unable to open file" +msgstr "Tiedoston aukaiseminen epäonnistui" + +#: ../../lib/ldif_functions.php:320 +msgid "Unable to read file" +msgstr "Tiedoston lukeminen epäonnistui" + +#: ../../htdocs/login_form.php:24 ../../htdocs/logout.php:32 +#: ../../lib/server_functions.php:2015 ../../lib/server_functions.php:2087 +#: ../../lib/server_functions.php:2369 ../../lib/server_functions.php:2420 +#, php-format +msgid "Unknown auth_type: %s" +msgstr "Tuntematon auth_type: %s" + +#: ../../htdocs/search.php:176 +msgid "Unrecognized criteria option: " +msgstr "Tuntematon ehto: " + +#: ../../lib/functions.php:1119 +msgid "Unrecognized error number: " +msgstr "Tuntematon virhe: " + +#: ../../htdocs/search.php:348 +#, php-format +msgid "Unrecognized search result format: %s" +msgstr "Tuntematon hakutuloksen muoto: %s" + +#: ../../htdocs/view_jpeg_photo.php:17 +msgid "Unsafe file name: " +msgstr "Turvaton tiedostonimi: " + +#: ../../htdocs/ldif_import.php:35 +msgid "Uploaded LDIF file is empty." +msgstr "Kopioitu LDIF-tiedosto on tyhjä." + +#: ../../htdocs/schema.php:235 +msgid "Usage" +msgstr "Käyttö" + +#: ../../htdocs/welcome.php:24 +msgid "Use the menu to the left to navigate" +msgstr "Käytä navigointiin vasemmanpuoleista valikkoa" + +#: ../../htdocs/schema.php:321 +msgid "Used by Attributes" +msgstr "Käytössä attribuuteissa" + +#: ../../htdocs/schema.php:269 +msgid "Used by objectClasses" +msgstr "Käytössä objektiluokissa" + +#: ../../htdocs/schema.php:230 +msgid "User Modification" +msgstr "Käyttäjän muokattavissa" + +#: ../../htdocs/login_form.php:82 +msgid "User name" +msgstr "Käyttäjänimi" + +#: ../../htdocs/template_engine.php:420 ../../htdocs/template_engine.php:422 +msgid "Verify" +msgstr "Tarkista" + +#: ../../templates/template_header.php:87 +#, php-format +msgid "View %s children" +msgstr "%s alamerkintää" + +#: ../../templates/template_header.php:87 +msgid "View 1 child" +msgstr "1 alamerkintä" + +#: ../../lib/tree_functions.php:67 +msgid "View schema for" +msgstr "Näytä skeema kohteelle" + +#: ../../lib/tree_functions.php:70 +msgid "View server-supplied information" +msgstr "Näytä palvelimen antamat tiedot" + +#: ../../htdocs/compare.php:437 ../../htdocs/template_engine.php:1008 +msgid "View the schema description for this objectClass" +msgstr "Näytä tämänobjektiluokan skeeman kuvaus" + +#: ../../templates/template_header.php:100 +msgid "Viewing entry in read-only mode." +msgstr "Näytetään merkintä vain luku -tilassa." + +#: ../../htdocs/login_form.php:53 +msgid "Warning: This web connection is unencrypted." +msgstr "Varoitus: Web-yhteys on salaamaton." + +#: ../../htdocs/template_engine.php:488 +#, php-format +msgid "We are missing a page for [%s] attributes." +msgstr "Joistain attribuuteista [%s] puuttuu sivu." + +#: ../../htdocs/copy_form.php:91 +msgid "" +"When performing a recursive copy, only copy those entries which match this " +"filter" +msgstr "Kopioi rekursiivisesti ainoastaan merkinnät, jotka löytyvät näkyvät tällä suotimella" + +#: ../../htdocs/schema.php:164 ../../htdocs/schema.php:221 +#: ../../htdocs/schema.php:226 ../../htdocs/schema.php:231 +msgid "Yes" +msgstr "Kyllä" + +#: ../../htdocs/mass_delete.php:115 +msgid "Yes, delete!" +msgstr "Kyllä, poista!" + +#: ../../htdocs/login_form.php:52 +msgid "" +"You are not using 'https'. Web browser will transmit login information in " +"clear text." +msgstr "Et käytä 'https'-prokollaa. Www-selaimesi lähettää kirjautumistiedot salaamattomana tekstinä." + +#: ../../htdocs/add_attr.php:24 ../../htdocs/add_attr_form.php:20 +#: ../../htdocs/add_oclass.php:25 ../../htdocs/add_oclass_form.php:26 +#: ../../htdocs/add_value.php:25 ../../htdocs/add_value_form.php:22 +#: ../../htdocs/copy_form.php:20 ../../htdocs/create.php:26 +#: ../../htdocs/create_form.php:21 ../../htdocs/delete.php:20 +#: ../../htdocs/delete_attr.php:21 ../../htdocs/delete_form.php:21 +#: ../../htdocs/download_binary_attr.php:15 +#: ../../htdocs/ldif_import_form.php:22 ../../htdocs/rdelete.php:20 +#: ../../htdocs/rename.php:21 ../../htdocs/rename_form.php:20 +#: ../../htdocs/update.php:41 ../../htdocs/update_confirm.php:20 +msgid "You cannot perform updates while server is in read-only mode" +msgstr "Päivityksiä ei voi tehdä palvelimen ollessa vain luku -tilassa" + +#: ../../htdocs/rename.php:29 +msgid "" +"You cannot rename an entry which has children entries (eg, the rename " +"operation is not allowed on non-leaf entries)" +msgstr "Et voi nimetä uudelleen merkintää, jolla on alamerkintöjä" + +#: ../../htdocs/rename.php:37 +msgid "You did not change the RDN" +msgstr "Et vaihtanut RDN:n arvoa" + +#: ../../htdocs/add_oclass_form.php:31 ../../templates/creation/custom.php:70 +msgid "" +"You did not select any ObjectClasses for this object. Please go back and do " +"so." +msgstr "Kohteelle täytyy valita vähintään yksi objektiluokka." + +#: ../../htdocs/mass_delete.php:58 +msgid "You did not select any entries to delete." +msgstr "Yhtään poistettavaa merkintää ei ole valittu." + +#: ../../htdocs/search.php:109 +msgid "" +"You have not logged into the selected server yet, so you cannot perform " +"searches on it." +msgstr "Hakuja ei voi tehdä ennenkuin on kirjautunut LDAP-palvelimelle." + +#: ../../templates/creation/custom.php:61 +msgid "You left the RDN field blank." +msgstr "RDN-kentän arvo puuttuu." + +#: ../../htdocs/add_attr.php:37 ../../htdocs/add_attr.php:77 +msgid "You left the attribute value blank. Please go back and try again." +msgstr "Attribuutille on annettava arvo." + +#: ../../htdocs/copy.php:40 +msgid "You left the destination DN blank." +msgstr "Kohde DN -kentän arvo puuttuu." + +#: ../../htdocs/login.php:36 +msgid "You left the password blank." +msgstr "Salasana -kentän arvo puuttuu." + +#: ../../htdocs/create.php:64 +#, php-format +msgid "You left the value blank for required attribute (%s)." +msgstr "Pakollisen attribuutin (%s) arvo puuttuu." + +#: ../../htdocs/update_confirm.php:241 +msgid "You made no changes" +msgstr "Et tehnyt mitään muutoksia" + +#: ../../htdocs/export.php:40 +msgid "You must choose an export format." +msgstr "Viennin tiedostomuoto on määritettävä." + +#: ../../htdocs/ldif_import.php:38 +msgid "You must either upload a file or provide an LDIF in the text box." +msgstr "LDIF-tiedosto on joko kopioitava tai liitettävänä tekstinä tekstikenttään." + +#: ../../htdocs/delete.php:27 ../../htdocs/rdelete.php:26 +msgid "You must specify a DN" +msgstr "DN on määritettävä" + +#: ../../htdocs/compare.php:535 +#, php-format +msgid "You need one of the following ObjectClass(es) to add this attribute %s." +msgstr "Tarvitset jonkin seuraavista objektiluokista lisätäksesi attribuutin %s." + +#: ../../htdocs/index.php:76 +#, php-format +msgid "" +"You need to configure phpLDAPadmin. Edit the file \"%s\" to do so. An " +"example config file is provided in \"%s.example\"." +msgstr "PhpLDAPadminin asetukset ovat tekemättä. Asetukset tallennetaan tiedostoon \"%s\". Mallina voi käyttää tiedostoa \"%s.example\"." + +#: ../../lib/functions.php:502 +#, php-format +msgid "" +"You specified an invalid value for auto_uid_number_mechanism (\"%s\")\n" +" in your configration. Only \"uidpool\" " +"and \"search\" are valid.\n" +" Please correct this problem." +msgstr "" +"Muuttujalla auto_uid_number_mechanism on virheellinen arvo (\"%s\")\n" +" asetustiedostoissa. Muuttujan arvoksi kelpaavat vain \"uidpool\" ja \"search\".\n" +" Ole hyvä ja korjaa asia." + +#: ../../lib/functions.php:422 +#, php-format +msgid "" +"You specified the \"auto_uid_number_mechanism\" as \"search\" in your\n" +" configuration for server %s, but you " +"did not specify the\n" +" \"auto_uid_number_search_base\". Please " +"specify it before proceeding." +msgstr "" +"Muuttujalle \"auto_uid_number_mechanism\" on arvo \"search\",\n" +" palvelimen %s asetustiedostossa, mutta et ole määrittänyt muuttujaa\n" +" \"auto_uid_number_search_base\"." + +#: ../../templates/template_header.php:56 +msgid "You will be prompted to confirm this decision" +msgstr "Tähän toimintoon tullaan pyytämään vahvistus" + +#: ../../htdocs/add_attr_form.php:158 ../../htdocs/template_engine.php:360 +msgid "" +"Your PHP configuration has disabled file uploads. Please check php.ini " +"before proceeding." +msgstr "Tiedostojen kopiointi on estetty PHP:n asetustiedostossa. Tarkista php.ini ennenkuin jatkat." + +#: ../../lib/functions.php:1353 ../../lib/functions.php:1364 +#: ../../lib/functions.php:1375 ../../lib/functions.php:1423 +#: ../../lib/functions.php:1441 +msgid "Your PHP install does not have the mhash() function. Cannot do SHA hashes." +msgstr "PHP-asennus ei tue mhash()-funktiota, eikä SHA-tiivisteiden luominen onnistu." + +#: ../../lib/server_functions.php:270 +msgid "Your PHP install does not support TLS." +msgstr "PHP-asennus ei tue TLS:ä." + +#: ../../lib/server_functions.php:285 +msgid "" +"Your PHP installation does not support ldap_sasl_bind() function. This " +"function is present in PHP 5.x when compiled with --with-ldap-sasl." +msgstr "PHP-asennus ei tue ldap_sasl_bind()-funktiota. Kyseinen funktio löytyy PHP:n 5.x -versioista, joiden kääntämisessä on käytetty vipua --with-ldap-sasl." + +#: ../../htdocs/ldif_import_form.php:19 +msgid "" +"Your PHP.INI does not have file_uploads = ON. Please enable file uploads in " +"PHP." +msgstr "Kopiointi ei onnistu jos PHP.INI -tiedostosta puuttuu rivi \"file_uploads = ON\"." + +#: ../../htdocs/timeout.php:29 +msgid "Your Session timed out after" +msgstr "Istunto aikakatkaistiin kun oli kulunut" + +#: ../../htdocs/update.php:83 +#, php-format +msgid "" +"Your attempt to add %s (%s) to
    %s
    is NOT " +"allowed. That attribute/value belongs to another entry.

    You might like to " +"search for that entry." +msgstr "Lisäämistä kohteesta %s (%s) kohteeseen
    %s
    ei sallita. Kyseinen attribuutti/arvo kuuluu toiseen merkintään.

    Haluat ehkä etsiä kyseisen merkinnän." + +#: ../../htdocs/add_attr.php:48 ../../htdocs/add_oclass.php:51 +#: ../../htdocs/add_value.php:57 ../../htdocs/create.php:118 +#, php-format +msgid "" +"Your attempt to add %s (%s) to
    %s
    is NOT " +"allowed. That attribute/value belongs to another entry.

    You might like to " +"search for that entry." +msgstr "Lisäämistä kohteesta %s (%s) kohteeseen
    %s
    ei sallita. Kyseinen attribuutti/arvo kuuluu toiseen merkintään.

    Haluat ehkä etsiä kyseisen merkinnän." + +#: ../../lib/functions.php:2048 +#, php-format +msgid "" +"Your config.php specifies an invalid value for $default_search_display: %s. " +"Please fix it" +msgstr "Tiedostossa config.php on määritetty virheellinen arvo (%s) muuttujalle $default_search_display" + +#: ../../lib/functions.php:431 +#, php-format +msgid "" +"Your phpLDAPadmin configuration specifies an invalid auto_uid_search_base " +"for server %s" +msgstr "Palvelimen %s auto_uid_search_base on virheellinen. Tarkista phpLDAPadminin asetukset" + +#: ../../lib/functions.php:1334 ../../lib/functions.php:1468 +msgid "Your system crypt library does not support blowfish encryption." +msgstr "Käyttöjärjestelmäsi salauskirjasto ei tue blowfish-salausta." + +#: ../../lib/functions.php:1320 ../../lib/functions.php:1498 +msgid "Your system crypt library does not support extended DES encryption." +msgstr "Käyttöjärjestelmäsi salauskirjasto ei tue laajennettua DES-salausta." + +#: ../../lib/functions.php:1327 ../../lib/functions.php:1483 +msgid "Your system crypt library does not support md5crypt encryption." +msgstr "Käyttöjärjestelmäsi salauskirjasto ei tue md5crypt-salausta." + +#: ../../lib/template_functions.php:635 +#, php-format +msgid "" +"Your template calls php.Function for a default value, however (%s) is NOT " +"available in the POST FORM variables. The following variables are available " +"[%s]." +msgstr "Mallissa pyydetään oletusarvoa php-funktiolta, mutta muuttujaa (%s) ei ole lueteltuna POST FORM -muuttujissa. Seuraavat muuttujat ovat käytettävissä [%s]." + +#: ../../htdocs/template_engine.php:158 +#, php-format +msgid "Your template has an unknown post function (%s)." +msgstr "Mallissa on tuntematon post-funktio (%s)." + +#: ../../htdocs/template_engine.php:150 +#, php-format +msgid "Your template is missing variable (%s)" +msgstr "Mallista puuttuu muuttuja (%s)" + +#: ../../htdocs/schema.php:37 +msgid "Your version of PHP does not correctly perform the query." +msgstr "Käytössä oleva PHP:n versio ei suorita kyselyä oikeaoppisesti." + +#: ../../htdocs/update_confirm.php:198 ../../htdocs/update_confirm.php:202 +msgid "[attribute deleted]" +msgstr "[attribuutti poistetaan]" + +#: ../../htdocs/compare.php:533 ../../htdocs/compare.php:544 +#: ../../htdocs/template_engine.php:930 ../../htdocs/template_engine.php:1106 +msgid "add value" +msgstr "lisää arvo" + +#: ../../lib/functions.php:1645 +msgid "browse" +msgstr "selaa" + +#: ../../htdocs/tree.php:88 +msgid "bug" +msgstr "bugi" + +#: ../../htdocs/ldif_import.php:47 +msgid "bytes" +msgstr "tavua" + +#: ../../htdocs/schema.php:248 +msgid "character" +msgstr "kirjain" + +#: ../../htdocs/add_value_form.php:194 ../../htdocs/schema.php:248 +msgid "characters" +msgstr "kirjaimet" + +#: ../../htdocs/compare.php:293 ../../htdocs/template_engine.php:812 +msgid "delete attribute" +msgstr "poista attribuutti" + +#: ../../htdocs/add_value_form.php:87 ../../htdocs/add_value_form.php:94 +#: ../../htdocs/compare.php:284 ../../htdocs/compare.php:287 +#: ../../htdocs/template_engine.php:804 ../../htdocs/template_engine.php:807 +#: ../../templates/template_header.php:147 +#: ../../templates/template_header.php:151 +msgid "download value" +msgstr "latausarvo" + +#: ../../htdocs/compare.php:316 ../../htdocs/template_engine.php:851 +msgid "empty" +msgstr "tyhjä" + +#: ../../htdocs/mass_delete.php:104 +msgid "entries" +msgstr "merkinnät" + +#: ../../htdocs/mass_delete.php:104 +msgid "entry" +msgstr "merkintä" + +#: ../../lib/tree_functions.php:72 +msgid "export" +msgstr "vie" + +#: ../../htdocs/search.php:238 +msgid "export results" +msgstr "viennin tulos" + +#: ../../htdocs/compare.php:406 ../../htdocs/template_engine.php:952 +msgid "false" +msgstr "epätosi" + +#: ../../htdocs/create.php:154 ../../htdocs/rename.php:74 +msgid "here" +msgstr "täällä" + +#: ../../lib/tree_functions.php:71 +msgid "import" +msgstr "tuo" + +#: ../../lib/tree_functions.php:70 +msgid "info" +msgstr "info" + +#: ../../templates/creation/custom.php:150 +msgid "is an alias for" +msgstr "on alias kohteelle" + +#: ../../lib/functions.php:1242 +msgid "jpegPhoto contains errors
    " +msgstr "jpegPhoto sisältää virheitä
    " + +#: ../../htdocs/tree.php:86 +msgid "light" +msgstr "kevyt" + +#: ../../lib/tree_functions.php:283 +msgid "login" +msgstr "kirjaudu" + +#: ../../lib/tree_functions.php:75 ../../lib/tree_functions.php:271 +msgid "logout" +msgstr "kirjaudu ulos" + +#: ../../htdocs/mass_delete.php:35 +msgid "mass_delete POST var is not an array." +msgstr "mass_delete POST-muuttuja ei ole taulukko." + +#: ../../htdocs/timeout.php:29 +msgid "min. of inactivity. You have been automatically logged out." +msgstr "min. toimettomana. Istunto aikakatkaistiin." + +#: ../../lib/tree_functions.php:475 +msgid "new" +msgstr "uusi" + +#: ../../htdocs/add_oclass_form.php:90 ../../htdocs/add_oclass_form.php:95 +msgid "new attributes" +msgstr "uudet attribuutit" + +#: ../../htdocs/schema.php:153 +msgid "no description" +msgstr "ei kuvausta" + +#: ../../htdocs/entry_chooser.php:69 +msgid "no entries" +msgstr "ei merkintöjä" + +#: ../../htdocs/add_attr_form.php:114 +msgid "no new attributes available for this entry" +msgstr "merkintään ei voi liittää enempää attribuutteja" + +#: ../../htdocs/add_attr_form.php:170 +msgid "no new binary attributes available for this entry" +msgstr "merkintään ei voi liittää enempää attribuutteja" + +#: ../../htdocs/schema.php:172 ../../htdocs/schema.php:258 +#: ../../htdocs/schema.php:273 ../../htdocs/schema.php:348 +#: ../../htdocs/schema.php:418 ../../htdocs/schema.php:437 +#: ../../htdocs/schema.php:478 ../../htdocs/schema.php:504 +#: ../../templates/creation/custom.php:142 +#: ../../templates/creation/custom.php:168 +msgid "none" +msgstr "ei käytössä" + +#: ../../htdocs/compare.php:407 ../../htdocs/template_engine.php:953 +msgid "none, remove value" +msgstr "ei käytössä, poista arvo" + +#: ../../htdocs/schema.php:244 +msgid "not applicable" +msgstr "ei käytettävissä" + +#: ../../htdocs/schema.php:185 ../../htdocs/schema.php:193 +#: ../../htdocs/schema.php:199 ../../htdocs/schema.php:236 +msgid "not specified" +msgstr "ei määritetty" + +#: ../../htdocs/delete_form.php:55 +#, php-format +msgid "" +"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?" +msgstr "phpLDAPadmin voi poistaa rekursiivisesti tämän merkinnän ja sen %s alamerkintää. Alla näkyy luettelo kaikista poistettavista merkinnöistä. Haluatko varmasti jatkaa?" + +#: ../../htdocs/schema.php:37 +msgid "phpLDAPadmin doesn't know how to fetch the schema for your server." +msgstr "phpLDAPadmin ei osannut noutaa palvelimen käyttämää skeemaa." + +#: ../../htdocs/welcome.php:21 +msgid "phpLDAPadmin logo" +msgstr "phpLDAPadminin logo" + +#: ../../htdocs/compare.php:185 ../../htdocs/template_engine.php:753 +#: ../../lib/tree_functions.php:117 +msgid "read only" +msgstr "vain luku" + +#: ../../lib/tree_functions.php:69 +msgid "refresh" +msgstr "päivitä" + +#: ../../htdocs/template_engine.php:880 +msgid "rename" +msgstr "nimeä uudelleen" + +#: ../../htdocs/compare.php:175 ../../htdocs/template_engine.php:719 +msgid "required" +msgstr "pakollinen" + +#: ../../lib/tree_functions.php:67 +msgid "schema" +msgstr "skeema" + +#: ../../lib/tree_functions.php:68 +msgid "search" +msgstr "Etsi" + +#: ../../htdocs/search.php:229 ../../htdocs/search.php:357 +msgid "seconds" +msgstr "sekuntia" + +#: ../../htdocs/compare.php:442 ../../htdocs/template_engine.php:1015 +msgid "structural" +msgstr "rakenteellinen" + +#: ../../htdocs/add_oclass_form.php:96 +msgid "that this objectClass requires. You can do so in this form." +msgstr "jonka tämä objektiluokka vaatii. Voit tehdä niin tällä lomakkeella." + +#: ../../htdocs/mass_delete.php:104 +msgid "these" +msgstr "nämä" + +#: ../../htdocs/mass_delete.php:104 +msgid "this" +msgstr "tämä" + +#: ../../htdocs/copy_form.php:62 +msgid "to a new object" +msgstr "uuteen objektiin" + +#: ../../htdocs/compare.php:405 ../../htdocs/template_engine.php:951 +msgid "true" +msgstr "tosi" + +#: ../../htdocs/update.php:50 +msgid "" +"update_array is malformed. This might be a phpLDAPadmin bug. Please report " +"it." +msgstr "update_array on virheellinen. On mahdollista, että kyseessä on phpLDAPadminin bugi. Ole hyvä ja tee bugiraportti." + +#: ../../templates/template_header.php:173 +msgid "using template" +msgstr "käytetään mallia" + +#: ../../htdocs/add_value_form.php:59 +msgid "value to" +msgstr "arvo kohteelle" + +#: ../../htdocs/add_value_form.php:64 +msgid "values for attribute" +msgstr "arvoa attribuutille" + +#: ../../htdocs/delete_form.php:52 +msgid "view entries" +msgstr "näytä merkinnät" + +#: ../../htdocs/copy.php:84 +msgid "view the new entry" +msgstr "nähdä uuden merkinnän" + +#: ../../lib/tree_functions.php:265 +msgid "warning" +msgstr "varoitus" + +#: ../../htdocs/compare_form.php:36 +msgid "with " +msgstr "ja" + diff --git a/locale/hu_HU/LC_MESSAGES/messages.po b/locale/hu_HU/LC_MESSAGES/messages.po index d6fea21..9fda4ae 100644 --- a/locale/hu_HU/LC_MESSAGES/messages.po +++ b/locale/hu_HU/LC_MESSAGES/messages.po @@ -205,6 +205,10 @@ msgid "Rename" msgstr "Átnevezés" +msgid "rename" +msgstr "Átnevezés" + + msgid "Add" msgstr "Hozzáadás" diff --git a/locale/it_IT/LC_MESSAGES/messages.po b/locale/it_IT/LC_MESSAGES/messages.po index 9003293..0c1a8a7 100644 --- a/locale/it_IT/LC_MESSAGES/messages.po +++ b/locale/it_IT/LC_MESSAGES/messages.po @@ -169,8 +169,8 @@ msgid "Rename Entry" msgstr "Rinomina la Voce" -msgid "Rename" -msgstr "Rinomina" +msgid "rename" +msgstr "rinomina" msgid "Add" @@ -234,7 +234,7 @@ msgstr "Aggiungi un Nuovo Attributo Binario" msgid "Note: '%s' is an alias for '%s'" -msgstr "Alias per" +msgstr "Nota: '%s' Ú un alias per '%s'" msgid "download value" @@ -392,4 +392,24 @@ msgstr "Nota: ti potrebbe essere chiesto di inserire nuovi attributi
    che qu msgid "Syntax" msgstr "Sintassi" +msgid "Use the menu to the left to navigate" +msgstr "Usa il menu sulla sinistra per esplorare l'albero LDAP" + +msgid "Check password..." +msgstr "Verifica password..." + +msgid "Password Checker Tool" +msgstr "Strumento di verifica password" + +msgid "Compare" +msgstr "Confronta" + +msgid "To" +msgstr "A" + +msgid "Passwords match!" +msgstr "La password corrisponde!" + +msgid "Passwords do not match!" +msgstr "La password non corrisponde!" diff --git a/locale/nl_BE/LC_MESSAGES/messages.po b/locale/nl_BE/LC_MESSAGES/messages.po index 139097e..dd93648 100644 --- a/locale/nl_BE/LC_MESSAGES/messages.po +++ b/locale/nl_BE/LC_MESSAGES/messages.po @@ -161,6 +161,10 @@ msgid "Rename" msgstr "hernoemen" +msgid "rename" +msgstr "hernoemen" + + msgid "Add" msgstr "toevoegen" @@ -181,7 +185,7 @@ msgid "Show internal attributes" msgstr "interne attributen laten zien" -msgid "Click to view the schema defintion for attribute type '%s'" +msgid "Click to view the schema definition for attribute type '%s'" msgstr "klik hier om de schemadefinitie van attribuuttype '%s' te bekijken" diff --git a/locale/pt_BR/LC_MESSAGES/messages.po b/locale/pt_BR/LC_MESSAGES/messages.po index 7ed914f..681d35d 100644 --- a/locale/pt_BR/LC_MESSAGES/messages.po +++ b/locale/pt_BR/LC_MESSAGES/messages.po @@ -213,6 +213,10 @@ msgid "Rename" msgstr "Renomear" +msgid "rename" +msgstr "renomear" + + msgid "Add" msgstr "Inserir" diff --git a/locale/ru_RU/LC_MESSAGES/messages.po b/locale/ru_RU/LC_MESSAGES/messages.po index 7f246a2..e7de831 100644 --- a/locale/ru_RU/LC_MESSAGES/messages.po +++ b/locale/ru_RU/LC_MESSAGES/messages.po @@ -209,6 +209,10 @@ msgid "Rename" msgstr "Переименовать" +msgid "rename" +msgstr "ПереОЌеМПвать" + + msgid "Add" msgstr "Добавить" diff --git a/locale/sv_FI/LC_MESSAGES/messages.po b/locale/sv_FI/LC_MESSAGES/messages.po index ec709bd..0ce53cd 100644 --- a/locale/sv_FI/LC_MESSAGES/messages.po +++ b/locale/sv_FI/LC_MESSAGES/messages.po @@ -177,6 +177,10 @@ msgid "Rename" msgstr "Döp om " +msgid "rename" +msgstr "Döp om " + + msgid "Add" msgstr "Lägg till" diff --git a/locale/zh_CN/LC_MESSAGES/messages.po b/locale/zh_CN/LC_MESSAGES/messages.po index 276586d..68068ee 100644 --- a/locale/zh_CN/LC_MESSAGES/messages.po +++ b/locale/zh_CN/LC_MESSAGES/messages.po @@ -245,6 +245,10 @@ msgid "Rename" msgstr "" +msgid "rename" +msgstr "žüÃû" + + msgid "Add" msgstr "" diff --git a/locale/zh_TW/LC_MESSAGES/messages.po b/locale/zh_TW/LC_MESSAGES/messages.po index 5e5860a..8f34f99 100644 --- a/locale/zh_TW/LC_MESSAGES/messages.po +++ b/locale/zh_TW/LC_MESSAGES/messages.po @@ -197,6 +197,10 @@ msgid "Rename" msgstr "更名" +msgid "rename" +msgstr "曎名" + + msgid "Add" msgstr "新增" diff --git a/templates/posixGroup.xml b/templates/posixGroup.xml index b4c3ab8..9e4a0f3 100644 --- a/templates/posixGroup.xml +++ b/templates/posixGroup.xml @@ -26,14 +26,11 @@ 1 =php.GetNextNumber(/,gid) 1 + - 10 Users - - side - - + =php.MultiList(/,(objectClass=posixAccount),uid,%cn% (%uid|-4%)) 0 3 1 diff --git a/templates/sambaGroupMapping.xml b/templates/sambaGroupMapping.xml index 2694d7c..a3cf904 100644 --- a/templates/sambaGroupMapping.xml +++ b/templates/sambaGroupMapping.xml @@ -30,15 +30,15 @@ Automatically determined 3 1 - =php.GetNextNumber(/,gid) + =php.GetNextNumber(/,gid,true,(&(objectClass=sambaDomain)(sambaDomainName=mysambadomain)) 1 Samba SID sidsuffix + =php.GetNextNumber(/,gid,false,(&(objectClass=sambaDomain)(sambaDomainName=mysambadomain)),*2;+1000) side - 4 1 @@ -56,12 +56,8 @@ Well-known Group - 10 Users - - side - - + =php.MultiList(/,(objectClass=posixAccount),uid,%cn% %uid|-4/U%,memberUid,dmdName=users:::dc=localdomain,root => cn=root; nobody => cn=nobody,cn,10,(&(objectClass=posixAccount)(gidNumber=29999)),uid) 0 10 1 diff --git a/templates/sambaSamAccount.xml b/templates/sambaSamAccount.xml index bac3ef5..9ca8bcc 100644 --- a/templates/sambaSamAccount.xml +++ b/templates/sambaSamAccount.xml @@ -82,7 +82,6 @@ ssha images/lock.png - autoFill:sambaLMPassword,%userPassword% autoFill:sambaNTPassword,%userPassword% 7 1 @@ -90,16 +89,9 @@ password 1 - - LM Password - 8 - 1 - =php.SambaPassword(LM,%sambaLMPassword%) - password - NT Password - 9 + 8 1 =php.SambaPassword(NT,%sambaNTPassword%) 1 @@ -108,14 +100,14 @@ Login shell images/terminal.png - 10 + 9 1 =php.PickList(/,(objectClass=posixAccount),loginShell,%loginShell%) GID Number autoFill:homeDirectory,/home/users/%gidNumber|0-0/T%/%uid|3-% - 11 + 10 1 =php.PickList(/,(objectClass=posixGroup),gidNumber,%cn%) @@ -126,7 +118,7 @@ side - 13 + 11 1 =php.Join(-,(%sambaPrimaryGroupSID%,%sidpgsuffix%)) 1 @@ -134,7 +126,7 @@ Home directory - 14 + 12 1 diff --git a/templates/template.dtd b/templates/template.dtd index 9a1a186..cbf0df1 100644 --- a/templates/template.dtd +++ b/templates/template.dtd @@ -14,6 +14,7 @@ @@ -46,6 +47,8 @@ + + diff --git a/templates/template_header.php b/templates/template_header.php index cd2c8c8..5df7453 100644 --- a/templates/template_header.php +++ b/templates/template_header.php @@ -1,5 +1,5 @@ server_id,$encoded_dn); $export_href_base = sprintf('export_form.php?%s&scope=%s',$url_base,'base'); $export_href_sub = sprintf('export_form.php?%s&scope=%s',$url_base,'sub'); -$refresh_href = sprintf('template_engine.php?%s&random=%s',$url_base,$random_junk); +$refresh_href = sprintf('template_engine.php?%s&random=%s',$url_base,random_junk()); $copy_href = sprintf('copy_form.php?%s',$url_base); $intattr_href = sprintf('template_engine.php?%s&show_internal_attrs=true',$url_base); $delete_href = sprintf('delete_form.php?%s',$url_base); @@ -130,7 +128,7 @@ if ($dn) { $schema_href = sprintf('schema.php?server_id=%s&view=attributes&viewvalue=%s', $ldapserver->server_id,real_attr_name($attr)); - printf('%s', + printf('%s', $attr,$schema_href,htmlspecialchars($attr)); echo ''; diff --git a/tools/po/make_po_ca b/tools/po/make_po_ca index 9c6be16..f4de496 100755 --- a/tools/po/make_po_ca +++ b/tools/po/make_po_ca @@ -6,4 +6,4 @@ # This script is run after make_po to merge the existing German translations to messages.po ./make_po -msgmerge -v ../locale/ca_ES/LC_MESSAGES/messages.po messages.po -o messages.po +msgmerge -v ../../locale/ca_ES/LC_MESSAGES/messages.po messages.po -o messages.po diff --git a/tools/po/make_po_de b/tools/po/make_po_de index 45b81b9..439c615 100755 --- a/tools/po/make_po_de +++ b/tools/po/make_po_de @@ -6,4 +6,4 @@ # This script is run after make_po to merge the existing German translations to messages.po ./make_po -msgmerge -v ../locale/de_DE/LC_MESSAGES/messages.po messages.po -o messages.po +msgmerge -v ../../locale/de_DE/LC_MESSAGES/messages.po messages.po -o messages.po diff --git a/tools/po/make_po_es b/tools/po/make_po_es index d64f403..fe439c9 100755 --- a/tools/po/make_po_es +++ b/tools/po/make_po_es @@ -6,4 +6,4 @@ # This script is run to update the existing Spanish translations in messages.po ./make_po -msgmerge -v ../locale/es_ES/LC_MESSAGES/messages.po messages.po -o messages.po +msgmerge -v ../../locale/es_ES/LC_MESSAGES/messages.po messages.po -o messages.po diff --git a/tools/po/make_po_fr b/tools/po/make_po_fr index b992a09..c938788 100755 --- a/tools/po/make_po_fr +++ b/tools/po/make_po_fr @@ -6,4 +6,4 @@ # This script is run after make_po to merge the existing German translations to messages.po ./make_po -msgmerge -v ../locale/fr_FR/LC_MESSAGES/messages.po messages.po -o messages.po +msgmerge -v ../../locale/fr_FR/LC_MESSAGES/messages.po messages.po -o messages.po diff --git a/tools/po/make_po_hu b/tools/po/make_po_hu index c2e3f97..eb0c3e4 100755 --- a/tools/po/make_po_hu +++ b/tools/po/make_po_hu @@ -6,4 +6,4 @@ # This script is run after make_po to merge the existing Hungarian translations to messages.po ./make_po -msgmerge -v ../locale/hu_HU/LC_MESSAGES/messages.po messages.po -o messages.po +msgmerge -v ../../locale/hu_HU/LC_MESSAGES/messages.po messages.po -o messages.po diff --git a/tools/po/make_po_it b/tools/po/make_po_it index 33b672e..600cc2b 100755 --- a/tools/po/make_po_it +++ b/tools/po/make_po_it @@ -6,4 +6,4 @@ # This script is run after make_po to merge the existing German translations to messages.po ./make_po -msgmerge -v ../locale/it_IT/LC_MESSAGES/messages.po messages.po -o messages.po +msgmerge -v ../../locale/it_IT/LC_MESSAGES/messages.po messages.po -o messages.po diff --git a/tools/po/make_po_ja b/tools/po/make_po_ja index 46efa42..b113c96 100755 --- a/tools/po/make_po_ja +++ b/tools/po/make_po_ja @@ -6,4 +6,4 @@ # This script is run after make_po to merge the existing Japanese translations to messages.po ./make_po -msgmerge -v ../locale/ja_JP/LC_MESSAGES/messages.po messages.po -o messages.po +msgmerge -v ../../locale/ja_JP/LC_MESSAGES/messages.po messages.po -o messages.po