schooltool.ldap-1.0.2/ 0000755 0001750 0001750 00000000000 12275203725 015753 5 ustar menesis menesis 0000000 0000000 schooltool.ldap-1.0.2/base.cfg 0000644 0001750 0001750 00000001623 12252370732 017346 0 ustar menesis menesis 0000000 0000000 [buildout]
extends = http://ftp.schooltool.org/schooltool/trunk/versions.cfg
versions = versions
newest = false
find-links =
http://ftp.schooltool.org/schooltool/trunk/
http://ftp.schooltool.org/schooltool/trunk/dev/
parts = package test scripts ctags omelette
[package]
recipe = zc.recipe.egg:eggs
unzip = true
# set eggs to package name in buildout.cfg
eggs =
[scripts]
recipe = zc.recipe.egg:scripts
unzip = true
eggs =
${package:eggs}
schooltool
schooltool.devtools
scripts = # schooltool.devtools:
i18nextract
# schooltool:
make-schooltool-instance
start-schooltool-instance
interpreter = python
[test]
recipe = zc.recipe.testrunner
eggs = ${package:eggs}
defaults = ['-v', '--auto-color']
[ctags]
recipe = z3c.recipe.tag:tags
eggs = ${test:eggs}
[omelette]
recipe = collective.recipe.omelette
eggs = ${test:eggs}
ignores = roman zope.ucol site
schooltool.ldap-1.0.2/buildout.cfg 0000644 0001750 0001750 00000000233 12275203724 020260 0 ustar menesis menesis 0000000 0000000 [buildout]
extends = base.cfg
develop = .
[versions]
# Unset versions of packages you want to develop
schooltool.ldap =
[package]
eggs = schooltool.ldap
schooltool.ldap-1.0.2/develop.cfg 0000644 0001750 0001750 00000000176 12232251015 020062 0 ustar menesis menesis 0000000 0000000 [buildout]
extends = deploy.cfg
parts += coverage
[coverage]
recipe = zc.recipe.egg:scripts
unzip = true
eggs = z3c.coverage
schooltool.ldap-1.0.2/src/ 0000755 0001750 0001750 00000000000 12275203725 016542 5 ustar menesis menesis 0000000 0000000 schooltool.ldap-1.0.2/src/schooltool.ldap.egg-info/ 0000755 0001750 0001750 00000000000 12275203725 023340 5 ustar menesis menesis 0000000 0000000 schooltool.ldap-1.0.2/src/schooltool.ldap.egg-info/SOURCES.txt 0000644 0001750 0001750 00000002555 12275203725 025233 0 ustar menesis menesis 0000000 0000000 CHANGES.txt
GPL.txt
MANIFEST.in
Makefile
README.txt
base.cfg
bootstrap.py
buildout.cfg
deploy.cfg
develop.cfg
setup.py
version.txt.in
src/schooltool/__init__.py
src/schooltool.ldap.egg-info/PKG-INFO
src/schooltool.ldap.egg-info/SOURCES.txt
src/schooltool.ldap.egg-info/dependency_links.txt
src/schooltool.ldap.egg-info/entry_points.txt
src/schooltool.ldap.egg-info/namespace_packages.txt
src/schooltool.ldap.egg-info/not-zip-safe
src/schooltool.ldap.egg-info/requires.txt
src/schooltool.ldap.egg-info/top_level.txt
src/schooltool/ldap/__init__.py
src/schooltool/ldap/component.xml
src/schooltool/ldap/config.py
src/schooltool/ldap/configure.zcml
src/schooltool/ldap/i18n.zcml
src/schooltool/ldap/interfaces.py
src/schooltool/ldap/plugin.zcml
src/schooltool/ldap/security.py
src/schooltool/ldap/security.txt
src/schooltool/ldap/translations.zcml
src/schooltool/ldap/browser/__init__.py
src/schooltool/ldap/browser/configure.zcml
src/schooltool/ldap/browser/settings.py
src/schooltool/ldap/browser/templates/ldap.pt
src/schooltool/ldap/browser/templates/ldap_overview.pt
src/schooltool/ldap/locales/nl.po
src/schooltool/ldap/locales/schooltool.ldap.pot
src/schooltool/ldap/locales/si.po
src/schooltool/ldap/locales/nl/LC_MESSAGES/schooltool.ldap.mo
src/schooltool/ldap/locales/si/LC_MESSAGES/schooltool.ldap.mo
src/schooltool/ldap/tests/__init__.py
src/schooltool/ldap/tests/test_security.py schooltool.ldap-1.0.2/src/schooltool.ldap.egg-info/top_level.txt 0000644 0001750 0001750 00000000013 12275203725 026064 0 ustar menesis menesis 0000000 0000000 schooltool
schooltool.ldap-1.0.2/src/schooltool.ldap.egg-info/entry_points.txt 0000644 0001750 0001750 00000000206 12275203725 026634 0 ustar menesis menesis 0000000 0000000
[schooltool.plugin_configuration]
schooltool.ldap = schooltool.ldap
[z3c.autoinclude.plugin]
target = schooltool
schooltool.ldap-1.0.2/src/schooltool.ldap.egg-info/PKG-INFO 0000644 0001750 0001750 00000003774 12275203725 024450 0 ustar menesis menesis 0000000 0000000 Metadata-Version: 1.1
Name: schooltool.ldap
Version: 1.0.2
Summary: LDAP authentication plugin for SchoolTool
Home-page: http://www.schooltool.org
Author: SchoolTool Developers
Author-email: schooltool-developers@lists.launchpad.net
License: GPL
Description: Allows users to authenticate to SchoolTool using LDAP.
Deployment
----------
Here is what it takes to get this plugin deployed:
1) schooltool.ldap needs to be in the path (whether as an egg or as
part of a sandbox)
2) you can configure ldap before first start by adding to schooltool.conf::
%import schooltool.ldap
uri ldap://localhost:389
3) or through the web from the Server tab.
See http://book.schooltool.org/ldap.html for more information
=======
CHANGES
=======
1.0.2 (2014-02-07)
------------------
- Support non-ascii characters in data coming from LDAP (https://launchpad.net/bugs/1277518)
1.0.1 (2013-12-12)
------------------
- Fix failure to start when example /etc/ldap.conf exists (https://launchpad.net/bugs/1251181)
- Add Dutch and Sinhalese translations.
1.0 (2012-09-21)
----------------
First release.
Platform: any
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Web Environment
Classifier: Intended Audience :: End Users/Desktop
Classifier: License :: OSI Approved :: GNU General Public License (GPL)
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 2.5
Classifier: Programming Language :: Python :: 2.6
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Zope
Classifier: Topic :: Education
schooltool.ldap-1.0.2/src/schooltool.ldap.egg-info/requires.txt 0000644 0001750 0001750 00000000137 12275203725 025741 0 ustar menesis menesis 0000000 0000000 schooltool
python-ldap
zope.authentication
zope.component
zope.session
zope.security
setuptools schooltool.ldap-1.0.2/src/schooltool.ldap.egg-info/dependency_links.txt 0000644 0001750 0001750 00000000001 12275203725 027406 0 ustar menesis menesis 0000000 0000000
schooltool.ldap-1.0.2/src/schooltool.ldap.egg-info/namespace_packages.txt 0000644 0001750 0001750 00000000013 12275203725 027665 0 ustar menesis menesis 0000000 0000000 schooltool
schooltool.ldap-1.0.2/src/schooltool.ldap.egg-info/not-zip-safe 0000644 0001750 0001750 00000000001 12232251016 025553 0 ustar menesis menesis 0000000 0000000
schooltool.ldap-1.0.2/src/schooltool/ 0000755 0001750 0001750 00000000000 12275203725 020727 5 ustar menesis menesis 0000000 0000000 schooltool.ldap-1.0.2/src/schooltool/__init__.py 0000644 0001750 0001750 00000000070 12232251015 023021 0 ustar menesis menesis 0000000 0000000 __import__('pkg_resources').declare_namespace(__name__)
schooltool.ldap-1.0.2/src/schooltool/ldap/ 0000755 0001750 0001750 00000000000 12275203725 021647 5 ustar menesis menesis 0000000 0000000 schooltool.ldap-1.0.2/src/schooltool/ldap/security.txt 0000644 0001750 0001750 00000000121 12232251015 024235 0 ustar menesis menesis 0000000 0000000 Unit tests for schooltool.ldap.security
>>> import schooltool.ldap.security
schooltool.ldap-1.0.2/src/schooltool/ldap/config.py 0000644 0001750 0001750 00000027404 12252370743 023475 0 ustar menesis menesis 0000000 0000000 #
# SchoolTool - common information systems platform for school administration
# Copyright (c) 2012 Shuttleworth Foundation
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
"""
LDAP authentication plugin configuration.
"""
import os
import re
import ldap
from persistent import Persistent
from zope.annotation.interfaces import IAnnotations
from zope.component import provideUtility, adapter, getUtility
from zope.interface import implements, implementer
from schooltool.app.interfaces import ISchoolToolApplication
from schooltool.ldap.interfaces import ILDAPConfig, ILDAPPersonsConfig
from schooltool.ldap.interfaces import ILDAPAutoConfig
ST_APP_LDAP_KEY = 'schooltool.ldap.configuration'
LDAP_SCOPES = {
'base': ldap.SCOPE_BASE, # scope of the entry
'one': ldap.SCOPE_ONELEVEL, # search directly into entry
'sub': ldap.SCOPE_SUBTREE, # search whole subtree
}
def cleanup_ldap_filter(filter):
if not filter:
return filter
filter = filter.strip()
if not filter.startswith('('):
filter = '(%s)' % filter
return filter
def filter_op_filter(filter, other, op='&'):
if not filter:
return cleanup_ldap_filter(other)
filter = filter.strip()
if filter.startswith('('):
template = '%s%s(%s)'
else:
template = '%s(%s)(%s)'
result = template % (
op, filter, ldap.filter.filter_format('%s=%s', other))
return cleanup_ldap_filter(result)
def decode_ldap_query(query, lenient=False):
"""Decode params from ldap.conf query."""
# RFC2307bis naming contexts
# Syntax: base?scope?filter
# where scope is {base,one,sub}
base = scope = filter = None
query = [s.strip() for s in query.split('?')]
if query:
base = query.pop(0)
if query:
token = query.pop(0).lower()
if token not in LDAP_SCOPES and not lenient:
raise ValueError(query, 'expected %r got %r' % (
tuple(LDAP_SCOPES), token))
scope = token
if query:
filter = '?'.join(query)
return base, scope, filter
class LDAPConfig(Persistent):
implements(ILDAPConfig)
uri = 'ldap://127.0.0.1:389'
timeout = 10
bind_dn = None
bind_password = None
def copy(self):
copy = self.__class__()
copy.uri = self.uri
copy.timeout = self.timeout
copy.bind_dn = self.bind_dn
copy.bind_password = self.bind_password
return copy
class LDAPPersonsConfig(LDAPConfig):
implements(ILDAPPersonsConfig)
queries = u''
groupQueries = u''
posixGroups = u''
def copy(self):
copy = LDAPConfig.copy(self)
copy.queries = self.queries
copy.groupQueries = self.groupQueries
copy.posixGroups = self.posixGroups
return copy
class LDAPPersonsAutoConfig(LDAPPersonsConfig):
implements(ILDAPAutoConfig)
enable_ttw = True
def iter_ldap_config(config_file):
if isinstance(config_file, str):
config_file = open(config_file)
text = config_file.read()
token_re = re.compile('\s')
for line in text.splitlines():
line = line.strip()
if not line or line.startswith('#'):
continue
tokens = [t.strip() for t in token_re.split(line, 1)]
if len(tokens) == 1:
yield tokens[0], None
else:
yield tokens[0], tokens[1]
class LDAPConfigParser(object):
config = None
def __init__(self):
self.clear()
def clear(self):
self.config = LDAPPersonsConfig()
self.config.uri = None
def parse(self, config_file, **defaults):
cache = dict(defaults)
entries = list(iter_ldap_config(config_file))
for token, value in entries:
method = getattr(self, 'pre_%s' % token.lower(), None)
if method is not None:
method(value, cache)
for token, value in entries:
method = getattr(self, 'on_%s' % token.lower(), None)
if method is not None:
method(value, cache)
self.after_parse(config_file, cache)
def after_parse(self, config_file, cache):
self.set_default_uri(cache)
self.append_pam_query(cache)
self.set_fallback_query(cache)
def set_default_uri(self, cache):
if self.config.uri is None:
self.config.uri = 'ldap://%(host)s:%(port)s' % {
'host': cache.get('host', '127.0.0.1'),
'port': cache.get('port', '389'),
}
def append_pam_query(self, cache):
if ('base' in cache and
('pam_filter' in cache or
'pam_login_attribute' in cache)):
pam_filter = cleanup_ldap_filter(
cache.get('pam_filter', 'objectClass=posixAccount'))
pam_login_attr = cache.get('pam_login_attribute', 'uid')
query = '%s %s?%s?%s' % (
pam_login_attr,
cache['base'], cache.get('scope', 'sub'), pam_filter
)
self.config.queries = ('%s\n%s' % (self.config.queries, query)).strip()
def set_fallback_query(self, cache):
if not self.config.queries:
if ('fallback_login_attr' in cache and
'fallback_login_filter' in cache and
'base' in cache):
self.config.queries = '%s %s?%s?%s' % (
cache['fallback_login_attr'],
cache['base'],
cache.get('scope', 'sub'),
cleanup_ldap_filter(cache['fallback_login_filter'])
)
def pre_host(self, value, cache):
cache['host'] = value
def pre_port(self, value, cache):
cache['port'] = value
def pre_base(self, value, cache):
cache['base'] = value
def on_uri(self, value, cache):
self.config.uri = value
def on_binddn(self, value, cache):
self.config.bind_dn = value
def on_bindpw(self, value, cache):
self.config.bind_password = value
def pre_scope(self, value, cache):
value = value.lower()
if value in LDAP_SCOPES:
cache['scope'] = value
def on_timelimit(self, value, cache):
pass # not implemented
def on_bind_timelimit(self, value, cache):
pass # not implemented
def pre_pam_filter(self, value, cache):
#A filter to AND with uid=%s
#pam_filter objectclass=account
cache['pam_filter'] = value
def pre_pam_login_attribute(self, value, cache):
# The user ID attribute (defaults to uid)
#pam_login_attribute uid
cache['pam_login_attribute'] = value
def on_pam_password(self, value, cache):
# Password type.
# XXX: we support only md5 (I think)
pass # not implemented
def on_pam_groupdn(self, value, cache):
# Group to enforce membership of
#pam_groupdn cn=PAM,ou=Groups,dc=example,dc=com
pass # not implemented
def on_nss_base_passwd(self, value, cache):
# account query
base, scope, ldap_filter = decode_ldap_query(value, lenient=True)
scope = scope.lower() if scope is not None else ''
if scope not in LDAP_SCOPES:
scope = cache.get('scope', 'sub')
attr = cache.get('fallback_login_attr', 'uid')
query = '%s %s' % (
attr, '?'.join(filter(None, (base, scope, ldap_filter))))
self.config.queries = ('%s\n%s' % (self.config.queries, query)).strip()
def on_nss_base_group(self, value, cache):
base, scope, ldap_filter = decode_ldap_query(value, lenient=True)
scope = scope.lower() if scope is not None else ''
if scope not in LDAP_SCOPES:
scope = cache.get('scope', 'sub')
if ldap_filter:
ldap_filter = cleanup_ldap_filter(ldap_filter)
query = '?'.join(filter(None, (base, scope, ldap_filter)))
self.config.groupQueries = ('%s\n%s' % (self.config.groupQueries, query)).strip()
AUTODETECT_FROM = '/etc/ldap.conf'
FALLBACK_LOGIN_ATTR = 'uid'
FALLBACK_LOGIN_FILTER = 'objectClass=posixAccount'
def handle_configuration(options, context):
parser = LDAPConfigParser()
context.provideFeature('ldap_authentication')
if getattr(options.config, 'ldap_authentication', None) is None:
if (AUTODETECT_FROM and
os.path.isfile(AUTODETECT_FROM)):
parser.parse(
AUTODETECT_FROM,
fallback_login_attr=FALLBACK_LOGIN_ATTR,
fallback_login_filter=FALLBACK_LOGIN_FILTER)
else:
config = options.config.ldap_authentication
if (config.autodetect_from and
os.path.isfile(config.autodetect_from)):
parser.parse(
config.autodetect_from,
fallback_login_attr=config.default_login_attr,
fallback_login_filter=config.default_login_filter)
if config.uri:
parser.config.uri = config.uri
if config.query_users:
queries = [
entry if len(entry.split()) > 1 else '%s %s' % (
config.default_login_attr, entry)
for entry in config.query_users
if entry.strip()]
parser.config.queries = '\n'.join(queries)
if config.query_groups:
parser.config.groupQueries = '\n'.join(filter(None, config.query_groups))
if config.bind_dn:
parser.config.bind_dn = config.bind_dn
parser.config.bind_password = ''
if config.bind_password:
parser.config.bind_password = config.bind_password
if config.bind_group:
groups = []
for entry in config.bind_group:
if not entry.strip():
continue
entry = entry.split()
if len(entry) == 2:
st_year = ''
st_group, posix_id = entry
groups.append((st_year, st_group, posix_id))
elif len(entry) == 3:
st_year, st_group, posix_id = entry
groups.append((st_year, st_group, posix_id))
parser.config.posixGroups = '\n'.join([', '.join(e) for e in groups])
parser.config.timeout = int(config.timeout)
provideUtility(parser.config, ILDAPConfig)
context.provideFeature('authentication')
@adapter(ISchoolToolApplication)
@implementer(ILDAPConfig)
def getAppLDAPConfig(app):
annotations = IAnnotations(app)
config = annotations.get(ST_APP_LDAP_KEY, None)
if config is None:
template = getUtility(ILDAPConfig)
config = template.copy()
return config
@adapter(ISchoolToolApplication)
@implementer(ILDAPPersonsConfig)
def getAppLDAPPersonsConfig(app):
config = getAppLDAPConfig(app)
if config is None:
return None
return ILDAPPersonsConfig(config, None)
def get_configuration():
return ("""
Configuration for LDAP authentication plugin.
<ldap_authentication>
allow_web_config no
uri ldap://127.0.0.1:389
</ldap_authentication>
""", handle_configuration)
schooltool.ldap-1.0.2/src/schooltool/ldap/__init__.py 0000644 0001750 0001750 00000002321 12232251015 023742 0 ustar menesis menesis 0000000 0000000 #
# SchoolTool - common information systems platform for school administration
# Copyright (c) 2005 Shuttleworth Foundation
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
"""
LDAP authentication plugin.
"""
from __future__ import absolute_import
from zope.i18nmessageid import Message, MessageFactory
SchoolToolLDAPMessage = MessageFactory("schooltool.ldap")
from schooltool.ldap import (
config,
interfaces,
security,
)
from schooltool.ldap.config import get_configuration, handle_configuration
from schooltool.ldap.security import LDAPAuthenticationPlugin
schooltool.ldap-1.0.2/src/schooltool/ldap/component.xml 0000644 0001750 0001750 00000005402 12232251015 024360 0 ustar menesis menesis 0000000 0000000
Allow changing configuration through the web.
Try auto detecting LDAP settings from here.
Default login attribute for LDAP user entries.
Default login filter to get LDAP user entries.
The uri of the LDAP server.
Examples:
uri ldap://127.0.0.1:389
uri ldaps://127.0.0.1
uri ldapi://%2fvar%2frun%2fldapi_sock/
Timeout in seconds. Negative timeout means no timeout.
One or more queries to obtain LDAP users, in form of
"login_attribute base?scope?filter" (scope is base/one/sub).
Examples:
query_users uid dc=localhost?sub?(objectClass=inetOrgPerson)
query_users cn ou=Users,dc=school,dc=example,dc=com?one?(objectClass=person)
One or more queries to obtain LDAP groups, in form of
"login_attribute base?scope?filter" (scope is base/one/sub).
Examples:
query_groups dc=localhost?sub?(objectClass=posixGroup)
query_groups ou=Groups,dc=school,dc=example,dc=com?one
POSIX group ids to bind with schooltool groups
Format (year) group posix_id
Examples:
bind_group teachers 7001
bind_group 2011-2012 students 6001
Bind DN.
Bind password.
schooltool.ldap-1.0.2/src/schooltool/ldap/i18n.zcml 0000644 0001750 0001750 00000000356 12232251015 023305 0 ustar menesis menesis 0000000 0000000
schooltool.ldap-1.0.2/src/schooltool/ldap/plugin.zcml 0000644 0001750 0001750 00000000331 12232251015 024015 0 ustar menesis menesis 0000000 0000000
schooltool.ldap-1.0.2/src/schooltool/ldap/configure.zcml 0000644 0001750 0001750 00000003127 12232251015 024506 0 ustar menesis menesis 0000000 0000000
schooltool.ldap-1.0.2/src/schooltool/ldap/locales/ 0000755 0001750 0001750 00000000000 12275203725 023271 5 ustar menesis menesis 0000000 0000000 schooltool.ldap-1.0.2/src/schooltool/ldap/locales/si.po 0000644 0001750 0001750 00000020604 12252370015 024236 0 ustar menesis menesis 0000000 0000000 # Sinhalese translation for schooltool.ldap
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
# This file is distributed under the same license as the schooltool.ldap package.
# FIRST AUTHOR , 2013.
#
msgid ""
msgstr ""
"Project-Id-Version: schooltool.ldap\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2012-09-21 14:55+0300\n"
"PO-Revision-Date: 2013-05-31 17:29+0000\n"
"Last-Translator: Thilini Lakmini \n"
"Language-Team: Sinhalese \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-06-01 05:41+0000\n"
"X-Generator: Launchpad (build 16660)\n"
#: /src/schooltool/ldap/browser/configure.zcml:10
#: /src/schooltool/ldap/browser/configure.zcml:23
msgid "LDAP Configuration"
msgstr "LDAP වින්යාසය"
#: /src/schooltool/ldap/browser/settings.py:42
msgid "LDAP settings"
msgstr "LDAP සිටුවම්"
#: /src/schooltool/ldap/browser/settings.py:55
msgid "Apply"
msgstr "යොදන්න"
#: /src/schooltool/ldap/browser/settings.py:66
msgid "Reset to defaults"
msgstr "පෙරනිමි අගයන්ට නැවත සකසන්න"
#: /src/schooltool/ldap/browser/settings.py:74
msgid "Cancel"
msgstr "අහෝසි කරන්න"
#: /src/schooltool/ldap/browser/settings.py:99
#: /src/schooltool/ldap/browser/settings.py:102
msgid "Not configured"
msgstr "වින්යාස නොකළ"
#: /src/schooltool/ldap/browser/settings.py:106
msgid "Bad configuration"
msgstr "නුසුදුසු වින්යාසයකි"
#: /src/schooltool/ldap/browser/settings.py:108
msgid "Bad bind DN or password"
msgstr "නුසුදුසු ලෙස බැඳී DN හෝ මුරපදයකි"
#: /src/schooltool/ldap/browser/settings.py:110
msgid "Down"
msgstr "පහලට"
#: /src/schooltool/ldap/browser/settings.py:113
msgid "Active"
msgstr "සක්රීය කරන්න"
#: /src/schooltool/ldap/browser/settings.py:124
msgid "No client DN queries configured, LDAP SSO disabled."
msgstr "වින්යාස කළ සේවා ලාභී DN විමසීම් නැත, LDAP SSO අක්රීය කර ඇත"
#: /src/schooltool/ldap/browser/settings.py:133
msgid "Bad DN query(-ies)"
msgstr "නුසුදුසු DN විමසීමක්"
#: /src/schooltool/ldap/browser/settings.py:140
msgid "${amount} users in LDAP."
msgstr "LDAP හි පරිශීලකයන් $(ප්රමාණය) ක් සිටියි"
#: /src/schooltool/ldap/browser/templates/ldap.pt:11
#: /src/schooltool/ldap/browser/templates/ldap_overview.pt:31
msgid "Server status"
msgstr "සේවාදායක තත්වය"
#: /src/schooltool/ldap/browser/templates/ldap.pt:15
#: /src/schooltool/ldap/browser/templates/ldap_overview.pt:35
msgid "Users"
msgstr "පරිශීලකයන්"
#: /src/schooltool/ldap/browser/templates/ldap.pt:22
msgid "Done"
msgstr "අවසන්"
#: /src/schooltool/ldap/browser/templates/ldap_overview.pt:3
msgid "LDAP single sign on"
msgstr "LDAP තනි පිවිසීමක්"
#: /src/schooltool/ldap/browser/templates/ldap_overview.pt:7
msgid "Change LDAP settings"
msgstr "LDAP සිටුවම් වෙනස් කරන්න"
#: /src/schooltool/ldap/browser/templates/ldap_overview.pt:10
msgid "Edit"
msgstr "සංස්කරණය කරන්න"
#: /src/schooltool/ldap/browser/templates/ldap_overview.pt:17
msgid "LDAP support is installed but not configured."
msgstr "LDAP සහය ස්ථාපනය කර ඇති නමුත් වින්යාස කර නැත"
#: /src/schooltool/ldap/browser/templates/ldap_overview.pt:27
msgid "URI"
msgstr "URI"
#: /src/schooltool/ldap/interfaces.py:32
#: /src/schooltool/ldap/interfaces.py:104
msgid "LDAP server URI"
msgstr "LDAP සේවාදායක URI"
#: /src/schooltool/ldap/interfaces.py:33
#: /src/schooltool/ldap/interfaces.py:105
msgid "Example: ldap://localhost:389"
msgstr "උදාහරණ: ldap://localhost:389"
#: /src/schooltool/ldap/interfaces.py:38
msgid "Bind DN"
msgstr "සුවිශේෂී නාමය(DN) බඳින්න"
#: /src/schooltool/ldap/interfaces.py:39
msgid "LDAP distinguished name to bind for searching users to authenticate."
msgstr ""
"අනන්යතාවය තහවුරු කරගැනීමට පරිශීලකයන් සෙවීම සඳහා බැඳීමට LDAP සුවිශේෂී නාමය"
#: /src/schooltool/ldap/interfaces.py:47
msgid "Bind password"
msgstr "මුරපදය බඳින්න"
#: /src/schooltool/ldap/interfaces.py:48
msgid "Bind DN password."
msgstr "DN මුරපදය බඳින්න"
#: /src/schooltool/ldap/interfaces.py:53
msgid "Timeout (in seconds)."
msgstr "සංක්රාන්ති කාලය(තත්පර වලින්)"
#: /src/schooltool/ldap/interfaces.py:61
#: /src/schooltool/ldap/interfaces.py:138
msgid "User DN queries"
msgstr "පරිශීලක DN විමසීම්"
#: /src/schooltool/ldap/interfaces.py:62
msgid ""
"One or more queries to obtain LDAP users, in form of \"login_attribute "
"base?scope?filter\" (scope is base/one/sub). Examples: \"uid "
"ou=Users,dc=localhost?sub?(objectClass=inetOrgPerson)\", \"cn "
"ou=Users,dc=school,dc=example,dc=com?one?(objectClass=person)\""
msgstr ""
"LDAP පරිශීලකයන් ග්රහණය කරගැනීම සඳහා \"login_attribute base?scope?filter\" "
"(scope is base/one/sub). Examples: \"uid "
"ou=Users,dc=localhost?sub?(objectClass=inetOrgPerson)\", \"cn "
"ou=Users,dc=school,dc=example,dc=com?one?(objectClass=person)\" ආකාරයේ "
"විමසීමක් හෝ විමසීම් කිහිපයක්"
#: /src/schooltool/ldap/interfaces.py:72
#: /src/schooltool/ldap/interfaces.py:145
msgid "Group DN queries"
msgstr "සමූහ DN විමසීම්"
#: /src/schooltool/ldap/interfaces.py:73
msgid ""
"One or more queries to obtain LDAP groups, in form of \"login_attribute "
"base?scope?filter\" (scope is base/one/sub). Examples: "
"\"dc=localhost?sub?(objectClass=posixGroup)\", "
"\"ou=Groups,dc=school,dc=example,dc=com?one\""
msgstr ""
"LDAP කණ්ඩායම් ග්රහණය කරගැනීම සඳහා \"login_attribute base?scope?filter\" "
"(scope is base/one/sub). උදාහරණ: "
"\"dc=localhost?sub?(objectClass=posixGroup)\", "
"\"ou=Groups,dc=school,dc=example,dc=com?one\" ආකාරයේ විමසීමක් හෝ විමසීම් "
"කිහිපයක්"
#: /src/schooltool/ldap/interfaces.py:83
msgid "POSIX group counterparts in SchoolTool."
msgstr "SchoolTool හි POSIX කණ්ඩායමේ ප්රතිපූර්ණ"
#: /src/schooltool/ldap/interfaces.py:84
msgid ""
"\"School year\" (optional) \"Group ID\" \"POSIX group ID\". Examples: \"2011-"
"2012, teachers, 6001\", \"2012-2013, teachers, 7001\", \", students, 6000\""
msgstr ""
"\"පාසල් වර්ෂය\" (වෛකල්පිත) \"කණ්ඩායමේ හදුනා ගැනීමේ යෙදුම \" \"POSIX කණ්ඩායමේ "
"හදුනා ගැනීමේ යෙදුම\". උදාහරණ : \"2011-2012, ගුරුවරුන්, 6001\", \"2012-2013, "
"ගුරුවරුන්, 7001\", \", සිසුන්, 6000\""
#: /src/schooltool/ldap/interfaces.py:97
msgid "Enable TTW editing"
msgstr "TTV සංස්කරණය සදහා ඉඩ සලසන්න"
#: /src/schooltool/ldap/interfaces.py:110
msgid "Configured"
msgstr "වින්යාස කල"
#: /src/schooltool/ldap/interfaces.py:111
msgid "Is this client properly configured."
msgstr "මෙම සේවාලාභියා නිසිලෙස වින්යාස කරන ලද්දෙක්ද"
#: /src/schooltool/ldap/interfaces.py:140
msgid "login_attribute, query"
msgstr "ලොගනය වීමේ ගුණාංග, විමසීම්"
#: /src/schooltool/ldap/interfaces.py:150
msgid "POSIX group counterparts."
msgstr "POSIX කණ්ඩායමේ ප්රතිපූර්ණ"
#: /src/schooltool/ldap/interfaces.py:152
msgid "Year ID, group ID, posix ID"
msgstr ""
"වර්ෂය හඳුනා ගැනීමේ යෙදුම, කණ්ඩායම හඳුනා ගැනීමේ යෙදුම, posix හඳුනා ගැනීමේ "
"යෙදුම"
schooltool.ldap-1.0.2/src/schooltool/ldap/locales/si/ 0000755 0001750 0001750 00000000000 12275203725 023704 5 ustar menesis menesis 0000000 0000000 schooltool.ldap-1.0.2/src/schooltool/ldap/locales/si/LC_MESSAGES/ 0000755 0001750 0001750 00000000000 12275203725 025471 5 ustar menesis menesis 0000000 0000000 schooltool.ldap-1.0.2/src/schooltool/ldap/locales/si/LC_MESSAGES/schooltool.ldap.mo 0000644 0001750 0001750 00000013724 12275203724 031140 0 ustar menesis menesis 0000000 0000000 ) d ; & ? F L _ w
# ) M D `
- 3 9 H ' F `
r r
` % j 4 T : -
<