From e299f0ca47a924516f2afbe4e922f2418b75315c Mon Sep 17 00:00:00 2001 From: cajus Date: Thu, 12 May 2005 06:44:40 +0000 Subject: [PATCH] Moved to trunk/branches/tags structure git-svn-id: https://oss.gonicus.de/repositories/gosa/trunk@187 594d385d-05f5-0310-b6e9-bd551577e9d8 --- AUTHORS | 56 + COPYING | 284 + Changelog | 240 + DEVEL | 131 + FAQ | 286 + INSTALL | 109 + README | 55 + README.openxchange | 41 + README.safemode | 14 + TODO | 69 + bin/gosa | 111 + bin/mkntpasswd | 3 + contrib/altlinux/etc/cyrus.conf | 43 + contrib/altlinux/etc/gosa/gosa.conf | 170 + contrib/altlinux/etc/imapd.conf | 210 + contrib/altlinux/etc/ldap.conf | 227 + contrib/altlinux/etc/nsswitch.conf | 62 + contrib/altlinux/etc/openldap/ldap.conf | 17 + contrib/altlinux/etc/openldap/slapd.conf | 311 + contrib/altlinux/etc/postfix/main.cf | 596 ++ contrib/altlinux/etc/samba/smb.conf | 73 + contrib/altlinux/etc/sasl2/imapd.conf | 2 + contrib/altlinux/etc/sasl2/saslauthd.conf | 74 + contrib/altlinux/etc/services | 557 ++ contrib/altlinux/etc/squid/squid.conf | 3303 +++++++++ contrib/altlinux/init.ldif | 124 + contrib/demo.ldif | 132 + contrib/fix_config.sh | 153 + contrib/gosa.conf | 192 + contrib/gosa.spec | 150 + contrib/iplanet/59gonicus-samba3.ldif | 92 + contrib/iplanet/60gonicus-gosa.ldif | 128 + contrib/iplanet/61gonicus-gofax.ldif | 48 + contrib/iplanet/62gonicus-firewall.ldif | 59 + contrib/iplanet/63gonicus-hardware.ldif | 35 + contrib/iplanet/64gonicus-server.ldif | 83 + contrib/iplanet/65gonicus-goto.ldif | 182 + contrib/iplanet/66gonicus-pureftpd.ldif | 35 + contrib/mysql/gofax/gofax.sql | 24 + contrib/mysql/gofon/gofon.sql | 21 + contrib/mysql/golog/golog.sql | 13 + contrib/openldap/goconfig.schema | 43 + contrib/openldap/gofax.schema | 95 + contrib/openldap/gofirewall.schema | 128 + contrib/openldap/gofon.schema | 58 + contrib/openldap/goforge.schema | 14 + contrib/openldap/gohard.schema | 82 + contrib/openldap/gosa+samba3.schema | 276 + contrib/openldap/gosa.schema | 275 + contrib/openldap/goserver.schema | 228 + contrib/openldap/goto.schema | 361 + contrib/openldap/kolab2.schema | 423 ++ contrib/openldap/openxchange.schema | 714 ++ contrib/openldap/phpgwaccount.schema | 79 + contrib/openldap/pureftpd.schema | 64 + contrib/openldap/samba.schema | 152 + contrib/openldap/samba3.schema | 480 ++ contrib/openldap/slapd.conf | 249 + contrib/opensides/README | 6 + contrib/opensides/goSamba.pl | 162 + contrib/patches/imap-2001a-quota.patch | 20 + contrib/patches/php4-imap-getacl.patch | 97 + contrib/postgresql/README | 10 + contrib/scripts/README | 17 + contrib/scripts/goAgent.pl | 225 + contrib/scripts/goQuota.pl | 294 + contrib/scripts/goQuotaView.pl | 91 + contrib/scripts/goSquid.pl | 136 + contrib/scripts/mkHash.pl | 20 + contrib/scripts/start-gosa.sh | 146 + contrib/shells | 6 + contrib/vacation_example.txt | 9 + debian/README.debian | 17 + debian/apache.conf | 4 + debian/changelog | 132 + debian/conffiles | 7 + debian/control | 27 + debian/copyright | 17 + debian/gosa-schema.dirs | 1 + debian/gosa.conffiles | 2 + debian/gosa.dirs | 5 + debian/gosa.postinst | 51 + debian/gosa.postrm | 70 + debian/rules | 92 + doc/doxygen.conf | 1101 +++ doc/guide/admin/en/manual_gosa_en.tex | 72 + doc/guide/admin/en/manual_gosa_en_apache.tex | 837 +++ doc/guide/admin/en/manual_gosa_en_ldap.tex | 1059 +++ doc/guide/admin/en/referencias_gosa.bib | 109 + doc/guide/admin/es/manual_gosa_es.tex | 82 + doc/guide/admin/es/manual_gosa_es_apache.tex | 822 +++ doc/guide/admin/es/manual_gosa_es_ldap.tex | 1059 +++ doc/guide/admin/es/referencias_gosa.bib | 109 + doc/html/annotated.html | 19 + doc/html/classmailAccount-members.html | 60 + doc/html/classmailAccount.html | 224 + doc/html/classmailAccount.png | Bin 0 -> 327 bytes doc/html/classplugin-members.html | 33 + doc/html/classplugin.html | 294 + doc/html/classplugin.png | Bin 0 -> 602 bytes doc/html/classposixAccount-members.html | 66 + doc/html/classposixAccount.html | 219 + doc/html/classposixAccount.png | Bin 0 -> 343 bytes doc/html/classuser-members.html | 82 + doc/html/classuser.html | 271 + doc/html/classuser.png | Bin 0 -> 275 bytes doc/html/doxygen.css | 160 + doc/html/doxygen.png | Bin 0 -> 2352 bytes doc/html/functions.html | 25 + doc/html/functions_func.html | 20 + doc/html/functions_vars.html | 23 + doc/html/hierarchy.html | 21 + doc/html/index.html | 15 + doc/latex/Makefile | 39 + doc/latex/annotated.tex | 7 + doc/latex/classmailAccount.eps | 197 + doc/latex/classmailAccount.tex | 175 + doc/latex/classplugin.eps | 207 + doc/latex/classplugin.tex | 166 + doc/latex/classposixAccount.eps | 197 + doc/latex/classposixAccount.tex | 184 + doc/latex/classuser.eps | 197 + doc/latex/classuser.tex | 236 + doc/latex/doxygen.sty | 65 + doc/latex/hierarchy.tex | 9 + doc/latex/refman.tex | 40 + gen_locale.sh | 108 + html/combine.php | 66 + html/favicon.ico | Bin 0 -> 1406 bytes html/getfax.php | 147 + html/getldif.php | 105 + html/getpic.php | 45 + html/getvcard.php | 167 + html/images/action.png | Bin 0 -> 397 bytes html/images/addr_company.png | Bin 0 -> 1818 bytes html/images/addr_home.png | Bin 0 -> 1381 bytes html/images/addr_personal.png | Bin 0 -> 1372 bytes html/images/addressbook.png | Bin 0 -> 5434 bytes html/images/alternatemail.png | Bin 0 -> 893 bytes html/images/application.png | Bin 0 -> 3839 bytes html/images/back.png | Bin 0 -> 733 bytes html/images/banana.png | Bin 0 -> 784 bytes html/images/blocklists.png | Bin 0 -> 4295 bytes html/images/button_cancel.png | Bin 0 -> 883 bytes html/images/certs.png | Bin 0 -> 693 bytes html/images/closedlock.png | Bin 0 -> 750 bytes html/images/default.jpg | Bin 0 -> 2502 bytes html/images/default_icon.png | Bin 0 -> 1957 bytes html/images/department.png | Bin 0 -> 3728 bytes html/images/dhcp.png | Bin 0 -> 4674 bytes html/images/display.png | Bin 0 -> 733 bytes html/images/dns.png | Bin 0 -> 4739 bytes html/images/dtree.png | Bin 0 -> 694 bytes html/images/edit.png | Bin 0 -> 946 bytes html/images/editcopy.png | Bin 0 -> 777 bytes html/images/editdelete.png | Bin 0 -> 892 bytes html/images/editpaste.png | Bin 0 -> 990 bytes html/images/email.png | Bin 0 -> 4142 bytes html/images/empty.png | Bin 0 -> 174 bytes html/images/encrypted.png | Bin 0 -> 1239 bytes html/images/envelope.png | Bin 0 -> 843 bytes html/images/expand.png | Bin 0 -> 183 bytes html/images/false.png | Bin 0 -> 745 bytes html/images/fax.png | Bin 0 -> 3352 bytes html/images/fax_small.png | Bin 0 -> 787 bytes html/images/filesaveas.png | Bin 0 -> 1253 bytes html/images/flag.png | Bin 0 -> 745 bytes html/images/folder.png | Bin 0 -> 594 bytes html/images/forward.png | Bin 0 -> 726 bytes html/images/ftp.png | Bin 0 -> 4365 bytes html/images/group.png | Bin 0 -> 4224 bytes html/images/hardware.png | Bin 0 -> 836 bytes html/images/hdd_linux_unmount.png | Bin 0 -> 6805 bytes html/images/head.png | Bin 0 -> 753 bytes html/images/help.png | Bin 0 -> 1136 bytes html/images/house.png | Bin 0 -> 713 bytes html/images/info.png | Bin 0 -> 1195 bytes html/images/info_small.png | Bin 0 -> 936 bytes html/images/keyboard.png | Bin 0 -> 343 bytes html/images/lamp.png | Bin 0 -> 829 bytes html/images/launch.png | Bin 0 -> 1263 bytes html/images/ldapserver.png | Bin 0 -> 3276 bytes html/images/ldif.png | Bin 0 -> 2801 bytes html/images/log_critical.png | Bin 0 -> 745 bytes html/images/log_info.png | Bin 0 -> 936 bytes html/images/log_unknown.png | Bin 0 -> 746 bytes html/images/log_warning.png | Bin 0 -> 829 bytes html/images/login.png | Bin 0 -> 9533 bytes html/images/logview.png | Bin 0 -> 3646 bytes html/images/mailto.png | Bin 0 -> 692 bytes html/images/members.png | Bin 0 -> 868 bytes html/images/mouse.png | Bin 0 -> 751 bytes html/images/network.png | Bin 0 -> 894 bytes html/images/null.gif | Bin 0 -> 49 bytes html/images/ogroup.png | Bin 0 -> 3510 bytes html/images/openlock.png | Bin 0 -> 923 bytes html/images/password.png | Bin 0 -> 3316 bytes html/images/penguin.png | Bin 0 -> 964 bytes html/images/personal.png | Bin 0 -> 4119 bytes html/images/phone.png | Bin 0 -> 4263 bytes html/images/phonereport.png | Bin 0 -> 3125 bytes html/images/posix.png | Bin 0 -> 4083 bytes html/images/printer.png | Bin 0 -> 678 bytes html/images/proxy.png | Bin 0 -> 5227 bytes html/images/reports.png | Bin 0 -> 4298 bytes html/images/rightarrow.png | Bin 0 -> 863 bytes html/images/rocket.png | Bin 0 -> 828 bytes html/images/samba.png | Bin 0 -> 5472 bytes html/images/save.png | Bin 0 -> 595 bytes html/images/scanner.png | Bin 0 -> 809 bytes html/images/search.png | Bin 0 -> 1023 bytes html/images/select_application.png | Bin 0 -> 959 bytes html/images/select_component.png | Bin 0 -> 458 bytes html/images/select_default.png | Bin 0 -> 725 bytes html/images/select_department.png | Bin 0 -> 995 bytes html/images/select_groups.png | Bin 0 -> 868 bytes html/images/select_new_terminal.png | Bin 0 -> 776 bytes html/images/select_new_workstation.png | Bin 0 -> 827 bytes html/images/select_ogroup.png | Bin 0 -> 794 bytes html/images/select_phone.png | Bin 0 -> 784 bytes html/images/select_printer.png | Bin 0 -> 678 bytes html/images/select_proxy.png | Bin 0 -> 894 bytes html/images/select_server.png | Bin 0 -> 879 bytes html/images/select_terminal.png | Bin 0 -> 778 bytes html/images/select_user.png | Bin 0 -> 753 bytes html/images/select_winstation.png | Bin 0 -> 675 bytes html/images/select_workstation.png | Bin 0 -> 817 bytes html/images/server.png | Bin 0 -> 879 bytes html/images/service.png | Bin 0 -> 4135 bytes html/images/small_filter.png | Bin 0 -> 814 bytes html/images/sort_down.png | Bin 0 -> 174 bytes html/images/sort_up.png | Bin 0 -> 176 bytes html/images/sound.png | Bin 0 -> 898 bytes html/images/stop.png | Bin 0 -> 974 bytes html/images/system.png | Bin 0 -> 3105 bytes html/images/terminal_small.png | Bin 0 -> 778 bytes html/images/time.png | Bin 0 -> 1049 bytes html/images/tree.png | Bin 0 -> 894 bytes html/images/true.png | Bin 0 -> 661 bytes html/images/user.png | Bin 0 -> 3204 bytes html/images/warning.png | Bin 0 -> 1692 bytes html/images/zip.png | Bin 0 -> 791 bytes html/include/calendar.js | 168 + html/include/focus.js | 40 + html/include/png.js | 73 + html/include/warning.js | 13 + html/index.php | 244 + html/logout.php | 45 + html/main.php | 285 + html/progress.php | 92 + html/setup.php | 138 + html/themes/altlinux/images/go_logo.png | Bin 0 -> 4697 bytes html/themes/altlinux/images/gohome.png | Bin 0 -> 1497 bytes html/themes/altlinux/images/help.png | Bin 0 -> 1381 bytes html/themes/altlinux/images/login.png | Bin 0 -> 29548 bytes html/themes/altlinux/images/stop.png | Bin 0 -> 1097 bytes html/themes/altlinux/style.css | 506 ++ html/themes/classic/images/go_bar.png | Bin 0 -> 187 bytes html/themes/classic/images/go_corner.png | Bin 0 -> 369 bytes html/themes/classic/images/go_left.png | Bin 0 -> 179 bytes html/themes/classic/images/go_logo.png | Bin 0 -> 6084 bytes html/themes/classic/images/go_top.png | Bin 0 -> 187 bytes html/themes/classic/images/login.png | Bin 0 -> 9776 bytes html/themes/classic/style.css | 457 ++ html/themes/default/images/go_logo.png | Bin 0 -> 7398 bytes html/themes/default/images/gohome.png | Bin 0 -> 1340 bytes html/themes/default/images/help.png | Bin 0 -> 1186 bytes html/themes/default/images/login.png | Bin 0 -> 7466 bytes html/themes/default/images/stop.png | Bin 0 -> 1330 bytes html/themes/default/style.css | 505 ++ ihtml/themes/altlinux/conflict.tpl | 16 + ihtml/themes/altlinux/framework.tpl | 56 + ihtml/themes/altlinux/headers.tpl | 31 + ihtml/themes/altlinux/islocked.tpl | 19 + ihtml/themes/altlinux/login.tpl | 77 + ihtml/themes/altlinux/setup.tpl | 35 + ihtml/themes/altlinux/setup_finish.tpl | 26 + ihtml/themes/altlinux/setup_introduction.tpl | 14 + ihtml/themes/altlinux/setup_step2.tpl | 17 + ihtml/themes/altlinux/setup_step3.tpl | 13 + ihtml/themes/altlinux/setup_step4.tpl | 57 + ihtml/themes/altlinux/sizelimit.tpl | 17 + ihtml/themes/classic/conflict.tpl | 16 + ihtml/themes/classic/framework.tpl | 65 + ihtml/themes/classic/headers.tpl | 27 + ihtml/themes/classic/islocked.tpl | 19 + ihtml/themes/classic/login.tpl | 76 + ihtml/themes/default/conflict.tpl | 16 + ihtml/themes/default/framework.tpl | 56 + ihtml/themes/default/headers.tpl | 31 + ihtml/themes/default/islocked.tpl | 19 + ihtml/themes/default/login.tpl | 77 + ihtml/themes/default/setup.tpl | 37 + ihtml/themes/default/setup_finish.tpl | 32 + ihtml/themes/default/setup_introduction.tpl | 16 + ihtml/themes/default/setup_step2.tpl | 14 + ihtml/themes/default/setup_step3.tpl | 19 + ihtml/themes/default/setup_step4.tpl | 96 + ihtml/themes/default/setup_useradmin.tpl | 43 + ihtml/themes/default/sizelimit.tpl | 17 + locale/de/LC_MESSAGES/messages.mo | Bin 0 -> 124779 bytes locale/de/LC_MESSAGES/messages.po | 6412 ++++++++++++++++ locale/es/LC_MESSAGES/messages.mo | Bin 0 -> 114454 bytes locale/es/LC_MESSAGES/messages.po | 6401 ++++++++++++++++ locale/fr/LC_MESSAGES/messages.mo | Bin 0 -> 117678 bytes locale/fr/LC_MESSAGES/messages.po | 6356 ++++++++++++++++ locale/messages.po | 5843 +++++++++++++++ locale/nl/LC_MESSAGES/messages.mo | Bin 0 -> 128675 bytes locale/nl/LC_MESSAGES/messages.po | 6572 +++++++++++++++++ locale/ru/LC_MESSAGES/messages.mo | Bin 0 -> 146216 bytes locale/ru/LC_MESSAGES/messages.po | 6264 ++++++++++++++++ plugins/addons/addressbook/address_edit.tpl | 114 + plugins/addons/addressbook/address_info.tpl | 104 + .../addons/addressbook/class_addressbook.inc | 600 ++ plugins/addons/addressbook/contents.tpl | 99 + plugins/addons/addressbook/dial.tpl | 20 + plugins/addons/addressbook/main.inc | 38 + plugins/addons/addressbook/remove.tpl | 19 + .../addons/ldapmanager/class_csvimport.inc | 456 ++ plugins/addons/ldapmanager/class_export.inc | 102 + plugins/addons/ldapmanager/class_import.inc | 117 + plugins/addons/ldapmanager/class_ldif.inc | 31 + plugins/addons/ldapmanager/contentcsv.tpl | 129 + plugins/addons/ldapmanager/contentexport.tpl | 77 + plugins/addons/ldapmanager/contentimport.tpl | 59 + plugins/addons/ldapmanager/main.inc | 44 + plugins/addons/ldapmanager/tabs_ldif.inc | 24 + plugins/addons/logview/class_logview.inc | 252 + plugins/addons/logview/contents.tpl | 104 + plugins/addons/logview/main.inc | 38 + .../applications/class_applicationGeneric.inc | 270 + .../class_applicationManagement.inc | 343 + .../class_applicationParameters.inc | 186 + plugins/admin/applications/generic.tpl | 82 + plugins/admin/applications/headpage.tpl | 60 + plugins/admin/applications/main.inc | 54 + plugins/admin/applications/parameters.tpl | 2 + plugins/admin/applications/remove.tpl | 18 + .../admin/applications/tabs_application.inc | 37 + .../departments/class_departmentGeneric.inc | 191 + .../class_departmentManagement.inc | 293 + plugins/admin/departments/generic.tpl | 76 + plugins/admin/departments/headpage.tpl | 60 + plugins/admin/departments/main.inc | 55 + plugins/admin/departments/remove.tpl | 19 + plugins/admin/departments/tabs_department.inc | 34 + plugins/admin/groups/acl.tpl | 24 + plugins/admin/groups/acl_definition.inc | 179 + plugins/admin/groups/application.tpl | 28 + plugins/admin/groups/application_options.tpl | 12 + plugins/admin/groups/class_groupAcl.inc | 242 + .../admin/groups/class_groupApplication.inc | 303 + plugins/admin/groups/class_groupGeneric.inc | 644 ++ plugins/admin/groups/class_groupMail.inc | 750 ++ .../admin/groups/class_groupManagement.inc | 440 ++ plugins/admin/groups/generic.tpl | 103 + plugins/admin/groups/group_objects.tpl | 49 + plugins/admin/groups/headpage.tpl | 75 + plugins/admin/groups/mail.tpl | 109 + plugins/admin/groups/mail_admins.tpl | 40 + plugins/admin/groups/mail_locals.tpl | 52 + plugins/admin/groups/main.inc | 60 + plugins/admin/groups/remove.tpl | 19 + plugins/admin/groups/tabs_group.inc | 68 + plugins/admin/ogroups/class_ogroup.inc | 568 ++ .../admin/ogroups/class_ogroupManagement.inc | 416 ++ plugins/admin/ogroups/class_termgroup.inc | 101 + plugins/admin/ogroups/generic.tpl | 49 + plugins/admin/ogroups/headpage.tpl | 72 + plugins/admin/ogroups/main.inc | 49 + plugins/admin/ogroups/ogroup_objects.tpl | 60 + plugins/admin/ogroups/remove.tpl | 19 + plugins/admin/ogroups/tabs_ogroups.inc | 64 + plugins/admin/ogroups/termgroup.tpl | 17 + plugins/admin/systems/chooser.tpl | 21 + .../admin/systems/class_componentGeneric.inc | 180 + plugins/admin/systems/class_phoneGeneric.inc | 183 + plugins/admin/systems/class_printGeneric.inc | 186 + plugins/admin/systems/class_servDB.inc | 211 + plugins/admin/systems/class_servDHCP.inc | 78 + plugins/admin/systems/class_servDNS.inc | 78 + plugins/admin/systems/class_servGeneric.inc | 232 + plugins/admin/systems/class_servService.inc | 64 + .../admin/systems/class_systemManagement.inc | 758 ++ .../admin/systems/class_terminalGeneric.inc | 302 + plugins/admin/systems/class_terminalInfo.inc | 216 + .../admin/systems/class_terminalService.inc | 301 + .../admin/systems/class_terminalStartup.inc | 287 + plugins/admin/systems/class_winGeneric.inc | 220 + .../systems/class_workstationGeneric.inc | 309 + plugins/admin/systems/component.tpl | 41 + plugins/admin/systems/headpage.tpl | 74 + plugins/admin/systems/info.tpl | 135 + plugins/admin/systems/main.inc | 55 + plugins/admin/systems/network.tpl | 23 + plugins/admin/systems/password.tpl | 36 + plugins/admin/systems/phone.tpl | 41 + plugins/admin/systems/printer.tpl | 53 + plugins/admin/systems/remove.tpl | 18 + plugins/admin/systems/servdb.tpl | 122 + plugins/admin/systems/servdhcp.tpl | 1 + plugins/admin/systems/servdns.tpl | 1 + plugins/admin/systems/server.tpl | 59 + plugins/admin/systems/service.tpl | 223 + plugins/admin/systems/servservice.tpl | 1 + plugins/admin/systems/startup.tpl | 102 + plugins/admin/systems/tabs_component.inc | 34 + plugins/admin/systems/tabs_phone.inc | 34 + plugins/admin/systems/tabs_printers.inc | 34 + plugins/admin/systems/tabs_server.inc | 39 + plugins/admin/systems/tabs_terminal.inc | 39 + plugins/admin/systems/tabs_winstation.inc | 34 + plugins/admin/systems/tabs_workstation.inc | 39 + plugins/admin/systems/terminal.tpl | 120 + plugins/admin/systems/wingeneric.tpl | 46 + plugins/admin/systems/workstation.tpl | 120 + plugins/admin/users/class_userManagement.inc | 671 ++ plugins/admin/users/headpage.tpl | 75 + plugins/admin/users/main.inc | 63 + plugins/admin/users/password.tpl | 32 + plugins/admin/users/remove.tpl | 19 + plugins/admin/users/tabs_user.inc | 116 + plugins/admin/users/template.tpl | 58 + .../generic/references/class_reference.inc | 164 + plugins/generic/references/contents.tpl | 19 + plugins/generic/welcome/main.inc | 29 + plugins/generic/welcome/welcome.tpl | 18 + .../blocklists/class_blocklistManagement.inc | 443 ++ plugins/gofax/blocklists/generic.tpl | 84 + plugins/gofax/blocklists/headpage.tpl | 68 + plugins/gofax/blocklists/main.inc | 35 + plugins/gofax/blocklists/remove.tpl | 19 + .../gofax/faxaccount/class_gofaxAccount.inc | 604 ++ plugins/gofax/faxaccount/generic.tpl | 109 + plugins/gofax/faxaccount/lists.tpl | 41 + plugins/gofax/faxaccount/locals.tpl | 52 + plugins/gofax/faxaccount/main.inc | 108 + plugins/gofax/reports/class_faxreport.inc | 301 + plugins/gofax/reports/contents.tpl | 59 + plugins/gofax/reports/detail.tpl | 70 + plugins/gofax/reports/main.inc | 20 + .../gofon/phoneaccount/class_phoneAccount.inc | 421 ++ plugins/gofon/phoneaccount/generic.tpl | 70 + plugins/gofon/phoneaccount/main.inc | 123 + plugins/gofon/reports/class_fonreport.inc | 248 + plugins/gofon/reports/contents.tpl | 60 + plugins/gofon/reports/main.inc | 20 + .../connectivity/class_connectivity.inc | 154 + .../connectivity/class_kolabAccount.inc | 211 + .../connectivity/class_oxchangeAccount.inc | 785 ++ .../connectivity/class_phpgwAccount.inc | 122 + .../connectivity/class_proxyAccount.inc | 190 + .../connectivity/class_pureftpdAccount.inc | 163 + .../connectivity/class_webdavAccount.inc | 114 + plugins/personal/connectivity/kolab.tpl | 54 + plugins/personal/connectivity/main.inc | 141 + plugins/personal/connectivity/oxchange.tpl | 53 + plugins/personal/connectivity/phpgw.tpl | 1 + plugins/personal/connectivity/proxy.tpl | 65 + plugins/personal/connectivity/pureftpd.tpl | 79 + plugins/personal/connectivity/webdav.tpl | 1 + plugins/personal/generic/class_user.inc | 1075 +++ plugins/personal/generic/generic.tpl | 400 + plugins/personal/generic/generic_certs.tpl | 64 + plugins/personal/generic/generic_picture.tpl | 33 + plugins/personal/generic/main.inc | 192 + plugins/personal/generic/password.tpl | 28 + plugins/personal/mail/class_mailAccount.inc | 800 ++ plugins/personal/mail/generic.tpl | 158 + plugins/personal/mail/mail_locals.tpl | 52 + plugins/personal/mail/main.inc | 129 + plugins/personal/mail/sieve-discard.txt | 3 + plugins/personal/mail/sieve-header.txt | 3 + plugins/personal/mail/sieve-mailsize.txt | 17 + plugins/personal/mail/sieve-spam.txt | 5 + plugins/personal/mail/sieve-vacation.txt | 4 + plugins/personal/password/changed.tpl | 15 + plugins/personal/password/class_password.inc | 10 + plugins/personal/password/main.inc | 108 + plugins/personal/password/password.tpl | 48 + plugins/personal/posix/class_posixAccount.inc | 988 +++ plugins/personal/posix/generic.tpl | 137 + plugins/personal/posix/main.inc | 136 + plugins/personal/posix/posix_groups.tpl | 60 + plugins/personal/posix/posix_shadow.tpl | 46 + plugins/personal/posix/trust_machines.tpl | 48 + plugins/personal/samba/class_sambaAccount.inc | 924 +++ plugins/personal/samba/main.inc | 129 + plugins/personal/samba/samba2.tpl | 94 + plugins/personal/samba/samba3.tpl | 311 + .../personal/samba/samba3_workstations.tpl | 48 + 491 files changed, 90893 insertions(+) create mode 100644 AUTHORS create mode 100644 COPYING create mode 100644 Changelog create mode 100644 DEVEL create mode 100644 FAQ create mode 100644 INSTALL create mode 100644 README create mode 100644 README.openxchange create mode 100644 README.safemode create mode 100644 TODO create mode 100755 bin/gosa create mode 100755 bin/mkntpasswd create mode 100644 contrib/altlinux/etc/cyrus.conf create mode 100644 contrib/altlinux/etc/gosa/gosa.conf create mode 100644 contrib/altlinux/etc/imapd.conf create mode 100644 contrib/altlinux/etc/ldap.conf create mode 100644 contrib/altlinux/etc/nsswitch.conf create mode 100644 contrib/altlinux/etc/openldap/ldap.conf create mode 100644 contrib/altlinux/etc/openldap/slapd.conf create mode 100644 contrib/altlinux/etc/postfix/main.cf create mode 100644 contrib/altlinux/etc/samba/smb.conf create mode 100644 contrib/altlinux/etc/sasl2/imapd.conf create mode 100644 contrib/altlinux/etc/sasl2/saslauthd.conf create mode 100644 contrib/altlinux/etc/services create mode 100644 contrib/altlinux/etc/squid/squid.conf create mode 100644 contrib/altlinux/init.ldif create mode 100644 contrib/demo.ldif create mode 100755 contrib/fix_config.sh create mode 100644 contrib/gosa.conf create mode 100644 contrib/gosa.spec create mode 100644 contrib/iplanet/59gonicus-samba3.ldif create mode 100644 contrib/iplanet/60gonicus-gosa.ldif create mode 100644 contrib/iplanet/61gonicus-gofax.ldif create mode 100644 contrib/iplanet/62gonicus-firewall.ldif create mode 100644 contrib/iplanet/63gonicus-hardware.ldif create mode 100644 contrib/iplanet/64gonicus-server.ldif create mode 100644 contrib/iplanet/65gonicus-goto.ldif create mode 100644 contrib/iplanet/66gonicus-pureftpd.ldif create mode 100644 contrib/mysql/gofax/gofax.sql create mode 100644 contrib/mysql/gofon/gofon.sql create mode 100644 contrib/mysql/golog/golog.sql create mode 100644 contrib/openldap/goconfig.schema create mode 100644 contrib/openldap/gofax.schema create mode 100644 contrib/openldap/gofirewall.schema create mode 100644 contrib/openldap/gofon.schema create mode 100644 contrib/openldap/goforge.schema create mode 100644 contrib/openldap/gohard.schema create mode 100644 contrib/openldap/gosa+samba3.schema create mode 100644 contrib/openldap/gosa.schema create mode 100644 contrib/openldap/goserver.schema create mode 100644 contrib/openldap/goto.schema create mode 100644 contrib/openldap/kolab2.schema create mode 100644 contrib/openldap/openxchange.schema create mode 100644 contrib/openldap/phpgwaccount.schema create mode 100644 contrib/openldap/pureftpd.schema create mode 100644 contrib/openldap/samba.schema create mode 100644 contrib/openldap/samba3.schema create mode 100644 contrib/openldap/slapd.conf create mode 100644 contrib/opensides/README create mode 100755 contrib/opensides/goSamba.pl create mode 100644 contrib/patches/imap-2001a-quota.patch create mode 100644 contrib/patches/php4-imap-getacl.patch create mode 100644 contrib/postgresql/README create mode 100644 contrib/scripts/README create mode 100644 contrib/scripts/goAgent.pl create mode 100644 contrib/scripts/goQuota.pl create mode 100644 contrib/scripts/goQuotaView.pl create mode 100644 contrib/scripts/goSquid.pl create mode 100644 contrib/scripts/mkHash.pl create mode 100755 contrib/scripts/start-gosa.sh create mode 100644 contrib/shells create mode 100644 contrib/vacation_example.txt create mode 100644 debian/README.debian create mode 100644 debian/apache.conf create mode 100644 debian/changelog create mode 100644 debian/conffiles create mode 100644 debian/control create mode 100644 debian/copyright create mode 100644 debian/gosa-schema.dirs create mode 100644 debian/gosa.conffiles create mode 100644 debian/gosa.dirs create mode 100755 debian/gosa.postinst create mode 100644 debian/gosa.postrm create mode 100755 debian/rules create mode 100644 doc/doxygen.conf create mode 100644 doc/guide/admin/en/manual_gosa_en.tex create mode 100644 doc/guide/admin/en/manual_gosa_en_apache.tex create mode 100644 doc/guide/admin/en/manual_gosa_en_ldap.tex create mode 100644 doc/guide/admin/en/referencias_gosa.bib create mode 100644 doc/guide/admin/es/manual_gosa_es.tex create mode 100644 doc/guide/admin/es/manual_gosa_es_apache.tex create mode 100644 doc/guide/admin/es/manual_gosa_es_ldap.tex create mode 100644 doc/guide/admin/es/referencias_gosa.bib create mode 100644 doc/html/annotated.html create mode 100644 doc/html/classmailAccount-members.html create mode 100644 doc/html/classmailAccount.html create mode 100644 doc/html/classmailAccount.png create mode 100644 doc/html/classplugin-members.html create mode 100644 doc/html/classplugin.html create mode 100644 doc/html/classplugin.png create mode 100644 doc/html/classposixAccount-members.html create mode 100644 doc/html/classposixAccount.html create mode 100644 doc/html/classposixAccount.png create mode 100644 doc/html/classuser-members.html create mode 100644 doc/html/classuser.html create mode 100644 doc/html/classuser.png create mode 100644 doc/html/doxygen.css create mode 100644 doc/html/doxygen.png create mode 100644 doc/html/functions.html create mode 100644 doc/html/functions_func.html create mode 100644 doc/html/functions_vars.html create mode 100644 doc/html/hierarchy.html create mode 100644 doc/html/index.html create mode 100644 doc/latex/Makefile create mode 100644 doc/latex/annotated.tex create mode 100644 doc/latex/classmailAccount.eps create mode 100644 doc/latex/classmailAccount.tex create mode 100644 doc/latex/classplugin.eps create mode 100644 doc/latex/classplugin.tex create mode 100644 doc/latex/classposixAccount.eps create mode 100644 doc/latex/classposixAccount.tex create mode 100644 doc/latex/classuser.eps create mode 100644 doc/latex/classuser.tex create mode 100644 doc/latex/doxygen.sty create mode 100644 doc/latex/hierarchy.tex create mode 100644 doc/latex/refman.tex create mode 100755 gen_locale.sh create mode 100644 html/combine.php create mode 100644 html/favicon.ico create mode 100644 html/getfax.php create mode 100644 html/getldif.php create mode 100644 html/getpic.php create mode 100644 html/getvcard.php create mode 100644 html/images/action.png create mode 100644 html/images/addr_company.png create mode 100644 html/images/addr_home.png create mode 100644 html/images/addr_personal.png create mode 100644 html/images/addressbook.png create mode 100644 html/images/alternatemail.png create mode 100644 html/images/application.png create mode 100644 html/images/back.png create mode 100644 html/images/banana.png create mode 100644 html/images/blocklists.png create mode 100644 html/images/button_cancel.png create mode 100644 html/images/certs.png create mode 100644 html/images/closedlock.png create mode 100644 html/images/default.jpg create mode 100644 html/images/default_icon.png create mode 100644 html/images/department.png create mode 100644 html/images/dhcp.png create mode 100644 html/images/display.png create mode 100644 html/images/dns.png create mode 100644 html/images/dtree.png create mode 100644 html/images/edit.png create mode 100644 html/images/editcopy.png create mode 100644 html/images/editdelete.png create mode 100644 html/images/editpaste.png create mode 100644 html/images/email.png create mode 100644 html/images/empty.png create mode 100644 html/images/encrypted.png create mode 100644 html/images/envelope.png create mode 100644 html/images/expand.png create mode 100644 html/images/false.png create mode 100644 html/images/fax.png create mode 100644 html/images/fax_small.png create mode 100644 html/images/filesaveas.png create mode 100644 html/images/flag.png create mode 100644 html/images/folder.png create mode 100644 html/images/forward.png create mode 100755 html/images/ftp.png create mode 100644 html/images/group.png create mode 100644 html/images/hardware.png create mode 100644 html/images/hdd_linux_unmount.png create mode 100644 html/images/head.png create mode 100644 html/images/help.png create mode 100644 html/images/house.png create mode 100644 html/images/info.png create mode 100644 html/images/info_small.png create mode 100644 html/images/keyboard.png create mode 100644 html/images/lamp.png create mode 100644 html/images/launch.png create mode 100644 html/images/ldapserver.png create mode 100755 html/images/ldif.png create mode 100644 html/images/log_critical.png create mode 100644 html/images/log_info.png create mode 100644 html/images/log_unknown.png create mode 100644 html/images/log_warning.png create mode 100644 html/images/login.png create mode 100644 html/images/logview.png create mode 100644 html/images/mailto.png create mode 100644 html/images/members.png create mode 100644 html/images/mouse.png create mode 100644 html/images/network.png create mode 100644 html/images/null.gif create mode 100644 html/images/ogroup.png create mode 100644 html/images/openlock.png create mode 100755 html/images/password.png create mode 100644 html/images/penguin.png create mode 100644 html/images/personal.png create mode 100644 html/images/phone.png create mode 100644 html/images/phonereport.png create mode 100644 html/images/posix.png create mode 100644 html/images/printer.png create mode 100644 html/images/proxy.png create mode 100755 html/images/reports.png create mode 100644 html/images/rightarrow.png create mode 100644 html/images/rocket.png create mode 100644 html/images/samba.png create mode 100644 html/images/save.png create mode 100644 html/images/scanner.png create mode 100644 html/images/search.png create mode 100644 html/images/select_application.png create mode 100644 html/images/select_component.png create mode 100644 html/images/select_default.png create mode 100644 html/images/select_department.png create mode 100644 html/images/select_groups.png create mode 100644 html/images/select_new_terminal.png create mode 100644 html/images/select_new_workstation.png create mode 100644 html/images/select_ogroup.png create mode 100644 html/images/select_phone.png create mode 100644 html/images/select_printer.png create mode 100644 html/images/select_proxy.png create mode 100644 html/images/select_server.png create mode 100644 html/images/select_terminal.png create mode 100644 html/images/select_user.png create mode 100644 html/images/select_winstation.png create mode 100644 html/images/select_workstation.png create mode 100644 html/images/server.png create mode 100644 html/images/service.png create mode 100644 html/images/small_filter.png create mode 100644 html/images/sort_down.png create mode 100644 html/images/sort_up.png create mode 100644 html/images/sound.png create mode 100644 html/images/stop.png create mode 100755 html/images/system.png create mode 100644 html/images/terminal_small.png create mode 100644 html/images/time.png create mode 100644 html/images/tree.png create mode 100644 html/images/true.png create mode 100644 html/images/user.png create mode 100644 html/images/warning.png create mode 100644 html/images/zip.png create mode 100644 html/include/calendar.js create mode 100644 html/include/focus.js create mode 100644 html/include/png.js create mode 100644 html/include/warning.js create mode 100644 html/index.php create mode 100644 html/logout.php create mode 100644 html/main.php create mode 100644 html/progress.php create mode 100644 html/setup.php create mode 100644 html/themes/altlinux/images/go_logo.png create mode 100644 html/themes/altlinux/images/gohome.png create mode 100644 html/themes/altlinux/images/help.png create mode 100644 html/themes/altlinux/images/login.png create mode 100644 html/themes/altlinux/images/stop.png create mode 100644 html/themes/altlinux/style.css create mode 100644 html/themes/classic/images/go_bar.png create mode 100644 html/themes/classic/images/go_corner.png create mode 100644 html/themes/classic/images/go_left.png create mode 100644 html/themes/classic/images/go_logo.png create mode 100644 html/themes/classic/images/go_top.png create mode 100644 html/themes/classic/images/login.png create mode 100644 html/themes/classic/style.css create mode 100644 html/themes/default/images/go_logo.png create mode 100644 html/themes/default/images/gohome.png create mode 100644 html/themes/default/images/help.png create mode 100644 html/themes/default/images/login.png create mode 100644 html/themes/default/images/stop.png create mode 100644 html/themes/default/style.css create mode 100644 ihtml/themes/altlinux/conflict.tpl create mode 100644 ihtml/themes/altlinux/framework.tpl create mode 100644 ihtml/themes/altlinux/headers.tpl create mode 100644 ihtml/themes/altlinux/islocked.tpl create mode 100644 ihtml/themes/altlinux/login.tpl create mode 100644 ihtml/themes/altlinux/setup.tpl create mode 100644 ihtml/themes/altlinux/setup_finish.tpl create mode 100644 ihtml/themes/altlinux/setup_introduction.tpl create mode 100644 ihtml/themes/altlinux/setup_step2.tpl create mode 100644 ihtml/themes/altlinux/setup_step3.tpl create mode 100644 ihtml/themes/altlinux/setup_step4.tpl create mode 100644 ihtml/themes/altlinux/sizelimit.tpl create mode 100644 ihtml/themes/classic/conflict.tpl create mode 100644 ihtml/themes/classic/framework.tpl create mode 100644 ihtml/themes/classic/headers.tpl create mode 100644 ihtml/themes/classic/islocked.tpl create mode 100644 ihtml/themes/classic/login.tpl create mode 100644 ihtml/themes/default/conflict.tpl create mode 100644 ihtml/themes/default/framework.tpl create mode 100644 ihtml/themes/default/headers.tpl create mode 100644 ihtml/themes/default/islocked.tpl create mode 100644 ihtml/themes/default/login.tpl create mode 100644 ihtml/themes/default/setup.tpl create mode 100644 ihtml/themes/default/setup_finish.tpl create mode 100644 ihtml/themes/default/setup_introduction.tpl create mode 100644 ihtml/themes/default/setup_step2.tpl create mode 100644 ihtml/themes/default/setup_step3.tpl create mode 100644 ihtml/themes/default/setup_step4.tpl create mode 100644 ihtml/themes/default/setup_useradmin.tpl create mode 100644 ihtml/themes/default/sizelimit.tpl create mode 100644 locale/de/LC_MESSAGES/messages.mo create mode 100644 locale/de/LC_MESSAGES/messages.po create mode 100644 locale/es/LC_MESSAGES/messages.mo create mode 100644 locale/es/LC_MESSAGES/messages.po create mode 100644 locale/fr/LC_MESSAGES/messages.mo create mode 100644 locale/fr/LC_MESSAGES/messages.po create mode 100644 locale/messages.po create mode 100644 locale/nl/LC_MESSAGES/messages.mo create mode 100644 locale/nl/LC_MESSAGES/messages.po create mode 100644 locale/ru/LC_MESSAGES/messages.mo create mode 100644 locale/ru/LC_MESSAGES/messages.po create mode 100644 plugins/addons/addressbook/address_edit.tpl create mode 100644 plugins/addons/addressbook/address_info.tpl create mode 100644 plugins/addons/addressbook/class_addressbook.inc create mode 100644 plugins/addons/addressbook/contents.tpl create mode 100644 plugins/addons/addressbook/dial.tpl create mode 100644 plugins/addons/addressbook/main.inc create mode 100644 plugins/addons/addressbook/remove.tpl create mode 100644 plugins/addons/ldapmanager/class_csvimport.inc create mode 100644 plugins/addons/ldapmanager/class_export.inc create mode 100644 plugins/addons/ldapmanager/class_import.inc create mode 100644 plugins/addons/ldapmanager/class_ldif.inc create mode 100644 plugins/addons/ldapmanager/contentcsv.tpl create mode 100644 plugins/addons/ldapmanager/contentexport.tpl create mode 100644 plugins/addons/ldapmanager/contentimport.tpl create mode 100644 plugins/addons/ldapmanager/main.inc create mode 100644 plugins/addons/ldapmanager/tabs_ldif.inc create mode 100644 plugins/addons/logview/class_logview.inc create mode 100644 plugins/addons/logview/contents.tpl create mode 100644 plugins/addons/logview/main.inc create mode 100644 plugins/admin/applications/class_applicationGeneric.inc create mode 100644 plugins/admin/applications/class_applicationManagement.inc create mode 100644 plugins/admin/applications/class_applicationParameters.inc create mode 100644 plugins/admin/applications/generic.tpl create mode 100644 plugins/admin/applications/headpage.tpl create mode 100644 plugins/admin/applications/main.inc create mode 100644 plugins/admin/applications/parameters.tpl create mode 100644 plugins/admin/applications/remove.tpl create mode 100644 plugins/admin/applications/tabs_application.inc create mode 100644 plugins/admin/departments/class_departmentGeneric.inc create mode 100644 plugins/admin/departments/class_departmentManagement.inc create mode 100644 plugins/admin/departments/generic.tpl create mode 100644 plugins/admin/departments/headpage.tpl create mode 100644 plugins/admin/departments/main.inc create mode 100644 plugins/admin/departments/remove.tpl create mode 100644 plugins/admin/departments/tabs_department.inc create mode 100644 plugins/admin/groups/acl.tpl create mode 100644 plugins/admin/groups/acl_definition.inc create mode 100644 plugins/admin/groups/application.tpl create mode 100644 plugins/admin/groups/application_options.tpl create mode 100644 plugins/admin/groups/class_groupAcl.inc create mode 100644 plugins/admin/groups/class_groupApplication.inc create mode 100644 plugins/admin/groups/class_groupGeneric.inc create mode 100644 plugins/admin/groups/class_groupMail.inc create mode 100644 plugins/admin/groups/class_groupManagement.inc create mode 100644 plugins/admin/groups/generic.tpl create mode 100644 plugins/admin/groups/group_objects.tpl create mode 100644 plugins/admin/groups/headpage.tpl create mode 100644 plugins/admin/groups/mail.tpl create mode 100644 plugins/admin/groups/mail_admins.tpl create mode 100644 plugins/admin/groups/mail_locals.tpl create mode 100644 plugins/admin/groups/main.inc create mode 100644 plugins/admin/groups/remove.tpl create mode 100644 plugins/admin/groups/tabs_group.inc create mode 100644 plugins/admin/ogroups/class_ogroup.inc create mode 100644 plugins/admin/ogroups/class_ogroupManagement.inc create mode 100644 plugins/admin/ogroups/class_termgroup.inc create mode 100644 plugins/admin/ogroups/generic.tpl create mode 100644 plugins/admin/ogroups/headpage.tpl create mode 100644 plugins/admin/ogroups/main.inc create mode 100644 plugins/admin/ogroups/ogroup_objects.tpl create mode 100644 plugins/admin/ogroups/remove.tpl create mode 100644 plugins/admin/ogroups/tabs_ogroups.inc create mode 100644 plugins/admin/ogroups/termgroup.tpl create mode 100644 plugins/admin/systems/chooser.tpl create mode 100644 plugins/admin/systems/class_componentGeneric.inc create mode 100644 plugins/admin/systems/class_phoneGeneric.inc create mode 100644 plugins/admin/systems/class_printGeneric.inc create mode 100644 plugins/admin/systems/class_servDB.inc create mode 100644 plugins/admin/systems/class_servDHCP.inc create mode 100644 plugins/admin/systems/class_servDNS.inc create mode 100644 plugins/admin/systems/class_servGeneric.inc create mode 100644 plugins/admin/systems/class_servService.inc create mode 100644 plugins/admin/systems/class_systemManagement.inc create mode 100644 plugins/admin/systems/class_terminalGeneric.inc create mode 100644 plugins/admin/systems/class_terminalInfo.inc create mode 100644 plugins/admin/systems/class_terminalService.inc create mode 100644 plugins/admin/systems/class_terminalStartup.inc create mode 100644 plugins/admin/systems/class_winGeneric.inc create mode 100644 plugins/admin/systems/class_workstationGeneric.inc create mode 100644 plugins/admin/systems/component.tpl create mode 100644 plugins/admin/systems/headpage.tpl create mode 100644 plugins/admin/systems/info.tpl create mode 100644 plugins/admin/systems/main.inc create mode 100644 plugins/admin/systems/network.tpl create mode 100644 plugins/admin/systems/password.tpl create mode 100644 plugins/admin/systems/phone.tpl create mode 100644 plugins/admin/systems/printer.tpl create mode 100644 plugins/admin/systems/remove.tpl create mode 100644 plugins/admin/systems/servdb.tpl create mode 100644 plugins/admin/systems/servdhcp.tpl create mode 100644 plugins/admin/systems/servdns.tpl create mode 100644 plugins/admin/systems/server.tpl create mode 100644 plugins/admin/systems/service.tpl create mode 100644 plugins/admin/systems/servservice.tpl create mode 100644 plugins/admin/systems/startup.tpl create mode 100644 plugins/admin/systems/tabs_component.inc create mode 100644 plugins/admin/systems/tabs_phone.inc create mode 100644 plugins/admin/systems/tabs_printers.inc create mode 100644 plugins/admin/systems/tabs_server.inc create mode 100644 plugins/admin/systems/tabs_terminal.inc create mode 100644 plugins/admin/systems/tabs_winstation.inc create mode 100644 plugins/admin/systems/tabs_workstation.inc create mode 100644 plugins/admin/systems/terminal.tpl create mode 100644 plugins/admin/systems/wingeneric.tpl create mode 100644 plugins/admin/systems/workstation.tpl create mode 100644 plugins/admin/users/class_userManagement.inc create mode 100644 plugins/admin/users/headpage.tpl create mode 100644 plugins/admin/users/main.inc create mode 100644 plugins/admin/users/password.tpl create mode 100644 plugins/admin/users/remove.tpl create mode 100644 plugins/admin/users/tabs_user.inc create mode 100644 plugins/admin/users/template.tpl create mode 100644 plugins/generic/references/class_reference.inc create mode 100644 plugins/generic/references/contents.tpl create mode 100644 plugins/generic/welcome/main.inc create mode 100644 plugins/generic/welcome/welcome.tpl create mode 100644 plugins/gofax/blocklists/class_blocklistManagement.inc create mode 100644 plugins/gofax/blocklists/generic.tpl create mode 100644 plugins/gofax/blocklists/headpage.tpl create mode 100644 plugins/gofax/blocklists/main.inc create mode 100644 plugins/gofax/blocklists/remove.tpl create mode 100644 plugins/gofax/faxaccount/class_gofaxAccount.inc create mode 100644 plugins/gofax/faxaccount/generic.tpl create mode 100644 plugins/gofax/faxaccount/lists.tpl create mode 100644 plugins/gofax/faxaccount/locals.tpl create mode 100644 plugins/gofax/faxaccount/main.inc create mode 100644 plugins/gofax/reports/class_faxreport.inc create mode 100644 plugins/gofax/reports/contents.tpl create mode 100644 plugins/gofax/reports/detail.tpl create mode 100644 plugins/gofax/reports/main.inc create mode 100644 plugins/gofon/phoneaccount/class_phoneAccount.inc create mode 100644 plugins/gofon/phoneaccount/generic.tpl create mode 100644 plugins/gofon/phoneaccount/main.inc create mode 100644 plugins/gofon/reports/class_fonreport.inc create mode 100644 plugins/gofon/reports/contents.tpl create mode 100644 plugins/gofon/reports/main.inc create mode 100644 plugins/personal/connectivity/class_connectivity.inc create mode 100644 plugins/personal/connectivity/class_kolabAccount.inc create mode 100644 plugins/personal/connectivity/class_oxchangeAccount.inc create mode 100644 plugins/personal/connectivity/class_phpgwAccount.inc create mode 100644 plugins/personal/connectivity/class_proxyAccount.inc create mode 100644 plugins/personal/connectivity/class_pureftpdAccount.inc create mode 100644 plugins/personal/connectivity/class_webdavAccount.inc create mode 100644 plugins/personal/connectivity/kolab.tpl create mode 100644 plugins/personal/connectivity/main.inc create mode 100644 plugins/personal/connectivity/oxchange.tpl create mode 100644 plugins/personal/connectivity/phpgw.tpl create mode 100644 plugins/personal/connectivity/proxy.tpl create mode 100644 plugins/personal/connectivity/pureftpd.tpl create mode 100644 plugins/personal/connectivity/webdav.tpl create mode 100644 plugins/personal/generic/class_user.inc create mode 100644 plugins/personal/generic/generic.tpl create mode 100644 plugins/personal/generic/generic_certs.tpl create mode 100644 plugins/personal/generic/generic_picture.tpl create mode 100644 plugins/personal/generic/main.inc create mode 100644 plugins/personal/generic/password.tpl create mode 100644 plugins/personal/mail/class_mailAccount.inc create mode 100644 plugins/personal/mail/generic.tpl create mode 100644 plugins/personal/mail/mail_locals.tpl create mode 100644 plugins/personal/mail/main.inc create mode 100644 plugins/personal/mail/sieve-discard.txt create mode 100644 plugins/personal/mail/sieve-header.txt create mode 100644 plugins/personal/mail/sieve-mailsize.txt create mode 100644 plugins/personal/mail/sieve-spam.txt create mode 100644 plugins/personal/mail/sieve-vacation.txt create mode 100644 plugins/personal/password/changed.tpl create mode 100644 plugins/personal/password/class_password.inc create mode 100644 plugins/personal/password/main.inc create mode 100644 plugins/personal/password/password.tpl create mode 100644 plugins/personal/posix/class_posixAccount.inc create mode 100644 plugins/personal/posix/generic.tpl create mode 100644 plugins/personal/posix/main.inc create mode 100644 plugins/personal/posix/posix_groups.tpl create mode 100644 plugins/personal/posix/posix_shadow.tpl create mode 100644 plugins/personal/posix/trust_machines.tpl create mode 100644 plugins/personal/samba/class_sambaAccount.inc create mode 100644 plugins/personal/samba/main.inc create mode 100644 plugins/personal/samba/samba2.tpl create mode 100644 plugins/personal/samba/samba3.tpl create mode 100644 plugins/personal/samba/samba3_workstations.tpl diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 000000000..3f1f4bb14 --- /dev/null +++ b/AUTHORS @@ -0,0 +1,56 @@ +GOsa AUTHORS +============ + +This is the alphabetical list of all people that have +contributed to the GOsa project, beeing code, translations, +documentation and additional help. + +* Markus Amersdorfer + Wiki setup, Testing, hints, proposals + +* Craig Chang + Fixes for magic_quotes_qpc + +* Alejandro Escanero Blanco + Fixes, improvements, translation, Guide and some extensions + +* Holger Burbach + Kerberos PHP module + +* Dan Ellis + Sieve lib is taken from him + +* Fabian Hickert + Improvements for setup, various fixes and plugins + +* Eric Kilfoil + ldap.inc is taken from him + +* Igor Muratov + Various fixes and speed enhancements + +* Michael Pasdziernik + Documentation for GOsa and safe-mode, fixes + +* Cajus Pollmeier + Virtually everyting which is GOsa related + +* Henning Schmiedehausen + Various fixes, support for user defined people/group base + +* Alfred Schröder + German translation + +* Thomas Schüßler + debuglib.inc is taken from him + +* Jan Wenzel + Implementation and research for samba munged dial support, + fixing of "Fiptehlers"(TM) in the german translations. + +* Benoit Mortier + French Translation + +* Guillaume Delecourt + Setup fixes + diff --git a/COPYING b/COPYING new file mode 100644 index 000000000..ba4e0c63b --- /dev/null +++ b/COPYING @@ -0,0 +1,284 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 675 Mass Ave, Cambridge, MA 02139, USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS diff --git a/Changelog b/Changelog new file mode 100644 index 000000000..8e378ec0d --- /dev/null +++ b/Changelog @@ -0,0 +1,240 @@ +GOsa2 changelog +=============== + +* gosa 2.3.1 + - Override automatically detected user bases if they don't exist + - Don't shred samba group ID's if they are not present in the + combobox + - Updated smarty to version 2.6.9 + +* gosa 2.3 + - Updated smarty to version 2.6.7 + - Added dutch translations (thanks to Niels Klomp) + - Added webdav and phpgroupware accounts + - Fixed french translation + - Fixed error in shadowExpire attribute + - Unified all filters in dialogs to use the internationalized choosers + - Added option to do non subtree searches with filters + - Fixed sample configuration files to be unproblematic when used in + conjunction with OpenLDAP 2.2 + - Added experimental support for editing LDAP trees that contain referrals + - Updated Altlinux contributions, including themes and scripts + - Worked around a possible problem with sizelimit in php-ldap + - Improved big ldap support by size limits and non sub searches + - Various smaller fixes + - Added global TLS switch for LDAP connections + - Fixed SELECT queries to be mysql 3.x _and_ 4.x compatible + - Made departments movable + +* gosa 2.2 + - Removed DHCP/DNS plugins, they will be replaced by + the terminal/server/workstation plugins. + - Added case sensitivity check for login names + - Made bases set to users "home" department when creating new objects + - Moved sieve-*.txt config files to /etc/gosa + - Told IMAP plugin to remove mail accounts when the user is deleted + - Interface cleanups + - Added simple log file viewer + - Added support for asterisk + - Included javascript magic to improve usability (doubleclicks in + lists, disabling of fields, warning messages, etc.) + - More filtering and sizelimits for speed optimizations + - Mail handling is now pluggable + - Added possibility to bundle objects to object groups + - Added a reference tab to track relation ships of different objects + - Improved samba 3 support (terminal server support) + - Updated translations and added a french one + +* gosa 2.1.3 + - Fixed problem with initial password setting + - Increase number in version.inc + - Add a workaround to fix problem with groups not beeing displayed + with openldap. Here the server reacts with empty results if searching + for non existing objectClass "sambaGroupMapping" in case of using samba2 + - Fix the homeDirectory check which is a bit too harsh with templates + +* gosa 2.1.2 + - Fixed problem with uppercase login names + - Extensive speed increasements in ldap searches + - Fixed gettext problem on older installations + - Corrected sieve login which was broken due to a library switch + - Made in_array act case insensitive for is_account check + - Fixed location of DMODE and HASH in config file + - Fixed general problems with password hash generation if not + specified + - Complete move to unicode which removes all active encoding/decoding + of contents from GOsa itself + - Made GOsa run smooth on PHP 5 + - Added complete russian translation contributed by Igor Muratov + - Migrated phone list to (global) addressbook + - Filtering fixes + +* gosa 2.1.1 + - Enabled mail-account-less fax accounts + - Fixed upper/lower case problem in mail templates + - Fixed typo in generic plugin error message + - Made template dialog work again + - Fixed headpage for application management which tends to do no + proper display of used applications + - Added command line interface to use GOsa without web interface + - Updated debian control to be aware of apache2 based installations + - Transferd tab variables in group dialog, so the primary mail + address can be checked + - Fixed possible case problem with is_account + - Made base selector contain newly added departments in department + dialog + +* gosa 2.1 + Bugfix release + - size of homeDirectory attribute increased + - FAQ/README/INSTALL updated + - spec file updated + +* gosa 2.1rc2 + Bugfix release + - Made user dn configurable + - Fixed memory usage check + - Fixed size of alternate mail address field + - Fixed sorting of group in posix tab + - Made GOsa keep group membership even if user has no posix + account + - Fixed typo in blocklist spelling + - Fixed error message when trying to filter users without a + valid uid + - Made posix account visible, even if there are no shadow + attributes inside this entry + - Included setup + - Translation updates + +* gosa 2.1rc1 + Bugfix release + - Fixed annoying ACL bug in template mode + - Fixed possible privilege escalation problem in password + routine (thanks to Henning Schmiedehausen) + - Removed password storage from user info class (thanks to + Rainer Herbst) + - Various interface cleanups + - Templatization finished + - Reworked user headpage + - Made GOsa more robust in detecting errors in config + - Added additional error messages reported by LDAP server + - Added schmemacheck hook + - Started with setup implementation + +* gosa 2.1beta3 + Bugfix release + - Made template mode remember the templates primary group + - Templatized posix plugin + - Added option to disable strict checking of uid/gid names + - Massive samba3 updates + - Made ou=people and ou=groups configurable + - Fixed user/group lists to react on filter changes + +* gosa 2.1beta2 + Bugfix and feature enhancement release. + - Made GOsa remove object locks when changing plugins during edit + process. + - Added DHCP plugin + - Gerneral speed tunig, reduced the number of unessasary ldap + accesses + - Added syslog output for actions "save" and "remove" + - Fixed handling for multiple ACL's per base + - Fixed listboxes to unify output / sort output + - Fixed annoying bug in tab_groups.inc when removing the mailtab + - Bases did not get set in template mode + - Fixed user part + - Templatized faxaccount/pureftpd/samba and mail plugins + - Included calendar.js functionality in samba plugin + +* gosa 2.1beta1 + This release has some feature enhancements and contains many + bugfixes and design cleanups + - Fixed many HTML related things. Pages are now perfectly validated + as html 4.01 transitional. + - Added dn cleaner to getDN() in order to fix problems with + "broken" ldap databases. + - Added schemata for iplanet, checked if it works. + - Rewrote phonelist, added vcard export. + - Added filters to allmost all plugins. + - Added DNS plugin. + - Generic userinterface cleanups, everything is a template now and can be + redesigned/stripped. + - Improved translations, added missing ones. + - Added choosable templates for mail vacation messages. + - Improved templating stuff to generate user defined auto uids. + - Made user interface more comprehensive, so its important for you + to start with a clean gosa.conf from contrib. + - Added external password change hook, so that its possible to synchronize + with a non samba PDC via scripts. (Some organizations tend to keep a + readable copy of their users password which possible now, too.) + - Updated FAQ + +* gosa 2.0.1 + This release doesn't have feature enhancements (nearly), only + bugfixes reported by users are incorporated. + - Fixed oblivious fields when changing to subdialogs. All + user dialogs were affected + - Made facsimileTelephoneNumber beeing saved without the + need of a fax account + - Fixed printer sorting which destroyed the array index + - Removed redundant fields in terminal configuration + - Made terminal plugin save the terminal hardware information + - Added missing tags to index.php/main.php + - Fixed debian debconf script not to touch uidbase/ridbase + values in gosa.conf + - Fixed "Force ID", which creates a group for the posix + user with forced ID. + - Finetuning in login window behaviour + - Code cleanup and templatized two more plugins + - As requested by some users, you can now advise GOsa not to + create a group for the user, but take an existing group + as primary one. + - Added 'dn cleaner' for the acl list. So syntactically + problematic dn's with strange commata get fixed. + +* gosa 2.0 final + - Made samba3 support work + - Fixed several small bugs with the templating stuff + - Fixed problem with shared folders, added missing attribute + gosaSharedFolderTarget needed in some setups + - Updated icons + - Renamed icons to have more logical names + +* gosa 2.0rc2 + - Corrected mistakenly copied ui object in functions.inc + - Fixed errors when activating new terminals + - Removed krb warnings in class_user.inc + - Plugins user, apps, groups and departments didn't check for + already present entries. Now they do. + - Removed problem in terminal dialog where checkboxes are not + saved + - Fixed ACL handling for users primary group + - Replaced own template class by smarty, since only two files + were affected by this + - Changed basic layout to seperate public readable files from + templates + - Added FAQ, update TODO for next versions + - Made accounts movable between departments + - Added partial spanish translations + - Fixed mail group handling + +* gosa 2.0rc1 + - Switched to XML based gosa.conf + - Cleaned all plugins, moved to children of plugin.conf + - Moved back to gettext for translations + - Added hooks for pre-/post-install scripts + - Cleaned LDAP class + - Added workarounds for MS-IE (>5.5) to render transparent + PNGs in a correct way + - Redesigned login screen / some plugins + - Added hooks for eGOsa, which is a java applet based + browsing tool + - Switched from user based ACLs to group based ACLs, + removed standalone ACL plugin in favor of new group tab. + - Fixed samba2 rid generation (btw. still missing is sid + support for samba3. But this will go into the final.) + - Fixed many minor bugs + - Introduced simple theming support + - Added 'dn'-renaming for accounts + +Changelog starts with latest Beta 1.99.97 diff --git a/DEVEL b/DEVEL new file mode 100644 index 000000000..b67c82cfd --- /dev/null +++ b/DEVEL @@ -0,0 +1,131 @@ +* How to get plugged in + +Lets explain how to create a simple GOsa plugin. The example shows a dummy plugin which is not +directly related with LDAP. Independently of beeing an LDAP style or LDAP unrelated plugin, you +may start a new plugin, by creating a new directory below the plugin directory structure. To be up to +date, get a fresh CVS checkout: + +Create a ~/.cvsrc with the following content: +cvs -z4 -q +diff -u3 -p +update -dP +checkout -P + +Change to the directory which will contain your GOsa checkout. +# cd ~projects +# export CVSROOT=:pserver:anonymous@cvs.alioth.debian.org:/cvsroot/gosa +# cvs login +# cvs co gosa + +The gosa directory will contain your initial checkout now. In order to update from CVS +you simply can call "cvs up". There's no need to set the CVSROOT directory anymore, +as long as you cal all cvs commands inside the gosa directory and its subdirectories. + +Now you've an up to date GOsa. Not that this is CVS HEAD, so there may be something +broken. Continue by choosing a name and creating the directories: + +# cd plugins/addons +# mkdir dummyplug && cd dummyplug + +GOsa expects a file named "main.inc" inside of this plugin directory. It is needed because some +plugins may need no standard handling and GOsa itself may not know how to initialize the plugin +classes. Here's our example: + +--- +execute (); + + /* The ignore field controls if GOsa should ignore the users tries to leave the plugin without + saving. For the dummy plugin, you can leave all the time without loosing data. */ + $display.= "\n"; + + /* After executing the plugin, some data may have changed, so we need to put the plugin back + to the session. */ + $_SESSION['export']= $export; +?> +--- + +The basic starter for your plugin is ready now. We're missing the plugin itself currently. To create it, +you need to create a file starting with class_ and ending with .inc. These files get sourced automatically. + +Here's the class_dummy.inc: + +--- +config= $config; + } + + /* Execute is the function all plugins need. It fills the plugin with life and produces the output. */ + function execute() + { + /* Use the smarty templating engine here... */ + $smarty= get_smarty(); + + /* Normally you would react to user input here. */ + + /* Let smarty fetch and process the page. Always seperate PHP and HTML as much as + you can. */ + return ($smarty->fetch (get_template_path('contents.tpl', TRUE))); + } + +} +?> +--- + +There are two things missing now. The template file and an entry in your gosa.conf. Lets finish the +work in the plugin directory, first. + +Here is the contents.tpl file: + +--- +

+ {t}This is a dummy plugin. It really does nothing. The tags around this text do automatic translations to the desired language. Please don't include linefeeds here, or it will not work at all!{/t} +

+ +

+   +

+--- + +Now add the following entry to your Addons section in gosa.conf: +-- + +-- + +After logging into GOsa, you'll see your plugin in the addons section. + diff --git a/FAQ b/FAQ new file mode 100644 index 000000000..927b4c843 --- /dev/null +++ b/FAQ @@ -0,0 +1,286 @@ +This is the textual form of the GOsa FAQ. Online information with +comments is set up at Wiki: http://wiki.subnet.at/gosa/, thanks to +Markus Amersdorfer. + +Q: When creating many users for one department, I need to fill some + fields again and again. Is there a shortcut for that? + +A: Just create a user template and pre-fill all values you need. You + can use dynamic content, too: uid, sn and givenName will be replaced. + i.E. an entry '/home/%uid' in homeDirectory will be replaced by the + real uid of the user you're creating, %sn.%givenName@yourdomain.com + creates proper email addresses, etc. Templates include group membership. + + +Q: Can GOsa execute commands after creating/editing/removing users, + departments, etc. + +A: Yes. Edit /etc/gosa/gosa.conf's menu section. Each plugin may have + an entry "postremove", "postmodify" and "postcreate". You can use + ldap attributes as command line options. + i.E. postcreate="/usr/bin/sudo /usr/local/sbin/ftp.setperms %uid '%givenName'" + + +Q: I'd like to modify the look of GOsa to fit our CI. How can I create an + own theme? + +A: Themes are splitted into two parts. ihtml/ contains templates which + generate the ui, html/ contains all parts that must be readable from + clients. GOsa first looks for predefined files in the directory indirectly + defined via the "theme" parameter in /etc/gosa/gosa.conf. If it can't + find them here, it'll use the default one. + + So start over by copying html/themes/default to html/themes/yourtheme + and ihtml/themes/default to ihtml/themes/yourtheme. Change gosa.conf to + contain theme="yourtheme" in section main. Here are some files to edit: + + * login.tpl -> login screen + * framework.tpl -> page contents + * style.css -> stylesheets used by GOsa + + In fact, the rest of the UI is not converted to smarty, yet. Please be + patient. + + +Q: How can I let a person do administrative tasks under a specific department? + +A: Create a group inside this department. Put all administrative people inside, + go to the "ACL" tab and check all fields these users should be able to adminstrate. + + +Q: How can I permit users to change some of their own attributes? + +A: Same like the point above, but this rule only works for users own attributes + by checking the box on the acl page. + + +Q: What about applications? + +A: GOsa can manage desktop applications in ldap. Create a group and put all users + in there, which have common desktop settings. Go to the "Application" tab and + add all applications common to this group. Applications can be created from the + application plugin. + The idea behind this feature is a script running on the terminal-servers/ + workstation which check for applications on login (or on a regular basis using + timestamps). This one will create the corresponding icons on your KDE or GNOME + desktop. + + +Q: What's this terminal stuff? + +A: GOto is - similar to LTSP - a ldap based diskless client system. It is available + from our projects page. + + +Q: I can't select any mailservers. What's wrong? + +A: LDAP stores information about all your servers. The server plugin is not ready + yet, so you've to adjust/add these entries using your favorite ldap tool. + + +Q: GOsa is not in my native language, can I translate it to my language? + +A: Yes. Just go to the locale directory and copy the messages.po file somewhere + else. Edit the copy and put your translations into the msgstr lines. To be + included in next GOsa releases, you may want to send it to the GOsa maintainer. + Finally you need to create a directory with your language code. (i.e. de for + german) containing the LC_MESSAGES directory. Move your messages.po file there + and run 'msgfmt messages.po' in that directory. That's it. + + You may need to restart apache, depending on your setup. On Debian, be sure + to have your locale generated (dpkg-reconfigure locales) before. + + +Q: Can I specify some kind of password policies? + +A: You can place the keywords "pwminlen" and "pwdiffer" in the main section of your + gosa.conf. "pwminlen" specifies how many characters a password must have to be + accepted. "pwdiffer" contains the number of characters that must be different + from the previous password. + + Note that these only affect passwords that are set by the user, not by the admins. + + +Q: I've to update passwords on external windows PDCs. Can I add a command to let + synchronize these for me? + +A: There's the possibility to add a password hook in gosa.conf's main section using + the keyword "externalpwdhook". The specified command will be executed with + three parameters: /path/to/your/script username oldpassword newpassword + + So you can call i.e. smbpasswd to handle your password change on the PDC. + + +Q: What about templates for vacation messages? + +A: Create a directory to keep a set of vacation messages which are readable by the + user that runs your apache. In this example I'll use /etc/gosa/vacation for that. + + Put your vacation files in there containing a "DESC:some descriptive text" as the + first line followed by the normal vacation text. You can use all attributes from + the generic tab. I.e.: + + /etc/gosa/vacation/business.txt ------------------------------------------------->8 + DESC:Away from desk + Hi, I'm currently away from my desk. You can contact me on + my cell phone via %mobile. + + Greetings, + %givenName %sn + ----------------------------------------------------------------------------------- + + Place the config option vacationdir="/etc/gosa/vacation" in the location found in + gosa.conf and a template box is show in the vacation mail tab. + + +Q: How can I generate automatic ID's for user templates? + +A: Add an entry describing your id policy in gosa.conf, location section: + + a) using attributes + You can specify LDAP attributes (currently only sn and givenName) in braces {} + and add a percent sign befor it. Optionally you can strip it down to a number + of characters, specified in []. I.e. + + idgen="{%sn}-{%givenName[2-4]}" + + will generate an ID using the full surename, adding a dash, and adding at least + the first two characters of givenName. If this ID is used, it'll use up to four + characters. If no automatic generation is possible, a input box is shown. + + b) using automatic id's + I.e. specifying + + idgen="acct{id:3}" + + will generate a three digits id with the next free entry appended to "acct". + + idgen="ext{id#3}" + + will generate a three digits random number appended to "ext". + + +Q: I'm migrating from the current LDAP, now GOsa does not allow uid's and group + with upper/lower case and spaces. What can I do? + +A: Include the strict="no" keyword in your gosa.conf's location section. + WARNING: using strict="no" will cause problems with cyrus/postfix!! + + +Q: I'd like to place my users under ou=staff, not under ou=people. Can I change + this? + +A: Yes. You can change the people and group locations by adding the following + statements to your location sections: + + people="ou=staff" + groups="ou=crowds" + + After logging in again, people and groups are created in the configured places. + As a side note, you can leave these strings blank for flat structures, too. + + +Q: I've problems with many objectClass violations/undefined attributes. Can GOsa + check what's missing? + +A: Yes. Move away your gosa.conf and go to the GOsa setup. Follow the steps till + you can download the config. If you get up to this point, your schema is ok... + + +Q: I really don't want dn's containing the CN for user accounts because I don't + want to support anonymous binds for uid resolution. Is it possible to have dn's + containing the uid instead? + +A: Yes. Placing the dnmode="uid" keyword in your gosa.conf's location section will + solve your problem. + + +Q: Hey, I've installed GOsa, but it claims something about "SID and / or RIDBASE + are missing in your configuration". What's wrong? + +A: You've configured GOsa to use samba3, but your LDAP has no samba domain object + inside. Either log into samba for the first time to let it create that object, + or supply the sid and ridbase for your domain in your gosa.conf's location, i.e.: + + + ... + ridbase="1000" + sid="0-815-4711" \> + + Remember to fill in your real domain sid which is retrievable by the command + "net getlocalsid". + + +Q: We have massive performance problems with using samba as a member server. + +A: This is a known issue. We're working around this by putting + + + ... + sambaidmapping="true" + ... \> + + into the configuration. GOsa will write the additional objectClass sambaIdmapEntry + to the group and user objects. + + +Q: I get 'The value specified as GID/UID number is too small' when forcing IDs. Why? + +A: This is an additional security feature, so that no one can fall back to uid 0. The + default minimum ID is 100. You can set it to every value you like by specifying + + + ... + minid="40" + ... \> + + in your configuration. In this example 40 will be the smallest ID you can enter. + + +Q: Aahhrg. I've updated to a new version and my gosa.conf seems to be broken. + +A: Some parameters have changed. Please call the fix_config.sh script which is in + the contrib directory. + + +Q: I've saved my windows workstations in other locations like GOsa is doing it + for decades. Is there a way to change this? + +A: Yes. Use the winstation parameter in your location section: + + + ... + winstations="ou=machineaccounts" + ... \> + + +Q: GOsa doesn't seem to follow my referrals. What can I do? + +A: Place the option 'recursive = "true"' inside your locations definition + and you should be fine. + + +Q: I'd like to have TLS based LDAP connections from within GOsa. Is this possible? + +A: Yes, add + +
+ ... + tls="true" + ... \> + + to the main section of GOsa. This switch affects all LDAP connections. + + +Q: Cyrus folder get created in the style user.username. I prefer the unix hirachy + style user/username. Is it possible to change this? + +A: Yes, add + +
+ ... + cyrusunixstyle="true" + ... \> + + to the main section of GOsa and the folders are created in unix style. + diff --git a/INSTALL b/INSTALL new file mode 100644 index 000000000..126559357 --- /dev/null +++ b/INSTALL @@ -0,0 +1,109 @@ +GOsa2.1 QUICK INSTALL +===================== + +* Installing GOsa + +Unpack the GOsa tarball and move the main gosa directory to +a place your webserver is configured to find it. The default +location will be /usr/share/gosa. For later reference, I assume +that you've choosen this path, too. + +Create the directory /var/spool/gosa for the smarty compile directory. +Make it read/write for the webserver (additional chmod 770). You may +want to move it elsewhere, configure it in gosa.conf. + +Create the configuration directory /etc/gosa and make sure +that your webserver can read it. + +As a summmary, you now have these directories for GOsa: + +/etc/gosa +/var/spool/gosa +/usr/share/gosa + +After this has been done, include settings for GOsa in your apache +config: + +# Set alias to gosa +Alias /gosa /usr/share/gosa/html + +Assumed you've installed PHP >= 4.1.0, restart your apache webserver +and do your first GOsa dry run without configuration: + +http[s]://your-server/gosa/setup.php + +GOsa setup will perform some basic system checks about general +prerequisites. The setup asks some questions and provides a +basic gosa.conf to save in /etc/gosa. Follow the instructions +until you're able to log in. + +As a final step - which is not done automatically yet, you've to +create a group which members will be GOsa administrators. Here's +an example ldif which creates a user named "admin" with the password +"tester" and a group where this user is in: + +dn: cn=admin,ou=people,dc=example,dc=net +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: gosaAccount +uid: admin +cn: admin +givenName: admin +sn: GOsa main administrator +lmPassword: 10974C6EFC0AEE1917306D272A9441BB +ntPassword: 38F3951141D0F71A039CFA9D1EC06378 +userPassword:: dGVzdGVy + +dn: cn=administrators,ou=groups,dc=example,dc=net +objectClass: gosaObject +objectClass: posixGroup +gosaSubtreeACL: :all +cn: administrators +gidNumber: 999 +memberUid: admin + +After adding these entries, you should be able to use GOsa. Log in as +admin and try experiment with the GUI. + + +* Migrating an existing tree + +To migrate an existing LDAP tree, you've to do all steps from above, +plus some modifications: + +- GOsa only shows users that have the objectClass gosaAccount + This one has been introduced for several reasons. First, there are + cases you want to hide special accounts from regular admins (i.e. + a samba admin account which is used to log windows machines into + their domain, where chaning a password by accident has bad consequences). + Secondly the gosaAccount keeps the lm/nt password hashes and the + attributes for the last password change - with the consequence that + adding a samba account "later" will not require the user to reset + the password. + +- GOsa only recognizes subtrees (or departments in GOsa's view of things) + that have the objectClass gosaDepartment. You can hide subtrees from GOsa + by not putting this objectClass inside. + +- You need at least one group with objectClass gosaObject and attribute + gosaSubtreeACL set to :all in the base of your tree. All members of this + group are able to change everything in GOsa. Look at the cn=administrators + from above. + +That should be all. Entries should be visible in GOsa now. Be aware that if +your naming policy of user cn's differs from the way GOsa handles it, the +entries get rewritten to a GOsa style dn. + + +* More informations + +To improve this piece of software, please report all kind of errors. +Looking for a mailing list? Go to + +https://oss.gonicus.de/cgi-bin/mailman/listinfo/gosa/ + +Thanks + +--- +Cajus Pollmeier diff --git a/README b/README new file mode 100644 index 000000000..53e71bd2b --- /dev/null +++ b/README @@ -0,0 +1,55 @@ +GOsa2.1 README +============== + +* Information + +GOsa is a LDAP administration frontend for user administration. It +is NO GENERIC frontend to dictionary servers. Informations are stored +in the way the underlying conecpts suppose them to be stored (i.e. +people accounts are stored in "ou=people" subtrees, etc.) This can +be configured marginally. + +Additionally, eGOsa is a java-applet based extension to GOsa made by +Alejandro Escanero Blanco . + +Complete setups applying Kerberos, AFS, LDAP, Mail, Proxy and Fax setups +are not trivial at all. You should be familiar with these components and +with your UNIX installation, of cause. This file is (and will not be) +an introduction to any of these components. See INSTALL for a quick +overview about what to do, to get the things up and running. A complete +GOsa infrastructure howto is work in progress and not released yet. + + +* Translations + +GOsa is not available in your native language? Just take the message.po +file out of the locales directory and put your translations into the +msgstr fields. You may look at the de/LC_MESSAGES for the way how it +works. + +If you're ready with that, create a directory for your language using +the ISO shortcuts (i.e. es for spain) with a subdirectory LC_MESSAGES. +Put your messages.po in there and run "msgfmt messages.po" from that +directory. Make sure your apache has locale support or, in case of debian, +that the specific locale will be generated (via dpkg-reconfigure locales). + +You may want your translations to be included in the main GOsa repository, +then just send the .po file to me. + + +* NOTES + +You'll need php-cups (http://www.cups.org) and php-krb5 (pear) in order +to get full functionality. To make shared folders work in a proper way, +you either need a recent PHP or a patched one for the get_acl functions +(see contrib/patches). Basically GOsa will run without these. + +Be sure that 'gosaUserTemplates' are not able to log into your server, +since they may have no password set. Example configs can be found in +the contrib directory. + +Have fun! + +--- +Cajus Pollmeier + diff --git a/README.openxchange b/README.openxchange new file mode 100644 index 000000000..e60974aa2 --- /dev/null +++ b/README.openxchange @@ -0,0 +1,41 @@ +### Small tutorial for use GOsa with open-xchange ### + +Once installed open-xchange (http://www.open-xchange.org) and php4-pgsql +module we must do some changes to get open-xchange running with GOsa. + +- php.ini must have extension=pg_sql.so + +- The webserver must have access to the Postgresql server. + +- In the connectivity section of gosa.conf must have something like this: + + +- In the configuration of open-xchange we must make this changes to ldap.properties: +com.openexchange.groupware.ldap.OXUserObjectAttributeimapServerName=imapServer +TO: +com.openexchange.groupware.ldap.OXUserObjectAttributeimapServerName=gosaMailServer + +com.openexchange.groupware.ldap.OXUserObjectAttributesmtpServerName=smtpServer +TO: +com.openexchange.groupware.ldap.OXUserObjectAttributesmtpServerName=gosaMailServer + +com.openexchange.groupware.ldap.OXUserObjectAttributeuserCountryName=userCountry +TO: +com.openexchange.groupware.ldap.OXUserObjectAttributeuserCountryName=st + +- And this changes to admintools.conf: + +USERS_BASEDN="ou=people,dc=example,dc=org" +GROUP_BASEDN="ou=groups,dc=example,dc=org" + +We suppose that the GOsa Base is "dc=example,dc=org" + + + +This configuration is based in documentation gets from +http://www.open-xchange.org/oxwiki/OX_20with_20existing_20LDAP_20DIT diff --git a/README.safemode b/README.safemode new file mode 100644 index 000000000..e43434059 --- /dev/null +++ b/README.safemode @@ -0,0 +1,14 @@ +In order to run GOsa in PHP's safe mode, these changes in your php.ini +have been tested: + +magic_quotes_qpc = On +allow_url_fopen = No +register_globals = Off +safe_mode = On +safe_mode_include_dir = "/usr/share/gosa:/var/spool/gosa" +safe_mode_exec_dir = "/usr/lib/gosa" +safe_mode_allowed_env_vars = PHP_,LANG +open_basedir = "/etc/gosa:/var/spool/gosa:/var/cache/gosa:/usr/share/gosa:/tmp" +include_path = ".:/usr/share/php:/usr/share/gosa:/var/spool/gosa:/usr/share/gosa/safe_bin" +disable_functions = system, shell_exec, passthru, phpinfo, show_source + diff --git a/TODO b/TODO new file mode 100644 index 000000000..ff35559ba --- /dev/null +++ b/TODO @@ -0,0 +1,69 @@ +Things to fix in 2.3.9: +======================= + +* Basic server support (misc is still missing) + +* Finish kolab integration + - mail groups + - shared folders + - server + - setup + +* Make it "barrierefrei" + + +Target for 2.4: +=============== + +* Replace PHP IMAP module by self made module + +* Add possibility to add referrals in department dialog + +* Add sambaWorkingHours + +* Fine tuning in Kerberos support + Special kerberos attributes like ticket expiery and policies can't + be handeled with GOsa right now this has to be added in later releases. + +* Server-/Workstation management + This has been removed because of inconsistencies. Will be back soon: + - support for dhcp + - attributes for ldap-, ntp-, nfs-, imap- and print-servers + +* SSL + User certificates are only shown as "absent" or "present", because the + SSL PHP module isn't buildable in the moment. I'll check this later on. + (Notes: + openssl x509 -outform DER -in incert.pem -out outcert.der + ldif -b "usercertificate;binary" < outcert.der > cert.ldif + print_r(openssl_x509_parse ($this->userCertificate)); + ) + +* Rework ACL stuff, use experimental (native) LDAP ACLs / get ACLs from classes + The complete ACL dialog stinks. If every dialog is done by smarty, we could + use a shrinked version of each dialog with checkboxes, to let the admin decide + what fields could be edited. + +* Documentation + - End user documentation: online help + - Administrators documentation: how to install / contributed scripts, etc. + - Developer documentation: how to extend, own plugins, themes, etc. + +* amavis-new support + +* Automatic passwords? + Generate a password for a newly created user and display it. + +* Make IMAP namespace configurable + +* Try RDN style for unique names + +* Object Groups should have member tabs depending of the grouped object types + + +Target > 2.3: +============= + +* OpenAFS support + Still completely missing... + diff --git a/bin/gosa b/bin/gosa new file mode 100755 index 000000000..f4a4f10e7 --- /dev/null +++ b/bin/gosa @@ -0,0 +1,111 @@ +#!/usr/bin/php4 -q +data["MAIN"]["DEFAULT"])){ + echo "Error: need at least a defined default location in gosa.conf"; + exit (1); +} +$location= $config->data["MAIN"]["DEFAULT"]; +for ($i= 1; $iset_current($location); + +/* Check for plugin list / help */ +for ($i= 1; $i diff --git a/bin/mkntpasswd b/bin/mkntpasswd new file mode 100755 index 000000000..e14b057b2 --- /dev/null +++ b/bin/mkntpasswd @@ -0,0 +1,3 @@ +#!/bin/sh +perl -MCrypt::SmbHash -e "ntlmgen \"\$ARGV[0]\", \$lm, \$nt; print \"\${lm}:\${nt}\n\";" $1 +exit 0 diff --git a/contrib/altlinux/etc/cyrus.conf b/contrib/altlinux/etc/cyrus.conf new file mode 100644 index 000000000..4ada8431e --- /dev/null +++ b/contrib/altlinux/etc/cyrus.conf @@ -0,0 +1,43 @@ +# standard standalone server implementation + +START { + # do not delete this entry! + recover cmd="ctl_cyrusdb -r" + + # this is only necessary if using idled for IMAP IDLE +# idled cmd="idled" +} + +# UNIX sockets start with a slash and are put into /var/lib/imap/socket +SERVICES { + # add or remove based on preferences + imap cmd="imapd" listen="imap" prefork=5 +# imaps cmd="imapd -s" listen="imaps" prefork=1 + pop3 cmd="pop3d" listen="pop3" prefork=3 +# pop3s cmd="pop3d -s" listen="pop3s" prefork=1 + sieve cmd="timsieved" listen="sieve" prefork=0 +# smmapd cmd="smmapd" listen="/var/lib/imap/socket/smmapd" prefork=1 + + # these are only necessary if receiving/exporting usenet via NNTP +# nntp cmd="nntpd" listen="nntp" prefork=3 +# nntps cmd="nntpd -s" listen="nntps" prefork=1 + + # at least one LMTP is required for delivery +# lmtp cmd="lmtpd" listen="lmtp" prefork=0 + lmtpunix cmd="lmtpd" listen="/var/spool/postfix/public/lmtp" prefork=1 + + # this is only necessary if using notifications +# notify cmd="notifyd" listen="/var/lib/imap/socket/notify" proto="udp" prefork=1 +} + +EVENTS { + # this is required + checkpoint cmd="ctl_cyrusdb -c" period=30 + + # this is only necessary if using duplicate delivery suppression, + # Sieve or NNTP + delprune cmd="cyr_expire -E 3" at=0400 + + # this is only necessary if caching TLS sessions + tlsprune cmd="tls_prune" at=0400 +} diff --git a/contrib/altlinux/etc/gosa/gosa.conf b/contrib/altlinux/etc/gosa/gosa.conf new file mode 100644 index 000000000..d1ceab343 --- /dev/null +++ b/contrib/altlinux/etc/gosa/gosa.conf @@ -0,0 +1,170 @@ + + + +
+ + + + + + + + + +
+ +
+ + + + + + + +
+ +
+ + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + +
+
+ + diff --git a/contrib/altlinux/etc/imapd.conf b/contrib/altlinux/etc/imapd.conf new file mode 100644 index 000000000..5ae2d9b5f --- /dev/null +++ b/contrib/altlinux/etc/imapd.conf @@ -0,0 +1,210 @@ +# In more detail to look in man 5 imapd.conf + +#@include: + +admins: cyrus + +#afspts_localrealms: +#afspts_mycell: + +#allowallsubscribe: 0 +#allowanonymouslogin: 0 +allowapop: 0 +#allownewnews: 0 +allowplaintext: 1 +#allowusermoves: 0 +#altnamespace: 0 +sasl_mech_list: plain + +annotation_db: skiplist + +autocreatequota: 10240 +#createonpost: 0 +#autocreateinboxfolders: +#autosubscribeinboxfolders: +#autosubscribesharedfolders: + +#berkeley_cachesize: 512 +#berkeley_locks_max: 50000 +#berkeley_txns_max: 100 + + +configdirectory: /var/lib/imap +#debug_command: +#defaultacl: anyone lrs + +#defaultdomain: taf.ru +#defaultpartition: default +#deleteright: c + +duplicate_db: berkeley-nosync +duplicatesuppression: 0 + +#foolstupidclients: 0 +#force_sasl_client_mech: +#fulldirhash: 0 + +hashimapspool: 1 +#hostname_mechs: +#hostname_password: + +idlesocket: /var/lib/imap/socket/idle +#ignorereference: 0 +#imapidlepoll: 60 +imapidresponse: 0 +#imapmagicplus: 0 +#implicit_owner_rights: lca + +#ldap_authz: +#ldap_base: +#ldap_bind_dn: +#ldap_deref: never +#ldap_filter: +#ldap_group_base: +#ldap_group_filter: (cn=%u) +#ldap_group_scope: sub +#ldap_id: +#ldap_mech: +#ldap_member_attribute: +#ldap_member_base: +#ldap_member_filter: (member=%D) +#ldap_member_method: attribute +#ldap_member_scope: sub +#ldap_password: +#ldap_realm: +#ldap_referrals: 0 +#ldap_restart: 1 +#ldap_sasl: 1 +#ldap_sasl_authc: +#ldap_sasl_authz: +#ldap_sasl_mech: +#ldap_sasl_password: +#ldap_sasl_realm: +#ldap_scope: sub +#ldap_servers: ldap://localhost/ +#ldap_size_limit: 1 +#ldap_start_tls: 0 +#ldap_time_limit: 5 +#ldap_timeout: 5 +#ldap_tls_cacert_dir: +#ldap_tls_cacert_file: +#ldap_tls_cert: +#ldap_tls_check_peer: 0 +#ldap_tls_ciphers: +#ldap_tls_key: +#ldap_uri: +#ldap_version: 3 + + + +lmtp_downcase_rcpt: 1 +lmtp_over_quota_perm_failure: yes +#lmtpsocket: {configdirectory}/socket/lmtp +lmtpsocket: /var/spool/postfix/public/lmtp + +#loginrealms: +#loginuseacl: 0 +#logtimestamps: 0 + +#mailnotifier: +#maxmessagesize: 0 + +mboxlist_db: skiplist + +#mupdate_connections_max: 128 +#mupdate_authname: +#mupdate_password: +#mupdate_port: 3905 +#mupdate_realm: +#mupdate_retry_delay: 20 +#mupdate_server: +#mupdate_workers_start: 5 +#mupdate_workers_minspare: 2 +#mupdate_workers_maxspare: 10 +#mupdate_workers_max: 50 +#mupdate_username: + +#netscapeurl: http://asg.web.cmu.edu/cyrus/imapd/netscape-admin.html + +#newsmaster: news +#newspeer: +#newspostuser: +#newsprefix: +#notifysocket: {configdirectory}/socket/notify + +partition-default: /var/spool/imap +#partition-name: +#plaintextloginpause: 0 + +#popexpiretime: -1 +#popminpoll: 0 +poptimeout: 5 +#postmaster: postmaster +#postuser: +#proxy_authname: proxy +#proxy_password: +#proxy_realm: +#proxyd_allow_status_referral: 0 +#proxyservers: + +#ptloader_sock: + +#ptscache_db: berkeley +#ptscache_timeout: 10800 +#ptskrb5_convert524: 1 + +#quota_db: quotalegacy +#quotawarn: 90 +#quotawarnkb: 0 + +# If you want to have 8-bit symbols in 'Subject' the +# reject8bit should matter 0 +reject8bit: 0 + +#rfc2046_strict: 0 +#rfc3028_strict: 1 + +#sasl_auto_transition: 0 +#sasl_maximum_layer: 256 +#sasl_minimum_layer: 0 +#sasl_option: 0 +sasl_pwcheck_method: saslauthd + +seenstate_db: skiplist + +sendmail: /usr/sbin/sendmail +servername: example.com + +#sharedprefix: Shared Folders +#sieve_maxscriptsize: 32 +#sieve_maxscripts: 5 +sievedir: /var/lib/imap/sieve +#sievenotifier: +#sieveusehomedir: 0 + +#singleinstancestore: 1 +#skiplist_unsafe: 0 +#soft_noauth: 1 +#srvtab: + +subscription_db: flat + +#syslog_prefix: + +#temp_path: /tmp +#timeout: 30 +#tls_ca_file: +#tls_ca_path: +#tlscache_db: berkeley-nosync +#tls_cert_file: /var/lib/ssl/certs/cyrus-imapd.pem +#tls_cipher_list: DEFAULT +#tls_key_file: /var/lib/ssl/certs/cyrus-imapd.pem +#tls_require_cert: 0 +#tls_session_timeout: 1440 + +#umask: 077 +username_tolower: 1 +#userprefix: Other Users +#unix_group_enable: 1 +#unixhierarchysep: 0 +#virtdomains: on diff --git a/contrib/altlinux/etc/ldap.conf b/contrib/altlinux/etc/ldap.conf new file mode 100644 index 000000000..c245047c4 --- /dev/null +++ b/contrib/altlinux/etc/ldap.conf @@ -0,0 +1,227 @@ +# @(#)$Id: ldap.conf,v 1.1 2004/09/16 06:46:19 migor-guest Exp $ +# +# This is the configuration file for the LDAP nameservice +# switch library and the LDAP PAM module. +# +# PADL Software +# http://www.padl.com +# + +# Your LDAP server. Must be resolvable without using LDAP. +# Multiple hosts may be specified, each separated by a +# space. How long nss_ldap takes to failover depends on +# whether your LDAP client library supports configurable +# network or connect timeouts (see bind_timelimit). +#host 127.0.0.1 + +# The distinguished name of the search base. +base dc=example,dc=com + +# Another way to specify your LDAP server is to provide an +# uri with the server name. This allows to use +# Unix Domain Sockets to connect to a local LDAP Server. +uri ldap://127.0.0.1/ +#uri ldaps://127.0.0.1/ +#uri ldapi://%2fvar%2frun%2fldapi_sock/ +# Note: %2f encodes the '/' used as directory separator + +# The LDAP version to use (defaults to 3 +# if supported by client library) +ldap_version 3 + +# The distinguished name to bind to the server with. +# Optional: default is to bind anonymously. +#binddn cn=proxyuser,dc=example,dc=com + +# The credentials to bind with. +# Optional: default is no credential. +#bindpw secret + +# The distinguished name to bind to the server with +# if the effective user ID is root. Password is +# stored in /etc/ldap.secret (mode 600) +#rootbinddn cn=manager,dc=example,dc=com + +# The port. +# Optional: default is 389. +#port 389 + +# The search scope. +#scope sub +#scope one +#scope base + +# Search timelimit +#timelimit 30 + +# Bind/connect timelimit +#bind_timelimit 30 + +# Reconnect policy: hard (default) will retry connecting to +# the software with exponential backoff, soft will fail +# immediately. +#bind_policy hard + +# Idle timelimit; client will close connections +# (nss_ldap only) if the server has not been contacted +# for the number of seconds specified below. +#idle_timelimit 3600 + +# Filter to AND with uid=%s +#pam_filter objectclass=account + +# The user ID attribute (defaults to uid) +#pam_login_attribute uid + +# Search the root DSE for the password policy (works +# with Netscape Directory Server) +#pam_lookup_policy yes + +# Group to enforce membership of +#pam_groupdn cn=PAM,ou=Groups,dc=example,dc=com + +# Group member attribute +#pam_member_attribute uniquemember + +# Template login attribute, default template user +# (can be overriden by value of former attribute +# in user's entry) +#pam_login_attribute userPrincipalName +#pam_template_login_attribute uid +#pam_template_login nobody + +# HEADS UP: the pam_crypt, pam_nds_passwd, +# and pam_ad_passwd options are no +# longer supported. + +# Do not hash the password at all; presume +# the directory server will do it, if +# necessary. This is the default. +#pam_password clear + +# Hash password locally; required for University of +# Michigan LDAP server, and works with Netscape +# Directory Server if you're using the UNIX-Crypt +# hash mechanism and not using the NT Synchronization +# service. +#pam_password crypt + +# Remove old password first, then update in +# cleartext. Necessary for use with Novell +# Directory Services (NDS) +#pam_password nds + +# Update Active Directory password, by +# creating Unicode password and updating +# unicodePwd attribute. +#pam_password ad + +# Use the OpenLDAP password change +# extended operation to update the password. +#pam_password exop + +# RFC2307bis naming contexts +# Syntax: +# nss_base_XXX base?scope?filter +# where scope is {base,one,sub} +# and filter is a filter to be &'d with the +# default filter. +# You can omit the suffix eg: +# nss_base_passwd ou=People, +# to append the default base DN but this +# may incur a small performance impact. +#nss_base_passwd ou=People,dc=example,dc=com?one +#nss_base_shadow ou=People,dc=example,dc=com?one +#nss_base_group ou=Groups,dc=example,dc=com?one +#nss_base_hosts ou=Hosts,dc=example,dc=com?one +#nss_base_services ou=Services,dc=example,dc=com?one +#nss_base_networks ou=Networks,dc=example,dc=com?one +#nss_base_protocols ou=Protocols,dc=example,dc=com?one +#nss_base_rpc ou=Rpc,dc=example,dc=com?one +#nss_base_ethers ou=Ethers,dc=example,dc=com?one +#nss_base_netmasks ou=Networks,dc=example,dc=com?ne +#nss_base_bootparams ou=Ethers,dc=example,dc=com?one +#nss_base_aliases ou=Aliases,dc=example,dc=com?one +#nss_base_netgroup ou=Netgroup,dc=example,dc=com?one + +# attribute/objectclass mapping +# Syntax: +#nss_map_attribute rfc2307attribute mapped_attribute +#nss_map_objectclass rfc2307objectclass mapped_objectclass + +# configure --enable-nds is no longer supported. +# For NDS now do: +#nss_map_attribute uniqueMember member + +# configure --enable-mssfu-schema is no longer supported. +# For MSSFU now do: +#nss_map_objectclass posixAccount User +#nss_map_attribute uid msSFUName +#nss_map_attribute uniqueMember posixMember +#nss_map_attribute userPassword msSFUPassword +#nss_map_attribute homeDirectory msSFUHomeDirectory +#nss_map_objectclass posixGroup Group +#nss_map_attribute cn msSFUName +#pam_login_attribute msSFUName +#pam_filter objectclass=User +#pam_password ad + +# Alternatively, if you wish to equivalence W2K and POSIX +# groups, change the uniqueMember mapping line to: +#nss_map_attribute uniqueMember member + +# configure --enable-authpassword is no longer supported +# For authPassword support, now do: +#nss_map_attribute userPassword authPassword +#pam_password nds + +# For IBM AIX SecureWay support, do: +#nss_map_objectclass posixAccount aixAccount +#nss_base_passwd ou=aixaccount,?one +#nss_map_attribute uid userName +#nss_map_attribute gidNumber gid +#nss_map_attribute uidNumber uid +#nss_map_attribute userPassword passwordChar +#nss_map_objectclass posixGroup aixAccessGroup +#nss_base_group ou=aixgroup,?one +#nss_map_attribute cn groupName +#nss_map_attribute uniqueMember member +#pam_login_attribute userName +#pam_filter objectclass=aixAccount +#pam_password clear + +# Netscape SDK LDAPS +#ssl on + +# Netscape SDK SSL options +#sslpath /etc/ssl/certs/cert7.db + +# OpenLDAP SSL mechanism +# start_tls mechanism uses the normal LDAP port, LDAPS typically 636 +#ssl start_tls +#ssl on + +# OpenLDAP SSL options +# Require and verify server certificate (yes/no) +# Default is "no" +#tls_checkpeer yes + +# CA certificates for server certificate verification +# At least one of these are required if tls_checkpeer is "yes" +#tls_cacertfile /etc/ssl/ca.cert +#tls_cacertdir /etc/ssl/certs + +# SSL cipher suite +# See man ciphers for syntax +#tls_ciphers TLSv1 + +# Client certificate and key +# Use these, if your server requires client authentication. +#tls_cert +#tls_key + +# Disable SASL security layers. This is needed for AD. +#sasl_secprops maxssf=0 + +# Override the default Kerberos ticket cache location. +#krb5_ccname FILE:/etc/.ldapcache diff --git a/contrib/altlinux/etc/nsswitch.conf b/contrib/altlinux/etc/nsswitch.conf new file mode 100644 index 000000000..5f0d1eb90 --- /dev/null +++ b/contrib/altlinux/etc/nsswitch.conf @@ -0,0 +1,62 @@ +# +# Please refer to nsswitch.conf(5) for more information on this file. +# +# This is the Name Service Switch configuration file. This file should +# be sorted with the most-used databases at the beginning. +# +# Specifying '[NOTFOUND=return]' means that the search for an entry +# should stop if the search with the previous service turned up nothing. +# Note that if the search failed due to some other reason (like no NIS +# server responding) then the search continues with the next service. +# +# Legal name services are: +# +# files Use local files +# tcb Use local tcb shadow files, see tcb(5) +# db Use local database files under /var/db +# nis or yp Use NIS (NIS version 2), also called YP +# nisplus or nis+ Use NIS+ (NIS version 3) +# dns Use DNS (Domain Name Service) +# compat Use NIS in compatibility mode +# hesiod Use Hesiod for user lookups +# [NOTFOUND=return] Stop searching if not found so far +# + +passwd: files ldap +shadow: tcb ldap +group: files ldap + +hosts: files nisplus nis dns + +# To use db, put the "db" in front of "files" for things you want to be +# looked up first in the db files. +# +#passwd: db files nisplus nis +#shadow: db tcb files nisplus nis +#group: db files nisplus nis +# +#hosts: db files nisplus nis dns + +ethers: files +netmasks: files +networks: files +protocols: files +rpc: files +services: files + +# Example - obey only what nisplus tells us... +#services: nisplus [NOTFOUND=return] files +#networks: nisplus [NOTFOUND=return] files +#protocols: nisplus [NOTFOUND=return] files +#rpc: nisplus [NOTFOUND=return] files +#ethers: nisplus [NOTFOUND=return] files +#netmasks: nisplus [NOTFOUND=return] files + +bootparams: nisplus [NOTFOUND=return] files + +netgroup: nisplus + +publickey: nisplus + +automount: files nisplus +aliases: files nisplus diff --git a/contrib/altlinux/etc/openldap/ldap.conf b/contrib/altlinux/etc/openldap/ldap.conf new file mode 100644 index 000000000..eac6d229a --- /dev/null +++ b/contrib/altlinux/etc/openldap/ldap.conf @@ -0,0 +1,17 @@ +# $OpenLDAP: pkg/ldap/libraries/libldap/ldap.conf,v 1.9 2000/09/04 19:57:01 kurt Exp $ +# +# LDAP Defaults +# + +# See ldap.conf(5) for details +# This file should be world readable but not world writable. + +BASE dc=example,dc=com +URI ldap://localhost + +#URI ldap://ldap.example.com ldap://ldap-master.example.com:666 + +#SIZELIMIT 12 +#TIMELIMIT 15 +#DEREF never + diff --git a/contrib/altlinux/etc/openldap/slapd.conf b/contrib/altlinux/etc/openldap/slapd.conf new file mode 100644 index 000000000..37ee30177 --- /dev/null +++ b/contrib/altlinux/etc/openldap/slapd.conf @@ -0,0 +1,311 @@ +# $OpenLDAP: pkg/ldap/servers/slapd/slapd.conf,v 1.23.2.8 2003/05/24 23:19:14 kurt Exp $ +# +# See slapd.conf(5) for details on configuration options. +# This file should NOT be world readable. +# +# [ GLOBAL SETTINGS ] +# Default schemas +include /etc/openldap/schema/core.schema +include /etc/openldap/schema/cosine.schema +include /etc/openldap/schema/inetorgperson.schema +include /etc/openldap/schema/openldap.schema +include /etc/openldap/schema/nis.schema +#include /etc/openldap/schema/misc.schema +#include /etc/openldap/schema/rfc822-MailMember.schema +#include /etc/openldap/schema/kerberosobject.schema +#include /etc/openldap/schema/corba.schema +#include /etc/openldap/schema/java.schema +# Addon schemas +#include /etc/openldap/schema/autofs.schema +#include /etc/openldap/schema/courier.schema +#include /etc/openldap/schema/dnszone.schema +#include /etc/openldap/schema/qmail.schema +#include /etc/openldap/schema/qmailControl.schema +#include /etc/openldap/schema/samba2.schema +include /etc/openldap/schema/samba3.schema +# Experementel schemas +#include /etc/openldap/schema/cron.schema +#include /etc/openldap/schema/trust.schema +#include /etc/openldap/schema/turbo.schema +# Netscape roaming +#include /etc/openldap/schema/mull.schema +#include /etc/openldap/schema/netscape-profile.schema +# Local schema + +# GOSA2 schemas +#include /etc/openldap/schema/local.schema +include /etc/openldap/schema/gohard.schema +include /etc/openldap/schema/goto.schema +include /etc/openldap/schema/gofax.schema +include /etc/openldap/schema/goserver.schema +include /etc/openldap/schema/gosa+samba3.schema +#include /etc/openldap/schema/gosa.schema + +# Specify a set of features (separated by white space) to allow. +allow bind_v2 + +# Do not enable referrals until AFTER you have a working directory +# service AND an understanding of referrals. +#referral ldap://root.openldap.org + +# Specify a desired level of concurrency. Provided to the underlying thread +# system as a hint. The default is not to provide any hint. +concurency 20 + +# Specify the maximum number of pending requests for an anonymous session. If +# requests are submitted faster than the server can process them, they will +# be queued up to this limit. If the limit is exceeded, the session is closed. +#conn_max_pending 100 + +# Specify the maximum number of pending requests for an +# authenticated session. +#conn_max_pending 1000 + +# Specify a default search base to use when client submits a non-base search +# request with an empty base DN. +defaultsearchbase "dc=example,dc=com" + +# A SIGHUP signal will only cause a 'gentle' shutdown-attempt: Slapd will +# stop listening for new connections, but will not close the connections to +# the current clients. +gentlehup on + +# Specify the number of seconds to wait before forcibly closing an idle client +# connection. A idletimeout of 0 disables this feature. +#idletimeout 0 + +# Specify time and size limits based on who initiated an operation. +#sizelimit 500 +#timelimit 60 +#limits anonymous time.soft=60 time.hard=120 +#limits anonymous size.soft=1000 size.hard=1100 size.unchecked=1000 +#limits users time.soft=60 time.hard=120 +#limits users size=1000 +#limits dn.base="ou=People,dc=example,dc=com" size=100 + +# Specify the level at which debugging statements and operation statistics +# should be syslogged (currently logged to the syslogd(8) LOG_LOCAL4 facility). +# Log levels are additive, and available levels are: +# -1 full +# 0 none +# 1 trace function calls +# 2 debug packet handling +# 4 heavy trace debugging +# 8 connection management +# 16 print out packets sent and received +# 32 search filter processing +# 64 configuration file processing +# 128 access control list processing +# 256 stats log connections/operations/results +# 512 stats log entries sent +# 1024 print communication with shell backends +# 2048 entry parsing +#loglevel 256 + +# This option sets the hash to be used in generation of user passwords, stored +# in userPassword, during processing of LDAP Password Modify Extended +# Operations (RFC 3062). The must be one of {SSHA}, {SHA}, {SMD5}, +# {MD5}, {CRYPT}, and {CLEARTEXT}. The default is {SSHA}. +#password-hash {SSHA} + +# The ( absolute ) name of a file that will hold the server's process ID +# if started without the debugging command line option. +pidfile /var/run/slapd.pid +argsfile /var/run/slapd.args +replica-pidfile /var/run/slurpd.pid +replica-argsfile /var/run/slurpd.args + +# Specify a set of conditions (separated by white space) to require (default +# none). The directive may be specified globally and/or per-database. bind +# requires bind operation prior to directory operations. LDAPv3 requires +# session to be using LDAP version 3. authc requires authentication prior to +# directory operations. SASL requires SASL authentication prior to directory +# operations. strong requires strong authentication prior to directory +# operations. The strong keyword allows protected "simple" authentication as +# well as SASL authentication. none may be used to require no conditions +# (useful for clearly globally set conditions within a particular database). +#require none + +# Specify the name of an LDIF(5) file containing user defined attributes for +# the root DSE. These attributes are returned in addition to the attributes +# normally produced by slapd. +#rootDSE /etc/openldap/rootdse.ldif + +# Specify a set of factors (separated by white space) to require. An integer +# value is associated with each factor and is roughly equivalent of the +# encryption key length to require. A value of 112 is equivalent to 3DES, 128 +# to Blowfish, etc.. +# Require integrity protection (prevent hijacking) +# Require 112-bit (3DES or better) encryption for updates +# Require 63-bit encryption for simple bind +#security ssf=1 update_ssf=112 simple_bind=64 + +# Specify the maximum size of the primary thread pool. The default is 16. +#threads 16 + + +# +# [ TLS OPTIONS ] +# +# Permits configuring what ciphers will be accepted and the preference order. +# should be a cipher specification for OpenSSL. +#TLSCipherSuite HIGH:MEDIUM:+SSLv2 + +# Specifies the path of a directory that contains Certificate Authority +# certificates in separate individual files. Usually only one of this or the +# TLSCACertificateFile is used. +#TLSCACertificateFile /etc/openldap/ssl/slapd.pem +#TLSCACertificatePath /etc/openldap/ssl + +# Specifies the file that contains the slapd server certificate. +#TLSCertificateFile /etc/openldap/ssl/slapd.pem + +# Specifies the file that contains the slapd server private key that matches +# the certificate stored in the TLSCertificateFile file. Currently, the private +# key must not be protected with a password, so it is of critical importance +# that it is protected carefully. +#TLSCertificateKeyFile /etc/openldap/ssl/slapd.pem + +# Specifies what checks to perform on client certificates in an incoming TLS +# session, if any. +#TLSVerifyClient never + + +# +# [ ACCESS CONTROL ] +# +# See slapd.access(5) for details +#access to attrs=userPassword +# by self write +# by anonymous auth +# by * none + + +# +# [ BACKEND OPTIONS ] +# +# Load dynamic backend modules: +modulepath /usr/lib/openldap +#moduleload back_dnssrv.la +#moduleload back_ldap.la +moduleload back_bdb.la +#moduleload back_ldbm.la +#moduleload back_meta.la +#moduleload back_monitor.la +#moduleload back_null.la +#moduleload back_passwd.la +#moduleload back_shell.la +#moduleload back_perl.la +#moduleload back_sql.la + +# Options in this section only apply to the configuration file section for the +# specified backend. They are supported by every type of backend. +#backend ldbm +#cachesize 1000 +#dbcachesize 100000 +#dbsync 10 12 5 + + +# +# [ DATABASE OPTIONS ] +# +# Mark the beginning of a new database instance definition. +#database ldbm + +# Specify the DN suffix of queries that will be passed to this backend +# database. Multiple suffix lines can be given and at least one is required for +# each database definition. If the suffix of one database is "inside" that of +# another, the database with the inner suffix must come first in the +# configuration file. +#suffix "dc=example,dc=com" + +# Specify the distinguished name that is not subject to access control or +# administrative limit restrictions for operations on this database. An empty +# root DN (the default) specifies no root access is to be granted. It is +# recommended that the rootdn only be specified when needed (such as when +# initially populating a database). +#rootdn "cn=admin,dc=example,dc=com" + +# Specify a password (or hash of the password) for the rootdn. This option +# accepts all RFC 2307 userPassword formats known to the server (see +# password-hash desription) as well as cleartext. +#rootpw secret + +# Controls whether slapd will automatically maintain the modifiersName, +# modifyTimestamp, creatorsName, and createTimestamp attributes for entries. +#lastmod on + +# Specifies the maximum number of aliases to dereference when trying to resolve +# an entry, used to avoid inifinite alias loops. +#maxderefdepth 1 + +# This option puts the database into "read-only" mode. Any attempts to modify +# the database will return an "unwilling to perform" error. +#readonly on + +# Specify a replication site for this database. Refer to the "OpenLDAP +# Administrator's Guide" for detailed information on setting up a replicated +# slapd directory service. +#replica uri=ldaps://ldap2.example.com/ + +# Specify the name of the replication log file to log changes to. +#replogfile /var/lib/ldap/replica/example.com.replog + +# Specify that the current backend database is a subordinate of another backend +# database. A subordinate database may have only one suffix. This option may be +# used to glue multiple databases into a single namingContext. +#subordinate + +# This option is only applicable in a slave slapd. It specifies the DN allowed +# to make changes to the replica +#updatedn "cn=slave,dc=example,dc=com" + +# Specify the referral to pass back when slapd(8) is asked to modify a +# replicated local database. If specified multiple times, each url is provided. +#updateref "uri=ldap://ldap2.example.com" + +# Specify the directory where the LDBM files containing this database and +# associated indexes live. +#directory /var/lib/ldap/bases/example.com + +# Specify the indexes to maintain for the given attribute (or list of +# attributes). Some attributes only support a subset of indexes.Specify the +# indexes to maintain for the given attribute (or list of attributes). Some +# attributes only support a subset of indexes. +#index objectClass eq +#index uid pres,eq,sub +#index cn pres,eq,sub,subany + +#access to * +# by * read + + +# +# Next database instance +# +database bdb +suffix "dc=example,dc=com" +#rootdn "cn=admin,dc=example,dc=com" +#rootpw secret +directory /var/lib/ldap/bases/example.com + +index objectClass eq +index uid pres,eq +index cn pres,eq,sub,subany +index mail pres,eq +index gosaMailDeliveryMode pres,eq,sub + +access to userPassword + by dn=".*,ou=Admins,dc=example,dc=com" write + by dn="cn=gosa,ou=Apps,dc=example,dc=com" write + by dn="cn=smbpasswd,ou=Apps,dc=example,dc=com" write + by self write + by anonymous auth + by * none + +access to * + by dn=".*,ou=Admins,dc=example,dc=com" write + by dn="cn=gosa,ou=Apps,dc=example,dc=com" write + by dn="cn=smbpasswd,ou=Apps,dc=example,dc=com" write + by * read + diff --git a/contrib/altlinux/etc/postfix/main.cf b/contrib/altlinux/etc/postfix/main.cf new file mode 100644 index 000000000..225bea7ff --- /dev/null +++ b/contrib/altlinux/etc/postfix/main.cf @@ -0,0 +1,596 @@ +# Global Postfix configuration file. This file lists only a subset +# of all 300+ parameters. See the samples/xxx.cf files for a full list. +# +# The general format is lines with parameter = value pairs. Lines +# that begin with whitespace continue the previous line. A value can +# contain references to other $names or ${name}s. +# +# NOTE - CHANGE NO MORE THAN 2-3 PARAMETERS AT A TIME, AND TEST IF +# POSTFIX STILL WORKS AFTER EVERY CHANGE. + +# SOFT BOUNCE +# +# The soft_bounce parameter provides a limited safety net for +# testing. When soft_bounce is enabled, mail will remain queued that +# would otherwise bounce. This parameter disables locally-generated +# bounces, and prevents the SMTP server from rejecting mail permanently +# (by changing 5xx replies into 4xx replies). However, soft_bounce +# is no cure for address rewriting mistakes or mail routing mistakes. +# +#soft_bounce = no + +# INTERNET HOST AND DOMAIN NAMES +# +# The myhostname parameter specifies the internet hostname of this +# mail system. The default is to use the fully-qualified domain name +# from gethostname(). $myhostname is used as a default value for many +# other configuration parameters. +# +#myhostname = host.domain.tld +#myhostname = virtual.domain.tld + +# The mydomain parameter specifies the local internet domain name. +# The default is to use $myhostname minus the first component. +# $mydomain is used as a default value for many other configuration +# parameters. +# +#mydomain = domain.tld + +# SENDING MAIL +# +# The myorigin parameter specifies the domain that locally-posted +# mail appears to come from. The default is to append $myhostname, +# which is fine for small sites. If you run a domain with multiple +# machines, you should (1) change this to $mydomain and (2) set up +# a domain-wide alias database that aliases each user to +# user@that.users.mailhost. +# +# For the sake of consistency between sender and recipient addresses, +# myorigin also specifies the default domain name that is appended +# to recipient addresses that have no @domain part. +# +#myorigin = $myhostname +#myorigin = $mydomain + +# RECEIVING MAIL + +# The inet_interfaces parameter specifies the network interface +# addresses that this mail system receives mail on. By default, +# the software claims all active interfaces on the machine. The +# parameter also controls delivery of mail to user@[ip.address]. +# +# See also the proxy_interfaces parameter, for network addresses that +# are forwarded to us via a proxy or network address translator. +# +# Note: you need to stop/start Postfix when this parameter changes. +# +#inet_interfaces = all +#inet_interfaces = $myhostname +#inet_interfaces = $myhostname, localhost + +# The proxy_interfaces parameter specifies the network interface +# addresses that this mail system receives mail on by way of a +# proxy or network address translation unit. This setting extends +# the address list specified with the inet_interfaces parameter. +# +# You must specify your proxy/NAT addresses when your system is a +# backup MX host for other domains, otherwise mail delivery loops +# will happen when the primary MX host is down. +# +#proxy_interfaces = +#proxy_interfaces = 1.2.3.4 + +# The mydestination parameter specifies the list of domains that this +# machine considers itself the final destination for. +# +# These domains are routed to the delivery agent specified with the +# local_transport parameter setting. By default, that is the UNIX +# compatible delivery agent that lookups all recipients in /etc/passwd +# and /etc/aliases or their equivalent. +# +# The default is $myhostname + localhost.$mydomain. On a mail domain +# gateway, you should also include $mydomain. +# +# Do not specify the names of virtual domains - those domains are +# specified elsewhere (see samples/virtual.cf). +# +# Do not specify the names of domains that this machine is backup MX +# host for. Specify those names via the relay_domains settings for +# the SMTP server, or use permit_mx_backup if you are lazy (see +# samples/smtpd.cf). +# +# The local machine is always the final destination for mail addressed +# to user@[the.net.work.address] of an interface that the mail system +# receives mail on (see the inet_interfaces parameter). +# +# Specify a list of host or domain names, /file/name or type:table +# patterns, separated by commas and/or whitespace. A /file/name +# pattern is replaced by its contents; a type:table is matched when +# a name matches a lookup key (the right-hand side is ignored). +# Continue long lines by starting the next line with whitespace. +# +# DO NOT LIST RELAY DESTINATIONS IN MYDESTINATION. +# SPECIFY RELAY DESTINATIONS IN RELAY_DOMAINS. +# +# See also below, section "REJECTING MAIL FOR UNKNOWN LOCAL USERS". +# +#mydestination = $myhostname, localhost.$mydomain +#mydestination = $myhostname, localhost.$mydomain $mydomain +#mydestination = $myhostname, localhost.$mydomain, $mydomain, +# mail.$mydomain, www.$mydomain, ftp.$mydomain +mydestination = localhost, $myhostname, localhost.$mydomain, $config_directory/mydestination + +# REJECTING MAIL FOR UNKNOWN LOCAL USERS +# +# The local_recipient_maps parameter specifies optional lookup tables +# with all names or addresses of users that are local with respect +# to $mydestination and $inet_interfaces. +# +# If this parameter is defined, then the SMTP server will reject +# mail for unknown local users. This parameter is defined by default. +# +# To turn off local recipient checking in the SMTP server, specify +# local_recipient_maps = (i.e. empty). +# +# The default setting assumes that you use the default Postfix local +# delivery agent for local delivery. You need to update the +# local_recipient_maps setting if: +# +# - You define $mydestination domain recipients in files other than +# /etc/passwd, /etc/postfix/aliases, or the $virtual_alias_maps files. +# For example, you define $mydestination domain recipients in +# the $virtual_mailbox_maps files. +# +# - You redefine the local delivery agent in master.cf. +# +# - You redefine the "local_transport" setting in main.cf. +# +# - You use the "luser_relay", "mailbox_transport", or "fallback_transport" +# feature of the Postfix local delivery agent (see samples/local.cf). +# +# Details are described in the LOCAL_RECIPIENT_README file. +# +# Beware: if the Postfix SMTP server runs chrooted, you probably have +# to access the passwd file via the proxymap service, in order to +# overcome chroot restrictions. The alternative, having a copy of +# the system passwd file in the chroot jail is just not practical. +# +# The right-hand side of the lookup tables is conveniently ignored. +# In the left-hand side, specify a bare username, an @domain.tld +# wild-card, or specify a user@domain.tld address. +# +#local_recipient_maps = unix:passwd.byname $alias_maps +#local_recipient_maps = proxy:unix:passwd.byname $alias_maps +#local_recipient_maps = + +# The unknown_local_recipient_reject_code specifies the SMTP server +# response code when a recipient domain matches $mydestination or +# $inet_interfaces, while $local_recipient_maps is non-empty and the +# recipient address or address local-part is not found. +# +# The default setting is 550 (reject mail) but it is safer to start +# with 450 (try again later) until you are certain that your +# local_recipient_maps settings are OK. +# +unknown_local_recipient_reject_code = 550 + +# TRUST AND RELAY CONTROL + +# The mynetworks parameter specifies the list of "trusted" SMTP +# clients that have more privileges than "strangers". +# +# In particular, "trusted" SMTP clients are allowed to relay mail +# through Postfix. See the smtpd_recipient_restrictions parameter +# in file samples/smtpd.cf. +# +# You can specify the list of "trusted" network addresses by hand +# or you can let Postfix do it for you (which is the default). +# +# By default (mynetworks_style = host), Postfix "trusts" SMTP +# clients of the local machine only. +# +# Specify "mynetworks_style = class" when Postfix should "trust" SMTP +# clients in the same IP class A/B/C networks as the local machine. +# Don't do this with a dialup site - it would cause Postfix to "trust" +# your entire provider's network. Instead, specify an explicit +# mynetworks list by hand, as described below. +# +# Specify "mynetworks_style = subnet" when Postfix should "trust" SMTP +# clients in the same IP subnetworks as the local machine. +# +#mynetworks_style = class +#mynetworks_style = subnet +#mynetworks_style = host + +# Alternatively, you can specify the mynetworks list by hand, in +# which case Postfix ignores the mynetworks_style setting. +# +# Specify an explicit list of network/netmask patterns, where the +# mask specifies the number of bits in the network part of a host +# address. +# +# You can also specify the absolute pathname of a pattern file instead +# of listing the patterns here. Specify type:table for table-based lookups +# (the value on the table right-hand side is not used). +# +#mynetworks = 168.100.189.0/28, 127.0.0.0/8 +#mynetworks = $config_directory/mynetworks +#mynetworks = hash:/etc/postfix/network_table + +# The relay_domains parameter restricts what destinations this system will +# relay mail to. See the smtpd_recipient_restrictions restriction in the +# file samples/smtpd.cf for detailed information. +# +# By default, Postfix relays mail +# - from "trusted" clients (IP address matches $mynetworks) to any destination, +# - from "untrusted" clients to destinations that match $relay_domains or +# subdomains thereof, except addresses with sender-specified routing. +# The default relay_domains value is $mydestination. +# +# In addition to the above, the Postfix SMTP server by default accepts mail +# that Postfix is final destination for: +# - destinations that match $inet_interfaces, +# - destinations that match $mydestination +# - destinations that match $virtual_alias_domains, +# - destinations that match $virtual_mailbox_domains. +# These destinations do not need to be listed in $relay_domains. +# +# Specify a list of hosts or domains, /file/name patterns or type:name +# lookup tables, separated by commas and/or whitespace. Continue +# long lines by starting the next line with whitespace. A file name +# is replaced by its contents; a type:name table is matched when a +# (parent) domain appears as lookup key. +# +# NOTE: Postfix will not automatically forward mail for domains that +# list this system as their primary or backup MX host. See the +# permit_mx_backup restriction in the file samples/smtpd.cf. +# +#relay_domains = $mydestination + +# INTERNET OR INTRANET + +# The relayhost parameter specifies the default host to send mail to +# when no entry is matched in the optional transport(5) table. When +# no relayhost is given, mail is routed directly to the destination. +# +# On an intranet, specify the organizational domain name. If your +# internal DNS uses no MX records, specify the name of the intranet +# gateway host instead. +# +# In the case of SMTP, specify a domain, host, host:port, [host]:port, +# [address] or [address]:port; the form [host] turns off MX lookups. +# +# If you're connected via UUCP, see also the default_transport parameter. +# +#relayhost = $mydomain +#relayhost = gateway.my.domain +#relayhost = uucphost +#relayhost = [an.ip.add.ress] + +# REJECTING UNKNOWN RELAY USERS +# +# The relay_recipient_maps parameter specifies optional lookup tables +# with all addresses in the domains that match $relay_domains. +# +# If this parameter is defined, then the SMTP server will reject +# mail for unknown relay users. This feature is off by default. +# +# The right-hand side of the lookup tables is conveniently ignored. +# In the left-hand side, specify an @domain.tld wild-card, or specify +# a user@domain.tld address. +# +#relay_recipient_maps = hash:/etc/postfix/relay_recipients + +# INPUT RATE CONTROL +# +# The in_flow_delay configuration parameter implements mail input +# flow control. This feature is turned on by default, although it +# still needs further development (it's disabled on SCO UNIX due +# to an SCO bug). +# +# A Postfix process will pause for $in_flow_delay seconds before +# accepting a new message, when the message arrival rate exceeds the +# message delivery rate. With the default 100 SMTP server process +# limit, this limits the mail inflow to 100 messages a second more +# than the number of messages delivered per second. +# +# Specify 0 to disable the feature. Valid delays are 0..10. +# +#in_flow_delay = 1s + +# ADDRESS REWRITING +# +# Insert text from samples/rewrite.cf if you need to do address +# masquerading. +# +# Insert text from samples/canonical.cf if you need to do address +# rewriting, or if you need username->Firstname.Lastname mapping. + +# ADDRESS REDIRECTION (VIRTUAL DOMAIN) +# +# Insert text from samples/virtual.cf if you need virtual domain support. + +# "USER HAS MOVED" BOUNCE MESSAGES +# +# Insert text from samples/relocated.cf if you need "user has moved" +# style bounce messages. Alternatively, you can bounce recipients +# with an SMTP server access table. See samples/smtpd.cf. + +# TRANSPORT MAP +# +# Insert text from samples/transport.cf if you need explicit routing. + +# ALIAS DATABASE +# +# The alias_maps parameter specifies the list of alias databases used +# by the local delivery agent. The default list is system dependent. +# +# On systems with NIS, the default is to search the local alias +# database, then the NIS alias database. See aliases(5) for syntax +# details. +# +# If you change the alias database, run "postalias /etc/postfix/aliases" (or +# wherever your system stores the mail alias file), or simply run +# "newaliases" to build the necessary DBM or DB file. +# +# It will take a minute or so before changes become visible. Use +# "postfix reload" to eliminate the delay. +# +#alias_maps = dbm:/etc/postfix/aliases +alias_maps = hash:/etc/postfix/aliases +#, hash:/var/lib/mailman/etc/aliases +#alias_maps = hash:/etc/postfix/aliases, nis:mail.aliases +#alias_maps = netinfo:/aliases + +# The alias_database parameter specifies the alias database(s) that +# are built with "newaliases" or "sendmail -bi". This is a separate +# configuration parameter, because alias_maps (see above) may specify +# tables that are not necessarily all under control by Postfix. +# +#alias_database = dbm:/etc/postfix/aliases +alias_database = hash:/etc/postfix/aliases +#alias_database = hash:/etc/postfix/aliases, hash:/opt/majordomo/aliases +#virtual_maps = hash:/var/lib/mailman/etc/virtual-mailman + +# ADDRESS EXTENSIONS (e.g., user+foo) +# +# The recipient_delimiter parameter specifies the separator between +# user names and address extensions (user+foo). See canonical(5), +# local(8), relocated(5) and virtual(5) for the effects this has on +# aliases, canonical, virtual, relocated and .forward file lookups. +# Basically, the software tries user+foo and .forward+foo before +# trying user and .forward. +# +#recipient_delimiter = + + +# DELIVERY TO MAILBOX +# +# The home_mailbox parameter specifies the optional pathname of a +# mailbox file relative to a user's home directory. The default +# mailbox file is /var/spool/mail/user or /var/mail/user. Specify +# "Maildir/" for qmail-style delivery (the / is required). +# +#home_mailbox = Mailbox +#home_mailbox = Maildir/ + +# The mail_spool_directory parameter specifies the directory where +# UNIX-style mailboxes are kept. The default setting depends on the +# system type. +# +#mail_spool_directory = /var/mail +#mail_spool_directory = /var/spool/mail + +# The mailbox_command parameter specifies the optional external +# command to use instead of mailbox delivery. The command is run as +# the recipient with proper HOME, SHELL and LOGNAME environment settings. +# Exception: delivery for root is done as $default_user. +# +# Other environment variables of interest: USER (recipient username), +# EXTENSION (address extension), DOMAIN (domain part of address), +# and LOCAL (the address localpart). +# +# Unlike other Postfix configuration parameters, the mailbox_command +# parameter is not subjected to $parameter substitutions. This is to +# make it easier to specify shell syntax (see example below). +# +# Avoid shell meta characters because they will force Postfix to run +# an expensive shell process. Procmail alone is expensive enough. +# +# IF YOU USE THIS TO DELIVER MAIL SYSTEM-WIDE, YOU MUST SET UP AN +# ALIAS THAT FORWARDS MAIL FOR ROOT TO A REAL USER. +# +#mailbox_command = /usr/bin/procmail -a "$EXTENSION" +mailbox_command = /usr/bin/procmail -a $DOMAIN -d $LOGNAME + +# The mailbox_transport specifies the optional transport in master.cf +# to use after processing aliases and .forward files. This parameter +# has precedence over the mailbox_command, fallback_transport and +# luser_relay parameters. +# +# Specify a string of the form transport:nexthop, where transport is +# the name of a mail delivery transport defined in master.cf. The +# :nexthop part is optional. For more details see the sample transport +# configuration file. +# +# NOTE: if you use this feature for accounts not in the UNIX password +# file, then you must update the "local_recipient_maps" setting in +# the main.cf file, otherwise the SMTP server will reject mail for +# non-UNIX accounts with "User unknown in local recipient table". +# +mailbox_transport = lmtp:unix:/public/lmtp +#mailbox_transport = cyrus + +# The fallback_transport specifies the optional transport in master.cf +# to use for recipients that are not found in the UNIX passwd database. +# This parameter has precedence over the luser_relay parameter. +# +# Specify a string of the form transport:nexthop, where transport is +# the name of a mail delivery transport defined in master.cf. The +# :nexthop part is optional. For more details see the sample transport +# configuration file. +# +# NOTE: if you use this feature for accounts not in the UNIX password +# file, then you must update the "local_recipient_maps" setting in +# the main.cf file, otherwise the SMTP server will reject mail for +# non-UNIX accounts with "User unknown in local recipient table". +# +#fallback_transport = lmtp:unix:/private/lmtp +fallback_transport = cyrus +#fallback_transport = + +# The luser_relay parameter specifies an optional destination address +# for unknown recipients. By default, mail for unknown@$mydestination +# and unknown@[$inet_interfaces] is returned as undeliverable. +# +# The following expansions are done on luser_relay: $user (recipient +# username), $shell (recipient shell), $home (recipient home directory), +# $recipient (full recipient address), $extension (recipient address +# extension), $domain (recipient domain), $local (entire recipient +# localpart), $recipient_delimiter. Specify ${name?value} or +# ${name:value} to expand value only when $name does (does not) exist. +# +# luser_relay works only for the default Postfix local delivery agent. +# +# NOTE: if you use this feature for accounts not in the UNIX password +# file, then you must specify "local_recipient_maps =" (i.e. empty) in +# the main.cf file, otherwise the SMTP server will reject mail for +# non-UNIX accounts with "User unknown in local recipient table". +# +#luser_relay = $user@other.host +#luser_relay = $local@other.host +#luser_relay = admin+$local + +# JUNK MAIL CONTROLS +# +# The controls listed here are only a very small subset. See the file +# samples/smtpd.cf for an elaborate list of anti-UCE controls. + +# The header_checks parameter specifies an optional table with patterns +# that each logical message header is matched against, including +# headers that span multiple physical lines. +# +# By default, these patterns also apply to MIME headers and to the +# headers of attached messages. With older Postfix versions, MIME and +# attached message headers were treated as body text. +# +# For details, see the samples/filter.cf file. +# +#header_checks = regexp:/etc/postfix/header_checks + +# FAST ETRN SERVICE +# +# Postfix maintains per-destination logfiles with information about +# deferred mail, so that mail can be flushed quickly with the SMTP +# "ETRN domain.tld" command, or by executing "sendmail -qRdomain.tld". +# +# By default, Postfix maintains deferred mail logfile information +# only for destinations that Postfix is willing to relay to (as +# specified in the relay_domains parameter). For other destinations, +# Postfix attempts to deliver ALL queued mail after receiving the +# SMTP "ETRN domain.tld" command, or after execution of "sendmail +# -qRdomain.tld". This can be slow when a lot of mail is queued. +# +# The fast_flush_domains parameter controls what destinations are +# eligible for this "fast ETRN/sendmail -qR" service. +# +#fast_flush_domains = $relay_domains +#fast_flush_domains = + +# SHOW SOFTWARE VERSION OR NOT +# +# The smtpd_banner parameter specifies the text that follows the 220 +# code in the SMTP server's greeting banner. Some people like to see +# the mail version advertised. By default, Postfix shows no version. +# +# You MUST specify $myhostname at the start of the text. That is an +# RFC requirement. Postfix itself does not care. +# +#smtpd_banner = $myhostname ESMTP $mail_name +#smtpd_banner = $myhostname ESMTP $mail_name ($mail_version) + +# The smtpd_etrn_restrictions parameter restricts what clients are +# allowed to issue the ETRN command. +# +# The Postfix ETRN command accepts only destinations that are eligible +# for the Postfix "fast flush" service. See the samples/flush.cf file +# for details. +# +# The default is to allow ETRN from any host. The following restrictions +# are available: +# +# reject_unknown_client: reject the request if the client hostname is unknown. +# permit_mynetworks: permit if the client address matches $mynetworks. +# check_client_access maptype:mapname +# look up client name, parent domains, client address, +# or networks obtained by stripping octets. +# see access(5) for possible lookup results. +# reject_rbl_client domain.tld: reject if the reverse client network +# address is listed in an A record under domain.tld. +# reject_rhsbl_client domain.tld: reject if the client hostname is listed +# in an A record under domain.tld. +# reject: reject the request. Place this at the end of a restriction. +# permit: permit the request. Place this at the end of a restriction. +# warn_if_reject: next restriction logs a warning instead of rejecting. +# +# You may also list any helo or client restrictions here (see below). +# +smtpd_etrn_restrictions = permit_mynetworks, reject + +# The smtpd_helo_required parameter optionally turns on the requirement +# that SMTP clients must introduce themselves at the beginning of an +# SMTP session. +# +smtpd_helo_required = yes + +# PARALLEL DELIVERY TO THE SAME DESTINATION +# +# How many parallel deliveries to the same user or domain? With local +# delivery, it does not make sense to do massively parallel delivery +# to the same user, because mailbox updates must happen sequentially, +# and expensive pipelines in .forward files can cause disasters when +# too many are run at the same time. With SMTP deliveries, 10 +# simultaneous connections to the same domain could be sufficient to +# raise eyebrows. +# +# Each message delivery transport has its XXX_destination_concurrency_limit +# parameter. The default is $default_destination_concurrency_limit for +# most delivery transports. For the local delivery agent the default is 2. + +#local_destination_concurrency_limit = 2 +#default_destination_concurrency_limit = 20 + +# INSTALL-TIME CONFIGURATION INFORMATION +readme_directory = /etc/postfix/README_FILES +sample_directory = /etc/postfix/samples +sendmail_path = /usr/sbin/sendmail +setgid_group = postdrop +command_directory = /usr/sbin +manpage_directory = /usr/share/man +daemon_directory = /usr/lib/postfix +newaliases_path = /usr/bin/newaliases +mailq_path = /usr/bin/mailq +queue_directory = /var/spool/postfix +mail_owner = postfix + +# SASL authenticated SMTPD +#smtpd_sasl_auth_enable = yes +#broken_sasl_auth_clients = yes +#smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, check_relay_domains +#smtpd_etrn_restrictions = permit_mynetworks, reject + +# Virtual users +virtual_maps = hash:/etc/postfix/virtual +virtual_alias_maps = ldap:vlocal, ldap:vforward + +# Delivery for Local, Local/Forward and Alias +vlocal_server_host = localhost +vlocal_search_base = dc=example,dc=com +vlocal_query_filter = (&(objectClass=gosaMailAccount)(gosaMailDeliveryMode=[*L*])(|(mail=%s)(gosaMailAlternateAddress=%s))) +vlocal_result_attribute = uid,gosaMailForwardingAddress,memberUid + +# Delivery when Forward only +vforward_server_host = localhost +vforward_search_base = dc=example,dc=com +vforward_query_filter = (&(objectClass=gosaMailAccount)(!(gosaMailDeliveryMode=[*L*]))(|(mail=%s)(gosaMailAlternateAddress=%s))) +vforward_result_attribute = gosaMailForwardingAddress + diff --git a/contrib/altlinux/etc/samba/smb.conf b/contrib/altlinux/etc/samba/smb.conf new file mode 100644 index 000000000..6910adb61 --- /dev/null +++ b/contrib/altlinux/etc/samba/smb.conf @@ -0,0 +1,73 @@ +#======================= Global Settings ===================================== +[global] + ldap server = localhost + ldap port = 389 + ldap suffix = dc=example,dc=com + ldap admin dn = cn=smbpasswd,ou=Apps,dc=example,dc=com + + ldap user suffix = ou=People + ldap group suffix = ou=Groups + ldap machine suffix = ou=Computers + ldap passwd sync = Yes + + workgroup = EXAMPLE + netbios name = PDC + server string = Samba server on %h (v. %v) + #realm = PDC.EXAMPLE.TLD + announce version = 4.8 + time server = Yes + + log file = /var/log/samba/log.%m + max log size = 50 + + security = user + hosts allow = 192.168.1. 127. + encrypt passwords = yes + null passwords = No + min passwd length = 6 + smb passwd file = /etc/samba/smbpasswd + socket options = TCP_NODELAY + os level = 254 + nt acl support = No + passdb backend = ldapsam:ldap://localhost + + domain master = yes + preferred master = yes + domain logons = yes + dns proxy = no + + #dos charset = CP866 + #unix charset = KOI8-R + #display charset = KOI8-R + use sendfile = yes + preserve case = Yes + short preserve case = Yes + case sensitive = Yes + hide dot files = Yes + +#============================ Share Definitions ============================== +[homes] + comment = Home Directory for '%u' + browseable = no + writable = yes + +# Un-comment the following and create the netlogon directory for Domain Logons +[netlogon] + comment = Network Logon Service + path = /var/lib/samba/netlogon + guest ok = yes + browsable = no + writable = no + +#Uncomment the following 2 lines if you would like your login scripts to +#be created dynamically by ntlogon (check that you have it in the correct +#location (the default of the ntlogon rpm available in contribs) +;root preexec = /usr/bin/ntlogon -u %U -g %G -o %a -d /var/lib/samba/netlogon +;root postexec = rm -f /var/lib/samba/netlogon/%U.bat + +# Un-comment the following to provide a specific roving profile share +# the default is to use the user's home directory +;[Profiles] +; path = /var/lib/samba/profiles +; browseable = no +; guest ok = yes diff --git a/contrib/altlinux/etc/sasl2/imapd.conf b/contrib/altlinux/etc/sasl2/imapd.conf new file mode 100644 index 000000000..993c2b0bd --- /dev/null +++ b/contrib/altlinux/etc/sasl2/imapd.conf @@ -0,0 +1,2 @@ +pwcheck_method: saslauthd +mech_list: login plain diff --git a/contrib/altlinux/etc/sasl2/saslauthd.conf b/contrib/altlinux/etc/sasl2/saslauthd.conf new file mode 100644 index 000000000..f7139036e --- /dev/null +++ b/contrib/altlinux/etc/sasl2/saslauthd.conf @@ -0,0 +1,74 @@ +ldap_servers: ldap://localhost/ +ldap_bind_dn: cn=saslauthd,ou=Apps,dc=example,dc=com +ldap_bind_pw: saslauthd +ldap_version: 3 +# <2|3> +# Specify the LDAP protocol version to use. + +ldap_timeout: 5 +# Specify a number of seconds a search can take before timing out. + +ldap_time_limit: 5 +# Specify a number of seconds for a search request to complete. + +#ldap_deref: +# Specify how aliases dereferencing is handled during a search. + +#ldap_referrals: +# Specify whether or not the client should follow referrals. + +#ldap_restart: +# Specify whether or not LDAP I/O operations are automatically restarted +# if they abort prematurely. + +#ldap_cache_ttl: <0> +# Non zero enables client side caching. Cached results will expire after +# specified number seconds, e.g. 30. Use this option with care. +# OpenLDAP folks consider this feature experimental. + +#ldap_cache_mem: <0> +# If client side caching is enabled, the value specifies the cache size +# in bytes, e.g. 32768. + +#ldap_scope: +# Search scope. + +ldap_search_base: dc=iph,dc=ras,dc=ru +# Specify a starting point for the search. e.g. dc=foo,dc=com + +#ldap_auth_method: +# Specify an authentication method. The default 'bind' method uses the +# LDAP simple bind facility to verify the password. The custom method +# uses userPassword attribute to verify the password. Currently, {CRYPT} +# hash is supported. + +ldap_filter: (|(uid=%u)(cn=%u)) +# Specify a filter. Use the %u and %r tokens for the username and realm +# substitution. The %u token has to be used at minimum for the filter to +# be useful. If ldap_auth_method is 'bind', the filter will search for +# the DN (distinguished name) attribute. Otherwise, the search will look +# for the userPassword attribute. + +#ldap_debug: <0> +# Specify a debugging level in the OpenLDAP libraries. See +# ldap_set_option(3) for more (LDAP_OPT_DEBUG_LEVEL). +# +#ldap_tls_check_peer: +# Require and verify server certificate. If this option is yes, +# you must specify ldap_tls_cacert_file or ldap_tls_cacert_dir. + +#ldap_tls_cacert_file: +# File containing CA (Certificate Authority) certificate(s). + +#ldap_tls_cacert_dir: +# Path to directory with CA (Certificate Authority) certificates. + +#ldap_tls_ciphers: +# List of SSL/TLS ciphers to allow. The format of the string is +# described in ciphers(1). + +#ldap_tls_cert: +# File containing the client certificate. + +#ldap_tls_key: +# File containing the private client key. diff --git a/contrib/altlinux/etc/services b/contrib/altlinux/etc/services new file mode 100644 index 000000000..9251a4881 --- /dev/null +++ b/contrib/altlinux/etc/services @@ -0,0 +1,557 @@ +# /etc/services: +# $Id: services,v 1.1 2004/12/08 07:22:10 migor-guest Exp $ +# +# Network services, Internet style +# +# Note that it is presently the policy of IANA to assign a single well-known +# port number for both TCP and UDP; hence, most entries here have two entries +# even if the protocol doesn't support UDP operations. +# Updated from RFC 1700, ``Assigned Numbers'' (October 1994). Not all ports +# are included, only the more common ones. +# +# The latest IANA port assignments can be gotten from +# http://www.iana.org/assignments/port-numbers +# The Well Known Ports are those from 0 through 1023. +# The Registered Ports are those from 1024 through 49151 +# The Dynamic and/or Private Ports are those from 49152 through 65535 +# +# Each line describes one service, and is of the form: +# +# service-name port/protocol [aliases ...] [# comment] + +tcpmux 1/tcp # TCP port service multiplexer +tcpmux 1/udp # TCP port service multiplexer +rje 5/tcp # Remote Job Entry +rje 5/udp # Remote Job Entry +echo 7/tcp +echo 7/udp +discard 9/tcp sink null +discard 9/udp sink null +systat 11/tcp users # Active Users +systat 11/udp users # Active Users +daytime 13/tcp +daytime 13/udp +qotd 17/tcp quote # Quote of the Day +qotd 17/udp quote # Quote of the Day +msp 18/tcp # Message Send Protocol +msp 18/udp # Message Send Protocol +chargen 19/tcp ttytst source # Character Generator +chargen 19/udp ttytst source # Character Generator +ftp-data 20/tcp # File Transfer [Default Data] +ftp-data 20/udp # File Transfer [Default Data] +# 21 is registered to ftp, but also used by fsp +ftp 21/tcp # File Transfer [Control] +ftp 21/udp fsp fspd # File Transfer [Control] +ssh 22/tcp # SSH Remote Login Protocol +ssh 22/udp # SSH Remote Login Protocol +telnet 23/tcp +telnet 23/udp +# 24 - private mail system +smtp 25/tcp mail # Simple Mail Transfer Protocol +smtp 25/udp mail # Simple Mail Transfer Protocol +time 37/tcp timserver +time 37/udp timserver +rlp 39/tcp resource # Resource Location Protocol +rlp 39/udp resource # Resource Location Protocol +nameserver 42/tcp name # Host Name Server +nameserver 42/udp name # Host Name Server +nicname 43/tcp whois +nicname 43/udp whois +tacacs 49/tcp # Login Host Protocol (TACACS) +tacacs 49/udp # Login Host Protocol (TACACS) +re-mail-ck 50/tcp # Remote Mail Checking Protocol +re-mail-ck 50/udp # Remote Mail Checking Protocol +domain 53/tcp # Domain Name Server +domain 53/udp # Domain Name Server +whois++ 63/tcp +whois++ 63/udp +bootps 67/tcp # BOOTP server +bootps 67/udp +bootpc 68/tcp # BOOTP client +bootpc 68/udp +tftp 69/tcp # Trivial File Transfer +tftp 69/udp # Trivial File Transfer +gopher 70/tcp # Internet Gopher +gopher 70/udp +netrjs-1 71/tcp # Remote Job Service +netrjs-1 71/udp # Remote Job Service +netrjs-2 72/tcp # Remote Job Service +netrjs-2 72/udp # Remote Job Service +netrjs-3 73/tcp # Remote Job Service +netrjs-3 73/udp # Remote Job Service +netrjs-4 74/tcp # Remote Job Service +netrjs-4 74/udp # Remote Job Service +finger 79/tcp +finger 79/udp +http 80/tcp www www-http # World Wide Web HTTP +http 80/udp www www-http # HyperText Transfer Protocol +kerberos 88/tcp kerberos5 krb5 # Kerberos v5 +kerberos 88/udp kerberos5 krb5 # Kerberos v5 +supdup 95/tcp +supdup 95/udp +hostname 101/tcp hostnames # usually from sri-nic +hostname 101/udp hostnames # usually from sri-nic +iso-tsap 102/tcp tsap # part of ISODE. +csnet-ns 105/tcp cso # also used by CSO name server +csnet-ns 105/udp cso +# unfortunately the poppassd (Eudora) uses a port which has already +# been assigned to a different service. We list the poppassd as an +# alias here. This should work for programs asking for this service. +# (due to a bug in inetd the 3com-tsmux line is disabled) +#3com-tsmux 106/tcp poppassd +#3com-tsmux 106/udp poppassd +rtelnet 107/tcp # Remote Telnet +rtelnet 107/udp +pop2 109/tcp pop-2 postoffice # POP version 2 +pop2 109/udp pop-2 +pop3 110/tcp pop-3 # POP version 3 +pop3 110/udp pop-3 +sunrpc 111/tcp portmapper # RPC 4.0 portmapper TCP +sunrpc 111/udp portmapper # RPC 4.0 portmapper UDP +auth 113/tcp authentication tap ident +auth 113/udp authentication tap ident +sftp 115/tcp +sftp 115/udp +uucp-path 117/tcp +uucp-path 117/udp +nntp 119/tcp readnews untp # USENET News Transfer Protocol +nntp 119/udp readnews untp # USENET News Transfer Protocol +ntp 123/tcp +ntp 123/udp # Network Time Protocol +pwdgen 129/tcp # Password Generator Protocol +pwdgen 129/udp # Password Generator Protocol +netbios-ns 137/tcp # NETBIOS Name Service +netbios-ns 137/udp +netbios-dgm 138/tcp # NETBIOS Datagram Service +netbios-dgm 138/udp +netbios-ssn 139/tcp # NETBIOS session service +netbios-ssn 139/udp +imap 143/tcp imap2 # Interim Mail Access Proto v2 +imap 143/udp imap2 +snmp 161/tcp # Simple Net Mgmt Proto +snmp 161/udp # Simple Net Mgmt Proto +snmptrap 162/udp snmp-trap # Traps for SNMP +cmip-man 163/tcp # ISO mgmt over IP (CMOT) +cmip-man 163/udp +cmip-agent 164/tcp +cmip-agent 164/udp +mailq 174/tcp # MAILQ +mailq 174/udp # MAILQ +xdmcp 177/tcp # X Display Mgr. Control Proto +xdmcp 177/udp +nextstep 178/tcp NeXTStep NextStep # NeXTStep window +nextstep 178/udp NeXTStep NextStep # server +bgp 179/tcp # Border Gateway Proto. +bgp 179/udp +prospero 191/tcp # Cliff Neuman's Prospero +prospero 191/udp +irc 194/tcp # Internet Relay Chat +irc 194/udp +smux 199/tcp # SNMP Unix Multiplexer +smux 199/udp +at-rtmp 201/tcp # AppleTalk routing +at-rtmp 201/udp +at-nbp 202/tcp # AppleTalk name binding +at-nbp 202/udp +at-echo 204/tcp # AppleTalk echo +at-echo 204/udp +at-zis 206/tcp # AppleTalk zone information +at-zis 206/udp +qmtp 209/tcp # Quick Mail Transfer Protocol +qmtp 209/udp # Quick Mail Transfer Protocol +z39.50 210/tcp z3950 wais # NISO Z39.50 database +z39.50 210/udp z3950 wais +ipx 213/tcp # IPX +ipx 213/udp +imap3 220/tcp # Interactive Mail Access +imap3 220/udp # Protocol v3 +link 245/tcp ttylink +link 245/ucp ttylink +fatserv 347/tcp # Fatmen Server +fatserv 347/udp # Fatmen Server +rsvp_tunnel 363/tcp +rsvp_tunnel 363/udp +rpc2portmap 369/tcp +rpc2portmap 369/udp # Coda portmapper +codaauth2 370/tcp +codaauth2 370/udp # Coda authentication server +ulistproc 372/tcp ulistserv # UNIX Listserv +ulistproc 372/udp ulistserv +ldap 389/tcp +ldap 389/udp +svrloc 427/tcp # Server Location Protocl +svrloc 427/udp # Server Location Protocl +mobileip-agent 434/tcp +mobileip-agent 434/udp +mobilip-mn 435/tcp +mobilip-mn 435/udp +https 443/tcp # MCom +https 443/udp # MCom +snpp 444/tcp # Simple Network Paging Protocol +snpp 444/udp # Simple Network Paging Protocol +microsoft-ds 445/tcp +microsoft-ds 445/udp +kpasswd 464/tcp kpwd # Kerberos "passwd" +kpasswd 464/udp kpwd # Kerberos "passwd" +photuris 468/tcp +photuris 468/udp +saft 487/tcp # Simple Asynchronous File Transfer +saft 487/udp # Simple Asynchronous File Transfer +gss-http 488/tcp +gss-http 488/udp +pim-rp-disc 496/tcp +pim-rp-disc 496/udp +isakmp 500/tcp +isakmp 500/udp +gdomap 538/tcp # GNUstep distributed objects +gdomap 538/udp # GNUstep distributed objects +iiop 535/tcp +iiop 535/udp +dhcpv6-client 546/tcp +dhcpv6-client 546/udp +dhcpv6-server 547/tcp +dhcpv6-server 547/udp +rtsp 554/tcp # Real Time Stream Control Protocol +rtsp 554/udp # Real Time Stream Control Protocol +nntps 563/tcp # NNTP over SSL +nntps 563/udp # NNTP over SSL +whoami 565/tcp +whoami 565/udp +submission 587/tcp msa # mail message submission +submission 587/udp msa # mail message submission +npmp-local 610/tcp dqs313_qmaster # npmp-local / DQS +npmp-local 610/udp dqs313_qmaster # npmp-local / DQS +npmp-gui 611/tcp dqs313_execd # npmp-gui / DQS +npmp-gui 611/udp dqs313_execd # npmp-gui / DQS +hmmp-ind 612/tcp dqs313_intercell # HMMP Indication / DQS +hmmp-ind 612/udp dqs313_intercell # HMMP Indication / DQS +ipp 631/tcp # Internet Printing Protocol +ipp 631/ucp # Internet Printing Protocol +ldaps 636/tcp # LDAP over SSL +ldaps 636/udp # LDAP over SSL +acap 674/tcp +acap 674/udp +ha-cluster 694/tcp # Heartbeat HA-cluster +ha-cluster 694/udp # Heartbeat HA-cluster +kerberos-adm 749/tcp # Kerberos `kadmin' (v5) +kerberos-iv 750/udp kerberos4 kerberos-sec kdc +kerberos-iv 750/tcp kerberos4 kerberos-sec kdc +webster 765/tcp # Network dictionary +webster 765/udp +phonebook 767/tcp # Network phonebook +phonebook 767/udp +rsync 873/tcp # rsync +rsync 873/udp # rsync +telnets 992/tcp +telnets 992/udp +imaps 993/tcp # IMAP over SSL +imaps 993/udp # IMAP over SSL +ircs 994/tcp +ircs 994/udp +pop3s 995/tcp # POP-3 over SSL +pop3s 995/udp # POP-3 over SSL + +# +# UNIX specific services +# +exec 512/tcp +biff 512/udp comsat +login 513/tcp +who 513/udp whod +shell 514/tcp cmd # no passwords used +syslog 514/udp +printer 515/tcp spooler # line printer spooler +printer 515/udp spooler # line printer spooler +talk 517/udp +ntalk 518/udp +utime 519/tcp unixtime +utime 519/udp unixtime +efs 520/tcp +router 520/udp route routed # RIP +ripng 521/tcp +ripng 521/udp +timed 525/tcp timeserver +timed 525/udp timeserver +tempo 526/tcp newdate +courier 530/tcp rpc +conference 531/tcp chat +netnews 532/tcp +netwall 533/udp # -for emergency broadcasts +uucp 540/tcp uucpd # uucp daemon +klogin 543/tcp # Kerberized `rlogin' (v5) +kshell 544/tcp krcmd # Kerberized `rsh' (v5) +afpovertcp 548/tcp # AFP over TCP +afpovertcp 548/udp # AFP over TCP +remotefs 556/tcp rfs_server rfs # Brunhoff remote filesystem + +# +# From ``PORT NUMBERS'': +# +#>REGISTERED PORT NUMBERS +#> +#>The Registered Ports are listed by the IANA and on most systems can be +#>used by ordinary user processes or programs executed by ordinary +#>users. +#> +#>Ports are used in the TCP [RFC793] to name the ends of logical +#>connections which carry long term conversations. For the purpose of +#>providing services to unknown callers, a service contact port is +#>defined. This list specifies the port used by the server process as +#>its contact port. +#> +#>The IANA registers uses of these ports as a convienence to the +#>community. +# +socks 1080/tcp # socks proxy server +socks 1080/udp # socks proxy server +h323hostcallsc 1300/tcp # H323 Host Call Secure +h323hostcallsc 1300/udp # H323 Host Call Secure +ms-sql-s 1433/tcp # Microsoft-SQL-Server +ms-sql-s 1433/udp # Microsoft-SQL-Server +ms-sql-m 1434/tcp # Microsoft-SQL-Monitor +ms-sql-m 1434/udp # Microsoft-SQL-Monitor +ica 1494/tcp # Citrix ICA Client +ica 1494/udp # Citrix ICA Client +wins 1512/tcp # Microsoft's Windows Internet Name Service +wins 1512/udp # Microsoft's Windows Internet Name Service +ingreslock 1524/tcp +ingreslock 1524/udp +prospero-np 1525/tcp # Prospero non-privileged +prospero-np 1525/udp +datametrics 1645/tcp old-radius # datametrics / old radius entry +datametrics 1645/udp old-radius # datametrics / old radius entry +sa-msg-port 1646/tcp old-radacct # sa-msg-port / old radacct entry +sa-msg-port 1646/udp old-radacct # sa-msg-port / old radacct entry +kermit 1649/tcp +kermit 1649/udp +l2tp 1701/tcp l2f +l2tp 1701/udp l2f +h323gatedisc 1718/tcp +h323gatedisc 1718/udp +h323gatestat 1719/tcp +h323gatestat 1719/udp +h323hostcall 1720/tcp +h323hostcall 1720/udp +tftp-mcast 1758/tcp +tftp-mcast 1758/udp +hello 1789/tcp +hello 1789/udp +radius 1812/tcp # Radius +radius 1812/udp # Radius +radius-acct 1813/tcp radacct # Radius Accounting +radius-acct 1813/udp radacct # Radius Accounting +mtp 1911/tcp # +mtp 1911/udp # +hsrp 1985/tcp # Cisco Hot Standby Router Protocol +hsrp 1985/udp # Cisco Hot Standby Router Protocol +licensedaemon 1986/tcp +licensedaemon 1986/udp +gdp-port 1997/tcp # Cisco Gateway Discovery Protocol +gdp-port 1997/udp # Cisco Gateway Discovery Protocol +nfs 2049/tcp nfsd +nfs 2049/udp nfsd +zephyr-srv 2102/tcp # Zephyr server +zephyr-srv 2102/udp # Zephyr server +zephyr-clt 2103/tcp # Zephyr serv-hm connection +zephyr-clt 2103/udp # Zephyr serv-hm connection +zephyr-hm 2104/tcp # Zephyr hostmanager +zephyr-hm 2104/udp # Zephyr hostmanager +cvspserver 2401/tcp # CVS client/server operations +cvspserver 2401/udp # CVS client/server operations +venus 2430/tcp # codacon port +venus 2430/udp # Venus callback/wbc interface +venus-se 2431/tcp # tcp side effects +venus-se 2431/udp # udp sftp side effect +codasrv 2432/tcp # not used +codasrv 2432/udp # server port +codasrv-se 2433/tcp # tcp side effects +codasrv-se 2433/udp # udp sftp side effectQ + +# Ports numbered 2600 through 2606 are used by the zebra package. The primary +# names are the registered names, and the zebra names are listed as aliases. +hpstgmgr 2600/tcp zebrasrv # HPSTGMGR +hpstgmgr 2600/udp # HPSTGMGR +discp-client 2601/tcp zebra # discp client +discp-client 2601/udp # discp client +discp-server 2602/tcp ripd # discp server +discp-server 2602/udp # discp server +servicemeter 2603/tcp ripngd # Service Meter +servicemeter 2603/udp # Service Meter +nsc-ccs 2604/tcp ospfd # NSC CCS +nsc-ccs 2604/udp # NSC CCS +nsc-posa 2605/tcp bgpd # NSC POSA +nsc-posa 2605/udp # NSC POSA +netmon 2606/tcp ospf6d # Dell Netmon +netmon 2606/udp # Dell Netmon + +corbaloc 2809/tcp # CORBA naming service locator +icpv2 3130/tcp # Internet Cache Protocol V2 (Squid) +icpv2 3130/udp # Internet Cache Protocol V2 (Squid) +mysql 3306/tcp # MySQL +mysql 3306/udp # MySQL +trnsprntproxy 3346/tcp # Trnsprnt Proxy +trnsprntproxy 3346/udp # Trnsprnt Proxy +rwhois 4321/tcp # Remote Who Is +rwhois 4321/udp # Remote Who Is +krb524 4444/tcp # Kerberos 5 to 4 ticket xlator +krb524 4444/udp # Kerberos 5 to 4 ticket xlator +rfe 5002/tcp # Radio Free Ethernet +rfe 5002/udp # Actually uses UDP only +jabber-client 5222/tcp # Jabber Client Connection +jabber-client 5222/udp # Jabber Client Connection +jabber-server 5269/tcp # Jabber Server Connection +jabber-server 5269/udp # Jabber Server Connection +cfengine 5308/tcp # CFengine +cfengine 5308/udp # CFengine +cvsup 5999/tcp CVSup # CVSup file transfer/John Polstra/FreeBSD +cvsup 5999/udp CVSup # CVSup file transfer/John Polstra/FreeBSD +x11 6000/tcp X # the X Window System +afs3-fileserver 7000/tcp # file server itself +afs3-fileserver 7000/udp # file server itself +afs3-callback 7001/tcp # callbacks to cache managers +afs3-callback 7001/udp # callbacks to cache managers +afs3-prserver 7002/tcp # users & groups database +afs3-prserver 7002/udp # users & groups database +afs3-vlserver 7003/tcp # volume location database +afs3-vlserver 7003/udp # volume location database +afs3-kaserver 7004/tcp # AFS/Kerberos authentication service +afs3-kaserver 7004/udp # AFS/Kerberos authentication service +afs3-volser 7005/tcp # volume managment server +afs3-volser 7005/udp # volume managment server +afs3-errors 7006/tcp # error interpretation service +afs3-errors 7006/udp # error interpretation service +afs3-bos 7007/tcp # basic overseer process +afs3-bos 7007/udp # basic overseer process +afs3-update 7008/tcp # server-to-server updater +afs3-update 7008/udp # server-to-server updater +afs3-rmtsys 7009/tcp # remote cache manager service +afs3-rmtsys 7009/udp # remote cache manager service +sd 9876/tcp # Session Director +sd 9876/udp # Session Director +amanda 10080/tcp # amanda backup services +amanda 10080/udp # amanda backup services +pgpkeyserver 11371/tcp # PGP/GPG public keyserver +pgpkeyserver 11371/udp # PGP/GPG public keyserver +h323callsigalt 11720/tcp # H323 Call Signal Alternate +h323callsigalt 11720/udp # H323 Call Signal Alternate + +# This port is registered as wnn6, but also used under the name "wnn4" by the +# FreeWnn package. +wnn6 22273/tcp wnn4 +wnn6 22273/ucp wnn4 + +quake 26000/tcp +quake 26000/udp +wnn6-ds 26208/tcp +wnn6-ds 26208/udp +traceroute 33434/tcp +traceroute 33434/udp + +# +# Datagram Delivery Protocol services +# +rtmp 1/ddp # Routing Table Maintenance Protocol +nbp 2/ddp # Name Binding Protocol +echo 4/ddp # AppleTalk Echo Protocol +zip 6/ddp # Zone Information Protocol + +# +# Kerberos (Project Athena/MIT) services +# Note that these are for Kerberos v4, and are unofficial. Sites running +# v4 should uncomment these and comment out the v5 entries above. +# +kerberos_master 751/udp # Kerberos authentication +kerberos_master 751/tcp # Kerberos authentication +passwd_server 752/udp # Kerberos passwd server +krbupdate 760/tcp kreg # Kerberos registration +kpop 1109/tcp # Pop with Kerberos +knetd 2053/tcp # Kerberos de-multiplexor + +# +# Kerberos 5 services, also not registered with IANA +# +krb5_prop 754/tcp # Kerberos slave propagation +eklogin 2105/tcp # Kerberos encrypted rlogin + +# +# Unregistered but necessary (for NetBSD) services +# +supfilesrv 871/tcp # SUP server +supfiledbg 1127/tcp # SUP debugging + +# +# Unregistered but useful/necessary other services +# +netstat 15/tcp # (was once asssigned, no more) +linuxconf 98/tcp # Linuxconf HTML access +poppassd 106/tcp # Eudora +poppassd 106/udp # Eudora +smtps 465/tcp # SMTP over SSL (TLS) +gii 616/tcp # gated interactive interface +omirr 808/tcp omirrd # online mirror +omirr 808/udp omirrd # online mirror +swat 901/tcp # Samba Web Administration Tool +rndc 953/tcp # rndc control sockets (BIND 9) +rndc 953/udp # rndc control sockets (BIND 9) +skkserv 1178/tcp # SKK Japanese input method +rmtcfg 1236/tcp # Gracilis Packeten remote config server +xtel 1313/tcp # french minitel +lotusnote 1352/tcp lotusnotes # Lotus notes +lotusnote 1352/udp lotusnotes # Lotus notes +support 1529/tcp prmsd gnatsd # GNATS, cygnus bug tracker +cfinger 2003/tcp # GNU Finger +ninstall 2150/tcp # ninstall service +ninstall 2150/udp # ninstall service +afbackup 2988/tcp # Afbackup system +afbackup 2988/udp # Afbackup system +squid 3128/tcp # squid web proxy +prsvp 3455/tcp # RSVP Port +prsvp 3455/udp # RSVP Port +postgres 5432/tcp # POSTGRES +postgres 5432/udp # POSTGRES +fax 4557/tcp # FAX transmission service (old) +hylafax 4559/tcp # HylaFAX client-server protocol (new) +sgi-dgl 5232/tcp # SGI Distributed Graphics +sgi-dgl 5232/udp +noclog 5354/tcp # noclogd with TCP (nocol) +noclog 5354/udp # noclogd with UDP (nocol) +hostmon 5355/tcp # hostmon uses TCP (nocol) +hostmon 5355/udp # hostmon uses TCP (nocol) +canna 5680/tcp +x11-ssh-offset 6010/tcp # SSH X11 forwarding offset +ircd 6667/tcp # Internet Relay Chat +ircd 6667/udp # Internet Relay Chat +xfs 7100/tcp # X font server +tircproxy 7666/tcp # Tircproxy +http-alt 8008/tcp +http-alt 8008/udp +webcache 8080/tcp # WWW caching service +webcache 8080/udp # WWW caching service +tproxy 8081/tcp # Transparent Proxy +tproxy 8081/udp # Transparent Proxy +jetdirect 9100/tcp laserjet hplj # +mandelspawn 9359/udp mandelbrot # network mandelbrot +kamanda 10081/tcp # amanda backup services (Kerberos) +kamanda 10081/udp # amanda backup services (Kerberos) +amandaidx 10082/tcp # amanda backup services +amidxtape 10083/tcp # amanda backup services +ladcca 14541/tcp # LADCCA client/server protocol +isdnlog 20011/tcp # isdn logging system +isdnlog 20011/udp # isdn logging system +vboxd 20012/tcp # voice box system +vboxd 20012/udp # voice box system +wnn4_Kr 22305/tcp # used by the kWnn package +wnn4_Cn 22289/tcp # used by the cWnn package +wnn4_Tw 22321/tcp # used by the tWnn package +binkp 24554/tcp # Binkley +binkp 24554/udp # Binkley +asp 27374/tcp # Address Search Protocol +asp 27374/udp # Address Search Protocol +tfido 60177/tcp # Ifmail +tfido 60177/udp # Ifmail +fido 60179/tcp # Ifmail +fido 60179/udp # Ifmail + +# Cyrus SIEVE service +sieve 2000/tcp +sieve 2000/udp diff --git a/contrib/altlinux/etc/squid/squid.conf b/contrib/altlinux/etc/squid/squid.conf new file mode 100644 index 000000000..5d2459b91 --- /dev/null +++ b/contrib/altlinux/etc/squid/squid.conf @@ -0,0 +1,3303 @@ + +# WELCOME TO SQUID 2 +# ------------------ +# +# This is the default Squid configuration file. You may wish +# to look at the Squid home page (http://www.squid-cache.org/) +# for the FAQ and other documentation. +# +# The default Squid config file shows what the defaults for +# various options happen to be. If you don't need to change the +# default, you shouldn't uncomment the line. Doing so may cause +# run-time problems. In some cases "none" refers to no default +# setting at all, while in other cases it refers to a valid +# option - the comments for that keyword indicate if this is the +# case. +# + + +# NETWORK OPTIONS +# ----------------------------------------------------------------------------- + +# TAG: http_port +# Usage: port +# hostname:port +# 1.2.3.4:port +# +# The socket addresses where Squid will listen for HTTP client +# requests. You may specify multiple socket addresses. +# There are three forms: port alone, hostname with port, and +# IP address with port. If you specify a hostname or IP +# address, then Squid binds the socket to that specific +# address. This replaces the old 'tcp_incoming_address' +# option. Most likely, you do not need to bind to a specific +# address, so you can use the port number alone. +# +# The default port number is 3128. +# +# If you are running Squid in accelerator mode, then you +# probably want to listen on port 80 also, or instead. +# +# The -a command line option will override the *first* port +# number listed here. That option will NOT override an IP +# address, however. +# +# You may specify multiple socket addresses on multiple lines. +# +# If you run Squid on a dual-homed machine with an internal +# and an external interface then we recommend you to specify the +# internal address:port in http_port. This way Squid will only be +# visible on the internal address. +# +#Default: +# http_port 3128 + +# TAG: https_port +# Usage: [ip:]port cert=certificate.pem [key=key.pem] [options...] +# +# The socket address where Squid will listen for HTTPS client +# requests. +# +# This is really only useful for situations where you are running +# squid in accelerator mode and you want to do the SSL work at the +# accelerator level. +# +# You may specify multiple socket addresses on multiple lines, +# each with their own SSL certificate and/or options. +# +# Options: +# +# cert= Path to SSL certificate (PEM format) +# +# key= Path to SSL private key file (PEM format) +# if not specified, the certificate file is +# assumed to be a combined certificate and +# key file +# +# version= The version of SSL/TLS supported +# 1 automatic (default) +# 2 SSLv2 only +# 3 SSLv3 only +# 4 TLSv1 only +# +# cipher= Colon separated list of supported ciphers +# +# options= Varions SSL engine options. The most important +# being: +# NO_SSLv2 Disallow the use of SSLv2 +# NO_SSLv3 Disallow the use of SSLv3 +# NO_TLSv1 Disallow the use of TLSv1 +# See src/ssl_support.c or OpenSSL documentation +# for a more complete list. +# +#Default: +# none + +# TAG: ssl_unclean_shutdown +# Some browsers (especially MSIE) bugs out on SSL shutdown +# messages. +# +#Default: +# ssl_unclean_shutdown off + +# TAG: icp_port +# The port number where Squid sends and receives ICP queries to +# and from neighbor caches. Default is 3130. To disable use +# "0". May be overridden with -u on the command line. +# +#Default: +# icp_port 3130 + +# TAG: htcp_port +# Note: This option is only available if Squid is rebuilt with the +# --enable-htcp option +# +# The port number where Squid sends and receives HTCP queries to +# and from neighbor caches. Default is 4827. To disable use +# "0". +# +#Default: +# htcp_port 4827 + +# TAG: mcast_groups +# This tag specifies a list of multicast groups which your server +# should join to receive multicasted ICP queries. +# +# NOTE! Be very careful what you put here! Be sure you +# understand the difference between an ICP _query_ and an ICP +# _reply_. This option is to be set only if you want to RECEIVE +# multicast queries. Do NOT set this option to SEND multicast +# ICP (use cache_peer for that). ICP replies are always sent via +# unicast, so this option does not affect whether or not you will +# receive replies from multicast group members. +# +# You must be very careful to NOT use a multicast address which +# is already in use by another group of caches. +# +# If you are unsure about multicast, please read the Multicast +# chapter in the Squid FAQ (http://www.squid-cache.org/FAQ/). +# +# Usage: mcast_groups 239.128.16.128 224.0.1.20 +# +# By default, Squid doesn't listen on any multicast groups. +# +#Default: +# none + +# TAG: udp_incoming_address +# TAG: udp_outgoing_address +# udp_incoming_address is used for the ICP socket receiving packets +# from other caches. +# udp_outgoing_address is used for ICP packets sent out to other +# caches. +# +# The default behavior is to not bind to any specific address. +# +# A udp_incoming_address value of 0.0.0.0 indicates that Squid should +# listen for UDP messages on all available interfaces. +# +# If udp_outgoing_address is set to 255.255.255.255 (the default) +# then it will use the same socket as udp_incoming_address. Only +# change this if you want to have ICP queries sent using another +# address than where this Squid listens for ICP queries from other +# caches. +# +# NOTE, udp_incoming_address and udp_outgoing_address can not +# have the same value since they both use port 3130. +# +#Default: +# udp_incoming_address 0.0.0.0 +# udp_outgoing_address 255.255.255.255 + + +# OPTIONS WHICH AFFECT THE NEIGHBOR SELECTION ALGORITHM +# ----------------------------------------------------------------------------- + +# TAG: cache_peer +# To specify other caches in a hierarchy, use the format: +# +# cache_peer hostname type http_port icp_port +# +# For example, +# +# # proxy icp +# # hostname type port port options +# # -------------------- -------- ----- ----- ----------- +# cache_peer parent.foo.net parent 3128 3130 [proxy-only] +# cache_peer sib1.foo.net sibling 3128 3130 [proxy-only] +# cache_peer sib2.foo.net sibling 3128 3130 [proxy-only] +# +# type: either 'parent', 'sibling', or 'multicast'. +# +# proxy_port: The port number where the cache listens for proxy +# requests. +# +# icp_port: Used for querying neighbor caches about +# objects. To have a non-ICP neighbor +# specify '7' for the ICP port and make sure the +# neighbor machine has the UDP echo port +# enabled in its /etc/inetd.conf file. +# +# options: proxy-only +# weight=n +# ttl=n +# no-query +# default +# round-robin +# multicast-responder +# closest-only +# no-digest +# no-netdb-exchange +# no-delay +# login=user:password | PASS | *:password +# connect-timeout=nn +# digest-url=url +# allow-miss +# max-conn +# htcp +# carp-load-factor +# +# use 'proxy-only' to specify that objects fetched +# from this cache should not be saved locally. +# +# use 'weight=n' to specify a weighted parent. +# The weight must be an integer. The default weight +# is 1, larger weights are favored more. +# +# use 'ttl=n' to specify a IP multicast TTL to use +# when sending an ICP queries to this address. +# Only useful when sending to a multicast group. +# Because we don't accept ICP replies from random +# hosts, you must configure other group members as +# peers with the 'multicast-responder' option below. +# +# use 'no-query' to NOT send ICP queries to this +# neighbor. +# +# use 'default' if this is a parent cache which can +# be used as a "last-resort." You should probably +# only use 'default' in situations where you cannot +# use ICP with your parent cache(s). +# +# use 'round-robin' to define a set of parents which +# should be used in a round-robin fashion in the +# absence of any ICP queries. +# +# 'multicast-responder' indicates that the named peer +# is a member of a multicast group. ICP queries will +# not be sent directly to the peer, but ICP replies +# will be accepted from it. +# +# 'closest-only' indicates that, for ICP_OP_MISS +# replies, we'll only forward CLOSEST_PARENT_MISSes +# and never FIRST_PARENT_MISSes. +# +# use 'no-digest' to NOT request cache digests from +# this neighbor. +# +# 'no-netdb-exchange' disables requesting ICMP +# RTT database (NetDB) from the neighbor. +# +# use 'no-delay' to prevent access to this neighbor +# from influencing the delay pools. +# +# use 'login=user:password' if this is a personal/workgroup +# proxy and your parent requires proxy authentication. +# Note: The string can include URL escapes (i.e. %20 for +# spaces). This also means that % must be written as %%. +# +# use 'login=PASS' if users must authenticate against +# the upstream proxy. This will pass the users credentials +# as they are to the peer proxy. This only works for the +# Basic HTTP authentication sheme. Note: To combine this +# with proxy_auth both proxies must share the same user +# database as HTTP only allows for one proxy login. +# Also be warned that this will expose your users proxy +# password to the peer. USE WITH CAUTION +# +# use 'login=*:password' to pass the username to the +# upstream cache, but with a fixed password. This is meant +# to be used when the peer is in another administrative +# domain, but it is still needed to identify each user. +# The star can optionally be followed by some extra +# information which is added to the username. This can +# be used to identify this proxy to the peer, similar to +# the login=username:password option above. +# +# use 'connect-timeout=nn' to specify a peer +# specific connect timeout (also see the +# peer_connect_timeout directive) +# +# use 'digest-url=url' to tell Squid to fetch the cache +# digest (if digests are enabled) for this host from +# the specified URL rather than the Squid default +# location. +# +# use 'allow-miss' to disable Squid's use of only-if-cached +# when forwarding requests to siblings. This is primarily +# useful when icp_hit_stale is used by the sibling. To +# extensive use of this option may result in forwarding +# loops, and you should avoid having two-way peerings +# with this option. (for example to deny peer usage on +# requests from peer by denying cache_peer_access if the +# source is a peer) +# +# use 'max-conn' to limit the amount of connections Squid +# may open to this peer. +# +# use 'htcp' to send HTCP, instead of ICP, queries +# to the neighbor. You probably also want to +# set the "icp port" to 4827 instead of 3130. +# +# use 'carp-load-factor=f' to define a parent +# cache as one participating in a CARP array. +# The 'f' values for all CARP parents must add +# up to 1.0. +# +# +# NOTE: non-ICP/HTCP neighbors must be specified as 'parent'. +# +#Default: +# none + +# TAG: cache_peer_domain +# Use to limit the domains for which a neighbor cache will be +# queried. Usage: +# +# cache_peer_domain cache-host domain [domain ...] +# cache_peer_domain cache-host !domain +# +# For example, specifying +# +# cache_peer_domain parent.foo.net .edu +# +# has the effect such that UDP query packets are sent to +# 'bigserver' only when the requested object exists on a +# server in the .edu domain. Prefixing the domainname +# with '!' means that the cache will be queried for objects +# NOT in that domain. +# +# NOTE: * Any number of domains may be given for a cache-host, +# either on the same or separate lines. +# * When multiple domains are given for a particular +# cache-host, the first matched domain is applied. +# * Cache hosts with no domain restrictions are queried +# for all requests. +# * There are no defaults. +# * There is also a 'cache_peer_access' tag in the ACL +# section. +# +#Default: +# none + +# TAG: neighbor_type_domain +# usage: neighbor_type_domain neighbor parent|sibling domain domain ... +# +# Modifying the neighbor type for specific domains is now +# possible. You can treat some domains differently than the the +# default neighbor type specified on the 'cache_peer' line. +# Normally it should only be necessary to list domains which +# should be treated differently because the default neighbor type +# applies for hostnames which do not match domains listed here. +# +#EXAMPLE: +# cache_peer parent cache.foo.org 3128 3130 +# neighbor_type_domain cache.foo.org sibling .com .net +# neighbor_type_domain cache.foo.org sibling .au .de +# +#Default: +# none + +# TAG: icp_query_timeout (msec) +# Normally Squid will automatically determine an optimal ICP +# query timeout value based on the round-trip-time of recent ICP +# queries. If you want to override the value determined by +# Squid, set this 'icp_query_timeout' to a non-zero value. This +# value is specified in MILLISECONDS, so, to use a 2-second +# timeout (the old default), you would write: +# +# icp_query_timeout 2000 +# +#Default: +# icp_query_timeout 0 + +# TAG: maximum_icp_query_timeout (msec) +# Normally the ICP query timeout is determined dynamically. But +# sometimes it can lead to very large values (say 5 seconds). +# Use this option to put an upper limit on the dynamic timeout +# value. Do NOT use this option to always use a fixed (instead +# of a dynamic) timeout value. To set a fixed timeout see the +# 'icp_query_timeout' directive. +# +#Default: +# maximum_icp_query_timeout 2000 + +# TAG: mcast_icp_query_timeout (msec) +# For Multicast peers, Squid regularly sends out ICP "probes" to +# count how many other peers are listening on the given multicast +# address. This value specifies how long Squid should wait to +# count all the replies. The default is 2000 msec, or 2 +# seconds. +# +#Default: +# mcast_icp_query_timeout 2000 + +# TAG: dead_peer_timeout (seconds) +# This controls how long Squid waits to declare a peer cache +# as "dead." If there are no ICP replies received in this +# amount of time, Squid will declare the peer dead and not +# expect to receive any further ICP replies. However, it +# continues to send ICP queries, and will mark the peer as +# alive upon receipt of the first subsequent ICP reply. +# +# This timeout also affects when Squid expects to receive ICP +# replies from peers. If more than 'dead_peer' seconds have +# passed since the last ICP reply was received, Squid will not +# expect to receive an ICP reply on the next query. Thus, if +# your time between requests is greater than this timeout, you +# will see a lot of requests sent DIRECT to origin servers +# instead of to your parents. +# +#Default: +# dead_peer_timeout 10 seconds + +# TAG: hierarchy_stoplist +# A list of words which, if found in a URL, cause the object to +# be handled directly by this cache. In other words, use this +# to not query neighbor caches for certain objects. You may +# list this option multiple times. +#We recommend you to use at least the following line. +hierarchy_stoplist cgi-bin ? + +# TAG: no_cache +# A list of ACL elements which, if matched, cause the request to +# not be satisfied from the cache and the reply to not be cached. +# In other words, use this to force certain objects to never be cached. +# +# You must use the word 'DENY' to indicate the ACL names which should +# NOT be cached. +# +#We recommend you to use the following two lines. +acl QUERY urlpath_regex cgi-bin \? +no_cache deny QUERY + + +# OPTIONS WHICH AFFECT THE CACHE SIZE +# ----------------------------------------------------------------------------- + +# TAG: cache_mem (bytes) +# NOTE: THIS PARAMETER DOES NOT SPECIFY THE MAXIMUM PROCESS SIZE. +# IT ONLY PLACES A LIMIT ON HOW MUCH ADDITIONAL MEMORY SQUID WILL +# USE AS A MEMORY CACHE OF OBJECTS. SQUID USES MEMORY FOR OTHER +# THINGS AS WELL. SEE THE SQUID FAQ SECTION 8 FOR DETAILS. +# +# 'cache_mem' specifies the ideal amount of memory to be used +# for: +# * In-Transit objects +# * Hot Objects +# * Negative-Cached objects +# +# Data for these objects are stored in 4 KB blocks. This +# parameter specifies the ideal upper limit on the total size of +# 4 KB blocks allocated. In-Transit objects take the highest +# priority. +# +# In-transit objects have priority over the others. When +# additional space is needed for incoming data, negative-cached +# and hot objects will be released. In other words, the +# negative-cached and hot objects will fill up any unused space +# not needed for in-transit objects. +# +# If circumstances require, this limit will be exceeded. +# Specifically, if your incoming request rate requires more than +# 'cache_mem' of memory to hold in-transit objects, Squid will +# exceed this limit to satisfy the new requests. When the load +# decreases, blocks will be freed until the high-water mark is +# reached. Thereafter, blocks will be used to store hot +# objects. +# +#Default: +# cache_mem 8 MB + +# TAG: cache_swap_low (percent, 0-100) +# TAG: cache_swap_high (percent, 0-100) +# +# The low- and high-water marks for cache object replacement. +# Replacement begins when the swap (disk) usage is above the +# low-water mark and attempts to maintain utilization near the +# low-water mark. As swap utilization gets close to high-water +# mark object eviction becomes more aggressive. If utilization is +# close to the low-water mark less replacement is done each time. +# +# Defaults are 90% and 95%. If you have a large cache, 5% could be +# hundreds of MB. If this is the case you may wish to set these +# numbers closer together. +# +#Default: +# cache_swap_low 90 +# cache_swap_high 95 + +# TAG: maximum_object_size (bytes) +# Objects larger than this size will NOT be saved on disk. The +# value is specified in kilobytes, and the default is 4MB. If +# you wish to get a high BYTES hit ratio, you should probably +# increase this (one 32 MB object hit counts for 3200 10KB +# hits). If you wish to increase speed more than your want to +# save bandwidth you should leave this low. +# +# NOTE: if using the LFUDA replacement policy you should increase +# this value to maximize the byte hit rate improvement of LFUDA! +# See replacement_policy below for a discussion of this policy. +# +#Default: +# maximum_object_size 4096 KB + +# TAG: minimum_object_size (bytes) +# Objects smaller than this size will NOT be saved on disk. The +# value is specified in kilobytes, and the default is 0 KB, which +# means there is no minimum. +# +#Default: +# minimum_object_size 0 KB + +# TAG: maximum_object_size_in_memory (bytes) +# Objects greater than this size will not be attempted to kept in +# the memory cache. This should be set high enough to keep objects +# accessed frequently in memory to improve performance whilst low +# enough to keep larger objects from hoarding cache_mem . +# +#Default: +# maximum_object_size_in_memory 8 KB + +# TAG: ipcache_size (number of entries) +# TAG: ipcache_low (percent) +# TAG: ipcache_high (percent) +# The size, low-, and high-water marks for the IP cache. +# +#Default: +# ipcache_size 1024 +# ipcache_low 90 +# ipcache_high 95 + +# TAG: fqdncache_size (number of entries) +# Maximum number of FQDN cache entries. +# +#Default: +# fqdncache_size 1024 + +# TAG: cache_replacement_policy +# The cache replacement policy parameter determines which +# objects are evicted (replaced) when disk space is needed. +# +# lru : Squid's original list based LRU policy +# heap GDSF : Greedy-Dual Size Frequency +# heap LFUDA: Least Frequently Used with Dynamic Aging +# heap LRU : LRU policy implemented using a heap +# +# Applies to any cache_dir lines listed below this. +# +# The LRU policies keeps recently referenced objects. +# +# The heap GDSF policy optimizes object hit rate by keeping smaller +# popular objects in cache so it has a better chance of getting a +# hit. It achieves a lower byte hit rate than LFUDA though since +# it evicts larger (possibly popular) objects. +# +# The heap LFUDA policy keeps popular objects in cache regardless of +# their size and thus optimizes byte hit rate at the expense of +# hit rate since one large, popular object will prevent many +# smaller, slightly less popular objects from being cached. +# +# Both policies utilize a dynamic aging mechanism that prevents +# cache pollution that can otherwise occur with frequency-based +# replacement policies. +# +# NOTE: if using the LFUDA replacement policy you should increase +# the value of maximum_object_size above its default of 4096 KB to +# to maximize the potential byte hit rate improvement of LFUDA. +# +# For more information about the GDSF and LFUDA cache replacement +# policies see http://www.hpl.hp.com/techreports/1999/HPL-1999-69.html +# and http://fog.hpl.external.hp.com/techreports/98/HPL-98-173.html. +# +#Default: +# cache_replacement_policy lru + +# TAG: memory_replacement_policy +# The memory replacement policy parameter determines which +# objects are purged from memory when memory space is needed. +# +# See cache_replacement_policy for details. +# +#Default: +# memory_replacement_policy lru + + +# LOGFILE PATHNAMES AND CACHE DIRECTORIES +# ----------------------------------------------------------------------------- + +# TAG: cache_dir +# Usage: +# +# cache_dir Type Directory-Name Fs-specific-data [options] +# +# You can specify multiple cache_dir lines to spread the +# cache among different disk partitions. +# +# Type specifies the kind of storage system to use. Only "ufs" +# is built by default. To eanble any of the other storage systems +# see the --enable-storeio configure option. +# +# 'Directory' is a top-level directory where cache swap +# files will be stored. If you want to use an entire disk +# for caching, then this can be the mount-point directory. +# The directory must exist and be writable by the Squid +# process. Squid will NOT create this directory for you. +# +# The ufs store type: +# +# "ufs" is the old well-known Squid storage format that has always +# been there. +# +# cache_dir ufs Directory-Name Mbytes L1 L2 [options] +# +# 'Mbytes' is the amount of disk space (MB) to use under this +# directory. The default is 100 MB. Change this to suit your +# configuration. Do NOT put the size of your disk drive here. +# Instead, if you want Squid to use the entire disk drive, +# subtract 20% and use that value. +# +# 'Level-1' is the number of first-level subdirectories which +# will be created under the 'Directory'. The default is 16. +# +# 'Level-2' is the number of second-level subdirectories which +# will be created under each first-level directory. The default +# is 256. +# +# The aufs store type: +# +# "aufs" uses the same storage format as "ufs", utilizing +# POSIX-threads to avoid blocking the main Squid process on +# disk-I/O. This was formerly known in Squid as async-io. +# +# cache_dir aufs Directory-Name Mbytes L1 L2 [options] +# +# see argument descriptions under ufs above +# +# The diskd store type: +# +# "diskd" uses the same storage format as "ufs", utilizing a +# separate process to avoid blocking the main Squid process on +# disk-I/O. +# +# cache_dir diskd Directory-Name Mbytes L1 L2 [options] [Q1=n] [Q2=n] +# +# see argument descriptions under ufs above +# +# Q1 specifies the number of unacknowledged I/O requests when Squid +# stops opening new files. If this many messages are in the queues, +# Squid won't open new files. Default is 64 +# +# Q2 specifies the number of unacknowledged messages when Squid +# starts blocking. If this many messages are in the queues, +# Squid blocks until it recevies some replies. Default is 72 +# +# The coss store type: +# +# block-size=n defines the "block size" for COSS cache_dir's. +# Squid uses file numbers as block numbers. Since file numbers +# are limited to 24 bits, the block size determines the maximum +# size of the COSS partition. The default is 512 bytes, which +# leads to a maximum cache_dir size of 512<<24, or 8 GB. Note +# that you should not change the coss block size after Squid +# has written some objects to the cache_dir. +# +# Common options: +# +# read-only, this cache_dir is read only. +# +# max-size=n, refers to the max object size this storedir supports. +# It is used to initially choose the storedir to dump the object. +# Note: To make optimal use of the max-size limits you should order +# the cache_dir lines with the smallest max-size value first and the +# ones with no max-size specification last. +# +# Note that for coss, max-size must be less than COSS_MEMBUF_SZ +# (hard coded at 1 MB). +# +#Default: +# cache_dir ufs /var/spool/squid 100 16 256 + +# TAG: cache_access_log +# Logs the client request activity. Contains an entry for +# every HTTP and ICP queries received. To disable, enter "none". +# +#Default: +# cache_access_log /var/log/squid/access.log + +# TAG: cache_log +# Cache logging file. This is where general information about +# your cache's behavior goes. You can increase the amount of data +# logged to this file with the "debug_options" tag below. +# +#Default: +# cache_log /var/log/squid/cache.log + +# TAG: cache_store_log +# Logs the activities of the storage manager. Shows which +# objects are ejected from the cache, and which objects are +# saved and for how long. To disable, enter "none". There are +# not really utilities to analyze this data, so you can safely +# disable it. +# +#Default: +# cache_store_log /var/log/squid/store.log + +# TAG: cache_swap_log +# Location for the cache "swap.log." This log file holds the +# metadata of objects saved on disk. It is used to rebuild the +# cache during startup. Normally this file resides in each +# 'cache_dir' directory, but you may specify an alternate +# pathname here. Note you must give a full filename, not just +# a directory. Since this is the index for the whole object +# list you CANNOT periodically rotate it! +# +# If %s can be used in the file name then it will be replaced with a +# a representation of the cache_dir name where each / is replaced +# with '.'. This is needed to allow adding/removing cache_dir +# lines when cache_swap_log is being used. +# +# If have more than one 'cache_dir', and %s is not used in the name +# then these swap logs will have names such as: +# +# cache_swap_log.00 +# cache_swap_log.01 +# cache_swap_log.02 +# +# The numbered extension (which is added automatically) +# corresponds to the order of the 'cache_dir' lines in this +# configuration file. If you change the order of the 'cache_dir' +# lines in this file, then these log files will NOT correspond to +# the correct 'cache_dir' entry (unless you manually rename +# them). We recommend that you do NOT use this option. It is +# better to keep these log files in each 'cache_dir' directory. +# +#Default: +# none + +# TAG: emulate_httpd_log on|off +# The Cache can emulate the log file format which many 'httpd' +# programs use. To disable/enable this emulation, set +# emulate_httpd_log to 'off' or 'on'. The default +# is to use the native log format since it includes useful +# information that Squid-specific log analyzers use. +# +#Default: +# emulate_httpd_log off + +# TAG: log_ip_on_direct on|off +# Log the destination IP address in the hierarchy log tag when going +# direct. Earlier Squid versions logged the hostname here. If you +# prefer the old way set this to off. +# +#Default: +# log_ip_on_direct on + +# TAG: mime_table +# Pathname to Squid's MIME table. You shouldn't need to change +# this, but the default file contains examples and formatting +# information if you do. +# +#Default: +# mime_table /etc/squid/mime.conf + +# TAG: log_mime_hdrs on|off +# The Cache can record both the request and the response MIME +# headers for each HTTP transaction. The headers are encoded +# safely and will appear as two bracketed fields at the end of +# the access log (for either the native or httpd-emulated log +# formats). To enable this logging set log_mime_hdrs to 'on'. +# +#Default: +# log_mime_hdrs off + +# TAG: useragent_log +# Squid will write the User-Agent field from HTTP requests +# to the filename specified here. By default useragent_log +# is disabled. +# +#Default: +# none + +# TAG: referer_log +# Note: This option is only available if Squid is rebuilt with the +# --enable-referer-log option +# +# Squid will write the Referer field from HTTP requests to the +# filename specified here. By default referer_log is disabled. +# +#Default: +# none + +# TAG: pid_filename +# A filename to write the process-id to. To disable, enter "none". +# +#Default: +# pid_filename /var/run/squid.pid + +# TAG: debug_options +# Logging options are set as section,level where each source file +# is assigned a unique section. Lower levels result in less +# output, Full debugging (level 9) can result in a very large +# log file, so be careful. The magic word "ALL" sets debugging +# levels for all sections. We recommend normally running with +# "ALL,1". +# +#Default: +# debug_options ALL,1 + +# TAG: log_fqdn on|off +# Turn this on if you wish to log fully qualified domain names +# in the access.log. To do this Squid does a DNS lookup of all +# IP's connecting to it. This can (in some situations) increase +# latency, which makes your cache seem slower for interactive +# browsing. +# +#Default: +# log_fqdn off + +# TAG: client_netmask +# A netmask for client addresses in logfiles and cachemgr output. +# Change this to protect the privacy of your cache clients. +# A netmask of 255.255.255.0 will log all IP's in that range with +# the last digit set to '0'. +# +#Default: +# client_netmask 255.255.255.255 + + +# OPTIONS FOR EXTERNAL SUPPORT PROGRAMS +# ----------------------------------------------------------------------------- + +# TAG: ftp_user +# If you want the anonymous login password to be more informative +# (and enable the use of picky ftp servers), set this to something +# reasonable for your domain, like wwwuser@somewhere.net +# +# The reason why this is domainless by default is that the +# request can be made on the behalf of a user in any domain, +# depending on how the cache is used. +# Some ftp server also validate that the email address is valid +# (for example perl.com). +# +#Default: +# ftp_user Squid@ + +# TAG: ftp_list_width +# Sets the width of ftp listings. This should be set to fit in +# the width of a standard browser. Setting this too small +# can cut off long filenames when browsing ftp sites. +# +#Default: +# ftp_list_width 32 + +# TAG: ftp_passive +# If your firewall does not allow Squid to use passive +# connections, then turn off this option. +# +#Default: +# ftp_passive on + +# TAG: ftp_sanitycheck +# For security and data integrity reasons Squid by default performs +# sanity checks of the addresses of FTP data connections ensure the +# data connection is to the requested server. If you need to allow +# FTP connections to servers using another IP address for the data +# connection then turn this off. +# +#Default: +# ftp_sanitycheck on + +# TAG: ftp_telnet_protocol +# The FTP protocol is officially defined to use the telnet protocol +# as transport channel for the control connection. However, many +# implemenations are broken and does not respect this aspect of +# the FTP protocol. +# +# If you have trouble accessing files with ASCII code 255 in the +# path or similar problems involving this ASCII code then you can +# try setting this directive to off. If that helps report to the +# operator of the FTP server in question that their FTP server +# is broken and does not follow the FTP standard. +# +#Default: +# ftp_telnet_protocol on + +# TAG: cache_dns_program +# Note: This option is only available if Squid is rebuilt with the +# --disable-internal-dns option +# +# Specify the location of the executable for dnslookup process. +# +#Default: +# cache_dns_program /usr/lib/squid/dnsserver + +# TAG: dns_children +# Note: This option is only available if Squid is rebuilt with the +# --disable-internal-dns option +# +# The number of processes spawn to service DNS name lookups. +# For heavily loaded caches on large servers, you should +# probably increase this value to at least 10. The maximum +# is 32. The default is 5. +# +# You must have at least one dnsserver process. +# +#Default: +# dns_children 5 + +# TAG: dns_retransmit_interval +# Initial retransmit interval for DNS queries. The interval is +# doubled each time all configured DNS servers have been tried. +# +# +#Default: +# dns_retransmit_interval 5 seconds + +# TAG: dns_timeout +# DNS Query timeout. If no response is received to a DNS query +# within this time then all DNS servers for the queried domain +# is assumed to be unavailable. +# +#Default: +# dns_timeout 2 minutes + +# TAG: dns_defnames on|off +# Note: This option is only available if Squid is rebuilt with the +# --disable-internal-dns option +# +# Normally the 'dnsserver' disables the RES_DEFNAMES resolver +# option (see res_init(3)). This prevents caches in a hierarchy +# from interpreting single-component hostnames locally. To allow +# dnsserver to handle single-component names, enable this +# option. +# +#Default: +# dns_defnames off + +# TAG: dns_nameservers +# Use this if you want to specify a list of DNS name servers +# (IP addresses) to use instead of those given in your +# /etc/resolv.conf file. +# On Windows platforms, if no value is specified here or in +# the /etc/resolv.conf file, the list of DNS name servers are +# taken from the Windows registry, both static and dynamic DHCP +# configurations are supported. +# +# Example: dns_nameservers 10.0.0.1 192.172.0.4 +# +#Default: +# none + +# TAG: hosts_file +# Location of the host-local IP name-address associations +# database. Most Operating Systems have such a file: under +# Un*X it's by default in /etc/hosts MS-Windows NT/2000 places +# that in %SystemRoot%(by default +# c:\winnt)\system32\drivers\etc\hosts, while Windows 9x/ME +# places that in %windir%(usually c:\windows)\hosts +# +# The file contains newline-separated definitions, in the +# form ip_address_in_dotted_form name [name ...] names are +# whitespace-separated. lines beginnng with an hash (#) +# character are comments. +# +# The file is checked at startup and upon configuration. If +# set to 'none', it won't be checked. If append_domain is +# used, that domain will be added to domain-local (i.e. not +# containing any dot character) host definitions. +# +#Default: +# hosts_file /etc/hosts + +# TAG: diskd_program +# Specify the location of the diskd executable. +# Note that this is only useful if you have compiled in +# diskd as one of the store io modules. +# +#Default: +# diskd_program /usr/lib/squid/diskd + +# TAG: unlinkd_program +# Specify the location of the executable for file deletion process. +# +#Default: +# unlinkd_program /usr/lib/squid/unlinkd + +# TAG: pinger_program +# Specify the location of the executable for the pinger process. +# +#Default: +# pinger_program /usr/lib/squid/pinger + +# TAG: redirect_program +# Specify the location of the executable for the URL redirector. +# Since they can perform almost any function there isn't one included. +# See the FAQ (section 15) for information on how to write one. +# By default, a redirector is not used. +# +#Default: +# none + +# TAG: redirect_children +# The number of redirector processes to spawn. If you start +# too few Squid will have to wait for them to process a backlog of +# URLs, slowing it down. If you start too many they will use RAM +# and other system resources. +# +#Default: +# redirect_children 5 + +# TAG: redirect_rewrites_host_header +# By default Squid rewrites any Host: header in redirected +# requests. If you are running an accelerator then this may +# not be a wanted effect of a redirector. +# +#Default: +# redirect_rewrites_host_header on + +# TAG: redirector_access +# If defined, this access list specifies which requests are +# sent to the redirector processes. By default all requests +# are sent. +# +#Default: +# none + +# TAG: auth_param +# This is used to define parameters for the various authentication +# schemes supported by Squid. +# +# format: auth_param scheme parameter [setting] +# +# The order that authentication schemes are presented to the client is +# dependant on the order the scheme first appears in config file. IE +# has a bug (it's not rfc 2617 compliant) in that it will use the basic +# scheme if basic is the first entry presented, even if more secure +# schemes are presented. For now use the order in the recommended +# settings section below. If other browsers have difficulties (don't +# recognise the schemes offered even if you are using basic) then either +# put basic first, or disable the other schemes (by commenting out their +# program entry). +# +# Once an authentication scheme is fully configured, it can only be +# shutdown by shutting squid down and restarting. Changes can be made on +# the fly and activated with a reconfigure. I.E. You can change to a +# different helper, but not unconfigure the helper completely. +# +# Please note that while this directive defines how Squid processes +# authentication it does not automatically activate authentication. +# To use authenticaiton you must in addition make use of acls based +# on login name in http_access (proxy_auth, proxy_auth_regex or +# external with %LOGIN used in the format tag). The browser will be +# challenged for authentication on the first such acl encountered +# in http_access processing and will also be rechallenged for new +# login credentials if the request is being denied by a proxy_auth +# type acl. +# +# === Parameters for the basic scheme follow. === +# +# "program" cmdline +# Specify the command for the external authenticator. Such a program +# reads a line containing "username password" and replies "OK" or +# "ERR" in an endless loop. +# +# By default, the basic authentication sheme is not used unless a +# program is specified. +# +# If you want to use the traditional proxy authentication, jump over to +# the helpers/basic_auth/NCSA directory and type: +# % make +# % make install +# +# Then, set this line to something like +# +# auth_param basic program /usr/libexec/ncsa_auth /usr/etc/passwd +# +# "children" numberofchildren +# The number of authenticator processes to spawn. +# If you start too few Squid will have to wait for them to process a +# backlog of usercode/password verifications, slowing it down. When +# password verifications are done via a (slow) network you are likely to +# need lots of authenticator processes. +# auth_param basic children 5 +# +# "realm" realmstring +# Specifies the realm name which is to be reported to the client for +# the basic proxy authentication scheme (part of the text the user +# will see when prompted their username and password). +# auth_param basic realm Squid proxy-caching web server +# +# "credentialsttl" timetolive +# Specifies how long squid assumes an externally validated +# username:password pair is valid for - in other words how often the +# helper program is called for that user. Set this low to force +# revalidation with short lived passwords. Note that setting this high +# does not impact your susceptability to replay attacks unless you are +# using an one-time password system (such as SecureID). If you are using +# such a system, you will be vulnerable to replay attacks unless you +# also use the max_user_ip ACL in an http_access rule. +# auth_param basic credentialsttl 2 hours +# +# === Parameters for the digest scheme follow === +# +# "program" cmdline +# Specify the command for the external authenticator. Such a program +# reads a line containing "username":"realm" and replies with the +# appropriate H(A1) value base64 encoded. See rfc 2616 for the +# definition of H(A1). +# +# By default, the digest authentication scheme is not used unless a +# program is specified. +# +# If you want to use a digest authenticator, jump over to the +# helpers/digest_auth/ directory and choose the authenticator to use. +# It it's directory type +# % make +# % make install +# +# Then, set this line to something like +# +# auth_param digest program /usr/libexec/digest_auth_pw /usr/etc/digpass +# +# +# "children" numberofchildren +# The number of authenticator processes to spawn (no default). If you +# start too few Squid will have to wait for them to process a backlog of +# H(A1) calculations, slowing it down. When the H(A1) calculations are +# done via a (slow) network you are likely to need lots of authenticator +# processes. +# auth_param digest children 5 +# +# "realm" realmstring +# Specifies the realm name which is to be reported to the client for the +# digest proxy authentication scheme (part of the text the user will see +# when prompted their username and password). +# auth_param digest realm Squid proxy-caching web server +# +# "nonce_garbage_interval" timeinterval +# Specifies the interval that nonces that have been issued to clients are +# checked for validity. +# auth_param digest nonce_garbage_interval 5 minutes +# +# "nonce_max_duration" timeinterval +# Specifies the maximum length of time a given nonce will be valid for. +# auth_param digest nonce_max_duration 30 minutes +# +# "nonce_max_count" number +# Specifies the maximum number of times a given nonce can be used. +# auth_param digest nonce_max_count 50 +# +# "nonce_strictness" on|off +# Determines if squid requires strict increment-by-1 behaviour for nonce +# counts, or just incrementing (off - for use when useragents generate +# nonce counts that occasionally miss 1 (ie, 1,2,4,6)). +# auth_param digest nonce_strictness off +# +# "check_nonce_count" on|off +# This directive if set to off can disable the nonce count check +# completely to work around buggy digest qop implementations in certain +# mainstream browser versions. Default on to check the nonce count to +# protect from authentication replay attacks. +# auth_param digest check_nonce_count on +# +# "post_workaround" on|off +# This is a workaround to certain buggy browsers who sends an incorrect +# request digest in POST requests when reusing the same nonce as aquired +# earlier in response to a GET request. +# auth_param digest post_workaround off +# +# === NTLM scheme options follow === +# +# "program" cmdline +# Specify the command for the external ntlm authenticator. Such a +# program participates in the NTLMSSP exchanges between Squid and the +# client and reads commands according to the Squid ntlmssp helper +# protocol. See helpers/ntlm_auth/ for details. Recommended ntlm +# authenticator is ntlm_auth from Samba-3.X, but a number of other +# ntlm authenticators is available. +# +# By default, the ntlm authentication scheme is not used unless a +# program is specified. +# +# auth_param ntlm program /path/to/samba/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp +# +# "children" numberofchildren +# The number of authenticator processes to spawn (no default). If you +# start too few Squid will have to wait for them to process a backlog +# of credential verifications, slowing it down. When crendential +# verifications are done via a (slow) network you are likely to need +# lots of authenticator processes. +# auth_param ntlm children 5 +# +# "max_challenge_reuses" number +# The maximum number of times a challenge given by a ntlm authentication +# helper can be reused. Increasing this number increases your exposure +# to replay attacks on your network. 0 (the default) means use the +# challenge is used only once. See also the max_ntlm_challenge_lifetime +# directive if enabling challenge reuses. +# auth_param ntlm max_challenge_reuses 0 +# +# "max_challenge_lifetime" timespan +# The maximum time period that a ntlm challenge is reused over. The +# actual period will be the minimum of this time AND the number of +# reused challenges. +# auth_param ntlm max_challenge_lifetime 2 minutes +# +# "use_ntlm_negotiate" on|off +# Enables support for NTLM NEGOTIATE packet exchanges with the helper. +# The configured ntlm authenticator must be able to handle NTLM +# NEGOTIATE packet. See the authenticator programs documentation if +# unsure. ntlm_auth from Samba-3.0.2 or later supports the use of this +# option. +# The NEGOTIATE packet is required to support NTLMv2 and a +# number of other negotiable NTLMSSP options, and also makes it +# more likely the negotiation is successful. Enabling this parameter +# will also solve problems encountered when NT domain policies +# restrict users to access only certain workstations. When this is off, +# all users must be allowed to log on the proxy servers too, or they'll +# get "invalid workstation" errors - and access denied - when trying to +# use Squid's services. +# Use of ntlm NEGOTIATE is incompatible with challenge reuse, so +# enabling this parameter will OVERRIDE the max_challenge_reuses and +# max_challenge_lifetime parameters and set them to 0. +# auth_param ntlm use_ntlm_negotiate off +# +#Recommended minimum configuration: +#auth_param digest program +#auth_param digest children 5 +#auth_param digest realm Squid proxy-caching web server +#auth_param digest nonce_garbage_interval 5 minutes +#auth_param digest nonce_max_duration 30 minutes +#auth_param digest nonce_max_count 50 +#auth_param ntlm program /usr/lib/squid/ntlm_auth IPH\\PDC +#auth_param ntlm children 5 +#auth_param ntlm max_challenge_reuses 0 +#auth_param ntlm max_challenge_lifetime 2 minutes +#auth_param ntlm use_ntlm_negotiate off +auth_param basic program /usr/lib/squid/squid_ldap_auth -b ou=People,dc=example,dc=com -f (&(uid=%s)(objectClass=gosaProxyAccount)) +auth_param basic children 5 +auth_param basic realm Squid proxy-caching web server +auth_param basic credentialsttl 2 hours + +# TAG: authenticate_cache_garbage_interval +# The time period between garbage collection across the username cache. +# This is a tradeoff between memory utilisation (long intervals - say +# 2 days) and CPU (short intervals - say 1 minute). Only change if you +# have good reason to. +# +#Default: +# authenticate_cache_garbage_interval 1 hour + +# TAG: authenticate_ttl +# The time a user & their credentials stay in the logged in user cache +# since their last request. When the garbage interval passes, all user +# credentials that have passed their TTL are removed from memory. +# +#Default: +# authenticate_ttl 1 hour + +# TAG: authenticate_ip_ttl +# If you use proxy authentication and the 'max_user_ip' ACL, this +# directive controls how long Squid remembers the IP addresses +# associated with each user. Use a small value (e.g., 60 seconds) if +# your users might change addresses quickly, as is the case with +# dialups. You might be safe using a larger value (e.g., 2 hours) in a +# corporate LAN environment with relatively static address assignments. +# +#Default: +# authenticate_ip_ttl 0 seconds + +# TAG: external_acl_type +# This option defines external acl classes using a helper program to +# look up the status +# +# external_acl_type name [options] FORMAT.. /path/to/helper [helper arguments..] +# +# Options: +# +# ttl=n TTL in seconds for cached results (defaults to 3600 +# for 1 hour) +# negative_ttl=n +# TTL for cached negative lookups (default same +# as ttl) +# children=n Concurrency level / number of processes spawn +# to service external acl lookups of this type. +# Note: see compatibility note below +# cache=n result cache size, 0 is unbounded (default) +# +# FORMAT specifications +# +# %LOGIN Authenticated user login name +# %IDENT Ident user name +# %SRC Client IP +# %DST Requested host +# %PROTO Requested protocol +# %PORT Requested port +# %METHOD Request method +# %{Header} HTTP request header +# %{Hdr:member} HTTP request header list member +# %{Hdr:;member} +# HTTP request header list member using ; as +# list separator. ; can be any non-alphanumeric +# character. +# +# In addition, any string specified in the referencing acl will +# also be included in the helper request line, after the specified +# formats (see the "acl external" directive) +# +# The helper receives lines per the above format specification, +# and returns lines starting with OK or ERR indicating the validity +# of the request and optionally followed by additional keywords with +# more details. +# +# General result syntax: +# +# OK/ERR keyword=value ... +# +# Defined keywords: +# +# user= The users name (login) +# error= Error description (only defined for ERR results) +# +# Keyword values need to be enclosed in quotes if they may contain +# whitespace, or the whitespace escaped using \. Any quotes or \ +# characters within the keyword value must be \ escaped. +# +# Compatibility Note: The children= option was named concurrency= in +# Squid-2.5.STABLE3 and earlier and such syntax is still accepted to +# keep compatibility within the Squid-2.5 release. However, the meaning +# of concurrency= option has changed in Squid-3 and the old syntax of +# the directive is therefore depreated from Squid-2.5.STABLE4 and later. +# If you want to be able to easily downgrade to earlier Squid-2.5 +# releases then you may want to continue using the old name, if not +# please use the new name. +# +#Default: +# none + + +# OPTIONS FOR TUNING THE CACHE +# ----------------------------------------------------------------------------- + +# TAG: wais_relay_host +# TAG: wais_relay_port +# Relay WAIS request to host (1st arg) at port (2 arg). +# +#Default: +# wais_relay_port 0 + +# TAG: request_header_max_size (KB) +# This specifies the maximum size for HTTP headers in a request. +# Request headers are usually relatively small (about 512 bytes). +# Placing a limit on the request header size will catch certain +# bugs (for example with persistent connections) and possibly +# buffer-overflow or denial-of-service attacks. +# +#Default: +# request_header_max_size 10 KB + +# TAG: request_body_max_size (KB) +# This specifies the maximum size for an HTTP request body. +# In other words, the maximum size of a PUT/POST request. +# A user who attempts to send a request with a body larger +# than this limit receives an "Invalid Request" error message. +# If you set this parameter to a zero (the default), there will +# be no limit imposed. +# +#Default: +# request_body_max_size 0 KB + +# TAG: refresh_pattern +# usage: refresh_pattern [-i] regex min percent max [options] +# +# By default, regular expressions are CASE-SENSITIVE. To make +# them case-insensitive, use the -i option. +# +# 'Min' is the time (in minutes) an object without an explicit +# expiry time should be considered fresh. The recommended +# value is 0, any higher values may cause dynamic applications +# to be erroneously cached unless the application designer +# has taken the appropriate actions. +# +# 'Percent' is a percentage of the objects age (time since last +# modification age) an object without explicit expiry time +# will be considered fresh. +# +# 'Max' is an upper limit on how long objects without an explicit +# expiry time will be considered fresh. +# +# options: override-expire +# override-lastmod +# reload-into-ims +# ignore-reload +# +# override-expire enforces min age even if the server +# sent a Expires: header. Doing this VIOLATES the HTTP +# standard. Enabling this feature could make you liable +# for problems which it causes. +# +# override-lastmod enforces min age even on objects +# that was modified recently. +# +# reload-into-ims changes client no-cache or ``reload'' +# to If-Modified-Since requests. Doing this VIOLATES the +# HTTP standard. Enabling this feature could make you +# liable for problems which it causes. +# +# ignore-reload ignores a client no-cache or ``reload'' +# header. Doing this VIOLATES the HTTP standard. Enabling +# this feature could make you liable for problems which +# it causes. +# +# Basically a cached object is: +# +# FRESH if expires < now, else STALE +# STALE if age > max +# FRESH if lm-factor < percent, else STALE +# FRESH if age < min +# else STALE +# +# The refresh_pattern lines are checked in the order listed here. +# The first entry which matches is used. If none of the entries +# match, then the default will be used. +# +# Note, you must uncomment all the default lines if you want +# to change one. The default setting is only active if none is +# used. +# +#Suggested default: +refresh_pattern ^ftp: 1440 20% 10080 +refresh_pattern ^gopher: 1440 0% 1440 +refresh_pattern . 0 20% 4320 + +# TAG: quick_abort_min (KB) +# TAG: quick_abort_max (KB) +# TAG: quick_abort_pct (percent) +# The cache by default continues downloading aborted requests +# which are almost completed (less than 16 KB remaining). This +# may be undesirable on slow (e.g. SLIP) links and/or very busy +# caches. Impatient users may tie up file descriptors and +# bandwidth by repeatedly requesting and immediately aborting +# downloads. +# +# When the user aborts a request, Squid will check the +# quick_abort values to the amount of data transfered until +# then. +# +# If the transfer has less than 'quick_abort_min' KB remaining, +# it will finish the retrieval. +# +# If the transfer has more than 'quick_abort_max' KB remaining, +# it will abort the retrieval. +# +# If more than 'quick_abort_pct' of the transfer has completed, +# it will finish the retrieval. +# +# If you do not want any retrieval to continue after the client +# has aborted, set both 'quick_abort_min' and 'quick_abort_max' +# to '0 KB'. +# +# If you want retrievals to always continue if they are being +# cached then set 'quick_abort_min' to '-1 KB'. +# +#Default: +# quick_abort_min 16 KB +# quick_abort_max 16 KB +# quick_abort_pct 95 + +# TAG: negative_ttl time-units +# Time-to-Live (TTL) for failed requests. Certain types of +# failures (such as "connection refused" and "404 Not Found") are +# negatively-cached for a configurable amount of time. The +# default is 5 minutes. Note that this is different from +# negative caching of DNS lookups. +# +#Default: +# negative_ttl 5 minutes + +# TAG: positive_dns_ttl time-units +# Upper limit on how long Squid will cache positive DNS responses. +# Default is 6 hours (360 minutes). This directive must be set +# larger than negative_dns_ttl. +# +#Default: +# positive_dns_ttl 6 hours + +# TAG: negative_dns_ttl time-units +# Time-to-Live (TTL) for negative caching of failed DNS lookups. +# This also makes sets the lower cache limit on positive lookups. +# Minimum value is 1 second, and it is not recommendable to go +# much below 10 seconds. +# +#Default: +# negative_dns_ttl 1 minute + +# TAG: range_offset_limit (bytes) +# Sets a upper limit on how far into the the file a Range request +# may be to cause Squid to prefetch the whole file. If beyond this +# limit then Squid forwards the Range request as it is and the result +# is NOT cached. +# +# This is to stop a far ahead range request (lets say start at 17MB) +# from making Squid fetch the whole object up to that point before +# sending anything to the client. +# +# A value of -1 causes Squid to always fetch the object from the +# beginning so that it may cache the result. (2.0 style) +# +# A value of 0 causes Squid to never fetch more than the +# client requested. (default) +# +#Default: +# range_offset_limit 0 KB + + +# TIMEOUTS +# ----------------------------------------------------------------------------- + +# TAG: forward_timeout time-units +# This parameter specifies how long Squid should at most attempt in +# finding a forwarding path for the request before giving up. +# +#Default: +# forward_timeout 4 minutes + +# TAG: connect_timeout time-units +# This parameter specifies how long to wait for the TCP connect to +# the requested server or peer to complete before Squid should +# attempt to find another path where to forward the request. +# +#Default: +# connect_timeout 1 minute + +# TAG: peer_connect_timeout time-units +# This parameter specifies how long to wait for a pending TCP +# connection to a peer cache. The default is 30 seconds. You +# may also set different timeout values for individual neighbors +# with the 'connect-timeout' option on a 'cache_peer' line. +# +#Default: +# peer_connect_timeout 30 seconds + +# TAG: read_timeout time-units +# The read_timeout is applied on server-side connections. After +# each successful read(), the timeout will be extended by this +# amount. If no data is read again after this amount of time, +# the request is aborted and logged with ERR_READ_TIMEOUT. The +# default is 15 minutes. +# +#Default: +# read_timeout 15 minutes + +# TAG: request_timeout +# How long to wait for an HTTP request after initial +# connection establishment. +# +#Default: +# request_timeout 5 minutes + +# TAG: persistent_request_timeout +# How long to wait for the next HTTP request on a persistent +# connection after the previous request completes. +# +#Default: +# persistent_request_timeout 1 minute + +# TAG: client_lifetime time-units +# The maximum amount of time that a client (browser) is allowed to +# remain connected to the cache process. This protects the Cache +# from having a lot of sockets (and hence file descriptors) tied up +# in a CLOSE_WAIT state from remote clients that go away without +# properly shutting down (either because of a network failure or +# because of a poor client implementation). The default is one +# day, 1440 minutes. +# +# NOTE: The default value is intended to be much larger than any +# client would ever need to be connected to your cache. You +# should probably change client_lifetime only as a last resort. +# If you seem to have many client connections tying up +# filedescriptors, we recommend first tuning the read_timeout, +# request_timeout, persistent_request_timeout and quick_abort values. +# +#Default: +# client_lifetime 1 day + +# TAG: half_closed_clients +# Some clients may shutdown the sending side of their TCP +# connections, while leaving their receiving sides open. Sometimes, +# Squid can not tell the difference between a half-closed and a +# fully-closed TCP connection. By default, half-closed client +# connections are kept open until a read(2) or write(2) on the +# socket returns an error. Change this option to 'off' and Squid +# will immediately close client connections when read(2) returns +# "no more data to read." +# +#Default: +# half_closed_clients on + +# TAG: pconn_timeout +# Timeout for idle persistent connections to servers and other +# proxies. +# +#Default: +# pconn_timeout 120 seconds + +# TAG: ident_timeout +# Maximum time to wait for IDENT lookups to complete. +# +# If this is too high, and you enabled IDENT lookups from untrusted +# users, then you might be susceptible to denial-of-service by having +# many ident requests going at once. +# +#Default: +# ident_timeout 10 seconds + +# TAG: shutdown_lifetime time-units +# When SIGTERM or SIGHUP is received, the cache is put into +# "shutdown pending" mode until all active sockets are closed. +# This value is the lifetime to set for all open descriptors +# during shutdown mode. Any active clients after this many +# seconds will receive a 'timeout' message. +# +#Default: +# shutdown_lifetime 30 seconds + + +# ACCESS CONTROLS +# ----------------------------------------------------------------------------- + +# TAG: acl +# Defining an Access List +# +# acl aclname acltype string1 ... +# acl aclname acltype "file" ... +# +# when using "file", the file should contain one item per line +# +# acltype is one of the types described below +# +# By default, regular expressions are CASE-SENSITIVE. To make +# them case-insensitive, use the -i option. +# +# acl aclname src ip-address/netmask ... (clients IP address) +# acl aclname src addr1-addr2/netmask ... (range of addresses) +# acl aclname dst ip-address/netmask ... (URL host's IP address) +# acl aclname myip ip-address/netmask ... (local socket IP address) +# +# acl aclname srcdomain .foo.com ... # reverse lookup, client IP +# acl aclname dstdomain .foo.com ... # Destination server from URL +# acl aclname srcdom_regex [-i] xxx ... # regex matching client name +# acl aclname dstdom_regex [-i] xxx ... # regex matching server +# # For dstdomain and dstdom_regex a reverse lookup is tried if a IP +# # based URL is used. The name "none" is used if the reverse lookup +# # fails. +# +# acl aclname time [day-abbrevs] [h1:m1-h2:m2] +# day-abbrevs: +# S - Sunday +# M - Monday +# T - Tuesday +# W - Wednesday +# H - Thursday +# F - Friday +# A - Saturday +# h1:m1 must be less than h2:m2 +# acl aclname url_regex [-i] ^http:// ... # regex matching on whole URL +# acl aclname urlpath_regex [-i] \.gif$ ... # regex matching on URL path +# acl aclname urllogin [-i] [^a-zA-Z0-9] ... # regex matching on URL login field +# acl aclname port 80 70 21 ... +# acl aclname port 0-1024 ... # ranges allowed +# acl aclname myport 3128 ... # (local socket TCP port) +# acl aclname proto HTTP FTP ... +# acl aclname method GET POST ... +# acl aclname browser [-i] regexp ... +# # pattern match on User-Agent header +# acl aclname referer_regex [-i] regexp ... +# # pattern match on Referer header +# # Referer is highly unreliable, so use with care +# acl aclname ident username ... +# acl aclname ident_regex [-i] pattern ... +# # string match on ident output. +# # use REQUIRED to accept any non-null ident. +# acl aclname src_as number ... +# acl aclname dst_as number ... +# # Except for access control, AS numbers can be used for +# # routing of requests to specific caches. Here's an +# # example for routing all requests for AS#1241 and only +# # those to mycache.mydomain.net: +# # acl asexample dst_as 1241 +# # cache_peer_access mycache.mydomain.net allow asexample +# # cache_peer_access mycache_mydomain.net deny all +# +# acl aclname proxy_auth username ... +# acl aclname proxy_auth_regex [-i] pattern ... +# # list of valid usernames +# # use REQUIRED to accept any valid username. +# # +# # NOTE: when a Proxy-Authentication header is sent but it is not +# # needed during ACL checking the username is NOT logged +# # in access.log. +# # +# # NOTE: proxy_auth requires a EXTERNAL authentication program +# # to check username/password combinations (see +# # auth_param directive). +# # +# # WARNING: proxy_auth can't be used in a transparent proxy. It +# # collides with any authentication done by origin servers. It may +# # seem like it works at first, but it doesn't. +# +# acl aclname snmp_community string ... +# # A community string to limit access to your SNMP Agent +# # Example: +# # +# # acl snmppublic snmp_community public +# +# acl aclname maxconn number +# # This will be matched when the client's IP address has +# # more than HTTP connections established. +# +# acl aclname max_user_ip [-s] number +# # This will be matched when the user attempts to log in from more +# # than different ip addresses. The authenticate_ip_ttl +# # parameter controls the timeout on the ip entries. +# # If -s is specified then the limit is strict, denying browsing +# # from any further IP addresses until the ttl has expired. Without +# # -s Squid will just annoy the user by "randomly" denying requests. +# # (the counter is then reset each time the limit is reached and a +# # request is denied) +# # NOTE: in acceleration mode or where there is mesh of child proxies, +# # clients may appear to come from multiple addresses if they are +# # going through proxy farms, so a limit of 1 may cause user problems. +# +# acl aclname req_mime_type mime-type1 ... +# # regex match agains the mime type of the request generated +# # by the client. Can be used to detect file upload or some +# # types HTTP tunelling requests. +# # NOTE: This does NOT match the reply. You cannot use this +# # to match the returned file type. +# +# acl aclname rep_mime_type mime-type1 ... +# # regex match against the mime type of the reply recieved by +# # squid. Can be used to detect file download or some +# # types HTTP tunelling requests. +# # NOTE: This has no effect in http_access rules. It only has +# # effect in rules that affect the reply data stream such as +# # http_reply_access. +# +# acl acl_name external class_name [arguments...] +# # external ACL lookup via a helper class defined by the +# # external_acl_type directive. +# +#Examples: +#acl myexample dst_as 1241 +#acl password proxy_auth REQUIRED +#acl fileupload req_mime_type -i ^multipart/form-data$ +#acl javascript rep_mime_type -i ^application/x-javascript$ +# +#Recommended minimum configuration: +acl all src 0.0.0.0/0.0.0.0 +acl manager proto cache_object +acl localhost src 127.0.0.1/255.255.255.255 +acl to_localhost dst 127.0.0.0/8 +acl SSL_ports port 443 563 +acl Jabber_ports port 5222 +acl Safe_ports port 80 # http +acl Safe_ports port 21 # ftp +acl Safe_ports port 443 563 # https, snews +acl Safe_ports port 70 # gopher +acl Safe_ports port 210 # wais +acl Safe_ports port 1025-65535 # unregistered ports +acl Safe_ports port 280 # http-mgmt +acl Safe_ports port 488 # gss-http +acl Safe_ports port 591 # filemaker +acl Safe_ports port 777 # multiling http +acl CONNECT method CONNECT + +# TAG: http_access +# Allowing or Denying access based on defined access lists +# +# Access to the HTTP port: +# http_access allow|deny [!]aclname ... +# +# NOTE on default values: +# +# If there are no "access" lines present, the default is to deny +# the request. +# +# If none of the "access" lines cause a match, the default is the +# opposite of the last line in the list. If the last line was +# deny, then the default is allow. Conversely, if the last line +# is allow, the default will be deny. For these reasons, it is a +# good idea to have an "deny all" or "allow all" entry at the end +# of your access lists to avoid potential confusion. +# +#Default: +# http_access deny all +# +#Recommended minimum configuration: +# +# Only allow cachemgr access from localhost +http_access allow manager localhost +http_access deny manager +# Deny requests to unknown ports +http_access deny !Safe_ports +# Deny CONNECT to other than SSL ports +http_access deny CONNECT !SSL_ports !Jabber_ports +# +# We strongly recommend to uncomment the following to protect innocent +# web applications running on the proxy server who think that the only +# one who can access services on "localhost" is a local user +#http_access deny to_localhost +# +# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS + +# Example rule allowing access from your local networks. Adapt +# to list your (internal) IP networks from where browsing should +# be allowed +acl password proxy_auth REQUIRED + +http_access allow password + + +# And finally deny all other access to this proxy +http_access allow localhost +http_access deny all + +# TAG: http_reply_access +# Allow replies to client requests. This is complementary to http_access. +# +# http_reply_access allow|deny [!] aclname ... +# +# NOTE: if there are no access lines present, the default is to allow +# all replies +# +# If none of the access lines cause a match, then the opposite of the +# last line will apply. Thus it is good practice to end the rules +# with an "allow all" or "deny all" entry. +# +#Default: +# http_reply_access allow all +# +#Recommended minimum configuration: +# +# Insert your own rules here. +# +# +# and finally allow by default +http_reply_access allow all + +# TAG: icp_access +# Allowing or Denying access to the ICP port based on defined +# access lists +# +# icp_access allow|deny [!]aclname ... +# +# See http_access for details +# +#Default: +# icp_access deny all +# +#Allow ICP queries from everyone +#icp_access allow all + +# TAG: miss_access +# Use to force your neighbors to use you as a sibling instead of +# a parent. For example: +# +# acl localclients src 172.16.0.0/16 +# miss_access allow localclients +# miss_access deny !localclients +# +# This means that only your local clients are allowed to fetch +# MISSES and all other clients can only fetch HITS. +# +# By default, allow all clients who passed the http_access rules +# to fetch MISSES from us. +# +#Default setting: +# miss_access allow all + +# TAG: cache_peer_access +# Similar to 'cache_peer_domain' but provides more flexibility by +# using ACL elements. +# +# cache_peer_access cache-host allow|deny [!]aclname ... +# +# The syntax is identical to 'http_access' and the other lists of +# ACL elements. See the comments for 'http_access' below, or +# the Squid FAQ (http://www.squid-cache.org/FAQ/FAQ-10.html). +# +#Default: +# none + +# TAG: ident_lookup_access +# A list of ACL elements which, if matched, cause an ident +# (RFC 931) lookup to be performed for this request. For +# example, you might choose to always perform ident lookups +# for your main multi-user Unix boxes, but not for your Macs +# and PCs. By default, ident lookups are not performed for +# any requests. +# +# To enable ident lookups for specific client addresses, you +# can follow this example: +# +# acl ident_aware_hosts src 198.168.1.0/255.255.255.0 +# ident_lookup_access allow ident_aware_hosts +# ident_lookup_access deny all +# +# Only src type ACL checks are fully supported. A src_domain +# ACL might work at times, but it will not always provide +# the correct result. +# +#Default: +# ident_lookup_access deny all + +# TAG: tcp_outgoing_tos +# Allows you to select a TOS/Diffserv value to mark outgoing +# connections with, based on the username or source address +# making the request. +# +# tcp_outgoing_tos ds-field [!]aclname ... +# +# Example where normal_service_net uses the TOS value 0x00 +# and normal_service_net uses 0x20 +# +# acl normal_service_net src 10.0.0.0/255.255.255.0 +# acl good_service_net src 10.0.1.0/255.255.255.0 +# tcp_outgoing_tos 0x00 normal_service_net 0x00 +# tcp_outgoing_tos 0x20 good_service_net +# +# TOS/DSCP values really only have local significance - so you should +# know what you're specifying. For more, see RFC 2474 +# +# The TOS/DSCP byte must be exactly that - a byte, value 0 - 255, or +# "default" to use whatever default your host has. +# +# Processing proceeds in the order specified, and stops at first fully +# matching line. +# +#Default: +# none + +# TAG: tcp_outgoing_address +# Allows you to map requests to different outgoing IP addresses +# based on the username or sourceaddress of the user making +# the request. +# +# tcp_outgoing_address ipaddr [[!]aclname] ... +# +# Example where requests from 10.0.0.0/24 will be forwareded +# with source address 10.1.0.1, 10.0.2.0/24 forwarded with +# source address 10.1.0.2 and the rest will be forwarded with +# source address 10.1.0.3. +# +# acl normal_service_net src 10.0.0.0/255.255.255.0 +# acl good_service_net src 10.0.1.0/255.255.255.0 +# tcp_outgoing_address 10.0.0.1 normal_service_net +# tcp_outgoing_address 10.0.0.2 good_service_net +# tcp_outgoing_address 10.0.0.3 +# +# Processing proceeds in the order specified, and stops at first fully +# matching line. +# +#Default: +# none + +# TAG: reply_body_max_size bytes allow|deny acl acl... +# This option specifies the maximum size of a reply body in bytes. +# It can be used to prevent users from downloading very large files, +# such as MP3's and movies. When the reply headers are recieved, +# the reply_body_max_size lines are processed, and the first line with +# a result of "allow" is used as the maximum body size for this reply. +# This size is then checked twice. First when we get the reply headers, +# we check the content-length value. If the content length value exists +# and is larger than the allowed size, the request is denied and the +# user receives an error message that says "the request or reply +# is too large." If there is no content-length, and the reply +# size exceeds this limit, the client's connection is just closed +# and they will receive a partial reply. +# +# WARNING: downstream caches probably can not detect a partial reply +# if there is no content-length header, so they will cache +# partial responses and give them out as hits. You should NOT +# use this option if you have downstream caches. +# +# If you set this parameter to zero (the default), there will be +# no limit imposed. +# +#Default: +# reply_body_max_size 0 allow all + + +# ADMINISTRATIVE PARAMETERS +# ----------------------------------------------------------------------------- + +# TAG: cache_mgr +# Email-address of local cache manager who will receive +# mail if the cache dies. The default is "webmaster." +# +#Default: +# cache_mgr webmaster + +# TAG: cache_effective_user +# TAG: cache_effective_group +# +# If you start Squid as root, it will change its effective/real +# UID/GID to the UID/GID specified below. The default is to +# change to UID to nobody. If you define cache_effective_user, +# but not cache_effective_group, Squid sets the GID the +# effective user's default group ID (taken from the password +# file). +# +# If Squid is not started as root, the cache_effective_user +# value is ignored and the GID value is unchanged by default. +# However, you can make Squid change its GID to another group +# that the process owner is a member of. Note that if Squid +# is not started as root then you cannot set http_port to a +# value lower than 1024. +# +#Default: +# cache_effective_user squid +# cache_effective_group squid + +# TAG: visible_hostname +# If you want to present a special hostname in error messages, etc, +# then define this. Otherwise, the return value of gethostname() +# will be used. If you have multiple caches in a cluster and +# get errors about IP-forwarding you must set them to have individual +# names with this setting. +# +#Default: +# none + +# TAG: unique_hostname +# If you want to have multiple machines with the same +# 'visible_hostname' then you must give each machine a different +# 'unique_hostname' so that forwarding loops can be detected. +# +#Default: +# none + +# TAG: hostname_aliases +# A list of other DNS names that your cache has. +# +#Default: +# none + + +# OPTIONS FOR THE CACHE REGISTRATION SERVICE +# ----------------------------------------------------------------------------- +# +# This section contains parameters for the (optional) cache +# announcement service. This service is provided to help +# cache administrators locate one another in order to join or +# create cache hierarchies. +# +# An 'announcement' message is sent (via UDP) to the registration +# service by Squid. By default, the announcement message is NOT +# SENT unless you enable it with 'announce_period' below. +# +# The announcement message includes your hostname, plus the +# following information from this configuration file: +# +# http_port +# icp_port +# cache_mgr +# +# All current information is processed regularly and made +# available on the Web at http://www.ircache.net/Cache/Tracker/. + +# TAG: announce_period +# This is how frequently to send cache announcements. The +# default is `0' which disables sending the announcement +# messages. +# +# To enable announcing your cache, just uncomment the line +# below. +# +#Default: +# announce_period 0 +# +#To enable announcing your cache, just uncomment the line below. +#announce_period 1 day + +# TAG: announce_host +# TAG: announce_file +# TAG: announce_port +# announce_host and announce_port set the hostname and port +# number where the registration message will be sent. +# +# Hostname will default to 'tracker.ircache.net' and port will +# default default to 3131. If the 'filename' argument is given, +# the contents of that file will be included in the announce +# message. +# +#Default: +# announce_host tracker.ircache.net +# announce_port 3131 + + +# HTTPD-ACCELERATOR OPTIONS +# ----------------------------------------------------------------------------- + +# TAG: httpd_accel_host +# TAG: httpd_accel_port +# If you want to run Squid as an httpd accelerator, define the +# host name and port number where the real HTTP server is. +# +# If you want IP based virtual host support then specify the +# hostname as "virtual". This will make Squid use the IP address +# where it accepted the request as hostname in the URL. +# +# If you want virtual port support then specify the port as "0". +# +# NOTE: enabling httpd_accel_host disables proxy-caching and +# ICP. If you want these features enabled also, then set +# the 'httpd_accel_with_proxy' option. +# +#Default: +# httpd_accel_port 80 + +# TAG: httpd_accel_single_host on|off +# If you are running Squid as an accelerator and have a single backend +# server then set this to on. This causes Squid to forward the request +# to this server irregardles of what any redirectors or Host headers +# says. +# +# Leave this at off if you have multiple backend servers, and use a +# redirector (or host table or private DNS) to map the requests to the +# appropriate backend servers. Note that the mapping needs to be a +# 1-1 mapping between requested and backend (from redirector) domain +# names or caching will fail, as cacing is performed using the +# URL returned from the redirector. +# +# See also redirect_rewrites_host_header. +# +#Default: +# httpd_accel_single_host off + +# TAG: httpd_accel_with_proxy on|off +# If you want to use Squid as both a local httpd accelerator +# and as a proxy, change this to 'on'. Note however that your +# proxy users may have trouble to reach the accelerated domains +# unless their browsers are configured not to use this proxy for +# those domains (for example via the no_proxy browser configuration +# setting) +# +#Default: +# httpd_accel_with_proxy off + +# TAG: httpd_accel_uses_host_header on|off +# HTTP/1.1 requests include a Host: header which is basically the +# hostname from the URL. The Host: header is used for domain based +# virutal hosts. If your accelerator needs to provide domain based +# virtual hosts on the same IP address then you will need to turn this +# on. +# +# Note that Squid does NOT check the value of the Host header matches +# any of your accelerated server, so it may open a big security hole +# unless you take care to set up access controls proper. We recommend +# that this option remain disabled unless you are sure of what you +# are doing. +# +# However, you will need to enable this option if you run Squid +# as a transparent proxy. Otherwise, virtual servers which +# require the Host: header will not be properly cached. +# +#Default: +# httpd_accel_uses_host_header off + + +# MISCELLANEOUS +# ----------------------------------------------------------------------------- + +# TAG: dns_testnames +# The DNS tests exit as soon as the first site is successfully looked up +# +# This test can be disabled with the -D command line option. +# +#Default: +# dns_testnames netscape.com internic.net nlanr.net microsoft.com + +# TAG: logfile_rotate +# Specifies the number of logfile rotations to make when you +# type 'squid -k rotate'. The default is 10, which will rotate +# with extensions 0 through 9. Setting logfile_rotate to 0 will +# disable the rotation, but the logfiles are still closed and +# re-opened. This will enable you to rename the logfiles +# yourself just before sending the rotate signal. +# +# Note, the 'squid -k rotate' command normally sends a USR1 +# signal to the running squid process. In certain situations +# (e.g. on Linux with Async I/O), USR1 is used for other +# purposes, so -k rotate uses another signal. It is best to get +# in the habit of using 'squid -k rotate' instead of 'kill -USR1 +# '. +# +#Default: +# logfile_rotate 0 + +# TAG: append_domain +# Appends local domain name to hostnames without any dots in +# them. append_domain must begin with a period. +# +# Be warned that there today is Internet names with no dots in +# them using only top-domain names, so setting this may +# cause some Internet sites to become unavailable. +# +#Example: +# append_domain .yourdomain.com +# +#Default: +# none + +# TAG: tcp_recv_bufsize (bytes) +# Size of receive buffer to set for TCP sockets. Probably just +# as easy to change your kernel's default. Set to zero to use +# the default buffer size. +# +#Default: +# tcp_recv_bufsize 0 bytes + +# TAG: err_html_text +# HTML text to include in error messages. Make this a "mailto" +# URL to your admin address, or maybe just a link to your +# organizations Web page. +# +# To include this in your error messages, you must rewrite +# the error template files (found in the "errors" directory). +# Wherever you want the 'err_html_text' line to appear, +# insert a %L tag in the error template file. +# +#Default: +# none + +# TAG: deny_info +# Usage: deny_info err_page_name acl +# or deny_info http://... acl +# Example: deny_info ERR_CUSTOM_ACCESS_DENIED bad_guys +# +# This can be used to return a ERR_ page for requests which +# do not pass the 'http_access' rules. A single ACL will cause +# the http_access check to fail. If a 'deny_info' line exists +# for that ACL then Squid returns a corresponding error page. +# +# You may use ERR_ pages that come with Squid or create your own pages +# and put them into the configured errors/ directory. +# +# Alternatively you can specify an error URL. The browsers will then +# get redirected (302) to the specified URL. %s in the redirection +# URL will be replaced by the requested URL. +# +# Alternatively you can tell Squid to reset the TCP connection +# by specifying TCP_RESET. +# +#Default: +# none + +# TAG: memory_pools on|off +# If set, Squid will keep pools of allocated (but unused) memory +# available for future use. If memory is a premium on your +# system and you believe your malloc library outperforms Squid +# routines, disable this. +# +#Default: +# memory_pools on + +# TAG: memory_pools_limit (bytes) +# Used only with memory_pools on: +# memory_pools_limit 50 MB +# +# If set to a non-zero value, Squid will keep at most the specified +# limit of allocated (but unused) memory in memory pools. All free() +# requests that exceed this limit will be handled by your malloc +# library. Squid does not pre-allocate any memory, just safe-keeps +# objects that otherwise would be free()d. Thus, it is safe to set +# memory_pools_limit to a reasonably high value even if your +# configuration will use less memory. +# +# If not set (default) or set to zero, Squid will keep all memory it +# can. That is, there will be no limit on the total amount of memory +# used for safe-keeping. +# +# To disable memory allocation optimization, do not set +# memory_pools_limit to 0. Set memory_pools to "off" instead. +# +# An overhead for maintaining memory pools is not taken into account +# when the limit is checked. This overhead is close to four bytes per +# object kept. However, pools may actually _save_ memory because of +# reduced memory thrashing in your malloc library. +# +#Default: +# none + +# TAG: forwarded_for on|off +# If set, Squid will include your system's IP address or name +# in the HTTP requests it forwards. By default it looks like +# this: +# +# X-Forwarded-For: 192.1.2.3 +# +# If you disable this, it will appear as +# +# X-Forwarded-For: unknown +# +#Default: +# forwarded_for on + +# TAG: log_icp_queries on|off +# If set, ICP queries are logged to access.log. You may wish +# do disable this if your ICP load is VERY high to speed things +# up or to simplify log analysis. +# +#Default: +# log_icp_queries on + +# TAG: icp_hit_stale on|off +# If you want to return ICP_HIT for stale cache objects, set this +# option to 'on'. If you have sibling relationships with caches +# in other administrative domains, this should be 'off'. If you only +# have sibling relationships with caches under your control, then +# it is probably okay to set this to 'on'. +# If set to 'on', then your siblings should use the option "allow-miss" +# on their cache_peer lines for connecting to you. +# +#Default: +# icp_hit_stale off + +# TAG: minimum_direct_hops +# If using the ICMP pinging stuff, do direct fetches for sites +# which are no more than this many hops away. +# +#Default: +# minimum_direct_hops 4 + +# TAG: minimum_direct_rtt +# If using the ICMP pinging stuff, do direct fetches for sites +# which are no more than this many rtt milliseconds away. +# +#Default: +# minimum_direct_rtt 400 + +# TAG: cachemgr_passwd +# Specify passwords for cachemgr operations. +# +# Usage: cachemgr_passwd password action action ... +# +# Some valid actions are (see cache manager menu for a full list): +# 5min +# 60min +# asndb +# authenticator +# cbdata +# client_list +# comm_incoming +# config * +# counters +# delay +# digest_stats +# dns +# events +# filedescriptors +# fqdncache +# histograms +# http_headers +# info +# io +# ipcache +# mem +# menu +# netdb +# non_peers +# objects +# offline_toggle * +# pconn +# peer_select +# redirector +# refresh +# server_list +# shutdown * +# store_digest +# storedir +# utilization +# via_headers +# vm_objects +# +# * Indicates actions which will not be performed without a +# valid password, others can be performed if not listed here. +# +# To disable an action, set the password to "disable". +# To allow performing an action without a password, set the +# password to "none". +# +# Use the keyword "all" to set the same password for all actions. +# +#Example: +# cachemgr_passwd secret shutdown +# cachemgr_passwd lesssssssecret info stats/objects +# cachemgr_passwd disable all +# +#Default: +# none + +# TAG: store_avg_object_size (kbytes) +# Average object size, used to estimate number of objects your +# cache can hold. See doc/Release-Notes-1.1.txt. The default is +# 13 KB. +# +#Default: +# store_avg_object_size 13 KB + +# TAG: store_objects_per_bucket +# Target number of objects per bucket in the store hash table. +# Lowering this value increases the total number of buckets and +# also the storage maintenance rate. The default is 50. +# +#Default: +# store_objects_per_bucket 20 + +# TAG: client_db on|off +# If you want to disable collecting per-client statistics, then +# turn off client_db here. +# +#Default: +# client_db on + +# TAG: netdb_low +# TAG: netdb_high +# The low and high water marks for the ICMP measurement +# database. These are counts, not percents. The defaults are +# 900 and 1000. When the high water mark is reached, database +# entries will be deleted until the low mark is reached. +# +#Default: +# netdb_low 900 +# netdb_high 1000 + +# TAG: netdb_ping_period +# The minimum period for measuring a site. There will be at +# least this much delay between successive pings to the same +# network. The default is five minutes. +# +#Default: +# netdb_ping_period 5 minutes + +# TAG: query_icmp on|off +# If you want to ask your peers to include ICMP data in their ICP +# replies, enable this option. +# +# If your peer has configured Squid (during compilation) with +# '--enable-icmp' then that peer will send ICMP pings to origin server +# sites of the URLs it receives. If you enable this option then the +# ICP replies from that peer will include the ICMP data (if available). +# Then, when choosing a parent cache, Squid will choose the parent with +# the minimal RTT to the origin server. When this happens, the +# hierarchy field of the access.log will be +# "CLOSEST_PARENT_MISS". This option is off by default. +# +#Default: +# query_icmp off + +# TAG: test_reachability on|off +# When this is 'on', ICP MISS replies will be ICP_MISS_NOFETCH +# instead of ICP_MISS if the target host is NOT in the ICMP +# database, or has a zero RTT. +# +#Default: +# test_reachability off + +# TAG: buffered_logs on|off +# cache.log log file is written with stdio functions, and as such +# it can be buffered or unbuffered. By default it will be unbuffered. +# Buffering it can speed up the writing slightly (though you are +# unlikely to need to worry unless you run with tons of debugging +# enabled in which case performance will suffer badly anyway..). +# +#Default: +# buffered_logs off + +# TAG: reload_into_ims on|off +# When you enable this option, client no-cache or ``reload'' +# requests will be changed to If-Modified-Since requests. +# Doing this VIOLATES the HTTP standard. Enabling this +# feature could make you liable for problems which it +# causes. +# +# see also refresh_pattern for a more selective approach. +# +#Default: +# reload_into_ims off + +# TAG: always_direct +# Usage: always_direct allow|deny [!]aclname ... +# +# Here you can use ACL elements to specify requests which should +# ALWAYS be forwarded directly to origin servers. For example, +# to always directly forward requests for local servers use +# something like: +# +# acl local-servers dstdomain my.domain.net +# always_direct allow local-servers +# +# To always forward FTP requests directly, use +# +# acl FTP proto FTP +# always_direct allow FTP +# +# NOTE: There is a similar, but opposite option named +# 'never_direct'. You need to be aware that "always_direct deny +# foo" is NOT the same thing as "never_direct allow foo". You +# may need to use a deny rule to exclude a more-specific case of +# some other rule. Example: +# +# acl local-external dstdomain external.foo.net +# acl local-servers dstdomain .foo.net +# always_direct deny local-external +# always_direct allow local-servers +# +# This option replaces some v1.1 options such as local_domain +# and local_ip. +# +#Default: +# none + +# TAG: never_direct +# Usage: never_direct allow|deny [!]aclname ... +# +# never_direct is the opposite of always_direct. Please read +# the description for always_direct if you have not already. +# +# With 'never_direct' you can use ACL elements to specify +# requests which should NEVER be forwarded directly to origin +# servers. For example, to force the use of a proxy for all +# requests, except those in your local domain use something like: +# +# acl local-servers dstdomain .foo.net +# acl all src 0.0.0.0/0.0.0.0 +# never_direct deny local-servers +# never_direct allow all +# +# or if squid is inside a firewall and there is local intranet +# servers inside the firewall then use something like: +# +# acl local-intranet dstdomain .foo.net +# acl local-external dstdomain external.foo.net +# always_direct deny local-external +# always_direct allow local-intranet +# never_direct allow all +# +# This option replaces some v1.1 options such as inside_firewall +# and firewall_ip. +# +#Default: +# none + +# TAG: header_access +# Usage: header_access header_name allow|deny [!]aclname ... +# +# WARNING: Doing this VIOLATES the HTTP standard. Enabling +# this feature could make you liable for problems which it +# causes. +# +# This option replaces the old 'anonymize_headers' and the +# older 'http_anonymizer' option with something that is much +# more configurable. This new method creates a list of ACLs +# for each header, allowing you very fine-tuned header +# mangling. +# +# You can only specify known headers for the header name. +# Other headers are reclassified as 'Other'. You can also +# refer to all the headers with 'All'. +# +# For example, to achieve the same behaviour as the old +# 'http_anonymizer standard' option, you should use: +# +# header_access From deny all +# header_access Referer deny all +# header_access Server deny all +# header_access User-Agent deny all +# header_access WWW-Authenticate deny all +# header_access Link deny all +# +# Or, to reproduce the old 'http_anonymizer paranoid' feature +# you should use: +# +# header_access Allow allow all +# header_access Authorization allow all +# header_access WWW-Authenticate allow all +# header_access Cache-Control allow all +# header_access Content-Encoding allow all +# header_access Content-Length allow all +# header_access Content-Type allow all +# header_access Date allow all +# header_access Expires allow all +# header_access Host allow all +# header_access If-Modified-Since allow all +# header_access Last-Modified allow all +# header_access Location allow all +# header_access Pragma allow all +# header_access Accept allow all +# header_access Accept-Charset allow all +# header_access Accept-Encoding allow all +# header_access Accept-Language allow all +# header_access Content-Language allow all +# header_access Mime-Version allow all +# header_access Retry-After allow all +# header_access Title allow all +# header_access Connection allow all +# header_access Proxy-Connection allow all +# header_access All deny all +# +# By default, all headers are allowed (no anonymizing is +# performed). +# +#Default: +# none + +# TAG: header_replace +# Usage: header_replace header_name message +# Example: header_replace User-Agent Nutscrape/1.0 (CP/M; 8-bit) +# +# This option allows you to change the contents of headers +# denied with header_access above, by replacing them with +# some fixed string. This replaces the old fake_user_agent +# option. +# +# By default, headers are removed if denied. +# +#Default: +# none + +# TAG: icon_directory +# Where the icons are stored. These are normally kept in +# /usr/share/squid/icons +# +#Default: +# icon_directory /usr/share/squid/icons + +# TAG: short_icon_urls +# If this is enabled then Squid will use short URLs for icons. +# +# If off then the URLs for icons will always be absolute URLs +# including the proxy name and port. +# +#Default: +# short_icon_urls off + +# TAG: error_directory +# If you wish to create your own versions of the default +# (English) error files, either to customize them to suit your +# language or company copy the template English files to another +# directory and point this tag at them. +# +#Default: +# error_directory /usr/share/squid/errors/English + +# TAG: maximum_single_addr_tries +# This sets the maximum number of connection attempts for a +# host that only has one address (for multiple-address hosts, +# each address is tried once). +# +# The default value is one attempt, the (not recommended) +# maximum is 255 tries. A warning message will be generated +# if it is set to a value greater than ten. +# +# Note: This is in addition to the request reforwarding which +# takes place if Squid fails to get a satisfying response. +# +#Default: +# maximum_single_addr_tries 1 + +# TAG: snmp_port +# Squid can now serve statistics and status information via SNMP. +# By default it listens to port 3401 on the machine. If you don't +# wish to use SNMP, set this to "0". +# +#Default: +# snmp_port 3401 + +# TAG: snmp_access +# Allowing or denying access to the SNMP port. +# +# All access to the agent is denied by default. +# usage: +# +# snmp_access allow|deny [!]aclname ... +# +#Example: +# snmp_access allow snmppublic localhost +# snmp_access deny all +# +#Default: +# snmp_access deny all + +# TAG: snmp_incoming_address +# TAG: snmp_outgoing_address +# Just like 'udp_incoming_address' above, but for the SNMP port. +# +# snmp_incoming_address is used for the SNMP socket receiving +# messages from SNMP agents. +# snmp_outgoing_address is used for SNMP packets returned to SNMP +# agents. +# +# The default snmp_incoming_address (0.0.0.0) is to listen on all +# available network interfaces. +# +# If snmp_outgoing_address is set to 255.255.255.255 (the default) +# then it will use the same socket as snmp_incoming_address. Only +# change this if you want to have SNMP replies sent using another +# address than where this Squid listens for SNMP queries. +# +# NOTE, snmp_incoming_address and snmp_outgoing_address can not have +# the same value since they both use port 3401. +# +#Default: +# snmp_incoming_address 0.0.0.0 +# snmp_outgoing_address 255.255.255.255 + +# TAG: as_whois_server +# WHOIS server to query for AS numbers. NOTE: AS numbers are +# queried only when Squid starts up, not for every request. +# +#Default: +# as_whois_server whois.ra.net +# as_whois_server whois.ra.net + +# TAG: wccp_router +# Use this option to define your WCCP ``home'' router for +# Squid. Setting the 'wccp_router' to 0.0.0.0 (the default) +# disables WCCP. +# +#Default: +# wccp_router 0.0.0.0 + +# TAG: wccp_version +# According to some users, Cisco IOS 11.2 only supports WCCP +# version 3. If you're using that version of IOS, change +# this value to 3. +# +#Default: +# wccp_version 4 + +# TAG: wccp_incoming_address +# TAG: wccp_outgoing_address +# wccp_incoming_address Use this option if you require WCCP +# messages to be received on only one +# interface. Do NOT use this option if +# you're unsure how many interfaces you +# have, or if you know you have only one +# interface. +# +# wccp_outgoing_address Use this option if you require WCCP +# messages to be sent out on only one +# interface. Do NOT use this option if +# you're unsure how many interfaces you +# have, or if you know you have only one +# interface. +# +# The default behavior is to not bind to any specific address. +# +# NOTE, wccp_incoming_address and wccp_outgoing_address can not have +# the same value since they both use port 2048. +# +#Default: +# wccp_incoming_address 0.0.0.0 +# wccp_outgoing_address 255.255.255.255 + + +# DELAY POOL PARAMETERS (all require DELAY_POOLS compilation option) +# ----------------------------------------------------------------------------- + +# TAG: delay_pools +# This represents the number of delay pools to be used. For example, +# if you have one class 2 delay pool and one class 3 delays pool, you +# have a total of 2 delay pools. +# +#Default: +# delay_pools 0 + +# TAG: delay_class +# This defines the class of each delay pool. There must be exactly one +# delay_class line for each delay pool. For example, to define two +# delay pools, one of class 2 and one of class 3, the settings above +# and here would be: +# +#Example: +# delay_pools 2 # 2 delay pools +# delay_class 1 2 # pool 1 is a class 2 pool +# delay_class 2 3 # pool 2 is a class 3 pool +# +# The delay pool classes are: +# +# class 1 Everything is limited by a single aggregate +# bucket. +# +# class 2 Everything is limited by a single aggregate +# bucket as well as an "individual" bucket chosen +# from bits 25 through 32 of the IP address. +# +# class 3 Everything is limited by a single aggregate +# bucket as well as a "network" bucket chosen +# from bits 17 through 24 of the IP address and a +# "individual" bucket chosen from bits 17 through +# 32 of the IP address. +# +# NOTE: If an IP address is a.b.c.d +# -> bits 25 through 32 are "d" +# -> bits 17 through 24 are "c" +# -> bits 17 through 32 are "c * 256 + d" +# +#Default: +# none + +# TAG: delay_access +# This is used to determine which delay pool a request falls into. +# The first matched delay pool is always used, i.e., if a request falls +# into delay pool number one, no more delay are checked, otherwise the +# rest are checked in order of their delay pool number until they have +# all been checked. For example, if you want some_big_clients in delay +# pool 1 and lotsa_little_clients in delay pool 2: +# +#Example: +# delay_access 1 allow some_big_clients +# delay_access 1 deny all +# delay_access 2 allow lotsa_little_clients +# delay_access 2 deny all +# +#Default: +# none + +# TAG: delay_parameters +# This defines the parameters for a delay pool. Each delay pool has +# a number of "buckets" associated with it, as explained in the +# description of delay_class. For a class 1 delay pool, the syntax is: +# +#delay_parameters pool aggregate +# +# For a class 2 delay pool: +# +#delay_parameters pool aggregate individual +# +# For a class 3 delay pool: +# +#delay_parameters pool aggregate network individual +# +# The variables here are: +# +# pool a pool number - ie, a number between 1 and the +# number specified in delay_pools as used in +# delay_class lines. +# +# aggregate the "delay parameters" for the aggregate bucket +# (class 1, 2, 3). +# +# individual the "delay parameters" for the individual +# buckets (class 2, 3). +# +# network the "delay parameters" for the network buckets +# (class 3). +# +# A pair of delay parameters is written restore/maximum, where restore is +# the number of bytes (not bits - modem and network speeds are usually +# quoted in bits) per second placed into the bucket, and maximum is the +# maximum number of bytes which can be in the bucket at any time. +# +# For example, if delay pool number 1 is a class 2 delay pool as in the +# above example, and is being used to strictly limit each host to 64kbps +# (plus overheads), with no overall limit, the line is: +# +#delay_parameters 1 -1/-1 8000/8000 +# +# Note that the figure -1 is used to represent "unlimited". +# +# And, if delay pool number 2 is a class 3 delay pool as in the above +# example, and you want to limit it to a total of 256kbps (strict limit) +# with each 8-bit network permitted 64kbps (strict limit) and each +# individual host permitted 4800bps with a bucket maximum size of 64kb +# to permit a decent web page to be downloaded at a decent speed +# (if the network is not being limited due to overuse) but slow down +# large downloads more significantly: +# +#delay_parameters 2 32000/32000 8000/8000 600/8000 +# +# There must be one delay_parameters line for each delay pool. +# +#Default: +# none + +# TAG: delay_initial_bucket_level (percent, 0-100) +# The initial bucket percentage is used to determine how much is put +# in each bucket when squid starts, is reconfigured, or first notices +# a host accessing it (in class 2 and class 3, individual hosts and +# networks only have buckets associated with them once they have been +# "seen" by squid). +# +#Default: +# delay_initial_bucket_level 50 + +# TAG: incoming_icp_average +# TAG: incoming_http_average +# TAG: incoming_dns_average +# TAG: min_icp_poll_cnt +# TAG: min_dns_poll_cnt +# TAG: min_http_poll_cnt +# Heavy voodoo here. I can't even believe you are reading this. +# Are you crazy? Don't even think about adjusting these unless +# you understand the algorithms in comm_select.c first! +# +#Default: +# incoming_icp_average 6 +# incoming_http_average 4 +# incoming_dns_average 4 +# min_icp_poll_cnt 8 +# min_dns_poll_cnt 8 +# min_http_poll_cnt 8 + +# TAG: max_open_disk_fds +# To avoid having disk as the I/O bottleneck Squid can optionally +# bypass the on-disk cache if more than this amount of disk file +# descriptors are open. +# +# A value of 0 indicates no limit. +# +#Default: +# max_open_disk_fds 0 + +# TAG: offline_mode +# Enable this option and Squid will never try to validate cached +# objects. +# +#Default: +# offline_mode off + +# TAG: uri_whitespace +# What to do with requests that have whitespace characters in the +# URI. Options: +# +# strip: The whitespace characters are stripped out of the URL. +# This is the behavior recommended by RFC2396. +# deny: The request is denied. The user receives an "Invalid +# Request" message. +# allow: The request is allowed and the URI is not changed. The +# whitespace characters remain in the URI. Note the +# whitespace is passed to redirector processes if they +# are in use. +# encode: The request is allowed and the whitespace characters are +# encoded according to RFC1738. This could be considered +# a violation of the HTTP/1.1 +# RFC because proxies are not allowed to rewrite URI's. +# chop: The request is allowed and the URI is chopped at the +# first whitespace. This might also be considered a +# violation. +# +#Default: +# uri_whitespace strip + +# TAG: broken_posts +# A list of ACL elements which, if matched, causes Squid to send +# an extra CRLF pair after the body of a PUT/POST request. +# +# Some HTTP servers has broken implementations of PUT/POST, +# and rely on an extra CRLF pair sent by some WWW clients. +# +# Quote from RFC 2068 section 4.1 on this matter: +# +# Note: certain buggy HTTP/1.0 client implementations generate an +# extra CRLF's after a POST request. To restate what is explicitly +# forbidden by the BNF, an HTTP/1.1 client must not preface or follow +# a request with an extra CRLF. +# +#Example: +# acl buggy_server url_regex ^http://.... +# broken_posts allow buggy_server +# +#Default: +# none + +# TAG: mcast_miss_addr +# Note: This option is only available if Squid is rebuilt with the +# -DMULTICAST_MISS_STREAM option +# +# If you enable this option, every "cache miss" URL will +# be sent out on the specified multicast address. +# +# Do not enable this option unless you are are absolutely +# certain you understand what you are doing. +# +#Default: +# mcast_miss_addr 255.255.255.255 + +# TAG: mcast_miss_ttl +# Note: This option is only available if Squid is rebuilt with the +# -DMULTICAST_MISS_TTL option +# +# This is the time-to-live value for packets multicasted +# when multicasting off cache miss URLs is enabled. By +# default this is set to 'site scope', i.e. 16. +# +#Default: +# mcast_miss_ttl 16 + +# TAG: mcast_miss_port +# Note: This option is only available if Squid is rebuilt with the +# -DMULTICAST_MISS_STREAM option +# +# This is the port number to be used in conjunction with +# 'mcast_miss_addr'. +# +#Default: +# mcast_miss_port 3135 + +# TAG: mcast_miss_encode_key +# Note: This option is only available if Squid is rebuilt with the +# -DMULTICAST_MISS_STREAM option +# +# The URLs that are sent in the multicast miss stream are +# encrypted. This is the encryption key. +# +#Default: +# mcast_miss_encode_key XXXXXXXXXXXXXXXX + +# TAG: nonhierarchical_direct +# By default, Squid will send any non-hierarchical requests +# (matching hierarchy_stoplist or not cachable request type) direct +# to origin servers. +# +# If you set this to off, then Squid will prefer to send these +# requests to parents. +# +# Note that in most configurations, by turning this off you will only +# add latency to these request without any improvement in global hit +# ratio. +# +# If you are inside an firewall then see never_direct instead of +# this directive. +# +#Default: +# nonhierarchical_direct on + +# TAG: prefer_direct +# Normally Squid tries to use parents for most requests. If you by some +# reason like it to first try going direct and only use a parent if +# going direct fails then set this to on. +# +# By combining nonhierarchical_direct off and prefer_direct on you +# can set up Squid to use a parent as a backup path if going direct +# fails. +# +# Note: If you want Squid to use parents for all requests then see +# the never_direct directive. prefer_direct only modifies how Squid +# acts on cachable requests. +# +#Default: +# prefer_direct off + +# TAG: strip_query_terms +# By default, Squid strips query terms from requested URLs before +# logging. This protects your user's privacy. +# +#Default: +# strip_query_terms on + +# TAG: coredump_dir +# By default Squid leaves core files in the directory from where +# it was started. If you set 'coredump_dir' to a directory +# that exists, Squid will chdir() to that directory at startup +# and coredump files will be left there. +# +#Default: +# coredump_dir none +# +# Leave coredumps in the first cache dir +coredump_dir /var/spool/squid + +# TAG: redirector_bypass +# When this is 'on', a request will not go through the +# redirector if all redirectors are busy. If this is 'off' +# and the redirector queue grows too large, Squid will exit +# with a FATAL error and ask you to increase the number of +# redirectors. You should only enable this if the redirectors +# are not critical to your caching system. If you use +# redirectors for access control, and you enable this option, +# then users may have access to pages that they should not +# be allowed to request. +# +#Default: +# redirector_bypass off + +# TAG: ignore_unknown_nameservers +# By default Squid checks that DNS responses are received +# from the same IP addresses that they are sent to. If they +# don't match, Squid ignores the response and writes a warning +# message to cache.log. You can allow responses from unknown +# nameservers by setting this option to 'off'. +# +#Default: +# ignore_unknown_nameservers on + +# TAG: digest_generation +# This controls whether the server will generate a Cache Digest +# of its contents. By default, Cache Digest generation is +# enabled if Squid is compiled with USE_CACHE_DIGESTS defined. +# +#Default: +# digest_generation on + +# TAG: digest_bits_per_entry +# This is the number of bits of the server's Cache Digest which +# will be associated with the Digest entry for a given HTTP +# Method and URL (public key) combination. The default is 5. +# +#Default: +# digest_bits_per_entry 5 + +# TAG: digest_rebuild_period (seconds) +# This is the number of seconds between Cache Digest rebuilds. +# +#Default: +# digest_rebuild_period 1 hour + +# TAG: digest_rewrite_period (seconds) +# This is the number of seconds between Cache Digest writes to +# disk. +# +#Default: +# digest_rewrite_period 1 hour + +# TAG: digest_swapout_chunk_size (bytes) +# This is the number of bytes of the Cache Digest to write to +# disk at a time. It defaults to 4096 bytes (4KB), the Squid +# default swap page. +# +#Default: +# digest_swapout_chunk_size 4096 bytes + +# TAG: digest_rebuild_chunk_percentage (percent, 0-100) +# This is the percentage of the Cache Digest to be scanned at a +# time. By default it is set to 10% of the Cache Digest. +# +#Default: +# digest_rebuild_chunk_percentage 10 + +# TAG: chroot +# Use this to have Squid do a chroot() while initializing. This +# also causes Squid to fully drop root privileges after +# initializing. This means, for example, that if you use a HTTP +# port less than 1024 and try to reconfigure, you will get an +# error. +# +#Default: +# none + +# TAG: client_persistent_connections +# TAG: server_persistent_connections +# Persistent connection support for clients and servers. By +# default, Squid uses persistent connections (when allowed) +# with its clients and servers. You can use these options to +# disable persistent connections with clients and/or servers. +# +#Default: +# client_persistent_connections on +# server_persistent_connections on + +# TAG: detect_broken_pconn +# Some servers have been found to incorrectly signal the use +# of HTTP/1.0 persistent connections even on replies not +# compatible, causing significant delays. This server problem +# has mostly been seen on redirects. +# +# By enabling this directive Squid attempts to detect such +# broken replies and automatically assume the reply is finished +# after 10 seconds timeout. +# +#Default: +# detect_broken_pconn off + +# TAG: pipeline_prefetch +# To boost the performance of pipelined requests to closer +# match that of a non-proxied environment Squid can try to fetch +# up to two requests in parallell from a pipeline. +# +# Defaults to off for bandwidth management and access logging +# reasons. +# +#Default: +# pipeline_prefetch off + +# TAG: extension_methods +# Squid only knows about standardized HTTP request methods. +# You can add up to 20 additional "extension" methods here. +# +#Default: +# none + +# TAG: request_entities +# Squid defaults to deny GET and HEAD requests with request entities, +# as the meaning of such requests are undefined in the HTTP standard +# even if not explicitly forbidden. +# +# Set this directive to on if you have clients which insists +# on sending request entities in GET or HEAD requests. +# +#Default: +# request_entities off + +# TAG: high_response_time_warning (msec) +# If the one-minute median response time exceeds this value, +# Squid prints a WARNING with debug level 0 to get the +# administrators attention. The value is in milliseconds. +# +#Default: +# high_response_time_warning 0 + +# TAG: high_page_fault_warning +# If the one-minute average page fault rate exceeds this +# value, Squid prints a WARNING with debug level 0 to get +# the administrators attention. The value is in page faults +# per second. +# +#Default: +# high_page_fault_warning 0 + +# TAG: high_memory_warning +# If the memory usage (as determined by mallinfo) exceeds +# value, Squid prints a WARNING with debug level 0 to get +# the administrators attention. +# +#Default: +# high_memory_warning 0 + +# TAG: store_dir_select_algorithm +# Set this to 'round-robin' as an alternative. +# +#Default: +# store_dir_select_algorithm least-load + +# TAG: forward_log +# Note: This option is only available if Squid is rebuilt with the +# -DWIP_FWD_LOG option +# +# Logs the server-side requests. +# +# This is currently work in progress. +# +#Default: +# none + +# TAG: ie_refresh on|off +# Microsoft Internet Explorer up until version 5.5 Service +# Pack 1 has an issue with transparent proxies, wherein it +# is impossible to force a refresh. Turning this on provides +# a partial fix to the problem, by causing all IMS-REFRESH +# requests from older IE versions to check the origin server +# for fresh content. This reduces hit ratio by some amount +# (~10% in my experience), but allows users to actually get +# fresh content when they want it. Note that because Squid +# cannot tell if the user is using 5.5 or 5.5SP1, the behavior +# of 5.5 is unchanged from old versions of Squid (i.e. a +# forced refresh is impossible). Newer versions of IE will, +# hopefully, continue to have the new behavior and will be +# handled based on that assumption. This option defaults to +# the old Squid behavior, which is better for hit ratios but +# worse for clients using IE, if they need to be able to +# force fresh content. +# +#Default: +# ie_refresh off + +# TAG: vary_ignore_expire on|off +# Many HTTP servers supporting Vary gives such objects +# immediate expiry time with no cache-control header +# when requested by a HTTP/1.0 client. This option +# enables Squid to ignore such expiry times until +# HTTP/1.1 is fully implemented. +# WARNING: This may eventually cause some varying +# objects not intended for caching to get cached. +# +#Default: +# vary_ignore_expire off + +# TAG: sleep_after_fork (microseconds) +# When this is set to a non-zero value, the main Squid process +# sleeps the specified number of microseconds after a fork() +# system call. This sleep may help the situation where your +# system reports fork() failures due to lack of (virtual) +# memory. Note, however, that if you have a lot of child +# processes, then these sleep delays will add up and your +# Squid will not service requests for some amount of time +# until all the child processes have been started. +# +#Default: +# sleep_after_fork 0 + diff --git a/contrib/altlinux/init.ldif b/contrib/altlinux/init.ldif new file mode 100644 index 000000000..9545ecfb9 --- /dev/null +++ b/contrib/altlinux/init.ldif @@ -0,0 +1,124 @@ +dn: dc=example,dc=com +objectClass: top +objectClass: dcObject +objectClass: organization +objectClass: gosaDepartment +dc: example +o: Example Inc. +ou: example +description: Main building + +dn: ou=Apps,dc=example,dc=com +objectClass: organizationalUnit +ou: Apps + +dn: cn=gosa,ou=Apps,dc=example,dc=com +objectClass: top +objectClass: applicationProcess +objectClass: simpleSecurityObject +userPassword: gosa +cn: gosa + +dn: cn=smbpasswd,ou=Apps,dc=example,dc=com +objectClass: top +objectClass: applicationProcess +objectClass: simpleSecurityObject +cn: smbpasswd +userPassword: smbpasswd + +dn: cn=cyrus,ou=Apps,dc=example,dc=com +objectClass: top +objectClass: applicationProcess +objectClass: simpleSecurityObject +cn: cyrus +userPassword: cyrus + +dn: cn=saslauthd,ou=Apps,dc=example,dc=com +objectClass: top +objectClass: applicationProcess +objectClass: simpleSecurityObject +cn: saslauthd +userPassword: saslauthd + +dn: ou=Admins,dc=example,dc=com +objectClass: organizationalUnit +ou: Admins +description: Directory administrators + +dn: cn=admin,ou=Admins,dc=example,dc=com +objectClass: person +cn: admin +sn: admin +userPassword: secret + +dn: ou=People,dc=example,dc=com +objectClass: organizationalUnit +ou: People + +dn: uid=administrator,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: gosaAccount +userPassword: secret +sn: System +cn: administrator +givenName: Administrator +uid: administrator + +dn: ou=Groups,dc=example,dc=com +objectClass: organizationalUnit +ou: Groups + +dn: cn=administrator,ou=Groups,dc=example,dc=com +objectClass: top +objectClass: gosaObject +objectClass: posixGroup +gosaSubtreeACL:: OmFsbA== +cn: administrator +gidNumber: 999 +memberUid: administrator + +dn: ou=Computers,dc=example,dc=com +objectClass: organizationalUnit +ou: Computers + +dn: uid=pdc$,ou=Computers,dc=example,dc=com +objectClass: top +objectClass: account +objectClass: goImapServer +uid: pdc$ +cn: localhost +goImapName: mail.example.lan +goImapConnect: {localhost:143} +goImapAdmin: cyrus +goImapSieveServer: localhost +goImapSievePort: 2000 +goImapPassword: cyrus + +dn: dc=branch,dc=example,dc=com +objectClass: top +objectClass: dcObject +objectClass: organizationalUnit +objectClass: gosaDepartment +dc: branch +ou: branch +description: Remote branch + +dn: ou=Addressbook,dc=example,dc=com +objectClass: organizationalUnit +ou: Addressbook + +dn: ou=Systems,dc=example,dc=com +objectClass: organizationalUnit +ou: Systems + +dn: ou=configs,ou=systems,dc=example,dc=com +objectClass: organizationalUnit +ou: configs + +dn: ou=gosa,ou=configs,ou=systems,dc=example,dc=com +objectClass: organizationalUnit +ou: gosa + diff --git a/contrib/demo.ldif b/contrib/demo.ldif new file mode 100644 index 000000000..e2a7afe40 --- /dev/null +++ b/contrib/demo.ldif @@ -0,0 +1,132 @@ +dn: dc=gonicus,dc=de +objectClass: dcObject +objectClass: organization +description: Base object +dc: gonicus +o: GONICUS GmbH + +dn: cn=terminal-admin,dc=gonicus,dc=de +objectClass: person +cn: terminal-admin +sn: Upload user +description: GOto Upload Benutzer +userPassword:: e2tlcmJlcm9zfXRlcm1pbmFsYWRtaW5AR09OSUNVUy5MT0NBTAo= + +dn: ou=systems,dc=gonicus,dc=de +objectClass: organizationalUnit +ou: systems + +dn: ou=terminals,ou=systems,dc=gonicus,dc=de +objectClass: organizationalUnit +ou: terminals + +dn: ou=servers,ou=systems,dc=gonicus,dc=de +objectClass: organizationalUnit +ou: servers + +dn: ou=people,dc=gonicus,dc=de +objectClass: organizationalUnit +ou: people + +dn: ou=groups,dc=gonicus,dc=de +objectClass: organizationalUnit +ou: groups + +dn: cn=default,ou=terminals,ou=systems,dc=gonicus,dc=de +objectClass: gotoTerminal +cn: default +gotoMode: disabled +gotoXMethod: query +gotoRootPasswd: tyogUVSVZlEPs +gotoXResolution: 1024x768 +gotoXColordepth: 16 +gotoXKbModel: pc104 +gotoXKbLayout: de +gotoXKbVariant: nodeadkeys +gotoSyslogServer: lts-1 +gotoSwapServer: lts-1:/export/swap +gotoLpdServer: lts-1:/export/spool +gotoNtpServer: lts-1 +gotoScannerClients: lts-1.gonicus.local +gotoFontPath: inet/lts-1:7110 +gotoXdmcpServer: lts-1 +gotoFilesystem: afs-1:/export/home /home nfs exec,dev,suid,rw,hard,nolock,fg,rsize=8192 1 1 + +dn: cn=admin,ou=people,dc=gonicus,dc=de +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: gosaAccount +uid: admin +cn: admin +givenName: admin +sn: GOsa main administrator +sambaLMPassword: 10974C6EFC0AEE1917306D272A9441BB +sambaNTPassword: 38F3951141D0F71A039CFA9D1EC06378 +userPassword:: dGVzdGVy + +dn: cn=administrators,ou=groups,dc=gonicus,dc=de +objectClass: gosaObject +objectClass: posixGroup +objectClass: top +gosaSubtreeACL: :all +cn: administrators +gidNumber: 999 +memberUid: admin + +dn: cn=lts-1,ou=servers,ou=systems,dc=gonicus,dc=de +objectClass: goTerminalServer +objectClass: goServer +goXdmcpIsEnabled: true +macAddress: 00:B0:D0:F0:DE:1D +cn: lts-1 +goFontPath: inet/lts-1:7110 + +dn: cn=afs-1,ou=servers,ou=systems,dc=gonicus,dc=de +objectClass: goNfsServer +objectClass: goNtpServer +objectClass: goLdapServer +objectClass: goSyslogServer +objectClass: goCupsServer +objectClass: goServer +macAddress: 00:B0:D0:F0:DE:1C +cn: afs-1 +goExportEntry: /export/terminals 10.3.64.0/255.255.252.0(ro,async,no_root_squash) +goExportEntry: /export/spool 10.3.64.0/255.255.252.0(rw,sync,no_root_squash) +goExportEntry: /export/swap 10.3.64.0/255.255.252.0(rw,sync,no_root_squash) +goExportEntry: /export/home 10.3.64.0/255.255.252.0(rw,sync,no_root_squash) +goLdapBase: dc=gonicus,dc=de + +dn: cn=vserver-02,ou=servers,ou=systems,dc=gonicus,dc=de +objectClass: goImapServer +objectClass: goServer +macAddress: 00:B0:D0:F0:DE:1F +cn: vserver-02 +goImapName: imap://vserver-02.gonicus.local +goImapConnect: {vserver-02.gonicus.local:143} +goImapAdmin: cyrus +goImapPassword: secret +goImapSieveServer: vserver-02.gonicus.local +goImapSievePort: 2000 + +dn: cn=kerberos,ou=servers,ou=systems,dc=gonicus,dc=de +objectClass: goKrbServer +objectClass: goServer +macAddress: 00:B0:D0:F0:DE:1E +cn: kerberos +goKrbRealm: GONICUS.LOCAL +goKrbAdmin: admin/admin +goKrbPassword: secret + +dn: cn=fax,ou=servers,ou=systems,dc=gonicus,dc=de +objectClass: goFaxServer +objectClass: goServer +macAddress: 00:B0:D0:F0:DE:10 +cn: fax +goFaxAdmin: fax +goFaxPassword: secret + +dn: ou=incoming,dc=gonicus,dc=de +objectClass: organizationalUnit +ou: incoming + diff --git a/contrib/fix_config.sh b/contrib/fix_config.sh new file mode 100755 index 000000000..cd9d4778d --- /dev/null +++ b/contrib/fix_config.sh @@ -0,0 +1,153 @@ +#!/bin/sh + +CONF=/etc/gosa/gosa.conf +cat << EOF + +This script will take your current $CONF and will update the menu and tab tags. It +will not touch the parts you have touched between the main tabs. A backup copy is +created. + +EOF +read -n1 -sp "Do you want to continue? (y/n)" answer +echo + +if [ "$answer" != "y" -a "$answer" != "Y" ]; then + echo "Aborted." + echo + exit 1 +fi + +if [ ! -f $CONF ]; then + echo "Can't find $CONF Aborted." + echo + exit 1 +fi + +cp $CONF $CONF.orig + +main=$(sed -n '/
/p' $CONF) + +cat << EOF > $CONF + + + +
+ + + + + + + + + +
+ +
+ + + + + + + +
+ +
+ + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +$main + +
+EOF diff --git a/contrib/gosa.conf b/contrib/gosa.conf new file mode 100644 index 000000000..0be337faf --- /dev/null +++ b/contrib/gosa.conf @@ -0,0 +1,192 @@ + + + +
+ + + + + + + + +
+ +
+ + + + + + + +
+ +
+ + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + +
+
diff --git a/contrib/gosa.spec b/contrib/gosa.spec new file mode 100644 index 000000000..6e0752175 --- /dev/null +++ b/contrib/gosa.spec @@ -0,0 +1,150 @@ +# Some sort auf "detection" of suse +%{?suse_version:%define suse 1} +%{!?suse_version:%define suse 0} + +# Define Packagename, e.g.: +# rpmbuild --rebuild --define 'sourcename gosa' gosa.srpm +%{!?sourcename:%define sourcename %{name}-%{version}} + +# +# Distribution +# +Summary: Web Based LDAP Administration Program +Name: gosa +Version: 2.3 +Release: 1 +License: GPL +Source: ftp://oss.GONICUS.de/pub/gosa/beta/%{sourcename}.tar.bz2 +URL: http://oss.gonicus.de/project/?group_id=6 +Group: System/Administration +Vendor: GONICUS GmbH +Packager: Lars Scheiter +Buildarch: noarch +%if %{suse} +Requires: apache2,php4,php4-gd,php4-ldap,php4-mcrypt,php4-imap,ImageMagick,perl-Crypt-SmbHash +%else +Requires: php,php-ldap,perl-Crypt-SmbHash >= 0.02,ImageMagick +%endif +BuildRoot: %{_tmppath}/%{name}-%{version}-root +BuildArch: noarch + +%define confdir /etc/%{name} + +%if %{suse} + %define apacheuser wwwrun + %define apachegroup root + %define webconf /etc/apache2/conf.d/ +%else + %define apacheuser apache + %define apachegroup apache + %define webconf /etc/httpd/conf.d/ +%endif + +%description +GOsa is a combination of system-administrator and end-user web +interface, designed to handle LDAP based setups. +Provided is access to posix, shadow, samba, proxy, fax, and kerberos +accounts. It is able to manage the postfix/cyrus server combination +and can write user adapted sieve scripts. + +%package schema +Group: System/Administration +Summary: Schema Definitions for the GOSA package +%if %{suse} +Requires: openldap2 >= 2.0.27 +%else +Requires: openldap >= 2.0.27 +%endif +Obsoletes: gosa-ldap + +%description schema +Contains the Schema definition files for the GOSA admin package. + +%prep +%setup -q -n %{sourcename} +find . -depth -name CVS -type d | xargs rm -rf + +%build + +%install +# Create buildroot +mkdir -p %{buildroot}/usr/share/gosa + +DIRS="doc ihtml plugins html include locale" + +for i in $DIRS; do \ + cp -ua $i %{buildroot}/usr/share/gosa/$i ; \ +done + +mkdir -p %{buildroot}/var/spool/gosa +# Copy default config +mkdir -p %{buildroot}%{confdir} +mkdir -p %{buildroot}%{webconf} + +cat > %{buildroot}%{webconf}/gosa_include.conf < + Options None + AllowOverride None + Order allow,deny + Allow from all + +# Set alias to gosa +Alias /gosa /usr/share/gosa/html +EOF + +mkdir -p %{buildroot}/etc/openldap/schema/gosa +mv contrib/openldap/*.schema %{buildroot}/etc/openldap/schema/gosa +#rmdir contrib/openldap + +%clean +rm -rf %{buildroot} + +%files +%defattr(-,%{apacheuser},%{apachegroup}) +%doc %attr(-,root,root) AUTHORS TODO README Changelog COPYING INSTALL FAQ +%doc %attr(-,root,root) contrib/gosa.conf contrib/scripts contrib/patches +%doc %attr(-,root,root) contrib/fix_config.sh contrib/vacation_example.txt + +%config(noreplace) %attr(0640,%{apacheuser},%{apachegroup}) %{webconf}/gosa_include.conf +%dir %attr(0750, %{apacheuser}, %{apachegroup}) /var/spool/gosa +%attr(-, %{apacheuser}, %{apachegroup}) /usr/share/gosa + +%files schema +%defattr(-,root,root) +%doc COPYING AUTHORS README contrib/iplanet contrib/demo.ldif contrib/openldap/slapd.conf +/etc/openldap/schema/gosa + +%changelog +* Mon Feb 21 2005 Lars Scheiter 2.3 +- Update version to 2.3 (upstream) + +* Mon Dec 13 2004 Lars Scheiter 2.2-2 +- Optionally allow different sourcenames + +* Mon Nov 22 2004 Lars Scheiter 2.2 +- Update to 2.2 (upstream) +- reintroduction of suse detection +- small fixes +- Corrected URL +- Synchronize schema package name with debian + +* Mon May 19 2004 Levente Farkas 2.1.1 +- update to 2.1.1 + +* Mon Apr 19 2004 Levente Farkas 2.1 +- update to 2.1 + +* Fri Apr 16 2004 Levente Farkas 2.1 +- minor fixes +- update to 2.1rc2 + +* Tue Jan 24 2004 Henning P. Schmiedehausen 2.1-2t +- bumped to 2.1beta2 +- first INTERMETA internal build + +* Mon Oct 20 2003 Lars Scheiter +- Update to new upstream release (2.0rc1) + +* Fri Oct 17 2003 Lars Scheiter +- First build of GOsa as an RPM, should work on SuSE and RedHat diff --git a/contrib/iplanet/59gonicus-samba3.ldif b/contrib/iplanet/59gonicus-samba3.ldif new file mode 100644 index 000000000..2f9c1b571 --- /dev/null +++ b/contrib/iplanet/59gonicus-samba3.ldif @@ -0,0 +1,92 @@ +# +# Schema for Samba3 +# +dn: cn=schema +attributeTypes: ( 1.3.6.1.4.1.7165.2.1.24 NAME 'sambaLMPassword' DESC 'LanMana + ger Password' EQUALITY caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.2 + 6{32} SINGLE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.7165.2.1.25 NAME 'sambaNTPassword' DESC 'MD4 has + h of the unicode password' EQUALITY caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.146 + 6.115.121.1.26{32} SINGLE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.7165.2.1.26 NAME 'sambaAcctFlags' DESC 'Account + Flags' EQUALITY caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{16} S + INGLE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.7165.2.1.27 NAME 'sambaPwdLastSet' DESC 'Timesta + mp of the last password update' EQUALITY integerMatch SYNTAX 1.3.6.1.4.1.1466 + .115.121.1.27 SINGLE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.7165.2.1.28 NAME 'sambaPwdCanChange' DESC 'Times + tamp of when the user is allowed to update the password' EQUALITY integerMatc + h SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.7165.2.1.29 NAME 'sambaPwdMustChange' DESC 'Time + stamp of when the password will expire' EQUALITY integerMatch SYNTAX 1.3.6.1. + 4.1.1466.115.121.1.27 SINGLE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.7165.2.1.30 NAME 'sambaLogonTime' DESC 'Timestam + p of last logon' EQUALITY integerMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 S + INGLE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.7165.2.1.31 NAME 'sambaLogoffTime' DESC 'Timesta + mp of last logoff' EQUALITY integerMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 + SINGLE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.7165.2.1.32 NAME 'sambaKickoffTime' DESC 'Timest + amp of when the user will be logged off automatically' EQUALITY integerMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.7165.2.1.33 NAME 'sambaHomeDrive' DESC 'Driver l + etter of home directory mapping' EQUALITY caseIgnoreIA5Match SYNTAX 1.3.6.1.4 + .1.1466.115.121.1.26{4} SINGLE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.7165.2.1.34 NAME 'sambaLogonScript' DESC 'Logon + script path' EQUALITY caseIgnoreMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{25 + 5} SINGLE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.7165.2.1.35 NAME 'sambaProfilePath' DESC 'Roamin + g profile path' EQUALITY caseIgnoreMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 + {255} SINGLE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.7165.2.1.36 NAME 'sambaUserWorkstations' DESC 'L + ist of user workstations the user is allowed to logon to' EQUALITY caseIgnore + Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{255} SINGLE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.7165.2.1.37 NAME 'sambaHomePath' DESC 'Home dire + ctory UNC path' EQUALITY caseIgnoreMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 + {128} ) +attributeTypes: ( 1.3.6.1.4.1.7165.2.1.38 NAME 'sambaDomainName' DESC 'Windows + NT domain to which the user belongs' EQUALITY caseIgnoreMatch SYNTAX 1.3.6.1 + .4.1.1466.115.121.1.15{128} ) +attributeTypes: ( 1.3.6.1.4.1.7165.2.1.20 NAME 'sambaSID' DESC 'Security ID' E + QUALITY caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{64} SINGLE-VA + LUE ) +attributeTypes: ( 1.3.6.1.4.1.7165.2.1.23 NAME 'sambaPrimaryGroupSID' DESC 'Pr + imary Group Security ID' EQUALITY caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466. + 115.121.1.26{64} SINGLE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.7165.2.1.19 NAME 'sambaGroupType' DESC 'NT Group + Type' EQUALITY integerMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALU + E ) +attributeTypes: ( 1.3.6.1.4.1.7165.2.1.21 NAME 'sambaNextUserRid' DESC 'Next N + T rid to give our for users' EQUALITY integerMatch SYNTAX 1.3.6.1.4.1.1466.11 + 5.121.1.27 SINGLE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.7165.2.1.22 NAME 'sambaNextGroupRid' DESC 'Next + NT rid to give out for groups' EQUALITY integerMatch SYNTAX 1.3.6.1.4.1.1466. + 115.121.1.27 SINGLE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.7165.2.1.39 NAME 'sambaNextRid' DESC 'Next NT ri + d to give out for anything' EQUALITY integerMatch SYNTAX 1.3.6.1.4.1.1466.115 + .121.1.27 SINGLE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.7165.2.1.40 NAME 'sambaAlgorithmicRidBase' DESC + 'Base at which the samba RID generation algorithm should operate' EQUALITY in + tegerMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) +objectClasses: ( 1.3.6.1.4.1.7165.2.2.6 NAME 'sambaSamAccount' DESC 'Samba 3.0 + Auxilary SAM Account' SUP top AUXILIARY MUST ( uid $ sambaSID ) MAY ( cn $ s + ambaLMPassword $ sambaNTPassword $ sambaPwdLastSet $ sambaLogonTime $ sambaLo + goffTime $ sambaKickoffTime $ sambaPwdCanChange $ sambaPwdMustChange $ sambaA + cctFlags $ displayName $ sambaHomePath $ sambaHomeDrive $ sambaLogonScript $ + sambaProfilePath $ description $ sambaUserWorkstations $ sambaPrimaryGroupSID + $ sambaDomainName ) ) +objectClasses: ( 1.3.6.1.4.1.7165.2.2.4 NAME 'sambaGroupMapping' DESC 'Samba G + roup Mapping' SUP top AUXILIARY MUST ( gidNumber $ sambaSID $ sambaGroupType + ) MAY ( displayName $ description ) ) +objectClasses: ( 1.3.6.1.4.1.7165.2.2.5 NAME 'sambaDomain' DESC 'Samba Domain + Information' SUP top STRUCTURAL MUST ( sambaDomainName $ sambaSID ) MAY ( sam + baNextRid $ sambaNextGroupRid $ sambaNextUserRid $ sambaAlgorithmicRidBase ) + ) +objectClasses: ( 1.3.6.1.4.1.7165.1.2.2.7 NAME 'sambaUnixIdPool' DESC 'Pool fo + r allocating UNIX uids/gids' SUP top AUXILIARY MUST ( uidNumber $ gidNumber ) + ) +objectClasses: ( 1.3.6.1.4.1.7165.1.2.2.8 NAME 'sambaIdmapEntry' DESC 'Mapping + from a SID to an ID' SUP top AUXILIARY MUST sambaSID MAY ( uidNumber $ gidNu + mber ) ) +objectClasses: ( 1.3.6.1.4.1.7165.1.2.2.9 NAME 'sambaSidEntry' DESC 'Structura + l Class for a SID' SUP top STRUCTURAL MUST sambaSID ) diff --git a/contrib/iplanet/60gonicus-gosa.ldif b/contrib/iplanet/60gonicus-gosa.ldif new file mode 100644 index 000000000..d3f203af8 --- /dev/null +++ b/contrib/iplanet/60gonicus-gosa.ldif @@ -0,0 +1,128 @@ +# +# Schema for GOsa/Core +# +dn: cn=schema +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.12.1 NAME 'gosaSubtreeACL' DESC 'GOsa + acl entry' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1 + .3.6.1.4.1.1466.115.121.1.15 ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.12.2 NAME 'gosaUser' DESC 'GOsa user' + EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1. + 1466.115.121.1.15 ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.12.3 NAME 'gosaObject' DESC 'GOsa obje + ct' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1. + 4.1.1466.115.121.1.15 ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.12.4 NAME 'gosaMailServer' DESC 'Speci + fy users main mail server' EQUALITY caseIgnoreIA5Match SUBSTR caseIgnoreIA5Su + bstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.12.5 NAME 'gosaMailQuota' DESC 'GOsa q + uota definitions' EQUALITY caseIgnoreIA5Match SUBSTR caseIgnoreIA5SubstringsM + atch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.12.6 NAME 'gosaMailAlternateAddress' D + ESC 'Additional mail addresses where the user is reachable' EQUALITY caseIgno + reIA5Match SUBSTR caseIgnoreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.12 + 1.1.26 ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.12.7 NAME 'gosaMailForwardingAddress' + DESC 'Addresses where to forward mail to' EQUALITY caseIgnoreIA5Match SUBSTR + caseIgnoreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.12.8 NAME 'gosaMailMaxSize' DESC 'Bloc + k mails bigger than this value' EQUALITY caseIgnoreIA5Match SUBSTR caseIgnore + IA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.12.9 NAME 'gosaSpamSortLevel' DESC 'Sp + amassassins hits' EQUALITY caseIgnoreIA5Match SUBSTR caseIgnoreIA5SubstringsM + atch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.12.10 NAME 'gosaSpamMailbox' DESC 'Whe + re to put spam' EQUALITY caseIgnoreIA5Match SUBSTR caseIgnoreIA5SubstringsMat + ch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.12.11 NAME 'gosaVacationMessage' DESC + 'Text to display in case of vacation' SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.12.12 NAME 'gosaMailDeliveryMode' DESC + 'What to do with mails' EQUALITY caseIgnoreIA5Match SUBSTR caseIgnoreIA5Subs + tringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.12.13 NAME 'gosaDefaultPrinter' DESC ' + Defines a default printer a user owns' EQUALITY caseIgnoreIA5Match SUBSTR cas + eIgnoreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.12.14 NAME 'gosaDefaultLanguage' DESC + 'Defines the default language for a user' EQUALITY caseIgnoreIA5Match SUBSTR + caseIgnoreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALU + E ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.12.15 NAME 'gosaHostACL' DESC 'Defines + the places where users can login' EQUALITY caseIgnoreIA5Match SUBSTR caseIgn + oreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.12.16 NAME 'gosaService' DESC 'Defines + services a certain host can provide' EQUALITY caseIgnoreIA5Match SUBSTR case + IgnoreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.12.17 NAME 'gosaProxyID' DESC 'Defines + the proxy user id used, needed for some filters' EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.12.18 NAME 'gosaProxyAcctFlags' DESC ' + Proxy Account Flags' EQUALITY caseIgnoreIA5Match SUBSTR caseIgnoreIA5Substrin + gsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{16} SINGLE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.12.19 NAME 'gosaProxyWorkingStart' DES + C 'Specifies the beginning of work in minutes, relative to 00:00' EQUALITY ca + seIgnoreIA5Match SUBSTR caseIgnoreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466. + 115.121.1.26 ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.12.20 NAME 'gosaProxyWorkingStop' DESC + 'Specifies the end of work in minutes, relative to 00:00' EQUALITY caseIgnor + eIA5Match SUBSTR caseIgnoreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121 + .1.26 ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.12.21 NAME 'gosaApplicationName' DESC + 'Specifies the name of an application to be shown up on users desktop' EQUALI + TY caseIgnoreIA5Match SUBSTR caseIgnoreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1. + 1466.115.121.1.26 ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.12.22 NAME 'gosaApplicationExecute' DE + SC 'Specifies the executable path of an application' EQUALITY caseIgnoreIA5Ma + tch SUBSTR caseIgnoreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.12.23 NAME 'gosaApplicationFlags' DESC + 'Specifies the application flags G(roup only), D(esktop), M(enu)' EQUALITY c + aseIgnoreIA5Match SUBSTR caseIgnoreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466 + .115.121.1.26 ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.12.24 NAME 'gosaApplicationIcon' DESC + 'Keeps the application icon in png format' SYNTAX 1.3.6.1.4.1.1466.115.121.1. + 26 ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.12.25 NAME 'gosaSharedFolderTarget' DE + SC 'Keeps the target of cyrus shared folders' EQUALITY caseIgnoreIA5Match SUB + STR caseIgnoreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.12.26 NAME 'gosaMemberApplication' DES + C 'Like memberUid, just for applications' EQUALITY caseIgnoreIA5Match SUBSTR + caseIgnoreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.12.27 NAME 'gosaApplicationParameter' + DESC 'Store application parameters' EQUALITY caseIgnoreMatch SUBSTR caseIgnor + eSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.6.2 NAME 'academicTitle' DESC 'Field t + o represent the academic title' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSub + stringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} ) +objectClasses: ( 1.3.6.1.4.1.10098.1.2.1.19.1 NAME 'gosaObject' DESC 'Objectcl + ass for GOsa settings' AUXILIARY MUST gosaSubtreeACL ) +objectClasses: ( 1.3.6.1.4.1.10098.1.2.1.19.2 NAME 'gosaLockEntry' DESC 'Objec + tclass for GOsa locking' SUP top STRUCTURAL MUST ( gosaUser $ gosaObject $ cn + ) ) +objectClasses: ( 1.3.6.1.4.1.10098.1.2.1.19.3 NAME 'gosaCacheEntry' DESC 'Obje + ctclass for GOsa caching' SUP top STRUCTURAL MUST cn MAY gosaUser ) +objectClasses: ( 1.3.6.1.4.1.10098.1.2.1.19.4 NAME 'gosaDepartment' DESC 'Obje + ctclass to mark Departments for GOsa' SUP top AUXILIARY MUST ( ou $ descripti + on ) ) +objectClasses: ( 1.3.6.1.4.1.10098.1.2.1.19.5 NAME 'gosaMailAccount' DESC 'Obj + ectclass to mark MailAccounts for GOsa' SUP top AUXILIARY MUST ( mail $ gosaM + ailServer $ gosaMailDeliveryMode ) MAY ( gosaMailQuota $ gosaMailAlternateAdd + ress $ gosaMailForwardingAddress $ gosaMailMaxSize $ gosaSpamSortLevel $ gosa + SpamMailbox $ gosaVacationMessage $ gosaSharedFolderTarget ) ) +objectClasses: ( 1.3.6.1.4.1.10098.1.2.1.19.6 NAME 'gosaAccount' DESC 'Objectc + lass for GOsa Accounts' SUP top AUXILIARY MAY ( sambaLMPassword $ sambaNTPass + word $ gosaDefaultPrinter $ gosaDefaultLanguage $ academicTitle $ personalTit + le $ gosaHostACL $ sambaPwdLastSet ) ) +objectClasses: ( 1.3.6.1.4.1.10098.1.2.1.19.7 NAME 'gosaHost' DESC 'Objectclas + s for GOsa Hosts' SUP top AUXILIARY MUST cn MAY ( description $ gosaService ) + ) +objectClasses: ( 1.3.6.1.4.1.10098.1.2.1.19.8 NAME 'gosaProxyAccount' DESC 'Ob + jectclass for GOsa Proxy settings' SUP top AUXILIARY MUST gosaProxyAcctFlags + MAY ( gosaProxyID $ gosaProxyWorkingStart $ gosaProxyWorkingStop ) ) +objectClasses: ( 1.3.6.1.4.1.10098.1.2.1.19.9 NAME 'gosaApplication' DESC 'Obj + ectclass for GOsa applications' STRUCTURAL MUST ( cn $ gosaApplicationExecute + ) MAY ( gosaApplicationName $ gosaApplicationIcon $ gosaApplicationFlags $ g + osaApplicationParameter $ description ) ) +objectClasses: ( 1.3.6.1.4.1.10098.1.2.1.19.10 NAME 'gosaApplicationGroup' DES + C 'Objectclass for GOsa application groups' SUP top AUXILIARY MUST cn MAY ( g + osaMemberApplication $ gosaApplicationParameter ) ) +objectClasses: ( 1.3.6.1.4.1.10098.1.2.1.19.11 NAME 'gosaUserTemplate' DESC 'O + bjectclass for GOsa User Templates' SUP top AUXILIARY MUST cn ) diff --git a/contrib/iplanet/61gonicus-gofax.ldif b/contrib/iplanet/61gonicus-gofax.ldif new file mode 100644 index 000000000..b89988c0e --- /dev/null +++ b/contrib/iplanet/61gonicus-gofax.ldif @@ -0,0 +1,48 @@ +# +# Schema for GOFax/Core +# +dn: cn=schema +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.7.1 NAME 'goFaxDeliveryMode' DESC 'goF + ax delivery mode is defined here' SUBSTR caseExactIA5SubstringsMatch SYNTAX 1 + .3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.7.2 NAME 'goFaxPrinter' DESC 'defines + which printer is used to print a fax' EQUALITY caseExactIA5Match SUBSTR caseE + xactIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.7.3 NAME 'goFaxDivertNumber' DESC 'for + fax diversion services' SYNTAX 1.3.6.1.4.1.1466.115.121.1.50 SINGLE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.7.4 NAME 'goFaxLanguage' DESC 'preferr + ed language for the users goFax entry' SUBSTR caseExactIA5SubstringsMatch SYN + TAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.7.5 NAME 'goFaxFormat' DESC 'defines t + he fileformat for mailattachments' SUBSTR caseExactIA5SubstringsMatch SYNTAX + 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.7.6 NAME 'goFaxRBlocklist' DESC 'defin + es faxnumbers the user is not allowed to get fax from' EQUALITY caseExactIA5M + atch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.7.8 NAME 'goFaxSBlocklist' DESC 'defin + es faxnumbers the user is not allowed to fax to' EQUALITY caseExactIA5Match S + YNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.7.7 NAME 'goFaxRBlockgroups' DESC 'def + ines groups of receive blocklists the user belongs to' EQUALITY caseExactIA5M + atch SUBSTR caseExactIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.7.9 NAME 'goFaxSBlockgroups' DESC 'def + ines groups of sender blocklists the user belongs to' EQUALITY caseExactIA5Ma + tch SUBSTR caseExactIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.7.10 NAME 'goFaxIsEnabled' DESC 'This + account is enabled or not' EQUALITY caseExactIA5Match SUBSTR caseExactIA5Subs + tringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.7.11 NAME 'facsimileAlternateTelephone + Number' SUBSTR telephoneNumberSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121 + .1.50 ) +objectClasses: ( 1.3.6.1.4.1.10098.1.2.1.11 NAME 'goFaxAccount' DESC 'goFax Ac + count objectclass' STRUCTURAL MUST ( goFaxDeliveryMode $ facsimileTelephoneNu + mber $ uid $ goFaxIsEnabled ) MAY ( goFaxPrinter $ goFaxDivertNumber $ goFaxL + anguage $ goFaxFormat $ goFaxRBlocklist $ goFaxRBlockgroups $ goFaxSBlocklist + $ goFaxSBlockgroups $ mail $ facsimileAlternateTelephoneNumber ) ) +objectClasses: ( 1.3.6.1.4.1.10098.1.2.1.12 NAME 'goFaxSBlock' DESC 'goFax sen + d blocklist groups' STRUCTURAL MUST cn MAY ( goFaxSBlocklist $ description ) + ) +objectClasses: ( 1.3.6.1.4.1.10098.1.2.1.13 NAME 'goFaxRBlock' DESC 'goFax rec + eive blocklist groups' STRUCTURAL MUST cn MAY ( goFaxRBlocklist $ description + ) ) diff --git a/contrib/iplanet/62gonicus-firewall.ldif b/contrib/iplanet/62gonicus-firewall.ldif new file mode 100644 index 000000000..894b139f3 --- /dev/null +++ b/contrib/iplanet/62gonicus-firewall.ldif @@ -0,0 +1,59 @@ +# +# Schema for UIF +# +dn: cn=schema +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.4.1 NAME 'FWdevice' DESC 'Firewall def + initions' EQUALITY caseIgnoreIA5Match SUBSTR caseExactIA5SubstringsMatch SYNT + AX 1.3.6.1.4.1.1466.115.121.1.26 ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.4.2 NAME 'FWtype' DESC 'Firewall defin + itions' EQUALITY caseIgnoreIA5Match SUBSTR caseExactIA5SubstringsMatch SYNTAX + 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.4.3 NAME 'FWaction' DESC 'Firewall def + initions' EQUALITY caseIgnoreIA5Match SUBSTR caseExactIA5SubstringsMatch SYNT + AX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.4.4 NAME 'FWtable' DESC 'Firewall defi + nitions' EQUALITY caseIgnoreIA5Match SUBSTR caseExactIA5SubstringsMatch SYNTA + X 1.3.6.1.4.1.1466.115.121.1.26 ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.4.5 NAME 'FWsource' DESC 'Firewall def + initions' EQUALITY caseIgnoreIA5Match SUBSTR caseExactIA5SubstringsMatch SYNT + AX 1.3.6.1.4.1.1466.115.121.1.26 ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.4.6 NAME 'FWdest' DESC 'Firewall defin + itions' EQUALITY caseIgnoreIA5Match SUBSTR caseExactIA5SubstringsMatch SYNTAX + 1.3.6.1.4.1.1466.115.121.1.26 ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.4.7 NAME 'FWservice' DESC 'Firewall de + finitions' EQUALITY caseIgnoreIA5Match SUBSTR caseExactIA5SubstringsMatch SYN + TAX 1.3.6.1.4.1.1466.115.121.1.26 ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.4.8 NAME 'FWprotocol' DESC 'Firewall d + efinitions' EQUALITY caseIgnoreIA5Match SUBSTR caseExactIA5SubstringsMatch SY + NTAX 1.3.6.1.4.1.1466.115.121.1.26 ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.4.10 NAME 'FWlog' DESC 'Firewall defin + itions' EQUALITY caseIgnoreIA5Match SUBSTR caseExactIA5SubstringsMatch SYNTAX + 1.3.6.1.4.1.1466.115.121.1.26 ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.4.11 NAME 'FWnetwork' DESC 'Firewall d + efinitions' EQUALITY caseIgnoreIA5Match SUBSTR caseExactIA5SubstringsMatch SY + NTAX 1.3.6.1.4.1.1466.115.121.1.26 ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.4.12 NAME 'FWhost' DESC 'Firewall defi + nitions' EQUALITY caseIgnoreIA5Match SUBSTR caseExactIA5SubstringsMatch SYNTA + X 1.3.6.1.4.1.1466.115.121.1.26 ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.4.14 NAME 'FWproto' DESC 'Firewall def + initions' EQUALITY caseIgnoreIA5Match SUBSTR caseExactIA5SubstringsMatch SYNT + AX 1.3.6.1.4.1.1466.115.121.1.26 ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.4.15 NAME 'FWlist' DESC 'Firewall defi + nitions' EQUALITY caseIgnoreIA5Match SUBSTR caseExactIA5SubstringsMatch SYNTA + X 1.3.6.1.4.1.1466.115.121.1.26 ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.4.16 NAME 'FWdisabled' DESC 'Firewall + definitions' EQUALITY caseIgnoreIA5Match SUBSTR caseExactIA5SubstringsMatch S + YNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.4.17 NAME 'FWid' DESC 'Firewall defini + tions' EQUALITY caseIgnoreIA5Match SUBSTR caseExactIA5SubstringsMatch SYNTAX + 1.3.6.1.4.1.1466.115.121.1.26 ) +objectClasses: ( 1.3.6.1.4.1.10098.1.2.1.6 NAME 'FWRule' DESC 'Firewall rule d + efinition' SUP top AUXILIARY MUST ( cn $ FWtype ) MAY ( FWdevice $ FWaction $ + FWtable $ FWsource $ FWdest $ FWservice $ FWprotocol $ FWtable $ FWlog $ FWi + d ) ) +objectClasses: ( 1.3.6.1.4.1.10098.1.2.1.7 NAME 'FWGroup' DESC 'Firewall group + definition' SUP top AUXILIARY MUST cn MAY ( FWnetwork $ FWhost $ FWservice $ + FWproto $ FWid ) ) +objectClasses: ( 1.3.6.1.4.1.10098.1.2.1.8 NAME 'FWRuleSet' DESC 'Firewall rul + eset definition' SUP top AUXILIARY MUST cn MAY ( FWlist $ FWdisabled $ FWid ) + ) diff --git a/contrib/iplanet/63gonicus-hardware.ldif b/contrib/iplanet/63gonicus-hardware.ldif new file mode 100644 index 000000000..c166e9f38 --- /dev/null +++ b/contrib/iplanet/63gonicus-hardware.ldif @@ -0,0 +1,35 @@ +# +# Schema for GOto/Hardware +# +dn: cn=schema +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.2.1 NAME 'ghCpuType' DESC 'Hardware de + finitions, value cpuType' EQUALITY caseIgnoreIA5Match SUBSTR caseIgnoreIA5Sub + stringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.2.2 NAME 'ghMemSize' DESC 'Hardware de + finitions, value memSize' EQUALITY caseIgnoreIA5Match SUBSTR caseIgnoreIA5Sub + stringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.2.3 NAME 'ghUsbSupport' DESC 'Hardware + definitions, value usbSupport' EQUALITY caseIgnoreIA5Match SUBSTR caseIgnore + IA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.2.4 NAME 'ghIdeDev' DESC 'Hardware def + initions, value ideDev' EQUALITY caseIgnoreIA5Match SUBSTR caseIgnoreIA5Subst + ringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.2.5 NAME 'ghScsiDev' DESC 'Hardware de + finitions, value scsiDev' EQUALITY caseIgnoreIA5Match SUBSTR caseIgnoreIA5Sub + stringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.2.7 NAME 'ghSoundAdapter' DESC 'Hardwa + re definitions, value soundAdapter' EQUALITY caseIgnoreIA5Match SUBSTR caseIg + noreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.2.8 NAME 'ghNetNic' DESC 'Hardware def + initions, value Network Device' EQUALITY caseIgnoreIA5Match SUBSTR caseIgnore + IA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.2.9 NAME 'ghGfxAdapter' DESC 'Hardware + definitions, value Grafikkarte' EQUALITY caseIgnoreIA5Match SUBSTR caseIgnor + eIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.2.10 NAME 'ghInventoryNumber' DESC 'Un + ique number for inclusion in an inventory' EQUALITY caseIgnoreIA5Match SYNTAX + 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE ) +objectClasses: ( 1.3.6.1.4.1.10098.1.2.1.3 NAME 'GOhard' DESC 'Gonicus Hardwar + e definitions, objectclass' SUP top AUXILIARY MUST cn MAY ( ghGfxAdapter $ gh + NetNic $ ghSoundAdapter $ ghIdeDev $ ghScsiDev $ macAddress $ ghUsbSupport $ + ghMemSize $ ghCpuType $ ghInventoryNumber ) ) diff --git a/contrib/iplanet/64gonicus-server.ldif b/contrib/iplanet/64gonicus-server.ldif new file mode 100644 index 000000000..badecaeda --- /dev/null +++ b/contrib/iplanet/64gonicus-server.ldif @@ -0,0 +1,83 @@ +# +# Schema for GOsa/Servers +# +dn: cn=schema +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.9.1 NAME 'goXdmcpIsEnabled' DESC 'Indi + cates if the server is enabled for XDMCP queries' EQUALITY caseExactIA5Match + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.9.2 NAME 'goFontPath' DESC 'Fontserver + Entry' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.9.4 NAME 'goExportEntry' DESC 'Provide + s a NFS export entry' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115. + 121.1.26 ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.9.9 NAME 'goSyslogSection' DESC 'What + sections wants the server for its syslog service? i.e. *.*' EQUALITY caseExac + tIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.9.10 NAME 'goTimeSource' DESC 'List of + time sources' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.2 + 6 ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.9.11 NAME 'goSpoolPath' DESC 'Provides + a spool path for printing services' EQUALITY caseExactIA5Match SYNTAX 1.3.6. + 1.4.1.1466.115.121.1.26 SINGLE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.9.12 NAME 'goLdapBase' DESC 'Base to u + se for this LDAP server' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.1 + 15.121.1.26 SINGLE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.9.13 NAME 'goImapName' DESC 'Name of I + MAP server appearing in GOsa' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1 + 466.115.121.1.26 SINGLE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.9.14 NAME 'goImapConnect' DESC 'PHP co + nnect string for IMAP server' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1 + 466.115.121.1.26 SINGLE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.9.15 NAME 'goImapAdmin' DESC 'IMAP adm + in account' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 S + INGLE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.9.16 NAME 'goImapPassword' DESC 'IMAP + admin password' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1. + 26 SINGLE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.9.17 NAME 'goImapSieveServer' DESC 'Cy + rus sieve server address or name' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4 + .1.1466.115.121.1.26 SINGLE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.9.18 NAME 'goImapSievePort' DESC 'Cyru + s sieve server port' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.1 + 21.1.26 SINGLE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.9.19 NAME 'goKrbRealm' DESC 'Default K + erberos realm to use for this server' EQUALITY caseExactIA5Match SYNTAX 1.3.6 + .1.4.1.1466.115.121.1.26 SINGLE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.9.20 NAME 'goKrbAdmin' DESC 'Admin pri + ncipal for kerberos server' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.146 + 6.115.121.1.26 SINGLE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.9.21 NAME 'goKrbPassword' DESC 'Admin + password for kerberos server' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1 + 466.115.121.1.26 SINGLE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.9.22 NAME 'goFaxAdmin' DESC 'Admin pri + ncipal for fax server' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115 + .121.1.26 SINGLE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.9.23 NAME 'goFaxPassword' DESC 'Admin + password for fax server' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.1 + 15.121.1.26 SINGLE-VALUE ) +objectClasses: ( 1.3.6.1.4.1.10098.1.2.1.16 NAME 'goTerminalServer' DESC 'Term + inal server description' AUXILIARY MUST ( cn $ goXdmcpIsEnabled $ goFontPath + ) MAY description ) +objectClasses: ( 1.3.6.1.4.1.10098.1.2.1.19 NAME 'goNfsServer' DESC 'NFS serve + r description' AUXILIARY MUST cn MAY ( goExportEntry $ description ) ) +objectClasses: ( 1.3.6.1.4.1.10098.1.2.1.20 NAME 'goNtpServer' DESC 'Time serv + er description' AUXILIARY MUST cn MAY ( goTimeSource $ description ) ) +objectClasses: ( 1.3.6.1.4.1.10098.1.2.1.21 NAME 'goSyslogServer' DESC 'Syslog + server description' AUXILIARY MUST cn MAY ( goSyslogSection $ description ) + ) +objectClasses: ( 1.3.6.1.4.1.10098.1.2.1.22 NAME 'goLdapServer' DESC 'LDAP ser + ver description' AUXILIARY MUST cn MAY ( goLdapBase $ description ) ) +objectClasses: ( 1.3.6.1.4.1.10098.1.2.1.23 NAME 'goCupsServer' DESC 'CUPS ser + ver description' AUXILIARY MUST cn MAY description ) +objectClasses: ( 1.3.6.1.4.1.10098.1.2.1.24 NAME 'goImapServer' DESC 'IMAP ser + ver description' AUXILIARY MUST ( cn $ goImapName $ goImapConnect $ goImapAdm + in $ goImapPassword ) MAY ( goImapSieveServer $ goImapSievePort $ description + ) ) +objectClasses: ( 1.3.6.1.4.1.10098.1.2.1.25 NAME 'goKrbServer' DESC 'Kerberos + server description' AUXILIARY MUST ( cn $ goKrbRealm $ goKrbAdmin $ goKrbPass + word ) MAY description ) +objectClasses: ( 1.3.6.1.4.1.10098.1.2.1.26 NAME 'goFaxServer' DESC 'Fax serve + r description' AUXILIARY MUST ( cn $ goFaxAdmin $ goFaxPassword ) MAY descrip + tion ) +objectClasses: ( 1.3.6.1.4.1.10098.1.2.1.27 NAME 'goServer' DESC 'Server descr + iption' AUXILIARY MUST ( cn $ macAddress ) MAY description ) diff --git a/contrib/iplanet/65gonicus-goto.ldif b/contrib/iplanet/65gonicus-goto.ldif new file mode 100644 index 000000000..1aeb0853e --- /dev/null +++ b/contrib/iplanet/65gonicus-goto.ldif @@ -0,0 +1,182 @@ +# +# Schema for GOto/Core +# +dn: cn=schema +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.1.1 NAME 'gotoSyslogServer' DESC 'GOto + - Gonicus Terminal Concept, value syslogServer.' EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SIN + GLE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.1.2 NAME 'gotoNtpServer' DESC 'GOto - + Gonicus Terminal Concept, value ntpServer.' EQUALITY caseIgnoreIA5Match SUBST + R caseIgnoreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VA + LUE ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.1.3 NAME 'gotoSwapServer' DESC 'GOto - + Gonicus Terminal Concept, value swapServer.' EQUALITY caseIgnoreIA5Match SUB + STR caseIgnoreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE- + VALUE ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.1.4 NAME 'gotoLpdServer' DESC 'GOto - + Gonicus Terminal Concept, value lpdServer.' EQUALITY caseIgnoreIA5Match SUBST + R caseIgnoreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VA + LUE ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.1.5 NAME 'gotoFontPath' DESC 'GOto - G + onicus Terminal Concept, value fontPath.' EQUALITY caseIgnoreIA5Match SUBSTR + caseIgnoreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALU + E ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.1.6 NAME 'gotoFilesystem' DESC 'GOto - + Gonicus Terminal Concept, value filesystem.' EQUALITY caseIgnoreIA5Match SUB + STR caseIgnoreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.1.7 NAME 'gotoFloppyEnable' DESC 'GOto + - Gonicus Terminal Concept, value floppyEnable.' EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SIN + GLE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.1.8 NAME 'gotoCdromEnable' DESC 'GOto + - Gonicus Terminal Concept, value cdromEnable.' EQUALITY caseIgnoreIA5Match S + UBSTR caseIgnoreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGL + E-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.1.9 NAME 'gotoLpdEnable' DESC 'GOto - + Gonicus Terminal Concept, value lpdEnable.' EQUALITY caseIgnoreIA5Match SUBST + R caseIgnoreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VA + LUE ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.1.10 NAME 'gotoScannerEnable' DESC 'GO + to - Gonicus Terminal Concept, value scannerEnable.' EQUALITY caseIgnoreIA5Ma + tch SUBSTR caseIgnoreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.1.11 NAME 'gotoScannerClients' DESC 'G + Oto - Gonicus Terminal Concept, value scannerClients.' EQUALITY caseIgnoreIA5 + Match SUBSTR caseIgnoreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.2 + 6 SINGLE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.1.14 NAME 'gotoRootPasswd' DESC 'GOto + - Gonicus Terminal Concept, value rootPasswd.' EQUALITY caseIgnoreIA5Match SU + BSTR caseIgnoreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE + -VALUE ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.1.15 NAME 'gotoXdmcpServer' DESC 'GOto + - Gonicus Terminal Concept, value xdmcpServer.' EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SING + LE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.1.16 NAME 'gotoXMethod' DESC 'GOto - G + onicus Terminal Concept, value xMethod.' EQUALITY caseIgnoreIA5Match SUBSTR c + aseIgnoreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE + ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.1.17 NAME 'gotoXMonitor' DESC 'GOto - + Gonicus Terminal Concept, value xMonitor.' EQUALITY caseIgnoreIA5Match SUBSTR + caseIgnoreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VAL + UE ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.1.18 NAME 'gotoXHsync' DESC 'GOto - Go + nicus Terminal Concept, value xHsync.' EQUALITY caseIgnoreIA5Match SUBSTR cas + eIgnoreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.1.19 NAME 'gotoXVsync' DESC 'GOto - Go + nicus Terminal Concept, value xVsync.' EQUALITY caseIgnoreIA5Match SUBSTR cas + eIgnoreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.1.20 NAME 'gotoXResolution' DESC 'GOto + - Gonicus Terminal Concept, value xResolution.' EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SING + LE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.1.21 NAME 'gotoXColordepth' DESC 'GOto + - Gonicus Terminal Concept, value xColordepth.' EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SING + LE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.1.22 NAME 'gotoXMouseport' DESC 'GOto + - Gonicus Terminal Concept, value xMouseport.' EQUALITY caseIgnoreIA5Match SU + BSTR caseIgnoreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE + -VALUE ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.1.23 NAME 'gotoXMouseButtons' DESC 'GO + to - Gonicus Terminal Concept, value xMouseButtons.' EQUALITY caseIgnoreIA5Ma + tch SUBSTR caseIgnoreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.1.24 NAME 'gotoMode' DESC 'GOto - Goni + cus Terminal Concept, Terminal is active.' EQUALITY caseIgnoreIA5Match SUBSTR + caseIgnoreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VAL + UE ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.1.25 NAME 'gotoXKbModel' DESC 'GOto - + Gonicus Terminal Concept, value xKbmodel.' EQUALITY caseIgnoreIA5Match SUBSTR + caseIgnoreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VAL + UE ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.1.26 NAME 'gotoXKbLayout' DESC 'GOto - + Gonicus Terminal Concept, value xKblayout.' EQUALITY caseIgnoreIA5Match SUBS + TR caseIgnoreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-V + ALUE ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.1.27 NAME 'gotoXKbVariant' DESC 'GOto + - Gonicus Terminal Concept, value xKbvariant.' EQUALITY caseIgnoreIA5Match SU + BSTR caseIgnoreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE + -VALUE ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.1.28 NAME 'gotoXDriver' DESC 'GOto - G + onicus Terminal Concept, value xDriver.' EQUALITY caseIgnoreIA5Match SUBSTR c + aseIgnoreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE + ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.1.29 NAME 'gotoSndModule' DESC 'GOto - + Gonicus Terminal Concept, value sndModules.' EQUALITY caseIgnoreIA5Match SUB + STR caseIgnoreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE- + VALUE ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.1.30 NAME 'gotoLastUser' DESC 'GOto - + Gonicus Terminal Concept, value lastUser.' EQUALITY caseIgnoreIA5Match SUBSTR + caseIgnoreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VAL + UE ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.1.31 NAME 'gotoAutoFs' DESC 'GOto - Go + nicus Terminal Concept, value autofs.' EQUALITY caseIgnoreIA5Match SUBSTR cas + eIgnoreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.1.32 NAME 'gotoModules' DESC 'GOto - G + onicus Terminal Concept, value modules.' EQUALITY caseIgnoreIA5Match SUBSTR c + aseIgnoreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.1.33 NAME 'gotoAdaptPath' DESC 'GOto - + Gonicus Terminal Concept, value adaptpath.' EQUALITY caseIgnoreIA5Match SUBS + TR caseIgnoreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.1.34 NAME 'gotoXMouseType' DESC 'Hardw + are definitions, value Maustyp' EQUALITY caseIgnoreIA5Match SUBSTR caseIgnore + IA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.1.35 NAME 'gotoKernelParameters' DESC + 'Kernel boot parameters' EQUALITY caseIgnoreIA5Match SUBSTR caseIgnoreIA5Subs + tringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.1.36 NAME 'gotoBootKernel' DESC 'Kerne + l boot parameters' EQUALITY caseIgnoreIA5Match SUBSTR caseIgnoreIA5Substrings + Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.1.37 NAME 'gotoTerminalPath' DESC 'Ker + nel boot parameters' EQUALITY caseIgnoreIA5Match SUBSTR caseIgnoreIA5Substrin + gsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.1.38 NAME 'gotoLdapServer' DESC 'Kerne + l boot parameters' EQUALITY caseIgnoreIA5Match SUBSTR caseIgnoreIA5Substrings + Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.1.39 NAME 'gotoScannerBackend' DESC 'G + Oto - Gonicus Terminal Concept, value scannerBackend.' EQUALITY caseIgnoreIA5 + Match SUBSTR caseIgnoreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.2 + 6 SINGLE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.1.40 NAME 'gotoScannerModel' DESC 'GOt + o - Gonicus Terminal Concept, value scannerModel.' EQUALITY caseIgnoreIA5Matc + h SUBSTR caseIgnoreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SI + NGLE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.11.1 NAME 'gotoPackage' DESC 'GOto - G + onicus Terminal Concept, value package.' EQUALITY caseIgnoreIA5Match SUBSTR c + aseIgnoreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.11.2 NAME 'gotoInstURL' DESC 'GOto - G + onicus Terminal Concept, value insturl.' EQUALITY caseIgnoreIA5Match SUBSTR c + aseIgnoreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.11.3 NAME 'gotoBaseInstURL' DESC 'GOto + - Gonicus Terminal Concept, value baseinsturl.' EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SING + LE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.11.4 NAME 'gotoInstSuite' DESC 'GOto - + Gonicus Terminal Concept, value instsuite.' EQUALITY caseIgnoreIA5Match SUBS + TR caseIgnoreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-V + ALUE ) +attributeTypes: ( 1.3.6.1.4.1.10098.1.1.11.5 NAME 'gotoInstKernelVersion' DESC + 'GOto - Gonicus Terminal Concept, value instkvers.' EQUALITY caseIgnoreIA5Ma + tch SUBSTR caseIgnoreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE ) +objectClasses: ( 1.3.6.1.4.1.10098.1.2.1.1 NAME 'gotoTerminal' DESC 'GOto - Go + nicus Terminal Concept, objectclass' SUP top STRUCTURAL MUST cn MAY ( gotoSys + logServer $ gotoNtpServer $ gotoSwapServer $ gotoLpdServer $ gotoFontPath $ g + otoFilesystem $ gotoFloppyEnable $ gotoCdromEnable $ gotoLpdEnable $ gotoScan + nerEnable $ gotoScannerClients $ gotoRootPasswd $ gotoXdmcpServer $ gotoXMeth + od $ gotoSndModule $ gotoLastUser $ gotoXMonitor $ gotoXHsync $ gotoXVsync $ + gotoXResolution $ gotoXColordepth $ gotoXMouseport $ gotoXMouseButtons $ goto + Mode $ gotoXKbModel $ gotoXKbLayout $ gotoXKbVariant $ gotoXDriver $ gotoXMou + seType $ macAddress $ gotoAutoFs $ gotoModules $ gotoAdaptPath $ gotoKernelPa + rameters $ gotoBootKernel $ gotoTerminalPath $ gotoLdapServer $ gotoScannerMo + del ) ) +objectClasses: ( 1.3.6.1.4.1.10098.1.2.1.18 NAME 'gotoInstallProfile' DESC 'Te + rminal Server installation profile' SUP top STRUCTURAL MUST ( cn $ gotoInstur + l $ gotoBaseInsturl $ gotoInstSuite $ gotoInstKernelVersion $ gotoPackage ) ) +objectClasses: ( 1.3.6.1.4.1.10098.1.2.1.19.1 NAME 'gosaObject' DESC 'Objectcl + ass for GOsa settings' AUXILIARY MUST gosaSubtreeACL ) +objectClasses: ( 1.3.6.1.4.1.10098.1.2.1.19.2 NAME 'gosaLockEntry' DESC 'Objec + tclass for GOsa locking' SUP top STRUCTURAL MUST ( gosaUser $ gosaObject $ cn + ) ) diff --git a/contrib/iplanet/66gonicus-pureftpd.ldif b/contrib/iplanet/66gonicus-pureftpd.ldif new file mode 100644 index 000000000..116b90a79 --- /dev/null +++ b/contrib/iplanet/66gonicus-pureftpd.ldif @@ -0,0 +1,35 @@ +# +# Schema for PureFTPD +# +dn: cn=schema +attributeTypes: ( 1.3.6.1.4.1.6981.11.3.1 NAME 'FTPQuotaFiles' DESC 'Quota (in + number of files) for an FTP user' EQUALITY integerMatch SYNTAX 1.3.6.1.4.1.1 + 466.115.121.1.27 SINGLE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.6981.11.3.2 NAME 'FTPQuotaMBytes' DESC 'Quota (i + n megabytes) for an FTP user' EQUALITY integerMatch SYNTAX 1.3.6.1.4.1.1466.1 + 15.121.1.27 SINGLE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.6981.11.3.3 NAME 'FTPUploadRatio' DESC 'Ratio (c + ompared with FTPRatioDown) for uploaded files' EQUALITY integerMatch SYNTAX 1 + .3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.6981.11.3.4 NAME 'FTPDownloadRatio' DESC 'Ratio + (compared with FTPRatioUp) for downloaded files' EQUALITY integerMatch SYNTAX + 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.6981.11.3.5 NAME 'FTPUploadBandwidth' DESC 'Band + width (in KB/s) to limit upload speeds to' EQUALITY integerMatch SYNTAX 1.3.6 + .1.4.1.1466.115.121.1.27 SINGLE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.6981.11.3.6 NAME 'FTPDownloadBandwidth' DESC 'Ba + ndwidth (in KB/s) to limit download speeds to' EQUALITY integerMatch SYNTAX 1 + .3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.6981.11.3.7 NAME 'FTPStatus' DESC 'Account statu + s: enabled or disabled' EQUALITY caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.1 + 15.121.1.26 SINGLE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.6981.11.3.8 NAME 'FTPuid' DESC 'System uid (over + rides uidNumber if present)' EQUALITY integerMatch SYNTAX 1.3.6.1.4.1.1466.11 + 5.121.1.27 SINGLE-VALUE ) +attributeTypes: ( 1.3.6.1.4.1.6981.11.3.9 NAME 'FTPgid' DESC 'System uid (over + rides gidNumber if present)' EQUALITY integerMatch SYNTAX 1.3.6.1.4.1.1466.11 + 5.121.1.27 SINGLE-VALUE ) +objectClasses: ( 1.3.6.1.4.1.6981.11.2.3 NAME 'PureFTPdUser' DESC 'PureFTPd us + er with optional quota, throttling, and ratio' SUP top AUXILIARY MAY ( FTPSta + tus $ FTPQuotaFiles $ FTPQuotaMBytes $ FTPUploadRatio $ FTPDownloadRatio $ FT + PUploadBandwidth $ FTPDownloadBandwidth $ FTPuid $ FTPgid ) ) diff --git a/contrib/mysql/gofax/gofax.sql b/contrib/mysql/gofax/gofax.sql new file mode 100644 index 000000000..744514a50 --- /dev/null +++ b/contrib/mysql/gofax/gofax.sql @@ -0,0 +1,24 @@ +create database gofax; +use gofax; + +CREATE TABLE faxlog ( + id VARCHAR(20) NOT NULL, + status INTEGER NOT NULL, + status_message TEXT, + uid VARCHAR(20) NOT NULL, + queuing_time TIMESTAMP NOT NULL, + sender_msn VARCHAR(100), + sender_id VARCHAR(100), + receiver_msn VARCHAR(100), + receiver_id VARCHAR(100), + transfer_time INTEGER, + pages INTEGER + ); + +CREATE TABLE faxdata ( + id VARCHAR(20) PRIMARY KEY, + fax_data BLOB + ); + +GRANT INSERT,SELECT ON gofax.faxlog TO logger@localhost IDENTIFIED BY 'somemysqlpass'; +GRANT INSERT,SELECT,DELETE ON gofax.faxdata TO logger@localhost IDENTIFIED BY 'somemysqlpass'; diff --git a/contrib/mysql/gofon/gofon.sql b/contrib/mysql/gofon/gofon.sql new file mode 100644 index 000000000..4d9b84d9f --- /dev/null +++ b/contrib/mysql/gofon/gofon.sql @@ -0,0 +1,21 @@ +create database gophone; + +create table cdr ( + calldate datetime NOT NULL default '0000-00-00 00:00:00', + clid varchar(80) NOT NULL default '', + src varchar(80) NOT NULL default '', + dst varchar(80) NOT NULL default '', + dcontext varchar(80) NOT NULL default '', + channel varchar(80) NOT NULL default '', + dstchannel varchar(80) NOT NULL default '', + lastapp varchar(80) NOT NULL default '', + lastdata varchar(80) NOT NULL default '', + duration integer NOT NULL default '0', + billsec integer NOT NULL default '0', + disposition varchar(45) NOT NULL default '', + amaflags integer NOT NULL default '0', + accountcode varchar(20) NOT NULL default '', + uniqueid varchar(32) NOT NULL default '', + userfield varchar(255) NOT NULL default '' +); + diff --git a/contrib/mysql/golog/golog.sql b/contrib/mysql/golog/golog.sql new file mode 100644 index 000000000..6e0252af4 --- /dev/null +++ b/contrib/mysql/golog/golog.sql @@ -0,0 +1,13 @@ + +create database golog with owner gomon; + +create table golog ( + time_stamp DATETIME, + host VARCHAR(50), + message VARCHAR(255), + log_level VARCHAR(15), + matched_dn VARCHAR(255), + matched_ts DATETIME + ); + +GRANT ALL PRIVILEGES ON golog TO gomon WITH GRANT OPTION; diff --git a/contrib/openldap/goconfig.schema b/contrib/openldap/goconfig.schema new file mode 100644 index 000000000..254d103a0 --- /dev/null +++ b/contrib/openldap/goconfig.schema @@ -0,0 +1,43 @@ +## +## +## goconfig.schema - Needed by the GONICUS System Administator +## +## Version 030719 +## +## +## Maintainer: Lars Scheiter (scheiter@GONICUS.de) +## Cajus Pollmeier (pollmeier@GONICUS.de) +## +## + + +# Attributes for the GONICUS server extensions + +# Syntax: regex +attributetype ( 1.3.6.1.4.1.10098.1.1.10.8 NAME 'goLogcheckIgnoreMatch' + DESC 'Contains a regular expression to ignore' + EQUALITY caseExactIA5Match + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +# Syntax: regex +attributetype ( 1.3.6.1.4.1.10098.1.1.10.9 NAME 'goLogcheckMatch' + DESC 'Contains a regular expression to ignore' + EQUALITY caseExactIA5Match + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +# Syntax: value +attributetype ( 1.3.6.1.4.1.10098.1.1.10.10 NAME 'goLogcheckCategory' + DESC 'Contains a regular expression to ignore' + EQUALITY caseExactIA5Match + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE) + +## +## Objectclasses +## + +# Logging object +objectclass (1.3.6.1.4.1.10098.1.2.2.2 NAME 'goLogcheckObject' SUP top STRUCTURAL + DESC 'Logcheck rule container (v2.2)' + MUST ( cn $ goLogcheckCategory ) + MAY ( goLogcheckMatch $ goLogcheckIgnoreMatch )) + diff --git a/contrib/openldap/gofax.schema b/contrib/openldap/gofax.schema new file mode 100644 index 000000000..76dcc3907 --- /dev/null +++ b/contrib/openldap/gofax.schema @@ -0,0 +1,95 @@ +## +## Gonicus Attribute and Objectclass Definitions for GOfax +## +## Version: 030403 +## +## Maintained by: Lars Scheiter (scheiter@GONICUS.de) +## + +# Attributes +attributetype ( 1.3.6.1.4.1.10098.1.1.7.1 NAME 'goFaxDeliveryMode' + DESC 'goFax delivery mode is defined here' + EQUALITY caseExactIA5Match + SUBSTR caseExactIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE ) + +attributetype ( 1.3.6.1.4.1.10098.1.1.7.2 NAME 'goFaxPrinter' + DESC 'defines which printer is used to print a fax' + EQUALITY caseExactIA5Match + SUBSTR caseExactIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE ) + +attributetype ( 1.3.6.1.4.1.10098.1.1.7.3 NAME 'goFaxDivertNumber' + DESC 'for fax diversion services' + SYNTAX 1.3.6.1.4.1.1466.115.121.1.22 + SINGLE-VALUE ) + +attributetype ( 1.3.6.1.4.1.10098.1.1.7.4 NAME 'goFaxLanguage' + DESC 'preferred language for the users goFax entry' + EQUALITY caseExactIA5Match + SUBSTR caseExactIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE ) + +attributetype ( 1.3.6.1.4.1.10098.1.1.7.5 NAME 'goFaxFormat' + DESC 'defines the fileformat for mailattachments' + EQUALITY caseExactIA5Match + SUBSTR caseExactIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE ) + +attributetype ( 1.3.6.1.4.1.10098.1.1.7.6 NAME 'goFaxRBlocklist' + DESC 'defines faxnumbers the user is not allowed to get fax from' + EQUALITY caseExactIA5Match + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) + + +attributetype ( 1.3.6.1.4.1.10098.1.1.7.8 NAME 'goFaxSBlocklist' + DESC 'defines faxnumbers the user is not allowed to fax to' + EQUALITY caseExactIA5Match + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) + +attributetype ( 1.3.6.1.4.1.10098.1.1.7.7 NAME 'goFaxRBlockgroups' + DESC 'defines groups of receive blocklists the user belongs to' + EQUALITY caseExactIA5Match + SUBSTR caseExactIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) + +attributetype ( 1.3.6.1.4.1.10098.1.1.7.9 NAME 'goFaxSBlockgroups' + DESC 'defines groups of sender blocklists the user belongs to' + EQUALITY caseExactIA5Match + SUBSTR caseExactIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) + +attributetype ( 1.3.6.1.4.1.10098.1.1.7.10 NAME 'goFaxIsEnabled' + DESC 'This account is enabled or not' + EQUALITY caseExactIA5Match + SUBSTR caseExactIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE ) + +attributetype ( 1.3.6.1.4.1.10098.1.1.7.11 NAME 'facsimileAlternateTelephoneNumber' + EQUALITY telephoneNumberMatch + SUBSTR telephoneNumberSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.50 ) + +# objectclass +objectclass (1.3.6.1.4.1.10098.1.2.1.11 NAME 'goFaxAccount' SUP top AUXILIARY + DESC 'goFax Account objectclass (v1.0.4)' + MUST ( goFaxDeliveryMode $ facsimileTelephoneNumber $ uid $ goFaxIsEnabled ) + MAY ( goFaxPrinter $ goFaxDivertNumber $ goFaxLanguage $ goFaxFormat $ goFaxRBlocklist $ + goFaxRBlockgroups $ goFaxSBlocklist $ goFaxSBlockgroups $ mail $ + facsimileAlternateTelephoneNumber )) + +objectclass (1.3.6.1.4.1.10098.1.2.1.12 NAME 'goFaxSBlock' + DESC 'goFax send blocklist groups (v1.0.4)' + MUST ( cn ) + MAY ( goFaxSBlocklist $ description )) + +objectclass (1.3.6.1.4.1.10098.1.2.1.13 NAME 'goFaxRBlock' + DESC 'goFax receive blocklist groups (v1.0.4)' + MUST ( cn ) + MAY ( goFaxRBlocklist $ description )) + diff --git a/contrib/openldap/gofirewall.schema b/contrib/openldap/gofirewall.schema new file mode 100644 index 000000000..3405b9de6 --- /dev/null +++ b/contrib/openldap/gofirewall.schema @@ -0,0 +1,128 @@ +## +## +## gofirewall.schema - Used to store some firewalling data +## +## +## Version 030403 +## +## +## Maintainer: Cajus Pollmeier (pollmeier@GONICUS.de) +## Lars Scheiter (scheiter@GONICUS.de) +## +## + + +# Attributes for FireWall Configs +attributetype ( 1.3.6.1.4.1.10098.1.1.4.1 NAME 'FWdevice' + DESC 'Firewall definitions' + EQUALITY caseIgnoreIA5Match + SUBSTR caseExactIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +attributetype ( 1.3.6.1.4.1.10098.1.1.4.2 NAME 'FWtype' + DESC 'Firewall definitions' + EQUALITY caseIgnoreIA5Match + SUBSTR caseExactIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE) + +attributetype ( 1.3.6.1.4.1.10098.1.1.4.3 NAME 'FWaction' + DESC 'Firewall definitions' + EQUALITY caseIgnoreIA5Match + SUBSTR caseExactIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE) + +attributetype ( 1.3.6.1.4.1.10098.1.1.4.4 NAME 'FWtable' + DESC 'Firewall definitions' + EQUALITY caseIgnoreIA5Match + SUBSTR caseExactIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +attributetype ( 1.3.6.1.4.1.10098.1.1.4.5 NAME 'FWsource' + DESC 'Firewall definitions' + EQUALITY caseIgnoreIA5Match + SUBSTR caseExactIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +attributetype ( 1.3.6.1.4.1.10098.1.1.4.6 NAME 'FWdest' + DESC 'Firewall definitions' + EQUALITY caseIgnoreIA5Match + SUBSTR caseExactIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +attributetype ( 1.3.6.1.4.1.10098.1.1.4.7 NAME 'FWservice' + DESC 'Firewall definitions' + EQUALITY caseIgnoreIA5Match + SUBSTR caseExactIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +attributetype ( 1.3.6.1.4.1.10098.1.1.4.8 NAME 'FWprotocol' + DESC 'Firewall definitions' + EQUALITY caseIgnoreIA5Match + SUBSTR caseExactIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +attributetype ( 1.3.6.1.4.1.10098.1.1.4.10 NAME 'FWlog' + DESC 'Firewall definitions' + EQUALITY caseIgnoreIA5Match + SUBSTR caseExactIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +attributetype ( 1.3.6.1.4.1.10098.1.1.4.11 NAME 'FWnetwork' + DESC 'Firewall definitions' + EQUALITY caseIgnoreIA5Match + SUBSTR caseExactIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +attributetype ( 1.3.6.1.4.1.10098.1.1.4.12 NAME 'FWhost' + DESC 'Firewall definitions' + EQUALITY caseIgnoreIA5Match + SUBSTR caseExactIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +attributetype ( 1.3.6.1.4.1.10098.1.1.4.14 NAME 'FWproto' + DESC 'Firewall definitions' + EQUALITY caseIgnoreIA5Match + SUBSTR caseExactIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +attributetype ( 1.3.6.1.4.1.10098.1.1.4.15 NAME 'FWlist' + DESC 'Firewall definitions' + EQUALITY caseIgnoreIA5Match + SUBSTR caseExactIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +attributetype ( 1.3.6.1.4.1.10098.1.1.4.16 NAME 'FWdisabled' + DESC 'Firewall definitions' + EQUALITY caseIgnoreIA5Match + SUBSTR caseExactIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +attributetype ( 1.3.6.1.4.1.10098.1.1.4.17 NAME 'FWid' + DESC 'Firewall definitions' + EQUALITY caseIgnoreIA5Match + SUBSTR caseExactIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +## +## Objectclasses +## + +# ObjectClasses for Firewall Setups +objectclass (1.3.6.1.4.1.10098.1.2.1.6 NAME 'FWRule' + DESC 'Firewall rule definition' SUP top AUXILIARY + MUST ( cn $ FWtype ) + MAY ( FWdevice $ FWaction $ FWtable $ FWsource $ FWdest $ FWservice $ FWprotocol $ + FWtable $ FWlog $ FWid )) + +objectclass (1.3.6.1.4.1.10098.1.2.1.7 NAME 'FWGroup' + DESC 'Firewall group definition' SUP top AUXILIARY + MUST ( cn ) + MAY ( FWnetwork $ FWhost $ FWservice $ FWproto $ FWid)) + +objectclass (1.3.6.1.4.1.10098.1.2.1.8 NAME 'FWRuleSet' + DESC 'Firewall ruleset definition' SUP top AUXILIARY + MUST ( cn ) + MAY ( FWlist $ FWdisabled $ FWid)) + diff --git a/contrib/openldap/gofon.schema b/contrib/openldap/gofon.schema new file mode 100644 index 000000000..0b2842fc0 --- /dev/null +++ b/contrib/openldap/gofon.schema @@ -0,0 +1,58 @@ +## +## Gonicus Attribute and Objectclass Definitions for GOfon +## +## Version: 20041022 +## +## Maintained by: Lars Scheiter (scheiter@GONICUS.de) +## + +# Attributes +attributetype ( 1.3.6.1.4.1.10098.1.1.13.1 NAME 'goFonDeliveryMode' + DESC 'GOFon delivery mode is defined here' + EQUALITY caseExactIA5Match + SUBSTR caseExactIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE ) + +attributetype ( 1.3.6.1.4.1.10098.1.1.13.2 NAME 'goFonForwarding' + DESC 'defines which phone numbers get the next call' + EQUALITY caseExactIA5Match + SUBSTR caseExactIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) + +attributetype ( 1.3.6.1.4.1.10098.1.1.13.3 NAME 'goFonFormat' + DESC 'defines voicemail delivery format' + EQUALITY caseExactIA5Match + SUBSTR caseExactIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE ) + +attributetype ( 1.3.6.1.4.1.10098.1.1.13.4 NAME 'goFonHardware' + DESC 'defines voicemail delivery format' + EQUALITY caseExactIA5Match + SUBSTR caseExactIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE ) + +attributetype ( 1.3.6.1.4.1.10098.1.1.13.5 NAME 'goFonPIN' + DESC 'defines voicemail delivery format' + EQUALITY caseExactIA5Match + SUBSTR caseExactIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE ) + +# objectclass +objectclass (1.3.6.1.4.1.10098.1.2.3.11 NAME 'goFonAccount' SUP top AUXILIARY + DESC 'GOFon Account objectclass (v1.0)' + MUST ( goFonDeliveryMode $ telephoneNumber $ uid ) + MAY ( goFonFormat $ goFonForwarding $ goFonHardware $ goFonPIN )) + +objectclass (1.3.6.1.4.1.10098.1.2.3.12 NAME 'goFonHardware' SUP top STRUCTURAL + DESC 'defines a telephone (v1.0)' + MUST ( cn $ macAddress $ ipHostNumber ) + MAY (description) ) + +objectclass (1.3.6.1.4.1.10098.1.2.3.13 NAME 'goFonPickupGroup' SUP top AUXILIARY + DESC 'Additive for posixGroups (v1.0)' + MUST ( cn $ gidNumber ) ) + diff --git a/contrib/openldap/goforge.schema b/contrib/openldap/goforge.schema new file mode 100644 index 000000000..b9762f045 --- /dev/null +++ b/contrib/openldap/goforge.schema @@ -0,0 +1,14 @@ +## +## goforge.schema - used by goforge +## +## Version: 030421 +## +## Maintained by: Lars Scheiter (scheiter@GONICUS.de) +## + + +# Objectclasses +objectclass (1.3.6.1.4.1.10098.1.2.1.24 NAME 'goforgeAccount' + DESC 'users that have access to GOforge get this objectclass' + MUST ( cn $ mail $ uid )) + diff --git a/contrib/openldap/gohard.schema b/contrib/openldap/gohard.schema new file mode 100644 index 000000000..79ae3e3d5 --- /dev/null +++ b/contrib/openldap/gohard.schema @@ -0,0 +1,82 @@ +## +## +## gohard.scheam - Used for Hardware describtions, normally used by GOto +## +## Version 030403 +## +## +## Maintainer: Lars Scheiter (scheiter@GONICUS.de> +## Cajus Pollmeier (pollmeier@GONICUS.de) +## +## + + +# Attributes for Hardware definitions + +attributetype ( 1.3.6.1.4.1.10098.1.1.2.1 NAME 'ghCpuType' + DESC 'Hardware definitions, value cpuType' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +attributetype ( 1.3.6.1.4.1.10098.1.1.2.2 NAME 'ghMemSize' + DESC 'Hardware definitions, value memSize' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE) + +attributetype ( 1.3.6.1.4.1.10098.1.1.2.3 NAME 'ghUsbSupport' + DESC 'Hardware definitions, value usbSupport' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE) + +attributetype ( 1.3.6.1.4.1.10098.1.1.2.4 NAME 'ghIdeDev' + DESC 'Hardware definitions, value ideDev' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +attributetype ( 1.3.6.1.4.1.10098.1.1.2.5 NAME 'ghScsiDev' + DESC 'Hardware definitions, value scsiDev' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +attributetype ( 1.3.6.1.4.1.10098.1.1.2.7 NAME 'ghSoundAdapter' + DESC 'Hardware definitions, value soundAdapter' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE) + +attributetype ( 1.3.6.1.4.1.10098.1.1.2.8 NAME 'ghNetNic' + DESC 'Hardware definitions, value Network Device' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +attributetype ( 1.3.6.1.4.1.10098.1.1.2.9 NAME 'ghGfxAdapter' + DESC 'Hardware definitions, value Grafikkarte' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE) + +attributetype ( 1.3.6.1.4.1.10098.1.1.2.10 NAME 'ghInventoryNumber' + DESC 'Unique number for inclusion in an inventory' + EQUALITY caseIgnoreIA5Match + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE) + + +# objectclass for Hardware definitions + +objectclass (1.3.6.1.4.1.10098.1.2.1.3 NAME 'GOhard' + DESC 'Gonicus Hardware definitions, objectclass (v2.1)' SUP top AUXILIARY + MUST ( cn ) + MAY ( ghGfxAdapter $ ghNetNic $ ghSoundAdapter $ ghIdeDev $ ghScsiDev $ + macAddress $ ghUsbSupport $ ghMemSize $ ghCpuType $ ghInventoryNumber ) ) + diff --git a/contrib/openldap/gosa+samba3.schema b/contrib/openldap/gosa+samba3.schema new file mode 100644 index 000000000..f8121840f --- /dev/null +++ b/contrib/openldap/gosa+samba3.schema @@ -0,0 +1,276 @@ +## +## Needed attributes for GOsa (GONICUS System Administrator) +## +## Version 030303 +## +## Maintainer: Cajus Pollmeier (pollmeier@GONICUS.de) +## + + +# Attributes +attributetype ( 1.3.6.1.4.1.10098.1.1.12.1 NAME 'gosaSubtreeACL' + DESC 'GOsa acl entry' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15) + +attributetype ( 1.3.6.1.4.1.10098.1.1.12.2 NAME 'gosaUser' + DESC 'GOsa user' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15) + +attributetype ( 1.3.6.1.4.1.10098.1.1.12.3 NAME 'gosaObject' + DESC 'GOsa object' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15) + +attributetype ( 1.3.6.1.4.1.10098.1.1.12.4 NAME 'gosaMailServer' + DESC 'Specify users main mail server' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +attributetype ( 1.3.6.1.4.1.10098.1.1.12.5 NAME 'gosaMailQuota' + DESC 'GOsa quota definitions' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +attributetype ( 1.3.6.1.4.1.10098.1.1.12.6 NAME 'gosaMailAlternateAddress' + DESC 'Additional mail addresses where the user is reachable' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +attributetype ( 1.3.6.1.4.1.10098.1.1.12.7 NAME 'gosaMailForwardingAddress' + DESC 'Addresses where to forward mail to' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +attributetype ( 1.3.6.1.4.1.10098.1.1.12.8 NAME 'gosaMailMaxSize' + DESC 'Block mails bigger than this value' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +attributetype ( 1.3.6.1.4.1.10098.1.1.12.9 NAME 'gosaSpamSortLevel' + DESC 'Spamassassins hits' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +attributetype ( 1.3.6.1.4.1.10098.1.1.12.10 NAME 'gosaSpamMailbox' + DESC 'Where to put spam' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +attributetype ( 1.3.6.1.4.1.10098.1.1.12.11 NAME 'gosaVacationMessage' + DESC 'Text to display in case of vacation' + SYNTAX 1.3.6.1.4.1.1466.115.121.1.28) + +attributetype ( 1.3.6.1.4.1.10098.1.1.12.12 NAME 'gosaMailDeliveryMode' + DESC 'What to do with mails' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +attributetype ( 1.3.6.1.4.1.10098.1.1.12.13 NAME 'gosaDefaultPrinter' + DESC 'Defines a default printer a user owns' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE) + +attributetype ( 1.3.6.1.4.1.10098.1.1.12.14 NAME 'gosaDefaultLanguage' + DESC 'Defines the default language for a user' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE) + +attributetype ( 1.3.6.1.4.1.10098.1.1.12.15 NAME 'gosaHostACL' + DESC 'Defines the places where users can login' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +attributetype ( 1.3.6.1.4.1.10098.1.1.12.16 NAME 'gosaService' + DESC 'Defines services a certain host can provide' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +attributetype ( 1.3.6.1.4.1.10098.1.1.12.17 NAME 'gosaProxyID' + DESC 'Defines the proxy user id used, needed for some filters' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +attributetype ( 1.3.6.1.4.1.10098.1.1.12.18 NAME 'gosaProxyAcctFlags' + DESC 'Proxy Account Flags' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{16} SINGLE-VALUE) + +attributetype ( 1.3.6.1.4.1.10098.1.1.12.19 NAME 'gosaProxyWorkingStart' + DESC 'Specifies the beginning of work in minutes, relative to 00:00' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +attributetype ( 1.3.6.1.4.1.10098.1.1.12.20 NAME 'gosaProxyWorkingStop' + DESC 'Specifies the end of work in minutes, relative to 00:00' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +attributetype ( 1.3.6.1.4.1.10098.1.1.12.21 NAME 'gosaApplicationName' + DESC 'Specifies the name of an application to be shown up on users desktop' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +attributetype ( 1.3.6.1.4.1.10098.1.1.12.22 NAME 'gosaApplicationExecute' + DESC 'Specifies the executable path of an application' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +attributetype ( 1.3.6.1.4.1.10098.1.1.12.23 NAME 'gosaApplicationFlags' + DESC 'Specifies the application flags G(roup only), D(esktop), M(enu)' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +attributetype ( 1.3.6.1.4.1.10098.1.1.12.24 NAME 'gosaApplicationIcon' + DESC 'Keeps the application icon in png format' + SYNTAX 1.3.6.1.4.1.1466.115.121.1.28) + +attributetype ( 1.3.6.1.4.1.10098.1.1.12.25 NAME 'gosaSharedFolderTarget' + DESC 'Keeps the target of cyrus shared folders' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +attributetype ( 1.3.6.1.4.1.10098.1.1.12.26 NAME 'gosaMemberApplication' + DESC 'Like memberUid, just for applications' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +attributetype ( 1.3.6.1.4.1.10098.1.1.12.27 NAME 'gosaApplicationParameter' + DESC 'Store application parameters' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15) + +attributetype ( 1.3.6.1.4.1.10098.1.1.12.28 NAME 'gosaProxyQuota' + DESC 'Specifies the amount of data a user may surf in a defined period of time' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +attributetype ( 1.3.6.1.4.1.10098.1.1.12.29 NAME 'gosaProxyQuotaPeriod' + DESC 'Specifies period of time where the counter is been reseted' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +attributetype ( 1.3.6.1.4.1.10098.1.1.12.30 NAME 'gosaGroupObjects' + DESC 'Takes a list of all object types that are in a gosaGroupOfNames' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE) + +attributetype ( 1.3.6.1.4.1.10098.1.1.6.2 NAME 'academicTitle' + DESC 'Field to represent the academic title' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +attributetype ( 1.3.6.1.4.1.15305.2.1 NAME ( 'gender' 'sex' ) + DESC 'Gender: M for male, F for female' + EQUALITY caseIgnoreIA5Match + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{1} + SINGLE-VALUE ) + +attributetype ( 1.3.6.1.4.1.15305.2.2 NAME ( 'dateOfBirth' 'dob' ) + DESC 'Date of birth in ISO 8601 format' + EQUALITY caseIgnoreMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{10} + SINGLE-VALUE ) + +attributetype ( 1.3.6.1.4.1.19414.2.1.651 + NAME 'acl' + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} ) + +# Objectclasses +objectclass ( 1.3.6.1.4.1.10098.1.2.1.19.1 NAME 'gosaObject' AUXILIARY + DESC 'Objectclass for GOsa settings (v2.1)' + MUST ( gosaSubtreeACL )) + +objectclass ( 1.3.6.1.4.1.10098.1.2.1.19.2 NAME 'gosaLockEntry' SUP top STRUCTURAL + DESC 'Objectclass for GOsa locking (v2.1)' + MUST ( gosaUser $ gosaObject $ cn )) + +objectclass ( 1.3.6.1.4.1.10098.1.2.1.19.3 NAME 'gosaCacheEntry' SUP top STRUCTURAL + DESC 'Objectclass for GOsa caching (v2.1)' + MAY ( gosaUser ) + MUST ( cn )) + +objectclass ( 1.3.6.1.4.1.10098.1.2.1.19.4 NAME 'gosaDepartment' SUP top AUXILIARY + DESC 'Objectclass to mark Departments for GOsa (v2.1)' + MUST ( ou $ description )) + +objectclass ( 1.3.6.1.4.1.10098.1.2.1.19.5 NAME 'gosaMailAccount' SUP top AUXILIARY + DESC 'Objectclass to mark MailAccounts for GOsa (v2.1)' + MUST ( mail $ gosaMailServer $ gosaMailDeliveryMode) + MAY ( gosaMailQuota $ gosaMailAlternateAddress $ gosaMailForwardingAddress $ + gosaMailMaxSize $ gosaSpamSortLevel $ gosaSpamMailbox $ + gosaVacationMessage $ gosaSharedFolderTarget $ acl)) + +objectclass ( 1.3.6.1.4.1.10098.1.2.1.19.6 NAME 'gosaAccount' SUP top AUXILIARY + DESC 'Objectclass for GOsa Accounts (v2.1.2)' + MUST ( uid ) + MAY ( sambaLMPassword $ sambaNTPassword $ sambaPwdLastSet $ gosaDefaultPrinter $ + gosaDefaultLanguage $ academicTitle $ personalTitle $ gosaHostACL $ dateOfBirth $ + sambaBadPasswordCount $ sambaBadPasswordTime $ gender )) + +objectclass ( 1.3.6.1.4.1.10098.1.2.1.19.7 NAME 'gosaHost' SUP top AUXILIARY + DESC 'Objectclass for GOsa Hosts (v2.1)' + MUST ( cn ) + MAY ( description $ gosaService )) + +objectclass ( 1.3.6.1.4.1.10098.1.2.1.19.8 NAME 'gosaProxyAccount' SUP top AUXILIARY + DESC 'Objectclass for GOsa Proxy settings (v2.1.2)' + MUST ( gosaProxyAcctFlags ) + MAY ( gosaProxyID $ gosaProxyWorkingStart $ gosaProxyWorkingStop $ gosaProxyQuota $ + gosaProxyQuotaPeriod )) + +objectclass ( 1.3.6.1.4.1.10098.1.2.1.19.9 NAME 'gosaApplication' + DESC 'Objectclass for GOsa applications (v2.1)' + MUST ( cn $ gosaApplicationExecute ) + MAY ( gosaApplicationName $ gosaApplicationIcon $ gosaApplicationFlags $ + gosaApplicationParameter $ description )) + +objectclass ( 1.3.6.1.4.1.10098.1.2.1.19.10 NAME 'gosaApplicationGroup' SUP top AUXILIARY + DESC 'Objectclass for GOsa application groups (v2.1)' + MUST ( cn ) + MAY ( gosaMemberApplication $ gosaApplicationParameter )) + +objectclass ( 1.3.6.1.4.1.10098.1.2.1.19.11 NAME 'gosaUserTemplate' SUP top AUXILIARY + DESC 'Objectclass for GOsa User Templates (v2.1)' + MUST ( cn )) + +objectclass ( 1.3.6.1.4.1.10098.1.2.1.19.12 NAME 'gosaGroupOfNames' + DESC 'GOsa object grouping (v2.2)' + SUP top STRUCTURAL + MUST ( cn $ gosaGroupObjects ) + MAY ( businessCategory $ seeAlso $ owner $ ou $ o $ description $ member ) ) + +objectclass ( 1.3.6.1.4.1.10098.1.2.1.19.13 NAME 'gosaWebdavAccount' + DESC 'GOsa webdav enabling account (v2.3)' + SUP top AUXILIARY + MUST ( cn $ uid )) diff --git a/contrib/openldap/gosa.schema b/contrib/openldap/gosa.schema new file mode 100644 index 000000000..c46d2ce6f --- /dev/null +++ b/contrib/openldap/gosa.schema @@ -0,0 +1,275 @@ +## +## Needed attributes for GOsa (GONICUS System Administrator) +## +## Version 030303 +## +## Maintainer: Cajus Pollmeier (pollmeier@GONICUS.de) +## + + +# Attributes +attributetype ( 1.3.6.1.4.1.10098.1.1.12.1 NAME 'gosaSubtreeACL' + DESC 'GOsa acl entry' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15) + +attributetype ( 1.3.6.1.4.1.10098.1.1.12.2 NAME 'gosaUser' + DESC 'GOsa user' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15) + +attributetype ( 1.3.6.1.4.1.10098.1.1.12.3 NAME 'gosaObject' + DESC 'GOsa object' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15) + +attributetype ( 1.3.6.1.4.1.10098.1.1.12.4 NAME 'gosaMailServer' + DESC 'Specify users main mail server' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +attributetype ( 1.3.6.1.4.1.10098.1.1.12.5 NAME 'gosaMailQuota' + DESC 'GOsa quota definitions' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +attributetype ( 1.3.6.1.4.1.10098.1.1.12.6 NAME 'gosaMailAlternateAddress' + DESC 'Additional mail addresses where the user is reachable' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +attributetype ( 1.3.6.1.4.1.10098.1.1.12.7 NAME 'gosaMailForwardingAddress' + DESC 'Addresses where to forward mail to' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +attributetype ( 1.3.6.1.4.1.10098.1.1.12.8 NAME 'gosaMailMaxSize' + DESC 'Block mails bigger than this value' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +attributetype ( 1.3.6.1.4.1.10098.1.1.12.9 NAME 'gosaSpamSortLevel' + DESC 'Spamassassins hits' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +attributetype ( 1.3.6.1.4.1.10098.1.1.12.10 NAME 'gosaSpamMailbox' + DESC 'Where to put spam' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +attributetype ( 1.3.6.1.4.1.10098.1.1.12.11 NAME 'gosaVacationMessage' + DESC 'Text to display in case of vacation' + SYNTAX 1.3.6.1.4.1.1466.115.121.1.28) + +attributetype ( 1.3.6.1.4.1.10098.1.1.12.12 NAME 'gosaMailDeliveryMode' + DESC 'What to do with mails' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +attributetype ( 1.3.6.1.4.1.10098.1.1.12.13 NAME 'gosaDefaultPrinter' + DESC 'Defines a default printer a user owns' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE) + +attributetype ( 1.3.6.1.4.1.10098.1.1.12.14 NAME 'gosaDefaultLanguage' + DESC 'Defines the default language for a user' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE) + +attributetype ( 1.3.6.1.4.1.10098.1.1.12.15 NAME 'gosaHostACL' + DESC 'Defines the places where users can login' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +attributetype ( 1.3.6.1.4.1.10098.1.1.12.16 NAME 'gosaService' + DESC 'Defines services a certain host can provide' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +attributetype ( 1.3.6.1.4.1.10098.1.1.12.17 NAME 'gosaProxyID' + DESC 'Defines the proxy user id used, needed for some filters' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +attributetype ( 1.3.6.1.4.1.10098.1.1.12.18 NAME 'gosaProxyAcctFlags' + DESC 'Proxy Account Flags' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{16} SINGLE-VALUE) + +attributetype ( 1.3.6.1.4.1.10098.1.1.12.19 NAME 'gosaProxyWorkingStart' + DESC 'Specifies the beginning of work in minutes, relative to 00:00' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +attributetype ( 1.3.6.1.4.1.10098.1.1.12.20 NAME 'gosaProxyWorkingStop' + DESC 'Specifies the end of work in minutes, relative to 00:00' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +attributetype ( 1.3.6.1.4.1.10098.1.1.12.21 NAME 'gosaApplicationName' + DESC 'Specifies the name of an application to be shown up on users desktop' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +attributetype ( 1.3.6.1.4.1.10098.1.1.12.22 NAME 'gosaApplicationExecute' + DESC 'Specifies the executable path of an application' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +attributetype ( 1.3.6.1.4.1.10098.1.1.12.23 NAME 'gosaApplicationFlags' + DESC 'Specifies the application flags G(roup only), D(esktop), M(enu)' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +attributetype ( 1.3.6.1.4.1.10098.1.1.12.24 NAME 'gosaApplicationIcon' + DESC 'Keeps the application icon in png format' + SYNTAX 1.3.6.1.4.1.1466.115.121.1.28) + +attributetype ( 1.3.6.1.4.1.10098.1.1.12.25 NAME 'gosaSharedFolderTarget' + DESC 'Keeps the target of cyrus shared folders' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +attributetype ( 1.3.6.1.4.1.10098.1.1.12.26 NAME 'gosaMemberApplication' + DESC 'Like memberUid, just for applications' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +attributetype ( 1.3.6.1.4.1.10098.1.1.12.27 NAME 'gosaApplicationParameter' + DESC 'Store application parameters' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15) + +attributetype ( 1.3.6.1.4.1.10098.1.1.12.28 NAME 'gosaProxyQuota' + DESC 'Specifies the amount of data a user may surf in a defined period of time' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +attributetype ( 1.3.6.1.4.1.10098.1.1.12.29 NAME 'gosaProxyQuotaPeriod' + DESC 'Specifies period of time where the counter is been reseted' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +attributetype ( 1.3.6.1.4.1.10098.1.1.12.30 NAME 'gosaGroupObjects' + DESC 'Takes a list of all object types that are in a gosaGroupOfNames' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE) + +attributetype ( 1.3.6.1.4.1.10098.1.1.6.2 NAME 'academicTitle' + DESC 'Field to represent the academic title' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} ) + +attributetype ( 1.3.6.1.4.1.15305.2.1 NAME ( 'gender' 'sex' ) + DESC 'Gender: M for male, F for female' + EQUALITY caseIgnoreIA5Match + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{1} + SINGLE-VALUE ) + +attributetype ( 1.3.6.1.4.1.15305.2.2 NAME ( 'dateOfBirth' 'dob' ) + DESC 'Date of birth in ISO 8601 format' + EQUALITY caseIgnoreMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{10} + SINGLE-VALUE ) + +attributetype ( 1.3.6.1.4.1.19414.2.1.651 + NAME 'acl' + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} ) + +# Objectclasses +objectclass ( 1.3.6.1.4.1.10098.1.2.1.19.1 NAME 'gosaObject' AUXILIARY + DESC 'Objectclass for GOsa settings (v2.1)' + MUST ( gosaSubtreeACL )) + +objectclass ( 1.3.6.1.4.1.10098.1.2.1.19.2 NAME 'gosaLockEntry' SUP top STRUCTURAL + DESC 'Objectclass for GOsa locking (v2.1)' + MUST ( gosaUser $ gosaObject $ cn )) + +objectclass ( 1.3.6.1.4.1.10098.1.2.1.19.3 NAME 'gosaCacheEntry' SUP top STRUCTURAL + DESC 'Objectclass for GOsa caching (v2.1)' + MAY ( gosaUser ) + MUST ( cn )) + +objectclass ( 1.3.6.1.4.1.10098.1.2.1.19.4 NAME 'gosaDepartment' SUP top AUXILIARY + DESC 'Objectclass to mark Departments for GOsa (v2.1)' + MUST ( ou $ description )) + +objectclass ( 1.3.6.1.4.1.10098.1.2.1.19.5 NAME 'gosaMailAccount' SUP top AUXILIARY + DESC 'Objectclass to mark MailAccounts for GOsa (v2.1)' + MUST ( mail $ gosaMailServer $ gosaMailDeliveryMode) + MAY ( gosaMailQuota $ gosaMailAlternateAddress $ gosaMailForwardingAddress $ + gosaMailMaxSize $ gosaSpamSortLevel $ gosaSpamMailbox $ + gosaVacationMessage $ gosaSharedFolderTarget $ acl)) + +objectclass ( 1.3.6.1.4.1.10098.1.2.1.19.6 NAME 'gosaAccount' SUP top AUXILIARY + DESC 'Objectclass for GOsa Accounts (v2.1.2)' + MUST ( uid ) + MAY ( lmPassword $ ntPassword $ pwdLastSet $ gosaDefaultPrinter $ gosaDefaultLanguage $ + academicTitle $ personalTitle $ gosaHostACL $ dateOfBirth $ gender )) + +objectclass ( 1.3.6.1.4.1.10098.1.2.1.19.7 NAME 'gosaHost' SUP top AUXILIARY + DESC 'Objectclass for GOsa Hosts (v2.1)' + MUST ( cn ) + MAY ( description $ gosaService )) + +objectclass ( 1.3.6.1.4.1.10098.1.2.1.19.8 NAME 'gosaProxyAccount' SUP top AUXILIARY + DESC 'Objectclass for GOsa Proxy settings (v2.1.2)' + MUST ( gosaProxyAcctFlags ) + MAY ( gosaProxyID $ gosaProxyWorkingStart $ gosaProxyWorkingStop $ gosaProxyQuota $ + gosaProxyQuotaPeriod )) + +objectclass ( 1.3.6.1.4.1.10098.1.2.1.19.9 NAME 'gosaApplication' + DESC 'Objectclass for GOsa applications (v2.1)' + MUST ( cn $ gosaApplicationExecute ) + MAY ( gosaApplicationName $ gosaApplicationIcon $ gosaApplicationFlags $ + gosaApplicationParameter $ description )) + +objectclass ( 1.3.6.1.4.1.10098.1.2.1.19.10 NAME 'gosaApplicationGroup' SUP top AUXILIARY + DESC 'Objectclass for GOsa application groups (v2.1)' + MUST ( cn ) + MAY ( gosaMemberApplication $ gosaApplicationParameter )) + +objectclass ( 1.3.6.1.4.1.10098.1.2.1.19.11 NAME 'gosaUserTemplate' SUP top AUXILIARY + DESC 'Objectclass for GOsa User Templates (v2.1)' + MUST ( cn )) + +objectclass ( 1.3.6.1.4.1.10098.1.2.1.19.12 NAME 'gosaGroupOfNames' + DESC 'GOsa object grouping (v2.2)' + SUP top STRUCTURAL + MUST ( cn $ gosaGroupObjects ) + MAY ( businessCategory $ seeAlso $ owner $ ou $ o $ description $ member ) ) + +objectclass ( 1.3.6.1.4.1.10098.1.2.1.19.13 NAME 'gosaWebdavAccount' + DESC 'GOsa webdav enabling account (v2.3)' + SUP top AUXILIARY + MUST ( cn $ uid )) diff --git a/contrib/openldap/goserver.schema b/contrib/openldap/goserver.schema new file mode 100644 index 000000000..ef8ebf3b8 --- /dev/null +++ b/contrib/openldap/goserver.schema @@ -0,0 +1,228 @@ +## +## +## goserver.schema - Needed by the GONICUS System Administator +## +## Version 030403 +## +## +## Maintainer: Lars Scheiter (scheiter@GONICUS.de) +## Cajus Pollmeier (pollmeier@GONICUS.de) +## +## + + +# Attributes for the Gonicus Terminal Server Class +attributetype ( 1.3.6.1.4.1.10098.1.1.9.1 NAME 'goXdmcpIsEnabled' + DESC 'Indicates if the server is enabled for XDMCP queries' + EQUALITY caseExactIA5Match + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE ) + +attributetype ( 1.3.6.1.4.1.10098.1.1.9.2 NAME 'goFontPath' + DESC 'Fontserver Entry' + EQUALITY caseExactIA5Match + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +# Attributes for common Gonicus Server Class +attributetype ( 1.3.6.1.4.1.10098.1.1.9.4 NAME 'goExportEntry' + DESC 'Provides a NFS export entry' + EQUALITY caseExactIA5Match + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +attributetype ( 1.3.6.1.4.1.10098.1.1.9.9 NAME 'goSyslogSection' + DESC 'What sections wants the server for its syslog service? i.e. *.*' + EQUALITY caseExactIA5Match + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +attributetype ( 1.3.6.1.4.1.10098.1.1.9.10 NAME 'goTimeSource' + DESC 'List of time sources' + EQUALITY caseExactIA5Match + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +attributetype ( 1.3.6.1.4.1.10098.1.1.9.11 NAME 'goSpoolPath' + DESC 'Provides a spool path for printing services' + EQUALITY caseExactIA5Match + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE) + +attributetype ( 1.3.6.1.4.1.10098.1.1.9.12 NAME 'goLdapBase' + DESC 'Base to use for this LDAP server' + EQUALITY caseExactIA5Match + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE) + +attributetype ( 1.3.6.1.4.1.10098.1.1.9.13 NAME 'goImapName' + DESC 'Name of IMAP server appearing in GOsa' + EQUALITY caseExactIA5Match + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE) + +attributetype ( 1.3.6.1.4.1.10098.1.1.9.14 NAME 'goImapConnect' + DESC 'PHP connect string for IMAP server' + EQUALITY caseExactIA5Match + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE) + +attributetype ( 1.3.6.1.4.1.10098.1.1.9.15 NAME 'goImapAdmin' + DESC 'IMAP admin account' + EQUALITY caseExactIA5Match + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE) + +attributetype ( 1.3.6.1.4.1.10098.1.1.9.16 NAME 'goImapPassword' + DESC 'IMAP admin password' + EQUALITY caseExactIA5Match + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE) + +attributetype ( 1.3.6.1.4.1.10098.1.1.9.17 NAME 'goImapSieveServer' + DESC 'Cyrus sieve server address or name' + EQUALITY caseExactIA5Match + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE) + +attributetype ( 1.3.6.1.4.1.10098.1.1.9.18 NAME 'goImapSievePort' + DESC 'Cyrus sieve server port' + EQUALITY caseExactIA5Match + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE) + +attributetype ( 1.3.6.1.4.1.10098.1.1.9.19 NAME 'goKrbRealm' + DESC 'Default Kerberos realm to use for this server' + EQUALITY caseExactIA5Match + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE) + +attributetype ( 1.3.6.1.4.1.10098.1.1.9.20 NAME 'goKrbAdmin' + DESC 'Admin principal for kerberos server' + EQUALITY caseExactIA5Match + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE) + +attributetype ( 1.3.6.1.4.1.10098.1.1.9.21 NAME 'goKrbPassword' + DESC 'Admin password for kerberos server' + EQUALITY caseExactIA5Match + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE) + +attributetype ( 1.3.6.1.4.1.10098.1.1.9.22 NAME 'goFaxAdmin' + DESC 'Admin principal for fax server' + EQUALITY caseExactIA5Match + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE) + +attributetype ( 1.3.6.1.4.1.10098.1.1.9.23 NAME 'goFaxPassword' + DESC 'Admin password for fax server' + EQUALITY caseExactIA5Match + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE) + +attributetype ( 1.3.6.1.4.1.10098.1.1.9.24 NAME 'goLogAdmin' + DESC 'Admin principal for log server' + EQUALITY caseExactIA5Match + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE) + +attributetype ( 1.3.6.1.4.1.10098.1.1.9.25 NAME 'goLogPassword' + DESC 'Admin password for log server' + EQUALITY caseExactIA5Match + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE) + +attributetype ( 1.3.6.1.4.1.10098.1.1.9.26 NAME 'goFonAdmin' + DESC 'Admin principal for fon server' + EQUALITY caseExactIA5Match + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE) + +attributetype ( 1.3.6.1.4.1.10098.1.1.9.27 NAME 'goFonPassword' + DESC 'Admin password for fon server' + EQUALITY caseExactIA5Match + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE) + +attributetype ( 1.3.6.1.4.1.10098.1.1.9.28 NAME 'goFonAreaCode' + DESC 'Store area code' + EQUALITY caseExactIA5Match + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE) + +attributetype ( 1.3.6.1.4.1.10098.1.1.9.29 NAME 'goFonCountryCode' + DESC 'Store country code' + EQUALITY caseExactIA5Match + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE) + +## +## Objectclasses +## + +# Terminal Server description +objectclass (1.3.6.1.4.1.10098.1.2.1.16 NAME 'goTerminalServer' SUP top AUXILIARY + DESC 'Terminal server description (v2.1)' + MUST ( cn $ goXdmcpIsEnabled $ goFontPath ) + MAY ( description )) + +# NFS Server description +objectclass (1.3.6.1.4.1.10098.1.2.1.19 NAME 'goNfsServer' SUP top AUXILIARY + DESC 'NFS server description (v2.1)' + MUST ( cn ) + MAY ( goExportEntry $ description )) + +# Time Server description +objectclass (1.3.6.1.4.1.10098.1.2.1.20 NAME 'goNtpServer' SUP top AUXILIARY + DESC 'Time server description (v2.1)' + MUST ( cn ) + MAY ( goTimeSource $ description )) + +# Syslog Server description +objectclass (1.3.6.1.4.1.10098.1.2.1.21 NAME 'goSyslogServer' SUP top AUXILIARY + DESC 'Syslog server description (v2.1)' + MUST ( cn ) + MAY ( goSyslogSection $ description )) + +# LDAP Server description +objectclass (1.3.6.1.4.1.10098.1.2.1.22 NAME 'goLdapServer' SUP top AUXILIARY + DESC 'LDAP server description (v2.1)' + MUST ( cn ) + MAY ( goLdapBase $ description )) + +# CUPS Server description +objectclass (1.3.6.1.4.1.10098.1.2.1.23 NAME 'goCupsServer' SUP top AUXILIARY + DESC 'CUPS server description (v2.1)' + MUST ( cn ) + MAY ( description )) + +# IMAP Server description +objectclass (1.3.6.1.4.1.10098.1.2.1.24 NAME 'goImapServer' SUP top AUXILIARY + DESC 'IMAP server description (v2.1)' + MUST ( cn $ goImapName $ goImapConnect $ goImapAdmin $ goImapPassword ) + MAY ( goImapSieveServer $ goImapSievePort $ description )) + +# Kerberos Server description +objectclass (1.3.6.1.4.1.10098.1.2.1.25 NAME 'goKrbServer' SUP top AUXILIARY + DESC 'Kerberos server description (v2.1)' + MUST ( cn $ goKrbRealm $ goKrbAdmin $ goKrbPassword ) + MAY ( description )) + +# Fax Server description +objectclass (1.3.6.1.4.1.10098.1.2.1.26 NAME 'goFaxServer' SUP top AUXILIARY + DESC 'Fax server description (v2.1)' + MUST ( cn $ goFaxAdmin $ goFaxPassword ) + MAY ( description )) + +# Common server class +objectclass (1.3.6.1.4.1.10098.1.2.1.27 NAME 'goServer' SUP top STRUCTURAL + DESC 'Server description (v2.1)' + MUST ( cn ) + MAY ( description $ macAddress )) + +# LogDB Server description +objectclass (1.3.6.1.4.1.10098.1.2.1.28 NAME 'goLogDBServer' SUP top AUXILIARY + DESC 'Log DB server description (v2.2)' + MUST ( cn $ goLogAdmin $ goLogPassword )) + +# Fon Server description +objectclass (1.3.6.1.4.1.10098.1.2.1.29 NAME 'goFonServer' SUP top AUXILIARY + DESC 'Fon server description (v2.2)' + MUST ( cn $ goFonAdmin $ goFonPassword $ goFonAreaCode $ goFonCountryCode ) + MAY ( description )) + diff --git a/contrib/openldap/goto.schema b/contrib/openldap/goto.schema new file mode 100644 index 000000000..daef50db2 --- /dev/null +++ b/contrib/openldap/goto.schema @@ -0,0 +1,361 @@ +## +## +## goto.schema - Needed by the GONICUS Terminal concept +## +## Version 030403 +## +## +## Maintainer: Lars Scheiter (scheiter@GONICUS.de) +## Cajus Pollmeier (pollmeier@GONICUS.de) +## +## +## Requires: gohard.schema + + +# Attributes + +attributetype ( 1.3.6.1.4.1.10098.1.1.1.1 NAME 'gotoSyslogServer' + DESC 'GOto - Gonicus Terminal Concept, value syslogServer.' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE) + +attributetype ( 1.3.6.1.4.1.10098.1.1.1.2 NAME 'gotoNtpServer' + DESC 'GOto - Gonicus Terminal Concept, value ntpServer.' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE) + +attributetype ( 1.3.6.1.4.1.10098.1.1.1.3 NAME 'gotoSwapServer' + DESC 'GOto - Gonicus Terminal Concept, value swapServer.' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE) + +attributetype ( 1.3.6.1.4.1.10098.1.1.1.4 NAME 'gotoLpdServer' + DESC 'GOto - Gonicus Terminal Concept, value lpdServer.' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE) + +attributetype ( 1.3.6.1.4.1.10098.1.1.1.5 NAME 'gotoFontPath' + DESC 'GOto - Gonicus Terminal Concept, value fontPath.' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE) + +attributetype ( 1.3.6.1.4.1.10098.1.1.1.6 NAME 'gotoFilesystem' + DESC 'GOto - Gonicus Terminal Concept, value filesystem.' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +attributetype ( 1.3.6.1.4.1.10098.1.1.1.7 NAME 'gotoFloppyEnable' + DESC 'GOto - Gonicus Terminal Concept, value floppyEnable.' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE) + +attributetype ( 1.3.6.1.4.1.10098.1.1.1.8 NAME 'gotoCdromEnable' + DESC 'GOto - Gonicus Terminal Concept, value cdromEnable.' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE) + +attributetype ( 1.3.6.1.4.1.10098.1.1.1.9 NAME 'gotoLpdEnable' + DESC 'GOto - Gonicus Terminal Concept, value lpdEnable.' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE) + +attributetype ( 1.3.6.1.4.1.10098.1.1.1.10 NAME 'gotoScannerEnable' + DESC 'GOto - Gonicus Terminal Concept, value scannerEnable.' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE) + +attributetype ( 1.3.6.1.4.1.10098.1.1.1.11 NAME 'gotoScannerClients' + DESC 'GOto - Gonicus Terminal Concept, value scannerClients.' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE) + +attributetype ( 1.3.6.1.4.1.10098.1.1.1.14 NAME 'gotoRootPasswd' + DESC 'GOto - Gonicus Terminal Concept, value rootPasswd.' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE) + +attributetype ( 1.3.6.1.4.1.10098.1.1.1.15 NAME 'gotoXdmcpServer' + DESC 'GOto - Gonicus Terminal Concept, value xdmcpServer.' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE) + +attributetype ( 1.3.6.1.4.1.10098.1.1.1.16 NAME 'gotoXMethod' + DESC 'GOto - Gonicus Terminal Concept, value xMethod.' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE) + +attributetype ( 1.3.6.1.4.1.10098.1.1.1.17 NAME 'gotoXMonitor' + DESC 'GOto - Gonicus Terminal Concept, value xMonitor.' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE) + +attributetype ( 1.3.6.1.4.1.10098.1.1.1.18 NAME 'gotoXHsync' + DESC 'GOto - Gonicus Terminal Concept, value xHsync.' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE) + +attributetype ( 1.3.6.1.4.1.10098.1.1.1.19 NAME 'gotoXVsync' + DESC 'GOto - Gonicus Terminal Concept, value xVsync.' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE) + +attributetype ( 1.3.6.1.4.1.10098.1.1.1.20 NAME 'gotoXResolution' + DESC 'GOto - Gonicus Terminal Concept, value xResolution.' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE) + +attributetype ( 1.3.6.1.4.1.10098.1.1.1.21 NAME 'gotoXColordepth' + DESC 'GOto - Gonicus Terminal Concept, value xColordepth.' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE) + +attributetype ( 1.3.6.1.4.1.10098.1.1.1.22 NAME 'gotoXMouseport' + DESC 'GOto - Gonicus Terminal Concept, value xMouseport.' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE) + +attributetype ( 1.3.6.1.4.1.10098.1.1.1.23 NAME 'gotoXMouseButtons' + DESC 'GOto - Gonicus Terminal Concept, value xMouseButtons.' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE) + +attributetype ( 1.3.6.1.4.1.10098.1.1.1.24 NAME 'gotoMode' + DESC 'GOto - Gonicus Terminal Concept, Terminal is active.' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE) + +attributetype ( 1.3.6.1.4.1.10098.1.1.1.25 NAME 'gotoXKbModel' + DESC 'GOto - Gonicus Terminal Concept, value xKbmodel.' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE) + +attributetype ( 1.3.6.1.4.1.10098.1.1.1.26 NAME 'gotoXKbLayout' + DESC 'GOto - Gonicus Terminal Concept, value xKblayout.' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE) + +attributetype ( 1.3.6.1.4.1.10098.1.1.1.27 NAME 'gotoXKbVariant' + DESC 'GOto - Gonicus Terminal Concept, value xKbvariant.' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE) + +attributetype ( 1.3.6.1.4.1.10098.1.1.1.28 NAME 'gotoXDriver' + DESC 'GOto - Gonicus Terminal Concept, value xDriver.' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE) + +attributetype ( 1.3.6.1.4.1.10098.1.1.1.29 NAME 'gotoSndModule' + DESC 'GOto - Gonicus Terminal Concept, value sndModules.' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE) + +attributetype ( 1.3.6.1.4.1.10098.1.1.1.30 NAME 'gotoLastUser' + DESC 'GOto - Gonicus Terminal Concept, value lastUser.' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE) + +attributetype ( 1.3.6.1.4.1.10098.1.1.1.31 NAME 'gotoAutoFs' + DESC 'GOto - Gonicus Terminal Concept, value autofs.' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +attributetype ( 1.3.6.1.4.1.10098.1.1.1.32 NAME 'gotoModules' + DESC 'GOto - Gonicus Terminal Concept, value modules.' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +attributetype ( 1.3.6.1.4.1.10098.1.1.1.33 NAME 'gotoAdaptPath' + DESC 'GOto - Gonicus Terminal Concept, value adaptpath.' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +attributetype ( 1.3.6.1.4.1.10098.1.1.1.34 NAME 'gotoXMouseType' + DESC 'Hardware definitions, value Maustyp' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE) + +attributetype ( 1.3.6.1.4.1.10098.1.1.1.35 NAME 'gotoKernelParameters' + DESC 'Kernel boot parameters' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE) + +attributetype ( 1.3.6.1.4.1.10098.1.1.1.36 NAME 'gotoBootKernel' + DESC 'Kernel boot parameters' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE) + +attributetype ( 1.3.6.1.4.1.10098.1.1.1.37 NAME 'gotoTerminalPath' + DESC 'Kernel boot parameters' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE) + +attributetype ( 1.3.6.1.4.1.10098.1.1.1.38 NAME 'gotoLdapServer' + DESC 'Kernel boot parameters' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE) + +attributetype ( 1.3.6.1.4.1.10098.1.1.1.39 NAME 'gotoScannerBackend' + DESC 'GOto - Gonicus Terminal Concept, value scannerBackend.' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE) + +attributetype ( 1.3.6.1.4.1.10098.1.1.1.40 NAME 'gotoScannerModel' + DESC 'GOto - Gonicus Terminal Concept, value scannerModel.' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE) + +# Attributes for profile installation +attributetype ( 1.3.6.1.4.1.10098.1.1.11.1 NAME 'gotoPackage' + DESC 'GOto - Gonicus Terminal Concept, value package.' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +attributetype ( 1.3.6.1.4.1.10098.1.1.11.2 NAME 'gotoInstURL' + DESC 'GOto - Gonicus Terminal Concept, value insturl.' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) + +attributetype ( 1.3.6.1.4.1.10098.1.1.11.3 NAME 'gotoBaseInstURL' + DESC 'GOto - Gonicus Terminal Concept, value baseinsturl.' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE) + +attributetype ( 1.3.6.1.4.1.10098.1.1.11.4 NAME 'gotoInstSuite' + DESC 'GOto - Gonicus Terminal Concept, value instsuite.' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE) + +attributetype ( 1.3.6.1.4.1.10098.1.1.11.5 NAME 'gotoInstKernelVersion' + DESC 'GOto - Gonicus Terminal Concept, value instkvers.' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE) + +attributetype ( 1.3.6.1.4.1.10098.1.1.11.6 NAME 'gotoPrinterPPD' + DESC 'GOto - Gonicus Terminal Concept, PPD data' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE) + +## +## Objectclasses +## + +# objectclass for the Terminal Conecept +objectclass (1.3.6.1.4.1.10098.1.2.1.1 NAME 'gotoTerminal' + DESC 'GOto - Gonicus Terminal Concept, objectclass (v2.0)' SUP top STRUCTURAL + MUST ( cn ) + MAY ( gotoSyslogServer $ gotoNtpServer $ gotoSwapServer $ gotoLpdServer $ + gotoFontPath $ gotoFilesystem $ gotoFloppyEnable $ gotoCdromEnable $ + gotoLpdEnable $ gotoScannerEnable $ gotoScannerClients $ + gotoRootPasswd $ gotoXdmcpServer $ gotoXMethod $ gotoSndModule $ + gotoLastUser $ gotoXMonitor $ gotoXHsync $ gotoXVsync $ gotoXResolution $ + gotoXColordepth $ gotoXMouseport $ gotoXMouseButtons $ gotoMode $ gotoXKbModel $ + gotoXKbLayout $ gotoXKbVariant $ gotoXDriver $ gotoXMouseType $ macAddress $ + gotoAutoFs $ gotoModules $ gotoAdaptPath $ gotoKernelParameters $ gotoBootKernel $ + gotoTerminalPath $ gotoLdapServer $ gotoScannerModel $ ipHostNumber $ goFonHardware ) ) + + +# Installation profile class +objectclass (1.3.6.1.4.1.10098.1.2.1.18 NAME 'gotoInstallProfile' SUP top STRUCTURAL + DESC 'Terminal Server installation profile (v2.0)' + MUST ( cn $ gotoInsturl $ gotoBaseInsturl $ gotoInstSuite $ gotoInstKernelVersion $ + gotoPackage )) + +# objectclass for the Terminal Conecept +objectclass (1.3.6.1.4.1.10098.1.2.1.30 NAME 'gotoWorkstation' + DESC 'GOto - Gonicus Terminal Concept, objectclass (v2.3)' SUP top STRUCTURAL + MUST ( cn ) + MAY ( gotoSyslogServer $ gotoNtpServer $ gotoSwapServer $ gotoLpdServer $ + gotoFontPath $ gotoFilesystem $ gotoFloppyEnable $ gotoCdromEnable $ + gotoLpdEnable $ gotoScannerEnable $ gotoScannerClients $ + gotoRootPasswd $ gotoXdmcpServer $ gotoXMethod $ gotoSndModule $ + gotoLastUser $ gotoXMonitor $ gotoXHsync $ gotoXVsync $ gotoXResolution $ + gotoXColordepth $ gotoXMouseport $ gotoXMouseButtons $ gotoMode $ gotoXKbModel $ + gotoXKbLayout $ gotoXKbVariant $ gotoXDriver $ gotoXMouseType $ macAddress $ + gotoAutoFs $ gotoModules $ gotoAdaptPath $ gotoKernelParameters $ gotoBootKernel $ + gotoTerminalPath $ gotoLdapServer $ gotoScannerModel $ ipHostNumber $ goFonHardware ) ) + +# objectclass for the Terminal Conecept +objectclass (1.3.6.1.4.1.10098.1.2.1.31 NAME 'gotoPrinter' + DESC 'GOto - Gonicus Terminal Concept, objectclass (v2.2)' SUP top STRUCTURAL + MUST ( cn ) + MAY ( labeledURI $ description $ l $ gotoPrinterPPD $ macAddress $ ipHostNumber ) ) + + diff --git a/contrib/openldap/kolab2.schema b/contrib/openldap/kolab2.schema new file mode 100644 index 000000000..d4f9633e3 --- /dev/null +++ b/contrib/openldap/kolab2.schema @@ -0,0 +1,423 @@ +# $Id: kolab2.schema,v 1.5 2005/03/18 00:29:24 martin Exp $ +# (c) 2003, 2004 Tassilo Erlewein +# (c) 2003, 2004 Martin Konold +# (c) 2003 Achim Frank +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# The name of the author may not be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED +# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# This schema highly depends on the core.schema, cosine.schema and the inetorgperson.schema +# as provided by 3rd parties like OpenLDAP. +# +# slapd.conf then looks like +# include /kolab/etc/openldap/schema/core.schema +# include /kolab/etc/openldap/schema/cosine.schema +# include /kolab/local/etc/openldap/schema/inetorgperson.schema +# include /kolab/local/etc/openldap/schema/kolab2.schema + +# +#################### +# kolab attributes # +#################### + +# helper attribute to make the kolab root easily findable in +# a big ldap directory +attributetype ( 1.3.6.1.4.1.19414.2.1.1 + NAME ( 'k' 'kolab' ) + DESC 'Kolab attribute' + SUP name ) + +# kolabDeleteflag used to be a boolean but describes with Kolab 2 +# the fqdn of the server which is requested to delete this objects +# in its local store +attributetype ( 1.3.6.1.4.1.19414.2.1.2 + NAME 'kolabDeleteflag' + DESC 'Per host deletion status' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} ) + +# alias used to provide alternative rfc822 email addresses for kolab users +attributetype ( 1.3.6.1.4.1.19414.2.1.3 + NAME 'alias' + DESC 'RFC1274: RFC822 Mailbox' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} ) + +# kolabEncryptedPassword is an asymmetrically (RSA) encrypted copy of the +# cleartext password. This is required in order to pass the password from +# the maintainance/administration application to the kolabHomeServer running the +# resource handler application in a secure maner +attributetype ( 1.3.6.1.4.1.19419.2.1.4 + NAME 'kolabEncryptedPassword' + DESC 'base64 encoded public key encrypted Password' + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + +# hostname including the domain name like kolab-master.bsi.de +attributetype ( 1.3.6.1.4.1.19414.2.1.5 + NAME ( 'fqhostname' 'fqdnhostname' ) + DESC 'Fully qualified Hostname including full domain component' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} ) + +# fqdn of all hosts in a multi-location setup +attributetype ( 1.3.6.1.4.1.19414.2.1.6 + NAME 'kolabHost' + DESC 'Multivalued -- list of hostnames in a Kolab setup' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} ) + +# fqdn of the server containg the actual user data +attributetype ( 1.3.6.1.4.1.19419.1.1.1.1 + NAME 'kolabHomeServer' + DESC 'server which keeps the users mailbox' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} ) + +# flag for allowing unrestriced length of mails +attributetype ( 1.3.6.1.4.1.19419.1.1.1.2 + NAME 'unrestrictedMailSize' + EQUALITY booleanMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 ) + +# allow delegates to act in your name (vacation/secretary boss use case) +# we use the syntax of rfc822 email addresses in order identify +# users allow to act in the name of others +attributetype ( 1.3.6.1.4.1.19419.1.1.1.3 + NAME 'kolabDelegate' + DESC 'Kolab user allowed to act as delegates - RFC822 Mailbox/Alias' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} ) + +# For user, group and resource Kolab accounts +# Describes how to respond to invitations +# We keep the attribute as a string, but actually it can only have one +# of the following values: +# +# ACT_ALWAYS_ACCEPT +# ACT_ALWAYS_REJECT +# ACT_REJECT_IF_CONFLICTS +# ACT_MANUAL_IF_CONFLICTS +# ACT_MANUAL +# In addition one of these values may be prefixed with a primary email +# address followed by a colon like +# user@domain.tld: ACT_ALWAYS_ACCEPT +attributetype ( 1.3.6.1.4.1.19419.1.1.1.4 + NAME ( 'kolabInvitationPolicy' 'kolabResourceAction' ) + DESC 'Used by user, group and resource accounts to determine how to respond to invitations' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} ) + +# time span from now to the future used for the free busy data +# measured in days +attributetype ( 1.3.6.1.4.1.19419.1.1.1.5 + NAME 'kolabFreeBusyFuture' + DESC 'time in days for fb data towards the future' + EQUALITY integerMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 ) + +# time span from now to the past used for the free busy data +# measured in days +attributetype ( 1.3.6.1.4.1.19419.1.1.1.6 + NAME 'kolabFreeBusyPast' + DESC 'time in days for fb data towards the past' + EQUALITY integerMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 ) + +# fqdn of the server as the default SMTP MTA +# not used in Kolab 2 currently as in Kolab 2 the +# default MTA is equivalent to the kolabHomeServer +attributetype ( 1.3.6.1.4.1.19419.1.1.1.7 + NAME 'kolabHomeMTA' + DESC 'fqdn of default MTA' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} ) + +###################### +# postfix attributes # +###################### + +attributetype ( 1.3.6.1.4.1.19414.2.1.501 + NAME 'postfix-mydomain' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} ) + +attributetype ( 1.3.6.1.4.1.19414.2.1.502 + NAME 'postfix-relaydomains' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} ) + +attributetype ( 1.3.6.1.4.1.19414.2.1.503 + NAME 'postfix-mydestination' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} ) + +attributetype ( 1.3.6.1.4.1.19414.2.1.504 + NAME 'postfix-mynetworks' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} ) + +attributetype ( 1.3.6.1.4.1.19414.2.1.505 + NAME 'postfix-relayhost' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} ) + +attributetype ( 1.3.6.1.4.1.19414.2.1.506 + NAME 'postfix-transport' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} ) + +attributetype ( 1.3.6.1.4.1.19414.2.1.507 + NAME 'postfix-enable-virus-scan' + EQUALITY booleanMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 ) + +attributetype ( 1.3.6.1.4.1.19414.2.1.508 + NAME 'postfix-allow-unauthenticated' + EQUALITY booleanMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 ) + +########################## +# cyrus imapd attributes # +########################## + +attributetype ( 1.3.6.1.4.1.19414.2.1.601 + NAME 'cyrus-autocreatequota' + EQUALITY integerMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 ) + +attributetype ( 1.3.6.1.4.1.19414.2.1.602 + NAME 'cyrus-admins' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} ) + +# enable plain imap without ssl +attributetype ( 1.3.6.1.4.1.19414.2.1.603 + NAME 'cyrus-imap' + EQUALITY booleanMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 ) + +# enable legacy pop3 +attributetype ( 1.3.6.1.4.1.19414.2.1.604 + NAME 'cyrus-pop3' + EQUALITY booleanMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 ) + +# user specific quota on the cyrus imap server +attributetype ( 1.3.6.1.4.1.19414.2.1.605 + NAME 'cyrus-userquota' + DESC 'Mailbox hard quota limit in MB' + EQUALITY integerMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 ) + +# cyrus imapd access control list +# acls work with users and groups +attributetype ( 1.3.6.1.4.1.19414.2.1.651 + NAME 'acl' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} ) + +# enable secure imap +attributetype ( 1.3.6.1.4.1.19414.2.1.606 + NAME 'cyrus-imaps' + EQUALITY booleanMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 ) + +# enable secure pop3 +attributetype ( 1.3.6.1.4.1.19414.2.1.607 + NAME 'cyrus-pop3s' + EQUALITY booleanMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 ) + +# enable sieve support (required for forward and vacation services) +attributetype ( 1.3.6.1.4.1.19414.2.1.608 + NAME 'cyrus-sieve' + EQUALITY booleanMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 ) + +# installation wide percentage which determines when to send a +# warning to the user +attributetype ( 1.3.6.1.4.1.19414.2.1.609 + NAME 'cyrus-quotawarn' + EQUALITY integerMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 ) + +############################# +# apache and php attributes # +############################# + +# enable plain http (no ssl) +attributetype ( 1.3.6.1.4.1.19414.2.1.701 + NAME 'apache-http' + EQUALITY booleanMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 ) + +# Allow freebusy download without authenticating first +attributetype ( 1.3.6.1.4.1.19414.2.1.702 + NAME 'apache-allow-unauthenticated-fb' + EQUALITY booleanMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 ) + +###################### +# proftpd attributes # +###################### + +attributetype ( 1.3.6.1.4.1.19414.2.1.901 + NAME 'proftpd-defaultquota' + EQUALITY integerMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 ) + +attributetype ( 1.3.6.1.4.1.19414.2.1.902 + NAME 'proftpd-ftp' + EQUALITY booleanMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 ) + +attributetype ( 1.3.6.1.4.1.19414.2.1.903 + NAME 'proftpd-userPassword' + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + +######################## +# kolab object classes # +######################## + +# main kolab server configuration +# storing global values and user specific default values +# like kolabFreeBusyFuture and kolabFreeBusyPast +objectclass ( 1.3.6.1.4.1.19414.2.2.1 + NAME 'kolab' + DESC 'Kolab server configuration' + SUP top STRUCTURAL + MUST k + MAY ( kolabHost $ + postfix-mydomain $ + postfix-relaydomains $ + postfix-mydestination $ + postfix-mynetworks $ + postfix-relayhost $ + postfix-transport $ + postfix-enable-virus-scan $ + postfix-allow-unauthenticated $ + cyrus-autocreatequota $ + cyrus-quotawarn $ + cyrus-autocreatequota $ + cyrus-admins $ + cyrus-imap $ + cyrus-pop3 $ + cyrus-imaps $ + cyrus-pop3s $ + cyrus-sieve $ + apache-http $ + apache-allow-unauthenticated-fb $ + proftpd-ftp $ + proftpd-defaultquota $ + kolabFreeBusyFuture $ + kolabFreeBusyPast $ + uid $ + userPassword ) ) + +# shared folders are typically visible to everyone subscribed to +# the server without the need for an extra login +objectclass ( 1.3.6.1.4.1.19414.2.2.9 + NAME 'kolabSharedFolder' + DESC 'Kolab public shared folder' + SUP top STRUCTURAL + MUST cn + MAY ( acl $ + cyrus-userquota $ + kolabHomeServer $ + kolabDeleteflag ) ) + +# used as a plain node for the LDAP tree. In contrast to unix filesystem directories +# LDAP nodes can and often do also have contents/attributes. We use kolabNamedObject +# in order to put more structure in the directory tree. +objectclass ( 1.3.6.1.4.1.5322.13.1.1 + NAME 'kolabNamedObject' + SUP top STRUCTURAL + MAY (cn $ ou) ) + +# kolab account +# we use an auxiliary in order to ease integration +# with existing inetOrgPerson objects +# Please note that userPassword is a may +# attribute in the schema but is mandatory for +# Kolab +objectclass ( 1.3.6.1.4.1.19414.3.2.2 + NAME 'kolabInetOrgPerson' + DESC 'Kolab Internet Organizational Person' + SUP top AUXILIARY + MAY ( c $ + alias $ + kolabHomeServer $ + kolabHomeMTA $ + unrestrictedMailSize $ + kolabDelegate $ + kolabEncryptedPassword $ + cyrus-userquota $ + kolabInvitationPolicy $ + kolabFreeBusyFuture $ + calFBURL $ + kolabDeleteflag ) ) + +# kolab organization with country support +objectclass ( 1.3.6.1.4.1.19414.3.2.3 + NAME 'kolabOrganization' + DESC 'RFC2256: a Kolab organization' + SUP organization STRUCTURAL + MAY ( c $ + mail $ + kolabDeleteflag $ + alias ) ) + +# kolab organizational unit with country support +objectclass ( 1.3.6.1.4.1.19414.3.2.4 + NAME 'kolabOrganizationalUnit' + DESC 'a Kolab organizational unit' + SUP organizationalUnit STRUCTURAL + MAY ( c $ + mail $ + kolabDeleteflag $ + alias ) ) + +# kolab groupOfNames with extra kolabDeleteflag +objectclass ( 1.3.6.1.4.1.19414.3.2.5 + NAME 'kolabGroupOfNames' + DESC 'Kolab group of names (DNs) derived from RFC2256' + SUP groupOfNames STRUCTURAL + MAY kolabDeleteflag ) diff --git a/contrib/openldap/openxchange.schema b/contrib/openldap/openxchange.schema new file mode 100644 index 000000000..e32e837d4 --- /dev/null +++ b/contrib/openldap/openxchange.schema @@ -0,0 +1,714 @@ +# +# OPEN X CHANGE ORG - SCHEMA 0.1 +# +attributetype ( 1.1.2.1.1.1 NAME ( 'mailEnabled' ) + DESC 'Is the user enabled or not, for pam_ldap,postfix etc. filtering...' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} SINGLE-VALUE ) + +attributetype ( 1.1.2.1.1.2 NAME ( 'alias' ) + DESC 'email alias' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} ) + +attributetype ( 1.1.2.1.1.3 NAME ( 'imapServer' ) + DESC 'Users Imap Server' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} SINGLE-VALUE ) + +attributetype ( 1.1.2.1.1.4 NAME ( 'imapPort' ) + DESC 'Users Imap Server Port' + SUP ipServicePort ) + +attributetype ( 1.1.2.1.1.5 NAME ( 'sievePort' ) + DESC 'Users SIEVE Server Port' + SUP ipServicePort ) + +attributetype ( 1.1.2.1.1.6 NAME ( 'smtpServer' ) + DESC 'Users SMTP Server' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} SINGLE-VALUE ) + +attributetype ( 1.1.2.1.1.7 NAME ( 'smtpPort' ) + DESC 'Users SMTP Server Port' + SUP ipServicePort ) + +attributetype ( 1.1.2.1.1.8 NAME ( 'relClientCert' ) + DESC 'Users Certificate for Ip Service like SMTP or IMAP' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} SINGLE-VALUE ) + +attributetype ( 1.1.2.1.1.9 NAME ( 'userCountry' ) + DESC 'Users country code' + SUP name SINGLE-VALUE ) + +attributetype ( 1.1.2.1.1.10 NAME ( 'loginDestination' ) + DESC 'Users Destination - Groupware , Webmail, Config ...' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + +attributetype ( 1.1.2.1.1.11 NAME ( 'birthDay' ) + DESC 'Users birthday' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + +attributetype ( 1.1.2.1.1.12 NAME ( 'colocRouteAddr' ) + DESC 'route mail to this address' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} SINGLE-VALUE ) + +attributetype ( 1.1.2.1.1.13 NAME ( 'reject' ) + DESC 'Should contain the mailaddys to reject' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} ) + +attributetype ( 1.1.2.1.1.14 NAME ( 'lnetMailAccess' ) + DESC 'Is the user able to send mail to the inet' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} SINGLE-VALUE ) + +attributetype ( 1.1.2.1.1.15 NAME ( 'OXGroupwareStyle' ) + DESC 'Groupware Style' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} SINGLE-VALUE ) + +attributetype ( 1.1.2.1.1.16 NAME ( 'OXWebmailStyle' ) + DESC 'Webmail Style' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} SINGLE-VALUE ) + +attributetype ( 1.1.2.1.1.17 NAME 'OXGroupID' + DESC 'GIDs of the secondary Groups of the User' + EQUALITY integerMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.27) + +attributetype ( 1.1.2.1.1.18 NAME ( 'OXAppointmentDays' ) + DESC 'Days to display new appointments' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE ) + + +attributetype ( 1.1.2.1.1.19 NAME ( 'OXTaskDays' ) + DESC 'Days to display new tasks' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE ) + +attributetype ( 1.1.2.1.1.20 NAME ( 'OXTimeZone' ) + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} SINGLE-VALUE ) + +attributetype ( 1.1.2.1.1.21 NAME ( 'groupwareServer' ) + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} SINGLE-VALUE ) + +attributetype ( 1.1.2.1.1.22 NAME ( 'groupwareServerPort' ) + SUP ipServicePort ) + +attributetype ( 1.1.2.1.1.23 NAME ( 'webmailServer' ) + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} SINGLE-VALUE ) + +attributetype ( 1.1.2.1.1.24 NAME ( 'webmailServerPort' ) + SUP ipServicePort ) + +attributetype ( 1.1.2.1.1.25 NAME ( 'DBServer' ) + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} SINGLE-VALUE ) + +attributetype ( 1.1.2.1.1.26 NAME ( 'DBServerPort' ) + SUP ipServicePort SINGLE-VALUE ) + +attributetype ( 1.1.2.1.1.27 NAME ( 'DBServerType' ) + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} SINGLE-VALUE ) + +attributetype ( 1.1.2.1.1.29 NAME ( 'resourceGroupName' ) + SUP name SINGLE-VALUE ) + +attributetype ( 1.1.2.1.1.30 NAME ( 'resourceGroupMember' ) + DESC 'resource that is member of a resource group' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} ) + +attributetype ( 1.1.2.1.1.31 NAME ( 'resourceGroupAvailable' ) + DESC 'Ressource group available in OX' + EQUALITY booleanMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 SINGLE-VALUE ) + +attributetype ( 1.1.2.1.1.32 NAME ( 'resourceGroupDescription' ) + SUP description SINGLE-VALUE ) + +attributetype ( 1.1.2.1.1.33 NAME ( 'resourceName' ) + SUP name SINGLE-VALUE ) + +attributetype ( 1.1.2.1.1.34 NAME ( 'resourceAvailable' ) + DESC 'Ressource available in OX' + EQUALITY booleanMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 SINGLE-VALUE ) + +attributetype ( 1.1.2.1.1.35 NAME ( 'resourceDescription' ) + SUP description SINGLE-VALUE ) + +attributetype ( 1.1.2.1.1.36 NAME ( 'mailDomain' ) + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} SINGLE-VALUE ) + +attributetype ( 1.1.2.1.1.37 NAME ( 'vaddress' ) + DESC 'vadress' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} ) + +attributetype ( 1.1.2.1.1.38 NAME ( 'MTALocaldomain' ) + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} SINGLE-VALUE ) + +attributetype ( 1.1.2.1.1.39 NAME ( 'mailDeliveryProgram' ) + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} ) + +attributetype ( 1.1.2.1.1.40 NAME ( 'deliverToUID' ) + DESC 'direct mail delivery' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} ) + +attributetype ( 1.1.2.1.1.41 NAME ( 'fn' ) SUP name ) + +attributetype ( 1.1.2.1.1.42 NAME ( 'smtpDomainTransportNexthop' ) + DESC 'contain transport:[nexthop] mail routing information' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} SINGLE-VALUE ) + +attributetype ( 1.1.2.1.1.43 NAME ( 'smtpDomain' ) + DESC 'contain host/domain name, used with smtpDomainTransportNexthop' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} ) + + + +########### Special Attributes for new Contact Handling (OL) ############################### + +attributetype ( 1.1.2.1.1.44 NAME ( 'IPPhone' ) + DESC 'User IPPhone Address in Outlook' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + + +attributetype ( 1.1.2.1.1.45 NAME ( 'url' ) + DESC 'Users business Homepage' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + +attributetype ( 1.1.2.1.1.46 NAME ( 'otherpager' ) + DESC 'Users Business pager' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + +attributetype ( 1.1.2.1.1.47 NAME ( 'otherfacsimiletelephonenumber' ) + DESC 'Users Home fax number' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + + +attributetype ( 1.1.2.1.1.48 NAME ( 'middleName' ) + DESC 'Users middlename' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + +attributetype ( 1.1.2.1.1.49 NAME ( 'conferenceInformation' ) + DESC 'Users n3tmeeting Info' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + +########### END - Special Attributes for new Contact Handling (OL) ############################### + +########### Special Attributes for new Contact Handling (OX) ############################## + +attributetype ( 1.1.2.1.1.50 NAME ( 'OXUserPosition' ) + DESC 'Users position' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + +attributetype ( 1.1.2.1.1.51 NAME ( 'OXUserSalesVolume' ) + DESC 'Users sales volume' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + + +attributetype ( 1.1.2.1.1.52 NAME ( 'OXUserCity' ) + DESC 'Users City' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + + +attributetype ( 1.1.2.1.1.53 NAME ( 'OXUserTaxID' ) + DESC 'Users Tax ID' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + + +attributetype ( 1.1.2.1.1.54 NAME ( 'OXUserComReg' ) + DESC 'Users Commercial Register' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + + +attributetype ( 1.1.2.1.1.55 NAME ( 'OXUserBranches' ) + DESC 'Users Branches' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + + +attributetype ( 1.1.2.1.1.56 NAME ( 'OXUserAssistant' ) + DESC 'Users Assistant' + SUP manager ) + +attributetype ( 1.1.2.1.1.57 NAME ( 'OXUserCategories' ) + DESC 'Users Categories' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + +attributetype ( 1.1.2.1.1.58 NAME ( 'OXUserOtherStreet' ) + DESC 'Users alternative Street' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + + +attributetype ( 1.1.2.1.1.59 NAME ( 'OXUserOtherPostalCode' ) + DESC 'Users alternative postal code' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + +attributetype ( 1.1.2.1.1.60 NAME ( 'OXUserOtherCity' ) + DESC 'Users alternative city' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + +attributetype ( 1.1.2.1.1.61 NAME ( 'OXUserOtherState' ) + DESC 'Users alternative State' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + + +attributetype ( 1.1.2.1.1.62 NAME ( 'OXUserOtherCountry' ) + DESC 'Users alternative Country' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + +attributetype ( 1.1.2.1.1.63 NAME ( 'OXUserTeleAssistant' ) + DESC 'Users Assistant TelephoneNumber' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + + +attributetype ( 1.1.2.1.1.64 NAME ( 'OXUserTeleBusiness2' ) + DESC 'Users alternative business phone number' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + + +attributetype ( 1.1.2.1.1.65 NAME ( 'OXUserTeleCallback' ) + DESC 'Users Callback' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + + +attributetype ( 1.1.2.1.1.66 NAME ( 'OXUserTeleCar' ) + DESC 'Users Car Phone Number' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + +attributetype ( 1.1.2.1.1.67 NAME ( 'OXUserTeleCompany' ) + DESC 'Users Company Phone' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + +attributetype ( 1.1.2.1.1.68 NAME ( 'OXUserTeleHome2' ) + DESC 'Users 2nd. Home Phone ' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + +attributetype ( 1.1.2.1.1.69 NAME ( 'OXUserTeleMobile2' ) + DESC 'Users 2nd mobile number' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + +attributetype ( 1.1.2.1.1.70 NAME ( 'OXUserTeleOther' ) + DESC 'Users other Phone' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + +attributetype ( 1.1.2.1.1.71 NAME ( 'OXUserTeleFax2' ) + DESC 'Users 2nd Telefax Number' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + +attributetype ( 1.1.2.1.1.72 NAME ( 'OXUserTelePrimary' ) + DESC 'Users primary Phone' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + +attributetype ( 1.1.2.1.1.73 NAME ( 'OXUserTeleRadio' ) + DESC 'Users Radio' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + +attributetype ( 1.1.2.1.1.74 NAME ( 'OXUserTeleTTY' ) + DESC 'Users TTY/tdd ' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + +attributetype ( 1.1.2.1.1.75 NAME ( 'OXUserInstantMessenger' ) + DESC 'Users IM' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + +attributetype ( 1.1.2.1.1.76 NAME ( 'OXUserInstantmessenger2' ) + DESC 'Users 2nd IM' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + +attributetype ( 1.1.2.1.1.77 NAME ( 'OXUserEmail2' ) + DESC 'Users 2nd Email' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + +attributetype ( 1.1.2.1.1.78 NAME ( 'OXUserEmail3' ) + DESC 'Users 3rd Email' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + +attributetype ( 1.1.2.1.1.79 NAME ( 'OXUserUserUndef01' ) + DESC 'Users custom field 01' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + +attributetype ( 1.1.2.1.1.80 NAME ( 'OXUserUserUndef02' ) + DESC 'Users custom field 02' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + +attributetype ( 1.1.2.1.1.81 NAME ( 'OXUserUserUndef03' ) + DESC 'Users custom field 03' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + +attributetype ( 1.1.2.1.1.82 NAME ( 'OXUserUserUndef04' ) + DESC 'Users custom field 04' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + +attributetype ( 1.1.2.1.1.83 NAME ( 'OXUserUserUndef05' ) + DESC 'Users custom field 05' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + +attributetype ( 1.1.2.1.1.84 NAME ( 'OXUserUserUndef06' ) + DESC 'Users custom field 06' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + +attributetype ( 1.1.2.1.1.85 NAME ( 'OXUserUserUndef07' ) + DESC 'Users custom field 07' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + +attributetype ( 1.1.2.1.1.86 NAME ( 'OXUserUserUndef08' ) + DESC 'Users custom field 08' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + +attributetype ( 1.1.2.1.1.87 NAME ( 'OXUserUserUndef09' ) + DESC 'Users custom field 09' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + +attributetype ( 1.1.2.1.1.88 NAME ( 'OXUserUserUndef10' ) + DESC 'Users custom field 10' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + +attributetype ( 1.1.2.1.1.89 NAME ( 'OXUserUserUndef11' ) + DESC 'Users custom field 11' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + +attributetype ( 1.1.2.1.1.90 NAME ( 'OXUserUserUndef12' ) + DESC 'Users custom field 12' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + +attributetype ( 1.1.2.1.1.91 NAME ( 'OXUserUserUndef13' ) + DESC 'Users custom field 13' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + +attributetype ( 1.1.2.1.1.92 NAME ( 'OXUserUserUndef14' ) + DESC 'Users custom field 14' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + +attributetype ( 1.1.2.1.1.93 NAME ( 'OXUserUserUndef15' ) + DESC 'Users custom field 15' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + +attributetype ( 1.1.2.1.1.94 NAME ( 'OXUserUserUndef16' ) + DESC 'Users custom field 16' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + +attributetype ( 1.1.2.1.1.95 NAME ( 'OXUserUserUndef17' ) + DESC 'Users custom field 17' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + +attributetype ( 1.1.2.1.1.96 NAME ( 'OXUserUserUndef18' ) + DESC 'Users custom field 18' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + +attributetype ( 1.1.2.1.1.97 NAME ( 'OXUserUserUndef19' ) + DESC 'Users custom field 19' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + +attributetype ( 1.1.2.1.1.98 NAME ( 'OXUserUserUndef20' ) + DESC 'Users custom field 20' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + +attributetype ( 1.1.2.1.1.99 NAME ( 'OXUserSuffix' ) + DESC 'Users Suffix Name' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + +attributetype ( 1.1.2.1.1.100 NAME ( 'OXUserPostalCode' ) + DESC 'Users Postal Code address' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + +attributetype ( 1.1.2.1.1.101 NAME ( 'OXUserState' ) + DESC 'Users State Name' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + +attributetype ( 1.1.2.1.1.102 NAME ( 'OXUserMaritalStatus' ) + DESC 'Users marital status' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + +attributetype ( 1.1.2.1.1.103 NAME ( 'OXUserChildren' ) + DESC 'The number of users children ' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + + +attributetype ( 1.1.2.1.1.104 NAME ( 'OXUserProfession' ) + DESC 'The Users profession' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + +attributetype ( 1.1.2.1.1.105 NAME ( 'OXUserNickName' ) + DESC 'Users Nick Name' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + +attributetype ( 1.1.2.1.1.106 NAME ( 'OXUserSpouseName' ) + DESC 'Users Spouse Name' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + +attributetype ( 1.1.2.1.1.107 NAME ( 'OXUserAnniversary' ) + DESC 'Any user anniversary' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + +attributetype ( 1.1.2.1.1.108 NAME ( 'OXUserComment' ) + DESC 'A comment about the Users' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + +attributetype ( 1.1.2.1.1.109 NAME ( 'OXUserDistributionList' ) + DESC 'uid for the distribution List in the Databse' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + + +########### ADDED FOR OX GROUPWARE DAYVIEW ############ +attributetype ( 1.1.2.1.1.110 NAME ( 'OXDayviewInterval' ) + DESC 'interval for displaying ox appointments on the dayview' + EQUALITY integerMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) + +attributetype ( 1.1.2.1.1.111 NAME ( 'OXDayviewStartTime' ) + DESC 'starttime for displaying ox appointments on the dayview' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + +attributetype ( 1.1.2.1.1.112 NAME ( 'OXDayviewEndTime' ) + DESC 'endtime for displaying ox appointments on the dayview' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) +####################################################### + + +### ADDED FOR VDOMAINOBJECT ### + +attributetype ( 1.1.2.1.1.113 NAME ( 'domainName' ) + DESC 'The name of domain' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} ) + +############################### + + + +######################################################################### + + + +# +# Here we go with the OX Objects ... +# + +objectclass ( 1.1.2.2.1.1 NAME 'OXUserObject' SUP top AUXILIARY + DESC 'Additional Objectclass for OX User' + MAY ( alias $ imapServer $ imapPort $ sievePort $ mailDomain $ smtpServer $ smtpPort $ + groupwareServer $ groupwareServerPort $ webmailServer $ webmailServerPort $ + DBServer $ DBServerPort $ DBServerType $ reject $ relClientCert $ userCountry $ + loginDestination $ birthDay $ colocRouteAddr $ mailEnabled $ lnetMailAccess $ vaddress $ + IPPhone $ url $ otherpager $ otherfacsimiletelephonenumber $ homephone $ + c $ info $ middleName $ co $ conferenceInformation $ telexNumber $ + OXGroupwareStyle $ OXWebmailStyle $ OXGroupID $ OXAppointmentDays $ OXTaskDays $ OXDayViewInterval $ OXDayViewStartTime $ OXDayViewEndTime $ OXTimeZone $ + OXUserSuffix $ OXUserPostalCode $ OXUserCity $ OXUserState $ OXUserMaritalStatus $ OXUserChildren $ OXUserProfession $ + OXUserNickName $ OXUserSpouseName $ OXUserAnniversary $ OXUserComment $ + OXUserPosition $ OXUserSalesVolume $ OXUserTaxID $ OXUserComReg $ OXUserBranches $ + OXUserAssistant $ OXUserCategories $ OXUserOtherStreet $ OXUserOtherPostalCode $ OXUserOtherCity $ + OXUserOtherState $ OXUserOtherCountry $ OXUserTeleAssistant $ OXUserTeleBusiness2 $ OXUserTeleCallback $ + OXUserTeleCar $ OXUserTeleCompany $ OXUserTeleHome2 $ OXUserTeleMobile2 $ OXUserTeleOther $ OXUserTeleFax2 $ + OXUserTelePrimary $ OXUserTeleRadio $ OXUserTeleTTY $ OXUserInstantMessenger $ OXUserInstantmessenger2 $ + OXUserEmail2 $ OXUserEmail3 $ OXUserUserUndef01 $ OXUserUserUndef02 $ OXUserUserUndef03 $ OXUserUserUndef04 $ + OXUserUserUndef05 $ OXUserUserUndef06 $ OXUserUserUndef07 $ OXUserUserUndef08 $ OXUserUserUndef09 $ + OXUserUserUndef10 $ OXUserUserUndef11 $ OXUserUserUndef12 $ OXUserUserUndef13 $ OXUserUserUndef14 $ + OXUserUserUndef15 $ OXUserUserUndef16 $ OXUserUserUndef17 $ OXUserUserUndef18 $ OXUserUserUndef19 $ + OXUserUserUndef20 $ OXUserDistributionList + )) + +objectclass ( 1.1.2.2.1.2 NAME 'OXResourceGroupObject' SUP top STRUCTURAL + DESC 'Additional Objectclass for OX ResourceGroup' + MAY ( resourceGroupName $ resourceGroupMember $ resourceGroupAvailable $ resourceGroupDescription )) + + +objectclass ( 1.1.2.2.1.3 NAME 'OXResourceObject' SUP top STRUCTURAL + DESC 'Additional Objectclass for OX Resource' + MAY ( resourceName $ resourceAvailable $ resourceDescription )) + +objectclass ( 1.1.2.2.1.4 NAME 'OXVDomainObject' SUP top STRUCTURAL + DESC 'virtual domains, can be used for lookups for MTA' + MUST ( MTALocaldomain $ domainName )) + +objectclass ( 1.1.2.2.1.5 NAME 'OXIMAPFolderObject' SUP top STRUCTURAL + DESC 'Shared IMAP Folder' + MUST fn + MAY ( mailDeliveryProgram $ description $ mailEnabled $ + deliverToUID)) + +objectclass ( 1.1.2.2.1.6 NAME 'OXMailTransportObject' SUP top STRUCTURAL + DESC 'Transport maps in LDAP' + MUST ( smtpDomainTransportNexthop $ smtpDomain $ cn ) + MAY description ) diff --git a/contrib/openldap/phpgwaccount.schema b/contrib/openldap/phpgwaccount.schema new file mode 100644 index 000000000..3edd26394 --- /dev/null +++ b/contrib/openldap/phpgwaccount.schema @@ -0,0 +1,79 @@ +# $Id egroupware : phpgwaccount.schema,v 1.0 2000/07/29 01:53:16 milosch Exp $ + +# (C) 2001-2004 Miles Lott +# Redistribution and use in original text and binary forms, with or +# without modification, are permitted provided that the following +# conditions are met: +# +# 1. Redistributions of this schema and/or documentation must retain +# the above copyright notice, this list of conditions and the +# following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# 3. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, +# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING +# IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. + +# lastlogin +attributetype ( 1.3.6.1.4.1.9554.1 + NAME 'phpgwAccountLastLogin' + DESC 'timestamp of last login' + EQUALITY integerMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 + SINGLE-VALUE ) + +# lastloginfrom +attributetype ( 1.3.6.1.4.1.9554.2 + NAME 'phpgwAccountLastLoginFrom' + DESC 'IP address as a dotted decimal, eg. 192.168.1.1, omitting leading zeros' + EQUALITY caseIgnoreIA5Match + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{128} ) + +# lastpasswdchange +attributetype ( 1.3.6.1.4.1.9554.3 + NAME 'phpgwLastPasswdChange' + EQUALITY integerMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 + SINGLE-VALUE ) + +# accounttype +attributetype ( 1.3.6.1.4.1.9554.4 + NAME 'phpgwAccountType' + DESC 'Single-char u/g for user/group' + EQUALITY caseExactIA5Match + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE ) + +# status +attributetype ( 1.3.6.1.4.1.9554.5 + NAME 'phpgwAccountStatus' + DESC 'Single-char A/L for active/inactive' + EQUALITY caseExactIA5Match + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + SINGLE-VALUE ) + +# expires +attributetype ( 1.3.6.1.4.1.9554.6 + NAME 'phpgwAccountExpires' + DESC 'timestamp for account expiration' + EQUALITY integerMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 + SINGLE-VALUE ) + +# Objectclass definition for phpgwAccount +objectclass ( 1.3.6.1.4.1.9554.0 NAME 'phpgwAccount' SUP top AUXILIARY + DESC 'Abstraction of an account with phpgw attributes' + MAY ( phpgwAccountLastLogin $ phpgwAccountLastLoginFrom $ phpgwLastPasswdChange $ phpgwAccountType $ phpgwAccountStatus $ phpgwAccountExpires) ) + diff --git a/contrib/openldap/pureftpd.schema b/contrib/openldap/pureftpd.schema new file mode 100644 index 000000000..1cf95ea8b --- /dev/null +++ b/contrib/openldap/pureftpd.schema @@ -0,0 +1,64 @@ +# $Id: pureftpd.schema,v 1.2 2004/02/04 15:25:01 cajus Exp $ +# +# pureftpd.schema +# +# Pure-FTPd User LDAP Schema +# See README.LDAP in the Pure-FTPd documentation for more information. +# +# Written 2002-01-24 by Ben Gertzfield +# + +## Pure-FTPd-related LDAP attributes + +attributetype ( 1.3.6.1.4.1.6981.11.3.1 NAME 'FTPQuotaFiles' + DESC 'Quota (in number of files) for an FTP user' + EQUALITY integerMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) + +attributetype ( 1.3.6.1.4.1.6981.11.3.2 NAME 'FTPQuotaMBytes' + DESC 'Quota (in megabytes) for an FTP user' + EQUALITY integerMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) + +attributetype ( 1.3.6.1.4.1.6981.11.3.3 NAME 'FTPUploadRatio' + DESC 'Ratio (compared with FTPRatioDown) for uploaded files' + EQUALITY integerMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) + +attributetype ( 1.3.6.1.4.1.6981.11.3.4 NAME 'FTPDownloadRatio' + DESC 'Ratio (compared with FTPRatioUp) for downloaded files' + EQUALITY integerMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) + +attributetype ( 1.3.6.1.4.1.6981.11.3.5 NAME 'FTPUploadBandwidth' + DESC 'Bandwidth (in KB/s) to limit upload speeds to' + EQUALITY integerMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) + +attributetype ( 1.3.6.1.4.1.6981.11.3.6 NAME 'FTPDownloadBandwidth' + DESC 'Bandwidth (in KB/s) to limit download speeds to' + EQUALITY integerMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) + +attributetype ( 1.3.6.1.4.1.6981.11.3.7 NAME 'FTPStatus' + DESC 'Account status: enabled or disabled' + EQUALITY caseIgnoreIA5Match + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE ) + +attributetype ( 1.3.6.1.4.1.6981.11.3.8 NAME 'FTPuid' + DESC 'System uid (overrides uidNumber if present)' + EQUALITY integerMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) + +attributetype ( 1.3.6.1.4.1.6981.11.3.9 NAME 'FTPgid' + DESC 'System uid (overrides gidNumber if present)' + EQUALITY integerMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) + +## New Pure-FTPd object type + +objectclass ( 1.3.6.1.4.1.6981.11.2.3 NAME 'PureFTPdUser' SUP top AUXILIARY + DESC 'PureFTPd user with optional quota, throttling, and ratio' + MAY ( FTPStatus $ FTPQuotaFiles $ FTPQuotaMBytes $ FTPUploadRatio $ + FTPDownloadRatio $ FTPUploadBandwidth $ FTPDownloadBandwidth $ + FTPuid $ FTPgid ) ) diff --git a/contrib/openldap/samba.schema b/contrib/openldap/samba.schema new file mode 100644 index 000000000..f71c344e0 --- /dev/null +++ b/contrib/openldap/samba.schema @@ -0,0 +1,152 @@ +## +## schema file for OpenLDAP 2.0.x +## Schema for storing Samba's smbpasswd file in LDAP +## OIDs are owned by the Samba Team +## +## Prerequisite schemas - uid (cosine.schema) +## - displayName (inetorgperson.schema) +## +## 1.3.6.1.4.1.7165.2.1.x - attributetypes +## 1.3.6.1.4.1.7165.2.2.x - objectclasses +## + +## +## Password hashes +## +attributetype ( 1.3.6.1.4.1.7165.2.1.1 NAME 'lmPassword' + DESC 'LanManager Passwd' + EQUALITY caseIgnoreIA5Match + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{32} SINGLE-VALUE ) + +attributetype ( 1.3.6.1.4.1.7165.2.1.2 NAME 'ntPassword' + DESC 'NT Passwd' + EQUALITY caseIgnoreIA5Match + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{32} SINGLE-VALUE ) + +## +## Account flags in string format ([UWDX ]) +## +attributetype ( 1.3.6.1.4.1.7165.2.1.4 NAME 'acctFlags' + DESC 'Account Flags' + EQUALITY caseIgnoreIA5Match + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{16} SINGLE-VALUE ) + +## +## Password timestamps & policies +## +attributetype ( 1.3.6.1.4.1.7165.2.1.3 NAME 'pwdLastSet' + DESC 'NT pwdLastSet' + EQUALITY integerMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) + +attributetype ( 1.3.6.1.4.1.7165.2.1.5 NAME 'logonTime' + DESC 'NT logonTime' + EQUALITY integerMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) + +attributetype ( 1.3.6.1.4.1.7165.2.1.6 NAME 'logoffTime' + DESC 'NT logoffTime' + EQUALITY integerMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) + +attributetype ( 1.3.6.1.4.1.7165.2.1.7 NAME 'kickoffTime' + DESC 'NT kickoffTime' + EQUALITY integerMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) + +attributetype ( 1.3.6.1.4.1.7165.2.1.8 NAME 'pwdCanChange' + DESC 'NT pwdCanChange' + EQUALITY integerMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) + +attributetype ( 1.3.6.1.4.1.7165.2.1.9 NAME 'pwdMustChange' + DESC 'NT pwdMustChange' + EQUALITY integerMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) + +## +## string settings +## +attributetype ( 1.3.6.1.4.1.7165.2.1.10 NAME 'homeDrive' + DESC 'NT homeDrive' + EQUALITY caseIgnoreIA5Match + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{4} SINGLE-VALUE ) + +attributetype ( 1.3.6.1.4.1.7165.2.1.11 NAME 'scriptPath' + DESC 'NT scriptPath' + EQUALITY caseIgnoreIA5Match + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{255} SINGLE-VALUE ) + +attributetype ( 1.3.6.1.4.1.7165.2.1.12 NAME 'profilePath' + DESC 'NT profilePath' + EQUALITY caseIgnoreIA5Match + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{255} SINGLE-VALUE ) + +attributetype ( 1.3.6.1.4.1.7165.2.1.13 NAME 'userWorkstations' + DESC 'userWorkstations' + EQUALITY caseIgnoreIA5Match + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{255} SINGLE-VALUE ) + +attributetype ( 1.3.6.1.4.1.7165.2.1.17 NAME 'smbHome' + DESC 'smbHome' + EQUALITY caseIgnoreIA5Match + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{128} ) + +attributetype ( 1.3.6.1.4.1.7165.2.1.18 NAME 'domain' + DESC 'Windows NT domain to which the user belongs' + EQUALITY caseIgnoreIA5Match + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{128} ) + +## +## user and group RID +## +attributetype ( 1.3.6.1.4.1.7165.2.1.14 NAME 'rid' + DESC 'NT rid' + EQUALITY integerMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) + +attributetype ( 1.3.6.1.4.1.7165.2.1.15 NAME 'primaryGroupID' + DESC 'NT Group RID' + EQUALITY integerMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) + +## +## The smbPasswordEntry objectclass has been depreciated in favor of the +## sambaAccount objectclass +## +#objectclass ( 1.3.6.1.4.1.7165.2.2.1 NAME 'smbPasswordEntry' SUP top AUXILIARY +# DESC 'Samba smbpasswd entry' +# MUST ( uid $ uidNumber ) +# MAY ( lmPassword $ ntPassword $ pwdLastSet $ acctFlags )) + +#objectclass ( 1.3.6.1.4.1.7165.2.2.2 NAME 'sambaAccount' SUP top STRUCTURAL +# DESC 'Samba Account' +# MUST ( uid $ rid ) +# MAY ( cn $ lmPassword $ ntPassword $ pwdLastSet $ logonTime $ +# logoffTime $ kickoffTime $ pwdCanChange $ pwdMustChange $ acctFlags $ +# displayName $ smbHome $ homeDrive $ scriptPath $ profilePath $ +# description $ userWorkstations $ primaryGroupID $ domain )) + +## The X.500 data model (and therefore LDAPv3) says that each entry can +## only have one structural objectclass. OpenLDAP 2.0 does not enforce +## this currently but will in v2.1 + +objectclass ( 1.3.6.1.4.1.7165.2.2.3 NAME 'sambaAccount' SUP top AUXILIARY + DESC 'Samba Auxilary Account' + MUST ( uid $ rid ) + MAY ( cn $ lmPassword $ ntPassword $ pwdLastSet $ logonTime $ + logoffTime $ kickoffTime $ pwdCanChange $ pwdMustChange $ acctFlags $ + displayName $ smbHome $ homeDrive $ scriptPath $ profilePath $ + description $ userWorkstations $ primaryGroupID $ domain )) + +## +## Used for Winbind experimentation +## +#objectclass ( 1.3.6.1.4.1.7165.1.2.2.3 NAME 'uidPool' SUP top AUXILIARY +# DESC 'Pool for allocating UNIX uids' +# MUST ( uidNumber $ cn ) ) + +#objectclass ( 1.3.6.1.4.1.7165.1.2.2.4 NAME 'gidPool' SUP top AUXILIARY +# DESC 'Pool for allocating UNIX gids' +# MUST ( gidNumber $ cn ) ) + diff --git a/contrib/openldap/samba3.schema b/contrib/openldap/samba3.schema new file mode 100644 index 000000000..7dc4de54b --- /dev/null +++ b/contrib/openldap/samba3.schema @@ -0,0 +1,480 @@ +## +## schema file for OpenLDAP 2.x +## Schema for storing Samba user accounts and group maps in LDAP +## OIDs are owned by the Samba Team +## +## Prerequisite schemas - uid (cosine.schema) +## - displayName (inetorgperson.schema) +## - gidNumber (nis.schema) +## +## 1.3.6.1.4.1.7165.2.1.x - attributetypes +## 1.3.6.1.4.1.7165.2.2.x - objectclasses +## +## Printer support +## 1.3.6.1.4.1.7165.2.3.1.x - attributetypes +## 1.3.6.1.4.1.7165.2.3.2.x - objectclasses +## +## ----- READ THIS WHEN ADDING A NEW ATTRIBUTE OR OBJECT CLASS ------ +## +## Run the 'get_next_oid' bash script in this directory to find the +## next available OID for attribute type and object classes. +## +## $ ./get_next_oid +## attributetype ( 1.3.6.1.4.1.7165.2.1.XX NAME .... +## objectclass ( 1.3.6.1.4.1.7165.2.2.XX NAME .... +## +## Also ensure that new entries adhere to the declaration style +## used throughout this file +## +## ( 1.3.6.1.4.1.7165.2.XX.XX NAME .... +## ^ ^ ^ +## +## The spaces are required for the get_next_oid script (and for +## readability). +## +## ------------------------------------------------------------------ + +# objectIdentifier SambaRoot 1.3.6.1.4.1.7165 +# objectIdentifier Samba3 SambaRoot:2 +# objectIdentifier Samba3Attrib Samba3:1 +# objectIdentifier Samba3ObjectClass Samba3:2 + +######################################################################## +## HISTORICAL ## +######################################################################## + +## +## Password hashes +## +#attributetype ( 1.3.6.1.4.1.7165.2.1.1 NAME 'lmPassword' +# DESC 'LanManager Passwd' +# EQUALITY caseIgnoreIA5Match +# SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{32} SINGLE-VALUE ) + +#attributetype ( 1.3.6.1.4.1.7165.2.1.2 NAME 'ntPassword' +# DESC 'NT Passwd' +# EQUALITY caseIgnoreIA5Match +# SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{32} SINGLE-VALUE ) + +## +## Account flags in string format ([UWDX ]) +## +#attributetype ( 1.3.6.1.4.1.7165.2.1.4 NAME 'acctFlags' +# DESC 'Account Flags' +# EQUALITY caseIgnoreIA5Match +# SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{16} SINGLE-VALUE ) + +## +## Password timestamps & policies +## +#attributetype ( 1.3.6.1.4.1.7165.2.1.3 NAME 'pwdLastSet' +# DESC 'NT pwdLastSet' +# EQUALITY integerMatch +# SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) + +#attributetype ( 1.3.6.1.4.1.7165.2.1.5 NAME 'logonTime' +# DESC 'NT logonTime' +# EQUALITY integerMatch +# SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) + +#attributetype ( 1.3.6.1.4.1.7165.2.1.6 NAME 'logoffTime' +# DESC 'NT logoffTime' +# EQUALITY integerMatch +# SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) + +#attributetype ( 1.3.6.1.4.1.7165.2.1.7 NAME 'kickoffTime' +# DESC 'NT kickoffTime' +# EQUALITY integerMatch +# SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) + +#attributetype ( 1.3.6.1.4.1.7165.2.1.8 NAME 'pwdCanChange' +# DESC 'NT pwdCanChange' +# EQUALITY integerMatch +# SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) + +#attributetype ( 1.3.6.1.4.1.7165.2.1.9 NAME 'pwdMustChange' +# DESC 'NT pwdMustChange' +# EQUALITY integerMatch +# SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) + +## +## string settings +## +#attributetype ( 1.3.6.1.4.1.7165.2.1.10 NAME 'homeDrive' +# DESC 'NT homeDrive' +# EQUALITY caseIgnoreIA5Match +# SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{4} SINGLE-VALUE ) + +#attributetype ( 1.3.6.1.4.1.7165.2.1.11 NAME 'scriptPath' +# DESC 'NT scriptPath' +# EQUALITY caseIgnoreIA5Match +# SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{255} SINGLE-VALUE ) + +#attributetype ( 1.3.6.1.4.1.7165.2.1.12 NAME 'profilePath' +# DESC 'NT profilePath' +# EQUALITY caseIgnoreIA5Match +# SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{255} SINGLE-VALUE ) + +#attributetype ( 1.3.6.1.4.1.7165.2.1.13 NAME 'userWorkstations' +# DESC 'userWorkstations' +# EQUALITY caseIgnoreIA5Match +# SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{255} SINGLE-VALUE ) + +#attributetype ( 1.3.6.1.4.1.7165.2.1.17 NAME 'smbHome' +# DESC 'smbHome' +# EQUALITY caseIgnoreIA5Match +# SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{128} ) + +#attributetype ( 1.3.6.1.4.1.7165.2.1.18 NAME 'domain' +# DESC 'Windows NT domain to which the user belongs' +# EQUALITY caseIgnoreIA5Match +# SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{128} ) + +## +## user and group RID +## +#attributetype ( 1.3.6.1.4.1.7165.2.1.14 NAME 'rid' +# DESC 'NT rid' +# EQUALITY integerMatch +# SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) + +#attributetype ( 1.3.6.1.4.1.7165.2.1.15 NAME 'primaryGroupID' +# DESC 'NT Group RID' +# EQUALITY integerMatch +# SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) + +## +## The smbPasswordEntry objectclass has been depreciated in favor of the +## sambaAccount objectclass +## +#objectclass ( 1.3.6.1.4.1.7165.2.2.1 NAME 'smbPasswordEntry' SUP top AUXILIARY +# DESC 'Samba smbpasswd entry' +# MUST ( uid $ uidNumber ) +# MAY ( lmPassword $ ntPassword $ pwdLastSet $ acctFlags )) + +#objectclass ( 1.3.6.1.4.1.7165.2.2.2 NAME 'sambaAccount' SUP top STRUCTURAL +# DESC 'Samba Account' +# MUST ( uid $ rid ) +# MAY ( cn $ lmPassword $ ntPassword $ pwdLastSet $ logonTime $ +# logoffTime $ kickoffTime $ pwdCanChange $ pwdMustChange $ acctFlags $ +# displayName $ smbHome $ homeDrive $ scriptPath $ profilePath $ +# description $ userWorkstations $ primaryGroupID $ domain )) + +#objectclass ( 1.3.6.1.4.1.7165.2.2.3 NAME 'sambaAccount' SUP top AUXILIARY +# DESC 'Samba Auxiliary Account' +# MUST ( uid $ rid ) +# MAY ( cn $ lmPassword $ ntPassword $ pwdLastSet $ logonTime $ +# logoffTime $ kickoffTime $ pwdCanChange $ pwdMustChange $ acctFlags $ +# displayName $ smbHome $ homeDrive $ scriptPath $ profilePath $ +# description $ userWorkstations $ primaryGroupID $ domain )) + +######################################################################## +## END OF HISTORICAL ## +######################################################################## + +####################################################################### +## Attributes used by Samba 3.0 schema ## +####################################################################### + +## +## Password hashes +## +attributetype ( 1.3.6.1.4.1.7165.2.1.24 NAME 'sambaLMPassword' + DESC 'LanManager Password' + EQUALITY caseIgnoreIA5Match + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{32} SINGLE-VALUE ) + +attributetype ( 1.3.6.1.4.1.7165.2.1.25 NAME 'sambaNTPassword' + DESC 'MD4 hash of the unicode password' + EQUALITY caseIgnoreIA5Match + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{32} SINGLE-VALUE ) + +## +## Account flags in string format ([UWDX ]) +## +attributetype ( 1.3.6.1.4.1.7165.2.1.26 NAME 'sambaAcctFlags' + DESC 'Account Flags' + EQUALITY caseIgnoreIA5Match + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{16} SINGLE-VALUE ) + +## +## Password timestamps & policies +## +attributetype ( 1.3.6.1.4.1.7165.2.1.27 NAME 'sambaPwdLastSet' + DESC 'Timestamp of the last password update' + EQUALITY integerMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) + +attributetype ( 1.3.6.1.4.1.7165.2.1.28 NAME 'sambaPwdCanChange' + DESC 'Timestamp of when the user is allowed to update the password' + EQUALITY integerMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) + +attributetype ( 1.3.6.1.4.1.7165.2.1.29 NAME 'sambaPwdMustChange' + DESC 'Timestamp of when the password will expire' + EQUALITY integerMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) + +attributetype ( 1.3.6.1.4.1.7165.2.1.30 NAME 'sambaLogonTime' + DESC 'Timestamp of last logon' + EQUALITY integerMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) + +attributetype ( 1.3.6.1.4.1.7165.2.1.31 NAME 'sambaLogoffTime' + DESC 'Timestamp of last logoff' + EQUALITY integerMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) + +attributetype ( 1.3.6.1.4.1.7165.2.1.32 NAME 'sambaKickoffTime' + DESC 'Timestamp of when the user will be logged off automatically' + EQUALITY integerMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) + +attributetype ( 1.3.6.1.4.1.7165.2.1.48 NAME 'sambaBadPasswordCount' + DESC 'Bad password attempt count' + EQUALITY integerMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) + +attributetype ( 1.3.6.1.4.1.7165.2.1.49 NAME 'sambaBadPasswordTime' + DESC 'Time of the last bad password attempt' + EQUALITY integerMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) + +attributetype ( 1.3.6.1.4.1.7165.2.1.55 NAME 'sambaLogonHours' + DESC 'Logon Hours' + EQUALITY caseIgnoreIA5Match + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{42} SINGLE-VALUE ) + +## +## string settings +## +attributetype ( 1.3.6.1.4.1.7165.2.1.33 NAME 'sambaHomeDrive' + DESC 'Driver letter of home directory mapping' + EQUALITY caseIgnoreIA5Match + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{4} SINGLE-VALUE ) + +attributetype ( 1.3.6.1.4.1.7165.2.1.34 NAME 'sambaLogonScript' + DESC 'Logon script path' + EQUALITY caseIgnoreMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{255} SINGLE-VALUE ) + +attributetype ( 1.3.6.1.4.1.7165.2.1.35 NAME 'sambaProfilePath' + DESC 'Roaming profile path' + EQUALITY caseIgnoreMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{255} SINGLE-VALUE ) + +attributetype ( 1.3.6.1.4.1.7165.2.1.36 NAME 'sambaUserWorkstations' + DESC 'List of user workstations the user is allowed to logon to' + EQUALITY caseIgnoreMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{255} SINGLE-VALUE ) + +attributetype ( 1.3.6.1.4.1.7165.2.1.37 NAME 'sambaHomePath' + DESC 'Home directory UNC path' + EQUALITY caseIgnoreMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{128} ) + +attributetype ( 1.3.6.1.4.1.7165.2.1.38 NAME 'sambaDomainName' + DESC 'Windows NT domain to which the user belongs' + EQUALITY caseIgnoreMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{128} ) + +attributetype ( 1.3.6.1.4.1.7165.2.1.47 NAME 'sambaMungedDial' + DESC '' + EQUALITY caseExactMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{1050} ) + +attributetype ( 1.3.6.1.4.1.7165.2.1.54 NAME 'sambaPasswordHistory' + DESC 'Concatenated MD4 hashes of the unicode passwords used on this account' + EQUALITY caseIgnoreIA5Match + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{32} ) + +## +## SID, of any type +## + +attributetype ( 1.3.6.1.4.1.7165.2.1.20 NAME 'sambaSID' + DESC 'Security ID' + EQUALITY caseIgnoreIA5Match + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{64} SINGLE-VALUE ) + + +## +## Primary group SID, compatible with ntSid +## + +attributetype ( 1.3.6.1.4.1.7165.2.1.23 NAME 'sambaPrimaryGroupSID' + DESC 'Primary Group Security ID' + EQUALITY caseIgnoreIA5Match + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{64} SINGLE-VALUE ) + +attributetype ( 1.3.6.1.4.1.7165.2.1.51 NAME 'sambaSIDList' + DESC 'Security ID List' + EQUALITY caseIgnoreIA5Match + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{64} ) + +## +## group mapping attributes +## +attributetype ( 1.3.6.1.4.1.7165.2.1.19 NAME 'sambaGroupType' + DESC 'NT Group Type' + EQUALITY integerMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) + +## +## Store info on the domain +## + +attributetype ( 1.3.6.1.4.1.7165.2.1.21 NAME 'sambaNextUserRid' + DESC 'Next NT rid to give our for users' + EQUALITY integerMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) + +attributetype ( 1.3.6.1.4.1.7165.2.1.22 NAME 'sambaNextGroupRid' + DESC 'Next NT rid to give out for groups' + EQUALITY integerMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) + +attributetype ( 1.3.6.1.4.1.7165.2.1.39 NAME 'sambaNextRid' + DESC 'Next NT rid to give out for anything' + EQUALITY integerMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) + +attributetype ( 1.3.6.1.4.1.7165.2.1.40 NAME 'sambaAlgorithmicRidBase' + DESC 'Base at which the samba RID generation algorithm should operate' + EQUALITY integerMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) + +attributetype ( 1.3.6.1.4.1.7165.2.1.41 NAME 'sambaShareName' + DESC 'Share Name' + EQUALITY caseIgnoreMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE ) + +attributetype ( 1.3.6.1.4.1.7165.2.1.42 NAME 'sambaOptionName' + DESC 'Option Name' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} ) + +attributetype ( 1.3.6.1.4.1.7165.2.1.43 NAME 'sambaBoolOption' + DESC 'A boolean option' + EQUALITY booleanMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 SINGLE-VALUE ) + +attributetype ( 1.3.6.1.4.1.7165.2.1.44 NAME 'sambaIntegerOption' + DESC 'An integer option' + EQUALITY integerMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) + +attributetype ( 1.3.6.1.4.1.7165.2.1.45 NAME 'sambaStringOption' + DESC 'A string option' + EQUALITY caseExactIA5Match + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE ) + +attributetype ( 1.3.6.1.4.1.7165.2.1.46 NAME 'sambaStringListOption' + DESC 'A string list option' + EQUALITY caseIgnoreMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + + +attributetype ( 1.3.6.1.4.1.7165.2.1.50 NAME 'sambaPrivName' + SUP name ) + +attributetype ( 1.3.6.1.4.1.7165.2.1.52 NAME 'sambaPrivilegeList' + DESC 'Privileges List' + EQUALITY caseIgnoreIA5Match + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{64} ) + +attributetype ( 1.3.6.1.4.1.7165.2.1.53 NAME 'sambaTrustFlags' + DESC 'Trust Password Flags' + EQUALITY caseIgnoreIA5Match + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) + + +####################################################################### +## objectClasses used by Samba 3.0 schema ## +####################################################################### + +## The X.500 data model (and therefore LDAPv3) says that each entry can +## only have one structural objectclass. OpenLDAP 2.0 does not enforce +## this currently but will in v2.1 + +## +## added new objectclass (and OID) for 3.0 to help us deal with backwards +## compatibility with 2.2 installations (e.g. ldapsam_compat) --jerry +## +objectclass ( 1.3.6.1.4.1.7165.2.2.6 NAME 'sambaSamAccount' SUP top AUXILIARY + DESC 'Samba 3.0 Auxilary SAM Account' + MUST ( uid $ sambaSID ) + MAY ( cn $ sambaLMPassword $ sambaNTPassword $ sambaPwdLastSet $ + sambaLogonTime $ sambaLogoffTime $ sambaKickoffTime $ + sambaPwdCanChange $ sambaPwdMustChange $ sambaAcctFlags $ + displayName $ sambaHomePath $ sambaHomeDrive $ sambaLogonScript $ + sambaProfilePath $ description $ sambaUserWorkstations $ + sambaPrimaryGroupSID $ sambaDomainName $ sambaMungedDial $ + sambaBadPasswordCount $ sambaBadPasswordTime $ + sambaPasswordHistory $ sambaLogonHours)) + +## +## Group mapping info +## +objectclass ( 1.3.6.1.4.1.7165.2.2.4 NAME 'sambaGroupMapping' SUP top AUXILIARY + DESC 'Samba Group Mapping' + MUST ( gidNumber $ sambaSID $ sambaGroupType ) + MAY ( displayName $ description $ sambaSIDList )) + +## +## Trust password for trust relationships (any kind) +## +objectclass ( 1.3.6.1.4.1.7165.2.2.14 NAME 'sambaTrustPassword' SUP top STRUCTURAL + DESC 'Samba Trust Password' + MUST ( sambaDomainName $ sambaNTPassword $ sambaTrustFlags ) + MAY ( sambaSID $ sambaPwdLastSet )) + +## +## Whole-of-domain info +## +objectclass ( 1.3.6.1.4.1.7165.2.2.5 NAME 'sambaDomain' SUP top STRUCTURAL + DESC 'Samba Domain Information' + MUST ( sambaDomainName $ + sambaSID ) + MAY ( sambaNextRid $ sambaNextGroupRid $ sambaNextUserRid $ + sambaAlgorithmicRidBase ) ) + +## +## used for idmap_ldap module +## +objectclass ( 1.3.6.1.4.1.7165.2.2.7 NAME 'sambaUnixIdPool' SUP top AUXILIARY + DESC 'Pool for allocating UNIX uids/gids' + MUST ( uidNumber $ gidNumber ) ) + + +objectclass ( 1.3.6.1.4.1.7165.2.2.8 NAME 'sambaIdmapEntry' SUP top AUXILIARY + DESC 'Mapping from a SID to an ID' + MUST ( sambaSID ) + MAY ( uidNumber $ gidNumber ) ) + +objectclass ( 1.3.6.1.4.1.7165.2.2.9 NAME 'sambaSidEntry' SUP top STRUCTURAL + DESC 'Structural Class for a SID' + MUST ( sambaSID ) ) + +objectclass ( 1.3.6.1.4.1.7165.1.2.2.10 NAME 'sambaConfig' SUP top AUXILIARY + DESC 'Samba Configuration Section' + MAY ( description ) ) + +objectclass ( 1.3.6.1.4.1.7165.2.2.11 NAME 'sambaShare' SUP top STRUCTURAL + DESC 'Samba Share Section' + MUST ( sambaShareName ) + MAY ( description ) ) + +objectclass ( 1.3.6.1.4.1.7165.2.2.12 NAME 'sambaConfigOption' SUP top STRUCTURAL + DESC 'Samba Configuration Option' + MUST ( sambaOptionName ) + MAY ( sambaBoolOption $ sambaIntegerOption $ sambaStringOption $ + sambaStringListoption $ description ) ) + + +objectclass ( 1.3.6.1.4.1.7165.2.2.13 NAME 'sambaPrivilege' SUP top AUXILIARY + DESC 'Samba Privilege' + MUST ( sambaSID ) + MAY ( sambaPrivilegeList ) ) + diff --git a/contrib/openldap/slapd.conf b/contrib/openldap/slapd.conf new file mode 100644 index 000000000..c36d438f4 --- /dev/null +++ b/contrib/openldap/slapd.conf @@ -0,0 +1,249 @@ +# This is the main ldapd configuration file. See slapd.conf(5) for more +# info on the configuration options. + +## +## NOTE: This is an example. You should use the template shipped +## with your distribution and adapt it to your needs. +## + +# Schema and objectClass definitions, depending on your +# LDAP setup +include /etc/ldap/schema/core.schema +include /etc/ldap/schema/cosine.schema +include /etc/ldap/schema/inetorgperson.schema +include /etc/ldap/schema/openldap.schema +include /etc/ldap/schema/nis.schema +include /etc/ldap/schema/misc.schema +#include /etc/ldap/schema/krb5-kdc.schema +#include /etc/ldap/schema/trust.schema + +# These should be present for GOsa. In case of samba3, +# replace samba.schema and gosa.schema by samba3.schema +# and gosa+samba3.schema. Don't include both and remember +# to adjust the indexing and acl stuff below! +include /etc/ldap/schema/samba.schema +include /etc/ldap/schema/pureftpd.schema +include /etc/ldap/schema/gohard.schema +include /etc/ldap/schema/gofon.schema +include /etc/ldap/schema/goto.schema +include /etc/ldap/schema/gosa+samba3.schema +include /etc/ldap/schema/gofax.schema +include /etc/ldap/schema/goserver.schema + +# Schema check allows for forcing entries to +# match schemas for their objectClasses's +schemacheck on + +# Security settings +# Parameters: sasl, ssf, tls, transport, update_sasl, update_ssf, +# update_tls, update_transport +#security update_sasl=128,uptate_tls=128 + +# Require settings +# Paramters: none, authc, bind, LDAPv3, SASL (strong) +#require authc, LDAPv3 + +# Allow settings +# Parameters: none, bind_v2, tls_2_anon, bind_anon_cred, bind_anon_dn, +# update_anon +#allow bind_v2 + +# Disallow settings +# Parameters: bind_anon, bind_simple_unprotected, tls_2_anon, +# bind_simple, bind_krbv4, tls_authc + +# Password hash default value +# Parameters: {SHA}, {SMD5}, {MD4}, {CRYPT}, {CLEARTEXT} +password-hash {CRYPT} + +# Search base +defaultsearchbase dc=gonicus,dc=de + + +# Where clients are refered to if no +# match is found locally +#referral ldap://some.other.ldap.server + +## TLS setup, needs certificates +#TLSCipherSuite HIGH:MEDIUM:+SSLv2 +#TLSCertificateFile /etc/ssl/certs/slapd.pem +#TLSCertificateKeyFile /etc/ssl/certs/slapd.pem + +## SASL setup +#sasl-authz-policy +#sasl-host gosa.gonicus.local +#sasl-realm GONICUS.LOCAL +#sasl-regexp cn=(.*),ou=(.*) cn=$1,ou=$2,ou=People,dc=gonicus,dc=de +#sasl-secprops noanonymous + +## Kerberos setup +#srvtab /etc/krb5.keytab.ldap + +# Where the pid file is put. The init.d script +# will not stop the server if you change this. +pidfile /var/run/slapd.pid + +# List of arguments that were passed to the server +argsfile /var/run/slapd.args + +# Read slapd.conf(5) for possible values +loglevel 1024 + +# Where the dynamically loaded modules are stored +modulepath /usr/lib/ldap +moduleload back_bdb +moduleload back_monitor +#moduleload back_shell + +# Some tuning parameters +#threads 64 +#concurrency 32 +#conn_max_pending 100 +#conn_max_pending_auth 250 +#reverse-lookup off +#sizelimit 1000 +#timelimit 30 +#idletimeout 30 + +# Limits +#limits anonymous size.soft=500 time.soft=5 +#limits user size=none time.soft=30 + +####################################################################### +# database definitions +####################################################################### + +# Monitor backend +database monitor + +access to dn.subtree=cn=Monitor + by * read + +# Access to schema information +access to dn.subtree="" + by dn="cn=ldapadmin,dc=gonicus,dc=de" read + +# The backend type, ldbm, is the default standard +database bdb +cachesize 5000 +checkpoint 512 720 +mode 0600 + +# The base of your directory +suffix "dc=gonicus,dc=de" + +# Sample password is "tester", generate a new one using the mkpasswd +# utility and put the string after {crypt} +rootdn "cn=ldapadmin,dc=gonicus,dc=de" +rootpw {crypt}OuorOLd3VqvC2 + +# Indexing +index default sub +index uid,mail eq +index gosaMailAlternateAddress,gosaMailForwardingAddress eq +index cn,sn,givenName,ou pres,eq,sub +index objectClass pres,eq +index uidNumber,gidNumber,memberuid eq +index gosaSubtreeACL,gosaObject,gosaUser pres,eq + +# Indexing for samba 2 +#index rid,primaryGroupID eq + +# Indexing for Samba 3 +index sambaSID eq +index sambaPrimaryGroupSID eq +index sambaDomainName eq + + +# Where the database file are physically stored +directory "/var/lib/ldap" + +# Save the time that the entry gets modified +lastmod off + +# The userPassword/shadow Emtries by default can be +# changed by the entry owning it if they are authenticated. +# Others should not be able to see it, except the admin +# entry below +#access to attrs=userPassword,pwdLastSet,pwdMustChange,pwdCanChange,shadowMax,shadowExpire +access to attrs=userPassword,sambaPwdLastSet,sambaPwdMustChange,sambaPwdCanChange,shadowMax,shadowExpire + by dn="cn=ldapadmin,dc=gonicus,dc=de" write + by dn.regex="uid=[^/]+/admin\+(realm=GONICUS.LOCAL)?" write + by anonymous auth + by self write + by * none + +# Deny access to imap/fax/kerberos admin passwords stored +# in ldap tree +access to attrs=goImapPassword + by dn="cn=ldapadmin,dc=gonicus,dc=de" write + by dn.regex="uid=[^/]+/admin\+(realm=GONICUS.LOCAL)?" write + by * none +access to attrs=goKrbPassword + by dn="cn=ldapadmin,dc=gonicus,dc=de" write + by dn.regex="uid=[^/]+/admin\+(realm=GONICUS.LOCAL)?" write + by * none +access to attrs=goFaxPassword + by dn="cn=ldapadmin,dc=gonicus,dc=de" write + by dn.regex="uid=[^/]+/admin\+(realm=GONICUS.LOCAL)?" write + by * none + +# Let servers write last user attribute +access to attrs=gotoLastUser + by * write + +# Samba passwords by default can be changed +# by the entry owning it if they are authenticated. +# Others should not be able to see it, except the +# admin entry below +access to attrs=lmPassword,ntPassword +access to attrs=sambaLmPassword,sambaNtPassword + by dn="cn=ldapadmin,dc=gonicus,dc=de" write + by dn.regex="uid=[^/]+/admin\+(realm=GONICUS.LOCAL)?" write + by anonymous auth + by self write + by * none + +# Enable write create access for the terminal admin +access to dn="ou=incoming,dc=gonicus,dc=de" + by dn="cn=terminal-admin,dc=gonicus,dc=de" write + by dn="cn=ldapadmin,dc=gonicus,dc=de" write + by dn.regex="uid=[^/]+/admin\+(realm=GONICUS.LOCAL)?" write + +access to dn.sub="ou=incoming,dc=gonicus,dc=de" + by dn="cn=terminal-admin,dc=gonicus,dc=de" write + by dn="cn=ldapadmin,dc=gonicus,dc=de" write + by dn.regex="uid=[^/]+/admin\+(realm=GONICUS.LOCAL)?" write + +# What trees should be readable, depends on your policy. Either +# use this entry and specify what should be readable, or leave +# the access to * => by * read below untouched +#access to dn="ou=(people|groups)" +# by * read + +# The admin dn has full write access +access to * + by dn="cn=ldapadmin,dc=gonicus,dc=de" =wrscx + by dn.regex="uid=[^/]+/admin\+(realm=GONICUS.LOCAL)?" =wrscx + by * read +# by peername="ip=127\.0\.0\.1" read +# by * none + + +# Example replication using admin account. This will require taking the +# out put of this database using slapcat(8C), and then importing that into +# the replica using slapadd(8C). + +# Replication setup +#replogfile /var/log/ldap-replicalog +#replica host=ldap-2.gonicus.local +# binddn="cn=replicator,dc=gonicus,dc=de bindmethod=simple credentials=secret + +# Dummy database for config replication +#database shell +#suffix "dc=gonicus,dc=shell" +#search /etc/ldap/shell/process.pl +#add /etc/ldap/shell/process.pl + +# End of ldapd configuration file + diff --git a/contrib/opensides/README b/contrib/opensides/README new file mode 100644 index 000000000..451b5fb69 --- /dev/null +++ b/contrib/opensides/README @@ -0,0 +1,6 @@ +goSamba.pl - This script will help you populate your ldap tree with + the correct attribute when using the smbldap-tools + from idealx. + +Benoit Mortier +Guillaume Delecourt diff --git a/contrib/opensides/goSamba.pl b/contrib/opensides/goSamba.pl new file mode 100755 index 000000000..ef7b210b4 --- /dev/null +++ b/contrib/opensides/goSamba.pl @@ -0,0 +1,162 @@ +#!/usr/bin/perl + + +# Copyright (C) 2005 Guillaume Delecourt +# +# 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. +# +# + +use Net::LDAP; +use Getopt::Std; +use Net::LDAP::Schema; +use Net::LDAP::LDIF; + +# Variables a config +$admin="cn=ldapadmin,dc=example,dc=be"; +$password=""; +$peopleou="ou=People,dc=example,dc=be"; +$base="dc=example,dc=be"; +$scope="one"; # par defaut +$dump_file="myldaptree.ldif"; +$server="localhost"; + + +my %Options; + +my $ok = getopts('?', \%Options); + +#Verifying if help is needed +if ( (!$ok) || (@ARGV < 1) || ($Options{'?'}) ) { + &help(); +} + +print "We backup the whole tree before every operation\n"; +&dump(); + +$comm=$ARGV[0]; + +if($comm eq "del" && @ARGV >1 ) +{ + print "You asked to delete attribute : "; + $i=1; + while($ARGV[$i] ne "") + { + print $ARGV[$i]." "; + $i++; + } + print "\n"; + $ldap = Net::LDAP->new($server); + $ldap->bind($admin,password=>$password); + + + print "ldap connection" .$ldap; + + $mesg = $ldap->search(filter=>"(objectClass=*)",base=>$peopleou,scope=>$scope); + @entries = $mesg->entries; + + foreach $entry (@entries) { + $i=1; + print $entry->dn()."\n"; + while($ARGV[$i] ne "") + { + if($ARGV[$i] eq "obj"){$obj=1;$i++;next} + if($obj==1) + { + $mesg = $ldap->modify($entry->dn(), delete => {"ObjectClass"=>"$ARGV[$i]"}); + print "\t objectClass: ".$ARGV[$i]; + } + else + { + $mesg = $ldap->modify($entry->dn(), delete => [$ARGV[$i]]); + print "\t attribut: ".$ARGV[$i]; + } + $obj=0; + $i++; + } + + print "\n"; + } + $ldap->unbind; + exit(0); +} +elsif($comm eq "gosa" && @ARGV ==1) +{ + print "Add GOsa attribute for the following users\n"; + print "---------------------------------------------\n"; + $ldap = Net::LDAP->new($server); + $ldap->bind($admin,password=>$password); + $mesg = $ldap->search(filter=>"&(!(objectClass~=gosaAccount))", base=>$peopleou,scope=>$scope); + @entries = $mesg->entries; + + foreach $entry (@entries) { + $mesg = $ldap->modify($entry->dn(), add => { "ObjectClass" => "gosaAccount"}); + $mesg = $ldap->modify($entry->dn(), add => { "ObjectClass" => "organizationalPerson"}); + $mesg = $ldap->modify($entry->dn(), add => { "ObjectClass" => "Person"}); + print $entry->dn(); + print "\n"; + } + $ldap->unbind; + exit(0); +} +elsif($comm eq "modif" && @ARGV >1) +{ + print "Modifications asked\n"; + print "------------------------\n"; + $ldap = Net::LDAP->new($server); + $ldap->bind($admin,password=>$password); + + $mesg = $ldap->search(filter=>"(objectClass=*)",base=>$peopleou,scope=>$scope); + @entries = $mesg->entries; + foreach $entry (@entries) { + $mesg = $ldap->modify($entry->dn(), replace => { "$ARGV[1]" => "$ARGV[2]" } ); + print $entry->dn()."\n\tattribut $ARGV[1] modifié avec la valeur $ARGV[2]\n"; + } + $ldap->unbind; + exit(0); +} +elsif($comm eq "dump" && @ARGV ==1) +{ + &dump(); +} +else +{ + &help(); +} + +sub help() +{ + print_banner; + print "Usage: $0 [-?] command\n"; + print "\t-? show this help message\n"; + print "\tgosa -> add GOsa attributes for the whole the people branch !\n"; + print "\tdel attribut -> Remove an attribute for the whole people branch !\n"; + print "\tmodif -> to modify the attribute\n"; + print "\tdump to dump the whole ldap tree\n"; + exit (1); +} + +sub dump() +{ + $ldap = Net::LDAP->new($server) or die "$@"; + $ldap->bind($admin,password=>$password); + my $ldif = Net::LDAP::LDIF->new($dump_file,'w') ; + $mesg = $ldap->search ( + base => "$base", + filter => "(objectclass=*)" + ); + $ldif->write_entry($mesg->entries) ; + $ldap->unbind; +} diff --git a/contrib/patches/imap-2001a-quota.patch b/contrib/patches/imap-2001a-quota.patch new file mode 100644 index 000000000..304488d2d --- /dev/null +++ b/contrib/patches/imap-2001a-quota.patch @@ -0,0 +1,20 @@ +diff -Naur imap-2001a/src/c-client/imap4r1.c imap-2001a.patched/src/c-client/imap4r1.c +--- imap-2001a/src/c-client/imap4r1.c Wed Nov 14 23:50:55 2001 ++++ imap-2001a.patched/src/c-client/imap4r1.c Wed May 21 09:54:35 2003 +@@ -2358,10 +2358,12 @@ + do { /* for each list item */ + *s++ = c; /* write prefix character */ + if (list) { /* sigh, QUOTA has bizarre syntax! */ +- for (t = (char *) list->text.data; *t; *s++ = *t++); +- sprintf (s," %lu",list->text.size); +- s += strlen (s); +- c = ' '; /* prefix character for subsequent strings */ ++ if (list->text.size != 0){ ++ for (t = (char *) list->text.data; *t; *s++ = *t++); ++ sprintf (s," %lu",list->text.size); ++ s += strlen (s); ++ c = ' '; /* prefix character for subsequent strings */ ++ } + } + } + while (list = list->next); diff --git a/contrib/patches/php4-imap-getacl.patch b/contrib/patches/php4-imap-getacl.patch new file mode 100644 index 000000000..ae3a23595 --- /dev/null +++ b/contrib/patches/php4-imap-getacl.patch @@ -0,0 +1,97 @@ +--- php-imap-4.3.9/php_imap.c.fix 2004-08-06 15:04:17 +0400 ++++ php-imap-4.3.9/php_imap.c 2004-08-06 15:11:43 +0400 +@@ -138,6 +138,7 @@ function_entry imap_functions[] = { + PHP_FE(imap_get_quotaroot, NULL) + PHP_FE(imap_set_quota, NULL) + PHP_FE(imap_setacl, NULL) ++ PHP_FE(imap_getacl, NULL) + #endif + + PHP_FE(imap_mail, NULL) +@@ -377,6 +378,22 @@ void mail_getquota(MAILSTREAM *stream, c + /* }}} */ + #endif + ++/* {{{ mail_getquota ++ * ++ * Mail GET_ACL callback ++ * Called via the mail_parameter function in c-client:src/c-client/mail.c ++ */ ++void mail_getacl(MAILSTREAM *stream, char *mailbox, ACLLIST *alist) ++{ ++ TSRMLS_FETCH(); ++ ++ /* walk through the ACLLIST */ ++ for (; alist; alist = alist->next) ++ { ++ add_assoc_stringl(IMAPG(imap_acl_list), alist->identifier, alist->rights, strlen(alist->rights), 1); ++ } ++} ++/* }}} */ + + /* {{{ php_imap_init_globals + */ +@@ -402,6 +419,7 @@ static void php_imap_init_globals(zend_i + imap_globals->folderlist_style = FLIST_ARRAY; + #if defined(HAVE_IMAP2000) || defined(HAVE_IMAP2001) + imap_globals->quota_return = NULL; ++ imap_globals->imap_acl_list = NIL; + #endif + } + /* }}} */ +@@ -985,6 +1003,37 @@ PHP_FUNCTION(imap_setacl) + } + /* }}} */ + ++/* {{{ proto array imap_get_quota(int stream_id, string mailbox) ++ Gets the ACL for a given mailbox */ ++PHP_FUNCTION(imap_getacl) ++{ ++ zval **streamind, **mailbox; ++ pils *imap_le_struct; ++ ++ if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &streamind, &mailbox) == FAILURE) { ++ ZEND_WRONG_PARAM_COUNT(); ++ } ++ ++ ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap); ++ ++ convert_to_string_ex(mailbox); ++ ++ /* initializing the special array for the return values */ ++ array_init(return_value); ++ ++ IMAPG(imap_acl_list) = return_value; ++ ++ /* set the callback for the GET_ACL function */ ++ mail_parameters(NIL, SET_ACL, (void *) mail_getacl); ++ if(!imap_getacl(imap_le_struct->imap_stream, Z_STRVAL_PP(mailbox))) { ++ php_error(E_WARNING, "c-client imap_getacl failed"); ++ RETURN_FALSE; ++ } ++ ++ IMAPG(imap_acl_list) = NIL; ++} ++/* }}} */ ++ + #endif /* HAVE_IMAP2000 || HAVE_IMAP2001 */ + + +--- php-imap-4.3.9/php_imap.h.fix 2004-08-06 15:09:33 +0400 ++++ php-imap-4.3.9/php_imap.h 2004-08-06 15:10:42 +0400 +@@ -172,6 +172,7 @@ PHP_FUNCTION(imap_get_quota); + PHP_FUNCTION(imap_get_quotaroot); + PHP_FUNCTION(imap_set_quota); + PHP_FUNCTION(imap_setacl); ++PHP_FUNCTION(imap_getacl); + #endif + + +@@ -202,6 +203,7 @@ ZEND_BEGIN_MODULE_GLOBALS(imap) + unsigned long status_uidvalidity; + #if defined(HAVE_IMAP2000) || defined(HAVE_IMAP2001) + zval **quota_return; ++ pval *imap_acl_list; + #endif + ZEND_END_MODULE_GLOBALS(imap) + diff --git a/contrib/postgresql/README b/contrib/postgresql/README new file mode 100644 index 000000000..799a9f9af --- /dev/null +++ b/contrib/postgresql/README @@ -0,0 +1,10 @@ + +in those directories you will find the databse for using the plugins +gofax gofon glog with postgresql. + +Note that the plugins are not adapted to use postgresql for now. + +This is just the start of the port to postgresql + +Benoit Mortier + diff --git a/contrib/scripts/README b/contrib/scripts/README new file mode 100644 index 000000000..023f4281f --- /dev/null +++ b/contrib/scripts/README @@ -0,0 +1,17 @@ +goQuota.pl - run this script via cron (each 5-10 min for examle). It makes + cache file (quota.db) with traffic usage and user info from LDAP + +goQuotaView.pl - read collected data from quota.db and print it to + stdout in human readable format + +goSquid.pl - connect this script to squid + redirect_program /usr/local/sbin/goSquid + +goAgent.pl - one script to create home directories and mailboxes on + filesystem. run it via cron + +mkHash.pl - create hash file for black list + +At this time all scripts have no config file. Please, edit source to configure. + +Igor Muratov diff --git a/contrib/scripts/goAgent.pl b/contrib/scripts/goAgent.pl new file mode 100644 index 000000000..41b991e24 --- /dev/null +++ b/contrib/scripts/goAgent.pl @@ -0,0 +1,225 @@ +#!/usr/bin/perl +# +# Igor Muratov +# +# Find changes at LDAP and put this to filesystem +# +# +# Igor Muratov +# 20041004 +# - Added rebuildVirtual function +# +# Igor Muratov +# 20040617: +# - Changed search fiter to exclude gosaUserTemplate entries +# +# Simon Liebold : +# 20040617: +# - Changed $TS_FILE-location +# +# $Id: goAgent.pl,v 1.4 2004/11/19 21:46:56 migor-guest Exp $ +# + +use strict; +use Net::LDAP; + +my $LDAP_HOST='localhost'; +my $LDAP_PORT='389'; +my $LDAP_BASE='dc=example,dc=com'; +#my $LDAP_USER='cn=admin,dc=example,dc=com'; +#my $LDAP_PASS='secret'; + +my $HOME_DIR='/home'; +my $TS_FILE='/tmp/gosa_timestamp'; +my $KEYS_DIR='/etc/openssh/authorized_keys2'; +my $MAIL_DIR='/var/spool/mail'; +my $VLOCAL='/etc/postfix/virtual_local'; +my $VFORWARD='/etc/postfix/virtual_forward'; +my ($ldap, $mesg, $entry); +my $virtuals = 0; + +# Anonymous bind to LDAP +sub anonBind +{ + my $ldap = Net::LDAP->new( $LDAP_HOST, port => $LDAP_PORT ); + my $mesg = $ldap->bind(); + $mesg->code && die $mesg->error; + return $ldap; +} + +# Bind as LDAP user +#sub userBind +#{ +# my $ldap = Net::LDAP->new( $LDAP_HOST, port => $LDAP_PORT ); +# my $mesg = $ldap->bind($LDAP_USER, password=>$LDAP_PASS); +# $mesg->code && die $mesg->error; +# return $ldap; +#} + +# Read timestamp +sub getTS +{ + open(F, "< $TS_FILE"); + my $ts = ; + chop $ts; + $ts ||= "19700101000000Z"; + return $ts; +} + +# save timestamp +sub putTS +{ + my $ts = `date -u '+%Y%m%d%H%M%SZ'`; + open(F, "> $TS_FILE"); + print F $ts; +} + +sub rebuildVirtuals +{ + print "Rebuild virtuals table for postfix\n"; + $mesg = $ldap->search( + base => $LDAP_BASE, + filter => "(&(objectClass=gosaMailAccount)(gosaMailDeliveryMode=[*L*])(|(mail=*)(gosaMailAlternateAddress=*)))", + attrs => [ + 'mail', + 'uid', + 'gosaMailForwardingAddress', + 'memberUid' + ], + ); + + # Work if changes is present + open(VIRT, "> $VLOCAL"); + foreach my $entry ($mesg->all_entries) + { + foreach my $addr ($entry->get_value('mail')) + { + print VIRT "$addr\t"; + print VIRT join(",", ( + $entry->get_value("uid"), + $entry->get_value("gosaMailForwardingAddress"), + $entry->get_value("memberUid"), + )); + print VIRT "\n"; + } + } + close(VIRT); + `postmap $VLOCAL`; + + $mesg = $ldap->search( + base => $LDAP_BASE, + filter => "(&(objectClass=gosaMailAccount)(!(gosaMailDeliveryMode=[*L*]))(|(mail=*)(gosaMailAlternateAddress=*)))", + attrs => [ + 'gosaMailForwardingAddress', + ], + ); + + # Work if changes is present + open(VIRT, "> $VFORWARD"); + foreach my $entry ($mesg->all_entries) + { + foreach my $addr ($entry->get_value('mail')) + { + print VIRT "$addr\t"; + print VIRT join(",", ( + $entry->get_value("gosaMailForwardingAddress"), + )); + print VIRT "\n"; + } + } + close(VIRT); + `postmap $VFORWARD`; +} + +sub posixAccount +{ + my $entry = shift; + my $uid = ($entry->get_value('uid'))[0]; + my $home = ($entry->get_value('homeDirectory'))[0]; + my $uidNumber = ($entry->get_value('uidNumber'))[0]; + my $gidNumber = ($entry->get_value('gidNumber'))[0]; + + print "Update posixAccount: $uid\n"; + `install -dD -m0701 -o$uidNumber:$gidNumber $home`; + #`install -d -m0700 -o$uidNumber:$gidNumber $home/.ssh`; + #`install -d -m0751 -o$uidNumber:$gidNumber $home/.public_html`; + print "\tEntry ".$entry->dn()." updated\n"; +} + +# Get ssh keys and place to system directory +sub strongAuthenticationUser +{ + my $entry = shift; + my $uid = ($entry->get_value('uid'))[0]; + open(KEYS, "> $KEYS_DIR/$uid"); + print KEYS $_ foreach ($entry->get_value('userCertificate;binary')); +} + +# Create mailbox if need +sub inetLocalMailRecipient +{ + my $entry = shift; + my $uid = ($entry->get_value('uid'))[0]; + my $mail = ($entry->get_value('mailLocalAddress'))[0]; + my $addr = ($entry->get_value('mailRoutingAddress'))[0]; + my $uidNumber = ($entry->get_value('uidNumber'))[0]; + my $mailbox = "$MAIL_DIR/$uid"; + + print "Update inetLocalMailRecipient: $mail\n"; + if( $uid eq $addr ) + { + if( -f "$mailbox" ) + { + print "Warning: mailbox $mailbox alredy exists. No changes.\n"; + } else { + `install -m660 -o$uidNumber -gmail /dev/null $mailbox`; + } + } + print "\tEntry ".$entry->dn()." updated\n"; +} + +sub disassemble +{ + my $entry = shift; + + foreach my $attr ($entry->get_value('objectClass')) + { + if( $attr eq "posixAccount" ) { + posixAccount($entry); + } elsif( $attr eq "inetLocalMailRecipient" ) { + inetLocalMailRecipient($entry); + } elsif( $attr eq "strongAuthenticationUser" ) { + strongAuthenticationUser($entry); + } elsif( $attr eq "gosaMailAccount" ) { + $virtuals++; + } + } +} + +# +# Start main process +# + +# Read timestamp from file +my $ts = getTS; + +$ldap = anonBind; +$mesg = $ldap->search( + base => $LDAP_BASE, + filter => "(&(modifyTimestamp>=$ts)(!(objectClass=gosaUserTemplate)))" +); + +# Put timestamp to file +putTS; + +# Work if changes is present +if($mesg->count > 0) +{ + print "Processing records modified after $ts\n\n"; + + foreach my $entry ($mesg->all_entries) + { + disassemble($entry); + } + rebuildVirtuals if $virtuals; +} diff --git a/contrib/scripts/goQuota.pl b/contrib/scripts/goQuota.pl new file mode 100644 index 000000000..cceeffa90 --- /dev/null +++ b/contrib/scripts/goQuota.pl @@ -0,0 +1,294 @@ +#!/usr/bin/perl +# +# Parse squid log and write current traffic usage by users into cache +# +# Igor Muratov +# +# $Id: goQuota.pl,v 1.4 2005/04/03 00:46:14 migor-guest Exp $ +# + +use strict; +use Time::Local; +use Net::LDAP; +use DB_File; +use POSIX qw(strftime); + +my $debug = 0; +$|=1; + +my $LDAP; +my $LDAP_HOST = "localhost"; +my $LDAP_PORT = "389"; +my $LDAP_BASE = "ou=People,dc=example,dc=com"; + +my $ACCESS_LOG = '/var/log/squid/access.log'; +my $CACHE_FILE = '/var/spool/squid/quota.db'; +my $DEFAULT_PERIOD = 'm'; +my $FORMAT = "A16 A5 S S L A5 L L L"; + +my %cache; +my @lines; + +sub timestamp +{ + return strftime("%a %b %X goQuota[$$]: ", localtime); +} + +sub anonBind +{ + my $ldap = Net::LDAP->new( $LDAP_HOST, port => $LDAP_PORT ); + if($ldap) + { + my $mesg = $ldap->bind(); + $mesg->code && warn timestamp, "Can't bind to ldap://$LDAP_HOST:$LDAP_PORT:", $mesg->error, "\n"; + return $ldap; + } + else + { + warn timestamp, "Can't connect to ldap://$LDAP_HOST:$LDAP_PORT\n"; + return undef; + } +} + +# Retrive users's data from LDAP +sub update_userinfo +{ + my $user = shift; + my $uid = $user->{uid}; + + return undef unless $LDAP; + + # User unknown or cache field is expired + my $result = $LDAP->search( base=>$LDAP_BASE, + filter=>"(&(objectClass=gosaProxyAccount)(uid=$uid))", + attrs=>[ + 'uid', + 'gosaProxyAcctFlags', + 'gosaProxyQuota', + 'gosaProxyQuotaPeriod', + 'gosaProxyWorkingStop', + 'gosaProxyWorkingStart', + 'modifyTimestamp' + ] + ); + $result->code && warn timestamp, "Failed to search: ", $result->error; + + # Get user's data + if($result->count) + { + my $entry = ($result->entries)[0]; + + $user->{uid} = ($entry->get_value('uid'))[0]; + $user->{modifyTimestamp} = ($entry->get_value('modifyTimestamp'))[0]; + $user->{gosaProxyWorkingStart} = ($entry->get_value('gosaProxyWorkingStart'))[0]; + $user->{gosaProxyWorkingStop} = ($entry->get_value('gosaProxyWorkingStop'))[0]; + $user->{gosaProxyAcctFlags} = ($entry->get_value('gosaProxyAcctFlags'))[0]; + + my ($quota, $unit) = ($entry->get_value('gosaProxyQuota'))[0] =~ /(\d+)(\S)/g; + $user->{gosaProxyQuota} = $quota; + $user->{gosaProxyQuota} *= 1024 if $unit =~ /[Kk]/; + $user->{gosaProxyQuota} *= 1048576 if $unit =~ /[Mm]/; + $user->{gosaProxyQuota} *= 1073741824 if $unit =~ /[Gg]/; + + $user->{gosaProxyQuotaPeriod} = ($entry->get_value('gosaProxyQuotaPeriod'))[0] || $DEFAULT_PERIOD; + # Return + warn timestamp, "User $uid found in LDAP.\n"; + return 1; + } else { + # Unknown user + warn timestamp, "User $uid does not exists in LDAP.\n"; + $user->{uid} = $uid; + $user->{gosaProxyAcctFlags} = '[FTB]'; + $user->{gosaProxyQuota} = 0; + $user->{gosaProxyQuotaPeriod} = 'y'; + return 0; + } +} + +sub get_update +{ + my $ts = shift; + my %update; + my $result = $LDAP->search( base=>$LDAP_BASE, + filter=>"(&(objectClass=gosaProxyAccount)(modifyTimestamp>=$ts))", + attrs=>'uid' + ); + + # Get user's data + if($result->count) + { + my $entry = ($result->entries)[0]; + $update{($entry->get_value('uid'))[0]}++; + } + return %update; +} + +# Check quota +sub update_quota +{ + my $user = shift; + my $uid = $user->{uid}; + + my $period = 0; + $period = 3600 if $user->{gosaProxyQuotaPeriod} eq 'h'; + $period = 86400 if $user->{gosaProxyQuotaPeriod} eq 'd'; + $period = 604800 if $user->{gosaProxyQuotaPeriod} eq 'w'; + $period = 2592000 if $user->{gosaProxyQuotaPeriod} eq 'm'; + $period = 220752000 if $user->{gosaProxyQuotaPeriod} eq 'y'; + + if($user->{lastRequest} - $user->{firstRequest} > $period) + { + if($user->{trafficUsage} > $user->{gosaProxyQuota}) + { + warn timestamp, "Reduce quota for $uid while $period seconds.\n"; + $user->{trafficUsage} -= $user->{gosaProxyQuota}; + $user->{firstRequest} += $period; + } + else + { + warn timestamp, "Restart quota for $uid.\n"; + $user->{trafficUsage} = 0; + $user->{firstRequest} = $user->{lastRequest}; + } + } +} + +sub dump_data +{ + my $user = shift; + print "User: ",$user->{uid},"\n"; + print "\t",$user->{modifyTimestamp},"\n"; + print "\t",$user->{gosaProxyAcctFlags},"\n"; + print "\t",$user->{gosaProxyWorkingStart},"\n"; + print "\t",$user->{gosaProxyWorkingStop},"\n"; + print "\t",$user->{gosaProxyQuota},"\n"; + print "\t",$user->{gosaProxyQuotaPeriod},"\n"; + print "\t",$user->{trafficUsage},"\n"; + print "\t",$user->{firstRequest},"\n"; + print "\t",$user->{lastRequest},"\n"; +} + +sub unpack_user +{ + my $uid = shift; + my $user; + + $user->{uid} = $uid; + ( + $user->{modifyTimestamp}, + $user->{gosaProxyAcctFlags}, + $user->{gosaProxyWorkingStart}, + $user->{gosaProxyWorkingStop}, + $user->{gosaProxyQuota}, + $user->{gosaProxyQuotaPeriod}, + $user->{trafficUsage}, + $user->{firstRequest}, + $user->{lastRequest} + ) = unpack($FORMAT, $cache{$uid}); + + return $user; +} + +sub pack_user +{ + my $user = shift; + + $cache{$user->{uid}} = pack( + $FORMAT, + $user->{modifyTimestamp}, + $user->{gosaProxyAcctFlags}, + $user->{gosaProxyWorkingStart}, + $user->{gosaProxyWorkingStop}, + $user->{gosaProxyQuota}, + $user->{gosaProxyQuotaPeriod}, + $user->{trafficUsage}, + $user->{firstRequest}, + $user->{lastRequest} + ); +} + +#-------------------------------------- +$LDAP = anonBind or die timestamp, "No lines processed.\n"; + +# This is a first time parsing? +my $firstStart = 1; +$firstStart = 0 if -e $CACHE_FILE; + +# Open log file and cache +my $cache = tie(%cache, 'DB_File', $CACHE_FILE, O_CREAT|O_RDWR); +my $log = tie(@lines, 'DB_File', $ACCESS_LOG, O_RDWR, 0640, $DB_RECNO) + or die "Cannot open file $ACCESS_LOG: $!\n"; + +# Mark users which updated in LDAP +my %updated; +if(! $firstStart) +{ + my $ts = strftime("%Y%m%d%H%M%SZ", gmtime); + %updated = get_update($cache{MODIFY_TIMESTAMP} || "19700101000000Z"); + + my @count = %updated; + $cache{MODIFY_TIMESTAMP} = $ts if $#count; + + foreach my $u (keys %updated) + { + warn timestamp, "User $u has been updated in LDAP. Refresh data.\n"; + my $user = unpack_user($u); + update_userinfo($user); + pack_user($user); + } +} + +# Processing log file +my $index = $cache{TIMESTAMP} < (split / +/, $lines[0])[0] + ? 0 : $cache{STRING_NUMBER}; +warn timestamp, "Cache update start at line $index.\n"; +while($lines[$index]) +{ + # There are array named lines with elements + # 0 - line timestamp + # 1 - ?? (unused) + # 2 - client's IP (unused) + # 3 - squid's cache status TEXT_CODE/num_code (unused) + # 4 - object size in bytes + # 5 - metod (unused) + # 6 - URL (unused) + # 7 - username + # 8 - load status TYPE/source + # 9 - mime type (unused) + my @line = split / +/, $lines[$index++]; + + # Skip line if have no incoming traffic + (my $errcode = $line[8]) =~ s/\/\S+//; + next if $errcode eq "NONE"; + + # Get data from cache + (my $uid = $line[7]) =~ s/^-$/anonymous/; + my $user = unpack_user($uid); + + # Update user info from LDAP if need + if ( !exists($cache{$uid}) ) + { + warn timestamp, "User $uid is not in cache. Go to search LDAP.\n"; + update_userinfo($user); + } + + # Update traffic info + $user->{trafficUsage} += $line[4]; + $user->{firstRequest} |= $line[0]; + $user->{lastRequest} = $line[0]; + + update_quota($user); + pack_user($user); + + dump_data($user) if $debug; + + $cache{TIMESTAMP} = $user->{lastRequest}; +} + +warn timestamp, $index - $cache{STRING_NUMBER}, " new lines processed.\n"; +$cache{STRING_NUMBER} = $index; + +$LDAP->unbind; +untie @lines; +untie %cache; + diff --git a/contrib/scripts/goQuotaView.pl b/contrib/scripts/goQuotaView.pl new file mode 100644 index 000000000..7dd14972d --- /dev/null +++ b/contrib/scripts/goQuotaView.pl @@ -0,0 +1,91 @@ +#!/usr/bin/perl +# +# Show user info from cache +# +# Igor Muratov +# +# $Id: goQuotaView.pl,v 1.2 2005/04/03 00:46:14 migor-guest Exp $ +# + +use strict; +use DB_File; + +my $CACHE_FILE = '/var/spool/squid/quota.db'; +my $FORMAT = "A16 A5 S S L A5 L L L"; + +my %cache; + +sub min2time +{ + my $min = shift; + return sprintf("%2d:%02d",$min/60,$min%60); +} + +sub show_user +{ + my $uid = shift; + + my ( + $modifyTimestamp, $gosaProxyAcctFlags, $gosaProxyWorkingStart, + $gosaProxyWorkingStop, $gosaProxyQuota, $gosaProxyQuotaPeriod, + $trafficUsage, $firstRequest, $lastRequest + ) = unpack($FORMAT, $cache{$uid}); + + my ($ts_Y, $ts_M, $ts_D, $ts_h, $ts_m, $ts_s) + = $modifyTimestamp =~ /(\d\d\d\d)(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)/g; + my $ts = "$ts_D\.$ts_M\.$ts_Y $ts_h:$ts_m:$ts_s GMT"; + + $gosaProxyAcctFlags =~ s/[\[\]]//g; + $gosaProxyAcctFlags =~ s/F/unwanted content, /g; + $gosaProxyAcctFlags =~ s/T/work time, /g; + $gosaProxyAcctFlags =~ s/B/traffic/g; + + $gosaProxyQuotaPeriod =~ s/h/hour/; + $gosaProxyQuotaPeriod =~ s/d/day/; + $gosaProxyQuotaPeriod =~ s/w/week/; + $gosaProxyQuotaPeriod =~ s/m/month/; + $gosaProxyQuotaPeriod =~ s/y/year/; + + $firstRequest = localtime($firstRequest); + $lastRequest = localtime($lastRequest); + + printf "User: %s + LDAP modify timestamp\t%s + Limited by\t\t%s + Work time from\t%s + Work time to\t\t%s + Quota period\t\tOne %s + Traffic quota size\t%s bytes + Current traffic usage\t%s bytes + First request time\t%s + Last request time\t%s\n", + $uid, $ts, $gosaProxyAcctFlags, min2time($gosaProxyWorkingStart), + min2time($gosaProxyWorkingStop), $gosaProxyQuotaPeriod, $gosaProxyQuota, + $trafficUsage, $firstRequest, $lastRequest; +} + +#------------------------ +tie(%cache, 'DB_File', $CACHE_FILE, O_CREAT|O_RDWR); + +if($ARGV[0]) +{ + show_user($ARGV[0]); +} +else +{ + print "eee\n"; + printf "LAST STRING: %d\nLAST CACHE UPDATE: %s\nLDAP LAST CHANGE: %s\n", + $cache{STRING_NUMBER}, + time2str("%d.%m.%Y %H:%M:%S",$cache{TIMESTAMP}), + $cache{MODIFY_TIMESTAMP}; + + foreach my $user (keys %cache) + { + next if $user eq "TIMESTAMP"; + next if $user eq "STRING_NUMBER"; + next if $user eq "MODIFY_TIMESTAMP"; + show_user($user); + } +} + +untie %cache; diff --git a/contrib/scripts/goSquid.pl b/contrib/scripts/goSquid.pl new file mode 100644 index 000000000..b91db163b --- /dev/null +++ b/contrib/scripts/goSquid.pl @@ -0,0 +1,136 @@ +#!/usr/bin/perl +# +# Squid redirect programm for GOsa project +# +# Igor Muratov +# +# $Id: goSquid.pl,v 1.3 2005/04/03 00:46:14 migor-guest Exp $ +# + +use strict; +use POSIX qw(strftime); +use Time::Local; +use DB_File; + +my $debug = 0; +$|=1; + +my $DEFAULT_URL = "http://www.squid-cache.org/Squidlogo2.gif"; +my $black_list = '/var/spool/squid/domains.db'; +my $cache_file = '/var/spool/squid/quota.db'; +my $format = "A16 A5 S S L A5 L L L"; + +my %cache; +my %blacklist; + +sub timestamp +{ + return strftime("%a %b %X goSquid[$$]: ", localtime); +} + +# Check url in our blacklist +sub unwanted_content +{ + my $url = shift; + my $host = (split(/\//, $url))[2]; + + return 1 if exists($blacklist{$host}) and $blacklist{$host} > 0; + return undef; +} + +# Check work time limit +sub work_time +{ + my $user = shift; + my ($min,$hour) = (localtime)[1,2]; + my $time = $hour * 60 + $min; + + return 1 if $user->{gosaProxyWorkingStart} < $time and $user->{gosaProxyWorkingStop} > $time; + return undef; +} + +sub quota_exceed +{ + my $user = shift; + + return 1 if $user->{trafficUsage} > $user->{gosaProxyQuota}; + return undef; +} + +sub check_access +{ + my ($user, $url) = @_; + + $user->{timed} = 0; + $user->{quoted} = 0; + $user->{filtered} = 0; + + if($user->{gosaProxyAcctFlags} =~ m/[F]/) + { + # Filter unwanted content + $user->{filtered} = 1 if unwanted_content($url); + } + if($user->{gosaProxyAcctFlags} =~ m/[T]/) + { + # Filter unwanted content during working hours only + $user->{timed} = 1 if work_time($user); + } + if($user->{gosaProxyAcctFlags} =~ m/B/) + { + $user->{quoted} = 1 if quota_exceed($user); + } +} + +#-------------------------------------- +while (<>) { + my ($url, $addr, $uid, $method) = split; + my $time = timelocal(localtime); + tie(%blacklist, 'DB_File', $black_list, O_RDONLY); + tie(%cache, 'DB_File', $cache_file, O_RDONLY); + + if( exists($cache{$uid}) ) + { + my $user; + $user->{uid} = $uid; + ( + $user->{modifyTimestamp}, + $user->{gosaProxyAcctFlags}, + $user->{gosaProxyWorkingStart}, + $user->{gosaProxyWorkingStop}, + $user->{gosaProxyQuota}, + $user->{gosaProxyQuotaPeriod}, + $user->{trafficUsage}, + $user->{firstRequest}, + $user->{lastRequest} + ) = unpack($format, $cache{$uid}); + + check_access($user, $url); + + if($user->{'disabled'}) + { + warn timestamp, "Access denied for unknown user $uid\n"; + } + elsif($user->{'timed'}) + { + warn timestamp, "Access denied by worktime for $uid\n"; + } + elsif($user->{'quoted'}) + { + warn timestamp, "Access denied by quota for $uid\n"; + } + elsif($user->{'filtered'}) + { + warn timestamp, "Content $url filtered for $uid\n"; + } + else + { + print "$url\n"; + next; + } + } + + untie %blacklist; + untie %cache; + + print "$DEFAULT_URL\n"; +} diff --git a/contrib/scripts/mkHash.pl b/contrib/scripts/mkHash.pl new file mode 100644 index 000000000..84f4bd13c --- /dev/null +++ b/contrib/scripts/mkHash.pl @@ -0,0 +1,20 @@ +#!/usr/bin/perl + +use strict; +use DB_File; + +my $db = "/var/spool/squid/domains.db"; +my %db; + +tie(%db, 'DB_File', $db); + +while(<>) +{ + chomp; + unless(exists($db{$_})) + { + $db{$_} = 1; + } +} + +untie %db; diff --git a/contrib/scripts/start-gosa.sh b/contrib/scripts/start-gosa.sh new file mode 100755 index 000000000..622a6cbda --- /dev/null +++ b/contrib/scripts/start-gosa.sh @@ -0,0 +1,146 @@ +#!/bin/sh +# Start script for GOsa to be started via mozilla + +# Check for presence of gosa profile +if [ ! -d $HOME/.mozilla/gosa ]; then + mozilla -CreateProfile gosa + config=`echo $HOME/.mozilla/gosa/*/` + + cat << EOF > $config/prefs.js +# Mozilla User Preferences + +/* Do not edit this file. + * + * If you make changes to this file while the browser is running, + * the changes will be overwritten when the browser exits. + * + * To make a manual change to preferences, you can visit the URL about:config + * For more information, see http://www.mozilla.org/unix/customizing.html#prefs + */ + +user_pref("browser.search.defaultengine", "engine:///usr/lib/mozilla/searchplugins/google.src"); +user_pref("browser.startup.homepage", "http://vserver-02/gosa/index.php"); +user_pref("browser.startup.homepage_override.mstone", "rv:1.6"); +user_pref("browser.toolbars.showbutton.bookmarks", false); +user_pref("browser.toolbars.showbutton.home", false); +user_pref("browser.toolbars.showbutton.print", false); +user_pref("browser.toolbars.showbutton.search", false); +user_pref("intl.accept_languages", "de"); +user_pref("intl.charsetmenu.browser.cache", "ISO-8859-1"); +user_pref("plugin.soname.list", "libXt.so:libXext.so"); +user_pref("signon.SignonFileName", "84795799.s"); +user_pref("wallet.SchemaValueFileName", "84795819.w"); +user_pref("security.warn_submit_insecure", false); +EOF + + cat << EOF > $config/84795799.s +#2c +http://vserver-02 +. +EOF + + cat << EOF > $config/localstore.rdf + + + +EOF +fi + + +# Start mozilla with GOsa profile +mozilla -P gosa + diff --git a/contrib/shells b/contrib/shells new file mode 100644 index 000000000..e8805ec11 --- /dev/null +++ b/contrib/shells @@ -0,0 +1,6 @@ +/bin/ash +/bin/bash +/bin/csh +/bin/sh +/bin/ksh +/bin/tcsh diff --git a/contrib/vacation_example.txt b/contrib/vacation_example.txt new file mode 100644 index 000000000..58cad1555 --- /dev/null +++ b/contrib/vacation_example.txt @@ -0,0 +1,9 @@ +DESC: Funny message +I am currently out at a job interview and will reply to you if I fail +to get the position. Be prepared for my mood. In urgent cases you can +reach me on the cell phone via %mobile or write a snail mail to: + +%homePostalAddress + +Greetings, +%givenName %sn diff --git a/debian/README.debian b/debian/README.debian new file mode 100644 index 000000000..c4894b137 --- /dev/null +++ b/debian/README.debian @@ -0,0 +1,17 @@ +GOsa 2.1 for DEBIAN (woody) +---------------------------- + +Add this lines to your sources.list: +deb ftp://oss.gonicus.de/pub/gosa/debian ./ + +Optionally, if you want to do a complete setup with +cyrus etc., add this ones, too: +deb http://people.debian.org/~hmh/woody/ hmh/cyrus/ +deb http://people.debian.org/~hmh/woody/ hmh/misc/ + +Install gosa/gosa-schema via dselect, use the php4 packages +provided by GONICUS. They are prepatched to have needed +get_acl IMAP functionality. + +---- +Cajus Pollmeier Fri 16 May 2003 11:26:51 +0200 diff --git a/debian/apache.conf b/debian/apache.conf new file mode 100644 index 000000000..353b04b3a --- /dev/null +++ b/debian/apache.conf @@ -0,0 +1,4 @@ +# Configuration for GOsa using php4. + +# Set alias to gosa +Alias /gosa /usr/share/gosa/html diff --git a/debian/changelog b/debian/changelog new file mode 100644 index 000000000..76a07121e --- /dev/null +++ b/debian/changelog @@ -0,0 +1,132 @@ +gosa (2.3.1-1) unstable; urgency=low + + * New upstream release + + -- Cajus Pollmeier Thu, 3 Mar 2005 13:59:27 +0100 + +gosa (2.3-1) unstable; urgency=low + * New upstream release + * Added array_uniq to remove double entries in uid selectbox + (Closes:#293444) + * Adjusted shadow attributes to be days since 1970, not + seconds. (Closes: #293148) + * Corrected option to allow user password changes from samba + clients (Closes: #284716) + + -- Cajus Pollmeier Tue, 1 Feb 2005 15:42:36 +0100 + +gosa (2.2-1) unstable; urgency=low + + * New upstream release (Indirectly closes: #281707) + + -- Cajus Pollmeier Mon, 22 Nov 2004 08:46:20 +0200 + +gosa (2.1.3-1) unstable; urgency=low + + * New upstream release + + -- Cajus Pollmeier Fri, 23 Jul 2004 07:29:56 +0200 + +gosa (2.1.2-1) unstable; urgency=low + + * New upstream release + * Removed not required dependencies to base packages (Closes: #259404) + + -- Cajus Pollmeier Fri, 16 Jul 2004 09:57:30 +0200 + +gosa (2.1.1-3) unstable; urgency=low + + * Removed dependency to wwwconfig-common, added alternative dependency + apache2 php module to get rid of apache 1.x.x dependencies. + (Closes: #253851) + * Changed dependency from exim to exim4 (Closes: #255344) + -- Cajus Pollmeier Sat, 3 Jul 2004 10:55:48 +0200 + +gosa (2.1.1-2) unstable; urgency=low + + * Solved problem with upper/lowercase uid's + * Merged CVS fix that does an incasesensitive check for is_account + + -- Cajus Pollmeier Wed, 19 May 2004 16:48:30 +0200 + +gosa (2.1.1-1) unstable; urgency=low + + * New upstream release + + -- Cajus Pollmeier Sat, 24 Apr 2004 21:14:21 +0200 + +gosa (2.1-1) unstable; urgency=low + + * New upstream release + + -- Cajus Pollmeier Sun, 11 Jan 2004 22:30:37 +0100 + +gosa (2.0.1-2) unstable; urgency=low + + * Added various fixes from CVS. See changelog. + + -- Cajus Pollmeier Tue, 23 Dec 2003 09:31:20 +0100 + +gosa (2.0.1-1) unstable; urgency=low + + * New upstream release + * Fixed debconf script which destroyed the uid/ridbase + values of gosa.conf + + -- Cajus Pollmeier Wed, 3 Dec 2003 21:16:02 +0100 + +gosa (2.0-1) unstable; urgency=low + + * New upstream release + + -- Cajus Pollmeier Mon, 10 Nov 2003 09:51:16 +0100 + +gosa (2.0rc2-1) unstable; urgency=low + + * New upstream release which fixes many bugs + + -- Cajus Pollmeier Thu, 23 Oct 2003 15:15:53 +0200 + +gosa (2.0rc1-2) unstable; urgency=low + + * Minor fixes to GOsa: + - corrected mistakenly copied ui object in functions.inc + - fixed errors when activating new terminals + - removed krb warnings in class_user.inc + * Fixed installation of distribution files to /usr/share/gosa + + -- Cajus Pollmeier Thu, 16 Oct 2003 15:17:34 +0200 + +gosa (2.0rc1-1) unstable; urgency=low + + * New upstream release which fixes these issues + - Switched to XML based gosa.conf + - Cleaned all plugins, moved to children of plugin.conf + - Moved back to gettext for translations + - Added hooks for pre-/post-install scripts + - Cleaned LDAP class + - Added workarounds for MS-IE (>5.5) to render transparent + PNGs in a correct way + - Redesigned login screen / some plugins + - Added hooks for eGOsa, which is a java applet based + browsing tool + - Switched from user based ACLs to group based ACLs, + removed standalone ACL plugin in favor of new group tab. + - Fixed samba2 rid generation (btw. still missing is sid + support for samba3. But this will go into the final.) + - Fixed many minor bugs + - Introduced simple theming support + - Added 'dn'-renaming for accounts + * Changed suggests to requires + + -- Cajus Pollmeier Thu, 9 Oct 2003 08:09:59 +0200 + +gosa (1.99.97-1) unstable; urgency=low + + * Beta version packaging + + -- Cajus Pollmeier Fri, 16 May 2003 11:20:59 +0200 + +Local variables: +mode: debian-changelog +End: diff --git a/debian/conffiles b/debian/conffiles new file mode 100644 index 000000000..f2adc9a17 --- /dev/null +++ b/debian/conffiles @@ -0,0 +1,7 @@ +/etc/gosa/gosa.conf +/etc/gosa/apache.conf +/etc/gosa/sieve-discard.txt +/etc/gosa/sieve-header.txt +/etc/gosa/sieve-mailsize.txt +/etc/gosa/sieve-spam.txt +/etc/gosa/sieve-vacation.txt diff --git a/debian/control b/debian/control new file mode 100644 index 000000000..023164019 --- /dev/null +++ b/debian/control @@ -0,0 +1,27 @@ +Source: gosa +Section: web +Priority: optional +Maintainer: Cajus Pollmeier +Build-Depends-Indep: debhelper(>= 4.1.16) +Standards-Version: 3.6.1.0 + +Package: gosa +Architecture: all +Depends: php4 (>= 4.1.1-1) | libapache2-mod-php4, apache | apache-ssl | apache2-mpm-worker | apache2-mpm-threadpool | apache2-mpm-prefork | apache2-mpm-perchild, exim4 | mail-transport-agent, php4-cgi | libapache2-mod-php4, php4-gd, php4-imap, php4-ldap, php4-mcrypt, php4-mhash, php4-mysql, php4-imagick | imagemagick (>= 5.4.4.5-1), fping, libcrypt-smbhash-perl +Suggests: cupsys-server, cyrus21-imapd (>= 2.1.11), postfix-ldap, php4-kadm5, php4-cups, etherwake, slapd, gosa-schema +Description: Web Based LDAP Administration Program + Provided is access to posix, shadow, samba, proxy, fax, pureftp and + kerberos accounts. It is able to manage the postfix/cyrus server + combination and can write user adapted sieve scripts. + . + GOsa is a combination of system-administrator and end-user web + interface, designed to handle LDAP based setups. + +Package: gosa-schema +Architecture: all +Depends: slapd +Description: LDAP schema for GOsa + This package includes the LDAP schema needed by GOsa. + . + GOsa is a combination of system-administrator and end-user web + interface, designed to handle LDAP based setups. diff --git a/debian/copyright b/debian/copyright new file mode 100644 index 000000000..067f232be --- /dev/null +++ b/debian/copyright @@ -0,0 +1,17 @@ +This package was debianized by Cajus Pollmeier on +Fri, 16 May 2003 11:20:59 +0200 + +It was downloaded from ftp://oss.gonicus.de/pub/gosa + +Copyright: + + + Copyright (C) 2001-2003 Cajus Pollmeier + + 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. + + The license is accessible under: /usr/share/common-licenses/GPL-2 + diff --git a/debian/gosa-schema.dirs b/debian/gosa-schema.dirs new file mode 100644 index 000000000..46d4416a8 --- /dev/null +++ b/debian/gosa-schema.dirs @@ -0,0 +1 @@ +etc/ldap/schema diff --git a/debian/gosa.conffiles b/debian/gosa.conffiles new file mode 100644 index 000000000..e70f8de40 --- /dev/null +++ b/debian/gosa.conffiles @@ -0,0 +1,2 @@ +/etc/gosa/gosa.conf +/etc/gosa/apache.conf diff --git a/debian/gosa.dirs b/debian/gosa.dirs new file mode 100644 index 000000000..04b3d79e4 --- /dev/null +++ b/debian/gosa.dirs @@ -0,0 +1,5 @@ +etc/gosa +usr/share/gosa +usr/share/doc/gosa +usr/share/doc/gosa/contrib +var/spool/gosa diff --git a/debian/gosa.postinst b/debian/gosa.postinst new file mode 100755 index 000000000..66999d773 --- /dev/null +++ b/debian/gosa.postinst @@ -0,0 +1,51 @@ +#! /bin/sh +# GOsa postinst script + +# We exit unless the package is being configured +case "$1" in + abort*upgrade) exit 0;; + abort*remove) exit 0;; + abort*deconfigure) exit 0;; + configure) ;; + *) exit 0; +esac + +# Get apache versions running +servers="" +for srv in apache apache-ssl apache2; do + if [ -x /usr/sbin/$srv ]; then + servers="$srv $servers" + fi +done + +for server in $servers; do + + # Set ID's + WEBUSER="www-data" + WEBGROUP="www-data" + + # Copy GOsa apache.conf to conf.d directories + if [ ! -f /etc/$server/conf.d/gosa.conf ]; then + echo "Making /gosa available in /etc/$server/conf.d" + + # Add GOsa include file + cp /etc/gosa/apache.conf /etc/$server/conf.d/gosa.conf + fi + +done + +# Make compile directory writeable for webuser +chown root.$WEBGROUP -R /var/spool/gosa +chmod 770 -R /var/spool/gosa + +# Add links for safe mode +for link in /usr/bin/convert /usr/bin/lpstat; do + [ ! -f $link ] && ln -sf $link /usr/share/gosa/bin/${link##*/} +done + +# Finally restart servers +for server in $servers; do + /etc/init.d/$server reload || /bin/true +done + +exit 0 diff --git a/debian/gosa.postrm b/debian/gosa.postrm new file mode 100644 index 000000000..ebce79099 --- /dev/null +++ b/debian/gosa.postrm @@ -0,0 +1,70 @@ +#! /bin/sh +# postrm script for GOsa +# + +case "$1" in + purge|remove) + ## PURGE!!! + if [ "$1" = "purge" ] ; then + if [ -d /var/spool/gosa ] ; then + echo "Removing /var/spool/gosa as requested." + rm -Rf /var/spool/gosa + fi + fi + + # Get apache versions running + servers="" + for srv in apache apache-ssl; do + dpkg -s $srv | grep -q "^Status:.*not-installed" + if [ $? -eq 1 ]; then + servers="$srv $servers" + fi + done + + # Adapt server configs + for server in $servers ; do + # remove GOsa include + includefile=/etc/gosa/apache.conf + + case "$1" in + purge) + if [ -e /usr/share/wwwconfig-common/apache-uninclude_all.sh ] ; then + . /usr/share/wwwconfig-common/apache-uninclude_all.sh + if [ "$status" = "purge" ] ; then + restart="$restart $server" + fi + else + echo "Can not unconfigure gosa from apache because wwwconfig-common is removed." + fi + ;; + + remove) + if [ -e /usr/share/wwwconfig-common/apache-cominclude_all.sh ] ; then + . /usr/share/wwwconfig-common/apache-cominclude_all.sh + if [ "$status" = "comment" ] ; then + restart="$restart $server" + fi + else + echo "Can not unconfigure imp from apache because wwwconfig-common is removed." + fi + ;; + esac + done + + # Restart servers + /usr/share/wwwconfig-common/restart.sh + + ;; + upgrade|failed-upgrade|abort-install|abort-upgrade|disappear) + + ;; + + *) + echo "postrm called with unknown argument \`$1'" >&2 + exit 0 + ;; +esac + +#DEBHELPER# + +exit 0 diff --git a/debian/rules b/debian/rules new file mode 100755 index 000000000..2c7a9375a --- /dev/null +++ b/debian/rules @@ -0,0 +1,92 @@ +#!/usr/bin/make -f +# Made with the aid of dh_make, by Craig Small +# Sample debian/rules that uses debhelper. GNU copyright 1997 by Joey Hess. +# Some lines taken from debmake, by Cristoph Lameter. + +export DH_COMPAT=3 +# Uncomment this to turn on verbose mode. +#export DH_VERBOSE=1 + +build: + #**** Off we go... **** + +clean: + dh_testdir + rm -f install-stamp + -rm -f debian/files + -rm -f debian/substvars + dh_clean + +install: install-stamp +install-stamp: + dh_testdir + dh_testroot + dh_clean -k + dh_installdirs + + for i in `cd gosa; ls | grep -v debian`; do \ + cp -R $$i debian/gosa/usr/share/gosa ; \ + done + -find debian/gosa -type d -name "CVS" -exec rm -rf {} \; + -cp -R debian/gosa/usr/share/gosa/contrib/* debian/gosa/usr/share/doc/gosa/contrib/ + -cp debian/gosa/usr/share/gosa/contrib/openldap/go*.schema debian/gosa-schema/etc/ldap/schema + -mkdir debian/gosa/usr/share/doc/gosa/manual + -mkdir -p debian/gosa-schema/usr/share/doc/gosa-schema + -cp -R debian/gosa/usr/share/gosa/doc/* debian/gosa/usr/share/doc/gosa/manual + -cp -R INSTALL debian/gosa/usr/share/doc/gosa/README.INSTALL + -gzip -c9 debian/changelog > debian/gosa/usr/share/doc/gosa/changelog.Debian.gz + -gzip -c9 debian/changelog > debian/gosa-schema/usr/share/doc/gosa-schema/changelog.Debian.gz + -gzip -c9 Changelog > debian/gosa/usr/share/doc/gosa/changelog.gz + -cp AUTHORS TODO README FAQ debian/gosa/usr/share/doc/gosa/ + -rm debian/gosa/usr/share/gosa/README debian/gosa/usr/share/gosa/INSTALL + -rm debian/gosa/usr/share/gosa/AUTHORS debian/gosa/usr/share/gosa/Changelog + -rm debian/gosa/usr/share/gosa/COPYING debian/gosa/usr/share/gosa/TODO + -rm debian/gosa/usr/share/gosa/FAQ + -rm debian/gosa/usr/share/gosa/doxygen.conf + -mkdir -p debian/gosa/var/spool/gosa/compile + -mkdir -p debian/gosa/var/spool/gosa/config + -mkdir -p debian/gosa/var/spool/gosa/cache + -rm -rf debian/gosa/usr/share/gosa/compile + -cp -R debian/apache.conf debian/gosa/etc/gosa/apache.conf + -mkdir -p debian/gosa/etc/gosa/vacation + -mv plugins/personal/mail/sieve-*.txt debian/gosa/etc/gosa + -mv contrib/shells debian/gosa/etc/gosa + -rm -rf debian/gosa/usr/share/gosa/contrib + -rm -rf debian/gosa/usr/share/gosa/doc + -rm debian/gosa/usr/share/gosa/bin/gosa + -mkdir -p debian/gosa/usr/lib/gosa + -mv bin/* debian/gosa/usr/lib/gosa + -rm -rf debian/gosa/usr/share/gosa/gen_locale.sh + -rm -rf debian/gosa/usr/share/gosa/update.sh + -find debian/gosa -type f -exec chmod -x {} \; + + touch install-stamp + +binary-indep: install + dh_testdir + dh_testroot + dh_installdocs + dh_installcron + dh_installexamples +# dh_undocumented + dh_installman + dh_link + dh_strip +# dh_compress + dh_fixperms + dh_perl + dh_installdeb + dh_shlibdeps + + cd debian/gosa && find ./etc -type f -print | sed -e 's#^./#/#' > DEBIAN/conffiles + chmod 644 debian/gosa/DEBIAN/conffiles + + dh_gencontrol + dh_md5sums + dh_builddeb + +source diff: + @echo >&2 'source and diff are obsolete - use dpkg-source -b'; false + +binary: binary-indep +.PHONY: build install clean binary-indep binary diff --git a/doc/doxygen.conf b/doc/doxygen.conf new file mode 100644 index 000000000..194d2b3a3 --- /dev/null +++ b/doc/doxygen.conf @@ -0,0 +1,1101 @@ +# Doxyfile 1.3.2 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project +# +# All text after a hash (#) is considered a comment and will be ignored +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" ") + +#--------------------------------------------------------------------------- +# General configuration options +#--------------------------------------------------------------------------- + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded +# by quotes) that should identify the project. + +PROJECT_NAME = GOsa + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = 2.1 + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = doc + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch, +# Finnish, French, German, Greek, Hungarian, Italian, Japanese, Japanese-en +# (Japanese with English messages), Korean, Norwegian, Polish, Portuguese, +# Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian. + +OUTPUT_LANGUAGE = English + +# This tag can be used to specify the encoding used in the generated output. +# The encoding is not always determined by the language that is chosen, +# but also whether or not the output is meant for Windows or non-Windows users. +# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES +# forces the Windows encoding (this is the default for the Windows binary), +# whereas setting the tag to NO uses a Unix-style encoding (the default for +# all platforms other than Windows). + +USE_WINDOWS_ENCODING = NO + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = NO + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = NO + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = YES + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = NO + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all inherited +# members of a class in the documentation of that class as if those members were +# ordinary class members. Constructors, destructors and assignment operators of +# the base classes will not be shown. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = NO + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. It is allowed to use relative paths in the argument list. + +STRIP_FROM_PATH = + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# users are advised to set this option to NO. + +CASE_SENSE_NAMES = YES + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful is your file systems +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = YES + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like the Qt-style comments (thus requiring an +# explict @brief command for a brief description. + +JAVADOC_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the DETAILS_AT_TOP tag is set to YES then Doxygen +# will output the detailed description near the top, like JavaDoc. +# If set to NO, the detailed description appears after the member +# documentation. + +DETAILS_AT_TOP = NO + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# reimplements. + +INHERIT_DOCS = YES + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 8 + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= YES + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or define consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and defines in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources +# only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources +# only. Doxygen will then generate output that is more tailored for Java. +# For instance, namespaces will be presented as packages, qualified scopes +# will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = YES + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = YES + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp +# *.h++ *.idl *.odl *.cs + +FILE_PATTERNS = *.php *.inc + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = YES + +# The EXCLUDE tag can be used to specify files and/or directories that should +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used select whether or not files or directories +# that are symbolic links (a Unix filesystem feature) are excluded from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. + +EXCLUDE_PATTERNS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command , where +# is the value of the INPUT_FILTER tag, and is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. + +INPUT_FILTER = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C and C++ comments will always remain visible. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES (the default) +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = YES + +# If the REFERENCES_RELATION tag is set to YES (the default) +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = YES + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = NO + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If the tag is left blank doxygen +# will generate a default style sheet + +HTML_STYLESHEET = + +# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, +# files or namespaces will be aligned in HTML using tables. If set to +# NO a bullet list will be used. + +HTML_ALIGN_MEMBERS = YES + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output dir. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index at +# top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. + +DISABLE_INDEX = NO + +# This tag can be used to set the number of enum values (range [1..20]) +# that doxygen will group on one line in the generated HTML documentation. + +ENUM_VALUES_PER_LINE = 4 + +# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be +# generated containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, +# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are +# probably better off using the HTML help feature. + +GENERATE_TREEVIEW = NO + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = YES + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, a4wide, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = a4wide + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = NO + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = NO + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimised for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assigments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. This is useful +# if you want to understand what is going on. On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = NO + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_PREDEFINED tags. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# in the INCLUDE_PATH (see below) will be search if a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. + +PREDEFINED = + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all function-like macros that are alone +# on a line, have an all uppercase name, and do not end with a semicolon. Such +# function macros are typically used for boiler-plate code, and will confuse the +# parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::addtions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. +# Optionally an initial location of the external documentation +# can be added for each tagfile. The format of a tag file without +# this location is as follows: +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths or +# URLs. If a location is present for each tag, the installdox tool +# does not have to be run to correct the links. +# Note that each tag file must have a unique name +# (where the name does NOT include the path) +# If a tag file is not located in the directory in which doxygen +# is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base or +# super classes. Setting the tag to NO turns the diagrams off. Note that this +# option is superceded by the HAVE_DOT option below. This is only a fallback. It is +# recommended to install and use dot, since it yields more powerful graphs. + +CLASS_DIAGRAMS = YES + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = NO + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# the CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# colloborations diagrams in a style similiar to the OMG's Unified Modeling +# Language. + +UML_LOOK = NO + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = NO + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will +# generate a call dependency graph for every global function or class method. +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable call graphs for selected +# functions only using the \callgraph command. + +CALL_GRAPH = NO + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are png, jpg, or gif +# If left blank png will be used. + +DOT_IMAGE_FORMAT = png + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found on the path. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width +# (in pixels) of the graphs generated by dot. If a graph becomes larger than +# this value, doxygen will try to truncate the graph, so that it fits within +# the specified constraint. Beware that most browsers cannot cope with very +# large images. + +MAX_DOT_GRAPH_WIDTH = 1024 + +# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height +# (in pixels) of the graphs generated by dot. If a graph becomes larger than +# this value, doxygen will try to truncate the graph, so that it fits within +# the specified constraint. Beware that most browsers cannot cope with very +# large images. + +MAX_DOT_GRAPH_HEIGHT = 1024 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the +# graphs generated by dot. A depth value of 3 means that only nodes reachable +# from the root by following a path via at most 3 edges will be shown. Nodes that +# lay further from the root node will be omitted. Note that setting this option to +# 1 or 2 may greatly reduce the computation time needed for large code bases. Also +# note that a graph may be further truncated if the graph's image dimensions are +# not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH and MAX_DOT_GRAPH_HEIGHT). +# If 0 is used for the depth value (the default), the graph is not depth-constrained. + +MAX_DOT_GRAPH_DEPTH = 0 + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES + +#--------------------------------------------------------------------------- +# Configuration::addtions related to the search engine +#--------------------------------------------------------------------------- + +# The SEARCHENGINE tag specifies whether or not a search engine should be +# used. If set to NO the values of all tags below this one will be ignored. + +SEARCHENGINE = NO + +# The CGI_NAME tag should be the name of the CGI script that +# starts the search engine (doxysearch) with the correct parameters. +# A script with this name will be generated by doxygen. + +CGI_NAME = search.cgi + +# The CGI_URL tag should be the absolute URL to the directory where the +# cgi binaries are located. See the documentation of your http daemon for +# details. + +CGI_URL = + +# The DOC_URL tag should be the absolute URL to the directory where the +# documentation is located. If left blank the absolute path to the +# documentation, with file:// prepended to it, will be used. + +DOC_URL = + +# The DOC_ABSPATH tag should be the absolute path to the directory where the +# documentation is located. If left blank the directory on the local machine +# will be used. + +DOC_ABSPATH = + +# The BIN_ABSPATH tag must point to the directory where the doxysearch binary +# is installed. + +BIN_ABSPATH = /usr/local/bin/ + +# The EXT_DOC_PATHS tag can be used to specify one or more paths to +# documentation generated for other projects. This allows doxysearch to search +# the documentation for these projects as well. + +EXT_DOC_PATHS = diff --git a/doc/guide/admin/en/manual_gosa_en.tex b/doc/guide/admin/en/manual_gosa_en.tex new file mode 100644 index 000000000..4a9036bb6 --- /dev/null +++ b/doc/guide/admin/en/manual_gosa_en.tex @@ -0,0 +1,72 @@ +\documentclass[a4paper,english,10pt]{book} + +\usepackage[latin1]{inputenc} +\usepackage[T1]{fontenc} +\usepackage[pdftex]{graphicx} +\usepackage[english]{babel} +\usepackage{times} +\usepackage{multirow} +\usepackage[latex2html,backref,pdftitle={GOsa}]{hyperref} +\usepackage{html,color} +\usepackage{latexsym} +\usepackage{anysize} +\usepackage{float} +\usepackage{longtable} +\usepackage{verbatim} + +\author{Alejandro Escanero Blanco} +\title{System Management with GOsa } +\date{28-03-05} + +\marginsize{3cm}{2cm}{2.5cm}{2.5cm} + + +\begin{document} + +\maketitle +\newpage +\tableofcontents +\newpage +\listoffigures +\newpage +\listoftables +\newpage + +\chapter*{Preamble} + +\htmladdnormallink{GOsa}{http://gosa.gonicus.de}, was a project created in year 2001 by Cajus Pollmeier \htmladdnormallink{Cajus Pollmeier}{mailto://pollmeier@gonicus.de} + +In the 1.0 version GOsa was a an ambitious project, but badly focused. I entred as developer of the project in June of 2003 for the early versions of the branch 1.99.xx. +The code was remade from scratch, and we created a new modular and extensible version (based on plugins) and optimizing its operations enormously. + +The actual version of GOsa (in the date of this document) is 2.3. +It have the ability to manage a great amount of services like samba2/3, pureftpd, postfix, cyrus-imap, posix, etc. +It have a small but very active developer group directed by Cajus. + +\chapter{Introduction} +The management of systems can be a really complicated work, too many users with diferents services and access to them. + +\section{Copyright and Disclaimer} +Copyright (c) 2005 Alejandro Escanero Blanco. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts and with no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License". + +If you have questions, please visit the following url: http://www.gnu.org/licenses/fdl.txt and contact at: \htmladdnormallink{blainett@yahoo.es}{mailto://blainett@yahoo.es} + +\include{manual_gosa_en_ldap} + +\include{manual_gosa_en_apache} + +\chapter{GOsa} + +\chapter{The Servers} +\label{servers} +\section{Postfix} +\section{Cyrus-IMAP} +\section{Samba 2/3} +\section{Pure-Ftpd} +\section{Squid} +\section{Egroupware} + +\bibliography{referencias_gosa} +\bibliographystyle{unsrt} + +\end{document} diff --git a/doc/guide/admin/en/manual_gosa_en_apache.tex b/doc/guide/admin/en/manual_gosa_en_apache.tex new file mode 100644 index 000000000..aa349f9b4 --- /dev/null +++ b/doc/guide/admin/en/manual_gosa_en_apache.tex @@ -0,0 +1,837 @@ +\chapter{Apache And PHP} +\section{Apache Introduction} + +GOsa is an application written in the PHP programming language. + +Although everybody knows what is a Web page, we will review some basic points: + +\begin{description} +\item[WWW] +The World Wide Web is the main core of what we know as the Internet, it is a space information where each resource is identified by its URI (Universal Resource Identifier), it defines the protocol necessary to accede to the information, the machine that has it and where it is placed. + +The WWW is the great revolution of our time, is an enormous source of information. And because this all the applications are being Internet oriented. GOsa uses the WWW for a simple reason, distribution of the program, a Internet oriented application that can be used from any place and any time. GOsa does not need to be acceded in the same machine that has it executed, and another thing, each one of the servers whom it controls even can be in different machines and remote places. + +\item[HTTP] +\htmladdnormallink{HTTP}{http://www.w3.org/Protocols/}\cite{2616} is the acronym of HyperText Transfer Protocol, whose importantest purpose is the publication and reception of "Web pages". + +It is a application level protocol invented for distributed systems of hypermedia information. It has been being used for the WWW from 1990, the current version is HTTP/1.1. + +The practical operation can be reduced to a client whom makes a request and a server whom manages that request makes an answer. + +\item[HTML] +If the request of the client and the answer of the server are correct, the answer of the server will contain some type of hypermedia, the most habitual is \htmladdnormallink{HTML}{http://www.w3.org/TR/1998/REC-html40-19980424/} (HyperText Markup Language), a language thought for publication with contents and a easy navigation by them. It is a protocol in constant development, the present version is HTML4.01 and in publication XHTML2.0 +\end{description} + +\htmladdnormallink{APACHE}{http://httpd.apache.org/} is the \htmladdnormallink{most used}{http://news.netcraft.com/archives/web_server_survey.html} server for HTTP , secure, efficient and modular. + +This manual will be centered around this server, since this is the most used and has a opensource license. + +More information about this server is in \htmladdnormallink{http://httpd.apache.org/docs-2.0/}{http://httpd.apache.org/docs-2.0/} + + +\section{PHP Introduction} + +PHP (PHP: Hypertext Preprocessor), is an interpreted high level language, specially thought for the design of web pages. The syntax is a mixture of C, Perl and Java. It is embed in HTML pages and is executed by the HTTP server. + +PHP is widely extended and has a numerous group of developer, a \htmladdnormallink{extensive documentation}{http://www.php.net/docs.php} and numerous web sites with documentation and examples. + +\newpage + +\section{Installation} +\subsection{Unloading and Installing Apache} +\label{down_apache} +As in the previous chapter, Apache is practically in all the distributions, although we will see its installation from the sources. We are going to focus on the most advanced versions of apache, the 2.0.XX stables series. + +It is recommended install the same packages that are needed for openLDAP\ref{down_ldap}. + +It is possible to be downloaded of: \htmladdnormallink{http://httpd.apache.org/download.cgi}{http://httpd.apache.org/download.cgi}, the version which we are going to download and decompress in/usr/src is the httpd-2.0.XX.tar.gz + +We executed \htmladdnormallink{./configure}{http://warping.sourceforge.net/gosa/contrib/en/configure-apache.sh} with the following options: + +\begin{itemize} +\item[]Generals\\ +\begin{tabular}{|ll|} \hline +--enable-so & $\rightarrow$ Support of Dynamic Shared Objects (DSO)\\ +--with-program-name=apache2 & \\ +--with-dbm=db42 & $\rightarrow$ Version of Berkeley DB that we are going to use\\ +--with-external-pcre=/usr & \\ +--enable-logio & $\rightarrow$ Input and Output Log\\ +--with-ldap=yes & \\ +--with-ldap-include=/usr/include & \\ +--with-ldap-lib=/usr/lib & \\ +\hline \end{tabular} + +\item[]suexec Support\\ +\begin{tabular}{|ll|}\hline +--with-suexec-caller=www-data & \\ +--with-suexec-bin=/usr/lib/apache2/suexec2 & \\ +--with-suexec-docroot=/var/www & \\ +--with-suexec-userdir=public\_html & \\ +--with-suexec-logfile=/var/log/apache2/suexec.log & \\ +\hline \end{tabular} + +\item[] +\begin{longtable}{|ll|} +\hline +\multicolumn{2}{|c|}{\textbf{Modules}}\\ +\hline +\endfirsthead +\hline +\endhead +\hline +\multicolumn{2}{|c|}{Continue $\ldots$}\\ +\hline +\endfoot +\hline +\multicolumn{2}{|c|}{\textbf{End}}\\ +\hline +\endlastfoot +--enable-userdir=shared & $\rightarrow$ mod\_userdir, module for user directories\\ +--enable-ssl=shared & $\rightarrow$ mod\_ssl, module of secure connectivity SSL\\ +--enable-deflate=shared & $\rightarrow$ mod\_deflate, module to compress the information\\ +--enable-ldap=shared & $\rightarrow$ mod\_ldap\_userdir, module for ldap cache and connections\\ +--enable-auth-ldap=shared & $\rightarrow$ mod\_ldap, module of authentication in ldap\\ +--enable-speling=shared & $\rightarrow$ mod\_speling, module for the correction of failures in URL\\ +--enable-include=shared & $\rightarrow$ mod\_include, module for the inclusion of other configurations \\ +--enable-rewrite=shared & $\rightarrow$ mod\_rewrite, allows the URL manipulations \\ +--enable-cgid=shared & $\rightarrow$ CGI script\\ +--enable-vhost-alias=shared & $\rightarrow$ module for aliasing of virtual domains \\ +--enable-info=shared & $\rightarrow$ Information of the server\\ +--enable-suexec=shared & $\rightarrow$ Change the user and the group of the processes\\ +--enable-unique-id=shared & $\rightarrow$ unique Identifier by request\\ +--enable-usertrack=shared & $\rightarrow$ Track of the user session\\ +--enable-expires=shared & $\rightarrow$ Module for sending of expiration headers\\ +--enable-cern-meta=shared & $\rightarrow$ Files meta type CERN\\ +--enable-mime-magic=shared & $\rightarrow$ Obtain automatically mimetype\\ +--enable-headers=shared & $\rightarrow$ Control HTTP headers\\ +--enable-auth-anon=shared & $\rightarrow$ Access to anonymous users\\ +--enable-proxy=shared & $\rightarrow$ Allow the use of Apache as a proxy\\ +--enable-dav=shared & $\rightarrow$ Able to handle to the WebDav protocol\\ +--enable-dav-fs=shared & $\rightarrow$ Supplier DAV for the file system\\ +--enable-auth-dbm=shared & $\rightarrow$ Authentication based on database DBM\\ +--enable-cgi=shared & $\rightarrow$ Allow CGI scripts\\ +--enable-asis=shared & $\rightarrow$ Types of archives as they are\\ +--enable-imap=shared & $\rightarrow$ Server side image maps\\ +--enable-ext-filter=shared & $\rightarrow$ Module for external filters\\ +--enable-authn-dbm=shared & \\ +--enable-authn-anon=shared & \\ +--enable-authz-dbm=shared & \\ +--enable-auth-digest=shared & $\rightarrow$ Collection of authentications according to RFC2617\\ +--enable-actions=shared & $\rightarrow$ Active actions according to requests\\ +--enable-file-cache=shared & $\rightarrow$ File Cache\\ +--enable-cache=shared & $\rightarrow$ Dynamic Cache of archives\\ +--enable-disk-cache=shared & $\rightarrow$ Disc cache\\ +--enable-mem-cache=shared & $\rightarrow$ Mamory cache\\ +\end{longtable} +\end{itemize} + +Once configured, we must do:\\ +\\ +\begin{tabular}{|l|}\hline +\#make \&\& make install\\ +\hline \end{tabular} +\newpage + +\subsection{Installing PHP in Apache} + +Can be downloaded of \htmladdnormallink{http://www.php.net/downloads.php}{http://www.php.net/downloads.php} being the version necessary to the date of this manual for comaptibility with GOsa, the 4.3.XX, since versions 5.0.XX are not supported yet. We will download and decompress in/usr/src. + +In order to be able to compile the necessary modules, we need the developer libraries of servers section \ref{servers}, in addition to same that openLDAP\ref{down_ldap} and the Apache\ref{down_apache}, we will need some library more: + +\begin{itemize} +\item[libbz2] +We can download it of \htmladdnormallink{http://sources.redhat.com/bzip2/}{http://sources.redhat.com/bzip2/} as module of compression BZ2. +\item[e2fsprogs] +For access to the file system, can be downloaded of \htmladdnormallink{http://e2fsprogs.sourceforge.net}{http://e2fsprogs.sourceforge.net} +\item[expat] +Download from \htmladdnormallink{http://expat.sourceforge.net/}{http://expat.sourceforge.net/}, A XML parser. +\item[zziplib] +Download from \htmladdnormallink{http://zziplib.sourceforge.net/}{http://zziplib.sourceforge.net/}, to access to ZIP archives. +\item[zlib] +Download from \htmladdnormallink{http://www.gzip.org/zlib/}{http://www.gzip.org/zlib/} for GZIP compression. +\item[file] +Download from \htmladdnormallink{http://www.darwinsys.com/freeware/file.html}{http://www.darwinsys.com/freeware/file.html} to get control of archives. +\item[sed] +Download from \htmladdnormallink{http://www.gnu.org/software/sed/sed.html}{http://www.gnu.org/software/sed/sed.html}, one of the most powerful tools for text handling. +\item[libcurl] +Powerful tool to handle remote archives, download from \htmladdnormallink{http://curl.haxx.se/}{http://curl.haxx.se/}. +\item[gettext] +GNU Tool for support of several languages, download from \htmladdnormallink{http://www.gnu.org/software/gettext/gettext.html}{http://www.gnu.org/software/gettext/gettext.html}. +\item[libgd] +For the manipulation and creation of images, download from: \htmladdnormallink{http://www.boutell.com/gd}{/http://www.boutell.com/gd/}. +\item[libjpeg] +Manipulation of JPEG images, download from \htmladdnormallink{http://www.ijg.org/}{http://www.ijg.org/}. +\item[libpng] +Manipulation of PNG images, donwload from \htmladdnormallink{http://www.libpng.org/pub/png/libpng.html}{http://www.libpng.org/pub/png/libpng.html}. +\item[mcal] +Library for access to remote Calendars, download from \htmladdnormallink{http://mcal.chek.com/}{http://mcal.chek.com/}. +\item[libmysql] +Support of most famous database, is essential for php, download from \htmladdnormallink{http://www.mysql.com/}{http://www.mysql.com/} +\end{itemize} +\vspace{1cm} + + +A recommended configuration will be like this: + + +\begin{itemize} +\item[]Apache2\\ +\begin{tabular}{|ll|}\hline +--prefix=/usr --with-apxs2=/usr/bin/apxs2 & \\ +--with-config-file-path=/etc/php4/apache2 & \\ +\hline \end{tabular} + + + +\item[]Options of compilation\\ +\begin{tabular}{|ll|}\hline +--enable-memory-limit & \# Compiled with memory limit\\ +--disable-debug & \# To compile without debug symbols\\ +--disable-static & \# Without static libraries\\ +--with-pic & \# To use PIC and nonPIC objects\\ +--with-layout=GNU & \\ +--enable-sysvsem & \# sysvmsg Support\\ +--enable-sysvshm & \# sysvshm Support\\ +--enable-sysvmsg & \# System V shared memory support\\ +--disable-rpath & \# Disable to be able to pass routes to extra librerias to the binary\\ +--without-mm & \# To disable memoty sessions support\\ +\hline \end{tabular} + +\item[]Session\\ +\begin{tabular}{|ll|}\hline +--enable-track-vars & \\ +--enable-trans-sid & \\ +\hline \end{tabular} + +\item[]Support\\ +\begin{tabular}{|ll|}\hline +--enable-sockets & \# sockets support\\ +--with-mime-magic=/usr/share/misc/file/magic.mime & \\ +--with-exec-dir=/usr/lib/php4/libexec & \\ +\hline \end{tabular} + +\item[]pear\\ +\begin{tabular}{|ll|}\hline +--with-pear=/usr/share/php & \# Where we are going to install PEAR\\ +\hline \end{tabular} + +\item[]functions\\ +\begin{tabular}{|ll|}\hline +--enable-ctype & \# Control of characters functions support\\ +--with-iconv & iconv functions support \\ +--with-bz2 & BZ2 Compression support\\ +--with-regex=php & Type of library of regular expressions\\ +--enable-calendar & Calendar conversion functions\\ +--enable-bcmath & Mathematics of arbitrary precision support\\ +--with-db4 & DBA: Berkeley DB version 4 support \\ +--enable-exif & exif functions support, for JPG and TIFF metadata reading\\ +--enable-ftp & FTP functions support \\ +--with-gettext & Localization support\\ +--enable-mbstring & \\ +--with-pcre-regex=/usr & \\ +--enable-shmop & shared memory functions\\ +--disable-xml --with-expat-dir=/usr & use expat xml instead of which comes with php\\ +--with-xmlrpc & \\ +--with-zlib & \\ +--with-zlib-dir=/usr & \\ +--with-imap=shared,/usr & imap generic support\\ +--with-kerberos=/usr & Imap with Kerberos authentication\\ +--with-imap-ssl & Imap with SSL secure access\\ +--with-openssl=/usr & \\ +--with-zip=/usr & \\ +--enable-dbx & Layer of abstraction with databases\\ +\hline \end{tabular} + +\item[]external modules\\ +\begin{tabular}{|ll|}\hline +--with-curl=shared,/usr & remote Handling of archives\\ +--with-dom=shared,/usr --with-dom-xslt=shared,/usr --with-dom-exslt=shared,/usr & With xmlrpc already integrated\\ +--with-gd=shared,/usr --enable-gd-native-ttf & Images handling support\\ +--with-jpeg-dir=shared,/usr & GD Support for JPEG\\ +--with-png-dir=shared,/usr & GD Support for png\\ +--with-ldap=shared,/usr & Support for ldap\\ +--with-mcal=shared,/usr & Support of calendars\\ +--with-mhash=shared,/usr & Module for several key generation algorithms\\ +--with-mysql=shared,/usr & Support of Mysql database\\ +\hline \end{tabular} +\end{itemize} + +Then do:\\ +\#make \&\& make install +\newpage +\section{Apache2 Configuration} + +The apache configuration is saved in the directory /etc/apache2 in the following files and directories: +\begin{itemize} +\item[]File apache2.conf:\\ +Main configuration of apache2, it have the necesary configuration to run apache.\\ +We don\'t need to edit this file. +\item[]File ports.conf\\ +What port apache listen, we need two, port 80 for HTTP and port 443 for HTTPS, we will edit the file, and leave like this:\\ +\begin{tabular}{|l|}\hline +Listen 80,443\\ +\hline \end{tabular} +\item[]Directory conf.d:\\ +Directory for especial configuration, we don\'t need it. +\item[]Directories mods-available and mods-enabled:\\ +This directory have all the modules we can use of apache2, to enable a module is neccesary link it to the directory mods-enabled.\\ +\item[]Directories sites-available and sites-enabled:\\ +In sites available we must configure the sites we can use.\\ +For example we are going to create a no secure gosa site gosa, we can use it to redirect the request to the secure server. + +Gosa Configuration (sites-available/gosa) can be like this:\\ +\begin{tabular}{|l|}\hline +\noindent NameVirtual *\\ +\\ +\verb| |ServerName gosa.chaosdimension.org\\ +\\ +\verb| |Redirect /gosa https://gosa.chaosdimension.org/gosa\\ +\\ +\verb| |CustomLog /var/log/apache/gosa.log combined\\ +\verb| |ErrorLog /var/log/apache/gosa.log\\ +\\ +\\ +\hline \end{tabular} + +And when is saved, can be enabled making this:\\ +\\ +\begin{tabular}{|l|}\hline +\#>ln -s /etc/apache2/sites-available/gosa.conf /etc/apache2/sites-enabled/gosa.conf\\ +\hline \end{tabular} +\\ +\item[]Directory ssl:\\ +Directory for Secure Socket Layer configuration, this will see in the next section. +\end{itemize} +\newpage +\subsection{Security} + +The security is one of the most important points when running a apache server, we will need to make a safe environment where not to allow that the users manipulate and accede to code or programs. + +The way to obtain this is using cryptography, in which we secure the communications between clients and servers so that nobody else can accede to the data. This is obtained with cryptography and key exchange. + +The other way to secure the system is that if some failure exists in the system or the code, and if a intruder tries to execute code, this person can be disabled, since powerful limitations exist, like not allowing that he executes commands, reads code of others scripts. He cannot modify nothing because he has a user with very limited resources. + +\subsubsection{SSL Certificates} + +\noindent There are a great amount of documentation on cryptography and concretely on SSL, a system of encryption with public and private key. \\ +\\ +\noindent As the package openSSL was already installed from the previous steps, we must create the certificates that we will use in our Web server. \\ +\\ +\noindent we will save the certificates in/etc/apache2/ssl/gosa.pem \\ +\\ +\begin{tabular}{|l|}\hline +\#>FILE=/ect/apache2/ssl/gosa.pem\\ +\#>export RANDFILE=/dev/random\\ +\#>openssl req -new -x509 -nodes -out \$FILE -keyout /etc/apache2/ssl/apache.pem\\ +\#>chmod 600 \$FILE\\ +\#>ln -sf \$FILE /etc/apache2/ssl/`/usr/bin/openssl x509 -noout -hash < \$FILE`.0\\ +\hline \end{tabular} +\vspace{0.5cm} + +\noindent With this we have created a certificate that allows SSL access to our pages. \\ +\\ +\noindent If what we want is a configuration that allows us not only that traffic is codified, but that in addition the client guarantees that he is a valid user, we must force the server to requests a client certification \\ +\\ +\noindent In this way we will follow a longer procedure, first will be creation of a certification of CA: \\ +\\ +\begin{tabular}{|l|}\hline +\#>CAFILE=/ect/apache2/ssl/gosa.ca\\ +\#>KEY=/etc/apache2/ssl/gosa.key\\ +\#>REQFILE=/etc/apache2/ssl/gosa.req\\ +\#>CERTFILE=/ect/apache2/ssl/gosa.cert\\ +\#>DAYS=365\\ +\#>export RANDFILE=/dev/random\\ +\#>openssl req -x509 -keyout \$CAKEY -out \$CAFILE \$DAYS\\ +\hline \end{tabular} +\vspace{0.5cm} + +\noindent After several questions we will have a CA, now we make a requirement to the created CA: \\ +\\ +\begin{tabular}{|l|}\hline +\#>openssl req -new -keyout \$REQFILE -out \$REQFILE \$DAYS\\ +\hline \end{tabular} +\vspace{0.5cm} + +\noindent Sign the new certificate: \\ +\\ +\begin{tabular}{|l|}\hline +\#>openssl ca -policy policy\_anything -out \$CERFILE -infiles \$REQFILE\\ +\hline \end{tabular} +\vspace{0.5cm} + +\noindent and we created a pkcs12 certidicate to configure the clients: \\ +\\ +\begin{tabular}{|l|}\hline +\#>openssl pkcs12 -export -inkey \$KEY -in \$CERTFILE -out certificado\_cliente.pkcs12\\ +\hline \end{tabular} +\vspace{0.5cm} + +\noindent This certificate will be installed in the client, and in the the configuration of the Web server in the way explained in the following point, we will have the security that the clients who will accede the server are in a secure machine and its communication will be strictly confidential. \ \ + +\subsubsection{Configuring mod-SSL} +\noindent The SSL module comes with apache2, this will simplify our work. In order to know if already is enabled: \\ +\\ +\begin{tabular}{|l|}\hline +\#> if [ -h /etc/apache2/mods-enabled/ssl.load ]; then echo "enabled module";else echo "disabled module"; fi\\ +\hline \end{tabular} +\vspace{0.4cm} + +\noindent To enabled it we will do it following: \\ +\\ +\begin{tabular}{|l|}\hline +\#>ln -s /etc/apache2/mods-available/ssl.conf /etc/apache2/mods-enabled/ssl.conf\\ +\#>ln -s /etc/apache2/mods-available/ssl.load /etc/apache2/mods-enabled/ssl.load\\ +\hline \end{tabular} +\vspace{0.5cm} + +\noindent This will enable the module in apache2 and we will be able to use it after restarting the server with: \\ +\\ +\begin{tabular}{|l|}\hline +\#>/etc/init.d/apache2 restart\\ +\hline \end{tabular} +\vspace{0.5cm} + +\noindent If we only want a secure configuration, we will make this in /etc/apache2/sites-available, gosa-SSL: \\ +\\ +\begin{tabular}{|l|}\hline +\noindent NameVirtual *:443\\ +\\ +\verb| |ServerName gosa.chaosdimension.org\\ +\verb| |alias /gosa /usr/share/gosa/html\\ +\\ +\verb| |DocumentRoot /var/www/gosa.chaosdimension.org\\ +\verb| |CustomLog /var/log/apache/gosa.log combined\\ +\verb| |ErrorLog /var/log/apache/gosa.log\\ +\\ +\verb| |SSLEngine On\\ +\verb| |SSLCertificateFile /etc/apache2/ssl/gosa.cert\\ +\verb| |SSLCertificateKeyFile /etc/apache2/ssl/gosa.key\\ +\verb| |SSLCertificateChainFile /etc/apache2/ssl/gosa.cert\\ +\verb| |SSLCertificateKeyFile /etc/apache2/ssl/gosa.key\\ +\verb| |SSLCACertificateFile /etc/apache2/ssl/gosa.ca\\ +\verb| |SSLCACertificatePath /etc/apache2/ssl/\\ +\verb| |SSLLogLevel error\\ +\verb| |SSLLog /var/log/apache2/ssl-gosa.log\\ +\\ +\\ +\hline \end{tabular} +\vspace{0.5cm} + +\noindent For a secure communication in which we verified the certificate of the client: \\ +\begin{tabular}{|l|}\hline +\noindent NameVirtual *:443\\ +\\ +\verb| |ServerName gosa.chaosdimension.org\\ +\\ +\verb| |alias /gosa /usr/share/gosa/html\\ +\\ +\verb| |DocumentRoot /var/www/gosa.chaosdimension.org\\ +\verb| |CustomLog /var/log/apache/gosa.log combined\\ +\verb| |ErrorLog /var/log/apache/gosa.log\\ +\\ +\verb| |SSLEngine On\\ +\verb| |SSLCertificateFile /etc/apache2/ssl/gosa.cert\\ +\verb| |SSLCertificateKeyFile /etc/apache2/ssl/gosa.key\\ +\verb| |SSLCertificateChainFile /etc/apache2/ssl/gosa.cert\\ +\verb| |SSLCertificateKeyFile /etc/apache2/ssl/gosa.key\\ +\verb| |SSLCACertificateFile /etc/apache2/ssl/gosa.ca\\ +\verb| |SSLCACertificatePath /etc/apache2/ssl/\\ +\verb| |SSLLogLevel error\\ +\verb| |SSLLog /var/log/apache2/ssl-gosa.log\\ +\\ +\verb| |\\ +\verb| |\verb| |SSLVerifyClient require\\ +\verb| |\verb| |SSLVerifyDepth 1\\ +\verb| |\\ +\\ +\hline \end{tabular} +\vspace{0.5cm} + +\subsubsection{Configuring suphp} +\noindent +Suphp is a module for apache and php that allows to execute processes of php with a different user of which apache uses to execute php pages. + +It consists of two parts, one is a module for apache who "captures" requests of php pages, verifies the user of the file, its group, and sends the information to the other part, that is suid-root executable that sends the information to php4-cgi with the owner of the file as user, then gives back the result to the module of the apache. + +The idea is to lower the damage that would cause a possible failure of the system being exploited, in this way the user enter the system with an nonqualified account, without permissions of execution and possibility to access to another code or programs. + +Suphp can be downloaded of \htmladdnormallink{http://www.suphp.org/Home.html}{http://www.suphp.org/Home.html}, decompressing the package in/usr/src and compiled with the following options:\\ +\\ +\begin{tabular}{|l|}\hline +\#>./configure --prefix=/usr \textbackslash \\ +\verb| |--with-apxs=/usr/bin/apxs2 \textbackslash \\ +\verb| |--with-apache-user=www-data \textbackslash \\ +\verb| |--with-php=/usr/lib/cgi-bin/php4 \textbackslash \\ +\verb| |--sbindir=/usr/lib/suphp \textbackslash \\ +\verb| |--with-logfile=/var/log/suphp/suphp.log \textbackslash \\ +\verb| |-with-setid-mode \textbackslash \\ +\verb| |--disable-checkpath \\ +\hline \end{tabular} +\vspace{0.5cm} + +\noindent Of course we will need to have compiled in php for cgi, this means returning to compilation of php, but clearing the configuration for apache2 and adding: \\ +\\ +\begin{tabular}{|l|}\hline +\verb| |--prefix=/usr --enable-force-cgi-redirect --enable-fastcgi \textbackslash\\ +\verb| |--with-config-file-path=/etc/php4/cgi\\ +\hline \end{tabular} +\vspace{0.5cm} + +\noindent To configure in apache we will do the same as for SSL, first we verify if is enabled: \\ +\\ +\begin{tabular}{|l|}\hline +\#> if [ -h /etc/apache2/mods-enabled/suphp.load ]; then echo "enabled module";else echo "disabled module"; fi\\ +\hline \end{tabular} +\vspace{0.5cm} + +\noindent to activate it we will do the following: \\ +\\ +\begin{tabular}{|l|}\hline +\#>ln -s /etc/apache2/mods-available/suphp.conf /etc/apache2/mods-enabled/suphp.conf\\ +\#>ln -s /etc/apache2/mods-available/suphp.load /etc/apache2/mods-enabled/suphp.load\\ +\hline \end{tabular} +\vspace{0.5cm} + +\noindent This will enable the module in apache2 and we will be able to use it after restarting the server with: \ +\\ +\begin{tabular}{|l|}\hline +\#>/etc/init.d/apache2 restart\\ +\hline \end{tabular} +\vspace{0.5cm} + +\noindent The configuration of the secure site with suphp included would be like this: \\ +\\ +\begin{tabular}{|l|}\hline +\noindent NameVirtual *:443\\ +\\ +\verb| |ServerName gosa.chaosdimension.org\\ +\\ +\verb| |DocumentRoot /usr/share/gosa/html\\ +\verb| |alias /gosa /usr/share/gosa/html\\ +\verb| |CustomLog /var/log/apache/gosa.log combined\\ +\verb| |ErrorLog /var/log/apache/gosa.log\\ +\\ +\verb| |suPHP\_Engine on\\ +\\ +\verb| |SSLEngine On\\ +\verb| |SSLCertificateFile /etc/apache2/ssl/gosa.cert\\ +\verb| |SSLCertificateKeyFile /etc/apache2/ssl/gosa.key\\ +\verb| |SSLCertificateChainFile /etc/apache2/ssl/gosa.cert\\ +\verb| |SSLCertificateKeyFile /etc/apache2/ssl/gosa.key\\ +\verb| |SSLCACertificateFile /etc/apache2/ssl/gosa.ca\\ +\verb| |SSLCACertificatePath /etc/apache2/ssl/\\ +\verb| |SSLLogLevel error\\ +\verb| |SSLLog /var/log/apache2/ssl-gosa.log\\ +\\ +\verb| |\\ +\verb| |\verb| |SSLVerifyClient require\\ +\verb| |\verb| |SSLVerifyDepth 1\\ +\verb| |\\ +\\ +\hline \end{tabular} +\vspace{0.5cm} + +\noindent We must decide which user we are going to use, in this case I am going to create one called "gosa", that will be is used for suphp:\\ +\\ +\begin{tabular}{|l|}\hline +\verb| |\#>useradd -d /usr/share/gosa/html gosa\\ +\verb| |\#>passwd -l gosa\\ +\verb| |\#>cd /usr/share/gosa\\ +\verb| |\#>find /usr/share/gosa -name "*.php" -exec chown gosa {} ";"\\ +\verb| |\#>find /usr/share/gosa -name "*.php" -exec chmod 600 {} ";"\\ +\hline \end{tabular} +\vspace{0.5cm} +\newpage +\section{PHP4 Configuration} +The configuration for mod\_php will be in the path that we had configured in the compilation of php4. In our case it is/etc/php4/apache2. + +The configuration file we always be named php.ini and we will enable the modules. + +A basic configuration will be like this:\\ +\\ +\begin{center} +\begin{longtable}{|l|} +\caption{PHP4 Configuration}\\ +\hline +\multicolumn{1}{|c|}{\textbf{PHP4 Configuration}}\\ +\hline +\endfirsthead +\hline +\endhead +\hline +\multicolumn{1}{|c|}{Continue $\ldots$}\\ +\hline +\endfoot +\hline +\multicolumn{1}{|c|}{\textbf{End}}\\ +\hline +\endlastfoot +; Engine \\ +\verb| |engine = On ; Activates PHP\\ +\verb| |short\_open\_tag = On ; allows to use \\ +\verb| |precision = 14 ; Number of significant digits shown in numbers in floating comma\\ +\verb| |output\_buffering = Off ; Only will be allowed send headers before send the content.\\ +\verb| |implicit\_flush = Off ; We did not force to php to that cleans the exit buffer after each block.\\ +\\ +; Safe Mode \\ +\verb| |\label{sm} safe\_mode = Off ; We do not want the safe way\\ +\verb| |\label{smed} safe\_mode\_exec\_dir = ; Directory where PHP is executed\\ +\verb| |\label{smid} safe\_mode\_include\_dir = Directory where PHP will search PHP libraries\\ +\verb| |\label{smaev} safe\_mode\_allowed\_env\_vars = PHP\_ ; Only is allowed to the users\\ +\verb| |\verb| |\verb| |;to create system variables that begin with PHP\_\\ +\verb| |\label{smpev} safe\_mode\_protected\_env\_vars = LD\_LIBRARY\_PATH ; List of system variables that\\ +\verb| |\verb| |\verb| |; can not be changed by security reasons.\\ +\verb| |\label{df} disable\_functions = ; Functions that will be disabled for security reasons\\ +\verb| |\label{auf} allow\_url\_fopen = Yes ; We allowed that they open to archives from PHP\\ +\verb| |\label{ob} open\_basedir = ;\\ +\ \ +; Colors for the way of colored syntax. \ \ +\verb| |highlight.string = \#DD0000\\ +\verb| |highlight.comment = \#FF8000\\ +\verb| |highlight.keyword = \#007700\\ +\verb| |highlight.bg = \#FFFFFF\\ +\verb| |highlight.default = \#0000BB\\ +\verb| |highlight.html = \#000000\\ +\\ +; Misc\\ +\verb| |\label{ep}expose\_php = On ; It indicates in the message of the Web server if it is installed or no.\\ +\\ +; Resource Limits ;\\ +\verb| |max\_execution\_time = 30 ; Maximum time of execution of script.\\ +\verb| |memory\_limit = 16M ; Maximun memory allowed that can consume the script.\\ +\\ +; Error handling and logging ;\\ +\verb| |error\_reporting = E\_ALL; We indicated that shows all the errors and warnings.\\ +\verb| |display\_errors = Off ; Does not print in screen.\\ +\verb| |display\_startup\_errors = Off ; That does not show the errors of PHP starting.\\ +\verb| |log\_errors = On ; That sends the errors to a file.\\ +\verb| |track\_errors = On ; That \$php\_errormsg keeps the last Error / Warning (boolean)\\ +\verb| |error\_log = /var/log/php/php4.log ; File that will keep the errors\\ +\verb| |warn\_plus\_overloading = Off ; We did not warn if operator + is used with strings\\ +\\ +; Data Handling ;\\ +\verb| |variables\_order = "EGPCS" ; This directive describes the order in which\\ +\verb| |; will be registered the PHP variables (Being G=GET, P=POST, C=Cookie,\\ +\verb| |; E = System, S = Own of PHP, all is indicated like EGPCS) \\ +\verb| |\label{rg} register\_globals = Off ; We do not want that the EGPCS are registered like globals.\\ +\verb| |register\_argc\_argv = Off ; We did not declare ARGV and ARGC for its use in scripts.\\ +\verb| |post\_max\_size = 8M ; Maximum size of sending POST that will accept PHP.\\ +\\ +; Magic quotes\\ +\verb| |\label{mqq}magic\_quotes\_gpc = On ; Quotes added fro GPC(GET/POST/Cookie data)\\ +\verb| |magic\_quotes\_runtime= Off ; Quotes added for system generated data, \\ +\verb| |;for example from SQL, exec(), etc.\\ +\verb| |magic\_quotes\_sybase = Off ; Use Sybase style added quotes.\\ +\verb| ;(escape ' with '' instead of \')|\\ +\\ +; PHP default type of file and default codification.\\ +\verb| |default\_mimetype = "text/html"\\ +\verb| |default\_charset = "iso-8859-1"\\ +\\ +; Routes and directories ;\\ +\verb| |\label{ip} include\_path = . ;\\ +\verb| |doc\_root = ; Root of the php pages, better is to leave in blank.\\ +\verb| |user\_dir = ; Where php executes scripts,better is to leave in blank.\\ +\verb| |;extension\_dir = /usr/lib/php4/apache ; ¿Where the modules are?\\ +\verb| |enable\_dl = Off ; Allow or No the dymanic load of modules with the dl() function.\\ +\\ +; Upload files to the server;\\ +\verb| |file\_uploads = On ; Allow upload files to the server.\\ +\verb| |upload\_max\_filesize = 2M ; Maximum size of the files we are going to upload.\\ +\\ +; Dynamic Extensions ;\\ +\verb| |extension=gd.so ; Graphics\\ +\verb| |extension=mysql.so ; Mysql\\ +\verb| |extension=ldap.so ; Ldap\\ +\verb| |extension=mhash.so ; Mhash\\ +\verb| |extension=imap.so ; Imap\\ +\verb| |extension=kadm5.so ; Kerberos\\ +\verb| |extension=cups.so ; Cupsys\\ +\\ +; System Log \\ +\verb|[Syslog]|\\ +\verb| |define\_syslog\_variables = Off ; We disabled the definition of syslog variables.\\ +\\ +; mail functions\\ +\verb|[mail function]|\\ +\verb| |;sendmail\_path = ;In unix system, where is located sendmail (is 'sendmail -t -i' by default)\\ +\\ +; debug\\ +\verb|[Debugger]|\\ +\verb| |debugger.host = localhost ; Where is the debugger.\\ +\verb| |debugger.port = 7869 ; The port it is listening.\\ +\verb| |debugger.enabled = False ; We suppose there is not a debugger.\\ +\\ +; SQL Options\\ +\verb|[SQL]|\\ +\verb| |sql.safe\_mode = Off ; SQL safe mode, we will disabled it.\\ +\\ +; Mysql Options\\ +\verb|[MySQL]|\\ +\verb| |mysql.allow\_persistent = Off ; We will disable the persistent links for security reasons.\\ +\verb| |mysql.max\_persistent = -1 ; Number of persistent connections, is not used when is disabled.\\ +\verb| |mysql.max\_links = -1 ; Maximum number of connections, -1 is without limits.\\ +\verb| |mysql.default\_port = 3306; Default port of mysql.\\ +\verb| |mysql.default\_socket = ; Socket name that will be used for local mysql connections.\\ +\verb| |;If is void, will be use the default compilation configuration of PHP.\\ +\verb| |mysql.default\_host = ; No default host configured.\\ +\verb| |mysql.default\_user = ; No default user configured.\\ +\verb| |mysql.default\_password = ; No default password configured.\\ +\\ +; session control\\ +\verb|[Session]|\\ +\verb| |session.save\_handler = files ; We saved the session information in files.\\ +\verb| |\label{ss} session.save\_path = /var/lib/php4 ; Directory where is going to be saved the session files.\\ +\verb| |session.use\_cookies = 1 ; We will use cookies for the session tracking.\\ +\verb| |session.name = PHPSESSID ; Name of the session that will be used in the name of the cookie.\\ +\verb| |session.auto\_start = 0 ; We did not initiate session automatically.\\ +\verb| |session.cookie\_lifetime = 0 ; Time of life of a session cookie or 0 if we wait him to closes the navigator.\\ +\verb| |session.cookie\_path = / ; The path for which the cookie is valid.\\ +\verb| |session.cookie\_domain = ; The domain for which the cookie is valid.\\ +\verb| |session.serialize\_handler = php ; Used manipulator to serialize the data.\\ +\verb| |session.gc\_probability = 1 ; Probability in percentage that the garbage collector activates in each session.\\ +\verb| |session.gc\_maxlifetime = 1440 ; After this time in seconds, the saved information\\ +\verb| |; will be look like garbage for the garbage collector.\\ +\verb| |session.referer\_check = ; Verifies HTTP Referer to invalidate externals URLs containing ids\\ +\verb| |session.entropy\_length = 0 ; Number of bytes to be readed of the entropy file.\\ +\verb| |session.entropy\_file = ; The file that will generate the entropy.\\ +\verb| |session.cache\_limiter = nocache ; Without session cache.\\ +\verb| |session.cache\_expire = 180 ; document expiration time.\\ +\verb| |session.use\_trans\_sid = 0 ; To use translate sid if is enabled in compilation time.\\ +\\ +\end{longtable} +\end{center} + +\subsection{Security} + +PHP is a powerful scripting language, it allows its users to have enough control over the system and to malicious attackers too many options to reach its objective. + +An system administrator does not have to suppose that a system is completely safe with only having installed security updates, a system that shows code to the outside is not safe, although the result is HTML, it is exposed to attacks of very diverse forms and failures of security not even know. + +Limit to the maximum the access that allows php is then a necessity. + +\subsection{Configuring safe php} + +PHP has a mode \htmladdnormallink{safe-mode}{http://www.php.net/manual/en/features.safe-mode.php} that allows a greater security, a recommended configuration for Safe mode is: + +\begin{tabular}{|l|}\hline +\\ +\verb| |\ref{mqq} magic\_quotes\_qpc = On\\ +\\ +\verb| |\ref{auf} allow\_url\_fopen = No\\ +\\ +\verb| |\ref{rg} register\_globals = Off\\ +\\ +\verb| |\ref{sm} safe\_mode = On\\ +\\ +\verb| |\ref{smid} safe\_mode\_include\_dir = "/usr/share/gosa:/var/spool/gosa"\\ +\\ +\verb| |\ref{smed} safe\_mode\_exec\_dir = "/usr/lib/gosa"\\ +\\ +\verb| |\ref{smaev} safe\_mode\_allowed\_env\_vars = PHP\_,LANG\\ +\\ +\verb| |\ref{ob} open\_basedir = "/etc/gosa:/var/spool/gosa:/var/cache/gosa:/usr/share/gosa:/tmp"\\ +\\ +\verb| |\ref{ip} include\_path = ".:/usr/share/php:/usr/share/gosa:/var/spool/gosa:/usr/share/gosa/safe\_bin"\\ +\\ +\verb| |\ref{df} disable\_functions = system, shell\_exec, passthru, phpinfo, show\_source\\ +\\ +\hline \end{tabular} + + +In the case we are going to use SuPHP, we must give the following permissions to the directory /var/lib/php4:\\ + +\begin{tabular}{|l|}\hline +\#>chmod 1777 /var/lib/php4\\ +\hline \end{tabular} + +Since each user who executes PHP kept the session with that user. + +\section{Necessary PHP Modules} + +In this section are explained the steps to be able to compile and to use the necessary or important modules for GOsa, is recommended to install all the modules, even those that are not necessary. + +\subsection{ldap.so} + +NECCESARY MODULE + +\indent This module does not need any special configuration to work. +Only knows a problem: PHP+Apache with cannot be connected with a LDAP server who requests valid Certificate. The communication will be safe, since SSL can be used, but will not be guaranteed. + +\subsection{mysql.so} + +OPTIONAL MODULE + +\indent This module does not need any special configuration to work. + +\indent Necessary to save the imap - sieve plugin configuration. + +\subsection{imap.so} + +OPTIONAL MODULE + +\indent The installed module when compiling PHP work, but it will have an important deficiency, the function getacl that gives control on the folders, so we will need a patch and steps to compile the module for its use in GOsa. + +We download the patch from \htmladdnormallink{php4-imap-getacl.patch}{ftp://ftp.gonicus.de/gosa/contrib/php4-imap-getacl.patch} and we put it in/usr/src, as we have the sources of PHP in /usr/src, we executed the following command: + +\begin{tabular}{|l|}\hline +\#>cd /usr/src/php4.3-XXX/extensions/imap\\ +\#>make clear\\ +\#>patch -p1 phpize\\ +\#>./configure\\ +\#>make\\ +\#>make install\\ +\hline \end{tabular} + +This make and install the module correctly. + +\subsection{gd.so} + +OPTIONAL MODULE + +\indent This module does not need any special configuration to work. + +\indent The module is used for the handling of graphs, also used by the system of smarty templates. + +\subsection{cups} + +OPTIONAL MODULE + +\indent To use the Cups module for the selection of the printer in Posix, we must download the cups sources from \htmladdnormallink{http://www.cups.org/software.php}{http://www.cups.org/software.php} and decompress en /usr/src, then we executing the next commands: +\\ +\noindent \begin{tabular}{|l|}\hline +\#cd /usr/src/cups-1.1.XX/scripting/php\\ +\#phpize\\ +\#./configure\\ +\#make\\ +\#make install\\ +\#echo \verb|"extension=cups.so" >>| /etc/php4/apache2/php.init\\ +\#/etc/init.d/apache2 reload\\ +\hline \end{tabular} + + +\subsection{krb} + +OPTIONAL MODULE + +\indent This module need to have the MIT Kerberos sources installed, because it can not be compiled with the Heimdal Kerberos sources. + +\indent The module will connect with the Kerberos servers to update the keys of the users. + +Will download from \htmladdnormallink{PECL}{http://pecl.php.net/kadm5}, and descompress in /usr/src, we must have the MIT Kerberos sources also, descompress in /usr/src, with it will execute this: (changing X.X for the actual version of the programs):\\ +\\ +\noindent \begin{tabular}{|l|}\hline +\#cd /usr/src/kadm5-0.X.X/scripting/php\\ +\#cp config.m4 config.m4.2\\ +\#sed \verb|s/krb5-1\.2\.4\/src\/include/krb5-1\.X\.X\/src\/lib/| config.m4.2 >config.m4\\ +\#rm -f config.m4.2\\ +\#phpize\\ +\#./configure\\ +\#make\\ +\#make install\\ +\#echo \verb|"extension=kadm5.so" >>| /etc/php4/apache2/php.ini\\ +\#/etc/init.d/apache2 reload\\ +\hline \end{tabular} + diff --git a/doc/guide/admin/en/manual_gosa_en_ldap.tex b/doc/guide/admin/en/manual_gosa_en_ldap.tex new file mode 100644 index 000000000..cc145cc5d --- /dev/null +++ b/doc/guide/admin/en/manual_gosa_en_ldap.tex @@ -0,0 +1,1059 @@ +\chapter{openLDAP} +\section{Introduction,What is LDAP?} +\subsection{Directory Services, X.500} + +A directory is a search information specialised database based on attributes. + +X.500|ISO 9594\cite{x500} is a standard of ITU-S(International Telecommunication Union - Telecommunication Standardisation Burean), previously known like CCITT, to solve the problem of directories. Based on the works made with X.400 (a directory for electronic mail) and the works of ISO (International Standards Organisation) and ECMA (European Computer Manufacturers Association).\\ + +The X.501|ISO 9594 part 2. define the models, as the information must be organized, the model of user information, the model of administrative information and the directory service, which defines as the information must be distributed between several systems.\\ + +In X.509|ISO 9594 part 8. the standard of authentication and security used for SSL.\\ + +X.525|ISO 9594 part 9. indicates as the replication must be between systems.\\ + +In X.519|ISO 9594 part 5. the communication protocols are defined, among them the one that have greater importance to us that is DAP - the protocol of access to directories - it defines that operations can be done with the connection: bind, unbind, the objects (entry) and its operation: add, eliminate, modify, search, list, compare, etc.\\ + +DAP is a protocol to complex to make servers and clients usable for Internet, then a comfortable protocol must be created to handle these directories: LDAP.\\ + +LDAP (Lightweight Directory Access Protocol) is a protocol thought for update and search of Internet (TCP/IP) oriented directories. \\ + +The last LDAP version is 3 and it is covered by the RFCs: 2251\cite{2251}, 2252\cite{2252}, 2253\cite{2253}, 2254\cite{2254}, 2255\cite{2255}, 2256\cite{2256} y 3377\cite{3377}.\\ +\newpage +\subsection{Basic Concepts of LDAP} + +\begin{itemize} +\item[]Entry\\ +An Entry is a collection of attributes identified by its DN (distinguished name). A DN is unique in all the tree and therefore it identifies clearly the entrance to which refers. As example: CN=Alex O=CHAOSDIMENSION C=ES must identify to the object of common name \'Alex\' that is in organization \'CHAOSDIMENSION\' and country is \'ES\' (Spain). A RDN(names distinguished relative) is a part of the DN, in a way that concatenating the RDNs they give as result the DN. Of the previous example CN=Alex is a RDN. + +\item[]Object Class\\ +A Object Class is a special attribute (ObjectClass) that defines attributes that are required and allowed in an entry. The values of the Objects Classes are defined in the schema. All the entrances must have a ObjectClass attribute. It isn\'t allowed to add attributes to the entries that aren\'t allowed by definitions of the Objects Classes of the entry. + +\item[]Attrib\\ +An Attribute is a type with one or more values associated. It is identified by a OID (object identifier). The attribute type indicates if can have more of a value of this attribute in an entry, the values that can have and how they can be searched. + +\item[]Schema\\ +A Schema is a collection of definitions of types of attributes, Objects Classes and information that the server use to do the searches, to introduce values in an attribute, and to allow operations to add or to modify. + +To create a search, we must consider several important parameters: +\item[]Filter\\ +\begin{list}{}{} +\item[Base Object] +Un DN que sera a partir del cual realizaremos la busqueda. + +\item[Scope] +It can have several values. +\begin{list}{}{} +\item[base] it will only search in the level base. +\item[sub] it will make a recursive search by all the tree from the level base +\item[one] search a level below the level base. +\end{list} + +\item[Size Limit] +It restricts the number of entries given back as result of a search. + +\item[Time Limit] +It restricts the execution maximum time of a search. + +\item[Filter] +A chain that defines the conditions that must be completed to find an entry. + +\end{list} + +The filters can be concatenated with ' and', ' or' and ' not' to create more complex filters. For example a filter with base O=CHAOSDIMENSION, C=ES, scope base and filter (CN=Alex) would find the entry CN=Alex , O=CHAOSDIMENSION, C=ES. + +\end{itemize} +\newpage +\subsection{LDAP Servers} + +LDAP is supported by numerous servers being the knownest Directory Active of Microsoft, eDirectory of Novell, Oracle Internet Directory of Oracle, iPlanet Directory Server of SUN and finally but not less important openLDAP. + +This manual teach about the use and installation of openLDAP, since this supported by practically all the distributions of linux and their license fulfills the openSource standard. + +For more information about LDAP see LDAP Linux HowTo\cite{llh}, Using LDAP\cite{ul}, openLDAP administrator Guide\cite{oag} and in Spanish the LDAP relative part of the magnify manual Ldap+Samba+Cups+Pykota\cite{lscp}. + +\section{Installation} +Most distributions have packages of openLDAP. The use apt-get in debian, Urpmi in Mandrake, up2date in redhat or Yast2 in Suse is outside this manual. This manual explain the necessary work for the construction and configuration from the sources. + +\subsection{Downloading openLDAP} +\label{down_ldap} +Downloading openLDAP + +Although they are not really necessary, there is several packages that have to be installed before openLDAP because we need them. + +The first of them is \textbf{openSSL}, it exists in all the distributions and has documentation in is webpage\cite{ssldoc}. + +The sources can be downloaded from \htmladdnormallink{http://www.openssl.org/source/}{http://www.openssl.org/source/} + +The second is \textbf{Kerberos Services v5}, which have two implementations, one is \htmladdnormallink{MIT Kerberos V}{http://web.mit.edu/kerberos/www} and the other is \htmladdnormallink{Heimdal Kerberos}{http://www.pdc.kth.se/heimdal}, both have good documentation and are widely supported by all the distributions. + +It could also be interesting to have the \textbf{Cyrus SASL} libraries installed (Simple Cyrus's Authentication and Security Layer) that could be obtained from \htmladdnormallink{http://asg.web.cmu.edu/sasl/}{http://asg.web.cmu.edu/sasl/sasl-library.html}, Cyrus SASL makes use of openSSL and Kerberos/GSSAPI for authentication. + +At last we will need a database for openLDAP, with respect to this manual this will be given through the \htmladdnormallink{\textbf{Sleepycat Software Berkeley DB}}{http://www.sleepycat.com/} libraries, we will need it if we want to use LDBM (Berkeley DB version 3) or BDB (Berkeley DB version 4). Also they exist in the majority of the distributions. + +Once obtained and compiled the necessary libraries we download the \htmladdnormallink{sources of openLDAP}{http://www.openldap.org/software/download/} in /usr/src (for example) and decompressed in that directory (for example with tar -zxvf openldap-2.X.XX.tgz). +\newpage +\subsection{Install Options} + +The following options are for openLDAP version 2.2.xx that can differ from versions 2.0.XX and 2.1.XX. + +We executed \htmladdnormallink{./configure}{http://warping.sourceforge.net/gosa/contrib/en/configure.sh} with the following options: + +\begin{itemize} +\item[](Directories)\\ +\begin{tabular}{|ll|}\hline +--prefix=/usr & \\ +--libexecdir='\${prefix}/lib' & \\ +--sysconfdir=/etc & \\ +--localstatedir=/var/run & \\ +--mandir='\${prefix}/share/man' & \\ +--with-subdir=ldap & \\ +\hline \end{tabular} + +\item[](Basic Options)\\ +\begin{tabular}{|ll|}\hline +--enable-syslog & \\ +--enable-proctitle & \\ +--enable-ipv6 & $\rightarrow$Sockets IPv6\\ +--enable-local & $\rightarrow$Sockets Unix\\ +--with-cyrus-sasl & $\rightarrow$Supported authentication Cyrus SASL\\ +--with-threads & $\rightarrow$Support thread of execution\\ +--with-tls & $\rightarrow$Support TLS/SSL\\ +--enable-dynamic & $\rightarrow$Dynamic compilation\\ +\hline \end{tabular} + +\item[](Slapd Options)\\ +\begin{tabular}{|ll|}\hline +--enable-slapd & $\rightarrow$To compile the server in addition to the libraries\\ +--enable-cleartext & $\rightarrow$It allows send clear text passwords\\ +--enable-crypt & $\rightarrow$Send crypther passwords with DES.\\ +--enable-spasswd & $\rightarrow$Verification of passwords through SASL\\ +--enable-modules & $\rightarrow$Support of dynamic modules\\ +--enable-aci & $\rightarrow$Support of ACIs by objects (Experimental)\\ +--enable-rewrite & $\rightarrow$Rewriting of DN in recovery of LDAP\\ +--enable-rlookups & $\rightarrow$Inverse search of the name of the client workstation\\ +--enable-slp & $\rightarrow$SLPv2 support\\ +--enable-wrappers & $\rightarrow$Support TCP wrappers\\ +\hline \end{tabular} + +\item[](Support)\\ +\begin{tabular}{|ll|}\hline +--enable-bdb=yes & $\rightarrow$Berkeley version 4 support\\ +--enable-dnssrv=mod & \\ +--enable-ldap=mod & $\rightarrow$It supports another LDAP server as database\\ +--enable-ldbm=mod & \\ +--with-ldbm-api=berkeley & $\rightarrow$Berkeley version 3 support\\ +--enable-meta=mod & $\rightarrow$Metadirectory support\\ +--enable-monitor=mod & \\ +--enable-null=mod & \\ +--enable-passwd=mod & \\ +--enable-perl=mod & $\rightarrow$Perl scripts support\\ +--enable-shell=mod & $\rightarrow$Shell scripts support\\ +--enable-sql=mod & $\rightarrow$Relational database support\\ +\hline \end{tabular} +\end{itemize} + +Then do:\\ +\#make \&\& make install +\newpage +\section{Configuration} +\subsection{Basic} + +\noindent The configuration of the LDAP server slapd of openLDAP is in /etc/ldap/slapd.conf + +\noindent A \htmladdnormallink{basic configuration}{http://warping.sourceforge.net/gosa/contrib/en/basic_slapd.conf} would be like this: +\begin{center} +\begin{longtable}{|ll|}\hline +\caption{Basic LDAP COnfiguration}\\ +\hline \hline +\multicolumn{2}{|c|}{\textbf{Basic LDAP COnfiguration}}\\ +\hline \hline +\endfirsthead +\hline \hline +\multicolumn{2}{|c|}{\textbf{Basic LDAP COnfiguration (continuation)}}\\ +\hline \hline +\endhead +\hline +\multicolumn{2}{|c|}{Continue $\ldots$}\\ +\hline +\endfoot +\hline +\multicolumn{2}{|c|}{\textbf{End}}\\ +\hline +\endlastfoot +\# Schema and objectClass definitions, basic configuration & \\ +include /etc/ldap/schema/core.schema & \\ +include /etc/ldap/schema/cosine.schema & \\ +include /etc/ldap/schema/inetorgperson.schema & \\ +include /etc/ldap/schema/openldap.schema & \\ +include /etc/ldap/schema/nis.schema & \\ +include /etc/ldap/schema/misc.schema & \\ + & \\ +\# Force entries to match schemas for their ObjectClasses & \\ +schemacheck on & \\ + & \\ +\# Password hash, default crypt type & \\ +\# Puede ser: \{SHA\}, \{MD5\}, \{MD4\}, \{CRYPT\}, \{CLEARTEXT\} & \\ +password-hash \{CRYPT\} & \\ + & \\ +\# Default search base & \\ +defaultsearchbase "dc=CHAOSDIMENSION,dc=ORG" & \\ + & \\ +\#Used by init scripts to stop and to start the server. & \\ +pidfile /var/run/slapd.pid & \\ + & \\ +\# Arguments passed to the server. & \\ +argsfile /var/run/slapd.args & \\ + & \\ +\# Level of log information & \\ +loglevel 1024 & \\ + & \\ +\# Where and which modules load & \\ +modulepath /usr/lib/ldap & \\ +moduleload back\_bdb \# Berkeley BD version 4 & \\ + & \\ +\#definitions of the database & \\ +database bdb & \\ + & \\ +\# The base of the directory & \\ +suffix "dc=CHAOSDIMENSION,dc=ORG" & \\ + & \\ +\# Here is the definition of the administrator of the directory and his key & \\ +\# In this example is " tester" & \\ +\# The crypt key can be extract with & \\ +\# makepasswd --crypt --clearfrom file\_with\_user\_name & \\ + & \\ +rootdn \verb|"cn=ldapadmin,dc=CHAOSDIMENSION,dc=ORG"| & \\ +rootpw \{crypt\}OuorOLd3VqvC2 & \\ + & \\ +\# here are the attributes that we indexed to make searchs & \\ +index default sub & \\ +index uid,mail eq & \\ +index cn,sn,givenName,ou pres,eq,sub & \\ +index objectClass pres,eq & \\ + & \\ +\# Directory where the database is located & \\ +directory " /var/lib/ldap" & \\ + & \\ +\# We say if wished to keep the date of the last modification & \\ +lastmod off & \\ + & \\ +\#Administrator access & \\ +access to * & \\ + by dn=\verb|"cn=ldapadmin,dc=CHAOSDIMENSION,dc=ORG"| =wrscx & \\ + by dn.regex=\verb|"uid=[^{}/]+/admin\+(realm=CHAOSDIMENSION.LOCAL)?"| =wrscx & \\ + by * read & \\ +\end{longtable} +\end{center} + +\newpage +\subsection{GOsa Specifications} + +GOsa adds several schemas for the control of certain services and characteristics of users. \\ + +The necessary schemas for GOsa are in the package, in the contrib section, they need to be copied in /etc/ldap/schema. \\ + +A \htmladdnormallink{recommended configuration}{http://warping.sourceforge.net/gosa/contrib/en/gosa_slapd.conf} of /etc/ldap/slapd.conf is the following one: \\ + +\begin{center} +\begin{longtable}{|ll|}\hline +\caption{LDAP GOsa Configuration}\\ +\hline \hline +\multicolumn{2}{|c|}{\textbf{LDAP GOsa Configuration}}\\ +\hline \hline +\endfirsthead +\hline \hline +\multicolumn{2}{|c|}{\textbf{LDAP GOsa Configuration (continuation)}}\\ +\hline \hline +\endhead +\hline +\multicolumn{2}{|c|}{Continue $\ldots$}\\ +\hline +\endfoot +\hline +\multicolumn{2}{|c|}{\textbf{End}}\\ +\hline +\endlastfoot +\# Schema and objectClass definitions, basic configuration & \\ +include /etc/ldap/schema/core.schema & \\ +include /etc/ldap/schema/cosine.schema & \\ +include /etc/ldap/schema/inetorgperson.schema & \\ +include /etc/ldap/schema/openldap.schema & \\ +include /etc/ldap/schema/nis.schema & \\ +include /etc/ldap/schema/misc.schema & \\ + & \\ +\# These schemes would be present in GOsa. In the case of samba3 & \\ +\# we must change samba.schema and gosa.schema by samba3.schema & \\ +\# and gosa+samba3.schema & \\ +include /etc/ldap/schema/samba3.schema & \\ +include /etc/ldap/schema/pureftpd.schema & \\ +include /etc/ldap/schema/gohard.schema & \\ +include /etc/ldap/schema/gofon.schema & \\ +include /etc/ldap/schema/goto.schema & \\ +include /etc/ldap/schema/gosa+samba3.schema & \\ +include /etc/ldap/schema/gofax.schema & \\ +include /etc/ldap/schema/goserver.schema & \\ + & \\ +\# Force entries to match schemas for their ObjectClasses & \\ +schemacheck on & \\ + & \\ +\# Password hash, type of key encryption & \\ +\# Can be: \{SHA\}, \{SMD5\}, \{MD4\}, \{CRYPT\}, \{CLEARTEXT\} & \\ +password-hash \{CRYPT\} & \\ + & \\ +\# Default search base. & \\ +defaultsearchbase " dc=CHAOSDIMENSION,dc=ORG" & \\ + & \\ +\# Used by init scripts to stop and to start the server. & \\ +pidfile /var/run/slapd.pid & \\ + & \\ +\# Arguments passed to the server. & \\ +argsfile /var/run/slapd.args & \\ + & \\ +\# Log level information & \\ +loglevel 1024 & \\ + & \\ +\# Where and which modules to load. & \\ +modulepath /usr/lib/ldap & \\ +moduleload back\_bdb \# Berkeley BD version 4 & \\ + & \\ +\# Some performance parameters & \\ +threads 64 & \\ +concurrency 32 & \\ +conn\_max\_pending 100 & \\ +conn\_max\_pending\_auth 250 & \\ +reverse-lookup off & \\ +sizelimit 1000 & \\ +timelimit 30 & \\ +idletimeout 30 & \\ + & \\ +\# specific limitations & \\ +limits anonymous size.soft=500 time.soft=5 & \\ + & \\ +\# Definitions of the database & \\ +database bdb & \\ +cachesize 5000 & \\ +checkpoint 512 720 & \\ +mode 0600 & \\ + & \\ +\# The diretory base. & \\ +suffix " dc=CHAOSDIMENSION,dc=ORG" & \\ + & \\ +\# Here is the definition of the administrator of the directory and his key & \\ +\# In this example is " tester" & \\ +\# The crypt key can be extract with & \\ +\# makepasswd --crypt --clearfrom file\_with\_user\_name & \\ + & \\ +rootdn \verb|"cn=ldapadmin,dc=CHAOSDIMENSION,dc=ORG"| & \\ +rootpw \{crypt\}OuorOLd3VqvC2 & \\ + & \\ +\# That attributes we indexed to make search & \\ +index default sub & \\ +index uid,mail eq & \\ +index gosaMailAlternateAddress,gosaMailForwardingAddress eq & \\ +index cn,sn,givenName,ou pres,eq,sub & \\ +index objectClass pres,eq & \\ +index uidNumber,gidNumber,memberuid eq & \\ +index gosaSubtreeACL,gosaObject,gosaUser pres,eq & \\ + & \\ +\# Indexing for Samba 3 +index sambaSID eq & \\ +index sambaPrimaryGroupSID eq & \\ +index sambaDomainName eq & \\ + & \\ +\# Who can change the user keys & \\ +\# ,only by the own user if is authenticate & \\ +\# or by the administrator & \\ +access to attr=sambaPwdLastSet,sambaPwdMustChange,sambaPwdCanChange & \\ + by dn=\verb|"cn=ldapadmin,dc=CHAOSDIMENSION,dc=ORG"| write & \\ + by dn.regex=\verb|"uid=[^{}/]+/admin\+(realm=CHAOSDIMENSION.LOCAL)?"| write & \\ + by anonymous auth & \\ + by self write & \\ + by * none & \\ +access to attr=userPassword,shadowMax,shadowExpire & \\ + by dn=\verb|"cn=ldapadmin,dc=CHAOSDIMENSION,dc=ORG"| write & \\ + by dn.regex=\verb|"uid=[^{}/]+/admin\+(realm=CHAOSDIMENSION.LOCAL)?"| write & \\ + by anonymous auth & \\ + by self write & \\ + by * none & \\ + & \\ +\# Acess deny to imap keys, fax or kerberos saved in & \\ +\# LDAP & \\ +access to attr=goImapPassword & \\ + by dn=\verb|"cn=ldapadmin,dc=CHAOSDIMENSION,dc=ORG"| write & \\ + by dn.regex=\verb|"uid=[^{}/]+/admin\+(realm=CHAOSDIMENSION.LOCAL)?"| write & \\ + by * none & \\ +access to attr=goKrbPassword & \\ + by dn=\verb|"cn=ldapadmin,dc=CHAOSDIMENSION,dc=ORG"| write & \\ + by dn.regex=\verb|"uid=[^{}/]+/admin\+(realm=CHAOSDIMENSION.LOCAL)?"| write & \\ + by * none & \\ +access to attr=goFaxPassword & \\ + by dn=\verb|"cn=ldapadmin,dc=CHAOSDIMENSION,dc=ORG"| write & \\ + by dn.regex=\verb|"uid=[^{}/]+/admin\+(realm=CHAOSDIMENSION.LOCAL)?"| write & \\ + by * none & \\ + & \\ +\# Permit that server write the LastUser attribute & \\ +access to attr=gotoLastUser & \\ + by * write & \\ + & \\ +\# The samba keys by defect only can be changed & \\ +\# by the user if has been authenticate. & \\ +access to attr=sambaLmPassword,sambaNtPassword & \\ + by dn=\verb|"cn=ldapadmin,dc=CHAOSDIMENSION,dc=ORG"| write & \\ + by dn.regex=\verb|"uid=[^{}/]+/admin\+(realm=CHAOSDIMENSION.LOCAL)?"| write & \\ + by anonymous auth & \\ + by self write & \\ + by * none & \\ + & \\ +\# Allow write access for terminal administrator & \\ +access to dn=" ou=incoming,dc=CHAOSDIMENSION,dc=ORG" & \\ + by dn=\verb|"cn=terminal-admin,dc=CHAOSDIMENSION,dc=ORG"| write & \\ + by dn=\verb|"cn=ldapadmin,dc=CHAOSDIMENSION,dc=ORG"| write & \\ + by dn.regex=\verb|"uid=[^{}/]+/admin\+(realm=CHAOSDIMENSION.LOCAL)?"| write & \\ + & \\ +access to dn.subtree=" ou=incoming,dc=CHAOSDIMENSION,dc=ORG" & \\ + by dn=\verb|"cn=terminal-admin,dc=CHAOSDIMENSION,dc=ORG"| write & \\ + by dn=\verb|"cn=ldapadmin,dc=CHAOSDIMENSION,dc=ORG"| write & \\ + by dn.regex=\verb|"uid=[^{}/]+/admin\+(realm=CHAOSDIMENSION.LOCAL)?"| write & \\ + & \\ +\# Directory where is the database & \\ +directory " /var/lib/ldap" & \\ + & \\ +\# Indicate if we wished to keep the modification last date & \\ +lastmod off & \\ + & \\ +\# Administrator access & \\ +access to * & \\ + by dn=\verb|"cn=ldapadmin,dc=CHAOSDIMENSION,dc=ORG"| =wrscx & \\ + by dn.regex=\verb|"uid=[^{}/]+/admin\+(realm=CHAOSDIMENSION.LOCAL)?"| =wrscx & \\ + by * read & \\ +\end{longtable} +\end{center} + + +\section{Utilization} +\subsection{PAM/NSS Configuration} + +NSS (Network Security Service Libraries) + +NSS is a basic component of the system, is used for control of accounts POSIX, to be able to use LDAP for accounts POSIX (of the system), we will use NSS\_LDAP, that can be downloaded of \htmladdnormallink{http://www.padl.com/OSS/nss\_ldap.html}{http://www.padl.com/OSS/nss\_ldap.html} , we decompressed it in /usr/src and executed:\\ + +\noindent \#cd /usr/src/nss\_ldap\\ +\noindent \#./configure \&\& make \&\& make install\\ + +The basic configuration of NSS are in /etc/nsswitch.conf and must be left like this for what we want. + +\begin{center} +\begin{longtable}{|ll|}\hline +\caption{NSSWITCH Configuration}\\ +\hline \hline +\multicolumn{2}{|c|}{\textbf{NSSWITCH Configuration}}\\ +\hline \hline +\endfirsthead +\hline \hline +\multicolumn{2}{|c|}{\textbf{NSSWITCH Configuration (continuation)}}\\ +\hline \hline +\endhead +\hline +\multicolumn{2}{|c|}{Continue $\ldots$}\\ +\hline +\endfoot +\hline +\multicolumn{2}{|c|}{\textbf{End}}\\ +\hline +\endlastfoot +passwd: files ldap & \# These are the lines that we changed so that ldap makes requests\\ +group: files ldap & \#\\ +shadow: files ldap & \#\\ + & \\ +hosts: files dns & \\ +networks: files & \\ + & \\ +protocols: db files & \\ +services: db files & \\ +ethers: db files & \\ +rpc: db files & \\ + & \\ +netgroup: nis & \\ +\end{longtable} +\end{center} + + +\newpage +The NSS-LDAP configuration is saved in /etc/nss-ldap.conf and a valid configuration for GOsa would be this: + +\begin{center} +\begin{longtable}{|ll|}\hline +\caption{NSS Configuration}\\ +\hline \hline +\multicolumn{2}{|c|}{\textbf{NSS Configuration}}\\ +\hline \hline +\endfirsthead +\hline \hline +\multicolumn{2}{|c|}{\textbf{NSS Configuration (continuation)}}\\ +\hline \hline +\endhead +\hline +\multicolumn{2}{|c|}{Continue $\ldots$}\\ +\hline +\endfoot +\hline +\multicolumn{2}{|c|}{\textbf{End}}\\ +\hline +\endlastfoot +host ip.servidor.ldap & \# Here we will put our LDAP server LDAP\\ +base ou=people,dc=CHAOSDIMENSION,dc=ORG & \# Here is where are going to go the users and\\ + & \# their passwords. OU means organizational\\ + & \# unit and OU=people is the place where\\ + & \# GOsa save the characteristics of the users\\ +ldap\_version 3 & \# Supported Version of LDAP \\ + & \# (the use of version 3 is recommended)\\ +nss\_base\_passwd ou=people,dc=CHAOSDIMENSION,DC=ORG?one & \# Where we search for POSIX characteristics\\ +nss\_base\_shadow ou=people,dc=CHAOSDIMENSION,DC=ORG?one & \# Where we search for the passwords\\ +nss\_base\_group ou=groups,dc=CHAOSDIMENSION,DC=ORG?one & \# Where is the POSIX group characteristics\\ +\end{longtable} +\end{center} + +PAM (Pluggable Authentication Modules) is a package of dynamic libraries that allow to system administrators to choose in which way the applications authenticates the users. + +PAM is in all the distributions, save the configurations of each module in /etc/pam.d and have the dynamic libraries in /lib/security. + +We are going to concentrate on one of the PAM modules: pam\_ldap. This module will serve to us so that the applications that don't use LDAP and use the system base of authentication and control of sessions, indirectly accede LDAP for authentication. + +With PAM\_LDAP and the infrastructure of PAM we gain that POSIX users of the system, work through LDAP and they can be created with GOsa. + +PAM\_LDAP can be downloaded from \htmladdnormallink{http://www.padl.com/OSS/pam\_ldap.html}{http://www.padl.com/OSS/pam\_ldap.html}, we decompressed it is /usr/src and we executed the clasic: \\ + +\#./configure \&\& make \&\& make install\\ +\\ +The configuration of this module will be in /etc/pam\_ldap.conf, a basic working configuration will be like this: +\begin{center} +\begin{longtable}{|ll|}\hline +\caption{PAM Configuration}\\ +\hline \hline +\multicolumn{2}{|c|}{\textbf{PAM Configuration}}\\ +\hline \hline +\endfirsthead +\hline \hline +\multicolumn{2}{|c|}{\textbf{PAM Configuration (continuation)}}\\ +\hline \hline +\endhead +\hline +\multicolumn{2}{|c|}{Continue $\ldots$}\\ +\hline +\endfoot +\hline +\multicolumn{2}{|c|}{\textbf{End}}\\ +\hline +\endlastfoot +host ip.servidor.ldap & \# Here we put where will be our LDAP server\\ +base ou=people,dc=CHAOSDIMENSION,dc=ORG & \# Here is where are going to go the users and their passwords.\\ + & \# OU means organizational unit\\ + & \# and OU=people is the place where GOsa\\ + & \# save the users characteristics\\ +ldap\_version 3 & \# Supported Version of LDAP (very recommended version 3)\\ +scope one & \# In gosa the users are at the same level, we did not need to descend.\\ +rootbinddn cn=ldapadmin,dc=solaria,dc=es & \# Here is the LDAP administrator DN of the server,\\ + & \# is necessary, since the server\\ + & \# will give access to the encrypted passwords to the administrator.\\ +pam\_password md5 & \# Indicate as password are encrypted.\\ +\end{longtable} +\end{center} + + +In the file /etc/secret we will put the LDAP administrator password, this file, like the previous one only could be accessible by root. + +Now, in order to be able to use LDAP authentication with the services, we will have to configure three pam configuration files:\\ +Control of accounts /etc/pam.d/common-account: +\begin{center} +\begin{longtable}{|ll|}\hline +\caption{PAM common-account Configuration}\\ +\hline \hline +\multicolumn{2}{|c|}{\textbf{PAM common-account Configuration}}\\ +\hline \hline +\endfirsthead +\hline \hline +\multicolumn{2}{|c|}{\textbf{PAM common-account Configuration (continuation)}}\\ +\hline \hline +\endhead +\hline +\multicolumn{2}{|c|}{Continue $\ldots$}\\ +\hline +\endfoot +\hline +\multicolumn{2}{|c|}{\textbf{End}}\\ +\hline +\endlastfoot +account required pam\_unix.so & \# Always required\\ +account sufficient pam\_ldap.so & \# The calls to ldap\\ +\end{longtable} +\end{center} + + +Authentication control /etc/pam.d/common-auth: +\begin{center} +\begin{longtable}{|ll|}\hline +\caption{PAM common-auth Configuration}\\ +\hline \hline +\multicolumn{2}{|c|}{\textbf{PAM common-auth Configuration}}\\ +\hline \hline +\endfirsthead +\hline \hline +\multicolumn{2}{|c|}{\textbf{PAM common-auth Configuration (continuation)}}\\ +\hline \hline +\endhead +\hline +\multicolumn{2}{|c|}{Continue $\ldots$}\\ +\hline +\endfoot +\hline +\multicolumn{2}{|c|}{\textbf{End}}\\ +\hline +\endlastfoot +auth sufficient pam\_unix.so & \# Authentication Standar\\ +auth sufficient pam\_ldap.so try\_first\_pass & \# LDAP Authentication in the first attempt\\ +auth required pam\_env.so & \\ +auth required pam\_securetty.so & \\ +auth required pam\_unix\_auth.so & \\ +auth required pam\_warn.so & \\ +auth required pam\_deny.so & \\ +\end{longtable} +\end{center} + + +Session control /etc/pam.d/common-session: +\begin{center} +\begin{longtable}{|ll|}\hline +\caption{PAM common-session Configuration}\\ +\hline \hline +\multicolumn{2}{|c|}{\textbf{PAM common-session Configuration}}\\ +\hline \hline +\endfirsthead +\hline \hline +\multicolumn{2}{|c|}{\textbf{PAM common-session Configuration (continuation)}}\\ +\hline \hline +\endhead +\hline +\multicolumn{2}{|c|}{Continue $\ldots$}\\ +\hline +\endfoot +\hline +\multicolumn{2}{|c|}{\textbf{End}}\\ +\hline +\endlastfoot +session required pam\_limits.so & \\ +session required pam\_unix.so & \# Standar UNIX session\\ +session optional pam\_ldap.so & \# LDAP based session\\ +\end{longtable} +\end{center} + +This configuration will be necessary to use POSIX and SAMBA at least. +\newpage +\subsection{Replication} + +If we have more that one domain we must have a distributed structure, that is more efficient against failures. A basic structure would be a master server with a complete LDAP tree and servers with LDAP subtrees that only have the part of the tree for the domain they control. + +This way GOsa controls the master server and the domain servers through a process called replication. + +The replication is made in the configuration of ldap, but it is not executed by the daemon slapd, but another one called slurp. Its configuration is made in the database that we want to replicate, like in the basic example we have only configured a database that will be added at the end of the configuration file /etc/ldap/slapd.conf: + +\begin{center} +\begin{longtable}{|ll|}\hline +\caption{Replica Configuration}\\ +\hline \hline +\multicolumn{2}{|c|}{\textbf{Replica Configuration}}\\ +\hline \hline +\endfirsthead +\hline \hline +\multicolumn{2}{|c|}{\textbf{Replica Configuration (continuation)}}\\ +\hline \hline +\endhead +\hline +\multicolumn{2}{|c|}{Continue $\ldots$}\\ +\hline +\endfoot +\hline +\multicolumn{2}{|c|}{\textbf{End}}\\ +\hline +\endlastfoot +\# Replica configuration & \\ +\#Used by init scripts to stop and to start the server. & \\ +replica-pidfile /var/run/slurp.pid & \\ + & \\ +\# Arguments passed to the server. & \\ +replica-argsfile /var/run/slapd.args & \\ + & \\ +\# Place where we recorded the log of replica, is used by slurpd & \\ +replogfile /var/lib/ldap/replog & \\ +\# The replicas & \\ +\# Slave1 replica indication & \\ +replica & \\ +\#URI direction of slave1 & \\ +uri=ldap://ip.server.slave1 & \\ +\#That we are going to reply & \\ +\# from the master server & \\ +suffix=" dc=domain1,dc=CHAOSDIMENSION,dc=ORG" & \\ +\#How we are going to authenticate & \\ +bindmethod=simple & \\ +\# reply DN of the slave1 & \\ +binddn=\verb|"cn=esclavo1,ou=people,dc=dominio1,dc=CHAOSDIMENSION,dc=ORG"| & \\ +\#Password of slave1 reply DN & \\ +credentials=" tester" & \\ +\# Slave2 replica indication & \\ +replica & \\ +uri=ldap://ip.server.slave2 & \\ +suffix=" dc=domain2,dc=CHAOSDIMENSION,dc=ORG" & \\ +bindmethod=simple & \\ +binddn=\verb|"cn=esclavo2,ou=people,dc=dominio2,dc=CHAOSDIMENSION,dc=ORG"| & \\ +credentials=" tester" & \\ +\end{longtable} +\end{center} + + +By simplicity we suppose that both slaved servers are configured like the master, excepted the replica configuration of the master and the indications at the slaves of who is the master server. + +In the slaved servers we must add at the end of /etc/ldap/slapd.conf: + +In slave 1:\\ + +\begin{tabular}{|ll|}\hline +\# Who can update the server & \\ +updatedn \verb|"cn=slave1,dc=domain1,dc=CHAOSDIMENSION,dc=ORG"| & \\ +\# From where & \\ +updateref ldap://ip.server.master & \\ +\#Access allow & \\ +access to dn.subtree= " dc=domain1,dc=CHAOSDIMENSION,dc=ORG" & \\ +by dn= \verb|"cn=slave1,dc=domain1,dc=CHAOSDIMENSION,dc=ORG"| =wrscx & \\ +by * none & \\ +\hline\end{tabular} +\vspace{0.5cm} + +In slave 2:\\ + +\begin{tabular}{|ll|}\hline +\# Who can update the server & \\ +updatedn \verb|"cn=slave2,dc=domain2,dc=CHAOSDIMENSION,dc=ORG"| & \\ +\#From where & \\ +updateref ldap://ip.server.master & \\ +\#Access allow & \\ +access to dn.subtree= " dc=domain2,dc=CHAOSDIMENSION,dc=ORG" & \\ +by dn= \verb|"cn=slave2,dc=domain2,dc=CHAOSDIMENSION,dc=ORG"| =wrscx & \\ +by * none & \\ +\hline\end{tabular} +\vspace{0.5cm} + +Also we must create the replica users in the corresponding databases. That will be explained in the following point. + +\subsection{Data Load} + + +In this point we will give the initial data of our necessary LDAP tree for GOsa. Also we will show how upload the data and what to do in the case of a unique servant or in a case where there are replicas. + +The load can be done of two ways, one is trought of slapadd and the other is trought of ldapadd.\\ +In the first case the load is made against the database, this replication does not exist and then will not be update the data in LDAP server until is initiated again, \textbf{the load of data this way must be done with the server stopped}. In the second case, the load will be trought LDAP and it will update self and will be replicated in the pertinent way. + +For a load from zero of the database, we will have to do it from slapadd, with the daemon slapd stopped. + +The way slapadd must be used is: \\ + +\noindent \#slapadd -v -l fichero\_con\_datos.ldif\\ + +LDIF is the standard format to save data from LDAP. GOsa come with its own ldif of example, in following two points we will explain how it must be used for our necessities. +\vspace{1cm} + +\subsubsection{Server Alone} + +This is the most basic case, here isn't replication and only we need a single tree. In our example we will suppose that our GOsa tree is in dc=CHAOSDIMENSION, dc=ORG.\\ + +We will load the data with a script, called \htmladdnormallink{load.sh}{http://warping.sourceforge.net/gosa/contrib/en/load.sh}, this simplified the steps to load. The parameters of script will be: DN of the base, IMAP Server adn Kerberos Realm. +\begin{center} +\begin{longtable}{|l|}\hline +\caption{Load Data on Single Server Configuration}\\ +\hline \hline +\multicolumn{1}{|c|}{\textbf{Load Data on Single Server Configuration}}\\ +\hline \hline +\endfirsthead +\hline \hline +\multicolumn{1}{|c|}{\textbf{Load Data on Single Server Configuration (continuation)}}\\ +\hline \hline +\endhead +\hline +\multicolumn{1}{|c|}{Continue $\ldots$}\\ +\hline +\endfoot +\hline +\multicolumn{1}{|c|}{\textbf{End}}\\ +\hline +\endlastfoot +\#!/bin/sh\\ +\\ +if [ \$\{\#@\} != 3 ]\\ +then\\ +\verb| |echo "The parameters DN base, IMAP Server and Kerberos server are needed"\\ +\verb| |echo "For example: ./carga.sh dc=CHAOSDIMENSION,dc=ORG imap.solaria krb.solaria"\\ +\verb| |exit\\ +fi\\ +\\ +DC=`echo \$1|cut -d\textbackslash= -f 2|cut -d\textbackslash, -f 1`\\ +IMAP=\$2\\ +KRB=\$3\\ +\\ +slapadd \verb|<<| EOF\\ +dn: \$1\\ +objectClass: dcObject\\ +objectClass: organization\\ +description: Base object\\ +dc: \$DC\\ +o: My own Organization\\ +\\ +dn: cn=terminal-admin,\$1\\ +objectClass: person\\ +cn: terminal-admin\\ +sn: Upload user\\ +description: GOto Upload Benutzer\\ +userPassword:: e2tlcmJlcm9zfXRlcm1pbmFsYWRtaW5AR09OSUNVUy5MT0NBTAo=\\ +\\ +dn: ou=systems,\$1\\ +objectClass: organizationalUnit\\ +ou: systems\\ +\\ +dn: ou=terminals,ou=systems,\$1\\ +objectClass: organizationalUnit\\ +ou: terminals\\ +\\ +dn: ou=servers,ou=systems,\$1\\ +objectClass: organizationalUnit\\ +ou: servers\\ +\\ +dn: ou=people,\$1\\ +objectClass: organizationalUnit\\ +ou: people\\ +\\ +dn: ou=groups,\$1\\ +objectClass: organizationalUnit\\ +ou: groups\\ +\\ +dn: cn=default,ou=terminals,ou=systems,\$1\\ +objectClass: gotoTerminal\\ +cn: default\\ +gotoMode: disabled\\ +gotoXMethod: query\\ +gotoRootPasswd: tyogUVSVZlEPs\\ +gotoXResolution: 1024x768\\ +gotoXColordepth: 16\\ +gotoXKbModel: pc104\\ +gotoXKbLayout: de\\ +gotoXKbVariant: nodeadkeys\\ +gotoSyslogServer: lts-1\\ +gotoSwapServer: lts-1:/export/swap\\ +gotoLpdServer: lts-1:/export/spool\\ +gotoNtpServer: lts-1\\ +gotoScannerClients: lts-1.\$DC.local\\ +gotoFontPath: inet/lts-1:7110\\ +gotoXdmcpServer: lts-1\\ +gotoFilesystem: afs-1:/export/home /home nfs exec,dev,suid,rw,hard,nolock,fg,rsize=8192 1 1\\ +\\ +dn: cn=admin,ou=people,\$1\\ +objectClass: person\\ +objectClass: organizationalPerson\\ +objectClass: inetOrgPerson\\ +objectClass: gosaAccount\\ +uid: admin\\ +cn: admin\\ +givenName: admin\\ +sn: GOsa main administrator\\ +sambaLMPassword: 10974C6EFC0AEE1917306D272A9441BB\\ +sambaNTPassword: 38F3951141D0F71A039CFA9D1EC06378\\ +userPassword:: dGVzdGVy\\ +\\ +dn: cn=administrators,ou=groups,\$1\\ +objectClass: gosaObject\\ +objectClass: posixGroup\\ +objectClass: top\\ +gosaSubtreeACL: :all\\ +cn: administrators\\ +gidNumber: 999\\ +memberUid: admin\\ +\\ +dn: cn=lts-1,ou=servers,ou=systems,\$1\\ +objectClass: goTerminalServer\\ +objectClass: goServer\\ +goXdmcpIsEnabled: true\\ +macAddress: 00:B0:D0:F0:DE:1D\\ +cn: lts-1\\ +goFontPath: inet/lts-1:7110\\ +\\ +dn: cn=afs-1,ou=servers,ou=systems,\$1\\ +objectClass: goNfsServer\\ +objectClass: goNtpServer\\ +objectClass: goLdapServer\\ +objectClass: goSyslogServer\\ +objectClass: goCupsServer\\ +objectClass: goServer\\ +macAddress: 00:B0:D0:F0:DE:1C\\ +cn: afs-1\\ +goExportEntry: /export/terminals 10.3.64.0/255.255.252.0(ro,async,no\_root\_squash)\\ +goExportEntry: /export/spool 10.3.64.0/255.255.252.0(rw,sync,no\_root\_squash)\\ +goExportEntry: /export/swap 10.3.64.0/255.255.252.0(rw,sync,no\_root\_squash)\\ +goExportEntry: /export/home 10.3.64.0/255.255.252.0(rw,sync,no\_root\_squash)\\ +goLdapBase: \$1\\ +\\ +dn: cn=vserver-02,ou=servers,ou=systems,\$1\\ +objectClass: goImapServer\\ +objectClass: goServer\\ +macAddress: 00:B0:D0:F0:DE:1F\\ +cn: vserver-02\\ +goImapName: imap://\$IMAP\\ +goImapConnect: {\$IMAP:143}\\ +goImapAdmin: cyrus\\ +goImapPassword: secret\\ +goImapSieveServer: \$IMAP\\ +goImapSievePort: 2000\\ +\\ +dn: cn=kerberos,ou=servers,ou=systems,\$1\\ +objectClass: goKrbServer\\ +objectClass: goServer\\ +macAddress: 00:B0:D0:F0:DE:1E\\ +cn: kerberos\\ +goKrbRealm: \$KRB\\ +goKrbAdmin: admin/admin\\ +goKrbPassword: secret\\ +\\ +dn: cn=fax,ou=servers,ou=systems,\$1\\ +objectClass: goFaxServer\\ +objectClass: goServer\\ +macAddress: 00:B0:D0:F0:DE:10\\ +cn: fax\\ +goFaxAdmin: fax\\ +goFaxPassword: secret\\ +\\ +dn: ou=incoming,\$1\\ +objectClass: organizationalUnit\\ +ou: incoming\\ +\\ +EOF\\ +\end{longtable} +\end{center} + + +\subsubsection{Master Server and two slaves} + +The data will be loaded with the same script of the previous section, in the master and in the slaves, with the following differences:\\ + +In the master "DC=CHAOSDIMENSION, dc=ORG" we will execute this script \htmladdnormallink{creating\_base.sh}{http://warping.sourceforge.net/gosa/contrib/en/creating\_base.sh} to create the base: \\ + +\begin{center} +\begin{longtable}{|l|}\hline +\caption{Create Base Configuration}\\ +\hline \hline +\multicolumn{1}{|c|}{\textbf{Create Base Configuration}}\\ +\hline \hline +\endfirsthead +\hline \hline +\multicolumn{1}{|c|}{\textbf{Create Base Configuration (continuation)}}\\ +\hline \hline +\endhead +\hline +\multicolumn{1}{|c|}{Continue $\ldots$}\\ +\hline +\endfoot +\hline +\multicolumn{1}{|c|}{\textbf{End}}\\ +\hline +\endlastfoot +\#!/bin/sh\\ +\\ +if [ \$\{\#@\} != 1 ]\\ +then\\ +\verb| |echo "Is needed the parameter base DN of the master"\\ +\verb| |echo "For example creating\_base.sh dc=CHAOSDIMENSION,dc=ORG"\\ +\verb| |exit\\ +fi\\ +\\ +DC=`echo \$1|cut -d\textbackslash= -f 2|cut -d\textbackslash, -f 1`\\ +\\ +slapadd \verb|<<| EOF\\ +dn: \$1\\ +objectClass: dcObject\\ +objectClass: organization\\ +description: Base object\\ +dc: \$DC\\ +o: My own Base Organization\\ +EOF\\ +\end{longtable} +\end{center} + + +Also with the script of the previous section we will load the domains\\ "DC=domain1, DC=CHAOSDIMENSION, DC=ORG" and "DC=domain2, DC=CHAOSDIMENSION, DC=ORG". \\ + +In slave1 we will execute script with "DC=domain1, DC=CHAOSDIMENSION, DC=ORG" and in slave2 with "DC=domain2, DC=CHAOSDIMENSION, DC=ORG". In both cases both LDAP slave servers will be configured for their own DN.\\ + +At last we need to create the user for the replica, who could make it with the following script (\htmladdnormallink{user\_replica.sh}{http://warping.sourceforge.net/gosa/contrib/en/user\_replica.sh}) with the name of the user and the DN base: \\ + +\begin{center} +\begin{longtable}{|l|}\hline +\caption{Create replica user Configuration}\\ +\hline \hline +\multicolumn{1}{|c|}{\textbf{Create replica user Configuration}}\\ +\hline \hline +\endfirsthead +\hline \hline +\multicolumn{1}{|c|}{\textbf{Create replica user Configuration (continuation)}}\\ +\hline \hline +\endhead +\hline +\multicolumn{1}{|c|}{Continue $\ldots$}\\ +\hline +\endfoot +\hline +\multicolumn{1}{|c|}{\textbf{End}}\\ +\hline +\endlastfoot +\#!/bin/sh\\ +\\ +if [ \$\{\#@\} != 2 ]\\ +then\\ +\verb| |echo "Are needed the parameters name of user and DN base for replica"\\ +\verb| |echo "For example user\_replica.sh replicator dc=domain1,dc=CHAOSDIMENSION,dc=ORG"\\ +\verb| |exit\\ +fi\\ +\\ +KEY=`makepasswd --crypt --chars=7 \textbackslash\\ --string="abcdefghijklmnopqrstuvwxyz1234567890"`\\ +PASS=`echo \$KEY|awk '\{ print \$1\}'`\\ +CRYPT=`echo \$KEY|awk '\{ print \$2\}'`\\ + +echo "Creating user \$1 with password: \$PASS"\\ + +slapadd \verb|<<| EOF\\ +dn: cn=\$1,ou=people,\$2\\ +displayName: Debian User,,,\\ +userPassword: \{crypt\} \$CRYPT\\ +sambaLMPassword: \\ +sambaNTPassword: \\ +sn: \$1\\ +givenName: \$1\\ +cn: \$1\\ +homeDirectory: /home/\$1\\ +loginShell: /bin/false\\ +uidNumber: 10000\\ +gidNumber: 100\\ +gecos: \$1\\ +shadowMin: 0\\ +shadowMax: 99999\\ +shadowWarning: 7\\ +shadowInactive: 0\\ +shadowLastChange: 12438\\ +gosaDefaultLanguage: en\_EN\\ +uid: \$1\\ +objectClass: posixAccount\\ +objectClass: shadowAccount\\ +objectClass: person\\ +objectClass: organizationalPerson\\ +objectClass: inetOrgPerson\\ +objectClass: gosaAccount\\ +objectClass: top\\ +EOF\\ +\end{longtable} +\end{center} + + diff --git a/doc/guide/admin/en/referencias_gosa.bib b/doc/guide/admin/en/referencias_gosa.bib new file mode 100644 index 000000000..8c8100b96 --- /dev/null +++ b/doc/guide/admin/en/referencias_gosa.bib @@ -0,0 +1,109 @@ +@Manual{x500, +title = {Understanding X.500 - The Directory}, +key = {x500}, +author = { D W Chadwick}, +} + +@TechReport{2251, +author = {Network Working Group}, +title = {Request for Comments: 2251. Lightweight Directory Access Protocol (v3)}, +institution = {}, +year = {}, +address = {http://www.ietf.org/rfc/rfc2251.txt}, +} + +@TechReport{2252, +author = {Network Working Group}, +title = {Request for Comments: 2252. Lightweight Directory Access Protocol (v3): Attribute Syntax Definitions}, +institution = {}, +year = {}, +address = {http://www.ietf.org/rfc/rfc2252.txt}, +} + +@TechReport{2253, +author = {Network Working Group}, +title = {Request for Comments: 2253. Lightweight Directory Access Protocol (v3): UTF-8 String Representation of Distinguished Names}, +institution = {}, +year = {}, +address = {http://www.ietf.org/rfc/rfc2253.txt}, +} + +@TechReport{2254, +author = {Network Working Group}, +title = {Request for Comments: 2254. The String Representation of LDAP Search Filters}, +institution = {}, +year = {}, +address = {http://www.ietf.org/rfc/rfc2254.txt}, +} + +@TechReport{2255, +author = {Network Working Group}, +title = {Request for Comments: 2255. The LDAP URL Format}, +institution = {}, +year = {}, +address = {http://www.ietf.org/rfc/rfc2255.txt}, +} + +@TechReport{2256, +author = {Network Working Group}, +title = {Request for Comments: 2256. A Summary of the X.500(96) User Schema for use with LDAPv3}, +institution = {}, +year = {}, +address = {http://www.ietf.org/rfc/rfc2256.txt}, +} + +@TechReport{3377, +author = {Network Working Group}, +title = {Request for Comments: 3377. Lightweight Directory Access Protocol (v3): Technical Specification}, +institution = {}, +year = {}, +address = {http://www.ietf.org/rfc/rfc3377.txt}, +} + +@TechReport{llh, +author = {Luiz Ernesto Pinheiro Malère}, +title = {LDAP Linux HOWTO}, +institution = {}, +year = {}, +address = {http://www.tldp.org/HOWTO/LDAP-HOWTO/index.html}, +} + +@TechReport{ul, +author = {metaconsultancy}, +title = {Using OpenLDAP}, +institution = {}, +year = {}, +address = {http://www.metaconsultancy.com/whitepapers/ldap.htm}, +} + +@TechReport{oag, +author = {The OpenLDAP Project}, +title = {OpenLDAP 2.2 Administrator's Guide}, +institution = {}, +year = {}, +address = {http://www.openldap.org/doc/admin22/index.html}, +} + +@TechReport{lscp, +author = {Sergio González González}, +title = {Integración de redes con OpenLDAP, Samba, CUPS y PyKota}, +institution = {}, +year = {}, +address = {http://es.tldp.org/Tutoriales/doc-openldap-samba-cups-python/html/ldap+samba+cups+pykota.html}, +} + +@TechReport{ssldoc, +author = {OpenSSL Project}, +title = {OpenSSL Documents}, +institution = {}, +year = {}, +address = {http://www.openssl.org/docs/}, +} + +@TechReport{2616, +author = {Network Working Group}, +title = {Request for Comments: 2616. Hypertext Transfer Protocol -- HTTP/1.1}, +institution = {}, +year = {}, +address = {http://www.ietf.org/rfc/rfc2616.txt}, +} diff --git a/doc/guide/admin/es/manual_gosa_es.tex b/doc/guide/admin/es/manual_gosa_es.tex new file mode 100644 index 000000000..6aaff0c53 --- /dev/null +++ b/doc/guide/admin/es/manual_gosa_es.tex @@ -0,0 +1,82 @@ +\documentclass[a4paper,spanish,10pt]{book} + +\usepackage[latin1]{inputenc} +\usepackage[T1]{fontenc} +\usepackage[pdftex]{graphicx} +\usepackage[spanish]{babel} +\usepackage{times} +\usepackage{multirow} +\usepackage[latex2html,backref,pdftitle={GOsa}]{hyperref} +\usepackage{html,color} +\usepackage{latexsym} +\usepackage{anysize} +\usepackage{float} +\usepackage{longtable} +\usepackage{verbatim} + +\author{Alejandro Escanero Blanco} +\title{Administración de Sistemas con GOsa } +\date{28-03-05} + +\marginsize{3cm}{2cm}{2.5cm}{2.5cm} + +\begin{document} +\renewcommand{\contentsname}{Índice General} +\renewcommand{\listfigurename}{Lista de Figuras} +\renewcommand{\listtablename}{Lista de Tablas} +\renewcommand{\bibname}{Bibliografía} +\renewcommand{\indexname}{Índice Alfabético} +\renewcommand{\figurename}{Figura} +\renewcommand{\partname}{Parte} +\renewcommand{\chaptername}{Capítulo} +\renewcommand{\appendixname}{Apéndice} +\renewcommand{\abstractname}{Resumen} +\renewcommand{\tablename}{Tabla} + +\maketitle +\newpage +\tableofcontents +\newpage +\listoffigures +\newpage +\listoftables +\newpage + +\chapter*{Preámbulo} + +\htmladdnormallink{GOsa}{http://gosa.gonicus.de}, es un proyecto creado en el año 2001 por Cajus Pollmeier \htmladdnormallink{Cajus Pollmeier}{mailto://pollmeier@gonicus.de} + +En su versión 1.0 era un proyecto ambicioso, pero mal enfocado. Entre como desarrollador del proyecto en Junio del 2003 en las primeras versiones de la versión 1.99.xx. +El código fue rehecho completamente y se creo una nueva versión modular y extensible (basada en plugins) y se optimizo enormemente su funcionamiento. + +La versión actual de GOsa (a la fecha de la versión de este documento) es la 2.3. +Es capaz de gestionar gran cantidad de servicios como samba2/3, pureftpd, postfix, cyrus-imap, posix, etc. +Y cuenta con un pequeño, pero muy activo grupo de desarrolladores dirigido por Cajus. + +\chapter{Introducción} +La administración de sistemas puede llegar a ser una tarea realmente complicada, demasiados usuarios con servicios y permisos diferentes. +\section{Copyright and Disclaimer} +Copyright (c) 2005 Alejandro Escanero Blanco. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts and with no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License". + +If you have questions, please visit the following url: http://www.gnu.org/licenses/fdl.txt\\ And contact at: \htmladdnormallink{blainett@yahoo.es}{mailto://blainett@yahoo.es} + + +\include{manual_gosa_es_ldap} + +\include{manual_gosa_es_apache} + +\chapter{GOsa} + +\chapter{Los Servidores} +\label{servidores} +\section{Postfix} +\section{Cyrus-IMAP} +\section{Samba 2/3} +\section{Pure-Ftpd} +\section{Squid} +\section{Egroupware} + +\bibliography{referencias_gosa} +\bibliographystyle{unsrt} + +\end{document} diff --git a/doc/guide/admin/es/manual_gosa_es_apache.tex b/doc/guide/admin/es/manual_gosa_es_apache.tex new file mode 100644 index 000000000..df71abad7 --- /dev/null +++ b/doc/guide/admin/es/manual_gosa_es_apache.tex @@ -0,0 +1,822 @@ +\chapter{Apache y PHP} +\section{Introducción a Apache} + +GOsa es una aplicación escrita en el lenguaje de programación PHP y pensada para uso a través de páginas web. + +Aunque todo el mundo conoce lo que es una página web, no viene de menos repasar algunos puntos: + +\begin{description} +\item[WWW] +La World Wide Web (Red alrededor del mundo) es el motor de lo que conocemos como internet, es un espacio de información donde cada recurso está identificado por su URI (Identificador de Recurso Universal / Universal Resource Identifier), este define el protocolo necesario para acceder a la información, el equipo que la posee y donde está colocada. + +La WWW es la gran revolución de nuestra época, es una fuente enorme de información. Y como tal todas las aplicaciones están siendo orientadas a ella. GOsa usa WWW por una sencilla razón, distribuye el programa, una aplicación orientada a internet es capaz de ser usada desde cualquier lugar y prácticamente en cualquier momento. GOsa no necesita estar siendo ejecutado en la misma máquina que lo tiene, mas +aun cada uno de los servidores que controla pueden estar en máquinas diferentes y en remotos lugares. + +\item[HTTP] +\htmladdnormallink{HTTP}{http://www.w3.org/Protocols/}\cite{2616} es el acrónimo de Protocolo de Transferencia de Texto / HyperText Transfer Protocol, cuyo propósito mas importante es la publicación y recepción de "páginas Web". + +Es un protocolo de nivel de aplicación ideado para sistemas distribuidos de información hipermedia. Ha estado siendo usada para la WWW desde 1990, la versión actual es HTTP/1.1. + +El funcionamiento práctico se puede reducir a un cliente que realiza una petición y a un servidor que gestiona esa petición y realiza una respuesta. + +\item[HTML] +Si la petición del cliente y la respuesta del servidor son correctas, la respuesta del servidor contendrá algún tipo de hipermedia, el mas habitual es \htmladdnormallink{HTML}{http://www.w3.org/TR/1998/REC-html40-19980424/} (Lenguaje de marcas de hipertexto / HyperText Markup Language), un lenguaje pensado para la publicación con contenidos y para una fácil navegación por ellos. Es un protocolo en constante desarrollo, la versión actual es HTML4.01 y en publicación XHTML2.0 +\end{description} + +\htmladdnormallink{APACHE}{http://httpd.apache.org/} es el servidor HTTP mas utilizado que \htmladdnormallink{ existe }{http://news.netcraft.com/archives/web_server_survey.html}, seguro, eficiente y extensible. + +En este manual nos centraremos en este servidor, ya que es el mas usado y tiene una licencia calificada de opensource. + +Mas información sobre este servidor en \htmladdnormallink{http://httpd.apache.org/docs-2.0/}{http://httpd.apache.org/docs-2.0/} + +\section{Introducción a PHP} + +PHP (PHP: Hypertext Preprocessor), es un lenguaje de interpretado alto nivel, especialmente pensado para el diseño de páginas webs. Su sintaxis es una mezcla de C, Perl y Java. Es embebido en las páginas HTML y es ejecutado por el servidor HTTP. + +PHP está ampliamente extendido y tiene un numeroso grupo de desarrolladores, una \htmladdnormallink{ extensa documentación }{http://www.php.net/docs.php} y numerosos sitios webs con documentación y ejemplos. + +\newpage + +\section{Instalación } +\subsection{Descargando e Instalando Apache} +\label{down_apache} +Al igual que en el capítulo anterior, Apache está en prácticamente todas las distribuciones, aunque veremos su instalación desde las fuentes. Nos vamos a centrar por ahora en las versiones mas avanzadas de apache, la serie 2.0.XX considerada estable. + +Se recomienda instalar los mismos paquetes que se necesitan para openLDAP\ref{down_ldap}. + +Se puede descargar de: \htmladdnormallink{http://httpd.apache.org/download.cgi}{http://httpd.apache.org/download.cgi}, la versión que vamos a descargar en /usr/src es la httpd-2.0.XX.tar.gz + +Ejecutamos \htmladdnormallink{./configure}{http://warping.sourceforge.net/gosa/contrib/es/configure-apache.sh} con las siguientes opciones. + +\begin{itemize} +\item[]Generales\\ +\begin{tabular}{|ll|}\hline +--enable-so & $\rightarrow$ Soporte de Objetos Dinámicos Compartidos (DSO)\\ +--with-program-name=apache2 & \\ +--with-dbm=db42 & $\rightarrow$ Versión de la Berkeley DB que vamos a usar\\ +--with-external-pcre=/usr & \\ +--enable-logio & $\rightarrow$ Registro de entrada y salida\\ +--with-ldap=yes & \\ +--with-ldap-include=/usr/include & \\ +--with-ldap-lib=/usr/lib & \\ +\hline \end{tabular} + +\item[]Soporte suexec\\ +\begin{tabular}{|ll|}\hline +--with-suexec-caller=www-data & \\ +--with-suexec-bin=/usr/lib/apache2/suexec2 & \\ +--with-suexec-docroot=/var/www & \\ +--with-suexec-userdir=public\_html & \\ +--with-suexec-logfile=/var/log/apache2/suexec.log & \\ +\hline \end{tabular} + +\item[] +\begin{longtable}{|ll|} +\hline +\multicolumn{2}{|c|}{\textbf{Módulos}}\\ +\hline +\endfirsthead +\hline +\endhead +\hline +\multicolumn{2}{|c|}{Continue $\ldots$}\\ +\hline +\endfoot +\hline +\multicolumn{2}{|c|}{\textbf{End}}\\ +\hline +\endlastfoot +--enable-userdir=shared & $\rightarrow$ mod\_userdir, módulo para directorios de usuario\\ +--enable-ssl=shared & $\rightarrow$ mod\_ssl, módulo de conectividad segura SSL\\ +--enable-deflate=shared & $\rightarrow$ mod\_deflate, módulo para comprimir la información enviada\\ +--enable-ldap=shared & $\rightarrow$ mod\_ldap\_userdir, módulo para caché y conexiones ldap\\ +--enable-auth-ldap=shared & $\rightarrow$ mod\_ldap, módulo de autentificación en ldap\\ +--enable-speling=shared & $\rightarrow$ mod\_speling, módulo para la corrección de fallos en URL\\ +--enable-include=shared & $\rightarrow$ mod\_include, módulo para la inclusión de otras configuraciones\\ +--enable-rewrite=shared & $\rightarrow$ mod\_rewrite, permite la manipulación de URL\\ +--enable-cgid=shared & $\rightarrow$ CGI script\\ +--enable-vhost-alias=shared & $\rightarrow$ módulo de alias de dominios virtuales\\ +--enable-info=shared & $\rightarrow$ Información del servidor\\ +--enable-suexec=shared & $\rightarrow$ Cambia el usuario y el grupo de los procesos\\ +--enable-unique-id=shared & $\rightarrow$ Identificador único por petición\\ +--enable-usertrack=shared & $\rightarrow$ Seguimiento de la sesión de usuario\\ +--enable-expires=shared & $\rightarrow$ Módulo para el envío de la cabecera de expiración\\ +--enable-cern-meta=shared & $\rightarrow$ Ficheros meta tipo CERN\\ +--enable-mime-magic=shared & $\rightarrow$ Determina automáticamente el tipo MIME\\ +--enable-headers=shared & $\rightarrow$ Control cabeceras HTTP\\ +--enable-auth-anon=shared & $\rightarrow$ Acceso a usuarios anónimos\\ +--enable-proxy=shared & $\rightarrow$ Permite el uso de Apache como proxy\\ +--enable-dav=shared & $\rightarrow$ Capaz de manejar el protocolo WebDav\\ +--enable-dav-fs=shared & $\rightarrow$ Proveedor DAV para el sistema de archivos\\ +--enable-auth-dbm=shared & $\rightarrow$ Autentificación basada en base de datos DBM\\ +--enable-cgi=shared & $\rightarrow$ Permite CGI scripts\\ +--enable-asis=shared & $\rightarrow$ Tipos de archivos como son\\ +--enable-imap=shared & $\rightarrow$ Mapas de imágenes en el lado de servidor\\ +--enable-ext-filter=shared & $\rightarrow$ Módulo para filtros externos\\ +--enable-authn-dbm=shared & \\ +--enable-authn-anon=shared & \\ +--enable-authz-dbm=shared & \\ +--enable-auth-digest=shared & $\rightarrow$ Colección de autentificaciones según RFC2617\\ +--enable-actions=shared & $\rightarrow$ Activa acciones según peticiones\\ +--enable-file-cache=shared & $\rightarrow$ Cache de archivos\\ +--enable-cache=shared & $\rightarrow$ Cache dinámico de archivos\\ +--enable-disk-cache=shared & $\rightarrow$ Cache de disco\\ +--enable-mem-cache=shared & $\rightarrow$ Cache de memoria\\ +\hline \end{longtable} +\end{itemize} + +Una vez configurado, hacemos:\\ +\\ +\begin{tabular}{|l|}\hline +\#make \&\& make install\\ +\hline \end{tabular} +\newpage + + +\subsection{ Instalando PHP sobre Apache} + +Se puede descargar de \htmladdnormallink{http://www.php.net/downloads.php}{http://www.php.net/downloads.php} siendo la versión necesaria a la fecha de este manual para utilizar GOsa la 4.3.XX, ya que las versiones 5.0.XX aún no están soportadas. Las descargaremos en /usr/src. + +Para poder compilar los módulos necesarios además de necesitar las librerías de desarrollo de la seccion Servidores \ref{servidores}, además de las mismas que para openLDAP\ref{down_ldap} y Apache\ref{down_apache} necesitaremos alguna librería mas: + +\begin{itemize} +\item[libbz2] +La podemos descargar de \htmladdnormallink{http://sources.redhat.com/bzip2/}{http://sources.redhat.com/bzip2/} para módulo de compresión BZ2. +\item[e2fsprogs] +Se puede descargar de \htmladdnormallink{http://e2fsprogs.sourceforge.net}{http://e2fsprogs.sourceforge.net} para acceso al sistema de archivos. +\item[expat] +Se descarga de \htmladdnormallink{http://expat.sourceforge.net/}{http://expat.sourceforge.net/}, es un parser XML. +\item[zziplib] +Bajarla de \htmladdnormallink{http://zziplib.sourceforge.net/}{http://zziplib.sourceforge.net/}, acceso a archivos ZIP. +\item[zlib] +Desde \htmladdnormallink{http://www.gzip.org/zlib/}{http://www.gzip.org/zlib/} para compresión GZ. +\item[file] +Desde \htmladdnormallink{http://www.darwinsys.com/freeware/file.html}{http://www.darwinsys.com/freeware/file.html} control de archivos. +\item[sed] +De \htmladdnormallink{http://www.gnu.org/software/sed/sed.html}{http://www.gnu.org/software/sed/sed.html}, una de las herramientas mas potentes para manipulación de texto. +\item[libcurl] +Potente herramienta para manejar archivos remotos, la bajaremos de \htmladdnormallink{http://curl.haxx.se/}{http://curl.haxx.se/} . +\item[gettext] +Herramienta GNU para soporte de varios idiomas, la descargamos de \htmladdnormallink{http://www.gnu.org/software/gettext/gettext.html}{http://www.gnu.org/software/gettext/gettext.html} . +\item[libgd] +Para la manipulación y creación de imágenes desde: \htmladdnormallink{http://www.boutell.com/gd/}{http://www.boutell.com/gd/} . +\item[libjpeg] +Manipulación de imágenes JPEG de \htmladdnormallink{http://www.ijg.org/}{http://www.ijg.org/} . +\item[libpng] +Manipulación imágenes PNG de \htmladdnormallink{http://www.libpng.org/pub/png/libpng.html}{http://www.libpng.org/pub/png/libpng.html} . +\item[mcal] +Librería para el acceso a Calendarios remotos, se baja de \htmladdnormallink{http://mcal.chek.com/}{http://mcal.chek.com/} . +\item[libmysql] +Soporte para la famosísima base de datos, es imprescindible para php, se baja de \htmladdnormallink{http://www.mysql.com/}{http://www.mysql.com/} +\end{itemize} + +Una configuración recomendada será: + + +\begin{itemize} +\item[]Apache2\\ +\begin{tabular}{|ll|}\hline +--prefix=/usr --with-apxs2=/usr/bin/apxs2 & \\ +--with-config-file-path=/etc/php4/apache2 & \\ +\hline \end{tabular} + + + +\item[]Opciones de compilación\\ +\begin{tabular}{|ll|}\hline +--enable-memory-limit & \# Compilado con límite de memoria\\ +--disable-debug & \# Compilar sin símbolos de depuración\\ +--disable-static & \# Sin librerías estáticas\\ +--with-pic & \# Usar objetos PIC y no PIC\\ +--with-layout=GNU & \\ +--enable-sysvsem & \# Soporte sysvmsg \\ +--enable-sysvshm & \# Soporte semáforos System V \\ +--enable-sysvmsg & \# Soporte memoria compartida System V \\ +--disable-rpath & \# Desactiva poder pasar rutas a librerías adiciones al binario\\ +--without-mm & \# Desactivar el soporte de sesiones por memoria\\ +\hline \end{tabular} + +\item[]De sesión\\ +\begin{tabular}{|ll|}\hline +--enable-track-vars & \\ +--enable-trans-sid & \\ +\hline \end{tabular} + +\item[]Soporte\\ +\begin{tabular}{|ll|}\hline +--enable-sockets & \# Soporte de sockets\\ +--with-mime-magic=/usr/share/misc/file/magic.mime & \\ +--with-exec-dir=/usr/lib/php4/libexec & \\ +\hline \end{tabular} + +\item[]pear\\ +\begin{tabular}{|ll|}\hline +--with-pear=/usr/share/php & Donde vamos a instalar PEAR\\ +\hline \end{tabular} + +\item[]Funciones\\ +\begin{tabular}{|ll|}\hline +--enable-ctype & Soporte funciones de control de caracteres \\ +--with-iconv & Soporte funciones iconv\\ +--with-bz2 & Soporte Compresión BZ2\\ +--with-regex=php & Tipo de librería de expresiones regulares\\ +--enable-calendar & Funciones para conversión de calendario\\ +--enable-bcmath & Soporte de matemáticas de precisión arbitraria\\ +--with-db4 & DBA: Soporte Berkeley DB versión 4\\ +--enable-exif & Soporte funciones exif, para lectura metadata JPG y TIFF\\ +--enable-ftp & Soporte funciones FTP \\ +--with-gettext & Soporte Localización\\ +--enable-mbstring & \\ +--with-pcre-regex=/usr & \\ +--enable-shmop & Funciones de memoria compartida\\ +--disable-xml --with-expat-dir=/usr & Usa el xml de expat en vez del que viene con php\\ +--with-xmlrpc & \\ +--with-zlib & \\ +--with-zlib-dir=/usr & \\ +--with-imap=shared,/usr & Soporte imap genérico\\ +--with-kerberos=/usr & Imap con autentificación kerberos\\ +--with-imap-ssl & Imap con acceso seguro SSL\\ +--with-openssl=/usr & \\ +--with-zip=/usr & \\ +--enable-dbx & Capa de abstracción a base de datos\\ +\hline \end{tabular} + +\item[]Módulos externos\\ +\begin{tabular}{|ll|}\hline +--with-curl=shared,/usr & Manejo remoto de archivos\\ +--with-dom=shared,/usr --with-dom-xslt=shared,/usr --with-dom-exslt=shared,/usr & Con xmlrpc ya integrado\\ +--with-gd=shared,/usr --enable-gd-native-ttf & Soporte de manejo de gráficos\\ +--with-jpeg-dir=shared,/usr & Soporte GD para jpeg\\ +--with-png-dir=shared,/usr & Soporte GD para png\\ +--with-ldap=shared,/usr & Soporte para ldap\\ +--with-mcal=shared,/usr & Soporte de calendarios\\ +--with-mhash=shared,/usr & Módulo para varios algoritmos de generación de claves\\ +--with-mysql=shared,/usr & Soporte de base de datos Mysql\\ +\hline \end{tabular} +\end{itemize} +Posteriormente hacemos:\\ +\\ +\begin{tabular}{|l|}\hline +\#make \&\& make install\\ +\hline \end{tabular} +\newpage +\section{ Configuración Apache2} + +La configuración de apache se guardara en el directorio /etc/apache2 en los siguientes ficheros y directorios: +\begin{itemize} +\item[]Archivo apache2.conf:\\ +COnfiguración principal de apache2, tiene la configuración necesaria para arrancar apache.\\ +No necesitamos editar este archivo. +\item[]Archivo ports.conf\\ +Que puertos escucha apache, necesitamos dos, el puerto 80 para HTTP y el 443 para HTTPS, editaremos el ficheros, dejandolo como esto: +\begin{tabular}{|l|}\hline +Listen 80,443\\ +\hline \end{tabular} +\item[]Directorio conf.d:\\ +Directorio para configuraciones especiales, no lo necesitamos. +\item[]Directorios mods-available y mods-enabled:\\ +Este directorio tiene todos los módulos que podemos usar de apache2, para poder usar un módulo es necesario enlazar este al directorio mods-enabled. +\item[]Directorios sites-available y sites-enabled:\\ +En sites-available debemos configurar los sitios que vamos a usar.\\ +Por ejemplo vamos a crear el sitio no seguro gosa, que vamos a usar para redirigir las peticiones a un servidor seguro. + +La configuración de GOsa (sites-available/gosa) puede ser parecida a esta::\\ +\begin{tabular}{|l|}\hline +\noindent NameVirtual *\\ +\\ +\verb| |ServerName gosa.chaosdimension.org\\ +\\ +\verb| |Redirect /gosa https://gosa.chaosdimension.org/gosa\\ +\\ +\verb| |CustomLog /var/log/apache/gosa.log combined\\ +\verb| |ErrorLog /var/log/apache/gosa.log\\ +\\ +\\ +\hline \end{tabular} + +Una vez sea guardada, podemos activarla haciendo esto:\\ +\\ +\begin{tabular}{|l|}\hline +\#>ln -s /etc/apache2/mods-available/suphp.conf /etc/apache2/mods-enabled/suphp.conf\\ +\hline \end{tabular} +\\ +\item[]Directorio ssl:\\ +Directorio de configuración de Secure Socket Layer, esto lo veremos en la siguiente sección. +\end{itemize} +\newpage +\subsection{ Seguridad} + +La seguridad es uno de los puntos mas importantes al configurar un servidor apache, necesitaremos un entorno seguro donde no permitir que los usuarios manipulen y accedan a codigo o programas. + +La formas de conseguir esto es usando encriptación, con lo que buscamos que los usuarios y el servidor se comuniquen de forma que nadie mas pueda acceder a los datos. Esto se consigue con encriptación. + +La otra manera de asegurar el sistema es que si existe algún fallo en el sistema o en el código, y un intruso intenta ejecutar codigo, este se vea incapacitado, ya que existen poderosas limitaciones, como no permitir que ejecute comandos, lea el codigo de otros script, no pueda modificar nada y tenga un usuario con muy limitados recursos. +\subsubsection{ Certificados SSL} + +\noindent Existe amplia documentación sobre encriptación y concretamente sobre SSL, un sistema de encriptación con clave publica y privada.\\ +\\ +\noindent Como el paquete openSSL ya lo tenemos instalado a partir de los pasos anteriores, debemos crear los certificados que usaremos en nuestro servidor web.\\ +\\ +\noindent Supongamos que guardamos el certificado en /etc/apache2/ssl/gosa.pem\\ +\\ +\begin{tabular}{|l|}\hline +\#>FILE=/ect/apache2/ssl/gosa.pem\\ +\#>export RANDFILE=/dev/random\\ +\#>openssl req -new -x509 -nodes -out \$FILE -keyout /etc/apache2/ssl/apache.pem\\ +\#>chmod 600 \$FILE\\ +\#>ln -sf \$FILE /etc/apache2/ssl/`/usr/bin/openssl x509 -noout -hash < \$FILE`.0\\ +\hline \end{tabular} +\\ +\noindent Con esto hemos creado un certificado que nos permite el acceso SSL a nuestras páginas.\\ +\\ +\noindent Si lo que queremos es una configuración que nos permita no solo que el tráfico esté encriptado, sino que además el cliente garantice que es un usuario válido, debemos provocar que el servidor pida una certificación de cliente. \\ +\\ +\noindent En este caso seguiremos un procedimiento mas largo, primero la creación de una certificación de CA:\\ +\\ +\begin{tabular}{|l|}\hline +\#>CAFILE=/ect/apache2/ssl/gosa.ca\\ +\#>KEY=/etc/apache2/ssl/gosa.key\\ +\#>REQFILE=/etc/apache2/ssl/gosa.req\\ +\#>CERTFILE=/ect/apache2/ssl/gosa.cert\\ +\#>DAYS=365\\ +\#>export RANDFILE=/dev/random\\ +\#>openssl req -x509 -keyout \$CAKEY -out \$CAFILE \$DAYS\\ +\hline \end{tabular} +\\ +\noindent Después de varias cuestiones tendremos una CA, ahora hacemos un requerimiento a la CA creada:\\ +\\ +\begin{tabular}{|l|}\hline +\#>openssl req -new -keyout \$REQFILE -out \$REQFILE \$DAYS\\ +\hline \end{tabular} +\\ +\noindent Firmamos el nuevo certificado:\\ +\\ +\begin{tabular}{|l|}\hline +\#>openssl ca -policy policy\_anything -out \$CERFILE -infiles \$REQFILE\\ +\hline \end{tabular} +\\ +\noindent Y creamos un pkcs12 para configurar la certificación en los clientes:\\ +\\ +\begin{tabular}{|l|}\hline +\#>openssl pkcs12 -export -inkey \$KEY -in \$CERTFILE -out certificado\_cliente.pkcs12\\ +\hline \end{tabular} +\\ +\noindent Este certificado se puede instalar en el cliente, y en el servidor web mediante la configuración explicada en el siguiente punto, nos dará la seguridad de que solo accederán aquellos clientes que nosotros deseamos y que su comunicación será estrictamente confidencial.\\ + + + +\subsubsection{ Configurando mod-SSL} + + +\noindent El módulo SSL viene de serie con apache2, esto simplificara nuestro trabajo. Para saber si está ya configurado:\\ +\\ +\begin{tabular}{|l|}\hline +\#> if [ -h /etc/apache2/mods-enabled/ssl.load ]; then echo "módulo instalado";else echo "módulo no instalado"; fi\\ +\hline \end{tabular} +\\ +\noindent Para activarlo haremos lo siguiente:\\ +\\ +\begin{tabular}{|l|}\hline +\#>ln -s /etc/apache2/mods-available/ssl.conf /etc/apache2/mods-enabled/ssl.conf\\ +\#>ln -s /etc/apache2/mods-available/ssl.load /etc/apache2/mods-enabled/ssl.load\\ +\hline \end{tabular} +\\ +\noindent Esto configurará el módulo en apache2 y se podrá utilizar después de recargar el servidor con:\\ +\\ +\begin{tabular}{|l|}\hline +\#>/etc/init.d/apache2 restart\\ +\hline \end{tabular} +\\ +\\ +\noindent Para el caso de querer solo una configuración para comunicación encriptada, crearemos en /etc/apache2/sites-available, gosa-ssl:\\ +\\ +\begin{tabular}{|l|}\hline +\noindent NameVirtual *:443\\ +\\ +\verb| |ServerName gosa.chaosdimension.org\\ +\\ +\verb| |alias /gosa /usr/share/gosa/html\\ +\\ +\verb| |DocumentRoot /var/www/gosa.chaosdimension.org\\ +\verb| |CustomLog /var/log/apache/gosa.log combined\\ +\verb| |ErrorLog /var/log/apache/gosa.log\\ +\\ +\verb| |SSLEngine On\\ +\verb| |SSLCertificateFile /etc/apache2/ssl/gosa.cert\\ +\verb| |SSLCertificateKeyFile /etc/apache2/ssl/gosa.key\\ +\verb| |SSLCertificateChainFile /etc/apache2/ssl/gosa.cert\\ +\verb| |SSLCertificateKeyFile /etc/apache2/ssl/gosa.key\\ +\verb| |SSLCACertificateFile /etc/apache2/ssl/gosa.ca\\ +\verb| |SSLCACertificatePath /etc/apache2/ssl/\\ +\verb| |SSLLogLevel error\\ +\verb| |SSLLog /var/log/apache2/ssl-gosa.log\\ +\\ +\\ +\hline \end{tabular} +\\ +\noindent Para una comunicación encriptada en la cual verificamos el certificado del cliente: +\\ +\begin{tabular}{|l|}\hline +\noindent NameVirtual *:443\\ +\\ +\verb| |ServerName gosa.chaosdimension.org\\ +\\ +\verb| |alias /gosa /usr/share/gosa/html\\ +\\ +\verb| |DocumentRoot /var/www/gosa.chaosdimension.org\\ +\verb| |CustomLog /var/log/apache/gosa.log combined\\ +\verb| |ErrorLog /var/log/apache/gosa.log\\ +\\ +\verb| |SSLEngine On\\ +\verb| |SSLCertificateFile /etc/apache2/ssl/gosa.cert\\ +\verb| |SSLCertificateKeyFile /etc/apache2/ssl/gosa.key\\ +\verb| |SSLCertificateChainFile /etc/apache2/ssl/gosa.cert\\ +\verb| |SSLCertificateKeyFile /etc/apache2/ssl/gosa.key\\ +\verb| |SSLCACertificateFile /etc/apache2/ssl/gosa.ca\\ +\verb| |SSLCACertificatePath /etc/apache2/ssl/\\ +\verb| |SSLLogLevel error\\ +\verb| |SSLLog /var/log/apache2/ssl-gosa.log\\ +\\ +\verb| |\\ +\verb| |\verb| |SSLVerifyClient require\\ +\verb| |\verb| |SSLVerifyDepth 1\\ +\verb| |\\ +\\ +\hline \end{tabular} + +\subsubsection{ Configurando suphp} +\noindent +Suphp es un módulo para apache y php que permite ejecutar procesos de php con un usuario diferente del que usa apache para ejecutar las páginas html y php. + +Consta de dos partes, una es un modulo para apache que "captura" las peticiones de páginas php, comprueba el usuario del archivo, su grupo, y envía la información a la otra parte, que es un ejecutable suid-root que lanza php4-cgi con el usuario que le ha sido indicado, este devuelve el resultado al módulo del apache. + +La idea es minimizar el daño que se provocaría al ser explotado un posible fallo del sistema, de esta manera el usuario entraría en el sistema con una cuenta no habilitada, sin permisos de ejecución y sin posibilidad de acceso a otro código o sitios web. + +Suphp se puede descargar de \htmladdnormallink{http://www.suphp.org/Home.html}{http://www.suphp.org/Home.html}, descomprimiendo el paquete en /usr/src y compilando con las siguientes opciones: +\\ +\begin{tabular}{|l|}\hline +\#>./configure --prefix=/usr \textbackslash \\ +\verb| |--with-apxs=/usr/bin/apxs2 \textbackslash \\ +\verb| |--with-apache-user=www-data \textbackslash \\ +\verb| |--with-php=/usr/lib/cgi-bin/php4 \textbackslash \\ +\verb| |--sbindir=/usr/lib/suphp \textbackslash \\ +\verb| |--with-logfile=/var/log/suphp/suphp.log \textbackslash \\ +\verb| |-with-setid-mode \textbackslash \\ +\verb| |--disable-checkpath \\ +\hline \end{tabular} +\\ +\noindent Por supuesto necesitaremos tener compilado php para cgi, esto significa volver a compilar php, pero quitando la configuración para apache2 y añadiendo:\\ +\\ +\begin{tabular}{|l|}\hline +\verb| |--prefix=/usr --enable-force-cgi-redirect --enable-fastcgi \textbackslash\\ +\verb| |--with-config-file-path=/etc/php4/cgi\\ +\hline \end{tabular} + +\noindent Para configurarlo en apache haremos igual que para ssl, primero comprobamos si está configurado:\\ +\\ +\begin{tabular}{|l|}\hline +\#> if [ -h /etc/apache2/mods-enabled/suphp.load ]; then echo "módulo instalado";else echo "módulo no instalado"; fi\\ +\hline \end{tabular} +\\ +\noindent Para activarlo haremos lo siguiente:\\ +\\ +\begin{tabular}{|l|}\hline +\#>ln -s /etc/apache2/mods-available/suphp.conf /etc/apache2/mods-enabled/suphp.conf\\ +\#>ln -s /etc/apache2/mods-available/suphp.load /etc/apache2/mods-enabled/suphp.load\\ +\hline \end{tabular} +\\ +\noindent Esto configurará el módulo en apache2 y se podrá utilizar después de recargar el servidor con:\\ +\\ +\begin{tabular}{|l|}\hline +\#>/etc/init.d/apache2 restart\\ +\hline \end{tabular} +\\ + +\noindent La configuración del sitio seguro con suphp incluido quedaría así:\\ +\\ +\begin{tabular}{|l|}\hline +\noindent NameVirtual *:443\\ +\\ +\verb| |ServerName gosa.chaosdimension.org\\ +\\ +\verb| |DocumentRoot /usr/share/gosa/html\\ +\verb| |alias /gosa /usr/share/gosa/html\\ +\verb| |CustomLog /var/log/apache/gosa.log combined\\ +\verb| |ErrorLog /var/log/apache/gosa.log\\ +\\ +\verb| |suPHP\_Engine on\\ +\\ +\verb| |SSLEngine On\\ +\verb| |SSLCertificateFile /etc/apache2/ssl/gosa.cert\\ +\verb| |SSLCertificateKeyFile /etc/apache2/ssl/gosa.key\\ +\verb| |SSLCertificateChainFile /etc/apache2/ssl/gosa.cert\\ +\verb| |SSLCertificateKeyFile /etc/apache2/ssl/gosa.key\\ +\verb| |SSLCACertificateFile /etc/apache2/ssl/gosa.ca\\ +\verb| |SSLCACertificatePath /etc/apache2/ssl/\\ +\verb| |SSLLogLevel error\\ +\verb| |SSLLog /var/log/apache2/ssl-gosa.log\\ +\\ +\verb| |\\ +\verb| |\verb| |SSLVerifyClient require\\ +\verb| |\verb| |SSLVerifyDepth 1\\ +\verb| |\\ +\\ +\hline \end{tabular} + +\noindent Debemos decidir que usuario vamos a usar, en este caso voy a crear uno llamado gosa, que me sirva para el fin indicado anteriormente:\\ +\\ +\begin{tabular}{|l|}\hline +\verb| |\#useradd -d /usr/share/gosa/html gosa\\ +\verb| |\#passwd -l gosa\\ +\verb| |\#cd /usr/share/gosa\\ +\verb| |\#find /usr/share/gosa -name "*.php" -exec chown gosa {} ";"\\ +\verb| |\#find /usr/share/gosa -name "*.php" -exec chmod 600 {} ";"\\ +\hline \end{tabular} + + + +\section{Configuración Php4} + +La configuración para mod\_php se guardará en el sitio que hallamos puesto en la partes anteriores. En nuestro caso es /etc/php4/apache2. + +El archivo de configuración siempre es php.ini y en el configuramos los módulos. + +Una configuración básica será como esta: +\begin{center} +\begin{longtable}{|l|} +\caption{PHP4 Configuration}\\ +\hline +\multicolumn{1}{|c|}{\textbf{PHP4 Configuration}}\\ +\hline +\endfirsthead +\hline +\endhead +\hline +\multicolumn{1}{|c|}{Continue $\ldots$}\\ +\hline +\endfoot +\hline +\multicolumn{1}{|c|}{\textbf{End}}\\ +\hline +\endlastfoot +; Engine\\ +\verb| |engine = On ; Activa PHP\\ +\verb| |short\_open\_tag = On ; Permite usar \\ +\verb| |precision = 14 ; Número de dígitos significantes mostrados en números en coma flotante\\ +\verb| |output\_buffering = Off ; Solo permitimos que envie cabecera antes de enviar el contenido.\\ +\verb| |implicit\_flush = Off ; No forzamos a php a que limpie el buffer de salida después de cada bloque.\\ +\\ +; Safe Mode\\ +\verb| |\label{sm} safe\_mode = Off ; No queremos el modo seguro\\ +\verb| |\label{smed} safe\_mode\_exec\_dir = ; Directorio donde se ejecutara PHP\\ +\verb| |\label{smid} safe\_mode\_include\_dir = Directorios donde hará la busqueda PHP de librerías\\ +\verb| |\label{smaev} safe\_mode\_allowed\_env\_vars = PHP\_ ; Solo se permite a los usuarios\\ +\verb| |\verb| |\verb| |;a crear variables del sistema que empiecen por PHP\_\\ +\verb| |\label{smpev} safe\_mode\_protected\_env\_vars = LD\_LIBRARY\_PATH ; Lista de variables del sistema que\\ +\verb| |\verb| |\verb| |; no pueden ser cambiadas por razones de seguridad\\ +\verb| |\label{df} disable\_functions = ; Funciones que serán desactivadas por razones de seguridad\\ +\verb| |\label{auf} allow\_url\_fopen = Yes ; Permitimos que se abran archivos desde PHP\\ +\verb| |\label{ob} open\_basedir = ;\\ +\\ +; Colores para el modo de síntasis coloreada.\\ +\verb| |highlight.string = \#DD0000\\ +\verb| |highlight.comment = \#FF8000\\ +\verb| |highlight.keyword = \#007700\\ +\verb| |highlight.bg = \#FFFFFF\\ +\verb| |highlight.default = \#0000BB\\ +\verb| |highlight.html = \#000000\\ +\\ +; Misc\\ +\verb| |\label{ep}expose\_php = On ; Indica en el mensaje del servidor web si está instalado o no.\\ +\\ +; Resource Limits ;\\ +\verb| |max\_execution\_time = 30 ; Tiempo máximo de ejecución del script.\\ +\verb| |memory\_limit = 16M ; La cantidad máxima permitida de memoria que puede consumir un script.\\ +\\ +; Error handling and logging ;\\ +\verb| |error\_reporting = E\_ALL; Indicamos que muestre todos los errores y avisos.\\ +\verb| |display\_errors = Off ; Que no los imprima en pantalla.\\ +\verb| |display\_startup\_errors = Off ; Que no muestre los errores de arranque de PHP.\\ +\verb| |log\_errors = On ; Que envíe los errores a un fichero.\\ +\verb| |track\_errors = On ; Que guarde el último error / aviso para \$php\_errormsg (boolean)\\ +\verb| |error\_log = /var/log/php/php4.log ; Fichero que guardará los errores\\ +\verb| |warn\_plus\_overloading = Off ; No avisamos si se usa el operador + con cadenas de texto\\ +\\ +; Data Handling ;\\ +\verb| |variables\_order = "EGPCS" ; Esta directiva describe el orden en el cual\\ +\verb| |;se registrarán las variables de PHP (Siendo G=GET, P=POST, C=Cookie,\\ +\verb| |; E= Sistema, S= Propias de PHP, todas es indicado como EGPCS)\\ +\verb| |\label{rg} register\_globals = Off ; No queremos que se registren las EGPCS como globales.\\ +\verb| |register\_argc\_argv = Off ; No declaramos ARGV y ARGC para su uso en scripts.\\ +\verb| |post\_max\_size = 8M ; Tamaño máximo de un envío POST que aceptará PHP.\\ + +; Magic quotes\\ +\verb| |\label{mqq}magic\_quotes\_gpc = On ; Comillas añadidas para gpc(información GET/POST/Cookie)\\ +\verb| |magic\_quotes\_runtime= Off ; Comillas añadidas para información generada por el sistema, \\ +\verb| |;por ejemplo desde SQL, exec(), etc.\\ +\verb| |magic\_quotes\_sybase = Off ; Usar comillas añadidas al estilo de Sybase \\ +\verb| |;(escapa ' con '' en lugar de \textbackslash ')\\ +\\ +; Tipo de archivo por defecto de PHP y codificación por defecto.\\ +\verb| |default\_mimetype = "text/html"\\ +\verb| |default\_charset = "iso-8859-1"\\ +\\ +; Rutas y directorios ;\\ +\verb| |\label{ip} include\_path = . ;\\ +\verb| |doc\_root = ; Raíz de las páginas php, mejor dejarlo en blanco.\\ +\verb| |user\_dir = ; Donde php ejecuta el script, tambien mejor en blanco.\\ +\verb| |;extension\_dir = /usr/lib/php4/apache ; ¿Donde estan los módulos?\\ +\verb| |enable\_dl = Off ; Permitir o no la carga dinámica de módulos con la función dl().\\ +\\ +; Subir ficheros al servidor;\\ +\verb| |file\_uploads = On ; Permitir el subir archivos al servidor.\\ +\verb| |upload\_max\_filesize = 2M ; Tamaño máximo de los archivos que vamos a subir.\\ +\\ +; Extensiones dinámicas ;\\ +\verb| |extension=gd.so ; Graficos\\ +\verb| |extension=mysql.so ; Mysql\\ +\verb| |extension=ldap.so ; Ldap\\ +\verb| |extension=mhash.so ; Mhash\\ +\verb| |extension=imap.so ; Imap\\ +\verb| |extension=kadm5.so ; Kerberos\\ +\verb| |extension=cups.so ; Cupsys\\ +\\ +; Log del sistema\\ +\verb|[Syslog]|\\ +\verb| |define\_syslog\_variables = Off ; Desactivamos la definición de variables de syslog.\\ +\\ +; funciones de correo\\ +\verb|[mail function]|\\ +\verb| |;sendmail\_path = ;En sistemas Unix, donde esta hubicado sendmail (por defecto es 'sendmail -t -i')\\ +\\ +; depuración\\ +\verb|[Debugger]|\\ +\verb| |debugger.host = localhost ; Donde está el depurador.\\ +\verb| |debugger.port = 7869 ; En que puerto escucha.\\ +\verb| |debugger.enabled = False ; En principio suponemos que no hay depurados.\\ +\\ +; Opciones SQL\\ +\verb|[SQL]|\\ +\verb| |sql.safe\_mode = Off ; Modo seguro de sql, en principio estará desactivado.\\ +\\ +; Opciones Mysql\\ +\verb|[MySQL]|\\ +\verb| |mysql.allow\_persistent = Off ; Desactivaremos los enlaces persistentes por razones de seguridad.\\ +\verb| |mysql.max\_persistent = -1 ; Numero de conexiones persistentes, no se usa por haberlas desactivado.\\ +\verb| |mysql.max\_links = -1 ; Numero máximo de conexiones, -1 es sin limite.\\ +\verb| |mysql.default\_port = 3306; Puerto por defecto del mysql.\\ +\verb| |mysql.default\_socket = ; Nombre de socket que se usaran para conexiones locales MySQL.\\ +\verb| |;Si está vacio se usara el que tengamos en la configuración de la compilación del PHP.\\ +\verb| |mysql.default\_host = ; No configuramos host por defecto.\\ +\verb| |mysql.default\_user = ; No configuramos usuario por defecto.\\ +\verb| |mysql.default\_password = ; No configuramos una contraseña por defecto.\\ +\\ +; Control de sesiones\\ +\verb|[Session]|\\ +\verb| |session.save\_handler = files ; Guardamos la información de sesión en ficheros.\\ +\verb| |\label{ss} session.save\_path = /var/lib/php4 ; Donde se van ha guardar los ficheros de sesión.\\ +\verb| |session.use\_cookies = 1 ; Usaremos cookies para el seguimiento de sesión.\\ +\verb| |session.name = PHPSESSID ; Nombre de la sesión que será usado en el nombre de la cookie.\\ +\verb| |session.auto\_start = 0 ; No iniciamos sesión automáticamente.\\ +\verb| |session.cookie\_lifetime = 0 ; Tiempo de vida de una cookie de sesión o 0 si esperamos a que cierre el navegador.\\ +\verb| |session.cookie\_path = / ; La ruta para que es válida la cookie.\\ +\verb| |session.cookie\_domain = ; El dominio para el cual es válida la cookie.\\ +\verb| |session.serialize\_handler = php ; Manipulador usado para serializar los datos.\\ +\verb| |session.gc\_probability = 1 ; Probabilidad en porcentaje de que el recolector de basura se active en cada sesión.\\ +\verb| |session.gc\_maxlifetime = 1440 ; Después de este tiempo en segundos, la información guardada\\ +\verb| |; será vista como basura para el recolector de basura.\\ +\verb| |session.referer\_check = ; Comprueba los Referer HTTP para invalidar URLs externas conteniendo ids\\ +\verb| |session.entropy\_length = 0 ; Número de bytes a leer del fichero de entropía.\\ +\verb| |session.entropy\_file = ; El fichero que generará la entropía.\\ +\verb| |session.cache\_limiter = nocache ; Sin cache de sessiones.\\ +\verb| |session.cache\_expire = 180 ; Tiempo de expiración del documento.\\ +\verb| |session.use\_trans\_sid = 0 ; Usar sid transportable si está activado en la compilación\\ +\\ +\end{longtable} +\end{center} + + +\subsection{Seguridad} + +Php es un poderoso lenguaje de script, permite a su usuario tener bastante control sobre el sistema y a atacantes maliciosos muchas opciones de alcanzar su objetivo. + +Un administrador de sistemas no debe suponer que un sistema es completamente seguro con solo tener las actualizaciones de seguridad instaladas, un sistema que muestra código al exterior no es seguro, aunque el resultado sea HTML, se expone a ataques de formas muy diversas y a fallos de seguridad desconocidos. + +Limitar al máximo el acceso que permite php es entonces una necesidad. + +\subsection{Configurando safe php} + +PHP tiene un modo llamado \htmladdnormallink{safe-mode}{http://www.php.net/manual/en/features.safe-mode.php} que permite una mayor seguridad, una configuración para Safe mode recomendada es:\\ +\\ +\noindent \begin{tabular}{|l|}\hline +\verb| |\ref{mqq} magic\_quotes\_qpc = On\\ +\verb| |\ref{auf} allow\_url\_fopen = No\\ +\verb| |\ref{rg} register\_globals = Off\\ +\verb| |\ref{sm} safe\_mode = On\\ +\verb| |\ref{smid} safe\_mode\_include\_dir = "/usr/share/gosa:/var/spool/gosa"\\ +\verb| |\ref{smed} safe\_mode\_exec\_dir = "/usr/lib/gosa"\\ +\verb| |\ref{smaev} safe\_mode\_allowed\_env\_vars = PHP\_,LANG\\ +\verb| |\ref{ob} open\_basedir = "/etc/gosa:/var/spool/gosa:/var/cache/gosa:/usr/share/gosa:/tmp"\\ +\verb| |\ref{ip} include\_path = ".:/usr/share/php:/usr/share/gosa:/var/spool/gosa:/usr/share/gosa/safe\_bin"\\ +\verb| |\ref{df} disable\_functions = system, shell\_exec, passthru, phpinfo, show\_source\\ +\hline \end{tabular} +\\ +En el caso de que vayamos a usar SuPHP, debemos dar los siguientes permisos al directorio /var/lib/php4:\\ +\begin{tabular}{|l|}\hline +\#chmod 1777 /var/lib/php4\\ +\hline \end{tabular} + +Ya que cada usuario que ejecute PHP guardara la sesión con ese usuario. + + +\section{ Módulos de PHP necesarios} + +En esta sección se explicaran los pasos para conseguir compilar y usar los módulos necesarios o importantes para GOsa, se recomienda instalar todos los módulos, incluso los que no son necesarios. + +\subsection{ ldap.so} + +MÓDULO NECESARIO + +\indent Este módulo no necesita ninguna configuración especial para funcionar. + +\indent Solo se conoce un problema: No puede conectarse PHP+Apache con un servidor LDAP que pida Certificado válido. Con lo cual la comunicación será segura, ya que se puede usar SSL, pero no estará garantizada. + +\subsection{ mysql.so} + +MÓDULO OPCIONAL + +\indent Este módulo no necesita ninguna configuración especial para funcionar. + +\indent Sirve para albergar configuraciones del plugin imap - sieve. + +\subsection{ imap.so} + +MÓDULO OPCIONAL + +\indent El módulo instalado al compilar PHP funcionara, pero tendrá una importante carencia, la función getacl que da control sobre las carpetas, así que necesitaremos un parche y una serie de pasos para compilar el módulo para su uso en GOsa. + +Nos bajamos el parche de \htmladdnormallink{php4-imap-getacl.patch}{ftp://oss.gonicus.de/pub/gosa/patches/php4-imap-getacl.patch} y lo ponemos en /usr/src, como tenemos las fuentes de PHP en /usr/src, ejecutamos los siguientes comandos:\\ +\\ +\noindent \begin{tabular}{|l|}\hline +\#cd /usr/src/php4.3-XXX/extensions/imap\\ +\#make clear\\ +\#patch -p1 >| /etc/php4/apache2/php.init\\ +\#/etc/init.d/apache2 reload\\ +\hline \end{tabular} + + +\subsection{krb} + +MÓDULO OPCIONAL + +\indent Este módulo necesita tener instaladas las fuentes de kerberos del MIT, ya que no se puede compilar con las fuentes de kerberos de Heimdal. + +\indent El módulo interactuará con los servidores Kerberos para actualizar las claves de los usuarios creados. + +Se descargara de \htmladdnormallink{PECL}{http://pecl.php.net/kadm5}, y lo descomprimiremos en /usr/src, debemos tener tambien las fuentes del kerberos del MIT, las cuales descomprimiremos en /usr/src, con ello hacemos (sustituimos X.X por las respectivas versiones de los programas):\\ +\\ +\noindent \begin{tabular}{|l|}\hline +\#cd /usr/src/kadm5-0.X.X/scripting/php\\ +\#cp config.m4 config.m4.2\\ +\#sed \verb|s/krb5-1\.2\.4\/src\/include/krb5-1\.X\.X\/src\/lib/| config.m4.2 >config.m4\\ +\#rm -f config.m4.2\\ +\#phpize\\ +\#./configure\\ +\#make\\ +\#make install\\ +\#echo \verb|"extension=kadm5.so" >>| /etc/php4/apache2/php.ini\\ +\#/etc/init.d/apache2 reload\\ +\hline \end{tabular} + + diff --git a/doc/guide/admin/es/manual_gosa_es_ldap.tex b/doc/guide/admin/es/manual_gosa_es_ldap.tex new file mode 100644 index 000000000..d3e10cd60 --- /dev/null +++ b/doc/guide/admin/es/manual_gosa_es_ldap.tex @@ -0,0 +1,1059 @@ +\chapter{openLDAP} +\section{Introducción,¿Que es LDAP?} +\subsection{Servicios de Directorios, X.500} + +Un directorio es una base de datos especializada en busqueda de información basada en atributos.\\ + +X.500|ISO 9594\cite{x500} es un estándar de ITU-S(International Telecommunication Union - Telecommunication Standardisation Burean), anteriormente conocido como CCITT, para solucionar el problema de directorios. Basado en los trabajos realizados con X.400 (un directorio para correo electrónico) y los trabajos de ISO ( International Standards Organisation) y ECMA (European Computer Manufacturers Association).\\ + +El X.501|ISO 9594 parte 2. define los modelos de como debe estar organizada la información, el modelo de información de usuario, el modelo de información administrativa y el servicio de directorio, que define como debe estar distribuida la información entre varios sistemas.\\ + +En X.509|ISO 9594 parte 8. el estándar de autentificación y seguridad usado para SSL.\\ + +X.525|ISO 9594 parte 9. indica como debe ser la replicación entre sistemas.\\ + +En X.519|ISO 9594 parte 5. se definen los protocolos de comunicaciones, entre ellos el que mas nos importa que es DAP - El protocolo de acceso a directorios - que define que operaciones se pueden hacer con la conexión: bind, unbind, los objetos (entradas) y sus operaciones: añadir, eliminar, modificar, buscar, listar, comparar, etc.\\ + +DAP es un protocolo demasiado complejo para que se puedan hacer servidores y clientes para su uso para Internet, así que se crea un protocolo mas cómodo de manejar estos directorios: LDAP.\\ + +LDAP (Lightweight Directory Access Protocol / Protocolo de acceso a directorios ligero) es un protocolo pensado para actualización y busquedas de directorios orientados a Internet (TCP/IP).\\ + +La ultima versión de LDAP es la 3 y es cubierta por los RFCs: 2251\cite{2251}, 2252\cite{2252}, 2253\cite{2253}, 2254\cite{2254}, 2255\cite{2255}, 2256\cite{2256} y 3377\cite{3377}.\\ +\newpage +\subsection{Conceptos Básicos de LDAP} + +\begin{itemize} +\item[]Entrada\\ (Entry)\\ +Una entrada es una colección de atributos a los que se identifica por su DN (nombre distinguido / distinguished name). +Un DN es único en todo el árbol y por lo tanto identifica claramente la entrada a la que refiere. Como ejemplo: CN=Alex O=CHAOSDIMENSION C=ES identificaría al objeto de nombre común Alex que esta en la organización CHAOSDIMENSION y en país ES (España).\\ + +Un RDN( nombre distinguido relativo / relative distinguished name) es parte del DN, de tal manera que concatenando los RDN dan como resultado el DN. Del ejemplo anterior CN=Alex seria un RDN. + +\item[]Clase de objeto\\(Object Class)\\ +Una clase es un atributo especial (ObjectClass) que define que atributos son requeridos y permitidos en una entrada. Los valores de las clases objetos están definidos en el esquema. +Todas las entradas deben tener un atributo ObjectClass. +No se permite añadir atributos a las entradas que no permitidos por las definiciones de las clases de objetos de la entrada. + +\item[]Atributo\\(Attrib)\\ +Un atributo es un tipo con uno o mas valores asociados. +Se identifica por su OID ( identificador de objeto / object identifier). +El tipo de atributo indica si puede haber mas de un valor de este atributo en una entrada, los valores que pueden tener y como se los puede buscar. + +\item[]Esquema\\(Schema)\\ +Un esquema es una colección de definiciones de tipos de atributos, clases de objetos e información que el servidor usa para realizar las busquedas, introducir valores en un atributo, y permitir operaciones de añadir o modificar. + +\item[]Filtro\\(Filter)\\ +Para realizar una busqueda debemos tener en cuenta varios parámetros importantes: + +\begin{list}{}{} +\item[Base](baseObject)\\ +Un DN que sera a partir del cual realizaremos la busqueda. + +\item[Alcance](scope)\\ +Puede tener varios valores.\\- base: solo buscara en ese nivel base.\\- sub: hará busqueda recursiva por todo el árbol a partir del nivel base.\\- one: descenderá solo un nivel por debajo del nivel base. + +\item[Tamaño limite](sizelimit)\\ +Restringe el numero de entradas devueltas como resultado de una busqueda. + +\item[Tiempo limite](timelimit)\\ +Restringe el tiempo máximo de ejecución de una busqueda. + +\item[filtro](filter)\\ +Es una cadena que defina las condiciones que deben ser completadas para encontrar una entrada. + +\end{list} + +Los filtros se pueden concatenar con 'and', 'or' y 'not' para crear filtros mas complejos.\\ +Por ejemplo un filtro con base O=CHAOSDIMENSION, C=ES, alcance base y filtro (CN=Alex) encontraría la entrada +CN=Alex, O=CHAOSDIMENSION, C=ES.\\ + +\end{itemize} +\newpage +\subsection{Servidores de LDAP} + +LDAP esta soportado por numerosos servidores siendo los mas conocidos Active Directory de Microsoft, eDirectory de Novell, Oracle Internet Directory de Oracle, iPlanet directory server de SUN y por último pero no menos importante openLDAP. + +En este manual se tratara el uso e instalación de openLDAP, ya que esta soportado por prácticamente todas las distribuciones de linux y su licencia cumple el estándar openSource. + +Para mas información véase LDAP Linux HowTo\cite{llh}, Using LDAP\cite{ul}, openLDAP administrator Guide\cite{oag} y en español la parte relativa a LDAP del magnifico manual Ldap+Samba+Cups+Pykota\cite{lscp}. + +\section{Instalación} + +Las mayorías de las distribuciones tienen paquetes de openLDAP. Como usar apt-get en debian, Urpmi en Mandrake, up2date en redhat o Yast2 en Suse sale fuera de este manual. Así que este manual explicara los necesario para la construcción desde las fuentes. + +\subsection{Descargando openLDAP} +\label{down_ldap} +Aunque realmente no son necesarios, hay varios paquetes que deberían ser instalados antes de openLDAP ya que seguramente los necesitaremos. + +El primero de ellos es \textbf{openSSL}, también existe en todas las distribuciones y tiene documentación en su pagina web\cite{ssldoc}. + +Las fuentes se pueden descargar de \htmladdnormallink{http://www.openssl.org/source/}{http://www.openssl.org/source/} + +El segundo es Servicios \textbf{Kerberos v5}, del cual existen dos implementaciones, una es \htmladdnormallink{MIT Kerberos V}{http://web.mit.edu/kerberos/www} y la otra es \htmladdnormallink{Heimdal Kerberos}{http://www.pdc.kth.se/heimdal}, ambas tienen buena documentación y están ampliamente soportadas por todas las distribuciones. + +También será interesante tener instaladas las librerías \textbf{Cyrus SASL} (Capa simple de seguridad y autentificación de Cyrus / Cyrus's Simple Authentication and Security Layer).\\Que se pueden conseguir en \htmladdnormallink{http://asg.web.cmu.edu/sasl/}{http://asg.web.cmu.edu/sasl/sasl-library.html}, Cyrus SASL hace uso de openSSL y Kerberos/GSSAPI para autentificación. + +Necesitaremos por ultimo una base de datos para openLDAP, en lo que atañe a este manual esta será dada a través de las librerías de \htmladdnormallink{\textbf{Sleepycat Software Berkeley DB}}{http://www.sleepycat.com/}, las necesitaremos tanto si usamos LDBM (Berkeley DB versión 3) o BDB (Berkeley DB versión 4). También existen en la totalidad de distribuciones. + +Una vez obtenidas y compiladas las librerías necesarias nos bajamos las \htmladdnormallink{fuentes de openLDAP}{http://www.openldap.org/software/download/} en /usr/src (por ejemplo) y +descomprimimos en ese directorio (por ejemplo con tar -zxvf openldap-2.X.XX.tgz). +\newpage +\subsection{Opciones de instalación} + +La siguientes opciones son para openLDAP versión 2.2.xx que pueden diferir de las versiones 2.0.XX y 2.1.XX. + +Ejecutamos \htmladdnormallink{./configure}{http://warping.sourceforge.net/gosa/contrib/es/configure.sh} con las siguientes opciones. + +\begin{itemize} +\item[](Directorios)\\ +\begin{tabular}{|ll|}\hline +--prefix=/usr & \\ +--libexecdir='\${prefix}/lib' & \\ +--sysconfdir=/etc & \\ +--localstatedir=/var/run & \\ +--mandir='\${prefix}/share/man' & \\ +--with-subdir=ldap & \\ +\hline \end{tabular} + +\item[](Opciones Básicas)\\ +\begin{tabular}{|ll|}\hline +--enable-syslog & \\ +--enable-proctitle & \\ +--enable-ipv6 & $\rightarrow$Sockets IPv6\\ +--enable-local & $\rightarrow$Sockets Unix\\ +--with-cyrus-sasl & $\rightarrow$Autentificación Cyrus SASL soportadas\\ +--with-threads & $\rightarrow$Soporte de Hilos de ejecución\\ +--with-tls & $\rightarrow$Soporte TLS/SSL\\ +--enable-dynamic & $\rightarrow$Compilación dinámica\\ +\hline \end{tabular} + +\item[](Opciones Slapd)\\ +\begin{tabular}{|ll|}\hline +--enable-slapd & $\rightarrow$Compilar el servidor además de las librerías\\ +--enable-cleartext & $\rightarrow$Permite el envío de contraseñas en claro\\ +--enable-crypt & $\rightarrow$Envío de contraseñas encriptadas con DES.\\ +--enable-spasswd & $\rightarrow$Verificación de contraseñas a través de SASL\\ +--enable-modules & $\rightarrow$Soporte dinámico de módulos\\ +--enable-aci & $\rightarrow$Soporte de ACIs por objetos (Experimental)\\ +--enable-rewrite & $\rightarrow$Reescritura de DN en recuperación de LDAP\\ +--enable-rlookups & $\rightarrow$Busqueda inversa del nombre del equipo cliente\\ +--enable-slp & $\rightarrow$Soporte de SLPv2\\ +--enable-wrappers & $\rightarrow$Soporte TCP wrappers\\ +\hline \end{tabular} + +\item[](Soporte)\\ +\begin{tabular}{|ll|}\hline +--enable-bdb=yes & $\rightarrow$Soporte Berkeley versión 4\\ +--enable-dnssrv=mod & \\ +--enable-ldap=mod & $\rightarrow$Soporta otro servidor LDAP como base de datos\\ +--enable-ldbm=mod & \\ +--with-ldbm-api=berkeley & $\rightarrow$Soporte Berkeley versión 3\\ +--enable-meta=mod & $\rightarrow$Soporte metadirectorio\\ +--enable-monitor=mod & \\ +--enable-null=mod & \\ +--enable-passwd=mod & \\ +--enable-perl=mod & $\rightarrow$Soporte scripts en perl\\ +--enable-shell=mod & $\rightarrow$Soporte scripts en shell\\ +--enable-sql=mod & $\rightarrow$Soporte base de datos relacional\\ +\hline \end{tabular} +\end{itemize} + +Posteriormente hacemos:\\ +\#make \&\& make install +\newpage +\section{Configuración} +\subsection{Básica} + +\noindent La configuración del servidor slapd de openLDAP se guarda en /etc/ldap/slapd.conf.\\ + +\noindent Una \htmladdnormallink{configuración básica}{http://warping.sourceforge.net/gosa/contrib/es/basic_slapd.conf} quedaría así:\\ +\\ +\begin{center} +\begin{longtable}{|p{15cm}l|}\hline +\caption{Configuración Básica de openLDAP}\\ +\hline \hline +\multicolumn{2}{|c|}{\textbf{Configuración Básica de openLDAP}}\\ +\hline \hline +\endfirsthead +\hline \hline +\multicolumn{2}{|c|}{\textbf{Configuración Básica de openLDAP (continuación)}}\\ +\hline \hline +\endhead +\hline +\multicolumn{2}{|c|}{Sigue $\ldots$}\\ +\hline +\endfoot +\hline +\multicolumn{2}{|c|}{\textbf{Fin}}\\ +\hline +\endlastfoot +\# Schema and objectClass definitions, configuración básica & \\ +include /etc/ldap/schema/core.schema & \\ +include /etc/ldap/schema/cosine.schema & \\ +include /etc/ldap/schema/inetorgperson.schema & \\ +include /etc/ldap/schema/openldap.schema & \\ +include /etc/ldap/schema/nis.schema & \\ +include /etc/ldap/schema/misc.schema & \\ + & \\ +\#Fuerza a las entradas a encontar eschemas para los ObjectClass & \\ +schemacheck on & \\ + & \\ +\# Password hash, tipo de encriptación de la clave & \\ +\# Puede ser: \{SHA\}, \{MD5\}, \{MD4\}, \{CRYPT\}, \{CLEARTEXT\} & \\ +password-hash \{CRYPT\} & \\ + & \\ +\# Base de busqueda por defecto & \\ +defaultsearchbase "dc=CHAOSDIMENSION,dc=ORG" & \\ + & \\ +\#Utilizado por init scripts para parar e iniciar el servidor. & \\ +pidfile /var/run/slapd.pid & \\ + & \\ +\# Argumentos pasados al servidor. & \\ +argsfile /var/run/slapd.args & \\ + & \\ +\# Nivel de logs & \\ +loglevel 1024 & \\ + & \\ +\# Donde y que módulos cargar & \\ +modulepath /usr/lib/ldap & \\ +moduleload back\_bdb \# Berkeley BD versión 4 & \\ + & \\ +\#definiciones de la base de datos & \\ +database bdb & \\ + & \\ +\# La base del directorio & \\ +suffix "dc=CHAOSDIMENSION,dc=ORG" & \\ + & \\ +\# Aquí definimos al administrador del directorio y su clave & \\ +\# En este ejemplo es " tester" & \\ +\# La clave se puede sacar con & \\ +\# makepasswd --crypt --clearfrom fichero\_con\_nombre usuario & \\ + & \\ +rootdn \verb|"cn=ldapadmin,dc=CHAOSDIMENSION,dc=ORG"| & \\ +rootpw \{crypt\}OuorOLd3VqvC2 & \\ + & \\ +\# Que atributos indexamos para hacer busquedas & \\ +index default sub & \\ +index uid,mail eq & \\ +index cn,sn,givenName,ou pres,eq,sub & \\ +index objectClass pres,eq & \\ + & \\ +\# Directorio donde se guarda la base de datos & \\ +directory " /var/lib/ldap" & \\ + & \\ +\# Indicamos si deseamos guardar la fecha de la ultima modificación & \\ +lastmod off & \\ + & \\ +\#Acceso del administrador & \\ +access to * & \\ + by dn=\verb|"cn=ldapadmin,dc=CHAOSDIMENSION,dc=ORG" =wrscx| & \\ + by dn.regex=\verb|"uid=[^{}/]+/admin\+(realm=CHAOSDIMENSION.LOCAL)?"| =wrscx & \\ + by * read & \\ +\end{longtable} +\end{center} + +\newpage +\subsection{Específica para GOsa} + +GOsa añade varios esquemas para el control de ciertos servicios y características de los usuarios.\\ + +Los esquemas necesarios para GOsa están en el paquete, en la seccion contrib, lo ideal será copiarlos todos a /etc/ldap/schema\\ + +Una \htmladdnormallink{configuración recomendada}{http://warping.sourceforge.net/gosa/contrib/es/gosa_slapd.conf} de /etc/ldap/slapd.conf es la siguiente:\\ + +\begin{center} +\begin{longtable}{|p{15cm}l|}\hline +\caption{Configuración Específica para GOsa}\\ +\hline \hline +\multicolumn{2}{|c|}{\textbf{Configuración Específica para GOsa}}\\ +\hline \hline +\endfirsthead +\hline \hline +\multicolumn{2}{|c|}{\textbf{Configuración Específica para GOsa (continuación)}}\\ +\hline \hline +\endhead +\hline +\multicolumn{2}{|c|}{Sigue $\ldots$}\\ +\hline +\endfoot +\hline +\multicolumn{2}{|c|}{\textbf{Fin}}\\ +\hline +\endlastfoot +\# Schema and objectClass definitions, configuración básica & \\ +include /etc/ldap/schema/core.schema & \\ +include /etc/ldap/schema/cosine.schema & \\ +include /etc/ldap/schema/inetorgperson.schema & \\ +include /etc/ldap/schema/openldap.schema & \\ +include /etc/ldap/schema/nis.schema & \\ +include /etc/ldap/schema/misc.schema & \\ + & \\ +\# Estos esquemas deberían estar presentes en GOsa. En el caso de samba3 & \\ +\# se deben cambiar samba.schema y gosa.schema por samba3.schema & \\ +\# y gosa+samba3.schema. & \\ +include /etc/ldap/schema/samba3.schema & \\ +include /etc/ldap/schema/pureftpd.schema & \\ +include /etc/ldap/schema/gohard.schema & \\ +include /etc/ldap/schema/gofon.schema & \\ +include /etc/ldap/schema/goto.schema & \\ +include /etc/ldap/schema/gosa+samba3.schema & \\ +include /etc/ldap/schema/gofax.schema & \\ +include /etc/ldap/schema/goserver.schema & \\ + & \\ +\#Obliga al cumplimiento de los ObjectClass & \\ +schemacheck on & \\ + & \\ +\# Password hash, tipo de encriptación de la clave & \\ +\# Puede ser: \{SHA\}, \{SMD5\}, \{MD4\}, \{CRYPT\}, \{CLEARTEXT\} & \\ +password-hash \{CRYPT\} & \\ + & \\ +\# Base de busqueda por defecto & \\ +defaultsearchbase " dc=CHAOSDIMENSION,dc=ORG" & \\ + & \\ +\#Utilizado por init scripts para parar e iniciar el servidor. & \\ +pidfile /var/run/slapd.pid & \\ + & \\ +\# Argumentos pasados al servidor. & \\ +argsfile /var/run/slapd.args & \\ + & \\ +\# Nivel de logs & \\ +loglevel 1024 & \\ + & \\ +\# Donde y que módulos cargar & \\ +modulepath /usr/lib/ldap & \\ +moduleload back\_bdb \# Berkeley BD versión 4& \\ + & \\ +\# Algunos parámetros de rendimiento & \\ +threads 64 & \\ +concurrency 32 & \\ +conn\_max\_pending 100 & \\ +conn\_max\_pending\_auth 250 & \\ +reverse-lookup off & \\ +sizelimit 1000 & \\ +timelimit 30 & \\ +idletimeout 30 & \\ + & \\ +\# Limitaciones específicas & \\ +limits anonymous size.soft=500 time.soft=5 & \\ + & \\ +\# Definiciones de la base de datos & \\ +database bdb & \\ +cachesize 5000 & \\ +checkpoint 512 720 & \\ +mode 0600 & \\ + & \\ +\# La base del directorio & \\ +suffix " dc=CHAOSDIMENSION,dc=ORG" & \\ + & \\ +\# Aquí definimos al administrador del directorio y su clave & \\ +\# En este ejemplo es " tester" & \\ +\# La clave se puede sacar con & \\ +\# makepasswd --crypt --clearfrom fichero\_con\_nombre usuario & \\ + & \\ +rootdn \verb|"cn=ldapadmin,dc=CHAOSDIMENSION,dc=ORG"| & \\ +rootpw \{crypt\}OuorOLd3VqvC2 & \\ + & \\ +\# Que atributos indexamos para hacer busquedas & \\ +index default sub & \\ +index uid,mail eq & \\ +index gosaMailAlternateAddress,gosaMailForwardingAddress eq & \\ +index cn,sn,givenName,ou pres,eq,sub & \\ +index objectClass pres,eq & \\ +index uidNumber,gidNumber,memberuid eq & \\ +index gosaSubtreeACL,gosaObject,gosaUser pres,eq & \\ + & \\ +\# Indexing for Samba 3 +index sambaSID eq & \\ +index sambaPrimaryGroupSID eq & \\ +index sambaDomainName eq & \\ + & \\ +\# Quienes pueden cambiar las claves de usuario & \\ +\# Solo por el propio usuario si está autentificado & \\ +\# o por el administrador & \\ +access to attr=sambaPwdLastSet,sambaPwdMustChange,sambaPwdCanChange & \\ + by dn=\verb|"cn=ldapadmin,dc=CHAOSDIMENSION,dc=ORG"| write & \\ + by dn.regex=\verb|"uid=[^{}/]+/admin\+(realm=CHAOSDIMENSION.LOCAL)?"| write & \\ + by anonymous auth & \\ + by self write & \\ + by * none & \\ +access to attr=userPassword,shadowMax,shadowExpire & \\ + by dn=\verb|"cn=ldapadmin,dc=CHAOSDIMENSION,dc=ORG"| write & \\ + by dn.regex=\verb|"uid=[^{}/]+/admin\+(realm=CHAOSDIMENSION.LOCAL)?"| write & \\ + by anonymous auth & \\ + by self write & \\ + by * none & \\ + & \\ +\# Denegar acceso a las claves imap, fax o kerberos guardadas en & \\ +\# LDAP & \\ +access to attr=goImapPassword & \\ + by dn=\verb|"cn=ldapadmin,dc=CHAOSDIMENSION,dc=ORG"| write & \\ + by dn.regex=\verb|"uid=[^{}/]+/admin\+(realm=CHAOSDIMENSION.LOCAL)?"| write & \\ + by * none & \\ +access to attr=goKrbPassword & \\ + by dn=\verb|"cn=ldapadmin,dc=CHAOSDIMENSION,dc=ORG"| write & \\ + by dn.regex=\verb|"uid=[^{}/]+/admin\+(realm=CHAOSDIMENSION.LOCAL)?"| write & \\ + by * none & \\ +access to attr=goFaxPassword & \\ + by dn=\verb|"cn=ldapadmin,dc=CHAOSDIMENSION,dc=ORG"| write & \\ + by dn.regex=\verb|"uid=[^{}/]+/admin\+(realm=CHAOSDIMENSION.LOCAL)?"| write & \\ + by * none & \\ + & \\ +\# Permite que el servidor escriba el atributo LastUser & \\ +access to attr=gotoLastUser & \\ + by * write & \\ + & \\ +\#Las claves samba por defecto pueden ser cambiadas & \\ +\#por el usuario si se ha autentificado. & \\ +access to attr=sambaLmPassword,sambaNtPassword & \\ + by dn=\verb|"cn=ldapadmin,dc=CHAOSDIMENSION,dc=ORG"| write & \\ + by dn.regex=\verb|"uid=[^{}/]+/admin\+(realm=CHAOSDIMENSION.LOCAL)?"| write & \\ + by anonymous auth & \\ + by self write & \\ + by * none & \\ + & \\ +\# Permite acceso de escritura para administrador de terminales & \\ +access to dn=" ou=incoming,dc=CHAOSDIMENSION,dc=ORG" & \\ + by dn=\verb|"cn=terminal-admin,dc=CHAOSDIMENSION,dc=ORG"| write & \\ + by dn=\verb|"cn=ldapadmin,dc=CHAOSDIMENSION,dc=ORG"| write & \\ + by dn.regex=\verb|"uid=[^{}/]+/admin\+(realm=CHAOSDIMENSION.LOCAL)?"| write & \\ + & \\ +access to dn.subtree=" ou=incoming,dc=CHAOSDIMENSION,dc=ORG" & \\ + by dn=\verb|"cn=terminal-admin,dc=CHAOSDIMENSION,dc=ORG"| write & \\ + by dn=\verb|"cn=ldapadmin,dc=CHAOSDIMENSION,dc=ORG"| write & \\ + by dn.regex=\verb|"uid=[^{}/]+/admin\+(realm=CHAOSDIMENSION.LOCAL)?"| write & \\ + & \\ +\# Directorio donde se guarda la base de datos & \\ +directory " /var/lib/ldap" & \\ + & \\ +\# Indicamos si deseamos guardar la fecha de la ultima modificación & \\ +lastmod off & \\ + & \\ +\# Acceso del administrador & \\ +access to * & \\ + by dn=\verb|"cn=ldapadmin,dc=CHAOSDIMENSION,dc=ORG"| =wrscx & \\ + by dn.regex=\verb|"uid=[^{}/]+/admin\+(realm=CHAOSDIMENSION.LOCAL)?"| =wrscx & \\ + by * read & \\ +\end{longtable} +\end{center} + +\section{Utilización} +\subsection{Configuración PAM/NSS} + +NSS (Librerías del servicio de seguridad en red / Network Security Service Libraries)\\ + +NSS es una parte básica del sistema, sirve para control de las cuentas POSIX, para poder usar LDAP para cuentas POSIX (del sistema) utilizaremos NSS\_LDAP, que se puede descargar de \htmladdnormallink{http://www.padl.com/OSS/nss\_ldap.html}{http://www.padl.com/OSS/nss\_ldap.html} , lo descomprimimos es /usr/src y ejecutamos:\\ + +\noindent \#cd /usr/src/nss\_ldap\\ +\noindent \#./configure \&\& make \&\& make install\\ + +La configuración básica de NSS esta en /etc/nsswitch.conf y debe quedar así para lo que nosotros queremos.\\ +\begin{center} +\begin{longtable}{|ll|}\hline +\caption{Configuración NSSWITCH}\\ +\hline \hline +\multicolumn{2}{|c|}{\textbf{Configuración NSSWITCH}}\\ +\hline \hline +\endfirsthead +\hline \hline +\multicolumn{2}{|c|}{\textbf{Configuración NSSWITCH (continuación)}}\\ +\hline \hline +\endhead +\hline +\multicolumn{2}{|c|}{Sigue $\ldots$}\\ +\hline +\endfoot +\hline +\multicolumn{2}{|c|}{\textbf{Fin}}\\ +\hline +\endlastfoot + +passwd: files ldap & \# Estas son las lineas que cambiamos para que haga peticiones ldap\\ +group: files ldap & \#\\ +shadow: files ldap & \#\\ + & \\ +hosts: files dns & \\ +networks: files & \\ + & \\ +protocols: db files & \\ +services: db files & \\ +ethers: db files & \\ +rpc: db files & \\ + & \\ +netgroup: nis & \\ +\hline \end{longtable} +\end{center} +\newpage +La configuración de nss-ldap se guarda en /etc/nss-ldap.conf y una configuración válida para GOsa quedaría así: +\begin{center} +\begin{longtable}{|ll|}\hline +\caption{Configuración NSS}\\ +\hline \hline +\multicolumn{2}{|c|}{\textbf{Configuración NSS}}\\ +\hline \hline +\endfirsthead +\hline \hline +\multicolumn{2}{|c|}{\textbf{Configuración NSS (continuación)}}\\ +\hline \hline +\endhead +\hline +\multicolumn{2}{|c|}{Sigue $\ldots$}\\ +\hline +\endfoot +\hline +\multicolumn{2}{|c|}{\textbf{Fin}}\\ +\hline +\endlastfoot +host ip.servidor.ldap & \# Aquí ponemos donde\\ + & \# estará nuestro servidor LDAP\\ +base ou=people,dc=CHAOSDIMENSION,dc=ORG & \# Aquí donde van a ir los usuarios y sus claves.\\ + & \# OU significa unidad organizativa\\ + & \# y OU=people es el lugar donde GOsa guarda las\\ + & \# caracteristicas de los usuarios\\ +ldap\_version 3 & \# Versión de LDAP soportada \\ + & \#(muy recomendado la versión 3)\\ +nss\_base\_passwd ou=people,dc=CHAOSDIMENSION,DC=ORG?one & \#Donde buscamos las caracteristicas POSIX\\ +nss\_base\_shadow ou=people,dc=CHAOSDIMENSION,DC=ORG?one & \#Donde buscamos las claves\\ +nss\_base\_group ou=groups,dc=CHAOSDIMENSION,DC=ORG?one & \#Donde las caracteristicas de los grupos POSIX\\ +\hline \end{longtable} +\end{center} + +PAM ( Módulos de autentificación conectables / Pluggable Authentication Modules) es una paquete de librerías dinámicas que permiten al administrador de sistema elegir en que manera las aplicaciones autentifican a los usuarios. + +PAM viene de serie en todas las distribuciones, en /etc/pam.d se guarda la configuración de cada módulo y en /lib/security las librerías dinámicas. + +Nos vamos a concentrar en uno de los módulos de PAM: pam\_ldap. Este módulo nos servirá para que las aplicaciones que usen el sistema base de autentificación y control de sesión y que no usen LDAP, indirectamente accedan a LDAP, como fuente de autentificación. + +Con PAM\_LDAP y la infraestructura de PAM conseguimos que los usuarios POSIX del sistema funcionen atraves de LDAP y se puedan configurar con GOsa. + +PAM\_LDAP se puede descargar de \htmladdnormallink{http://www.padl.com/OSS/pam\_ldap.html}{http://www.padl.com/OSS/pam\_ldap.html} , lo descomprimimos es /usr/src y ejecutamos el clásico:\\ + +\noindent \#cd /usr/src/pam\_ldap\\ +\noindent \#./configure \&\& make \&\& make install\\ +\\ +La configuración de este módulo estará en /etc/pam\_ldap.conf, una configuración básica que funcione con GOsa quedaría: +\begin{center} +\begin{longtable}{|ll|}\hline +\caption{Configuración PAM}\\ +\hline \hline +\multicolumn{2}{|c|}{\textbf{Configuración PAM}}\\ +\hline \hline +\endfirsthead +\hline \hline +\multicolumn{2}{|c|}{\textbf{Configuración PAM (continuación)}}\\ +\hline \hline +\endhead +\hline +\multicolumn{2}{|c|}{Sigue $\ldots$}\\ +\hline +\endfoot +\hline +\multicolumn{2}{|c|}{\textbf{Fin}}\\ +\hline +\endlastfoot +host ip.servidor.ldap & \# Aquí ponemos donde estará nuestro servidor LDAP\\ +base ou=people,dc=CHAOSDIMENSION,dc=ORG & \# Aquí donde van a ir los usuarios y sus claves.\\ + & \# OU significa unidad organizativa y OU=people\\ + & \# es el lugar donde GOsa guarda las caracteristicas de los usuarios\\ +ldap\_version 3 & \# Versión de LDAP soportada (muy recomendado la versión 3)\\ +scope one & \# En gosa los usuarios están al mismo nivel,\\ + & \# no necesitamos descender.\\ +rootbinddn cn=ldapadmin,dc=solaria,dc=es & \# Aquí está el DN del administrador LDAP del servidor,\\ + & \# es necesario, ya que el servidor solo\\ + & \# dará acceso a las claves encriptadas al administrador.\\ +pam\_password md5 & \# Indica como están encriptadas las claves.\\ +\hline \end{longtable} +\end{center} + +En el archivo /etc/secret pondremos la clave del administrador LDAP, este archivo, así como el anterior solo deberían ser accesibles por root. + +Para poder user ahora los servicios con la autentificación LDAP deberemos concentrarnos en tres archivos:\\ +Control de cuentas /etc/pam.d/common-account: +\begin{center} +\begin{longtable}{|ll|}\hline +\caption{Configuración PAM common-account}\\ +\hline \hline +\multicolumn{2}{|c|}{\textbf{Configuración PAM common-account}}\\ +\hline \hline +\endfirsthead +\hline \hline +\multicolumn{2}{|c|}{\textbf{Configuración PAM common-account (continuación)}}\\ +\hline \hline +\endhead +\hline +\multicolumn{2}{|c|}{Sigue $\ldots$}\\ +\hline +\endfoot +\hline +\multicolumn{2}{|c|}{\textbf{Fin}}\\ +\hline +\endlastfoot +account required pam\_unix.so & \# Siempre requerido\\ +account sufficient pam\_ldap.so & \# Las llamadas a ldap\\ +\hline \end{longtable} +\end{center} + +Control de autentificación /etc/pam.d/common-auth: +\begin{center} +\begin{longtable}{|ll|}\hline +\caption{Configuración PAM common-auth}\\ +\hline \hline +\multicolumn{2}{|c|}{\textbf{Configuración PAM common-auth}}\\ +\hline \hline +\endfirsthead +\hline \hline +\multicolumn{2}{|c|}{\textbf{Configuración PAM common-auth (continuación)}}\\ +\hline \hline +\endhead +\hline +\multicolumn{2}{|c|}{Sigue $\ldots$}\\ +\hline +\endfoot +\hline +\multicolumn{2}{|c|}{\textbf{Fin}}\\ +\hline +\endlastfoot +auth sufficient pam\_unix.so & \# Autentificación estandar\\ +auth sufficient pam\_ldap.so try\_first\_pass & \# Autentificacion LDAP en el primer intento\\ +auth required pam\_env.so & \\ +auth required pam\_securetty.so & \\ +auth required pam\_unix\_auth.so & \\ +auth required pam\_warn.so & \\ +auth required pam\_deny.so & \\ +\hline \end{longtable} +\end{center} + +Control de sesiones /etc/pam.d/common-session: +\begin{center} +\begin{longtable}{|ll|}\hline +\caption{Configuración PAM common-session}\\ +\hline \hline +\multicolumn{2}{|c|}{\textbf{Configuración PAM common-session}}\\ +\hline \hline +\endfirsthead +\hline \hline +\multicolumn{2}{|c|}{\textbf{Configuración PAM common-session (continuación)}}\\ +\hline \hline +\endhead +\hline +\multicolumn{2}{|c|}{Sigue $\ldots$}\\ +\hline +\endfoot +\hline +\multicolumn{2}{|c|}{\textbf{Fin}}\\ +\hline +\endlastfoot +session required pam\_limits.so & \\ +session required pam\_unix.so & \# Sesión unix estandar\\ +session optional pam\_ldap.so & \# Sesión basada en LDAP\\ +\hline \end{longtable} +\end{center} + +Esta configuración será necesaria al menos para configurar POSIX y SAMBA. +\newpage +\subsection{Replicación} + +Si tenemos mas de un dominio debemos tener una estructura mas distribuida que sea mas eficiente contra fallos. Una estructura básica sería un servidor maestro con el árbol LDAP completo y servidores con subárboles LDAP que solo tuvieran la parte del dominio que controlan. + +De esta manera GOsa controla el servidor maestro y a traves de un proceso llamado replicación los servidores de dominio. + +La replicación se configura en la configuración de ldap, pero no la ejecuta el demonio slapd, sino otro especializado llamado slurp. +Su configuración se realiza en la base de datos que queremos replicar, como en el ejemplo básico no hemos configurado mas que una base de datos solo tendríamos que añadir al final del fichero de configuración /etc/ldap/slapd.conf: + +\begin{center} +\begin{longtable}{|ll|}\hline +\caption{Configuración Replicación}\\ +\hline \hline +\multicolumn{2}{|c|}{\textbf{Configuración Replicación}}\\ +\hline \hline +\endfirsthead +\hline \hline +\multicolumn{2}{|c|}{\textbf{Configuración Replicación (continuación)}}\\ +\hline \hline +\endhead +\hline +\multicolumn{2}{|c|}{Sigue $\ldots$}\\ +\hline +\endfoot +\hline +\multicolumn{2}{|c|}{\textbf{Fin}}\\ +\hline +\endlastfoot +\#Configuración de réplica & \\ +\#Utilizado por init scripts para parar e iniciar el servidor. & \\ +replica-pidfile /var/run/slurp.pid & \\ + & \\ +\# Argumentos pasados al servidor. & \\ +replica-argsfile /var/run/slapd.args & \\ + & \\ +\#Lugar donde grabamos lo que se replica, y que usara slurpd & \\ +replogfile /var/lib/ldap/replog & \\ +\#Las configuraciones de réplica & \\ +\#Indicación de réplica & \\ +replica & \\ +\#Dirección URI del servidor & \\ +uri=ldap://ip.servidor.esclavo1 & \\ +\#Que vamos a replicar del maestro & \\ +suffix=" dc=dominio1,dc=CHAOSDIMENSION,dc=ORG" & \\ +\#Como vamos a autentificar & \\ +bindmethod=simple & \\ +\#DN replica del esclavo1 & \\ +binddn=\verb|"cn=esclavo1,ou=people,dc=dominio1,dc=CHAOSDIMENSION,dc=ORG"| & \\ +\#Contraseña del usuario & \\ +\# de replica de esclavo1 & \\ +credentials=" tester" & \\ +\#Indicación de réplica del esclavo2 & \\ +replica & \\ +uri=ldap://ip.servidor.esclavo2 & \\ +suffix=" dc=dominio2,dc=CHAOSDIMENSION,dc=ORG" & \\ +bindmethod=simple & \\ +binddn=\verb|"cn=esclavo2,ou=people,dc=dominio2,dc=CHAOSDIMENSION,dc=ORG"| & \\ +credentials=" tester" & \\ +\hline \end{longtable} +\end{center} + +Por simplicidad hemos supuesto que los dos servidores esclavos están configurados igual que el maestro, excepto por la configuración de replica del maestro y las indicaciones de los esclavos de quien es el servidor maestro. + +En los servidores esclavos añadimos al final del /etc/ldap/slapd.conf: + +En esclavo1:\\ +\begin{tabular}{|ll|}\hline +\#Quién puede actualizar el servidor & \\ +updatedn \verb|"cn=esclavo1,dc=dominio1,dc=CHAOSDIMENSION,dc=ORG"| & \\ +\#Desde donde & \\ +updateref ldap://ip.servidor.maestro & \\ +\#Permitimos el acceso & \\ +access to dn.subtree= " dc=dominio1,dc=CHAOSDIMENSION,dc=ORG" & \\ +by dn= \verb|"cn=esclavo1,dc=dominio1,dc=CHAOSDIMENSION,dc=ORG"| =wrscx & \\ +by * none & \\ +\hline\end{tabular} +\vspace{0.5cm} + +En esclavo2:\\ +\begin{tabular}{|ll|}\hline +\#Quién puede actualizar el servidor & \\ +updatedn \verb|"cn=esclavo2,dc=dominio2,dc=CHAOSDIMENSION,dc=ORG"| & \\ +\#Desde donde & \\ +updateref ldap://ip.servidor.maestro & \\ +\#Permitimos el acceso & \\ +access to dn.subtree= " dc=dominio2,dc=CHAOSDIMENSION,dc=ORG" & \\ +by dn= \verb|"cn=esclavo2,dc=dominio2,dc=CHAOSDIMENSION,dc=ORG"| =wrscx & \\ +by * none & \\ +\hline \end{tabular} +\vspace{1cm} + +Además debemos crear los usuarios de replica en las bases de datos correspondientes. Eso se vera en el siguiente punto. + +\subsection{Carga de datos} + +En este punto daremos los datos iniciales de nuestro árbol LDAP necesario para GOsa. +Tambien indicaremos de que manera hacer la carga de estos datos y que hacer en el caso de un servidor único o en el caso de que haya réplicas. + +La carga se puede hacer de dos maneras, una es atraves de slapadd y la otra es atraves de ldapadd.\\ +En el primer caso la carga se hace directamente sobre la base de datos con lo cual no existe replicación y ademas no se mostrarán los datos en el servidor LDAP hasta que este no sea iniciado nuevamente, \textbf{la carga de datos de esta manera debe ser hecha con el servidor apagado}.\\ +En el segundo caso, la carga se hace a traves de ldap y si hay replica esta se generara de la manera pertinente. + +Para una carga desde cero de la base de datos, deberemos hacerla desde slapadd, con el servidor slapd parado. + +La forma de usar slapadd es:\\ + +\noindent \#slapadd -v -l fichero\_con\_datos.ldif\\ + +LDIF es el formato estándar para guardar datos de LDAP. GOsa trae su propio ldif de ejemplo, en los siguientes dos puntos explicaremos como usarlo según nuestras necesidades. +\vspace{1cm} + +\subsubsection{Servidor Único} + +Es el caso mas básico, en el no hay replicación y solo necesitamos un árbol simple.\\ +En nuestro ejemplo supondremos que nuestro árbol GOsa está en dc=CHAOSDIMENSION,dc=ORG.\\ + +Cargaremos los datos con un script, le llamaremos \htmladdnormallink{carga.sh}{http://warping.sourceforge.net/gosa/contrib/es/carga.sh}, esto simplificara los pasos. +Los parámetros del script serán: DN de la base, Servidor IMAP,Realm Kerberos\\ + +\begin{center} +\begin{longtable}{|l|}\hline +\caption{Configuración Carga de Datos}\\ +\hline \hline +\multicolumn{1}{|c|}{\textbf{Configuración Carga de Datos}}\\ +\hline \hline +\endfirsthead +\hline \hline +\multicolumn{1}{|c|}{\textbf{Configuración Carga de Datos (continuación)}}\\ +\hline \hline +\endhead +\hline +\multicolumn{1}{|c|}{Sigue $\ldots$}\\ +\hline +\endfoot +\hline +\multicolumn{1}{|c|}{\textbf{Fin}}\\ +\hline +\endlastfoot +\#!/bin/sh\\ +\\ +if [ \$\{\#@\} != 3 ]\\ +then\\ +\verb| |echo "Se necesita los parametro DN base, Servidor IMAP y Servidor Kerberos"\\ +\verb| |echo "Por ejemplo carga.sh dc=CHAOSDIMENSION,dc=ORG imap.solaria krb.solaria"\\ +\verb| |exit\\ +fi\\ +\\ +DC=`echo \$1|cut -d\textbackslash= -f 2|cut -d \textbackslash , -f 1`\\ +IMAP=\$2\\ +KRB=\$3\\ +\\ +slapadd \verb|<<| EOF\\ +dn: \$1\\ +objectClass: dcObject\\ +objectClass: organization\\ +description: Base object\\ +dc: \$DC\\ +o: My own Organization\\ +\\ +dn: cn=terminal-admin,\$1\\ +objectClass: person\\ +cn: terminal-admin\\ +sn: Upload user\\ +description: GOto Upload Benutzer\\ +userPassword:: e2tlcmJlcm9zfXRlcm1pbmFsYWRtaW5AR09OSUNVUy5MT0NBTAo=\\ +\\ +dn: ou=systems,\$1\\ +objectClass: organizationalUnit\\ +ou: systems\\ +\\ +dn: ou=terminals,ou=systems,\$1\\ +objectClass: organizationalUnit\\ +ou: terminals\\ +\\ +dn: ou=servers,ou=systems,\$1\\ +objectClass: organizationalUnit\\ +ou: servers\\ +\\ +dn: ou=people,\$1\\ +objectClass: organizationalUnit\\ +ou: people\\ +\\ +dn: ou=groups,\$1\\ +objectClass: organizationalUnit\\ +ou: groups\\ +\\ +dn: cn=default,ou=terminals,ou=systems,\$1\\ +objectClass: gotoTerminal\\ +cn: default\\ +gotoMode: disabled\\ +gotoXMethod: query\\ +gotoRootPasswd: tyogUVSVZlEPs\\ +gotoXResolution: 1024x768\\ +gotoXColordepth: 16\\ +gotoXKbModel: pc104\\ +gotoXKbLayout: de\\ +gotoXKbVariant: nodeadkeys\\ +gotoSyslogServer: lts-1\\ +gotoSwapServer: lts-1:/export/swap\\ +gotoLpdServer: lts-1:/export/spool\\ +gotoNtpServer: lts-1\\ +gotoScannerClients: lts-1.\$DC.local\\ +gotoFontPath: inet/lts-1:7110\\ +gotoXdmcpServer: lts-1\\ +gotoFilesystem: afs-1:/export/home /home nfs exec,dev,suid,rw,hard,nolock,fg,rsize=8192 1 1\\ +\\ +dn: cn=admin,ou=people,\$1\\ +objectClass: person\\ +objectClass: organizationalPerson\\ +objectClass: inetOrgPerson\\ +objectClass: gosaAccount\\ +uid: admin\\ +cn: admin\\ +givenName: admin\\ +sn: GOsa main administrator\\ +sambaLMPassword: 10974C6EFC0AEE1917306D272A9441BB\\ +sambaNTPassword: 38F3951141D0F71A039CFA9D1EC06378\\ +userPassword:: dGVzdGVy\\ +\\ +dn: cn=administrators,ou=groups,\$1\\ +objectClass: gosaObject\\ +objectClass: posixGroup\\ +objectClass: top\\ +gosaSubtreeACL: :all\\ +cn: administrators\\ +gidNumber: 999\\ +memberUid: admin\\ +\\ +dn: cn=lts-1,ou=servers,ou=systems,\$1\\ +objectClass: goTerminalServer\\ +objectClass: goServer\\ +goXdmcpIsEnabled: true\\ +macAddress: 00:B0:D0:F0:DE:1D\\ +cn: lts-1\\ +goFontPath: inet/lts-1:7110\\ +\\ +dn: cn=afs-1,ou=servers,ou=systems,\$1\\ +objectClass: goNfsServer\\ +objectClass: goNtpServer\\ +objectClass: goLdapServer\\ +objectClass: goSyslogServer\\ +objectClass: goCupsServer\\ +objectClass: goServer\\ +macAddress: 00:B0:D0:F0:DE:1C\\ +cn: afs-1\\ +goExportEntry: /export/terminals 10.3.64.0/255.255.252.0(ro,async,no\_root\_squash)\\ +goExportEntry: /export/spool 10.3.64.0/255.255.252.0(rw,sync,no\_root\_squash)\\ +goExportEntry: /export/swap 10.3.64.0/255.255.252.0(rw,sync,no\_root\_squash)\\ +goExportEntry: /export/home 10.3.64.0/255.255.252.0(rw,sync,no\_root\_squash)\\ +goLdapBase: \$1\\ +\\ +dn: cn=vserver-02,ou=servers,ou=systems,\$1\\ +objectClass: goImapServer\\ +objectClass: goServer\\ +macAddress: 00:B0:D0:F0:DE:1F\\ +cn: vserver-02\\ +goImapName: imap://\$IMAP\\ +goImapConnect: {\$IMAP:143}\\ +goImapAdmin: cyrus\\ +goImapPassword: secret\\ +goImapSieveServer: \$IMAP\\ +goImapSievePort: 2000\\ +\\ +dn: cn=kerberos,ou=servers,ou=systems,\$1\\ +objectClass: goKrbServer\\ +objectClass: goServer\\ +macAddress: 00:B0:D0:F0:DE:1E\\ +cn: kerberos\\ +goKrbRealm: \$KRB\\ +goKrbAdmin: admin/admin\\ +goKrbPassword: secret\\ +\\ +dn: cn=fax,ou=servers,ou=systems,\$1\\ +objectClass: goFaxServer\\ +objectClass: goServer\\ +macAddress: 00:B0:D0:F0:DE:10\\ +cn: fax\\ +goFaxAdmin: fax\\ +goFaxPassword: secret\\ +\\ +dn: ou=incoming,\$1\\ +objectClass: organizationalUnit\\ +ou: incoming\\ +\\ +EOF\\ +\hline \end{longtable} +\end{center} + +\subsubsection{Servidor Maestro y dos réplicas} + +La carga de datos se hará con el mismo script de la sección anterior, tanto en el maestro como en los esclavos, con las siguientes diferencias:\\ + +En el maestro por ejemplo "DC=CHAOSDIMENSION,DC=ORG" ejecutaremos este script \htmladdnormallink{crea\_base.sh}{http://warping.sourceforge.net/gosa/contrib/es/crea\_base.sh} para crear la base:\\ + +\begin{center} +\begin{longtable}{|l|}\hline +\caption{Configuración Crea Base Maestro}\\ +\hline \hline +\multicolumn{1}{|c|}{\textbf{Configuración Crea Base Maestro}}\\ +\hline \hline +\endfirsthead +\hline \hline +\multicolumn{1}{|c|}{\textbf{Configuración Crea Base Maestro (continuación)}}\\ +\hline \hline +\endhead +\hline +\multicolumn{1}{|c|}{Sigue $\ldots$}\\ +\hline +\endfoot +\hline +\multicolumn{1}{|c|}{\textbf{Fin}}\\ +\hline +\endlastfoot +\#!/bin/sh\\ +\\ +if [ \$\{\#@\} != 1 ]\\ +then\\ +\verb| |echo "Se necesita el parámetro DN base del maestro"\\ +\verb| |echo "Por ejemplo crea\_base.sh dc=CHAOSDIMENSION,dc=ORG"\\ +\verb| |exit\\ +fi\\ +\\ +DC=`echo \$1|cut -d\textbackslash= -f 2|cut -d\textbackslash, -f 1`\\ +\\ +slapadd \verb|<<| EOF\\ +dn: \$1\\ +objectClass: dcObject\\ +objectClass: organization\\ +description: Base object\\ +dc: \$DC\\ +o: My own Base Organization\\ +\\ +EOF\\ +\hline \end{longtable} +\end{center} + +Además con el script de la sección anterior cargaremos los dominios de ejemplo:\\ "DC=dominio1,DC=CHAOSDIMENSION,DC=ORG" y "DC=dominio2,DC=CHAOSDIMENSION,DC=ORG".\\ + +En el esclavo1 ejecutaremos el script con "DC=dominio1,DC=CHAOSDIMENSION,DC=ORG" y en esclavo2 con "DC=dominio2,DC=CHAOSDIMENSION,DC=ORG".\\ En ambos casos los dos servidores LDAP esclavos habrán sido configurados para su propio DN. + +Lo que nos faltaría seria crear el usuario para la replica, que se podría hacer con el siguiente script \htmladdnormallink{usuario\_replica.sh}{http://warping.sourceforge.net/gosa/contrib/es/usuario\_replica.sh} con parámetros nombre del usuario y el DN base: \\ + +\begin{center} +\begin{longtable}{|l|}\hline +\caption{Configuración Usuario Réplica}\\ +\hline \hline +\multicolumn{1}{|c|}{\textbf{Configuración Usuario Réplica}}\\ +\hline \hline +\endfirsthead +\hline \hline +\multicolumn{1}{|c|}{\textbf{Configuración Usuario Réplica (continuación)}}\\ +\hline \hline +\endhead +\hline +\multicolumn{1}{|c|}{Sigue $\ldots$}\\ +\hline +\endfoot +\hline +\multicolumn{1}{|c|}{\textbf{Fin}}\\ +\hline +\endlastfoot +\#!/bin/sh\\ +if [ \$\{\#@\} != 2 ]\\ +then\\ +\verb| |echo "Se necesita los parametros nombre de usuario y DN base para replica"\\ +\verb| |echo "Por ejemplo usuario\_replica.sh replicator dc=dominio1,dc=CHAOSDIMENSION,dc=ORG "\\ +\verb| |exit\\ +fi\\ +\\ +KEY=`makepasswd --crypt --chars=7 \textbackslash \\--string="abcdefghijklmnopqrstuvwxyz1234567890"`\\ +PASS=`echo \$KEY|awk '\{ print \$1 \}'`\\ +CRYPT=`echo \$KEY|awk '\{ print \$2 \}'`\\ +\\ +echo \verb|"Creando usuario $1 con contraseña: $PASS"|\\ +\\ +slapadd \verb|<<| EOF\\ +dn: cn=\$1,ou=people,\$2\\ +displayName: Debian User,,,\\ +userPassword: \{crypt\} \$CRYPT\\ +sambaLMPassword: \\ +sambaNTPassword: \\ +sn: \$1\\ +givenName: \$1\\ +cn: \$1\\ +homeDirectory: /home/\$1\\ +loginShell: /bin/false\\ +uidNumber: 10000\\ +gidNumber: 100\\ +gecos: \$1\\ +shadowMin: 0\\ +shadowMax: 99999\\ +shadowWarning: 7\\ +shadowInactive: 0\\ +shadowLastChange: 12438\\ +gosaDefaultLanguage: es\_ES\\ +uid: \$1\\ +objectClass: posixAccount\\ +objectClass: shadowAccount\\ +objectClass: person\\ +objectClass: organizationalPerson\\ +objectClass: inetOrgPerson\\ +objectClass: gosaAccount\\ +objectClass: top\\ +\\ +EOF\\ +\hline \end{longtable} +\end{center} diff --git a/doc/guide/admin/es/referencias_gosa.bib b/doc/guide/admin/es/referencias_gosa.bib new file mode 100644 index 000000000..8c8100b96 --- /dev/null +++ b/doc/guide/admin/es/referencias_gosa.bib @@ -0,0 +1,109 @@ +@Manual{x500, +title = {Understanding X.500 - The Directory}, +key = {x500}, +author = { D W Chadwick}, +} + +@TechReport{2251, +author = {Network Working Group}, +title = {Request for Comments: 2251. Lightweight Directory Access Protocol (v3)}, +institution = {}, +year = {}, +address = {http://www.ietf.org/rfc/rfc2251.txt}, +} + +@TechReport{2252, +author = {Network Working Group}, +title = {Request for Comments: 2252. Lightweight Directory Access Protocol (v3): Attribute Syntax Definitions}, +institution = {}, +year = {}, +address = {http://www.ietf.org/rfc/rfc2252.txt}, +} + +@TechReport{2253, +author = {Network Working Group}, +title = {Request for Comments: 2253. Lightweight Directory Access Protocol (v3): UTF-8 String Representation of Distinguished Names}, +institution = {}, +year = {}, +address = {http://www.ietf.org/rfc/rfc2253.txt}, +} + +@TechReport{2254, +author = {Network Working Group}, +title = {Request for Comments: 2254. The String Representation of LDAP Search Filters}, +institution = {}, +year = {}, +address = {http://www.ietf.org/rfc/rfc2254.txt}, +} + +@TechReport{2255, +author = {Network Working Group}, +title = {Request for Comments: 2255. The LDAP URL Format}, +institution = {}, +year = {}, +address = {http://www.ietf.org/rfc/rfc2255.txt}, +} + +@TechReport{2256, +author = {Network Working Group}, +title = {Request for Comments: 2256. A Summary of the X.500(96) User Schema for use with LDAPv3}, +institution = {}, +year = {}, +address = {http://www.ietf.org/rfc/rfc2256.txt}, +} + +@TechReport{3377, +author = {Network Working Group}, +title = {Request for Comments: 3377. Lightweight Directory Access Protocol (v3): Technical Specification}, +institution = {}, +year = {}, +address = {http://www.ietf.org/rfc/rfc3377.txt}, +} + +@TechReport{llh, +author = {Luiz Ernesto Pinheiro Malère}, +title = {LDAP Linux HOWTO}, +institution = {}, +year = {}, +address = {http://www.tldp.org/HOWTO/LDAP-HOWTO/index.html}, +} + +@TechReport{ul, +author = {metaconsultancy}, +title = {Using OpenLDAP}, +institution = {}, +year = {}, +address = {http://www.metaconsultancy.com/whitepapers/ldap.htm}, +} + +@TechReport{oag, +author = {The OpenLDAP Project}, +title = {OpenLDAP 2.2 Administrator's Guide}, +institution = {}, +year = {}, +address = {http://www.openldap.org/doc/admin22/index.html}, +} + +@TechReport{lscp, +author = {Sergio González González}, +title = {Integración de redes con OpenLDAP, Samba, CUPS y PyKota}, +institution = {}, +year = {}, +address = {http://es.tldp.org/Tutoriales/doc-openldap-samba-cups-python/html/ldap+samba+cups+pykota.html}, +} + +@TechReport{ssldoc, +author = {OpenSSL Project}, +title = {OpenSSL Documents}, +institution = {}, +year = {}, +address = {http://www.openssl.org/docs/}, +} + +@TechReport{2616, +author = {Network Working Group}, +title = {Request for Comments: 2616. Hypertext Transfer Protocol -- HTTP/1.1}, +institution = {}, +year = {}, +address = {http://www.ietf.org/rfc/rfc2616.txt}, +} diff --git a/doc/html/annotated.html b/doc/html/annotated.html new file mode 100644 index 000000000..495245a68 --- /dev/null +++ b/doc/html/annotated.html @@ -0,0 +1,19 @@ + + +GOsa: Annotated Index + + + + +

GOsa Compound List

Here are the classes, structs, unions and interfaces with brief descriptions: + + + + +
mailAccountMail plugin
pluginThe plugin base class
posixAccountPosixAccount plugin
userUser plugin
+
Generated on Sat Jul 26 18:32:22 2003 for GOsa by + +doxygen +1.3.2
+ + diff --git a/doc/html/classmailAccount-members.html b/doc/html/classmailAccount-members.html new file mode 100644 index 000000000..fddd4a8b8 --- /dev/null +++ b/doc/html/classmailAccount-members.html @@ -0,0 +1,60 @@ + + +GOsa: Member List + + + + +

mailAccount Member List

This is the complete list of members for mailAccount, including all inherited members. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
acl (defined in plugin)plugin
adapt_from_template($dn) (defined in mailAccount)mailAccount
addAlternate($address) (defined in mailAccount)mailAccount
addForwarder($address) (defined in mailAccount)mailAccount
admins (defined in mailAccount)mailAccount
attributes (defined in mailAccount)mailAccount
attrsplugin
check() (defined in mailAccount)mailAccount
default_permissions (defined in mailAccount)mailAccount
delAlternate($addresses) (defined in mailAccount)mailAccount
delForwarder($addresses) (defined in mailAccount)mailAccount
dnplugin
execute()mailAccount
folder_prefix (defined in mailAccount)mailAccount
forward_dialog (defined in mailAccount)mailAccount
getImapAttributes() (defined in mailAccount)mailAccount
givenName (defined in plugin)plugin
gosaMailAlternateAddress (defined in mailAccount)mailAccount
gosaMailDeliveryMode (defined in mailAccount)mailAccount
gosaMailForwardingAddress (defined in mailAccount)mailAccount
gosaMailMaxSize (defined in mailAccount)mailAccount
gosaMailQuota (defined in mailAccount)mailAccount
gosaMailServer (defined in mailAccount)mailAccount
gosaSpamMailbox (defined in mailAccount)mailAccount
gosaSpamSortLevel (defined in mailAccount)mailAccount
gosaVacationMessage (defined in mailAccount)mailAccount
is_accountplugin
is_templateplugin
mail (defined in mailAccount)mailAccount
mailAccount($dn=NULL, $shared_folder=FALSE) (defined in mailAccount)mailAccount
mailboxList (defined in mailAccount)mailAccount
member_permissions (defined in mailAccount)mailAccount
members (defined in mailAccount)mailAccount
objectclasses (defined in mailAccount)mailAccount
parentplugin
password_change_needed() (defined in plugin)plugin
perms (defined in mailAccount)mailAccount
plugin($dn=NULL)plugin
quotaUsage (defined in mailAccount)mailAccount
remove_from_parent() (defined in mailAccount)mailAccount
save() (defined in mailAccount)mailAccount
save_object() (defined in mailAccount)mailAccount
setImapAttributes() (defined in mailAccount)mailAccount
setSieveAttributes() (defined in mailAccount)mailAccount
sn (defined in plugin)plugin
uid (defined in plugin)plugin

Generated on Sat Jul 26 18:32:23 2003 for GOsa by + +doxygen +1.3.2
+ + diff --git a/doc/html/classmailAccount.html b/doc/html/classmailAccount.html new file mode 100644 index 000000000..febb30e7a --- /dev/null +++ b/doc/html/classmailAccount.html @@ -0,0 +1,224 @@ + + +GOsa: mailAccount class Reference + + + + +

mailAccount Class Reference

mail plugin +More... +

+

Inheritance diagram for mailAccount: +

+ +plugin + +List of all members. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Public Member Functions

mailAccount ($dn=NULL, $shared_folder=FALSE)
getImapAttributes ()
setImapAttributes ()
setSieveAttributes ()
 execute ()
 execute plugin

remove_from_parent ()
save_object ()
save ()
check ()
adapt_from_template ($dn)
addForwarder ($address)
delForwarder ($addresses)
addAlternate ($address)
delAlternate ($addresses)

Public Attributes

mail = ""
gosaMailAlternateAddress = array()
gosaMailForwardingAddress = array()
gosaMailDeliveryMode = "[L ]"
gosaMailServer = ""
gosaMailQuota = ""
gosaMailMaxSize = ""
gosaVacationMessage = ""
gosaSpamSortLevel = ""
gosaSpamMailbox = ""
quotaUsage = 0
forward_dialog = FALSE
folder_prefix = ""
mailboxList = array()
default_permissions = "none"
member_permissions = "post"
members = array()
admins = array()
 perms
 attributes
objectclasses = array("gosaMailAccount")
+

Detailed Description

+mail plugin +

+

Author:
Cajus Pollmeier <pollmeier@gonicus.de>
+
Version:
2.00
+
Date:
24.07.2003
+This class provides the functionality to read and write all attributes relevant for gosaMailAccounts from/to the LDAP. It does syntax checking and displays the formulars required. +

+


Member Function Documentation

+

+ + + + +
+ + + + + + + + + +
mailAccount::execute  ) 
+
+ + + + + +
+   + + +

+execute plugin +

+Generates the html output for this node +

+Reimplemented from plugin.

+


Member Data Documentation

+

+ + + + +
+ + +
mailAccount::attributes +
+
+ + + + + +
+   + + +

+Initial value:

 array("mail", "gosaMailServer", "gosaMailQuota", "gosaMailMaxSize",
+                        "gosaMailDeliveryMode", "gosaSpamSortLevel", "gosaSpamMailbox",
+                        "gosaVacationMessage", "uid")
+
+

+Reimplemented from plugin.

+

+ + + + +
+ + +
mailAccount::perms +
+
+ + + + + +
+   + + +

+Initial value:

 array( "lrs" => "read", "lrsp" => "post", "lrsip" => "append",
+                        "lrswipcd" => "write", "lrswipcda" => "all" )
+
+


The documentation for this class was generated from the following file:
    +
  • class_mailAccount.inc
+
Generated on Sat Jul 26 18:32:23 2003 for GOsa by + +doxygen +1.3.2
+ + diff --git a/doc/html/classmailAccount.png b/doc/html/classmailAccount.png new file mode 100644 index 0000000000000000000000000000000000000000..12cfc1752e5e657cd4ac5856540e5fe44b1bbfb7 GIT binary patch literal 327 zcmeAS@N?(olHy`uVBq!ia0vp^fj}I%Gsd>it!nPqTBq%}#Uf|Ng1q|1RGpf3@?DuHN};@}AbW zsT|inmF;wY@62cU#8p-5uyy{LVlU33i@SuUS?*bP0l+XkKTm6!H literal 0 HcmV?d00001 diff --git a/doc/html/classplugin-members.html b/doc/html/classplugin-members.html new file mode 100644 index 000000000..ab6292b22 --- /dev/null +++ b/doc/html/classplugin-members.html @@ -0,0 +1,33 @@ + + +GOsa: Member List + + + + +

plugin Member List

This is the complete list of members for plugin, including all inherited members. + + + + + + + + + + + + + + + + + + + +
acl (defined in plugin)plugin
adapt_from_template($dn) (defined in plugin)plugin
attributes (defined in plugin)plugin
attrsplugin
check() (defined in plugin)plugin
dnplugin
execute()plugin
givenName (defined in plugin)plugin
is_accountplugin
is_templateplugin
objectclasses (defined in plugin)plugin
parentplugin
password_change_needed() (defined in plugin)plugin
plugin($dn=NULL)plugin
remove_from_parent() (defined in plugin)plugin
save() (defined in plugin)plugin
save_object() (defined in plugin)plugin
sn (defined in plugin)plugin
uid (defined in plugin)plugin

Generated on Sat Jul 26 18:32:23 2003 for GOsa by + +doxygen +1.3.2
+ + diff --git a/doc/html/classplugin.html b/doc/html/classplugin.html new file mode 100644 index 000000000..edc1cb63b --- /dev/null +++ b/doc/html/classplugin.html @@ -0,0 +1,294 @@ + + +GOsa: plugin class Reference + + + + +

plugin Class Reference

The plugin base class. +More... +

+

Inheritance diagram for plugin: +

+ +mailAccount +posixAccount +user + +List of all members. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Public Member Functions

 plugin ($dn=NULL)
 plugin constructor

 execute ()
 execute plugin

remove_from_parent ()
save_object ()
save ()
check ()
adapt_from_template ($dn)
password_change_needed ()

Public Attributes

 parent = NULL
 Reference to parent object.

 is_account = FALSE
 Mark plugin as account.

 is_template = FALSE
 Mark plugin as template.

 attrs = array()
 Represent temporary LDAP data.

 dn = ""
 Used standard values.

uid = ""
sn = ""
givenName = ""
acl = "*none*"
attributes = array()
objectclasses = array()
+

Detailed Description

+The plugin base class. +

+

Author:
Cajus Pollmeier <pollmeier@gonicus.de>
+
Version:
2.00
+
Date:
24.07.2003
+This is the base class for all plugins. It can be used standalone or can be included by the tabs class. All management should be done within this class. Extend your plugins from this class. +

+


Constructor & Destructor Documentation

+

+ + + + +
+ + + + + + + + + + +
plugin::plugin dn = NULL  ) 
+
+ + + + + +
+   + + +

+plugin constructor +

+If 'dn' is set, the node loads the given 'dn' from LDAP

+

Parameters:
+ + +
dn Distinguished name to initialize plugin from
+
+
See also:
plugin()
+
+


Member Function Documentation

+

+ + + + +
+ + + + + + + + + +
plugin::execute  ) 
+
+ + + + + +
+   + + +

+execute plugin +

+Generates the html output for this node +

+Reimplemented in mailAccount, posixAccount, and user.

+


Member Data Documentation

+

+ + + + +
+ + +
plugin::attrs = array() +
+
+ + + + + +
+   + + +

+Represent temporary LDAP data. +

+This is only used internally.

+

+ + + + +
+ + +
plugin::dn = "" +
+
+ + + + + +
+   + + +

+Used standard values. +

+dn

+

+ + + + +
+ + +
plugin::is_account = FALSE +
+
+ + + + + +
+   + + +

+Mark plugin as account. +

+Defines whether this plugin is defined as an account or not. This has consequences for the plugin to be saved from tab mode. If it is set to 'FALSE' the tab will call the delete function, else the save function. Should be set to 'TRUE' if the construtor detects a valid LDAP object.

+

See also:
plugin::plugin()
+
+

+ + + + +
+ + +
plugin::is_template = FALSE +
+
+ + + + + +
+   + + +

+Mark plugin as template. +

+Defines whether we are creating a template or a normal object. Has conseqences on the way execute() shows the formular and how save() puts the data to LDAP.

+

See also:
plugin::save() plugin::execute()
+
+

+ + + + +
+ + +
plugin::parent = NULL +
+
+ + + + + +
+   + + +

+Reference to parent object. +

+This variable is used when the plugin is included in tabs and keeps reference to the tab class. Communication to other tabs is possible by 'name'. So the 'fax' plugin can ask the 'userinfo' plugin for the fax number.

+

See also:
tab
+
+


The documentation for this class was generated from the following file:
    +
  • plugin.inc
+
Generated on Sat Jul 26 18:32:23 2003 for GOsa by + +doxygen +1.3.2
+ + diff --git a/doc/html/classplugin.png b/doc/html/classplugin.png new file mode 100644 index 0000000000000000000000000000000000000000..7853333be91edcf1f86bf2d49ac96fc910a6db5f GIT binary patch literal 602 zcmeAS@N?(olHy`uVBq!ia0y~yV3Yx}16Y`Wq^0@w0w5(3;1lBd|Nnm=^Z)+?^XDf_ z0J6aNz<~qRhyFhSav4j4{DK)Ap4~_TvOjpbIEGZrc{@Ei@34Y^>tX->XWuZCv%hVd zpjG+bTf?7Srp?InSn|p{E_Dpwi%c38-N_5dY&!9oGV`Uc&V4T2()__f%SP9b~j?MrX0O5LS|I_7+ + +GOsa: Member List + + + + +

posixAccount Member List

This is the complete list of members for posixAccount, including all inherited members. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
acl (defined in plugin)plugin
adapt_from_template($dn) (defined in posixAccount)posixAccount
addGroup($groups) (defined in posixAccount)posixAccount
attributes (defined in posixAccount)posixAccount
attrsplugin
check() (defined in posixAccount)posixAccount
delGroup($groups) (defined in posixAccount)posixAccount
dnplugin
execute()posixAccount
force_ids (defined in posixAccount)posixAccount
gecos (defined in posixAccount)posixAccount
gidNumber (defined in posixAccount)posixAccount
givenName (defined in plugin)plugin
gosaDefaultLanguage (defined in posixAccount)posixAccount
gosaDefaultPrinter (defined in posixAccount)posixAccount
gosaHostACL (defined in posixAccount)posixAccount
group_dialog (defined in posixAccount)posixAccount
groupMembership (defined in posixAccount)posixAccount
homeDirectory (defined in posixAccount)posixAccount
hosts_dialog (defined in posixAccount)posixAccount
is_accountplugin
is_templateplugin
loginShell (defined in posixAccount)posixAccount
loginShellList (defined in posixAccount)posixAccount
must_change_password (defined in posixAccount)posixAccount
objectclasses (defined in posixAccount)posixAccount
parentplugin
password_change_needed() (defined in plugin)plugin
plugin($dn=NULL)plugin
posixAccount($dn=NULL) (defined in posixAccount)posixAccount
printerList (defined in posixAccount)posixAccount
remove_from_parent() (defined in posixAccount)posixAccount
save() (defined in posixAccount)posixAccount
save_object() (defined in posixAccount)posixAccount
savedGidNumber (defined in posixAccount)posixAccount
savedGroupMembership (defined in posixAccount)posixAccount
savedUidNumber (defined in posixAccount)posixAccount
shadowExpire (defined in posixAccount)posixAccount
shadowInactive (defined in posixAccount)posixAccount
shadowLastChange (defined in posixAccount)posixAccount
shadowMax (defined in posixAccount)posixAccount
shadowMin (defined in posixAccount)posixAccount
shadowWarning (defined in posixAccount)posixAccount
sn (defined in plugin)plugin
status (defined in posixAccount)posixAccount
uid (defined in plugin)plugin
uidNumber (defined in posixAccount)posixAccount
use_shadowExpire (defined in posixAccount)posixAccount
use_shadowInactive (defined in posixAccount)posixAccount
use_shadowMax (defined in posixAccount)posixAccount
use_shadowMin (defined in posixAccount)posixAccount
use_shadowWarning (defined in posixAccount)posixAccount

Generated on Sat Jul 26 18:32:23 2003 for GOsa by + +doxygen +1.3.2
+ + diff --git a/doc/html/classposixAccount.html b/doc/html/classposixAccount.html new file mode 100644 index 000000000..f7f0ee3e0 --- /dev/null +++ b/doc/html/classposixAccount.html @@ -0,0 +1,219 @@ + + +GOsa: posixAccount class Reference + + + + +

posixAccount Class Reference

posixAccount plugin +More... +

+

Inheritance diagram for posixAccount: +

+ +plugin + +List of all members. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Public Member Functions

posixAccount ($dn=NULL)
 execute ()
 execute plugin

remove_from_parent ()
save_object ()
save ()
check ()
addGroup ($groups)
delGroup ($groups)
adapt_from_template ($dn)

Public Attributes

homeDirectory = ""
loginShell = "/bin/bash"
uidNumber = ""
gidNumber = ""
gecos = ""
shadowMin = "0"
shadowMax = "0"
shadowWarning = "0"
shadowLastChange = "0"
shadowInactive = "0"
shadowExpire = "0"
gosaDefaultPrinter = ""
gosaDefaultLanguage = ""
gosaHostACL = array()
status = ""
loginShellList = array()
groupMembership = array()
savedGroupMembership = array()
savedUidNumber = ""
savedGidNumber = ""
use_shadowMin = "0"
use_shadowMax = "0"
use_shadowWarning = "0"
use_shadowInactive = "0"
use_shadowExpire = "0"
must_change_password = "0"
force_ids = 0
printerList = array()
group_dialog = FALSE
hosts_dialog = FALSE
 attributes
objectclasses = array("posixAccount", "shadowAccount")
+

Detailed Description

+posixAccount plugin +

+

Author:
Cajus Pollmeier <pollmeier@gonicus.de>
+
Version:
2.00
+
Date:
24.07.2003
+This class provides the functionality to read and write all attributes relevant for posixAccounts and shadowAccounts from/to the LDAP. It does syntax checking and displays the formulars required. +

+


Member Function Documentation

+

+ + + + +
+ + + + + + + + + +
posixAccount::execute  ) 
+
+ + + + + +
+   + + +

+execute plugin +

+Generates the html output for this node +

+Reimplemented from plugin.

+


Member Data Documentation

+

+ + + + +
+ + +
posixAccount::attributes +
+
+ + + + + +
+   + + +

+Initial value:

 array("homeDirectory", "loginShell", "uidNumber", "gidNumber", "gecos",
+                        "shadowMin", "shadowMax", "shadowWarning", "shadowInactive", "shadowLastChange",
+                        "shadowExpire", "gosaDefaultPrinter", "gosaDefaultLanguage", "uid")
+
+

+Reimplemented from plugin.

+


The documentation for this class was generated from the following file:
    +
  • class_posixAccount.inc
+
Generated on Sat Jul 26 18:32:23 2003 for GOsa by + +doxygen +1.3.2
+ + diff --git a/doc/html/classposixAccount.png b/doc/html/classposixAccount.png new file mode 100644 index 0000000000000000000000000000000000000000..71dee1342af8a640f1a1604412c2553e26983d5b GIT binary patch literal 343 zcmeAS@N?(olHy`uVBq!ia0vp^5kMTk!VDzyU#!mpQW60^A+G=b{|7Sv|35H)e!>JG z3ycpOI8c4){}UjWu_VYZn8D%MjWi(Vt*47)NX4ADS5EUDGT>pj@Z-?Ub8KzA35tGq z>scPv{PLILR?_I|j#95J(iOjIBa-;;`l}s(*`G~`;I&(mb29NYUy*oP^pPhW3EyTu zRobTftl$?PpKbA*pDQ-`H0RDamME=Rc5Lq9*NdK>+ERIQ{~z(c5@EGm-yYArSuY*m z7FHo4QoEvHcV@|*!sD{y2AYQw{yu*2Mk1cec8T3?>eFPxL0o9u(OgaEUIB9F3Zx3#oRZiP=sW3am2$ww>GIW`~I*`ylh=lmf@szI** m@`XJI%XXNZ>olF;B<>@)>d#Wsw^xB4XYh3Ob6Mw<&;$S!5tJkV literal 0 HcmV?d00001 diff --git a/doc/html/classuser-members.html b/doc/html/classuser-members.html new file mode 100644 index 000000000..db776f137 --- /dev/null +++ b/doc/html/classuser-members.html @@ -0,0 +1,82 @@ + + +GOsa: Member List + + + + +

user Member List

This is the complete list of members for user, including all inherited members. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
academicTitle (defined in user)user
acl (defined in plugin)plugin
adapt_from_template($dn) (defined in plugin)plugin
attributes (defined in user)user
attrsplugin
base (defined in user)user
cert_dialog (defined in user)user
certificateSerialNumber (defined in user)user
check() (defined in user)user
cn (defined in user)user
departmentNumber (defined in user)user
dnplugin
employeeNumber (defined in user)user
employeeType (defined in user)user
execute()user
facsimileTelephoneNumber (defined in user)user
functionalTitle (defined in user)user
givenName (defined in plugin)plugin
gouvernmentOrganizationalPersonLocality (defined in user)user
gouvernmentOrganizationalUnit (defined in user)user
gouvernmentOrganizationalUnitDescription (defined in user)user
gouvernmentOrganizationalUnitSubjectArea (defined in user)user
homePhone (defined in user)user
homePostalAddress (defined in user)user
houseIdentifier (defined in user)user
is_accountplugin
is_templateplugin
ivbbLastDeliveryCollective (defined in user)user
jpegPhoto (defined in user)user
l (defined in user)user
labeledURI (defined in user)user
last_pw_storage (defined in user)user
mobile (defined in user)user
o (defined in user)user
objectclasses (defined in user)user
old_certificateSerialNumber (defined in user)user
old_jpegPhoto (defined in user)user
old_photoData (defined in user)user
old_userCertificate (defined in user)user
old_userPKCS12 (defined in user)user
old_userSMIMECertificate (defined in user)user
ou (defined in user)user
pager (defined in user)user
parentplugin
password_change_needed() (defined in plugin)plugin
personalTitle (defined in user)user
photoData (defined in user)user
picture_dialog (defined in user)user
plugin($dn=NULL)plugin
postalAddress (defined in user)user
postalCode (defined in user)user
publicVisible (defined in user)user
pw_storage (defined in user)user
remove_from_parent() (defined in user)user
role (defined in user)user
roomNumber (defined in user)user
save() (defined in user)user
save_object() (defined in user)user
sn (defined in plugin)plugin
st (defined in user)user
street (defined in user)user
telephoneNumber (defined in user)user
uid (defined in plugin)plugin
user($dn=NULL) (defined in user)user
userCertificate (defined in user)user
userPKCS12 (defined in user)user
userSMIMECertificate (defined in user)user
vocation (defined in user)user

Generated on Sat Jul 26 18:32:23 2003 for GOsa by + +doxygen +1.3.2
+ + diff --git a/doc/html/classuser.html b/doc/html/classuser.html new file mode 100644 index 000000000..38102e886 --- /dev/null +++ b/doc/html/classuser.html @@ -0,0 +1,271 @@ + + +GOsa: user class Reference + + + + +

user Class Reference

user plugin +More... +

+

Inheritance diagram for user: +

+ +plugin + +List of all members. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Public Member Functions

user ($dn=NULL)
 execute ()
 execute plugin

remove_from_parent ()
save_object ()
save ()
check ()

Public Attributes

base = ""
cn = ""
personalTitle = ""
academicTitle = ""
homePostalAddress = ""
homePhone = ""
labeledURI = ""
o = ""
ou = ""
departmentNumber = ""
employeeNumber = ""
employeeType = ""
roomNumber = ""
telephoneNumber = ""
facsimileTelephoneNumber = ""
mobile = ""
pager = ""
l = ""
st = ""
postalAddress = ""
jpegPhoto = "*removed*"
photoData = ""
old_jpegPhoto = ""
old_photoData = ""
cert_dialog = FALSE
picture_dialog = FALSE
userPKCS12 = ""
userSMIMECertificate = ""
userCertificate = ""
certificateSerialNumber = ""
old_certificateSerialNumber = ""
old_userPKCS12 = ""
old_userSMIMECertificate = ""
old_userCertificate = ""
gouvernmentOrganizationalUnit = ""
houseIdentifier = ""
street = ""
postalCode = ""
vocation = ""
ivbbLastDeliveryCollective = ""
gouvernmentOrganizationalPersonLocality = ""
gouvernmentOrganizationalUnitDescription = ""
gouvernmentOrganizationalUnitSubjectArea = ""
functionalTitle = ""
role = ""
publicVisible = ""
pw_storage = "crypt"
last_pw_storage = "crypt"
 attributes
objectclasses = array("person", "organizationalPerson", "inetOrgPerson", "gosaAccount")
+

Detailed Description

+user plugin +

+

Author:
Cajus Pollmeier <pollmeier@gonicus.de>
+
Version:
2.00
+
Date:
24.07.2003
+This class provides the functionality to read and write all attributes relevant for person, organizationalPerson, inetOrgPerson and gosaAccount from/to the LDAP. It does syntax checking and displays the formulars required. +

+


Member Function Documentation

+

+ + + + +
+ + + + + + + + + +
user::execute  ) 
+
+ + + + + +
+   + + +

+execute plugin +

+Generates the html output for this node +

+Reimplemented from plugin.

+


Member Data Documentation

+

+ + + + +
+ + +
user::attributes +
+
+ + + + + +
+   + + +

+Initial value:

 array("sn", "givenName", "uid", "personalTitle", "academicTitle",
+        "homePostalAddress", "homePhone", "labeledURI", "o", "ou",
+        "departmentNumber", "employeeNumber", "employeeType", "l", "st",
+        "roomNumber", "telephoneNumber", "mobile", "pager", "cn", "userPKCS12",
+        "postalAddress", "facsimileTelephoneNumber", "userSMIMECertificate",
+        "gouvernmentOrganizationalUnit", "houseIdentifier", "vocation",
+        "ivbbLastDeliveryCollective", "gouvernmentOrganizationalPersonLocality",
+        "gouvernmentOrganizationalUnitDescription", "postalCode", "street",
+        "gouvernmentOrganizationalUnitSubjectArea", "functionalTitle",
+        "role", "certificateSerialNumber", "publicVisible")
+
+

+Reimplemented from plugin.

+


The documentation for this class was generated from the following file:
    +
  • class_user.inc
+
Generated on Sat Jul 26 18:32:23 2003 for GOsa by + +doxygen +1.3.2
+ + diff --git a/doc/html/classuser.png b/doc/html/classuser.png new file mode 100644 index 0000000000000000000000000000000000000000..354ba28601d56acb3c0394d47e9e32ae0b9f0adf GIT binary patch literal 275 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 + +GOsa: Compound Member Index + + + + + + +

+Here is a list of all documented class members with links to the class documentation for each member:

+
Generated on Sat Jul 26 18:32:23 2003 for GOsa by + +doxygen +1.3.2
+ + diff --git a/doc/html/functions_func.html b/doc/html/functions_func.html new file mode 100644 index 000000000..dfcacf4e3 --- /dev/null +++ b/doc/html/functions_func.html @@ -0,0 +1,20 @@ + + +GOsa: Compound Member Index + + + + + + +

+

+
Generated on Sat Jul 26 18:32:23 2003 for GOsa by + +doxygen +1.3.2
+ + diff --git a/doc/html/functions_vars.html b/doc/html/functions_vars.html new file mode 100644 index 000000000..808b44df6 --- /dev/null +++ b/doc/html/functions_vars.html @@ -0,0 +1,23 @@ + + +GOsa: Compound Member Index + + + + + + +

+

+
Generated on Sat Jul 26 18:32:23 2003 for GOsa by + +doxygen +1.3.2
+ + diff --git a/doc/html/hierarchy.html b/doc/html/hierarchy.html new file mode 100644 index 000000000..8ae523380 --- /dev/null +++ b/doc/html/hierarchy.html @@ -0,0 +1,21 @@ + + +GOsa: Hierarchical Index + + + + +

GOsa Class Hierarchy

This inheritance list is sorted roughly, but not completely, alphabetically:
    +
  • acl
  • appGroup
  • application
  • blocklist
  • department
  • faxAccount
  • group
  • LDAP
  • link_info
  • plugin + +
  • pluginfo
  • proxyAccount
  • pureftpAccount
  • sambaAccount
  • server
  • userinfo
+
Generated on Sat Jul 26 18:32:22 2003 for GOsa by + +doxygen +1.3.2
+ + diff --git a/doc/html/index.html b/doc/html/index.html new file mode 100644 index 000000000..fa64b4cdf --- /dev/null +++ b/doc/html/index.html @@ -0,0 +1,15 @@ + + +GOsa: Main Page + + + + +

GOsa Documentation

+

+

2.00


Generated on Sat Jul 26 18:32:22 2003 for GOsa by + +doxygen +1.3.2
+ + diff --git a/doc/latex/Makefile b/doc/latex/Makefile new file mode 100644 index 000000000..e270675d5 --- /dev/null +++ b/doc/latex/Makefile @@ -0,0 +1,39 @@ +all: refman.dvi + +ps: refman.ps + +pdf: refman.pdf + +ps_2on1: refman_2on1.ps + +pdf_2on1: refman_2on1.pdf + +refman.ps: refman.dvi + dvips -o refman.ps refman.dvi + +refman.pdf: refman.ps + ps2pdf refman.ps refman.pdf + +refman.dvi: refman.tex doxygen.sty + echo "Running latex..." + latex refman.tex + echo "Running makeindex..." + makeindex refman.idx + echo "Rerunning latex...." + latex refman.tex + latex_count=5 ; \ + while egrep -s 'Rerun (LaTeX|to get cross-references right)' refman.log && [ $$latex_count -gt 0 ] ;\ + do \ + echo "Rerunning latex...." ;\ + latex refman.tex ;\ + latex_count=`expr $$latex_count - 1` ;\ + done + +refman_2on1.ps: refman.ps + psnup -2 refman.ps >refman_2on1.ps + +refman_2on1.pdf: refman_2on1.ps + ps2pdf refman_2on1.ps refman_2on1.pdf + +clean: + rm -f *.ps *.dvi *.aux *.toc *.idx *.ind *.ilg *.log *.out diff --git a/doc/latex/annotated.tex b/doc/latex/annotated.tex new file mode 100644 index 000000000..c23411486 --- /dev/null +++ b/doc/latex/annotated.tex @@ -0,0 +1,7 @@ +\section{GOsa Compound List} +Here are the classes, structs, unions and interfaces with brief descriptions:\begin{CompactList} +\item\contentsline{section}{{\bf mail\-Account} (Mail plugin )}{\pageref{classmailAccount}}{} +\item\contentsline{section}{{\bf plugin} (The plugin base class )}{\pageref{classplugin}}{} +\item\contentsline{section}{{\bf posix\-Account} (Posix\-Account plugin )}{\pageref{classposixAccount}}{} +\item\contentsline{section}{{\bf user} (User plugin )}{\pageref{classuser}}{} +\end{CompactList} diff --git a/doc/latex/classmailAccount.eps b/doc/latex/classmailAccount.eps new file mode 100644 index 000000000..f5f4b24da --- /dev/null +++ b/doc/latex/classmailAccount.eps @@ -0,0 +1,197 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 449.438 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 1.1125 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 2 def +/cols 1 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(mailAccount) cw +(plugin) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (mailAccount) 0 0 box + (plugin) 0 1 box + +% ----- relations ----- + +solid +0 0 0 out +solid +1 0 1 in diff --git a/doc/latex/classmailAccount.tex b/doc/latex/classmailAccount.tex new file mode 100644 index 000000000..9c117d918 --- /dev/null +++ b/doc/latex/classmailAccount.tex @@ -0,0 +1,175 @@ +\section{mail\-Account Class Reference} +\label{classmailAccount}\index{mailAccount@{mailAccount}} +mail plugin + + +Inheritance diagram for mail\-Account::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=2cm]{classmailAccount} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +{\bf mail\-Account} (\${\bf dn}=NULL, \$shared\_\-folder=FALSE)\label{classmailAccount_a0} + +\item +{\bf get\-Imap\-Attributes} ()\label{classmailAccount_a1} + +\item +{\bf set\-Imap\-Attributes} ()\label{classmailAccount_a2} + +\item +{\bf set\-Sieve\-Attributes} ()\label{classmailAccount_a3} + +\item +{\bf execute} () +\begin{CompactList}\small\item\em execute plugin \item\end{CompactList}\item +{\bf remove\_\-from\_\-parent} ()\label{classmailAccount_a5} + +\item +{\bf save\_\-object} ()\label{classmailAccount_a6} + +\item +{\bf save} ()\label{classmailAccount_a7} + +\item +{\bf check} ()\label{classmailAccount_a8} + +\item +{\bf adapt\_\-from\_\-template} (\${\bf dn})\label{classmailAccount_a9} + +\item +{\bf add\-Forwarder} (\$address)\label{classmailAccount_a10} + +\item +{\bf del\-Forwarder} (\$addresses)\label{classmailAccount_a11} + +\item +{\bf add\-Alternate} (\$address)\label{classmailAccount_a12} + +\item +{\bf del\-Alternate} (\$addresses)\label{classmailAccount_a13} + +\end{CompactItemize} +\subsection*{Public Attributes} +\begin{CompactItemize} +\item +{\bf mail} = \char`\"{}\char`\"{}\label{classmailAccount_o0} + +\item +{\bf gosa\-Mail\-Alternate\-Address} = array()\label{classmailAccount_o1} + +\item +{\bf gosa\-Mail\-Forwarding\-Address} = array()\label{classmailAccount_o2} + +\item +{\bf gosa\-Mail\-Delivery\-Mode} = \char`\"{}[L ]\char`\"{}\label{classmailAccount_o3} + +\item +{\bf gosa\-Mail\-Server} = \char`\"{}\char`\"{}\label{classmailAccount_o4} + +\item +{\bf gosa\-Mail\-Quota} = \char`\"{}\char`\"{}\label{classmailAccount_o5} + +\item +{\bf gosa\-Mail\-Max\-Size} = \char`\"{}\char`\"{}\label{classmailAccount_o6} + +\item +{\bf gosa\-Vacation\-Message} = \char`\"{}\char`\"{}\label{classmailAccount_o7} + +\item +{\bf gosa\-Spam\-Sort\-Level} = \char`\"{}\char`\"{}\label{classmailAccount_o8} + +\item +{\bf gosa\-Spam\-Mailbox} = \char`\"{}\char`\"{}\label{classmailAccount_o9} + +\item +{\bf quota\-Usage} = 0\label{classmailAccount_o10} + +\item +{\bf forward\_\-dialog} = FALSE\label{classmailAccount_o11} + +\item +{\bf folder\_\-prefix} = \char`\"{}\char`\"{}\label{classmailAccount_o12} + +\item +{\bf mailbox\-List} = array()\label{classmailAccount_o13} + +\item +{\bf default\_\-permissions} = \char`\"{}none\char`\"{}\label{classmailAccount_o14} + +\item +{\bf member\_\-permissions} = \char`\"{}post\char`\"{}\label{classmailAccount_o15} + +\item +{\bf members} = array()\label{classmailAccount_o16} + +\item +{\bf admins} = array()\label{classmailAccount_o17} + +\item +{\bf perms} +\item +{\bf attributes} +\item +{\bf objectclasses} = array(\char`\"{}gosa\-Mail\-Account\char`\"{})\label{classmailAccount_o20} + +\end{CompactItemize} + + +\subsection{Detailed Description} +mail plugin + +\begin{Desc} +\item[Author:]Cajus Pollmeier $<${\tt pollmeier@gonicus.de}$>$ \end{Desc} +\begin{Desc} +\item[Version:]2.00 \end{Desc} +\begin{Desc} +\item[Date:]24.07.2003\end{Desc} +This class provides the functionality to read and write all attributes relevant for gosa\-Mail\-Accounts from/to the LDAP. It does syntax checking and displays the formulars required. + + + +\subsection{Member Function Documentation} +\index{mailAccount@{mail\-Account}!execute@{execute}} +\index{execute@{execute}!mailAccount@{mail\-Account}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}mail\-Account::execute ()}\label{classmailAccount_a4} + + +execute plugin + +Generates the html output for this node + +Reimplemented from {\bf plugin} {\rm (p.\,\pageref{classplugin_a1})}. + +\subsection{Member Data Documentation} +\index{mailAccount@{mail\-Account}!attributes@{attributes}} +\index{attributes@{attributes}!mailAccount@{mail\-Account}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}mail\-Account::attributes}\label{classmailAccount_o19} + + +{\bf Initial value:} + +\footnotesize\begin{verbatim} array("mail", "gosaMailServer", "gosaMailQuota", "gosaMailMaxSize", + "gosaMailDeliveryMode", "gosaSpamSortLevel", "gosaSpamMailbox", + "gosaVacationMessage", "uid") +\end{verbatim}\normalsize + + +Reimplemented from {\bf plugin} {\rm (p.\,\pageref{classplugin})}.\index{mailAccount@{mail\-Account}!perms@{perms}} +\index{perms@{perms}!mailAccount@{mail\-Account}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}mail\-Account::perms}\label{classmailAccount_o18} + + +{\bf Initial value:} + +\footnotesize\begin{verbatim} array( "lrs" => "read", "lrsp" => "post", "lrsip" => "append", + "lrswipcd" => "write", "lrswipcda" => "all" ) +\end{verbatim}\normalsize + + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +class\_\-mail\-Account.inc\end{CompactItemize} diff --git a/doc/latex/classplugin.eps b/doc/latex/classplugin.eps new file mode 100644 index 000000000..69febded0 --- /dev/null +++ b/doc/latex/classplugin.eps @@ -0,0 +1,207 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 138.889 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 3.6 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 2 def +/cols 3 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(plugin) cw +(mailAccount) cw +(posixAccount) cw +(user) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (plugin) 1 1 box + (mailAccount) 0 0 box + (posixAccount) 1 0 box + (user) 2 0 box + +% ----- relations ----- + +solid +1 1 0.25 out +solid +0 2 1 conn +solid +0 0 0.75 in +solid +0 1 0.75 in +solid +0 2 0.75 in diff --git a/doc/latex/classplugin.tex b/doc/latex/classplugin.tex new file mode 100644 index 000000000..6bbdbd72c --- /dev/null +++ b/doc/latex/classplugin.tex @@ -0,0 +1,166 @@ +\section{plugin Class Reference} +\label{classplugin}\index{plugin@{plugin}} +The plugin base class. + + +Inheritance diagram for plugin::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=2cm]{classplugin} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +{\bf plugin} (\${\bf dn}=NULL) +\begin{CompactList}\small\item\em plugin constructor \item\end{CompactList}\item +{\bf execute} () +\begin{CompactList}\small\item\em execute plugin \item\end{CompactList}\item +{\bf remove\_\-from\_\-parent} ()\label{classplugin_a2} + +\item +{\bf save\_\-object} ()\label{classplugin_a3} + +\item +{\bf save} ()\label{classplugin_a4} + +\item +{\bf check} ()\label{classplugin_a5} + +\item +{\bf adapt\_\-from\_\-template} (\${\bf dn})\label{classplugin_a6} + +\item +{\bf password\_\-change\_\-needed} ()\label{classplugin_a7} + +\end{CompactItemize} +\subsection*{Public Attributes} +\begin{CompactItemize} +\item +{\bf parent} = NULL +\begin{CompactList}\small\item\em Reference to parent object. \item\end{CompactList}\item +{\bf is\_\-account} = FALSE +\begin{CompactList}\small\item\em Mark plugin as account. \item\end{CompactList}\item +{\bf is\_\-template} = FALSE +\begin{CompactList}\small\item\em Mark plugin as template. \item\end{CompactList}\item +{\bf attrs} = array() +\begin{CompactList}\small\item\em Represent temporary LDAP data. \item\end{CompactList}\item +{\bf dn} = \char`\"{}\char`\"{} +\begin{CompactList}\small\item\em Used standard values. \item\end{CompactList}\item +{\bf uid} = \char`\"{}\char`\"{}\label{classplugin_o5} + +\item +{\bf sn} = \char`\"{}\char`\"{}\label{classplugin_o6} + +\item +{\bf given\-Name} = \char`\"{}\char`\"{}\label{classplugin_o7} + +\item +{\bf acl} = \char`\"{}$\ast$none$\ast$\char`\"{}\label{classplugin_o8} + +\item +{\bf attributes} = array()\label{classplugin_o9} + +\item +{\bf objectclasses} = array()\label{classplugin_o10} + +\end{CompactItemize} + + +\subsection{Detailed Description} +The plugin base class. + +\begin{Desc} +\item[Author:]Cajus Pollmeier $<${\tt pollmeier@gonicus.de}$>$ \end{Desc} +\begin{Desc} +\item[Version:]2.00 \end{Desc} +\begin{Desc} +\item[Date:]24.07.2003\end{Desc} +This is the base class for all plugins. It can be used standalone or can be included by the tabs class. All management should be done within this class. Extend your plugins from this class. + + + +\subsection{Constructor \& Destructor Documentation} +\index{plugin@{plugin}!plugin@{plugin}} +\index{plugin@{plugin}!plugin@{plugin}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}plugin::plugin (\$ {\em dn} = NULL)}\label{classplugin_a0} + + +plugin constructor + +If 'dn' is set, the node loads the given 'dn' from LDAP + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em dn}]Distinguished name to initialize plugin from \end{description} +\end{Desc} +\begin{Desc} +\item[See also:]{\bf plugin()} \end{Desc} + + +\subsection{Member Function Documentation} +\index{plugin@{plugin}!execute@{execute}} +\index{execute@{execute}!plugin@{plugin}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}plugin::execute ()}\label{classplugin_a1} + + +execute plugin + +Generates the html output for this node + +Reimplemented in {\bf mail\-Account} {\rm (p.\,\pageref{classmailAccount_a4})}, {\bf posix\-Account} {\rm (p.\,\pageref{classposixAccount_a1})}, and {\bf user} {\rm (p.\,\pageref{classuser_a1})}. + +\subsection{Member Data Documentation} +\index{plugin@{plugin}!attrs@{attrs}} +\index{attrs@{attrs}!plugin@{plugin}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}{\bf plugin::attrs} = array()}\label{classplugin_o3} + + +Represent temporary LDAP data. + +This is only used internally. \index{plugin@{plugin}!dn@{dn}} +\index{dn@{dn}!plugin@{plugin}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}{\bf plugin::dn} = \char`\"{}\char`\"{}}\label{classplugin_o4} + + +Used standard values. + +dn \index{plugin@{plugin}!is_account@{is\_\-account}} +\index{is_account@{is\_\-account}!plugin@{plugin}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}{\bf plugin::is\_\-account} = FALSE}\label{classplugin_o1} + + +Mark plugin as account. + +Defines whether this plugin is defined as an account or not. This has consequences for the plugin to be saved from tab mode. If it is set to 'FALSE' the tab will call the delete function, else the save function. Should be set to 'TRUE' if the construtor detects a valid LDAP object. + +\begin{Desc} +\item[See also:]{\bf plugin::plugin()} \end{Desc} +\index{plugin@{plugin}!is_template@{is\_\-template}} +\index{is_template@{is\_\-template}!plugin@{plugin}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}{\bf plugin::is\_\-template} = FALSE}\label{classplugin_o2} + + +Mark plugin as template. + +Defines whether we are creating a template or a normal object. Has conseqences on the way {\bf execute()} shows the formular and how save() puts the data to LDAP. + +\begin{Desc} +\item[See also:]plugin::save() {\bf plugin::execute()} \end{Desc} +\index{plugin@{plugin}!parent@{parent}} +\index{parent@{parent}!plugin@{plugin}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}{\bf plugin::parent} = NULL}\label{classplugin_o0} + + +Reference to parent object. + +This variable is used when the plugin is included in tabs and keeps reference to the tab class. Communication to other tabs is possible by 'name'. So the 'fax' plugin can ask the 'userinfo' plugin for the fax number. + +\begin{Desc} +\item[See also:]tab \end{Desc} + + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +plugin.inc\end{CompactItemize} diff --git a/doc/latex/classposixAccount.eps b/doc/latex/classposixAccount.eps new file mode 100644 index 000000000..f3dfa4897 --- /dev/null +++ b/doc/latex/classposixAccount.eps @@ -0,0 +1,197 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 416.667 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 1.2 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 2 def +/cols 1 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(posixAccount) cw +(plugin) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (posixAccount) 0 0 box + (plugin) 0 1 box + +% ----- relations ----- + +solid +0 0 0 out +solid +1 0 1 in diff --git a/doc/latex/classposixAccount.tex b/doc/latex/classposixAccount.tex new file mode 100644 index 000000000..f98242f1c --- /dev/null +++ b/doc/latex/classposixAccount.tex @@ -0,0 +1,184 @@ +\section{posix\-Account Class Reference} +\label{classposixAccount}\index{posixAccount@{posixAccount}} +posix\-Account plugin + + +Inheritance diagram for posix\-Account::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=2cm]{classposixAccount} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +{\bf posix\-Account} (\${\bf dn}=NULL)\label{classposixAccount_a0} + +\item +{\bf execute} () +\begin{CompactList}\small\item\em execute plugin \item\end{CompactList}\item +{\bf remove\_\-from\_\-parent} ()\label{classposixAccount_a2} + +\item +{\bf save\_\-object} ()\label{classposixAccount_a3} + +\item +{\bf save} ()\label{classposixAccount_a4} + +\item +{\bf check} ()\label{classposixAccount_a5} + +\item +{\bf add\-Group} (\$groups)\label{classposixAccount_a6} + +\item +{\bf del\-Group} (\$groups)\label{classposixAccount_a7} + +\item +{\bf adapt\_\-from\_\-template} (\${\bf dn})\label{classposixAccount_a8} + +\end{CompactItemize} +\subsection*{Public Attributes} +\begin{CompactItemize} +\item +{\bf home\-Directory} = \char`\"{}\char`\"{}\label{classposixAccount_o0} + +\item +{\bf login\-Shell} = \char`\"{}/bin/bash\char`\"{}\label{classposixAccount_o1} + +\item +{\bf uid\-Number} = \char`\"{}\char`\"{}\label{classposixAccount_o2} + +\item +{\bf gid\-Number} = \char`\"{}\char`\"{}\label{classposixAccount_o3} + +\item +{\bf gecos} = \char`\"{}\char`\"{}\label{classposixAccount_o4} + +\item +{\bf shadow\-Min} = \char`\"{}0\char`\"{}\label{classposixAccount_o5} + +\item +{\bf shadow\-Max} = \char`\"{}0\char`\"{}\label{classposixAccount_o6} + +\item +{\bf shadow\-Warning} = \char`\"{}0\char`\"{}\label{classposixAccount_o7} + +\item +{\bf shadow\-Last\-Change} = \char`\"{}0\char`\"{}\label{classposixAccount_o8} + +\item +{\bf shadow\-Inactive} = \char`\"{}0\char`\"{}\label{classposixAccount_o9} + +\item +{\bf shadow\-Expire} = \char`\"{}0\char`\"{}\label{classposixAccount_o10} + +\item +{\bf gosa\-Default\-Printer} = \char`\"{}\char`\"{}\label{classposixAccount_o11} + +\item +{\bf gosa\-Default\-Language} = \char`\"{}\char`\"{}\label{classposixAccount_o12} + +\item +{\bf gosa\-Host\-ACL} = array()\label{classposixAccount_o13} + +\item +{\bf status} = \char`\"{}\char`\"{}\label{classposixAccount_o14} + +\item +{\bf login\-Shell\-List} = array()\label{classposixAccount_o15} + +\item +{\bf group\-Membership} = array()\label{classposixAccount_o16} + +\item +{\bf saved\-Group\-Membership} = array()\label{classposixAccount_o17} + +\item +{\bf saved\-Uid\-Number} = \char`\"{}\char`\"{}\label{classposixAccount_o18} + +\item +{\bf saved\-Gid\-Number} = \char`\"{}\char`\"{}\label{classposixAccount_o19} + +\item +{\bf use\_\-shadow\-Min} = \char`\"{}0\char`\"{}\label{classposixAccount_o20} + +\item +{\bf use\_\-shadow\-Max} = \char`\"{}0\char`\"{}\label{classposixAccount_o21} + +\item +{\bf use\_\-shadow\-Warning} = \char`\"{}0\char`\"{}\label{classposixAccount_o22} + +\item +{\bf use\_\-shadow\-Inactive} = \char`\"{}0\char`\"{}\label{classposixAccount_o23} + +\item +{\bf use\_\-shadow\-Expire} = \char`\"{}0\char`\"{}\label{classposixAccount_o24} + +\item +{\bf must\_\-change\_\-password} = \char`\"{}0\char`\"{}\label{classposixAccount_o25} + +\item +{\bf force\_\-ids} = 0\label{classposixAccount_o26} + +\item +{\bf printer\-List} = array()\label{classposixAccount_o27} + +\item +{\bf group\_\-dialog} = FALSE\label{classposixAccount_o28} + +\item +{\bf hosts\_\-dialog} = FALSE\label{classposixAccount_o29} + +\item +{\bf attributes} +\item +{\bf objectclasses} = array(\char`\"{}posix\-Account\char`\"{}, \char`\"{}shadow\-Account\char`\"{})\label{classposixAccount_o31} + +\end{CompactItemize} + + +\subsection{Detailed Description} +posix\-Account plugin + +\begin{Desc} +\item[Author:]Cajus Pollmeier $<${\tt pollmeier@gonicus.de}$>$ \end{Desc} +\begin{Desc} +\item[Version:]2.00 \end{Desc} +\begin{Desc} +\item[Date:]24.07.2003\end{Desc} +This class provides the functionality to read and write all attributes relevant for posix\-Accounts and shadow\-Accounts from/to the LDAP. It does syntax checking and displays the formulars required. + + + +\subsection{Member Function Documentation} +\index{posixAccount@{posix\-Account}!execute@{execute}} +\index{execute@{execute}!posixAccount@{posix\-Account}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}posix\-Account::execute ()}\label{classposixAccount_a1} + + +execute plugin + +Generates the html output for this node + +Reimplemented from {\bf plugin} {\rm (p.\,\pageref{classplugin_a1})}. + +\subsection{Member Data Documentation} +\index{posixAccount@{posix\-Account}!attributes@{attributes}} +\index{attributes@{attributes}!posixAccount@{posix\-Account}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}posix\-Account::attributes}\label{classposixAccount_o30} + + +{\bf Initial value:} + +\footnotesize\begin{verbatim} array("homeDirectory", "loginShell", "uidNumber", "gidNumber", "gecos", + "shadowMin", "shadowMax", "shadowWarning", "shadowInactive", "shadowLastChange", + "shadowExpire", "gosaDefaultPrinter", "gosaDefaultLanguage", "uid") +\end{verbatim}\normalsize + + +Reimplemented from {\bf plugin} {\rm (p.\,\pageref{classplugin})}. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +class\_\-posix\-Account.inc\end{CompactItemize} diff --git a/doc/latex/classuser.eps b/doc/latex/classuser.eps new file mode 100644 index 000000000..20b76d201 --- /dev/null +++ b/doc/latex/classuser.eps @@ -0,0 +1,197 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 740.741 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 0.675 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 2 def +/cols 1 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(user) cw +(plugin) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (user) 0 0 box + (plugin) 0 1 box + +% ----- relations ----- + +solid +0 0 0 out +solid +1 0 1 in diff --git a/doc/latex/classuser.tex b/doc/latex/classuser.tex new file mode 100644 index 000000000..d2d7bdf06 --- /dev/null +++ b/doc/latex/classuser.tex @@ -0,0 +1,236 @@ +\section{user Class Reference} +\label{classuser}\index{user@{user}} +user plugin + + +Inheritance diagram for user::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=2cm]{classuser} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +{\bf user} (\${\bf dn}=NULL)\label{classuser_a0} + +\item +{\bf execute} () +\begin{CompactList}\small\item\em execute plugin \item\end{CompactList}\item +{\bf remove\_\-from\_\-parent} ()\label{classuser_a2} + +\item +{\bf save\_\-object} ()\label{classuser_a3} + +\item +{\bf save} ()\label{classuser_a4} + +\item +{\bf check} ()\label{classuser_a5} + +\end{CompactItemize} +\subsection*{Public Attributes} +\begin{CompactItemize} +\item +{\bf base} = \char`\"{}\char`\"{}\label{classuser_o0} + +\item +{\bf cn} = \char`\"{}\char`\"{}\label{classuser_o1} + +\item +{\bf personal\-Title} = \char`\"{}\char`\"{}\label{classuser_o2} + +\item +{\bf academic\-Title} = \char`\"{}\char`\"{}\label{classuser_o3} + +\item +{\bf home\-Postal\-Address} = \char`\"{}\char`\"{}\label{classuser_o4} + +\item +{\bf home\-Phone} = \char`\"{}\char`\"{}\label{classuser_o5} + +\item +{\bf labeled\-URI} = \char`\"{}\char`\"{}\label{classuser_o6} + +\item +{\bf o} = \char`\"{}\char`\"{}\label{classuser_o7} + +\item +{\bf ou} = \char`\"{}\char`\"{}\label{classuser_o8} + +\item +{\bf department\-Number} = \char`\"{}\char`\"{}\label{classuser_o9} + +\item +{\bf employee\-Number} = \char`\"{}\char`\"{}\label{classuser_o10} + +\item +{\bf employee\-Type} = \char`\"{}\char`\"{}\label{classuser_o11} + +\item +{\bf room\-Number} = \char`\"{}\char`\"{}\label{classuser_o12} + +\item +{\bf telephone\-Number} = \char`\"{}\char`\"{}\label{classuser_o13} + +\item +{\bf facsimile\-Telephone\-Number} = \char`\"{}\char`\"{}\label{classuser_o14} + +\item +{\bf mobile} = \char`\"{}\char`\"{}\label{classuser_o15} + +\item +{\bf pager} = \char`\"{}\char`\"{}\label{classuser_o16} + +\item +{\bf l} = \char`\"{}\char`\"{}\label{classuser_o17} + +\item +{\bf st} = \char`\"{}\char`\"{}\label{classuser_o18} + +\item +{\bf postal\-Address} = \char`\"{}\char`\"{}\label{classuser_o19} + +\item +{\bf jpeg\-Photo} = \char`\"{}$\ast$removed$\ast$\char`\"{}\label{classuser_o20} + +\item +{\bf photo\-Data} = \char`\"{}\char`\"{}\label{classuser_o21} + +\item +{\bf old\_\-jpeg\-Photo} = \char`\"{}\char`\"{}\label{classuser_o22} + +\item +{\bf old\_\-photo\-Data} = \char`\"{}\char`\"{}\label{classuser_o23} + +\item +{\bf cert\_\-dialog} = FALSE\label{classuser_o24} + +\item +{\bf picture\_\-dialog} = FALSE\label{classuser_o25} + +\item +{\bf user\-PKCS12} = \char`\"{}\char`\"{}\label{classuser_o26} + +\item +{\bf user\-SMIMECertificate} = \char`\"{}\char`\"{}\label{classuser_o27} + +\item +{\bf user\-Certificate} = \char`\"{}\char`\"{}\label{classuser_o28} + +\item +{\bf certificate\-Serial\-Number} = \char`\"{}\char`\"{}\label{classuser_o29} + +\item +{\bf old\_\-certificate\-Serial\-Number} = \char`\"{}\char`\"{}\label{classuser_o30} + +\item +{\bf old\_\-user\-PKCS12} = \char`\"{}\char`\"{}\label{classuser_o31} + +\item +{\bf old\_\-user\-SMIMECertificate} = \char`\"{}\char`\"{}\label{classuser_o32} + +\item +{\bf old\_\-user\-Certificate} = \char`\"{}\char`\"{}\label{classuser_o33} + +\item +{\bf gouvernment\-Organizational\-Unit} = \char`\"{}\char`\"{}\label{classuser_o34} + +\item +{\bf house\-Identifier} = \char`\"{}\char`\"{}\label{classuser_o35} + +\item +{\bf street} = \char`\"{}\char`\"{}\label{classuser_o36} + +\item +{\bf postal\-Code} = \char`\"{}\char`\"{}\label{classuser_o37} + +\item +{\bf vocation} = \char`\"{}\char`\"{}\label{classuser_o38} + +\item +{\bf ivbb\-Last\-Delivery\-Collective} = \char`\"{}\char`\"{}\label{classuser_o39} + +\item +{\bf gouvernment\-Organizational\-Person\-Locality} = \char`\"{}\char`\"{}\label{classuser_o40} + +\item +{\bf gouvernment\-Organizational\-Unit\-Description} = \char`\"{}\char`\"{}\label{classuser_o41} + +\item +{\bf gouvernment\-Organizational\-Unit\-Subject\-Area} = \char`\"{}\char`\"{}\label{classuser_o42} + +\item +{\bf functional\-Title} = \char`\"{}\char`\"{}\label{classuser_o43} + +\item +{\bf role} = \char`\"{}\char`\"{}\label{classuser_o44} + +\item +{\bf public\-Visible} = \char`\"{}\char`\"{}\label{classuser_o45} + +\item +{\bf pw\_\-storage} = \char`\"{}crypt\char`\"{}\label{classuser_o46} + +\item +{\bf last\_\-pw\_\-storage} = \char`\"{}crypt\char`\"{}\label{classuser_o47} + +\item +{\bf attributes} +\item +{\bf objectclasses} = array(\char`\"{}person\char`\"{}, \char`\"{}organizational\-Person\char`\"{}, \char`\"{}inet\-Org\-Person\char`\"{}, \char`\"{}gosa\-Account\char`\"{})\label{classuser_o49} + +\end{CompactItemize} + + +\subsection{Detailed Description} +user plugin + +\begin{Desc} +\item[Author:]Cajus Pollmeier $<${\tt pollmeier@gonicus.de}$>$ \end{Desc} +\begin{Desc} +\item[Version:]2.00 \end{Desc} +\begin{Desc} +\item[Date:]24.07.2003\end{Desc} +This class provides the functionality to read and write all attributes relevant for person, organizational\-Person, inet\-Org\-Person and gosa\-Account from/to the LDAP. It does syntax checking and displays the formulars required. + + + +\subsection{Member Function Documentation} +\index{user@{user}!execute@{execute}} +\index{execute@{execute}!user@{user}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}user::execute ()}\label{classuser_a1} + + +execute plugin + +Generates the html output for this node + +Reimplemented from {\bf plugin} {\rm (p.\,\pageref{classplugin_a1})}. + +\subsection{Member Data Documentation} +\index{user@{user}!attributes@{attributes}} +\index{attributes@{attributes}!user@{user}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}user::attributes}\label{classuser_o48} + + +{\bf Initial value:} + +\footnotesize\begin{verbatim} array("sn", "givenName", "uid", "personalTitle", "academicTitle", + "homePostalAddress", "homePhone", "labeledURI", "o", "ou", + "departmentNumber", "employeeNumber", "employeeType", "l", "st", + "roomNumber", "telephoneNumber", "mobile", "pager", "cn", "userPKCS12", + "postalAddress", "facsimileTelephoneNumber", "userSMIMECertificate", + "gouvernmentOrganizationalUnit", "houseIdentifier", "vocation", + "ivbbLastDeliveryCollective", "gouvernmentOrganizationalPersonLocality", + "gouvernmentOrganizationalUnitDescription", "postalCode", "street", + "gouvernmentOrganizationalUnitSubjectArea", "functionalTitle", + "role", "certificateSerialNumber", "publicVisible") +\end{verbatim}\normalsize + + +Reimplemented from {\bf plugin} {\rm (p.\,\pageref{classplugin})}. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +class\_\-user.inc\end{CompactItemize} diff --git a/doc/latex/doxygen.sty b/doc/latex/doxygen.sty new file mode 100644 index 000000000..5c9ef7eca --- /dev/null +++ b/doc/latex/doxygen.sty @@ -0,0 +1,65 @@ +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{doxygen} +\RequirePackage{calc} +\RequirePackage{array} +\pagestyle{fancyplain} +\addtolength{\headwidth}{\marginparsep} +\addtolength{\headwidth}{\marginparwidth} +\newcommand{\clearemptydoublepage}{\newpage{\pagestyle{empty}\cleardoublepage}} +\renewcommand{\chaptermark}[1]{\markboth{#1}{}} +\renewcommand{\sectionmark}[1]{\markright{\thesection\ #1}} +\lhead[\fancyplain{}{\bfseries\thepage}] + {\fancyplain{}{\bfseries\rightmark}} +\rhead[\fancyplain{}{\bfseries\leftmark}] + {\fancyplain{}{\bfseries\thepage}} +\rfoot[\fancyplain{}{\bfseries\scriptsize Generated on Sat Jul 26 18:32:23 2003 for GOsa by Doxygen }]{} +\lfoot[]{\fancyplain{}{\bfseries\scriptsize Generated on Sat Jul 26 18:32:23 2003 for GOsa by Doxygen }} +\cfoot{} +\newenvironment{CompactList} +{\begin{list}{}{ + \setlength{\leftmargin}{0.5cm} + \setlength{\itemsep}{0pt} + \setlength{\parsep}{0pt} + \setlength{\topsep}{0pt} + \renewcommand{\makelabel}{}}} +{\end{list}} +\newenvironment{CompactItemize} +{ + \begin{itemize} + \setlength{\itemsep}{-3pt} + \setlength{\parsep}{0pt} + \setlength{\topsep}{0pt} + \setlength{\partopsep}{0pt} +} +{\end{itemize}} +\newcommand{\PBS}[1]{\let\temp=\\#1\let\\=\temp} +\newlength{\tmplength} +\newenvironment{TabularC}[1] +{ +\setlength{\tmplength} + {\linewidth/(#1)-\tabcolsep*2-\arrayrulewidth*(#1+1)/(#1)} + \par\begin{tabular*}{\linewidth} + {*{#1}{|>{\PBS\raggedright\hspace{0pt}}p{\the\tmplength}}|} +} +{\end{tabular*}\par} +\newcommand{\entrylabel}[1]{ + {\parbox[b]{\labelwidth-4pt}{\makebox[0pt][l]{\textbf{#1}}\\}}} +\newenvironment{Desc} +{\begin{list}{} + { + \settowidth{\labelwidth}{40pt} + \setlength{\leftmargin}{\labelwidth} + \setlength{\parsep}{0pt} + \setlength{\itemsep}{-4pt} + \renewcommand{\makelabel}{\entrylabel} + } +} +{\end{list}} +\newenvironment{Indent} + {\begin{list}{}{\setlength{\leftmargin}{0.5cm}} + \item[]\ignorespaces} + {\unskip\end{list}} +\setlength{\parindent}{0cm} +\setlength{\parskip}{0.2cm} +\addtocounter{secnumdepth}{1} +\sloppy diff --git a/doc/latex/hierarchy.tex b/doc/latex/hierarchy.tex new file mode 100644 index 000000000..2ca698880 --- /dev/null +++ b/doc/latex/hierarchy.tex @@ -0,0 +1,9 @@ +\section{GOsa Class Hierarchy} +This inheritance list is sorted roughly, but not completely, alphabetically:\begin{CompactList} +\item acl\item app\-Group\item application\item blocklist\item department\item fax\-Account\item group\item LDAP\item link\_\-info\item \contentsline{section}{plugin}{\pageref{classplugin}}{} +\begin{CompactList} +\item \contentsline{section}{mail\-Account}{\pageref{classmailAccount}}{} +\item \contentsline{section}{posix\-Account}{\pageref{classposixAccount}}{} +\item \contentsline{section}{user}{\pageref{classuser}}{} +\end{CompactList} +\item pluginfo\item proxy\-Account\item pureftp\-Account\item samba\-Account\item server\item userinfo\end{CompactList} diff --git a/doc/latex/refman.tex b/doc/latex/refman.tex new file mode 100644 index 000000000..bcae22222 --- /dev/null +++ b/doc/latex/refman.tex @@ -0,0 +1,40 @@ +\documentclass[a4paper]{book} +\usepackage{a4wide} +\usepackage{makeidx} +\usepackage{fancyhdr} +\usepackage{graphicx} +\usepackage{multicol} +\usepackage{float} +\usepackage{textcomp} +\usepackage{alltt} +\usepackage{doxygen} +\makeindex +\setcounter{tocdepth}{1} +\renewcommand{\footrulewidth}{0.4pt} +\begin{document} +\begin{titlepage} +\vspace*{7cm} +\begin{center} +{\Large GOsa Reference Manual\\[1ex]\large 2.00 }\\ +\vspace*{1cm} +{\large Generated by Doxygen 1.3.2}\\ +\vspace*{0.5cm} +{\small Sat Jul 26 18:32:22 2003}\\ +\end{center} +\end{titlepage} +\clearemptydoublepage +\pagenumbering{roman} +\tableofcontents +\clearemptydoublepage +\pagenumbering{arabic} +\chapter{GOsa Hierarchical Index} +\input{hierarchy} +\chapter{GOsa Compound Index} +\input{annotated} +\chapter{GOsa Class Documentation} +\input{classmailAccount} +\include{classplugin} +\include{classposixAccount} +\include{classuser} +\printindex +\end{document} diff --git a/gen_locale.sh b/gen_locale.sh new file mode 100755 index 000000000..77c733109 --- /dev/null +++ b/gen_locale.sh @@ -0,0 +1,108 @@ +#!/bin/sh + +ORIG=`pwd` +TEMPDIR="/tmp/gosa-locale" + +echo +echo "Creating temporary directory..." +[ -d $TEMPDIR ] && rm -rf $TEMPDIR +mkdir $TEMPDIR + +echo "Creating copy of GOsa..." +tar c . | tar x -C $TEMPDIR + +echo -n "Converting .tpl files: " +pushd . &> /dev/null +cd $TEMPDIR + +for template in $(find -name '*.tpl'); do + echo -en "\rConverting .tpl files: $(basename $template) \r" + sed -e 's/{t}/!g' $template > $template.new + mv $template.new $template +done + +for class in $(find -name 'class_*.inc'); do + echo -en "\rConverting .tpl files: $(basename $template) \r" + sed -e 's/\($pl[DH][^=]*\)= *"\([^"]*\)";$/\1= _("\2");/g' $class > $class.new + mv $class.new $class +done +echo -e "\rConverting .tpl files: done " + +echo "Converting strings from gosa.conf..." +sed -e 's/headline="\([^"]*\)"//g;s/name="\([^"]*\)"//g' contrib/gosa.conf > contrib/gosa.conf.new +mv contrib/gosa.conf.new contrib/gosa.conf + +echo "Extracting languages..." +rm locale/messages.po +(echo contrib/gosa.conf; find . -name '*.[ctpi][ophn][nlpc]') | xgettext -f - --omit-header --keyword=must -d Domain -L PHP -n -o locale/messages.po + +echo "Merging po files with existing ones:" +error=0 +for f in locale/??/LC_MESSAGES; do + echo -n "* merging $f/messages.po: " + msgmerge $f/messages.po locale/messages.po --output-file=$f/messages.po.new &> /dev/null + + if [ $? -eq 0 ]; then + echo "done"; + else + echo "failed"; + error=1 + fi + +done + +echo "Copying new po files, making backups:" +find . -name messages.po | while read f; do + + if [ -f $ORIG/$f ]; then + mv $ORIG/$f $ORIG/$f.orig + else + echo "! skipped $ORIG/$f because of errors during the conversation" + error=1 + continue + fi + + echo $f | grep -q "locale/messages.po" + if [ $? -ne 0 ]; then + echo "* replaced $ORIG/$f" + cp $f.new $ORIG/$f + else + cp $f $ORIG/$f + fi + +done + +rm -rf $TEMPDIR + +echo +if [ $error -eq 0 ]; then + read -p "Do you want to erase the message.po.orig files? (y/n)" -n1 ans + + if [ "$ans" == "y" -o "$ans" == "Y" ]; then + find $ORIG -type f -name 'messages.po.orig' -exec rm -f {} \; + fi + +else + echo "There were errors during the transition. Please fix!" + exit 1 +fi + +cat << EOF + +--------------------------------------------------------------------- + +Now edit all files that have been replaced above (i.e. using kbabel) +and mail the changes to gosa@oss.gonicus.de to be included in the +next release. + +To see the changes you've made in GOsa, run "msgfmt messages.po" on +your freshly edited files and restart your apache after that. Set +the webbrowser to the language you've edited and go back to the +login screen. + +--------------------------------------------------------------------- +EOF + +popd &> /dev/null + +# vim:tabstop=2:expandtab:shiftwidth=2:syntax:ruler: diff --git a/html/combine.php b/html/combine.php new file mode 100644 index 000000000..9564c3f91 --- /dev/null +++ b/html/combine.php @@ -0,0 +1,66 @@ + diff --git a/html/favicon.ico b/html/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..3189acff470c51da2ea3bf8f77d56098ecc1df1e GIT binary patch literal 1406 zcmeHEI}XAy6mv=JF+tM0L;uBflq_&BwfnJhVrVs+J1gkl>&j!IKp*G zz>es^BWceQuw@61!LL=zIph4gVR~F~neTYc@0F(u{Ra9C{ND|vFEwmjZBiI}6=DGk zA5w}7Nr|wo+b3KFnV78@ci|dqktxwut6Gf3Dk!fgceSp7Lao_odata['SERVERS']['FAX']; +$link = mysql_pconnect($cfg['SERVER'], $cfg['LOGIN'], $cfg['PASSWORD']) + or die(_("Could not connect to database server!")); + +mysql_select_db("gofax") or die(_("Could not select database!")); + + +/* Permission to view? */ +$query = "SELECT id,uid FROM faxlog WHERE id = '".validate(stripcslashes($_GET['id']))."'"; +$result = mysql_query($query) or die(_("Database query failed!")); +$line = mysql_fetch_array($result, MYSQL_ASSOC); +if (!preg_match ("/'".$line["uid"]."'/", $_SESSION['userfilter'])){ + die ("No permissions to view fax!"); +} + +$query = "SELECT id,fax_data FROM faxdata WHERE id = '". + validate(stripcslashes($_GET['id']))."'"; +$result = mysql_query($query) or die(_("Database query failed!")); + +/* Load pic */ +$data = mysql_result ($result, 0, "fax_data"); +mysql_close ($link); + +if (!isset($_GET['download'])){ + + /* display picture */ + header("Content-type: image/png"); + + /* Fallback if there's no image magick support in PHP */ + if (!function_exists("imagick_blob2image")){ + + /* Write to temporary file and call convert, because TIFF sucks */ + $tmpfname = tempnam ("/tmp", "GOsa"); + $temp= fopen($tmpfname, "w"); + fwrite($temp, $data); + fclose($temp); + + /* Read data written by convert */ + $output= ""; + $query= "convert -size 420x594 $tmpfname -resize 420x594 +profile \"*\" png:- 2> /dev/null"; + $sh= popen($query, 'r'); + $data= ""; + while (!feof($sh)){ + $data.= fread($sh, 4096); + } + pclose($sh); + + unlink($tmpfname); + + } else { + + /* Loading image */ + if(!$handle = imagick_blob2image($data)) { + gosa_log("Can't Load image"); + } + + /* Converting image to PNG */ + if(!imagick_convert($handle,"PNG")) { + gosa_log("Can't Convert to PNG"); + } + + /* Resizing image to 420x594 and blur */ + if(!imagick_resize($handle,420,594,IMAGICK_FILTER_GAUSSIAN,1)){ + gosa_log("imagick_resize failed"); + } + + /* Creating binary Code for the Image */ + if(!$data = imagick_image2blob($handle)){ + gosa_log("Can't create blob for image"); + } + } + +} else { + + /* force download dialog */ + header("Content-type: application/tiff\n"); + if (preg_match('/MSIE 5.5/', $HTTP_USER_AGENT) || + preg_match('/MSIE 6.0/', $HTTP_USER_AGENT)) { + header('Content-Disposition: filename="fax.tif"'); + } else { + header('Content-Disposition: attachment; filename="fax.tif"'); + } + header("Content-transfer-encoding: binary\n"); + header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); + header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT"); + header("Cache-Control: no-cache"); + header("Pragma: no-cache"); + header("Cache-Control: post-check=0, pre-check=0"); + +} + +/* print the tiff image and close the connection */ +echo "$data"; + +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> + diff --git a/html/getldif.php b/html/getldif.php new file mode 100644 index 000000000..541204607 --- /dev/null +++ b/html/getldif.php @@ -0,0 +1,105 @@ +get_ldap_link(); + + $display = ""; + + if($mode == 2){ // Single Entry Export ! + $dn = base64_decode($_GET['dn']); + $display = $ldap->gen_one_entry($dn); + echo $display; + } + elseif($mode == 3){ // Full LDIF Export ! + $dn = base64_decode($_GET['dn']); + $display = $ldap->gen_ldif($dn); + echo $display; + } + elseif($mode == 4){ // IVBB LDIF Export + $dn = base64_decode($_GET['dn']); + $display= $ldap->gen_ldif($dn,"(objectClass=ivbbEntry)",array( + "GouvernmentOrganizationalUnit","houseIdentifier","vocation", + "ivbbLastDeliveryCollective","gouvernmentOrganizationalPersonLocality", + "gouvernmentOrganizationalUnitDescription","gouvernmentOrganizationalUnitSubjectArea", + "functionalTitle","role","certificateSerialNumber","userCertificate","publicVisible", + "telephoneNumber","seeAlso","description","title","x121Address","registeredAddress", + "destinationIndicator","preferredDeliveryMethod","telexNumber","teletexTerminalIdentifier", + "telephoneNumber","internationaliSDNNumber","facsimileTelephoneNumber","street", + "postOfficeBox","postalCode","postalAddress","physicalDeliveryOfficeName","ou", + "st","l","audio","businessCategory","carLicense","departmentNumber","displayName", + "employeeNumber","employeeType","givenName","homePhone","homePostalAddress", + "initials","jpegPhoto","labeledURI","mail","manager","mobile","o","pager","photo", + "roomNumber","secretary","userCertificate","x500uniqueIdentifier","preferredLanguage", + "userSMIMECertificate","userPKCS12")); + + echo $display; + } +} + + +/* Basic setup, remove eventually registered sessions */ +@require_once ("../include/php_setup.inc"); +@require_once ("functions.inc"); +error_reporting (E_ALL); +session_start (); + +/* Logged in? Simple security check */ +if (!isset($_SESSION['ui'])){ + gosa_log ("Error: getpic.php called without session"); + header ("Location: ../index.php"); + exit; +} +$ui= $_SESSION["ui"]; +$config= $_SESSION['config']; + +header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); +header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT"); +header("Cache-Control: no-cache"); +header("Pragma: no-cache"); +header("Cache-Control: post-check=0, pre-check=0"); + +header("Content-type: text/plain"); + +/* Check ACL's */ +$acl= get_permissions ($config->current['BASE'], $ui->subtreeACL); +$acl= get_module_permission($acl, "all", $config->current['BASE']); +if (chkacl($acl, "all") != ""){ + header ("Location: ../index.php"); + exit; +} + +switch ($_GET['ivbb']){ + case 2: dump_ldap (2); + break; + + case 3: dump_ldap (3); + break; + + case 4: dump_ldap (4); + break; + + default: + echo "Error in ivbb parameter. Request aborted."; + } +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/html/getpic.php b/html/getpic.php new file mode 100644 index 000000000..8f941ae0f --- /dev/null +++ b/html/getpic.php @@ -0,0 +1,45 @@ + diff --git a/html/getvcard.php b/html/getvcard.php new file mode 100644 index 000000000..f55dc4e2e --- /dev/null +++ b/html/getvcard.php @@ -0,0 +1,167 @@ +get_ldap_link(); +$ldap->cat(base64_decode(validate($_GET['dn']))); + +/* + * Generate vcard for specified IDs + */ +while ($attrs= $ldap->fetch()){ + /* Header / Name */ + echo "BEGIN:VCARD\n"; + echo "VERSION:3.0\n"; + echo "FN:".preg_replace('/,/', '\\,', $attrs['cn'][0])."\n"; + + /* Assemble titles for N attribute */ + $titles= ""; + if (isset($attrs['personalTitle'])){ + $titles= $attrs['personalTitle'][0]; + } + if (isset($attrs['academicTitle'])){ + if ($titles != ""){ + $titles.= ",".$attrs['academicTitle'][0]; + } else { + $titles= $attrs['academicTitle'][0]; + } + } + echo "N:".$attrs['sn'][0].";".$attrs['givenName'][0].";;;$titles\n"; + + /* Generate random UID */ + $uid= ""; + srand(make_seed()); + $chars= '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; + for ($i= 0; $i<16; $i++){ + $uid.= $chars[rand(0, strlen($chars)-1)]; + } + echo "UID:$uid\n"; + + /* Mail addresses */ + if (isset($attrs['mail'][0])){ + echo "EMAIL;TYPE=internet,pref:".$attrs['mail'][0]."\n"; + if (isset($attrs['gosaMailAlternateAddress'])){ + for ($i= 0; $i<$attrs['gosaMailAlternateAddress']['count']; $i++){ + echo "EMAIL;TYPE=internet:". + $attrs['gosaMailAlternateAddress'][$i]."\n"; + } + } + } + + /* Export date */ + echo "REV:".date("Y-m-d")."\n"; + echo "CLASS:PUBLIC\n"; + + /* Fill address */ + if (isset($attrs['homePostalAddress'])){ + @list($street,$town,$country)= preg_split('/\n/', $attrs['homePostalAddress'][0]); + echo "ADR;TYPE=home:;;".trim($street).";".trim($town).";;;". + trim($country)."\n"; + } + if (isset($attrs['postalAddress'])){ + @list($street,$town,$country)= preg_split('/\n/', $attrs['postalAddress'][0]); + echo "ADR;TYPE=work,pref:;;".trim($street).";".trim($town).";;;". + trim($country)."\n"; + } + + /* Telephone numbers */ + if (isset($attrs['homePhone'])){ + echo "TEL;TYPE=home:".$attrs['homePhone'][0]."\n"; + } + if (isset($attrs['telephoneNumber'])){ + echo "TEL;TYPE=work,pref:".$attrs['telephoneNumber'][0]."\n"; + } + if (isset($attrs['mobile'])){ + echo "TEL;TYPE=cell:".$attrs['mobile'][0]."\n"; + } + if (isset($attrs['pager'])){ + echo "TEL;TYPE=pager:".$attrs['pager'][0]."\n"; + } + + /* Set organization */ + if (isset($attrs['o'])){ + echo "ORG:".$attrs['o'][0]."\n"; + } + + echo "NOTE:Exported by GOsa - https://gosa.gonicus.de\n"; + echo "SORT-STRING:".$attrs['sn'][0]."\n"; + if (isset($attrs['labeledURI'][0])){ + echo "URL:".$attrs['labeledURI'][0]."\n"; + } + + /* Add user certificate */ +#if (isset($attrs['userCertificate;binary'])){ +# $cert= $ldap->get_attribute($ldap->getDN(), "userCertificate;binary"); +# $cert= preg_replace('/\r\n/', chr(10).' ', chunk_split(base64_encode($cert))); +# echo "KEY;ENCODING=b:".preg_replace('/\n $/', '', $cert)."\n"; +#} + + /* Add picture */ + if (isset($attrs['jpegPhoto'])){ + $photodata= $ldap->get_attribute($ldap->getDN(), "jpegPhoto"); + $photodata= preg_replace('/\r\n/', chr(10).' ', chunk_split(base64_encode($photodata))); + echo "PHOTO;ENCODING=b;TYPE=JPEG:".preg_replace('/\n $/', '', $photodata)."\n"; + } + + /* Day of birth */ + if (isset($attrs['dayOfBirth'][0])){ + echo "BDAY:".$attrs['dayOfBirth'][0]."\n"; + } + + echo "END:VCARD\n\n"; +} + +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/html/images/action.png b/html/images/action.png new file mode 100644 index 0000000000000000000000000000000000000000..21d5e2f82859774e6f5d30a8d77571212a5d8d94 GIT binary patch literal 397 zcmV;80doF{P)|ptMw$qe)|9cp3l8y& z1BG8Hl2zYlf>lgIh&O)}p3jrWe890{2dA4mXtd;M2=V4ZxlsF%I!}vl{U4O@35K{* z+TkvBJ}l~0k^d5yh7foCU^G(0&V(SFE!nX>1 z1swM3k|AW#D2k&srwyE%2?{u8N9$Z$_y>Xa@L#jI6P$`gb)Cz@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZ?kV!;ARCwBAWIzF83=DE{K$@9>;rkD623A%}P5~ZA zaZw&CabX^be+>WszIyrU!PCbN4*z+yZw~{*!*f8z{~53VfB-^6q6`cY`HT$m2?EZ2GYeO-H zN6$VnJbLtu;mNa?3@_h&V0iuZ69YRdD+4bt2gBdL3}F1{?|+6LKmRg({`QYSL5iC} zPEk*D!}e1@8Gb%F3^EWPfFK65YDXrfSJb)M$TM8NahKuNox2RL-hE;C@|}U<p)eEr2BBQC&j=LL`Dor~Lc0Ihuv z5I`V<*MHszx;&f&!-#f00M}afl1O-&oZLw;nP=) zER3HS{xfnieEZGL@agkU24)rp25(0l230vhpz9bJxVhMYn2SM3NPvMACYdJFQAXUGCX_xNAktpol5`$h=oB=!=96qhw;>j6AYg}^Dr3bX)!P}e`NUc`!CR& zJPe|OT)^bazyP!Z?CpQQf%xw~hQI&*gYlbppzvp7c>eMe12YpNgR-Kc$OQ%wGk^eM z=9Y3S^m2C4ayD0CU}FQh^ee+lU}XLH`JdtOi;uv_`^;dXD+_cmBLfRFBPdvbE@S|^ z^dB$+-@pID@D!+S$G%expMdefz|6^T@xt-T00G1zDJm!=EWphm#K+8_t0@P}a9bDF=I;sqJ9=&2<`1SigKmf6P z`tbU}KcEj7L75(?iHVt+;n1=33{T(uWcbJOkKyN^pP+aHDQ38S=M}?;Pk+HK{SQ=p z|LJ>%1#1s7@CouUC@QHj>_2sj;rXl2z_9xA79fC_UO%~X;?vjf;8_0)wBh=#2Mnur zTmZU?kAaDa8Dc01urM+_dj5ss{-bw5Lm3%fy#B&4f88mDM|Ynx{QCTe!Oc>gAuZI7 zK}$gxXz;@;00G3r@b%KZ8+Yz}Mq0jJy#fh zfBVj$sv-~c4L`%P*Pj^fJpRCN>BxeW41Zp&00$OF!>1km`=5>L#+@4szy7iV z(=IE}Kvo70Hf9DE78YQzFoH|oA3uIEd1|Ci}22LObLm(Uq8Hi{ruilhX3C$0_7j#(g+Y>0BrR3pJF56A^-pY07*qo IM6N<$g6+Om-2eap literal 0 HcmV?d00001 diff --git a/html/images/addr_home.png b/html/images/addr_home.png new file mode 100644 index 0000000000000000000000000000000000000000..14ee4846f3b616732e393682df7d5fddf9e91c03 GIT binary patch literal 1381 zcmV-r1)BPaP)z@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZ=+et)0RCwBA`2YVu0|*lX-dZy#5u*-d9zXywF%Sv< zw;FYF%P`%&s?N|xjCz0oB53eY1_qY@wVLx8)XmBmId~YvI2kH$=`+mH1&ZU-2M|Db zC4ZSS@Ugn6EoV^H^o8iyz-wfY@p(eu4ki1TxLHxvLhUnOP44<&+1qdLVF8<}m zAj9e)yPH8;(Tm~R4+e%G-+jyqFe9xK0@bs@R13OTdR}hGK85mfB z76^zih)eLGrWSwzVuYn(MxY;mW$;O}axq?JU}6wt012}&G5o&qiQy)TJ%iHJl?+_s zA`G7&J!5!~8^)md?I;6_G{iFujG#zi_&D_ngHg_PhI=400Rjlc#jJ8lRt!?Af(#;x zKtHN8yuUBZ@W8N=L1)cgu%TcN$w@J&tvSMQRWFC(;|HLatS|$EI52GF`S`6hS!`ft z0R#|gauZQ4!{PoRY5V6!{IJT&lK}=PjK>#TCUfZZNM?kTJu#TgtaDzhRJT>StgVfp}d)U5CMtjg8^e?`I6mx8E}S z;rPoSr>4p9=RYtMfBj~Vb$4TUDk{csVdXpq15-tX-lhT*ptd~#0R%VrWbIs&dtd+D zeQ4#ZTmdx{1QY^`8Mq$aVvv6Mkb#kzo#Dfq*9_cdb_}e1;tW5(e`EOj=MRIpwkE?I zDK&<(v({YY9|Hvym-f!Emy*TY=8hlP8F|%y}j=t7kz(#uK5FG zpIFevusy?^;Y7I$!?_xFhWn=uFn}^QNdDKaUkty0|AuJ#^XDm$1Yrh%076L>_wV2T z4r7B9gETVyXJlaf^Nm4@>j#6hFdGBIUuIx-{>$(iXduYYzkmON^8g53zkVHFAOQpr ziou^hfBwRNi~$fp zC^@gFsOTpwd&43GM6+|SGw|>MUC#55L0o_tXaO5o4ah)NR#pafc6OK%KVb}j0KzEf z-@Shm-q$-}C8{V$V+qhJQ0|3?5R3%&?A;ZC%m)Y{ltKs>@b~mBXJlmyf)t&f$k6~00000NkvXXu0mjf)1q`s literal 0 HcmV?d00001 diff --git a/html/images/addr_personal.png b/html/images/addr_personal.png new file mode 100644 index 0000000000000000000000000000000000000000..ecf17bc31e035ce4968aa8f94dbfb71e76d97b43 GIT binary patch literal 1372 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 literal 0 HcmV?d00001 diff --git a/html/images/alternatemail.png b/html/images/alternatemail.png new file mode 100644 index 0000000000000000000000000000000000000000..62b0534335930094ed7f6681eb3a5e97faeee097 GIT binary patch literal 893 zcmV-@1A_dCP)}2+1vYXCkb|xBghq?jgH)kndni=I zN~s~Igdp}(!4@JZSy*bC9weq=A(drFH(6(!-R5I6-E}sZ|NQ@d4^=_@diVE!@9>_0 z|Iz8wS2apme>kih@%`Y%dVS|z-zVRmKmR%h0QujH=gwVIgMbaFs`N%zSL%>u#oNne zS6EnBd1-BJ=X(I&-vTaP%!-tw{N$ZOh&;uAV~s>#r2o(-mRVi zVE-jxbo7T5=lt13BJ!GLB@XY|V}=YvgCq%{lw)JVLntJpyW5K1zFj&B;3EJK#>Q^8 zFveerL_&khrA%@;0R8g@j+SpTkF z(a#Sa?0LSguPts_@juM~Kq&_y45d;PiXtNv64BfHa2I2IaB%PoQ49ihPY|#~2otJR z4~4=89H$D;^TF5ydZXcka}G)w2w_O4Tcgov_!-7nQe=!39H*M0lm({Q3|)`F^L)(C z+L)QKvA$kIwfZXnfDnoxpoqm(bad$Z2?_e8$;om0$o?m3rB;4UZrP62$rjqJR&;e* zaNTW8Pv>CUWu#IGFb4R3@Ov{FDHhjc32(uilctaSq|82H2l=K6djd;$me8B*gQjX| zX^BDCH5f)5O-(Wgq3}F{tt}6>T}n$hgin?udolX|>I>A{7<1-R73)aDcp#14Q-6oN|O`xM3E z1|}!x{i&(>iG2Q-HyLA}X0xXp0Fa%EQyDG|r{YQ+$N6!LZ;oT8I)kKdV#fup-kh)H za?5kBTmP)l@UII38kx+;{EwZ;*u+<2LHtnPt49{@F8~6dI4aui?4{RpD?hKU)V^el zeRt)`2kZZIIzc=t8mg`iCCtRJPOCGudT-T>+1)|M{l`bt?c_I?FTa=jue<*Sg&dcB TVkZV700000NkvXXu0mjfihQmb literal 0 HcmV?d00001 diff --git a/html/images/application.png b/html/images/application.png new file mode 100644 index 0000000000000000000000000000000000000000..671fc7db7cd9cf4e39a13584429f1c6220ad1315 GIT binary patch literal 3839 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 jTLO^M!mtN$9TuSG|Ek}WJYW#PzlJX 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 literal 0 HcmV?d00001 diff --git a/html/images/button_cancel.png b/html/images/button_cancel.png new file mode 100644 index 0000000000000000000000000000000000000000..96919575afdbc31e7f3539f8ad1cb709f813a7ee GIT binary patch literal 883 zcmV-(1C0EMP) zA_&6)0*DFSP!7Ey22LGc2Ehndfqy`k+}6i59NAC-8CeEF32_E_Q&9tu%TMt`3QO-fLy5X|L*x}gl;e}M7--+vkY{R77h z*kFJFVgv;=BO@aNC`>`#2e}kvD9CVzUq2W=o!`swY~|?>Knom!Vb6fg(6{%VG2B1# z?gP+)j%J@2E`ZDg2q3t@AOH$ekoQ3@8t||i!|HrUj&Ra`>S3(-a&<~GZGTb@x8mpl& zg8>4F1y?$SMikil$c8d}2L;V21P{DMd`;hlc5XWhMpz(eDVaBN=XJ{r~?1fB<5G zI2|bPm*K(x-~R}vQ>&jq_CE$kkoR9>#@Pb~h~W$X0R%7TLFMULafb76d_@1hb{F~& zET!I`;=^5R9%W`QIKsg2{w2^|APi)mKLRa)KxP625K82M%Tr(&f=ekJi60pN4FU%X z)TN;C{QxrEcCQx|_#6(w3K*JSaE=A6H00G2EtI8B0zyJ_{_}Csa6@>r*002ov JPDHLkV1jeQWgY+k literal 0 HcmV?d00001 diff --git a/html/images/certs.png b/html/images/certs.png new file mode 100644 index 0000000000000000000000000000000000000000..ca93f0d149f25ec249f8964ee93267f3f3208dd0 GIT binary patch literal 693 zcmV;m0!safP)hd-OLGsikAyx;m5E(CC6E+5`r_2UxZu9A$i{^YC${6#B-_w`h z@B9D2_xC5zqVe(ZU^pCpTCG-Hnx-{1P1{>uUVbTx;yYZVp`oGM^Yin?;o;$D06YL( z0|NsSu~;lWIy(CBLO?VceZ%wo^Y(cl5O@%cMn3{D>b)aRjoEBwi^bwrd!Vzk^LxEs zHv{O<1N^71udja)1Yv?82!|jDcN9fAvD@wLo}M0WCX*>GEG*dS^}5;)AX@z8cswo* z4h}j=l7ylt@cDem=kstl99UahOGF}(y8wRcR_O2VzdANHcE#uOfh7Nq3xxulPA77? z973T`&~CQ}&aGfH8aoUI1Hmv1dV708(=-ka4nR>9Y&IKYSw2!#_2}FqX0zE(D=RCT zl}ZJTMgtT@!R>aVR;z*IIPC83mQ_{#*$yzY_(nRNP6va*$*!(0QkLbt#l^+1&1Tc& z@px#Orn@PMG9;79_hZO-;Q90G4HMEG;el5Jgej*w{D;g+i0M z6##%?m|vw*>E!tM7`a?-3jh>F5oc#-?`N~wywz$Y=H}*J_4V~#(*qd7;qViVuunYRF__6)~yw?;-r9smTOMf>H=7Ly%CAwRb5*>sq*K2!wDGwwax7f*>fu zMXOv`(8`V0A~f(jlp#%LhH>6F&-d=U?-tXHQ<7(O?mhqi?_AEgb^H_4({CefZQ+Nl zt<8^`n(D6s$g-NsW~G^2uK0R#@_|&Vch?@Kre3v#!=Xex-v4Z9s5csmwbRwrLU(t2 zb0FZmolfW7@%a7K#l?AX4v_JRTV6 z3rC~P3pr#qW2szP^{qWTcnL}KA-1` z5L&fy6`&|8hM^;bAd|_Tn5MZ}sm;zNva+mbnpQ&BbreOd&aFzid1*6*==2I{AFrA9 zOb*U%0ouXUQnRmynpc7Kn&0|}rGU^Uq{>J8Q>tjN`oP-7@?A{9g=Ag|YM z=vajMo0`Kx^;9W&3VX|jP+tr@+4$@M$V%LckKGz=>c|1dfD?q^P%R*a1?0hT0>zz< zJ73@Legn#YqnwSU?m#ieh2a2_z}k>F%7xBmaF}y23M%-t3(O7_OK@<4Avql8oHIba z=wKB!@QS|;m9CZziVnvr7#3E^MZQ=Aa2!B2z^{R;4r~WZyKFRV&@Ct#VAx<-pu4O5 z>KZZZGD-gzqR)7v%cTY{(krOv-aL! zS%<6_taZT?@BjjV0B89JWS@YhV@yauTu87!EiCSsKJi$Hz7yfVAz3GI1j;a&5^ROC zl9G~&itSYa zJOV5C?u*HO*fJ(xtp0V(FN+tfh_5pJX%z!F6e8ae6albc(hk{J8-D%!L?%=Gu=FYg zl|N1}Ry-KnRf!>yNOc^}$cs_Ty5`reYc4tREe?)a-gGJXP;dx>W#uKWJVL*-DSHtx zQvQm@6aXSWs@-j*^4UqH7ZvBzyZdXU#CxqSU&Q!o-VT83{XkkmWFl!>4L_x@((bog zJo8K9usvUqK0_D)klVvcTBv<6q2;xgcziry`rl0O0Dzs#ITcRVza1A(a{R+eHUb6W&{1={KNEioV{f+s}Og?tw zrMYypd(Znb?T?1q_)Kn2{)CpK!B;YCZZ?%i-Y4`zcICRW?s{!Ad^x1!?_)pu9p%NJ zOntK_v#NY7ENITbcbBtTO}j&E42BjtW+4|3d{aRM*sQOhl(C`M$Lz`^-6I((Y4MoO z;Dy9WH%*6kkGJ$7y-BAmiDL>%l3k>5W_)o2d)~Rs>$G2bu*c)H-jVZG8Rz&uTVi8f zLXpGS@mt$ZcQ;Jg{kC4SEf8@B9h*ZyHE2E#+~Sl;cP)=RULO(VJV5Xkee$FTo9tBa zlER28g;Q&vSiyaZgj#8lI3kxKoN&JB-!<)MU&FuUZA|yT#8Nx@!^=d6W>OqHo=@L6 zB=Y&8+tZQ+=ba&ABPzE2y)L=F=bm8x$2pJGX{z`qrb~Ut`Q}7qzte__sW*5oCFpgO z4hEkiDaoG9m=uq!=Ny}FLAax4A<~_zI7Vr~bFLn^V#d=t>Ftk~6phcj?W?w^B+N*) zL%S{O-X2ctSddT)09eoRadzwY<<<9ox%)@Z*W}K`AWs>%-}o|dpEpG=C%%P=I-%p+0zpT#}nKMHU?Pf5CiSKNxMdY+*sI=%&(c_X+Ui~D`&?e34(5`XfY;w>j zQfCMI2s^yaox*A_O$g!bypo}^Ue`}+(Dllo0p^c$cl`EGL2cUIo6h!Wph+sl7<+EI zR5HNbKc8h=5=~ht;M8-5sFD8+;lv6jY+okYzCHYgfpi+!ifS%M7h2v5i=oy~1aTQR zK5`QvLXifdZO-(OXk{^Wl|_rI;8PMNKAB^?IyjnMwx8Kgq}=AdCyC<)f@!?Ucg8Ti zvyM2$=7=nO9Z7e%3b&8cOv`@2F1vAt*K*w#o`$ZD=`To-0X`%wsO70ha&<$GI4Y;J zFsmOY1A&sW6`kvtx4cQU(WMNB9U~ZeW6FZq-+W8|O@2N3^AG+=4$P$o-Wq()>7l)4`eIH7?!IONQCesv+d79}optN|xpJe20yGFeoU zEL=xcph2yD^=_-q8sg;3Gr9LotfirslW`M{x4{Wa+bd0fLnB7+`D{)`R$xe-+uiL2 zag31M8wIx3C_M9zq>F8X%&Tlt^sOy;ggekR%cmD0BBDg9rIIq5iqm_0E{P^^Gco2N<6a&QXq>l PiWb5DIaoaaSefWQi77f4 literal 0 HcmV?d00001 diff --git a/html/images/default_icon.png b/html/images/default_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..58d50d37292a12eef15b9d4e64d91adb8474ff03 GIT binary patch literal 1957 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 Eg4vM}-2eap literal 0 HcmV?d00001 diff --git a/html/images/display.png b/html/images/display.png new file mode 100644 index 0000000000000000000000000000000000000000..f4ef81c608c703f52f2d4d5bf3e00c6aba4b9df8 GIT binary patch literal 733 zcmV<30wVp1P)Yh#uD{ryLFZFMC%`RgSgfBA$vn|E31Od z5F(65HKWmtX4cT}kGa>2eDlSJlx0yVF$P3wk`-Rf4CC4`m@0z_yw?*ZO-U8*1k6-c2$%NoMH@WC6*ZfY+6yka(O7MJt?0wGN-&IkTJyJj}LVYRf_M0oc5 zfXoWr+;Dn2pq(~|2+n&D#i}TxhHlv*Q%jm!R?C!!AKapAA#SeFzpDBEhg0%yO5Frh z74JL%Dk`WzQDl@=&c;T;%j-GcKK_RyPkH{wn8!a~P`A+Qbt%gZS!VIx0bo_YhlmqJ zj777IIvQd~c=X)`O%thu#bh051#cR>C~nEX8k;0lk+A>KCKyAOT9VXYR0u?(545dk zK5v=V4dY3dH+#DLf-&~VPfw4xx3||n-+pJQc?ZtnT#IuK=N#VaG7a9RG_9j<;q2_} zLe|#S9_;S!ewOEX<-LzF#)bZurt<$`7JdjJV2qK=%ggJ-!^5v%*UkJ3?# P00000NkvXXu0mjfm?>k_ literal 0 HcmV?d00001 diff --git a/html/images/dns.png b/html/images/dns.png new file mode 100644 index 0000000000000000000000000000000000000000..6a55d72713c996332d82511e4b41669f64632286 GIT binary patch literal 4739 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 RXh8q~002ovPDHLkV1ksAE`I<3 literal 0 HcmV?d00001 diff --git a/html/images/dtree.png b/html/images/dtree.png new file mode 100644 index 0000000000000000000000000000000000000000..7eb7909962febca801ae5ff4a82e8ffa16badd09 GIT binary patch literal 694 zcmV;n0!jUeP)jG>HG301Z<2_xC@Be}94W z&(941etlX15I`&-L*0$U8Gim^VEFlif#JtbApQZx-x(Ob1L^PIp%|GB#Q&HW7=8gg z3^bSFKNG~IjEtXv0=p6b0*Hx|jfLSS(6C=13^e>V2>*uSKMV|ifEefy2u5Q6L&7Mb z$;`^Y$iT(`5I`(^tp6FTB@r4x2K|8=@&^h3MrQv;(7%8G2kQgH7080WKrbv_$HV{- zKrH<13=9r(2n%P=p3RV&no2NoK!$(}`}YqRw*UTvF^K=`=YNKMN0=A@0*Hy6RDsJ- z7#pMjAb?mH{t;*JkEwE~$tnE-Rzo3t1_potV*3A&ymSn6EwZ5?_Ftelhz1BC7HmNQ z3TI@1EzA+Y@gEv-Fbg0C0|XEYHWw2UdDvWx925Wn#6nEuffU2S6gko`!xljU1Q5Yg zflVVmLqV1T1Bn43fbd2hE{(ViMFa&v0O1S@WKCc^M+ul!fjJhI{GxB5MH*Bc)S&oJsRDpzPA!c9=04)9g{Dsg!i{NY^{SR3VO8@)&4`*t+_2fGPKmak)s?GxlASMPH c0e}Dl0I565QA{BqJOBUy07*qoM6N<$f;X}fV*mgE literal 0 HcmV?d00001 diff --git a/html/images/edit.png b/html/images/edit.png new file mode 100644 index 0000000000000000000000000000000000000000..a8b69f73fe3ed52ad616c4fbc6fca2679a9e8c1d GIT binary patch literal 946 zcmV;j15NyiP)!SI-Y;XMNwpXV^<{*aN^_Vx3-ct!@s`>bqi46H0{3;+Ry)quaBJ~J?XSj52m z8_4<2#PIAXBg0pVFh+JBcH2kypF44Kam~GP<{HE8o0k~?0tl-C3?KJ1F#oy8!0>~O z;s49O3@@au7-U_78NS`V&T#4b=bvxiykyw3V+~N@9|nK`V#22X|HH`)th}5I3|}}H z-hbp{_@d#*AS5Hjz|8QMfrW*Y;mV~eKvn;Mn2iA-fG}L}_r(bYW{z7x&A^!b#K7>5 zM~y+yA(Vmh|4#-!9$tnc2M;mayK^3>l9deH=U0|9du%fr$es{1a&N2Ofs^ zGM)^AQql}8zy!d^%*gQO^-E5WZXgx`Vs3x{Vu3~JPf*mnxX8f5{*Zz3k06l4&hY9x zJA-IYEW@ua9~gfB`pNL=<0l3tMkZjIVT8Gy7a)M(Uib&{(%&CIhBN~M2QR~y=T8~l z2wO97{9|VL`T7k|BO}8A2nZd^1@wcFmECVAWI1(5D0*HkP2*F7gh&7GP8B`2R8JGoxfHwbT z_$|Q8z{<`B^!tAXHa2DkW@Z)!E-p@{@TgdZTeog9+`n_30U&@_?%sL$VbzK?JRm1B zG6Q1=6j*LX{7Jy;#>&w?K3pF07*qoM6N<$g5Dym0RR91 literal 0 HcmV?d00001 diff --git a/html/images/editcopy.png b/html/images/editcopy.png new file mode 100644 index 0000000000000000000000000000000000000000..c3ff243b85f2d80a576da5225b81ce0793057841 GIT binary patch literal 777 zcmV+k1NQuhP)oe`{G-n1L>1#4rFLfG`YT1giP__YZ@fo(hAR znKpx_rV>z$QPI-UfPt5nhXLIs00G2;%>ZVgGd_L##_;|7F9tq7ZU#$BJv&iRfmy(C z-~=k+1{$*c-@kvefnH+(2p|jtzJ6t3c>n$jFdV)x7#S%6ZDj)qD+9%qKY#uT45Pn5 zH9rD@VZ#qJum>Q3Pz?C-gMs1Ow;$kG0J(yl9U;xl%>axcPKMX7KQMg${23TF9Nj;E zeij1=Ab1#ny!PwYZw3|?CZHq>$lna;0nft12n=9W21!X#1{D=K1}-j+LVy5*8}REF z$p6gXFu(;svB1vG${;Q-%pff-0yL170U&@_Kmmbl0}~SqFcv_HF(L@)yN<0EYv}D}Vklf^C8% zb4IW?kpVye!3_Y}qO2^-ps%k6POks|{|0MhWn}<|#lL^7K>8mL|AD4hCa^d_0I?t^ zVPFblIC}IvG+q4vdGqE25c3O^4|WxV{THnM%a`we00ImEj`sC{+hY1`00000NkvXX Hu0mjfs4zfj literal 0 HcmV?d00001 diff --git a/html/images/editdelete.png b/html/images/editdelete.png new file mode 100644 index 0000000000000000000000000000000000000000..6d0d29d760d37e78d0ce975bc20f681369335a84 GIT binary patch literal 892 zcmV-?1B3jDP)g`JI!TT@Mjg8>Qr2O9R{*FT28e;63<-ha%%!_CQc_rdf1PoBLDWoKtU zfUFiEfS4Gt07gbe2B1X@j7^5sJtOdUV~VRZq>b|#=V{`~&KplhJP@aqRKFhBof zc=!A{11l>V!>JQT;c5W_2;qW%e;F9ApJHIRd6wZHkoyPdk3X!e3}5cuV_@nkVqo37 zj)9en8|W=o24-evxHf zQ|=hUZ*4OMCNXJXAR}B05I_h6B$XK$J1ZC%UVmixYh=Ojk6W05_3RA>VINlp z_H95HadJUzN4NkWfZ(yfa%2Ys>(mYgh8J%benloTd|tSd;cM?KhW~v049u@yF$fgr zGBCY*!SEj#jmQ8XfDm3Vb7Ek0@?-cfqr&hjr4XDSe*5||d|17afvc>5;cI#p!#`f2 zVZgM3>;-@TVu7V=Zb3c{w_fL{F1!2R_X0}Bf)N+1FR z5X;9;pT4$rPX5Eh!~)F+|A0PZ0&4yTHsC)rXZ#0q{sT2LF?{(1OqNgp5MTgah5&9K SO7D080000qS(`QfKKi5c|M%a! z|Nb){1Zsc8^#3p10Du5u`Nzq#T*k%N=Ki+kz6Z>~@_s5UrSNAmBV-96S<0I_@l3jY26jp6U_e<0U_oy^4W3uquO z&`Lyff#tw~#=;;X!q314H1*G)zX<>V#PaX=UxxobzB2sz3Ut_KppD;w^q(IL{~3YS z3Lp$%W(HwqpaDz_f`a@E92{&6&z`+v00_VonWO*!!a!_<;{TuN&4Uyvc5(1zevm{e z96lFfY{2pIiwd2m8m<6h`Tq;(+^6pu{(SxePhyN916Y584TEX^ z_6-y+-+^BF$H2+S4i;x(VrBpcAeR4Mfd;($0agS9O#grZ`}YR}%!FUS0R9Dx3Xm6o zX$xo%L@~%dfB<4)_zjc*;=jKU1~C5p1(XEZ2Ic?x^9RUh0w*pI&B6i=aG(VM0mSn3 z9mD;5kN+3~(*#@t!|y)~zxn z>mSsFzrPrN@rbZU#xOG_f(&M7X9Wh_U$6m8KmnkGfqYOHFfafF5DQT3E(;?=J}`C| z{=(7$(4(wszM2OQUXB39*8jhMf#LoiB=w&GLjMD&ua6(Ud<6(F0J}kNf50^MxBvhE M07*qoM6N<$g0n-+82|tP literal 0 HcmV?d00001 diff --git a/html/images/email.png b/html/images/email.png new file mode 100644 index 0000000000000000000000000000000000000000..d53e620645754901421894ea4bda7b407c5e5965 GIT binary patch literal 4142 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 KT-G@yGywpIEGmZp literal 0 HcmV?d00001 diff --git a/html/images/encrypted.png b/html/images/encrypted.png new file mode 100644 index 0000000000000000000000000000000000000000..d08a33cf702bcacb5930d4900697cd5974fab31f GIT binary patch literal 1239 zcmV;|1StE7P) zK~#90g_O&0RaF#+zkSZRZE1TcAp}rUKqE?wIM4(WU}PAyjUmd!nTZ{h;=o``Oq}@# z7!wC7iC`Ex^9jVD20Lghh8AlH)P_D%+Cty=o^$RwXTO$%OMwcOU$V1zvey3cTWhau z#Rj@|?HV&PGjA%T-dI^#8JV7*9#Bg4ojiGRqigFmJ3GtZ;NWag6q)=-qobp7Z*T91 zCr+GrJZNEI;ZT;{V;HUVa2&^fCrL7_wVqxJ^z`(sc64<7KWKh_evh?QL`3pDznZ40 z6h$GGN@XdIW0{?um64GV=e=JL5jlSR`0dWl&PSIvJw5G2MA9_9B_eY1;>9n!ySsNE zJ9dnN2M@NNK7G1pVq#))XlO``F>@j!M~@zT?@`TuOGKn7iXm&QoH}*tqerVkBh%7HJOMid=XB+jktE;PY`SRs_W@hGwb54#NIkE*H zSW9ScZ{H3qg<;5<&QoI88=?BiHuSyod@AtETHWF2fdae1Hu$%`m| zED4BH3Kj?NLLN{UKyxFsHbJ3bbrsSWbOts9o!4Q3W?Mr{061I*LFwVu zR_5G~!|W(`)BD=T{L_C0LcnU!=B`VFtES}1>e^_i^<@D>A#S0<>+gKQmbPX#x3%)~ zcm3$wQ+Hh@^)gM$;++++=Kh?mlTzRfqob1mlu8j{7*J|xAg`=~Nx{^>Wh~AuVRZqv zAi_UHy4Tnj4m?4*+(0EMD2%7MrIF3s%TTR?&smzUQcE>~H+WMJVAcKCau$jhbP8Dl za|=`_-{<+Kx6raF;_Y`|hO`1j!u-q%X_A8}a7Bi55P9zjQ~)Leqw7tzIoJZkz?~|C z*O%DWQifZ1NGmBT%NZgTWenCDlqft9Ss&1#le!yc!D)PL6&+V-DmlLScAOvxXle`@ z9A0GCR={g81=fLhg(wgYkuy?%ojfI5okyn?lsIsPrgF&V-%n6(E)hkFsX5K=Hjik7 z^>u(p;l1EJ1kTrC$?coiT9puoavJ3f=#0K=F+mXEz2Z(qu*Tu!KFE6Te$AOzp}ReX z=o}RUh%NBi5Ma6VXN7We$cwug*s;a2wMCH_g?a!a4(ea65Z#!VA9{7~fg_FKAc(?? z!HdRw!=Yy*s$cB|=g74u)1E?uRp7i3DsT!KN^o^NM4kI!51Tgc{Jqo=wb^(%H6G=x z!+F74k8=v=l`>AmI&dDG17pEEFdikI!29T(e*sbp^jm;eh-?4=002ovPDHLkV1g(B BI1T^+ literal 0 HcmV?d00001 diff --git a/html/images/envelope.png b/html/images/envelope.png new file mode 100644 index 0000000000000000000000000000000000000000..6053eeda485dd88f281622827bc505cb2228d613 GIT binary patch literal 843 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 Ri}e5i002ovPDHLkV1l>TdA9%n literal 0 HcmV?d00001 diff --git a/html/images/filesaveas.png b/html/images/filesaveas.png new file mode 100644 index 0000000000000000000000000000000000000000..4d2a11e04c1a27470511c26fe7efd5956b0755f1 GIT binary patch literal 1253 zcmVWM-5Fc*C@aNwjtcHSo_WSoghF^dFgB|qe&p(FS*G@3Z=`UsY@`sIK%~}(N`qNt( z00M{w6pA35|09|FpW!b96C)#rp}&EK`~n&ZQvdtUUxuH*{xX;_buiew$uX?ld60qQ z#|MVzuU|2|egDS?Ab?mv=Kc8taq%CZD;D%bGl0xw1QN);02vCx-@kuj`1_v~Xy_k? zr$>qztXzc{`1json6jytVL1~!!}l*AN{?K4ycHmTSU@iQ_4_Ya^Qs*e8UFr-xajXc zkU@VK{(-_0Xfeo8kemQNC&TMEpBdB`moYfmzGV=&%*?=Y{SyP@&qoY59&;~za{u;H zkXZl$!~~8!poYJHKn6naKQu%CfDQc%w(QmGPYf!Is~GIfpEC$Q;$UFebAw^m*WU~W zIW-x8hOUA65FmhOuuirq85QBm2-+#as{e`*o9|->k^W~YgGuRv6VG#Q$%)q?q zGQ(kD@GbqW#qjW}E=qg=1Q6K8zknJ*F$_s|(Bucr42VqfpFx7vGaRv!yMFyr7 zXBjR6<6-V68HOK%ei#uA5I`*8Gyrlb&}B)%Ch*(^N>+dWf-L(9bS*PD+`j@NOGem? zfnn-lhTAO6469ib8NLYzGyM7e3y8miv`PT6IuJhx2p}eqA-{kBg{KT;LqS2n#PAVf z=$9`Hiq_r?f2ST{c*@4Y(D$B~LEW*G;q9yY3?JS;V)*s*6UbmeAm#xv00M{wM1Wij z%TbSCyatCS#BgW|`TL6D(fM5rBEa1BlIb5q>%)Hxa*i1cj~_l@`2OuZII8~r{RImJ zFascfpgHe9G-EI@$ViBSUHj)ZD7~@)BNY-%5$#JD&g-x;Ff%@8P;s8Yz{teHz`?=E zz`-R1EL&I^KEC}7GU62wzXUM=0*D2Y`2WDe_TjUa@L&L?5>WR2_x~Tml$o;_zJC7$ zwdg-M`H2V#Gw`2&1J=vV`3^+Ag&NKP5I~T~`vVCIP->8s5Q7*B%4tADK7aki@chkJ z23EGe4BU+Wz?li;Ly%>Eph1WY00a;VtYCqK@k3x3gCg_Wk3S4Qe*(*c-=MVoA4vZJ zyZ#R}2Z9_SEGUT6V1NLEMBX1rmfnB#3Do5f*T7s3GUzurcm9V)EYJ}^$3FV>7Mwdl zfR&XQ#bAH{Vg$L;+_~gGYJtl@GB~xrHxWoZ0OHF)Gv5LP5DTyrn|uBRCNz@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZ;Ur9tkRCwBA{Qv(y10y3N13Ea(z!1Qus94WyXJ^2~ z$H(vwD0YA8(gV)#-Z{e5fb@a@KmZ{as0J9^wX^&G|Mcnq|IeI(3~%0GV4aW?&}aDg z_c_D`Nci!qR}5bn7$$-ZzybgQ2yBRM;k6I%-hQ3P!StEootZF(As>N(oDPgJ1{?q& zfZ(z7?=QoI=NFHC;Bhf$c*pt?VF=I_-+%mIzy|;V2yTc)^|cSLUjHg&`gE7!S)d*R z!~6GO{OQXVh8sVBZop>9eahW)b`80PmPr3rMsAPf*d z7=~;v)l7J_G3x*RNg?+c2mqKN00D$G1MX|kzW?rg$N%}M8VST00uVr0ll`kVe+xg{ zI?kYGWmnHY1ONyitS$k8omFc4U!Q9FKRHIdfsji80*DEhg2ykJ8c*yv%?0v z(btiIVPjv-@4(4GzCyA`kS_y6l_~>6Lo)-z&;LOBB?CjL0RzLU1O^7H84L{K`IF+0 zx-l>?p73;W45_%4l+wVoc+&0vlK+ei447{ImprHv@h7HVOPN`YLBJs)C8FT%|Lgbb z|JVQhDemZO=)pHXu7M%R@WkFP_0_Ab4nL0%5M1%p!2HF>dua(L_Wt;9uk6t?k@1bs zia$S3{_0_1JaXv6ck#o|@6S;C|DQeN$dLm9!7rE}8aw>paVTU{$maSf7l_I5gKw+RA$l|9+0T~i>C5`=f=z*<0byeJEdQXOtzJH@$iRl z))!dq_ci;fvi@Ow#mJ$sq5R6;<^StTUW#W0DF2q4BY43{_{86T7V`xa8YKSz|9{?r dlYzs4;c&;L0IMC7Vu10_;OXk;vd$@?2>@+)__hE5 literal 0 HcmV?d00001 diff --git a/html/images/forward.png b/html/images/forward.png new file mode 100644 index 0000000000000000000000000000000000000000..e9cbecd003f1401d5d8d629f56789826a13bd1e0 GIT binary patch literal 726 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 Hu0mjfA1#Hm literal 0 HcmV?d00001 diff --git a/html/images/group.png b/html/images/group.png new file mode 100644 index 0000000000000000000000000000000000000000..1ce41bdd3ff108306cb7fd125ec9150912506936 GIT binary patch literal 4224 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 O0000KLZ*U+9)Gc>Uwq5=^`M4BQav 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 Dx7U16 literal 0 HcmV?d00001 diff --git a/html/images/head.png b/html/images/head.png new file mode 100644 index 0000000000000000000000000000000000000000..83e5b318b8eb3b0e32a36e7e3c3b83c03b327179 GIT binary patch literal 753 zcmVaBcr+v(tkjD zqpPTkuDXgK5UPtXg1j*bf}$cSZxnaYi(r$)mYU|=T)yp9ch1hQD@CXFy?fyKJbd{+ zUts5uimtwkH~YpWp9iDK{^4ly>cinNTYX2@F5aEvK6(Ati;*mwUN%@buCZ`jV^b@P z^$spGOT*djLOX<^pr?b@hs*OIwGq&{w(F77O7a`tDAog^gjdi->>JwOx`L83_HfptQlaU68Y zVGRTcok5WW@RD4#mEpIF#N3Y%rzH)iy@WG~1{9HkF^2S-0mVeIxUi_FqTz`>H^AS} z;Mcc(ubmbFUZ;YpQV~^U5Y!eAd} z8SCo#l7UjzQfQ|ITB^Hn=l=OKZMCAVVJ4nKY*7QJYp@jCh3OSuijRGKxo1F8pz~7K zv;x6rZ81DHBO99LpAY`WC|)$2t-3&;OJp% zRbcZMHUnx}PMt1us4y!8#YH?E76GL;9u6xHyOoE{%tMs{m)lOfjcx54+~yy+t844M z`vhn?K$Qqo69^x8nv2GgE1c(|5eiTdr0*MK~=4E)!r= z2vn88BvRxu1i^t|{N3Z*_cE)o5CD*Z8uvSVM>=X7ngd>sr`%>XtDqcG*|ltB=J#AU j^!eN5=+JurlN-Q4SIze!Frs|m00000NkvXXu0mjfdKgzl literal 0 HcmV?d00001 diff --git a/html/images/help.png b/html/images/help.png new file mode 100644 index 0000000000000000000000000000000000000000..9fe7652669e3d2e4fca132b27c4f8fa5a132f98c GIT binary patch literal 1136 zcmV-$1dscPP)ytGte+Td3go_Jv{~{eSNUp--izwUSGV(@aobfhHpSaffh9S zGcZg*Hy9v*7|??PXz2ViK)FX+TL1s7S@Zw@ix>a@+`9Gu|@#A2% zZwd?luL9~_0yG0=FhBq?ffy%&VF?OTaamagftVNuhUd>2zCC`-!0Y1!al+4^3=9Vk zGB9l0#=vmv7Bt#{@h&Y5Rx1pQ11$psP{h^)oh<;81_&Uq!9YV3KoKQrZx2=o!v6&Y z5rMXQHv_}5V+;(yNc+8H3B$Js4M$qkgGc-hz(SU`q> z6aoRegakzMH(=Z!I>f;6;|G}g`qL){DFp>cSbq4x@N4Z_hCg@iF#P-YkwFqDb^~Y@ zkeUDxKrn+11o-(G7@j?YJCYs5zI&H};msQe27;%bKQnN5cEZ*CUa)}S*V(ghz7!B& z1DXY50|XG*U|`q?Ftf9x7z_qT{0}lR3}P!+GO!AOgOK6hg$oS78XHkF2GlGN8z6vS zE@of=x`yHDQ>@wZ>tCSqY180_f?WEuun-&+=-?le1_&US!5{v9`Xs>c{X3>YVAA<) zYs(;EU;xQ^8#XZfNlav5#^L}bs97L3Kmaj8gW|$lpaK7W{bB&7PcZ%qWd8x;e<1$9 ze+bjUYBa0KtM{!53iSzQ@KUpv1|Eq2Vo1!)IUy;Q=N`5ji;q24K=c2j_sn_~Fl= z51{B|%q7i9rLJ!@$7Z9YXKiiSRx!YahFJkKy~DKOjRBkxMs# z0K!_(F9w!UpaO-9i%URON{T@am^ok>00izldBSi9=*suszJbEDu?$N=4-i0D4F-XE zNLABcXw~!=nodDU>L0XfD#cMX0R#{uttwN100RIu@A^X0fvZ6P0000o=i=7)s%e<{k0*6-B)dV* z>bYTh8-0F{>Q;J6!>vO+LS$&3LLcTM^kwLxf6YC?eb7}?K^9jYhqH1DkYMNYF`^5o zChb)K8aN+_9e%KKGkoO{WiZneVqo|WME}7A!}aSg7`{Jv$iVdWHOP_!K+6-~UC4ZZ zYz{yGp%|=|v@hWQzkl<8uy6~g8L2VE+X^xGs9^We;l~UNb9X&wIJo901Jj$AAAmkd z{CFdO156$ufZztJC4&t8zy2eSI76zxIzzl63s{_)iGe|ihk=0u$bI_u2g9px3=BNn z9B>OxKKRK{(t3#D`{gU3U<&+lzZ7gZKmajA4Bf8)G<5qX9&wJ8AZ-R8H715{zZt+- z5NL)lC&UmwE*6INDZ3ezwN>HrLfkA2M&`;4doO-u`2GC32P==$%HN;&egFs{CXfcO z_gT3Fd|lKT%%m8=u7cqYKTw0RhPhyc*l^FitW0*F~PVXpzu z;0``*U4}q?U}OPZfsCJgW?=XSjI;YUA23vOZD-(=R%DP=QN&Qk#>T?%icOf|+0pX~ z%xrcW0Ro8S|G&TaKUjGfOqB!~UVgzIQ9Hrn3JhAo3Sd4qbq_x=F#M2`XZR;9%JBc$ zvwVO6VgV(quY#fsLO}1l_=>7HRFi>0h7ZCP;)H~E!SwSCe-sVDV();#bm=t%!=3jG z3_t%u)G;ZmGcZ1S>;MozAcGZnLLbHLs9s?tk5pD<{J1_$r-p6ou<6~fX@)H!mVDYbyS2M72`ZI7U z7{k>*U9*wl&$DMAfXqY?A0U9>#io$K^Z;PeThFVe#vtKf$H2_NPE;!S^X)ss{S_M- z-W)#-;syd;3obSR0tls`7tov(04kk0MT7(t-5nSNl;rRl`u6%=h8s&aFnoRlb7>#E zpa%#bjH-!OsTWwk{h1F;Ee<^5A`IfdvR6b+9-Q{T$qz`px_X!4>FLW1A0L7v>HySG zl&T3JfEaPPhEu%70BAuzu);*COo2r#IGsWboCq`!Yh?-$U;w6N`1tF4c>DkW002ov JPDHLkV1ml?7-s+g literal 0 HcmV?d00001 diff --git a/html/images/info_small.png b/html/images/info_small.png new file mode 100644 index 0000000000000000000000000000000000000000..0d826bbf3ce4cfa5fa6bbbd1a926b6897af14c35 GIT binary patch literal 936 zcmV;Z16TZsP)WFU8GbZ8({Xk{QrNlj4iWF>9@00Rt3L_t(|+GUeXXk29& zg`e;5&Ye3m$)rilq(+TRjHFsqtJYRfCrS&Ix=_=FE~G_-ZURN?!j-FR6bT3-h+PyB zOSDqdU^c~IwYVs)MTHbvL#9nSA%8PXCYiZ&@AtV#6Iwm1m&4)kayUouAAB(~e&p=M z+5X&?*b4_Vr=o@Gj$O zBslfcWhSQzU!ER5{N@I)0B#f)S_eNI8#^+P-}~Io4&pc>VKiG?Q&UF{R~@=8Q*; z)ID80p3h%8_uWbT@rkil|C|wz3+K2#w+etmaQW&Ydmd@!?|&93%vDfIgL43M=F(i8 z$mG8nJ>M=~e)rTTJ>A`d>4aQQLRw8l=v_?ybvkvDRp^y*j5W#f04pJbb1R+2OuH4+n1DsMw z;eoX{Yr$Et4&f;Tg3GcQM+?#Nt^6-m2A9OWDWCD+D%Fq-TvVlkH zwt*Co4Gc}Gb-uyZq>_g1Ev|Cx^{0nq{+aD7Pqgq}TgK6t^k@t``Z^nUZFdWE7fJTcZ~^P_~g$Ar_1t(_O17!jE7bVa72-%9@Utiogutc>>qyr(D?t> zxPi&Z$?kK1%)T`>Tiu^Y2fF~Owc4*8t>$cgXYSLE`#b0E)c*?=RUdD@rmGhK0000< KMNUMnLSTaJnX07# literal 0 HcmV?d00001 diff --git a/html/images/keyboard.png b/html/images/keyboard.png new file mode 100644 index 0000000000000000000000000000000000000000..cdc03064ada7837d168d4dff815c3eaec80ff8d3 GIT binary patch literal 343 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6I14-?iy0WWg+Z8+Vb&Z8pdd@S zqpu?a!^Xav-+_~Xe1&9>AYTTCDpdxChGqtapZ|gMO9qBg0|tgy2@DKYGZ+}e^C!h0 zbpxtB>*?YcQgJKk&-n&<1{MKf#!9vZ2Bj4Y3Jn}u3>*s6>^3O>Gd5`QWK-Z(mORMC zz|_&&xUl0PYnNQhBxN3MNua<>`+%sXhXx|@jE|fXqGUQ8ftqJHu&rfV70Vr3)+dD8Y`dXZ6FlZG#xjI|o9djg5O%X$)go#dqA`>H!jvIz;=F|l)Tfu#R@`}pnKt1pLs{9;(n$ilD%sP3ob z5{N#40AgW40PcUk872uT3CD{##4~fM*fB72@iH(lGBW)C^qTwIokPLT_pJ%jhyFD=RTG z&23J4dhNqQpl}mN4j_Qw2C%X-6pGvEGBAjWGcbHS3N{f1FfubRO2{zCIcPAvzIUP! zW&l6{A-urGz{4y6bk*lGAWt)31%G)MSOh;ZFtRf6z=Qw-2yOt-wZHzqyUN1I^@o9h znFHv8|7b1%2J*Kb4F5hoV)*-?0q#720D>Fv{WC+y%PU`-Bm^!oFtD&QFfcJ9G=t0n z8Tj`n!{hUR7`}aE=z&QA1P~M41%DW(KRw5A{_AU?3s`_&`S%5Z{{u1WSBB3o{xCc^ z$#5R1b^=TvKmfrF_|M4j=KDK_ju#h!Y@h=ectH^h#X$CdHU@@AXMu6|mZ1X}jc;K3 z00IbZz~6sBSF7>N@gfEZ!fSzcZqk#7F~ zx7F6xNmf-=4LNY&;Lpd8AI<;#`O`+A)M1#KKYt*B1`uEXD1``7@-9f-00000NkvXX Hu0mjfd9P)B literal 0 HcmV?d00001 diff --git a/html/images/launch.png b/html/images/launch.png new file mode 100644 index 0000000000000000000000000000000000000000..da97aef509bd6411185eb093c79581b870c21161 GIT binary patch literal 1263 zcmVLEr`h!~UlR-2cDL%=rKN)T;k~ zZXNmmSefBJKmf6jYv@^^p}&BJO8Cea2o=>ZF!G5pFtGD5{Qv%$;oBDm27mw}%iyC> zL*>%k4EQ6%8UAt!GBExA#lXbyh2ih*V+^0(GkgFDAd(H;12l9$1H<{pv*-N({Q2Ae zw{JiGfByW<|F6f_{{OXa=Kq^EV*d{?Ff;%J5J@iH0(GfoUa*0nCJ)1(i(44}F>^6| z6Ek4o{_&OJ>!t+^_l~@Jz|6of0U&^I8oY*qApuA!AdCHEVDLAXJ;y*WG@Rknx1S6@ ze*9!$e0`VU%a`vAf48n;xH;|khrbLAfdLE*9{>V~5u2e)85rivs&XX=>FF|vD)2J= z=M-T0&%w*UaAqk3ueve=BNsn7qV9N3V_dF zj0|kTtPCe!OEEleYyR*bXlN>up&$SdK=7dG1{$hsE|=gQs>#6c>nj7p@9zu@EUdtQ z1+w2iW%%>?E5n7&KN*<#m>E<&1c8?PVwk`3-v>sZp+#thf&f4Ofemh9U@!nu{m2qP zcRIMaOEH)k^DzAS^o8NT%9jl6y#E=@>=+nWc?20AN%}J^tDe_b3rt$r;t3#tz+qei zvC$DG2;}!0nMygB*()&o{PdY&-Rg%7Jc4Wt_AVR@?2N#8w@YSVc*o7~3s2Gn2p}eO zflDb20%DR32LBnE7=HX^W0<$_9>YIjP6oFC83uN4V9L;N0{e&Y(@Ss+-~s>vgktdd zB!&V;4*vUL)5{zfG#wdw+m14Di*hrBL})O4|HaDigH4!$;V&>Xe}2Wl@Z~k$%mffX zaD&gpGxQ5+DfeqOZ4ltMieh+i;Q|APxD`T8Dc@N0%2 z_pjhJ7$AVa2A_ywaNv^UEKo?SU|?qZ#qj>#6$S-6V}|1EhZvqcz0ELx#<>qae*D=0 zlw@G|^NZofvj+_8SKs^q)Vcwe!2kgSHuΟhrA2?hp6U=sWLmO)ZSl){73>&_G`)vqRc9DUVgW<;?R)+bD?|=CIX@dk?D z0@Lp!hKF0{fGpkE0*}2yj99J_efGJ+L^a8_=@4rEYZXi?=0t67tzkdt`@=p8=e_rfm`26rQ z!{_G=49|h_^5qTKz(VAz4Ql8DVv1OR0Ak$k&+wj+5$sh^WLyAd#fP9sao+&(KDhuO ZzyPZjou<%|e$xN|002ovPDHLkV1l1lPALEY literal 0 HcmV?d00001 diff --git a/html/images/ldapserver.png b/html/images/ldapserver.png new file mode 100644 index 0000000000000000000000000000000000000000..313a66152b98589fc5ae888a8381231646403e21 GIT binary patch literal 3276 zcmV;-3^VhIP)CvT6bvpc z#j%4)Wd=G1#&ih9IMh(vG`4Fyaj;_&Xkg4h{D&q93{wx(RJ;luB#L-NfQ^KNWRSG0 zU7^)uwc6Kxoc^&-nP+UAdRqTx?#$V<_n!Ox{Lb%jcHtZQ#=fy{?Ei%wIB;^>{{7X3 z_j+CFs}_Fv@Ts!4Hs{gn*FE`?BvDjU{Pcnav-f=M0gfI$GuY*F9dfx`lX7#18jBY{ zrJOo-UQ|{dlSYp&{ZV=O+;_j00LPD?r@h_z?@nj?-1Kytxp?scSygQS=(<5$n~Uw+ ze@k9o!Ir^;2d^wI|I4ojKy~#++S^?pxZUohrm6GnvrmzeGibm);jo6L>F9cdH{RGp zPEPj6d3l9@wQSkb|9b#6HJ5O^U9Y*_?hT<(hW6&T6YuEk@ zg9c@t&(AM>V8x1se_VjGXB%+2T+d&>?)g=3uaCzcf0X<0FTLY)ot-`Sd;#osm4bpH ztX}=kWMnw54<9~a*s4|Ke;j}lCoaxvY`lE1ySs;J(AVd^+ z;>2(B)?2^8>Fl7Opm5YHul#-Umj)f4bar&!R2b(AKF$nbUDNGU@8-!8FZS zGD-u)nPzf{sHS8dNRoss%NT}1bF&j!mXKxXmKz_3C@CqTp`o5_+bSq7E?Kv6<4Zri zBS2lm*G= z2oy!8v$Gekw-<{=xdHCB2qFrRn>&~hBXU@}bS*hK*$0LU88&D0<_!bxl>xlo&fLDf zKFZ2Uuv#Vj{(i#Y2$6_JBx0cJ(JK;(#O5O@a|YqC9-E7x>l%h((%$aH(6TG9KRP7n3&sG!Ew=1 z!2?A{!Hn38O}e`JaJ#*jrnoEN;c#5Ij;_Zq1H&-s=ic|m# zfMJ-JrjeLb6p6``$5K=CDS<#F76Q@@NjfkO;#+Uh(&9o<6e1Cm+ga+f=I3rTO@XHA zND_=4Ta2pOm_7Ru4j-$=9&seeLE%_aPPKZ;_xA&v)@Q3*wn zX=&+*IYitx=FOY3MXOLGq608)+_!l6;R%UvHBCd;H4{Q3V0s%=MFE5`5F)ywv&BVT zZa%^^>Fo3|b?W_`JzJ04?ZslTCaO^~nWF<)mIwyJF<9lM;*&{!W6~yt3&xKx<&j4o zxXJSZ!!Qgm?VzQGP;v+SUOz82|A=?X-X~;@(9+`J!3WE@aG{CD##U6-8c&@8AtgyN z9Ua|hnu%fD@a`1gfgX>CiY!Nk&zSKL!C(l#KZwO*!EU#vfW{AtQsSg&i7lHbi$ysj z*)(|*eI5O5^M61{icnwQLTPCc4u_qSCohqfW=oZZB!R^OJw5%gvO6$7ZVZ>C$0bQ( z(xlNm_Sj^+-X2<8J=knk>~<@PB4Ze4?C1ePn6X1+(&9TH#lKL}t$gUNV6m^9Ymuw` zN6sOFVJDX_U!$;a7&B%(NM+@JW4Eg)iX7{>CYq)Y3Wcy*l>yy3bq7*IMUo^YPW(1A zW;}?~>EY6)W^6Vas%njuUV$u|SS(2Z!w|%)W!&VbhYTYgvpt57`Jtz&j2z?0Cx`iq z+DA}LJ3^RTxza{37~*^1dyKxm0D(XVO^d`zYnVtRUc>bPm!@fi!x8-cAb~)T@#9Cc zdi66D7Upv5)Fr&$z8JKL5GJ~A#=IRJCx2Ur8+Jej$jlscFg@LIee>p>3>lU|x9DP= zZ30J2PSSF%HP(nsz~tJs4w{>tELk#_P)H*X2q)@yB%%`zYl*rZ4r>I15&HUq^!EoD zH*OSb*DfMAcMyjUpTgturo^|2t`j?RMc)@4$04HSU8Ek!;s8^ojHS4^c$mYHac0Yw z56K>!K|t~|OwH%trW~X@)RPbiCLWKM>go$DUp@~>g8u#hx^7|^@usB_i9|gf42Bsu zZWQa*Eg>f-lU=)x(AwI8EXxQX#lj`&bzLVmj&@@qNE}5jU1~&86cZ$6006*uzxxpP z-B&a@Gc#lF)~!3q$W&46GJ$ZAU?dn5WuoiRA27YWe)jFFX6e%TWMnw-`2t9iL?{#w zl`!A=P6@BRx`ga(2iv!QL{n26R%^5=M)Tpua1p|cl}ib`UB%(B^U+6@Oq%pKE>}Ap z9lkd}b|g#4=j_m-Q@GvjzjQjCE1!IF7Lt_4)vGQfiP*O47=}nW3TP}`IE#vkL)6yR z)88Lv^5pw@=9w8BIdX=xXB)`Ma^P^-vDuSBOX!SO-H!6;$2&Y`bUAp%?4xFK?VV^I?V$FW~(724tC7 zoTfq;^!Eo@v}iWHy#cbbGuXTLIMvk`$jZtfBO?t}wIxcU)vCnCQ3#vOimF<$TCF%7 zc1lZ&xpwU;D_6dPqJR+6hbK>7eJv31TfmwPw(Fo?g{qtHK&tK9Rr&q;`pdhfOc^g8 zcwnM*^yq11S;92q+pME$0!@q1)#YdX`bDf;_pfwy`N+=Bz;0J>>S>!z!D_Xls!^}2 zs!CbeNDL#)>eUe(>%Md6TGn~JU16~0fUO7ACa4-vhAg)OSg>Hu?uv?!r`6Qd zR(Eyvh`Dp;NPG4ii6vkX!Z1i22J7puQdE?OX)>USSS-o0qR2>+i7Xow7Z);YSQhKo zzbTwfmt?cqs~Q`-UubD@c7kmPWSF4VLY00qjkg5=C@-IT;@7|aXmmrvl`FlyyLj%o zXW6-PZ>+ltOw&k&Q#`EFPS{T3g$!-QD58-n;k2?7F(vUdS2(S&eY|lRJsOYXE>{ z%bw~jC>SaE{UO$`f14F6o+LfpPJe$e0Rf=vBBdF{g@;j9I|~=iA{6Qr&po$_+S-eu zP{>@ed-t(nXU;TUgY-PeY=P6YP}O(0y6zePV8x1OC@3h93`6*S_`_Fu{`vXj=MTZ> z3lI)RfN0$7xpOZ5PpRWgy_a8g<$v?KXwgthS18N_rSD?!LvhTa+0CC%}Vbgq{&-a5J zJ1SrH`L3Iw=72p2Y9mx>_geTp2T0nV0%8JK8=xxqRSEw;WB&u9go$fKspPEy0000< KMNUMnLSTX!J7%{4 literal 0 HcmV?d00001 diff --git a/html/images/ldif.png b/html/images/ldif.png new file mode 100755 index 0000000000000000000000000000000000000000..ca164a12a854472a7dd86cc5c076f60b1484489c GIT binary patch literal 2801 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 Q$ao3@e1g31dh%ue110*+@&Et; literal 0 HcmV?d00001 diff --git a/html/images/log_critical.png b/html/images/log_critical.png new file mode 100644 index 0000000000000000000000000000000000000000..3240b29d5c73c3c783d9352d4cf0aefff0c5f4b8 GIT binary patch literal 745 zcmVz@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZ;Ur9tkRCwBA{Qv(y10y3N13Ea(z!1Qus94WyXJ^2~ z$H(vwD0YA8(gV)#-Z{e5fb@a@KmZ{as0J9^wX^&G|Mcnq|IeI(3~%0GV4aW?&}aDg z_c_D`Nci!qR}5bn7$$-ZzybgQ2yBRM;k6I%-hQ3P!StEootZF(As>N(oDPgJ1{?q& zfZ(z7?=QoI=NFHC;Bhf$c*pt?VF=I_-+%mIzy|;V2yTc)^|cSLUjHg&`gE7!S)d*R z!~6GO{OQXVh8sVBZop>9eahW)b`80PmPr3rMsAPf*d z7=~;v)l7J_G3x*RNg?+c2mqKN00D$G1MX|kzW?rg$N%}M8VST00uVr0ll`kVe+xg{ zI?kYGWmnHY1ONyitS$k8omFc4U!Q9FKRHIdfsji80*DEhg2ykJ8c*yv%WFU8GbZ8({Xk{QrNlj4iWF>9@00Rt3L_t(|+GUeXXk29& zg`e;5&Ye3m$)rilq(+TRjHFsqtJYRfCrS&Ix=_=FE~G_-ZURN?!j-FR6bT3-h+PyB zOSDqdU^c~IwYVs)MTHbvL#9nSA%8PXCYiZ&@AtV#6Iwm1m&4)kayUouAAB(~e&p=M z+5X&?*b4_Vr=o@Gj$O zBslfcWhSQzU!ER5{N@I)0B#f)S_eNI8#^+P-}~Io4&pc>VKiG?Q&UF{R~@=8Q*; z)ID80p3h%8_uWbT@rkil|C|wz3+K2#w+etmaQW&Ydmd@!?|&93%vDfIgL43M=F(i8 z$mG8nJ>M=~e)rTTJ>A`d>4aQQLRw8l=v_?ybvkvDRp^y*j5W#f04pJbb1R+2OuH4+n1DsMw z;eoX{Yr$Et4&f;Tg3GcQM+?#Nt^6-m2A9OWDWCD+D%Fq-TvVlkH zwt*Co4Gc}Gb-uyZq>_g1Ev|Cx^{0nq{+aD7Pqgq}TgK6t^k@t``Z^nUZFdWE7fJTcZ~^P_~g$Ar_1t(_O17!jE7bVa72-%9@Utiogutc>>qyr(D?t> zxPi&Z$?kK1%)T`>Tiu^Y2fF~Owc4*8t>$cgXYSLE`#b0E)c*?=RUdD@rmGhK0000< KMNUMnLSTaJnX07# literal 0 HcmV?d00001 diff --git a/html/images/log_unknown.png b/html/images/log_unknown.png new file mode 100644 index 0000000000000000000000000000000000000000..4ed65a97e1322b1086f5771962d5240cfaf0c178 GIT binary patch literal 746 zcmVYGbVe#Ya5m@izUQ2mqd3F5h9o3HR0K+f)ZB-4cvJueF_F$hgefx5e2Mlx*QZpmNaAYqiW(*fV;y|ZG_2Ct;8R93tg>>T)u!Y z;JP-;zYMS5TYO!0657za@KWsqSY-esOtxRr@!>~swV_0zSm0WdkG5tX^+83rPI%U1 z^B|Uui!fR4v&v&%sFwJ{PK)h5O(bLy3H#W{z|So>7qq#4*+;%$xPLo9v{A<+1JYLk zP%zlpD(vSJ`J!;X#$opWrWfGLGR!RI0jLeyq<0{8MI$f>;B*a1$gzpl_!a9J@N9>b z4fwVS>lr{7xY1|;m|Zfw{j4zJQC&r>xnDw#2+@FN*g3S|@MxabACC7kIi7SwOW4oi znqg`dj2zv)$^|VFb+iFv6zSjp>)X>&q$ONKYSr+33JTgn9qT3t2slPaWs8c;0iXm# zAp%CAwaFu2gct7=MXhk{6M}=BfJn-k8&T=~Lz2b_779y&ZGmgU%(6pb4zy8tHWf#N zovb9+#+|eUpbcYNdxmoXDqd5i@!L5r))%P@@>gzkvxJBltH?M%swRGH+KJuFVWp_r zr@7Z2q@&FxRDaUEv7KcpO=4}_n*eaiJ847j^mqT{%|b4ID`MjYJl=c+&jH7Rpp)m* zf@XHbOMvvA`AjVX(&t&F!AL_c77X|SA+w)lFjvIz;=F|l)Tfu#R@`}pnKt1pLs{9;(n$ilD%sP3ob z5{N#40AgW40PcUk872uT3CD{##4~fM*fB72@iH(lGBW)C^qTwIokPLT_pJ%jhyFD=RTG z&23J4dhNqQpl}mN4j_Qw2C%X-6pGvEGBAjWGcbHS3N{f1FfubRO2{zCIcPAvzIUP! zW&l6{A-urGz{4y6bk*lGAWt)31%G)MSOh;ZFtRf6z=Qw-2yOt-wZHzqyUN1I^@o9h znFHv8|7b1%2J*Kb4F5hoV)*-?0q#720D>Fv{WC+y%PU`-Bm^!oFtD&QFfcJ9G=t0n z8Tj`n!{hUR7`}aE=z&QA1P~M41%DW(KRw5A{_AU?3s`_&`S%5Z{{u1WSBB3o{xCc^ z$#5R1b^=TvKmfrF_|M4j=KDK_ju#h!Y@h=ectH^h#X$CdHU@@AXMu6|mZ1X}jc;K3 z00IbZz~6sBSF7>N@gfEZ!fSzcZqk#7F~ zx7F6xNmf-=4LNY&;Lpd8AI<;#`O`+A)M1#KKYt*B1`uEXD1``7@-9f-00000NkvXX Hu0mjfd9P)B literal 0 HcmV?d00001 diff --git a/html/images/login.png b/html/images/login.png new file mode 100644 index 0000000000000000000000000000000000000000..01cb4ac74f16ae969971c4bea0ed8eb563027ced GIT binary patch literal 9533 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

BIE%r18E;8!qq z2<8^=w?6Z=2B;=H4=7BGkejxDYEYXpG!vo=yXvrzvA1pOme%~|lUHx??;k9GjTLh` zdVjTQvF=QR&zb6HusudRdnB<-$M)UQ+Q$6+d_h4$M@NU6kl-oUj|ZgFp*fD-RV%OZ z_e)8MdAz+{g0xX}7n}CD5_gNU(Z|j0%j6>LOV1pRYE%=FIez>c>_n#RnM_dQ^!4;4 zPcHgYS+yRkA(I9+uwxGS-D}e&Ly?W6FnVk55|<%EgBQW{LBFid!{rFpe;r@~Isac!_2t{&OqrHCvMRUn$ zYoi7>uOC@2{GBhDtbe8~Dk`d@Lw|M-_TypmUph1-B&4~yIj0T3OsIk#(M`O}>72 zIq(sOeI@*<4Xx}B{*NT{h}wb?n!#*IadEDpaA%SDlWV)5)LB)>tM1&)Q^BfZOe~K? zKfj2{%(f>P6+C-Ekpm5MmCVQ4n~|Np-6Z1C{fC*9iaZ1SNi$Ns!Pkvp>et7XZdgDI zmND@sAf)AsBRdsO;RB*|MAXUguHyF$%RFE8$SycO#h7j=Dk=GTd*76_eqw;$-+p`P zUHp~I>3~0uY{#O#ECe{yO^l5ca37Yb^4r+x@F2-bs}7epuB zziWSyY@LH?FfpVgW*rnq-`)_$GMBaUuOWQx$FUiVZnvv=I=g^@$I4d3V&L%3u>RvM z0$s37DVsZxkS+7o{pVYs- SuK~7Lk(T-;wY;-d_x=wOJLgvb literal 0 HcmV?d00001 diff --git a/html/images/logview.png b/html/images/logview.png new file mode 100644 index 0000000000000000000000000000000000000000..accbd8d632ab91bd1d77a39c75d3c045221ef13d GIT binary patch literal 3646 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 QA^-pY07*qoM6N<$f}xGfV*mgE literal 0 HcmV?d00001 diff --git a/html/images/mailto.png b/html/images/mailto.png new file mode 100644 index 0000000000000000000000000000000000000000..a0bc51c656609c00b1d06a298eb1f31c49408563 GIT binary patch literal 692 zcmV;l0!#ggP)I_S@67cN}px=lh9LJA3GSgBc-G+;HP0}Yrd&g6BbduQ&sb6Z@0FhN1J>xIL2 zIK1ciKHhWSzm>Rt^|JRbfZKQPg@LRDxH&KYfU<3rP)HAyPzYuDZlw@dsO|3d8UWXB z+yZC9NRw<77B?Z1CEXBhDgR2!BGGefF=RvU%o}YUZS(7k%Cc! zP>v6j5`;o2iS%+HTu?US_s1~JZz#3fv;?5DtB=TmAY;R$q*gwI%It=y6cPolLu~3f z!*@mq1cIDti=t`zj!y!hD;k{&e~*h^dYG=ld6MN)SoyC zfKe)oLHT^1AQ_IIYG5(8!O}vOCnFE2K6He_W}JBJ6JJ-;^j>KpysrksFmP2GAw)4q zIX0AqS(uyR%d$!PrCzd`HD)HCl3raW+FXYospZwgBWe%Z9BZuSd)hE$Z`;8t7!m*g0000 literal 0 HcmV?d00001 diff --git a/html/images/members.png b/html/images/members.png new file mode 100644 index 0000000000000000000000000000000000000000..8f69e2b998bb897869c8582b3fdd7836ae098a5e GIT binary patch literal 868 zcmV-q1DpJbP)^ywm&f$DH=SVyN;bVc}BS((D+0z{BHu6T{yRkFhPJMm-6JYH@Ts(d9%OCyn zp_s@_iYw_!aV2wAjHky%|7hP?K;{1V7w^eD^KgLWX`9*8mEe$mYDrq;o1343WFrJ< ziVx3#_aJ9D#x1_s6sYSyxa;VN1Md&STK3^Q?_8P~xOTSgo!$$n&uQ}NxKx4TK*5Bh zoyXJ4E^|}Bzir3y(GR|V{m^4k$+19^*c*H4*@jEoIA4AdUrP$V8>$x6O7KukCbLXp z^M&aCSKf%U_eLk@3m}025TI+ji5e&AY5JH(-9@<~5nr`g8Y^F}{^fkNDG+XM-I_Hm zEXTp)l0kr3bI4j1g6tt=93VgmujL_aSfuBE_zlPaC;;9_=bn8-!+RTbsMj_8J{3)s zv1=-}dV@fHk>cMWOfyW-w}o0~zCSs&@`sb*cLg9fKQ+_XvGcj7p6H2mL{uWWii*bd z^m%T&Mp=`mS+QqXsm+iq%}{h3k_eW%b3chM@1;=A-b$=xjFgGL3LsI=sU%ZN)Y{?* zuRxW+alovCWkUTayKXr1X#qW?QS`^AQZp}fL`&iA|G`IguH~@YR zC<+Jx-k={lp)9M^Z-4aZk=I_eg+)AXBg-3}Y}2BqLX$W_vviI}q6tjfjj`^bSn#o$ zw3xjUFRGnS9y;97-dZQC6+CVQm$s2(#S&POLt{e=cQ1@&SIpB%%kqkBs*+p$^X}Z- zgz;nkjy07o}QP&<|)h!JT~2%%AgxRu+w!YU@IZ+B-mcV^zqyqWjw5Dw_#_w)|$_xZiw z?=|9d+6D#&Ui-fPJ)KTh5{X2tP$+}|2WdM*$rIG+(Sr$B3pjwl7`Ht}R zlL@6<6pKZq)9IFpiHYY;O-;!Vm{{!20xo8p*I;;Qy002ovPDHLkV1jn&S1JGi literal 0 HcmV?d00001 diff --git a/html/images/network.png b/html/images/network.png new file mode 100644 index 0000000000000000000000000000000000000000..3c5dbdf055296e30b225a836fcb3bb1267c39e25 GIT binary patch literal 894 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 literal 0 HcmV?d00001 diff --git a/html/images/openlock.png b/html/images/openlock.png new file mode 100644 index 0000000000000000000000000000000000000000..3a1a0d34efe6d96efb2438dbd7ede8b9871e3cef GIT binary patch literal 923 zcmV;M17!S(P)Z$z596S=g;4!{P^+X z>91eE7#JBD8RpKdWdH~u76vE)@)`d9`zOW2!#O`H%FRt(T@J|q4K(;40}~UI?2Q{w zE0!(Ww@9G!2QYmA0R%Sy=m4NX#-7APA2%5pVTR3{5B$Gy;r7)ZKYspGSC>`y z@GxgjNbs`g>svbU_iqM&kcA)s5I{^I0_ZG;4b( z4FCurumPD`hZ(j%Qr^e(=%N8AC`|a-ew#}?XVBz-$M6prh%wR|85Z4hV)*)-h2hov zKmVlIU;NA0y#h7>Ab`LI@Us1hPBXY|&cMw09T=Pp!0=)G@rRk^$3GshA{C*pUjrF0 zXbC*|#lZIcFLRF7{VYEAKO8`*H2?twHsCW0?;`z7CnhG=4-EhRGGGNtO#c`d{(NF! zU}a+b|5eNL@Pza3Kw)Np00JBE^22W?W{wNM(0mTGorwV_07-oVy70z(hL_J-!3qHa z2yDQ!SHBq;UIR^k{|A($&~zb1_%EO9gv*&9BvFhBr-4S4qn7jsHLxDE|d$_)B2ie+BxH`5(i(&;P(m00IbX!2dr$1#f_wKLHJ4WQJ(?15^MC zk3T@-7svo04N~{}AJ~BZ5d91Q0R&0PAl`pQh;6^28o(O=K{Y`Q1dD?r`Y$By0|7t) zferY_2&9fK$Nu~O xKSro#1}KKI|3M67ggB1%^>^lDAiV$q1^`WSZm7K{A*KKT002ovPDHLkV1mj`tF-_C literal 0 HcmV?d00001 diff --git a/html/images/password.png b/html/images/password.png new file mode 100755 index 0000000000000000000000000000000000000000..cfe82a9350c120fde7fa1eefc220cc4db5d92a30 GIT binary patch literal 3316 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 literal 0 HcmV?d00001 diff --git a/html/images/penguin.png b/html/images/penguin.png new file mode 100644 index 0000000000000000000000000000000000000000..a99e611791227dd77af9ab314081b11f7781ddbc GIT binary patch literal 964 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 JPDHLkV1mTWB)tFt literal 0 HcmV?d00001 diff --git a/html/images/phonereport.png b/html/images/phonereport.png new file mode 100644 index 0000000000000000000000000000000000000000..702b89846ac86587909c9cd16d70156a662775ce GIT binary patch literal 3125 zcmV-549fF~P)(?tRPblbI}&gd~#?NJ5dYg{X*t#R39C3?e⁢L`g+e0l!g@V)t zPNbHKAfT4TaxjI1a!?|O(exM)0|O$$lK@--8uA+@)2Bvre2Z=gBY9oNC1tjVKWDhW(6PTwN znCuCBr#1p-8FUsIBTisLxQbMs{Zuz+>%Kb*KrYHj@g3W`f_WU1sk>1NLpWnq#dO4OdQgf0BKDB=0XO1 z%MTcPNK8)q;Z_9WIsED~()oi^fssc6bHJHmfO_nd3s2glo3-irTLK^z9MH>Gj!q@l zzTW_hMk2kXl#jcABT^Z5sK-9n+!k>V0Pr1Y1#7C@+jAUmj|&4vcQDC46*wLcCjubc zghTo-<>N;0QIAU6qm#3Y+F1?ckzjz~&)LfX~;jvS{ zX!rWQ3e35EHX{v1{{LL~U_i!*2;F0UuZ6Cp)O~1N9Ym_n?;_O&W3bv-j?LB#VbG*J zfOVa|WnRZ{Qgd;2hsU)5&}RVHl9)+d^~;&382|uC?M2{?;mZNw&j0}UruO*thB@97 z+m|v|LpHhg{TQSREl2wBhjnw`|6E9z&~m2}AQv%s9a8DD00mejSHFAIcXD^+O#!&G zSI+{3US*D|iKMz<6b>7Bk&7HMQ@`lL;x=0k?sdjg8-El4Rm%J(KK8x~NTm<>4<{tj z=4;D(1mMlvGK)ECwt&x>EnoR^5)ySz92_@CJ7vu&zji)Z_KI`+6L0qh2sZZX>WsCH zjSn4mWo69jQ45jDJDKdg8ZglokS}FJw*Wjx*IJdb<1gXhShrG=`#cc&Dj+;cJ7vxJ zw!|g6vNF~JV@pXx@lx-R*BhNXX8&F;%CP_dFv;oajDQPh_S2Wfx4b)PoAlkz7n#>S zi7DPqo}Beb-2o7j)5#AOxNxmB|xs7p6$+F9n`H4iMkG< zj_H`>R`DI2HeNcjcRX|3cm@oRJ`8m8w@(Au-l6vSsuT(8(bqK)U_=2XDc0-u*-opC zr93p2-qSUA93Wk&0RZL#z}CJvc{>2)+UYSMyT<^q)_t|+%r1$dhA(AAI>GFff27X( z0k>4otBrt-k$bp)L-%VYzPzvZ34#a2s{>B#{BU6yFt(9Nt-gZIu}xgafP-Dp>gH^1 zQa$+WCZrC!R~Rzm98w$WZ*`~;$($vrSQwg~iY-ZtZ^k^eSGKnxM`ac=$K?Ap zfKAb}<(dnvHi$3)k@gBh(@z4t(dCAMHI)K@4FHCDa^8GYzLY%`B+oN9_5j@qFEqZM z3y$5$$B)}7Ca0D61~REScLRP5%;&5S6CZB!Yk=Cyp1#pxxTxU{!J6vr&E}d3fBBS) zPEj*PdMAHgrRJhW*7TNnxhN+EWUo2EpBA{7QGq<*JGncN*vj+){m=>_=~o~1qB0%i z`cKA-&Yg3aQk3%~klq!Wq~@Z*_synl&Yg2Nxw0}+ZhFqSkLLnFOh5vtLL4&vBR>G@ zs$YymZM>g<$<-tzOgPm;gD$u~TltuL;oxpkRj`)S6#_8YC+B6d2S{Dvv$U~vpL5Ue z-t^?W8QG1HtgNMOB$ESq44bTe{&)ZYT3ZO9_Mk?dxR zx*Fn;Ru1;zpyofG`s9tHp)^@YIt0Dw8`oJ{t1 z$vjf&0g2i#J3ZH!6>P9nbQP_b>;WL&cei5p`D%XPxLl+O z9w81*&jgjBv;8otXdYRei!F)MIJ5Nu91>rRcvTzl$ZDi9ZSPPOgn4uS`6}}|{HBA{ zLHm%#w7o5a2LND8QY#3*p2S#Ep1-g={FH`X~1t7l+QAheP7mvc}t~l)xeJKy6n6NqzQV#wfEUc zJu#)5v-MPOmSIMsO{>1nX_KqW(~mifAAaC0~v?AwC1*k z;Q(+#Rr}hb3aF!c@lQEvcDy|<1&Ex*6rVrqa^~18NNrdqCZ|<(3jhE>81%@wj#C!q zsGjBd>a7o?f&=P4B`Ke)h>N(Vw!^Rf<{iA42*46sa|i-#urwj9d5U(*n*5v2MqPWJ z3a4&c4YifE|3Dk;76wgzm$M|T5tGyI=oCUO%CY*6ZQVuci^n5D4M@~aHav5#Wxnf2N;yc%|1bt=gXfTj;>EQ28i#}9 z2p>ISA8oGK#zl>&V2ZlUiZ;Sw&q5%-zgZ1In)ZMs@ zHk5!cc-nK?X|HYW)BS+&`1@&caqc!!bKcT56$YdY29Q0ckjl`=$BhPL3~%A0N3Qfo zvD!-$nB-1V%8mnVECnR$hBBWsg2`_17iQhInLz-I0P{Hk8!UP1sjtlttf{s>U2w?d z`N7^pt6pKgmZhDV_uDcv6aZ^OT*w%nhfOh{6o1VlQ8$DsJ`3~O{UDL30~|W=ud1=n ztre`Pq|X-|&fULV$vjQz)KNXMw+&0rm7oAz*nn!n%L29oAqzgUGS(4JVGcwEj3_vc==j1bcqZni3So5{@q@h@aFc-v# zf}qD1615g!9M2e099SFd<>Kxy1+OC$wC0Q2$*ZpPa3-d;mm*2kxe%rD3PtpoLwE%;SV{pv5v-}raChBZKmYYV!7M;~UxCfI P00000NkvXXu0mjf>3`rS literal 0 HcmV?d00001 diff --git a/html/images/posix.png b/html/images/posix.png new file mode 100644 index 0000000000000000000000000000000000000000..e8d33ab4e72d3216568149c7ae85970ef6409f0f GIT binary patch literal 4083 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 M07*qoM6N<$g5Z`rpa1{> literal 0 HcmV?d00001 diff --git a/html/images/proxy.png b/html/images/proxy.png new file mode 100644 index 0000000000000000000000000000000000000000..d8cd426630d219ceaa225bcac93d12941c4e6663 GIT binary patch literal 5227 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 literal 0 HcmV?d00001 diff --git a/html/images/reports.png b/html/images/reports.png new file mode 100755 index 0000000000000000000000000000000000000000..1d472379a0fe7915c1280848756502333f4b97da GIT binary patch literal 4298 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 F{{boYiWdL? literal 0 HcmV?d00001 diff --git a/html/images/rightarrow.png b/html/images/rightarrow.png new file mode 100644 index 0000000000000000000000000000000000000000..dfac4c15d262b5c5367196be35796c0b9e391a45 GIT binary patch literal 863 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 D)i(w> literal 0 HcmV?d00001 diff --git a/html/images/save.png b/html/images/save.png new file mode 100644 index 0000000000000000000000000000000000000000..6a9adc13ce726f6e31379c706b7e8bd15a0615c7 GIT binary patch literal 595 zcmV-Z0<8UsP)z2EII1t zv6KTi=X_hKK;(-m!mIc1))F1wys>JuP=N?_93LETG$)Z2s+CVG8ad~v*X!JW@Tjn9 zS=DNFJCTS`tJM$@LFd(O$aG--Y;O)@KNDuzwwSQplAR%TWd3hVSj zLGTaoUhpqyK@i-{`Uk{aD1v(D&6GkZ6cGgRV!Ln%V!L*$Cux$CEx~v9a-L9LF>J`}?|HuYa<%wDh)8Y6Qq`w;Qjmt$mgx$*)q%)b{rF zUqKMGIA(Qq_5C0Sbi3Ww2L}gHzu&iE7+R&24a3kzQDlAJPxkiqqA(0?v)TLw$O5u!wYwevN;`udyAFK*v{2e6YF0NlE{a=G%-rObo< zkm8(!5M#RqtOaA?@5u1Mhab&jpdsUTauHfisUP$ajGQ>)e^;O ziPGs=+GYwl{bF&sasA!ne-a>|GA(@*FZ*k8(amDd$p}@$gl`+}YaMO6An${{(L=y=4&SDB@@k(NPg9jL0Mr zSrg$}jbp~aCgh71adqM9jmZ|$*_pY8S2ASnV-llCg&wKIMOe!TU>Ydt80{n!UQTo7 zg&Afmr_W3T-ENmo`;c;0W3A=Hlt&?-#qm7A5-LTn6VVPk-06JI>Ywi+6DcPG-}n2* zSVnOIz$h5d3kJyX8coh& literal 0 HcmV?d00001 diff --git a/html/images/search.png b/html/images/search.png new file mode 100644 index 0000000000000000000000000000000000000000..593a56634be3f94c0f8e81383ce3c2ba145324c5 GIT binary patch literal 1023 zcmV|$iZ zGyougSbqLx^nN3t+bE>3!>BCxkAa&5sQCv2!}|}v8QA!^8Q3MwWnO>%IPJsbi+2B+ z7@sjPpc(=YKun*Qc=Om*)EO0||1+qGGco81Ffs5jGcd?Y1HHlfpFvcDnL*M@NBK7s zli&BR-xz-U_=$o60*K`so1n3{7&ikK$3F%kpcC1D{byihWn>WMVr2Ni!^ptK_@9AK zLz>|nD~tQb51(f+v$3JL03d)^{;=_~bFuwn`0(*B!?_>-7`V8Y7^L`^7=RQ57f=D) ze+C8?W+sMTKYsFj{Pcx^l^xXpfB<6o{r>q6MpkCdzrX%6`~&LZ;sm+^=mjRAMq!Wv zK>X|PKZY+KK7RQ0`6~m<&p!-|Kv%&4Kmakly>;p6w|AcyelsvL{QS+p@DCVOKYu`Vp*WKt{y(e@aW#t&EJ8V|9tdJu1q{qg91J=#e`O86ZC3d9 zoAKKBpZ~vo0|xewU;h{Y0suh(zW)RP0s;X3`}v*Gtf|uD%*b;ZBONyh3kU=D>+bO6 z+TX4n9UjUV67*vu|HM)vAr3?K*6%d?{svzE0RQm+00963hy@f7jLghH=D*V)pFN9U z{11!?UT%gD&t5WodiRk*OZ7hk^Ys-H%AxW>I*!o{Y^#_0zB>AT$%~Jy2|%rH00Ic) z1w@npqliaPfPsUPgW>m&9}K^KF)%3ce`4Tyed5-w+wZu=m1He69V{4lKHO5f|M08E ztFO#^00IbM05E2lSXdZ1`FMeOi4_>aUx5Mli$PA5m4WBW&EGFR{M&iz$Sr(VP)|pPJeL6z@N2ZZ-ztzd*%beljrp`oqBR_8Y_y21X_Z7+_>#V)zF%{P*u4WtI{sJX|hWrB3e;F8ohW%rB^yCY}|G)nk{{R0Eo zJ^cUw{N4ZmpT7P7|LBP)zjY0LS{R_N00KyLySy1A%vI5>x-0=0+&1P~K2e88GP_}6bnh97^J7(N1H z;S&&l1IEgmw?7zOy?V>Q%=m}lCopQ?eFBPoVPMcRveE}?(FF(~CQ!ir0U7ciL^DD( z0&V{RRQwYdrAIH`XV|*`6vKFbMIp022}i00M{s z3t)2aNUh$q|H+qA_x}IC{~nmg{sGg&umAr~UwrxB-6!n^P)#)utANx31P~(w4j?3= z=x<`-8Z99qB+JUo$nx^#+drpH9Ju%D#jX87>AgVw2$cE(0tlx8P{0pLEKqMUK(p{$ hApQ(Ze+&Qt1_0CnfN6=Ax^Dmg002ovPDHLkV1m~Pzi9vf literal 0 HcmV?d00001 diff --git a/html/images/select_component.png b/html/images/select_component.png new file mode 100644 index 0000000000000000000000000000000000000000..ef289f6fc339beb1b97936a0eaac2b22101ef55b GIT binary patch literal 458 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP>?0v z(btiIVPjv-@4(4GzCyA`kS_y6l_~>6Lo)-z&;LOBB?CjL0RzLU1O^7H84L{K`IF+0 zx-l>?I(WJ`hE&{2`t$$4J+sw`HTQcpIan@B$4Xv2%D~jYn8ILmZpH1d^5O+NbN(jvS5kOentjH zmkSMf6SyS`PcyR!I5Kx>f7s2S(7+*e;NYo->kJJHN*N4_3<3@!(m=xE^1*Y(@|{LN z1ri%oQ?Z@lW($d(})Lbfx3JVQON=ps*)c&6K@b2z%9{c)#DH?iuY?3T#hk1T}e=pDM v!0?buT3KNq?~(NlKTM~rZSz%hXkcUz`!Pw8U6oS@814+7u6{1-oD!Mg`JI!TT@Mjg8>Qr2O9R{*FT28e;63<-ha%%!_CQc_rdf1PoBLDWoKtU zfUFiEfS4Gt07gbe2B1X@j7(4QS&JhMzxwF|e_+0u5kcU}k29 zs|5%ktOoo6hSKLRzZm}f`NQzsaqb4&@Vqye)gAr;w!UX^Ugfkrw3jhL$31-6oe~?TBavhjLO0NH5Y4<-Q zijlnl5I`(2IUa6SL~aCPaG3oEg$*!G02TfD`_{Ypy z#x5Zz$uA?%z{ADL@a6kohR25wG5mgXXT#fb>47k{00D$zfO7QCISicqQG(J^oT4(4 z44mxD4FCQ!fbpNd3=BVh{%5#%<}$a%5Y`TdIo?1 zVgWh*&o5Sns}~s=Obr+q*ti)P*rA4iTmZ41k>Ll>W)`3qe*9oy`1JTQ!;ia<7?|03 z82|!^31k2p^FIb|4hDu>cNiG{fBerN&dj!XJGvMhXEjfpa%Q}8^Fp6@;lH=z<|4S4e0-0Ul>efe=%q~ z@i3gY$HLID_$tGrBbOL-{X7}IJ$uN&EhNAI5I{^Y7w`a`$;-pYz{|_Xzz4*v>_EQ) zJuW83$#Ch_Plk`*elQ4fF*7LZD>7K{J!gmyQepV@`6B~B0D)b=0t^ElVBoQ_0mB36 z3TB`yn1Duq`S6!Pko6zKlS>a7KD_(R;AAJ< z^ofCq`47|;3_uqE0}hC}d6*cs9el*#XePtp>Z!-D>((EJth7Z8Ux4xX|LX?^R!(*X zfB*s;@Z{RPh;2*v{`vCxGuRM5s39OPIXNgXT>ZwvaQyZMhHoD}GAJ9VF+4tUoZ-up zM}I!ty?YQKfZ$14NPn6^S#|;l{lW3`f_T zX88H__xC54?k;0s=t}`v4iG>LAOnyAk3!e_*wWqquf6{DfA8gY|N9nR`fuzu|G$KC z=WPatq5||B3lKn9b0eo%bAhqGM4z-IFT?(Qw=cYT@hR`$pY9{rvOGY50RSo1N{aUX Rj1~X@002ovPDHLkV1l6G(31cF literal 0 HcmV?d00001 diff --git a/html/images/select_groups.png b/html/images/select_groups.png new file mode 100644 index 0000000000000000000000000000000000000000..8f69e2b998bb897869c8582b3fdd7836ae098a5e GIT binary patch literal 868 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 YH{mlb;Aq1by#N3J07*qoM6N<$f}lcy-~a#s literal 0 HcmV?d00001 diff --git a/html/images/select_phone.png b/html/images/select_phone.png new file mode 100644 index 0000000000000000000000000000000000000000..b9bc82e02e62f28bd9dab66d89c1dbbbd482596e GIT binary patch literal 784 zcmV+r1MmEaP)z@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZ;hDk(0RCwBA{Qv(y10y3N10j$y_pd;t4O2f0BSXUL zZww6gUo$W~ddH9m5I`&pL;@X=_xsNsy=rj$@ID5I-~xsxANU!*eg88bAb^N6AZ`AC zhm}jZ4Rp0N7``xwGhDs(oZ;i&Zw$YFerEs(AfgQT_W3;nBZnBn-RHj<9^Spfz%FLM z@R#u$!~eg382|!^i5LSuy?(+VB%{Od>(4(1X$?mPF|J<>pI<*?U;u_6KmZYCfRL!9 z1JnPX4BtL|WMKdMmVuLti{b6Fy9~^1>)rv00BhM1)Qu5^S^)pDe&j_4+dtYe+&;EzhroF=Q@L+q~eB+jaml) z0tl}Gg$qB=XZZKa;rqAm4FCT8Wcbg(%y44g4hAtrtq<(ne2E}600G2;BiaN+x&QS4 z{QfoJpT7+Ic{msx zX7=|o{Nh$*xPAWx!*2#Qh7YeEGo0J8kU>~h^@FOpyCJ$}5C8}uunTfmGTi_Bhe6@b zZw7|1AKx&%eSDkY+3gDqJOZM?0Mp(8jIzX)WilVIg%>~ofx|%g$DIQwpK&Cx@bEDF z{{EGLgGbAS$o11(2eEy-75&+QG*9Rd4JkP`I?Ccxcwo9D=+C@Mt%QAeAcP>1 zNTj;zZxKK#75-V_`#yZ%2j?7~=YbF+yX&>Cv!Il!&dzZPArOY4_@{zgF89E7UDjwc z&}=s0`#ypo0OuU8>mr>_XKdSM0D>5k=pX_~XOwe|k$>Z*pxiOH8c z-*>$I`o8*~SYKZ+1Gqy_ZrVnM|TkC_JG(wCCfqLhM^5=toq zK>)@WbY1VK)oS&pX`1(sj*j3s4qVs$>k~9hgRbkyX0ym-GH@KHMGp=RJ{Jmwk+roo z?C$QOSS*4u)|M=#Y(v)z#H^j4?fy91l_yMUYa05JD=I$~V__zs8+^1D)P^%%^KXhX4Qo M07*qoM6N<$g5Z`rpa1{> literal 0 HcmV?d00001 diff --git a/html/images/select_proxy.png b/html/images/select_proxy.png new file mode 100644 index 0000000000000000000000000000000000000000..3c5dbdf055296e30b225a836fcb3bb1267c39e25 GIT binary patch literal 894 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 literal 0 HcmV?d00001 diff --git a/html/images/select_winstation.png b/html/images/select_winstation.png new file mode 100644 index 0000000000000000000000000000000000000000..ec747e57077b68f49d1ec683be19fa57dc8d722b GIT binary patch literal 675 zcmV;U0$lxxP){fyuD!ed|4t00hQ!Hd{3XvP`6Unh?iIKZwe*?6m2Y+rRsR(~KxVwhoOPt~oD={ULo4FI{Hm{&4 zDw?9BEBfM4dStQ&u;0GSIPYKddEciAM|~QkWZTkMEQw6Pi#=S}(eQ;zi(!&7QtyCT z03mJ#&voXiUq7LS0w{VFD-vSC*yGFIG#~P?TY>Az0R~SE)W4wZZ{h`YN?rZ9ai}^4 z@-c;Fy~36a6$g9)C-fAVXm>sE+!|oZcKIm=i6gn1-oi4!;WSKPm%>zBK{66$^&meP zRQ2&X;MtE>N}j^{L4c;PipnZo@d88fI88epxV}TWv7MOSxY&PoXtoA;^17TIe^t(` zY)G_b4Zj@1c6Vuu=DC#KA-fmBcOhYP5Y|p}pEtEH2tn>*t2(?^^a<*cNI)Uoyv#{+ z7SsHU8BxFnPh=4U>vv%73lgT}T92R_EVHrg(AK;}i%|qy!oGw9aE&u~T4y~VBx7oT zry*UEOvw1{ejfLxs__N^*cy~o@J%##dCb*rOdj^?rVKDYw;2US6UNkNi1~~rR#1G; zHr!tms&pol-ud6h0*5KCTRB-S^vTLPiuAUDd&%=Rt>ZfXoIgEf-`)w}VNU=6002ov JPDHLkV1h&NDdPYD literal 0 HcmV?d00001 diff --git a/html/images/select_workstation.png b/html/images/select_workstation.png new file mode 100644 index 0000000000000000000000000000000000000000..33df4ef938ac9c6f4fe7cc0c29dfe43ae3877495 GIT binary patch literal 817 zcmV-11J3-3P)r0x_7B6f(|?yng-0r)z6#-#7rv@4oY1H!1nw z{VWEHRM;FXFLiVoHoq9`K@Q~LdclWw2SuD;5`n{Qki09;pz!%obd-(#LXj2V5- zW2BN(C`ybmL}AYHla%&RNZ5<{`0#{0PbGi@pp-%?N!pLlaZIc%=oH6Q7-Pv&O&Vs{ zG($%TVZTqNa|QsZ6jDh3dekAy1=Z>ZrIL$M60l^MAq*3m%^vY_gfTht^i5AM5CX?_ zD0&5wSaaNq$Wo0|5^Et%GQuz=4pXEORSpGLFvJN4O(k-rpWUmh!R3bDxT%2dmNv31Q;J5f4N?--%v`Z=@+NY zE?-{0I59C%NRkAT8?3eL?mY|}ji1*aKW_c0b?!78jqiHB-meU6X=&-By}i9BoleK@ z@9*1It7V(brrq4!v9rAFVak8pg)P2!a6L z_p83|zcQQ={8zG8tG&OtxcI^B>`QYOE?j!6+wCUz?{ECJySw{vef{3|tybp;AmM)` z&!4ZCPwj+%?%Zo1-o1OTb@S$z+mn+smw_U{%*@5o@Zy2-ylQQAb@i7sXQqR8yKP5D z{mRtT3&L8<#>O8eNpx?1eqL>FKRCH|ZRKr9cAgaph@y6Q`}Ws&N~J;|gzL=B&7O5# vM=2#mtJO(&cD6Rl<&nJK@28Mt|K|PyJSAkZgeEE<00000NkvXXu0mjfa~Om1 literal 0 HcmV?d00001 diff --git a/html/images/server.png b/html/images/server.png new file mode 100644 index 0000000000000000000000000000000000000000..c7c34a1a764d3f131a5e95731aa125bca4ec313b GIT binary patch literal 879 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 R^`;Nmx!rr)eK&gQ{{eE-hLivR literal 0 HcmV?d00001 diff --git a/html/images/small_filter.png b/html/images/small_filter.png new file mode 100644 index 0000000000000000000000000000000000000000..120f2ff738b49341bb51cd91e639a2730187adad GIT binary patch literal 814 zcmV+}1JV46P) zK~#90mC=7_%yAsY@#mf0?e^n)92UzCV`${ZT3l$DA6xQk%^zl=73$*} z&5!+|r1(chn24;!YA6#sY{~Ltel0U=?rwLxmp^tBHk#MJ?@y0jpZD9ue`GbphhR+d zNXL0oq{Z>3rjdOu0SD0BZDcbTMGKadUR^OkdOky{nWiH{>;e`5y}E_ugOP8Jx~jDU zrO-1;l9HlSXt8_;mH~ab(AGAg5a7>JH z;oOe#8FzxG-O{Z|3Q3ZCiRwT*7iD|;!3JP75cv~0W{q&|HDc7TWt2~4Q>23~6=0UO zCrNtH-Xt37(q-jEMpfHkJunN11Iz#vz|_LthLn{mxt!9PG#%?1EB}gQ1@6w)^NR&i z$pw9!F-LCjgpmxOKM(=HYDhf*bw@zEKzX2Twg~yx4UxPnH6Iilj2b{2Gcs%9As@*6 z4GG5_u9xnFRnx$u6LY1<3zZGh#6(qrwi=O|2ls(2!1*WA5er~XgURFIX|Q6svOr2n zP&H_OtW7#IQ#nu>-iz@k(4huY)ywXEZyIWKH6|RLevOi01895nma{#r>~@caL@R;z zw;@1XLaHJ)ROv6VWqO?^2dujLwPkFq?@M3sCN{MW=XMjHBbtLgcnP%q6$;jo8}j*_ zmO&afRq4Q>NpfM6#mc#^56AZ`{z;3)W7&5gxZyj5?Y z0{9RG6qdi>`gdP(7^w$ZJ3;Er(jF<6=(e(ezr2}y=N_uE`W1D+YoNi1GdT0Pd1nPY z0jhzfuD*ufgKCSovMG~2z!D%07z9`Wa$pLO4vYY7oq%vmfE{p!>(&Dw0Pin*umBF= s8{qpF)B}j2{j7fIxbkl?hv$FI57^T_`KpF07*qoM6N<$g7?U0J^%m! literal 0 HcmV?d00001 diff --git a/html/images/sort_down.png b/html/images/sort_down.png new file mode 100644 index 0000000000000000000000000000000000000000..0d99fd7e39e7dad2cde4004b1def2776e7b8162d GIT binary patch literal 174 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)I!3HFqj;YoHDYhhUcNd2LAh=-f^2tCE&H|6f zVg?3oArNM~bhqvgP>{XE)7O>#3Wq$82Genib3l0pYfl%)kcv5_T?cs&DDWJqxmj;N zML{t_<$AdM)D`o$vCfcR^z5SU6&tSGDR0kD*qS;!!~AX96QKhqmR`5Lnx>Ta;_yMB PDGUsru6{1-oD!M<*9bX8 literal 0 HcmV?d00001 diff --git a/html/images/sort_up.png b/html/images/sort_up.png new file mode 100644 index 0000000000000000000000000000000000000000..59e98a13c0e10401c79b3b954f133389766b5461 GIT binary patch literal 176 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)I!3HFqj;YoHDYhhUcNd2LAh=-f^2tCE&H|6f zVg?3oArNM~bhqvgP>{XE)7O>#3Wq$8hN#PH?=3(fTTd6qkcv6EU4~o?iUQ2)m0i6* z{vYq)YSNFC-fo$vaFi!de)f{9LbW+dZyQa^-0C8?$?!U3$NOhiFHY)<2OSexzwBwa Q8qgpHPgg&ebxsLQ0Dmbp>;M1& literal 0 HcmV?d00001 diff --git a/html/images/sound.png b/html/images/sound.png new file mode 100644 index 0000000000000000000000000000000000000000..cc030d391a55d0da04053c5e186d7fc2d5c11739 GIT binary patch literal 898 zcmV-|1AY97P)M@oA-i$gBPJ*q_n?JH5mE zywiIYUY9gAH8mLug`Rr7-Va?ammd)2a``rqNc^<3v-3l-SUh+Yu)H*VeSL!q3k%=G zVzG~Mxg5D%j%u}vBuR94cQZIRh{NG%udc3sx3RIY2vh-N0GrJ=w6wJJEEbEszq`B3 z>FFu8S`AIpXf~UaN+m8XE)YV<^YioX*lf1cVcf<8U}|I2<^gPFyY*)oPV;xyzh|sSKQp(V6|ES z2nK`r{eIf*HknL@LZN^pNobnJ=;$c5T1}suoBO~TjYdCrI2;&;fvT!lEEa}`hY5$n zD2jrnX?VR}lF1~6LII1#LZwn66bjjfhK4@24h#&uYnmpVot>DbiQR6;?RHZv7BNi| z(=@46D!AQl48wTL2qEzKd?9PI*+d9|s;U@lODwWDxfk1$EyG^6f;PUd4R;z_1NeCg(b)DYcUQ|^@mSq%0A(>2) z%jK@5cs#xykH^t<9aUB7>+2&DiC`E8FJ8PLpU>lTIvE=q!{hPb@p!1!Y8)IKh)gE) z9N>+~$;n^W*49KOlM#kt2-7sh{r$Z-J3ABUbXqhT4Plz5&~;rT5(%-gvLYgp$d71n-Q?~-L1m&=9Q?WVW4m+tOvWLf6+_LjrLL-zLe*xug$Ykz-G9SKA&$a6bjiV zCMKAko@QiZgyZAmyXEEOuN#fV^Z$M0t5Ou@ZNK0DNq>L;kkx7>l}aTunat0?pa0GN Y3kV5|P>}*ir-y0RjkYFdH!T6+Ju{7=dBN@ccOggNzIVgPq{15t;v>G(Z5cz%l^X#psb#Q^UaU?HdDwuP;%CA{z`4KnNGVehth@ zpHWqTlAMYPhGu310|rI`0fzq{K42z4C=C!m;KU3}!~g#>Gynh3%8I}uBLDwiy!am% z_YLWFWgc=MGKwyKnGBBJ!5AwdC zAOtHY{QrOXGDPF@{CC0EL7wFwC8cy^u&wW?)#ehJgW;seoX|t5*z{zka;{j6BCOV3r05Ab26P4p<0* z43`rUGB8z8AgNH_@!$c&<#+GEhL%GMA%FlvDK>#IDgcbU{R$Ei1{R<~h8RPE1<~af zFW`p4QW`)2VHEUBp)OaHlQXb3GsAD_sZ$J>A3Z`b6lO3$0AUym0t=vq3jl+Km5mKv wEg@G;-+%pLc!}hF^r{IUfEa02nF0hD0I*FO-s=0zy#N3J07*qoM6N<$g2iftu>b%7 literal 0 HcmV?d00001 diff --git a/html/images/system.png b/html/images/system.png new file mode 100755 index 0000000000000000000000000000000000000000..c3308ee2e8a6d106e7261c4682d0f2f71ae54b1f GIT binary patch literal 3105 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 v5BhEVkAwuO$+HwHF`pveCQJj#J1zEqz!S=e(ls z6bjMS))u8w31iF&fumYPXfzr`QH1Atl*{Gwtyb$-mCNPq+S(e6i;D~m4bjg9fa5r9 zZ*NnrR+*ffG>+qB0hG1Y=JRgrK*xlV_e0-crrE)x@T-ODlUa!+^Hp%DnD5Ve)0JPREiaVaGthzLq4eBUPs0)ikwDTOhH`>AH^pvUvwebyC}1_me;i=ve3 z9to&Ysl?RO6k!-1I>=;Du8X!7yYnBHZZGrX>u0(9%zHFnI>*f$-}YXam^lB~>C;ch z%F4>EYPDK9vYVzUagw0Z6eEKD^cqoPiF*@c)Xuy~@XP1)YK^3L>9W55&DTH4;NalJ z>FMcrL?keW;qCHEL*O^5iledjoIr-SzM9&dkldCjB1f z4S4qe!e#jQkMc-;cj6Vt&3fwvvrELN_*RK9E_2p_=^%GDa&%xu%;Kp$r^H&YB z!(co{M*qZ*PVw(R>1-a(IQ;~EfTfbJUbu29{G!&qPvW`I+lTEG|7M%|XFnf&@YU)k z`>@$J!UKdkcshaJ#rz|a7oLhz@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZ0tk-OlK0J5%RKl$ZR3;ww?F;)|LyPp{~b%O z|F4;N;{T)X|No!=@b7=_n*0AntmpmbQ|+4%(+3bhFwFt#S%>~lz4GP%%b)-Mzy0<9 z|2rVQaR1}~lQ-Y}zyIz3{~Moy{Ez?tcb@(9U(jgUe=e!E0FYjQ0Af~6+AF~D@Be-$ zKXs0HBO!+WK*4`N40JgICl5OV7au3XZ=gVVMk2$p1N#`f0|FR+i3u`X*?!4`iPd%{ zKmalQ|NAe1ONvh*(n6f!7f|8PzYzQbgh6~DE=x~j*u7~TgR!$0!yBN0tez|bpQ?nw zzdwHi00M~V|DV713MxVj94t&=4Ium-N`nk32Ws90)LbxaIm2H~JBIyFzB1hZ_>)1- zQ4u)mHn@KXrNb@l;1LLNzvXFu8`v-;%OBXP>XH_!1_{qp1 z1N0W#uRjbo58h@Fmf!~&pa2j+OhAHx5h(HI^=F1RU;hG~$iVOxi0?mmz+i804-Vv= z)7ly4rg$-M{QAnk%k-at_3Kv#P8Ogo|Nk=p1P}`-k$ipkmBBK|h=B!Y^@pGT8912# zGZggCWw>_y0K>c!w-|UuC4k=f&+y|v3j;SVGlN5{1;g>RXF+B^00=p1Y;hc1zbQ2o}7Ka@ZijS zP?FvN5I{`N_eFz~=gKLE8UFqF4K{?EnSlZ5QigAzelmOpdXERl28o0G{rBq+hD8-? zK(;3WgZcwN05OAD-=1!|@sHD4;rO1L2I^`e49c?nK(8<`tlDs$;p&-(4Cdx?KxZ>B zoH~4$p(=6?!|NySCjd211nC6`Ae79+tK1s^%zg8X4W$GkLUb8a{{6>r^WHm# zWs6RO4EO-G8J?K{0*DbkQ*ny7fKwRIAbTKI07divfBzqV0u1D5kh7810|XcV^d_H1 Tk^AtW00000NkvXXu0mjfSz_lE literal 0 HcmV?d00001 diff --git a/html/images/tree.png b/html/images/tree.png new file mode 100644 index 0000000000000000000000000000000000000000..477387c6111d7f115823587940e634a7a588d190 GIT binary patch literal 894 zcmV-^1A+XBP)42~`H$h>&p!?-=H)I0}cNLG~gf5 z04AU*w=S~$1_&S)HR1mZ33?0+uV24qIDh^egNuhN0|V3&24;v&|ACx;zk#m!^N->0 zzrPIs{`_ZPXJufBuV!KZ2p|@a8djk5SQ-B^{QdO}ECB~^uP`utdkZv#k>S6X5yL+Y zE`~oq&Hq?{1^_j(F#Tr$2p|>)pot*x4`>ZDGYbPU_^~#X;qUd6V3)Au9A@}0YYlV- z&;XzxfOazc{rjH*Ab?o@Li97Rv$HeYyLXRa>C&YPKY#vYFfg@YFc1)C_{q%<^e{8f zOUw*^fNKB$1A5~xFeVs5mi}V^2p|@)2Z7-C@81lPl9CKAE-pZ!{|ua5+zfwia4|4& z@q-Qc3pC(A&}NWkkj=n|1iIuO13&<={D&F6n(!K z{s5x{sf1sDWC|Nr<5w2KL>8SD+F|6rQ{0*D2spO24^ft`bcVgLU9 zz*zXjpr&umV9Eqc`=E3TjOxE&%mCI5b^*gbu=fB0h=m!F<`_7DnuCLaP{QIjVEYlKmf7qKKJ&|ljk4*{QL&A?bjb*ZUct) zZ&0oS+W23d;rAZ}p!jcwf8T+r^4|ppn1`8}7#VKd`|t-KfEfS($BYG106>5N05B?r UYclv4pa1{>07*qoM6N<$f=kki5C8xG literal 0 HcmV?d00001 diff --git a/html/images/true.png b/html/images/true.png new file mode 100644 index 0000000000000000000000000000000000000000..543710fb7b9b2a3ea9a115031cec06748ba82d8e GIT binary patch literal 661 zcmV;G0&4wRCwBA z{Qv(y10?_;fS4F41ONfV!Z?9Zmf;V>V}`Fl-Zvor4#a;zGC<4*#H>hc7AT*ML79!6 zA(@$(K^Gu^SQ!2?Yy@hk1`2P-YZb_+{}`lzWD-z)+OIzhKNwjULIDDZiRmxXZ&nW0 z#SFh09C2#=#UKnM%LQZv_DRY}HUnMxh~X!L6Hx3TKmalQ|MY*Au$HhehaATuh93-; z42(#ce=~>!U6{cl&2m)QSGt2=mS6qV?N{4@n!|wVo`9491Q5&r5C2cU`|<7JR-I2b;_>;MQLMurpy zF`&Zj3~Ey;tfE&g<%2%7efOBFT+Q0fO0S}Fmf?4 z00a;VFkoIW++jGya2;rXI#42ZU|^UE46;)U{S533l|bA7q6ZN`05Jjm z!@%%`;WWb~pd`oz>_E&7#1DaZ77*_PYW&YohD|dF00a;V!)GA*m*E)01)#I_fZhSc z^AoVMe=yu;$O9TSn*mR90|+1%u(^L3ZU8l1Wq1KJ;1}4x?|~6j4D|DS1_EgnAb?oF z{`?2TKY@-t222aj8D0Z5#{pB_4wNXx0RRGs85mp)V1@sIPJYf{&hQBsFDwjuz+x;& vNg0`DhOildY=8h_q%=1I1Q5l!5g@<-!%>U$(^Vlh00000NkvXXu0mjfxtIY% literal 0 HcmV?d00001 diff --git a/html/images/user.png b/html/images/user.png new file mode 100644 index 0000000000000000000000000000000000000000..4a5332b5a6107e201b0ebceeaf6388da7145cbe4 GIT binary patch literal 3204 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 mBLl!wEA| z6VIMlwu2fI4?7s;58#FgkPv>9aA1j`Bx=J5i6c8mpaIgdm2L2@FE4MqcB3zEJ-Ik- z}_aha91jo zST>to0h9{`!^6WrjE#-mY;S90eSICnFmSnC?%LYg*ulZUe&2H0PuRf?)v)r*#7?hE0ULj{{H^kb8~awly#k@J9o%tvzSaK%w{u%QVA>q z{qA3B-x-F%*47p$CnuOpCeC#o!(zcuPWVXHxYX0bi*_IK(Gj6g z$nEiXKHT2k{!Ivn!{0`u(XcGbXqtv7ij>P`42y;HT#mt~c|1MuQ2*&CM5C8^D$5iK z1-iPrTpJr3XF^R)&3lq0z3+57DHe+qi$yG=i2me=L8XW-_$K?2Fp0!Gk?w9K~e>`TTzW+g7WUhYudm83^#fl`GWRY)ni{kVquf(&_Xq;1GEJ z?;#ZwMfp9K%e~Rr+1XWBSI5rI4!W+hu&}_)%*@?PCUXP$6LFeuT1A-R;)gs#M_K}O=zW^a3 VCR?{WdaysInMonth) daySel=daysInMonth; + + selectedDate= new Date(yearSel,monthSel,daySel); + for (var i = 0; i < objForm.day.length; i++) { + objForm.day.options[0] = null; + } + for (var i = 0; i < daysInMonth; i++) { + objForm.day.options[i] = new Option(i+1); + } + objForm.day.selectedIndex=daySel-1; + saveResult(selectedDate,resultForm); + } + + function createResult(objForm,resultForm){ + yearSel=objForm.year.options[objForm.year.selectedIndex].text; + monthIx=objForm.month.selectedIndex; + monthSel=objForm.month.options[monthIx].value; + daySel=objForm.day.options[objForm.day.selectedIndex].value; + selectedDate= new Date(yearSel,monthSel,daySel); + saveResult(selectedDate,resultForm); + } + + function saveResult(selectedDate,resultForm){ + timeInSeconds=Math.floor((selectedDate.getTime() - selectedDate.getTimezoneOffset() * 60000 ) / 1000); + resultForm.value=timeInSeconds; + } + + function populate_sambaLogonTime(objForm,resultForm) { + var yearSel=objForm.sambaLogonTime_year.options[objForm.sambaLogonTime_year.selectedIndex].text; + var monthIx=objForm.sambaLogonTime_month.selectedIndex; + var nextMonthIx=0; + if(monthIx!=11) + nextMonthIx=monthIx+1; + + var nextMonthSel=objForm.sambaLogonTime_month.options[nextMonthIx].value; + var monthSel=objForm.sambaLogonTime_month.options[monthIx].value; + + var daySel=1; + if(objForm.sambaLogonTime_day.selectedIndex!=-1) + daySel=objForm.sambaLogonTime_day.options[objForm.sambaLogonTime_day.selectedIndex].value; + + var timeOfDayOne = new Date(yearSel, nextMonthSel, 1); + var timeDifference = timeOfDayOne - 86400000; + var timeOfLastDay = new Date(timeDifference); + + var daysInMonth = timeOfLastDay.getDate(); + + if(daySel>daysInMonth) daySel=daysInMonth; + + var selectedDate= new Date(yearSel,monthSel,daySel); + for (var i = 0; i < objForm.sambaLogonTime_day.length; i++) { + objForm.sambaLogonTime_day.options[0] = null; + } + for (var i = 0; i < daysInMonth; i++) { + objForm.sambaLogonTime_day.options[i] = new Option(i+1); + } + objForm.sambaLogonTime_day.selectedIndex=daySel-1; + saveResult(selectedDate,resultForm); + } + function populate_sambaLogoffTime(objForm,resultForm) { + var yearSel=objForm.sambaLogoffTime_year.options[objForm.sambaLogoffTime_year.selectedIndex].text; + var monthIx=objForm.sambaLogoffTime_month.selectedIndex; + var nextMonthIx=0; + if(monthIx!=11) + nextMonthIx=monthIx+1; + + var nextMonthSel=objForm.sambaLogoffTime_month.options[nextMonthIx].value; + var monthSel=objForm.sambaLogoffTime_month.options[monthIx].value; + + var daySel=1; + if(objForm.sambaLogoffTime_day.selectedIndex!=-1) + daySel=objForm.sambaLogoffTime_day.options[objForm.sambaLogoffTime_day.selectedIndex].value; + + var timeOfDayOne = new Date(yearSel, nextMonthSel, 1); + var timeDifference = timeOfDayOne - 86400000; + var timeOfLastDay = new Date(timeDifference); + + var daysInMonth = timeOfLastDay.getDate(); + + if(daySel>daysInMonth) daySel=daysInMonth; + + var selectedDate= new Date(yearSel,monthSel,daySel); + for (var i = 0; i < objForm.sambaLogoffTime_day.length; i++) { + objForm.sambaLogoffTime_day.options[0] = null; + } + for (var i = 0; i < daysInMonth; i++) { + objForm.sambaLogoffTime_day.options[i] = new Option(i+1); + } + objForm.sambaLogoffTime_day.selectedIndex=daySel-1; + saveResult(selectedDate,resultForm); + } + function populate_sambaKickoffTime(objForm,resultForm) { + var yearSel=objForm.sambaKickoffTime_year.options[objForm.sambaKickoffTime_year.selectedIndex].text; + var monthIx=objForm.sambaKickoffTime_month.selectedIndex; + var nextMonthIx=0; + if(monthIx!=11) + nextMonthIx=monthIx+1; + + var nextMonthSel=objForm.sambaKickoffTime_month.options[nextMonthIx].value; + var monthSel=objForm.sambaKickoffTime_month.options[monthIx].value; + + var daySel=1; + if(objForm.sambaKickoffTime_day.selectedIndex!=-1) + daySel=objForm.sambaKickoffTime_day.options[objForm.sambaKickoffTime_day.selectedIndex].value; + + var timeOfDayOne = new Date(yearSel, nextMonthSel, 1); + var timeDifference = timeOfDayOne - 86400000; + var timeOfLastDay = new Date(timeDifference); + + var daysInMonth = timeOfLastDay.getDate(); + + if(daySel>daysInMonth) daySel=daysInMonth; + + var selectedDate= new Date(yearSel,monthSel,daySel); + for (var i = 0; i < objForm.sambaKickoffTime_day.length; i++) { + objForm.sambaKickoffTime_day.options[0] = null; + } + for (var i = 0; i < daysInMonth; i++) { + objForm.sambaKickoffTime_day.options[i] = new Option(i+1); + } + objForm.sambaKickoffTime_day.selectedIndex=daySel-1; + saveResult(selectedDate,resultForm); + } + + function createResult_sambaLogonTime(objForm,resultForm){ + yearSel=objForm.sambaLogonTime_year.options[objForm.sambaLogonTime_year.selectedIndex].text; + monthIx=objForm.sambaLogonTime_month.selectedIndex; + monthSel=objForm.sambaLogonTime_month.options[monthIx].value; + daySel=objForm.sambaLogonTime_day.options[objForm.sambaLogonTime_day.selectedIndex].value; + selectedDate= new Date(yearSel,monthSel,daySel); + saveResult(selectedDate,resultForm); + } + function createResult_sambaLogoffTime(objForm,resultForm){ + yearSel=objForm.sambaLogoffTime_year.options[objForm.sambaLogoffTime_year.selectedIndex].text; + monthIx=objForm.sambaLogoffTime_month.selectedIndex; + monthSel=objForm.sambaLogoffTime_month.options[monthIx].value; + daySel=objForm.sambaLogoffTime_day.options[objForm.sambaLogoffTime_day.selectedIndex].value; + selectedDate= new Date(yearSel,monthSel,daySel); + saveResult(selectedDate,resultForm); + } + function createResult_sambaKickoffTime(objForm,resultForm){ + yearSel=objForm.sambaKickoffTime_year.options[objForm.sambaKickoffTime_year.selectedIndex].text; + monthIx=objForm.sambaKickoffTime_month.selectedIndex; + monthSel=objForm.sambaKickoffTime_month.options[monthIx].value; + daySel=objForm.sambaKickoffTime_day.options[objForm.sambaKickoffTime_day.selectedIndex].value; + selectedDate= new Date(yearSel,monthSel,daySel); + saveResult(selectedDate,resultForm); + } diff --git a/html/include/focus.js b/html/include/focus.js new file mode 100644 index 000000000..9802726e6 --- /dev/null +++ b/html/include/focus.js @@ -0,0 +1,40 @@ +netscape = ""; +ver= navigator.appVersion; len = ver.length; + +for (iln = 0; iln < len; iln++){ + if (ver.charAt(iln) == "("){ + break; + } +} +netscape= (ver.charAt(iln+1).toUpperCase() != "C"); + +function keyDown(DnEvents) { + // determines whether Netscape or Internet Explorer + k = (netscape) ? DnEvents.which : window.event.keyCode; + if (k == 13) { // enter key pressed + if (nextfield == 'login'){ + return true; // submit, we finished all fields + } else { // we're not done yet, send focus to next box + eval('document.mainform.' + nextfield + '.focus()'); + return false; + } + } +} + +function changeState(myField) { + document.getElementById(myField).disabled=(document.getElementById(myField).disabled)?false:true; +} + +function changeSelectState(triggerField, myField) { + if (document.getElementById(triggerField).value != 2){ + document.getElementById(myField).disabled= true; + } else { + document.getElementById(myField).disabled= false; + } +} + +document.onkeydown= keyDown; // work together to analyze keystrokes +if (netscape){ + document.captureEvents(Event.KEYDOWN|Event.KEYUP); +} + diff --git a/html/include/png.js b/html/include/png.js new file mode 100644 index 000000000..145eaae17 --- /dev/null +++ b/html/include/png.js @@ -0,0 +1,73 @@ +if (navigator.platform == "Win32" && navigator.appName == "Microsoft Internet Explorer" && window.attachEvent) + window.attachEvent("onload", pngLoadPngs); + +// parses all images //public +function pngLoadPngs() +{ + var rslt = navigator.appVersion.match(/MSIE (\d+\.\d+)/, ''); + var itsAllGood = (rslt != null && Number(rslt[1]) > 5.5); + + if (itsAllGood) + for (var i = 0; i < document.images.length; i++) + pngLoad(document.images[i]); +} + +// loads an image, src is optional // public +function pngLoad(img,src) +{ + if (typeof img == "object" && typeof img.tagName == "string" && img.tagName == "IMG") + { + // this is an image + if (typeof src == "string") + { + // src parameter is present + if (src.match(/\.png$/i) != null) + { + // this is png image + img.style.width = null; + img.style.height = null; + img.style.filter = null; + img.src = src; + pngSwapPrepare(img); + } + else + { + // its not a png + img.src = src; + } + } + else if (img.src.match(/\.png$/i) != null) + { + // no src arameter, but its png -> simply swap + pngSwapPrepare(img); + } + } + + // swap (if complete) or shedule it to onload event // private + function pngSwapPrepare(img) + { + if (img.complete) + pngSwap(img); + else + img.attachEvent("onload",pngOnLoadSwap); + } + + // supposed to be called when image is loaded into memory //private + function pngOnLoadSwap() + { + event.srcElement.detachEvent("onload",pngOnLoadSwap); + pngSwap(event.srcElement) + } + + // Swaps img and background //private + function pngSwap(img) + { + with (img) + { + style.width = width + "px"; + style.height = height + "px"; + style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src + "', sizingMethod='scale') " + src = "images/null.gif"; + } + } +} diff --git a/html/include/warning.js b/html/include/warning.js new file mode 100644 index 000000000..1c061fb8e --- /dev/null +++ b/html/include/warning.js @@ -0,0 +1,13 @@ +function question(text, url) +{ + if(document.mainform.ignore){ + location.href= url; + return true; + } + if(confirm(text)){ + location.href= url; + return true; + } + return false; +} + diff --git a/html/index.php b/html/index.php new file mode 100644 index 000000000..88ae90bfd --- /dev/null +++ b/html/index.php @@ -0,0 +1,244 @@ +'; + echo ' location = "index.php?js=true";'; + echo ''; + + $_SESSION['js']= FALSE; +} else { + $_SESSION['js']= TRUE; +} + +/* Check if gosa.conf is accessable */ +if (!is_readable(CONFIG_DIR."/gosa.conf")){ + print_red(sprintf(_("GOsa configuration %s/gosa.conf is not readable. Aborted."), CONFIG_DIR)); + echo $_SESSION['errors']; + exit(); +} + +/* Parse configuration file */ +$config= new config(CONFIG_DIR."/gosa.conf", $BASE_DIR); +$_SESSION['DEBUGLEVEL']= $config->data['MAIN']['DEBUGLEVEL']; +if ($_SERVER["REQUEST_METHOD"] != "POST"){ + @DEBUG (DEBUG_CONFIG, __LINE__, __FUNCTION__, __FILE__, $config->data, "config"); +} + +/* Set template compile directory */ +if (isset ($config->data['MAIN']['COMPILE'])){ + $smarty->compile_dir= $config->data['MAIN']['COMPILE']; +} else { + $smarty->compile_dir= '/var/spool/gosa'; +} +$smarty->assign ('nextfield', 'username'); + +/* Check for compile directory */ +if (!(is_dir($smarty->compile_dir) && is_writable($smarty->compile_dir))){ + print_red(sprintf(_("Directory '%s' specified as compile directory is not accessable!"), + $smarty->compile_dir)); + echo $_SESSION['errors']; + exit(); +} + + +/* Language setup */ +if ($config->data['MAIN']['LANG'] == ""){ + $lang= get_browser_language(); +} else { + $lang= $config->data['MAIN']['LANG']; +} +$lang.=".UTF-8"; +putenv("LANGUAGE="); +putenv("LANG=$lang"); +setlocale(LC_ALL, $lang); +$GLOBALS['t_language']= $lang; +$GLOBALS['t_gettext_message_dir'] = $BASE_DIR.'/locale/'; + +/* Set the text domain as 'messages' */ +$domain = 'messages'; +bindtextdomain($domain, "$BASE_DIR/locale"); +textdomain($domain); + + +if ($_SERVER["REQUEST_METHOD"] != "POST"){ + @DEBUG (DEBUG_TRACE, __LINE__, __FUNCTION__, __FILE__, $lang, "Setting language to"); +} + + +/* Check for SSL connection */ +$ssl= ""; +if (!isset($HTTP_SERVER_VARS['HTTPS']) || + !stristr($HTTP_SERVER_VARS['HTTPS'], "on")) { + + if (empty($HTTP_SERVER_VARS['REQUEST_URI'])) { + $ssl= "https://".$HTTP_SERVER_VARS['HTTP_HOST']. + $HTTP_SERVER_VARS['PATH_INFO']; + } else { + $ssl= "https://".$HTTP_SERVER_VARS['HTTP_HOST']. + $HTTP_SERVER_VARS['REQUEST_URI']; + } +} + +/* If SSL is forced, just forward to the SSL enabled site */ +if ($config->data['MAIN']['FORCESSL'] == 'true'){ + header ("Location: $ssl"); + exit; +} + +/* Got a formular answer, validate and try to log in */ +if ($_SERVER["REQUEST_METHOD"] == "POST"){ + + /* Reset error messages */ + $message= ""; + + $server= validate($_POST["server"]); + $config->set_current($server); + + /* Admin-logon and verify */ + $ldap = $config->get_ldap_link(); + if (is_null($ldap) || (is_int($ldap) && $ldap == 0)){ + print_red (_("Can't bind to LDAP. Please contact the system administrator.")); + echo $_SESSION['errors']; + exit(); + } + + /* Check for locking area */ + $ldap->cat($config->current['CONFIG']); + $attrs= $ldap->fetch(); + if (!count ($attrs)){ + $ldap->cd($config->current['BASE']); + $ldap->create_missing_trees($config->current['CONFIG']); + } + + /* Check for at least one subtreeACL in the complete tree */ + $ldap->cd($config->current['BASE']); + $ldap->search("(&(objectClass=gosaObject)(gosaSubtreeACL=:all))"); + if ($ldap->count() < 1){ +#FIXME: -> ldapsetup.tpl would be better + print_red(_("You're missing an administrative account for GOsa, you'll not be able to administrate anything!")); + echo $_SESSION['errors']; + exit; + } + + /* Check for valid input */ + $username= $_POST["username"]; + if (!ereg("^[A-Za-z0-9_.-]+$", $username)){ + $message= _("Please specify a valid username!"); + } elseif (mb_strlen($_POST["password"], 'UTF-8') == 0){ + $message= _("Please specify your password!"); + $smarty->assign ('nextfield', 'password'); + } else { + + /* Login as user, initialize user ACL's */ + $ui= ldap_login_user($username, $_POST["password"]); + if ($ui === NULL || $ui == 0){ + $message= _("Please check the username/password combination."); + $smarty->assign ('nextfield', 'password'); + gosa_log ("Authentication failed for user \"$username\""); + } else { + /* Remove all locks of this user */ + del_user_locks($ui->dn); + + /* Save userinfo and plugin structure */ + $_SESSION['ui']= $ui; + $_SESSION['session_cnt']= 0; + + /* Let GOsa trigger a new connection for each POST, save + config to session. */ + $_SESSION['config']= $config; + + /* Go to main page */ + gosa_log ("User \"$username\" logged in successfully"); + header ("Location: main.php?global_check=1"); + exit; + } + } +} + +/* Fill template with required values */ +$smarty->assign ('date', gmdate("D, d M Y H:i:s")); +$smarty->assign ('username', $username); +$smarty->assign ('personal_img', get_template_path('images/personal.png')); +$smarty->assign ('password_img', get_template_path('images/password.png')); +$smarty->assign ('directory_img', get_template_path('images/ldapserver.png')); + +/* Some error to display? */ +if (!isset($message)){ + $message= ""; +} +$smarty->assign ("message", $message); + +/* Displasy SSL mode warning? */ +if ($ssl != "" && $config->data['MAIN']['WARNSSL'] == 'true'){ + $smarty->assign ("ssl", ""._("Warning").": "._("Session will not be encrypted.")." "._("Enter SSL session")."!"); +} else { + $smarty->assign ("ssl", ""); +} + +/* Generate server list */ +$servers= array(); +if (isset($_POST['server'])){ + $selected= validate($_POST['server']); +} else { + $selected= $config->data['MAIN']['DEFAULT']; +} +foreach ($config->data['LOCATIONS'] as $key => $ignored){ + $servers[$key]= $key; +} +$smarty->assign ("server_options", $servers); +$smarty->assign ("server_id", $selected); + +/* show login screen */ +$smarty->display (get_template_path('headers.tpl')); +if (isset($_GET['version'])){ + require_once("version.inc"); +} +$smarty->assign ("PHPSESSID", session_id()); +if (isset($_SESSION['errors'])){ + $smarty->assign("errors", $_SESSION['errors']); +} +$smarty->display (get_template_path('login.tpl')); + +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> + + + diff --git a/html/logout.php b/html/logout.php new file mode 100644 index 000000000..a5c8fd200 --- /dev/null +++ b/html/logout.php @@ -0,0 +1,45 @@ +username."\" logged out"); + +/* Remove all locks of this user */ +del_user_locks($ui->dn); + +@session_destroy (); + +/* Go back to the base via header */ +header ("Location: index.php"); + +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/html/main.php b/html/main.php new file mode 100644 index 000000000..f39467376 --- /dev/null +++ b/html/main.php @@ -0,0 +1,285 @@ +ip){ + gosa_log ("main.php called with session which has a changed IP address.", 3); + header ("Location: logout.php"); + exit; +} +$config= $_SESSION['config']; +@DEBUG (DEBUG_CONFIG, __LINE__, __FUNCTION__, __FILE__, $config->data, "config"); + +/* Set template compile directory */ +if (isset ($config->data['MAIN']['COMPILE'])){ + $smarty->compile_dir= $config->data['MAIN']['COMPILE']; +} else { + $smarty->compile_dir= '/var/spool/gosa/'; +} + +/* Language setup */ +if ($config->data['MAIN']['LANG'] == ""){ + $lang= get_browser_language(); +} else { + $lang= $config->data['MAIN']['LANG']; +} +$lang.=".UTF-8"; +putenv("LANGUAGE="); +putenv("LANG=$lang"); +setlocale(LC_ALL, $lang); +$GLOBALS['t_language']= $lang; +$GLOBALS['t_gettext_message_dir'] = $BASE_DIR.'/locale/'; + +/* Set the text domain as 'messages' */ +$domain = 'messages'; +bindtextdomain($domain, "$BASE_DIR/locale"); +textdomain($domain); +@DEBUG (DEBUG_TRACE, __LINE__, __FUNCTION__, __FILE__, $lang, "Setting language to"); + +/* Prepare plugin list */ +if (!isset($_SESSION['plist'])){ + $_SESSION['plist']= new pluglist($config, $ui); +} +$plist= $_SESSION['plist']; + +/* Check for register globals */ +if (isset($global_check) && $config->data['MAIN']['FORCEGLOBALS'] == 'true'){ + print_red (_("Register globals is on. GOsa will refuse to login unless this is fixed by an administrator.")); + echo $_SESSION['errors']; + gosa_log ("Register globals is on. For security reasons, this should be turned off."); + session_destroy (); + exit (); +} + +/* Check Plugin variable */ +if (isset($_SESSION['plugin_dir'])){ + $old_plugin_dir= $_SESSION['plugin_dir']; +} else { + $old_plugin_dir= ""; +} +if (isset($_GET['plug'])){ + $plug= validate($_GET['plug']); + $plugin_dir= $plist->get_path($plug); + $_SESSION['plugin_dir']= $plugin_dir; + if ($plugin_dir == ""){ + gosa_log ("main.php called with invalid plug parameter \"$plug\"", 3); + header ("Location: logout.php"); + exit; + } +} else { + /* set to welcome page as default plugin */ + $_SESSION['plugin_dir']= "welcome"; + $plugin_dir= "$BASE_DIR/plugins/generic/welcome"; +} + +/* Check if we need to delete a lock */ +if ($old_plugin_dir != $plugin_dir){ + if (is_file("$old_plugin_dir/main.inc")){ + $remove_lock= true; + require_once ("$old_plugin_dir/main.inc"); + } +} +$remove_lock= false; + +/* Check for sizelimits */ +eval_sizelimit(); + +/* Check for memory */ +if (function_exists("memory_get_usage")){ + if (memory_get_usage() > (to_byte(ini_get('memory_limit')) - 1024000 )){ + print_red(_("Warning: memory is getting low - please increase the memory_limit!")); + } +} + +/* Redirect on back event */ +if ($_SERVER["REQUEST_METHOD"] == "POST"){ + + /* Look for button events that match /^back[0-9]+$/, + extract the number and step the correct plugin. */ + foreach ($_POST as $key => $value){ + if (preg_match("/^back[0-9]+$/", $key)){ + $back= substr($key, 4); + header ("Location: main.php?plug=$back"); + exit; + } + } +} + +/* Redirect on password back event */ +if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST['password_back'])){ + header ("Location: main.php"); + exit; +} + +/* Check for multiple windows logout */ +if ($_SERVER["REQUEST_METHOD"] == "POST"){ + if (isset($_POST['reset_session'])){ + header ("Location: logout.php"); + exit; + } + + if (isset($_POST['cancel_lock'])){ + unset ($_SESSION['dn']); + } +} + + +/* Load department list when plugin has changed. That is some kind of + compromise between speed and beeing up to date */ +if (isset($_GET['reset'])){ + $config->departments= get_departments(); + $config->make_idepartments (); + if (isset($_SESSION['objectinfo'])){ + unset ($_SESSION['objectinfo']); + } +} + +/* Install eGOsa hooks, convert _POST to _SESSION['POST'] */ +if(isset($_GET['explorer'])){ + $_SESSION{'eGosa'}=1; +} +if(isset($_SESSION['POST'])){ + $_SERVER["REQUEST_METHOD"] = "POST"; + foreach ($_SESSION['POST'] as $key => $dummy){ + $_POST[$key]=$_SESSION['POST'][$key]; + } + unset($_SESSION['POST']); +} + +/* show web frontend */ +$smarty->assign ("date", date("l, dS F Y H:i:s O")); +$smarty->assign ("must", "*"); +if ($_SESSION['js']==FALSE){ + $smarty->assign("javascript", "false"); +} else { + $smarty->assign("javascript", "true"); +} +$smarty->assign ("username", $ui->username); +$smarty->assign ("go_logo", get_template_path('images/go_logo.png')); +$smarty->assign ("go_base", get_template_path('images/dtree.png')); +$smarty->assign ("go_home", get_template_path('images/gohome.png')); +$smarty->assign ("go_out", get_template_path('images/stop.png')); +$smarty->assign ("go_top", get_template_path('images/go_top.png')); +$smarty->assign ("go_corner", get_template_path('images/go_corner.png')); +$smarty->assign ("go_left", get_template_path('images/go_left.png')); +$smarty->assign ("go_help", get_template_path('images/help.png')); +$plist->gen_menu(); +$smarty->assign ("menu", $plist->menu); +if (isset($plug)){ + $smarty->assign ("plug", "?plug=$plug"); +} else { + $smarty->assign ("plug", ""); +} +$smarty->display(get_template_path('headers.tpl')); +if (isset($_GET['version'])){ + require_once("version.inc"); +} + +/* React on clicks */ +if ($_SERVER["REQUEST_METHOD"] == "POST"){ + + /* 'delete_lock' is set by the lock removal dialog. We should remove the + lock at this point globally. Plugins do not need to remove it. */ + if (isset($_POST['delete_lock']) && isset($_SESSION['dn'])){ + del_lock ($_SESSION['dn']); + sess_del ('dn'); + } + + + /* I don't want multiple browser windows open. One way to check it is + to count a hidden field and warn the user if SESSION and INPUT count + differ. */ + if (isset($_POST['session_cnt'])){ + if ($_POST['session_cnt'] != $_SESSION['session_cnt']){ + $smarty->display(get_template_path('conflict.tpl')); + exit (); + } + $_SESSION['session_cnt']= $_SESSION['session_cnt'] + 1; + $_SESSION['post_cnt']= validate($_POST['session_cnt']) + 1; + } +} + +/* Only generate hidden click counter, if post_cnt is defined */ +if (isset ($_SESSION['post_cnt'])){ + echo "\n"; +} + +/* Load plugin */ +if (is_file("$plugin_dir/main.inc")){ + require_once ("$plugin_dir/main.inc"); +} else { + print_red(sprintf(_("Can't find any plugin definitions for plugin '%s'!"), $plug)); + echo $_SESSION['errors']; + exit(); +} + +/* Close div/tables */ +$smarty->assign("contents", $display); +if (isset($_SESSION['errors'])){ + $smarty->assign("errors", $_SESSION['errors']); +} +$smarty->display(get_template_path('framework.tpl')); +$_SESSION['plist']= $plist; + +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/html/progress.php b/html/progress.php new file mode 100644 index 000000000..b90234177 --- /dev/null +++ b/html/progress.php @@ -0,0 +1,92 @@ + 100){ + $p= 100; + } + $p= intval ($p); + + /* Check dimensions */ + if ($x < 3 || $x > 1000){ + $x= 180; + } + if ($y < 3 || $y > 700){ + $y= 20; + } + + $x_matches= FALSE; + $y_matches= FALSE; + foreach (array(7,6,5,4,3,2,1,0) as $font){ + $fx= ImageFontWidth($font) * strlen("$p%"); + $fy= ImageFontHeight($font); + + /* Look if font size matches image size */ + if ($fx < ($x-2)){ + $x_matches= TRUE; + } + if ($fy < ($y-2)){ + $y_matches= TRUE; + } + if ($x_matches && $y_matches){ + break; + } + } + + /* Draw image in GD image stream */ + $im = @imagecreate ($x, $y) + or die ("Cannot Initialize new GD image stream"); + + /* Set colors */ + $bg_color= imagecolorallocate ($im, 255, 255, 255); + $br_color= imagecolorallocate ($im, 0,0,0); + $fi_color= imagecolorallocate ($im, 0,0,180); + $tx_color= imagecolorallocate ($im, 240, 10, 90); + + /* Draw progress bar */ + imagerectangle ($im, 0, 0, $x-1, $y-1, $br_color); + imagefilledrectangle ($im, 1, 1, (($x - 2) * $p / 100), + $y - 2, $fi_color); + + /* Is font to big for progress bar? */ + if ($font != 0){ + imagestring ($im, $font, ($x - $fx) / 2, ($y - $fy) / 2, "$p%", $tx_color); + } + + /* Finally draw the image and remove context */ + header ("Content-type: image/png"); + imagepng ($im); + imagedestroy ($im); +?> + diff --git a/html/setup.php b/html/setup.php new file mode 100644 index 000000000..4517c23f8 --- /dev/null +++ b/html/setup.php @@ -0,0 +1,138 @@ + $val){ + $_SESSION['ldapconf'][$key] = $val; +} + +/* Don't call setup if gosa.conf exists */ +if (file_exists(CONFIG_DIR."/gosa.conf")){ + header("location:index.php"); + exit(); +} + +// Check if theres the example +if (!file_exists(CONFIG_TEMPLATE_DIR."/gosa.conf")){ + echo "error example of gosa.conf not present!"; +} + +// No Errors occured yet +$_SESSION['errors']= ""; + +// Print out gosa.conf +if ((isset($_SESSION['classes']) && isset($_SESSION['ldapconf']) && (isset($_POST['getconf']) || isset($_GET['getconfig']) ))){ + echo parse_contrib_conf(); + exit; +} + +/* Set detected samba version */ +if (isset($classes['samba2'])) { + $samba= "3"; +} else { + $samba= "2"; +} + +/* Set template compile directory */ +$smarty->compile_dir= '/var/spool/gosa'; + +/* Check for compile directory */ +if (!(is_dir($smarty->compile_dir) && is_writable($smarty->compile_dir))){ + print_red(_("Directory '%s' specified as smarty compile directory is not accessable, check existence and rigths of this directory!"), $smarty->compile_dir); + echo $_SESSION['errors']; + exit(); +} + +/* Language setup */ +$lang= get_browser_language(); +header("Content-type: text/html; charset=UTF-8"); +$lang.=".UTF-8"; +putenv("LANGUAGE="); +putenv("LANG=$lang"); +setlocale(LC_ALL, $lang); +$GLOBALS['t_language']= $lang; +$GLOBALS['t_gettext_message_dir'] = $BASE_DIR.'/locale/'; + +/* Set the text domain as 'messages' */ +$domain = 'messages'; +bindtextdomain($domain, "$BASE_DIR/locale"); +textdomain($domain); + +if ($_SERVER["REQUEST_METHOD"] != "POST"){ + // @DEBUG (DEBUG_TRACE, __LINE__, __FUNCTION__, __FILE__, $lang, "Setting language to"); +} + +/* Fill template with required values */ +$smarty->assign ('date', gmdate("D, d M Y H:i:s")); + +if(isset ($_POST['next'])){ + $next = $_POST['next']; +} else { + $next = 1; +} + +if(isset($_POST['back'])) { + $next = $next -2 ; +} + +if($next < 1){ + $next = 1; +} + +// How this works + +// Every functioon called below, has two modes +// If the parameter is false, we only test if this function +// is called witout an error +// Is the return value = false, then there was an error +// and we call this func again, to output the error + +// I hope this will work fine ^^ +if((!show_setup_page1(false))||($next == 1)) { + show_setup_page1(); +} elseif((!show_setup_page2(false))||($next==2)) { + show_setup_page2(); +} elseif((!show_setup_page3(false))||($next==3)) { + show_setup_page3(); +} elseif((!show_setup_page4(false))||($next==4)) { + show_setup_page4(); +} +// This is called to test if we have an administrative Group with a User in it +elseif((!create_user_for_setup(false))) { + create_user_for_setup(); +} +// this is the last Page which shows the downloadable conf file +else { + show_setup_page5(); +} + +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> + + diff --git a/html/themes/altlinux/images/go_logo.png b/html/themes/altlinux/images/go_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..d7cc7dfa6187b7c2b37f77442b876cc1bc8b7ad9 GIT binary patch literal 4697 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 literal 0 HcmV?d00001 diff --git a/html/themes/altlinux/images/gohome.png b/html/themes/altlinux/images/gohome.png new file mode 100644 index 0000000000000000000000000000000000000000..fbb3eaaba9ed7cafe265ae9497881725bfb79c61 GIT binary patch literal 1497 zcmV;~1t$85P)000GeNklml$tJ99)usXfdRaP)L<7LWl_Q;#QS_s8mR(RN|#ju}diM&^D>6fYTyEq*N`c zR2tFN4X7$zgzIdsTdN-1iJkE>9^2zgJolb^c^ErgVhg^Pb9Bzp@Bf|c{|PpTLp??> z@CRT4$N|L=-T@HM4{+qQ${GGgh>hUsY`pJ*NA_dcDq|zlc-K5~?@i;aNOB{y1Ty68 z`2zV;c<)QY{&67uzXT5T7`^q`c;63yeJ2se=h~HFLSZ6h2toy+p}SE=F3$7B6XWD2 zXDDASAAEJhKee8Sx-R^;cN2|BDpP~_S4&iu=BX6tD9>I&H650(nf&STb8Nchdqk4W zOpgwHJsTG;R3-~ib$jSb zF4C7sPgb+{Bto-^wCv!_3!}V!&Svv1_mHfO;kpjxvWJvDtvBsqX6!;*mS!493&Hb% z1W@;W+I{E#pYFrZeae^46Zk&Cb+}Iu2;AoFygyXp^xq47>b4&dugenFW{74s(~^o( zC={`6o0hIGF!jN}j+9nR=L*4TAW*y0;a5g3;w=r3m1rll@8Xrg7Z@7+2jA@7N!#{DqzpLu^9+vz#@6HG&=bxQ_K(}>05)YT=atxKW^ zjokPpOv^?Hflw4$n$l}X2`p(J{S<9&O=L1jhTk8j=m$8`q8Ex=~Ea2Em3R3P37d_taxYPZE?%Bt9Wh_4F!O2vAi8)3k70 zmq;{8;6B4rfB)#wlT7Bus86^bhl?s41eR@Kmq_?f@;GyXx2rgUt>+N5g+rfFfC7P@92gh10&CMM^2bKu=| zFIfVMFFkkU_~-U~ZJME@1Ek~ z@EDG5l1?TTYoccVdatMg6yN&iv;RhjZ=Vi>Ckyinn;R2*$z94bHZi^0=D}&iaOx;u zyZWYM+h^ux@~*8e56nyq=bnD-L~gZo%8iP?3b;+J-3`0Gc-N_j>uhsv<8nM^7Z-{P zZh%_PPVgjYL79yAe0TqF^WG#hm+ubhR?OtY%4>Q}nc0~f=#VdxDHxH5KMhfMN$&706ZeH9Z;xRJiPg6Mw_LzaZC4 z*JLMKzA2~njsR>rO=-&w4vlv*u6iasZjb$^31}LG1tJL}VJqIoi zUDNVdylnyJ(mE266nno_)=u3k>IJ`~9jYc0Qbht`5noWGFCcQ`mWXRWq`hC{l3V1O zPsAM-IeJ5+WRIw?9g(%^e5H`^-BzkyLAG98jwycE@uRJ+jVUF?*sTgn7S6}(@uaL7 z@WVAXOw58~6_|X&)>jTwov{i&{*|)EZfbVV#iV4&TYY^!ogEzjG&ePJ{%o5OP7q>- zfM*c8-0;<0Oc#CBtUN;5h*i*ZorC+AW_B(DRqNiNy}g5u&JJFfJ&)(+%p&r7c*9^j`0;;ByFrw*B!f|s*)vrUwZy^;P z9s_S3hkO%j_Ah21gN*FeL>*x1X#W1%j$x&q@@9!~rmNH|@#k3DJp9ix!urWFUbsOtgU~MAnE>91$>y z?p%==o3$hkqyW$iGp^G{Bhy(>lug(pSgoRiKp76ea1^wW0BDKCR3*`(&si7H6!_@1IiHIZ-QIka0 zrvssC;2Z^oxv;(k%^YS^!%KXYu_dcpz?M7{Rh5lsxla8>p(J^YN^6vy38Xd5IZEHP zTcDx=ElZ^;*?Go>WXc|f8Y-|w{4f-ZMZumO+xcKXpDh->Y^_$XTft$2-`ud{59sKp zYqEove^`>fMH{gvw3`Wfhp^ev4-^r|%K@)ImRWcBNP(V;-XZXXpxp;&+;HFu*cG}S zdVnv_zRDMO)Rc-LNYRiNIpKm2HnlPkRGv)ma5Rwym7dJ#EXE9pcjk6EQ0Sb_aZP3c9?UXaM00000NkvXXu0mjf**=0d literal 0 HcmV?d00001 diff --git a/html/themes/altlinux/images/login.png b/html/themes/altlinux/images/login.png new file mode 100644 index 0000000000000000000000000000000000000000..67487767bd76aa6c57ec0997aeef258631ebcc6d GIT binary patch literal 29548 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

Ef8@TFrZ84mpfcqia5-@)~%8$ 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 literal 0 HcmV?d00001 diff --git a/html/themes/altlinux/images/stop.png b/html/themes/altlinux/images/stop.png new file mode 100644 index 0000000000000000000000000000000000000000..14137ddbc9790c2b103109db5293965fe3059a7e GIT binary patch literal 1097 zcmV-P1h)H$P)O=8G6p_?uN?KyX zU=7xGHz}B2)HW5@-DY>Qmt?cInepMAY<82i4h%Ce@ZmSV-*3**C^IJAPA@PIczE=P zWfjk#OQd~(Dn8K4p$@x!{-rm^JVs|5NNG+bclJ_(6h!_CG5y7C{GW7Y`2A$&mttHi zi=G_!7#+><+fB%1KnQc@i&kBSp2I|fQKrAVya%`KK~KHxG4{8@(sfvmLMjDYDRWJ2 z!lt!PCLtKY)qQ}D&NgS@_Ud@QjrqB(2o&G~disRNc)T5!Z$L6hI2gm_vV&AbQ-V^2 zqbXb}hYE&pJz?Q@AB^|wCT=T<)IxKSC|7^J4@Y0;*31vI8BQ|-CCO#-T)Ve{c=auA zeSeh}Jqw`_)dvsI@mQNP@Vkj?lWynw*xRppjLufL>4RjFg@r%p`TASjUN3RKpXFmC z40P8+Ua)v4M$b2w3TI2BLpi4?aUQlHjY)XX83xM(X<&;&H-(C=G9%!tM0} z;P!gynVMm7B~pTJpEaI7%UUvvSdWvMTfk_pLj$*tbw%Pa$O{^bYQh&jChqqay2b7F z(sS`r2?`MR`&pa(5TmLRr4(X42FmO>6Bg2Hr9241z~LsAkB#iXccV+ALp;@}qohJ9 zb8e5Fh`0MQFR0Wt1`Zi4AAPX|-;MS)*|6yvQYn;FNT~{Mq{58YLczR>vTpG|LrRH` zLP?2~{}pjQUwB!$be6@HC_NWTb6T91C%?PQwKYj5CoEJVtsdWjrIlj~-(CIf>+jCF zcjgMdbqy({HB}k7stSZ498S`3@=V!6EsYNC!JE&VBeIc03Wd#6TLQ--4}#F!3$7{} zs_le7nJ56;Xn#uuy^T8lkrztNf)gK5>(J0WwbTy}5?PC(AYmJJR9v~ga_^On&UUA( zy9+`OX|v_H{?P?e8!7&L?;W%HnpxOJyTteDXKZb5arfP`9NL$mqOO*@p=XK4HkqDU zNchsZ;~JoyuW|IXIvuk|P7Jw?CJ*YzpOCRQYl$>QmECG5Glx=``HXC2sdeb+?ixHp zgGARin4VflT-!(=pGakWHh{UT2=v>S58PfI@91oEx(;?B0wJ9FYypx&?(C(cQU~2r zOI;Zh*eraH3;3PY@s9oN&Z_P%a(@RAsV$_C2%&bWFO-GuT)!9v(z}06W?J?+W{-?L z=QdjEttzXc)#`hth&+syMFFLic~IK<8b@EfuFY!Te$>lTkXX*iJt)AxuzisX){el$ P00000NkvXXu0mjfG$aLO literal 0 HcmV?d00001 diff --git a/html/themes/altlinux/style.css b/html/themes/altlinux/style.css new file mode 100644 index 000000000..d7e08becb --- /dev/null +++ b/html/themes/altlinux/style.css @@ -0,0 +1,506 @@ +/* $Id: style.css,v 1.2 2005/01/23 00:20:33 migor-guest Exp $ */ +body +{ + margin-left: 0px; + margin-right: 0px; + margin-top: 0px; + margin-bottom: 0px; + background-color: #8B858B; + color: #5353ad; + font-family:Arial,Helvetica,sans-serif; + font-size: 12px; +} + +h1 { font-size: 14px; color: #5353ad;} +h2,h3,h4,h5,h6 { font-size: 13px; color: #000080;} + +td,p,b {font-size: 12px;} + +/* Title bar */ +a.maintitlebar, div.maintitlebar { + font-family: arial,helvetica,sans-serif; + text-decoration: none; + color: #dedcff; + font-size: 12px; +} + +a.maintitlebar:hover{ + text-decoration: none; + background-color: #5353ad; +} + +p.menuheader { + font-family: arial,helvetica,sans-serif; + color: #dedcff; + text-decoration: none; + background-color: #5353ad; + font-weight: bold; + font-size: 12px; + text-align: center; + width: 100%; + vertical-align: middle; + padding: 3px; + margin-top: 30px; +} + +p.menuitem { + font-family: arial,helvetica,sans-serif; + color: #dedc54; + text-decoration: none; + font-weight: normal; + font-size: 12px; + text-align: left; + padding-left: 15px; + padding-top: 2px; + padding-bottom: 2px; + vertical-align: middle; + margin: 2px; + background-color: #5353ad; + padding-right: 5px; +} + +p.menuitem:hover{ + background-color:#8891bd; +} + +table.menuitem { + width:100%; + margin-top:10px; + margin-bottom:10px; + margin-right:10px; + background-color:#F0F0F0; +} + +table.menuitem:hover{ + background-color:#C5C5C5; +} + + +td.phonelist:hover { + background-color: #D2D2D2; +} + +h1.menuheader{ + border-style:solid; + border-color:#707070; + width:100%; + border-top-width:1px; + border-bottom-width:0px; + border-left-width:0px; + border-right-width:0px; + padding-top:10px; + padding-bottom:0px; +} + +div.copynotice{ + border-style:solid; + border-color:#707070; + width:100%; + border-top-width:1px; + border-bottom-width:0px; + border-left-width:0px; + border-right-width:0px; + padding-top:3px; + padding-bottom:0px; + text-align: right; + font-family:Arial,Helvetica,sans-serif; + font-size: 10px; +} + +a:link{ + text-decoration: none; + color: #000080; +} + +a:visited{ + text-decoration: none; + color: #000080; +} + +a.menuitem:link{ + text-decoration: none; + color: #dedc54; +} + +a.menuitem:visited{ + text-decoration: none; + color: #dedc00; +} + +a.menuitem:hover{ + text-decoration: none; +} + +a.iconmenu:link{ + text-decoration: none; + color: #00008F; +} + +td.iconmenu:hover { + background-color: #E0E0E0; +} + +a.iconmenu:visited{ + text-decoration: none; + color: #00008F; +} + +a.iconmenu:hover{ + text-decoration: none; +} + +h1.plugtop{ + border-style:solid; + border-color:#707070; + width:100%; + border-top-width:0px; + border-bottom-width:1px; + border-left-width:0px; + border-right-width:0px; + padding-top:0px; + margin-top:0px; + padding-bottom:6px; + text-align: left; + background-color: red; + font-family:Arial,Helvetica,sans-serif; + font-size: 24px; +} + +div.plugtop{ + border-style:solid; + border-color:B0B0B0; + width:100%; + border-top-color: #E0E0F0; + border-top-width:6px; + border-bottom-width:1px; + border-left-width:0px; + border-right-width:0px; + padding-top:0px; + padding-bottom:6px; + margin-bottom: 0px; + text-align: left; + vertical-align: middle; + background-color: #E0E0F0; + font-family:Arial,Helvetica,sans-serif; + font-weight: bold; + font-size: 24px; +} + +div.pluginfo{ + border:solid; + border:0px; + width:100%; + padding-top:2px; + padding-bottom:2px; + margin-bottom: 10px; + text-align: right; + vertical-align: middle; + background-color: #C0C0E0; + font-family:Arial,Helvetica,sans-serif; + font-size: 11px; +} + +p.seperator{ + border-style:solid; + border-color:#A0A0A0; + width:100%; + border-top-width:0px; + border-bottom-width:1px; + border-left-width:0px; + border-right-width:0px; + padding-top:0px; + padding-bottom:0px; + margin-top:0px; + margin-bottom:0px; + text-align: left; +} + +p.plugbottom{ + border-style:solid; + border-color:#A0A0A0; + width:100%; + border-top-width:1px; + border-bottom-width:0px; + border-left-width:0px; + border-right-width:0px; + padding-top:10px; + padding-bottom:0px; + text-align: right; + font-family:Arial,Helvetica,sans-serif; +} + +font.must { + color: red; + font-family:Arial,Helvetica,sans-serif; +} + +div.tab_active { + text-align:center; + height:25px; + width:100px; + background-color:#F0F0F0; + border-style:solid; + border-color:black; + border-top-width:1px; + border-bottom-width:0px; + border-left-width:1px; + border-right-width:1px; + margin-top: 0px; + padding-top:1px; +} + +div.tab_left { + text-align:center; + height:20px; + width:100px; + background-color:#C0C0C0; + border-style:solid; + border-color:black; + border-top-width:1px; + border-bottom-width:1px; + border-left-width:1px; + border-right-width:0px; + margin-top: 5px; + padding-top:1px; +} + +div.tab_right { + text-align:center; + height:20px; + width:100px; + background-color:#C0C0C0; + border-style:solid; + border-color:black; + border-top-width:1px; + border-bottom-width:1px; + border-left-width:0px; + border-right-width:1px; + margin-top: 5px; + padding-top:1px; +} + +div.tab_near_active { + text-align:center; + height:20px; + width:100px; + background-color:#C0C0C0; + border-style:solid; + border-color:black; + border-top-width:1px; + border-bottom-width:1px; + border-left-width:1px; + border-right-width:1px; + margin-top: 5px; + padding-top:1px; +} + +div.tab_border { + width:100%; + height:20px; + border-style:solid; + border-color:black; + border-top-width:0px; + border-bottom-width:1px; + border-left-width:0px; + border-right-width:0px; +} + +a.tab_active, input.tab_active { + border: 0px; + margin: 0px; + width: 100px; + height: 22px; + font-family: arial,helvetica,sans-serif; + background-color: #F0F0F0; + text-decoration: none; + color: #00348B; + font-size: 13px; + font-weight: bold; +} + +a.tab_right, input.tab_right { + width: 100px; + height: 20px; + border: 0px; + margin: 0px; + font-family: arial,helvetica,sans-serif; + background-color: #C0C0C0; + text-decoration: none; + color: #00348B; + font-size: 13px; + font-weight: bold; +} + +a.tab_left, input.tab_left { + width: 100px; + height: 20px; + border: 0px; + margin: 0px; + font-family: arial,helvetica,sans-serif; + background-color: #C0C0C0; + text-decoration: none; + color: #00348B; + font-size: 13px; + font-weight: bold; +} + +a.tab_near_active, input.tab_near_active { + width: 100px; + height: 20px; + border: 0px; + margin: 0px; + font-family: arial,helvetica,sans-serif; + background-color: #C0C0C0; + text-decoration: none; + color: #00348B; + font-size: 13px; + font-weight: bold; +} + + + +/********************** Template migration *********************/ + +/* Login screen */ +div.gosaLoginSpacer { + height:100px; +} + +table.gosaLoginMask { + background-color:#8B898B; + text-align: center; + border:0px; +} + +td.gosaLoginBack { + width:630px; + height:430px; + background:url(images/login.png); + vertical-align:top; +} + +div.gosaLoginBack { + padding-top:35px; + margin-left:100px; + margin-right:50px; + padding-bottom:0px; + vertical-align:top; +} + +p.gosaLoginHeader { + text-align: center; + font-size: 14px; + font-weight: bold; + margin-bottom: 15px; +} + +p.gosaLoginWarning { + text-align:center; + color:red; + font-weight:bold; + font-size:12px; +} + +table.framework { + width:100%; + height:100%; + border:0px; + border-spacing:0px; + padding:0px; + margin:0px; + background-color:#CDF6BD; + vertical-align:top; +} + +table.maintab { + width:100%; + height:100%; + border:0px; + border-spacing:0px; + padding:0px; + margin:0px; + background-color:#CDF6BD; + vertical-align:top; +} + + +input { + font-size: 12px; +} + +input:focus { + background-color: #f5f5f5; + font-size: 12px; +} + +select { + font-size: 12px; +} + +textarea { + font-size: 12px; +} + +textarea:focus { + background-color: #f0f0f0; + font-size: 12px; +} + +div.contentboxh { + background-color:#E8E8E8; + border:1px solid #B0B0B0; + border-bottom-width:0px; + height:26px; +} + +p.contentboxh { + margin:2px; + font-family:Arial,Helvetica,sans-serif; + font-size: 16px; + font-weight: bold; +} + +div.contentboxb { + border:1px solid #B0B0B0; + border-top-width:0px; +} + +p.contentboxb { + padding-bottom:0px; + margin:0px; + border:4px solid #F8F8F8; +} + +a.alphaselect:hover { + text-decoration: none; + background-color: #A0A0A0; + color: white; +} + +table.check { + background-color: #E1E1F1; + font-color: black; + border:1px dashed #A0A0A0; + width:95%; + margin-left:20px; +} + +td.check { + border-right:1px dashed #A0A0A0; +} + +option.select { + background-repeat:no-repeat; + background-position:0px top; + border:0; + padding-left:20px; + padding-bottom:1px; + height:18px; +} + +input.menubar{ + text-decoration: none; + height:19px; + padding:0px; + width:100%; +} diff --git a/html/themes/classic/images/go_bar.png b/html/themes/classic/images/go_bar.png new file mode 100644 index 0000000000000000000000000000000000000000..5eec489452dd20de0a5e974e1ecb4fa9e53ec1c6 GIT binary patch literal 187 zcmeAS@N?(olHy`uVBq!ia0vp^yMdUCgAGW&Vbk9Qq}YoG5lwEHZyEvB2a|0 zz$3Dlfq`29gc;W=?=1xivX^-Jy0Twp;o|3E6k5AW2`J>@>EaktG3V_iN6`ia23ALv zM)pY)duzlDTDAzt)vFzp`?l-$53bvl_x4#mv?wiQ_;d8l5d&+(Gk!dqg%2Z`$xJJE WGe6r<>&kwKg_Bd0Z+mO`TAz{pi@c$f=(RCzgW$T zv)0ae?wQ>ibZW=3ZMoccSe47p%?#pNYbw{zzSi_i&y-6=-??RyWiIc2VB_zlxn#<; z7vdGS&60YQ9pmHr<&tGC>Tl@KX__Kr`CKvR>g}bR4jhbvl9Ouhx39?m^ZpXs9eKz9 z^I}c7=N~$^^WvLDk!JI`?_{&RPbsdSX|sRM&hKv+eq8^5?(;8J{}6toORU{5fg!=* M>FVdQ&MBb@09-7VuK)l5 literal 0 HcmV?d00001 diff --git a/html/themes/classic/images/go_left.png b/html/themes/classic/images/go_left.png new file mode 100644 index 0000000000000000000000000000000000000000..3b22bd5cd8fffafde3e5059d25d8e83a3fcc7df8 GIT binary patch literal 179 zcmeAS@N?(olHy`uVBq!ia0vp^{6Nge!3HAle6a#jY)RhkE)4%caKYZ?lYt_f1s;*b z3=G_YAk0{w5<>&kwKg_BdANnwK+2T;ht)5S5QVh-!UjhqJ@I2l`&^{s`Jy@-Yr{o!bgdzJbi8J%!R8uI2i1+pR@f- Ti`Li$G>gI0)z4*}Q$iB}K#e$> literal 0 HcmV?d00001 diff --git a/html/themes/classic/images/go_logo.png b/html/themes/classic/images/go_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..8bc1d1e266e8667bf40245893f7bbf97aa61786f GIT binary patch literal 6084 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 Y7pOjXFZUueod5s;07*qoM6N<$f{ko{iU0rr literal 0 HcmV?d00001 diff --git a/html/themes/default/images/gohome.png b/html/themes/default/images/gohome.png new file mode 100644 index 0000000000000000000000000000000000000000..37a5231bacc905886c9351a291e0d5eed68dd60e GIT binary patch literal 1340 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 literal 0 HcmV?d00001 diff --git a/html/themes/default/images/stop.png b/html/themes/default/images/stop.png new file mode 100644 index 0000000000000000000000000000000000000000..73b27d9fd698719f5b3788953815b886eac142a9 GIT binary patch literal 1330 zcmV-21pGyMhjlj%olzRl#t{GP4^moSS&kUhx#@THph%^$H+mK@7k{R}|dV z(C-U*_^Xx6&Zg7p;D5pW-D?&I*lWQ@(RjQiF>9ub%$|+AXdyu)Lj2|+>Yu;Kbj5NKTYAt-yRh2Z5r)xNq&0q_Nd49= zYR8UK==olObp!yAhNofq+b{6>u(qNmC7EVzqhxyYyezZxq7WF#Qvsb%feRAWUob05;SQJ#nPJZgX4B)M%Xc4vx8{{ZGQ9hl=4>O({GQn}IoYqQ!1 zjf*Q+S-{>zQ(|3g{hNa146KKM56vfvVML+p!(rb!pqN9j(-q zmz3-~OY4!N%yi4rRH|#P}-xW0t3+zLZl=RwGpv;EQTtTP>zH4Janzby#og^qR}T-=ET-_iRMP{KU{$T zY=|I4V)AIKhz zaHaaNB();smNAYWnI3%R6s%kSa4scUDQZyjh47?;VFkC9QzHC`>}st64T2~CQfE#z zM$-h-q*kvJptIvr49k*bW;OKZL21)MTMfyder#+qj49y*;CWNvK{!lc+vEkRW|}vK zTAJ_4jTg>M_(C2o1%9bunT)r$lU@4?x>A|qoU>~;&iqcCUAw`y|KohYGARW9_((W> zBG=rMHvr_@Tkb5sJ3POR?lwE;B7C3n<=;uHdli6@Pd~?x$MEAZ>aiH*6DNtkwE=*8 z`}R`_hZq|gqUd?YeptHr8z4LRyPaOOc5zGv2V!&PydGb=RGN_pJXQ$PneTa&2L@E> z?%hj&B$HoU?3{BN$WLCNwY6ugbF6UDEEcKWb zfIB>LG1K0*Ka+a)H()fKP6w0VOeUkFJ)83L#`2eqk`t}xvh#em9P-0qVa8%e(*!9A z(2S3bQMqzex!13k-D2_BmDc2;`_ODUovu&YL3(?8B@lam;M$vU-+#|ks!JF~hmlA` z00P&osUXPKO!LM_IDF#d3(ubeMu6fIJIEt&0fgpfb1icnHx)vp5F(+3kiHP!xD>-f oEzS3G%}sg01*++EdP+k61=#!}%n4l`KL7v#07*qoM6N<$g8deGIRF3v literal 0 HcmV?d00001 diff --git a/html/themes/default/style.css b/html/themes/default/style.css new file mode 100644 index 000000000..7067d5322 --- /dev/null +++ b/html/themes/default/style.css @@ -0,0 +1,505 @@ +body +{ + margin-left: 0px; + margin-right: 0px; + margin-top: 0px; + margin-bottom: 0px; + background-color: #8B858B; + color: #00008F; + font-family:Arial,Helvetica,sans-serif; + font-size: 12px; +} + +h1 { font-size: 14px; color: #00378a;} +h2,h3,h4,h5,h6 { font-size: 13px; color: #00378a;} + +td,p,b {font-size: 12px;} + +/* Title bar */ +a.maintitlebar, div.maintitlebar { + font-family: arial,helvetica,sans-serif; + text-decoration: none; + color: #00348B; + font-size: 12px; +} + +a.maintitlebar:hover{ + text-decoration: none; + background-color: #B0D3A0; +} + +p.menuheader { + font-family: arial,helvetica,sans-serif; + color: #00378a; + text-decoration: none; + background-color: #CDF6BD; + font-weight: bold; + font-size: 12px; + text-align: center; + width: 100%; + vertical-align: middle; + padding: 3px; + margin-top: 30px; +} + +p.menuitem { + font-family: arial,helvetica,sans-serif; + color: #00378a; + text-decoration: none; + font-weight: normal; + font-size: 12px; + text-align: left; + padding-left: 15px; + padding-top: 2px; + padding-bottom: 2px; + vertical-align: middle; + margin: 2px; + background-color: #DFFFDF; + padding-right: 5px; +} + +p.menuitem:hover{ + background-color:#D2F6C2; +} + +table.menuitem { + width:100%; + margin-top:10px; + margin-bottom:10px; + margin-right:10px; + background-color:#F0F0F0; +} + +table.menuitem:hover{ + background-color:#C5C5C5; +} + + +td.phonelist:hover { + background-color: #D2D2D2; +} + +h1.menuheader{ + border-style:solid; + border-color:#707070; + width:100%; + border-top-width:1px; + border-bottom-width:0px; + border-left-width:0px; + border-right-width:0px; + padding-top:10px; + padding-bottom:0px; +} + +div.copynotice{ + border-style:solid; + border-color:#707070; + width:100%; + border-top-width:1px; + border-bottom-width:0px; + border-left-width:0px; + border-right-width:0px; + padding-top:3px; + padding-bottom:0px; + text-align: right; + font-family:Arial,Helvetica,sans-serif; + font-size: 10px; +} + +a:link{ + text-decoration: none; + color: #00008F; +} + +a:visited{ + text-decoration: none; + color: #00008F; +} + +a.menuitem:link{ + text-decoration: none; + color: #00008F; +} + +a.menuitem:visited{ + text-decoration: none; + color: #00008F; +} + +a.menuitem:hover{ + text-decoration: none; +} + +a.iconmenu:link{ + text-decoration: none; + color: #00008F; +} + +td.iconmenu:hover { + background-color: #E0E0E0; +} + +a.iconmenu:visited{ + text-decoration: none; + color: #00008F; +} + +a.iconmenu:hover{ + text-decoration: none; +} + +h1.plugtop{ + border-style:solid; + border-color:#707070; + width:100%; + border-top-width:0px; + border-bottom-width:1px; + border-left-width:0px; + border-right-width:0px; + padding-top:0px; + margin-top:0px; + padding-bottom:6px; + text-align: left; + background-color: red; + font-family:Arial,Helvetica,sans-serif; + font-size: 24px; +} + +div.plugtop{ + border-style:solid; + border-color:B0B0B0; + width:100%; + border-top-color: #E0E0F0; + border-top-width:6px; + border-bottom-width:1px; + border-left-width:0px; + border-right-width:0px; + padding-top:0px; + padding-bottom:6px; + margin-bottom: 0px; + text-align: left; + vertical-align: middle; + background-color: #E0E0F0; + font-family:Arial,Helvetica,sans-serif; + font-weight: bold; + font-size: 24px; +} + +div.pluginfo{ + border:solid; + border:0px; + width:100%; + padding-top:2px; + padding-bottom:2px; + margin-bottom: 10px; + text-align: right; + vertical-align: middle; + background-color: #C0C0E0; + font-family:Arial,Helvetica,sans-serif; + font-size: 11px; +} + +p.seperator{ + border-style:solid; + border-color:#A0A0A0; + width:100%; + border-top-width:0px; + border-bottom-width:1px; + border-left-width:0px; + border-right-width:0px; + padding-top:0px; + padding-bottom:0px; + margin-top:0px; + margin-bottom:0px; + text-align: left; +} + +p.plugbottom{ + border-style:solid; + border-color:#A0A0A0; + width:100%; + border-top-width:1px; + border-bottom-width:0px; + border-left-width:0px; + border-right-width:0px; + padding-top:10px; + padding-bottom:0px; + text-align: right; + font-family:Arial,Helvetica,sans-serif; +} + +font.must { + color: red; + font-family:Arial,Helvetica,sans-serif; +} + +div.tab_active { + text-align:center; + height:25px; + width:100px; + background-color:#F0F0F0; + border-style:solid; + border-color:black; + border-top-width:1px; + border-bottom-width:0px; + border-left-width:1px; + border-right-width:1px; + margin-top: 0px; + padding-top:1px; +} + +div.tab_left { + text-align:center; + height:20px; + width:100px; + background-color:#C0C0C0; + border-style:solid; + border-color:black; + border-top-width:1px; + border-bottom-width:1px; + border-left-width:1px; + border-right-width:0px; + margin-top: 5px; + padding-top:1px; +} + +div.tab_right { + text-align:center; + height:20px; + width:100px; + background-color:#C0C0C0; + border-style:solid; + border-color:black; + border-top-width:1px; + border-bottom-width:1px; + border-left-width:0px; + border-right-width:1px; + margin-top: 5px; + padding-top:1px; +} + +div.tab_near_active { + text-align:center; + height:20px; + width:100px; + background-color:#C0C0C0; + border-style:solid; + border-color:black; + border-top-width:1px; + border-bottom-width:1px; + border-left-width:1px; + border-right-width:1px; + margin-top: 5px; + padding-top:1px; +} + +div.tab_border { + width:100%; + height:20px; + border-style:solid; + border-color:black; + border-top-width:0px; + border-bottom-width:1px; + border-left-width:0px; + border-right-width:0px; +} + +a.tab_active, input.tab_active { + border: 0px; + margin: 0px; + width: 100px; + height: 22px; + font-family: arial,helvetica,sans-serif; + background-color: #F0F0F0; + text-decoration: none; + color: #00348B; + font-size: 13px; + font-weight: bold; +} + +a.tab_right, input.tab_right { + width: 100px; + height: 20px; + border: 0px; + margin: 0px; + font-family: arial,helvetica,sans-serif; + background-color: #C0C0C0; + text-decoration: none; + color: #00348B; + font-size: 13px; + font-weight: bold; +} + +a.tab_left, input.tab_left { + width: 100px; + height: 20px; + border: 0px; + margin: 0px; + font-family: arial,helvetica,sans-serif; + background-color: #C0C0C0; + text-decoration: none; + color: #00348B; + font-size: 13px; + font-weight: bold; +} + +a.tab_near_active, input.tab_near_active { + width: 100px; + height: 20px; + border: 0px; + margin: 0px; + font-family: arial,helvetica,sans-serif; + background-color: #C0C0C0; + text-decoration: none; + color: #00348B; + font-size: 13px; + font-weight: bold; +} + + + +/********************** Template migration *********************/ + +/* Login screen */ +div.gosaLoginSpacer { + height:100px; +} + +table.gosaLoginMask { + background-color:#8B898B; + text-align: center; + border:0px; +} + +td.gosaLoginBack { + width:606; + height:406px; + background:url(images/login.png); + vertical-align:top; +} + +div.gosaLoginBack { + padding-top:35px; + margin-left:100px; + margin-right:50px; + padding-bottom:0px; + vertical-align:top; +} + +p.gosaLoginHeader { + text-align: center; + font-size: 14px; + font-weight: bold; + margin-bottom: 15px; +} + +p.gosaLoginWarning { + text-align:center; + color:red; + font-weight:bold; + font-size:12px; +} + +table.framework { + width:100%; + height:100%; + border:0px; + border-spacing:0px; + padding:0px; + margin:0px; + background-color:#CDF6BD; + vertical-align:top; +} + +table.maintab { + width:100%; + height:100%; + border:0px; + border-spacing:0px; + padding:0px; + margin:0px; + background-color:#CDF6BD; + vertical-align:top; +} + + +input { + font-size: 12px; +} + +input:focus { + background-color: #f5f5f5; + font-size: 12px; +} + +select { + font-size: 12px; +} + +textarea { + font-size: 12px; +} + +textarea:focus { + background-color: #f0f0f0; + font-size: 12px; +} + +div.contentboxh { + background-color:#E8E8E8; + border:1px solid #B0B0B0; + border-bottom-width:0px; + height:26px; +} + +p.contentboxh { + margin:2px; + font-family:Arial,Helvetica,sans-serif; + font-size: 16px; + font-weight: bold; +} + +div.contentboxb { + border:1px solid #B0B0B0; + border-top-width:0px; +} + +p.contentboxb { + padding-bottom:0px; + margin:0px; + border:4px solid #F8F8F8; +} + +a.alphaselect:hover { + text-decoration: none; + background-color: #A0A0A0; + color: white; +} + +table.check { + background-color: #E1E1F1; + font-color: black; + border:1px dashed #A0A0A0; + width:95%; + margin-left:20px; +} + +td.check { + border-right:1px dashed #A0A0A0; +} + +option.select { + background-repeat:no-repeat; + background-position:0px top; + border:0; + padding-left:20px; + padding-bottom:1px; + height:18px; +} + +input.menubar{ + text-decoration: none; + height:19px; + padding:0px; + width:100%; +} diff --git a/ihtml/themes/altlinux/conflict.tpl b/ihtml/themes/altlinux/conflict.tpl new file mode 100644 index 000000000..8d5169578 --- /dev/null +++ b/ihtml/themes/altlinux/conflict.tpl @@ -0,0 +1,16 @@ +

+ +

+ {t}Warning{/t}: {t}Probably there's another active instance of your session. Multiple window operation is technical not possible and heavily depends on the browser you're using. Usage of different browsers at a time (i.e. IE and Mozilla) is possible. Pressing the Logout button will close this session.{/t} +

+ +

+ {t}Ignoring this message will change/destroy the data you're currently editing, so please close multiple windows and log in again.{/t} +

+ +

+ +

+ diff --git a/ihtml/themes/altlinux/framework.tpl b/ihtml/themes/altlinux/framework.tpl new file mode 100644 index 000000000..c40913bf8 --- /dev/null +++ b/ihtml/themes/altlinux/framework.tpl @@ -0,0 +1,56 @@ + + +
+ + + + + + + + + + + + + +
+ GOSA2 + + + + + + + +
+ + GOSA2 {t}Main{/t} + + + + GOSA2 {t}Help{/t} + + + + GOSA2 {t}Sign out{/t} + +
+
+ +
+
 
+ {$menu} +
+
+ + + + +
+ {$errors} + {$contents} +
+
diff --git a/ihtml/themes/altlinux/headers.tpl b/ihtml/themes/altlinux/headers.tpl new file mode 100644 index 000000000..80f0fda8b --- /dev/null +++ b/ihtml/themes/altlinux/headers.tpl @@ -0,0 +1,31 @@ + + + + + GOsa + + + + + + + + + + + + + + + + + + + + + diff --git a/ihtml/themes/altlinux/islocked.tpl b/ihtml/themes/altlinux/islocked.tpl new file mode 100644 index 000000000..cc1503ec9 --- /dev/null +++ b/ihtml/themes/altlinux/islocked.tpl @@ -0,0 +1,19 @@ +
+  {t}Locking conflict detected{/t} +
+ +

+ {t}Warning{/t}: {$message} +

+

+ {t}If this lock detection is false, the other person has obviously closed the webbrowser during the edit operation. You may delete the lockfile in this case by pressing the Remove button.{/t} +

+ +

+ +   + +

+ + + diff --git a/ihtml/themes/altlinux/login.tpl b/ihtml/themes/altlinux/login.tpl new file mode 100644 index 000000000..05df7a9d8 --- /dev/null +++ b/ihtml/themes/altlinux/login.tpl @@ -0,0 +1,77 @@ +{* GOsa login - smarty template *} + + +{$errors} +
+ + + + + +
+
+ +

+ {t}Please use your username and password to log in{/t} +

+ + +

{$ssl}

+ + +
+ + + + + + + + + + + + + + + + +
+ {t}Username{/t} + + +
+ {t}Password{/t} + + +
+ {t}Directory{/t} + + +
+
+ +
+
+ + +

{$message}

+ +
+
+ + + + + +
diff --git a/ihtml/themes/altlinux/setup.tpl b/ihtml/themes/altlinux/setup.tpl new file mode 100644 index 000000000..3b48009df --- /dev/null +++ b/ihtml/themes/altlinux/setup.tpl @@ -0,0 +1,35 @@ +
+ + + + + + + + + + + +
+ + + setup.php +
+ {include file="$content"} +
+ + + + + + diff --git a/ihtml/themes/altlinux/setup_finish.tpl b/ihtml/themes/altlinux/setup_finish.tpl new file mode 100644 index 000000000..176b99e18 --- /dev/null +++ b/ihtml/themes/altlinux/setup_finish.tpl @@ -0,0 +1,26 @@ +

{t}Setup finished{/t}

+ +

+ {t}GOsa setup has collected all data needed to create an initial configuration file. Save the the link below as your gosa.conf and place that file in /etc/gosa. Change it as needed.{/t} +

+ +

+ > gosa.conf +

+ +

+ {t}After placing the file under /etc/gosa, place make sure that the webserver user is able to read gosa.conf, while other users shouldn't. You may want to execute these commands to achieve this requirement:{/t} +

+ + +# chown root.{$webgroup} /etc/gosa/gosa.conf
+# chmod 640 /etc/gosa/gosa.conf +
+ +
+ {if $mode ne 'ready'} + + {else} + + {/if} +
diff --git a/ihtml/themes/altlinux/setup_introduction.tpl b/ihtml/themes/altlinux/setup_introduction.tpl new file mode 100644 index 000000000..526b1a5eb --- /dev/null +++ b/ihtml/themes/altlinux/setup_introduction.tpl @@ -0,0 +1,14 @@ +

{t}Welcome to the GOsa setup!{/t}

+ +

+ {t}It looks like you're calling GOsa for the first time - no configuration was found. This setup like script will try to aid you in creating a working configuration by performing three major steps: first we'll check the PHP installation for required modules, than we're going to check for optional/needed programms and after you've provided basic informations for your LDAP connectivity, we're going to check your LDAP setup.{/t} +

+ +{$tests} + +
+ +
+ +
+
diff --git a/ihtml/themes/altlinux/setup_step2.tpl b/ihtml/themes/altlinux/setup_step2.tpl new file mode 100644 index 000000000..e75f6864f --- /dev/null +++ b/ihtml/themes/altlinux/setup_step2.tpl @@ -0,0 +1,17 @@ +

{t}Setup continued...{/t}

+ +

+ {t}Step two looks for a set of helper programms and checks if they have the correct minimum version.{/t} +

+ +{$tests} + +{if $mode ne "disabled"} +

+ {t}We've inspected the webserver side now. Your setup seems to fit GOsa's needs. Lets go for the GOsa configuration part now...{/t} +

+{/if} + +
+ +
diff --git a/ihtml/themes/altlinux/setup_step3.tpl b/ihtml/themes/altlinux/setup_step3.tpl new file mode 100644 index 000000000..e1debc83a --- /dev/null +++ b/ihtml/themes/altlinux/setup_step3.tpl @@ -0,0 +1,13 @@ +

{t}Setup continued...{/t}

+ +

+ {t}Now we're going include your LDAP server and create an initial configuration. After you've entered the server URI below, a quick check is performed if required LDAP schemas are in place. Samba versions are autodetected by the installed objectclasses. Details on how your LDAP tree is organized will be asked later on.{/t} +

+ +{t}Please enter the server URI{/t} +
+ + +
+ +
diff --git a/ihtml/themes/altlinux/setup_step4.tpl b/ihtml/themes/altlinux/setup_step4.tpl new file mode 100644 index 000000000..57e2d896e --- /dev/null +++ b/ihtml/themes/altlinux/setup_step4.tpl @@ -0,0 +1,57 @@ +

{t}Setup continued...{/t}

+ +

+ {t}Enter a description for the location you're configuring here{/t}: +

+
+ + + + +
{t}Location name{/t}
+ +

+ {t}Finally, you need to specify parameters to access the LDAP server. GOsa always acts as admin and manages access rights internally. This is a workaround till OpenLDAP's in directory ACI's are fully implemented. For this to work, we need the admin DN and the corresponding password.{/t} +

+ + + + + + + + + + +
{t}Admin DN{/t}
{t}Admin password{/t}
+ +

+ {t}Some basic LDAP parameters are tunable and affect the locations where GOsa saves people and groups, including the way accounts get created. Check the values below if the fit your needs.{/t} +

+ + + + + + + + + + + + + + + + + + +
{t}People storage ou{/t}
{t}People dn attribute{/t} + +
{t}Group storage ou{/t}
{t}ID base for users/groups{/t}
+ +
+ +
diff --git a/ihtml/themes/altlinux/sizelimit.tpl b/ihtml/themes/altlinux/sizelimit.tpl new file mode 100644 index 000000000..6ec66dc4f --- /dev/null +++ b/ihtml/themes/altlinux/sizelimit.tpl @@ -0,0 +1,17 @@ +

{$warning}

+

+{t}The size limit option makes LDAP operations faster and saves the LDAP server from getting too much load. The easiest way to handle big databases without long timeouts would be to limit your search to smaller values and use filters to get the entries you are looking for.{/t} +

+

+{t}Please choose the way to react for this session{/t}: +

+ +{t}ignore this error and show all entries the LDAP server returns{/t}
+{t}ignore this error and show all entries that fit int the defined sizelimit and let me use filters instead{/t}
+{$limit_message} + +

+ +

+ + diff --git a/ihtml/themes/classic/conflict.tpl b/ihtml/themes/classic/conflict.tpl new file mode 100644 index 000000000..8d5169578 --- /dev/null +++ b/ihtml/themes/classic/conflict.tpl @@ -0,0 +1,16 @@ +
+ {t}Session conflict detected{/t} +
+ +

+ {t}Warning{/t}: {t}Probably there's another active instance of your session. Multiple window operation is technical not possible and heavily depends on the browser you're using. Usage of different browsers at a time (i.e. IE and Mozilla) is possible. Pressing the Logout button will close this session.{/t} +

+ +

+ {t}Ignoring this message will change/destroy the data you're currently editing, so please close multiple windows and log in again.{/t} +

+ +

+ +

+ diff --git a/ihtml/themes/classic/framework.tpl b/ihtml/themes/classic/framework.tpl new file mode 100644 index 000000000..bea694193 --- /dev/null +++ b/ihtml/themes/classic/framework.tpl @@ -0,0 +1,65 @@ + +
+ + + + + + +
+ + {t}Main{/t} + | + {t}Help{/t} + | + {t}Sign out{/t} + + + +
+ + + + + + + + + + + + + +
+ GOSA2 + {$menu} +
+
+ * +
+
+
+   +
+
+ {$contents} +
+
+ + +
+ + + diff --git a/ihtml/themes/classic/headers.tpl b/ihtml/themes/classic/headers.tpl new file mode 100644 index 000000000..a6f8dc44d --- /dev/null +++ b/ihtml/themes/classic/headers.tpl @@ -0,0 +1,27 @@ + + + + + GOsa + + + + + + + + + + + + + + + + + + + + + diff --git a/ihtml/themes/classic/islocked.tpl b/ihtml/themes/classic/islocked.tpl new file mode 100644 index 000000000..663d4e324 --- /dev/null +++ b/ihtml/themes/classic/islocked.tpl @@ -0,0 +1,19 @@ +
+  {t}Locking conflict detected{/t} +
+ +

+ {t}Warning{/t}: {$message} +

+

+ {t}If this is lock detection is false, the other person has obviously closed the webbrowser during the edit operation. You may delete the lockfile in this case by pressing the Remove button.{/t} +

+ +

+ +   + +

+ + + diff --git a/ihtml/themes/classic/login.tpl b/ihtml/themes/classic/login.tpl new file mode 100644 index 000000000..2fb348877 --- /dev/null +++ b/ihtml/themes/classic/login.tpl @@ -0,0 +1,76 @@ +{* GOsa login - smarty template *} + + +
+ + + + + +
+
+ +

+ {t}Please use your username and password to log in{/t} +

+ + +

{$ssl}

+ + +
+ + + + + + + + + + + + + + + + +
+ {t}Username{/t} + + +
+ {t}Password{/t} + + +
+ {t}Directory{/t} + + +
+
+ +
+
+ + +

{$message}

+ +
+
+ + + + + +
diff --git a/ihtml/themes/default/conflict.tpl b/ihtml/themes/default/conflict.tpl new file mode 100644 index 000000000..8d5169578 --- /dev/null +++ b/ihtml/themes/default/conflict.tpl @@ -0,0 +1,16 @@ +
+ {t}Session conflict detected{/t} +
+ +

+ {t}Warning{/t}: {t}Probably there's another active instance of your session. Multiple window operation is technical not possible and heavily depends on the browser you're using. Usage of different browsers at a time (i.e. IE and Mozilla) is possible. Pressing the Logout button will close this session.{/t} +

+ +

+ {t}Ignoring this message will change/destroy the data you're currently editing, so please close multiple windows and log in again.{/t} +

+ +

+ +

+ diff --git a/ihtml/themes/default/framework.tpl b/ihtml/themes/default/framework.tpl new file mode 100644 index 000000000..389eb96e4 --- /dev/null +++ b/ihtml/themes/default/framework.tpl @@ -0,0 +1,56 @@ + + +
+ + + + + + + + + + + + + +
+ GOSA2 + + + + + + + +
+ + GOSA2 {t}Main{/t} + + + + GOSA2 {t}Help{/t} + + + + GOSA2 {t}Sign out{/t} + +
+
+ +
+
 
+ {$menu} +
+
+ + + + +
+ {$errors} + {$contents} +
+
diff --git a/ihtml/themes/default/headers.tpl b/ihtml/themes/default/headers.tpl new file mode 100644 index 000000000..0e18175e9 --- /dev/null +++ b/ihtml/themes/default/headers.tpl @@ -0,0 +1,31 @@ + + + + + GOsa + + + + + + + + + + + + + + + + + + + + + diff --git a/ihtml/themes/default/islocked.tpl b/ihtml/themes/default/islocked.tpl new file mode 100644 index 000000000..cc1503ec9 --- /dev/null +++ b/ihtml/themes/default/islocked.tpl @@ -0,0 +1,19 @@ +
+  {t}Locking conflict detected{/t} +
+ +

+ {t}Warning{/t}: {$message} +

+

+ {t}If this lock detection is false, the other person has obviously closed the webbrowser during the edit operation. You may delete the lockfile in this case by pressing the Remove button.{/t} +

+ +

+ +   + +

+ + + diff --git a/ihtml/themes/default/login.tpl b/ihtml/themes/default/login.tpl new file mode 100644 index 000000000..05df7a9d8 --- /dev/null +++ b/ihtml/themes/default/login.tpl @@ -0,0 +1,77 @@ +{* GOsa login - smarty template *} + + +{$errors} +
+ + + + + +
+
+ +

+ {t}Please use your username and password to log in{/t} +

+ + +

{$ssl}

+ + +
+ + + + + + + + + + + + + + + + +
+ {t}Username{/t} + + +
+ {t}Password{/t} + + +
+ {t}Directory{/t} + + +
+
+ +
+
+ + +

{$message}

+ +
+
+ + + + + +
diff --git a/ihtml/themes/default/setup.tpl b/ihtml/themes/default/setup.tpl new file mode 100644 index 000000000..661840428 --- /dev/null +++ b/ihtml/themes/default/setup.tpl @@ -0,0 +1,37 @@ +
+ + + +{$errors} + + + + + + + + + +
+ + + setup.php +
+ {include file="$content"} +
+ + + + + + diff --git a/ihtml/themes/default/setup_finish.tpl b/ihtml/themes/default/setup_finish.tpl new file mode 100644 index 000000000..ccd0b19bb --- /dev/null +++ b/ihtml/themes/default/setup_finish.tpl @@ -0,0 +1,32 @@ +

{t}Setup finished{/t}

+ +{t}Basically the setup is finished. You can check the result of the schema check here and download the autogenerated gosa.conf below.{/t} + +

 

+ +

{t}Schema Configuration{/t}

+

{$schemas}

+ +

 

+ +

{t}Configuration File{/t}

+

+ {t}GOsa setup has collected all data needed to create an initial configuration file. Save the the link below as your gosa.conf and place that file in /etc/gosa. Change it as needed.{/t} +

+ + + +

+ {t}After placing the file under /etc/gosa, place make sure that the webserver user is able to read gosa.conf, while other users shouldn't. You may want to execute these commands to achieve this requirement:{/t} +

+ +
+# chown root.{$webgroup} /etc/gosa/gosa.conf
+# chmod 640 /etc/gosa/gosa.conf
+
+ +

+ + + +

diff --git a/ihtml/themes/default/setup_introduction.tpl b/ihtml/themes/default/setup_introduction.tpl new file mode 100644 index 000000000..4f8ada563 --- /dev/null +++ b/ihtml/themes/default/setup_introduction.tpl @@ -0,0 +1,16 @@ +

{t}Welcome to the GOsa setup!{/t}

+ +

+ {t}It looks like you're calling GOsa for the first time - no configuration was found. This setup like script will try to aid you in creating a working configuration by performing three major steps: first we'll check the PHP installation for required modules, than we're going to check for optional/needed programms and after you've provided basic informations for your LDAP connectivity, we're going to check your LDAP setup.{/t} +

+

 

+ +{$tests} + +

+ + +

+ +
+
diff --git a/ihtml/themes/default/setup_step2.tpl b/ihtml/themes/default/setup_step2.tpl new file mode 100644 index 000000000..6d23e42ef --- /dev/null +++ b/ihtml/themes/default/setup_step2.tpl @@ -0,0 +1,14 @@ +

{t}Setup continued...{/t}

+ +

+ {t}Step two looks for a set of helper programms and checks if they have the correct minimum version.{/t} +

+

 

+ +{$tests} + +

+ + + +

diff --git a/ihtml/themes/default/setup_step3.tpl b/ihtml/themes/default/setup_step3.tpl new file mode 100644 index 000000000..68214b45e --- /dev/null +++ b/ihtml/themes/default/setup_step3.tpl @@ -0,0 +1,19 @@ +

{t}Setup continued...{/t}

+ +

+ {t}Now we're going include your LDAP server and create an initial configuration. After you've entered the server URI below, a quick check is performed if required LDAP schemas are in place. Samba versions are autodetected by the installed objectclasses. Details on how your LDAP tree is organized will be asked later on.{/t} +

+ +

 

+
+ +{t}Please enter the server URI to allow the setup to connect your LDAP server (Example: ldap://your.server:389).{/t} +
+
+URI  + +

+ + + +

diff --git a/ihtml/themes/default/setup_step4.tpl b/ihtml/themes/default/setup_step4.tpl new file mode 100644 index 000000000..dd9d4ce31 --- /dev/null +++ b/ihtml/themes/default/setup_step4.tpl @@ -0,0 +1,96 @@ +

{t}Setup continued...{/t}

+{t}The following fields allow the basic configuration of GOsa's behaviour and affect various properties in your main configuration.{/t} + +

 

+ +

+ {t}Enter a description for the location you're configuring here{/t}: +

+
+ + + + +
{t}Location name{/t}
+ +

 

+

+ {t}GOsa always acts as admin and manages access rights internally. This is a workaround till OpenLDAP's in directory ACI's are fully implemented. For this to work, we need the admin DN and the corresponding password.{/t} +

+ + + + + + + + + + +
{t}Admin DN{/t}
{t}Admin password{/t}
+

 

+ +

+ {t}Some basic LDAP parameters are tunable and affect the locations where GOsa saves people and groups, including the way accounts get created. Check the values below if the fit your needs.{/t} +

+ + + + + + + + + + + + + + + + + + +
{t}People storage ou{/t}
{t}People dn attribute{/t} + +
{t}Group storage ou{/t}
{t}ID base for users/groups{/t}
+ +

 

+ +

+ {t}GOsa supports several encryption types for your passwords. Normally this is adjustable via user templates, but you can specify a default method to be used here, too.{/t} +

+ + + + + +
{t}Encryption algorithm{/t} + +
+ +

 

+ +

+ {t}GOsa has modular support for several mail methods. These methods provide interfaces to users mailboxes and general handling for quotas. You can choose the dummy plugin to leave all your mail settings untouched.{/t} +

+ + + + + +
{t}Mail method{/t} + +
+ +

+ + + +

diff --git a/ihtml/themes/default/setup_useradmin.tpl b/ihtml/themes/default/setup_useradmin.tpl new file mode 100644 index 000000000..05ca79bc5 --- /dev/null +++ b/ihtml/themes/default/setup_useradmin.tpl @@ -0,0 +1,43 @@ + +{if $exists == TRUE} +

{t}You already have an Administrative Account and a Group.{/t}

+{else} + +

{t}You're missing an administrative account for GOsa, you'll not be able to administrate anything!{/t}

+{/if} + +

+{t}To provide full administrative access to GOsa, you need to create a special group which contains the administrative user. The setup program can assist you with this task. Enter the desired username and the password below to create the missing entries.{/t} +

+ +

+   +

+ +
+ + + + + + + + + + +
+ {t}Username{/t} + + +
+ {t}Password{/t} + + +
+ +

+ + + +

+ diff --git a/ihtml/themes/default/sizelimit.tpl b/ihtml/themes/default/sizelimit.tpl new file mode 100644 index 000000000..6ec66dc4f --- /dev/null +++ b/ihtml/themes/default/sizelimit.tpl @@ -0,0 +1,17 @@ +

{$warning}

+

+{t}The size limit option makes LDAP operations faster and saves the LDAP server from getting too much load. The easiest way to handle big databases without long timeouts would be to limit your search to smaller values and use filters to get the entries you are looking for.{/t} +

+

+{t}Please choose the way to react for this session{/t}: +

+ +{t}ignore this error and show all entries the LDAP server returns{/t}
+{t}ignore this error and show all entries that fit int the defined sizelimit and let me use filters instead{/t}
+{$limit_message} + +

+ +

+ + diff --git a/locale/de/LC_MESSAGES/messages.mo b/locale/de/LC_MESSAGES/messages.mo new file mode 100644 index 0000000000000000000000000000000000000000..0e7f4f16eb36bfc278cb58a9eff7e03432137e71 GIT binary patch literal 124779 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%0DQajO@QHJ~HqXjb+@WYZf_#J@rYZ+=7l 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 literal 0 HcmV?d00001 diff --git a/locale/de/LC_MESSAGES/messages.po b/locale/de/LC_MESSAGES/messages.po new file mode 100644 index 000000000..f2a242347 --- /dev/null +++ b/locale/de/LC_MESSAGES/messages.po @@ -0,0 +1,6412 @@ +# translation of messages.po to +# translation of messages.po to +# translation of messages.po to +# translation of messages.po to +# translation of messages.po to +# translation of messages.po to +# GOsa2 Translations +# Copyright (C) 2003 GONICUS GmbH, Germany +# This file is distributed under the same license as the GOsa2 package. +# Alfred Schroeder , 2004. +# Cajus Pollmeier , 2004, 2005. +# Jan Wenzel , 2004. +# Cajus Pollmeier , 2005. +# +msgid "" +msgstr "" +"Project-Id-Version: messages\n" +"Report-Msgid-Bugs-To: Alfred Schröder \n" +"POT-Creation-Date: 2003-09-19 13:41+0200\n" +"PO-Revision-Date: 2005-03-17 16:20+0100\n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-15\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.9.1\n" + +#: contrib/gosa.conf:4 +msgid "My account" +msgstr "Mein Konto" + +#: contrib/gosa.conf:23 +msgid "Administration" +msgstr "Administration" + +#: contrib/gosa.conf:40 +msgid "Addons" +msgstr "Zusätzliches" + +#: contrib/gosa.conf:55 contrib/gosa.conf:66 contrib/gosa.conf:74 +#: contrib/gosa.conf:80 contrib/gosa.conf:88 contrib/gosa.conf:98 +#: contrib/gosa.conf:106 contrib/gosa.conf:111 contrib/gosa.conf:116 +#: contrib/gosa.conf:121 contrib/gosa.conf:126 contrib/gosa.conf:131 +#: plugins/personal/mail/generic.tpl:4 plugins/personal/posix/generic.tpl:4 +#: plugins/personal/samba/samba2.tpl:6 plugins/personal/samba/samba3.tpl:6 +#: plugins/personal/generic/class_user.inc:16 +#: plugins/gofax/blocklists/generic.tpl:1 +#: plugins/gofax/faxaccount/generic.tpl:6 plugins/admin/groups/mail.tpl:7 +#: plugins/generic/references/class_reference.inc:20 +msgid "Generic" +msgstr "Allgemein" + +#: contrib/gosa.conf:56 +msgid "Unix" +msgstr "Unix" + +#: contrib/gosa.conf:57 contrib/gosa.conf:68 +#: plugins/personal/mail/class_mailAccount.inc:22 +#: plugins/generic/references/class_reference.inc:24 +msgid "Mail" +msgstr "Mail" + +#: contrib/gosa.conf:58 plugins/personal/samba/class_sambaAccount.inc:24 +#: plugins/generic/references/class_reference.inc:26 +#: plugins/generic/references/class_reference.inc:28 +msgid "Samba" +msgstr "Samba" + +#: contrib/gosa.conf:59 plugins/personal/connectivity/main.inc:136 +#: plugins/personal/connectivity/class_connectivity.inc:15 +msgid "Connectivity" +msgstr "Konnektivität" + +#: contrib/gosa.conf:60 plugins/personal/generic/generic.tpl:231 +#: plugins/personal/generic/generic.tpl:362 +#: plugins/gofax/faxaccount/generic.tpl:10 +#: plugins/addons/addressbook/contents.tpl:14 +#: plugins/admin/departments/generic.tpl:62 +msgid "Fax" +msgstr "Fax" + +#: contrib/gosa.conf:61 plugins/personal/generic/generic.tpl:214 +#: plugins/personal/generic/generic.tpl:352 +#: plugins/addons/addressbook/contents.tpl:14 +#: plugins/addons/addressbook/address_edit.tpl:41 +#: plugins/addons/addressbook/address_edit.tpl:89 +#: plugins/addons/addressbook/address_info.tpl:37 +#: plugins/addons/addressbook/address_info.tpl:85 +#: plugins/admin/departments/generic.tpl:58 +#: plugins/admin/systems/chooser.tpl:12 +#: plugins/admin/ogroups/class_ogroupManagement.inc:48 +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:6 +#: plugins/generic/references/class_reference.inc:40 +msgid "Phone" +msgstr "Telefon" + +#: contrib/gosa.conf:62 contrib/gosa.conf:70 contrib/gosa.conf:76 +#: contrib/gosa.conf:84 contrib/gosa.conf:94 contrib/gosa.conf:102 +#: contrib/gosa.conf:107 contrib/gosa.conf:112 contrib/gosa.conf:117 +#: contrib/gosa.conf:122 contrib/gosa.conf:127 contrib/gosa.conf:132 +msgid "References" +msgstr "Referenzen" + +#: contrib/gosa.conf:67 +#: plugins/admin/applications/class_applicationManagement.inc:25 +#: plugins/admin/ogroups/class_ogroupManagement.inc:44 +msgid "Applications" +msgstr "Anwendungen" + +#: contrib/gosa.conf:69 +msgid "ACL" +msgstr "Zugriffsregeln" + +#: contrib/gosa.conf:75 +msgid "Options" +msgstr "Optionen" + +#: contrib/gosa.conf:81 contrib/gosa.conf:99 +msgid "Devices" +msgstr "Geräte" + +#: contrib/gosa.conf:82 contrib/gosa.conf:100 +msgid "Startup" +msgstr "Starten" + +#: contrib/gosa.conf:83 contrib/gosa.conf:93 contrib/gosa.conf:101 +msgid "Monitoring" +msgstr "Überwachung" + +#: contrib/gosa.conf:89 +#, fuzzy +msgid "Databases" +msgstr "Datum" + +#: contrib/gosa.conf:90 +#, fuzzy +msgid "Services" +msgstr "Geräte" + +#: contrib/gosa.conf:91 +msgid "DNS" +msgstr "" + +#: contrib/gosa.conf:92 +msgid "DHCP" +msgstr "" + +#: contrib/gosa.conf:141 plugins/addons/ldapmanager/contentexport.tpl:19 +#: plugins/addons/ldapmanager/contentexport.tpl:32 +#: plugins/addons/ldapmanager/contentexport.tpl:47 +#, fuzzy +msgid "Export" +msgstr "Importieren" + +#: contrib/gosa.conf:142 plugins/personal/mail/generic.tpl:107 +#: plugins/addons/ldapmanager/contentimport.tpl:63 +#: plugins/addons/ldapmanager/contentcsv.tpl:122 +#: plugins/addons/ldapmanager/contentcsv.tpl:125 +msgid "Import" +msgstr "Importieren" + +#: contrib/gosa.conf:143 +#, fuzzy +msgid "CSV Import" +msgstr "Importieren" + +#: contrib/gosa.conf:158 +msgid "GONICUS" +msgstr "GONICUS" + +#: contrib/gosa.conf:176 +msgid "German" +msgstr "Deutsch" + +#: contrib/gosa.conf:177 +msgid "Russian" +msgstr "Russisch" + +#: contrib/gosa.conf:178 +msgid "Spanish" +msgstr "Spanisch" + +#: contrib/gosa.conf:179 +msgid "French" +msgstr "Französisch" + +#: contrib/gosa.conf:180 +msgid "Dutch" +msgstr "Niederländisch" + +#: contrib/gosa.conf:181 +msgid "English" +msgstr "Englisch" + +#: plugins/personal/mail/class_mailAccount.inc:23 +#: plugins/personal/password/class_password.inc:6 +#: plugins/personal/posix/class_posixAccount.inc:17 +#: plugins/personal/samba/class_sambaAccount.inc:25 +#: plugins/personal/generic/class_user.inc:17 +#: plugins/personal/connectivity/class_pureftpdAccount.inc:7 +#: plugins/personal/connectivity/class_phpgwAccount.inc:6 +#: plugins/personal/connectivity/class_webdavAccount.inc:7 +#: plugins/personal/connectivity/class_connectivity.inc:16 +#: plugins/personal/connectivity/class_proxyAccount.inc:6 +#: plugins/gofax/blocklists/class_blocklistManagement.inc:6 +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:7 +#: plugins/gofax/reports/class_faxreport.inc:7 +#: plugins/addons/addressbook/class_addressbook.inc:7 +#: plugins/addons/logview/class_logview.inc:7 +#: plugins/addons/ldapmanager/class_csvimport.inc:7 +#: plugins/addons/ldapmanager/class_import.inc:7 +#: plugins/addons/ldapmanager/class_ldif.inc:8 +#: plugins/addons/ldapmanager/class_export.inc:8 +#: plugins/admin/groups/class_groupManagement.inc:26 +#: plugins/admin/users/class_userManagement.inc:26 +#: plugins/admin/applications/class_applicationManagement.inc:26 +#: plugins/admin/departments/class_departmentManagement.inc:26 +#: plugins/admin/systems/class_systemManagement.inc:33 +#: plugins/admin/ogroups/class_ogroupManagement.inc:26 +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:7 +#: plugins/gofon/reports/class_fonreport.inc:7 +msgid "This does something" +msgstr "Dies tut etwas" + +#: plugins/personal/mail/class_mailAccount.inc:79 +#: plugins/admin/groups/class_groupMail.inc:59 +#, php-format +msgid "There is no mail method '%s' specified in your gosa.conf available." +msgstr "" +"Die in ihrer gosa.conf angegebene Mail-Methode '%s' ist nicht verfügbar." + +#: plugins/personal/mail/class_mailAccount.inc:158 +msgid "No DESC tag in vacation file:" +msgstr "Kein DESC-Tag in der Abwesenheits-Datei:" + +#: plugins/personal/mail/class_mailAccount.inc:184 +msgid "This account has no mail extensions." +msgstr "Dieses Konto hat keine Mail-Erweiterungen." + +#: plugins/personal/mail/class_mailAccount.inc:192 +#: plugins/admin/groups/class_groupMail.inc:187 +msgid "Remove mail account" +msgstr "Mail-Konto entfernen" + +#: plugins/personal/mail/class_mailAccount.inc:193 +#: plugins/admin/groups/class_groupMail.inc:188 +msgid "" +"This account has mail features enabled. You can disable them by clicking " +"below." +msgstr "" +"Dieses Gruppe hat Mail-Optionen aktiviert. Sie können diese deaktivieren, " +"indem Sie auf die Schaltfläche unten klicken." + +#: plugins/personal/mail/class_mailAccount.inc:195 +#: plugins/admin/groups/class_groupMail.inc:190 +msgid "Create mail account" +msgstr "Neues Mail-Konto erzeugen" + +#: plugins/personal/mail/class_mailAccount.inc:196 +#: plugins/admin/groups/class_groupMail.inc:191 +msgid "" +"This account has mail features disabled. You can enable them by clicking " +"below." +msgstr "" +"Diese Gruppe hat keine Mail-Optionen. Sie können diese aktivieren, wenn Sie " +"auf die Schaltfläche unten klicken." + +#: plugins/personal/mail/class_mailAccount.inc:244 +msgid "" +"You're trying to add an invalid email address to the list of forwarders." +msgstr "" +"Sie versuchen, eine ungültige Mail-Adresse in die Liste der Weiterleitungen " +"aufzunehmen." + +#: plugins/personal/mail/class_mailAccount.inc:250 +#: plugins/admin/groups/class_groupMail.inc:250 +msgid "Adding your one of your own addresses to the forwarders makes no sense." +msgstr "" +"Das Hinzufügen Ihrer eigenen Adresse zu den Weiterleitungen macht keinen " +"Sinn." + +#: plugins/personal/mail/class_mailAccount.inc:285 +#: plugins/personal/mail/class_mailAccount.inc:290 +#: plugins/admin/groups/class_groupMail.inc:278 +msgid "" +"You're trying to add an invalid email address to the list of alternate " +"addresses." +msgstr "Sie versuchen eine ungültige Mail-Adresse in die Liste aufzunehmen." + +#: plugins/personal/mail/class_mailAccount.inc:300 +#: plugins/admin/groups/class_groupMail.inc:283 +msgid "The address you're trying to add is already used by user" +msgstr "" +"Die Adresse, die Sie gerade hinzufügen möchten, wird bereits von einem " +"anderen Benutzer verwendet" + +#: plugins/personal/mail/class_mailAccount.inc:631 +#: plugins/admin/groups/class_groupMail.inc:610 +msgid "The required field 'Primary address' is not set." +msgstr "Das benötigte Feld 'Primäre Adresse' ist nicht gesetzt." + +#: plugins/personal/mail/class_mailAccount.inc:635 +#: plugins/personal/mail/class_mailAccount.inc:639 +#: plugins/addons/addressbook/class_addressbook.inc:529 +msgid "Please enter a valid email address in 'Primary address' field." +msgstr "" +"Bitte geben Sie eine gültige E-Mail-Adresse in das Feld 'Primäre Adresse' " +"ein." + +#: plugins/personal/mail/class_mailAccount.inc:646 +#: plugins/admin/groups/class_groupMail.inc:619 +msgid "The primary address you've entered is already in use." +msgstr "" +"Die primäre Adresse, welche Sie eingegeben haben, wird bereits benutzt." + +#: plugins/personal/mail/class_mailAccount.inc:652 +#: plugins/admin/groups/class_groupMail.inc:625 +msgid "Value in 'Quota size' is not valid." +msgstr "Das Feld 'Quota-Größe' enthält eine ungültige Eingabe." + +#: plugins/personal/mail/class_mailAccount.inc:661 +#: plugins/admin/groups/class_groupMail.inc:634 +msgid "Please specify a vaild mail size for mails to be rejected." +msgstr "" +"Bitte geben Sie eine gültige Größenbeschränkung für Mails an, die abgewiesen " +"werden sollen." + +#: plugins/personal/mail/class_mailAccount.inc:671 +#: plugins/admin/groups/class_groupMail.inc:642 +msgid "You need to set the maximum mail size in order to reject anything." +msgstr "Sie müssen die maximale Mail-Größe angeben, um Mails abzuweisen." + +#: plugins/personal/mail/generic.tpl:7 plugins/admin/groups/mail.tpl:10 +msgid "Primary address" +msgstr "Primäre Adresse" + +#: plugins/personal/mail/generic.tpl:11 plugins/admin/groups/mail.tpl:14 +#: plugins/generic/references/class_reference.inc:44 +msgid "Server" +msgstr "Server" + +#: plugins/personal/mail/generic.tpl:13 +msgid "Specify the mail server where the user will be hosted on" +msgstr "Wählen Sie den Mail-Server, auf dem dieses Konto verwaltet werden soll" + +#: plugins/personal/mail/generic.tpl:21 plugins/admin/groups/mail.tpl:24 +msgid "Quota usage" +msgstr "Mailbox-Nutzung" + +#: plugins/personal/mail/generic.tpl:28 plugins/admin/groups/mail.tpl:31 +#: plugins/admin/systems/class_terminalInfo.inc:136 +msgid "not defined" +msgstr "nicht definiert" + +#: plugins/personal/mail/generic.tpl:33 plugins/admin/groups/mail.tpl:36 +msgid "Quota size" +msgstr "Max. Mailbox-Größe" + +#: plugins/personal/mail/generic.tpl:47 plugins/admin/groups/mail.tpl:46 +msgid "Alternate addresses" +msgstr "Alternative Adressen" + +#: plugins/personal/mail/generic.tpl:49 plugins/admin/groups/mail.tpl:47 +msgid "List of alternative mail addresses" +msgstr "Liste von Alternative Mail-Adressen" + +#: plugins/personal/mail/generic.tpl:55 plugins/personal/mail/generic.tpl:121 +#: plugins/personal/mail/mail_locals.tpl:49 +#: plugins/personal/posix/trust_machines.tpl:45 +#: plugins/personal/posix/posix_groups.tpl:56 +#: plugins/personal/posix/generic.tpl:63 +#: plugins/personal/posix/generic.tpl:122 +#: plugins/personal/samba/samba3.tpl:247 +#: plugins/personal/samba/samba3_workstations.tpl:45 +#: plugins/gofax/blocklists/generic.tpl:60 +#: plugins/gofax/faxaccount/generic.tpl:73 +#: plugins/gofax/faxaccount/locals.tpl:48 +#: plugins/gofax/faxaccount/lists.tpl:11 plugins/gofax/faxaccount/lists.tpl:15 +#: plugins/admin/groups/mail.tpl:52 plugins/admin/groups/mail.tpl:97 +#: plugins/admin/groups/class_groupMail.inc:404 +#: plugins/admin/groups/group_objects.tpl:45 +#: plugins/admin/groups/generic.tpl:87 plugins/admin/groups/mail_locals.tpl:49 +#: plugins/admin/systems/startup.tpl:59 plugins/admin/systems/startup.tpl:72 +#: plugins/admin/systems/startup.tpl:91 +#: plugins/admin/ogroups/ogroup_objects.tpl:56 +#: plugins/admin/ogroups/generic.tpl:38 +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:203 +#: plugins/gofon/phoneaccount/generic.tpl:45 +msgid "Add" +msgstr "Hinzufügen" + +#: plugins/personal/mail/generic.tpl:57 plugins/personal/mail/generic.tpl:125 +#: plugins/personal/posix/generic.tpl:64 +#: plugins/personal/posix/generic.tpl:124 +#: plugins/personal/samba/samba3.tpl:249 +#: plugins/gofax/blocklists/generic.tpl:61 +#: plugins/gofax/blocklists/remove.tpl:15 +#: plugins/gofax/blocklists/headpage.tpl:17 +#: plugins/gofax/faxaccount/generic.tpl:75 +#: plugins/gofax/faxaccount/lists.tpl:12 +#: plugins/addons/addressbook/remove.tpl:15 plugins/admin/groups/mail.tpl:53 +#: plugins/admin/groups/mail.tpl:99 plugins/admin/groups/headpage.tpl:17 +#: plugins/admin/groups/remove.tpl:15 plugins/admin/groups/generic.tpl:89 +#: plugins/admin/users/remove.tpl:15 plugins/admin/users/headpage.tpl:18 +#: plugins/admin/applications/remove.tpl:14 +#: plugins/admin/applications/headpage.tpl:17 +#: plugins/admin/departments/remove.tpl:15 +#: plugins/admin/departments/headpage.tpl:17 +#: plugins/admin/systems/remove.tpl:15 plugins/admin/systems/headpage.tpl:17 +#: plugins/admin/systems/startup.tpl:60 plugins/admin/systems/startup.tpl:73 +#: plugins/admin/systems/startup.tpl:92 plugins/admin/ogroups/generic.tpl:39 +#: plugins/admin/ogroups/remove.tpl:15 plugins/admin/ogroups/headpage.tpl:17 +#: plugins/gofon/phoneaccount/generic.tpl:47 +msgid "Delete" +msgstr "Löschen" + +#: plugins/personal/mail/generic.tpl:65 +msgid "Mail options" +msgstr "Mail-Optionen" + +#: plugins/personal/mail/generic.tpl:70 +msgid "Select if you want to forward mails without getting own copies of them" +msgstr "" +"Wählen Sie dies wenn Mails nur weitergeleitet werden sollen, ohne eine " +"Lokale Kopie zu speichern" + +#: plugins/personal/mail/generic.tpl:70 +msgid "No delivery to own mailbox" +msgstr "Keine Auslieferung in eigene Mailbox" + +#: plugins/personal/mail/generic.tpl:73 +msgid "" +"Select to automatically response with the vacation message defined below" +msgstr "Wählen Sie dies um automatisch eine Urlaubsmeldung zu generieren" + +#: plugins/personal/mail/generic.tpl:73 +msgid "Activate vacation message" +msgstr "Urlaubsbenachrichtigung aktivieren" + +#: plugins/personal/mail/generic.tpl:80 +msgid "Select if you want to filter this mails thru spamassassin" +msgstr "Wählen Sie dies um Mails von Spamassassin filtern zu lassen" + +#: plugins/personal/mail/generic.tpl:80 +msgid "Move mails tagged with spam level greater than" +msgstr "Mails mit einem Spam-Level größer als" + +#: plugins/personal/mail/generic.tpl:81 +msgid "Choose spam level - smaller values are more sensitive" +msgstr "" +"Wählen sie den SPAM-Level - kleinere Werte reagieren empfindlicher auf SPAM" + +#: plugins/personal/mail/generic.tpl:84 +msgid "to folder" +msgstr "in den Ordner" + +#: plugins/personal/mail/generic.tpl:90 +msgid "Reject mails bigger than" +msgstr "Mails abweisen die größer als" + +#: plugins/personal/mail/generic.tpl:92 +#: plugins/personal/connectivity/pureftpd.tpl:40 +#: plugins/personal/connectivity/class_proxyAccount.inc:69 +msgid "MB" +msgstr "MB" + +#: plugins/personal/mail/generic.tpl:98 +msgid "Vacation message" +msgstr "Urlaubsbenachrichtigung" + +#: plugins/personal/mail/generic.tpl:113 +msgid "Forward messages to" +msgstr "Nachrichten weiterleiten an" + +#: plugins/personal/mail/generic.tpl:123 +#: plugins/gofax/faxaccount/generic.tpl:74 plugins/admin/groups/mail.tpl:98 +msgid "Add local" +msgstr "Lokale hinzufügen" + +#: plugins/personal/mail/generic.tpl:133 +msgid "Advanced mail options" +msgstr "Erweiterte Mail-Optionen" + +#: plugins/personal/mail/generic.tpl:138 +msgid "Select if user can only send and receive inside his own domain" +msgstr "" +"Wählen Sie dies wenn der Benutzer Mails nur innerhalb seiner Domains senden " +"und empfangen darf" + +#: plugins/personal/mail/generic.tpl:139 +msgid "User is only allowed to send and receive local mails" +msgstr "Der Benutzer darf nur lokale Mails senden und empfangen" + +#: plugins/personal/mail/generic.tpl:146 +msgid "Use custom sieve script" +msgstr "Eigenes Sieve-Skript verwenden" + +#: plugins/personal/mail/generic.tpl:146 +msgid "disables all Mail options!" +msgstr "schaltet alle übrigen Mail-Optionen aus!" + +#: plugins/personal/mail/main.inc:104 plugins/personal/posix/main.inc:110 +#: plugins/personal/samba/main.inc:104 +#: plugins/personal/generic/generic_certs.tpl:60 +#: plugins/personal/generic/main.inc:158 +#: plugins/personal/connectivity/main.inc:116 +#: plugins/gofax/blocklists/generic.tpl:74 +#: plugins/gofax/faxaccount/main.inc:89 +#: plugins/admin/groups/class_groupManagement.inc:257 +#: plugins/admin/users/class_userManagement.inc:500 +#: plugins/admin/applications/class_applicationManagement.inc:239 +#: plugins/admin/departments/class_departmentManagement.inc:228 +#: plugins/admin/systems/class_systemManagement.inc:438 +#: plugins/admin/ogroups/class_ogroupManagement.inc:274 +#: plugins/gofon/phoneaccount/main.inc:104 +msgid "Finish" +msgstr "Speichern" + +#: plugins/personal/mail/main.inc:106 plugins/personal/mail/mail_locals.tpl:51 +#: plugins/personal/posix/trust_machines.tpl:47 +#: plugins/personal/posix/posix_groups.tpl:58 +#: plugins/personal/posix/main.inc:112 plugins/personal/samba/main.inc:106 +#: plugins/personal/samba/samba3_workstations.tpl:47 +#: plugins/personal/generic/password.tpl:19 +#: plugins/personal/generic/generic_picture.tpl:31 +#: plugins/personal/generic/generic_certs.tpl:62 +#: plugins/personal/generic/main.inc:160 +#: plugins/personal/connectivity/main.inc:118 +#: plugins/gofax/blocklists/generic.tpl:76 +#: plugins/gofax/blocklists/remove.tpl:17 +#: plugins/gofax/faxaccount/locals.tpl:50 +#: plugins/gofax/faxaccount/lists.tpl:39 plugins/gofax/faxaccount/main.inc:91 +#: plugins/addons/addressbook/dial.tpl:11 +#: plugins/addons/addressbook/address_edit.tpl:108 +#: plugins/addons/addressbook/remove.tpl:17 +#: plugins/admin/groups/class_groupManagement.inc:259 +#: plugins/admin/groups/remove.tpl:17 +#: plugins/admin/groups/application_options.tpl:10 +#: plugins/admin/groups/group_objects.tpl:47 +#: plugins/admin/groups/mail_admins.tpl:39 +#: plugins/admin/groups/mail_locals.tpl:51 plugins/admin/users/password.tpl:23 +#: plugins/admin/users/template.tpl:48 +#: plugins/admin/users/class_userManagement.inc:502 +#: plugins/admin/users/remove.tpl:17 plugins/admin/applications/remove.tpl:16 +#: plugins/admin/applications/class_applicationManagement.inc:241 +#: plugins/admin/departments/remove.tpl:17 +#: plugins/admin/departments/class_departmentManagement.inc:230 +#: plugins/admin/systems/class_systemManagement.inc:440 +#: plugins/admin/systems/remove.tpl:17 plugins/admin/systems/password.tpl:27 +#: plugins/admin/systems/chooser.tpl:18 +#: plugins/admin/ogroups/ogroup_objects.tpl:58 +#: plugins/admin/ogroups/class_ogroupManagement.inc:276 +#: plugins/admin/ogroups/remove.tpl:17 plugins/gofon/phoneaccount/main.inc:106 +#: ihtml/themes/altlinux/islocked.tpl:15 ihtml/themes/classic/islocked.tpl:15 +#: ihtml/themes/default/islocked.tpl:15 +msgid "Cancel" +msgstr "Abbrechen" + +#: plugins/personal/mail/main.inc:114 plugins/personal/posix/main.inc:120 +#: plugins/personal/samba/main.inc:114 plugins/personal/generic/main.inc:177 +#: plugins/personal/connectivity/main.inc:126 +#: plugins/gofax/faxaccount/main.inc:96 +#: plugins/gofon/phoneaccount/main.inc:111 +msgid "Click the 'Edit' button below to change informations in this dialog" +msgstr "" +"Betätigen sie den 'Bearbeiten'-Schalter unten um Informationen in diesem " +"Dialog zu ändern" + +#: plugins/personal/mail/main.inc:115 plugins/personal/posix/main.inc:122 +#: plugins/personal/samba/main.inc:115 plugins/personal/generic/main.inc:170 +#: plugins/personal/connectivity/main.inc:127 +#: plugins/gofax/blocklists/headpage.tpl:16 +#: plugins/gofax/faxaccount/generic.tpl:88 +#: plugins/gofax/faxaccount/generic.tpl:94 +#: plugins/gofax/faxaccount/main.inc:97 plugins/addons/logview/contents.tpl:60 +#: plugins/admin/groups/headpage.tpl:16 plugins/admin/users/headpage.tpl:17 +#: plugins/admin/applications/headpage.tpl:16 +#: plugins/admin/departments/headpage.tpl:16 +#: plugins/admin/systems/headpage.tpl:16 plugins/admin/ogroups/headpage.tpl:16 +#: plugins/gofon/phoneaccount/main.inc:112 +msgid "Edit" +msgstr "Bearbeiten" + +#: plugins/personal/mail/main.inc:124 +msgid "User mail settings" +msgstr "Benutzer Mail-Einstellungen" + +#: plugins/personal/mail/mail_locals.tpl:6 +#: plugins/admin/groups/mail_locals.tpl:6 +msgid "Select addresses to add" +msgstr "Wählen Sie die hinzuzufügenden Adressen" + +#: plugins/personal/mail/mail_locals.tpl:29 +#: plugins/admin/groups/mail_locals.tpl:29 +msgid "Display addresses of department" +msgstr "Zeige die Adressen der Abteilung" + +#: plugins/personal/mail/mail_locals.tpl:30 +#: plugins/personal/posix/trust_machines.tpl:30 +#: plugins/personal/posix/posix_groups.tpl:37 +#: plugins/personal/samba/samba3_workstations.tpl:30 +#: plugins/gofax/blocklists/headpage.tpl:50 +#: plugins/gofax/faxaccount/locals.tpl:29 +#: plugins/addons/addressbook/contents.tpl:72 +#: plugins/admin/groups/headpage.tpl:57 +#: plugins/admin/groups/group_objects.tpl:30 +#: plugins/admin/groups/mail_locals.tpl:30 plugins/admin/users/headpage.tpl:61 +#: plugins/admin/applications/headpage.tpl:46 +#: plugins/admin/departments/headpage.tpl:46 +#: plugins/admin/systems/headpage.tpl:56 +#: plugins/admin/ogroups/ogroup_objects.tpl:41 +#: plugins/admin/ogroups/headpage.tpl:58 +msgid "Choose the department the search will be based on" +msgstr "Wählen Sie die Abteilung, auf die die Suchfunktion angewandt wird" + +#: plugins/personal/mail/mail_locals.tpl:35 +#: plugins/admin/groups/mail_locals.tpl:35 +msgid "Display addresses matching" +msgstr "Zeige die Adressen, auf die das folgendes passt" + +#: plugins/personal/mail/mail_locals.tpl:36 +#: plugins/personal/posix/trust_machines.tpl:36 +#: plugins/personal/samba/samba3_workstations.tpl:36 +#: plugins/admin/groups/mail_locals.tpl:36 +msgid "Regular expression for matching addresses" +msgstr "Regulärer Ausdruck zum Abgleich mit Mail-Adressen" + +#: plugins/personal/mail/mail_locals.tpl:39 +#: plugins/admin/groups/mail_locals.tpl:39 +msgid "Display addresses of user" +msgstr "Zeige Adressen des Benutzers" + +#: plugins/personal/mail/mail_locals.tpl:40 +#: plugins/admin/groups/mail_locals.tpl:40 +msgid "User name of which addresses are shown" +msgstr "Benutzername, dessen Adressen angezeigt werden" + +#: plugins/personal/password/class_password.inc:5 +#: plugins/admin/systems/servdb.tpl:22 plugins/admin/systems/servdb.tpl:38 +#: plugins/admin/systems/servdb.tpl:54 plugins/admin/systems/servdb.tpl:90 +#: plugins/admin/systems/servdb.tpl:113 ihtml/themes/altlinux/login.tpl:33 +#: ihtml/themes/altlinux/login.tpl:37 ihtml/themes/classic/login.tpl:32 +#: ihtml/themes/classic/login.tpl:36 ihtml/themes/default/login.tpl:33 +#: ihtml/themes/default/login.tpl:37 +msgid "Password" +msgstr "Passwort" + +#: plugins/personal/password/password.tpl:2 +#: plugins/personal/password/changed.tpl:2 +msgid "Change password" +msgstr "Passwort ändern" + +#: plugins/personal/password/password.tpl:6 +msgid "" +"To change your personal password use the fields below. The changes take " +"effect immediately. Please memorize the new password, because you would't be " +"able to login without it." +msgstr "" +"Um das Passwort zu ändern, benutzen Sie das Feld unten. Die Änderung wird " +"sofort wirksam. Bitte merken Sie sich das neue Passwort, da Sie sich ohne " +"dieses nicht mehr anmelden können." + +#: plugins/personal/password/password.tpl:10 +#: plugins/admin/users/password.tpl:6 +msgid "" +"Changing the password impinges on your authentification on mail, proxy, " +"samba and unix services." +msgstr "" +"Das Ändern des Passwortes wirkt sich auf ihre Authentifizierung bei Mail-, " +"Proxy-, Samba- und Unix-Diensten aus." + +#: plugins/personal/password/password.tpl:15 +msgid "Current password" +msgstr "Momentanes Passwort" + +#: plugins/personal/password/password.tpl:20 +#: plugins/personal/generic/password.tpl:7 plugins/admin/users/password.tpl:11 +#: plugins/admin/systems/password.tpl:11 +msgid "New password" +msgstr "Neues Passwort" + +#: plugins/personal/password/password.tpl:25 +#: plugins/personal/generic/password.tpl:11 +#: plugins/admin/users/password.tpl:15 plugins/admin/systems/password.tpl:16 +msgid "Repeat new password" +msgstr "Neues Passwort bestätigen" + +#: plugins/personal/password/password.tpl:34 +#: plugins/personal/generic/password.tpl:17 +#: plugins/admin/users/password.tpl:21 plugins/admin/users/headpage.tpl:19 +#: plugins/admin/systems/headpage.tpl:18 plugins/admin/systems/password.tpl:25 +msgid "Set password" +msgstr "Passwort setzen" + +#: plugins/personal/password/password.tpl:36 +msgid "Clear fields" +msgstr "Felder löschen" + +#: plugins/personal/password/changed.tpl:6 +msgid "" +"You've successfully changed your password. Remember to change all programms " +"configured to use it as well." +msgstr "" +"Sie haben erfolgreich Ihr Passwort geändert. Bitte denken Sie daran alle " +"Programme anzupassen, die dieses Passwort auch benutzen." + +#: plugins/personal/password/changed.tpl:12 +#: plugins/personal/generic/main.inc:167 plugins/gofax/reports/detail.tpl:68 +#: plugins/addons/ldapmanager/contentimport.tpl:58 +#: plugins/addons/ldapmanager/contentcsv.tpl:127 +#: plugins/addons/ldapmanager/contentexport.tpl:70 include/functions.inc:1342 +msgid "Back" +msgstr "Zurück" + +#: plugins/personal/password/main.inc:40 +msgid "" +"The password you've entered as your current password doesn't match the real " +"one." +msgstr "" +"Das Passwort, welches Sie als aktuelles Passwort eingegeben haben, ist nicht " +"korrekt." + +#: plugins/personal/password/main.inc:43 +msgid "You need to specify your current password in order to proceed." +msgstr "Sie müssen das aktuelle Passwort eingeben, um fortfahren zu können." + +#: plugins/personal/password/main.inc:48 plugins/personal/generic/main.inc:84 +#: plugins/admin/users/class_userManagement.inc:174 +msgid "" +"The passwords you've entered as 'New password' and 'Repeated new password' " +"do not match." +msgstr "" +"Die Passworte, die Sie als 'Neues Passwort' und 'Wiederholung des neuen " +"Passwort' eingegeben haben sind nicht identisch." + +#: plugins/personal/password/main.inc:51 plugins/personal/generic/main.inc:89 +#: plugins/admin/users/class_userManagement.inc:179 +msgid "The password you've entered as 'New password' is empty." +msgstr "" +"Das Passwort, welches Sie als 'Neues Passwort' eingegeben haben ist leer." + +#: plugins/personal/password/main.inc:59 +msgid "The password used as new and current are too similar." +msgstr "Das alte und neue Passwort sind sich zu ähnlich." + +#: plugins/personal/password/main.inc:64 +msgid "The password used as new is to short." +msgstr "" +"Das Passwort, welches Sie als 'Neues Passwort' eingegeben haben, ist zu kurz." + +#: plugins/personal/password/main.inc:71 +msgid "You have no permissions to change your password." +msgstr "Sie haben keine Berechtigung ihr Passwort zu ändern." + +#: plugins/personal/password/main.inc:89 +msgid "External password changer reported a problem: " +msgstr "Das externe Passwort-Änderungsprogramm hat einen Fehler gemeldet:" + +#: plugins/personal/posix/trust_machines.tpl:6 +msgid "Select systems to add" +msgstr "Wählen Sie die hinzuzufügenden Systeme" + +#: plugins/personal/posix/trust_machines.tpl:29 +#: plugins/admin/systems/headpage.tpl:55 +msgid "Display systems of department" +msgstr "Zeige die Systeme der Abteilung" + +#: plugins/personal/posix/trust_machines.tpl:35 +#: plugins/admin/systems/headpage.tpl:61 +msgid "Display systems matching" +msgstr "Zeige die Systeme, auf die das folgendes passt" + +#: plugins/personal/posix/posix_groups.tpl:6 +msgid "Select groups to add" +msgstr "Wählen Sie die hinzuzufügenden Gruppen" + +#: plugins/personal/posix/posix_groups.tpl:20 +#: plugins/gofax/blocklists/headpage.tpl:36 +#: plugins/gofax/faxaccount/locals.tpl:19 +#: plugins/addons/addressbook/contents.tpl:58 +#: plugins/admin/groups/headpage.tpl:37 +#: plugins/admin/groups/group_objects.tpl:20 +#: plugins/admin/users/headpage.tpl:38 +#: plugins/admin/applications/headpage.tpl:36 +#: plugins/admin/departments/headpage.tpl:36 +#: plugins/admin/systems/headpage.tpl:37 +#: plugins/admin/ogroups/ogroup_objects.tpl:20 +#: plugins/admin/ogroups/headpage.tpl:37 +msgid "Filters" +msgstr "Filter" + +#: plugins/personal/posix/posix_groups.tpl:29 +#: plugins/admin/groups/headpage.tpl:46 +msgid "Select to see groups that are primary groups of users" +msgstr "" +"Auswählen, um die Gruppen zu sehen, die primären Gruppen der Benutzer sind" + +#: plugins/personal/posix/posix_groups.tpl:29 +#: plugins/admin/groups/headpage.tpl:46 +msgid "Show primary groups" +msgstr "Zeige primäre Gruppen" + +#: plugins/personal/posix/posix_groups.tpl:30 +#: plugins/admin/groups/headpage.tpl:47 +msgid "Select to see groups that have samba groups mappings" +msgstr "Auswählen, um die Gruppen zu sehen, die Samba-Eigenschaften haben" + +#: plugins/personal/posix/posix_groups.tpl:30 +#: plugins/admin/groups/headpage.tpl:47 +msgid "Show samba groups" +msgstr "Zeige Samba-Gruppen" + +#: plugins/personal/posix/posix_groups.tpl:31 +#: plugins/admin/groups/headpage.tpl:48 +msgid "Select to see groups that have applications configured" +msgstr "Auswählen, um die Gruppen zu sehen, die Anwendungen zugeordnet haben" + +#: plugins/personal/posix/posix_groups.tpl:31 +#: plugins/admin/groups/headpage.tpl:48 +msgid "Show application groups" +msgstr "Zeige Anwendungs-Gruppen" + +#: plugins/personal/posix/posix_groups.tpl:32 +#: plugins/admin/groups/headpage.tpl:49 +msgid "Select to see groups that have mail settings" +msgstr "Auswählen, um die Gruppen zu sehen, die E-Mail-Eigenschaften haben" + +#: plugins/personal/posix/posix_groups.tpl:32 +#: plugins/admin/groups/headpage.tpl:49 +msgid "Show mail groups" +msgstr "Zeige E-Mail-Gruppen" + +#: plugins/personal/posix/posix_groups.tpl:33 +#: plugins/admin/groups/headpage.tpl:50 +msgid "Select to see normal groups that have only functional aspects" +msgstr "Auswählen, um die \"normalen\" Gruppen zu sehen" + +#: plugins/personal/posix/posix_groups.tpl:33 +#: plugins/admin/groups/headpage.tpl:50 +msgid "Show functional groups" +msgstr "Zeige Funktions-Gruppen" + +#: plugins/personal/posix/posix_groups.tpl:36 +#: plugins/admin/groups/headpage.tpl:56 plugins/admin/ogroups/headpage.tpl:57 +msgid "Display groups of department" +msgstr "Zeige Gruppen der Abteilung" + +#: plugins/personal/posix/posix_groups.tpl:42 +#: plugins/admin/groups/headpage.tpl:62 plugins/admin/ogroups/headpage.tpl:63 +msgid "Display groups matching" +msgstr "Zeige Gruppen, auf die zutrifft" + +#: plugins/personal/posix/posix_groups.tpl:43 +#: plugins/admin/groups/headpage.tpl:63 plugins/admin/ogroups/headpage.tpl:64 +msgid "Regular expression for matching group names" +msgstr "Regulärer Ausdruck zum Suchen in Gruppen Namen" + +#: plugins/personal/posix/posix_groups.tpl:46 +#: plugins/admin/groups/headpage.tpl:66 +msgid "Display groups of user" +msgstr "Zeige Gruppen des Benutzers" + +#: plugins/personal/posix/posix_groups.tpl:47 +#: plugins/admin/groups/headpage.tpl:67 +msgid "User name of which groups are shown" +msgstr "Benutzername, dessen Gruppen angezeigt werden" + +#: plugins/personal/posix/posix_shadow.tpl:5 +msgid "User must change password on first login" +msgstr "Der Benutzer muss beim ersten Anmelden sein Passwort ändern" + +#: plugins/personal/posix/posix_shadow.tpl:19 +#: plugins/personal/samba/samba2.tpl:68 plugins/personal/samba/samba3.tpl:225 +msgid "Password expires on" +msgstr "Passwort läuft ab am" + +#: plugins/personal/posix/generic.tpl:7 plugins/personal/samba/samba3.tpl:13 +#: plugins/personal/samba/samba3.tpl:65 +#: plugins/personal/samba/class_sambaAccount.inc:464 +msgid "Home directory" +msgstr "Verzeichnis" + +#: plugins/personal/posix/generic.tpl:13 +msgid "Shell" +msgstr "Shell" + +#: plugins/personal/posix/generic.tpl:21 +msgid "Primary group" +msgstr "Primäre Gruppe" + +#: plugins/personal/posix/generic.tpl:29 plugins/gofax/reports/detail.tpl:46 +#: plugins/gofax/reports/contents.tpl:32 plugins/gofon/reports/contents.tpl:35 +msgid "Status" +msgstr "Status" + +#: plugins/personal/posix/generic.tpl:38 +msgid "Force UID/GID" +msgstr "Erzwinge UID/GID" + +#: plugins/personal/posix/generic.tpl:40 +msgid "UID" +msgstr "UID" + +#: plugins/personal/posix/generic.tpl:45 +msgid "GID" +msgstr "GID" + +#: plugins/personal/posix/generic.tpl:54 +msgid "Group membership" +msgstr "Gruppenmitgliedschaft" + +#: plugins/personal/posix/generic.tpl:56 +msgid "(Warning: more than 16 groups are not supported by NFS!)" +msgstr "(Warnung: mehr als 16 Gruppen werden von NFS nicht unterstützt!)" + +#: plugins/personal/posix/generic.tpl:74 +msgid "Account" +msgstr "Konto" + +#: plugins/personal/posix/generic.tpl:89 +msgid "Environment" +msgstr "Umgebung" + +#: plugins/personal/posix/generic.tpl:92 +msgid "Default printer" +msgstr "Standard Drucker" + +#: plugins/personal/posix/generic.tpl:100 +msgid "Default language" +msgstr "Standard Sprache" + +#: plugins/personal/posix/generic.tpl:113 +msgid "System trust" +msgstr "System-Vertrauen" + +#: plugins/personal/posix/main.inc:131 +msgid "Unix settings" +msgstr "Unix-Einstellungen" + +#: plugins/personal/posix/class_posixAccount.inc:16 +#: plugins/generic/references/class_reference.inc:22 +msgid "UNIX" +msgstr "UNIX" + +#: plugins/personal/posix/class_posixAccount.inc:132 +#: plugins/personal/posix/class_posixAccount.inc:895 +#: plugins/admin/groups/class_groupManagement.inc:377 +msgid "Group of user" +msgstr "Gruppe des Benutzers" + +#: plugins/personal/posix/class_posixAccount.inc:172 +msgid "unconfigured" +msgstr "unkonfiguriert" + +#: plugins/personal/posix/class_posixAccount.inc:190 +#: plugins/admin/systems/class_terminalService.inc:121 +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:99 +msgid "automatic" +msgstr "automatisch" + +#: plugins/personal/posix/class_posixAccount.inc:218 +msgid "This account has no unix extensions." +msgstr "Dieses Konto hat keine UNIX-Erweiterungen." + +#: plugins/personal/posix/class_posixAccount.inc:238 +#: plugins/personal/posix/class_posixAccount.inc:241 +msgid "Remove posix account" +msgstr "UNIX-Konto entfernen" + +#: plugins/personal/posix/class_posixAccount.inc:239 +msgid "" +"This account has unix features enabled. To disable them, you'll need to " +"remove the samba account first." +msgstr "" +"Dieses Konto hat UNIX-Erweiterungen aktiviert. Um sie zu deaktivieren, " +"müssen Sie zunächst das Samba-Konto deaktivieren." + +#: plugins/personal/posix/class_posixAccount.inc:242 +msgid "" +"This account has posix features enabled. You can disable them by clicking " +"below." +msgstr "" +"Dieser Benutzer hat die Posix-Eigenschaften aktiviert. Sie können diese " +"durch einen Klick auf die untere Schaltfläche deaktivieren." + +#: plugins/personal/posix/class_posixAccount.inc:245 +msgid "Create posix account" +msgstr "UNIX-Konto erstellen" + +#: plugins/personal/posix/class_posixAccount.inc:246 +msgid "" +"This account has posix features disabled. You can enable them by clicking " +"below." +msgstr "" +"Dieses Konto hat keine gültigen UNIX-Erweiterungen. Sie können diese durch " +"einen Klick auf die untere Schaltfläche aktivieren." + +#: plugins/personal/posix/class_posixAccount.inc:429 +#, php-format +msgid "Password can't be changed up to %s days after last change" +msgstr "" +"Passwort kann bis zu %s Tage nach der letzten Änderung nicht geändert werden" + +#: plugins/personal/posix/class_posixAccount.inc:431 +#, php-format +msgid "Password must be changed after %s days" +msgstr "Der Benutzer muß sein Passwort nach %s Tagen ändern" + +#: plugins/personal/posix/class_posixAccount.inc:433 +#, php-format +msgid "Disable account after %s days of inactivity after password expiery" +msgstr "Konto nach %s Tagen nach Ablauf ohne Aktivität deaktivieren" + +#: plugins/personal/posix/class_posixAccount.inc:435 +#, php-format +msgid "Warn user %s days before password expiery" +msgstr "Benutzer %s Tage vor dem Ablauf des Passwortes warnen" + +#: plugins/personal/posix/class_posixAccount.inc:457 +#: plugins/personal/samba/class_sambaAccount.inc:303 +#: plugins/personal/generic/class_user.inc:210 +#: plugins/gofax/reports/class_faxreport.inc:272 +#: plugins/gofon/reports/class_fonreport.inc:205 +msgid "January" +msgstr "Januar" + +#: plugins/personal/posix/class_posixAccount.inc:457 +#: plugins/personal/samba/class_sambaAccount.inc:303 +#: plugins/personal/generic/class_user.inc:210 +#: plugins/gofax/reports/class_faxreport.inc:272 +#: plugins/gofon/reports/class_fonreport.inc:205 +msgid "February" +msgstr "Februar" + +#: plugins/personal/posix/class_posixAccount.inc:457 +#: plugins/personal/samba/class_sambaAccount.inc:303 +#: plugins/personal/generic/class_user.inc:210 +#: plugins/gofax/reports/class_faxreport.inc:272 +#: plugins/gofon/reports/class_fonreport.inc:205 +msgid "March" +msgstr "März" + +#: plugins/personal/posix/class_posixAccount.inc:457 +#: plugins/personal/samba/class_sambaAccount.inc:303 +#: plugins/personal/generic/class_user.inc:210 +#: plugins/gofax/reports/class_faxreport.inc:272 +#: plugins/gofon/reports/class_fonreport.inc:205 +msgid "April" +msgstr "April" + +#: plugins/personal/posix/class_posixAccount.inc:458 +#: plugins/personal/samba/class_sambaAccount.inc:304 +#: plugins/personal/generic/class_user.inc:211 +#: plugins/gofax/reports/class_faxreport.inc:273 +#: plugins/gofon/reports/class_fonreport.inc:206 +msgid "May" +msgstr "Mai" + +#: plugins/personal/posix/class_posixAccount.inc:458 +#: plugins/personal/samba/class_sambaAccount.inc:304 +#: plugins/personal/generic/class_user.inc:211 +#: plugins/gofax/reports/class_faxreport.inc:273 +#: plugins/gofon/reports/class_fonreport.inc:206 +msgid "June" +msgstr "Juni" + +#: plugins/personal/posix/class_posixAccount.inc:458 +#: plugins/personal/samba/class_sambaAccount.inc:304 +#: plugins/personal/generic/class_user.inc:211 +#: plugins/gofax/reports/class_faxreport.inc:273 +#: plugins/gofon/reports/class_fonreport.inc:206 +msgid "July" +msgstr "Juli" + +#: plugins/personal/posix/class_posixAccount.inc:458 +#: plugins/personal/samba/class_sambaAccount.inc:304 +#: plugins/personal/generic/class_user.inc:211 +#: plugins/gofax/reports/class_faxreport.inc:273 +#: plugins/gofon/reports/class_fonreport.inc:206 +msgid "August" +msgstr "August" + +#: plugins/personal/posix/class_posixAccount.inc:458 +#: plugins/personal/samba/class_sambaAccount.inc:304 +#: plugins/personal/generic/class_user.inc:211 +#: plugins/gofax/reports/class_faxreport.inc:274 +#: plugins/gofon/reports/class_fonreport.inc:207 +msgid "September" +msgstr "September" + +#: plugins/personal/posix/class_posixAccount.inc:459 +#: plugins/personal/samba/class_sambaAccount.inc:305 +#: plugins/personal/generic/class_user.inc:212 +#: plugins/gofax/reports/class_faxreport.inc:274 +#: plugins/gofon/reports/class_fonreport.inc:207 +msgid "October" +msgstr "Oktober" + +#: plugins/personal/posix/class_posixAccount.inc:459 +#: plugins/personal/samba/class_sambaAccount.inc:305 +#: plugins/personal/generic/class_user.inc:212 +#: plugins/gofax/reports/class_faxreport.inc:274 +#: plugins/gofon/reports/class_fonreport.inc:207 +msgid "November" +msgstr "November" + +#: plugins/personal/posix/class_posixAccount.inc:459 +#: plugins/personal/samba/class_sambaAccount.inc:305 +#: plugins/personal/generic/class_user.inc:212 +#: plugins/gofax/reports/class_faxreport.inc:274 +#: plugins/gofon/reports/class_fonreport.inc:207 +msgid "December" +msgstr "Dezember" + +#: plugins/personal/posix/class_posixAccount.inc:509 +#: plugins/personal/samba/class_sambaAccount.inc:338 +#: plugins/admin/systems/class_terminalGeneric.inc:61 +#: plugins/admin/systems/class_workstationGeneric.inc:70 +msgid "disabled" +msgstr "deaktiviert" + +#: plugins/personal/posix/class_posixAccount.inc:509 +msgid "full access" +msgstr "Vollzugriff" + +#: plugins/personal/posix/class_posixAccount.inc:510 +msgid "allow access to these hosts" +msgstr "erlaube Zugriff auf diese Hosts" + +#: plugins/personal/posix/class_posixAccount.inc:662 +msgid "Failed: overriding lock" +msgstr "Fehlgeschlagen: Lock wird ignoriert" + +#: plugins/personal/posix/class_posixAccount.inc:810 +msgid "The required field 'Home directory' is not set." +msgstr "Das benötigte Feld 'Verzeichnis' ist nicht gesetzt." + +#: plugins/personal/posix/class_posixAccount.inc:813 +msgid "Please enter a valid path in 'Home directory' field." +msgstr "Bitte geben Sie einen gültigen Pfad in das Feld 'Verzeichnis' ein." + +#: plugins/personal/posix/class_posixAccount.inc:821 +msgid "Value specified as 'UID' is not valid." +msgstr "Die von ihnen angebene 'UID' ist nicht korrekt." + +#: plugins/personal/posix/class_posixAccount.inc:824 +msgid "Value specified as 'UID' is too small." +msgstr "Die von ihnen angebene 'UID' ist zu klein." + +#: plugins/personal/posix/class_posixAccount.inc:828 +#: plugins/admin/groups/class_groupGeneric.inc:594 +msgid "Value specified as 'GID' is not valid." +msgstr "Die von ihnen angebene 'GID' ist nicht korrekt." + +#: plugins/personal/posix/class_posixAccount.inc:831 +#: plugins/admin/groups/class_groupGeneric.inc:597 +msgid "Value specified as 'GID' is too small." +msgstr "Die von ihnen angebene 'GID' ist zu klein." + +#: plugins/personal/posix/class_posixAccount.inc:840 +msgid "Value specified as 'shadowMin' is not valid." +msgstr "Der von ihnen angegebene Wert 'shadowMin' ist nicht gültig." + +#: plugins/personal/posix/class_posixAccount.inc:845 +msgid "Value specified as 'shadowMax' is not valid." +msgstr "Der von ihnen angegebene Wert 'shadowMax' ist nicht gültig." + +#: plugins/personal/posix/class_posixAccount.inc:850 +msgid "Value specified as 'shadowWarning' is not valid." +msgstr "Der von ihnen angegebene Wert 'shadowWarning' ist nicht gültig." + +#: plugins/personal/posix/class_posixAccount.inc:853 +msgid "'shadowWarning' without 'shadowMax' makes no sense." +msgstr "'shadowWarning' in ohne die Angabe von 'shadowMax' ergibt keinen Sinn." + +#: plugins/personal/posix/class_posixAccount.inc:856 +msgid "Value specified as 'shadowWarning' should be smaller than 'shadowMax'." +msgstr "" +"Der angegebene Wert 'shadowWarning' sollte kleiner als 'shadowMax' sein." + +#: plugins/personal/posix/class_posixAccount.inc:859 +msgid "Value specified as 'shadowWarning' should be greater than 'shadowMin'." +msgstr "" +"Der angegebene Wert 'shadowWarning' sollte größer als 'shadowMin' sein." + +#: plugins/personal/posix/class_posixAccount.inc:864 +msgid "Value specified as 'shadowInactive' is not valid." +msgstr "Der von ihnen angegebene Wert 'shadowInactive' ist nicht gültig." + +#: plugins/personal/posix/class_posixAccount.inc:867 +msgid "'shadowInactive' without 'shadowMax' makes no sense." +msgstr "" +"'shadowInactive' in ohne die Angabe von 'shadowMax' ergibt keinen Sinn." + +#: plugins/personal/posix/class_posixAccount.inc:872 +msgid "Value specified as 'shadowMin' should be smaller than 'shadowMax'." +msgstr "Der angegebene Wert 'shadowMin' sollte kleiner als 'shadowMax' sein." + +#: plugins/personal/posix/class_posixAccount.inc:974 +#: plugins/admin/groups/class_groupGeneric.inc:628 +msgid "Too many users, can't allocate a free ID!" +msgstr "" +"Es sind zu viele Benutzer in der Datenbank. Es kann keine freie ID " +"reserviert werden!" + +#: plugins/personal/samba/samba2.tpl:13 +msgid "Samba home" +msgstr "Samba-Verzeichnis" + +#: plugins/personal/samba/samba2.tpl:30 plugins/personal/samba/samba3.tpl:38 +msgid "Script path" +msgstr "Anmeldeskript" + +#: plugins/personal/samba/samba2.tpl:36 plugins/personal/samba/samba3.tpl:44 +#: plugins/personal/samba/samba3.tpl:75 +#: plugins/personal/samba/class_sambaAccount.inc:465 +msgid "Profile path" +msgstr "Profil-Pfad" + +#: plugins/personal/samba/samba2.tpl:48 plugins/personal/samba/samba3.tpl:210 +msgid "Access options" +msgstr "Zugriffsoptionen" + +#: plugins/personal/samba/samba2.tpl:54 plugins/personal/samba/samba3.tpl:216 +msgid "Allow user to change password from client" +msgstr "Der Benutzer darf das Passwort von Client aus ändern" + +#: plugins/personal/samba/samba2.tpl:57 plugins/personal/samba/samba3.tpl:219 +msgid "Login from windows client requires no password" +msgstr "Die Anmeldung vom Windows-Klienten erfordert kein Passwort" + +#: plugins/personal/samba/samba2.tpl:60 plugins/personal/samba/samba3.tpl:222 +msgid "Temporary disable samba account" +msgstr "Vorübergehende Deaktivierung des Samba-Zugriffs" + +#: plugins/personal/samba/samba3.tpl:23 +msgid "Domain" +msgstr "Domäne" + +#: plugins/personal/samba/samba3.tpl:56 +msgid "Terminal Server" +msgstr "Terminal-Server" + +#: plugins/personal/samba/samba3.tpl:62 +msgid "Allow login on terminal server" +msgstr "Anmeldung am Terminalserver zulassen" + +#: plugins/personal/samba/samba3.tpl:87 +msgid "Inherit client config" +msgstr "Client-Konfiguration übernehmen" + +#: plugins/personal/samba/samba3.tpl:90 +msgid "Initial program" +msgstr "Startprogramm" + +#: plugins/personal/samba/samba3.tpl:96 +msgid "Working directory" +msgstr "Arbeits Verzeichnis" + +#: plugins/personal/samba/samba3.tpl:111 +msgid "Timeout settings (in minutes)" +msgstr "Zeitlimit (in Minuten)" + +#: plugins/personal/samba/samba3.tpl:116 +#: plugins/personal/samba/class_sambaAccount.inc:472 +msgid "Connection" +msgstr "Verbinden" + +#: plugins/personal/samba/samba3.tpl:125 +#: plugins/personal/samba/class_sambaAccount.inc:473 +msgid "Disconnection" +msgstr "Trennen" + +#: plugins/personal/samba/samba3.tpl:134 +#: plugins/personal/samba/class_sambaAccount.inc:474 +msgid "IDLE" +msgstr "Leerlauf" + +#: plugins/personal/samba/samba3.tpl:147 +msgid "Client devices" +msgstr "Clientgeräte" + +#: plugins/personal/samba/samba3.tpl:152 +msgid "Connect client drives at logon" +msgstr "Clientlaufwerke beim Anmelden verbinden" + +#: plugins/personal/samba/samba3.tpl:158 +msgid "Connect client printers at logon" +msgstr "Clientdrucker beim Anmelden verbinden" + +#: plugins/personal/samba/samba3.tpl:164 +msgid "Default to main client printer" +msgstr "Standardmäßig der Client-Hauptdrucker" + +#: plugins/personal/samba/samba3.tpl:174 +#: plugins/personal/connectivity/pureftpd.tpl:64 +msgid "Miscellaneous" +msgstr "Verschiedenes" + +#: plugins/personal/samba/samba3.tpl:178 +msgid "Shadowing" +msgstr "Spiegeln" + +#: plugins/personal/samba/samba3.tpl:187 +msgid "On broken or timed out" +msgstr "Bei Trennung oder abgelaufenem Zeitlimit" + +#: plugins/personal/samba/samba3.tpl:195 +msgid "Reconnect if disconnected" +msgstr "Wiederherstellen falls unterbrochen" + +#: plugins/personal/samba/samba3.tpl:241 +msgid "Allow connection from these workstations only" +msgstr "Erlaube Verbindungen nur von diesen Arbeitsstationen" + +#: plugins/personal/samba/main.inc:123 +msgid "Samba settings" +msgstr "Samba-Einstellungen" + +#: plugins/personal/samba/samba3_workstations.tpl:6 +msgid "Select workstations to add" +msgstr "Wählen Sie die hinzuzufügenden Arbeitsstationen" + +#: plugins/personal/samba/samba3_workstations.tpl:29 +msgid "Display workstations of department" +msgstr "Zeige die Arbeitsstationen der Abteilung" + +#: plugins/personal/samba/samba3_workstations.tpl:35 +msgid "Display workstations matching" +msgstr "Zeige die Arbeitsstationen, auf die das folgendes passt" + +#: plugins/personal/samba/class_sambaAccount.inc:170 +msgid "This account has no samba extensions." +msgstr "Dieses Konto hat keine Samba-Erweiterungen." + +#: plugins/personal/samba/class_sambaAccount.inc:179 +msgid "Remove samba account" +msgstr "Samba-Konto entfernen" + +#: plugins/personal/samba/class_sambaAccount.inc:180 +msgid "" +"This account has samba features enabled. You can disable them by clicking " +"below." +msgstr "" +"Dieser Benutzer hat den Samba-Zugriff aktiviert. Sie können diesen Zugriff " +"durch einen Klick auf die untere Schaltfläche deaktivieren." + +#: plugins/personal/samba/class_sambaAccount.inc:190 +#: plugins/personal/samba/class_sambaAccount.inc:193 +msgid "Create samba account" +msgstr "Samba-Konto erstellen" + +#: plugins/personal/samba/class_sambaAccount.inc:191 +msgid "" +"This account has samba features disabled. You can enable them by clicking " +"below." +msgstr "" +"Dieser Benutzer hat den Samba-Zugriff deaktiviert. Sie können diesen Zugriff " +"durch einen Klick auf die untere Schaltfläche aktivieren." + +#: plugins/personal/samba/class_sambaAccount.inc:194 +msgid "" +"This account has samba features disabled. Posix features are needed for " +"samba accounts, enable them first." +msgstr "" +"Dieser Benutzer hat den Samba-Zugriff deaktiviert. Um ihn zu aktivieren " +"werden UNIX-Erweiterungen benötigt. Aktivieren Sie diese." + +#: plugins/personal/samba/class_sambaAccount.inc:339 +msgid "input on, notify on" +msgstr "Eingabe EIN, Benachrichtigen EIN" + +#: plugins/personal/samba/class_sambaAccount.inc:340 +msgid "input on, notify off" +msgstr "Eingabe EIN, Benachrichtigen AUS" + +#: plugins/personal/samba/class_sambaAccount.inc:341 +msgid "input off, notify on" +msgstr "Eingabe AUS, Benachrichtigen EIN" + +#: plugins/personal/samba/class_sambaAccount.inc:342 +msgid "input off, nofify off" +msgstr "Eingabe AUS, Benachrichtigen AUS" + +#: plugins/personal/samba/class_sambaAccount.inc:344 +msgid "disconnect" +msgstr "trennen" + +#: plugins/personal/samba/class_sambaAccount.inc:345 +msgid "reset" +msgstr "zurücksetzen" + +#: plugins/personal/samba/class_sambaAccount.inc:347 +msgid "from any client" +msgstr "von jedem Client" + +#: plugins/personal/samba/class_sambaAccount.inc:348 +msgid "from previous client only" +msgstr "nur von vorherigem Client" + +#: plugins/personal/samba/class_sambaAccount.inc:467 +#, php-format +msgid "The value specified as '%s' contains invalid characters!" +msgstr "Der als '%s' angegebene Wert enhält ungültige Zeichen!" + +#: plugins/personal/samba/class_sambaAccount.inc:477 +#, php-format +msgid "" +"The timeout property '%s' is checked and contains invalid or no characters!" +msgstr "" +"Die Zeitlimit Option '%s' ist ausgewählz, das entsprechende Feld enthält " +"ungültige oder keine Zeichen!" + +#: plugins/personal/samba/class_sambaAccount.inc:483 +msgid "" +"The windows user manager only allows eight clients. You've specified more " +"than eight." +msgstr "" +"Die Windows Benutzerverwaltung erlaubt nur acht Clients. Sie haben mehr als " +"acht angegeben." + +#: plugins/personal/samba/class_sambaAccount.inc:636 +msgid "" +"Warning: This account has an undefined samba SID assigned. The problem can " +"not be fixed by GOsa!" +msgstr "" +"Achtung: Diesem Konto ist eine unbekannte Samba SID zugeordnet. GOsa kann " +"dieses Problem nicht beheben!" + +#: plugins/personal/samba/class_sambaAccount.inc:661 +msgid "" +"Warning: Can't identify users primary group - no conversion to a samba group " +"possible!" +msgstr "" +"Warnung: Die primäre Benutzergruppe kann nicht identifiziert werden, kann " +"daher keine Umwandlung in eine Samba-Gruppe vornehmen!" + +#: plugins/personal/generic/class_user.inc:221 +msgid "female" +msgstr "weiblich" + +#: plugins/personal/generic/class_user.inc:221 +msgid "male" +msgstr "männlich" + +#: plugins/personal/generic/class_user.inc:231 +msgid "This account has no valid GOsa extensions." +msgstr "Dieses Konto hat keine gültigen GOsa-Erweiterungen." + +#: plugins/personal/generic/class_user.inc:260 +msgid "The specified file has not been uploaded via HTTP POST! Aborted." +msgstr "" +"Die angegebene Datei wurde nicht über HTTP POST übertragen! Aktion " +"abgebrochen." + +#: plugins/personal/generic/class_user.inc:354 +msgid "Please enter a valid serial number" +msgstr "Bitte geben Sie eine gültige Seriennummer ein" + +#: plugins/personal/generic/class_user.inc:358 +#: plugins/personal/generic/class_user.inc:383 +#: plugins/admin/systems/class_terminalInfo.inc:52 +#: plugins/admin/systems/class_terminalInfo.inc:167 +msgid "present" +msgstr "vorhanden" + +#: plugins/personal/generic/class_user.inc:360 +#: plugins/personal/generic/class_user.inc:385 +msgid "absent" +msgstr "leer" + +#: plugins/personal/generic/class_user.inc:782 +msgid "Kerberos database communication failed" +msgstr "Die Kommunikation mit der Kerberos-Datenbank ist fehlgeschlagen" + +#: plugins/personal/generic/class_user.inc:799 +msgid "Can't remove user from kerberos database." +msgstr "Benutzer kann nicht aus der Kerberos-Datenbank entfernt werden." + +#: plugins/personal/generic/class_user.inc:810 +msgid "Can't add user to kerberos database." +msgstr "Benutzer kann nicht zur Kerberos-Datenbank hinzugefügt werden." + +#: plugins/personal/generic/class_user.inc:850 +msgid "You have no permissions to create a user on this 'Base'." +msgstr "" +"Sie haben keine Berechtigung, einen Benutzer unterhalb dieser 'Basis' " +"anzulegen." + +#: plugins/personal/generic/class_user.inc:855 +#: plugins/addons/addressbook/class_addressbook.inc:486 +#: plugins/admin/users/class_userManagement.inc:419 +msgid "The required field 'Name' is not set." +msgstr "Das benötigte Feld 'Name' ist nicht gesetzt." + +#: plugins/personal/generic/class_user.inc:864 +msgid "There's already a person with this 'Login' in the database." +msgstr "Die von Ihnen angegebene 'Kennung' ist bereits vergeben." + +#: plugins/personal/generic/class_user.inc:870 +#: plugins/addons/addressbook/class_addressbook.inc:490 +#: plugins/admin/users/class_userManagement.inc:422 +msgid "The required field 'Given name' is not set." +msgstr "Das benötigte Feld 'Vorname' ist nicht gesetzt." + +#: plugins/personal/generic/class_user.inc:873 +msgid "The required field 'Login' is not set." +msgstr "Das benötigte Feld 'Kennung' ist nicht gesetzt." + +#: plugins/personal/generic/class_user.inc:880 +msgid "" +"There's already a person with this 'Name'/'Given name' combination in the " +"database." +msgstr "" +"Die von Ihnen angegebene Kombination aus 'Name'/'Vorname' ist bereits in der " +"Datenbank vorhanden." + +#: plugins/personal/generic/class_user.inc:887 +msgid "" +"The field 'Login' contains invalid characters. Lowercase, numbers and dashes " +"are allowed." +msgstr "" +"Das Feld 'Kennung' enthält ungültige Zeichen. Kleinbuchstaben, Zahlen und " +"Bindestriche sind erlaubt." + +#: plugins/personal/generic/class_user.inc:890 +msgid "The field 'Homepage' contains an invalid URL definition." +msgstr "Das Feld 'Homepage' enthält eine ungültige Internetadresse." + +#: plugins/personal/generic/class_user.inc:893 +#: plugins/personal/generic/class_user.inc:921 +#: plugins/addons/addressbook/class_addressbook.inc:496 +#: plugins/addons/addressbook/class_addressbook.inc:524 +#: plugins/admin/departments/class_departmentGeneric.inc:153 +msgid "The field 'Name' contains invalid characters." +msgstr "Das Feld 'Name' enthält ungültige Zeichen." + +#: plugins/personal/generic/class_user.inc:896 +#: plugins/personal/generic/class_user.inc:918 +#: plugins/addons/addressbook/class_addressbook.inc:499 +#: plugins/addons/addressbook/class_addressbook.inc:521 +msgid "The field 'Given name' contains invalid characters." +msgstr "Das Feld 'Vorname' enthält ungültige Zeichen." + +#: plugins/personal/generic/class_user.inc:901 +#: plugins/personal/generic/class_user.inc:904 +#: plugins/addons/addressbook/class_addressbook.inc:504 +#: plugins/addons/addressbook/class_addressbook.inc:507 +#: plugins/admin/departments/class_departmentGeneric.inc:156 +msgid "The field 'Phone' contains an invalid phone number." +msgstr "Das Feld 'Telefon' enthält eine ungültige Telefonnummer." + +#: plugins/personal/generic/class_user.inc:907 +#: plugins/addons/addressbook/class_addressbook.inc:510 +#: plugins/admin/departments/class_departmentGeneric.inc:159 +msgid "The field 'Fax' contains an invalid phone number." +msgstr "Das Feld 'Fax' enthält eine ungültige Telefonnummer." + +#: plugins/personal/generic/class_user.inc:910 +#: plugins/addons/addressbook/class_addressbook.inc:513 +msgid "The field 'Mobile' contains an invalid phone number." +msgstr "Das Feld 'Mobil' enthält eine ungültige Telefonnummer" + +#: plugins/personal/generic/class_user.inc:913 +#: plugins/addons/addressbook/class_addressbook.inc:516 +msgid "The field 'Pager' contains an invalid phone number." +msgstr "Das Feld 'Pager' enthält eine ungültige Telefonnummer." + +#: plugins/personal/generic/password.tpl:2 +msgid "" +"You have changed the method your password is stored in the ldap database. " +"For that reason you've to enter your password at this point again. GOsa will " +"then encode it with the selected method." +msgstr "" +"Sie haben die Methode mit der ihr Passwort in der LDAP-Datenbank gespeichert " +"wird geändert. Aus diesem Grunde müssen Sie das Passwort an dieser Stelle " +"noch einmal eingeben damit es von GOsa in der gewünschten " +"Verschlüsselungsart abgelegt werden kann." + +#: plugins/personal/generic/generic.tpl:6 +msgid "Personal information" +msgstr "Persönliche Informationen" + +#: plugins/personal/generic/generic.tpl:15 +#: plugins/personal/generic/generic_picture.tpl:6 +msgid "Personal picture" +msgstr "Persöliches Bild" + +#: plugins/personal/generic/generic.tpl:17 +msgid "Change picture" +msgstr "Bild ändern" + +#: plugins/personal/generic/generic.tpl:24 +#: plugins/addons/addressbook/contents.tpl:14 +#: plugins/addons/addressbook/address_edit.tpl:20 +#: plugins/addons/addressbook/address_info.tpl:16 +#: plugins/addons/addressbook/class_addressbook.inc:463 +#: plugins/admin/users/template.tpl:19 +msgid "Name" +msgstr "Name" + +#: plugins/personal/generic/generic.tpl:30 +#: plugins/addons/addressbook/address_edit.tpl:20 +#: plugins/addons/addressbook/class_addressbook.inc:463 +#: plugins/admin/users/template.tpl:23 +msgid "Given name" +msgstr "Vorname" + +#: plugins/personal/generic/generic.tpl:34 plugins/admin/users/template.tpl:29 +msgid "Login" +msgstr "Kennung" + +#: plugins/personal/generic/generic.tpl:42 +#: plugins/addons/addressbook/address_edit.tpl:26 +#: plugins/addons/addressbook/address_info.tpl:22 +msgid "Personal title" +msgstr "Titel" + +#: plugins/personal/generic/generic.tpl:50 +msgid "Academic title" +msgstr "Akademischer Titel" + +#: plugins/personal/generic/generic.tpl:58 +msgid "Date of birth" +msgstr "Geburtsdatum" + +#: plugins/personal/generic/generic.tpl:75 +#: ihtml/themes/altlinux/sizelimit.tpl:14 +#: ihtml/themes/default/sizelimit.tpl:14 +msgid "Set" +msgstr "Setzen" + +#: plugins/personal/generic/generic.tpl:81 +msgid "Sex" +msgstr "Geschlecht" + +#: plugins/personal/generic/generic.tpl:92 +#: plugins/gofax/blocklists/generic.tpl:14 plugins/admin/groups/generic.tpl:21 +#: plugins/admin/applications/generic.tpl:33 +#: plugins/admin/departments/generic.tpl:27 +#: plugins/admin/systems/server.tpl:13 plugins/admin/systems/phone.tpl:13 +#: plugins/admin/systems/terminal.tpl:18 plugins/admin/systems/printer.tpl:21 +#: plugins/admin/systems/workstation.tpl:18 +#: plugins/admin/systems/component.tpl:13 +#: plugins/admin/systems/wingeneric.tpl:13 +#: plugins/admin/ogroups/generic.tpl:21 +msgid "Base" +msgstr "Basis" + +#: plugins/personal/generic/generic.tpl:96 +msgid "Choose subtree to place user in" +msgstr "Wählen Sie den Unterbaum, in den der Benutzer eingepflegt werden soll" + +#: plugins/personal/generic/generic.tpl:111 +#: plugins/personal/generic/generic.tpl:255 +#: plugins/addons/addressbook/address_edit.tpl:37 +#: plugins/addons/addressbook/address_edit.tpl:86 +#: plugins/addons/addressbook/address_info.tpl:33 +#: plugins/addons/addressbook/address_info.tpl:82 +#: plugins/admin/departments/generic.tpl:54 +msgid "Address" +msgstr "Adresse" + +#: plugins/personal/generic/generic.tpl:115 +msgid "Private phone" +msgstr "Privat-Telefon" + +#: plugins/personal/generic/generic.tpl:119 +msgid "Homepage" +msgstr "Homepage" + +#: plugins/personal/generic/generic.tpl:128 +msgid "Password storage" +msgstr "Passwort-Speicherung" + +#: plugins/personal/generic/generic.tpl:138 +#: plugins/personal/generic/generic_certs.tpl:7 +msgid "Certificates" +msgstr "Zertifikate" + +#: plugins/personal/generic/generic.tpl:140 +msgid "Edit certificates" +msgstr "Zertifikate bearbeiten" + +#: plugins/personal/generic/generic.tpl:144 +msgid "Kerberos" +msgstr "Kerberos" + +#: plugins/personal/generic/generic.tpl:145 +msgid "Edit properties" +msgstr "Eigenschaften bearbeiten" + +#: plugins/personal/generic/generic.tpl:161 +msgid "Organizational information" +msgstr "Angabe zur Organisationseinheit" + +#: plugins/personal/generic/generic.tpl:173 +msgid "Organization" +msgstr "Organisation" + +#: plugins/personal/generic/generic.tpl:177 +#: plugins/addons/addressbook/address_edit.tpl:68 +#: plugins/addons/addressbook/address_info.tpl:64 +#: plugins/generic/references/class_reference.inc:38 +msgid "Department" +msgstr "Abteilung" + +#: plugins/personal/generic/generic.tpl:181 +msgid "Department No." +msgstr "Abteilungs-Nr." + +#: plugins/personal/generic/generic.tpl:187 +msgid "Employee No." +msgstr "Angestellten-Nr." + +#: plugins/personal/generic/generic.tpl:193 +msgid "Employee type" +msgstr "Anstellungsart" + +#: plugins/personal/generic/generic.tpl:209 +#: plugins/personal/generic/generic.tpl:348 +msgid "Room No." +msgstr "Zimmer-Nr." + +#: plugins/personal/generic/generic.tpl:221 +#: plugins/addons/addressbook/contents.tpl:15 +#: plugins/addons/addressbook/address_edit.tpl:44 +#: plugins/addons/addressbook/address_info.tpl:40 +msgid "Mobile" +msgstr "Mobiltelefon" + +#: plugins/personal/generic/generic.tpl:225 +#: plugins/addons/addressbook/address_edit.tpl:95 +#: plugins/addons/addressbook/address_info.tpl:91 +msgid "Pager" +msgstr "Pager" + +#: plugins/personal/generic/generic.tpl:247 +#: plugins/admin/departments/generic.tpl:42 +#: plugins/admin/departments/generic.tpl:50 +#: plugins/admin/systems/printer.tpl:14 +msgid "Location" +msgstr "Ort" + +#: plugins/personal/generic/generic.tpl:251 +#: plugins/admin/departments/generic.tpl:46 +msgid "State" +msgstr "Land" + +#: plugins/personal/generic/generic.tpl:269 +msgid "Vocation" +msgstr "Anrede" + +#: plugins/personal/generic/generic.tpl:273 +msgid "Unit description" +msgstr "Aufgabengebiet" + +#: plugins/personal/generic/generic.tpl:281 +msgid "Subject area" +msgstr "Sachgebiet" + +#: plugins/personal/generic/generic.tpl:289 +msgid "Functional title" +msgstr "Amts-/Dienstbezeichnung" + +#: plugins/personal/generic/generic.tpl:296 +msgid "Role" +msgstr "Funktion" + +#: plugins/personal/generic/generic.tpl:308 +msgid "Person locality" +msgstr "Dienstort" + +#: plugins/personal/generic/generic.tpl:316 +msgid "Unit" +msgstr "Referat" + +#: plugins/personal/generic/generic.tpl:323 +msgid "Street" +msgstr "Straße" + +#: plugins/personal/generic/generic.tpl:329 +#: plugins/addons/addressbook/address_edit.tpl:74 +#: plugins/addons/addressbook/address_info.tpl:70 +msgid "Postal code" +msgstr "Postleitzahl" + +#: plugins/personal/generic/generic.tpl:335 +msgid "House identifier" +msgstr "Hausbezeichnung" + +#: plugins/personal/generic/generic.tpl:357 +msgid "Please use the phone tab" +msgstr "Verwenden sie den Telefon-Reiter" + +#: plugins/personal/generic/generic.tpl:370 +msgid "Last delivery" +msgstr "letzte Übermittlung" + +#: plugins/personal/generic/generic.tpl:378 +msgid "Public visible" +msgstr "Öffentlich sichtbar" + +#: plugins/personal/generic/generic_picture.tpl:23 +msgid "Remove picture" +msgstr "Bild entfernen" + +#: plugins/personal/generic/generic_picture.tpl:29 +#: plugins/addons/addressbook/address_edit.tpl:107 +msgid "Save" +msgstr "Sichern" + +#: plugins/personal/generic/generic_certs.tpl:14 +msgid "Standard certificate" +msgstr "Standard-Zertifikat" + +#: plugins/personal/generic/generic_certs.tpl:19 +#: plugins/personal/generic/generic_certs.tpl:30 +#: plugins/personal/generic/generic_certs.tpl:41 +#: plugins/admin/groups/class_groupMail.inc:408 +#: plugins/admin/applications/class_applicationParameters.inc:94 +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:205 +#: ihtml/themes/altlinux/islocked.tpl:13 ihtml/themes/classic/islocked.tpl:13 +#: ihtml/themes/default/islocked.tpl:13 +msgid "Remove" +msgstr "Entfernen" + +#: plugins/personal/generic/generic_certs.tpl:25 +msgid "S/MIME certificate" +msgstr "S/MIME-Zertifikat" + +#: plugins/personal/generic/generic_certs.tpl:36 +msgid "PKCS12 certificate" +msgstr "PKCS12-Zertifikat" + +#: plugins/personal/generic/generic_certs.tpl:48 +msgid "Certificate serial number" +msgstr "Zertifikat-Seriennummer" + +#: plugins/personal/generic/main.inc:107 +msgid "You are not allowed to set your password!" +msgstr "Sie haben keine Berechtigung ihr Passwort zu ändern!" + +#: plugins/personal/generic/main.inc:187 +msgid "Generic user information" +msgstr "Generische Benutzer-Information" + +#: plugins/personal/connectivity/class_pureftpdAccount.inc:6 +#: plugins/generic/references/class_reference.inc:34 +msgid "FTP" +msgstr "FTP" + +#: plugins/personal/connectivity/class_pureftpdAccount.inc:112 +msgid "Value specified as 'Upload bandwidth' is not valid." +msgstr "Die von ihnen angegebene 'Upload-Bandbreite' ist nicht gültig." + +#: plugins/personal/connectivity/class_pureftpdAccount.inc:115 +msgid "Value specified as 'Download bandwidth' is not valid." +msgstr "Die von ihnen angegebene 'Download-Bandbreite' ist nicht gültig." + +#: plugins/personal/connectivity/class_pureftpdAccount.inc:118 +msgid "Value specified as 'Files' is not valid." +msgstr "Das Feld 'Dateien' enthält eine ungültige Eingabe." + +#: plugins/personal/connectivity/class_pureftpdAccount.inc:121 +msgid "Value specified as 'Size' is not valid." +msgstr "Das Feld 'Größe' enthält eine ungültige Eingabe." + +#: plugins/personal/connectivity/class_pureftpdAccount.inc:124 +msgid "Value specified as 'Ratio' is not valid." +msgstr "Das Feld 'Verhältins' enthält eine ungültige Eingabe." + +#: plugins/personal/connectivity/class_phpgwAccount.inc:5 +msgid "PHPGroupware" +msgstr "PHPGroupware" + +#: plugins/personal/connectivity/proxy.tpl:1 +msgid "Proxy account" +msgstr "Proxy Konto" + +#: plugins/personal/connectivity/proxy.tpl:8 +msgid "Filter unwanted content (i.e. pornographic or violence related)" +msgstr "" +"Filtern von ungewollten Inhalten (z.B. pornografische oder gewalttätige " +"Inhalte)" + +#: plugins/personal/connectivity/proxy.tpl:13 +msgid "Limit proxy access to working time" +msgstr "Inhaltsfilterung nur während der Arbeitszeit" + +#: plugins/personal/connectivity/proxy.tpl:42 +msgid "Restrict proxy usage by quota" +msgstr "Proxynutzung durch Quotas einschränken" + +#: plugins/personal/connectivity/proxy.tpl:52 +msgid "per" +msgstr "pro" + +#: plugins/personal/connectivity/class_webdavAccount.inc:6 +msgid "WebDAV" +msgstr "WebDAV" + +#: plugins/personal/connectivity/phpgw.tpl:1 +msgid "PHPGroupware account" +msgstr "PHPGroupware Konto" + +#: plugins/personal/connectivity/webdav.tpl:1 +msgid "WebDAV account" +msgstr "WebDAV Konto" + +#: plugins/personal/connectivity/pureftpd.tpl:1 +msgid "FTP account" +msgstr "FTP Konto" + +#: plugins/personal/connectivity/pureftpd.tpl:11 +msgid "Bandwidth" +msgstr "Bandbreite" + +#: plugins/personal/connectivity/pureftpd.tpl:15 +msgid "Upload bandwidth" +msgstr "Upload-Bandbreite" + +#: plugins/personal/connectivity/pureftpd.tpl:16 +#: plugins/personal/connectivity/pureftpd.tpl:20 +msgid "kb/s" +msgstr "kb/s" + +#: plugins/personal/connectivity/pureftpd.tpl:19 +msgid "Download bandwidth" +msgstr "Download-Bandbreite" + +#: plugins/personal/connectivity/pureftpd.tpl:31 +msgid "Quota" +msgstr "Quota" + +#: plugins/personal/connectivity/pureftpd.tpl:35 +msgid "Files" +msgstr "Dateien" + +#: plugins/personal/connectivity/pureftpd.tpl:39 +msgid "Size" +msgstr "Größe" + +#: plugins/personal/connectivity/pureftpd.tpl:50 +msgid "Ratio" +msgstr "Verhältnis" + +#: plugins/personal/connectivity/pureftpd.tpl:54 +msgid "Uploaded / downloaded files" +msgstr "Hoch- / runtergeladene Dateien" + +#: plugins/personal/connectivity/pureftpd.tpl:67 +msgid "Check to disable FTP Access" +msgstr "Wählen Sie diese Option um den FTP-Zugriff zu deaktivieren" + +#: plugins/personal/connectivity/pureftpd.tpl:67 +msgid "Temporary disable FTP access" +msgstr "Temporäres Abschalten der FTP-Benutzung" + +#: plugins/personal/connectivity/class_connectivity.inc:60 +msgid "This account has no connectivity extensions." +msgstr "Dieses Konto hat keine Konnektivitäts-Erweiterungen." + +#: plugins/personal/connectivity/class_proxyAccount.inc:5 +#: plugins/generic/references/class_reference.inc:32 +msgid "Proxy" +msgstr "Proxy" + +#: plugins/personal/connectivity/class_proxyAccount.inc:69 +msgid "KB" +msgstr "KB" + +#: plugins/personal/connectivity/class_proxyAccount.inc:69 +msgid "GB" +msgstr "GB" + +#: plugins/personal/connectivity/class_proxyAccount.inc:70 +msgid "hour" +msgstr "Stunde" + +#: plugins/personal/connectivity/class_proxyAccount.inc:70 +msgid "day" +msgstr "Tag" + +#: plugins/personal/connectivity/class_proxyAccount.inc:70 +msgid "week" +msgstr "Woche" + +#: plugins/personal/connectivity/class_proxyAccount.inc:70 +msgid "month" +msgstr "Monat" + +#: plugins/gofax/blocklists/generic.tpl:8 +msgid "List name" +msgstr "Listenname" + +#: plugins/gofax/blocklists/generic.tpl:10 +msgid "Name of blocklist" +msgstr "Name der Sperrliste" + +#: plugins/gofax/blocklists/generic.tpl:16 +msgid "Select subtree to place blocklist in" +msgstr "Wählen Sie den Teilbaum, in den die Sperrliste plaziert werden soll." + +#: plugins/gofax/blocklists/generic.tpl:31 +#: plugins/admin/systems/service.tpl:42 plugins/admin/systems/service.tpl:120 +msgid "Type" +msgstr "Typ" + +#: plugins/gofax/blocklists/generic.tpl:33 +msgid "Select wether to filter incoming or outgoing calls" +msgstr "Wählen Sie, ob ein- oder ausgehende Anfragen gefiltert werden sollen" + +#: plugins/gofax/blocklists/generic.tpl:39 plugins/admin/groups/generic.tpl:13 +#: plugins/admin/applications/generic.tpl:24 +#: plugins/admin/departments/generic.tpl:12 +#: plugins/admin/systems/server.tpl:24 plugins/admin/systems/phone.tpl:24 +#: plugins/admin/systems/printer.tpl:10 plugins/admin/systems/component.tpl:24 +#: plugins/admin/systems/wingeneric.tpl:24 +#: plugins/admin/ogroups/generic.tpl:13 +#: plugins/generic/references/contents.tpl:11 +msgid "Description" +msgstr "Beschreibung" + +#: plugins/gofax/blocklists/generic.tpl:41 +msgid "Descriptive text for this blocklist" +msgstr "Beschreibender Text zu dieser Sperrliste" + +#: plugins/gofax/blocklists/generic.tpl:54 +msgid "Blocked numbers" +msgstr "Gesperrte Nummern" + +#: plugins/gofax/blocklists/generic.tpl:64 +#: plugins/gofax/blocklists/headpage.tpl:24 +#: plugins/addons/addressbook/contents.tpl:33 +#: plugins/admin/groups/headpage.tpl:25 plugins/admin/users/headpage.tpl:26 +#: plugins/admin/applications/headpage.tpl:24 +#: plugins/admin/departments/headpage.tpl:24 +#: plugins/admin/systems/headpage.tpl:25 plugins/admin/ogroups/headpage.tpl:25 +msgid "Information" +msgstr "Information" + +#: plugins/gofax/blocklists/generic.tpl:66 +msgid "Numbers can also contain wild cards." +msgstr "Nummern können auch Joker enthalten." + +#: plugins/gofax/blocklists/class_blocklistManagement.inc:5 +msgid "FAX Blocklists" +msgstr "FAX Sperrlisten" + +#: plugins/gofax/blocklists/class_blocklistManagement.inc:121 +#, php-format +msgid "You're about to delete the blocklist '%s'." +msgstr "Sie möchten die Blockliste '%s' löschen." + +#: plugins/gofax/blocklists/class_blocklistManagement.inc:135 +msgid "You have no permission to remove this blocklist." +msgstr "Sie haben keine Berechtigung diese Blockliste zu entfernen." + +#: plugins/gofax/blocklists/class_blocklistManagement.inc:153 +msgid "Please specify a valid phone number." +msgstr "Bitte geben Sie eine gültige Telefonnummer an." + +#: plugins/gofax/blocklists/class_blocklistManagement.inc:226 +msgid "send" +msgstr "senden" + +#: plugins/gofax/blocklists/class_blocklistManagement.inc:226 +msgid "receive" +msgstr "empfangen" + +#: plugins/gofax/blocklists/class_blocklistManagement.inc:342 +msgid "You have no permissions to create a blocklist on this 'Base'." +msgstr "" +"Sie haben keine Berechtigung, eine Blocklist unter dieser 'Basis' anzulegen." + +#: plugins/gofax/blocklists/class_blocklistManagement.inc:348 +#: plugins/admin/departments/class_departmentGeneric.inc:141 +msgid "Required field 'Name' is not set." +msgstr "Das benötigte Feld 'Name' ist nicht ausgefüllt." + +#: plugins/gofax/blocklists/class_blocklistManagement.inc:351 +msgid "Required field 'Name' contains invalid characters" +msgstr "Das benötigte Feld 'Name' enthält ungültige Zeichen" + +#: plugins/gofax/blocklists/class_blocklistManagement.inc:359 +msgid "Specified name is already used." +msgstr "Der angegebene Name wird bereits verwendet." + +#: plugins/gofax/blocklists/class_blocklistManagement.inc:366 +msgid "No permission to create a blocklist on this base." +msgstr "" +"Sie haben keine Berechtigung, eine Sperrliste unterhalb dieser Basis " +"anzulegen." + +#: plugins/gofax/blocklists/remove.tpl:2 +#: plugins/addons/addressbook/remove.tpl:2 plugins/admin/groups/remove.tpl:2 +#: plugins/admin/users/remove.tpl:2 plugins/admin/applications/remove.tpl:2 +#: plugins/admin/departments/remove.tpl:2 plugins/admin/systems/remove.tpl:2 +#: plugins/admin/ogroups/remove.tpl:2 html/index.php:211 +#: ihtml/themes/altlinux/conflict.tpl:6 ihtml/themes/altlinux/islocked.tpl:6 +#: ihtml/themes/classic/conflict.tpl:6 ihtml/themes/classic/islocked.tpl:6 +#: ihtml/themes/default/conflict.tpl:6 ihtml/themes/default/islocked.tpl:6 +msgid "Warning" +msgstr "Achtung" + +#: plugins/gofax/blocklists/remove.tpl:7 +msgid "" +"Please double check if your really want to do this since there is no way for " +"GOsa to get your data back." +msgstr "" +"Bitte überprüfen Sie genau was Sie tun, weil GOsa keine Chance hat die Daten " +"wiederherzustellen." + +#: plugins/gofax/blocklists/remove.tpl:11 +#: plugins/addons/addressbook/remove.tpl:11 plugins/admin/groups/remove.tpl:11 +#: plugins/admin/users/remove.tpl:11 plugins/admin/applications/remove.tpl:10 +#: plugins/admin/ogroups/remove.tpl:11 +msgid "" +"So - if you're sure - press Delete to continue or Cancel to " +"abort." +msgstr "" +"Wenn Sie sicher sind, drücken Sie Löschen um fortzufahren oder " +"Abbrechen zum Abbruch." + +#: plugins/gofax/blocklists/headpage.tpl:6 +msgid "List of blocklists" +msgstr "Liste der Sperrlisten" + +#: plugins/gofax/blocklists/headpage.tpl:15 +#: plugins/admin/groups/headpage.tpl:15 plugins/admin/users/headpage.tpl:15 +#: plugins/admin/applications/headpage.tpl:15 +#: plugins/admin/departments/headpage.tpl:15 +#: plugins/admin/systems/headpage.tpl:15 plugins/admin/ogroups/headpage.tpl:15 +msgid "New" +msgstr "Neu" + +#: plugins/gofax/blocklists/headpage.tpl:28 +msgid "" +"This menu allows to create, delete and edit selected blocklists. Having a " +"large size of lists, you might prefer the range selectors on top of the " +"select box." +msgstr "" +"Dieses Menü erlaubt neue Sperrlisten hinzuzufügen, Sperrlisten zu editieren " +"oder zu löschen. Bei vielen Sperrlisten bietet sich die Benutzung der " +"Bereichswahl oberhalb der Liste an." + +#: plugins/gofax/blocklists/headpage.tpl:31 +msgid "" +"-Edit- and -New blocklist- will provide an assistant to aid you when " +"performing changes on your blocklist. -Delete- will ask you for confirmation " +"before really deleting anything." +msgstr "" +"Editieren- und -Neue Sperrliste- starten einen Assistenten, um Ihnen bei der " +"Durchführung der enstprechenden Schritte zu helfen. - Löschen- führt eine " +"Sicherheitsabfrage durch bevor der endgültige Löschvorgang erfolgt." + +#: plugins/gofax/blocklists/headpage.tpl:45 +msgid "Select to see send blocklists" +msgstr "Wählen, um die Sperrlisten für ausgehende Anfragen zu sehen" + +#: plugins/gofax/blocklists/headpage.tpl:45 +msgid "Show send blocklists" +msgstr "Zeige ausgehende Sperrlisten" + +#: plugins/gofax/blocklists/headpage.tpl:46 +msgid "Select to see receive blocklists" +msgstr "Wählen, um die eingehende Sperrlisten zu sehen" + +#: plugins/gofax/blocklists/headpage.tpl:46 +msgid "Show receive blocklists" +msgstr "Zeige eingehende Sperrlisten" + +#: plugins/gofax/blocklists/headpage.tpl:49 +msgid "Display lists of department" +msgstr "Zeige die Sperrlisten der Abteilung" + +#: plugins/gofax/blocklists/headpage.tpl:55 +msgid "Display lists matching" +msgstr "Zeige die Sperrlisten, auf die das folgendes passt" + +#: plugins/gofax/blocklists/headpage.tpl:56 +msgid "Regular expression for matching list names" +msgstr "Regulärer Ausdruck zum Abgleich mit Sperrlisten-Namen" + +#: plugins/gofax/blocklists/headpage.tpl:59 +msgid "Display lists containing" +msgstr "Zeige Listen die folgendes enthalten" + +#: plugins/gofax/blocklists/headpage.tpl:60 +msgid "Show lists containing entered numbers" +msgstr "Zeige die Sperrlisten, die die eingegebenen Nummer enthalten" + +#: plugins/gofax/blocklists/main.inc:20 plugins/gofax/blocklists/main.inc:22 +msgid "Blocklist management" +msgstr "Sperrlistenverwaltung" + +#: plugins/gofax/faxaccount/generic.tpl:12 +msgid "Fax number for GOfax to trigger on" +msgstr "FAX-Nummer auf die GOfax reagieren soll" + +#: plugins/gofax/faxaccount/generic.tpl:16 +msgid "Language" +msgstr "Sprache" + +#: plugins/gofax/faxaccount/generic.tpl:18 +msgid "Specify the GOfax communication language for fax to mail gateway" +msgstr "Geben Sie die Kommunikations-Sprache für das Fax to Mail-Gateway an" + +#: plugins/gofax/faxaccount/generic.tpl:24 +msgid "Delivery format" +msgstr "Auslieferungs-Format" + +#: plugins/gofax/faxaccount/generic.tpl:26 +msgid "Specify delivery format for fax to mail gateway" +msgstr "Geben Sie das Auslieferungsformat des FAX to Mailgateways an" + +#: plugins/gofax/faxaccount/generic.tpl:38 +msgid "Delivery methods" +msgstr "Auslieferungs-Methode" + +#: plugins/gofax/faxaccount/generic.tpl:41 +msgid "Temporary disable fax usage" +msgstr "Temporäres Abschalten der FAX-Benutzung" + +#: plugins/gofax/faxaccount/generic.tpl:45 +#, fuzzy +msgid "Deliver fax as mail to" +msgstr "Als Mail ausliefern" + +#: plugins/gofax/faxaccount/generic.tpl:49 +msgid "Deliver fax as mail" +msgstr "Als Mail ausliefern" + +#: plugins/gofax/faxaccount/generic.tpl:54 +msgid "Deliver fax to printer" +msgstr "Fax an Drucker weiterleiten" + +#: plugins/gofax/faxaccount/generic.tpl:68 +msgid "Alternate fax numbers" +msgstr "Alternative FAX-Nummern" + +#: plugins/gofax/faxaccount/generic.tpl:83 +msgid "Blocklists" +msgstr "Sperrlisten" + +#: plugins/gofax/faxaccount/generic.tpl:86 +msgid "Blocklists for incoming fax" +msgstr "Sperrlisten für eingehendes FAX" + +#: plugins/gofax/faxaccount/generic.tpl:92 +msgid "Blocklists for outgoing fax" +msgstr "Sperrlisten für ausgehedes FAX" + +#: plugins/gofax/faxaccount/locals.tpl:6 +msgid "Select numbers to add" +msgstr "Wählen Sie die hinzuzufügenden Nummern" + +#: plugins/gofax/faxaccount/locals.tpl:28 +msgid "Display numbers of department" +msgstr "Zeige die Nummernr der Abteilung" + +#: plugins/gofax/faxaccount/locals.tpl:34 +msgid "Display numbers matching" +msgstr "Zeige die Nummern auf die das folgendes passt" + +#: plugins/gofax/faxaccount/locals.tpl:35 +msgid "Regular expression for matching numbers" +msgstr "Regulärer Ausdruck zum Abgleich mit Telefonnummern" + +#: plugins/gofax/faxaccount/locals.tpl:38 +msgid "Display numbers of user" +msgstr "Zeige Nummern des Benutzers" + +#: plugins/gofax/faxaccount/locals.tpl:39 +msgid "User name of which numbers are shown" +msgstr "Benutzername, dessen Nummern angezeigt werden" + +#: plugins/gofax/faxaccount/lists.tpl:4 +msgid "Blocked numbers/lists" +msgstr "Gesperrte Nummern/Listen" + +#: plugins/gofax/faxaccount/lists.tpl:18 +#: plugins/admin/groups/mail_admins.tpl:24 +msgid "Select a specific department" +msgstr "Wählen Sie eine bestimmte Abteilung" + +#: plugins/gofax/faxaccount/lists.tpl:25 plugins/admin/groups/acl.tpl:12 +#: plugins/admin/groups/mail_admins.tpl:30 +msgid "Choose" +msgstr "Wählen" + +#: plugins/gofax/faxaccount/lists.tpl:28 +msgid "List of predefined blocklists" +msgstr "Liste von vordefinierten Sperrlisten" + +#: plugins/gofax/faxaccount/lists.tpl:37 +#: plugins/admin/groups/application_options.tpl:8 +#: plugins/admin/groups/mail_admins.tpl:37 include/functions.inc:1333 +msgid "Apply" +msgstr "Anwenden" + +#: plugins/gofax/faxaccount/main.inc:105 +msgid "FAX settings" +msgstr "FAX-Einstellungen" + +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:6 +#: plugins/addons/addressbook/address_edit.tpl:92 +#: plugins/addons/addressbook/address_info.tpl:88 +#: plugins/generic/references/class_reference.inc:30 +msgid "FAX" +msgstr "FAX" + +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:109 +msgid "This account has no fax extensions." +msgstr "Dieses Konto hat keine FAX-Erweiterungen." + +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:118 +msgid "Remove fax account" +msgstr "FAX-Konto entfernen" + +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:119 +msgid "" +"This account has fax features enabled. You can disable them by clicking " +"below." +msgstr "" +"Dieses Konto hat die Fax-Funtionen aktiviert. Sie können diese durch einen " +"Klick auf die untere Schaltfläche deaktivieren." + +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:121 +msgid "Create fax account" +msgstr "FAX-Konto erzeugen" + +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:122 +msgid "" +"This account has fax features disabled. You can enable them by clicking " +"below." +msgstr "" +"Aktuell hat dieses Konto keine Fax-Funktionen aktiviert. Sie können diese " +"durch einen Klick auf die Schaltfläche unten aktivieren." + +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:190 +msgid "You're trying to add an invalid phone number." +msgstr "Sie versuchen eine ungültige Telefonnummer hinzuzufügen." + +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:451 +msgid "The required field 'Fax' is not set." +msgstr "Das benötigte Feld 'Fax' ist nicht gesetzt." + +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:455 +msgid "Please enter a valid telephone number in the 'Fax' field." +msgstr "Bitte geben Sie eine gültige Telefonnummer im Feld 'Fax' an." + +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:463 +msgid "Mail delivery is checked, but no address has been specified." +msgstr "" + +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:465 +#, fuzzy +msgid "The mail address you've entered is invalid." +msgstr "" +"Die primäre Adresse, welche Sie eingegeben haben, wird bereits benutzt." + +#: plugins/gofax/reports/detail.tpl:6 +msgid "FAX preview - please wait" +msgstr "FAX Vorschau - bitte warten" + +#: plugins/gofax/reports/detail.tpl:9 +msgid "Click on fax to download" +msgstr "Klicken Sie auf das FAX um es herunterzuladen" + +#: plugins/gofax/reports/detail.tpl:18 +msgid "FAX ID" +msgstr "FAX ID" + +#: plugins/gofax/reports/detail.tpl:22 plugins/gofax/reports/contents.tpl:30 +msgid "User" +msgstr "Benutzer" + +#: plugins/gofax/reports/detail.tpl:26 +msgid "Date / Time" +msgstr "Datum / Zeit" + +#: plugins/gofax/reports/detail.tpl:30 +msgid "Sender MSN" +msgstr "Absender MSN" + +#: plugins/gofax/reports/detail.tpl:34 +msgid "Sender ID" +msgstr "Absender ID" + +#: plugins/gofax/reports/detail.tpl:38 +msgid "Receiver MSN" +msgstr "Empfänger MSN" + +#: plugins/gofax/reports/detail.tpl:42 +msgid "Receiver ID" +msgstr "Empfänger ID" + +#: plugins/gofax/reports/detail.tpl:50 +msgid "Status message" +msgstr "Status-Nachricht" + +#: plugins/gofax/reports/detail.tpl:54 +msgid "Transfer time" +msgstr "Übertragungszeit" + +#: plugins/gofax/reports/detail.tpl:58 plugins/gofax/reports/contents.tpl:35 +msgid "# pages" +msgstr "# Seiten" + +#: plugins/gofax/reports/contents.tpl:2 plugins/addons/logview/contents.tpl:2 +#: plugins/gofon/reports/contents.tpl:2 +msgid "Filter" +msgstr "Filter" + +#: plugins/gofax/reports/contents.tpl:6 +#: plugins/addons/addressbook/contents.tpl:77 +#: plugins/addons/logview/contents.tpl:45 plugins/gofon/reports/contents.tpl:6 +msgid "Search for" +msgstr "Suche nach" + +#: plugins/gofax/reports/contents.tpl:7 plugins/gofon/reports/contents.tpl:7 +msgid "Enter user name to search for" +msgstr "Benutzername nach der gesucht werden soll" + +#: plugins/gofax/reports/contents.tpl:8 plugins/gofax/reports/contents.tpl:16 +#: plugins/gofon/reports/contents.tpl:8 plugins/gofon/reports/contents.tpl:16 +msgid "in" +msgstr "in" + +#: plugins/gofax/reports/contents.tpl:9 plugins/gofon/reports/contents.tpl:9 +msgid "Select subtree to base search on" +msgstr "Wählen Sie den Teilbaum in dem gesucht werden soll" + +#: plugins/gofax/reports/contents.tpl:12 plugins/gofon/reports/contents.tpl:12 +msgid "during" +msgstr "während" + +#: plugins/gofax/reports/contents.tpl:21 +#: plugins/addons/logview/contents.tpl:65 +#: plugins/gofon/reports/contents.tpl:21 +msgid "Search" +msgstr "Suchen" + +#: plugins/gofax/reports/contents.tpl:31 +#: plugins/addons/logview/contents.tpl:83 +#: plugins/gofon/reports/contents.tpl:30 +msgid "Date" +msgstr "Datum" + +#: plugins/gofax/reports/contents.tpl:33 +msgid "Sender" +msgstr "Absender" + +#: plugins/gofax/reports/contents.tpl:34 +msgid "Receiver" +msgstr "Empfänger" + +#: plugins/gofax/reports/contents.tpl:47 +#: plugins/addons/logview/contents.tpl:96 +#: plugins/gofon/reports/contents.tpl:48 +msgid "Search returned no results..." +msgstr "Die Suche verlief ergebnislos..." + +#: plugins/gofax/reports/class_faxreport.inc:6 +msgid "FAX Reports" +msgstr "FAX-Berichte" + +#: plugins/gofax/reports/class_faxreport.inc:97 +#: plugins/gofax/reports/class_faxreport.inc:204 +msgid "Can't connect to fax database, no reports can be shown!" +msgstr "" +"Die FAX-Datenbank kann nicht erreicht werden. Es können keine Berichte " +"angezeigt werden!" + +#: plugins/gofax/reports/class_faxreport.inc:101 +#: plugins/gofax/reports/class_faxreport.inc:208 +msgid "Can't select fax database for report generation!" +msgstr "" +"Die FAX-Datenbank kann bezüglich der Berichtgenerierung nicht ausgewählt " +"werden!" + +#: plugins/gofax/reports/class_faxreport.inc:109 +#: plugins/gofax/reports/class_faxreport.inc:216 +msgid "Query for fax database failed!" +msgstr "Die Anfrage zur FAX-Datenbank ist fehlgeschlagen!" + +#: plugins/gofax/reports/class_faxreport.inc:117 +msgid "You have no permission to retrieve informations about this fax id!" +msgstr "Sie haben keine Berechtigung ein FAX mit dieser ID einzusehen!" + +#: plugins/gofax/reports/class_faxreport.inc:137 +#: plugins/gofax/reports/class_faxreport.inc:224 +#: plugins/gofon/reports/class_fonreport.inc:158 +msgid "Y-M-D" +msgstr "D.M.Y" + +#: plugins/gofax/reports/main.inc:5 +msgid "FAX reports" +msgstr "FAX-Berichte" + +#: plugins/addons/addressbook/contents.tpl:15 +#: plugins/addons/addressbook/address_edit.tpl:33 +#: plugins/addons/addressbook/address_info.tpl:29 +msgid "Private" +msgstr "Privat" + +#: plugins/addons/addressbook/contents.tpl:15 +msgid "Contact" +msgstr "Kontakt" + +#: plugins/addons/addressbook/contents.tpl:37 +msgid "" +"The telephone list plugin provides list and search facilities for the people " +"in your site. You may want to specify the asterisk [*] like in 'Go*us' to " +"find 'Gonicus'. Use the filters below to narrow down your search." +msgstr "" +"Das Telefonlistenmodul bietet Auflistungs- und Suchfunktionen für die " +"Mitarbeiter Ihrer Organisation. Bei Eingaben wie 'gon' wird dementsprechend " +"sowohl 'Gonicus' als auch 'gone' gefunden." + +#: plugins/addons/addressbook/contents.tpl:42 +msgid "Actions" +msgstr "Aktionen" + +#: plugins/addons/addressbook/contents.tpl:47 +msgid "Add entry" +msgstr "Eintrag hinzufügen" + +#: plugins/addons/addressbook/contents.tpl:50 +msgid "Edit entry" +msgstr "Eintrag bearbeiten" + +#: plugins/addons/addressbook/contents.tpl:52 +msgid "Remove entry" +msgstr "Eintrag entfernen" + +#: plugins/addons/addressbook/contents.tpl:67 +msgid "Select to see regular users" +msgstr "Wählen Sie dies um gewöhnliche Benutzer anzuzeigen" + +#: plugins/addons/addressbook/contents.tpl:67 +msgid "Show organizational entries" +msgstr "Zeige Benutzer der Organisation" + +#: plugins/addons/addressbook/contents.tpl:68 +msgid "Select to see users in addressbook" +msgstr "Wählen, um Adressbucheinträge zu sehen" + +#: plugins/addons/addressbook/contents.tpl:68 +msgid "Show addressbook entries" +msgstr "Zeige Adressbuch-Einträge" + +#: plugins/addons/addressbook/contents.tpl:71 +msgid "Display results for department" +msgstr "Zeige Ergebnisse der Abteilung" + +#: plugins/addons/addressbook/contents.tpl:78 +msgid "Search string" +msgstr "Suchtext" + +#: plugins/addons/addressbook/contents.tpl:81 +msgid "Match object" +msgstr "Untersuchtes Objekt" + +#: plugins/addons/addressbook/contents.tpl:83 +msgid "Choose the object that will be searched in" +msgstr "Wählen Sie das Objekt, auf das die Suchfunktion angewandt wird" + +#: plugins/addons/addressbook/dial.tpl:3 +msgid "Dial connection..." +msgstr "Wähle Verbindung..." + +#: plugins/addons/addressbook/dial.tpl:11 +#: plugins/addons/addressbook/class_addressbook.inc:337 +#: plugins/addons/addressbook/class_addressbook.inc:339 +#: plugins/addons/addressbook/class_addressbook.inc:340 +#: plugins/addons/addressbook/class_addressbook.inc:414 +msgid "Dial" +msgstr "Wähle" + +#: plugins/addons/addressbook/address_edit.tpl:4 +msgid "Choose the department to store entry in" +msgstr "Wählen Sie die Abteilung in der der Eintrag abgelegt werden soll" + +#: plugins/addons/addressbook/address_edit.tpl:16 +#: plugins/addons/addressbook/address_info.tpl:12 +msgid "Personal" +msgstr "Persönlich" + +#: plugins/addons/addressbook/address_edit.tpl:23 +#: plugins/addons/addressbook/address_info.tpl:19 +msgid "Initials" +msgstr "Initialien" + +#: plugins/addons/addressbook/address_edit.tpl:47 +#: plugins/addons/addressbook/address_info.tpl:43 +msgid "Email" +msgstr "Email" + +#: plugins/addons/addressbook/address_edit.tpl:57 +#: plugins/addons/addressbook/address_info.tpl:53 +msgid "Organizational" +msgstr "Organisationsbezogen" + +#: plugins/addons/addressbook/address_edit.tpl:65 +#: plugins/addons/addressbook/address_info.tpl:61 +msgid "Company" +msgstr "Firma" + +#: plugins/addons/addressbook/address_edit.tpl:71 +#: plugins/addons/addressbook/address_info.tpl:67 +msgid "City" +msgstr "Stadt" + +#: plugins/addons/addressbook/address_edit.tpl:77 +#: plugins/addons/addressbook/address_info.tpl:73 +msgid "Country" +msgstr "Land" + +#: plugins/addons/addressbook/remove.tpl:7 +msgid "" +"This includes all addressbook data in this entry. Please double check if " +"your really want to do this since there is no way for GOsa to get your data " +"back." +msgstr "" +"Dies umfasst alle in diesem Eintrag gespeicherten Informationen.Bitte " +"prüfen Sie genau, da es keine Möglichkeit für GOsa gibt, die Daten zu " +"restaurieren. " + +#: plugins/addons/addressbook/main.inc:23 +msgid "Address book" +msgstr "Adressbuch" + +#: plugins/addons/addressbook/class_addressbook.inc:6 +msgid "Addressbook" +msgstr "Adressbuch" + +#: plugins/addons/addressbook/class_addressbook.inc:143 +#, php-format +msgid "Dial from %s to %s now?" +msgstr "Soll nun von %s nach %s gewählt werden?" + +#: plugins/addons/addressbook/class_addressbook.inc:147 +msgid "" +"You have no personal phone number set. Please change that in order to " +"perform direct dials." +msgstr "" +"Sie haben keine Telefonnummer. Um direkt wählen zu können müssen Sie eine " +"einstellen." + +#: plugins/addons/addressbook/class_addressbook.inc:176 +#: plugins/addons/addressbook/class_addressbook.inc:280 +msgid "You are not allowed to delete this entry!" +msgstr "Es ist Ihnen nicht erlaubt, diesen Eintrag zu löschen!" + +#: plugins/addons/addressbook/class_addressbook.inc:274 +#, php-format +msgid "You're about to delete the entry %s." +msgstr "Sie löschen gerade den Eintrag %s." + +#: plugins/addons/addressbook/class_addressbook.inc:343 +#, php-format +msgid "Save contact for %s as vcard" +msgstr "Sichere Kontakt für %s als vcard" + +#: plugins/addons/addressbook/class_addressbook.inc:346 +#, php-format +msgid "Send mail to %s" +msgstr "Sende eine Mail an %s" + +#: plugins/addons/addressbook/class_addressbook.inc:426 +msgid "global addressbook" +msgstr "dem globalen Adressbuch" + +#: plugins/addons/addressbook/class_addressbook.inc:428 +msgid "organizations user database" +msgstr "Nutzerdatenbank der Organisation" + +#: plugins/addons/addressbook/class_addressbook.inc:432 +#, php-format +msgid "Contact stored in %s" +msgstr "Kontakt ist in %s abgelegt" + +#: plugins/addons/addressbook/class_addressbook.inc:434 +msgid "Creating new entry in" +msgstr "Erzeugen eines neuen Eintrag in" + +#: plugins/addons/addressbook/class_addressbook.inc:463 +#: plugins/addons/logview/class_logview.inc:62 +#: plugins/addons/logview/class_logview.inc:76 +msgid "All" +msgstr "Alle" + +#: plugins/addons/addressbook/class_addressbook.inc:464 +msgid "Work phone" +msgstr "Telefon (Arbeit)" + +#: plugins/addons/addressbook/class_addressbook.inc:464 +msgid "Cell phone" +msgstr "Mobiltelefon" + +#: plugins/addons/addressbook/class_addressbook.inc:465 +msgid "Home phone" +msgstr "Telefon (zu Hause)" + +#: plugins/addons/addressbook/class_addressbook.inc:465 +msgid "User ID" +msgstr "Benutzer ID" + +#: plugins/addons/addressbook/class_addressbook.inc:537 +msgid "" +"Cannot create a unique DN for your entry. Please fill more formular fields." +msgstr "" +"Es kann keine eindeutige DN für diesen Eintrag erzeugt werden. Füllen Sie " +"zusätzliche Felder aus." + +#: plugins/addons/addressbook/class_addressbook.inc:549 +msgid "" +"You have no permissions to create or modify a global address book entry." +msgstr "" +"Sie haben keine Berechtigung einen Eintrag unterhalb dieser 'Basis' " +"anzulegen." + +#: plugins/addons/logview/class_logview.inc:6 +msgid "System logs" +msgstr "System Protokolle" + +#: plugins/addons/logview/class_logview.inc:36 +msgid "No LOG servers defined!" +msgstr "Keine LOG-Server definiert!" + +#: plugins/addons/logview/class_logview.inc:43 +#: plugins/addons/logview/class_logview.inc:131 +msgid "Can't connect to log database, no logs can be shown!" +msgstr "" +"Die LOG-Datenbank kann nicht erreicht werden. Es können keine Protokolle " +"angezeigt werden!" + +#: plugins/addons/logview/class_logview.inc:47 +#: plugins/addons/logview/class_logview.inc:135 +msgid "Can't select log database for log generation!" +msgstr "" +"Die LOG-Datenbank kann bezüglich der Protokollgenerierung nicht ausgewählt " +"werden!" + +#: plugins/addons/logview/class_logview.inc:56 +#: plugins/addons/logview/class_logview.inc:70 +#: plugins/addons/logview/class_logview.inc:208 +msgid "Query for log database failed!" +msgstr "Die Anfrage zur LOG-Datenbank ist fehlgeschlagen!" + +#: plugins/addons/logview/class_logview.inc:80 +msgid "one hour" +msgstr "eine Stunde" + +#: plugins/addons/logview/class_logview.inc:80 +msgid "6 hours" +msgstr "6 Stunden" + +#: plugins/addons/logview/class_logview.inc:81 +msgid "12 hours" +msgstr "12 Stunden" + +#: plugins/addons/logview/class_logview.inc:81 +msgid "24 hours" +msgstr "24 Stunden" + +#: plugins/addons/logview/class_logview.inc:82 +msgid "2 days" +msgstr "2 Tage" + +#: plugins/addons/logview/class_logview.inc:82 +msgid "one week" +msgstr "eine Woche" + +#: plugins/addons/logview/class_logview.inc:83 +msgid "2 weeks" +msgstr "2 Wochen" + +#: plugins/addons/logview/class_logview.inc:83 +msgid "one month" +msgstr "ein Monat" + +#: plugins/addons/logview/contents.tpl:12 +msgid "Show hosts" +msgstr "Zeige Rechner" + +#: plugins/addons/logview/contents.tpl:20 +msgid "Log level" +msgstr "Priorität" + +#: plugins/addons/logview/contents.tpl:37 +msgid "Time interval" +msgstr "Zeit-Intervall" + +#: plugins/addons/logview/contents.tpl:46 +msgid "Enter string to search for" +msgstr "Zu suchende Zeichenkette" + +#: plugins/addons/logview/contents.tpl:58 +msgid "Ruleset" +msgstr "Regelsatz" + +#: plugins/addons/logview/contents.tpl:81 +msgid "Level" +msgstr "Level" + +#: plugins/addons/logview/contents.tpl:82 +msgid "Hostname" +msgstr "Hostname" + +#: plugins/addons/logview/contents.tpl:84 +msgid "Message" +msgstr "Nachricht" + +#: plugins/addons/logview/main.inc:23 +msgid "System log view" +msgstr "System Protokolle" + +#: plugins/addons/ldapmanager/class_csvimport.inc:6 +#: plugins/addons/ldapmanager/class_import.inc:6 +msgid "LDIF export" +msgstr "LDIF exportieren" + +#: plugins/addons/ldapmanager/class_csvimport.inc:137 +msgid "Need 'sn','givenName' and 'uid' to create user" +msgstr "" + +#: plugins/addons/ldapmanager/class_csvimport.inc:170 +#, fuzzy +msgid "failed" +msgstr "Fehlgeschlagen" + +#: plugins/addons/ldapmanager/class_csvimport.inc:174 +msgid "ok" +msgstr "" + +#: plugins/addons/ldapmanager/class_csvimport.inc:230 +#, fuzzy +msgid "status" +msgstr "Status" + +#: plugins/addons/ldapmanager/class_csvimport.inc:234 +#, php-format +msgid "An Error Occured while inserting entry %s - process aborted" +msgstr "" + +#: plugins/addons/ldapmanager/class_csvimport.inc:259 +msgid "Nothing to import !." +msgstr "" + +#: plugins/addons/ldapmanager/class_csvimport.inc:268 +#: plugins/addons/ldapmanager/class_csvimport.inc:279 +#: plugins/addons/ldapmanager/class_csvimport.inc:284 +#: plugins/addons/ldapmanager/class_import.inc:49 +#: plugins/addons/ldapmanager/class_import.inc:57 +msgid "There is no file uploaded." +msgstr "" + +#: plugins/addons/ldapmanager/class_csvimport.inc:273 +#: plugins/addons/ldapmanager/class_import.inc:42 +#, fuzzy +msgid "The specified file is empty." +msgstr "Das Feld 'Dateien' enthält eine ungültige Eingabe." + +#: plugins/addons/ldapmanager/class_csvimport.inc:401 +msgid "The selected file does not contain any CSV Data..." +msgstr "" + +#: plugins/addons/ldapmanager/contentimport.tpl:3 +#, fuzzy +msgid "" +"The LDIF import plugin provides methods to upload a set of entries to your " +"running LDAP directory as ldif. You may use this to add new or modify " +"existing entries. Remember that GOsa will not check your ldifs for GOsa " +"conformance." +msgstr "" +"Dieses Modul ermöglicht Ihnen den Download der kompletten LDAP-Datenbank, " +"die momentan in Verwendung ist. Die übertragenen Dateien können einerseits " +"zur Datensicherung und andererseits zur Einrichtung eines neuen Servers " +"benutzt werden." + +#: plugins/addons/ldapmanager/contentimport.tpl:13 +msgid "Import LDIF File" +msgstr "" + +#: plugins/addons/ldapmanager/contentimport.tpl:18 +#: plugins/addons/ldapmanager/contentcsv.tpl:15 +#, fuzzy +msgid "Browse" +msgstr "Basis" + +#: plugins/addons/ldapmanager/contentimport.tpl:31 +msgid "Modify existing attributes" +msgstr "" + +#: plugins/addons/ldapmanager/contentimport.tpl:44 +#, fuzzy +msgid "Overwrite existing entry" +msgstr "Eintrag bearbeiten" + +#: plugins/addons/ldapmanager/contentimport.tpl:54 +msgid "Import successfull" +msgstr "" + +#: plugins/addons/ldapmanager/contentcsv.tpl:2 +msgid "" +"The CSV import plugin provides methods to generate user accounts from a file " +"containing Comma Seperated Values. The administrator can decide which " +"columns should be transfered to which attribute. Note that you must have at " +"least the UID, GIVENNAME and SURENAME set." +msgstr "" + +#: plugins/addons/ldapmanager/contentcsv.tpl:11 +msgid "Select CSV file to import" +msgstr "" + +#: plugins/addons/ldapmanager/contentcsv.tpl:23 +#, fuzzy +msgid "Select template" +msgstr "Neue Vorlage" + +#: plugins/addons/ldapmanager/contentcsv.tpl:38 +msgid "All entries have been written to the LDAP database successfully." +msgstr "" + +#: plugins/addons/ldapmanager/contentcsv.tpl:40 +msgid "Oups. There was an error during the import of your data." +msgstr "" + +#: plugins/addons/ldapmanager/contentcsv.tpl:43 +msgid "Here is the status report for the import:" +msgstr "" + +#: plugins/addons/ldapmanager/contentcsv.tpl:91 +#, fuzzy +msgid "Selected Template" +msgstr "Wählen Sie den Terminal-Modus" + +#: plugins/addons/ldapmanager/class_import.inc:95 +msgid "Unknown Error" +msgstr "" + +#: plugins/addons/ldapmanager/contentexport.tpl:3 +#, fuzzy +msgid "" +"The LDIF export plugin provides methods to download a complete snapshot of " +"the running LDAP directory as ldif. You may save these files for backup " +"purpose or when initializing a new server." +msgstr "" +"Dieses Modul ermöglicht Ihnen den Download der kompletten LDAP-Datenbank, " +"die momentan in Verwendung ist. Die übertragenen Dateien können einerseits " +"zur Datensicherung und andererseits zur Einrichtung eines neuen Servers " +"benutzt werden." + +#: plugins/addons/ldapmanager/contentexport.tpl:13 +#, fuzzy +msgid "Export single entry" +msgstr "Eintrag bearbeiten" + +#: plugins/addons/ldapmanager/contentexport.tpl:24 +msgid "Export complete LDIF for" +msgstr "" + +#: plugins/addons/ldapmanager/contentexport.tpl:27 +#: plugins/addons/ldapmanager/contentexport.tpl:42 +#, fuzzy +msgid "Choose the department you want to Export" +msgstr "Wählen Sie die Abteilung in der der Eintrag abgelegt werden soll" + +#: plugins/addons/ldapmanager/contentexport.tpl:39 +msgid "Export IVBB LDIF for" +msgstr "" + +#: plugins/addons/ldapmanager/contentexport.tpl:59 +msgid "Export successfull" +msgstr "" + +#: plugins/addons/ldapmanager/contentexport.tpl:63 +msgid "Click here to save the complete LDAP database to a file" +msgstr "" +"Hier klicken, um die gesamte LDAP-Datenbank in eine Datei zu exportieren." + +#: plugins/addons/ldapmanager/contentexport.tpl:63 +#, fuzzy +msgid "Click here to save the LDAP Export " +msgstr "" +"Hier klicken, um die gesamte LDAP-Datenbank in eine Datei zu exportieren." + +#: plugins/addons/ldapmanager/class_ldif.inc:7 +#: plugins/addons/ldapmanager/main.inc:23 +#, fuzzy +msgid "LDAP manager" +msgstr "LDIF exportieren" + +#: plugins/addons/ldapmanager/class_export.inc:7 +#, fuzzy +msgid "LDIF CSV import" +msgstr "LDIF exportieren" + +#: plugins/addons/ldapmanager/class_export.inc:72 +msgid "Error while exporting the requested entries!" +msgstr "" + +#: plugins/admin/groups/class_groupGeneric.inc:109 +msgid "Can't find this groups SID in LDAP or in your configuration file!" +msgstr "" +"Die SID dieser Gruppe kann weder im LDAP noch in der Configurationsdatei " +"gefunden werden!" + +#: plugins/admin/groups/class_groupGeneric.inc:141 +msgid "This 'dn' is no group." +msgstr "Diese 'dn' hat keine Gruppenerweiterungen." + +#: plugins/admin/groups/class_groupGeneric.inc:252 +msgid "Samba group" +msgstr "Samba-Gruppe" + +#: plugins/admin/groups/class_groupGeneric.inc:252 +msgid "Domain admins" +msgstr "Domänen-Administratoren" + +#: plugins/admin/groups/class_groupGeneric.inc:252 +msgid "Domain users" +msgstr "Domänen-Benutzer" + +#: plugins/admin/groups/class_groupGeneric.inc:253 +msgid "Domain guests" +msgstr "Domänen-Gäste" + +#: plugins/admin/groups/class_groupGeneric.inc:258 +#, php-format +msgid "Special group (%d)" +msgstr "Spezielle Gruppe (%d)" + +#: plugins/admin/groups/class_groupGeneric.inc:570 +#: plugins/admin/ogroups/class_ogroup.inc:484 +msgid "You have no permissions to create a group on this 'Base'." +msgstr "" +"Sie haben keine Berechtigung, eine Gruppe unterhalb dieser 'Basis' anzulegen." + +#: plugins/admin/groups/class_groupGeneric.inc:580 +msgid "" +"The field 'Name' contains invalid characters. Lowercase, numbers and dashes " +"are allowed." +msgstr "" +"Das Feld 'Name' enthält ungültige Zeichen. Kleinbuchstaben, Zahlen und " +"Bindestriche sind erlaubt." + +#: plugins/admin/groups/class_groupGeneric.inc:588 +msgid "Value specified as 'Name' is already used." +msgstr "Eine Gruppe mit diesem Namen existiert bereits." + +#: plugins/admin/groups/mail.tpl:11 +msgid "Primary mail address for this shared folder" +msgstr "Primäre Mail-Adresse dieses Austausch-Ordners" + +#: plugins/admin/groups/mail.tpl:16 +msgid "Select mail server to place user on" +msgstr "Wählen Sie den Mail-Server auf dem der Benutzer angelegt werden soll" + +#: plugins/admin/groups/mail.tpl:64 +msgid "IMAP shared folders" +msgstr "IMAP Austausch-Ordner" + +#: plugins/admin/groups/mail.tpl:68 +msgid "Default permission" +msgstr "Standard-Berechtigungen" + +#: plugins/admin/groups/mail.tpl:76 +msgid "Member permission" +msgstr "Mitglieder-Berechtigungen" + +#: plugins/admin/groups/mail.tpl:91 +msgid "Forward messages to non group members" +msgstr "Weiterleiten der Nachrichten an nicht Gruppenmitglieder" + +#: plugins/admin/groups/headpage.tpl:6 plugins/admin/ogroups/headpage.tpl:6 +msgid "List of groups" +msgstr "Liste der Gruppen" + +#: plugins/admin/groups/headpage.tpl:29 plugins/admin/ogroups/headpage.tpl:29 +msgid "" +"This menu allows to add, edit or remove selected groups. You may want to use " +"the range selector on top of the group listbox, when working with a large " +"number of groups." +msgstr "" +"Dieses Menü erlaubt es Ihnen, ausgewählte Gruppen hinzuzufügen, zu editieren " +"oder zu entfernen. Bei einer Vielzahl von Gruppen bietet sich die Verwendung " +"der Bereichsauswahl oben an." + +#: plugins/admin/groups/headpage.tpl:32 plugins/admin/ogroups/headpage.tpl:32 +msgid "" +"-Edit- and -New group- will execute an assistant to aid you in editing group " +"properties.-Delete- will ask for confirmation before removing groups." +msgstr "" +"Bearbeiten- und -Neue Gruppe- führen einen Assistenten aus, der Sie bei der " +"Bearbeitung der Gruppen-Eigenschaften unterstützt. - Löschen- führt eine " +"Sicherheitsabfrage durch bevor der endgültige Löschvorgang erfolgt." + +#: plugins/admin/groups/headpage.tpl:53 plugins/admin/users/headpage.tpl:57 +msgid "Dive into LDAP subtrees when searching" +msgstr "Unterbäume bei der Suche mit einbeziehen" + +#: plugins/admin/groups/headpage.tpl:53 plugins/admin/users/headpage.tpl:57 +msgid "Search in subtrees" +msgstr "Suche in Unterbäumen" + +#: plugins/admin/groups/main.inc:39 plugins/admin/groups/main.inc:43 +msgid "Group administration" +msgstr "Gruppenverwaltung" + +#: plugins/admin/groups/class_groupManagement.inc:25 +#: plugins/admin/ogroups/class_ogroupManagement.inc:42 +msgid "Groups" +msgstr "Gruppen" + +#: plugins/admin/groups/class_groupManagement.inc:202 +#, php-format +msgid "You're about to delete the group '%s'." +msgstr "Sie sind dabei die Gruppe '%s' zu löschen." + +#: plugins/admin/groups/class_groupManagement.inc:208 +#: plugins/admin/groups/class_groupManagement.inc:234 +msgid "You are not allowed to delete this group!" +msgstr "Es ist Ihnen nicht erlaubt, diese Gruppe zu löschen!" + +#: plugins/admin/groups/remove.tpl:7 +msgid "" +"This may be a primary user group. Please double check if you really want to " +"do this since there is no way for GOsa to get your data back." +msgstr "" +"Bitte prüfen Sie, ob Sie die Aktion wirklich durchführen möchten, da GOsa " +"die Daten nicht wiederherstellen kann." + +#: plugins/admin/groups/application_options.tpl:1 +msgid "Application options" +msgstr "Anwendungsoptionen" + +#: plugins/admin/groups/class_groupMail.inc:153 +msgid "read" +msgstr "lesen" + +#: plugins/admin/groups/class_groupMail.inc:154 +msgid "post" +msgstr "posten" + +#: plugins/admin/groups/class_groupMail.inc:155 +msgid "external post" +msgstr "extern posten" + +#: plugins/admin/groups/class_groupMail.inc:156 +msgid "append" +msgstr "anhängen" + +#: plugins/admin/groups/class_groupMail.inc:157 +msgid "write" +msgstr "schreiben" + +#: plugins/admin/groups/class_groupMail.inc:179 +msgid "This 'dn' has no valid mail extensions." +msgstr "Diese 'dn' hat keine Mail-Erweiterungen." + +#: plugins/admin/groups/class_groupMail.inc:244 +msgid "You're trying to add an invalid email address " +msgstr "Sie versuchen eine ungültige Mail-Adresse" + +#: plugins/admin/groups/class_groupMail.inc:245 +msgid "to the list of forwarders." +msgstr "zur Liste der Weiterleitungen hinzuzufügen." + +#: plugins/admin/groups/class_groupMail.inc:613 +msgid "Please enter a valid email addres in 'Primary address' field." +msgstr "" +"Bitte geben Sie eine gültige E-Mail-Adresse in das Feld 'Primäre Adresse' " +"ein." + +#: plugins/admin/groups/acl.tpl:4 +msgid "Object" +msgstr "Objekt" + +#: plugins/admin/groups/acl.tpl:17 +msgid "Apply this acl only for users own entries" +msgstr "Anwenden dieser Zugriffsregel nur auf Einträge des Eigentümers" + +#: plugins/admin/groups/application.tpl:4 +msgid "Used applications" +msgstr "Verwendete Anwendungen" + +#: plugins/admin/groups/application.tpl:10 +msgid "Edit parameters" +msgstr "Parameter bearbeiten" + +#: plugins/admin/groups/application.tpl:10 +msgid "Edit optional application parameters" +msgstr "Optionale Anwendungsparameter bearbeiten" + +#: plugins/admin/groups/application.tpl:20 +msgid "Available applications" +msgstr "Verfügbare Anwendungen" + +#: plugins/admin/groups/group_objects.tpl:6 +msgid "Select users to add" +msgstr "Wählen Sie die hinzuzufügenden Benutzer" + +#: plugins/admin/groups/group_objects.tpl:29 +#: plugins/admin/users/headpage.tpl:60 +msgid "Display users of department" +msgstr "Zeige die Benutzer der Abteilung" + +#: plugins/admin/groups/group_objects.tpl:35 +#: plugins/admin/users/headpage.tpl:66 +msgid "Display users matching" +msgstr "Zeige die Benutzer, auf die das folgendes passt" + +#: plugins/admin/groups/group_objects.tpl:36 +#: plugins/admin/users/headpage.tpl:67 +msgid "Regular expression for matching user names" +msgstr "Regulärer Ausdruck zum Abgleich mit Benutzernamen" + +#: plugins/admin/groups/class_groupAcl.inc:54 +msgid "This 'dn' is no acl container." +msgstr "Diese 'dn' enthält keine Zugriffserweiterungen." + +#: plugins/admin/groups/class_groupAcl.inc:199 +msgid "All fields are writeable" +msgstr "Alle Felder sind änderbar" + +#: plugins/admin/groups/generic.tpl:7 plugins/admin/ogroups/generic.tpl:7 +msgid "Group name" +msgstr "Gruppenname" + +#: plugins/admin/groups/generic.tpl:9 +msgid "Posix name of the group" +msgstr "POSIX Name der Gruppe" + +#: plugins/admin/groups/generic.tpl:14 plugins/admin/ogroups/generic.tpl:14 +msgid "Descriptive text for this group" +msgstr "Beschreibender Text für diese Gruppe" + +#: plugins/admin/groups/generic.tpl:23 plugins/admin/ogroups/generic.tpl:23 +msgid "Choose subtree to place group in" +msgstr "Wählen Sie den Unterbaum, in den die Gruppe eingepflegt werden soll" + +#: plugins/admin/groups/generic.tpl:36 +msgid "Normally IDs are autogenerated, select to specify manually" +msgstr "" +"Normalerweise werden IDs automatisch generiert, auswählen um dies zu umgehen" + +#: plugins/admin/groups/generic.tpl:36 +msgid "Force GID" +msgstr "Erzwinge GID" + +#: plugins/admin/groups/generic.tpl:38 +msgid "Forced ID number" +msgstr "Erzwungene ID Nummer" + +#: plugins/admin/groups/generic.tpl:45 +msgid "Select to create a samba conform group" +msgstr "Auswählen um eine sambakonforme Gruppe zu erzeugen" + +#: plugins/admin/groups/generic.tpl:50 +msgid "in domain" +msgstr "in der Domain" + +#: plugins/admin/groups/generic.tpl:66 +msgid "Members are in a phone pickup group" +msgstr "Mitglieder sind in einer Übernahme-Gruppe" + +#: plugins/admin/groups/generic.tpl:81 +msgid "Group members" +msgstr "Gruppenmitglieder" + +#: plugins/admin/groups/mail_admins.tpl:4 +msgid "Folder administrators" +msgstr "Ordner-Administratoren" + +#: plugins/admin/groups/class_groupApplication.inc:61 +msgid "This 'dn' is no appgroup." +msgstr "Diese 'dn' hat keine Applikations-Informationen" + +#: plugins/admin/groups/class_groupApplication.inc:69 +msgid "Remove applications" +msgstr "Anwendungen deaktivieren" + +#: plugins/admin/groups/class_groupApplication.inc:70 +msgid "" +"This group has application features enabled. You can disable them by " +"clicking below." +msgstr "" +"Diese Gruppe hat Anwendungs-Eigenschaften aktiviert. Sie können diese durch " +"einen Klick auf die untere Schaltfläche deaktivieren." + +#: plugins/admin/groups/class_groupApplication.inc:72 +msgid "Create applications" +msgstr "Anwendungen aktivieren" + +#: plugins/admin/groups/class_groupApplication.inc:73 +msgid "" +"This group has application features disabled. You can enable them by " +"clicking below." +msgstr "" +"Diese Gruppe hat Anwendungs-Eigenschaften deaktiviert. Sie können diese " +"durch einen Klick auf die untere Schaltfläche aktivieren." + +#: plugins/admin/groups/class_groupApplication.inc:107 +msgid "The selected application name is not uniq. Please check your LDAP." +msgstr "" +"Der gewählte Anwendungsname ist nicht eindeutig. Bitte prüfen Sie den LDAP." + +#: plugins/admin/groups/class_groupApplication.inc:143 +msgid "The selected application has no options." +msgstr "Die gewählte Anwendung hat keine Optionen." + +#: plugins/admin/users/password.tpl:2 +msgid "" +"To change the user password use the fields below. The changes take effect " +"immediately. Please memorize the new password, because the user would't be " +"able to login without it." +msgstr "" +"Um das Benutzer-Passwort zu ändern, nutzen Sie die Felder unten. Die " +"Änderungen werden sofort wirksam. Merken Sie sich das Passwort, da sich der " +"Benutzer nicht mehr ohne dieses Passwort anmelden kann." + +#: plugins/admin/users/template.tpl:2 +msgid "Creating a new user using templates" +msgstr "Erzeugen eines neuen Benutzer über Vorlagen" + +#: plugins/admin/users/template.tpl:6 +msgid "" +"Creating a new user can be assisted by using templates. Many database " +"records will be filled automatically. Choose none to skip the usage " +"of templates." +msgstr "" +"Das Anlegen von neuen Benutzern kann durch die Verwendung von Vorlagen " +"vereinfacht werden. Viele Datenbankeinträge lassen sich damit automatisch " +"ausfüllen. Wählen sie keine um den Vorlagen-Dialog zu überspringen." + +#: plugins/admin/users/template.tpl:11 +#: plugins/admin/users/class_userManagement.inc:614 +msgid "Template" +msgstr "Vorlage" + +#: plugins/admin/users/template.tpl:46 +#: ihtml/themes/altlinux/setup_introduction.tpl:10 +#: ihtml/themes/altlinux/setup_step2.tpl:16 +#: ihtml/themes/altlinux/setup_step3.tpl:12 +#: ihtml/themes/default/setup_introduction.tpl:10 +#: ihtml/themes/default/setup_step2.tpl:16 +#: ihtml/themes/default/setup_step3.tpl:12 +msgid "Continue" +msgstr "Fortsetzen" + +#: plugins/admin/users/main.inc:40 plugins/admin/users/main.inc:46 +msgid "User administration" +msgstr "Benutzerverwaltung" + +#: plugins/admin/users/class_userManagement.inc:25 +msgid "Users" +msgstr "Benutzer" + +#: plugins/admin/users/class_userManagement.inc:157 +#: plugins/admin/users/class_userManagement.inc:208 +msgid "You are not allowed to set this users password!" +msgstr "Es Ihnen nicht erlaubt das Passwort dieses Benutzers zu setzen!" + +#: plugins/admin/users/class_userManagement.inc:244 +#, php-format +msgid "You're about to delete the user %s." +msgstr "Sie löschen gerade den Benutzer %s." + +#: plugins/admin/users/class_userManagement.inc:250 +#: plugins/admin/users/class_userManagement.inc:278 +msgid "You are not allowed to delete this user!" +msgstr "Es ist Ihnen nicht erlaubt, diesen Benutzer zu löschen!" + +#: plugins/admin/users/class_userManagement.inc:365 +#: plugins/admin/ogroups/class_ogroup.inc:202 +msgid "none" +msgstr "keine" + +#: plugins/admin/users/class_userManagement.inc:431 +msgid "A person with the choosen name is already used in this tree." +msgstr "" +"Ein Person mit dem ausgewählten Namen ist in diesem Baum bereits angelegt." + +#: plugins/admin/users/remove.tpl:7 +msgid "" +"This includes all account data, system access rules, imap settings, etc. for " +"this user. Please double check if your really want to do this since there is " +"no way for GOsa to get your data back." +msgstr "" +"Dies umfasst alle Konto-Informationen, Zugriffsregeln, IMAP-Einstellungen, " +"etc. dieses Benutzers. Bitte prüfen Sie genau, da es keine Möglichkeit für " +"GOsa gibt, die Daten zu restaurieren. " + +#: plugins/admin/users/headpage.tpl:6 +msgid "List of users" +msgstr "Liste der Benutzer" + +#: plugins/admin/users/headpage.tpl:16 +msgid "New template" +msgstr "Neue Vorlage" + +#: plugins/admin/users/headpage.tpl:30 +msgid "" +"This menu provides the functionality to create, edit or delete selected " +"users. Having a great number of users, you may want to use the range " +"seletors on top of the user list." +msgstr "" +"Dieses Menü bietet die Möglichkeit Benutzer neu anzulegen, diese zu " +"bearbeiten oder zu löschen. Wenn Sie eine grosse Anzahl an Benutzern " +"verwalten müssen, bietet sich die Verwendung der Bereichsauswahl über der " +"Liste an." + +#: plugins/admin/users/headpage.tpl:33 +msgid "" +"-Edit- and -New user- execute an assistant to aid you in managing your " +"account informations. -Delete- will ask for confirmation before deleting the " +"users from the LDAP server." +msgstr "" +"-Bearbeiten- und -Neuer Benutzer- starten einen Assistenten, der Sie bei der " +"Bearbeitung der Eigenschaften unterstützt. -Löschen- führt eine " +"Sicherheitsabfrage durch bevor der endgültige Löschvorgang erfolgt." + +#: plugins/admin/users/headpage.tpl:47 +msgid "Select to see template pseudo users" +msgstr "Wählen Sie dies um Vorlagen anzuzeigen" + +#: plugins/admin/users/headpage.tpl:47 +msgid "Show templates" +msgstr "Zeige Vorlagen" + +#: plugins/admin/users/headpage.tpl:48 +msgid "Select to see users that have only a GOsa object" +msgstr "Auswählen, um die Benutzer anzuzeigen, die nur ein GOsa-Objekt haben" + +#: plugins/admin/users/headpage.tpl:48 +msgid "Show functional users" +msgstr "Zeige funktionelle Benutzer" + +#: plugins/admin/users/headpage.tpl:49 +msgid "Select to see users that have posix settings" +msgstr "Auswählen, um die Benutzer mit POSIX-Konto zu sehen" + +#: plugins/admin/users/headpage.tpl:49 +msgid "Show unix users" +msgstr "Zeige UNIX-Benutzer" + +#: plugins/admin/users/headpage.tpl:50 +msgid "Select to see users that have mail settings" +msgstr "Auswählen, um die Benutzer zu sehen die ein Mail-Konto besitzen" + +#: plugins/admin/users/headpage.tpl:50 +msgid "Show mail users" +msgstr "Zeige E-Mail-Benutzer" + +#: plugins/admin/users/headpage.tpl:51 +msgid "Select to see users that have samba settings" +msgstr "Auswählen, um die Benutzer zu sehen die SAMBA-Einstellungen besitzen" + +#: plugins/admin/users/headpage.tpl:51 +msgid "Show samba users" +msgstr "Zeige SAMBA-Benutzer" + +#: plugins/admin/users/headpage.tpl:52 +msgid "Select to see users that have proxy settings" +msgstr "Auswählen, um die Benutzer zu sehen die Proxy-Einstellungen besitzen" + +#: plugins/admin/users/headpage.tpl:52 +msgid "Show proxy users" +msgstr "Zeige Proxy-Benutzer" + +#: plugins/admin/users/headpage.tpl:53 +msgid "Select to see users that have ftp settings" +msgstr "Auswählen, um die Benutzer zu sehen, die FTP-Einstellungen besitzen" + +#: plugins/admin/users/headpage.tpl:53 +msgid "Show FTP users" +msgstr "Zeige FTP-Benutzer" + +#: plugins/admin/users/headpage.tpl:54 +msgid "Select to see users that have FAX settings" +msgstr "Auswählen, um die Benutzer zu sehen, die FAX-Einstellungen besitzen" + +#: plugins/admin/users/headpage.tpl:54 +msgid "Show FAX users" +msgstr "Zeige FAX-Benutzer" + +#: plugins/admin/applications/generic.tpl:7 +#: plugins/admin/applications/generic.tpl:8 +msgid "Application name" +msgstr "Anwendungsname" + +#: plugins/admin/applications/generic.tpl:12 +#: plugins/admin/systems/server.tpl:48 plugins/admin/systems/terminal.tpl:109 +#: plugins/admin/systems/workstation.tpl:109 +#: plugins/admin/ogroups/termgroup.tpl:13 +msgid "Execute" +msgstr "Ausführen" + +#: plugins/admin/applications/generic.tpl:14 +msgid "Path and/or binary name of application" +msgstr "Pfad und/oder Name der Anwendung" + +#: plugins/admin/applications/generic.tpl:18 +msgid "Display name" +msgstr "Angezeigter Name" + +#: plugins/admin/applications/generic.tpl:20 +msgid "Application name to be displayed (i.e. below icons)" +msgstr "Angezeigter Anwendungsname (z. B. unter Icons)" + +#: plugins/admin/applications/generic.tpl:35 +msgid "Choose subtree to place application in" +msgstr "Wählen Sie den Teilbaum, in den die Anwendung plaziert werden soll." + +#: plugins/admin/applications/generic.tpl:46 +msgid "Icon" +msgstr "Symbol" + +#: plugins/admin/applications/generic.tpl:51 +msgid "Update" +msgstr "Aktualisieren" + +#: plugins/admin/applications/generic.tpl:51 +msgid "Reload picture from LDAP" +msgstr "Bild aus dem LDAP neu laden" + +#: plugins/admin/applications/generic.tpl:61 +msgid "Only executable for members" +msgstr "Nur ausführbar für Gruppen-Mitglieder" + +#: plugins/admin/applications/generic.tpl:63 +msgid "Replace user configuration on startup" +msgstr "Konfiguration bei jedem Start austauschen" + +#: plugins/admin/applications/generic.tpl:67 +msgid "Place icon on members desktop" +msgstr "Plaziere das Symbol auf dem Gruppen-Mitglieds-Desktop" + +#: plugins/admin/applications/generic.tpl:70 +msgid "Place entry in members startmenu" +msgstr "Plaziere einen Eintrag im Startmenü des Gruppen-Mitglieds" + +#: plugins/admin/applications/class_applicationParameters.inc:47 +msgid "Remove options" +msgstr "Optionen entfernen" + +#: plugins/admin/applications/class_applicationParameters.inc:48 +msgid "This application has options. You can disable them by clicking below." +msgstr "" +"Diese Anwendung hat Optionen. Sie können diese durch Betätigen der " +"Schaltfläche unten entfernen." + +#: plugins/admin/applications/class_applicationParameters.inc:50 +msgid "Create options" +msgstr "Optionen aktivieren" + +#: plugins/admin/applications/class_applicationParameters.inc:51 +msgid "" +"This application has options disabled. You can enable them by clicking below." +msgstr "" +"Diese Anwendung hat keine Optionen. Sie können diese durch Betätigen der " +"Schaltfläche unten hinzufügen." + +#: plugins/admin/applications/class_applicationParameters.inc:87 +msgid "Variable" +msgstr "Variable" + +#: plugins/admin/applications/class_applicationParameters.inc:87 +msgid "Default value" +msgstr "Standard-Wert" + +#: plugins/admin/applications/class_applicationParameters.inc:98 +msgid "Add option" +msgstr "Option hinzufügen" + +#: plugins/admin/applications/class_applicationParameters.inc:149 +#, php-format +msgid "Value '%s' specified as option name is not valid." +msgstr "Der von Ihnen angegebene Optionsname '%s' ist ungültig." + +#: plugins/admin/applications/remove.tpl:7 +msgid "" +"This may be used by several groups. Please double check if your really want " +"to do this since there is no way for GOsa to get your data back." +msgstr "" +"Dieser Eintrag wird unter Umständen von verschiedenen Gruppen genutzt. Bitte " +"überprüfen Sie genau was Sie tun,da GOsa keine Möglichkeit hat, die Daten " +"wiederherzustellen." + +#: plugins/admin/applications/headpage.tpl:6 +msgid "List of applications" +msgstr "Liste der Anwendungen" + +#: plugins/admin/applications/headpage.tpl:28 +msgid "" +"This menu allows to add, edit or remove selected applications. You may want " +"to use the range selector on top of the application listbox, when working " +"with a large number of applications." +msgstr "" +"Dieses Menü erlaubt ausgewählte Anwendungen hinzuzufügen, die Einträge zu " +"editieren oder zu löschen. Beim Arbeiten mit einer Vielzahl von Anwendungen " +"bietet sich die Benutzung der Bereichs-Auswahl oberhalb der Listen-Box an." + +#: plugins/admin/applications/headpage.tpl:31 +msgid "" +"-Edit- and -New application- will execute an assistant to aid you in editing " +"properties. -Delete- will ask for confirmation before removing applications." +msgstr "" +"Editieren- und -Neue Anwendungen- rufen einen Assistenten auf, der Ihnen bei " +"der Bearbeitung der Eigenschaften hilft. -Löschen- fragt nach einer " +"Bestätigung bevor der Anwendungseintrag gelöscht wird." + +#: plugins/admin/applications/headpage.tpl:45 +msgid "Display applications of department" +msgstr "Zeige die Anwendungen der Abteilung" + +#: plugins/admin/applications/headpage.tpl:51 +msgid "Display applications matching" +msgstr "Zeige die Anwendungen, auf die das Folgende passt" + +#: plugins/admin/applications/headpage.tpl:52 +msgid "Regular expression for matching application names" +msgstr "Regulärer Ausdruck zum Abgleich mit Anwendungs-Namen" + +#: plugins/admin/applications/main.inc:38 +#: plugins/admin/applications/main.inc:40 +msgid "Application management" +msgstr "Anwendungsverwaltung" + +#: plugins/admin/applications/class_applicationManagement.inc:185 +#, php-format +msgid "You're about to delete the application '%s'." +msgstr "Sind sind dabei den Anwendungseintrag '%s' zu löschen." + +#: plugins/admin/applications/class_applicationManagement.inc:191 +#: plugins/admin/applications/class_applicationManagement.inc:217 +msgid "You are not allowed to delete this application!" +msgstr "Es ist Ihnen nicht erlaubt, diese Anwendung zu löschen!" + +#: plugins/admin/applications/class_applicationGeneric.inc:57 +msgid "This 'dn' is no application." +msgstr "Diese 'dn' ist keine Anwendung." + +#: plugins/admin/applications/class_applicationGeneric.inc:148 +msgid "The specified picture has not been uploaded correctly." +msgstr "Das angegebene Bild wurde nicht korrekt übertragen." + +#: plugins/admin/applications/class_applicationGeneric.inc:180 +msgid "You have no permissions to create a application on this 'Base'." +msgstr "" +"Sie haben keine Berechtigung eine Anwendung unter dieser 'Basis' anzulegen." + +#: plugins/admin/applications/class_applicationGeneric.inc:185 +msgid "Required field 'Name' is not filled." +msgstr "Das benötigte Feld 'Name' ist nicht ausgefüllt." + +#: plugins/admin/applications/class_applicationGeneric.inc:188 +msgid "Required field 'Execute' is not filled." +msgstr "Das benötigte Feld 'Auführen' ist nicht ausgefüllt." + +#: plugins/admin/applications/class_applicationGeneric.inc:197 +msgid "There's already an application with this 'Name'." +msgstr "Eine Anwendung mit diesem Namen existiert bereits." + +#: plugins/admin/departments/generic.tpl:4 +#: plugins/admin/systems/terminal.tpl:1 +#: plugins/admin/systems/workstation.tpl:1 +msgid "Properties" +msgstr "Eigenschaften" + +#: plugins/admin/departments/generic.tpl:8 +msgid "Name of department" +msgstr "Name der Abteilung" + +#: plugins/admin/departments/generic.tpl:9 +msgid "Name of subtree to create" +msgstr "Name des zu erzeugenden Unterbaums" + +#: plugins/admin/departments/generic.tpl:14 +msgid "Descriptive text for department" +msgstr "Beschreibender Text zu dieser Abteilung" + +#: plugins/admin/departments/generic.tpl:18 +msgid "Category" +msgstr "Kategorie" + +#: plugins/admin/departments/generic.tpl:20 +msgid "Category for this subtree" +msgstr "Kategorie dieses Unterbaums" + +#: plugins/admin/departments/generic.tpl:30 +msgid "Choose subtree to place department in" +msgstr "Wählen Sie den Unterbaum, in den die Abteilung eingepflegt werden soll" + +#: plugins/admin/departments/generic.tpl:47 +msgid "State where this subtree is located" +msgstr "Staat in dem dieser Unterbaum anzusiedeln ist" + +#: plugins/admin/departments/generic.tpl:51 +msgid "Location of this subtree" +msgstr "Örtlichkeit dieses Unterbaums" + +#: plugins/admin/departments/generic.tpl:55 +msgid "Postal address of this subtree" +msgstr "Post Anschrift dieses Unterbaums" + +#: plugins/admin/departments/generic.tpl:59 +msgid "Base telephone number of this subtree" +msgstr "Einleitende Telefonnummer dieses Unterbaums" + +#: plugins/admin/departments/generic.tpl:63 +msgid "Base facsimile telephone number of this subtree" +msgstr "Einleitende FAX-Nummer dieses Unterbaums" + +#: plugins/admin/departments/remove.tpl:7 +msgid "" +"This includes all accounts, systems, etc. in this subtree. Please " +"double check if your really want to do this since there is no way for GOsa " +"to get your data back." +msgstr "" +"Dies umfasst alle Konten, System- und Setup-Informationen Bitte " +"prüfen Sie genau, da es keine Möglichkeit für GOsa gibt, die Daten zu " +"restaurieren. " + +#: plugins/admin/departments/remove.tpl:11 plugins/admin/systems/remove.tpl:11 +msgid "" +"Best thing to do before performing this action would be to save the current " +"contents of your LDAP tree in a file. So - if you've done so - press " +"Delete to continue or Cancel to abort." +msgstr "" +"Eine Sicherung der Daten des LDAP-Baums bietet sich an. Wenn Sie soweit sind " +"drücken Sie Beenden um Fortzufahren oder Abbrechen um " +"Abzubrechen." + +#: plugins/admin/departments/headpage.tpl:6 +msgid "List of departments" +msgstr "Liste der Abteilungen" + +#: plugins/admin/departments/headpage.tpl:28 +msgid "" +"This menu allows to create, delete and edit selected departments. Having a " +"large size of departments, you might prefer the range selectors on top of " +"the department list." +msgstr "" +"Dieses Menü erlaubt es, neue Abteilungen hinzuzufügen, Abteilungen zu " +"editieren und zu löschen. Bei vielen Abteilungen bietet sich die Benutzung " +"der Bereichswahl oberhalb der Liste an." + +#: plugins/admin/departments/headpage.tpl:31 +msgid "" +"-Edit- and -New department- will provide an assistant to aid you when " +"performing changes on your departments. -Delete- will ask you for " +"confirmation before really deleting anything." +msgstr "" +"Editieren- und -Neue Abteilung- starten einen Assistenten, um Ihnen bei der " +"Durchführung der entsprechenden Schritte zu helfen. - Löschen- führt eine " +"Sicherheitsabfrage durch bevor der endgültige Löschvorgang erfolgt." + +#: plugins/admin/departments/headpage.tpl:45 +msgid "Display subdepartments of" +msgstr "Zeige die Unterabteilungen der Abteilung" + +#: plugins/admin/departments/headpage.tpl:51 +msgid "Display departments matching" +msgstr "Zeige Abteilungen, auf die zutrifft" + +#: plugins/admin/departments/headpage.tpl:52 +msgid "Regular expression for matching department names" +msgstr "Regulärer Ausdruck zur Suche nach Abteilungs-Namen" + +#: plugins/admin/departments/main.inc:38 plugins/admin/departments/main.inc:40 +msgid "Department management" +msgstr "Abteilungsverwaltung" + +#: plugins/admin/departments/class_departmentManagement.inc:25 +#: plugins/admin/ogroups/class_ogroupManagement.inc:43 +msgid "Departments" +msgstr "Abteilungen" + +#: plugins/admin/departments/class_departmentManagement.inc:130 +#, php-format +msgid "You're about to delete the whole LDAP subtree placed under '%s'." +msgstr "" +"Sie sind dabei, einen gesamten LDAP-Zweig unterhalb von '%s' zu löschen." + +#: plugins/admin/departments/class_departmentManagement.inc:145 +msgid "You have no permission to remove this department." +msgstr "Sie haben keine Berechtigung diese Abteilung zu entfernen." + +#: plugins/admin/departments/class_departmentGeneric.inc:127 +msgid "You have no permissions to create a department on this 'Base'." +msgstr "" +"Sie haben keine Berechtigung eine Abteilung unterhalb dieser 'Basis' " +"anzulegen." + +#: plugins/admin/departments/class_departmentGeneric.inc:134 +#: plugins/admin/departments/class_departmentGeneric.inc:136 +msgid "Department with that 'Name' already exists." +msgstr "Eine Abteilung mit diesem Namen existiert bereits." + +#: plugins/admin/departments/class_departmentGeneric.inc:144 +msgid "Required field 'Description' is not set." +msgstr "Das benötigte Feld 'Beschreibung' ist nicht gesetzt." + +#: plugins/admin/departments/class_departmentGeneric.inc:149 +msgid "The field 'Name' contains the reserved word 'incoming'." +msgstr "Das Feld 'Name' enthält das reservierte Wort 'incoming'." + +#: plugins/admin/departments/class_departmentGeneric.inc:150 +msgid " Please choose another name." +msgstr "Bitte wählen Sie einen anderen Namen." + +#: plugins/admin/systems/class_terminalService.inc:82 +msgid "default" +msgstr "Standard" + +#: plugins/admin/systems/class_terminalService.inc:83 +msgid "show chooser" +msgstr "zeige Auswahl" + +#: plugins/admin/systems/class_terminalService.inc:84 +msgid "direct" +msgstr "direkt" + +#: plugins/admin/systems/class_terminalService.inc:87 +msgid "load balanced" +msgstr "lastverteilt" + +#: plugins/admin/systems/class_terminalService.inc:90 +msgid "Windows RDP" +msgstr "Windows RDP" + +#: plugins/admin/systems/class_terminalService.inc:91 +msgid "ICA client" +msgstr "Citrix Metaframe" + +#: plugins/admin/systems/class_terminalService.inc:135 +#: plugins/admin/systems/class_terminalInfo.inc:61 +#: plugins/admin/systems/class_terminalStartup.inc:75 +#: plugins/admin/systems/class_terminalGeneric.inc:126 +msgid "This 'dn' has no terminal features." +msgstr "Diese 'dn' hat keine Terminal-Erweiterungen." + +#: plugins/admin/systems/class_terminalService.inc:182 +#, fuzzy +msgid "Choose the phone located at the current terminal" +msgstr "Wählen Sie die Abteilung in der der Eintrag abgelegt werden soll" + +#: plugins/admin/systems/class_terminalService.inc:244 +#: plugins/admin/systems/class_terminalService.inc:249 +msgid "Please specify a valid VSync range." +msgstr "Bitte geben Sie einen gültigen VSync-Bereich an." + +#: plugins/admin/systems/class_terminalService.inc:259 +#: plugins/admin/systems/class_terminalService.inc:264 +msgid "Please specify a valid HSync range." +msgstr "Bitte geben Sie einen gültigen HSync-Bereich an." + +#: plugins/admin/systems/class_terminalInfo.inc:68 +msgid "This is a virtual terminal which has no properties to show here." +msgstr "" +"Dies ist ein virtuelles Terminal, deshalb können an dieser Stelle keine " +"Informationen angezeigt werden." + +#: plugins/admin/systems/class_terminalInfo.inc:80 +msgid "online" +msgstr "aktiv" + +#: plugins/admin/systems/class_terminalInfo.inc:130 +msgid "running" +msgstr "läuft" + +#: plugins/admin/systems/class_terminalInfo.inc:133 +msgid "not running" +msgstr "läuft nicht" + +#: plugins/admin/systems/class_terminalInfo.inc:141 +msgid "unknown status" +msgstr "unbekannter Status" + +#: plugins/admin/systems/class_terminalInfo.inc:159 +msgid "offline" +msgstr "nicht aktiv" + +#: plugins/admin/systems/network.tpl:1 +msgid "Network settings" +msgstr "Netzwerk-Einstellungen" + +#: plugins/admin/systems/network.tpl:8 +msgid "IP-address" +msgstr "IP-Adresse" + +#: plugins/admin/systems/network.tpl:16 +msgid "MAC-address" +msgstr "MAC-Adresse" + +#: plugins/admin/systems/server.tpl:6 +#, fuzzy +msgid "Server name" +msgstr "Server" + +#: plugins/admin/systems/server.tpl:15 plugins/admin/systems/phone.tpl:15 +#: plugins/admin/systems/terminal.tpl:20 plugins/admin/systems/printer.tpl:23 +#: plugins/admin/systems/workstation.tpl:20 +#: plugins/admin/systems/component.tpl:15 +#: plugins/admin/systems/wingeneric.tpl:15 +msgid "Choose subtree to place terminal in" +msgstr "Wählen Sie den Unterbaum, in den das Terminal eingepflegt werden soll" + +#: plugins/admin/systems/server.tpl:38 plugins/admin/systems/terminal.tpl:99 +#: plugins/admin/systems/workstation.tpl:99 +#: plugins/admin/ogroups/termgroup.tpl:3 +msgid "Action" +msgstr "Aktion" + +#: plugins/admin/systems/server.tpl:42 +#, fuzzy +msgid "Select action to execute for this server" +msgstr "Wählen Sie die auszuführende Aktion für dieses Terminal" + +#: plugins/admin/systems/info.tpl:1 +msgid "System information" +msgstr "System-Information" + +#: plugins/admin/systems/info.tpl:7 +msgid "CPU" +msgstr "Prozessor" + +#: plugins/admin/systems/info.tpl:10 +msgid "Memory" +msgstr "Speicher" + +#: plugins/admin/systems/info.tpl:13 +msgid "Boot MAC" +msgstr "Hardware Adresse" + +#: plugins/admin/systems/info.tpl:16 +msgid "USB support" +msgstr "USB Unterstützung" + +#: plugins/admin/systems/info.tpl:19 plugins/admin/systems/info.tpl:87 +msgid "System status" +msgstr "System-Status" + +#: plugins/admin/systems/info.tpl:23 +#, fuzzy +msgid "Inventary number" +msgstr "Telefonnummer" + +#: plugins/admin/systems/info.tpl:27 +msgid "Last login" +msgstr "Letzte Anmeldung" + +#: plugins/admin/systems/info.tpl:38 +msgid "Network devices" +msgstr "Netzwerk-Geräte" + +#: plugins/admin/systems/info.tpl:47 +msgid "IDE devices" +msgstr "IDE-Geräte" + +#: plugins/admin/systems/info.tpl:56 +msgid "SCSI devices" +msgstr "SCSI-Geräte" + +#: plugins/admin/systems/info.tpl:64 +msgid "Floppy device" +msgstr "Disketten-Laufwerk" + +#: plugins/admin/systems/info.tpl:68 +msgid "CDROM device" +msgstr "CDROM-Laufwerk" + +#: plugins/admin/systems/info.tpl:73 plugins/admin/systems/service.tpl:83 +msgid "Graphic device" +msgstr "Grafikkarte" + +#: plugins/admin/systems/info.tpl:77 +msgid "Audio device" +msgstr "Soundkarte" + +#: plugins/admin/systems/info.tpl:93 +msgid "Up since" +msgstr "Eingeschaltet seit" + +#: plugins/admin/systems/info.tpl:96 +msgid "CPU load" +msgstr "Prozessor-Last" + +#: plugins/admin/systems/info.tpl:99 +msgid "Memory usage" +msgstr "Speicher-Nutzung" + +#: plugins/admin/systems/info.tpl:102 +msgid "Swap usage" +msgstr "Auslagerungs-Nutzung" + +#: plugins/admin/systems/info.tpl:116 +msgid "SSH service" +msgstr "SSH-Dienst" + +#: plugins/admin/systems/info.tpl:119 +msgid "Print service" +msgstr "Druck-Dienst" + +#: plugins/admin/systems/info.tpl:122 +msgid "Scan service" +msgstr "Scan-Dienst" + +#: plugins/admin/systems/info.tpl:125 +msgid "Sound service" +msgstr "Audio-Dienst" + +#: plugins/admin/systems/info.tpl:128 +msgid "GUI" +msgstr "GUI" + +#: plugins/admin/systems/main.inc:45 plugins/admin/systems/main.inc:47 +msgid "System management" +msgstr "Systemverwaltung" + +#: plugins/admin/systems/class_terminalGeneric.inc:62 +#: plugins/admin/systems/class_workstationGeneric.inc:71 +msgid "text" +msgstr "textuell" + +#: plugins/admin/systems/class_terminalGeneric.inc:63 +#: plugins/admin/systems/class_workstationGeneric.inc:72 +msgid "graphic" +msgstr "grafisch" + +#: plugins/admin/systems/class_terminalGeneric.inc:88 +#: plugins/admin/systems/class_servGeneric.inc:58 +#: plugins/admin/systems/class_workstationGeneric.inc:98 +#: plugins/admin/ogroups/class_termgroup.inc:51 +msgid "No WAKECMD definition found in your gosa.conf" +msgstr "Es ist kein WAKECMD in ihrer gosa.conf definiert" + +#: plugins/admin/systems/class_terminalGeneric.inc:92 +#: plugins/admin/systems/class_terminalGeneric.inc:104 +#: plugins/admin/systems/class_terminalGeneric.inc:116 +#: plugins/admin/systems/class_servGeneric.inc:62 +#: plugins/admin/systems/class_servGeneric.inc:74 +#: plugins/admin/systems/class_servGeneric.inc:86 +#: plugins/admin/systems/class_workstationGeneric.inc:102 +#: plugins/admin/systems/class_workstationGeneric.inc:114 +#: plugins/admin/systems/class_workstationGeneric.inc:126 +#: plugins/admin/ogroups/class_termgroup.inc:55 +#: plugins/admin/ogroups/class_termgroup.inc:67 +#: plugins/admin/ogroups/class_termgroup.inc:79 +#, php-format +msgid "Execution of '%s' failed!" +msgstr "Die Ausführung des Befehls '%s' ist fehlgeschlagen!" + +#: plugins/admin/systems/class_terminalGeneric.inc:100 +#: plugins/admin/systems/class_servGeneric.inc:70 +#: plugins/admin/systems/class_workstationGeneric.inc:110 +#: plugins/admin/ogroups/class_termgroup.inc:63 +msgid "No REBOOTCMD definition found in your gosa.conf" +msgstr "Es ist kein REBOOTCMDCMD in ihrer gosa.conf definiert" + +#: plugins/admin/systems/class_terminalGeneric.inc:112 +#: plugins/admin/systems/class_servGeneric.inc:82 +#: plugins/admin/systems/class_workstationGeneric.inc:122 +#: plugins/admin/ogroups/class_termgroup.inc:75 +msgid "No HALTCMD definition found in your gosa.conf" +msgstr "Es ist kein HALTCMD in ihrer gosa.conf definiert" + +#: plugins/admin/systems/class_terminalGeneric.inc:142 +#: plugins/admin/systems/class_servGeneric.inc:110 +#: plugins/admin/systems/class_workstationGeneric.inc:151 +#: plugins/admin/ogroups/class_termgroup.inc:91 +msgid "Switch off" +msgstr "Ausschalten" + +#: plugins/admin/systems/class_terminalGeneric.inc:142 +#: plugins/admin/systems/class_servGeneric.inc:110 +#: plugins/admin/systems/class_workstationGeneric.inc:151 +#: plugins/admin/ogroups/class_termgroup.inc:91 +msgid "Reboot" +msgstr "Neustarten" + +#: plugins/admin/systems/class_terminalGeneric.inc:144 +#: plugins/admin/systems/class_servGeneric.inc:112 +#: plugins/admin/systems/class_workstationGeneric.inc:153 +#: plugins/admin/ogroups/class_termgroup.inc:91 +msgid "Wake up" +msgstr "Aufwecken" + +#: plugins/admin/systems/class_terminalGeneric.inc:213 +msgid "You have no permissions to create a terminal on this 'Base'." +msgstr "" +"Sie haben keine Berechtigung ein Terminal unterhalb dieser 'Basis' anzulegen." + +#: plugins/admin/systems/class_terminalGeneric.inc:217 +msgid "The required field 'Terminal name' is not set." +msgstr "Das benötigte Feld 'Terminalname' ist nicht gesetzt." + +#: plugins/admin/systems/class_terminalGeneric.inc:230 +#: plugins/admin/systems/class_servGeneric.inc:178 +#: plugins/admin/systems/class_workstationGeneric.inc:237 +#: plugins/admin/systems/class_printGeneric.inc:131 +#: plugins/admin/systems/class_phoneGeneric.inc:128 +#: plugins/admin/systems/class_componentGeneric.inc:125 +#: plugins/admin/systems/class_wingeneric.inc:165 +#, php-format +msgid "There is already an entry '%s' in the base choosen by you" +msgstr "" +"Der Eintrag '%s' ist in der von Ihnen ausgewählten Basis bereits vorhanden" + +#: plugins/admin/systems/phone.tpl:6 +msgid "Phone name" +msgstr "Telefon Name" + +#: plugins/admin/systems/class_servGeneric.inc:48 +#, fuzzy +msgid "This 'dn' has no server features." +msgstr "Diese 'dn' hat keine Drucker-Erweiterungen." + +#: plugins/admin/systems/class_servGeneric.inc:168 +#, fuzzy +msgid "You have no permissions to create a server on this 'Base'." +msgstr "" +"Sie haben keine Berechtigung, einen Benutzer unterhalb dieser 'Basis' " +"anzulegen." + +#: plugins/admin/systems/terminal.tpl:9 +msgid "Terminal template" +msgstr "Terminal-Vorlage" + +#: plugins/admin/systems/terminal.tpl:11 +msgid "Terminal name" +msgstr "Terminalname" + +#: plugins/admin/systems/terminal.tpl:36 +#: plugins/admin/systems/workstation.tpl:36 +msgid "Mode" +msgstr "Modus" + +#: plugins/admin/systems/terminal.tpl:38 +#: plugins/admin/systems/workstation.tpl:38 +msgid "Select terminal mode" +msgstr "Wählen Sie den Terminal-Modus" + +#: plugins/admin/systems/terminal.tpl:52 +#: plugins/admin/systems/workstation.tpl:52 +msgid "Root server" +msgstr "Root-Server" + +#: plugins/admin/systems/terminal.tpl:54 +#: plugins/admin/systems/workstation.tpl:54 +msgid "Select NFS root filesystem to use" +msgstr "Wählen Sie das NFS-Root-Dateisystem" + +#: plugins/admin/systems/terminal.tpl:60 +#: plugins/admin/systems/workstation.tpl:60 +msgid "Swap server" +msgstr "Auslagerungs-Server" + +#: plugins/admin/systems/terminal.tpl:62 +#: plugins/admin/systems/workstation.tpl:62 +msgid "Choose NFS filesystem to place swap files on" +msgstr "" +"Wählen Sie das NFS-Dateisystem, in dem die Swap-Dateien abgelegt werden " +"sollen" + +#: plugins/admin/systems/terminal.tpl:74 +#: plugins/admin/systems/workstation.tpl:74 +msgid "Syslog server" +msgstr "Syslog-Server" + +#: plugins/admin/systems/terminal.tpl:76 +#: plugins/admin/systems/workstation.tpl:76 +msgid "Choose server to use for logging" +msgstr "Wählen Sie den Server, der für das Protokollieren genutzt werden soll" + +#: plugins/admin/systems/terminal.tpl:82 +#: plugins/admin/systems/workstation.tpl:82 +msgid "NTP server" +msgstr "Zeit-Server" + +#: plugins/admin/systems/terminal.tpl:84 +#: plugins/admin/systems/workstation.tpl:84 +msgid "Choose server to use for synchronizing time" +msgstr "" +"Wählen Sie den Server, der zur Zeit-Synchronisation genutzt werden soll" + +#: plugins/admin/systems/terminal.tpl:103 +#: plugins/admin/systems/workstation.tpl:103 +msgid "Select action to execute for this terminal" +msgstr "Wählen Sie die auszuführende Aktion für dieses Terminal" + +#: plugins/admin/systems/class_servDHCP.inc:32 +#, fuzzy +msgid "Remove DHCP service" +msgstr "Bild entfernen" + +#: plugins/admin/systems/class_servDHCP.inc:33 +#, fuzzy +msgid "" +"This server has DHCP features enabled. You can disable them by clicking " +"below." +msgstr "" +"Dieses Konto hat die Fax-Funtionen aktiviert. Sie können diese durch einen " +"Klick auf die untere Schaltfläche deaktivieren." + +#: plugins/admin/systems/class_servDHCP.inc:35 +#, fuzzy +msgid "Add DHCP service" +msgstr "SSH-Dienst" + +#: plugins/admin/systems/class_servDHCP.inc:36 +#, fuzzy +msgid "" +"This server has DHCP features disabled. You can enable them by clicking " +"below." +msgstr "" +"Aktuell hat dieses Konto keine Fax-Funktionen aktiviert. Sie können diese " +"durch einen Klick auf die Schaltfläche unten aktivieren." + +#: plugins/admin/systems/class_systemManagement.inc:32 +msgid "Systems" +msgstr "Systeme" + +#: plugins/admin/systems/class_systemManagement.inc:246 +msgid "You can't edit this object type yet!" +msgstr "Dieser Objekt-Typ kann momentan noch nicht bearbeitet werden!" + +#: plugins/admin/systems/class_systemManagement.inc:262 +msgid "Passwords entered as new and repeated do not match!" +msgstr "" +"Die Passworte, die Sie als 'Neues Passwort' und 'Wiederholung des neuen " +"Passwort' eingegeben haben sind nicht identisch!" + +#: plugins/admin/systems/class_systemManagement.inc:275 +msgid "You are not allowed to set this systems password!" +msgstr "Es Ihnen nicht erlaubt das Passwort für dieses Systems zu setzen!" + +#: plugins/admin/systems/class_systemManagement.inc:319 +#, fuzzy, php-format +msgid "You're about to delete all information about the component at '%s'." +msgstr "Sie sind dabei, alle Informationen über das Terminal '%s' zu löschen." + +#: plugins/admin/systems/class_systemManagement.inc:325 +#: plugins/admin/systems/class_systemManagement.inc:378 +#, fuzzy +msgid "You are not allowed to delete this component!" +msgstr "Es ist Ihnen nicht erlaubt, diesen Eintrag zu löschen!" + +#: plugins/admin/systems/class_systemManagement.inc:642 +msgid "New terminal" +msgstr "Neues Terminal" + +#: plugins/admin/systems/class_systemManagement.inc:645 +msgid "New workstation" +msgstr "Neue Arbeitsstation" + +#: plugins/admin/systems/class_systemManagement.inc:661 +msgid "Thin client template for" +msgstr "Thin-Client-Vorlage für" + +#: plugins/admin/systems/class_systemManagement.inc:673 +msgid "Workstation template for" +msgstr "Arbeitsstations-Vorlage für" + +#: plugins/admin/systems/class_workstationGeneric.inc:136 +msgid "This 'dn' has no workstation features." +msgstr "Diese 'dn' hat keine Arbeitsstationen-Erweiterungen." + +#: plugins/admin/systems/class_workstationGeneric.inc:220 +msgid "You have no permissions to create a workstation on this 'Base'." +msgstr "" +"Sie haben keine Berechtigung eine Arbeitsstation unter dieser 'Basis' " +"anzulegen." + +#: plugins/admin/systems/class_workstationGeneric.inc:224 +msgid "The required field 'Workstation name' is not set." +msgstr "Das benötigte Feld 'Arbeiststationsname' ist nicht gesetzt." + +#: plugins/admin/systems/printer.tpl:6 +msgid "Printer name" +msgstr "Druckername" + +#: plugins/admin/systems/printer.tpl:32 +msgid "Printer URL" +msgstr "Drucker URL" + +#: plugins/admin/systems/printer.tpl:36 +msgid "Path to PPD" +msgstr "Pfad zum PPD" + +#: plugins/admin/systems/class_servDNS.inc:32 +#, fuzzy +msgid "Remove DNS service" +msgstr "Bild entfernen" + +#: plugins/admin/systems/class_servDNS.inc:33 +#, fuzzy +msgid "" +"This server has DNS features enabled. You can disable them by clicking below." +msgstr "" +"Dieses Konto hat die Fax-Funtionen aktiviert. Sie können diese durch einen " +"Klick auf die untere Schaltfläche deaktivieren." + +#: plugins/admin/systems/class_servDNS.inc:35 +#, fuzzy +msgid "Add DNS service" +msgstr "SSH-Dienst" + +#: plugins/admin/systems/class_servDNS.inc:36 +#, fuzzy +msgid "" +"This server has DNS features disabled. You can enable them by clicking below." +msgstr "" +"Aktuell hat dieses Konto keine Fax-Funktionen aktiviert. Sie können diese " +"durch einen Klick auf die Schaltfläche unten aktivieren." + +#: plugins/admin/systems/class_servDB.inc:117 +#: plugins/admin/systems/class_servDB.inc:133 +#: plugins/admin/systems/class_servDB.inc:139 +#: plugins/admin/systems/class_servDB.inc:144 +#: plugins/admin/systems/class_servDB.inc:150 +#, fuzzy, php-format +msgid "The attribute '%s' is empty or contains invalid characters." +msgstr "Das Zeitlimit '%s' enthält ungültige Zeichen!" + +#: plugins/admin/systems/class_servDB.inc:123 +#, php-format +msgid "The imap connect string needs to be in the form '%s'." +msgstr "" + +#: plugins/admin/systems/class_servDB.inc:127 +msgid "The sieve port needs to be numeric." +msgstr "" + +#: plugins/admin/systems/workstation.tpl:9 +msgid "Workstation template" +msgstr "Arbeitsstations-Vorlage" + +#: plugins/admin/systems/workstation.tpl:11 +msgid "Workstation name" +msgstr "Arbeitsstationsname" + +#: plugins/admin/systems/servdb.tpl:1 +msgid "" +"This dialog keeps settings that are used and required by several components " +"within GOsa and are used to find out more about your servers. These settings " +"will be reloaded when you save this component." +msgstr "" + +#: plugins/admin/systems/servdb.tpl:10 +msgid "Kerberos kadmin access" +msgstr "" + +#: plugins/admin/systems/servdb.tpl:14 +#, fuzzy +msgid "Kerberos Realm" +msgstr "Kerberos" + +#: plugins/admin/systems/servdb.tpl:18 plugins/admin/systems/servdb.tpl:86 +#, fuzzy +msgid "Admin user" +msgstr "Domänen-Benutzer" + +#: plugins/admin/systems/servdb.tpl:30 +#, fuzzy +msgid "FAX database" +msgstr "Datum" + +#: plugins/admin/systems/servdb.tpl:34 +#, fuzzy +msgid "FAX DB user" +msgstr "Zeige FAX-Benutzer" + +#: plugins/admin/systems/servdb.tpl:46 +#, fuzzy +msgid "Asterisk management" +msgstr "Systemverwaltung" + +#: plugins/admin/systems/servdb.tpl:50 +msgid "Asterisk DB user" +msgstr "" + +#: plugins/admin/systems/servdb.tpl:58 +msgid "Country dial prefix" +msgstr "" + +#: plugins/admin/systems/servdb.tpl:62 +msgid "Local dial prefix" +msgstr "" + +#: plugins/admin/systems/servdb.tpl:74 +msgid "IMAP admin access" +msgstr "" + +#: plugins/admin/systems/servdb.tpl:78 +#, fuzzy +msgid "Server identifier" +msgstr "Hausbezeichnung" + +#: plugins/admin/systems/servdb.tpl:82 +#, fuzzy +msgid "Connect URL" +msgstr "Verbinden" + +#: plugins/admin/systems/servdb.tpl:95 +#, fuzzy +msgid "Sieve port" +msgstr "Server" + +#: plugins/admin/systems/servdb.tpl:104 +#, fuzzy +msgid "Logging database" +msgstr "Nutzerdatenbank der Organisation" + +#: plugins/admin/systems/servdb.tpl:108 +msgid "Logging DB user" +msgstr "" + +#: plugins/admin/systems/class_printGeneric.inc:56 +msgid "This 'dn' has no printer features." +msgstr "Diese 'dn' hat keine Drucker-Erweiterungen." + +#: plugins/admin/systems/class_printGeneric.inc:121 +msgid "You have no permissions to create a printer on this 'Base'." +msgstr "" +"Sie haben keine Berechtigung, einen Drucker unterhalb dieser 'Basis' " +"anzulegen." + +#: plugins/admin/systems/remove.tpl:7 +msgid "" +"This includes all system and setup informations. Please double check " +"if your really want to do this since there is no way for GOsa to get your " +"data back." +msgstr "" +"Dies umfasst alleSystem- und Setup-Informationen Bitte prüfen Sie " +"genau, da es keine Möglichkeit für GOsa gibt, die Daten zu restaurieren. " + +#: plugins/admin/systems/headpage.tpl:6 +msgid "List of systems" +msgstr "Liste der Systeme" + +#: plugins/admin/systems/headpage.tpl:29 +msgid "" +"Using this menu you can add, remove and change the properties of specific " +"systems. You can only add systems which have already been started once." +msgstr "" +"Mit diesem Menü können Sie Systeme hinzufügen, diese löschen oder die " +"Eigenschaften bestimmter Systeme verändern. Sie können nur Systeme " +"hinzufügen, die bereits einmal im Netz gestartet wurden." + +#: plugins/admin/systems/headpage.tpl:32 +msgid "" +"-Edit- will execute an assistant to aid you in changing the system " +"properties. -Delete- will ask before really deleting things from your LDAP." +msgstr "" +"Berarbeiten- startet einen Assistenten, der Sie bei der Änderung der " +"Eigenschaften eines Systems unterstützt. -Löschen- führt eine " +"Sicherheitsabfrage durch bevor der endgültige Löschvorgang erfolgt." + +#: plugins/admin/systems/headpage.tpl:46 +#: plugins/admin/ogroups/ogroup_objects.tpl:33 +msgid "Select to see servers" +msgstr "Wählen Sie dies um Server anzuzeigen" + +#: plugins/admin/systems/headpage.tpl:46 +#: plugins/admin/ogroups/ogroup_objects.tpl:33 +msgid "Show servers" +msgstr "Zeige Server" + +#: plugins/admin/systems/headpage.tpl:47 +#, fuzzy +msgid "Select to see Linux terminals" +msgstr "Wählen, um die 'Terminals' zu sehen" + +#: plugins/admin/systems/headpage.tpl:47 +#: plugins/admin/ogroups/ogroup_objects.tpl:35 +msgid "Show terminals" +msgstr "Zeige Terminals" + +#: plugins/admin/systems/headpage.tpl:48 +#, fuzzy +msgid "Select to see Linux workstations" +msgstr "Wählen, um die 'Arbeitsstationen' zu sehen" + +#: plugins/admin/systems/headpage.tpl:48 +#: plugins/admin/ogroups/ogroup_objects.tpl:34 +msgid "Show workstations" +msgstr "Zeige Arbeitsstationen" + +#: plugins/admin/systems/headpage.tpl:49 +msgid "Select to see MicroSoft Windows based workstations" +msgstr "Auswühlen um MicroSoft Windows Arbeitsstationen zu sehen" + +#: plugins/admin/systems/headpage.tpl:49 +msgid "Show windows based workstations" +msgstr "Zeige Windows basierte Arbeitsstationen" + +#: plugins/admin/systems/headpage.tpl:50 +msgid "Select to see network printers" +msgstr "Wählen, um die 'Netzwerkdrucker' zu sehen" + +#: plugins/admin/systems/headpage.tpl:50 +msgid "Show network printers" +msgstr "Zeige Netzwerk-Drucker" + +#: plugins/admin/systems/headpage.tpl:51 +msgid "Select to see VOIP phones" +msgstr "Wählen, um die 'VOIP Telefone' zu sehen" + +#: plugins/admin/systems/headpage.tpl:51 +#: plugins/admin/ogroups/ogroup_objects.tpl:37 +msgid "Show phones" +msgstr "Zeige Telefone" + +#: plugins/admin/systems/headpage.tpl:52 +#, fuzzy +msgid "Select to see network devices" +msgstr "Wählen, um die 'Netzwerkdrucker' zu sehen" + +#: plugins/admin/systems/headpage.tpl:52 +#, fuzzy +msgid "Show network devices" +msgstr "Netzwerk-Geräte" + +#: plugins/admin/systems/headpage.tpl:62 +msgid "Regular expression for matching system names" +msgstr "Regulärer Ausdruck zum Abgleich mit System-Namen" + +#: plugins/admin/systems/headpage.tpl:65 +msgid "Display terminal(s) of user" +msgstr "Zeige Terminal(s) des Benutzers" + +#: plugins/admin/systems/headpage.tpl:66 +msgid "User name of which terminal(s) are shown" +msgstr "Benutzername, dessen Terminal(s) gezeigt werden" + +#: plugins/admin/systems/service.tpl:4 +msgid "Keyboard" +msgstr "Tastatur" + +#: plugins/admin/systems/service.tpl:7 plugins/admin/systems/service.tpl:210 +msgid "Model" +msgstr "Modell" + +#: plugins/admin/systems/service.tpl:9 +msgid "Choose keyboard model" +msgstr "Wählen Sie das Tastatur-Modell" + +#: plugins/admin/systems/service.tpl:15 +msgid "Layout" +msgstr "Layout" + +#: plugins/admin/systems/service.tpl:17 +msgid "Choose keyboard layout" +msgstr "Wählen Sie das Tastatur-Layout" + +#: plugins/admin/systems/service.tpl:23 +msgid "Variant" +msgstr "Variante" + +#: plugins/admin/systems/service.tpl:25 +msgid "Choose keyboard variant" +msgstr "Wählen Sie die Tastatur-Variante" + +#: plugins/admin/systems/service.tpl:39 +msgid "Mouse" +msgstr "Maus" + +#: plugins/admin/systems/service.tpl:44 +msgid "Choose mouse type" +msgstr "Wählen Sie den Maus-Typ" + +#: plugins/admin/systems/service.tpl:50 +msgid "Port" +msgstr "Anschluss" + +#: plugins/admin/systems/service.tpl:52 +msgid "Choose mouse port" +msgstr "Wählen Sie den Maus-Port" + +#: plugins/admin/systems/service.tpl:66 +#: plugins/gofon/phoneaccount/generic.tpl:5 +msgid "Telephone hardware" +msgstr "Telefon Hardware" + +#: plugins/admin/systems/service.tpl:69 +#: plugins/gofon/phoneaccount/generic.tpl:9 +msgid "Telephone" +msgstr "Telefon" + +#: plugins/admin/systems/service.tpl:86 +msgid "Driver" +msgstr "Treiber" + +#: plugins/admin/systems/service.tpl:88 +msgid "Choose graphic driver that is needed by the installed graphic board" +msgstr "" +"Wählen Sie den Treiber, der von der installierten Grafikkarte benötigt wird." + +#: plugins/admin/systems/service.tpl:94 +msgid "Resolution" +msgstr "Auflösung" + +#: plugins/admin/systems/service.tpl:96 +msgid "Choose screen resolution used in graphic mode" +msgstr "Wählen Sie die Auflösung, die im Grafik-Modus genutzt wird" + +#: plugins/admin/systems/service.tpl:102 +msgid "Color depth" +msgstr "Farbtiefe" + +#: plugins/admin/systems/service.tpl:104 +msgid "Choose colordepth used in graphic mode" +msgstr "Wählen Sie die Farbtiefe, die im Grafikmodus genutzt wird" + +#: plugins/admin/systems/service.tpl:117 +msgid "Display device" +msgstr "Anzeige Gerät" + +#: plugins/admin/systems/service.tpl:124 +msgid "HSync" +msgstr "HSync" + +#: plugins/admin/systems/service.tpl:126 +msgid "Horizontal refresh frequency for installed monitor" +msgstr "Horizontale Wiederholrate für den installierten Monitor" + +#: plugins/admin/systems/service.tpl:129 +msgid "VSync" +msgstr "VSync" + +#: plugins/admin/systems/service.tpl:131 +msgid "Vertical refresh frequency for installed monitor" +msgstr "Vertikale Wiederholrate für den installierten Monitor" + +#: plugins/admin/systems/service.tpl:141 +msgid "Remote desktop" +msgstr "Entfernte Arbeitsflächen" + +#: plugins/admin/systems/service.tpl:145 +msgid "Connect method" +msgstr "Verbindungsmethode" + +#: plugins/admin/systems/service.tpl:147 +msgid "Choose method to connect to terminal server" +msgstr "Wählen Sie die Methoder der Anbindung an den Terminalserver" + +#: plugins/admin/systems/service.tpl:154 +msgid "Terminal server" +msgstr "Terminal-Server" + +#: plugins/admin/systems/service.tpl:156 +msgid "Select specific terminal server to use" +msgstr "Wählen Sie einen bestimmten Terminserver" + +#: plugins/admin/systems/service.tpl:163 +msgid "Font server" +msgstr "Schriften-Server" + +#: plugins/admin/systems/service.tpl:165 +msgid "Select specific font server to use" +msgstr "Wählen Sie einen bestimmten Schriften-Server" + +#: plugins/admin/systems/service.tpl:181 +msgid "Print device" +msgstr "Drucker" + +#: plugins/admin/systems/service.tpl:182 +msgid "Select to start IPP based printing service on terminal" +msgstr "Auswählen, um auf dem Terminal IPP basierte Druckdienste zu starten" + +#: plugins/admin/systems/service.tpl:183 +msgid "Provide print services" +msgstr "Druckdienste bereitstellen" + +#: plugins/admin/systems/service.tpl:189 +msgid "Spool server" +msgstr "Spool-Server" + +#: plugins/admin/systems/service.tpl:191 +msgid "Select NFS filesystem to place spool files on" +msgstr "" +"Wählen Sie das NFS-Dateisystem, in dem die Spool-Dateien abgelegt werden" + +#: plugins/admin/systems/service.tpl:203 +msgid "Scan device" +msgstr "Scanner" + +#: plugins/admin/systems/service.tpl:204 +msgid "Select to start SANE scan service on terminal" +msgstr "Wählen, um den SANE Scanner-Dienst auf dem Terminal zu starten" + +#: plugins/admin/systems/service.tpl:205 +msgid "Provide scan services" +msgstr "Bilderfassungsdienste bereitstellen" + +#: plugins/admin/systems/service.tpl:212 +msgid "Select scanner driver to use" +msgstr "Wählen Sie den Scanner-Treiber, der benutzt werden soll" + +#: plugins/admin/systems/startup.tpl:1 +msgid "Boot parameters" +msgstr "Boot-Parameter" + +#: plugins/admin/systems/startup.tpl:8 +msgid "LDAP server" +msgstr "LDAP-Server" + +#: plugins/admin/systems/startup.tpl:10 +msgid "Choose LDAP server to use for accounts and terminal management" +msgstr "" +"Wählen Sie den LDAP-Server, der für die Verwaltung von Benutzerkonten und " +"Terminals genutzt wird" + +#: plugins/admin/systems/startup.tpl:16 +msgid "Boot kernel" +msgstr "Boot-Kernel" + +#: plugins/admin/systems/startup.tpl:18 +msgid "Enter the filename of the kernel to use" +msgstr "Geben Sie den Dateinamen des Kernels ein, der genutzt werden soll" + +#: plugins/admin/systems/startup.tpl:21 +msgid "Custom options" +msgstr "Angepasste Optionen" + +#: plugins/admin/systems/startup.tpl:23 +msgid "" +"Enter any parameters that should be passed to the kernel as append line " +"during bootup" +msgstr "" +"Geben Sie die Parameter ein, die dem Kernel beim Starten übergeben werden " +"sollen" + +#: plugins/admin/systems/startup.tpl:34 +msgid "Select if terminal supports graphical startup with progress bar" +msgstr "" +"Wählen, wenn das Terminal den grafischen Startvorgang mit Fortschrittsbalken " +"unterstützt" + +#: plugins/admin/systems/startup.tpl:35 +msgid "use graphical bootup" +msgstr "grafisches Booten nutzen" + +#: plugins/admin/systems/startup.tpl:37 +msgid "Select if terminal should boot in text mode" +msgstr "Wählen, wenn das Terminal im Textmodus starten soll" + +#: plugins/admin/systems/startup.tpl:38 +msgid "use standard linux textual bootup" +msgstr "standard Textmodus nutzen" + +#: plugins/admin/systems/startup.tpl:40 +msgid "Select to get more verbose output during startup" +msgstr "Wählen, um ausführlichere Informationen während des Starts zu erhalten" + +#: plugins/admin/systems/startup.tpl:41 +msgid "use debug mode for startup" +msgstr "benutze Fehlersuch-Modus" + +#: plugins/admin/systems/startup.tpl:52 +msgid "Kernel modules (format: name parameters)" +msgstr "Kernel-Module (Format: Name Parameter)" + +#: plugins/admin/systems/startup.tpl:54 +msgid "Add additional modules to load on startup" +msgstr "Zusätzliche Module hinzufügen, die während des Starts geladen werden" + +#: plugins/admin/systems/startup.tpl:65 +msgid "Automount devices (format: complete autofs entry)" +msgstr "Automount Geräte (Format: kompletter autofs-Eintrag)" + +#: plugins/admin/systems/startup.tpl:67 +msgid "Add additional automount entries" +msgstr "Zusätzliche \"Automount-Einträge\" hinzufügen" + +#: plugins/admin/systems/startup.tpl:84 +msgid "Additional fstab entries" +msgstr "Zusätzliche fstab-Einträge" + +#: plugins/admin/systems/startup.tpl:86 +msgid "Add additional filesystems to be mounted during startup" +msgstr "" +"Zusätzliche Dateisysteme hinzufügen, die während des Starts gemountet werden" + +#: plugins/admin/systems/password.tpl:2 +msgid "" +"To change the terminal root password use the fields below. The changes take " +"effect during next reboot. Please memorize the new password, because the you " +"would't be able to log in. Leave fields blank for password inheritance " +"from default entries." +msgstr "" +"Um das Terminal Verwalter-Passwort zu ändern, benutzen Sie die unteren " +"Felder. Die Veränderungen werden während des nächsten Starts des Terminals " +"wirksam. Bitte merken Sie sich dieses Passwort, da Sie sonst nicht in der " +"Lage sein werden, sich am entsprechenden System anzumelden. Lassen Sie " +"das Feld leer, um das Passwort von den Standard-Einstellungen zu übernehmen." +"" + +#: plugins/admin/systems/password.tpl:6 +msgid "Changing the password impinges on authentification only." +msgstr "" +"Das Ändern des Passwortes wirkt sich nur auf die Authentifizierung aus." + +#: plugins/admin/systems/chooser.tpl:1 +msgid "Choose the kind of system component you want to create" +msgstr "Wählen Sie die Art der System-Komponente die Sie anlegen möchten" + +#: plugins/admin/systems/chooser.tpl:4 +msgid "" +"Linux terminals and workstations are autocreated on bootup. For this reason " +"you're only be able to create templates for a specific tree. Servers are " +"normally automatically added too, but in some special cases you may need to " +"create a faked server entry to provide GOsa with some informations. Other " +"network components may be used for Nagios setups to create component " +"dependencies." +msgstr "" +"Linux Terminals und Arbeitsstationen werden beim Systemstart automatisch " +"hinzugefügt. Aus diesem Grund können Sie für diese Systemtypen nur Vorlagen " +"für einen Unterbaum anelgen. Server werden ebenfalls automatisch " +"hinzugefügt, in einigen Fällen benötigen Sie Pseudo-Einträge um GOsa mit " +"benötigten Informationen zu versorgen. Weitere Netzwerk-Komponenten können z." +"B. für Nagios Umgebungen genutzt werden um die Abhängigkeiten aufzulösen." + +#: plugins/admin/systems/chooser.tpl:7 +msgid "Linux thin client template" +msgstr "Linux Thin-Client Vorlage" + +#: plugins/admin/systems/chooser.tpl:8 +msgid "Linux workstation template" +msgstr "Linux Arbeitsstations-Vorlage" + +#: plugins/admin/systems/chooser.tpl:9 +msgid "Linux Server" +msgstr "Linux Server" + +#: plugins/admin/systems/chooser.tpl:10 +msgid "Windows workstation" +msgstr "Windows Arbeitsstation" + +#: plugins/admin/systems/chooser.tpl:11 +msgid "Network printer" +msgstr "Netzwerk-Drucker" + +#: plugins/admin/systems/chooser.tpl:13 +msgid "Other network component" +msgstr "Andere Netzwerk-Komponente" + +#: plugins/admin/systems/chooser.tpl:16 +msgid "Create" +msgstr "Anlegen" + +#: plugins/admin/systems/class_phoneGeneric.inc:47 +msgid "This 'dn' has no phone features." +msgstr "Diese 'dn' hat keine Telefon-Erweiterungen." + +#: plugins/admin/systems/class_phoneGeneric.inc:118 +msgid "You have no permissions to create a phone on this 'Base'." +msgstr "" +"Sie haben keine Berechtigung, ein Telefon unterhalb dieser 'Basis' anzulegen." + +#: plugins/admin/systems/class_componentGeneric.inc:47 +#: plugins/admin/systems/class_wingeneric.inc:85 +#, fuzzy +msgid "This 'dn' has no network features." +msgstr "Diese 'dn' hat keine Drucker-Erweiterungen." + +#: plugins/admin/systems/class_componentGeneric.inc:115 +#: plugins/admin/systems/class_wingeneric.inc:155 +#, fuzzy +msgid "You have no permissions to create a component on this 'Base'." +msgstr "" +"Sie haben keine Berechtigung, ein Telefon unterhalb dieser 'Basis' anzulegen." + +#: plugins/admin/systems/component.tpl:6 +#, fuzzy +msgid "Device name" +msgstr "Server" + +#: plugins/admin/systems/wingeneric.tpl:6 +#, fuzzy +msgid "Machine name" +msgstr "Telefon Name" + +#: plugins/admin/ogroups/tabs_ogroups.inc:19 +#, fuzzy +msgid "Terminals" +msgstr "Terminals" + +#: plugins/admin/ogroups/ogroup_objects.tpl:6 +msgid "Select objects to add" +msgstr "Wählen Sie die hinzuzufügenden Objekte" + +#: plugins/admin/ogroups/ogroup_objects.tpl:29 +msgid "Select to see departments" +msgstr "Zeige Abteilungen" + +#: plugins/admin/ogroups/ogroup_objects.tpl:29 +msgid "Show departments" +msgstr "Zeige Abteilungen" + +#: plugins/admin/ogroups/ogroup_objects.tpl:30 +msgid "Select to see GOsa accounts" +msgstr "Wählen, um GOsa-Konten zu sehen" + +#: plugins/admin/ogroups/ogroup_objects.tpl:30 +msgid "Show people" +msgstr "Zeige Personen" + +#: plugins/admin/ogroups/ogroup_objects.tpl:31 +msgid "Select to see GOsa groups" +msgstr "Wählen, um GOsa Gruppen zu sehen" + +#: plugins/admin/ogroups/ogroup_objects.tpl:31 +msgid "Show groups" +msgstr "Zeige Gruppen" + +#: plugins/admin/ogroups/ogroup_objects.tpl:32 +msgid "Select to see applications" +msgstr "Wählen, um Anwendungen zu sehen" + +#: plugins/admin/ogroups/ogroup_objects.tpl:32 +msgid "Show applications" +msgstr "Zeige Anwendungen" + +#: plugins/admin/ogroups/ogroup_objects.tpl:34 +msgid "Select to see workstations" +msgstr "Wählen, um die 'Arbeitsstationen' zu sehen" + +#: plugins/admin/ogroups/ogroup_objects.tpl:35 +msgid "Select to see terminals" +msgstr "Wählen, um die 'Terminals' zu sehen" + +#: plugins/admin/ogroups/ogroup_objects.tpl:36 +msgid "Select to see printers" +msgstr "Wählen, um die 'Netzwerkdrucker' zu sehen" + +#: plugins/admin/ogroups/ogroup_objects.tpl:36 +msgid "Show printers" +msgstr "Zeige Netzwerk-Drucker" + +#: plugins/admin/ogroups/ogroup_objects.tpl:37 +msgid "Select to see phones" +msgstr "Wählen, um die 'VOIP Telefone' zu sehen" + +#: plugins/admin/ogroups/ogroup_objects.tpl:40 +msgid "Display objects of department" +msgstr "Zeige die Objekte der Abteilung" + +#: plugins/admin/ogroups/ogroup_objects.tpl:46 +msgid "Display objects matching" +msgstr "Zeige die Objekte auf die das folgendes passt" + +#: plugins/admin/ogroups/ogroup_objects.tpl:47 +msgid "Regular expression for matching object names" +msgstr "Regulärer Ausdruck zum Abgleich mit Objekt-Namen" + +#: plugins/admin/ogroups/termgroup.tpl:1 +msgid "" +"All actions you choose here influence all machines in this object " +"group. Be aware that rebooting machines may not make people happy who are " +"currently working at these machines." +msgstr "" + +#: plugins/admin/ogroups/termgroup.tpl:7 +#, fuzzy +msgid "Select action to execute for this group of terminals" +msgstr "Wählen Sie die auszuführende Aktion für dieses Terminal" + +#: plugins/admin/ogroups/class_ogroup.inc:91 +msgid "This 'dn' is no object group." +msgstr "Diese 'dn' hat keine Objektgruppenerweiterungen." + +#: plugins/admin/ogroups/class_ogroup.inc:204 +msgid "too many different objects!" +msgstr "zu viele unterschiedliche Objekte!" + +#: plugins/admin/ogroups/class_ogroup.inc:206 +msgid "users" +msgstr "Benutzer" + +#: plugins/admin/ogroups/class_ogroup.inc:207 +msgid "groups" +msgstr "Gruppen" + +#: plugins/admin/ogroups/class_ogroup.inc:208 +msgid "applications" +msgstr "Anwendungen" + +#: plugins/admin/ogroups/class_ogroup.inc:209 +msgid "departments" +msgstr "Abteilungen" + +#: plugins/admin/ogroups/class_ogroup.inc:210 +msgid "servers" +msgstr "Server" + +#: plugins/admin/ogroups/class_ogroup.inc:211 +msgid "workstations" +msgstr "Arbeitsstationen" + +#: plugins/admin/ogroups/class_ogroup.inc:212 +msgid "terminals" +msgstr "Terminals" + +#: plugins/admin/ogroups/class_ogroup.inc:213 +msgid "phones" +msgstr "Telefone" + +#: plugins/admin/ogroups/class_ogroup.inc:214 +msgid "printers" +msgstr "Drucker" + +#: plugins/admin/ogroups/class_ogroup.inc:221 +msgid "and" +msgstr "und" + +#: plugins/admin/ogroups/class_ogroup.inc:363 +msgid "Non existing dn: " +msgstr "Unbekannte dn: " + +#: plugins/admin/ogroups/class_ogroup.inc:494 +msgid "Object groups need at least one member!" +msgstr "Objektgruppen sollten mindestens ein Mitglied haben!" + +#: plugins/admin/ogroups/class_ogroup.inc:499 +msgid "You can combine two different object types at maximum only!" +msgstr "" +"Sie können maximal zwei verschiedene Objekttypen miteinander kombinieren!" + +#: plugins/admin/ogroups/main.inc:34 plugins/admin/ogroups/main.inc:39 +#: plugins/admin/ogroups/class_ogroupManagement.inc:25 +msgid "Object groups" +msgstr "Objektgruppen" + +#: plugins/admin/ogroups/class_ogroupManagement.inc:41 +msgid "UNIX accounts" +msgstr "Unix-Konten" + +#: plugins/admin/ogroups/class_ogroupManagement.inc:45 +msgid "Servers" +msgstr "Server" + +#: plugins/admin/ogroups/class_ogroupManagement.inc:46 +msgid "Thin Clients" +msgstr "Thin Clients" + +#: plugins/admin/ogroups/class_ogroupManagement.inc:47 +msgid "Workstations" +msgstr "Workstations" + +#: plugins/admin/ogroups/class_ogroupManagement.inc:49 +#: plugins/generic/references/class_reference.inc:52 +msgid "Printer" +msgstr "Drucker" + +#: plugins/admin/ogroups/class_ogroupManagement.inc:153 +#, php-format +msgid "You're about to delete the object group '%s'." +msgstr "Sie sind dabei die Objektgruppe '%s' zu löschen." + +#: plugins/admin/ogroups/class_ogroupManagement.inc:159 +#: plugins/admin/ogroups/class_ogroupManagement.inc:185 +msgid "You are not allowed to delete this object group!" +msgstr "Es ist Ihnen nicht erlaubt, diese Objektgruppe zu löschen!" + +#: plugins/admin/ogroups/generic.tpl:9 +msgid "Name of the group" +msgstr "Name der Gruppe" + +#: plugins/admin/ogroups/generic.tpl:32 +msgid "Member objects" +msgstr "Zusammengefasste Objekte" + +#: plugins/admin/ogroups/remove.tpl:7 +msgid "" +"Please double check if you really want to do this since there is no way for " +"GOsa to get your data back." +msgstr "" +"Bitte überprüfen Sie genau was Sie tun, weil GOsa keine Chance hat die Daten " +"wiederherzustellen." + +#: plugins/admin/ogroups/headpage.tpl:46 +msgid "Show empty groups" +msgstr "Zeige leere Gruppen" + +#: plugins/admin/ogroups/headpage.tpl:47 +msgid "Show groups containing users" +msgstr "Zeige Gruppen mit Benutzern" + +#: plugins/admin/ogroups/headpage.tpl:48 +msgid "Show groups containing groups" +msgstr "Zeige Gruppen mit Gruppen" + +#: plugins/admin/ogroups/headpage.tpl:49 +msgid "Show groups containing applications" +msgstr "Zeige Gruppen mit Applikationen" + +#: plugins/admin/ogroups/headpage.tpl:50 +msgid "Show groups containing departments" +msgstr "Zeige Gruppen mit Abteilungen" + +#: plugins/admin/ogroups/headpage.tpl:51 +msgid "Show groups containing servers" +msgstr "Zeige Gruppen mit Servern" + +#: plugins/admin/ogroups/headpage.tpl:52 +msgid "Show groups containing workstations" +msgstr "Zeige Gruppen mit Arbeitsstationen" + +#: plugins/admin/ogroups/headpage.tpl:53 +msgid "Show groups containing terminals" +msgstr "Zeige Gruppen mit Terminals" + +#: plugins/admin/ogroups/headpage.tpl:54 +msgid "Show groups containing printers" +msgstr "Zeige Gruppen mit Druckern" + +#: plugins/gofon/phoneaccount/main.inc:120 +msgid "Phone settings" +msgstr "Telefon-Einstellungen" + +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:114 +msgid "This account has no phone extensions." +msgstr "Dieses Konto hat keine Telefon-Erweiterungen." + +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:124 +msgid "Remove phone account" +msgstr "Telefon-Konto entfernen" + +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:125 +msgid "" +"This account has phone features enabled. You can disable them by clicking " +"below." +msgstr "" +"Dieser Benutzer hat die Telefon-Eigenschaften aktiviert. Sie können diese " +"durch einen Klick auf die untere Schaltfläche deaktivieren." + +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:127 +msgid "Create phone account" +msgstr "Telefon-Konto erstellen" + +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:128 +msgid "" +"This account has phone features disabled. You can enable them by clicking " +"below." +msgstr "" +"Dieses Konto hat keine gültigen Telefon-Erweiterungen. Sie können diese " +"durch einen Klick auf die untere Schaltfläche aktivieren." + +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:140 +msgid "Please enter a valid phone number!" +msgstr "Bitte geben Sie eine gültige Telefonnummer ein" + +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:176 +msgid "Choose your private phone" +msgstr "Wählen Sie Ihr privates Telefon" + +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:281 +#, php-format +msgid "You need to specify at least one phone number!" +msgstr "Bitte geben Sie mindestens eine Telefonnummer an!" + +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:295 +#, php-format +msgid "The number '%s' is no valid phone number!" +msgstr "Die Nummer '%s' ist keine gültige Telefonnummer!" + +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:298 +#, php-format +msgid "The timeout '%s' contains invalid characters!" +msgstr "Das Zeitlimit '%s' enthält ungültige Zeichen!" + +#: plugins/gofon/phoneaccount/generic.tpl:16 +msgid "Answering machine" +msgstr "Anrufbeantworter" + +#: plugins/gofon/phoneaccount/generic.tpl:22 +#: plugins/gofon/phoneaccount/generic.tpl:25 +msgid "Deliver missed calls as mail" +msgstr "Verpasste Anrufe als EMail zustellen" + +#: plugins/gofon/phoneaccount/generic.tpl:39 +msgid "Phone numbers" +msgstr "Telefonnummern" + +#: plugins/gofon/phoneaccount/generic.tpl:55 +msgid "Forward calls to" +msgstr "Anrufe weiterleiten an" + +#: plugins/gofon/phoneaccount/generic.tpl:59 +msgid "Phone number" +msgstr "Telefonnummer" + +#: plugins/gofon/phoneaccount/generic.tpl:59 +msgid "Timeout (s)" +msgstr "Zeitlimit (s)" + +#: plugins/gofon/reports/class_fonreport.inc:6 +msgid "Phone Reports" +msgstr "Telefon-Berichte" + +#: plugins/gofon/reports/class_fonreport.inc:138 +msgid "Can't connect to phone database, no reports can be shown!" +msgstr "" +"Die Telefon-Datenbank kann nicht erreicht werden. Es können keine Berichte " +"angezeigt werden!" + +#: plugins/gofon/reports/class_fonreport.inc:142 +msgid "Can't select phone database for report generation!" +msgstr "" +"Die Telefon-Datenbank kann bezüglich der Berichterstellung nicht ausgewählt " +"werden!" + +#: plugins/gofon/reports/class_fonreport.inc:151 +msgid "Query for phone database failed!" +msgstr "Die Anfrage zur Telefon-Datenbank ist fehlgeschlagen!" + +#: plugins/gofon/reports/contents.tpl:31 +msgid "Source" +msgstr "Quelle" + +#: plugins/gofon/reports/contents.tpl:32 +msgid "Destination" +msgstr "Ziel" + +#: plugins/gofon/reports/contents.tpl:33 +msgid "Channel" +msgstr "Kanal" + +#: plugins/gofon/reports/contents.tpl:34 +#: plugins/generic/references/class_reference.inc:42 +msgid "Application" +msgstr "Anwendung" + +#: plugins/gofon/reports/contents.tpl:36 +msgid "Duration" +msgstr "Dauer" + +#: plugins/gofon/reports/main.inc:5 +msgid "Phone reports" +msgstr "Telefon-Berichte" + +#: plugins/generic/references/class_reference.inc:36 +msgid "Group" +msgstr "Gruppe" + +#: plugins/generic/references/class_reference.inc:46 +msgid "Thin Client" +msgstr "Thin Client" + +#: plugins/generic/references/class_reference.inc:48 +msgid "Workstation" +msgstr "Arbeitsstation" + +#: plugins/generic/references/class_reference.inc:50 +msgid "Object group" +msgstr "Objektgruppe" + +#: plugins/generic/references/contents.tpl:11 +msgid "Object name" +msgstr "Objektname" + +#: plugins/generic/references/contents.tpl:18 +msgid "This object has no relationship to other objects." +msgstr "Dieses Objekt hat keine Referenzen zu anderen Objekten." + +#: plugins/generic/welcome/welcome.tpl:4 +msgid "" +"This is the GOsa main screen. You can select your tasks from the menu on the " +"left, or by choosing one of the pictogramms below. All changes apply " +"directly to your companies LDAP-Server." +msgstr "" +"Dies ist die Hauptseite von GOsa. Wählen Sie die gewünschte Option aus dem " +"Menü zur linken oder durch die Auswahl eines Piktogrammes unten. Alle " +"Änderungen werden direkt in den LDAP-Server Ihres Unternehmens eingepflegt." + +#: plugins/generic/welcome/welcome.tpl:8 +msgid "" +"Use Sign out on the upper left to close the connection and Main to get back to the pictogram view." +msgstr "" +"Benutzen Sie Abmelden oben links, um die Arbeit mit GOsa zu beenden " +"und Hauptseite, um wieder in diese Ansicht zurückzugelangen." + +#: plugins/generic/welcome/welcome.tpl:15 +msgid "The GOsa team" +msgstr "Das GOsa Team" + +#: plugins/generic/welcome/main.inc:24 +#, php-format +msgid "Welcome %s!" +msgstr "Willkommen %s!" + +#: include/functions.inc:266 +#, php-format +msgid "Error when connecting the LDAP. Server said '%s'." +msgstr "Fehler beim Verbinden mit dem LDAP-Server. Die Meldung lautet '%s'." + +#: include/functions.inc:287 +#, php-format +msgid "User login failed. LDAP server said '%s'." +msgstr "Anmeldung des Nutzers ist fehlgeschlagen. Die Meldung war '%s'." + +#: include/functions.inc:307 +msgid "Username / UID is not unique. Please check your LDAP database." +msgstr "Die Kennung ist nicht eindeutig. Bitte prüfen Sie die LDAP-Datenbank." + +#: include/functions.inc:345 +msgid "" +"Error while adding a lock. Parameters are not set correctly, please check " +"the source!" +msgstr "" +"Fehler beim Anlegen eines Locks. Die Parameter sind nicht korrekt gesetzt!" + +#: include/functions.inc:355 +#, php-format +msgid "" +"Can't set locking information in LDAP database. Please check the 'config' " +"entry in gosa.conf! LDAP server says '%s'." +msgstr "" +"Die Sperr-Information in der LDAP-Datenbank kann nicht gesetzt werden. Bitte " +"überprüfen Sie den \"Config\" Eintrag in gosa.conf! Der LDAP-Server meldete " +"'%s'." + +#: include/functions.inc:370 +#, php-format +msgid "Adding a lock failed. LDAP server says '%s'." +msgstr "" +"Kann keine Sperr-Information anlegen. Die Meldung des LDAP-Servers war '%s'." + +#: include/functions.inc:396 +#, php-format +msgid "Removing a lock failed. LDAP server says '%s'." +msgstr "" +"Kann die Sperr-Information nicht entfernen. Die Meldung des LDAP-Servers war " +"'%s'." + +#: include/functions.inc:426 +msgid "" +"Getting the lock from LDAP failed. Parameters are not sed correctly, please " +"check the source!" +msgstr "" +"Es kann nicht geprüft werden, ob das Objekt gesperrt ist. Die Parameter sind " +"nicht korrekt!" + +#: include/functions.inc:436 +msgid "" +"Can't get locking information in LDAP database. Please check the 'config' " +"entry in gosa.conf!" +msgstr "" +"Die Sperr-Information kann nicht aus der LDAP-Datenbank ausgelesen werden. " +"Bitte prüfen Sie den \"Config\"-Eintrag in der gosa.conf!" + +#: include/functions.inc:444 +msgid "" +"Found multiple locks for object to be locked. This should not be possible - " +"cleaning up multiple references." +msgstr "" +"Mehrere Sperrungen für ein Objekt gefunden. Dies sollte nicht möglich sein, " +"bitte entfernen Sie mehrfache Referenzen." + +#: include/functions.inc:516 +#, php-format +msgid "The size limit of %d entries is exceed!" +msgstr "Die Größenbeschränkung von %d Einträgen ist überschritten!" + +#: include/functions.inc:518 +#, php-format +msgid "" +"Set the new size limit to %s and show me this message if the limit still " +"exceeds" +msgstr "" +"Verwende eine neue Größenbeschränkung von %s Einträgen und zeige diese " +"Meldung bei Überschreitung wieder an" + +#: include/functions.inc:530 +msgid "Configure" +msgstr "Einstellen" + +#: include/functions.inc:535 +msgid "incomplete" +msgstr "unvollständig" + +#: include/functions.inc:918 +#, php-format +msgid "" +"You're going to edit the LDAP entry '%s' which appears to be used by '%s'. " +"Please contact the person in order to clarify proceedings." +msgstr "" +"Sie versuchen den LDAP-Eintrag '%s' zu bearbeiten. Dieser Eintrag wird " +"gerade von '%s' benutzt. Bitte kontaktieren Sie diese Person, um das weitere " +"Vorgehen abzuklären." + +#: include/functions.inc:1017 +msgid "LDAP error:" +msgstr "LDAP Fehler:" + +#: include/functions.inc:1110 +msgid "" +"Warning: Can't set kerberos password. Your PHP version has no kerberos " +"support, password has not been changed." +msgstr "" +"Achtung: Das Kerberos-Passwort kann nicht gesetzt werden. Die von Ihnen " +"verwendete PHP-Version hat keine Unterstützung für Kerberos." + +#: include/functions.inc:1117 +msgid "Kerberos database communication failed!" +msgstr "Die Kommunikation mit der Kerberos-Datenbank ist fehlgeschlagen!" + +#: include/functions.inc:1123 +msgid "Changing password in kerberos database failed!" +msgstr "" +"Die Änderung des Passworts in der Kerberos-Datenbank ist fehlgeschlagen!" + +#: include/functions.inc:1132 +msgid "Unsupported password hash detected. Can't generate compatible password." +msgstr "" +"Es wurde ein nicht-unterstützter Passwort-Hash entdeckt. Es kann kein " +"passendes Passwort generiert werden." + +#: include/functions.inc:1172 +msgid "" +"Setting for SMBHASH in gosa.conf is incorrect! Can't change Samba password." +msgstr "" +"Die Einstellung 'SMBHASH' in /etc/gosa/gosa.conf ist nicht korrekt! Das " +"Samba-Passwort kann nicht geändert werden." + +#: include/functions.inc:1190 +#, php-format +msgid "Setting the password failed. LDAP server says '%s'." +msgstr "" +"Das Setzen des Passwortes ist fehlgeschlagen. Die Meldung vom LDAP-Server " +"war '%s'." + +#: include/functions.inc:1603 +msgid "*ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" +msgstr "*ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" + +#: include/class_mail-methods-cyrus.inc:44 +msgid "" +"Warning: IMAP Server cannot be reached! If you save this account, some mail " +"settings will not be stored on your server!" +msgstr "" +"Warnung: Der IMAP-Server kann nicht erreicht werden! Einige Mail-" +"Einstellungen werden nicht auf den Server übertragen!" + +#: include/class_mail-methods-cyrus.inc:107 +#, php-format +msgid "Can't create IMAP mailbox. Server says '%s'." +msgstr "Kann das IMAP-Postfach nicht anlegen. Der Server meldet '%s'." + +#: include/class_mail-methods-cyrus.inc:123 +#, php-format +msgid "Can't write IMAP quota. Server says '%s'." +msgstr "Kann die Quota-Einstellungen nicht sichern. Der Server meldete '%s'." + +#: include/class_mail-methods-cyrus.inc:134 +msgid "" +"Warning: imap_getacl is not implemented, wouldn't modify acl informations." +msgstr "" +"Achtung: Die PHP-Funktion 'imap_get_acl' ist nicht verfügbar -" +"Zugriffsinformationen werden nicht geändert." + +#: include/class_mail-methods-cyrus.inc:169 +msgid "Warning: imap_getacl is not available, can't get imap permissions!" +msgstr "" +"Achtung: Die PHP-Funktion imap_get_acl ist nicht verfügbar, die IMAP-" +"Berechtigungen können nicht gelesen werden!" + +#: include/class_mail-methods-cyrus.inc:191 +#, php-format +msgid "Can't remove IMAP mailbox. Server says '%s'." +msgstr "Kann das IMAP-Postfach nicht entfernen. Der Server meldete '%s'." + +#: include/class_mail-methods-cyrus.inc:219 +#, php-format +msgid "Can't log into SIEVE server. Server says '%s'." +msgstr "" +"Die Anmeldung am SIEVE-Server ist fehlgeschlagen. Die Meldung war '%s'." + +#: include/class_mail-methods-cyrus.inc:232 +#, php-format +msgid "Can't get sieve script. Server says '%s'." +msgstr "" +"Kann das aktive SIEVE-Skript nicht herunterladen. Die Meldung war '%s'." + +#: include/class_mail-methods-cyrus.inc:303 +#, php-format +msgid "Can't send sieve script. Server says '%s'." +msgstr "Kann das SIEVE-Skript nicht übertragen. Die Meldung war '%s'." + +#: include/class_mail-methods-cyrus.inc:307 +#, php-format +msgid "Can't activate GOsa sieve script. Server says '%s'." +msgstr "Kann das GOsa SIEVE-Skript nicht aktivieren. Die Meldung war '%s'." + +#: include/class_pluglist.inc:98 +msgid "" +"Your gosa.conf information has changed partly. Please convert it using the " +"contributed script fix_config.sh!" +msgstr "" +"Die Konfigurationsdatei gosa.conf hat sich teilweise geändert. Bitte " +"konvertieren Sie diese mit dem beigefügten Skript fix_config.sh!" + +#: include/class_pluglist.inc:113 ihtml/themes/altlinux/framework.tpl:13 +#: ihtml/themes/altlinux/framework.tpl:23 +#: ihtml/themes/default/framework.tpl:13 ihtml/themes/default/framework.tpl:23 +msgid "" +"You are currently editing a database entry. Do you want to dismiss the " +"changes?" +msgstr "" +"Sie bearbeiten gerade einen Datenbankeintrag. Sollen die Daten verworfen " +"werden?" + +#: include/setup_checks.inc:78 +msgid "Can't bind to LDAP. No schema check possible!" +msgstr "" +"Kann den LDAP-Server nicht erreichen: keine Überprüfung der Schemata möglich!" + +#: include/setup_checks.inc:87 include/setup_checks.inc:96 +msgid "Can't get schema information from server. No schema check possible!" +msgstr "" +"Kann die Schema-Informationen nicht vom Server beziehen: Keine Überprüfung " +"möglich!" + +#: include/setup_checks.inc:116 +#, php-format +msgid "" +"Optional objectclass '%s' required by plugin '%s' is not present in LDAP " +"setup" +msgstr "" +"Die optionale Objektklasse '%s' (benötigt vom Modul '%s') ist nicht in den " +"LDAP eingebunden" + +#: include/setup_checks.inc:119 +#, php-format +msgid "" +"Optional objectclass '%s' required by plugin '%s' does not have version %s" +msgstr "" +"Die optionale Objektklasse '%s' (benötigt vom Modul '%s') hat nicht die " +"Versionsnummer %s" + +#: include/setup_checks.inc:131 +#, php-format +msgid "Required objectclass '%s' is not present in LDAP setup" +msgstr "Die benötigte Objektklasse '%s' ist nicht in LDAP vorhanden" + +#: include/setup_checks.inc:134 +#, php-format +msgid "Required objectclass '%s' does not have version %s" +msgstr "Die benötigte Objektklasse '%s' hat nicht die Version %s" + +#: include/setup_checks.inc:142 +#, fuzzy +msgid "SAMBA 3 support disabled, no schema seems to be installed" +msgstr "" +"SAMBA 3.x Unterstützung wurde deaktiviert, kein passendes Schema installiert" + +#: include/setup_checks.inc:144 +msgid "" +"SAMBA 3 support enabledgosa+samba3.schema" +msgstr "" + +#: include/setup_checks.inc:147 +#, fuzzy +msgid "SAMBA 2 support disabled, no schema seems to be installed" +msgstr "" +"SAMBA 2.x Unterstützung wurde deaktiviert, kein passendes Schema installiert" + +#: include/setup_checks.inc:149 +msgid "SAMBA 2 support enabledsamba.schema" +msgstr "" + +#: include/setup_checks.inc:153 +#, fuzzy +msgid "Support for pureftp disabled, no schema seems to be installed" +msgstr "" +"Die Unterstützung für PureFTP wurde deaktiviert, das passende Schema ist " +"nicht installiert" + +#: include/setup_checks.inc:155 +msgid "" +"Support for pureftp enabledpureftpd.schema" +msgstr "" + +#: include/setup_checks.inc:158 +#, fuzzy +msgid "Support for WebDAV disabled, no schema seems to be installed" +msgstr "" +"Die Unterstützung für WebDAV wurde deaktiviert, das passende Schema ist " +"nicht installiert" + +#: include/setup_checks.inc:160 +msgid "" +"Support for WebDAV enabledgosa+samba3.schema" +msgstr "" + +#: include/setup_checks.inc:163 +#, fuzzy +msgid "" +"Support for phpgroupware disabled, no schema seems to be installed" +msgstr "" +"Die Unterstützung für PHPGroupware wurde deaktiviert, das passende Schema " +"ist nicht installiert" + +#: include/setup_checks.inc:165 +msgid "" +"Support for phpgroupware enabledphpgwaccount." +"schema" +msgstr "" + +#: include/setup_checks.inc:168 +#, fuzzy +msgid "Support for gofon disabled, no schema seems to be installed" +msgstr "" +"Die Unterstützung für goFon wurde deaktiviert, das passende Schema ist nicht " +"installiert" + +#: include/setup_checks.inc:170 +msgid "Support for gofon enabledgofon.schema" +msgstr "" + +#: include/setup_checks.inc:182 +msgid "OK" +msgstr "OK" + +#: include/setup_checks.inc:185 +msgid "Ignored" +msgstr "Ignoriert" + +#: include/setup_checks.inc:187 +msgid "Failed" +msgstr "Fehlgeschlagen" + +#: include/setup_checks.inc:203 +msgid "PHP setup inspection" +msgstr "Überprüfung des PHP-Setups" + +#: include/setup_checks.inc:204 +msgid "Checking for PHP version (>=4.1.0)" +msgstr "Prüfe auf eine PHP-Version (>=4.1.0)" + +#: include/setup_checks.inc:205 +msgid "" +"PHP must be of version 4.1.0 or above for some functions and known bugs in " +"PHP language." +msgstr "" +"PHP muß mindestens die Version 4.1.0 haben. GOsa verwendet einige " +"Funktionen, die in früheren Versionen fehlerhaft oder gar nicht " +"implementiert waren." + +#: include/setup_checks.inc:208 +msgid "Checking if register_globals is set to 'off'" +msgstr "Prüfe ob register_globals ausgeschaltet ist" + +#: include/setup_checks.inc:209 +msgid "" +"register_globals is a PHP mechanism to register all global varibales to be " +"accessible from scripts without changing the scope. This may be a security " +"risk. GOsa will run in both modes." +msgstr "" +"register_globals ist ein PHP-Mechanismus, welcher alle globalen Variablen " +"für Skripte direkt zugänglich macht. Dies kann ein Sicherheitsrisiko sein. " +"GOsa funktioniert mit beiden möglichen Einstellungen." + +#: include/setup_checks.inc:212 +msgid "Checking for ldap module" +msgstr "Suche LDAP-Modul" + +#: include/setup_checks.inc:213 +msgid "This is the main module used by GOsa and therefore really required." +msgstr "" +"GOsa benötigt dieses Modul für LDAP-Zugriffe, daher ist es unabkömmlich." + +#: include/setup_checks.inc:216 +msgid "Checking for gettext support" +msgstr "Prüfe auf gettext-Erweiterung" + +#: include/setup_checks.inc:217 +msgid "Gettext support is required for internationalized GOsa." +msgstr "" +"Gettext-Unterstützung wird für Übersetzungen benötigt (Anmerkung des " +"Übersetzers: Da Sie diese Meldung in deutsch lesen können, ist davon " +"auszugehen, daß ihr PHP gettext-fähig ist)." + +#: include/setup_checks.inc:219 +msgid "Checking for mhash module" +msgstr "Suche mhash-Modul" + +#: include/setup_checks.inc:220 +msgid "" +"To use SSHA encryption, you'll need this module. If you are just using crypt " +"or md5 encryption, ignore this message. GOsa will run without it." +msgstr "" +"Bei der Verwendung von speziellen Passwort-Verschlüsselungen (wie z.B. SSHA) " +"wird dieses Modul benötigt. GOsa funktioniert auch ohne dieses Modul." + +#: include/setup_checks.inc:223 +msgid "Checking for gd module" +msgstr "Suche gd-Modul" + +#: include/setup_checks.inc:224 +msgid "" +"GOsa needs this module for recalculating image sizes provided for users as " +"jpegPhoto." +msgstr "" +"GOsa benötigt dieses Modul um Größenveränderungen bei Bildern durchzuführen." + +#: include/setup_checks.inc:226 +msgid "Checking for imap module" +msgstr "Suche IMAP-Modul" + +#: include/setup_checks.inc:227 +msgid "" +"The IMAP module is needed to communicate with the IMAP server. It gets " +"status informations, creates and deletes mail users." +msgstr "" +"Das IMAP-Modul wird für die Kommunikation mit ihrem IMAP-Server benötigt. " +"Dort können Benutzer verwaltet und Statusinformationen bezogen werden." + +#: include/setup_checks.inc:229 +msgid "Checking for getacl in imap" +msgstr "Prüfe auf getacl im IMAP-Modul" + +#: include/setup_checks.inc:230 +msgid "" +"The getacl support is needed for shared folder permissions. The standard " +"IMAP module is not capable of reading acl's. You need a recend PHP version " +"for this feature." +msgstr "" +"Diese Funktion wird benötigt um Zugriffsrechte von Shared-Foldern zu " +"verwalten. Das normale IMAP-Modul unterstützt das Auslesen dieser " +"Zugriffsregeln nicht. Sie benötigen entweder ein angepasstes oder ein recht " +"aktuelles PHP um diese Funktion nutzen zu können." + +#: include/setup_checks.inc:232 +msgid "Checking for mysql module" +msgstr "Suche MySQL-Modul" + +#: include/setup_checks.inc:233 +msgid "MySQL support is needed for reading GOfax reports from databases." +msgstr "" +"Das MySQL-Modul wird benötigt um FAX-Berichte anzuzeigen und auszuwerten." + +#: include/setup_checks.inc:235 +msgid "Checking for cups module" +msgstr "Suche CUPS-Modul" + +#: include/setup_checks.inc:236 +msgid "" +"In order to read available printers from IPP protocol instead of printcap " +"files, you've to install the CUPS module." +msgstr "" +"Falls Sie eine Liste der verfügbaren Drucker über IPP auslesen möchten, " +"benötigen Sie dieses Modul. Anderenfalls wird die printcap-Datei ausgewertet." + +#: include/setup_checks.inc:238 +msgid "Checking for kadm5 module" +msgstr "Suche kadm5-Modul" + +#: include/setup_checks.inc:239 +msgid "" +"Managing users in kerberos requires the kadm5 module which is downloadable " +"via PEAR network." +msgstr "" +"Um Benutzer auch im Kerberos verwalten zu können, muß das kadm5-Modul " +"installiert sein. Sie können es über das PEAR-Netzwerk beziehen." + +#: include/setup_checks.inc:248 +msgid "Checking for some additional programms" +msgstr "Suche einige zusätzliche Programme" + +#: include/setup_checks.inc:257 +msgid "Checking for ImageMagick (>=5.4.0)" +msgstr "Suche nach ImageMagick (>=5.4.0)" + +#: include/setup_checks.inc:258 +msgid "" +"ImageMagick is used to convert user supplied images to fit the suggested " +"size and the unified JPEG format." +msgstr "" +"ImageMagick wird für die Konvertierung von hochgeladenen Bildern verwendet." + +#: include/setup_checks.inc:261 +#, fuzzy +msgid "Checking imagick module for PHP" +msgstr "Suche IMAP-Modul" + +#: include/setup_checks.inc:262 +#, fuzzy +msgid "" +"Imagick is used to convert user supplied images to fit the suggested size " +"and the unified JPEG format from PHP script." +msgstr "" +"ImageMagick wird für die Konvertierung von hochgeladenen Bildern verwendet." + +#: include/setup_checks.inc:269 +msgid "Checking for fping utility" +msgstr "Suche fping-Programm" + +#: include/setup_checks.inc:270 +msgid "" +"The fping utility is only used if you've got a thin client based terminal " +"environment running." +msgstr "" +"Fping wird benötigt, um den Status von Thin-Client basierenden Terminal zu " +"überwachen." + +#: include/setup_checks.inc:285 +msgid "Checking for a way to generate LM/NT password hashes" +msgstr "Suche einen Weg um LM/NT Passwort-Hashes zu generieren" + +#: include/setup_checks.inc:286 +msgid "" +"In order to use SAMBA 2/3, you've to install some additional packages to " +"generate password hashes." +msgstr "" +"Um SAMBA 2.x/3.x in Verbindung mit LDAP nutzen zu können, wird ein externes " +"Programm benötigt, welches die Passwort-Hashes generieren kann." + +#: include/class_plugin.inc:180 +msgid "This 'dn' has no account extensions." +msgstr "Diese 'dn' hat keine Nutzerkonten Erweiterungen." + +#: include/class_plugin.inc:185 +msgid "This is an empty plugin." +msgstr "Dies ist ein leeres Modul." + +#: include/class_plugin.inc:384 +#, php-format +msgid "" +"Command '%s', specified as POSTCREATE for plugin '%s' doesn't seem to exist." +msgstr "" +"Das in POSTCREATE angegebene Kommando '%s' (Modul '%s') scheint nicht zu " +"existieren." + +#: include/class_plugin.inc:410 +#, fuzzy, php-format +msgid "" +"Command '%s', specified as POSTMODIFY for plugin '%s' doesn't seem to exist." +msgstr "" +"Das in POSTREMOVE angegebene Kommando '%s' (Modul '%s') scheint nicht zu " +"existieren." + +#: include/class_plugin.inc:436 +#, php-format +msgid "" +"Command '%s', specified as POSTREMOVE for plugin '%s' doesn't seem to exist." +msgstr "" +"Das in POSTREMOVE angegebene Kommando '%s' (Modul '%s') scheint nicht zu " +"existieren." + +#: include/version.inc:15 +#, php-format +msgid "You are currently using GOsa version %s (CVS checkout from %s)" +msgstr "Sie nutzen momentan GOsa in der Version %s (CVS-Abzug vom %s)" + +#: include/class_config.inc:69 +#, php-format +msgid "XML error in gosa.conf: %s at line %d" +msgstr "XML-Fehler in der Datei gosa.conf: %s in Zeile %d" + +#: include/class_config.inc:195 html/index.php:138 +msgid "Can't bind to LDAP. Please contact the system administrator." +msgstr "" +"Kann den LDAP-Server nicht erreichen. Bitte benachrichtigen Sie den " +"Administrator." + +#: include/class_config.inc:426 +msgid "SID and/or RIDBASE missing in your configuration!" +msgstr "SID und/oder RIDBASE fehlen in der Konfiguration!" + +#: include/class_ldap.inc:429 +#, php-format +msgid "" +"Autocreation of type '%s' is currently not supported. Please report to the " +"GOsa team." +msgstr "" +"Das automatische Erzeugen des Objekt-Typs '%s' wird momentan nicht " +"unterstützt. Bitte melden Sie dies an das Entwicklerteam." + +#: include/class_ldap.inc:664 +#, php-format +msgid "" +"This is not a valid DN: '%s'. A block for import should begin with 'dn: ...' " +"in line %s" +msgstr "" + +#: include/class_ldap.inc:680 +#, php-format +msgid "The dn: '%s' (from line %s) already exists in the LDAP database." +msgstr "" + +#: include/class_ldap.inc:695 +#, php-format +msgid "Error while importing dn: '%s', please check your LDIF from line %s on!" +msgstr "" + +#: html/getfax.php:53 +msgid "Could not connect to database server!" +msgstr "Die SQL-Datenbank kann nicht erreicht werden!" + +#: html/getfax.php:55 +msgid "Could not select database!" +msgstr "Die angegebene Datenbank kann nicht ausgewählt werden." + +#: html/getfax.php:60 html/getfax.php:68 +msgid "Database query failed!" +msgstr "Die Datenbankabfrage ist fehlgeschlagen!" + +#: html/getvcard.php:36 +msgid "Error: getcvard.php needs a parameter to export a vcard!" +msgstr "" +"Fehler: getvcard.php benötigt einen Parameter um eine vcard zu exportieren!" + +#: html/setup.php:141 html/index.php:75 +#, php-format +msgid "Directory '%s' specified as compile directory is not accessable!" +msgstr "" +"Auf das als Compile-Verzeichnis angegegebene Verzeichnis '%s' kann nicht " +"zugegriffen werden!" + +#: html/setup.php:207 +msgid "You've to specify an ldap server before continuing!" +msgstr "Sie müssen einen LDAP-Server angeben um fortzufahren!" + +#: html/setup.php:216 +msgid "" +"Can't connect to the specified LDAP server! Please make sure that is " +"reachable for GOsa." +msgstr "" +"Kann den angegebenen LDAP-Server nicht erreichen! Bitte stellen Sie sicher, " +"dass er für GOsa erreichbar ist." + +#: html/setup.php:224 +msgid "" +"Can't bind to the specified LDAP server! Please make sure that is reachable " +"for GOsa." +msgstr "" +"Die Anmeldung am LDAP-Server ist fehlgeschlagen. Bitte stellen Sie sicher, " +"dass der Server für GOsa erreichbar ist." + +#: html/setup.php:268 +#, php-format +msgid "" +"You're missing the required attribute '%s' from this formular. Please " +"complete!" +msgstr "" +"Das Attribut '%s' ist in diesem Formular nicht angegeben. Bitte " +"vervollständigen Sie Ihre Eingaben!" + +#: html/setup.php:284 +#, php-format +msgid "Can't log into LDAP server. Reason was: %s." +msgstr "Die Anmeldung am LDAP-Server ist fehlgeschlagen. Die Meldung war '%s'." + +#: html/setup.php:328 +msgid "" +"No configuration found! Please save the generated one and place it in the " +"suggested directory." +msgstr "" +"Keine Konfiguration gefunden! Bitte speichern Sie die soeben erstellte " +"Datei an im vorgegebenen Verzeichnis." + +#: html/setup.php:337 +msgid "Config file found, but permissions are not secure. Please fix!" +msgstr "" +"Die Konfigurationsdatei wurde gefunden, die Zugriffsrechte sind allerdings " +"nicht korrekt. Bitte korrigieren Sie dies!" + +#: html/main.php:96 +msgid "" +"Register globals is on. GOsa will refuse to login unless this is fixed by an " +"administrator." +msgstr "" +"'Register globals' ist im PHP aktiviert. GOsa läßt keine Anmeldung zu, bis " +"dies von einem Administrator behoben wurde." + +#: html/main.php:139 +msgid "Warning: memory is getting low - please increase the memory_limit!" +msgstr "" +"Achtung: die Speichernutzung ist zu hoch - bitte erhöhen Sie das " +"memory_limit!" + +#: html/main.php:257 +#, php-format +msgid "Can't find any plugin definitions for plugin '%s'!" +msgstr "Es kann kein Plugin für die Definition '%s' gefunden werden!" + +#: html/index.php:53 +#, php-format +msgid "GOsa configuration %s/gosa.conf is not readable. Aborted." +msgstr "Die Konfigurationsdatei %s/gosa.conf ist nicht lesbar. Abgebrochen." + +#: html/index.php:156 +msgid "" +"You're missing an administrative account for GOsa, you'll not be able to " +"administrate anything!" +msgstr "" +"In ihrem Setup fehlt ein administratives Konto für GOsa, Sie sind deshalb " +"nicht in der Lage irgendetwas einzustellen!" + +#: html/index.php:164 +msgid "Please specify a valid username!" +msgstr "Bitte geben Sie einen gültigen Benutzernamen ein!" + +#: html/index.php:166 +msgid "Please specify your password!" +msgstr "Bitte geben Sie Ihr Passwort ein!" + +#: html/index.php:173 +msgid "Please check the username/password combination." +msgstr "Bitte überprüfen Sie die Kombination von Benutzernamen und Passwort." + +#: html/index.php:211 +msgid "Session will not be encrypted." +msgstr "Die Sitzung ist nicht verschlüsselt." + +#: html/index.php:211 +msgid "Enter SSL session" +msgstr "SSL Sitzung" + +#: ihtml/themes/altlinux/sizelimit.tpl:3 ihtml/themes/default/sizelimit.tpl:3 +msgid "" +"The size limit option makes LDAP operations faster and saves the LDAP server " +"from getting too much load. The easiest way to handle big databases without " +"long timeouts would be to limit your search to smaller values and use " +"filters to get the entries you are looking for." +msgstr "" +"Die Größenbeschränkung sorgt dafür, daß die LDAP-Operationen schneller " +"durchgeführt werden können und beschränken die Last auf dem LDAP-Server. Der " +"einfachste Weg große Datenbanken ohne große Zeitüberschreitungen zu " +"bearbeiten ist es Filter zu verwenden und die Größenbeschränkungen auf einen " +"sinnvollen Wert einzustellen." + +#: ihtml/themes/altlinux/sizelimit.tpl:6 ihtml/themes/default/sizelimit.tpl:6 +msgid "Please choose the way to react for this session" +msgstr "Bitte entscheiden Sie, wie für diese Sitzung verfahren werden soll" + +#: ihtml/themes/altlinux/sizelimit.tpl:9 ihtml/themes/default/sizelimit.tpl:9 +msgid "ignore this error and show all entries the LDAP server returns" +msgstr "" +"Ignoriere diesen Fehler und zeige alle vom LDAP-Server gelieferten Einträge" + +#: ihtml/themes/altlinux/sizelimit.tpl:10 +#: ihtml/themes/default/sizelimit.tpl:10 +msgid "" +"ignore this error and show all entries that fit int the defined sizelimit " +"and let me use filters instead" +msgstr "" +"Ignoriere diesen Fehler und zeige alle Einträge die innerhalb der " +"Größenbeschränkung liegen" + +#: ihtml/themes/altlinux/conflict.tpl:2 ihtml/themes/classic/conflict.tpl:2 +#: ihtml/themes/default/conflict.tpl:2 +msgid "Session conflict detected" +msgstr "Ein Sitzungskonflikt wurde festgestellt" + +#: ihtml/themes/altlinux/conflict.tpl:6 ihtml/themes/classic/conflict.tpl:6 +#: ihtml/themes/default/conflict.tpl:6 +msgid "" +"Probably there's another active instance of your session. Multiple window " +"operation is technical not possible and heavily depends on the browser " +"you're using. Usage of different browsers at a time (i.e. IE and Mozilla) is " +"possible. Pressing the Logout button will close this session." +msgstr "" +"Vermutlich existiert eine andere aktive Instanz Ihrer Sitzung. Das Arbeiten " +"mit mehreren Fenstern ist technisch so nicht möglich und hängt stark vom " +"eingesetzten Browser ab. Die Verwendung unterschiedlicher Browser zur " +"gleichen Zeit (z.B. IE und Mozilla) ist möglich. Das Drücken von " +"Abmelden schließt diese Sitzung." + +#: ihtml/themes/altlinux/conflict.tpl:10 ihtml/themes/classic/conflict.tpl:10 +#: ihtml/themes/default/conflict.tpl:10 +msgid "" +"Ignoring this message will change/destroy the data you're currently editing, " +"so please close multiple windows and log in again." +msgstr "" +"Falls Sie trotzdem fortfahren, können einige Daten der momentan bearbeiteten " +"Dialoge verlorengehen. Deshalb schließen Sie bitte die verschiedenen Fenster " +"und melden sich neu an." + +#: ihtml/themes/altlinux/conflict.tpl:14 ihtml/themes/classic/conflict.tpl:14 +#: ihtml/themes/default/conflict.tpl:14 +msgid "Logout" +msgstr "Abmelden" + +#: ihtml/themes/altlinux/login.tpl:13 ihtml/themes/classic/login.tpl:12 +#: ihtml/themes/default/login.tpl:13 +msgid "Please use your username and password to log in" +msgstr "" +"Melden Sie sich bitte mit Ihrem Benutzernamen und Ihrem Passwort an" + +#: ihtml/themes/altlinux/login.tpl:24 ihtml/themes/altlinux/login.tpl:28 +#: ihtml/themes/classic/login.tpl:23 ihtml/themes/classic/login.tpl:27 +#: ihtml/themes/default/login.tpl:24 ihtml/themes/default/login.tpl:28 +msgid "Username" +msgstr "Benutzername" + +#: ihtml/themes/altlinux/login.tpl:42 ihtml/themes/altlinux/login.tpl:45 +#: ihtml/themes/classic/login.tpl:41 ihtml/themes/classic/login.tpl:44 +#: ihtml/themes/default/login.tpl:42 ihtml/themes/default/login.tpl:45 +msgid "Directory" +msgstr "Verzeichnis" + +#: ihtml/themes/altlinux/login.tpl:53 +#: ihtml/themes/altlinux/setup_finish.tpl:24 ihtml/themes/classic/login.tpl:52 +#: ihtml/themes/default/login.tpl:53 ihtml/themes/default/setup_finish.tpl:28 +msgid "Sign in" +msgstr "Anmelden" + +#: ihtml/themes/altlinux/login.tpl:54 ihtml/themes/classic/login.tpl:53 +#: ihtml/themes/default/login.tpl:54 +msgid "Click here to log in" +msgstr "Hier klicken zum Anmelden" + +#: ihtml/themes/altlinux/setup_introduction.tpl:1 +#: ihtml/themes/default/setup_introduction.tpl:1 +msgid "Welcome to the GOsa setup!" +msgstr "Willkommen bei der GOsa Einrichtung!" + +#: ihtml/themes/altlinux/setup_introduction.tpl:4 +#: ihtml/themes/default/setup_introduction.tpl:4 +msgid "" +"It looks like you're calling GOsa for the first time - no configuration was " +"found. This setup like script will try to aid you in creating a working " +"configuration by performing three major steps: first we'll check the PHP " +"installation for required modules, than we're going to check for optional/" +"needed programms and after you've provided basic informations for your LDAP " +"connectivity, we're going to check your LDAP setup." +msgstr "" +"Scheinbar rufen Sie GOsa zum ersten Mal auf - es wurde keine Konfiguration " +"gefunden. Dieses Setup-Skript wird Sie dabei unterstützen, eine initiale, " +"lauffähige Konfiguration zu erzeugen, indem es Sie durch drei grundlegende " +"Schritte führt: Zunächst wird versucht, die PHP-Installation auf mögliche " +"Fehler zu untersuchen, dann wird die Verfügbarkeit einiger optionaler " +"Werkzeuge geprüft und abschließend wird die LDAP-Verbindung konfiguriert." + +#: ihtml/themes/altlinux/framework.tpl:14 +#: ihtml/themes/classic/framework.tpl:13 ihtml/themes/default/framework.tpl:14 +msgid "Main" +msgstr "Hauptmenü" + +#: ihtml/themes/altlinux/framework.tpl:19 +#: ihtml/themes/classic/framework.tpl:15 ihtml/themes/default/framework.tpl:19 +msgid "Help" +msgstr "Hilfe" + +#: ihtml/themes/altlinux/framework.tpl:24 +#: ihtml/themes/classic/framework.tpl:17 ihtml/themes/default/framework.tpl:24 +msgid "Sign out" +msgstr "Abmelden" + +#: ihtml/themes/altlinux/framework.tpl:32 +#: ihtml/themes/classic/framework.tpl:22 ihtml/themes/default/framework.tpl:32 +msgid "Signed in:" +msgstr "Angemeldet:" + +#: ihtml/themes/altlinux/setup_step2.tpl:1 +#: ihtml/themes/altlinux/setup_step3.tpl:1 +#: ihtml/themes/altlinux/setup_step4.tpl:1 +#: ihtml/themes/default/setup_step2.tpl:1 +#: ihtml/themes/default/setup_step3.tpl:1 +#: ihtml/themes/default/setup_step4.tpl:1 +msgid "Setup continued..." +msgstr "Setup fortgesetzt..." + +#: ihtml/themes/altlinux/setup_step2.tpl:4 +#: ihtml/themes/default/setup_step2.tpl:4 +msgid "" +"Step two looks for a set of helper programms and checks if they have the " +"correct minimum version." +msgstr "" +"Der zweite Schritt prüft auf die Verfügbarkeit einiger Hilfsprogramme und " +"testet, ob sie in der richtigen Version vorliegen." + +#: ihtml/themes/altlinux/setup_step2.tpl:11 +#: ihtml/themes/default/setup_step2.tpl:11 +msgid "" +"We've inspected the webserver side now. Your setup seems to fit GOsa's " +"needs. Lets go for the GOsa configuration part now..." +msgstr "" +"Die Webserver-seitigen Untersuchungen sind nun abgeschlossen. Es sieht so " +"aus, als ob alle benötigten Module vorhanden sind. Nun zum zweiten Schritt..." + +#: ihtml/themes/altlinux/islocked.tpl:2 ihtml/themes/classic/islocked.tpl:2 +#: ihtml/themes/default/islocked.tpl:2 +msgid "Locking conflict detected" +msgstr "Ein Zugriffskonflikt wurde festgestellt" + +#: ihtml/themes/altlinux/islocked.tpl:9 ihtml/themes/default/islocked.tpl:9 +msgid "" +"If this lock detection is false, the other person has obviously closed the " +"webbrowser during the edit operation. You may delete the lockfile in this " +"case by pressing the Remove button." +msgstr "" +"Wenn diese Anzeige eines Zugriffskonflikts fehlerhaft ist, hat eine andere " +"Person offenbar während der Bearbeitung eines Eintrages einfach den " +"Webbrowser geschlossen. In einem solchen Fall können Sie den Konflikt durch " +"einen Klick auf Entfernen beseitigen." + +#: ihtml/themes/altlinux/setup_step3.tpl:4 +#: ihtml/themes/default/setup_step3.tpl:4 +msgid "" +"Now we're going include your LDAP server and create an initial " +"configuration. After you've entered the server URI below, a quick check is " +"performed if required LDAP schemas are in place. Samba versions are " +"autodetected by the installed objectclasses. Details on how your LDAP tree " +"is organized will be asked later on." +msgstr "" +"Nun wird ihr LDAP-Server in die Konfiguration eingebunden und eine initiale " +"Konfigurationsdatei erzeugt. Nachdem Sie die Server-URI unten eingegeben " +"haben, wird in einem kurzen Test überprüft, ob die notwendigen Schemata " +"installiert sind. Die verwendete Samba-Version wird auf Basis der " +"installierten Objektklassen automatisch erkannt. Eine genauere Konfiguration " +"des LDAP-Handlings erfolgt später." + +#: ihtml/themes/altlinux/setup_step3.tpl:7 +#: ihtml/themes/default/setup_step3.tpl:7 +msgid "Please enter the server URI" +msgstr "Bitte geben Sie die URI Ihres Servers ein" + +#: ihtml/themes/altlinux/setup_step4.tpl:4 +#: ihtml/themes/default/setup_step4.tpl:3 +msgid "Enter a description for the location you're configuring here" +msgstr "Geben Sie eine Beschreibung der hier konfigurierten Location ein" + +#: ihtml/themes/altlinux/setup_step4.tpl:8 +#: ihtml/themes/default/setup_step4.tpl:7 +msgid "Location name" +msgstr "Name der Location" + +#: ihtml/themes/altlinux/setup_step4.tpl:14 +#: ihtml/themes/default/setup_step4.tpl:13 +msgid "" +"Finally, you need to specify parameters to access the LDAP server. GOsa " +"always acts as admin and manages access rights internally. This is a " +"workaround till OpenLDAP's in directory ACI's are fully implemented. For " +"this to work, we need the admin DN and the corresponding password." +msgstr "" +"Abschließend benötigt GOsa Zugriffsparameter für den angegebenen LDAP-" +"Server. GOsa arbeitet dabei immer als Administrator und verwaltet die Rechte " +"intern. Solange die in OpenLDAP implementierten ACIs nicht vollständig " +"implementiert sind, wird dieser Workaround bestehen bleiben. Damit dies " +"funktioniert, wird an dieser Stelle die DN des LDAP-Administrators und das " +"dazugehörige Passwort benötigt." + +#: ihtml/themes/altlinux/setup_step4.tpl:19 +#: ihtml/themes/default/setup_step4.tpl:18 +msgid "Admin DN" +msgstr "Administrator DN" + +#: ihtml/themes/altlinux/setup_step4.tpl:23 +#: ihtml/themes/default/setup_step4.tpl:22 +msgid "Admin password" +msgstr "Administrator Passwort" + +#: ihtml/themes/altlinux/setup_step4.tpl:29 +#: ihtml/themes/default/setup_step4.tpl:28 +msgid "" +"Some basic LDAP parameters are tunable and affect the locations where GOsa " +"saves people and groups, including the way accounts get created. Check the " +"values below if the fit your needs." +msgstr "" +"Einige LDAP-Parameter beeinflussen die Art und Weise wie (und wo) GOsa Daten " +"in der Baumstruktur ablegt. Prüfen Sie die vorgegebenen Werte, ob sie Ihren " +"Vorgaben entsprechen." + +#: ihtml/themes/altlinux/setup_step4.tpl:34 +#: ihtml/themes/default/setup_step4.tpl:33 +msgid "People storage ou" +msgstr "Ablage-ou für Benutzer" + +#: ihtml/themes/altlinux/setup_step4.tpl:38 +#: ihtml/themes/default/setup_step4.tpl:37 +msgid "People dn attribute" +msgstr "dn-Attribut für Benutzer" + +#: ihtml/themes/altlinux/setup_step4.tpl:46 +#: ihtml/themes/default/setup_step4.tpl:45 +msgid "Group storage ou" +msgstr "Ablage-ou für Gruppen" + +#: ihtml/themes/altlinux/setup_step4.tpl:50 +#: ihtml/themes/default/setup_step4.tpl:49 +msgid "ID base for users/groups" +msgstr "ID-Basis für Benutzer/Gruppen" + +#: ihtml/themes/altlinux/setup_step4.tpl:56 +#: ihtml/themes/default/setup_step4.tpl:74 +msgid "Check" +msgstr "Prüfen" + +#: ihtml/themes/altlinux/setup_finish.tpl:1 +#: ihtml/themes/default/setup_finish.tpl:1 +msgid "Setup finished" +msgstr "Setup abgeschlossen" + +#: ihtml/themes/altlinux/setup_finish.tpl:4 +#: ihtml/themes/default/setup_finish.tpl:8 +msgid "" +"GOsa setup has collected all data needed to create an initial configuration " +"file. Save the the link below as your gosa.conf and place that file in /etc/" +"gosa. Change it as needed." +msgstr "" +"GOsa Setup besitzt nun genügend Informationen, um eine initiale " +"Konfiguration zu erstellen. Speichern Sie den untenstehenden Link als gosa." +"conf und nehmen Sie gegebenenfalls Anpassungen vor. Verschieben Sie diese " +"Datei in das Verzeichnis /etc/gosa." + +#: ihtml/themes/altlinux/setup_finish.tpl:12 +#: ihtml/themes/default/setup_finish.tpl:16 +msgid "" +"After placing the file under /etc/gosa, place make sure that the webserver " +"user is able to read gosa.conf, while other users shouldn't. You may want to " +"execute these commands to achieve this requirement:" +msgstr "" +"Nachdem Sie die Konfigurationsdatei unter /etc/gosa abgelegt haben, muß " +"sichergestellt werden, daß der Webserver auch darauf zugreifen kann - " +"während normale Nutzer dies nicht dürfen. Führen Sie diese Kommandos aus, um " +"die obigen Voraussetzungen zu erfüllen:" + +#: ihtml/themes/altlinux/setup_finish.tpl:22 +#: ihtml/themes/default/setup_finish.tpl:26 +msgid "Retry" +msgstr "Wiederholen" + +#: ihtml/themes/classic/islocked.tpl:9 +msgid "" +"If this is lock detection is false, the other person has obviously closed " +"the webbrowser during the edit operation. You may delete the lockfile in " +"this case by pressing the Remove button." +msgstr "" +"Wenn diese Anzeige eines Zugriffskonflikts fehlerhaft ist, hat eine andere " +"Person offenbar während der Bearbeitung eines Eintrages einfach den " +"Webbrowser geschlossen. In einem solchen Fall können Sie den Konflikt durch " +"einen Klick auf Entfernen beseitigen." + +#: ihtml/themes/default/setup_step4.tpl:55 +msgid "Some parameters about Referral (optionnal)." +msgstr "" + +#: ihtml/themes/default/setup_step4.tpl:60 +msgid "Referral URL" +msgstr "" + +#: ihtml/themes/default/setup_step4.tpl:64 +msgid "Referral Admin" +msgstr "" + +#: ihtml/themes/default/setup_step4.tpl:68 +#, fuzzy +msgid "Referral Password" +msgstr "Neues Passwort bestätigen" + +#: ihtml/themes/default/setup_finish.tpl:3 +#, fuzzy +msgid "Schema Configuration" +msgstr "System-Information" + +#: ihtml/themes/default/setup_finish.tpl:6 +#, fuzzy +msgid "Configuration File" +msgstr "Einstellen" + +#, fuzzy +#~ msgid "" +#~ "The LDIF export/import plugin provides methods to download/upload a " +#~ "complete snapshot of the running LDAP directory as ldif. You may save " +#~ "these files for backup purpose or when initializing a new server." +#~ msgstr "" +#~ "Dieses Modul ermöglicht Ihnen den Download der kompletten LDAP-Datenbank, " +#~ "die momentan in Verwendung ist. Die übertragenen Dateien können " +#~ "einerseits zur Datensicherung und andererseits zur Einrichtung eines " +#~ "neuen Servers benutzt werden." + +#, fuzzy +#~ msgid "Overwrite" +#~ msgstr "schreiben" + +#~ msgid "You are not allowed to delete this terminal!" +#~ msgstr "Es Ihnen nicht erlaubt, dieses Terminal zu löschen!" + +#~ msgid "Administrators" +#~ msgstr "Administratoren" + +#~ msgid "Download complete ldif" +#~ msgstr "Herunterladen eines kompletten LDIFs" + +#~ msgid "Click here to save a IVBB conform LDAP snapshot to a file" +#~ msgstr "" +#~ "Hier klicken, um eine IVBB-konforme Momentaufahme der LDAP-Datenbank in " +#~ "eine Datei zu exportieren." + +#~ msgid "Download adapted IVBB ldif" +#~ msgstr "Herunterladen eines IVBB-konformen LDIFs" + +#~ msgid "" +#~ "Warning: Please check the SIZELIMIT option set on your LDAP server. You " +#~ "may not get all entries, if this value is to low!" +#~ msgstr "" +#~ "Warnung: Bitte prüfen Sie die SIZELIMIT Option Ihres LDAP-Servers. Unter " +#~ "Umständen bekommen Sie nicht alle Einträge, wenn dieser Eintrag zu " +#~ "niedrig ist!" diff --git a/locale/es/LC_MESSAGES/messages.mo b/locale/es/LC_MESSAGES/messages.mo new file mode 100644 index 0000000000000000000000000000000000000000..d78c450890b0b61499a050adeb2a8e641dc0de25 GIT binary patch literal 114454 zcmdR%2Yggj`uA_df?&l0DCp1(AcP_UvVepTdLR-ITpN>Qk_;r7Fq05s@4a_jb$9J; z?Y(zhdoOF(UF+KGTHo*QJm=n-6a@Y6`+q<0e7O1EQ|~FyY0o+L@_M&5PYw9ZUo!}L z!Q1-=!Qa;kg58Q`8w3aJX7&fdbuga`N5PBWcJLKA7H+tE5Db9R;hC@=UJE<#5d=5D z+u%uX*`7gg6(m}_Atcq!Zf{>}4tsBn)$ z#q+E;{{!~K{5Dj$A7KmzN(X<^CB|`TYbJz%{Fg8~zb0 z{$t>p@O-H9y2P8Wg~Kr41P8$P-~({|YGeaG3zhD7;HL0DQ02QpO%QAedwOmURc<>$ zCe9_D+X%I68V0el@6z>lHYWv^5a zEQSlFbPM%BVj(g4UUHIK-J$CO_sl6 zsP?cYRDD#!P2n;qc{>cMeC~vjpBJI(Y0Kp%--F?7%%eRIhN`EhpvvVXxGwD8Z2dtW z7{fdXDxNr$Tr@yEe{ZPpM?j_H1SmPW5Gub{Le=MUQ2suJs)ujkCh%w24R%{$<^fR8 z*#RoP>7KiLrs28R9}ZQ1+q76c&4e3aUJMm}8QdHm099V6!>;gbxIVlDDxEh%g}VzX z9Z$gx;X6?M;g?YUyX|G^jzOh6A1eMoK*{AisBkH$`1Xe?rxT#k^C!3&ybMY{?uJUw zzdgT$l7lt(wtV%6GEax{R|8dkjZpd72P(Y>!tU@CsCv5sPJ%bW$?#jK^pD%e>R~!m zycMt~JQ((d=Rmc~+h8yFI#jxUfQrA%zGmMSD&IT89&l%GPQfiP9|k2C=Xv+5U~kM1 zL&fv1xBuDOci+#-d3&hz%!i7%9xB}7Q1M;}_1t^B`6ciE6;!&r?QiXDdnozZ4JzLi zp39)pwLet39Rua>&rou35mY~Q6;%1&0M*WKg{sHLV1M``R6YObx!wU5t`}7NeW9K^ z4642+K*duG$HRqi0Xzk60Y8NKaIFI^zeAzwdlpoGun@}sk#H=011jDg2U&T=U;*ZF zuoFx|)mt4@{`P^2?_j9%J>Huyg-Y)YP~q5#yJHi5}^wq;2d5oXl{rE$yTuy^(2Nyu4>sBbaebBo<1=W6D_xu#9y#wETu3O@jNNq?U+e`XhsVMV;9sHor>o(H@Cm4NybhJFe|z)SQ1#R4 zBx`@Ypq?`tDt(h+0h|hz?k1@G?gLd$M?lrv(NO6>!JE&4yJ0>LDxP1w`&uWPTz7*? z=jL!@H~{v8W1yb1D^z^tQ1z68N`JF=KNRY@$3Vq@B2@XF?#<^xrTY?Z{~|2J{I)mu zKgGfigL?ib*bPpF>W6mm_8F-1JJj=3DEYn+s(s!FmCjo|AM$(-D%@L8_3$|y3O78} z`mG6Y80G~~_J_hf;B`>--t9E&Uxz}aZ%;T5E`zGSE8qm=Vy33~mlvpvJKi;7oW0oCCjw@;CKNi*F88z3mE>&LvR&@S$)K zJO^$Hzkzyw*R#yr1FC$7LMK;H`IriKfOFv{@JOikb`DfI-w(Hg&wKlI|77VO4&{G5 zRQZ%bm3KK*ylJR(>|f`{Ejz&;knL5){pgqifxuFTnn=^Tp_L;7~Xc&V{4lK~Uv! z3zYoa57&Zk!!_aiQ04hCRC#{`*MVzXV(bEyk8V(MJHT^KsC=FYm5z&`!oLI+|3AI? zL#XF}1C{^0OYONE!Csg*g9no(U(ym!b04<8s@O&03{tsYZxb_v+ ze+_~$%%xEEu?#BQX;9C-0#1kbz-?fcznL74fa(Xzq2zZzsQNp@n;(T+VE&gk2UprU zehaAjErmni;cyhZ9;$tP0M$QqzRI3I6{>yi3S%%0_1u%8%JV9y^ga%i?{}d3`E{;zwh>%li+Df}4Df)lT^apox44fCCF z1NbylxHqAm`%fr&{=~a~<=N?a>kqm?mD9FxV^{!K$Y+Duq(U}s+_NZ zlB4IL>ft-MHQf9L%g1OK!@K}W?v_J^I~l4xZi4C`?uB~p`%vZgAGjG@_eQJdt)ZU# z2hVA66U=3BeOL_@z6mNnhe74%TyK9h+!XUYQ04goRC&GQ`32N-^KP>AZwwWF1XTSL z!On0NRJ!Lw^*?(;)k`J31>OLap481&|NBCPKLn~=j)BAA6>t)K6^@0y39NMO43*9b zsBkNw>hA!kaytx4t}cU0|1~fU@Ame6Z?$*^!SUFShJSz=I2m3A)vmsPD$n7!S$@WQ zPJ>GSJSe$Z3{@@}DE|jTmCNx^{{9M;?yI2Edpnfe-47N138->=3#$GROZnyI2 z2Ni!2RD5OL9EW<&GH-t{+#Be^hRd!Vz%IJFPv8hO%D*cY)`_QSc`?6pp;h z=6#Fd7|gf8?cnF01MaqY?Jn>_>~DsH;2!r_zjXwZyxs{F{-03w-|JqBw+?QP`9Y|D z^hdZY>~o*hdkIwkxi3^a7r^205m*3!fXdI{`)$134Nk^iZ0+`n>@5 zfY-qO@DUh;pTfRyqeo0Ww}VROLa2Q154VCB!JhB|*bBY^H-|sM-f)vgZT>#O^8h#( z`zJlOe$4vg6zqrn*-+`Y8>$@t<=ORdvmXHmW4|+0{T%4|jAy?m%)SvW!TkYm9{!~F z538|%2A05aPoZ;yM?m#EPr&)`ZO<`J(%J7eAz*28OIGwky&bpX$VdhYjd zCYx!K@2A_w6;94IVhe4IYE>Pup6dVX|f~vi=qCe|QPJ3qB4N&$0iuaCbtL%V$vb+kI^F?@BlU^94}pdK>Nl`+Q>D6)OHy z;duBo91A!2)WT1L(=i_ocZE+uJ!i;gHXfv);yoA2{xzt4#XdJVD}hS)3b+kC2M&ez z!+!7!I0u z9t$_byd&%h=R(Dogz68Ppq_ICRQxBvHR0*72A&O7u4{d3dZ;N->6`}j+@0WNa5uOq zOnV*1RD4%MrRxT7z7I-XANJ-apwjiM=NnMz`Uon&UqU_iM{i#HJ4^3|Q02Ng zRJo4y_M@SmI{_-5$x!jk^!8=mei6JG`^8Y{>G>b?zcp0&d~Y5CRZpX!(oyK$XL)le zRDJvrDm_h5{!fG(z;nI(-=NCrVb}-02KC%upq{tZ_ZF@Tlzn&j9_$T!$^8c__r7o> z=Am!|Tnx8`C&2;mPIwFaCwvs1`y+FDxa23+j&R7&%u(Q5@M?JSFIGNNf;?AVB~bZX z099^#dixqU7IOnsd0z@u&wqoGr+c8}=sBoze+4T1J8(<*Z*Si@FVCfSBRC!V@lfsl zP$+r57pk0|@#gp7RLtMP1#sdTd2ZZ31uC7_LdoOpaC7*O=j%}Md<{2-T{>C(y`ai- z2>b_}0agC}*USr4FN2`cGYhI*kAOSC>tPT035>yY*2;6^@jxi~odkQs*--wLz&Y?> zZ+-?!EsDAJj&tIVGx8J&XZv4rID#x)<^-}`nzB^QY z;!yo$Jyd?~gp1(!a2_n{k{2w67s2_kTh}}{kFJJtzYSKv4c5zZ<7paB!h8p;fj`6j zVDOb zJPb z@9t3k_l0Ule}?L3zJ@BFAE3&sWb-^Xe>?{&AJ0IAk99YBp9GbTMNs9RhFicZpycEs zI10WBhrx~6l$HDzLis-cs{gtb4uKzg^A{C4ea{$o(`Fc_-e8v~V&N#1=CRC$!cZQw~z?e-R^dbks+AH5$+o?e9N z&pv|6*BV<{``;MK-(b%P@IK6?Q1Y|s)>a=Ap!_X@3cnPpJokcn-i1)zm>rm~i#~=$g1*+eg4b`8X2PeTz z2AlhQsB+p37Q+KzC-@-LxcLZFKHh<cCW zz7O0A^8w!d&rt3DVyNd_4V8|Yy!%hEA&-82i1}MS)Z*VCs$PzQDz}Tg{jE^t`~Xya zJ?Gs&^!yo)#J*cWUa%J|hI;PIre(pn#u`zo)>p;Du2Az~xZ#@POw_Q2suGO5cxgINV^Q z#j_(+_^F<=q2zO(XEjtg>;pAEo&*)o6Hs#YCY1bs3`fBKKs|5U?W~_250$P$sD5Tw zsOKf&Z7}7z?I1H!p&UcQI5v)ll)Q z@b>#c)yE;;d<;~*oeWj)kHh)!MX3A@nPl(5J?C_&{9WSBw?mct z<52l}2daEOfXdGgQ0eYkXyv;F9D{j#SOn{!)&StetJHpOI z7VmUei+K@Lejb3QAtz5lm0MM@$=m5r<@6V*^j{2>zMJ9p@DXnxOttdb7)pM7LiH~L zU^Sc$_k~wO$#KCnlbbP6@fJh1-<_fQ^9HDX>_`}cZ$p)Hr|DLH8$roOf2jH%1NGe5 za1LAq70<;`<#jid{C)@3&-I;Q<+2n?eou#*S6m23!uz1Ye*=}?4QEqU0G00X zP~}(R-4{Zor_S>rsCIO^cfS&ndv=*?_M@TlyC)m~PlBqqo1x0-6{z~} zUuxyCEtLBdD7mbLDu?CXd^ntj`825dd>tzP-$9krhC5mP^@Oq?3f0c0K*cv3jzA7~ zg_8ec=UKg;1J#Z$g)#VdsP^(9lw5oURqj8*?O?Yun}>u2?oi=QgG$%4Q1bB^R6Fas(9+Wzs^8cKDm~+%%5N4_KT{6ne=n&1`xq!Wy#%U% zxzY16I2H5TP|q8*$mDJ+lsxVOmCoy-%I#e^4EEW@?015y--BTdd=#oYM*Y#`XA;!B zstT%oE`zGaL!j#S6sUBb57pn^0OjviSOy>W?6a%+Yl14r!=dW=PN;f(6e_-_p~~Y; zsPg$7N}kr*&HBalp~`6_RDI8YN>4eIT&JPZ+XCh95SS1D1eLD);B5E;91HvHZu5ZM zpv(tDwTIiG>g^4vapHTZavHUVtxxuWisx}S8E&zsjk~+U80Mp(>f>^#_V_SV`TqbV zFQXS*`%Xi}e?FA|*F3+6D!=Y=%lA^K_IrXizYI10{|v{&zU5}#6Kec87!H7!K#dbm zcy3UU=gwQqffKMl3(DV1Q2u^~8t*1n8h3}=VcrMI-__py0#rG5NmzXjg)&z{#d|nZ zxjX{*S3 z2=i#D`QT!x`ac>#ZEe zLzQm{l>f!v+yYf@$3V&3W#0WssCM_hxBmqyeE*bjjOR?K=j{&FKQ%+ecPUgoJp@&b zPkHkTQ2oFgFb>~?UGr%F4HoZ$W!C;{pu(r1#>W+~5MBW1!grzMX>{81w+~c391GQd zoacEdRJmU5%`ZXa;|+K?`~oU{du6O#4}c3WpWykf=lDjmKMAT|e;>wR&}7f+1J&OR zgmT{js+@O%O4kz4{h^+J3Y1)243*FOq2&H?sB(YNn?Hf7m+zqR(R;bIpJJ$Z>!IR1 z*qcv-lEcfP&Nzj+hczNlstU|)m{d)*m!gtRJ}eA7sGY- zvVN}ymSDaBPJ&;+a=6{zdBNY|X;9fWRTTuRb z>}TdesD5Y#R61_-d>^Xc*`C3;PcawD`6^ zC@**mb2U_dHsfHMe;)}YZ{NUO;MhZ~y`BX1+&iGgf$!mNaQj1T+&Bqp{JRTE9-e?P z_y$zF4-T{E4))v)4#)a9Z@vpE{?Fk^Sa7(NM;vaA`6#INb{QN1?}r*+KJ=V;gz4)~ zf~v>QpyJ=tvsBz#rsQ&pq&&`gq@v{iZehFLz&+z;l&ci(OXj@;M1CPi21(f|k z#~7c7%PlT`3#fG zDQDXJWIw2Oa}t!?UIKgO(VxPHFn@nmp4-2>_fMwxX*}EN|5K>`c98wY0M$Rmq3W>)YTP*pDxSk(Jv<#M+}h{bxVH(E|E-|<`LXaIxDaZb`3Kwt zeht@w>;BowYh$SKYZ#mcXF-kQC&NDQMK}}w2ddpn`HRVC29CviAym739jZUs?5`$o z`LHwQz2TYg5U751tMe=!{h{h-EZi2ZfO_r)Q1bUa)bo0sZ_k?r)t>f+qu|X@^8Ya$ z0%I3gy_7)p8;5%H!%+T$3ys@B<);cN-Pgc5@O{rQ7g@Rw^E@8zfcqIx{qHlLuR^8g zU8sEZx!C3p`S4)OXTv|k*d=*E0^SXGg4s6?1%XRsPsPU&EG-gv)2t)ZbeYzZ3-%Vr@)io3vdQZ-e~KE>!8vX z++^d|A7B~AbD-=$hb!Qao6US7RC|3Bs(n`6V)L`5Fc0%_Q1&Ol_23y$@^B$k|8R{r z-v}i?_d@x9%GGv?1?Il6tcPKmr^BV9uuBB_3{aNsQ zZq<*dF2dj16ifzx>fh(%XB+PI>%;Xi@$AecA?=I5ZFSG@I=CU`3fcSkJHc_-|KR;> z11I74PB;R$jkx~CwX=`^VDB%6pJTZ6yMk*07u{>{CY;4H*5En{^S*@b?ZYOypU3r~ zj{~nkBjy8fUyrMhYXxTgy2I^=<16eA!dwm?!cOCYezjb8VJ^haLB#hY?z>=jAJ=g1 z_kkn0^o!*@Z*%U)5@vlkitx4G?PJ0e$)0N{_B&uN+0w6o`_t^!^+(6ySHE}hC%MpX z4tC}EI{>@4;lH7NYh%AR_dlD_{VnA0k>1SXf*)`%B#eIhaDND4{)3s}z18m<%>8jc z0^2FLf9=C8h5BaCKq&dsZzue1?!(W7F|JA8zuc$e{|o#u#0F!q{}1;Qx%9iq5NwE> z+RIy9o8hLm5&kL(vl-VbTs2%z;8(xpp1NP; z{Vnijd7H&`FZLR*j>CQ(@8?UX+o{;axlZ!-Zu^~3#X_#ix$s~=%HaV_C~B3CK?55+zFy@cJf-h3+l^n1gb|HS=P zzU;2YZZ__2jKjW?YXWX}5MJ|c{WL$+?_}(lUIp*N%eeIWH&-{}_>QX%x6iP@fvX8~ zPvY5(>#yAF_dWKH`n1SA1^Y9w)4XjH>`S3o*U&YTxgqg|J z!lgM3Q$qK<*!!F6%>#J$1K6F8YX#Q^-hF$*9m{nq=4nvBfA?V? z@Ns&lV0X*|xIV$X8OyV{zY}(c_xUjQaj)MPZ`OS`Z}&VLO8P#5Tl3t{y`Psbzrg*w z^33l;%$k=x3pGD`9=E~V{{vp_(_W2zG57Cz^WL~$g!{p;5*9)Ip5ki3ocnWgAHr4R zXBg@E#=C!lr#-o@_nuik1f{qg0QdCI8Nq!YF8u}@g1vAX!2SK+{A14Zj>B#)&uAgc zC-~b7xAWm>?9<-gdOmIi-vm3B8Ezibg#F{#&4M4p@&36?e}dQKnctQVeB{HD)H{yz`Jq#JI_4Khd&*@36L?r-+~%i&1xK8*W~c;;pJdk4F#ydQ;q0JGNSUvW+0`nwOqty{y21NDdB-Gtwo z>p<=|CB8Gc*Y8^5+l%|V%osdM9LHk*6f;ZV4u4ayzX6x2#G~I8#IXbSPZIVW?ze9f z?)DsWA0K7|>*d!V^_xgNWy)C`6?gR>)1c7IJhe0pX*!v zoyzqycDG>u5uSp-^SD0@_8^Y8aM$lK+$Q_9m<{!coqnGgf>PY)bN{Kgf0VH2c(+N| zT|>M>;2i9`a3wKc3iseTg8P5qRtn$c`WU;t;Vtk^t|dOsf5VTk{}j6ei2G}(-ygAG z3NP?xXUF{$+#JvK24U*))9m9p1@i=d|19onk@gh+JNxioxG6Z;_;jwO6A_zV0acDukwFwfzBI2;Ne#7@7{i2E1V+o!b@^DWLL z`zH^(!w7Q>VWx9`0#2jxKOVbReLNRqcRcsQa6cFpb8XCh1NI+r?Zo|T{0Cgy6Luly z{@fR1wH5d4a{mvm1oypsTK2&F1MWw2t;7ADxan6w+>P9y5C4L>7V6g(yDhn%#QbOc zzk*#aIMcg-k6S(WdBiWB&y8HmaM!OM7J7dJasQC}d(0`AhPeduTZEqrUw|8N>325Q zb=aNlAYBe?1Ai32FHT z^KH2I&Z0^yAQm*{QQ~gIB$N_hr7m`2NU1s++U6T<@if0 z0KYdduOQCvaa#*+>7Tn4`|of+6Z_8Ct>xo;9PY?vHK?+BS-(M!>yUH z2Vs8#_uYtlE4Ulx+pyPfKkom6-67oH%k>oYe}#v`Tj3I}{kR_G8b|m}_}$T`@hBh1 zt=Rp-rQeOjr{Ck4yK*JCztq`e|KxL9jK7Boe?B|~j>2yf_g`=wi~9v!McDVn{5o#0 zVjjoUnS1@_d#()!;^$4cn5#E#BS_!6T-$PAh1)vZFX#SV-0$MLhb#R3foEKgc?^Dr z$sX$W3|F1IqfaD`c|J@G|N8CbIRF;>FjKiN!JoX&;~Ggg{f2RU%XK#9FJUMAPr&ct zc)SDth~4&ZCieToE|~X(3%T@rk#IlZ_ZS%S&-#;(doBD7M)e+_vT_$F4umcmp0z9C7UO{j)B?-;>xMgxx&+bmf}P{S2RHli#5cn6PX}CQxmUDHP5JzS2QM$;O&gQ)A3Kl*Cu$$Lius z6PZ|jDwavqX9(=w7RJ-{$@=Qm3p3FB9v7=ir4zBnns|L|#OPRcI@Q#WiN&!ZeX&ea zLqjUvn5c}Ex5Va5E$cHV7+g5HXiD+aY13!SoHe^-&fL_ck z+J5wyu{#7qiz}0jL&;=iZ0MXsb1dG_P@AlXHzrf{L&;NZZ7i`OQPI?>a)`w7lD5iFNV%c(p3URdKwcBGrVnChH{xPUt!; zx0Tg&RK;`vF{L3Bt4gQpXoQK_>?wt%wCnWpL^?|E>b4grib|y-%Cuw}6Lq--*FoEf zno4WYb8_bs<#Mc46$B$j#^{UEnP6nBGTtIIClX8HC~rU7vrr8rLyJ)F zVo5rf+H@jb*`nN6s;TqDOsp}Tpf@WlnjI8Y#48hZ$%gkCkq0YG@m-E>+n?NQJ3Q#Vge>PLAMqs0hI;00ujql>aqL*nS4sgJiFRS)hA-9DwEArGyQ30WtyB@A|wk4VskuQ zDM4#Hb|@ZSBvqudJeE@&uB^%ay}9r?=EWK|_NTu@j`Z8ES`B@?yy)ezd8PBtdu zBuEaaW(`yI2`98sgC}~5YbizVWE*j*MLeAE+7w-m7Es&`f4c_2%8>+b+T2W>iiy|J6r--ho|cIXv~gjaB&R{s71!NVWn2=r)=7RFnH@CLsKHysxm-vTGfm~{KF$BCeI+t#Kd#YH zNb255aw2zL;{;r@P<7*KDCz>qd?xOspH^YzC82Jl+~}Tt7vzR8B}N^4oc2&lm6xSr zLt{zjBcBK=m4%G#8eF$BJ~`1QcH@U7CpxJn)?|GXEjAs)u}GaqZRi*;rzQ%5$?7N( zs!)d8n1^XrmoZsuHon>1)tCa`hix(Tkg*3=;^Cl|yua=+#)n=wTV*0o;O4s1d} zc~&K>n`{_&jX8{=I??E+DryipQ{gC*uneOf)MQV^ly9--TZgC+(MX*eyO-JA$lXNQ z#=(MBinUU>dTmOglC1abC7gf9=CNQ`_ZQEMiw$7yX!0KUEt^rib8+N(WzE&CLsz#V zy=T|FT~=4xz%z^lG|t?%;rcH>OjRf96IN$of%*Wsjluoi<+?Dg zIITl8>5I(Cibm$gW>mWjr{ij3?L-OTVQj8MKopz2t8He3)HPsdstuM)=skSO-0X?@ z7kOJ{Kvz~Bgm!%z6Z>>(MavNCs;)flv_+Kk3fH8VwyDMO0FA3f8n*1OMg%65ZqS%I zzcglxLvvFeG?2`wV~SeBlAW<`;KT{r7mO+xKB%>q(&?o!7TFnP1}~!uMzr%1r{y!{ zOoh#Z)p^OVIrFn6R1?pzKxiFrh4g2(2yE?8rP7QwH70A5jR=D>6ehQtWszGpwy{ny z{?@AMl6CQhc5aP{6_JLnwWGXu7~@g~@a;QvsjXZ|kUC|u!yt7nnPn1st#?~LKa;9+ zD~@nwNiA11C92CQDyD+zL^ZRrM0(Ha+EjVGHls=xSMv)x=Q>p_xr2DhY(jRP8BQ&*H9@c7}4*q9{+X7!Mz{G|}SB zF&0S7FWXt`d6IvpG>$wkkJB}D)P9>K{qf^^NN2E2iQ&&szjc_f`hO*_4(qPq^qx7W)qR88N%W6J<&6nvQ ze@CG{zQ(TQ=IHsf}fJEg7zp-Rv`*II1>n{piCXhnnwT%^pd;)N9^BrI)WQhx}N1 zQ)46kOvQlD3L7bN=8$wWUg22D@R~wOowCHQ(&(eq_*FNo!HZ1w&N&$?oQ`u!$rTL!etJ(!GUZgvR7Ww_rx8|j{Avkd zYiDYoWj_kVb{?!R3jLFS=yti25nENt(ycC?47(n7fQsH${oF|7;O1cdxvF%(#-&`P zA6Mc-Uw(2M`fyH8(^}+~QGubgy2aZ`qWmBddUHC;Hg=(E%7?OvaT`A@tC_vDvGj8r zud{Z+)#t?-CYse@vU_FASlb4(fukwo`o#q5BW8l^E|h3>7iN!+xq|U26Ll4ueiD#* zR!aL3D3+O>#e9!CzIGa;I6zEKN4JfvHKlai>6v9%BX2CV6erlJ%nuWIG?P z4hpA_K@l1^HZ{U>n-W$Y6X`UnJ3sZrIuYnkY*=i*h5>g^&sCmG)BdI;DiTsqa#Iy= zszn%?sWwTcA6jGuJ!@sM8JQ6sYP3F-Y%jWzvm0D6Nl_=bvD`_8)a9rWbM1&L8{WLC zol*EIbeco!FiuBFm4tD$uqUCRI)g>HiI;QBinbuvm@|#Z`VV(iXnFZ_P&DO7yD6@p zVb+}WtLKT3 z8t{Sw(y8T*TjmaM%60zMrvCfa$dxl87p4$W&M-!{JF*3k-K_;Y{(qFcL(w2x^^6O_GyyCHtF)p@GzNP@6*nkx9|7?S;tlhcdAsU z3Z|jumW4UAdxlwe{0O&`5GK;=cH3trbXZ9owymKGZk0}(;B-(np+m>fF%hQoFCPHlq$R+bIr+Kl*bTy_u?+xTA&lCYMSKHhW`=8*X+?aZ9LRidQsp zgYX8L(z!peimYBFV>WK&v0EEsw5ywKA*|9PExe*>Z;not1jVkKFJ`b!wXkiWPB=2S zWl?c`H4;mDH0OzxmCYveZgS;q;xzN9n{~aaW~AETb&DtF%lS-$=|!9>RpYDX#bIFS zZKK56cS+<(vh`T)d4GwpYN<`;@ z2r|D^S2Vwz>ZVYEVO%W5lsKJq<*9u!>{sXtHwrb>Pn)Z0jYKJ(tgfbVnG;M+l&72G z40BVd5FV1$mazwVPwj|na>K-&>h}A$lwiFyI!+-%yvvg*qzPq8I-%)m*@(4x8Px1?FXDnWeDvr9Wpc9txyR!z;_}C0dF7Aj3`KrN- zTbsBi7sTdkdz61@^Vn#QbHGiCBI#@A(t;$V`EEs+okkQE&A>_$SkSxIf;O4@ZE zV=DP|QzD8{5puGC%~+Q+#L*Ilp4e%luyC@QVe#!MCX}E86^uHRskNzw1|9lx+tgE2 zwL19VB4Ndd{yxPX;#A7smj?Gpdu*D7$=xlOF=bd}szk^_Z86R|^5JKtjVbwe7XD0( z=35=vF#%&UMyCLosoK$isjkFOYBwe+2e;+pw?nxT!h1xQv{w$>GixQAznEulB*>p1T+6t8S?))7}RF+4XCc=GoH3)k7rCy~$>`wg>ZJ0SxGo_c)+bB3OXOGWlA*eHoF$O_Gn|6{U zFPITb(=Ji6BBU)xb5tcbaKNn|H0ElXRlNS}ixr7)ZyN04wUk(8%(ikB&W%FKgFDrv zb8b$_V++8Q^!e&=R^8`MW2I(C%7SUWGx7~-ngke2iE&PA()`^lL)mU+s!4`n+!WN@ z7!6e6KAf}_ajlx0%pwy^FGH0XOi$D{1k6cze4Z9v19x-cuB!>X0}3=YM< zchUXq;=pYvbILgFq*?t94y8l=`JiA1vKY+JoWOcbS8J85jO`={mQ|?g6GPk(Z>OpJ zSwG2rs+^&qDMO!GQH$!HewK>oj8=I%)vU>cKRPE{9qvUr;5R9=N3hU#>%feYdL$;4 zW|y7{Wf8TyJ2Mi>6{kby>8LLX4vvnP`mZ3$!vDAFudYY8TN%s{EvxFRw5~<`oNm@; zA;Xw?Hl|ay*HDR)Mcsp&ZARyrRMbR){!-d;n?R|0vORD!>SAihbtR^$jm4{((o>Fg zJg>xd(ntVJ!42U^3Db>6>o9am92F``Jb892`6?<`RhVgFp1~%MHiq|Nc+}8~HM@N7 zkjTu^;%Smu)+BnA+mx8W3`}PgHB(Uk9g9b&r6Q%H(;3VtEmgbR+gjvNu4Z(J@3MGH#HeCN-jbDl{SV`YUUlM7=bhi%tU=ytnX9NP->?KjeM zc2RAQP>-;Dst=k`&-9-X@~T$r{;{Q+G|jZ#vd~QPlnyqvG{Z2!0m!g=8CfJ3ZsZ|q zmnjax>tGjpG{#yE%CsI>ILAO?GyMriX*XWENNw?Aa>c&33M=Ozz8kUhFq=c^u64|6 zli4HjjWs&_RTp1Es;HF)PET0EniKg9huLEw+Jp6VVq>`S5e+OhGH2A)Fjf+l37H+g zB6Svt{D+IbVK%UZ#aCz2Z2BIR86pr3d@?Hlc9?s~erjo;#^2y^v;j9Xvbh znHhRhLqRYzUhgK-Gn+WBIJ2of5zLw#%<>1cqMNJ|7yVTo4Z*JwZ9H5}Z++yCeQ__q zIVTR?nl8JV9E3;PUkqHnSR$m-)~-WM&dZ;* zS$8(x#hELI1+lqwkSx0sjVc-1ncumS%BMxMY1aiy@aNDgbMntgpX+q})1x3%pmYSx zE%fS4So)|c!;U8`CGV6|6;zTHAWqc1n}4`F`q#KWRE%tpCQfr_&lX2svU-?|#Xz`7 zhn%&_(V9ix{KO@Uim~3EW}`Seh`_7SqQIJ}5xrNuL^nPIp+1JhxcNkQ{s#X}V%4d! zYbnXsgoojGHix6!X0+}k{_ae+8-Btu(|6*&+j8$^h08p7*PcG7M575-$>g9!n+p09 zZH{25$Hu>8;xa++ls&N%MXtd!_YjAUwXMVXD>>BG^2@OVLX)no*CF>-56e^NUKRAnf5`QJWpew;SA|C8m7Oo;%I=XULjD z=-?Rk^NJ_Wo%C$*%b4*(fGd7VGm40>_8ZFPL zZFZFX2&YQZD+KD!IA|-UY#YedDB>T90?)EeM6#pEcmYA%{2KWx>(K+w3CEQgQ>^)D ze2J3EWZVvL@?_i9Vrx(n2u31;F1KCJIlLy3JNe*ndTkRgC+5yQG>E&2bvXE}M6ZAj z#O-});G~I3ouxIPD;`tQE|@pNlng`2C~vlKe8Z+$bT58-M*w$n%f0s!9`eRh9aBpU z-jug1d+9H9q>r>^&mgD(!k)GL=_u=!Dr%+gX2W|5hu@NHs8X&R@6O4wy;*=mx*AoI zbPeH272XELg!+a8NwIdB<2Qk{zs{o7O^1n8ucdLgK*Nr^n%x;2}%xwZK1nM|1p!p5`ZJ2&{C{xA83m;@lMdT(- zRbD%Y%(0+c%APT0+{D>_604}fLjnaZVwZB9)Xb!zlI1jMN6?2RS{XEnbwf$%tfDgB zcFfsy3Q8H((){(Ww}m%|kxu%MZd;D?Y6hn(QWU-IFx&bAp=Pz`v~W=rZhx6VMu4(* zVIhQ(wc4)Edh=?i$ilr@ISNR z+vB0!bGFaS8yP7rof4ELQqufZ(u^9}IzY!lxtU##LadawPHRQu5_d;j&5S^VH?2e= zvScdZ&MZe3rtn3v$_mQ;jfI;gW^%2|-?|p=efb?>Zwj|i%wsg5mbycq2sYV9T6~MM zS2R)aHwETF@208i3Efe$ENx6R;M!*YNpm$NXjnMs(~MokDoI2BLjUggrutfcq?kF3 zPVZ9(HWT&RiQa!@stK)i*!#M-rlbqeDkXeHkxI3Yj0sL%rry`hKJ^4e>@)+^px%OT z1BTNMm7}eQ($&Fpv;hC_Kgf+Xj4GV9VIz>?B3d@67V=BesE()+zmj0@O)pVK$y|A8 z*W`a&@CM1h9@<)6`|Hna$a&|ECSbAzfXoccPJ*8ads{p>6i_bUA47SKu~ z3L8sQf?;Z$c!n(~a>ctV9*dhCIyjxsHYS6)6bkN?lO||nQ#}Tm zcSYzAGH}8$+>Wz_ZB{q0ZiVG=jZ{_0x8?@nhMvm1CJ|qr+r=WB>6F`5P)8s`gMC{>x9-ay4X#prJ!B&5jHZ#fwkulX zW~winHPC6JR$QKR?^g0Z?YM)E^u*eA50{zIv4X6##Pe62P5e9Xz&lJlguhO??r&}R zJx}9LFfSqP8K_7|kr&;tPn^9kDVrmMKW5A9zA`%Rh5}?>v^UGGy{{3=d0&GuF4ShB z*=0-1wOM`o0Bs3sevT9%Jbo{U1INrpn7L{`-ug{a;&v}hp@(!8%g}3GnH^yZn`I)S zRQ$Tntm?_lYgQd1yOv+g0Ir>{rr+97eYWa!g!7kG<@Ri{9GX%w$} z6F{99AAPXXBGSWC{_e9De%5BEH?=^(p)SS7T{u&+JvnE~)IDcrsbpxo&eWozK}{r_ zeS3H7K>du|+l8lzz0sORn{eTTGW65xP`0;heJI;mYT>?m-`-$4%ETJoT8>@@J2$g* zMc7(vfh^PKx^IQdvkyj~lhXVqmOmwXYAoMoZ#wD0URYa?{*+SWi4II(2WjVT4)vU` z%^9t8H94{g7t4t>1Aug+ZDY0&Zsy2*^jD+xo?0ic-4b=BOVQ}b?SlA-J6>|mi(Wz^ z?K;)Qyt%>kyLNz`{=~h`iK{-XGLNH3{Nb2^j`495ot>Gd@3JK54x1P`kmRyqB{NEj zTP^bZzF(w7q$||ooOdefqc`aFQioHwGrjVgSM-w>a=YIXvZ!o^p8{k8y@c)8X7grD znOs;_9CNR6Ae;23ZoqCOTz!JFvgzTd6gZuW{q?gN)56qn{J>jB3n85^!H#z5q{S~r zShli)bVuWYG7WfsZsP94sY#jpKmj^Q#?LbMc94hq?C_T4`neOivKO1u?31x;rT01* zD%^=$odWl+c3=^cd#`z=uj@6W*zMK$?H0~CzSF8|=U`txVggKK4CBk$0?PLHk)s`M zAVm1#7Y#mc*rLt2Z?8mNbHA;_WHGdNV}cWl97_h%FuXoe;69?ER8ltXI1M|TQ36}} zH63<_N_1!Jn0EOd#FXKPKT2?YjVG@1b_GUw>wBm)w<(79hP`txjx}lcm$2%?W*Us8 zFsZadyV>AKSG2mM95v~5MPOq9o4QSCD&uJSGW=t|VkIHNb7pSj2tQxP8q{e<_27yW z=jus=n|;@X(YW4T5~j!MoPu7?bU8vl;veNlNV(^fvUMkI%U;tp4ma6*OfJeCX|Qz% zbG54M**eAAk(X=@Mv2SymVKj8ieQ?edxtNZ=A3N-%Trc^oGrufGxlHzQXsh3E~%Sxof|=a z*}ywyZ9atMD~WjNB5hXaM`rZ^PDpdzti`l(DM?nOQ)Q{D#@IrCBt@l)ikH1mnt+rl zZ6n)x?hMX>Xno$+rPZXPbqcb5K-)lJL)N>zaTYGD2I{1m@b*Zpg!0!yITdW~v(>}8 zgWnn_S`|d@!(1@m3jB%RRd}{ZjE|#^Co+X;o3L;n*)3|?r`tBa!_2w!gDxHRd8OPsKZiU$&oA&AemQhRFar&9#De#8GyI z-jQ#grB;JSGq2;>h~tO6==)F10O;rJz>#~mFMMcj`m;k31Ffqpy0`%nCw;=sL(6Tm zh-tB1#+${qy;tT&6f89ADUf@o#B~>~k0FFEPN(5dRdcK(-9k*P0?L@xa%FdkWsnj^ zOBAOUtaT@KT-w~6K%Y!Px$Osdp3ClrcJ>s={IZkDiaxQTLPw<)yBohXFDfgUJiU-v zC(R?;A=ctWCFc(9_K6j_O%dC~h}j&p!S9^7)VjFztkBkLMOON`L!QsRie{?%C|IRU z8)c=fYd*rEj&(&)=02W_%y7q{1OAdrHB49Y-pC$*jxnc!y9KGf1nGk1bl|>wY-jI% zwi-+HM2^nzHlg*)7AV}XVj{N^>zpLz`tY5*o1&9bEm5=j4gdW1e%hs|y_a8qNVX4G ze%gnQdfbkk!)ChD1h&hqt6G+<%3*H%vf`^jH|yh)K1Jv2-2zv>of2Ma3jZNPS9z`_ z=4R1Z&psI-4eHqk6+2HoOEIr}4r!W*%&iuf;o6goJIb5u|CaxeI z4TZAL9nUQyv&l(!yMfS!3;Pcl!eP%pyiHZO&+FvG7an5jXqKheTGvIgT4xJ_GEsZj zx}oTk_2anRi=|A?NB)>PxleWekG}9%rW5s~jhVXJgl=g4f>>iyz1ut2DkqLUnMJJY z!2CHc_nso@u$MDf>gpJS+sRY_6OSS4wm4HEQBqiKo`thkw{vE5WRA=hxi9C*kN+Bp z|B9t`nmX|8mgnx(5;{4ZvkiwXnRss}DC3I_dh4ew`i_M3a_T#CzlTd;|AJI>JVn!T z=A-I;{To~+;cV}c;K;ucXD6ImpDhjd!&fT;7qc~Rz1K(iDO$-)bkIWWk$Tr6$1TUr zcTmR8LZy4@DEqReES>5LvTN-AM$wY-aCyY7Hjatb`QfaXyf#Hg-Z3WFSZ|hUSx2E& z6s+kP=a`Yx*`vglR)_^NpBZvPoIAS0sO0LWh1YUe0xKtekV3CgpR8-D3lAGm>N;71 zP&e6YO-%md7~BWY-QyM}%BK|WEcN*6>V$FvSEpEN{?4$x%jkqv=M{c$6nywY)6U?*L0;j$T2@Wv8o&1(qYZ!a~tz-O)||PU|UBu zD9c-WH|u{x{qp?q>r!PlZ;Q-o#l+nDE4`7qF-n+gp8mVB!F){ibw~FFEvNpq1B*=4 zvh6o#U2m`MxMvr{cqxE&ISt5~Nlv+QV%|C}YX@{9oMzSWVfNfz*I(eCopbIxJW50Z z(his!o%=|IX1C$FQd*l17Q2^oGWGF>3@^TU9ZoFWRPRP^*GESu?4(JoWuGtmZclh( z4;6xG@YITRAc2WoLsOdd2)YITHZiSJZ$sDzqU>WSCTW&>KW|f?tL;TJzpe*&bNjX( zsta} z`ql98WvhU*wSSfqs)OgmW~caKv(BNTo%Sc)G_F;~^-(&fyWkuLepnz#)_gYX2yRZ) zISE>6-dDM;(CQJZ_We84-X>!8=4ijvAe@GX4V7^9#uw6a^6buT{l+YpN~5&eVRFCi zC-HM@ab(UNmz0b$_*Bzi*x=4Ne{Zv{#<1f^)JN~thfT_|K|_!8A;6B0Hn)10FXz}Q zXDC$!^ba;Dx9w|44KGQ#`4dAZgPofL@tk}@?h?MP9e1-;#7gJtv`R$-=SD-P8m?j= zOrMl;g>6D;=M*Udl>F^mR3GQF!LJ3?Dw(&icuKy`ONX(ztu%V(Mm}S?ig3ilN1EDv--wRUKJr!P&eS(L zS!B_G)U=M!y(N-+;~W8x7` zbXD;$%<7-r26_7jWSq)R;+$QeyLZ892Y%PuQqrMErNYesXqBwdmT|x(JUOWEbvp^v z=<1`;yOgG;q3I6bK%K2r6@zJPtexekek=)00`y-8xp6vr_m;_YoQawpBG(X2lR_4p zCmV8Ymp|OYQNyfjViKr>0M^NHC=$go=}3rLLdS+`e~t{Ndc1#Uu@B` zOS2DOIXb(`+3Y61{Sw#PB6@XZ`h1i``o3SE>~{myJp8s1zQW@Vdg*z^+1* z{O?G+4&L2f8zpT1wAA1xK5Rm%GU=epna0aE71-!pmMxCLVvRnZ$oXK-XSrFRf41A; z@)@&Qv@SoIOtqh@m^Au2*D_5$yz#J?bC1EKovY|Ur?yDaC^6$GOdEideKnNUd- z!~EG1PYw0tLdSqPtKOor)UabA$)KB^`_H(#oMfLE)_PXi8od$ipRQwm{y)^=1udEd zW3=B5BwhJoPirX&50b53Sl9gy%g-GMat=5%Yj*PaD{-=ilG7pPq{_vtL=cC4fiw4> zm0He3DO^ISLCAqj@gKK@-K$@p(e?3-8uz-1i?+2Vo7?&c3-5iji^c0aW541hnyLMY zADi>I>ipI8c{3!D>MxO89b=v;~a z7n9dIzW;gp)QRQ1RNh`#bBh|!D(!Xx)W%Q8Qr5;sytZ>a7x!- z_1d~c{ud;wO@#mRI=%ryrJRHdYkaG=m|}?-oR>qyPKw zFS((!qoi5_-JF$0CJM}44ebB31X7UU_LWwO`gjosJtR8Ok{@i{3uL8x>(YGF5@CyBc}BnK@Ya|AgvYMb<5D_Fc=? z&JZci)!k@`p;a$>s8Btx#cH@SX0x$aA#!5JGe{hrk@ia1me&7%M-Ez?!V7Ib+m+-= znt-8Yw(nrQ3|UgjU7|Uhh)|g-j|8~fXeEaS_MGg0;zcZ5BIT0Lz5kqvKAmYh=x#}7 zQ`1oU(Lwu`rt-h{9;9pDxgS;`2N}L?la5Ym{BMh!t5|ZV&v8)|>~qiux^JcF%}n>= zL`NDVud`KFLVW<`>1xTn+()i-0uv#T(4-nd*~lFwq=?|_2l~GwVK2t*Zb^7uiAUv}J$YCV zo6g&AluB42PQ^xXC^7V;v>Y~;r9t3j23~OMpaQfxkXr-3k?a3=`+cd)IqkF3jTF>~%d$-gSw`c!J0 zl64)5D#j<*uWx;)?Y>p3^Td4iQ7N_8B>iD>Lg*uE?$t}yGtPv*GR6nFqx*3Dsd|F z1?ZK&s8izobbV3M9+tatz*npInrYYtNGzSE)jm~V3w8IF9$74K?@#g;r{5#wwE_-| z*ng}Zr8sGytaGo9+Glh8f5_mqt_7OEwaL6I|0sqqEp8u@XXq@tX^%U~bFz*PWhCRM zPP6~X+G=LjJ+|ZAQcdK9Hra7bM|KCmX$}6XRa#e`D@l(i(&7J;4e%q{P zq#Uy$nKJ_RHAOu>3=k3=+ZeJdPu%($`OYtXlxmRGOjnIQ3dn$A5HP$;$Xp?8H?PXaLSqq7L-j6 zw>g6aoB(it=$NCAtIJ}A`xDJyG5MWQDdxkiMOt|c0qr|poZfPY3qQYuDu&5Tqy7uj zC`3W9fH^T!eG=DzLQ`k<7c$?nCg@V|rBm_z6iW`Qmw{gJjcbT&d^)K^5aICq$a)Jmaj|Hn%1f4V69R+~^1 zD)r<3=peET%qn#Hi8rn&15R-{J1RY^2PX<1>rNXgY2k@Q_iYcStF~Bmwg({%zvY{| zWt7qPBc;i9DV46B<0oO4X-{+?JF&(e)q=Wk`&gul+B~}5F$P(ibo-+pOiU%%Z2dO- z9JKakBmS@ZiOx;@T0~(VuK$do^%M0#mqPdCVKIa{cN4FPO`49k@uF=pD;yQ3CKbNr zF|${nAf>9C{`qO2D#DkRlZWWdb%FGY7AF5ERJ*A^Hj z1@wt*YM_EWWB1XAVCT61Jf(k?2n+rvHrs2-?odSf5VtoP7J<_P5|Imml;mgMRgbn$ zTlr}fVSfAnBw}?!P1T!$tK*TciT@UF?lgk7BEt-|PVAg;7db4^CR$;~UfrwttMh0b zsa+j^NZoJowu+pz?etbBYL1|AOl*ezPdclWW(!fGLs;}X+ClvlN${R^AnG@Hrfcy3 zZ+WHO>H zD9LtzaHiV>0uV`?AkhR#+p|#=0g!?WqR=RUCiPQh$E6lpba+hcCmzJNkl{h0UAHoehGMQoOIP-KK27+aU%1XpxTpps3u{I-LWh z_H6DD4bF5M%ntae53UuVDq|Tz$TV7FYE!iOfX^Xq%FqmYlPs=MSthSxUx5#^3D^30 zZHs7~H{c9G?vaLwH90;{0EkTjWHw&W3C;%>=UgeUq_dd6A~2wssNU zBz4$2h{#eN5WIYd=5-7#2fA?*0}(-wUMQ4)Pyh}~LEUCc^AzDC%Q=&aPzd_BP!Pn} z@-$&Y+ix5o0yKwm$&=2koJ2_~NJkWzj}1kHBgvVPaEThA4aV7;w68dQZ3`~*h}54v zP!#P;9BxR&8p#GMTy@Q>=cFA_?tvl6R*xv~{7*T1{&|c@dB~L!c=312Z6421@KYwW zKHl1`e>aZcPGLs*5VZc3Oi;sV{iC9NC9&z({M$Tt@S%9iM?czy-gKXLf7p32ab0NH zS!#nRx<4Y9NCwJiIIMb7>;)%JAe9&X(oDN$Lt-^Y;S>-; zd5=@$`_0IBp`&=y3XK4e>zmK^5Ppb-k``_S^fQ$00*(;hHnWgh)5u_Ps8CkIvqMF`^BK;LA_~9NJmyDUDnwPdmTqXTt&{EQC zM2etMlD5$oe9GO>!&=6$SJSsn#E_sGv(Oh3Vv~_!Z+cAL9lnl67GRTl8>upSW&n%G zOVVACTi4qUT^Cd>WyQ&@5wSt{ptpz%cNau}a}P(OodG(Xscu(1kq`vKgr4yg2caTi zdTb?wU7-9WHZVY3_hA`+9Q{3^)vVPS3Et=a% z3OzWYy6+#k?8{KvES-ADV0Tu{86DVP8wHyCXmg!|dG0{y5sEIGu=KB+@=3k>9r~p1 zA);8V=X};a0_=!Q_@tg$0Pa)z7CQ1ti`D)Aq>g`XnA68YEyGj_4_RrfWZ_Tj5e)9K zh%4M(8Sa`gjWRYg`nO*|a=Jc*pgu6d<><1h7_w$2IeUgY7E8*AVapgWZR?A{PydtCa2PXdW zw^WkKDCjKm;sP$jA1k+iI7xk%B$-xrj1>y_V!Of=IE}DnGy=eIJv^_jnu?U$oSCek zr1!B-Y{zms7vT@TOf8m(OuW{S8Segw;VsRjFsmq zSWl_lR1xmeMr2`sChJg+s}F+KUh`is>J?my>k2gTshsr+z<_c{WiEh9 z8*02VjDVny)>!-t!VV1^g`%-LM!7Jw(r*Ih_4&8gx+(e^k2Y9p7kVl>B~Ff&M8ZD? z&kou{DGmLngtN}OTK}ly5$6sCSucb0Ujc?|mr?Jt^h7gmrc+&1sX{f87~;V=~Ryw7}8IVf_1RVVL-sFU)82VY=k%aG|D)Queu~0>XBuk9Q{q zpZ@yu;o+b7Et)iS>?882s<9o!xAXO#cNnE!cUhj0|Jp4)?+{53_#anS8^ajCv6*7-?P@s~}5+<)Qj!67C64Wvyo z_D*1))K7g`JUPSjBMlZ8tN;4NmtTDGiwB5y zH|^>?*2As0Cww`1c}{-&%_oObo(7)$_rv-BI6hjZ%*em~LbWIR$-Z3w;uo7>Hdpnl9@jV6)YbMAw^S=UAT`V|9S??FXUuI8Ub3Y4Q_f`Mzq5N@UWeDJjP~Q5AImpsKJY*JC=R_D?xsd&HZiGW{V91!*^;($x zd{ou&&<3fDec4*Dg<>aIwHC;8wl`uY6fI>AQ4%({W5T)4+bTQX!U7~uAm3Jp3BGz$^wjwOtA`y7NBRNIb_fw zwvCfoMkiH+0>M8T@CvT>Anpj;9vEZ8@6c`{%-P9q7 z3wsI{==?{oCZp>*znU&UTQB4&r2S4#msUSNcO^P)4EDkqtdb{TNHm|$yRRk(7eD&H zb7mC9{OVWv(?8^YpPrOdJfKF0WBEa7`3q5jd-)FZ(2G&ZT-DDP@2ReN+-+<==$>5s z`1)Mihx`5D@D;C-=p~33qK)C`4E z?;lOOjf?*v)BmjeS7y#Lt}RmuRb@rVDO6+>jzs_3Hh0)`LuF2n-U!5|pU#Uz7HM+d z1O1LP3_6_f-clXt)x}>38eZL*wl8rhk9SUp>tL}9l$5~jSwGI$Er@>iwG<4&pja2S zL|gF^S&cur3`zXfq2fd2v;sp$^DNc;+%@``Ad7^WGq7)YNi?$ae&x{Q=2zmaknT4Z zKZ?&T^33hB_w;=Mt$*HbX18HD*@bRPvDvYn2S@Pg;0ji90w;L?aP;%mL%`Cb7R4CA z<>Of_aYk^GEtwyJ4&6rkJNVP0T3OSZ>B;xPlWvQ8v*#B-7zucJmtB`M!5JGLgv+_>R`DFQ51h91Yz&|NX{{c}px9Kk1a<8-xTrr=?gR|qQ{rse>O6a&1c zvTXKqUc~J?CmQGFuUkR)B5C(+!QZlPEd>;kCrR+M#PstHGn}|!jDIW!5J&=V3G*vO zW0Hz$M=ySQb*QZs4o=^8o039-Tx8mc_QiVw3TE9#FG=xoByFgk6`M-OB4(NTJhVKi z@rF_k&)P}Q^og=uKiNBNZ@dC0-c!(@9H+5pYdYnlj+%ax_WzL&4VW!VCifA!|PR5 z{=sXc;Zu+mI)fpI8NpHe?GzD#Bpsb5eVJ6jT=nQ=I5W{^Fw-uT?w~1PfnQ3<7fs_| zvgECE))auAgOH-eeDyRzxhK~(7R>8*S)6};VWd|rr|IYQU;~jf)`?V4xQOUOw{e03 zs9_ZbIql@~=pF{nRQ4!`5iI~0@_$ZIa`CanMuhTS{6G;j4>oN209-%>!P^j28_Q!6 zn47DL=p96miSSFwHijbjTnNNwf)&C^{(>VvSN*C&e=~1EW6!iV5kTnKPiLMF#o2kL3tQ6Qg`v%zK5qZhm z&b_cp4|*il2FV6h=C>Z6$Mp+VYCVM$QWem;><3zolxLgNf#p)?zFS)2JZ zi3ZQqcKNO}GZP>Rb>SU2O6u{lLf}?@BnTIkNHA<}J$|&)ZSFqpHpR33iGMs)@Mw}- z&co6OhqRWqK)d(7hkN(8pKY(10f*&lASWL3bhwP;!|_6b88Q>yG}l-FCQECR`to*x zMR>xNgWJ68H>BO5OC`XTO{J9P66hvFm$W%Ey2Cjqh?vRir;qwYf(sZBXfX}pw!P89 z6E?wCQQ_o(9UD(Wa)q@tlX8tANJpS6qcVinI{=c^L_rf|MDaiFk9GUtx|C%Kma9u? zGMCZL5Z<60%q4!P=dGFGM$2zqRp<1 z{z74y&Ajo7P7HZeCFFv|a8@#3Qw2jJiEo(i&tOBEF~F$|*JIzr@*@FGb0j^rO};!?i^z9ukv~6xGQNkS_Tnv zjEuxtk(5PR&LHAu#%F$vG>(e#gKJ$$n%GG=A6bQFyny9On! z`I=TzY+)iKwc}KEu%&|>+t>>8*FY&vq%C}9XGh+^3YNQg>E%+#AxP+^;Qx%!YQ4vG zBbmoLD^C_xxX-9jWNc|dOiO5&L05fu!%mgvcWE{$D5g?I)!y1(c5LZ{_g~>o*_po7 z+vL~(^zwg|7_+&5%SdbBZfY#%LP5+k%gI~1B4ABMy z6p20fnU0}cT0d0aw0v>x+|AH{Ha0+k{7=ZCzaI3J(wo1A5`3^Qy`URT@Jf3&7-Zr1 zck_SmkKM-@5ex`HjpcAK0%{n86e6r0mWNb=JG}lFIb45SkKYf^io+E#MO2~Uk(^TK zY%dS>zxcXjNE*t|NM{s&1_g}HFX>*iuEwTUP@Zh&tka5Wyr+Op+g^&*Sx{D!=o$_! zRqiBC$Uxa3s?Dt}bTp`CVTqX~grE%FNonu3No^9S4G_v8tyle&j;7=XOlorRq678_nJpx0|^ z7#V!)xDGN8hP6=+P|WqtgPCW~<8#@pwG(O5FwzzSENd?|xPF(AF2>q2MC*+E^zpS9 zb&A0D0uOVP>(a0MlE!(|L3Iim`$lZ-WID7wrs>%aCO0(fc(N%X z#zqQSGhb<>6g6qA7y1cPs7kJGKHlDVvb|PGR-?|UpS&o*2w@B7*%8*YD-5lXA8+qG zdba&B18=gu(~JM`?Jc{jiwo^)lwPhXXl6Qm@fTzv35>ea{6WAZf6yaE8i1EK0jJ10 z2DL_Vy}_7g2&Lamab>^^b9}I;sE8WTv1-_E!(M0am^FW4S#1aH0M$eZkwHh>?p!R> zV-H|QMhrNcr zP{ahS$Z|$F+HH@P@9|A~%!ue=zj)7_)89D8e#5bn`buV?V>3kH&>RGHSTSKv@}{Q$ ziCu4;2oAcC!NDYo@&REHnz@32FEXZGSibO63b{FO1Hh^^!2K+!RZwd~-eIuwFsUji z;PX#qCoS*YBk3Zx<@<;pSh2A>KBk&tZhwK37K~c&zE-GQ{4X^Y?t#Ji5B7uX;`BH{ zclM76jy=PyeW(a4T-=gOi3LRU!DL-7UiteYb$EUL8a+IQh}3JqggRw2_m| zPM3Dz2#x5rDc%oxmzl!EENv(f6kne~WG%7vZLDF{$x3gw;gvm5&<+WK_S48fD+J~c zo3XwQ$Br;1{L9@A>`6ZJ{>xSqbA#U&lqdl>dK-CX(Tmr%n0J4Kc}92wNZ$S=@+Uq( z8G!KUk-5|UZWpm)enZLIisBu`TC*U0Ec_b$rTWg(qA?ti1!mxke9?GdX2|0NmPpy` z9%u*8SR10XkXW=R$lA~UJAR|PoTZ;ZKK(xu(0&6-!BdFZ!{Y%vv1{G`ilFvoUe&Z< zFi!lGhYDhi5P2?hHMwhZs%mSZr0b0jokjtNV@dQkab!|~Q~Iw>ly7ZI`@lk=Vf)qX zq&2-}D&KTZN4`-z45B`=BBUA0TE%s&1jlMYr0 z+q73a+$qSDWw7d)&$)bzL_M^}m~DhR!$Fq@p~cc#LZZF&$V!uyTLs^eomF(l9B2GY zk^Bcg2;jQV8dcOTbOB#$o0WhRb>likxEOvJOUv@h@r+%I+C~Gk5LaMjW3b}y%L}8E z)^^#D;~kckq05Z5i0?cRBV`!?Qh5tWKY}4)T5;(ee}giG7mB z79phGfHCaqcy69 zZbdFOWjS(ud|x6uq=@>3KcZ*gu~$zW+R6F;F`{cTCK94z0wWHsD#O{}dn~u=RU&XO zeMhuI40iF8Ml)DiqikQ^2g`@GQy~;}&2<*`Y<32_y+@t_LP0p}Ia_Ii>^H~@apEK_ za<;;MxF5E0yb-(-R*Y(OsXqQ~|3)`Pl;=iwVI)-VL6Dk?La9?(MuLM=h)mL1dcwt+ z&+JEJTlR@MJW{0xg-sIh?g?+p+`5nb>R_FB_Ii^U>#Ii>I{_PZI0rZM4Z1XGm)nj` zImE7yjBB4@Jw@xPy=Z$)QU%66wE0((tDsiEtqqf^UAB&e+iQRzAeV(d3yvu9F}*$M zc+56JIn=jENBUbo=%w5HTOf-%hjgLOyUJ4H(hu!=Un8jA?1KitWMt06j#r3SWYf7v zU*RLYI@{$Pd8&u?9AT-8W!J`SqN9+@1H}t~{Pec*q)0>-euufAU<5uO=F{yAdX{0O z9fh2@NAVw-P0VbiPEkTb_8F|flk2DJq`m;~i8l5HJ{=-)`j+Ho5w!Pu_IVCA=f5~1 ztTx@~Pr4WGRKuXBO*(#yaf&ir#%9N`P=wB7~BYZHd)FT47qo*BM13+&Y*5=YSz4W3~ZqaY)eN5m|HQ8xW`%P{CfF zMAiWc#xNhJh6zHeOj4$+fzHDn?zacIL?mTvB$AZqOi?3Frr@nFp(4l*9EJ$_4V(Fy zOhrt>QkSAlwHKQi7ZHNIOxb*lYs#U`&b|i&DA-m0q~g^r{j-Fa(U{6>U_BA4Gf-F$ zsnMfqQ`62txcbJr6%vhn-nZ+&k>M)6k|k?LL|G1zxP}m=5evq~Yqtb#>pe8a z&^S$n=<<%xQVJ{w>j>Zyy~@Z^BW>cv78bE(BBCxE>rid^VtzWtUI{luHC70<7+1!I zPri<$!l`!md8ggD`{?2Q&8K?<7plW)K_3}K5sJVE8L&)$w%$BRchuc*X-&JkN{4A=+R9EtBkOj` z_3W?Y$fwk(`ZgX`B&DDm-e?D6=^G4Tim+R#?M+^`R^+G1qA)aP_7L;#-rl>D{cc04 zVvWgQvRiCL5WEo=z;5K#O{g8!H2oU%g^iMwAuys|8vzd3BaXg@rowRwJt3Fk2+51H z4R777D2?>n!G{1>tAg$`M>d4DYI1*bqq{FL-eH8ItF|uQ6uG>~Icbq)PoUekwyC z5(E2?u^h`d_f8U`f+SCNq9E*O7^qXd=CRG<_lrnh3(QY=w=QxO6r z^YkI@&1Q2HMXDwv51~gCJzYU9uL6z= zp4=P4euE{2Y_hkpb7y1n)vaH)1LY7BL&Ifo%B}aS&eJCQ%GbHXvIw~Gcoz1gVUyDD zhwQZ)yCqq(&NQkQ~ZcjOr~;o_#UNkQ7@Z80GaWu^c9DQc5Fhd zRJ3I@VuLU_lqsdUt&m?Nq2kZKtFIie+Qdw3VVyT}jJ? z&^s(CRM{_4DYhACS+{%LLI3Qwdu?4Wop;4k)Lr~9WNOs3^qM@4e;J#taPMIb!cvaH zBJtd(-#t{!hFthgFHdK#7_{Qvq#H(*ha_g`Dk8ZZ5@KEtRE(ggK|1=VP5_}AH6+SA zEDxX1S^PEVoUdGl`1^*PO~04L$|+}%Q#&2Y9q1i=$=^?kA<>HN#g7UeTE{pBqGjH; zXhpHd0HT3#l7-B=5ZUKP7e54CNTVt*EA0^-5vJ|SSE!P>tk|^D5`^dCxN?X3j(F?J zHLcUtmvv0M*iWUl3std(q5^X}nj4Xs3lkiS%p+XqPMAEQMC29zZ8(u+X0w~UU&}RIUjRTDg2W<8$ zfMFpsE&66GY%3MawgRQopb^%_tp&CJnw|<)nX(X9y9~cI@VwN|DgXK3Ui|VHpgbq4 zgagpCAF$Zx`!7YT?3|ZdG?9fxx6x+9hT32@4_A80C);u@e?%J&{)7TA*!tAyPS!?< zJE|`fjt}N!S6*SQ4n_A@t9fkQHTM%v3H>Is$z$9K0k9?N-q_C4z>#)vdI@cG@W zd*nzZM6%G9iq@nhPIl8bUOrl?7DHtMG(cm3Hw#=tug2vZNj3PT{M5*lQuW?c<=f%1!)bk$WyS}V*9xTypM{`xtenA7 zsN5?SXQMj6XUNBbX1w!m@82GPH@(gsG%(B{On_-}mex(%9gQywybT4Q)G2s~eKU2{ zs#NM6d@t0uUak7`g5Rk5-iN=L)|nLc_o0}WlJ6+>!&mSzg^!S75fNZ4no=J&2f~uR zf*DTiMm1bY?~X5(FGRaOJ}-U_N+qtsXxs!RD{ouOZq%w$MnG35qXXEEa%=?ZZ|`lc z-DXwXHi-r);_23|NLO0BxAEY~<_;z7!N9d@Vp)sK3y&g@OmQ@7RFL3^A3VD2bfYUz z^mzNuqer7teGIt2-}v437`QP;FVb?Wn|%YB2h!~>h@8rlOPA z5kf9)nz)0a^~ju}?GCG_v@Xk;I9%QMm`^9pPy`HrnmAgxfk8OC6E` zHCG7rEz?I9bqiz)Yc9Ncj=@0+iR1%bQh~UJFz(ZM`uIM0 z*AFW=xn{5itkH_Ml+l8o2uc=3`f@+9p;Z#s=pu5Nbmm(v5tYICNqTD~!b784RUC;G zdoWCEh%`O6H(t0wRvaj;p6~BuhTeZo`1XAMcdQK2LSniGGil+U5=iHA*k}bD>~Rql z4IhV&bCYUSR4Nm7#$^rHAZ z_)+MW!L-5xC=wJl^m%;no|P|aVT)@T`2dTMiJ*#_eW<`X7+Uf`Q3{7y)RDVK=z~#Q+;*1fsay$m*e0!uI7D)(%#~RYBu`wjC%tHy8!DMTbUNE?9($#JZs!X zeyfQqpZ%xI<4Zi0DTZ`OTdI@qYb$h*^7KOw+TvUWA6iR7{Ymnvf&kgJMtauZ;!<16 z>I{U?9ja^QXKC2Z)WMC%vklx0$fS<|%*?w{eN@F@OTWlx-pm^p3j4y!7`o&C@1D)h zPbuC>SVMR)hu`{auF3B2Hut{#s;Gft$65f7|IH&7w#bTHOr|QLqbrm&T1c4Nq{(56 zL7n*wOvXSfe9np;cJXlc+;W!wjxrqBqR=lW@WKxo;5l@e8yP*VEix!``?8dYirLn{ z4=vp+XS0F4yY>LM25Z5h6`>4TfGNb9;y-6=*g@71rQrK#j>wkAh^3=#9IWiu3nLzFImc>(Y|)s<#CKO zr)V?^GKQU5bVv5)n+|_; z*S5o?tD=iAB7-YruP>)v&g)i#N@&hS;DN~;5wFWpz}RIG1X6QIRjrIb9GGk*S2ew4 zx+f$Cba*4T9>zO*VIq)}sd5g`HVpif)Y4e204MLl{o?xB4dxK?SMt2 zhRWEW!5~9}!{zf!7KnZygd~^Rf|5Weav8~^hk=c0Z658;<#kk$k0@t`WlCiC<4M*I zLds*4`+z9zu;`}}PbO=H?iG&}!Mpw0{9m8pOr#>AAAq@4<8gI>d7q^etN^x19co?g zQH(shwrYiKCnzcTy>BkwA0v>h?ojiA7bh9+G7&Fp%^)SjM2NU>bii8$*P9awoi`JT zX?rrm5z2<-0xxMu)Bq-FyDhWvO0dYLQ(Hg$_QAG!A|D1|i7tGg3#4QP;ZWsQZU;t2 zKU1GBjSG68VE2!Jn&1p?muHfqoO+DQ1SU1B;(`&yei69hnsmX#VG}R3F6UAcms6 zcIjHx&=u<%)>0fiOa5aG?NnSZZY! z&EIuYz2jK7&8HIyEegUBwRIgF``VC&Ngt5!vvz{DNPVDMv-M<=%t3jqn2*(^pSasH<>p;Wj=Hgj=b59+yV?#sj>qh^$1wR5NdQ2qF1ZT>Tlb? zO%>Ro;NJbo#qU8h%Fl?2q@{$QqXFK&E0}lce>|glu>$6H&!4Lvt~WEH7TNoinK>N4 zV)c3t&o%mNUfu!Yt9|=WQJx-4kImR% z!T-m4+8a|3E`o0DaTfm0)O4H)ao7>ws4xXgCJX|?yJ{eKP)uPVtWhk$xh~bV}Y#hlJSmX zVD^(%xGSbCwuG&cj=A_X zGBQVE+omJ&lo!{x%>SH1+MJ@_q zHk2;ej6(YEtwC#BRkSfjOM<)2otrSiv6m+H%H3fe4qJ01)0O}LQ7#udq80Ll@Si;U=_!D5 z?Z6lriQyafrqt(8bA*ypESo7x;PLe0$M5OE#YdRr>OdjcALImCn;NUs-YvZwAjD|m zK{I4XOs3xyCN3O^VD6eUA9XXUDY~}`kB<4vzjDk?*_TQr;oj!n{Z0>Jifnm zXJc<$khNgj4;d;zbF*@%;D;pX-0Sv;NXS@G?N!|VMq!NKcfs;L%P1N-!k4o_LQ{Qg z&PSJmeVWNKXA75YlH3psm3@Aprs2L~u$T=5>cdvCV9yWUM6n@As`9mDYN&q( zZK&=*nf6MGjrM~}oo*yCe{N|e*kS)#%KK>w(I6otTM@K1E-h-&m|yOvjY#&K%nLFX z^IbTevNEg&5<1vZB;!LeRoaoxgrtN_sJ4wb6z3)>`r>`xk#zz_%lFx~EK;eRtK(~z zW#o}GkYlCUJuE_8HtF$M52oqZ7(Kiu!po<8YsU^BHsde+BGsx;SvtuvALL;owLA`EvOo*3a7AL z!fP0Z`@m4AvY%!SU$Y_MG3(7?-c9MyPK@J>^ac=SvNopCm1pn@@qb6s5bLq@!_9*m$%wW^u%3bV-on24qj%ry&dtpa``NqI3-}Ug(maQDBrb$)(vGQ$nARL+3X9 zjyHk~hLW+m4RokjDL@W{4X68ZcqKY7UvwUwpwVofJt8uGamfYJfs!@a2uNF^I=FD& zJq;yP&h^N0l7ALclP^bA9mZy9`djQmX9i06QR^geT;^zw~+0T$?LE*t3aI256?M| z8do$9vxJR8ZAL~elh;v0Ha{MJ&th@8OTC4|i7*ZF8GpII%7%?0^oTkPS|-(x9OK37 z)0I0|7g528TT?Baz>rGul~!VW%;kXgsXWP(H3~vbZ$hwQ6J-8;JK9<2vXIqcM_XfYW#86aBMt~- zhW`-?o`rgAMJ#c>lR*>N+s~oU{;Z8d!1W#V^x*LhHc$XM+emD^!tW)>qN));e=@)L z0STX%GOR2Vu_OicVIMYADWW{X16=m~qKyM%gWS?YOb_;U?%dnhyQhQhQ#@;2B9kHX zdtcdrYTH$qJ9kB)@;Xb7k)a{wjwkk|v64QTfLVc1$F?61i$<7sNR~!rxy4q+5>kT? z4y&K_A_d_91IrZB8JMK^dpO0nL(LpF_2&<>>*Z^>376NPa$`(PCNz*zfy%dv3ZLGoT}E% z_==qQT1I(lZd2SCrhP24a)y9ZOQ7TiJ$~rpfd}zVOeXZD6UHx0lkia3zqbHh$Ka8y z7e@tSIYqR?v0y8kT+{+w_O8VdDF4ES#tVp;U7Ey1#*73I^ZcuhS1yJ?O4%x_d^esS zmIY>z63A*)C^ff9c7D3aRXs52Ya6V~-B(z;mS7+AF4oq98Qv+y_nC(y(%PI9&unG$ z_zx3Q1C4f`b;)Q*i4qy1(~+#rvc*p#4-nZ*iM%ww)fBBaDiA;J{H)uoNfZ zFl)}?717*;wDi%uMiW9@koGneXHHRv?|3y-Ic%724&~>oE{r$=9xOt)62kp$oEZO~ zj_NC!xOShLSW3)i+7`P)0;lcn9KD=XrNPGOROO-D{tpP|7zW7FCk>3v7M_;Gn>Qj}f+U{&PfCcyPdl%idHz^lB*+f;^`&ia)L)4u~~8vtK24P6aYibL8-xp{W^>8=Oa3$wi~xRr{<(=3mkhn9ZG1g1SV z%qP&XV0mb6Rgw^K394rWugPS<4;H1-lxi)4qPLyJS#ZF)Cao_c`wwMT8GE^Z>_cG2 z(`aJPn?e9tlSs`!_MMAhN{2iKoHKMbKG8#NH|@lo8Vnuj%t4 zMW1si9D@rmeDX~Iz?#dd1tV>SU^_4KvE$4ba9pZ72euU`Or3o|O1_;W7!M&77+?=;&m5 ze@djn2LNskb1E^6GNvpK&@1F-FE#?!(UWTDu1hMHoosoT z0fDp;o#QwVWEquctfiGYW{Qn-q~r7?Rv9c9-J96VQ+S8SHsKUKz`f#u{RYmy4pUZ( z8l@!JdMOM_bi2QtO)$}bDzoGgk5z|j?sU_wiB$o^l23R+<|9pSq4g3tNt>@eU!g?f zJx1r)jIG=)Te&JkZM1XD2O{>d7N6E%a+S8Eh=RofyJ|G9M6no3xtSO5m_m2 z0O7MaiL|ArrAb&j3LUvs@%$Wu2Wp%%w@rScwk!b}I2%kZ;?;%-AN%?JJ-~mvPYo?@ zt~MjB(j?8kRS6mn|FZ*8PK8zS&?(>xIDx)a+J@D8EyIVMKC&D=Z+Qt4F+uS>6?K4m zAcgVL9qKzIHZAvIn_yOIH0n9`5X7Raf+aJ><`>_DhI?`Ge*ef>4%iir$ibouGM6f_ zdd1cf^PvjjL&{Is$>Q|_rji?hAbL7@B@DosmXHS&_hNgYz~3`)Y{TQ@1eNM>%h+TMib)5Nn;{XeRBQpKM%S}r?tDYzdt7~ePJj0jKzT;NQ9Tx zokFzA?&hvz9(5gS;dcU*`7AjPNUNyL%O$YP31AOSk7OMI(E~vkO8NozFh}06 zm4_FQxnU_vG!aX@d~gJO&bSv#aVm*K*AQ;z~@(_R?@Q3Uss z9j$l6i_o(^(fzN-!?e0nbXBW$J+Pr%8A%>V0&>lcPBlS+eo^0a8cZs#bX1~akkm{* zv-psa8Qe4DNK;3{^JK*aWRYBfHc}@}38dsEbkxOc$=D@bX{sC<^M57x=J^*!b89kG zSUx!TkZ$+D<$xHGvZ7_wS}Olk%_Y}f>IOP<9sqYwKN|04R%5YBE3S+nFKU=z*-*1Q zxPtV&VatM2nB*kx`4Fq^|H?h82jI#*it<0&p#|U4WWW`8G1_Bn86d$Ddv)i2w;)bn zj;u3`H$yLz-pJNmi|IVL|!Afr8H#mJ)R5hJ0~4Gz$fGc}ejPui6dq>~_I&{N!QM-iMir!3UO~ zi|%)!9wjtySbe1rag>&Bo>$j8JUfwwc3I;~A2iW2=`|i;mIzwast>HGU(Di>F0IL1 zueq0(G`0q9twiS{#@AxE>Rx4~steOtKS-@7+(HJ5R}RYKP6qRc(Hh|Z`z#@i$p`oq zAWpF#s~)rXPFg{MSKH4vSZ3^PU13eZ08a7ij2yW5NxMh)cvprUkmc&=WrS%+Pi5n= z4_y2RO7UODwutP+i1o=6d;8P?t0fN`DXKilB35kIbjidU5s?MURGg`;`X@3w!!W&r zv@524mz#62h=UolEbv$f@TC?{HM3@a?IxF-&Ez0LBN6A3XKsKOY}U7!Ab_|Q80rUY z5#yNKtgwzA2kJ@oD4&>)8H>v`g5ADP(5iPtYB26_DrB2b}Dlh zCR72qK#Q=W3Ei6UA#7349SbVq#MVvXoVh^78MDwQ@#5-hswV;#Wu}}wS>-zYb*qW9 zzUn#>Gva1keFdbp0QM<|G6<^u&p4aG1Xn$xL8pFMPT_P^ z1SaM3a+55-LT@L?LC4~K#972$K%Bw6YH@6iOSrd}VOTx3*UD72OO!N4bEjI#kwVgZ zx*FAkar2;@Oz*p=;L_k93zzRWaL4rsM36HJr4qeT%tY~cVFrXVr~(l4WcsFFoPY<) z4y*aX;>(LQ@(f%jJ-_%!_*+H(5N64qXiaUSCSnTnsJ`b3^#bWd*CmZlwz7VB@>6KF4vC6}gbdIS z7MKvJfp%91N+b@OY!KHa{|QaESOB}qL+(twL7Xi0&*$TL*ulA4((EJsMY4p;?> zITG)}BKkKz7T{kv%L4yECKx%o7IHQ^z+Qm|A(wAHJ|t&dowlxn(%b* zPWMz#0;s&Js>`GoGfo|QfqtRETOVRpW$?fEvbs{qCkk&!qzVN!VT|^qL6S_qCzGg@ zR-xI!a%UzPD^?=a#YJ&FokiiRd;M9#P*M<6NZe z9CWvc_P*awg-2`N_1B#Ln?pQ(E*CKGHX2z8C!f5`RLzR8wBfs8l<5{xEW}{!4Yus) zN->3I7)>qWhIA-*s`RdfS_ajCoi#Zf%iLwGXL)C)rA2xf2BdLV&(M3VlV!q^0VSeP zt9%^CH87J&2zjFd+F1U<3RN|C1rgyFsL=u~*QR9MwkCkHtltO@6P0F@B5$v=h4acR zwgJFwJp?(c5a7uxiuOX1Pevx#KYs`ODatzaPgIv@M-_pXQ-Ovt6|nZyR6WI93zxgD zhp}b7ti2|EH;^N+q7GE{4AR5hm$s_D5d|UH7cNs?1FN|NE8-w>Y%8%JsZ6xGu?`~a z8QOn=sNNFwPNYVqcLC z6490)nyiYP6~ZfQLY~3Zx@hk~|JwKpJK*N*Kp%$pp?w%R;GO~1sV`lchM0c~TL1Yz z&UnHlU;-=faBu{Dza7OUe`FU$2w$a3U|+zuqfWK(j*VO-kwo>1T!KJpF3t*oe?L8w z>hbXq)Q&?a%HuL+BL(OxDB1zA_GVORtgVN9b|p^ z4N&V;#1YRWbHRSG<8>Q|3`heOgiX-oDF$_w zA?j1I%(v{)lBr5`ta7%Slb_$y4R#ikSe7YAOs71?iXys}BsV?ts?PQVU27(-z5V*f zqP9{VorB_^_o+sVqaa-nF&sxFpt!V_J8vKm(y|0`g(RSy^j!FG4T^1WEu6+uDckuq z>ED^EXXz(ATe$u5eMVqvbu#_aFtkQ^G3ykJfQXwQ&K`q`J#jT@P=ucX-*)4%j^z>< zTnnS9x|-fck7_*YoCxdy9ty@0tHUh4)e*^UP+(MAL_G;wdRfh55tvL*zli|t8;om+ z3(qaPpA}CC39}RtY}YIM9V5 zO7LiU8`*?hw|t)p(M$!6T>bXu#L96*Z%(n7a3dybZussSM<=dz_b7-dCyV3@33QOu z_862(VeI4Pv}egJ#o>uHlJ!u#i(kDLX^f6UdtbgV#BUpt^rYrw z2uJf*>fy0Qj7D+q%h$1i8o83y36mD5>IU&zpVp$rbroYX>#R`uUC2M|JkT|2qTz0f z9`XsWc!ckeS`r7{A8+p5+zJN^th2l|RG%5f!X}M|ku7+s>o7`g@|%B)mk7}0pus+P z)0Nr$HyRepfUbE+HuSE95K!`HCf7Hg?M-k%?Eh(Y{#su@!=zW0Q`g2- zgE+2p1w1}1bnvo1xt?rKWoSkMPIuvDXW@K5MS7#JIC!-Xn#y0fQ&Cg=rk4R~pm8Fa zeJPdUtX^r+?zjaUT3>-9m50#@vJdleKut#}vyO``Y)+Py6+2w!9h#=J0oG3nYf~g0 zt}&|Z+S^nr+>tA;n$qIYQ4Sh+RmO?u9tQ1BBQa3PkQ!_>O|tS4E0*~hg+^1y4eIsk z;s<`?P_x(~wlkYYnJf8?FnkHK9WEZK9^o#SiT&tkAf(i)YN|L>)zf$>MnTns4Fs2E z_QbGucV;_PB*japF)M>oLSx*7^#+`+t$Q6}l8pT_gs$$PbZ=a#n+(KUsIXe1rmQ?# z$!N^Zk&SR9!0)9bg-50>g#`BLTVvbU9UjM)m0*_|dV}k(L-Q`K-2u;$R#$9Q-+6JH zK6Zq`hJAGBko!IoXvNOQ3pyV=AM!(a(cojdR;$TJcT7U@vHjvYEV9Xu8$|}8yj@F7 zYqXwPmaK2^rb-S_3kc9jbt?6Tz&)_3y|DoWu`v@t#FWC4j09#_%37uKpZMQm6_@)W z-11>yDOoYXk3Lrh`jM7yvBi{^V-7!>&ee<}=-G-1xW*;=tf5QjL^MI*(z-_SZn>!= zy%wlh2nex8u?Y!r)CAc!A4VKjg#*A$ew9HxD~Lwncsk@LJ^oA?0X^%56%~)FQ-WNc z{2ubJUZcpIqCU88>1xNAE87>5<}=&nVE&3p7{bpn#Ff2lC>kaIY1^*Y5gL~Z67#ae zrD=m#q5G8hvQnpAW@8Z3H8=-57LHT)t1QY1QECzqH6fjgRLVUQCZ-y7;gN<0P1l6B z-y!I0;(VSvSx~7FOUFaKQifN`_|09i-WzFjy%SQIEHR8ka;rS)J?h(>@f?X%QVQB5 z-mzuV@+?{nZV787n8unYT1ya|a%b1R+3O}0X}%Vc^>^$f z)6mHZ7j}PAR}Pm$shHWC$=kQA|8_IDZ1Kg9PBC8z_2~7NR$6SfSQpHmeV1El5E+gO znwAYP(d3ByR;!ZhlgGu?S;R>pq$eHWPbbxs(~=+=6Lh?i-Z{mPV_O}yQG>LKfRV-!Q`F|DgdvkbHSH_L7j=lL-zv3( zGg3YW&@o+2YcG!8eiI8>pMSe{t()SW0)lQgUpg`BM)?gk!eVqO0QRm+L;b)-#R#uw zumLPzvrg|McDNT=OuP`<%4*oWLL2Qch1=i>VSw;s35$PGphK~&Y=g2T(=}6(`4uT( z45h;{hByJwK=7!QmLF|oL$LlI>9h157M;^*Md{Qv=&A%ZH==f`XXfixwm62n-@g>4 zSI;}-BbAevAF8R=1E~u`biqM7Uyt7p&%Oz?RA7#!rB^&9bK)1VfJvrS5vY*x2*<0& zzmXxeX+_Zi859!w8ch&}(wZXKrD~&OhFY&BLmNuCRD@WVkcyzHlsUrQ9ZW0Wsn2-E z_R90z^;^<~w^O*NRLa?$eT-KHIG3pMA11S?FwqSe7SH2E%~VU3O+>}A)_zSW8q|;? z, 2003, 2005. +msgid "" +msgstr "" +"Project-Id-Version: messages\n" +"PO-Revision-Date: 2005-02-23 17:22+0100\n" +"Last-Translator: \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.9.1\n" + +#: contrib/gosa.conf:4 +msgid "My account" +msgstr "Mi cuenta" + +#: contrib/gosa.conf:23 +msgid "Administration" +msgstr "Administradores" + +#: contrib/gosa.conf:40 +msgid "Addons" +msgstr "Agregados" + +#: contrib/gosa.conf:55 contrib/gosa.conf:66 contrib/gosa.conf:74 +#: contrib/gosa.conf:80 contrib/gosa.conf:88 contrib/gosa.conf:98 +#: contrib/gosa.conf:106 contrib/gosa.conf:111 contrib/gosa.conf:116 +#: contrib/gosa.conf:121 contrib/gosa.conf:126 contrib/gosa.conf:131 +#: plugins/personal/mail/generic.tpl:4 plugins/personal/posix/generic.tpl:4 +#: plugins/personal/samba/samba2.tpl:6 plugins/personal/samba/samba3.tpl:6 +#: plugins/personal/generic/class_user.inc:16 +#: plugins/gofax/blocklists/generic.tpl:1 +#: plugins/gofax/faxaccount/generic.tpl:6 plugins/admin/groups/mail.tpl:7 +#: plugins/generic/references/class_reference.inc:20 +msgid "Generic" +msgstr "Genérico" + +#: contrib/gosa.conf:56 +msgid "Unix" +msgstr "Unix" + +#: contrib/gosa.conf:57 contrib/gosa.conf:68 +#: plugins/personal/mail/class_mailAccount.inc:22 +#: plugins/generic/references/class_reference.inc:24 +msgid "Mail" +msgstr "Correo Electrónico" + +#: contrib/gosa.conf:58 plugins/personal/samba/class_sambaAccount.inc:24 +#: plugins/generic/references/class_reference.inc:26 +#: plugins/generic/references/class_reference.inc:28 +msgid "Samba" +msgstr "Samba" + +#: contrib/gosa.conf:59 plugins/personal/connectivity/main.inc:136 +#: plugins/personal/connectivity/class_connectivity.inc:15 +msgid "Connectivity" +msgstr "Conectividad" + +#: contrib/gosa.conf:60 plugins/personal/generic/generic.tpl:231 +#: plugins/personal/generic/generic.tpl:362 +#: plugins/gofax/faxaccount/generic.tpl:10 +#: plugins/addons/addressbook/contents.tpl:14 +#: plugins/admin/departments/generic.tpl:62 +msgid "Fax" +msgstr "Fax" + +#: contrib/gosa.conf:61 plugins/personal/generic/generic.tpl:214 +#: plugins/personal/generic/generic.tpl:352 +#: plugins/addons/addressbook/contents.tpl:14 +#: plugins/addons/addressbook/address_edit.tpl:41 +#: plugins/addons/addressbook/address_edit.tpl:89 +#: plugins/addons/addressbook/address_info.tpl:37 +#: plugins/addons/addressbook/address_info.tpl:85 +#: plugins/admin/departments/generic.tpl:58 +#: plugins/admin/systems/chooser.tpl:12 +#: plugins/admin/ogroups/class_ogroupManagement.inc:48 +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:6 +#: plugins/generic/references/class_reference.inc:40 +msgid "Phone" +msgstr "Teléfono" + +#: contrib/gosa.conf:62 contrib/gosa.conf:70 contrib/gosa.conf:76 +#: contrib/gosa.conf:84 contrib/gosa.conf:94 contrib/gosa.conf:102 +#: contrib/gosa.conf:107 contrib/gosa.conf:112 contrib/gosa.conf:117 +#: contrib/gosa.conf:122 contrib/gosa.conf:127 contrib/gosa.conf:132 +msgid "References" +msgstr "Referencias" + +#: contrib/gosa.conf:67 +#: plugins/admin/applications/class_applicationManagement.inc:25 +#: plugins/admin/ogroups/class_ogroupManagement.inc:44 +msgid "Applications" +msgstr "Aplicaciones" + +#: contrib/gosa.conf:69 +msgid "ACL" +msgstr "ACL" + +#: contrib/gosa.conf:75 +msgid "Options" +msgstr "Opciones" + +#: contrib/gosa.conf:81 contrib/gosa.conf:99 +msgid "Devices" +msgstr "Servicios" + +#: contrib/gosa.conf:82 contrib/gosa.conf:100 +msgid "Startup" +msgstr "Inicio" + +#: contrib/gosa.conf:83 contrib/gosa.conf:93 contrib/gosa.conf:101 +msgid "Monitoring" +msgstr "Monitor" + +#: contrib/gosa.conf:89 +#, fuzzy +msgid "Databases" +msgstr "Fecha" + +#: contrib/gosa.conf:90 +#, fuzzy +msgid "Services" +msgstr "Servicios" + +#: contrib/gosa.conf:91 +msgid "DNS" +msgstr "" + +#: contrib/gosa.conf:92 +msgid "DHCP" +msgstr "" + +#: contrib/gosa.conf:141 plugins/addons/ldapmanager/contentexport.tpl:19 +#: plugins/addons/ldapmanager/contentexport.tpl:32 +#: plugins/addons/ldapmanager/contentexport.tpl:47 +#, fuzzy +msgid "Export" +msgstr "Importar" + +#: contrib/gosa.conf:142 plugins/personal/mail/generic.tpl:107 +#: plugins/addons/ldapmanager/contentimport.tpl:63 +#: plugins/addons/ldapmanager/contentcsv.tpl:122 +#: plugins/addons/ldapmanager/contentcsv.tpl:125 +msgid "Import" +msgstr "Importar" + +#: contrib/gosa.conf:143 +#, fuzzy +msgid "CSV Import" +msgstr "Importar" + +#: contrib/gosa.conf:158 +msgid "GONICUS" +msgstr "GONICUS" + +#: contrib/gosa.conf:176 +msgid "German" +msgstr "Alemán" + +#: contrib/gosa.conf:177 +msgid "Russian" +msgstr "Ruso" + +#: contrib/gosa.conf:178 +msgid "Spanish" +msgstr "Español" + +#: contrib/gosa.conf:179 +msgid "French" +msgstr "Francés" + +#: contrib/gosa.conf:180 +msgid "Dutch" +msgstr "Holandés" + +#: contrib/gosa.conf:181 +msgid "English" +msgstr "Inglés" + +#: plugins/personal/mail/class_mailAccount.inc:23 +#: plugins/personal/password/class_password.inc:6 +#: plugins/personal/posix/class_posixAccount.inc:17 +#: plugins/personal/samba/class_sambaAccount.inc:25 +#: plugins/personal/generic/class_user.inc:17 +#: plugins/personal/connectivity/class_pureftpdAccount.inc:7 +#: plugins/personal/connectivity/class_phpgwAccount.inc:6 +#: plugins/personal/connectivity/class_webdavAccount.inc:7 +#: plugins/personal/connectivity/class_connectivity.inc:16 +#: plugins/personal/connectivity/class_proxyAccount.inc:6 +#: plugins/gofax/blocklists/class_blocklistManagement.inc:6 +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:7 +#: plugins/gofax/reports/class_faxreport.inc:7 +#: plugins/addons/addressbook/class_addressbook.inc:7 +#: plugins/addons/logview/class_logview.inc:7 +#: plugins/addons/ldapmanager/class_csvimport.inc:7 +#: plugins/addons/ldapmanager/class_import.inc:7 +#: plugins/addons/ldapmanager/class_ldif.inc:8 +#: plugins/addons/ldapmanager/class_export.inc:8 +#: plugins/admin/groups/class_groupManagement.inc:26 +#: plugins/admin/users/class_userManagement.inc:26 +#: plugins/admin/applications/class_applicationManagement.inc:26 +#: plugins/admin/departments/class_departmentManagement.inc:26 +#: plugins/admin/systems/class_systemManagement.inc:33 +#: plugins/admin/ogroups/class_ogroupManagement.inc:26 +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:7 +#: plugins/gofon/reports/class_fonreport.inc:7 +msgid "This does something" +msgstr "Esto hace algo" + +#: plugins/personal/mail/class_mailAccount.inc:79 +#: plugins/admin/groups/class_groupMail.inc:59 +#, php-format +msgid "There is no mail method '%s' specified in your gosa.conf available." +msgstr "No hay protocolo de correo %s configurado en su 'gosa.conf'." + +#: plugins/personal/mail/class_mailAccount.inc:158 +msgid "No DESC tag in vacation file:" +msgstr "En el archivo de ausencia no existe la etiqueta 'DESC':" + +#: plugins/personal/mail/class_mailAccount.inc:184 +msgid "This account has no mail extensions." +msgstr "Esta cuenta no tiene extensiones validas de correo." + +#: plugins/personal/mail/class_mailAccount.inc:192 +#: plugins/admin/groups/class_groupMail.inc:187 +msgid "Remove mail account" +msgstr "Borrar cuenta de correo" + +#: plugins/personal/mail/class_mailAccount.inc:193 +#: plugins/admin/groups/class_groupMail.inc:188 +msgid "" +"This account has mail features enabled. You can disable them by clicking " +"below." +msgstr "" +"Esta cuenta tiene las características de correo activas. Puede desactivarlas " +"apretando a continuación." + +#: plugins/personal/mail/class_mailAccount.inc:195 +#: plugins/admin/groups/class_groupMail.inc:190 +msgid "Create mail account" +msgstr "Crear cuenta de correo" + +#: plugins/personal/mail/class_mailAccount.inc:196 +#: plugins/admin/groups/class_groupMail.inc:191 +msgid "" +"This account has mail features disabled. You can enable them by clicking " +"below." +msgstr "" +"Esta cuenta tiene las características de correo desactivadas.Puede " +"activarlas pulsando aqui." + +#: plugins/personal/mail/class_mailAccount.inc:244 +msgid "" +"You're trying to add an invalid email address to the list of forwarders." +msgstr "" +"Esta intentando añadir una dirección de correo no valida a la lista de " +"reenvíos." + +#: plugins/personal/mail/class_mailAccount.inc:250 +#: plugins/admin/groups/class_groupMail.inc:250 +msgid "Adding your one of your own addresses to the forwarders makes no sense." +msgstr "" +"Añadir una de sus propias cuentas de correo a la lista de reenvío no tiene " +"sentido." + +#: plugins/personal/mail/class_mailAccount.inc:285 +#: plugins/personal/mail/class_mailAccount.inc:290 +#: plugins/admin/groups/class_groupMail.inc:278 +msgid "" +"You're trying to add an invalid email address to the list of alternate " +"addresses." +msgstr "" +"Esta intentando añadir una dirección de correo no valida a la lista de " +"direcciones alternativas" + +#: plugins/personal/mail/class_mailAccount.inc:300 +#: plugins/admin/groups/class_groupMail.inc:283 +msgid "The address you're trying to add is already used by user" +msgstr "" +"La dirección de correo que esta intentando añadir, ya esta usada por otro " +"usuario" + +#: plugins/personal/mail/class_mailAccount.inc:631 +#: plugins/admin/groups/class_groupMail.inc:610 +msgid "The required field 'Primary address' is not set." +msgstr " El campo requerido 'Cuenta Principal' no ha sido rellenado." + +#: plugins/personal/mail/class_mailAccount.inc:635 +#: plugins/personal/mail/class_mailAccount.inc:639 +#: plugins/addons/addressbook/class_addressbook.inc:529 +msgid "Please enter a valid email address in 'Primary address' field." +msgstr "" +"Por favor introduzca una dirección valida de correo electrónico en el campo " +"'Cuenta Principal'." + +#: plugins/personal/mail/class_mailAccount.inc:646 +#: plugins/admin/groups/class_groupMail.inc:619 +msgid "The primary address you've entered is already in use." +msgstr "La cuenta principal que ha introducido ya esta en uso." + +#: plugins/personal/mail/class_mailAccount.inc:652 +#: plugins/admin/groups/class_groupMail.inc:625 +msgid "Value in 'Quota size' is not valid." +msgstr "El valor de 'Tamaño de Cola' no es valido." + +#: plugins/personal/mail/class_mailAccount.inc:661 +#: plugins/admin/groups/class_groupMail.inc:634 +msgid "Please specify a vaild mail size for mails to be rejected." +msgstr "Por favor especifique un usuario valido." + +#: plugins/personal/mail/class_mailAccount.inc:671 +#: plugins/admin/groups/class_groupMail.inc:642 +msgid "You need to set the maximum mail size in order to reject anything." +msgstr "" +"Necesita poner un valor máximo en el tamaño de mensaje de correo para poder " +"rechazar mensajes." + +#: plugins/personal/mail/generic.tpl:7 plugins/admin/groups/mail.tpl:10 +msgid "Primary address" +msgstr "Cuenta Principal" + +#: plugins/personal/mail/generic.tpl:11 plugins/admin/groups/mail.tpl:14 +#: plugins/generic/references/class_reference.inc:44 +msgid "Server" +msgstr "Servidor" + +#: plugins/personal/mail/generic.tpl:13 +msgid "Specify the mail server where the user will be hosted on" +msgstr "Especificar el servidor de correo donde el usuario estará hospedado." + +#: plugins/personal/mail/generic.tpl:21 plugins/admin/groups/mail.tpl:24 +msgid "Quota usage" +msgstr "Uso de la Cola de Correo" + +#: plugins/personal/mail/generic.tpl:28 plugins/admin/groups/mail.tpl:31 +#: plugins/admin/systems/class_terminalInfo.inc:136 +msgid "not defined" +msgstr "sin definirse" + +#: plugins/personal/mail/generic.tpl:33 plugins/admin/groups/mail.tpl:36 +msgid "Quota size" +msgstr "Tamaño de la Cola de correo" + +#: plugins/personal/mail/generic.tpl:47 plugins/admin/groups/mail.tpl:46 +msgid "Alternate addresses" +msgstr "Direcciones alternativas" + +#: plugins/personal/mail/generic.tpl:49 plugins/admin/groups/mail.tpl:47 +msgid "List of alternative mail addresses" +msgstr "Lista de direcciones de correo alternativas." + +#: plugins/personal/mail/generic.tpl:55 plugins/personal/mail/generic.tpl:121 +#: plugins/personal/mail/mail_locals.tpl:49 +#: plugins/personal/posix/trust_machines.tpl:45 +#: plugins/personal/posix/posix_groups.tpl:56 +#: plugins/personal/posix/generic.tpl:63 +#: plugins/personal/posix/generic.tpl:122 +#: plugins/personal/samba/samba3.tpl:247 +#: plugins/personal/samba/samba3_workstations.tpl:45 +#: plugins/gofax/blocklists/generic.tpl:60 +#: plugins/gofax/faxaccount/generic.tpl:73 +#: plugins/gofax/faxaccount/locals.tpl:48 +#: plugins/gofax/faxaccount/lists.tpl:11 plugins/gofax/faxaccount/lists.tpl:15 +#: plugins/admin/groups/mail.tpl:52 plugins/admin/groups/mail.tpl:97 +#: plugins/admin/groups/class_groupMail.inc:404 +#: plugins/admin/groups/group_objects.tpl:45 +#: plugins/admin/groups/generic.tpl:87 plugins/admin/groups/mail_locals.tpl:49 +#: plugins/admin/systems/startup.tpl:59 plugins/admin/systems/startup.tpl:72 +#: plugins/admin/systems/startup.tpl:91 +#: plugins/admin/ogroups/ogroup_objects.tpl:56 +#: plugins/admin/ogroups/generic.tpl:38 +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:203 +#: plugins/gofon/phoneaccount/generic.tpl:45 +msgid "Add" +msgstr "Añadir" + +#: plugins/personal/mail/generic.tpl:57 plugins/personal/mail/generic.tpl:125 +#: plugins/personal/posix/generic.tpl:64 +#: plugins/personal/posix/generic.tpl:124 +#: plugins/personal/samba/samba3.tpl:249 +#: plugins/gofax/blocklists/generic.tpl:61 +#: plugins/gofax/blocklists/remove.tpl:15 +#: plugins/gofax/blocklists/headpage.tpl:17 +#: plugins/gofax/faxaccount/generic.tpl:75 +#: plugins/gofax/faxaccount/lists.tpl:12 +#: plugins/addons/addressbook/remove.tpl:15 plugins/admin/groups/mail.tpl:53 +#: plugins/admin/groups/mail.tpl:99 plugins/admin/groups/headpage.tpl:17 +#: plugins/admin/groups/remove.tpl:15 plugins/admin/groups/generic.tpl:89 +#: plugins/admin/users/remove.tpl:15 plugins/admin/users/headpage.tpl:18 +#: plugins/admin/applications/remove.tpl:14 +#: plugins/admin/applications/headpage.tpl:17 +#: plugins/admin/departments/remove.tpl:15 +#: plugins/admin/departments/headpage.tpl:17 +#: plugins/admin/systems/remove.tpl:15 plugins/admin/systems/headpage.tpl:17 +#: plugins/admin/systems/startup.tpl:60 plugins/admin/systems/startup.tpl:73 +#: plugins/admin/systems/startup.tpl:92 plugins/admin/ogroups/generic.tpl:39 +#: plugins/admin/ogroups/remove.tpl:15 plugins/admin/ogroups/headpage.tpl:17 +#: plugins/gofon/phoneaccount/generic.tpl:47 +msgid "Delete" +msgstr "Borrar" + +#: plugins/personal/mail/generic.tpl:65 +msgid "Mail options" +msgstr "Opciones de correo" + +#: plugins/personal/mail/generic.tpl:70 +msgid "Select if you want to forward mails without getting own copies of them" +msgstr "Seleccione si quiere reenviar correos sin quedarse copias de ellos" + +#: plugins/personal/mail/generic.tpl:70 +msgid "No delivery to own mailbox" +msgstr "No se enviara a su propia carpeta de correo" + +#: plugins/personal/mail/generic.tpl:73 +msgid "" +"Select to automatically response with the vacation message defined below" +msgstr "" +"Seleccione para responder automáticamente con el mensaje de ausencia " +"definido aqui" + +#: plugins/personal/mail/generic.tpl:73 +msgid "Activate vacation message" +msgstr "Activar mensaje de ausencia" + +#: plugins/personal/mail/generic.tpl:80 +msgid "Select if you want to filter this mails thru spamassassin" +msgstr "" +"Seleccione aquí si quiere que su correo se filtre a través de spamassassin" + +#: plugins/personal/mail/generic.tpl:80 +msgid "Move mails tagged with spam level greater than" +msgstr "Mover los correos etiquetados con nivel de spam mayor que" + +#: plugins/personal/mail/generic.tpl:81 +msgid "Choose spam level - smaller values are more sensitive" +msgstr "Elija el nivele de spam - los mas bajos son mas sensibles" + +#: plugins/personal/mail/generic.tpl:84 +msgid "to folder" +msgstr "a la carpeta" + +#: plugins/personal/mail/generic.tpl:90 +msgid "Reject mails bigger than" +msgstr "rechazar correos mayores que" + +#: plugins/personal/mail/generic.tpl:92 +#: plugins/personal/connectivity/pureftpd.tpl:40 +#: plugins/personal/connectivity/class_proxyAccount.inc:69 +msgid "MB" +msgstr "Mb" + +#: plugins/personal/mail/generic.tpl:98 +msgid "Vacation message" +msgstr "Mensaje de ausencia" + +#: plugins/personal/mail/generic.tpl:113 +msgid "Forward messages to" +msgstr "reenviar mensajes a" + +#: plugins/personal/mail/generic.tpl:123 +#: plugins/gofax/faxaccount/generic.tpl:74 plugins/admin/groups/mail.tpl:98 +msgid "Add local" +msgstr "Añadir Cuenta Local" + +#: plugins/personal/mail/generic.tpl:133 +msgid "Advanced mail options" +msgstr "Opciones de correo avanzadas" + +#: plugins/personal/mail/generic.tpl:138 +msgid "Select if user can only send and receive inside his own domain" +msgstr "" +"Seleccione si el usuario solo puede enviar y recibir dentro de su propio " +"dominio" + +#: plugins/personal/mail/generic.tpl:139 +msgid "User is only allowed to send and receive local mails" +msgstr "" +"El usuario solo esta permitido a enviar y recibir correo de forma local" + +#: plugins/personal/mail/generic.tpl:146 +msgid "Use custom sieve script" +msgstr "Usar 'script sive' propios" + +#: plugins/personal/mail/generic.tpl:146 +msgid "disables all Mail options!" +msgstr "¡Desactivar todas las opciones de correo!" + +#: plugins/personal/mail/main.inc:104 plugins/personal/posix/main.inc:110 +#: plugins/personal/samba/main.inc:104 +#: plugins/personal/generic/generic_certs.tpl:60 +#: plugins/personal/generic/main.inc:158 +#: plugins/personal/connectivity/main.inc:116 +#: plugins/gofax/blocklists/generic.tpl:74 +#: plugins/gofax/faxaccount/main.inc:89 +#: plugins/admin/groups/class_groupManagement.inc:257 +#: plugins/admin/users/class_userManagement.inc:500 +#: plugins/admin/applications/class_applicationManagement.inc:239 +#: plugins/admin/departments/class_departmentManagement.inc:228 +#: plugins/admin/systems/class_systemManagement.inc:438 +#: plugins/admin/ogroups/class_ogroupManagement.inc:274 +#: plugins/gofon/phoneaccount/main.inc:104 +msgid "Finish" +msgstr "Terminar" + +#: plugins/personal/mail/main.inc:106 plugins/personal/mail/mail_locals.tpl:51 +#: plugins/personal/posix/trust_machines.tpl:47 +#: plugins/personal/posix/posix_groups.tpl:58 +#: plugins/personal/posix/main.inc:112 plugins/personal/samba/main.inc:106 +#: plugins/personal/samba/samba3_workstations.tpl:47 +#: plugins/personal/generic/password.tpl:19 +#: plugins/personal/generic/generic_picture.tpl:31 +#: plugins/personal/generic/generic_certs.tpl:62 +#: plugins/personal/generic/main.inc:160 +#: plugins/personal/connectivity/main.inc:118 +#: plugins/gofax/blocklists/generic.tpl:76 +#: plugins/gofax/blocklists/remove.tpl:17 +#: plugins/gofax/faxaccount/locals.tpl:50 +#: plugins/gofax/faxaccount/lists.tpl:39 plugins/gofax/faxaccount/main.inc:91 +#: plugins/addons/addressbook/dial.tpl:11 +#: plugins/addons/addressbook/address_edit.tpl:108 +#: plugins/addons/addressbook/remove.tpl:17 +#: plugins/admin/groups/class_groupManagement.inc:259 +#: plugins/admin/groups/remove.tpl:17 +#: plugins/admin/groups/application_options.tpl:10 +#: plugins/admin/groups/group_objects.tpl:47 +#: plugins/admin/groups/mail_admins.tpl:39 +#: plugins/admin/groups/mail_locals.tpl:51 plugins/admin/users/password.tpl:23 +#: plugins/admin/users/template.tpl:48 +#: plugins/admin/users/class_userManagement.inc:502 +#: plugins/admin/users/remove.tpl:17 plugins/admin/applications/remove.tpl:16 +#: plugins/admin/applications/class_applicationManagement.inc:241 +#: plugins/admin/departments/remove.tpl:17 +#: plugins/admin/departments/class_departmentManagement.inc:230 +#: plugins/admin/systems/class_systemManagement.inc:440 +#: plugins/admin/systems/remove.tpl:17 plugins/admin/systems/password.tpl:27 +#: plugins/admin/systems/chooser.tpl:18 +#: plugins/admin/ogroups/ogroup_objects.tpl:58 +#: plugins/admin/ogroups/class_ogroupManagement.inc:276 +#: plugins/admin/ogroups/remove.tpl:17 plugins/gofon/phoneaccount/main.inc:106 +#: ihtml/themes/altlinux/islocked.tpl:15 ihtml/themes/classic/islocked.tpl:15 +#: ihtml/themes/default/islocked.tpl:15 +msgid "Cancel" +msgstr "Cancelar" + +#: plugins/personal/mail/main.inc:114 plugins/personal/posix/main.inc:120 +#: plugins/personal/samba/main.inc:114 plugins/personal/generic/main.inc:177 +#: plugins/personal/connectivity/main.inc:126 +#: plugins/gofax/faxaccount/main.inc:96 +#: plugins/gofon/phoneaccount/main.inc:111 +msgid "Click the 'Edit' button below to change informations in this dialog" +msgstr "" +"Pulse en el botón - Editar - para cambiar la información de esta ventana" + +#: plugins/personal/mail/main.inc:115 plugins/personal/posix/main.inc:122 +#: plugins/personal/samba/main.inc:115 plugins/personal/generic/main.inc:170 +#: plugins/personal/connectivity/main.inc:127 +#: plugins/gofax/blocklists/headpage.tpl:16 +#: plugins/gofax/faxaccount/generic.tpl:88 +#: plugins/gofax/faxaccount/generic.tpl:94 +#: plugins/gofax/faxaccount/main.inc:97 plugins/addons/logview/contents.tpl:60 +#: plugins/admin/groups/headpage.tpl:16 plugins/admin/users/headpage.tpl:17 +#: plugins/admin/applications/headpage.tpl:16 +#: plugins/admin/departments/headpage.tpl:16 +#: plugins/admin/systems/headpage.tpl:16 plugins/admin/ogroups/headpage.tpl:16 +#: plugins/gofon/phoneaccount/main.inc:112 +msgid "Edit" +msgstr "Editar" + +#: plugins/personal/mail/main.inc:124 +msgid "User mail settings" +msgstr "Parametros del correo de usuarios" + +#: plugins/personal/mail/mail_locals.tpl:6 +#: plugins/admin/groups/mail_locals.tpl:6 +msgid "Select addresses to add" +msgstr "Seleccione dirección para añadir" + +#: plugins/personal/mail/mail_locals.tpl:29 +#: plugins/admin/groups/mail_locals.tpl:29 +msgid "Display addresses of department" +msgstr "Mostrar las direcciones de los departamentos" + +#: plugins/personal/mail/mail_locals.tpl:30 +#: plugins/personal/posix/trust_machines.tpl:30 +#: plugins/personal/posix/posix_groups.tpl:37 +#: plugins/personal/samba/samba3_workstations.tpl:30 +#: plugins/gofax/blocklists/headpage.tpl:50 +#: plugins/gofax/faxaccount/locals.tpl:29 +#: plugins/addons/addressbook/contents.tpl:72 +#: plugins/admin/groups/headpage.tpl:57 +#: plugins/admin/groups/group_objects.tpl:30 +#: plugins/admin/groups/mail_locals.tpl:30 plugins/admin/users/headpage.tpl:61 +#: plugins/admin/applications/headpage.tpl:46 +#: plugins/admin/departments/headpage.tpl:46 +#: plugins/admin/systems/headpage.tpl:56 +#: plugins/admin/ogroups/ogroup_objects.tpl:41 +#: plugins/admin/ogroups/headpage.tpl:58 +msgid "Choose the department the search will be based on" +msgstr "Escoja el departamento base de la busqueda" + +#: plugins/personal/mail/mail_locals.tpl:35 +#: plugins/admin/groups/mail_locals.tpl:35 +msgid "Display addresses matching" +msgstr "Mostrar direcciones que concuerden con" + +#: plugins/personal/mail/mail_locals.tpl:36 +#: plugins/personal/posix/trust_machines.tpl:36 +#: plugins/personal/samba/samba3_workstations.tpl:36 +#: plugins/admin/groups/mail_locals.tpl:36 +msgid "Regular expression for matching addresses" +msgstr "Expresiones regulares que concuerden con direcciones" + +#: plugins/personal/mail/mail_locals.tpl:39 +#: plugins/admin/groups/mail_locals.tpl:39 +msgid "Display addresses of user" +msgstr "Mostrar direcciones del usuario" + +#: plugins/personal/mail/mail_locals.tpl:40 +#: plugins/admin/groups/mail_locals.tpl:40 +msgid "User name of which addresses are shown" +msgstr "Nombre de usuario de las direcciones mostradas" + +#: plugins/personal/password/class_password.inc:5 +#: plugins/admin/systems/servdb.tpl:22 plugins/admin/systems/servdb.tpl:38 +#: plugins/admin/systems/servdb.tpl:54 plugins/admin/systems/servdb.tpl:90 +#: plugins/admin/systems/servdb.tpl:113 ihtml/themes/altlinux/login.tpl:33 +#: ihtml/themes/altlinux/login.tpl:37 ihtml/themes/classic/login.tpl:32 +#: ihtml/themes/classic/login.tpl:36 ihtml/themes/default/login.tpl:33 +#: ihtml/themes/default/login.tpl:37 +msgid "Password" +msgstr "Contraseña" + +#: plugins/personal/password/password.tpl:2 +#: plugins/personal/password/changed.tpl:2 +msgid "Change password" +msgstr "Cambiar contraseña" + +#: plugins/personal/password/password.tpl:6 +msgid "" +"To change your personal password use the fields below. The changes take " +"effect immediately. Please memorize the new password, because you would't be " +"able to login without it." +msgstr "" +"Para cambiar su contraseña personal use los campos siguientes. Los cambios " +"tendrán efecto inmediato. Por favor memorice la nueva contraseña, porque no " +"podrá entrar sin ella." + +#: plugins/personal/password/password.tpl:10 +#: plugins/admin/users/password.tpl:6 +msgid "" +"Changing the password impinges on your authentification on mail, proxy, " +"samba and unix services." +msgstr "" +"Cambiar la contraseña modifica la autenticación del usuario para el correo, " +"proxy, samba y los servicios unix." + +#: plugins/personal/password/password.tpl:15 +msgid "Current password" +msgstr "Contraseña actual" + +#: plugins/personal/password/password.tpl:20 +#: plugins/personal/generic/password.tpl:7 plugins/admin/users/password.tpl:11 +#: plugins/admin/systems/password.tpl:11 +msgid "New password" +msgstr "Nueva contraseña" + +#: plugins/personal/password/password.tpl:25 +#: plugins/personal/generic/password.tpl:11 +#: plugins/admin/users/password.tpl:15 plugins/admin/systems/password.tpl:16 +msgid "Repeat new password" +msgstr "Repetir la nueva contraseña" + +#: plugins/personal/password/password.tpl:34 +#: plugins/personal/generic/password.tpl:17 +#: plugins/admin/users/password.tpl:21 plugins/admin/users/headpage.tpl:19 +#: plugins/admin/systems/headpage.tpl:18 plugins/admin/systems/password.tpl:25 +msgid "Set password" +msgstr "Poner Contraseña" + +#: plugins/personal/password/password.tpl:36 +msgid "Clear fields" +msgstr "Limpiar campos" + +#: plugins/personal/password/changed.tpl:6 +msgid "" +"You've successfully changed your password. Remember to change all programms " +"configured to use it as well." +msgstr "" +"Su cambio de contraseña se ha realizado correctamente. Recuerde cambiarla en " +"todos los programas configurados también." + +#: plugins/personal/password/changed.tpl:12 +#: plugins/personal/generic/main.inc:167 plugins/gofax/reports/detail.tpl:68 +#: plugins/addons/ldapmanager/contentimport.tpl:58 +#: plugins/addons/ldapmanager/contentcsv.tpl:127 +#: plugins/addons/ldapmanager/contentexport.tpl:70 include/functions.inc:1342 +msgid "Back" +msgstr "Atras" + +#: plugins/personal/password/main.inc:40 +msgid "" +"The password you've entered as your current password doesn't match the real " +"one." +msgstr "La contraseña introducida como contraseña actual no es correcta." + +#: plugins/personal/password/main.inc:43 +msgid "You need to specify your current password in order to proceed." +msgstr "Necesita introducir su contraseña actual para continuar." + +#: plugins/personal/password/main.inc:48 plugins/personal/generic/main.inc:84 +#: plugins/admin/users/class_userManagement.inc:174 +msgid "" +"The passwords you've entered as 'New password' and 'Repeated new password' " +"do not match." +msgstr "" +"Las contraseñas ingresadas como 'Nueva contraseña' y 'Repetir nueva " +"contraseña' no concuerdan." + +#: plugins/personal/password/main.inc:51 plugins/personal/generic/main.inc:89 +#: plugins/admin/users/class_userManagement.inc:179 +msgid "The password you've entered as 'New password' is empty." +msgstr "La contraseña que ingreso como 'Nueva contraseña' está vacia." + +#: plugins/personal/password/main.inc:59 +msgid "The password used as new and current are too similar." +msgstr "Las contraseñas antigua y nueva son demasiado parecidas." + +#: plugins/personal/password/main.inc:64 +msgid "The password used as new is to short." +msgstr "La nueva contraseña es demasiado corta." + +#: plugins/personal/password/main.inc:71 +msgid "You have no permissions to change your password." +msgstr "No tiene permisos para cambiar su contraseña." + +#: plugins/personal/password/main.inc:89 +msgid "External password changer reported a problem: " +msgstr "El programa externo de cambio de contraseña informo de un problema: " + +#: plugins/personal/posix/trust_machines.tpl:6 +msgid "Select systems to add" +msgstr "Seleccione sistema a añadir" + +#: plugins/personal/posix/trust_machines.tpl:29 +#: plugins/admin/systems/headpage.tpl:55 +msgid "Display systems of department" +msgstr "Mostrar sistemas de departamentos" + +#: plugins/personal/posix/trust_machines.tpl:35 +#: plugins/admin/systems/headpage.tpl:61 +msgid "Display systems matching" +msgstr "Mostrar sistemas que concuerden con" + +#: plugins/personal/posix/posix_groups.tpl:6 +msgid "Select groups to add" +msgstr "Seleccione grupo a añadir" + +#: plugins/personal/posix/posix_groups.tpl:20 +#: plugins/gofax/blocklists/headpage.tpl:36 +#: plugins/gofax/faxaccount/locals.tpl:19 +#: plugins/addons/addressbook/contents.tpl:58 +#: plugins/admin/groups/headpage.tpl:37 +#: plugins/admin/groups/group_objects.tpl:20 +#: plugins/admin/users/headpage.tpl:38 +#: plugins/admin/applications/headpage.tpl:36 +#: plugins/admin/departments/headpage.tpl:36 +#: plugins/admin/systems/headpage.tpl:37 +#: plugins/admin/ogroups/ogroup_objects.tpl:20 +#: plugins/admin/ogroups/headpage.tpl:37 +msgid "Filters" +msgstr "Filtros" + +#: plugins/personal/posix/posix_groups.tpl:29 +#: plugins/admin/groups/headpage.tpl:46 +msgid "Select to see groups that are primary groups of users" +msgstr "Seleccione para ver que grupos son grupos primarios de usuarios" + +#: plugins/personal/posix/posix_groups.tpl:29 +#: plugins/admin/groups/headpage.tpl:46 +msgid "Show primary groups" +msgstr "Mostrar grupos primarios" + +#: plugins/personal/posix/posix_groups.tpl:30 +#: plugins/admin/groups/headpage.tpl:47 +msgid "Select to see groups that have samba groups mappings" +msgstr "Seleccione para ver que grupos tienen asignado un grupo samba" + +#: plugins/personal/posix/posix_groups.tpl:30 +#: plugins/admin/groups/headpage.tpl:47 +msgid "Show samba groups" +msgstr "Mostrar los grupos samba" + +#: plugins/personal/posix/posix_groups.tpl:31 +#: plugins/admin/groups/headpage.tpl:48 +msgid "Select to see groups that have applications configured" +msgstr "Seleccione para ver que grupos tienen aplicaciones configuradas" + +#: plugins/personal/posix/posix_groups.tpl:31 +#: plugins/admin/groups/headpage.tpl:48 +msgid "Show application groups" +msgstr "Mostrar los grupos de aplicaciones" + +#: plugins/personal/posix/posix_groups.tpl:32 +#: plugins/admin/groups/headpage.tpl:49 +msgid "Select to see groups that have mail settings" +msgstr "" +"Seleccione para ver que grupos tienen configuración de correo electrónico" + +#: plugins/personal/posix/posix_groups.tpl:32 +#: plugins/admin/groups/headpage.tpl:49 +msgid "Show mail groups" +msgstr "Mostrar grupos de correo" + +#: plugins/personal/posix/posix_groups.tpl:33 +#: plugins/admin/groups/headpage.tpl:50 +msgid "Select to see normal groups that have only functional aspects" +msgstr "Seleccione para ver que grupos tienen solo aspectos funcionales" + +#: plugins/personal/posix/posix_groups.tpl:33 +#: plugins/admin/groups/headpage.tpl:50 +msgid "Show functional groups" +msgstr "Mostrar grupos funcionales" + +#: plugins/personal/posix/posix_groups.tpl:36 +#: plugins/admin/groups/headpage.tpl:56 plugins/admin/ogroups/headpage.tpl:57 +msgid "Display groups of department" +msgstr "Mostrar los grupos de departamentos" + +#: plugins/personal/posix/posix_groups.tpl:42 +#: plugins/admin/groups/headpage.tpl:62 plugins/admin/ogroups/headpage.tpl:63 +msgid "Display groups matching" +msgstr "Mostrar grupos que concuerden con" + +#: plugins/personal/posix/posix_groups.tpl:43 +#: plugins/admin/groups/headpage.tpl:63 plugins/admin/ogroups/headpage.tpl:64 +msgid "Regular expression for matching group names" +msgstr "Expresión regular que concuerde con nombres de grupos" + +#: plugins/personal/posix/posix_groups.tpl:46 +#: plugins/admin/groups/headpage.tpl:66 +msgid "Display groups of user" +msgstr "Mostrar grupos de usuarios" + +#: plugins/personal/posix/posix_groups.tpl:47 +#: plugins/admin/groups/headpage.tpl:67 +msgid "User name of which groups are shown" +msgstr "Nombres de usuarios de los grupos que se muestran" + +#: plugins/personal/posix/posix_shadow.tpl:5 +msgid "User must change password on first login" +msgstr "" +"Los usuarios deben cambiar su contraseña en el próximo inicio de sesión" + +#: plugins/personal/posix/posix_shadow.tpl:19 +#: plugins/personal/samba/samba2.tpl:68 plugins/personal/samba/samba3.tpl:225 +msgid "Password expires on" +msgstr "La contraseña expira en" + +#: plugins/personal/posix/generic.tpl:7 plugins/personal/samba/samba3.tpl:13 +#: plugins/personal/samba/samba3.tpl:65 +#: plugins/personal/samba/class_sambaAccount.inc:464 +msgid "Home directory" +msgstr "Directorio Principal" + +#: plugins/personal/posix/generic.tpl:13 +msgid "Shell" +msgstr "Shell" + +#: plugins/personal/posix/generic.tpl:21 +msgid "Primary group" +msgstr "Grupo primario" + +#: plugins/personal/posix/generic.tpl:29 plugins/gofax/reports/detail.tpl:46 +#: plugins/gofax/reports/contents.tpl:32 plugins/gofon/reports/contents.tpl:35 +msgid "Status" +msgstr "Estado" + +#: plugins/personal/posix/generic.tpl:38 +msgid "Force UID/GID" +msgstr "Forzar UID/GID" + +#: plugins/personal/posix/generic.tpl:40 +msgid "UID" +msgstr "UID" + +#: plugins/personal/posix/generic.tpl:45 +msgid "GID" +msgstr "GID" + +#: plugins/personal/posix/generic.tpl:54 +msgid "Group membership" +msgstr "Miembros del grupo" + +#: plugins/personal/posix/generic.tpl:56 +msgid "(Warning: more than 16 groups are not supported by NFS!)" +msgstr "(Aviso: ¡NFS no soporta mas de 16 grupos!)" + +#: plugins/personal/posix/generic.tpl:74 +msgid "Account" +msgstr "Cuenta" + +#: plugins/personal/posix/generic.tpl:89 +msgid "Environment" +msgstr "Entorno" + +#: plugins/personal/posix/generic.tpl:92 +msgid "Default printer" +msgstr "Impresora por defecto" + +#: plugins/personal/posix/generic.tpl:100 +msgid "Default language" +msgstr "Lenguaje por defecto" + +#: plugins/personal/posix/generic.tpl:113 +msgid "System trust" +msgstr "Autentificación del sistema" + +#: plugins/personal/posix/main.inc:131 +msgid "Unix settings" +msgstr "Parametros Unix" + +#: plugins/personal/posix/class_posixAccount.inc:16 +#: plugins/generic/references/class_reference.inc:22 +msgid "UNIX" +msgstr "UNIX" + +#: plugins/personal/posix/class_posixAccount.inc:132 +#: plugins/personal/posix/class_posixAccount.inc:895 +#: plugins/admin/groups/class_groupManagement.inc:377 +msgid "Group of user" +msgstr "Grupo de usuarios" + +#: plugins/personal/posix/class_posixAccount.inc:172 +msgid "unconfigured" +msgstr "Desconfigurado" + +#: plugins/personal/posix/class_posixAccount.inc:190 +#: plugins/admin/systems/class_terminalService.inc:121 +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:99 +msgid "automatic" +msgstr "automático" + +#: plugins/personal/posix/class_posixAccount.inc:218 +msgid "This account has no unix extensions." +msgstr "Este cuenta no tiene extensiones unix." + +#: plugins/personal/posix/class_posixAccount.inc:238 +#: plugins/personal/posix/class_posixAccount.inc:241 +msgid "Remove posix account" +msgstr "Eliminar cuenta Posix" + +#: plugins/personal/posix/class_posixAccount.inc:239 +msgid "" +"This account has unix features enabled. To disable them, you'll need to " +"remove the samba account first." +msgstr "" +"Esta cuenta tiene características unix activadas. Para desactivarlas, " +"necesita eliminar la cuenta samba primero." + +#: plugins/personal/posix/class_posixAccount.inc:242 +msgid "" +"This account has posix features enabled. You can disable them by clicking " +"below." +msgstr "" +"Esta cuenta tiene características posix activadas. Puede desactivarla " +"pulsando aqui" + +#: plugins/personal/posix/class_posixAccount.inc:245 +msgid "Create posix account" +msgstr "Crear cuenta posix" + +#: plugins/personal/posix/class_posixAccount.inc:246 +msgid "" +"This account has posix features disabled. You can enable them by clicking " +"below." +msgstr "" +"Esta cuenta tiene la extensión posix desactivada. Puede activarla pulsando " +"aquí." + +#: plugins/personal/posix/class_posixAccount.inc:429 +#, php-format +msgid "Password can't be changed up to %s days after last change" +msgstr "" +"La contraseñas no pueden ser cambiadas hasta %s días desde el último cambio" + +#: plugins/personal/posix/class_posixAccount.inc:431 +#, php-format +msgid "Password must be changed after %s days" +msgstr "La contraseñas deben ser cambiadas despues de %s días" + +#: plugins/personal/posix/class_posixAccount.inc:433 +#, php-format +msgid "Disable account after %s days of inactivity after password expiery" +msgstr "" +"Desactivar cuente despues de %s días de inactividad despues de expirar la " +"contraseña" + +#: plugins/personal/posix/class_posixAccount.inc:435 +#, php-format +msgid "Warn user %s days before password expiery" +msgstr "Avisar al usuario %s días antes de expirar la contraseña" + +#: plugins/personal/posix/class_posixAccount.inc:457 +#: plugins/personal/samba/class_sambaAccount.inc:303 +#: plugins/personal/generic/class_user.inc:210 +#: plugins/gofax/reports/class_faxreport.inc:272 +#: plugins/gofon/reports/class_fonreport.inc:205 +msgid "January" +msgstr "Enero" + +#: plugins/personal/posix/class_posixAccount.inc:457 +#: plugins/personal/samba/class_sambaAccount.inc:303 +#: plugins/personal/generic/class_user.inc:210 +#: plugins/gofax/reports/class_faxreport.inc:272 +#: plugins/gofon/reports/class_fonreport.inc:205 +msgid "February" +msgstr "Febrero" + +#: plugins/personal/posix/class_posixAccount.inc:457 +#: plugins/personal/samba/class_sambaAccount.inc:303 +#: plugins/personal/generic/class_user.inc:210 +#: plugins/gofax/reports/class_faxreport.inc:272 +#: plugins/gofon/reports/class_fonreport.inc:205 +msgid "March" +msgstr "Marzo" + +#: plugins/personal/posix/class_posixAccount.inc:457 +#: plugins/personal/samba/class_sambaAccount.inc:303 +#: plugins/personal/generic/class_user.inc:210 +#: plugins/gofax/reports/class_faxreport.inc:272 +#: plugins/gofon/reports/class_fonreport.inc:205 +msgid "April" +msgstr "Abril" + +#: plugins/personal/posix/class_posixAccount.inc:458 +#: plugins/personal/samba/class_sambaAccount.inc:304 +#: plugins/personal/generic/class_user.inc:211 +#: plugins/gofax/reports/class_faxreport.inc:273 +#: plugins/gofon/reports/class_fonreport.inc:206 +msgid "May" +msgstr "Mayo" + +#: plugins/personal/posix/class_posixAccount.inc:458 +#: plugins/personal/samba/class_sambaAccount.inc:304 +#: plugins/personal/generic/class_user.inc:211 +#: plugins/gofax/reports/class_faxreport.inc:273 +#: plugins/gofon/reports/class_fonreport.inc:206 +msgid "June" +msgstr "Junio" + +#: plugins/personal/posix/class_posixAccount.inc:458 +#: plugins/personal/samba/class_sambaAccount.inc:304 +#: plugins/personal/generic/class_user.inc:211 +#: plugins/gofax/reports/class_faxreport.inc:273 +#: plugins/gofon/reports/class_fonreport.inc:206 +msgid "July" +msgstr "Julio" + +#: plugins/personal/posix/class_posixAccount.inc:458 +#: plugins/personal/samba/class_sambaAccount.inc:304 +#: plugins/personal/generic/class_user.inc:211 +#: plugins/gofax/reports/class_faxreport.inc:273 +#: plugins/gofon/reports/class_fonreport.inc:206 +msgid "August" +msgstr "Agosto" + +#: plugins/personal/posix/class_posixAccount.inc:458 +#: plugins/personal/samba/class_sambaAccount.inc:304 +#: plugins/personal/generic/class_user.inc:211 +#: plugins/gofax/reports/class_faxreport.inc:274 +#: plugins/gofon/reports/class_fonreport.inc:207 +msgid "September" +msgstr "Septiembre" + +#: plugins/personal/posix/class_posixAccount.inc:459 +#: plugins/personal/samba/class_sambaAccount.inc:305 +#: plugins/personal/generic/class_user.inc:212 +#: plugins/gofax/reports/class_faxreport.inc:274 +#: plugins/gofon/reports/class_fonreport.inc:207 +msgid "October" +msgstr "Octubre" + +#: plugins/personal/posix/class_posixAccount.inc:459 +#: plugins/personal/samba/class_sambaAccount.inc:305 +#: plugins/personal/generic/class_user.inc:212 +#: plugins/gofax/reports/class_faxreport.inc:274 +#: plugins/gofon/reports/class_fonreport.inc:207 +msgid "November" +msgstr "Noviembre" + +#: plugins/personal/posix/class_posixAccount.inc:459 +#: plugins/personal/samba/class_sambaAccount.inc:305 +#: plugins/personal/generic/class_user.inc:212 +#: plugins/gofax/reports/class_faxreport.inc:274 +#: plugins/gofon/reports/class_fonreport.inc:207 +msgid "December" +msgstr "Diciembre" + +#: plugins/personal/posix/class_posixAccount.inc:509 +#: plugins/personal/samba/class_sambaAccount.inc:338 +#: plugins/admin/systems/class_terminalGeneric.inc:61 +#: plugins/admin/systems/class_workstationGeneric.inc:70 +msgid "disabled" +msgstr "desactivado" + +#: plugins/personal/posix/class_posixAccount.inc:509 +msgid "full access" +msgstr "Acceso completo" + +#: plugins/personal/posix/class_posixAccount.inc:510 +msgid "allow access to these hosts" +msgstr "Permitir el acceso a estos equipos" + +#: plugins/personal/posix/class_posixAccount.inc:662 +msgid "Failed: overriding lock" +msgstr "Fallo: Sobrepasado bloqueo" + +#: plugins/personal/posix/class_posixAccount.inc:810 +msgid "The required field 'Home directory' is not set." +msgstr "El campo requerido 'Directorio de usuario' no esta rellenado." + +#: plugins/personal/posix/class_posixAccount.inc:813 +msgid "Please enter a valid path in 'Home directory' field." +msgstr "" +"Por favor introduzca una ruta valida en el campo 'Directorio de usuario'" + +#: plugins/personal/posix/class_posixAccount.inc:821 +msgid "Value specified as 'UID' is not valid." +msgstr "El valor especificado en 'UID' no es valido." + +#: plugins/personal/posix/class_posixAccount.inc:824 +msgid "Value specified as 'UID' is too small." +msgstr "El valor especificado como 'UID' es demasiado pequeño." + +#: plugins/personal/posix/class_posixAccount.inc:828 +#: plugins/admin/groups/class_groupGeneric.inc:594 +msgid "Value specified as 'GID' is not valid." +msgstr "El valor especificado como 'GID' no es valido." + +#: plugins/personal/posix/class_posixAccount.inc:831 +#: plugins/admin/groups/class_groupGeneric.inc:597 +msgid "Value specified as 'GID' is too small." +msgstr "El valor especificado como 'GID' es muy pequeño." + +#: plugins/personal/posix/class_posixAccount.inc:840 +msgid "Value specified as 'shadowMin' is not valid." +msgstr "El valor especificado en 'shadowMin' no es valido." + +#: plugins/personal/posix/class_posixAccount.inc:845 +msgid "Value specified as 'shadowMax' is not valid." +msgstr "El valor especificado en 'shadowMax' no es valido." + +#: plugins/personal/posix/class_posixAccount.inc:850 +msgid "Value specified as 'shadowWarning' is not valid." +msgstr "El valor especificado en 'shadowWarning' no es valido." + +#: plugins/personal/posix/class_posixAccount.inc:853 +msgid "'shadowWarning' without 'shadowMax' makes no sense." +msgstr "'shadowWarning' sin 'shadowMax' no tiene sentido." + +#: plugins/personal/posix/class_posixAccount.inc:856 +msgid "Value specified as 'shadowWarning' should be smaller than 'shadowMax'." +msgstr "" +"El valor especificado como 'shadowWarning' debería ser menor que 'shadowMax'." + +#: plugins/personal/posix/class_posixAccount.inc:859 +msgid "Value specified as 'shadowWarning' should be greater than 'shadowMin'." +msgstr "" +"El valor especificado como 'shadowWarning' debería ser mayor que 'shadowMin'." + +#: plugins/personal/posix/class_posixAccount.inc:864 +msgid "Value specified as 'shadowInactive' is not valid." +msgstr "El valor especificado en 'shadowInactive' no es valido." + +#: plugins/personal/posix/class_posixAccount.inc:867 +msgid "'shadowInactive' without 'shadowMax' makes no sense." +msgstr "'shadowInactive' sin 'shadowMax' no tiene sentido." + +#: plugins/personal/posix/class_posixAccount.inc:872 +msgid "Value specified as 'shadowMin' should be smaller than 'shadowMax'." +msgstr "" +"El valor especificado como 'shadowMin' debería ser menor que 'shadowMax'." + +#: plugins/personal/posix/class_posixAccount.inc:974 +#: plugins/admin/groups/class_groupGeneric.inc:628 +msgid "Too many users, can't allocate a free ID!" +msgstr "¡Demasiados usuarios, no hay identificadores (ID) libres!" + +#: plugins/personal/samba/samba2.tpl:13 +msgid "Samba home" +msgstr "Directorio Samba" + +#: plugins/personal/samba/samba2.tpl:30 plugins/personal/samba/samba3.tpl:38 +msgid "Script path" +msgstr "Ruta del Script" + +#: plugins/personal/samba/samba2.tpl:36 plugins/personal/samba/samba3.tpl:44 +#: plugins/personal/samba/samba3.tpl:75 +#: plugins/personal/samba/class_sambaAccount.inc:465 +msgid "Profile path" +msgstr "Ruta del Perfil" + +#: plugins/personal/samba/samba2.tpl:48 plugins/personal/samba/samba3.tpl:210 +msgid "Access options" +msgstr "Opciones de acceso" + +#: plugins/personal/samba/samba2.tpl:54 plugins/personal/samba/samba3.tpl:216 +msgid "Allow user to change password from client" +msgstr "Permitir al usuario cambiar las opciones desde el cliente" + +#: plugins/personal/samba/samba2.tpl:57 plugins/personal/samba/samba3.tpl:219 +msgid "Login from windows client requires no password" +msgstr "El inicio de sesión en window no requiere contraseña" + +#: plugins/personal/samba/samba2.tpl:60 plugins/personal/samba/samba3.tpl:222 +msgid "Temporary disable samba account" +msgstr "Desactivar temporalmente la cuenta samba" + +#: plugins/personal/samba/samba3.tpl:23 +msgid "Domain" +msgstr "Dominio" + +#: plugins/personal/samba/samba3.tpl:56 +msgid "Terminal Server" +msgstr "Servidor de terminal" + +#: plugins/personal/samba/samba3.tpl:62 +msgid "Allow login on terminal server" +msgstr "Permitir entrada en el servidor de terminal" + +#: plugins/personal/samba/samba3.tpl:87 +msgid "Inherit client config" +msgstr "Configuración del cliente por defecto" + +#: plugins/personal/samba/samba3.tpl:90 +msgid "Initial program" +msgstr "Programa inicial" + +#: plugins/personal/samba/samba3.tpl:96 +msgid "Working directory" +msgstr "Directorio de trabajo" + +#: plugins/personal/samba/samba3.tpl:111 +msgid "Timeout settings (in minutes)" +msgstr "Características de tiempo de desconexión (en minutos)" + +#: plugins/personal/samba/samba3.tpl:116 +#: plugins/personal/samba/class_sambaAccount.inc:472 +msgid "Connection" +msgstr "Conexión" + +#: plugins/personal/samba/samba3.tpl:125 +#: plugins/personal/samba/class_sambaAccount.inc:473 +msgid "Disconnection" +msgstr "Desconexión" + +#: plugins/personal/samba/samba3.tpl:134 +#: plugins/personal/samba/class_sambaAccount.inc:474 +msgid "IDLE" +msgstr "IDLE" + +#: plugins/personal/samba/samba3.tpl:147 +msgid "Client devices" +msgstr "Dispositivos clientes" + +#: plugins/personal/samba/samba3.tpl:152 +msgid "Connect client drives at logon" +msgstr "Conectar los discos clientes al iniciar" + +#: plugins/personal/samba/samba3.tpl:158 +msgid "Connect client printers at logon" +msgstr "Conectar las impresoras clientes al iniciar" + +#: plugins/personal/samba/samba3.tpl:164 +msgid "Default to main client printer" +msgstr "Por defecto a la impresora principal del cliente" + +#: plugins/personal/samba/samba3.tpl:174 +#: plugins/personal/connectivity/pureftpd.tpl:64 +msgid "Miscellaneous" +msgstr "Varios" + +#: plugins/personal/samba/samba3.tpl:178 +msgid "Shadowing" +msgstr "Ocultamiento" + +#: plugins/personal/samba/samba3.tpl:187 +msgid "On broken or timed out" +msgstr "Desconexion" + +#: plugins/personal/samba/samba3.tpl:195 +msgid "Reconnect if disconnected" +msgstr "Reconexión si se ha desconectado" + +#: plugins/personal/samba/samba3.tpl:241 +msgid "Allow connection from these workstations only" +msgstr "Permitir la conexión solo desde estas estaciones de trabajo" + +#: plugins/personal/samba/main.inc:123 +msgid "Samba settings" +msgstr "Parametros de samba" + +#: plugins/personal/samba/samba3_workstations.tpl:6 +msgid "Select workstations to add" +msgstr "Selecciones estaciones de trabajo para añadir" + +#: plugins/personal/samba/samba3_workstations.tpl:29 +msgid "Display workstations of department" +msgstr "Mostrar estaciones de trabajo de departamentos" + +#: plugins/personal/samba/samba3_workstations.tpl:35 +msgid "Display workstations matching" +msgstr "Mostrar estaciones de trabajo que concuerden con" + +#: plugins/personal/samba/class_sambaAccount.inc:170 +msgid "This account has no samba extensions." +msgstr "Esta cuenta no tiene extensión samba valida." + +#: plugins/personal/samba/class_sambaAccount.inc:179 +msgid "Remove samba account" +msgstr "Eliminar cuenta samba" + +#: plugins/personal/samba/class_sambaAccount.inc:180 +msgid "" +"This account has samba features enabled. You can disable them by clicking " +"below." +msgstr "" +"Esta cuenta tiene la extensión samba activada. Puede desactivarla pulsando " +"aquí." + +#: plugins/personal/samba/class_sambaAccount.inc:190 +#: plugins/personal/samba/class_sambaAccount.inc:193 +msgid "Create samba account" +msgstr "Crear cuenta samba" + +#: plugins/personal/samba/class_sambaAccount.inc:191 +msgid "" +"This account has samba features disabled. You can enable them by clicking " +"below." +msgstr "" +"Esta cuenta tiene la extensión samba desactivada. Puede activarla pulsando " +"aquí." + +#: plugins/personal/samba/class_sambaAccount.inc:194 +msgid "" +"This account has samba features disabled. Posix features are needed for " +"samba accounts, enable them first." +msgstr "" +"Esta cuenta tiene sus características samba desactivadas, las " +"características Posix son necesarias para las cuentas samba, activelas " +"primero." + +#: plugins/personal/samba/class_sambaAccount.inc:339 +msgid "input on, notify on" +msgstr "Activación, Notificación" + +#: plugins/personal/samba/class_sambaAccount.inc:340 +msgid "input on, notify off" +msgstr "Activación, No notificación" + +#: plugins/personal/samba/class_sambaAccount.inc:341 +msgid "input off, notify on" +msgstr "Desactivación, Notificación" + +#: plugins/personal/samba/class_sambaAccount.inc:342 +msgid "input off, nofify off" +msgstr "Desactivación, No notificación" + +#: plugins/personal/samba/class_sambaAccount.inc:344 +msgid "disconnect" +msgstr "desconectar" + +#: plugins/personal/samba/class_sambaAccount.inc:345 +msgid "reset" +msgstr "Borrar" + +#: plugins/personal/samba/class_sambaAccount.inc:347 +msgid "from any client" +msgstr "Desde cualquier cliente" + +#: plugins/personal/samba/class_sambaAccount.inc:348 +msgid "from previous client only" +msgstr "solo desde el cliente anterior" + +#: plugins/personal/samba/class_sambaAccount.inc:467 +#, php-format +msgid "The value specified as '%s' contains invalid characters!" +msgstr "¡El valor especificado como '%s' contiene caracteres no validos!" + +#: plugins/personal/samba/class_sambaAccount.inc:477 +#, php-format +msgid "" +"The timeout property '%s' is checked and contains invalid or no characters!" +msgstr "" +"¡La propiedad 'tiempo de desconexión' '%s' esta activada y contiene " +"caracteres no validos o no caracteres!" + +#: plugins/personal/samba/class_sambaAccount.inc:483 +msgid "" +"The windows user manager only allows eight clients. You've specified more " +"than eight." +msgstr "" +"El gestor de usuarios de windows solo permite ocho clientes. Ha especificado " +"mas de ocho." + +#: plugins/personal/samba/class_sambaAccount.inc:636 +msgid "" +"Warning: This account has an undefined samba SID assigned. The problem can " +"not be fixed by GOsa!" +msgstr "" +"Aviso: Esta cuenta tiene asignado un SID indefinido. ¡El problema no puede " +"ser solucionado por GOsa!" + +#: plugins/personal/samba/class_sambaAccount.inc:661 +msgid "" +"Warning: Can't identify users primary group - no conversion to a samba group " +"possible!" +msgstr "" +"Aviso: No puedo identificar el grupo primario de usuarios - ¡No se puede " +"realizar una conversión a grupo de samba!" + +#: plugins/personal/generic/class_user.inc:221 +msgid "female" +msgstr "mujer" + +#: plugins/personal/generic/class_user.inc:221 +msgid "male" +msgstr "hombre" + +#: plugins/personal/generic/class_user.inc:231 +msgid "This account has no valid GOsa extensions." +msgstr "Esta cuenta no tiene extensiones GOsa validas" + +#: plugins/personal/generic/class_user.inc:260 +msgid "The specified file has not been uploaded via HTTP POST! Aborted." +msgstr "" +"¡El archivo especificado no ha podido ser subido vía HTTP POST! Abortado." + +#: plugins/personal/generic/class_user.inc:354 +msgid "Please enter a valid serial number" +msgstr "Por favor introduzca un número de serie válido" + +#: plugins/personal/generic/class_user.inc:358 +#: plugins/personal/generic/class_user.inc:383 +#: plugins/admin/systems/class_terminalInfo.inc:52 +#: plugins/admin/systems/class_terminalInfo.inc:167 +msgid "present" +msgstr "presente" + +#: plugins/personal/generic/class_user.inc:360 +#: plugins/personal/generic/class_user.inc:385 +msgid "absent" +msgstr "ausente" + +#: plugins/personal/generic/class_user.inc:782 +msgid "Kerberos database communication failed" +msgstr "La comunicación con la base de datos Kerberos ha fallado" + +#: plugins/personal/generic/class_user.inc:799 +msgid "Can't remove user from kerberos database." +msgstr "No se puede eliminar el usuario de la base de datos Kerberos" + +#: plugins/personal/generic/class_user.inc:810 +msgid "Can't add user to kerberos database." +msgstr "No se puede añadir el usuario de la base de datos Kerberos" + +#: plugins/personal/generic/class_user.inc:850 +msgid "You have no permissions to create a user on this 'Base'." +msgstr "No tiene permisos para crear un usuario en esta 'Base'." + +#: plugins/personal/generic/class_user.inc:855 +#: plugins/addons/addressbook/class_addressbook.inc:486 +#: plugins/admin/users/class_userManagement.inc:419 +msgid "The required field 'Name' is not set." +msgstr "El campo requerido 'Nombre' no ha sido rellenado." + +#: plugins/personal/generic/class_user.inc:864 +msgid "There's already a person with this 'Login' in the database." +msgstr "Ya existe un usuario con este 'Login' en la base de datos." + +#: plugins/personal/generic/class_user.inc:870 +#: plugins/addons/addressbook/class_addressbook.inc:490 +#: plugins/admin/users/class_userManagement.inc:422 +msgid "The required field 'Given name' is not set." +msgstr "El campo requerido 'Sobrenombre' no ha sido rellenado." + +#: plugins/personal/generic/class_user.inc:873 +msgid "The required field 'Login' is not set." +msgstr " El campo requerido 'Login' no ha sido rellenado." + +#: plugins/personal/generic/class_user.inc:880 +msgid "" +"There's already a person with this 'Name'/'Given name' combination in the " +"database." +msgstr "" +"Ya existe un usuario con la misma combinación 'Nombre' / 'Sobrenombre' en la " +"base de datos." + +#: plugins/personal/generic/class_user.inc:887 +msgid "" +"The field 'Login' contains invalid characters. Lowercase, numbers and dashes " +"are allowed." +msgstr "" +"El campo 'Login' contiene caracteres no validos. Solo minúsculas, números y " +"guiones están permitidos." + +#: plugins/personal/generic/class_user.inc:890 +msgid "The field 'Homepage' contains an invalid URL definition." +msgstr "El campo 'Pagina web principal' contiene un URL no valida" + +#: plugins/personal/generic/class_user.inc:893 +#: plugins/personal/generic/class_user.inc:921 +#: plugins/addons/addressbook/class_addressbook.inc:496 +#: plugins/addons/addressbook/class_addressbook.inc:524 +#: plugins/admin/departments/class_departmentGeneric.inc:153 +msgid "The field 'Name' contains invalid characters." +msgstr "El campo 'Nombre' contiene caracteres no validos." + +#: plugins/personal/generic/class_user.inc:896 +#: plugins/personal/generic/class_user.inc:918 +#: plugins/addons/addressbook/class_addressbook.inc:499 +#: plugins/addons/addressbook/class_addressbook.inc:521 +msgid "The field 'Given name' contains invalid characters." +msgstr "El campo 'Sobrenombre' contiene caracteres no validos" + +#: plugins/personal/generic/class_user.inc:901 +#: plugins/personal/generic/class_user.inc:904 +#: plugins/addons/addressbook/class_addressbook.inc:504 +#: plugins/addons/addressbook/class_addressbook.inc:507 +#: plugins/admin/departments/class_departmentGeneric.inc:156 +msgid "The field 'Phone' contains an invalid phone number." +msgstr "El campo 'Teléfono' contiene un número de teléfono no valido." + +#: plugins/personal/generic/class_user.inc:907 +#: plugins/addons/addressbook/class_addressbook.inc:510 +#: plugins/admin/departments/class_departmentGeneric.inc:159 +msgid "The field 'Fax' contains an invalid phone number." +msgstr "El campo 'Fax' contiene un número de teléfono no valido." + +#: plugins/personal/generic/class_user.inc:910 +#: plugins/addons/addressbook/class_addressbook.inc:513 +msgid "The field 'Mobile' contains an invalid phone number." +msgstr "El campo 'Teléfono móvil' contiene un número de teléfono invalido." + +#: plugins/personal/generic/class_user.inc:913 +#: plugins/addons/addressbook/class_addressbook.inc:516 +msgid "The field 'Pager' contains an invalid phone number." +msgstr "" +"El campo 'Dispositivo de Busqueda' contiene un número de teléfono invalido." + +#: plugins/personal/generic/password.tpl:2 +msgid "" +"You have changed the method your password is stored in the ldap database. " +"For that reason you've to enter your password at this point again. GOsa will " +"then encode it with the selected method." +msgstr "" +"Ha cambiado el método en que su clave es guardada en la base de datos LDAP. " +"Por esa razón tiene que volver a reintroducir su contraseña de nuevo. Gosa " +"codificara esta con el nuevo método seleccionado." + +#: plugins/personal/generic/generic.tpl:6 +msgid "Personal information" +msgstr "Información personal" + +#: plugins/personal/generic/generic.tpl:15 +#: plugins/personal/generic/generic_picture.tpl:6 +msgid "Personal picture" +msgstr "Foto Personal" + +#: plugins/personal/generic/generic.tpl:17 +msgid "Change picture" +msgstr "Cambiar foto" + +#: plugins/personal/generic/generic.tpl:24 +#: plugins/addons/addressbook/contents.tpl:14 +#: plugins/addons/addressbook/address_edit.tpl:20 +#: plugins/addons/addressbook/address_info.tpl:16 +#: plugins/addons/addressbook/class_addressbook.inc:463 +#: plugins/admin/users/template.tpl:19 +msgid "Name" +msgstr "Nombre" + +#: plugins/personal/generic/generic.tpl:30 +#: plugins/addons/addressbook/address_edit.tpl:20 +#: plugins/addons/addressbook/class_addressbook.inc:463 +#: plugins/admin/users/template.tpl:23 +msgid "Given name" +msgstr "Nombre" + +#: plugins/personal/generic/generic.tpl:34 plugins/admin/users/template.tpl:29 +msgid "Login" +msgstr "Inicio" + +#: plugins/personal/generic/generic.tpl:42 +#: plugins/addons/addressbook/address_edit.tpl:26 +#: plugins/addons/addressbook/address_info.tpl:22 +msgid "Personal title" +msgstr "Título Personal" + +#: plugins/personal/generic/generic.tpl:50 +msgid "Academic title" +msgstr "Títulos academicos" + +#: plugins/personal/generic/generic.tpl:58 +msgid "Date of birth" +msgstr "Fecha de nacimiento" + +#: plugins/personal/generic/generic.tpl:75 +#: ihtml/themes/altlinux/sizelimit.tpl:14 +#: ihtml/themes/default/sizelimit.tpl:14 +msgid "Set" +msgstr "por debajo" + +#: plugins/personal/generic/generic.tpl:81 +msgid "Sex" +msgstr "Sexo" + +#: plugins/personal/generic/generic.tpl:92 +#: plugins/gofax/blocklists/generic.tpl:14 plugins/admin/groups/generic.tpl:21 +#: plugins/admin/applications/generic.tpl:33 +#: plugins/admin/departments/generic.tpl:27 +#: plugins/admin/systems/server.tpl:13 plugins/admin/systems/phone.tpl:13 +#: plugins/admin/systems/terminal.tpl:18 plugins/admin/systems/printer.tpl:21 +#: plugins/admin/systems/workstation.tpl:18 +#: plugins/admin/systems/component.tpl:13 +#: plugins/admin/systems/wingeneric.tpl:13 +#: plugins/admin/ogroups/generic.tpl:21 +msgid "Base" +msgstr "Base" + +#: plugins/personal/generic/generic.tpl:96 +msgid "Choose subtree to place user in" +msgstr "Elija el subárbol donde colocar el usuario" + +#: plugins/personal/generic/generic.tpl:111 +#: plugins/personal/generic/generic.tpl:255 +#: plugins/addons/addressbook/address_edit.tpl:37 +#: plugins/addons/addressbook/address_edit.tpl:86 +#: plugins/addons/addressbook/address_info.tpl:33 +#: plugins/addons/addressbook/address_info.tpl:82 +#: plugins/admin/departments/generic.tpl:54 +msgid "Address" +msgstr "Dirección" + +#: plugins/personal/generic/generic.tpl:115 +msgid "Private phone" +msgstr "Numero privado" + +#: plugins/personal/generic/generic.tpl:119 +msgid "Homepage" +msgstr "Página Web Principal" + +#: plugins/personal/generic/generic.tpl:128 +msgid "Password storage" +msgstr "Carpeta de almacenamiento de Contraseñas" + +#: plugins/personal/generic/generic.tpl:138 +#: plugins/personal/generic/generic_certs.tpl:7 +msgid "Certificates" +msgstr "Certificados" + +#: plugins/personal/generic/generic.tpl:140 +msgid "Edit certificates" +msgstr "Editar certificados" + +#: plugins/personal/generic/generic.tpl:144 +msgid "Kerberos" +msgstr "Kerberos" + +#: plugins/personal/generic/generic.tpl:145 +msgid "Edit properties" +msgstr "Editar propiedades" + +#: plugins/personal/generic/generic.tpl:161 +msgid "Organizational information" +msgstr "Información organizativa" + +#: plugins/personal/generic/generic.tpl:173 +msgid "Organization" +msgstr "Organización" + +#: plugins/personal/generic/generic.tpl:177 +#: plugins/addons/addressbook/address_edit.tpl:68 +#: plugins/addons/addressbook/address_info.tpl:64 +#: plugins/generic/references/class_reference.inc:38 +msgid "Department" +msgstr "Departamento" + +#: plugins/personal/generic/generic.tpl:181 +msgid "Department No." +msgstr "Departamento No." + +#: plugins/personal/generic/generic.tpl:187 +msgid "Employee No." +msgstr "Empleado No." + +#: plugins/personal/generic/generic.tpl:193 +msgid "Employee type" +msgstr "Tipo de empleado" + +#: plugins/personal/generic/generic.tpl:209 +#: plugins/personal/generic/generic.tpl:348 +msgid "Room No." +msgstr "Habitación No." + +#: plugins/personal/generic/generic.tpl:221 +#: plugins/addons/addressbook/contents.tpl:15 +#: plugins/addons/addressbook/address_edit.tpl:44 +#: plugins/addons/addressbook/address_info.tpl:40 +msgid "Mobile" +msgstr "Teléfono Móvil" + +#: plugins/personal/generic/generic.tpl:225 +#: plugins/addons/addressbook/address_edit.tpl:95 +#: plugins/addons/addressbook/address_info.tpl:91 +msgid "Pager" +msgstr "Dispositivo de aviso" + +#: plugins/personal/generic/generic.tpl:247 +#: plugins/admin/departments/generic.tpl:42 +#: plugins/admin/departments/generic.tpl:50 +#: plugins/admin/systems/printer.tpl:14 +msgid "Location" +msgstr "Localización" + +#: plugins/personal/generic/generic.tpl:251 +#: plugins/admin/departments/generic.tpl:46 +msgid "State" +msgstr "Estado" + +#: plugins/personal/generic/generic.tpl:269 +msgid "Vocation" +msgstr "Intereses" + +#: plugins/personal/generic/generic.tpl:273 +msgid "Unit description" +msgstr "Descripción de la unidad" + +#: plugins/personal/generic/generic.tpl:281 +msgid "Subject area" +msgstr "Adjunto al area" + +#: plugins/personal/generic/generic.tpl:289 +msgid "Functional title" +msgstr "Título Funcional" + +#: plugins/personal/generic/generic.tpl:296 +msgid "Role" +msgstr "Papel desempeñado" + +#: plugins/personal/generic/generic.tpl:308 +msgid "Person locality" +msgstr "Población de la Persona" + +#: plugins/personal/generic/generic.tpl:316 +msgid "Unit" +msgstr "Unidad" + +#: plugins/personal/generic/generic.tpl:323 +msgid "Street" +msgstr "Calle" + +#: plugins/personal/generic/generic.tpl:329 +#: plugins/addons/addressbook/address_edit.tpl:74 +#: plugins/addons/addressbook/address_info.tpl:70 +msgid "Postal code" +msgstr "Código Postal" + +#: plugins/personal/generic/generic.tpl:335 +msgid "House identifier" +msgstr "Tipo de Vía" + +#: plugins/personal/generic/generic.tpl:357 +msgid "Please use the phone tab" +msgstr "Por favor use la casilla teléfono" + +#: plugins/personal/generic/generic.tpl:370 +msgid "Last delivery" +msgstr "Último envío" + +#: plugins/personal/generic/generic.tpl:378 +msgid "Public visible" +msgstr "Visible Publicamente" + +#: plugins/personal/generic/generic_picture.tpl:23 +msgid "Remove picture" +msgstr "Eliminar foto" + +#: plugins/personal/generic/generic_picture.tpl:29 +#: plugins/addons/addressbook/address_edit.tpl:107 +msgid "Save" +msgstr "Guardar" + +#: plugins/personal/generic/generic_certs.tpl:14 +msgid "Standard certificate" +msgstr "Certificado estandar" + +#: plugins/personal/generic/generic_certs.tpl:19 +#: plugins/personal/generic/generic_certs.tpl:30 +#: plugins/personal/generic/generic_certs.tpl:41 +#: plugins/admin/groups/class_groupMail.inc:408 +#: plugins/admin/applications/class_applicationParameters.inc:94 +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:205 +#: ihtml/themes/altlinux/islocked.tpl:13 ihtml/themes/classic/islocked.tpl:13 +#: ihtml/themes/default/islocked.tpl:13 +msgid "Remove" +msgstr "Eliminar" + +#: plugins/personal/generic/generic_certs.tpl:25 +msgid "S/MIME certificate" +msgstr "Certificado S/MIME" + +#: plugins/personal/generic/generic_certs.tpl:36 +msgid "PKCS12 certificate" +msgstr "Certificado PKCS12" + +#: plugins/personal/generic/generic_certs.tpl:48 +msgid "Certificate serial number" +msgstr "Numero de serie del certificado" + +#: plugins/personal/generic/main.inc:107 +msgid "You are not allowed to set your password!" +msgstr "¡No tiene permisos para cambiar su contraseña!" + +#: plugins/personal/generic/main.inc:187 +msgid "Generic user information" +msgstr "Información genérica del usuario" + +#: plugins/personal/connectivity/class_pureftpdAccount.inc:6 +#: plugins/generic/references/class_reference.inc:34 +msgid "FTP" +msgstr "FTP" + +#: plugins/personal/connectivity/class_pureftpdAccount.inc:112 +msgid "Value specified as 'Upload bandwidth' is not valid." +msgstr "El valor especificado en 'Ancho de Banda ascendente' no es válido" + +#: plugins/personal/connectivity/class_pureftpdAccount.inc:115 +msgid "Value specified as 'Download bandwidth' is not valid." +msgstr "El valor especificado en 'Ancho de Banda descendente' no es válido" + +#: plugins/personal/connectivity/class_pureftpdAccount.inc:118 +msgid "Value specified as 'Files' is not valid." +msgstr "El valor especificado como 'Archivos' no es válido" + +#: plugins/personal/connectivity/class_pureftpdAccount.inc:121 +msgid "Value specified as 'Size' is not valid." +msgstr "El valor especificado como 'Tamaño' no es válido" + +#: plugins/personal/connectivity/class_pureftpdAccount.inc:124 +msgid "Value specified as 'Ratio' is not valid." +msgstr "El valor especificado como 'relación' no es válido" + +#: plugins/personal/connectivity/class_phpgwAccount.inc:5 +msgid "PHPGroupware" +msgstr "PHPGroupware" + +#: plugins/personal/connectivity/proxy.tpl:1 +msgid "Proxy account" +msgstr "Cuenta proxy" + +#: plugins/personal/connectivity/proxy.tpl:8 +msgid "Filter unwanted content (i.e. pornographic or violence related)" +msgstr "Filtrar contenido indeseable (p.e. pornografía o contenido violento)" + +#: plugins/personal/connectivity/proxy.tpl:13 +msgid "Limit proxy access to working time" +msgstr "Limitar acceso al proxy al horario laboral" + +#: plugins/personal/connectivity/proxy.tpl:42 +msgid "Restrict proxy usage by quota" +msgstr "Restringir el uso del proxy con cuota" + +#: plugins/personal/connectivity/proxy.tpl:52 +msgid "per" +msgstr "por" + +#: plugins/personal/connectivity/class_webdavAccount.inc:6 +msgid "WebDAV" +msgstr "WebDAV" + +#: plugins/personal/connectivity/phpgw.tpl:1 +msgid "PHPGroupware account" +msgstr "Cuenta PHPGroupware" + +#: plugins/personal/connectivity/webdav.tpl:1 +msgid "WebDAV account" +msgstr "Cuenta WebDAV" + +#: plugins/personal/connectivity/pureftpd.tpl:1 +msgid "FTP account" +msgstr "Cuenta FTP" + +#: plugins/personal/connectivity/pureftpd.tpl:11 +msgid "Bandwidth" +msgstr "Ancho de banda" + +#: plugins/personal/connectivity/pureftpd.tpl:15 +msgid "Upload bandwidth" +msgstr "Ancho de banda ascendente" + +#: plugins/personal/connectivity/pureftpd.tpl:16 +#: plugins/personal/connectivity/pureftpd.tpl:20 +msgid "kb/s" +msgstr "Kb/s" + +#: plugins/personal/connectivity/pureftpd.tpl:19 +msgid "Download bandwidth" +msgstr "Ancho de banda descendente" + +#: plugins/personal/connectivity/pureftpd.tpl:31 +msgid "Quota" +msgstr "Cuota" + +#: plugins/personal/connectivity/pureftpd.tpl:35 +msgid "Files" +msgstr "Archivos" + +#: plugins/personal/connectivity/pureftpd.tpl:39 +msgid "Size" +msgstr "Tamaño" + +#: plugins/personal/connectivity/pureftpd.tpl:50 +msgid "Ratio" +msgstr "Relación" + +#: plugins/personal/connectivity/pureftpd.tpl:54 +msgid "Uploaded / downloaded files" +msgstr "Archivos Subidos / Descargados" + +#: plugins/personal/connectivity/pureftpd.tpl:67 +msgid "Check to disable FTP Access" +msgstr "Active para desactivar acceso FTP" + +#: plugins/personal/connectivity/pureftpd.tpl:67 +msgid "Temporary disable FTP access" +msgstr "Acceso FTP desactivado temporalmente" + +#: plugins/personal/connectivity/class_connectivity.inc:60 +msgid "This account has no connectivity extensions." +msgstr "Esta cuenta no tiene extensiones de conectividad" + +#: plugins/personal/connectivity/class_proxyAccount.inc:5 +#: plugins/generic/references/class_reference.inc:32 +msgid "Proxy" +msgstr "Proxy" + +#: plugins/personal/connectivity/class_proxyAccount.inc:69 +msgid "KB" +msgstr "Kb" + +#: plugins/personal/connectivity/class_proxyAccount.inc:69 +msgid "GB" +msgstr "Gb" + +#: plugins/personal/connectivity/class_proxyAccount.inc:70 +msgid "hour" +msgstr "hora" + +#: plugins/personal/connectivity/class_proxyAccount.inc:70 +msgid "day" +msgstr "día" + +#: plugins/personal/connectivity/class_proxyAccount.inc:70 +msgid "week" +msgstr "semana" + +#: plugins/personal/connectivity/class_proxyAccount.inc:70 +msgid "month" +msgstr "mes" + +#: plugins/gofax/blocklists/generic.tpl:8 +msgid "List name" +msgstr "Nombre de la lista" + +#: plugins/gofax/blocklists/generic.tpl:10 +msgid "Name of blocklist" +msgstr "Nombre de la lista de bloqueos" + +#: plugins/gofax/blocklists/generic.tpl:16 +msgid "Select subtree to place blocklist in" +msgstr "Seleccione un subárbol para colocar la lista de bloqueos" + +#: plugins/gofax/blocklists/generic.tpl:31 +#: plugins/admin/systems/service.tpl:42 plugins/admin/systems/service.tpl:120 +msgid "Type" +msgstr "Tipo" + +#: plugins/gofax/blocklists/generic.tpl:33 +msgid "Select wether to filter incoming or outgoing calls" +msgstr "Seleccione la manera de filtrar llamadas entrantes o salientes" + +#: plugins/gofax/blocklists/generic.tpl:39 plugins/admin/groups/generic.tpl:13 +#: plugins/admin/applications/generic.tpl:24 +#: plugins/admin/departments/generic.tpl:12 +#: plugins/admin/systems/server.tpl:24 plugins/admin/systems/phone.tpl:24 +#: plugins/admin/systems/printer.tpl:10 plugins/admin/systems/component.tpl:24 +#: plugins/admin/systems/wingeneric.tpl:24 +#: plugins/admin/ogroups/generic.tpl:13 +#: plugins/generic/references/contents.tpl:11 +msgid "Description" +msgstr "Descripción" + +#: plugins/gofax/blocklists/generic.tpl:41 +msgid "Descriptive text for this blocklist" +msgstr "Descripción de esta lista de bloqueos" + +#: plugins/gofax/blocklists/generic.tpl:54 +msgid "Blocked numbers" +msgstr "Números bloqueados" + +#: plugins/gofax/blocklists/generic.tpl:64 +#: plugins/gofax/blocklists/headpage.tpl:24 +#: plugins/addons/addressbook/contents.tpl:33 +#: plugins/admin/groups/headpage.tpl:25 plugins/admin/users/headpage.tpl:26 +#: plugins/admin/applications/headpage.tpl:24 +#: plugins/admin/departments/headpage.tpl:24 +#: plugins/admin/systems/headpage.tpl:25 plugins/admin/ogroups/headpage.tpl:25 +msgid "Information" +msgstr "Información" + +#: plugins/gofax/blocklists/generic.tpl:66 +msgid "Numbers can also contain wild cards." +msgstr "Los números pueden contener también comodínes" + +#: plugins/gofax/blocklists/class_blocklistManagement.inc:5 +msgid "FAX Blocklists" +msgstr "Lista de bloqueos de FAX" + +#: plugins/gofax/blocklists/class_blocklistManagement.inc:121 +#, php-format +msgid "You're about to delete the blocklist '%s'." +msgstr "Has decidido eliminar la lista de bloqueo '%s'." + +#: plugins/gofax/blocklists/class_blocklistManagement.inc:135 +msgid "You have no permission to remove this blocklist." +msgstr "No tiene permisos para eliminar esta lista de bloqueo." + +#: plugins/gofax/blocklists/class_blocklistManagement.inc:153 +msgid "Please specify a valid phone number." +msgstr "Por favor especifique un usuario valido." + +#: plugins/gofax/blocklists/class_blocklistManagement.inc:226 +msgid "send" +msgstr "enviar" + +#: plugins/gofax/blocklists/class_blocklistManagement.inc:226 +msgid "receive" +msgstr "recibir" + +#: plugins/gofax/blocklists/class_blocklistManagement.inc:342 +msgid "You have no permissions to create a blocklist on this 'Base'." +msgstr "No tiene permisos para crear una lista de bloqueo en esta 'Base'." + +#: plugins/gofax/blocklists/class_blocklistManagement.inc:348 +#: plugins/admin/departments/class_departmentGeneric.inc:141 +msgid "Required field 'Name' is not set." +msgstr "El campo requerido 'Nombre' no ha sido rellenado." + +#: plugins/gofax/blocklists/class_blocklistManagement.inc:351 +msgid "Required field 'Name' contains invalid characters" +msgstr "El campo requerido 'Nombre' contiene caracteres no validos" + +#: plugins/gofax/blocklists/class_blocklistManagement.inc:359 +msgid "Specified name is already used." +msgstr "El nombre especificado ya esta siendo usado" + +#: plugins/gofax/blocklists/class_blocklistManagement.inc:366 +msgid "No permission to create a blocklist on this base." +msgstr "No tiene permisos para crear una lista de bloqueos en esta base" + +#: plugins/gofax/blocklists/remove.tpl:2 +#: plugins/addons/addressbook/remove.tpl:2 plugins/admin/groups/remove.tpl:2 +#: plugins/admin/users/remove.tpl:2 plugins/admin/applications/remove.tpl:2 +#: plugins/admin/departments/remove.tpl:2 plugins/admin/systems/remove.tpl:2 +#: plugins/admin/ogroups/remove.tpl:2 html/index.php:211 +#: ihtml/themes/altlinux/conflict.tpl:6 ihtml/themes/altlinux/islocked.tpl:6 +#: ihtml/themes/classic/conflict.tpl:6 ihtml/themes/classic/islocked.tpl:6 +#: ihtml/themes/default/conflict.tpl:6 ihtml/themes/default/islocked.tpl:6 +msgid "Warning" +msgstr "Aviso" + +#: plugins/gofax/blocklists/remove.tpl:7 +msgid "" +"Please double check if your really want to do this since there is no way for " +"GOsa to get your data back." +msgstr "" +"Por favor pulse dos veces si realmente quiere hacer esto, ya que no hay " +"manera de que GOsa recupere posteriormente la información." + +#: plugins/gofax/blocklists/remove.tpl:11 +#: plugins/addons/addressbook/remove.tpl:11 plugins/admin/groups/remove.tpl:11 +#: plugins/admin/users/remove.tpl:11 plugins/admin/applications/remove.tpl:10 +#: plugins/admin/ogroups/remove.tpl:11 +msgid "" +"So - if you're sure - press Delete to continue or Cancel to " +"abort." +msgstr "" +"Entonces si esta seguro - presione Eliminar para continuar o " +"Cancelar para Abortar." + +#: plugins/gofax/blocklists/headpage.tpl:6 +msgid "List of blocklists" +msgstr "Lista de listas de bloqueos" + +#: plugins/gofax/blocklists/headpage.tpl:15 +#: plugins/admin/groups/headpage.tpl:15 plugins/admin/users/headpage.tpl:15 +#: plugins/admin/applications/headpage.tpl:15 +#: plugins/admin/departments/headpage.tpl:15 +#: plugins/admin/systems/headpage.tpl:15 plugins/admin/ogroups/headpage.tpl:15 +msgid "New" +msgstr "Nuevo" + +#: plugins/gofax/blocklists/headpage.tpl:28 +msgid "" +"This menu allows to create, delete and edit selected blocklists. Having a " +"large size of lists, you might prefer the range selectors on top of the " +"select box." +msgstr "" +"Este menú permite añadir, editar o eliminar las listas de bloqueo " +"seleccionadas. Puede usar el selector de rango en la parte superior de la " +"lista de aplicaciones, cuando trabaja con un gran número de listas." + +#: plugins/gofax/blocklists/headpage.tpl:31 +msgid "" +"-Edit- and -New blocklist- will provide an assistant to aid you when " +"performing changes on your blocklist. -Delete- will ask you for confirmation " +"before really deleting anything." +msgstr "" +"- Editar - y - Nueva lista de bloqueos - le proveerán de un asistente para " +"ayudarle cuando cree cambios en sus listas de bloqueos. - Eliminar - le " +"pedirá confirmación antes de eliminar realmente nada." + +#: plugins/gofax/blocklists/headpage.tpl:45 +msgid "Select to see send blocklists" +msgstr "Seleccione para mostrar listas de bloqueo salientes" + +#: plugins/gofax/blocklists/headpage.tpl:45 +msgid "Show send blocklists" +msgstr "Mostrar listas de bloqueos salientes" + +#: plugins/gofax/blocklists/headpage.tpl:46 +msgid "Select to see receive blocklists" +msgstr "Seleccione para mostrar listas de bloqueo entrantes" + +#: plugins/gofax/blocklists/headpage.tpl:46 +msgid "Show receive blocklists" +msgstr "Mostrar listas de bloqueos entrantes" + +#: plugins/gofax/blocklists/headpage.tpl:49 +msgid "Display lists of department" +msgstr "Mostrar listas de Departamentos" + +#: plugins/gofax/blocklists/headpage.tpl:55 +msgid "Display lists matching" +msgstr "Mostrar listas que contengan" + +#: plugins/gofax/blocklists/headpage.tpl:56 +msgid "Regular expression for matching list names" +msgstr "Expresiones regulares para encontrar nombres de listas" + +#: plugins/gofax/blocklists/headpage.tpl:59 +msgid "Display lists containing" +msgstr "Mostrar listas que contengan" + +#: plugins/gofax/blocklists/headpage.tpl:60 +msgid "Show lists containing entered numbers" +msgstr "Mostrar listas que contengan los números ya introducidos" + +#: plugins/gofax/blocklists/main.inc:20 plugins/gofax/blocklists/main.inc:22 +msgid "Blocklist management" +msgstr "Gestión de listas de bloqueo" + +#: plugins/gofax/faxaccount/generic.tpl:12 +msgid "Fax number for GOfax to trigger on" +msgstr "Numero de fax que activa GOfax" + +#: plugins/gofax/faxaccount/generic.tpl:16 +msgid "Language" +msgstr "Lenguaje" + +#: plugins/gofax/faxaccount/generic.tpl:18 +msgid "Specify the GOfax communication language for fax to mail gateway" +msgstr "" +"Especificar el lenguaje de comunicación de GOfax para pasarela de fax a " +"correo" + +#: plugins/gofax/faxaccount/generic.tpl:24 +msgid "Delivery format" +msgstr "Formato de envío" + +#: plugins/gofax/faxaccount/generic.tpl:26 +msgid "Specify delivery format for fax to mail gateway" +msgstr "Especificar el formato de envío para la pasarela de fax a correo" + +#: plugins/gofax/faxaccount/generic.tpl:38 +msgid "Delivery methods" +msgstr "Metodos de envío" + +#: plugins/gofax/faxaccount/generic.tpl:41 +msgid "Temporary disable fax usage" +msgstr "Desactivación temporal del uso del fax" + +#: plugins/gofax/faxaccount/generic.tpl:45 +#, fuzzy +msgid "Deliver fax as mail to" +msgstr "Enviar fax como correo electrónico" + +#: plugins/gofax/faxaccount/generic.tpl:49 +msgid "Deliver fax as mail" +msgstr "Enviar fax como correo electrónico" + +#: plugins/gofax/faxaccount/generic.tpl:54 +msgid "Deliver fax to printer" +msgstr "Enviar fax a la impresora" + +#: plugins/gofax/faxaccount/generic.tpl:68 +msgid "Alternate fax numbers" +msgstr "Intercambiar los números de fax" + +#: plugins/gofax/faxaccount/generic.tpl:83 +msgid "Blocklists" +msgstr "Listas de bloqueo" + +#: plugins/gofax/faxaccount/generic.tpl:86 +msgid "Blocklists for incoming fax" +msgstr "Listas de bloqueo para fax entrante" + +#: plugins/gofax/faxaccount/generic.tpl:92 +msgid "Blocklists for outgoing fax" +msgstr "Listas de bloqueo para fax saliente" + +#: plugins/gofax/faxaccount/locals.tpl:6 +msgid "Select numbers to add" +msgstr "Seleccione números para añadir" + +#: plugins/gofax/faxaccount/locals.tpl:28 +msgid "Display numbers of department" +msgstr "Mostrar número de Departamentos" + +#: plugins/gofax/faxaccount/locals.tpl:34 +msgid "Display numbers matching" +msgstr "Mostrar números que concuerdan con" + +#: plugins/gofax/faxaccount/locals.tpl:35 +msgid "Regular expression for matching numbers" +msgstr "Expresiones regulares que concuerden con números" + +#: plugins/gofax/faxaccount/locals.tpl:38 +msgid "Display numbers of user" +msgstr "Mostrar números de usuarios" + +#: plugins/gofax/faxaccount/locals.tpl:39 +msgid "User name of which numbers are shown" +msgstr "Nombre de usuario cuyos números están siendo mostrados" + +#: plugins/gofax/faxaccount/lists.tpl:4 +msgid "Blocked numbers/lists" +msgstr "Listas/Numeros bloqueados" + +#: plugins/gofax/faxaccount/lists.tpl:18 +#: plugins/admin/groups/mail_admins.tpl:24 +msgid "Select a specific department" +msgstr "Seleccionar un departamento especifico" + +#: plugins/gofax/faxaccount/lists.tpl:25 plugins/admin/groups/acl.tpl:12 +#: plugins/admin/groups/mail_admins.tpl:30 +msgid "Choose" +msgstr "Elige" + +#: plugins/gofax/faxaccount/lists.tpl:28 +msgid "List of predefined blocklists" +msgstr "Listas de listas de bloqueos predefinidas" + +#: plugins/gofax/faxaccount/lists.tpl:37 +#: plugins/admin/groups/application_options.tpl:8 +#: plugins/admin/groups/mail_admins.tpl:37 include/functions.inc:1333 +msgid "Apply" +msgstr "Aplicar" + +#: plugins/gofax/faxaccount/main.inc:105 +msgid "FAX settings" +msgstr "Parametros del Fax" + +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:6 +#: plugins/addons/addressbook/address_edit.tpl:92 +#: plugins/addons/addressbook/address_info.tpl:88 +#: plugins/generic/references/class_reference.inc:30 +msgid "FAX" +msgstr "FAX" + +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:109 +msgid "This account has no fax extensions." +msgstr "Esta cuenta no tiene extensiones de fax." + +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:118 +msgid "Remove fax account" +msgstr "Eliminar cuenta de fax" + +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:119 +msgid "" +"This account has fax features enabled. You can disable them by clicking " +"below." +msgstr "" +"Esta cuenta tiene la extensión de fax activada. Puede desactivarla pulsando " +"aquí." + +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:121 +msgid "Create fax account" +msgstr "Crear cuenta de fax" + +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:122 +msgid "" +"This account has fax features disabled. You can enable them by clicking " +"below." +msgstr "" +"Esta cuenta tiene la extensión de fax desactivada. Puede activarla pulsando " +"aquí." + +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:190 +msgid "You're trying to add an invalid phone number." +msgstr "Esta intentando añadir un número de teléfono no valido." + +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:451 +msgid "The required field 'Fax' is not set." +msgstr "No ha rellenado el campo requerido 'Fax'" + +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:455 +msgid "Please enter a valid telephone number in the 'Fax' field." +msgstr "Por favor introduzca un numero de teléfono valido en el campo 'Fax'" + +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:463 +msgid "Mail delivery is checked, but no address has been specified." +msgstr "" + +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:465 +#, fuzzy +msgid "The mail address you've entered is invalid." +msgstr "La cuenta principal que ha introducido ya esta en uso." + +#: plugins/gofax/reports/detail.tpl:6 +msgid "FAX preview - please wait" +msgstr "Previsualización del Fax - Por favor espere" + +#: plugins/gofax/reports/detail.tpl:9 +msgid "Click on fax to download" +msgstr "Pulse en 'Fax' para descargar" + +#: plugins/gofax/reports/detail.tpl:18 +msgid "FAX ID" +msgstr "FAX ID" + +#: plugins/gofax/reports/detail.tpl:22 plugins/gofax/reports/contents.tpl:30 +msgid "User" +msgstr "Usuario" + +#: plugins/gofax/reports/detail.tpl:26 +msgid "Date / Time" +msgstr "Fecha / Hora" + +#: plugins/gofax/reports/detail.tpl:30 +msgid "Sender MSN" +msgstr "MSN del Remitente" + +#: plugins/gofax/reports/detail.tpl:34 +msgid "Sender ID" +msgstr "ID del Remitente" + +#: plugins/gofax/reports/detail.tpl:38 +msgid "Receiver MSN" +msgstr "MSN del Receptor" + +#: plugins/gofax/reports/detail.tpl:42 +msgid "Receiver ID" +msgstr "ID del Receptor" + +#: plugins/gofax/reports/detail.tpl:50 +msgid "Status message" +msgstr "Estado del mensaje" + +#: plugins/gofax/reports/detail.tpl:54 +msgid "Transfer time" +msgstr "Tiempo de envio" + +#: plugins/gofax/reports/detail.tpl:58 plugins/gofax/reports/contents.tpl:35 +msgid "# pages" +msgstr "# páginas" + +#: plugins/gofax/reports/contents.tpl:2 plugins/addons/logview/contents.tpl:2 +#: plugins/gofon/reports/contents.tpl:2 +msgid "Filter" +msgstr "Filtro" + +#: plugins/gofax/reports/contents.tpl:6 +#: plugins/addons/addressbook/contents.tpl:77 +#: plugins/addons/logview/contents.tpl:45 plugins/gofon/reports/contents.tpl:6 +msgid "Search for" +msgstr "Buscar por" + +#: plugins/gofax/reports/contents.tpl:7 plugins/gofon/reports/contents.tpl:7 +msgid "Enter user name to search for" +msgstr "Entre el nombre de usuario para la busqueda" + +#: plugins/gofax/reports/contents.tpl:8 plugins/gofax/reports/contents.tpl:16 +#: plugins/gofon/reports/contents.tpl:8 plugins/gofon/reports/contents.tpl:16 +msgid "in" +msgstr "en" + +#: plugins/gofax/reports/contents.tpl:9 plugins/gofon/reports/contents.tpl:9 +msgid "Select subtree to base search on" +msgstr "Seleccione el subárbol como base de la busqueda" + +#: plugins/gofax/reports/contents.tpl:12 plugins/gofon/reports/contents.tpl:12 +msgid "during" +msgstr "durante" + +#: plugins/gofax/reports/contents.tpl:21 +#: plugins/addons/logview/contents.tpl:65 +#: plugins/gofon/reports/contents.tpl:21 +msgid "Search" +msgstr "Buscar" + +#: plugins/gofax/reports/contents.tpl:31 +#: plugins/addons/logview/contents.tpl:83 +#: plugins/gofon/reports/contents.tpl:30 +msgid "Date" +msgstr "Fecha" + +#: plugins/gofax/reports/contents.tpl:33 +msgid "Sender" +msgstr "Remitente" + +#: plugins/gofax/reports/contents.tpl:34 +msgid "Receiver" +msgstr "Receptor" + +#: plugins/gofax/reports/contents.tpl:47 +#: plugins/addons/logview/contents.tpl:96 +#: plugins/gofon/reports/contents.tpl:48 +msgid "Search returned no results..." +msgstr "La busqueda no ha encontrado resultados" + +#: plugins/gofax/reports/class_faxreport.inc:6 +msgid "FAX Reports" +msgstr "Informes de FAX" + +#: plugins/gofax/reports/class_faxreport.inc:97 +#: plugins/gofax/reports/class_faxreport.inc:204 +msgid "Can't connect to fax database, no reports can be shown!" +msgstr "" +"No puedo conectar a la de base de datos de fax, ¡no se pueden mostrar los " +"informes!" + +#: plugins/gofax/reports/class_faxreport.inc:101 +#: plugins/gofax/reports/class_faxreport.inc:208 +msgid "Can't select fax database for report generation!" +msgstr "" +"¡No puedo seleccionar la base de datos de fax para la generación de informes!" + +#: plugins/gofax/reports/class_faxreport.inc:109 +#: plugins/gofax/reports/class_faxreport.inc:216 +msgid "Query for fax database failed!" +msgstr "¡La consulta a la base de datos de fax ha fallado!" + +#: plugins/gofax/reports/class_faxreport.inc:117 +msgid "You have no permission to retrieve informations about this fax id!" +msgstr "" +"¡No tiene permisos para recuperar información sobre el identificador (ID) " +"del fax!" + +#: plugins/gofax/reports/class_faxreport.inc:137 +#: plugins/gofax/reports/class_faxreport.inc:224 +#: plugins/gofon/reports/class_fonreport.inc:158 +msgid "Y-M-D" +msgstr "Y-M-D" + +#: plugins/gofax/reports/main.inc:5 +msgid "FAX reports" +msgstr "Reportes de FAX" + +#: plugins/addons/addressbook/contents.tpl:15 +#: plugins/addons/addressbook/address_edit.tpl:33 +#: plugins/addons/addressbook/address_info.tpl:29 +msgid "Private" +msgstr "Privado" + +#: plugins/addons/addressbook/contents.tpl:15 +msgid "Contact" +msgstr "Contacto" + +#: plugins/addons/addressbook/contents.tpl:37 +msgid "" +"The telephone list plugin provides list and search facilities for the people " +"in your site. You may want to specify the asterisk [*] like in 'Go*us' to " +"find 'Gonicus'. Use the filters below to narrow down your search." +msgstr "" +"La extensión de lista telefónica provee las facilidades de listado y " +"busqueda de usuarios en su sitio. Se puede especificar asterisco (*) como en " +"'Go*us' para encontrar 'Gonicus'. Use estos filtros para reducir su busqueda." + +#: plugins/addons/addressbook/contents.tpl:42 +msgid "Actions" +msgstr "Acciones" + +#: plugins/addons/addressbook/contents.tpl:47 +msgid "Add entry" +msgstr "Añadir entrada" + +#: plugins/addons/addressbook/contents.tpl:50 +msgid "Edit entry" +msgstr "Editar entrada" + +#: plugins/addons/addressbook/contents.tpl:52 +msgid "Remove entry" +msgstr "Eliminar entrada" + +#: plugins/addons/addressbook/contents.tpl:67 +msgid "Select to see regular users" +msgstr "Seleccione para ver usuarios estandar" + +#: plugins/addons/addressbook/contents.tpl:67 +msgid "Show organizational entries" +msgstr "Mostrar entradas de organizaciones" + +#: plugins/addons/addressbook/contents.tpl:68 +msgid "Select to see users in addressbook" +msgstr "Seleccione para ver los usuarios en la libreta de direcciones" + +#: plugins/addons/addressbook/contents.tpl:68 +msgid "Show addressbook entries" +msgstr "Enseñar las entradas de la libreta de direcciones" + +#: plugins/addons/addressbook/contents.tpl:71 +msgid "Display results for department" +msgstr "Mostrar resultados para departamentos" + +#: plugins/addons/addressbook/contents.tpl:78 +msgid "Search string" +msgstr "Cadena de busqueda" + +#: plugins/addons/addressbook/contents.tpl:81 +msgid "Match object" +msgstr "Encontrar objeto" + +#: plugins/addons/addressbook/contents.tpl:83 +msgid "Choose the object that will be searched in" +msgstr "Elegir el objeto que sera buscado" + +#: plugins/addons/addressbook/dial.tpl:3 +msgid "Dial connection..." +msgstr "Marcando conexión" + +#: plugins/addons/addressbook/dial.tpl:11 +#: plugins/addons/addressbook/class_addressbook.inc:337 +#: plugins/addons/addressbook/class_addressbook.inc:339 +#: plugins/addons/addressbook/class_addressbook.inc:340 +#: plugins/addons/addressbook/class_addressbook.inc:414 +msgid "Dial" +msgstr "Llamar" + +#: plugins/addons/addressbook/address_edit.tpl:4 +msgid "Choose the department to store entry in" +msgstr "Elija un departamento para guardar la entrada" + +#: plugins/addons/addressbook/address_edit.tpl:16 +#: plugins/addons/addressbook/address_info.tpl:12 +msgid "Personal" +msgstr "Personal" + +#: plugins/addons/addressbook/address_edit.tpl:23 +#: plugins/addons/addressbook/address_info.tpl:19 +msgid "Initials" +msgstr "Iniciales" + +#: plugins/addons/addressbook/address_edit.tpl:47 +#: plugins/addons/addressbook/address_info.tpl:43 +msgid "Email" +msgstr "Correo Electrónico" + +#: plugins/addons/addressbook/address_edit.tpl:57 +#: plugins/addons/addressbook/address_info.tpl:53 +msgid "Organizational" +msgstr "De organización" + +#: plugins/addons/addressbook/address_edit.tpl:65 +#: plugins/addons/addressbook/address_info.tpl:61 +msgid "Company" +msgstr "Compañia" + +#: plugins/addons/addressbook/address_edit.tpl:71 +#: plugins/addons/addressbook/address_info.tpl:67 +msgid "City" +msgstr "Ciudad" + +#: plugins/addons/addressbook/address_edit.tpl:77 +#: plugins/addons/addressbook/address_info.tpl:73 +msgid "Country" +msgstr "Pais" + +#: plugins/addons/addressbook/remove.tpl:7 +msgid "" +"This includes all addressbook data in this entry. Please double check if " +"your really want to do this since there is no way for GOsa to get your data " +"back." +msgstr "" +"Esto incluye toda la información de la libreta de direcciones en esta " +"entrada. Por favor pulse dos veces si realmente quiere hacer esta, ya que no " +"hay forma de que GOsa recupere la información." + +#: plugins/addons/addressbook/main.inc:23 +msgid "Address book" +msgstr "Libreta de direcciones" + +#: plugins/addons/addressbook/class_addressbook.inc:6 +msgid "Addressbook" +msgstr "Libreta de direcciones" + +#: plugins/addons/addressbook/class_addressbook.inc:143 +#, php-format +msgid "Dial from %s to %s now?" +msgstr "¿Llamar desde %s a %s ahora?" + +#: plugins/addons/addressbook/class_addressbook.inc:147 +msgid "" +"You have no personal phone number set. Please change that in order to " +"perform direct dials." +msgstr "" +"No tiene configurado un numero de teléfono personal. Por favor cambie esto " +"para permitir llamadas directas." + +#: plugins/addons/addressbook/class_addressbook.inc:176 +#: plugins/addons/addressbook/class_addressbook.inc:280 +msgid "You are not allowed to delete this entry!" +msgstr "¡No tiene permisos para eliminar esta entrada!" + +#: plugins/addons/addressbook/class_addressbook.inc:274 +#, php-format +msgid "You're about to delete the entry %s." +msgstr "Has decidido eliminar la entrada %s" + +#: plugins/addons/addressbook/class_addressbook.inc:343 +#, php-format +msgid "Save contact for %s as vcard" +msgstr "Salvar el contacto %s como una vcard" + +#: plugins/addons/addressbook/class_addressbook.inc:346 +#, php-format +msgid "Send mail to %s" +msgstr "Enviar correo a %s" + +#: plugins/addons/addressbook/class_addressbook.inc:426 +msgid "global addressbook" +msgstr "Directorio de contactos global" + +#: plugins/addons/addressbook/class_addressbook.inc:428 +msgid "organizations user database" +msgstr "bases de datos de organizaciones de usuarios" + +#: plugins/addons/addressbook/class_addressbook.inc:432 +#, php-format +msgid "Contact stored in %s" +msgstr "Contacto guardado en %s" + +#: plugins/addons/addressbook/class_addressbook.inc:434 +msgid "Creating new entry in" +msgstr "Crear una nueva entrada en" + +#: plugins/addons/addressbook/class_addressbook.inc:463 +#: plugins/addons/logview/class_logview.inc:62 +#: plugins/addons/logview/class_logview.inc:76 +msgid "All" +msgstr "Todo" + +#: plugins/addons/addressbook/class_addressbook.inc:464 +msgid "Work phone" +msgstr "Teléfono del trabajo" + +#: plugins/addons/addressbook/class_addressbook.inc:464 +msgid "Cell phone" +msgstr "Móvil" + +#: plugins/addons/addressbook/class_addressbook.inc:465 +msgid "Home phone" +msgstr "Teléfono particular" + +#: plugins/addons/addressbook/class_addressbook.inc:465 +msgid "User ID" +msgstr "Identificador (ID) de usuario" + +#: plugins/addons/addressbook/class_addressbook.inc:537 +msgid "" +"Cannot create a unique DN for your entry. Please fill more formular fields." +msgstr "" +"No se puede crear un 'DN' único para esta entrada. Por favor rellene los " +"campos del formulario." + +#: plugins/addons/addressbook/class_addressbook.inc:549 +msgid "" +"You have no permissions to create or modify a global address book entry." +msgstr "" +"No tiene permisos para crear o modificar una entrada de libreta de " +"direcciones global." + +#: plugins/addons/logview/class_logview.inc:6 +msgid "System logs" +msgstr "Registro del sistema" + +#: plugins/addons/logview/class_logview.inc:36 +msgid "No LOG servers defined!" +msgstr "¡No se han definido servidores LOG!" + +#: plugins/addons/logview/class_logview.inc:43 +#: plugins/addons/logview/class_logview.inc:131 +msgid "Can't connect to log database, no logs can be shown!" +msgstr "" +"No puedo conectar a la base de datos de registro. ¡No se pueden mostrar " +"registros!" + +#: plugins/addons/logview/class_logview.inc:47 +#: plugins/addons/logview/class_logview.inc:135 +msgid "Can't select log database for log generation!" +msgstr "" +"No puedo consultar la base de datos de registro para la generación de " +"registros." + +#: plugins/addons/logview/class_logview.inc:56 +#: plugins/addons/logview/class_logview.inc:70 +#: plugins/addons/logview/class_logview.inc:208 +msgid "Query for log database failed!" +msgstr "¡Consulta a la base de datos de logs fallida!" + +#: plugins/addons/logview/class_logview.inc:80 +msgid "one hour" +msgstr "Una hora" + +#: plugins/addons/logview/class_logview.inc:80 +msgid "6 hours" +msgstr "6 horas" + +#: plugins/addons/logview/class_logview.inc:81 +msgid "12 hours" +msgstr "12 horas" + +#: plugins/addons/logview/class_logview.inc:81 +msgid "24 hours" +msgstr "24 horas" + +#: plugins/addons/logview/class_logview.inc:82 +msgid "2 days" +msgstr "2 días" + +#: plugins/addons/logview/class_logview.inc:82 +msgid "one week" +msgstr "una semana" + +#: plugins/addons/logview/class_logview.inc:83 +msgid "2 weeks" +msgstr "2 semanas" + +#: plugins/addons/logview/class_logview.inc:83 +msgid "one month" +msgstr "un mes" + +#: plugins/addons/logview/contents.tpl:12 +msgid "Show hosts" +msgstr "Mostrar equipos" + +#: plugins/addons/logview/contents.tpl:20 +msgid "Log level" +msgstr "Nivel de log" + +#: plugins/addons/logview/contents.tpl:37 +msgid "Time interval" +msgstr "Intervalo de tiempo" + +#: plugins/addons/logview/contents.tpl:46 +msgid "Enter string to search for" +msgstr "Introducir la cadena de busqueda" + +#: plugins/addons/logview/contents.tpl:58 +msgid "Ruleset" +msgstr "Paquete de reglas" + +#: plugins/addons/logview/contents.tpl:81 +msgid "Level" +msgstr "Nivel" + +#: plugins/addons/logview/contents.tpl:82 +msgid "Hostname" +msgstr "Nombre de Maquina" + +#: plugins/addons/logview/contents.tpl:84 +msgid "Message" +msgstr "Mensaje" + +#: plugins/addons/logview/main.inc:23 +msgid "System log view" +msgstr "Ver registro del sistema" + +#: plugins/addons/ldapmanager/class_csvimport.inc:6 +#: plugins/addons/ldapmanager/class_import.inc:6 +msgid "LDIF export" +msgstr "Exportar a LDIF" + +#: plugins/addons/ldapmanager/class_csvimport.inc:137 +msgid "Need 'sn','givenName' and 'uid' to create user" +msgstr "" + +#: plugins/addons/ldapmanager/class_csvimport.inc:170 +#, fuzzy +msgid "failed" +msgstr "Fallado" + +#: plugins/addons/ldapmanager/class_csvimport.inc:174 +msgid "ok" +msgstr "" + +#: plugins/addons/ldapmanager/class_csvimport.inc:230 +#, fuzzy +msgid "status" +msgstr "Estado" + +#: plugins/addons/ldapmanager/class_csvimport.inc:234 +#, php-format +msgid "An Error Occured while inserting entry %s - process aborted" +msgstr "" + +#: plugins/addons/ldapmanager/class_csvimport.inc:259 +msgid "Nothing to import !." +msgstr "" + +#: plugins/addons/ldapmanager/class_csvimport.inc:268 +#: plugins/addons/ldapmanager/class_csvimport.inc:279 +#: plugins/addons/ldapmanager/class_csvimport.inc:284 +#: plugins/addons/ldapmanager/class_import.inc:49 +#: plugins/addons/ldapmanager/class_import.inc:57 +msgid "There is no file uploaded." +msgstr "" + +#: plugins/addons/ldapmanager/class_csvimport.inc:273 +#: plugins/addons/ldapmanager/class_import.inc:42 +#, fuzzy +msgid "The specified file is empty." +msgstr "El valor especificado como 'Archivos' no es válido" + +#: plugins/addons/ldapmanager/class_csvimport.inc:401 +msgid "The selected file does not contain any CSV Data..." +msgstr "" + +#: plugins/addons/ldapmanager/contentimport.tpl:3 +#, fuzzy +msgid "" +"The LDIF import plugin provides methods to upload a set of entries to your " +"running LDAP directory as ldif. You may use this to add new or modify " +"existing entries. Remember that GOsa will not check your ldifs for GOsa " +"conformance." +msgstr "" +"La extensión exportar LDIF provee los metodos para descargar una copia " +"espejo del directorio LDAP actual como un archivo LDIF. Puede grabar estos " +"ficheros como copias de seguridad o para iniciar un nuevo servidor." + +#: plugins/addons/ldapmanager/contentimport.tpl:13 +msgid "Import LDIF File" +msgstr "" + +#: plugins/addons/ldapmanager/contentimport.tpl:18 +#: plugins/addons/ldapmanager/contentcsv.tpl:15 +#, fuzzy +msgid "Browse" +msgstr "Base" + +#: plugins/addons/ldapmanager/contentimport.tpl:31 +msgid "Modify existing attributes" +msgstr "" + +#: plugins/addons/ldapmanager/contentimport.tpl:44 +#, fuzzy +msgid "Overwrite existing entry" +msgstr "Editar entrada" + +#: plugins/addons/ldapmanager/contentimport.tpl:54 +msgid "Import successfull" +msgstr "" + +#: plugins/addons/ldapmanager/contentcsv.tpl:2 +msgid "" +"The CSV import plugin provides methods to generate user accounts from a file " +"containing Comma Seperated Values. The administrator can decide which " +"columns should be transfered to which attribute. Note that you must have at " +"least the UID, GIVENNAME and SURENAME set." +msgstr "" + +#: plugins/addons/ldapmanager/contentcsv.tpl:11 +msgid "Select CSV file to import" +msgstr "" + +#: plugins/addons/ldapmanager/contentcsv.tpl:23 +#, fuzzy +msgid "Select template" +msgstr "Nueva plantilla" + +#: plugins/addons/ldapmanager/contentcsv.tpl:38 +msgid "All entries have been written to the LDAP database successfully." +msgstr "" + +#: plugins/addons/ldapmanager/contentcsv.tpl:40 +msgid "Oups. There was an error during the import of your data." +msgstr "" + +#: plugins/addons/ldapmanager/contentcsv.tpl:43 +msgid "Here is the status report for the import:" +msgstr "" + +#: plugins/addons/ldapmanager/contentcsv.tpl:91 +#, fuzzy +msgid "Selected Template" +msgstr "Seleccionar modo de terminal" + +#: plugins/addons/ldapmanager/class_import.inc:95 +msgid "Unknown Error" +msgstr "" + +#: plugins/addons/ldapmanager/contentexport.tpl:3 +#, fuzzy +msgid "" +"The LDIF export plugin provides methods to download a complete snapshot of " +"the running LDAP directory as ldif. You may save these files for backup " +"purpose or when initializing a new server." +msgstr "" +"La extensión exportar LDIF provee los metodos para descargar una copia " +"espejo del directorio LDAP actual como un archivo LDIF. Puede grabar estos " +"ficheros como copias de seguridad o para iniciar un nuevo servidor." + +#: plugins/addons/ldapmanager/contentexport.tpl:13 +#, fuzzy +msgid "Export single entry" +msgstr "Editar entrada" + +#: plugins/addons/ldapmanager/contentexport.tpl:24 +msgid "Export complete LDIF for" +msgstr "" + +#: plugins/addons/ldapmanager/contentexport.tpl:27 +#: plugins/addons/ldapmanager/contentexport.tpl:42 +#, fuzzy +msgid "Choose the department you want to Export" +msgstr "Elija un departamento para guardar la entrada" + +#: plugins/addons/ldapmanager/contentexport.tpl:39 +msgid "Export IVBB LDIF for" +msgstr "" + +#: plugins/addons/ldapmanager/contentexport.tpl:59 +msgid "Export successfull" +msgstr "" + +#: plugins/addons/ldapmanager/contentexport.tpl:63 +msgid "Click here to save the complete LDAP database to a file" +msgstr "Pulse aquí para grabar la base de datos LDAP completa a un archivo" + +#: plugins/addons/ldapmanager/contentexport.tpl:63 +#, fuzzy +msgid "Click here to save the LDAP Export " +msgstr "Pulse aquí para grabar la base de datos LDAP completa a un archivo" + +#: plugins/addons/ldapmanager/class_ldif.inc:7 +#: plugins/addons/ldapmanager/main.inc:23 +#, fuzzy +msgid "LDAP manager" +msgstr "Exportar a LDIF" + +#: plugins/addons/ldapmanager/class_export.inc:7 +#, fuzzy +msgid "LDIF CSV import" +msgstr "Exportar a LDIF" + +#: plugins/addons/ldapmanager/class_export.inc:72 +msgid "Error while exporting the requested entries!" +msgstr "" + +#: plugins/admin/groups/class_groupGeneric.inc:109 +msgid "Can't find this groups SID in LDAP or in your configuration file!" +msgstr "" +"¡No se puede encontrar el identificador samba de grupo (SID) en LDAP o en el " +"archivo de configuración!" + +#: plugins/admin/groups/class_groupGeneric.inc:141 +msgid "This 'dn' is no group." +msgstr "Este 'dn' no es un grupo." + +#: plugins/admin/groups/class_groupGeneric.inc:252 +msgid "Samba group" +msgstr "Grupo de samba" + +#: plugins/admin/groups/class_groupGeneric.inc:252 +msgid "Domain admins" +msgstr "Administradores del dominio" + +#: plugins/admin/groups/class_groupGeneric.inc:252 +msgid "Domain users" +msgstr "Usuarios del dominio" + +#: plugins/admin/groups/class_groupGeneric.inc:253 +msgid "Domain guests" +msgstr "Invitados del dominio" + +#: plugins/admin/groups/class_groupGeneric.inc:258 +#, php-format +msgid "Special group (%d)" +msgstr "" + +#: plugins/admin/groups/class_groupGeneric.inc:570 +#: plugins/admin/ogroups/class_ogroup.inc:484 +msgid "You have no permissions to create a group on this 'Base'." +msgstr "No tiene permisos para crear un grupo en esta 'Base'." + +#: plugins/admin/groups/class_groupGeneric.inc:580 +msgid "" +"The field 'Name' contains invalid characters. Lowercase, numbers and dashes " +"are allowed." +msgstr "" +"El campo 'Nombre' contiene caracteres no validos. Puede utilizar minúsculas, " +"numeros y guiones." + +#: plugins/admin/groups/class_groupGeneric.inc:588 +msgid "Value specified as 'Name' is already used." +msgstr "El valor especificado como 'Nombre' esta siendo utilizado." + +#: plugins/admin/groups/mail.tpl:11 +msgid "Primary mail address for this shared folder" +msgstr "Dirección de correo electrónica primaria para esta carpeta compartida" + +#: plugins/admin/groups/mail.tpl:16 +msgid "Select mail server to place user on" +msgstr "Seleccione el servidor de correo del usuario" + +#: plugins/admin/groups/mail.tpl:64 +msgid "IMAP shared folders" +msgstr "Carpetas compartidas IMAP" + +#: plugins/admin/groups/mail.tpl:68 +msgid "Default permission" +msgstr "Permisos por defecto" + +#: plugins/admin/groups/mail.tpl:76 +msgid "Member permission" +msgstr "Miembro con Permisos" + +#: plugins/admin/groups/mail.tpl:91 +msgid "Forward messages to non group members" +msgstr "Reenviar mensajes a miembros que no sean del grupo" + +#: plugins/admin/groups/headpage.tpl:6 plugins/admin/ogroups/headpage.tpl:6 +msgid "List of groups" +msgstr "Lista de grupos" + +#: plugins/admin/groups/headpage.tpl:29 plugins/admin/ogroups/headpage.tpl:29 +msgid "" +"This menu allows to add, edit or remove selected groups. You may want to use " +"the range selector on top of the group listbox, when working with a large " +"number of groups." +msgstr "" +"Este menú permite añadir, editar o eliminar los grupos seleccionados. Puede " +"usar el selector de rango en la parte superior de la lista de grupos, cuando " +"trabaja con un gran número de grupos." + +#: plugins/admin/groups/headpage.tpl:32 plugins/admin/ogroups/headpage.tpl:32 +msgid "" +"-Edit- and -New group- will execute an assistant to aid you in editing group " +"properties.-Delete- will ask for confirmation before removing groups." +msgstr "" +"- Editar - y - Nuevo grupo - ejecutaran un asistente que le ayudara en la " +"edición de las propiedades del grupo. - Eliminar - le pedirá confirmación " +"antes de eliminar los grupos." + +#: plugins/admin/groups/headpage.tpl:53 plugins/admin/users/headpage.tpl:57 +msgid "Dive into LDAP subtrees when searching" +msgstr "Desciende a todo el árbol LDAP cuando se busca" + +#: plugins/admin/groups/headpage.tpl:53 plugins/admin/users/headpage.tpl:57 +msgid "Search in subtrees" +msgstr "Buscar en el subárbol" + +#: plugins/admin/groups/main.inc:39 plugins/admin/groups/main.inc:43 +msgid "Group administration" +msgstr "Administración de grupos" + +#: plugins/admin/groups/class_groupManagement.inc:25 +#: plugins/admin/ogroups/class_ogroupManagement.inc:42 +msgid "Groups" +msgstr "Grupos" + +#: plugins/admin/groups/class_groupManagement.inc:202 +#, php-format +msgid "You're about to delete the group '%s'." +msgstr "Está a punto de borrar el grupo '%s'." + +#: plugins/admin/groups/class_groupManagement.inc:208 +#: plugins/admin/groups/class_groupManagement.inc:234 +msgid "You are not allowed to delete this group!" +msgstr "¡No le está permitido eliminar este grupo!" + +#: plugins/admin/groups/remove.tpl:7 +msgid "" +"This may be a primary user group. Please double check if you really want to " +"do this since there is no way for GOsa to get your data back." +msgstr "" +"Este puede ser un grupo primario. Por favor pinche dos veces si realmente " +"quiere hacerlo, dado que GOsa no tiene manera de recuperar esta información." + +#: plugins/admin/groups/application_options.tpl:1 +msgid "Application options" +msgstr "Opciones de aplicaciones" + +#: plugins/admin/groups/class_groupMail.inc:153 +msgid "read" +msgstr "leer" + +#: plugins/admin/groups/class_groupMail.inc:154 +msgid "post" +msgstr "post" + +#: plugins/admin/groups/class_groupMail.inc:155 +msgid "external post" +msgstr "post externo" + +#: plugins/admin/groups/class_groupMail.inc:156 +msgid "append" +msgstr "añadir" + +#: plugins/admin/groups/class_groupMail.inc:157 +msgid "write" +msgstr "escribir" + +#: plugins/admin/groups/class_groupMail.inc:179 +msgid "This 'dn' has no valid mail extensions." +msgstr "Esta 'dn' no tiene extensiones validas de correo." + +#: plugins/admin/groups/class_groupMail.inc:244 +msgid "You're trying to add an invalid email address " +msgstr "Esta intentando añadir una dirección de correo no valida" + +#: plugins/admin/groups/class_groupMail.inc:245 +msgid "to the list of forwarders." +msgstr "a la lista de remitentes." + +#: plugins/admin/groups/class_groupMail.inc:613 +msgid "Please enter a valid email addres in 'Primary address' field." +msgstr "" +"Por favor introduzca una dirección valida de correo electrónico en el campo " +"'Cuenta Principal'." + +#: plugins/admin/groups/acl.tpl:4 +msgid "Object" +msgstr "Objeto" + +#: plugins/admin/groups/acl.tpl:17 +msgid "Apply this acl only for users own entries" +msgstr "Aplicar esta lista de acceso a las entradas de los usuarios" + +#: plugins/admin/groups/application.tpl:4 +msgid "Used applications" +msgstr "Aplicaciones Usadas" + +#: plugins/admin/groups/application.tpl:10 +msgid "Edit parameters" +msgstr "Editar parametros" + +#: plugins/admin/groups/application.tpl:10 +msgid "Edit optional application parameters" +msgstr "Editar parámetros de aplicaciones opcionales" + +#: plugins/admin/groups/application.tpl:20 +msgid "Available applications" +msgstr "Aplicaciones disponibles" + +#: plugins/admin/groups/group_objects.tpl:6 +msgid "Select users to add" +msgstr "Seleccione usuarios que serán añadidos" + +#: plugins/admin/groups/group_objects.tpl:29 +#: plugins/admin/users/headpage.tpl:60 +msgid "Display users of department" +msgstr "Mostrar usuarios del departamento" + +#: plugins/admin/groups/group_objects.tpl:35 +#: plugins/admin/users/headpage.tpl:66 +msgid "Display users matching" +msgstr "Mostrar usuarios que concuerden con" + +#: plugins/admin/groups/group_objects.tpl:36 +#: plugins/admin/users/headpage.tpl:67 +msgid "Regular expression for matching user names" +msgstr "Expresiones regulares que concuerden con nombres de usuarios" + +#: plugins/admin/groups/class_groupAcl.inc:54 +msgid "This 'dn' is no acl container." +msgstr "Este 'dn' no es un contenedor de listas de acceso." + +#: plugins/admin/groups/class_groupAcl.inc:199 +msgid "All fields are writeable" +msgstr "Todos los campos son rellenarles." + +#: plugins/admin/groups/generic.tpl:7 plugins/admin/ogroups/generic.tpl:7 +msgid "Group name" +msgstr "Nombre del grupo" + +#: plugins/admin/groups/generic.tpl:9 +msgid "Posix name of the group" +msgstr "Nombre 'Posix' del grupo" + +#: plugins/admin/groups/generic.tpl:14 plugins/admin/ogroups/generic.tpl:14 +msgid "Descriptive text for this group" +msgstr "Descripción del grupo" + +#: plugins/admin/groups/generic.tpl:23 plugins/admin/ogroups/generic.tpl:23 +msgid "Choose subtree to place group in" +msgstr "Elija lugar del árbol para colocar la aplicación" + +#: plugins/admin/groups/generic.tpl:36 +msgid "Normally IDs are autogenerated, select to specify manually" +msgstr "" +"Normalmente los identificadores (IDs) de grupos son autogenerados, " +"seleccione aquí para ponerlo manualmente" + +#: plugins/admin/groups/generic.tpl:36 +msgid "Force GID" +msgstr "Forzar GID" + +#: plugins/admin/groups/generic.tpl:38 +msgid "Forced ID number" +msgstr "Número de ID forzado" + +#: plugins/admin/groups/generic.tpl:45 +msgid "Select to create a samba conform group" +msgstr "Seleccione para crear un grupo samba" + +#: plugins/admin/groups/generic.tpl:50 +msgid "in domain" +msgstr "en dominio" + +#: plugins/admin/groups/generic.tpl:66 +msgid "Members are in a phone pickup group" +msgstr "Miembros están en un grupo de salto telefónico" + +#: plugins/admin/groups/generic.tpl:81 +msgid "Group members" +msgstr "Miembros del grupo" + +#: plugins/admin/groups/mail_admins.tpl:4 +msgid "Folder administrators" +msgstr "Administradores de Carpetas" + +#: plugins/admin/groups/class_groupApplication.inc:61 +msgid "This 'dn' is no appgroup." +msgstr "Esta'dn' no es un grupo de aplicaciones." + +#: plugins/admin/groups/class_groupApplication.inc:69 +msgid "Remove applications" +msgstr "Borrar aplicaciones" + +#: plugins/admin/groups/class_groupApplication.inc:70 +msgid "" +"This group has application features enabled. You can disable them by " +"clicking below." +msgstr "" +"Este grupo tiene la características de aplicación activa. Puede " +"desactivarlas apretando a continuación." + +#: plugins/admin/groups/class_groupApplication.inc:72 +msgid "Create applications" +msgstr "Crear aplicaciones" + +#: plugins/admin/groups/class_groupApplication.inc:73 +msgid "" +"This group has application features disabled. You can enable them by " +"clicking below." +msgstr "" +"Este grupo tiene la característica de aplicacióon desactivada. Puede " +"activarlas apretando a continuación." + +#: plugins/admin/groups/class_groupApplication.inc:107 +msgid "The selected application name is not uniq. Please check your LDAP." +msgstr "" +"El nombre seleccionado de aplicación no es único. Por favor compruebe su " +"base de datos LDAP." + +#: plugins/admin/groups/class_groupApplication.inc:143 +msgid "The selected application has no options." +msgstr "La aplicación seleccionada no tiene opciones." + +#: plugins/admin/users/password.tpl:2 +msgid "" +"To change the user password use the fields below. The changes take effect " +"immediately. Please memorize the new password, because the user would't be " +"able to login without it." +msgstr "" +"Para cambiar la contraseña del usuario use los campos a continuación. Los " +"cambios tomarán efecto inmediatamente. Por favor, recuerde la nueva " +"contraseña, el usuario no podra autenticarse si ella." + +#: plugins/admin/users/template.tpl:2 +msgid "Creating a new user using templates" +msgstr "Crear un nuevo usuario usando plantillas" + +#: plugins/admin/users/template.tpl:6 +msgid "" +"Creating a new user can be assisted by using templates. Many database " +"records will be filled automatically. Choose none to skip the usage " +"of templates." +msgstr "" +"Crear un nuevo usuario puede ser asistido a través de plantillas. Algunos " +"valores en la base de datos serán rellenado automáticamente. Elegir " +"ninguno para saltarse el uso de plantillas." + +#: plugins/admin/users/template.tpl:11 +#: plugins/admin/users/class_userManagement.inc:614 +msgid "Template" +msgstr "Plantilla" + +#: plugins/admin/users/template.tpl:46 +#: ihtml/themes/altlinux/setup_introduction.tpl:10 +#: ihtml/themes/altlinux/setup_step2.tpl:16 +#: ihtml/themes/altlinux/setup_step3.tpl:12 +#: ihtml/themes/default/setup_introduction.tpl:10 +#: ihtml/themes/default/setup_step2.tpl:16 +#: ihtml/themes/default/setup_step3.tpl:12 +msgid "Continue" +msgstr "Continuar" + +#: plugins/admin/users/main.inc:40 plugins/admin/users/main.inc:46 +msgid "User administration" +msgstr "Administración de Usuarios" + +#: plugins/admin/users/class_userManagement.inc:25 +msgid "Users" +msgstr "Usuarios" + +#: plugins/admin/users/class_userManagement.inc:157 +#: plugins/admin/users/class_userManagement.inc:208 +msgid "You are not allowed to set this users password!" +msgstr "No le es permitido cambiarle la contraseña a estos usuarios." + +#: plugins/admin/users/class_userManagement.inc:244 +#, php-format +msgid "You're about to delete the user %s." +msgstr "Esta a punto de borrar el usuario %s" + +#: plugins/admin/users/class_userManagement.inc:250 +#: plugins/admin/users/class_userManagement.inc:278 +msgid "You are not allowed to delete this user!" +msgstr "No le es permitido borrar este usuario" + +#: plugins/admin/users/class_userManagement.inc:365 +#: plugins/admin/ogroups/class_ogroup.inc:202 +msgid "none" +msgstr "ninguno" + +#: plugins/admin/users/class_userManagement.inc:431 +msgid "A person with the choosen name is already used in this tree." +msgstr "Una persona con el nombre elegido ya existe en el árbol" + +#: plugins/admin/users/remove.tpl:7 +msgid "" +"This includes all account data, system access rules, imap settings, etc. for " +"this user. Please double check if your really want to do this since there is " +"no way for GOsa to get your data back." +msgstr "" +"Esto incluye toda las información de cuentas, reglas de acceso al sistema, " +"configuración IMAP, etc. de este usuario. Por favor pulse dos veces si " +"quiere realmente hacer esta, ya que no hay manera de que GOsa recupere " +"posteriormente la información." + +#: plugins/admin/users/headpage.tpl:6 +msgid "List of users" +msgstr "Lista de usuarios" + +#: plugins/admin/users/headpage.tpl:16 +msgid "New template" +msgstr "Nueva plantilla" + +#: plugins/admin/users/headpage.tpl:30 +msgid "" +"This menu provides the functionality to create, edit or delete selected " +"users. Having a great number of users, you may want to use the range " +"seletors on top of the user list." +msgstr "" +"Este menu provee la funcionalidad de crear, editar o borrar los usuarios " +"seleccionados. Si tiene un gran numero de usuarios usted preferirá usar los " +"selectores de rangos en la parte superior del listado." + +#: plugins/admin/users/headpage.tpl:33 +msgid "" +"-Edit- and -New user- execute an assistant to aid you in managing your " +"account informations. -Delete- will ask for confirmation before deleting the " +"users from the LDAP server." +msgstr "" +"-Editar- y -Nuevo Usuario- ejecutan un asistente para el manejo de " +"información de cuentas. -Borrar- le preguntará confirmación antes de borrar " +"los usuarios del servidor LDAP." + +#: plugins/admin/users/headpage.tpl:47 +msgid "Select to see template pseudo users" +msgstr "Seleccione para mostrar los usuarios pseudo plantillas" + +#: plugins/admin/users/headpage.tpl:47 +msgid "Show templates" +msgstr "Mostrar plantillas" + +#: plugins/admin/users/headpage.tpl:48 +msgid "Select to see users that have only a GOsa object" +msgstr "Seleccione para ver los usuarios que solo tienen un objeto GOsa" + +#: plugins/admin/users/headpage.tpl:48 +msgid "Show functional users" +msgstr "Mostrar usuarios funcionales" + +#: plugins/admin/users/headpage.tpl:49 +msgid "Select to see users that have posix settings" +msgstr "Seleccione para ver usuario que tienen configuraciones posix" + +#: plugins/admin/users/headpage.tpl:49 +msgid "Show unix users" +msgstr "Mostrar los usuarios unix" + +#: plugins/admin/users/headpage.tpl:50 +msgid "Select to see users that have mail settings" +msgstr "Seleccione para ver los usuarios que tiene confiraciones de correo" + +#: plugins/admin/users/headpage.tpl:50 +msgid "Show mail users" +msgstr "Mostrar los usuarios de correo" + +#: plugins/admin/users/headpage.tpl:51 +msgid "Select to see users that have samba settings" +msgstr "Seleccione para ver los usuarios que tiene configuraciones samba" + +#: plugins/admin/users/headpage.tpl:51 +msgid "Show samba users" +msgstr "Mostrar usuarios samba" + +#: plugins/admin/users/headpage.tpl:52 +msgid "Select to see users that have proxy settings" +msgstr "Seleccione para ver los usuarios que tienen configuraciones de proxy" + +#: plugins/admin/users/headpage.tpl:52 +msgid "Show proxy users" +msgstr "Mostrar los usuarios de proxy" + +#: plugins/admin/users/headpage.tpl:53 +msgid "Select to see users that have ftp settings" +msgstr "Selecctione para ver los usuarios que tienen configuraciones de ftp" + +#: plugins/admin/users/headpage.tpl:53 +msgid "Show FTP users" +msgstr "Mostrar los usuarios de FTP" + +#: plugins/admin/users/headpage.tpl:54 +msgid "Select to see users that have FAX settings" +msgstr "Seleccione para ver los usuarios que tienen configuraciones de FAX" + +#: plugins/admin/users/headpage.tpl:54 +msgid "Show FAX users" +msgstr "Mostrar los usuarios de FAX" + +#: plugins/admin/applications/generic.tpl:7 +#: plugins/admin/applications/generic.tpl:8 +msgid "Application name" +msgstr "Nombre de la aplicación" + +#: plugins/admin/applications/generic.tpl:12 +#: plugins/admin/systems/server.tpl:48 plugins/admin/systems/terminal.tpl:109 +#: plugins/admin/systems/workstation.tpl:109 +#: plugins/admin/ogroups/termgroup.tpl:13 +msgid "Execute" +msgstr "Ejecute" + +#: plugins/admin/applications/generic.tpl:14 +msgid "Path and/or binary name of application" +msgstr "Ruta y nombre del binario de la aplicación" + +#: plugins/admin/applications/generic.tpl:18 +msgid "Display name" +msgstr "Nombre mostrado" + +#: plugins/admin/applications/generic.tpl:20 +msgid "Application name to be displayed (i.e. below icons)" +msgstr "" +"Nombre que sera mostrado de la aplicación(por ejemplo despues de los iconos)." + +#: plugins/admin/applications/generic.tpl:35 +msgid "Choose subtree to place application in" +msgstr "Elija lugar del árbol para colocar la aplicación" + +#: plugins/admin/applications/generic.tpl:46 +msgid "Icon" +msgstr "Icono" + +#: plugins/admin/applications/generic.tpl:51 +msgid "Update" +msgstr "Actualizar" + +#: plugins/admin/applications/generic.tpl:51 +msgid "Reload picture from LDAP" +msgstr "Recargar imagen desde LDAP" + +#: plugins/admin/applications/generic.tpl:61 +msgid "Only executable for members" +msgstr "Solo ejecutables para los miembros" + +#: plugins/admin/applications/generic.tpl:63 +msgid "Replace user configuration on startup" +msgstr "Reemplazar la configuración del usuario en el inicio" + +#: plugins/admin/applications/generic.tpl:67 +msgid "Place icon on members desktop" +msgstr "Colocar icono en los escritorios de los miembros " + +#: plugins/admin/applications/generic.tpl:70 +msgid "Place entry in members startmenu" +msgstr "Colocar entrado en los menús de inicio de los miembros" + +#: plugins/admin/applications/class_applicationParameters.inc:47 +msgid "Remove options" +msgstr "Eliminar opciones" + +#: plugins/admin/applications/class_applicationParameters.inc:48 +msgid "This application has options. You can disable them by clicking below." +msgstr "Esta aplicación tiene opciones. Puede desactivarlas pulsando aquí." + +#: plugins/admin/applications/class_applicationParameters.inc:50 +msgid "Create options" +msgstr "Crear opciones" + +#: plugins/admin/applications/class_applicationParameters.inc:51 +msgid "" +"This application has options disabled. You can enable them by clicking below." +msgstr "" +"Esta aplicación tiene opciones desactivadas. Puede activarlas pulsando aquí." + +#: plugins/admin/applications/class_applicationParameters.inc:87 +msgid "Variable" +msgstr "Variable" + +#: plugins/admin/applications/class_applicationParameters.inc:87 +msgid "Default value" +msgstr "Valor por defecto" + +#: plugins/admin/applications/class_applicationParameters.inc:98 +msgid "Add option" +msgstr "Añadir opción" + +#: plugins/admin/applications/class_applicationParameters.inc:149 +#, php-format +msgid "Value '%s' specified as option name is not valid." +msgstr "El valor '%s' especificado como nombre de opción no es valido." + +#: plugins/admin/applications/remove.tpl:7 +msgid "" +"This may be used by several groups. Please double check if your really want " +"to do this since there is no way for GOsa to get your data back." +msgstr "" +"Esta puede ser usada por varios grupos. Por favor pulse dos veces si quiere " +"realmente hacer esto, ya que no hay manera de que GOsa recupere " +"posteriormente la información." + +#: plugins/admin/applications/headpage.tpl:6 +msgid "List of applications" +msgstr "Lista de aplicaciones" + +#: plugins/admin/applications/headpage.tpl:28 +msgid "" +"This menu allows to add, edit or remove selected applications. You may want " +"to use the range selector on top of the application listbox, when working " +"with a large number of applications." +msgstr "" +"Este menú permite añadir, editar o eliminar las aplicaciones seleccionadas. " +"Puede usar el selector de rango en la parte superior de la lista de " +"aplicaciones, cuando trabaja con un gran número de aplicaciones." + +#: plugins/admin/applications/headpage.tpl:31 +msgid "" +"-Edit- and -New application- will execute an assistant to aid you in editing " +"properties. -Delete- will ask for confirmation before removing applications." +msgstr "" +"-Editar y - Nueva aplicación - ejecutaran un asistente para ayudarle a " +"editar las propiedades de la aplicación. - Eliminar - le pedirá comprobación " +"antes de eliminar la aplicación." + +#: plugins/admin/applications/headpage.tpl:45 +msgid "Display applications of department" +msgstr "Mostrar aplicaciones de departamentos" + +#: plugins/admin/applications/headpage.tpl:51 +msgid "Display applications matching" +msgstr "Mostrar aplicaciones que concuerden con" + +#: plugins/admin/applications/headpage.tpl:52 +msgid "Regular expression for matching application names" +msgstr "Expresiones regulares para encontrar nombres de aplicaciones" + +#: plugins/admin/applications/main.inc:38 +#: plugins/admin/applications/main.inc:40 +msgid "Application management" +msgstr "Mantenimiento de aplicaciones" + +#: plugins/admin/applications/class_applicationManagement.inc:185 +#, php-format +msgid "You're about to delete the application '%s'." +msgstr "Va ha eliminar la aplicación '%s'." + +#: plugins/admin/applications/class_applicationManagement.inc:191 +#: plugins/admin/applications/class_applicationManagement.inc:217 +msgid "You are not allowed to delete this application!" +msgstr "¡No tiene permisos para eliminar esta aplicación!" + +#: plugins/admin/applications/class_applicationGeneric.inc:57 +msgid "This 'dn' is no application." +msgstr "Este 'dn' no es una aplicación" + +#: plugins/admin/applications/class_applicationGeneric.inc:148 +msgid "The specified picture has not been uploaded correctly." +msgstr "La foto indicada no ha sido subida correctamente." + +#: plugins/admin/applications/class_applicationGeneric.inc:180 +msgid "You have no permissions to create a application on this 'Base'." +msgstr "No tiene permisos para crear una aplicación en esta 'Base'." + +#: plugins/admin/applications/class_applicationGeneric.inc:185 +msgid "Required field 'Name' is not filled." +msgstr "El campo requerido 'Nombre' no ha sido llenado." + +#: plugins/admin/applications/class_applicationGeneric.inc:188 +msgid "Required field 'Execute' is not filled." +msgstr "El campo requerido 'Ejecutar' no ha sido llenado." + +#: plugins/admin/applications/class_applicationGeneric.inc:197 +msgid "There's already an application with this 'Name'." +msgstr "Ya existe una aplicación con este 'Nombre'." + +#: plugins/admin/departments/generic.tpl:4 +#: plugins/admin/systems/terminal.tpl:1 +#: plugins/admin/systems/workstation.tpl:1 +msgid "Properties" +msgstr "Propiedades" + +#: plugins/admin/departments/generic.tpl:8 +msgid "Name of department" +msgstr "Nombre del departamento" + +#: plugins/admin/departments/generic.tpl:9 +msgid "Name of subtree to create" +msgstr "Nombre del subárbol para crear" + +#: plugins/admin/departments/generic.tpl:14 +msgid "Descriptive text for department" +msgstr "Descripción del departamento" + +#: plugins/admin/departments/generic.tpl:18 +msgid "Category" +msgstr "Categoría" + +#: plugins/admin/departments/generic.tpl:20 +msgid "Category for this subtree" +msgstr "Categoría de este subarbol" + +#: plugins/admin/departments/generic.tpl:30 +msgid "Choose subtree to place department in" +msgstr "Elija subárbol para colocar el departamento" + +#: plugins/admin/departments/generic.tpl:47 +msgid "State where this subtree is located" +msgstr "País donde esta localizado el subarbol" + +#: plugins/admin/departments/generic.tpl:51 +msgid "Location of this subtree" +msgstr "Localización de este subarbol" + +#: plugins/admin/departments/generic.tpl:55 +msgid "Postal address of this subtree" +msgstr "Dirección postal de este subarbol" + +#: plugins/admin/departments/generic.tpl:59 +msgid "Base telephone number of this subtree" +msgstr "Número base de teléfono de este subarbol" + +#: plugins/admin/departments/generic.tpl:63 +msgid "Base facsimile telephone number of this subtree" +msgstr "Número base de fax de este subarbol" + +#: plugins/admin/departments/remove.tpl:7 +msgid "" +"This includes all accounts, systems, etc. in this subtree. Please " +"double check if your really want to do this since there is no way for GOsa " +"to get your data back." +msgstr "" +"Esto incluye todas las cuentas, sistemas, etc. en este subárbol. Por " +"favor pulse dos veces si quiere realmente hacer esto, ya que no hay forma de " +"que GOsa recupere la información posteriormente." + +#: plugins/admin/departments/remove.tpl:11 plugins/admin/systems/remove.tpl:11 +msgid "" +"Best thing to do before performing this action would be to save the current " +"contents of your LDAP tree in a file. So - if you've done so - press " +"Delete to continue or Cancel to abort." +msgstr "" +"La mejor opción antes de ejecutar esta acción es haber grabado el contenido " +"actual de su árbol LDAP en un fichero. Entonces - Y solo si lo ha hecho - " +"presione Eliminar para continuar o Cancelar para abortar." + +#: plugins/admin/departments/headpage.tpl:6 +msgid "List of departments" +msgstr "Lista de Departamentos" + +#: plugins/admin/departments/headpage.tpl:28 +msgid "" +"This menu allows to create, delete and edit selected departments. Having a " +"large size of departments, you might prefer the range selectors on top of " +"the department list." +msgstr "" +"Este menú permite añadir, editar o eliminar los departamentos seleccionados. " +"Puede usar el selector de rango en la parte superior de la lista de " +"departamentos, cuando trabaja con un gran número de departamentos." + +#: plugins/admin/departments/headpage.tpl:31 +msgid "" +"-Edit- and -New department- will provide an assistant to aid you when " +"performing changes on your departments. -Delete- will ask you for " +"confirmation before really deleting anything." +msgstr "" +"- Editar - y - Nuevo departamento - provee un asistente que le ayudara " +"cuando quiera crear cambios en los departamentos. - Eliminar - le pedirá " +"confirmación antes de realmente eliminar nada." + +#: plugins/admin/departments/headpage.tpl:45 +msgid "Display subdepartments of" +msgstr "Mostrar subdepartamentos de " + +#: plugins/admin/departments/headpage.tpl:51 +msgid "Display departments matching" +msgstr "Mostrar Departamentos que concuerden con" + +#: plugins/admin/departments/headpage.tpl:52 +msgid "Regular expression for matching department names" +msgstr "Expresiones regulares para encontrar nombres de departamentos" + +#: plugins/admin/departments/main.inc:38 plugins/admin/departments/main.inc:40 +msgid "Department management" +msgstr "Mantenimiento de Departamentos" + +#: plugins/admin/departments/class_departmentManagement.inc:25 +#: plugins/admin/ogroups/class_ogroupManagement.inc:43 +msgid "Departments" +msgstr "Departamentos" + +#: plugins/admin/departments/class_departmentManagement.inc:130 +#, php-format +msgid "You're about to delete the whole LDAP subtree placed under '%s'." +msgstr "Esta a punto de borrar todo el subárbol LDAP colocado bajo '%s'." + +#: plugins/admin/departments/class_departmentManagement.inc:145 +msgid "You have no permission to remove this department." +msgstr "No tiene permisos para eliminar este departamento." + +#: plugins/admin/departments/class_departmentGeneric.inc:127 +msgid "You have no permissions to create a department on this 'Base'." +msgstr "No tiene permisos para crear un departamento en esta 'Base'." + +#: plugins/admin/departments/class_departmentGeneric.inc:134 +#: plugins/admin/departments/class_departmentGeneric.inc:136 +msgid "Department with that 'Name' already exists." +msgstr "Ya existe un Departamento con este 'Nombre'." + +#: plugins/admin/departments/class_departmentGeneric.inc:144 +msgid "Required field 'Description' is not set." +msgstr "El campo requerido 'Descripción' no ha sido rellenado." + +#: plugins/admin/departments/class_departmentGeneric.inc:149 +msgid "The field 'Name' contains the reserved word 'incoming'." +msgstr "El campo 'Nombre' contiene la palabra reservada 'incoming'." + +#: plugins/admin/departments/class_departmentGeneric.inc:150 +msgid " Please choose another name." +msgstr "Por favor elija otro nombre." + +#: plugins/admin/systems/class_terminalService.inc:82 +msgid "default" +msgstr "por defecto" + +#: plugins/admin/systems/class_terminalService.inc:83 +msgid "show chooser" +msgstr "mostrar elegidos" + +#: plugins/admin/systems/class_terminalService.inc:84 +msgid "direct" +msgstr "Directo" + +#: plugins/admin/systems/class_terminalService.inc:87 +msgid "load balanced" +msgstr "balanceo de carga" + +#: plugins/admin/systems/class_terminalService.inc:90 +msgid "Windows RDP" +msgstr "Windows RDP" + +#: plugins/admin/systems/class_terminalService.inc:91 +msgid "ICA client" +msgstr "Cliente ICA" + +#: plugins/admin/systems/class_terminalService.inc:135 +#: plugins/admin/systems/class_terminalInfo.inc:61 +#: plugins/admin/systems/class_terminalStartup.inc:75 +#: plugins/admin/systems/class_terminalGeneric.inc:126 +msgid "This 'dn' has no terminal features." +msgstr "Esta 'dn' no tiene características de terminal." + +#: plugins/admin/systems/class_terminalService.inc:182 +#, fuzzy +msgid "Choose the phone located at the current terminal" +msgstr "Elija un departamento para guardar la entrada" + +#: plugins/admin/systems/class_terminalService.inc:244 +#: plugins/admin/systems/class_terminalService.inc:249 +msgid "Please specify a valid VSync range." +msgstr "Por favor especifique un rango VSync valido" + +#: plugins/admin/systems/class_terminalService.inc:259 +#: plugins/admin/systems/class_terminalService.inc:264 +msgid "Please specify a valid HSync range." +msgstr "Por favor especifique un rango HSync valido" + +#: plugins/admin/systems/class_terminalInfo.inc:68 +msgid "This is a virtual terminal which has no properties to show here." +msgstr "" +"Este es un terminal virtual que no tiene propiedades que puedan ser mostradas" + +#: plugins/admin/systems/class_terminalInfo.inc:80 +msgid "online" +msgstr "en linea" + +#: plugins/admin/systems/class_terminalInfo.inc:130 +msgid "running" +msgstr "Activo" + +#: plugins/admin/systems/class_terminalInfo.inc:133 +msgid "not running" +msgstr "no esta activo" + +#: plugins/admin/systems/class_terminalInfo.inc:141 +msgid "unknown status" +msgstr "estado desconocido" + +#: plugins/admin/systems/class_terminalInfo.inc:159 +msgid "offline" +msgstr "fuera de linea" + +#: plugins/admin/systems/network.tpl:1 +msgid "Network settings" +msgstr "Configuración de red" + +#: plugins/admin/systems/network.tpl:8 +msgid "IP-address" +msgstr "Dirección IP" + +#: plugins/admin/systems/network.tpl:16 +msgid "MAC-address" +msgstr "Dirección MAC" + +#: plugins/admin/systems/server.tpl:6 +#, fuzzy +msgid "Server name" +msgstr "Servidor" + +#: plugins/admin/systems/server.tpl:15 plugins/admin/systems/phone.tpl:15 +#: plugins/admin/systems/terminal.tpl:20 plugins/admin/systems/printer.tpl:23 +#: plugins/admin/systems/workstation.tpl:20 +#: plugins/admin/systems/component.tpl:15 +#: plugins/admin/systems/wingeneric.tpl:15 +msgid "Choose subtree to place terminal in" +msgstr "Elija un subárbol donde colocar el terminal" + +#: plugins/admin/systems/server.tpl:38 plugins/admin/systems/terminal.tpl:99 +#: plugins/admin/systems/workstation.tpl:99 +#: plugins/admin/ogroups/termgroup.tpl:3 +msgid "Action" +msgstr "Acción" + +#: plugins/admin/systems/server.tpl:42 +#, fuzzy +msgid "Select action to execute for this server" +msgstr "Seleccione una acción que se ejecutara en este terminal" + +#: plugins/admin/systems/info.tpl:1 +msgid "System information" +msgstr "Información de sistema" + +#: plugins/admin/systems/info.tpl:7 +msgid "CPU" +msgstr "CPU" + +#: plugins/admin/systems/info.tpl:10 +msgid "Memory" +msgstr "Memoria" + +#: plugins/admin/systems/info.tpl:13 +msgid "Boot MAC" +msgstr "MAC" + +#: plugins/admin/systems/info.tpl:16 +msgid "USB support" +msgstr "Soporte USB" + +#: plugins/admin/systems/info.tpl:19 plugins/admin/systems/info.tpl:87 +msgid "System status" +msgstr "Estado del Sistema" + +#: plugins/admin/systems/info.tpl:23 +#, fuzzy +msgid "Inventary number" +msgstr "Número de teléfono" + +#: plugins/admin/systems/info.tpl:27 +msgid "Last login" +msgstr "Ultimo Inicio de Sesion" + +#: plugins/admin/systems/info.tpl:38 +msgid "Network devices" +msgstr "Dispositivos de Red" + +#: plugins/admin/systems/info.tpl:47 +msgid "IDE devices" +msgstr "Controladora IDE" + +#: plugins/admin/systems/info.tpl:56 +msgid "SCSI devices" +msgstr "Controladora SCSI" + +#: plugins/admin/systems/info.tpl:64 +msgid "Floppy device" +msgstr "Disquetera" + +#: plugins/admin/systems/info.tpl:68 +msgid "CDROM device" +msgstr "Unidad de CDROM" + +#: plugins/admin/systems/info.tpl:73 plugins/admin/systems/service.tpl:83 +msgid "Graphic device" +msgstr "Tarjeta Gráfica" + +#: plugins/admin/systems/info.tpl:77 +msgid "Audio device" +msgstr "Tarjeta Sonido" + +#: plugins/admin/systems/info.tpl:93 +msgid "Up since" +msgstr "Arriba desde" + +#: plugins/admin/systems/info.tpl:96 +msgid "CPU load" +msgstr "Carga de CPU" + +#: plugins/admin/systems/info.tpl:99 +msgid "Memory usage" +msgstr "Uso de memoria" + +#: plugins/admin/systems/info.tpl:102 +msgid "Swap usage" +msgstr "Uso de partición de intercambio" + +#: plugins/admin/systems/info.tpl:116 +msgid "SSH service" +msgstr "Servicio SSH" + +#: plugins/admin/systems/info.tpl:119 +msgid "Print service" +msgstr "Servicio de impresión" + +#: plugins/admin/systems/info.tpl:122 +msgid "Scan service" +msgstr "Servicio de exploración" + +#: plugins/admin/systems/info.tpl:125 +msgid "Sound service" +msgstr "Servicio de sonido" + +#: plugins/admin/systems/info.tpl:128 +msgid "GUI" +msgstr "GUI" + +#: plugins/admin/systems/main.inc:45 plugins/admin/systems/main.inc:47 +msgid "System management" +msgstr "Gestión del sistema" + +#: plugins/admin/systems/class_terminalGeneric.inc:62 +#: plugins/admin/systems/class_workstationGeneric.inc:71 +msgid "text" +msgstr "texto" + +#: plugins/admin/systems/class_terminalGeneric.inc:63 +#: plugins/admin/systems/class_workstationGeneric.inc:72 +msgid "graphic" +msgstr "Gráfico" + +#: plugins/admin/systems/class_terminalGeneric.inc:88 +#: plugins/admin/systems/class_servGeneric.inc:58 +#: plugins/admin/systems/class_workstationGeneric.inc:98 +#: plugins/admin/ogroups/class_termgroup.inc:51 +msgid "No WAKECMD definition found in your gosa.conf" +msgstr "No se ha encontrado ninguna definición de 'WAKECMD' en 'gosa.conf'" + +#: plugins/admin/systems/class_terminalGeneric.inc:92 +#: plugins/admin/systems/class_terminalGeneric.inc:104 +#: plugins/admin/systems/class_terminalGeneric.inc:116 +#: plugins/admin/systems/class_servGeneric.inc:62 +#: plugins/admin/systems/class_servGeneric.inc:74 +#: plugins/admin/systems/class_servGeneric.inc:86 +#: plugins/admin/systems/class_workstationGeneric.inc:102 +#: plugins/admin/systems/class_workstationGeneric.inc:114 +#: plugins/admin/systems/class_workstationGeneric.inc:126 +#: plugins/admin/ogroups/class_termgroup.inc:55 +#: plugins/admin/ogroups/class_termgroup.inc:67 +#: plugins/admin/ogroups/class_termgroup.inc:79 +#, php-format +msgid "Execution of '%s' failed!" +msgstr "¡La ejecución de '%s' ha fallado!" + +#: plugins/admin/systems/class_terminalGeneric.inc:100 +#: plugins/admin/systems/class_servGeneric.inc:70 +#: plugins/admin/systems/class_workstationGeneric.inc:110 +#: plugins/admin/ogroups/class_termgroup.inc:63 +msgid "No REBOOTCMD definition found in your gosa.conf" +msgstr "No se ha encontrado ninguna definición de 'REBOOTCMD' en 'gosa.conf'" + +#: plugins/admin/systems/class_terminalGeneric.inc:112 +#: plugins/admin/systems/class_servGeneric.inc:82 +#: plugins/admin/systems/class_workstationGeneric.inc:122 +#: plugins/admin/ogroups/class_termgroup.inc:75 +msgid "No HALTCMD definition found in your gosa.conf" +msgstr "No se ha encontrado ninguna definición de 'HALTCMD' en 'gosa.conf'" + +#: plugins/admin/systems/class_terminalGeneric.inc:142 +#: plugins/admin/systems/class_servGeneric.inc:110 +#: plugins/admin/systems/class_workstationGeneric.inc:151 +#: plugins/admin/ogroups/class_termgroup.inc:91 +msgid "Switch off" +msgstr "Apagar" + +#: plugins/admin/systems/class_terminalGeneric.inc:142 +#: plugins/admin/systems/class_servGeneric.inc:110 +#: plugins/admin/systems/class_workstationGeneric.inc:151 +#: plugins/admin/ogroups/class_termgroup.inc:91 +msgid "Reboot" +msgstr "Reiniciar" + +#: plugins/admin/systems/class_terminalGeneric.inc:144 +#: plugins/admin/systems/class_servGeneric.inc:112 +#: plugins/admin/systems/class_workstationGeneric.inc:153 +#: plugins/admin/ogroups/class_termgroup.inc:91 +msgid "Wake up" +msgstr "Despertar" + +#: plugins/admin/systems/class_terminalGeneric.inc:213 +msgid "You have no permissions to create a terminal on this 'Base'." +msgstr "No tiene permisos para crear un terminal en esta 'Base'." + +#: plugins/admin/systems/class_terminalGeneric.inc:217 +msgid "The required field 'Terminal name' is not set." +msgstr " El campo requerido 'Nombre del terminal' no ha sido rellenado." + +#: plugins/admin/systems/class_terminalGeneric.inc:230 +#: plugins/admin/systems/class_servGeneric.inc:178 +#: plugins/admin/systems/class_workstationGeneric.inc:237 +#: plugins/admin/systems/class_printGeneric.inc:131 +#: plugins/admin/systems/class_phoneGeneric.inc:128 +#: plugins/admin/systems/class_componentGeneric.inc:125 +#: plugins/admin/systems/class_wingeneric.inc:165 +#, php-format +msgid "There is already an entry '%s' in the base choosen by you" +msgstr "Ya hay una entrada '%s' en la base elegida" + +#: plugins/admin/systems/phone.tpl:6 +msgid "Phone name" +msgstr "Número de teléfono" + +#: plugins/admin/systems/class_servGeneric.inc:48 +#, fuzzy +msgid "This 'dn' has no server features." +msgstr "Esta 'dn' no tiene características de impresora." + +#: plugins/admin/systems/class_servGeneric.inc:168 +#, fuzzy +msgid "You have no permissions to create a server on this 'Base'." +msgstr "No tiene permisos para crear un usuario en esta 'Base'." + +#: plugins/admin/systems/terminal.tpl:9 +msgid "Terminal template" +msgstr "Plantilla de terminal" + +#: plugins/admin/systems/terminal.tpl:11 +msgid "Terminal name" +msgstr "Nombre de terminal" + +#: plugins/admin/systems/terminal.tpl:36 +#: plugins/admin/systems/workstation.tpl:36 +msgid "Mode" +msgstr "Modo" + +#: plugins/admin/systems/terminal.tpl:38 +#: plugins/admin/systems/workstation.tpl:38 +msgid "Select terminal mode" +msgstr "Seleccionar modo de terminal" + +#: plugins/admin/systems/terminal.tpl:52 +#: plugins/admin/systems/workstation.tpl:52 +msgid "Root server" +msgstr "Servidor Raíz" + +#: plugins/admin/systems/terminal.tpl:54 +#: plugins/admin/systems/workstation.tpl:54 +msgid "Select NFS root filesystem to use" +msgstr "Seleccione sistema de archivos raíz 'NFS' que se usará" + +#: plugins/admin/systems/terminal.tpl:60 +#: plugins/admin/systems/workstation.tpl:60 +msgid "Swap server" +msgstr "Servidor de Intercambio" + +#: plugins/admin/systems/terminal.tpl:62 +#: plugins/admin/systems/workstation.tpl:62 +msgid "Choose NFS filesystem to place swap files on" +msgstr "" +"Seleccione sistema de archivos 'NFS' donde estarán los archivos de " +"intercambio" + +#: plugins/admin/systems/terminal.tpl:74 +#: plugins/admin/systems/workstation.tpl:74 +msgid "Syslog server" +msgstr "Servidor de Logs" + +#: plugins/admin/systems/terminal.tpl:76 +#: plugins/admin/systems/workstation.tpl:76 +msgid "Choose server to use for logging" +msgstr "Elija un servidor que será usado para registro" + +#: plugins/admin/systems/terminal.tpl:82 +#: plugins/admin/systems/workstation.tpl:82 +msgid "NTP server" +msgstr "Servidor NTP" + +#: plugins/admin/systems/terminal.tpl:84 +#: plugins/admin/systems/workstation.tpl:84 +msgid "Choose server to use for synchronizing time" +msgstr "Elija un servidor que será usado para sincronización horaria" + +#: plugins/admin/systems/terminal.tpl:103 +#: plugins/admin/systems/workstation.tpl:103 +msgid "Select action to execute for this terminal" +msgstr "Seleccione una acción que se ejecutara en este terminal" + +#: plugins/admin/systems/class_servDHCP.inc:32 +#, fuzzy +msgid "Remove DHCP service" +msgstr "Eliminar foto" + +#: plugins/admin/systems/class_servDHCP.inc:33 +#, fuzzy +msgid "" +"This server has DHCP features enabled. You can disable them by clicking " +"below." +msgstr "" +"Esta cuenta tiene la extensión de fax activada. Puede desactivarla pulsando " +"aquí." + +#: plugins/admin/systems/class_servDHCP.inc:35 +#, fuzzy +msgid "Add DHCP service" +msgstr "Servicio SSH" + +#: plugins/admin/systems/class_servDHCP.inc:36 +#, fuzzy +msgid "" +"This server has DHCP features disabled. You can enable them by clicking " +"below." +msgstr "" +"Esta cuenta tiene la extensión de fax desactivada. Puede activarla pulsando " +"aquí." + +#: plugins/admin/systems/class_systemManagement.inc:32 +msgid "Systems" +msgstr "Sistemas" + +#: plugins/admin/systems/class_systemManagement.inc:246 +msgid "You can't edit this object type yet!" +msgstr "¡No puede editar este tipo de objeto todavía!" + +#: plugins/admin/systems/class_systemManagement.inc:262 +msgid "Passwords entered as new and repeated do not match!" +msgstr "!Las contraseñas introducidas como 'nuevo' y 'repetir' no son iguales¡" + +#: plugins/admin/systems/class_systemManagement.inc:275 +msgid "You are not allowed to set this systems password!" +msgstr "¡No tiene permisos para cambiar contraseñas de sistema!" + +#: plugins/admin/systems/class_systemManagement.inc:319 +#, fuzzy, php-format +msgid "You're about to delete all information about the component at '%s'." +msgstr "Esta a punto de borrar toda la información sobre el terminal en '%s'." + +#: plugins/admin/systems/class_systemManagement.inc:325 +#: plugins/admin/systems/class_systemManagement.inc:378 +#, fuzzy +msgid "You are not allowed to delete this component!" +msgstr "¡No tiene permisos para eliminar esta entrada!" + +#: plugins/admin/systems/class_systemManagement.inc:642 +msgid "New terminal" +msgstr "Nuevo terminal" + +#: plugins/admin/systems/class_systemManagement.inc:645 +msgid "New workstation" +msgstr "Nueva estación de trabajo" + +#: plugins/admin/systems/class_systemManagement.inc:661 +msgid "Thin client template for" +msgstr "Plantilla de cliente ligero para" + +#: plugins/admin/systems/class_systemManagement.inc:673 +msgid "Workstation template for" +msgstr "Plantilla de estación de trabajo para" + +#: plugins/admin/systems/class_workstationGeneric.inc:136 +msgid "This 'dn' has no workstation features." +msgstr "Esta 'dn' no tiene características de estación de trabajo." + +#: plugins/admin/systems/class_workstationGeneric.inc:220 +msgid "You have no permissions to create a workstation on this 'Base'." +msgstr "No tiene permisos para crear una estación de trabajo en esta 'Base'." + +#: plugins/admin/systems/class_workstationGeneric.inc:224 +msgid "The required field 'Workstation name' is not set." +msgstr "" +" El campo requerido 'Nombre de la estación de trabajo' no ha sido rellenado." + +#: plugins/admin/systems/printer.tpl:6 +msgid "Printer name" +msgstr "Nombre de la impresora" + +#: plugins/admin/systems/printer.tpl:32 +msgid "Printer URL" +msgstr "URL de la impresora" + +#: plugins/admin/systems/printer.tpl:36 +msgid "Path to PPD" +msgstr "Ruta al 'PPD'" + +#: plugins/admin/systems/class_servDNS.inc:32 +#, fuzzy +msgid "Remove DNS service" +msgstr "Eliminar foto" + +#: plugins/admin/systems/class_servDNS.inc:33 +#, fuzzy +msgid "" +"This server has DNS features enabled. You can disable them by clicking below." +msgstr "" +"Esta cuenta tiene la extensión de fax activada. Puede desactivarla pulsando " +"aquí." + +#: plugins/admin/systems/class_servDNS.inc:35 +#, fuzzy +msgid "Add DNS service" +msgstr "Servicio SSH" + +#: plugins/admin/systems/class_servDNS.inc:36 +#, fuzzy +msgid "" +"This server has DNS features disabled. You can enable them by clicking below." +msgstr "" +"Esta cuenta tiene la extensión de fax desactivada. Puede activarla pulsando " +"aquí." + +#: plugins/admin/systems/class_servDB.inc:117 +#: plugins/admin/systems/class_servDB.inc:133 +#: plugins/admin/systems/class_servDB.inc:139 +#: plugins/admin/systems/class_servDB.inc:144 +#: plugins/admin/systems/class_servDB.inc:150 +#, fuzzy, php-format +msgid "The attribute '%s' is empty or contains invalid characters." +msgstr "¡El tiempo de expiración '%s' contiene caracteres no validos!" + +#: plugins/admin/systems/class_servDB.inc:123 +#, php-format +msgid "The imap connect string needs to be in the form '%s'." +msgstr "" + +#: plugins/admin/systems/class_servDB.inc:127 +msgid "The sieve port needs to be numeric." +msgstr "" + +#: plugins/admin/systems/workstation.tpl:9 +msgid "Workstation template" +msgstr "Plantilla de estación de trabajo" + +#: plugins/admin/systems/workstation.tpl:11 +msgid "Workstation name" +msgstr "Nombre de la estación de trabajo" + +#: plugins/admin/systems/servdb.tpl:1 +msgid "" +"This dialog keeps settings that are used and required by several components " +"within GOsa and are used to find out more about your servers. These settings " +"will be reloaded when you save this component." +msgstr "" + +#: plugins/admin/systems/servdb.tpl:10 +msgid "Kerberos kadmin access" +msgstr "" + +#: plugins/admin/systems/servdb.tpl:14 +#, fuzzy +msgid "Kerberos Realm" +msgstr "Kerberos" + +#: plugins/admin/systems/servdb.tpl:18 plugins/admin/systems/servdb.tpl:86 +#, fuzzy +msgid "Admin user" +msgstr "Usuarios del dominio" + +#: plugins/admin/systems/servdb.tpl:30 +#, fuzzy +msgid "FAX database" +msgstr "Fecha" + +#: plugins/admin/systems/servdb.tpl:34 +#, fuzzy +msgid "FAX DB user" +msgstr "Mostrar los usuarios de FAX" + +#: plugins/admin/systems/servdb.tpl:46 +#, fuzzy +msgid "Asterisk management" +msgstr "Gestión del sistema" + +#: plugins/admin/systems/servdb.tpl:50 +msgid "Asterisk DB user" +msgstr "" + +#: plugins/admin/systems/servdb.tpl:58 +msgid "Country dial prefix" +msgstr "" + +#: plugins/admin/systems/servdb.tpl:62 +msgid "Local dial prefix" +msgstr "" + +#: plugins/admin/systems/servdb.tpl:74 +msgid "IMAP admin access" +msgstr "" + +#: plugins/admin/systems/servdb.tpl:78 +#, fuzzy +msgid "Server identifier" +msgstr "Tipo de Vía" + +#: plugins/admin/systems/servdb.tpl:82 +#, fuzzy +msgid "Connect URL" +msgstr "Conexión" + +#: plugins/admin/systems/servdb.tpl:95 +#, fuzzy +msgid "Sieve port" +msgstr "Servidor" + +#: plugins/admin/systems/servdb.tpl:104 +#, fuzzy +msgid "Logging database" +msgstr "bases de datos de organizaciones de usuarios" + +#: plugins/admin/systems/servdb.tpl:108 +msgid "Logging DB user" +msgstr "" + +#: plugins/admin/systems/class_printGeneric.inc:56 +msgid "This 'dn' has no printer features." +msgstr "Esta 'dn' no tiene características de impresora." + +#: plugins/admin/systems/class_printGeneric.inc:121 +msgid "You have no permissions to create a printer on this 'Base'." +msgstr "No tiene permisos para crear una impresora en esta 'Base'." + +#: plugins/admin/systems/remove.tpl:7 +msgid "" +"This includes all system and setup informations. Please double check " +"if your really want to do this since there is no way for GOsa to get your " +"data back." +msgstr "" +"Esto incluye toda la información de configuración y de sistema. Por " +"favor pulse dos veces si realmente quiere hacer esto, ya que una vez hecho " +"esto, no hay forma de que GOsa recupere la información." + +#: plugins/admin/systems/headpage.tpl:6 +msgid "List of systems" +msgstr "Lista de sistemas" + +#: plugins/admin/systems/headpage.tpl:29 +msgid "" +"Using this menu you can add, remove and change the properties of specific " +"systems. You can only add systems which have already been started once." +msgstr "" +"Este menú permite añadir, editar o eliminar las propiedades de sistemas " +"específicas. Solo puede añadir sistemas que han sido ya iniciados alguna vez." + +#: plugins/admin/systems/headpage.tpl:32 +msgid "" +"-Edit- will execute an assistant to aid you in changing the system " +"properties. -Delete- will ask before really deleting things from your LDAP." +msgstr "" +"- Editar - ejecutara un asistente que le ayudara a cambiar las propiedades " +"del sistema. -Borrar- le pedirá confirmación antes de eliminar la " +"información de su base de datos." + +#: plugins/admin/systems/headpage.tpl:46 +#: plugins/admin/ogroups/ogroup_objects.tpl:33 +msgid "Select to see servers" +msgstr "Seleccione para ver los servidores" + +#: plugins/admin/systems/headpage.tpl:46 +#: plugins/admin/ogroups/ogroup_objects.tpl:33 +msgid "Show servers" +msgstr "Mostrar servidores" + +#: plugins/admin/systems/headpage.tpl:47 +#, fuzzy +msgid "Select to see Linux terminals" +msgstr "Seleccione para ver los terminales" + +#: plugins/admin/systems/headpage.tpl:47 +#: plugins/admin/ogroups/ogroup_objects.tpl:35 +msgid "Show terminals" +msgstr "Mostrar terminales" + +#: plugins/admin/systems/headpage.tpl:48 +#, fuzzy +msgid "Select to see Linux workstations" +msgstr "Seleccione para ver las estaciones de trabajo" + +#: plugins/admin/systems/headpage.tpl:48 +#: plugins/admin/ogroups/ogroup_objects.tpl:34 +msgid "Show workstations" +msgstr "Mostrar estaciones de trabajo" + +#: plugins/admin/systems/headpage.tpl:49 +msgid "Select to see MicroSoft Windows based workstations" +msgstr "Seleccione para ver estaciones de trabajo basadas en Windows" + +#: plugins/admin/systems/headpage.tpl:49 +msgid "Show windows based workstations" +msgstr "Mostrara estaciones de trabajo basadas en windows" + +#: plugins/admin/systems/headpage.tpl:50 +msgid "Select to see network printers" +msgstr "Seleccione para ver impresoras de red" + +#: plugins/admin/systems/headpage.tpl:50 +msgid "Show network printers" +msgstr "Mostrar impresoras de red" + +#: plugins/admin/systems/headpage.tpl:51 +msgid "Select to see VOIP phones" +msgstr "Seleccione para ver teléfonos VOIP" + +#: plugins/admin/systems/headpage.tpl:51 +#: plugins/admin/ogroups/ogroup_objects.tpl:37 +msgid "Show phones" +msgstr "Mostrar teléfonos" + +#: plugins/admin/systems/headpage.tpl:52 +#, fuzzy +msgid "Select to see network devices" +msgstr "Seleccione para ver impresoras de red" + +#: plugins/admin/systems/headpage.tpl:52 +#, fuzzy +msgid "Show network devices" +msgstr "Dispositivos de Red" + +#: plugins/admin/systems/headpage.tpl:62 +msgid "Regular expression for matching system names" +msgstr "Expresiones regulares para encontrar nombres de sistemas" + +#: plugins/admin/systems/headpage.tpl:65 +msgid "Display terminal(s) of user" +msgstr "Mostrar terminal(es) del usuario" + +#: plugins/admin/systems/headpage.tpl:66 +msgid "User name of which terminal(s) are shown" +msgstr "Nombre del usuario cuyo(s) terminal(es) son mostrados " + +#: plugins/admin/systems/service.tpl:4 +msgid "Keyboard" +msgstr "Teclado" + +#: plugins/admin/systems/service.tpl:7 plugins/admin/systems/service.tpl:210 +msgid "Model" +msgstr "Modelo" + +#: plugins/admin/systems/service.tpl:9 +msgid "Choose keyboard model" +msgstr "Elija modelo de teclado" + +#: plugins/admin/systems/service.tpl:15 +msgid "Layout" +msgstr "Disposición" + +#: plugins/admin/systems/service.tpl:17 +msgid "Choose keyboard layout" +msgstr "Elija localización del teclado" + +#: plugins/admin/systems/service.tpl:23 +msgid "Variant" +msgstr "Variante" + +#: plugins/admin/systems/service.tpl:25 +msgid "Choose keyboard variant" +msgstr "Elija variante de teclado" + +#: plugins/admin/systems/service.tpl:39 +msgid "Mouse" +msgstr "Ratón" + +#: plugins/admin/systems/service.tpl:44 +msgid "Choose mouse type" +msgstr "Elija tipo de ratón" + +#: plugins/admin/systems/service.tpl:50 +msgid "Port" +msgstr "Puerto" + +#: plugins/admin/systems/service.tpl:52 +msgid "Choose mouse port" +msgstr "Elija el puerto del ratón" + +#: plugins/admin/systems/service.tpl:66 +#: plugins/gofon/phoneaccount/generic.tpl:5 +msgid "Telephone hardware" +msgstr "Componente telefónico" + +#: plugins/admin/systems/service.tpl:69 +#: plugins/gofon/phoneaccount/generic.tpl:9 +msgid "Telephone" +msgstr "Teléfono" + +#: plugins/admin/systems/service.tpl:86 +msgid "Driver" +msgstr "Controlador" + +#: plugins/admin/systems/service.tpl:88 +msgid "Choose graphic driver that is needed by the installed graphic board" +msgstr "" +"Elija controlador gráfico que se necesita para la tarjeta gráfica instalada" + +#: plugins/admin/systems/service.tpl:94 +msgid "Resolution" +msgstr "Resolución" + +#: plugins/admin/systems/service.tpl:96 +msgid "Choose screen resolution used in graphic mode" +msgstr "Elija la resolución gráfica usada en modo gráfico" + +#: plugins/admin/systems/service.tpl:102 +msgid "Color depth" +msgstr "Profundidad del Color" + +#: plugins/admin/systems/service.tpl:104 +msgid "Choose colordepth used in graphic mode" +msgstr "Elija la profundidad de color usada en modo gráfico" + +#: plugins/admin/systems/service.tpl:117 +msgid "Display device" +msgstr "Mostrar dispositivo" + +#: plugins/admin/systems/service.tpl:124 +msgid "HSync" +msgstr "HSync" + +#: plugins/admin/systems/service.tpl:126 +msgid "Horizontal refresh frequency for installed monitor" +msgstr "Frecuencia de refresco horizontal para el monitor instalado" + +#: plugins/admin/systems/service.tpl:129 +msgid "VSync" +msgstr "VSync" + +#: plugins/admin/systems/service.tpl:131 +msgid "Vertical refresh frequency for installed monitor" +msgstr "Frecuencia de refresco vertical para el monitor instalado" + +#: plugins/admin/systems/service.tpl:141 +msgid "Remote desktop" +msgstr "Escritorio remoto" + +#: plugins/admin/systems/service.tpl:145 +msgid "Connect method" +msgstr "Método de conexión" + +#: plugins/admin/systems/service.tpl:147 +msgid "Choose method to connect to terminal server" +msgstr "Elija el método de conexión con el servidor de terminal" + +#: plugins/admin/systems/service.tpl:154 +msgid "Terminal server" +msgstr "Servidor de terminal" + +#: plugins/admin/systems/service.tpl:156 +msgid "Select specific terminal server to use" +msgstr "Seleccione específicamente que servidor de terminal usará" + +#: plugins/admin/systems/service.tpl:163 +msgid "Font server" +msgstr "Servidor de fuentes" + +#: plugins/admin/systems/service.tpl:165 +msgid "Select specific font server to use" +msgstr "Seleccione específicamente que servidor de fuentes usará" + +#: plugins/admin/systems/service.tpl:181 +msgid "Print device" +msgstr "Dispositivo de Impresión" + +#: plugins/admin/systems/service.tpl:182 +msgid "Select to start IPP based printing service on terminal" +msgstr "" +"Seleccione para iniciar el servicio de impresión basado en 'IPP' en el " +"terminal" + +#: plugins/admin/systems/service.tpl:183 +msgid "Provide print services" +msgstr "Proveer servicios de impresión" + +#: plugins/admin/systems/service.tpl:189 +msgid "Spool server" +msgstr "Servidor de Cola" + +#: plugins/admin/systems/service.tpl:191 +msgid "Select NFS filesystem to place spool files on" +msgstr "" +"Seleccione un sistema de archivos 'NFS' para colocar los ficheros de la cola" + +#: plugins/admin/systems/service.tpl:203 +msgid "Scan device" +msgstr "Dispositivo de escaneo" + +#: plugins/admin/systems/service.tpl:204 +msgid "Select to start SANE scan service on terminal" +msgstr "Seleccione para iniciar el servicio de escáner 'SANE' en el terminal" + +#: plugins/admin/systems/service.tpl:205 +msgid "Provide scan services" +msgstr "Provee servicios de exploración" + +#: plugins/admin/systems/service.tpl:212 +msgid "Select scanner driver to use" +msgstr "Seleccione que controladores de escáner se usaran" + +#: plugins/admin/systems/startup.tpl:1 +msgid "Boot parameters" +msgstr "Parametros de inicio" + +#: plugins/admin/systems/startup.tpl:8 +msgid "LDAP server" +msgstr "Servidor LDAP" + +#: plugins/admin/systems/startup.tpl:10 +msgid "Choose LDAP server to use for accounts and terminal management" +msgstr "" +"Elija que servidor LDAP se usara para gestión de cuentas de usuario y " +"terminales" + +#: plugins/admin/systems/startup.tpl:16 +msgid "Boot kernel" +msgstr "Kernel de inicio" + +#: plugins/admin/systems/startup.tpl:18 +msgid "Enter the filename of the kernel to use" +msgstr "Introduzca el nombre del fichero del núcleo que se usara" + +#: plugins/admin/systems/startup.tpl:21 +msgid "Custom options" +msgstr "Otras opciones" + +#: plugins/admin/systems/startup.tpl:23 +msgid "" +"Enter any parameters that should be passed to the kernel as append line " +"during bootup" +msgstr "" +"Introducir que parametros serán pasados a la configuración de arranque del " +"nucleo" + +#: plugins/admin/systems/startup.tpl:34 +msgid "Select if terminal supports graphical startup with progress bar" +msgstr "Seleccione si el terminal soporta inicio gráfico con barra de progreso" + +#: plugins/admin/systems/startup.tpl:35 +msgid "use graphical bootup" +msgstr "Usar arranque gráfico" + +#: plugins/admin/systems/startup.tpl:37 +msgid "Select if terminal should boot in text mode" +msgstr "Seleccione si el terminal debería arrancar en modo texto" + +#: plugins/admin/systems/startup.tpl:38 +msgid "use standard linux textual bootup" +msgstr "Usar arranque en modo texto" + +#: plugins/admin/systems/startup.tpl:40 +msgid "Select to get more verbose output during startup" +msgstr "" +"Seleccione para obtener una información mas prolija durante el arranque" + +#: plugins/admin/systems/startup.tpl:41 +msgid "use debug mode for startup" +msgstr "Usar el modo de depuración durante el arranque" + +#: plugins/admin/systems/startup.tpl:52 +msgid "Kernel modules (format: name parameters)" +msgstr "Módulos del núcleo (formato: nombre parametros)" + +#: plugins/admin/systems/startup.tpl:54 +msgid "Add additional modules to load on startup" +msgstr "Añadir módulos adicionales que serán cargados al arrancar" + +#: plugins/admin/systems/startup.tpl:65 +msgid "Automount devices (format: complete autofs entry)" +msgstr "Dispositivos de automontaje (formato: entrada autofs completa)" + +#: plugins/admin/systems/startup.tpl:67 +msgid "Add additional automount entries" +msgstr "Añadir entradas adicionales de automontaje" + +#: plugins/admin/systems/startup.tpl:84 +msgid "Additional fstab entries" +msgstr "Entradas de fstab adicionales" + +#: plugins/admin/systems/startup.tpl:86 +msgid "Add additional filesystems to be mounted during startup" +msgstr "Añadir sistemas de archivos adicionales que serán montados al arrancar" + +#: plugins/admin/systems/password.tpl:2 +msgid "" +"To change the terminal root password use the fields below. The changes take " +"effect during next reboot. Please memorize the new password, because the you " +"would't be able to log in. Leave fields blank for password inheritance " +"from default entries." +msgstr "" +"Para cambiarla clave de administrador ('root') del terminal use los campos " +"mas abajo. Los cambios tendrán efecto durante el próximo inicio. Por favor " +"memorice la nueva clave, ya que deberá iniciar sesion. Dejando los " +"campos en blanco se pondrán los valores por defecto." + +#: plugins/admin/systems/password.tpl:6 +msgid "Changing the password impinges on authentification only." +msgstr "Cambiar la contraseña afecta solamente a la autenticación." + +#: plugins/admin/systems/chooser.tpl:1 +msgid "Choose the kind of system component you want to create" +msgstr "Elija el tipo de componente del sistema que desea crear" + +#: plugins/admin/systems/chooser.tpl:4 +msgid "" +"Linux terminals and workstations are autocreated on bootup. For this reason " +"you're only be able to create templates for a specific tree. Servers are " +"normally automatically added too, but in some special cases you may need to " +"create a faked server entry to provide GOsa with some informations. Other " +"network components may be used for Nagios setups to create component " +"dependencies." +msgstr "" +"Terminales linux y estaciones de trabajo son autocreadas en el inicio. Por " +"esta razón solo se pueden crear plantillas para un árbol específico. " +"Normalmente los servidores son añadidos también automáticamente, pero en " +"algunos casos especiales, puede necesitar crear un servidor virtual para " +"proveer de cierta información a GOsa. Otros componentes de red pueden ser " +"usados para que la configuración de 'Nagios' creen las dependencias de " +"componentes." + +#: plugins/admin/systems/chooser.tpl:7 +msgid "Linux thin client template" +msgstr "Plantilla de clientes ligeros Linux" + +#: plugins/admin/systems/chooser.tpl:8 +msgid "Linux workstation template" +msgstr "Plantilla de estaciones de trabajo linux" + +#: plugins/admin/systems/chooser.tpl:9 +msgid "Linux Server" +msgstr "Servidor Linux" + +#: plugins/admin/systems/chooser.tpl:10 +msgid "Windows workstation" +msgstr "Estación de trabajo Windows" + +#: plugins/admin/systems/chooser.tpl:11 +msgid "Network printer" +msgstr "Impresora de Red" + +#: plugins/admin/systems/chooser.tpl:13 +msgid "Other network component" +msgstr "Otros componentes de red" + +#: plugins/admin/systems/chooser.tpl:16 +msgid "Create" +msgstr "Crear" + +#: plugins/admin/systems/class_phoneGeneric.inc:47 +msgid "This 'dn' has no phone features." +msgstr "Esta 'dn' no tiene características de teléfono." + +#: plugins/admin/systems/class_phoneGeneric.inc:118 +msgid "You have no permissions to create a phone on this 'Base'." +msgstr "No tiene permisos para crear un teléfono en esta 'Base'." + +#: plugins/admin/systems/class_componentGeneric.inc:47 +#: plugins/admin/systems/class_wingeneric.inc:85 +#, fuzzy +msgid "This 'dn' has no network features." +msgstr "Esta 'dn' no tiene características de impresora." + +#: plugins/admin/systems/class_componentGeneric.inc:115 +#: plugins/admin/systems/class_wingeneric.inc:155 +#, fuzzy +msgid "You have no permissions to create a component on this 'Base'." +msgstr "No tiene permisos para crear un teléfono en esta 'Base'." + +#: plugins/admin/systems/component.tpl:6 +#, fuzzy +msgid "Device name" +msgstr "Servidor" + +#: plugins/admin/systems/wingeneric.tpl:6 +#, fuzzy +msgid "Machine name" +msgstr "Número de teléfono" + +#: plugins/admin/ogroups/tabs_ogroups.inc:19 +#, fuzzy +msgid "Terminals" +msgstr "terminales" + +#: plugins/admin/ogroups/ogroup_objects.tpl:6 +msgid "Select objects to add" +msgstr "Seleccione objetos a añadir" + +#: plugins/admin/ogroups/ogroup_objects.tpl:29 +msgid "Select to see departments" +msgstr "Seleccione para ver los departamentos" + +#: plugins/admin/ogroups/ogroup_objects.tpl:29 +msgid "Show departments" +msgstr "Mostrar departamentos" + +#: plugins/admin/ogroups/ogroup_objects.tpl:30 +msgid "Select to see GOsa accounts" +msgstr "Seleccione para ver las cuentas GOsa" + +#: plugins/admin/ogroups/ogroup_objects.tpl:30 +msgid "Show people" +msgstr "Mostrar personal" + +#: plugins/admin/ogroups/ogroup_objects.tpl:31 +msgid "Select to see GOsa groups" +msgstr "Seleccione para ver los grupos GOsa" + +#: plugins/admin/ogroups/ogroup_objects.tpl:31 +msgid "Show groups" +msgstr "Mostrar grupos" + +#: plugins/admin/ogroups/ogroup_objects.tpl:32 +msgid "Select to see applications" +msgstr "Seleccione para ver las aplicaciones" + +#: plugins/admin/ogroups/ogroup_objects.tpl:32 +msgid "Show applications" +msgstr "Mostrar aplicaciones" + +#: plugins/admin/ogroups/ogroup_objects.tpl:34 +msgid "Select to see workstations" +msgstr "Seleccione para ver las estaciones de trabajo" + +#: plugins/admin/ogroups/ogroup_objects.tpl:35 +msgid "Select to see terminals" +msgstr "Seleccione para ver los terminales" + +#: plugins/admin/ogroups/ogroup_objects.tpl:36 +msgid "Select to see printers" +msgstr "Seleccione para ver impresoras" + +#: plugins/admin/ogroups/ogroup_objects.tpl:36 +msgid "Show printers" +msgstr "Mostrar impresoras" + +#: plugins/admin/ogroups/ogroup_objects.tpl:37 +msgid "Select to see phones" +msgstr "Seleccione para ver teléfonos" + +#: plugins/admin/ogroups/ogroup_objects.tpl:40 +msgid "Display objects of department" +msgstr "Mostrar objetos de departamentos" + +#: plugins/admin/ogroups/ogroup_objects.tpl:46 +msgid "Display objects matching" +msgstr "Mostrar objetos que concuerden con" + +#: plugins/admin/ogroups/ogroup_objects.tpl:47 +msgid "Regular expression for matching object names" +msgstr "Expresiones regulares que concuerden con nombres de objetos" + +#: plugins/admin/ogroups/termgroup.tpl:1 +msgid "" +"All actions you choose here influence all machines in this object " +"group. Be aware that rebooting machines may not make people happy who are " +"currently working at these machines." +msgstr "" + +#: plugins/admin/ogroups/termgroup.tpl:7 +#, fuzzy +msgid "Select action to execute for this group of terminals" +msgstr "Seleccione una acción que se ejecutara en este terminal" + +#: plugins/admin/ogroups/class_ogroup.inc:91 +msgid "This 'dn' is no object group." +msgstr "Este 'dn' no es un objeto tipo grupo." + +#: plugins/admin/ogroups/class_ogroup.inc:204 +msgid "too many different objects!" +msgstr "¡Demasiados objetos diferentes!" + +#: plugins/admin/ogroups/class_ogroup.inc:206 +msgid "users" +msgstr "usuarios" + +#: plugins/admin/ogroups/class_ogroup.inc:207 +msgid "groups" +msgstr "grupos" + +#: plugins/admin/ogroups/class_ogroup.inc:208 +msgid "applications" +msgstr "Aplicaciones" + +#: plugins/admin/ogroups/class_ogroup.inc:209 +msgid "departments" +msgstr "departamentos" + +#: plugins/admin/ogroups/class_ogroup.inc:210 +msgid "servers" +msgstr "servidores" + +#: plugins/admin/ogroups/class_ogroup.inc:211 +msgid "workstations" +msgstr "estaciones de trabajo" + +#: plugins/admin/ogroups/class_ogroup.inc:212 +msgid "terminals" +msgstr "terminales" + +#: plugins/admin/ogroups/class_ogroup.inc:213 +msgid "phones" +msgstr "teléfonos" + +#: plugins/admin/ogroups/class_ogroup.inc:214 +msgid "printers" +msgstr "servidores de Impresión" + +#: plugins/admin/ogroups/class_ogroup.inc:221 +msgid "and" +msgstr "y" + +#: plugins/admin/ogroups/class_ogroup.inc:363 +msgid "Non existing dn: " +msgstr "No existe 'dn':" + +#: plugins/admin/ogroups/class_ogroup.inc:494 +msgid "Object groups need at least one member!" +msgstr "'Grupos de objetos que necesitan al menos un miembro!" + +#: plugins/admin/ogroups/class_ogroup.inc:499 +msgid "You can combine two different object types at maximum only!" +msgstr "¡Solo se pueden combinar dos objetos diferentes hasta un máximo!" + +#: plugins/admin/ogroups/main.inc:34 plugins/admin/ogroups/main.inc:39 +#: plugins/admin/ogroups/class_ogroupManagement.inc:25 +msgid "Object groups" +msgstr "Grupos de objetos" + +#: plugins/admin/ogroups/class_ogroupManagement.inc:41 +msgid "UNIX accounts" +msgstr "Cuentas UNIX" + +#: plugins/admin/ogroups/class_ogroupManagement.inc:45 +msgid "Servers" +msgstr "Servidores" + +#: plugins/admin/ogroups/class_ogroupManagement.inc:46 +msgid "Thin Clients" +msgstr "Clientes Ligeros" + +#: plugins/admin/ogroups/class_ogroupManagement.inc:47 +msgid "Workstations" +msgstr "Estaciones de trabajo" + +#: plugins/admin/ogroups/class_ogroupManagement.inc:49 +#: plugins/generic/references/class_reference.inc:52 +msgid "Printer" +msgstr "Impresora" + +#: plugins/admin/ogroups/class_ogroupManagement.inc:153 +#, php-format +msgid "You're about to delete the object group '%s'." +msgstr "Has decidido eliminar el objeto grupo '%s'." + +#: plugins/admin/ogroups/class_ogroupManagement.inc:159 +#: plugins/admin/ogroups/class_ogroupManagement.inc:185 +msgid "You are not allowed to delete this object group!" +msgstr "¡No tiene permisos para eliminar este objeto grupo!" + +#: plugins/admin/ogroups/generic.tpl:9 +msgid "Name of the group" +msgstr "Nombre del grupo" + +#: plugins/admin/ogroups/generic.tpl:32 +msgid "Member objects" +msgstr "Objetos miembro" + +#: plugins/admin/ogroups/remove.tpl:7 +msgid "" +"Please double check if you really want to do this since there is no way for " +"GOsa to get your data back." +msgstr "" +"Por favor pulse dos veces si quiere hacer esto, ya que no hay forma de que " +"GOsa pueda recuperar posteriormente esa información" + +#: plugins/admin/ogroups/headpage.tpl:46 +msgid "Show empty groups" +msgstr "Mostrar grupos vacios" + +#: plugins/admin/ogroups/headpage.tpl:47 +msgid "Show groups containing users" +msgstr "Mostrar grupos que tienen usuarios" + +#: plugins/admin/ogroups/headpage.tpl:48 +msgid "Show groups containing groups" +msgstr "Mostrar grupos que contienen grupos" + +#: plugins/admin/ogroups/headpage.tpl:49 +msgid "Show groups containing applications" +msgstr "Mostrar grupos que contienen aplicaciones" + +#: plugins/admin/ogroups/headpage.tpl:50 +msgid "Show groups containing departments" +msgstr "Mostrar grupos que contienen departamentos" + +#: plugins/admin/ogroups/headpage.tpl:51 +msgid "Show groups containing servers" +msgstr "Mostrar grupos que contienen servidores" + +#: plugins/admin/ogroups/headpage.tpl:52 +msgid "Show groups containing workstations" +msgstr "Mostrar grupos que contienen estaciones de trabajo" + +#: plugins/admin/ogroups/headpage.tpl:53 +msgid "Show groups containing terminals" +msgstr "Mostrar grupos que contienen terminales" + +#: plugins/admin/ogroups/headpage.tpl:54 +msgid "Show groups containing printers" +msgstr "Mostrar grupos que contienen impresoras" + +#: plugins/gofon/phoneaccount/main.inc:120 +msgid "Phone settings" +msgstr "Configuración telefónica" + +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:114 +msgid "This account has no phone extensions." +msgstr "Esta cuenta no tiene extensiones telefónicas" + +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:124 +msgid "Remove phone account" +msgstr "Eliminar cuenta telefónica" + +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:125 +msgid "" +"This account has phone features enabled. You can disable them by clicking " +"below." +msgstr "" +"Esta cuenta tiene la extensión telefónica activada. Puede desactivarla " +"pulsando aquí." + +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:127 +msgid "Create phone account" +msgstr "Crear cuenta telefónica" + +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:128 +msgid "" +"This account has phone features disabled. You can enable them by clicking " +"below." +msgstr "" +"Esta cuenta tiene la extensión telefónica desactivada. Puede activarla " +"pulsando aquí." + +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:140 +msgid "Please enter a valid phone number!" +msgstr "¡Por favor introduzca un número de teléfono valido!" + +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:176 +msgid "Choose your private phone" +msgstr "Indique su teléfono particular" + +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:281 +#, php-format +msgid "You need to specify at least one phone number!" +msgstr "¡Necesita introducir al menos un número de teléfono!" + +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:295 +#, php-format +msgid "The number '%s' is no valid phone number!" +msgstr "¡El número '%s' no es un número de teléfono valido!" + +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:298 +#, php-format +msgid "The timeout '%s' contains invalid characters!" +msgstr "¡El tiempo de expiración '%s' contiene caracteres no validos!" + +#: plugins/gofon/phoneaccount/generic.tpl:16 +msgid "Answering machine" +msgstr "Contestador automático" + +#: plugins/gofon/phoneaccount/generic.tpl:22 +#: plugins/gofon/phoneaccount/generic.tpl:25 +msgid "Deliver missed calls as mail" +msgstr "Enviar llamadas perdidas como correo electrónico" + +#: plugins/gofon/phoneaccount/generic.tpl:39 +msgid "Phone numbers" +msgstr "Números de teléfonos" + +#: plugins/gofon/phoneaccount/generic.tpl:55 +msgid "Forward calls to" +msgstr "Reenviar llamadas a" + +#: plugins/gofon/phoneaccount/generic.tpl:59 +msgid "Phone number" +msgstr "Número de teléfono" + +#: plugins/gofon/phoneaccount/generic.tpl:59 +msgid "Timeout (s)" +msgstr "Tiempo(s) excedido(s)" + +#: plugins/gofon/reports/class_fonreport.inc:6 +msgid "Phone Reports" +msgstr "Informes telefónicos" + +#: plugins/gofon/reports/class_fonreport.inc:138 +msgid "Can't connect to phone database, no reports can be shown!" +msgstr "" +"No puedo conectar a la base de datos telefónica, ¡No se pueden mostrar " +"informes!" + +#: plugins/gofon/reports/class_fonreport.inc:142 +msgid "Can't select phone database for report generation!" +msgstr "" +"¡No puedo seleccionar la base de datos telefónica para la generación de " +"informes!" + +#: plugins/gofon/reports/class_fonreport.inc:151 +msgid "Query for phone database failed!" +msgstr "¡La consulta a la base de datos de teléfonos ha fallado!" + +#: plugins/gofon/reports/contents.tpl:31 +msgid "Source" +msgstr "Fuente" + +#: plugins/gofon/reports/contents.tpl:32 +msgid "Destination" +msgstr "Destino" + +#: plugins/gofon/reports/contents.tpl:33 +msgid "Channel" +msgstr "Canal" + +#: plugins/gofon/reports/contents.tpl:34 +#: plugins/generic/references/class_reference.inc:42 +msgid "Application" +msgstr "Aplicación" + +#: plugins/gofon/reports/contents.tpl:36 +msgid "Duration" +msgstr "Duración" + +#: plugins/gofon/reports/main.inc:5 +msgid "Phone reports" +msgstr "Informes telefónicos" + +#: plugins/generic/references/class_reference.inc:36 +msgid "Group" +msgstr "Grupo" + +#: plugins/generic/references/class_reference.inc:46 +msgid "Thin Client" +msgstr "Cliente ligero" + +#: plugins/generic/references/class_reference.inc:48 +msgid "Workstation" +msgstr "Estación de trabajo" + +#: plugins/generic/references/class_reference.inc:50 +msgid "Object group" +msgstr "Grupo de objetos" + +#: plugins/generic/references/contents.tpl:11 +msgid "Object name" +msgstr "Nombre de objeto" + +#: plugins/generic/references/contents.tpl:18 +msgid "This object has no relationship to other objects." +msgstr "Este objeto no tiene ninguna relación con otros objetos." + +#: plugins/generic/welcome/welcome.tpl:4 +msgid "" +"This is the GOsa main screen. You can select your tasks from the menu on the " +"left, or by choosing one of the pictogramms below. All changes apply " +"directly to your companies LDAP-Server." +msgstr "" +"Esta es la pantalla principal de GOsa. Puede seleccionar las tareasdel menú " +"en la derecha, o eligiendo entre los íconos de aquíabajo. Todos los cambios " +"se aplican directamente en el servidor LDAPde la compania." + +#: plugins/generic/welcome/welcome.tpl:8 +msgid "" +"Use Sign out on the upper left to close the connection and Main to get back to the pictogram view." +msgstr "" +"Para cerrar la conexión use Cerrar en la parte superior izquierda y " +"para volver a la vista de íconos use Principal" + +#: plugins/generic/welcome/welcome.tpl:15 +msgid "The GOsa team" +msgstr "El equipo de GOsa" + +#: plugins/generic/welcome/main.inc:24 +#, php-format +msgid "Welcome %s!" +msgstr "¡Bienvenido %s!" + +#: include/functions.inc:266 +#, php-format +msgid "Error when connecting the LDAP. Server said '%s'." +msgstr "" +"Hay un error trantando de conectarse al servidor LDAP. El error del servidor " +"es: '%s'" + +#: include/functions.inc:287 +#, php-format +msgid "User login failed. LDAP server said '%s'." +msgstr "Autenticación del usuario fallida. El servidor LDAP contesto '%s'." + +#: include/functions.inc:307 +msgid "Username / UID is not unique. Please check your LDAP database." +msgstr "" +"Nombre de usuario o UID no son únicos. Por favor, compruebe su base de datos " +"LDAP." + +#: include/functions.inc:345 +msgid "" +"Error while adding a lock. Parameters are not set correctly, please check " +"the source!" +msgstr "" +"Error al tratar de agregar un bloqueo. Los parámetros no son correctos, por " +"favor, compruebe el código fuente." + +#: include/functions.inc:355 +#, php-format +msgid "" +"Can't set locking information in LDAP database. Please check the 'config' " +"entry in gosa.conf! LDAP server says '%s'." +msgstr "" +"No se pudo generar el bloqueo a la base de datos LDAP. Por favor, compruebe " +"la entrada 'config' en gosa.conf. El servidor LDAP contesto '%s'." + +#: include/functions.inc:370 +#, php-format +msgid "Adding a lock failed. LDAP server says '%s'." +msgstr "Fallo al tratar de agregar un bloqueo. El servidor LDAP contesto '%s'." + +#: include/functions.inc:396 +#, php-format +msgid "Removing a lock failed. LDAP server says '%s'." +msgstr "Fallo al tratar de agregar un bloqueo. El servidor LDAP contesto '%s'." + +#: include/functions.inc:426 +msgid "" +"Getting the lock from LDAP failed. Parameters are not sed correctly, please " +"check the source!" +msgstr "" +"Fallo al tratar de obtener un bloqueo del LDAP. Los parámetros no fueron " +"correctamente configurados, por favor, compruebe el código." + +#: include/functions.inc:436 +msgid "" +"Can't get locking information in LDAP database. Please check the 'config' " +"entry in gosa.conf!" +msgstr "" +"No puedo bloquear la información en la base de datos LDAP. Por favor, " +"compruebe la entrada 'config' en el archivos gosa.conf." + +#: include/functions.inc:444 +msgid "" +"Found multiple locks for object to be locked. This should not be possible - " +"cleaning up multiple references." +msgstr "" +"Se encontraron varios bloqueos para el objeto a bloquear. Esto no debería " +"ser posible, eliminando referencias múltiples." + +#: include/functions.inc:516 +#, php-format +msgid "The size limit of %d entries is exceed!" +msgstr "¡Ha excedido el tamaño máximo de %d entradas!" + +#: include/functions.inc:518 +#, php-format +msgid "" +"Set the new size limit to %s and show me this message if the limit still " +"exceeds" +msgstr "" +"Indique el nuevo tamaño limite a %s y enséñame este mensaje si el tamaño " +"limite es todavía superado" + +#: include/functions.inc:530 +msgid "Configure" +msgstr "Configurar" + +#: include/functions.inc:535 +msgid "incomplete" +msgstr "incompleto" + +#: include/functions.inc:918 +#, php-format +msgid "" +"You're going to edit the LDAP entry '%s' which appears to be used by '%s'. " +"Please contact the person in order to clarify proceedings." +msgstr "" +"Va ha editar la entrada LDAP '%s' que parece estar siendo usada por '%s'. " +"Por favor, contacte con esta persona para clarificar los procedimientos." + +#: include/functions.inc:1017 +msgid "LDAP error:" +msgstr "Error LDAP:" + +#: include/functions.inc:1110 +msgid "" +"Warning: Can't set kerberos password. Your PHP version has no kerberos " +"support, password has not been changed." +msgstr "" +"Aviso: No se puede poner la contraseña Kerberos. Su versión de PHP no tiene " +"soporte Kerberos, la contraseña no ha sido cambiada." + +#: include/functions.inc:1117 +msgid "Kerberos database communication failed!" +msgstr "¡La comunicación con la base de datos Kerberos fallo!." + +#: include/functions.inc:1123 +msgid "Changing password in kerberos database failed!" +msgstr "" +"¡Fallo al tratar de cambiar la contraseña en la base de datos de kerberos!." + +#: include/functions.inc:1132 +msgid "Unsupported password hash detected. Can't generate compatible password." +msgstr "" +"Se ha detectado una encriptación de contraseña no soportada. No se puede " +"generar una contraseña compatible." + +#: include/functions.inc:1172 +msgid "" +"Setting for SMBHASH in gosa.conf is incorrect! Can't change Samba password." +msgstr "" +"La configuración para SMBHASH en /etc/gosa/gosa.conf es incorrecta. No se " +"pueden cambiar las contraseñas de SAMBA." + +#: include/functions.inc:1190 +#, php-format +msgid "Setting the password failed. LDAP server says '%s'." +msgstr "" +"Fallo al tratar de configurar la contraseña. El servidor LDAP contesto '%s'." + +#: include/functions.inc:1603 +msgid "*ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" +msgstr "*ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" + +#: include/class_mail-methods-cyrus.inc:44 +msgid "" +"Warning: IMAP Server cannot be reached! If you save this account, some mail " +"settings will not be stored on your server!" +msgstr "" +"Aviso: ¡No se puede acceder al servidor IMAP! Si guarda esta cuenta, algunos " +"de los valores de la configuración del correo no serán guardados en el " +"servidor" + +#: include/class_mail-methods-cyrus.inc:107 +#, php-format +msgid "Can't create IMAP mailbox. Server says '%s'." +msgstr "" +"No se pueden crear carpetas de correo IMAP. El error del servidor es: '%s'" + +#: include/class_mail-methods-cyrus.inc:123 +#, php-format +msgid "Can't write IMAP quota. Server says '%s'." +msgstr "No se puede activar una cuota IMAP. El error del servidor es: '%s'" + +#: include/class_mail-methods-cyrus.inc:134 +msgid "" +"Warning: imap_getacl is not implemented, wouldn't modify acl informations." +msgstr "" +"Aviso: imap_getacl no ha sido implementado, no se modificara información " +"sobre las listas de acceso." + +#: include/class_mail-methods-cyrus.inc:169 +msgid "Warning: imap_getacl is not available, can't get imap permissions!" +msgstr "" +"Aviso: no esta disponible imap_getacl, ¡no se puede acceder a los permisos " +"IMAP!" + +#: include/class_mail-methods-cyrus.inc:191 +#, php-format +msgid "Can't remove IMAP mailbox. Server says '%s'." +msgstr "" +"No se puede eliminar la carpeta de correo IMAP. El error del servidor es: '%" +"s'" + +#: include/class_mail-methods-cyrus.inc:219 +#, php-format +msgid "Can't log into SIEVE server. Server says '%s'." +msgstr "No se puede conectar al servidor SIEVE. El error del servidor es: '%s'" + +#: include/class_mail-methods-cyrus.inc:232 +#, php-format +msgid "Can't get sieve script. Server says '%s'." +msgstr "No puedo ejecutar un 'script' SIEVE. El error del servidor es: '%s'" + +#: include/class_mail-methods-cyrus.inc:303 +#, php-format +msgid "Can't send sieve script. Server says '%s'." +msgstr "No puedo subir un 'script' SIEVE. El error del servidor es: '%s'" + +#: include/class_mail-methods-cyrus.inc:307 +#, php-format +msgid "Can't activate GOsa sieve script. Server says '%s'." +msgstr "" +"No se puede activar el 'script GOsa para SIEVE'. El error del servidor es: '%" +"s'" + +#: include/class_pluglist.inc:98 +msgid "" +"Your gosa.conf information has changed partly. Please convert it using the " +"contributed script fix_config.sh!" +msgstr "" +"El contenido de la configuración 'gosa.conf' ha cambiado parcialmente. ¡Por " +"favor actualízela usando el script 'fix_config.sh'!" + +#: include/class_pluglist.inc:113 ihtml/themes/altlinux/framework.tpl:13 +#: ihtml/themes/altlinux/framework.tpl:23 +#: ihtml/themes/default/framework.tpl:13 ihtml/themes/default/framework.tpl:23 +msgid "" +"You are currently editing a database entry. Do you want to dismiss the " +"changes?" +msgstr "" +"Esta actualmente editando una entrada de la base de datos. ?Quiere quitar " +"los cambios?" + +#: include/setup_checks.inc:78 +msgid "Can't bind to LDAP. No schema check possible!" +msgstr "" +"No se pudo establecer la conexión al servidor LDAP. ¡No se pudo comprobar el " +"esquema.!" + +#: include/setup_checks.inc:87 include/setup_checks.inc:96 +msgid "Can't get schema information from server. No schema check possible!" +msgstr "" +"No se pudo obtener la información del esquema del servidor. No se pudo " +"comprobar el esquema." + +#: include/setup_checks.inc:116 +#, php-format +msgid "" +"Optional objectclass '%s' required by plugin '%s' is not present in LDAP " +"setup" +msgstr "" +"El objeto de clase (objectclass) opcional '%s' requerido por la extensión '%" +"s' no esta disponible en configuración de LDAP." + +#: include/setup_checks.inc:119 +#, php-format +msgid "" +"Optional objectclass '%s' required by plugin '%s' does not have version %s" +msgstr "" +"El objeto de clase (objectclass) opcional '%s' requerido por la extensión '%" +"s' no tiene la versión %s" + +#: include/setup_checks.inc:131 +#, php-format +msgid "Required objectclass '%s' is not present in LDAP setup" +msgstr "" +"No se encuentra el objeto de clase (object class) requerido '%s' en la " +"configuración del servidor LDAP." + +#: include/setup_checks.inc:134 +#, php-format +msgid "Required objectclass '%s' does not have version %s" +msgstr "El objeto de clase (objectclass) requerido '%s' no tiene la versión %s" + +#: include/setup_checks.inc:142 +#, fuzzy +msgid "SAMBA 3 support disabled, no schema seems to be installed" +msgstr "" +"El soporte de SAMBA 3 se encuentra desactivado, no parece haber esquemas " +"instalados" + +#: include/setup_checks.inc:144 +msgid "" +"SAMBA 3 support enabledgosa+samba3.schema" +msgstr "" + +#: include/setup_checks.inc:147 +#, fuzzy +msgid "SAMBA 2 support disabled, no schema seems to be installed" +msgstr "" +"El soporte de SAMBA 2 se encuentra desactivado, no parece haber esquemas " +"instalados" + +#: include/setup_checks.inc:149 +msgid "SAMBA 2 support enabledsamba.schema" +msgstr "" + +#: include/setup_checks.inc:153 +#, fuzzy +msgid "Support for pureftp disabled, no schema seems to be installed" +msgstr "" +"El soporte para pureftp se encuentra desactivado, no parece haber esquemas " +"instalados" + +#: include/setup_checks.inc:155 +msgid "" +"Support for pureftp enabledpureftpd.schema" +msgstr "" + +#: include/setup_checks.inc:158 +#, fuzzy +msgid "Support for WebDAV disabled, no schema seems to be installed" +msgstr "" +"El soporte para pureftp se encuentra desactivado, no parece haber esquemas " +"instalados" + +#: include/setup_checks.inc:160 +msgid "" +"Support for WebDAV enabledgosa+samba3.schema" +msgstr "" + +#: include/setup_checks.inc:163 +#, fuzzy +msgid "" +"Support for phpgroupware disabled, no schema seems to be installed" +msgstr "" +"El soporte para pureftp se encuentra desactivado, no parece haber esquemas " +"instalados" + +#: include/setup_checks.inc:165 +msgid "" +"Support for phpgroupware enabledphpgwaccount." +"schema" +msgstr "" + +#: include/setup_checks.inc:168 +#, fuzzy +msgid "Support for gofon disabled, no schema seems to be installed" +msgstr "" +"El soporte para pureftp se encuentra desactivado, no parece haber esquemas " +"instalados" + +#: include/setup_checks.inc:170 +msgid "Support for gofon enabledgofon.schema" +msgstr "" + +#: include/setup_checks.inc:182 +msgid "OK" +msgstr "Perfecto" + +#: include/setup_checks.inc:185 +msgid "Ignored" +msgstr "Ignorado" + +#: include/setup_checks.inc:187 +msgid "Failed" +msgstr "Fallado" + +#: include/setup_checks.inc:203 +msgid "PHP setup inspection" +msgstr "Comprobación configuración PHP" + +#: include/setup_checks.inc:204 +msgid "Checking for PHP version (>=4.1.0)" +msgstr "Comprobando la versión de PHP (>=4.1.0)" + +#: include/setup_checks.inc:205 +msgid "" +"PHP must be of version 4.1.0 or above for some functions and known bugs in " +"PHP language." +msgstr "" +"Debe tener una versión de PHP 4.1.0 o superior para el correcto " +"funcionamiento de GOsa." + +#: include/setup_checks.inc:208 +msgid "Checking if register_globals is set to 'off'" +msgstr "" +"Comprobando si el registro de variables globales (register_globals) esta " +"desactivado." + +#: include/setup_checks.inc:209 +msgid "" +"register_globals is a PHP mechanism to register all global varibales to be " +"accessible from scripts without changing the scope. This may be a security " +"risk. GOsa will run in both modes." +msgstr "" +"El registro de variables globales (register_globals) es un mecanismo de PHP " +"que permite acceder a variables globales sin cambiar el ambito. Esto puede " +"ser un problema de seguridad. GOsa funcionará en los dos modos." + +#: include/setup_checks.inc:212 +msgid "Checking for ldap module" +msgstr "Comprobando los módulos de ldap" + +#: include/setup_checks.inc:213 +msgid "This is the main module used by GOsa and therefore really required." +msgstr "Este es el módulo más usado por GOsa, es realmente requerido." + +#: include/setup_checks.inc:216 +msgid "Checking for gettext support" +msgstr "Comprobando el soporte de gettext" + +#: include/setup_checks.inc:217 +msgid "Gettext support is required for internationalized GOsa." +msgstr "" +"El soporte de gettext es requerido para la intenacionalización de GOsa." + +#: include/setup_checks.inc:219 +msgid "Checking for mhash module" +msgstr "Comprobando por el módulo de mhash" + +#: include/setup_checks.inc:220 +msgid "" +"To use SSHA encryption, you'll need this module. If you are just using crypt " +"or md5 encryption, ignore this message. GOsa will run without it." +msgstr "" +"Necesitará este módulo para usar crifrado SSHA. Si usted solo usa crypt o " +"md5, ignore este mensaje. GOsa correra si él." + +#: include/setup_checks.inc:223 +msgid "Checking for gd module" +msgstr "Comprobando el módulo gd" + +#: include/setup_checks.inc:224 +msgid "" +"GOsa needs this module for recalculating image sizes provided for users as " +"jpegPhoto." +msgstr "" +"Gosa necesita de este módulo para recalcular los tamaños de las imagenes que " +"los usuarios provean como jpegPhoto." + +#: include/setup_checks.inc:226 +msgid "Checking for imap module" +msgstr "Comprobando el módulo de imap" + +#: include/setup_checks.inc:227 +msgid "" +"The IMAP module is needed to communicate with the IMAP server. It gets " +"status informations, creates and deletes mail users." +msgstr "" +"El módulo de IMAP es necesario para comunicarse con el servidor IMAP. " +"Obtiene el estado, crea y borra usuarios del correo." + +#: include/setup_checks.inc:229 +msgid "Checking for getacl in imap" +msgstr "Comprobando por getacl en imap" + +#: include/setup_checks.inc:230 +msgid "" +"The getacl support is needed for shared folder permissions. The standard " +"IMAP module is not capable of reading acl's. You need a recend PHP version " +"for this feature." +msgstr "" +"El soporte de getacl es necesario para carpetas con permisos compartidos. El " +"módulo IAMP estandar no es capaz de leer acls. Necesitará una versión " +"reciente de PHP para obtener está caracteristica. " + +#: include/setup_checks.inc:232 +msgid "Checking for mysql module" +msgstr "Comprobando el módulo de mysql" + +#: include/setup_checks.inc:233 +msgid "MySQL support is needed for reading GOfax reports from databases." +msgstr "" +"El soporte de MySQL es necesario para leer los repotes de GOfax de la base " +"de datos." + +#: include/setup_checks.inc:235 +msgid "Checking for cups module" +msgstr "Comprobando el módulo de cups" + +#: include/setup_checks.inc:236 +msgid "" +"In order to read available printers from IPP protocol instead of printcap " +"files, you've to install the CUPS module." +msgstr "" +"Para poder leer las impresoras disponibles a través del protocolo IPP, en " +"vez de los archivos printcap, tiene que tener instalado el módulo de CUPS." + +#: include/setup_checks.inc:238 +msgid "Checking for kadm5 module" +msgstr "Comprobando el módulo kadm5" + +#: include/setup_checks.inc:239 +msgid "" +"Managing users in kerberos requires the kadm5 module which is downloadable " +"via PEAR network." +msgstr "" +"Manejando usuarios en kerberos requiere el módulo kadm5 que esta disponible " +"en la red PEAR." + +#: include/setup_checks.inc:248 +msgid "Checking for some additional programms" +msgstr "Comprobando programas adicionales" + +#: include/setup_checks.inc:257 +msgid "Checking for ImageMagick (>=5.4.0)" +msgstr "Comprobando por ImageMagick (>=5.4.0)" + +#: include/setup_checks.inc:258 +msgid "" +"ImageMagick is used to convert user supplied images to fit the suggested " +"size and the unified JPEG format." +msgstr "" +"ImageMagick se usa para convertir las imagenes de los usuarios para que " +"encajen en el tamaño sugerido y el formato JPEG." + +#: include/setup_checks.inc:261 +#, fuzzy +msgid "Checking imagick module for PHP" +msgstr "Comprobando el módulo de imap" + +#: include/setup_checks.inc:262 +#, fuzzy +msgid "" +"Imagick is used to convert user supplied images to fit the suggested size " +"and the unified JPEG format from PHP script." +msgstr "" +"ImageMagick se usa para convertir las imagenes de los usuarios para que " +"encajen en el tamaño sugerido y el formato JPEG." + +#: include/setup_checks.inc:269 +msgid "Checking for fping utility" +msgstr "Comprobando la herramienta fping" + +#: include/setup_checks.inc:270 +msgid "" +"The fping utility is only used if you've got a thin client based terminal " +"environment running." +msgstr "" +"La herramienta fping solo se usa si tiene un entorno de terminales clientes " +"delgados (thinclient)." + +#: include/setup_checks.inc:285 +msgid "Checking for a way to generate LM/NT password hashes" +msgstr "Buscando una manera de generar hashes de contraseñas LM/NT" + +#: include/setup_checks.inc:286 +msgid "" +"In order to use SAMBA 2/3, you've to install some additional packages to " +"generate password hashes." +msgstr "" +"Para poder usar SAMBA 2/3, tiene que instalar algunos paquetes adicionales " +"para generar los hashes de contraseñas." + +#: include/class_plugin.inc:180 +msgid "This 'dn' has no account extensions." +msgstr "Este 'dn' no tiene extensiones de cuenta." + +#: include/class_plugin.inc:185 +msgid "This is an empty plugin." +msgstr "Esta es un extensión vacía." + +#: include/class_plugin.inc:384 +#, php-format +msgid "" +"Command '%s', specified as POSTCREATE for plugin '%s' doesn't seem to exist." +msgstr "" +"El comando '%s', especificado como 'POSTCREATE' para la extensión '%s' no " +"parece existir." + +#: include/class_plugin.inc:410 +#, fuzzy, php-format +msgid "" +"Command '%s', specified as POSTMODIFY for plugin '%s' doesn't seem to exist." +msgstr "" +"El comando '%s', especificado como POSTREMOVE para la extensión '%s' no " +"parece existir." + +#: include/class_plugin.inc:436 +#, php-format +msgid "" +"Command '%s', specified as POSTREMOVE for plugin '%s' doesn't seem to exist." +msgstr "" +"El comando '%s', especificado como POSTREMOVE para la extensión '%s' no " +"parece existir." + +#: include/version.inc:15 +#, php-format +msgid "You are currently using GOsa version %s (CVS checkout from %s)" +msgstr "Está corriendo la versión %s de GOsa (CVS checkout de %s)" + +#: include/class_config.inc:69 +#, php-format +msgid "XML error in gosa.conf: %s at line %d" +msgstr "Error XML en 'gosa.conf': %s en la linea %d" + +#: include/class_config.inc:195 html/index.php:138 +msgid "Can't bind to LDAP. Please contact the system administrator." +msgstr "" +"NO se puede conectar a LDAP. Por favor, contacte con su administrador de " +"sistemas." + +#: include/class_config.inc:426 +msgid "SID and/or RIDBASE missing in your configuration!" +msgstr "SID y/o RIDBASE no se encuentran en su configuración." + +#: include/class_ldap.inc:429 +#, php-format +msgid "" +"Autocreation of type '%s' is currently not supported. Please report to the " +"GOsa team." +msgstr "" +"Actualmente no esta soportada la creación automática del tipo '%s'. Por " +"favor, informe de esto al equipo de desarrollo de GOsa." + +#: include/class_ldap.inc:664 +#, php-format +msgid "" +"This is not a valid DN: '%s'. A block for import should begin with 'dn: ...' " +"in line %s" +msgstr "" + +#: include/class_ldap.inc:680 +#, php-format +msgid "The dn: '%s' (from line %s) already exists in the LDAP database." +msgstr "" + +#: include/class_ldap.inc:695 +#, php-format +msgid "Error while importing dn: '%s', please check your LDIF from line %s on!" +msgstr "" + +#: html/getfax.php:53 +msgid "Could not connect to database server!" +msgstr "No puedo conectar al servidor de base de datos." + +#: html/getfax.php:55 +msgid "Could not select database!" +msgstr "No puedo seleccionar la base de datos." + +#: html/getfax.php:60 html/getfax.php:68 +msgid "Database query failed!" +msgstr "La consulta a la base de datos ha fallado." + +#: html/getvcard.php:36 +msgid "Error: getcvard.php needs a parameter to export a vcard!" +msgstr "Error: getcvard.php necesita un parametro para exportar a vcard." + +#: html/setup.php:141 html/index.php:75 +#, php-format +msgid "Directory '%s' specified as compile directory is not accessable!" +msgstr "" +"El directorio '%s' especificado como directorio de compilación no es " +"accesible." + +#: html/setup.php:207 +msgid "You've to specify an ldap server before continuing!" +msgstr "Tiene que especificar un servidor ldap antes de continuar." + +#: html/setup.php:216 +msgid "" +"Can't connect to the specified LDAP server! Please make sure that is " +"reachable for GOsa." +msgstr "" +"No se pudo conectar al servidor LDAP especificado. Por favor, asegure que " +"este accesible para GOsa." + +#: html/setup.php:224 +msgid "" +"Can't bind to the specified LDAP server! Please make sure that is reachable " +"for GOsa." +msgstr "" +"No se pudo autentificar con el servidor LDAP especificado. Por favor, " +"asegure que este accesible para GOsa." + +#: html/setup.php:268 +#, php-format +msgid "" +"You're missing the required attribute '%s' from this formular. Please " +"complete!" +msgstr "" +"Falta el atributo requerido '%s' de este formulario. Por favor, complételo." + +#: html/setup.php:284 +#, php-format +msgid "Can't log into LDAP server. Reason was: %s." +msgstr "No se puede conectar al servidor LDAP. El motivo fue: %s." + +#: html/setup.php:328 +msgid "" +"No configuration found! Please save the generated one and place it in the " +"suggested directory." +msgstr "" +"No se encontró el archivo de configuración. Por favor, guarde el archivo " +"generado y colóquelo en el directorio sugerido." + +#: html/setup.php:337 +msgid "Config file found, but permissions are not secure. Please fix!" +msgstr "" +"El archivo de configuración se encontró, pero los permisos de acceso no son " +"seguros. Por favor, corríjalo." + +#: html/main.php:96 +msgid "" +"Register globals is on. GOsa will refuse to login unless this is fixed by an " +"administrator." +msgstr "" +"'Register globals' está activado. No se permitirá ninguna entrada hasta que " +"esto sea solucionado por un administrador." + +#: html/main.php:139 +msgid "Warning: memory is getting low - please increase the memory_limit!" +msgstr "" +"Advertencia: Poca memoria disponible - por favor aumente 'memory_limit'" + +#: html/main.php:257 +#, php-format +msgid "Can't find any plugin definitions for plugin '%s'!" +msgstr "No se pudo encontrar ninguna definición de extensión para '%s'" + +#: html/index.php:53 +#, php-format +msgid "GOsa configuration %s/gosa.conf is not readable. Aborted." +msgstr "" +"No se puede leer la configuración de GOsa (%s/gosa.conf). Se ha abortado la " +"operación." + +#: html/index.php:156 +msgid "" +"You're missing an administrative account for GOsa, you'll not be able to " +"administrate anything!" +msgstr "" +"No tiene una cuenta administrativa para GOsa, no podrá administrar nada." + +#: html/index.php:164 +msgid "Please specify a valid username!" +msgstr "Por favor especifique un nombre de usuario valido." + +#: html/index.php:166 +msgid "Please specify your password!" +msgstr "Por favor especifique su contraseña." + +#: html/index.php:173 +msgid "Please check the username/password combination." +msgstr "Por favor compruebe su nombre de usuario/contraseña." + +#: html/index.php:211 +msgid "Session will not be encrypted." +msgstr "La sesion no sera encriptada." + +#: html/index.php:211 +msgid "Enter SSL session" +msgstr "Entrar en sesión SSL" + +#: ihtml/themes/altlinux/sizelimit.tpl:3 ihtml/themes/default/sizelimit.tpl:3 +msgid "" +"The size limit option makes LDAP operations faster and saves the LDAP server " +"from getting too much load. The easiest way to handle big databases without " +"long timeouts would be to limit your search to smaller values and use " +"filters to get the entries you are looking for." +msgstr "" +"La opción 'tamaño limite' permite unas operaciones con LDAP mas rápidas y " +"protege al servidor LDAP de alcanzar una mayor carga. La manera mas fácil de " +"manipular grandes bases de datos sin grandes perdidas de tiempo es limitar " +"la busqueda a valores pequeños y usar filtros para encontrar las entradas " +"que está buscando." + +#: ihtml/themes/altlinux/sizelimit.tpl:6 ihtml/themes/default/sizelimit.tpl:6 +msgid "Please choose the way to react for this session" +msgstr "Por favor elije la manera en que la sesión reaccione" + +#: ihtml/themes/altlinux/sizelimit.tpl:9 ihtml/themes/default/sizelimit.tpl:9 +msgid "ignore this error and show all entries the LDAP server returns" +msgstr "" +"ignore este error y enseñe todas las entradas devueltas por el servidor LDAP" + +#: ihtml/themes/altlinux/sizelimit.tpl:10 +#: ihtml/themes/default/sizelimit.tpl:10 +msgid "" +"ignore this error and show all entries that fit int the defined sizelimit " +"and let me use filters instead" +msgstr "" +"ignore este error y enseñe todas las entradas que concuerdan con el 'tamaño " +"limite' definido y active el uso de filtros en su lugar" + +#: ihtml/themes/altlinux/conflict.tpl:2 ihtml/themes/classic/conflict.tpl:2 +#: ihtml/themes/default/conflict.tpl:2 +msgid "Session conflict detected" +msgstr "Detectado conflicto de sesiones." + +#: ihtml/themes/altlinux/conflict.tpl:6 ihtml/themes/classic/conflict.tpl:6 +#: ihtml/themes/default/conflict.tpl:6 +msgid "" +"Probably there's another active instance of your session. Multiple window " +"operation is technical not possible and heavily depends on the browser " +"you're using. Usage of different browsers at a time (i.e. IE and Mozilla) is " +"possible. Pressing the Logout button will close this session." +msgstr "" +"Probablemente hay otra instancia de su sesión. Las operaciones con múltiples " +"ventanas son técnicamente imposibles y dependen altamente del navegador que " +"este usando. Es posible usar distintos navegadores al mismo tiempo (es " +"decir, IE y Mozilla). Apretando el botón Salir cerrará está sesión." + +#: ihtml/themes/altlinux/conflict.tpl:10 ihtml/themes/classic/conflict.tpl:10 +#: ihtml/themes/default/conflict.tpl:10 +msgid "" +"Ignoring this message will change/destroy the data you're currently editing, " +"so please close multiple windows and log in again." +msgstr "" +"Ignorando este mensaje cambiara/borrara los datos que esta actualmente " +"editando. Por favor, cierre las ventanas múltiples y vuelva a entrar." + +#: ihtml/themes/altlinux/conflict.tpl:14 ihtml/themes/classic/conflict.tpl:14 +#: ihtml/themes/default/conflict.tpl:14 +msgid "Logout" +msgstr "Salir" + +#: ihtml/themes/altlinux/login.tpl:13 ihtml/themes/classic/login.tpl:12 +#: ihtml/themes/default/login.tpl:13 +msgid "Please use your username and password to log in" +msgstr "" +"Por favor introduzca su usuario y contraseña para entrar." + +#: ihtml/themes/altlinux/login.tpl:24 ihtml/themes/altlinux/login.tpl:28 +#: ihtml/themes/classic/login.tpl:23 ihtml/themes/classic/login.tpl:27 +#: ihtml/themes/default/login.tpl:24 ihtml/themes/default/login.tpl:28 +msgid "Username" +msgstr "Nombre de Usuario" + +#: ihtml/themes/altlinux/login.tpl:42 ihtml/themes/altlinux/login.tpl:45 +#: ihtml/themes/classic/login.tpl:41 ihtml/themes/classic/login.tpl:44 +#: ihtml/themes/default/login.tpl:42 ihtml/themes/default/login.tpl:45 +msgid "Directory" +msgstr "Directorio" + +#: ihtml/themes/altlinux/login.tpl:53 +#: ihtml/themes/altlinux/setup_finish.tpl:24 ihtml/themes/classic/login.tpl:52 +#: ihtml/themes/default/login.tpl:53 ihtml/themes/default/setup_finish.tpl:28 +msgid "Sign in" +msgstr "Entrando" + +#: ihtml/themes/altlinux/login.tpl:54 ihtml/themes/classic/login.tpl:53 +#: ihtml/themes/default/login.tpl:54 +msgid "Click here to log in" +msgstr "Pulse aquí para entrar" + +#: ihtml/themes/altlinux/setup_introduction.tpl:1 +#: ihtml/themes/default/setup_introduction.tpl:1 +msgid "Welcome to the GOsa setup!" +msgstr "Bienvenido a la configuración de GOsa" + +#: ihtml/themes/altlinux/setup_introduction.tpl:4 +#: ihtml/themes/default/setup_introduction.tpl:4 +msgid "" +"It looks like you're calling GOsa for the first time - no configuration was " +"found. This setup like script will try to aid you in creating a working " +"configuration by performing three major steps: first we'll check the PHP " +"installation for required modules, than we're going to check for optional/" +"needed programms and after you've provided basic informations for your LDAP " +"connectivity, we're going to check your LDAP setup." +msgstr "" +"Parece que esta ejecutando GOsa por primera vez - no se encontró la " +"configuración. Los siguientes pasos tratarán de asistirlo en crear una " +"configuración funcional, efectuando las siguientes tareas: comprobar la " +"instalación de PHP y de los módulos necesarios, luego comprobar los " +"programas opcionales y, luego de ingresar la información necesaria para " +"conectarse al servidor LDAP, vamos a comprobar la configuración de LDAP." + +#: ihtml/themes/altlinux/framework.tpl:14 +#: ihtml/themes/classic/framework.tpl:13 ihtml/themes/default/framework.tpl:14 +msgid "Main" +msgstr "Inicio" + +#: ihtml/themes/altlinux/framework.tpl:19 +#: ihtml/themes/classic/framework.tpl:15 ihtml/themes/default/framework.tpl:19 +msgid "Help" +msgstr "Ayuda" + +#: ihtml/themes/altlinux/framework.tpl:24 +#: ihtml/themes/classic/framework.tpl:17 ihtml/themes/default/framework.tpl:24 +msgid "Sign out" +msgstr "Salir" + +#: ihtml/themes/altlinux/framework.tpl:32 +#: ihtml/themes/classic/framework.tpl:22 ihtml/themes/default/framework.tpl:32 +msgid "Signed in:" +msgstr "Entrando" + +#: ihtml/themes/altlinux/setup_step2.tpl:1 +#: ihtml/themes/altlinux/setup_step3.tpl:1 +#: ihtml/themes/altlinux/setup_step4.tpl:1 +#: ihtml/themes/default/setup_step2.tpl:1 +#: ihtml/themes/default/setup_step3.tpl:1 +#: ihtml/themes/default/setup_step4.tpl:1 +msgid "Setup continued..." +msgstr "La instalación continua" + +#: ihtml/themes/altlinux/setup_step2.tpl:4 +#: ihtml/themes/default/setup_step2.tpl:4 +msgid "" +"Step two looks for a set of helper programms and checks if they have the " +"correct minimum version." +msgstr "" +"El paso dos busca por una colección de programas/herramientas de soporte y " +"comprueba si tienen al menos la mínima versión necesaria." + +#: ihtml/themes/altlinux/setup_step2.tpl:11 +#: ihtml/themes/default/setup_step2.tpl:11 +msgid "" +"We've inspected the webserver side now. Your setup seems to fit GOsa's " +"needs. Lets go for the GOsa configuration part now..." +msgstr "" +"Hemos inspeccionado el servidor web. Su configuración parece cumplir con los " +"requerimientos de GOsa. Continuamos la configuración de GOsa..." + +#: ihtml/themes/altlinux/islocked.tpl:2 ihtml/themes/classic/islocked.tpl:2 +#: ihtml/themes/default/islocked.tpl:2 +msgid "Locking conflict detected" +msgstr "Detectado conflicto de Bloqueos" + +#: ihtml/themes/altlinux/islocked.tpl:9 ihtml/themes/default/islocked.tpl:9 +msgid "" +"If this lock detection is false, the other person has obviously closed the " +"webbrowser during the edit operation. You may delete the lockfile in this " +"case by pressing the Remove button." +msgstr "" +"Si esta detección de bloqueo es falsa, la otra persona cerro su navegador " +"mientras estaba editando. Puede borrar el archivo de bloqueo en ese caso, " +"pulsando en el botón Eliminar." + +#: ihtml/themes/altlinux/setup_step3.tpl:4 +#: ihtml/themes/default/setup_step3.tpl:4 +msgid "" +"Now we're going include your LDAP server and create an initial " +"configuration. After you've entered the server URI below, a quick check is " +"performed if required LDAP schemas are in place. Samba versions are " +"autodetected by the installed objectclasses. Details on how your LDAP tree " +"is organized will be asked later on." +msgstr "" +"Vamos a incluir el servidor LDAP y crear una configuración inicial. Una vez " +"que usted ingrese el URI del servidor, se realizara una pequeña comprobación " +"para comprobar que los esquemas de LDAP requeridos están correctamente " +"instalados. La versión de samba es detectada a través de los \"objectclass\" " +"instalados. Los detalles sobre como el árbol LDAP está organizado serán " +"preguntados más adelante." + +#: ihtml/themes/altlinux/setup_step3.tpl:7 +#: ihtml/themes/default/setup_step3.tpl:7 +msgid "Please enter the server URI" +msgstr "Por favor especifique una dirección de servidor - URI - válida." + +#: ihtml/themes/altlinux/setup_step4.tpl:4 +#: ihtml/themes/default/setup_step4.tpl:3 +msgid "Enter a description for the location you're configuring here" +msgstr "Ingrese una descripción para la ubicación que está configurando" + +#: ihtml/themes/altlinux/setup_step4.tpl:8 +#: ihtml/themes/default/setup_step4.tpl:7 +msgid "Location name" +msgstr "Nombre de la localización" + +#: ihtml/themes/altlinux/setup_step4.tpl:14 +#: ihtml/themes/default/setup_step4.tpl:13 +msgid "" +"Finally, you need to specify parameters to access the LDAP server. GOsa " +"always acts as admin and manages access rights internally. This is a " +"workaround till OpenLDAP's in directory ACI's are fully implemented. For " +"this to work, we need the admin DN and the corresponding password." +msgstr "" +"Finalmente, necesita especificar parámetros para acceder al servidor LDAP. " +"GOsa siempre actúa como administrador y maneja los derechos de acceso " +"internamente. Este comportamiento cambiará cuando el manejo de derechos de " +"acceso de OpenLDAP este completamente implementado. Para que esto funcione, " +"necesitamos el DN del administrador y la contraseña correspondiente." + +#: ihtml/themes/altlinux/setup_step4.tpl:19 +#: ihtml/themes/default/setup_step4.tpl:18 +msgid "Admin DN" +msgstr "DN del administrador" + +#: ihtml/themes/altlinux/setup_step4.tpl:23 +#: ihtml/themes/default/setup_step4.tpl:22 +msgid "Admin password" +msgstr "Nueva contraseña" + +#: ihtml/themes/altlinux/setup_step4.tpl:29 +#: ihtml/themes/default/setup_step4.tpl:28 +msgid "" +"Some basic LDAP parameters are tunable and affect the locations where GOsa " +"saves people and groups, including the way accounts get created. Check the " +"values below if the fit your needs." +msgstr "" +"Algunos parámetros básicos de LDAP son modificables y afectarán las " +"ubicaciones donde GOSa guarda información de los usuarios y los grupos, " +"incluyendo la manera en que las cuentas son creadas. Compruebe los valores a " +"continuación si se ajustan a sus necesidades." + +#: ihtml/themes/altlinux/setup_step4.tpl:34 +#: ihtml/themes/default/setup_step4.tpl:33 +msgid "People storage ou" +msgstr "Carpeta de almacenamiento - ou - para los usuarios" + +#: ihtml/themes/altlinux/setup_step4.tpl:38 +#: ihtml/themes/default/setup_step4.tpl:37 +msgid "People dn attribute" +msgstr "Atributo 'dn' de los usuarios" + +#: ihtml/themes/altlinux/setup_step4.tpl:46 +#: ihtml/themes/default/setup_step4.tpl:45 +msgid "Group storage ou" +msgstr "Carpeta de almacenamiento - ou - para los grupos" + +#: ihtml/themes/altlinux/setup_step4.tpl:50 +#: ihtml/themes/default/setup_step4.tpl:49 +msgid "ID base for users/groups" +msgstr "Identificador base - ID -, para usuarios y grupos" + +#: ihtml/themes/altlinux/setup_step4.tpl:56 +#: ihtml/themes/default/setup_step4.tpl:74 +msgid "Check" +msgstr "Comprobación" + +#: ihtml/themes/altlinux/setup_finish.tpl:1 +#: ihtml/themes/default/setup_finish.tpl:1 +msgid "Setup finished" +msgstr "Configuración finalizada" + +#: ihtml/themes/altlinux/setup_finish.tpl:4 +#: ihtml/themes/default/setup_finish.tpl:8 +msgid "" +"GOsa setup has collected all data needed to create an initial configuration " +"file. Save the the link below as your gosa.conf and place that file in /etc/" +"gosa. Change it as needed." +msgstr "" +"La configuración de GOsa ha recogido toda la información necesaria para " +"crear una configuración inicial. Guarde esta configuración como gosa.conf en " +"'/etc/gosa/'. Modifíquela tanto como sea necesario" + +#: ihtml/themes/altlinux/setup_finish.tpl:12 +#: ihtml/themes/default/setup_finish.tpl:16 +msgid "" +"After placing the file under /etc/gosa, place make sure that the webserver " +"user is able to read gosa.conf, while other users shouldn't. You may want to " +"execute these commands to achieve this requirement:" +msgstr "" +"Después de colocar el archivo en /etc/gosa, asegúrese que el usuario del " +"servidor web pueda leer gosa.conf y que los otros no deberían poder leerlo. " +"Para cumplir con este requerimiento puede ejecutar estos comandos:" + +#: ihtml/themes/altlinux/setup_finish.tpl:22 +#: ihtml/themes/default/setup_finish.tpl:26 +msgid "Retry" +msgstr "Reintentar" + +#: ihtml/themes/classic/islocked.tpl:9 +msgid "" +"If this is lock detection is false, the other person has obviously closed " +"the webbrowser during the edit operation. You may delete the lockfile in " +"this case by pressing the Remove button." +msgstr "" +"Si esta detección de bloqueo es falsa, la otra persona cerro su navegador " +"mientras estaba editando. Puede borrar el archivo de bloqueo en ese caso, " +"pulsando en el botón Eliminar." + +#: ihtml/themes/default/setup_step4.tpl:55 +msgid "Some parameters about Referral (optionnal)." +msgstr "" + +#: ihtml/themes/default/setup_step4.tpl:60 +msgid "Referral URL" +msgstr "" + +#: ihtml/themes/default/setup_step4.tpl:64 +msgid "Referral Admin" +msgstr "" + +#: ihtml/themes/default/setup_step4.tpl:68 +#, fuzzy +msgid "Referral Password" +msgstr "Repetir la nueva contraseña" + +#: ihtml/themes/default/setup_finish.tpl:3 +#, fuzzy +msgid "Schema Configuration" +msgstr "Información de sistema" + +#: ihtml/themes/default/setup_finish.tpl:6 +#, fuzzy +msgid "Configuration File" +msgstr "Configurar" + +#, fuzzy +#~ msgid "" +#~ "The LDIF export/import plugin provides methods to download/upload a " +#~ "complete snapshot of the running LDAP directory as ldif. You may save " +#~ "these files for backup purpose or when initializing a new server." +#~ msgstr "" +#~ "La extensión exportar LDIF provee los metodos para descargar una copia " +#~ "espejo del directorio LDAP actual como un archivo LDIF. Puede grabar " +#~ "estos ficheros como copias de seguridad o para iniciar un nuevo servidor." + +#, fuzzy +#~ msgid "Overwrite" +#~ msgstr "escribir" + +#~ msgid "You are not allowed to delete this terminal!" +#~ msgstr "¡No tiene permisos para eliminar este terminal!" + +#~ msgid "Administrators" +#~ msgstr "Administradores" + +#~ msgid "Download complete ldif" +#~ msgstr "Descargar ldif completo" + +#~ msgid "Click here to save a IVBB conform LDAP snapshot to a file" +#~ msgstr "" +#~ "Pulse aquí para grabar una copia espejo tipo IVBB de LDAP a un archivo" + +#~ msgid "Download adapted IVBB ldif" +#~ msgstr "Descargue adaptado IVBB ldif " + +#~ msgid "" +#~ "Warning: Please check the SIZELIMIT option set on your LDAP server. You " +#~ "may not get all entries, if this value is to low!" +#~ msgstr "" +#~ "Aviso: Por favor compruebe la opción tamaño limite (SIZELIMIT) activa en " +#~ "su servidor LDAP. ¡Puede que no este cogiendo todas las entradas si este " +#~ "valor es muy bajo!" + +#~ msgid "" +#~ "Error while removing a lock. Parameters are not set correctly, please " +#~ "check the source!" +#~ msgstr "" +#~ "Error al tratar de agregar un bloqueo. Los parámetros no son correctos, " +#~ "por favor, compruebe el código fuente." + +#~ msgid "Select to see terminals that boot in textual way" +#~ msgstr "Seleccione para mostrar terminales que inician en modo texto" + +#~ msgid "Show ascii based terminals" +#~ msgstr "Mostrar terminales tipo ascii" + +#~ msgid "Select to see terminals that boot in graphical way" +#~ msgstr "Seleccione para mostrar terminales que inician en modo grafico" + +#~ msgid "Show graphic based terminals" +#~ msgstr "Mostrar terminales tipo grafico" + +#~ msgid "Select to see terminals that have debugging enabled" +#~ msgstr "Seleccione para mostrar terminales que tienen depuración activada" + +#~ msgid "Show terminals in debug mode" +#~ msgstr "Mostrar terminales en modo depuración" + +#~ msgid "Select to see terminals that have been disabled" +#~ msgstr "Seleccione para mostrar terminales que están desactivados" + +#~ msgid "Show disabled terminals" +#~ msgstr "Mostrar terminales desactivados" diff --git a/locale/fr/LC_MESSAGES/messages.mo b/locale/fr/LC_MESSAGES/messages.mo new file mode 100644 index 0000000000000000000000000000000000000000..0dfa3315f68d2478090f938a7a01cdcc223abb42 GIT binary patch literal 117678 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 literal 0 HcmV?d00001 diff --git a/locale/fr/LC_MESSAGES/messages.po b/locale/fr/LC_MESSAGES/messages.po new file mode 100644 index 000000000..baed978b8 --- /dev/null +++ b/locale/fr/LC_MESSAGES/messages.po @@ -0,0 +1,6356 @@ +# translation of messages.po to +# translation of messages.po to +# translation of messages.po to +# translation of messages.po to +# translation of messages.po to +# translation of messages.po to +# translation of messages.po to Français +# Gosa2 French Translation +# This file is distributed under the GPL +# Alixen +# Benoit Mortier , 2004, 2005. +msgid "" +msgstr "" +"Project-Id-Version: messages\n" +"POT-Creation-Date: \n" +"PO-Revision-Date: 2005-04-26 23:00+0200\n" +"Last-Translator: Benoit Mortier \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.9.1\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: contrib/gosa.conf:4 +msgid "My account" +msgstr "Mon Compte" + +#: contrib/gosa.conf:23 +msgid "Administration" +msgstr "Administration" + +#: contrib/gosa.conf:40 +msgid "Addons" +msgstr "Extensions" + +#: contrib/gosa.conf:55 contrib/gosa.conf:66 contrib/gosa.conf:74 +#: contrib/gosa.conf:80 contrib/gosa.conf:88 contrib/gosa.conf:98 +#: contrib/gosa.conf:106 contrib/gosa.conf:111 contrib/gosa.conf:116 +#: contrib/gosa.conf:121 contrib/gosa.conf:126 contrib/gosa.conf:131 +#: plugins/personal/mail/generic.tpl:4 plugins/personal/posix/generic.tpl:4 +#: plugins/personal/samba/samba2.tpl:6 plugins/personal/samba/samba3.tpl:6 +#: plugins/personal/generic/class_user.inc:16 +#: plugins/gofax/blocklists/generic.tpl:1 +#: plugins/gofax/faxaccount/generic.tpl:6 plugins/admin/groups/mail.tpl:7 +#: plugins/generic/references/class_reference.inc:20 +msgid "Generic" +msgstr "Informations générales" + +#: contrib/gosa.conf:56 +msgid "Unix" +msgstr "Unix" + +#: contrib/gosa.conf:57 contrib/gosa.conf:68 +#: plugins/personal/mail/class_mailAccount.inc:22 +#: plugins/generic/references/class_reference.inc:24 +msgid "Mail" +msgstr "Mail" + +#: contrib/gosa.conf:58 plugins/personal/samba/class_sambaAccount.inc:24 +#: plugins/generic/references/class_reference.inc:26 +#: plugins/generic/references/class_reference.inc:28 +msgid "Samba" +msgstr "Samba" + +#: contrib/gosa.conf:59 plugins/personal/connectivity/main.inc:136 +#: plugins/personal/connectivity/class_connectivity.inc:15 +msgid "Connectivity" +msgstr "Connectivité" + +#: contrib/gosa.conf:60 plugins/personal/generic/generic.tpl:231 +#: plugins/personal/generic/generic.tpl:362 +#: plugins/gofax/faxaccount/generic.tpl:10 +#: plugins/addons/addressbook/contents.tpl:14 +#: plugins/admin/departments/generic.tpl:62 +msgid "Fax" +msgstr "Fax" + +#: contrib/gosa.conf:61 plugins/personal/generic/generic.tpl:214 +#: plugins/personal/generic/generic.tpl:352 +#: plugins/addons/addressbook/contents.tpl:14 +#: plugins/addons/addressbook/address_edit.tpl:41 +#: plugins/addons/addressbook/address_edit.tpl:89 +#: plugins/addons/addressbook/address_info.tpl:37 +#: plugins/addons/addressbook/address_info.tpl:85 +#: plugins/admin/departments/generic.tpl:58 +#: plugins/admin/systems/chooser.tpl:12 +#: plugins/admin/ogroups/class_ogroupManagement.inc:48 +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:6 +#: plugins/generic/references/class_reference.inc:40 +msgid "Phone" +msgstr "Téléphone" + +#: contrib/gosa.conf:62 contrib/gosa.conf:70 contrib/gosa.conf:76 +#: contrib/gosa.conf:84 contrib/gosa.conf:94 contrib/gosa.conf:102 +#: contrib/gosa.conf:107 contrib/gosa.conf:112 contrib/gosa.conf:117 +#: contrib/gosa.conf:122 contrib/gosa.conf:127 contrib/gosa.conf:132 +msgid "References" +msgstr "Références" + +#: contrib/gosa.conf:67 +#: plugins/admin/applications/class_applicationManagement.inc:25 +#: plugins/admin/ogroups/class_ogroupManagement.inc:44 +msgid "Applications" +msgstr "Applications" + +#: contrib/gosa.conf:69 +msgid "ACL" +msgstr "ACL" + +#: contrib/gosa.conf:75 +msgid "Options" +msgstr "Options" + +#: contrib/gosa.conf:81 contrib/gosa.conf:99 +msgid "Devices" +msgstr "Périphériques" + +#: contrib/gosa.conf:82 contrib/gosa.conf:100 +msgid "Startup" +msgstr "Démarrage" + +#: contrib/gosa.conf:83 contrib/gosa.conf:93 contrib/gosa.conf:101 +msgid "Monitoring" +msgstr "Surveillance" + +#: contrib/gosa.conf:89 +msgid "Databases" +msgstr "Base de données" + +#: contrib/gosa.conf:90 +msgid "Services" +msgstr "Services" + +#: contrib/gosa.conf:91 +msgid "DNS" +msgstr "DNS" + +#: contrib/gosa.conf:92 +msgid "DHCP" +msgstr "DHCP" + +#: contrib/gosa.conf:144 plugins/addons/ldapmanager/contentexport.tpl:19 +#: plugins/addons/ldapmanager/contentexport.tpl:32 +#: plugins/addons/ldapmanager/contentexport.tpl:47 +msgid "Export" +msgstr "Exporter" + +#: contrib/gosa.conf:145 plugins/personal/mail/generic.tpl:107 +#: plugins/addons/ldapmanager/contentimport.tpl:63 +#: plugins/addons/ldapmanager/contentcsv.tpl:122 +#: plugins/addons/ldapmanager/contentcsv.tpl:125 +msgid "Import" +msgstr "Importer" + +#: contrib/gosa.conf:146 +msgid "CSV Import" +msgstr "Importer un fichier csv" + +#: contrib/gosa.conf:161 +msgid "GONICUS" +msgstr "GONICUS" + +#: contrib/gosa.conf:179 +msgid "German" +msgstr "Allemand" + +#: contrib/gosa.conf:180 +msgid "Russian" +msgstr "Russe" + +#: contrib/gosa.conf:181 +msgid "Spanish" +msgstr "Espagnol" + +#: contrib/gosa.conf:182 +msgid "French" +msgstr "Français" + +#: contrib/gosa.conf:183 +msgid "Dutch" +msgstr "Allemand" + +#: contrib/gosa.conf:184 +msgid "English" +msgstr "Anglais" + +#: plugins/personal/mail/class_mailAccount.inc:23 +#: plugins/personal/password/class_password.inc:6 +#: plugins/personal/posix/class_posixAccount.inc:17 +#: plugins/personal/samba/class_sambaAccount.inc:25 +#: plugins/personal/generic/class_user.inc:17 +#: plugins/personal/connectivity/class_pureftpdAccount.inc:7 +#: plugins/personal/connectivity/class_phpgwAccount.inc:6 +#: plugins/personal/connectivity/class_webdavAccount.inc:7 +#: plugins/personal/connectivity/class_connectivity.inc:16 +#: plugins/personal/connectivity/class_proxyAccount.inc:6 +#: plugins/personal/connectivity/class_kolabAccount.inc:6 +#: plugins/gofax/blocklists/class_blocklistManagement.inc:6 +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:7 +#: plugins/gofax/reports/class_faxreport.inc:7 +#: plugins/addons/addressbook/class_addressbook.inc:7 +#: plugins/addons/ldapmanager/class_csvimport.inc:7 +#: plugins/addons/ldapmanager/class_import.inc:7 +#: plugins/addons/ldapmanager/class_ldif.inc:8 +#: plugins/addons/ldapmanager/class_export.inc:8 +#: plugins/addons/logview/class_logview.inc:7 +#: plugins/admin/groups/class_groupManagement.inc:26 +#: plugins/admin/users/class_userManagement.inc:26 +#: plugins/admin/applications/class_applicationManagement.inc:26 +#: plugins/admin/departments/class_departmentManagement.inc:26 +#: plugins/admin/systems/class_systemManagement.inc:33 +#: plugins/admin/ogroups/class_ogroupManagement.inc:26 +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:7 +#: plugins/gofon/reports/class_fonreport.inc:7 +msgid "This does something" +msgstr "Ceci fait quelque chose" + +#: plugins/personal/mail/class_mailAccount.inc:79 +#: plugins/admin/groups/class_groupMail.inc:59 +#, php-format +msgid "There is no mail method '%s' specified in your gosa.conf available." +msgstr "" +"Il n'y a pas de méthode email '%s' spécifiée dans votre fichier de " +"configuration gosa.conf." + +#: plugins/personal/mail/class_mailAccount.inc:163 +msgid "No DESC tag in vacation file:" +msgstr "Pas de drapeau DESC dans le message d'absence:" + +#: plugins/personal/mail/class_mailAccount.inc:189 +msgid "This account has no mail extensions." +msgstr "Ce compte n'a pas d'extensions email." + +#: plugins/personal/mail/class_mailAccount.inc:197 +#: plugins/admin/groups/class_groupMail.inc:187 +msgid "Remove mail account" +msgstr "Supprimer le compte email" + +#: plugins/personal/mail/class_mailAccount.inc:198 +#: plugins/admin/groups/class_groupMail.inc:188 +msgid "" +"This account has mail features enabled. You can disable them by clicking " +"below." +msgstr "" +"La messagerie est activée pour ce compte, vous pouvez la désactiver en " +"cliquant sur le bouton ci-dessous." + +#: plugins/personal/mail/class_mailAccount.inc:200 +#: plugins/admin/groups/class_groupMail.inc:190 +msgid "Create mail account" +msgstr "Créer un compte email" + +#: plugins/personal/mail/class_mailAccount.inc:201 +#: plugins/admin/groups/class_groupMail.inc:191 +msgid "" +"This account has mail features disabled. You can enable them by clicking " +"below." +msgstr "" +"La messagerie est désactivée pour ce compte, vous pouvez l'activer en " +"cliquant sur le bouton ci-dessous." + +#: plugins/personal/mail/class_mailAccount.inc:249 +msgid "You're trying to add an invalid email address to the list of forwarders." +msgstr "" +"Vous essayez d'ajouter une adresse email invalide à la liste des " +"destinataires." + +#: plugins/personal/mail/class_mailAccount.inc:255 +#: plugins/admin/groups/class_groupMail.inc:250 +msgid "Adding your one of your own addresses to the forwarders makes no sense." +msgstr "Utiliser une de vos adresses comme adresse de renvoi n'a pas de sens." + +#: plugins/personal/mail/class_mailAccount.inc:290 +#: plugins/personal/mail/class_mailAccount.inc:295 +#: plugins/admin/groups/class_groupMail.inc:278 +msgid "" +"You're trying to add an invalid email address to the list of alternate " +"addresses." +msgstr "" +"Vous essayez d'ajouter une adresse mail non valide à la liste des adresses " +"alternatives." + +#: plugins/personal/mail/class_mailAccount.inc:305 +#: plugins/admin/groups/class_groupMail.inc:283 +msgid "The address you're trying to add is already used by user" +msgstr "L'adresse entrée est déjà utilisée par un utilisateur" + +#: plugins/personal/mail/class_mailAccount.inc:647 +#: plugins/admin/groups/class_groupMail.inc:610 +msgid "The required field 'Primary address' is not set." +msgstr "Le champ obligatoire 'Primary address' n'est pas rempli." + +#: plugins/personal/mail/class_mailAccount.inc:651 +#: plugins/personal/mail/class_mailAccount.inc:655 +#: plugins/addons/addressbook/class_addressbook.inc:529 +msgid "Please enter a valid email address in 'Primary address' field." +msgstr "Veuillez entrer une adresse email valide dans le champ 'Adresse Principale'." + +#: plugins/personal/mail/class_mailAccount.inc:662 +#: plugins/admin/groups/class_groupMail.inc:619 +msgid "The primary address you've entered is already in use." +msgstr "L'adresse principale entrée est déjà utilisée." + +#: plugins/personal/mail/class_mailAccount.inc:668 +#: plugins/admin/groups/class_groupMail.inc:625 +msgid "Value in 'Quota size' is not valid." +msgstr "La valeur dans le champ 'Quota size' n'est pas valide." + +#: plugins/personal/mail/class_mailAccount.inc:677 +#: plugins/admin/groups/class_groupMail.inc:634 +msgid "Please specify a vaild mail size for mails to be rejected." +msgstr "Veuillez indiquer une taille valide pour les mails devant être rejetés." + +#: plugins/personal/mail/class_mailAccount.inc:687 +#: plugins/admin/groups/class_groupMail.inc:642 +msgid "You need to set the maximum mail size in order to reject anything." +msgstr "" +"Il est nécessaire d'indiquer une taille maximale des emails afin de n'en " +"rejeter aucun." + +#: plugins/personal/mail/generic.tpl:7 plugins/admin/groups/mail.tpl:10 +msgid "Primary address" +msgstr "Adresse principale" + +#: plugins/personal/mail/generic.tpl:11 plugins/admin/groups/mail.tpl:14 +#: plugins/generic/references/class_reference.inc:44 +msgid "Server" +msgstr "Serveur" + +#: plugins/personal/mail/generic.tpl:13 +msgid "Specify the mail server where the user will be hosted on" +msgstr "Indiquez le serveur de messagerie de l'utilisateur" + +#: plugins/personal/mail/generic.tpl:21 plugins/admin/groups/mail.tpl:24 +msgid "Quota usage" +msgstr "Utilisation des Quota" + +#: plugins/personal/mail/generic.tpl:28 plugins/admin/groups/mail.tpl:31 +#: plugins/admin/systems/class_terminalInfo.inc:136 +msgid "not defined" +msgstr "non défini" + +#: plugins/personal/mail/generic.tpl:33 plugins/admin/groups/mail.tpl:36 +msgid "Quota size" +msgstr "Taille des Quota" + +#: plugins/personal/mail/generic.tpl:47 plugins/admin/groups/mail.tpl:46 +msgid "Alternate addresses" +msgstr "Adresses alternatives" + +#: plugins/personal/mail/generic.tpl:49 plugins/admin/groups/mail.tpl:47 +msgid "List of alternative mail addresses" +msgstr "Liste des adresses emails alternatives" + +#: plugins/personal/mail/generic.tpl:55 plugins/personal/mail/generic.tpl:121 +#: plugins/personal/mail/mail_locals.tpl:49 +#: plugins/personal/posix/trust_machines.tpl:45 +#: plugins/personal/posix/posix_groups.tpl:56 +#: plugins/personal/posix/generic.tpl:63 +#: plugins/personal/posix/generic.tpl:122 +#: plugins/personal/samba/samba3.tpl:284 +#: plugins/personal/samba/samba3_workstations.tpl:45 +#: plugins/personal/connectivity/kolab.tpl:17 +#: plugins/gofax/blocklists/generic.tpl:60 +#: plugins/gofax/faxaccount/generic.tpl:73 +#: plugins/gofax/faxaccount/locals.tpl:48 +#: plugins/gofax/faxaccount/lists.tpl:11 plugins/gofax/faxaccount/lists.tpl:15 +#: plugins/admin/groups/mail.tpl:52 plugins/admin/groups/mail.tpl:97 +#: plugins/admin/groups/class_groupMail.inc:404 +#: plugins/admin/groups/group_objects.tpl:45 +#: plugins/admin/groups/generic.tpl:87 plugins/admin/groups/mail_locals.tpl:49 +#: plugins/admin/systems/startup.tpl:59 plugins/admin/systems/startup.tpl:72 +#: plugins/admin/systems/startup.tpl:91 +#: plugins/admin/ogroups/ogroup_objects.tpl:56 +#: plugins/admin/ogroups/generic.tpl:38 +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:203 +#: plugins/gofon/phoneaccount/generic.tpl:45 +msgid "Add" +msgstr "Ajouter" + +#: plugins/personal/mail/generic.tpl:57 plugins/personal/mail/generic.tpl:125 +#: plugins/personal/posix/generic.tpl:64 +#: plugins/personal/posix/generic.tpl:124 +#: plugins/personal/samba/samba3.tpl:286 +#: plugins/personal/connectivity/kolab.tpl:19 +#: plugins/gofax/blocklists/generic.tpl:61 +#: plugins/gofax/blocklists/remove.tpl:15 +#: plugins/gofax/blocklists/headpage.tpl:17 +#: plugins/gofax/faxaccount/generic.tpl:75 +#: plugins/gofax/faxaccount/lists.tpl:12 +#: plugins/addons/addressbook/remove.tpl:15 plugins/admin/groups/mail.tpl:53 +#: plugins/admin/groups/mail.tpl:99 plugins/admin/groups/headpage.tpl:17 +#: plugins/admin/groups/remove.tpl:15 plugins/admin/groups/generic.tpl:89 +#: plugins/admin/users/remove.tpl:15 plugins/admin/users/headpage.tpl:18 +#: plugins/admin/applications/remove.tpl:14 +#: plugins/admin/applications/headpage.tpl:17 +#: plugins/admin/departments/remove.tpl:15 +#: plugins/admin/departments/headpage.tpl:17 +#: plugins/admin/systems/remove.tpl:15 plugins/admin/systems/headpage.tpl:17 +#: plugins/admin/systems/startup.tpl:60 plugins/admin/systems/startup.tpl:73 +#: plugins/admin/systems/startup.tpl:92 plugins/admin/ogroups/generic.tpl:39 +#: plugins/admin/ogroups/remove.tpl:15 plugins/admin/ogroups/headpage.tpl:17 +#: plugins/gofon/phoneaccount/generic.tpl:47 +msgid "Delete" +msgstr "Supprimer" + +#: plugins/personal/mail/generic.tpl:65 +msgid "Mail options" +msgstr "Options email" + +#: plugins/personal/mail/generic.tpl:70 +msgid "Select if you want to forward mails without getting own copies of them" +msgstr "" +"Sélectionnez ceci si vous souhaitez relayer les emails sans garder de copie " +"de ceux-ci" + +#: plugins/personal/mail/generic.tpl:70 +msgid "No delivery to own mailbox" +msgstr "Aucune distribution des emails dans la boite de l'utilisateur" + +#: plugins/personal/mail/generic.tpl:73 +msgid "Select to automatically response with the vacation message defined below" +msgstr "" +"Indiquez la réponse automatique en remplissant le message d'absence ci-" +"dessous" + +#: plugins/personal/mail/generic.tpl:73 +msgid "Activate vacation message" +msgstr "Activer la notification d'absence" + +#: plugins/personal/mail/generic.tpl:80 +msgid "Select if you want to filter this mails thru spamassassin" +msgstr "Sélectionnez si vous voulez que spamassassin filtre les mails" + +#: plugins/personal/mail/generic.tpl:80 +msgid "Move mails tagged with spam level greater than" +msgstr "Déplacer les emails ayant un niveau de spam supérieur à" + +#: plugins/personal/mail/generic.tpl:81 +msgid "Choose spam level - smaller values are more sensitive" +msgstr "" +"Sélectionnez le niveau de spam - une valeur basse implique une plus grande " +"sélectivité" + +#: plugins/personal/mail/generic.tpl:84 +msgid "to folder" +msgstr "vers le répertoire" + +#: plugins/personal/mail/generic.tpl:90 +msgid "Reject mails bigger than" +msgstr "Rejeter les mails plus gros que" + +#: plugins/personal/mail/generic.tpl:92 +#: plugins/personal/connectivity/pureftpd.tpl:40 +#: plugins/personal/connectivity/class_proxyAccount.inc:69 +msgid "MB" +msgstr "MB" + +#: plugins/personal/mail/generic.tpl:98 +msgid "Vacation message" +msgstr "Message d'absence" + +#: plugins/personal/mail/generic.tpl:113 +msgid "Forward messages to" +msgstr "Transférer les messages vers" + +#: plugins/personal/mail/generic.tpl:123 +#: plugins/gofax/faxaccount/generic.tpl:74 plugins/admin/groups/mail.tpl:98 +msgid "Add local" +msgstr "Ajouter en local" + +#: plugins/personal/mail/generic.tpl:133 +msgid "Advanced mail options" +msgstr "Options email avancées" + +#: plugins/personal/mail/generic.tpl:138 +msgid "Select if user can only send and receive inside his own domain" +msgstr "" +"Sélectionnez si vous voulez que les utilisateurs puissent envoyer et " +"recevoir des emails uniquement dans son propre domaine" + +#: plugins/personal/mail/generic.tpl:139 +msgid "User is only allowed to send and receive local mails" +msgstr "Les utilisateurs ne sont autorisés qu'à envoyer et recevoir des emails locaux" + +#: plugins/personal/mail/generic.tpl:146 +msgid "Use custom sieve script" +msgstr "Utiliser des scripts sieve personnalisés" + +#: plugins/personal/mail/generic.tpl:146 +msgid "disables all Mail options!" +msgstr "désactive toutes les options email!" + +#: plugins/personal/mail/main.inc:104 plugins/personal/posix/main.inc:110 +#: plugins/personal/samba/main.inc:104 +#: plugins/personal/generic/generic_certs.tpl:60 +#: plugins/personal/generic/main.inc:158 +#: plugins/personal/connectivity/main.inc:116 +#: plugins/gofax/blocklists/generic.tpl:74 +#: plugins/gofax/faxaccount/main.inc:89 +#: plugins/admin/groups/class_groupManagement.inc:257 +#: plugins/admin/users/class_userManagement.inc:500 +#: plugins/admin/applications/class_applicationManagement.inc:239 +#: plugins/admin/departments/class_departmentManagement.inc:228 +#: plugins/admin/systems/class_systemManagement.inc:438 +#: plugins/admin/ogroups/class_ogroupManagement.inc:274 +#: plugins/gofon/phoneaccount/main.inc:104 +msgid "Finish" +msgstr "Terminé" + +#: plugins/personal/mail/main.inc:106 plugins/personal/mail/mail_locals.tpl:51 +#: plugins/personal/posix/trust_machines.tpl:47 +#: plugins/personal/posix/posix_groups.tpl:58 +#: plugins/personal/posix/main.inc:112 plugins/personal/samba/main.inc:106 +#: plugins/personal/samba/samba3_workstations.tpl:47 +#: plugins/personal/generic/password.tpl:19 +#: plugins/personal/generic/generic_picture.tpl:31 +#: plugins/personal/generic/generic_certs.tpl:62 +#: plugins/personal/generic/main.inc:160 +#: plugins/personal/connectivity/main.inc:118 +#: plugins/gofax/blocklists/generic.tpl:76 +#: plugins/gofax/blocklists/remove.tpl:17 +#: plugins/gofax/faxaccount/locals.tpl:50 +#: plugins/gofax/faxaccount/lists.tpl:39 plugins/gofax/faxaccount/main.inc:91 +#: plugins/addons/addressbook/dial.tpl:11 +#: plugins/addons/addressbook/address_edit.tpl:108 +#: plugins/addons/addressbook/remove.tpl:17 +#: plugins/admin/groups/class_groupManagement.inc:259 +#: plugins/admin/groups/remove.tpl:17 +#: plugins/admin/groups/application_options.tpl:10 +#: plugins/admin/groups/group_objects.tpl:47 +#: plugins/admin/groups/mail_admins.tpl:39 +#: plugins/admin/groups/mail_locals.tpl:51 plugins/admin/users/password.tpl:23 +#: plugins/admin/users/template.tpl:48 +#: plugins/admin/users/class_userManagement.inc:502 +#: plugins/admin/users/remove.tpl:17 plugins/admin/applications/remove.tpl:16 +#: plugins/admin/applications/class_applicationManagement.inc:241 +#: plugins/admin/departments/remove.tpl:17 +#: plugins/admin/departments/class_departmentManagement.inc:230 +#: plugins/admin/systems/class_systemManagement.inc:440 +#: plugins/admin/systems/remove.tpl:17 plugins/admin/systems/password.tpl:27 +#: plugins/admin/systems/chooser.tpl:18 +#: plugins/admin/ogroups/ogroup_objects.tpl:58 +#: plugins/admin/ogroups/class_ogroupManagement.inc:276 +#: plugins/admin/ogroups/remove.tpl:17 plugins/gofon/phoneaccount/main.inc:106 +#: ihtml/themes/altlinux/islocked.tpl:15 ihtml/themes/classic/islocked.tpl:15 +#: ihtml/themes/default/islocked.tpl:15 +msgid "Cancel" +msgstr "Annuler" + +#: plugins/personal/mail/main.inc:114 plugins/personal/posix/main.inc:120 +#: plugins/personal/samba/main.inc:114 plugins/personal/generic/main.inc:177 +#: plugins/personal/connectivity/main.inc:126 +#: plugins/gofax/faxaccount/main.inc:96 +#: plugins/gofon/phoneaccount/main.inc:111 +msgid "Click the 'Edit' button below to change informations in this dialog" +msgstr "" +"Cliquez sur le bouton 'Edit' ci-dessous pour changer les informations dans " +"cette boite de dialogue" + +#: plugins/personal/mail/main.inc:115 plugins/personal/posix/main.inc:122 +#: plugins/personal/samba/main.inc:115 plugins/personal/generic/main.inc:170 +#: plugins/personal/connectivity/main.inc:127 +#: plugins/gofax/blocklists/headpage.tpl:16 +#: plugins/gofax/faxaccount/generic.tpl:88 +#: plugins/gofax/faxaccount/generic.tpl:94 +#: plugins/gofax/faxaccount/main.inc:97 plugins/addons/logview/contents.tpl:60 +#: plugins/admin/groups/headpage.tpl:16 plugins/admin/users/headpage.tpl:17 +#: plugins/admin/applications/headpage.tpl:16 +#: plugins/admin/departments/headpage.tpl:16 +#: plugins/admin/systems/headpage.tpl:16 plugins/admin/ogroups/headpage.tpl:16 +#: plugins/gofon/phoneaccount/main.inc:112 +msgid "Edit" +msgstr "Editer" + +#: plugins/personal/mail/main.inc:124 +msgid "User mail settings" +msgstr "Configuration du compte email de l'utilisateur" + +#: plugins/personal/mail/mail_locals.tpl:6 +#: plugins/admin/groups/mail_locals.tpl:6 +msgid "Select addresses to add" +msgstr "Sélectionner les adresses à ajouter" + +#: plugins/personal/mail/mail_locals.tpl:29 +#: plugins/admin/groups/mail_locals.tpl:29 +msgid "Display addresses of department" +msgstr "Afficher les adresses du département" + +#: plugins/personal/mail/mail_locals.tpl:30 +#: plugins/personal/posix/trust_machines.tpl:30 +#: plugins/personal/posix/posix_groups.tpl:37 +#: plugins/personal/samba/samba3_workstations.tpl:30 +#: plugins/gofax/blocklists/headpage.tpl:50 +#: plugins/gofax/faxaccount/locals.tpl:29 +#: plugins/addons/addressbook/contents.tpl:72 +#: plugins/admin/groups/headpage.tpl:57 +#: plugins/admin/groups/group_objects.tpl:30 +#: plugins/admin/groups/mail_locals.tpl:30 plugins/admin/users/headpage.tpl:61 +#: plugins/admin/applications/headpage.tpl:46 +#: plugins/admin/departments/headpage.tpl:46 +#: plugins/admin/systems/headpage.tpl:56 +#: plugins/admin/ogroups/ogroup_objects.tpl:41 +#: plugins/admin/ogroups/headpage.tpl:58 +msgid "Choose the department the search will be based on" +msgstr "Sélectionner le département où sera effectuée la recherche" + +#: plugins/personal/mail/mail_locals.tpl:35 +#: plugins/admin/groups/mail_locals.tpl:35 +msgid "Display addresses matching" +msgstr "Afficher les adresses correspondantes" + +#: plugins/personal/mail/mail_locals.tpl:36 +#: plugins/personal/posix/trust_machines.tpl:36 +#: plugins/personal/samba/samba3_workstations.tpl:36 +#: plugins/admin/groups/mail_locals.tpl:36 +msgid "Regular expression for matching addresses" +msgstr "Expression régulière pour sélectionner les adresses correspondantes" + +#: plugins/personal/mail/mail_locals.tpl:39 +#: plugins/admin/groups/mail_locals.tpl:39 +msgid "Display addresses of user" +msgstr "Afficher les adresses de l'utilisateur" + +#: plugins/personal/mail/mail_locals.tpl:40 +#: plugins/admin/groups/mail_locals.tpl:40 +msgid "User name of which addresses are shown" +msgstr "Utilisateur dont on montre les adresses" + +#: plugins/personal/password/class_password.inc:5 +#: plugins/admin/systems/servdb.tpl:22 plugins/admin/systems/servdb.tpl:38 +#: plugins/admin/systems/servdb.tpl:54 plugins/admin/systems/servdb.tpl:90 +#: plugins/admin/systems/servdb.tpl:113 ihtml/themes/altlinux/login.tpl:33 +#: ihtml/themes/altlinux/login.tpl:37 ihtml/themes/classic/login.tpl:32 +#: ihtml/themes/classic/login.tpl:36 ihtml/themes/default/login.tpl:33 +#: ihtml/themes/default/login.tpl:37 +msgid "Password" +msgstr "Mot de passe" + +#: plugins/personal/password/password.tpl:2 +#: plugins/personal/password/changed.tpl:2 +msgid "Change password" +msgstr "Modifier le mot de passe" + +#: plugins/personal/password/password.tpl:6 +msgid "" +"To change your personal password use the fields below. The changes take " +"effect immediately. Please memorize the new password, because you would't be " +"able to login without it." +msgstr "" +"Pour changer votre mot de passe, veuillez utiliser les champs ci-dessous. " +"Les changements prennent effet immédiatement. Veuillez le mémoriser car sans " +"lui vous ne serez pas capable de vous identifier." + +#: plugins/personal/password/password.tpl:10 +#: plugins/admin/users/password.tpl:6 +msgid "" +"Changing the password impinges on your authentification on mail, proxy, " +"samba and unix services." +msgstr "" +"Changer le mot de passe affecte votre identification sur le proxy, samba, la " +"messagerie et les services unix." + +#: plugins/personal/password/password.tpl:15 +msgid "Current password" +msgstr "Mot de passe actuel" + +#: plugins/personal/password/password.tpl:20 +#: plugins/personal/generic/password.tpl:7 plugins/admin/users/password.tpl:11 +#: plugins/admin/systems/password.tpl:11 +msgid "New password" +msgstr "Nouveau mot de passe" + +#: plugins/personal/password/password.tpl:25 +#: plugins/personal/generic/password.tpl:11 +#: plugins/admin/users/password.tpl:15 plugins/admin/systems/password.tpl:16 +msgid "Repeat new password" +msgstr "Confirmation du nouveau mot de passe" + +#: plugins/personal/password/password.tpl:34 +#: plugins/personal/generic/password.tpl:17 +#: plugins/admin/users/password.tpl:21 plugins/admin/users/headpage.tpl:19 +#: plugins/admin/systems/headpage.tpl:18 plugins/admin/systems/password.tpl:25 +msgid "Set password" +msgstr "Attribuer le mot de passe" + +#: plugins/personal/password/password.tpl:36 +msgid "Clear fields" +msgstr "Supprimer les données dans les champs" + +#: plugins/personal/password/changed.tpl:6 +msgid "" +"You've successfully changed your password. Remember to change all programms " +"configured to use it as well." +msgstr "" +"Votre mot de passe a été changé. N'oubliez pas de modifier les programmes " +"qui l'utilisent." + +#: plugins/personal/password/changed.tpl:12 +#: plugins/personal/generic/main.inc:167 plugins/gofax/reports/detail.tpl:68 +#: plugins/addons/ldapmanager/contentimport.tpl:58 +#: plugins/addons/ldapmanager/contentcsv.tpl:127 +#: plugins/addons/ldapmanager/contentexport.tpl:70 include/functions.inc:1344 +msgid "Back" +msgstr "Retour" + +#: plugins/personal/password/main.inc:40 +msgid "" +"The password you've entered as your current password doesn't match the real " +"one." +msgstr "" +"Le mot de passe entré comme mot de passe actuel ne correspond pas à votre " +"mot de passe." + +#: plugins/personal/password/main.inc:43 +msgid "You need to specify your current password in order to proceed." +msgstr "Vous devez spécifier votre mode de passe actuel pour continuer." + +#: plugins/personal/password/main.inc:48 plugins/personal/generic/main.inc:84 +#: plugins/admin/users/class_userManagement.inc:174 +msgid "" +"The passwords you've entered as 'New password' and 'Repeated new password' " +"do not match." +msgstr "" +"Le mot de passe entrée dans le champ 'New password' et celui dans le champ " +"'Repeated new password' ne concordent pas." + +#: plugins/personal/password/main.inc:51 plugins/personal/generic/main.inc:89 +#: plugins/admin/users/class_userManagement.inc:179 +msgid "The password you've entered as 'New password' is empty." +msgstr "Le mot de passe que vous avez entré comme 'New password' est vide." + +#: plugins/personal/password/main.inc:59 +msgid "The password used as new and current are too similar." +msgstr "Le nouveau et l'ancien mot de passe sont trop similaires." + +#: plugins/personal/password/main.inc:64 +msgid "The password used as new is to short." +msgstr "Le nouveau mot de passe ne comporte pas suffisamment de caractères." + +#: plugins/personal/password/main.inc:71 +msgid "You have no permissions to change your password." +msgstr "Vous n'avez pas l'autorisation pour changer votre mot de passe." + +#: plugins/personal/password/main.inc:89 +msgid "External password changer reported a problem: " +msgstr "Le programme externe pour changer votre mot de passe à renvoyé une erreur: " + +#: plugins/personal/posix/trust_machines.tpl:6 +msgid "Select systems to add" +msgstr "Sélectionner les hôtes à ajouter" + +#: plugins/personal/posix/trust_machines.tpl:29 +#: plugins/admin/systems/headpage.tpl:55 +msgid "Display systems of department" +msgstr "Afficher les systèmes du département" + +#: plugins/personal/posix/trust_machines.tpl:35 +#: plugins/admin/systems/headpage.tpl:61 +msgid "Display systems matching" +msgstr "Afficher les systèmes correspondant" + +#: plugins/personal/posix/posix_groups.tpl:6 +msgid "Select groups to add" +msgstr "Sélectionner les groupes à ajouter" + +#: plugins/personal/posix/posix_groups.tpl:20 +#: plugins/gofax/blocklists/headpage.tpl:36 +#: plugins/gofax/faxaccount/locals.tpl:19 +#: plugins/addons/addressbook/contents.tpl:58 +#: plugins/admin/groups/headpage.tpl:37 +#: plugins/admin/groups/group_objects.tpl:20 +#: plugins/admin/users/headpage.tpl:38 +#: plugins/admin/applications/headpage.tpl:36 +#: plugins/admin/departments/headpage.tpl:36 +#: plugins/admin/systems/headpage.tpl:37 +#: plugins/admin/ogroups/ogroup_objects.tpl:20 +#: plugins/admin/ogroups/headpage.tpl:37 +msgid "Filters" +msgstr "Filtres" + +#: plugins/personal/posix/posix_groups.tpl:29 +#: plugins/admin/groups/headpage.tpl:46 +msgid "Select to see groups that are primary groups of users" +msgstr "" +"Sélectionnez afin d'afficher les groupes qui sont les groupes principaux " +"d'utilisateurs" + +#: plugins/personal/posix/posix_groups.tpl:29 +#: plugins/admin/groups/headpage.tpl:46 +msgid "Show primary groups" +msgstr "Afficher les groupes de base" + +#: plugins/personal/posix/posix_groups.tpl:30 +#: plugins/admin/groups/headpage.tpl:47 +msgid "Select to see groups that have samba groups mappings" +msgstr "Sélectionnez afin d'afficher les groupes Samba" + +#: plugins/personal/posix/posix_groups.tpl:30 +#: plugins/admin/groups/headpage.tpl:47 +msgid "Show samba groups" +msgstr "Afficher les groupes Samba" + +#: plugins/personal/posix/posix_groups.tpl:31 +#: plugins/admin/groups/headpage.tpl:48 +msgid "Select to see groups that have applications configured" +msgstr "Sélectionnez afin d'afficher les groupes ayant des applications configurées" + +#: plugins/personal/posix/posix_groups.tpl:31 +#: plugins/admin/groups/headpage.tpl:48 +msgid "Show application groups" +msgstr "Afficher les groupes applications" + +#: plugins/personal/posix/posix_groups.tpl:32 +#: plugins/admin/groups/headpage.tpl:49 +msgid "Select to see groups that have mail settings" +msgstr "Sélectionnez afin d'afficher les groupes ayant la messagerie activée" + +#: plugins/personal/posix/posix_groups.tpl:32 +#: plugins/admin/groups/headpage.tpl:49 +msgid "Show mail groups" +msgstr "Afficher les groupes ayant la messagerie activé" + +#: plugins/personal/posix/posix_groups.tpl:33 +#: plugins/admin/groups/headpage.tpl:50 +msgid "Select to see normal groups that have only functional aspects" +msgstr "" +"Sélectionnez afin d'afficher les groupes normaux ayant uniquement un aspect " +"fonctionnel" + +#: plugins/personal/posix/posix_groups.tpl:33 +#: plugins/admin/groups/headpage.tpl:50 +msgid "Show functional groups" +msgstr "Afficher les groupes fonctionnels" + +#: plugins/personal/posix/posix_groups.tpl:36 +#: plugins/admin/groups/headpage.tpl:56 plugins/admin/ogroups/headpage.tpl:57 +msgid "Display groups of department" +msgstr "Afficher les groupes du département" + +#: plugins/personal/posix/posix_groups.tpl:42 +#: plugins/admin/groups/headpage.tpl:62 plugins/admin/ogroups/headpage.tpl:63 +msgid "Display groups matching" +msgstr "Afficher les groupes correspondant" + +#: plugins/personal/posix/posix_groups.tpl:43 +#: plugins/admin/groups/headpage.tpl:63 plugins/admin/ogroups/headpage.tpl:64 +msgid "Regular expression for matching group names" +msgstr "Expression régulière correspondant à des noms de groupe" + +#: plugins/personal/posix/posix_groups.tpl:46 +#: plugins/admin/groups/headpage.tpl:66 +msgid "Display groups of user" +msgstr "Afficher les groupes contenant des utilisateurs" + +#: plugins/personal/posix/posix_groups.tpl:47 +#: plugins/admin/groups/headpage.tpl:67 +msgid "User name of which groups are shown" +msgstr "Utilisateur dont on montre les groupes" + +#: plugins/personal/posix/posix_shadow.tpl:5 +msgid "User must change password on first login" +msgstr "L'utilisateur doit changer son mot de passe lors de sa première connexion" + +#: plugins/personal/posix/posix_shadow.tpl:19 +#: plugins/personal/samba/samba2.tpl:68 plugins/personal/samba/samba3.tpl:225 +msgid "Password expires on" +msgstr "Le mot de passe expirera le" + +#: plugins/personal/posix/generic.tpl:7 plugins/personal/samba/samba3.tpl:13 +#: plugins/personal/samba/samba3.tpl:65 +#: plugins/personal/samba/class_sambaAccount.inc:485 +msgid "Home directory" +msgstr "Répertoire Home" + +#: plugins/personal/posix/generic.tpl:13 +msgid "Shell" +msgstr "Shell" + +#: plugins/personal/posix/generic.tpl:21 +msgid "Primary group" +msgstr "Groupe principal" + +#: plugins/personal/posix/generic.tpl:29 plugins/gofax/reports/detail.tpl:46 +#: plugins/gofax/reports/contents.tpl:32 plugins/gofon/reports/contents.tpl:35 +msgid "Status" +msgstr "Statut" + +#: plugins/personal/posix/generic.tpl:38 +msgid "Force UID/GID" +msgstr "Forcer l'UID/GID" + +#: plugins/personal/posix/generic.tpl:40 +msgid "UID" +msgstr "UID" + +#: plugins/personal/posix/generic.tpl:45 +msgid "GID" +msgstr "GID" + +#: plugins/personal/posix/generic.tpl:54 +msgid "Group membership" +msgstr "Appartient aux groupes" + +#: plugins/personal/posix/generic.tpl:56 +msgid "(Warning: more than 16 groups are not supported by NFS!)" +msgstr "(Attention: NFS ne supporte pas plus de 16 groupes!)" + +#: plugins/personal/posix/generic.tpl:74 +msgid "Account" +msgstr "Compte" + +#: plugins/personal/posix/generic.tpl:89 +msgid "Environment" +msgstr "Environnement" + +#: plugins/personal/posix/generic.tpl:92 +msgid "Default printer" +msgstr "Imprimante par défaut" + +#: plugins/personal/posix/generic.tpl:100 +msgid "Default language" +msgstr "Langue par défaut" + +#: plugins/personal/posix/generic.tpl:113 +msgid "System trust" +msgstr "Système de Confiance" + +#: plugins/personal/posix/main.inc:131 +msgid "Unix settings" +msgstr "Paramètres unix" + +#: plugins/personal/posix/class_posixAccount.inc:16 +#: plugins/generic/references/class_reference.inc:22 +msgid "UNIX" +msgstr "UNIX" + +#: plugins/personal/posix/class_posixAccount.inc:132 +#: plugins/personal/posix/class_posixAccount.inc:900 +#: plugins/admin/groups/class_groupManagement.inc:377 +msgid "Group of user" +msgstr "Groupe d'utilisateurs" + +#: plugins/personal/posix/class_posixAccount.inc:172 +msgid "unconfigured" +msgstr "non configuré" + +#: plugins/personal/posix/class_posixAccount.inc:190 +#: plugins/admin/systems/class_terminalService.inc:121 +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:99 +msgid "automatic" +msgstr "automatique" + +#: plugins/personal/posix/class_posixAccount.inc:218 +msgid "This account has no unix extensions." +msgstr "Ce compte n'a pas d'extension unix." + +#: plugins/personal/posix/class_posixAccount.inc:238 +#: plugins/personal/posix/class_posixAccount.inc:241 +msgid "Remove posix account" +msgstr "Supprimer le compte posix" + +#: plugins/personal/posix/class_posixAccount.inc:239 +msgid "" +"This account has unix features enabled. To disable them, you'll need to " +"remove the samba account first." +msgstr "" +"Ce compte possède l'extension unix. Pour le désactiver vous devez au " +"préalable supprimer le compte samba." + +#: plugins/personal/posix/class_posixAccount.inc:242 +msgid "" +"This account has posix features enabled. You can disable them by clicking " +"below." +msgstr "" +"Ce compte possède l'extension posix. Vous pouvez le supprimer en cliquant " +"sur le bouton ci-dessous." + +#: plugins/personal/posix/class_posixAccount.inc:245 +msgid "Create posix account" +msgstr "Créer un compte posix" + +#: plugins/personal/posix/class_posixAccount.inc:246 +msgid "" +"This account has posix features disabled. You can enable them by clicking " +"below." +msgstr "" +"Aucune extension posix n'existe pour ce compte. Vous pouvez en créer une en " +"cliquant sur le bouton ci-dessous." + +#: plugins/personal/posix/class_posixAccount.inc:429 +#, php-format +msgid "Password can't be changed up to %s days after last change" +msgstr "" +"Les mots de passe ne peuvent être changé qu'après %s jours à compter de la " +"dernière modification de celui-ci" + +#: plugins/personal/posix/class_posixAccount.inc:431 +#, php-format +msgid "Password must be changed after %s days" +msgstr "Le mot de passe doit être changé tous les %s jours" + +#: plugins/personal/posix/class_posixAccount.inc:433 +#, php-format +msgid "Disable account after %s days of inactivity after password expiery" +msgstr "" +"Désactiver le compte après %s jours d'inactivité après l'expiration du mot " +"de passe" + +#: plugins/personal/posix/class_posixAccount.inc:435 +#, php-format +msgid "Warn user %s days before password expiery" +msgstr "Avertir l'utilisateur %s jours avant l'expiration de son mot de passe" + +#: plugins/personal/posix/class_posixAccount.inc:457 +#: plugins/personal/samba/class_sambaAccount.inc:303 +#: plugins/personal/generic/class_user.inc:210 +#: plugins/gofax/reports/class_faxreport.inc:272 +#: plugins/gofon/reports/class_fonreport.inc:205 +msgid "January" +msgstr "Janvier" + +#: plugins/personal/posix/class_posixAccount.inc:457 +#: plugins/personal/samba/class_sambaAccount.inc:303 +#: plugins/personal/generic/class_user.inc:210 +#: plugins/gofax/reports/class_faxreport.inc:272 +#: plugins/gofon/reports/class_fonreport.inc:205 +msgid "February" +msgstr "Février" + +#: plugins/personal/posix/class_posixAccount.inc:457 +#: plugins/personal/samba/class_sambaAccount.inc:303 +#: plugins/personal/generic/class_user.inc:210 +#: plugins/gofax/reports/class_faxreport.inc:272 +#: plugins/gofon/reports/class_fonreport.inc:205 +msgid "March" +msgstr "Mars" + +#: plugins/personal/posix/class_posixAccount.inc:457 +#: plugins/personal/samba/class_sambaAccount.inc:303 +#: plugins/personal/generic/class_user.inc:210 +#: plugins/gofax/reports/class_faxreport.inc:272 +#: plugins/gofon/reports/class_fonreport.inc:205 +msgid "April" +msgstr "Avril" + +#: plugins/personal/posix/class_posixAccount.inc:458 +#: plugins/personal/samba/class_sambaAccount.inc:304 +#: plugins/personal/generic/class_user.inc:211 +#: plugins/gofax/reports/class_faxreport.inc:273 +#: plugins/gofon/reports/class_fonreport.inc:206 +msgid "May" +msgstr "Mai" + +#: plugins/personal/posix/class_posixAccount.inc:458 +#: plugins/personal/samba/class_sambaAccount.inc:304 +#: plugins/personal/generic/class_user.inc:211 +#: plugins/gofax/reports/class_faxreport.inc:273 +#: plugins/gofon/reports/class_fonreport.inc:206 +msgid "June" +msgstr "Juin" + +#: plugins/personal/posix/class_posixAccount.inc:458 +#: plugins/personal/samba/class_sambaAccount.inc:304 +#: plugins/personal/generic/class_user.inc:211 +#: plugins/gofax/reports/class_faxreport.inc:273 +#: plugins/gofon/reports/class_fonreport.inc:206 +msgid "July" +msgstr "Juillet" + +#: plugins/personal/posix/class_posixAccount.inc:458 +#: plugins/personal/samba/class_sambaAccount.inc:304 +#: plugins/personal/generic/class_user.inc:211 +#: plugins/gofax/reports/class_faxreport.inc:273 +#: plugins/gofon/reports/class_fonreport.inc:206 +msgid "August" +msgstr "Aôut" + +#: plugins/personal/posix/class_posixAccount.inc:458 +#: plugins/personal/samba/class_sambaAccount.inc:304 +#: plugins/personal/generic/class_user.inc:211 +#: plugins/gofax/reports/class_faxreport.inc:274 +#: plugins/gofon/reports/class_fonreport.inc:207 +msgid "September" +msgstr "Septembre" + +#: plugins/personal/posix/class_posixAccount.inc:459 +#: plugins/personal/samba/class_sambaAccount.inc:305 +#: plugins/personal/generic/class_user.inc:212 +#: plugins/gofax/reports/class_faxreport.inc:274 +#: plugins/gofon/reports/class_fonreport.inc:207 +msgid "October" +msgstr "Octobre" + +#: plugins/personal/posix/class_posixAccount.inc:459 +#: plugins/personal/samba/class_sambaAccount.inc:305 +#: plugins/personal/generic/class_user.inc:212 +#: plugins/gofax/reports/class_faxreport.inc:274 +#: plugins/gofon/reports/class_fonreport.inc:207 +msgid "November" +msgstr "Novembre" + +#: plugins/personal/posix/class_posixAccount.inc:459 +#: plugins/personal/samba/class_sambaAccount.inc:305 +#: plugins/personal/generic/class_user.inc:212 +#: plugins/gofax/reports/class_faxreport.inc:274 +#: plugins/gofon/reports/class_fonreport.inc:207 +msgid "December" +msgstr "Décembre" + +#: plugins/personal/posix/class_posixAccount.inc:509 +#: plugins/personal/samba/class_sambaAccount.inc:344 +#: plugins/admin/systems/class_terminalGeneric.inc:61 +#: plugins/admin/systems/class_workstationGeneric.inc:70 +msgid "disabled" +msgstr "désactivé" + +#: plugins/personal/posix/class_posixAccount.inc:509 +msgid "full access" +msgstr "accès complet" + +#: plugins/personal/posix/class_posixAccount.inc:510 +msgid "allow access to these hosts" +msgstr "permettre l'accès a ces hôtes" + +#: plugins/personal/posix/class_posixAccount.inc:667 +msgid "Failed: overriding lock" +msgstr "Échoué: réécriture du verrou" + +#: plugins/personal/posix/class_posixAccount.inc:815 +msgid "The required field 'Home directory' is not set." +msgstr "Le champ obligatoire 'Home directory' n'est pas renseigné." + +#: plugins/personal/posix/class_posixAccount.inc:818 +msgid "Please enter a valid path in 'Home directory' field." +msgstr "Veuillez indiquer un chemin d'accès valide dans le champ 'Home directory'." + +#: plugins/personal/posix/class_posixAccount.inc:826 +msgid "Value specified as 'UID' is not valid." +msgstr "La valeur de l''UID' spécifiée n'est pas valide." + +#: plugins/personal/posix/class_posixAccount.inc:829 +msgid "Value specified as 'UID' is too small." +msgstr "La valeur de l''UID' spécifiée est trop petite." + +#: plugins/personal/posix/class_posixAccount.inc:833 +#: plugins/admin/groups/class_groupGeneric.inc:594 +msgid "Value specified as 'GID' is not valid." +msgstr "La valeur du 'GID' n'est pas valide." + +#: plugins/personal/posix/class_posixAccount.inc:836 +#: plugins/admin/groups/class_groupGeneric.inc:597 +msgid "Value specified as 'GID' is too small." +msgstr "La valeur spécifiée comme 'GID' est trop petite." + +#: plugins/personal/posix/class_posixAccount.inc:845 +msgid "Value specified as 'shadowMin' is not valid." +msgstr "La valeur de 'shadowMin' spécifiée n'est pas valide." + +#: plugins/personal/posix/class_posixAccount.inc:850 +msgid "Value specified as 'shadowMax' is not valid." +msgstr "La valeur de 'shadowMax' spécifiée n'est pas valide." + +#: plugins/personal/posix/class_posixAccount.inc:855 +msgid "Value specified as 'shadowWarning' is not valid." +msgstr "La valeur de 'shadowWarning' spécifiée n'est pas valide." + +#: plugins/personal/posix/class_posixAccount.inc:858 +msgid "'shadowWarning' without 'shadowMax' makes no sense." +msgstr "'shadowWarning' sans 'shadowMax' n'a pas de sens." + +#: plugins/personal/posix/class_posixAccount.inc:861 +msgid "Value specified as 'shadowWarning' should be smaller than 'shadowMax'." +msgstr "La valeur de 'shadowWarning' doit être inférieure à celle de 'shadowMax'." + +#: plugins/personal/posix/class_posixAccount.inc:864 +msgid "Value specified as 'shadowWarning' should be greater than 'shadowMin'." +msgstr "La valeur de 'shadowWarning' doit être supérieure à celle de 'shadowMin'." + +#: plugins/personal/posix/class_posixAccount.inc:869 +msgid "Value specified as 'shadowInactive' is not valid." +msgstr "La valeur de 'shadowInactive' spécifiée n'est pas valide." + +#: plugins/personal/posix/class_posixAccount.inc:872 +msgid "'shadowInactive' without 'shadowMax' makes no sense." +msgstr "'shadowInactive' sans 'shadowMax' n'a pas de sens." + +#: plugins/personal/posix/class_posixAccount.inc:877 +msgid "Value specified as 'shadowMin' should be smaller than 'shadowMax'." +msgstr "La valeur pour 'shadowMin' doit être inférieure à celle de 'shadowMax'." + +#: plugins/personal/posix/class_posixAccount.inc:979 +#: plugins/admin/groups/class_groupGeneric.inc:628 +msgid "Too many users, can't allocate a free ID!" +msgstr "Trop d'utilisateurs, impossible d'assigner un ID libre!" + +#: plugins/personal/samba/samba2.tpl:13 +msgid "Samba home" +msgstr "Répertoire de l'utilisateur samba" + +#: plugins/personal/samba/samba2.tpl:30 plugins/personal/samba/samba3.tpl:38 +msgid "Script path" +msgstr "Chemin du Script" + +#: plugins/personal/samba/samba2.tpl:36 plugins/personal/samba/samba3.tpl:44 +#: plugins/personal/samba/samba3.tpl:75 +#: plugins/personal/samba/class_sambaAccount.inc:486 +msgid "Profile path" +msgstr "Chemin du Profile" + +#: plugins/personal/samba/samba2.tpl:48 plugins/personal/samba/samba3.tpl:210 +msgid "Access options" +msgstr "Options d'accès" + +#: plugins/personal/samba/samba2.tpl:54 plugins/personal/samba/samba3.tpl:216 +msgid "Allow user to change password from client" +msgstr "" +"Autoriser les utilisateurs à changer de mot de passe à partir d'une station " +"cliente" + +#: plugins/personal/samba/samba2.tpl:57 plugins/personal/samba/samba3.tpl:219 +msgid "Login from windows client requires no password" +msgstr "L'identification sur une station windows ne nécessite pas de mot de passe" + +#: plugins/personal/samba/samba2.tpl:60 plugins/personal/samba/samba3.tpl:222 +msgid "Temporary disable samba account" +msgstr "Désactiver temporairement le compte Samba" + +#: plugins/personal/samba/samba3.tpl:23 +msgid "Domain" +msgstr "Domaine" + +#: plugins/personal/samba/samba3.tpl:56 +msgid "Terminal Server" +msgstr "Serveur de terminaux" + +#: plugins/personal/samba/samba3.tpl:62 +msgid "Allow login on terminal server" +msgstr "Permet la connexion sur un serveur de terminaux" + +#: plugins/personal/samba/samba3.tpl:87 +msgid "Inherit client config" +msgstr "Hérite de la configuration du client" + +#: plugins/personal/samba/samba3.tpl:90 +msgid "Initial program" +msgstr "Programme initial" + +#: plugins/personal/samba/samba3.tpl:96 +msgid "Working directory" +msgstr "Répertoire Home" + +#: plugins/personal/samba/samba3.tpl:111 +msgid "Timeout settings (in minutes)" +msgstr "Configuration du temps d'attente (en minutes)" + +#: plugins/personal/samba/samba3.tpl:116 +#: plugins/personal/samba/class_sambaAccount.inc:493 +msgid "Connection" +msgstr "Connexion" + +#: plugins/personal/samba/samba3.tpl:125 +#: plugins/personal/samba/class_sambaAccount.inc:494 +msgid "Disconnection" +msgstr "Déconnexion" + +#: plugins/personal/samba/samba3.tpl:134 +#: plugins/personal/samba/class_sambaAccount.inc:495 +msgid "IDLE" +msgstr "En attente" + +#: plugins/personal/samba/samba3.tpl:147 +msgid "Client devices" +msgstr "Périphériques clients" + +#: plugins/personal/samba/samba3.tpl:152 +msgid "Connect client drives at logon" +msgstr "Connecter les lecteurs clients à l'identification" + +#: plugins/personal/samba/samba3.tpl:158 +msgid "Connect client printers at logon" +msgstr "Connecter les imprimantes clients à l'identification" + +#: plugins/personal/samba/samba3.tpl:164 +msgid "Default to main client printer" +msgstr "Imprimante par défaut" + +#: plugins/personal/samba/samba3.tpl:174 +#: plugins/personal/connectivity/pureftpd.tpl:64 +msgid "Miscellaneous" +msgstr "Divers" + +#: plugins/personal/samba/samba3.tpl:178 +msgid "Shadowing" +msgstr "Masquer" + +#: plugins/personal/samba/samba3.tpl:187 +msgid "On broken or timed out" +msgstr "Sur interrompu ou temps d'attente dépassé" + +#: plugins/personal/samba/samba3.tpl:195 +msgid "Reconnect if disconnected" +msgstr "Reconnexion si déconnecté" + +#: plugins/personal/samba/samba3.tpl:237 +msgid "Limit Logon Time" +msgstr "" + +#: plugins/personal/samba/samba3.tpl:249 +msgid "Limit Logoff Time" +msgstr "" + +#: plugins/personal/samba/samba3.tpl:261 +msgid "Account expires after" +msgstr "Le compte expire après" + +#: plugins/personal/samba/samba3.tpl:278 +msgid "Allow connection from these workstations only" +msgstr "Permet la connections depuis ces stations seulement" + +#: plugins/personal/samba/main.inc:123 +msgid "Samba settings" +msgstr "Configuration Samba" + +#: plugins/personal/samba/samba3_workstations.tpl:6 +msgid "Select workstations to add" +msgstr "Sélectionner les stations à ajouter" + +#: plugins/personal/samba/samba3_workstations.tpl:29 +msgid "Display workstations of department" +msgstr "Afficher les stations d'un département" + +#: plugins/personal/samba/samba3_workstations.tpl:35 +msgid "Display workstations matching" +msgstr "Afficher les stations correspondantes" + +#: plugins/personal/samba/class_sambaAccount.inc:170 +msgid "This account has no samba extensions." +msgstr "Aucune extension samba pour cet utilisateur." + +#: plugins/personal/samba/class_sambaAccount.inc:179 +msgid "Remove samba account" +msgstr "Supprimer le compte Samba" + +#: plugins/personal/samba/class_sambaAccount.inc:180 +msgid "" +"This account has samba features enabled. You can disable them by clicking " +"below." +msgstr "" +"Une extension samba existe pour cet utilisateur. Vous pouvez la supprimer en " +"cliquant sur le bouton ci-dessous." + +#: plugins/personal/samba/class_sambaAccount.inc:190 +#: plugins/personal/samba/class_sambaAccount.inc:193 +msgid "Create samba account" +msgstr "Créer un compte Samba" + +#: plugins/personal/samba/class_sambaAccount.inc:191 +msgid "" +"This account has samba features disabled. You can enable them by clicking " +"below." +msgstr "" +"Aucune extension samba n'existe pour cet utilisateur. Vous pouvez en créer " +"un en cliquant sur le bouton ci-dessous." + +#: plugins/personal/samba/class_sambaAccount.inc:194 +msgid "" +"This account has samba features disabled. Posix features are needed for " +"samba accounts, enable them first." +msgstr "" +"La création d'un compte samba nécessite, au préalable, que l'utilisateur " +"possède un compte Posix." + +#: plugins/personal/samba/class_sambaAccount.inc:345 +msgid "input on, notify on" +msgstr "entrée activée, notification activée" + +#: plugins/personal/samba/class_sambaAccount.inc:346 +msgid "input on, notify off" +msgstr "entrée activée, notification desactivée" + +#: plugins/personal/samba/class_sambaAccount.inc:347 +msgid "input off, notify on" +msgstr "entrée désactivée, notification activée" + +#: plugins/personal/samba/class_sambaAccount.inc:348 +msgid "input off, nofify off" +msgstr "entrée désactivée, notification désactivée" + +#: plugins/personal/samba/class_sambaAccount.inc:350 +msgid "disconnect" +msgstr "déconnecté" + +#: plugins/personal/samba/class_sambaAccount.inc:351 +msgid "reset" +msgstr "remise à zéro" + +#: plugins/personal/samba/class_sambaAccount.inc:353 +msgid "from any client" +msgstr "de n'importe quel client" + +#: plugins/personal/samba/class_sambaAccount.inc:354 +msgid "from previous client only" +msgstr "du client précédent seulement" + +#: plugins/personal/samba/class_sambaAccount.inc:488 +#, php-format +msgid "The value specified as '%s' contains invalid characters!" +msgstr "La valeur spécifiée comme '%s' contient des caractères invalides!" + +#: plugins/personal/samba/class_sambaAccount.inc:498 +#, php-format +msgid "The timeout property '%s' is checked and contains invalid or no characters!" +msgstr "" +"La propriété temps d'attente '%s' est activée et contient des caractères " +"invalides ou ne contient rien!" + +#: plugins/personal/samba/class_sambaAccount.inc:504 +msgid "" +"The windows user manager only allows eight clients. You've specified more " +"than eight." +msgstr "" +"Le gestionnaire d'utilisateur windows accepte seulement huit clients. Vous " +"en avez spécifiés plus de huit." + +#: plugins/personal/samba/class_sambaAccount.inc:657 +msgid "" +"Warning: This account has an undefined samba SID assigned. The problem can " +"not be fixed by GOsa!" +msgstr "" +"Attention: Ce compte possède un samba SID non assigné: Le problème ne peut " +"pas être fixé par GOsa!" + +#: plugins/personal/samba/class_sambaAccount.inc:682 +msgid "" +"Warning: Can't identify users primary group - no conversion to a samba group " +"possible!" +msgstr "" +"Erreur: Impossible d'identifier le groupe principal de l'utilisateur - la " +"transformation vers un groupe samba est impossible!" + +#: plugins/personal/generic/class_user.inc:221 +msgid "female" +msgstr "féminin" + +#: plugins/personal/generic/class_user.inc:221 +msgid "male" +msgstr "masculin" + +#: plugins/personal/generic/class_user.inc:231 +msgid "This account has no valid GOsa extensions." +msgstr "Ce compte n'a pas d'extensions GOsa valides." + +#: plugins/personal/generic/class_user.inc:260 +msgid "The specified file has not been uploaded via HTTP POST! Aborted." +msgstr "Ce fichier n'a pas été téléchargé via la méthode HTTP POST! Abandon." + +#: plugins/personal/generic/class_user.inc:354 +msgid "Please enter a valid serial number" +msgstr "Veuillez entrer un numéro de série valide" + +#: plugins/personal/generic/class_user.inc:358 +#: plugins/personal/generic/class_user.inc:383 +#: plugins/admin/systems/class_terminalInfo.inc:52 +#: plugins/admin/systems/class_terminalInfo.inc:167 +msgid "present" +msgstr "présent" + +#: plugins/personal/generic/class_user.inc:360 +#: plugins/personal/generic/class_user.inc:385 +msgid "absent" +msgstr "absent" + +#: plugins/personal/generic/class_user.inc:782 +msgid "Kerberos database communication failed" +msgstr "La communication vers la base de données kerberos a échoué" + +#: plugins/personal/generic/class_user.inc:799 +msgid "Can't remove user from kerberos database." +msgstr "Impossible de supprimer l'utilisateur de la base de données kerberos." + +#: plugins/personal/generic/class_user.inc:810 +msgid "Can't add user to kerberos database." +msgstr "Impossible d'ajouter un utilisateur à la base de données kerberos." + +#: plugins/personal/generic/class_user.inc:850 +msgid "You have no permissions to create a user on this 'Base'." +msgstr "Vous n'avez pas l'autorisation pour créer un utilisateur sur cette 'Base'." + +#: plugins/personal/generic/class_user.inc:855 +#: plugins/addons/addressbook/class_addressbook.inc:486 +#: plugins/admin/users/class_userManagement.inc:419 +msgid "The required field 'Name' is not set." +msgstr "Le champ obligatoire 'Name' n'est pas rempli." + +#: plugins/personal/generic/class_user.inc:864 +msgid "There's already a person with this 'Login' in the database." +msgstr "Une personne ayant ce 'Login' existe déjà dans l'annuaire." + +#: plugins/personal/generic/class_user.inc:870 +#: plugins/addons/addressbook/class_addressbook.inc:490 +#: plugins/admin/users/class_userManagement.inc:422 +msgid "The required field 'Given name' is not set." +msgstr "Le champ obligatoire 'Given name' n'est pas rempli." + +#: plugins/personal/generic/class_user.inc:873 +msgid "The required field 'Login' is not set." +msgstr "Le champ obligatoire 'Login' n'est pas renseigné." + +#: plugins/personal/generic/class_user.inc:880 +msgid "" +"There's already a person with this 'Name'/'Given name' combination in the " +"database." +msgstr "Une personne ayant ce 'Name'/'Given name' existe déjà dans l'annuaire." + +#: plugins/personal/generic/class_user.inc:887 +msgid "" +"The field 'Login' contains invalid characters. Lowercase, numbers and dashes " +"are allowed." +msgstr "" +"Le champ 'Login' contient des caractères invalides. Les minuscules, chiffres " +"et tirets sont autorisés." + +#: plugins/personal/generic/class_user.inc:890 +msgid "The field 'Homepage' contains an invalid URL definition." +msgstr "Le champ 'Homepage' contient une URL invalide." + +#: plugins/personal/generic/class_user.inc:893 +#: plugins/personal/generic/class_user.inc:921 +#: plugins/addons/addressbook/class_addressbook.inc:496 +#: plugins/addons/addressbook/class_addressbook.inc:524 +#: plugins/admin/departments/class_departmentGeneric.inc:153 +msgid "The field 'Name' contains invalid characters." +msgstr "Le champ 'Name' contient des caractères invalides." + +#: plugins/personal/generic/class_user.inc:896 +#: plugins/personal/generic/class_user.inc:918 +#: plugins/addons/addressbook/class_addressbook.inc:499 +#: plugins/addons/addressbook/class_addressbook.inc:521 +msgid "The field 'Given name' contains invalid characters." +msgstr "Le champ 'Given name' contient des caractères invalides." + +#: plugins/personal/generic/class_user.inc:901 +#: plugins/personal/generic/class_user.inc:904 +#: plugins/addons/addressbook/class_addressbook.inc:504 +#: plugins/addons/addressbook/class_addressbook.inc:507 +#: plugins/admin/departments/class_departmentGeneric.inc:156 +msgid "The field 'Phone' contains an invalid phone number." +msgstr "Le champ 'Phone' contient un numéro invalide." + +#: plugins/personal/generic/class_user.inc:907 +#: plugins/addons/addressbook/class_addressbook.inc:510 +#: plugins/admin/departments/class_departmentGeneric.inc:159 +msgid "The field 'Fax' contains an invalid phone number." +msgstr "Le champ 'Fax' contient un numéro invalide." + +#: plugins/personal/generic/class_user.inc:910 +#: plugins/addons/addressbook/class_addressbook.inc:513 +msgid "The field 'Mobile' contains an invalid phone number." +msgstr "Le champ 'Mobile' contient un numéro invalide." + +#: plugins/personal/generic/class_user.inc:913 +#: plugins/addons/addressbook/class_addressbook.inc:516 +msgid "The field 'Pager' contains an invalid phone number." +msgstr "Le champ 'Pager' contient un numéro invalide." + +#: plugins/personal/generic/password.tpl:2 +msgid "" +"You have changed the method your password is stored in the ldap database. " +"For that reason you've to enter your password at this point again. GOsa will " +"then encode it with the selected method." +msgstr "" +"Vous avez sélectionnez une autre méthode de stockage des mots de passe. Pour " +"cette raison vous devez ressaisir votre mot de passe afin que GOsa puisse le " +"réencoder et l'enregistrer dans l'annuaire LDAP." + +#: plugins/personal/generic/generic.tpl:6 +msgid "Personal information" +msgstr "Informations personnelles" + +#: plugins/personal/generic/generic.tpl:15 +#: plugins/personal/generic/generic_picture.tpl:6 +msgid "Personal picture" +msgstr "Image personnelle" + +#: plugins/personal/generic/generic.tpl:17 +msgid "Change picture" +msgstr "Changer la photo" + +#: plugins/personal/generic/generic.tpl:24 +#: plugins/addons/addressbook/contents.tpl:14 +#: plugins/addons/addressbook/address_edit.tpl:20 +#: plugins/addons/addressbook/address_info.tpl:16 +#: plugins/addons/addressbook/class_addressbook.inc:463 +#: plugins/admin/users/template.tpl:19 +msgid "Name" +msgstr "Nom" + +#: plugins/personal/generic/generic.tpl:30 +#: plugins/addons/addressbook/address_edit.tpl:20 +#: plugins/addons/addressbook/class_addressbook.inc:463 +#: plugins/admin/users/template.tpl:23 +msgid "Given name" +msgstr "Prénom" + +#: plugins/personal/generic/generic.tpl:34 plugins/admin/users/template.tpl:29 +msgid "Login" +msgstr "Identifiant" + +#: plugins/personal/generic/generic.tpl:42 +#: plugins/addons/addressbook/address_edit.tpl:26 +#: plugins/addons/addressbook/address_info.tpl:22 +msgid "Personal title" +msgstr "Titre Personnel" + +#: plugins/personal/generic/generic.tpl:50 +msgid "Academic title" +msgstr "Titre Universitaire" + +#: plugins/personal/generic/generic.tpl:58 +msgid "Date of birth" +msgstr "Date de naissance" + +#: plugins/personal/generic/generic.tpl:75 +#: ihtml/themes/altlinux/sizelimit.tpl:14 +#: ihtml/themes/default/sizelimit.tpl:14 +msgid "Set" +msgstr "Rempli" + +#: plugins/personal/generic/generic.tpl:81 +msgid "Sex" +msgstr "Sexe" + +#: plugins/personal/generic/generic.tpl:92 +#: plugins/gofax/blocklists/generic.tpl:14 plugins/admin/groups/generic.tpl:21 +#: plugins/admin/applications/generic.tpl:33 +#: plugins/admin/departments/generic.tpl:27 +#: plugins/admin/systems/server.tpl:13 plugins/admin/systems/phone.tpl:13 +#: plugins/admin/systems/terminal.tpl:18 plugins/admin/systems/printer.tpl:21 +#: plugins/admin/systems/workstation.tpl:18 +#: plugins/admin/systems/wingeneric.tpl:13 +#: plugins/admin/systems/component.tpl:13 plugins/admin/ogroups/generic.tpl:21 +msgid "Base" +msgstr "Base" + +#: plugins/personal/generic/generic.tpl:96 +msgid "Choose subtree to place user in" +msgstr "Sélectionnez la branche où sera enregistrée l'utilisateur" + +#: plugins/personal/generic/generic.tpl:111 +#: plugins/personal/generic/generic.tpl:255 +#: plugins/addons/addressbook/address_edit.tpl:37 +#: plugins/addons/addressbook/address_edit.tpl:86 +#: plugins/addons/addressbook/address_info.tpl:33 +#: plugins/addons/addressbook/address_info.tpl:82 +#: plugins/admin/departments/generic.tpl:54 +msgid "Address" +msgstr "Adresse" + +#: plugins/personal/generic/generic.tpl:115 +msgid "Private phone" +msgstr "Numéro de téléphone privé" + +#: plugins/personal/generic/generic.tpl:119 +msgid "Homepage" +msgstr "Page d'accueil" + +#: plugins/personal/generic/generic.tpl:128 +msgid "Password storage" +msgstr "Format de stockage des mots de passe" + +#: plugins/personal/generic/generic.tpl:138 +#: plugins/personal/generic/generic_certs.tpl:7 +msgid "Certificates" +msgstr "Certificats" + +#: plugins/personal/generic/generic.tpl:140 +msgid "Edit certificates" +msgstr "Modification des certificats" + +#: plugins/personal/generic/generic.tpl:144 +msgid "Kerberos" +msgstr "Kerberos" + +#: plugins/personal/generic/generic.tpl:145 +msgid "Edit properties" +msgstr "Modifier les propriétés" + +#: plugins/personal/generic/generic.tpl:161 +msgid "Organizational information" +msgstr "Informations sur l'entreprise" + +#: plugins/personal/generic/generic.tpl:173 +msgid "Organization" +msgstr "Entreprise" + +#: plugins/personal/generic/generic.tpl:177 +#: plugins/addons/addressbook/address_edit.tpl:68 +#: plugins/addons/addressbook/address_info.tpl:64 +#: plugins/generic/references/class_reference.inc:38 +msgid "Department" +msgstr "Département" + +#: plugins/personal/generic/generic.tpl:181 +msgid "Department No." +msgstr "No. du département." + +#: plugins/personal/generic/generic.tpl:187 +msgid "Employee No." +msgstr "No. de l'employé." + +#: plugins/personal/generic/generic.tpl:193 +msgid "Employee type" +msgstr "Type de l'employé" + +#: plugins/personal/generic/generic.tpl:209 +#: plugins/personal/generic/generic.tpl:348 +msgid "Room No." +msgstr "No. de bureau." + +#: plugins/personal/generic/generic.tpl:221 +#: plugins/addons/addressbook/contents.tpl:15 +#: plugins/addons/addressbook/address_edit.tpl:44 +#: plugins/addons/addressbook/address_info.tpl:40 +msgid "Mobile" +msgstr "Portable" + +#: plugins/personal/generic/generic.tpl:225 +#: plugins/addons/addressbook/address_edit.tpl:95 +#: plugins/addons/addressbook/address_info.tpl:91 +msgid "Pager" +msgstr "Bip" + +#: plugins/personal/generic/generic.tpl:247 +#: plugins/admin/departments/generic.tpl:42 +#: plugins/admin/departments/generic.tpl:50 +#: plugins/admin/systems/printer.tpl:14 +msgid "Location" +msgstr "Lieu" + +#: plugins/personal/generic/generic.tpl:251 +#: plugins/admin/departments/generic.tpl:46 +msgid "State" +msgstr "Département" + +#: plugins/personal/generic/generic.tpl:269 +msgid "Vocation" +msgstr "Travail" + +#: plugins/personal/generic/generic.tpl:273 +msgid "Unit description" +msgstr "Description de l'unité" + +#: plugins/personal/generic/generic.tpl:281 +msgid "Subject area" +msgstr "Zone de sujet" + +#: plugins/personal/generic/generic.tpl:289 +msgid "Functional title" +msgstr "Fonction" + +#: plugins/personal/generic/generic.tpl:296 +msgid "Role" +msgstr "Rôle" + +#: plugins/personal/generic/generic.tpl:308 +msgid "Person locality" +msgstr "Lieu de résidence" + +#: plugins/personal/generic/generic.tpl:316 +msgid "Unit" +msgstr "Unité" + +#: plugins/personal/generic/generic.tpl:323 +msgid "Street" +msgstr "Rue" + +#: plugins/personal/generic/generic.tpl:329 +#: plugins/addons/addressbook/address_edit.tpl:74 +#: plugins/addons/addressbook/address_info.tpl:70 +msgid "Postal code" +msgstr "Code postal" + +#: plugins/personal/generic/generic.tpl:335 +msgid "House identifier" +msgstr "Identifiant du batiment" + +#: plugins/personal/generic/generic.tpl:357 +msgid "Please use the phone tab" +msgstr "Veuillez utiliser l'onglet téléphone" + +#: plugins/personal/generic/generic.tpl:370 +msgid "Last delivery" +msgstr "Dernière distribution" + +#: plugins/personal/generic/generic.tpl:378 +msgid "Public visible" +msgstr "Visible par tous" + +#: plugins/personal/generic/generic_picture.tpl:23 +msgid "Remove picture" +msgstr "Suppression de l'image personnelle" + +#: plugins/personal/generic/generic_picture.tpl:29 +#: plugins/addons/addressbook/address_edit.tpl:107 +msgid "Save" +msgstr "Enregistrer" + +#: plugins/personal/generic/generic_certs.tpl:14 +msgid "Standard certificate" +msgstr "Certificat standard" + +#: plugins/personal/generic/generic_certs.tpl:19 +#: plugins/personal/generic/generic_certs.tpl:30 +#: plugins/personal/generic/generic_certs.tpl:41 +#: plugins/admin/groups/class_groupMail.inc:408 +#: plugins/admin/applications/class_applicationParameters.inc:94 +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:205 +#: ihtml/themes/altlinux/islocked.tpl:13 ihtml/themes/classic/islocked.tpl:13 +#: ihtml/themes/default/islocked.tpl:13 +msgid "Remove" +msgstr "Supprimer" + +#: plugins/personal/generic/generic_certs.tpl:25 +msgid "S/MIME certificate" +msgstr "Certificat S/MIME" + +#: plugins/personal/generic/generic_certs.tpl:36 +msgid "PKCS12 certificate" +msgstr "Certificat PKCS12" + +#: plugins/personal/generic/generic_certs.tpl:48 +msgid "Certificate serial number" +msgstr "Numéro de série du certificat" + +#: plugins/personal/generic/main.inc:107 +msgid "You are not allowed to set your password!" +msgstr "Vous n'êtes pas autorisé à modifier votre mot de passe!" + +#: plugins/personal/generic/main.inc:187 +msgid "Generic user information" +msgstr "Information générales sur l'utilisateur" + +#: plugins/personal/connectivity/class_pureftpdAccount.inc:6 +#: plugins/generic/references/class_reference.inc:34 +msgid "FTP" +msgstr "FTP" + +#: plugins/personal/connectivity/class_pureftpdAccount.inc:118 +msgid "Value specified as 'Upload bandwidth' is not valid." +msgstr "La valeur spécifiée dans le champ 'Upload bandwidth' n'est pas valide." + +#: plugins/personal/connectivity/class_pureftpdAccount.inc:121 +msgid "Value specified as 'Download bandwidth' is not valid." +msgstr "La valeur spécifiée dans le champ 'Download bandwidth' n'est pas valide." + +#: plugins/personal/connectivity/class_pureftpdAccount.inc:124 +msgid "Value specified as 'Files' is not valid." +msgstr "La valeur spécifiée dans le champ 'Files' n'est pas valide." + +#: plugins/personal/connectivity/class_pureftpdAccount.inc:127 +msgid "Value specified as 'Size' is not valid." +msgstr "La valeur spécifiée dans le champ 'Size' est invalide." + +#: plugins/personal/connectivity/class_pureftpdAccount.inc:130 +msgid "Value specified as 'Ratio' is not valid." +msgstr "La valeur spécifiée dans le champ 'Ratio' n'est pas valide." + +#: plugins/personal/connectivity/class_phpgwAccount.inc:5 +msgid "PHPGroupware" +msgstr "PHPGroupware" + +#: plugins/personal/connectivity/proxy.tpl:1 +msgid "Proxy account" +msgstr "Compte Proxy" + +#: plugins/personal/connectivity/proxy.tpl:8 +msgid "Filter unwanted content (i.e. pornographic or violence related)" +msgstr "Filtrer le contenu non désiré (i.e. pornographique ou violent)" + +#: plugins/personal/connectivity/proxy.tpl:13 +msgid "Limit proxy access to working time" +msgstr "Accès au proxy autorisé durant la plage horaire suivante" + +#: plugins/personal/connectivity/proxy.tpl:42 +msgid "Restrict proxy usage by quota" +msgstr "Restreindre la quantité de données téléchargeables" + +#: plugins/personal/connectivity/proxy.tpl:52 +msgid "per" +msgstr "par" + +#: plugins/personal/connectivity/class_webdavAccount.inc:6 +msgid "WebDAV" +msgstr "WebDAV" + +#: plugins/personal/connectivity/phpgw.tpl:1 +msgid "PHPGroupware account" +msgstr "Compte PHPGroupware" + +#: plugins/personal/connectivity/webdav.tpl:1 +msgid "WebDAV account" +msgstr "Compte WebDAV" + +#: plugins/personal/connectivity/pureftpd.tpl:1 +msgid "FTP account" +msgstr "Compte FTP" + +#: plugins/personal/connectivity/pureftpd.tpl:11 +msgid "Bandwidth" +msgstr "Bande passante" + +#: plugins/personal/connectivity/pureftpd.tpl:15 +msgid "Upload bandwidth" +msgstr "Bande passante montante" + +#: plugins/personal/connectivity/pureftpd.tpl:16 +#: plugins/personal/connectivity/pureftpd.tpl:20 +msgid "kb/s" +msgstr "kb/sec" + +#: plugins/personal/connectivity/pureftpd.tpl:19 +msgid "Download bandwidth" +msgstr "Bande passante descendante" + +#: plugins/personal/connectivity/pureftpd.tpl:31 +msgid "Quota" +msgstr "Quota" + +#: plugins/personal/connectivity/pureftpd.tpl:35 +msgid "Files" +msgstr "Fichier" + +#: plugins/personal/connectivity/pureftpd.tpl:39 +msgid "Size" +msgstr "Taille" + +#: plugins/personal/connectivity/pureftpd.tpl:50 +msgid "Ratio" +msgstr "Ratio" + +#: plugins/personal/connectivity/pureftpd.tpl:54 +msgid "Uploaded / downloaded files" +msgstr "Données envoyées / reçues" + +#: plugins/personal/connectivity/pureftpd.tpl:67 +msgid "Check to disable FTP Access" +msgstr "Cliquez ici pour désactivez l'accès ftp" + +#: plugins/personal/connectivity/pureftpd.tpl:67 +msgid "Temporary disable FTP access" +msgstr "Désactiver temporairement l'accès ftp" + +#: plugins/personal/connectivity/kolab.tpl:1 +msgid "Kolab account" +msgstr "Compte Kolab" + +#: plugins/personal/connectivity/kolab.tpl:4 +msgid "" +"The kolab account is currently disabled. It's features can be adjusted if " +"you add a mail account." +msgstr "L'extension Kolab est désactivée. Ces paramètres peuvent être ajustés si vous ajoutez un compte mail." + +#: plugins/personal/connectivity/kolab.tpl:10 +msgid "Delegations" +msgstr "Delegation" + +#: plugins/personal/connectivity/kolab.tpl:27 +msgid "Invitation" +msgstr "Invitation" + +#: plugins/personal/connectivity/kolab.tpl:28 +#, fuzzy +msgid "Policy" +msgstr "Politique" + +#: plugins/personal/connectivity/kolab.tpl:34 +msgid "Free Busy information" +msgstr "Information de disponibilité" + +#: plugins/personal/connectivity/kolab.tpl:37 +msgid "URL" +msgstr "URL" + +#: plugins/personal/connectivity/kolab.tpl:41 +msgid "Future" +msgstr "Futur" + +#: plugins/personal/connectivity/kolab.tpl:42 +msgid "days" +msgstr "jours" + +#: plugins/personal/connectivity/kolab.tpl:47 +msgid "Misc" +msgstr "Divers" + +#: plugins/personal/connectivity/kolab.tpl:48 +msgid "No mail size restriction" +msgstr "Pas de taille limite pour l'envoi de mail" + +#: plugins/personal/connectivity/class_connectivity.inc:60 +msgid "This account has no connectivity extensions." +msgstr "Ce compte n'est pas d'extension de connectivité." + +#: plugins/personal/connectivity/class_proxyAccount.inc:5 +#: plugins/generic/references/class_reference.inc:32 +msgid "Proxy" +msgstr "Proxy" + +#: plugins/personal/connectivity/class_proxyAccount.inc:69 +msgid "KB" +msgstr "KB" + +#: plugins/personal/connectivity/class_proxyAccount.inc:69 +msgid "GB" +msgstr "GB" + +#: plugins/personal/connectivity/class_proxyAccount.inc:70 +msgid "hour" +msgstr "heure" + +#: plugins/personal/connectivity/class_proxyAccount.inc:70 +msgid "day" +msgstr "jour" + +#: plugins/personal/connectivity/class_proxyAccount.inc:70 +msgid "week" +msgstr "semaine" + +#: plugins/personal/connectivity/class_proxyAccount.inc:70 +msgid "month" +msgstr "mois" + +#: plugins/personal/connectivity/class_kolabAccount.inc:5 +msgid "Kolab" +msgstr "Kolab" + +#: plugins/personal/connectivity/class_kolabAccount.inc:61 +msgid "You're trying to add an invalid email address to the list of delegations." +msgstr "Vous essayez d'ajouter une adresse email invalide à la liste des délégations." + +#: plugins/personal/connectivity/class_kolabAccount.inc:69 +msgid "" +"The mail address you're trying to add is no primary mail address of an " +"existing user." +msgstr "L'adresse email que vous essayez de rajouter n'est pas l'adresse primaire d'un utilisateur existant." + +#: plugins/personal/connectivity/class_kolabAccount.inc:96 +msgid "Always accept" +msgstr "Toujours accepter" + +#: plugins/personal/connectivity/class_kolabAccount.inc:97 +msgid "Always reject" +msgstr "Toujours rejeter" + +#: plugins/personal/connectivity/class_kolabAccount.inc:98 +msgid "Reject if conflicts" +msgstr "Reconnexion si il y a conflit" + +#: plugins/personal/connectivity/class_kolabAccount.inc:99 +msgid "Manual if conflicts" +msgstr "Manuel si il y a conflit" + +#: plugins/personal/connectivity/class_kolabAccount.inc:100 +msgid "Manual" +msgstr "Manuel" + +#: plugins/personal/connectivity/class_kolabAccount.inc:137 +#, fuzzy +msgid "The value specified as Free Busy future needs to be an integer." +msgstr "La valeur spécifiée comme information de disponibilité future doit être un entier." + +#: plugins/personal/connectivity/class_kolabAccount.inc:142 +msgid "The value specified as Free Busy Information URL is invalid." +msgstr "La valeur spécifiée comme URL d'information de disponibilité est invalide." + +#: plugins/gofax/blocklists/generic.tpl:8 +msgid "List name" +msgstr "Liste des noms" + +#: plugins/gofax/blocklists/generic.tpl:10 +msgid "Name of blocklist" +msgstr "Nom de la liste rouge" + +#: plugins/gofax/blocklists/generic.tpl:16 +msgid "Select subtree to place blocklist in" +msgstr "Sélectionnez la branche où sera situé la liste rouge" + +#: plugins/gofax/blocklists/generic.tpl:31 +#: plugins/admin/systems/service.tpl:42 plugins/admin/systems/service.tpl:120 +msgid "Type" +msgstr "Type" + +#: plugins/gofax/blocklists/generic.tpl:33 +msgid "Select wether to filter incoming or outgoing calls" +msgstr "Veuillez sélectionner si il faut filtrer sur les appels entrants ou sortants" + +#: plugins/gofax/blocklists/generic.tpl:39 plugins/admin/groups/generic.tpl:13 +#: plugins/admin/applications/generic.tpl:24 +#: plugins/admin/departments/generic.tpl:12 +#: plugins/admin/systems/server.tpl:24 plugins/admin/systems/phone.tpl:24 +#: plugins/admin/systems/printer.tpl:10 +#: plugins/admin/systems/wingeneric.tpl:24 +#: plugins/admin/systems/component.tpl:24 plugins/admin/ogroups/generic.tpl:13 +#: plugins/generic/references/contents.tpl:11 +msgid "Description" +msgstr "Description" + +#: plugins/gofax/blocklists/generic.tpl:41 +msgid "Descriptive text for this blocklist" +msgstr "Texte descriptif pour cette liste rouge" + +#: plugins/gofax/blocklists/generic.tpl:54 +msgid "Blocked numbers" +msgstr "Numéros bloqués" + +#: plugins/gofax/blocklists/generic.tpl:64 +#: plugins/gofax/blocklists/headpage.tpl:24 +#: plugins/addons/addressbook/contents.tpl:33 +#: plugins/admin/groups/headpage.tpl:25 plugins/admin/users/headpage.tpl:26 +#: plugins/admin/applications/headpage.tpl:24 +#: plugins/admin/departments/headpage.tpl:24 +#: plugins/admin/systems/headpage.tpl:25 plugins/admin/ogroups/headpage.tpl:25 +msgid "Information" +msgstr "Information" + +#: plugins/gofax/blocklists/generic.tpl:66 +msgid "Numbers can also contain wild cards." +msgstr "Les nombres peuvent contenir des jokers." + +#: plugins/gofax/blocklists/class_blocklistManagement.inc:5 +msgid "FAX Blocklists" +msgstr "Liste Rouge des Fax" + +#: plugins/gofax/blocklists/class_blocklistManagement.inc:121 +#, php-format +msgid "You're about to delete the blocklist '%s'." +msgstr "Vous êtes sur le point de supprimer la liste rouge '%s'." + +#: plugins/gofax/blocklists/class_blocklistManagement.inc:135 +msgid "You have no permission to remove this blocklist." +msgstr "Vous n'avez pas l'autorisation de supprimer cette liste rouge." + +#: plugins/gofax/blocklists/class_blocklistManagement.inc:153 +msgid "Please specify a valid phone number." +msgstr "Veuillez entrer un numéro de téléphone valide." + +#: plugins/gofax/blocklists/class_blocklistManagement.inc:226 +msgid "send" +msgstr "envoyer" + +#: plugins/gofax/blocklists/class_blocklistManagement.inc:226 +msgid "receive" +msgstr "recevoir" + +#: plugins/gofax/blocklists/class_blocklistManagement.inc:342 +msgid "You have no permissions to create a blocklist on this 'Base'." +msgstr "Vous n'avez pas l'autorisation de créer une liste rouge sur cette 'Base'." + +#: plugins/gofax/blocklists/class_blocklistManagement.inc:348 +#: plugins/admin/departments/class_departmentGeneric.inc:141 +msgid "Required field 'Name' is not set." +msgstr "Le champ obligatoire 'Name' n'est pas rempli." + +#: plugins/gofax/blocklists/class_blocklistManagement.inc:351 +msgid "Required field 'Name' contains invalid characters" +msgstr "Le champ obligatoire 'Name' contient des caractères invalides" + +#: plugins/gofax/blocklists/class_blocklistManagement.inc:359 +msgid "Specified name is already used." +msgstr "Le nom spécifié est déjà utilisé." + +#: plugins/gofax/blocklists/class_blocklistManagement.inc:366 +msgid "No permission to create a blocklist on this base." +msgstr "Vous n'avez pas l'autorisation de créer des listes rouge sur cette base." + +#: plugins/gofax/blocklists/remove.tpl:2 +#: plugins/addons/addressbook/remove.tpl:2 plugins/admin/groups/remove.tpl:2 +#: plugins/admin/users/remove.tpl:2 plugins/admin/applications/remove.tpl:2 +#: plugins/admin/departments/remove.tpl:2 plugins/admin/systems/remove.tpl:2 +#: plugins/admin/ogroups/remove.tpl:2 html/index.php:211 +#: ihtml/themes/altlinux/conflict.tpl:6 ihtml/themes/altlinux/islocked.tpl:6 +#: ihtml/themes/classic/conflict.tpl:6 ihtml/themes/classic/islocked.tpl:6 +#: ihtml/themes/default/conflict.tpl:6 ihtml/themes/default/islocked.tpl:6 +msgid "Warning" +msgstr "Avertissement" + +#: plugins/gofax/blocklists/remove.tpl:7 +msgid "" +"Please double check if your really want to do this since there is no way for " +"GOsa to get your data back." +msgstr "" +"Veuillez vous assurez que vous voulez effectuer cette opération. Toutes les " +"données seront perdues étant donné qu'il est impossible pour GOsa de " +"récupérer vos données." + +#: plugins/gofax/blocklists/remove.tpl:11 +#: plugins/addons/addressbook/remove.tpl:11 plugins/admin/groups/remove.tpl:11 +#: plugins/admin/users/remove.tpl:11 plugins/admin/applications/remove.tpl:10 +#: plugins/admin/ogroups/remove.tpl:11 +msgid "" +"So - if you're sure - press Delete to continue or Cancel to " +"abort." +msgstr "" +"D'accord - si vous êtes sur - cliquez sur Supprimer pour continuer ou " +"sur Annuler pour abandonner." + +#: plugins/gofax/blocklists/headpage.tpl:6 +msgid "List of blocklists" +msgstr "Liste des listes rouges" + +#: plugins/gofax/blocklists/headpage.tpl:15 +#: plugins/admin/groups/headpage.tpl:15 plugins/admin/users/headpage.tpl:15 +#: plugins/admin/applications/headpage.tpl:15 +#: plugins/admin/departments/headpage.tpl:15 +#: plugins/admin/systems/headpage.tpl:15 plugins/admin/ogroups/headpage.tpl:15 +msgid "New" +msgstr "Nouveau" + +#: plugins/gofax/blocklists/headpage.tpl:28 +msgid "" +"This menu allows to create, delete and edit selected blocklists. Having a " +"large size of lists, you might prefer the range selectors on top of the " +"select box." +msgstr "" +"Ce menu permet d'ajouter, supprimer et modifier les listes rouge " +"sélectionnées. Vous pouvez utiliser les filtres lorsque vous travaillez avec " +"un grand nombre de listes rouge." + +#: plugins/gofax/blocklists/headpage.tpl:31 +msgid "" +"-Edit- and -New blocklist- will provide an assistant to aid you when " +"performing changes on your blocklist. -Delete- will ask you for confirmation " +"before really deleting anything." +msgstr "" +"-Editer- et -Nouveau- lancera un assistant vous aidant dans la modification " +"des propriétés. -Supprimer- vous demandera confirmation avant d'exécuter " +"l'opération." + +#: plugins/gofax/blocklists/headpage.tpl:45 +msgid "Select to see send blocklists" +msgstr "Sélectionnez afin d'afficher les numéros d'appels de la liste rouge" + +#: plugins/gofax/blocklists/headpage.tpl:45 +msgid "Show send blocklists" +msgstr "Afficher les numéros d'appels de la liste rouge" + +#: plugins/gofax/blocklists/headpage.tpl:46 +msgid "Select to see receive blocklists" +msgstr "Sélectionnez afin de voir les listes rouges de correspondants" + +#: plugins/gofax/blocklists/headpage.tpl:46 +msgid "Show receive blocklists" +msgstr "Afficher les listes rouges de correspondants" + +#: plugins/gofax/blocklists/headpage.tpl:49 +msgid "Display lists of department" +msgstr "Afficher la liste des départements" + +#: plugins/gofax/blocklists/headpage.tpl:55 +msgid "Display lists matching" +msgstr "Afficher les listes correspondantes" + +#: plugins/gofax/blocklists/headpage.tpl:56 +msgid "Regular expression for matching list names" +msgstr "Expression régulière pour trouver des listes correspondantes" + +#: plugins/gofax/blocklists/headpage.tpl:59 +msgid "Display lists containing" +msgstr "Afficher les listes contenant" + +#: plugins/gofax/blocklists/headpage.tpl:60 +msgid "Show lists containing entered numbers" +msgstr "Afficher les listes contenant les numéros entrés" + +#: plugins/gofax/blocklists/main.inc:20 plugins/gofax/blocklists/main.inc:22 +msgid "Blocklist management" +msgstr "Configuration des listes rouges" + +#: plugins/gofax/faxaccount/generic.tpl:12 +msgid "Fax number for GOfax to trigger on" +msgstr "Numéro de fax pour lesquels GOFax s'activera" + +#: plugins/gofax/faxaccount/generic.tpl:16 +msgid "Language" +msgstr "Langue" + +#: plugins/gofax/faxaccount/generic.tpl:18 +msgid "Specify the GOfax communication language for fax to mail gateway" +msgstr "" +"Indiquez le le protocole de communication GOfax pour les fax vers la " +"passerelle mail" + +#: plugins/gofax/faxaccount/generic.tpl:24 +msgid "Delivery format" +msgstr "Format de distribution" + +#: plugins/gofax/faxaccount/generic.tpl:26 +msgid "Specify delivery format for fax to mail gateway" +msgstr "Spécifiez le format de distribution pour les fax vers la passerelle mail" + +#: plugins/gofax/faxaccount/generic.tpl:38 +msgid "Delivery methods" +msgstr "Méthodes de distribution" + +#: plugins/gofax/faxaccount/generic.tpl:41 +msgid "Temporary disable fax usage" +msgstr "Désactiver temporairement l'utilisation du fax" + +#: plugins/gofax/faxaccount/generic.tpl:45 +msgid "Deliver fax as mail to" +msgstr "Délivrer les fax comme des mails à" + +#: plugins/gofax/faxaccount/generic.tpl:49 +msgid "Deliver fax as mail" +msgstr "Délivrer les fax comme des mails" + +#: plugins/gofax/faxaccount/generic.tpl:54 +msgid "Deliver fax to printer" +msgstr "Imprimer directement les fax" + +#: plugins/gofax/faxaccount/generic.tpl:68 +msgid "Alternate fax numbers" +msgstr "Numéros de fax alternatif" + +#: plugins/gofax/faxaccount/generic.tpl:83 +msgid "Blocklists" +msgstr "Listes Rouges" + +#: plugins/gofax/faxaccount/generic.tpl:86 +msgid "Blocklists for incoming fax" +msgstr "Listes rouges pour les fax entrant" + +#: plugins/gofax/faxaccount/generic.tpl:92 +msgid "Blocklists for outgoing fax" +msgstr "Listes rouges pour les fax sortant" + +#: plugins/gofax/faxaccount/locals.tpl:6 +msgid "Select numbers to add" +msgstr "Sélectionnez les numéros à ajouter" + +#: plugins/gofax/faxaccount/locals.tpl:28 +msgid "Display numbers of department" +msgstr "Afficher les numéro du département" + +#: plugins/gofax/faxaccount/locals.tpl:34 +msgid "Display numbers matching" +msgstr "Afficher les numéros correspondants" + +#: plugins/gofax/faxaccount/locals.tpl:35 +msgid "Regular expression for matching numbers" +msgstr "Expression régulière pour trouver les numéros correspondants" + +#: plugins/gofax/faxaccount/locals.tpl:38 +msgid "Display numbers of user" +msgstr "Afficher les numéros des utilisateurs" + +#: plugins/gofax/faxaccount/locals.tpl:39 +msgid "User name of which numbers are shown" +msgstr "Utilisateur dont les numéros sont affichés" + +#: plugins/gofax/faxaccount/lists.tpl:4 +msgid "Blocked numbers/lists" +msgstr "Numéros/listes refusés" + +#: plugins/gofax/faxaccount/lists.tpl:18 +#: plugins/admin/groups/mail_admins.tpl:24 +msgid "Select a specific department" +msgstr "Sélectionner un département" + +#: plugins/gofax/faxaccount/lists.tpl:25 plugins/admin/groups/acl.tpl:12 +#: plugins/admin/groups/mail_admins.tpl:30 +msgid "Choose" +msgstr "Choisissez" + +#: plugins/gofax/faxaccount/lists.tpl:28 +msgid "List of predefined blocklists" +msgstr "Liste des listes rouges prédéfinies" + +#: plugins/gofax/faxaccount/lists.tpl:37 +#: plugins/admin/groups/application_options.tpl:8 +#: plugins/admin/groups/mail_admins.tpl:37 include/functions.inc:1335 +msgid "Apply" +msgstr "Appliquer" + +#: plugins/gofax/faxaccount/main.inc:105 +msgid "FAX settings" +msgstr "Configuration du FAX" + +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:6 +#: plugins/addons/addressbook/address_edit.tpl:92 +#: plugins/addons/addressbook/address_info.tpl:88 +#: plugins/generic/references/class_reference.inc:30 +msgid "FAX" +msgstr "FAX" + +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:109 +msgid "This account has no fax extensions." +msgstr "Ce compte n'a pas d'extensions FAX." + +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:118 +msgid "Remove fax account" +msgstr "Supprimer le compte FAX" + +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:119 +msgid "" +"This account has fax features enabled. You can disable them by clicking " +"below." +msgstr "" +"Le fax est activée pour ce compte, vous pouvez le désactiver en cliquant sur " +"le bouton ci-dessous." + +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:121 +msgid "Create fax account" +msgstr "Créer un compte FAX" + +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:122 +msgid "" +"This account has fax features disabled. You can enable them by clicking " +"below." +msgstr "" +"Le fax est désactivé pour ce compte, vous pouvez l'activer en cliquant sur " +"le bouton ci-dessous." + +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:190 +msgid "You're trying to add an invalid phone number." +msgstr "Vous essayez d'ajouter un numéro de téléphone invalide." + +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:456 +msgid "The required field 'Fax' is not set." +msgstr "Le champ obligatoire 'Fax' n'est pas renseigné." + +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:460 +msgid "Please enter a valid telephone number in the 'Fax' field." +msgstr "Veuillez entrer un numéro de téléphone valide dans le champ 'Fax'." + +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:468 +msgid "Mail delivery is checked, but no address has been specified." +msgstr "La livraison par mail est activée, mais aucune adresse est spécifiée." + +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:470 +msgid "The mail address you've entered is invalid." +msgstr "L'adresse email introduite est incorrecte." + +#: plugins/gofax/reports/detail.tpl:6 +msgid "FAX preview - please wait" +msgstr "prévisualisation du FAX - Veuillez attendre" + +#: plugins/gofax/reports/detail.tpl:9 +msgid "Click on fax to download" +msgstr "Cliquez sur le fax pour le télécharger" + +#: plugins/gofax/reports/detail.tpl:18 +msgid "FAX ID" +msgstr "FAX ID" + +#: plugins/gofax/reports/detail.tpl:22 plugins/gofax/reports/contents.tpl:30 +msgid "User" +msgstr "Utilisateur" + +#: plugins/gofax/reports/detail.tpl:26 +msgid "Date / Time" +msgstr "Date / Heure" + +#: plugins/gofax/reports/detail.tpl:30 +msgid "Sender MSN" +msgstr "MSN Expéditeur" + +#: plugins/gofax/reports/detail.tpl:34 +msgid "Sender ID" +msgstr "ID Expéditeur" + +#: plugins/gofax/reports/detail.tpl:38 +msgid "Receiver MSN" +msgstr "MSN Correspondant" + +#: plugins/gofax/reports/detail.tpl:42 +msgid "Receiver ID" +msgstr "ID Correspondant" + +#: plugins/gofax/reports/detail.tpl:50 +msgid "Status message" +msgstr "Statut du message" + +#: plugins/gofax/reports/detail.tpl:54 +msgid "Transfer time" +msgstr "Temps de transfert" + +#: plugins/gofax/reports/detail.tpl:58 plugins/gofax/reports/contents.tpl:35 +msgid "# pages" +msgstr "# pages" + +#: plugins/gofax/reports/contents.tpl:2 plugins/addons/logview/contents.tpl:2 +#: plugins/gofon/reports/contents.tpl:2 +msgid "Filter" +msgstr "Filtre" + +#: plugins/gofax/reports/contents.tpl:6 +#: plugins/addons/addressbook/contents.tpl:77 +#: plugins/addons/logview/contents.tpl:45 plugins/gofon/reports/contents.tpl:6 +msgid "Search for" +msgstr "Recherche de" + +#: plugins/gofax/reports/contents.tpl:7 plugins/gofon/reports/contents.tpl:7 +msgid "Enter user name to search for" +msgstr "Entrez le nom recherché" + +#: plugins/gofax/reports/contents.tpl:8 plugins/gofax/reports/contents.tpl:16 +#: plugins/gofon/reports/contents.tpl:8 plugins/gofon/reports/contents.tpl:16 +msgid "in" +msgstr "dans" + +#: plugins/gofax/reports/contents.tpl:9 plugins/gofon/reports/contents.tpl:9 +msgid "Select subtree to base search on" +msgstr "Sélectionnez la branche de l'annuaire où sera effectuée la recherche" + +#: plugins/gofax/reports/contents.tpl:12 plugins/gofon/reports/contents.tpl:12 +msgid "during" +msgstr "pendant" + +#: plugins/gofax/reports/contents.tpl:21 +#: plugins/addons/logview/contents.tpl:65 +#: plugins/gofon/reports/contents.tpl:21 +msgid "Search" +msgstr "Recherche" + +#: plugins/gofax/reports/contents.tpl:31 +#: plugins/addons/logview/contents.tpl:83 +#: plugins/gofon/reports/contents.tpl:30 +msgid "Date" +msgstr "Date" + +#: plugins/gofax/reports/contents.tpl:33 +msgid "Sender" +msgstr "Expéditeur" + +#: plugins/gofax/reports/contents.tpl:34 +msgid "Receiver" +msgstr "Correspondant" + +#: plugins/gofax/reports/contents.tpl:47 +#: plugins/addons/logview/contents.tpl:96 +#: plugins/gofon/reports/contents.tpl:48 +msgid "Search returned no results..." +msgstr "La recherche n'a renvoyé aucun résultat..." + +#: plugins/gofax/reports/class_faxreport.inc:6 +msgid "FAX Reports" +msgstr "Rapports des Fax" + +#: plugins/gofax/reports/class_faxreport.inc:97 +#: plugins/gofax/reports/class_faxreport.inc:204 +msgid "Can't connect to fax database, no reports can be shown!" +msgstr "" +"Impossible de se connecter à la base de données des fax, aucun rapport ne " +"peut être affiché!" + +#: plugins/gofax/reports/class_faxreport.inc:101 +#: plugins/gofax/reports/class_faxreport.inc:208 +msgid "Can't select fax database for report generation!" +msgstr "" +"Impossible de sélectionner la base de données fax pour la génération de " +"rapports!" + +#: plugins/gofax/reports/class_faxreport.inc:109 +#: plugins/gofax/reports/class_faxreport.inc:216 +msgid "Query for fax database failed!" +msgstr "La requête sur la base de données des fax a échoué!" + +#: plugins/gofax/reports/class_faxreport.inc:117 +msgid "You have no permission to retrieve informations about this fax id!" +msgstr "" +"Vous n'avez pas l'autorisation de récupérer les informations à propos de " +"l'identifiant de ce fax!" + +#: plugins/gofax/reports/class_faxreport.inc:137 +#: plugins/gofax/reports/class_faxreport.inc:224 +#: plugins/gofon/reports/class_fonreport.inc:158 +msgid "Y-M-D" +msgstr "A-M-J" + +#: plugins/gofax/reports/main.inc:5 +msgid "FAX reports" +msgstr "Rapports des Fax" + +#: plugins/addons/addressbook/contents.tpl:15 +#: plugins/addons/addressbook/address_edit.tpl:33 +#: plugins/addons/addressbook/address_info.tpl:29 +msgid "Private" +msgstr "Privé" + +#: plugins/addons/addressbook/contents.tpl:15 +msgid "Contact" +msgstr "Contact" + +#: plugins/addons/addressbook/contents.tpl:37 +msgid "" +"The telephone list plugin provides list and search facilities for the people " +"in your site. You may want to specify the asterisk [*] like in 'Go*us' to " +"find 'Gonicus'. Use the filters below to narrow down your search." +msgstr "" +"L'extension gérant les listes de numéros de téléphone permet de les mettre à " +"disposition de vos utilisateurs. Vous pouvez utiliser les [*] dans vos " +"recherches, comme dans 'Go*us' pour trouver 'Gonicus'. Utilisez les filtres " +"ci dessous pour réduire l'étendue de votre recherche." + +#: plugins/addons/addressbook/contents.tpl:42 +msgid "Actions" +msgstr "Actions" + +#: plugins/addons/addressbook/contents.tpl:47 +msgid "Add entry" +msgstr "Ajouter une entrée" + +#: plugins/addons/addressbook/contents.tpl:50 +msgid "Edit entry" +msgstr "Modifier une entrée" + +#: plugins/addons/addressbook/contents.tpl:52 +msgid "Remove entry" +msgstr "Supprimer une entrée" + +#: plugins/addons/addressbook/contents.tpl:67 +msgid "Select to see regular users" +msgstr "Sélectionnez afin d'afficher les utilisateurs habituels" + +#: plugins/addons/addressbook/contents.tpl:67 +#, fuzzy +msgid "Show organizational entries" +msgstr "Afficher les entrées de l'organisation" + +#: plugins/addons/addressbook/contents.tpl:68 +msgid "Select to see users in addressbook" +msgstr "Sélectionner pour afficher les utilisateurs présent dans le carnet d'adresse" + +#: plugins/addons/addressbook/contents.tpl:68 +msgid "Show addressbook entries" +msgstr "Afficher les entrées du carnet d'adresses" + +#: plugins/addons/addressbook/contents.tpl:71 +msgid "Display results for department" +msgstr "Afficher les résultats pour le département" + +#: plugins/addons/addressbook/contents.tpl:78 +msgid "Search string" +msgstr "Recherche de la chaîne de caractère" + +#: plugins/addons/addressbook/contents.tpl:81 +msgid "Match object" +msgstr "Objet correspondant" + +#: plugins/addons/addressbook/contents.tpl:83 +msgid "Choose the object that will be searched in" +msgstr "Indiquez l'objet dans lequel la recherche sera effectuée" + +#: plugins/addons/addressbook/dial.tpl:3 +msgid "Dial connection..." +msgstr "Appel en cours ..." + +#: plugins/addons/addressbook/dial.tpl:11 +#: plugins/addons/addressbook/class_addressbook.inc:337 +#: plugins/addons/addressbook/class_addressbook.inc:339 +#: plugins/addons/addressbook/class_addressbook.inc:340 +#: plugins/addons/addressbook/class_addressbook.inc:414 +msgid "Dial" +msgstr "Appeler" + +#: plugins/addons/addressbook/address_edit.tpl:4 +msgid "Choose the department to store entry in" +msgstr "Choisissez le département où l'entrée sera stockée" + +#: plugins/addons/addressbook/address_edit.tpl:16 +#: plugins/addons/addressbook/address_info.tpl:12 +msgid "Personal" +msgstr "Personnel" + +#: plugins/addons/addressbook/address_edit.tpl:23 +#: plugins/addons/addressbook/address_info.tpl:19 +msgid "Initials" +msgstr "Initiales" + +#: plugins/addons/addressbook/address_edit.tpl:47 +#: plugins/addons/addressbook/address_info.tpl:43 +msgid "Email" +msgstr "Email" + +#: plugins/addons/addressbook/address_edit.tpl:57 +#: plugins/addons/addressbook/address_info.tpl:53 +msgid "Organizational" +msgstr "Organisation" + +#: plugins/addons/addressbook/address_edit.tpl:65 +#: plugins/addons/addressbook/address_info.tpl:61 +msgid "Company" +msgstr "Société" + +#: plugins/addons/addressbook/address_edit.tpl:71 +#: plugins/addons/addressbook/address_info.tpl:67 +msgid "City" +msgstr "Ville" + +#: plugins/addons/addressbook/address_edit.tpl:77 +#: plugins/addons/addressbook/address_info.tpl:73 +msgid "Country" +msgstr "Pays" + +#: plugins/addons/addressbook/remove.tpl:7 +msgid "" +"This includes all addressbook data in this entry. Please double check if " +"your really want to do this since there is no way for GOsa to get your data " +"back." +msgstr "" +"Ceci inclut toutes les données du carnet d'adresse dans cette entrée. " +"Veuillez vérifier si vous voulez réaliser cette opération, toutes les " +"données seront définitivement perdues, il n'y a pas de moyen pour GOsa de " +"les récupérer." + +#: plugins/addons/addressbook/main.inc:23 +msgid "Address book" +msgstr "Carnet d'adresses" + +#: plugins/addons/addressbook/class_addressbook.inc:6 +msgid "Addressbook" +msgstr "Carnet d'adresses" + +#: plugins/addons/addressbook/class_addressbook.inc:143 +#, php-format +msgid "Dial from %s to %s now?" +msgstr "Appeler de %s vers %s maintenant ?" + +#: plugins/addons/addressbook/class_addressbook.inc:147 +msgid "" +"You have no personal phone number set. Please change that in order to " +"perform direct dials." +msgstr "" +"Vous n'avez pas de numéro de téléphone personnel indiqué. Veuillez rectifier " +"cela en vue de pouvoir faire des appels directs." + +#: plugins/addons/addressbook/class_addressbook.inc:176 +#: plugins/addons/addressbook/class_addressbook.inc:280 +msgid "You are not allowed to delete this entry!" +msgstr "Vous n'êtes pas autorisé à supprimer cette entrée!" + +#: plugins/addons/addressbook/class_addressbook.inc:274 +#, php-format +msgid "You're about to delete the entry %s." +msgstr "Vous êtes sur le point de supprimer l'entrée %s." + +#: plugins/addons/addressbook/class_addressbook.inc:343 +#, php-format +msgid "Save contact for %s as vcard" +msgstr "Enregistrer le contact %s au format vcard" + +#: plugins/addons/addressbook/class_addressbook.inc:346 +#, php-format +msgid "Send mail to %s" +msgstr "Envoyer un mail à %s" + +#: plugins/addons/addressbook/class_addressbook.inc:426 +msgid "global addressbook" +msgstr "Carnet d'adresses général" + +#: plugins/addons/addressbook/class_addressbook.inc:428 +msgid "organizations user database" +msgstr "Liste des utilisateurs de l'entreprise" + +#: plugins/addons/addressbook/class_addressbook.inc:432 +#, php-format +msgid "Contact stored in %s" +msgstr "Contact enregistré dans %s" + +#: plugins/addons/addressbook/class_addressbook.inc:434 +msgid "Creating new entry in" +msgstr "Création d'une nouvelle entrée dans" + +#: plugins/addons/addressbook/class_addressbook.inc:463 +#: plugins/addons/logview/class_logview.inc:62 +#: plugins/addons/logview/class_logview.inc:76 +msgid "All" +msgstr "Tout" + +#: plugins/addons/addressbook/class_addressbook.inc:464 +msgid "Work phone" +msgstr "Téléphone du bureau" + +#: plugins/addons/addressbook/class_addressbook.inc:464 +msgid "Cell phone" +msgstr "GSM" + +#: plugins/addons/addressbook/class_addressbook.inc:465 +msgid "Home phone" +msgstr "Téléphone personnel" + +#: plugins/addons/addressbook/class_addressbook.inc:465 +msgid "User ID" +msgstr "ID de l'utilisateur" + +#: plugins/addons/addressbook/class_addressbook.inc:537 +msgid "Cannot create a unique DN for your entry. Please fill more formular fields." +msgstr "" +"Impossible de créer un DN unique pour cette entrée. Veuillez remplir plus de " +"champs." + +#: plugins/addons/addressbook/class_addressbook.inc:549 +msgid "You have no permissions to create or modify a global address book entry." +msgstr "" +"Vous n'avez pas les droits nécessaires pour créer ou modifier une entrée " +"dans le carnet d'adresse général." + +#: plugins/addons/ldapmanager/class_csvimport.inc:6 +#: plugins/addons/ldapmanager/class_import.inc:6 +msgid "LDIF export" +msgstr "Export LDIF" + +#: plugins/addons/ldapmanager/class_csvimport.inc:137 +msgid "Need 'sn','givenName' and 'uid' to create user" +msgstr "J'ai besoin d'un 'sn','givenName' et 'uid' pour créer un utilisateur" + +#: plugins/addons/ldapmanager/class_csvimport.inc:170 +msgid "failed" +msgstr "échec" + +#: plugins/addons/ldapmanager/class_csvimport.inc:174 +msgid "ok" +msgstr "ok" + +#: plugins/addons/ldapmanager/class_csvimport.inc:230 +msgid "status" +msgstr "statut" + +#: plugins/addons/ldapmanager/class_csvimport.inc:234 +#, php-format +msgid "An Error Occured while inserting entry %s - process aborted" +msgstr "Une erreur s'est produite lors de l'insertion de l'entrée %s - le processus à été interrompu" + +#: plugins/addons/ldapmanager/class_csvimport.inc:259 +msgid "Nothing to import !." +msgstr "Rien à importer !." + +#: plugins/addons/ldapmanager/class_csvimport.inc:268 +#: plugins/addons/ldapmanager/class_csvimport.inc:279 +#: plugins/addons/ldapmanager/class_csvimport.inc:284 +#: plugins/addons/ldapmanager/class_import.inc:49 +#: plugins/addons/ldapmanager/class_import.inc:57 +msgid "There is no file uploaded." +msgstr "Pas de fichier téléchargé." + +#: plugins/addons/ldapmanager/class_csvimport.inc:273 +#: plugins/addons/ldapmanager/class_import.inc:42 +msgid "The specified file is empty." +msgstr "Le fichier spécifié est vide." + +#: plugins/addons/ldapmanager/class_csvimport.inc:401 +msgid "The selected file does not contain any CSV Data..." +msgstr "Le fichier spécifié ne contient pas de données CSV valide..." + +#: plugins/addons/ldapmanager/contentimport.tpl:3 +msgid "" +"The LDIF import plugin provides methods to upload a set of entries to your " +"running LDAP directory as ldif. You may use this to add new or modify " +"existing entries. Remember that GOsa will not check your ldifs for GOsa " +"conformance." +msgstr "" +"L'extension d'exportation/importation au format LDIF permet exporter/" +"importer une copie complète de l'annuaire LDAP. Ces fichiers peuvent être " +"utilisés à des fins de sauvegarde ou lors de la mise en place d'un nouveau serveur. Rappelez vous que GOsa ne vérifiera pas vos ldifs par rapport à GOsa." + +#: plugins/addons/ldapmanager/contentimport.tpl:13 +msgid "Import LDIF File" +msgstr "Importation d'un fichier LDIF" + +#: plugins/addons/ldapmanager/contentimport.tpl:18 +#: plugins/addons/ldapmanager/contentcsv.tpl:15 +msgid "Browse" +msgstr "Parcourir" + +#: plugins/addons/ldapmanager/contentimport.tpl:31 +msgid "Modify existing attributes" +msgstr "Modifier les attributs existants" + +#: plugins/addons/ldapmanager/contentimport.tpl:44 +msgid "Overwrite existing entry" +msgstr "Récrire cette entrée" + +#: plugins/addons/ldapmanager/contentimport.tpl:54 +msgid "Import successfull" +msgstr "Importation réussie" + +#: plugins/addons/ldapmanager/contentcsv.tpl:2 +msgid "" +"The CSV import plugin provides methods to generate user accounts from a file " +"containing Comma Seperated Values. The administrator can decide which " +"columns should be transfered to which attribute. Note that you must have at " +"least the UID, GIVENNAME and SURENAME set." +msgstr "L'extension CSV permet de générer des comptes utilisateurs depuis un fichier contenant des valeurs séparées par des virgules. L'administrateur peut choisir quelle colonne doivent être transférées vers quel attribut. Notez que vous devez au moins avoir le UID, GIVENNAME et SURENAME fournis." + +#: plugins/addons/ldapmanager/contentcsv.tpl:11 +msgid "Select CSV file to import" +msgstr "Sélectionnez le fichier CSV à importer" + +#: plugins/addons/ldapmanager/contentcsv.tpl:23 +msgid "Select template" +msgstr "Sélectionnez le modèle" + +#: plugins/addons/ldapmanager/contentcsv.tpl:38 +msgid "All entries have been written to the LDAP database successfully." +msgstr "Toutes les entrées on été écrites correctement dans l'arbre LDAP." + +#: plugins/addons/ldapmanager/contentcsv.tpl:40 +msgid "Oups. There was an error during the import of your data." +msgstr "Oups. Il à eu une erreur lors de l'importation de vos données." + +#: plugins/addons/ldapmanager/contentcsv.tpl:43 +msgid "Here is the status report for the import:" +msgstr "Voici le rapport de l'état de votre importation:" + +#: plugins/addons/ldapmanager/contentcsv.tpl:91 +msgid "Selected Template" +msgstr "Sélectionnez le modèle" + +#: plugins/addons/ldapmanager/class_import.inc:95 +msgid "Unknown Error" +msgstr "Erreur Inconnue" + +#: plugins/addons/ldapmanager/contentexport.tpl:3 +msgid "" +"The LDIF export plugin provides methods to download a complete snapshot of " +"the running LDAP directory as ldif. You may save these files for backup " +"purpose or when initializing a new server." +msgstr "L'extension d'exportation au format LDIF permet d'exporter une copie complète de l'annuaire LDAP. Ces fichiers peuvent être utilisés à des fins de sauvegarde ou lors de la mise en place d'un nouveau serveur." + +#: plugins/addons/ldapmanager/contentexport.tpl:13 +msgid "Export single entry" +msgstr "Exporter une seule entrée" + +#: plugins/addons/ldapmanager/contentexport.tpl:24 +msgid "Export complete LDIF for" +msgstr "Exporter un fichier LDIF complet pour " + +#: plugins/addons/ldapmanager/contentexport.tpl:27 +#: plugins/addons/ldapmanager/contentexport.tpl:42 +msgid "Choose the department you want to Export" +msgstr "Choisissez le département que vous voulez exporter" + +#: plugins/addons/ldapmanager/contentexport.tpl:39 +msgid "Export IVBB LDIF for" +msgstr "Exporter un IVBB LDIF de" + +#: plugins/addons/ldapmanager/contentexport.tpl:59 +msgid "Export successfull" +msgstr "Exportation réussie" + +#: plugins/addons/ldapmanager/contentexport.tpl:63 +msgid "Click here to save the complete LDAP database to a file" +msgstr "Cliquez ici pour sauvegarder l'arbre LDAP dans un fichier" + +#: plugins/addons/ldapmanager/contentexport.tpl:63 +msgid "Click here to save the LDAP Export " +msgstr "Cliquez ici pour exporter l'arbre LDAP " + +#: plugins/addons/ldapmanager/class_ldif.inc:7 +#: plugins/addons/ldapmanager/main.inc:23 +msgid "LDAP manager" +msgstr "Manager LDAP" + +#: plugins/addons/ldapmanager/class_export.inc:7 +msgid "LDIF CSV import" +msgstr "Exportation LDIF CSV" + +#: plugins/addons/ldapmanager/class_export.inc:72 +msgid "Error while exporting the requested entries!" +msgstr "Une erreur s'est produite lors de l'exportation!" + +#: plugins/addons/logview/class_logview.inc:6 +msgid "System logs" +msgstr "Logs systèmes" + +#: plugins/addons/logview/class_logview.inc:36 +msgid "No LOG servers defined!" +msgstr "Pas de LOG serveurs définis!" + +#: plugins/addons/logview/class_logview.inc:43 +#: plugins/addons/logview/class_logview.inc:131 +msgid "Can't connect to log database, no logs can be shown!" +msgstr "" +"Impossible de se connecter à la base de données des logs, aucun log ne peut " +"être affiché!" + +#: plugins/addons/logview/class_logview.inc:47 +#: plugins/addons/logview/class_logview.inc:135 +msgid "Can't select log database for log generation!" +msgstr "" +"Impossible de sélectionner la base de données des logs afin de générer les " +"logs!" + +#: plugins/addons/logview/class_logview.inc:56 +#: plugins/addons/logview/class_logview.inc:70 +#: plugins/addons/logview/class_logview.inc:208 +msgid "Query for log database failed!" +msgstr "La requête sur la base de données des logs a échoué!" + +#: plugins/addons/logview/class_logview.inc:80 +msgid "one hour" +msgstr "Une heure" + +#: plugins/addons/logview/class_logview.inc:80 +msgid "6 hours" +msgstr "6 heures" + +#: plugins/addons/logview/class_logview.inc:81 +msgid "12 hours" +msgstr "12 heures" + +#: plugins/addons/logview/class_logview.inc:81 +msgid "24 hours" +msgstr "24 heures" + +#: plugins/addons/logview/class_logview.inc:82 +msgid "2 days" +msgstr "2 jours" + +#: plugins/addons/logview/class_logview.inc:82 +msgid "one week" +msgstr "une semaine" + +#: plugins/addons/logview/class_logview.inc:83 +msgid "2 weeks" +msgstr "2 semaines" + +#: plugins/addons/logview/class_logview.inc:83 +msgid "one month" +msgstr "un mois" + +#: plugins/addons/logview/contents.tpl:12 +msgid "Show hosts" +msgstr "Afficher les machines" + +#: plugins/addons/logview/contents.tpl:20 +msgid "Log level" +msgstr "Log Level" + +#: plugins/addons/logview/contents.tpl:37 +msgid "Time interval" +msgstr "Intervalle de temps" + +#: plugins/addons/logview/contents.tpl:46 +msgid "Enter string to search for" +msgstr "Entrée la chaîne de caractères à chercher" + +#: plugins/addons/logview/contents.tpl:58 +msgid "Ruleset" +msgstr "Ensemble de Règles" + +#: plugins/addons/logview/contents.tpl:81 +msgid "Level" +msgstr "Niveau" + +#: plugins/addons/logview/contents.tpl:82 +msgid "Hostname" +msgstr "Nom d'hôte" + +#: plugins/addons/logview/contents.tpl:84 +msgid "Message" +msgstr "Message" + +#: plugins/addons/logview/main.inc:23 +msgid "System log view" +msgstr "Affichage des logs système" + +#: plugins/admin/groups/class_groupGeneric.inc:109 +msgid "Can't find this groups SID in LDAP or in your configuration file!" +msgstr "" +"Impossible de trouver le SID de ce groupe dans l'annuaire LDAP ou dans le " +"fichier de configuration!" + +#: plugins/admin/groups/class_groupGeneric.inc:141 +msgid "This 'dn' is no group." +msgstr "Ce 'dn' n'est pas un groupe." + +#: plugins/admin/groups/class_groupGeneric.inc:252 +msgid "Samba group" +msgstr "Groupe Samba" + +#: plugins/admin/groups/class_groupGeneric.inc:252 +msgid "Domain admins" +msgstr "Administrateurs du domaine" + +#: plugins/admin/groups/class_groupGeneric.inc:252 +msgid "Domain users" +msgstr "Utilisateurs du domaine" + +#: plugins/admin/groups/class_groupGeneric.inc:253 +msgid "Domain guests" +msgstr "Invités du domaine" + +#: plugins/admin/groups/class_groupGeneric.inc:258 +#, php-format +msgid "Special group (%d)" +msgstr "Groupe spécial (%d)" + +#: plugins/admin/groups/class_groupGeneric.inc:570 +#: plugins/admin/ogroups/class_ogroup.inc:484 +msgid "You have no permissions to create a group on this 'Base'." +msgstr "Vous n'avez pas l'autorisation de créer un groupe dans cette 'Base'." + +#: plugins/admin/groups/class_groupGeneric.inc:580 +msgid "" +"The field 'Name' contains invalid characters. Lowercase, numbers and dashes " +"are allowed." +msgstr "" +"Le champ 'Name' contient des caratères invalides. Minuscule, chiffre et " +"tirets sont valides." + +#: plugins/admin/groups/class_groupGeneric.inc:588 +msgid "Value specified as 'Name' is already used." +msgstr "La valeur spécifiée dans le champs 'Name' existe déjà." + +#: plugins/admin/groups/mail.tpl:11 +msgid "Primary mail address for this shared folder" +msgstr "Adresse mail principale pour ce répertoire partagé" + +#: plugins/admin/groups/mail.tpl:16 +msgid "Select mail server to place user on" +msgstr "Sélectionner le serveur de mail sur lequel sera créé l'utilisateur" + +#: plugins/admin/groups/mail.tpl:64 +msgid "IMAP shared folders" +msgstr "Répertoire partagé IMAP" + +#: plugins/admin/groups/mail.tpl:68 +msgid "Default permission" +msgstr "Permission par défaut" + +#: plugins/admin/groups/mail.tpl:76 +msgid "Member permission" +msgstr "Permission des membres" + +#: plugins/admin/groups/mail.tpl:91 +msgid "Forward messages to non group members" +msgstr "Transférer les messages vers un membre n'appartenant pas au groupe" + +#: plugins/admin/groups/headpage.tpl:6 plugins/admin/ogroups/headpage.tpl:6 +msgid "List of groups" +msgstr "Liste des groupes" + +#: plugins/admin/groups/headpage.tpl:29 plugins/admin/ogroups/headpage.tpl:29 +msgid "" +"This menu allows to add, edit or remove selected groups. You may want to use " +"the range selector on top of the group listbox, when working with a large " +"number of groups." +msgstr "" +"Ce menu permet d'ajouter, de modifier ou de supprimer les groupes " +"sélectionnés. Vous pouvez utiliser les différents filtres lorsque vous " +"travaillez avec un nombre élevé de groupes." + +#: plugins/admin/groups/headpage.tpl:32 plugins/admin/ogroups/headpage.tpl:32 +msgid "" +"-Edit- and -New group- will execute an assistant to aid you in editing group " +"properties.-Delete- will ask for confirmation before removing groups." +msgstr "" +"-Editer- et -Nouveau- lancera un assistant vous aidant dans la modification " +"des propriétés. -Supprimer- vous demandera confirmation avant d'exécuter " +"l'opération." + +#: plugins/admin/groups/headpage.tpl:53 plugins/admin/users/headpage.tpl:57 +msgid "Dive into LDAP subtrees when searching" +msgstr "Descendre dans les sous arbres LDAP lors d'une recherche" + +#: plugins/admin/groups/headpage.tpl:53 plugins/admin/users/headpage.tpl:57 +msgid "Search in subtrees" +msgstr "Rechercher dans les sous arbres" + +#: plugins/admin/groups/main.inc:39 plugins/admin/groups/main.inc:43 +msgid "Group administration" +msgstr "Administration du groupe" + +#: plugins/admin/groups/class_groupManagement.inc:25 +#: plugins/admin/ogroups/class_ogroupManagement.inc:42 +msgid "Groups" +msgstr "Groupes" + +#: plugins/admin/groups/class_groupManagement.inc:202 +#, php-format +msgid "You're about to delete the group '%s'." +msgstr "Vous êtes sur le point de supprimer le groupe '%s'." + +#: plugins/admin/groups/class_groupManagement.inc:208 +#: plugins/admin/groups/class_groupManagement.inc:234 +msgid "You are not allowed to delete this group!" +msgstr "Vous n'êtes pas autorisé à supprimer ce groupe!" + +#: plugins/admin/groups/remove.tpl:7 +msgid "" +"This may be a primary user group. Please double check if you really want to " +"do this since there is no way for GOsa to get your data back." +msgstr "" +"Ce groupe est un groupe principal contenant des utilisateurs. Veuillez vous " +"assurez que vous voulez bien exécuter cette action. Toutes les données " +"seront perdues étant donné qu'il est impossible pour GOsa de récupérer vos " +"données." + +#: plugins/admin/groups/application_options.tpl:1 +msgid "Application options" +msgstr "Options des applications" + +#: plugins/admin/groups/class_groupMail.inc:153 +msgid "read" +msgstr "lecture" + +#: plugins/admin/groups/class_groupMail.inc:154 +msgid "post" +msgstr "envoyer" + +#: plugins/admin/groups/class_groupMail.inc:155 +msgid "external post" +msgstr "envoi externe" + +#: plugins/admin/groups/class_groupMail.inc:156 +msgid "append" +msgstr "ajouter" + +#: plugins/admin/groups/class_groupMail.inc:157 +msgid "write" +msgstr "écrire" + +#: plugins/admin/groups/class_groupMail.inc:179 +msgid "This 'dn' has no valid mail extensions." +msgstr "Ce 'dn' n'a pas d'extension mail valide." + +#: plugins/admin/groups/class_groupMail.inc:244 +msgid "You're trying to add an invalid email address " +msgstr "Vous essayez d'ajouter une adresse mail non valide " + +#: plugins/admin/groups/class_groupMail.inc:245 +msgid "to the list of forwarders." +msgstr "liste des personnes vers lesquelles les mails seront relayés." + +#: plugins/admin/groups/class_groupMail.inc:613 +msgid "Please enter a valid email addres in 'Primary address' field." +msgstr "Veuillez entrer une adresse mail valide dans le champ 'Primary address'." + +#: plugins/admin/groups/acl.tpl:4 +msgid "Object" +msgstr "Objet" + +#: plugins/admin/groups/acl.tpl:17 +msgid "Apply this acl only for users own entries" +msgstr "Appliquer cet ACL uniquement pour l'entrée de l'utilisateur" + +#: plugins/admin/groups/application.tpl:4 +msgid "Used applications" +msgstr "Applications utilisées" + +#: plugins/admin/groups/application.tpl:10 +msgid "Edit parameters" +msgstr "Editer les paramètres" + +#: plugins/admin/groups/application.tpl:10 +msgid "Edit optional application parameters" +msgstr "Editer les options de l'application" + +#: plugins/admin/groups/application.tpl:20 +msgid "Available applications" +msgstr "Applications disponibles" + +#: plugins/admin/groups/group_objects.tpl:6 +msgid "Select users to add" +msgstr "Sélectionnez les utilisateurs à ajouter" + +#: plugins/admin/groups/group_objects.tpl:29 +#: plugins/admin/users/headpage.tpl:60 +msgid "Display users of department" +msgstr "Afficher les utilisateurs du département" + +#: plugins/admin/groups/group_objects.tpl:35 +#: plugins/admin/users/headpage.tpl:66 +msgid "Display users matching" +msgstr "Afficher les utilisateurs correspondants" + +#: plugins/admin/groups/group_objects.tpl:36 +#: plugins/admin/users/headpage.tpl:67 +msgid "Regular expression for matching user names" +msgstr "Expression régulière concordant avec les noms des utilisateurs" + +#: plugins/admin/groups/class_groupAcl.inc:54 +msgid "This 'dn' is no acl container." +msgstr "Ce 'dn' n'est pas un conteneur pour les acls." + +#: plugins/admin/groups/class_groupAcl.inc:199 +msgid "All fields are writeable" +msgstr "Tous les champs sont modifiables" + +#: plugins/admin/groups/generic.tpl:7 plugins/admin/ogroups/generic.tpl:7 +msgid "Group name" +msgstr "Nom du groupe" + +#: plugins/admin/groups/generic.tpl:9 +msgid "Posix name of the group" +msgstr "Nom posix du groupe" + +#: plugins/admin/groups/generic.tpl:14 plugins/admin/ogroups/generic.tpl:14 +msgid "Descriptive text for this group" +msgstr "Description du groupe" + +#: plugins/admin/groups/generic.tpl:23 plugins/admin/ogroups/generic.tpl:23 +msgid "Choose subtree to place group in" +msgstr "Sélectionnez la branche où sera placée le groupe" + +#: plugins/admin/groups/generic.tpl:36 +msgid "Normally IDs are autogenerated, select to specify manually" +msgstr "" +"Normalement les IDs sont générés automatiquement, vous pouvez en spécifié un " +"manuellement" + +#: plugins/admin/groups/generic.tpl:36 +msgid "Force GID" +msgstr "Forcer le GID" + +#: plugins/admin/groups/generic.tpl:38 +msgid "Forced ID number" +msgstr "Forcer l'ID" + +#: plugins/admin/groups/generic.tpl:45 +msgid "Select to create a samba conform group" +msgstr "Sélectionnez afin de créer un groupe samba" + +#: plugins/admin/groups/generic.tpl:50 +msgid "in domain" +msgstr "dans le domaine" + +#: plugins/admin/groups/generic.tpl:66 +msgid "Members are in a phone pickup group" +msgstr "Les membres sont dans un groupe téléphonique" + +#: plugins/admin/groups/generic.tpl:81 +msgid "Group members" +msgstr "Membre du groupe" + +#: plugins/admin/groups/mail_admins.tpl:4 +msgid "Folder administrators" +msgstr "Administrateurs du répertoire" + +#: plugins/admin/groups/class_groupApplication.inc:61 +msgid "This 'dn' is no appgroup." +msgstr "Ce 'dn' n'est pas un groupe d'applications." + +#: plugins/admin/groups/class_groupApplication.inc:69 +msgid "Remove applications" +msgstr "Suppression d'applications" + +#: plugins/admin/groups/class_groupApplication.inc:70 +msgid "" +"This group has application features enabled. You can disable them by " +"clicking below." +msgstr "" +"Des applications sont configurées pour ce groupe. Vous pouvez les désactivez " +"en cliquant sur le bouton ci-dessous." + +#: plugins/admin/groups/class_groupApplication.inc:72 +msgid "Create applications" +msgstr "Créer des applications" + +#: plugins/admin/groups/class_groupApplication.inc:73 +msgid "" +"This group has application features disabled. You can enable them by " +"clicking below." +msgstr "" +"Ce groupe ne possède pas d'applications configurées. Vous pouvez en ajouter " +"en cliquant sur le bouton ci-dessous." + +#: plugins/admin/groups/class_groupApplication.inc:107 +msgid "The selected application name is not uniq. Please check your LDAP." +msgstr "Le nom de l'application n'est pas unique. Veuillez vérifier l'annuaire LDAP." + +#: plugins/admin/groups/class_groupApplication.inc:143 +msgid "The selected application has no options." +msgstr "L'application sélectionnée n'a pas d'options." + +#: plugins/admin/users/password.tpl:2 +msgid "" +"To change the user password use the fields below. The changes take effect " +"immediately. Please memorize the new password, because the user would't be " +"able to login without it." +msgstr "" +"Pour changer le mot de passe des utilisateurs, utilisez le champ ci-dessous. " +"Les changements prennent effet immédiatement. Veuillez mémoriser le nouveau " +"mot de passe sinon l'utilisateur ne pourra pas s'identifier sans celui-ci." + +#: plugins/admin/users/template.tpl:2 +msgid "Creating a new user using templates" +msgstr "Créer un nouvel utilisateur à partir d'un modèle" + +#: plugins/admin/users/template.tpl:6 +msgid "" +"Creating a new user can be assisted by using templates. Many database " +"records will be filled automatically. Choose none to skip the usage " +"of templates." +msgstr "" +"La création d'un nouvel utilisateur peut être facilité en utilisant les " +"modèles. De nombreuses informations seront ainsi remplies automatiquement. " +"Sélectionnez aucun afin de ne pas utiliser les modèles." + +#: plugins/admin/users/template.tpl:11 +#: plugins/admin/users/class_userManagement.inc:614 +msgid "Template" +msgstr "Modèle" + +#: plugins/admin/users/template.tpl:46 +#: ihtml/themes/altlinux/setup_introduction.tpl:10 +#: ihtml/themes/altlinux/setup_step2.tpl:16 +#: ihtml/themes/altlinux/setup_step3.tpl:12 +#: ihtml/themes/default/setup_introduction.tpl:11 +#: ihtml/themes/default/setup_step2.tpl:18 +#: ihtml/themes/default/setup_step3.tpl:15 +msgid "Continue" +msgstr "Continuer" + +#: plugins/admin/users/main.inc:40 plugins/admin/users/main.inc:46 +msgid "User administration" +msgstr "Administration des utilisateurs" + +#: plugins/admin/users/class_userManagement.inc:25 +msgid "Users" +msgstr "Utilisateurs" + +#: plugins/admin/users/class_userManagement.inc:157 +#: plugins/admin/users/class_userManagement.inc:208 +msgid "You are not allowed to set this users password!" +msgstr "Vous n'êtes pas autorisé à indiquer un mot de passe pour cet utilisateur!" + +#: plugins/admin/users/class_userManagement.inc:244 +#, php-format +msgid "You're about to delete the user %s." +msgstr "Vous êtes sur le point de supprimer l'utilisateur %s." + +#: plugins/admin/users/class_userManagement.inc:250 +#: plugins/admin/users/class_userManagement.inc:278 +msgid "You are not allowed to delete this user!" +msgstr "Vous n'êtes pas autorisé à supprimer cette utilisateur!" + +#: plugins/admin/users/class_userManagement.inc:365 +#: plugins/admin/ogroups/class_ogroup.inc:202 +msgid "none" +msgstr "aucun" + +#: plugins/admin/users/class_userManagement.inc:431 +msgid "A person with the choosen name is already used in this tree." +msgstr "Une personne ayant ce nom existe déjà dans l'annuaire." + +#: plugins/admin/users/remove.tpl:7 +msgid "" +"This includes all account data, system access rules, imap settings, etc. for " +"this user. Please double check if your really want to do this since there is " +"no way for GOsa to get your data back." +msgstr "" +"Cela inclut toutes les données des comptes, les droits d'accès, la " +"configuration imap,etc. pour cet utilisateur. Veuillez vous assurez que vous " +"voulez effectuez cette opération. Toutes les données seront perdues étant " +"donné qu'il est impossible pour GOsa de récupérer vos données." + +#: plugins/admin/users/headpage.tpl:6 +msgid "List of users" +msgstr "Liste des utilisateurs" + +#: plugins/admin/users/headpage.tpl:16 +msgid "New template" +msgstr "Nouveau modèle" + +#: plugins/admin/users/headpage.tpl:30 +msgid "" +"This menu provides the functionality to create, edit or delete selected " +"users. Having a great number of users, you may want to use the range " +"seletors on top of the user list." +msgstr "" +"Ce menu permet d'ajouter, modifier ou supprimer l'utilisateur sélectionné. " +"Si vous avez un grand nombre d'utilisateurs il est conseillé d'utiliser les " +"filtres." + +#: plugins/admin/users/headpage.tpl:33 +msgid "" +"-Edit- and -New user- execute an assistant to aid you in managing your " +"account informations. -Delete- will ask for confirmation before deleting the " +"users from the LDAP server." +msgstr "" +"-Editer- et -Nouveau- lancera un assistant vous aidant dans la gestion des " +"comptes. -Supprimer- vous demandera confirmation avant d'exécuter " +"l'opération." + +#: plugins/admin/users/headpage.tpl:47 +msgid "Select to see template pseudo users" +msgstr "Sélectionnez afin d'afficher la liste des modèles utilisateurs" + +#: plugins/admin/users/headpage.tpl:47 +msgid "Show templates" +msgstr "Afficher les modèles" + +#: plugins/admin/users/headpage.tpl:48 +msgid "Select to see users that have only a GOsa object" +msgstr "Sélectionnez afin d'afficher les utilisateurs qui ont seulement un objet GOsa" + +#: plugins/admin/users/headpage.tpl:48 +msgid "Show functional users" +msgstr "Afficher les utilisateurs fonctionnels" + +#: plugins/admin/users/headpage.tpl:49 +msgid "Select to see users that have posix settings" +msgstr "Sélectionnez afin d'afficher les utilisateurs ayant un compte posix" + +#: plugins/admin/users/headpage.tpl:49 +msgid "Show unix users" +msgstr "Afficher les utilisateurs Unix" + +#: plugins/admin/users/headpage.tpl:50 +msgid "Select to see users that have mail settings" +msgstr "Sélectionnez afin d'afficher les utilisateurs ayant un compte email" + +#: plugins/admin/users/headpage.tpl:50 +msgid "Show mail users" +msgstr "Afficher les utilisateurs email" + +#: plugins/admin/users/headpage.tpl:51 +msgid "Select to see users that have samba settings" +msgstr "Sélectionnez afin d'afficher les utilisateurs ayant un compte samba" + +#: plugins/admin/users/headpage.tpl:51 +msgid "Show samba users" +msgstr "Afficher les utilisateurs samba" + +#: plugins/admin/users/headpage.tpl:52 +msgid "Select to see users that have proxy settings" +msgstr "Sélectionnez afin d'afficher les utilisateurs ayant un compte proxy" + +#: plugins/admin/users/headpage.tpl:52 +msgid "Show proxy users" +msgstr "Afficher les utilisateurs proxy" + +#: plugins/admin/users/headpage.tpl:53 +msgid "Select to see users that have ftp settings" +msgstr "Sélectionnez afin d'afficher les utilisateurs ayant un compte ftp" + +#: plugins/admin/users/headpage.tpl:53 +msgid "Show FTP users" +msgstr "Afficher les utilisateurs FTP" + +#: plugins/admin/users/headpage.tpl:54 +msgid "Select to see users that have FAX settings" +msgstr "Sélectionnez afin d'afficher les utilisateurs ayant un compte FAX" + +#: plugins/admin/users/headpage.tpl:54 +msgid "Show FAX users" +msgstr "Afficher les utilisateurs du FAX" + +#: plugins/admin/applications/generic.tpl:7 +#: plugins/admin/applications/generic.tpl:8 +msgid "Application name" +msgstr "Nom de l'application" + +#: plugins/admin/applications/generic.tpl:12 +#: plugins/admin/systems/server.tpl:48 plugins/admin/systems/terminal.tpl:109 +#: plugins/admin/systems/workstation.tpl:109 +#: plugins/admin/ogroups/termgroup.tpl:13 +msgid "Execute" +msgstr "Exécuter" + +#: plugins/admin/applications/generic.tpl:14 +msgid "Path and/or binary name of application" +msgstr "Chemin et/ou le nom de l'exécutable de l'application" + +#: plugins/admin/applications/generic.tpl:18 +msgid "Display name" +msgstr "Afficher le nom" + +#: plugins/admin/applications/generic.tpl:20 +msgid "Application name to be displayed (i.e. below icons)" +msgstr "Le nom de l'application à afficher (ex: nom des icônes)" + +#: plugins/admin/applications/generic.tpl:35 +msgid "Choose subtree to place application in" +msgstr "" +"Sélectionner la branche de l'annuaire ou sera placée l'entrée de " +"l'application" + +#: plugins/admin/applications/generic.tpl:46 +msgid "Icon" +msgstr "Icône" + +#: plugins/admin/applications/generic.tpl:51 +msgid "Update" +msgstr "Mise à Jour" + +#: plugins/admin/applications/generic.tpl:51 +msgid "Reload picture from LDAP" +msgstr "Recharger l'image à partir de l'annuaire LDAP" + +#: plugins/admin/applications/generic.tpl:61 +msgid "Only executable for members" +msgstr "Exécutable uniquement par les membres" + +#: plugins/admin/applications/generic.tpl:63 +msgid "Replace user configuration on startup" +msgstr "Remplacer la configuration de l'utilisateur au démarrage" + +#: plugins/admin/applications/generic.tpl:67 +msgid "Place icon on members desktop" +msgstr "Placer une icône sur le bureau des membres" + +#: plugins/admin/applications/generic.tpl:70 +msgid "Place entry in members startmenu" +msgstr "Placer une entrée dans le menu démarrage des membres" + +#: plugins/admin/applications/class_applicationParameters.inc:47 +msgid "Remove options" +msgstr "Supprimer les options" + +#: plugins/admin/applications/class_applicationParameters.inc:48 +msgid "This application has options. You can disable them by clicking below." +msgstr "" +"Cette application a des options. Vous pouvez les désactiver en cliquant sur " +"le bouton ci-dessous." + +#: plugins/admin/applications/class_applicationParameters.inc:50 +msgid "Create options" +msgstr "Créer des options" + +#: plugins/admin/applications/class_applicationParameters.inc:51 +msgid "This application has options disabled. You can enable them by clicking below." +msgstr "" +"Cette application a des options désactivées. Vous pouvez les activer en " +"cliquant en-dessous." + +#: plugins/admin/applications/class_applicationParameters.inc:87 +msgid "Variable" +msgstr "Variable" + +#: plugins/admin/applications/class_applicationParameters.inc:87 +msgid "Default value" +msgstr "Valeur par défaut" + +#: plugins/admin/applications/class_applicationParameters.inc:98 +msgid "Add option" +msgstr "Ajouter une option" + +#: plugins/admin/applications/class_applicationParameters.inc:149 +#, php-format +msgid "Value '%s' specified as option name is not valid." +msgstr "La valeur '%s' spécifiée pour le nom de l'option est invalide." + +#: plugins/admin/applications/remove.tpl:7 +msgid "" +"This may be used by several groups. Please double check if your really want " +"to do this since there is no way for GOsa to get your data back." +msgstr "" +"Cela peut être utilisé par plusieurs groupes. Veuillez vérifier que vous " +"voulez effectuer cette opération. Toutes les données seront perdues étant " +"donné qu'il est impossible pour GOsa de récupérer vos données." + +#: plugins/admin/applications/headpage.tpl:6 +msgid "List of applications" +msgstr "Liste des applications" + +#: plugins/admin/applications/headpage.tpl:28 +msgid "" +"This menu allows to add, edit or remove selected applications. You may want " +"to use the range selector on top of the application listbox, when working " +"with a large number of applications." +msgstr "" +"Ce menu permet l'ajout, la suppression et la modification des applications " +"sélectionnées. Vous pouvez utiliser les filtres lorsque vous travaillez avec " +"un grand nombre d'applications." + +#: plugins/admin/applications/headpage.tpl:31 +msgid "" +"-Edit- and -New application- will execute an assistant to aid you in editing " +"properties. -Delete- will ask for confirmation before removing applications." +msgstr "" +"-Editer- et -Nouvelle application- lancera un assistant vous aidant dans la " +"modification des propriétés. -Supprimer- vous demandera confirmation avant " +"d'exécuter l'opération." + +#: plugins/admin/applications/headpage.tpl:45 +msgid "Display applications of department" +msgstr "Afficher les applications d'un département" + +#: plugins/admin/applications/headpage.tpl:51 +msgid "Display applications matching" +msgstr "Afficher les applications correspondantes" + +#: plugins/admin/applications/headpage.tpl:52 +msgid "Regular expression for matching application names" +msgstr "Expression régulière pour faire correspondre le nom des applications" + +#: plugins/admin/applications/main.inc:38 +#: plugins/admin/applications/main.inc:40 +msgid "Application management" +msgstr "Configuration des applications" + +#: plugins/admin/applications/class_applicationManagement.inc:185 +#, php-format +msgid "You're about to delete the application '%s'." +msgstr "Vous êtes sur le point de supprimer l'application '%s'." + +#: plugins/admin/applications/class_applicationManagement.inc:191 +#: plugins/admin/applications/class_applicationManagement.inc:217 +msgid "You are not allowed to delete this application!" +msgstr "Vous n'êtes pas autorisé à supprimer cette application!" + +#: plugins/admin/applications/class_applicationGeneric.inc:57 +msgid "This 'dn' is no application." +msgstr "Ce 'dn' n'est pas une application." + +#: plugins/admin/applications/class_applicationGeneric.inc:148 +msgid "The specified picture has not been uploaded correctly." +msgstr "L'image spécifiée n'as pas été téléchargée correctement." + +#: plugins/admin/applications/class_applicationGeneric.inc:180 +msgid "You have no permissions to create a application on this 'Base'." +msgstr "" +"Vous n'avez pas les droits suffisants pour créer une application dans cette " +"'Base'." + +#: plugins/admin/applications/class_applicationGeneric.inc:185 +msgid "Required field 'Name' is not filled." +msgstr "Le champ obligatoire 'Name' n'est pas rempli." + +#: plugins/admin/applications/class_applicationGeneric.inc:188 +msgid "Required field 'Execute' is not filled." +msgstr "Le champ obligatoire 'Execute' n'est pas rempli." + +#: plugins/admin/applications/class_applicationGeneric.inc:197 +msgid "There's already an application with this 'Name'." +msgstr "Une application ayant le même 'Name' existe déjà." + +#: plugins/admin/departments/generic.tpl:4 +#: plugins/admin/systems/terminal.tpl:1 +#: plugins/admin/systems/workstation.tpl:1 +msgid "Properties" +msgstr "Propriétés" + +#: plugins/admin/departments/generic.tpl:8 +msgid "Name of department" +msgstr "Nom du département" + +#: plugins/admin/departments/generic.tpl:9 +msgid "Name of subtree to create" +msgstr "Nom de la branche à créer" + +#: plugins/admin/departments/generic.tpl:14 +msgid "Descriptive text for department" +msgstr "Description du département" + +#: plugins/admin/departments/generic.tpl:18 +msgid "Category" +msgstr "Catégorie" + +#: plugins/admin/departments/generic.tpl:20 +msgid "Category for this subtree" +msgstr "Catégorie pour cette branche de l'annuaire" + +#: plugins/admin/departments/generic.tpl:30 +msgid "Choose subtree to place department in" +msgstr "" +"Sélectionnez la branche de l'annuaire dans laquelle sera placée le " +"département" + +#: plugins/admin/departments/generic.tpl:47 +msgid "State where this subtree is located" +msgstr "Lieu où est située cette branche de l'annuaire" + +#: plugins/admin/departments/generic.tpl:51 +msgid "Location of this subtree" +msgstr "Localisation de cette branche LDAP" + +#: plugins/admin/departments/generic.tpl:55 +msgid "Postal address of this subtree" +msgstr "Adresse postale de cette branche" + +#: plugins/admin/departments/generic.tpl:59 +#, fuzzy +msgid "Base telephone number of this subtree" +msgstr "Numéro de téléphone de base pour cette branche" + +#: plugins/admin/departments/generic.tpl:63 +#, fuzzy +msgid "Base facsimile telephone number of this subtree" +msgstr "Numéro de fax de base pour cette branche" + +#: plugins/admin/departments/remove.tpl:7 +msgid "" +"This includes all accounts, systems, etc. in this subtree. Please " +"double check if your really want to do this since there is no way for GOsa " +"to get your data back." +msgstr "" +"Ceci inclus tous les comptes systèmes, etc... dans cette branche. " +"Veuillez vérifier si vous voulez réaliser cette opération. Toutes les " +"données seront perdues, étant donné qu'il est impossible pour GOsa de " +"récupérer vos données." + +#: plugins/admin/departments/remove.tpl:11 plugins/admin/systems/remove.tpl:11 +msgid "" +"Best thing to do before performing this action would be to save the current " +"contents of your LDAP tree in a file. So - if you've done so - press " +"Delete to continue or Cancel to abort." +msgstr "" +"Il est conseillé de sauvegarder l'arbre de votre annuaire LDAP dans un " +"fichier avant de réaliser cette action. Appuyez sur Supprimer pour " +"continuer ou Annuler pour abandonner." + +#: plugins/admin/departments/headpage.tpl:6 +msgid "List of departments" +msgstr "Liste des départements" + +#: plugins/admin/departments/headpage.tpl:28 +msgid "" +"This menu allows to create, delete and edit selected departments. Having a " +"large size of departments, you might prefer the range selectors on top of " +"the department list." +msgstr "" +"Ce menu vous permet de d'ajouter, supprimer et éditer les départements " +"sélectionnés. Vous pouvez utiliser les filtres lorsque vous travaillez avec " +"un grand nombre de départements." + +#: plugins/admin/departments/headpage.tpl:31 +msgid "" +"-Edit- and -New department- will provide an assistant to aid you when " +"performing changes on your departments. -Delete- will ask you for " +"confirmation before really deleting anything." +msgstr "" +"-Editer- et -Nouveau- lancera un assistant vous aidant dans la modification " +"des propriétés. -Supprimer- vous demandera confirmation avant d'exécuter " +"l'opération." + +#: plugins/admin/departments/headpage.tpl:45 +msgid "Display subdepartments of" +msgstr "Afficher le sous-département de" + +#: plugins/admin/departments/headpage.tpl:51 +msgid "Display departments matching" +msgstr "Afficher les départements correspondants" + +#: plugins/admin/departments/headpage.tpl:52 +msgid "Regular expression for matching department names" +msgstr "Expression régulière pour faire correspondre le nom des applications" + +#: plugins/admin/departments/main.inc:38 plugins/admin/departments/main.inc:40 +msgid "Department management" +msgstr "Configuration des départements" + +#: plugins/admin/departments/class_departmentManagement.inc:25 +#: plugins/admin/ogroups/class_ogroupManagement.inc:43 +msgid "Departments" +msgstr "Départements" + +#: plugins/admin/departments/class_departmentManagement.inc:130 +#, php-format +msgid "You're about to delete the whole LDAP subtree placed under '%s'." +msgstr "" +"Vous êtes sur le point de supprimer la branche complète de l'annuaire LDAP " +"placé sous '%s'." + +#: plugins/admin/departments/class_departmentManagement.inc:145 +msgid "You have no permission to remove this department." +msgstr "Vous n'avez pas les droits nécessaires pour supprimer ce département." + +#: plugins/admin/departments/class_departmentGeneric.inc:127 +msgid "You have no permissions to create a department on this 'Base'." +msgstr "Vous n'avez pas l'autorisation pour créer un département sur cette 'Base'." + +#: plugins/admin/departments/class_departmentGeneric.inc:134 +#: plugins/admin/departments/class_departmentGeneric.inc:136 +msgid "Department with that 'Name' already exists." +msgstr "Un département ayant ce 'Name' existe déjà." + +#: plugins/admin/departments/class_departmentGeneric.inc:144 +msgid "Required field 'Description' is not set." +msgstr "Le champ obligatoire 'Description' n'est pas rempli." + +#: plugins/admin/departments/class_departmentGeneric.inc:149 +msgid "The field 'Name' contains the reserved word 'incoming'." +msgstr "Le champ 'Name' contient le mot réservé 'incoming'." + +#: plugins/admin/departments/class_departmentGeneric.inc:150 +msgid " Please choose another name." +msgstr "Veuillez choisir un autre nom." + +#: plugins/admin/systems/class_terminalInfo.inc:61 +#: plugins/admin/systems/class_terminalService.inc:135 +#: plugins/admin/systems/class_terminalStartup.inc:75 +#: plugins/admin/systems/class_terminalGeneric.inc:126 +msgid "This 'dn' has no terminal features." +msgstr "Ce 'dn' n'a pas d'extension de terminaux." + +#: plugins/admin/systems/class_terminalInfo.inc:68 +msgid "This is a virtual terminal which has no properties to show here." +msgstr "Ceci est un pseudo-terminal, aucune propriété ne peut être affichée." + +#: plugins/admin/systems/class_terminalInfo.inc:80 +msgid "online" +msgstr "en ligne" + +#: plugins/admin/systems/class_terminalInfo.inc:130 +msgid "running" +msgstr "en cours d'exécution" + +#: plugins/admin/systems/class_terminalInfo.inc:133 +msgid "not running" +msgstr "n'est pas en cours d'exécution" + +#: plugins/admin/systems/class_terminalInfo.inc:141 +msgid "unknown status" +msgstr "statut inconnu" + +#: plugins/admin/systems/class_terminalInfo.inc:159 +msgid "offline" +msgstr "hors-ligne" + +#: plugins/admin/systems/network.tpl:1 +msgid "Network settings" +msgstr "Configuration réseau" + +#: plugins/admin/systems/network.tpl:8 +msgid "IP-address" +msgstr "Adresse IP" + +#: plugins/admin/systems/network.tpl:16 +msgid "MAC-address" +msgstr "Adresse MAC" + +#: plugins/admin/systems/info.tpl:1 +msgid "System information" +msgstr "Information sur le système" + +#: plugins/admin/systems/info.tpl:7 +msgid "CPU" +msgstr "CPU" + +#: plugins/admin/systems/info.tpl:10 +msgid "Memory" +msgstr "Mémoire" + +#: plugins/admin/systems/info.tpl:13 +msgid "Boot MAC" +msgstr "Adresse MAC de démarrage" + +#: plugins/admin/systems/info.tpl:16 +msgid "USB support" +msgstr "Support USB" + +#: plugins/admin/systems/info.tpl:19 plugins/admin/systems/info.tpl:87 +msgid "System status" +msgstr "Statut du système" + +#: plugins/admin/systems/info.tpl:23 +msgid "Inventary number" +msgstr "Numéro d'inventaire" + +#: plugins/admin/systems/info.tpl:27 +msgid "Last login" +msgstr "Dernière connexion" + +#: plugins/admin/systems/info.tpl:38 +msgid "Network devices" +msgstr "Périphériques réseau" + +#: plugins/admin/systems/info.tpl:47 +msgid "IDE devices" +msgstr "Périphériques IDE" + +#: plugins/admin/systems/info.tpl:56 +msgid "SCSI devices" +msgstr "Périphériques SCSI" + +#: plugins/admin/systems/info.tpl:64 +msgid "Floppy device" +msgstr "Lecteur de disquette" + +#: plugins/admin/systems/info.tpl:68 +msgid "CDROM device" +msgstr "Lecteur CDROM" + +#: plugins/admin/systems/info.tpl:73 plugins/admin/systems/service.tpl:83 +msgid "Graphic device" +msgstr "Périphérique Graphique" + +#: plugins/admin/systems/info.tpl:77 +msgid "Audio device" +msgstr "Périphérique Audio" + +#: plugins/admin/systems/info.tpl:93 +msgid "Up since" +msgstr "Allumé depuis" + +#: plugins/admin/systems/info.tpl:96 +msgid "CPU load" +msgstr "Charge CPU" + +#: plugins/admin/systems/info.tpl:99 +msgid "Memory usage" +msgstr "Utilisation Mémoire" + +#: plugins/admin/systems/info.tpl:102 +msgid "Swap usage" +msgstr "Utilisation Swap" + +#: plugins/admin/systems/info.tpl:116 +msgid "SSH service" +msgstr "Service SSH" + +#: plugins/admin/systems/info.tpl:119 +msgid "Print service" +msgstr "Service d'impression" + +#: plugins/admin/systems/info.tpl:122 +msgid "Scan service" +msgstr "Service scanner" + +#: plugins/admin/systems/info.tpl:125 +msgid "Sound service" +msgstr "Service Son" + +#: plugins/admin/systems/info.tpl:128 +msgid "GUI" +msgstr "Interface graphique" + +#: plugins/admin/systems/main.inc:45 plugins/admin/systems/main.inc:47 +msgid "System management" +msgstr "Administration du système" + +#: plugins/admin/systems/class_terminalService.inc:82 +msgid "default" +msgstr "défaut" + +#: plugins/admin/systems/class_terminalService.inc:83 +msgid "show chooser" +msgstr "Afficher le sélecteur" + +#: plugins/admin/systems/class_terminalService.inc:84 +msgid "direct" +msgstr "direct" + +#: plugins/admin/systems/class_terminalService.inc:87 +msgid "load balanced" +msgstr "répartition de charge" + +#: plugins/admin/systems/class_terminalService.inc:90 +msgid "Windows RDP" +msgstr "Windows RDP" + +#: plugins/admin/systems/class_terminalService.inc:91 +msgid "ICA client" +msgstr "Client ICA" + +#: plugins/admin/systems/class_terminalService.inc:182 +msgid "Choose the phone located at the current terminal" +msgstr "Choisissez le téléphone situé à coté du terminal" + +#: plugins/admin/systems/class_terminalService.inc:244 +#: plugins/admin/systems/class_terminalService.inc:249 +msgid "Please specify a valid VSync range." +msgstr "" +"Veuillez spécifier une plage valide pour la fréquence de synchronisation " +"verticale." + +#: plugins/admin/systems/class_terminalService.inc:259 +#: plugins/admin/systems/class_terminalService.inc:264 +msgid "Please specify a valid HSync range." +msgstr "" +"Veuillez spécifier une plage valide pour la fréquence de synchronisation " +"Horizontale." + +#: plugins/admin/systems/class_servDB.inc:117 +#: plugins/admin/systems/class_servDB.inc:133 +#: plugins/admin/systems/class_servDB.inc:139 +#: plugins/admin/systems/class_servDB.inc:144 +#: plugins/admin/systems/class_servDB.inc:150 +#, php-format +msgid "The attribute '%s' is empty or contains invalid characters." +msgstr "La valeur '%s' est vide ou contient des caractères invalides." + +#: plugins/admin/systems/class_servDB.inc:123 +#, php-format +msgid "The imap connect string needs to be in the form '%s'." +msgstr "La chaîne de connexion imap doit être de la forme '%s'." + +#: plugins/admin/systems/class_servDB.inc:127 +msgid "The sieve port needs to be numeric." +msgstr "Le port sieve doit être numérique." + +#: plugins/admin/systems/server.tpl:6 +msgid "Server name" +msgstr "Nom du serveur" + +#: plugins/admin/systems/server.tpl:15 plugins/admin/systems/phone.tpl:15 +#: plugins/admin/systems/terminal.tpl:20 plugins/admin/systems/printer.tpl:23 +#: plugins/admin/systems/workstation.tpl:20 +#: plugins/admin/systems/wingeneric.tpl:15 +#: plugins/admin/systems/component.tpl:15 +msgid "Choose subtree to place terminal in" +msgstr "Sélectionnez la branche où placer le terminal" + +#: plugins/admin/systems/server.tpl:38 plugins/admin/systems/terminal.tpl:99 +#: plugins/admin/systems/workstation.tpl:99 +#: plugins/admin/ogroups/termgroup.tpl:3 +msgid "Action" +msgstr "Action" + +#: plugins/admin/systems/server.tpl:42 +msgid "Select action to execute for this server" +msgstr "Sélectionnez l'opération à exécuter sur le serveur" + +#: plugins/admin/systems/phone.tpl:6 +msgid "Phone name" +msgstr "Nom du téléphone" + +#: plugins/admin/systems/terminal.tpl:9 +msgid "Terminal template" +msgstr "Modèle de terminaux" + +#: plugins/admin/systems/terminal.tpl:11 +msgid "Terminal name" +msgstr "Nom du terminal" + +#: plugins/admin/systems/terminal.tpl:36 +#: plugins/admin/systems/workstation.tpl:36 +msgid "Mode" +msgstr "Mode" + +#: plugins/admin/systems/terminal.tpl:38 +#: plugins/admin/systems/workstation.tpl:38 +msgid "Select terminal mode" +msgstr "Sélectionnez le mode du terminal" + +#: plugins/admin/systems/terminal.tpl:52 +#: plugins/admin/systems/workstation.tpl:52 +msgid "Root server" +msgstr "Serveur Primaire" + +#: plugins/admin/systems/terminal.tpl:54 +#: plugins/admin/systems/workstation.tpl:54 +msgid "Select NFS root filesystem to use" +msgstr "Sélectionnez le système de fichier root NFS à utiliser" + +#: plugins/admin/systems/terminal.tpl:60 +#: plugins/admin/systems/workstation.tpl:60 +msgid "Swap server" +msgstr "Serveur de Swap" + +#: plugins/admin/systems/terminal.tpl:62 +#: plugins/admin/systems/workstation.tpl:62 +msgid "Choose NFS filesystem to place swap files on" +msgstr "Sélectionnez le système de fichier NFS où sera placé le swap" + +#: plugins/admin/systems/terminal.tpl:74 +#: plugins/admin/systems/workstation.tpl:74 +msgid "Syslog server" +msgstr "Serveur de logs systèmes" + +#: plugins/admin/systems/terminal.tpl:76 +#: plugins/admin/systems/workstation.tpl:76 +msgid "Choose server to use for logging" +msgstr "Sélectionnez le serveur de logs à utiliser" + +#: plugins/admin/systems/terminal.tpl:82 +#: plugins/admin/systems/workstation.tpl:82 +msgid "NTP server" +msgstr "Serveur NTP" + +#: plugins/admin/systems/terminal.tpl:84 +#: plugins/admin/systems/workstation.tpl:84 +msgid "Choose server to use for synchronizing time" +msgstr "Sélectionnez le serveur pour la synchronisation du temps" + +#: plugins/admin/systems/terminal.tpl:103 +#: plugins/admin/systems/workstation.tpl:103 +msgid "Select action to execute for this terminal" +msgstr "Sélectionnez l'opération à exécuter sur le terminal" + +#: plugins/admin/systems/class_terminalGeneric.inc:62 +#: plugins/admin/systems/class_workstationGeneric.inc:71 +msgid "text" +msgstr "texte" + +#: plugins/admin/systems/class_terminalGeneric.inc:63 +#: plugins/admin/systems/class_workstationGeneric.inc:72 +msgid "graphic" +msgstr "graphique" + +#: plugins/admin/systems/class_terminalGeneric.inc:88 +#: plugins/admin/systems/class_servGeneric.inc:58 +#: plugins/admin/systems/class_workstationGeneric.inc:98 +#: plugins/admin/ogroups/class_termgroup.inc:51 +msgid "No WAKECMD definition found in your gosa.conf" +msgstr "Aucune définition de WAKECMD n'est présente dans gosa.conf" + +#: plugins/admin/systems/class_terminalGeneric.inc:92 +#: plugins/admin/systems/class_terminalGeneric.inc:104 +#: plugins/admin/systems/class_terminalGeneric.inc:116 +#: plugins/admin/systems/class_servGeneric.inc:62 +#: plugins/admin/systems/class_servGeneric.inc:74 +#: plugins/admin/systems/class_servGeneric.inc:86 +#: plugins/admin/systems/class_workstationGeneric.inc:102 +#: plugins/admin/systems/class_workstationGeneric.inc:114 +#: plugins/admin/systems/class_workstationGeneric.inc:126 +#: plugins/admin/ogroups/class_termgroup.inc:55 +#: plugins/admin/ogroups/class_termgroup.inc:67 +#: plugins/admin/ogroups/class_termgroup.inc:79 +#, php-format +msgid "Execution of '%s' failed!" +msgstr "L'exécution de '%s' a échoué!" + +#: plugins/admin/systems/class_terminalGeneric.inc:100 +#: plugins/admin/systems/class_servGeneric.inc:70 +#: plugins/admin/systems/class_workstationGeneric.inc:110 +#: plugins/admin/ogroups/class_termgroup.inc:63 +msgid "No REBOOTCMD definition found in your gosa.conf" +msgstr "Aucune définition de REBOOTCMD n'est présente dans gosa.conf" + +#: plugins/admin/systems/class_terminalGeneric.inc:112 +#: plugins/admin/systems/class_servGeneric.inc:82 +#: plugins/admin/systems/class_workstationGeneric.inc:122 +#: plugins/admin/ogroups/class_termgroup.inc:75 +msgid "No HALTCMD definition found in your gosa.conf" +msgstr "Aucune définition de HALTCMD n'est présente dans gosa.conf" + +#: plugins/admin/systems/class_terminalGeneric.inc:142 +#: plugins/admin/systems/class_servGeneric.inc:110 +#: plugins/admin/systems/class_workstationGeneric.inc:151 +#: plugins/admin/ogroups/class_termgroup.inc:91 +msgid "Switch off" +msgstr "Eteindre" + +#: plugins/admin/systems/class_terminalGeneric.inc:142 +#: plugins/admin/systems/class_servGeneric.inc:110 +#: plugins/admin/systems/class_workstationGeneric.inc:151 +#: plugins/admin/ogroups/class_termgroup.inc:91 +msgid "Reboot" +msgstr "Redémarrer" + +#: plugins/admin/systems/class_terminalGeneric.inc:144 +#: plugins/admin/systems/class_servGeneric.inc:112 +#: plugins/admin/systems/class_workstationGeneric.inc:153 +#: plugins/admin/ogroups/class_termgroup.inc:91 +msgid "Wake up" +msgstr "Réveiller" + +#: plugins/admin/systems/class_terminalGeneric.inc:213 +msgid "You have no permissions to create a terminal on this 'Base'." +msgstr "Vous n'avez pas l'autorisation de créer un terminal dans cette 'Base'." + +#: plugins/admin/systems/class_terminalGeneric.inc:217 +msgid "The required field 'Terminal name' is not set." +msgstr "Le champ obligatoire 'Terminal name' n'est pas renseigné." + +#: plugins/admin/systems/class_terminalGeneric.inc:230 +#: plugins/admin/systems/class_servGeneric.inc:178 +#: plugins/admin/systems/class_workstationGeneric.inc:237 +#: plugins/admin/systems/class_printGeneric.inc:131 +#: plugins/admin/systems/class_phoneGeneric.inc:128 +#: plugins/admin/systems/class_wingeneric.inc:165 +#: plugins/admin/systems/class_componentGeneric.inc:125 +#, php-format +msgid "There is already an entry '%s' in the base choosen by you" +msgstr "Une entrée '%s' existe déjà dans la base sélectionnée" + +#: plugins/admin/systems/class_servGeneric.inc:48 +msgid "This 'dn' has no server features." +msgstr "Ce 'dn' n'a pas d'options serveur." + +#: plugins/admin/systems/class_servGeneric.inc:168 +msgid "You have no permissions to create a server on this 'Base'." +msgstr "Vous n'avez pas l'autorisation pour créer un serveur sur cette 'Base'." + +#: plugins/admin/systems/class_servDHCP.inc:32 +msgid "Remove DHCP service" +msgstr "Suppression du service DHCP" + +#: plugins/admin/systems/class_servDHCP.inc:33 +msgid "" +"This server has DHCP features enabled. You can disable them by clicking " +"below." +msgstr "" +"Le service DHCP est activé pour ce serveur. Vous pouvez les désactiver en " +"cliquant sur le bouton ci-dessous." + +#: plugins/admin/systems/class_servDHCP.inc:35 +msgid "Add DHCP service" +msgstr "Ajouter un service DHCP" + +#: plugins/admin/systems/class_servDHCP.inc:36 +msgid "" +"This server has DHCP features disabled. You can enable them by clicking " +"below." +msgstr "" +"Ce serveur à l'option DHCP désactivé. Vous pouvez l'activer en cliquant sur " +"le bouton ci-dessous." + +#: plugins/admin/systems/printer.tpl:6 +msgid "Printer name" +msgstr "Nom de l'imprimante" + +#: plugins/admin/systems/printer.tpl:32 +msgid "Printer URL" +msgstr "URL de l'imprimante" + +#: plugins/admin/systems/printer.tpl:36 +msgid "Path to PPD" +msgstr "Chemin d'accès aux PPD" + +#: plugins/admin/systems/class_systemManagement.inc:32 +msgid "Systems" +msgstr "Systèmes" + +#: plugins/admin/systems/class_systemManagement.inc:246 +msgid "You can't edit this object type yet!" +msgstr "Impossible d'éditer ce type d'objet pour le moment!" + +#: plugins/admin/systems/class_systemManagement.inc:262 +msgid "Passwords entered as new and repeated do not match!" +msgstr "" +"Le mot de passe entré dans le champ nouveau et celui dans le champ " +"vérification ne concordent pas!" + +#: plugins/admin/systems/class_systemManagement.inc:275 +msgid "You are not allowed to set this systems password!" +msgstr "Vous n'êtes pas autorisé à modifier ce mot de passe de ce système!" + +#: plugins/admin/systems/class_systemManagement.inc:319 +#, php-format +msgid "You're about to delete all information about the component at '%s'." +msgstr "" +"Vous êtes sur le point de supprimer toute les informations relatives aux " +"composant '%s'." + +#: plugins/admin/systems/class_systemManagement.inc:325 +#: plugins/admin/systems/class_systemManagement.inc:378 +msgid "You are not allowed to delete this component!" +msgstr "Vous n'êtes pas autorisé à supprimer ce composant!" + +#: plugins/admin/systems/class_systemManagement.inc:642 +msgid "New terminal" +msgstr "Nouveau terminal" + +#: plugins/admin/systems/class_systemManagement.inc:645 +msgid "New workstation" +msgstr "Nouvelle station de travail" + +#: plugins/admin/systems/class_systemManagement.inc:661 +msgid "Thin client template for" +msgstr "Modèle de client léger pour" + +#: plugins/admin/systems/class_systemManagement.inc:673 +msgid "Workstation template for" +msgstr "Modèle de station de travail pour" + +#: plugins/admin/systems/class_workstationGeneric.inc:136 +msgid "This 'dn' has no workstation features." +msgstr "Ce 'dn' ne comporte pas d'options stations de travail." + +#: plugins/admin/systems/class_workstationGeneric.inc:220 +msgid "You have no permissions to create a workstation on this 'Base'." +msgstr "" +"Vous n'avez pas les droits nécessaires pour créer une station de travail " +"dans cette 'Base'." + +#: plugins/admin/systems/class_workstationGeneric.inc:224 +msgid "The required field 'Workstation name' is not set." +msgstr "Le champ obligatoire 'Workstation name' n'est pas renseigné." + +#: plugins/admin/systems/class_printGeneric.inc:56 +msgid "This 'dn' has no printer features." +msgstr "Ce 'dn' n'a pas d'extensions d'impression." + +#: plugins/admin/systems/class_printGeneric.inc:121 +msgid "You have no permissions to create a printer on this 'Base'." +msgstr "Vous n'avez pas l'autorisation de créer une imprimante sur cette 'Base'." + +#: plugins/admin/systems/class_servDNS.inc:32 +msgid "Remove DNS service" +msgstr "Suppression du service DNS" + +#: plugins/admin/systems/class_servDNS.inc:33 +msgid "This server has DNS features enabled. You can disable them by clicking below." +msgstr "" +"Ce serveur à l'option DNS activée. Vous pouvez le désactiver en cliquant sur " +"le bouton ci-dessous." + +#: plugins/admin/systems/class_servDNS.inc:35 +msgid "Add DNS service" +msgstr "Ajouter un service DNS" + +#: plugins/admin/systems/class_servDNS.inc:36 +msgid "This server has DNS features disabled. You can enable them by clicking below." +msgstr "" +"Ce serveur à l'option DNS désactivé. Vous pouvez l'activer en cliquant sur " +"le bouton ci-dessous." + +#: plugins/admin/systems/workstation.tpl:9 +msgid "Workstation template" +msgstr "Modèle de station de travail" + +#: plugins/admin/systems/workstation.tpl:11 +msgid "Workstation name" +msgstr "Nom de la station de travail" + +#: plugins/admin/systems/servdb.tpl:1 +msgid "" +"This dialog keeps settings that are used and required by several components " +"within GOsa and are used to find out more about your servers. These settings " +"will be reloaded when you save this component." +msgstr "Cette fenêtre contient les paramètres nécessaires par plusieurs composants de GOsa et sont utilisés pour avoir de l'information sur vos serveurs. Ces paramètres seront rechargés quand vous sauverez les données de ce composant." + +#: plugins/admin/systems/servdb.tpl:10 +msgid "Kerberos kadmin access" +msgstr "Accès kadmin Kerberos" + +#: plugins/admin/systems/servdb.tpl:14 +msgid "Kerberos Realm" +msgstr "Realm Kerberos" + +#: plugins/admin/systems/servdb.tpl:18 plugins/admin/systems/servdb.tpl:86 +msgid "Admin user" +msgstr "Administrateur" + +#: plugins/admin/systems/servdb.tpl:30 +msgid "FAX database" +msgstr "Base de données des FAX" + +#: plugins/admin/systems/servdb.tpl:34 +msgid "FAX DB user" +msgstr "utilisateur de la base de données du FAX" + +#: plugins/admin/systems/servdb.tpl:46 +msgid "Asterisk management" +msgstr "administration d'Asterisk" + +#: plugins/admin/systems/servdb.tpl:50 +msgid "Asterisk DB user" +msgstr "Utilisateur de la base de données Asterisk" + +#: plugins/admin/systems/servdb.tpl:58 +msgid "Country dial prefix" +msgstr "Préfixe du pays" + +#: plugins/admin/systems/servdb.tpl:62 +msgid "Local dial prefix" +msgstr "Préfixe local" + +#: plugins/admin/systems/servdb.tpl:74 +msgid "IMAP admin access" +msgstr "Accès administrateur IMAP" + +#: plugins/admin/systems/servdb.tpl:78 +msgid "Server identifier" +msgstr "Identifiant du serveur" + +#: plugins/admin/systems/servdb.tpl:82 +msgid "Connect URL" +msgstr "URL de connexion" + +#: plugins/admin/systems/servdb.tpl:95 +msgid "Sieve port" +msgstr "port Sieve" + +#: plugins/admin/systems/servdb.tpl:104 +msgid "Logging database" +msgstr "Base de données des logs" + +#: plugins/admin/systems/servdb.tpl:108 +msgid "Logging DB user" +msgstr "Utilisateur de la base de données de log" + +#: plugins/admin/systems/class_phoneGeneric.inc:47 +msgid "This 'dn' has no phone features." +msgstr "Ce 'dn' n'a pas d'extensions téléphoniques." + +#: plugins/admin/systems/class_phoneGeneric.inc:118 +msgid "You have no permissions to create a phone on this 'Base'." +msgstr "Vous n'avez pas l'autorisation de créer un téléphone sur cette 'Base'." + +#: plugins/admin/systems/class_wingeneric.inc:85 +#: plugins/admin/systems/class_componentGeneric.inc:47 +msgid "This 'dn' has no network features." +msgstr "Ce 'dn' n'a pas d'extensions réseaux." + +#: plugins/admin/systems/class_wingeneric.inc:155 +#: plugins/admin/systems/class_componentGeneric.inc:115 +msgid "You have no permissions to create a component on this 'Base'." +msgstr "Vous n'avez pas l'autorisation de créer un composant sur cette 'Base'." + +#: plugins/admin/systems/wingeneric.tpl:6 +msgid "Machine name" +msgstr "Nom de la machine" + +#: plugins/admin/systems/remove.tpl:7 +msgid "" +"This includes all system and setup informations. Please double check " +"if your really want to do this since there is no way for GOsa to get your " +"data back." +msgstr "" +"Cela inclut tout les systèmes et les informations de configuration. " +"Veuillez vérifier que vous voulez effectuer cette opération, il est " +"impossible de revenir en arrière. Toutes les données seront perdues étant " +"donné qu'il est impossible pour GOsa de récupérer vos données." + +#: plugins/admin/systems/headpage.tpl:6 +msgid "List of systems" +msgstr "Liste des systèmes" + +#: plugins/admin/systems/headpage.tpl:29 +msgid "" +"Using this menu you can add, remove and change the properties of specific " +"systems. You can only add systems which have already been started once." +msgstr "" +"Ce menu permet d'ajouter, de supprimer ou de changer les propriétés des " +"systèmes. Vous pouvez seulement ajouter un système qui à déjà été démarré " +"une fois." + +#: plugins/admin/systems/headpage.tpl:32 +msgid "" +"-Edit- will execute an assistant to aid you in changing the system " +"properties. -Delete- will ask before really deleting things from your LDAP." +msgstr "" +"-Editer- et -Nouveau- lancera un assistant vous aidant dans la modification " +"des propriétés. -Supprimer- vous demandera confirmation avant d'exécuter " +"l'opération." + +#: plugins/admin/systems/headpage.tpl:46 +#: plugins/admin/ogroups/ogroup_objects.tpl:33 +msgid "Select to see servers" +msgstr "Sélectionnez pour voir les serveurs" + +#: plugins/admin/systems/headpage.tpl:46 +#: plugins/admin/ogroups/ogroup_objects.tpl:33 +msgid "Show servers" +msgstr "Afficher les serveurs" + +#: plugins/admin/systems/headpage.tpl:47 +msgid "Select to see Linux terminals" +msgstr "Sélectionnez pour afficher les terminaux Linux" + +#: plugins/admin/systems/headpage.tpl:47 +#: plugins/admin/ogroups/ogroup_objects.tpl:35 +msgid "Show terminals" +msgstr "Afficher les terminaux" + +#: plugins/admin/systems/headpage.tpl:48 +msgid "Select to see Linux workstations" +msgstr "Sélectionnez pour voir les stations de travail Linux" + +#: plugins/admin/systems/headpage.tpl:48 +#: plugins/admin/ogroups/ogroup_objects.tpl:34 +msgid "Show workstations" +msgstr "Afficher les stations de travail" + +#: plugins/admin/systems/headpage.tpl:49 +msgid "Select to see MicroSoft Windows based workstations" +msgstr "Sélectionnez afin de voir les stations de travail Microsoft Windows" + +#: plugins/admin/systems/headpage.tpl:49 +msgid "Show windows based workstations" +msgstr "Afficher les stations de travail Windows" + +#: plugins/admin/systems/headpage.tpl:50 +msgid "Select to see network printers" +msgstr "Sélectionnez pour afficher les imprimantes réseaux" + +#: plugins/admin/systems/headpage.tpl:50 +msgid "Show network printers" +msgstr "Afficher les imprimantes réseaux" + +#: plugins/admin/systems/headpage.tpl:51 +msgid "Select to see VOIP phones" +msgstr "Sélectionnez pour afficher les téléphones IP" + +#: plugins/admin/systems/headpage.tpl:51 +#: plugins/admin/ogroups/ogroup_objects.tpl:37 +msgid "Show phones" +msgstr "Afficher les téléphones" + +#: plugins/admin/systems/headpage.tpl:52 +msgid "Select to see network devices" +msgstr "Sélectionnez pour afficher les périphériques réseaux" + +#: plugins/admin/systems/headpage.tpl:52 +msgid "Show network devices" +msgstr "Montrer les périphériques réseau" + +#: plugins/admin/systems/headpage.tpl:62 +msgid "Regular expression for matching system names" +msgstr "Expression régulière pour sélectionner les noms de systèmes" + +#: plugins/admin/systems/headpage.tpl:65 +msgid "Display terminal(s) of user" +msgstr "Affichage des terminaux de l'utilisateur" + +#: plugins/admin/systems/headpage.tpl:66 +msgid "User name of which terminal(s) are shown" +msgstr "Le nom de l'utilisateur duquel les terminaux sont affichés" + +#: plugins/admin/systems/service.tpl:4 +msgid "Keyboard" +msgstr "Clavier" + +#: plugins/admin/systems/service.tpl:7 plugins/admin/systems/service.tpl:210 +msgid "Model" +msgstr "Modèle" + +#: plugins/admin/systems/service.tpl:9 +msgid "Choose keyboard model" +msgstr "Sélectionnez le modèle du clavier" + +#: plugins/admin/systems/service.tpl:15 +msgid "Layout" +msgstr "Disposition" + +#: plugins/admin/systems/service.tpl:17 +msgid "Choose keyboard layout" +msgstr "Sélectionnez la disposition du clavier" + +#: plugins/admin/systems/service.tpl:23 +msgid "Variant" +msgstr "Variante" + +#: plugins/admin/systems/service.tpl:25 +msgid "Choose keyboard variant" +msgstr "Sélectionnez la variante du clavier" + +#: plugins/admin/systems/service.tpl:39 +msgid "Mouse" +msgstr "Souris" + +#: plugins/admin/systems/service.tpl:44 +msgid "Choose mouse type" +msgstr "Sélectionnez le type de souris" + +#: plugins/admin/systems/service.tpl:50 +msgid "Port" +msgstr "Port" + +#: plugins/admin/systems/service.tpl:52 +msgid "Choose mouse port" +msgstr "Sélectionnez le port de la souris" + +#: plugins/admin/systems/service.tpl:66 +#: plugins/gofon/phoneaccount/generic.tpl:5 +msgid "Telephone hardware" +msgstr "Matériel téléphonique" + +#: plugins/admin/systems/service.tpl:69 +#: plugins/gofon/phoneaccount/generic.tpl:9 +msgid "Telephone" +msgstr "Téléphone" + +#: plugins/admin/systems/service.tpl:86 +msgid "Driver" +msgstr "Pilote" + +#: plugins/admin/systems/service.tpl:88 +msgid "Choose graphic driver that is needed by the installed graphic board" +msgstr "" +"Sélectionnez le pilote de la carte vidéo correspondant à la carte graphique " +"installée" + +#: plugins/admin/systems/service.tpl:94 +msgid "Resolution" +msgstr "Résolution" + +#: plugins/admin/systems/service.tpl:96 +msgid "Choose screen resolution used in graphic mode" +msgstr "Sélectionnez la résolution utilisée en mode graphique" + +#: plugins/admin/systems/service.tpl:102 +msgid "Color depth" +msgstr "Profondeur des couleurs" + +#: plugins/admin/systems/service.tpl:104 +msgid "Choose colordepth used in graphic mode" +msgstr "Sélectionnez la profondeur des couleurs utilisée en mode graphique" + +#: plugins/admin/systems/service.tpl:117 +msgid "Display device" +msgstr "Écran" + +#: plugins/admin/systems/service.tpl:124 +msgid "HSync" +msgstr "Fréquence de synchronisation Horizontale" + +#: plugins/admin/systems/service.tpl:126 +msgid "Horizontal refresh frequency for installed monitor" +msgstr "Fréquence de rafraîchissement horizontal pour l'écran installé" + +#: plugins/admin/systems/service.tpl:129 +msgid "VSync" +msgstr "VSync" + +#: plugins/admin/systems/service.tpl:131 +msgid "Vertical refresh frequency for installed monitor" +msgstr "Fréquence de rafraîchissement verticale pour l'écran installé" + +#: plugins/admin/systems/service.tpl:141 +msgid "Remote desktop" +msgstr "Bureau distant" + +#: plugins/admin/systems/service.tpl:145 +msgid "Connect method" +msgstr "Méthode de connexion" + +#: plugins/admin/systems/service.tpl:147 +msgid "Choose method to connect to terminal server" +msgstr "Sélectionnez la méthode de connexion au terminal" + +#: plugins/admin/systems/service.tpl:154 +msgid "Terminal server" +msgstr "Serveur de terminaux" + +#: plugins/admin/systems/service.tpl:156 +msgid "Select specific terminal server to use" +msgstr "Sélectionnez un serveur de terminaux à utiliser" + +#: plugins/admin/systems/service.tpl:163 +msgid "Font server" +msgstr "Serveur de Police de caractère" + +#: plugins/admin/systems/service.tpl:165 +msgid "Select specific font server to use" +msgstr "Sélectionnez le serveur de polices de caractère à utiliser" + +#: plugins/admin/systems/service.tpl:181 +msgid "Print device" +msgstr "Imprimante" + +#: plugins/admin/systems/service.tpl:182 +msgid "Select to start IPP based printing service on terminal" +msgstr "" +"Sélectionnez pour démarrer le service d'impression basé sur IPP sur le " +"terminal" + +#: plugins/admin/systems/service.tpl:183 +msgid "Provide print services" +msgstr "Fournir des services d'impression" + +#: plugins/admin/systems/service.tpl:189 +msgid "Spool server" +msgstr "Serveur de file d'attente" + +#: plugins/admin/systems/service.tpl:191 +msgid "Select NFS filesystem to place spool files on" +msgstr "Sélectionnez le système de fichier NFS où sera placé la file d'attente" + +#: plugins/admin/systems/service.tpl:203 +msgid "Scan device" +msgstr "Scanner" + +#: plugins/admin/systems/service.tpl:204 +msgid "Select to start SANE scan service on terminal" +msgstr "Sélectionner afin de démarrer le service scanner SANE sur le terminal" + +#: plugins/admin/systems/service.tpl:205 +msgid "Provide scan services" +msgstr "Fournir des services de scanner" + +#: plugins/admin/systems/service.tpl:212 +msgid "Select scanner driver to use" +msgstr "Sélectionnez le pilote du scanner" + +#: plugins/admin/systems/startup.tpl:1 +msgid "Boot parameters" +msgstr "Paramètre de démarrage" + +#: plugins/admin/systems/startup.tpl:8 +msgid "LDAP server" +msgstr "Serveur LDAP" + +#: plugins/admin/systems/startup.tpl:10 +msgid "Choose LDAP server to use for accounts and terminal management" +msgstr "" +"Sélectionnez le serveur LDAP à utiliser pour la gestion des comptes et des " +"terminaux" + +#: plugins/admin/systems/startup.tpl:16 +msgid "Boot kernel" +msgstr "Kernel utilisé au démarrage" + +#: plugins/admin/systems/startup.tpl:18 +msgid "Enter the filename of the kernel to use" +msgstr "Entrez le nom de fichier du kernel à utiliser" + +#: plugins/admin/systems/startup.tpl:21 +msgid "Custom options" +msgstr "Options personnalisées" + +#: plugins/admin/systems/startup.tpl:23 +msgid "" +"Enter any parameters that should be passed to the kernel as append line " +"during bootup" +msgstr "Entrez les paramètres qui seront passés au kernel lors du démarrage" + +#: plugins/admin/systems/startup.tpl:34 +msgid "Select if terminal supports graphical startup with progress bar" +msgstr "" +"Sélectionnez si le terminal supporte le démarrage graphique avec une barre " +"de progression" + +#: plugins/admin/systems/startup.tpl:35 +msgid "use graphical bootup" +msgstr "Utiliser un démarrage en mode graphique" + +#: plugins/admin/systems/startup.tpl:37 +msgid "Select if terminal should boot in text mode" +msgstr "Indiquez si le terminal démarre en mode texte" + +#: plugins/admin/systems/startup.tpl:38 +msgid "use standard linux textual bootup" +msgstr "utiliser le démarrage texte standard de Linux" + +#: plugins/admin/systems/startup.tpl:40 +msgid "Select to get more verbose output during startup" +msgstr "Sélectionnez afin d'avoir d'obtenir un démarrage plus verbeux" + +#: plugins/admin/systems/startup.tpl:41 +msgid "use debug mode for startup" +msgstr "utilisez le mode de débogage pour le démarrage" + +#: plugins/admin/systems/startup.tpl:52 +msgid "Kernel modules (format: name parameters)" +msgstr "Modules du kernel (format : nom paramètre)" + +#: plugins/admin/systems/startup.tpl:54 +msgid "Add additional modules to load on startup" +msgstr "Ajouter des modules à charger au démarrage" + +#: plugins/admin/systems/startup.tpl:65 +msgid "Automount devices (format: complete autofs entry)" +msgstr "Montage automatique des périphériques (format: entrée complète de autofs)" + +#: plugins/admin/systems/startup.tpl:67 +msgid "Add additional automount entries" +msgstr "Ajouter des entrées automount supplémentaires" + +#: plugins/admin/systems/startup.tpl:84 +msgid "Additional fstab entries" +msgstr "Entrée fstab supplémentaires" + +#: plugins/admin/systems/startup.tpl:86 +msgid "Add additional filesystems to be mounted during startup" +msgstr "Ajouter des systèmes de fichiers qui seront montés au démarrage" + +#: plugins/admin/systems/password.tpl:2 +msgid "" +"To change the terminal root password use the fields below. The changes take " +"effect during next reboot. Please memorize the new password, because the you " +"would't be able to log in. Leave fields blank for password inheritance " +"from default entries." +msgstr "" +"Utilisez le champ suivant afin de changer le mot de passe root du terminal. " +"La modification sera prise en compte lors du prochain redémarrage du " +"terminal. Veuillez retenir le mot de passe car sans celui-ci il vous sera " +"impossible de vous authentifier. Laissez le champ vide entraîne la mise " +"en place du mot de passe par défaut" + +#: plugins/admin/systems/password.tpl:6 +msgid "Changing the password impinges on authentification only." +msgstr "Changer le mot de passe influe seulement sur l'identification." + +#: plugins/admin/systems/component.tpl:6 +msgid "Device name" +msgstr "Nom du périphérique" + +#: plugins/admin/systems/chooser.tpl:1 +msgid "Choose the kind of system component you want to create" +msgstr "Choisissez le type de composant système que vous souhaitez créer" + +#: plugins/admin/systems/chooser.tpl:4 +msgid "" +"Linux terminals and workstations are autocreated on bootup. For this reason " +"you're only be able to create templates for a specific tree. Servers are " +"normally automatically added too, but in some special cases you may need to " +"create a faked server entry to provide GOsa with some informations. Other " +"network components may be used for Nagios setups to create component " +"dependencies." +msgstr "" +"Les terminaux Linux et les stations de travail sont automatiquement créés au " +"démarrage. Pour cette raison vous pouvez créer un modèle uniquement pour une " +"branche spécifique. Les serveurs sont également ajoutés automatiquement, " +"mais dans certains cas vous pouvez avoir besoin de créer une pseudo entrée " +"serveur afin de fournir à GOsa diverses informations. Les autres composants " +"réseaux peuvent être utilisés lors la configuration de Nagios afin de créer " +"les dépendances des composants." + +#: plugins/admin/systems/chooser.tpl:7 +msgid "Linux thin client template" +msgstr "Modèle de client léger Linux" + +#: plugins/admin/systems/chooser.tpl:8 +msgid "Linux workstation template" +msgstr "Modèle de station de travail Linux" + +#: plugins/admin/systems/chooser.tpl:9 +msgid "Linux Server" +msgstr "Serveur Linux" + +#: plugins/admin/systems/chooser.tpl:10 +msgid "Windows workstation" +msgstr "Station de travail Windows" + +#: plugins/admin/systems/chooser.tpl:11 +msgid "Network printer" +msgstr "Imprimante réseau" + +#: plugins/admin/systems/chooser.tpl:13 +msgid "Other network component" +msgstr "Autre composant réseau" + +#: plugins/admin/systems/chooser.tpl:16 +msgid "Create" +msgstr "Créer" + +#: plugins/admin/ogroups/tabs_ogroups.inc:19 +msgid "Terminals" +msgstr "Terminaux" + +#: plugins/admin/ogroups/ogroup_objects.tpl:6 +msgid "Select objects to add" +msgstr "Sélectionnez les objets à ajouter" + +#: plugins/admin/ogroups/ogroup_objects.tpl:29 +msgid "Select to see departments" +msgstr "Sélectionner pour voir les départements" + +#: plugins/admin/ogroups/ogroup_objects.tpl:29 +msgid "Show departments" +msgstr "Montrer les départements" + +#: plugins/admin/ogroups/ogroup_objects.tpl:30 +msgid "Select to see GOsa accounts" +msgstr "Sélectionnez pour voir les comptes GOsa" + +#: plugins/admin/ogroups/ogroup_objects.tpl:30 +msgid "Show people" +msgstr "Afficher les utilisateurs" + +#: plugins/admin/ogroups/ogroup_objects.tpl:31 +msgid "Select to see GOsa groups" +msgstr "Sélectionnez pour afficher les groupes GOsa" + +#: plugins/admin/ogroups/ogroup_objects.tpl:31 +msgid "Show groups" +msgstr "Afficher les groupes" + +#: plugins/admin/ogroups/ogroup_objects.tpl:32 +msgid "Select to see applications" +msgstr "Sélectionnez pour voir les applications" + +#: plugins/admin/ogroups/ogroup_objects.tpl:32 +msgid "Show applications" +msgstr "Afficher les applications" + +#: plugins/admin/ogroups/ogroup_objects.tpl:34 +msgid "Select to see workstations" +msgstr "Sélectionnez pour voir les stations de travail" + +#: plugins/admin/ogroups/ogroup_objects.tpl:35 +msgid "Select to see terminals" +msgstr "Sélectionnez pour afficher les terminaux" + +#: plugins/admin/ogroups/ogroup_objects.tpl:36 +msgid "Select to see printers" +msgstr "Sélectionnez pour afficher les imprimantes" + +#: plugins/admin/ogroups/ogroup_objects.tpl:36 +msgid "Show printers" +msgstr "Afficher les imprimantes" + +#: plugins/admin/ogroups/ogroup_objects.tpl:37 +msgid "Select to see phones" +msgstr "Sélectionnez pour afficher les téléphones" + +#: plugins/admin/ogroups/ogroup_objects.tpl:40 +msgid "Display objects of department" +msgstr "Afficher les objets du département" + +#: plugins/admin/ogroups/ogroup_objects.tpl:46 +msgid "Display objects matching" +msgstr "Afficher les objets correspondants" + +#: plugins/admin/ogroups/ogroup_objects.tpl:47 +msgid "Regular expression for matching object names" +msgstr "Expression régulière pour trouver les objets correspondants" + +#: plugins/admin/ogroups/termgroup.tpl:1 +msgid "" +"All actions you choose here influence all machines in this object " +"group. Be aware that rebooting machines may not make people happy who are " +"currently working at these machines." +msgstr "" +"Toutes les actions qui sont possibles ici influencent toutes les " +"machines dans ce groupe d'objets. N'oubliez pas que redémarrer les machines " +"des personnes qui y travaillent peuvent les rendre mécontents." + +#: plugins/admin/ogroups/termgroup.tpl:7 +msgid "Select action to execute for this group of terminals" +msgstr "Sélectionnez l'opération à exécuter pour ce groupe de terminaux" + +#: plugins/admin/ogroups/class_ogroup.inc:91 +msgid "This 'dn' is no object group." +msgstr "Ce 'dn' n'est pas un groupe objet." + +#: plugins/admin/ogroups/class_ogroup.inc:204 +msgid "too many different objects!" +msgstr "nombre d'objets différents trop important!" + +#: plugins/admin/ogroups/class_ogroup.inc:206 +msgid "users" +msgstr "utilisateurs" + +#: plugins/admin/ogroups/class_ogroup.inc:207 +msgid "groups" +msgstr "groupes" + +#: plugins/admin/ogroups/class_ogroup.inc:208 +msgid "applications" +msgstr "applications" + +#: plugins/admin/ogroups/class_ogroup.inc:209 +msgid "departments" +msgstr "départements" + +#: plugins/admin/ogroups/class_ogroup.inc:210 +msgid "servers" +msgstr "serveurs" + +#: plugins/admin/ogroups/class_ogroup.inc:211 +msgid "workstations" +msgstr "stations de travail" + +#: plugins/admin/ogroups/class_ogroup.inc:212 +msgid "terminals" +msgstr "terminaux" + +#: plugins/admin/ogroups/class_ogroup.inc:213 +msgid "phones" +msgstr "téléphones" + +#: plugins/admin/ogroups/class_ogroup.inc:214 +msgid "printers" +msgstr "imprimantes" + +#: plugins/admin/ogroups/class_ogroup.inc:221 +msgid "and" +msgstr "et" + +#: plugins/admin/ogroups/class_ogroup.inc:363 +msgid "Non existing dn: " +msgstr "le dn suivant n'existe pas : " + +#: plugins/admin/ogroups/class_ogroup.inc:494 +msgid "Object groups need at least one member!" +msgstr "Les groupes objets doivent avoir au minimum un membre!" + +#: plugins/admin/ogroups/class_ogroup.inc:499 +msgid "You can combine two different object types at maximum only!" +msgstr "Vous pouvez combiner au maximum deux objets différents !" + +#: plugins/admin/ogroups/main.inc:34 plugins/admin/ogroups/main.inc:39 +#: plugins/admin/ogroups/class_ogroupManagement.inc:25 +msgid "Object groups" +msgstr "Groupes d'objets" + +#: plugins/admin/ogroups/class_ogroupManagement.inc:41 +msgid "UNIX accounts" +msgstr "Comptes UNIX" + +#: plugins/admin/ogroups/class_ogroupManagement.inc:45 +msgid "Servers" +msgstr "Serveurs" + +#: plugins/admin/ogroups/class_ogroupManagement.inc:46 +msgid "Thin Clients" +msgstr "Clients légers" + +#: plugins/admin/ogroups/class_ogroupManagement.inc:47 +msgid "Workstations" +msgstr "Stations de travail" + +#: plugins/admin/ogroups/class_ogroupManagement.inc:49 +#: plugins/generic/references/class_reference.inc:52 +msgid "Printer" +msgstr "Imprimante" + +#: plugins/admin/ogroups/class_ogroupManagement.inc:153 +#, php-format +msgid "You're about to delete the object group '%s'." +msgstr "Vous êtes sur le point de supprimer le groupe objet '%s'." + +#: plugins/admin/ogroups/class_ogroupManagement.inc:159 +#: plugins/admin/ogroups/class_ogroupManagement.inc:185 +msgid "You are not allowed to delete this object group!" +msgstr "Vous n'êtes pas autorisé à supprimer le groupe objet!" + +#: plugins/admin/ogroups/generic.tpl:9 +msgid "Name of the group" +msgstr "Nom du groupe" + +#: plugins/admin/ogroups/generic.tpl:32 +msgid "Member objects" +msgstr "Objets membres" + +#: plugins/admin/ogroups/remove.tpl:7 +msgid "" +"Please double check if you really want to do this since there is no way for " +"GOsa to get your data back." +msgstr "" +"Veuillez vérifier que vous voulez effectuer cette action. Toutes les données " +"seront perdues étant donné qu'il est impossible pour GOsa de récupérer vos " +"données." + +#: plugins/admin/ogroups/headpage.tpl:46 +msgid "Show empty groups" +msgstr "Afficher les groupes vides" + +#: plugins/admin/ogroups/headpage.tpl:47 +msgid "Show groups containing users" +msgstr "Afficher les groupes contenant des utilisateurs" + +#: plugins/admin/ogroups/headpage.tpl:48 +msgid "Show groups containing groups" +msgstr "Afficher les groupes contenant des groupes" + +#: plugins/admin/ogroups/headpage.tpl:49 +msgid "Show groups containing applications" +msgstr "Afficher les groupes contenant des applications" + +#: plugins/admin/ogroups/headpage.tpl:50 +msgid "Show groups containing departments" +msgstr "Afficher les groupes contenant des départements" + +#: plugins/admin/ogroups/headpage.tpl:51 +msgid "Show groups containing servers" +msgstr "Afficher les groupes contenant des serveurs" + +#: plugins/admin/ogroups/headpage.tpl:52 +msgid "Show groups containing workstations" +msgstr "Afficher les groupes contenant des stations de travail" + +#: plugins/admin/ogroups/headpage.tpl:53 +msgid "Show groups containing terminals" +msgstr "Afficher les groupes contenant des terminaux" + +#: plugins/admin/ogroups/headpage.tpl:54 +msgid "Show groups containing printers" +msgstr "Afficher les groupes contenant des imprimantes" + +#: plugins/gofon/phoneaccount/main.inc:120 +msgid "Phone settings" +msgstr "Configuration du téléphone" + +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:114 +msgid "This account has no phone extensions." +msgstr "Ce compte n'est pas d'extension téléphoniques." + +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:124 +msgid "Remove phone account" +msgstr "Supprimer l'extension téléphonique" + +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:125 +msgid "" +"This account has phone features enabled. You can disable them by clicking " +"below." +msgstr "" +"Une extension téléphone existe pour cet utilisateur. Vous pouvez la " +"supprimer en cliquant sur le bouton ci-dessous." + +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:127 +msgid "Create phone account" +msgstr "Créer un compte téléphone" + +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:128 +msgid "" +"This account has phone features disabled. You can enable them by clicking " +"below." +msgstr "" +"Aucun extension téléphone n'existe pour cet utilisateur. Vous pouvez en " +"créer une en cliquant sur le bouton ci-dessous." + +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:140 +msgid "Please enter a valid phone number!" +msgstr "Veuillez entrer un numéro de téléphone valide!" + +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:176 +msgid "Choose your private phone" +msgstr "Choisissez votre téléphone privé" + +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:281 +#, php-format +msgid "You need to specify at least one phone number!" +msgstr "Vous devez au moins indiquer un numéro de téléphone!" + +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:295 +#, php-format +msgid "The number '%s' is no valid phone number!" +msgstr "Le numéro '%s' n'est pas un numéro de téléphone valide!" + +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:298 +#, php-format +msgid "The timeout '%s' contains invalid characters!" +msgstr "La valeur d'attente'%s' contient des caractères invalides!" + +#: plugins/gofon/phoneaccount/generic.tpl:16 +msgid "Answering machine" +msgstr "Répondeur automatique" + +#: plugins/gofon/phoneaccount/generic.tpl:22 +#: plugins/gofon/phoneaccount/generic.tpl:25 +msgid "Deliver missed calls as mail" +msgstr "Délivrer les appels téléphoniques manqués comme des emails" + +#: plugins/gofon/phoneaccount/generic.tpl:39 +msgid "Phone numbers" +msgstr "Numéros de téléphones" + +#: plugins/gofon/phoneaccount/generic.tpl:55 +msgid "Forward calls to" +msgstr "Transférer les appels vers" + +#: plugins/gofon/phoneaccount/generic.tpl:59 +msgid "Phone number" +msgstr "Numéros de téléphone" + +#: plugins/gofon/phoneaccount/generic.tpl:59 +msgid "Timeout (s)" +msgstr "Temps d'attente(s)" + +#: plugins/gofon/reports/class_fonreport.inc:6 +msgid "Phone Reports" +msgstr "Rapports des téléphones" + +#: plugins/gofon/reports/class_fonreport.inc:138 +msgid "Can't connect to phone database, no reports can be shown!" +msgstr "" +"Impossible de se connecter à la base de données des téléphones, aucun " +"rapport ne peut être affiché!" + +#: plugins/gofon/reports/class_fonreport.inc:142 +msgid "Can't select phone database for report generation!" +msgstr "" +"Impossible de sélectionner la base de données des téléphones pour la " +"création de rapports!" + +#: plugins/gofon/reports/class_fonreport.inc:151 +msgid "Query for phone database failed!" +msgstr "La requête sur la base de données des téléphones a échoué!" + +#: plugins/gofon/reports/contents.tpl:31 +msgid "Source" +msgstr "Emetteur" + +#: plugins/gofon/reports/contents.tpl:32 +msgid "Destination" +msgstr "Destination" + +#: plugins/gofon/reports/contents.tpl:33 +msgid "Channel" +msgstr "Canal" + +#: plugins/gofon/reports/contents.tpl:34 +#: plugins/generic/references/class_reference.inc:42 +msgid "Application" +msgstr "Applications" + +#: plugins/gofon/reports/contents.tpl:36 +msgid "Duration" +msgstr "Durée" + +#: plugins/gofon/reports/main.inc:5 +msgid "Phone reports" +msgstr "Rapports des téléphones" + +#: plugins/generic/references/class_reference.inc:36 +msgid "Group" +msgstr "Groupes" + +#: plugins/generic/references/class_reference.inc:46 +msgid "Thin Client" +msgstr "Clients légers" + +#: plugins/generic/references/class_reference.inc:48 +msgid "Workstation" +msgstr "Stations de travail" + +#: plugins/generic/references/class_reference.inc:50 +msgid "Object group" +msgstr "Groupes d'objets" + +#: plugins/generic/references/contents.tpl:11 +msgid "Object name" +msgstr "Nom de l'objet" + +#: plugins/generic/references/contents.tpl:18 +msgid "This object has no relationship to other objects." +msgstr "Cette objet n'a pas de relation avec d'autres objets." + +#: plugins/generic/welcome/welcome.tpl:4 +msgid "" +"This is the GOsa main screen. You can select your tasks from the menu on the " +"left, or by choosing one of the pictogramms below. All changes apply " +"directly to your companies LDAP-Server." +msgstr "" +"Vous êtes sur la fenêtre principale de GOsa. Vous pouvez sélectionner une " +"rubrique soit en utilisant le menu de gauche soit en cliquant sur une des " +"icônes. Tout les changements sont directement appliqués sur les serveurs " +"LDAP de votre société." + +#: plugins/generic/welcome/welcome.tpl:8 +msgid "" +"Use Sign out on the upper left to close the connection and Main to get back to the pictogram view." +msgstr "" +"Cliquez sur déconnexion, en haut à gauche, pour vous déconnecter, sur " +"Accueil pour revenir à la page principale." + +#: plugins/generic/welcome/welcome.tpl:15 +msgid "The GOsa team" +msgstr "L'équipe de GOsa" + +#: plugins/generic/welcome/main.inc:24 +#, php-format +msgid "Welcome %s!" +msgstr "Bienvenue %s!" + +#: include/functions.inc:266 +#, php-format +msgid "Error when connecting the LDAP. Server said '%s'." +msgstr "Erreur lors de la connexion au serveur LDAP. Le serveur indique '%s'." + +#: include/functions.inc:287 +#, php-format +msgid "User login failed. LDAP server said '%s'." +msgstr "Echec de l'authentification. Le serveur LDAP indique '%s'." + +#: include/functions.inc:307 +msgid "Username / UID is not unique. Please check your LDAP database." +msgstr "" +"Le nom de l'utilisateur ou l'UID n'est pas unique. Veuillez vérifier votre " +"base de données LDAP." + +#: include/functions.inc:345 +msgid "" +"Error while adding a lock. Parameters are not set correctly, please check " +"the source!" +msgstr "" +"Erreur lors de la création d'un verrou. Les paramètres sont incorrects. " +"Veuillez vérifier la source!" + +#: include/functions.inc:355 +#, php-format +msgid "" +"Can't set locking information in LDAP database. Please check the 'config' " +"entry in gosa.conf! LDAP server says '%s'." +msgstr "" +"Impossible d'enregistrer les informations à propos des verrous dans " +"l'annuaire LDAP. Veuillez vérifier l'entrée 'config' dans gosa.conf! Le " +"serveur LDAP indique '%s'." + +#: include/functions.inc:370 +#, php-format +msgid "Adding a lock failed. LDAP server says '%s'." +msgstr "Echec lors de l'ajout d'un verrou. Le serveur LDAP indique '%s'." + +#: include/functions.inc:396 +#, php-format +msgid "Removing a lock failed. LDAP server says '%s'." +msgstr "Echec lors de la suppression d'un verrou. Le serveur LDAP indique '%s'." + +#: include/functions.inc:426 +msgid "" +"Getting the lock from LDAP failed. Parameters are not sed correctly, please " +"check the source!" +msgstr "" +"Echec lors de la récupération du verrou depuis l'annuaire LDAP. Les " +"paramètres ne sont pas corrects. Veuillez vérifier la source!" + +#: include/functions.inc:436 +msgid "" +"Can't get locking information in LDAP database. Please check the 'config' " +"entry in gosa.conf!" +msgstr "" +"Impossible d'obtenir les informations de verrouillage dans l'annuaire LDAP. " +"Veuillez vérifier l'entrée 'config' dans gosa.conf!" + +#: include/functions.inc:444 +msgid "" +"Found multiple locks for object to be locked. This should not be possible - " +"cleaning up multiple references." +msgstr "" +"Détection de verrou multiple pour un même objet. Ceci ne devrait pas être " +"possible. Effacement des références multiples." + +#: include/functions.inc:516 +#, php-format +msgid "The size limit of %d entries is exceed!" +msgstr "La taille limite de %d entrées est dépassée!" + +#: include/functions.inc:518 +#, php-format +msgid "" +"Set the new size limit to %s and show me this message if the limit still " +"exceeds" +msgstr "" +"Mettre la nouvelle limite à %s et me montrer ce message si la limite est " +"toujours dépassée" + +#: include/functions.inc:530 +msgid "Configure" +msgstr "Configurer" + +#: include/functions.inc:535 +msgid "incomplete" +msgstr "incomplet" + +#: include/functions.inc:918 +#, php-format +msgid "" +"You're going to edit the LDAP entry '%s' which appears to be used by '%s'. " +"Please contact the person in order to clarify proceedings." +msgstr "" +"Vous êtes sur le point de modifier l'entrée '%s' qui est en cours " +"d'utilisation par '%s'. Veuillez contacter cette personne afin de clarifier " +"la situation." + +#: include/functions.inc:1017 +msgid "LDAP error:" +msgstr "Erreur LDAP :" + +#: include/functions.inc:1110 +msgid "" +"Warning: Can't set kerberos password. Your PHP version has no kerberos " +"support, password has not been changed." +msgstr "" +"Attention : Impossible de modifier les mots de passe kerberos. Votre version " +"de PHP n'a pas le support de kerberos. Votre mot de passe reste inchangé." + +#: include/functions.inc:1117 +msgid "Kerberos database communication failed!" +msgstr "La connexion avec Kerberos a échoué!" + +#: include/functions.inc:1123 +msgid "Changing password in kerberos database failed!" +msgstr "La modification du mot de passe dans la base Kerberos a échoué!" + +#: include/functions.inc:1132 +msgid "Unsupported password hash detected. Can't generate compatible password." +msgstr "" +"Mécanisme de hash non supporté. Impossible de générer un mot de passe " +"compatible." + +#: include/functions.inc:1172 +msgid "Setting for SMBHASH in gosa.conf is incorrect! Can't change Samba password." +msgstr "" +"La configuration de SMBHASH dans gosa.conf est incorrecte ! Impossible de " +"changer le mot de passe Samba." + +#: include/functions.inc:1192 +#, php-format +msgid "Setting the password failed. LDAP server says '%s'." +msgstr "La modification a échoué. Le serveur LDAP indique '%s'." + +#: include/functions.inc:1605 +msgid "*ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" +msgstr "*ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" + +#: include/class_mail-methods-cyrus.inc:44 +msgid "" +"Warning: IMAP Server cannot be reached! If you save this account, some mail " +"settings will not be stored on your server!" +msgstr "" +"Erreur: Impossible de contacter le serveur IMAP. Si vous sauvez ce compte, " +"certains paramètres ne seront pas stockés sur votre serveur!" + +#: include/class_mail-methods-cyrus.inc:107 +#, php-format +msgid "Can't create IMAP mailbox. Server says '%s'." +msgstr "Impossible de créer la boite mail IMAP. Le serveur indique '%s'." + +#: include/class_mail-methods-cyrus.inc:123 +#, php-format +msgid "Can't write IMAP quota. Server says '%s'." +msgstr "Impossible de créer les quotas IMAP. Le serveur indique'%s'." + +#: include/class_mail-methods-cyrus.inc:134 +msgid "Warning: imap_getacl is not implemented, wouldn't modify acl informations." +msgstr "" +"Erreur: imap_getacl n'est pas implémenté, il est impossible de modifier les " +"informations à propos des acls." + +#: include/class_mail-methods-cyrus.inc:169 +msgid "Warning: imap_getacl is not available, can't get imap permissions!" +msgstr "" +"Erreur: imap_getacl n'est pas disponible, impossible d'obtenir les " +"permissions imap!" + +#: include/class_mail-methods-cyrus.inc:191 +#, php-format +msgid "Can't remove IMAP mailbox. Server says '%s'." +msgstr "Impossible de supprimer les boites mails IMAP. Le serveur indique '%s'." + +#: include/class_mail-methods-cyrus.inc:219 +#, php-format +msgid "Can't log into SIEVE server. Server says '%s'." +msgstr "Impossible de se connecter au serveur SIEVE. Le serveur indique '%s'." + +#: include/class_mail-methods-cyrus.inc:232 +#, php-format +msgid "Can't get sieve script. Server says '%s'." +msgstr "Impossible de récupérer le script sieve. Le serveur indique '%s'." + +#: include/class_mail-methods-cyrus.inc:303 +#, php-format +msgid "Can't send sieve script. Server says '%s'." +msgstr "Impossible d'envoyer un script à sieve. Le serveur indique '%s'." + +#: include/class_mail-methods-cyrus.inc:307 +#, php-format +msgid "Can't activate GOsa sieve script. Server says '%s'." +msgstr "Impossible d'activer les scripts sieve de GOsa. Le serveur indique '%s'." + +#: include/class_pluglist.inc:98 +msgid "" +"Your gosa.conf information has changed partly. Please convert it using the " +"contributed script fix_config.sh!" +msgstr "" +"Votre fichier de configuration gosa.conf à changé partiellement . Veuillez " +"le convertir en utilisant le script fix_config.sh!" + +#: include/class_pluglist.inc:113 ihtml/themes/altlinux/framework.tpl:13 +#: ihtml/themes/altlinux/framework.tpl:23 +#: ihtml/themes/default/framework.tpl:13 ihtml/themes/default/framework.tpl:23 +msgid "" +"You are currently editing a database entry. Do you want to dismiss the " +"changes?" +msgstr "" +"Vous êtes actuellement en train d'éditer une entrée de la base de données. " +"Voulez vous annuler les modifications?" + +#: include/setup_checks.inc:78 +msgid "Can't bind to LDAP. No schema check possible!" +msgstr "" +"Impossible de se connecter à l'annuaire LDAP. Vérification des schémas " +"impossibles!" + +#: include/setup_checks.inc:87 include/setup_checks.inc:96 +msgid "Can't get schema information from server. No schema check possible!" +msgstr "" +"Impossible de récupérer les informations sur les schémas. Vérification des " +"schémas impossibles!" + +#: include/setup_checks.inc:116 +#, php-format +msgid "" +"Optional objectclass '%s' required by plugin '%s' is not present in LDAP " +"setup" +msgstr "" +"l'objectCLass optionnel '%s' requis par l'extension '%s' est absent de la " +"configuration de LDAP" + +#: include/setup_checks.inc:119 +#, php-format +msgid "Optional objectclass '%s' required by plugin '%s' does not have version %s" +msgstr "" +"l'objectCLass optionnel '%s' requis par l'extension '%s' nécessite la " +"version %s" + +#: include/setup_checks.inc:131 +#, php-format +msgid "Required objectclass '%s' is not present in LDAP setup" +msgstr "l'objectCLass requis '%s' est absent de la configuration de LDAP" + +#: include/setup_checks.inc:134 +#, php-format +msgid "Required objectclass '%s' does not have version %s" +msgstr "L'objectClass obligatoire '%s' n'est pas à la version %s" + +#: include/setup_checks.inc:142 +msgid "SAMBA 3 support disabled, no schema seems to be installed" +msgstr "Le support de SAMBA 3 est désactivé, aucun schéma ne semble installé" + +#: include/setup_checks.inc:144 +msgid "SAMBA 3 support enabledgosa+samba3.schema" +msgstr "support SAMBA 3 activégosa+samba3.schema" + +#: include/setup_checks.inc:147 +msgid "SAMBA 2 support disabled, no schema seems to be installed" +msgstr "Le support de SAMBA 2 est désactivé, aucun schéma ne semble installé" + +#: include/setup_checks.inc:149 +msgid "SAMBA 2 support enabledsamba.schema" +msgstr "support SAMBA 2 activésamba.schema" + +#: include/setup_checks.inc:153 +msgid "Support for pureftp disabled, no schema seems to be installed" +msgstr "Le support de pureftpd est désactivé, aucun schéma ne semble installé" + +#: include/setup_checks.inc:155 +msgid "Support for pureftp enabledpureftpd.schema" +msgstr "Support pour pureftp activépureftpd.schema" + +#: include/setup_checks.inc:158 +msgid "Support for WebDAV disabled, no schema seems to be installed" +msgstr "Le support de WebDAV est désactivé, aucun schéma ne semble installé" + +#: include/setup_checks.inc:160 +msgid "Support for WebDAV enabledgosa+samba3.schema" +msgstr "Support pour WebDAV activégosa+samba3.schema" + +#: include/setup_checks.inc:163 +msgid "Support for phpgroupware disabled, no schema seems to be installed" +msgstr "Le support de phpgroupware est désactivé, aucun schéma ne semble installé" + +#: include/setup_checks.inc:165 +msgid "" +"Support for phpgroupware enabledphpgwaccount." +"schema" +msgstr "" +"Support pour phpgroupware activéphpgwaccount." +"schema" + +#: include/setup_checks.inc:168 +msgid "Support for gofon disabled, no schema seems to be installed" +msgstr "Le support de gofon est désactivé, aucun schéma ne semble installé" + +#: include/setup_checks.inc:170 +msgid "Support for gofon enabledgofon.schema" +msgstr "Support pour gofon activégofon.schema" + +#: include/setup_checks.inc:182 +msgid "OK" +msgstr "OK" + +#: include/setup_checks.inc:185 +msgid "Ignored" +msgstr "Ignoré" + +#: include/setup_checks.inc:187 +msgid "Failed" +msgstr "Echec" + +#: include/setup_checks.inc:203 +msgid "PHP setup inspection" +msgstr "Vérification de l'installation de PHP" + +#: include/setup_checks.inc:204 +msgid "Checking for PHP version (>=4.1.0)" +msgstr "Vérification de la version de PHP (>=4.1.0)" + +#: include/setup_checks.inc:205 +msgid "" +"PHP must be of version 4.1.0 or above for some functions and known bugs in " +"PHP language." +msgstr "" +"PHP doit être en version supérieur à 4.1.0 ou supérieur à cause de certaines " +"fonctions et bogues connus dans le langage PHP." + +#: include/setup_checks.inc:208 +msgid "Checking if register_globals is set to 'off'" +msgstr "Vérification de l'option register_globals, elle doit être à 'off'" + +#: include/setup_checks.inc:209 +msgid "" +"register_globals is a PHP mechanism to register all global varibales to be " +"accessible from scripts without changing the scope. This may be a security " +"risk. GOsa will run in both modes." +msgstr "" +"register_globals est un mécanisme PHP pour enregistrer toutes les variables " +"globales afin que les scripts puissent y accéder sans changer la porté des " +"variables. Cela peut constituer un risque de sécurité. GOsa s'exécutera dans " +"les deux modes." + +#: include/setup_checks.inc:212 +msgid "Checking for ldap module" +msgstr "Vérification des modules LDAP" + +#: include/setup_checks.inc:213 +msgid "This is the main module used by GOsa and therefore really required." +msgstr "Ce module est le module de base utilisé par GOsa et est donc indispensable." + +#: include/setup_checks.inc:216 +msgid "Checking for gettext support" +msgstr "Vérification du support gettext" + +#: include/setup_checks.inc:217 +msgid "Gettext support is required for internationalized GOsa." +msgstr "Gettext est requis afin que GOsa soit localisé." + +#: include/setup_checks.inc:219 +msgid "Checking for mhash module" +msgstr "Vérification du module mhash" + +#: include/setup_checks.inc:220 +msgid "" +"To use SSHA encryption, you'll need this module. If you are just using crypt " +"or md5 encryption, ignore this message. GOsa will run without it." +msgstr "" +"Pour utiliser le codage SSHA, ce module est requis. Si vous utilisez " +"seulement les mécanismes crypt ou md5, vous pouvez ignorer ce message. GOsa " +"marchera sans celui ci." + +#: include/setup_checks.inc:223 +msgid "Checking for imap module" +msgstr "Vérification du module imap" + +#: include/setup_checks.inc:224 +msgid "" +"The IMAP module is needed to communicate with the IMAP server. It gets " +"status informations, creates and deletes mail users." +msgstr "" +"Le module IMAP est nécessaire pour communiquer avec un serveur IMAP. Il " +"permet de récupérer des informations de statuts, créer et supprimer les " +"comptes emails des utilisateurs." + +#: include/setup_checks.inc:226 +msgid "Checking for getacl in imap" +msgstr "Vérification de la fonction getacl dans imap" + +#: include/setup_checks.inc:227 +msgid "" +"The getacl support is needed for shared folder permissions. The standard " +"IMAP module is not capable of reading acl's. You need a recend PHP version " +"for this feature." +msgstr "" +"Le support de la fonction getacl est requis afin de gérer les permissions " +"des répertoires partagés. Le module IMAP standard ne peut gérer les acls. " +"Vous devez installer une version récente de PHP afin d'utiliser cette " +"fonctionnalité." + +#: include/setup_checks.inc:229 +msgid "Checking for mysql module" +msgstr "Vérification du module pour mysql" + +#: include/setup_checks.inc:230 +msgid "MySQL support is needed for reading GOfax reports from databases." +msgstr "" +"Le support de MySQL est nécessaire pour lire les rapports GOfax en " +"provenance d'une base de données." + +#: include/setup_checks.inc:232 +msgid "Checking for cups module" +msgstr "Vérification du module cups" + +#: include/setup_checks.inc:233 +msgid "" +"In order to read available printers from IPP protocol instead of printcap " +"files, you've to install the CUPS module." +msgstr "" +"Afin d'obtenir la liste des imprimantes disponibles avec le protocole IPP à " +"la place des fichiers printcap, vous devez installer le module CUPS." + +#: include/setup_checks.inc:235 +msgid "Checking for kadm5 module" +msgstr "Vérification du module kadm5" + +#: include/setup_checks.inc:236 +msgid "" +"Managing users in kerberos requires the kadm5 module which is downloadable " +"via PEAR network." +msgstr "" +"Gérer les utilisateurs dans kerberos nécessite le module kadm5 " +"téléchargeable sur les réseaux PEAR." + +#: include/setup_checks.inc:245 +msgid "Checking for some additional programms" +msgstr "Vérification de programmes additionnels" + +#: include/setup_checks.inc:254 +msgid "Checking for ImageMagick (>=5.4.0)" +msgstr "Vérification de ImageMagick (>=5.4.0)" + +#: include/setup_checks.inc:255 +msgid "" +"ImageMagick is used to convert user supplied images to fit the suggested " +"size and the unified JPEG format." +msgstr "" +"ImageMagick est utilisé afin de redimensionner et convertir en JPEG les " +"images, permettant ainsi leur utilisation dans GOsa." + +#: include/setup_checks.inc:258 +msgid "Checking imagick module for PHP" +msgstr "Vérification du module imagick pour PHP" + +#: include/setup_checks.inc:259 +msgid "" +"Imagick is used to convert user supplied images to fit the suggested size " +"and the unified JPEG format from PHP script." +msgstr "ImageMagick est utilisé afin de redimensionner et convertir en JPEG les images, permettant ainsi leur utilisation dans GOsa." + +#: include/setup_checks.inc:266 +msgid "Checking for fping utility" +msgstr "Vérification de l'utilitaire fping" + +#: include/setup_checks.inc:267 +msgid "" +"The fping utility is only used if you've got a thin client based terminal " +"environment running." +msgstr "" +"L'utilitaire fping est utilisé dans le cas d'un environnement composé de " +"clients légers fonctionnant en terminaux." + +#: include/setup_checks.inc:282 +msgid "Checking for a way to generate LM/NT password hashes" +msgstr "Vérification de la possibilité de générer des mots de passe au format LM/NT" + +#: include/setup_checks.inc:283 +msgid "" +"In order to use SAMBA 2/3, you've to install some additional packages to " +"generate password hashes." +msgstr "" +"Afin d'utiliser Samba 2/3, vous devez installer des paquets additionnels " +"prenant en charge le cryptage des mots de passe." + +#: include/setup_checks.inc:518 +msgid "You've to specify an ldap server before continuing!" +msgstr "Vous devez spécifier un serveur LDAP afin de pouvoir continuer!" + +#: include/setup_checks.inc:528 include/setup_checks.inc:680 +msgid "" +"Can't connect to the specified LDAP server! Please make sure that is " +"reachable for GOsa." +msgstr "" +"Impossible de se connecter au serveur LDAP! Vérifiez que GOsa puisse le " +"contacter." + +#: include/setup_checks.inc:545 include/setup_checks.inc:692 +msgid "" +"Can't bind to the specified LDAP server! Please make sure that is reachable " +"for GOsa." +msgstr "" +"Impossible de s'identifier sur l'annuaire LDAP! Veuillez vérifiez que GOsa " +"puisse le contacter." + +#: include/setup_checks.inc:616 +#, php-format +msgid "" +"You're missing the required attribute '%s' from this formular. Please " +"complete!" +msgstr "" +"L'attribut obligatoire '%s' n'existe pas pour ce formulaire. Veuillez le " +"compléter!" + +#: include/setup_checks.inc:792 include/setup_checks.inc:804 +#: html/index.php:156 +msgid "" +"You're missing an administrative account for GOsa, you'll not be able to " +"administrate anything!" +msgstr "" +"Le compte administrateur de GOsa n'existe pas, vous ne pourrez rien " +"administrer!" + +#: include/class_plugin.inc:180 +msgid "This 'dn' has no account extensions." +msgstr "Ce 'dn' n'a pas d'extension pour le compte." + +#: include/class_plugin.inc:185 +msgid "This is an empty plugin." +msgstr "Cette extension est vide." + +#: include/class_plugin.inc:384 +#, php-format +msgid "Command '%s', specified as POSTCREATE for plugin '%s' doesn't seem to exist." +msgstr "" +"La commande '%s', utilisée dans le POSTCREATE de l'extension '%s' n'existe " +"pas." + +#: include/class_plugin.inc:410 +#, php-format +msgid "Command '%s', specified as POSTMODIFY for plugin '%s' doesn't seem to exist." +msgstr "" +"La commande '%s', utilisée dans le POSTMODIFY de l'extension '%s' n'existe " +"pas." + +#: include/class_plugin.inc:436 +#, php-format +msgid "Command '%s', specified as POSTREMOVE for plugin '%s' doesn't seem to exist." +msgstr "" +"La commande '%s', utilisée dans le POSTREMOVE de l'extension '%s' n'existe " +"pas." + +#: include/version.inc:15 +#, php-format +msgid "You are currently using GOsa version %s (CVS checkout from %s)" +msgstr "Vous utilisez la version %s de GOsa ( CVS du %s)" + +#: include/class_config.inc:69 +#, php-format +msgid "XML error in gosa.conf: %s at line %d" +msgstr "Erreur XML dans gosa.conf: %s à la ligne %d" + +#: include/class_config.inc:195 html/index.php:138 +msgid "Can't bind to LDAP. Please contact the system administrator." +msgstr "" +"Impossible de se connecter à l'annuaire LDAP. Veuillez contacter " +"l'administrateur du système." + +#: include/class_config.inc:426 +msgid "SID and/or RIDBASE missing in your configuration!" +msgstr "SID et/ou RIDBASE absents du fichier de configuration!" + +#: include/class_ldap.inc:430 +#, php-format +msgid "" +"Autocreation of type '%s' is currently not supported. Please report to the " +"GOsa team." +msgstr "" +"La création automatique de type '%s' n'est pas supportée. Veuillez faire un " +"rapport à l'équipe de GOsa." + +#: include/class_ldap.inc:665 +#, php-format +msgid "" +"This is not a valid DN: '%s'. A block for import should begin with 'dn: ...' " +"in line %s" +msgstr "Ceci n'est pas un DN valide: '%s'. Le fichier d'importation doit commencer avec 'dn: ...' à la ligne %s" + +#: include/class_ldap.inc:681 +#, php-format +msgid "The dn: '%s' (from line %s) already exists in the LDAP database." +msgstr "Le dn : '%s' (de la ligne %s) existe déjà dans l'arbre LDAP." + +#: include/class_ldap.inc:696 +#, php-format +msgid "Error while importing dn: '%s', please check your LDIF from line %s on!" +msgstr "" +"Erreur lors de l'importation du dn: '%s', veuillez vérifier votre fichier " +"votre fichier LDIF à partir de la ligne %s!" + +#: html/getfax.php:53 +msgid "Could not connect to database server!" +msgstr "Impossible de se connecter au serveur de base de données!" + +#: html/getfax.php:55 +msgid "Could not select database!" +msgstr "Impossible de sélectionner la base de données!" + +#: html/getfax.php:60 html/getfax.php:68 +msgid "Database query failed!" +msgstr "Echec des requêtes sur la base de données!" + +#: html/getvcard.php:36 +msgid "Error: getcvard.php needs a parameter to export a vcard!" +msgstr "Erreur: getvcard.php nécessite un paramètre pour exporter au format vcard!" + +#: html/setup.php:88 +#, php-format +msgid "" +"Directory '%s' specified as smarty compile directory is not accessable, " +"check existence and rigths of this directory!" +msgstr "Le répertoire '%s' spécifié comme répertoire de compilation smarty n'est pas accessible, vérifiez son existance et les droits de ce répertoire!" + +#: html/main.php:96 +msgid "" +"Register globals is on. GOsa will refuse to login unless this is fixed by an " +"administrator." +msgstr "" +"Register globals est activé. GOsa ne permettra pas aux utilisateurs de se " +"connecter tant que ceci n'est pas corrigé par un administrateur." + +#: html/main.php:139 +msgid "Warning: memory is getting low - please increase the memory_limit!" +msgstr "" +"Attention: la mémoire disponible est insuffisante - Veuillez augmenter le " +"paramètre memory_limit!" + +#: html/main.php:257 +#, php-format +msgid "Can't find any plugin definitions for plugin '%s'!" +msgstr "Impossible de trouver une définition des extensions pour l'extension '%s'!" + +#: html/index.php:53 +#, php-format +msgid "GOsa configuration %s/gosa.conf is not readable. Aborted." +msgstr "Le fichier de configuration %s/gosa.conf ne peut être lu. Abandon." + +#: html/index.php:75 +#, php-format +msgid "Directory '%s' specified as compile directory is not accessable!" +msgstr "" +"Le répertoire '%s' spécifié comme répertoire de compilation n'est pas " +"accessible!" + +#: html/index.php:164 +msgid "Please specify a valid username!" +msgstr "Le nom d'utilisateur est incorrect!" + +#: html/index.php:166 +msgid "Please specify your password!" +msgstr "Veuillez introduire votre mot de passe!" + +#: html/index.php:173 +msgid "Please check the username/password combination." +msgstr "Veuillez vérifier le nom d'utilisateur et le mot de passe." + +#: html/index.php:211 +msgid "Session will not be encrypted." +msgstr "La session ne sera pas cryptée." + +#: html/index.php:211 +msgid "Enter SSL session" +msgstr "Démarrer une session SSL" + +#: ihtml/themes/altlinux/sizelimit.tpl:3 ihtml/themes/default/sizelimit.tpl:3 +msgid "" +"The size limit option makes LDAP operations faster and saves the LDAP server " +"from getting too much load. The easiest way to handle big databases without " +"long timeouts would be to limit your search to smaller values and use " +"filters to get the entries you are looking for." +msgstr "" +"L'option size limit rend les opérations LDAP plus rapides et permet au " +"serveur LDAP d'avoir un niveau de charge plus léger. La façon la plus facile " +"de gérer des grandes bases de données sans de longs temps d'attentes, serait " +"de limiter la recherche à des valeurs plus petites et d'utiliser les filtres " +"pour obtenir les valeurs que vous recherchez." + +#: ihtml/themes/altlinux/sizelimit.tpl:6 ihtml/themes/default/sizelimit.tpl:6 +msgid "Please choose the way to react for this session" +msgstr "Veuillez choisir la façon de réagir pour cette session" + +#: ihtml/themes/altlinux/sizelimit.tpl:9 ihtml/themes/default/sizelimit.tpl:9 +msgid "ignore this error and show all entries the LDAP server returns" +msgstr "" +"ignorer cette erreur et montrer toutes les entrées retournées par le serveur " +"LDAP" + +#: ihtml/themes/altlinux/sizelimit.tpl:10 +#: ihtml/themes/default/sizelimit.tpl:10 +msgid "" +"ignore this error and show all entries that fit int the defined sizelimit " +"and let me use filters instead" +msgstr "" +"ignorer cette erreur et montrer toutes les entrées qui tiennent dans le " +"paramètre sizelimit défini ensuite laissez moi utiliser les filtres à la " +"place" + +#: ihtml/themes/altlinux/conflict.tpl:2 ihtml/themes/classic/conflict.tpl:2 +#: ihtml/themes/default/conflict.tpl:2 +msgid "Session conflict detected" +msgstr "Conflit détecté entre différentes sessions" + +#: ihtml/themes/altlinux/conflict.tpl:6 ihtml/themes/classic/conflict.tpl:6 +#: ihtml/themes/default/conflict.tpl:6 +msgid "" +"Probably there's another active instance of your session. Multiple window " +"operation is technical not possible and heavily depends on the browser " +"you're using. Usage of different browsers at a time (i.e. IE and Mozilla) is " +"possible. Pressing the Logout button will close this session." +msgstr "" +"Une autre instance de votre session a été détectée. Les opérations multiples " +"sont techniquement impossible et dépendent du navigateur utilisé. L'usage de " +"navigateurs différents en même temps est possible (ex: IE et Mozilla) est " +"possible. Cliquer sur le bouton Déconnexion fermera cette session." + +#: ihtml/themes/altlinux/conflict.tpl:10 ihtml/themes/classic/conflict.tpl:10 +#: ihtml/themes/default/conflict.tpl:10 +msgid "" +"Ignoring this message will change/destroy the data you're currently editing, " +"so please close multiple windows and log in again." +msgstr "" +"Ignorer ce message entraînera la modification/destruction des données en " +"cours d'édition, il est conseillé de fermer toutes les fenêtres ouvertes et " +"de se reconnecter." + +#: ihtml/themes/altlinux/conflict.tpl:14 ihtml/themes/classic/conflict.tpl:14 +#: ihtml/themes/default/conflict.tpl:14 +msgid "Logout" +msgstr "Déconnexion" + +#: ihtml/themes/altlinux/login.tpl:13 ihtml/themes/classic/login.tpl:12 +#: ihtml/themes/default/login.tpl:13 +msgid "Please use your username and password to log in" +msgstr "" +"Veuillez utiliser votre nom d'utilisateur et votre mot de passe afin de vous connecter" + +#: ihtml/themes/altlinux/login.tpl:24 ihtml/themes/altlinux/login.tpl:28 +#: ihtml/themes/classic/login.tpl:23 ihtml/themes/classic/login.tpl:27 +#: ihtml/themes/default/login.tpl:24 ihtml/themes/default/login.tpl:28 +msgid "Username" +msgstr "Nom d'utilisateur" + +#: ihtml/themes/altlinux/login.tpl:42 ihtml/themes/altlinux/login.tpl:45 +#: ihtml/themes/classic/login.tpl:41 ihtml/themes/classic/login.tpl:44 +#: ihtml/themes/default/login.tpl:42 ihtml/themes/default/login.tpl:45 +msgid "Directory" +msgstr "Répertoire" + +#: ihtml/themes/altlinux/login.tpl:53 +#: ihtml/themes/altlinux/setup_finish.tpl:24 ihtml/themes/classic/login.tpl:52 +#: ihtml/themes/default/login.tpl:53 ihtml/themes/default/setup_finish.tpl:33 +msgid "Sign in" +msgstr "Connexion" + +#: ihtml/themes/altlinux/login.tpl:54 ihtml/themes/classic/login.tpl:53 +#: ihtml/themes/default/login.tpl:54 +msgid "Click here to log in" +msgstr "Cliquez ici pour vous connecter" + +#: ihtml/themes/altlinux/setup_introduction.tpl:1 +#: ihtml/themes/default/setup_introduction.tpl:1 +msgid "Welcome to the GOsa setup!" +msgstr "Bienvenue dans le menu de configuration de GOsa!" + +#: ihtml/themes/altlinux/setup_introduction.tpl:4 +#: ihtml/themes/default/setup_introduction.tpl:4 +msgid "" +"It looks like you're calling GOsa for the first time - no configuration was " +"found. This setup like script will try to aid you in creating a working " +"configuration by performing three major steps: first we'll check the PHP " +"installation for required modules, than we're going to check for optional/" +"needed programms and after you've provided basic informations for your LDAP " +"connectivity, we're going to check your LDAP setup." +msgstr "" +"Vous lancez GOsa pour la première fois - aucune configuration n'a été " +"trouvée. L'utilitaire de configuration va essayer de vous aider à obtenir " +"une configuration utilisable en trois étapes : vérification de la présence " +"des modules php requis, des programmes requis et optionnels et des " +"informations permettant à GOsa de se connecter à l'annuaire LDAP." + +#: ihtml/themes/altlinux/framework.tpl:14 +#: ihtml/themes/classic/framework.tpl:13 ihtml/themes/default/framework.tpl:14 +msgid "Main" +msgstr "Accueil" + +#: ihtml/themes/altlinux/framework.tpl:19 +#: ihtml/themes/classic/framework.tpl:15 ihtml/themes/default/framework.tpl:19 +msgid "Help" +msgstr "Aide" + +#: ihtml/themes/altlinux/framework.tpl:24 +#: ihtml/themes/classic/framework.tpl:17 ihtml/themes/default/framework.tpl:24 +msgid "Sign out" +msgstr "Déconnexion" + +#: ihtml/themes/altlinux/framework.tpl:32 +#: ihtml/themes/classic/framework.tpl:22 ihtml/themes/default/framework.tpl:32 +msgid "Signed in:" +msgstr "Connexion:" + +#: ihtml/themes/altlinux/setup_step2.tpl:1 +#: ihtml/themes/altlinux/setup_step3.tpl:1 +#: ihtml/themes/altlinux/setup_step4.tpl:1 +#: ihtml/themes/default/setup_step2.tpl:1 +#: ihtml/themes/default/setup_step3.tpl:1 +#: ihtml/themes/default/setup_step4.tpl:1 +msgid "Setup continued..." +msgstr "Configuration en cours..." + +#: ihtml/themes/altlinux/setup_step2.tpl:4 +#: ihtml/themes/default/setup_step2.tpl:4 +msgid "" +"Step two looks for a set of helper programms and checks if they have the " +"correct minimum version." +msgstr "" +"La seconde étape vérifie la présence de programmes complémentaires ainsi que " +"leur numéro de version minimale." + +#: ihtml/themes/altlinux/setup_step2.tpl:11 +#: ihtml/themes/default/setup_step2.tpl:11 +msgid "" +"We've inspected the webserver side now. Your setup seems to fit GOsa's " +"needs. Lets go for the GOsa configuration part now..." +msgstr "" +"L'inspection de la configuration du serveur web est achevée. Votre " +"configuration semble répondre aux besoins de GOsa. La configuration de GOsa " +"va maintenant débuter ..." + +#: ihtml/themes/altlinux/islocked.tpl:2 ihtml/themes/classic/islocked.tpl:2 +#: ihtml/themes/default/islocked.tpl:2 +msgid "Locking conflict detected" +msgstr "Conflit de verrou détecté" + +#: ihtml/themes/altlinux/islocked.tpl:9 ihtml/themes/default/islocked.tpl:9 +msgid "" +"If this lock detection is false, the other person has obviously closed the " +"webbrowser during the edit operation. You may delete the lockfile in this " +"case by pressing the Remove button." +msgstr "" +"Si la détection de ce verrou est fausse, une autre personne a manifestement " +"fermé la fenêtre de son navigateur durant une opération de modification " +"d'une entrée. Dans ce cas, vous pouvez supprimez le verrou en cliquant sur " +"le bouton Remove." + +#: ihtml/themes/altlinux/setup_step3.tpl:4 +#: ihtml/themes/default/setup_step3.tpl:4 +msgid "" +"Now we're going include your LDAP server and create an initial " +"configuration. After you've entered the server URI below, a quick check is " +"performed if required LDAP schemas are in place. Samba versions are " +"autodetected by the installed objectclasses. Details on how your LDAP tree " +"is organized will be asked later on." +msgstr "" +"Nous allons maintenant inclure votre serveur LDAP et créer un fichier de " +"configuration initial. Après avoir entré l'URI du serveur ci-dessous, une " +"vérification rapide de la présence des schémas nécessaires est réalisée. La " +"version de Samba est automatiquement détectée. Les détails sur votre espace " +"de nommage seront demandés ultérieurement." + +#: ihtml/themes/altlinux/setup_step3.tpl:7 +#: ihtml/themes/default/setup_step3.tpl:7 +msgid "Please enter the server URI" +msgstr "Veuillez entrer l'URI du serveur" + +#: ihtml/themes/altlinux/setup_step4.tpl:4 +#: ihtml/themes/default/setup_step4.tpl:3 +msgid "Enter a description for the location you're configuring here" +msgstr "Entrez une description de l'emplacement que vous configurez" + +#: ihtml/themes/altlinux/setup_step4.tpl:8 +#: ihtml/themes/default/setup_step4.tpl:7 +msgid "Location name" +msgstr "Nom de l'emplacement" + +#: ihtml/themes/altlinux/setup_step4.tpl:14 +#: ihtml/themes/default/setup_step4.tpl:13 +msgid "" +"Finally, you need to specify parameters to access the LDAP server. GOsa " +"always acts as admin and manages access rights internally. This is a " +"workaround till OpenLDAP's in directory ACI's are fully implemented. For " +"this to work, we need the admin DN and the corresponding password." +msgstr "" +"Finalement, vous devez spécifier les paramètres d'accès au serveur LDAP. " +"GOsa utilise le compte administrateur de LDAP et gère les droits (ACLs) en " +"interne. C'est un procédé permettant de pallier aux insuffisances de " +"OpenLDAP dans la gestion des ACL. Pour ces raisons il est nécessaire " +"d'indiquer le DN de l'administrateur et son mot de passe." + +#: ihtml/themes/altlinux/setup_step4.tpl:19 +#: ihtml/themes/default/setup_step4.tpl:18 +msgid "Admin DN" +msgstr "DN de l'administrateur" + +#: ihtml/themes/altlinux/setup_step4.tpl:23 +#: ihtml/themes/default/setup_step4.tpl:22 +msgid "Admin password" +msgstr "Mot de passe administrateur" + +#: ihtml/themes/altlinux/setup_step4.tpl:29 +#: ihtml/themes/default/setup_step4.tpl:28 +msgid "" +"Some basic LDAP parameters are tunable and affect the locations where GOsa " +"saves people and groups, including the way accounts get created. Check the " +"values below if the fit your needs." +msgstr "" +"Des paramètres basiques du serveur LDAP sont modifiables et affectent " +"l'endroit où GOsa va enregistrer les utilisateurs et les groupes, incluant " +"la façon dont vont être créés les comptes. Vérifiez les valeurs suivantes " +"afin quelles correspondent à vos besoins." + +#: ihtml/themes/altlinux/setup_step4.tpl:34 +#: ihtml/themes/default/setup_step4.tpl:33 +msgid "People storage ou" +msgstr "Attribut pour le OU des utilisateurs" + +#: ihtml/themes/altlinux/setup_step4.tpl:38 +#: ihtml/themes/default/setup_step4.tpl:37 +msgid "People dn attribute" +msgstr "Attribut pour le DN des utilisateurs" + +#: ihtml/themes/altlinux/setup_step4.tpl:46 +#: ihtml/themes/default/setup_step4.tpl:45 +msgid "Group storage ou" +msgstr "Attribut pour le OU des groupes" + +#: ihtml/themes/altlinux/setup_step4.tpl:50 +#: ihtml/themes/default/setup_step4.tpl:49 +msgid "ID base for users/groups" +msgstr "ID de départ pour les utilisateurs/groupes" + +#: ihtml/themes/altlinux/setup_step4.tpl:56 +#: ihtml/themes/default/setup_step4.tpl:77 +msgid "Check" +msgstr "Vérification" + +#: ihtml/themes/altlinux/setup_finish.tpl:1 +#: ihtml/themes/default/setup_finish.tpl:1 +msgid "Setup finished" +msgstr "Configuration terminée" + +#: ihtml/themes/altlinux/setup_finish.tpl:4 +#: ihtml/themes/default/setup_finish.tpl:8 +msgid "" +"GOsa setup has collected all data needed to create an initial configuration " +"file. Save the the link below as your gosa.conf and place that file in /etc/" +"gosa. Change it as needed." +msgstr "" +"L'installation de GOsa à réuni toutes les données nécessaires pour créer le " +"fichier de configuration de base . Sauvez le lien ci-dessous comme votre " +"fichier gosa.conf et mettez le dans /etc/gosa. Changer le si nécessaire." + +#: ihtml/themes/altlinux/setup_finish.tpl:12 +#: ihtml/themes/default/setup_finish.tpl:16 +msgid "" +"After placing the file under /etc/gosa, place make sure that the webserver " +"user is able to read gosa.conf, while other users shouldn't. You may want to " +"execute these commands to achieve this requirement:" +msgstr "" +"Après avoir placé le fichier dans le répertoire /etc/gosa, assurez vous que " +"seul le serveur web puisse lire gosa.conf. Vous pouvez exécuter les " +"commandes suivantes pour réaliser cette opération:" + +#: ihtml/themes/altlinux/setup_finish.tpl:22 +#: ihtml/themes/default/setup_finish.tpl:31 +msgid "Retry" +msgstr "Réessayer" + +#: ihtml/themes/classic/islocked.tpl:9 +msgid "" +"If this is lock detection is false, the other person has obviously closed " +"the webbrowser during the edit operation. You may delete the lockfile in " +"this case by pressing the Remove button." +msgstr "" +"Si la détection de ce verrou est fausse, une autre personne a manifestement " +"fermé la fenêtre de son navigateur durant une opération de modification " +"d'une entrée. Dans ce cas, vous pouvez supprimez le verrou en cliquant sur " +"le bouton Remove." + +#: ihtml/themes/default/setup_step2.tpl:17 +#: ihtml/themes/default/setup_step3.tpl:14 +#: ihtml/themes/default/setup_step4.tpl:76 +#: ihtml/themes/default/setup_finish.tpl:30 +msgid "Backward" +msgstr "Retour" + +#: ihtml/themes/default/setup_step4.tpl:55 +#, fuzzy +msgid "Some parameters about Referral (optionnal)." +msgstr "Quelques paramètres à propos du Referral (optionnel)." + +#: ihtml/themes/default/setup_step4.tpl:60 +#, fuzzy +msgid "Referral URL" +msgstr "URL du Referral" + +#: ihtml/themes/default/setup_step4.tpl:64 +#, fuzzy +msgid "Referral Admin" +msgstr "Administrateur du referral" + +#: ihtml/themes/default/setup_step4.tpl:68 +#, fuzzy +msgid "Referral Password" +msgstr "mot de passe pour le referral" + +#: ihtml/themes/default/setup_finish.tpl:3 +msgid "Schema Configuration" +msgstr "Configuration des schémas" + +#: ihtml/themes/default/setup_finish.tpl:6 +msgid "Configuration File" +msgstr "Fichier de configuration" + diff --git a/locale/messages.po b/locale/messages.po new file mode 100644 index 000000000..e5a2ca784 --- /dev/null +++ b/locale/messages.po @@ -0,0 +1,5843 @@ +#: contrib/gosa.conf:4 +msgid "My account" +msgstr "" + +#: contrib/gosa.conf:23 +msgid "Administration" +msgstr "" + +#: contrib/gosa.conf:40 +msgid "Addons" +msgstr "" + +#: contrib/gosa.conf:55 contrib/gosa.conf:66 contrib/gosa.conf:74 +#: contrib/gosa.conf:80 contrib/gosa.conf:88 contrib/gosa.conf:98 +#: contrib/gosa.conf:106 contrib/gosa.conf:111 contrib/gosa.conf:116 +#: contrib/gosa.conf:121 contrib/gosa.conf:126 contrib/gosa.conf:131 +#: plugins/personal/mail/generic.tpl:4 plugins/personal/posix/generic.tpl:4 +#: plugins/personal/samba/samba2.tpl:6 plugins/personal/samba/samba3.tpl:6 +#: plugins/personal/generic/class_user.inc:16 +#: plugins/gofax/blocklists/generic.tpl:1 +#: plugins/gofax/faxaccount/generic.tpl:6 plugins/admin/groups/mail.tpl:7 +#: plugins/generic/references/class_reference.inc:20 +msgid "Generic" +msgstr "" + +#: contrib/gosa.conf:56 +msgid "Unix" +msgstr "" + +#: contrib/gosa.conf:57 contrib/gosa.conf:68 +#: plugins/personal/mail/class_mailAccount.inc:22 +#: plugins/generic/references/class_reference.inc:24 +msgid "Mail" +msgstr "" + +#: contrib/gosa.conf:58 plugins/personal/samba/class_sambaAccount.inc:24 +#: plugins/generic/references/class_reference.inc:26 +#: plugins/generic/references/class_reference.inc:28 +msgid "Samba" +msgstr "" + +#: contrib/gosa.conf:59 plugins/personal/connectivity/main.inc:136 +#: plugins/personal/connectivity/class_connectivity.inc:15 +msgid "Connectivity" +msgstr "" + +#: contrib/gosa.conf:60 plugins/personal/generic/generic.tpl:231 +#: plugins/personal/generic/generic.tpl:362 +#: plugins/gofax/faxaccount/generic.tpl:10 +#: plugins/addons/addressbook/contents.tpl:14 +#: plugins/admin/departments/generic.tpl:62 +msgid "Fax" +msgstr "" + +#: contrib/gosa.conf:61 plugins/personal/generic/generic.tpl:214 +#: plugins/personal/generic/generic.tpl:352 +#: plugins/addons/addressbook/contents.tpl:14 +#: plugins/addons/addressbook/address_edit.tpl:41 +#: plugins/addons/addressbook/address_edit.tpl:89 +#: plugins/addons/addressbook/address_info.tpl:37 +#: plugins/addons/addressbook/address_info.tpl:85 +#: plugins/admin/departments/generic.tpl:58 +#: plugins/admin/systems/chooser.tpl:12 +#: plugins/admin/ogroups/class_ogroupManagement.inc:48 +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:6 +#: plugins/generic/references/class_reference.inc:40 +msgid "Phone" +msgstr "" + +#: contrib/gosa.conf:62 contrib/gosa.conf:70 contrib/gosa.conf:76 +#: contrib/gosa.conf:84 contrib/gosa.conf:94 contrib/gosa.conf:102 +#: contrib/gosa.conf:107 contrib/gosa.conf:112 contrib/gosa.conf:117 +#: contrib/gosa.conf:122 contrib/gosa.conf:127 contrib/gosa.conf:132 +msgid "References" +msgstr "" + +#: contrib/gosa.conf:67 +#: plugins/admin/applications/class_applicationManagement.inc:25 +#: plugins/admin/ogroups/class_ogroupManagement.inc:44 +msgid "Applications" +msgstr "" + +#: contrib/gosa.conf:69 +msgid "ACL" +msgstr "" + +#: contrib/gosa.conf:75 +msgid "Options" +msgstr "" + +#: contrib/gosa.conf:81 contrib/gosa.conf:99 +msgid "Devices" +msgstr "" + +#: contrib/gosa.conf:82 contrib/gosa.conf:100 +msgid "Startup" +msgstr "" + +#: contrib/gosa.conf:83 contrib/gosa.conf:93 contrib/gosa.conf:101 +msgid "Monitoring" +msgstr "" + +#: contrib/gosa.conf:89 +msgid "Databases" +msgstr "" + +#: contrib/gosa.conf:90 +msgid "Services" +msgstr "" + +#: contrib/gosa.conf:91 +msgid "DNS" +msgstr "" + +#: contrib/gosa.conf:92 +msgid "DHCP" +msgstr "" + +#: contrib/gosa.conf:141 plugins/addons/ldapmanager/contentexport.tpl:19 +#: plugins/addons/ldapmanager/contentexport.tpl:32 +#: plugins/addons/ldapmanager/contentexport.tpl:47 +msgid "Export" +msgstr "" + +#: contrib/gosa.conf:142 plugins/personal/mail/generic.tpl:107 +#: plugins/addons/ldapmanager/contentimport.tpl:63 +#: plugins/addons/ldapmanager/contentcsv.tpl:122 +#: plugins/addons/ldapmanager/contentcsv.tpl:125 +msgid "Import" +msgstr "" + +#: contrib/gosa.conf:143 +msgid "CSV Import" +msgstr "" + +#: contrib/gosa.conf:158 +msgid "GONICUS" +msgstr "" + +#: contrib/gosa.conf:176 +msgid "German" +msgstr "" + +#: contrib/gosa.conf:177 +msgid "Russian" +msgstr "" + +#: contrib/gosa.conf:178 +msgid "Spanish" +msgstr "" + +#: contrib/gosa.conf:179 +msgid "French" +msgstr "" + +#: contrib/gosa.conf:180 +msgid "Dutch" +msgstr "" + +#: contrib/gosa.conf:181 +msgid "English" +msgstr "" + +#: plugins/personal/mail/class_mailAccount.inc:23 +#: plugins/personal/password/class_password.inc:6 +#: plugins/personal/posix/class_posixAccount.inc:17 +#: plugins/personal/samba/class_sambaAccount.inc:25 +#: plugins/personal/generic/class_user.inc:17 +#: plugins/personal/connectivity/class_pureftpdAccount.inc:7 +#: plugins/personal/connectivity/class_phpgwAccount.inc:6 +#: plugins/personal/connectivity/class_webdavAccount.inc:7 +#: plugins/personal/connectivity/class_connectivity.inc:16 +#: plugins/personal/connectivity/class_proxyAccount.inc:6 +#: plugins/gofax/blocklists/class_blocklistManagement.inc:6 +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:7 +#: plugins/gofax/reports/class_faxreport.inc:7 +#: plugins/addons/addressbook/class_addressbook.inc:7 +#: plugins/addons/logview/class_logview.inc:7 +#: plugins/addons/ldapmanager/class_csvimport.inc:7 +#: plugins/addons/ldapmanager/class_import.inc:7 +#: plugins/addons/ldapmanager/class_ldif.inc:8 +#: plugins/addons/ldapmanager/class_export.inc:8 +#: plugins/admin/groups/class_groupManagement.inc:26 +#: plugins/admin/users/class_userManagement.inc:26 +#: plugins/admin/applications/class_applicationManagement.inc:26 +#: plugins/admin/departments/class_departmentManagement.inc:26 +#: plugins/admin/systems/class_systemManagement.inc:33 +#: plugins/admin/ogroups/class_ogroupManagement.inc:26 +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:7 +#: plugins/gofon/reports/class_fonreport.inc:7 +msgid "This does something" +msgstr "" + +#: plugins/personal/mail/class_mailAccount.inc:79 +#: plugins/admin/groups/class_groupMail.inc:59 +#, php-format +msgid "There is no mail method '%s' specified in your gosa.conf available." +msgstr "" + +#: plugins/personal/mail/class_mailAccount.inc:158 +msgid "No DESC tag in vacation file:" +msgstr "" + +#: plugins/personal/mail/class_mailAccount.inc:184 +msgid "This account has no mail extensions." +msgstr "" + +#: plugins/personal/mail/class_mailAccount.inc:192 +#: plugins/admin/groups/class_groupMail.inc:187 +msgid "Remove mail account" +msgstr "" + +#: plugins/personal/mail/class_mailAccount.inc:193 +#: plugins/admin/groups/class_groupMail.inc:188 +msgid "" +"This account has mail features enabled. You can disable them by clicking " +"below." +msgstr "" + +#: plugins/personal/mail/class_mailAccount.inc:195 +#: plugins/admin/groups/class_groupMail.inc:190 +msgid "Create mail account" +msgstr "" + +#: plugins/personal/mail/class_mailAccount.inc:196 +#: plugins/admin/groups/class_groupMail.inc:191 +msgid "" +"This account has mail features disabled. You can enable them by clicking " +"below." +msgstr "" + +#: plugins/personal/mail/class_mailAccount.inc:244 +msgid "" +"You're trying to add an invalid email address to the list of forwarders." +msgstr "" + +#: plugins/personal/mail/class_mailAccount.inc:250 +#: plugins/admin/groups/class_groupMail.inc:250 +msgid "Adding your one of your own addresses to the forwarders makes no sense." +msgstr "" + +#: plugins/personal/mail/class_mailAccount.inc:285 +#: plugins/personal/mail/class_mailAccount.inc:290 +#: plugins/admin/groups/class_groupMail.inc:278 +msgid "" +"You're trying to add an invalid email address to the list of alternate " +"addresses." +msgstr "" + +#: plugins/personal/mail/class_mailAccount.inc:300 +#: plugins/admin/groups/class_groupMail.inc:283 +msgid "The address you're trying to add is already used by user" +msgstr "" + +#: plugins/personal/mail/class_mailAccount.inc:631 +#: plugins/admin/groups/class_groupMail.inc:610 +msgid "The required field 'Primary address' is not set." +msgstr "" + +#: plugins/personal/mail/class_mailAccount.inc:635 +#: plugins/personal/mail/class_mailAccount.inc:639 +#: plugins/addons/addressbook/class_addressbook.inc:529 +msgid "Please enter a valid email address in 'Primary address' field." +msgstr "" + +#: plugins/personal/mail/class_mailAccount.inc:646 +#: plugins/admin/groups/class_groupMail.inc:619 +msgid "The primary address you've entered is already in use." +msgstr "" + +#: plugins/personal/mail/class_mailAccount.inc:652 +#: plugins/admin/groups/class_groupMail.inc:625 +msgid "Value in 'Quota size' is not valid." +msgstr "" + +#: plugins/personal/mail/class_mailAccount.inc:661 +#: plugins/admin/groups/class_groupMail.inc:634 +msgid "Please specify a vaild mail size for mails to be rejected." +msgstr "" + +#: plugins/personal/mail/class_mailAccount.inc:671 +#: plugins/admin/groups/class_groupMail.inc:642 +msgid "You need to set the maximum mail size in order to reject anything." +msgstr "" + +#: plugins/personal/mail/generic.tpl:7 plugins/admin/groups/mail.tpl:10 +msgid "Primary address" +msgstr "" + +#: plugins/personal/mail/generic.tpl:11 plugins/admin/groups/mail.tpl:14 +#: plugins/generic/references/class_reference.inc:44 +msgid "Server" +msgstr "" + +#: plugins/personal/mail/generic.tpl:13 +msgid "Specify the mail server where the user will be hosted on" +msgstr "" + +#: plugins/personal/mail/generic.tpl:21 plugins/admin/groups/mail.tpl:24 +msgid "Quota usage" +msgstr "" + +#: plugins/personal/mail/generic.tpl:28 plugins/admin/groups/mail.tpl:31 +#: plugins/admin/systems/class_terminalInfo.inc:136 +msgid "not defined" +msgstr "" + +#: plugins/personal/mail/generic.tpl:33 plugins/admin/groups/mail.tpl:36 +msgid "Quota size" +msgstr "" + +#: plugins/personal/mail/generic.tpl:47 plugins/admin/groups/mail.tpl:46 +msgid "Alternate addresses" +msgstr "" + +#: plugins/personal/mail/generic.tpl:49 plugins/admin/groups/mail.tpl:47 +msgid "List of alternative mail addresses" +msgstr "" + +#: plugins/personal/mail/generic.tpl:55 plugins/personal/mail/generic.tpl:121 +#: plugins/personal/mail/mail_locals.tpl:49 +#: plugins/personal/posix/trust_machines.tpl:45 +#: plugins/personal/posix/posix_groups.tpl:56 +#: plugins/personal/posix/generic.tpl:63 +#: plugins/personal/posix/generic.tpl:122 +#: plugins/personal/samba/samba3.tpl:247 +#: plugins/personal/samba/samba3_workstations.tpl:45 +#: plugins/gofax/blocklists/generic.tpl:60 +#: plugins/gofax/faxaccount/generic.tpl:73 +#: plugins/gofax/faxaccount/locals.tpl:48 +#: plugins/gofax/faxaccount/lists.tpl:11 plugins/gofax/faxaccount/lists.tpl:15 +#: plugins/admin/groups/mail.tpl:52 plugins/admin/groups/mail.tpl:97 +#: plugins/admin/groups/class_groupMail.inc:404 +#: plugins/admin/groups/group_objects.tpl:45 +#: plugins/admin/groups/generic.tpl:87 plugins/admin/groups/mail_locals.tpl:49 +#: plugins/admin/systems/startup.tpl:59 plugins/admin/systems/startup.tpl:72 +#: plugins/admin/systems/startup.tpl:91 +#: plugins/admin/ogroups/ogroup_objects.tpl:56 +#: plugins/admin/ogroups/generic.tpl:38 +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:203 +#: plugins/gofon/phoneaccount/generic.tpl:45 +msgid "Add" +msgstr "" + +#: plugins/personal/mail/generic.tpl:57 plugins/personal/mail/generic.tpl:125 +#: plugins/personal/posix/generic.tpl:64 +#: plugins/personal/posix/generic.tpl:124 +#: plugins/personal/samba/samba3.tpl:249 +#: plugins/gofax/blocklists/generic.tpl:61 +#: plugins/gofax/blocklists/remove.tpl:15 +#: plugins/gofax/blocklists/headpage.tpl:17 +#: plugins/gofax/faxaccount/generic.tpl:75 +#: plugins/gofax/faxaccount/lists.tpl:12 +#: plugins/addons/addressbook/remove.tpl:15 plugins/admin/groups/mail.tpl:53 +#: plugins/admin/groups/mail.tpl:99 plugins/admin/groups/headpage.tpl:17 +#: plugins/admin/groups/remove.tpl:15 plugins/admin/groups/generic.tpl:89 +#: plugins/admin/users/remove.tpl:15 plugins/admin/users/headpage.tpl:18 +#: plugins/admin/applications/remove.tpl:14 +#: plugins/admin/applications/headpage.tpl:17 +#: plugins/admin/departments/remove.tpl:15 +#: plugins/admin/departments/headpage.tpl:17 +#: plugins/admin/systems/remove.tpl:15 plugins/admin/systems/headpage.tpl:17 +#: plugins/admin/systems/startup.tpl:60 plugins/admin/systems/startup.tpl:73 +#: plugins/admin/systems/startup.tpl:92 plugins/admin/ogroups/generic.tpl:39 +#: plugins/admin/ogroups/remove.tpl:15 plugins/admin/ogroups/headpage.tpl:17 +#: plugins/gofon/phoneaccount/generic.tpl:47 +msgid "Delete" +msgstr "" + +#: plugins/personal/mail/generic.tpl:65 +msgid "Mail options" +msgstr "" + +#: plugins/personal/mail/generic.tpl:70 +msgid "Select if you want to forward mails without getting own copies of them" +msgstr "" + +#: plugins/personal/mail/generic.tpl:70 +msgid "No delivery to own mailbox" +msgstr "" + +#: plugins/personal/mail/generic.tpl:73 +msgid "" +"Select to automatically response with the vacation message defined below" +msgstr "" + +#: plugins/personal/mail/generic.tpl:73 +msgid "Activate vacation message" +msgstr "" + +#: plugins/personal/mail/generic.tpl:80 +msgid "Select if you want to filter this mails thru spamassassin" +msgstr "" + +#: plugins/personal/mail/generic.tpl:80 +msgid "Move mails tagged with spam level greater than" +msgstr "" + +#: plugins/personal/mail/generic.tpl:81 +msgid "Choose spam level - smaller values are more sensitive" +msgstr "" + +#: plugins/personal/mail/generic.tpl:84 +msgid "to folder" +msgstr "" + +#: plugins/personal/mail/generic.tpl:90 +msgid "Reject mails bigger than" +msgstr "" + +#: plugins/personal/mail/generic.tpl:92 +#: plugins/personal/connectivity/pureftpd.tpl:40 +#: plugins/personal/connectivity/class_proxyAccount.inc:69 +msgid "MB" +msgstr "" + +#: plugins/personal/mail/generic.tpl:98 +msgid "Vacation message" +msgstr "" + +#: plugins/personal/mail/generic.tpl:113 +msgid "Forward messages to" +msgstr "" + +#: plugins/personal/mail/generic.tpl:123 +#: plugins/gofax/faxaccount/generic.tpl:74 plugins/admin/groups/mail.tpl:98 +msgid "Add local" +msgstr "" + +#: plugins/personal/mail/generic.tpl:133 +msgid "Advanced mail options" +msgstr "" + +#: plugins/personal/mail/generic.tpl:138 +msgid "Select if user can only send and receive inside his own domain" +msgstr "" + +#: plugins/personal/mail/generic.tpl:139 +msgid "User is only allowed to send and receive local mails" +msgstr "" + +#: plugins/personal/mail/generic.tpl:146 +msgid "Use custom sieve script" +msgstr "" + +#: plugins/personal/mail/generic.tpl:146 +msgid "disables all Mail options!" +msgstr "" + +#: plugins/personal/mail/main.inc:104 plugins/personal/posix/main.inc:110 +#: plugins/personal/samba/main.inc:104 +#: plugins/personal/generic/generic_certs.tpl:60 +#: plugins/personal/generic/main.inc:158 +#: plugins/personal/connectivity/main.inc:116 +#: plugins/gofax/blocklists/generic.tpl:74 +#: plugins/gofax/faxaccount/main.inc:89 +#: plugins/admin/groups/class_groupManagement.inc:257 +#: plugins/admin/users/class_userManagement.inc:500 +#: plugins/admin/applications/class_applicationManagement.inc:239 +#: plugins/admin/departments/class_departmentManagement.inc:228 +#: plugins/admin/systems/class_systemManagement.inc:438 +#: plugins/admin/ogroups/class_ogroupManagement.inc:274 +#: plugins/gofon/phoneaccount/main.inc:104 +msgid "Finish" +msgstr "" + +#: plugins/personal/mail/main.inc:106 plugins/personal/mail/mail_locals.tpl:51 +#: plugins/personal/posix/trust_machines.tpl:47 +#: plugins/personal/posix/posix_groups.tpl:58 +#: plugins/personal/posix/main.inc:112 plugins/personal/samba/main.inc:106 +#: plugins/personal/samba/samba3_workstations.tpl:47 +#: plugins/personal/generic/password.tpl:19 +#: plugins/personal/generic/generic_picture.tpl:31 +#: plugins/personal/generic/generic_certs.tpl:62 +#: plugins/personal/generic/main.inc:160 +#: plugins/personal/connectivity/main.inc:118 +#: plugins/gofax/blocklists/generic.tpl:76 +#: plugins/gofax/blocklists/remove.tpl:17 +#: plugins/gofax/faxaccount/locals.tpl:50 +#: plugins/gofax/faxaccount/lists.tpl:39 plugins/gofax/faxaccount/main.inc:91 +#: plugins/addons/addressbook/dial.tpl:11 +#: plugins/addons/addressbook/address_edit.tpl:108 +#: plugins/addons/addressbook/remove.tpl:17 +#: plugins/admin/groups/class_groupManagement.inc:259 +#: plugins/admin/groups/remove.tpl:17 +#: plugins/admin/groups/application_options.tpl:10 +#: plugins/admin/groups/group_objects.tpl:47 +#: plugins/admin/groups/mail_admins.tpl:39 +#: plugins/admin/groups/mail_locals.tpl:51 plugins/admin/users/password.tpl:23 +#: plugins/admin/users/template.tpl:48 +#: plugins/admin/users/class_userManagement.inc:502 +#: plugins/admin/users/remove.tpl:17 plugins/admin/applications/remove.tpl:16 +#: plugins/admin/applications/class_applicationManagement.inc:241 +#: plugins/admin/departments/remove.tpl:17 +#: plugins/admin/departments/class_departmentManagement.inc:230 +#: plugins/admin/systems/class_systemManagement.inc:440 +#: plugins/admin/systems/remove.tpl:17 plugins/admin/systems/password.tpl:27 +#: plugins/admin/systems/chooser.tpl:18 +#: plugins/admin/ogroups/ogroup_objects.tpl:58 +#: plugins/admin/ogroups/class_ogroupManagement.inc:276 +#: plugins/admin/ogroups/remove.tpl:17 plugins/gofon/phoneaccount/main.inc:106 +#: ihtml/themes/altlinux/islocked.tpl:15 ihtml/themes/classic/islocked.tpl:15 +#: ihtml/themes/default/islocked.tpl:15 +msgid "Cancel" +msgstr "" + +#: plugins/personal/mail/main.inc:114 plugins/personal/posix/main.inc:120 +#: plugins/personal/samba/main.inc:114 plugins/personal/generic/main.inc:177 +#: plugins/personal/connectivity/main.inc:126 +#: plugins/gofax/faxaccount/main.inc:96 +#: plugins/gofon/phoneaccount/main.inc:111 +msgid "Click the 'Edit' button below to change informations in this dialog" +msgstr "" + +#: plugins/personal/mail/main.inc:115 plugins/personal/posix/main.inc:122 +#: plugins/personal/samba/main.inc:115 plugins/personal/generic/main.inc:170 +#: plugins/personal/connectivity/main.inc:127 +#: plugins/gofax/blocklists/headpage.tpl:16 +#: plugins/gofax/faxaccount/generic.tpl:88 +#: plugins/gofax/faxaccount/generic.tpl:94 +#: plugins/gofax/faxaccount/main.inc:97 plugins/addons/logview/contents.tpl:60 +#: plugins/admin/groups/headpage.tpl:16 plugins/admin/users/headpage.tpl:17 +#: plugins/admin/applications/headpage.tpl:16 +#: plugins/admin/departments/headpage.tpl:16 +#: plugins/admin/systems/headpage.tpl:16 plugins/admin/ogroups/headpage.tpl:16 +#: plugins/gofon/phoneaccount/main.inc:112 +msgid "Edit" +msgstr "" + +#: plugins/personal/mail/main.inc:124 +msgid "User mail settings" +msgstr "" + +#: plugins/personal/mail/mail_locals.tpl:6 +#: plugins/admin/groups/mail_locals.tpl:6 +msgid "Select addresses to add" +msgstr "" + +#: plugins/personal/mail/mail_locals.tpl:29 +#: plugins/admin/groups/mail_locals.tpl:29 +msgid "Display addresses of department" +msgstr "" + +#: plugins/personal/mail/mail_locals.tpl:30 +#: plugins/personal/posix/trust_machines.tpl:30 +#: plugins/personal/posix/posix_groups.tpl:37 +#: plugins/personal/samba/samba3_workstations.tpl:30 +#: plugins/gofax/blocklists/headpage.tpl:50 +#: plugins/gofax/faxaccount/locals.tpl:29 +#: plugins/addons/addressbook/contents.tpl:72 +#: plugins/admin/groups/headpage.tpl:57 +#: plugins/admin/groups/group_objects.tpl:30 +#: plugins/admin/groups/mail_locals.tpl:30 plugins/admin/users/headpage.tpl:61 +#: plugins/admin/applications/headpage.tpl:46 +#: plugins/admin/departments/headpage.tpl:46 +#: plugins/admin/systems/headpage.tpl:56 +#: plugins/admin/ogroups/ogroup_objects.tpl:41 +#: plugins/admin/ogroups/headpage.tpl:58 +msgid "Choose the department the search will be based on" +msgstr "" + +#: plugins/personal/mail/mail_locals.tpl:35 +#: plugins/admin/groups/mail_locals.tpl:35 +msgid "Display addresses matching" +msgstr "" + +#: plugins/personal/mail/mail_locals.tpl:36 +#: plugins/personal/posix/trust_machines.tpl:36 +#: plugins/personal/samba/samba3_workstations.tpl:36 +#: plugins/admin/groups/mail_locals.tpl:36 +msgid "Regular expression for matching addresses" +msgstr "" + +#: plugins/personal/mail/mail_locals.tpl:39 +#: plugins/admin/groups/mail_locals.tpl:39 +msgid "Display addresses of user" +msgstr "" + +#: plugins/personal/mail/mail_locals.tpl:40 +#: plugins/admin/groups/mail_locals.tpl:40 +msgid "User name of which addresses are shown" +msgstr "" + +#: plugins/personal/password/class_password.inc:5 +#: plugins/admin/systems/servdb.tpl:22 plugins/admin/systems/servdb.tpl:38 +#: plugins/admin/systems/servdb.tpl:54 plugins/admin/systems/servdb.tpl:90 +#: plugins/admin/systems/servdb.tpl:113 ihtml/themes/altlinux/login.tpl:33 +#: ihtml/themes/altlinux/login.tpl:37 ihtml/themes/classic/login.tpl:32 +#: ihtml/themes/classic/login.tpl:36 ihtml/themes/default/login.tpl:33 +#: ihtml/themes/default/login.tpl:37 +msgid "Password" +msgstr "" + +#: plugins/personal/password/password.tpl:2 +#: plugins/personal/password/changed.tpl:2 +msgid "Change password" +msgstr "" + +#: plugins/personal/password/password.tpl:6 +msgid "" +"To change your personal password use the fields below. The changes take " +"effect immediately. Please memorize the new password, because you would't be " +"able to login without it." +msgstr "" + +#: plugins/personal/password/password.tpl:10 +#: plugins/admin/users/password.tpl:6 +msgid "" +"Changing the password impinges on your authentification on mail, proxy, " +"samba and unix services." +msgstr "" + +#: plugins/personal/password/password.tpl:15 +msgid "Current password" +msgstr "" + +#: plugins/personal/password/password.tpl:20 +#: plugins/personal/generic/password.tpl:7 plugins/admin/users/password.tpl:11 +#: plugins/admin/systems/password.tpl:11 +msgid "New password" +msgstr "" + +#: plugins/personal/password/password.tpl:25 +#: plugins/personal/generic/password.tpl:11 +#: plugins/admin/users/password.tpl:15 plugins/admin/systems/password.tpl:16 +msgid "Repeat new password" +msgstr "" + +#: plugins/personal/password/password.tpl:34 +#: plugins/personal/generic/password.tpl:17 +#: plugins/admin/users/password.tpl:21 plugins/admin/users/headpage.tpl:19 +#: plugins/admin/systems/headpage.tpl:18 plugins/admin/systems/password.tpl:25 +msgid "Set password" +msgstr "" + +#: plugins/personal/password/password.tpl:36 +msgid "Clear fields" +msgstr "" + +#: plugins/personal/password/changed.tpl:6 +msgid "" +"You've successfully changed your password. Remember to change all programms " +"configured to use it as well." +msgstr "" + +#: plugins/personal/password/changed.tpl:12 +#: plugins/personal/generic/main.inc:167 plugins/gofax/reports/detail.tpl:68 +#: plugins/addons/ldapmanager/contentimport.tpl:58 +#: plugins/addons/ldapmanager/contentcsv.tpl:127 +#: plugins/addons/ldapmanager/contentexport.tpl:70 include/functions.inc:1342 +msgid "Back" +msgstr "" + +#: plugins/personal/password/main.inc:40 +msgid "" +"The password you've entered as your current password doesn't match the real " +"one." +msgstr "" + +#: plugins/personal/password/main.inc:43 +msgid "You need to specify your current password in order to proceed." +msgstr "" + +#: plugins/personal/password/main.inc:48 plugins/personal/generic/main.inc:84 +#: plugins/admin/users/class_userManagement.inc:174 +msgid "" +"The passwords you've entered as 'New password' and 'Repeated new password' " +"do not match." +msgstr "" + +#: plugins/personal/password/main.inc:51 plugins/personal/generic/main.inc:89 +#: plugins/admin/users/class_userManagement.inc:179 +msgid "The password you've entered as 'New password' is empty." +msgstr "" + +#: plugins/personal/password/main.inc:59 +msgid "The password used as new and current are too similar." +msgstr "" + +#: plugins/personal/password/main.inc:64 +msgid "The password used as new is to short." +msgstr "" + +#: plugins/personal/password/main.inc:71 +msgid "You have no permissions to change your password." +msgstr "" + +#: plugins/personal/password/main.inc:89 +msgid "External password changer reported a problem: " +msgstr "" + +#: plugins/personal/posix/trust_machines.tpl:6 +msgid "Select systems to add" +msgstr "" + +#: plugins/personal/posix/trust_machines.tpl:29 +#: plugins/admin/systems/headpage.tpl:55 +msgid "Display systems of department" +msgstr "" + +#: plugins/personal/posix/trust_machines.tpl:35 +#: plugins/admin/systems/headpage.tpl:61 +msgid "Display systems matching" +msgstr "" + +#: plugins/personal/posix/posix_groups.tpl:6 +msgid "Select groups to add" +msgstr "" + +#: plugins/personal/posix/posix_groups.tpl:20 +#: plugins/gofax/blocklists/headpage.tpl:36 +#: plugins/gofax/faxaccount/locals.tpl:19 +#: plugins/addons/addressbook/contents.tpl:58 +#: plugins/admin/groups/headpage.tpl:37 +#: plugins/admin/groups/group_objects.tpl:20 +#: plugins/admin/users/headpage.tpl:38 +#: plugins/admin/applications/headpage.tpl:36 +#: plugins/admin/departments/headpage.tpl:36 +#: plugins/admin/systems/headpage.tpl:37 +#: plugins/admin/ogroups/ogroup_objects.tpl:20 +#: plugins/admin/ogroups/headpage.tpl:37 +msgid "Filters" +msgstr "" + +#: plugins/personal/posix/posix_groups.tpl:29 +#: plugins/admin/groups/headpage.tpl:46 +msgid "Select to see groups that are primary groups of users" +msgstr "" + +#: plugins/personal/posix/posix_groups.tpl:29 +#: plugins/admin/groups/headpage.tpl:46 +msgid "Show primary groups" +msgstr "" + +#: plugins/personal/posix/posix_groups.tpl:30 +#: plugins/admin/groups/headpage.tpl:47 +msgid "Select to see groups that have samba groups mappings" +msgstr "" + +#: plugins/personal/posix/posix_groups.tpl:30 +#: plugins/admin/groups/headpage.tpl:47 +msgid "Show samba groups" +msgstr "" + +#: plugins/personal/posix/posix_groups.tpl:31 +#: plugins/admin/groups/headpage.tpl:48 +msgid "Select to see groups that have applications configured" +msgstr "" + +#: plugins/personal/posix/posix_groups.tpl:31 +#: plugins/admin/groups/headpage.tpl:48 +msgid "Show application groups" +msgstr "" + +#: plugins/personal/posix/posix_groups.tpl:32 +#: plugins/admin/groups/headpage.tpl:49 +msgid "Select to see groups that have mail settings" +msgstr "" + +#: plugins/personal/posix/posix_groups.tpl:32 +#: plugins/admin/groups/headpage.tpl:49 +msgid "Show mail groups" +msgstr "" + +#: plugins/personal/posix/posix_groups.tpl:33 +#: plugins/admin/groups/headpage.tpl:50 +msgid "Select to see normal groups that have only functional aspects" +msgstr "" + +#: plugins/personal/posix/posix_groups.tpl:33 +#: plugins/admin/groups/headpage.tpl:50 +msgid "Show functional groups" +msgstr "" + +#: plugins/personal/posix/posix_groups.tpl:36 +#: plugins/admin/groups/headpage.tpl:56 plugins/admin/ogroups/headpage.tpl:57 +msgid "Display groups of department" +msgstr "" + +#: plugins/personal/posix/posix_groups.tpl:42 +#: plugins/admin/groups/headpage.tpl:62 plugins/admin/ogroups/headpage.tpl:63 +msgid "Display groups matching" +msgstr "" + +#: plugins/personal/posix/posix_groups.tpl:43 +#: plugins/admin/groups/headpage.tpl:63 plugins/admin/ogroups/headpage.tpl:64 +msgid "Regular expression for matching group names" +msgstr "" + +#: plugins/personal/posix/posix_groups.tpl:46 +#: plugins/admin/groups/headpage.tpl:66 +msgid "Display groups of user" +msgstr "" + +#: plugins/personal/posix/posix_groups.tpl:47 +#: plugins/admin/groups/headpage.tpl:67 +msgid "User name of which groups are shown" +msgstr "" + +#: plugins/personal/posix/posix_shadow.tpl:5 +msgid "User must change password on first login" +msgstr "" + +#: plugins/personal/posix/posix_shadow.tpl:19 +#: plugins/personal/samba/samba2.tpl:68 plugins/personal/samba/samba3.tpl:225 +msgid "Password expires on" +msgstr "" + +#: plugins/personal/posix/generic.tpl:7 plugins/personal/samba/samba3.tpl:13 +#: plugins/personal/samba/samba3.tpl:65 +#: plugins/personal/samba/class_sambaAccount.inc:464 +msgid "Home directory" +msgstr "" + +#: plugins/personal/posix/generic.tpl:13 +msgid "Shell" +msgstr "" + +#: plugins/personal/posix/generic.tpl:21 +msgid "Primary group" +msgstr "" + +#: plugins/personal/posix/generic.tpl:29 plugins/gofax/reports/detail.tpl:46 +#: plugins/gofax/reports/contents.tpl:32 plugins/gofon/reports/contents.tpl:35 +msgid "Status" +msgstr "" + +#: plugins/personal/posix/generic.tpl:38 +msgid "Force UID/GID" +msgstr "" + +#: plugins/personal/posix/generic.tpl:40 +msgid "UID" +msgstr "" + +#: plugins/personal/posix/generic.tpl:45 +msgid "GID" +msgstr "" + +#: plugins/personal/posix/generic.tpl:54 +msgid "Group membership" +msgstr "" + +#: plugins/personal/posix/generic.tpl:56 +msgid "(Warning: more than 16 groups are not supported by NFS!)" +msgstr "" + +#: plugins/personal/posix/generic.tpl:74 +msgid "Account" +msgstr "" + +#: plugins/personal/posix/generic.tpl:89 +msgid "Environment" +msgstr "" + +#: plugins/personal/posix/generic.tpl:92 +msgid "Default printer" +msgstr "" + +#: plugins/personal/posix/generic.tpl:100 +msgid "Default language" +msgstr "" + +#: plugins/personal/posix/generic.tpl:113 +msgid "System trust" +msgstr "" + +#: plugins/personal/posix/main.inc:131 +msgid "Unix settings" +msgstr "" + +#: plugins/personal/posix/class_posixAccount.inc:16 +#: plugins/generic/references/class_reference.inc:22 +msgid "UNIX" +msgstr "" + +#: plugins/personal/posix/class_posixAccount.inc:132 +#: plugins/personal/posix/class_posixAccount.inc:895 +#: plugins/admin/groups/class_groupManagement.inc:377 +msgid "Group of user" +msgstr "" + +#: plugins/personal/posix/class_posixAccount.inc:172 +msgid "unconfigured" +msgstr "" + +#: plugins/personal/posix/class_posixAccount.inc:190 +#: plugins/admin/systems/class_terminalService.inc:121 +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:99 +msgid "automatic" +msgstr "" + +#: plugins/personal/posix/class_posixAccount.inc:218 +msgid "This account has no unix extensions." +msgstr "" + +#: plugins/personal/posix/class_posixAccount.inc:238 +#: plugins/personal/posix/class_posixAccount.inc:241 +msgid "Remove posix account" +msgstr "" + +#: plugins/personal/posix/class_posixAccount.inc:239 +msgid "" +"This account has unix features enabled. To disable them, you'll need to " +"remove the samba account first." +msgstr "" + +#: plugins/personal/posix/class_posixAccount.inc:242 +msgid "" +"This account has posix features enabled. You can disable them by clicking " +"below." +msgstr "" + +#: plugins/personal/posix/class_posixAccount.inc:245 +msgid "Create posix account" +msgstr "" + +#: plugins/personal/posix/class_posixAccount.inc:246 +msgid "" +"This account has posix features disabled. You can enable them by clicking " +"below." +msgstr "" + +#: plugins/personal/posix/class_posixAccount.inc:429 +#, php-format +msgid "Password can't be changed up to %s days after last change" +msgstr "" + +#: plugins/personal/posix/class_posixAccount.inc:431 +#, php-format +msgid "Password must be changed after %s days" +msgstr "" + +#: plugins/personal/posix/class_posixAccount.inc:433 +#, php-format +msgid "Disable account after %s days of inactivity after password expiery" +msgstr "" + +#: plugins/personal/posix/class_posixAccount.inc:435 +#, php-format +msgid "Warn user %s days before password expiery" +msgstr "" + +#: plugins/personal/posix/class_posixAccount.inc:457 +#: plugins/personal/samba/class_sambaAccount.inc:303 +#: plugins/personal/generic/class_user.inc:210 +#: plugins/gofax/reports/class_faxreport.inc:272 +#: plugins/gofon/reports/class_fonreport.inc:205 +msgid "January" +msgstr "" + +#: plugins/personal/posix/class_posixAccount.inc:457 +#: plugins/personal/samba/class_sambaAccount.inc:303 +#: plugins/personal/generic/class_user.inc:210 +#: plugins/gofax/reports/class_faxreport.inc:272 +#: plugins/gofon/reports/class_fonreport.inc:205 +msgid "February" +msgstr "" + +#: plugins/personal/posix/class_posixAccount.inc:457 +#: plugins/personal/samba/class_sambaAccount.inc:303 +#: plugins/personal/generic/class_user.inc:210 +#: plugins/gofax/reports/class_faxreport.inc:272 +#: plugins/gofon/reports/class_fonreport.inc:205 +msgid "March" +msgstr "" + +#: plugins/personal/posix/class_posixAccount.inc:457 +#: plugins/personal/samba/class_sambaAccount.inc:303 +#: plugins/personal/generic/class_user.inc:210 +#: plugins/gofax/reports/class_faxreport.inc:272 +#: plugins/gofon/reports/class_fonreport.inc:205 +msgid "April" +msgstr "" + +#: plugins/personal/posix/class_posixAccount.inc:458 +#: plugins/personal/samba/class_sambaAccount.inc:304 +#: plugins/personal/generic/class_user.inc:211 +#: plugins/gofax/reports/class_faxreport.inc:273 +#: plugins/gofon/reports/class_fonreport.inc:206 +msgid "May" +msgstr "" + +#: plugins/personal/posix/class_posixAccount.inc:458 +#: plugins/personal/samba/class_sambaAccount.inc:304 +#: plugins/personal/generic/class_user.inc:211 +#: plugins/gofax/reports/class_faxreport.inc:273 +#: plugins/gofon/reports/class_fonreport.inc:206 +msgid "June" +msgstr "" + +#: plugins/personal/posix/class_posixAccount.inc:458 +#: plugins/personal/samba/class_sambaAccount.inc:304 +#: plugins/personal/generic/class_user.inc:211 +#: plugins/gofax/reports/class_faxreport.inc:273 +#: plugins/gofon/reports/class_fonreport.inc:206 +msgid "July" +msgstr "" + +#: plugins/personal/posix/class_posixAccount.inc:458 +#: plugins/personal/samba/class_sambaAccount.inc:304 +#: plugins/personal/generic/class_user.inc:211 +#: plugins/gofax/reports/class_faxreport.inc:273 +#: plugins/gofon/reports/class_fonreport.inc:206 +msgid "August" +msgstr "" + +#: plugins/personal/posix/class_posixAccount.inc:458 +#: plugins/personal/samba/class_sambaAccount.inc:304 +#: plugins/personal/generic/class_user.inc:211 +#: plugins/gofax/reports/class_faxreport.inc:274 +#: plugins/gofon/reports/class_fonreport.inc:207 +msgid "September" +msgstr "" + +#: plugins/personal/posix/class_posixAccount.inc:459 +#: plugins/personal/samba/class_sambaAccount.inc:305 +#: plugins/personal/generic/class_user.inc:212 +#: plugins/gofax/reports/class_faxreport.inc:274 +#: plugins/gofon/reports/class_fonreport.inc:207 +msgid "October" +msgstr "" + +#: plugins/personal/posix/class_posixAccount.inc:459 +#: plugins/personal/samba/class_sambaAccount.inc:305 +#: plugins/personal/generic/class_user.inc:212 +#: plugins/gofax/reports/class_faxreport.inc:274 +#: plugins/gofon/reports/class_fonreport.inc:207 +msgid "November" +msgstr "" + +#: plugins/personal/posix/class_posixAccount.inc:459 +#: plugins/personal/samba/class_sambaAccount.inc:305 +#: plugins/personal/generic/class_user.inc:212 +#: plugins/gofax/reports/class_faxreport.inc:274 +#: plugins/gofon/reports/class_fonreport.inc:207 +msgid "December" +msgstr "" + +#: plugins/personal/posix/class_posixAccount.inc:509 +#: plugins/personal/samba/class_sambaAccount.inc:338 +#: plugins/admin/systems/class_terminalGeneric.inc:61 +#: plugins/admin/systems/class_workstationGeneric.inc:70 +msgid "disabled" +msgstr "" + +#: plugins/personal/posix/class_posixAccount.inc:509 +msgid "full access" +msgstr "" + +#: plugins/personal/posix/class_posixAccount.inc:510 +msgid "allow access to these hosts" +msgstr "" + +#: plugins/personal/posix/class_posixAccount.inc:662 +msgid "Failed: overriding lock" +msgstr "" + +#: plugins/personal/posix/class_posixAccount.inc:810 +msgid "The required field 'Home directory' is not set." +msgstr "" + +#: plugins/personal/posix/class_posixAccount.inc:813 +msgid "Please enter a valid path in 'Home directory' field." +msgstr "" + +#: plugins/personal/posix/class_posixAccount.inc:821 +msgid "Value specified as 'UID' is not valid." +msgstr "" + +#: plugins/personal/posix/class_posixAccount.inc:824 +msgid "Value specified as 'UID' is too small." +msgstr "" + +#: plugins/personal/posix/class_posixAccount.inc:828 +#: plugins/admin/groups/class_groupGeneric.inc:594 +msgid "Value specified as 'GID' is not valid." +msgstr "" + +#: plugins/personal/posix/class_posixAccount.inc:831 +#: plugins/admin/groups/class_groupGeneric.inc:597 +msgid "Value specified as 'GID' is too small." +msgstr "" + +#: plugins/personal/posix/class_posixAccount.inc:840 +msgid "Value specified as 'shadowMin' is not valid." +msgstr "" + +#: plugins/personal/posix/class_posixAccount.inc:845 +msgid "Value specified as 'shadowMax' is not valid." +msgstr "" + +#: plugins/personal/posix/class_posixAccount.inc:850 +msgid "Value specified as 'shadowWarning' is not valid." +msgstr "" + +#: plugins/personal/posix/class_posixAccount.inc:853 +msgid "'shadowWarning' without 'shadowMax' makes no sense." +msgstr "" + +#: plugins/personal/posix/class_posixAccount.inc:856 +msgid "Value specified as 'shadowWarning' should be smaller than 'shadowMax'." +msgstr "" + +#: plugins/personal/posix/class_posixAccount.inc:859 +msgid "Value specified as 'shadowWarning' should be greater than 'shadowMin'." +msgstr "" + +#: plugins/personal/posix/class_posixAccount.inc:864 +msgid "Value specified as 'shadowInactive' is not valid." +msgstr "" + +#: plugins/personal/posix/class_posixAccount.inc:867 +msgid "'shadowInactive' without 'shadowMax' makes no sense." +msgstr "" + +#: plugins/personal/posix/class_posixAccount.inc:872 +msgid "Value specified as 'shadowMin' should be smaller than 'shadowMax'." +msgstr "" + +#: plugins/personal/posix/class_posixAccount.inc:974 +#: plugins/admin/groups/class_groupGeneric.inc:628 +msgid "Too many users, can't allocate a free ID!" +msgstr "" + +#: plugins/personal/samba/samba2.tpl:13 +msgid "Samba home" +msgstr "" + +#: plugins/personal/samba/samba2.tpl:30 plugins/personal/samba/samba3.tpl:38 +msgid "Script path" +msgstr "" + +#: plugins/personal/samba/samba2.tpl:36 plugins/personal/samba/samba3.tpl:44 +#: plugins/personal/samba/samba3.tpl:75 +#: plugins/personal/samba/class_sambaAccount.inc:465 +msgid "Profile path" +msgstr "" + +#: plugins/personal/samba/samba2.tpl:48 plugins/personal/samba/samba3.tpl:210 +msgid "Access options" +msgstr "" + +#: plugins/personal/samba/samba2.tpl:54 plugins/personal/samba/samba3.tpl:216 +msgid "Allow user to change password from client" +msgstr "" + +#: plugins/personal/samba/samba2.tpl:57 plugins/personal/samba/samba3.tpl:219 +msgid "Login from windows client requires no password" +msgstr "" + +#: plugins/personal/samba/samba2.tpl:60 plugins/personal/samba/samba3.tpl:222 +msgid "Temporary disable samba account" +msgstr "" + +#: plugins/personal/samba/samba3.tpl:23 +msgid "Domain" +msgstr "" + +#: plugins/personal/samba/samba3.tpl:56 +msgid "Terminal Server" +msgstr "" + +#: plugins/personal/samba/samba3.tpl:62 +msgid "Allow login on terminal server" +msgstr "" + +#: plugins/personal/samba/samba3.tpl:87 +msgid "Inherit client config" +msgstr "" + +#: plugins/personal/samba/samba3.tpl:90 +msgid "Initial program" +msgstr "" + +#: plugins/personal/samba/samba3.tpl:96 +msgid "Working directory" +msgstr "" + +#: plugins/personal/samba/samba3.tpl:111 +msgid "Timeout settings (in minutes)" +msgstr "" + +#: plugins/personal/samba/samba3.tpl:116 +#: plugins/personal/samba/class_sambaAccount.inc:472 +msgid "Connection" +msgstr "" + +#: plugins/personal/samba/samba3.tpl:125 +#: plugins/personal/samba/class_sambaAccount.inc:473 +msgid "Disconnection" +msgstr "" + +#: plugins/personal/samba/samba3.tpl:134 +#: plugins/personal/samba/class_sambaAccount.inc:474 +msgid "IDLE" +msgstr "" + +#: plugins/personal/samba/samba3.tpl:147 +msgid "Client devices" +msgstr "" + +#: plugins/personal/samba/samba3.tpl:152 +msgid "Connect client drives at logon" +msgstr "" + +#: plugins/personal/samba/samba3.tpl:158 +msgid "Connect client printers at logon" +msgstr "" + +#: plugins/personal/samba/samba3.tpl:164 +msgid "Default to main client printer" +msgstr "" + +#: plugins/personal/samba/samba3.tpl:174 +#: plugins/personal/connectivity/pureftpd.tpl:64 +msgid "Miscellaneous" +msgstr "" + +#: plugins/personal/samba/samba3.tpl:178 +msgid "Shadowing" +msgstr "" + +#: plugins/personal/samba/samba3.tpl:187 +msgid "On broken or timed out" +msgstr "" + +#: plugins/personal/samba/samba3.tpl:195 +msgid "Reconnect if disconnected" +msgstr "" + +#: plugins/personal/samba/samba3.tpl:241 +msgid "Allow connection from these workstations only" +msgstr "" + +#: plugins/personal/samba/main.inc:123 +msgid "Samba settings" +msgstr "" + +#: plugins/personal/samba/samba3_workstations.tpl:6 +msgid "Select workstations to add" +msgstr "" + +#: plugins/personal/samba/samba3_workstations.tpl:29 +msgid "Display workstations of department" +msgstr "" + +#: plugins/personal/samba/samba3_workstations.tpl:35 +msgid "Display workstations matching" +msgstr "" + +#: plugins/personal/samba/class_sambaAccount.inc:170 +msgid "This account has no samba extensions." +msgstr "" + +#: plugins/personal/samba/class_sambaAccount.inc:179 +msgid "Remove samba account" +msgstr "" + +#: plugins/personal/samba/class_sambaAccount.inc:180 +msgid "" +"This account has samba features enabled. You can disable them by clicking " +"below." +msgstr "" + +#: plugins/personal/samba/class_sambaAccount.inc:190 +#: plugins/personal/samba/class_sambaAccount.inc:193 +msgid "Create samba account" +msgstr "" + +#: plugins/personal/samba/class_sambaAccount.inc:191 +msgid "" +"This account has samba features disabled. You can enable them by clicking " +"below." +msgstr "" + +#: plugins/personal/samba/class_sambaAccount.inc:194 +msgid "" +"This account has samba features disabled. Posix features are needed for " +"samba accounts, enable them first." +msgstr "" + +#: plugins/personal/samba/class_sambaAccount.inc:339 +msgid "input on, notify on" +msgstr "" + +#: plugins/personal/samba/class_sambaAccount.inc:340 +msgid "input on, notify off" +msgstr "" + +#: plugins/personal/samba/class_sambaAccount.inc:341 +msgid "input off, notify on" +msgstr "" + +#: plugins/personal/samba/class_sambaAccount.inc:342 +msgid "input off, nofify off" +msgstr "" + +#: plugins/personal/samba/class_sambaAccount.inc:344 +msgid "disconnect" +msgstr "" + +#: plugins/personal/samba/class_sambaAccount.inc:345 +msgid "reset" +msgstr "" + +#: plugins/personal/samba/class_sambaAccount.inc:347 +msgid "from any client" +msgstr "" + +#: plugins/personal/samba/class_sambaAccount.inc:348 +msgid "from previous client only" +msgstr "" + +#: plugins/personal/samba/class_sambaAccount.inc:467 +#, php-format +msgid "The value specified as '%s' contains invalid characters!" +msgstr "" + +#: plugins/personal/samba/class_sambaAccount.inc:477 +#, php-format +msgid "" +"The timeout property '%s' is checked and contains invalid or no characters!" +msgstr "" + +#: plugins/personal/samba/class_sambaAccount.inc:483 +msgid "" +"The windows user manager only allows eight clients. You've specified more " +"than eight." +msgstr "" + +#: plugins/personal/samba/class_sambaAccount.inc:636 +msgid "" +"Warning: This account has an undefined samba SID assigned. The problem can " +"not be fixed by GOsa!" +msgstr "" + +#: plugins/personal/samba/class_sambaAccount.inc:661 +msgid "" +"Warning: Can't identify users primary group - no conversion to a samba group " +"possible!" +msgstr "" + +#: plugins/personal/generic/class_user.inc:221 +msgid "female" +msgstr "" + +#: plugins/personal/generic/class_user.inc:221 +msgid "male" +msgstr "" + +#: plugins/personal/generic/class_user.inc:231 +msgid "This account has no valid GOsa extensions." +msgstr "" + +#: plugins/personal/generic/class_user.inc:260 +msgid "The specified file has not been uploaded via HTTP POST! Aborted." +msgstr "" + +#: plugins/personal/generic/class_user.inc:354 +msgid "Please enter a valid serial number" +msgstr "" + +#: plugins/personal/generic/class_user.inc:358 +#: plugins/personal/generic/class_user.inc:383 +#: plugins/admin/systems/class_terminalInfo.inc:52 +#: plugins/admin/systems/class_terminalInfo.inc:167 +msgid "present" +msgstr "" + +#: plugins/personal/generic/class_user.inc:360 +#: plugins/personal/generic/class_user.inc:385 +msgid "absent" +msgstr "" + +#: plugins/personal/generic/class_user.inc:782 +msgid "Kerberos database communication failed" +msgstr "" + +#: plugins/personal/generic/class_user.inc:799 +msgid "Can't remove user from kerberos database." +msgstr "" + +#: plugins/personal/generic/class_user.inc:810 +msgid "Can't add user to kerberos database." +msgstr "" + +#: plugins/personal/generic/class_user.inc:850 +msgid "You have no permissions to create a user on this 'Base'." +msgstr "" + +#: plugins/personal/generic/class_user.inc:855 +#: plugins/addons/addressbook/class_addressbook.inc:486 +#: plugins/admin/users/class_userManagement.inc:419 +msgid "The required field 'Name' is not set." +msgstr "" + +#: plugins/personal/generic/class_user.inc:864 +msgid "There's already a person with this 'Login' in the database." +msgstr "" + +#: plugins/personal/generic/class_user.inc:870 +#: plugins/addons/addressbook/class_addressbook.inc:490 +#: plugins/admin/users/class_userManagement.inc:422 +msgid "The required field 'Given name' is not set." +msgstr "" + +#: plugins/personal/generic/class_user.inc:873 +msgid "The required field 'Login' is not set." +msgstr "" + +#: plugins/personal/generic/class_user.inc:880 +msgid "" +"There's already a person with this 'Name'/'Given name' combination in the " +"database." +msgstr "" + +#: plugins/personal/generic/class_user.inc:887 +msgid "" +"The field 'Login' contains invalid characters. Lowercase, numbers and dashes " +"are allowed." +msgstr "" + +#: plugins/personal/generic/class_user.inc:890 +msgid "The field 'Homepage' contains an invalid URL definition." +msgstr "" + +#: plugins/personal/generic/class_user.inc:893 +#: plugins/personal/generic/class_user.inc:921 +#: plugins/addons/addressbook/class_addressbook.inc:496 +#: plugins/addons/addressbook/class_addressbook.inc:524 +#: plugins/admin/departments/class_departmentGeneric.inc:153 +msgid "The field 'Name' contains invalid characters." +msgstr "" + +#: plugins/personal/generic/class_user.inc:896 +#: plugins/personal/generic/class_user.inc:918 +#: plugins/addons/addressbook/class_addressbook.inc:499 +#: plugins/addons/addressbook/class_addressbook.inc:521 +msgid "The field 'Given name' contains invalid characters." +msgstr "" + +#: plugins/personal/generic/class_user.inc:901 +#: plugins/personal/generic/class_user.inc:904 +#: plugins/addons/addressbook/class_addressbook.inc:504 +#: plugins/addons/addressbook/class_addressbook.inc:507 +#: plugins/admin/departments/class_departmentGeneric.inc:156 +msgid "The field 'Phone' contains an invalid phone number." +msgstr "" + +#: plugins/personal/generic/class_user.inc:907 +#: plugins/addons/addressbook/class_addressbook.inc:510 +#: plugins/admin/departments/class_departmentGeneric.inc:159 +msgid "The field 'Fax' contains an invalid phone number." +msgstr "" + +#: plugins/personal/generic/class_user.inc:910 +#: plugins/addons/addressbook/class_addressbook.inc:513 +msgid "The field 'Mobile' contains an invalid phone number." +msgstr "" + +#: plugins/personal/generic/class_user.inc:913 +#: plugins/addons/addressbook/class_addressbook.inc:516 +msgid "The field 'Pager' contains an invalid phone number." +msgstr "" + +#: plugins/personal/generic/password.tpl:2 +msgid "" +"You have changed the method your password is stored in the ldap database. " +"For that reason you've to enter your password at this point again. GOsa will " +"then encode it with the selected method." +msgstr "" + +#: plugins/personal/generic/generic.tpl:6 +msgid "Personal information" +msgstr "" + +#: plugins/personal/generic/generic.tpl:15 +#: plugins/personal/generic/generic_picture.tpl:6 +msgid "Personal picture" +msgstr "" + +#: plugins/personal/generic/generic.tpl:17 +msgid "Change picture" +msgstr "" + +#: plugins/personal/generic/generic.tpl:24 +#: plugins/addons/addressbook/contents.tpl:14 +#: plugins/addons/addressbook/address_edit.tpl:20 +#: plugins/addons/addressbook/address_info.tpl:16 +#: plugins/addons/addressbook/class_addressbook.inc:463 +#: plugins/admin/users/template.tpl:19 +msgid "Name" +msgstr "" + +#: plugins/personal/generic/generic.tpl:30 +#: plugins/addons/addressbook/address_edit.tpl:20 +#: plugins/addons/addressbook/class_addressbook.inc:463 +#: plugins/admin/users/template.tpl:23 +msgid "Given name" +msgstr "" + +#: plugins/personal/generic/generic.tpl:34 plugins/admin/users/template.tpl:29 +msgid "Login" +msgstr "" + +#: plugins/personal/generic/generic.tpl:42 +#: plugins/addons/addressbook/address_edit.tpl:26 +#: plugins/addons/addressbook/address_info.tpl:22 +msgid "Personal title" +msgstr "" + +#: plugins/personal/generic/generic.tpl:50 +msgid "Academic title" +msgstr "" + +#: plugins/personal/generic/generic.tpl:58 +msgid "Date of birth" +msgstr "" + +#: plugins/personal/generic/generic.tpl:75 +#: ihtml/themes/altlinux/sizelimit.tpl:14 +#: ihtml/themes/default/sizelimit.tpl:14 +msgid "Set" +msgstr "" + +#: plugins/personal/generic/generic.tpl:81 +msgid "Sex" +msgstr "" + +#: plugins/personal/generic/generic.tpl:92 +#: plugins/gofax/blocklists/generic.tpl:14 plugins/admin/groups/generic.tpl:21 +#: plugins/admin/applications/generic.tpl:33 +#: plugins/admin/departments/generic.tpl:27 +#: plugins/admin/systems/server.tpl:13 plugins/admin/systems/phone.tpl:13 +#: plugins/admin/systems/terminal.tpl:18 plugins/admin/systems/printer.tpl:21 +#: plugins/admin/systems/workstation.tpl:18 +#: plugins/admin/systems/component.tpl:13 +#: plugins/admin/systems/wingeneric.tpl:13 +#: plugins/admin/ogroups/generic.tpl:21 +msgid "Base" +msgstr "" + +#: plugins/personal/generic/generic.tpl:96 +msgid "Choose subtree to place user in" +msgstr "" + +#: plugins/personal/generic/generic.tpl:111 +#: plugins/personal/generic/generic.tpl:255 +#: plugins/addons/addressbook/address_edit.tpl:37 +#: plugins/addons/addressbook/address_edit.tpl:86 +#: plugins/addons/addressbook/address_info.tpl:33 +#: plugins/addons/addressbook/address_info.tpl:82 +#: plugins/admin/departments/generic.tpl:54 +msgid "Address" +msgstr "" + +#: plugins/personal/generic/generic.tpl:115 +msgid "Private phone" +msgstr "" + +#: plugins/personal/generic/generic.tpl:119 +msgid "Homepage" +msgstr "" + +#: plugins/personal/generic/generic.tpl:128 +msgid "Password storage" +msgstr "" + +#: plugins/personal/generic/generic.tpl:138 +#: plugins/personal/generic/generic_certs.tpl:7 +msgid "Certificates" +msgstr "" + +#: plugins/personal/generic/generic.tpl:140 +msgid "Edit certificates" +msgstr "" + +#: plugins/personal/generic/generic.tpl:144 +msgid "Kerberos" +msgstr "" + +#: plugins/personal/generic/generic.tpl:145 +msgid "Edit properties" +msgstr "" + +#: plugins/personal/generic/generic.tpl:161 +msgid "Organizational information" +msgstr "" + +#: plugins/personal/generic/generic.tpl:173 +msgid "Organization" +msgstr "" + +#: plugins/personal/generic/generic.tpl:177 +#: plugins/addons/addressbook/address_edit.tpl:68 +#: plugins/addons/addressbook/address_info.tpl:64 +#: plugins/generic/references/class_reference.inc:38 +msgid "Department" +msgstr "" + +#: plugins/personal/generic/generic.tpl:181 +msgid "Department No." +msgstr "" + +#: plugins/personal/generic/generic.tpl:187 +msgid "Employee No." +msgstr "" + +#: plugins/personal/generic/generic.tpl:193 +msgid "Employee type" +msgstr "" + +#: plugins/personal/generic/generic.tpl:209 +#: plugins/personal/generic/generic.tpl:348 +msgid "Room No." +msgstr "" + +#: plugins/personal/generic/generic.tpl:221 +#: plugins/addons/addressbook/contents.tpl:15 +#: plugins/addons/addressbook/address_edit.tpl:44 +#: plugins/addons/addressbook/address_info.tpl:40 +msgid "Mobile" +msgstr "" + +#: plugins/personal/generic/generic.tpl:225 +#: plugins/addons/addressbook/address_edit.tpl:95 +#: plugins/addons/addressbook/address_info.tpl:91 +msgid "Pager" +msgstr "" + +#: plugins/personal/generic/generic.tpl:247 +#: plugins/admin/departments/generic.tpl:42 +#: plugins/admin/departments/generic.tpl:50 +#: plugins/admin/systems/printer.tpl:14 +msgid "Location" +msgstr "" + +#: plugins/personal/generic/generic.tpl:251 +#: plugins/admin/departments/generic.tpl:46 +msgid "State" +msgstr "" + +#: plugins/personal/generic/generic.tpl:269 +msgid "Vocation" +msgstr "" + +#: plugins/personal/generic/generic.tpl:273 +msgid "Unit description" +msgstr "" + +#: plugins/personal/generic/generic.tpl:281 +msgid "Subject area" +msgstr "" + +#: plugins/personal/generic/generic.tpl:289 +msgid "Functional title" +msgstr "" + +#: plugins/personal/generic/generic.tpl:296 +msgid "Role" +msgstr "" + +#: plugins/personal/generic/generic.tpl:308 +msgid "Person locality" +msgstr "" + +#: plugins/personal/generic/generic.tpl:316 +msgid "Unit" +msgstr "" + +#: plugins/personal/generic/generic.tpl:323 +msgid "Street" +msgstr "" + +#: plugins/personal/generic/generic.tpl:329 +#: plugins/addons/addressbook/address_edit.tpl:74 +#: plugins/addons/addressbook/address_info.tpl:70 +msgid "Postal code" +msgstr "" + +#: plugins/personal/generic/generic.tpl:335 +msgid "House identifier" +msgstr "" + +#: plugins/personal/generic/generic.tpl:357 +msgid "Please use the phone tab" +msgstr "" + +#: plugins/personal/generic/generic.tpl:370 +msgid "Last delivery" +msgstr "" + +#: plugins/personal/generic/generic.tpl:378 +msgid "Public visible" +msgstr "" + +#: plugins/personal/generic/generic_picture.tpl:23 +msgid "Remove picture" +msgstr "" + +#: plugins/personal/generic/generic_picture.tpl:29 +#: plugins/addons/addressbook/address_edit.tpl:107 +msgid "Save" +msgstr "" + +#: plugins/personal/generic/generic_certs.tpl:14 +msgid "Standard certificate" +msgstr "" + +#: plugins/personal/generic/generic_certs.tpl:19 +#: plugins/personal/generic/generic_certs.tpl:30 +#: plugins/personal/generic/generic_certs.tpl:41 +#: plugins/admin/groups/class_groupMail.inc:408 +#: plugins/admin/applications/class_applicationParameters.inc:94 +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:205 +#: ihtml/themes/altlinux/islocked.tpl:13 ihtml/themes/classic/islocked.tpl:13 +#: ihtml/themes/default/islocked.tpl:13 +msgid "Remove" +msgstr "" + +#: plugins/personal/generic/generic_certs.tpl:25 +msgid "S/MIME certificate" +msgstr "" + +#: plugins/personal/generic/generic_certs.tpl:36 +msgid "PKCS12 certificate" +msgstr "" + +#: plugins/personal/generic/generic_certs.tpl:48 +msgid "Certificate serial number" +msgstr "" + +#: plugins/personal/generic/main.inc:107 +msgid "You are not allowed to set your password!" +msgstr "" + +#: plugins/personal/generic/main.inc:187 +msgid "Generic user information" +msgstr "" + +#: plugins/personal/connectivity/class_pureftpdAccount.inc:6 +#: plugins/generic/references/class_reference.inc:34 +msgid "FTP" +msgstr "" + +#: plugins/personal/connectivity/class_pureftpdAccount.inc:112 +msgid "Value specified as 'Upload bandwidth' is not valid." +msgstr "" + +#: plugins/personal/connectivity/class_pureftpdAccount.inc:115 +msgid "Value specified as 'Download bandwidth' is not valid." +msgstr "" + +#: plugins/personal/connectivity/class_pureftpdAccount.inc:118 +msgid "Value specified as 'Files' is not valid." +msgstr "" + +#: plugins/personal/connectivity/class_pureftpdAccount.inc:121 +msgid "Value specified as 'Size' is not valid." +msgstr "" + +#: plugins/personal/connectivity/class_pureftpdAccount.inc:124 +msgid "Value specified as 'Ratio' is not valid." +msgstr "" + +#: plugins/personal/connectivity/class_phpgwAccount.inc:5 +msgid "PHPGroupware" +msgstr "" + +#: plugins/personal/connectivity/proxy.tpl:1 +msgid "Proxy account" +msgstr "" + +#: plugins/personal/connectivity/proxy.tpl:8 +msgid "Filter unwanted content (i.e. pornographic or violence related)" +msgstr "" + +#: plugins/personal/connectivity/proxy.tpl:13 +msgid "Limit proxy access to working time" +msgstr "" + +#: plugins/personal/connectivity/proxy.tpl:42 +msgid "Restrict proxy usage by quota" +msgstr "" + +#: plugins/personal/connectivity/proxy.tpl:52 +msgid "per" +msgstr "" + +#: plugins/personal/connectivity/class_webdavAccount.inc:6 +msgid "WebDAV" +msgstr "" + +#: plugins/personal/connectivity/phpgw.tpl:1 +msgid "PHPGroupware account" +msgstr "" + +#: plugins/personal/connectivity/webdav.tpl:1 +msgid "WebDAV account" +msgstr "" + +#: plugins/personal/connectivity/pureftpd.tpl:1 +msgid "FTP account" +msgstr "" + +#: plugins/personal/connectivity/pureftpd.tpl:11 +msgid "Bandwidth" +msgstr "" + +#: plugins/personal/connectivity/pureftpd.tpl:15 +msgid "Upload bandwidth" +msgstr "" + +#: plugins/personal/connectivity/pureftpd.tpl:16 +#: plugins/personal/connectivity/pureftpd.tpl:20 +msgid "kb/s" +msgstr "" + +#: plugins/personal/connectivity/pureftpd.tpl:19 +msgid "Download bandwidth" +msgstr "" + +#: plugins/personal/connectivity/pureftpd.tpl:31 +msgid "Quota" +msgstr "" + +#: plugins/personal/connectivity/pureftpd.tpl:35 +msgid "Files" +msgstr "" + +#: plugins/personal/connectivity/pureftpd.tpl:39 +msgid "Size" +msgstr "" + +#: plugins/personal/connectivity/pureftpd.tpl:50 +msgid "Ratio" +msgstr "" + +#: plugins/personal/connectivity/pureftpd.tpl:54 +msgid "Uploaded / downloaded files" +msgstr "" + +#: plugins/personal/connectivity/pureftpd.tpl:67 +msgid "Check to disable FTP Access" +msgstr "" + +#: plugins/personal/connectivity/pureftpd.tpl:67 +msgid "Temporary disable FTP access" +msgstr "" + +#: plugins/personal/connectivity/class_connectivity.inc:60 +msgid "This account has no connectivity extensions." +msgstr "" + +#: plugins/personal/connectivity/class_proxyAccount.inc:5 +#: plugins/generic/references/class_reference.inc:32 +msgid "Proxy" +msgstr "" + +#: plugins/personal/connectivity/class_proxyAccount.inc:69 +msgid "KB" +msgstr "" + +#: plugins/personal/connectivity/class_proxyAccount.inc:69 +msgid "GB" +msgstr "" + +#: plugins/personal/connectivity/class_proxyAccount.inc:70 +msgid "hour" +msgstr "" + +#: plugins/personal/connectivity/class_proxyAccount.inc:70 +msgid "day" +msgstr "" + +#: plugins/personal/connectivity/class_proxyAccount.inc:70 +msgid "week" +msgstr "" + +#: plugins/personal/connectivity/class_proxyAccount.inc:70 +msgid "month" +msgstr "" + +#: plugins/gofax/blocklists/generic.tpl:8 +msgid "List name" +msgstr "" + +#: plugins/gofax/blocklists/generic.tpl:10 +msgid "Name of blocklist" +msgstr "" + +#: plugins/gofax/blocklists/generic.tpl:16 +msgid "Select subtree to place blocklist in" +msgstr "" + +#: plugins/gofax/blocklists/generic.tpl:31 +#: plugins/admin/systems/service.tpl:42 plugins/admin/systems/service.tpl:120 +msgid "Type" +msgstr "" + +#: plugins/gofax/blocklists/generic.tpl:33 +msgid "Select wether to filter incoming or outgoing calls" +msgstr "" + +#: plugins/gofax/blocklists/generic.tpl:39 plugins/admin/groups/generic.tpl:13 +#: plugins/admin/applications/generic.tpl:24 +#: plugins/admin/departments/generic.tpl:12 +#: plugins/admin/systems/server.tpl:24 plugins/admin/systems/phone.tpl:24 +#: plugins/admin/systems/printer.tpl:10 plugins/admin/systems/component.tpl:24 +#: plugins/admin/systems/wingeneric.tpl:24 +#: plugins/admin/ogroups/generic.tpl:13 +#: plugins/generic/references/contents.tpl:11 +msgid "Description" +msgstr "" + +#: plugins/gofax/blocklists/generic.tpl:41 +msgid "Descriptive text for this blocklist" +msgstr "" + +#: plugins/gofax/blocklists/generic.tpl:54 +msgid "Blocked numbers" +msgstr "" + +#: plugins/gofax/blocklists/generic.tpl:64 +#: plugins/gofax/blocklists/headpage.tpl:24 +#: plugins/addons/addressbook/contents.tpl:33 +#: plugins/admin/groups/headpage.tpl:25 plugins/admin/users/headpage.tpl:26 +#: plugins/admin/applications/headpage.tpl:24 +#: plugins/admin/departments/headpage.tpl:24 +#: plugins/admin/systems/headpage.tpl:25 plugins/admin/ogroups/headpage.tpl:25 +msgid "Information" +msgstr "" + +#: plugins/gofax/blocklists/generic.tpl:66 +msgid "Numbers can also contain wild cards." +msgstr "" + +#: plugins/gofax/blocklists/class_blocklistManagement.inc:5 +msgid "FAX Blocklists" +msgstr "" + +#: plugins/gofax/blocklists/class_blocklistManagement.inc:121 +#, php-format +msgid "You're about to delete the blocklist '%s'." +msgstr "" + +#: plugins/gofax/blocklists/class_blocklistManagement.inc:135 +msgid "You have no permission to remove this blocklist." +msgstr "" + +#: plugins/gofax/blocklists/class_blocklistManagement.inc:153 +msgid "Please specify a valid phone number." +msgstr "" + +#: plugins/gofax/blocklists/class_blocklistManagement.inc:226 +msgid "send" +msgstr "" + +#: plugins/gofax/blocklists/class_blocklistManagement.inc:226 +msgid "receive" +msgstr "" + +#: plugins/gofax/blocklists/class_blocklistManagement.inc:342 +msgid "You have no permissions to create a blocklist on this 'Base'." +msgstr "" + +#: plugins/gofax/blocklists/class_blocklistManagement.inc:348 +#: plugins/admin/departments/class_departmentGeneric.inc:141 +msgid "Required field 'Name' is not set." +msgstr "" + +#: plugins/gofax/blocklists/class_blocklistManagement.inc:351 +msgid "Required field 'Name' contains invalid characters" +msgstr "" + +#: plugins/gofax/blocklists/class_blocklistManagement.inc:359 +msgid "Specified name is already used." +msgstr "" + +#: plugins/gofax/blocklists/class_blocklistManagement.inc:366 +msgid "No permission to create a blocklist on this base." +msgstr "" + +#: plugins/gofax/blocklists/remove.tpl:2 +#: plugins/addons/addressbook/remove.tpl:2 plugins/admin/groups/remove.tpl:2 +#: plugins/admin/users/remove.tpl:2 plugins/admin/applications/remove.tpl:2 +#: plugins/admin/departments/remove.tpl:2 plugins/admin/systems/remove.tpl:2 +#: plugins/admin/ogroups/remove.tpl:2 html/index.php:211 +#: ihtml/themes/altlinux/conflict.tpl:6 ihtml/themes/altlinux/islocked.tpl:6 +#: ihtml/themes/classic/conflict.tpl:6 ihtml/themes/classic/islocked.tpl:6 +#: ihtml/themes/default/conflict.tpl:6 ihtml/themes/default/islocked.tpl:6 +msgid "Warning" +msgstr "" + +#: plugins/gofax/blocklists/remove.tpl:7 +msgid "" +"Please double check if your really want to do this since there is no way for " +"GOsa to get your data back." +msgstr "" + +#: plugins/gofax/blocklists/remove.tpl:11 +#: plugins/addons/addressbook/remove.tpl:11 plugins/admin/groups/remove.tpl:11 +#: plugins/admin/users/remove.tpl:11 plugins/admin/applications/remove.tpl:10 +#: plugins/admin/ogroups/remove.tpl:11 +msgid "" +"So - if you're sure - press Delete to continue or Cancel to " +"abort." +msgstr "" + +#: plugins/gofax/blocklists/headpage.tpl:6 +msgid "List of blocklists" +msgstr "" + +#: plugins/gofax/blocklists/headpage.tpl:15 +#: plugins/admin/groups/headpage.tpl:15 plugins/admin/users/headpage.tpl:15 +#: plugins/admin/applications/headpage.tpl:15 +#: plugins/admin/departments/headpage.tpl:15 +#: plugins/admin/systems/headpage.tpl:15 plugins/admin/ogroups/headpage.tpl:15 +msgid "New" +msgstr "" + +#: plugins/gofax/blocklists/headpage.tpl:28 +msgid "" +"This menu allows to create, delete and edit selected blocklists. Having a " +"large size of lists, you might prefer the range selectors on top of the " +"select box." +msgstr "" + +#: plugins/gofax/blocklists/headpage.tpl:31 +msgid "" +"-Edit- and -New blocklist- will provide an assistant to aid you when " +"performing changes on your blocklist. -Delete- will ask you for confirmation " +"before really deleting anything." +msgstr "" + +#: plugins/gofax/blocklists/headpage.tpl:45 +msgid "Select to see send blocklists" +msgstr "" + +#: plugins/gofax/blocklists/headpage.tpl:45 +msgid "Show send blocklists" +msgstr "" + +#: plugins/gofax/blocklists/headpage.tpl:46 +msgid "Select to see receive blocklists" +msgstr "" + +#: plugins/gofax/blocklists/headpage.tpl:46 +msgid "Show receive blocklists" +msgstr "" + +#: plugins/gofax/blocklists/headpage.tpl:49 +msgid "Display lists of department" +msgstr "" + +#: plugins/gofax/blocklists/headpage.tpl:55 +msgid "Display lists matching" +msgstr "" + +#: plugins/gofax/blocklists/headpage.tpl:56 +msgid "Regular expression for matching list names" +msgstr "" + +#: plugins/gofax/blocklists/headpage.tpl:59 +msgid "Display lists containing" +msgstr "" + +#: plugins/gofax/blocklists/headpage.tpl:60 +msgid "Show lists containing entered numbers" +msgstr "" + +#: plugins/gofax/blocklists/main.inc:20 plugins/gofax/blocklists/main.inc:22 +msgid "Blocklist management" +msgstr "" + +#: plugins/gofax/faxaccount/generic.tpl:12 +msgid "Fax number for GOfax to trigger on" +msgstr "" + +#: plugins/gofax/faxaccount/generic.tpl:16 +msgid "Language" +msgstr "" + +#: plugins/gofax/faxaccount/generic.tpl:18 +msgid "Specify the GOfax communication language for fax to mail gateway" +msgstr "" + +#: plugins/gofax/faxaccount/generic.tpl:24 +msgid "Delivery format" +msgstr "" + +#: plugins/gofax/faxaccount/generic.tpl:26 +msgid "Specify delivery format for fax to mail gateway" +msgstr "" + +#: plugins/gofax/faxaccount/generic.tpl:38 +msgid "Delivery methods" +msgstr "" + +#: plugins/gofax/faxaccount/generic.tpl:41 +msgid "Temporary disable fax usage" +msgstr "" + +#: plugins/gofax/faxaccount/generic.tpl:45 +msgid "Deliver fax as mail to" +msgstr "" + +#: plugins/gofax/faxaccount/generic.tpl:49 +msgid "Deliver fax as mail" +msgstr "" + +#: plugins/gofax/faxaccount/generic.tpl:54 +msgid "Deliver fax to printer" +msgstr "" + +#: plugins/gofax/faxaccount/generic.tpl:68 +msgid "Alternate fax numbers" +msgstr "" + +#: plugins/gofax/faxaccount/generic.tpl:83 +msgid "Blocklists" +msgstr "" + +#: plugins/gofax/faxaccount/generic.tpl:86 +msgid "Blocklists for incoming fax" +msgstr "" + +#: plugins/gofax/faxaccount/generic.tpl:92 +msgid "Blocklists for outgoing fax" +msgstr "" + +#: plugins/gofax/faxaccount/locals.tpl:6 +msgid "Select numbers to add" +msgstr "" + +#: plugins/gofax/faxaccount/locals.tpl:28 +msgid "Display numbers of department" +msgstr "" + +#: plugins/gofax/faxaccount/locals.tpl:34 +msgid "Display numbers matching" +msgstr "" + +#: plugins/gofax/faxaccount/locals.tpl:35 +msgid "Regular expression for matching numbers" +msgstr "" + +#: plugins/gofax/faxaccount/locals.tpl:38 +msgid "Display numbers of user" +msgstr "" + +#: plugins/gofax/faxaccount/locals.tpl:39 +msgid "User name of which numbers are shown" +msgstr "" + +#: plugins/gofax/faxaccount/lists.tpl:4 +msgid "Blocked numbers/lists" +msgstr "" + +#: plugins/gofax/faxaccount/lists.tpl:18 +#: plugins/admin/groups/mail_admins.tpl:24 +msgid "Select a specific department" +msgstr "" + +#: plugins/gofax/faxaccount/lists.tpl:25 plugins/admin/groups/acl.tpl:12 +#: plugins/admin/groups/mail_admins.tpl:30 +msgid "Choose" +msgstr "" + +#: plugins/gofax/faxaccount/lists.tpl:28 +msgid "List of predefined blocklists" +msgstr "" + +#: plugins/gofax/faxaccount/lists.tpl:37 +#: plugins/admin/groups/application_options.tpl:8 +#: plugins/admin/groups/mail_admins.tpl:37 include/functions.inc:1333 +msgid "Apply" +msgstr "" + +#: plugins/gofax/faxaccount/main.inc:105 +msgid "FAX settings" +msgstr "" + +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:6 +#: plugins/addons/addressbook/address_edit.tpl:92 +#: plugins/addons/addressbook/address_info.tpl:88 +#: plugins/generic/references/class_reference.inc:30 +msgid "FAX" +msgstr "" + +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:109 +msgid "This account has no fax extensions." +msgstr "" + +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:118 +msgid "Remove fax account" +msgstr "" + +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:119 +msgid "" +"This account has fax features enabled. You can disable them by clicking " +"below." +msgstr "" + +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:121 +msgid "Create fax account" +msgstr "" + +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:122 +msgid "" +"This account has fax features disabled. You can enable them by clicking " +"below." +msgstr "" + +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:190 +msgid "You're trying to add an invalid phone number." +msgstr "" + +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:451 +msgid "The required field 'Fax' is not set." +msgstr "" + +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:455 +msgid "Please enter a valid telephone number in the 'Fax' field." +msgstr "" + +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:463 +msgid "Mail delivery is checked, but no address has been specified." +msgstr "" + +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:465 +msgid "The mail address you've entered is invalid." +msgstr "" + +#: plugins/gofax/reports/detail.tpl:6 +msgid "FAX preview - please wait" +msgstr "" + +#: plugins/gofax/reports/detail.tpl:9 +msgid "Click on fax to download" +msgstr "" + +#: plugins/gofax/reports/detail.tpl:18 +msgid "FAX ID" +msgstr "" + +#: plugins/gofax/reports/detail.tpl:22 plugins/gofax/reports/contents.tpl:30 +msgid "User" +msgstr "" + +#: plugins/gofax/reports/detail.tpl:26 +msgid "Date / Time" +msgstr "" + +#: plugins/gofax/reports/detail.tpl:30 +msgid "Sender MSN" +msgstr "" + +#: plugins/gofax/reports/detail.tpl:34 +msgid "Sender ID" +msgstr "" + +#: plugins/gofax/reports/detail.tpl:38 +msgid "Receiver MSN" +msgstr "" + +#: plugins/gofax/reports/detail.tpl:42 +msgid "Receiver ID" +msgstr "" + +#: plugins/gofax/reports/detail.tpl:50 +msgid "Status message" +msgstr "" + +#: plugins/gofax/reports/detail.tpl:54 +msgid "Transfer time" +msgstr "" + +#: plugins/gofax/reports/detail.tpl:58 plugins/gofax/reports/contents.tpl:35 +msgid "# pages" +msgstr "" + +#: plugins/gofax/reports/contents.tpl:2 plugins/addons/logview/contents.tpl:2 +#: plugins/gofon/reports/contents.tpl:2 +msgid "Filter" +msgstr "" + +#: plugins/gofax/reports/contents.tpl:6 +#: plugins/addons/addressbook/contents.tpl:77 +#: plugins/addons/logview/contents.tpl:45 plugins/gofon/reports/contents.tpl:6 +msgid "Search for" +msgstr "" + +#: plugins/gofax/reports/contents.tpl:7 plugins/gofon/reports/contents.tpl:7 +msgid "Enter user name to search for" +msgstr "" + +#: plugins/gofax/reports/contents.tpl:8 plugins/gofax/reports/contents.tpl:16 +#: plugins/gofon/reports/contents.tpl:8 plugins/gofon/reports/contents.tpl:16 +msgid "in" +msgstr "" + +#: plugins/gofax/reports/contents.tpl:9 plugins/gofon/reports/contents.tpl:9 +msgid "Select subtree to base search on" +msgstr "" + +#: plugins/gofax/reports/contents.tpl:12 plugins/gofon/reports/contents.tpl:12 +msgid "during" +msgstr "" + +#: plugins/gofax/reports/contents.tpl:21 +#: plugins/addons/logview/contents.tpl:65 +#: plugins/gofon/reports/contents.tpl:21 +msgid "Search" +msgstr "" + +#: plugins/gofax/reports/contents.tpl:31 +#: plugins/addons/logview/contents.tpl:83 +#: plugins/gofon/reports/contents.tpl:30 +msgid "Date" +msgstr "" + +#: plugins/gofax/reports/contents.tpl:33 +msgid "Sender" +msgstr "" + +#: plugins/gofax/reports/contents.tpl:34 +msgid "Receiver" +msgstr "" + +#: plugins/gofax/reports/contents.tpl:47 +#: plugins/addons/logview/contents.tpl:96 +#: plugins/gofon/reports/contents.tpl:48 +msgid "Search returned no results..." +msgstr "" + +#: plugins/gofax/reports/class_faxreport.inc:6 +msgid "FAX Reports" +msgstr "" + +#: plugins/gofax/reports/class_faxreport.inc:97 +#: plugins/gofax/reports/class_faxreport.inc:204 +msgid "Can't connect to fax database, no reports can be shown!" +msgstr "" + +#: plugins/gofax/reports/class_faxreport.inc:101 +#: plugins/gofax/reports/class_faxreport.inc:208 +msgid "Can't select fax database for report generation!" +msgstr "" + +#: plugins/gofax/reports/class_faxreport.inc:109 +#: plugins/gofax/reports/class_faxreport.inc:216 +msgid "Query for fax database failed!" +msgstr "" + +#: plugins/gofax/reports/class_faxreport.inc:117 +msgid "You have no permission to retrieve informations about this fax id!" +msgstr "" + +#: plugins/gofax/reports/class_faxreport.inc:137 +#: plugins/gofax/reports/class_faxreport.inc:224 +#: plugins/gofon/reports/class_fonreport.inc:158 +msgid "Y-M-D" +msgstr "" + +#: plugins/gofax/reports/main.inc:5 +msgid "FAX reports" +msgstr "" + +#: plugins/addons/addressbook/contents.tpl:15 +#: plugins/addons/addressbook/address_edit.tpl:33 +#: plugins/addons/addressbook/address_info.tpl:29 +msgid "Private" +msgstr "" + +#: plugins/addons/addressbook/contents.tpl:15 +msgid "Contact" +msgstr "" + +#: plugins/addons/addressbook/contents.tpl:37 +msgid "" +"The telephone list plugin provides list and search facilities for the people " +"in your site. You may want to specify the asterisk [*] like in 'Go*us' to " +"find 'Gonicus'. Use the filters below to narrow down your search." +msgstr "" + +#: plugins/addons/addressbook/contents.tpl:42 +msgid "Actions" +msgstr "" + +#: plugins/addons/addressbook/contents.tpl:47 +msgid "Add entry" +msgstr "" + +#: plugins/addons/addressbook/contents.tpl:50 +msgid "Edit entry" +msgstr "" + +#: plugins/addons/addressbook/contents.tpl:52 +msgid "Remove entry" +msgstr "" + +#: plugins/addons/addressbook/contents.tpl:67 +msgid "Select to see regular users" +msgstr "" + +#: plugins/addons/addressbook/contents.tpl:67 +msgid "Show organizational entries" +msgstr "" + +#: plugins/addons/addressbook/contents.tpl:68 +msgid "Select to see users in addressbook" +msgstr "" + +#: plugins/addons/addressbook/contents.tpl:68 +msgid "Show addressbook entries" +msgstr "" + +#: plugins/addons/addressbook/contents.tpl:71 +msgid "Display results for department" +msgstr "" + +#: plugins/addons/addressbook/contents.tpl:78 +msgid "Search string" +msgstr "" + +#: plugins/addons/addressbook/contents.tpl:81 +msgid "Match object" +msgstr "" + +#: plugins/addons/addressbook/contents.tpl:83 +msgid "Choose the object that will be searched in" +msgstr "" + +#: plugins/addons/addressbook/dial.tpl:3 +msgid "Dial connection..." +msgstr "" + +#: plugins/addons/addressbook/dial.tpl:11 +#: plugins/addons/addressbook/class_addressbook.inc:337 +#: plugins/addons/addressbook/class_addressbook.inc:339 +#: plugins/addons/addressbook/class_addressbook.inc:340 +#: plugins/addons/addressbook/class_addressbook.inc:414 +msgid "Dial" +msgstr "" + +#: plugins/addons/addressbook/address_edit.tpl:4 +msgid "Choose the department to store entry in" +msgstr "" + +#: plugins/addons/addressbook/address_edit.tpl:16 +#: plugins/addons/addressbook/address_info.tpl:12 +msgid "Personal" +msgstr "" + +#: plugins/addons/addressbook/address_edit.tpl:23 +#: plugins/addons/addressbook/address_info.tpl:19 +msgid "Initials" +msgstr "" + +#: plugins/addons/addressbook/address_edit.tpl:47 +#: plugins/addons/addressbook/address_info.tpl:43 +msgid "Email" +msgstr "" + +#: plugins/addons/addressbook/address_edit.tpl:57 +#: plugins/addons/addressbook/address_info.tpl:53 +msgid "Organizational" +msgstr "" + +#: plugins/addons/addressbook/address_edit.tpl:65 +#: plugins/addons/addressbook/address_info.tpl:61 +msgid "Company" +msgstr "" + +#: plugins/addons/addressbook/address_edit.tpl:71 +#: plugins/addons/addressbook/address_info.tpl:67 +msgid "City" +msgstr "" + +#: plugins/addons/addressbook/address_edit.tpl:77 +#: plugins/addons/addressbook/address_info.tpl:73 +msgid "Country" +msgstr "" + +#: plugins/addons/addressbook/remove.tpl:7 +msgid "" +"This includes all addressbook data in this entry. Please double check if " +"your really want to do this since there is no way for GOsa to get your data " +"back." +msgstr "" + +#: plugins/addons/addressbook/main.inc:23 +msgid "Address book" +msgstr "" + +#: plugins/addons/addressbook/class_addressbook.inc:6 +msgid "Addressbook" +msgstr "" + +#: plugins/addons/addressbook/class_addressbook.inc:143 +#, php-format +msgid "Dial from %s to %s now?" +msgstr "" + +#: plugins/addons/addressbook/class_addressbook.inc:147 +msgid "" +"You have no personal phone number set. Please change that in order to " +"perform direct dials." +msgstr "" + +#: plugins/addons/addressbook/class_addressbook.inc:176 +#: plugins/addons/addressbook/class_addressbook.inc:280 +msgid "You are not allowed to delete this entry!" +msgstr "" + +#: plugins/addons/addressbook/class_addressbook.inc:274 +#, php-format +msgid "You're about to delete the entry %s." +msgstr "" + +#: plugins/addons/addressbook/class_addressbook.inc:343 +#, php-format +msgid "Save contact for %s as vcard" +msgstr "" + +#: plugins/addons/addressbook/class_addressbook.inc:346 +#, php-format +msgid "Send mail to %s" +msgstr "" + +#: plugins/addons/addressbook/class_addressbook.inc:426 +msgid "global addressbook" +msgstr "" + +#: plugins/addons/addressbook/class_addressbook.inc:428 +msgid "organizations user database" +msgstr "" + +#: plugins/addons/addressbook/class_addressbook.inc:432 +#, php-format +msgid "Contact stored in %s" +msgstr "" + +#: plugins/addons/addressbook/class_addressbook.inc:434 +msgid "Creating new entry in" +msgstr "" + +#: plugins/addons/addressbook/class_addressbook.inc:463 +#: plugins/addons/logview/class_logview.inc:62 +#: plugins/addons/logview/class_logview.inc:76 +msgid "All" +msgstr "" + +#: plugins/addons/addressbook/class_addressbook.inc:464 +msgid "Work phone" +msgstr "" + +#: plugins/addons/addressbook/class_addressbook.inc:464 +msgid "Cell phone" +msgstr "" + +#: plugins/addons/addressbook/class_addressbook.inc:465 +msgid "Home phone" +msgstr "" + +#: plugins/addons/addressbook/class_addressbook.inc:465 +msgid "User ID" +msgstr "" + +#: plugins/addons/addressbook/class_addressbook.inc:537 +msgid "" +"Cannot create a unique DN for your entry. Please fill more formular fields." +msgstr "" + +#: plugins/addons/addressbook/class_addressbook.inc:549 +msgid "" +"You have no permissions to create or modify a global address book entry." +msgstr "" + +#: plugins/addons/logview/class_logview.inc:6 +msgid "System logs" +msgstr "" + +#: plugins/addons/logview/class_logview.inc:36 +msgid "No LOG servers defined!" +msgstr "" + +#: plugins/addons/logview/class_logview.inc:43 +#: plugins/addons/logview/class_logview.inc:131 +msgid "Can't connect to log database, no logs can be shown!" +msgstr "" + +#: plugins/addons/logview/class_logview.inc:47 +#: plugins/addons/logview/class_logview.inc:135 +msgid "Can't select log database for log generation!" +msgstr "" + +#: plugins/addons/logview/class_logview.inc:56 +#: plugins/addons/logview/class_logview.inc:70 +#: plugins/addons/logview/class_logview.inc:208 +msgid "Query for log database failed!" +msgstr "" + +#: plugins/addons/logview/class_logview.inc:80 +msgid "one hour" +msgstr "" + +#: plugins/addons/logview/class_logview.inc:80 +msgid "6 hours" +msgstr "" + +#: plugins/addons/logview/class_logview.inc:81 +msgid "12 hours" +msgstr "" + +#: plugins/addons/logview/class_logview.inc:81 +msgid "24 hours" +msgstr "" + +#: plugins/addons/logview/class_logview.inc:82 +msgid "2 days" +msgstr "" + +#: plugins/addons/logview/class_logview.inc:82 +msgid "one week" +msgstr "" + +#: plugins/addons/logview/class_logview.inc:83 +msgid "2 weeks" +msgstr "" + +#: plugins/addons/logview/class_logview.inc:83 +msgid "one month" +msgstr "" + +#: plugins/addons/logview/contents.tpl:12 +msgid "Show hosts" +msgstr "" + +#: plugins/addons/logview/contents.tpl:20 +msgid "Log level" +msgstr "" + +#: plugins/addons/logview/contents.tpl:37 +msgid "Time interval" +msgstr "" + +#: plugins/addons/logview/contents.tpl:46 +msgid "Enter string to search for" +msgstr "" + +#: plugins/addons/logview/contents.tpl:58 +msgid "Ruleset" +msgstr "" + +#: plugins/addons/logview/contents.tpl:81 +msgid "Level" +msgstr "" + +#: plugins/addons/logview/contents.tpl:82 +msgid "Hostname" +msgstr "" + +#: plugins/addons/logview/contents.tpl:84 +msgid "Message" +msgstr "" + +#: plugins/addons/logview/main.inc:23 +msgid "System log view" +msgstr "" + +#: plugins/addons/ldapmanager/class_csvimport.inc:6 +#: plugins/addons/ldapmanager/class_import.inc:6 +msgid "LDIF export" +msgstr "" + +#: plugins/addons/ldapmanager/class_csvimport.inc:137 +msgid "Need 'sn','givenName' and 'uid' to create user" +msgstr "" + +#: plugins/addons/ldapmanager/class_csvimport.inc:170 +msgid "failed" +msgstr "" + +#: plugins/addons/ldapmanager/class_csvimport.inc:174 +msgid "ok" +msgstr "" + +#: plugins/addons/ldapmanager/class_csvimport.inc:230 +msgid "status" +msgstr "" + +#: plugins/addons/ldapmanager/class_csvimport.inc:234 +#, php-format +msgid "An Error Occured while inserting entry %s - process aborted" +msgstr "" + +#: plugins/addons/ldapmanager/class_csvimport.inc:259 +msgid "Nothing to import !." +msgstr "" + +#: plugins/addons/ldapmanager/class_csvimport.inc:268 +#: plugins/addons/ldapmanager/class_csvimport.inc:279 +#: plugins/addons/ldapmanager/class_csvimport.inc:284 +#: plugins/addons/ldapmanager/class_import.inc:49 +#: plugins/addons/ldapmanager/class_import.inc:57 +msgid "There is no file uploaded." +msgstr "" + +#: plugins/addons/ldapmanager/class_csvimport.inc:273 +#: plugins/addons/ldapmanager/class_import.inc:42 +msgid "The specified file is empty." +msgstr "" + +#: plugins/addons/ldapmanager/class_csvimport.inc:401 +msgid "The selected file does not contain any CSV Data..." +msgstr "" + +#: plugins/addons/ldapmanager/contentimport.tpl:3 +msgid "" +"The LDIF import plugin provides methods to upload a set of entries to your " +"running LDAP directory as ldif. You may use this to add new or modify " +"existing entries. Remember that GOsa will not check your ldifs for GOsa " +"conformance." +msgstr "" + +#: plugins/addons/ldapmanager/contentimport.tpl:13 +msgid "Import LDIF File" +msgstr "" + +#: plugins/addons/ldapmanager/contentimport.tpl:18 +#: plugins/addons/ldapmanager/contentcsv.tpl:15 +msgid "Browse" +msgstr "" + +#: plugins/addons/ldapmanager/contentimport.tpl:31 +msgid "Modify existing attributes" +msgstr "" + +#: plugins/addons/ldapmanager/contentimport.tpl:44 +msgid "Overwrite existing entry" +msgstr "" + +#: plugins/addons/ldapmanager/contentimport.tpl:54 +msgid "Import successfull" +msgstr "" + +#: plugins/addons/ldapmanager/contentcsv.tpl:2 +msgid "" +"The CSV import plugin provides methods to generate user accounts from a file " +"containing Comma Seperated Values. The administrator can decide which " +"columns should be transfered to which attribute. Note that you must have at " +"least the UID, GIVENNAME and SURENAME set." +msgstr "" + +#: plugins/addons/ldapmanager/contentcsv.tpl:11 +msgid "Select CSV file to import" +msgstr "" + +#: plugins/addons/ldapmanager/contentcsv.tpl:23 +msgid "Select template" +msgstr "" + +#: plugins/addons/ldapmanager/contentcsv.tpl:38 +msgid "All entries have been written to the LDAP database successfully." +msgstr "" + +#: plugins/addons/ldapmanager/contentcsv.tpl:40 +msgid "Oups. There was an error during the import of your data." +msgstr "" + +#: plugins/addons/ldapmanager/contentcsv.tpl:43 +msgid "Here is the status report for the import:" +msgstr "" + +#: plugins/addons/ldapmanager/contentcsv.tpl:91 +msgid "Selected Template" +msgstr "" + +#: plugins/addons/ldapmanager/class_import.inc:95 +msgid "Unknown Error" +msgstr "" + +#: plugins/addons/ldapmanager/contentexport.tpl:3 +msgid "" +"The LDIF export plugin provides methods to download a complete snapshot of " +"the running LDAP directory as ldif. You may save these files for backup " +"purpose or when initializing a new server." +msgstr "" + +#: plugins/addons/ldapmanager/contentexport.tpl:13 +msgid "Export single entry" +msgstr "" + +#: plugins/addons/ldapmanager/contentexport.tpl:24 +msgid "Export complete LDIF for" +msgstr "" + +#: plugins/addons/ldapmanager/contentexport.tpl:27 +#: plugins/addons/ldapmanager/contentexport.tpl:42 +msgid "Choose the department you want to Export" +msgstr "" + +#: plugins/addons/ldapmanager/contentexport.tpl:39 +msgid "Export IVBB LDIF for" +msgstr "" + +#: plugins/addons/ldapmanager/contentexport.tpl:59 +msgid "Export successfull" +msgstr "" + +#: plugins/addons/ldapmanager/contentexport.tpl:63 +msgid "Click here to save the complete LDAP database to a file" +msgstr "" + +#: plugins/addons/ldapmanager/contentexport.tpl:63 +msgid "Click here to save the LDAP Export " +msgstr "" + +#: plugins/addons/ldapmanager/class_ldif.inc:7 +#: plugins/addons/ldapmanager/main.inc:23 +msgid "LDAP manager" +msgstr "" + +#: plugins/addons/ldapmanager/class_export.inc:7 +msgid "LDIF CSV import" +msgstr "" + +#: plugins/addons/ldapmanager/class_export.inc:72 +msgid "Error while exporting the requested entries!" +msgstr "" + +#: plugins/admin/groups/class_groupGeneric.inc:109 +msgid "Can't find this groups SID in LDAP or in your configuration file!" +msgstr "" + +#: plugins/admin/groups/class_groupGeneric.inc:141 +msgid "This 'dn' is no group." +msgstr "" + +#: plugins/admin/groups/class_groupGeneric.inc:252 +msgid "Samba group" +msgstr "" + +#: plugins/admin/groups/class_groupGeneric.inc:252 +msgid "Domain admins" +msgstr "" + +#: plugins/admin/groups/class_groupGeneric.inc:252 +msgid "Domain users" +msgstr "" + +#: plugins/admin/groups/class_groupGeneric.inc:253 +msgid "Domain guests" +msgstr "" + +#: plugins/admin/groups/class_groupGeneric.inc:258 +#, php-format +msgid "Special group (%d)" +msgstr "" + +#: plugins/admin/groups/class_groupGeneric.inc:570 +#: plugins/admin/ogroups/class_ogroup.inc:484 +msgid "You have no permissions to create a group on this 'Base'." +msgstr "" + +#: plugins/admin/groups/class_groupGeneric.inc:580 +msgid "" +"The field 'Name' contains invalid characters. Lowercase, numbers and dashes " +"are allowed." +msgstr "" + +#: plugins/admin/groups/class_groupGeneric.inc:588 +msgid "Value specified as 'Name' is already used." +msgstr "" + +#: plugins/admin/groups/mail.tpl:11 +msgid "Primary mail address for this shared folder" +msgstr "" + +#: plugins/admin/groups/mail.tpl:16 +msgid "Select mail server to place user on" +msgstr "" + +#: plugins/admin/groups/mail.tpl:64 +msgid "IMAP shared folders" +msgstr "" + +#: plugins/admin/groups/mail.tpl:68 +msgid "Default permission" +msgstr "" + +#: plugins/admin/groups/mail.tpl:76 +msgid "Member permission" +msgstr "" + +#: plugins/admin/groups/mail.tpl:91 +msgid "Forward messages to non group members" +msgstr "" + +#: plugins/admin/groups/headpage.tpl:6 plugins/admin/ogroups/headpage.tpl:6 +msgid "List of groups" +msgstr "" + +#: plugins/admin/groups/headpage.tpl:29 plugins/admin/ogroups/headpage.tpl:29 +msgid "" +"This menu allows to add, edit or remove selected groups. You may want to use " +"the range selector on top of the group listbox, when working with a large " +"number of groups." +msgstr "" + +#: plugins/admin/groups/headpage.tpl:32 plugins/admin/ogroups/headpage.tpl:32 +msgid "" +"-Edit- and -New group- will execute an assistant to aid you in editing group " +"properties.-Delete- will ask for confirmation before removing groups." +msgstr "" + +#: plugins/admin/groups/headpage.tpl:53 plugins/admin/users/headpage.tpl:57 +msgid "Dive into LDAP subtrees when searching" +msgstr "" + +#: plugins/admin/groups/headpage.tpl:53 plugins/admin/users/headpage.tpl:57 +msgid "Search in subtrees" +msgstr "" + +#: plugins/admin/groups/main.inc:39 plugins/admin/groups/main.inc:43 +msgid "Group administration" +msgstr "" + +#: plugins/admin/groups/class_groupManagement.inc:25 +#: plugins/admin/ogroups/class_ogroupManagement.inc:42 +msgid "Groups" +msgstr "" + +#: plugins/admin/groups/class_groupManagement.inc:202 +#, php-format +msgid "You're about to delete the group '%s'." +msgstr "" + +#: plugins/admin/groups/class_groupManagement.inc:208 +#: plugins/admin/groups/class_groupManagement.inc:234 +msgid "You are not allowed to delete this group!" +msgstr "" + +#: plugins/admin/groups/remove.tpl:7 +msgid "" +"This may be a primary user group. Please double check if you really want to " +"do this since there is no way for GOsa to get your data back." +msgstr "" + +#: plugins/admin/groups/application_options.tpl:1 +msgid "Application options" +msgstr "" + +#: plugins/admin/groups/class_groupMail.inc:153 +msgid "read" +msgstr "" + +#: plugins/admin/groups/class_groupMail.inc:154 +msgid "post" +msgstr "" + +#: plugins/admin/groups/class_groupMail.inc:155 +msgid "external post" +msgstr "" + +#: plugins/admin/groups/class_groupMail.inc:156 +msgid "append" +msgstr "" + +#: plugins/admin/groups/class_groupMail.inc:157 +msgid "write" +msgstr "" + +#: plugins/admin/groups/class_groupMail.inc:179 +msgid "This 'dn' has no valid mail extensions." +msgstr "" + +#: plugins/admin/groups/class_groupMail.inc:244 +msgid "You're trying to add an invalid email address " +msgstr "" + +#: plugins/admin/groups/class_groupMail.inc:245 +msgid "to the list of forwarders." +msgstr "" + +#: plugins/admin/groups/class_groupMail.inc:613 +msgid "Please enter a valid email addres in 'Primary address' field." +msgstr "" + +#: plugins/admin/groups/acl.tpl:4 +msgid "Object" +msgstr "" + +#: plugins/admin/groups/acl.tpl:17 +msgid "Apply this acl only for users own entries" +msgstr "" + +#: plugins/admin/groups/application.tpl:4 +msgid "Used applications" +msgstr "" + +#: plugins/admin/groups/application.tpl:10 +msgid "Edit parameters" +msgstr "" + +#: plugins/admin/groups/application.tpl:10 +msgid "Edit optional application parameters" +msgstr "" + +#: plugins/admin/groups/application.tpl:20 +msgid "Available applications" +msgstr "" + +#: plugins/admin/groups/group_objects.tpl:6 +msgid "Select users to add" +msgstr "" + +#: plugins/admin/groups/group_objects.tpl:29 +#: plugins/admin/users/headpage.tpl:60 +msgid "Display users of department" +msgstr "" + +#: plugins/admin/groups/group_objects.tpl:35 +#: plugins/admin/users/headpage.tpl:66 +msgid "Display users matching" +msgstr "" + +#: plugins/admin/groups/group_objects.tpl:36 +#: plugins/admin/users/headpage.tpl:67 +msgid "Regular expression for matching user names" +msgstr "" + +#: plugins/admin/groups/class_groupAcl.inc:54 +msgid "This 'dn' is no acl container." +msgstr "" + +#: plugins/admin/groups/class_groupAcl.inc:199 +msgid "All fields are writeable" +msgstr "" + +#: plugins/admin/groups/generic.tpl:7 plugins/admin/ogroups/generic.tpl:7 +msgid "Group name" +msgstr "" + +#: plugins/admin/groups/generic.tpl:9 +msgid "Posix name of the group" +msgstr "" + +#: plugins/admin/groups/generic.tpl:14 plugins/admin/ogroups/generic.tpl:14 +msgid "Descriptive text for this group" +msgstr "" + +#: plugins/admin/groups/generic.tpl:23 plugins/admin/ogroups/generic.tpl:23 +msgid "Choose subtree to place group in" +msgstr "" + +#: plugins/admin/groups/generic.tpl:36 +msgid "Normally IDs are autogenerated, select to specify manually" +msgstr "" + +#: plugins/admin/groups/generic.tpl:36 +msgid "Force GID" +msgstr "" + +#: plugins/admin/groups/generic.tpl:38 +msgid "Forced ID number" +msgstr "" + +#: plugins/admin/groups/generic.tpl:45 +msgid "Select to create a samba conform group" +msgstr "" + +#: plugins/admin/groups/generic.tpl:50 +msgid "in domain" +msgstr "" + +#: plugins/admin/groups/generic.tpl:66 +msgid "Members are in a phone pickup group" +msgstr "" + +#: plugins/admin/groups/generic.tpl:81 +msgid "Group members" +msgstr "" + +#: plugins/admin/groups/mail_admins.tpl:4 +msgid "Folder administrators" +msgstr "" + +#: plugins/admin/groups/class_groupApplication.inc:61 +msgid "This 'dn' is no appgroup." +msgstr "" + +#: plugins/admin/groups/class_groupApplication.inc:69 +msgid "Remove applications" +msgstr "" + +#: plugins/admin/groups/class_groupApplication.inc:70 +msgid "" +"This group has application features enabled. You can disable them by " +"clicking below." +msgstr "" + +#: plugins/admin/groups/class_groupApplication.inc:72 +msgid "Create applications" +msgstr "" + +#: plugins/admin/groups/class_groupApplication.inc:73 +msgid "" +"This group has application features disabled. You can enable them by " +"clicking below." +msgstr "" + +#: plugins/admin/groups/class_groupApplication.inc:107 +msgid "The selected application name is not uniq. Please check your LDAP." +msgstr "" + +#: plugins/admin/groups/class_groupApplication.inc:143 +msgid "The selected application has no options." +msgstr "" + +#: plugins/admin/users/password.tpl:2 +msgid "" +"To change the user password use the fields below. The changes take effect " +"immediately. Please memorize the new password, because the user would't be " +"able to login without it." +msgstr "" + +#: plugins/admin/users/template.tpl:2 +msgid "Creating a new user using templates" +msgstr "" + +#: plugins/admin/users/template.tpl:6 +msgid "" +"Creating a new user can be assisted by using templates. Many database " +"records will be filled automatically. Choose none to skip the usage " +"of templates." +msgstr "" + +#: plugins/admin/users/template.tpl:11 +#: plugins/admin/users/class_userManagement.inc:614 +msgid "Template" +msgstr "" + +#: plugins/admin/users/template.tpl:46 +#: ihtml/themes/altlinux/setup_introduction.tpl:10 +#: ihtml/themes/altlinux/setup_step2.tpl:16 +#: ihtml/themes/altlinux/setup_step3.tpl:12 +#: ihtml/themes/default/setup_introduction.tpl:10 +#: ihtml/themes/default/setup_step2.tpl:16 +#: ihtml/themes/default/setup_step3.tpl:12 +msgid "Continue" +msgstr "" + +#: plugins/admin/users/main.inc:40 plugins/admin/users/main.inc:46 +msgid "User administration" +msgstr "" + +#: plugins/admin/users/class_userManagement.inc:25 +msgid "Users" +msgstr "" + +#: plugins/admin/users/class_userManagement.inc:157 +#: plugins/admin/users/class_userManagement.inc:208 +msgid "You are not allowed to set this users password!" +msgstr "" + +#: plugins/admin/users/class_userManagement.inc:244 +#, php-format +msgid "You're about to delete the user %s." +msgstr "" + +#: plugins/admin/users/class_userManagement.inc:250 +#: plugins/admin/users/class_userManagement.inc:278 +msgid "You are not allowed to delete this user!" +msgstr "" + +#: plugins/admin/users/class_userManagement.inc:365 +#: plugins/admin/ogroups/class_ogroup.inc:202 +msgid "none" +msgstr "" + +#: plugins/admin/users/class_userManagement.inc:431 +msgid "A person with the choosen name is already used in this tree." +msgstr "" + +#: plugins/admin/users/remove.tpl:7 +msgid "" +"This includes all account data, system access rules, imap settings, etc. for " +"this user. Please double check if your really want to do this since there is " +"no way for GOsa to get your data back." +msgstr "" + +#: plugins/admin/users/headpage.tpl:6 +msgid "List of users" +msgstr "" + +#: plugins/admin/users/headpage.tpl:16 +msgid "New template" +msgstr "" + +#: plugins/admin/users/headpage.tpl:30 +msgid "" +"This menu provides the functionality to create, edit or delete selected " +"users. Having a great number of users, you may want to use the range " +"seletors on top of the user list." +msgstr "" + +#: plugins/admin/users/headpage.tpl:33 +msgid "" +"-Edit- and -New user- execute an assistant to aid you in managing your " +"account informations. -Delete- will ask for confirmation before deleting the " +"users from the LDAP server." +msgstr "" + +#: plugins/admin/users/headpage.tpl:47 +msgid "Select to see template pseudo users" +msgstr "" + +#: plugins/admin/users/headpage.tpl:47 +msgid "Show templates" +msgstr "" + +#: plugins/admin/users/headpage.tpl:48 +msgid "Select to see users that have only a GOsa object" +msgstr "" + +#: plugins/admin/users/headpage.tpl:48 +msgid "Show functional users" +msgstr "" + +#: plugins/admin/users/headpage.tpl:49 +msgid "Select to see users that have posix settings" +msgstr "" + +#: plugins/admin/users/headpage.tpl:49 +msgid "Show unix users" +msgstr "" + +#: plugins/admin/users/headpage.tpl:50 +msgid "Select to see users that have mail settings" +msgstr "" + +#: plugins/admin/users/headpage.tpl:50 +msgid "Show mail users" +msgstr "" + +#: plugins/admin/users/headpage.tpl:51 +msgid "Select to see users that have samba settings" +msgstr "" + +#: plugins/admin/users/headpage.tpl:51 +msgid "Show samba users" +msgstr "" + +#: plugins/admin/users/headpage.tpl:52 +msgid "Select to see users that have proxy settings" +msgstr "" + +#: plugins/admin/users/headpage.tpl:52 +msgid "Show proxy users" +msgstr "" + +#: plugins/admin/users/headpage.tpl:53 +msgid "Select to see users that have ftp settings" +msgstr "" + +#: plugins/admin/users/headpage.tpl:53 +msgid "Show FTP users" +msgstr "" + +#: plugins/admin/users/headpage.tpl:54 +msgid "Select to see users that have FAX settings" +msgstr "" + +#: plugins/admin/users/headpage.tpl:54 +msgid "Show FAX users" +msgstr "" + +#: plugins/admin/applications/generic.tpl:7 +#: plugins/admin/applications/generic.tpl:8 +msgid "Application name" +msgstr "" + +#: plugins/admin/applications/generic.tpl:12 +#: plugins/admin/systems/server.tpl:48 plugins/admin/systems/terminal.tpl:109 +#: plugins/admin/systems/workstation.tpl:109 +#: plugins/admin/ogroups/termgroup.tpl:13 +msgid "Execute" +msgstr "" + +#: plugins/admin/applications/generic.tpl:14 +msgid "Path and/or binary name of application" +msgstr "" + +#: plugins/admin/applications/generic.tpl:18 +msgid "Display name" +msgstr "" + +#: plugins/admin/applications/generic.tpl:20 +msgid "Application name to be displayed (i.e. below icons)" +msgstr "" + +#: plugins/admin/applications/generic.tpl:35 +msgid "Choose subtree to place application in" +msgstr "" + +#: plugins/admin/applications/generic.tpl:46 +msgid "Icon" +msgstr "" + +#: plugins/admin/applications/generic.tpl:51 +msgid "Update" +msgstr "" + +#: plugins/admin/applications/generic.tpl:51 +msgid "Reload picture from LDAP" +msgstr "" + +#: plugins/admin/applications/generic.tpl:61 +msgid "Only executable for members" +msgstr "" + +#: plugins/admin/applications/generic.tpl:63 +msgid "Replace user configuration on startup" +msgstr "" + +#: plugins/admin/applications/generic.tpl:67 +msgid "Place icon on members desktop" +msgstr "" + +#: plugins/admin/applications/generic.tpl:70 +msgid "Place entry in members startmenu" +msgstr "" + +#: plugins/admin/applications/class_applicationParameters.inc:47 +msgid "Remove options" +msgstr "" + +#: plugins/admin/applications/class_applicationParameters.inc:48 +msgid "This application has options. You can disable them by clicking below." +msgstr "" + +#: plugins/admin/applications/class_applicationParameters.inc:50 +msgid "Create options" +msgstr "" + +#: plugins/admin/applications/class_applicationParameters.inc:51 +msgid "" +"This application has options disabled. You can enable them by clicking below." +msgstr "" + +#: plugins/admin/applications/class_applicationParameters.inc:87 +msgid "Variable" +msgstr "" + +#: plugins/admin/applications/class_applicationParameters.inc:87 +msgid "Default value" +msgstr "" + +#: plugins/admin/applications/class_applicationParameters.inc:98 +msgid "Add option" +msgstr "" + +#: plugins/admin/applications/class_applicationParameters.inc:149 +#, php-format +msgid "Value '%s' specified as option name is not valid." +msgstr "" + +#: plugins/admin/applications/remove.tpl:7 +msgid "" +"This may be used by several groups. Please double check if your really want " +"to do this since there is no way for GOsa to get your data back." +msgstr "" + +#: plugins/admin/applications/headpage.tpl:6 +msgid "List of applications" +msgstr "" + +#: plugins/admin/applications/headpage.tpl:28 +msgid "" +"This menu allows to add, edit or remove selected applications. You may want " +"to use the range selector on top of the application listbox, when working " +"with a large number of applications." +msgstr "" + +#: plugins/admin/applications/headpage.tpl:31 +msgid "" +"-Edit- and -New application- will execute an assistant to aid you in editing " +"properties. -Delete- will ask for confirmation before removing applications." +msgstr "" + +#: plugins/admin/applications/headpage.tpl:45 +msgid "Display applications of department" +msgstr "" + +#: plugins/admin/applications/headpage.tpl:51 +msgid "Display applications matching" +msgstr "" + +#: plugins/admin/applications/headpage.tpl:52 +msgid "Regular expression for matching application names" +msgstr "" + +#: plugins/admin/applications/main.inc:38 +#: plugins/admin/applications/main.inc:40 +msgid "Application management" +msgstr "" + +#: plugins/admin/applications/class_applicationManagement.inc:185 +#, php-format +msgid "You're about to delete the application '%s'." +msgstr "" + +#: plugins/admin/applications/class_applicationManagement.inc:191 +#: plugins/admin/applications/class_applicationManagement.inc:217 +msgid "You are not allowed to delete this application!" +msgstr "" + +#: plugins/admin/applications/class_applicationGeneric.inc:57 +msgid "This 'dn' is no application." +msgstr "" + +#: plugins/admin/applications/class_applicationGeneric.inc:148 +msgid "The specified picture has not been uploaded correctly." +msgstr "" + +#: plugins/admin/applications/class_applicationGeneric.inc:180 +msgid "You have no permissions to create a application on this 'Base'." +msgstr "" + +#: plugins/admin/applications/class_applicationGeneric.inc:185 +msgid "Required field 'Name' is not filled." +msgstr "" + +#: plugins/admin/applications/class_applicationGeneric.inc:188 +msgid "Required field 'Execute' is not filled." +msgstr "" + +#: plugins/admin/applications/class_applicationGeneric.inc:197 +msgid "There's already an application with this 'Name'." +msgstr "" + +#: plugins/admin/departments/generic.tpl:4 +#: plugins/admin/systems/terminal.tpl:1 +#: plugins/admin/systems/workstation.tpl:1 +msgid "Properties" +msgstr "" + +#: plugins/admin/departments/generic.tpl:8 +msgid "Name of department" +msgstr "" + +#: plugins/admin/departments/generic.tpl:9 +msgid "Name of subtree to create" +msgstr "" + +#: plugins/admin/departments/generic.tpl:14 +msgid "Descriptive text for department" +msgstr "" + +#: plugins/admin/departments/generic.tpl:18 +msgid "Category" +msgstr "" + +#: plugins/admin/departments/generic.tpl:20 +msgid "Category for this subtree" +msgstr "" + +#: plugins/admin/departments/generic.tpl:30 +msgid "Choose subtree to place department in" +msgstr "" + +#: plugins/admin/departments/generic.tpl:47 +msgid "State where this subtree is located" +msgstr "" + +#: plugins/admin/departments/generic.tpl:51 +msgid "Location of this subtree" +msgstr "" + +#: plugins/admin/departments/generic.tpl:55 +msgid "Postal address of this subtree" +msgstr "" + +#: plugins/admin/departments/generic.tpl:59 +msgid "Base telephone number of this subtree" +msgstr "" + +#: plugins/admin/departments/generic.tpl:63 +msgid "Base facsimile telephone number of this subtree" +msgstr "" + +#: plugins/admin/departments/remove.tpl:7 +msgid "" +"This includes all accounts, systems, etc. in this subtree. Please " +"double check if your really want to do this since there is no way for GOsa " +"to get your data back." +msgstr "" + +#: plugins/admin/departments/remove.tpl:11 plugins/admin/systems/remove.tpl:11 +msgid "" +"Best thing to do before performing this action would be to save the current " +"contents of your LDAP tree in a file. So - if you've done so - press " +"Delete to continue or Cancel to abort." +msgstr "" + +#: plugins/admin/departments/headpage.tpl:6 +msgid "List of departments" +msgstr "" + +#: plugins/admin/departments/headpage.tpl:28 +msgid "" +"This menu allows to create, delete and edit selected departments. Having a " +"large size of departments, you might prefer the range selectors on top of " +"the department list." +msgstr "" + +#: plugins/admin/departments/headpage.tpl:31 +msgid "" +"-Edit- and -New department- will provide an assistant to aid you when " +"performing changes on your departments. -Delete- will ask you for " +"confirmation before really deleting anything." +msgstr "" + +#: plugins/admin/departments/headpage.tpl:45 +msgid "Display subdepartments of" +msgstr "" + +#: plugins/admin/departments/headpage.tpl:51 +msgid "Display departments matching" +msgstr "" + +#: plugins/admin/departments/headpage.tpl:52 +msgid "Regular expression for matching department names" +msgstr "" + +#: plugins/admin/departments/main.inc:38 plugins/admin/departments/main.inc:40 +msgid "Department management" +msgstr "" + +#: plugins/admin/departments/class_departmentManagement.inc:25 +#: plugins/admin/ogroups/class_ogroupManagement.inc:43 +msgid "Departments" +msgstr "" + +#: plugins/admin/departments/class_departmentManagement.inc:130 +#, php-format +msgid "You're about to delete the whole LDAP subtree placed under '%s'." +msgstr "" + +#: plugins/admin/departments/class_departmentManagement.inc:145 +msgid "You have no permission to remove this department." +msgstr "" + +#: plugins/admin/departments/class_departmentGeneric.inc:127 +msgid "You have no permissions to create a department on this 'Base'." +msgstr "" + +#: plugins/admin/departments/class_departmentGeneric.inc:134 +#: plugins/admin/departments/class_departmentGeneric.inc:136 +msgid "Department with that 'Name' already exists." +msgstr "" + +#: plugins/admin/departments/class_departmentGeneric.inc:144 +msgid "Required field 'Description' is not set." +msgstr "" + +#: plugins/admin/departments/class_departmentGeneric.inc:149 +msgid "The field 'Name' contains the reserved word 'incoming'." +msgstr "" + +#: plugins/admin/departments/class_departmentGeneric.inc:150 +msgid " Please choose another name." +msgstr "" + +#: plugins/admin/systems/class_terminalService.inc:82 +msgid "default" +msgstr "" + +#: plugins/admin/systems/class_terminalService.inc:83 +msgid "show chooser" +msgstr "" + +#: plugins/admin/systems/class_terminalService.inc:84 +msgid "direct" +msgstr "" + +#: plugins/admin/systems/class_terminalService.inc:87 +msgid "load balanced" +msgstr "" + +#: plugins/admin/systems/class_terminalService.inc:90 +msgid "Windows RDP" +msgstr "" + +#: plugins/admin/systems/class_terminalService.inc:91 +msgid "ICA client" +msgstr "" + +#: plugins/admin/systems/class_terminalService.inc:135 +#: plugins/admin/systems/class_terminalInfo.inc:61 +#: plugins/admin/systems/class_terminalStartup.inc:75 +#: plugins/admin/systems/class_terminalGeneric.inc:126 +msgid "This 'dn' has no terminal features." +msgstr "" + +#: plugins/admin/systems/class_terminalService.inc:182 +msgid "Choose the phone located at the current terminal" +msgstr "" + +#: plugins/admin/systems/class_terminalService.inc:244 +#: plugins/admin/systems/class_terminalService.inc:249 +msgid "Please specify a valid VSync range." +msgstr "" + +#: plugins/admin/systems/class_terminalService.inc:259 +#: plugins/admin/systems/class_terminalService.inc:264 +msgid "Please specify a valid HSync range." +msgstr "" + +#: plugins/admin/systems/class_terminalInfo.inc:68 +msgid "This is a virtual terminal which has no properties to show here." +msgstr "" + +#: plugins/admin/systems/class_terminalInfo.inc:80 +msgid "online" +msgstr "" + +#: plugins/admin/systems/class_terminalInfo.inc:130 +msgid "running" +msgstr "" + +#: plugins/admin/systems/class_terminalInfo.inc:133 +msgid "not running" +msgstr "" + +#: plugins/admin/systems/class_terminalInfo.inc:141 +msgid "unknown status" +msgstr "" + +#: plugins/admin/systems/class_terminalInfo.inc:159 +msgid "offline" +msgstr "" + +#: plugins/admin/systems/network.tpl:1 +msgid "Network settings" +msgstr "" + +#: plugins/admin/systems/network.tpl:8 +msgid "IP-address" +msgstr "" + +#: plugins/admin/systems/network.tpl:16 +msgid "MAC-address" +msgstr "" + +#: plugins/admin/systems/server.tpl:6 +msgid "Server name" +msgstr "" + +#: plugins/admin/systems/server.tpl:15 plugins/admin/systems/phone.tpl:15 +#: plugins/admin/systems/terminal.tpl:20 plugins/admin/systems/printer.tpl:23 +#: plugins/admin/systems/workstation.tpl:20 +#: plugins/admin/systems/component.tpl:15 +#: plugins/admin/systems/wingeneric.tpl:15 +msgid "Choose subtree to place terminal in" +msgstr "" + +#: plugins/admin/systems/server.tpl:38 plugins/admin/systems/terminal.tpl:99 +#: plugins/admin/systems/workstation.tpl:99 +#: plugins/admin/ogroups/termgroup.tpl:3 +msgid "Action" +msgstr "" + +#: plugins/admin/systems/server.tpl:42 +msgid "Select action to execute for this server" +msgstr "" + +#: plugins/admin/systems/info.tpl:1 +msgid "System information" +msgstr "" + +#: plugins/admin/systems/info.tpl:7 +msgid "CPU" +msgstr "" + +#: plugins/admin/systems/info.tpl:10 +msgid "Memory" +msgstr "" + +#: plugins/admin/systems/info.tpl:13 +msgid "Boot MAC" +msgstr "" + +#: plugins/admin/systems/info.tpl:16 +msgid "USB support" +msgstr "" + +#: plugins/admin/systems/info.tpl:19 plugins/admin/systems/info.tpl:87 +msgid "System status" +msgstr "" + +#: plugins/admin/systems/info.tpl:23 +msgid "Inventary number" +msgstr "" + +#: plugins/admin/systems/info.tpl:27 +msgid "Last login" +msgstr "" + +#: plugins/admin/systems/info.tpl:38 +msgid "Network devices" +msgstr "" + +#: plugins/admin/systems/info.tpl:47 +msgid "IDE devices" +msgstr "" + +#: plugins/admin/systems/info.tpl:56 +msgid "SCSI devices" +msgstr "" + +#: plugins/admin/systems/info.tpl:64 +msgid "Floppy device" +msgstr "" + +#: plugins/admin/systems/info.tpl:68 +msgid "CDROM device" +msgstr "" + +#: plugins/admin/systems/info.tpl:73 plugins/admin/systems/service.tpl:83 +msgid "Graphic device" +msgstr "" + +#: plugins/admin/systems/info.tpl:77 +msgid "Audio device" +msgstr "" + +#: plugins/admin/systems/info.tpl:93 +msgid "Up since" +msgstr "" + +#: plugins/admin/systems/info.tpl:96 +msgid "CPU load" +msgstr "" + +#: plugins/admin/systems/info.tpl:99 +msgid "Memory usage" +msgstr "" + +#: plugins/admin/systems/info.tpl:102 +msgid "Swap usage" +msgstr "" + +#: plugins/admin/systems/info.tpl:116 +msgid "SSH service" +msgstr "" + +#: plugins/admin/systems/info.tpl:119 +msgid "Print service" +msgstr "" + +#: plugins/admin/systems/info.tpl:122 +msgid "Scan service" +msgstr "" + +#: plugins/admin/systems/info.tpl:125 +msgid "Sound service" +msgstr "" + +#: plugins/admin/systems/info.tpl:128 +msgid "GUI" +msgstr "" + +#: plugins/admin/systems/main.inc:45 plugins/admin/systems/main.inc:47 +msgid "System management" +msgstr "" + +#: plugins/admin/systems/class_terminalGeneric.inc:62 +#: plugins/admin/systems/class_workstationGeneric.inc:71 +msgid "text" +msgstr "" + +#: plugins/admin/systems/class_terminalGeneric.inc:63 +#: plugins/admin/systems/class_workstationGeneric.inc:72 +msgid "graphic" +msgstr "" + +#: plugins/admin/systems/class_terminalGeneric.inc:88 +#: plugins/admin/systems/class_servGeneric.inc:58 +#: plugins/admin/systems/class_workstationGeneric.inc:98 +#: plugins/admin/ogroups/class_termgroup.inc:51 +msgid "No WAKECMD definition found in your gosa.conf" +msgstr "" + +#: plugins/admin/systems/class_terminalGeneric.inc:92 +#: plugins/admin/systems/class_terminalGeneric.inc:104 +#: plugins/admin/systems/class_terminalGeneric.inc:116 +#: plugins/admin/systems/class_servGeneric.inc:62 +#: plugins/admin/systems/class_servGeneric.inc:74 +#: plugins/admin/systems/class_servGeneric.inc:86 +#: plugins/admin/systems/class_workstationGeneric.inc:102 +#: plugins/admin/systems/class_workstationGeneric.inc:114 +#: plugins/admin/systems/class_workstationGeneric.inc:126 +#: plugins/admin/ogroups/class_termgroup.inc:55 +#: plugins/admin/ogroups/class_termgroup.inc:67 +#: plugins/admin/ogroups/class_termgroup.inc:79 +#, php-format +msgid "Execution of '%s' failed!" +msgstr "" + +#: plugins/admin/systems/class_terminalGeneric.inc:100 +#: plugins/admin/systems/class_servGeneric.inc:70 +#: plugins/admin/systems/class_workstationGeneric.inc:110 +#: plugins/admin/ogroups/class_termgroup.inc:63 +msgid "No REBOOTCMD definition found in your gosa.conf" +msgstr "" + +#: plugins/admin/systems/class_terminalGeneric.inc:112 +#: plugins/admin/systems/class_servGeneric.inc:82 +#: plugins/admin/systems/class_workstationGeneric.inc:122 +#: plugins/admin/ogroups/class_termgroup.inc:75 +msgid "No HALTCMD definition found in your gosa.conf" +msgstr "" + +#: plugins/admin/systems/class_terminalGeneric.inc:142 +#: plugins/admin/systems/class_servGeneric.inc:110 +#: plugins/admin/systems/class_workstationGeneric.inc:151 +#: plugins/admin/ogroups/class_termgroup.inc:91 +msgid "Switch off" +msgstr "" + +#: plugins/admin/systems/class_terminalGeneric.inc:142 +#: plugins/admin/systems/class_servGeneric.inc:110 +#: plugins/admin/systems/class_workstationGeneric.inc:151 +#: plugins/admin/ogroups/class_termgroup.inc:91 +msgid "Reboot" +msgstr "" + +#: plugins/admin/systems/class_terminalGeneric.inc:144 +#: plugins/admin/systems/class_servGeneric.inc:112 +#: plugins/admin/systems/class_workstationGeneric.inc:153 +#: plugins/admin/ogroups/class_termgroup.inc:91 +msgid "Wake up" +msgstr "" + +#: plugins/admin/systems/class_terminalGeneric.inc:213 +msgid "You have no permissions to create a terminal on this 'Base'." +msgstr "" + +#: plugins/admin/systems/class_terminalGeneric.inc:217 +msgid "The required field 'Terminal name' is not set." +msgstr "" + +#: plugins/admin/systems/class_terminalGeneric.inc:230 +#: plugins/admin/systems/class_servGeneric.inc:178 +#: plugins/admin/systems/class_workstationGeneric.inc:237 +#: plugins/admin/systems/class_printGeneric.inc:131 +#: plugins/admin/systems/class_phoneGeneric.inc:128 +#: plugins/admin/systems/class_componentGeneric.inc:125 +#: plugins/admin/systems/class_wingeneric.inc:165 +#, php-format +msgid "There is already an entry '%s' in the base choosen by you" +msgstr "" + +#: plugins/admin/systems/phone.tpl:6 +msgid "Phone name" +msgstr "" + +#: plugins/admin/systems/class_servGeneric.inc:48 +msgid "This 'dn' has no server features." +msgstr "" + +#: plugins/admin/systems/class_servGeneric.inc:168 +msgid "You have no permissions to create a server on this 'Base'." +msgstr "" + +#: plugins/admin/systems/terminal.tpl:9 +msgid "Terminal template" +msgstr "" + +#: plugins/admin/systems/terminal.tpl:11 +msgid "Terminal name" +msgstr "" + +#: plugins/admin/systems/terminal.tpl:36 +#: plugins/admin/systems/workstation.tpl:36 +msgid "Mode" +msgstr "" + +#: plugins/admin/systems/terminal.tpl:38 +#: plugins/admin/systems/workstation.tpl:38 +msgid "Select terminal mode" +msgstr "" + +#: plugins/admin/systems/terminal.tpl:52 +#: plugins/admin/systems/workstation.tpl:52 +msgid "Root server" +msgstr "" + +#: plugins/admin/systems/terminal.tpl:54 +#: plugins/admin/systems/workstation.tpl:54 +msgid "Select NFS root filesystem to use" +msgstr "" + +#: plugins/admin/systems/terminal.tpl:60 +#: plugins/admin/systems/workstation.tpl:60 +msgid "Swap server" +msgstr "" + +#: plugins/admin/systems/terminal.tpl:62 +#: plugins/admin/systems/workstation.tpl:62 +msgid "Choose NFS filesystem to place swap files on" +msgstr "" + +#: plugins/admin/systems/terminal.tpl:74 +#: plugins/admin/systems/workstation.tpl:74 +msgid "Syslog server" +msgstr "" + +#: plugins/admin/systems/terminal.tpl:76 +#: plugins/admin/systems/workstation.tpl:76 +msgid "Choose server to use for logging" +msgstr "" + +#: plugins/admin/systems/terminal.tpl:82 +#: plugins/admin/systems/workstation.tpl:82 +msgid "NTP server" +msgstr "" + +#: plugins/admin/systems/terminal.tpl:84 +#: plugins/admin/systems/workstation.tpl:84 +msgid "Choose server to use for synchronizing time" +msgstr "" + +#: plugins/admin/systems/terminal.tpl:103 +#: plugins/admin/systems/workstation.tpl:103 +msgid "Select action to execute for this terminal" +msgstr "" + +#: plugins/admin/systems/class_servDHCP.inc:32 +msgid "Remove DHCP service" +msgstr "" + +#: plugins/admin/systems/class_servDHCP.inc:33 +msgid "" +"This server has DHCP features enabled. You can disable them by clicking " +"below." +msgstr "" + +#: plugins/admin/systems/class_servDHCP.inc:35 +msgid "Add DHCP service" +msgstr "" + +#: plugins/admin/systems/class_servDHCP.inc:36 +msgid "" +"This server has DHCP features disabled. You can enable them by clicking " +"below." +msgstr "" + +#: plugins/admin/systems/class_systemManagement.inc:32 +msgid "Systems" +msgstr "" + +#: plugins/admin/systems/class_systemManagement.inc:246 +msgid "You can't edit this object type yet!" +msgstr "" + +#: plugins/admin/systems/class_systemManagement.inc:262 +msgid "Passwords entered as new and repeated do not match!" +msgstr "" + +#: plugins/admin/systems/class_systemManagement.inc:275 +msgid "You are not allowed to set this systems password!" +msgstr "" + +#: plugins/admin/systems/class_systemManagement.inc:319 +#, php-format +msgid "You're about to delete all information about the component at '%s'." +msgstr "" + +#: plugins/admin/systems/class_systemManagement.inc:325 +#: plugins/admin/systems/class_systemManagement.inc:378 +msgid "You are not allowed to delete this component!" +msgstr "" + +#: plugins/admin/systems/class_systemManagement.inc:642 +msgid "New terminal" +msgstr "" + +#: plugins/admin/systems/class_systemManagement.inc:645 +msgid "New workstation" +msgstr "" + +#: plugins/admin/systems/class_systemManagement.inc:661 +msgid "Thin client template for" +msgstr "" + +#: plugins/admin/systems/class_systemManagement.inc:673 +msgid "Workstation template for" +msgstr "" + +#: plugins/admin/systems/class_workstationGeneric.inc:136 +msgid "This 'dn' has no workstation features." +msgstr "" + +#: plugins/admin/systems/class_workstationGeneric.inc:220 +msgid "You have no permissions to create a workstation on this 'Base'." +msgstr "" + +#: plugins/admin/systems/class_workstationGeneric.inc:224 +msgid "The required field 'Workstation name' is not set." +msgstr "" + +#: plugins/admin/systems/printer.tpl:6 +msgid "Printer name" +msgstr "" + +#: plugins/admin/systems/printer.tpl:32 +msgid "Printer URL" +msgstr "" + +#: plugins/admin/systems/printer.tpl:36 +msgid "Path to PPD" +msgstr "" + +#: plugins/admin/systems/class_servDNS.inc:32 +msgid "Remove DNS service" +msgstr "" + +#: plugins/admin/systems/class_servDNS.inc:33 +msgid "" +"This server has DNS features enabled. You can disable them by clicking below." +msgstr "" + +#: plugins/admin/systems/class_servDNS.inc:35 +msgid "Add DNS service" +msgstr "" + +#: plugins/admin/systems/class_servDNS.inc:36 +msgid "" +"This server has DNS features disabled. You can enable them by clicking below." +msgstr "" + +#: plugins/admin/systems/class_servDB.inc:117 +#: plugins/admin/systems/class_servDB.inc:133 +#: plugins/admin/systems/class_servDB.inc:139 +#: plugins/admin/systems/class_servDB.inc:144 +#: plugins/admin/systems/class_servDB.inc:150 +#, php-format +msgid "The attribute '%s' is empty or contains invalid characters." +msgstr "" + +#: plugins/admin/systems/class_servDB.inc:123 +#, php-format +msgid "The imap connect string needs to be in the form '%s'." +msgstr "" + +#: plugins/admin/systems/class_servDB.inc:127 +msgid "The sieve port needs to be numeric." +msgstr "" + +#: plugins/admin/systems/workstation.tpl:9 +msgid "Workstation template" +msgstr "" + +#: plugins/admin/systems/workstation.tpl:11 +msgid "Workstation name" +msgstr "" + +#: plugins/admin/systems/servdb.tpl:1 +msgid "" +"This dialog keeps settings that are used and required by several components " +"within GOsa and are used to find out more about your servers. These settings " +"will be reloaded when you save this component." +msgstr "" + +#: plugins/admin/systems/servdb.tpl:10 +msgid "Kerberos kadmin access" +msgstr "" + +#: plugins/admin/systems/servdb.tpl:14 +msgid "Kerberos Realm" +msgstr "" + +#: plugins/admin/systems/servdb.tpl:18 plugins/admin/systems/servdb.tpl:86 +msgid "Admin user" +msgstr "" + +#: plugins/admin/systems/servdb.tpl:30 +msgid "FAX database" +msgstr "" + +#: plugins/admin/systems/servdb.tpl:34 +msgid "FAX DB user" +msgstr "" + +#: plugins/admin/systems/servdb.tpl:46 +msgid "Asterisk management" +msgstr "" + +#: plugins/admin/systems/servdb.tpl:50 +msgid "Asterisk DB user" +msgstr "" + +#: plugins/admin/systems/servdb.tpl:58 +msgid "Country dial prefix" +msgstr "" + +#: plugins/admin/systems/servdb.tpl:62 +msgid "Local dial prefix" +msgstr "" + +#: plugins/admin/systems/servdb.tpl:74 +msgid "IMAP admin access" +msgstr "" + +#: plugins/admin/systems/servdb.tpl:78 +msgid "Server identifier" +msgstr "" + +#: plugins/admin/systems/servdb.tpl:82 +msgid "Connect URL" +msgstr "" + +#: plugins/admin/systems/servdb.tpl:95 +msgid "Sieve port" +msgstr "" + +#: plugins/admin/systems/servdb.tpl:104 +msgid "Logging database" +msgstr "" + +#: plugins/admin/systems/servdb.tpl:108 +msgid "Logging DB user" +msgstr "" + +#: plugins/admin/systems/class_printGeneric.inc:56 +msgid "This 'dn' has no printer features." +msgstr "" + +#: plugins/admin/systems/class_printGeneric.inc:121 +msgid "You have no permissions to create a printer on this 'Base'." +msgstr "" + +#: plugins/admin/systems/remove.tpl:7 +msgid "" +"This includes all system and setup informations. Please double check " +"if your really want to do this since there is no way for GOsa to get your " +"data back." +msgstr "" + +#: plugins/admin/systems/headpage.tpl:6 +msgid "List of systems" +msgstr "" + +#: plugins/admin/systems/headpage.tpl:29 +msgid "" +"Using this menu you can add, remove and change the properties of specific " +"systems. You can only add systems which have already been started once." +msgstr "" + +#: plugins/admin/systems/headpage.tpl:32 +msgid "" +"-Edit- will execute an assistant to aid you in changing the system " +"properties. -Delete- will ask before really deleting things from your LDAP." +msgstr "" + +#: plugins/admin/systems/headpage.tpl:46 +#: plugins/admin/ogroups/ogroup_objects.tpl:33 +msgid "Select to see servers" +msgstr "" + +#: plugins/admin/systems/headpage.tpl:46 +#: plugins/admin/ogroups/ogroup_objects.tpl:33 +msgid "Show servers" +msgstr "" + +#: plugins/admin/systems/headpage.tpl:47 +msgid "Select to see Linux terminals" +msgstr "" + +#: plugins/admin/systems/headpage.tpl:47 +#: plugins/admin/ogroups/ogroup_objects.tpl:35 +msgid "Show terminals" +msgstr "" + +#: plugins/admin/systems/headpage.tpl:48 +msgid "Select to see Linux workstations" +msgstr "" + +#: plugins/admin/systems/headpage.tpl:48 +#: plugins/admin/ogroups/ogroup_objects.tpl:34 +msgid "Show workstations" +msgstr "" + +#: plugins/admin/systems/headpage.tpl:49 +msgid "Select to see MicroSoft Windows based workstations" +msgstr "" + +#: plugins/admin/systems/headpage.tpl:49 +msgid "Show windows based workstations" +msgstr "" + +#: plugins/admin/systems/headpage.tpl:50 +msgid "Select to see network printers" +msgstr "" + +#: plugins/admin/systems/headpage.tpl:50 +msgid "Show network printers" +msgstr "" + +#: plugins/admin/systems/headpage.tpl:51 +msgid "Select to see VOIP phones" +msgstr "" + +#: plugins/admin/systems/headpage.tpl:51 +#: plugins/admin/ogroups/ogroup_objects.tpl:37 +msgid "Show phones" +msgstr "" + +#: plugins/admin/systems/headpage.tpl:52 +msgid "Select to see network devices" +msgstr "" + +#: plugins/admin/systems/headpage.tpl:52 +msgid "Show network devices" +msgstr "" + +#: plugins/admin/systems/headpage.tpl:62 +msgid "Regular expression for matching system names" +msgstr "" + +#: plugins/admin/systems/headpage.tpl:65 +msgid "Display terminal(s) of user" +msgstr "" + +#: plugins/admin/systems/headpage.tpl:66 +msgid "User name of which terminal(s) are shown" +msgstr "" + +#: plugins/admin/systems/service.tpl:4 +msgid "Keyboard" +msgstr "" + +#: plugins/admin/systems/service.tpl:7 plugins/admin/systems/service.tpl:210 +msgid "Model" +msgstr "" + +#: plugins/admin/systems/service.tpl:9 +msgid "Choose keyboard model" +msgstr "" + +#: plugins/admin/systems/service.tpl:15 +msgid "Layout" +msgstr "" + +#: plugins/admin/systems/service.tpl:17 +msgid "Choose keyboard layout" +msgstr "" + +#: plugins/admin/systems/service.tpl:23 +msgid "Variant" +msgstr "" + +#: plugins/admin/systems/service.tpl:25 +msgid "Choose keyboard variant" +msgstr "" + +#: plugins/admin/systems/service.tpl:39 +msgid "Mouse" +msgstr "" + +#: plugins/admin/systems/service.tpl:44 +msgid "Choose mouse type" +msgstr "" + +#: plugins/admin/systems/service.tpl:50 +msgid "Port" +msgstr "" + +#: plugins/admin/systems/service.tpl:52 +msgid "Choose mouse port" +msgstr "" + +#: plugins/admin/systems/service.tpl:66 +#: plugins/gofon/phoneaccount/generic.tpl:5 +msgid "Telephone hardware" +msgstr "" + +#: plugins/admin/systems/service.tpl:69 +#: plugins/gofon/phoneaccount/generic.tpl:9 +msgid "Telephone" +msgstr "" + +#: plugins/admin/systems/service.tpl:86 +msgid "Driver" +msgstr "" + +#: plugins/admin/systems/service.tpl:88 +msgid "Choose graphic driver that is needed by the installed graphic board" +msgstr "" + +#: plugins/admin/systems/service.tpl:94 +msgid "Resolution" +msgstr "" + +#: plugins/admin/systems/service.tpl:96 +msgid "Choose screen resolution used in graphic mode" +msgstr "" + +#: plugins/admin/systems/service.tpl:102 +msgid "Color depth" +msgstr "" + +#: plugins/admin/systems/service.tpl:104 +msgid "Choose colordepth used in graphic mode" +msgstr "" + +#: plugins/admin/systems/service.tpl:117 +msgid "Display device" +msgstr "" + +#: plugins/admin/systems/service.tpl:124 +msgid "HSync" +msgstr "" + +#: plugins/admin/systems/service.tpl:126 +msgid "Horizontal refresh frequency for installed monitor" +msgstr "" + +#: plugins/admin/systems/service.tpl:129 +msgid "VSync" +msgstr "" + +#: plugins/admin/systems/service.tpl:131 +msgid "Vertical refresh frequency for installed monitor" +msgstr "" + +#: plugins/admin/systems/service.tpl:141 +msgid "Remote desktop" +msgstr "" + +#: plugins/admin/systems/service.tpl:145 +msgid "Connect method" +msgstr "" + +#: plugins/admin/systems/service.tpl:147 +msgid "Choose method to connect to terminal server" +msgstr "" + +#: plugins/admin/systems/service.tpl:154 +msgid "Terminal server" +msgstr "" + +#: plugins/admin/systems/service.tpl:156 +msgid "Select specific terminal server to use" +msgstr "" + +#: plugins/admin/systems/service.tpl:163 +msgid "Font server" +msgstr "" + +#: plugins/admin/systems/service.tpl:165 +msgid "Select specific font server to use" +msgstr "" + +#: plugins/admin/systems/service.tpl:181 +msgid "Print device" +msgstr "" + +#: plugins/admin/systems/service.tpl:182 +msgid "Select to start IPP based printing service on terminal" +msgstr "" + +#: plugins/admin/systems/service.tpl:183 +msgid "Provide print services" +msgstr "" + +#: plugins/admin/systems/service.tpl:189 +msgid "Spool server" +msgstr "" + +#: plugins/admin/systems/service.tpl:191 +msgid "Select NFS filesystem to place spool files on" +msgstr "" + +#: plugins/admin/systems/service.tpl:203 +msgid "Scan device" +msgstr "" + +#: plugins/admin/systems/service.tpl:204 +msgid "Select to start SANE scan service on terminal" +msgstr "" + +#: plugins/admin/systems/service.tpl:205 +msgid "Provide scan services" +msgstr "" + +#: plugins/admin/systems/service.tpl:212 +msgid "Select scanner driver to use" +msgstr "" + +#: plugins/admin/systems/startup.tpl:1 +msgid "Boot parameters" +msgstr "" + +#: plugins/admin/systems/startup.tpl:8 +msgid "LDAP server" +msgstr "" + +#: plugins/admin/systems/startup.tpl:10 +msgid "Choose LDAP server to use for accounts and terminal management" +msgstr "" + +#: plugins/admin/systems/startup.tpl:16 +msgid "Boot kernel" +msgstr "" + +#: plugins/admin/systems/startup.tpl:18 +msgid "Enter the filename of the kernel to use" +msgstr "" + +#: plugins/admin/systems/startup.tpl:21 +msgid "Custom options" +msgstr "" + +#: plugins/admin/systems/startup.tpl:23 +msgid "" +"Enter any parameters that should be passed to the kernel as append line " +"during bootup" +msgstr "" + +#: plugins/admin/systems/startup.tpl:34 +msgid "Select if terminal supports graphical startup with progress bar" +msgstr "" + +#: plugins/admin/systems/startup.tpl:35 +msgid "use graphical bootup" +msgstr "" + +#: plugins/admin/systems/startup.tpl:37 +msgid "Select if terminal should boot in text mode" +msgstr "" + +#: plugins/admin/systems/startup.tpl:38 +msgid "use standard linux textual bootup" +msgstr "" + +#: plugins/admin/systems/startup.tpl:40 +msgid "Select to get more verbose output during startup" +msgstr "" + +#: plugins/admin/systems/startup.tpl:41 +msgid "use debug mode for startup" +msgstr "" + +#: plugins/admin/systems/startup.tpl:52 +msgid "Kernel modules (format: name parameters)" +msgstr "" + +#: plugins/admin/systems/startup.tpl:54 +msgid "Add additional modules to load on startup" +msgstr "" + +#: plugins/admin/systems/startup.tpl:65 +msgid "Automount devices (format: complete autofs entry)" +msgstr "" + +#: plugins/admin/systems/startup.tpl:67 +msgid "Add additional automount entries" +msgstr "" + +#: plugins/admin/systems/startup.tpl:84 +msgid "Additional fstab entries" +msgstr "" + +#: plugins/admin/systems/startup.tpl:86 +msgid "Add additional filesystems to be mounted during startup" +msgstr "" + +#: plugins/admin/systems/password.tpl:2 +msgid "" +"To change the terminal root password use the fields below. The changes take " +"effect during next reboot. Please memorize the new password, because the you " +"would't be able to log in. Leave fields blank for password inheritance " +"from default entries." +msgstr "" + +#: plugins/admin/systems/password.tpl:6 +msgid "Changing the password impinges on authentification only." +msgstr "" + +#: plugins/admin/systems/chooser.tpl:1 +msgid "Choose the kind of system component you want to create" +msgstr "" + +#: plugins/admin/systems/chooser.tpl:4 +msgid "" +"Linux terminals and workstations are autocreated on bootup. For this reason " +"you're only be able to create templates for a specific tree. Servers are " +"normally automatically added too, but in some special cases you may need to " +"create a faked server entry to provide GOsa with some informations. Other " +"network components may be used for Nagios setups to create component " +"dependencies." +msgstr "" + +#: plugins/admin/systems/chooser.tpl:7 +msgid "Linux thin client template" +msgstr "" + +#: plugins/admin/systems/chooser.tpl:8 +msgid "Linux workstation template" +msgstr "" + +#: plugins/admin/systems/chooser.tpl:9 +msgid "Linux Server" +msgstr "" + +#: plugins/admin/systems/chooser.tpl:10 +msgid "Windows workstation" +msgstr "" + +#: plugins/admin/systems/chooser.tpl:11 +msgid "Network printer" +msgstr "" + +#: plugins/admin/systems/chooser.tpl:13 +msgid "Other network component" +msgstr "" + +#: plugins/admin/systems/chooser.tpl:16 +msgid "Create" +msgstr "" + +#: plugins/admin/systems/class_phoneGeneric.inc:47 +msgid "This 'dn' has no phone features." +msgstr "" + +#: plugins/admin/systems/class_phoneGeneric.inc:118 +msgid "You have no permissions to create a phone on this 'Base'." +msgstr "" + +#: plugins/admin/systems/class_componentGeneric.inc:47 +#: plugins/admin/systems/class_wingeneric.inc:85 +msgid "This 'dn' has no network features." +msgstr "" + +#: plugins/admin/systems/class_componentGeneric.inc:115 +#: plugins/admin/systems/class_wingeneric.inc:155 +msgid "You have no permissions to create a component on this 'Base'." +msgstr "" + +#: plugins/admin/systems/component.tpl:6 +msgid "Device name" +msgstr "" + +#: plugins/admin/systems/wingeneric.tpl:6 +msgid "Machine name" +msgstr "" + +#: plugins/admin/ogroups/tabs_ogroups.inc:19 +msgid "Terminals" +msgstr "" + +#: plugins/admin/ogroups/ogroup_objects.tpl:6 +msgid "Select objects to add" +msgstr "" + +#: plugins/admin/ogroups/ogroup_objects.tpl:29 +msgid "Select to see departments" +msgstr "" + +#: plugins/admin/ogroups/ogroup_objects.tpl:29 +msgid "Show departments" +msgstr "" + +#: plugins/admin/ogroups/ogroup_objects.tpl:30 +msgid "Select to see GOsa accounts" +msgstr "" + +#: plugins/admin/ogroups/ogroup_objects.tpl:30 +msgid "Show people" +msgstr "" + +#: plugins/admin/ogroups/ogroup_objects.tpl:31 +msgid "Select to see GOsa groups" +msgstr "" + +#: plugins/admin/ogroups/ogroup_objects.tpl:31 +msgid "Show groups" +msgstr "" + +#: plugins/admin/ogroups/ogroup_objects.tpl:32 +msgid "Select to see applications" +msgstr "" + +#: plugins/admin/ogroups/ogroup_objects.tpl:32 +msgid "Show applications" +msgstr "" + +#: plugins/admin/ogroups/ogroup_objects.tpl:34 +msgid "Select to see workstations" +msgstr "" + +#: plugins/admin/ogroups/ogroup_objects.tpl:35 +msgid "Select to see terminals" +msgstr "" + +#: plugins/admin/ogroups/ogroup_objects.tpl:36 +msgid "Select to see printers" +msgstr "" + +#: plugins/admin/ogroups/ogroup_objects.tpl:36 +msgid "Show printers" +msgstr "" + +#: plugins/admin/ogroups/ogroup_objects.tpl:37 +msgid "Select to see phones" +msgstr "" + +#: plugins/admin/ogroups/ogroup_objects.tpl:40 +msgid "Display objects of department" +msgstr "" + +#: plugins/admin/ogroups/ogroup_objects.tpl:46 +msgid "Display objects matching" +msgstr "" + +#: plugins/admin/ogroups/ogroup_objects.tpl:47 +msgid "Regular expression for matching object names" +msgstr "" + +#: plugins/admin/ogroups/termgroup.tpl:1 +msgid "" +"All actions you choose here influence all machines in this object " +"group. Be aware that rebooting machines may not make people happy who are " +"currently working at these machines." +msgstr "" + +#: plugins/admin/ogroups/termgroup.tpl:7 +msgid "Select action to execute for this group of terminals" +msgstr "" + +#: plugins/admin/ogroups/class_ogroup.inc:91 +msgid "This 'dn' is no object group." +msgstr "" + +#: plugins/admin/ogroups/class_ogroup.inc:204 +msgid "too many different objects!" +msgstr "" + +#: plugins/admin/ogroups/class_ogroup.inc:206 +msgid "users" +msgstr "" + +#: plugins/admin/ogroups/class_ogroup.inc:207 +msgid "groups" +msgstr "" + +#: plugins/admin/ogroups/class_ogroup.inc:208 +msgid "applications" +msgstr "" + +#: plugins/admin/ogroups/class_ogroup.inc:209 +msgid "departments" +msgstr "" + +#: plugins/admin/ogroups/class_ogroup.inc:210 +msgid "servers" +msgstr "" + +#: plugins/admin/ogroups/class_ogroup.inc:211 +msgid "workstations" +msgstr "" + +#: plugins/admin/ogroups/class_ogroup.inc:212 +msgid "terminals" +msgstr "" + +#: plugins/admin/ogroups/class_ogroup.inc:213 +msgid "phones" +msgstr "" + +#: plugins/admin/ogroups/class_ogroup.inc:214 +msgid "printers" +msgstr "" + +#: plugins/admin/ogroups/class_ogroup.inc:221 +msgid "and" +msgstr "" + +#: plugins/admin/ogroups/class_ogroup.inc:363 +msgid "Non existing dn: " +msgstr "" + +#: plugins/admin/ogroups/class_ogroup.inc:494 +msgid "Object groups need at least one member!" +msgstr "" + +#: plugins/admin/ogroups/class_ogroup.inc:499 +msgid "You can combine two different object types at maximum only!" +msgstr "" + +#: plugins/admin/ogroups/main.inc:34 plugins/admin/ogroups/main.inc:39 +#: plugins/admin/ogroups/class_ogroupManagement.inc:25 +msgid "Object groups" +msgstr "" + +#: plugins/admin/ogroups/class_ogroupManagement.inc:41 +msgid "UNIX accounts" +msgstr "" + +#: plugins/admin/ogroups/class_ogroupManagement.inc:45 +msgid "Servers" +msgstr "" + +#: plugins/admin/ogroups/class_ogroupManagement.inc:46 +msgid "Thin Clients" +msgstr "" + +#: plugins/admin/ogroups/class_ogroupManagement.inc:47 +msgid "Workstations" +msgstr "" + +#: plugins/admin/ogroups/class_ogroupManagement.inc:49 +#: plugins/generic/references/class_reference.inc:52 +msgid "Printer" +msgstr "" + +#: plugins/admin/ogroups/class_ogroupManagement.inc:153 +#, php-format +msgid "You're about to delete the object group '%s'." +msgstr "" + +#: plugins/admin/ogroups/class_ogroupManagement.inc:159 +#: plugins/admin/ogroups/class_ogroupManagement.inc:185 +msgid "You are not allowed to delete this object group!" +msgstr "" + +#: plugins/admin/ogroups/generic.tpl:9 +msgid "Name of the group" +msgstr "" + +#: plugins/admin/ogroups/generic.tpl:32 +msgid "Member objects" +msgstr "" + +#: plugins/admin/ogroups/remove.tpl:7 +msgid "" +"Please double check if you really want to do this since there is no way for " +"GOsa to get your data back." +msgstr "" + +#: plugins/admin/ogroups/headpage.tpl:46 +msgid "Show empty groups" +msgstr "" + +#: plugins/admin/ogroups/headpage.tpl:47 +msgid "Show groups containing users" +msgstr "" + +#: plugins/admin/ogroups/headpage.tpl:48 +msgid "Show groups containing groups" +msgstr "" + +#: plugins/admin/ogroups/headpage.tpl:49 +msgid "Show groups containing applications" +msgstr "" + +#: plugins/admin/ogroups/headpage.tpl:50 +msgid "Show groups containing departments" +msgstr "" + +#: plugins/admin/ogroups/headpage.tpl:51 +msgid "Show groups containing servers" +msgstr "" + +#: plugins/admin/ogroups/headpage.tpl:52 +msgid "Show groups containing workstations" +msgstr "" + +#: plugins/admin/ogroups/headpage.tpl:53 +msgid "Show groups containing terminals" +msgstr "" + +#: plugins/admin/ogroups/headpage.tpl:54 +msgid "Show groups containing printers" +msgstr "" + +#: plugins/gofon/phoneaccount/main.inc:120 +msgid "Phone settings" +msgstr "" + +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:114 +msgid "This account has no phone extensions." +msgstr "" + +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:124 +msgid "Remove phone account" +msgstr "" + +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:125 +msgid "" +"This account has phone features enabled. You can disable them by clicking " +"below." +msgstr "" + +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:127 +msgid "Create phone account" +msgstr "" + +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:128 +msgid "" +"This account has phone features disabled. You can enable them by clicking " +"below." +msgstr "" + +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:140 +msgid "Please enter a valid phone number!" +msgstr "" + +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:176 +msgid "Choose your private phone" +msgstr "" + +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:281 +#, php-format +msgid "You need to specify at least one phone number!" +msgstr "" + +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:295 +#, php-format +msgid "The number '%s' is no valid phone number!" +msgstr "" + +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:298 +#, php-format +msgid "The timeout '%s' contains invalid characters!" +msgstr "" + +#: plugins/gofon/phoneaccount/generic.tpl:16 +msgid "Answering machine" +msgstr "" + +#: plugins/gofon/phoneaccount/generic.tpl:22 +#: plugins/gofon/phoneaccount/generic.tpl:25 +msgid "Deliver missed calls as mail" +msgstr "" + +#: plugins/gofon/phoneaccount/generic.tpl:39 +msgid "Phone numbers" +msgstr "" + +#: plugins/gofon/phoneaccount/generic.tpl:55 +msgid "Forward calls to" +msgstr "" + +#: plugins/gofon/phoneaccount/generic.tpl:59 +msgid "Phone number" +msgstr "" + +#: plugins/gofon/phoneaccount/generic.tpl:59 +msgid "Timeout (s)" +msgstr "" + +#: plugins/gofon/reports/class_fonreport.inc:6 +msgid "Phone Reports" +msgstr "" + +#: plugins/gofon/reports/class_fonreport.inc:138 +msgid "Can't connect to phone database, no reports can be shown!" +msgstr "" + +#: plugins/gofon/reports/class_fonreport.inc:142 +msgid "Can't select phone database for report generation!" +msgstr "" + +#: plugins/gofon/reports/class_fonreport.inc:151 +msgid "Query for phone database failed!" +msgstr "" + +#: plugins/gofon/reports/contents.tpl:31 +msgid "Source" +msgstr "" + +#: plugins/gofon/reports/contents.tpl:32 +msgid "Destination" +msgstr "" + +#: plugins/gofon/reports/contents.tpl:33 +msgid "Channel" +msgstr "" + +#: plugins/gofon/reports/contents.tpl:34 +#: plugins/generic/references/class_reference.inc:42 +msgid "Application" +msgstr "" + +#: plugins/gofon/reports/contents.tpl:36 +msgid "Duration" +msgstr "" + +#: plugins/gofon/reports/main.inc:5 +msgid "Phone reports" +msgstr "" + +#: plugins/generic/references/class_reference.inc:36 +msgid "Group" +msgstr "" + +#: plugins/generic/references/class_reference.inc:46 +msgid "Thin Client" +msgstr "" + +#: plugins/generic/references/class_reference.inc:48 +msgid "Workstation" +msgstr "" + +#: plugins/generic/references/class_reference.inc:50 +msgid "Object group" +msgstr "" + +#: plugins/generic/references/contents.tpl:11 +msgid "Object name" +msgstr "" + +#: plugins/generic/references/contents.tpl:18 +msgid "This object has no relationship to other objects." +msgstr "" + +#: plugins/generic/welcome/welcome.tpl:4 +msgid "" +"This is the GOsa main screen. You can select your tasks from the menu on the " +"left, or by choosing one of the pictogramms below. All changes apply " +"directly to your companies LDAP-Server." +msgstr "" + +#: plugins/generic/welcome/welcome.tpl:8 +msgid "" +"Use Sign out on the upper left to close the connection and Main to get back to the pictogram view." +msgstr "" + +#: plugins/generic/welcome/welcome.tpl:15 +msgid "The GOsa team" +msgstr "" + +#: plugins/generic/welcome/main.inc:24 +#, php-format +msgid "Welcome %s!" +msgstr "" + +#: include/functions.inc:266 +#, php-format +msgid "Error when connecting the LDAP. Server said '%s'." +msgstr "" + +#: include/functions.inc:287 +#, php-format +msgid "User login failed. LDAP server said '%s'." +msgstr "" + +#: include/functions.inc:307 +msgid "Username / UID is not unique. Please check your LDAP database." +msgstr "" + +#: include/functions.inc:345 +msgid "" +"Error while adding a lock. Parameters are not set correctly, please check " +"the source!" +msgstr "" + +#: include/functions.inc:355 +#, php-format +msgid "" +"Can't set locking information in LDAP database. Please check the 'config' " +"entry in gosa.conf! LDAP server says '%s'." +msgstr "" + +#: include/functions.inc:370 +#, php-format +msgid "Adding a lock failed. LDAP server says '%s'." +msgstr "" + +#: include/functions.inc:396 +#, php-format +msgid "Removing a lock failed. LDAP server says '%s'." +msgstr "" + +#: include/functions.inc:426 +msgid "" +"Getting the lock from LDAP failed. Parameters are not sed correctly, please " +"check the source!" +msgstr "" + +#: include/functions.inc:436 +msgid "" +"Can't get locking information in LDAP database. Please check the 'config' " +"entry in gosa.conf!" +msgstr "" + +#: include/functions.inc:444 +msgid "" +"Found multiple locks for object to be locked. This should not be possible - " +"cleaning up multiple references." +msgstr "" + +#: include/functions.inc:516 +#, php-format +msgid "The size limit of %d entries is exceed!" +msgstr "" + +#: include/functions.inc:518 +#, php-format +msgid "" +"Set the new size limit to %s and show me this message if the limit still " +"exceeds" +msgstr "" + +#: include/functions.inc:530 +msgid "Configure" +msgstr "" + +#: include/functions.inc:535 +msgid "incomplete" +msgstr "" + +#: include/functions.inc:918 +#, php-format +msgid "" +"You're going to edit the LDAP entry '%s' which appears to be used by '%s'. " +"Please contact the person in order to clarify proceedings." +msgstr "" + +#: include/functions.inc:1017 +msgid "LDAP error:" +msgstr "" + +#: include/functions.inc:1110 +msgid "" +"Warning: Can't set kerberos password. Your PHP version has no kerberos " +"support, password has not been changed." +msgstr "" + +#: include/functions.inc:1117 +msgid "Kerberos database communication failed!" +msgstr "" + +#: include/functions.inc:1123 +msgid "Changing password in kerberos database failed!" +msgstr "" + +#: include/functions.inc:1132 +msgid "Unsupported password hash detected. Can't generate compatible password." +msgstr "" + +#: include/functions.inc:1172 +msgid "" +"Setting for SMBHASH in gosa.conf is incorrect! Can't change Samba password." +msgstr "" + +#: include/functions.inc:1190 +#, php-format +msgid "Setting the password failed. LDAP server says '%s'." +msgstr "" + +#: include/functions.inc:1603 +msgid "*ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" +msgstr "" + +#: include/class_mail-methods-cyrus.inc:44 +msgid "" +"Warning: IMAP Server cannot be reached! If you save this account, some mail " +"settings will not be stored on your server!" +msgstr "" + +#: include/class_mail-methods-cyrus.inc:107 +#, php-format +msgid "Can't create IMAP mailbox. Server says '%s'." +msgstr "" + +#: include/class_mail-methods-cyrus.inc:123 +#, php-format +msgid "Can't write IMAP quota. Server says '%s'." +msgstr "" + +#: include/class_mail-methods-cyrus.inc:134 +msgid "" +"Warning: imap_getacl is not implemented, wouldn't modify acl informations." +msgstr "" + +#: include/class_mail-methods-cyrus.inc:169 +msgid "Warning: imap_getacl is not available, can't get imap permissions!" +msgstr "" + +#: include/class_mail-methods-cyrus.inc:191 +#, php-format +msgid "Can't remove IMAP mailbox. Server says '%s'." +msgstr "" + +#: include/class_mail-methods-cyrus.inc:219 +#, php-format +msgid "Can't log into SIEVE server. Server says '%s'." +msgstr "" + +#: include/class_mail-methods-cyrus.inc:232 +#, php-format +msgid "Can't get sieve script. Server says '%s'." +msgstr "" + +#: include/class_mail-methods-cyrus.inc:303 +#, php-format +msgid "Can't send sieve script. Server says '%s'." +msgstr "" + +#: include/class_mail-methods-cyrus.inc:307 +#, php-format +msgid "Can't activate GOsa sieve script. Server says '%s'." +msgstr "" + +#: include/class_pluglist.inc:98 +msgid "" +"Your gosa.conf information has changed partly. Please convert it using the " +"contributed script fix_config.sh!" +msgstr "" + +#: include/class_pluglist.inc:113 ihtml/themes/altlinux/framework.tpl:13 +#: ihtml/themes/altlinux/framework.tpl:23 +#: ihtml/themes/default/framework.tpl:13 ihtml/themes/default/framework.tpl:23 +msgid "" +"You are currently editing a database entry. Do you want to dismiss the " +"changes?" +msgstr "" + +#: include/setup_checks.inc:78 +msgid "Can't bind to LDAP. No schema check possible!" +msgstr "" + +#: include/setup_checks.inc:87 include/setup_checks.inc:96 +msgid "Can't get schema information from server. No schema check possible!" +msgstr "" + +#: include/setup_checks.inc:116 +#, php-format +msgid "" +"Optional objectclass '%s' required by plugin '%s' is not present in LDAP " +"setup" +msgstr "" + +#: include/setup_checks.inc:119 +#, php-format +msgid "" +"Optional objectclass '%s' required by plugin '%s' does not have version %s" +msgstr "" + +#: include/setup_checks.inc:131 +#, php-format +msgid "Required objectclass '%s' is not present in LDAP setup" +msgstr "" + +#: include/setup_checks.inc:134 +#, php-format +msgid "Required objectclass '%s' does not have version %s" +msgstr "" + +#: include/setup_checks.inc:142 +msgid "SAMBA 3 support disabled, no schema seems to be installed" +msgstr "" + +#: include/setup_checks.inc:144 +msgid "" +"SAMBA 3 support enabledgosa+samba3.schema" +msgstr "" + +#: include/setup_checks.inc:147 +msgid "SAMBA 2 support disabled, no schema seems to be installed" +msgstr "" + +#: include/setup_checks.inc:149 +msgid "SAMBA 2 support enabledsamba.schema" +msgstr "" + +#: include/setup_checks.inc:153 +msgid "Support for pureftp disabled, no schema seems to be installed" +msgstr "" + +#: include/setup_checks.inc:155 +msgid "" +"Support for pureftp enabledpureftpd.schema" +msgstr "" + +#: include/setup_checks.inc:158 +msgid "Support for WebDAV disabled, no schema seems to be installed" +msgstr "" + +#: include/setup_checks.inc:160 +msgid "" +"Support for WebDAV enabledgosa+samba3.schema" +msgstr "" + +#: include/setup_checks.inc:163 +msgid "" +"Support for phpgroupware disabled, no schema seems to be installed" +msgstr "" + +#: include/setup_checks.inc:165 +msgid "" +"Support for phpgroupware enabledphpgwaccount." +"schema" +msgstr "" + +#: include/setup_checks.inc:168 +msgid "Support for gofon disabled, no schema seems to be installed" +msgstr "" + +#: include/setup_checks.inc:170 +msgid "Support for gofon enabledgofon.schema" +msgstr "" + +#: include/setup_checks.inc:182 +msgid "OK" +msgstr "" + +#: include/setup_checks.inc:185 +msgid "Ignored" +msgstr "" + +#: include/setup_checks.inc:187 +msgid "Failed" +msgstr "" + +#: include/setup_checks.inc:203 +msgid "PHP setup inspection" +msgstr "" + +#: include/setup_checks.inc:204 +msgid "Checking for PHP version (>=4.1.0)" +msgstr "" + +#: include/setup_checks.inc:205 +msgid "" +"PHP must be of version 4.1.0 or above for some functions and known bugs in " +"PHP language." +msgstr "" + +#: include/setup_checks.inc:208 +msgid "Checking if register_globals is set to 'off'" +msgstr "" + +#: include/setup_checks.inc:209 +msgid "" +"register_globals is a PHP mechanism to register all global varibales to be " +"accessible from scripts without changing the scope. This may be a security " +"risk. GOsa will run in both modes." +msgstr "" + +#: include/setup_checks.inc:212 +msgid "Checking for ldap module" +msgstr "" + +#: include/setup_checks.inc:213 +msgid "This is the main module used by GOsa and therefore really required." +msgstr "" + +#: include/setup_checks.inc:216 +msgid "Checking for gettext support" +msgstr "" + +#: include/setup_checks.inc:217 +msgid "Gettext support is required for internationalized GOsa." +msgstr "" + +#: include/setup_checks.inc:219 +msgid "Checking for mhash module" +msgstr "" + +#: include/setup_checks.inc:220 +msgid "" +"To use SSHA encryption, you'll need this module. If you are just using crypt " +"or md5 encryption, ignore this message. GOsa will run without it." +msgstr "" + +#: include/setup_checks.inc:223 +msgid "Checking for gd module" +msgstr "" + +#: include/setup_checks.inc:224 +msgid "" +"GOsa needs this module for recalculating image sizes provided for users as " +"jpegPhoto." +msgstr "" + +#: include/setup_checks.inc:226 +msgid "Checking for imap module" +msgstr "" + +#: include/setup_checks.inc:227 +msgid "" +"The IMAP module is needed to communicate with the IMAP server. It gets " +"status informations, creates and deletes mail users." +msgstr "" + +#: include/setup_checks.inc:229 +msgid "Checking for getacl in imap" +msgstr "" + +#: include/setup_checks.inc:230 +msgid "" +"The getacl support is needed for shared folder permissions. The standard " +"IMAP module is not capable of reading acl's. You need a recend PHP version " +"for this feature." +msgstr "" + +#: include/setup_checks.inc:232 +msgid "Checking for mysql module" +msgstr "" + +#: include/setup_checks.inc:233 +msgid "MySQL support is needed for reading GOfax reports from databases." +msgstr "" + +#: include/setup_checks.inc:235 +msgid "Checking for cups module" +msgstr "" + +#: include/setup_checks.inc:236 +msgid "" +"In order to read available printers from IPP protocol instead of printcap " +"files, you've to install the CUPS module." +msgstr "" + +#: include/setup_checks.inc:238 +msgid "Checking for kadm5 module" +msgstr "" + +#: include/setup_checks.inc:239 +msgid "" +"Managing users in kerberos requires the kadm5 module which is downloadable " +"via PEAR network." +msgstr "" + +#: include/setup_checks.inc:248 +msgid "Checking for some additional programms" +msgstr "" + +#: include/setup_checks.inc:257 +msgid "Checking for ImageMagick (>=5.4.0)" +msgstr "" + +#: include/setup_checks.inc:258 +msgid "" +"ImageMagick is used to convert user supplied images to fit the suggested " +"size and the unified JPEG format." +msgstr "" + +#: include/setup_checks.inc:261 +msgid "Checking imagick module for PHP" +msgstr "" + +#: include/setup_checks.inc:262 +msgid "" +"Imagick is used to convert user supplied images to fit the suggested size " +"and the unified JPEG format from PHP script." +msgstr "" + +#: include/setup_checks.inc:269 +msgid "Checking for fping utility" +msgstr "" + +#: include/setup_checks.inc:270 +msgid "" +"The fping utility is only used if you've got a thin client based terminal " +"environment running." +msgstr "" + +#: include/setup_checks.inc:285 +msgid "Checking for a way to generate LM/NT password hashes" +msgstr "" + +#: include/setup_checks.inc:286 +msgid "" +"In order to use SAMBA 2/3, you've to install some additional packages to " +"generate password hashes." +msgstr "" + +#: include/class_plugin.inc:180 +msgid "This 'dn' has no account extensions." +msgstr "" + +#: include/class_plugin.inc:185 +msgid "This is an empty plugin." +msgstr "" + +#: include/class_plugin.inc:384 +#, php-format +msgid "" +"Command '%s', specified as POSTCREATE for plugin '%s' doesn't seem to exist." +msgstr "" + +#: include/class_plugin.inc:410 +#, php-format +msgid "" +"Command '%s', specified as POSTMODIFY for plugin '%s' doesn't seem to exist." +msgstr "" + +#: include/class_plugin.inc:436 +#, php-format +msgid "" +"Command '%s', specified as POSTREMOVE for plugin '%s' doesn't seem to exist." +msgstr "" + +#: include/version.inc:15 +#, php-format +msgid "You are currently using GOsa version %s (CVS checkout from %s)" +msgstr "" + +#: include/class_config.inc:69 +#, php-format +msgid "XML error in gosa.conf: %s at line %d" +msgstr "" + +#: include/class_config.inc:195 html/index.php:138 +msgid "Can't bind to LDAP. Please contact the system administrator." +msgstr "" + +#: include/class_config.inc:426 +msgid "SID and/or RIDBASE missing in your configuration!" +msgstr "" + +#: include/class_ldap.inc:429 +#, php-format +msgid "" +"Autocreation of type '%s' is currently not supported. Please report to the " +"GOsa team." +msgstr "" + +#: include/class_ldap.inc:664 +#, php-format +msgid "" +"This is not a valid DN: '%s'. A block for import should begin with 'dn: ...' " +"in line %s" +msgstr "" + +#: include/class_ldap.inc:680 +#, php-format +msgid "The dn: '%s' (from line %s) already exists in the LDAP database." +msgstr "" + +#: include/class_ldap.inc:695 +#, php-format +msgid "Error while importing dn: '%s', please check your LDIF from line %s on!" +msgstr "" + +#: html/getfax.php:53 +msgid "Could not connect to database server!" +msgstr "" + +#: html/getfax.php:55 +msgid "Could not select database!" +msgstr "" + +#: html/getfax.php:60 html/getfax.php:68 +msgid "Database query failed!" +msgstr "" + +#: html/getvcard.php:36 +msgid "Error: getcvard.php needs a parameter to export a vcard!" +msgstr "" + +#: html/setup.php:141 html/index.php:75 +#, php-format +msgid "Directory '%s' specified as compile directory is not accessable!" +msgstr "" + +#: html/setup.php:207 +msgid "You've to specify an ldap server before continuing!" +msgstr "" + +#: html/setup.php:216 +msgid "" +"Can't connect to the specified LDAP server! Please make sure that is " +"reachable for GOsa." +msgstr "" + +#: html/setup.php:224 +msgid "" +"Can't bind to the specified LDAP server! Please make sure that is reachable " +"for GOsa." +msgstr "" + +#: html/setup.php:268 +#, php-format +msgid "" +"You're missing the required attribute '%s' from this formular. Please " +"complete!" +msgstr "" + +#: html/setup.php:284 +#, php-format +msgid "Can't log into LDAP server. Reason was: %s." +msgstr "" + +#: html/setup.php:328 +msgid "" +"No configuration found! Please save the generated one and place it in the " +"suggested directory." +msgstr "" + +#: html/setup.php:337 +msgid "Config file found, but permissions are not secure. Please fix!" +msgstr "" + +#: html/main.php:96 +msgid "" +"Register globals is on. GOsa will refuse to login unless this is fixed by an " +"administrator." +msgstr "" + +#: html/main.php:139 +msgid "Warning: memory is getting low - please increase the memory_limit!" +msgstr "" + +#: html/main.php:257 +#, php-format +msgid "Can't find any plugin definitions for plugin '%s'!" +msgstr "" + +#: html/index.php:53 +#, php-format +msgid "GOsa configuration %s/gosa.conf is not readable. Aborted." +msgstr "" + +#: html/index.php:156 +msgid "" +"You're missing an administrative account for GOsa, you'll not be able to " +"administrate anything!" +msgstr "" + +#: html/index.php:164 +msgid "Please specify a valid username!" +msgstr "" + +#: html/index.php:166 +msgid "Please specify your password!" +msgstr "" + +#: html/index.php:173 +msgid "Please check the username/password combination." +msgstr "" + +#: html/index.php:211 +msgid "Session will not be encrypted." +msgstr "" + +#: html/index.php:211 +msgid "Enter SSL session" +msgstr "" + +#: ihtml/themes/altlinux/sizelimit.tpl:3 ihtml/themes/default/sizelimit.tpl:3 +msgid "" +"The size limit option makes LDAP operations faster and saves the LDAP server " +"from getting too much load. The easiest way to handle big databases without " +"long timeouts would be to limit your search to smaller values and use " +"filters to get the entries you are looking for." +msgstr "" + +#: ihtml/themes/altlinux/sizelimit.tpl:6 ihtml/themes/default/sizelimit.tpl:6 +msgid "Please choose the way to react for this session" +msgstr "" + +#: ihtml/themes/altlinux/sizelimit.tpl:9 ihtml/themes/default/sizelimit.tpl:9 +msgid "ignore this error and show all entries the LDAP server returns" +msgstr "" + +#: ihtml/themes/altlinux/sizelimit.tpl:10 +#: ihtml/themes/default/sizelimit.tpl:10 +msgid "" +"ignore this error and show all entries that fit int the defined sizelimit " +"and let me use filters instead" +msgstr "" + +#: ihtml/themes/altlinux/conflict.tpl:2 ihtml/themes/classic/conflict.tpl:2 +#: ihtml/themes/default/conflict.tpl:2 +msgid "Session conflict detected" +msgstr "" + +#: ihtml/themes/altlinux/conflict.tpl:6 ihtml/themes/classic/conflict.tpl:6 +#: ihtml/themes/default/conflict.tpl:6 +msgid "" +"Probably there's another active instance of your session. Multiple window " +"operation is technical not possible and heavily depends on the browser " +"you're using. Usage of different browsers at a time (i.e. IE and Mozilla) is " +"possible. Pressing the Logout button will close this session." +msgstr "" + +#: ihtml/themes/altlinux/conflict.tpl:10 ihtml/themes/classic/conflict.tpl:10 +#: ihtml/themes/default/conflict.tpl:10 +msgid "" +"Ignoring this message will change/destroy the data you're currently editing, " +"so please close multiple windows and log in again." +msgstr "" + +#: ihtml/themes/altlinux/conflict.tpl:14 ihtml/themes/classic/conflict.tpl:14 +#: ihtml/themes/default/conflict.tpl:14 +msgid "Logout" +msgstr "" + +#: ihtml/themes/altlinux/login.tpl:13 ihtml/themes/classic/login.tpl:12 +#: ihtml/themes/default/login.tpl:13 +msgid "Please use your username and password to log in" +msgstr "" + +#: ihtml/themes/altlinux/login.tpl:24 ihtml/themes/altlinux/login.tpl:28 +#: ihtml/themes/classic/login.tpl:23 ihtml/themes/classic/login.tpl:27 +#: ihtml/themes/default/login.tpl:24 ihtml/themes/default/login.tpl:28 +msgid "Username" +msgstr "" + +#: ihtml/themes/altlinux/login.tpl:42 ihtml/themes/altlinux/login.tpl:45 +#: ihtml/themes/classic/login.tpl:41 ihtml/themes/classic/login.tpl:44 +#: ihtml/themes/default/login.tpl:42 ihtml/themes/default/login.tpl:45 +msgid "Directory" +msgstr "" + +#: ihtml/themes/altlinux/login.tpl:53 +#: ihtml/themes/altlinux/setup_finish.tpl:24 ihtml/themes/classic/login.tpl:52 +#: ihtml/themes/default/login.tpl:53 ihtml/themes/default/setup_finish.tpl:28 +msgid "Sign in" +msgstr "" + +#: ihtml/themes/altlinux/login.tpl:54 ihtml/themes/classic/login.tpl:53 +#: ihtml/themes/default/login.tpl:54 +msgid "Click here to log in" +msgstr "" + +#: ihtml/themes/altlinux/setup_introduction.tpl:1 +#: ihtml/themes/default/setup_introduction.tpl:1 +msgid "Welcome to the GOsa setup!" +msgstr "" + +#: ihtml/themes/altlinux/setup_introduction.tpl:4 +#: ihtml/themes/default/setup_introduction.tpl:4 +msgid "" +"It looks like you're calling GOsa for the first time - no configuration was " +"found. This setup like script will try to aid you in creating a working " +"configuration by performing three major steps: first we'll check the PHP " +"installation for required modules, than we're going to check for optional/" +"needed programms and after you've provided basic informations for your LDAP " +"connectivity, we're going to check your LDAP setup." +msgstr "" + +#: ihtml/themes/altlinux/framework.tpl:14 +#: ihtml/themes/classic/framework.tpl:13 ihtml/themes/default/framework.tpl:14 +msgid "Main" +msgstr "" + +#: ihtml/themes/altlinux/framework.tpl:19 +#: ihtml/themes/classic/framework.tpl:15 ihtml/themes/default/framework.tpl:19 +msgid "Help" +msgstr "" + +#: ihtml/themes/altlinux/framework.tpl:24 +#: ihtml/themes/classic/framework.tpl:17 ihtml/themes/default/framework.tpl:24 +msgid "Sign out" +msgstr "" + +#: ihtml/themes/altlinux/framework.tpl:32 +#: ihtml/themes/classic/framework.tpl:22 ihtml/themes/default/framework.tpl:32 +msgid "Signed in:" +msgstr "" + +#: ihtml/themes/altlinux/setup_step2.tpl:1 +#: ihtml/themes/altlinux/setup_step3.tpl:1 +#: ihtml/themes/altlinux/setup_step4.tpl:1 +#: ihtml/themes/default/setup_step2.tpl:1 +#: ihtml/themes/default/setup_step3.tpl:1 +#: ihtml/themes/default/setup_step4.tpl:1 +msgid "Setup continued..." +msgstr "" + +#: ihtml/themes/altlinux/setup_step2.tpl:4 +#: ihtml/themes/default/setup_step2.tpl:4 +msgid "" +"Step two looks for a set of helper programms and checks if they have the " +"correct minimum version." +msgstr "" + +#: ihtml/themes/altlinux/setup_step2.tpl:11 +#: ihtml/themes/default/setup_step2.tpl:11 +msgid "" +"We've inspected the webserver side now. Your setup seems to fit GOsa's " +"needs. Lets go for the GOsa configuration part now..." +msgstr "" + +#: ihtml/themes/altlinux/islocked.tpl:2 ihtml/themes/classic/islocked.tpl:2 +#: ihtml/themes/default/islocked.tpl:2 +msgid "Locking conflict detected" +msgstr "" + +#: ihtml/themes/altlinux/islocked.tpl:9 ihtml/themes/default/islocked.tpl:9 +msgid "" +"If this lock detection is false, the other person has obviously closed the " +"webbrowser during the edit operation. You may delete the lockfile in this " +"case by pressing the Remove button." +msgstr "" + +#: ihtml/themes/altlinux/setup_step3.tpl:4 +#: ihtml/themes/default/setup_step3.tpl:4 +msgid "" +"Now we're going include your LDAP server and create an initial " +"configuration. After you've entered the server URI below, a quick check is " +"performed if required LDAP schemas are in place. Samba versions are " +"autodetected by the installed objectclasses. Details on how your LDAP tree " +"is organized will be asked later on." +msgstr "" + +#: ihtml/themes/altlinux/setup_step3.tpl:7 +#: ihtml/themes/default/setup_step3.tpl:7 +msgid "Please enter the server URI" +msgstr "" + +#: ihtml/themes/altlinux/setup_step4.tpl:4 +#: ihtml/themes/default/setup_step4.tpl:3 +msgid "Enter a description for the location you're configuring here" +msgstr "" + +#: ihtml/themes/altlinux/setup_step4.tpl:8 +#: ihtml/themes/default/setup_step4.tpl:7 +msgid "Location name" +msgstr "" + +#: ihtml/themes/altlinux/setup_step4.tpl:14 +#: ihtml/themes/default/setup_step4.tpl:13 +msgid "" +"Finally, you need to specify parameters to access the LDAP server. GOsa " +"always acts as admin and manages access rights internally. This is a " +"workaround till OpenLDAP's in directory ACI's are fully implemented. For " +"this to work, we need the admin DN and the corresponding password." +msgstr "" + +#: ihtml/themes/altlinux/setup_step4.tpl:19 +#: ihtml/themes/default/setup_step4.tpl:18 +msgid "Admin DN" +msgstr "" + +#: ihtml/themes/altlinux/setup_step4.tpl:23 +#: ihtml/themes/default/setup_step4.tpl:22 +msgid "Admin password" +msgstr "" + +#: ihtml/themes/altlinux/setup_step4.tpl:29 +#: ihtml/themes/default/setup_step4.tpl:28 +msgid "" +"Some basic LDAP parameters are tunable and affect the locations where GOsa " +"saves people and groups, including the way accounts get created. Check the " +"values below if the fit your needs." +msgstr "" + +#: ihtml/themes/altlinux/setup_step4.tpl:34 +#: ihtml/themes/default/setup_step4.tpl:33 +msgid "People storage ou" +msgstr "" + +#: ihtml/themes/altlinux/setup_step4.tpl:38 +#: ihtml/themes/default/setup_step4.tpl:37 +msgid "People dn attribute" +msgstr "" + +#: ihtml/themes/altlinux/setup_step4.tpl:46 +#: ihtml/themes/default/setup_step4.tpl:45 +msgid "Group storage ou" +msgstr "" + +#: ihtml/themes/altlinux/setup_step4.tpl:50 +#: ihtml/themes/default/setup_step4.tpl:49 +msgid "ID base for users/groups" +msgstr "" + +#: ihtml/themes/altlinux/setup_step4.tpl:56 +#: ihtml/themes/default/setup_step4.tpl:74 +msgid "Check" +msgstr "" + +#: ihtml/themes/altlinux/setup_finish.tpl:1 +#: ihtml/themes/default/setup_finish.tpl:1 +msgid "Setup finished" +msgstr "" + +#: ihtml/themes/altlinux/setup_finish.tpl:4 +#: ihtml/themes/default/setup_finish.tpl:8 +msgid "" +"GOsa setup has collected all data needed to create an initial configuration " +"file. Save the the link below as your gosa.conf and place that file in /etc/" +"gosa. Change it as needed." +msgstr "" + +#: ihtml/themes/altlinux/setup_finish.tpl:12 +#: ihtml/themes/default/setup_finish.tpl:16 +msgid "" +"After placing the file under /etc/gosa, place make sure that the webserver " +"user is able to read gosa.conf, while other users shouldn't. You may want to " +"execute these commands to achieve this requirement:" +msgstr "" + +#: ihtml/themes/altlinux/setup_finish.tpl:22 +#: ihtml/themes/default/setup_finish.tpl:26 +msgid "Retry" +msgstr "" + +#: ihtml/themes/classic/islocked.tpl:9 +msgid "" +"If this is lock detection is false, the other person has obviously closed " +"the webbrowser during the edit operation. You may delete the lockfile in " +"this case by pressing the Remove button." +msgstr "" + +#: ihtml/themes/default/setup_step4.tpl:55 +msgid "Some parameters about Referral (optionnal)." +msgstr "" + +#: ihtml/themes/default/setup_step4.tpl:60 +msgid "Referral URL" +msgstr "" + +#: ihtml/themes/default/setup_step4.tpl:64 +msgid "Referral Admin" +msgstr "" + +#: ihtml/themes/default/setup_step4.tpl:68 +msgid "Referral Password" +msgstr "" + +#: ihtml/themes/default/setup_finish.tpl:3 +msgid "Schema Configuration" +msgstr "" + +#: ihtml/themes/default/setup_finish.tpl:6 +msgid "Configuration File" +msgstr "" diff --git a/locale/nl/LC_MESSAGES/messages.mo b/locale/nl/LC_MESSAGES/messages.mo new file mode 100644 index 0000000000000000000000000000000000000000..08768ca73978697355bba4380f6d7c2435b00f8b GIT binary patch literal 128675 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 literal 0 HcmV?d00001 diff --git a/locale/nl/LC_MESSAGES/messages.po b/locale/nl/LC_MESSAGES/messages.po new file mode 100644 index 000000000..4b09b0fd3 --- /dev/null +++ b/locale/nl/LC_MESSAGES/messages.po @@ -0,0 +1,6572 @@ +# translation of messages.po to Dutch +# GOsa2 Translations +# Copyright (C) 2003 GONICUS GmbH, Germany +# This file is distributed under the same license as the GOsa2 package. +# Alfred Schroeder , 2004. +# Cajus Pollmeier , 2004. +# +# Translator: +# Niels Klomp (CareWorks ICT Services) , 2005. +# +msgid "" +msgstr "" +"Project-Id-Version: messages\n" +"Report-Msgid-Bugs-To: Alfred Schröder \n" +"POT-Creation-Date: 2003-09-19 13:41+0200\n" +"PO-Revision-Date: 2005-05-10 20:51+0100\n" +"Last-Translator: Niels Klomp (CareWorks ICT Services) \n" +"Language-Team: CareWorks ICT Services \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-15\n" +"Content-Transfer-Encoding: 8bit\n" + +#: contrib/gosa.conf:4 +msgid "My account" +msgstr "Mijn account" + +#: contrib/gosa.conf:23 +msgid "Administration" +msgstr "Administratie" + +#: contrib/gosa.conf:40 +msgid "Addons" +msgstr "Toevoegingen" + +#: contrib/gosa.conf:55 contrib/gosa.conf:66 contrib/gosa.conf:74 +#: contrib/gosa.conf:80 contrib/gosa.conf:88 contrib/gosa.conf:98 +#: contrib/gosa.conf:106 contrib/gosa.conf:111 contrib/gosa.conf:116 +#: contrib/gosa.conf:121 contrib/gosa.conf:126 contrib/gosa.conf:131 +#: plugins/admin/groups/mail.tpl:7 plugins/gofax/faxaccount/generic.tpl:6 +#: plugins/gofax/blocklists/generic.tpl:1 +#: plugins/generic/references/class_reference.inc:20 +#: plugins/personal/mail/generic.tpl:4 plugins/personal/posix/generic.tpl:4 +#: plugins/personal/samba/samba2.tpl:6 plugins/personal/samba/samba3.tpl:6 +#: plugins/personal/generic/class_user.inc:16 +msgid "Generic" +msgstr "Algemeen" + +#: contrib/gosa.conf:56 +msgid "Unix" +msgstr "Unix" + +#: contrib/gosa.conf:57 contrib/gosa.conf:68 +#: plugins/generic/references/class_reference.inc:24 +#: plugins/personal/mail/class_mailAccount.inc:22 +msgid "Mail" +msgstr "Mail" + +#: contrib/gosa.conf:58 plugins/generic/references/class_reference.inc:26 +#: plugins/generic/references/class_reference.inc:28 +#: plugins/personal/samba/class_sambaAccount.inc:24 +msgid "Samba" +msgstr "Samba" + +#: contrib/gosa.conf:59 plugins/personal/connectivity/main.inc:136 +#: plugins/personal/connectivity/class_connectivity.inc:15 +msgid "Connectivity" +msgstr "Verbindingen" + +#: contrib/gosa.conf:60 plugins/admin/departments/generic.tpl:62 +#: plugins/gofax/faxaccount/generic.tpl:10 +#: plugins/addons/addressbook/contents.tpl:14 +#: plugins/personal/generic/generic.tpl:231 +#: plugins/personal/generic/generic.tpl:362 +msgid "Fax" +msgstr "Faxnummer" + +#: contrib/gosa.conf:61 plugins/admin/systems/chooser.tpl:12 +#: plugins/admin/departments/generic.tpl:58 +#: plugins/admin/ogroups/class_ogroupManagement.inc:48 +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:6 +#: plugins/addons/addressbook/address_edit.tpl:41 +#: plugins/addons/addressbook/address_edit.tpl:89 +#: plugins/addons/addressbook/address_info.tpl:37 +#: plugins/addons/addressbook/address_info.tpl:85 +#: plugins/addons/addressbook/contents.tpl:14 +#: plugins/generic/references/class_reference.inc:40 +#: plugins/personal/generic/generic.tpl:214 +#: plugins/personal/generic/generic.tpl:352 +msgid "Phone" +msgstr "Telefoonnummer" + +#: contrib/gosa.conf:62 contrib/gosa.conf:70 contrib/gosa.conf:76 +#: contrib/gosa.conf:84 contrib/gosa.conf:94 contrib/gosa.conf:102 +#: contrib/gosa.conf:107 contrib/gosa.conf:112 contrib/gosa.conf:117 +#: contrib/gosa.conf:122 contrib/gosa.conf:127 contrib/gosa.conf:132 +msgid "References" +msgstr "Referenties" + +#: contrib/gosa.conf:67 plugins/admin/ogroups/class_ogroupManagement.inc:44 +#: plugins/admin/applications/class_applicationManagement.inc:25 +msgid "Applications" +msgstr "Programma's" + +#: contrib/gosa.conf:69 +msgid "ACL" +msgstr "Rechten" + +#: contrib/gosa.conf:75 +msgid "Options" +msgstr "Opties" + +#: contrib/gosa.conf:81 contrib/gosa.conf:99 +msgid "Devices" +msgstr "Apparaten" + +#: contrib/gosa.conf:82 contrib/gosa.conf:100 +msgid "Startup" +msgstr "Opstarten" + +#: contrib/gosa.conf:83 contrib/gosa.conf:93 contrib/gosa.conf:101 +msgid "Monitoring" +msgstr "Monitoring" + +#: contrib/gosa.conf:89 +msgid "Databases" +msgstr "Databases" + +#: contrib/gosa.conf:90 +msgid "Services" +msgstr "Services" + +#: contrib/gosa.conf:91 +msgid "DNS" +msgstr "DNS" + +#: contrib/gosa.conf:92 +msgid "DHCP" +msgstr "DHCP" + +#: contrib/gosa.conf:144 plugins/addons/ldapmanager/contentexport.tpl:19 +#: plugins/addons/ldapmanager/contentexport.tpl:32 +#: plugins/addons/ldapmanager/contentexport.tpl:47 +msgid "Export" +msgstr "Exporteer" + +#: contrib/gosa.conf:145 plugins/addons/ldapmanager/contentcsv.tpl:119 +#: plugins/addons/ldapmanager/contentcsv.tpl:122 +#: plugins/addons/ldapmanager/contentimport.tpl:56 +#: plugins/personal/mail/generic.tpl:107 +msgid "Import" +msgstr "Importeren" + +#: contrib/gosa.conf:146 +msgid "CSV Import" +msgstr "CSV Import" + +#: contrib/gosa.conf:161 +msgid "{LOCATIONNAME}" +msgstr "{LOCATIONNAME}" + +#: contrib/gosa.conf:179 +msgid "German" +msgstr "Duits" + +#: contrib/gosa.conf:180 +msgid "Russian" +msgstr "Russisch" + +#: contrib/gosa.conf:181 +msgid "Spanish" +msgstr "Spaans" + +#: contrib/gosa.conf:182 +msgid "French" +msgstr "Frans" + +#: contrib/gosa.conf:183 +msgid "Dutch" +msgstr "Nederlands" + +#: contrib/gosa.conf:184 +msgid "English" +msgstr "Engels" + +#: html/getfax.php:53 +msgid "Could not connect to database server!" +msgstr "Kan niet verbinden met de database server!" + +#: html/getfax.php:55 +msgid "Could not select database!" +msgstr "De opgegeven database kon niet geselecteerd worden!" + +#: html/getfax.php:60 html/getfax.php:68 +msgid "Database query failed!" +msgstr "De database zoekopdracht is mislukt" + +#: html/main.php:107 +msgid "" +"Register globals is on. GOsa will refuse to login unless this is fixed by an " +"administrator." +msgstr "" +"'Register globals' is geactiveerd in PHP. GOsa zal niemand laten inloggen " +"totdat dit opgelost is door een systeembeheerder." + +#: html/main.php:150 +msgid "Warning: memory is getting low - please increase the memory_limit!" +msgstr "" +"Waarschuwing: Geheugengebruik is te hoog - verhoog a.u.b. de 'memory_limit' " +"in PHP!" + +#: html/main.php:271 +#, php-format +msgid "Can't find any plugin definitions for plugin '%s'!" +msgstr "Kan geen module defenities vinden voor module '%s'!" + +#: html/setup.php:67 +#, php-format +msgid "" +"Directory '%s' specified as smarty compile directory is not accessable, " +"check existence and rigths of this directory!" +msgstr "" +"Directory '%s' die opgegeven is als smarty compileer directory is niet toegankelijk!" +"controleer of deze directory bestaat en wat de rechten op deze directory zijn!" + +#: html/index.php:53 +#, php-format +msgid "GOsa configuration %s/gosa.conf is not readable. Aborted." +msgstr "GOsa configuratie %s/gosa.conf is niet leesbaar. Geannuleerd." + +#: html/index.php:75 +#, php-format +msgid "Directory '%s' specified as compile directory is not accessable!" +msgstr "" +"Directory '%s' die opgegeven is als compileer directory is niet toegankelijk!" + +#: html/index.php:138 include/class_config.inc:195 +msgid "Can't bind to LDAP. Please contact the system administrator." +msgstr "" +"Kan de LDAP server niet bereiken. Neem a.u.b. contact op met de " +"systeembeheerder." + +#: html/index.php:156 ihtml/themes/default/setup_useradmin.tpl:6 +#: include/setup_checks.inc:907 include/setup_checks.inc:925 +msgid "" +"You're missing an administrative account for GOsa, you'll not be able to " +"administrate anything!" +msgstr "Er is geen beheerders account voor GOsa. U kunt niets beheren!" + +#: html/index.php:164 +msgid "Please specify a valid username!" +msgstr "Geef a.u.b. een geldige gebruikersnaam op!" + +#: html/index.php:166 +msgid "Please specify your password!" +msgstr "Geef a.u.b. uw wachtwoord op!" + +#: html/index.php:173 +msgid "Please check the username/password combination." +msgstr "Controleer a.u.b. de gebruikersnaam/wachtwoord combinatie." + +#: html/index.php:211 ihtml/themes/default/conflict.tpl:6 +#: ihtml/themes/default/islocked.tpl:6 ihtml/themes/altlinux/conflict.tpl:6 +#: ihtml/themes/altlinux/islocked.tpl:6 ihtml/themes/classic/conflict.tpl:6 +#: ihtml/themes/classic/islocked.tpl:6 plugins/admin/users/remove.tpl:2 +#: plugins/admin/groups/remove.tpl:2 plugins/admin/systems/remove.tpl:2 +#: plugins/admin/departments/remove.tpl:2 plugins/admin/ogroups/remove.tpl:2 +#: plugins/admin/applications/remove.tpl:2 +#: plugins/gofax/blocklists/remove.tpl:2 +#: plugins/addons/addressbook/remove.tpl:2 +msgid "Warning" +msgstr "Waarschuwing" + +#: html/index.php:211 +msgid "Session will not be encrypted." +msgstr "De sessie zal niet versleuteld zijn." + +#: html/index.php:211 +msgid "Enter SSL session" +msgstr "Gebruik een SSL sessie" + +#: html/getvcard.php:36 +msgid "Error: getcvard.php needs a parameter to export a vcard!" +msgstr "" +"Fout: getvcard.php heeft een parameter nodig om een vcard te exporteren!" + +#: ihtml/themes/default/setup_useradmin.tpl:3 +msgid "You already have an Administrative Account and a Group." +msgstr "U heeft reeds een Administratief Account en Groep" + +#: ihtml/themes/default/setup_useradmin.tpl:10 +msgid "" +"To provide full administrative access to GOsa, you need to create a special " +"group which contains the administrative user. The setup program can assist " +"you with this task. Enter the desired username and the password below to " +"create the missing entries." +msgstr "" +"U dient een speciale groep aan te maken, welke de administratieve gebruiker " +"bevat, om volledige administratieve toegang tot GOsa te verschaffen. Het " +"installatie programma kan u bij deze taak helpen. Voer hieronder de gewenste " +"gebruikersnaam en wachtwoord in om de ontbrekende gegevens aan te maken." + +#: ihtml/themes/default/setup_useradmin.tpl:22 +#: ihtml/themes/default/login.tpl:24 ihtml/themes/default/login.tpl:28 +#: ihtml/themes/altlinux/login.tpl:24 ihtml/themes/altlinux/login.tpl:28 +#: ihtml/themes/classic/login.tpl:23 ihtml/themes/classic/login.tpl:27 +msgid "Username" +msgstr "Gebruikersnaam" + +#: ihtml/themes/default/setup_useradmin.tpl:30 +#: ihtml/themes/default/login.tpl:33 ihtml/themes/default/login.tpl:37 +#: ihtml/themes/altlinux/login.tpl:33 ihtml/themes/altlinux/login.tpl:37 +#: ihtml/themes/classic/login.tpl:32 ihtml/themes/classic/login.tpl:36 +#: plugins/admin/systems/servdb.tpl:22 plugins/admin/systems/servdb.tpl:38 +#: plugins/admin/systems/servdb.tpl:54 plugins/admin/systems/servdb.tpl:90 +#: plugins/admin/systems/servdb.tpl:113 +#: plugins/personal/password/class_password.inc:5 +msgid "Password" +msgstr "Wachtwoord" + +#: ihtml/themes/default/setup_useradmin.tpl:40 +#: ihtml/themes/default/setup_finish.tpl:30 +#: ihtml/themes/default/setup_step2.tpl:12 +#: ihtml/themes/default/setup_step3.tpl:17 +#: ihtml/themes/default/setup_step4.tpl:94 include/functions.inc:1199 +#: plugins/gofax/reports/detail.tpl:68 +#: plugins/addons/ldapmanager/contentexport.tpl:70 +#: plugins/addons/ldapmanager/contentcsv.tpl:124 +#: plugins/addons/ldapmanager/contentimport.tpl:51 +#: plugins/personal/password/changed.tpl:12 +#: plugins/personal/generic/main.inc:167 +msgid "Back" +msgstr "Terug" + +#: ihtml/themes/default/setup_useradmin.tpl:41 +#: ihtml/themes/default/setup_step2.tpl:13 +#: ihtml/themes/default/setup_step3.tpl:18 +#: ihtml/themes/default/setup_introduction.tpl:12 +#: ihtml/themes/altlinux/setup_step2.tpl:16 +#: ihtml/themes/altlinux/setup_step3.tpl:12 +#: ihtml/themes/altlinux/setup_introduction.tpl:10 +#: plugins/admin/users/template.tpl:46 +msgid "Continue" +msgstr "Doorgaan" + +#: ihtml/themes/default/conflict.tpl:2 ihtml/themes/altlinux/conflict.tpl:2 +#: ihtml/themes/classic/conflict.tpl:2 +msgid "Session conflict detected" +msgstr "Er is een sessie conflict gedetecteerd" + +#: ihtml/themes/default/conflict.tpl:6 ihtml/themes/altlinux/conflict.tpl:6 +#: ihtml/themes/classic/conflict.tpl:6 +msgid "" +"Probably there's another active instance of your session. Multiple window " +"operation is technical not possible and heavily depends on the browser " +"you're using. Usage of different browsers at a time (i.e. IE and Mozilla) is " +"possible. Pressing the Logout button will close this session." +msgstr "" +"Er is vermoedelijk een andere actieve instantiatie van uw sessie. Werken m.b." +"v. meerdere schermen is technisch onmogelijk en is sterk afhankelijk van de " +"gebruikte browser. Gelijktijdig gebruik van verschillende browsers " +"(bijvoorbeeld Internet Explorer en Mozilla) is wel mogelijk. Via de " +"Uitloggen knop wordt deze sessie afgesloten." + +#: ihtml/themes/default/conflict.tpl:10 ihtml/themes/altlinux/conflict.tpl:10 +#: ihtml/themes/classic/conflict.tpl:10 +msgid "" +"Ignoring this message will change/destroy the data you're currently editing, " +"so please close multiple windows and log in again." +msgstr "" +"Het negeren van dit bericht zal de data die u op dit moment aan het bewerken " +"bent veranderen/vernietigen, dus sluit a.u.b. enige overige vensters en log " +"opnieuw in." + +#: ihtml/themes/default/conflict.tpl:14 ihtml/themes/altlinux/conflict.tpl:14 +#: ihtml/themes/classic/conflict.tpl:14 +msgid "Logout" +msgstr "Uitloggen" + +#: ihtml/themes/default/islocked.tpl:2 ihtml/themes/altlinux/islocked.tpl:2 +#: ihtml/themes/classic/islocked.tpl:2 +msgid "Locking conflict detected" +msgstr "Er is een blokkeer conflict gedetecteerd" + +#: ihtml/themes/default/islocked.tpl:9 ihtml/themes/altlinux/islocked.tpl:9 +msgid "" +"If this lock detection is false, the other person has obviously closed the " +"webbrowser during the edit operation. You may delete the lockfile in this " +"case by pressing the Remove button." +msgstr "" +"Indien deze blokkeer detectie foutief is dan heeft de andere persoon de " +"webbrowser afgesloten tijdens de bewerking. U kunt de blokkade in dit geval " +"verwijderen door de Verwijderen knop te gebruiken." + +#: ihtml/themes/default/islocked.tpl:13 ihtml/themes/altlinux/islocked.tpl:13 +#: ihtml/themes/classic/islocked.tpl:13 +#: plugins/admin/groups/class_groupMail.inc:408 +#: plugins/admin/applications/class_applicationParameters.inc:94 +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:205 +#: plugins/personal/generic/generic_certs.tpl:19 +#: plugins/personal/generic/generic_certs.tpl:30 +#: plugins/personal/generic/generic_certs.tpl:41 +msgid "Remove" +msgstr "Verwijderen" + +#: ihtml/themes/default/islocked.tpl:15 ihtml/themes/altlinux/islocked.tpl:15 +#: ihtml/themes/classic/islocked.tpl:15 plugins/admin/users/password.tpl:23 +#: plugins/admin/users/remove.tpl:17 plugins/admin/users/template.tpl:48 +#: plugins/admin/users/class_userManagement.inc:505 +#: plugins/admin/groups/mail_admins.tpl:39 plugins/admin/groups/remove.tpl:17 +#: plugins/admin/groups/class_groupManagement.inc:259 +#: plugins/admin/groups/group_objects.tpl:47 +#: plugins/admin/groups/mail_locals.tpl:51 +#: plugins/admin/groups/application_options.tpl:10 +#: plugins/admin/systems/password.tpl:27 plugins/admin/systems/chooser.tpl:18 +#: plugins/admin/systems/remove.tpl:17 +#: plugins/admin/systems/class_systemManagement.inc:440 +#: plugins/admin/departments/remove.tpl:17 +#: plugins/admin/departments/class_departmentManagement.inc:230 +#: plugins/admin/ogroups/class_ogroupManagement.inc:276 +#: plugins/admin/ogroups/remove.tpl:17 +#: plugins/admin/ogroups/ogroup_objects.tpl:58 +#: plugins/admin/applications/remove.tpl:16 +#: plugins/admin/applications/class_applicationManagement.inc:241 +#: plugins/gofax/faxaccount/main.inc:91 plugins/gofax/faxaccount/locals.tpl:50 +#: plugins/gofax/faxaccount/lists.tpl:39 +#: plugins/gofax/blocklists/remove.tpl:17 +#: plugins/gofax/blocklists/generic.tpl:76 +#: plugins/gofon/phoneaccount/main.inc:106 +#: plugins/addons/addressbook/dial.tpl:11 +#: plugins/addons/addressbook/address_edit.tpl:108 +#: plugins/addons/addressbook/remove.tpl:17 plugins/personal/mail/main.inc:106 +#: plugins/personal/mail/mail_locals.tpl:51 +#: plugins/personal/posix/posix_groups.tpl:58 +#: plugins/personal/posix/main.inc:112 +#: plugins/personal/posix/trust_machines.tpl:47 +#: plugins/personal/samba/main.inc:106 +#: plugins/personal/samba/samba3_workstations.tpl:47 +#: plugins/personal/generic/generic_picture.tpl:31 +#: plugins/personal/generic/password.tpl:19 +#: plugins/personal/generic/main.inc:160 +#: plugins/personal/generic/generic_certs.tpl:62 +#: plugins/personal/connectivity/main.inc:118 +msgid "Cancel" +msgstr "Annuleren" + +#: ihtml/themes/default/login.tpl:13 ihtml/themes/altlinux/login.tpl:13 +#: ihtml/themes/classic/login.tpl:12 +msgid "Please use your username and password to log in" +msgstr "Gebruik uw gebruikersnaam en wachtwoord om in te loggen" + +#: ihtml/themes/default/login.tpl:42 ihtml/themes/default/login.tpl:45 +#: ihtml/themes/altlinux/login.tpl:42 ihtml/themes/altlinux/login.tpl:45 +#: ihtml/themes/classic/login.tpl:41 ihtml/themes/classic/login.tpl:44 +msgid "Directory" +msgstr "Directory" + +#: ihtml/themes/default/login.tpl:53 ihtml/themes/altlinux/login.tpl:53 +#: ihtml/themes/altlinux/setup_finish.tpl:24 ihtml/themes/classic/login.tpl:52 +msgid "Sign in" +msgstr "Inloggen" + +#: ihtml/themes/default/login.tpl:54 ihtml/themes/altlinux/login.tpl:54 +#: ihtml/themes/classic/login.tpl:53 +msgid "Click here to log in" +msgstr "Klik hier om in te loggen" + +#: ihtml/themes/default/setup_finish.tpl:1 +#: ihtml/themes/altlinux/setup_finish.tpl:1 +msgid "Setup finished" +msgstr "Setup beëindigd" + +#: ihtml/themes/default/setup_finish.tpl:3 +msgid "" +"Basically the setup is finished. You can check the result of the schema " +"check here and download the autogenerated gosa.conf below." +msgstr "" +"De installatie is in principe afgerond. U kunt het resultaat van de " +"LDAP schema controle hier controleren en de automatisch gegenereerde " +"gosa.conf hieronder downloaden." + +#: ihtml/themes/default/setup_finish.tpl:7 +msgid "Schema Configuration" +msgstr "Schema Configuratie" + +#: ihtml/themes/default/setup_finish.tpl:12 +msgid "Configuration File" +msgstr "Configuratie bestand" + +#: ihtml/themes/default/setup_finish.tpl:14 +#: ihtml/themes/altlinux/setup_finish.tpl:4 +msgid "" +"GOsa setup has collected all data needed to create an initial configuration " +"file. Save the the link below as your gosa.conf and place that file in /etc/" +"gosa. Change it as needed." +msgstr "" +"Het GOsa installatie programma heeft alle data vergaard die nodig is voor een initieel " +"configuratiebestand. Bewaar de link hieronder als uw gosa.conf en plaats dit " +"bestand in /etc/gosa. Verander de configuratie naar behoeven." + +#: ihtml/themes/default/setup_finish.tpl:17 +msgid "Download configuration" +msgstr "Systeem configuratie" + +#: ihtml/themes/default/setup_finish.tpl:20 +#: ihtml/themes/altlinux/setup_finish.tpl:12 +msgid "" +"After placing the file under /etc/gosa, place make sure that the webserver " +"user is able to read gosa.conf, while other users shouldn't. You may want to " +"execute these commands to achieve this requirement:" +msgstr "" +"Controleer dat de webserver het bestand kan lezen (zonder dat andere gebruikers " +"dit kunnen) nadat u het bestand in de directory /etc/gosa geplaatst heeft. U wil " +"misschien de volgende commando's uitvoeren om aan deze vereiste te voldoen: " + +#: ihtml/themes/default/setup_finish.tpl:31 +#: ihtml/themes/altlinux/setup_finish.tpl:22 +msgid "Retry" +msgstr "Opnieuw proberen" + +#: ihtml/themes/default/framework.tpl:13 ihtml/themes/default/framework.tpl:23 +#: ihtml/themes/altlinux/framework.tpl:13 +#: ihtml/themes/altlinux/framework.tpl:23 include/class_pluglist.inc:113 +msgid "" +"You are currently editing a database entry. Do you want to dismiss the " +"changes?" +msgstr "" +"U bent momenteel database gegevens aan het bewerken. Wilt u de veranderingen " +"weggooien?" + +#: ihtml/themes/default/framework.tpl:14 +#: ihtml/themes/altlinux/framework.tpl:14 +#: ihtml/themes/classic/framework.tpl:13 +msgid "Main" +msgstr "Hoofdmenu" + +#: ihtml/themes/default/framework.tpl:19 +#: ihtml/themes/altlinux/framework.tpl:19 +#: ihtml/themes/classic/framework.tpl:15 +msgid "Help" +msgstr "Help" + +#: ihtml/themes/default/framework.tpl:24 +#: ihtml/themes/altlinux/framework.tpl:24 +#: ihtml/themes/classic/framework.tpl:17 +msgid "Sign out" +msgstr "Uitloggen" + +#: ihtml/themes/default/framework.tpl:32 +#: ihtml/themes/altlinux/framework.tpl:32 +#: ihtml/themes/classic/framework.tpl:22 +msgid "Signed in:" +msgstr "Aangemeld:" + +#: ihtml/themes/default/sizelimit.tpl:3 ihtml/themes/altlinux/sizelimit.tpl:3 +msgid "" +"The size limit option makes LDAP operations faster and saves the LDAP server " +"from getting too much load. The easiest way to handle big databases without " +"long timeouts would be to limit your search to smaller values and use " +"filters to get the entries you are looking for." +msgstr "" +"De grootte limiet optie maakt LDAP bewerkingen sneller en behoedt de LDAP " +"server voor een te grote werklast. De eenvoudigste manier om met grote " +"databases te werken zonder lange timeouts is door zoekopdrachten in grootte " +"te beperken en door filters te gebruiken voor de informatie die u zoekt." + +#: ihtml/themes/default/sizelimit.tpl:6 ihtml/themes/altlinux/sizelimit.tpl:6 +msgid "Please choose the way to react for this session" +msgstr "Kies a.u.b. de manier waarop gereageerd moet worden voor deze sessie" + +#: ihtml/themes/default/sizelimit.tpl:9 ihtml/themes/altlinux/sizelimit.tpl:9 +msgid "ignore this error and show all entries the LDAP server returns" +msgstr "Negeer deze fout en toon alle gegevens die de LDAP server teruggeeft" + +#: ihtml/themes/default/sizelimit.tpl:10 +#: ihtml/themes/altlinux/sizelimit.tpl:10 +msgid "" +"ignore this error and show all entries that fit int the defined sizelimit " +"and let me use filters instead" +msgstr "" +"Negeer deze fout en toon alle gegevens die passen binnen de gedefinieerde " +"grootte limiet waarbij ik filters zal gebruiken" + +#: ihtml/themes/default/sizelimit.tpl:14 +#: ihtml/themes/altlinux/sizelimit.tpl:14 +#: plugins/personal/generic/generic.tpl:75 +msgid "Set" +msgstr "Stel in" + +#: ihtml/themes/default/setup_step2.tpl:1 +#: ihtml/themes/default/setup_step3.tpl:1 +#: ihtml/themes/default/setup_step4.tpl:1 +#: ihtml/themes/altlinux/setup_step2.tpl:1 +#: ihtml/themes/altlinux/setup_step3.tpl:1 +#: ihtml/themes/altlinux/setup_step4.tpl:1 +msgid "Setup continued..." +msgstr "Setup vervolg..." + +#: ihtml/themes/default/setup_step2.tpl:4 +#: ihtml/themes/altlinux/setup_step2.tpl:4 +msgid "" +"Step two looks for a set of helper programms and checks if they have the " +"correct minimum version." +msgstr "" +"Stap twee zoekt naar een collectie hulpprogramma's en controleert of deze " +"programma's de correcte minimum versies hebben." + +#: ihtml/themes/default/setup_step3.tpl:4 +#: ihtml/themes/altlinux/setup_step3.tpl:4 +msgid "" +"Now we're going include your LDAP server and create an initial " +"configuration. After you've entered the server URI below, a quick check is " +"performed if required LDAP schemas are in place. Samba versions are " +"autodetected by the installed objectclasses. Details on how your LDAP tree " +"is organized will be asked later on." +msgstr "" +"Nu wordt uw LDAP server ingepast en wordt er een initiële configuratie " +"aangemaakt. Nadat u de server URI hieronder ingevuld heeft wordt er een " +"snelle controle uitgevoerd of de vereiste LDAP schemas aanwezig zijn. Samba " +"versies worden automatisch gedetecteerd. Details over hoe uw LDAP " +"boomstructuur opgebouwd is worden later gevraagd" + +#: ihtml/themes/default/setup_step3.tpl:10 +msgid "" +"Please enter the server URI to allow the setup to connect your LDAP server " +"(Example: ldap://your.server:389)." +msgstr "" +"Voer a.u.b. de LDAP server URI in om het installatie programma te laten verbinden " +"met uw LDAP server (Bijvoorbeeld: ldap://uw.server:389)." + +#: ihtml/themes/default/setup_step4.tpl:2 +msgid "" +"The following fields allow the basic configuration of GOsa's behaviour and " +"affect various properties in your main configuration." +msgstr "" +"De volgende velden definieren de basis configuratie van GOsa's gedrag en " +"beïnvloeden diverse eigenschappen in uw hoofd configuratie." + +#: ihtml/themes/default/setup_step4.tpl:7 +#: ihtml/themes/altlinux/setup_step4.tpl:4 +msgid "Enter a description for the location you're configuring here" +msgstr "" +"Geef a.u.b. een omschrijving van de locatie die u hier aan het configureren " +"bent" + +#: ihtml/themes/default/setup_step4.tpl:11 +#: ihtml/themes/altlinux/setup_step4.tpl:8 +msgid "Location name" +msgstr "Naam van de locatie" + +#: ihtml/themes/default/setup_step4.tpl:18 +msgid "" +"GOsa always acts as admin and manages access rights internally. This is a " +"workaround till OpenLDAP's in directory ACI's are fully implemented. For " +"this to work, we need the admin DN and the corresponding password." +msgstr "" +"GOsa werkt altijd als een beheerder en verzorgt het toegangsbeheer intern. Dit is " +"een tijdelijke oplossing totdat directory ACIs volledig geïmplementeerd zijn " +"in OpenLDAP. Om dit te kunnen laten werken is een beheerders DN en het " +"bijbehorende wachtwoord nodig." + +#: ihtml/themes/default/setup_step4.tpl:23 +#: ihtml/themes/altlinux/setup_step4.tpl:19 +msgid "Admin DN" +msgstr "Beheerders DN" + +#: ihtml/themes/default/setup_step4.tpl:27 +#: ihtml/themes/altlinux/setup_step4.tpl:23 +msgid "Admin password" +msgstr "Beheerders wachtwoord" + +#: ihtml/themes/default/setup_step4.tpl:34 +#: ihtml/themes/altlinux/setup_step4.tpl:29 +msgid "" +"Some basic LDAP parameters are tunable and affect the locations where GOsa " +"saves people and groups, including the way accounts get created. Check the " +"values below if the fit your needs." +msgstr "" +"Sommige LDAP parameters zijn aan te passen en bepalen de locaties waar GOsa " +"gebruikers en groepen opslaat, evenals de manier waarop gebruikers " +"aangemaakt worden. Controleer of de waardes hieronder in uw behoeften " +"voorzien." + +#: ihtml/themes/default/setup_step4.tpl:39 +#: ihtml/themes/altlinux/setup_step4.tpl:34 +msgid "People storage ou" +msgstr "OU voor gebruikers opslag" + +#: ihtml/themes/default/setup_step4.tpl:43 +#: ihtml/themes/altlinux/setup_step4.tpl:38 +msgid "People dn attribute" +msgstr "DN atribuut voor gebruikers" + +#: ihtml/themes/default/setup_step4.tpl:51 +#: ihtml/themes/altlinux/setup_step4.tpl:46 +msgid "Group storage ou" +msgstr "OU voor groepen opslag" + +#: ihtml/themes/default/setup_step4.tpl:55 +#: ihtml/themes/altlinux/setup_step4.tpl:50 +msgid "ID base for users/groups" +msgstr "ID basis voor gebruikers/groepen" + +#: ihtml/themes/default/setup_step4.tpl:63 +msgid "" +"GOsa supports several encryption types for your passwords. Normally this is " +"adjustable via user templates, but you can specify a default method to be " +"used here, too." +msgstr "" +"GOsa ondersteunt diverse encryptie types voor uw wachtwoorden. Normaliter is dit " +"aanpasbaar via gebruikerssjablonen. Hier kunt u echter een standaard te " +"gebruiken methode opgeven." + +#: ihtml/themes/default/setup_step4.tpl:68 +msgid "Encryption algorithm" +msgstr "Encryptie algoritme" + +#: ihtml/themes/default/setup_step4.tpl:79 +msgid "" +"GOsa has modular support for several mail methods. These methods provide " +"interfaces to users mailboxes and general handling for quotas. You can " +"choose the dummy plugin to leave all your mail settings untouched." +msgstr "" +"GOsa heeft modulaire ondersteuning voor diverse mail methodes. Deze " +"methodes leveren toegang tot gebruikers mailboxen en algemene afhandeling " +"voor quota's. U kunt de dummy module kiezen om alle mail instellingen " +"ongewijzigd te laten." + +#: ihtml/themes/default/setup_step4.tpl:84 +msgid "Mail method" +msgstr "Mail methode" + +#: ihtml/themes/default/setup_step4.tpl:95 +#: ihtml/themes/altlinux/setup_step4.tpl:56 +msgid "Check" +msgstr "Controleer" + +#: ihtml/themes/default/setup_introduction.tpl:1 +#: ihtml/themes/altlinux/setup_introduction.tpl:1 +msgid "Welcome to the GOsa setup!" +msgstr "Welkom bij het GOsa installatie programma!" + +#: ihtml/themes/default/setup_introduction.tpl:4 +#: ihtml/themes/altlinux/setup_introduction.tpl:4 +msgid "" +"It looks like you're calling GOsa for the first time - no configuration was " +"found. This setup like script will try to aid you in creating a working " +"configuration by performing three major steps: first we'll check the PHP " +"installation for required modules, than we're going to check for optional/" +"needed programms and after you've provided basic informations for your LDAP " +"connectivity, we're going to check your LDAP setup." +msgstr "" +"Het ziet er naar uit dat u GOsa voor de eerste keer aanroept - er is geen " +"configuratie gevonden. Dit setup-achtige script zal proberen u te helpen bij " +"het maken van een werkende configuratie door drie belangrijke stappen uit te " +"voeren: Eerst zal de PHP installatie gecontroleerd worden op vereiste " +"modules, dan zal er gecontroleerd worden op optionele/benodigde programma's " +"en nadat u enige basis informatie verschaft heeft voor de LDAP verbinding " +"zal de LDAP installatie gecontroleerd worden." + +#: ihtml/themes/altlinux/setup_step2.tpl:11 +msgid "" +"We've inspected the webserver side now. Your setup seems to fit GOsa's " +"needs. Lets go for the GOsa configuration part now..." +msgstr "" +"De webserver kant is nu gecontroleerd. Uw installatie is geschikt voor GOsa. " +"Start van de GOsa configuratie..." + +#: ihtml/themes/altlinux/setup_step3.tpl:7 +msgid "Please enter the server URI" +msgstr "Geef a.u.b. de server URI op" + +#: ihtml/themes/altlinux/setup_step4.tpl:14 +msgid "" +"Finally, you need to specify parameters to access the LDAP server. GOsa " +"always acts as admin and manages access rights internally. This is a " +"workaround till OpenLDAP's in directory ACI's are fully implemented. For " +"this to work, we need the admin DN and the corresponding password." +msgstr "" +"Tot slot moet u parameters opgeven om de LDAP server te benaderen. GOsa " +"werkt altijd als een beheerder en verzorgt het toegangsbeheer intern. Dit is " +"een tijdelijke oplossing totdat directory ACIs volledig geïmplementeerd zijn " +"in OpenLDAP. Om dit te kunnen laten werken is een beheerders DN en het " +"bijbehorende wachtwoord nodig." + +#: ihtml/themes/classic/islocked.tpl:9 +msgid "" +"If this is lock detection is false, the other person has obviously closed " +"the webbrowser during the edit operation. You may delete the lockfile in " +"this case by pressing the Remove button." +msgstr "" +"Indien deze blokkeer detectie foutief is dan heeft de andere persoon de " +"webbrowser afgesloten tijdens de bewerking. U kunt de blokkade in dit geval " +"verwijderen door de Verwijderen knop te gebruiken." + +#: include/class_mail-methods-cyrus.inc:44 +msgid "" +"Warning: IMAP Server cannot be reached! If you save this account, some mail " +"settings will not be stored on your server!" +msgstr "" +"Waarschuwing: De IMAP server kan niet bereikt worden! Indien u dit account " +"bewaart dan zullen sommige mail instellingen niet opgeslagen worden op de " +"mail server!" + +#: include/class_mail-methods-cyrus.inc:107 +#, php-format +msgid "Can't create IMAP mailbox. Server says '%s'." +msgstr "Kan de IMAP mailbox niet aanmaken. De IMAP server meldt: '%s'." + +#: include/class_mail-methods-cyrus.inc:123 +#, php-format +msgid "Can't write IMAP quota. Server says '%s'." +msgstr "" +"Kan de IMAP quota instellingen niet wegschrijven. De IMAP server meldt: '%s'." + +#: include/class_mail-methods-cyrus.inc:134 +msgid "" +"Warning: imap_getacl is not implemented, wouldn't modify acl informations." +msgstr "" +"Waarschuwing: De PHP functie 'imap_get_acl' is niet voorhanden - " +"toegangsbeheer informatie zal niet veranderd worden." + +#: include/class_mail-methods-cyrus.inc:169 +msgid "Warning: imap_getacl is not available, can't get imap permissions!" +msgstr "" +"Waarschuwing: De PHP functie 'imap_get_acl' is niet voorhanden. Imap rechten " +"kunnen niet opgehaald worden!" + +#: include/class_mail-methods-cyrus.inc:191 +#, php-format +msgid "Can't remove IMAP mailbox. Server says '%s'." +msgstr "Kan de IMAP mailbox niet verwijderen. De server meldt: '%s'." + +#: include/class_mail-methods-cyrus.inc:219 +#, php-format +msgid "Can't log into SIEVE server. Server says '%s'." +msgstr "Kan niet op de SIEVE server inloggen. De server meldt: '%s'." + +#: include/class_mail-methods-cyrus.inc:232 +#, php-format +msgid "Can't get sieve script. Server says '%s'." +msgstr "Kan het SIEVE script niet ophalen. De server meldt: '%s'." + +#: include/class_mail-methods-cyrus.inc:303 +#, php-format +msgid "Can't send sieve script. Server says '%s'." +msgstr "Kan het SIEVE script niet versturen. De server meldt: '%s'." + +#: include/class_mail-methods-cyrus.inc:307 +#, php-format +msgid "Can't activate GOsa sieve script. Server says '%s'." +msgstr "Kan het GOsa SIEVE script niet activeren. De server meldt: '%s'." + +#: include/class_pluglist.inc:98 +msgid "" +"Your gosa.conf information has changed partly. Please convert it using the " +"contributed script fix_config.sh!" +msgstr "" +"Uw gosa.conf is gedeeltelijk veranderd. Converteer het a.u.b. met het " +"meegeleverde script fix_config.sh!" + +#: include/class_password-methods-kerberos.inc:43 +msgid "" +"Warning: Can't set kerberos password. Your PHP version has no kerberos " +"support, password has not been changed." +msgstr "" +"Waarschuwing: Kan het kerberos wachtwoord niet instellen. Uw PHP versie " +"heeft geen kerberos ondersteuning. Wachtwoord is niet veranderd." + +#: include/class_password-methods-kerberos.inc:52 +msgid "Kerberos database communication failed!" +msgstr "De kerberos database communicatie is mislukt!" + +#: include/class_password-methods-kerberos.inc:59 +msgid "Changing password in kerberos database failed!" +msgstr "Het veranderen van het wachtwoord in de kerberos database is mislukt!" + +#: include/functions.inc:267 +#, php-format +msgid "Error when connecting the LDAP. Server said '%s'." +msgstr "Fout bij het verbinden met de LDAP server. De server meldt: '%s'." + +#: include/functions.inc:288 +#, php-format +msgid "User login failed. LDAP server said '%s'." +msgstr "Gebruikers inlog mislukt. De LDAP server meldt: '%s'." + +#: include/functions.inc:308 +msgid "Username / UID is not unique. Please check your LDAP database." +msgstr "Gebruikersnaam / UID is niet uniek. Controleer uw LDAP database a.u.b." + +#: include/functions.inc:346 +msgid "" +"Error while adding a lock. Parameters are not set correctly, please check " +"the source!" +msgstr "" +"Fout bij het plaatsen van een blokkade. Parameters zijn niet goed ingesteld. " +"Controleer de bron!" + +#: include/functions.inc:356 +#, php-format +msgid "" +"Can't set locking information in LDAP database. Please check the 'config' " +"entry in gosa.conf! LDAP server says '%s'." +msgstr "" +"Kan de blokkeer informatie niet instellen in de LDAP database. Controleer a." +"u.b. de 'config' regel in gosa.conf! De LDAP server meldt: '%s'." + +#: include/functions.inc:371 +#, php-format +msgid "Adding a lock failed. LDAP server says '%s'." +msgstr "Plaatsen van een blokkade mislukt. De LDAP server meldt: '%s'." + +#: include/functions.inc:397 +#, php-format +msgid "Removing a lock failed. LDAP server says '%s'." +msgstr "Verwijderen van een blokkade mislukt. De LDAP server meldt: '%s'." + +#: include/functions.inc:427 +msgid "" +"Getting the lock from LDAP failed. Parameters are not sed correctly, please " +"check the source!" +msgstr "" +"Ophalen van de blokkade uit de LDAP database is mislukt. Parameters zijn " +"niet goed ingesteld. Controleer de bron!" + +#: include/functions.inc:437 +msgid "" +"Can't get locking information in LDAP database. Please check the 'config' " +"entry in gosa.conf!" +msgstr "" +"Kan de blokkade informatie niet ophalen uit de LDAP database. Controleer a.u." +"b. de 'config' regel in gosa.conf!" + +#: include/functions.inc:445 +msgid "" +"Found multiple locks for object to be locked. This should not be possible - " +"cleaning up multiple references." +msgstr "" +"Er zijn meerdere blokkades voor het te blokkeren object gevonden. Dat zou " +"niet mogelijk moeten zijn. Meervoudige verwijzingen worden opgeschoond." + +#: include/functions.inc:517 +#, php-format +msgid "The size limit of %d entries is exceed!" +msgstr "De hoeveelheidslimiet van %d invoeren is overschreden!" + +#: include/functions.inc:519 +#, php-format +msgid "" +"Set the new size limit to %s and show me this message if the limit still " +"exceeds" +msgstr "" +"Stel de nieuwe hoeveelheidslimiet in op %s en toon me dit bericht indien de " +"limiet nog steeds overschreden wordt." + +#: include/functions.inc:531 +msgid "Configure" +msgstr "Instellen" + +#: include/functions.inc:536 +msgid "incomplete" +msgstr "onvolledig" + +#: include/functions.inc:919 +#, php-format +msgid "" +"You're going to edit the LDAP entry '%s' which appears to be used by '%s'. " +"Please contact the person in order to clarify proceedings." +msgstr "" +"U gaat de LDAP invoer '%s' bewerken, welke in gebruikt lijkt te zijn door " +"gebruiker '%s'. Neem a.u.b. contact op met deze persoon om eea kort te " +"sluiten." + +#: include/functions.inc:1018 +msgid "LDAP error:" +msgstr "LDAP fout:" + +#: include/functions.inc:1190 plugins/admin/groups/mail_admins.tpl:37 +#: plugins/admin/groups/application_options.tpl:8 +#: plugins/gofax/faxaccount/lists.tpl:37 +msgid "Apply" +msgstr "Toepassen" + +#: include/functions.inc:1460 +msgid "*ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" +msgstr "*ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" + +#: include/class_config.inc:69 +#, php-format +msgid "XML error in gosa.conf: %s at line %d" +msgstr "XML fout in gosa.conf: %s op regel %d" + +#: include/class_config.inc:426 +msgid "SID and/or RIDBASE missing in your configuration!" +msgstr "SID en/of RIDBASE ontbreken in uw configuratie!" + +#: include/class_plugin.inc:180 +msgid "This 'dn' has no account extensions." +msgstr "Deze 'dn' heeft geen account extensies." + +#: include/class_plugin.inc:185 +msgid "This is an empty plugin." +msgstr "Dit is een lege module." + +#: include/class_plugin.inc:386 +#, php-format +msgid "" +"Command '%s', specified as POSTCREATE for plugin '%s' doesn't seem to exist." +msgstr "" +"Het commando '%s' dat gespecificeerd is als POSTCREATE voor module '%s' " +"bestaat niet." + +#: include/class_plugin.inc:412 +#, php-format +msgid "" +"Command '%s', specified as POSTMODIFY for plugin '%s' doesn't seem to exist." +msgstr "" +"Het commando '%s' dat gespecificeerd is als POSTMODIFY voor module '%s' " +"bestaat niet." + +#: include/class_plugin.inc:438 +#, php-format +msgid "" +"Command '%s', specified as POSTREMOVE for plugin '%s' doesn't seem to exist." +msgstr "" +"Het commando '%s' dat gespecificeerd is als POSTREMOVE voor module '%s' " +"bestaat niet." + +#: include/version.inc:15 +#, php-format +msgid "You are currently using GOsa version %s (CVS checkout from %s)" +msgstr "U gebruikt momenteel GOsa versie %s (CVS extractie van %s)" + +#: include/class_password-methods-sha.inc:50 +msgid "Can't use sha for encryption, missing function sha1 / mhash / crypt" +msgstr "Kan SHA niet gebruiken voor encryptie. Functie sha1 / mhash / crypt ontbreekt." + +#: include/class_ldap.inc:398 +#, php-format +msgid "" +"Autocreation of type '%s' is currently not supported. Please report to the " +"GOsa team." +msgstr "" +"Automatische aanmaak van object type '%s' wordt momenteel niet ondersteund. " +"Rapporteer dit a.u.b. aan het GOsa team." + +#: include/class_ldap.inc:630 +#, php-format +msgid "" +"This is not a valid DN: '%s'. A block for import should begin with 'dn: ...' " +"in line %s" +msgstr "" +"Dit is geen geldige DN: '%s'. Een blok dat geïmporteerd wordt, dient te " +"beginnen met 'dn: ...' op regel %s" + +#: include/class_ldap.inc:646 +#, php-format +msgid "The dn: '%s' (from line %s) already exists in the LDAP database." +msgstr "De dn: '%s' (op regel %s) bestaat al in de LDAP database." + +#: include/class_ldap.inc:661 +#, php-format +msgid "Error while importing dn: '%s', please check your LDIF from line %s on!" +msgstr "" +"Fout bij het importeren van dn: '%s', controleer uw LDIF bestand a.u.b. " +"vanaf regel %s!" + +#: include/class_password-methods-ssha.inc:51 +msgid "Can't use ssha for encryption. (Missing function mhash / sha1)" +msgstr "Kan SSHA niet gebruiken voor encryptie. (Ontbrekende functie mhash / sha1)" + +#: include/class_password-methods.inc:169 +#, php-format +msgid "Setting the password failed. LDAP server says '%s'." +msgstr "Instellen van het wachtwoord is mislukt. De LDAP server meldt: '%s'." + +#: include/class_password-methods.inc:188 +msgid "" +"Setting for SMBHASH in gosa.conf is incorrect! Can't change Samba password." +msgstr "" +"De instelling voor 'SMBHASH' in /etc/gosa/gosa.conf is niet correct. Kan het " +"samba wachtwoord niet veranderen." + +#: include/setup_checks.inc:78 +msgid "Can't bind to LDAP. No schema check possible!" +msgstr "Kan niet verbinden met de LDAP server. Schema controle is onmogelijk!" + +#: include/setup_checks.inc:87 include/setup_checks.inc:96 +msgid "Can't get schema information from server. No schema check possible!" +msgstr "" +"Kan de schema informatie niet ophalen van de server. Schema controle is " +"onmogelijk!" + +#: include/setup_checks.inc:116 +#, php-format +msgid "" +"Optional objectclass '%s' required by plugin '%s' is not present in LDAP " +"setup" +msgstr "" +"De optionele objectklasse '%s' die benodigd is door module '%s' is niet " +"aanwezig in de LDAP configuratie" + +#: include/setup_checks.inc:119 +#, php-format +msgid "" +"Optional objectclass '%s' required by plugin '%s' does not have version %s" +msgstr "" +"De optionele objectklasse '%s' die benodigd is door module '%s' heeft niet " +"versienummer %s" + +#: include/setup_checks.inc:131 +#, php-format +msgid "Required objectclass '%s' is not present in LDAP setup" +msgstr "Vereiste objectklasse '%s' is niet voorhanden in de LDAP configuratie" + +#: include/setup_checks.inc:134 +#, php-format +msgid "Required objectclass '%s' does not have version %s" +msgstr "Vereiste objectklasse '%s' heeft niet versienummer %s" + +#: include/setup_checks.inc:142 +msgid "SAMBA 3 support disabled, no schema seems to be installed" +msgstr "" +"SAMBA 3 ondersteuning is uitgeschakeld. Het LDAP schema is niet " +"geïnstalleerd." + +#: include/setup_checks.inc:144 +msgid "" +"SAMBA 3 support enabledgosa+samba3.schema" +msgstr "" +"SAMBA 3 ondersteuning is ingeschakeldgosa+samba3." +"schema" + +#: include/setup_checks.inc:147 +msgid "SAMBA 2 support disabled, no schema seems to be installed" +msgstr "" +"SAMBA 2 ondersteuning is uitgeschakeld. Het LDAP schema is niet " +"geïnstalleerd." + +#: include/setup_checks.inc:149 +msgid "SAMBA 2 support enabledsamba.schema" +msgstr "" +"SAMBA 2 ondersteuning is ingeschakeldsamba." +"schema" + +#: include/setup_checks.inc:153 +msgid "Support for pureftp disabled, no schema seems to be installed" +msgstr "" +"Ondersteuning voor PureFtp is uitgeschakeld. Het LDAP schema is niet " +"geïnstalleedn" + +#: include/setup_checks.inc:155 +msgid "" +"Support for pureftp enabledpureftpd.schema" +msgstr "" +"Ondersteuning voor PureFtp is ingeschakeld" +"pureftpd.schema" + +#: include/setup_checks.inc:158 +msgid "Support for WebDAV disabled, no schema seems to be installed" +msgstr "" +"Ondersteuning voor WebDAV is uitgeschakeld. Het LDAP schema is niet " +"geïnstalleerd" + +#: include/setup_checks.inc:160 +msgid "" +"Support for WebDAV enabledgosa+samba3.schema" +msgstr "" +"Ondersteuning voor WebDAV is ingeschakeldgosa" +"+samba3.schema" + +#: include/setup_checks.inc:163 +msgid "" +"Support for phpgroupware disabled, no schema seems to be installed" +msgstr "" +"Ondersteuning voor phpgroupware is uitgeschakeld. Het LDAP schema is " +"niet geïnstalleerd." + +#: include/setup_checks.inc:165 +msgid "" +"Support for phpgroupware enabledphpgwaccount." +"schema" +msgstr "" +"Ondersteuning voor phpgroupware is ingeschakeldphpgwaccount.schema" + +#: include/setup_checks.inc:168 +msgid "Support for gofon disabled, no schema seems to be installed" +msgstr "" +"Ondersteuning voor gofon is uitgeschakeld. Het LDAP schema is niet " +"geïnstalleerd." + +#: include/setup_checks.inc:170 +msgid "Support for gofon enabledgofon.schema" +msgstr "" +"Ondersteuning voor gofon is ingeschakeldgofon." +"schema" + +#: include/setup_checks.inc:182 +msgid "OK" +msgstr "OK" + +#: include/setup_checks.inc:185 +msgid "Ignored" +msgstr "Genegeerd" + +#: include/setup_checks.inc:187 +msgid "Failed" +msgstr "Mislukt" + +#: include/setup_checks.inc:203 +msgid "PHP setup inspection" +msgstr "PHP configuratie inspectie" + +#: include/setup_checks.inc:204 +msgid "Checking for PHP version (>=4.1.0)" +msgstr "Controle op PHP versie (>=4.1.0)" + +#: include/setup_checks.inc:205 +msgid "" +"PHP must be of version 4.1.0 or above for some functions and known bugs in " +"PHP language." +msgstr "" +"PHP moet minimaal versienummer 4.1.0 hebben. GOsa gebruikt bepaalde " +"functionaliteit die in voorgaande versies niet goed of helemaal niet " +"voorhanden is." + +#: include/setup_checks.inc:208 +msgid "Checking if register_globals is set to 'off'" +msgstr "Controle of 'register_globals' uitstaat" + +#: include/setup_checks.inc:209 +msgid "" +"register_globals is a PHP mechanism to register all global varibales to be " +"accessible from scripts without changing the scope. This may be a security " +"risk. GOsa will run in both modes." +msgstr "" +"'register_globals' is een PHP mechanisme om alle globale variabelen te " +"registreren zodat deze toegankelijk zijn voor scripts zonder dat de scope " +"veranderd hoeft te worden. Dit is een veiligheidsrisico. GOsa zal in beide " +"modi draaien." + +#: include/setup_checks.inc:212 +msgid "Checking for ldap module" +msgstr "Zoeken naar de LDAP module" + +#: include/setup_checks.inc:213 +msgid "This is the main module used by GOsa and therefore really required." +msgstr "Dit is hoofd module die GOsa nodig heeft en is daarom noodzakelijk." + +#: include/setup_checks.inc:216 +msgid "Checking for gettext support" +msgstr "Zoeken naar gettext ondersteuning" + +#: include/setup_checks.inc:217 +msgid "Gettext support is required for internationalized GOsa." +msgstr "" +"Gettext ondersteuning is vereist voor ondersteuning van meerdere talen in " +"GOsa." + +#: include/setup_checks.inc:219 +msgid "Checking for mhash module" +msgstr "Zoeken naar de mhash module" + +#: include/setup_checks.inc:220 +msgid "" +"To use SSHA encryption, you'll need this module. If you are just using crypt " +"or md5 encryption, ignore this message. GOsa will run without it." +msgstr "" +"Om SSHA encryptie te gebruiken heeft u deze module nodig. U kunt deze " +"melding negeren indien u gewoon crypt of md5 encryptie gebruikt." + +#: include/setup_checks.inc:223 +msgid "Checking for imap module" +msgstr "Zoeken naar de IMAP module" + +#: include/setup_checks.inc:224 +msgid "" +"The IMAP module is needed to communicate with the IMAP server. It gets " +"status informations, creates and deletes mail users." +msgstr "" +"De IMAP module is benodigd om met de IMAP server te communiceren. Het " +"ontvangt status informatie, maakt mail gebruikers aan en verwijdert mail " +"gebruikers." + +#: include/setup_checks.inc:226 +msgid "Checking for getacl in imap" +msgstr "Controle op getacl in imap" + +#: include/setup_checks.inc:227 +msgid "" +"The getacl support is needed for shared folder permissions. The standard " +"IMAP module is not capable of reading acl's. You need a recend PHP version " +"for this feature." +msgstr "" +"De getacl ondersteuning is nodig voor gedeelde map permissies. De standaard " +"IMAP module is niet in staat om acl's te lezen. U heeft een recente PHP " +"versie nodig voor deze mogelijkheid." + +#: include/setup_checks.inc:229 +msgid "Checking for mysql module" +msgstr "Zoeken naar MySQL module" + +#: include/setup_checks.inc:230 +msgid "MySQL support is needed for reading GOfax reports from databases." +msgstr "" +"MySQL ondersteuning is nodig voor het lezen van GOfax rapporten uit " +"databases." + +#: include/setup_checks.inc:232 +msgid "Checking for cups module" +msgstr "Zoeken naar CUPS module" + +#: include/setup_checks.inc:233 +msgid "" +"In order to read available printers from IPP protocol instead of printcap " +"files, you've to install the CUPS module." +msgstr "" +"U moet de CUPS module installeren om beschikbare printers via het IPP " +"protocol te kunnen lezen i.p.v. via printcap bestanden." + +#: include/setup_checks.inc:235 +msgid "Checking for kadm5 module" +msgstr "Zoeken naar kadm5 module" + +#: include/setup_checks.inc:236 +msgid "" +"Managing users in kerberos requires the kadm5 module which is downloadable " +"via PEAR network." +msgstr "" +"Het beheren van gebruikers in kerberos vereist de kadm5 module welke " +"via het PEAR netwerk te downloaden is." + +#: include/setup_checks.inc:245 +msgid "Checking for some additional programms" +msgstr "Zoeken naar enkele additionele programma's" + +#: include/setup_checks.inc:254 +msgid "Checking for ImageMagick (>=5.4.0)" +msgstr "Zoeken naar ImageMagick (>=5.4.0)" + +#: include/setup_checks.inc:255 +msgid "" +"ImageMagick is used to convert user supplied images to fit the suggested " +"size and the unified JPEG format." +msgstr "" +"ImageMagick wordt gebruikt om gebruikers aangeleverde plaatjes te laten " +"passen binnen de voorgestelde grootte en het uniforme JPEG formaat." + +#: include/setup_checks.inc:258 +msgid "Checking imagick module for PHP" +msgstr "Zoeken naar de imagick module voor PHP" + +#: include/setup_checks.inc:259 +msgid "" +"Imagick is used to convert user supplied images to fit the suggested size " +"and the unified JPEG format from PHP script." +msgstr "" +"Imagick wordt gebruikt om gebruikers aangeleverde plaatjes te laten passen " +"binnen de voorgestelde grootte en het uniforme JPEG formaat." + +#: include/setup_checks.inc:266 +msgid "Checking for fping utility" +msgstr "Zoeken naar het fping programma" + +#: include/setup_checks.inc:267 +msgid "" +"The fping utility is only used if you've got a thin client based terminal " +"environment running." +msgstr "" +"Het fping programma wordt alleen gebruikt indien u een thin client " +"gebaseerde terminal omgeving heeft draaien." + +#: include/setup_checks.inc:282 +msgid "Checking for a way to generate LM/NT password hashes" +msgstr "Zoeken naar een manier om LM/NT wachtwoord hashes te genereren" + +#: include/setup_checks.inc:283 +msgid "" +"In order to use SAMBA 2/3, you've to install some additional packages to " +"generate password hashes." +msgstr "" +"Om Samba 2.x/3.x te gebruiken moet u enkele additionele pakketten " +"installeren om wachtwoord hashes te genereren" + +#: include/setup_checks.inc:574 +msgid "You've to specify an ldap server before continuing!" +msgstr "U moet een LDAP server specificeren voordat u verder gaat!" + +#: include/setup_checks.inc:584 +msgid "" +"Can't connect to the specified LDAP server! Please make sure that is " +"reachable for GOsa." +msgstr "" +"Kan niet met de opgegeven LDAP server verbinden! Verzeker a.u.b. dat deze " +"bereikbaar is voor GOsa." + +#: include/setup_checks.inc:601 +msgid "" +"Can't bind to the specified LDAP server! Please make sure that is reachable " +"for GOsa." +msgstr "" +"De aanmelding op de LDAP server is mislukt. Controleer a.u.b. dat deze " +"bereikbaar is voor GOsa." + +#: include/setup_checks.inc:707 +msgid "" +"Bind to server successfull, but the server seems to be completly empty, " +"please check all informations twice" +msgstr "" +"Verbinding met de server is succesvol uitgevoerd, maar deze lijkt geen " +"informatie te bevatten. Controleer alle informatie a.u.b. nogmaals." + +#: include/setup_checks.inc:746 +#, php-format +msgid "" +"You're missing the required attribute '%s' from this formular. Please " +"complete!" +msgstr "Het vereiste atribuut '%s' uit dit formulier ontbreekt. Maak a.u.b. uw invoer af!" + +#: include/setup_checks.inc:784 +#, php-format +msgid "Can't log into LDAP server. Reason was: %s." +msgstr "De aanmelding op de LDAP server is mislukt. De reden was: '%s'." + +#: plugins/admin/users/password.tpl:2 +msgid "" +"To change the user password use the fields below. The changes take effect " +"immediately. Please memorize the new password, because the user would't be " +"able to login without it." +msgstr "" +"Gebruik de velden hieronder om het gebruikers wachtwoord te veranderen. De " +"veranderingen worden onmiddelijk doorgevoerd. Onthoud het nieuwe wachtwoord " +"a.u.b. aangezien de gebruiker niet in kan loggen zonder dit wachtwoord." + +#: plugins/admin/users/password.tpl:6 +#: plugins/personal/password/password.tpl:10 +msgid "" +"Changing the password impinges on your authentification on mail, proxy, " +"samba and unix services." +msgstr "" +"Het veranderen van het wachtwoord is van toepassing op mail, proxy, samba en " +"unix diensten" + +#: plugins/admin/users/password.tpl:11 plugins/admin/systems/password.tpl:11 +#: plugins/personal/password/password.tpl:20 +#: plugins/personal/generic/password.tpl:7 +msgid "New password" +msgstr "Nieuw wachtwoord" + +#: plugins/admin/users/password.tpl:15 plugins/admin/systems/password.tpl:16 +#: plugins/personal/password/password.tpl:25 +#: plugins/personal/generic/password.tpl:11 +msgid "Repeat new password" +msgstr "Herhaal het nieuwe wachtwoord" + +#: plugins/admin/users/password.tpl:21 plugins/admin/users/headpage.tpl:19 +#: plugins/admin/systems/password.tpl:25 plugins/admin/systems/headpage.tpl:18 +#: plugins/personal/password/password.tpl:34 +#: plugins/personal/generic/password.tpl:17 +msgid "Set password" +msgstr "Wachtwoord instellen" + +#: plugins/admin/users/headpage.tpl:6 +msgid "List of users" +msgstr "Lijst met gebruikers" + +#: plugins/admin/users/headpage.tpl:15 plugins/admin/groups/headpage.tpl:15 +#: plugins/admin/systems/headpage.tpl:15 +#: plugins/admin/departments/headpage.tpl:15 +#: plugins/admin/ogroups/headpage.tpl:15 +#: plugins/admin/applications/headpage.tpl:15 +#: plugins/gofax/blocklists/headpage.tpl:15 +msgid "New" +msgstr "Nieuw" + +#: plugins/admin/users/headpage.tpl:16 +msgid "New template" +msgstr "Nieuw sjabloon" + +#: plugins/admin/users/headpage.tpl:17 plugins/admin/groups/headpage.tpl:16 +#: plugins/admin/systems/headpage.tpl:16 +#: plugins/admin/departments/headpage.tpl:16 +#: plugins/admin/ogroups/headpage.tpl:16 +#: plugins/admin/applications/headpage.tpl:16 +#: plugins/gofax/faxaccount/main.inc:97 +#: plugins/gofax/faxaccount/generic.tpl:88 +#: plugins/gofax/faxaccount/generic.tpl:94 +#: plugins/gofax/blocklists/headpage.tpl:16 +#: plugins/gofon/phoneaccount/main.inc:112 +#: plugins/addons/logview/contents.tpl:60 plugins/personal/mail/main.inc:115 +#: plugins/personal/posix/main.inc:122 plugins/personal/samba/main.inc:115 +#: plugins/personal/generic/main.inc:170 +#: plugins/personal/connectivity/main.inc:127 +msgid "Edit" +msgstr "Bewerken" + +#: plugins/admin/users/headpage.tpl:18 plugins/admin/users/remove.tpl:15 +#: plugins/admin/groups/headpage.tpl:17 plugins/admin/groups/mail.tpl:53 +#: plugins/admin/groups/mail.tpl:99 plugins/admin/groups/remove.tpl:15 +#: plugins/admin/groups/generic.tpl:89 plugins/admin/systems/startup.tpl:60 +#: plugins/admin/systems/startup.tpl:73 plugins/admin/systems/startup.tpl:92 +#: plugins/admin/systems/headpage.tpl:17 plugins/admin/systems/remove.tpl:15 +#: plugins/admin/departments/headpage.tpl:17 +#: plugins/admin/departments/remove.tpl:15 +#: plugins/admin/ogroups/headpage.tpl:17 plugins/admin/ogroups/remove.tpl:15 +#: plugins/admin/ogroups/generic.tpl:39 +#: plugins/admin/applications/headpage.tpl:17 +#: plugins/admin/applications/remove.tpl:14 +#: plugins/gofax/faxaccount/lists.tpl:12 +#: plugins/gofax/faxaccount/generic.tpl:75 +#: plugins/gofax/blocklists/headpage.tpl:17 +#: plugins/gofax/blocklists/remove.tpl:15 +#: plugins/gofax/blocklists/generic.tpl:61 +#: plugins/gofon/phoneaccount/generic.tpl:47 +#: plugins/addons/addressbook/remove.tpl:15 +#: plugins/personal/mail/generic.tpl:57 plugins/personal/mail/generic.tpl:125 +#: plugins/personal/posix/generic.tpl:64 +#: plugins/personal/posix/generic.tpl:124 +#: plugins/personal/samba/samba3.tpl:289 +#: plugins/personal/connectivity/kolab.tpl:19 +msgid "Delete" +msgstr "Verwijderen" + +#: plugins/admin/users/headpage.tpl:26 plugins/admin/groups/headpage.tpl:25 +#: plugins/admin/systems/headpage.tpl:25 +#: plugins/admin/departments/headpage.tpl:24 +#: plugins/admin/ogroups/headpage.tpl:25 +#: plugins/admin/applications/headpage.tpl:24 +#: plugins/gofax/blocklists/headpage.tpl:24 +#: plugins/gofax/blocklists/generic.tpl:64 +#: plugins/addons/addressbook/contents.tpl:33 +msgid "Information" +msgstr "Informatie" + +#: plugins/admin/users/headpage.tpl:30 +msgid "" +"This menu provides the functionality to create, edit or delete selected " +"users. Having a great number of users, you may want to use the range " +"seletors on top of the user list." +msgstr "" +"Dit menu levert de functionaliteit om geselecteerde gebruikers aan te maken, " +"te veranderen of te verwijderen. Indien u veel gebruikers heeft is het aan " +"te raden de selectie mogelijkheden te gebruiken." + +#: plugins/admin/users/headpage.tpl:33 +msgid "" +"-Edit- and -New user- execute an assistant to aid you in managing your " +"account informations. -Delete- will ask for confirmation before deleting the " +"users from the LDAP server." +msgstr "" +"-Bewerken- en -Nieuwe gebruiker- starten een wizard die u zal helpen bij het " +"beheren van account informatie. -Verwijderen- zal om bevestiging vragen " +"voordat er gebruikers uit de LDAP database verwijderd worden." + +#: plugins/admin/users/headpage.tpl:38 plugins/admin/groups/headpage.tpl:37 +#: plugins/admin/groups/group_objects.tpl:20 +#: plugins/admin/systems/headpage.tpl:37 +#: plugins/admin/departments/headpage.tpl:36 +#: plugins/admin/ogroups/headpage.tpl:37 +#: plugins/admin/ogroups/ogroup_objects.tpl:20 +#: plugins/admin/applications/headpage.tpl:36 +#: plugins/gofax/faxaccount/locals.tpl:19 +#: plugins/gofax/blocklists/headpage.tpl:36 +#: plugins/addons/addressbook/contents.tpl:58 +#: plugins/personal/posix/posix_groups.tpl:20 +msgid "Filters" +msgstr "Filters" + +#: plugins/admin/users/headpage.tpl:47 +msgid "Select to see template pseudo users" +msgstr "Selecteer om sjabloon pseudo gebruikers te zien" + +#: plugins/admin/users/headpage.tpl:47 +msgid "Show templates" +msgstr "Toon sjablonen" + +#: plugins/admin/users/headpage.tpl:48 +msgid "Select to see users that have only a GOsa object" +msgstr "Selecteer om gebruikers te zien die alleen een GOsa object hebben" + +#: plugins/admin/users/headpage.tpl:48 +msgid "Show functional users" +msgstr "Toon functionele gebruikers" + +#: plugins/admin/users/headpage.tpl:49 +msgid "Select to see users that have posix settings" +msgstr "Selecteer om gebruikers te zien die POSIX instellingen hebben" + +#: plugins/admin/users/headpage.tpl:49 +msgid "Show unix users" +msgstr "Toon UNIX gebruikers" + +#: plugins/admin/users/headpage.tpl:50 +msgid "Select to see users that have mail settings" +msgstr "Selecteer om gebruikers te zien die mail instellingen hebben" + +#: plugins/admin/users/headpage.tpl:50 +msgid "Show mail users" +msgstr "Toon mail gebruikers" + +#: plugins/admin/users/headpage.tpl:51 +msgid "Select to see users that have samba settings" +msgstr "Selecteer om gebruikers te zien die samba instellingen hebben" + +#: plugins/admin/users/headpage.tpl:51 +msgid "Show samba users" +msgstr "Toon samba gebruikers" + +#: plugins/admin/users/headpage.tpl:52 +msgid "Select to see users that have proxy settings" +msgstr "Selecteer om gebruikers te zien die proxy instellingen hebben" + +#: plugins/admin/users/headpage.tpl:52 +msgid "Show proxy users" +msgstr "Toon proxy gebruikers" + +#: plugins/admin/users/headpage.tpl:53 +msgid "Select to see users that have ftp settings" +msgstr "Selecteer om gebruikers te zien die ftp instellingen hebben" + +#: plugins/admin/users/headpage.tpl:53 +msgid "Show FTP users" +msgstr "Toon Ftp gebruikers" + +#: plugins/admin/users/headpage.tpl:54 +msgid "Select to see users that have FAX settings" +msgstr "Selecteer om gebruikers te zien die Fax instellingen hebben" + +#: plugins/admin/users/headpage.tpl:54 +msgid "Show FAX users" +msgstr "Toon Fax gebruikers" + +#: plugins/admin/users/headpage.tpl:57 plugins/admin/groups/headpage.tpl:53 +msgid "Dive into LDAP subtrees when searching" +msgstr "Ga LDAP subtrees in bij het zoeken" + +#: plugins/admin/users/headpage.tpl:57 plugins/admin/groups/headpage.tpl:53 +msgid "Search in subtrees" +msgstr "Zoek in subtrees" + +#: plugins/admin/users/headpage.tpl:60 +#: plugins/admin/groups/group_objects.tpl:29 +msgid "Display users of department" +msgstr "Toon gebruikers van afdeling" + +#: plugins/admin/users/headpage.tpl:61 plugins/admin/groups/headpage.tpl:57 +#: plugins/admin/groups/group_objects.tpl:30 +#: plugins/admin/groups/mail_locals.tpl:30 +#: plugins/admin/systems/headpage.tpl:56 +#: plugins/admin/departments/headpage.tpl:46 +#: plugins/admin/ogroups/headpage.tpl:58 +#: plugins/admin/ogroups/ogroup_objects.tpl:41 +#: plugins/admin/applications/headpage.tpl:46 +#: plugins/gofax/faxaccount/locals.tpl:29 +#: plugins/gofax/blocklists/headpage.tpl:50 +#: plugins/addons/addressbook/contents.tpl:72 +#: plugins/personal/mail/mail_locals.tpl:30 +#: plugins/personal/posix/posix_groups.tpl:37 +#: plugins/personal/posix/trust_machines.tpl:30 +#: plugins/personal/samba/samba3_workstations.tpl:30 +msgid "Choose the department the search will be based on" +msgstr "Selecteer de afdeling waarop de zoekopdracht wordt losgelaten" + +#: plugins/admin/users/headpage.tpl:66 +#: plugins/admin/groups/group_objects.tpl:35 +msgid "Display users matching" +msgstr "Toon overeenkomende gebruikers" + +#: plugins/admin/users/headpage.tpl:67 +#: plugins/admin/groups/group_objects.tpl:36 +msgid "Regular expression for matching user names" +msgstr "Reguliere expressie voor overeenkomende gebruikersnamen" + +#: plugins/admin/users/main.inc:40 plugins/admin/users/main.inc:46 +msgid "User administration" +msgstr "Gebruikers beheer" + +#: plugins/admin/users/remove.tpl:7 +msgid "" +"This includes all account data, system access rules, imap settings, etc. for " +"this user. Please double check if your really want to do this since there is " +"no way for GOsa to get your data back." +msgstr "" +"Dit omvat alle account gegevens, systeem toegangsregels, imap instellingen " +"etc. voor deze gebruiker. Verzeker uzelf hiervan, aangezien er geen " +"mogelijkheid voor GOsa is om deze informatie terug te halen." + +#: plugins/admin/users/remove.tpl:11 plugins/admin/groups/remove.tpl:11 +#: plugins/admin/ogroups/remove.tpl:11 +#: plugins/admin/applications/remove.tpl:10 +#: plugins/gofax/blocklists/remove.tpl:11 +#: plugins/addons/addressbook/remove.tpl:11 +msgid "" +"So - if you're sure - press Delete to continue or Cancel to " +"abort." +msgstr "" +"Indien u zeker bent drukt u dan Verwijderen om door te gaan of " +"Annuleren om te annuleren." + +#: plugins/admin/users/template.tpl:2 +msgid "Creating a new user using templates" +msgstr "Een nieuwe gebruiker aanmaken m.b.v. een sjabloon" + +#: plugins/admin/users/template.tpl:6 +msgid "" +"Creating a new user can be assisted by using templates. Many database " +"records will be filled automatically. Choose none to skip the usage " +"of templates." +msgstr "" +"Het aanmaken van een nieuwe gebruiker kan m.b.v. sjablonen gebeuren. Veel " +"database records zullen dan automatisch gevuld worden. Kies geen om " +"het gebruik van sjablonen over te slaan." + +#: plugins/admin/users/template.tpl:11 +#: plugins/admin/users/class_userManagement.inc:617 +msgid "Template" +msgstr "Sjabloon" + +#: plugins/admin/users/template.tpl:19 +#: plugins/addons/addressbook/address_edit.tpl:20 +#: plugins/addons/addressbook/class_addressbook.inc:463 +#: plugins/addons/addressbook/address_info.tpl:16 +#: plugins/addons/addressbook/contents.tpl:14 +#: plugins/personal/generic/generic.tpl:24 +msgid "Name" +msgstr "Achternaam" + +#: plugins/admin/users/template.tpl:23 +#: plugins/addons/addressbook/address_edit.tpl:20 +#: plugins/addons/addressbook/class_addressbook.inc:463 +#: plugins/personal/generic/generic.tpl:30 +msgid "Given name" +msgstr "Voornaam" + +#: plugins/admin/users/template.tpl:29 plugins/personal/generic/generic.tpl:34 +msgid "Login" +msgstr "Inlognaam" + +#: plugins/admin/users/class_userManagement.inc:25 +msgid "Users" +msgstr "Gebruikers" + +#: plugins/admin/users/class_userManagement.inc:26 +#: plugins/admin/groups/class_groupManagement.inc:26 +#: plugins/admin/systems/class_systemManagement.inc:33 +#: plugins/admin/departments/class_departmentManagement.inc:26 +#: plugins/admin/ogroups/class_ogroupManagement.inc:26 +#: plugins/admin/applications/class_applicationManagement.inc:26 +#: plugins/gofax/reports/class_faxreport.inc:7 +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:7 +#: plugins/gofax/blocklists/class_blocklistManagement.inc:6 +#: plugins/gofon/reports/class_fonreport.inc:7 +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:7 +#: plugins/addons/logview/class_logview.inc:7 +#: plugins/addons/addressbook/class_addressbook.inc:7 +#: plugins/addons/ldapmanager/class_import.inc:7 +#: plugins/addons/ldapmanager/class_export.inc:8 +#: plugins/addons/ldapmanager/class_ldif.inc:8 +#: plugins/addons/ldapmanager/class_csvimport.inc:7 +#: plugins/personal/mail/class_mailAccount.inc:23 +#: plugins/personal/posix/class_posixAccount.inc:17 +#: plugins/personal/samba/class_sambaAccount.inc:25 +#: plugins/personal/password/class_password.inc:6 +#: plugins/personal/generic/class_user.inc:17 +#: plugins/personal/connectivity/class_kolabAccount.inc:6 +#: plugins/personal/connectivity/class_phpgwAccount.inc:6 +#: plugins/personal/connectivity/class_connectivity.inc:16 +#: plugins/personal/connectivity/class_oxchangeAccount.inc:6 +#: plugins/personal/connectivity/class_webdavAccount.inc:7 +#: plugins/personal/connectivity/class_proxyAccount.inc:6 +#: plugins/personal/connectivity/class_pureftpdAccount.inc:7 +msgid "This does something" +msgstr "Dit doet iets" + +#: plugins/admin/users/class_userManagement.inc:157 +#: plugins/admin/users/class_userManagement.inc:208 +msgid "You are not allowed to set this users password!" +msgstr "" +"U heeft geen toestemming om het wachtwoord van deze gebruiker veranderen!" + +#: plugins/admin/users/class_userManagement.inc:174 +#: plugins/personal/password/main.inc:48 plugins/personal/generic/main.inc:84 +msgid "" +"The passwords you've entered as 'New password' and 'Repeated new password' " +"do not match." +msgstr "" +"Het nieuwe wachtwoord en het herhaalde wachtwoord komen niet met elkaar " +"overeen." + +#: plugins/admin/users/class_userManagement.inc:179 +#: plugins/personal/password/main.inc:51 plugins/personal/generic/main.inc:89 +msgid "The password you've entered as 'New password' is empty." +msgstr "Het nieuw ingevoerde wachtwoord is leeg." + +#: plugins/admin/users/class_userManagement.inc:244 +#, php-format +msgid "You're about to delete the user %s." +msgstr "U staat op het punt gebruiker %s te verwijderen." + +#: plugins/admin/users/class_userManagement.inc:250 +#: plugins/admin/users/class_userManagement.inc:278 +msgid "You are not allowed to delete this user!" +msgstr "U heeft geen toestemming om deze gebruiker te verwijderen!" + +#: plugins/admin/users/class_userManagement.inc:368 +#: plugins/admin/ogroups/class_ogroup.inc:202 +msgid "none" +msgstr "geen" + +#: plugins/admin/users/class_userManagement.inc:422 +#: plugins/addons/addressbook/class_addressbook.inc:486 +#: plugins/personal/generic/class_user.inc:851 +msgid "The required field 'Name' is not set." +msgstr "Het vereiste veld 'Achternaam' is leeg." + +#: plugins/admin/users/class_userManagement.inc:425 +#: plugins/addons/addressbook/class_addressbook.inc:490 +#: plugins/personal/generic/class_user.inc:866 +msgid "The required field 'Given name' is not set." +msgstr "Het vereiste veld 'Voornaam' is leeg." + +#: plugins/admin/users/class_userManagement.inc:434 +msgid "A person with the choosen name is already used in this tree." +msgstr "Er bestaat al een persoon met deze naam in deze tree." + +#: plugins/admin/users/class_userManagement.inc:503 +#: plugins/admin/groups/class_groupManagement.inc:257 +#: plugins/admin/systems/class_systemManagement.inc:438 +#: plugins/admin/departments/class_departmentManagement.inc:228 +#: plugins/admin/ogroups/class_ogroupManagement.inc:274 +#: plugins/admin/applications/class_applicationManagement.inc:239 +#: plugins/gofax/faxaccount/main.inc:89 +#: plugins/gofax/blocklists/generic.tpl:74 +#: plugins/gofon/phoneaccount/main.inc:104 plugins/personal/mail/main.inc:104 +#: plugins/personal/posix/main.inc:110 plugins/personal/samba/main.inc:104 +#: plugins/personal/generic/main.inc:158 +#: plugins/personal/generic/generic_certs.tpl:60 +#: plugins/personal/connectivity/main.inc:116 +msgid "Finish" +msgstr "Opslaan" + +#: plugins/admin/groups/application.tpl:4 +msgid "Used applications" +msgstr "Gebruikte programma's" + +#: plugins/admin/groups/application.tpl:10 +msgid "Edit parameters" +msgstr "Parameters bewerken" + +#: plugins/admin/groups/application.tpl:10 +msgid "Edit optional application parameters" +msgstr "Bewerk optionele programma parameters" + +#: plugins/admin/groups/application.tpl:20 +msgid "Available applications" +msgstr "Beschikbare programma's" + +#: plugins/admin/groups/mail_admins.tpl:4 +msgid "Folder administrators" +msgstr "Map beheerders" + +#: plugins/admin/groups/mail_admins.tpl:24 +#: plugins/gofax/faxaccount/lists.tpl:18 +msgid "Select a specific department" +msgstr "Selecteer een specifieke afdeling" + +#: plugins/admin/groups/mail_admins.tpl:30 plugins/admin/groups/acl.tpl:12 +#: plugins/gofax/faxaccount/lists.tpl:25 +msgid "Choose" +msgstr "Kies" + +#: plugins/admin/groups/class_groupGeneric.inc:109 +msgid "Can't find this groups SID in LDAP or in your configuration file!" +msgstr "" +"Kan de SID van deze groep niet vinden in de LDAP database of in uw " +"configuratie bestand." + +#: plugins/admin/groups/class_groupGeneric.inc:141 +msgid "This 'dn' is no group." +msgstr "Deze 'dn' is geen groep." + +#: plugins/admin/groups/class_groupGeneric.inc:252 +msgid "Samba group" +msgstr "Samba groep" + +#: plugins/admin/groups/class_groupGeneric.inc:252 +msgid "Domain admins" +msgstr "Windows beheerders" + +#: plugins/admin/groups/class_groupGeneric.inc:252 +msgid "Domain users" +msgstr "Windows gebruikers" + +#: plugins/admin/groups/class_groupGeneric.inc:253 +msgid "Domain guests" +msgstr "Windows gasten" + +#: plugins/admin/groups/class_groupGeneric.inc:258 +#, php-format +msgid "Special group (%d)" +msgstr "Speciale groep (%d)" + +#: plugins/admin/groups/class_groupGeneric.inc:566 +#: plugins/admin/ogroups/class_ogroup.inc:484 +msgid "You have no permissions to create a group on this 'Base'." +msgstr "U heeft geen toestemming een groep aan te maken onder deze 'Basis'." + +#: plugins/admin/groups/class_groupGeneric.inc:576 +msgid "" +"The field 'Name' contains invalid characters. Lowercase, numbers and dashes " +"are allowed." +msgstr "" +"Het veld 'Naam' bevat ongeldige karakters. Kleine letters, cijfers en " +"liggende streepjes zijn toegestaan." + +#: plugins/admin/groups/class_groupGeneric.inc:587 +#: plugins/admin/groups/class_groupGeneric.inc:594 +msgid "Value specified as 'Name' is already used." +msgstr "De waarde die opgegeven is voor de naam wordt al gebruikt." + +#: plugins/admin/groups/class_groupGeneric.inc:602 +#: plugins/personal/posix/class_posixAccount.inc:833 +msgid "Value specified as 'GID' is not valid." +msgstr "De opgegeven 'GID' waarde is niet geldig." + +#: plugins/admin/groups/class_groupGeneric.inc:605 +#: plugins/personal/posix/class_posixAccount.inc:836 +msgid "Value specified as 'GID' is too small." +msgstr "De opgegeven 'GID' waarde is te klein." + +#: plugins/admin/groups/class_groupGeneric.inc:636 +#: plugins/personal/posix/class_posixAccount.inc:979 +msgid "Too many users, can't allocate a free ID!" +msgstr "" +"Er zitten te veel gebruikers in de database. Kan geen vrij ID toewijzen!" + +#: plugins/admin/groups/class_groupMail.inc:59 +#: plugins/personal/mail/class_mailAccount.inc:79 +#, php-format +msgid "There is no mail method '%s' specified in your gosa.conf available." +msgstr "De mail methode '%s' opgegeven in uw gosa.conf is niet beschikbaar." + +#: plugins/admin/groups/class_groupMail.inc:153 +msgid "read" +msgstr "lezen" + +#: plugins/admin/groups/class_groupMail.inc:154 +msgid "post" +msgstr "post" + +#: plugins/admin/groups/class_groupMail.inc:155 +msgid "external post" +msgstr "externe post" + +#: plugins/admin/groups/class_groupMail.inc:156 +msgid "append" +msgstr "toevoegen" + +#: plugins/admin/groups/class_groupMail.inc:157 +msgid "write" +msgstr "schrijven" + +#: plugins/admin/groups/class_groupMail.inc:179 +msgid "This 'dn' has no valid mail extensions." +msgstr "Deze 'dn' heeft geen geldige mail mogelijkheden." + +#: plugins/admin/groups/class_groupMail.inc:187 +#: plugins/personal/mail/class_mailAccount.inc:197 +msgid "Remove mail account" +msgstr "Mail account verwijderen" + +#: plugins/admin/groups/class_groupMail.inc:188 +#: plugins/personal/mail/class_mailAccount.inc:198 +msgid "" +"This account has mail features enabled. You can disable them by clicking " +"below." +msgstr "" +"Dit account heeft mail mogelijkheden ingeschakeld. U kunt deze uitschakelen " +"door de knop hieronder te gebruiken." + +#: plugins/admin/groups/class_groupMail.inc:190 +#: plugins/personal/mail/class_mailAccount.inc:200 +msgid "Create mail account" +msgstr "Mail account aanmaken" + +#: plugins/admin/groups/class_groupMail.inc:191 +#: plugins/personal/mail/class_mailAccount.inc:201 +msgid "" +"This account has mail features disabled. You can enable them by clicking " +"below." +msgstr "" +"Dit account heeft geen mail mogelijkheden. U kunt deze inschakelen door de " +"knop hieronder te gebruiken." + +#: plugins/admin/groups/class_groupMail.inc:244 +msgid "You're trying to add an invalid email address " +msgstr "U probeert een ongeldig e-mail adres toe te voegen" + +#: plugins/admin/groups/class_groupMail.inc:245 +msgid "to the list of forwarders." +msgstr "aan de lijst met doorstuur adressen." + +#: plugins/admin/groups/class_groupMail.inc:250 +#: plugins/personal/mail/class_mailAccount.inc:255 +msgid "Adding your one of your own addresses to the forwarders makes no sense." +msgstr "" +"Het toevoegen van een van uw eigen adressen aan de lijst met doorstuur " +"adressen is niet logisch." + +#: plugins/admin/groups/class_groupMail.inc:278 +#: plugins/personal/mail/class_mailAccount.inc:290 +#: plugins/personal/mail/class_mailAccount.inc:295 +msgid "" +"You're trying to add an invalid email address to the list of alternate " +"addresses." +msgstr "" +"U probeert een ongeldig e-mail adres toe te voegen aan de lijst met " +"alternatieve adressen." + +#: plugins/admin/groups/class_groupMail.inc:283 +#: plugins/personal/mail/class_mailAccount.inc:305 +msgid "The address you're trying to add is already used by user" +msgstr "" +"Het adres dat u probeert toe te voegen wordt al gebruikt door gebruiker" + +#: plugins/admin/groups/class_groupMail.inc:404 +#: plugins/admin/groups/mail.tpl:52 plugins/admin/groups/mail.tpl:97 +#: plugins/admin/groups/group_objects.tpl:45 +#: plugins/admin/groups/generic.tpl:87 plugins/admin/groups/mail_locals.tpl:49 +#: plugins/admin/systems/startup.tpl:59 plugins/admin/systems/startup.tpl:72 +#: plugins/admin/systems/startup.tpl:91 plugins/admin/ogroups/generic.tpl:38 +#: plugins/admin/ogroups/ogroup_objects.tpl:56 +#: plugins/gofax/faxaccount/locals.tpl:48 +#: plugins/gofax/faxaccount/lists.tpl:11 plugins/gofax/faxaccount/lists.tpl:15 +#: plugins/gofax/faxaccount/generic.tpl:73 +#: plugins/gofax/blocklists/generic.tpl:60 +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:203 +#: plugins/gofon/phoneaccount/generic.tpl:45 +#: plugins/personal/mail/generic.tpl:55 plugins/personal/mail/generic.tpl:121 +#: plugins/personal/mail/mail_locals.tpl:49 +#: plugins/personal/posix/posix_groups.tpl:56 +#: plugins/personal/posix/trust_machines.tpl:45 +#: plugins/personal/posix/generic.tpl:63 +#: plugins/personal/posix/generic.tpl:122 +#: plugins/personal/samba/samba3.tpl:287 +#: plugins/personal/samba/samba3_workstations.tpl:45 +#: plugins/personal/connectivity/kolab.tpl:17 +msgid "Add" +msgstr "Toevoegen" + +#: plugins/admin/groups/class_groupMail.inc:610 +#: plugins/personal/mail/class_mailAccount.inc:653 +msgid "The required field 'Primary address' is not set." +msgstr "Het vereiste veld 'Primair adres' is leeg." + +#: plugins/admin/groups/class_groupMail.inc:613 +msgid "Please enter a valid email addres in 'Primary address' field." +msgstr "Geef a.u.b. een geldig email adres op in het 'Primair adres' veld." + +#: plugins/admin/groups/class_groupMail.inc:619 +#: plugins/personal/mail/class_mailAccount.inc:668 +msgid "The primary address you've entered is already in use." +msgstr "Het primaire adres dat u opgegeven heeft wordt al gebruikt." + +#: plugins/admin/groups/class_groupMail.inc:625 +#: plugins/personal/mail/class_mailAccount.inc:674 +msgid "Value in 'Quota size' is not valid." +msgstr "De waarde opgegeven bij 'Quota grootte' is niet geldig." + +#: plugins/admin/groups/class_groupMail.inc:634 +#: plugins/personal/mail/class_mailAccount.inc:683 +msgid "Please specify a vaild mail size for mails to be rejected." +msgstr "Geef a.u.b. een geldige mail grootte op voor af te wijzen mails." + +#: plugins/admin/groups/class_groupMail.inc:642 +#: plugins/personal/mail/class_mailAccount.inc:693 +msgid "You need to set the maximum mail size in order to reject anything." +msgstr "" +"U moet de maximale mail grootte instellen om uberhaupt iets af te kunnen " +"afwijzen." + +#: plugins/admin/groups/headpage.tpl:6 plugins/admin/ogroups/headpage.tpl:6 +msgid "List of groups" +msgstr "Lijst met groepen" + +#: plugins/admin/groups/headpage.tpl:29 plugins/admin/ogroups/headpage.tpl:29 +msgid "" +"This menu allows to add, edit or remove selected groups. You may want to use " +"the range selector on top of the group listbox, when working with a large " +"number of groups." +msgstr "" +"Dit menu stelt u in staat geselecteerde groepen toe te voegen, bij te werken " +"of te verwijderen. Indien u veel groepen heeft is het aan te raden de " +"selectie mogelijkheden te gebruiken." + +#: plugins/admin/groups/headpage.tpl:32 plugins/admin/ogroups/headpage.tpl:32 +msgid "" +"-Edit- and -New group- will execute an assistant to aid you in editing group " +"properties.-Delete- will ask for confirmation before removing groups." +msgstr "" +"-Bewerken- en -Nieuwe groep- zullen een wizard starten die u helpt bij het " +"bewerken van groep eigenschappen. -Verwijderen- zal u om bevestiging vragen " +"alvorens er groepen uit uw LDAP database verwijderd worden." + +#: plugins/admin/groups/headpage.tpl:46 +#: plugins/personal/posix/posix_groups.tpl:29 +msgid "Select to see groups that are primary groups of users" +msgstr "" +"Selecteer om de groepen te zien die primaire groepen van gebruikers zijn" + +#: plugins/admin/groups/headpage.tpl:46 +#: plugins/personal/posix/posix_groups.tpl:29 +msgid "Show primary groups" +msgstr "Toon primaire groepen" + +#: plugins/admin/groups/headpage.tpl:47 +#: plugins/personal/posix/posix_groups.tpl:30 +msgid "Select to see groups that have samba groups mappings" +msgstr "Selecteer om groepen te zien die samba groep verbindingen hebben" + +#: plugins/admin/groups/headpage.tpl:47 +#: plugins/personal/posix/posix_groups.tpl:30 +msgid "Show samba groups" +msgstr "Toon samba groepen" + +#: plugins/admin/groups/headpage.tpl:48 +#: plugins/personal/posix/posix_groups.tpl:31 +msgid "Select to see groups that have applications configured" +msgstr "Selecteer om groepen te zien die programma's geconfigureerd hebben" + +#: plugins/admin/groups/headpage.tpl:48 +#: plugins/personal/posix/posix_groups.tpl:31 +msgid "Show application groups" +msgstr "Toon programma groepen" + +#: plugins/admin/groups/headpage.tpl:49 +#: plugins/personal/posix/posix_groups.tpl:32 +msgid "Select to see groups that have mail settings" +msgstr "Selecteer om groepen te zien die e-mail instellingen hebben" + +#: plugins/admin/groups/headpage.tpl:49 +#: plugins/personal/posix/posix_groups.tpl:32 +msgid "Show mail groups" +msgstr "Toon e-mail groepen" + +#: plugins/admin/groups/headpage.tpl:50 +#: plugins/personal/posix/posix_groups.tpl:33 +msgid "Select to see normal groups that have only functional aspects" +msgstr "" +"Selecteer om normale groepen die alleen functionele aspecten hebben te zien" + +#: plugins/admin/groups/headpage.tpl:50 +#: plugins/personal/posix/posix_groups.tpl:33 +msgid "Show functional groups" +msgstr "Toon functionele groepen" + +#: plugins/admin/groups/headpage.tpl:56 plugins/admin/ogroups/headpage.tpl:57 +#: plugins/personal/posix/posix_groups.tpl:36 +msgid "Display groups of department" +msgstr "Toon groepen van afdeling" + +#: plugins/admin/groups/headpage.tpl:62 plugins/admin/ogroups/headpage.tpl:63 +#: plugins/personal/posix/posix_groups.tpl:42 +msgid "Display groups matching" +msgstr "Toon overeenkomende groepen" + +#: plugins/admin/groups/headpage.tpl:63 plugins/admin/ogroups/headpage.tpl:64 +#: plugins/personal/posix/posix_groups.tpl:43 +msgid "Regular expression for matching group names" +msgstr "Reguliere expressie voor overeenkomende groepnamen" + +#: plugins/admin/groups/headpage.tpl:66 +#: plugins/personal/posix/posix_groups.tpl:46 +msgid "Display groups of user" +msgstr "Toon groepen van gebruiker" + +#: plugins/admin/groups/headpage.tpl:67 +#: plugins/personal/posix/posix_groups.tpl:47 +msgid "User name of which groups are shown" +msgstr "Gebruikersnaam van wie de groepen getoond worden" + +#: plugins/admin/groups/mail.tpl:10 plugins/personal/mail/generic.tpl:7 +msgid "Primary address" +msgstr "Primair adres" + +#: plugins/admin/groups/mail.tpl:11 +msgid "Primary mail address for this shared folder" +msgstr "Primair mail adres voor deze gedeelde map" + +#: plugins/admin/groups/mail.tpl:14 +#: plugins/generic/references/class_reference.inc:44 +#: plugins/personal/mail/generic.tpl:11 +msgid "Server" +msgstr "Server" + +#: plugins/admin/groups/mail.tpl:16 +msgid "Select mail server to place user on" +msgstr "Selecteer de mail server waarop de gebruiker ondergebracht wordt" + +#: plugins/admin/groups/mail.tpl:24 plugins/personal/mail/generic.tpl:21 +msgid "Quota usage" +msgstr "Quota gebruik" + +#: plugins/admin/groups/mail.tpl:31 +#: plugins/admin/systems/class_terminalInfo.inc:136 +#: plugins/personal/mail/generic.tpl:28 +msgid "not defined" +msgstr "niet gedefinieerd" + +#: plugins/admin/groups/mail.tpl:36 plugins/personal/mail/generic.tpl:33 +msgid "Quota size" +msgstr "Quota grootte" + +#: plugins/admin/groups/mail.tpl:46 plugins/personal/mail/generic.tpl:47 +msgid "Alternate addresses" +msgstr "Alternatieve adressen" + +#: plugins/admin/groups/mail.tpl:47 plugins/personal/mail/generic.tpl:49 +msgid "List of alternative mail addresses" +msgstr "Lijst met alternatieve mail adressen" + +#: plugins/admin/groups/mail.tpl:64 +msgid "IMAP shared folders" +msgstr "IMAP gedeelde mappen" + +#: plugins/admin/groups/mail.tpl:68 +msgid "Default permission" +msgstr "Standaard rechten" + +#: plugins/admin/groups/mail.tpl:76 +msgid "Member permission" +msgstr "Groepslid rechten" + +#: plugins/admin/groups/mail.tpl:91 +msgid "Forward messages to non group members" +msgstr "Stuur berichten door naar niet groepsleden" + +#: plugins/admin/groups/mail.tpl:98 plugins/gofax/faxaccount/generic.tpl:74 +#: plugins/personal/mail/generic.tpl:123 +msgid "Add local" +msgstr "Lokaal toevoegen" + +#: plugins/admin/groups/main.inc:39 plugins/admin/groups/main.inc:43 +msgid "Group administration" +msgstr "Groepen beheer" + +#: plugins/admin/groups/remove.tpl:7 +msgid "" +"This may be a primary user group. Please double check if you really want to " +"do this since there is no way for GOsa to get your data back." +msgstr "" +"Dit kan een primaire groep zijn. Verzeker uzelf ervan dat dit is wat u wilt, " +"aangezien er geen mogelijkheid voor GOsa is om deze gegevens terug te halen." + +#: plugins/admin/groups/acl.tpl:4 +msgid "Object" +msgstr "Object" + +#: plugins/admin/groups/acl.tpl:17 +msgid "Apply this acl only for users own entries" +msgstr "Pas toegangsbeheer alleen toe op gegevens van de gebruiker zelf" + +#: plugins/admin/groups/class_groupManagement.inc:25 +#: plugins/admin/ogroups/class_ogroupManagement.inc:42 +msgid "Groups" +msgstr "Groepen" + +#: plugins/admin/groups/class_groupManagement.inc:202 +#, php-format +msgid "You're about to delete the group '%s'." +msgstr "U staat op het punt de groep '%s' te verwijderen." + +#: plugins/admin/groups/class_groupManagement.inc:208 +#: plugins/admin/groups/class_groupManagement.inc:234 +msgid "You are not allowed to delete this group!" +msgstr "U heeft geen toestemming om deze groep te verwijderen!" + +#: plugins/admin/groups/class_groupManagement.inc:377 +#: plugins/personal/posix/class_posixAccount.inc:132 +#: plugins/personal/posix/class_posixAccount.inc:900 +msgid "Group of user" +msgstr "Gebruikersgroep" + +#: plugins/admin/groups/class_groupApplication.inc:61 +msgid "This 'dn' is no appgroup." +msgstr "Deze 'dn' bevat geen programma informatie" + +#: plugins/admin/groups/class_groupApplication.inc:69 +msgid "Remove applications" +msgstr "Programma's verwijderen" + +#: plugins/admin/groups/class_groupApplication.inc:70 +msgid "" +"This group has application features enabled. You can disable them by " +"clicking below." +msgstr "" +"Deze groep heeft programma mogelijkheden ingeschakeld. U kunt deze " +"uitschakelen door de knop hieronder te gebruiken." + +#: plugins/admin/groups/class_groupApplication.inc:72 +msgid "Create applications" +msgstr "Programma's aanmaken" + +#: plugins/admin/groups/class_groupApplication.inc:73 +msgid "" +"This group has application features disabled. You can enable them by " +"clicking below." +msgstr "" +"Deze groep heeft programma mogelijkheden uitgeschakeld. U kunt deze " +"inschakelen door de knop hieronder te gebruiken." + +#: plugins/admin/groups/class_groupApplication.inc:107 +msgid "The selected application name is not uniq. Please check your LDAP." +msgstr "" +"De geselecteerde programma naam is niet uniek. Controleeer uw LDAP database." + +#: plugins/admin/groups/class_groupApplication.inc:143 +msgid "The selected application has no options." +msgstr "Het geselecteerde programma heeft geen opties." + +#: plugins/admin/groups/group_objects.tpl:6 +msgid "Select users to add" +msgstr "Selecteer de toe te voegen gebruikers" + +#: plugins/admin/groups/generic.tpl:7 plugins/admin/ogroups/generic.tpl:7 +msgid "Group name" +msgstr "Groepnaam" + +#: plugins/admin/groups/generic.tpl:9 +msgid "Posix name of the group" +msgstr "POSIX naam van de groep" + +#: plugins/admin/groups/generic.tpl:13 plugins/admin/systems/wingeneric.tpl:24 +#: plugins/admin/systems/printer.tpl:10 plugins/admin/systems/component.tpl:24 +#: plugins/admin/systems/server.tpl:24 plugins/admin/systems/phone.tpl:24 +#: plugins/admin/departments/generic.tpl:12 +#: plugins/admin/ogroups/generic.tpl:13 +#: plugins/admin/applications/generic.tpl:24 +#: plugins/gofax/blocklists/generic.tpl:39 +#: plugins/generic/references/contents.tpl:11 +msgid "Description" +msgstr "Omschrijving" + +#: plugins/admin/groups/generic.tpl:14 plugins/admin/ogroups/generic.tpl:14 +msgid "Descriptive text for this group" +msgstr "Omschrijving voor deze groep" + +#: plugins/admin/groups/generic.tpl:21 plugins/admin/systems/terminal.tpl:18 +#: plugins/admin/systems/wingeneric.tpl:13 +#: plugins/admin/systems/printer.tpl:21 plugins/admin/systems/component.tpl:13 +#: plugins/admin/systems/server.tpl:13 +#: plugins/admin/systems/workstation.tpl:18 plugins/admin/systems/phone.tpl:13 +#: plugins/admin/departments/generic.tpl:27 +#: plugins/admin/ogroups/generic.tpl:21 +#: plugins/admin/applications/generic.tpl:33 +#: plugins/gofax/blocklists/generic.tpl:14 +#: plugins/personal/generic/generic.tpl:92 +msgid "Base" +msgstr "Basis" + +#: plugins/admin/groups/generic.tpl:23 plugins/admin/ogroups/generic.tpl:23 +msgid "Choose subtree to place group in" +msgstr "Selecteer de subtree waaronder deze groep geplaatst wordt" + +#: plugins/admin/groups/generic.tpl:36 +msgid "Normally IDs are autogenerated, select to specify manually" +msgstr "" +"Normaliter worden IDs automatisch gegenereerd. Selecteer om handmatig te " +"specificeren" + +#: plugins/admin/groups/generic.tpl:36 +msgid "Force GID" +msgstr "Forceer GID" + +#: plugins/admin/groups/generic.tpl:38 +msgid "Forced ID number" +msgstr "Geforceerd ID nummer" + +#: plugins/admin/groups/generic.tpl:45 +msgid "Select to create a samba conform group" +msgstr "Selecteer om een samba conforme groep te maken" + +#: plugins/admin/groups/generic.tpl:50 +msgid "in domain" +msgstr "in domein" + +#: plugins/admin/groups/generic.tpl:66 +msgid "Members are in a phone pickup group" +msgstr "Leden zitten in een telefoon beantwoord groep" + +#: plugins/admin/groups/generic.tpl:81 +msgid "Group members" +msgstr "Groepsleden" + +#: plugins/admin/groups/class_groupAcl.inc:54 +msgid "This 'dn' is no acl container." +msgstr "Deze 'dn' bevat geen toegangsbeheer." + +#: plugins/admin/groups/class_groupAcl.inc:199 +msgid "All fields are writeable" +msgstr "Alle velden zijn aanpasbaar" + +#: plugins/admin/groups/mail_locals.tpl:6 +#: plugins/personal/mail/mail_locals.tpl:6 +msgid "Select addresses to add" +msgstr "Selecteer toe te voegen adres" + +#: plugins/admin/groups/mail_locals.tpl:29 +#: plugins/personal/mail/mail_locals.tpl:29 +msgid "Display addresses of department" +msgstr "Toon adressen van afdeling" + +#: plugins/admin/groups/mail_locals.tpl:35 +#: plugins/personal/mail/mail_locals.tpl:35 +msgid "Display addresses matching" +msgstr "Toon overeenkomende adressen" + +#: plugins/admin/groups/mail_locals.tpl:36 +#: plugins/personal/mail/mail_locals.tpl:36 +#: plugins/personal/posix/trust_machines.tpl:36 +#: plugins/personal/samba/samba3_workstations.tpl:36 +msgid "Regular expression for matching addresses" +msgstr "Reguliere expresie voor overeenkomende adressen" + +#: plugins/admin/groups/mail_locals.tpl:39 +#: plugins/personal/mail/mail_locals.tpl:39 +msgid "Display addresses of user" +msgstr "Toon adressen van gebruiker" + +#: plugins/admin/groups/mail_locals.tpl:40 +#: plugins/personal/mail/mail_locals.tpl:40 +msgid "User name of which addresses are shown" +msgstr "Gebruikersnaam van wie de adressen getoond worden" + +#: plugins/admin/groups/application_options.tpl:1 +msgid "Application options" +msgstr "Programma opties" + +#: plugins/admin/systems/network.tpl:1 +msgid "Network settings" +msgstr "Netwerk instellingen" + +#: plugins/admin/systems/network.tpl:8 +msgid "IP-address" +msgstr "IP adres" + +#: plugins/admin/systems/network.tpl:16 +msgid "MAC-address" +msgstr "MAC adres" + +#: plugins/admin/systems/class_servDNS.inc:32 +msgid "Remove DNS service" +msgstr "Verwijder DNS service" + +#: plugins/admin/systems/class_servDNS.inc:33 +msgid "" +"This server has DNS features enabled. You can disable them by clicking below." +msgstr "" +"Deze server heeft DNS mogelijkheden ingeschakeld. U kunt deze uitschakelen " +"door de knop hieronder te gebruiken." + +#: plugins/admin/systems/class_servDNS.inc:35 +msgid "Add DNS service" +msgstr "Voeg DNS service toe" + +#: plugins/admin/systems/class_servDNS.inc:36 +msgid "" +"This server has DNS features disabled. You can enable them by clicking below." +msgstr "" +"Deze server heeft DNS mogelijkheden uitgeschakeld. U kunt deze inschakelen " +"door de knop hieronder te gebruiken." + +#: plugins/admin/systems/terminal.tpl:1 +#: plugins/admin/systems/workstation.tpl:1 +#: plugins/admin/departments/generic.tpl:4 +msgid "Properties" +msgstr "Eigenschappen" + +#: plugins/admin/systems/terminal.tpl:9 +msgid "Terminal template" +msgstr "Terminal sjabloon" + +#: plugins/admin/systems/terminal.tpl:11 +msgid "Terminal name" +msgstr "Terminal naam" + +#: plugins/admin/systems/terminal.tpl:20 +#: plugins/admin/systems/wingeneric.tpl:15 +#: plugins/admin/systems/printer.tpl:23 plugins/admin/systems/component.tpl:15 +#: plugins/admin/systems/server.tpl:15 +#: plugins/admin/systems/workstation.tpl:20 plugins/admin/systems/phone.tpl:15 +msgid "Choose subtree to place terminal in" +msgstr "Selecteer de subtree waar de terminal onder geplaatst zal worden" + +#: plugins/admin/systems/terminal.tpl:36 +#: plugins/admin/systems/workstation.tpl:36 +msgid "Mode" +msgstr "Modus" + +#: plugins/admin/systems/terminal.tpl:38 +#: plugins/admin/systems/workstation.tpl:38 +msgid "Select terminal mode" +msgstr "Selecteer terminal modus" + +#: plugins/admin/systems/terminal.tpl:52 +#: plugins/admin/systems/workstation.tpl:52 +msgid "Root server" +msgstr "Root server" + +#: plugins/admin/systems/terminal.tpl:54 +#: plugins/admin/systems/workstation.tpl:54 +msgid "Select NFS root filesystem to use" +msgstr "Selecteer het te gebruiken NFS root bestandssysteem" + +#: plugins/admin/systems/terminal.tpl:60 +#: plugins/admin/systems/workstation.tpl:60 +msgid "Swap server" +msgstr "Swap server" + +#: plugins/admin/systems/terminal.tpl:62 +#: plugins/admin/systems/workstation.tpl:62 +msgid "Choose NFS filesystem to place swap files on" +msgstr "Kies het NFS bestandssysteem waarop de swapbestanden geplaatst worden" + +#: plugins/admin/systems/terminal.tpl:74 +#: plugins/admin/systems/workstation.tpl:74 +msgid "Syslog server" +msgstr "Syslog server" + +#: plugins/admin/systems/terminal.tpl:76 +#: plugins/admin/systems/workstation.tpl:76 +msgid "Choose server to use for logging" +msgstr "Selecteer de server die gebruikt wordt voor log doeleinden" + +#: plugins/admin/systems/terminal.tpl:82 +#: plugins/admin/systems/workstation.tpl:82 +msgid "NTP server" +msgstr "NTP tijdserver" + +#: plugins/admin/systems/terminal.tpl:84 +#: plugins/admin/systems/workstation.tpl:84 +msgid "Choose server to use for synchronizing time" +msgstr "Selecteer de server die gebruikt wordt voor tijdsynchronisatie" + +#: plugins/admin/systems/terminal.tpl:99 plugins/admin/systems/server.tpl:38 +#: plugins/admin/systems/workstation.tpl:99 +#: plugins/admin/ogroups/termgroup.tpl:3 +msgid "Action" +msgstr "Actie" + +#: plugins/admin/systems/terminal.tpl:103 +#: plugins/admin/systems/workstation.tpl:103 +msgid "Select action to execute for this terminal" +msgstr "Selecteer de voor deze terminal uit te voeren actie" + +#: plugins/admin/systems/terminal.tpl:109 plugins/admin/systems/server.tpl:48 +#: plugins/admin/systems/workstation.tpl:109 +#: plugins/admin/ogroups/termgroup.tpl:13 +#: plugins/admin/applications/generic.tpl:12 +msgid "Execute" +msgstr "Uitvoeren" + +#: plugins/admin/systems/class_winGeneric.inc:85 +#: plugins/admin/systems/class_componentGeneric.inc:47 +msgid "This 'dn' has no network features." +msgstr "Deze 'dn' heeft geen netwerk mogelijkheden." + +#: plugins/admin/systems/class_winGeneric.inc:156 +#: plugins/admin/systems/class_componentGeneric.inc:116 +msgid "You have no permissions to create a component on this 'Base'." +msgstr "" +"U heeft geen toestemming om een component aan te maken onder deze 'Basis'." + +#: plugins/admin/systems/class_winGeneric.inc:166 +#: plugins/admin/systems/class_workstationGeneric.inc:240 +#: plugins/admin/systems/class_servGeneric.inc:178 +#: plugins/admin/systems/class_componentGeneric.inc:126 +#: plugins/admin/systems/class_phoneGeneric.inc:129 +#: plugins/admin/systems/class_printGeneric.inc:132 +#: plugins/admin/systems/class_terminalGeneric.inc:233 +#, php-format +msgid "There is already an entry '%s' in the base choosen by you" +msgstr "Er is al een invoer '%s' onder de basis die u gekozen heeft" + +#: plugins/admin/systems/password.tpl:2 +msgid "" +"To change the terminal root password use the fields below. The changes take " +"effect during next reboot. Please memorize the new password, because the you " +"would't be able to log in. Leave fields blank for password inheritance " +"from default entries." +msgstr "" +"Om het terminal root wachtwoord te veranderen moet u de velden hieronder " +"gebruiken. De veranderingen zullen vanaf de volgende herstart effectief " +"zijn. Laat de velden leeg om het standaard wachtwoord te gebruiken." + +#: plugins/admin/systems/password.tpl:6 +msgid "Changing the password impinges on authentification only." +msgstr "" +"Het veranderen van het wachtwoord is alleen van toepassing op authenticatie." + +#: plugins/admin/systems/chooser.tpl:1 +msgid "Choose the kind of system component you want to create" +msgstr "Kies het type systeem component dat u wenst aan te maken" + +#: plugins/admin/systems/chooser.tpl:4 +msgid "" +"Linux terminals and workstations are autocreated on bootup. For this reason " +"you're only be able to create templates for a specific tree. Servers are " +"normally automatically added too, but in some special cases you may need to " +"create a faked server entry to provide GOsa with some informations. Other " +"network components may be used for Nagios setups to create component " +"dependencies." +msgstr "" +"Linux terminals en werkstations worden automatisch aangemaakt bij opstarten. " +"Om deze reden kunt u alleen sjablonen voor een specifieke tree aanmaken. " +"Servers worden normaliter ook automatisch toegevoegd, maar in sommige " +"speciale gevallen moet u nep server informatie invoeren zodat GOsa er mee " +"kan werken. Andere netwerk componenten kunnen gebruikt worden voor Nagios " +"configuraties om component afhankelijkheden te kunnen creeren." + +#: plugins/admin/systems/chooser.tpl:7 +msgid "Linux thin client template" +msgstr "Linux thin client sjabloon" + +#: plugins/admin/systems/chooser.tpl:8 +msgid "Linux workstation template" +msgstr "Linux werkstation sjabloon" + +#: plugins/admin/systems/chooser.tpl:9 +msgid "Linux Server" +msgstr "Linux server" + +#: plugins/admin/systems/chooser.tpl:10 +msgid "Windows workstation" +msgstr "Windows werkstation" + +#: plugins/admin/systems/chooser.tpl:11 +msgid "Network printer" +msgstr "Netwerk printer" + +#: plugins/admin/systems/chooser.tpl:13 +msgid "Other network component" +msgstr "Ander netwerk component" + +#: plugins/admin/systems/chooser.tpl:16 +msgid "Create" +msgstr "Aanmaken" + +#: plugins/admin/systems/class_workstationGeneric.inc:70 +#: plugins/admin/systems/class_terminalGeneric.inc:61 +#: plugins/personal/posix/class_posixAccount.inc:509 +#: plugins/personal/samba/class_sambaAccount.inc:439 +msgid "disabled" +msgstr "gedeactiveerd" + +#: plugins/admin/systems/class_workstationGeneric.inc:71 +#: plugins/admin/systems/class_terminalGeneric.inc:62 +msgid "text" +msgstr "tekst" + +#: plugins/admin/systems/class_workstationGeneric.inc:72 +#: plugins/admin/systems/class_terminalGeneric.inc:63 +msgid "graphic" +msgstr "grafisch" + +#: plugins/admin/systems/class_workstationGeneric.inc:98 +#: plugins/admin/systems/class_servGeneric.inc:58 +#: plugins/admin/systems/class_terminalGeneric.inc:88 +#: plugins/admin/ogroups/class_termgroup.inc:51 +msgid "No WAKECMD definition found in your gosa.conf" +msgstr "Es is geen WAKECMD gedefiniëerd in uw gosa.conf" + +#: plugins/admin/systems/class_workstationGeneric.inc:102 +#: plugins/admin/systems/class_workstationGeneric.inc:114 +#: plugins/admin/systems/class_workstationGeneric.inc:126 +#: plugins/admin/systems/class_servGeneric.inc:62 +#: plugins/admin/systems/class_servGeneric.inc:74 +#: plugins/admin/systems/class_servGeneric.inc:86 +#: plugins/admin/systems/class_terminalGeneric.inc:92 +#: plugins/admin/systems/class_terminalGeneric.inc:104 +#: plugins/admin/systems/class_terminalGeneric.inc:116 +#: plugins/admin/ogroups/class_termgroup.inc:55 +#: plugins/admin/ogroups/class_termgroup.inc:67 +#: plugins/admin/ogroups/class_termgroup.inc:79 +#, php-format +msgid "Execution of '%s' failed!" +msgstr "Uitvoer van '%s' is mislukt!" + +#: plugins/admin/systems/class_workstationGeneric.inc:110 +#: plugins/admin/systems/class_servGeneric.inc:70 +#: plugins/admin/systems/class_terminalGeneric.inc:100 +#: plugins/admin/ogroups/class_termgroup.inc:63 +msgid "No REBOOTCMD definition found in your gosa.conf" +msgstr "Es is geen REBOOTCMDCMD in uw gosa.conf gedefiniëerd" + +#: plugins/admin/systems/class_workstationGeneric.inc:122 +#: plugins/admin/systems/class_servGeneric.inc:82 +#: plugins/admin/systems/class_terminalGeneric.inc:112 +#: plugins/admin/ogroups/class_termgroup.inc:75 +msgid "No HALTCMD definition found in your gosa.conf" +msgstr "Es is geen HALTCMD in uw gosa.conf gedefiniëerd" + +#: plugins/admin/systems/class_workstationGeneric.inc:136 +msgid "This 'dn' has no workstation features." +msgstr "Deze 'dn' heeft geen werkstation mogelijkheden." + +#: plugins/admin/systems/class_workstationGeneric.inc:151 +#: plugins/admin/systems/class_servGeneric.inc:110 +#: plugins/admin/systems/class_terminalGeneric.inc:142 +#: plugins/admin/ogroups/class_termgroup.inc:91 +msgid "Switch off" +msgstr "Uitschakelen" + +#: plugins/admin/systems/class_workstationGeneric.inc:151 +#: plugins/admin/systems/class_servGeneric.inc:110 +#: plugins/admin/systems/class_terminalGeneric.inc:142 +#: plugins/admin/ogroups/class_termgroup.inc:91 +msgid "Reboot" +msgstr "Herstarten" + +#: plugins/admin/systems/class_workstationGeneric.inc:153 +#: plugins/admin/systems/class_servGeneric.inc:112 +#: plugins/admin/systems/class_terminalGeneric.inc:144 +#: plugins/admin/ogroups/class_termgroup.inc:91 +msgid "Wake up" +msgstr "Aanzetten" + +#: plugins/admin/systems/class_workstationGeneric.inc:223 +msgid "You have no permissions to create a workstation on this 'Base'." +msgstr "" +"U heeft geen toestemming om een werkstation aan te maken onder deze 'basis'" + +#: plugins/admin/systems/class_workstationGeneric.inc:227 +msgid "The required field 'Workstation name' is not set." +msgstr "Het vereiste veld 'Werkstation naam' is leeg." + +#: plugins/admin/systems/startup.tpl:1 +msgid "Boot parameters" +msgstr "Opstart parameters" + +#: plugins/admin/systems/startup.tpl:8 +msgid "LDAP server" +msgstr "LDAP server" + +#: plugins/admin/systems/startup.tpl:10 +msgid "Choose LDAP server to use for accounts and terminal management" +msgstr "Selecteer de te gebruiken LDAP server voor account en terminal beheer" + +#: plugins/admin/systems/startup.tpl:16 +msgid "Boot kernel" +msgstr "Boot kernel" + +#: plugins/admin/systems/startup.tpl:18 +msgid "Enter the filename of the kernel to use" +msgstr "Geef de bestandsnaam op van de te gebruiken kernel" + +#: plugins/admin/systems/startup.tpl:21 +msgid "Custom options" +msgstr "Aangepaste opties" + +#: plugins/admin/systems/startup.tpl:23 +msgid "" +"Enter any parameters that should be passed to the kernel as append line " +"during bootup" +msgstr "" +"Geef parameters op die meegeven worden aan de kernel als append regel " +"tijdens het opstarten" + +#: plugins/admin/systems/startup.tpl:34 +msgid "Select if terminal supports graphical startup with progress bar" +msgstr "" +"Selecteer indien de terminal een grafische start met voortgangsstatus " +"ondersteunt" + +#: plugins/admin/systems/startup.tpl:35 +msgid "use graphical bootup" +msgstr "gebruik grafische start" + +#: plugins/admin/systems/startup.tpl:37 +msgid "Select if terminal should boot in text mode" +msgstr "Selecteer wanneer de terminal op moet starten in tekstmodus" + +#: plugins/admin/systems/startup.tpl:38 +msgid "use standard linux textual bootup" +msgstr "gebruik standaard linux tekstuele start" + +#: plugins/admin/systems/startup.tpl:40 +msgid "Select to get more verbose output during startup" +msgstr "Selecteer om meer uitvoer te produceren tijdens opstarten" + +#: plugins/admin/systems/startup.tpl:41 +msgid "use debug mode for startup" +msgstr "gebruik debug modus voor opstarten" + +#: plugins/admin/systems/startup.tpl:52 +msgid "Kernel modules (format: name parameters)" +msgstr "Kernel modules (formaat: naam parameters)" + +#: plugins/admin/systems/startup.tpl:54 +msgid "Add additional modules to load on startup" +msgstr "Voeg additioneel te laden modules toe bij het opstarten" + +#: plugins/admin/systems/startup.tpl:65 +msgid "Automount devices (format: complete autofs entry)" +msgstr "Automount apparaten (formaat: complete autofs invoer)" + +#: plugins/admin/systems/startup.tpl:67 +msgid "Add additional automount entries" +msgstr "Voeg additionele automount invoerregels toe" + +#: plugins/admin/systems/startup.tpl:84 +msgid "Additional fstab entries" +msgstr "Additionele fstab invoerregels" + +#: plugins/admin/systems/startup.tpl:86 +msgid "Add additional filesystems to be mounted during startup" +msgstr "" +"Voeg additionele bestandssystemen toe die gemount worden bij het opstarten" + +#: plugins/admin/systems/class_servGeneric.inc:48 +msgid "This 'dn' has no server features." +msgstr "Deze 'dn' heeft geen server mogelijkheden." + +#: plugins/admin/systems/class_servGeneric.inc:168 +msgid "You have no permissions to create a server on this 'Base'." +msgstr "" +"U heeft geen toestemming om een server aan te maken onder deze 'Basis'." + +#: plugins/admin/systems/headpage.tpl:6 +msgid "List of systems" +msgstr "Lijst van systemen" + +#: plugins/admin/systems/headpage.tpl:29 +msgid "" +"Using this menu you can add, remove and change the properties of specific " +"systems. You can only add systems which have already been started once." +msgstr "" +"M.b.v. dit menu kunt u eigenschappen van specifieke systemen toevoegen, " +"veranderen en verwijderen. U kunt alleen systemen toevoegen die al eens " +"opgestart geweest zijn." + +#: plugins/admin/systems/headpage.tpl:32 +msgid "" +"-Edit- will execute an assistant to aid you in changing the system " +"properties. -Delete- will ask before really deleting things from your LDAP." +msgstr "" +"-Bewerken- zal een wizard opstarten die u helpt bij het veranderen van " +"systeem instellingen. -Verwijderen- zal om bevestiging vragen voordat er " +"daadwerkelijk dingen uit uw LDAP database verwijderd worden." + +#: plugins/admin/systems/headpage.tpl:46 +#: plugins/admin/ogroups/ogroup_objects.tpl:33 +msgid "Select to see servers" +msgstr "Selecteer om servers te zien" + +#: plugins/admin/systems/headpage.tpl:46 +#: plugins/admin/ogroups/ogroup_objects.tpl:33 +msgid "Show servers" +msgstr "Toon servers" + +#: plugins/admin/systems/headpage.tpl:47 +msgid "Select to see Linux terminals" +msgstr "Selecteer om Linux terminals te zien" + +#: plugins/admin/systems/headpage.tpl:47 +#: plugins/admin/ogroups/ogroup_objects.tpl:35 +msgid "Show terminals" +msgstr "Toon terminals" + +#: plugins/admin/systems/headpage.tpl:48 +msgid "Select to see Linux workstations" +msgstr "Selecteer om Linux werkstations te zien" + +#: plugins/admin/systems/headpage.tpl:48 +#: plugins/admin/ogroups/ogroup_objects.tpl:34 +msgid "Show workstations" +msgstr "Toon werkstations" + +#: plugins/admin/systems/headpage.tpl:49 +msgid "Select to see MicroSoft Windows based workstations" +msgstr "Selecteer om Microsoft Windows werkstations te zien" + +#: plugins/admin/systems/headpage.tpl:49 +msgid "Show windows based workstations" +msgstr "Toon Windows werkstations" + +#: plugins/admin/systems/headpage.tpl:50 +msgid "Select to see network printers" +msgstr "Selecteer om netwerk printers te zien" + +#: plugins/admin/systems/headpage.tpl:50 +msgid "Show network printers" +msgstr "Toon netwerk printers" + +#: plugins/admin/systems/headpage.tpl:51 +msgid "Select to see VOIP phones" +msgstr "Selecteer om VOIP telefoons te zien" + +#: plugins/admin/systems/headpage.tpl:51 +#: plugins/admin/ogroups/ogroup_objects.tpl:37 +msgid "Show phones" +msgstr "Toon telefoons" + +#: plugins/admin/systems/headpage.tpl:52 +msgid "Select to see network devices" +msgstr "Selecteer om netwerk apparaten te zien" + +#: plugins/admin/systems/headpage.tpl:52 +msgid "Show network devices" +msgstr "Toon netwerk apparaten" + +#: plugins/admin/systems/headpage.tpl:55 +#: plugins/personal/posix/trust_machines.tpl:29 +msgid "Display systems of department" +msgstr "Toon systemen van afdeling" + +#: plugins/admin/systems/headpage.tpl:61 +#: plugins/personal/posix/trust_machines.tpl:35 +msgid "Display systems matching" +msgstr "Toon de overeenkomende systemen" + +#: plugins/admin/systems/headpage.tpl:62 +msgid "Regular expression for matching system names" +msgstr "Reguliere expressie voor overeenkomende systeemnamen" + +#: plugins/admin/systems/headpage.tpl:65 +msgid "Display terminal(s) of user" +msgstr "Toon de terminal(s) van gebruiker" + +#: plugins/admin/systems/headpage.tpl:66 +msgid "User name of which terminal(s) are shown" +msgstr "Gebruikersnaam van wie de terminal(s) getoond worden" + +#: plugins/admin/systems/main.inc:45 plugins/admin/systems/main.inc:47 +msgid "System management" +msgstr "Systeem beheer" + +#: plugins/admin/systems/class_terminalInfo.inc:52 +#: plugins/admin/systems/class_terminalInfo.inc:167 +#: plugins/personal/generic/class_user.inc:358 +#: plugins/personal/generic/class_user.inc:383 +msgid "present" +msgstr "aanwezig" + +#: plugins/admin/systems/class_terminalInfo.inc:61 +#: plugins/admin/systems/class_terminalStartup.inc:75 +#: plugins/admin/systems/class_terminalService.inc:135 +#: plugins/admin/systems/class_terminalGeneric.inc:126 +msgid "This 'dn' has no terminal features." +msgstr "Deze 'dn' heeft geen terminal mogelijkheden." + +#: plugins/admin/systems/class_terminalInfo.inc:68 +msgid "This is a virtual terminal which has no properties to show here." +msgstr "" +"Dit is een virtuele terminal die geen eigenschappen voorhanden heeft die " +"hier getoond kunnen worden." + +#: plugins/admin/systems/class_terminalInfo.inc:80 +msgid "online" +msgstr "online" + +#: plugins/admin/systems/class_terminalInfo.inc:130 +msgid "running" +msgstr "draait" + +#: plugins/admin/systems/class_terminalInfo.inc:133 +msgid "not running" +msgstr "draait niet" + +#: plugins/admin/systems/class_terminalInfo.inc:141 +msgid "unknown status" +msgstr "onbekende status" + +#: plugins/admin/systems/class_terminalInfo.inc:159 +msgid "offline" +msgstr "offline" + +#: plugins/admin/systems/wingeneric.tpl:6 +msgid "Machine name" +msgstr "Machine naam" + +#: plugins/admin/systems/remove.tpl:7 +msgid "" +"This includes all system and setup informations. Please double check " +"if your really want to do this since there is no way for GOsa to get your " +"data back." +msgstr "" +"Dit omvat alle systeem en configuratie informatie. Verzeker uzelf " +"hiervan, aangezien er geen manier is voor GOsa om deze gegevens terug te " +"halen." + +#: plugins/admin/systems/remove.tpl:11 plugins/admin/departments/remove.tpl:11 +msgid "" +"Best thing to do before performing this action would be to save the current " +"contents of your LDAP tree in a file. So - if you've done so - press " +"Delete to continue or Cancel to abort." +msgstr "" +"Het is aan te raden de huidige inhoud van uw LDAP database op te slaan " +"alvorens u doorgaat. Indien u dat gedaan heeft drukt u op Verwijderen " +"om door te gaan of op Annuleren om te annuleren." + +#: plugins/admin/systems/printer.tpl:6 +msgid "Printer name" +msgstr "Printer naam" + +#: plugins/admin/systems/printer.tpl:14 +#: plugins/admin/departments/generic.tpl:42 +#: plugins/admin/departments/generic.tpl:50 +#: plugins/personal/generic/generic.tpl:247 +msgid "Location" +msgstr "Plaats" + +#: plugins/admin/systems/printer.tpl:32 +msgid "Printer URL" +msgstr "Printer URL" + +#: plugins/admin/systems/printer.tpl:36 +msgid "Path to PPD" +msgstr "Directory van PPD" + +#: plugins/admin/systems/component.tpl:6 +msgid "Device name" +msgstr "Apparaat naam" + +#: plugins/admin/systems/servdb.tpl:1 +msgid "" +"This dialog keeps settings that are used and required by several components " +"within GOsa and are used to find out more about your servers. These settings " +"will be reloaded when you save this component." +msgstr "" + +#: plugins/admin/systems/servdb.tpl:10 +msgid "Kerberos kadmin access" +msgstr "" + +#: plugins/admin/systems/servdb.tpl:14 +msgid "Kerberos Realm" +msgstr "Kerberos Realm" + +#: plugins/admin/systems/servdb.tpl:18 plugins/admin/systems/servdb.tpl:86 +msgid "Admin user" +msgstr "Beheerder" + +#: plugins/admin/systems/servdb.tpl:30 +msgid "FAX database" +msgstr "FAX database" + +#: plugins/admin/systems/servdb.tpl:34 +msgid "FAX DB user" +msgstr "FAX DB gebruiker" + +#: plugins/admin/systems/servdb.tpl:46 +msgid "Asterisk management" +msgstr "Asterisk beheer" + +#: plugins/admin/systems/servdb.tpl:50 +msgid "Asterisk DB user" +msgstr "Asterisk DB gebruiker" + +#: plugins/admin/systems/servdb.tpl:58 +msgid "Country dial prefix" +msgstr "Internationale telefoon prefix" + +#: plugins/admin/systems/servdb.tpl:62 +msgid "Local dial prefix" +msgstr "Lokale telefoon prefix" + +#: plugins/admin/systems/servdb.tpl:74 +msgid "IMAP admin access" +msgstr "IMAP beheerder toegang" + +#: plugins/admin/systems/servdb.tpl:78 +msgid "Server identifier" +msgstr "Server identificatie" + +#: plugins/admin/systems/servdb.tpl:82 +msgid "Connect URL" +msgstr "Verbindingings URL" + +#: plugins/admin/systems/servdb.tpl:95 +msgid "Sieve port" +msgstr "Sieve poort" + +#: plugins/admin/systems/servdb.tpl:104 +msgid "Logging database" +msgstr "Log database" + +#: plugins/admin/systems/servdb.tpl:108 +msgid "Logging DB user" +msgstr "Log DB gebruiker" + +#: plugins/admin/systems/server.tpl:6 +msgid "Server name" +msgstr "Server naam" + +#: plugins/admin/systems/server.tpl:42 +msgid "Select action to execute for this server" +msgstr "Selecteer de voor deze server uit te voeren actie" + +#: plugins/admin/systems/class_servDHCP.inc:32 +msgid "Remove DHCP service" +msgstr "Verwijder DHCP service" + +#: plugins/admin/systems/class_servDHCP.inc:33 +msgid "" +"This server has DHCP features enabled. You can disable them by clicking " +"below." +msgstr "" +"Deze server heeft DHCP mogelijkheden ingeschakeld. U kunt deze uitschakelen " +"door de knop hieronder te gebruiken." + +#: plugins/admin/systems/class_servDHCP.inc:35 +msgid "Add DHCP service" +msgstr "Voeg DHCP service toe" + +#: plugins/admin/systems/class_servDHCP.inc:36 +msgid "" +"This server has DHCP features disabled. You can enable them by clicking " +"below." +msgstr "" +"Deze server heeft DHCP mogelijkheden uitgeschakeld. U kunt deze inschakelen " +"door de knop hieronder te gebruiken." + +#: plugins/admin/systems/class_systemManagement.inc:32 +msgid "Systems" +msgstr "Systemen" + +#: plugins/admin/systems/class_systemManagement.inc:246 +msgid "You can't edit this object type yet!" +msgstr "U kunt dit object type nog niet bewerken!" + +#: plugins/admin/systems/class_systemManagement.inc:262 +msgid "Passwords entered as new and repeated do not match!" +msgstr "" +"Het nieuwe wachtwoord en het herhaalde wachtwoord komen niet met elkaar " +"overeen!" + +#: plugins/admin/systems/class_systemManagement.inc:275 +msgid "You are not allowed to set this systems password!" +msgstr "" +"U heeft geen toestemming om het wachtwoord van dit systeem in te stellen!" + +#: plugins/admin/systems/class_systemManagement.inc:319 +#, php-format +msgid "You're about to delete all information about the component at '%s'." +msgstr "" +"U staat op het punt alle informatie over dit component op '%s' te " +"verwijderen." + +#: plugins/admin/systems/class_systemManagement.inc:325 +#: plugins/admin/systems/class_systemManagement.inc:378 +msgid "You are not allowed to delete this component!" +msgstr "U heeft geen toestemming om dit component te verwijderen!" + +#: plugins/admin/systems/class_systemManagement.inc:642 +msgid "New terminal" +msgstr "Nieuwe terminal" + +#: plugins/admin/systems/class_systemManagement.inc:645 +msgid "New workstation" +msgstr "Nieuw werkstation" + +#: plugins/admin/systems/class_systemManagement.inc:661 +msgid "Thin client template for" +msgstr "Thin client sjabloon voor" + +#: plugins/admin/systems/class_systemManagement.inc:673 +msgid "Workstation template for" +msgstr "Werkstation sjabloon voor" + +#: plugins/admin/systems/workstation.tpl:9 +msgid "Workstation template" +msgstr "Werkstation sjabloon" + +#: plugins/admin/systems/workstation.tpl:11 +msgid "Workstation name" +msgstr "Werkstation naam" + +#: plugins/admin/systems/phone.tpl:6 +msgid "Phone name" +msgstr "Telefoon naam" + +#: plugins/admin/systems/class_phoneGeneric.inc:47 +msgid "This 'dn' has no phone features." +msgstr "Deze 'dn' heeft geen telefoon mogelijkheden." + +#: plugins/admin/systems/class_phoneGeneric.inc:119 +msgid "You have no permissions to create a phone on this 'Base'." +msgstr "" +"U heeft geen toestemming om een telefoon aan te maken onder deze 'Basis'." + +#: plugins/admin/systems/service.tpl:4 +msgid "Keyboard" +msgstr "Toetsenbord" + +#: plugins/admin/systems/service.tpl:7 plugins/admin/systems/service.tpl:210 +msgid "Model" +msgstr "Model" + +#: plugins/admin/systems/service.tpl:9 +msgid "Choose keyboard model" +msgstr "Kies toetsenbord model" + +#: plugins/admin/systems/service.tpl:15 +msgid "Layout" +msgstr "Indeling" + +#: plugins/admin/systems/service.tpl:17 +msgid "Choose keyboard layout" +msgstr "Kies toetsenbord indeling" + +#: plugins/admin/systems/service.tpl:23 +msgid "Variant" +msgstr "Variant" + +#: plugins/admin/systems/service.tpl:25 +msgid "Choose keyboard variant" +msgstr "Kies toetsenbord variant" + +#: plugins/admin/systems/service.tpl:39 +msgid "Mouse" +msgstr "Muis" + +#: plugins/admin/systems/service.tpl:42 plugins/admin/systems/service.tpl:120 +#: plugins/gofax/blocklists/generic.tpl:31 +msgid "Type" +msgstr "Type" + +#: plugins/admin/systems/service.tpl:44 +msgid "Choose mouse type" +msgstr "Kies muis type" + +#: plugins/admin/systems/service.tpl:50 +msgid "Port" +msgstr "Poort" + +#: plugins/admin/systems/service.tpl:52 +msgid "Choose mouse port" +msgstr "Kies muispoort" + +#: plugins/admin/systems/service.tpl:66 +#: plugins/gofon/phoneaccount/generic.tpl:5 +msgid "Telephone hardware" +msgstr "Telefoon hardware" + +#: plugins/admin/systems/service.tpl:69 +#: plugins/gofon/phoneaccount/generic.tpl:9 +msgid "Telephone" +msgstr "Telefoon" + +#: plugins/admin/systems/service.tpl:83 plugins/admin/systems/info.tpl:73 +msgid "Graphic device" +msgstr "Grafische kaart" + +#: plugins/admin/systems/service.tpl:86 +msgid "Driver" +msgstr "Stuurprogramma" + +#: plugins/admin/systems/service.tpl:88 +msgid "Choose graphic driver that is needed by the installed graphic board" +msgstr "" +"Kies het stuurprogramma dat nodig is voor de geïnstalleerde grafische kaart" + +#: plugins/admin/systems/service.tpl:94 +msgid "Resolution" +msgstr "Resolutie" + +#: plugins/admin/systems/service.tpl:96 +msgid "Choose screen resolution used in graphic mode" +msgstr "Kies de scherm resolutie die gebruikt wordt in grafische modus" + +#: plugins/admin/systems/service.tpl:102 +msgid "Color depth" +msgstr "Kleurdiepte" + +#: plugins/admin/systems/service.tpl:104 +msgid "Choose colordepth used in graphic mode" +msgstr "Kies de kleurdiepte die gebruikt wordt in grafische modus" + +#: plugins/admin/systems/service.tpl:117 +msgid "Display device" +msgstr "Scherm" + +#: plugins/admin/systems/service.tpl:124 +msgid "HSync" +msgstr "HSync" + +#: plugins/admin/systems/service.tpl:126 +msgid "Horizontal refresh frequency for installed monitor" +msgstr "Horizontale ververs frequentie voor de geïnstalleerde monitor" + +#: plugins/admin/systems/service.tpl:129 +msgid "VSync" +msgstr "VSync" + +#: plugins/admin/systems/service.tpl:131 +msgid "Vertical refresh frequency for installed monitor" +msgstr "Verticale ververs frequentie voor de geïnstalleerde monitor" + +#: plugins/admin/systems/service.tpl:141 +msgid "Remote desktop" +msgstr "Remote desktop" + +#: plugins/admin/systems/service.tpl:145 +msgid "Connect method" +msgstr "Verbindings methode" + +#: plugins/admin/systems/service.tpl:147 +msgid "Choose method to connect to terminal server" +msgstr "Kies de methode om te verbinden met de terminal server" + +#: plugins/admin/systems/service.tpl:154 +msgid "Terminal server" +msgstr "Terminal server" + +#: plugins/admin/systems/service.tpl:156 +msgid "Select specific terminal server to use" +msgstr "Selecteer de te gebruiken terminal server" + +#: plugins/admin/systems/service.tpl:163 +msgid "Font server" +msgstr "Font server" + +#: plugins/admin/systems/service.tpl:165 +msgid "Select specific font server to use" +msgstr "Selecteer de te gebruiken font server" + +#: plugins/admin/systems/service.tpl:181 +msgid "Print device" +msgstr "Printer" + +#: plugins/admin/systems/service.tpl:182 +msgid "Select to start IPP based printing service on terminal" +msgstr "Selecteer om de IPP gebaseerde print service te starten op de terminal" + +#: plugins/admin/systems/service.tpl:183 +msgid "Provide print services" +msgstr "Lever print diensten" + +#: plugins/admin/systems/service.tpl:189 +msgid "Spool server" +msgstr "Spool server" + +#: plugins/admin/systems/service.tpl:191 +msgid "Select NFS filesystem to place spool files on" +msgstr "Selecteer NFS bestandssysteem waarop spool bestanden geplaatst worden" + +#: plugins/admin/systems/service.tpl:203 +msgid "Scan device" +msgstr "Scanner" + +#: plugins/admin/systems/service.tpl:204 +msgid "Select to start SANE scan service on terminal" +msgstr "Selecteer om de SANE scan service te starten op de terminal" + +#: plugins/admin/systems/service.tpl:205 +msgid "Provide scan services" +msgstr "Lever scanner diensten" + +#: plugins/admin/systems/service.tpl:212 +msgid "Select scanner driver to use" +msgstr "Selecteer de te gebruiken scanner driver" + +#: plugins/admin/systems/info.tpl:1 +msgid "System information" +msgstr "Systeem informatie" + +#: plugins/admin/systems/info.tpl:7 +msgid "CPU" +msgstr "Processor" + +#: plugins/admin/systems/info.tpl:10 +msgid "Memory" +msgstr "Geheugen" + +#: plugins/admin/systems/info.tpl:13 +msgid "Boot MAC" +msgstr "Hardware Adres (MAC)" + +#: plugins/admin/systems/info.tpl:16 +msgid "USB support" +msgstr "USB ondersteuning" + +#: plugins/admin/systems/info.tpl:19 plugins/admin/systems/info.tpl:87 +msgid "System status" +msgstr "Systeem status" + +#: plugins/admin/systems/info.tpl:23 +msgid "Inventary number" +msgstr "Inventaris nummer" + +#: plugins/admin/systems/info.tpl:27 +msgid "Last login" +msgstr "Laatste aanmelding" + +#: plugins/admin/systems/info.tpl:38 +msgid "Network devices" +msgstr "Netwerk apparaten" + +#: plugins/admin/systems/info.tpl:47 +msgid "IDE devices" +msgstr "IDE apparaten" + +#: plugins/admin/systems/info.tpl:56 +msgid "SCSI devices" +msgstr "SCSI apparaten" + +#: plugins/admin/systems/info.tpl:64 +msgid "Floppy device" +msgstr "Diskdrive" + +#: plugins/admin/systems/info.tpl:68 +msgid "CDROM device" +msgstr "CDROM speler" + +#: plugins/admin/systems/info.tpl:77 +msgid "Audio device" +msgstr "Geluidskaart" + +#: plugins/admin/systems/info.tpl:93 +msgid "Up since" +msgstr "Staat aan sinds" + +#: plugins/admin/systems/info.tpl:96 +msgid "CPU load" +msgstr "Processor belasting" + +#: plugins/admin/systems/info.tpl:99 +msgid "Memory usage" +msgstr "Geheugen gebruik" + +#: plugins/admin/systems/info.tpl:102 +msgid "Swap usage" +msgstr "Swap gebruik" + +#: plugins/admin/systems/info.tpl:116 +msgid "SSH service" +msgstr "SSH service" + +#: plugins/admin/systems/info.tpl:119 +msgid "Print service" +msgstr "Print service" + +#: plugins/admin/systems/info.tpl:122 +msgid "Scan service" +msgstr "Scan service" + +#: plugins/admin/systems/info.tpl:125 +msgid "Sound service" +msgstr "Audio service" + +#: plugins/admin/systems/info.tpl:128 +msgid "GUI" +msgstr "GUI" + +#: plugins/admin/systems/class_printGeneric.inc:56 +msgid "This 'dn' has no printer features." +msgstr "Deze 'dn' heeft geen printer mogelijkheden." + +#: plugins/admin/systems/class_printGeneric.inc:122 +msgid "You have no permissions to create a printer on this 'Base'." +msgstr "" +"U heeft geen toestemming om een printer aan te maken onder deze 'Basis'." + +#: plugins/admin/systems/class_terminalService.inc:82 +msgid "default" +msgstr "standaard" + +#: plugins/admin/systems/class_terminalService.inc:83 +msgid "show chooser" +msgstr "toon kiesmogelijkheid" + +#: plugins/admin/systems/class_terminalService.inc:84 +msgid "direct" +msgstr "direkt" + +#: plugins/admin/systems/class_terminalService.inc:87 +msgid "load balanced" +msgstr "werkdruk gebalanceerd" + +#: plugins/admin/systems/class_terminalService.inc:90 +msgid "Windows RDP" +msgstr "Windows RDP" + +#: plugins/admin/systems/class_terminalService.inc:91 +msgid "ICA client" +msgstr "Citrix Metaframe" + +#: plugins/admin/systems/class_terminalService.inc:121 +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:99 +#: plugins/personal/posix/class_posixAccount.inc:190 +msgid "automatic" +msgstr "automatisch" + +#: plugins/admin/systems/class_terminalService.inc:182 +msgid "Choose the phone located at the current terminal" +msgstr "Selecteer de telefoon die zich bij de huidige terminal bevindt." + +#: plugins/admin/systems/class_terminalService.inc:245 +#: plugins/admin/systems/class_terminalService.inc:250 +msgid "Please specify a valid VSync range." +msgstr "Geef a.u.b. een geldig VSync bereik op." + +#: plugins/admin/systems/class_terminalService.inc:260 +#: plugins/admin/systems/class_terminalService.inc:265 +msgid "Please specify a valid HSync range." +msgstr "Geef a.u.b. een geldig HSync bereik op." + +#: plugins/admin/systems/class_terminalGeneric.inc:216 +msgid "You have no permissions to create a terminal on this 'Base'." +msgstr "" +"U heeft geen toestemming om een nieuwe terminal aan te maken onder deze " +"'basis'" + +#: plugins/admin/systems/class_terminalGeneric.inc:220 +msgid "The required field 'Terminal name' is not set." +msgstr "Het vereiste veld 'Terminal naam' is leeg." + +#: plugins/admin/systems/class_servDB.inc:117 +#: plugins/admin/systems/class_servDB.inc:133 +#: plugins/admin/systems/class_servDB.inc:139 +#: plugins/admin/systems/class_servDB.inc:144 +#: plugins/admin/systems/class_servDB.inc:150 +#, php-format +msgid "The attribute '%s' is empty or contains invalid characters." +msgstr "Het atribuut '%s' is leeg of bevat ongeldige karakters!" + +#: plugins/admin/systems/class_servDB.inc:123 +#, php-format +msgid "The imap connect string needs to be in the form '%s'." +msgstr "" +"De imap verbindings string dient in eruit te zien als '%s'." + +#: plugins/admin/systems/class_servDB.inc:127 +msgid "The sieve port needs to be numeric." +msgstr "" +"De sieve poort dient nummeriek te zijn." + +#: plugins/admin/departments/class_departmentGeneric.inc:127 +msgid "You have no permissions to create a department on this 'Base'." +msgstr "" +"U heeft geen toestemming om een afdeling aan te maken onder deze 'Basis'." + +#: plugins/admin/departments/class_departmentGeneric.inc:134 +#: plugins/admin/departments/class_departmentGeneric.inc:136 +msgid "Department with that 'Name' already exists." +msgstr "Er bestaat al een afdeling met deze 'Naam'." + +#: plugins/admin/departments/class_departmentGeneric.inc:141 +#: plugins/gofax/blocklists/class_blocklistManagement.inc:349 +msgid "Required field 'Name' is not set." +msgstr "Vereist veld 'Naam' is leeg." + +#: plugins/admin/departments/class_departmentGeneric.inc:144 +msgid "Required field 'Description' is not set." +msgstr "Vereist veld 'Omschrijving' is leeg." + +#: plugins/admin/departments/class_departmentGeneric.inc:149 +msgid "The field 'Name' contains the reserved word 'incoming'." +msgstr "Het veld 'Naam' bevat het gereserveerde woord 'incoming'." + +#: plugins/admin/departments/class_departmentGeneric.inc:150 +msgid " Please choose another name." +msgstr "Kies a.u.b. een andere naam." + +#: plugins/admin/departments/class_departmentGeneric.inc:153 +#: plugins/addons/addressbook/class_addressbook.inc:496 +#: plugins/addons/addressbook/class_addressbook.inc:524 +#: plugins/personal/generic/class_user.inc:889 +#: plugins/personal/generic/class_user.inc:917 +msgid "The field 'Name' contains invalid characters." +msgstr "Het veld 'Achternaam' bevat ongeldige karakters." + +#: plugins/admin/departments/class_departmentGeneric.inc:156 +#: plugins/addons/addressbook/class_addressbook.inc:504 +#: plugins/addons/addressbook/class_addressbook.inc:507 +#: plugins/personal/generic/class_user.inc:897 +#: plugins/personal/generic/class_user.inc:900 +msgid "The field 'Phone' contains an invalid phone number." +msgstr "Het veld 'Telefoonnummer' bevat een ongeldig telefoonnummer." + +#: plugins/admin/departments/class_departmentGeneric.inc:159 +#: plugins/addons/addressbook/class_addressbook.inc:510 +#: plugins/personal/generic/class_user.inc:903 +msgid "The field 'Fax' contains an invalid phone number." +msgstr "Het veld 'Fax' bevat een ongeldig faxnummer." + +#: plugins/admin/departments/headpage.tpl:6 +msgid "List of departments" +msgstr "Lijst met afdelingen" + +#: plugins/admin/departments/headpage.tpl:28 +msgid "" +"This menu allows to create, delete and edit selected departments. Having a " +"large size of departments, you might prefer the range selectors on top of " +"the department list." +msgstr "" +"Dit menu maakt het mogelijk geselecteerde afdelingen toe te voegen, bij te " +"werken en te verwijderen. Indien u veel afdelingen heeft is het aan te raden " +"de selectie mogelijkheden te gebruiken." + +#: plugins/admin/departments/headpage.tpl:31 +msgid "" +"-Edit- and -New department- will provide an assistant to aid you when " +"performing changes on your departments. -Delete- will ask you for " +"confirmation before really deleting anything." +msgstr "" +"-Bewerken- en -Nieuwe afdeling- zullen een wizard opstarten die u helpt bij " +"het bewerken van uw afdelingen. -Verwijderen- zal om bevestiging vragen " +"voordat er afdelingen uit uw LDAP database verwijderd worden." + +#: plugins/admin/departments/headpage.tpl:45 +msgid "Display subdepartments of" +msgstr "Toon onderafdelingen van afdeling" + +#: plugins/admin/departments/headpage.tpl:51 +msgid "Display departments matching" +msgstr "Toon overeenkomende afdelingen" + +#: plugins/admin/departments/headpage.tpl:52 +msgid "Regular expression for matching department names" +msgstr "Reguliere expressie voor overeenkomende afdelingen" + +#: plugins/admin/departments/main.inc:38 plugins/admin/departments/main.inc:40 +msgid "Department management" +msgstr "Afdelingen beheer" + +#: plugins/admin/departments/remove.tpl:7 +msgid "" +"This includes all accounts, systems, etc. in this subtree. Please " +"double check if your really want to do this since there is no way for GOsa " +"to get your data back." +msgstr "" +"Dit omvat alle accounts, systemen etc. in deze subtree. Verzeker " +"uzelf er van dat dit is wat u wilt, aangezien er geen mogelijkheid voor GOsa " +"is om deze gegevens terug te halen." + +#: plugins/admin/departments/class_departmentManagement.inc:25 +#: plugins/admin/ogroups/class_ogroupManagement.inc:43 +msgid "Departments" +msgstr "Afdelingen" + +#: plugins/admin/departments/class_departmentManagement.inc:130 +#, php-format +msgid "You're about to delete the whole LDAP subtree placed under '%s'." +msgstr "U staat op het punt de hele LDAP subtree onder '%s' te verwijderen." + +#: plugins/admin/departments/class_departmentManagement.inc:145 +msgid "You have no permission to remove this department." +msgstr "U heeft geen toestemming om deze afdeling te verwijderen." + +#: plugins/admin/departments/generic.tpl:8 +msgid "Name of department" +msgstr "Naam van de afdeling" + +#: plugins/admin/departments/generic.tpl:9 +msgid "Name of subtree to create" +msgstr "Naam van de aan te maken subtree" + +#: plugins/admin/departments/generic.tpl:14 +msgid "Descriptive text for department" +msgstr "Omschrijving voor de afdeling" + +#: plugins/admin/departments/generic.tpl:18 +msgid "Category" +msgstr "Categorie" + +#: plugins/admin/departments/generic.tpl:20 +msgid "Category for this subtree" +msgstr "Categorie voor deze subtree" + +#: plugins/admin/departments/generic.tpl:30 +msgid "Choose subtree to place department in" +msgstr "Selecteer de subtree waaronder deze afdeling geplaatst wordt" + +#: plugins/admin/departments/generic.tpl:46 +#: plugins/personal/generic/generic.tpl:251 +msgid "State" +msgstr "Provincie" + +#: plugins/admin/departments/generic.tpl:47 +msgid "State where this subtree is located" +msgstr "Provincie waar deze subtree zich bevindt" + +#: plugins/admin/departments/generic.tpl:51 +msgid "Location of this subtree" +msgstr "Plaats van deze subtree" + +#: plugins/admin/departments/generic.tpl:54 +#: plugins/addons/addressbook/address_edit.tpl:37 +#: plugins/addons/addressbook/address_edit.tpl:86 +#: plugins/addons/addressbook/address_info.tpl:33 +#: plugins/addons/addressbook/address_info.tpl:82 +#: plugins/personal/generic/generic.tpl:111 +#: plugins/personal/generic/generic.tpl:255 +msgid "Address" +msgstr "Adres" + +#: plugins/admin/departments/generic.tpl:55 +msgid "Postal address of this subtree" +msgstr "Post adres van deze subtree" + +#: plugins/admin/departments/generic.tpl:59 +msgid "Base telephone number of this subtree" +msgstr "Basis telefoonnummer van deze subtree" + +#: plugins/admin/departments/generic.tpl:63 +msgid "Base facsimile telephone number of this subtree" +msgstr "Basis Fax nummer van deze subtree" + +#: plugins/admin/ogroups/class_ogroupManagement.inc:25 +#: plugins/admin/ogroups/main.inc:34 plugins/admin/ogroups/main.inc:39 +msgid "Object groups" +msgstr "Objectgroepen" + +#: plugins/admin/ogroups/class_ogroupManagement.inc:41 +msgid "UNIX accounts" +msgstr "UNIX accounts" + +#: plugins/admin/ogroups/class_ogroupManagement.inc:45 +msgid "Servers" +msgstr "Servers" + +#: plugins/admin/ogroups/class_ogroupManagement.inc:46 +msgid "Thin Clients" +msgstr "Thin Clients" + +#: plugins/admin/ogroups/class_ogroupManagement.inc:47 +msgid "Workstations" +msgstr "Werkstations" + +#: plugins/admin/ogroups/class_ogroupManagement.inc:49 +#: plugins/generic/references/class_reference.inc:52 +msgid "Printer" +msgstr "Printer" + +#: plugins/admin/ogroups/class_ogroupManagement.inc:153 +#, php-format +msgid "You're about to delete the object group '%s'." +msgstr "U staat op het punt de objectgroep '%s' te verwijderen." + +#: plugins/admin/ogroups/class_ogroupManagement.inc:159 +#: plugins/admin/ogroups/class_ogroupManagement.inc:185 +msgid "You are not allowed to delete this object group!" +msgstr "U heeft geen toestemming deze objectgroep te verwijderen!" + +#: plugins/admin/ogroups/headpage.tpl:46 +msgid "Show empty groups" +msgstr "Toon lege groepen" + +#: plugins/admin/ogroups/headpage.tpl:47 +msgid "Show groups containing users" +msgstr "Toon groepen die gebruikers bevatten" + +#: plugins/admin/ogroups/headpage.tpl:48 +msgid "Show groups containing groups" +msgstr "Toon groepen die groepen bevatten" + +#: plugins/admin/ogroups/headpage.tpl:49 +msgid "Show groups containing applications" +msgstr "Toon groepen die programma's bevatten" + +#: plugins/admin/ogroups/headpage.tpl:50 +msgid "Show groups containing departments" +msgstr "Toon groepen die afdelingen bevatten" + +#: plugins/admin/ogroups/headpage.tpl:51 +msgid "Show groups containing servers" +msgstr "Toon groepen die servers bevatten" + +#: plugins/admin/ogroups/headpage.tpl:52 +msgid "Show groups containing workstations" +msgstr "Toon groepen die werkstations bevatten" + +#: plugins/admin/ogroups/headpage.tpl:53 +msgid "Show groups containing terminals" +msgstr "Toon groepen die terminals bevatten" + +#: plugins/admin/ogroups/headpage.tpl:54 +msgid "Show groups containing printers" +msgstr "Toon groepen die printers bevatten" + +#: plugins/admin/ogroups/remove.tpl:7 +msgid "" +"Please double check if you really want to do this since there is no way for " +"GOsa to get your data back." +msgstr "" +"Controleer a.u.b. of u dit daadwerkelijk wil doen, aangezien er geen " +"mogelijkheid voor GOsa is om uw data terug te krijgen." + +#: plugins/admin/ogroups/tabs_ogroups.inc:19 +msgid "Terminals" +msgstr "Terminals" + +#: plugins/admin/ogroups/termgroup.tpl:1 +msgid "" +"All actions you choose here influence all machines in this object " +"group. Be aware that rebooting machines may not make people happy who are " +"currently working at these machines." +msgstr "" + +#: plugins/admin/ogroups/termgroup.tpl:7 +msgid "Select action to execute for this group of terminals" +msgstr "Selecteer de voor deze terminal-groep uit te voeren actie" + +#: plugins/admin/ogroups/class_ogroup.inc:91 +msgid "This 'dn' is no object group." +msgstr "Deze 'dn' is geen objectgroep." + +#: plugins/admin/ogroups/class_ogroup.inc:204 +msgid "too many different objects!" +msgstr "te veel verschillende objecten!" + +#: plugins/admin/ogroups/class_ogroup.inc:206 +msgid "users" +msgstr "gebruikers" + +#: plugins/admin/ogroups/class_ogroup.inc:207 +msgid "groups" +msgstr "groepen" + +#: plugins/admin/ogroups/class_ogroup.inc:208 +msgid "applications" +msgstr "programma's" + +#: plugins/admin/ogroups/class_ogroup.inc:209 +msgid "departments" +msgstr "afdelingen" + +#: plugins/admin/ogroups/class_ogroup.inc:210 +msgid "servers" +msgstr "servers" + +#: plugins/admin/ogroups/class_ogroup.inc:211 +msgid "workstations" +msgstr "werkstations" + +#: plugins/admin/ogroups/class_ogroup.inc:212 +msgid "terminals" +msgstr "terminals" + +#: plugins/admin/ogroups/class_ogroup.inc:213 +msgid "phones" +msgstr "telefoons" + +#: plugins/admin/ogroups/class_ogroup.inc:214 +msgid "printers" +msgstr "printers" + +#: plugins/admin/ogroups/class_ogroup.inc:221 +msgid "and" +msgstr "en" + +#: plugins/admin/ogroups/class_ogroup.inc:363 +msgid "Non existing dn: " +msgstr "Niet bestaande dn: " + +#: plugins/admin/ogroups/class_ogroup.inc:494 +msgid "Object groups need at least one member!" +msgstr "Objectgroepen hebben ten minste een groepslid nodig!" + +#: plugins/admin/ogroups/class_ogroup.inc:499 +msgid "You can combine two different object types at maximum only!" +msgstr "U kunt maximaal twee verschillende object types tegelijk combineren!" + +#: plugins/admin/ogroups/generic.tpl:9 +msgid "Name of the group" +msgstr "Naam van de groep" + +#: plugins/admin/ogroups/generic.tpl:32 +msgid "Member objects" +msgstr "Lidmaatschap objecten" + +#: plugins/admin/ogroups/ogroup_objects.tpl:6 +msgid "Select objects to add" +msgstr "Selecteer toe te voegen objecten" + +#: plugins/admin/ogroups/ogroup_objects.tpl:29 +msgid "Select to see departments" +msgstr "Selecteer om afdelingen te zien" + +#: plugins/admin/ogroups/ogroup_objects.tpl:29 +msgid "Show departments" +msgstr "Toon afdelingen" + +#: plugins/admin/ogroups/ogroup_objects.tpl:30 +msgid "Select to see GOsa accounts" +msgstr "Selecteer om GOsa accounts te zien" + +#: plugins/admin/ogroups/ogroup_objects.tpl:30 +msgid "Show people" +msgstr "Toon personen" + +#: plugins/admin/ogroups/ogroup_objects.tpl:31 +msgid "Select to see GOsa groups" +msgstr "Selecteer om GOsa groepen te zien" + +#: plugins/admin/ogroups/ogroup_objects.tpl:31 +msgid "Show groups" +msgstr "Toon groepen" + +#: plugins/admin/ogroups/ogroup_objects.tpl:32 +msgid "Select to see applications" +msgstr "Selecteer om programma's te zien" + +#: plugins/admin/ogroups/ogroup_objects.tpl:32 +msgid "Show applications" +msgstr "Toon programma's" + +#: plugins/admin/ogroups/ogroup_objects.tpl:34 +msgid "Select to see workstations" +msgstr "Selecteer om werkstations te zien" + +#: plugins/admin/ogroups/ogroup_objects.tpl:35 +msgid "Select to see terminals" +msgstr "Selecteer om terminals te zien" + +#: plugins/admin/ogroups/ogroup_objects.tpl:36 +msgid "Select to see printers" +msgstr "Selecteer om printers te zien" + +#: plugins/admin/ogroups/ogroup_objects.tpl:36 +msgid "Show printers" +msgstr "Toon printers" + +#: plugins/admin/ogroups/ogroup_objects.tpl:37 +msgid "Select to see phones" +msgstr "Selecteer om telefoons te zien" + +#: plugins/admin/ogroups/ogroup_objects.tpl:40 +msgid "Display objects of department" +msgstr "Toon objecten van afdeling" + +#: plugins/admin/ogroups/ogroup_objects.tpl:46 +msgid "Display objects matching" +msgstr "Toon overeenkomende objecten" + +#: plugins/admin/ogroups/ogroup_objects.tpl:47 +msgid "Regular expression for matching object names" +msgstr "Reguliere expressie voor overeenkomende objectnamen" + +#: plugins/admin/applications/class_applicationGeneric.inc:57 +msgid "This 'dn' is no application." +msgstr "Deze 'dn' is geen programma." + +#: plugins/admin/applications/class_applicationGeneric.inc:148 +msgid "The specified picture has not been uploaded correctly." +msgstr "Het opgegeven plaatje is niet correct ge-upload" + +#: plugins/admin/applications/class_applicationGeneric.inc:180 +msgid "You have no permissions to create a application on this 'Base'." +msgstr "" +"U heeft geen toestemming een programma aan te maken onder deze 'Basis'." + +#: plugins/admin/applications/class_applicationGeneric.inc:185 +msgid "Required field 'Name' is not filled." +msgstr "Vereiste veld 'Naam' is leeg." + +#: plugins/admin/applications/class_applicationGeneric.inc:188 +msgid "Required field 'Execute' is not filled." +msgstr "Vereist veld 'Uitvoeren' is leeg." + +#: plugins/admin/applications/class_applicationGeneric.inc:197 +msgid "There's already an application with this 'Name'." +msgstr "Er is al een programma met deze 'Naam'." + +#: plugins/admin/applications/headpage.tpl:6 +msgid "List of applications" +msgstr "Lijst met programma's" + +#: plugins/admin/applications/headpage.tpl:28 +msgid "" +"This menu allows to add, edit or remove selected applications. You may want " +"to use the range selector on top of the application listbox, when working " +"with a large number of applications." +msgstr "" +"Dit menu maakt het mogelijk om geselecteerde programma's toe te voegen, aan " +"te passen of te verwijderen. Indien u veel programma's heeft is het aan te " +"raden de selectie mogelijkheden te gebruiken." + +#: plugins/admin/applications/headpage.tpl:31 +msgid "" +"-Edit- and -New application- will execute an assistant to aid you in editing " +"properties. -Delete- will ask for confirmation before removing applications." +msgstr "" +"-Bewerken- en -Nieuwe programma- zullen een wizard opstarten die u helpt bij " +"het bewerken van eigenchappen. -Verwijderen- zal om bevestiging vragen " +"voordat programma's verwijderd worden uit de LDAP database." + +#: plugins/admin/applications/headpage.tpl:45 +msgid "Display applications of department" +msgstr "Toon programma's van afdeling" + +#: plugins/admin/applications/headpage.tpl:51 +msgid "Display applications matching" +msgstr "Toon overeenkomende programma's" + +#: plugins/admin/applications/headpage.tpl:52 +msgid "Regular expression for matching application names" +msgstr "Reguliere expressie voor overeenkomende programma namen" + +#: plugins/admin/applications/main.inc:38 +#: plugins/admin/applications/main.inc:40 +msgid "Application management" +msgstr "Programma beheer" + +#: plugins/admin/applications/remove.tpl:7 +msgid "" +"This may be used by several groups. Please double check if your really want " +"to do this since there is no way for GOsa to get your data back." +msgstr "" +"Dit kan gebruikt worden door meerdere groepen. Verzeker uzelf ervan dat dit " +"is wat u wil, aangezien er geen mogelijkheid voor GOsa is om uw date terug " +"te halen." + +#: plugins/admin/applications/class_applicationParameters.inc:47 +msgid "Remove options" +msgstr "Opties verwijderen" + +#: plugins/admin/applications/class_applicationParameters.inc:48 +msgid "This application has options. You can disable them by clicking below." +msgstr "" +"Dit programma heeft opties ingeschakeld. U kunt deze uitschakelen door " +"hieronder te klikken." + +#: plugins/admin/applications/class_applicationParameters.inc:50 +msgid "Create options" +msgstr "Opties aanmaken" + +#: plugins/admin/applications/class_applicationParameters.inc:51 +msgid "" +"This application has options disabled. You can enable them by clicking below." +msgstr "" +"Dit programma heeft opties uitgeschakeld. U kunt deze inschakelen door " +"hieronder te klikken." + +#: plugins/admin/applications/class_applicationParameters.inc:87 +msgid "Variable" +msgstr "Variabele" + +#: plugins/admin/applications/class_applicationParameters.inc:87 +msgid "Default value" +msgstr "Standaard waarde" + +#: plugins/admin/applications/class_applicationParameters.inc:98 +msgid "Add option" +msgstr "Optie toevoegen" + +#: plugins/admin/applications/class_applicationParameters.inc:149 +#, php-format +msgid "Value '%s' specified as option name is not valid." +msgstr "Waarde '%s' die opgegeven is als optienaam is niet geldig." + +#: plugins/admin/applications/generic.tpl:7 +#: plugins/admin/applications/generic.tpl:8 +msgid "Application name" +msgstr "Programma naam" + +#: plugins/admin/applications/generic.tpl:14 +msgid "Path and/or binary name of application" +msgstr "Directory en/of bestandsnaam van het programma" + +#: plugins/admin/applications/generic.tpl:18 +msgid "Display name" +msgstr "Getoonde naam" + +#: plugins/admin/applications/generic.tpl:20 +msgid "Application name to be displayed (i.e. below icons)" +msgstr "Te tonen programma naam (bv. onder iconen)" + +#: plugins/admin/applications/generic.tpl:35 +msgid "Choose subtree to place application in" +msgstr "Selecteer de subtree waaronder het programma geplaatst zal worden." + +#: plugins/admin/applications/generic.tpl:46 +msgid "Icon" +msgstr "Icoon" + +#: plugins/admin/applications/generic.tpl:51 +msgid "Update" +msgstr "Bijwerken" + +#: plugins/admin/applications/generic.tpl:51 +msgid "Reload picture from LDAP" +msgstr "Herlaad plaatje uit LDAP" + +#: plugins/admin/applications/generic.tpl:61 +msgid "Only executable for members" +msgstr "Alleen uitvoerbaar voor groepsleden" + +#: plugins/admin/applications/generic.tpl:63 +msgid "Replace user configuration on startup" +msgstr "Vervang gebruikers configuratie bij opstarten" + +#: plugins/admin/applications/generic.tpl:67 +msgid "Place icon on members desktop" +msgstr "Plaats icoon op de desktop van groepsleden" + +#: plugins/admin/applications/generic.tpl:70 +msgid "Place entry in members startmenu" +msgstr "Plaats invoer in het startmenu van groepsleden" + +#: plugins/admin/applications/class_applicationManagement.inc:185 +#, php-format +msgid "You're about to delete the application '%s'." +msgstr "U staat op het punt de programma '%s' te verwijderen." + +#: plugins/admin/applications/class_applicationManagement.inc:191 +#: plugins/admin/applications/class_applicationManagement.inc:217 +msgid "You are not allowed to delete this application!" +msgstr "U heeft geen toestemming dit programma te verwijderen" + +#: plugins/gofax/reports/main.inc:5 +msgid "FAX reports" +msgstr "Fax rapporten" + +#: plugins/gofax/reports/class_faxreport.inc:6 +msgid "FAX Reports" +msgstr "Fax rapporten" + +#: plugins/gofax/reports/class_faxreport.inc:97 +#: plugins/gofax/reports/class_faxreport.inc:204 +msgid "Can't connect to fax database, no reports can be shown!" +msgstr "" +"Kan niet verbinden met de fax database. Rapporten kunnen niet getoond worden!" + +#: plugins/gofax/reports/class_faxreport.inc:101 +#: plugins/gofax/reports/class_faxreport.inc:208 +msgid "Can't select fax database for report generation!" +msgstr "Kan de fax database voor rapportage niet selecteren!" + +#: plugins/gofax/reports/class_faxreport.inc:109 +#: plugins/gofax/reports/class_faxreport.inc:216 +msgid "Query for fax database failed!" +msgstr "De zoekopdracht op de fax database is mislukt!" + +#: plugins/gofax/reports/class_faxreport.inc:117 +msgid "You have no permission to retrieve informations about this fax id!" +msgstr "U heeft geen toestemming om informatie over dit fax id op te vragen!" + +#: plugins/gofax/reports/class_faxreport.inc:137 +#: plugins/gofax/reports/class_faxreport.inc:224 +#: plugins/gofon/reports/class_fonreport.inc:161 +msgid "Y-M-D" +msgstr "J-M-D" + +#: plugins/gofax/reports/class_faxreport.inc:272 +#: plugins/gofon/reports/class_fonreport.inc:208 +#: plugins/personal/posix/class_posixAccount.inc:457 +#: plugins/personal/samba/class_sambaAccount.inc:344 +#: plugins/personal/samba/class_sambaAccount.inc:362 +#: plugins/personal/samba/class_sambaAccount.inc:380 +#: plugins/personal/samba/class_sambaAccount.inc:398 +#: plugins/personal/generic/class_user.inc:210 +msgid "January" +msgstr "Januari" + +#: plugins/gofax/reports/class_faxreport.inc:272 +#: plugins/gofon/reports/class_fonreport.inc:208 +#: plugins/personal/posix/class_posixAccount.inc:457 +#: plugins/personal/samba/class_sambaAccount.inc:344 +#: plugins/personal/samba/class_sambaAccount.inc:362 +#: plugins/personal/samba/class_sambaAccount.inc:380 +#: plugins/personal/samba/class_sambaAccount.inc:398 +#: plugins/personal/generic/class_user.inc:210 +msgid "February" +msgstr "Februari" + +#: plugins/gofax/reports/class_faxreport.inc:272 +#: plugins/gofon/reports/class_fonreport.inc:208 +#: plugins/personal/posix/class_posixAccount.inc:457 +#: plugins/personal/samba/class_sambaAccount.inc:344 +#: plugins/personal/samba/class_sambaAccount.inc:362 +#: plugins/personal/samba/class_sambaAccount.inc:380 +#: plugins/personal/samba/class_sambaAccount.inc:398 +#: plugins/personal/generic/class_user.inc:210 +msgid "March" +msgstr "Maart" + +#: plugins/gofax/reports/class_faxreport.inc:272 +#: plugins/gofon/reports/class_fonreport.inc:208 +#: plugins/personal/posix/class_posixAccount.inc:457 +#: plugins/personal/samba/class_sambaAccount.inc:344 +#: plugins/personal/samba/class_sambaAccount.inc:362 +#: plugins/personal/samba/class_sambaAccount.inc:380 +#: plugins/personal/samba/class_sambaAccount.inc:398 +#: plugins/personal/generic/class_user.inc:210 +msgid "April" +msgstr "April" + +#: plugins/gofax/reports/class_faxreport.inc:273 +#: plugins/gofon/reports/class_fonreport.inc:209 +#: plugins/personal/posix/class_posixAccount.inc:458 +#: plugins/personal/samba/class_sambaAccount.inc:345 +#: plugins/personal/samba/class_sambaAccount.inc:363 +#: plugins/personal/samba/class_sambaAccount.inc:381 +#: plugins/personal/samba/class_sambaAccount.inc:399 +#: plugins/personal/generic/class_user.inc:211 +msgid "May" +msgstr "Mei" + +#: plugins/gofax/reports/class_faxreport.inc:273 +#: plugins/gofon/reports/class_fonreport.inc:209 +#: plugins/personal/posix/class_posixAccount.inc:458 +#: plugins/personal/samba/class_sambaAccount.inc:345 +#: plugins/personal/samba/class_sambaAccount.inc:363 +#: plugins/personal/samba/class_sambaAccount.inc:381 +#: plugins/personal/samba/class_sambaAccount.inc:399 +#: plugins/personal/generic/class_user.inc:211 +msgid "June" +msgstr "Juni" + +#: plugins/gofax/reports/class_faxreport.inc:273 +#: plugins/gofon/reports/class_fonreport.inc:209 +#: plugins/personal/posix/class_posixAccount.inc:458 +#: plugins/personal/samba/class_sambaAccount.inc:345 +#: plugins/personal/samba/class_sambaAccount.inc:363 +#: plugins/personal/samba/class_sambaAccount.inc:381 +#: plugins/personal/samba/class_sambaAccount.inc:399 +#: plugins/personal/generic/class_user.inc:211 +msgid "July" +msgstr "Juli" + +#: plugins/gofax/reports/class_faxreport.inc:273 +#: plugins/gofon/reports/class_fonreport.inc:209 +#: plugins/personal/posix/class_posixAccount.inc:458 +#: plugins/personal/samba/class_sambaAccount.inc:345 +#: plugins/personal/samba/class_sambaAccount.inc:363 +#: plugins/personal/samba/class_sambaAccount.inc:381 +#: plugins/personal/samba/class_sambaAccount.inc:399 +#: plugins/personal/generic/class_user.inc:211 +msgid "August" +msgstr "Augustus" + +#: plugins/gofax/reports/class_faxreport.inc:274 +#: plugins/gofon/reports/class_fonreport.inc:210 +#: plugins/personal/posix/class_posixAccount.inc:458 +#: plugins/personal/samba/class_sambaAccount.inc:345 +#: plugins/personal/samba/class_sambaAccount.inc:363 +#: plugins/personal/samba/class_sambaAccount.inc:381 +#: plugins/personal/samba/class_sambaAccount.inc:399 +#: plugins/personal/generic/class_user.inc:211 +msgid "September" +msgstr "September" + +#: plugins/gofax/reports/class_faxreport.inc:274 +#: plugins/gofon/reports/class_fonreport.inc:210 +#: plugins/personal/posix/class_posixAccount.inc:459 +#: plugins/personal/samba/class_sambaAccount.inc:346 +#: plugins/personal/samba/class_sambaAccount.inc:364 +#: plugins/personal/samba/class_sambaAccount.inc:382 +#: plugins/personal/samba/class_sambaAccount.inc:400 +#: plugins/personal/generic/class_user.inc:212 +msgid "October" +msgstr "Oktober" + +#: plugins/gofax/reports/class_faxreport.inc:274 +#: plugins/gofon/reports/class_fonreport.inc:210 +#: plugins/personal/posix/class_posixAccount.inc:459 +#: plugins/personal/samba/class_sambaAccount.inc:346 +#: plugins/personal/samba/class_sambaAccount.inc:364 +#: plugins/personal/samba/class_sambaAccount.inc:382 +#: plugins/personal/samba/class_sambaAccount.inc:400 +#: plugins/personal/generic/class_user.inc:212 +msgid "November" +msgstr "November" + +#: plugins/gofax/reports/class_faxreport.inc:274 +#: plugins/gofon/reports/class_fonreport.inc:210 +#: plugins/personal/posix/class_posixAccount.inc:459 +#: plugins/personal/samba/class_sambaAccount.inc:346 +#: plugins/personal/samba/class_sambaAccount.inc:364 +#: plugins/personal/samba/class_sambaAccount.inc:382 +#: plugins/personal/samba/class_sambaAccount.inc:400 +#: plugins/personal/generic/class_user.inc:212 +msgid "December" +msgstr "December" + +#: plugins/gofax/reports/detail.tpl:6 +msgid "FAX preview - please wait" +msgstr "Fax voorbeeld - even geduld a.u.b." + +#: plugins/gofax/reports/detail.tpl:9 +msgid "Click on fax to download" +msgstr "Klik op de fax om deze te downloaden" + +#: plugins/gofax/reports/detail.tpl:18 +msgid "FAX ID" +msgstr "Fax ID" + +#: plugins/gofax/reports/detail.tpl:22 plugins/gofax/reports/contents.tpl:30 +msgid "User" +msgstr "Gebruiker" + +#: plugins/gofax/reports/detail.tpl:26 +msgid "Date / Time" +msgstr "Datum / Tijd" + +#: plugins/gofax/reports/detail.tpl:30 +msgid "Sender MSN" +msgstr "Afzender MSN" + +#: plugins/gofax/reports/detail.tpl:34 +msgid "Sender ID" +msgstr "Afzender ID" + +#: plugins/gofax/reports/detail.tpl:38 +msgid "Receiver MSN" +msgstr "Ontvanger MSN" + +#: plugins/gofax/reports/detail.tpl:42 +msgid "Receiver ID" +msgstr "Ontvanger ID" + +#: plugins/gofax/reports/detail.tpl:46 plugins/gofax/reports/contents.tpl:32 +#: plugins/gofon/reports/contents.tpl:35 plugins/personal/posix/generic.tpl:29 +msgid "Status" +msgstr "Status" + +#: plugins/gofax/reports/detail.tpl:50 +msgid "Status message" +msgstr "Status bericht" + +#: plugins/gofax/reports/detail.tpl:54 +msgid "Transfer time" +msgstr "Overdrachtstijd" + +#: plugins/gofax/reports/detail.tpl:58 plugins/gofax/reports/contents.tpl:35 +msgid "# pages" +msgstr "# pagina's" + +#: plugins/gofax/reports/contents.tpl:2 plugins/gofon/reports/contents.tpl:2 +#: plugins/addons/logview/contents.tpl:2 +msgid "Filter" +msgstr "Filter" + +#: plugins/gofax/reports/contents.tpl:6 plugins/gofon/reports/contents.tpl:6 +#: plugins/addons/logview/contents.tpl:45 +#: plugins/addons/addressbook/contents.tpl:77 +msgid "Search for" +msgstr "Zoek naar" + +#: plugins/gofax/reports/contents.tpl:7 plugins/gofon/reports/contents.tpl:7 +msgid "Enter user name to search for" +msgstr "Voer de te zoeken gebruikersnaam in" + +#: plugins/gofax/reports/contents.tpl:8 plugins/gofax/reports/contents.tpl:16 +#: plugins/gofon/reports/contents.tpl:8 plugins/gofon/reports/contents.tpl:16 +msgid "in" +msgstr "in" + +#: plugins/gofax/reports/contents.tpl:9 plugins/gofon/reports/contents.tpl:9 +msgid "Select subtree to base search on" +msgstr "Selecteer de subtree waarbinnen de zoekopdracht plaatsvindt" + +#: plugins/gofax/reports/contents.tpl:12 plugins/gofon/reports/contents.tpl:12 +msgid "during" +msgstr "tijdens" + +#: plugins/gofax/reports/contents.tpl:21 plugins/gofon/reports/contents.tpl:21 +#: plugins/addons/logview/contents.tpl:65 +msgid "Search" +msgstr "Zoeken" + +#: plugins/gofax/reports/contents.tpl:31 plugins/gofon/reports/contents.tpl:30 +#: plugins/addons/logview/contents.tpl:83 +msgid "Date" +msgstr "Datum" + +#: plugins/gofax/reports/contents.tpl:33 +msgid "Sender" +msgstr "Afzender" + +#: plugins/gofax/reports/contents.tpl:34 +msgid "Receiver" +msgstr "Ontvanger" + +#: plugins/gofax/reports/contents.tpl:47 plugins/gofon/reports/contents.tpl:48 +#: plugins/addons/logview/contents.tpl:96 +msgid "Search returned no results..." +msgstr "Zoekopdracht gaf geen resultaten terug..." + +#: plugins/gofax/faxaccount/main.inc:96 +#: plugins/gofon/phoneaccount/main.inc:111 plugins/personal/mail/main.inc:114 +#: plugins/personal/posix/main.inc:120 plugins/personal/samba/main.inc:114 +#: plugins/personal/generic/main.inc:177 +#: plugins/personal/connectivity/main.inc:126 +msgid "Click the 'Edit' button below to change informations in this dialog" +msgstr "" +"Gebruik de 'Bewerk' knop hieronder om de informatie in deze dialoog te " +"veranderen" + +#: plugins/gofax/faxaccount/main.inc:105 +msgid "FAX settings" +msgstr "Fax instellingen" + +#: plugins/gofax/faxaccount/locals.tpl:6 +msgid "Select numbers to add" +msgstr "Selecteer de toe te voegen nummers" + +#: plugins/gofax/faxaccount/locals.tpl:28 +msgid "Display numbers of department" +msgstr "Toon nummers van afdeling" + +#: plugins/gofax/faxaccount/locals.tpl:34 +msgid "Display numbers matching" +msgstr "Toon de overeenkomende nummers" + +#: plugins/gofax/faxaccount/locals.tpl:35 +msgid "Regular expression for matching numbers" +msgstr "Reguliere expressie voor overeenkomende nummers" + +#: plugins/gofax/faxaccount/locals.tpl:38 +msgid "Display numbers of user" +msgstr "Toon nummers van gebruiker" + +#: plugins/gofax/faxaccount/locals.tpl:39 +msgid "User name of which numbers are shown" +msgstr "Gebruikersnaam van de gebruiker wiens nummers getoond worden" + +#: plugins/gofax/faxaccount/lists.tpl:4 +msgid "Blocked numbers/lists" +msgstr "Geblokkeerde nummers/lijsten" + +#: plugins/gofax/faxaccount/lists.tpl:28 +msgid "List of predefined blocklists" +msgstr "Lijst van voorgedefiniëerde blokkeerlijsten" + +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:6 +#: plugins/addons/addressbook/address_edit.tpl:92 +#: plugins/addons/addressbook/address_info.tpl:88 +#: plugins/generic/references/class_reference.inc:30 +msgid "FAX" +msgstr "Fax" + +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:109 +msgid "This account has no fax extensions." +msgstr "Dit account heeft geen fax mogelijkheden." + +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:118 +msgid "Remove fax account" +msgstr "Verwijder fax account" + +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:119 +msgid "" +"This account has fax features enabled. You can disable them by clicking " +"below." +msgstr "" +"Dit account heeft fax mogelijkheden ingeschakeld. U kunt deze uitschakelen " +"door de knop hieronder te gebruiken." + +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:121 +msgid "Create fax account" +msgstr "Maak fax account aan" + +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:122 +msgid "" +"This account has fax features disabled. You can enable them by clicking " +"below." +msgstr "" +"Dit account heeft fax mogelijkheden uitgeschakeld. U kunt deze inschakelen " +"door de knop hieronder te gebruiken." + +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:190 +msgid "You're trying to add an invalid phone number." +msgstr "U probeert een ongeldig telefoonnummer toe te voegen." + +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:456 +msgid "The required field 'Fax' is not set." +msgstr "Het vereiste veld 'Fax' is leeg." + +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:460 +msgid "Please enter a valid telephone number in the 'Fax' field." +msgstr "Voer a.u.b. een geldig faxnummer bij het 'Fax' veld in." + +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:468 +msgid "Mail delivery is checked, but no address has been specified." +msgstr "E-mail aflevering staat aan, alleen is er geen adres opgegeven." + +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:470 +msgid "The mail address you've entered is invalid." +msgstr "Het E-mail adres dat u opgegeven heeft is ongeldig." + +#: plugins/gofax/faxaccount/generic.tpl:12 +msgid "Fax number for GOfax to trigger on" +msgstr "Fax nummer waarop GOfax moet reageren" + +#: plugins/gofax/faxaccount/generic.tpl:16 +msgid "Language" +msgstr "Taal" + +#: plugins/gofax/faxaccount/generic.tpl:18 +msgid "Specify the GOfax communication language for fax to mail gateway" +msgstr "Specificeer de GOfax communicatie taal voor de fax naar mail gateway" + +#: plugins/gofax/faxaccount/generic.tpl:24 +msgid "Delivery format" +msgstr "Aflever formaat" + +#: plugins/gofax/faxaccount/generic.tpl:26 +msgid "Specify delivery format for fax to mail gateway" +msgstr "Specificeer het aflever formaat voor de fax naar mail gateway" + +#: plugins/gofax/faxaccount/generic.tpl:38 +msgid "Delivery methods" +msgstr "Aflever methodes" + +#: plugins/gofax/faxaccount/generic.tpl:41 +msgid "Temporary disable fax usage" +msgstr "Schakel fax gebruik tijdelijk uit" + +#: plugins/gofax/faxaccount/generic.tpl:45 +msgid "Deliver fax as mail to" +msgstr "Lever fax als mail af aan" + +#: plugins/gofax/faxaccount/generic.tpl:49 +msgid "Deliver fax as mail" +msgstr "Lever fax als mail af" + +#: plugins/gofax/faxaccount/generic.tpl:54 +msgid "Deliver fax to printer" +msgstr "Lever fax op de printer af" + +#: plugins/gofax/faxaccount/generic.tpl:68 +msgid "Alternate fax numbers" +msgstr "Alternatieve faxnummers" + +#: plugins/gofax/faxaccount/generic.tpl:83 +msgid "Blocklists" +msgstr "Blokkeerlijsten" + +#: plugins/gofax/faxaccount/generic.tpl:86 +msgid "Blocklists for incoming fax" +msgstr "Blokkeerlijsten voor inkomende faxen" + +#: plugins/gofax/faxaccount/generic.tpl:92 +msgid "Blocklists for outgoing fax" +msgstr "Blokkeerlijsten voor uitgaande faxen" + +#: plugins/gofax/blocklists/headpage.tpl:6 +msgid "List of blocklists" +msgstr "Lijst met blokkeerlijsten" + +#: plugins/gofax/blocklists/headpage.tpl:28 +msgid "" +"This menu allows to create, delete and edit selected blocklists. Having a " +"large size of lists, you might prefer the range selectors on top of the " +"select box." +msgstr "" +"Dit menu maakt het mogelijk blokkeerlijsten aan te maken, te veranderen en " +"te verwijderen. Indien u een grote lijst heeft kunt u gebruik maken van de " +"selectie mogelijkheden." + +#: plugins/gofax/blocklists/headpage.tpl:31 +msgid "" +"-Edit- and -New blocklist- will provide an assistant to aid you when " +"performing changes on your blocklist. -Delete- will ask you for confirmation " +"before really deleting anything." +msgstr "" +"-Bewerken- en -Nieuwe blokkeerlijst- starten een wizard die u zal helpen bij " +"het bewerken van uw blokkeerlijst. -Verwijderen- zal om bevestiging vragen " +"alvorens er gegevens verwijderd worden uit uw LDAP database." + +#: plugins/gofax/blocklists/headpage.tpl:45 +msgid "Select to see send blocklists" +msgstr "Selecteer om de verzend blokkeerlijsten te zien" + +#: plugins/gofax/blocklists/headpage.tpl:45 +msgid "Show send blocklists" +msgstr "Toon verzend blokkeerlijsten" + +#: plugins/gofax/blocklists/headpage.tpl:46 +msgid "Select to see receive blocklists" +msgstr "Selecteer om de ontvangst blokkeerlijsten te zien" + +#: plugins/gofax/blocklists/headpage.tpl:46 +msgid "Show receive blocklists" +msgstr "Toon ontvangst blokkeerlijsten" + +#: plugins/gofax/blocklists/headpage.tpl:49 +msgid "Display lists of department" +msgstr "Toon blokkeerlijsten van de afdeling" + +#: plugins/gofax/blocklists/headpage.tpl:55 +msgid "Display lists matching" +msgstr "Toon overeenkomende blokkeerlijsten" + +#: plugins/gofax/blocklists/headpage.tpl:56 +msgid "Regular expression for matching list names" +msgstr "Reguliere expressie voor overeenkomende lijstnamen" + +#: plugins/gofax/blocklists/headpage.tpl:59 +msgid "Display lists containing" +msgstr "Toon lijsten die het volgende bevatten" + +#: plugins/gofax/blocklists/headpage.tpl:60 +msgid "Show lists containing entered numbers" +msgstr "Toon lijsten die de ingevoerde nummers bevatten" + +#: plugins/gofax/blocklists/main.inc:20 plugins/gofax/blocklists/main.inc:22 +msgid "Blocklist management" +msgstr "Blokkeerlijst beheer" + +#: plugins/gofax/blocklists/remove.tpl:7 +msgid "" +"Please double check if your really want to do this since there is no way for " +"GOsa to get your data back." +msgstr "" +"Verzeker u ervan dat u dit daadwerkelijk wil doorvoeren, aangezien het " +"onmogelijk is voor GOsa om de data terug te halen." + +#: plugins/gofax/blocklists/class_blocklistManagement.inc:5 +msgid "FAX Blocklists" +msgstr "Fax Blokkeerlijsten" + +#: plugins/gofax/blocklists/class_blocklistManagement.inc:121 +#, php-format +msgid "You're about to delete the blocklist '%s'." +msgstr "U staat op het punt blokkeerlijst '%s' te verwijderen." + +#: plugins/gofax/blocklists/class_blocklistManagement.inc:135 +msgid "You have no permission to remove this blocklist." +msgstr "U heeft geen toestemming om deze blokkeerlijst te verwijderen." + +#: plugins/gofax/blocklists/class_blocklistManagement.inc:153 +msgid "Please specify a valid phone number." +msgstr "Geef a.u.b. een geldig telefoonnummer op." + +#: plugins/gofax/blocklists/class_blocklistManagement.inc:226 +msgid "send" +msgstr "verzenden" + +#: plugins/gofax/blocklists/class_blocklistManagement.inc:226 +msgid "receive" +msgstr "ontvangen" + +#: plugins/gofax/blocklists/class_blocklistManagement.inc:343 +msgid "You have no permissions to create a blocklist on this 'Base'." +msgstr "" +"U heeft geen toestemming een blokkeerlijst aan te maken onder deze 'basis'." + +#: plugins/gofax/blocklists/class_blocklistManagement.inc:352 +msgid "Required field 'Name' contains invalid characters" +msgstr "Vereist veld 'Naam' bevat ongeldige karakters" + +#: plugins/gofax/blocklists/class_blocklistManagement.inc:360 +msgid "Specified name is already used." +msgstr "De opgegeven naam wordt al gebruikt." + +#: plugins/gofax/blocklists/class_blocklistManagement.inc:367 +msgid "No permission to create a blocklist on this base." +msgstr "Geen toestemming om een blokkeerlijst aan te maken onder deze basis." + +#: plugins/gofax/blocklists/generic.tpl:8 +msgid "List name" +msgstr "Lijstnaam" + +#: plugins/gofax/blocklists/generic.tpl:10 +msgid "Name of blocklist" +msgstr "Naam van de blokkeerlijst" + +#: plugins/gofax/blocklists/generic.tpl:16 +msgid "Select subtree to place blocklist in" +msgstr "Selecteer de subtree waaronder de blokkeerlijst geplaatst wordt" + +#: plugins/gofax/blocklists/generic.tpl:33 +msgid "Select wether to filter incoming or outgoing calls" +msgstr "Selecteer of inkomende en uitgaande gesprekken gefilterd moeten worden" + +#: plugins/gofax/blocklists/generic.tpl:41 +msgid "Descriptive text for this blocklist" +msgstr "Beschrijving van deze blokkeerlijst" + +#: plugins/gofax/blocklists/generic.tpl:54 +msgid "Blocked numbers" +msgstr "Geblokkeerde nummers" + +#: plugins/gofax/blocklists/generic.tpl:66 +msgid "Numbers can also contain wild cards." +msgstr "Nummers kunnen ook wild cards bevatten." + +#: plugins/gofon/reports/main.inc:5 +msgid "Phone reports" +msgstr "Telefoon rapporten" + +#: plugins/gofon/reports/class_fonreport.inc:6 +msgid "Phone Reports" +msgstr "Telefoon rapporten" + +#: plugins/gofon/reports/class_fonreport.inc:141 +msgid "Can't connect to phone database, no reports can be shown!" +msgstr "" +"Kan niet verbinden met de telefoon database. Rapporten kunnen niet getoond " +"worden!" + +#: plugins/gofon/reports/class_fonreport.inc:145 +msgid "Can't select phone database for report generation!" +msgstr "Kan de telefoon database voor rapportage niet selecteren!" + +#: plugins/gofon/reports/class_fonreport.inc:154 +msgid "Query for phone database failed!" +msgstr "De zoekopdracht binnen de telefoon database is mislukt!" + +#: plugins/gofon/reports/contents.tpl:31 +msgid "Source" +msgstr "Bron" + +#: plugins/gofon/reports/contents.tpl:32 +msgid "Destination" +msgstr "Doel" + +#: plugins/gofon/reports/contents.tpl:33 +msgid "Channel" +msgstr "Kanaal" + +#: plugins/gofon/reports/contents.tpl:34 +#: plugins/generic/references/class_reference.inc:42 +msgid "Application" +msgstr "Programma" + +#: plugins/gofon/reports/contents.tpl:36 +msgid "Duration" +msgstr "Tijdsduur" + +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:114 +msgid "This account has no phone extensions." +msgstr "Dit account heeft geen telefoon mogelijkheden." + +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:124 +msgid "Remove phone account" +msgstr "Verwijder telefoon account" + +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:125 +msgid "" +"This account has phone features enabled. You can disable them by clicking " +"below." +msgstr "" +"Dit account heeft telefoon mogelijkheden ingeschakeld. U kunt deze " +"uitschakelen door de knop hieronder te gebruiken." + +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:127 +msgid "Create phone account" +msgstr "Telefoon account aanmaken" + +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:128 +msgid "" +"This account has phone features disabled. You can enable them by clicking " +"below." +msgstr "" +"Dit account heeft telefoon mogelijkheden uitgeschakeld. U kunt deze " +"inschakelen door de knop hieronder te gebruiken." + +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:140 +msgid "Please enter a valid phone number!" +msgstr "Geef a.u.b. een geldig telefoonnummer in!" + +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:176 +msgid "Choose your private phone" +msgstr "Kies uw privé telefoon" + +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:281 +#, php-format +msgid "You need to specify at least one phone number!" +msgstr "U dient tenminste een telefoonnummer op te geven!" + +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:295 +#, php-format +msgid "The number '%s' is no valid phone number!" +msgstr "Het nummer '%s' is geen geldig telefoonnummer!" + +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:298 +#, php-format +msgid "The timeout '%s' contains invalid characters!" +msgstr "De timeout '%s' bevat ongeldige karakters!" + +#: plugins/gofon/phoneaccount/main.inc:120 +msgid "Phone settings" +msgstr "Telefoon instellingen" + +#: plugins/gofon/phoneaccount/generic.tpl:16 +msgid "Answering machine" +msgstr "Antwoord apparaat" + +#: plugins/gofon/phoneaccount/generic.tpl:22 +#: plugins/gofon/phoneaccount/generic.tpl:25 +msgid "Deliver missed calls as mail" +msgstr "Lever gemiste oproepen als mail af" + +#: plugins/gofon/phoneaccount/generic.tpl:39 +msgid "Phone numbers" +msgstr "Telefoonnummers" + +#: plugins/gofon/phoneaccount/generic.tpl:55 +msgid "Forward calls to" +msgstr "Stuur oproepen door naar" + +#: plugins/gofon/phoneaccount/generic.tpl:59 +msgid "Phone number" +msgstr "Telefoonnummer" + +#: plugins/gofon/phoneaccount/generic.tpl:59 +msgid "Timeout (s)" +msgstr "Timeout (s)" + +#: plugins/addons/logview/main.inc:23 +msgid "System log view" +msgstr "Systeem log weergave" + +#: plugins/addons/logview/class_logview.inc:6 +msgid "System logs" +msgstr "Systeem logs" + +#: plugins/addons/logview/class_logview.inc:36 +msgid "No LOG servers defined!" +msgstr "Geen LOG servers gedefinieerd!" + +#: plugins/addons/logview/class_logview.inc:43 +#: plugins/addons/logview/class_logview.inc:131 +msgid "Can't connect to log database, no logs can be shown!" +msgstr "" +"Kan niet met de log database verbinden. Logs kunnen niet getoond worden!" + +#: plugins/addons/logview/class_logview.inc:47 +#: plugins/addons/logview/class_logview.inc:135 +msgid "Can't select log database for log generation!" +msgstr "Kan de log database voor log generatie niet selecteren!" + +#: plugins/addons/logview/class_logview.inc:56 +#: plugins/addons/logview/class_logview.inc:70 +#: plugins/addons/logview/class_logview.inc:208 +msgid "Query for log database failed!" +msgstr "Zoekopdracht binnen de log database is mislukt!" + +#: plugins/addons/logview/class_logview.inc:62 +#: plugins/addons/logview/class_logview.inc:76 +#: plugins/addons/addressbook/class_addressbook.inc:463 +msgid "All" +msgstr "Alle" + +#: plugins/addons/logview/class_logview.inc:80 +msgid "one hour" +msgstr "1 uur" + +#: plugins/addons/logview/class_logview.inc:80 +msgid "6 hours" +msgstr "6 uur" + +#: plugins/addons/logview/class_logview.inc:81 +msgid "12 hours" +msgstr "12 uur" + +#: plugins/addons/logview/class_logview.inc:81 +msgid "24 hours" +msgstr "24 uur" + +#: plugins/addons/logview/class_logview.inc:82 +msgid "2 days" +msgstr "2 dagen" + +#: plugins/addons/logview/class_logview.inc:82 +msgid "one week" +msgstr "1 week" + +#: plugins/addons/logview/class_logview.inc:83 +msgid "2 weeks" +msgstr "2 weken" + +#: plugins/addons/logview/class_logview.inc:83 +msgid "one month" +msgstr "1 maand" + +#: plugins/addons/logview/contents.tpl:12 +msgid "Show hosts" +msgstr "Toon computers" + +#: plugins/addons/logview/contents.tpl:20 +msgid "Log level" +msgstr "Log prioriteit" + +#: plugins/addons/logview/contents.tpl:37 +msgid "Time interval" +msgstr "Tijd interval" + +#: plugins/addons/logview/contents.tpl:46 +msgid "Enter string to search for" +msgstr "Voer de te zoeken string in" + +#: plugins/addons/logview/contents.tpl:58 +msgid "Ruleset" +msgstr "Ruleset" + +#: plugins/addons/logview/contents.tpl:81 +msgid "Level" +msgstr "Prioriteit" + +#: plugins/addons/logview/contents.tpl:82 +msgid "Hostname" +msgstr "Computernaam" + +#: plugins/addons/logview/contents.tpl:84 +msgid "Message" +msgstr "Bericht" + +#: plugins/addons/addressbook/dial.tpl:3 +msgid "Dial connection..." +msgstr "Bel..." + +#: plugins/addons/addressbook/dial.tpl:11 +#: plugins/addons/addressbook/class_addressbook.inc:337 +#: plugins/addons/addressbook/class_addressbook.inc:339 +#: plugins/addons/addressbook/class_addressbook.inc:340 +#: plugins/addons/addressbook/class_addressbook.inc:414 +msgid "Dial" +msgstr "Kies" + +#: plugins/addons/addressbook/address_edit.tpl:4 +msgid "Choose the department to store entry in" +msgstr "Selecteer de afdeling waarin de invoer bewaard wordt." + +#: plugins/addons/addressbook/address_edit.tpl:16 +#: plugins/addons/addressbook/address_info.tpl:12 +msgid "Personal" +msgstr "Persoonlijk" + +#: plugins/addons/addressbook/address_edit.tpl:23 +#: plugins/addons/addressbook/address_info.tpl:19 +msgid "Initials" +msgstr "Initialen" + +#: plugins/addons/addressbook/address_edit.tpl:26 +#: plugins/addons/addressbook/address_info.tpl:22 +#: plugins/personal/generic/generic.tpl:42 +msgid "Personal title" +msgstr "Persoonlijke titel" + +#: plugins/addons/addressbook/address_edit.tpl:33 +#: plugins/addons/addressbook/address_info.tpl:29 +#: plugins/addons/addressbook/contents.tpl:15 +msgid "Private" +msgstr "Prive" + +#: plugins/addons/addressbook/address_edit.tpl:44 +#: plugins/addons/addressbook/address_info.tpl:40 +#: plugins/addons/addressbook/contents.tpl:15 +#: plugins/personal/generic/generic.tpl:221 +msgid "Mobile" +msgstr "GSM nummer" + +#: plugins/addons/addressbook/address_edit.tpl:47 +#: plugins/addons/addressbook/address_info.tpl:43 +msgid "Email" +msgstr "E-mail" + +#: plugins/addons/addressbook/address_edit.tpl:57 +#: plugins/addons/addressbook/address_info.tpl:53 +msgid "Organizational" +msgstr "Bedrijfsmatig" + +#: plugins/addons/addressbook/address_edit.tpl:65 +#: plugins/addons/addressbook/address_info.tpl:61 +msgid "Company" +msgstr "Bedrijf" + +#: plugins/addons/addressbook/address_edit.tpl:68 +#: plugins/addons/addressbook/address_info.tpl:64 +#: plugins/generic/references/class_reference.inc:38 +#: plugins/personal/generic/generic.tpl:177 +msgid "Department" +msgstr "Afdeling" + +#: plugins/addons/addressbook/address_edit.tpl:71 +#: plugins/addons/addressbook/address_info.tpl:67 +msgid "City" +msgstr "Plaats" + +#: plugins/addons/addressbook/address_edit.tpl:74 +#: plugins/addons/addressbook/address_info.tpl:70 +#: plugins/personal/generic/generic.tpl:329 +msgid "Postal code" +msgstr "Postcode" + +#: plugins/addons/addressbook/address_edit.tpl:77 +#: plugins/addons/addressbook/address_info.tpl:73 +msgid "Country" +msgstr "Land" + +#: plugins/addons/addressbook/address_edit.tpl:95 +#: plugins/addons/addressbook/address_info.tpl:91 +#: plugins/personal/generic/generic.tpl:225 +msgid "Pager" +msgstr "Pieper nummer" + +#: plugins/addons/addressbook/address_edit.tpl:107 +#: plugins/personal/generic/generic_picture.tpl:29 +msgid "Save" +msgstr "Opslaan" + +#: plugins/addons/addressbook/class_addressbook.inc:6 +msgid "Addressbook" +msgstr "Adresboek" + +#: plugins/addons/addressbook/class_addressbook.inc:143 +#, php-format +msgid "Dial from %s to %s now?" +msgstr "Nu van %s naar %s bellen?" + +#: plugins/addons/addressbook/class_addressbook.inc:147 +msgid "" +"You have no personal phone number set. Please change that in order to " +"perform direct dials." +msgstr "" +"U heeft geen privé telefoonnummer opgegeven. Verander dit a.u.b. om direkt " +"te kunnen kiezen" + +#: plugins/addons/addressbook/class_addressbook.inc:176 +#: plugins/addons/addressbook/class_addressbook.inc:280 +msgid "You are not allowed to delete this entry!" +msgstr "U heeft geen toestemming om deze gegevens te verwijderen!" + +#: plugins/addons/addressbook/class_addressbook.inc:274 +#, php-format +msgid "You're about to delete the entry %s." +msgstr "U staat op het punt de invoer %s te verwijderen." + +#: plugins/addons/addressbook/class_addressbook.inc:343 +#, php-format +msgid "Save contact for %s as vcard" +msgstr "Sla contact voor %s op als vcard" + +#: plugins/addons/addressbook/class_addressbook.inc:346 +#, php-format +msgid "Send mail to %s" +msgstr "Stuur mail naar %s" + +#: plugins/addons/addressbook/class_addressbook.inc:426 +msgid "global addressbook" +msgstr "globaal adresboek" + +#: plugins/addons/addressbook/class_addressbook.inc:428 +msgid "organizations user database" +msgstr "gebruikersbestand van de organisatie" + +#: plugins/addons/addressbook/class_addressbook.inc:432 +#, php-format +msgid "Contact stored in %s" +msgstr "Contact opgeslagen in %s" + +#: plugins/addons/addressbook/class_addressbook.inc:434 +msgid "Creating new entry in" +msgstr "Aanmaken van de invoer in" + +#: plugins/addons/addressbook/class_addressbook.inc:464 +msgid "Work phone" +msgstr "Telefoonnummer (Werk)" + +#: plugins/addons/addressbook/class_addressbook.inc:464 +msgid "Cell phone" +msgstr "GSM nummer" + +#: plugins/addons/addressbook/class_addressbook.inc:465 +msgid "Home phone" +msgstr "Telefoonnumer (Thuis)" + +#: plugins/addons/addressbook/class_addressbook.inc:465 +msgid "User ID" +msgstr "Gebruikers ID" + +#: plugins/addons/addressbook/class_addressbook.inc:499 +#: plugins/addons/addressbook/class_addressbook.inc:521 +#: plugins/personal/generic/class_user.inc:892 +#: plugins/personal/generic/class_user.inc:914 +msgid "The field 'Given name' contains invalid characters." +msgstr "Het veld 'Voornaam' bevat ongeldige karakters." + +#: plugins/addons/addressbook/class_addressbook.inc:513 +#: plugins/personal/generic/class_user.inc:906 +msgid "The field 'Mobile' contains an invalid phone number." +msgstr "Het veld 'GSM nummer' bevat een ongeldig telefoonnummer" + +#: plugins/addons/addressbook/class_addressbook.inc:516 +#: plugins/personal/generic/class_user.inc:909 +msgid "The field 'Pager' contains an invalid phone number." +msgstr "Het veld 'Pieper nummer' bevat een ongeldig telefoonnummer." + +#: plugins/addons/addressbook/class_addressbook.inc:529 +#: plugins/personal/mail/class_mailAccount.inc:657 +#: plugins/personal/mail/class_mailAccount.inc:661 +msgid "Please enter a valid email address in 'Primary address' field." +msgstr "Geef a.u.b. een geldig e-mail adres voor het 'Primair adres' op." + +#: plugins/addons/addressbook/class_addressbook.inc:537 +msgid "" +"Cannot create a unique DN for your entry. Please fill more formular fields." +msgstr "" +"Kan geen unieke DN aanmaken voor uw invoer. Vul a.u.b. meer formulier velden " +"in." + +#: plugins/addons/addressbook/class_addressbook.inc:549 +msgid "" +"You have no permissions to create or modify a global address book entry." +msgstr "" +"U heeft geen toestemming om globale adresboek invoeren te wijzigen of aan te " +"maken." + +#: plugins/addons/addressbook/main.inc:23 +msgid "Address book" +msgstr "Adresboek" + +#: plugins/addons/addressbook/remove.tpl:7 +msgid "" +"This includes all addressbook data in this entry. Please double check if " +"your really want to do this since there is no way for GOsa to get your data " +"back." +msgstr "" +"Dit omvat alle adresboek data in dit record. Verzeker uzelf ervan dat dit " +"hetgeen is dat u wenst, aangezien er geen manier voor GOsa is om deze data " +"terug te halen." + +#: plugins/addons/addressbook/contents.tpl:15 +msgid "Contact" +msgstr "Contact" + +#: plugins/addons/addressbook/contents.tpl:37 +msgid "" +"The telephone list plugin provides list and search facilities for the people " +"in your site. You may want to specify the asterisk [*] like in 'Go*us' to " +"find 'Gonicus'. Use the filters below to narrow down your search." +msgstr "" +"De telefoonlijst module biedt zoek en weergave mogelijkheden voor de mensen " +"binnen uw organisatie. U kunt een asterisk (*) gebruiken als wildcard. " +"'Go*us' zal bijvoorbeeld 'Gonicus' vinden. Gebruik de filters hieronder om " +"uw zoekopdracht verder te verfijnen." + +#: plugins/addons/addressbook/contents.tpl:42 +msgid "Actions" +msgstr "Acties" + +#: plugins/addons/addressbook/contents.tpl:47 +msgid "Add entry" +msgstr "Record toevoegen" + +#: plugins/addons/addressbook/contents.tpl:50 +msgid "Edit entry" +msgstr "Record bewerken" + +#: plugins/addons/addressbook/contents.tpl:52 +msgid "Remove entry" +msgstr "Record verwijderen" + +#: plugins/addons/addressbook/contents.tpl:67 +msgid "Select to see regular users" +msgstr "Selecteer om gewone gebruikers te tonen" + +#: plugins/addons/addressbook/contents.tpl:67 +msgid "Show organizational entries" +msgstr "Toon gebruikers binnen de organisatie" + +#: plugins/addons/addressbook/contents.tpl:68 +msgid "Select to see users in addressbook" +msgstr "Selecteer om gebruikers in het adresboek te zien" + +#: plugins/addons/addressbook/contents.tpl:68 +msgid "Show addressbook entries" +msgstr "Toon adresboek records" + +#: plugins/addons/addressbook/contents.tpl:71 +msgid "Display results for department" +msgstr "Toon resultaten voor afdeling" + +#: plugins/addons/addressbook/contents.tpl:78 +msgid "Search string" +msgstr "Zoekstring" + +#: plugins/addons/addressbook/contents.tpl:81 +msgid "Match object" +msgstr "Overeenkomend object" + +#: plugins/addons/addressbook/contents.tpl:83 +msgid "Choose the object that will be searched in" +msgstr "Selecteer het object waarbinnen gezocht zal worden" + +#: plugins/addons/ldapmanager/contentexport.tpl:3 +msgid "" +"The LDIF export plugin provides methods to download a complete snapshot of " +"the running LDAP directory as ldif. You may save these files for backup " +"purpose or when initializing a new server." +msgstr "" +"De LDIF export module biedt mogelijkheden om de complete inhoud van uw LDAP " +"database te downloaden als een LDIF bestand. U kunt deze bestanden voor " +"backup doeleinden opslaan of gebruiken voor het initialiseren van een nieuwe " +"server." + +#: plugins/addons/ldapmanager/contentexport.tpl:13 +msgid "Export single entry" +msgstr "Exporteer een enkel record" + +#: plugins/addons/ldapmanager/contentexport.tpl:24 +msgid "Export complete LDIF for" +msgstr "Exporteer een complete LDIF voor" + +#: plugins/addons/ldapmanager/contentexport.tpl:27 +#: plugins/addons/ldapmanager/contentexport.tpl:42 +msgid "Choose the department you want to Export" +msgstr "Selecteer de afdeling die u wilt exporteren" + +#: plugins/addons/ldapmanager/contentexport.tpl:39 +msgid "Export IVBB LDIF for" +msgstr "Exporteer IVBB LDIF voor" + +#: plugins/addons/ldapmanager/contentexport.tpl:59 +msgid "Export successfull" +msgstr "Export was succesvol" + +#: plugins/addons/ldapmanager/contentexport.tpl:63 +msgid "Click here to save the complete LDAP database to a file" +msgstr "Klik hier om de complete LDAP database op te slaan in een bestand." + +#: plugins/addons/ldapmanager/contentexport.tpl:63 +msgid "Click here to save the LDAP Export " +msgstr "Klik hier om de LDAP export op te slaan in een bestand." + +#: plugins/addons/ldapmanager/main.inc:23 +#: plugins/addons/ldapmanager/class_ldif.inc:7 +msgid "LDAP manager" +msgstr "LDAP beheerder" + +#: plugins/addons/ldapmanager/class_import.inc:6 +#: plugins/addons/ldapmanager/class_csvimport.inc:6 +msgid "LDIF export" +msgstr "LDIF export" + +#: plugins/addons/ldapmanager/class_import.inc:38 +msgid "You've no permission to do LDAP imports." +msgstr "U heeft geen toestemming om LDAP gegevens te importeren." + +#: plugins/addons/ldapmanager/class_import.inc:51 +#: plugins/addons/ldapmanager/class_csvimport.inc:302 +msgid "The specified file is empty." +msgstr "Het opgegeven bestand is leeg." + +#: plugins/addons/ldapmanager/class_import.inc:58 +#: plugins/addons/ldapmanager/class_import.inc:66 +#: plugins/addons/ldapmanager/class_csvimport.inc:297 +#: plugins/addons/ldapmanager/class_csvimport.inc:308 +#: plugins/addons/ldapmanager/class_csvimport.inc:313 +msgid "There is no file uploaded." +msgstr "Er is geen bestand ge-upload." + +#: plugins/addons/ldapmanager/class_import.inc:104 +msgid "Unknown Error" +msgstr "Onbekende fout" + +#: plugins/addons/ldapmanager/contentcsv.tpl:2 +msgid "" +"The CSV import plugin provides methods to generate user accounts from a file " +"containing Comma Seperated Values. The administrator can decide which " +"columns should be transfered to which attribute. Note that you must have at " +"least the UID, GIVENNAME and SURENAME set." +msgstr "" +"De CSV import module bevat mothodes om gebruikers accounts aan te maken " +"vanuit een bestand met komma gescheiden waardes. De beheerder kan bepalen " +"welke kolommen vertaald moeten worden naar welke atributen. Merk op dat " +"u tenminste het UID, GIVENNAME en SURNAME atribuut dient in te stellen." + +#: plugins/addons/ldapmanager/contentcsv.tpl:11 +msgid "Select CSV file to import" +msgstr "Selecteer het te importeren CSV bestand" + +#: plugins/addons/ldapmanager/contentcsv.tpl:15 +#: plugins/addons/ldapmanager/contentimport.tpl:17 +msgid "Browse" +msgstr "Doorzoek" + +#: plugins/addons/ldapmanager/contentcsv.tpl:20 +msgid "Select template" +msgstr "Selecteer sjabloon" + +#: plugins/addons/ldapmanager/contentcsv.tpl:35 +msgid "All entries have been written to the LDAP database successfully." +msgstr "" +"Alle gegevens zijn succesvol naar de LDAP database weggeschreven." + +#: plugins/addons/ldapmanager/contentcsv.tpl:37 +msgid "Oups. There was an error during the import of your data." +msgstr "" +"Oeps. Er is een fout opgetreden bij het importeren van uw data." + +#: plugins/addons/ldapmanager/contentcsv.tpl:40 +msgid "Here is the status report for the import:" +msgstr "Hier is het status raport voor de import" + +#: plugins/addons/ldapmanager/contentcsv.tpl:88 +msgid "Selected Template" +msgstr "Geselecteerd Sjabloon" + +#: plugins/addons/ldapmanager/class_export.inc:7 +msgid "LDIF CSV import" +msgstr "LDIF CSV import" + +#: plugins/addons/ldapmanager/class_export.inc:35 +msgid "You've no permission to do LDAP exports." +msgstr "U heeft geen toestemming om LDAP gegevens te exporteren." + +#: plugins/addons/ldapmanager/class_export.inc:76 +msgid "Error while exporting the requested entries!" +msgstr "Fout bij het exporteren van de gevraagde gegevens!" + +#: plugins/addons/ldapmanager/contentimport.tpl:3 +msgid "" +"The LDIF import plugin provides methods to upload a set of entries to your " +"running LDAP directory as ldif. You may use this to add new or modify " +"existing entries. Remember that GOsa will not check your ldifs for GOsa " +"conformance." +msgstr "" +"De LDIF import module biedt mogelijkheden om gegevens in uw draaiende LDAP " +"database te importeren als een LDIF bestand. U kunt deze functionaliteit " +"gebruiken om gegevens toe te voegen of te veranderen. Let erop dat GOsa uw " +"ldifs niet controleert op GOsa conformiteit." + +#: plugins/addons/ldapmanager/contentimport.tpl:12 +msgid "Import LDIF File" +msgstr "Importeer LDIF bestand" + +#: plugins/addons/ldapmanager/contentimport.tpl:26 +msgid "Modify existing attributes" +msgstr "Verander bestaand atribuut" + +#: plugins/addons/ldapmanager/contentimport.tpl:39 +msgid "Overwrite existing entry" +msgstr "Overschrijf bestaande gegevens" + +#: plugins/addons/ldapmanager/contentimport.tpl:47 +msgid "Import successfull" +msgstr "Import was succesvol" + +#: plugins/addons/ldapmanager/class_csvimport.inc:93 +msgid "You've no permission to do CSV imports." +msgstr "U heeft geen toestemming om CSV gegevens te importeren." + +#: plugins/addons/ldapmanager/class_csvimport.inc:150 +msgid "Need 'sn','givenName' and 'uid' to create user" +msgstr "'sn', 'givenName' en 'uid' zijn nodig om een gebruiker aan te maken" + +#: plugins/addons/ldapmanager/class_csvimport.inc:198 +msgid "failed" +msgstr "mislukt" + +#: plugins/addons/ldapmanager/class_csvimport.inc:202 +msgid "ok" +msgstr "okee" + +#: plugins/addons/ldapmanager/class_csvimport.inc:259 +msgid "status" +msgstr "status" + +#: plugins/addons/ldapmanager/class_csvimport.inc:263 +#, php-format +msgid "An Error Occured while inserting entry %s - process aborted" +msgstr "Er is een fout opgetreden bij het invoegen van invoer %s - Het proces is afgebroken" + +#: plugins/addons/ldapmanager/class_csvimport.inc:288 +msgid "Nothing to import !." +msgstr "Er is niets te importeren!" + +#: plugins/addons/ldapmanager/class_csvimport.inc:438 +msgid "The selected file does not contain any CSV Data..." +msgstr "Het geselecteerde bestand bevat geen enkele CSV data..." + +#: plugins/generic/references/class_reference.inc:22 +#: plugins/personal/posix/class_posixAccount.inc:16 +msgid "UNIX" +msgstr "UNIX" + +#: plugins/generic/references/class_reference.inc:32 +#: plugins/personal/connectivity/class_proxyAccount.inc:5 +msgid "Proxy" +msgstr "Proxy" + +#: plugins/generic/references/class_reference.inc:34 +#: plugins/personal/connectivity/class_pureftpdAccount.inc:6 +msgid "FTP" +msgstr "Ftp" + +#: plugins/generic/references/class_reference.inc:36 +msgid "Group" +msgstr "Groep" + +#: plugins/generic/references/class_reference.inc:46 +msgid "Thin Client" +msgstr "Thin Client" + +#: plugins/generic/references/class_reference.inc:48 +msgid "Workstation" +msgstr "Werkstation" + +#: plugins/generic/references/class_reference.inc:50 +msgid "Object group" +msgstr "Objectgroep" + +#: plugins/generic/references/contents.tpl:11 +msgid "Object name" +msgstr "Objectnaam" + +#: plugins/generic/references/contents.tpl:18 +msgid "This object has no relationship to other objects." +msgstr "Dit object heeft geen relatie met andere objecten." + +#: plugins/generic/welcome/main.inc:24 +#, php-format +msgid "Welcome %s!" +msgstr "Welkom %s!" + +#: plugins/generic/welcome/welcome.tpl:4 +msgid "" +"This is the GOsa main screen. You can select your tasks from the menu on the " +"left, or by choosing one of the pictogramms below. All changes apply " +"directly to your companies LDAP-Server." +msgstr "" +"Dit is het GOsa hoofdscherm. U kunt uw taken selecteren m.b.v. het menu aan " +"de linkerzijde of door een van de pictogrammen hieronder te gebruiken. Alle " +"veranderingen worden meteen doorgevoerd op uw LDAP server." + +#: plugins/generic/welcome/welcome.tpl:8 +msgid "" +"Use Sign out on the upper left to close the connection and Main to get back to the pictogram view." +msgstr "" +"Gebruik Uitloggen linksboven om de verbinding te verbreken en " +"Hoofdmenu om terug te gaan naar het onderstaande pictogram overzicht." + +#: plugins/generic/welcome/welcome.tpl:15 +msgid "The GOsa team" +msgstr "Het GOsa team" + +#: plugins/personal/mail/class_mailAccount.inc:163 +msgid "No DESC tag in vacation file:" +msgstr "Er is geen DESC variabele aanwezig in het afwezigheidsbestand:" + +#: plugins/personal/mail/class_mailAccount.inc:189 +msgid "This account has no mail extensions." +msgstr "Dit account heeft mail mogelijkheden uitgeschakeld." + +#: plugins/personal/mail/class_mailAccount.inc:249 +msgid "" +"You're trying to add an invalid email address to the list of forwarders." +msgstr "" +"U probeert een ongeldig email adres toe te voegen aan de doorstuurlijst." + +#: plugins/personal/mail/main.inc:124 +msgid "User mail settings" +msgstr "Gebruikers mail instellingen" + +#: plugins/personal/mail/generic.tpl:13 +msgid "Specify the mail server where the user will be hosted on" +msgstr "Specificeer de mailserver waarop het account opgeslagen wordt" + +#: plugins/personal/mail/generic.tpl:65 +msgid "Mail options" +msgstr "Mail opties" + +#: plugins/personal/mail/generic.tpl:70 +msgid "Select if you want to forward mails without getting own copies of them" +msgstr "" +"Selecteer indien u mail door wil sturen zonder zelf kopieën te ontvangen" + +#: plugins/personal/mail/generic.tpl:70 +msgid "No delivery to own mailbox" +msgstr "Geen aflevering in eigen mailbox" + +#: plugins/personal/mail/generic.tpl:73 +msgid "" +"Select to automatically response with the vacation message defined below" +msgstr "" +"Selecteer om automatisch te reageren met het hieronder gedefinieerde " +"afwezigheidsbericht" + +#: plugins/personal/mail/generic.tpl:73 +msgid "Activate vacation message" +msgstr "Activeer afwezigheidsbericht" + +#: plugins/personal/mail/generic.tpl:80 +msgid "Select if you want to filter this mails thru spamassassin" +msgstr "Selecteer indien u mail wilt filteren door spamassassin" + +#: plugins/personal/mail/generic.tpl:80 +msgid "Move mails tagged with spam level greater than" +msgstr "Verplaats mails met een spam nivo groter dan" + +#: plugins/personal/mail/generic.tpl:81 +msgid "Choose spam level - smaller values are more sensitive" +msgstr "Selecteer een spam nivo - kleinere waardes zijn gevoeliger" + +#: plugins/personal/mail/generic.tpl:84 +msgid "to folder" +msgstr "naar map" + +#: plugins/personal/mail/generic.tpl:90 +msgid "Reject mails bigger than" +msgstr "Afwijzing van mails groter dan" + +#: plugins/personal/mail/generic.tpl:92 +#: plugins/personal/connectivity/pureftpd.tpl:40 +#: plugins/personal/connectivity/class_proxyAccount.inc:69 +msgid "MB" +msgstr "MB" + +#: plugins/personal/mail/generic.tpl:98 +msgid "Vacation message" +msgstr "Afwezigheidsbericht" + +#: plugins/personal/mail/generic.tpl:113 +msgid "Forward messages to" +msgstr "Stuur berichten door naar" + +#: plugins/personal/mail/generic.tpl:133 +msgid "Advanced mail options" +msgstr "Geavanceerde mail opties" + +#: plugins/personal/mail/generic.tpl:138 +msgid "Select if user can only send and receive inside his own domain" +msgstr "" +"Selecteer om een gebruiker alleen binnen het eigen domein mail te laten " +"ontvangen en verzenden" + +#: plugins/personal/mail/generic.tpl:139 +msgid "User is only allowed to send and receive local mails" +msgstr "De gebruiker mag alleen lokale mails versturen en ontvangen" + +#: plugins/personal/mail/generic.tpl:146 +msgid "Use custom sieve script" +msgstr "Gebruik een eigen sieve script" + +#: plugins/personal/mail/generic.tpl:146 +msgid "disables all Mail options!" +msgstr "schakelt alle mail opties uit!" + +#: plugins/personal/posix/posix_groups.tpl:6 +msgid "Select groups to add" +msgstr "Selecteer toe te voegen groepen" + +#: plugins/personal/posix/class_posixAccount.inc:172 +msgid "unconfigured" +msgstr "niet geconfigureerd" + +#: plugins/personal/posix/class_posixAccount.inc:218 +msgid "This account has no unix extensions." +msgstr "Dit account heeft geen UNIX mogelijkheden." + +#: plugins/personal/posix/class_posixAccount.inc:238 +#: plugins/personal/posix/class_posixAccount.inc:241 +msgid "Remove posix account" +msgstr "Verwijder UNIX account" + +#: plugins/personal/posix/class_posixAccount.inc:239 +msgid "" +"This account has unix features enabled. To disable them, you'll need to " +"remove the samba account first." +msgstr "" +"Dit account heeft UNIX mogelijkheden ingeschakeld. Om deze te verwijderen " +"moet u eerst het samba account verwijderen." + +#: plugins/personal/posix/class_posixAccount.inc:242 +msgid "" +"This account has posix features enabled. You can disable them by clicking " +"below." +msgstr "" +"Dit account heeft POSIX mogelijkheden ingeschakeld. U kunt deze " +"uitschakelend door de knop hieronder te gebruiken." + +#: plugins/personal/posix/class_posixAccount.inc:245 +msgid "Create posix account" +msgstr "UNIX account aanmaken" + +#: plugins/personal/posix/class_posixAccount.inc:246 +msgid "" +"This account has posix features disabled. You can enable them by clicking " +"below." +msgstr "" +"Dit account heeft POSIX mogelijkheden uitgeschakeld. U kunt deze inschakelen " +"door de knop hieronder te gebruiken." + +#: plugins/personal/posix/class_posixAccount.inc:429 +#, php-format +msgid "Password can't be changed up to %s days after last change" +msgstr "" +"Het wachtwoord kan niet veranderd worden tot %s dagen na de laatste " +"verandering" + +#: plugins/personal/posix/class_posixAccount.inc:431 +#, php-format +msgid "Password must be changed after %s days" +msgstr "Wachtwoord moet veranderd worden na %s dagen" + +#: plugins/personal/posix/class_posixAccount.inc:433 +#, php-format +msgid "Disable account after %s days of inactivity after password expiery" +msgstr "" +"Schakel account uit na %s dagen inactiviteit na wachtwoord verloopdatum" + +#: plugins/personal/posix/class_posixAccount.inc:435 +#, php-format +msgid "Warn user %s days before password expiery" +msgstr "Waarschuw de gebruiker %s dagen voordat het wachtwoord verloopt" + +#: plugins/personal/posix/class_posixAccount.inc:509 +msgid "full access" +msgstr "volledige toegang" + +#: plugins/personal/posix/class_posixAccount.inc:510 +msgid "allow access to these hosts" +msgstr "sta toegang op deze computers toe" + +#: plugins/personal/posix/class_posixAccount.inc:667 +msgid "Failed: overriding lock" +msgstr "Mislukt: Blokkering wordt overschreven" + +#: plugins/personal/posix/class_posixAccount.inc:815 +msgid "The required field 'Home directory' is not set." +msgstr "Het vereiste veld 'Home directory' is leeg." + +#: plugins/personal/posix/class_posixAccount.inc:818 +msgid "Please enter a valid path in 'Home directory' field." +msgstr "Geef a.u.b. een geldige directory op in het 'Home directory' veld." + +#: plugins/personal/posix/class_posixAccount.inc:826 +msgid "Value specified as 'UID' is not valid." +msgstr "De opgegeven 'UID' waarde is niet correct." + +#: plugins/personal/posix/class_posixAccount.inc:829 +msgid "Value specified as 'UID' is too small." +msgstr "De opgegeven 'UID' waarde is te klein." + +#: plugins/personal/posix/class_posixAccount.inc:845 +msgid "Value specified as 'shadowMin' is not valid." +msgstr "De opgegeven 'shadowMin' waarde is niet geldig." + +#: plugins/personal/posix/class_posixAccount.inc:850 +msgid "Value specified as 'shadowMax' is not valid." +msgstr "De opgegeven 'shadowMax' waarde is niet geldig." + +#: plugins/personal/posix/class_posixAccount.inc:855 +msgid "Value specified as 'shadowWarning' is not valid." +msgstr "De opgegeven 'shadowWarning' waarde is niet geldig." + +#: plugins/personal/posix/class_posixAccount.inc:858 +msgid "'shadowWarning' without 'shadowMax' makes no sense." +msgstr "'shadowWarning' zonder 'shadowMax' is niet logisch." + +#: plugins/personal/posix/class_posixAccount.inc:861 +msgid "Value specified as 'shadowWarning' should be smaller than 'shadowMax'." +msgstr "" +"De waarde opgegeven voor 'shadowWarning' moet kleiner zijn dan 'shadowMax'." + +#: plugins/personal/posix/class_posixAccount.inc:864 +msgid "Value specified as 'shadowWarning' should be greater than 'shadowMin'." +msgstr "" +"De waarde opgegeven voor 'shadowWarning' moet groter dan 'shadowMin' zijn." + +#: plugins/personal/posix/class_posixAccount.inc:869 +msgid "Value specified as 'shadowInactive' is not valid." +msgstr "De waarde opgegeven voor 'shadowInactive' is niet geldig." + +#: plugins/personal/posix/class_posixAccount.inc:872 +msgid "'shadowInactive' without 'shadowMax' makes no sense." +msgstr "'shadowInactive' zonder 'shadowMax' is niet logisch." + +#: plugins/personal/posix/class_posixAccount.inc:877 +msgid "Value specified as 'shadowMin' should be smaller than 'shadowMax'." +msgstr "" +"De waarde opgegeven voor 'shadowMin' moet kleiner zijn dan 'shadowMax'." + +#: plugins/personal/posix/main.inc:131 +msgid "Unix settings" +msgstr "Unix instellingen" + +#: plugins/personal/posix/trust_machines.tpl:6 +msgid "Select systems to add" +msgstr "Selecteer de toe te voegen systemen" + +#: plugins/personal/posix/posix_shadow.tpl:5 +msgid "User must change password on first login" +msgstr "Gebruiker moet het wachtwoord bij eerste aanmelding veranderen" + +#: plugins/personal/posix/posix_shadow.tpl:19 +#: plugins/personal/samba/samba2.tpl:68 plugins/personal/samba/samba3.tpl:225 +msgid "Password expires on" +msgstr "Wachtwoord verloopt op" + +#: plugins/personal/posix/generic.tpl:7 plugins/personal/samba/samba3.tpl:13 +#: plugins/personal/samba/samba3.tpl:65 +#: plugins/personal/samba/class_sambaAccount.inc:587 +msgid "Home directory" +msgstr "Home directory" + +#: plugins/personal/posix/generic.tpl:13 +msgid "Shell" +msgstr "Shell" + +#: plugins/personal/posix/generic.tpl:21 +msgid "Primary group" +msgstr "Primaire groep" + +#: plugins/personal/posix/generic.tpl:38 +msgid "Force UID/GID" +msgstr "Forceer UID/GID" + +#: plugins/personal/posix/generic.tpl:40 +msgid "UID" +msgstr "UID" + +#: plugins/personal/posix/generic.tpl:45 +msgid "GID" +msgstr "GID" + +#: plugins/personal/posix/generic.tpl:54 +msgid "Group membership" +msgstr "Groep lidmaatschap" + +#: plugins/personal/posix/generic.tpl:56 +msgid "(Warning: more than 16 groups are not supported by NFS!)" +msgstr "(Waarschuwing: NFS ondersteunt niet meer dan 16 groepen!)" + +#: plugins/personal/posix/generic.tpl:74 +msgid "Account" +msgstr "Account" + +#: plugins/personal/posix/generic.tpl:89 +msgid "Environment" +msgstr "Omgeving" + +#: plugins/personal/posix/generic.tpl:92 +msgid "Default printer" +msgstr "Standaard printer" + +#: plugins/personal/posix/generic.tpl:100 +msgid "Default language" +msgstr "Standaard taal" + +#: plugins/personal/posix/generic.tpl:113 +msgid "System trust" +msgstr "Systeem vertrouwen" + +#: plugins/personal/samba/samba2.tpl:13 +msgid "Samba home" +msgstr "Samba home" + +#: plugins/personal/samba/samba2.tpl:30 plugins/personal/samba/samba3.tpl:38 +msgid "Script path" +msgstr "Script directory" + +#: plugins/personal/samba/samba2.tpl:36 plugins/personal/samba/samba3.tpl:44 +#: plugins/personal/samba/samba3.tpl:75 +#: plugins/personal/samba/class_sambaAccount.inc:588 +msgid "Profile path" +msgstr "Profiel directory" + +#: plugins/personal/samba/samba2.tpl:48 plugins/personal/samba/samba3.tpl:210 +msgid "Access options" +msgstr "Toegangsopties" + +#: plugins/personal/samba/samba2.tpl:54 plugins/personal/samba/samba3.tpl:216 +msgid "Allow user to change password from client" +msgstr "Sta de gebruiker toe om zijn wachtwoord te veranderen vanaf de client" + +#: plugins/personal/samba/samba2.tpl:57 plugins/personal/samba/samba3.tpl:219 +msgid "Login from windows client requires no password" +msgstr "Inloggen vanaf een windows client vereist geen wachtwoord" + +#: plugins/personal/samba/samba2.tpl:60 plugins/personal/samba/samba3.tpl:222 +msgid "Temporary disable samba account" +msgstr "Schakel Samba account tijdelijk uit" + +#: plugins/personal/samba/samba3.tpl:23 +msgid "Domain" +msgstr "Domein" + +#: plugins/personal/samba/samba3.tpl:56 +msgid "Terminal Server" +msgstr "Terminal Server" + +#: plugins/personal/samba/samba3.tpl:62 +msgid "Allow login on terminal server" +msgstr "Sta inloggen op de terminal server toe" + +#: plugins/personal/samba/samba3.tpl:87 +msgid "Inherit client config" +msgstr "Client configuratie overnemen" + +#: plugins/personal/samba/samba3.tpl:90 +msgid "Initial program" +msgstr "Initiëel programma" + +#: plugins/personal/samba/samba3.tpl:96 +msgid "Working directory" +msgstr "Werkdirectory" + +#: plugins/personal/samba/samba3.tpl:111 +msgid "Timeout settings (in minutes)" +msgstr "Timeout instelling (in minuten)" + +#: plugins/personal/samba/samba3.tpl:116 +#: plugins/personal/samba/class_sambaAccount.inc:595 +msgid "Connection" +msgstr "Verbinding" + +#: plugins/personal/samba/samba3.tpl:125 +#: plugins/personal/samba/class_sambaAccount.inc:596 +msgid "Disconnection" +msgstr "Verbreking" + +#: plugins/personal/samba/samba3.tpl:134 +#: plugins/personal/samba/class_sambaAccount.inc:597 +msgid "IDLE" +msgstr "IDLE" + +#: plugins/personal/samba/samba3.tpl:147 +msgid "Client devices" +msgstr "Client apparaten" + +#: plugins/personal/samba/samba3.tpl:152 +msgid "Connect client drives at logon" +msgstr "Verbindt de client schijfletters bij inloggen" + +#: plugins/personal/samba/samba3.tpl:158 +msgid "Connect client printers at logon" +msgstr "Verbindt de client printers bij inloggen" + +#: plugins/personal/samba/samba3.tpl:164 +msgid "Default to main client printer" +msgstr "Stel standaard in op de hoofd client printer" + +#: plugins/personal/samba/samba3.tpl:174 +#: plugins/personal/connectivity/pureftpd.tpl:64 +msgid "Miscellaneous" +msgstr "Diverse" + +#: plugins/personal/samba/samba3.tpl:178 +msgid "Shadowing" +msgstr "Schaduwing" + +#: plugins/personal/samba/samba3.tpl:187 +msgid "On broken or timed out" +msgstr "Indien verbroken of bij timeout" + +#: plugins/personal/samba/samba3.tpl:195 +msgid "Reconnect if disconnected" +msgstr "Herstel verbinding indien verbroken" + +#: plugins/personal/samba/samba3.tpl:237 +msgid "Limit Logon Time" +msgstr "" + +#: plugins/personal/samba/samba3.tpl:249 +msgid "Limit Logoff Time" +msgstr "" + +#: plugins/personal/samba/samba3.tpl:261 +msgid "Account expires after" +msgstr "" + +#: plugins/personal/samba/samba3.tpl:281 +msgid "Allow connection from these workstations only" +msgstr "Sta alleen verbindingen van deze werkstations toe" + +#: plugins/personal/samba/class_sambaAccount.inc:193 +msgid "This account has no samba extensions." +msgstr "Dit account heeft geen samba extensies." + +#: plugins/personal/samba/class_sambaAccount.inc:202 +msgid "Remove samba account" +msgstr "Samba account verwijderen" + +#: plugins/personal/samba/class_sambaAccount.inc:203 +msgid "" +"This account has samba features enabled. You can disable them by clicking " +"below." +msgstr "" +"De samba mogelijkheden zijn ingeschakeld voor dit account. U kunt deze " +"uitschakelen door de knop hieronder te gebruiken." + +#: plugins/personal/samba/class_sambaAccount.inc:213 +#: plugins/personal/samba/class_sambaAccount.inc:216 +msgid "Create samba account" +msgstr "Samba account aanmaken" + +#: plugins/personal/samba/class_sambaAccount.inc:214 +msgid "" +"This account has samba features disabled. You can enable them by clicking " +"below." +msgstr "" +"De samba mogelijkheden zijn uitgeschakeld voor dit account. U kunt deze " +"inschakelen door de knop hieronder te gebruiken." + +#: plugins/personal/samba/class_sambaAccount.inc:217 +msgid "" +"This account has samba features disabled. Posix features are needed for " +"samba accounts, enable them first." +msgstr "" +"De samba mogelijkheden zijn uitgeschakeld voor dit account. Posix " +"mogelijkheden zijn noodzakelijk voor samba accounts. Schakel deze eerst in." + +#: plugins/personal/samba/class_sambaAccount.inc:440 +msgid "input on, notify on" +msgstr "invoer AAN, melden AAN" + +#: plugins/personal/samba/class_sambaAccount.inc:441 +msgid "input on, notify off" +msgstr "invoer AAN, Melden UIT" + +#: plugins/personal/samba/class_sambaAccount.inc:442 +msgid "input off, notify on" +msgstr "invoer UIT, Melden AAN" + +#: plugins/personal/samba/class_sambaAccount.inc:443 +msgid "input off, nofify off" +msgstr "invoer UIT, Melden UIT" + +#: plugins/personal/samba/class_sambaAccount.inc:445 +msgid "disconnect" +msgstr "verbreken" + +#: plugins/personal/samba/class_sambaAccount.inc:446 +msgid "reset" +msgstr "reset" + +#: plugins/personal/samba/class_sambaAccount.inc:448 +msgid "from any client" +msgstr "vanaf elke client" + +#: plugins/personal/samba/class_sambaAccount.inc:449 +msgid "from previous client only" +msgstr "alleen vanaf vorige client" + +#: plugins/personal/samba/class_sambaAccount.inc:590 +#, php-format +msgid "The value specified as '%s' contains invalid characters!" +msgstr "De waarde gespecificeerd als '%s' bevat ongeldige karakters!" + +#: plugins/personal/samba/class_sambaAccount.inc:600 +#, php-format +msgid "" +"The timeout property '%s' is checked and contains invalid or no characters!" +msgstr "" +"De timeout optie '%s' is geselecteerd en bevat geen of ongeldige karakters!" + +#: plugins/personal/samba/class_sambaAccount.inc:606 +msgid "" +"The windows user manager only allows eight clients. You've specified more " +"than eight." +msgstr "" +"Het Windows gebruikersbeheer programma staat slechts acht clients toe. U " +"heeft er meer dan acht opgegeven." + +#: plugins/personal/samba/class_sambaAccount.inc:780 +msgid "" +"Warning: This account has an undefined samba SID assigned. The problem can " +"not be fixed by GOsa!" +msgstr "" +"Waarschuwing: Dit account heeft een ongedefiniëerd Samba SID toegewezen " +"gekregen. Dit probleem kan niet door GOsa opgelost wordt" + +#: plugins/personal/samba/class_sambaAccount.inc:805 +msgid "" +"Warning: Can't identify users primary group - no conversion to a samba group " +"possible!" +msgstr "" +"Waarschuwing: Kan de primaire groep van de gebruiker niet identificeren - Er " +"is geen conversie naar een samba groep mogelijk!" + +#: plugins/personal/samba/main.inc:123 +msgid "Samba settings" +msgstr "Samba Instellingen" + +#: plugins/personal/samba/samba3_workstations.tpl:6 +msgid "Select workstations to add" +msgstr "Selecteer de toe te voegen werkstations" + +#: plugins/personal/samba/samba3_workstations.tpl:29 +msgid "Display workstations of department" +msgstr "Toon werkstations van afdeling" + +#: plugins/personal/samba/samba3_workstations.tpl:35 +msgid "Display workstations matching" +msgstr "Toon de overeenkomende werkstations" + +#: plugins/personal/password/password.tpl:2 +#: plugins/personal/password/changed.tpl:2 +msgid "Change password" +msgstr "Verander wachtwoord" + +#: plugins/personal/password/password.tpl:6 +msgid "" +"To change your personal password use the fields below. The changes take " +"effect immediately. Please memorize the new password, because you would't be " +"able to login without it." +msgstr "" +"Gebruik het veld hieronder om uw persoonlijke wachtwoord te veranderen. De " +"veranderingen worden direct doorgevoerd. Onthoud het nieuwe wachtwoord a.u." +"b. aangezien u niet in zult kunnen loggen zonder dit wachtwoord." + +#: plugins/personal/password/password.tpl:15 +msgid "Current password" +msgstr "Huidig wachtwoord" + +#: plugins/personal/password/password.tpl:36 +msgid "Clear fields" +msgstr "Wis velden" + +#: plugins/personal/password/main.inc:40 +msgid "" +"The password you've entered as your current password doesn't match the real " +"one." +msgstr "" +"Het wachtwoord dat u opgegeven heeft als uw huidige wachtwoord is niet " +"correct." + +#: plugins/personal/password/main.inc:43 +msgid "You need to specify your current password in order to proceed." +msgstr "U moet uw huidige wachtwoord opgeven om door te kunnen gaan." + +#: plugins/personal/password/main.inc:59 +msgid "The password used as new and current are too similar." +msgstr "" +"Het huidige wachtwoord en het nieuwe wachtwoord lijken te veel op elkaar." + +#: plugins/personal/password/main.inc:64 +msgid "The password used as new is to short." +msgstr "Het nieuw opgegeven wachtwoord is te kort." + +#: plugins/personal/password/main.inc:71 +msgid "You have no permissions to change your password." +msgstr "U heeft geen toestemming om uw wachtwoord te veranderen." + +#: plugins/personal/password/main.inc:89 +msgid "External password changer reported a problem: " +msgstr "Extern wachtwoord verander mechanisme rapporteerde een probleem:" + +#: plugins/personal/password/changed.tpl:6 +msgid "" +"You've successfully changed your password. Remember to change all programms " +"configured to use it as well." +msgstr "" +"U heeft succesvol uw wachtwoord veranderd. Denkt u eraan dat u alle " +"programma's die dit wachtwoord gebruiken ook aanpast!" + +#: plugins/personal/generic/generic_picture.tpl:6 +#: plugins/personal/generic/generic.tpl:15 +msgid "Personal picture" +msgstr "Persoonlijk plaatje" + +#: plugins/personal/generic/generic_picture.tpl:23 +msgid "Remove picture" +msgstr "Plaatje verwijderen" + +#: plugins/personal/generic/password.tpl:2 +msgid "" +"You have changed the method your password is stored in the ldap database. " +"For that reason you've to enter your password at this point again. GOsa will " +"then encode it with the selected method." +msgstr "" +"U heeft de manier waarop uw wachtwoord wordt opgeslagen in de LDAP database " +"veranderd. Daarom moet u het wachtwoord op dit moment opnieuw invoeren. GOsa " +"zal dan het wachtwoord versleutelen op de door u geselecteerde methode." + +#: plugins/personal/generic/main.inc:107 +msgid "You are not allowed to set your password!" +msgstr "U heeft geen toestemming om uw wachtwoord te veranderen!" + +#: plugins/personal/generic/main.inc:187 +msgid "Generic user information" +msgstr "Algemene gebruikersinformatie" + +#: plugins/personal/generic/generic_certs.tpl:7 +#: plugins/personal/generic/generic.tpl:138 +msgid "Certificates" +msgstr "Certificaten" + +#: plugins/personal/generic/generic_certs.tpl:14 +msgid "Standard certificate" +msgstr "Standaard certificaat" + +#: plugins/personal/generic/generic_certs.tpl:25 +msgid "S/MIME certificate" +msgstr "S/MIME certificaat" + +#: plugins/personal/generic/generic_certs.tpl:36 +msgid "PKCS12 certificate" +msgstr "PKCS12 certificaat" + +#: plugins/personal/generic/generic_certs.tpl:48 +msgid "Certificate serial number" +msgstr "Certificaat serienummer" + +#: plugins/personal/generic/class_user.inc:221 +msgid "female" +msgstr "vrouw" + +#: plugins/personal/generic/class_user.inc:221 +msgid "male" +msgstr "man" + +#: plugins/personal/generic/class_user.inc:231 +msgid "This account has no valid GOsa extensions." +msgstr "Dit account heeft geen geldige GOsa extensies." + +#: plugins/personal/generic/class_user.inc:260 +msgid "The specified file has not been uploaded via HTTP POST! Aborted." +msgstr "" +"Het opgegeven bestand is niet opgestuurd via HTTP POST! Aktie afgebroken." + +#: plugins/personal/generic/class_user.inc:354 +msgid "Please enter a valid serial number" +msgstr "Geef a.u.b. een geldig serienummer op" + +#: plugins/personal/generic/class_user.inc:360 +#: plugins/personal/generic/class_user.inc:385 +msgid "absent" +msgstr "leeg" + +#: plugins/personal/generic/class_user.inc:772 +msgid "Kerberos database communication failed" +msgstr "Kerberos database communicatie is mislukt" + +#: plugins/personal/generic/class_user.inc:789 +msgid "Can't remove user from kerberos database." +msgstr "Kan de gebruiker niet verwijderen uit de kerberos database." + +#: plugins/personal/generic/class_user.inc:800 +msgid "Can't add user to kerberos database." +msgstr "Kan de gebruiker niet toevoegen aan de kerberos database." + +#: plugins/personal/generic/class_user.inc:840 +msgid "You have no permissions to create a user on this 'Base'." +msgstr "" +"U heeft geen toestemming om een gebruiker aan te maken onder deze 'Basis'." + +#: plugins/personal/generic/class_user.inc:845 +msgid "You have no permissions to move a user from the original 'Base'." +msgstr "" +"U heeft geen toestemming om een gebruiker te verplaatsen vanuit de originale 'Basis'." + +#: plugins/personal/generic/class_user.inc:860 +msgid "There's already a person with this 'Login' in the database." +msgstr "Er bestaat al een account met deze 'Inlog naam' in de database." + +#: plugins/personal/generic/class_user.inc:869 +msgid "The required field 'Login' is not set." +msgstr "Het vereiste veld 'Inlog naam' is leeg." + +#: plugins/personal/generic/class_user.inc:876 +msgid "" +"There's already a person with this 'Name'/'Given name' combination in the " +"database." +msgstr "" +"Er bestaat al een persoon met deze 'Achternaam'/'Voornaam' combinatie in de " +"database." + +#: plugins/personal/generic/class_user.inc:883 +msgid "" +"The field 'Login' contains invalid characters. Lowercase, numbers and dashes " +"are allowed." +msgstr "" +"Het veld 'Inlog naam' bevat ongeldige karakters. Kleine letters, nummers en " +"liggende streepjes zijn toegestaan." + +#: plugins/personal/generic/class_user.inc:886 +msgid "The field 'Homepage' contains an invalid URL definition." +msgstr "Het veld 'Website' bevat een ongeldige URL." + +#: plugins/personal/generic/generic.tpl:6 +msgid "Personal information" +msgstr "Persoonlijke informatie" + +#: plugins/personal/generic/generic.tpl:17 +msgid "Change picture" +msgstr "Verander plaatje" + +#: plugins/personal/generic/generic.tpl:50 +msgid "Academic title" +msgstr "Academische titel" + +#: plugins/personal/generic/generic.tpl:58 +msgid "Date of birth" +msgstr "Geboortedatum" + +#: plugins/personal/generic/generic.tpl:81 +msgid "Sex" +msgstr "Geslacht" + +#: plugins/personal/generic/generic.tpl:96 +msgid "Choose subtree to place user in" +msgstr "Kies de subtree waaronder de gebruiker geplaatst wordt" + +#: plugins/personal/generic/generic.tpl:115 +msgid "Private phone" +msgstr "Prive telefoonnummer" + +#: plugins/personal/generic/generic.tpl:119 +msgid "Homepage" +msgstr "Website" + +#: plugins/personal/generic/generic.tpl:128 +msgid "Password storage" +msgstr "Wachtwoord opslag" + +#: plugins/personal/generic/generic.tpl:140 +msgid "Edit certificates" +msgstr "Certificaten bewerken" + +#: plugins/personal/generic/generic.tpl:144 +msgid "Kerberos" +msgstr "Kerberos" + +#: plugins/personal/generic/generic.tpl:145 +msgid "Edit properties" +msgstr "Eigenschappen bewerken" + +#: plugins/personal/generic/generic.tpl:161 +msgid "Organizational information" +msgstr "Organisatie informatie" + +#: plugins/personal/generic/generic.tpl:173 +msgid "Organization" +msgstr "Organisatie" + +#: plugins/personal/generic/generic.tpl:181 +msgid "Department No." +msgstr "Afdelingsnummer" + +#: plugins/personal/generic/generic.tpl:187 +msgid "Employee No." +msgstr "Personeelsnummer" + +#: plugins/personal/generic/generic.tpl:193 +msgid "Employee type" +msgstr "Werknemer type" + +#: plugins/personal/generic/generic.tpl:209 +#: plugins/personal/generic/generic.tpl:348 +msgid "Room No." +msgstr "Kamer nummer" + +#: plugins/personal/generic/generic.tpl:269 +msgid "Vocation" +msgstr "Beroep" + +#: plugins/personal/generic/generic.tpl:273 +msgid "Unit description" +msgstr "Eenheid omschrijving" + +#: plugins/personal/generic/generic.tpl:281 +msgid "Subject area" +msgstr "Werkgebied" + +#: plugins/personal/generic/generic.tpl:289 +msgid "Functional title" +msgstr "Functionele titel" + +#: plugins/personal/generic/generic.tpl:296 +msgid "Role" +msgstr "Funktie" + +#: plugins/personal/generic/generic.tpl:308 +msgid "Person locality" +msgstr "Werkplaats" + +#: plugins/personal/generic/generic.tpl:316 +msgid "Unit" +msgstr "Eenheid" + +#: plugins/personal/generic/generic.tpl:323 +msgid "Street" +msgstr "Straat" + +#: plugins/personal/generic/generic.tpl:335 +msgid "House identifier" +msgstr "Huis identificatie" + +#: plugins/personal/generic/generic.tpl:357 +msgid "Please use the phone tab" +msgstr "Gebruik a.u.b. de telefoon tab" + +#: plugins/personal/generic/generic.tpl:370 +msgid "Last delivery" +msgstr "Laatste levering" + +#: plugins/personal/generic/generic.tpl:378 +msgid "Public visible" +msgstr "Publiek zichtbaar" + +#: plugins/personal/connectivity/pureftpd.tpl:1 +msgid "FTP account" +msgstr "FTP account" + +#: plugins/personal/connectivity/pureftpd.tpl:11 +msgid "Bandwidth" +msgstr "Bandbreedte" + +#: plugins/personal/connectivity/pureftpd.tpl:15 +msgid "Upload bandwidth" +msgstr "Verstuur Bandbreedte" + +#: plugins/personal/connectivity/pureftpd.tpl:16 +#: plugins/personal/connectivity/pureftpd.tpl:20 +msgid "kb/s" +msgstr "kb/sec" + +#: plugins/personal/connectivity/pureftpd.tpl:19 +msgid "Download bandwidth" +msgstr "Ontvangst bandbreedte" + +#: plugins/personal/connectivity/pureftpd.tpl:31 +msgid "Quota" +msgstr "Quota" + +#: plugins/personal/connectivity/pureftpd.tpl:35 +msgid "Files" +msgstr "Bestanden" + +#: plugins/personal/connectivity/pureftpd.tpl:39 +msgid "Size" +msgstr "Grootte" + +#: plugins/personal/connectivity/pureftpd.tpl:50 +msgid "Ratio" +msgstr "Verhouding" + +#: plugins/personal/connectivity/pureftpd.tpl:54 +msgid "Uploaded / downloaded files" +msgstr "Opgestuurde / Ontvangen bestanden" + +#: plugins/personal/connectivity/pureftpd.tpl:67 +msgid "Check to disable FTP Access" +msgstr "Selecteer om Ftp toegang uit te schakelen" + +#: plugins/personal/connectivity/pureftpd.tpl:67 +msgid "Temporary disable FTP access" +msgstr "Schakel Ftp toegang tijdelijk uit" + +#: plugins/personal/connectivity/webdav.tpl:1 +msgid "WebDAV account" +msgstr "WebDAV Account" + +#: plugins/personal/connectivity/class_kolabAccount.inc:5 +msgid "Kolab" +msgstr "Kolab" + +#: plugins/personal/connectivity/class_kolabAccount.inc:61 +msgid "" +"You're trying to add an invalid email address to the list of delegations." +msgstr "" +"U probeert een ongeldig email adres toe te voegen aan de delegatielijst." + +#: plugins/personal/connectivity/class_kolabAccount.inc:69 +msgid "" +"The mail address you're trying to add is no primary mail address of an " +"existing user." +msgstr "" +"Het mail adres dat u probeert toe te voegen is geen primair e-mail adres " +"van een bestaande gebruiker." + +#: plugins/personal/connectivity/class_kolabAccount.inc:96 +msgid "Always accept" +msgstr "Altijd accepteren" + +#: plugins/personal/connectivity/class_kolabAccount.inc:97 +msgid "Always reject" +msgstr "Altijd afwijzen" + +#: plugins/personal/connectivity/class_kolabAccount.inc:98 +msgid "Reject if conflicts" +msgstr "Afwijzen bij conflicten" + +#: plugins/personal/connectivity/class_kolabAccount.inc:99 +msgid "Manual if conflicts" +msgstr "Handmatig bij conflicten" + +#: plugins/personal/connectivity/class_kolabAccount.inc:100 +msgid "Manual" +msgstr "Handmatig" + +#: plugins/personal/connectivity/class_kolabAccount.inc:137 +msgid "The value specified as Free Busy future needs to be an integer." +msgstr "De waarde opgegeven als Free Busy toekomst dient een integer te zijn" + +#: plugins/personal/connectivity/class_kolabAccount.inc:142 +msgid "The value specified as Free Busy Information URL is invalid." +msgstr "De opgegeven waarde voor de Free Busy informatie URL is niet geldig." + +#: plugins/personal/connectivity/class_phpgwAccount.inc:5 +msgid "PHPGroupware" +msgstr "PHPGroupware" + +#: plugins/personal/connectivity/kolab.tpl:1 +msgid "Kolab account" +msgstr "Kolab account" + +#: plugins/personal/connectivity/kolab.tpl:4 +msgid "" +"The kolab account is currently disabled. It's features can be adjusted if " +"you add a mail account." +msgstr "" +"Het kolab account is uitgeschakeld. U kunt opties aanpassen indien u een " +"e-mail account toevoegd." + +#: plugins/personal/connectivity/kolab.tpl:10 +msgid "Delegations" +msgstr "Delegaties" + +#: plugins/personal/connectivity/kolab.tpl:27 +msgid "Invitation" +msgstr "Uitnodiging" + +#: plugins/personal/connectivity/kolab.tpl:28 +msgid "Policy" +msgstr "Beleid" + +#: plugins/personal/connectivity/kolab.tpl:34 +msgid "Free Busy information" +msgstr "Free Busy informatie" + +#: plugins/personal/connectivity/kolab.tpl:37 +msgid "URL" +msgstr "URL" + +#: plugins/personal/connectivity/kolab.tpl:41 +msgid "Future" +msgstr "Toekomstig" + +#: plugins/personal/connectivity/kolab.tpl:42 +#: plugins/personal/connectivity/oxchange.tpl:20 +#: plugins/personal/connectivity/oxchange.tpl:24 +msgid "days" +msgstr "dagen" + +#: plugins/personal/connectivity/kolab.tpl:47 +msgid "Misc" +msgstr "Diverse" + +#: plugins/personal/connectivity/kolab.tpl:48 +msgid "No mail size restriction" +msgstr "Geen mail grootte restrictie" + +#: plugins/personal/connectivity/class_connectivity.inc:60 +msgid "This account has no connectivity extensions." +msgstr "Dit account heeft geen verbindings mogelijkheden." + +#: plugins/personal/connectivity/class_oxchangeAccount.inc:5 +msgid "Open-Xchange" +msgstr "Open-Xchange" + +#: plugins/personal/connectivity/class_oxchangeAccount.inc:663 +#: plugins/personal/connectivity/class_oxchangeAccount.inc:726 +msgid "Couldn't Connect To Postgresql Database" +msgstr "Kan niet verbinden met de Postgresql Database" + +#: plugins/personal/connectivity/class_oxchangeAccount.inc:667 +#: plugins/personal/connectivity/class_oxchangeAccount.inc:730 +msgid "Needed Parameters to openexchange connectivity plugin failed!" +msgstr "Vereiste parameters voor Open-Xchange verbindingsmodule ontbreken!" + +#: plugins/personal/connectivity/class_oxchangeAccount.inc:671 +#: plugins/personal/connectivity/class_oxchangeAccount.inc:734 +msgid "PHP4 module for Postgresql Database Failed!" +msgstr "PHP4 module voor Postgresql Database ontbreekt!" + +#: plugins/personal/connectivity/class_webdavAccount.inc:6 +msgid "WebDAV" +msgstr "WebDAV" + +#: plugins/personal/connectivity/class_proxyAccount.inc:69 +msgid "KB" +msgstr "KB" + +#: plugins/personal/connectivity/class_proxyAccount.inc:69 +msgid "GB" +msgstr "GB" + +#: plugins/personal/connectivity/class_proxyAccount.inc:70 +msgid "hour" +msgstr "uur" + +#: plugins/personal/connectivity/class_proxyAccount.inc:70 +msgid "day" +msgstr "dag" + +#: plugins/personal/connectivity/class_proxyAccount.inc:70 +msgid "week" +msgstr "week" + +#: plugins/personal/connectivity/class_proxyAccount.inc:70 +msgid "month" +msgstr "maand" + +#: plugins/personal/connectivity/oxchange.tpl:2 +msgid "Open-Xchange Account" +msgstr "Open-Xchange Account" + +#: plugins/personal/connectivity/oxchange.tpl:4 +msgid "Disabled by lack of Postgresql Support" +msgstr "Uitgeschakeld omdat er geen Postgresql ondersteuning is" + +#: plugins/personal/connectivity/oxchange.tpl:6 +msgid "Open Xchange account" +msgstr "Open-Xchange account" + +#: plugins/personal/connectivity/oxchange.tpl:15 +msgid "Remember" +msgstr "Onthoud" + +#: plugins/personal/connectivity/oxchange.tpl:19 +msgid "Appointment Days" +msgstr "Afspraak Dagen" + +#: plugins/personal/connectivity/oxchange.tpl:23 +msgid "Task Days" +msgstr "Taak dagen" + +#: plugins/personal/connectivity/oxchange.tpl:35 +msgid "User Information" +msgstr "Gebruikers informatie" + +#: plugins/personal/connectivity/oxchange.tpl:39 +msgid "User Timezone" +msgstr "Gebruikers tijdzone" + +#: plugins/personal/connectivity/phpgw.tpl:1 +msgid "PHPGroupware account" +msgstr "PHPGroupware account" + +#: plugins/personal/connectivity/class_pureftpdAccount.inc:118 +msgid "Value specified as 'Upload bandwidth' is not valid." +msgstr "De opgegeven waarde voor 'Verstuur Bandbreedte' is niet geldig." + +#: plugins/personal/connectivity/class_pureftpdAccount.inc:121 +msgid "Value specified as 'Download bandwidth' is not valid." +msgstr "De opgegeven waarde voor 'Ontvangst bandbreedte' is niet geldig." + +#: plugins/personal/connectivity/class_pureftpdAccount.inc:124 +msgid "Value specified as 'Files' is not valid." +msgstr "De opgegeven waarde voor 'Bestanden' is niet geldig." + +#: plugins/personal/connectivity/class_pureftpdAccount.inc:127 +msgid "Value specified as 'Size' is not valid." +msgstr "De opgegeven waarde voor 'Grootte' is niet geldig." + +#: plugins/personal/connectivity/class_pureftpdAccount.inc:130 +msgid "Value specified as 'Ratio' is not valid." +msgstr "De opgegeven waarde voor 'Verhouding' is niet geldig." + +#: plugins/personal/connectivity/proxy.tpl:1 +msgid "Proxy account" +msgstr "Proxy account" + +#: plugins/personal/connectivity/proxy.tpl:8 +msgid "Filter unwanted content (i.e. pornographic or violence related)" +msgstr "" +"Filter ongewilde inhoud (bijvoorbeeld pornografische of geweld gerelateerde " +"inhoud)" + +#: plugins/personal/connectivity/proxy.tpl:13 +msgid "Limit proxy access to working time" +msgstr "Beperk proxy gebruik tot werktijd" + +#: plugins/personal/connectivity/proxy.tpl:42 +msgid "Restrict proxy usage by quota" +msgstr "Beperk proxy gebruik met quota" + +#: plugins/personal/connectivity/proxy.tpl:52 +msgid "per" +msgstr "per" diff --git a/locale/ru/LC_MESSAGES/messages.mo b/locale/ru/LC_MESSAGES/messages.mo new file mode 100644 index 0000000000000000000000000000000000000000..f0a380c99efcefddcdac30658d5ccae542843008 GIT binary patch literal 146216 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 literal 0 HcmV?d00001 diff --git a/locale/ru/LC_MESSAGES/messages.po b/locale/ru/LC_MESSAGES/messages.po new file mode 100644 index 000000000..5f3f94956 --- /dev/null +++ b/locale/ru/LC_MESSAGES/messages.po @@ -0,0 +1,6264 @@ +# translation of messages.po to Russian +# Valia V. Vaneeva , 2004. +# $Id: messages.po,v 1.61 2005/04/18 10:37:13 migor-guest Exp $ +msgid "" +msgstr "" +"Project-Id-Version: messages\n" +"Report-Msgid-Bugs-To: Igor Muratov \n" +"POT-Creation-Date: 2004-06-01 13:40+0300\n" +"PO-Revision-Date: 2005-04-18 14:35+0300\n" +"Last-Translator: Igor Muratov \n" +"Language-Team: ALT Linux Team\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: poEdit 1.3.1\n" + +#: contrib/gosa.conf:4 +msgid "My account" +msgstr "Моя учетная запись" + +#: contrib/gosa.conf:23 +msgid "Administration" +msgstr "Администрирование" + +#: contrib/gosa.conf:40 +msgid "Addons" +msgstr "Дополнительно" + +#: contrib/gosa.conf:55 contrib/gosa.conf:66 contrib/gosa.conf:74 +#: contrib/gosa.conf:80 contrib/gosa.conf:88 contrib/gosa.conf:98 +#: contrib/gosa.conf:106 contrib/gosa.conf:111 contrib/gosa.conf:116 +#: contrib/gosa.conf:121 contrib/gosa.conf:126 contrib/gosa.conf:131 +#: plugins/personal/mail/generic.tpl:4 plugins/personal/posix/generic.tpl:4 +#: plugins/personal/samba/samba2.tpl:6 plugins/personal/samba/samba3.tpl:6 +#: plugins/personal/generic/class_user.inc:16 +#: plugins/gofax/blocklists/generic.tpl:1 +#: plugins/gofax/faxaccount/generic.tpl:6 plugins/admin/groups/mail.tpl:7 +#: plugins/generic/references/class_reference.inc:20 +msgid "Generic" +msgstr "Общее" + +#: contrib/gosa.conf:56 +msgid "Unix" +msgstr "Unix" + +#: contrib/gosa.conf:57 contrib/gosa.conf:68 +#: plugins/personal/mail/class_mailAccount.inc:22 +#: plugins/generic/references/class_reference.inc:24 +msgid "Mail" +msgstr "Почта" + +#: contrib/gosa.conf:58 plugins/personal/samba/class_sambaAccount.inc:24 +#: plugins/generic/references/class_reference.inc:26 +#: plugins/generic/references/class_reference.inc:28 +msgid "Samba" +msgstr "Samba" + +#: contrib/gosa.conf:59 plugins/personal/connectivity/main.inc:136 +#: plugins/personal/connectivity/class_connectivity.inc:15 +msgid "Connectivity" +msgstr "Подключение" + +#: contrib/gosa.conf:60 plugins/personal/generic/generic.tpl:231 +#: plugins/personal/generic/generic.tpl:362 +#: plugins/gofax/faxaccount/generic.tpl:10 +#: plugins/addons/addressbook/contents.tpl:14 +#: plugins/admin/departments/generic.tpl:62 +msgid "Fax" +msgstr "Факс" + +#: contrib/gosa.conf:61 plugins/personal/generic/generic.tpl:214 +#: plugins/personal/generic/generic.tpl:352 +#: plugins/addons/addressbook/contents.tpl:14 +#: plugins/addons/addressbook/address_edit.tpl:41 +#: plugins/addons/addressbook/address_edit.tpl:89 +#: plugins/addons/addressbook/address_info.tpl:37 +#: plugins/addons/addressbook/address_info.tpl:85 +#: plugins/admin/departments/generic.tpl:58 +#: plugins/admin/systems/chooser.tpl:12 +#: plugins/admin/ogroups/class_ogroupManagement.inc:48 +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:6 +#: plugins/generic/references/class_reference.inc:40 +msgid "Phone" +msgstr "Телефон" + +#: contrib/gosa.conf:62 contrib/gosa.conf:70 contrib/gosa.conf:76 +#: contrib/gosa.conf:84 contrib/gosa.conf:94 contrib/gosa.conf:102 +#: contrib/gosa.conf:107 contrib/gosa.conf:112 contrib/gosa.conf:117 +#: contrib/gosa.conf:122 contrib/gosa.conf:127 contrib/gosa.conf:132 +msgid "References" +msgstr "Ссылки" + +#: contrib/gosa.conf:67 +#: plugins/admin/applications/class_applicationManagement.inc:25 +#: plugins/admin/ogroups/class_ogroupManagement.inc:44 +msgid "Applications" +msgstr "Приложения" + +#: contrib/gosa.conf:69 +msgid "ACL" +msgstr "Доступ" + +#: contrib/gosa.conf:75 +msgid "Options" +msgstr "Параметры" + +#: contrib/gosa.conf:81 contrib/gosa.conf:99 +msgid "Devices" +msgstr "Устройства" + +#: contrib/gosa.conf:82 contrib/gosa.conf:100 +msgid "Startup" +msgstr "Запуск" + +#: contrib/gosa.conf:83 contrib/gosa.conf:93 contrib/gosa.conf:101 +msgid "Monitoring" +msgstr "Мониторинг" + +#: contrib/gosa.conf:89 +msgid "Databases" +msgstr "Базы данных" + +#: contrib/gosa.conf:90 +msgid "Services" +msgstr "Сервисы" + +#: contrib/gosa.conf:91 +msgid "DNS" +msgstr "DNS" + +#: contrib/gosa.conf:92 +msgid "DHCP" +msgstr "DHCP" + +#: contrib/gosa.conf:141 plugins/addons/ldapmanager/contentexport.tpl:19 +#: plugins/addons/ldapmanager/contentexport.tpl:32 +#: plugins/addons/ldapmanager/contentexport.tpl:47 +msgid "Export" +msgstr "Экспорт" + +#: contrib/gosa.conf:142 plugins/personal/mail/generic.tpl:107 +#: plugins/addons/ldapmanager/contentimport.tpl:63 +#: plugins/addons/ldapmanager/contentcsv.tpl:122 +#: plugins/addons/ldapmanager/contentcsv.tpl:125 +msgid "Import" +msgstr "Импортировать" + +#: contrib/gosa.conf:143 +#, fuzzy +msgid "CSV Import" +msgstr "Импортировать" + +#: contrib/gosa.conf:158 +msgid "GONICUS" +msgstr "GONICUS" + +#: contrib/gosa.conf:176 +msgid "German" +msgstr "Немецкий" + +#: contrib/gosa.conf:177 +msgid "Russian" +msgstr "Русский" + +#: contrib/gosa.conf:178 +msgid "Spanish" +msgstr "Испанский" + +#: contrib/gosa.conf:179 +msgid "French" +msgstr "Французский" + +#: contrib/gosa.conf:180 +msgid "Dutch" +msgstr "Датский" + +#: contrib/gosa.conf:181 +msgid "English" +msgstr "Английский" + +#: plugins/personal/mail/class_mailAccount.inc:23 +#: plugins/personal/password/class_password.inc:6 +#: plugins/personal/posix/class_posixAccount.inc:17 +#: plugins/personal/samba/class_sambaAccount.inc:25 +#: plugins/personal/generic/class_user.inc:17 +#: plugins/personal/connectivity/class_pureftpdAccount.inc:7 +#: plugins/personal/connectivity/class_phpgwAccount.inc:6 +#: plugins/personal/connectivity/class_webdavAccount.inc:7 +#: plugins/personal/connectivity/class_connectivity.inc:16 +#: plugins/personal/connectivity/class_proxyAccount.inc:6 +#: plugins/gofax/blocklists/class_blocklistManagement.inc:6 +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:7 +#: plugins/gofax/reports/class_faxreport.inc:7 +#: plugins/addons/addressbook/class_addressbook.inc:7 +#: plugins/addons/logview/class_logview.inc:7 +#: plugins/addons/ldapmanager/class_csvimport.inc:7 +#: plugins/addons/ldapmanager/class_import.inc:7 +#: plugins/addons/ldapmanager/class_ldif.inc:8 +#: plugins/addons/ldapmanager/class_export.inc:8 +#: plugins/admin/groups/class_groupManagement.inc:26 +#: plugins/admin/users/class_userManagement.inc:26 +#: plugins/admin/applications/class_applicationManagement.inc:26 +#: plugins/admin/departments/class_departmentManagement.inc:26 +#: plugins/admin/systems/class_systemManagement.inc:33 +#: plugins/admin/ogroups/class_ogroupManagement.inc:26 +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:7 +#: plugins/gofon/reports/class_fonreport.inc:7 +msgid "This does something" +msgstr "Что-то будет" + +#: plugins/personal/mail/class_mailAccount.inc:79 +#: plugins/admin/groups/class_groupMail.inc:59 +#, php-format +msgid "There is no mail method '%s' specified in your gosa.conf available." +msgstr "Метод '%s' не описан в вашем файле конфигурации." + +#: plugins/personal/mail/class_mailAccount.inc:158 +msgid "No DESC tag in vacation file:" +msgstr "В файле сообщения автоответчика отсутствует тег DESC:" + +#: plugins/personal/mail/class_mailAccount.inc:184 +msgid "This account has no mail extensions." +msgstr "В этой учетной записи нет почтовых расширений." + +#: plugins/personal/mail/class_mailAccount.inc:192 +#: plugins/admin/groups/class_groupMail.inc:187 +msgid "Remove mail account" +msgstr "Удалить настройки эл. почты" + +#: plugins/personal/mail/class_mailAccount.inc:193 +#: plugins/admin/groups/class_groupMail.inc:188 +msgid "" +"This account has mail features enabled. You can disable them by clicking " +"below." +msgstr "" +"В этой учетной записи есть настройки электронной почты. Вы можете удалить " +"их, щелкнув ниже." + +#: plugins/personal/mail/class_mailAccount.inc:195 +#: plugins/admin/groups/class_groupMail.inc:190 +msgid "Create mail account" +msgstr "Создать настройки запись эл. почты" + +#: plugins/personal/mail/class_mailAccount.inc:196 +#: plugins/admin/groups/class_groupMail.inc:191 +msgid "" +"This account has mail features disabled. You can enable them by clicking " +"below." +msgstr "" +"В этой учетной записи нет настроек электронной почты. Вы можете добавить их, " +"щелкнув ниже." + +#: plugins/personal/mail/class_mailAccount.inc:244 +msgid "" +"You're trying to add an invalid email address to the list of forwarders." +msgstr "" +"Вы пытаетесь добавить некорректный адрес электронной почты к списку тех, " +"кому должны пересылаться сообщения." + +#: plugins/personal/mail/class_mailAccount.inc:250 +#: plugins/admin/groups/class_groupMail.inc:250 +msgid "Adding your one of your own addresses to the forwarders makes no sense." +msgstr "" +"Добавление своего единственного адреса к списку пересылки не имеет смысла." + +#: plugins/personal/mail/class_mailAccount.inc:285 +#: plugins/personal/mail/class_mailAccount.inc:290 +#: plugins/admin/groups/class_groupMail.inc:278 +msgid "" +"You're trying to add an invalid email address to the list of alternate " +"addresses." +msgstr "" +"Вы пытаетесь добавить некорректный адрес электронной почты к списку " +"альтернативных адресов." + +#: plugins/personal/mail/class_mailAccount.inc:300 +#: plugins/admin/groups/class_groupMail.inc:283 +msgid "The address you're trying to add is already used by user" +msgstr "Добавляемый вами адрес уже используется пользователем" + +#: plugins/personal/mail/class_mailAccount.inc:631 +#: plugins/admin/groups/class_groupMail.inc:610 +msgid "The required field 'Primary address' is not set." +msgstr "Обязательное поле \"Основной адрес\" не заполнено." + +#: plugins/personal/mail/class_mailAccount.inc:635 +#: plugins/personal/mail/class_mailAccount.inc:639 +#: plugins/addons/addressbook/class_addressbook.inc:529 +msgid "Please enter a valid email address in 'Primary address' field." +msgstr "Введите корректное значение в поле \"Основной адрес\"." + +#: plugins/personal/mail/class_mailAccount.inc:646 +#: plugins/admin/groups/class_groupMail.inc:619 +msgid "The primary address you've entered is already in use." +msgstr "Введенный вами адрес уже используется." + +#: plugins/personal/mail/class_mailAccount.inc:652 +#: plugins/admin/groups/class_groupMail.inc:625 +msgid "Value in 'Quota size' is not valid." +msgstr "Значение поля \"Квота\" некорректно." + +#: plugins/personal/mail/class_mailAccount.inc:661 +#: plugins/admin/groups/class_groupMail.inc:634 +msgid "Please specify a vaild mail size for mails to be rejected." +msgstr "Укажите корректный размер сообщений, которые будут отклоняться." + +#: plugins/personal/mail/class_mailAccount.inc:671 +#: plugins/admin/groups/class_groupMail.inc:642 +msgid "You need to set the maximum mail size in order to reject anything." +msgstr "Помните, что указывать нужно максимальный допустимый размер сообщений." + +#: plugins/personal/mail/generic.tpl:7 plugins/admin/groups/mail.tpl:10 +msgid "Primary address" +msgstr "Основной адрес" + +#: plugins/personal/mail/generic.tpl:11 plugins/admin/groups/mail.tpl:14 +#: plugins/generic/references/class_reference.inc:44 +msgid "Server" +msgstr "Сервер" + +#: plugins/personal/mail/generic.tpl:13 +msgid "Specify the mail server where the user will be hosted on" +msgstr "Выберите почтовый сервер для учетной записи пользователя" + +#: plugins/personal/mail/generic.tpl:21 plugins/admin/groups/mail.tpl:24 +msgid "Quota usage" +msgstr "Использование квоты" + +#: plugins/personal/mail/generic.tpl:28 plugins/admin/groups/mail.tpl:31 +#: plugins/admin/systems/class_terminalInfo.inc:136 +msgid "not defined" +msgstr "не определена" + +#: plugins/personal/mail/generic.tpl:33 plugins/admin/groups/mail.tpl:36 +msgid "Quota size" +msgstr "Размер квоты" + +#: plugins/personal/mail/generic.tpl:47 plugins/admin/groups/mail.tpl:46 +msgid "Alternate addresses" +msgstr "Альтернативные адреса" + +#: plugins/personal/mail/generic.tpl:49 plugins/admin/groups/mail.tpl:47 +msgid "List of alternative mail addresses" +msgstr "Список альтернативных адресов эл. почты" + +#: plugins/personal/mail/generic.tpl:55 plugins/personal/mail/generic.tpl:121 +#: plugins/personal/mail/mail_locals.tpl:49 +#: plugins/personal/posix/trust_machines.tpl:45 +#: plugins/personal/posix/posix_groups.tpl:56 +#: plugins/personal/posix/generic.tpl:63 +#: plugins/personal/posix/generic.tpl:122 +#: plugins/personal/samba/samba3.tpl:247 +#: plugins/personal/samba/samba3_workstations.tpl:45 +#: plugins/gofax/blocklists/generic.tpl:60 +#: plugins/gofax/faxaccount/generic.tpl:73 +#: plugins/gofax/faxaccount/locals.tpl:48 +#: plugins/gofax/faxaccount/lists.tpl:11 plugins/gofax/faxaccount/lists.tpl:15 +#: plugins/admin/groups/mail.tpl:52 plugins/admin/groups/mail.tpl:97 +#: plugins/admin/groups/class_groupMail.inc:404 +#: plugins/admin/groups/group_objects.tpl:45 +#: plugins/admin/groups/generic.tpl:87 plugins/admin/groups/mail_locals.tpl:49 +#: plugins/admin/systems/startup.tpl:59 plugins/admin/systems/startup.tpl:72 +#: plugins/admin/systems/startup.tpl:91 +#: plugins/admin/ogroups/ogroup_objects.tpl:56 +#: plugins/admin/ogroups/generic.tpl:38 +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:203 +#: plugins/gofon/phoneaccount/generic.tpl:45 +msgid "Add" +msgstr "Добавить" + +#: plugins/personal/mail/generic.tpl:57 plugins/personal/mail/generic.tpl:125 +#: plugins/personal/posix/generic.tpl:64 +#: plugins/personal/posix/generic.tpl:124 +#: plugins/personal/samba/samba3.tpl:249 +#: plugins/gofax/blocklists/generic.tpl:61 +#: plugins/gofax/blocklists/remove.tpl:15 +#: plugins/gofax/blocklists/headpage.tpl:17 +#: plugins/gofax/faxaccount/generic.tpl:75 +#: plugins/gofax/faxaccount/lists.tpl:12 +#: plugins/addons/addressbook/remove.tpl:15 plugins/admin/groups/mail.tpl:53 +#: plugins/admin/groups/mail.tpl:99 plugins/admin/groups/headpage.tpl:17 +#: plugins/admin/groups/remove.tpl:15 plugins/admin/groups/generic.tpl:89 +#: plugins/admin/users/remove.tpl:15 plugins/admin/users/headpage.tpl:18 +#: plugins/admin/applications/remove.tpl:14 +#: plugins/admin/applications/headpage.tpl:17 +#: plugins/admin/departments/remove.tpl:15 +#: plugins/admin/departments/headpage.tpl:17 +#: plugins/admin/systems/remove.tpl:15 plugins/admin/systems/headpage.tpl:17 +#: plugins/admin/systems/startup.tpl:60 plugins/admin/systems/startup.tpl:73 +#: plugins/admin/systems/startup.tpl:92 plugins/admin/ogroups/generic.tpl:39 +#: plugins/admin/ogroups/remove.tpl:15 plugins/admin/ogroups/headpage.tpl:17 +#: plugins/gofon/phoneaccount/generic.tpl:47 +msgid "Delete" +msgstr "Удалить" + +#: plugins/personal/mail/generic.tpl:65 +msgid "Mail options" +msgstr "Почтовые настройки" + +#: plugins/personal/mail/generic.tpl:70 +msgid "Select if you want to forward mails without getting own copies of them" +msgstr "Выберите, нужно ли оставлять копии перенаправляемых сообщений" + +#: plugins/personal/mail/generic.tpl:70 +msgid "No delivery to own mailbox" +msgstr "Не оставлять копии в своем почтовом ящике" + +#: plugins/personal/mail/generic.tpl:73 +msgid "" +"Select to automatically response with the vacation message defined below" +msgstr "Выберите, чтобы включить автоответчик с сообщением, указанным ниже" + +#: plugins/personal/mail/generic.tpl:73 +msgid "Activate vacation message" +msgstr "Включить автоответчик" + +#: plugins/personal/mail/generic.tpl:80 +msgid "Select if you want to filter this mails thru spamassassin" +msgstr "Выберите, нужно ли фильтровать сообщения с помощью SpamAssassin" + +#: plugins/personal/mail/generic.tpl:80 +msgid "Move mails tagged with spam level greater than" +msgstr "Перемещать сообщения с меткой рекламы больше" + +#: plugins/personal/mail/generic.tpl:81 +msgid "Choose spam level - smaller values are more sensitive" +msgstr "" +"Выберите метку рекламы - чем меньше значение, тем чувствительнее фильтр" + +#: plugins/personal/mail/generic.tpl:84 +msgid "to folder" +msgstr "в папку" + +#: plugins/personal/mail/generic.tpl:90 +msgid "Reject mails bigger than" +msgstr "Отклонять сообщения размером больше" + +#: plugins/personal/mail/generic.tpl:92 +#: plugins/personal/connectivity/pureftpd.tpl:40 +#: plugins/personal/connectivity/class_proxyAccount.inc:69 +msgid "MB" +msgstr "Мб" + +#: plugins/personal/mail/generic.tpl:98 +msgid "Vacation message" +msgstr "Сообщение автоответчика" + +#: plugins/personal/mail/generic.tpl:113 +msgid "Forward messages to" +msgstr "Перенаправлять сообщения" + +#: plugins/personal/mail/generic.tpl:123 +#: plugins/gofax/faxaccount/generic.tpl:74 plugins/admin/groups/mail.tpl:98 +msgid "Add local" +msgstr "Добавить локально" + +#: plugins/personal/mail/generic.tpl:133 +msgid "Advanced mail options" +msgstr "Дополнительные почтовые настройки" + +#: plugins/personal/mail/generic.tpl:138 +msgid "Select if user can only send and receive inside his own domain" +msgstr "" +"Выберите, может ли пользователь отправлять и получать сообщения только " +"внутри своего домена" + +#: plugins/personal/mail/generic.tpl:139 +msgid "User is only allowed to send and receive local mails" +msgstr "Пользователь может отправлять и получать почту только локально" + +#: plugins/personal/mail/generic.tpl:146 +msgid "Use custom sieve script" +msgstr "Использовать другой сценарий SIEVE" + +#: plugins/personal/mail/generic.tpl:146 +msgid "disables all Mail options!" +msgstr "отключает все почтовые настройки!" + +#: plugins/personal/mail/main.inc:104 plugins/personal/posix/main.inc:110 +#: plugins/personal/samba/main.inc:104 +#: plugins/personal/generic/generic_certs.tpl:60 +#: plugins/personal/generic/main.inc:158 +#: plugins/personal/connectivity/main.inc:116 +#: plugins/gofax/blocklists/generic.tpl:74 +#: plugins/gofax/faxaccount/main.inc:89 +#: plugins/admin/groups/class_groupManagement.inc:257 +#: plugins/admin/users/class_userManagement.inc:500 +#: plugins/admin/applications/class_applicationManagement.inc:239 +#: plugins/admin/departments/class_departmentManagement.inc:228 +#: plugins/admin/systems/class_systemManagement.inc:438 +#: plugins/admin/ogroups/class_ogroupManagement.inc:274 +#: plugins/gofon/phoneaccount/main.inc:104 +msgid "Finish" +msgstr "Готово" + +#: plugins/personal/mail/main.inc:106 plugins/personal/mail/mail_locals.tpl:51 +#: plugins/personal/posix/trust_machines.tpl:47 +#: plugins/personal/posix/posix_groups.tpl:58 +#: plugins/personal/posix/main.inc:112 plugins/personal/samba/main.inc:106 +#: plugins/personal/samba/samba3_workstations.tpl:47 +#: plugins/personal/generic/password.tpl:19 +#: plugins/personal/generic/generic_picture.tpl:31 +#: plugins/personal/generic/generic_certs.tpl:62 +#: plugins/personal/generic/main.inc:160 +#: plugins/personal/connectivity/main.inc:118 +#: plugins/gofax/blocklists/generic.tpl:76 +#: plugins/gofax/blocklists/remove.tpl:17 +#: plugins/gofax/faxaccount/locals.tpl:50 +#: plugins/gofax/faxaccount/lists.tpl:39 plugins/gofax/faxaccount/main.inc:91 +#: plugins/addons/addressbook/dial.tpl:11 +#: plugins/addons/addressbook/address_edit.tpl:108 +#: plugins/addons/addressbook/remove.tpl:17 +#: plugins/admin/groups/class_groupManagement.inc:259 +#: plugins/admin/groups/remove.tpl:17 +#: plugins/admin/groups/application_options.tpl:10 +#: plugins/admin/groups/group_objects.tpl:47 +#: plugins/admin/groups/mail_admins.tpl:39 +#: plugins/admin/groups/mail_locals.tpl:51 plugins/admin/users/password.tpl:23 +#: plugins/admin/users/template.tpl:48 +#: plugins/admin/users/class_userManagement.inc:502 +#: plugins/admin/users/remove.tpl:17 plugins/admin/applications/remove.tpl:16 +#: plugins/admin/applications/class_applicationManagement.inc:241 +#: plugins/admin/departments/remove.tpl:17 +#: plugins/admin/departments/class_departmentManagement.inc:230 +#: plugins/admin/systems/class_systemManagement.inc:440 +#: plugins/admin/systems/remove.tpl:17 plugins/admin/systems/password.tpl:27 +#: plugins/admin/systems/chooser.tpl:18 +#: plugins/admin/ogroups/ogroup_objects.tpl:58 +#: plugins/admin/ogroups/class_ogroupManagement.inc:276 +#: plugins/admin/ogroups/remove.tpl:17 plugins/gofon/phoneaccount/main.inc:106 +#: ihtml/themes/altlinux/islocked.tpl:15 ihtml/themes/classic/islocked.tpl:15 +#: ihtml/themes/default/islocked.tpl:15 +msgid "Cancel" +msgstr "Отмена" + +#: plugins/personal/mail/main.inc:114 plugins/personal/posix/main.inc:120 +#: plugins/personal/samba/main.inc:114 plugins/personal/generic/main.inc:177 +#: plugins/personal/connectivity/main.inc:126 +#: plugins/gofax/faxaccount/main.inc:96 +#: plugins/gofon/phoneaccount/main.inc:111 +msgid "Click the 'Edit' button below to change informations in this dialog" +msgstr "Нажмите 'Изменить' чтобы отредактировать данные в этой форме." + +#: plugins/personal/mail/main.inc:115 plugins/personal/posix/main.inc:122 +#: plugins/personal/samba/main.inc:115 plugins/personal/generic/main.inc:170 +#: plugins/personal/connectivity/main.inc:127 +#: plugins/gofax/blocklists/headpage.tpl:16 +#: plugins/gofax/faxaccount/generic.tpl:88 +#: plugins/gofax/faxaccount/generic.tpl:94 +#: plugins/gofax/faxaccount/main.inc:97 plugins/addons/logview/contents.tpl:60 +#: plugins/admin/groups/headpage.tpl:16 plugins/admin/users/headpage.tpl:17 +#: plugins/admin/applications/headpage.tpl:16 +#: plugins/admin/departments/headpage.tpl:16 +#: plugins/admin/systems/headpage.tpl:16 plugins/admin/ogroups/headpage.tpl:16 +#: plugins/gofon/phoneaccount/main.inc:112 +msgid "Edit" +msgstr "Изменить" + +#: plugins/personal/mail/main.inc:124 +msgid "User mail settings" +msgstr "Почтовые настройки пользователя" + +#: plugins/personal/mail/mail_locals.tpl:6 +#: plugins/admin/groups/mail_locals.tpl:6 +msgid "Select addresses to add" +msgstr "Выберите адреса для добавления" + +#: plugins/personal/mail/mail_locals.tpl:29 +#: plugins/admin/groups/mail_locals.tpl:29 +msgid "Display addresses of department" +msgstr "Показать адреса подразделения" + +#: plugins/personal/mail/mail_locals.tpl:30 +#: plugins/personal/posix/trust_machines.tpl:30 +#: plugins/personal/posix/posix_groups.tpl:37 +#: plugins/personal/samba/samba3_workstations.tpl:30 +#: plugins/gofax/blocklists/headpage.tpl:50 +#: plugins/gofax/faxaccount/locals.tpl:29 +#: plugins/addons/addressbook/contents.tpl:72 +#: plugins/admin/groups/headpage.tpl:57 +#: plugins/admin/groups/group_objects.tpl:30 +#: plugins/admin/groups/mail_locals.tpl:30 plugins/admin/users/headpage.tpl:61 +#: plugins/admin/applications/headpage.tpl:46 +#: plugins/admin/departments/headpage.tpl:46 +#: plugins/admin/systems/headpage.tpl:56 +#: plugins/admin/ogroups/ogroup_objects.tpl:41 +#: plugins/admin/ogroups/headpage.tpl:58 +msgid "Choose the department the search will be based on" +msgstr "Выбрать раздел, для которого будет осуществлен поиск" + +#: plugins/personal/mail/mail_locals.tpl:35 +#: plugins/admin/groups/mail_locals.tpl:35 +msgid "Display addresses matching" +msgstr "Показать подходяшие адреса" + +#: plugins/personal/mail/mail_locals.tpl:36 +#: plugins/personal/posix/trust_machines.tpl:36 +#: plugins/personal/samba/samba3_workstations.tpl:36 +#: plugins/admin/groups/mail_locals.tpl:36 +msgid "Regular expression for matching addresses" +msgstr "Регулярное выражение для поиска адреса" + +#: plugins/personal/mail/mail_locals.tpl:39 +#: plugins/admin/groups/mail_locals.tpl:39 +msgid "Display addresses of user" +msgstr "Показать адреса пользователя" + +#: plugins/personal/mail/mail_locals.tpl:40 +#: plugins/admin/groups/mail_locals.tpl:40 +msgid "User name of which addresses are shown" +msgstr "Имя пользователя, адрес которого показан" + +#: plugins/personal/password/class_password.inc:5 +#: plugins/admin/systems/servdb.tpl:22 plugins/admin/systems/servdb.tpl:38 +#: plugins/admin/systems/servdb.tpl:54 plugins/admin/systems/servdb.tpl:90 +#: plugins/admin/systems/servdb.tpl:113 ihtml/themes/altlinux/login.tpl:33 +#: ihtml/themes/altlinux/login.tpl:37 ihtml/themes/classic/login.tpl:32 +#: ihtml/themes/classic/login.tpl:36 ihtml/themes/default/login.tpl:33 +#: ihtml/themes/default/login.tpl:37 +msgid "Password" +msgstr "Пароль" + +#: plugins/personal/password/password.tpl:2 +#: plugins/personal/password/changed.tpl:2 +msgid "Change password" +msgstr "Сменить пароль" + +#: plugins/personal/password/password.tpl:6 +msgid "" +"To change your personal password use the fields below. The changes take " +"effect immediately. Please memorize the new password, because you would't be " +"able to login without it." +msgstr "" +"В полях ниже вы можете изменить свой пароль. Изменения вступят в силу " +"немедленно. Пожалуйста, запомните новый пароль, так как иначе вы не сможете " +"войти в систему." + +#: plugins/personal/password/password.tpl:10 +#: plugins/admin/users/password.tpl:6 +msgid "" +"Changing the password impinges on your authentification on mail, proxy, " +"samba and unix services." +msgstr "" +"Изменение пароля влияет на аутентификацию при использовании почты, прокси-" +"сервера, Samba и служб UNIX." + +#: plugins/personal/password/password.tpl:15 +msgid "Current password" +msgstr "Текущий пароль" + +#: plugins/personal/password/password.tpl:20 +#: plugins/personal/generic/password.tpl:7 plugins/admin/users/password.tpl:11 +#: plugins/admin/systems/password.tpl:11 +msgid "New password" +msgstr "Новый пароль" + +#: plugins/personal/password/password.tpl:25 +#: plugins/personal/generic/password.tpl:11 +#: plugins/admin/users/password.tpl:15 plugins/admin/systems/password.tpl:16 +msgid "Repeat new password" +msgstr "Подтверждение" + +#: plugins/personal/password/password.tpl:34 +#: plugins/personal/generic/password.tpl:17 +#: plugins/admin/users/password.tpl:21 plugins/admin/users/headpage.tpl:19 +#: plugins/admin/systems/headpage.tpl:18 plugins/admin/systems/password.tpl:25 +msgid "Set password" +msgstr "Изменить пароль" + +#: plugins/personal/password/password.tpl:36 +msgid "Clear fields" +msgstr "Очистить поля" + +#: plugins/personal/password/changed.tpl:6 +msgid "" +"You've successfully changed your password. Remember to change all programms " +"configured to use it as well." +msgstr "" +"Вы успешно сменили свой пароль. Не забудьте изменить нужные настройки " +"использующих его программ." + +#: plugins/personal/password/changed.tpl:12 +#: plugins/personal/generic/main.inc:167 plugins/gofax/reports/detail.tpl:68 +#: plugins/addons/ldapmanager/contentimport.tpl:58 +#: plugins/addons/ldapmanager/contentcsv.tpl:127 +#: plugins/addons/ldapmanager/contentexport.tpl:70 include/functions.inc:1342 +msgid "Back" +msgstr "Назад" + +#: plugins/personal/password/main.inc:40 +msgid "" +"The password you've entered as your current password doesn't match the real " +"one." +msgstr "Введенный вами текущий пароль не совпадает с реальным." + +#: plugins/personal/password/main.inc:43 +msgid "You need to specify your current password in order to proceed." +msgstr "Для продолжения укажите свой текущий пароль." + +#: plugins/personal/password/main.inc:48 plugins/personal/generic/main.inc:84 +#: plugins/admin/users/class_userManagement.inc:174 +msgid "" +"The passwords you've entered as 'New password' and 'Repeated new password' " +"do not match." +msgstr "Введенные пароли не совпадают!" + +#: plugins/personal/password/main.inc:51 plugins/personal/generic/main.inc:89 +#: plugins/admin/users/class_userManagement.inc:179 +msgid "The password you've entered as 'New password' is empty." +msgstr "Вы не указали новый пароль." + +#: plugins/personal/password/main.inc:59 +msgid "The password used as new and current are too similar." +msgstr "Новый и текущий пароли слишком похожи." + +#: plugins/personal/password/main.inc:64 +msgid "The password used as new is to short." +msgstr "Новый пароль слишком короткий." + +#: plugins/personal/password/main.inc:71 +msgid "You have no permissions to change your password." +msgstr "У вас недостаточно прав для смены своего пароля." + +#: plugins/personal/password/main.inc:89 +msgid "External password changer reported a problem: " +msgstr "При попытке сменить пароль извне возникла проблема: " + +#: plugins/personal/posix/trust_machines.tpl:6 +msgid "Select systems to add" +msgstr "Выберите системы для добавления" + +#: plugins/personal/posix/trust_machines.tpl:29 +#: plugins/admin/systems/headpage.tpl:55 +msgid "Display systems of department" +msgstr "Показать системы в подразделении" + +#: plugins/personal/posix/trust_machines.tpl:35 +#: plugins/admin/systems/headpage.tpl:61 +msgid "Display systems matching" +msgstr "Показать подходяшие системы" + +#: plugins/personal/posix/posix_groups.tpl:6 +msgid "Select groups to add" +msgstr "Выберите группы для добавления" + +#: plugins/personal/posix/posix_groups.tpl:20 +#: plugins/gofax/blocklists/headpage.tpl:36 +#: plugins/gofax/faxaccount/locals.tpl:19 +#: plugins/addons/addressbook/contents.tpl:58 +#: plugins/admin/groups/headpage.tpl:37 +#: plugins/admin/groups/group_objects.tpl:20 +#: plugins/admin/users/headpage.tpl:38 +#: plugins/admin/applications/headpage.tpl:36 +#: plugins/admin/departments/headpage.tpl:36 +#: plugins/admin/systems/headpage.tpl:37 +#: plugins/admin/ogroups/ogroup_objects.tpl:20 +#: plugins/admin/ogroups/headpage.tpl:37 +msgid "Filters" +msgstr "Фильтры" + +#: plugins/personal/posix/posix_groups.tpl:29 +#: plugins/admin/groups/headpage.tpl:46 +msgid "Select to see groups that are primary groups of users" +msgstr "Выберите, чтобы просмотреть список основных групп пользователей" + +#: plugins/personal/posix/posix_groups.tpl:29 +#: plugins/admin/groups/headpage.tpl:46 +msgid "Show primary groups" +msgstr "Показать основные группы" + +#: plugins/personal/posix/posix_groups.tpl:30 +#: plugins/admin/groups/headpage.tpl:47 +msgid "Select to see groups that have samba groups mappings" +msgstr "Выберите, чтобы просмотреть группы, которые входят в samba" + +#: plugins/personal/posix/posix_groups.tpl:30 +#: plugins/admin/groups/headpage.tpl:47 +msgid "Show samba groups" +msgstr "Показать группы samba" + +#: plugins/personal/posix/posix_groups.tpl:31 +#: plugins/admin/groups/headpage.tpl:48 +msgid "Select to see groups that have applications configured" +msgstr "Выберите, чтобы просмотреть список групп, которым доступны приложения" + +#: plugins/personal/posix/posix_groups.tpl:31 +#: plugins/admin/groups/headpage.tpl:48 +msgid "Show application groups" +msgstr "Показать группы приложений" + +#: plugins/personal/posix/posix_groups.tpl:32 +#: plugins/admin/groups/headpage.tpl:49 +msgid "Select to see groups that have mail settings" +msgstr "" +"Выберите, чтобы просмотреть список групп, которым доступны функции эл. почты" + +#: plugins/personal/posix/posix_groups.tpl:32 +#: plugins/admin/groups/headpage.tpl:49 +msgid "Show mail groups" +msgstr "Показать группы с эл. почтой" + +#: plugins/personal/posix/posix_groups.tpl:33 +#: plugins/admin/groups/headpage.tpl:50 +msgid "Select to see normal groups that have only functional aspects" +msgstr "Выберите, чтобы просмотреть список обычных групп" + +#: plugins/personal/posix/posix_groups.tpl:33 +#: plugins/admin/groups/headpage.tpl:50 +msgid "Show functional groups" +msgstr "Показать обычные группы" + +#: plugins/personal/posix/posix_groups.tpl:36 +#: plugins/admin/groups/headpage.tpl:56 plugins/admin/ogroups/headpage.tpl:57 +msgid "Display groups of department" +msgstr "Объединения в подразделении" + +#: plugins/personal/posix/posix_groups.tpl:42 +#: plugins/admin/groups/headpage.tpl:62 plugins/admin/ogroups/headpage.tpl:63 +msgid "Display groups matching" +msgstr "Шаблон для групп" + +#: plugins/personal/posix/posix_groups.tpl:43 +#: plugins/admin/groups/headpage.tpl:63 plugins/admin/ogroups/headpage.tpl:64 +msgid "Regular expression for matching group names" +msgstr "Регулярное выражение, соответствующее именам групп" + +#: plugins/personal/posix/posix_groups.tpl:46 +#: plugins/admin/groups/headpage.tpl:66 +msgid "Display groups of user" +msgstr "Показать группы пользователей" + +#: plugins/personal/posix/posix_groups.tpl:47 +#: plugins/admin/groups/headpage.tpl:67 +msgid "User name of which groups are shown" +msgstr "Имя пользователя, для которого перечисляются группы" + +#: plugins/personal/posix/posix_shadow.tpl:5 +msgid "User must change password on first login" +msgstr "Пользователь должен сменить пароль при первом входе в систему" + +#: plugins/personal/posix/posix_shadow.tpl:19 +#: plugins/personal/samba/samba2.tpl:68 plugins/personal/samba/samba3.tpl:225 +msgid "Password expires on" +msgstr "Срок действия пароля истекает" + +#: plugins/personal/posix/generic.tpl:7 plugins/personal/samba/samba3.tpl:13 +#: plugins/personal/samba/samba3.tpl:65 +#: plugins/personal/samba/class_sambaAccount.inc:464 +msgid "Home directory" +msgstr "Домашний каталог" + +#: plugins/personal/posix/generic.tpl:13 +msgid "Shell" +msgstr "Оболочка" + +#: plugins/personal/posix/generic.tpl:21 +msgid "Primary group" +msgstr "Основная группа" + +#: plugins/personal/posix/generic.tpl:29 plugins/gofax/reports/detail.tpl:46 +#: plugins/gofax/reports/contents.tpl:32 plugins/gofon/reports/contents.tpl:35 +msgid "Status" +msgstr "Состояние" + +#: plugins/personal/posix/generic.tpl:38 +msgid "Force UID/GID" +msgstr "Указать UID/GID вручную" + +#: plugins/personal/posix/generic.tpl:40 +msgid "UID" +msgstr "UID" + +#: plugins/personal/posix/generic.tpl:45 +msgid "GID" +msgstr "GID" + +#: plugins/personal/posix/generic.tpl:54 +msgid "Group membership" +msgstr "Членство в группах" + +#: plugins/personal/posix/generic.tpl:56 +msgid "(Warning: more than 16 groups are not supported by NFS!)" +msgstr "" +"(Предупреждение: NFS не поддерживает более 16 групп для одного пользователя!)" + +#: plugins/personal/posix/generic.tpl:74 +msgid "Account" +msgstr "Учетная запись" + +#: plugins/personal/posix/generic.tpl:89 +msgid "Environment" +msgstr "Окружение" + +#: plugins/personal/posix/generic.tpl:92 +msgid "Default printer" +msgstr "Принтер по умолчанию" + +#: plugins/personal/posix/generic.tpl:100 +msgid "Default language" +msgstr "Язык по умолчанию" + +#: plugins/personal/posix/generic.tpl:113 +msgid "System trust" +msgstr "Системные доверия" + +#: plugins/personal/posix/main.inc:131 +msgid "Unix settings" +msgstr "Атрибуты UNIX" + +#: plugins/personal/posix/class_posixAccount.inc:16 +#: plugins/generic/references/class_reference.inc:22 +msgid "UNIX" +msgstr "Unix" + +#: plugins/personal/posix/class_posixAccount.inc:132 +#: plugins/personal/posix/class_posixAccount.inc:895 +#: plugins/admin/groups/class_groupManagement.inc:377 +msgid "Group of user" +msgstr "Группа пользователя" + +#: plugins/personal/posix/class_posixAccount.inc:172 +msgid "unconfigured" +msgstr "Не настроено" + +#: plugins/personal/posix/class_posixAccount.inc:190 +#: plugins/admin/systems/class_terminalService.inc:121 +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:99 +msgid "automatic" +msgstr "автоматически" + +#: plugins/personal/posix/class_posixAccount.inc:218 +msgid "This account has no unix extensions." +msgstr "В этой учетной записи нет расширений UNIX." + +#: plugins/personal/posix/class_posixAccount.inc:238 +#: plugins/personal/posix/class_posixAccount.inc:241 +msgid "Remove posix account" +msgstr "Удалить учетную запись POSIX" + +#: plugins/personal/posix/class_posixAccount.inc:239 +msgid "" +"This account has unix features enabled. To disable them, you'll need to " +"remove the samba account first." +msgstr "" +"В этой учетной записи используются атрибуты POSIX. Чтобы отключить их " +"использование, сначала нужно удалить учетную запись Samba." + +#: plugins/personal/posix/class_posixAccount.inc:242 +msgid "" +"This account has posix features enabled. You can disable them by clicking " +"below." +msgstr "" +"В этой учетной записи используются атрибуты POSIX. Вы можете отключить их " +"использование, щелкнув ниже." + +#: plugins/personal/posix/class_posixAccount.inc:245 +msgid "Create posix account" +msgstr "Создать учетную запись POSIX" + +#: plugins/personal/posix/class_posixAccount.inc:246 +msgid "" +"This account has posix features disabled. You can enable them by clicking " +"below." +msgstr "" +"В этой учетной записи не используются атрибуты POSIX. Вы можете использовать " +"их, щелкнув ниже." + +#: plugins/personal/posix/class_posixAccount.inc:429 +#, php-format +msgid "Password can't be changed up to %s days after last change" +msgstr "Пароль нельзя изменить в течение %s дн. с последней смены (shadowMin)" + +#: plugins/personal/posix/class_posixAccount.inc:431 +#, php-format +msgid "Password must be changed after %s days" +msgstr "Пароль должен быть изменен по истечении %s дн. (shadowMax)" + +#: plugins/personal/posix/class_posixAccount.inc:433 +#, php-format +msgid "Disable account after %s days of inactivity after password expiery" +msgstr "" +"Отключить учетную запись, если срок действия пароля истек и прошло %s дн. " +"бездействия (shadowInactive)" + +#: plugins/personal/posix/class_posixAccount.inc:435 +#, php-format +msgid "Warn user %s days before password expiery" +msgstr "" +"Предупреждать пользователей за %s дн. до истечения срока действия пароля " +"(shadowWarning)" + +#: plugins/personal/posix/class_posixAccount.inc:457 +#: plugins/personal/samba/class_sambaAccount.inc:303 +#: plugins/personal/generic/class_user.inc:210 +#: plugins/gofax/reports/class_faxreport.inc:272 +#: plugins/gofon/reports/class_fonreport.inc:205 +msgid "January" +msgstr "Январь" + +#: plugins/personal/posix/class_posixAccount.inc:457 +#: plugins/personal/samba/class_sambaAccount.inc:303 +#: plugins/personal/generic/class_user.inc:210 +#: plugins/gofax/reports/class_faxreport.inc:272 +#: plugins/gofon/reports/class_fonreport.inc:205 +msgid "February" +msgstr "Февраль" + +#: plugins/personal/posix/class_posixAccount.inc:457 +#: plugins/personal/samba/class_sambaAccount.inc:303 +#: plugins/personal/generic/class_user.inc:210 +#: plugins/gofax/reports/class_faxreport.inc:272 +#: plugins/gofon/reports/class_fonreport.inc:205 +msgid "March" +msgstr "Март" + +#: plugins/personal/posix/class_posixAccount.inc:457 +#: plugins/personal/samba/class_sambaAccount.inc:303 +#: plugins/personal/generic/class_user.inc:210 +#: plugins/gofax/reports/class_faxreport.inc:272 +#: plugins/gofon/reports/class_fonreport.inc:205 +msgid "April" +msgstr "Апрель" + +#: plugins/personal/posix/class_posixAccount.inc:458 +#: plugins/personal/samba/class_sambaAccount.inc:304 +#: plugins/personal/generic/class_user.inc:211 +#: plugins/gofax/reports/class_faxreport.inc:273 +#: plugins/gofon/reports/class_fonreport.inc:206 +msgid "May" +msgstr "Май" + +#: plugins/personal/posix/class_posixAccount.inc:458 +#: plugins/personal/samba/class_sambaAccount.inc:304 +#: plugins/personal/generic/class_user.inc:211 +#: plugins/gofax/reports/class_faxreport.inc:273 +#: plugins/gofon/reports/class_fonreport.inc:206 +msgid "June" +msgstr "Июнь" + +#: plugins/personal/posix/class_posixAccount.inc:458 +#: plugins/personal/samba/class_sambaAccount.inc:304 +#: plugins/personal/generic/class_user.inc:211 +#: plugins/gofax/reports/class_faxreport.inc:273 +#: plugins/gofon/reports/class_fonreport.inc:206 +msgid "July" +msgstr "Июль" + +#: plugins/personal/posix/class_posixAccount.inc:458 +#: plugins/personal/samba/class_sambaAccount.inc:304 +#: plugins/personal/generic/class_user.inc:211 +#: plugins/gofax/reports/class_faxreport.inc:273 +#: plugins/gofon/reports/class_fonreport.inc:206 +msgid "August" +msgstr "Август" + +#: plugins/personal/posix/class_posixAccount.inc:458 +#: plugins/personal/samba/class_sambaAccount.inc:304 +#: plugins/personal/generic/class_user.inc:211 +#: plugins/gofax/reports/class_faxreport.inc:274 +#: plugins/gofon/reports/class_fonreport.inc:207 +msgid "September" +msgstr "Сентябрь" + +#: plugins/personal/posix/class_posixAccount.inc:459 +#: plugins/personal/samba/class_sambaAccount.inc:305 +#: plugins/personal/generic/class_user.inc:212 +#: plugins/gofax/reports/class_faxreport.inc:274 +#: plugins/gofon/reports/class_fonreport.inc:207 +msgid "October" +msgstr "Октябрь" + +#: plugins/personal/posix/class_posixAccount.inc:459 +#: plugins/personal/samba/class_sambaAccount.inc:305 +#: plugins/personal/generic/class_user.inc:212 +#: plugins/gofax/reports/class_faxreport.inc:274 +#: plugins/gofon/reports/class_fonreport.inc:207 +msgid "November" +msgstr "Ноябрь" + +#: plugins/personal/posix/class_posixAccount.inc:459 +#: plugins/personal/samba/class_sambaAccount.inc:305 +#: plugins/personal/generic/class_user.inc:212 +#: plugins/gofax/reports/class_faxreport.inc:274 +#: plugins/gofon/reports/class_fonreport.inc:207 +msgid "December" +msgstr "Декабрь" + +#: plugins/personal/posix/class_posixAccount.inc:509 +#: plugins/personal/samba/class_sambaAccount.inc:338 +#: plugins/admin/systems/class_terminalGeneric.inc:61 +#: plugins/admin/systems/class_workstationGeneric.inc:70 +msgid "disabled" +msgstr "отключен" + +#: plugins/personal/posix/class_posixAccount.inc:509 +msgid "full access" +msgstr "полный доступ" + +#: plugins/personal/posix/class_posixAccount.inc:510 +msgid "allow access to these hosts" +msgstr "разрешить доступ только на эти хосты" + +#: plugins/personal/posix/class_posixAccount.inc:662 +msgid "Failed: overriding lock" +msgstr "Ошибка: замещение блокировки" + +#: plugins/personal/posix/class_posixAccount.inc:810 +msgid "The required field 'Home directory' is not set." +msgstr "Обязательное поле \"Домашний каталог\" не заполнено." + +#: plugins/personal/posix/class_posixAccount.inc:813 +msgid "Please enter a valid path in 'Home directory' field." +msgstr "Введите корректный путь в поле \"Домашний каталог\"." + +#: plugins/personal/posix/class_posixAccount.inc:821 +msgid "Value specified as 'UID' is not valid." +msgstr "Значение поля \"UID\" некорректно." + +#: plugins/personal/posix/class_posixAccount.inc:824 +msgid "Value specified as 'UID' is too small." +msgstr "Значение 'UID' слишком маленькое." + +#: plugins/personal/posix/class_posixAccount.inc:828 +#: plugins/admin/groups/class_groupGeneric.inc:594 +msgid "Value specified as 'GID' is not valid." +msgstr "Значение поля 'GID' некорректно." + +#: plugins/personal/posix/class_posixAccount.inc:831 +#: plugins/admin/groups/class_groupGeneric.inc:597 +msgid "Value specified as 'GID' is too small." +msgstr "Значение 'GID' слишком маленькое." + +#: plugins/personal/posix/class_posixAccount.inc:840 +msgid "Value specified as 'shadowMin' is not valid." +msgstr "Значение поля \"shadowMin\" некорректно." + +#: plugins/personal/posix/class_posixAccount.inc:845 +msgid "Value specified as 'shadowMax' is not valid." +msgstr "Значение поля \"shadowMax\" некорректно." + +#: plugins/personal/posix/class_posixAccount.inc:850 +msgid "Value specified as 'shadowWarning' is not valid." +msgstr "Значение поля \"shadowWarning\" некорректно." + +#: plugins/personal/posix/class_posixAccount.inc:853 +msgid "'shadowWarning' without 'shadowMax' makes no sense." +msgstr "Использование \"shadowWarning\" без \"shadowMax\" бессмысленно." + +#: plugins/personal/posix/class_posixAccount.inc:856 +msgid "Value specified as 'shadowWarning' should be smaller than 'shadowMax'." +msgstr "" +"Значение поля \"shadowWarning\" должно быть меньше значения поля \"shadowMax" +"\"." + +#: plugins/personal/posix/class_posixAccount.inc:859 +msgid "Value specified as 'shadowWarning' should be greater than 'shadowMin'." +msgstr "" +"Значение поля \"shadowWarning\" должно быть больше значения поля \"shadowMin" +"\"." + +#: plugins/personal/posix/class_posixAccount.inc:864 +msgid "Value specified as 'shadowInactive' is not valid." +msgstr "Значение поля \"shadowInactive\" некорректно." + +#: plugins/personal/posix/class_posixAccount.inc:867 +msgid "'shadowInactive' without 'shadowMax' makes no sense." +msgstr "Использование \"shadowInactive\" без \"shadowMax\" бессмысленно." + +#: plugins/personal/posix/class_posixAccount.inc:872 +msgid "Value specified as 'shadowMin' should be smaller than 'shadowMax'." +msgstr "" +"Значение поля \"shadowMin\" должно быть меньше значения поля \"shadowMax\"." + +#: plugins/personal/posix/class_posixAccount.inc:974 +#: plugins/admin/groups/class_groupGeneric.inc:628 +msgid "Too many users, can't allocate a free ID!" +msgstr "Слишком много пользователей, невозможно создать идентификатор!" + +#: plugins/personal/samba/samba2.tpl:13 +msgid "Samba home" +msgstr "Домашний каталог Samba" + +#: plugins/personal/samba/samba2.tpl:30 plugins/personal/samba/samba3.tpl:38 +msgid "Script path" +msgstr "Путь к сценариям" + +#: plugins/personal/samba/samba2.tpl:36 plugins/personal/samba/samba3.tpl:44 +#: plugins/personal/samba/samba3.tpl:75 +#: plugins/personal/samba/class_sambaAccount.inc:465 +msgid "Profile path" +msgstr "Путь к профилю" + +#: plugins/personal/samba/samba2.tpl:48 plugins/personal/samba/samba3.tpl:210 +msgid "Access options" +msgstr "Параметры доступа" + +#: plugins/personal/samba/samba2.tpl:54 plugins/personal/samba/samba3.tpl:216 +msgid "Allow user to change password from client" +msgstr "Разрешить пользователям менять пароль с клиента" + +#: plugins/personal/samba/samba2.tpl:57 plugins/personal/samba/samba3.tpl:219 +msgid "Login from windows client requires no password" +msgstr "Не спрашивать пароль при входе в систему из Windows" + +#: plugins/personal/samba/samba2.tpl:60 plugins/personal/samba/samba3.tpl:222 +msgid "Temporary disable samba account" +msgstr "Временно отключить учетную запись Samba" + +#: plugins/personal/samba/samba3.tpl:23 +msgid "Domain" +msgstr "Домен" + +#: plugins/personal/samba/samba3.tpl:56 +msgid "Terminal Server" +msgstr "Терминальный сервер" + +#: plugins/personal/samba/samba3.tpl:62 +msgid "Allow login on terminal server" +msgstr "Разрешить вход на терминальный сервер" + +#: plugins/personal/samba/samba3.tpl:87 +msgid "Inherit client config" +msgstr "Унаследовать конфигурацию клиента" + +#: plugins/personal/samba/samba3.tpl:90 +msgid "Initial program" +msgstr "Начальная программа" + +#: plugins/personal/samba/samba3.tpl:96 +msgid "Working directory" +msgstr "Рабочий каталог" + +#: plugins/personal/samba/samba3.tpl:111 +msgid "Timeout settings (in minutes)" +msgstr "Настройки таймаута (в минутах)" + +#: plugins/personal/samba/samba3.tpl:116 +#: plugins/personal/samba/class_sambaAccount.inc:472 +msgid "Connection" +msgstr "Подключение" + +#: plugins/personal/samba/samba3.tpl:125 +#: plugins/personal/samba/class_sambaAccount.inc:473 +msgid "Disconnection" +msgstr "Отключение" + +#: plugins/personal/samba/samba3.tpl:134 +#: plugins/personal/samba/class_sambaAccount.inc:474 +msgid "IDLE" +msgstr "Простой" + +#: plugins/personal/samba/samba3.tpl:147 +msgid "Client devices" +msgstr "Клиентские устройства" + +#: plugins/personal/samba/samba3.tpl:152 +msgid "Connect client drives at logon" +msgstr "Подключить клиентские устройства при входе" + +#: plugins/personal/samba/samba3.tpl:158 +msgid "Connect client printers at logon" +msgstr "Подключить клиентские принтеры при входе" + +#: plugins/personal/samba/samba3.tpl:164 +msgid "Default to main client printer" +msgstr "Указать принтер по умолчанию" + +#: plugins/personal/samba/samba3.tpl:174 +#: plugins/personal/connectivity/pureftpd.tpl:64 +msgid "Miscellaneous" +msgstr "Разное" + +#: plugins/personal/samba/samba3.tpl:178 +msgid "Shadowing" +msgstr "Затенение" + +#: plugins/personal/samba/samba3.tpl:187 +msgid "On broken or timed out" +msgstr "При обрыве или таймауте" + +#: plugins/personal/samba/samba3.tpl:195 +msgid "Reconnect if disconnected" +msgstr "В" + +#: plugins/personal/samba/samba3.tpl:241 +msgid "Allow connection from these workstations only" +msgstr "Разрешить подключения только от этой рабочей станции" + +#: plugins/personal/samba/main.inc:123 +msgid "Samba settings" +msgstr "Настройки Samba" + +#: plugins/personal/samba/samba3_workstations.tpl:6 +msgid "Select workstations to add" +msgstr "Выберите рабочие станции для добавления" + +#: plugins/personal/samba/samba3_workstations.tpl:29 +msgid "Display workstations of department" +msgstr "Показать рабочие станции подразделения" + +#: plugins/personal/samba/samba3_workstations.tpl:35 +msgid "Display workstations matching" +msgstr "Показать соответствующие рабочие станции" + +#: plugins/personal/samba/class_sambaAccount.inc:170 +msgid "This account has no samba extensions." +msgstr "В этой учетной записи нет расширений Samba." + +#: plugins/personal/samba/class_sambaAccount.inc:179 +msgid "Remove samba account" +msgstr "Удалить учетную запись Samba" + +#: plugins/personal/samba/class_sambaAccount.inc:180 +msgid "" +"This account has samba features enabled. You can disable them by clicking " +"below." +msgstr "" +"В этой учетной записи есть настройки Samba. Вы можете отключить их, щелкнув " +"ниже." + +#: plugins/personal/samba/class_sambaAccount.inc:190 +#: plugins/personal/samba/class_sambaAccount.inc:193 +msgid "Create samba account" +msgstr "Создать учетную запись Samba" + +#: plugins/personal/samba/class_sambaAccount.inc:191 +msgid "" +"This account has samba features disabled. You can enable them by clicking " +"below." +msgstr "" +"В этой учетной записи нет настроек Samba. Вы можете включить их, щелкнув " +"ниже." + +#: plugins/personal/samba/class_sambaAccount.inc:194 +msgid "" +"This account has samba features disabled. Posix features are needed for " +"samba accounts, enable them first." +msgstr "" +"В этой учетной записи нет настроек Samba. Для учетных записей Samba нужны " +"атрибуты POSIX, включите сначала их использование." + +#: plugins/personal/samba/class_sambaAccount.inc:339 +msgid "input on, notify on" +msgstr "входящие вкл, оповещение вкл" + +#: plugins/personal/samba/class_sambaAccount.inc:340 +msgid "input on, notify off" +msgstr "входящие вкл, оповещение выкл" + +#: plugins/personal/samba/class_sambaAccount.inc:341 +msgid "input off, notify on" +msgstr "входящие выкл, оповещение вкл" + +#: plugins/personal/samba/class_sambaAccount.inc:342 +msgid "input off, nofify off" +msgstr "входящие выкл, оповещение выкл" + +#: plugins/personal/samba/class_sambaAccount.inc:344 +msgid "disconnect" +msgstr "отключиться" + +#: plugins/personal/samba/class_sambaAccount.inc:345 +msgid "reset" +msgstr "сброс" + +#: plugins/personal/samba/class_sambaAccount.inc:347 +msgid "from any client" +msgstr "от любого клиента" + +#: plugins/personal/samba/class_sambaAccount.inc:348 +msgid "from previous client only" +msgstr "только от предыдущего клиента" + +#: plugins/personal/samba/class_sambaAccount.inc:467 +#, php-format +msgid "The value specified as '%s' contains invalid characters!" +msgstr "Значение '%s' содержит недопустимые символы." + +#: plugins/personal/samba/class_sambaAccount.inc:477 +#, php-format +msgid "" +"The timeout property '%s' is checked and contains invalid or no characters!" +msgstr "Значение таймаута '%s' пустое или содержит недопустимые символы." + +#: plugins/personal/samba/class_sambaAccount.inc:483 +msgid "" +"The windows user manager only allows eight clients. You've specified more " +"than eight." +msgstr "" +"Менеджер пользователей Windows допускает подключение только восми клиентов. " +"Вы указали больше чем восем." + +#: plugins/personal/samba/class_sambaAccount.inc:636 +msgid "" +"Warning: This account has an undefined samba SID assigned. The problem can " +"not be fixed by GOsa!" +msgstr "" +"Внимание: этот аккаунт имеет неправильный SID. Это нельзя исправить " +"средствами GOsa." + +#: plugins/personal/samba/class_sambaAccount.inc:661 +msgid "" +"Warning: Can't identify users primary group - no conversion to a samba group " +"possible!" +msgstr "" +"Предупреждение: не удается идентифицировать основную группу, преобразование " +"в группу Samba невозможно!" + +#: plugins/personal/generic/class_user.inc:221 +msgid "female" +msgstr "женский" + +#: plugins/personal/generic/class_user.inc:221 +msgid "male" +msgstr "мужской" + +#: plugins/personal/generic/class_user.inc:231 +msgid "This account has no valid GOsa extensions." +msgstr "Для этой учетной записи нет корректных расширений GOsa." + +#: plugins/personal/generic/class_user.inc:260 +msgid "The specified file has not been uploaded via HTTP POST! Aborted." +msgstr "" +"Указанный файл не был загружен на сервер (метод HTTP POST)! Операция " +"прервана." + +#: plugins/personal/generic/class_user.inc:354 +msgid "Please enter a valid serial number" +msgstr "Введите корректный серийный номер" + +#: plugins/personal/generic/class_user.inc:358 +#: plugins/personal/generic/class_user.inc:383 +#: plugins/admin/systems/class_terminalInfo.inc:52 +#: plugins/admin/systems/class_terminalInfo.inc:167 +msgid "present" +msgstr "присутствует" + +#: plugins/personal/generic/class_user.inc:360 +#: plugins/personal/generic/class_user.inc:385 +msgid "absent" +msgstr "отсутствует" + +#: plugins/personal/generic/class_user.inc:782 +msgid "Kerberos database communication failed" +msgstr "Ошибка соединения с базой данных Kerberos" + +#: plugins/personal/generic/class_user.inc:799 +msgid "Can't remove user from kerberos database." +msgstr "Не удается удалить пользователя из базы данных Kerberos." + +#: plugins/personal/generic/class_user.inc:810 +msgid "Can't add user to kerberos database." +msgstr "Не удается добавить пользователя в базу данных Kerberos." + +#: plugins/personal/generic/class_user.inc:850 +msgid "You have no permissions to create a user on this 'Base'." +msgstr "У вас недостаточно прав для создания пользователя в этой ветке." + +#: plugins/personal/generic/class_user.inc:855 +#: plugins/addons/addressbook/class_addressbook.inc:486 +#: plugins/admin/users/class_userManagement.inc:419 +msgid "The required field 'Name' is not set." +msgstr "Обязательное поле \"Имя\" не заполнено." + +#: plugins/personal/generic/class_user.inc:864 +msgid "There's already a person with this 'Login' in the database." +msgstr "" +"Пользователь с таким регистрационным именем в базе данных уже существует." + +#: plugins/personal/generic/class_user.inc:870 +#: plugins/addons/addressbook/class_addressbook.inc:490 +#: plugins/admin/users/class_userManagement.inc:422 +msgid "The required field 'Given name' is not set." +msgstr "Обязательное поле \"Личное имя\" не заполнено." + +#: plugins/personal/generic/class_user.inc:873 +msgid "The required field 'Login' is not set." +msgstr "Обязательное поле \"Регистрационное имя\" не заполнено." + +#: plugins/personal/generic/class_user.inc:880 +msgid "" +"There's already a person with this 'Name'/'Given name' combination in the " +"database." +msgstr "" +"Пользователь с такой комбинацией имени и личного имени в базе данных уже " +"существует." + +#: plugins/personal/generic/class_user.inc:887 +msgid "" +"The field 'Login' contains invalid characters. Lowercase, numbers and dashes " +"are allowed." +msgstr "" +"Значение поля \"Регистрационное имя\" содержит недопустимые символы. " +"Допустимыми являются буквы в нижнем регистре, цифры и дефисы." + +#: plugins/personal/generic/class_user.inc:890 +msgid "The field 'Homepage' contains an invalid URL definition." +msgstr "Значение поля \"Домашняя страница\" содержит некорректный URL." + +#: plugins/personal/generic/class_user.inc:893 +#: plugins/personal/generic/class_user.inc:921 +#: plugins/addons/addressbook/class_addressbook.inc:496 +#: plugins/addons/addressbook/class_addressbook.inc:524 +#: plugins/admin/departments/class_departmentGeneric.inc:153 +msgid "The field 'Name' contains invalid characters." +msgstr "Значение поля \"Имя\" содержит недопустимые символы." + +#: plugins/personal/generic/class_user.inc:896 +#: plugins/personal/generic/class_user.inc:918 +#: plugins/addons/addressbook/class_addressbook.inc:499 +#: plugins/addons/addressbook/class_addressbook.inc:521 +msgid "The field 'Given name' contains invalid characters." +msgstr "Значение поля \"Личное имя\" содержит недопустимые символы." + +#: plugins/personal/generic/class_user.inc:901 +#: plugins/personal/generic/class_user.inc:904 +#: plugins/addons/addressbook/class_addressbook.inc:504 +#: plugins/addons/addressbook/class_addressbook.inc:507 +#: plugins/admin/departments/class_departmentGeneric.inc:156 +msgid "The field 'Phone' contains an invalid phone number." +msgstr "Значение поля \"Телефон\" содержит недопустимый номер телефона." + +#: plugins/personal/generic/class_user.inc:907 +#: plugins/addons/addressbook/class_addressbook.inc:510 +#: plugins/admin/departments/class_departmentGeneric.inc:159 +msgid "The field 'Fax' contains an invalid phone number." +msgstr "Значение поля \"Факс\" содержит недопустимый номер телефона." + +#: plugins/personal/generic/class_user.inc:910 +#: plugins/addons/addressbook/class_addressbook.inc:513 +msgid "The field 'Mobile' contains an invalid phone number." +msgstr "Значение поля \"Мобильный\" содержит некорректный номер телефона." + +#: plugins/personal/generic/class_user.inc:913 +#: plugins/addons/addressbook/class_addressbook.inc:516 +msgid "The field 'Pager' contains an invalid phone number." +msgstr "Значение поля \"Пейджер\" содержит некорректный номер телефона." + +#: plugins/personal/generic/password.tpl:2 +msgid "" +"You have changed the method your password is stored in the ldap database. " +"For that reason you've to enter your password at this point again. GOsa will " +"then encode it with the selected method." +msgstr "" +"Вы изменили метод шифрования паролей в базе LDAP. В связи с этим введите " +"свой пароль снова. GOsa произведет шифрование в соответствии с выбраной " +"схемой." + +#: plugins/personal/generic/generic.tpl:6 +msgid "Personal information" +msgstr "Личная информация" + +#: plugins/personal/generic/generic.tpl:15 +#: plugins/personal/generic/generic_picture.tpl:6 +msgid "Personal picture" +msgstr "Изображение" + +#: plugins/personal/generic/generic.tpl:17 +msgid "Change picture" +msgstr "Сменить изображение" + +#: plugins/personal/generic/generic.tpl:24 +#: plugins/addons/addressbook/contents.tpl:14 +#: plugins/addons/addressbook/address_edit.tpl:20 +#: plugins/addons/addressbook/address_info.tpl:16 +#: plugins/addons/addressbook/class_addressbook.inc:463 +#: plugins/admin/users/template.tpl:19 +msgid "Name" +msgstr "Фамилия" + +#: plugins/personal/generic/generic.tpl:30 +#: plugins/addons/addressbook/address_edit.tpl:20 +#: plugins/addons/addressbook/class_addressbook.inc:463 +#: plugins/admin/users/template.tpl:23 +msgid "Given name" +msgstr "Имя" + +#: plugins/personal/generic/generic.tpl:34 plugins/admin/users/template.tpl:29 +msgid "Login" +msgstr "Имя пользователя" + +#: plugins/personal/generic/generic.tpl:42 +#: plugins/addons/addressbook/address_edit.tpl:26 +#: plugins/addons/addressbook/address_info.tpl:22 +msgid "Personal title" +msgstr "Обращение" + +#: plugins/personal/generic/generic.tpl:50 +msgid "Academic title" +msgstr "Академическое звание" + +#: plugins/personal/generic/generic.tpl:58 +msgid "Date of birth" +msgstr "Дата рождения" + +#: plugins/personal/generic/generic.tpl:75 +#: ihtml/themes/altlinux/sizelimit.tpl:14 +#: ihtml/themes/default/sizelimit.tpl:14 +msgid "Set" +msgstr "Установить" + +#: plugins/personal/generic/generic.tpl:81 +msgid "Sex" +msgstr "Пол" + +#: plugins/personal/generic/generic.tpl:92 +#: plugins/gofax/blocklists/generic.tpl:14 plugins/admin/groups/generic.tpl:21 +#: plugins/admin/applications/generic.tpl:33 +#: plugins/admin/departments/generic.tpl:27 +#: plugins/admin/systems/server.tpl:13 plugins/admin/systems/phone.tpl:13 +#: plugins/admin/systems/terminal.tpl:18 plugins/admin/systems/printer.tpl:21 +#: plugins/admin/systems/workstation.tpl:18 +#: plugins/admin/systems/component.tpl:13 +#: plugins/admin/systems/wingeneric.tpl:13 +#: plugins/admin/ogroups/generic.tpl:21 +msgid "Base" +msgstr "Ветка" + +#: plugins/personal/generic/generic.tpl:96 +msgid "Choose subtree to place user in" +msgstr "Выберите ветку для пользователя" + +#: plugins/personal/generic/generic.tpl:111 +#: plugins/personal/generic/generic.tpl:255 +#: plugins/addons/addressbook/address_edit.tpl:37 +#: plugins/addons/addressbook/address_edit.tpl:86 +#: plugins/addons/addressbook/address_info.tpl:33 +#: plugins/addons/addressbook/address_info.tpl:82 +#: plugins/admin/departments/generic.tpl:54 +msgid "Address" +msgstr "Адрес" + +#: plugins/personal/generic/generic.tpl:115 +msgid "Private phone" +msgstr "Личный телефон" + +#: plugins/personal/generic/generic.tpl:119 +msgid "Homepage" +msgstr "Домашняя страница" + +#: plugins/personal/generic/generic.tpl:128 +msgid "Password storage" +msgstr "Хэширование паролей" + +#: plugins/personal/generic/generic.tpl:138 +#: plugins/personal/generic/generic_certs.tpl:7 +msgid "Certificates" +msgstr "Сертификаты" + +#: plugins/personal/generic/generic.tpl:140 +msgid "Edit certificates" +msgstr "Изменить сертификаты" + +#: plugins/personal/generic/generic.tpl:144 +msgid "Kerberos" +msgstr "Kerberos" + +#: plugins/personal/generic/generic.tpl:145 +msgid "Edit properties" +msgstr "Изменить свойства" + +#: plugins/personal/generic/generic.tpl:161 +msgid "Organizational information" +msgstr "Информация об организации" + +#: plugins/personal/generic/generic.tpl:173 +msgid "Organization" +msgstr "Организация" + +#: plugins/personal/generic/generic.tpl:177 +#: plugins/addons/addressbook/address_edit.tpl:68 +#: plugins/addons/addressbook/address_info.tpl:64 +#: plugins/generic/references/class_reference.inc:38 +msgid "Department" +msgstr "Подразделение" + +#: plugins/personal/generic/generic.tpl:181 +msgid "Department No." +msgstr "Номер подразделения" + +#: plugins/personal/generic/generic.tpl:187 +msgid "Employee No." +msgstr "Номер работника" + +#: plugins/personal/generic/generic.tpl:193 +msgid "Employee type" +msgstr "Форма трудоустройства" + +#: plugins/personal/generic/generic.tpl:209 +#: plugins/personal/generic/generic.tpl:348 +msgid "Room No." +msgstr "Номер комнаты" + +#: plugins/personal/generic/generic.tpl:221 +#: plugins/addons/addressbook/contents.tpl:15 +#: plugins/addons/addressbook/address_edit.tpl:44 +#: plugins/addons/addressbook/address_info.tpl:40 +msgid "Mobile" +msgstr "Мобильный" + +#: plugins/personal/generic/generic.tpl:225 +#: plugins/addons/addressbook/address_edit.tpl:95 +#: plugins/addons/addressbook/address_info.tpl:91 +msgid "Pager" +msgstr "Пейджер" + +#: plugins/personal/generic/generic.tpl:247 +#: plugins/admin/departments/generic.tpl:42 +#: plugins/admin/departments/generic.tpl:50 +#: plugins/admin/systems/printer.tpl:14 +msgid "Location" +msgstr "Местоположение" + +#: plugins/personal/generic/generic.tpl:251 +#: plugins/admin/departments/generic.tpl:46 +msgid "State" +msgstr "Адм. единица" + +#: plugins/personal/generic/generic.tpl:269 +msgid "Vocation" +msgstr "Специальность" + +#: plugins/personal/generic/generic.tpl:273 +msgid "Unit description" +msgstr "Описание подразделения" + +#: plugins/personal/generic/generic.tpl:281 +msgid "Subject area" +msgstr "Область деятельности" + +#: plugins/personal/generic/generic.tpl:289 +msgid "Functional title" +msgstr "Должность" + +#: plugins/personal/generic/generic.tpl:296 +msgid "Role" +msgstr "Роль" + +#: plugins/personal/generic/generic.tpl:308 +msgid "Person locality" +msgstr "Местоположение сотрудника" + +#: plugins/personal/generic/generic.tpl:316 +msgid "Unit" +msgstr "Подразделение" + +#: plugins/personal/generic/generic.tpl:323 +msgid "Street" +msgstr "Улица" + +#: plugins/personal/generic/generic.tpl:329 +#: plugins/addons/addressbook/address_edit.tpl:74 +#: plugins/addons/addressbook/address_info.tpl:70 +msgid "Postal code" +msgstr "Почтовый индекс" + +#: plugins/personal/generic/generic.tpl:335 +msgid "House identifier" +msgstr "Номер дома" + +#: plugins/personal/generic/generic.tpl:357 +msgid "Please use the phone tab" +msgstr "Воспользуйтесь закладкой \"Телефон\"" + +#: plugins/personal/generic/generic.tpl:370 +msgid "Last delivery" +msgstr "Последняя доставка" + +#: plugins/personal/generic/generic.tpl:378 +msgid "Public visible" +msgstr "Видимый всем" + +#: plugins/personal/generic/generic_picture.tpl:23 +msgid "Remove picture" +msgstr "Удалить изображение" + +#: plugins/personal/generic/generic_picture.tpl:29 +#: plugins/addons/addressbook/address_edit.tpl:107 +msgid "Save" +msgstr "Сохранить" + +#: plugins/personal/generic/generic_certs.tpl:14 +msgid "Standard certificate" +msgstr "Стандартный сертификат" + +#: plugins/personal/generic/generic_certs.tpl:19 +#: plugins/personal/generic/generic_certs.tpl:30 +#: plugins/personal/generic/generic_certs.tpl:41 +#: plugins/admin/groups/class_groupMail.inc:408 +#: plugins/admin/applications/class_applicationParameters.inc:94 +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:205 +#: ihtml/themes/altlinux/islocked.tpl:13 ihtml/themes/classic/islocked.tpl:13 +#: ihtml/themes/default/islocked.tpl:13 +msgid "Remove" +msgstr "Удалить" + +#: plugins/personal/generic/generic_certs.tpl:25 +msgid "S/MIME certificate" +msgstr "Сертификат S/MIME" + +#: plugins/personal/generic/generic_certs.tpl:36 +msgid "PKCS12 certificate" +msgstr "Сертификат PKCS12" + +#: plugins/personal/generic/generic_certs.tpl:48 +msgid "Certificate serial number" +msgstr "Серийный номер сертификата" + +#: plugins/personal/generic/main.inc:107 +msgid "You are not allowed to set your password!" +msgstr "Вам не разрешено менять пароль." + +#: plugins/personal/generic/main.inc:187 +msgid "Generic user information" +msgstr "Общая информация о пользователе" + +#: plugins/personal/connectivity/class_pureftpdAccount.inc:6 +#: plugins/generic/references/class_reference.inc:34 +msgid "FTP" +msgstr "FTP" + +#: plugins/personal/connectivity/class_pureftpdAccount.inc:112 +msgid "Value specified as 'Upload bandwidth' is not valid." +msgstr "Значение поля \"Пропускная способность (на сервер)\" некорректно." + +#: plugins/personal/connectivity/class_pureftpdAccount.inc:115 +msgid "Value specified as 'Download bandwidth' is not valid." +msgstr "Значение поля \"Пропускная способность (с сервера)\" некорректно." + +#: plugins/personal/connectivity/class_pureftpdAccount.inc:118 +msgid "Value specified as 'Files' is not valid." +msgstr "Значение поля \"Файлы\" некорректно." + +#: plugins/personal/connectivity/class_pureftpdAccount.inc:121 +msgid "Value specified as 'Size' is not valid." +msgstr "Значение поля \"Размер\" некорректно." + +#: plugins/personal/connectivity/class_pureftpdAccount.inc:124 +msgid "Value specified as 'Ratio' is not valid." +msgstr "Значение поля \"Отношение\" некорректно." + +#: plugins/personal/connectivity/class_phpgwAccount.inc:5 +msgid "PHPGroupware" +msgstr "PHPGroupware" + +#: plugins/personal/connectivity/proxy.tpl:1 +msgid "Proxy account" +msgstr "Аккаунт Proxy" + +#: plugins/personal/connectivity/proxy.tpl:8 +msgid "Filter unwanted content (i.e. pornographic or violence related)" +msgstr "" +"Фильтровать нежелательное содержимое (например, порнографическое или " +"связанное с насилием)" + +#: plugins/personal/connectivity/proxy.tpl:13 +msgid "Limit proxy access to working time" +msgstr "Ограничить доступ к прокси рабочим временем" + +#: plugins/personal/connectivity/proxy.tpl:42 +msgid "Restrict proxy usage by quota" +msgstr "Ограничить квотой использование прокси" + +#: plugins/personal/connectivity/proxy.tpl:52 +msgid "per" +msgstr "per" + +#: plugins/personal/connectivity/class_webdavAccount.inc:6 +msgid "WebDAV" +msgstr "WebDAV" + +#: plugins/personal/connectivity/phpgw.tpl:1 +msgid "PHPGroupware account" +msgstr "Учетная запись Groupware" + +#: plugins/personal/connectivity/webdav.tpl:1 +msgid "WebDAV account" +msgstr "Учетная запись WebDAV" + +#: plugins/personal/connectivity/pureftpd.tpl:1 +msgid "FTP account" +msgstr "Аккаунт FTP" + +#: plugins/personal/connectivity/pureftpd.tpl:11 +msgid "Bandwidth" +msgstr "Пропускная способность" + +#: plugins/personal/connectivity/pureftpd.tpl:15 +msgid "Upload bandwidth" +msgstr "Пропускная способность (на сервер)" + +#: plugins/personal/connectivity/pureftpd.tpl:16 +#: plugins/personal/connectivity/pureftpd.tpl:20 +msgid "kb/s" +msgstr "Кб/с" + +#: plugins/personal/connectivity/pureftpd.tpl:19 +msgid "Download bandwidth" +msgstr "Пропускная способность (с сервера)" + +#: plugins/personal/connectivity/pureftpd.tpl:31 +msgid "Quota" +msgstr "Квота" + +#: plugins/personal/connectivity/pureftpd.tpl:35 +msgid "Files" +msgstr "Файлы" + +#: plugins/personal/connectivity/pureftpd.tpl:39 +msgid "Size" +msgstr "Размер" + +#: plugins/personal/connectivity/pureftpd.tpl:50 +msgid "Ratio" +msgstr "Отношение" + +#: plugins/personal/connectivity/pureftpd.tpl:54 +msgid "Uploaded / downloaded files" +msgstr "Загрузка на сервер / с сервера" + +#: plugins/personal/connectivity/pureftpd.tpl:67 +msgid "Check to disable FTP Access" +msgstr "Отметьте, чтобы отключить доступ к FTP" + +#: plugins/personal/connectivity/pureftpd.tpl:67 +msgid "Temporary disable FTP access" +msgstr "Временно отключить доступ к FTP" + +#: plugins/personal/connectivity/class_connectivity.inc:60 +msgid "This account has no connectivity extensions." +msgstr "В этой учетной записи нет атрибутов для подключения." + +#: plugins/personal/connectivity/class_proxyAccount.inc:5 +#: plugins/generic/references/class_reference.inc:32 +msgid "Proxy" +msgstr "Прокси-сервер" + +#: plugins/personal/connectivity/class_proxyAccount.inc:69 +msgid "KB" +msgstr "Kb" + +#: plugins/personal/connectivity/class_proxyAccount.inc:69 +msgid "GB" +msgstr "Gb" + +#: plugins/personal/connectivity/class_proxyAccount.inc:70 +msgid "hour" +msgstr "час" + +#: plugins/personal/connectivity/class_proxyAccount.inc:70 +msgid "day" +msgstr "день" + +#: plugins/personal/connectivity/class_proxyAccount.inc:70 +msgid "week" +msgstr "неделя" + +#: plugins/personal/connectivity/class_proxyAccount.inc:70 +msgid "month" +msgstr "месяц" + +#: plugins/gofax/blocklists/generic.tpl:8 +msgid "List name" +msgstr "Список" + +#: plugins/gofax/blocklists/generic.tpl:10 +msgid "Name of blocklist" +msgstr "Имя стоп-листа" + +#: plugins/gofax/blocklists/generic.tpl:16 +msgid "Select subtree to place blocklist in" +msgstr "Выберите ветку стоп-листа" + +#: plugins/gofax/blocklists/generic.tpl:31 +#: plugins/admin/systems/service.tpl:42 plugins/admin/systems/service.tpl:120 +msgid "Type" +msgstr "Тип" + +#: plugins/gofax/blocklists/generic.tpl:33 +msgid "Select wether to filter incoming or outgoing calls" +msgstr "Выберите, нужно ли фильтровать входящие или исходящие звонки" + +#: plugins/gofax/blocklists/generic.tpl:39 plugins/admin/groups/generic.tpl:13 +#: plugins/admin/applications/generic.tpl:24 +#: plugins/admin/departments/generic.tpl:12 +#: plugins/admin/systems/server.tpl:24 plugins/admin/systems/phone.tpl:24 +#: plugins/admin/systems/printer.tpl:10 plugins/admin/systems/component.tpl:24 +#: plugins/admin/systems/wingeneric.tpl:24 +#: plugins/admin/ogroups/generic.tpl:13 +#: plugins/generic/references/contents.tpl:11 +msgid "Description" +msgstr "Описание" + +#: plugins/gofax/blocklists/generic.tpl:41 +msgid "Descriptive text for this blocklist" +msgstr "Описание стоп-листа" + +#: plugins/gofax/blocklists/generic.tpl:54 +msgid "Blocked numbers" +msgstr "Блокируемые номера" + +#: plugins/gofax/blocklists/generic.tpl:64 +#: plugins/gofax/blocklists/headpage.tpl:24 +#: plugins/addons/addressbook/contents.tpl:33 +#: plugins/admin/groups/headpage.tpl:25 plugins/admin/users/headpage.tpl:26 +#: plugins/admin/applications/headpage.tpl:24 +#: plugins/admin/departments/headpage.tpl:24 +#: plugins/admin/systems/headpage.tpl:25 plugins/admin/ogroups/headpage.tpl:25 +msgid "Information" +msgstr "Информация" + +#: plugins/gofax/blocklists/generic.tpl:66 +msgid "Numbers can also contain wild cards." +msgstr "Вместо точных номеров можно использовать шаблоны." + +#: plugins/gofax/blocklists/class_blocklistManagement.inc:5 +msgid "FAX Blocklists" +msgstr "Стоп-лист номеров (факсы)" + +#: plugins/gofax/blocklists/class_blocklistManagement.inc:121 +#, php-format +msgid "You're about to delete the blocklist '%s'." +msgstr "Вы собираетесь удалить стоп-лист '%s'." + +#: plugins/gofax/blocklists/class_blocklistManagement.inc:135 +msgid "You have no permission to remove this blocklist." +msgstr "У вас недостаточно прав для удаления этого стоп-листа." + +#: plugins/gofax/blocklists/class_blocklistManagement.inc:153 +msgid "Please specify a valid phone number." +msgstr "Укажите корректный номер телефона." + +#: plugins/gofax/blocklists/class_blocklistManagement.inc:226 +msgid "send" +msgstr "отправка" + +#: plugins/gofax/blocklists/class_blocklistManagement.inc:226 +msgid "receive" +msgstr "получение" + +#: plugins/gofax/blocklists/class_blocklistManagement.inc:342 +msgid "You have no permissions to create a blocklist on this 'Base'." +msgstr "У вас недостаточно прав для создания стоп-листа в этой ветке." + +#: plugins/gofax/blocklists/class_blocklistManagement.inc:348 +#: plugins/admin/departments/class_departmentGeneric.inc:141 +msgid "Required field 'Name' is not set." +msgstr "Обязательное поле \"Имя\" не заполнено." + +#: plugins/gofax/blocklists/class_blocklistManagement.inc:351 +msgid "Required field 'Name' contains invalid characters" +msgstr "Значение поля 'Имя' содержит недопустимые символы." + +#: plugins/gofax/blocklists/class_blocklistManagement.inc:359 +msgid "Specified name is already used." +msgstr "Указанное имя уже используется." + +#: plugins/gofax/blocklists/class_blocklistManagement.inc:366 +msgid "No permission to create a blocklist on this base." +msgstr "Недостаточно прав для создания стоп-листа в этой ветке." + +#: plugins/gofax/blocklists/remove.tpl:2 +#: plugins/addons/addressbook/remove.tpl:2 plugins/admin/groups/remove.tpl:2 +#: plugins/admin/users/remove.tpl:2 plugins/admin/applications/remove.tpl:2 +#: plugins/admin/departments/remove.tpl:2 plugins/admin/systems/remove.tpl:2 +#: plugins/admin/ogroups/remove.tpl:2 html/index.php:211 +#: ihtml/themes/altlinux/conflict.tpl:6 ihtml/themes/altlinux/islocked.tpl:6 +#: ihtml/themes/classic/conflict.tpl:6 ihtml/themes/classic/islocked.tpl:6 +#: ihtml/themes/default/conflict.tpl:6 ihtml/themes/default/islocked.tpl:6 +msgid "Warning" +msgstr "Предупреждение" + +#: plugins/gofax/blocklists/remove.tpl:7 +msgid "" +"Please double check if your really want to do this since there is no way for " +"GOsa to get your data back." +msgstr "" +"Подумайте еще раз, действительно ли вам нужно удаление, так как GOsa не " +"сможет отменить результаты этой операции." + +#: plugins/gofax/blocklists/remove.tpl:11 +#: plugins/addons/addressbook/remove.tpl:11 plugins/admin/groups/remove.tpl:11 +#: plugins/admin/users/remove.tpl:11 plugins/admin/applications/remove.tpl:10 +#: plugins/admin/ogroups/remove.tpl:11 +msgid "" +"So - if you're sure - press Delete to continue or Cancel to " +"abort." +msgstr "" +"Если вы уверены в своих действиях, нажмите на кнопку Удалить, иначе " +"нажмите Отмена." + +#: plugins/gofax/blocklists/headpage.tpl:6 +msgid "List of blocklists" +msgstr "Стоп-листы" + +#: plugins/gofax/blocklists/headpage.tpl:15 +#: plugins/admin/groups/headpage.tpl:15 plugins/admin/users/headpage.tpl:15 +#: plugins/admin/applications/headpage.tpl:15 +#: plugins/admin/departments/headpage.tpl:15 +#: plugins/admin/systems/headpage.tpl:15 plugins/admin/ogroups/headpage.tpl:15 +msgid "New" +msgstr "Создать" + +#: plugins/gofax/blocklists/headpage.tpl:28 +msgid "" +"This menu allows to create, delete and edit selected blocklists. Having a " +"large size of lists, you might prefer the range selectors on top of the " +"select box." +msgstr "" +"С помощью этого меню вы можете добавлять, изменять и удалять выбранные стоп-" +"листы. Если у вас достаточно большое количество списков, вы можете " +"использовать групповое выделение." + +#: plugins/gofax/blocklists/headpage.tpl:31 +msgid "" +"-Edit- and -New blocklist- will provide an assistant to aid you when " +"performing changes on your blocklist. -Delete- will ask you for confirmation " +"before really deleting anything." +msgstr "" +"При изменении и создании стоп-листов появится интерактивный помощник для " +"редактирования их свойств. Перед удалением списка вам нужно будет " +"подтвердить свое решение." + +#: plugins/gofax/blocklists/headpage.tpl:45 +msgid "Select to see send blocklists" +msgstr "Выберите, чтобы просмотреть стоп-листы (отправка)" + +#: plugins/gofax/blocklists/headpage.tpl:45 +msgid "Show send blocklists" +msgstr "Показать стоп-листы отправки" + +#: plugins/gofax/blocklists/headpage.tpl:46 +msgid "Select to see receive blocklists" +msgstr "Выберите, чтобы просмотреть стоп-листы (получение)" + +#: plugins/gofax/blocklists/headpage.tpl:46 +msgid "Show receive blocklists" +msgstr "Показать стоп-листы получения" + +#: plugins/gofax/blocklists/headpage.tpl:49 +msgid "Display lists of department" +msgstr "Стоп-листы в подразделении" + +#: plugins/gofax/blocklists/headpage.tpl:55 +msgid "Display lists matching" +msgstr "Шаблон для стоп-листов" + +#: plugins/gofax/blocklists/headpage.tpl:56 +msgid "Regular expression for matching list names" +msgstr "Регулярное выражение, соответствующее именам списков" + +#: plugins/gofax/blocklists/headpage.tpl:59 +msgid "Display lists containing" +msgstr "Шаблон для содержимого стоп-листов" + +#: plugins/gofax/blocklists/headpage.tpl:60 +msgid "Show lists containing entered numbers" +msgstr "Показать \"черные списки\", содержащие введенные номера" + +#: plugins/gofax/blocklists/main.inc:20 plugins/gofax/blocklists/main.inc:22 +msgid "Blocklist management" +msgstr "Управление \"черными списками\"" + +#: plugins/gofax/faxaccount/generic.tpl:12 +msgid "Fax number for GOfax to trigger on" +msgstr "Номер факса, для которого сработает GOfax" + +#: plugins/gofax/faxaccount/generic.tpl:16 +msgid "Language" +msgstr "Язык" + +#: plugins/gofax/faxaccount/generic.tpl:18 +msgid "Specify the GOfax communication language for fax to mail gateway" +msgstr "" +"Укаэите предпочтительный язык для получения сообщений о факсах по эл. почте" + +#: plugins/gofax/faxaccount/generic.tpl:24 +msgid "Delivery format" +msgstr "Формат доставки" + +#: plugins/gofax/faxaccount/generic.tpl:26 +msgid "Specify delivery format for fax to mail gateway" +msgstr "Укажите в каком формате должны перенаправляться факсы" + +#: plugins/gofax/faxaccount/generic.tpl:38 +msgid "Delivery methods" +msgstr "Способ доставки" + +#: plugins/gofax/faxaccount/generic.tpl:41 +msgid "Temporary disable fax usage" +msgstr "Временно отключить использование факса" + +#: plugins/gofax/faxaccount/generic.tpl:45 +#, fuzzy +msgid "Deliver fax as mail to" +msgstr "Отправлять факсы по эл. почте" + +#: plugins/gofax/faxaccount/generic.tpl:49 +msgid "Deliver fax as mail" +msgstr "Отправлять факсы по эл. почте" + +#: plugins/gofax/faxaccount/generic.tpl:54 +msgid "Deliver fax to printer" +msgstr "Отправлять факсы на принтер" + +#: plugins/gofax/faxaccount/generic.tpl:68 +msgid "Alternate fax numbers" +msgstr "Альтернативные номера факсов" + +#: plugins/gofax/faxaccount/generic.tpl:83 +msgid "Blocklists" +msgstr "\"Черные списки\"" + +#: plugins/gofax/faxaccount/generic.tpl:86 +msgid "Blocklists for incoming fax" +msgstr "\"Черные списки\" для входящих факсов" + +#: plugins/gofax/faxaccount/generic.tpl:92 +msgid "Blocklists for outgoing fax" +msgstr "\"Черные списки\" для исходящих факсов" + +#: plugins/gofax/faxaccount/locals.tpl:6 +msgid "Select numbers to add" +msgstr "Выбрать номера для добавления" + +#: plugins/gofax/faxaccount/locals.tpl:28 +msgid "Display numbers of department" +msgstr "Показать номера из подразделения" + +#: plugins/gofax/faxaccount/locals.tpl:34 +msgid "Display numbers matching" +msgstr "Показать совпадения номеров" + +#: plugins/gofax/faxaccount/locals.tpl:35 +msgid "Regular expression for matching numbers" +msgstr "Регулярное выражение, соответствующее номерам" + +#: plugins/gofax/faxaccount/locals.tpl:38 +msgid "Display numbers of user" +msgstr "Показать номера пользователя" + +#: plugins/gofax/faxaccount/locals.tpl:39 +msgid "User name of which numbers are shown" +msgstr "Имя пользователя, для которого перечисляются номера" + +#: plugins/gofax/faxaccount/lists.tpl:4 +msgid "Blocked numbers/lists" +msgstr "Блокируемые номера/списки" + +#: plugins/gofax/faxaccount/lists.tpl:18 +#: plugins/admin/groups/mail_admins.tpl:24 +msgid "Select a specific department" +msgstr "Выберите подразделение." + +#: plugins/gofax/faxaccount/lists.tpl:25 plugins/admin/groups/acl.tpl:12 +#: plugins/admin/groups/mail_admins.tpl:30 +msgid "Choose" +msgstr "Выбрать" + +#: plugins/gofax/faxaccount/lists.tpl:28 +msgid "List of predefined blocklists" +msgstr "Готовые \"черные списки\"" + +#: plugins/gofax/faxaccount/lists.tpl:37 +#: plugins/admin/groups/application_options.tpl:8 +#: plugins/admin/groups/mail_admins.tpl:37 include/functions.inc:1333 +msgid "Apply" +msgstr "Применить" + +#: plugins/gofax/faxaccount/main.inc:105 +msgid "FAX settings" +msgstr "Настройки факса" + +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:6 +#: plugins/addons/addressbook/address_edit.tpl:92 +#: plugins/addons/addressbook/address_info.tpl:88 +#: plugins/generic/references/class_reference.inc:30 +msgid "FAX" +msgstr "Факс" + +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:109 +msgid "This account has no fax extensions." +msgstr "Для этой учетной записи нет расширений факса." + +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:118 +msgid "Remove fax account" +msgstr "Удалить настройки факса" + +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:119 +msgid "" +"This account has fax features enabled. You can disable them by clicking " +"below." +msgstr "" +"В этой учетной записи есть настройки факса. Вы можете удалить их, щелкнув " +"ниже." + +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:121 +msgid "Create fax account" +msgstr "Создать настройки факса" + +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:122 +msgid "" +"This account has fax features disabled. You can enable them by clicking " +"below." +msgstr "" +"В этой учетной записи нет настроек факса. Вы можете добавить их, щелкнув " +"ниже." + +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:190 +msgid "You're trying to add an invalid phone number." +msgstr "Вы пытаетесь ввести некорректный номер телефона." + +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:451 +msgid "The required field 'Fax' is not set." +msgstr "Обязательное поле \"Факс\" не заполнено." + +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:455 +msgid "Please enter a valid telephone number in the 'Fax' field." +msgstr "Введите корректный номер телефона в поле \"Факс\"." + +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:463 +msgid "Mail delivery is checked, but no address has been specified." +msgstr "" + +#: plugins/gofax/faxaccount/class_gofaxAccount.inc:465 +#, fuzzy +msgid "The mail address you've entered is invalid." +msgstr "Введенный вами адрес уже используется." + +#: plugins/gofax/reports/detail.tpl:6 +msgid "FAX preview - please wait" +msgstr "Предварительный просмотр - пожалуйста, подождите" + +#: plugins/gofax/reports/detail.tpl:9 +msgid "Click on fax to download" +msgstr "Щелкните по факсу, чтобы загрузить его" + +#: plugins/gofax/reports/detail.tpl:18 +msgid "FAX ID" +msgstr "Идентификатор факса" + +#: plugins/gofax/reports/detail.tpl:22 plugins/gofax/reports/contents.tpl:30 +msgid "User" +msgstr "Пользователь" + +#: plugins/gofax/reports/detail.tpl:26 +msgid "Date / Time" +msgstr "Дата / время" + +#: plugins/gofax/reports/detail.tpl:30 +msgid "Sender MSN" +msgstr "MSN отправителя" + +#: plugins/gofax/reports/detail.tpl:34 +msgid "Sender ID" +msgstr "Идентификатор отправителя" + +#: plugins/gofax/reports/detail.tpl:38 +msgid "Receiver MSN" +msgstr "MSN получателя" + +#: plugins/gofax/reports/detail.tpl:42 +msgid "Receiver ID" +msgstr "Идентификатор получателя" + +#: plugins/gofax/reports/detail.tpl:50 +msgid "Status message" +msgstr "Сообщение о состоянии" + +#: plugins/gofax/reports/detail.tpl:54 +msgid "Transfer time" +msgstr "Время передачи" + +#: plugins/gofax/reports/detail.tpl:58 plugins/gofax/reports/contents.tpl:35 +msgid "# pages" +msgstr "Число страниц" + +#: plugins/gofax/reports/contents.tpl:2 plugins/addons/logview/contents.tpl:2 +#: plugins/gofon/reports/contents.tpl:2 +msgid "Filter" +msgstr "Фильтр" + +#: plugins/gofax/reports/contents.tpl:6 +#: plugins/addons/addressbook/contents.tpl:77 +#: plugins/addons/logview/contents.tpl:45 plugins/gofon/reports/contents.tpl:6 +msgid "Search for" +msgstr "Поиск" + +#: plugins/gofax/reports/contents.tpl:7 plugins/gofon/reports/contents.tpl:7 +msgid "Enter user name to search for" +msgstr "Введите искомое имя пользователя" + +#: plugins/gofax/reports/contents.tpl:8 plugins/gofax/reports/contents.tpl:16 +#: plugins/gofon/reports/contents.tpl:8 plugins/gofon/reports/contents.tpl:16 +msgid "in" +msgstr "в" + +#: plugins/gofax/reports/contents.tpl:9 plugins/gofon/reports/contents.tpl:9 +msgid "Select subtree to base search on" +msgstr "Выберите ветку для поиска" + +#: plugins/gofax/reports/contents.tpl:12 plugins/gofon/reports/contents.tpl:12 +msgid "during" +msgstr "в течение" + +#: plugins/gofax/reports/contents.tpl:21 +#: plugins/addons/logview/contents.tpl:65 +#: plugins/gofon/reports/contents.tpl:21 +msgid "Search" +msgstr "Поиск" + +#: plugins/gofax/reports/contents.tpl:31 +#: plugins/addons/logview/contents.tpl:83 +#: plugins/gofon/reports/contents.tpl:30 +msgid "Date" +msgstr "Дата" + +#: plugins/gofax/reports/contents.tpl:33 +msgid "Sender" +msgstr "Отправитель" + +#: plugins/gofax/reports/contents.tpl:34 +msgid "Receiver" +msgstr "Получатель" + +#: plugins/gofax/reports/contents.tpl:47 +#: plugins/addons/logview/contents.tpl:96 +#: plugins/gofon/reports/contents.tpl:48 +msgid "Search returned no results..." +msgstr "Не найдено..." + +#: plugins/gofax/reports/class_faxreport.inc:6 +msgid "FAX Reports" +msgstr "Отчеты о факсах" + +#: plugins/gofax/reports/class_faxreport.inc:97 +#: plugins/gofax/reports/class_faxreport.inc:204 +msgid "Can't connect to fax database, no reports can be shown!" +msgstr "" +"Не удается подключиться к базе данных факсов, отчеты показаны не будут!" + +#: plugins/gofax/reports/class_faxreport.inc:101 +#: plugins/gofax/reports/class_faxreport.inc:208 +msgid "Can't select fax database for report generation!" +msgstr "Не удается выбрать базу данных факсов для создания отчетов!" + +#: plugins/gofax/reports/class_faxreport.inc:109 +#: plugins/gofax/reports/class_faxreport.inc:216 +msgid "Query for fax database failed!" +msgstr "Невозможно выполнить запрос к базе данных факсов!" + +#: plugins/gofax/reports/class_faxreport.inc:117 +msgid "You have no permission to retrieve informations about this fax id!" +msgstr "У вас недостаточно прав для получения информации об этом факсе!" + +#: plugins/gofax/reports/class_faxreport.inc:137 +#: plugins/gofax/reports/class_faxreport.inc:224 +#: plugins/gofon/reports/class_fonreport.inc:158 +msgid "Y-M-D" +msgstr "Г-М-Д" + +#: plugins/gofax/reports/main.inc:5 +msgid "FAX reports" +msgstr "Отчеты о факсах" + +#: plugins/addons/addressbook/contents.tpl:15 +#: plugins/addons/addressbook/address_edit.tpl:33 +#: plugins/addons/addressbook/address_info.tpl:29 +msgid "Private" +msgstr "Личный" + +#: plugins/addons/addressbook/contents.tpl:15 +msgid "Contact" +msgstr "Контакт" + +#: plugins/addons/addressbook/contents.tpl:37 +msgid "" +"The telephone list plugin provides list and search facilities for the people " +"in your site. You may want to specify the asterisk [*] like in 'Go*us' to " +"find 'Gonicus'. Use the filters below to narrow down your search." +msgstr "" +"Этот модуль предоставляет возможности просмотра и поиска информации для " +"пользователей вашего сайта. В шаблоне вы можете использовать звездочку [*], " +"например, \"И*н\", чтобы найти имя \"Иван\". Уточнить результаты поиска " +"можно с помощью фильтров ниже." + +#: plugins/addons/addressbook/contents.tpl:42 +msgid "Actions" +msgstr "Действия" + +#: plugins/addons/addressbook/contents.tpl:47 +msgid "Add entry" +msgstr "Добавить объект" + +#: plugins/addons/addressbook/contents.tpl:50 +msgid "Edit entry" +msgstr "Редактиовать объект" + +#: plugins/addons/addressbook/contents.tpl:52 +msgid "Remove entry" +msgstr "Удалить объект" + +#: plugins/addons/addressbook/contents.tpl:67 +msgid "Select to see regular users" +msgstr "Выберите, чтобы просмотреть пользователей" + +#: plugins/addons/addressbook/contents.tpl:67 +msgid "Show organizational entries" +msgstr "Показать организационные объекты" + +#: plugins/addons/addressbook/contents.tpl:68 +msgid "Select to see users in addressbook" +msgstr "Выберите, чтобы просмотреть пользователей в адресной книге" + +#: plugins/addons/addressbook/contents.tpl:68 +msgid "Show addressbook entries" +msgstr "Показать объекты адресной книги" + +#: plugins/addons/addressbook/contents.tpl:71 +msgid "Display results for department" +msgstr "Показать результаты для подразделения" + +#: plugins/addons/addressbook/contents.tpl:78 +msgid "Search string" +msgstr "Строка поиска" + +#: plugins/addons/addressbook/contents.tpl:81 +msgid "Match object" +msgstr "Соответствующий объект" + +#: plugins/addons/addressbook/contents.tpl:83 +msgid "Choose the object that will be searched in" +msgstr "Выберите объект, в котором будет осуществлен поиск" + +#: plugins/addons/addressbook/dial.tpl:3 +msgid "Dial connection..." +msgstr "Соединение..." + +#: plugins/addons/addressbook/dial.tpl:11 +#: plugins/addons/addressbook/class_addressbook.inc:337 +#: plugins/addons/addressbook/class_addressbook.inc:339 +#: plugins/addons/addressbook/class_addressbook.inc:340 +#: plugins/addons/addressbook/class_addressbook.inc:414 +msgid "Dial" +msgstr "Звонок" + +#: plugins/addons/addressbook/address_edit.tpl:4 +msgid "Choose the department to store entry in" +msgstr "Выбрать раздел, для хранения объекта" + +#: plugins/addons/addressbook/address_edit.tpl:16 +#: plugins/addons/addressbook/address_info.tpl:12 +msgid "Personal" +msgstr "Контакт" + +#: plugins/addons/addressbook/address_edit.tpl:23 +#: plugins/addons/addressbook/address_info.tpl:19 +msgid "Initials" +msgstr "Отчество" + +#: plugins/addons/addressbook/address_edit.tpl:47 +#: plugins/addons/addressbook/address_info.tpl:43 +msgid "Email" +msgstr "Email" + +#: plugins/addons/addressbook/address_edit.tpl:57 +#: plugins/addons/addressbook/address_info.tpl:53 +msgid "Organizational" +msgstr "Организация" + +#: plugins/addons/addressbook/address_edit.tpl:65 +#: plugins/addons/addressbook/address_info.tpl:61 +msgid "Company" +msgstr "Компания" + +#: plugins/addons/addressbook/address_edit.tpl:71 +#: plugins/addons/addressbook/address_info.tpl:67 +msgid "City" +msgstr "Город" + +#: plugins/addons/addressbook/address_edit.tpl:77 +#: plugins/addons/addressbook/address_info.tpl:73 +msgid "Country" +msgstr "Страна" + +#: plugins/addons/addressbook/remove.tpl:7 +msgid "" +"This includes all addressbook data in this entry. Please double check if " +"your really want to do this since there is no way for GOsa to get your data " +"back." +msgstr "" +"Это включает все объекты адресной книги. Проверте действительно ли это так, " +"поскольку GOsa не сможет отменить результаты этой операции." + +#: plugins/addons/addressbook/main.inc:23 +msgid "Address book" +msgstr "Адресная книга" + +#: plugins/addons/addressbook/class_addressbook.inc:6 +msgid "Addressbook" +msgstr "Адресная книга" + +#: plugins/addons/addressbook/class_addressbook.inc:143 +#, php-format +msgid "Dial from %s to %s now?" +msgstr "Звоним с %s на %s?" + +#: plugins/addons/addressbook/class_addressbook.inc:147 +msgid "" +"You have no personal phone number set. Please change that in order to " +"perform direct dials." +msgstr "" +"У вас нет персонального набора телефонов. Настройте это прежде чем звонить." + +#: plugins/addons/addressbook/class_addressbook.inc:176 +#: plugins/addons/addressbook/class_addressbook.inc:280 +msgid "You are not allowed to delete this entry!" +msgstr "У вас недостаточно прав для удаления этого объекта!" + +#: plugins/addons/addressbook/class_addressbook.inc:274 +#, php-format +msgid "You're about to delete the entry %s." +msgstr "Вы собираетесь удалить объект %s." + +#: plugins/addons/addressbook/class_addressbook.inc:343 +#, php-format +msgid "Save contact for %s as vcard" +msgstr "Сохранить контактную информацию %s в формате vcard" + +#: plugins/addons/addressbook/class_addressbook.inc:346 +#, php-format +msgid "Send mail to %s" +msgstr "Отправить %s сообщение по эл. почте" + +#: plugins/addons/addressbook/class_addressbook.inc:426 +msgid "global addressbook" +msgstr "общая адресная книга" + +#: plugins/addons/addressbook/class_addressbook.inc:428 +msgid "organizations user database" +msgstr "база пользователя" + +#: plugins/addons/addressbook/class_addressbook.inc:432 +#, php-format +msgid "Contact stored in %s" +msgstr "Контакт сохранен в %s" + +#: plugins/addons/addressbook/class_addressbook.inc:434 +msgid "Creating new entry in" +msgstr "Создание нового объекта в" + +#: plugins/addons/addressbook/class_addressbook.inc:463 +#: plugins/addons/logview/class_logview.inc:62 +#: plugins/addons/logview/class_logview.inc:76 +msgid "All" +msgstr "Все" + +#: plugins/addons/addressbook/class_addressbook.inc:464 +msgid "Work phone" +msgstr "Рабочий телефон" + +#: plugins/addons/addressbook/class_addressbook.inc:464 +msgid "Cell phone" +msgstr "Сотовый телефон" + +#: plugins/addons/addressbook/class_addressbook.inc:465 +msgid "Home phone" +msgstr "Домашний телефон" + +#: plugins/addons/addressbook/class_addressbook.inc:465 +msgid "User ID" +msgstr "Идентификатор пользователя" + +#: plugins/addons/addressbook/class_addressbook.inc:537 +msgid "" +"Cannot create a unique DN for your entry. Please fill more formular fields." +msgstr "" +"Невозможно создать уникальный DN для объекта. Заполните все поля формы." + +#: plugins/addons/addressbook/class_addressbook.inc:549 +msgid "" +"You have no permissions to create or modify a global address book entry." +msgstr "" +"У вас недостаточно прав для создания или изменения объекта в общей адресной " +"книге." + +#: plugins/addons/logview/class_logview.inc:6 +msgid "System logs" +msgstr "Системные журналы" + +#: plugins/addons/logview/class_logview.inc:36 +msgid "No LOG servers defined!" +msgstr "Не указан сервер журналов." + +#: plugins/addons/logview/class_logview.inc:43 +#: plugins/addons/logview/class_logview.inc:131 +msgid "Can't connect to log database, no logs can be shown!" +msgstr "Не удается подключиться к базе журналов, отчеты показаны не будут!" + +#: plugins/addons/logview/class_logview.inc:47 +#: plugins/addons/logview/class_logview.inc:135 +msgid "Can't select log database for log generation!" +msgstr "Не удается выбрать базу журналов для создания отчетов!" + +#: plugins/addons/logview/class_logview.inc:56 +#: plugins/addons/logview/class_logview.inc:70 +#: plugins/addons/logview/class_logview.inc:208 +msgid "Query for log database failed!" +msgstr "Невозможно выполнить запрос к базе данных журналов!" + +#: plugins/addons/logview/class_logview.inc:80 +msgid "one hour" +msgstr "один час" + +#: plugins/addons/logview/class_logview.inc:80 +msgid "6 hours" +msgstr "6 часов" + +#: plugins/addons/logview/class_logview.inc:81 +msgid "12 hours" +msgstr "12 часов" + +#: plugins/addons/logview/class_logview.inc:81 +msgid "24 hours" +msgstr "24 часа" + +#: plugins/addons/logview/class_logview.inc:82 +msgid "2 days" +msgstr "2 дня" + +#: plugins/addons/logview/class_logview.inc:82 +msgid "one week" +msgstr "одна неделя" + +#: plugins/addons/logview/class_logview.inc:83 +msgid "2 weeks" +msgstr "2 недели" + +#: plugins/addons/logview/class_logview.inc:83 +msgid "one month" +msgstr "один месяц" + +#: plugins/addons/logview/contents.tpl:12 +msgid "Show hosts" +msgstr "Показать хосты" + +#: plugins/addons/logview/contents.tpl:20 +msgid "Log level" +msgstr "Уровень информативности" + +#: plugins/addons/logview/contents.tpl:37 +msgid "Time interval" +msgstr "Интервал времени" + +#: plugins/addons/logview/contents.tpl:46 +msgid "Enter string to search for" +msgstr "Введите строку для поиска" + +#: plugins/addons/logview/contents.tpl:58 +msgid "Ruleset" +msgstr "Набор правил" + +#: plugins/addons/logview/contents.tpl:81 +msgid "Level" +msgstr "Уровень" + +#: plugins/addons/logview/contents.tpl:82 +msgid "Hostname" +msgstr "Имя системы" + +#: plugins/addons/logview/contents.tpl:84 +msgid "Message" +msgstr "Сообщение" + +#: plugins/addons/logview/main.inc:23 +msgid "System log view" +msgstr "Просмотр системного журнала" + +#: plugins/addons/ldapmanager/class_csvimport.inc:6 +#: plugins/addons/ldapmanager/class_import.inc:6 +msgid "LDIF export" +msgstr "Экспорт в LDIF" + +#: plugins/addons/ldapmanager/class_csvimport.inc:137 +msgid "Need 'sn','givenName' and 'uid' to create user" +msgstr "" + +#: plugins/addons/ldapmanager/class_csvimport.inc:170 +#, fuzzy +msgid "failed" +msgstr "Ошибка" + +#: plugins/addons/ldapmanager/class_csvimport.inc:174 +msgid "ok" +msgstr "" + +#: plugins/addons/ldapmanager/class_csvimport.inc:230 +#, fuzzy +msgid "status" +msgstr "Состояние" + +#: plugins/addons/ldapmanager/class_csvimport.inc:234 +#, php-format +msgid "An Error Occured while inserting entry %s - process aborted" +msgstr "" + +#: plugins/addons/ldapmanager/class_csvimport.inc:259 +msgid "Nothing to import !." +msgstr "" + +#: plugins/addons/ldapmanager/class_csvimport.inc:268 +#: plugins/addons/ldapmanager/class_csvimport.inc:279 +#: plugins/addons/ldapmanager/class_csvimport.inc:284 +#: plugins/addons/ldapmanager/class_import.inc:49 +#: plugins/addons/ldapmanager/class_import.inc:57 +#, fuzzy +msgid "There is no file uploaded." +msgstr "Файл небыл загружен" + +#: plugins/addons/ldapmanager/class_csvimport.inc:273 +#: plugins/addons/ldapmanager/class_import.inc:42 +#, fuzzy +msgid "The specified file is empty." +msgstr "Значение поля \"Файлы\" некорректно." + +#: plugins/addons/ldapmanager/class_csvimport.inc:401 +msgid "The selected file does not contain any CSV Data..." +msgstr "" + +#: plugins/addons/ldapmanager/contentimport.tpl:3 +#, fuzzy +msgid "" +"The LDIF import plugin provides methods to upload a set of entries to your " +"running LDAP directory as ldif. You may use this to add new or modify " +"existing entries. Remember that GOsa will not check your ldifs for GOsa " +"conformance." +msgstr "" +"Модуль экспорта в LDIF позволяет получать полный образ текущего каталога " +"LDAPв формате ldif. Эти образы можно сохранять как резервные копии или " +"использовать при инициализации нового сервера." + +#: plugins/addons/ldapmanager/contentimport.tpl:13 +msgid "Import LDIF File" +msgstr "" + +#: plugins/addons/ldapmanager/contentimport.tpl:18 +#: plugins/addons/ldapmanager/contentcsv.tpl:15 +msgid "Browse" +msgstr "Просмотр" + +#: plugins/addons/ldapmanager/contentimport.tpl:31 +msgid "Modify existing attributes" +msgstr "" + +#: plugins/addons/ldapmanager/contentimport.tpl:44 +#, fuzzy +msgid "Overwrite existing entry" +msgstr "Экспорт объекта" + +#: plugins/addons/ldapmanager/contentimport.tpl:54 +msgid "Import successfull" +msgstr "Импорт успешен." + +#: plugins/addons/ldapmanager/contentcsv.tpl:2 +msgid "" +"The CSV import plugin provides methods to generate user accounts from a file " +"containing Comma Seperated Values. The administrator can decide which " +"columns should be transfered to which attribute. Note that you must have at " +"least the UID, GIVENNAME and SURENAME set." +msgstr "" + +#: plugins/addons/ldapmanager/contentcsv.tpl:11 +msgid "Select CSV file to import" +msgstr "" + +#: plugins/addons/ldapmanager/contentcsv.tpl:23 +#, fuzzy +msgid "Select template" +msgstr "Создать шаблон" + +#: plugins/addons/ldapmanager/contentcsv.tpl:38 +msgid "All entries have been written to the LDAP database successfully." +msgstr "" + +#: plugins/addons/ldapmanager/contentcsv.tpl:40 +msgid "Oups. There was an error during the import of your data." +msgstr "" + +#: plugins/addons/ldapmanager/contentcsv.tpl:43 +msgid "Here is the status report for the import:" +msgstr "" + +#: plugins/addons/ldapmanager/contentcsv.tpl:91 +#, fuzzy +msgid "Selected Template" +msgstr "Выберите режим терминала" + +#: plugins/addons/ldapmanager/class_import.inc:95 +msgid "Unknown Error" +msgstr "" + +#: plugins/addons/ldapmanager/contentexport.tpl:3 +#, fuzzy +msgid "" +"The LDIF export plugin provides methods to download a complete snapshot of " +"the running LDAP directory as ldif. You may save these files for backup " +"purpose or when initializing a new server." +msgstr "" +"Модуль экспорта в LDIF позволяет получать полный образ текущего каталога " +"LDAPв формате ldif. Эти образы можно сохранять как резервные копии или " +"использовать при инициализации нового сервера." + +#: plugins/addons/ldapmanager/contentexport.tpl:13 +msgid "Export single entry" +msgstr "Экспорт объекта" + +#: plugins/addons/ldapmanager/contentexport.tpl:24 +msgid "Export complete LDIF for" +msgstr "" + +#: plugins/addons/ldapmanager/contentexport.tpl:27 +#: plugins/addons/ldapmanager/contentexport.tpl:42 +msgid "Choose the department you want to Export" +msgstr "Выбрать подразделение для экспорта" + +#: plugins/addons/ldapmanager/contentexport.tpl:39 +msgid "Export IVBB LDIF for" +msgstr "" + +#: plugins/addons/ldapmanager/contentexport.tpl:59 +msgid "Export successfull" +msgstr "Экспорт успешен." + +#: plugins/addons/ldapmanager/contentexport.tpl:63 +msgid "Click here to save the complete LDAP database to a file" +msgstr "Щелкните здесь, чтобы сохранить образ базы данных LDAP в файл" + +#: plugins/addons/ldapmanager/contentexport.tpl:63 +msgid "Click here to save the LDAP Export " +msgstr "Щелкните здесь, чтобы сохранить результаты экспорта" + +#: plugins/addons/ldapmanager/class_ldif.inc:7 +#: plugins/addons/ldapmanager/main.inc:23 +#, fuzzy +msgid "LDAP manager" +msgstr "Экспорт в LDIF" + +#: plugins/addons/ldapmanager/class_export.inc:7 +#, fuzzy +msgid "LDIF CSV import" +msgstr "Экспорт в LDIF" + +#: plugins/addons/ldapmanager/class_export.inc:72 +msgid "Error while exporting the requested entries!" +msgstr "" + +#: plugins/admin/groups/class_groupGeneric.inc:109 +msgid "Can't find this groups SID in LDAP or in your configuration file!" +msgstr "Не могу найти SID в базе LDAP или в сонфигурационном файле!" + +#: plugins/admin/groups/class_groupGeneric.inc:141 +msgid "This 'dn' is no group." +msgstr "Это DN соответствует не группе." + +#: plugins/admin/groups/class_groupGeneric.inc:252 +msgid "Samba group" +msgstr "Группа Samba" + +#: plugins/admin/groups/class_groupGeneric.inc:252 +msgid "Domain admins" +msgstr "Администраторы домена" + +#: plugins/admin/groups/class_groupGeneric.inc:252 +msgid "Domain users" +msgstr "Пользователи домена" + +#: plugins/admin/groups/class_groupGeneric.inc:253 +msgid "Domain guests" +msgstr "Непривилегированные пользователи домена" + +#: plugins/admin/groups/class_groupGeneric.inc:258 +#, php-format +msgid "Special group (%d)" +msgstr "Специальная группа (%d)" + +#: plugins/admin/groups/class_groupGeneric.inc:570 +#: plugins/admin/ogroups/class_ogroup.inc:484 +msgid "You have no permissions to create a group on this 'Base'." +msgstr "У вас недостаточно прав для создания группы в этой ветке." + +#: plugins/admin/groups/class_groupGeneric.inc:580 +msgid "" +"The field 'Name' contains invalid characters. Lowercase, numbers and dashes " +"are allowed." +msgstr "" +"Значение поля \"Имя\" содержит недопустимые символы. Допустимыми являются " +"буквы в нижнем регистре, цифры и дефисы." + +#: plugins/admin/groups/class_groupGeneric.inc:588 +msgid "Value specified as 'Name' is already used." +msgstr "Группа с таким именем уже существует." + +#: plugins/admin/groups/mail.tpl:11 +msgid "Primary mail address for this shared folder" +msgstr "Основной адрес эл. почты для этой общей папки" + +#: plugins/admin/groups/mail.tpl:16 +msgid "Select mail server to place user on" +msgstr "Выберите почтовый сервер для пользователя" + +#: plugins/admin/groups/mail.tpl:64 +msgid "IMAP shared folders" +msgstr "Общие папки IMAP" + +#: plugins/admin/groups/mail.tpl:68 +msgid "Default permission" +msgstr "Права по умолчанию" + +#: plugins/admin/groups/mail.tpl:76 +msgid "Member permission" +msgstr "Права для членов группы" + +#: plugins/admin/groups/mail.tpl:91 +msgid "Forward messages to non group members" +msgstr "Пересылать сообщения не членам группы" + +#: plugins/admin/groups/headpage.tpl:6 plugins/admin/ogroups/headpage.tpl:6 +msgid "List of groups" +msgstr "Список групп" + +#: plugins/admin/groups/headpage.tpl:29 plugins/admin/ogroups/headpage.tpl:29 +msgid "" +"This menu allows to add, edit or remove selected groups. You may want to use " +"the range selector on top of the group listbox, when working with a large " +"number of groups." +msgstr "" +"С помощью этого меню вы можете добавлять, изменять и удалять выбранные " +"группы пользователей. Если у вас их достаточно большое количество, вы можете " +"использовать групповое выделение." + +#: plugins/admin/groups/headpage.tpl:32 plugins/admin/ogroups/headpage.tpl:32 +msgid "" +"-Edit- and -New group- will execute an assistant to aid you in editing group " +"properties.-Delete- will ask for confirmation before removing groups." +msgstr "" +"При изменении и создании групп появится интерактивный помощник для " +"редактирования их свойств. Перед удалением групп вам нужно будет подтвердить " +"свое решение." + +#: plugins/admin/groups/headpage.tpl:53 plugins/admin/users/headpage.tpl:57 +msgid "Dive into LDAP subtrees when searching" +msgstr "Искать в поддеревьях LDAP" + +#: plugins/admin/groups/headpage.tpl:53 plugins/admin/users/headpage.tpl:57 +msgid "Search in subtrees" +msgstr "Искать в поддеревьях" + +#: plugins/admin/groups/main.inc:39 plugins/admin/groups/main.inc:43 +msgid "Group administration" +msgstr "Управление группами" + +#: plugins/admin/groups/class_groupManagement.inc:25 +#: plugins/admin/ogroups/class_ogroupManagement.inc:42 +msgid "Groups" +msgstr "Группы" + +#: plugins/admin/groups/class_groupManagement.inc:202 +#, php-format +msgid "You're about to delete the group '%s'." +msgstr "Вы собираетесь удалить группу \"%s\"." + +#: plugins/admin/groups/class_groupManagement.inc:208 +#: plugins/admin/groups/class_groupManagement.inc:234 +msgid "You are not allowed to delete this group!" +msgstr "У вас недостаточно прав для удаления этой группы!" + +#: plugins/admin/groups/remove.tpl:7 +msgid "" +"This may be a primary user group. Please double check if you really want to " +"do this since there is no way for GOsa to get your data back." +msgstr "" +"Возможно, это основная группа пользователей. Еще раз проверте что Вы " +"действительно хотите удалить ее, так как GOsa не сможет отменить результаты " +"этой операции." + +#: plugins/admin/groups/application_options.tpl:1 +msgid "Application options" +msgstr "Параметры приложения" + +#: plugins/admin/groups/class_groupMail.inc:153 +msgid "read" +msgstr "чтение" + +#: plugins/admin/groups/class_groupMail.inc:154 +msgid "post" +msgstr "отправка" + +#: plugins/admin/groups/class_groupMail.inc:155 +msgid "external post" +msgstr "отправка (внешн.)" + +#: plugins/admin/groups/class_groupMail.inc:156 +msgid "append" +msgstr "добавление" + +#: plugins/admin/groups/class_groupMail.inc:157 +msgid "write" +msgstr "запись" + +#: plugins/admin/groups/class_groupMail.inc:179 +msgid "This 'dn' has no valid mail extensions." +msgstr "Для этого DN нет корректных почтовых расширений." + +#: plugins/admin/groups/class_groupMail.inc:244 +msgid "You're trying to add an invalid email address " +msgstr "Вы пытаетесь добавить некорректный адрес электронной почты " + +#: plugins/admin/groups/class_groupMail.inc:245 +msgid "to the list of forwarders." +msgstr "к списку тех, кому должны пересылаться сообщения." + +#: plugins/admin/groups/class_groupMail.inc:613 +msgid "Please enter a valid email addres in 'Primary address' field." +msgstr "Введите корректное значение в поле \"Основной адрес\"." + +#: plugins/admin/groups/acl.tpl:4 +msgid "Object" +msgstr "Объект" + +#: plugins/admin/groups/acl.tpl:17 +msgid "Apply this acl only for users own entries" +msgstr "Применить эти права доступа только к собственным записям пользователей" + +#: plugins/admin/groups/application.tpl:4 +msgid "Used applications" +msgstr "Используемые приложения" + +#: plugins/admin/groups/application.tpl:10 +msgid "Edit parameters" +msgstr "Изменить параметры" + +#: plugins/admin/groups/application.tpl:10 +msgid "Edit optional application parameters" +msgstr "Изменить дополнительные параметры приложения" + +#: plugins/admin/groups/application.tpl:20 +msgid "Available applications" +msgstr "Доступные приложения" + +#: plugins/admin/groups/group_objects.tpl:6 +msgid "Select users to add" +msgstr "Выбрать пользователей для добавления" + +#: plugins/admin/groups/group_objects.tpl:29 +#: plugins/admin/users/headpage.tpl:60 +msgid "Display users of department" +msgstr "Подразделение" + +#: plugins/admin/groups/group_objects.tpl:35 +#: plugins/admin/users/headpage.tpl:66 +msgid "Display users matching" +msgstr "Фильтр" + +#: plugins/admin/groups/group_objects.tpl:36 +#: plugins/admin/users/headpage.tpl:67 +msgid "Regular expression for matching user names" +msgstr "Регулярное выражение, соответствующее именам пользователей" + +#: plugins/admin/groups/class_groupAcl.inc:54 +msgid "This 'dn' is no acl container." +msgstr "Это DN не содержит ACL." + +#: plugins/admin/groups/class_groupAcl.inc:199 +msgid "All fields are writeable" +msgstr "Все поля доступны для записи" + +#: plugins/admin/groups/generic.tpl:7 plugins/admin/ogroups/generic.tpl:7 +msgid "Group name" +msgstr "Группа" + +#: plugins/admin/groups/generic.tpl:9 +msgid "Posix name of the group" +msgstr "Имя группы, соответствующее стандарту POSIX" + +#: plugins/admin/groups/generic.tpl:14 plugins/admin/ogroups/generic.tpl:14 +msgid "Descriptive text for this group" +msgstr "Описание группы" + +#: plugins/admin/groups/generic.tpl:23 plugins/admin/ogroups/generic.tpl:23 +msgid "Choose subtree to place group in" +msgstr "Выберите ветку для группы" + +#: plugins/admin/groups/generic.tpl:36 +msgid "Normally IDs are autogenerated, select to specify manually" +msgstr "" +"Обычно идентификаторы создаются автоматически, но вы можете выбрать указание " +"вручную" + +#: plugins/admin/groups/generic.tpl:36 +msgid "Force GID" +msgstr "Указать GID вручную" + +#: plugins/admin/groups/generic.tpl:38 +msgid "Forced ID number" +msgstr "Указанный вручную GID" + +#: plugins/admin/groups/generic.tpl:45 +msgid "Select to create a samba conform group" +msgstr "Создать группу для работы с Samba" + +#: plugins/admin/groups/generic.tpl:50 +msgid "in domain" +msgstr "в домене" + +#: plugins/admin/groups/generic.tpl:66 +msgid "Members are in a phone pickup group" +msgstr "Члены телефонной группы" + +#: plugins/admin/groups/generic.tpl:81 +msgid "Group members" +msgstr "Члены группы" + +#: plugins/admin/groups/mail_admins.tpl:4 +msgid "Folder administrators" +msgstr "Администраторы папки" + +#: plugins/admin/groups/class_groupApplication.inc:61 +msgid "This 'dn' is no appgroup." +msgstr "Это DN соответствует не группе приложений." + +#: plugins/admin/groups/class_groupApplication.inc:69 +msgid "Remove applications" +msgstr "Удалить приложения" + +#: plugins/admin/groups/class_groupApplication.inc:70 +msgid "" +"This group has application features enabled. You can disable them by " +"clicking below." +msgstr "" +"Этой группе доступны приложения. Вы можете запретить доступ к ним, щелкнув " +"ниже." + +#: plugins/admin/groups/class_groupApplication.inc:72 +msgid "Create applications" +msgstr "Создать приложения" + +#: plugins/admin/groups/class_groupApplication.inc:73 +msgid "" +"This group has application features disabled. You can enable them by " +"clicking below." +msgstr "" +"Этой группе недоступны приложения. Вы можете разрешить доступ к ним, щелкнув " +"ниже." + +#: plugins/admin/groups/class_groupApplication.inc:107 +msgid "The selected application name is not uniq. Please check your LDAP." +msgstr "" +"Выбранное имя приложения не уникально. Проверьте свою базу данных LDAP." + +#: plugins/admin/groups/class_groupApplication.inc:143 +msgid "The selected application has no options." +msgstr "У выбранного приложения нет параметров." + +#: plugins/admin/users/password.tpl:2 +msgid "" +"To change the user password use the fields below. The changes take effect " +"immediately. Please memorize the new password, because the user would't be " +"able to login without it." +msgstr "" +"В полях ниже вы можете изменить пароль выбранного пользователя. Изменения " +"вступят в силу немедленно. Пожалуйста, запомните новый пароль, так как иначе " +"пользователь не сможет войти в систему." + +#: plugins/admin/users/template.tpl:2 +msgid "Creating a new user using templates" +msgstr "Создание пользователя на основе шаблона" + +#: plugins/admin/users/template.tpl:6 +msgid "" +"Creating a new user can be assisted by using templates. Many database " +"records will be filled automatically. Choose none to skip the usage " +"of templates." +msgstr "" +"Можно создавать пользователей на основе шаблонов. При этом многие поля в " +"базе данных будут заполнены автоматически. Выберите нет, чтобы не " +"использовать шаблоны." + +#: plugins/admin/users/template.tpl:11 +#: plugins/admin/users/class_userManagement.inc:614 +msgid "Template" +msgstr "Шаблон" + +#: plugins/admin/users/template.tpl:46 +#: ihtml/themes/altlinux/setup_introduction.tpl:10 +#: ihtml/themes/altlinux/setup_step2.tpl:16 +#: ihtml/themes/altlinux/setup_step3.tpl:12 +#: ihtml/themes/default/setup_introduction.tpl:10 +#: ihtml/themes/default/setup_step2.tpl:16 +#: ihtml/themes/default/setup_step3.tpl:12 +msgid "Continue" +msgstr "Продолжить" + +#: plugins/admin/users/main.inc:40 plugins/admin/users/main.inc:46 +msgid "User administration" +msgstr "Управление пользователями" + +#: plugins/admin/users/class_userManagement.inc:25 +msgid "Users" +msgstr "Пользователи" + +#: plugins/admin/users/class_userManagement.inc:157 +#: plugins/admin/users/class_userManagement.inc:208 +msgid "You are not allowed to set this users password!" +msgstr "У вас недостаточно прав для смены пароля этого пользователя!" + +#: plugins/admin/users/class_userManagement.inc:244 +#, php-format +msgid "You're about to delete the user %s." +msgstr "Вы собираетесь удалить пользователя %s." + +#: plugins/admin/users/class_userManagement.inc:250 +#: plugins/admin/users/class_userManagement.inc:278 +msgid "You are not allowed to delete this user!" +msgstr "У вас недостаточно прав для удаления этого пользователя!" + +#: plugins/admin/users/class_userManagement.inc:365 +#: plugins/admin/ogroups/class_ogroup.inc:202 +msgid "none" +msgstr "нет" + +#: plugins/admin/users/class_userManagement.inc:431 +msgid "A person with the choosen name is already used in this tree." +msgstr "Пользователь с таким именем уже есть в этой ветке." + +#: plugins/admin/users/remove.tpl:7 +msgid "" +"This includes all account data, system access rules, imap settings, etc. for " +"this user. Please double check if your really want to do this since there is " +"no way for GOsa to get your data back." +msgstr "" +"Сюда входит вся информация об учетной записи этого пользователя, его права " +"доступа в системе, настройки IMAP и т. д. Подумайте еще раз, действительно " +"ли вам нужно удаление, так как GOsa не сможет отменить результаты этой " +"операции." + +#: plugins/admin/users/headpage.tpl:6 +msgid "List of users" +msgstr "Список пользователей" + +#: plugins/admin/users/headpage.tpl:16 +msgid "New template" +msgstr "Создать шаблон" + +#: plugins/admin/users/headpage.tpl:30 +msgid "" +"This menu provides the functionality to create, edit or delete selected " +"users. Having a great number of users, you may want to use the range " +"seletors on top of the user list." +msgstr "" +"С помощью этого меню вы можете добавлять, изменять и удалять выбранных " +"пользователей. Если у вас достаточно большое количество пользователей, вы " +"можете использовать групповое выделение." + +#: plugins/admin/users/headpage.tpl:33 +msgid "" +"-Edit- and -New user- execute an assistant to aid you in managing your " +"account informations. -Delete- will ask for confirmation before deleting the " +"users from the LDAP server." +msgstr "" +"При изменении и создании пользователей появится интерактивный помощник для " +"редактирования их учетных записей. Перед удалением пользователей с сервера " +"LDAP вам нужно будет подтвердить свое решение." + +#: plugins/admin/users/headpage.tpl:47 +msgid "Select to see template pseudo users" +msgstr "Выберите, чтобы просмотреть шаблоны псевдопользователей" + +#: plugins/admin/users/headpage.tpl:47 +msgid "Show templates" +msgstr "Показать шаблоны" + +#: plugins/admin/users/headpage.tpl:48 +msgid "Select to see users that have only a GOsa object" +msgstr "" +"Выберите, чтобы просмотреть пользователей, у которых есть только объект GOsa" + +#: plugins/admin/users/headpage.tpl:48 +msgid "Show functional users" +msgstr "Показать обычных пользователей" + +#: plugins/admin/users/headpage.tpl:49 +msgid "Select to see users that have posix settings" +msgstr "" +"Выберите, чтобы просмотреть пользователей с атрибутами в стандарте POSIX" + +#: plugins/admin/users/headpage.tpl:49 +msgid "Show unix users" +msgstr "Показать UNIX-пользователей" + +#: plugins/admin/users/headpage.tpl:50 +msgid "Select to see users that have mail settings" +msgstr "Выберите, чтобы просмотреть пользователей с настройками почты" + +#: plugins/admin/users/headpage.tpl:50 +msgid "Show mail users" +msgstr "Показать пользователей с почтой" + +#: plugins/admin/users/headpage.tpl:51 +msgid "Select to see users that have samba settings" +msgstr "Выберите, чтобы просмотреть пользователей с настройками Samba" + +#: plugins/admin/users/headpage.tpl:51 +msgid "Show samba users" +msgstr "Показать пользователей Samba" + +#: plugins/admin/users/headpage.tpl:52 +msgid "Select to see users that have proxy settings" +msgstr "Выберите, чтобы просмотреть пользователей с настройками прокси-сервера" + +#: plugins/admin/users/headpage.tpl:52 +msgid "Show proxy users" +msgstr "Показать пользователей с прокси-серверами" + +#: plugins/admin/users/headpage.tpl:53 +msgid "Select to see users that have ftp settings" +msgstr "Выберите, чтобы просмотреть пользователей с настройками FTP" + +#: plugins/admin/users/headpage.tpl:53 +msgid "Show FTP users" +msgstr "Показать пользователей FTP" + +#: plugins/admin/users/headpage.tpl:54 +msgid "Select to see users that have FAX settings" +msgstr "Выберите, чтобы просмотреть пользователей с настройками факсов" + +#: plugins/admin/users/headpage.tpl:54 +msgid "Show FAX users" +msgstr "Показать пользователей факсов" + +#: plugins/admin/applications/generic.tpl:7 +#: plugins/admin/applications/generic.tpl:8 +msgid "Application name" +msgstr "Приложение" + +#: plugins/admin/applications/generic.tpl:12 +#: plugins/admin/systems/server.tpl:48 plugins/admin/systems/terminal.tpl:109 +#: plugins/admin/systems/workstation.tpl:109 +#: plugins/admin/ogroups/termgroup.tpl:13 +msgid "Execute" +msgstr "Выполнить" + +#: plugins/admin/applications/generic.tpl:14 +msgid "Path and/or binary name of application" +msgstr "Путь и/или имя исполняемого файла приложения" + +#: plugins/admin/applications/generic.tpl:18 +msgid "Display name" +msgstr "Отображаемое имя" + +#: plugins/admin/applications/generic.tpl:20 +msgid "Application name to be displayed (i.e. below icons)" +msgstr "" +"Имя приложения, которое будет показано пользователям (например, под " +"пиктограммами)" + +#: plugins/admin/applications/generic.tpl:35 +msgid "Choose subtree to place application in" +msgstr "Выберите ветку, куда нужно поместить приложение" + +#: plugins/admin/applications/generic.tpl:46 +msgid "Icon" +msgstr "Пиктограмма" + +#: plugins/admin/applications/generic.tpl:51 +msgid "Update" +msgstr "Обновить" + +#: plugins/admin/applications/generic.tpl:51 +msgid "Reload picture from LDAP" +msgstr "Обновить изображение с LDAP" + +#: plugins/admin/applications/generic.tpl:61 +msgid "Only executable for members" +msgstr "Разрешено для выполнения только членам группы" + +#: plugins/admin/applications/generic.tpl:63 +msgid "Replace user configuration on startup" +msgstr "Заменять настройки пользователя при запуске" + +#: plugins/admin/applications/generic.tpl:67 +msgid "Place icon on members desktop" +msgstr "Помещать пиктограмму на рабочие столы членов группы" + +#: plugins/admin/applications/generic.tpl:70 +msgid "Place entry in members startmenu" +msgstr "Помещать членам группы соответствующий элемент в меню запуска" + +#: plugins/admin/applications/class_applicationParameters.inc:47 +msgid "Remove options" +msgstr "Удалить параметры" + +#: plugins/admin/applications/class_applicationParameters.inc:48 +msgid "This application has options. You can disable them by clicking below." +msgstr "" +"Для этого приложения указаны параметры. Вы можете отключить их " +"использование, щелкнув ниже." + +#: plugins/admin/applications/class_applicationParameters.inc:50 +msgid "Create options" +msgstr "Создать параметры" + +#: plugins/admin/applications/class_applicationParameters.inc:51 +msgid "" +"This application has options disabled. You can enable them by clicking below." +msgstr "" +"Для этого приложения отключено использование параметров. Вы можете включить " +"его, щелкнув ниже." + +#: plugins/admin/applications/class_applicationParameters.inc:87 +msgid "Variable" +msgstr "Переменная" + +#: plugins/admin/applications/class_applicationParameters.inc:87 +msgid "Default value" +msgstr "По умолчанию" + +#: plugins/admin/applications/class_applicationParameters.inc:98 +msgid "Add option" +msgstr "Добавить параметр" + +#: plugins/admin/applications/class_applicationParameters.inc:149 +#, php-format +msgid "Value '%s' specified as option name is not valid." +msgstr "Значение \"%s\", указанное как имя параметра, некорректно." + +#: plugins/admin/applications/remove.tpl:7 +msgid "" +"This may be used by several groups. Please double check if your really want " +"to do this since there is no way for GOsa to get your data back." +msgstr "" +"Это приложение может использоваться несколькими группами. Подумайте еще раз, " +"действительно ли вы хотите удалить его, так как GOsa не сможет отменить " +"результаты этой операции." + +#: plugins/admin/applications/headpage.tpl:6 +msgid "List of applications" +msgstr "Список приложений" + +#: plugins/admin/applications/headpage.tpl:28 +msgid "" +"This menu allows to add, edit or remove selected applications. You may want " +"to use the range selector on top of the application listbox, when working " +"with a large number of applications." +msgstr "" +"С помощью этого меню вы можете добавлять, изменять и удалять выбранные " +"приложения. Если у вас достаточно большое количество приложений, вы можете " +"использовать групповое выделение." + +#: plugins/admin/applications/headpage.tpl:31 +msgid "" +"-Edit- and -New application- will execute an assistant to aid you in editing " +"properties. -Delete- will ask for confirmation before removing applications." +msgstr "" +"При изменении и создании приложений появится интерактивный помощник для " +"редактирования свойств. Перед удалением приложений вам нужно будет " +"подтвердить свое решение." + +#: plugins/admin/applications/headpage.tpl:45 +msgid "Display applications of department" +msgstr "Приложения в подразделении" + +#: plugins/admin/applications/headpage.tpl:51 +msgid "Display applications matching" +msgstr "Шаблон для приложений" + +#: plugins/admin/applications/headpage.tpl:52 +msgid "Regular expression for matching application names" +msgstr "Регулярное выражение, соответствующее именам приложений" + +#: plugins/admin/applications/main.inc:38 +#: plugins/admin/applications/main.inc:40 +msgid "Application management" +msgstr "Управление приложениями" + +#: plugins/admin/applications/class_applicationManagement.inc:185 +#, php-format +msgid "You're about to delete the application '%s'." +msgstr "Вы собираетесь удалить приложение \"%s\"." + +#: plugins/admin/applications/class_applicationManagement.inc:191 +#: plugins/admin/applications/class_applicationManagement.inc:217 +msgid "You are not allowed to delete this application!" +msgstr "У вас недостаточно прав для удаления этого приложения!" + +#: plugins/admin/applications/class_applicationGeneric.inc:57 +msgid "This 'dn' is no application." +msgstr "Это DN соответствует не приложению." + +#: plugins/admin/applications/class_applicationGeneric.inc:148 +msgid "The specified picture has not been uploaded correctly." +msgstr "Указанное изображение было загружено некорректно." + +#: plugins/admin/applications/class_applicationGeneric.inc:180 +msgid "You have no permissions to create a application on this 'Base'." +msgstr "У вас недостаточно прав для создания приложения в этой ветке." + +#: plugins/admin/applications/class_applicationGeneric.inc:185 +msgid "Required field 'Name' is not filled." +msgstr "Обязательное поле \"Имя\" не заполнено." + +#: plugins/admin/applications/class_applicationGeneric.inc:188 +msgid "Required field 'Execute' is not filled." +msgstr "Обязательное поле \"Выполнить\" не заполнено." + +#: plugins/admin/applications/class_applicationGeneric.inc:197 +msgid "There's already an application with this 'Name'." +msgstr "Приложение с таким именем уже существует." + +#: plugins/admin/departments/generic.tpl:4 +#: plugins/admin/systems/terminal.tpl:1 +#: plugins/admin/systems/workstation.tpl:1 +msgid "Properties" +msgstr "Свойства" + +#: plugins/admin/departments/generic.tpl:8 +msgid "Name of department" +msgstr "Подразделение" + +#: plugins/admin/departments/generic.tpl:9 +msgid "Name of subtree to create" +msgstr "Имя создаваемой ветки" + +#: plugins/admin/departments/generic.tpl:14 +msgid "Descriptive text for department" +msgstr "Описание подразделения" + +#: plugins/admin/departments/generic.tpl:18 +msgid "Category" +msgstr "Категория" + +#: plugins/admin/departments/generic.tpl:20 +msgid "Category for this subtree" +msgstr "Категория этой ветки" + +#: plugins/admin/departments/generic.tpl:30 +msgid "Choose subtree to place department in" +msgstr "Выберите ветку для подразделения" + +#: plugins/admin/departments/generic.tpl:47 +msgid "State where this subtree is located" +msgstr "Адм. единица, в которой находится ветка" + +#: plugins/admin/departments/generic.tpl:51 +msgid "Location of this subtree" +msgstr "Местоположение ветки" + +#: plugins/admin/departments/generic.tpl:55 +msgid "Postal address of this subtree" +msgstr "Почтовый адрес для ветки" + +#: plugins/admin/departments/generic.tpl:59 +msgid "Base telephone number of this subtree" +msgstr "Основный телефонный номер для ветки" + +#: plugins/admin/departments/generic.tpl:63 +msgid "Base facsimile telephone number of this subtree" +msgstr "Основный номер факса для ветки" + +#: plugins/admin/departments/remove.tpl:7 +msgid "" +"This includes all accounts, systems, etc. in this subtree. Please " +"double check if your really want to do this since there is no way for GOsa " +"to get your data back." +msgstr "" +"Это включает все учетные записи, системы и т.п. для данного " +"подразделения. Подумайте еще раз, действительно ли вы хотите его удалить, " +"так как GOsa не сможет отменить результаты этой операции." + +#: plugins/admin/departments/remove.tpl:11 plugins/admin/systems/remove.tpl:11 +msgid "" +"Best thing to do before performing this action would be to save the current " +"contents of your LDAP tree in a file. So - if you've done so - press " +"Delete to continue or Cancel to abort." +msgstr "" +"Лучше всего перед удалением сохранить резервную копию текущего дерева LDAP в " +"файл. Если вы сделали это и действительно хотите выполнить удаление, нажмите " +"Удалить, иначе нажмите Отмена." + +#: plugins/admin/departments/headpage.tpl:6 +msgid "List of departments" +msgstr "Список подразделений" + +#: plugins/admin/departments/headpage.tpl:28 +msgid "" +"This menu allows to create, delete and edit selected departments. Having a " +"large size of departments, you might prefer the range selectors on top of " +"the department list." +msgstr "" +"С помощью этого меню вы можете добавлять, изменять и удалять выбранные " +"подразделения. Если у вас достаточно большое количество подразделений, вы " +"можете использовать групповое выделение." + +#: plugins/admin/departments/headpage.tpl:31 +msgid "" +"-Edit- and -New department- will provide an assistant to aid you when " +"performing changes on your departments. -Delete- will ask you for " +"confirmation before really deleting anything." +msgstr "" +"При изменении и создании подразделения появится интерактивный помощник для " +"редактирования информации об этом подразделении. Перед удалением " +"подразделения вам нужно будет подтвердить свое решение." + +#: plugins/admin/departments/headpage.tpl:45 +msgid "Display subdepartments of" +msgstr "Подразделения в подразделении" + +#: plugins/admin/departments/headpage.tpl:51 +msgid "Display departments matching" +msgstr "Шаблон для подразделений" + +#: plugins/admin/departments/headpage.tpl:52 +msgid "Regular expression for matching department names" +msgstr "Регулярное выражение, соответствующее именам подразделений" + +#: plugins/admin/departments/main.inc:38 plugins/admin/departments/main.inc:40 +msgid "Department management" +msgstr "Управление подразделениями" + +#: plugins/admin/departments/class_departmentManagement.inc:25 +#: plugins/admin/ogroups/class_ogroupManagement.inc:43 +msgid "Departments" +msgstr "Подразделения" + +#: plugins/admin/departments/class_departmentManagement.inc:130 +#, php-format +msgid "You're about to delete the whole LDAP subtree placed under '%s'." +msgstr "Вы собираетесь удалить целую ветку LDAP с корнем в \"%s\"." + +#: plugins/admin/departments/class_departmentManagement.inc:145 +msgid "You have no permission to remove this department." +msgstr "У вас недостаточно прав для удаления этого подразделения." + +#: plugins/admin/departments/class_departmentGeneric.inc:127 +msgid "You have no permissions to create a department on this 'Base'." +msgstr "У вас недостаточно прав для создания подразделения в этой ветке." + +#: plugins/admin/departments/class_departmentGeneric.inc:134 +#: plugins/admin/departments/class_departmentGeneric.inc:136 +msgid "Department with that 'Name' already exists." +msgstr "Подразделение с таким именем уже существует." + +#: plugins/admin/departments/class_departmentGeneric.inc:144 +msgid "Required field 'Description' is not set." +msgstr "Обязательное поле \"Описание\" не заполнено." + +#: plugins/admin/departments/class_departmentGeneric.inc:149 +msgid "The field 'Name' contains the reserved word 'incoming'." +msgstr "Значение поля \"Имя\" содержит служебное слово \"incoming\"." + +#: plugins/admin/departments/class_departmentGeneric.inc:150 +msgid " Please choose another name." +msgstr " Введите другое имя." + +#: plugins/admin/systems/class_terminalService.inc:82 +msgid "default" +msgstr "по умолчанию" + +#: plugins/admin/systems/class_terminalService.inc:83 +msgid "show chooser" +msgstr "показать окно входа в систему" + +#: plugins/admin/systems/class_terminalService.inc:84 +msgid "direct" +msgstr "напрямую" + +#: plugins/admin/systems/class_terminalService.inc:87 +msgid "load balanced" +msgstr "с выравниваем нагрузки" + +#: plugins/admin/systems/class_terminalService.inc:90 +msgid "Windows RDP" +msgstr "Windows RDP" + +#: plugins/admin/systems/class_terminalService.inc:91 +msgid "ICA client" +msgstr "Клиент ICA" + +#: plugins/admin/systems/class_terminalService.inc:135 +#: plugins/admin/systems/class_terminalInfo.inc:61 +#: plugins/admin/systems/class_terminalStartup.inc:75 +#: plugins/admin/systems/class_terminalGeneric.inc:126 +msgid "This 'dn' has no terminal features." +msgstr "Это DN не соответствует терминалу." + +#: plugins/admin/systems/class_terminalService.inc:182 +#, fuzzy +msgid "Choose the phone located at the current terminal" +msgstr "Выбрать раздел, для хранения объекта" + +#: plugins/admin/systems/class_terminalService.inc:244 +#: plugins/admin/systems/class_terminalService.inc:249 +msgid "Please specify a valid VSync range." +msgstr "Пожалуйста, укажите корректную кадровую синхронизацию." + +#: plugins/admin/systems/class_terminalService.inc:259 +#: plugins/admin/systems/class_terminalService.inc:264 +msgid "Please specify a valid HSync range." +msgstr "Пожалуйста, укажите корректную строчную синхронзацию." + +#: plugins/admin/systems/class_terminalInfo.inc:68 +msgid "This is a virtual terminal which has no properties to show here." +msgstr "Это виртуальный терминал без особых свойств." + +#: plugins/admin/systems/class_terminalInfo.inc:80 +msgid "online" +msgstr "в сети" + +#: plugins/admin/systems/class_terminalInfo.inc:130 +msgid "running" +msgstr "запущен" + +#: plugins/admin/systems/class_terminalInfo.inc:133 +msgid "not running" +msgstr "не запущен" + +#: plugins/admin/systems/class_terminalInfo.inc:141 +msgid "unknown status" +msgstr "состояние неизвестно" + +#: plugins/admin/systems/class_terminalInfo.inc:159 +msgid "offline" +msgstr "не в сети" + +#: plugins/admin/systems/network.tpl:1 +msgid "Network settings" +msgstr "Сетевые настройки" + +#: plugins/admin/systems/network.tpl:8 +msgid "IP-address" +msgstr "IP-адрес" + +#: plugins/admin/systems/network.tpl:16 +msgid "MAC-address" +msgstr "MAC-адрес" + +#: plugins/admin/systems/server.tpl:6 +msgid "Server name" +msgstr "Имя сервера" + +#: plugins/admin/systems/server.tpl:15 plugins/admin/systems/phone.tpl:15 +#: plugins/admin/systems/terminal.tpl:20 plugins/admin/systems/printer.tpl:23 +#: plugins/admin/systems/workstation.tpl:20 +#: plugins/admin/systems/component.tpl:15 +#: plugins/admin/systems/wingeneric.tpl:15 +msgid "Choose subtree to place terminal in" +msgstr "Выберите ветку терминала" + +#: plugins/admin/systems/server.tpl:38 plugins/admin/systems/terminal.tpl:99 +#: plugins/admin/systems/workstation.tpl:99 +#: plugins/admin/ogroups/termgroup.tpl:3 +msgid "Action" +msgstr "Действие" + +#: plugins/admin/systems/server.tpl:42 +#, fuzzy +msgid "Select action to execute for this server" +msgstr "Выберите действие, которое нужно выполнить на этом терминале" + +#: plugins/admin/systems/info.tpl:1 +msgid "System information" +msgstr "Системная информация" + +#: plugins/admin/systems/info.tpl:7 +msgid "CPU" +msgstr "Процессор" + +#: plugins/admin/systems/info.tpl:10 +msgid "Memory" +msgstr "Память" + +#: plugins/admin/systems/info.tpl:13 +msgid "Boot MAC" +msgstr "MAC-адрес" + +#: plugins/admin/systems/info.tpl:16 +msgid "USB support" +msgstr "Поддержка USB" + +#: plugins/admin/systems/info.tpl:19 plugins/admin/systems/info.tpl:87 +msgid "System status" +msgstr "Состояние системы" + +#: plugins/admin/systems/info.tpl:23 +#, fuzzy +msgid "Inventary number" +msgstr "Номер телефона" + +#: plugins/admin/systems/info.tpl:27 +msgid "Last login" +msgstr "Последний вход в систему" + +#: plugins/admin/systems/info.tpl:38 +msgid "Network devices" +msgstr "Сетевые устройства" + +#: plugins/admin/systems/info.tpl:47 +msgid "IDE devices" +msgstr "Устройства IDE" + +#: plugins/admin/systems/info.tpl:56 +msgid "SCSI devices" +msgstr "Устройства SCSI" + +#: plugins/admin/systems/info.tpl:64 +msgid "Floppy device" +msgstr "Дисковод" + +#: plugins/admin/systems/info.tpl:68 +msgid "CDROM device" +msgstr "Привод CDROM" + +#: plugins/admin/systems/info.tpl:73 plugins/admin/systems/service.tpl:83 +msgid "Graphic device" +msgstr "Видеокарта" + +#: plugins/admin/systems/info.tpl:77 +msgid "Audio device" +msgstr "Звуковая карта" + +#: plugins/admin/systems/info.tpl:93 +msgid "Up since" +msgstr "Работает с" + +#: plugins/admin/systems/info.tpl:96 +msgid "CPU load" +msgstr "Загрузка процессора" + +#: plugins/admin/systems/info.tpl:99 +msgid "Memory usage" +msgstr "Использование памяти" + +#: plugins/admin/systems/info.tpl:102 +msgid "Swap usage" +msgstr "Использование подкачки" + +#: plugins/admin/systems/info.tpl:116 +msgid "SSH service" +msgstr "Служба SSH" + +#: plugins/admin/systems/info.tpl:119 +msgid "Print service" +msgstr "Служба печати" + +#: plugins/admin/systems/info.tpl:122 +msgid "Scan service" +msgstr "Сканер" + +#: plugins/admin/systems/info.tpl:125 +msgid "Sound service" +msgstr "Звук" + +#: plugins/admin/systems/info.tpl:128 +msgid "GUI" +msgstr "Графический интерфейс" + +#: plugins/admin/systems/main.inc:45 plugins/admin/systems/main.inc:47 +msgid "System management" +msgstr "Управление системами" + +#: plugins/admin/systems/class_terminalGeneric.inc:62 +#: plugins/admin/systems/class_workstationGeneric.inc:71 +msgid "text" +msgstr "текст" + +#: plugins/admin/systems/class_terminalGeneric.inc:63 +#: plugins/admin/systems/class_workstationGeneric.inc:72 +msgid "graphic" +msgstr "графика" + +#: plugins/admin/systems/class_terminalGeneric.inc:88 +#: plugins/admin/systems/class_servGeneric.inc:58 +#: plugins/admin/systems/class_workstationGeneric.inc:98 +#: plugins/admin/ogroups/class_termgroup.inc:51 +msgid "No WAKECMD definition found in your gosa.conf" +msgstr "Определение WAKECMD в вашем файле gosa.conf не найдено" + +#: plugins/admin/systems/class_terminalGeneric.inc:92 +#: plugins/admin/systems/class_terminalGeneric.inc:104 +#: plugins/admin/systems/class_terminalGeneric.inc:116 +#: plugins/admin/systems/class_servGeneric.inc:62 +#: plugins/admin/systems/class_servGeneric.inc:74 +#: plugins/admin/systems/class_servGeneric.inc:86 +#: plugins/admin/systems/class_workstationGeneric.inc:102 +#: plugins/admin/systems/class_workstationGeneric.inc:114 +#: plugins/admin/systems/class_workstationGeneric.inc:126 +#: plugins/admin/ogroups/class_termgroup.inc:55 +#: plugins/admin/ogroups/class_termgroup.inc:67 +#: plugins/admin/ogroups/class_termgroup.inc:79 +#, php-format +msgid "Execution of '%s' failed!" +msgstr "Ошибка при выполнении \"%s\"!" + +#: plugins/admin/systems/class_terminalGeneric.inc:100 +#: plugins/admin/systems/class_servGeneric.inc:70 +#: plugins/admin/systems/class_workstationGeneric.inc:110 +#: plugins/admin/ogroups/class_termgroup.inc:63 +msgid "No REBOOTCMD definition found in your gosa.conf" +msgstr "Определение REBOOTCMD в вашем файле gosa.conf не найдено" + +#: plugins/admin/systems/class_terminalGeneric.inc:112 +#: plugins/admin/systems/class_servGeneric.inc:82 +#: plugins/admin/systems/class_workstationGeneric.inc:122 +#: plugins/admin/ogroups/class_termgroup.inc:75 +msgid "No HALTCMD definition found in your gosa.conf" +msgstr "Определение HALTCMD в вашем файле gosa.conf не найдено" + +#: plugins/admin/systems/class_terminalGeneric.inc:142 +#: plugins/admin/systems/class_servGeneric.inc:110 +#: plugins/admin/systems/class_workstationGeneric.inc:151 +#: plugins/admin/ogroups/class_termgroup.inc:91 +msgid "Switch off" +msgstr "Выключить" + +#: plugins/admin/systems/class_terminalGeneric.inc:142 +#: plugins/admin/systems/class_servGeneric.inc:110 +#: plugins/admin/systems/class_workstationGeneric.inc:151 +#: plugins/admin/ogroups/class_termgroup.inc:91 +msgid "Reboot" +msgstr "Перезагрузить" + +#: plugins/admin/systems/class_terminalGeneric.inc:144 +#: plugins/admin/systems/class_servGeneric.inc:112 +#: plugins/admin/systems/class_workstationGeneric.inc:153 +#: plugins/admin/ogroups/class_termgroup.inc:91 +msgid "Wake up" +msgstr "Вернуть в обычный режим" + +#: plugins/admin/systems/class_terminalGeneric.inc:213 +msgid "You have no permissions to create a terminal on this 'Base'." +msgstr "У вас недостаточно прав для создания терминала в этой ветке." + +#: plugins/admin/systems/class_terminalGeneric.inc:217 +msgid "The required field 'Terminal name' is not set." +msgstr "Обязательное поле 'Название терминала' не заполнено." + +#: plugins/admin/systems/class_terminalGeneric.inc:230 +#: plugins/admin/systems/class_servGeneric.inc:178 +#: plugins/admin/systems/class_workstationGeneric.inc:237 +#: plugins/admin/systems/class_printGeneric.inc:131 +#: plugins/admin/systems/class_phoneGeneric.inc:128 +#: plugins/admin/systems/class_componentGeneric.inc:125 +#: plugins/admin/systems/class_wingeneric.inc:165 +#, php-format +msgid "There is already an entry '%s' in the base choosen by you" +msgstr "В выбранной вами ветке уже есть запись \"%s\"" + +#: plugins/admin/systems/phone.tpl:6 +msgid "Phone name" +msgstr "Название" + +#: plugins/admin/systems/class_servGeneric.inc:48 +#, fuzzy +msgid "This 'dn' has no server features." +msgstr "Этот DN не имеет свойств принтера." + +#: plugins/admin/systems/class_servGeneric.inc:168 +#, fuzzy +msgid "You have no permissions to create a server on this 'Base'." +msgstr "У вас недостаточно прав для создания пользователя в этой ветке." + +#: plugins/admin/systems/terminal.tpl:9 +msgid "Terminal template" +msgstr "Шаблон терминала" + +#: plugins/admin/systems/terminal.tpl:11 +msgid "Terminal name" +msgstr "Терминал" + +#: plugins/admin/systems/terminal.tpl:36 +#: plugins/admin/systems/workstation.tpl:36 +msgid "Mode" +msgstr "Режим" + +#: plugins/admin/systems/terminal.tpl:38 +#: plugins/admin/systems/workstation.tpl:38 +msgid "Select terminal mode" +msgstr "Выберите режим терминала" + +#: plugins/admin/systems/terminal.tpl:52 +#: plugins/admin/systems/workstation.tpl:52 +msgid "Root server" +msgstr "Основной сервер" + +#: plugins/admin/systems/terminal.tpl:54 +#: plugins/admin/systems/workstation.tpl:54 +msgid "Select NFS root filesystem to use" +msgstr "Выберите корневую файловую систему NFS" + +#: plugins/admin/systems/terminal.tpl:60 +#: plugins/admin/systems/workstation.tpl:60 +msgid "Swap server" +msgstr "Сервер подкачки" + +#: plugins/admin/systems/terminal.tpl:62 +#: plugins/admin/systems/workstation.tpl:62 +msgid "Choose NFS filesystem to place swap files on" +msgstr "Выберите файловую систему NFS для файлов подкачки" + +#: plugins/admin/systems/terminal.tpl:74 +#: plugins/admin/systems/workstation.tpl:74 +msgid "Syslog server" +msgstr "Сервер системных журналов" + +#: plugins/admin/systems/terminal.tpl:76 +#: plugins/admin/systems/workstation.tpl:76 +msgid "Choose server to use for logging" +msgstr "Выберите сервер для ведения системных журналов" + +#: plugins/admin/systems/terminal.tpl:82 +#: plugins/admin/systems/workstation.tpl:82 +msgid "NTP server" +msgstr "Сервер NTP" + +#: plugins/admin/systems/terminal.tpl:84 +#: plugins/admin/systems/workstation.tpl:84 +msgid "Choose server to use for synchronizing time" +msgstr "Выберите сервер для синхронизации времени" + +#: plugins/admin/systems/terminal.tpl:103 +#: plugins/admin/systems/workstation.tpl:103 +msgid "Select action to execute for this terminal" +msgstr "Выберите действие, которое нужно выполнить на этом терминале" + +#: plugins/admin/systems/class_servDHCP.inc:32 +msgid "Remove DHCP service" +msgstr "Удалить сервис DHCP" + +#: plugins/admin/systems/class_servDHCP.inc:33 +#, fuzzy +msgid "" +"This server has DHCP features enabled. You can disable them by clicking " +"below." +msgstr "" +"В этой учетной записи есть настройки факса. Вы можете удалить их, щелкнув " +"ниже." + +#: plugins/admin/systems/class_servDHCP.inc:35 +msgid "Add DHCP service" +msgstr "Добавить сервис DHCP" + +#: plugins/admin/systems/class_servDHCP.inc:36 +#, fuzzy +msgid "" +"This server has DHCP features disabled. You can enable them by clicking " +"below." +msgstr "" +"В этой учетной записи нет настроек факса. Вы можете добавить их, щелкнув " +"ниже." + +#: plugins/admin/systems/class_systemManagement.inc:32 +msgid "Systems" +msgstr "Системы" + +#: plugins/admin/systems/class_systemManagement.inc:246 +msgid "You can't edit this object type yet!" +msgstr "Вы не можете редактировать сейчас этот тип объекта!" + +#: plugins/admin/systems/class_systemManagement.inc:262 +msgid "Passwords entered as new and repeated do not match!" +msgstr "Введенные пароли не совпадают!" + +#: plugins/admin/systems/class_systemManagement.inc:275 +msgid "You are not allowed to set this systems password!" +msgstr "У вас недостаточно прав для смены пароля этой системы!" + +#: plugins/admin/systems/class_systemManagement.inc:319 +#, fuzzy, php-format +msgid "You're about to delete all information about the component at '%s'." +msgstr "Вы собираетесь удалить всю информацию о терминале (\"%s\")." + +#: plugins/admin/systems/class_systemManagement.inc:325 +#: plugins/admin/systems/class_systemManagement.inc:378 +#, fuzzy +msgid "You are not allowed to delete this component!" +msgstr "У вас недостаточно прав для удаления этого объекта!" + +#: plugins/admin/systems/class_systemManagement.inc:642 +msgid "New terminal" +msgstr "Создать терминал" + +#: plugins/admin/systems/class_systemManagement.inc:645 +msgid "New workstation" +msgstr "Новая рабочая станция" + +#: plugins/admin/systems/class_systemManagement.inc:661 +msgid "Thin client template for" +msgstr "Шаблон тонкого клиента для" + +#: plugins/admin/systems/class_systemManagement.inc:673 +msgid "Workstation template for" +msgstr "Шаблон рабочей станции для" + +#: plugins/admin/systems/class_workstationGeneric.inc:136 +msgid "This 'dn' has no workstation features." +msgstr "Это DN не содержит атрибутоов рабочей станции." + +#: plugins/admin/systems/class_workstationGeneric.inc:220 +msgid "You have no permissions to create a workstation on this 'Base'." +msgstr "У вас недостаточно прав для создания рабочей станции в этой ветке." + +#: plugins/admin/systems/class_workstationGeneric.inc:224 +msgid "The required field 'Workstation name' is not set." +msgstr "Обязательное поле 'Название рабочей станции' не заполнено." + +#: plugins/admin/systems/printer.tpl:6 +msgid "Printer name" +msgstr "Имя принтера" + +#: plugins/admin/systems/printer.tpl:32 +msgid "Printer URL" +msgstr "URL принтера" + +#: plugins/admin/systems/printer.tpl:36 +msgid "Path to PPD" +msgstr "Путь к PPD" + +#: plugins/admin/systems/class_servDNS.inc:32 +msgid "Remove DNS service" +msgstr "Удалить сервис DNS" + +#: plugins/admin/systems/class_servDNS.inc:33 +#, fuzzy +msgid "" +"This server has DNS features enabled. You can disable them by clicking below." +msgstr "" +"В этой учетной записи есть настройки факса. Вы можете удалить их, щелкнув " +"ниже." + +#: plugins/admin/systems/class_servDNS.inc:35 +msgid "Add DNS service" +msgstr "Добавить сервис DNS" + +#: plugins/admin/systems/class_servDNS.inc:36 +#, fuzzy +msgid "" +"This server has DNS features disabled. You can enable them by clicking below." +msgstr "" +"В этой учетной записи нет настроек факса. Вы можете добавить их, щелкнув " +"ниже." + +#: plugins/admin/systems/class_servDB.inc:117 +#: plugins/admin/systems/class_servDB.inc:133 +#: plugins/admin/systems/class_servDB.inc:139 +#: plugins/admin/systems/class_servDB.inc:144 +#: plugins/admin/systems/class_servDB.inc:150 +#, fuzzy, php-format +msgid "The attribute '%s' is empty or contains invalid characters." +msgstr "Неправильное указание таймаута '%s'" + +#: plugins/admin/systems/class_servDB.inc:123 +#, php-format +msgid "The imap connect string needs to be in the form '%s'." +msgstr "" + +#: plugins/admin/systems/class_servDB.inc:127 +msgid "The sieve port needs to be numeric." +msgstr "" + +#: plugins/admin/systems/workstation.tpl:9 +msgid "Workstation template" +msgstr "Шаблон рабочей станции" + +#: plugins/admin/systems/workstation.tpl:11 +msgid "Workstation name" +msgstr "Имя рабочий станции" + +#: plugins/admin/systems/servdb.tpl:1 +msgid "" +"This dialog keeps settings that are used and required by several components " +"within GOsa and are used to find out more about your servers. These settings " +"will be reloaded when you save this component." +msgstr "" + +#: plugins/admin/systems/servdb.tpl:10 +msgid "Kerberos kadmin access" +msgstr "" + +#: plugins/admin/systems/servdb.tpl:14 +#, fuzzy +msgid "Kerberos Realm" +msgstr "Kerberos" + +#: plugins/admin/systems/servdb.tpl:18 plugins/admin/systems/servdb.tpl:86 +#, fuzzy +msgid "Admin user" +msgstr "Пользователи домена" + +#: plugins/admin/systems/servdb.tpl:30 +#, fuzzy +msgid "FAX database" +msgstr "Базы данных" + +#: plugins/admin/systems/servdb.tpl:34 +#, fuzzy +msgid "FAX DB user" +msgstr "Показать пользователей факсов" + +#: plugins/admin/systems/servdb.tpl:46 +#, fuzzy +msgid "Asterisk management" +msgstr "Управление системами" + +#: plugins/admin/systems/servdb.tpl:50 +msgid "Asterisk DB user" +msgstr "" + +#: plugins/admin/systems/servdb.tpl:58 +msgid "Country dial prefix" +msgstr "" + +#: plugins/admin/systems/servdb.tpl:62 +msgid "Local dial prefix" +msgstr "" + +#: plugins/admin/systems/servdb.tpl:74 +msgid "IMAP admin access" +msgstr "" + +#: plugins/admin/systems/servdb.tpl:78 +#, fuzzy +msgid "Server identifier" +msgstr "Номер дома" + +#: plugins/admin/systems/servdb.tpl:82 +#, fuzzy +msgid "Connect URL" +msgstr "Подключение" + +#: plugins/admin/systems/servdb.tpl:95 +#, fuzzy +msgid "Sieve port" +msgstr "Сервер" + +#: plugins/admin/systems/servdb.tpl:104 +#, fuzzy +msgid "Logging database" +msgstr "база пользователя" + +#: plugins/admin/systems/servdb.tpl:108 +msgid "Logging DB user" +msgstr "" + +#: plugins/admin/systems/class_printGeneric.inc:56 +msgid "This 'dn' has no printer features." +msgstr "Этот DN не имеет свойств принтера." + +#: plugins/admin/systems/class_printGeneric.inc:121 +msgid "You have no permissions to create a printer on this 'Base'." +msgstr "У вас недостаточно прав для создания принтера в этой ветке." + +#: plugins/admin/systems/remove.tpl:7 +msgid "" +"This includes all system and setup informations. Please double check " +"if your really want to do this since there is no way for GOsa to get your " +"data back." +msgstr "" +"Сюда входит вся информация о системе и ее настройках. Подумайте еще " +"раз, действительно ли вам нужно удаление, так как GOsa не сможет отменить " +"результаты этой операции." + +#: plugins/admin/systems/headpage.tpl:6 +msgid "List of systems" +msgstr "Список систем" + +#: plugins/admin/systems/headpage.tpl:29 +msgid "" +"Using this menu you can add, remove and change the properties of specific " +"systems. You can only add systems which have already been started once." +msgstr "" +"С помощью этого меню вы можете добавлять, изменять и удалять свойства " +"отдельных систем. Вы можете только добавлять системы которые однажды уже " +"были запущены." + +#: plugins/admin/systems/headpage.tpl:32 +msgid "" +"-Edit- will execute an assistant to aid you in changing the system " +"properties. -Delete- will ask before really deleting things from your LDAP." +msgstr "" +"-Edit- запустит помошника который поможет Вам изменить настройки системы. -" +"Delete- спросит вас прежде чем действительно удалить объект из каталога." + +#: plugins/admin/systems/headpage.tpl:46 +#: plugins/admin/ogroups/ogroup_objects.tpl:33 +msgid "Select to see servers" +msgstr "Выберите, чтобы просмотреть серверы" + +#: plugins/admin/systems/headpage.tpl:46 +#: plugins/admin/ogroups/ogroup_objects.tpl:33 +msgid "Show servers" +msgstr "Показать серверы" + +#: plugins/admin/systems/headpage.tpl:47 +#, fuzzy +msgid "Select to see Linux terminals" +msgstr "Выберите чтобы посмотреть терминалы" + +#: plugins/admin/systems/headpage.tpl:47 +#: plugins/admin/ogroups/ogroup_objects.tpl:35 +msgid "Show terminals" +msgstr "Показать терминалы" + +#: plugins/admin/systems/headpage.tpl:48 +#, fuzzy +msgid "Select to see Linux workstations" +msgstr "Выберите чтобы посмотреть рабочие станции" + +#: plugins/admin/systems/headpage.tpl:48 +#: plugins/admin/ogroups/ogroup_objects.tpl:34 +msgid "Show workstations" +msgstr "Показать рабочие станции" + +#: plugins/admin/systems/headpage.tpl:49 +msgid "Select to see MicroSoft Windows based workstations" +msgstr "Посмотреть рабочие станции с MicroSoft Windows" + +#: plugins/admin/systems/headpage.tpl:49 +msgid "Show windows based workstations" +msgstr "Показать рабочие станции с windows" + +#: plugins/admin/systems/headpage.tpl:50 +msgid "Select to see network printers" +msgstr "Выберите чтобы посмотреть сетевые принтеры" + +#: plugins/admin/systems/headpage.tpl:50 +msgid "Show network printers" +msgstr "Показать сетевые принтеры" + +#: plugins/admin/systems/headpage.tpl:51 +msgid "Select to see VOIP phones" +msgstr "Выберите чтобы посмотреть VOIP телефоны" + +#: plugins/admin/systems/headpage.tpl:51 +#: plugins/admin/ogroups/ogroup_objects.tpl:37 +msgid "Show phones" +msgstr "Показать телефоны" + +#: plugins/admin/systems/headpage.tpl:52 +#, fuzzy +msgid "Select to see network devices" +msgstr "Выберите чтобы посмотреть сетевые принтеры" + +#: plugins/admin/systems/headpage.tpl:52 +#, fuzzy +msgid "Show network devices" +msgstr "Сетевые устройства" + +#: plugins/admin/systems/headpage.tpl:62 +msgid "Regular expression for matching system names" +msgstr "Регулярное выражение, соответствующее именам систем" + +#: plugins/admin/systems/headpage.tpl:65 +msgid "Display terminal(s) of user" +msgstr "Показать терминал(ы) пользователя" + +#: plugins/admin/systems/headpage.tpl:66 +msgid "User name of which terminal(s) are shown" +msgstr "Имя пользователя, для которого перечисляются терминалы" + +#: plugins/admin/systems/service.tpl:4 +msgid "Keyboard" +msgstr "Клавиатура" + +#: plugins/admin/systems/service.tpl:7 plugins/admin/systems/service.tpl:210 +msgid "Model" +msgstr "Модель" + +#: plugins/admin/systems/service.tpl:9 +msgid "Choose keyboard model" +msgstr "Выберите модель клавиатуры" + +#: plugins/admin/systems/service.tpl:15 +msgid "Layout" +msgstr "Раскладка" + +#: plugins/admin/systems/service.tpl:17 +msgid "Choose keyboard layout" +msgstr "Выберите раскладку" + +#: plugins/admin/systems/service.tpl:23 +msgid "Variant" +msgstr "Вариант" + +#: plugins/admin/systems/service.tpl:25 +msgid "Choose keyboard variant" +msgstr "Выберите вариант раскладки" + +#: plugins/admin/systems/service.tpl:39 +msgid "Mouse" +msgstr "Мышь" + +#: plugins/admin/systems/service.tpl:44 +msgid "Choose mouse type" +msgstr "Выберите тип мыши" + +#: plugins/admin/systems/service.tpl:50 +msgid "Port" +msgstr "Порт" + +#: plugins/admin/systems/service.tpl:52 +msgid "Choose mouse port" +msgstr "Выберите порт мыши" + +#: plugins/admin/systems/service.tpl:66 +#: plugins/gofon/phoneaccount/generic.tpl:5 +msgid "Telephone hardware" +msgstr "Телефонное оборудование" + +#: plugins/admin/systems/service.tpl:69 +#: plugins/gofon/phoneaccount/generic.tpl:9 +msgid "Telephone" +msgstr "Телефон" + +#: plugins/admin/systems/service.tpl:86 +msgid "Driver" +msgstr "Драйвер" + +#: plugins/admin/systems/service.tpl:88 +msgid "Choose graphic driver that is needed by the installed graphic board" +msgstr "Выберите подходящий драйвер для установленной видеокарты" + +#: plugins/admin/systems/service.tpl:94 +msgid "Resolution" +msgstr "Разрешение" + +#: plugins/admin/systems/service.tpl:96 +msgid "Choose screen resolution used in graphic mode" +msgstr "Выберите подходящее разрешение экрана" + +#: plugins/admin/systems/service.tpl:102 +msgid "Color depth" +msgstr "Глубина цвета" + +#: plugins/admin/systems/service.tpl:104 +msgid "Choose colordepth used in graphic mode" +msgstr "Выберите подходящую глубину цвета" + +#: plugins/admin/systems/service.tpl:117 +msgid "Display device" +msgstr "Устройство отображения" + +#: plugins/admin/systems/service.tpl:124 +msgid "HSync" +msgstr "Строчная синхронизация" + +#: plugins/admin/systems/service.tpl:126 +msgid "Horizontal refresh frequency for installed monitor" +msgstr "Частота обновления строк для данного монитора" + +#: plugins/admin/systems/service.tpl:129 +msgid "VSync" +msgstr "Кадровая синхронизация" + +#: plugins/admin/systems/service.tpl:131 +msgid "Vertical refresh frequency for installed monitor" +msgstr "Частота обновления кадров для данного монитора" + +#: plugins/admin/systems/service.tpl:141 +msgid "Remote desktop" +msgstr "Удаленная рабочая станция" + +#: plugins/admin/systems/service.tpl:145 +msgid "Connect method" +msgstr "Способ подключения" + +#: plugins/admin/systems/service.tpl:147 +msgid "Choose method to connect to terminal server" +msgstr "Выберите способ подключения к серверу терминалов" + +#: plugins/admin/systems/service.tpl:154 +msgid "Terminal server" +msgstr "Терминал-сервер" + +#: plugins/admin/systems/service.tpl:156 +msgid "Select specific terminal server to use" +msgstr "Выберите сервер терминалов" + +#: plugins/admin/systems/service.tpl:163 +msgid "Font server" +msgstr "Сервер шрифтов" + +#: plugins/admin/systems/service.tpl:165 +msgid "Select specific font server to use" +msgstr "Выберите сервер шрифтов" + +#: plugins/admin/systems/service.tpl:181 +msgid "Print device" +msgstr "Устройство печати" + +#: plugins/admin/systems/service.tpl:182 +msgid "Select to start IPP based printing service on terminal" +msgstr "Выберите, чтобы запустить на терминале службу печати по протоколу IPP" + +#: plugins/admin/systems/service.tpl:183 +msgid "Provide print services" +msgstr "Предоставлять службу печати" + +#: plugins/admin/systems/service.tpl:189 +msgid "Spool server" +msgstr "Сервер для хранения запросов и временных файлов" + +#: plugins/admin/systems/service.tpl:191 +msgid "Select NFS filesystem to place spool files on" +msgstr "Выберите файловую систему NFS для хранения временных файлов" + +#: plugins/admin/systems/service.tpl:203 +msgid "Scan device" +msgstr "Устройство сканирования" + +#: plugins/admin/systems/service.tpl:204 +msgid "Select to start SANE scan service on terminal" +msgstr "Выберите, чтобы запустить на терминале службу сканирования" + +#: plugins/admin/systems/service.tpl:205 +msgid "Provide scan services" +msgstr "Предоставлять службу сканирования" + +#: plugins/admin/systems/service.tpl:212 +msgid "Select scanner driver to use" +msgstr "Выберите драйвер для используемого сканера" + +#: plugins/admin/systems/startup.tpl:1 +msgid "Boot parameters" +msgstr "Параметры загрузки" + +#: plugins/admin/systems/startup.tpl:8 +msgid "LDAP server" +msgstr "LDAP-сервер" + +#: plugins/admin/systems/startup.tpl:10 +msgid "Choose LDAP server to use for accounts and terminal management" +msgstr "Выберите LDAP-сервер для управления учетными записями и терминалами" + +#: plugins/admin/systems/startup.tpl:16 +msgid "Boot kernel" +msgstr "Ядро для загрузки" + +#: plugins/admin/systems/startup.tpl:18 +msgid "Enter the filename of the kernel to use" +msgstr "Введите имя файла загружаемого ядра" + +#: plugins/admin/systems/startup.tpl:21 +msgid "Custom options" +msgstr "Дополнительные параметры" + +#: plugins/admin/systems/startup.tpl:23 +msgid "" +"Enter any parameters that should be passed to the kernel as append line " +"during bootup" +msgstr "" +"Введите любые дополнительные параметры, которые должны передаваться ядру во " +"время загрузки" + +#: plugins/admin/systems/startup.tpl:34 +msgid "Select if terminal supports graphical startup with progress bar" +msgstr "" +"Выберите, должен ли терминал подерживать загрузку в графическом режиме с " +"показом индикатора состояния" + +#: plugins/admin/systems/startup.tpl:35 +msgid "use graphical bootup" +msgstr "Загружать в графическом режиме" + +#: plugins/admin/systems/startup.tpl:37 +msgid "Select if terminal should boot in text mode" +msgstr "Выберите, должен ли терминал загружаться в текстовом режиме" + +#: plugins/admin/systems/startup.tpl:38 +msgid "use standard linux textual bootup" +msgstr "Загружать в стандартном текстовом режиме" + +#: plugins/admin/systems/startup.tpl:40 +msgid "Select to get more verbose output during startup" +msgstr "" +"Выберите, нужно ли использовать подробный вывод информации при загрузке" + +#: plugins/admin/systems/startup.tpl:41 +msgid "use debug mode for startup" +msgstr "Используйте отладочный режим" + +#: plugins/admin/systems/startup.tpl:52 +msgid "Kernel modules (format: name parameters)" +msgstr "Модули ядра (формат: имя параметры)" + +#: plugins/admin/systems/startup.tpl:54 +msgid "Add additional modules to load on startup" +msgstr "" +"Укажите дополнительные модули, которые должны загружаться при запуске системы" + +#: plugins/admin/systems/startup.tpl:65 +msgid "Automount devices (format: complete autofs entry)" +msgstr "Автоматически монтируемые устройства (формат: полная запись autofs)" + +#: plugins/admin/systems/startup.tpl:67 +msgid "Add additional automount entries" +msgstr "Укажите дополнительные устройства для автоматического монтирования" + +#: plugins/admin/systems/startup.tpl:84 +msgid "Additional fstab entries" +msgstr "Дополнительные записи в fstab" + +#: plugins/admin/systems/startup.tpl:86 +msgid "Add additional filesystems to be mounted during startup" +msgstr "" +"Укажите дополнительные файловые системы для монтирования во время загрузки" + +#: plugins/admin/systems/password.tpl:2 +msgid "" +"To change the terminal root password use the fields below. The changes take " +"effect during next reboot. Please memorize the new password, because the you " +"would't be able to log in. Leave fields blank for password inheritance " +"from default entries." +msgstr "" +"В полях ниже вы можете изменить пароль суперпользователя для выбранного " +"терминала. Изменения вступят в силу после следующей перезагрузки. " +"Пожалуйста, запомните новый пароль, так как иначе вы не сможете войти в " +"систему. Оставьте поля пустыми, если хотите использовать значение по " +"умолчанию." + +#: plugins/admin/systems/password.tpl:6 +msgid "Changing the password impinges on authentification only." +msgstr "Изменение пароля влияет только на аутентификацию в системе." + +#: plugins/admin/systems/chooser.tpl:1 +msgid "Choose the kind of system component you want to create" +msgstr "Выберите тип системного компонента который желаете создать" + +#: plugins/admin/systems/chooser.tpl:4 +msgid "" +"Linux terminals and workstations are autocreated on bootup. For this reason " +"you're only be able to create templates for a specific tree. Servers are " +"normally automatically added too, but in some special cases you may need to " +"create a faked server entry to provide GOsa with some informations. Other " +"network components may be used for Nagios setups to create component " +"dependencies." +msgstr "" +"Терминалы и рабочие станцие Linux были созданы автоматически. Поэтому вам " +"необходимо только создать шаблоны для нужного подразделения. Сервера обычно " +"добавляются тоже, но в отдельных случаях вам может понадобиться " +"'виртуальный' сервер для описания обязательных сервисов. Прочие сетевые " +"компоненты могут быть использованы при установке Nagios для создания " +"межкомпонентных зависимостей." + +#: plugins/admin/systems/chooser.tpl:7 +msgid "Linux thin client template" +msgstr "Шаблон тонкого клиента Linux" + +#: plugins/admin/systems/chooser.tpl:8 +msgid "Linux workstation template" +msgstr "Шаблон рабочей станции Linux" + +#: plugins/admin/systems/chooser.tpl:9 +msgid "Linux Server" +msgstr "Сервер Linux" + +#: plugins/admin/systems/chooser.tpl:10 +msgid "Windows workstation" +msgstr "Рабочая станция Windows" + +#: plugins/admin/systems/chooser.tpl:11 +msgid "Network printer" +msgstr "Сетевой принтер" + +#: plugins/admin/systems/chooser.tpl:13 +msgid "Other network component" +msgstr "Прочие сетевые компоненты" + +#: plugins/admin/systems/chooser.tpl:16 +msgid "Create" +msgstr "Создать" + +#: plugins/admin/systems/class_phoneGeneric.inc:47 +msgid "This 'dn' has no phone features." +msgstr "Этот DN не имеет свойств телефона." + +#: plugins/admin/systems/class_phoneGeneric.inc:118 +msgid "You have no permissions to create a phone on this 'Base'." +msgstr "У вас недостаточно прав для создания телефонов в этой ветке." + +#: plugins/admin/systems/class_componentGeneric.inc:47 +#: plugins/admin/systems/class_wingeneric.inc:85 +#, fuzzy +msgid "This 'dn' has no network features." +msgstr "Этот DN не имеет свойств принтера." + +#: plugins/admin/systems/class_componentGeneric.inc:115 +#: plugins/admin/systems/class_wingeneric.inc:155 +#, fuzzy +msgid "You have no permissions to create a component on this 'Base'." +msgstr "У вас недостаточно прав для создания телефонов в этой ветке." + +#: plugins/admin/systems/component.tpl:6 +#, fuzzy +msgid "Device name" +msgstr "Имя сервера" + +#: plugins/admin/systems/wingeneric.tpl:6 +#, fuzzy +msgid "Machine name" +msgstr "Название" + +#: plugins/admin/ogroups/tabs_ogroups.inc:19 +msgid "Terminals" +msgstr "Терминалы" + +#: plugins/admin/ogroups/ogroup_objects.tpl:6 +msgid "Select objects to add" +msgstr "Выбрать объекты для добавления" + +#: plugins/admin/ogroups/ogroup_objects.tpl:29 +msgid "Select to see departments" +msgstr "Выберите подразделение" + +#: plugins/admin/ogroups/ogroup_objects.tpl:29 +msgid "Show departments" +msgstr "Показать подразделения" + +#: plugins/admin/ogroups/ogroup_objects.tpl:30 +msgid "Select to see GOsa accounts" +msgstr "Выберите чтобы посмотреть пользователей GOsa" + +#: plugins/admin/ogroups/ogroup_objects.tpl:30 +msgid "Show people" +msgstr "Показать людей" + +#: plugins/admin/ogroups/ogroup_objects.tpl:31 +msgid "Select to see GOsa groups" +msgstr "Выберите чтобы посмотреть группы GOsa" + +#: plugins/admin/ogroups/ogroup_objects.tpl:31 +msgid "Show groups" +msgstr "Показать группы" + +#: plugins/admin/ogroups/ogroup_objects.tpl:32 +msgid "Select to see applications" +msgstr "Выберите чтобы посмотреть приложения" + +#: plugins/admin/ogroups/ogroup_objects.tpl:32 +msgid "Show applications" +msgstr "Показать приложения" + +#: plugins/admin/ogroups/ogroup_objects.tpl:34 +msgid "Select to see workstations" +msgstr "Выберите чтобы посмотреть рабочие станции" + +#: plugins/admin/ogroups/ogroup_objects.tpl:35 +msgid "Select to see terminals" +msgstr "Выберите чтобы посмотреть терминалы" + +#: plugins/admin/ogroups/ogroup_objects.tpl:36 +msgid "Select to see printers" +msgstr "Выберите чтобы посмотреть принтеры" + +#: plugins/admin/ogroups/ogroup_objects.tpl:36 +msgid "Show printers" +msgstr "Показать принтеры" + +#: plugins/admin/ogroups/ogroup_objects.tpl:37 +msgid "Select to see phones" +msgstr "Выберите чтобы посмотреть телефоны" + +#: plugins/admin/ogroups/ogroup_objects.tpl:40 +msgid "Display objects of department" +msgstr "Показать объекты подразделения" + +#: plugins/admin/ogroups/ogroup_objects.tpl:46 +msgid "Display objects matching" +msgstr "Показать совпадения объектов" + +#: plugins/admin/ogroups/ogroup_objects.tpl:47 +msgid "Regular expression for matching object names" +msgstr "Регулярное выражение, соответствующее именам объектов" + +#: plugins/admin/ogroups/termgroup.tpl:1 +msgid "" +"All actions you choose here influence all machines in this object " +"group. Be aware that rebooting machines may not make people happy who are " +"currently working at these machines." +msgstr "" + +#: plugins/admin/ogroups/termgroup.tpl:7 +#, fuzzy +msgid "Select action to execute for this group of terminals" +msgstr "Выберите действие, которое нужно выполнить на этом терминале" + +#: plugins/admin/ogroups/class_ogroup.inc:91 +msgid "This 'dn' is no object group." +msgstr "Этот объект не является группой." + +#: plugins/admin/ogroups/class_ogroup.inc:204 +msgid "too many different objects!" +msgstr "слишком много различных объектов!" + +#: plugins/admin/ogroups/class_ogroup.inc:206 +msgid "users" +msgstr "пользователи" + +#: plugins/admin/ogroups/class_ogroup.inc:207 +msgid "groups" +msgstr "группы" + +#: plugins/admin/ogroups/class_ogroup.inc:208 +msgid "applications" +msgstr "приложения" + +#: plugins/admin/ogroups/class_ogroup.inc:209 +msgid "departments" +msgstr "подразделения" + +#: plugins/admin/ogroups/class_ogroup.inc:210 +msgid "servers" +msgstr "серверы" + +#: plugins/admin/ogroups/class_ogroup.inc:211 +msgid "workstations" +msgstr "рабочие станции" + +#: plugins/admin/ogroups/class_ogroup.inc:212 +msgid "terminals" +msgstr "терминалы" + +#: plugins/admin/ogroups/class_ogroup.inc:213 +msgid "phones" +msgstr "телефоны" + +#: plugins/admin/ogroups/class_ogroup.inc:214 +msgid "printers" +msgstr "принтеры" + +#: plugins/admin/ogroups/class_ogroup.inc:221 +msgid "and" +msgstr "и" + +#: plugins/admin/ogroups/class_ogroup.inc:363 +msgid "Non existing dn: " +msgstr "Не существующий dn:" + +#: plugins/admin/ogroups/class_ogroup.inc:494 +msgid "Object groups need at least one member!" +msgstr "В группе должно быть не менее одного участника!" + +#: plugins/admin/ogroups/class_ogroup.inc:499 +msgid "You can combine two different object types at maximum only!" +msgstr "" +"Вы можете комбинировать не более двух различных классов в одном объекте!" + +#: plugins/admin/ogroups/main.inc:34 plugins/admin/ogroups/main.inc:39 +#: plugins/admin/ogroups/class_ogroupManagement.inc:25 +msgid "Object groups" +msgstr "Объединения" + +#: plugins/admin/ogroups/class_ogroupManagement.inc:41 +msgid "UNIX accounts" +msgstr "UNIX аккаунт" + +#: plugins/admin/ogroups/class_ogroupManagement.inc:45 +msgid "Servers" +msgstr "Серверы" + +#: plugins/admin/ogroups/class_ogroupManagement.inc:46 +msgid "Thin Clients" +msgstr "Тонкие клиенты" + +#: plugins/admin/ogroups/class_ogroupManagement.inc:47 +msgid "Workstations" +msgstr "Рабочие станции" + +#: plugins/admin/ogroups/class_ogroupManagement.inc:49 +#: plugins/generic/references/class_reference.inc:52 +msgid "Printer" +msgstr "Принтер" + +#: plugins/admin/ogroups/class_ogroupManagement.inc:153 +#, php-format +msgid "You're about to delete the object group '%s'." +msgstr "Вы собираетесь удалить групповой объект \"%s\"." + +#: plugins/admin/ogroups/class_ogroupManagement.inc:159 +#: plugins/admin/ogroups/class_ogroupManagement.inc:185 +msgid "You are not allowed to delete this object group!" +msgstr "У вас недостаточно прав для удаления этого группового объекта!" + +#: plugins/admin/ogroups/generic.tpl:9 +msgid "Name of the group" +msgstr "Название группы" + +#: plugins/admin/ogroups/generic.tpl:32 +msgid "Member objects" +msgstr "Включаемые объекты" + +#: plugins/admin/ogroups/remove.tpl:7 +msgid "" +"Please double check if you really want to do this since there is no way for " +"GOsa to get your data back." +msgstr "" +"Подумайте еще раз, действительно ли вам нужно удаление, так как GOsa не " +"сможет восстановить эти данные." + +#: plugins/admin/ogroups/headpage.tpl:46 +msgid "Show empty groups" +msgstr "Показать пустые группы" + +#: plugins/admin/ogroups/headpage.tpl:47 +msgid "Show groups containing users" +msgstr "Показать группы с пользователями" + +#: plugins/admin/ogroups/headpage.tpl:48 +msgid "Show groups containing groups" +msgstr "Показать группы с группами" + +#: plugins/admin/ogroups/headpage.tpl:49 +msgid "Show groups containing applications" +msgstr "Показать группы с приложениями" + +#: plugins/admin/ogroups/headpage.tpl:50 +msgid "Show groups containing departments" +msgstr "Показать группы с подразделениями" + +#: plugins/admin/ogroups/headpage.tpl:51 +msgid "Show groups containing servers" +msgstr "Показать группы с серверами" + +#: plugins/admin/ogroups/headpage.tpl:52 +msgid "Show groups containing workstations" +msgstr "Показать группы с рабочими станциями" + +#: plugins/admin/ogroups/headpage.tpl:53 +msgid "Show groups containing terminals" +msgstr "Показать группы с терминалами" + +#: plugins/admin/ogroups/headpage.tpl:54 +msgid "Show groups containing printers" +msgstr "Показать группы с принтерами" + +#: plugins/gofon/phoneaccount/main.inc:120 +msgid "Phone settings" +msgstr "Настройки телефона" + +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:114 +msgid "This account has no phone extensions." +msgstr "В этой учетной записи нет атрибутов для телефона." + +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:124 +msgid "Remove phone account" +msgstr "Удалить телефонный аккаунт" + +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:125 +msgid "" +"This account has phone features enabled. You can disable them by clicking " +"below." +msgstr "" +"В этой учетной записи включены телефонные атрибуты. Вы можете отключить их, " +"щелкнув ниже." + +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:127 +msgid "Create phone account" +msgstr "Создать телефонный аккаунт" + +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:128 +msgid "" +"This account has phone features disabled. You can enable them by clicking " +"below." +msgstr "" +"В этой учетной записи отключены телефонные атрибуты. Вы можете включить их, " +"щелкнув ниже." + +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:140 +msgid "Please enter a valid phone number!" +msgstr "Введите корректный номер телефона!" + +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:176 +msgid "Choose your private phone" +msgstr "Укажите личный телефон" + +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:281 +#, php-format +msgid "You need to specify at least one phone number!" +msgstr "Необходимо указать не менее одного телефонного номера!" + +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:295 +#, php-format +msgid "The number '%s' is no valid phone number!" +msgstr "Неправильный номер телефона '%s'" + +#: plugins/gofon/phoneaccount/class_phoneAccount.inc:298 +#, php-format +msgid "The timeout '%s' contains invalid characters!" +msgstr "Неправильное указание таймаута '%s'" + +#: plugins/gofon/phoneaccount/generic.tpl:16 +msgid "Answering machine" +msgstr "Автоответчик" + +#: plugins/gofon/phoneaccount/generic.tpl:22 +#: plugins/gofon/phoneaccount/generic.tpl:25 +msgid "Deliver missed calls as mail" +msgstr "Сообщать о пропущеных звонка по почте" + +#: plugins/gofon/phoneaccount/generic.tpl:39 +msgid "Phone numbers" +msgstr "Телефонные номера" + +#: plugins/gofon/phoneaccount/generic.tpl:55 +msgid "Forward calls to" +msgstr "Перенаправлять звонки на" + +#: plugins/gofon/phoneaccount/generic.tpl:59 +msgid "Phone number" +msgstr "Номер телефона" + +#: plugins/gofon/phoneaccount/generic.tpl:59 +msgid "Timeout (s)" +msgstr "Таймаут (с)" + +#: plugins/gofon/reports/class_fonreport.inc:6 +msgid "Phone Reports" +msgstr "Телефонные отчеты" + +#: plugins/gofon/reports/class_fonreport.inc:138 +msgid "Can't connect to phone database, no reports can be shown!" +msgstr "Не удается подключиться к телефонной базе, отчеты показаны не будут!" + +#: plugins/gofon/reports/class_fonreport.inc:142 +msgid "Can't select phone database for report generation!" +msgstr "Не могу выбрать базу телефонов для создания отчета!" + +#: plugins/gofon/reports/class_fonreport.inc:151 +msgid "Query for phone database failed!" +msgstr "Запрос в базу телефонов не выполнен!" + +#: plugins/gofon/reports/contents.tpl:31 +msgid "Source" +msgstr "Источник" + +#: plugins/gofon/reports/contents.tpl:32 +msgid "Destination" +msgstr "Назначение" + +#: plugins/gofon/reports/contents.tpl:33 +msgid "Channel" +msgstr "Канал" + +#: plugins/gofon/reports/contents.tpl:34 +#: plugins/generic/references/class_reference.inc:42 +msgid "Application" +msgstr "Приложение" + +#: plugins/gofon/reports/contents.tpl:36 +msgid "Duration" +msgstr "Продолжительность" + +#: plugins/gofon/reports/main.inc:5 +msgid "Phone reports" +msgstr "Телефонные отчеты" + +#: plugins/generic/references/class_reference.inc:36 +msgid "Group" +msgstr "Группа" + +#: plugins/generic/references/class_reference.inc:46 +msgid "Thin Client" +msgstr "Тонкий клиент" + +#: plugins/generic/references/class_reference.inc:48 +msgid "Workstation" +msgstr "Рабочая станция" + +#: plugins/generic/references/class_reference.inc:50 +msgid "Object group" +msgstr "Объект группы" + +#: plugins/generic/references/contents.tpl:11 +msgid "Object name" +msgstr "Имя объекта" + +#: plugins/generic/references/contents.tpl:18 +msgid "This object has no relationship to other objects." +msgstr "Данный объект не имеет ссылок на другие объекты" + +#: plugins/generic/welcome/welcome.tpl:4 +msgid "" +"This is the GOsa main screen. You can select your tasks from the menu on the " +"left, or by choosing one of the pictogramms below. All changes apply " +"directly to your companies LDAP-Server." +msgstr "" +"Это начальная страница GOsa. Из меню слева или среди пиктограмм ниже вы " +"можете выбрать нужный вам раздел. Все изменения будут сразу же переноситься " +"на LDAP-сервер вашей компании." + +#: plugins/generic/welcome/welcome.tpl:8 +msgid "" +"Use Sign out on the upper left to close the connection and Main to get back to the pictogram view." +msgstr "" +"Чтобы завершить сеанс, выберите в меню слева вверху пункт Выход. " +"Чтобы вернуться на начальную страницу, выберите Начало." + +#: plugins/generic/welcome/welcome.tpl:15 +msgid "The GOsa team" +msgstr "Команда разработчиков GOsa" + +#: plugins/generic/welcome/main.inc:24 +#, php-format +msgid "Welcome %s!" +msgstr "Добро пожаловать %s!" + +#: include/functions.inc:266 +#, php-format +msgid "Error when connecting the LDAP. Server said '%s'." +msgstr "Ошибка при подключении к LDAP-серверу. Ответ сервера: \"%s\"." + +#: include/functions.inc:287 +#, php-format +msgid "User login failed. LDAP server said '%s'." +msgstr "Ошибка при регистрации. Ответ сервера: \"%s\"." + +#: include/functions.inc:307 +msgid "Username / UID is not unique. Please check your LDAP database." +msgstr "" +"Имя/идентификатор пользователя не уникальны. Проверьте свою базу данных LDAP." + +#: include/functions.inc:345 +msgid "" +"Error while adding a lock. Parameters are not set correctly, please check " +"the source!" +msgstr "Ошибка при создании блокировки. Заданные параметры некорректны." + +#: include/functions.inc:355 +#, php-format +msgid "" +"Can't set locking information in LDAP database. Please check the 'config' " +"entry in gosa.conf! LDAP server says '%s'." +msgstr "" +"Не удается создать блокировку в базе данных LDAP. Проверьте, раздел config в " +"файле gosa.conf! Ответ сервера: %s" + +#: include/functions.inc:370 +#, php-format +msgid "Adding a lock failed. LDAP server says '%s'." +msgstr "Ошибка при создании блокировки. Ответ сервера: \"%s\"." + +#: include/functions.inc:396 +#, php-format +msgid "Removing a lock failed. LDAP server says '%s'." +msgstr "Ошибка при удалении блокировки. Ответ сервера: \"%s\"." + +#: include/functions.inc:426 +msgid "" +"Getting the lock from LDAP failed. Parameters are not sed correctly, please " +"check the source!" +msgstr "Ошибка при чтении блокировки. Заданные параметры некорректны." + +#: include/functions.inc:436 +msgid "" +"Can't get locking information in LDAP database. Please check the 'config' " +"entry in gosa.conf!" +msgstr "" +"Не удается считать блокировку в базе данных LDAP. Проверьте, раздел \"config" +"\" в файле gosa.conf!" + +#: include/functions.inc:444 +msgid "" +"Found multiple locks for object to be locked. This should not be possible - " +"cleaning up multiple references." +msgstr "" +"Для блокируемого объекта обнаружено несколько блокировок. Этого быть не " +"должно, проверьте работу LDAP." + +#: include/functions.inc:516 +#, php-format +msgid "The size limit of %d entries is exceed!" +msgstr "Найдено более %d объектов." + +#: include/functions.inc:518 +#, php-format +msgid "" +"Set the new size limit to %s and show me this message if the limit still " +"exceeds" +msgstr "" +"Установить новое значение лимита в %s и показать мне это сообщение если " +"лимит будет исчерпан." + +#: include/functions.inc:530 +msgid "Configure" +msgstr "Настроить" + +#: include/functions.inc:535 +msgid "incomplete" +msgstr "не полный" + +#: include/functions.inc:918 +#, php-format +msgid "" +"You're going to edit the LDAP entry '%s' which appears to be used by '%s'. " +"Please contact the person in order to clarify proceedings." +msgstr "" +"Вы собираетесь редактировать запись LDAP \"%s\", которая используется \"%s" +"\". Пожалуйста, обратитесь к пользователю и уточните отношения." + +#: include/functions.inc:1017 +msgid "LDAP error:" +msgstr "Ошибка LDAP:" + +#: include/functions.inc:1110 +msgid "" +"Warning: Can't set kerberos password. Your PHP version has no kerberos " +"support, password has not been changed." +msgstr "" +"Предупреждение: не удается создать пароль Kerberos. В вашей установке PHP " +"нет поддержки Kerberos, пароль не был изменен." + +#: include/functions.inc:1117 +msgid "Kerberos database communication failed!" +msgstr "Ошибка подключения к базе данных Kerberos!" + +#: include/functions.inc:1123 +msgid "Changing password in kerberos database failed!" +msgstr "Ошибка смены пароля в базе данных Kerberos!" + +#: include/functions.inc:1132 +msgid "Unsupported password hash detected. Can't generate compatible password." +msgstr "" +"Обнаружен не поддерживаемый метод хэширования паролей. Не удается создать " +"подходящий пароль." + +#: include/functions.inc:1172 +msgid "" +"Setting for SMBHASH in gosa.conf is incorrect! Can't change Samba password." +msgstr "" +"Параметр SMBHASH в gosa.conf некорректен! Не удается сменить пароль Samba." + +#: include/functions.inc:1190 +#, php-format +msgid "Setting the password failed. LDAP server says '%s'." +msgstr "Ошибка при установке пароля. Ответ LDAP-сервера: \"%s\"." + +#: include/functions.inc:1603 +msgid "*ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" +msgstr "*АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЭЮЯ0123456789" + +#: include/class_mail-methods-cyrus.inc:44 +msgid "" +"Warning: IMAP Server cannot be reached! If you save this account, some mail " +"settings will not be stored on your server!" +msgstr "" +"Предупреждение: не удается получить доступ к серверу IMAP! Некоторые " +"почтовые настройки не будут сохранены." + +#: include/class_mail-methods-cyrus.inc:107 +#, php-format +msgid "Can't create IMAP mailbox. Server says '%s'." +msgstr "Не удается создать почтовый ящик IMAP. Ответ сервера: \"%s\"." + +#: include/class_mail-methods-cyrus.inc:123 +#, php-format +msgid "Can't write IMAP quota. Server says '%s'." +msgstr "Не удается создать квоту IMAP. Ответ сервера: \"%s\"." + +#: include/class_mail-methods-cyrus.inc:134 +msgid "" +"Warning: imap_getacl is not implemented, wouldn't modify acl informations." +msgstr "" +"Предупреждение: функция imap_getacl не реализована, и вы не сможете менять " +"права доступа к общим папкам." + +#: include/class_mail-methods-cyrus.inc:169 +msgid "Warning: imap_getacl is not available, can't get imap permissions!" +msgstr "" +"Предупреждение: функция imap_getacl недоступна, не удается считать права на " +"доступ к папкам!" + +#: include/class_mail-methods-cyrus.inc:191 +#, php-format +msgid "Can't remove IMAP mailbox. Server says '%s'." +msgstr "Не удается удалить почтовый ящик IMAP. Ответ сервера: '%s'." + +#: include/class_mail-methods-cyrus.inc:219 +#, php-format +msgid "Can't log into SIEVE server. Server says '%s'." +msgstr "Невозможно зарегистрироваться на сервере SIEVE. Ответ сервера: \"%s\"." + +#: include/class_mail-methods-cyrus.inc:232 +#, php-format +msgid "Can't get sieve script. Server says '%s'." +msgstr "Невозможно получить сценарий SIEVE. Ответ сервера: \"%s\"." + +#: include/class_mail-methods-cyrus.inc:303 +#, php-format +msgid "Can't send sieve script. Server says '%s'." +msgstr "Невозможно отправить сценарий SIEVE. Ответ сервера: \"%s\"." + +#: include/class_mail-methods-cyrus.inc:307 +#, php-format +msgid "Can't activate GOsa sieve script. Server says '%s'." +msgstr "Невозможно активировать сценарий GOsa SIEVE. Ответ сервера: \"%s\"." + +#: include/class_pluglist.inc:98 +msgid "" +"Your gosa.conf information has changed partly. Please convert it using the " +"contributed script fix_config.sh!" +msgstr "" +"Ваш конфигурационный файл gosa.conf был частично изменен. Пожалуйста, " +"сконвертиуйте его используя скрипт fix_config.sh" + +#: include/class_pluglist.inc:113 ihtml/themes/altlinux/framework.tpl:13 +#: ihtml/themes/altlinux/framework.tpl:23 +#: ihtml/themes/default/framework.tpl:13 ihtml/themes/default/framework.tpl:23 +msgid "" +"You are currently editing a database entry. Do you want to dismiss the " +"changes?" +msgstr "" +"Вы сейчас редактируете объект базы данных. Хотите отказаться от изменений?" + +#: include/setup_checks.inc:78 +msgid "Can't bind to LDAP. No schema check possible!" +msgstr "Не удается начать сеанс на LDAP-сервере. Проверка схем невозможна!" + +#: include/setup_checks.inc:87 include/setup_checks.inc:96 +msgid "Can't get schema information from server. No schema check possible!" +msgstr "Не удается получить информацию о схемах. Проверка схем невозможна!" + +#: include/setup_checks.inc:116 +#, php-format +msgid "" +"Optional objectclass '%s' required by plugin '%s' is not present in LDAP " +"setup" +msgstr "" +"Необязательный класс объектов \"%s\", нужный для модуля \"%s\", отсутствует " +"в установке LDAP." + +#: include/setup_checks.inc:119 +#, php-format +msgid "" +"Optional objectclass '%s' required by plugin '%s' does not have version %s" +msgstr "" +"У необязательного класса объектов \"%s\", нужного для модуля \"%s\", версия " +"не %s" + +#: include/setup_checks.inc:131 +#, php-format +msgid "Required objectclass '%s' is not present in LDAP setup" +msgstr "Обязательный класс объектов \"%s\" отсутствует в установке LDAP." + +#: include/setup_checks.inc:134 +#, php-format +msgid "Required objectclass '%s' does not have version %s" +msgstr "У обязательного класса объектов \"%s\" версия не %s" + +#: include/setup_checks.inc:142 +#, fuzzy +msgid "SAMBA 3 support disabled, no schema seems to be installed" +msgstr "Поддержка Samba 3 отключена, не все схемы установлены!" + +#: include/setup_checks.inc:144 +msgid "" +"SAMBA 3 support enabledgosa+samba3.schema" +msgstr "" + +#: include/setup_checks.inc:147 +#, fuzzy +msgid "SAMBA 2 support disabled, no schema seems to be installed" +msgstr "Поддержка Samba 2 отключена, не все схемы установлены!" + +#: include/setup_checks.inc:149 +msgid "SAMBA 2 support enabledsamba.schema" +msgstr "" + +#: include/setup_checks.inc:153 +#, fuzzy +msgid "Support for pureftp disabled, no schema seems to be installed" +msgstr "Поддержка PureFTP отключена, не все схемы установлены!" + +#: include/setup_checks.inc:155 +msgid "" +"Support for pureftp enabledpureftpd.schema" +msgstr "" + +#: include/setup_checks.inc:158 +#, fuzzy +msgid "Support for WebDAV disabled, no schema seems to be installed" +msgstr "Поддержка WebDAV отключена, не все схемы установлены!" + +#: include/setup_checks.inc:160 +msgid "" +"Support for WebDAV enabledgosa+samba3.schema" +msgstr "" + +#: include/setup_checks.inc:163 +#, fuzzy +msgid "" +"Support for phpgroupware disabled, no schema seems to be installed" +msgstr "Поддержка phpgroupware отключена, не все схемы установлены!" + +#: include/setup_checks.inc:165 +msgid "" +"Support for phpgroupware enabledphpgwaccount." +"schema" +msgstr "" + +#: include/setup_checks.inc:168 +#, fuzzy +msgid "Support for gofon disabled, no schema seems to be installed" +msgstr "Поддержка Gofon отключена, не все схемы установлены!" + +#: include/setup_checks.inc:170 +msgid "Support for gofon enabledgofon.schema" +msgstr "" + +#: include/setup_checks.inc:182 +msgid "OK" +msgstr "OK" + +#: include/setup_checks.inc:185 +msgid "Ignored" +msgstr "Пропуск" + +#: include/setup_checks.inc:187 +msgid "Failed" +msgstr "Ошибка" + +#: include/setup_checks.inc:203 +msgid "PHP setup inspection" +msgstr "Проверка конфигурации PHP" + +#: include/setup_checks.inc:204 +msgid "Checking for PHP version (>=4.1.0)" +msgstr "Проверка версии PHP (>=4.1.0)" + +#: include/setup_checks.inc:205 +msgid "" +"PHP must be of version 4.1.0 or above for some functions and known bugs in " +"PHP language." +msgstr "" +"У вас должна быть установка PHP версии не ниже 4.1.0, так как в ней " +"реализованы некоторые новые функции и исправлены некоторые ошибки." + +#: include/setup_checks.inc:208 +msgid "Checking if register_globals is set to 'off'" +msgstr "Проверка значения параметра register_globals (должно быть: off)" + +#: include/setup_checks.inc:209 +msgid "" +"register_globals is a PHP mechanism to register all global varibales to be " +"accessible from scripts without changing the scope. This may be a security " +"risk. GOsa will run in both modes." +msgstr "" +"register_globals - механизм PHP, позволяющий делать все глобальные " +"переменные доступными из сценария без смены области действия. Это может быть " +"нарушением безопасности. Тем не менее, GOsa будет работать в любом случае." + +#: include/setup_checks.inc:212 +msgid "Checking for ldap module" +msgstr "Проверка модуля ldap" + +#: include/setup_checks.inc:213 +msgid "This is the main module used by GOsa and therefore really required." +msgstr "Основной модуль, используемый GOsa, и поэтому обязательный." + +#: include/setup_checks.inc:216 +msgid "Checking for gettext support" +msgstr "Проверка поддержки gettext" + +#: include/setup_checks.inc:217 +msgid "Gettext support is required for internationalized GOsa." +msgstr "Необходима для локализованных версий GOsa." + +#: include/setup_checks.inc:219 +msgid "Checking for mhash module" +msgstr "Проверка модуля mhash" + +#: include/setup_checks.inc:220 +msgid "" +"To use SSHA encryption, you'll need this module. If you are just using crypt " +"or md5 encryption, ignore this message. GOsa will run without it." +msgstr "" +"Этот модуль нужен для использования алгоритма шифрования SSHA. Если вы " +"используете только алгоритмы crypt или MD5, не обращайте внимания на " +"результат проверки. GOsa будет работать и без этого модуля." + +#: include/setup_checks.inc:223 +msgid "Checking for gd module" +msgstr "Проверка модуля gd" + +#: include/setup_checks.inc:224 +msgid "" +"GOsa needs this module for recalculating image sizes provided for users as " +"jpegPhoto." +msgstr "" +"Этот модуль нужен для подсчета размеров изображений в формате jpegPhoto, " +"загружаемых пользователями." + +#: include/setup_checks.inc:226 +msgid "Checking for imap module" +msgstr "Проверка модуля IMAP" + +#: include/setup_checks.inc:227 +msgid "" +"The IMAP module is needed to communicate with the IMAP server. It gets " +"status informations, creates and deletes mail users." +msgstr "" +"Этот модуль нужен для работы с сервером IMAP. С его помощью можно получать " +"информацию о состоянии учетной записи, создавать и удалять пользователей." + +#: include/setup_checks.inc:229 +msgid "Checking for getacl in imap" +msgstr "Проверка использования getacl в IMAP" + +#: include/setup_checks.inc:230 +msgid "" +"The getacl support is needed for shared folder permissions. The standard " +"IMAP module is not capable of reading acl's. You need a recend PHP version " +"for this feature." +msgstr "" +"Поддержка getacl в IMAP нужна для выставления прав на общие папки. " +"Стандартный модуль IMAP не может обрабатывать acl. Для использования этой " +"функции вам нужна последняя версия PHP." + +#: include/setup_checks.inc:232 +msgid "Checking for mysql module" +msgstr "Проверка модуля mysql" + +#: include/setup_checks.inc:233 +msgid "MySQL support is needed for reading GOfax reports from databases." +msgstr "" +"Необходим для чтения отчетов о полученных факсимильных сообщениях из базы " +"данных." + +#: include/setup_checks.inc:235 +msgid "Checking for cups module" +msgstr "Проверка модуля cups" + +#: include/setup_checks.inc:236 +msgid "" +"In order to read available printers from IPP protocol instead of printcap " +"files, you've to install the CUPS module." +msgstr "" +"Чтобы получать информацию о доступных принтерах по протоколу IPP вместо " +"чтения файлов printcap, вам нужно установить модуль CUPS." + +#: include/setup_checks.inc:238 +msgid "Checking for kadm5 module" +msgstr "Проверка модуля kadm5" + +#: include/setup_checks.inc:239 +msgid "" +"Managing users in kerberos requires the kadm5 module which is downloadable " +"via PEAR network." +msgstr "" +"Чтобы управлять пользователями с помощью Kerberos, необходим модуль kadm5, " +"который можно загрузить из сети PEAR." + +#: include/setup_checks.inc:248 +msgid "Checking for some additional programms" +msgstr "Проверка дополнительных программ" + +#: include/setup_checks.inc:257 +msgid "Checking for ImageMagick (>=5.4.0)" +msgstr "Проверка ImageMagick (>=5.4.0)" + +#: include/setup_checks.inc:258 +msgid "" +"ImageMagick is used to convert user supplied images to fit the suggested " +"size and the unified JPEG format." +msgstr "" +"ImageMagick используется для приведения изображений, полученных от " +"пользователей, к заданным размерам и формату JPEG." + +#: include/setup_checks.inc:261 +#, fuzzy +msgid "Checking imagick module for PHP" +msgstr "Проверка модуля IMAP" + +#: include/setup_checks.inc:262 +#, fuzzy +msgid "" +"Imagick is used to convert user supplied images to fit the suggested size " +"and the unified JPEG format from PHP script." +msgstr "" +"ImageMagick используется для приведения изображений, полученных от " +"пользователей, к заданным размерам и формату JPEG." + +#: include/setup_checks.inc:269 +msgid "Checking for fping utility" +msgstr "Проверка утилиты fping" + +#: include/setup_checks.inc:270 +msgid "" +"The fping utility is only used if you've got a thin client based terminal " +"environment running." +msgstr "" +"Эта программа используется, только если вы работате с бездисковыми " +"терминалами." + +#: include/setup_checks.inc:285 +msgid "Checking for a way to generate LM/NT password hashes" +msgstr "Проверка возможности создания хэшей LM/NT для паролей" + +#: include/setup_checks.inc:286 +msgid "" +"In order to use SAMBA 2/3, you've to install some additional packages to " +"generate password hashes." +msgstr "" +"Чтобы пользоваться Samba 2/3, вам нужно установить некоторые дополнительные " +"программы для создания хэшей паролей." + +#: include/class_plugin.inc:180 +msgid "This 'dn' has no account extensions." +msgstr "Для этого DN нет расширений учетной записи." + +#: include/class_plugin.inc:185 +msgid "This is an empty plugin." +msgstr "Это пустой модуль." + +#: include/class_plugin.inc:384 +#, php-format +msgid "" +"Command '%s', specified as POSTCREATE for plugin '%s' doesn't seem to exist." +msgstr "" +"Не удается найти команду \"%s\", указанную в поле POSTCREATE модуля \"%s\"." + +#: include/class_plugin.inc:410 +#, fuzzy, php-format +msgid "" +"Command '%s', specified as POSTMODIFY for plugin '%s' doesn't seem to exist." +msgstr "" +"Не удается найти команду \"%s\", указанную в поле POSTREMOVE модуля \"%s\"." + +#: include/class_plugin.inc:436 +#, php-format +msgid "" +"Command '%s', specified as POSTREMOVE for plugin '%s' doesn't seem to exist." +msgstr "" +"Не удается найти команду \"%s\", указанную в поле POSTREMOVE модуля \"%s\"." + +#: include/version.inc:15 +#, php-format +msgid "You are currently using GOsa version %s (CVS checkout from %s)" +msgstr "Вы используете GOsa версии %s (CVS checkout from %s)" + +#: include/class_config.inc:69 +#, php-format +msgid "XML error in gosa.conf: %s at line %d" +msgstr "Ошибка XML в gosa.conf: %s в строке %d" + +#: include/class_config.inc:195 html/index.php:138 +msgid "Can't bind to LDAP. Please contact the system administrator." +msgstr "" +"Не удается начать сеанс на LDAP-сервере. Обратитесь к системному " +"администратору." + +#: include/class_config.inc:426 +msgid "SID and/or RIDBASE missing in your configuration!" +msgstr "В вашем файле настройки отсутствуют значения SID и/или RIDBASE!" + +#: include/class_ldap.inc:429 +#, php-format +msgid "" +"Autocreation of type '%s' is currently not supported. Please report to the " +"GOsa team." +msgstr "" +"Автоматическое создание типа \"%s\" не поддерживается. Пожалуйста, сообщите " +"об этом команде разработчиков GOsa." + +#: include/class_ldap.inc:664 +#, php-format +msgid "" +"This is not a valid DN: '%s'. A block for import should begin with 'dn: ...' " +"in line %s" +msgstr "" + +#: include/class_ldap.inc:680 +#, php-format +msgid "The dn: '%s' (from line %s) already exists in the LDAP database." +msgstr "" + +#: include/class_ldap.inc:695 +#, php-format +msgid "Error while importing dn: '%s', please check your LDIF from line %s on!" +msgstr "" + +#: html/getfax.php:53 +msgid "Could not connect to database server!" +msgstr "Невозможно подключиться к серверу базы данных!" + +#: html/getfax.php:55 +msgid "Could not select database!" +msgstr "Невозможно выбрать базу данных!" + +#: html/getfax.php:60 html/getfax.php:68 +msgid "Database query failed!" +msgstr "Невозможно выполнить запрос к базе данных!" + +#: html/getvcard.php:36 +msgid "Error: getcvard.php needs a parameter to export a vcard!" +msgstr "" +"Ошибка: для экспорта в формат vcard файлу getcvard.php нужно передать " +"параметр!" + +#: html/setup.php:141 html/index.php:75 +#, php-format +msgid "Directory '%s' specified as compile directory is not accessable!" +msgstr "Недоступен каталог \"%s\", указанный как каталог компиляции!" + +#: html/setup.php:207 +msgid "You've to specify an ldap server before continuing!" +msgstr "Для продолжения укажите LDAP-сервер!" + +#: html/setup.php:216 +msgid "" +"Can't connect to the specified LDAP server! Please make sure that is " +"reachable for GOsa." +msgstr "" +"Не удается подключиться к указанному LDAP-серверу! Убедитесь, что он " +"доступен GOsa." + +#: html/setup.php:224 +msgid "" +"Can't bind to the specified LDAP server! Please make sure that is reachable " +"for GOsa." +msgstr "" +"Не удается начать сеанс на указанном LDAP-сервере! Убедитесь, что он " +"доступен GOsa." + +#: html/setup.php:268 +#, php-format +msgid "" +"You're missing the required attribute '%s' from this formular. Please " +"complete!" +msgstr "" +"Вы не заполнили обязательное поле \"%s\". Пожалуйста, заполните форму " +"целиком." + +#: html/setup.php:284 +#, php-format +msgid "Can't log into LDAP server. Reason was: %s." +msgstr "Невозможно зарегистрироваться на LDAP-сервере. Причина: %s." + +#: html/setup.php:328 +msgid "" +"No configuration found! Please save the generated one and place it in the " +"suggested directory." +msgstr "" +"Файл настройки не найден! Пожалуйста, сохраните сгенерированный файл в " +"нужном каталоге." + +#: html/setup.php:337 +msgid "Config file found, but permissions are not secure. Please fix!" +msgstr "" +"Файл настройки найден, но права на доступ к нему неверные. Пожалуйста, " +"измените их!" + +#: html/main.php:96 +msgid "" +"Register globals is on. GOsa will refuse to login unless this is fixed by an " +"administrator." +msgstr "" +"Используется механизм register_globals. GOsa не допустит пользователей в " +"систему, пока он не будет отключен администратором." + +#: html/main.php:139 +msgid "Warning: memory is getting low - please increase the memory_limit!" +msgstr "Предупреждение: нехватка памяти, увеличьте значение memory_limit!" + +#: html/main.php:257 +#, php-format +msgid "Can't find any plugin definitions for plugin '%s'!" +msgstr "Не удается найти определение для модуля \"%s\"!" + +#: html/index.php:53 +#, php-format +msgid "GOsa configuration %s/gosa.conf is not readable. Aborted." +msgstr "" +"Не удается прочитать файл настройки GOsa %s/gosa.conf. Операция прервана." + +#: html/index.php:156 +msgid "" +"You're missing an administrative account for GOsa, you'll not be able to " +"administrate anything!" +msgstr "" +"У вас нет учетной записи администратора для GOsa, так что вы не сможете что-" +"либо администрировать!" + +#: html/index.php:164 +msgid "Please specify a valid username!" +msgstr "Введите корректное имя пользователя!" + +#: html/index.php:166 +msgid "Please specify your password!" +msgstr "Введите свой пароль!" + +#: html/index.php:173 +msgid "Please check the username/password combination." +msgstr "Проверьте, правильно ли вы ввели имя пользователя и пароль." + +#: html/index.php:211 +msgid "Session will not be encrypted." +msgstr "Данные, передаваемые в течение этого сеанса, не будут зашифрованы." + +#: html/index.php:211 +msgid "Enter SSL session" +msgstr "Использовать шифрование SSL" + +#: ihtml/themes/altlinux/sizelimit.tpl:3 ihtml/themes/default/sizelimit.tpl:3 +msgid "" +"The size limit option makes LDAP operations faster and saves the LDAP server " +"from getting too much load. The easiest way to handle big databases without " +"long timeouts would be to limit your search to smaller values and use " +"filters to get the entries you are looking for." +msgstr "" +"Ограничение на количество возвращаемых объектов позволяет ускорить операции " +"поиска и предохраняет сервер LDAP от большой нагрузки. Простейший способ " +"снизить время обработки запроса при обслуживаии большой базы данных это " +"установить минимальное значение. Кроме того, будет очень полезно " +"использовать фильтры для просмотра только ограниченного количества объектов." + +#: ihtml/themes/altlinux/sizelimit.tpl:6 ihtml/themes/default/sizelimit.tpl:6 +msgid "Please choose the way to react for this session" +msgstr "Выберите тип реакции для данной сессии" + +#: ihtml/themes/altlinux/sizelimit.tpl:9 ihtml/themes/default/sizelimit.tpl:9 +msgid "ignore this error and show all entries the LDAP server returns" +msgstr "игнорировать ошибку и показать все найденые объекты" + +#: ihtml/themes/altlinux/sizelimit.tpl:10 +#: ihtml/themes/default/sizelimit.tpl:10 +msgid "" +"ignore this error and show all entries that fit int the defined sizelimit " +"and let me use filters instead" +msgstr "" +"Игнорировать ошибку и показать все возвращаемые объекты в пределах лимита и " +"позволить использовать фильтры" + +#: ihtml/themes/altlinux/conflict.tpl:2 ihtml/themes/classic/conflict.tpl:2 +#: ihtml/themes/default/conflict.tpl:2 +msgid "Session conflict detected" +msgstr "Конфликт сеансов" + +#: ihtml/themes/altlinux/conflict.tpl:6 ihtml/themes/classic/conflict.tpl:6 +#: ihtml/themes/default/conflict.tpl:6 +msgid "" +"Probably there's another active instance of your session. Multiple window " +"operation is technical not possible and heavily depends on the browser " +"you're using. Usage of different browsers at a time (i.e. IE and Mozilla) is " +"possible. Pressing the Logout button will close this session." +msgstr "" +"Возможно, есть еще один экземпляр вашего сеанса. Работа с несколькими окнами " +"одновременно технически невозможна и в значительной мере зависит от " +"используемого браузера. Использование разных браузеров одновременно " +"(например, IE и Mozilla) возможно. Нажав на кнопку Выход, вы " +"завершите текущий сеанс." + +#: ihtml/themes/altlinux/conflict.tpl:10 ihtml/themes/classic/conflict.tpl:10 +#: ihtml/themes/default/conflict.tpl:10 +msgid "" +"Ignoring this message will change/destroy the data you're currently editing, " +"so please close multiple windows and log in again." +msgstr "" +"Если вы ничего не предпримете, редактируемые вами данные не будут сохранены, " +"поэтому закройте все окна, кроме одного, и начните сеанс заново." + +#: ihtml/themes/altlinux/conflict.tpl:14 ihtml/themes/classic/conflict.tpl:14 +#: ihtml/themes/default/conflict.tpl:14 +msgid "Logout" +msgstr "Выход" + +#: ihtml/themes/altlinux/login.tpl:13 ihtml/themes/classic/login.tpl:12 +#: ihtml/themes/default/login.tpl:13 +msgid "Please use your username and password to log in" +msgstr "" +"Чтобы войти в систему
введите свои имя пользователя и пароль." + +#: ihtml/themes/altlinux/login.tpl:24 ihtml/themes/altlinux/login.tpl:28 +#: ihtml/themes/classic/login.tpl:23 ihtml/themes/classic/login.tpl:27 +#: ihtml/themes/default/login.tpl:24 ihtml/themes/default/login.tpl:28 +msgid "Username" +msgstr "Имя пользователя" + +#: ihtml/themes/altlinux/login.tpl:42 ihtml/themes/altlinux/login.tpl:45 +#: ihtml/themes/classic/login.tpl:41 ihtml/themes/classic/login.tpl:44 +#: ihtml/themes/default/login.tpl:42 ihtml/themes/default/login.tpl:45 +msgid "Directory" +msgstr "Каталог" + +#: ihtml/themes/altlinux/login.tpl:53 +#: ihtml/themes/altlinux/setup_finish.tpl:24 ihtml/themes/classic/login.tpl:52 +#: ihtml/themes/default/login.tpl:53 ihtml/themes/default/setup_finish.tpl:28 +msgid "Sign in" +msgstr "Войти" + +#: ihtml/themes/altlinux/login.tpl:54 ihtml/themes/classic/login.tpl:53 +#: ihtml/themes/default/login.tpl:54 +msgid "Click here to log in" +msgstr "Нажмите на эту кнопку, чтобы войти в систему" + +#: ihtml/themes/altlinux/setup_introduction.tpl:1 +#: ihtml/themes/default/setup_introduction.tpl:1 +msgid "Welcome to the GOsa setup!" +msgstr "Добро пожаловать в раздел настройки GOsa!" + +#: ihtml/themes/altlinux/setup_introduction.tpl:4 +#: ihtml/themes/default/setup_introduction.tpl:4 +msgid "" +"It looks like you're calling GOsa for the first time - no configuration was " +"found. This setup like script will try to aid you in creating a working " +"configuration by performing three major steps: first we'll check the PHP " +"installation for required modules, than we're going to check for optional/" +"needed programms and after you've provided basic informations for your LDAP " +"connectivity, we're going to check your LDAP setup." +msgstr "" +"Судя по всему, вы запустили GOsa впервые: файл настройки не найден. Этот " +"сценарий поможет вам создать рабочую конфигурацию. Настройка делится на три " +"основные стадии: сначала проверим, установлены ли необходимые модули PHP, " +"затем - установлены ли дополнительные/необходимые программы, а потом вы " +"укажете параметры работы с LDAP-сервером, и мы проверим его настройку." + +#: ihtml/themes/altlinux/framework.tpl:14 +#: ihtml/themes/classic/framework.tpl:13 ihtml/themes/default/framework.tpl:14 +msgid "Main" +msgstr "Начало" + +#: ihtml/themes/altlinux/framework.tpl:19 +#: ihtml/themes/classic/framework.tpl:15 ihtml/themes/default/framework.tpl:19 +msgid "Help" +msgstr "Справка" + +#: ihtml/themes/altlinux/framework.tpl:24 +#: ihtml/themes/classic/framework.tpl:17 ihtml/themes/default/framework.tpl:24 +msgid "Sign out" +msgstr "Выход" + +#: ihtml/themes/altlinux/framework.tpl:32 +#: ihtml/themes/classic/framework.tpl:22 ihtml/themes/default/framework.tpl:32 +msgid "Signed in:" +msgstr "Пользователь:" + +#: ihtml/themes/altlinux/setup_step2.tpl:1 +#: ihtml/themes/altlinux/setup_step3.tpl:1 +#: ihtml/themes/altlinux/setup_step4.tpl:1 +#: ihtml/themes/default/setup_step2.tpl:1 +#: ihtml/themes/default/setup_step3.tpl:1 +#: ihtml/themes/default/setup_step4.tpl:1 +msgid "Setup continued..." +msgstr "Продолжение настройки..." + +#: ihtml/themes/altlinux/setup_step2.tpl:4 +#: ihtml/themes/default/setup_step2.tpl:4 +msgid "" +"Step two looks for a set of helper programms and checks if they have the " +"correct minimum version." +msgstr "" +"На втором шаге происходит поиск вспомогательных программ и проверка " +"допустимости их версии." + +#: ihtml/themes/altlinux/setup_step2.tpl:11 +#: ihtml/themes/default/setup_step2.tpl:11 +msgid "" +"We've inspected the webserver side now. Your setup seems to fit GOsa's " +"needs. Lets go for the GOsa configuration part now..." +msgstr "" +"Ваш веб-сервер проверен. Его параметры подходят для работы с GOsa. Перейдите " +"к настройке GOsa." + +#: ihtml/themes/altlinux/islocked.tpl:2 ihtml/themes/classic/islocked.tpl:2 +#: ihtml/themes/default/islocked.tpl:2 +msgid "Locking conflict detected" +msgstr "Конфликт блокировок" + +#: ihtml/themes/altlinux/islocked.tpl:9 ihtml/themes/default/islocked.tpl:9 +msgid "" +"If this lock detection is false, the other person has obviously closed the " +"webbrowser during the edit operation. You may delete the lockfile in this " +"case by pressing the Remove button." +msgstr "" +"Если результат этой проверки блокировки - ложь, очевидно, другой человек " +"закрыл браузер во время редактирования данных. Вы можете удалить файл " +"блокировки, нажав на кнопку Удалить." + +#: ihtml/themes/altlinux/setup_step3.tpl:4 +#: ihtml/themes/default/setup_step3.tpl:4 +msgid "" +"Now we're going include your LDAP server and create an initial " +"configuration. After you've entered the server URI below, a quick check is " +"performed if required LDAP schemas are in place. Samba versions are " +"autodetected by the installed objectclasses. Details on how your LDAP tree " +"is organized will be asked later on." +msgstr "" +"Сейчас произойдет настройка вашего LDAP-сервера. После того, как вы введете " +"адрес сервера ниже, будет выполнена быстрая проверка необходимых схем LDAP. " +"Samba-версии определяются автоматически по установленным классам объектов. " +"Подробности об организации вашего дерева LDAP понадобятся позже." + +#: ihtml/themes/altlinux/setup_step3.tpl:7 +#: ihtml/themes/default/setup_step3.tpl:7 +msgid "Please enter the server URI" +msgstr "Введите адрес сервера" + +#: ihtml/themes/altlinux/setup_step4.tpl:4 +#: ihtml/themes/default/setup_step4.tpl:3 +msgid "Enter a description for the location you're configuring here" +msgstr "Введите описание владельца каталога" + +#: ihtml/themes/altlinux/setup_step4.tpl:8 +#: ihtml/themes/default/setup_step4.tpl:7 +msgid "Location name" +msgstr "Местоположение" + +#: ihtml/themes/altlinux/setup_step4.tpl:14 +#: ihtml/themes/default/setup_step4.tpl:13 +msgid "" +"Finally, you need to specify parameters to access the LDAP server. GOsa " +"always acts as admin and manages access rights internally. This is a " +"workaround till OpenLDAP's in directory ACI's are fully implemented. For " +"this to work, we need the admin DN and the corresponding password." +msgstr "" +"Сейчас вам нужно указать параметры доступа к LDAP-серверу. GOsa всегда " +"выступает в роли администратора и управляет правами доступа самостоятельно. " +"Это временное решение, пока в OpenLDAP не будут реализованы полностью " +"средства контроля доступа (ACI) внутри каталогов. Чтобы это решение " +"работало, укажите DN (уникальное имя) администратора и соответствующий " +"пароль." + +#: ihtml/themes/altlinux/setup_step4.tpl:19 +#: ihtml/themes/default/setup_step4.tpl:18 +msgid "Admin DN" +msgstr "DN администратора" + +#: ihtml/themes/altlinux/setup_step4.tpl:23 +#: ihtml/themes/default/setup_step4.tpl:22 +msgid "Admin password" +msgstr "Пароль администратора" + +#: ihtml/themes/altlinux/setup_step4.tpl:29 +#: ihtml/themes/default/setup_step4.tpl:28 +msgid "" +"Some basic LDAP parameters are tunable and affect the locations where GOsa " +"saves people and groups, including the way accounts get created. Check the " +"values below if the fit your needs." +msgstr "" +"Некоторые основные параметры LDAP изменяемы и влияют на расположение " +"сохраняемой информации о пользователях и группах, а также на способ создания " +"учетных записей. Проверьте, подходят ли вам значения, указанные ниже." + +#: ihtml/themes/altlinux/setup_step4.tpl:34 +#: ihtml/themes/default/setup_step4.tpl:33 +msgid "People storage ou" +msgstr "Структурная единица (OU) пользователей" + +#: ihtml/themes/altlinux/setup_step4.tpl:38 +#: ihtml/themes/default/setup_step4.tpl:37 +msgid "People dn attribute" +msgstr "Атрибут DN пользователей" + +#: ihtml/themes/altlinux/setup_step4.tpl:46 +#: ihtml/themes/default/setup_step4.tpl:45 +msgid "Group storage ou" +msgstr "OU групп" + +#: ihtml/themes/altlinux/setup_step4.tpl:50 +#: ihtml/themes/default/setup_step4.tpl:49 +msgid "ID base for users/groups" +msgstr "База идентификаторов для пользователей/групп" + +#: ihtml/themes/altlinux/setup_step4.tpl:56 +#: ihtml/themes/default/setup_step4.tpl:74 +msgid "Check" +msgstr "Проверить" + +#: ihtml/themes/altlinux/setup_finish.tpl:1 +#: ihtml/themes/default/setup_finish.tpl:1 +msgid "Setup finished" +msgstr "Настройка завершена" + +#: ihtml/themes/altlinux/setup_finish.tpl:4 +#: ihtml/themes/default/setup_finish.tpl:8 +msgid "" +"GOsa setup has collected all data needed to create an initial configuration " +"file. Save the the link below as your gosa.conf and place that file in /etc/" +"gosa. Change it as needed." +msgstr "" +"Программа установки GOsa собрала всю необходимую информацию необходимую для " +"создания конфигурационного файла. Сохраните файл по этой ссылке как /etc/" +"gosa/gosa/conf При необходимости, внесите свои изменения." + +#: ihtml/themes/altlinux/setup_finish.tpl:12 +#: ihtml/themes/default/setup_finish.tpl:16 +msgid "" +"After placing the file under /etc/gosa, place make sure that the webserver " +"user is able to read gosa.conf, while other users shouldn't. You may want to " +"execute these commands to achieve this requirement:" +msgstr "" +"Поместив файл gosa.conf в каталог /etc/gosa, убедитесь, что только " +"пользователь веб-сервера может его читать. Для этого вам, возможно, " +"понадобится выполнить следующие команды:" + +#: ihtml/themes/altlinux/setup_finish.tpl:22 +#: ihtml/themes/default/setup_finish.tpl:26 +msgid "Retry" +msgstr "Повторить" + +#: ihtml/themes/classic/islocked.tpl:9 +msgid "" +"If this is lock detection is false, the other person has obviously closed " +"the webbrowser during the edit operation. You may delete the lockfile in " +"this case by pressing the Remove button." +msgstr "" +"Если результат этой проверки блокировки - ложь, очевидно, другой человек " +"закрыл браузер во время редактирования данных. Вы можете удалить оставшийся " +"файл блокировки, нажав на кнопку Удалить." + +#: ihtml/themes/default/setup_step4.tpl:55 +msgid "Some parameters about Referral (optionnal)." +msgstr "" + +#: ihtml/themes/default/setup_step4.tpl:60 +msgid "Referral URL" +msgstr "" + +#: ihtml/themes/default/setup_step4.tpl:64 +msgid "Referral Admin" +msgstr "" + +#: ihtml/themes/default/setup_step4.tpl:68 +#, fuzzy +msgid "Referral Password" +msgstr "Подтверждение" + +#: ihtml/themes/default/setup_finish.tpl:3 +#, fuzzy +msgid "Schema Configuration" +msgstr "Системная информация" + +#: ihtml/themes/default/setup_finish.tpl:6 +#, fuzzy +msgid "Configuration File" +msgstr "Настроить" + +#, fuzzy +#~ msgid "" +#~ "The LDIF export/import plugin provides methods to download/upload a " +#~ "complete snapshot of the running LDAP directory as ldif. You may save " +#~ "these files for backup purpose or when initializing a new server." +#~ msgstr "" +#~ "Модуль экспорта в LDIF позволяет получать полный образ текущего каталога " +#~ "LDAPв формате ldif. Эти образы можно сохранять как резервные копии или " +#~ "использовать при инициализации нового сервера." + +#~ msgid "Can't import an empty File" +#~ msgstr "Невозможно импортиовать пустой файл" + +#~ msgid "Cant open file on server." +#~ msgstr "Не могу открыть файл на сервере." + +#~ msgid "Overwrite" +#~ msgstr "Перезаписать" diff --git a/plugins/addons/addressbook/address_edit.tpl b/plugins/addons/addressbook/address_edit.tpl new file mode 100644 index 000000000..86daf058c --- /dev/null +++ b/plugins/addons/addressbook/address_edit.tpl @@ -0,0 +1,114 @@ + + + + + + + + +
{$storage_info} + +X
+ + + + + + + + + + + + +
+

 {t}Personal{/t}

+ + + + + + + + + + +
{t}Name{/t}{$must}, {t}Given name{/t}{$must}, +
{t}Initials{/t}
{t}Personal title{/t}
+ +
+

 {t}Private{/t}

+ + + + + + + + + + + + + + + +
{t}Address{/t}

{t}Phone{/t}
{t}Mobile{/t}
{t}Email{/t}
+ +
+

 {t}Organizational{/t}

+ + + + + + + +
+ + + + + + + + + + + + + + + + + +
{t}Company{/t}
{t}Department{/t}
{t}City{/t}
{t}Postal code{/t}
{t}Country{/t}
+
+ + + + + + + + + + + + + + +
{t}Address{/t}

{t}Phone{/t}
{t}FAX{/t}
{t}Pager{/t}
+
+ +
+ +

+ + +

+ +
+ diff --git a/plugins/addons/addressbook/address_info.tpl b/plugins/addons/addressbook/address_info.tpl new file mode 100644 index 000000000..b83990baa --- /dev/null +++ b/plugins/addons/addressbook/address_info.tpl @@ -0,0 +1,104 @@ + + + + + + + + +
{$storage_info}X
+ + + + + + + + + + + + +
+

{t}Personal{/t}

+ + + + + + + + + + + +
{t}Name{/t}{$info_sn}, {$info_givenName}
{t}Initials{/t}{$info_initials}
{t}Personal title{/t}{$info_title}
+ +
+

{t}Private{/t}

+ + + + + + + + + + + + + + + +
{t}Address{/t}

{$info_homePostalAddress}
{t}Phone{/t}{$info_homePhone}
{t}Mobile{/t}{$info_mobile}
{t}Email{/t}{$info_mail}
+ +
+

{t}Organizational{/t}

+ + + + + + + +
+ + + + + + + + + + + + + + + + + +
{t}Company{/t}{$info_o}
{t}Department{/t}{$info_ou}
{t}City{/t}{$info_l}
{t}Postal code{/t}{$info_postalCode}
{t}Country{/t}{$info_st}
+
+ + + + + + + + + + + + + + +
{t}Address{/t}

{$info_postalAddress}
{t}Phone{/t}{$info_telephoneNumber}
{t}FAX{/t}{$info_facsimileTelephoneNumber}
{t}Pager{/t}{$info_pager}
+
+ +
+ +
diff --git a/plugins/addons/addressbook/class_addressbook.inc b/plugins/addons/addressbook/class_addressbook.inc new file mode 100644 index 000000000..e5e077eec --- /dev/null +++ b/plugins/addons/addressbook/class_addressbook.inc @@ -0,0 +1,600 @@ +config= $config; + + #FIXME: ACL is set to default for testing + $this->acl= "#all#"; + + /* Get global filter config */ + if (!is_global("phonefilter")){ + $ui= get_userinfo(); + $base= get_base_from_people($ui->dn); + $phonefilter= array("search_base" => $base, + "organizational" => "checked", + "global" => "checked", + "search_for" => "*", + "object_type" => "*"); + register_global("phonefilter", $phonefilter); + } + } + + function execute() + { + $smarty= get_smarty(); + + /* Save formular information */ + $phonefilter= get_global("phonefilter"); + foreach( array("search_for", "search_base", "object_type") as $type){ + if (isset($_POST[$type])){ + $phonefilter[$type]= $_POST[$type]; + } + $this->$type= $phonefilter[$type]; + } + if (isset($_POST['search_base'])){ + foreach( array("organizational", "global") as $type){ + if (isset($_POST[$type])){ + $phonefilter[$type]= "checked"; + } else { + $phonefilter[$type]= ""; + } + } + } + + /* Search string */ + $s= $phonefilter['search_for']; + if ($s == "") { + $s= "*"; + } + if (isset($_GET['search'])){ + $s= validate(mb_substr($_GET['search'], 0, 1, "UTF8"))."*"; + if ($s == "**"){ + $s= "*"; + } + $this->search_for= $s; + $phonefilter['search_for']= $s; + } + register_global("phonefilter", $phonefilter); + + /* Perform actions with CTI hook */ + if (isset($_GET['target']) + && isset($_GET['dial']) + && isset($this->config->current['CTIHOOK'])){ + + $dialmode= $_GET['dial']; + if ($dialmode == "telephoneNumber" || + $dialmode == "mobile" || + $dialmode == "homePhone"){ + + /* Get target */ + $ldap= $this->config->get_ldap_link(); + $ldap->cat(base64_decode($_GET['target'])); + $attrs= $ldap->fetch(); + if (isset($attrs["$dialmode"])){ + $target= $attrs[$dialmode][0]; + } else { + $target= ""; + } + + /* Get source */ + $ui= get_userinfo(); + $ldap->cat($ui->dn); + $attrs= $ldap->fetch(); + if (isset($attrs["telephoneNumber"])){ + $source= $attrs['telephoneNumber'][0]; + } else { + $source= ""; + } + + /* Save to session */ + $_SESSION['source']= $source; + $_SESSION['target']= $target; + + /* Perform call */ + if ($target != "" && $source != ""){ + $smarty->assign("phone_image", get_template_path('images/phone.png')); + $smarty->assign("dial_info", sprintf(_("Dial from %s to %s now?"), "".$source."", "".$target."")); + return($smarty->fetch(get_template_path('dial.tpl', TRUE))); + return; + } else { + print_red (_("You have no personal phone number set. Please change that in order to perform direct dials.")); + } + } + + } + + /* Finally dial */ + if (isset($_POST['dial']) && isset($_SESSION['source']) && isset($_SESSION['target'])){ + exec ($this->config->current['CTIHOOK']." '".$_SESSION['source']."' '".$_SESSION['target']."'", $dummy, $retval); + unset($_SESSION['source']); + unset($_SESSION['target']); + } + + /* Delete entry? */ + if (isset($_POST['delete_entry_confirm'])){ + + /* Some nice guy may send this as POST, so we've to check + for the permissions again. */ + if (chkacl($this->acl, "delete") == ""){ + + /* Delete request is permitted, perform LDAP action */ + $ldap= $this->config->get_ldap_link(); + $ldap->rmdir ($this->dn); + gosa_log ("Address book object'".$this->dn."' has been removed"); + + } else { + + /* Normally this shouldn't be reached, send some extra + logs to notify the administrator */ + print_red (_("You are not allowed to delete this entry!")); + gosa_log ("Warning: '".$this->ui->uid."' tried to trick address book deletion."); + } + + /* Remove lock file after successfull deletion */ + del_lock ($this->dn); + + /* Clean up */ + if (isset($_SESSION['saved_start'])){ + $_GET['start']= $_SESSION['saved_start']; + } + unset($_SESSION['show_info']); + unset($_SESSION['saved_start']); + } + + /* Delete entry? */ + if (isset($_POST['delete_cancel'])){ + del_lock ($this->dn); + } + + /* Save address entry? */ + if (isset($_POST['save'])){ + $this->save_object(); + $this->storage_base= $_POST['storage_base']; + + /* Perform checks */ + $message= $this->check (); + + /* No errors, save object */ + if (count ($message) == 0){ + $this->save(); + gosa_log ("Addressbook object '".$this->dn."' has been saved"); + + /* Clean up */ + if (isset($_SESSION['saved_start'])){ + $_GET['start']= $_SESSION['saved_start']; + } + $_SESSION['show_info']= $this->dn; + unset($_SESSION['saved_start']); + } else { + /* Errors found, show message */ + show_errors ($message); + } + } + + /* Close info window */ + if (isset($_GET['close']) || isset($_POST['cancel'])){ + if (isset($_SESSION['saved_start'])){ + $_GET['start']= $_SESSION['saved_start']; + } + unset($_SESSION['show_info']); + unset($_SESSION['saved_start']); + } + + /* Start address book edit mode? */ + if (isset($_GET['global'])){ + if (!isset($_SESSION['saved_start']) && isset($_GET['start'])){ + $_SESSION['saved_start']= $_GET['start']; + } + switch ($_GET['global']){ + case "add": + $this->dn= "new"; + $this->orig_cn= ""; + + /* Clean values */ + foreach ($this->attributes as $name){ + $this->$name= ""; + } + $this->storage_base= $this->config->current["BASE"]; + break; + case "edit": + /* Clean values */ + foreach ($this->attributes as $name){ + $this->$name= ""; + } + $this->dn= $_SESSION['show_info']; + $this->load(); + $this->orig_cn= $this->cn; + break; + case "remove": + $this->dn= $_SESSION['show_info']; + + /* Load permissions for selected 'dn' and check if + we're allowed to remove this 'dn' */ + $ui= get_userinfo(); + $dn= preg_replace("/,dc=addressbook,/", "", $this->dn); + $acl= get_permissions ($dn, $ui->subtreeACL); + $this->acl= get_module_permission($acl, "global-addressbook", $dn); + if (chkacl($this->acl, "delete") == ""){ + + /* Check locking, save current plugin in 'back_plugin', so + the dialog knows where to return. */ + if (($user= get_lock($this->dn)) != ""){ + return(gen_locked_message ($user, $this->dn)); + } + + /* Lock the current entry, so nobody will edit it during deletion */ + add_lock ($this->dn, $ui->dn); + $smarty->assign("info", sprintf(_("You're about to delete the entry %s."), $this->dn)); + return($smarty->fetch(get_template_path('remove.tpl', TRUE))); + } else { + + /* Obviously the user isn't allowed to delete. Show message and + clean session. */ + print_red (_("You are not allowed to delete this entry!")); + } + } + $_SESSION['show_info']= "ADD"; + } + + /* Open info window */ + if (isset($_GET['show'])){ + if (!isset($_SESSION['saved_start'])){ + $_SESSION['saved_start']= $_GET['start']; + } + $_SESSION['show_info']= base64_decode($_GET['show']); + } + + /* Get ldap link / build filter */ + $ldap= $this->config->get_ldap_link(); + $this->telephone_list= array (); + + /* Assemble bases */ + $bases= array(); + $filter= ""; + if ($phonefilter['global'] == "checked"){ + $bases[]= preg_replace("/".$this->config->current['BASE']."/", "dc=addressbook,".$this->config->current['BASE'], $this->search_base); + } else { + $filter= '(objectClass=gosaAccount)'; + } + if ($phonefilter['organizational'] == "checked"){ + $bases[]= $this->search_base; + } + foreach ($bases as $base){ + $ldap->cd ($base); + if ($phonefilter['object_type'] == '*'){ + $ldap->search ("(&(objectClass=person)$filter(!(objectClass=gosaUserTemplate))". + "(|(uid=$s)(homePhone=$s)(telephoneNumber=$s)". + "(facsimileTelephoneNumber=$s)(mobile=$s)(givenName=$s)(sn=$s)))", array("sn", "givenName", "telephoneNumber", "facsimileTelephoneNumber", "mobile", "homePhone", "uid", "mail", "cn")); + } else { + $ldap->search ("(&$filter(!(objectClass=gosaUserTemplate))". + "(".$phonefilter['object_type']."=$s))", array("sn", "givenName", "telephoneNumber", "facsimileTelephoneNumber", "mobile", "homePhone", "uid", "mail", "cn")); + } + + /* Build current list, error reporting is off, because many of the + objects may not be defined after LDAP queries. Asking for presence + first is too much overhead. */ + error_reporting(0); + + /* Walk through LDAP results */ + while ($attrs= $ldap->fetch()){ + + /* Only show lines that have set any mail or phone informations */ + if (isset($attrs['telephoneNumber'][0]) || + isset($attrs['facsimileTelephoneNumber'][0]) || + isset($attrs['mobile'][0]) || + isset($attrs['homePhone'][0]) || + isset($attrs['mail'][0])){ + + $this->telephone_list[$attrs['sn'][0].$attrs['dn']]= + "
".$attrs['sn'][0].", ".$attrs['givenName'][0]."". + "".$attrs['telephoneNumber'][0]."". + "".$attrs['facsimileTelephoneNumber'][0]."". + "".$attrs['mobile'][0]."". + "".$attrs['homePhone'][0]."". + "". + ""; + + if (isset($attrs['mail'])){ + $dest= sprintf(_("Send mail to %s"), $attrs['mail'][0]); + $this->telephone_list[$attrs['sn'][0].$attrs['dn']].= + "\">". + ""; + } + $this->telephone_list[$attrs['sn'][0].$attrs['dn']].= ""; + } + } + error_reporting(E_ALL); + } + + /* Sort up list */ + ksort ($this->telephone_list); + reset ($this->telephone_list); + + /* Fill template variables */ + $smarty->assign("search_for", $this->search_for); + $smarty->assign("object_type", $this->object_type); + $smarty->assign("deplist", $this->config->idepartments); + $smarty->assign("depselect", $this->search_base); + $smarty->assign("global", $phonefilter['global']); + $smarty->assign("organizational", $phonefilter['organizational']); + $smarty->assign("search_image", get_template_path('images/search.png')); + $smarty->assign("tree_image", get_template_path('images/tree.png')); + $smarty->assign("infoimage", get_template_path('images/info.png')); + $smarty->assign("actionimage", get_template_path('images/action.png')); + $smarty->assign("launchimage", get_template_path('images/launch.png')); + + /* Generate alphabet */ + $alphabet= generate_alphabet(); + + /* Build list output */ + $output= ""; + $mod= 0; + if (isset($_SESSION['show_info'])){ + $range= 4; + $smarty->assign("show_info", "1"); + $smarty->assign("url", "main.php?plug=".validate($_GET['plug'])."&close=1"); + + switch ($_SESSION['show_info']){ + + case "ADD": + $smarty->assign ('storage_base', $this->storage_base); + $smarty->assign ('address_info', + get_template_path('address_edit.tpl', TRUE)); + break; + + default: + $smarty->assign ('address_info', + get_template_path('address_info.tpl', TRUE)); + break; + } + + /* Fill variables from LDAP */ + # FIXME: Missing ACL support for addressbook yet + if ($_SESSION['show_info'] != "ADD"){ + $ldap->cat($_SESSION['show_info']); + $info= $ldap->fetch(); + } + foreach ($this->attributes as $name){ + if ($_SESSION['show_info'] != "ADD" && isset($info["$name"][0])){ + error_reporting(0); + /* Special treatment for phone attributes */ + if ($name == "mobile" || + $name == "homePhone" || + $name == "telephoneNumber"){ + $smarty->assign("info_$name", + "".$info["$name"][0].""); + } else { + $smarty->assign("info_$name", preg_replace("/\n/", "
", $info["$name"][0])); + } + error_reporting(E_ALL); + } elseif ($_SESSION['show_info'] == "ADD") { + $smarty->assign("info_$name", $this->$name); + } else { + $smarty->assign("info_$name", "-"); + } + } + if (preg_match("/,dc=addressbook,/", $_SESSION['show_info'])){ + $storage= _("global addressbook"); + } else { + $storage= _("organizations user database"); + $smarty->assign("internal", 1); + } + if ($_SESSION['show_info'] != "ADD"){ + $smarty->assign("storage_info", sprintf(_("Contact stored in %s"), $storage)); + } else { + $smarty->assign("storage_info", _("Creating new entry in")); + } + } else { + $range= 20; + $smarty->assign("internal", 1); + } + if (isset($_GET['start'])){ + $this->start= validate($_GET['start']); + } + foreach ($this->telephone_list as $val){ + if ($mod < $this->start) { + $mod++; + continue; + } + if ($mod >= ($this->start + $range)){ + $mod++; + break; + } + if ( ($mod++) & 1){ + $col= "style=\"background-color: #ECECEC;\""; + } else { + $col= "style=\"background-color: #F5F5F5;\""; + } + $output.= "$val"; + } + $smarty->assign("search_result", $output); + $smarty->assign("apply", apply_filter()); + $smarty->assign("alphabet", $alphabet); + $smarty->assign("range_selector", range_selector(count($this->telephone_list), $this->start, $range)); + $tmp= array("*" => _("All"), "sn" => _("Name"), "givenName" => _("Given name"), + "telephoneNumber" => _("Work phone"), "mobile" => _("Cell phone"), + "homePhone" => _("Home phone"), "uid" => _("User ID")); + natsort($tmp); + $smarty->assign("objlist", $tmp); + + /* Show main page */ + $smarty->assign ('personal_image', get_template_path('images/addr_personal.png')); + $smarty->assign ('home_image', get_template_path('images/addr_home.png')); + $smarty->assign ('company_image', get_template_path('images/addr_company.png')); + $smarty->assign ('add_image', get_template_path('images/editpaste.png')); + $smarty->assign ('edit_image', get_template_path('images/edit.png')); + $smarty->assign ('delete_image', get_template_path('images/editdelete.png')); + return($smarty->fetch(get_template_path('contents.tpl', TRUE))); + } + + + function check() + { + $message= array(); + + /* must: sn, givenName */ + if ($this->sn == ""){ + $message[]= _("The required field 'Name' is not set."); + return ($message); + } + if ($this->givenName == ""){ + $message[]= _("The required field 'Given name' is not set."); + return ($message); + } + + /* Check for valid name definition */ + if (preg_match ("/[\\\\]/", $this->sn)){ + $message[]= _("The field 'Name' contains invalid characters."); + } + if (preg_match ("/[\\\\]/", $this->givenName)){ + $message[]= _("The field 'Given name' contains invalid characters."); + } + + /* Check phone numbers */ + if (!is_phone_nr($this->homePhone)){ + $message[]= _("The field 'Phone' contains an invalid phone number."); + } + if (!is_phone_nr($this->telephoneNumber)){ + $message[]= _("The field 'Phone' contains an invalid phone number."); + } + if (!is_phone_nr($this->facsimileTelephoneNumber)){ + $message[]= _("The field 'Fax' contains an invalid phone number."); + } + if (!is_phone_nr($this->mobile)){ + $message[]= _("The field 'Mobile' contains an invalid phone number."); + } + if (!is_phone_nr($this->pager)){ + $message[]= _("The field 'Pager' contains an invalid phone number."); + } + + /* Check for reserved characers */ + if (preg_match ('/[,+"<>;]/', $this->givenName)){ + $message[]= _("The field 'Given name' contains invalid characters."); + } + if (preg_match ('/[,+"<>;]/', $this->sn)){ + $message[]= _("The field 'Name' contains invalid characters."); + } + + /* Check mail */ + if (!is_email($this->mail)){ + $message[]= _("Please enter a valid email address in 'Primary address' field."); + } + + /* Assemble cn/dn */ + $this->cn= $this->givenName." ".$this->sn; + if ($this->orig_cn != $this->cn || $this->storage_base != $this->orig_storage_base){ + $this->new_dn= $this->create_unique_dn("cn", preg_replace("/,*".$this->config->current['BASE']."$/", "", $this->storage_base).",dc=addressbook,".$this->config->current['BASE']); + if ($this->new_dn == "none"){ + $message[]= _("Cannot create a unique DN for your entry. Please fill more formular fields."); + return ($message); + } + } else { + $this->new_dn= $this->dn; + } + + $ui= get_userinfo(); + $dn= preg_replace("/,dc=addressbook,/", "", $this->new_dn); + $acl= get_permissions ($dn, $ui->subtreeACL); + $acl= get_module_permission($acl, "global-addressbook", $this->dn); + if ($_SESSION['show_info'] == "ADD" && chkacl($acl, "create") != ""){ + $message[]= _("You have no permissions to create or modify a global address book entry."); + } + + return ($message); + } + + + function load() + { + /* Load base attributes */ + plugin::plugin ($this->config, $this->dn); + $this->storage_base= preg_replace('/^[^,]+,/', '', preg_replace('/dc=addressbook,/', '', $this->dn)); + } + + + function save() + { + /* First use parents methods to do some basic fillup in $this->attrs */ + plugin::save (); + + $this->attrs['cn']= $this->cn; + $this->attrs['displayName']= $this->givenName." ".$this->sn; + + /* Move entry if it got another name... */ + if ($this->dn != "new" && $this->dn != $this->new_dn){ + $this->move($this->dn, $this->new_dn); + } + $this->dn= $this->new_dn; + + /* Save data. Using 'modify' implies that the entry is already present, use 'add' for + new entries. So do a check first... */ + $ldap= $this->config->get_ldap_link(); + $ldap->cat ($this->dn); + if ($ldap->fetch()){ + $mode= "modify"; + } else { + $mode= "add"; + $ldap->cd($this->config->current['BASE']); + $ldap->create_missing_trees(preg_replace('/^[^,]+,/', '', $this->dn)); + } + + /* Finally write data with selected 'mode' */ + $ldap->cd ($this->dn); + $ldap->$mode ($this->attrs); + if (show_ldap_error($ldap->get_error())){ + return (1); + } + } + +} + +?> diff --git a/plugins/addons/addressbook/contents.tpl b/plugins/addons/addressbook/contents.tpl new file mode 100644 index 000000000..0933857e8 --- /dev/null +++ b/plugins/addons/addressbook/contents.tpl @@ -0,0 +1,99 @@ + + + + + +
+ + + + + + + + + + + + + + {$search_result} +
{t}Name{/t}{t}Phone{/t}{t}Fax{/t}{t}Mobile{/t}{t}Private{/t}{t}Contact{/t}
+ + + + + +
{$range_selector}
+ + {if $show_info eq 1} + {include file=$address_info} + {/if} + +
+
+

[i]{t}Information{/t}

+
+
+

+ {t}The telephone list plugin provides list and search facilities for the people in your site. You may want to specify the asterisk [*] like in 'Go*us' to find 'Gonicus'. Use the filters below to narrow down your search.{/t} +

+
+
+
+

[a]{t}Actions{/t}

+
+
+

+   + {t}Add entry{/t}
+ {if $internal eq 0} +   + {t}Edit entry{/t}
+   + {t}Remove entry{/t}
+ {/if} +

+
+
+
+

[F]{t}Filters{/t}

+
+
+

+ + {$alphabet} +
+

+

+ {t}Show organizational entries{/t}
+ {t}Show addressbook entries{/t}
+

+

+ +
 {t}Display results for department{/t}
+

+

+ +
 {t}Search for{/t}
+

+

+ +
 {t}Match object{/t} + +
+

+ {$apply} +
+
+ + + diff --git a/plugins/addons/addressbook/dial.tpl b/plugins/addons/addressbook/dial.tpl new file mode 100644 index 000000000..b8196f61e --- /dev/null +++ b/plugins/addons/addressbook/dial.tpl @@ -0,0 +1,20 @@ + + + + + + + + + +
{t}Dial connection...{/t}X
+
 
+ {$dial_info} +
 
+   + +
+ + + + diff --git a/plugins/addons/addressbook/main.inc b/plugins/addons/addressbook/main.inc new file mode 100644 index 000000000..0bb04e120 --- /dev/null +++ b/plugins/addons/addressbook/main.inc @@ -0,0 +1,38 @@ +execute (); + $display.= "\n"; + + /* Store changes in session */ + $_SESSION['addressbook']= $addressbook; +} +?> diff --git a/plugins/addons/addressbook/remove.tpl b/plugins/addons/addressbook/remove.tpl new file mode 100644 index 000000000..d5afdbaee --- /dev/null +++ b/plugins/addons/addressbook/remove.tpl @@ -0,0 +1,19 @@ +
+  {t}Warning{/t} +
+ +

+ {$info} + {t}This includes all addressbook data in this entry. Please double check if your really want to do this since there is no way for GOsa to get your data back.{/t} +

+ +

+ {t}So - if you're sure - press Delete to continue or Cancel to abort.{/t} +

+ +

+ +   + +

+ diff --git a/plugins/addons/ldapmanager/class_csvimport.inc b/plugins/addons/ldapmanager/class_csvimport.inc new file mode 100644 index 000000000..1c8ff3643 --- /dev/null +++ b/plugins/addons/ldapmanager/class_csvimport.inc @@ -0,0 +1,456 @@ +config= $config; + + $ui= get_userinfo(); + $acl= get_permissions ($config->current['BASE'], $ui->subtreeACL); + $acl= get_module_permission($acl, "all", $config->current['BASE']); + $this->access= $acl; + } + + function execute() + { + /* initiate smarty */ + $smarty= get_smarty(); + $smarty->assign("sorted",0); + $smarty->assign("fileup",0); + + /* Get the LDAP link, to generate the Export */ + $ldap = $this->config->get_ldap_link(); + + $arrtemplates = array(); + $tempvar =0; + + /* Array to fill in Formfields */ + $arrtemplates[$tempvar] = "None"; + if(!is_array($this->csvinfo)){ + $this->csvinfo=array(); + } + + /* Set Usertemplate information and get all Attribute from userclass */ + unset ($this->csvinfo['arrtemplates']); + unset ($this->csvinfo['arrtempls']); + + /* Generate Template Array, Attribute Array */ + if(!isset($this->csvinfo['arrtempls'])){ + + /* Generating attributes */ + $attrs = @get_class_vars("user"); + $this->csvinfo['attr'] = $attrs['attributes']; + + /* Attach the choise none to discard a csv col */ + $new = array(); + $new[0]="none"; + $new[1]="userPassword"; + for($c = 0; $c < count($this->csvinfo['attr']);$c++){ + $new[$c+2]=$this->csvinfo['attr'][$c]; + } + + $this->csvinfo['attr'] = $new; + + /* Search all Templates */ + $this->csvinfo['templates'] = $ldap->search("(objectClass=gosaUserTemplate)",array("*")); + + /* Array to handle selected Form fiels */ + $this->csvinfo['arrtempls'][$tempvar]['name'] = ""; + $this->csvinfo['arrtempls'][$tempvar]['dn'] = ""; + + $this->csvinfo['arrtemplates'][]="None"; + + while($temp = $ldap->fetch($this->csvinfo['templates'])){ + $tempvar ++; + $this->csvinfo['arrtemplates'][$tempvar] = $temp['sn'][0]." - ".$this->config->idepartments[preg_replace("/^[^,]+,".get_people_ou()."/", "", $temp['dn'])]; + $this->csvinfo['arrtempls'] [$tempvar]['name'] = $temp['sn'][0]; + $this->csvinfo['arrtempls'] [$tempvar]['dn'] = $temp['dn']; + } + } + + $arr_temp = array_flip($this->csvinfo['attr']); + $this->csvinfo['arr_selected']= array(0,0,$arr_temp['uid'],$arr_temp['sn'],$arr_temp['givenName'],$arr_temp['userPassword']); + + $smarty->assign("templates",$this->csvinfo['arrtemplates']); + $smarty->assign("attrs",$this->csvinfo['attr']); + + /* Check permissions for import */ + if ($this->access != '#all#'){ + print_red(_("You've no permission to do CSV imports.")); + return ($smarty->fetch (get_template_path('contentcsv.tpl', TRUE))); + } + + /* If the given dat from the csv File are sorted by the attributes */ + if(isset($_POST['sorted'])) { + + /* Template Handling */ + $smarty->assign("fileup",TRUE); + $smarty->assign("sorted",TRUE); + + for($i = 0 ; $i < $this->csvinfo['rows'];$i++){ + /* Preparing given Data */ + $this->csvinfo['sorteddata'][$i]=array(); + + /* Go through every col */ + for($a = 1; $a <= ($this->csvinfo['cols']+1); $a ++) { + /* Append a status col at last, to show possibly errors */ + if($a==($this->csvinfo['cols']+1)){ + $this->csvinfo['sorteddata'][$i]["status"]="-"; + } else { + $cc = ($i * ($this->csvinfo['cols']))+$a; + + /* If theres a Attribut given for this col */ + if(!empty($_POST[('row'.$a)])) { + $this->csvinfo['sorteddata'][$i][$this->csvinfo['attr'][$_POST[('row'.$a)]]]=$this->csvinfo['data'][($cc-1)]; + } + } + } + } + + /* aleast one entry */ + $rowcnt=0; + if(isset($this->csvinfo['sorteddata'])){ + $rowcnt ++; + + /* Set the col count */ + $tblcolcount= count ($this->csvinfo['cols']); + + /* entrie count */ + $tbl_entries= count ($this->csvinfo['count']); + + /* row count */ + $tbl_rows = $tbl_entries / $tblcolcount; + + /* No error occured */ + $failing = FALSE; + + /* For every row */ + for($i = 0; $i < $this->csvinfo['rows']; $i++){ + + /* Get elemenet */ + $dat = $this->csvinfo['sorteddata'][$i]; + + + /* If not all needed vars set .... */ + if( ( empty($dat['sn']))||( empty($dat['givenName']))||( empty($dat['uid']))|| + (!isset($dat['sn']))||(!isset($dat['givenName']))||(!isset($dat['uid']))){ + + /* Output Error */ + + print_red (_("Need 'sn','givenName' and 'uid' to create user")); + } else { + + /* Register usertab to trigger edit dialog */ + $this->usertab= new usertabs($this->config, $this->config->data['TABS']['USERTABS'], 'new'); + $keys = array_keys($dat); + + + /* Set all submitted vars */ + foreach($keys as $key) { + if($key != "status"){ + $this->usertab->$key = $dat[$key]; + } + } + + /* Initialize template */ + if($this->csvinfo['tplid']!=0){ + $this->usertab->adapt_from_template($this->csvinfo['arrtempls'][$this->csvinfo['tplid']]['dn']); + $this->usertab->save_object(); + } else { + + /* Reset vars */ + foreach($keys as $key) { + if($key != "status"){ + $this->usertab->by_object['user']->$key = $dat[$key]; + } + } + } + + // Setting user Password + if((isset($dat['userPassword']))&&(!empty($dat['userPassword']))) + $password = $dat['userPassword']; + else + { + $rand_str=""; + $feed = "0123456789abcdefghijklmnopqrstuvwxyz"; + for ($i=0; $i < 8; $i++) + { + $rand_str .= substr($feed, rand(0, strlen($feed)-1), 1); + } + $password = $rand_str; + } + + print_a($this->usertab); + + /* Insert in the LDAP tree */ + if(count($this->usertab->check())) { + show_errors($this->usertab->check()); + $this->csvinfo['sorteddata'][$i]['status']=""._("failed").""; + $failing = $i+1; + break; + } else { + $this->csvinfo['sorteddata'][$i]['status']=_("ok"); + $this->usertab->save(); + change_password($this->usertab->dn,$password); + } + } + } + + $pointsbefore = FALSE; + $pointsafter = FALSE; + + /* Get Attributs for Tableheadline */ + $this->csvinfo['colsstr'] = array(); + for($i =1; $i <= $this->csvinfo['cols']; $i++) { + if(!empty($_POST[('row'.$i)])){ + $this->csvinfo['colsstr'][$i] = $this->csvinfo['attr'][$_POST[('row'.$i)]]; + } + } + + /*Create array with data for the template */ + if($failing == FALSE){ + for($i =1; $i <= $this->csvinfo['shownrowscount']; $i++) { + foreach($this->csvinfo['sorteddata'][($i-1)] as $dat){ + $dataouts[]=$dat; + } + } + + if($this->csvinfo['rows']> $this->csvinfo['shownrowscount']){ + $pointsafter = TRUE; + } + } else { + $pointsbefore = TRUE; + $pointsafter = TRUE; + + $begin = $failing -3; + + if($begin <0) { + $begin =0; + $pointsbefore = FALSE; + } + + $end = $failing + 2; + + if($end > $this->csvinfo['rows']) { + $end = $this->csvinfo['rows']+1; + $pointsafter = FALSE; + } + $this->csvinfo['shownrowscount']=$end - $begin; + + if($this->csvinfo['shownrowscount']> $this->csvinfo['rows'])$this->csvinfo['shownrowscount']=$this->csvinfo['rows']; + + for($i =$begin; $i <= $end; $i++) { + foreach($this->csvinfo['sorteddata'][($i-1)] as $dat){ + $dataouts[]=$dat; + } + } + } + $tmparr2 = $this->csvinfo['colsstr']; + $tmparr2[]=_("status"); + + /* Error? */ + if ($failing){ + print_red(sprintf(_("An Error Occured while inserting entry %s - process aborted"), $failing)); + } + $smarty->assign("error",$failing); + + /* Set vars to smarty */ + $smarty->assign("cols",count($tmparr2)); + $smarty->assign("anz" ,$this->csvinfo['count']); + $smarty->assign("rows",$this->csvinfo['shownrowscount']); + + $smarty->assign("head",$tmparr2); + $smarty->assign("data",$dataouts); + + /* Set other vars */ + $smarty->assign("i",1); + $smarty->assign("ie",0); + $smarty->assign("tplid",$this->csvinfo['tplid']); + + $smarty->assign("pointsafter",$pointsafter); + $smarty->assign("pointsbefore",$pointsbefore); + } else { + /* Set Template ID */ + $tplid = $_POST['tplid']; + + + $smarty->assign("tpl",$arrtemplates[$tplid]); + print_red (_("Nothing to import !.")); + } + + /* If theres a File uploaded */ + } else { + /* Check if theres a file uploaded */ + if(!empty($_FILES['userfile']['name'])){ + if((!isset($_FILES['userfile']['name']))||(!isset($_POST['fileup']))) + { + print_red(_("There is no file uploaded.")); + $smarty->assign("LDIFError",TRUE); + } + elseif(!$_FILES['userfile']['size'] > 0 ) + { + print_red(_("The specified file is empty.")); + $smarty->assign("LDIFError",TRUE); + } + /* Is there a tmp file, which we can use ? */ + elseif(!file_exists($_FILES['userfile']['tmp_name'])) + { + print_red(_("There is no file uploaded.")); + $smarty->assign("LDIFError",TRUE); + } + elseif(!$handle = @fopen($_FILES['userfile']['tmp_name'],"r")) + { + print_red(_("There is no file uploaded.")); + $smarty->assign("LDIFError",TRUE); + } + else + { + $smarty->assign("fileup",TRUE); + $str = ""; + + /* Reading content */ + while(!feof($handle)) { + $str .= fread($handle,1024); + } + + $lines = split("\n",$str); + $anz = 0; + $rest = 0; + $data = array(); + + /* check colum count */ + foreach($lines as $line) { + /* continue if theres a comment */ + if(substr(trim($line),0,1)=="#"){ + continue; + } + + $line= str_replace ("\t","",$line); + $cells = split(",",$line ) ; + + if(count($cells)> $anz ){ + $anz = count($cells); + } + } + + /* At least one entry */ + if($anz >1) { + + /* Generate array with outpu info */ + foreach($lines as $line) { + $rest = 0; + $cnt = 0; + + /* dont use comments or empty lines */ + if((substr(trim($line),0,1)=="#")||(empty($line))){ + continue; + } + + /* replace \t to , */ + $line= str_replace ("\t" ,"" ,$line); + + /* get all elements */ + $cells = split(",",$line ) ; + + /* attach all elements to data array */ + foreach($cells as $cell) { + if(!empty($cell)) { + $cnt++; + $data[]=trim($cell); + } + } + + /* cell count less than anz, attach some empty fields */ + if(($cnt != $anz)&&(!empty($cnt))) { + $rest = $anz - $cnt; + for($i = 0 ; $i < $rest ; $i ++){ + $data[] = " "; + } + } + } + + unset($this->csvinfo['sorteddata']); + unset($this->csvinfo['colsstr']); + unset($this->csvinfo['sorteddata']); + + $this->csvinfo['cols'] = $anz; + $this->csvinfo['data'] = array(); + $this->csvinfo['data'] = $data; + $this->csvinfo['count'] = count($this->csvinfo['data']); + + if($this->csvinfo['count']> (6* $this->csvinfo['cols'])) { + /* only show 6 rows in ouptuttablei */ + $datouttemp = array_chunk($this->csvinfo['data'],(6* $this->csvinfo['cols'])); + $this->csvinfo['dataout']=$datouttemp[0]; + $this->csvinfo['shownrowscount'] = 6; + } else { + $this->csvinfo['shownrowscount'] = (count($this->csvinfo['data']))/$this->csvinfo['cols']; + $this->csvinfo['dataout']= $this->csvinfo['data']; + } + + $this->csvinfo['tplid'] = $_POST['template']; + $this->csvinfo['templatestr'] = $this->csvinfo['arrtemplates' ][$this->csvinfo['tplid']]; + $this->csvinfo['count'] = count($this->csvinfo['data']); + $this->csvinfo['rows'] = (count($this->csvinfo['data'])/$anz); + + /* Set Templateid */ + $smarty->assign("tplid",$this->csvinfo['tplid']); + + /* Set Template */ + $smarty->assign("tpl",$this->csvinfo['templatestr']); + + /* Temp var 1 */ + $smarty->assign("ia",1); + + /* Temp var 2 */ + $smarty->assign("i",0); + + /* Num rows */ + $smarty->assign("rows",$this->csvinfo['shownrowscount']); + + + for($i = 0 ; $i < $anz; $i ++) + $this->csvinfo['arr_selected'][]="0"; + + + $smarty->assign("selectedattrs",$this->csvinfo['arr_selected']); + + + /* Entrie count5 */ + $smarty->assign("anz",$this->csvinfo['cols']); + + /* Array with data */ + $smarty->assign("data",$this->csvinfo['dataout']); + + @fclose($handle); + } else { + $smarty->assign("tpl",$this->csvinfo['attr'][$_POST['template']]); + $smarty->assign("LDIFError",TRUE); + $smarty->assign("fileup",FALSE); + print_red(_("The selected file does not contain any CSV Data...")); + } + } + } + } + + /* Show main page */ + return ($smarty->fetch (get_template_path('contentcsv.tpl', TRUE))); + } +} + +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/plugins/addons/ldapmanager/class_export.inc b/plugins/addons/ldapmanager/class_export.inc new file mode 100644 index 000000000..ad9c0754d --- /dev/null +++ b/plugins/addons/ldapmanager/class_export.inc @@ -0,0 +1,102 @@ +config= $config; + + $ui= get_userinfo(); + $acl= get_permissions ($config->current['BASE'], $ui->subtreeACL); + $acl= get_module_permission($acl, "ldifexport", $config->current['BASE']); + $this->access= $acl; + } + + function execute() + { + /* Set government mode */ + $smarty= get_smarty(); + + $smarty->assign("type",FALSE); + + /* Check permissions for export */ + if ($this->access != '#all#'){ + print_red(_("You've no permission to do LDAP exports.")); + } else { + // fill in old vars in the Export form + if((isset($_POST['single']))&&(isset($_POST['sfrmgetsingle']))){ + $smarty->assign("single",$_POST['single']); + $smarty->assign("type","single"); + $dn = $_POST['single']; + } + if((isset($_POST['selfull']))&&(isset($_POST['sfrmgetfull']))){ + $smarty->assign("depselectfull",$_POST['selfull']); + $smarty->assign("type","full"); + $dn = $_POST['selfull']; + } + if((isset($_POST['selivbb']))&&(isset($_POST['sfrmgetivbb']))){ + $smarty->assign("depselectivbb",$_POST['selivbb']); + $smarty->assign("type","ivbb"); + $dn = $_POST['selivbb']; + } + } + + // Set values for optionlist in form + $smarty->assign("deplist", $this->config->idepartments); + + // Get the LDAP link, to generate the Export + $ldap = $this->config->get_ldap_link(); + + if ($this->config->current['GOVERNMENTMODE'] == 'true'){ + $smarty->assign ("govmode", "true"); + } else { + $smarty->assign ("govmode", "false"); + } + + $smarty->assign("LDIFError",FALSE); + + if(isset($dn)) + { + if($ldap->dn_exists($dn) && $dn != ""){ + ; + } + else { + $smarty->assign("LDIFError",TRUE); + print_red (_("Error while exporting the requested entries!")); + } + } + + // Export a single LDAP entry + if(isset($_POST['sfrmgetsingle'])) + { + $smarty->assign("para","?ivbb=2&dn=".base64_encode($_POST['single'])); + } + elseif(isset($_POST['sfrmgetfull'])) + { + $smarty->assign("para","?ivbb=3&dn=".base64_encode($_POST['selfull'])); + } + elseif(isset($_POST['sfrmgetivbb'])) + { + $smarty->assign("para","?ivbb=4&dn=".base64_encode($_POST['selivbb'])); + } + + + /* Show main page */ + return ($smarty->fetch (get_template_path('contentexport.tpl', TRUE))); + } +} + + +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/plugins/addons/ldapmanager/class_import.inc b/plugins/addons/ldapmanager/class_import.inc new file mode 100644 index 000000000..7d23ba062 --- /dev/null +++ b/plugins/addons/ldapmanager/class_import.inc @@ -0,0 +1,117 @@ +config= $config; + + $ui= get_userinfo(); + $acl= get_permissions ($config->current['BASE'], $ui->subtreeACL); + $acl= get_module_permission($acl, "ldifimport", $config->current['BASE']); + $this->access= $acl; + } + + function execute() + { + /* Set government mode */ + $smarty= get_smarty(); + + // Get the LDAP link, to generate the Export + $ldap = $this->config->get_ldap_link(); + + $smarty->assign("LDIFError",FALSE); + $smarty->assign("type",FALSE); + + /* Check permissions for export */ + if ($this->access != '#all#'){ + print_red(_("You've no permission to do LDAP imports.")); + } else { + if((isset($_FILES['userfile']['name']))&&(isset($_POST['fileup']))) + { + + + $smarty->assign("type","importfile"); + + + // Check if there is a file submitted + + if(!$_FILES['userfile']['size'] > 0 ) + { + print_red(_("The specified file is empty.")); + $smarty->assign("LDIFError",TRUE); + } + + // Is there a tmp file, which we can use ? + elseif(!file_exists($_FILES['userfile']['tmp_name'])) + { + print_red(_("There is no file uploaded.")); + $smarty->assign("LDIFError",TRUE); + + } + + // Can we open the tmp file, for reading + elseif(!$handle = @fopen($_FILES['userfile']['tmp_name'],"r")) + { + print_red(_("There is no file uploaded.")); + $smarty->assign("LDIFError",TRUE); + } + else + { + // Everything just fine :) + $str = ""; + + // Reading content + while(!feof($handle)) + { + $str .= fread($handle,1024); + } + @fclose($handle); + + // Try to Import the Data + + + + // Should we use Overwrite ? + if(!empty($_POST['overwrite'])) $overwrite = true; else $overwrite = false;; + if(!empty($_POST['cleanup'])) $cleanup = true; else $cleanup = false; + + // + + $check = $ldap->import_complete_ldif($str,$ErrorStr,$overwrite,$cleanup); + + if($check == INSERT_OK ) + $smarty->assign("LDIFError",FALSE); + else + $smarty->assign("LDIFError",TRUE); + + switch($check) + { + case INSERT_OK : break; + case ALREADY_EXISTING_ENTRY : print_red($ErrorStr); break; + case UNKNOWN_TOKEN_IN_LDIF_FILE : print_red($ErrorStr);break; + + default : print_red(_("Unknown Error"));break; + } + } + } + } + return ($smarty->fetch (get_template_path('contentimport.tpl', TRUE))); + + } + +} + + +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/plugins/addons/ldapmanager/class_ldif.inc b/plugins/addons/ldapmanager/class_ldif.inc new file mode 100644 index 000000000..02f5393a0 --- /dev/null +++ b/plugins/addons/ldapmanager/class_ldif.inc @@ -0,0 +1,31 @@ +ldif= new ldiftab($config, $config->data['TABS']['LDIFTAB'], ""); + } + + function execute() + { + /* Show main page */ + return ($this->ldif->execute()); + } + +} + + +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/plugins/addons/ldapmanager/contentcsv.tpl b/plugins/addons/ldapmanager/contentcsv.tpl new file mode 100644 index 000000000..5e2c0fcf2 --- /dev/null +++ b/plugins/addons/ldapmanager/contentcsv.tpl @@ -0,0 +1,129 @@ +

+ {t}The CSV import plugin provides methods to generate user accounts from a file containing Comma Seperated Values. The administrator can decide which columns should be transfered to which attribute. Note that you must have at least the UID, GIVENNAME and SURENAME set.{/t} +

+

 

+ +{if $fileup != TRUE} +
+ + + + + + + + + + +
+ {t}Select CSV file to import{/t} + + + +
+ {t}Select template{/t} + + +
+{elseif $sorted != FALSE} + + +
+ {if $error == FALSE} + {t}All entries have been written to the LDAP database successfully.{/t} + {else} + {t}Oups. There was an error during the import of your data.{/t} + {/if} + +{t}Here is the status report for the import:{/t} +
+
+ + + + + {section name=head loop=$head} + + + {/section} + + {if $pointsbefore == TRUE} + + + + {/if} + + + + + {section name=row loop=$rows} + + + {section name=coll loop=$cols} + + + {/section} + + + {/section} + {if $pointsafter == TRUE} + + + + {/if} + +
+ {$head[$i]} +
+ ... +
+ {$data[$ie]} +
+ ... +
+ +{else} +
{t}Selected Template{/t}: {$tpl} +
+
+ + + + {section name=attr loop=$anz} + + {/section} + + {section name=row loop=$rows} + + {section name=coll loop=$anz} + + + {/section} + + {/section} + +
+ +
+ {$data[$i]}  +
+ + +{/if} +

+{if $fileup != TRUE} + +{else} +{if $sorted == FALSE} + +{else} + +{/if} +{/if} +

+ +
diff --git a/plugins/addons/ldapmanager/contentexport.tpl b/plugins/addons/ldapmanager/contentexport.tpl new file mode 100644 index 000000000..fa30e1cbd --- /dev/null +++ b/plugins/addons/ldapmanager/contentexport.tpl @@ -0,0 +1,77 @@ +{if $LDIFError != FALSE || $type == FALSE} +

+ {t}The LDIF export plugin provides methods to download a complete snapshot of the running LDAP directory as ldif. You may save these files for backup purpose or when initializing a new server.{/t} +

+

 

+ + +
+ +
+ + + + + + + + + + + +{if $govmode eq "true"} + + + + + +{/if} +
+ {t}Export single entry{/t} + + + + +
+ {t}Export complete LDIF for{/t} + + + + +
+ {t}Export IVBB LDIF for{/t} + + + + +
+ + + +{else} + + +
+

{t}Export successfull{/t}

+
+ +
+ {t}Back{/t}  +
+{/if} +

+   +

+ + diff --git a/plugins/addons/ldapmanager/contentimport.tpl b/plugins/addons/ldapmanager/contentimport.tpl new file mode 100644 index 000000000..dd17ef177 --- /dev/null +++ b/plugins/addons/ldapmanager/contentimport.tpl @@ -0,0 +1,59 @@ +{if $type == FALSE || $LDIFError != FALSE} +

+ {t}The LDIF import plugin provides methods to upload a set of entries to your running LDAP directory as ldif. You may use this to add new or modify existing entries. Remember that GOsa will not check your ldifs for GOsa conformance.{/t} +

+ +

 

+
+
+ + + + + + + + + + + + + + + + +
+ {t}Import LDIF File{/t} + + + + +
+   + + + {t}Modify existing attributes{/t} +
+
+   + + + {t}Overwrite existing entry{/t} +
+
+{else} + +
+

{t}Import successfull{/t}

+
+ + + +{/if} +

+ + +

+ diff --git a/plugins/addons/ldapmanager/main.inc b/plugins/addons/ldapmanager/main.inc new file mode 100644 index 000000000..0e071e1f9 --- /dev/null +++ b/plugins/addons/ldapmanager/main.inc @@ -0,0 +1,44 @@ +execute (); + + #$ldap= $config->get_ldap_link(); + #$display.= $ldap->gen_ldif("ou=People,ou=Technik,dc=gonicus,dc=de"); + + $display.= "\n"; + + /* Store changes in session */ + $_SESSION['ldif']= $ldif; +} +?> diff --git a/plugins/addons/ldapmanager/tabs_ldif.inc b/plugins/addons/ldapmanager/tabs_ldif.inc new file mode 100644 index 000000000..cb956d30c --- /dev/null +++ b/plugins/addons/ldapmanager/tabs_ldif.inc @@ -0,0 +1,24 @@ + diff --git a/plugins/addons/logview/class_logview.inc b/plugins/addons/logview/class_logview.inc new file mode 100644 index 000000000..dc6a597e5 --- /dev/null +++ b/plugins/addons/logview/class_logview.inc @@ -0,0 +1,252 @@ +config= $config; + + /* Get global filter config */ + if (!is_global("logfilter")){ + $logfilter= array("time" => "1", + "log_level" => "!ALL", + "host" => "!All", + "regex" => "*"); + register_global("logfilter", $logfilter); + } + + /* Get list of hosts and log levels */ + if (!isset($this->config->data['SERVERS']['LOG'])){ + print_red (_("No LOG servers defined!")); + return; + } + + $cfg= $this->config->data['SERVERS']['LOG']; + $link = @mysql_pconnect($cfg['SERVER'], $cfg['LOGIN'], $cfg['PASSWORD']); + if ($link === FALSE){ + print_red(_("Can't connect to log database, no logs can be shown!")); + return; + } + if (! @mysql_select_db("gomon")){ + print_red(_("Can't select log database for log generation!")); + return; + } + + /* Host list */ + $query= "SELECT DISTINCT host FROM golog LIMIT 200;"; + @DEBUG (DEBUG_MYSQL, __LINE__, __FUNCTION__, __FILE__, $query, "Database query"); + $result = @mysql_query($query); + if ($result === false){ + print_red(_("Query for log database failed!")); + return; + } + while ($line = mysql_fetch_array($result, MYSQL_ASSOC)){ + $this->hostlist[$line['host']]= $line['host']; + } + $this->hostlist['!All']= _("All"); + ksort($this->hostlist); + + /* Log level list */ + $query= "SELECT DISTINCT log_level FROM golog LIMIT 200;"; + @DEBUG (DEBUG_MYSQL, __LINE__, __FUNCTION__, __FILE__, $query, "Database query"); + $result = @mysql_query($query); + if ($result === false){ + print_red(_("Query for log database failed!")); + return; + } + while ($line = mysql_fetch_array($result, MYSQL_ASSOC)){ + $this->loglevellist[$line['log_level']]= $line['log_level']; + } + $this->loglevellist['!All']= _("All"); + ksort($this->loglevellist); + + /* Time interval */ + $this->tilist= array("0" => _("one hour"), "1" => _("6 hours"), + "2" => _("12 hours"), "3" => _("24 hours"), + "4" => _("2 days"), "5" => _("one week"), + "6" => _("2 weeks"), "7" => _("one month")); + } + + function execute() + { + /* Ignore if not defined */ + if (!isset($this->config->data['SERVERS']['LOG'])){ + return; + } + + /* Save data */ + $logfilter= get_global("logfilter"); + foreach( array("host", "time", "log_level", "regex") as $type){ + if (isset($_POST[$type])){ + $logfilter[$type]= $_POST[$type]; + } + } + if ($logfilter['regex'] == ""){ + $logfilter['regex']= '%'; + } else { + $logfilter['regex']= preg_replace('/\*/', '%', $logfilter['regex']); + } + register_global("logfilter", $logfilter); + + $smarty= get_smarty(); + if (isset($_GET['start'])){ + $this->start= (int)$_GET['start']; + } + + /* Adapt sorting */ + if (isset($_GET['sort'])){ + if ($this->sort == (int)$_GET['sort']){ + if ($this->sort_direction == "down"){ + $this->sort_direction= "up"; + } else { + $this->sort_direction= "down"; + } + } + $this->sort= (int)$_GET['sort']; + if ($this->sort < 0 || $this->sort > 3){ + $this->sort= 0; + } + } + + /* Query stuff */ + $cfg= $this->config->data['SERVERS']['LOG']; + $link = @mysql_pconnect($cfg['SERVER'], $cfg['LOGIN'], $cfg['PASSWORD']); + if ($link === FALSE){ + print_red(_("Can't connect to log database, no logs can be shown!")); + return; + } + if (! @mysql_select_db("gomon")){ + print_red(_("Can't select log database for log generation!")); + return; + } + + /* Get number of entries */ + $query= "SELECT COUNT(*) FROM golog;"; + $result = @mysql_query($query); + $line= mysql_fetch_array($result, MYSQL_ASSOC); + $count= $line['COUNT(*)']; + if ($count > 25){ + $smarty->assign("range_selector", range_selector($count, $this->start, 25)); + } + + /* Assemble time query */ + switch ($logfilter['time']){ + case '0': + $start= date ("YmdHis", time() - 3600); + break; + ;; + case '1': + $start= date ("YmdHis", time() - 21600); + break; + ;; + case '2': + $start= date ("YmdHis", time() - 43200); + break; + ;; + case '3': + $start= date ("YmdHis", time() - 86400); + break; + ;; + case '4': + $start= date ("YmdHis", time() - 172800); + break; + ;; + case '5': + $start= date ("YmdHis", time() - 604800); + break; + ;; + case '6': + $start= date ("YmdHis", time() - 1209600); + break; + ;; + case '7': + $start= date ("YmdHis", time() - 2419200); + break; + ;; + } + + /* Assemble log level query */ + if ($logfilter['log_level'] == '!All'){ + $ll= ""; + } else { + $ll= "AND log_level='".$logfilter['log_level']."'"; + } + if ($logfilter['host'] == '!All'){ + $hf= ""; + } else { + $hf= "AND host='".$logfilter['host']."'"; + } + + /* Order setting */ + if ($this->sort_direction == "down"){ + $desc= "DESC"; + } else { + $desc= ""; + } + + $end= date ("YmdHis"); + $query= "SELECT * FROM golog WHERE message like '".$logfilter['regex']."' $ll $hf AND time_stamp <= $end AND time_stamp >= $start ORDER BY ".$this->fields[$this->sort]." $desc LIMIT ".$this->start.",25;"; + @DEBUG (DEBUG_MYSQL, __LINE__, __FUNCTION__, __FILE__, $query, "Database query"); + $result = @mysql_query($query); + if ($result === false){ + print_red(_("Query for log database failed!")); + return; + } + + /* Display results */ + $res= ""; + $mod= 0; + while ($line = mysql_fetch_array($result, MYSQL_ASSOC)){ + if ( ($mod++) & 1){ + $col= "background-color: #ECECEC;"; + } else { + $col= "background-color: #F5F5F5;"; + } + + $res.="\n"; + $res.="".$line['host'].""; + $res.="".$line['time_stamp']."".$line['message'].""; + $res.="\n"; + } + mysql_close($link); + + /* Show main page */ + $smarty->assign("search_result", $res); + $smarty->assign("plug", validate($_GET['plug'])); + $smarty->assign("search_image", get_template_path('images/search.png')); + $smarty->assign("time_image", get_template_path('images/time.png')); + $smarty->assign("server_image", get_template_path('images/server.png')); + $smarty->assign("log_image", get_template_path('images/log_warning.png')); + $smarty->assign("ruleset_image", get_template_path('images/edit.png')); + $smarty->assign("launchimage", get_template_path('images/launch.png')); + $smarty->assign("hostlist", $this->hostlist); + $smarty->assign("loglevellist", $this->loglevellist); + $smarty->assign("tilist", $this->tilist); + $logfilter['regex']= preg_replace('/\%/', '*', $logfilter['regex']); + foreach( array("host", "log_level", "time", "regex") as $type){ + $smarty->assign("$type", $logfilter[$type]); + } + $smarty->assign("mode".$this->sort, "sort_direction. + ".png\" border=0 align=center>"); + return ($smarty->fetch (get_template_path('contents.tpl', TRUE))); + } + +} + +?> diff --git a/plugins/addons/logview/contents.tpl b/plugins/addons/logview/contents.tpl new file mode 100644 index 000000000..f84f980b8 --- /dev/null +++ b/plugins/addons/logview/contents.tpl @@ -0,0 +1,104 @@ +
+

[F]{t}Filter{/t}

+
+
+

+ + + + + + + + + + + + + + +
+ + + + + + + + + +
 {t}Show hosts{/t} + +
 {t}Log level{/t} + +
+
+   + + + + + + + + + + +
 {t}Time interval{/t} + +
 {t}Search for{/t}
+
+   + + + + + + + + + +
 {t}Ruleset{/t} + +
+ +
+
+

+
+ +
+ +{if $search_result ne ""} + + + + + + + + {$search_result} +
{t}Level{/t} {$mode0}{t}Hostname{/t} {$mode1}{t}Date{/t} {$mode2}{t}Message{/t} {$mode3}
+ + + + + +
{$range_selector}
+ +{else} + {t}Search returned no results...{/t} +{/if} + + + diff --git a/plugins/addons/logview/main.inc b/plugins/addons/logview/main.inc new file mode 100644 index 000000000..b37dcb17b --- /dev/null +++ b/plugins/addons/logview/main.inc @@ -0,0 +1,38 @@ +execute (); + $display.= "\n"; + + /* Store changes in session */ + $_SESSION['logview']= $logview; +} +?> diff --git a/plugins/admin/applications/class_applicationGeneric.inc b/plugins/admin/applications/class_applicationGeneric.inc new file mode 100644 index 000000000..44c07f444 --- /dev/null +++ b/plugins/admin/applications/class_applicationGeneric.inc @@ -0,0 +1,270 @@ + "Eins ist toll", "zwei" => "Zwei ist noch besser"); + + /* application attributes */ + var $cn= ""; + var $description= ""; + var $base= ""; + var $gosaApplicationExecute= ""; + var $gosaApplicationName= ""; + var $gosaApplicationFlags= ""; + var $gosaApplicationIcon= ""; + var $iconData; + + /* Headpage attributes */ + var $last_sorting= "invalid"; + var $applications= array(); + + /* attribute list for save action */ + var $attributes= array("cn", "description", "gosaApplicationExecute", "gosaApplicationName", + "gosaApplicationFlags"); + var $objectclasses= array("top", "gosaApplication"); + + function application ($config, $dn= NULL) + { + plugin::plugin ($config, $dn); + + /* Load icon */ + $ldap= $config->get_ldap_link(); + $this->iconData= $ldap->get_attribute($dn, "gosaApplicationIcon"); + if ($this->iconData == ""){ + $this->set_picture(""); + } + $_SESSION['picture']= $this->iconData; + $this->gosaApplicationIcon= $this->iconData; + + /* This is always an account */ + $this->is_account= TRUE; + + if ($this->dn == "new"){ + $ui= get_userinfo(); + $this->base= dn2base($ui->dn); + } else { + $this->base= preg_replace ("/^[^,]+,[^,]+,/", "", $this->dn); + } + } + + function execute() + { + /* Do we represent a valid group? */ + if (!$this->is_account && $this->parent == NULL){ + $display= " ". + _("This 'dn' is no application.").""; + return ($display); + } + + /* Fill templating stuff */ + $smarty= get_smarty(); + $smarty->assign("cn", $this->cn); + $smarty->assign("bases", $this->config->idepartments); + if ($this->dn == "new"){ + $smarty->assign("selectmode", ""); + $smarty->assign("namemode", ""); + } else { + $smarty->assign("namemode", "readonly"); + $smarty->assign("selectmode", "disabled"); + } + + /* Get random number for pictures */ + srand((double)microtime()*1000000); + $smarty->assign("rand", rand(0, 10000)); + + /* Variables */ + foreach(array("description", "gosaApplicationExecute", "gosaApplicationName") as $val){ + + $smarty->assign($val, $this->$val); + $smarty->assign($val."ACL", chkacl($this->acl, $val)); + } + + /* Checkboxes */ + foreach (array("G" => "exec_for_groupmembers", "O" => "overwrite_config", + "D" => "place_on_desktop", "M" => "place_in_startmenu") as $key => $val){ + if (preg_match("/$key/", $this->gosaApplicationFlags)){ + $smarty->assign("$val", "checked"); + } else { + $smarty->assign("$val", ""); + } + } + $smarty->assign("base_select", $this->base); + $smarty->assign("gosaApplicationFlagsACL", chkacl($this->acl, "gosaApplicationFlags")); + + /* Show main page */ + return($smarty->fetch (get_template_path('generic.tpl', TRUE))); + } + + function remove_from_parent() + { + $ldap= $this->config->get_ldap_link(); + $ldap->rmDir($this->dn); + + /* Optionally execute a command after we're done */ + $this->handle_post_events("remove"); + + /* Delete references to object groups */ + $ldap->cd ($this->config->current['BASE']); + $ldap->search ("(&(objectClass=gosaGroupOfNames)(member=".$this->dn."))", array("cn")); + while ($ldap->fetch()){ + $og= new ogroup($this->config, $ldap->getDN()); + unset($og->member[$this->dn]); + $og->save (); + } + + } + + + /* Save data to object */ + function save_object() + { + if (isset($_POST['cn'])){ + plugin::save_object(); + + /* Save application flags */ + $flag= ""; + if (isset($_POST['exec_for_groupmembers']) && $_POST['exec_for_groupmembers'] == 1){ + $flag.= "G"; + } + if (isset($_POST['place_on_desktop']) && $_POST['place_on_desktop'] == 1){ + $flag.= "D"; + } + if (isset($_POST['place_in_startmenu']) && $_POST['place_in_startmenu'] == 1){ + $flag.= "M"; + } + if (isset($_POST['overwrite_config']) && $_POST['overwrite_config'] == 1){ + $flag.= "O"; + } + if (chkacl ($this->acl, "gosaApplicationFlags") ==""){ + $this->gosaApplicationFlags= "[$flag]"; + } + + /* Check for picture upload */ + + + if (isset($_FILES['picture_file']['name']) && $_FILES['picture_file']['name'] != ""){ + if (!is_uploaded_file($_FILES['picture_file']['tmp_name'])) { + print_red (_("The specified picture has not been uploaded correctly.")); + } + + /* Load the new uploaded Photo */ + if(!$handle = imagick_ReadImage($_FILES['picture_file']['tmp_name'])) { + gosa_log("Can't Load image"); + } + + /* Resizing image to 147x200 and blur */ + if(!imagick_resize($handle,48,48,IMAGICK_FILTER_GAUSSIAN,0)){ + gosa_log("imagick_resize failed"); + } + + /* Converting image to JPEG */ + if(!imagick_convert($handle,"PNG")) { + gosa_log("Can't Convert to PNG"); + } + + if(imagick_writeimage($handle,$_FILES['picture_file']['tmp_name'])){ + gosa_log("can't write to specified folder"); + } + + imagick_free($handle); + + /* Activate new picture */ + $this->set_picture($_FILES['picture_file']['tmp_name']); + } + + + /* Save base, since this is no LDAP attribute */ + if (isset($_POST['base']) && chkacl($this->acl, "create") == ""){ + $this->base= $_POST['base']; + } + } + } + + + /* Check values */ + function check() + { + $message= array(); + + /* Permissions for that base? */ + if ($this->base != ""){ + $new_dn= "cn=".$this->cn.",ou=apps,".$this->base; + } else { + $new_dn= $this->dn; + } + + $ui= get_userinfo(); + $acl= get_permissions ($new_dn, $ui->subtreeACL); + $acl= get_module_permission($acl, "application", $new_dn); + if (chkacl($acl, "create") != ""){ + $message[]= _("You have no permissions to create a application on this 'Base'."); + } + + /* All required fields are set? */ + if ($this->cn == ""){ + $message[]= _("Required field 'Name' is not filled."); + } + if ($this->gosaApplicationExecute == ""){ + $message[]= _("Required field 'Execute' is not filled."); + } + + /* Check for existing application */ + $ldap= $this->config->get_ldap_link(); + $ldap->cd($this->config->current["BASE"]); + $ldap->search("(&(objectClass=gosaApplication)(cn=$this->cn))"); + $ldap->fetch(); + if ($ldap->count() != 0 && $this->dn == "new"){ + $message[]= _("There's already an application with this 'Name'."); + } + + return $message; + } + + + /* Save to LDAP */ + function save() + { + plugin::save(); + $this->attrs["gosaApplicationIcon"]= $this->gosaApplicationIcon; + + /* Write back to ldap */ + $ldap= $this->config->get_ldap_link(); + $ldap->cat($this->dn); + $a= $ldap->fetch(); + if (count($a)){ + $ldap->cd($this->dn); + $ldap->modify($this->attrs); + $this->handle_post_events("modify"); + } else { + $ldap->cd($this->config->current['BASE']); + $ldap->create_missing_trees(preg_replace('/^[^,]+,/', '', $this->dn)); + $ldap->cd($this->dn); + $ldap->add($this->attrs); + $this->handle_post_events("add"); + } + show_ldap_error($ldap->get_error()); + } + + function set_picture($filename) + { + if (!is_file($filename)){ + $filename= "./images/default_icon.png"; + $this->gosaApplicationIcon= "*removed*"; + } + + if (file_exists($filename)){ + $fd = fopen ($filename, "rb"); + $this->iconData= fread ($fd, filesize ($filename)); + $_SESSION['picture']= $this->iconData; + $this->gosaApplicationIcon= $this->iconData; + + fclose ($fd); + } + } + + +} + +?> diff --git a/plugins/admin/applications/class_applicationManagement.inc b/plugins/admin/applications/class_applicationManagement.inc new file mode 100644 index 000000000..7142121b6 --- /dev/null +++ b/plugins/admin/applications/class_applicationManagement.inc @@ -0,0 +1,343 @@ +config= $config; + $this->ui= $ui; + + /* Get global filter config */ + if (!is_global("appfilter")){ + $base= get_base_from_people($ui->dn); + $appfilter= array("depselect" => $base, + "regex" => "*"); + register_global("appfilter", $appfilter); + } + } + + function execute() + { + /* Save data */ + $appfilter= get_global("appfilter"); + foreach( array("depselect", "regex") as $type){ + if (isset($_POST[$type])){ + $appfilter[$type]= $_POST[$type]; + } + } + if (isset($_GET['search'])){ + $s= mb_substr($_GET['search'], 0, 1, "UTF8")."*"; + if ($s == "**"){ + $s= "*"; + } + $appfilter['regex']= $s; + } + register_global("appfilter", $appfilter); + + /* Check sorting variable */ + if (!isset($this->apptabs) && + !isset($_POST['new_app']) && + !isset($_POST['delete_app']) && + !isset($_POST['select_app'])){ + $this->reload(); + } + $smarty= get_smarty(); + + /* Check for exeeded sizelimit */ + if (($message= check_sizelimit()) != ""){ + return($message); + } + + /* New application? */ + if (isset($_POST['new_app'])){ + + /* By default we set 'dn' to 'new', all relevant plugins will + react on this. */ + $this->dn= "new"; + + /* Create new usertab object */ + $this->apptabs= new apptabs($this->config, + $this->config->data['TABS']['APPSTABS'], $this->dn); + $this->apptabs->set_acl(array(':all')); + } + + /* Cancel dialogs */ + if (isset($_POST['edit_cancel']) || isset($_POST['password_cancel'])){ + del_lock ($this->apptabs->dn); + unset ($this->apptabs); + $this->apptabs= NULL; + unset ($_SESSION['objectinfo']); + } + + /* Finish apps edit is triggered by the tabulator dialog, so + the user wants to save edited data. Check and save at this + point. */ + if (isset($_POST['edit_finish'])){ + + /* Check tabs, will feed message array */ + $this->apptabs->last= $this->apptabs->current; + $this->apptabs->save_object(); + $message= $this->apptabs->check(); + + /* Save, or display error message? */ + if (count($message) == 0){ + + /* Save data data to ldap */ + $this->apptabs->save(); + gosa_log ("Application object'".$this->dn."' has been saved"); + + /* Application has been saved successfully, remove lock from + LDAP. */ + if ($this->dn != "new"){ + del_lock ($this->dn); + } + + /* There's no page reload so we have to read new apps at + this point. */ + $this->reload (); + unset ($this->apptabs); + $this->apptabs= NULL; + unset ($_SESSION['objectinfo']); + } else { + /* Ok. There seem to be errors regarding to the tab data, + show message and continue as usual. */ + show_errors($message); + } + } + + /* User wants to edit data? */ + if ((isset($_POST['select_app']) || (isset($_POST['edit_helper']) && $_POST['edit_helper'] == "1")) && isset($_POST['applist']) && $_POST['applist'] != ""){ + + /* Get 'dn' from posted 'applist', must be unique */ + $this->dn= trim($_POST['applist']); + + /* Check locking, save current plugin in 'back_plugin', so + the dialog knows where to return. */ + if (($user= get_lock($this->dn)) != ""){ + return(gen_locked_message ($user, $this->dn)); + } + + /* Lock the current entry, so everyone will get the + above dialog */ + add_lock ($this->dn, $this->ui->dn); + + /* Set up the users ACL's for this 'dn' */ + $acl= get_permissions ($this->dn, $this->ui->subtreeACL); + + /* Register apptabs to trigger edit dialog */ + $this->apptabs= new apptabs($this->config, + $this->config->data['TABS']['APPSTABS'], $this->dn); + $this->apptabs->set_acl($acl); + $_SESSION['objectinfo']= $this->dn; + } + + /* Remove user was requested */ + if (isset($_POST['delete_app']) && isset($_POST['applist'])){ + + /* Get 'dn' from posted 'uid' */ + $this->dn= trim($_POST['applist']); + + /* Load permissions for selected 'dn' and check if + we're allowed to remove this 'dn' */ + $acl= get_permissions ($this->dn, $this->ui->subtreeACL); + $this->acl= get_module_permission($acl, "application", $this->dn); + if (chkacl($this->acl, "delete") == ""){ + + /* Check locking, save current plugin in 'back_plugin', so + the dialog knows where to return. */ + if (($user= get_lock($this->dn)) != ""){ + return (gen_locked_message ($user, $this->dn)); + } + + /* Lock the current entry, so nobody will edit it during deletion */ + add_lock ($this->dn, $this->ui->dn); + $smarty= get_smarty(); + $smarty->assign("intro", sprintf(_("You're about to delete the application '%s'."), $this->dn)); + return($smarty->fetch (get_template_path('remove.tpl', TRUE))); + } else { + + /* Obviously the user isn't allowed to delete. Show message and + clean session. */ + print_red (_("You are not allowed to delete this application!")); + } + } + + /* Confirmation for deletion has been passed. Group should be deleted. */ + if (isset($_POST['delete_app_confirm'])){ + + /* Some nice guy may send this as POST, so we've to check + for the permissions again. */ + if (chkacl($this->acl, "delete") == ""){ + + /* Delete request is permitted, perform LDAP action */ + $this->apptabs= new apptabs($this->config, + $this->config->data['TABS']['APPSTABS'], $this->dn); + $this->apptabs->set_acl(array($this->acl)); + $this->apptabs->delete (); + gosa_log ("Application object'".$this->dn."' has been removed"); + unset ($this->apptabs); + $this->apptabs= NULL; + + /* Group list has changed, reload it. */ + $this->reload (); + } else { + + /* Normally this shouldn't be reached, send some extra + logs to notify the administrator */ + print_red (_("You are not allowed to delete this application!")); + gosa_log ("Warning: '".$this->ui->uid."' tried to trick group deletion."); + } + + /* Remove lock file after successfull deletion */ + del_lock ($this->dn); + } + + + /* Delete application canceled? */ + if (isset($_POST['delete_cancel'])){ + del_lock ($this->dn); + unset($_SESSION['objectinfo']); + } + + /* Show tab dialog if object is present */ + if ($this->apptabs){ + $display= $this->apptabs->execute(); + + /* Don't show buttons if tab dialog requests this */ + if (!$this->apptabs->by_object[$this->apptabs->current]->dialog){ + $display.= "

\n"; + $display.= "\n"; + $display.= " \n"; + $display.= "\n"; + $display.= "

"; + } + return ($display); + } + + /* Show main page */ + $smarty->assign("applications", $this->applications); + $smarty->assign("search_image", get_template_path('images/search.png')); + $smarty->assign("tree_image", get_template_path('images/tree.png')); + $smarty->assign("infoimage", get_template_path('images/info.png')); + $smarty->assign("launchimage", get_template_path('images/launch.png')); + $smarty->assign("deplist", $this->config->idepartments); + foreach( array("depselect", "regex") as $type){ + $smarty->assign("$type", $appfilter[$type]); + } + + /* Extend if we are not using javascript */ + $smarty->assign("apply", apply_filter()); + $smarty->assign("alphabet", generate_alphabet()); + $smarty->assign("hint", print_sizelimit_warning()); + + return($smarty->fetch(get_template_path('headpage.tpl', TRUE))); + } + + + function reload() + { + /* Get config */ + $appfilter= get_global('appfilter'); + + /* Set base for all searches */ + $base= $appfilter['depselect']; + + /* Regex filter? */ + if ($appfilter['regex'] != ""){ + $regex= $appfilter['regex']; + } else { + $regex= "*"; + } + + /* Generate application list */ + $res= get_list($this->ui->subtreeACL, "(&(cn=$regex)(objectClass=gosaApplication))", TRUE, $base, array("cn", "description"), TRUE); + $this->applications= array(); + foreach ($res as $value){ + $this->applications[$value["dn"]]= $value["cn"][0]; + if (isset($value["description"][0])){ + $this->applications[$value["dn"]]= $value["cn"][0]." (". + $value["description"][0].")"; + } + } + natcasesort ($this->applications); + reset ($this->applications); + } + + function remove_from_parent() + { + /* Optionally execute a command after we're done */ + $this->postremove(); + } + + + /* Save data to object */ + function save_object() + { + } + + + /* Check values */ + function check() + { + } + + + /* Save to LDAP */ + function save() + { + /* Optionally execute a command after we're done */ + $this->postcreate(); + } + + function adapt_from_template($dn) + { + } + + function password_change_needed() + { + } + + function show_header($button_text, $text, $disabled= FALSE) + { + } + + function remove_lock() + { + if (isset($this->apptabs->dn)){ + del_lock ($this->apptabs->dn); + } + } + +} + +?> diff --git a/plugins/admin/applications/class_applicationParameters.inc b/plugins/admin/applications/class_applicationParameters.inc new file mode 100644 index 000000000..4b229c8f7 --- /dev/null +++ b/plugins/admin/applications/class_applicationParameters.inc @@ -0,0 +1,186 @@ + "Eins ist toll", "zwei" => "Zwei ist noch besser"); + + /* Parameters */ + var $option_name= array(); + var $option_value= array(); + + /* attribute list for save action */ + var $attributes= array(); + var $objectclasses= array(); + + function applicationParameters ($config, $dn= NULL) + { + plugin::plugin ($config, $dn); + + if (isset($this->attrs['gosaApplicationParameter'])){ + $this->is_account= TRUE; + for ($i= 0; $i<$this->attrs['gosaApplicationParameter']['count']; $i++){ + $option= preg_replace('/^[^:]+:/', '', + $this->attrs['gosaApplicationParameter'][$i]); + $name= preg_replace('/:.*$/', '', + $this->attrs['gosaApplicationParameter'][$i]); + $this->option_name[$i]= $name; + $this->option_value[$i]= $option; + } + } else { + $this->is_account= FALSE; + } + } + + function execute() + { + /* Do we need to flip is_account state? */ + if (isset($_POST['modify_state'])){ + $this->is_account= !$this->is_account; + } + + /* Show tab dialog headers */ + $display= ""; + if ($this->parent != NULL){ + if ($this->is_account){ + $display= $this->show_header(_("Remove options"), + _("This application has options. You can disable them by clicking below.")); + } else { + $display= $this->show_header(_("Create options"), + _("This application has options disabled. You can enable them by clicking below.")); + return ($display); + } + } + + /* Add option to list */ + if (isset($_POST['add_option'])){ + $i= count($this->option_name); + $this->option_name[$i]= ""; + $this->option_value[$i]= ""; + } + + /* Remove value from list */ + for ($i= 0; $ioption_name); $i++){ + if (isset($_POST["remove$i"])){ + $k= 0; + $on= array(); + $ov= array(); + for ($j= 0; $joption_name); $j++){ + if ($j != $i){ + $on[$k]= $this->option_name[$j]; + $ov[$k]= $this->option_value[$j]; + $k++; + } + } + $this->option_name= $on; + $this->option_value= $ov; + break; + } + } + + /* Generate list of attributes */ + if (count($this->option_name) == 0){ + $this->option_name[]= ""; + $this->option_value[]= ""; + } + $table= ""; + if (count ($this->option_name)){ + for ($i= 0; $i < count($this->option_name); $i++){ + $table.=""; + } + } + $table.= "
"._("Variable").""._("Default value")."
option_name[$i]."\">option_value[$i]."\">
". + "
"; + $table.=""; + + /* Show main page */ + $smarty= get_smarty(); + $smarty->assign("table", $table); + $display.= $smarty->fetch(get_template_path('parameters.tpl', TRUE)); + return ($display); + } + + function remove_from_parent() + { + $ldap= $this->config->get_ldap_link(); + + /* Zero attributes */ + $this->attrs= array(); + $this->attrs['gosaApplicationParameter']= array(); + + $ldap->cd($this->dn); + @DEBUG (DEBUG_LDAP, __LINE__, __FUNCTION__, __FILE__, + $this->attributes, "Save"); + $ldap->modify($this->attrs); + show_ldap_error($ldap->get_error()); + + /* Optionally execute a command after we're done */ + $this->handle_post_events('remove'); + } + + + /* Save data to object */ + function save_object() + { + if (isset($_POST['option0'])){ + for ($i= 0; $ioption_name); $i++){ + $this->option_name[$i]= $_POST["option$i"]; + $this->option_value[$i]= ""; + if ($_POST["value$i"] != ""){ + $this->option_value[$i]= $_POST["value$i"]; + } + } + } + } + + + /* Check values */ + function check() + { + $message= array(); + + /* Check for valid option names */ + for ($i= 0; $ioption_name); $i++){ + if (!preg_match ("/^[a-z0-9_]+$/", $this->option_name[$i])){ + $message[]= sprintf(_("Value '%s' specified as option name is not valid."), + $this->option_name[$i]); + } + } + + return $message; + } + + + /* Save to LDAP */ + function save() + { + /* Generate values */ + $this->attrs= array(); + if (count($this->option_name) == 0){ + $this->attrs['gosaApplicationParameter']= array(); + } else { + for ($i= 0; $ioption_name); $i++){ + $this->attrs['gosaApplicationParameter'][]= $this->option_name[$i]. + ":".$this->option_value[$i]; + } + } + + /* Write back to ldap */ + $ldap= $this->config->get_ldap_link(); + $ldap->cd($this->dn); + @DEBUG (DEBUG_LDAP, __LINE__, __FUNCTION__, __FILE__, + $this->attributes, "Save"); + $ldap->modify($this->attrs); + show_ldap_error($ldap->get_error()); + + /* Optionally execute a command after we're done */ + $this->handle_post_events('modify'); + } + +} + +?> diff --git a/plugins/admin/applications/generic.tpl b/plugins/admin/applications/generic.tpl new file mode 100644 index 000000000..4b8bf3e7e --- /dev/null +++ b/plugins/admin/applications/generic.tpl @@ -0,0 +1,82 @@ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
{t}Application name{/t}{$must}
{t}Execute{/t}{$must} + +
{t}Display name{/t} + +
{t}Description{/t} + +
{t}Base{/t}{$must} + +
+
+   + + {t}Icon{/t} +
+ + + + +
+ +

 

+ + + + + + +
+ {t}Only executable for members{/t} +
+ {t}Replace user configuration on startup{/t} +
+ + {t}Place icon on members desktop{/t} +
+ + {t}Place entry in members startmenu{/t} +
+ +
+ + + diff --git a/plugins/admin/applications/headpage.tpl b/plugins/admin/applications/headpage.tpl new file mode 100644 index 000000000..ec88863f2 --- /dev/null +++ b/plugins/admin/applications/headpage.tpl @@ -0,0 +1,60 @@ + + + + + +
+
+

+ {t}List of applications{/t} {$hint} +

+
+
+

+ +
+   +   +   + +

+
+
+
+

[i]{t}Information{/t}

+
+
+

+ {t}This menu allows to add, edit or remove selected applications. You may want to use the range selector on top of the application listbox, when working with a large number of applications.{/t} +

+

+ {t}-Edit- and -New application- will execute an assistant to aid you in editing properties. -Delete- will ask for confirmation before removing applications.{/t} +

+
+
+
+

[F]{t}Filters{/t}

+
+
+

+ + {$alphabet} +
+

+

+ +
 {t}Display applications of department{/t}
+

+

+ +
 {t}Display applications matching{/t}
+

+ {$apply} +
+
+ + diff --git a/plugins/admin/applications/main.inc b/plugins/admin/applications/main.inc new file mode 100644 index 000000000..b2e676d04 --- /dev/null +++ b/plugins/admin/applications/main.inc @@ -0,0 +1,54 @@ +remove_lock(); + del_lock ($ui->dn); + sess_del ('applicationManagement'); + } +} else { + /* Create applicationManagement object on demand */ + if (!isset($_SESSION['applicationManagement']) || (isset($_GET['reset']) && $_GET['reset'] == 1)){ + $_SESSION['applicationManagement']= new applicationManagement ($config, $_SESSION['ui']); + } + $applicationManagement= $_SESSION['applicationManagement']; + $output= $applicationManagement->execute(); + + /* Page header*/ + if (isset($_SESSION['objectinfo'])){ + $display= print_header(get_template_path('images/application.png'), _("Application management"), " ".$_SESSION['objectinfo']); + } else { + $display= print_header(get_template_path('images/application.png'), _("Application management")); + } + + /* Reset requested? */ + if (isset($_GET['reset']) && $_GET['reset'] == 1){ + del_lock ($ui->dn); + sess_del ('applicationManagement'); + } + + /* Show and save dialog */ + $display.= $output; + $_SESSION['applicationManagement']= $applicationManagement; +} + +?> diff --git a/plugins/admin/applications/parameters.tpl b/plugins/admin/applications/parameters.tpl new file mode 100644 index 000000000..57c221971 --- /dev/null +++ b/plugins/admin/applications/parameters.tpl @@ -0,0 +1,2 @@ +{$table} +
diff --git a/plugins/admin/applications/remove.tpl b/plugins/admin/applications/remove.tpl new file mode 100644 index 000000000..94c205458 --- /dev/null +++ b/plugins/admin/applications/remove.tpl @@ -0,0 +1,18 @@ +
+  {t}Warning{/t} +
+ +

+ {$intro} + {t}This may be used by several groups. Please double check if your really want to do this since there is no way for GOsa to get your data back.{/t} +

+

+ {t}So - if you're sure - press Delete to continue or Cancel to abort.{/t} +

+ +

+ +   + +

+ diff --git a/plugins/admin/applications/tabs_application.inc b/plugins/admin/applications/tabs_application.inc new file mode 100644 index 000000000..c884fed95 --- /dev/null +++ b/plugins/admin/applications/tabs_application.inc @@ -0,0 +1,37 @@ +by_object['application']; + + /* Check for new 'dn', in order to propagate the + 'dn' to all plugins */ + $new_dn= "cn=".$baseobject->cn.",ou=apps,".$baseobject->base; + + /* Move group? */ + if ($this->dn != $new_dn){ + + /* Write entry on new 'dn' */ + if ($this->dn != "new"){ + $baseobject->move($this->dn, $new_dn); + $this->by_object['application']= $baseobject; + } + + /* Happen to use the new one */ + $this->dn= $new_dn; + } + + tabs::save(); + } + +} + +?> diff --git a/plugins/admin/departments/class_departmentGeneric.inc b/plugins/admin/departments/class_departmentGeneric.inc new file mode 100644 index 000000000..a540a1557 --- /dev/null +++ b/plugins/admin/departments/class_departmentGeneric.inc @@ -0,0 +1,191 @@ +is_account= TRUE; + $this->ui= get_userinfo(); + $this->dn= $dn; + $this->orig_dn= $dn; + $this->config= $config; + + /* Set base */ + if ($this->dn == "new"){ + $ui= get_userinfo(); + $this->base= dn2base($ui->dn); + } else { + $this->base= preg_replace ("/^[^,]+,/", "", $this->dn); + } + } + + function execute() + { + /* Reload departments */ + $this->config->departments= get_departments($this->dn); + $this->config->make_idepartments(); + $smarty= get_smarty(); + + + /* Show main page */ + $smarty->assign("bases", $this->config->idepartments); + + foreach ($this->attributes as $val){ + $smarty->assign("$val", $this->$val); + $smarty->assign("$val"."ACL", chkacl($this->acl, "$val")); + } + $smarty->assign("bases", $this->config->idepartments); + $smarty->assign("base_select", $this->base); + return($smarty->fetch (get_template_path('generic.tpl', TRUE))); + } + + function clear_fields() + { + $this->dn= ""; + $this->base= ""; + $this->acl= "#none#"; + + foreach ($this->attributes as $val){ + $this->$val= ""; + } + } + + + function remove_from_parent() + { + $ldap= $this->config->get_ldap_link(); + $ldap->cd ($this->dn); + $ldap->recursive_remove(); + + /* Optionally execute a command after we're done */ + $this->handle_post_events('remove'); + } + + + /* Save data to object */ + function save_object() + { + plugin::save_object(); + + /* Save base, since this is no LDAP attribute */ + if (isset($_POST['base']) && chkacl($this->acl, "create") == ""){ + $this->base= $_POST['base']; + } + } + + + /* Check values */ + function check() + { + $message= array(); + + /* Permissions for that base? */ + $this->dn= "ou=$this->ou,".$this->base; + $acl= get_permissions ($this->dn, $this->ui->subtreeACL); + $acl= get_module_permission($acl, "department", $this->dn); + if (chkacl($acl, "create") != ""){ + $message[]= _("You have no permissions to create a department on this 'Base'."); + } + + /* Check for presence of this department */ + $ldap= $this->config->get_ldap_link(); + $attrs= $ldap->cat ($this->dn); + if ($this->orig_dn == "new" && !($attrs === FALSE)){ + $message[]= _("Department with that 'Name' already exists."); + } elseif ($this->orig_dn != $this->dn && !($attrs === FALSE)){ + $message[]= _("Department with that 'Name' already exists."); + } + + /* All required fields are set? */ + if ($_POST["ou"] == ""){ + $message[]= _("Required field 'Name' is not set."); + } + if ($_POST["description"] == ""){ + $message[]= _("Required field 'Description' is not set."); + } + + /* Validate and modify - or: spaghetti rules! */ + if ($_POST['ou'] == "incoming"){ + $message[]= _("The field 'Name' contains the reserved word 'incoming'.". + " Please choose another name."); + } + if (preg_match ('/[,#+:=>\\\\]/', $_POST['ou'])){ + $message[]= _("The field 'Name' contains invalid characters."); + } + if (!is_phone_nr($_POST['telephoneNumber'])){ + $message[]= _("The field 'Phone' contains an invalid phone number."); + } + if (!is_phone_nr($_POST['facsimileTelephoneNumber'])){ + $message[]= _("The field 'Fax' contains an invalid phone number."); + } + + return $message; + } + + + /* Save to LDAP */ + function save() + { + plugin::save(); + + /* Write back to ldap */ + $ldap= $this->config->get_ldap_link(); + $ldap->cat($this->dn); + $a= $ldap->fetch(); + $ldap->cd($this->dn); + if (count($a)){ + $ldap->modify($this->attrs); + $this->handle_post_events('modify'); + } else { + $ldap->add($this->attrs); + $this->handle_post_events('add'); + } + show_ldap_error($ldap->get_error()); + + /* Optionally execute a command after we're done */ + $this->postcreate(); + } + +} + +?> diff --git a/plugins/admin/departments/class_departmentManagement.inc b/plugins/admin/departments/class_departmentManagement.inc new file mode 100644 index 000000000..8e34de931 --- /dev/null +++ b/plugins/admin/departments/class_departmentManagement.inc @@ -0,0 +1,293 @@ + "Eins ist toll", "zwei" => "Zwei ist noch besser"); + + /* Headpage attributes */ + var $last_dep_sorting= "invalid"; + var $departments= array(); + var $deptabs= NULL; + + /* attribute list for save action */ + var $attributes= array(); + var $objectclasses= array(); + + function departmentManagement ($config, $ui) + { + $this->ui= $ui; + $this->dn= ""; + $this->config= $config; + + /* Get global filter config */ + if (!is_global("depfilter")){ + $base= get_base_from_people($ui->dn); + $depfilter= array("depselect" => $base, + "regex" => "*"); + register_global("depfilter", $depfilter); + } + } + + function execute() + { + /* Reload departments */ + $this->config->departments= get_departments(); + $this->config->make_idepartments(); + $smarty= get_smarty(); + + /* Save data */ + $depfilter= get_global("depfilter"); + foreach( array("depselect", "regex") as $type){ + if (isset($_POST[$type])){ + $depfilter[$type]= $_POST[$type]; + } + } + if (isset($_GET['search'])){ + $s= mb_substr($_GET['search'], 0, 1, "UTF8")."*"; + if ($s == "**"){ + $s= "*"; + } + $depfilter['regex']= $s; + } + register_global("depfilter", $depfilter); + + + /* Create new department? */ + if (isset($_POST['new_department'])){ + $this->acl= array(":all"); + $this->dn= "new"; + + /* Register deptabs to trigger edit dialog */ + $this->deptabs= new deptabs($this->config, + $this->config->data['TABS']['DEPTABS'], $this->dn); + $this->deptabs->set_acl($this->acl); + } + + /* Edit existing department */ + if ((isset($_POST['select_department']) || (isset($_POST['edit_helper']) && $_POST['edit_helper'] == "1")) && isset($_POST['deplist']) != ""){ + $this->dn= $this->config->departments[trim($_POST['deplist'])]; + + /* Check locking, save current plugin in 'back_plugin', so + the dialog knows where to return. */ + if (($user= get_lock($this->dn)) != ""){ + return(gen_locked_message ($user, $this->dn)); + } + + /* Lock the current entry, so everyone will get the + above dialog */ + add_lock ($this->dn, $this->ui->dn); + + /* Set up the users ACL's for this 'dn' */ + $this->acl= get_permissions ($this->dn, $this->ui->subtreeACL); + + /* Register deptabs to trigger edit dialog */ + $this->deptabs= new deptabs($this->config, + $this->config->data['TABS']['DEPTABS'], $this->dn); + $this->deptabs->set_acl($this->acl); + $_SESSION['objectinfo']= $this->dn; + } + + + /* Delete requested department */ + $display= ""; + if (isset($_POST['delete_department']) && isset($_POST['deplist'])){ + $this->dn= $this->config->departments[trim($_POST['deplist'])]; + + /* Check locking */ + if (($user= get_lock($this->dn)) != ""){ + $_SESSION['dn']= $this->dn; + return(gen_locked_message($user, $this->dn)); + } else { + # Lock this dn for editing + add_lock ($this->dn, $this->ui->dn); + + $smarty->assign("info", sprintf(_("You're about to delete the whole LDAP subtree placed under '%s'."), $this->dn)); + $display.= $smarty->fetch (get_template_path('remove.tpl', TRUE)); + return ($display); + } + } + + /* Finally delete department */ + if (isset($_POST['delete_department_confirm'])){ + $acl= get_permissions ($this->dn, $this->ui->subtreeACL); + $acl= get_module_permission($acl, "department", $this->dn); + if (chkacl($acl, "all") == ""){ + $this->remove_from_parent(); + gosa_log ("Department object'".$this->dn."' has been removed"); + $this->reload (); + } else { + print_red (_("You have no permission to remove this department.")); + } + } + + /* Finish request */ + if (isset($_POST['edit_finish'])){ + + /* Check tabs, will feed message array */ + $message= $this->deptabs->check(); + + /* Save, or display error message? */ + if (count($message) == 0){ + + /* Save user data to ldap */ + $this->deptabs->save(); + gosa_log ("Department object'".$this->dn."' has been saved"); + + /* Group has been saved successfully, remove lock from + LDAP. */ + if ($this->dn != "new"){ + del_lock ($this->dn); + } + + /* There's no page reload so we have to read new users at + this point. */ + $this->reload (); + unset ($this->deptabs); + $this->deptabs= NULL; + unset ($_SESSION['objectinfo']); + + } else { + /* Ok. There seem to be errors regarding to the tab data, + show message and continue as usual. */ + show_errors($message); + } + } + + + /* Cancel dialog */ + if (isset($_POST['edit_cancel']) || isset($_POST['delete_cancel']) || + isset($_POST['delete_department_confirm']) || isset($_POST['delete_lock'])){ + + del_lock ($this->dn); + unset($this->depdabs); + $this->deptabs= NULL; + unset ($_SESSION['objectinfo']); + } + + + /* Headpage or normal plugin screen? */ + if ($this->deptabs == NULL){ + /* Check sorting variable */ + $this->reload(); + + /* Check for exeeded sizelimit */ + if (($message= check_sizelimit()) != ""){ + return($message); + } + + /* Show main page */ + $smarty->assign("departments", $this->departments); + $smarty->assign("search_image", get_template_path('images/search.png')); + $smarty->assign("tree_image", get_template_path('images/tree.png')); + $smarty->assign("infoimage", get_template_path('images/info.png')); + $smarty->assign("launchimage", get_template_path('images/launch.png')); + $smarty->assign("deplist", $this->config->idepartments); + foreach( array("depselect", "regex") as $type){ + $smarty->assign("$type", $depfilter[$type]); + } + + /* Extend if we are not using javascript */ + $smarty->assign("apply", apply_filter()); + $smarty->assign("alphabet", generate_alphabet()); + $smarty->assign("hint", print_sizelimit_warning()); + + $display= $smarty->fetch(get_template_path('headpage.tpl', TRUE)); + return($display); + } + + /* Show main page (tabs) */ + $display= $this->deptabs->execute(); + + $display.= "

\n"; + $display.= "\n"; + $display.= " \n"; + $display.= "\n"; + $display.= "

"; + + return ($display); + } + + + function reload() + { + /* Get config */ + $depfilter= get_global('depfilter'); + + /* Set base for all searches */ + $base= $depfilter['depselect']; + + /* Regex filter? */ + if ($depfilter['regex'] != ""){ + $regex= $depfilter['regex']; + } else { + $regex= "*"; + } + + /*Get all gosaDepartments */ + $res= get_list($this->ui->subtreeACL, "(&(|(ou=$regex)(description=$regex))(objectClass=gosaDepartment))", TRUE, $base, array("ou", "description"), TRUE); + + $this->departments= array(); + foreach ($res as $value){ + $title= convert_department_dn($value["dn"]); + $this->departments[$title]= "$title [".$value["description"][0]."]"; + } + natcasesort ($this->departments); + reset ($this->departments); + } + + function remove_from_parent() + { + $ldap= $this->config->get_ldap_link(); + $ldap->cd ($this->dn); + $ldap->recursive_remove(); + + /* Optionally execute a command after we're done */ + $this->postremove(); + + /* Delete references to object groups */ + $ldap->cd ($this->config->current['BASE']); + $ldap->search ("(&(objectClass=gosaGroupOfNames)(member=".$this->dn."))", array("cn")); + while ($ldap->fetch()){ + $og= new ogroup($this->config, $ldap->getDN()); + unset($og->member[$this->dn]); + $og->save (); + } + + } + + function remove_lock() + { + if (isset($this->dn)){ + del_lock ($this->dn); + } + } + +} + +?> diff --git a/plugins/admin/departments/generic.tpl b/plugins/admin/departments/generic.tpl new file mode 100644 index 000000000..480dfd9a6 --- /dev/null +++ b/plugins/admin/departments/generic.tpl @@ -0,0 +1,76 @@ + + + + + + +
+

{t}Properties{/t}

+ + + + + + + + + + + + + + + + + + + + + + +
{t}Name of department{/t}{$must}
{t}Description{/t}{$must} + +
{t}Category{/t} + +

{t}Base{/t}{$must} +
+ +
+   + +

{t}Location{/t}

+ + + + + + + + + + + + + + + + + + + + + +
{t}State{/t}
{t}Location{/t}
{t}Address{/t} +
{t}Phone{/t}
{t}Fax{/t}
+ +
+ + + diff --git a/plugins/admin/departments/headpage.tpl b/plugins/admin/departments/headpage.tpl new file mode 100644 index 000000000..7015359a8 --- /dev/null +++ b/plugins/admin/departments/headpage.tpl @@ -0,0 +1,60 @@ + + + + + +
+
+

+ {t}List of departments{/t} {$hint} +

+
+
+

+ +
+   +   +   + +

+
+
+
+

[i]{t}Information{/t}

+
+
+

+ {t}This menu allows to create, delete and edit selected departments. Having a large size of departments, you might prefer the range selectors on top of the department list.{/t} +

+

+ {t}-Edit- and -New department- will provide an assistant to aid you when performing changes on your departments. -Delete- will ask you for confirmation before really deleting anything.{/t} +

+
+
+
+

[F]{t}Filters{/t}

+
+
+

+ + {$alphabet} +
+

+

+ +
 {t}Display subdepartments of{/t}
+

+

+ +
 {t}Display departments matching{/t}
+

+ {$apply} +
+
+ + diff --git a/plugins/admin/departments/main.inc b/plugins/admin/departments/main.inc new file mode 100644 index 000000000..ee6e0bf3b --- /dev/null +++ b/plugins/admin/departments/main.inc @@ -0,0 +1,55 @@ +remove_lock(); + del_lock ($ui->dn); + sess_del ('department'); + } +} else { + /* Create usermanagement object on demand */ + if (!isset($_SESSION['department']) || (isset($_GET['reset']) && $_GET['reset'] == 1)){ + $_SESSION['department']= new departmentManagement($config, $ui); + } + $department= $_SESSION['department']; + $output= $department->execute(); + + /* Page header*/ + if (isset($_SESSION['objectinfo'])){ + $display= print_header(get_template_path('images/department.png'), _("Department management"), " ".$_SESSION['objectinfo']); + } else { + $display= print_header(get_template_path('images/department.png'), _("Department management")); + } + + /* Reset requested? */ + if (isset($_GET['reset']) && $_GET['reset'] == 1){ + del_lock ($ui->dn); + sess_del ('department'); + } + + /* Show and save dialog */ + $department->save_object(); + $display.= $output; + $_SESSION['department']= $department; +} + +?> diff --git a/plugins/admin/departments/remove.tpl b/plugins/admin/departments/remove.tpl new file mode 100644 index 000000000..dcad13837 --- /dev/null +++ b/plugins/admin/departments/remove.tpl @@ -0,0 +1,19 @@ +
+  {t}Warning{/t} +
+ +

+ {$info} + {t}This includes all accounts, systems, etc. in this subtree. Please double check if your really want to do this since there is no way for GOsa to get your data back.{/t} +

+ +

+ {t}Best thing to do before performing this action would be to save the current contents of your LDAP tree in a file. So - if you've done so - press Delete to continue or Cancel to abort.{/t} +

+ +

+ +   + +

+ diff --git a/plugins/admin/departments/tabs_department.inc b/plugins/admin/departments/tabs_department.inc new file mode 100644 index 000000000..de5e877d1 --- /dev/null +++ b/plugins/admin/departments/tabs_department.inc @@ -0,0 +1,34 @@ +base= $this->by_object['department']->base; + } + + function check() + { + return (tabs::check(TRUE)); + } + + + function save() + { + $baseobject= $this->by_object['department']; + $new_dn= 'ou='.$baseobject->ou.','.$baseobject->base; + + if ($this->dn != $new_dn && $this->dn != "new"){ + $baseobject->recursive_move($this->dn, $new_dn); + } + $this->dn= $new_dn; + + tabs::save(TRUE); + } + +} + +?> diff --git a/plugins/admin/groups/acl.tpl b/plugins/admin/groups/acl.tpl new file mode 100644 index 000000000..b12c32af5 --- /dev/null +++ b/plugins/admin/groups/acl.tpl @@ -0,0 +1,24 @@ + + + + + + +
+ {t}Object{/t} + + +   + {if $javascript ne "true"} + + {/if} + + + {t}Apply this acl only for users own entries{/t} +
+ +

+   +

diff --git a/plugins/admin/groups/acl_definition.inc b/plugins/admin/groups/acl_definition.inc new file mode 100644 index 000000000..d3ee1ecf7 --- /dev/null +++ b/plugins/admin/groups/acl_definition.inc @@ -0,0 +1,179 @@ + "LDAP name", + "create" => "Create", + "delete" => "Delete", + "description" => "Description", + "gosaApplicationExecute" => "Execute", + "gosaApplicationFlags" => "Modify flags", + "gosaApplicationName" => "Visible name"); +$ACLD['department']= array("businessCategory", + "description", + "facsimileTelephoneNumber", + "l", + "ou", + "postalAddress", + "st", + "telephoneNumber"); +$ACLD['gofax']= array("cn", + "create", + "description", + "facsimileAlternateTelephoneNumber", + "facsimileTelephoneNumber", + "faxReport", + "goFaxBlocklist", + "goFaxDeliveryMode", + "goFaxFormat", + "goFaxIsEnabled", + "goFaxLanguage", + "goFaxPrinter", + "goFaxRBlockgroups", + "goFaxSBlockgroups", + "gosaMailForwardingAddress"); +$ACLD['blocklists']= array("cn", + "create", + "description", + "goFaxBlocklist"); +$ACLD['group']= array("cn", + "create", + "delete", + "description", + "force_gid", + "password", + "gidNumber"); +$ACLD['appgroup']= array(); +$ACLD['all']= array(); +$ACLD['mailgroup']= array("default_permission", + "imap_perms", + "member_permissions", + "mail", + "gosaMailAlternateAddress", + "gosaMailForwardingAddress", + "gosaMailQuota", + "gosaMailServer"); +$ACLD['terminal']= array("gotoAdaptPath", + "gotoAutoFs", + "gotoBootKernel", + "gotoFilesystem", + "gotoFontPath", + "gotoKernelParameters", + "gotoLdapServer", + "gotoLpdEnable", + "gotoLpdServer", + "gotoMode", + "gotoModule", + "gotoModules", + "gotoNtpServer", + "gotoScannerEnable", + "gotoSwapServer", + "gotoSyslogServer", + "gotoTerminalPath", + "gotoXColordepth", + "gotoXDriver", + "gotoXHsync", + "gotoXKbLayout", + "gotoXKbModel", + "gotoXKbVariant", + "gotoXMethod", + "gotoXMouseButtons", + "gotoXMousePort", + "gotoXMouseType", + "gotoXResolution", + "gotoXVsync", + "gotoXdmcpServer", + "login", + "password"); +$ACLD['user']= array("academicTitle", + "create", + "delete", + "certificateSerialNumber", + "certificates", + "departmentNumber", + "description", + "employeeNumber", + "employeeType", + "facsimileTelephoneNumber", + "functionalTitle", + "givenName", + "gouvernmentOrganizationalPersonLocality", + "gouvernmentOrganizationalUnit", + "gouvernmentOrganizationalUnitDescription", + "gouvernmentOrganizationalUnitSubjectArea", + "homePhone", + "homePostalAddress", + "houseIdentifier", + "ivbbLastDeliveryCollective", + "jpegPhoto", + "kerberos", + "l", + "labeledURI", + "mobile", + "o", + "ou", + "pager", + "password", + "personalTitle", + "postalAddress", + "postalCode", + "publicVisible", + "role", + "roomNumber", + "sn", + "st", + "street", + "telephoneNumber", + "uid", + "vocation"); +$ACLD['mail']= array("custom_sieve", + "gosaMailAlternateAddress", + "gosaMailDeliveryMode", + "gosaMailForwardingAddress", + "gosaMailMaxSize", + "gosaMailQuota", + "gosaMailServer", + "gosaSpamMailbox", + "gosaSpamSortLevel", + "gosaVacationMessage", + "mail", + "only_local"); +$ACLD['posix']= array("allowedHosts", + "force_ids", + "gidNumber", + "gosaDefaultLanguage", + "gosaDefaultPrinter", + "gosaHostACLD", + "gosaHostAcl", + "groupMembership", + "homeDirectory", + "kerberos", + "loginShell", + "memberUid", + "shadow", + "shadowExpire", + "shadowInactive", + "shadowMax", + "shadowMin", + "shadowWarning", + "uidNumber"); +$ACLD['samba']= array("acctFlags", + "allow_pwchange", + "homeDrive", + "no_password_required", + "profilePath", + "scriptPath", + "smbHome", + "temporary_disable"); +$ACLD['proxy']= array("gosaProxyAcctFlags", + "gosaProxyWorkingStart", + "gosaProxyWorkingStop"); + +$ACLD['pureftpd']= array("FTPUploadBandwidth", + "FTPDownloadBandwidth", + "FTPQuotaFiles", + "FTPQuotaFiles", + "FTPUploadRatio", + "FTPDownloadRatio"); + +$ACLD['global-addressbook']= array("create", "delete"); +?> diff --git a/plugins/admin/groups/application.tpl b/plugins/admin/groups/application.tpl new file mode 100644 index 000000000..4b2282647 --- /dev/null +++ b/plugins/admin/groups/application.tpl @@ -0,0 +1,28 @@ + + + + + + + +
+ {t}Used applications{/t} +
+ +
+ +
+ +
+
+ +
+ {t}Available applications{/t} +
+ +
+ diff --git a/plugins/admin/groups/application_options.tpl b/plugins/admin/groups/application_options.tpl new file mode 100644 index 000000000..c20e05e13 --- /dev/null +++ b/plugins/admin/groups/application_options.tpl @@ -0,0 +1,12 @@ +{t}Application options{/t} + +{$table} + +
+ +

+ +   + +

+ diff --git a/plugins/admin/groups/class_groupAcl.inc b/plugins/admin/groups/class_groupAcl.inc new file mode 100644 index 000000000..3ef237aa9 --- /dev/null +++ b/plugins/admin/groups/class_groupAcl.inc @@ -0,0 +1,242 @@ + "Eins ist toll", "zwei" => "Zwei ist noch besser"); + + /* Helpers */ + var $department= ""; + var $objects= array(); + var $object= ""; + var $current_acl= ""; + var $selfflag= FALSE; + + + /* attribute list for save action */ + var $attributes= array(); + var $objectclasses= array("gosaObject"); + + function acl ($config, $dn= NULL) + { + plugin::plugin($config, $dn); + + /* WorkAround */ + include "acl_definition.inc"; + $this->objects= $ACLD; + $this->object= reset(array_keys($this->objects)); + + $this->selfflag= FALSE; + if (isset($this->attrs['gosaSubtreeACL'][0])){ + $this->current_acl= preg_replace("/^[^:]*:/", "", $this->attrs['gosaSubtreeACL'][0]); + if (preg_match("/^!:/", $this->attrs['gosaSubtreeACL'][0])){ + $this->selfflag= TRUE; + } + } + + /* This is allways true */ + $this->is_account= TRUE; + } + + function execute() + { + /* Do we represent a valid group? */ + if (!$this->is_account && $this->parent == NULL){ + $display= " ". + _("This 'dn' is no acl container.").""; + return ($display); + } + + /* Show main page */ + $smarty= get_smarty(); + if ($_SESSION['js']==FALSE){ + $smarty->assign("javascript", "false"); + } else { + $smarty->assign("javascript", "true"); + } + $smarty->assign("object", $this->object); + $obj= array(); + foreach($this->objects as $key => $value){ + $obj[$key]= $key; + } + if ($this->selfflag){ + $smarty->assign("selfflag", "checked"); + } else { + $smarty->assign("selfflag", ""); + } + $smarty->assign("objects", $obj); + $display= $smarty->fetch (get_template_path('acl.tpl', TRUE)); + + /* Show acl stuff */ + $this->acl= get_module_permission (array($this->current_acl), $this->object, ""); + $display.= $this->print_attributes ($this->objects[$this->object]); + return ($display); + } + + + function remove_from_parent() + { + plugin::remove_from_parent(); + + $this->attrs['gosaSubtreeACL']= array(); + + $ldap= $this->config->get_ldap_link(); + $ldap->cd($this->dn); + $ldap->modify($this->attrs); + show_ldap_error($ldap->get_error()); + } + + + /* Save data to object */ + function save_object() + { + plugin::save_object(); + + if (!isset($_POST['object'])){ + return; + } + + /* Strip of old information */ + if ($this->object == "all"){ + $this->current_acl= preg_replace ( "/[,]?all[,]?/", "", $this->current_acl); + } + $this->current_acl= preg_replace ( "/[,]?$this->object#[^,]*[,]?/", "", $this->current_acl); + + /* assemble new attributes */ + $attrs= ""; + if (isset($_POST['all'])){ + $attrs.= "#all"; + } + if ($this->object != "all" && !isset($_POST['all']) && $this->object != ""){ + foreach ($this->objects[$this->object] as $key => $val){ + if (is_integer($key)){ + $aname= $val; + } else { + $aname= $key; + } + if (isset($_POST[$aname])){ + $attrs.= "#$aname"; + } + } + } + + /* append information */ + if ($this->current_acl != "" && $attrs != ""){ + $this->current_acl.= ","; + } + if ($attrs != ""){ + $tmp= $this->object; + $attrs= $tmp.$attrs; + } + $this->current_acl.= $attrs; + if (preg_match("/all#all/", $this->current_acl)){ + $this->current_acl= "all"; + } + if (preg_match("/^all,/", $this->current_acl)){ + $this->current_acl= "all"; + } + + /* Save current object selection */ + if (isset($_POST['object'])){ + $this->object= $_POST['object']; + } + if (isset($_POST['selfflag'])){ + $this->selfflag= TRUE; + } else { + $this->selfflag= FALSE; + } + + } + + + /* Save to LDAP */ + function save() + { + /* Write back to LDAP */ + $ldap= $this->config->get_ldap_link(); + + /* Read stuff and only modify subtreeACL entries */ + plugin::save(); + + if ($this->current_acl != ""){ + if ($this->selfflag){ + $this->attrs['gosaSubtreeACL']= "!:".$this->current_acl; + } else { + $this->attrs['gosaSubtreeACL']= ":".$this->current_acl; + } + } else { + $objectclasses= array(); + foreach ($this->attrs['objectClass'] as $oc){ + if (!preg_match('/gosaObject/i', $oc)){ + $objectclasses[]= $oc; + } + } + $this->attrs['objectClass']= $objectclasses; + $this->attrs['gosaSubtreeACL']= array(); + } + + /* Modify class */ + $ldap->cd($this->dn); + $ldap->modify($this->attrs); + show_ldap_error($ldap->get_error()); + } + + + function print_attributes ($name) + { + $display= "acl, "all") == ""){ + $display.= " checked"; + } + $display.= ">"._("All fields are writeable")."
"; + + # Put strings in right order + asort ($name); + + # Generate checklist + $display.= "\n"; + $switch= 0; + foreach ($name as $key => $val){ + if ($switch == 0){ + $display.= " \n"; + } + + if (is_integer($key)){ + $display.= ""; + } else { + $display.= ""; + } + + if ($switch++ == 1){ + $display.= " \n"; + $switch= 0; + } + } + + if ($switch == 1){ + $display.= ""; + } + $display.= "
acl, "$val") == ""){ + $display.= "checked"; + } + $display.= ">$valacl, "$key") == ""){ + $display.= "checked"; + } + $display.= ">"._($val)."
\n"; + + return ($display); + } + +} + +?> diff --git a/plugins/admin/groups/class_groupApplication.inc b/plugins/admin/groups/class_groupApplication.inc new file mode 100644 index 000000000..593d4e13d --- /dev/null +++ b/plugins/admin/groups/class_groupApplication.inc @@ -0,0 +1,303 @@ + "Eins ist toll", "zwei" => "Zwei ist noch besser"); + + /* Appgroup attributes */ + var $gosaMemberApplication= array(); + + /* Helpers */ + var $department= ""; + var $apps= array(); + var $used_apps= array(); + var $opt_edit= FALSE; + var $option_name= array(); + var $option_value= array(); + var $appoption= array(); + var $table= ""; + + /* attribute list for save action */ + var $attributes= array(); + var $objectclasses= array("gosaApplicationGroup"); + + function appgroup ($config, $dn= NULL) + { + plugin::plugin ($config, $dn); + + /* Load member applications */ + if (isset ($this->attrs["gosaMemberApplication"][0])){ + for ($i= 0; $i<$this->attrs["gosaMemberApplication"]["count"]; $i++){ + $this->gosaMemberApplication[]= + $this->attrs["gosaMemberApplication"][$i]; + } + } + + /* Load application options */ + if (isset($this->attrs['gosaApplicationParameter'])){ + for ($i= 0; $i<$this->attrs['gosaApplicationParameter']['count']; $i++){ + $option= preg_replace('/^[^:]+:/', '', + $this->attrs['gosaApplicationParameter'][$i]); + $name= preg_replace('/:.*$/', '', + $this->attrs['gosaApplicationParameter'][$i]); + $this->appoption[$name]= $option; + } + } + + } + + function execute() + { + /* Do we need to flip is_account state? */ + if (isset($_POST['modify_state'])){ + $this->is_account= !$this->is_account; + } + + /* Do we represent a valid group? */ + if (!$this->is_account && $this->parent == NULL){ + $display= " ". + _("This 'dn' is no appgroup.").""; + return ($display); + } + + /* Show tab dialog headers */ + $display= ""; + if ($this->parent != NULL){ + if ($this->is_account){ + $display= $this->show_header(_("Remove applications"), + _("This group has application features enabled. You can disable them by clicking below.")); + } else { + $display.= $this->show_header(_("Create applications"), + _("This group has application features disabled. You can enable them by clicking below.")); + return ($display); + } + } + + /* Check sorting variable */ + $this->reload(); + + /* Delete app from group */ + if (isset($_POST['del_app']) && isset ($_POST['used_apps'])){ + foreach ($_POST['used_apps'] as $value){ + unset ($this->used_apps["$value"]); + $this->removeApp($value); + } + } + + /* Add app to group */ + if (isset($_POST['add_app']) && isset($_POST['apps'])){ + foreach ($_POST['apps'] as $value){ + $this->used_apps["$value"]= $this->apps[$value]; + asort($this->used_apps); + $this->addApp($value); + } + } + + /* Edit application options? */ + if (isset($_POST['edit_options']) && isset($_POST['used_apps'])){ + $appname= $_POST['used_apps'][0]; + + /* We've got the appname, get parameters from ldap */ + $ldap= $this->config->get_ldap_link(); + $ldap->cd($this->config->current['BASE']); + $ldap->search("(&(objectClass=gosaApplication)(cn=$appname))"); + if ($ldap->count() != 1){ + print_red (_("The selected application name is not uniq. Please check your LDAP.")); + } else { + $attrs= $ldap->fetch(); + if(isset($attrs['gosaApplicationParameter'])){ + $this->dialog= TRUE; + + /* Fill name and value arrays */ + for ($i= 0; $i<$attrs['gosaApplicationParameter']['count']; $i++){ + $option= preg_replace('/^[^:]+:/', '', + $attrs['gosaApplicationParameter'][$i]); + $name= preg_replace('/:.*$/', '', + $attrs['gosaApplicationParameter'][$i]); + $this->option_name[$i]= $name; + + /* Fill with values from application, default should be + loaded by the external scripts */ + if (isset($this->appoption[$name])){ + $this->option_value[$i]= $this->appoption[$name]; + } + } + + /* Create edit field */ + $table= ""; + for ($i= 0; $i < count($this->option_name); $i++){ + if (isset($this->option_value[$i])){ + $value= $this->option_value[$i]; + } else { + $value= ""; + } + $table.=""; + } + $table.= "
".$this->option_name[$i]."". + "
"; + $this->table= $table; + } else { + print_red (_("The selected application has no options.")); + } + } + } + + /* Cancel edit options? */ + if (isset($_POST['edit_options_cancel'])){ + $this->dialog= FALSE; + } + + /* Finish edit options? */ + if (isset($_POST['edit_options_finish'])){ + $this->dialog= FALSE; + + /* Save informations passed by the user */ + $this->option_value= array(); + for ($i= 0; $ioption_name); $i++){ + $this->appoption[$this->option_name[$i]]= $_POST["value$i"]; + $this->is_modified= TRUE; + } + } + + /* Prepare templating stuff */ + $smarty= get_smarty(); + $smarty->assign("used_apps", $this->used_apps); + $apps= array(); + foreach ($this->apps as $key => $value){ + if (!array_key_exists($key, $this->used_apps)){ + $apps["$key"]= "$value"; + } + } + $smarty->assign("apps", $apps); + + /* Show main page */ + if ($this->dialog){ + $smarty->assign("table", $this->table); + $display.= $smarty->fetch (get_template_path('application_options.tpl', TRUE)); + } else { + $display.= $smarty->fetch (get_template_path('application.tpl', TRUE)); + } + + return ($display); + } + + + function remove_from_parent() + { + plugin::remove_from_parent(); + + $this->attrs["gosaMemberApplication"]= array(); + + $ldap= $this->config->get_ldap_link(); + $ldap->cd($this->dn); + $ldap->modify($this->attrs); + show_ldap_error($ldap->get_error()); + + /* Optionally execute a command after we're done */ + $this->handle_post_events("remove"); + } + + + /* Save data to object */ +# function save_object() +# { +# plugin::save_object(); +# } + + + /* Save to LDAP */ + function save() + { + plugin::save(); + + /* Copy members */ + $this->attrs["gosaMemberApplication"]= array(); + foreach ($this->gosaMemberApplication as $val){ + $this->attrs["gosaMemberApplication"][]= stripslashes($val); + } + + /* Are there application parameters to be saved */ + $this->attrs['gosaApplicationParameter']= array(); + foreach($this->appoption as $name => $value){ + if ($value != ""){ + $this->attrs['gosaApplicationParameter'][]= "$name:$value"; + } + } + + /* Write back to LDAP */ + $ldap= $this->config->get_ldap_link(); + $ldap->cd($this->dn); + $ldap->modify($this->attrs); + show_ldap_error($ldap->get_error()); + + /* Optionally execute a command after we're done */ + if ($this->initially_was_account == $this->is_account){ + if ($this->is_modified){ + $this->handle_post_events("mofify"); + } + } else { + $this->handle_post_events("add"); + } + + } + + function check() + { + $message= array(); + return ($message); + } + + + function reload() + { + /* Generate applist */ + $this->apps= array(); + $ldap= $this->config->get_ldap_link(); + $ldap->cd ($this->config->current['BASE']); + $ldap->search ("(objectClass=gosaApplication)"); + while ($attrs= $ldap->fetch()){ + if (isset($attrs["description"][0])){ + $this->apps[$attrs["cn"][0]]= + $attrs["cn"][0]." (". + $attrs["description"][0].")"; + } else { + $this->apps[$attrs["cn"][0]]= + $attrs["cn"][0]; + } + } + natcasesort ($this->apps); + reset ($this->apps); + + $this->used_apps= array(); + foreach ($this->gosaMemberApplication as $value){ + $this->used_apps[$value]= $this->apps[$value]; + } + } + + function addApp($cn) + { + $this->gosaMemberApplication[]= $cn; + $this->gosaMemberApplication= array_unique($this->gosaMemberApplication); + $this->is_modified= TRUE; + } + + + function removeApp($cn) + { + $temp= array(); + foreach ($this->gosaMemberApplication as $value){ + if ($value != $cn){ + $temp[]= $value; + } + } + $this->gosaMemberApplication= $temp; + $this->is_modified= TRUE; + } + +} + +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/plugins/admin/groups/class_groupGeneric.inc b/plugins/admin/groups/class_groupGeneric.inc new file mode 100644 index 000000000..f4fc95da9 --- /dev/null +++ b/plugins/admin/groups/class_groupGeneric.inc @@ -0,0 +1,644 @@ + "Eins ist toll", "zwei" => "Zwei ist noch besser"); + + /* Group attributes */ + var $cn= ""; + var $description= ""; + var $gidNumber= ""; + var $memberUid= array(); + + /* Helpers */ + var $base= ""; + var $force_gid= FALSE; + var $fon_group= FALSE; + var $smbgroup= FALSE; + var $groupType= FALSE; + var $samba3= FALSE; + var $sambaSID= ""; + var $sambaDomainName= "DEFAULT"; + var $SID= ""; + var $ridBase= 0; + var $members= array(); + var $users= array(); + var $allusers= array(); + var $department= ""; + var $saved_gidNumber= ""; + var $oldgroupType= ""; + var $orig_dn= ""; + var $has_mailAccount= FALSE; + var $group_dialog= FALSE; + + /* attribute list for save action */ + var $attributes= array("cn", "description", "gidNumber"); + var $objectclasses= array("top", "posixGroup"); + + function group ($config, $dn= NULL) + { + plugin::plugin ($config, $dn); + + /* Load attributes depending on the samba version */ + $this->samba3= ($config->current['SAMBAVERSION'] == 3); + $this->orig_dn= $dn; + + /* Get member list */ + if (isset($this->attrs['memberUid'][0])){ + $tmp= array(); + for ($i= 0; $i<$this->attrs['memberUid']['count']; $i++){ + $tmp[]= $this->attrs['memberUid'][$i]; + } + $this->memberUid= $tmp; + sort ($this->memberUid); + } + + /* Save gidNumber for later use */ + if (isset($this->attrs['gidNumber'])){ + $this->saved_gidNumber= $this->attrs['gidNumber'][0]; + } + + /* Is a samba group? */ + if (isset($this->attrs['objectClass'])){ + if (array_search ('sambaGroupMapping', $this->attrs['objectClass']) == NULL ){ + $this->smbgroup= FALSE; + } else { + $this->smbgroup= TRUE; + if (isset($this->attrs['sambaSID'])){ + $this->sambaSID= $this->attrs['sambaSID'][0]; + } + } + if (array_search ('goFonPickupGroup', $this->attrs['objectClass']) == NULL ){ + $this->fon_group= FALSE; + } else { + $this->fon_group= TRUE; + } + } + + /* Set mail flag */ + if (isset($this->attrs['objectClass']) && in_array('gosaMailAccount', $this->attrs['objectClass'])){ + $this->has_mailAccount= TRUE; + } + + /* Get samba Domain in case of samba 3 */ + if ($this->samba3 && $this->sambaSID != ""){ + $this->SID= preg_replace ("/-[^-]+$/", "", $this->sambaSID); + $ldap= $this->config->get_ldap_link(); + $ldap->cd($this->config->current['BASE']); + $ldap->search ("(&(objectClass=sambaDomain)(sambaSID=$this->SID))"); + if ($ldap->count() != 0){ + $attrs= $ldap->fetch(); + $this->ridBase= $attrs['sambaAlgorithmicRidBase'][0]; + + /* Get domain name for SID */ + $this->sambaDomainName= "DEFAULT"; + foreach ($this->config->data['SERVERS']['SAMBA'] as $key => $val){ + if ($val['SID'] == $this->SID){ + $this->sambaDomainName= $key; + break; + } + } + } else { + if (isset($this->config->current['RIDBASE'])){ + $this->sambaDomainName= "DEFAULT"; + $this->ridBase= $this->config->current['RIDBASE']; + $this->SID= $this->config->current['SID']; + } else { + print_red(_("Can't find this groups SID in LDAP or in your configuration file!")); + } + } + + /* Get group type */ + $this->groupType= (int)substr(strrchr($this->sambaSID, "-"), 1); + if ($this->groupType < 500 || $this->groupType > 553){ + $this->groupType= 0; + } + $this->oldgroupType= $this->groupType; + } + + /* Get global filter config */ + if (!is_global("gufilter")){ + $ui= get_userinfo(); + $base= get_base_from_people($ui->dn); + $gufilter= array( "dselect" => $base, + "regex" => "*"); + register_global("gufilter", $gufilter); + } + $gufilter= get_global('gufilter'); + + /* This is always an account */ + $this->is_account= TRUE; + $this->reload(); + } + + function execute() + { + /* Do we represent a valid group? */ + if (!$this->is_account && $this->parent == NULL){ + $display= " ". + _("This 'dn' is no group.").""; + return ($display); + } + + /* Delete user from group */ + if (isset($_POST['del_users']) && isset($_POST['members'])){ + foreach ($_POST['members'] as $value){ + unset ($this->members["$value"]); + $this->removeUser($value); + } + $this->reload(); + } + + /* Add objects? */ + if (isset($_POST["edit_membership"])){ + $this->group_dialog= TRUE; + $this->dialog= TRUE; + } + + /* Add objects finished? */ + if (isset($_POST["add_users_finish"]) || isset($_POST["add_users_cancel"])){ + $this->group_dialog= FALSE; + $this->dialog= FALSE; + } + + /* Add user to group */ + if (isset($_POST['add_users_finish']) && isset($_POST['users'])){ + foreach ($_POST['users'] as $value){ + $this->members["$value"]= $this->allusers[$value]; + asort($this->members); + $this->addUser($value); + } + $this->reload(); + } + + /* Assign templating stuff */ + $smarty= get_smarty(); + if ($this->samba3){ + $smarty->assign("samba3", "true"); + } else { + $smarty->assign("samba3", ""); + } + + /* Manage object add dialog */ + if ($this->group_dialog){ + + /* Save data */ + $gufilter= get_global("gufilter"); + foreach( array("dselect", "regex") as $type){ + if (isset($_POST[$type])){ + $gufilter[$type]= $_POST[$type]; + } + } + if (isset($_GET['search'])){ + $s= mb_substr($_GET['search'], 0, 1, "UTF8")."*"; + if ($s == "**"){ + $s= "*"; + } + $gufilter['regex']= $s; + } + $regex= preg_replace('/[*]/', ".*", $gufilter['regex']); + register_global("gufilter", $gufilter); + $this->reload(); + + /* Show dialog */ + $smarty->assign("search_image", get_template_path('images/search.png')); + $smarty->assign("launchimage", get_template_path('images/small_filter.png')); + $smarty->assign("tree_image", get_template_path('images/tree.png')); + $smarty->assign("deplist", $this->config->idepartments); + $smarty->assign("alphabet", generate_alphabet()); + foreach( array("dselect", "regex") as $type){ + $smarty->assign("$type", $gufilter[$type]); + } + $smarty->assign("hint", print_sizelimit_warning()); + + $users= array(); + foreach ($this->allusers as $key => $value){ + if (!array_key_exists($key, $this->members)){ + if (preg_match("/^$regex/i", $key)){ + $users[$key]= $value; + } + } + } + $smarty->assign("users", $users); + $display= $smarty->fetch (get_template_path('group_objects.tpl', TRUE, dirname(__FILE__))); + return ($display); + } + + /* Bases / Departments */ + if ($this->dn == "new"){ + $ui= get_userinfo(); + $this->base= dn2base($ui->dn); + } else { + if (isset($_POST['base'])){ + $this->base= $_POST['base']; + } else { + $this->base= preg_replace ("/^[^,]+,[^,]+,/", "", $this->dn); + } + } + + $smarty->assign("bases", $this->config->idepartments); + $smarty->assign("base_select", $this->base); + $smarty->assign("department", $this->department); + + if ($this->samba3){ + $domains= array(); + foreach($this->config->data['SERVERS']['SAMBA'] as $name => $content){ + $domains[$name]= $name; + } + $smarty->assign("sambaDomains", $domains); + $smarty->assign("sambaDomainName", $this->sambaDomainName); + $groupTypes= array(0 => _("Samba group"), 512 => _("Domain admins"), 513 => _("Domain users"), + 514 => _("Domain guests")); + + /* Don't loose special groups! If not key'ed above, add it to + the combo box... */ + if ($this->groupType >= 500 && $this->groupType <= 553 && !isset($groupTypes[$this->groupType])){ + $groupTypes[$this->groupType]= sprintf(_("Special group (%d)"), $this->groupType); + } + + $smarty->assign("groupTypes", $groupTypes); + $smarty->assign("groupType", $this->groupType); + } + + /* Members and users */ + $smarty->assign("members", $this->members); + + /* Checkboxes */ + foreach (array("force_gid", "smbgroup") as $val){ + if ($this->$val == "1"){ + $smarty->assign("$val", "checked"); + } else { + $smarty->assign("$val", ""); + } + } + if ($this->force_gid != "1"){ + $smarty->assign("forceMode", "disabled"); + } + $smarty->assign("force_gidACL", chkacl($this->acl, "gidNumber")); + $smarty->assign("sambaDomainNameACL", chkacl($this->acl, "sambaDomainName")); + if ($this->fon_group){ + $smarty->assign("fon_group", "checked"); + } + $smarty->assign("fon_groupACL", chkacl($this->acl, "fon_group")); + + /* Fields */ + foreach (array("cn", "description", "gidNumber") as $val){ + $smarty->assign("$val", $this->$val); + $smarty->assign("$val"."ACL", chkacl($this->acl, "$val")); + } + + /* Show main page */ + $smarty->assign("alphabet", generate_alphabet(10)); + $smarty->assign("search_image", get_template_path('images/search.png')); + $smarty->assign("launchimage", get_template_path('images/small_filter.png')); + $smarty->assign("tree_image", get_template_path('images/tree.png')); + $smarty->assign("deplist", $this->config->idepartments); + return($smarty->fetch (get_template_path('generic.tpl', TRUE))); + } + + function addUser($uid) + { + $this->memberUid[]= $uid; + $this->memberUid= array_unique($this->memberUid); + } + + function removeUser($uid) + { + $temp= array(); + foreach ($this->memberUid as $value){ + if ($value != $uid){ + $temp[]= $value; + } + } + $this->memberUid= $temp; + } + + + /* Reload data */ + function reload() + { + /* Generate userlists */ + $this->last_sorting= "invalid"; + $this->users= array(); + $ldap= $this->config->get_ldap_link(); + $gufilter= get_global("gufilter"); + $ldap->cd ($gufilter['dselect']); + $ldap->search ("(&(objectClass=gosaAccount)(!(objectClass=gosaUserTemplate))(!(uid=*$)))"); + natcasesort ($this->users); + reset ($this->users); + + $ldap->cd ($this->config->current['BASE']); + $ldap->search ("(&(objectClass=gosaAccount)(!(objectClass=gosaUserTemplate))(!(uid=*$)))"); + $this->allusers= array(); + while ($attrs= $ldap->fetch()){ + if (isset($attrs["givenName"][0]) && isset($attrs["sn"][0])){ + $this->allusers[$attrs["uid"][0]]= $attrs["sn"][0].", ". + $attrs["givenName"][0]. + " [".$attrs["uid"][0]."]"; + } else { + $this->allusers[$attrs["uid"][0]]= $attrs['uid'][0]; + } + } + natcasesort ($this->allusers); + reset ($this->allusers); + + /* Fill memberlist */ + $this->members= array(); + foreach ($this->memberUid as $value){ + if (isset($this->allusers[$value])){ + $this->members[$value]= $this->allusers[$value]; + } else { + $this->members[$value]= "[$value]"; + } + } + asort($this->members); + reset($this->members); + } + + + + function remove_from_parent() + { + plugin::remove_from_parent(); + + $ldap= $this->config->get_ldap_link(); + $ldap->rmdir($this->dn); + show_ldap_error($ldap->get_error()); + + /* Delete references to object groups */ + $ldap->cd ($this->config->current['BASE']); + $ldap->search ("(&(objectClass=gosaGroupOfNames)(member=".$this->dn."))", array("cn")); + while ($ldap->fetch()){ + $og= new ogroup($this->config, $ldap->getDN()); + unset($og->member[$this->dn]); + $og->save (); + } + + /* Send signal to the world that we've done */ + $this->handle_post_events("remove"); + } + + + /* Save data to object */ + function save_object() + { + /* Save additional values for possible next step */ + if (isset($_POST['groupedit'])){ + plugin::save_object(); + + $this->force_gid= 0; + $this->smbgroup= 0; + foreach (array("force_gid", "department", "base", "smbgroup") as $val) { + if (chkacl ($this->acl, "$val") == "" && isset($_POST["$val"])){ + $this->$val= $_POST["$val"]; + } + } + + /* Save sambaDomain attribute */ + if (chkacl ($this->acl, "sambaDomainName") == "" && $this->samba3 && + isset ($_POST['sambaDomainName'])){ + + $this->sambaDomainName= $_POST['sambaDomainName']; + $this->groupType= $_POST['groupType']; + } + + /* Save fon attribute */ + if (chkacl ($this->acl, "fon_group") == ""){ + if (isset ($_POST['fon_group'])){ + $this->fon_group= TRUE; + } else { + $this->fon_group= FALSE; + } + } + + } + } + + + /* Save to LDAP */ + function save() + { + /* ID handling */ + if ($this->force_gid == 0){ + if ($this->saved_gidNumber != ""){ + $this->gidNumber= $this->saved_gidNumber; + } else { + /* Calculate new, lock uids */ + $wait= 10; + while (get_lock("uidnumber") != ""){ + sleep (1); + + /* timed out? */ + if ($wait-- == 0){ + break; + } + } + add_lock ("uidnumber", "gosa"); + $this->gidNumber= $this->get_next_id("gidNumber"); + } + } + + plugin::save(); + + /* Remove objectClass for samba/phone support */ + $tmp= array(); + for ($i= 0; $iattrs["objectClass"]); $i++){ + if ($this->attrs['objectClass'][$i] != 'sambaGroupMapping' && + $this->attrs['objectClass'][$i] != 'sambaIdmapEntry' && + $this->attrs['objectClass'][$i] != 'goFonPickupGroup'){ + $tmp[]= $this->attrs['objectClass'][$i]; + } + } + $this->attrs['objectClass']= $tmp; + $ldap= $this->config->get_ldap_link(); + + /* Add samba group functionality */ + if ($this->samba3 && $this->smbgroup){ + $this->SID= $this->config->data['SERVERS']['SAMBA'][$this->sambaDomainName]['SID']; + $this->ridBase= $this->config->data['SERVERS']['SAMBA'][$this->sambaDomainName]['RIDBASE']; + + $this->attrs['objectClass'][]= 'sambaGroupMapping'; + $this->attrs['sambaGroupType']= "2"; + + /* Check if we need to create a special entry */ + if ($this->groupType == 0){ + + if ($this->sambaSID == "" || $this->oldgroupType != $this->groupType){ + $gidNumber= $this->gidNumber; + while(TRUE){ + $sid= $this->SID."-".($gidNumber*2 + $this->ridBase+1); + $ldap->cd($this->config->current['BASE']); + $ldap->search("(sambaSID=$sid)"); + if ($ldap->count() == 0){ + break; + } + $gidNumber++; + } + $this->attrs['sambaSID']= $sid; + $this->sambaSID= $sid; + } + + } else { + $this->attrs['sambaSID']=$this->SID."-".$this->groupType; + } + + /* User wants me to fake the idMappings? This is useful for + making winbind resolve the group names in a reasonable amount + of time in combination with larger databases. */ + if (isset($this->config->current['SAMBAIDMAPPING']) && + preg_match('/true/i', $this->config->current['SAMBAIDMAPPING'])){ + $this->attrs['objectClass'][]= "sambaIdmapEntry"; + } + + } + + /* Add phone functionality */ + if ($this->fon_group){ + $this->attrs['objectClass'][]= "goFonPickupGroup"; + } + + /* Take members array */ + if (count ($this->memberUid)){ + $this->attrs['memberUid']= array_unique($this->memberUid); + } + + /* New accounts need proper 'dn', propagate it to remaining objects */ + if ($this->dn == 'new'){ + $this->dn= 'cn='.$this->cn.','.get_groups_ou().$this->base; + } + + /* Save data. Using 'modify' implies that the entry is already present, use 'add' for + new entries. So do a check first... */ + $ldap->cat ($this->dn); + if ($ldap->fetch()){ + /* Modify needs array() to remove values :-( */ + if (!count ($this->memberUid)){ + $this->attrs['memberUid']= array(); + } + if ($this->samba3){ + if (!$this->smbgroup){ + $this->attrs['sambaGroupType']= array(); + $this->attrs['sambaSID']= array(); + } + } + $mode= "modify"; + } else { + $mode= "add"; + $ldap->cd($this->config->current['BASE']); + $ldap->create_missing_trees(preg_replace('/^[^,]+,/', '', $this->dn)); + } + + /* Write back to ldap */ + $ldap->cd($this->dn); + $ldap->$mode($this->attrs); + + $ret= 0; + if (show_ldap_error($ldap->get_error())){ + $ret= 1; + } + + /* Remove uid lock */ + del_lock ("uidnumber"); + + /* Post that we've done*/ + $this->handle_post_events($mode); + + return ($ret); + } + + function check() + { + $message= array(); + + /* Permissions for that base? */ + if ($this->base != ""){ + $new_dn= 'cn='.$this->cn.','.get_groups_ou().$this->base; + } else { + $new_dn= $this->dn; + } + + $ui= get_userinfo(); + $acl= get_permissions ($new_dn, $ui->subtreeACL); + $acl= get_module_permission($acl, "group", $new_dn); + if (chkacl($acl, "create") != ""){ + $message[]= _("You have no permissions to create a group on this 'Base'."); + } + + /* must: cn */ + if ($this->cn == "" && chkacl ($this->acl, "cn") == ""){ + $message[]= "The required field 'Name' is not set."; + } + + /* Check for valid input */ + if (!is_uid($this->cn)){ + $message[]= _("The field 'Name' contains invalid characters. Lowercase, numbers and dashes are allowed."); + } + + /* Check for used 'cn' */ + $ldap= $this->config->get_ldap_link(); + $ldap->cd($this->config->current['BASE']); + $ldap->search("(&(|(objectClass=gosaGroupOfNames)(objectClass=posixGroup))(cn=$this->cn))"); + if ($ldap->count() != 0){ + + /* New entry? */ + if ($this->dn == 'new'){ + $message[]= _("Value specified as 'Name' is already used."); + } + + /* Moved? */ + elseif ($new_dn != $this->orig_dn){ + $ldap->fetch(); + if ($ldap->getDN() != $this->orig_dn){ + $message[]= _("Value specified as 'Name' is already used."); + } + } + } + + /* Check ID */ + if ($this->force_gid == "1"){ + if (!is_id($this->gidNumber)){ + $message[]= _("Value specified as 'GID' is not valid."); + } else { + if ($this->gidNumber < $this->config->current['MINID']){ + $message[]= _("Value specified as 'GID' is too small."); + } + + } + } + + return ($message); + } + + function get_next_id($attrib) + { + $ids= array(); + $ldap= $this->config->get_ldap_link(); + + $ldap->cd ($this->config->current['BASE']); + $ldap->search ("($attrib=*)"); + + /* Get list of ids */ + while ($attrs= $ldap->fetch()){ + $ids[]= (int)$attrs["$attrib"][0]; + } + + /* Find out next free id near to UID_BASE */ + for ($id= $this->config->current['UIDBASE']; $id++; $id<65000){ + if (!in_array($id, $ids)){ + return ($id); + } + } + + /* Should not happen */ + if ($id == 65000){ + print_red(_("Too many users, can't allocate a free ID!")); + exit; + } + } + +} + +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/plugins/admin/groups/class_groupMail.inc b/plugins/admin/groups/class_groupMail.inc new file mode 100644 index 000000000..67be95079 --- /dev/null +++ b/plugins/admin/groups/class_groupMail.inc @@ -0,0 +1,750 @@ + "Eins ist toll", "zwei" => "Zwei ist noch besser"); + var $method= "mailMethod"; + + /* plugin specific values */ + var $mail= ""; + var $uid= ""; + var $cn= ""; + var $gosaMailAlternateAddress= array(); + var $gosaMailForwardingAddress= array(); + var $gosaMailDeliveryMode= "[L ]"; + var $gosaMailServer= ""; + var $gosaMailQuota= ""; + var $gosaMailMaxSize= ""; + var $gosaVacationMessage= ""; + var $gosaSpamSortLevel= ""; + var $gosaSpamMailbox= ""; + + var $quotaUsage= 0; + var $forward_dialog= FALSE; + var $members= array(); + var $mailusers= array(); + var $perms= array(); + var $imapacl= array('anyone' => 'p', '%members%' => 'lrsp', '' => 'p'); + + /* Helper */ + var $indexed_acl= array(); + var $indexed_user= array(); + + /* attribute list for save action */ + var $attributes= array("mail", "gosaMailServer", "gosaMailQuota", "gosaMailMaxSize", + "gosaMailDeliveryMode", "gosaSpamSortLevel", "gosaSpamMailbox", + "gosaVacationMessage"); + var $objectclasses= array("gosaMailAccount"); + + + /* constructor, if 'dn' is set, the node loads the given + 'dn' from LDAP */ + function mailgroup ($config, $dn= NULL, $ui= NULL) + { + /* Configuration is fine, allways */ + $this->config= $config; + + /* Load bases attributes */ + plugin::plugin($config, $dn); + + /* Set mailMethod to the one defined in gosa.conf */ + if (isset($this->config->current['MAILMETHOD'])){ + $method= $this->config->current['MAILMETHOD']; + if (class_exists("mailMethod$method")){ + $this->method= "mailMethod$method"; + } else { + print_red(sprintf(_("There is no mail method '%s' specified in your gosa.conf available."), $method)); + } + } + + /* Convert cn to uid in case of existing entries */ + if (isset($this->attrs['cn'][0])){ + $this->uid= $this->attrs['cn'][0]; + } + + if ($dn != NULL){ + + /* Load attributes containing arrays */ + foreach (array("gosaMailAlternateAddress", "gosaMailForwardingAddress") as $val){ + if (isset($this->attrs["$val"]["count"])){ + for ($i= 0; $i<$this->attrs["$val"]["count"]; $i++){ + array_push($this->$val, $this->attrs["$val"][$i]); + } + } + } + + /* Only do IMAP actions if gosaMailServer attribute is set */ + if (isset ($this->attrs["gosaMailServer"][0])){ + $method= new $this->method($this->config); + if ($method->connect($this->attrs["gosaMailServer"][0])){ + $quota= $method->getQuota($this->uid); + + /* Maybe the entry is not saved in new style, get + permissions from IMAP and convert them to acl attributes */ + if (!isset($this->attrs['acl'])){ + $this->imapacl= $method->getSharedFolderPermissions($this->uid); + + /* Need to filter what a member acl could be... */ + $vote= array(); + $peak= 0; + $leader= ""; + foreach ($this->imapacl as $user => $acl){ + + if ($user != "anyone" ){ + if (!isset($vote[$acl])){ + $vote[$acl]= 1; + } else { + $vote[$acl]++; + } + if ($vote[$acl] > $peak){ + $leader= $acl; + $peek= $vote[$acl]; + } + } + + } + + /* Highest count wins as %members%, remove all members + with the same acl */ + $this->imapacl['%members%']= $leader; + foreach ($this->imapacl as $user => $acl){ + if ($this->acl == $leader && in_array($user, $this->attrs['memberUid'])){ + unset($this->imapacl[$user]); + } + } + + } + + /* Update quota values */ + $this->quotaUsage= $quota['quotaUsage']; + $this->gosaMailQuota= $quota['gosaMailQuota']; + $method->disconnect(); + } + + } + + } + + /* Get global filter config */ + if (!is_global("mailfilter")){ + $ui= get_userinfo(); + $base= get_base_from_people($ui->dn); + $mailfilter= array( "depselect" => $base, + "muser" => "", + "regex" => "*"); + register_global("mailfilter", $mailfilter); + } + + /* Load permissions */ + if (isset($this->attrs['acl'])){ + for ($i= 0; $i<$this->attrs['acl']['count']; $i++){ + list($user, $permission)= split(' ', $this->attrs['acl'][$i]); + $this->imapacl[$user]= $permission; + if ($user != "anyone" && $user != "%members%"){ + unset($this->imapacl['']); + } + } + } + + /* Fill translations */ + $this->perms["lrs"]= _("read"); + $this->perms["lrsp"]= _("post"); + $this->perms["p"]= _("external post"); + $this->perms["lrsip"]= _("append"); + $this->perms["lrswipcd"]= _("write"); + } + + + function execute() + { + /* Load templating engine */ + $smarty= get_smarty(); + if ($_SESSION['js']==FALSE){ + $smarty->assign("javascript", "false"); + } else { + $smarty->assign("javascript", "true"); + } + + /* Do we need to flip is_account state? */ + if (isset($_POST['modify_state'])){ + $this->is_account= !$this->is_account; + } + + /* Do we represent a valid account? */ + if (!$this->is_account && $this->parent == NULL){ + $display= " ". + _("This 'dn' has no valid mail extensions.").""; + return ($display); + } + + /* Show tab dialog headers */ + $display= ""; + if ($this->parent != NULL){ + if ($this->is_account){ + $display= $this->show_header(_("Remove mail account"), + _("This account has mail features enabled. You can disable them by clicking below.")); + } else { + $display= $this->show_header(_("Create mail account"), + _("This account has mail features disabled. You can enable them by clicking below.")); + return ($display); + } + } + + /* Add ACL? */ + foreach ($this->indexed_user as $nr => $user){ + if (isset($_POST["add_$nr"])){ + $this->imapacl[""]= "l"; + } + if (isset($_POST["del_$nr"])){ + unset ($this->imapacl[$user]); + } + } + + /* Trigger forward add dialog? */ + if (isset($_POST['add_local_forwarder'])){ + $this->forward_dialog= TRUE; + $this->dialog= TRUE; + } + + /* Cancel forward add dialog? */ + if (isset($_POST['add_locals_cancel'])){ + $this->forward_dialog= FALSE; + $this->dialog= FALSE; + } + + /* Finished adding of locals? */ + if (isset($_POST['add_locals_finish'])){ + if (count ($_POST['local_list']) && + chkacl ($this->acl, "gosaMailForwardingAddress") == ""){ + + /* Walk through list of forwarders, ignore own addresses */ + foreach ($_POST['local_list'] as $val){ + if (!in_array ($val, $this->gosaMailAlternateAddress) && + $val != $this->mail){ + + $this->addForwarder($val); + } + } + } + $this->forward_dialog= FALSE; + $this->dialog= FALSE; + } + + /* Add forward email addresses */ + if (isset($_POST['add_forwarder'])){ + if ($_POST['forward_address'] != ""){ + + /* Valid email address specified? */ + $address= $_POST['forward_address']; + if (!is_email($address)){ + + print_red (_("You're trying to add an invalid email address ". + "to the list of forwarders.")); + + } elseif ($address == $this->mail + || in_array($address, $this->gosaMailAlternateAddress)) { + + print_red (_("Adding your one of your own addresses to the forwarders makes no sense.")); + + } else { + + /* Add it */ + if (chkacl ($this->acl, "gosaMailForwardingAddress") == ""){ + $this->addForwarder ($address); + } + + } + } + } + + /* Delete forward email addresses */ + if (isset($_POST['delete_forwarder'])){ + if (count($_POST['forwarder_list']) + && chkacl ($this->acl, "gosaMailForwardingAddress") == ""){ + + $this->delForwarder ($_POST['forwarder_list']); + } + } + + /* Add alternate email addresses */ + if (isset($_POST['add_alternate'])){ + if ($_POST['alternate_address'] != "" && + chkacl ($this->acl, "gosaMailAlternateAddress") == ""){ + + if (!is_email($_POST['alternate_address'])){ + print_red (_("You're trying to add an invalid email address to the list of alternate addresses.")); + + } elseif (($user= $this->addAlternate ($_POST['alternate_address'])) != ""){ + $ui= get_userinfo(); + if ($user != $ui->username){ + print_red (_("The address you're trying to add is already used by user")." '$user'."); + } + } + } + } + + /* Delete alternate email addresses */ + if (isset($_POST['delete_alternate']) && isset ($_POST['alternates_list'])){ + if (count($_POST['alternates_list']) && + chkacl ($this->acl, "gosaMailAlternateAddress") == ""){ + + $this->delAlternate ($_POST['alternates_list']); + } + } + + /* Show forward add dialog */ + if ($this->forward_dialog){ + $ldap= $this->config->get_ldap_link(); + + /* Save data */ + $mailfilter= get_global("mailfilter"); + foreach( array("depselect", "muser", "regex") as $type){ + if (isset($_POST[$type])){ + $mailfilter[$type]= $_POST[$type]; + } + } + if (isset($_GET['search'])){ + $s= mb_substr($_GET['search'], 0, 1, "UTF8")."*"; + if ($s == "**"){ + $s= "*"; + } + $mailfilter['regex']= $s; + } + register_global("mailfilter", $mailfilter); + + /* Get actual list */ + $mailusers= array (); + if ($mailfilter['regex'] != '*' && $mailfilter['regex'] != ""){ + $regex= $mailfilter['regex']; + $filter= "(|(mail=$regex)(gosaMailAlternateAddress=$regex))"; + } else { + $filter= ""; + } + if ($mailfilter['muser'] != ""){ + $user= $mailfilter['muser']; + $filter= "$filter(|(uid=$user)(cn=$user)(givenName=$user)(sn=$user))"; + } + + /* Add already present people to the filter */ + $exclude= ""; + foreach ($this->gosaMailForwardingAddress as $mail){ + $exclude.= "(mail=$mail)"; + } + if ($exclude != ""){ + $filter.= "(!(|$exclude))"; + } + + $acl= array($this->config->current['BASE'] => ":all"); + $res= get_list($acl, "(&(objectClass=gosaMailAccount)$filter)", TRUE, $mailfilter['depselect'], array("sn", "mail", "givenName"), TRUE); + $ldap->cd($mailfilter['depselect']); + $ldap->search ("(&(objectClass=gosaMailAccount)$filter)", array("sn", "mail", "givenName")); + error_reporting (0); + while ($attrs= $ldap->fetch()){ + if(preg_match('/%/', $attrs['mail'][0])){ + continue; + } + $name= $this->make_name($attrs); + $mailusers[$attrs['mail'][0]]= $name."<". + $attrs['mail'][0].">"; + } + error_reporting (E_ALL); + natcasesort ($mailusers); + reset ($maiusers); + + /* Show dialog */ + $smarty->assign("search_image", get_template_path('images/search.png')); + $smarty->assign("tree_image", get_template_path('images/tree.png')); + $smarty->assign("infoimage", get_template_path('images/info.png')); + $smarty->assign("launchimage", get_template_path('images/small_filter.png')); + $smarty->assign("mailusers", $mailusers); + $smarty->assign("deplist", $this->config->idepartments); + $smarty->assign("apply", apply_filter()); + $smarty->assign("alphabet", generate_alphabet()); + $smarty->assign("hint", print_sizelimit_warning()); + foreach( array("depselect", "muser", "regex") as $type){ + $smarty->assign("$type", $mailfilter[$type]); + } + $smarty->assign("hint", print_sizelimit_warning()); + $display.= $smarty->fetch (get_template_path('mail_locals.tpl', TRUE)); + return ($display); + } + + /* Assemble normal permissions */ + $smarty->assign("permissionsACL", chkacl($this->acl, "permissions")); + if (isset($this->imapacl['anyone'])){ + $smarty->assign("default_permissions", $this->imapacl['anyone']); + } + if (isset($this->imapacl['%members%'])){ + $smarty->assign("member_permissions", $this->imapacl['%members%']); + } + + /* Assemble extra attributes */ + $acl= chkacl($this->acl, "permissions"); + $tmp= ""; + $nr= 0; + $count= count($this->imapacl); + $this->indexed_user= array(); + $this->indexed_acl= array(); + foreach($this->imapacl as $user => $acl){ + if ($user != "anyone" && $user != "%members%"){ + $tmp.= " "; + if ($nr == $count - 1){ + $tmp.= ""; + } + if ($count > 3){ + $tmp.= ""; + } + } + $this->indexed_user[$nr]= $user; + $this->indexed_acl[$nr++]= $acl; + } + $smarty->assign("plusattributes", $tmp); + + /* Show main page */ + $mailserver= array(); + foreach ($this->config->data['SERVERS']['IMAP'] as $key => $val){ + $mailserver[]= $key; + } + $smarty->assign("mailServers", $mailserver); + foreach(array("gosaMailServer", "gosaMailQuota", "perms", "mail", + "gosaMailAlternateAddress", "gosaMailForwardingAddress") as $val){ + $smarty->assign("$val", $this->$val); + $smarty->assign("$val"."ACL", chkacl($this->acl, "$val")); + } + if (is_numeric($this->gosaMailQuota) && $this->gosaMailQuota != 0){ + $smarty->assign("quotausage", $this->quotaUsage * 100 / $this->gosaMailQuota); + $smarty->assign("quotadefined", "true"); + } else { + $smarty->assign("quotadefined", "false"); + } + + $display.= $smarty->fetch (get_template_path('mail.tpl', TRUE)); + return ($display); + } + + + /* remove object from parent */ + function remove_from_parent() + { + /* include global link_info */ + $ldap= $this->config->get_ldap_link(); + + /* Remove and write to LDAP */ + plugin::remove_from_parent(); + + /* Zero arrays */ + $this->attrs['gosaMailAlternateAddress']= array(); + $this->attrs['gosaMailForwardingAddress']= array(); + $this->attrs['gosaSharedFolderTarget']= array(); + + /* Keep uid */ + unset ($this->attrs['uid']); + $ldap->cd($this->dn); + $ldap->modify($this->attrs); + show_ldap_error($ldap->get_error()); + + /* Connect to IMAP server for account deletion */ + if ($this->is_account){ + $method= new $this->method($this->config); + if ($method->connect($this->attrs["gosaMailServer"][0])){ + /* Remove account from IMAP server */ + $method->deleteMailbox($this->uid); + $method->disconnect(); + } + } + + /* Optionally execute a command after we're done */ + $this->handle_post_events("remove"); + } + + + /* Save data to object */ + function save_object() + { + /* Assemble mail delivery mode + The mode field in ldap consists of values between braces, this must + be called when 'mail' is set, because checkboxes may not be set when + we're in some other dialog. + + Example for gosaMailDeliveryMode [LR ] + L: Local delivery + R: Reject when exceeding mailsize limit + S: Use spam filter + V: Use vacation message + C: Use custom sieve script + I: Only insider delivery */ + if (isset($_POST['mailedit'])){ + + /* Save ldap attributes */ + plugin::save_object(); + + $tmp= ""; + if (!isset($_POST["drop_own_mails"])){ + $tmp.= "L"; + } + if (isset($_POST["use_mailsize_limit"])){ + $tmp.= "R"; + } + if (isset($_POST["use_spam_filter"])){ + $tmp.= "S"; + } + if (isset($_POST["use_vacation"])){ + $tmp.= "V"; + } + if (isset($_POST["own_script"])){ + $tmp.= "C"; + } + if (isset($_POST["only_local"])){ + $tmp.= "I"; + } + $tmp= "[$tmp]"; + + if (chkacl ($this->acl, "gosaMailDeliveryMode") == ""){ + $this->gosaMailDeliveryMode= $tmp; + } + + /* Collect data and re-assign it to the imapacl array */ + if (chkacl($this->acl, "permissions") == ""){ + $this->imapacl= array(); + $this->imapacl['%members%']= $_POST['member_permissions']; + $this->imapacl['anyone']= $_POST['default_permissions']; + foreach ($this->indexed_user as $nr => $user){ + if (!isset($_POST["user_$nr"])){ + continue; + } + if ($_POST["user_$nr"] != $user || + $_POST["perm_$nr"] != $this->indexed_acl[$nr]){ + $this->is_modified= TRUE; + } + $this->imapacl[$_POST["user_$nr"]]= $_POST["perm_$nr"]; + } + } + } + + } + + + /* Save data to LDAP, depending on is_account we save or delete */ + function save() + { + $ldap= $this->config->get_ldap_link(); + + /* Call parents save to prepare $this->attrs */ + plugin::save(); + + /* Save arrays */ + $this->attrs['gosaMailAlternateAddress']= $this->gosaMailAlternateAddress; + $this->attrs['gosaMailForwardingAddress']= $this->gosaMailForwardingAddress; + + /* Save shared folder target */ + $this->attrs['gosaSharedFolderTarget']= "share+".$this->uid; + + /* Save acl's */ + $this->attrs['acl']= array(); + foreach ($this->imapacl as $user => $acl){ + if ($user == ""){ + continue; + } + $this->attrs['acl'][]= "$user $acl"; + } + + /* Save data to LDAP */ + $ldap->cd($this->dn); + $ldap->modify($this->attrs); + show_ldap_error($ldap->get_error()); + + /* Only do IMAP actions if we are not a template */ + if (!$this->is_template){ + $method= new $this->method($this->config); + if ($method->connect($this->gosaMailServer)){ + $method->updateMailbox($this->uid); + $method->setQuota($this->uid, $this->gosaMailQuota); + + /* Exchange '%member%' pseudo entry */ + $memberacl= $this->imapacl['%members%']; + unset ($this->imapacl['%members%']); + foreach ($this->members as $user){ + if (!isset($this->imapacl[$user])){ + $this->imapacl[$user]= $memberacl; + } + } + + $method->setSharedFolderPermissions($this->uid, $this->imapacl); + $method->disconnect(); + } + } + + /* Optionally execute a command after we're done */ + if ($this->initially_was_account == $this->is_account){ + if ($this->is_modified){ + $this->handle_post_events("mofify"); + } + } else { + $this->handle_post_events("add"); + } + } + + /* Check formular input */ + function check() + { + $ldap= $this->config->get_ldap_link(); + + $message= array(); + + /* must: mail */ + if ($this->mail == ""){ + $message[]= _("The required field 'Primary address' is not set."); + } + if (!is_email($this->mail)){ + $message[]= _("Please enter a valid email addres in 'Primary address' field."); + } + $ldap->cd($this->config->current['BASE']); + $ldap->search ("(&(|(mail=".$this->mail.")(gosaMailAlternateAddress=". + $this->mail."))(!(uid=".$this->cn."))(!(cn=".$this->cn.")))"); + if ($ldap->count() != 0){ + $message[]= _("The primary address you've entered is already in use."); + } + + /* Check quota */ + if ($this->gosaMailQuota != '' && chkacl ($this->acl, "gosaMailQuota") == ""){ + if (!is_numeric($this->gosaMailQuota)) { + $message[]= _("Value in 'Quota size' is not valid."); + } else { + $this->gosaMailQuota= (int) $this->gosaMailQuota; + } + } + + /* Check rejectsize for integer */ + if ($this->gosaMailMaxSize != '' && chkacl ($this->acl, "gosaMailQuota") == ""){ + if (!is_numeric($this->gosaMailMaxSize)){ + $message[]= _("Please specify a vaild mail size for mails to be rejected."); + } else { + $this->gosaMailMaxSize= (int) $this->gosaMailMaxSize; + } + } + + /* Need gosaMailMaxSize if use_mailsize_limit is checked */ + if (is_integer(strpos($this->gosaMailDeliveryMode, "reject")) && $this->gosaMailMaxSize == ""){ + $message[]= _("You need to set the maximum mail size in order to reject anything."); + } + + return ($message); + } + + /* Adapt from template, using 'dn' */ + function adapt_from_template($dn) + { + plugin::adapt_from_template($dn); + + foreach (array("gosaMailAlternateAddress", "gosaMailForwardingAddress") as $val){ + $this->$val= array(); + if (isset($this->attrs["$val"]["count"])){ + for ($i= 0; $i<$this->attrs["$val"]["count"]; $i++){ + $value= $this->attrs["$val"][$i]; + foreach (array("sn", "givenName", "uid") as $repl){ + if (preg_match("/%$repl/i", $value)){ + $value= preg_replace ("/%$repl/i", $this->parent->$repl, $value); + } + } + array_push($this->$val, $value); + } + } + } + } + + /* Add entry to forwarder list */ + function addForwarder($address) + { + $this->gosaMailForwardingAddress[]= $address; + $this->gosaMailForwardingAddress= array_unique ($this->gosaMailForwardingAddress); + + sort ($this->gosaMailForwardingAddress); + reset ($this->gosaMailForwardingAddress); + $this->is_modified= TRUE; + } + + /* Remove list of addresses from forwarder list */ + function delForwarder($addresses) + { + $this->gosaMailForwardingAddress= array_remove_entries ($addresses, + $this->gosaMailForwardingAddress); + $this->is_modified= TRUE; + } + + + + function addAlternate($address) + { + $ldap= $this->config->get_ldap_link(); + + $address= strtolower($address); + + /* Is this address already assigned in LDAP? */ + $ldap->cd ($this->config->current['BASE']); + $ldap->search ("(&(objectClass=gosaMailAccount)(|(mail=$address)". + "(gosaMailAlternateAddress=$address)))"); + + if ($ldap->count() > 0){ + $attrs= $ldap->fetch (); + return ($attrs["uid"][0]); + } + + /* Add to list of alternates */ + if (!in_array($address, $this->gosaMailAlternateAddress)){ + $this->gosaMailAlternateAddress[]= $address; + } + + sort ($this->gosaMailAlternateAddress); + reset ($this->gosaMailAlternateAddress); + $this->is_modified= TRUE; + + return (""); + } + + + function delAlternate($addresses) + { + $this->gosaMailAlternateAddress= array_remove_entries ($addresses, + $this->gosaMailAlternateAddress); + $this->is_modified= TRUE; + } + + + function make_name($attrs) + { + $name= ""; + if (isset($attrs['sn'][0])){ + $name= $attrs['sn'][0]; + } + if (isset($attrs['givenName'][0])){ + if ($name != ""){ + $name.= ", ".$attrs['givenName'][0]; + } else { + $name.= $attrs['givenName'][0]; + } + } + if ($name != ""){ + $name.= " "; + } + + return ($name); + } + +} + +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/plugins/admin/groups/class_groupManagement.inc b/plugins/admin/groups/class_groupManagement.inc new file mode 100644 index 000000000..206672fb3 --- /dev/null +++ b/plugins/admin/groups/class_groupManagement.inc @@ -0,0 +1,440 @@ +config= $config; + $this->ui= $ui; + + /* Get global filter config */ + if (!is_global("groupfilter")){ + $base= get_base_from_people($ui->dn); + $groupfilter= array("primarygroups" => "checked", + "mailgroups" => "checked", + "sambagroups" => "checked", + "appgroups" => "checked", + "functionalgroups" => "checked", + "guser" => "*", + "subsearch" => "", + "depselect" => $base, + "regex" => "*"); + register_global("groupfilter", $groupfilter); + } + } + + function execute() + { + /* Save data */ + $groupfilter= get_global("groupfilter"); + foreach( array("depselect", "guser", "regex") as $type){ + if (isset($_POST[$type])){ + $groupfilter[$type]= $_POST[$type]; + } + } + if (isset($_POST['depselect'])){ + foreach( array("primarygroups", "sambagroups", "mailgroups", "appgroups", + "functionalgroups", "subsearch") as $type){ + + if (isset($_POST[$type])) { + $groupfilter[$type]= "checked"; + } else { + $groupfilter[$type]= ""; + } + } + } + if (isset($_GET['search'])){ + $s= mb_substr($_GET['search'], 0, 1, "UTF8")."*"; + if ($s == "**"){ + $s= "*"; + } + $groupfilter['regex']= $s; + } + register_global("groupfilter", $groupfilter); + + $smarty= get_smarty(); + + /* Prepare formular */ + if (!isset($this->grouptab) && + !isset($_POST['new_group']) && + !isset($_POST['delete_group']) && + !isset($_POST['select_group'])){ + $this->reload(); + } + + /* Check for exeeded sizelimit */ + if (($message= check_sizelimit()) != ""){ + return($message); + } + + /* New group? */ + if (isset($_POST['new_group'])){ + + /* By default we set 'dn' to 'new', all relevant plugins will + react on this. */ + $this->dn= "new"; + + /* Create new usertab object */ + $this->grouptab= new grouptabs($this->config, + $this->config->data['TABS']['GROUPTABS'], $this->dn); + $this->grouptab->set_acl(array(':all')); + } + + /* Cancel dialogs */ + if (isset($_POST['edit_cancel']) || isset($_POST['password_cancel'])){ + del_lock ($this->grouptab->dn); + unset ($this->grouptab); + $this->grouptab= NULL; + unset($_SESSION['objectinfo']); + } + + /* Finish group edit is triggered by the tabulator dialog, so + the user wants to save edited data. Check and save at this + point. */ + if (isset($_POST['edit_finish'])){ + + /* Check tabs, will feed message array */ + $message= $this->grouptab->check(); + + /* Save, or display error message? */ + if (count($message) == 0){ + + /* Save user data to ldap */ + $this->grouptab->save(); + gosa_log ("Group object'".$this->dn."' has been saved"); + + /* Group has been saved successfully, remove lock from + LDAP. */ + if ($this->dn != "new"){ + del_lock ($this->dn); + } + + /* There's no page reload so we have to read new users at + this point. */ + $this->reload (); + unset ($this->grouptab); + $this->grouptab= NULL; + unset ($_SESSION['objectinfo']); + + } else { + /* Ok. There seem to be errors regarding to the tab data, + show message and continue as usual. */ + show_errors($message); + } + } + + /* User wants to edit data? */ + if ((isset($_POST['select_group']) || (isset($_POST['edit_helper']) && $_POST['edit_helper'] == "1")) && isset($_POST['grouplist']) && $_POST['grouplist'] != ""){ + + /* Get 'dn' from posted 'uid', must be unique */ + $this->dn= trim($_POST['grouplist']); + + /* Check locking, save current plugin in 'back_plugin', so + the dialog knows where to return. */ + if (($user= get_lock($this->dn)) != ""){ + return(gen_locked_message ($user, $this->dn)); + } + + /* Lock the current entry, so everyone will get the + above dialog */ + add_lock ($this->dn, $this->ui->dn); + + /* Set up the users ACL's for this 'dn' */ + $acl= get_permissions ($this->dn, $this->ui->subtreeACL); + + /* Register grouptab to trigger edit dialog */ + $this->grouptab= new grouptabs($this->config, + $this->config->data['TABS']['GROUPTABS'], $this->dn); + $this->grouptab->set_acl($acl); + $_SESSION['objectinfo']= $this->dn; + } + + /* Remove user was requested */ + if (isset($_POST['delete_group']) && isset($_POST['grouplist'])){ + + /* Get 'dn' from posted 'uid' */ + $this->dn= trim($_POST['grouplist']); + + /* Load permissions for selected 'dn' and check if + we're allowed to remove this 'dn' */ + $acl= get_permissions ($this->dn, $this->ui->subtreeACL); + $this->acl= get_module_permission($acl, "group", $this->dn); + if (chkacl($this->acl, "delete") == ""){ + + /* Check locking, save current plugin in 'back_plugin', so + the dialog knows where to return. */ + if (($user= get_lock($this->dn)) != ""){ + return(gen_locked_message ($user, $this->dn)); + } + + /* Lock the current entry, so nobody will edit it during deletion */ + add_lock ($this->dn, $this->ui->dn); + $smarty->assign("info", sprintf(_("You're about to delete the group '%s'."), $this->dn)); + return($smarty->fetch(get_template_path('remove.tpl', TRUE))); + } else { + + /* Obviously the user isn't allowed to delete. Show message and + clean session. */ + print_red (_("You are not allowed to delete this group!")); + } + } + + /* Confirmation for deletion has been passed. Group should be deleted. */ + if (isset($_POST['delete_group_confirm'])){ + + /* Some nice guy may send this as POST, so we've to check + for the permissions again. */ + if (chkacl($this->acl, "delete") == ""){ + + /* Delete request is permitted, perform LDAP action */ + $this->grouptab= new grouptabs($this->config, + $this->config->data['TABS']['GROUPTABS'], $this->dn); + $this->grouptab->set_acl(array($this->acl)); + $this->grouptab->delete (); + gosa_log ("Group object'".$this->dn."' has been removed"); + unset ($this->grouptab); + $this->grouptab= NULL; + + /* Group list has changed, reload it. */ + $this->reload (); + } else { + + /* Normally this shouldn't be reached, send some extra + logs to notify the administrator */ + print_red (_("You are not allowed to delete this group!")); + gosa_log ("Warning: '".$this->ui->uid."' tried to trick group deletion."); + } + + /* Remove lock file after successfull deletion */ + del_lock ($this->dn); + unset($_SESSION['objectinfo']); + } + + + /* Delete group canceled? */ + if (isset($_POST['delete_cancel'])){ + del_lock ($this->dn); + unset($_SESSION['objectinfo']); + } + + /* Show tab dialog if object is present */ + if ($this->grouptab){ + $display= $this->grouptab->execute(); + + /* Don't show buttons if tab dialog requests this */ + if (!$this->grouptab->by_object[$this->grouptab->current]->dialog){ + $display.= "

\n"; + $display.= "\n"; + $display.= " \n"; + $display.= "\n"; + $display.= "

"; + } + return ($display); + } + + /* Show main page */ + $smarty->assign("grouplist", $this->grouplist); + $smarty->assign("search_image", get_template_path('images/search.png')); + $smarty->assign("tree_image", get_template_path('images/tree.png')); + $smarty->assign("infoimage", get_template_path('images/info.png')); + $smarty->assign("launchimage", get_template_path('images/launch.png')); + $smarty->assign("deplist", $this->config->idepartments); + foreach( array("depselect", "guser", "regex", "primarygroups", "mailgroups", + "appgroups", "sambagroups", "functionalgroups", "subsearch") as $type){ + + $smarty->assign("$type", $groupfilter[$type]); + } + + /* Extend if we are not using javascript */ + $smarty->assign("apply", apply_filter()); + $smarty->assign("alphabet", generate_alphabet()); + $smarty->assign("hint", print_sizelimit_warning()); + + return($smarty->fetch(get_template_path('headpage.tpl', TRUE))); + } + + + function reload() + { + /* Get config */ + $groupfilter= get_global('groupfilter'); + + /* Set base for all searches */ + $base= $groupfilter['depselect']; + + /* Regex filter? */ + if ($groupfilter['regex'] != ""){ + $regex= $groupfilter['regex']; + } else { + $regex= "*"; + } + + /* User filter? */ + $filter= ""; + $error= ""; + $error2= ""; + $this->grouplist= array(); + + /* What are primary groups? */ + $primaries= array(); + $ldap= $this->config->get_ldap_link(TRUE); + $ldap->cd($base); + $ldap->search("(&(uid=$regex)(!(uid=*$))(objectClass=posixAccount)(gidNumber=*))", array("gidNumber", "cn")); + $error= $ldap->error; + while ($attrs= $ldap->fetch()){ + $primaries[$attrs['gidNumber'][0]]= $attrs['cn'][0]; + } + if ($groupfilter['primarygroups'] == "checked"){ + $filter.= "(&(objectClass=posixGroup)(|"; + foreach ($primaries as $gidNumber => $cn){ + $filter.= "(gidNumber=$gidNumber)"; + } + $filter.= "))"; + } + + /* Set filter depending on selection */ + if ($groupfilter['appgroups'] == "checked"){ + $filter.= "(objectClass=gosaApplicationGroup)"; + } + if ($this->config->current['SAMBAVERSION'] == 3){ + $sfilter= "(objectClass=sambaGroupMapping)"; + if ($groupfilter['sambagroups'] == "checked"){ + $filter.= "(objectClass=sambaGroupMapping)"; + } + } else { + $sfilter= ""; + } + if ($groupfilter['mailgroups'] == "checked"){ + $filter.= "(objectClass=gosaMailAccount)"; + } + if ($groupfilter['functionalgroups'] == "checked"){ + $ldap->cd($base); + $ldap->set_size_limit($_SESSION['size_limit']); + $ldap->search("(&(cn=$regex)(objectClass=posixGroup)(!(|(objectClass=gosaMailAccount)(objectClass=gosaApplicationGroup)$sfilter)))", array("cn", "gidNumber", "description")); + $error2= $ldap->error; + while ($attrs= $ldap->fetch()){ + if (!isset($primaries[$attrs['gidNumber'][0]])){ + if (isset($attrs["description"][0])){ + $this->grouplist[$attrs["dn"]]= $attrs["cn"][0]." [". + $attrs["description"][0]."]"; + } else { + $this->grouplist[$attrs["dn"]]= $attrs["cn"][0]; + } + } + } + } + + /* Generate grouplist */ + if ($filter != ""){ + $filter= "(&(cn=$regex)(objectClass=posixGroup)(|$filter))"; + if ($groupfilter['guser'] != ""){ + $filter= "(&(|(memberUID=" . $groupfilter['guser'] . ")(cn=" . $groupfilter['guser'] . "))$filter)"; + } + } + if ($groupfilter['subsearch'] == "checked"){ + $res= get_list($this->ui->subtreeACL, "$filter", TRUE, $base, array("cn", "description", "gidNumber"), TRUE); + } else { + $base= get_groups_ou().$base; + $res= get_list($this->ui->subtreeACL, "$filter", FALSE, $base, array("cn", "description", "gidNumber"), TRUE); + } + if (preg_match("/size limit/i", $error) || preg_match("/size limit/i", $error2)){ + $_SESSION['limit_exceeded']= TRUE; + } + + foreach ($res as $value){ + /* Is primary group? Change description */ + if (isset($primaries[$value['gidNumber'][0]])){ + $dsc= _("Group of user")." ".$primaries[$value['gidNumber'][0]]; + $this->grouplist[$value["dn"]]= $value["cn"][0]." [".$dsc."]"; + continue; + } + + if (isset($value["description"][0])){ + $this->grouplist[$value["dn"]]= $value["cn"][0]." [". + $value["description"][0]."]"; + } else { + $this->grouplist[$value["dn"]]= $value["cn"][0]; + } + } + natcasesort ($this->grouplist); + reset ($this->grouplist); + } + + function remove_from_parent() + { + /* Optionally execute a command after we're done */ + $this->postremove(); + } + + + /* Save data to object */ + function save_object() + { + } + + + /* Check values */ + function check() + { + } + + + /* Save to LDAP */ + function save() + { + /* Optionally execute a command after we're done */ + $this->postcreate(); + } + + function adapt_from_template($dn) + { + } + + function password_change_needed() + { + } + + function show_header($button_text, $text, $disabled= FALSE) + { + } + + function remove_lock() + { + if (isset($this->grouptab->dn)){ + del_lock ($this->grouptab->dn); + } + } + +} + +?> diff --git a/plugins/admin/groups/generic.tpl b/plugins/admin/groups/generic.tpl new file mode 100644 index 000000000..0a7ec94f6 --- /dev/null +++ b/plugins/admin/groups/generic.tpl @@ -0,0 +1,103 @@ + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + {if $samba3 ne ""} + + + + {/if} + + + + + + + + + +
{t}Group name{/t}{$must} + +
{t}Description{/t} +
{t}Base{/t}{$must} + +
+ {t}Force GID{/t} +   + +
+ + +   + {t}in domain{/t} +   + +
+ {t}Members are in a phone pickup group{/t} +
+ +
+   + + + + + + +
+ {t}Group members{/t} +
+ +
+ +   + +
+
+ + + diff --git a/plugins/admin/groups/group_objects.tpl b/plugins/admin/groups/group_objects.tpl new file mode 100644 index 000000000..3f39e0239 --- /dev/null +++ b/plugins/admin/groups/group_objects.tpl @@ -0,0 +1,49 @@ + + + + + +
+
+

+ {t}Select users to add{/t} {$hint} +

+
+
+

+ + +

+
+
+
+

[F]{t}Filters{/t}

+
+
+

+ + {$alphabet} +
+

+

+ +
 {t}Display users of department{/t}
+

+

+ +
 {t}Display users matching{/t}
+

+ {$apply} +
+
+ +

+ +   + +

+ diff --git a/plugins/admin/groups/headpage.tpl b/plugins/admin/groups/headpage.tpl new file mode 100644 index 000000000..d54fc9f85 --- /dev/null +++ b/plugins/admin/groups/headpage.tpl @@ -0,0 +1,75 @@ + + + + + +
+
+

+ {t}List of groups{/t} {$hint} +

+
+
+

+ +
+   +   +   + +

+
+ +
+
+

[i]{t}Information{/t}

+
+
+

+ {t}This menu allows to add, edit or remove selected groups. You may want to use the range selector on top of the group listbox, when working with a large number of groups.{/t} +

+

+ {t}-Edit- and -New group- will execute an assistant to aid you in editing group properties.-Delete- will ask for confirmation before removing groups.{/t} +

+
+
+
+

[F]{t}Filters{/t}

+
+
+

+ + {$alphabet} +
+

+

+ {t}Show primary groups{/t}
+ {t}Show samba groups{/t}
+ {t}Show application groups{/t}
+ {t}Show mail groups{/t}
+ {t}Show functional groups{/t} +

+

+ {t}Search in subtrees{/t}
+

+

+ +
 {t}Display groups of department{/t}
+

+

+ +
 {t}Display groups matching{/t}
+

+

+ +
 {t}Display groups of user{/t}
+

+ {$apply} +
+
+ + diff --git a/plugins/admin/groups/mail.tpl b/plugins/admin/groups/mail.tpl new file mode 100644 index 000000000..16bab6376 --- /dev/null +++ b/plugins/admin/groups/mail.tpl @@ -0,0 +1,109 @@ + + + + + + + + + + +
+

{t}Generic{/t}

+ + + + + + + + + + + + + + + + + +
{t}Primary address{/t}{$must}
{t}Server{/t} + +
+
+ {t}Quota usage{/t} +
+
+ {if $quotadefined eq "true"} + + {else} + {t}not defined{/t} + {/if} +
{t}Quota size{/t} KB
+ +
+   + +

{t}Alternate addresses{/t}

+ +
+ +   + +
+ +

 

+ + + + + + + +
+

{t}IMAP shared folders{/t}

+ + + + + + + + + + + {$plusattributes} +
{t}Default permission{/t} + +
{t}Member permission{/t} + +
+ +
+   + +

{t}Forward messages to non group members{/t}

+ +
+ +   +   + +
+ + + diff --git a/plugins/admin/groups/mail_admins.tpl b/plugins/admin/groups/mail_admins.tpl new file mode 100644 index 000000000..32c97ef20 --- /dev/null +++ b/plugins/admin/groups/mail_admins.tpl @@ -0,0 +1,40 @@ + + + + + + + + +
+ {t}Folder administrators{/t} +
+ +
+ +
+
+ +
+
+ +
+ {t}Select a specific department{/t}: + + + {if $javascript ne "true"} + + {/if} +
+ +

+ +   + +

diff --git a/plugins/admin/groups/mail_locals.tpl b/plugins/admin/groups/mail_locals.tpl new file mode 100644 index 000000000..e390ae34d --- /dev/null +++ b/plugins/admin/groups/mail_locals.tpl @@ -0,0 +1,52 @@ + + + + + +
+
+

+ {t}Select addresses to add{/t} {$hint}
+

+
+
+

+ +

+
+
+
+

[F]{ +t}Filters{/t}

+
+
+

+ + {$alphabet} +
+

+

+ +
 {t}Display addresses of department{/t}
+

+

+ +
 {t}Display addresses matching{/t}
+

+

+ +
 {t}Display addresses of user{/t}
+

+ {$apply} +
+
+ +

+ +   + +

diff --git a/plugins/admin/groups/main.inc b/plugins/admin/groups/main.inc new file mode 100644 index 000000000..f6b6ef27e --- /dev/null +++ b/plugins/admin/groups/main.inc @@ -0,0 +1,60 @@ +remove_lock(); + del_lock ($ui->dn); + sess_del ('groupManagement'); + } +} else { + /* Create groupManagement object on demand */ + if (!isset($_SESSION['groupManagement']) || (isset($_GET['reset']) && $_GET['reset'] == 1)){ + $_SESSION['groupManagement']= new groupManagement ($config, $_SESSION['ui']); + } + $groupManagement= $_SESSION['groupManagement']; + $output= $groupManagement->execute(); + + /* Page header*/ + if (isset($_SESSION['objectinfo'])){ + $display= print_header(get_template_path('images/group.png'), + _("Group administration"), " ". + $_SESSION['objectinfo']); + } else { + $display= print_header(get_template_path('images/group.png'), _("Group administration")); + } + + $display.= $output; + + /* Reset requested? */ + if (isset($_GET['reset']) && $_GET['reset'] == 1){ + del_lock ($ui->dn); + sess_del ('groupManagement'); + } + + + /* Show and save dialog */ + $_SESSION['groupManagement']= $groupManagement; +} + +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/plugins/admin/groups/remove.tpl b/plugins/admin/groups/remove.tpl new file mode 100644 index 000000000..50d127eb2 --- /dev/null +++ b/plugins/admin/groups/remove.tpl @@ -0,0 +1,19 @@ +
+  {t}Warning{/t} +
+ +

+ {$info} + {t}This may be a primary user group. Please double check if you really want to do this since there is no way for GOsa to get your data back.{/t} +

+ +

+ {t}So - if you're sure - press Delete to continue or Cancel to abort.{/t} +

+ +

+ +   + +

+ diff --git a/plugins/admin/groups/tabs_group.inc b/plugins/admin/groups/tabs_group.inc new file mode 100644 index 000000000..8545c60a9 --- /dev/null +++ b/plugins/admin/groups/tabs_group.inc @@ -0,0 +1,68 @@ +by_object['group']; + foreach ($this->by_object as $name => $obj){ + /* Don't touch base object */ + if ($name != 'group'){ + $obj->parent= &$this; + $obj->cn= $baseobject->cn; + $this->by_object[$name]= $obj; + } + } + } + + function save() + { + $baseobject= $this->by_object['group']; + + /* Check for new 'dn', in order to propagate the + 'dn' to all plugins */ + $new_dn= 'cn='.$baseobject->cn.','.get_groups_ou().$baseobject->base; + + /* Put baseobjects 'cn' to mailobjects 'uid' */ + if (isset($this->by_object['mailgroup'])){ + $this->by_object['mailgroup']->uid= $baseobject->cn; + } + + + /* Update reference, transfer variables */ + foreach ($this->by_object as $name => $obj){ + /* Transfer attributes for mailgroup account */ + if ($name == 'mailgroup'){ + $obj->members= $baseobject->memberUid; + $this->by_object['mailgroup']= $obj; + } + } + + /* Move group? */ + if ($this->dn != $new_dn){ + + /* Write entry on new 'dn' */ + if ($this->dn != "new"){ + $baseobject->move($this->dn, $new_dn); + $this->by_object['group']= $baseobject; + } + + /* Happen to use the new one */ + $this->dn= $new_dn; + } + + return tabs::save(); + } + +} + +?> diff --git a/plugins/admin/ogroups/class_ogroup.inc b/plugins/admin/ogroups/class_ogroup.inc new file mode 100644 index 000000000..fcf55b339 --- /dev/null +++ b/plugins/admin/ogroups/class_ogroup.inc @@ -0,0 +1,568 @@ + $v2){ + return 1; + } + if ($v1 < $v2){ + return -1; + } + return 0; +} + + +class ogroup extends plugin +{ + /* Variables */ + var $cn= ""; + var $description= ""; + var $base= ""; + var $gosaGroupObjects= ""; + var $department= ""; + var $objects= array(); + var $allobjects= array(); + var $memberList= array(); + var $member= array(); + var $orig_dn= ""; + var $group_dialog= FALSE; + + /* attribute list for save action */ + var $attributes= array("cn", "description", "gosaGroupObjects"); + var $objectclasses= array("top", "gosaGroupOfNames"); + + function ogroup ($config, $dn= NULL) + { + plugin::plugin ($config, $dn); + $this->orig_dn= $dn; + + /* Load member objects */ + if (isset($this->attrs['member'])){ + foreach ($this->attrs['member'] as $key => $value){ + if ("$key" != "count"){ + $this->member["$value"]= "$value"; + } + } + } + $this->is_account= TRUE; + + /* Get global filter config */ + if (!is_global("ogfilter")){ + $ui= get_userinfo(); + $base= get_base_from_people($ui->dn); + $ogfilter= array( "dselect" => $base, + "regex" => "*"); + register_global("ogfilter", $ogfilter); + } + $ogfilter= get_global('ogfilter'); + + /* Adjust flags */ + foreach( array( "U" => "accounts", + "G" => "groups", + "A" => "applications", + "D" => "departments", + "S" => "servers", + "W" => "workstations", + "T" => "terminals", + "F" => "phones", + "P" => "printers") as $key => $val){ + + if (preg_match("/$key/", $this->gosaGroupObjects)){ + $ogfilter[$val]= "checked"; + } else { + $ogfilter[$val]= ""; + } + } + register_global("ogfilter", $ogfilter); + + /* Load member data */ + $this->reload(); + } + + function execute() + { + /* Do we represent a valid group? */ + if (!$this->is_account){ + $display= " ". + _("This 'dn' is no object group.").""; + return ($display); + } + + + + /* Delete objects from group */ + if (isset($_POST['delete_membership']) && isset($_POST['members'])){ + foreach ($_POST['members'] as $value){ + $this->objects["$value"]= $this->memberList[$value]; + unset ($this->memberList["$value"]); + unset ($this->member["$value"]); + uasort ($this->objects, 'sort_list'); + reset ($this->objects); + } + $this->reload(); + } + + /* Add objects to group */ + if (isset($_POST['add_object_finish']) && isset($_POST['objects'])){ + foreach ($_POST['objects'] as $value){ + $this->memberList["$value"]= $this->objects[$value]; + $this->member["$value"]= $value; + unset ($this->objects[$value]); + uasort ($this->memberList, 'sort_list'); + reset ($this->memberList); + } + $this->reload(); + } + + /* Load templating engine */ + $smarty= get_smarty(); + + /* Add objects? */ + if (isset($_POST["edit_membership"])){ + $this->group_dialog= TRUE; + $this->dialog= TRUE; + } + + /* Add objects finished? */ + if (isset($_POST["add_object_finish"]) || isset($_POST["add_object_cancel"])){ + $this->group_dialog= FALSE; + $this->dialog= FALSE; + } + + /* Manage object add dialog */ + if ($this->group_dialog){ + + /* Save data */ + $ogfilter= get_global("ogfilter"); + foreach( array("dselect", "regex") as $type){ + if (isset($_POST[$type])){ + $ogfilter[$type]= $_POST[$type]; + } + } + if (isset($_POST['dselect'])){ + foreach( array("accounts", "groups", "applications", "departments", + "servers", "workstations", "terminals", "printers", + "phones") as $type){ + + if (isset($_POST[$type])) { + $ogfilter[$type]= "checked"; + } else { + $ogfilter[$type]= ""; + } + } + } + if (isset($_GET['search'])){ + $s= mb_substr($_GET['search'], 0, 1, "UTF8")."*"; + if ($s == "**"){ + $s= "*"; + } + $ogfilter['regex']= $s; + } + register_global("ogfilter", $ogfilter); + $this->reload(); + + /* Calculate actual groups */ + $smarty->assign("objects", $this->convert_list($this->objects)); + + /* Show dialog */ + $smarty->assign("search_image", get_template_path('images/search.png')); + $smarty->assign("launchimage", get_template_path('images/small_filter.png')); + $smarty->assign("tree_image", get_template_path('images/tree.png')); + $smarty->assign("deplist", $this->config->idepartments); + $smarty->assign("alphabet", generate_alphabet()); + foreach( array("dselect", "regex", "accounts", "groups", "applications", + "departments", "servers", "workstations", "terminals", + "printers", "phones") as $type){ + $smarty->assign("$type", $ogfilter[$type]); + } + $smarty->assign("hint", print_sizelimit_warning()); + + $display= $smarty->fetch (get_template_path('ogroup_objects.tpl', TRUE, dirname(__FILE__))); + return ($display); + } + + /* Bases / Departments */ + if ($this->dn == "new"){ + $ui= get_userinfo(); + $this->base= dn2base($ui->dn); + } else { + if (isset($_POST['base'])){ + $this->base= $_POST['base']; + } else { + $this->base= preg_replace ("/^[^,]+,[^,]+,/", "", $this->dn); + } + } + + /* Assemble combine string */ + if ($this->gosaGroupObjects == "[]"){ + $smarty->assign("combinedObjects", _("none")); + } elseif (strlen($this->gosaGroupObjects) > 4){ + $smarty->assign("combinedObjects", ""._("too many different objects!").""); + } else { + $conv= array( "U" => _("users"), + "G" => _("groups"), + "A" => _("applications"), + "D" => _("departments"), + "S" => _("servers"), + "W" => _("workstations"), + "T" => _("terminals"), + "F" => _("phones"), + "P" => _("printers")); + + $type= preg_replace('/[\[\]]/', '', $this->gosaGroupObjects); + $p1= $conv[$type[0]]; + error_reporting(0); + if (isset($type[1]) && preg_match('/[UGADSFWTP]/', $type[1])){ + $p2= $conv[$type[1]]; + $smarty->assign("combinedObjects", "$p1 "._("and")." $p2"); + } else { + $smarty->assign("combinedObjects", "$p1"); + } + error_reporting(E_ALL); + } + + /* Assign variables */ + $smarty->assign("bases", $this->config->idepartments); + $smarty->assign("base_select", $this->base); + $smarty->assign("department", $this->department); + $smarty->assign("members", $this->convert_list($this->memberList)); + + /* Objects have to be tuned... */ + $smarty->assign("objects", $this->convert_list($this->objects)); + + /* Fields */ + foreach ($this->attributes as $val){ + $smarty->assign("$val", $this->$val); + $smarty->assign("$val"."ACL", chkacl($this->acl, "$val")); + } + + return ($smarty->fetch (get_template_path('generic.tpl', TRUE))); + } + + + /* Save data to object */ + function save_object() + { + /* Save additional values for possible next step */ + if (isset($_POST['ogroupedit'])){ + plugin::save_object(); + + if (chkacl ($this->acl, "base") == "" && isset($_POST["base"])){ + $this->base= $_POST["base"]; + } + + } + } + + + /* (Re-)Load objects */ + function reload() + { + /* Generate object list */ + $this->objects= array(); + $this->allobjects= array(); + $ldap= $this->config->get_ldap_link(); + + /* Assemble filter */ + $ogfilter= get_global("ogfilter"); + + $ldap->cd ($ogfilter['dselect']); + + $filter= ""; + if ($ogfilter['accounts'] == "checked"){ + $filter.= "(objectClass=gosaAccount)"; + } + if ($ogfilter['groups'] == "checked"){ + $filter.= "(objectClass=posixGroup)"; + } + if ($ogfilter['applications'] == "checked"){ + $filter.= "(objectClass=gosaApplication)"; + } + if ($ogfilter['departments'] == "checked"){ + $filter.= "(objectClass=gosaDepartment)"; + } + if ($ogfilter['servers'] == "checked"){ + $filter.= "(objectClass=goServer)"; + } + if ($ogfilter['workstations'] == "checked"){ + $filter.= "(objectClass=gotoWorkstation)"; + } + if ($ogfilter['terminals'] == "checked"){ + $filter.= "(objectClass=gotoTerminal)"; + } + if ($ogfilter['printers'] == "checked"){ + $filter.= "(objectClass=gotoPrinter)"; + } + if ($ogfilter['phones'] == "checked"){ + $filter.= "(objectClass=goFonHardware)"; + } + $regex= $ogfilter['regex']; + + $ldap->search ("(&(|$filter)(|(uid=$regex)(cn=$regex)(ou=$regex)))", array("dn", "cn", "ou", "description", "objectClass", "sn", "givenName", "uid")); + while ($attrs= $ldap->fetch()){ + + /* Get type */ + $type= $this->getObjectType($attrs); + $name= $this->getObjectName($attrs); + + /* Fill array */ + if (isset($attrs["description"][0])){ + $this->objects[$attrs["dn"]]= array("text" => "$name [".$attrs["description"][0]."]", "type" => "$type"); + } elseif (isset($attrs["uid"][0])) { + $this->objects[$attrs["dn"]]= array("text" => "$name [".$attrs["uid"][0]."]", "type" => "$type"); + } else { + $this->objects[$attrs["dn"]]= array("text" => "$name", "type" => "$type"); + } + } + uasort ($this->objects, 'sort_list'); + reset ($this->objects); + + $ldap->cd ($this->config->current['BASE']); + $filter= "(objectClass=gosaAccount)(objectClass=posixGroup)(objectClass=gosaApplication)(objectClass=gosaDepartment)(objectClass=goServer)(objectClass=gotoWorkstation)(objectClass=gotoTerminal)(objectClass=gotoPrinter)(objectClass=goFonHardware)"; + $regex= "*"; + + $ldap->search ("(&(|$filter)(|(uid=$regex)(cn=$regex)(ou=$regex)))", array("dn", "cn", "ou", "description", "objectClass", "sn", "givenName", "uid")); + while ($attrs= $ldap->fetch()){ + + /* Get type */ + $type= $this->getObjectType($attrs); + $name= $this->getObjectName($attrs); + + /* Fill array */ + if (isset($attrs["description"][0])){ + $this->allobjects[$attrs["dn"]]= array("text" => "$name [".$attrs["description"][0]."]", "type" => "$type"); + } elseif (isset($attrs["uid"][0])) { + $this->allobjects[$attrs["dn"]]= array("text" => "$name [".$attrs["uid"][0]."]", "type" => "$type"); + } else { + $this->allobjects[$attrs["dn"]]= array("text" => "$name", "type" => "$type"); + } + } + uasort ($this->allobjects, 'sort_list'); + reset ($this->allobjects); + + /* Build member list */ + $this->memberList= array(); + foreach($this->member as $dn){ + + /* Object in object list? */ + if (isset($this->allobjects[$dn])){ + $this->memberList[$dn]= $this->allobjects[$dn]; + if (isset ($this->objects[$dn])){ + unset ($this->objects[$dn]); + } + + } else { + + /* No, try to ge informations from LDAP */ + $ldap->cat($dn, array("cn", "sn", "givenName", "ou", "description", "objectClass")); + if ($ldap->error != "success"){ + $this->memberList[$dn]= array('text' => _("Non existing dn: ")."$dn", + "type" => "I"); + } else { + $ldap->cat($dn); + $attrs= $ldap->fetch(); + $type= $this->getObjectType($attrs); + $name= $this->getObjectName($attrs); + + /* Fill array */ + if (isset($attrs["description"][0])){ + $this->objects[$attrs["dn"]]= array("text" => "$name [".$attrs["description"][0]."]", "type" => "$type"); + } else { + $this->objects[$attrs["dn"]]= array("text" => "$name", "type" => "$type"); + } + + } + } + } + uasort ($this->memberList, 'sort_list'); + reset ($this->memberList); + + /* Assemble types of currently combined objects */ + $objectTypes= ""; + foreach ($this->memberList as $dn => $desc){ + + /* Invalid object? */ + if ($desc['type'] == 'I'){ + continue; + } + + /* Fine. Add to list. */ + if (!preg_match('/'.$desc['type'].'/', $objectTypes)){ + $objectTypes.= $desc['type']; + } + } + $this->gosaGroupObjects= "[$objectTypes]"; + } + + + function convert_list($input) + { + $temp= ""; + $conv= array( "U" => "select_user.png", + "G" => "select_groups.png", + "A" => "select_application.png", + "D" => "select_department.png", + "S" => "select_server.png", + "W" => "select_workstation.png", + "T" => "select_terminal.png", + "F" => "select_phone.png", + "I" => "flag.png", + "P" => "select_printer.png"); + + foreach ($input as $key => $value){ + /* Generate output */ + $temp.= "\n"; + } + + return ($temp); + } + + + function getObjectType($attrs) + { + $type= "I"; + + foreach(array( "U" => "gosaAccount", + "G" => "posixGroup", + "A" => "gosaApplication", + "D" => "gosaDepartment", + "S" => "goServer", + "W" => "gotoWorkstation", + "T" => "gotoTerminal", + "F" => "goFonHardware", + "P" => "gotoPrinter") as $index => $class){ + if (in_array($class, $attrs['objectClass'])){ + $type= $index; + break; + } + } + + return ($type); + } + + + function getObjectName($attrs) + { + /* Person? */ + if (in_array('gosaAccount', $attrs['objectClass'])){ + if(isset($attrs['sn']) && isset($attrs['givenName'])){ + $name= $attrs['sn'][0].", ".$attrs['givenName'][0]; + } else { + $name= $attrs['uid'][0]; + } + } else { + if(isset($attrs["cn"][0])) { + $name= $attrs['cn'][0]; + } else { + $name= $attrs['ou'][0]; + } + } + + return ($name); + } + + + function check() + { + $message= array(); + + /* Permissions for that base? */ + if ($this->base != ""){ + $new_dn= 'cn='.$this->cn.','.get_groups_ou().$this->base; + } else { + $new_dn= $this->dn; + } + + $ui= get_userinfo(); + $acl= get_permissions ($new_dn, $ui->subtreeACL); + $acl= get_module_permission($acl, "group", $new_dn); + if (chkacl($acl, "create") != ""){ + $message[]= _("You have no permissions to create a group on this 'Base'."); + } + + /* must: cn */ + if ($this->cn == "" && chkacl ($this->acl, "cn") == ""){ + $message[]= "The required field 'Name' is not set."; + } + + /* Need at least one member */ + if (count($this->member) == 0){ + $message[]= _("Object groups need at least one member!"); + } + + /* To many different object types? */ + if (strlen($this->gosaGroupObjects) > 4){ + $message[]= _("You can combine two different object types at maximum only!"); + } + + return ($message); + } + + + /* Save to LDAP */ + function save() + { + plugin::save(); + + /* Move members to target array */ + foreach ($this->member as $key => $desc){ + $this->attrs['member'][]= $key; + } + + $ldap= $this->config->get_ldap_link(); + + /* New accounts need proper 'dn', propagate it to remaining objects */ + if ($this->dn == 'new'){ + $this->dn= 'cn='.$this->cn.','.get_groups_ou().$this->base; + } + + /* Save data. Using 'modify' implies that the entry is already present, use 'add' for + new entries. So do a check first... */ + $ldap->cat ($this->dn); + if ($ldap->fetch()){ + /* Modify needs array() to remove values :-( */ + if (!count ($this->member)){ + $this->attrs['member']= array(); + } + $mode= "modify"; + } else { + $mode= "add"; + $ldap->cd($this->config->current['BASE']); + $ldap->create_missing_trees(preg_replace('/^[^,]+,/', '', $this->dn)); + } + + /* Write back to ldap */ + $ldap->cd($this->dn); + $ldap->$mode($this->attrs); + + /* Trigger post signal */ + $this->handle_post_events($mode); + + $ret= 0; + if (show_ldap_error($ldap->get_error())){ + $ret= 1; + } + + return ($ret); + } + + function remove_from_parent() + { + plugin::remove_from_parent(); + + $ldap= $this->config->get_ldap_link(); + $ldap->rmdir($this->dn); + show_ldap_error($ldap->get_error()); + + /* Trigger remove signal */ + $this->handle_post_events("remove"); + } + +} + +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/plugins/admin/ogroups/class_ogroupManagement.inc b/plugins/admin/ogroups/class_ogroupManagement.inc new file mode 100644 index 000000000..ded000d4e --- /dev/null +++ b/plugins/admin/ogroups/class_ogroupManagement.inc @@ -0,0 +1,416 @@ +config= $config; + $this->ui= get_userinfo(); + + /* Fill translation array */ + $this->obtypes= array( "posixAccount" => _("UNIX accounts"), + "posixGroup" => _("Groups"), + "gosaDepartment" => _("Departments"), + "gosaApplication" => _("Applications"), + "goServer" => _("Servers"), + "gotoTerminal" => _("Thin Clients"), + "gotoWorkstation" => _("Workstations"), + "goFonHardware" => _("Phone"), + "gotoPrinter" => _("Printer")); + asort($this->obtypes); + + /* Get global filter config */ + if (!is_global("ogroupfilter")){ + $ui= get_userinfo(); + $base= get_base_from_people($ui->dn); + $ogroupfilter= array( "usergroups" => "checked", + "groupgroups" => "checked", + "appgroups" => "checked", + "depgroups" => "checked", + "servergroups" => "checked", + "wsgroups" => "checked", + "prtgroups" => "checked", + "emptygroups" => "checked", + "tcgroups" => "checked", + "fongroups" => "checked", + "depselect" => $base, + "regex" => "*"); + register_global("ogroupfilter", $ogroupfilter); + } + } + + function execute() + { + /* Prepare template */ + $smarty= get_smarty(); + + /* Save data */ + if (is_global("ogroupfilter")){ + $ogroupfilter= get_global("ogroupfilter"); + } else { + $ogroupfilter= array(); + } + foreach( array("depselect", "regex") as $type){ + if (isset($_POST[$type])){ + $ogroupfilter[$type]= $_POST[$type]; + } + } + if (isset($_POST['depselect'])){ + foreach( array("usergroups", "groupgroups", "appgroups", "depgroups", "emptygroups", + "servergroups", "wsgroups", "prtgroups", "tcgroups", "fongroups") as $type){ + + if (isset($_POST[$type])) { + $ogroupfilter[$type]= "checked"; + } else { + $ogroupfilter[$type]= ""; + } + } + } + if (isset($_GET['search'])){ + $s= mb_substr($_GET['search'], 0, 1, "UTF8")."*"; + if ($s == "**"){ + $s= "*"; + } + $ogroupfilter['regex']= $s; + } + register_global("ogroupfilter", $ogroupfilter); + + /* Prepare formular */ + if (!isset($this->ogroup) && + !isset($_POST['new_group']) && + !isset($_POST['delete_group']) && + !isset($_POST['select_group'])){ + $this->reload(); + } + + /* Check for exeeded sizelimit */ + if (($message= check_sizelimit()) != ""){ + return($message); + } + + /* New group? */ + if (isset($_POST['new_group'])){ + + /* By default we set 'dn' to 'new', all relevant plugins will + react on this. */ + $this->dn= "new"; + + /* Create new usertab object */ + $this->ogroup= new ogrouptabs($this->config, + $this->config->data['TABS']['OGROUPTABS'], $this->dn); + $this->ogroup->set_acl(array(':all')); + } + + if (isset($_POST['delete_group']) && isset($_POST['grouplist'])){ + + /* Get 'dn' from posted 'uid' */ + $this->dn= trim($_POST['grouplist']); + + /* Load permissions for selected 'dn' and check if + we're allowed to remove this 'dn' */ + $acl= get_permissions ($this->dn, $this->ui->subtreeACL); + $this->acl= get_module_permission($acl, "ogroup", $this->dn); + if (chkacl($this->acl, "delete") == ""){ + + /* Check locking, save current plugin in 'back_plugin', so + the dialog knows where to return. */ + if (($user= get_lock($this->dn)) != ""){ + return(gen_locked_message ($user, $this->dn)); + } + + /* Lock the current entry, so nobody will edit it during deletion */ + add_lock ($this->dn, $this->ui->dn); + $smarty->assign("info", sprintf(_("You're about to delete the object group '%s'."), $this->dn)); + return($smarty->fetch(get_template_path('remove.tpl', TRUE))); + } else { + + /* Obviously the user isn't allowed to delete. Show message and + clean session. */ + print_red (_("You are not allowed to delete this object group!")); + } + } + + /* Confirmation for deletion has been passed. Group should be deleted. */ + if (isset($_POST['delete_group_confirm'])){ + + /* Some nice guy may send this as POST, so we've to check + for the permissions again. */ + if (chkacl($this->acl, "delete") == ""){ + + /* Delete request is permitted, perform LDAP action */ + $this->ogroup= new ogrouptabs($this->config, + $this->config->data['TABS']['OGROUPTABS'], $this->dn); + $this->ogroup->set_acl(array($this->acl)); + $this->ogroup->delete (); + gosa_log ("Object group'".$this->dn."' has been removed"); + unset ($this->ogroup); + $this->ogroup= NULL; + + /* Group list has changed, reload it. */ + $this->reload (); + } else { + + /* Normally this shouldn't be reached, send some extra + logs to notify the administrator */ + print_red (_("You are not allowed to delete this object group!")); + gosa_log ("Warning: '".$this->ui->uid."' tried to trick group deletion."); + } + + /* Remove lock file after successfull deletion */ + del_lock ($this->dn); + unset($_SESSION['objectinfo']); + } + + + /* Delete group canceled? */ + if (isset($_POST['delete_cancel'])){ + del_lock ($this->dn); + unset($_SESSION['objectinfo']); + } + + if ((isset($_POST['select_group']) || (isset($_POST['edit_helper']) && $_POST['edit_helper'] == "1")) && isset($_POST['grouplist']) && $_POST['grouplist'] != ""){ + + /* Get 'dn' from posted 'uid', must be unique */ + $this->dn= trim($_POST['grouplist']); + + /* Check locking, save current plugin in 'back_plugin', so + the dialog knows where to return. */ + if (($user= get_lock($this->dn)) != ""){ + return(gen_locked_message ($user, $this->dn)); + } + + /* Lock the current entry, so everyone will get the + above dialog */ + add_lock ($this->dn, $this->ui->dn); + + /* Set up the users ACL's for this 'dn' */ + $acl= get_permissions ($this->dn, $this->ui->subtreeACL); + + /* Register grouptab to trigger edit dialog */ + $this->ogroup= new ogrouptabs($this->config, $this->config->data['TABS']['OGROUPTABS'], + $this->dn); + $this->ogroup->set_acl($acl); + $_SESSION['objectinfo']= $this->dn; + } + + /* Finish button has been pressed */ + if (isset($_POST['edit_finish'])){ + + /* Check tabs, will feed message array */ + $message= $this->ogroup->check(); + + /* Save, or display error message? */ + if (count($message) == 0){ + + /* Save user data to ldap */ + $this->ogroup->save(); + gosa_log ("Object group'".$this->dn."' has been saved"); + + /* Group has been saved successfully, remove lock from + LDAP. */ + if ($this->dn != "new"){ + del_lock ($this->dn); + } + + /* There's no page reload so we have to read new users at + this point. */ + $this->reload (); + unset ($this->ogroup); + $this->ogroup= NULL; + unset ($_SESSION['objectinfo']); + + } else { + /* Ok. There seem to be errors regarding to the tab data, + show message and continue as usual. */ + show_errors($message); + } + } + + /* Cancel dialogs */ + if (isset($_POST['edit_cancel'])){ + del_lock ($this->ogroup->dn); + unset ($this->ogroup); + $this->ogroup= NULL; + unset($_SESSION['objectinfo']); + } + + /* Show dialog if object is present */ + if ($this->ogroup){ + $display= $this->ogroup->execute(); + + /* Don't show buttons if tab dialog requests this */ + if (!$this->ogroup->by_object[$this->ogroup->current]->dialog){ + $display.= "

\n"; + $display.= "\n"; + $display.= " \n"; + $display.= "\n"; + $display.= "

"; + } + return ($display); + } + + /* Show main page */ + $smarty->assign("search_image", get_template_path('images/search.png')); + $smarty->assign("tree_image", get_template_path('images/tree.png')); + $smarty->assign("infoimage", get_template_path('images/info.png')); + $smarty->assign("launchimage", get_template_path('images/launch.png')); + $smarty->assign("deplist", $this->config->idepartments); + + $smarty->assign("groups", $this->convert_list($this->grouplist)); + + foreach( array("usergroups", "groupgroups", "appgroups", "depgroups", "emptygroups", + "servergroups", "wsgroups", "prtgroups", "tcgroups", "fongroups", "regex", "depselect") as $type){ + $smarty->assign("$type", $ogroupfilter[$type]); + } + + $smarty->assign("hint", print_sizelimit_warning()); + $smarty->assign("apply", apply_filter()); + return ($smarty->fetch (get_template_path('headpage.tpl', TRUE))); + } + + + function convert_list($input) + { + $temp= ""; + $conv= array( "U" => "select_user.png", + "G" => "select_groups.png", + "A" => "select_application.png", + "D" => "select_department.png", + "S" => "select_server.png", + "F" => "select_phone.png", + "W" => "select_workstation.png", + "T" => "select_terminal.png", + "P" => "select_printer.png"); + + foreach ($input as $key => $value){ + + /* Assemble picture */ + $type= $value['type']; + if (isset($type[0])){ + $p1= $conv[$type[0]]; + } else { + $p1= "empty.png"; + } + if (isset($type[1])){ + $p2= $conv[$type[1]]; + } else { + $p2= "empty.png"; + } + + /* Generate output */ + $temp= "\n".$temp; + } + + return ($temp); + } + + + function reload() + { + /* Get config */ + $ogroupfilter= get_global('ogroupfilter'); + + /* Set base for all searches */ + $base= $ogroupfilter['depselect']; + + /* Regex filter? */ + if ($ogroupfilter['regex'] != ""){ + $regex= $ogroupfilter['regex']; + } else { + $regex= "*"; + } + + /* User filter? */ + $this->grouplist= array(); + + /* Generate grouplist filter */ + $filter= ""; + + if ($ogroupfilter['usergroups'] == "checked"){ + $filter.= "(gosaGroupObjects=*U*)"; + } + if ($ogroupfilter['groupgroups'] == "checked"){ + $filter.= "(gosaGroupObjects=*G*)"; + } + if ($ogroupfilter['appgroups'] == "checked"){ + $filter.= "(gosaGroupObjects=*A*)"; + } + if ($ogroupfilter['depgroups'] == "checked"){ + $filter.= "(gosaGroupObjects=*D*)"; + } + if ($ogroupfilter['servergroups'] == "checked"){ + $filter.= "(gosaGroupObjects=*S*)"; + } + if ($ogroupfilter['wsgroups'] == "checked"){ + $filter.= "(gosaGroupObjects=*W*)"; + } + if ($ogroupfilter['prtgroups'] == "checked"){ + $filter.= "(gosaGroupObjects=*P*)"; + } + if ($ogroupfilter['tcgroups'] == "checked"){ + $filter.= "(gosaGroupObjects=*T*)"; + } + if ($ogroupfilter['fongroups'] == "checked"){ + $filter.= "(gosaGroupObjects=*F*)"; + } + if ($ogroupfilter['emptygroups'] == "checked"){ + $filter.= "(gosaGroupObjects=[])"; + } + + if ($filter != ""){ + $filter= "(&(cn=$regex)(objectClass=gosaGroupOfNames)(|$filter))"; + } else { + $filter= "(&(cn=$regex)(objectClass=gosaGroupOfNames))"; + } + $res= get_list($this->ui->subtreeACL, "$filter", TRUE, $base, array("cn", "description", "gosaGroupObjects"), TRUE); + foreach ($res as $value){ + $pictype= preg_replace('/[\[\]]/', '', $value["gosaGroupObjects"][0]); + $sortstring= preg_split('//', $pictype, -1, PREG_SPLIT_NO_EMPTY); + sort($sortstring); + $pictype= implode("", $sortstring); + if (isset($value["description"][0])){ + $this->grouplist[$value["dn"]]= array("text" => $value["cn"][0]." [". + $value["description"][0]."]", "type" => $pictype); + } else { + $this->grouplist[$value["dn"]]= array("text" => $value["cn"][0], + "type" => $pictype); + } + } + ksort ($this->grouplist); + reset ($this->grouplist); + } + +} + +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/plugins/admin/ogroups/class_termgroup.inc b/plugins/admin/ogroups/class_termgroup.inc new file mode 100644 index 000000000..e493341ea --- /dev/null +++ b/plugins/admin/ogroups/class_termgroup.inc @@ -0,0 +1,101 @@ +get_ldap_link(); + + + /* We're only interested in the terminal members here, evaluate + these... */ + for ($i= 0; $i<$this->attrs['member']['count']; $i++){ + $member= $this->attrs['member'][$i]; + $ldap->cat($member); + if (preg_match("/success/i", $ldap->error)){ + $attrs = $ldap->fetch(); + if (in_array("gotoTerminal", $attrs['objectClass']) || + in_array("gotoWorkstation", $attrs['objectClass'])){ + $this->members[$attrs['cn'][0]]= $attrs['macAddress'][0]; + } + } + } + + /* Include config object */ + $this->config= $config; + } + + function execute() + { + + /* Watch for events */ + if (isset($_POST['action'])){ + $macaddresses=""; + $names=""; + foreach ($this->members as $cn => $macAddress){ + $macaddresses.= "$macAddress "; + $names.= "$cn "; + } + + switch($_POST['saction']){ + case 'wake': + $cmd= $this->search($this->config->data['TABS'], "terminfo", "WAKECMD"); + if ($cmd == ""){ + print_red(_("No WAKECMD definition found in your gosa.conf")); + } else { + exec ($cmd." ".$macaddresses, $dummy, $retval); + if ($retval != 0){ + print_red(sprintf(_("Execution of '%s' failed!"), $cmd)); + } + } + break; + + case 'reboot': + $cmd= $this->search($this->config->data['TABS'], "terminfo", "REBOOTCMD"); + if ($cmd == ""){ + print_red(_("No REBOOTCMD definition found in your gosa.conf")); + } else { + exec ($cmd." ".$names, $dummy, $retval); + if ($retval != 0){ + print_red(sprintf(_("Execution of '%s' failed!"), $cmd)); + } + } + break; + + case 'halt': + $cmd= $this->search($this->config->data['TABS'], "terminfo", "HALTCMD"); + if ($cmd == ""){ + print_red(_("No HALTCMD definition found in your gosa.conf")); + } else { + exec ($cmd." ".$names, $dummy, $retval); + if ($retval != 0){ + print_red(sprintf(_("Execution of '%s' failed!"), $cmd)); + } + } + break; + } + } + + + + /* Set government mode */ + $smarty= get_smarty(); + + $smarty->assign("actions", array("wake" => _("Wake up"), "halt" => _("Switch off"), "reboot" => _("Reboot"))); + + /* Show main page */ + return ($smarty->fetch (get_template_path('termgroup.tpl', TRUE))); + } + +} + + +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/plugins/admin/ogroups/generic.tpl b/plugins/admin/ogroups/generic.tpl new file mode 100644 index 000000000..1ffcde654 --- /dev/null +++ b/plugins/admin/ogroups/generic.tpl @@ -0,0 +1,49 @@ + + + + + +
+ + + + + + + + + + + + + + + + + +
{t}Group name{/t}{$must} + +
{t}Description{/t} +
{t}Base{/t}{$must} + +
+ +
+ {t}Member objects{/t} ({$combinedObjects}) +
+ +
+   + +
+ + + diff --git a/plugins/admin/ogroups/headpage.tpl b/plugins/admin/ogroups/headpage.tpl new file mode 100644 index 000000000..ae1bc945a --- /dev/null +++ b/plugins/admin/ogroups/headpage.tpl @@ -0,0 +1,72 @@ + + + + + +
+
+

+ {t}List of groups{/t} {$hint} +

+
+
+

+ +
+   +   +   + +

+
+ +
+
+

[i]{t}Information{/t}

+
+
+

+ {t}This menu allows to add, edit or remove selected groups. You may want to use the range selector on top of the group listbox, when working with a large number of groups.{/t} +

+

+ {t}-Edit- and -New group- will execute an assistant to aid you in editing group properties.-Delete- will ask for confirmation before removing groups.{/t} +

+
+
+
+

[F]{t}Filters{/t}

+
+
+

+ + {$alphabet} +
+

+

+ {t}Show empty groups{/t}
+ {t}Show groups containing users{/t}
+ {t}Show groups containing groups{/t}
+ {t}Show groups containing applications{/t}
+ {t}Show groups containing departments{/t}
+ {t}Show groups containing servers{/t}
+ {t}Show groups containing workstations{/t}
+ {t}Show groups containing terminals{/t}
+ {t}Show groups containing printers{/t}
+

+

+ +
 {t}Display groups of department{/t}
+

+

+ +
 {t}Display groups matching{/t}
+

+ {$apply} +
+
+ + diff --git a/plugins/admin/ogroups/main.inc b/plugins/admin/ogroups/main.inc new file mode 100644 index 000000000..0f3d17e1d --- /dev/null +++ b/plugins/admin/ogroups/main.inc @@ -0,0 +1,49 @@ +execute (); + + /* Page header*/ + if (isset($_SESSION['objectinfo'])){ + $display= print_header(get_template_path('images/ogroup.png'), + _("Object groups"), + " ".$_SESSION['objectinfo']); + } else { + $display= print_header(get_template_path('images/ogroup.png'), _("Object groups")); + } + + $display.= $output; + + /* Store changes in session */ + $_SESSION['ogroup']= $ogroup; +} + +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/plugins/admin/ogroups/ogroup_objects.tpl b/plugins/admin/ogroups/ogroup_objects.tpl new file mode 100644 index 000000000..ec6b1b1bc --- /dev/null +++ b/plugins/admin/ogroups/ogroup_objects.tpl @@ -0,0 +1,60 @@ + + + + + +
+
+

+ {t}Select objects to add{/t} {$hint} +

+
+
+

+ + +

+
+
+
+

[F]{t}Filters{/t}

+
+
+

+ + {$alphabet} +
+

+

+ {t}Show departments{/t}
+ {t}Show people{/t}
+ {t}Show groups{/t}
+ {t}Show applications{/t}
+ {t}Show servers{/t}
+ {t}Show workstations{/t}
+ {t}Show terminals{/t}
+ {t}Show printers{/t}
+ {t}Show phones{/t}
+

+

+ +
 {t}Display objects of department{/t}
+

+

+ +
 {t}Display objects matching{/t}
+

+ {$apply} +
+
+ +

+ +   + +

+ diff --git a/plugins/admin/ogroups/remove.tpl b/plugins/admin/ogroups/remove.tpl new file mode 100644 index 000000000..a3058fc86 --- /dev/null +++ b/plugins/admin/ogroups/remove.tpl @@ -0,0 +1,19 @@ +
+  {t}Warning{/t} +
+ +

+ {$info} + {t}Please double check if you really want to do this since there is no way for GOsa to get your data back.{/t} +

+ +

+ {t}So - if you're sure - press Delete to continue or Cancel to abort.{/t} +

+ +

+ +   + +

+ diff --git a/plugins/admin/ogroups/tabs_ogroups.inc b/plugins/admin/ogroups/tabs_ogroups.inc new file mode 100644 index 000000000..96c190d34 --- /dev/null +++ b/plugins/admin/ogroups/tabs_ogroups.inc @@ -0,0 +1,64 @@ +base= $this->by_object['ogroup']->base; + + /* Insert extra tabs for several object types - if present */ + $objects= preg_replace('/[\[\]]/', '', $this->by_object['ogroup']->gosaGroupObjects); + for ($n= 0; $nby_name['termgroup']= _("Terminals"); + $this->by_object['termgroup']= new termgroup($this->config, $this->dn); + $this->by_object['termgroup']->parent= &$this; + + break; + } + } + } + + function check() + { + return (tabs::check(TRUE)); + } + + + function save() + { + $baseobject= $this->by_object['ogroup']; + + /* Check for new 'dn', in order to propagate the + 'dn' to all plugins */ + $new_dn= 'cn='.$baseobject->cn.','.get_groups_ou().$baseobject->base; + + /* Move group? */ + if ($this->dn != $new_dn){ + + /* Write entry on new 'dn' */ + if ($this->dn != "new"){ + $baseobject->move($this->dn, $new_dn); + $this->by_object['ogroup']= $baseobject; + } + + /* Happen to use the new one */ + $this->dn= $new_dn; + } + + if ($this->dn == "new"){ + $this->dn= 'cn='.$baseobject->cn.','.get_groups_ou().$baseobject->base; + } + tabs::save(TRUE); + } + +} + +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/plugins/admin/ogroups/termgroup.tpl b/plugins/admin/ogroups/termgroup.tpl new file mode 100644 index 000000000..7ab540f89 --- /dev/null +++ b/plugins/admin/ogroups/termgroup.tpl @@ -0,0 +1,17 @@ +{t}All actions you choose here influence all machines in this object group. Be aware that rebooting machines may not make people happy who are currently working at these machines.{/t} +

 

+

{t}Action{/t}

+ + + + + +
+ + + +
+ diff --git a/plugins/admin/systems/chooser.tpl b/plugins/admin/systems/chooser.tpl new file mode 100644 index 000000000..df5b0099f --- /dev/null +++ b/plugins/admin/systems/chooser.tpl @@ -0,0 +1,21 @@ +

{t}Choose the kind of system component you want to create{/t}

+ +

+ {t}Linux terminals and workstations are autocreated on bootup. For this reason you're only be able to create templates for a specific tree. Servers are normally automatically added too, but in some special cases you may need to create a faked server entry to provide GOsa with some informations. Other network components may be used for Nagios setups to create component dependencies.{/t} +

+ +{t}Linux thin client template{/t}
+{t}Linux workstation template{/t}
+{t}Linux Server{/t}
+{t}Windows workstation{/t}
+{t}Network printer{/t}
+{t}Phone{/t}
+{t}Other network component{/t}
+ +

+ +   + +

+ + diff --git a/plugins/admin/systems/class_componentGeneric.inc b/plugins/admin/systems/class_componentGeneric.inc new file mode 100644 index 000000000..3a8ab8d9f --- /dev/null +++ b/plugins/admin/systems/class_componentGeneric.inc @@ -0,0 +1,180 @@ + "Eins ist toll", "zwei" => "Zwei ist noch besser"); + + /* Generic terminal attributes */ + var $interfaces= array(); + + /* Needed values and lists */ + var $base= ""; + var $cn= ""; + var $macAddress= ""; + var $ipHostNumber= ""; + var $description= ""; + var $orig_dn= ""; + + /* attribute list for save action */ + var $attributes= array("cn", "description", "macAddress", "ipHostNumber"); + var $objectclasses= array("top", "device", "ipHost", "ieee802Device"); + + function componentgeneric ($config, $dn= NULL) + { + plugin::plugin ($config, $dn); + + /* Set base */ + if ($this->dn == "new"){ + $ui= get_userinfo(); + $this->base= dn2base($ui->dn); + $this->cn= ""; + } else { + $this->base= preg_replace ("/^[^,]+,[^,]+,[^,]+,/", "", $this->dn); + } + + /* Save dn for later references */ + $this->orig_dn= $this->dn; + } + + function execute() + { + /* Do we represent a valid phone? */ + if (!$this->is_account && $this->parent == NULL){ + $display= " ". + _("This 'dn' has no network features.").""; + return($display); + } + + /* Fill templating stuff */ + $smarty= get_smarty(); + $smarty->assign("bases", $this->config->idepartments); + + /* Assign attributes */ + foreach ($this->attributes as $attr){ + $smarty->assign($attr."ACL", chkacl($this->acl, $attr)); + $smarty->assign("$attr", $this->$attr); + } + $smarty->assign("base_select", $this->base); + + /* Show main page */ + $smarty->assign("netconfig", dirname(__FILE__)."/network.tpl"); + return($smarty->fetch (get_template_path('component.tpl', TRUE))); + } + + function remove_from_parent() + { + $ldap= $this->config->get_ldap_link(); + $ldap->rmdir($this->dn); + show_ldap_error($ldap->get_error()); + $this->handle_post_events("remove"); + + /* Delete references to object groups */ + $ldap->cd ($this->config->current['BASE']); + $ldap->search ("(&(objectClass=gosaGroupOfNames)(member=".$this->dn."))", array("cn")); + while ($ldap->fetch()){ + $og= new ogroup($this->config, $ldap->getDN()); + unset($og->member[$this->dn]); + $og->save (); + } + + } + + + /* Save data to object */ + function save_object() + { + plugin::save_object(); + + /* Save base, since this is no LDAP attribute */ + if (isset($_POST['base']) && chkacl($this->acl, "create") == ""){ + $this->base= $_POST['base']; + } + } + + + /* Check supplied data */ + function check() + { + $message= array(); + $this->dn= "cn=".$this->cn.",ou=netdevices,ou=systems,".$this->base; + + /* must: cn, macAddress */ + if ($this->cn == "" && chkacl ($this->acl, "cn") == ""){ + $message[]= "The required field 'Component name' is not set."; + } + if ($this->macAddress == "" && chkacl ($this->acl, "macAddresscn") == ""){ + $message[]= "The required field 'MAC-address' is not set."; + } + + $ui= get_userinfo(); + $acl= get_permissions ($this->dn, $ui->subtreeACL); + $acl= get_module_permission($acl, "component", $this->dn); + if (chkacl($acl, "create") != ""){ + $message[]= _("You have no permissions to create a component on this 'Base'."); + } + + if ($this->orig_dn != $this->dn){ + $ldap= $this->config->get_ldap_link(); + $ldap->cd ($this->base); + $ldap->search ("(cn=".$this->cn.")", array("cn")); + if ($ldap->count() != 0){ + while ($attrs= $ldap->fetch()){ + if ($attrs['dn'] != $this->orig_dn){ + $message[]= sprintf (_("There is already an entry '%s' in the base choosen by you"), $this->cn); + break; + } + } + } + } + + return ($message); + } + + + /* Save to LDAP */ + function save() + { + plugin::save(); + + /* Remove all empty values */ + if ($this->orig_dn == 'new'){ + $attrs= array(); + foreach ($this->attrs as $key => $val){ + if (is_array($val) && count($val) == 0){ + continue; + } + $attrs[$key]= $val; + } + $this->attrs= $attrs; + } + + /* Write back to ldap */ + $ldap= $this->config->get_ldap_link(); + if ($this->orig_dn == 'new'){ + $ldap->cd($this->config->current['BASE']); + $ldap->create_missing_trees(preg_replace('/^[^,]+,/', '', $this->dn)); + $ldap->cd($this->dn); + $ldap->add($this->attrs); + $this->handle_post_events("add"); + } else { + if ($this->orig_dn != $this->dn){ + $this->move($this->orig_dn, $this->dn); + } + + $ldap->cd($this->dn); + $ldap->modify($this->attrs); + $this->handle_post_events("modify"); + } + show_ldap_error($ldap->get_error()); + + /* Optionally execute a command after we're done */ + $this->postcreate(); + } + +} + +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/plugins/admin/systems/class_phoneGeneric.inc b/plugins/admin/systems/class_phoneGeneric.inc new file mode 100644 index 000000000..3d8675b97 --- /dev/null +++ b/plugins/admin/systems/class_phoneGeneric.inc @@ -0,0 +1,183 @@ + "Eins ist toll", "zwei" => "Zwei ist noch besser"); + + /* Generic terminal attributes */ + var $interfaces= array(); + + /* Needed values and lists */ + var $base= ""; + var $cn= ""; + var $macAddress= ""; + var $ipHostNumber= ""; + var $description= ""; + var $orig_dn= ""; + + /* attribute list for save action */ + var $attributes= array("cn", "description", "macAddress", "ipHostNumber"); + var $objectclasses= array("top", "goFonHardware"); + + function phonegeneric ($config, $dn= NULL) + { + plugin::plugin ($config, $dn); + + /* Set base */ + if ($this->dn == "new"){ + $ui= get_userinfo(); + $this->base= dn2base($ui->dn); + $this->cn= ""; + } else { + $this->base= preg_replace ("/^[^,]+,[^,]+,[^,]+,/", "", $this->dn); + } + + /* Save dn for later references */ + $this->orig_dn= $this->dn; + } + + function execute() + { + /* Do we represent a valid phone? */ + if (!$this->is_account && $this->parent == NULL){ + $display= " ". + _("This 'dn' has no phone features.").""; + return($display); + } + + /* Fill templating stuff */ + $smarty= get_smarty(); + $smarty->assign("bases", $this->config->idepartments); + + /* Assign attributes */ + foreach ($this->attributes as $attr){ + $smarty->assign($attr."ACL", chkacl($this->acl, $attr)); + $smarty->assign("$attr", $this->$attr); + } + $smarty->assign("base_select", $this->base); + + /* Show main page */ + $smarty->assign("netconfig", dirname(__FILE__)."/network.tpl"); + return($smarty->fetch (get_template_path('phone.tpl', TRUE))); + } + + function remove_from_parent() + { + $ldap= $this->config->get_ldap_link(); + $ldap->rmdir($this->dn); + show_ldap_error($ldap->get_error()); + $this->handle_post_events("remove"); + + /* Delete references to object groups */ + $ldap->cd ($this->config->current['BASE']); + $ldap->search ("(&(objectClass=gosaGroupOfNames)(member=".$this->dn."))", array("cn")); + while ($ldap->fetch()){ + $og= new ogroup($this->config, $ldap->getDN()); + unset($og->member[$this->dn]); + $og->save (); + } + + } + + + /* Save data to object */ + function save_object() + { + plugin::save_object(); + + /* Save base, since this is no LDAP attribute */ + if (isset($_POST['base']) && chkacl($this->acl, "create") == ""){ + $this->base= $_POST['base']; + } + } + + + /* Check supplied data */ + function check() + { + $message= array(); + $this->dn= "cn=".$this->cn.",ou=phones,ou=systems,".$this->base; + + /* must: cn, macAddress */ + if ($this->cn == "" && chkacl ($this->acl, "cn") == ""){ + $message[]= "The required field 'Phone name' is not set."; + } + if ($this->cn == "0" && chkacl ($this->acl, "cn") == ""){ + $message[]= "The 'Phone name' '0' is reserved and cannot be used."; + } + if ($this->macAddress == "" && chkacl ($this->acl, "macAddresscn") == ""){ + $message[]= "The required field 'MAC-address' is not set."; + } + + $ui= get_userinfo(); + $acl= get_permissions ($this->dn, $ui->subtreeACL); + $acl= get_module_permission($acl, "phone", $this->dn); + if (chkacl($acl, "create") != ""){ + $message[]= _("You have no permissions to create a phone on this 'Base'."); + } + + if ($this->orig_dn != $this->dn){ + $ldap= $this->config->get_ldap_link(); + $ldap->cd ($this->base); + $ldap->search ("(cn=".$this->cn.")", array("cn")); + if ($ldap->count() != 0){ + while ($attrs= $ldap->fetch()){ + if ($attrs['dn'] != $this->orig_dn){ + $message[]= sprintf (_("There is already an entry '%s' in the base choosen by you"), $this->cn); + break; + } + } + } + } + + return ($message); + } + + + /* Save to LDAP */ + function save() + { + plugin::save(); + + /* Remove all empty values */ + if ($this->orig_dn == 'new'){ + $attrs= array(); + foreach ($this->attrs as $key => $val){ + if (is_array($val) && count($val) == 0){ + continue; + } + $attrs[$key]= $val; + } + $this->attrs= $attrs; + } + + /* Write back to ldap */ + $ldap= $this->config->get_ldap_link(); + if ($this->orig_dn == 'new'){ + $ldap->cd($this->config->current['BASE']); + $ldap->create_missing_trees(preg_replace('/^[^,]+,/', '', $this->dn)); + $ldap->cd($this->dn); + $ldap->add($this->attrs); + $this->handle_post_events("add"); + } else { + if ($this->orig_dn != $this->dn){ + $this->move($this->orig_dn, $this->dn); + } + + $ldap->cd($this->dn); + $ldap->modify($this->attrs); + $this->handle_post_events("modify"); + } + show_ldap_error($ldap->get_error()); + + /* Optionally execute a command after we're done */ + $this->postcreate(); + } + +} + +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/plugins/admin/systems/class_printGeneric.inc b/plugins/admin/systems/class_printGeneric.inc new file mode 100644 index 000000000..e36190879 --- /dev/null +++ b/plugins/admin/systems/class_printGeneric.inc @@ -0,0 +1,186 @@ + "Eins ist toll", "zwei" => "Zwei ist noch besser"); + + /* Generic terminal attributes */ + var $interfaces= array(); + + /* Needed values and lists */ + var $base= ""; + var $cn= ""; + var $macAddress= ""; + var $ipHostNumber= ""; + var $l= ""; + var $description= ""; + var $labeledURI= ""; + var $gotoPrinterPPD= ""; + var $orig_dn= ""; + + /* attribute list for save action */ + var $attributes= array("cn", "description", "l", "labeledURI", "gotoPrinterPPD", + "macAddress", "ipHostNumber"); + var $objectclasses= array("top", "gotoPrinter"); + + function printgeneric ($config, $dn= NULL) + { + plugin::plugin ($config, $dn); + + /* Set base */ + if ($this->dn == "new"){ + $ui= get_userinfo(); + $this->base= dn2base($ui->dn); + $this->cn= ""; + } else { + $this->base= preg_replace ("/^[^,]+,[^,]+,[^,]+,/", "", $this->dn); + } + + /* Save dn for later references */ + $this->orig_dn= $this->dn; + } + + function execute() + { + /* Do we need to flip is_account state? */ + if (isset($_POST['modify_state'])){ + $this->is_account= !$this->is_account; + } + + /* Do we represent a valid printer? */ + if (!$this->is_account && $this->parent == NULL){ + $display= " ". + _("This 'dn' has no printer features.").""; + return($display); + } + + /* Fill templating stuff */ + $smarty= get_smarty(); + $smarty->assign("bases", $this->config->idepartments); + + /* Assign attributes */ + foreach ($this->attributes as $attr){ + $smarty->assign($attr."ACL", chkacl($this->acl, $attr)); + $smarty->assign("$attr", $this->$attr); + } + $smarty->assign("base_select", $this->base); + + /* Show main page */ + $smarty->assign("netconfig", dirname(__FILE__)."/network.tpl"); + return($smarty->fetch (get_template_path('printer.tpl', TRUE))); + } + + function remove_from_parent() + { + $ldap= $this->config->get_ldap_link(); + $ldap->rmdir($this->dn); + show_ldap_error($ldap->get_error()); + $this->handle_post_events("remove"); + + /* Delete references to object groups */ + $ldap->cd ($this->config->current['BASE']); + $ldap->search ("(&(objectClass=gosaGroupOfNames)(member=".$this->dn."))", array("cn")); + while ($ldap->fetch()){ + $og= new ogroup($this->config, $ldap->getDN()); + unset($og->member[$this->dn]); + $og->save (); + } + + } + + + /* Save data to object */ + function save_object() + { + plugin::save_object(); + + /* Save base, since this is no LDAP attribute */ + if (isset($_POST['base']) && chkacl($this->acl, "create") == ""){ + $this->base= $_POST['base']; + } + } + + + /* Check supplied data */ + function check() + { + $message= array(); + $this->dn= "cn=".$this->cn.",ou=printers,ou=systems,".$this->base; + + /* must: cn */ + if ($this->cn == "" && chkacl ($this->acl, "cn") == ""){ + $message[]= "The required field 'Printer name' is not set."; + } + + $ui= get_userinfo(); + $acl= get_permissions ($this->dn, $ui->subtreeACL); + $acl= get_module_permission($acl, "printer", $this->dn); + if (chkacl($acl, "create") != ""){ + $message[]= _("You have no permissions to create a printer on this 'Base'."); + } + + if ($this->orig_dn != $this->dn){ + $ldap= $this->config->get_ldap_link(); + $ldap->cd ($this->base); + $ldap->search ("(cn=".$this->cn.")", array("cn")); + if ($ldap->count() != 0){ + while ($attrs= $ldap->fetch()){ + if ($attrs['dn'] != $this->orig_dn){ + $message[]= sprintf (_("There is already an entry '%s' in the base choosen by you"), $this->cn); + break; + } + } + } + } + + return ($message); + } + + + /* Save to LDAP */ + function save() + { + plugin::save(); + + /* Remove all empty values */ + if ($this->orig_dn == 'new'){ + $attrs= array(); + foreach ($this->attrs as $key => $val){ + if (is_array($val) && count($val) == 0){ + continue; + } + $attrs[$key]= $val; + } + $this->attrs= $attrs; + } + + /* Write back to ldap */ + $ldap= $this->config->get_ldap_link(); + if ($this->orig_dn == 'new'){ + $ldap->cd($this->config->current['BASE']); + $ldap->create_missing_trees(preg_replace('/^[^,]+,/', '', $this->dn)); + $ldap->cd($this->dn); + $ldap->add($this->attrs); + $this->handle_post_events("add"); + } else { + if ($this->orig_dn != $this->dn){ + $this->move($this->orig_dn, $this->dn); + } + + $ldap->cd($this->dn); + $ldap->modify($this->attrs); + $this->handle_post_events("modify"); + } + show_ldap_error($ldap->get_error()); + + /* Optionally execute a command after we're done */ + $this->postcreate(); + } + +} + +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/plugins/admin/systems/class_servDB.inc b/plugins/admin/systems/class_servDB.inc new file mode 100644 index 000000000..dfa0f784f --- /dev/null +++ b/plugins/admin/systems/class_servDB.inc @@ -0,0 +1,211 @@ + "Eins ist toll", "zwei" => "Zwei ist noch besser"); + + /* Object information */ + var $goImapName= ""; + var $goImapConnect= ""; + var $goImapAdmin= ""; + var $goImapPassword= ""; + var $goImapSieveServer= ""; + var $goImapSievePort= ""; + var $goKrbRealm= ""; + var $goKrbAdmin= ""; + var $goKrbPassword= ""; + var $goFaxAdmin= ""; + var $goFaxPassword= ""; + var $goLogAdmin= ""; + var $goLogPassword= ""; + var $goFonAdmin= ""; + var $goFonPassword= ""; + var $goFonAreaCode= ""; + var $goFonCountryCode= ""; + + /* attribute list for save action */ + var $attributes= array("goImapName", "goImapConnect", "goImapAdmin", "goImapPassword", + "goImapSieveServer", "goImapSievePort", "goKrbRealm", + "goKrbAdmin", "goKrbPassword", "goFaxAdmin", "goFaxPassword", + "goLogAdmin", "goLogPassword", "goFonAdmin", "goFonPassword", + "goFonAreaCode", "goFonCountryCode"); + var $objectclasses= array("top", "goServer"); + var $additionaloc= array("goImapServer" => array("goImapName", "goImapConnect", + "goImapAdmin", "goImapPassword", + "goImapSieveServer", + "goImapSievePort"), + "goKrbServer" => array("goKrbRealm", "goKrbAdmin", + "goKrbPassword"), + "goFaxServer" => array("goFaxAdmin", "goFaxPassword"), + "goLogDBServer" => array("goLogAdmin", "goLogPassword"), + "goFonServer" => array("goFonAdmin", "goFonPassword", + "goFonAreaCode", "goFonCountryCode")); + + function servdb ($config, $dn= NULL) + { + plugin::plugin ($config, $dn); + + /* Make dynamic list of objectClasses */ + foreach ($this->additionaloc as $oc => $dummy){ + if (isset($this->attrs['objectClass']) && in_array($oc, $this->attrs['objectClass'])){ + $this->objectclasses[$oc]= $oc; + } + } + + /* Always is account... */ + $this->is_account= TRUE; + } + + function execute() + { + /* Fill templating stuff */ + $smarty= get_smarty(); + + /* Attributes... */ + foreach ($this->attributes as $attr){ + $smarty->assign("$attr", $this->$attr); + $smarty->assign("$attr"."ACL", chkacl($this->acl, $attr)); + } + + /* Classes... */ + foreach ($this->additionaloc as $oc => $dummy){ + if (isset($this->objectclasses[$oc])){ + $smarty->assign("$oc", "checked"); + $smarty->assign("$oc"."ACL", chkacl($this->acl, $oc)); + } else { + $smarty->assign("$oc"."State", "disabled"); + } + } + + return($smarty->fetch (get_template_path('servdb.tpl', TRUE))); + } + + function remove_from_parent() + { + /* This cannot be removed... */ + } + + + /* Save data to object */ + function save_object() + { + plugin::save_object(); + + /* Save checkbox state */ + foreach ($this->additionaloc as $oc => $dummy){ + if (isset($_POST[$oc]) && $_POST[$oc] == '1'){ + $this->objectclasses[$oc]= $oc; + } else { + unset($this->objectclasses[$oc]); + } + } + } + + + /* Check supplied data */ + function check() + { + $message= array(); + + /* All fields are marked as *must* */ + if (in_array("goImapServer", $this->objectclasses)){ + foreach (array("goImapAdmin", "goImapName") as $attr){ + if ($this->$attr == "" || preg_match("/ /", $this->$attr)){ + $message[]= sprintf(_("The attribute '%s' is empty or contains invalid characters."), $attr); + } + } + + /* Check connect string */ + if (!preg_match('/^\{[^:]+:[0-9]+.*\}$/', $this->goImapConnect)){ + $message[]= sprintf(_("The imap connect string needs to be in the form '%s'."), + '{server-name:port/options}'); + } + if (!preg_match('/^[0-9]+$/', $this->goImapSievePort)){ + $message[]= _("The sieve port needs to be numeric."); + } + } + if (in_array("goKrbServer", $this->objectclasses)){ + foreach (array("goKrbAdmin", "goKrbRealm") as $attr){ + if ($this->$attr == "" || preg_match("/ /", $this->$attr)){ + $message[]= sprintf(_("The attribute '%s' is empty or contains invalid characters."), $attr); + } + } + } + if (in_array("goFaxServer", $this->objectclasses)){ + if ($this->goFaxAdmin == "" || preg_match("/ /", $this->goFaxAdmin)){ + $message[]= sprintf(_("The attribute '%s' is empty or contains invalid characters."), "goFaxAdmin"); + } + } + if (in_array("goLogServer", $this->objectclasses)){ + if ($this->goLogAdmin == "" || preg_match("/ /", $this->goLogAdmin)){ + $message[]= sprintf(_("The attribute '%s' is empty or contains invalid characters."), "goLogAdmin"); + } + } + if (in_array("goFonServer", $this->objectclasses)){ + foreach (array("goFonAdmin", "goFonAreaCode", "goFonCountryCode") as $attr){ + if ($this->$attr == "" || preg_match("/ /", $this->$attr)){ + $message[]= sprintf(_("The attribute '%s' is empty or contains invalid characters."), $attr); + } + } + } + + return ($message); + } + + + /* Save to LDAP */ + function save() + { + /* Normalize lazy objectclass arrays */ + $objectclasses= array(); + foreach($this->objectclasses as $oc){ + $objectclasses[]= $oc; + } + $this->objectclasses= $objectclasses; + plugin::save(); + + /* Remove objectclasses */ + unset ($this->attrs['objectClass']); + foreach($this->objectclasses as $oc){ + $this->attrs['objectClass'][]= $oc; + } + + /* Adapt sieve server if needed */ + if (in_array('goImapServer', $this->objectclasses)){ + $this->attrs['goImapSieveServer']= preg_replace('/:.*$/', '', + preg_replace('/^{([^}]+)}$/', '\\1', + $this->attrs['goImapConnect'])); + } + + /* Remove unneeded attributes */ + foreach ($this->additionaloc as $oc => $attrs){ + if (!in_array($oc, $this->objectclasses)){ + foreach ($attrs as $attr){ + $this->attrs[$attr]= array(); + } + } + } + + /* Write to LDAP */ + $ldap= $this->config->get_ldap_link(); + $ldap->cd($this->dn); + $ldap->modify($this->attrs); + show_ldap_error($ldap->get_error()); + + /* Optionally execute a command after we're done */ + if ($this->initially_was_account == $this->is_account){ + if ($this->is_modified){ + $this->handle_post_events("mofify"); + } + } else { + $this->handle_post_events("add"); + } + } + +} + +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/plugins/admin/systems/class_servDHCP.inc b/plugins/admin/systems/class_servDHCP.inc new file mode 100644 index 000000000..dd5fffe56 --- /dev/null +++ b/plugins/admin/systems/class_servDHCP.inc @@ -0,0 +1,78 @@ + "Eins ist toll", "zwei" => "Zwei ist noch besser"); + + /* attribute list for save action */ + var $attributes= array(); + var $objectclasses= array("whatever"); + + function servdhcp ($config, $dn= NULL) + { + plugin::plugin ($config, $dn); + } + + function execute() + { + /* Fill templating stuff */ + $smarty= get_smarty(); + $display= ""; + + /* Do we need to flip is_account state? */ + if (isset($_POST['modify_state'])){ + $this->is_account= !$this->is_account; + } + + /* Show tab dialog headers */ + if ($this->is_account){ + $display= $this->show_header(_("Remove DHCP service"), + _("This server has DHCP features enabled. You can disable them by clicking below.")); + } else { + $display= $this->show_header(_("Add DHCP service"), + _("This server has DHCP features disabled. You can enable them by clicking below.")); + return ($display); + } + + $display.= $smarty->fetch(get_template_path('servdhcp.tpl', TRUE)); + return($display); + } + + function remove_from_parent() + { + /* This cannot be removed... */ + } + + + /* Save data to object */ + function save_object() + { + plugin::save_object(); + } + + + /* Check supplied data */ + function check() + { + $message= array(); + + return ($message); + } + + + /* Save to LDAP */ + function save() + { + plugin::save(); + + /* Optionally execute a command after we're done */ + #$this->handle_post_events($mode); + } + +} + +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/plugins/admin/systems/class_servDNS.inc b/plugins/admin/systems/class_servDNS.inc new file mode 100644 index 000000000..03c92fd0b --- /dev/null +++ b/plugins/admin/systems/class_servDNS.inc @@ -0,0 +1,78 @@ + "Eins ist toll", "zwei" => "Zwei ist noch besser"); + + /* attribute list for save action */ + var $attributes= array(); + var $objectclasses= array("whatever"); + + function servdns ($config, $dn= NULL) + { + plugin::plugin ($config, $dn); + } + + function execute() + { + /* Fill templating stuff */ + $smarty= get_smarty(); + $display= ""; + + /* Do we need to flip is_account state? */ + if (isset($_POST['modify_state'])){ + $this->is_account= !$this->is_account; + } + + /* Show tab dialog headers */ + if ($this->is_account){ + $display= $this->show_header(_("Remove DNS service"), + _("This server has DNS features enabled. You can disable them by clicking below.")); + } else { + $display= $this->show_header(_("Add DNS service"), + _("This server has DNS features disabled. You can enable them by clicking below.")); + return ($display); + } + + $display.= $smarty->fetch(get_template_path('servdns.tpl', TRUE)); + return($display); + } + + function remove_from_parent() + { + /* This cannot be removed... */ + } + + + /* Save data to object */ + function save_object() + { + plugin::save_object(); + } + + + /* Check supplied data */ + function check() + { + $message= array(); + + return ($message); + } + + + /* Save to LDAP */ + function save() + { + plugin::save(); + + /* Optionally execute a command after we're done */ + #$this->handle_post_events($mode); + } + +} + +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/plugins/admin/systems/class_servGeneric.inc b/plugins/admin/systems/class_servGeneric.inc new file mode 100644 index 000000000..caf9a08cb --- /dev/null +++ b/plugins/admin/systems/class_servGeneric.inc @@ -0,0 +1,232 @@ + "Eins ist toll", "zwei" => "Zwei ist noch besser"); + + /* Generic terminal attributes */ + var $interfaces= array(); + + /* Needed values and lists */ + var $base= ""; + var $cn= ""; + var $l= ""; + var $macAddress= ""; + var $ipHostNumber= ""; + var $description= ""; + var $orig_dn= ""; + + /* attribute list for save action */ + var $attributes= array("cn", "description", "macAddress", "ipHostNumber"); + var $objectclasses= array("top", "goServer"); + + function servgeneric ($config, $dn= NULL) + { + plugin::plugin ($config, $dn); + + /* Set base */ + if ($this->dn == "new"){ + $ui= get_userinfo(); + $this->base= dn2base($ui->dn); + $this->cn= ""; + } else { + $this->base= preg_replace ("/^[^,]+,[^,]+,[^,]+,/", "", $this->dn); + } + + /* Save dn for later references */ + $this->orig_dn= $this->dn; + } + + function execute() + { + /* Do we represent a valid server? */ + if (!$this->is_account && $this->parent == NULL){ + $display= " ". + _("This 'dn' has no server features.").""; + return($display); + } + + /* Check for action */ + if (isset($_POST['action'])){ + switch($_POST['saction']){ + case 'wake': + $cmd= $this->search($this->config->data['TABS'], "servgeneric", "WAKECMD"); + if ($cmd == ""){ + print_red(_("No WAKECMD definition found in your gosa.conf")); + } else { + exec ($cmd." ".$this->macAddress, $dummy, $retval); + if ($retval != 0){ + print_red(sprintf(_("Execution of '%s' failed!"), $cmd)); + } + } + break; + + case 'reboot': + $cmd= $this->search($this->config->data['TABS'], "servgeneric", "REBOOTCMD"); + if ($cmd == ""){ + print_red(_("No REBOOTCMD definition found in your gosa.conf")); + } else { + exec ($cmd." ".$this->cn, $dummy, $retval); + if ($retval != 0){ + print_red(sprintf(_("Execution of '%s' failed!"), $cmd)); + } + } + break; + + case 'halt': + $cmd= $this->search($this->config->data['TABS'], "servgeneric", "HALTCMD"); + if ($cmd == ""){ + print_red(_("No HALTCMD definition found in your gosa.conf")); + } else { + exec ($cmd." ".$this->cn, $dummy, $retval); + if ($retval != 0){ + print_red(sprintf(_("Execution of '%s' failed!"), $cmd)); + } + } + break; + } + } + + /* Fill templating stuff */ + $smarty= get_smarty(); + $smarty->assign("bases", $this->config->idepartments); + + /* Assign attributes */ + foreach ($this->attributes as $attr){ + $smarty->assign($attr."ACL", chkacl($this->acl, $attr)); + $smarty->assign("$attr", $this->$attr); + } + $smarty->assign("base_select", $this->base); + + /* Assign status */ + $query= "fping -q -r 1 -t 500 ".$this->cn; + exec ($query, $dummy, $retval); + + /* Offline */ + if ($retval == 0){ + $smarty->assign("actions", array("halt" => _("Switch off"), "reboot" => _("Reboot"))); + } else { + $smarty->assign("actions", array("wake" => _("Wake up"))); + } + + + /* Show main page */ + $smarty->assign("netconfig", dirname(__FILE__)."/network.tpl"); + + return($smarty->fetch (get_template_path('server.tpl', TRUE))); + } + + function remove_from_parent() + { + $ldap= $this->config->get_ldap_link(); + $ldap->rmdir($this->dn); + show_ldap_error($ldap->get_error()); + + /* Delete references to object groups */ + $ldap->cd ($this->config->current['BASE']); + $ldap->search ("(&(objectClass=gosaGroupOfNames)(member=".$this->dn."))", array("cn")); + while ($ldap->fetch()){ + $og= new ogroup($this->config, $ldap->getDN()); + unset($og->member[$this->dn]); + $og->save (); + } + + $this->handle_post_events("remove"); + } + + + /* Save data to object */ + function save_object() + { + plugin::save_object(); + + /* Save base, since this is no LDAP attribute */ + if (isset($_POST['base']) && chkacl($this->acl, "create") == ""){ + $this->base= $_POST['base']; + } + } + + + /* Check supplied data */ + function check() + { + $message= array(); + $this->dn= "cn=".$this->cn.",ou=servers,ou=systems,".$this->base; + + /* must: cn */ + if ($this->cn == "" && chkacl ($this->acl, "cn") == ""){ + $message[]= "The required field 'Server name' is not set."; + } + + $ui= get_userinfo(); + $acl= get_permissions ($this->dn, $ui->subtreeACL); + $acl= get_module_permission($acl, "server", $this->dn); + if (chkacl($acl, "create") != ""){ + $message[]= _("You have no permissions to create a server on this 'Base'."); + } + + if ($this->orig_dn != $this->dn){ + $ldap= $this->config->get_ldap_link(); + $ldap->cd ($this->base); + $ldap->search ("(cn=".$this->cn.")", array("cn")); + if ($ldap->count() != 0){ + while ($attrs= $ldap->fetch()){ + if ($attrs['dn'] != $this->orig_dn){ + $message[]= sprintf (_("There is already an entry '%s' in the base choosen by you"), $this->cn); + break; + } + } + } + } + + return ($message); + } + + + /* Save to LDAP */ + function save() + { + plugin::save(); + + /* Remove all empty values */ + if ($this->orig_dn == 'new'){ + $attrs= array(); + foreach ($this->attrs as $key => $val){ + if (is_array($val) && count($val) == 0){ + continue; + } + $attrs[$key]= $val; + } + $this->attrs= $attrs; + } + + /* Write back to ldap */ + $ldap= $this->config->get_ldap_link(); + if ($this->orig_dn == 'new'){ + $ldap->cd($this->config->current['BASE']); + $ldap->create_missing_trees(preg_replace('/^[^,]+,/', '', $this->dn)); + $ldap->cd($this->dn); + $ldap->add($this->attrs); + $mode= "add"; + } else { + if ($this->orig_dn != $this->dn){ + $this->move($this->orig_dn, $this->dn); + } + + $ldap->cd($this->dn); + $ldap->modify($this->attrs); + $mode= "modify"; + } + show_ldap_error($ldap->get_error()); + + /* Optionally execute a command after we're done */ + $this->handle_post_events($mode); + } + +} + +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/plugins/admin/systems/class_servService.inc b/plugins/admin/systems/class_servService.inc new file mode 100644 index 000000000..68fdd380b --- /dev/null +++ b/plugins/admin/systems/class_servService.inc @@ -0,0 +1,64 @@ + "Eins ist toll", "zwei" => "Zwei ist noch besser"); + + /* attribute list for save action */ + var $attributes= array(); + var $objectclasses= array(); + + function servservice ($config, $dn= NULL) + { + plugin::plugin ($config, $dn); + + /* Always is account... */ + $this->is_account= TRUE; + } + + function execute() + { + /* Fill templating stuff */ + $smarty= get_smarty(); + + return($smarty->fetch (get_template_path('servservice.tpl', TRUE))); + } + + function remove_from_parent() + { + /* This cannot be removed... */ + } + + + /* Save data to object */ + function save_object() + { + plugin::save_object(); + } + + + /* Check supplied data */ + function check() + { + $message= array(); + + return ($message); + } + + + /* Save to LDAP */ + function save() + { + plugin::save(); + + /* Optionally execute a command after we're done */ + #$this->handle_post_events($mode); + } + +} + +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/plugins/admin/systems/class_systemManagement.inc b/plugins/admin/systems/class_systemManagement.inc new file mode 100644 index 000000000..d66d04314 --- /dev/null +++ b/plugins/admin/systems/class_systemManagement.inc @@ -0,0 +1,758 @@ +config= $config; + $this->ui= $ui; + + /* Get global filter config */ + if (!is_global("terminalfilter")){ + $ui= get_userinfo(); + $base= get_base_from_people($ui->dn); + $terminalfilter= array("workstations" => "checked", + "thins" => "checked", + "winstations" => "checked", + "servers" => "checked", + "printers" => "checked", + "phones" => "checked", + "netdev" => "checked", + "user" => "*", + "depselect" => $base, + "regex" => "*"); + register_global("terminalfilter", $terminalfilter); + } + } + + function execute() + { + /* Save data */ + $terminalfilter= get_global("terminalfilter"); + foreach( array("depselect", "user", "regex") as $type){ + if (isset($_POST[$type])){ + $terminalfilter[$type]= $_POST[$type]; + } + } + if (isset($_POST['depselect'])){ + foreach( array("workstations", "thins", "winstations", "printers", "phones", "servers", "netdev") as $type){ + + if (isset($_POST[$type])) { + $terminalfilter[$type]= "checked"; + } else { + $terminalfilter[$type]= ""; + } + } + } + if (isset($_GET['search'])){ + $s= mb_substr($_GET['search'], 0, 1, "UTF8")."*"; + if ($s == "**"){ + $s= "*"; + } + $terminalfilter['regex']= $s; + } + register_global("terminalfilter", $terminalfilter); + + /* Check sorting variable */ + if (!isset($this->systab) && + !isset($_POST['new_terminal']) && + !isset($_POST['delete_terminal']) && + !isset($_POST['set_password']) && + !isset($_POST['select_terminal'])){ + $this->reload(); + } + $smarty= get_smarty(); + + /* Check for exeeded sizelimit */ + if (($message= check_sizelimit()) != ""){ + return($message); + } + + /* Try to get informations about what kind of system to create */ + if (isset($_POST['new_terminal'])) { + return ($smarty->fetch(get_template_path('chooser.tpl', TRUE))); + } + + /* Create new default terminal */ + if (isset($_POST['create_system'])) { + $this->dn= "new"; + $this->acl= array(":all"); + + switch ($_POST['system']){ + case 'terminal': + $this->systab= new termtabs($this->config, + $this->config->data['TABS']['TERMTABS'], $this->dn); + $this->systab->set_acl ($this->acl); + $this->systab->by_object['termgeneric']->cn= "default"; + $this->systab->by_object['termservice']->cn= "default"; + break; + + case 'workstation': + $this->systab= new worktabs($this->config, + $this->config->data['TABS']['WORKTABS'], $this->dn); + $this->systab->set_acl ($this->acl); + $this->systab->by_object['workgeneric']->cn= "wdefault"; + $this->systab->by_object['termservice']->cn= "default"; + break; + + case 'server': + $this->systab= new servtabs($this->config, + $this->config->data['TABS']['SERVTABS'], $this->dn); + $this->systab->set_acl ($this->acl); + break; + + case 'printer': + $this->systab= new printtabs($this->config, + $this->config->data['TABS']['PRINTTABS'], $this->dn); + $this->systab->set_acl ($this->acl); + break; + + case 'phone': + $this->systab= new phonetabs($this->config, + $this->config->data['TABS']['PHONETABS'], $this->dn); + $this->systab->set_acl ($this->acl); + break; + + case 'component': + $this->systab= new componenttabs($this->config, + $this->config->data['TABS']['COMPONENTTABS'], $this->dn); + $this->systab->set_acl ($this->acl); + break; + } + } + + /* User wants to edit data? */ + if ((isset($_POST['select_terminal']) || (isset($_POST['edit_helper']) && $_POST['edit_helper'] == "1")) && isset($_POST['termlist']) && + $_POST['termlist'] != ""){ + + /* Get 'dn' from posted 'cn', must be unique */ + $this->dn= trim($_POST['termlist']); + + /* Check locking, save current plugin in 'back_plugin', so + the dialog knows where to return. */ + if (($user= get_lock($this->dn)) != ""){ + return(gen_locked_message ($user, $this->dn)); + } + + /* Set up the users ACL's for this 'dn' */ + $acl= get_permissions ($this->dn, $this->ui->subtreeACL); + + /* Find out more about the object type */ + $ldap= $this->config->get_ldap_link(); + $ldap->cat($this->dn); + $attrs= $ldap->fetch(); + $type= $this->get_system_type($attrs['objectClass']); + + /* Lock the current entry, so everyone will get the + above dialog */ + add_lock ($this->dn, $this->ui->dn); + + switch ($type){ + case "terminal": + /* Register systab to trigger edit dialog */ + $this->systab= new termtabs($this->config, + $this->config->data['TABS']['TERMTABS'], $this->dn); + $this->systab->set_acl($acl); + $_SESSION['objectinfo']= $this->dn; + break; + + case "server": + /* Register systab to trigger edit dialog */ + $this->systab= new servtabs($this->config, + $this->config->data['TABS']['SERVTABS'], $this->dn); + $this->systab->set_acl($acl); + $_SESSION['objectinfo']= $this->dn; + break; + + case "workstation": + /* Register systab to trigger edit dialog */ + $this->systab= new worktabs($this->config, + $this->config->data['TABS']['WORKTABS'], $this->dn); + $this->systab->set_acl($acl); + $_SESSION['objectinfo']= $this->dn; + break; + + case "printer": + /* Register systab to trigger edit dialog */ + $this->systab= new printtabs($this->config, + $this->config->data['TABS']['PRINTTABS'], $this->dn); + $this->systab->set_acl($acl); + $_SESSION['objectinfo']= $this->dn; + break; + + case "phone": + /* Register systab to trigger edit dialog */ + $this->systab= new phonetabs($this->config, + $this->config->data['TABS']['PHONETABS'], $this->dn); + $this->systab->set_acl($acl); + $_SESSION['objectinfo']= $this->dn; + break; + + case "component": + /* Register systab to trigger edit dialog */ + $this->systab= new componenttabs($this->config, + $this->config->data['TABS']['COMPONENTTABS'], $this->dn); + $this->systab->set_acl($acl); + $_SESSION['objectinfo']= $this->dn; + break; + + case "winstation": + /* Register systab to trigger edit dialog */ + $this->systab= new wintabs($this->config, + $this->config->data['TABS']['WINTABS'], $this->dn); + $this->systab->set_acl($acl); + $_SESSION['objectinfo']= $this->dn; + break; + + + default: + print_red (_("You can't edit this object type yet!")); + del_lock($this->dn); + break; + } + } + + /* Set terminals root password */ + if (isset($_POST['set_password']) && isset($_POST['termlist'])){ + $this->dn= trim($_POST['termlist']); + $_SESSION['objectinfo']= $this->dn; + return ($smarty->fetch(get_template_path('password.tpl', TRUE))); + } + + /* Correctly specified? */ + if (isset($_POST['password_finish'])){ + if ($_POST['new_password'] != $_POST['repeated_password']){ + print_red (_("Passwords entered as new and repeated do not match!")); + return($smarty->fetch(get_template_path('password.tpl', TRUE))); + } + } + + /* Change terminal password */ + if (isset($_POST['password_finish']) && + $_POST['new_password'] == $_POST['repeated_password']){ + + /* Check if user is allowed to set password */ + $acl= get_permissions ($this->dn, $this->ui->subtreeACL); + $acl= get_module_permission($acl, "terminal", $this->dn); + if (chkacl($acl, "password") != ""){ + print_red (_("You are not allowed to set this systems password!")); + } else { + $ldap= $this->config->get_ldap_link(); + $ldap->cd($this->dn); + + $attrs= array(); + if ($_POST['new_password'] == ""){ + $attrs['gotoRootPasswd']= array(); + } else { + $attrs['gotoRootPasswd']= crypt($_POST['new_password'], + substr(session_id(),0,2)); + } + $ldap->modify($attrs); + gosa_log ("Password for '".$this->dn."' has been changed"); + } + unset($_SESSION['objectinfo']); + } + + /* Delete terminal canceled? */ + if (isset($_POST['delete_cancel']) || isset($_POST['password_cancel'])){ + del_lock ($this->dn); + unset($_SESSION['objectinfo']); + } + + /* Remove terminal was requested */ + if (isset($_POST['delete_terminal']) && isset($_POST['termlist'])){ + + /* Get 'dn' from posted termlinst */ + $this->dn= $_POST['termlist']; + + /* Load permissions for selected 'dn' and check if + we're allowed to remove this 'dn' */ + $acl= get_permissions ($this->dn, $this->ui->subtreeACL); + $this->acl= get_module_permission($acl, "terminal", $this->dn); + if (chkacl($this->acl, "delete") == ""){ + + /* Check locking, save current plugin in 'back_plugin', so + the dialog knows where to return. */ + if (($user= get_lock($this->dn)) != ""){ + return(gen_locked_message ($user, $this->dn)); + } + + /* Lock the current entry, so nobody will edit it during deletion */ + add_lock ($this->dn, $this->ui->dn); + $smarty->assign("warning", sprintf(_("You're about to delete all information about the component at '%s'."), $this->dn)); + return($smarty->fetch(get_template_path('remove.tpl', TRUE))); + } else { + + /* Obviously the user isn't allowed to delete. Show message and + clean session. */ + print_red (_("You are not allowed to delete this component!")); + } + } + + /* Confirmation for deletion has been passed. Terminal should be deleted. */ + if (isset($_POST['delete_terminal_confirm'])){ + + /* Some nice guy may send this as POST, so we've to check + for the permissions again. */ + if (chkacl($this->acl, "delete") == ""){ + + /* Find out more about the object type */ + $ldap= $this->config->get_ldap_link(); + $ldap->cat($this->dn); + $attrs= $ldap->fetch(); + $type= $this->get_system_type($attrs['objectClass']); + + switch ($type){ + case "terminal": + $tabtype= "termtabs"; + break; + + case "workstation": + $tabtype= "worktabs"; + break; + + case "server": + $tabtype= "servtabs"; + break; + + default: +#print_red (_("You can't remove this object type yet!")); +#del_lock($this->dn); +#return; + $tabtype= "termtabs"; + break; + } + + /* Delete request is permitted, perform LDAP action */ + $this->systab= new $tabtype($this->config, + $this->config->data['TABS']['TERMTABS'], $this->dn); + $this->systab->set_acl(array($this->acl)); + $this->systab->by_object['termgeneric']->remove_from_parent (); + unset ($this->systab); + gosa_log ("System object'".$this->dn."' has been removed"); + $this->systab= NULL; + + /* Terminal list has changed, reload it. */ + $this->reload (); + } else { + + /* Normally this shouldn't be reached, send some extra + logs to notify the administrator */ + print_red (_("You are not allowed to delete this component!")); + gosa_log ("Warning: '".$this->ui->uid."' tried to trick system ". + "deletion."); + } + + /* Remove lock file after successfull deletion */ + del_lock ($this->dn); + } + + /* Finish user edit is triggered by the tabulator dialog, so + the user wants to save edited data. Check and save at this + point. */ + if (isset($_POST['edit_finish'])){ + + /* Check tabs, will feed message array */ + $message= $this->systab->check(TRUE); + + /* Save, or display error message? */ + if (count($message) == 0){ + + /* Save terminal data to ldap */ + gosa_log ("System object'".$this->dn."' has been saved"); + $this->systab->save(); + + /* Terminal has been saved successfully, remove lock from + LDAP. */ + if ($this->dn != "new"){ + del_lock ($this->dn); + } + + /* There's no page reload so we have to read new terminals at + this point. */ + $this->reload (); + unset ($this->systab); + $this->systab= NULL; + unset($_SESSION['objectinfo']); + + } else { + /* Ok. There seem to be errors regarding to the tab data, + show message and continue as usual. */ + show_errors($message); + } + + } + + /* Cancel dialogs */ + if (isset($_POST['edit_cancel']) || isset($_POST['password_cancel'])){ + del_lock ($this->systab->dn); + unset ($this->systab); + $this->systab= NULL; + unset($_SESSION['objectinfo']); + } + + /* Show tab dialog if object is present */ + if ($this->systab){ + $display= $this->systab->execute(); + + /* Don't show buttons if tab dialog requests this */ + if (!$this->systab->by_object[$this->systab->current]->dialog){ + $display.= "

\n"; + $display.= "\n"; + $display.= " \n"; + $display.= "\n"; + $display.= "

"; + } + return ($display); + } + + /* Show main page */ + $smarty->assign("terminals", $this->convert_list($this->terminals)); + $smarty->assign("search_image", get_template_path('images/search.png')); + $smarty->assign("tree_image", get_template_path('images/tree.png')); + $smarty->assign("infoimage", get_template_path('images/info.png')); + $smarty->assign("launchimage", get_template_path('images/launch.png')); + foreach( array("depselect", "user", "regex", "workstations", "thins", "servers", + "winstations", "printers", "phones", "netdev") as $type){ + + $smarty->assign("$type", $terminalfilter[$type]); + } + $smarty->assign("deplist", $this->config->idepartments); + + /* Extend if we are not using javascript */ + $smarty->assign("apply", apply_filter()); + $smarty->assign("alphabet", generate_alphabet()); + $smarty->assign("hint", print_sizelimit_warning()); + + return($smarty->fetch(get_template_path('headpage.tpl', TRUE))); + } + + + function convert_list($input) + { + $temp= ""; + $conv= array( "D" => "select_default.png", + "T" => "select_terminal.png", + "L" => "select_workstation.png", + "F" => "select_phone.png", + "S" => "select_server.png", + "NT" => "select_new_terminal.png", + "NL" => "select_new_workstation.png", + "W" => "select_winstation.png", + "C" => "select_component.png", + "P" => "select_printer.png"); + + foreach ($input as $key => $value){ + $mode= preg_replace('/^.*(.)$/', '\\1', $value); + if ($mode == "D"){ + $temp= "\n".$temp; + } else { + if (preg_match('/^\+/', $value)){ + $value= preg_replace('/^\+ /', '', $value); + $new= "N"; + } else { + $new= ""; + } + $temp.= "\n"; + } + } + + return ($temp); + } + + function remove_from_parent() + { + /* Optionally execute a command after we're done */ + $this->postremove(); + } + + + /* Save data to object */ + function save_object() + { + } + + + /* Check values */ + function check() + { + } + + + /* Save to LDAP */ + function save() + { + } + + function adapt_from_template($dn) + { + } + + function password_change_needed() + { + } + + function show_header($button_text, $text, $disabled= FALSE) + { + } + + function reload() + { + /* Load terminal shortcuts */ + $responsible= array(); + foreach ($this->config->departments as $key => $value){ + if (get_module_permission(get_permissions ($value, $this->ui->subtreeACL), + "terminal", $value) == "#all#"){ + $responsible[$key]= $value; + } + } + + /* Get config */ + $terminalfilter= get_global('terminalfilter'); + $filter= ""; + + /* Set base for all searches */ + $base= $terminalfilter['depselect']; + + /* Regex filter? */ + if ($terminalfilter['regex'] != ""){ + $regex= $terminalfilter['regex']; + } else { + $regex= "*"; + } + + /* Get list of terminals to be shown */ + if ($terminalfilter['thins'] == "checked"){ + $termfilter= "(&(objectClass=gotoTerminal)(cn=$regex))"; + } else { + $termfilter= ""; + } + if ($terminalfilter['workstations'] == "checked"){ + $workfilter= "(&(objectClass=gotoWorkstation)(cn=$regex))"; + } else { + $workfilter= ""; + } + if ($terminalfilter['winstations'] == "checked"){ + if ($this->config->current['SAMBAVERSION'] == "3"){ + $samba= "sambaSamAccount"; + } else { + $samba= "sambaAccount"; + } + $winfilter= "(&(objectClass=$samba)(cn=$regex\$))"; + } else { + $winfilter= ""; + } + if ($terminalfilter['printers'] == "checked"){ + $printfilter= "(&(objectClass=gotoPrinter)(cn=$regex))"; + } else { + $printfilter= ""; + } + if ($terminalfilter['phones'] == "checked"){ + $phonefilter= "(&(objectClass=goFonHardware)(cn=$regex))"; + } else { + $phonefilter= ""; + } + if ($terminalfilter['netdev'] == "checked"){ + $netfilter= "(&(objectClass=ieee802Device)(cn=$regex))"; + } else { + $netfilter= ""; + } + if ($terminalfilter['servers'] == "checked"){ + $serverfilter= "(&(objectClass=goServer)(cn=$regex))"; + } else { + $serverfilter= ""; + } + + /* User filter? */ + if ($terminalfilter['user'] != "" && $terminalfilter['user'] != "*"){ + $filter.= "(gotoLastUser=".$terminalfilter['user'].")"; + } + + /* Get all gotoTerminal's */ + $this->terminals= array(); + + $res= get_list($this->ui->subtreeACL, "(|$termfilter$workfilter$winfilter$printfilter$phonefilter$serverfilter$netfilter)", TRUE, $base, array("cn", "description", "macAddress", "objectClass", "sambaDomainName"), TRUE); + foreach ($res as $value){ + + /* Look for new terminals and mark them with '+' */ + $tmp= ""; + if (preg_match('/,ou=terminals,ou=systems,/i', $value["dn"])){ + $tmp= preg_replace("/^[^,]+,[^o]*ou=terminals,ou=systems,/i", "", $value["dn"]); + } + if (preg_match('/,ou=workstations,ou=systems,/i', $value["dn"])){ + $tmp= preg_replace("/^[^,]+,[^o]*ou=workstations,ou=systems,/i", "", $value["dn"]); + } + if (preg_match('/,ou=servers,ou=systems,/i', $value["dn"])){ + $tmp= preg_replace("/^[^,]+,[^o]*ou=servers,ou=systems,/i", "", $value["dn"]); + } + if (preg_match('/,'.get_winstations_ou().'/i', $value["dn"])){ + $tmp= preg_replace("/^[^,]+,[^o]*".get_winstations_ou()."/i", "", $value["dn"]); + } + if (preg_match('/,ou=printers,ou=systems,/i', $value["dn"])){ + $tmp= preg_replace("/^[^,]+,[^o]*ou=printers,ou=systems,/i", "", $value["dn"]); + } + if (preg_match('/,ou=phones,ou=systems,/i', $value["dn"])){ + $tmp= preg_replace("/^[^,]+,[^o]*ou=phones,ou=systems,/i", "", $value["dn"]); + } + if (preg_match('/,ou=netdevices,ou=systems,/i', $value["dn"])){ + $tmp= preg_replace("/^[^,]+,[^o]*ou=netdevices,ou=systems,/i", "", $value["dn"]); + } + if ($tmp == ""){ + $tmp= $value["dn"]; + } + if (preg_match ("/,ou=incoming,/i", $tmp)){ + if (in_array('gotoTerminal', $value['objectClass'])){ + $add= "+ "._("New terminal"); + } + if (in_array('gotoWorkstation', $value['objectClass'])){ + $add= "+ "._("New workstation"); + } + } else { + $add= ""; + } + + if (in_array ($tmp, $responsible) || $add != ""){ + if (in_array('gotoTerminal', $value["objectClass"])){ + if (isset($value["macAddress"][0]) && + $value["macAddress"][0] != "-"){ + + $this->terminals[$value["dn"]]= $add." ". + $value["cn"][0]. + " [".$value["macAddress"][0]."]T"; + } else { + $location= array_search($tmp, $this->config->departments); + $this->terminals[$value["dn"]]= _("Thin client template for"). + " $location"."D"; + } + } elseif (in_array('gotoWorkstation', $value["objectClass"])){ + if (isset($value["macAddress"][0]) && + $value["macAddress"][0] != "-"){ + + $this->terminals[$value["dn"]]= $add." ". + $value["cn"][0]. + " [".$value["macAddress"][0]."]L"; + } else { + $location= array_search($tmp, $this->config->departments); + $this->terminals[$value["dn"]]= _("Workstation template for"). + " $location"."D"; + } + } elseif (in_array('gotoPrinter', $value["objectClass"])){ + if (isset($value['description'][0])){ + $this->terminals[$value['dn']]= $value['cn'][0]." [".$value['description'][0]."]P"; + } else { + $this->terminals[$value['dn']]= $value['cn'][0]."P"; + } + } elseif (in_array('goServer', $value["objectClass"])){ + if (isset($value['description'][0])){ + $this->terminals[$value['dn']]= $value['cn'][0]." [".$value['description'][0]."]S"; + } else { + $this->terminals[$value['dn']]= $value['cn'][0]."S"; + } + } elseif (in_array('goFonHardware', $value["objectClass"])){ + + if (isset($value['description'][0])){ + $this->terminals[$value['dn']]= $value['cn'][0]." [".$value['description'][0]."]F"; + } else { + $this->terminals[$value['dn']]= $value['cn'][0]."F"; + } + } elseif (in_array('ieee802Device', $value["objectClass"])){ + + if (isset($value['description'][0])){ + $this->terminals[$value['dn']]= $value['cn'][0]." [".$value['description'][0]."]C"; + } else { + $this->terminals[$value['dn']]= $value['cn'][0]."C"; + } + } else{ + $name= preg_replace('/\$$/', '', $value['cn'][0]); + if (isset($value['sambaDomainName'])){ + $domain= " [".$value['sambaDomainName'][0]."]"; + } else { + $domain= ""; + } + $this->terminals[$value['dn']]= $name.$domain."W"; + } + } + } + natcasesort ($this->terminals); + reset ($this->terminals); + } + + function remove_lock() + { + if (isset($this->systab->dn)){ + del_lock ($this->systab->dn); + } + } + + + function get_system_type($classes) + { + $type= ""; + + if (in_array('ieee802Device', $classes)){ + $type= "component"; + } + if (in_array('gotoTerminal', $classes)){ + $type= "terminal"; + } + if (in_array('gotoWorkstation', $classes)){ + $type= "workstation"; + } + if (in_array('gotoPrinter', $classes)){ + $type= "printer"; + } + if (in_array('goFonHardware', $classes)){ + $type= "phone"; + } + if (in_array('goServer', $classes)){ + $type= "server"; + } + if (in_array('sambaAccount', $classes) || + in_array('sambaSamAccount', $classes)){ + $type= "winstation"; + } + + return ($type); + } + +} + +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/plugins/admin/systems/class_terminalGeneric.inc b/plugins/admin/systems/class_terminalGeneric.inc new file mode 100644 index 000000000..4beb928d1 --- /dev/null +++ b/plugins/admin/systems/class_terminalGeneric.inc @@ -0,0 +1,302 @@ + "Eins ist toll", "zwei" => "Zwei ist noch besser"); + + /* Generic terminal attributes */ + var $gotoMode= "disabled"; + var $gotoTerminalPath= ""; + var $gotoSwapServer= ""; + var $gotoSyslogServer= ""; + var $gotoNtpServer= ""; + var $gotoSndModule= ""; + var $gotoFloppyEnable= ""; + var $gotoCdromEnable= ""; + var $ghCpuType= "-"; + var $ghMemSize= "-"; + var $macAddress= ""; + var $ipHostNumber= ""; + var $ghUsbSupport= "-"; + var $ghNetNic= array(); + var $ghIdeDev= array(); + var $ghScsiDev= array(); + var $ghGfxAdapter= "-"; + var $ghSoundAdapter= "-"; + var $gotoLastUser= "-"; + + /* Needed values and lists */ + var $base= ""; + var $cn= ""; + var $orig_dn= ""; + + /* Plugin side filled */ + var $modes= array(); + + /* attribute list for save action */ + var $attributes= array("gotoMode", "gotoTerminalPath", "macAddress", + "gotoSwapServer", "gotoSyslogServer", "gotoNtpServer", + "gotoFloppyEnable", "gotoCdromEnable", "cn", "gotoSndModule", + "ghCpuType", "ghMemSize", "ipHostNumber", "ghUsbSupport", + "ghGfxAdapter", "ghSoundAdapter", "gotoLastUser"); + var $objectclasses= array("top", "gotoTerminal", "GOhard"); + + function termgeneric ($config, $dn= NULL) + { + plugin::plugin ($config, $dn); + + /* Read arrays */ + foreach (array("ghNetNic", "ghIdeDev", "ghScsiDev") as $val){ + if (!isset($this->attrs[$val])){ + continue; + } + for ($i= 0; $i<$this->attrs[$val]['count']; $i++){ + array_push($this->$val, $this->attrs[$val][$i]); + } + } + + $this->modes["disabled"]= _("disabled"); + $this->modes["text"]= _("text"); + $this->modes["graphic"]= _("graphic"); + + /* Set base */ + if ($this->dn == "new"){ + $ui= get_userinfo(); + $this->base= dn2base($ui->dn); + } else { + $this->base= preg_replace ("/^[^,]+,[^,]+,[^,]+,/", "", $this->dn); + } + + $this->orig_dn= $this->dn; + } + + function execute() + { + /* Do we need to flip is_account state? */ + if (isset($_POST['modify_state'])){ + $this->is_account= !$this->is_account; + } + + if (isset($_POST['action'])){ + switch($_POST['saction']){ + case 'wake': + $cmd= $this->search($this->config->data['TABS'], "termgeneric", "WAKECMD"); + if ($cmd == ""){ + print_red(_("No WAKECMD definition found in your gosa.conf")); + } else { + exec ($cmd." ".$this->macAddress, $dummy, $retval); + if ($retval != 0){ + print_red(sprintf(_("Execution of '%s' failed!"), $cmd)); + } + } + break; + + case 'reboot': + $cmd= $this->search($this->config->data['TABS'], "termgeneric", "REBOOTCMD"); + if ($cmd == ""){ + print_red(_("No REBOOTCMD definition found in your gosa.conf")); + } else { + exec ($cmd." ".$this->cn, $dummy, $retval); + if ($retval != 0){ + print_red(sprintf(_("Execution of '%s' failed!"), $cmd)); + } + } + break; + + case 'halt': + $cmd= $this->search($this->config->data['TABS'], "termgeneric", "HALTCMD"); + if ($cmd == ""){ + print_red(_("No HALTCMD definition found in your gosa.conf")); + } else { + exec ($cmd." ".$this->cn, $dummy, $retval); + if ($retval != 0){ + print_red(sprintf(_("Execution of '%s' failed!"), $cmd)); + } + } + break; + } + } + + /* Do we represent a valid terminal? */ + if (!$this->is_account && $this->parent == NULL){ + $display= " ". + _("This 'dn' has no terminal features.").""; + return($display); + } + + /* Fill templating stuff */ + $smarty= get_smarty(); + $smarty->assign("cn", $this->cn); + + $smarty->assign("bases", $this->config->idepartments); + + /* Check if terminal is online */ + $query= "fping -q -r 1 -t 500 ".$this->cn; + exec ($query, $dummy, $retval); + + /* Offline */ + if ($retval == 0){ + $smarty->assign("actions", array("halt" => _("Switch off"), "reboot" => _("Reboot"))); + } else { + $smarty->assign("actions", array("wake" => _("Wake up"))); + } + /* Arrays */ + $smarty->assign("modes", $this->modes); + $smarty->assign("nfsservers", $this->config->data['SERVERS']['NFS']); + $smarty->assign("syslogservers", $this->config->data['SERVERS']['SYSLOG']); + $smarty->assign("ntpservers", $this->config->data['SERVERS']['NTP']); + + /* Variables */ + foreach(array("base", "gotoMode", "gotoTerminalPath", "gotoSwapServer", + "gotoSyslogServer", "gotoNtpServer") as $val){ + + $smarty->assign($val."_select", $this->$val); + $smarty->assign($val."ACL", chkacl($this->acl, $val)); + } + $smarty->assign("ipHostNumber", $this->ipHostNumber); + $smarty->assign("macAddress", $this->macAddress); + + /* Show main page */ + $smarty->assign("netconfig", dirname(__FILE__)."/network.tpl"); + return($smarty->fetch (get_template_path('terminal.tpl', TRUE))); + } + + function remove_from_parent() + { + $ldap= $this->config->get_ldap_link(); + $ldap->rmdir($this->dn); + show_ldap_error($ldap->get_error()); + + /* Optionally execute a command after we're done */ + $this->handle_post_events("remove"); + + /* Delete references to object groups */ + $ldap->cd ($this->config->current['BASE']); + $ldap->search ("(&(objectClass=gosaGroupOfNames)(member=".$this->dn."))", array("cn")); + while ($ldap->fetch()){ + $og= new ogroup($this->config, $ldap->getDN()); + unset($og->member[$this->dn]); + $og->save (); + } + + } + + + /* Save data to object */ + function save_object() + { + plugin::save_object(); + + /* Save base, since this is no LDAP attribute */ + if (isset($_POST['base']) && chkacl($this->acl, "create") == ""){ + $this->base= $_POST['base']; + } + + /* Save terminal path to parent since it is used by termstartup, too */ + $this->parent->by_object['termstartup']->gotoTerminalPath= + $this->gotoTerminalPath; + } + + + /* Check supplied data */ + function check() + { + $message= array(); + + /* Permissions for that base? */ + $this->dn= "cn=".$this->cn."ou=terminals,ou=systems,".$this->base; + + $ui= get_userinfo(); + $acl= get_permissions ($this->dn, $ui->subtreeACL); + $acl= get_module_permission($acl, "group", $this->dn); + if (chkacl($acl, "create") != ""){ + $message[]= _("You have no permissions to create a terminal on this 'Base'."); + } + + if ($this->cn == "" && chkacl ($this->acl, "cn") == ""){ + $message[]= _("The required field 'Terminal name' is not set."); + } + + if ($this->orig_dn == 'new'){ + $ldap= $this->config->get_ldap_link(); + $ldap->cd ($this->base); + $ldap->search ("(&(objectClass=gotoTerminal)(cn=".$this->cn."))", array("cn")); + if ($ldap->count() != 0){ + while ($attrs= $ldap->fetch()){ + if (preg_match ("/,ou=incoming,/", $ldap->getDN())){ + continue; + } else { + if ($attrs['dn'] != $this->orig_dn){ + $message[]= sprintf (_("There is already an entry '%s' in the base choosen by you"), $this->cn); + break; + } + } + } + } + } + + return ($message); + } + + + /* Save to LDAP */ + function save() + { + plugin::save(); + + /* Strip out 'default' values */ + foreach (array("gotoTerminalPath", "gotoSwapServer", "gotoSyslogServer") as $val){ + + if ($this->attrs[$val] == "default"){ + $this->attrs[$val]= array(); + } + } + + /* Add missing arrays */ + foreach (array("ghScsiDev", "ghIdeDev", "ghNetNic") as $val){ + if (isset ($this->$val) && count ($this->$val) != 0){ + $this->attrs["$val"]= $this->$val; + } + } + + /* Remove all empty values */ + if ($this->orig_dn == 'new'){ + $attrs= array(); + foreach ($this->attrs as $key => $val){ + if (is_array($val) && count($val) == 0){ + continue; + } + $attrs[$key]= $val; + } + $this->attrs= $attrs; + } + + /* Write back to ldap */ + $ldap= $this->config->get_ldap_link(); + if ($this->orig_dn == 'new'){ + $ldap->cd($this->config->current['BASE']); + $ldap->create_missing_trees(preg_replace('/^[^,]+,/', '', $this->dn)); + $ldap->cd($this->dn); + $ldap->add($this->attrs); + $this->handle_post_events("add"); + } else { + if ($this->orig_dn != $this->dn){ + $this->move($this->orig_dn, $this->dn); + } + $ldap->cd($this->dn); + $ldap->modify($this->attrs); + $this->handle_post_events("modify"); + } + show_ldap_error($ldap->get_error()); + + /* Optionally execute a command after we're done */ + $this->postcreate(); + } + +} + +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/plugins/admin/systems/class_terminalInfo.inc b/plugins/admin/systems/class_terminalInfo.inc new file mode 100644 index 000000000..cb96d63ab --- /dev/null +++ b/plugins/admin/systems/class_terminalInfo.inc @@ -0,0 +1,216 @@ + "Eins ist toll", "zwei" => "Zwei ist noch besser"); + + /* Generic terminal attributes */ + var $ghCpuType= "-"; + var $ghMemSize= "-"; + var $macAddress= "-"; + var $ghUsbSupport= "-"; + var $ghNetNic= array(); + var $ghIdeDev= array(); + var $ghScsiDev= array(); + var $ghGfxAdapter= "-"; + var $ghSoundAdapter= "-"; + var $ghInventoryNumber= "-"; + var $gotoLastUser= "-"; + var $gotoFloppyEnable= ""; + var $gotoCdromEnable= ""; + + /* Needed values and lists */ + var $base= ""; + var $cn= ""; + + /* attribute list for save action */ + var $attributes= array("cn", "gotoMode", "gotoTerminalPath", "gotoFloppyEnable", + "gotoCdromEnable", "ghInventoryNumber", + "gotoSwapServer", "gotoSyslogServer", "gotoNtpServer", + "ghCpuType", "ghMemSize", "macAddress", "ghUsbSupport", + "ghGfxAdapter", "ghSoundAdapter", "gotoLastUser"); + var $objectclasses= array("GOhard"); + + function terminfo ($config, $dn= NULL) + { + plugin::plugin ($config, $dn); + + /* Read arrays */ + foreach (array("ghNetNic", "ghIdeDev", "ghScsiDev") as $val){ + if (!isset($this->attrs[$val])){ + continue; + } + for ($i= 0; $i<$this->attrs[$val]['count']; $i++){ + array_push($this->$val, $this->attrs[$val][$i]); + } + } + + /* Fix USB entry */ + if ($this->ghUsbSupport == "true"){ + $this->ghUsbSupport= _("present"); + } + } + + function execute() + { + /* Do we represent a valid terminal? */ + if (!$this->is_account && $this->parent == NULL){ + echo " ". + _("This 'dn' has no terminal features.").""; + return; + } + + /* Default entry? */ + if ($this->cn == "default"){ + $display= "

"; + $display.= _("This is a virtual terminal which has no properties to show here."); + $display.= "
"; + } else { + /* Get template object */ + $smarty= get_smarty(); + $display= ""; + + /* Check if terminal is online */ + $query= "fping -q -r 1 -t 500 ".$this->cn; + exec ($query, $dummy, $retval); + + if ($retval == 0){ + $smarty->assign("status", _("online")); + $smarty->assign("active", "true"); + + /* Fill data if we have snmp */ + $host= $this->cn; + $community= 'goto'; + + /* Get memory informations */ + $MemFree= @snmpget($host, $community, "UCD-SNMP-MIB::memory.memAvailReal.0"); + if ($MemFree != FALSE){ + $MemFree= preg_replace('/^.*[=:] ([0-9.]+)$/', '\\1', $MemFree); + $MemTotal= @snmpget($host, $community, "UCD-SNMP-MIB::memory.memTotalReal.0"); + $MemTotal= preg_replace('/^.*[=:] ([0-9.]+)$/', '\\1', $MemTotal); + if ($MemTotal != 0){ + $smarty->assign("mem", (int)(($MemTotal - $MemFree)*100/$MemTotal)); + } + $SwapFree= @snmpget($host, $community, "UCD-SNMP-MIB::memory.memAvailSwap.0"); + $SwapFree= preg_replace('/^.*[=:] ([0-9.]+)$/', '\\1', $SwapFree); + $SwapTotal= @snmpget($host, $community, "UCD-SNMP-MIB::memory.memTotalSwap.0"); + $SwapTotal= preg_replace('/^.*[=:] ([0-9.]+)$/', '\\1', $SwapTotal); + if ($SwapTotal != 0){ +#$smarty->assign("swap", (int)(($SwapTotal - $SwapFree)*100/$SwapTotal)); + $smarty->assign("swap", 0); + } + + /* Get system uptime */ + $sysup= @snmpget($host, $community, "SNMPv2-MIB::sysUpTime.0"); + $smarty->assign("uptime", preg_replace('/^.* ([0-9:]+)\..*$/', '\\1', $sysup)); + + /* Get system load */ + $sysload= @snmpget($host, $community, "UCD-SNMP-MIB::laLoad.2"); + $sysload= preg_replace('/^.*[=:] ([0-9.]+)$/', '\\1', $sysload); + $smarty->assign("load", $sysload*100); + + /* Get status for key processes */ + $processes= @snmpwalk($host, $community, "UCD-SNMP-MIB::prNames"); + $check4= array("sshd", "cupsd", "artsd", "X", "saned"); + foreach ($check4 as $pname){ + $eflag= -1; + foreach ($processes as $key => $val){ + $process= preg_replace('/^.*[:=] (.*)$/', '\\1', $val); + if ($process == $pname){ + $index= preg_replace('/^.*\.([0-9]+) [:=] .*$/', '\\1', $val); + $res= @snmpget($host, $community, "UCD-SNMP-MIB::prErrorFlag.$index"); + $eflag= preg_replace('/^.*[:=] /', '', $res); + break; + } + } + switch ($eflag){ + case 0: + $smarty->assign("$pname", "\""._("running")."\""); + break; + case 1: + $smarty->assign("$pname", "\""._("not"); + break; + default: + $smarty->assign("$pname", _("not defined")); + } + } + } else { + foreach(array("uptime", "sshd", "X", "saned", "artsd", "cupsd") as $val){ + $smarty->assign("$val", ""._("unknown status").""); + } + } + + /* Check for mounted partitions (show max 8 partitions) */ + $partitions= ""; + for ($n= 1; $n<9; $n++){ + $device= @snmpget($host, $community, "UCD-SNMP-MIB::dskDevice.$n"); + if ($device == ""){ + break; + } + $device= preg_replace('/^STRING: */', '', $device); + $usage= @snmpget($host, $community, "UCD-SNMP-MIB::dskPercent.$n"); + $usage= preg_replace('/^INTEGER: */', '', $usage); + $partitions.= "$device\n"; + } + $smarty->assign("partitions", $partitions); + } else { + $smarty->assign("status", _("offline")); + $smarty->assign("active", "false"); + } + + /* Set floppy and cdrom status */ + foreach(array("Floppy", "Cdrom") as $val){ + $name= "goto".$val."Enable"; + if ($this->$name == "YES"){ + $status= _("present"); + } else { + $status= "-"; + } + $smarty->assign($val."Device", $status); + } + + /* Show main page */ + foreach(array("ghNetNic", "ghIdeDev", "ghScsiDev") as $val){ + if (!count($this->$val)){ + $this->$val= "-"; + } + $smarty->assign($val, $this->$val); + } + foreach(array("ghCpuType", "ghMemSize", "macAddress", "ghUsbSupport", + "ghGfxAdapter", "ghSoundAdapter", "gotoLastUser", "ghInventoryNumber") as $val){ + + $smarty->assign($val, $this->$val); + } + $display= $smarty->fetch (get_template_path('info.tpl', TRUE)); + } + + return ($display); + } + + function remove_from_parent() + { + $ldap= $this->config->get_ldap_link(); + $ldap->rmdir($this->dn); + show_ldap_error($ldap->get_error()); + } + + + /* Save data to object */ + function save_object() + { + plugin::save_object(); + } + + + + /* Save to LDAP */ + function save() + { + } + +} + +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/plugins/admin/systems/class_terminalService.inc b/plugins/admin/systems/class_terminalService.inc new file mode 100644 index 000000000..df357d666 --- /dev/null +++ b/plugins/admin/systems/class_terminalService.inc @@ -0,0 +1,301 @@ + "Eins ist toll", "zwei" => "Zwei ist noch besser"); + + /* Generic terminal attributes */ + var $gotoLpdEnable= FALSE; + var $gotoXMonitor= ""; + var $gotoXMethod= ""; + var $gotoXdmcpServer= ""; + var $gotoFontPath= ""; + var $gotoXDriver= ""; + var $gotoXResolution= ""; + var $gotoXColordepth= ""; + var $gotoXHsync= ""; + var $gotoXVsync= ""; + var $gotoXKbModel= ""; + var $gotoXKbLayout= ""; + var $gotoXKbVariant= ""; + var $gotoXMouseType= ""; + var $gotoXMouseport= ""; + var $gotoLpdServer= ""; + var $gotoScannerEnable= ""; + var $gotoScannerModel= ""; + var $gotoScannerClients= ""; + var $gotoScannerBackend= ""; + var $goFonHardware= "automatic"; + + /* Needed values and lists */ + var $base= ""; + var $cn= ""; + var $orig_dn= ""; + var $XMethods= array(); + var $XDrivers= array("unknown", "ati", "atimisc", "chips", "cirrus", "cyrix", "fbdev", + "i128", "i740", "i810", "imstt", "mga", "neomagic", "newport", "nsc", "nv", + "r128", "radeon", "rendition", "s3", "s3virge", "savage", "siliconmotion", + "sis", "tdfx", "tga", "trident", "tseng", "vesa", "vga"); + var $XResolutions= array("default", "640x480", "800x600", "1024x768", "1152x864", "1280x1024", + "1400x1050", "1600x1200"); + var $XColordepths= array("default", "8", "15", "16", "24"); + var $XKbModels= array ("default", "btc9000", "chicony", "compaq", "dell", "dell101", "everex", + "flexpro", "geniuscomfy", "hp", "itouch", "jp106", "logicordless", + "logiinetnav", "logiinternet", "macintosh", "microsoft", + "microsoftpro", "omnikey101", "pc101", "pc102", "pc104", + "pc105", "rapidaccess", "rapidaccess2", "winbook"); + var $XKbLayouts= array ("default", "de", "intl", "us"); + var $XKbVariants= array ("default", "nodeadkeys", "basic"); + var $MouseTypes= array("AUTO", "ImPS/2", "PS/2", "Microsoft", "Logitech"); + var $MousePorts= array("AUTO", "/dev/ttyS0", "/dev/ttyS1", "/dev/psaux", "/dev/input/mice"); + var $gotoScannerModels= array(); + var $hardware_list= array(); + var $used_hardware= array(); + + + /* attribute list for save action */ + var $attributes= array("cn", "gotoLpdEnable", "gotoXMonitor", "gotoXMethod", "gotoXdmcpServer", + "gotoFontPath", "gotoXDriver", "gotoXResolution", "gotoXColordepth", + "gotoXHsync", "gotoXVsync", "gotoLpdEnable", "gotoLpdServer", + "gotoScannerEnable", "gotoScannerModel", "gotoScannerClients", + "gotoScannerBackend", "gotoXKbModel", "gotoXKbLayout", "gotoXKbVariant", + "gotoXMouseType", "gotoXMouseport", "goFonHardware"); + var $objectclasses= array("GOhard"); + + + function termservice ($config, $dn= NULL) + { + plugin::plugin ($config, $dn); + + /* Load scanner models */ + $fcontents = file ($this->config->basedir."/include/scanner.inc"); + while (list ($line_num, $line) = each ($fcontents)) { + preg_match('/^(\w+) "([^"]+)" "([^"]+)" "([^"]+)"/', "$line", $matches); + $this->gotoScannerModels[$matches[2]." - ".$matches[3]]= $matches[1]."|".$matches[4]; + } + ksort ($this->gotoScannerModels); + + /* Initialize methods */ + $this->XMethods["default"]= _("default"); + $this->XMethods["indirect"]= _("show chooser"); + $this->XMethods["query"]= _("direct"); +#$this->XMethods["squery"]= _("direct via ssh"); +#$this->XMethods["nquery"]= _("direct via nx"); + $this->XMethods["load"]= _("load balanced"); +#$this->XMethods["sload"]= _("load balanced via ssh"); +#$this->XMethods["nload"]= _("load balanced via nx"); + $this->XMethods["rdp"]= _("Windows RDP"); + $this->XMethods["citrix"]= _("ICA client"); + + $this->orig_dn= $this->dn; + + /* Load hardware list */ + $ldap= $this->config->get_ldap_link(); + $ldap->cd($this->config->current['BASE']); + $ldap->search("(objectClass=goFonHardware)", array('cn', 'description')); + while ($attrs= $ldap->fetch()){ + $cn= $attrs['cn'][0]; + if (isset($attrs['description'])){ + $description= " - ".$attrs['description'][0]; + } else { + $description= ""; + } + $this->hardware_list[$cn]= "$cn$description"; + } + + /* Eventually colorize phones */ + $ldap->cd($this->config->current['BASE']); + foreach ($this->hardware_list as $cn => $desc){ + $ldap->search("(goFonHardware=$cn)", array('cn')); + if ($ldap->count() > 0){ + $ldap->fetch(); + if ($ldap->getDN() != $this->dn){ + $this->used_hardware[$cn]= $ldap->getDN(); + } + } + } + + $this->hardware_list["automatic"]= _("automatic"); + ksort($this->hardware_list); + } + + function execute() + { + /* Do we need to flip is_account state? */ + if (isset($_POST['modify_state'])){ + $this->is_account= !$this->is_account; + } + + /* Do we represent a valid terminal? */ + if (!$this->is_account && $this->parent == NULL){ + $display= " ". + _("This 'dn' has no terminal features.").""; + return ($display); + } + + /* Show main page */ + $smarty= get_smarty(); + + /* Arrays */ + foreach(array("XMethods", "XDrivers", "XResolutions", "XColordepths", + "gotoScannerModels", "XKbModels", "XKbLayouts", "XKbVariants", + "MouseTypes", "MousePorts") as $val){ + $smarty->assign("$val", $this->$val); + } + $smarty->assign("xdmcpservers", $this->config->data['SERVERS']['TERMINAL']); + $smarty->assign("fontservers", $this->config->data['SERVERS']['FONT']); + $smarty->assign("nfsservers", $this->config->data['SERVERS']['NFS']); + $smarty->assign("nfsservers", $this->config->data['SERVERS']['NFS']); + + /* Variables - select */ + foreach(array("gotoXMethod", "gotoXdmcpServer", "gotoFontPath", + "gotoXDriver", "gotoXResolution", "gotoXColordepth", + "gotoLpdServer", "gotoScannerModel", "gotoXKbModel", "gotoXKbLayout", + "gotoXKbVariant", "gotoXMouseType", "gotoXMouseport") as $val){ + + $smarty->assign($val."_select", $this->$val); + $smarty->assign($val."ACL", chkacl($this->acl, $val)); + } + + /* Variables */ + foreach(array("gotoXHsync", "gotoXVsync") as $val){ + $smarty->assign($val, $this->$val); + $smarty->assign($val."ACL", chkacl($this->acl, $val)); + } + + /* Checkboxes */ + foreach(array("gotoLpdEnable", "gotoScannerEnable") as $val){ + if ($this->$val == TRUE) { + $smarty->assign("$val", "checked"); + } else { + $smarty->assign("$val", ""); + } + $smarty->assign($val."ACL", chkacl($this->acl, "gotoLpdEnable")); + } + + /* Phone stuff */ + $smarty->assign ("goFonHardware", $this->goFonHardware); + $hl= "\n"; + $smarty->assign ("hardware_list", $hl); + + /* Show main page */ + return($smarty->fetch (get_template_path('service.tpl', TRUE))); + } + + function remove_from_parent() + { + $ldap= $this->config->get_ldap_link(); + $ldap->rmdir($this->dn); + show_ldap_error($ldap->get_error()); + $this->handle_post_events("remove"); + } + + + /* Save data to object */ + function save_object() + { + plugin::save_object(); + + /* Save checkbox state */ + if (isset ($_POST['gotoXMethod'])){ + foreach (array("gotoLpdEnable", "gotoScannerEnable") as $val){ + + if (!isset ($_POST["$val"]) && chkacl ($this->acl, "$val") == ""){ + $this->$val= FALSE; + } else { + $this->$val= TRUE; + } + } + } + } + + + /* Check supplied data */ + function check() + { + $message= array(); + + /* Default entries can use blank hsync/vsync entries */ + if ($this->dn != "" && $this->cn != "default" && $this->cn != "wdefault"){ + + /* Check vsync for correct usage */ + $val= preg_replace ("/\s/", "", $this->gotoXVsync); + if (!preg_match ("/^\d+(\.\d+)?(\-\d+(\.\d+)?)?$/", $val) + && chkacl ($this->acl, "gotoXVsync") == ""){ + + $message[]= _("Please specify a valid VSync range."); + } elseif (chkacl ($this->acl, "gotoXVsync") == ""){ + list($v1,$v2)= split ("-", $val); + if ($v2 != ""){ + if ($v1 > $v2){ + $message[]= _("Please specify a valid VSync range."); + } + } + } + + /* Check hsync for correct usage */ + $val= preg_replace ("/\s/", "", $this->gotoXHsync); + if (!preg_match ("/^\d+(\.\d+)?(\-\d+(\.\d+)?)?$/", $val) + && chkacl ($this->acl, "gotoXHsync") == ""){ + + $message[]= _("Please specify a valid HSync range."); + } elseif (chkacl ($this->acl, "gotoXHsync") == ""){ + list($v1,$v2)= split ("-", $val); + if ($v2 != ""){ + if ($v1 > $v2){ + $message[]= _("Please specify a valid HSync range."); + } + } + } + } + return ($message); + } + + + /* Save to LDAP */ + function save() + { + plugin::save(); + + /* Strip out 'default' values */ + foreach(array("gotoXMethod", "gotoXdmcpServer", "gotoFontPath", + "gotoXDriver", "gotoXResolution", "gotoXColordepth", + "gotoLpdServer", "gotoScannerModel", "gotoXKbModel", "gotoXKbLayout", + "gotoXKbVariant", "gotoXMouseType", "gotoXMouseport") as $val){ + + if ($this->attrs[$val] == "default"){ + $this->attrs[$val]= array(); + } + } + + /* Write back to ldap */ + $ldap= $this->config->get_ldap_link(); + $ldap->cd($this->dn); + $ldap->modify($this->attrs); + show_ldap_error($ldap->get_error()); + $this->handle_post_events("modify"); + } + +} + +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/plugins/admin/systems/class_terminalStartup.inc b/plugins/admin/systems/class_terminalStartup.inc new file mode 100644 index 000000000..c014b3c8f --- /dev/null +++ b/plugins/admin/systems/class_terminalStartup.inc @@ -0,0 +1,287 @@ + "Eins ist toll", "zwei" => "Zwei ist noch besser"); + + /* Generic terminal attributes */ + var $bootmode= "G"; + var $goLdapServerList= array("default"); + var $gotoBootKernel= "default"; + var $gotoKernelParameters= ""; + var $gotoLdapServer= ""; + var $gotoModules= array(); + var $gotoAutoFs= array(); + var $gotoFilesystem= array(); + var $gotoTerminalPath= ""; + + /* attribute list for save action */ + var $attributes= array("gotoLdapServer", "gotoBootKernel", "gotoKernelParameters"); + var $objectclasses= array("GOhard"); + + /* Helper */ + var $customParameters= ""; + var $orig_dn= ""; + + + function termstartup ($config, $dn= NULL) + { + plugin::plugin ($config, $dn); + + /* Get arrays */ + foreach (array("gotoModules", "gotoAutoFs", "gotoFilesystem") as $val){ + if (isset($this->attrs["$val"]["count"])){ + for ($i= 0; $i<$this->attrs["count"]; $i++){ + if (isset($this->attrs["$val"][$i])){ + array_push($this->$val, $this->attrs["$val"][$i]); + } + } + } + sort ($this->$val); + $this->$val= array_unique($this->$val); + } + + /* Parse Kernel Parameters to decide what boot mode is enabled */ + if (preg_match("/ splash=silent/", $this->gotoKernelParameters)){ + $this->bootmode= "G"; + } elseif (preg_match("/ debug/", $this->gotoKernelParameters)){ + $this->bootmode= "D"; + } elseif ($this->gotoKernelParameters == "") { + $this->bootmode= "G"; + } else { + $this->bootmode= "T"; + } + if (preg_match("/ o /", $this->gotoKernelParameters)){ + $this->customParameters= preg_replace ("/^.* o /", "", $this->gotoKernelParameters); + } else { + $this->customParameters= ""; + } + + $this->orig_dn= $this->dn; + } + + function execute() + { + /* Do we need to flip is_account state? */ + if (isset($_POST['modify_state'])){ + $this->is_account= !$this->is_account; + } + + /* Do we represent a valid terminal? */ + if (!$this->is_account && $this->parent == NULL){ + $display= " ". + _("This 'dn' has no terminal features.").""; + return ($display); + } + + /* Add module */ + if (isset ($_POST['add_module'])){ + if ($_POST['module'] != "" && chkacl ($this->acl, "gotoModule") == ""){ + $this->add_list ($this->gotoModules, $_POST['module']); + } + } + + /* Delete module */ + if (isset ($_POST['delete_module'])){ + if (count($_POST['modules_list']) && chkacl ($this->acl, "gotoModule") == ""){ + $this->del_list ($this->gotoModules, $_POST['modules_list']); + } + } + + /* Add autofs */ + if (isset ($_POST['add_autofs'])){ + if ($_POST['autofs'] != "" && chkacl ($this->acl, "gotoAutoFs") == ""){ + $this->add_list ($this->gotoAutoFs, $_POST['autofs']); + } + } + + /* Delete autofs */ + if (isset ($_POST['delete_autofs'])){ + if (count($_POST['autofs_list']) && chkacl ($this->acl, "gotoAutoFs") == ""){ + $this->del_list ($this->gotoAutoFs, $_POST['autofs_list']); + } + } + + /* Add filesystem */ + if (isset ($_POST['add_fs'])){ + if ($_POST['fstab'] != "" && chkacl ($this->acl, "gotoFilesystem") == ""){ + $this->add_list ($this->gotoFilesystem, $_POST['fstab']); + } + } + + /* Delete filesystem */ + if (isset ($_POST['delete_fs'])){ + if (count($_POST['fstab_list']) && chkacl ($this->acl, "gotoFilesystem") == ""){ + $this->del_list ($this->gotoFilesystem, $_POST['fstab_list']); + } + } + + /* Show main page */ + $smarty= get_smarty(); + + /* Arrays */ + $smarty->assign("ldapservers", $this->config->data['SERVERS']['LDAP']); + $smarty->assign("gotoLdapServer_select", $this->gotoLdapServer); + $smarty->assign("gotoLdapServerACL", chkacl($this->acl, "gotoLdapServer")); + foreach (array("gotoModules", "gotoAutoFs", "gotoFilesystem") as $val){ + $smarty->assign("$val", $this->$val); + } + + /* Values */ + foreach(array("gotoBootKernel", "customParameters") as $val){ + $smarty->assign($val, $this->$val); + $smarty->assign($val."ACL", chkacl($this->acl, $val)); + } + + /* Radio button group */ + if (preg_match("/G/", $this->bootmode)) { + $smarty->assign("graphicalbootup", "checked"); + } else { + $smarty->assign("graphicalbootup", ""); + } + if (preg_match("/T/", $this->bootmode)) { + $smarty->assign("textbootup", "checked"); + } else { + $smarty->assign("textbootup", ""); + } + if (preg_match("/D/", $this->bootmode)) { + $smarty->assign("debugbootup", "checked"); + } else { + $smarty->assign("debugbootup", ""); + } + $smarty->assign("gotoKernelParameters", chkacl($this->acl, "gotoKernelParameters")); + + /* Show main page */ + return($smarty->fetch (get_template_path('startup.tpl', TRUE))); + } + + function remove_from_parent() + { + $ldap= $this->config->get_ldap_link(); + $ldap->rmdir($this->dn); + show_ldap_error($ldap->get_error()); + $this->handle_post_events("remove"); + } + + + /* Save data to object */ + function save_object() + { + plugin::save_object(); + + /* Save group radio buttons */ + if (chkacl ($this->acl, "bootmode") == "" && isset($_POST["bootmode"])){ + $this->bootmode= $_POST["bootmode"]; + } + + /* Save kernel parameters */ + if (chkacl ($this->acl, "gotoKernelParameters") == "" && isset($_POST["customParameters"])){ + $this->customParameters= $_POST["customParameters"]; + } + } + + + /* Save to LDAP */ + function save() + { + /* Find proper terminal path for tftp configuration + FIXME: This is suboptimal when the default has changed to + another location! */ + if ($this->gotoTerminalPath == "default"){ + $ldap= $this->config->get_ldap_link(); + + /* Strip relevant part from dn, keep trailing ',' */ + $tmp= preg_replace("/^cn=[^,]+,ou=terminals,ou=systems,/i", "", $this->dn); + $tmp= preg_replace("/".$this->config->current['BASE']."$/i", "", $tmp); + + /* Walk from top to base and try to load default values for + 'gotoTerminalPath'. Abort when an entry is found. */ + while (TRUE){ + $tmp= preg_replace ("/^[^,]+,/", "", $tmp); + + $ldap->cat("cn=default,ou=terminals,ou=systems,$tmp". + $this->config->current['BASE']); + $attrs= $ldap->fetch(); + if (isset($attrs['gotoTerminalPath'])){ + $this->gotoTerminalPath= $attrs['gotoTerminalPath'][0]; + break; + } + + /* Nothing left? */ + if ($tmp == ""){ + break; + } + } + } + + /* Add semi automatic values */ + // FIXME: LDAP Server may not be set here... + $this->gotoKernelParameters= "root=/dev/nfs nfsroot=". + $this->gotoTerminalPath. + ",ro,hard,nolock,fg,rsize=8192 ". + "ip=::::::dhcp LDAP=".$this->gotoLdapServer; + + switch ($this->bootmode){ + case "D": + $this->gotoKernelParameters.= " debug"; + break; + case "G": + $this->gotoKernelParameters.= " splash=silent"; + break; + } + if ($this->customParameters != ""){ + $this->gotoKernelParameters.= " o ".$this->customParameters; + } + + plugin::save(); + + /* Add missing arrays */ + foreach (array("gotoFilesystem", "gotoAutoFs", "gotoModules") as $val){ + if (isset ($this->$val) && count ($this->$val) != 0){ + $this->attrs["$val"]= array_unique($this->$val); + } + } + + /* Strip out 'default' values */ + if ($this->attrs['gotoLdapServer'] == "default"){ + unset ($this->attrs['gotoLdapServer']); + } + + /* Write back to ldap */ + $ldap= $this->config->get_ldap_link(); + $ldap->cd($this->dn); + $ldap->modify($this->attrs); + show_ldap_error($ldap->get_error()); + $this->handle_post_events("modify"); + } + + /* Add value to array, check if unique */ + function add_list (&$array, $value) + { + if ($value != ""){ + $array[]= $value; + sort($array); + array_unique ($array); + } + } + + + /* Delete value to array, check if unique */ + function del_list (&$array, $list) + { + $tmp= array(); + foreach ($array as $mod){ + if (!in_array($mod, $list)){ + $tmp[]= $mod; + } + } + $array= $tmp; + } + + +} + +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/plugins/admin/systems/class_winGeneric.inc b/plugins/admin/systems/class_winGeneric.inc new file mode 100644 index 000000000..a58eacb70 --- /dev/null +++ b/plugins/admin/systems/class_winGeneric.inc @@ -0,0 +1,220 @@ + "Eins ist toll", "zwei" => "Zwei ist noch besser"); + + /* Generic terminal attributes */ + var $interfaces= array(); + + /* Needed values and lists */ + var $base= ""; + var $cn= ""; + var $macAddress= ""; + var $ipHostNumber= ""; + var $description= ""; + var $orig_dn= ""; + var $shadowLastChange=""; + var $uidNumber=""; + var $gidNumber=""; + var $loginShell=""; + var $gecos=""; + var $shadowMin=""; + var $shadowWarning=""; + var $shadowInactive=""; + var $uid=""; + var $sn=""; + var $givenName=""; + var $homeDirectory=""; + var $sambaSID=""; + var $sambaPrimaryGroupSID=""; + var $displayName=""; + var $sambaPwdCanChange2=""; + var $sambaPwdMustChange=""; + var $sambaNTPassword=""; + var $sambaPwdLastSet=""; + var $sambaAcctFlags=""; + + + + + + + + + /* attribute list for save action */ + var $attributes = array("cn", "description", "macAddress", "ipHostNumber","shadowLastChange", + "uidNumber","gidNumber","loginShell","gecos","shadowMin","shadowWarning", + "shadowInactive","uid","cn","sn","givenName","homeDirectory","sambaSID", + "sambaPrimaryGroupSID","displayName", "sambaPwdCanChange2","sambaPwdMustChange", + "sambaNTPassword","sambaPwdLastSet","sambaAcctFlags"); + var $objectclasses= array("posixAccount","person","organizationalPerson","inetOrgPerson","gosaAccount","shadowAccount","sambaSamAccount","top", "device", "ipHost", "ieee802Device"); + + +// These are insertet !!! +//"posixAccount","person","organizationalPerson","inetOrgPerson","gosaAccount","shadowAccount","sambaSamAccount" + +//$attrs2("shadowLastChange","uidNumber","gidNumber","loginShell","gecos","shadowMin","shadowWarning","shadowInactive","uid","cn","sn","givenName","homeDirectory","sambaSID","sambaPrimaryGroupSID","displayName","sambaPwdCanChange2","sambaPwdMustChange","sambaNTPassword","sambaPwdLastSet","sambaAcctFlags"); + + + function wingeneric ($config, $dn= NULL) + { + plugin::plugin ($config, $dn); + + /* Set base */ + if ($this->dn == "new"){ + $ui= get_userinfo(); + $this->base= dn2base($ui->dn); + $this->cn= ""; + } else { + $this->base= preg_replace ("/^[^,]+,[^,]+,[^,]+,/", "", $this->dn); + } + + /* Save dn for later references */ + $this->orig_dn= $this->dn; + } + + function execute() + { + /* Do we represent a valid phone? */ + if (!$this->is_account && $this->parent == NULL){ + $display= " ". + _("This 'dn' has no network features.").""; + return($display); + } + + /* Fill templating stuff */ + $smarty= get_smarty(); + $smarty->assign("bases", $this->config->idepartments); + + /* Assign attributes */ + foreach ($this->attributes as $attr){ + $smarty->assign($attr."ACL", chkacl($this->acl, $attr)); + $smarty->assign("$attr", $this->$attr); + } + + + $smarty->assign("base_select", $this->base); + + /* Show main page */ + $smarty->assign("netconfig", dirname(__FILE__)."/network.tpl"); + return($smarty->fetch (get_template_path('wingeneric.tpl', TRUE))); + } + + function remove_from_parent() + { + $ldap= $this->config->get_ldap_link(); + $ldap->rmdir($this->dn); + show_ldap_error($ldap->get_error()); + $this->handle_post_events("remove"); + + /* Delete references to object groups */ + $ldap->cd ($this->config->current['BASE']); + $ldap->search ("(&(objectClass=gosaGroupOfNames)(member=".$this->dn."))", array("cn")); + while ($ldap->fetch()){ + $og= new ogroup($this->config, $ldap->getDN()); + unset($og->member[$this->dn]); + $og->save (); + } + + } + + + /* Save data to object */ + function save_object() + { + plugin::save_object(); + + /* Save base, since this is no LDAP attribute */ + if (isset($_POST['base']) && chkacl($this->acl, "create") == ""){ + $this->base= $_POST['base']; + } + } + + + /* Check supplied data */ + function check() + { + $message= array(); + $this->dn= "cn=".$this->cn.",ou=netdevices,ou=systems,".$this->base; + + /* must: cn, macAddress */ + if ($this->cn == "" && chkacl ($this->acl, "cn") == ""){ + $message[]= "The required field 'Component name' is not set."; + } + if ($this->macAddress == "" && chkacl ($this->acl, "macAddresscn") == ""){ + $message[]= "The required field 'MAC-address' is not set."; + } + + $ui= get_userinfo(); + $acl= get_permissions ($this->dn, $ui->subtreeACL); + $acl= get_module_permission($acl, "component", $this->dn); + if (chkacl($acl, "create") != ""){ + $message[]= _("You have no permissions to create a component on this 'Base'."); + } + + if ($this->orig_dn != $this->dn){ + $ldap= $this->config->get_ldap_link(); + $ldap->cd ($this->base); + $ldap->search ("(cn=".$this->cn.")", array("cn")); + if ($ldap->count() != 0){ + while ($attrs= $ldap->fetch()){ + if ($attrs['dn'] != $this->orig_dn){ + $message[]= sprintf (_("There is already an entry '%s' in the base choosen by you"), $this->cn); + break; + } + } + } + } + + return ($message); + } + + + /* Save to LDAP */ + function save() + { + plugin::save(); + + /* Remove all empty values */ + if ($this->orig_dn == 'new'){ + $attrs= array(); + foreach ($this->attrs as $key => $val){ + if (is_array($val) && count($val) == 0){ + continue; + } + $attrs[$key]= $val; + } + $this->attrs= $attrs; + } + + /* Write back to ldap */ + $ldap= $this->config->get_ldap_link(); + if ($this->orig_dn == 'new'){ + $ldap->cd($this->config->current['BASE']); + $ldap->create_missing_trees(preg_replace('/^[^,]+,/', '', $this->dn)); + $ldap->cd($this->dn); + $ldap->add($this->attrs); + $this->handle_post_events("add"); + } else { + if ($this->orig_dn != $this->dn){ + $this->move($this->orig_dn, $this->dn); + } + + $ldap->cd($this->dn); + $ldap->modify($this->attrs); + $this->handle_post_events("modify"); + } + show_ldap_error($ldap->get_error()); + + /* Optionally execute a command after we're done */ + $this->postcreate(); + } + +} + +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/plugins/admin/systems/class_workstationGeneric.inc b/plugins/admin/systems/class_workstationGeneric.inc new file mode 100644 index 000000000..b712323cc --- /dev/null +++ b/plugins/admin/systems/class_workstationGeneric.inc @@ -0,0 +1,309 @@ + "Eins ist toll", "zwei" => "Zwei ist noch besser"); + + /* Generic terminal attributes */ + var $gotoMode= "disabled"; + var $gotoTerminalPath= ""; + var $gotoSwapServer= ""; + var $gotoSyslogServer= ""; + var $gotoNtpServer= ""; + var $gotoSndModule= ""; + var $gotoFloppyEnable= ""; + var $gotoCdromEnable= ""; + var $ghCpuType= "-"; + var $ghMemSize= "-"; + var $macAddress= ""; + var $ipHostNumber= ""; + var $ghUsbSupport= "-"; + var $ghNetNic= array(); + var $ghIdeDev= array(); + var $ghScsiDev= array(); + var $ghGfxAdapter= "-"; + var $ghSoundAdapter= "-"; + var $gotoLastUser= "-"; + + + /* Needed values and lists */ + var $base= ""; + var $cn= ""; + var $orig_dn= ""; + + /* Plugin side filled */ + var $modes= array(); + + /* attribute list for save action */ + var $attributes= array("gotoMode", "gotoTerminalPath", "macAddress", + "gotoSwapServer", "gotoSyslogServer", "gotoNtpServer", + "gotoFloppyEnable", "gotoCdromEnable", "cn", "gotoSndModule", + "ghCpuType", "ghMemSize", "ghUsbSupport", "ipHostNumber", + "ghGfxAdapter", "ghSoundAdapter", "gotoLastUser"); + var $objectclasses= array("top", "gotoWorkstation", "GOhard"); + + function workgeneric ($config, $dn= NULL) + { + plugin::plugin ($config, $dn); + + /* Load available modes */ + $ldap= $this->config->get_ldap_link(); + $ldap->cd ($this->config->current['BASE']); + $ldap->search ("(objectClass=gotoInstallProfile)"); + while ($attrs= $ldap->fetch()){ + $this->modes[]= $attrs["cn"][0]; + } + + /* Read arrays */ + foreach (array("ghNetNic", "ghIdeDev", "ghScsiDev") as $val){ + if (!isset($this->attrs[$val])){ + continue; + } + for ($i= 0; $i<$this->attrs[$val]['count']; $i++){ + array_push($this->$val, $this->attrs[$val][$i]); + } + } + + $this->modes["disabled"]= _("disabled"); + $this->modes["text"]= _("text"); + $this->modes["graphic"]= _("graphic"); + + /* Set base */ + if ($this->dn == "new"){ + $ui= get_userinfo(); + $this->base= dn2base($ui->dn); + } else { + $this->base= preg_replace ("/^[^,]+,[^,]+,[^,]+,/", "", $this->dn); + } + + /* Save 'dn' for later referal */ + $this->orig_dn= $this->dn; + } + + function execute() + { + /* Do we need to flip is_account state? */ + if (isset($_POST['modify_state'])){ + $this->is_account= !$this->is_account; + } + + if (isset($_POST['action'])){ + switch($_POST['saction']){ + case 'wake': + $cmd= $this->search($this->config->data['TABS'], "terminfo", "WAKECMD"); + if ($cmd == ""){ + print_red(_("No WAKECMD definition found in your gosa.conf")); + } else { + exec ($cmd." ".$this->macAddress, $dummy, $retval); + if ($retval != 0){ + print_red(sprintf(_("Execution of '%s' failed!"), $cmd)); + } + } + break; + + case 'reboot': + $cmd= $this->search($this->config->data['TABS'], "terminfo", "REBOOTCMD"); + if ($cmd == ""){ + print_red(_("No REBOOTCMD definition found in your gosa.conf")); + } else { + exec ($cmd." ".$this->cn, $dummy, $retval); + if ($retval != 0){ + print_red(sprintf(_("Execution of '%s' failed!"), $cmd)); + } + } + break; + + case 'halt': + $cmd= $this->search($this->config->data['TABS'], "terminfo", "HALTCMD"); + if ($cmd == ""){ + print_red(_("No HALTCMD definition found in your gosa.conf")); + } else { + exec ($cmd." ".$this->cn, $dummy, $retval); + if ($retval != 0){ + print_red(sprintf(_("Execution of '%s' failed!"), $cmd)); + } + } + break; + } + } + + /* Do we represent a valid terminal? */ + if (!$this->is_account && $this->parent == NULL){ + $display= " ". + _("This 'dn' has no workstation features.").""; + return($display); + } + + /* Fill templating stuff */ + $smarty= get_smarty(); + $smarty->assign("cn", $this->cn); + $smarty->assign("bases", $this->config->idepartments); + + /* Check if workstation is online */ + $query= "fping -q -r 1 -t 500 ".$this->cn; + exec ($query, $dummy, $retval); + + /* Offline */ + if ($retval == 0){ + $smarty->assign("actions", array("halt" => _("Switch off"), "reboot" => _("Reboot"))); + } else { + $smarty->assign("actions", array("wake" => _("Wake up"))); + } + /* Arrays */ + $smarty->assign("modes", $this->modes); + $smarty->assign("nfsservers", $this->config->data['SERVERS']['NFS']); + $smarty->assign("syslogservers", $this->config->data['SERVERS']['SYSLOG']); + $smarty->assign("ntpservers", $this->config->data['SERVERS']['NTP']); + + /* Variables */ + foreach(array("base", "gotoMode", "gotoTerminalPath", "gotoSwapServer", + "gotoSyslogServer", "gotoNtpServer") as $val){ + + $smarty->assign($val."_select", $this->$val); + $smarty->assign($val."ACL", chkacl($this->acl, $val)); + } + $smarty->assign("ipHostNumber", $this->ipHostNumber); + $smarty->assign("macAddress", $this->macAddress); + + /* Show main page */ + $smarty->assign("netconfig", dirname(__FILE__)."/network.tpl"); + return($smarty->fetch (get_template_path('workstation.tpl', TRUE))); + } + + function remove_from_parent() + { + $ldap= $this->config->get_ldap_link(); + $ldap->rmdir($this->dn); + show_ldap_error($ldap->get_error()); + + /* Optionally execute a command after we're done */ + $this->handle_post_events("remove"); + + /* Delete references to object groups */ + $ldap->cd ($this->config->current['BASE']); + $ldap->search ("(&(objectClass=gosaGroupOfNames)(member=".$this->dn."))", array("cn")); + while ($ldap->fetch()){ + $og= new ogroup($this->config, $ldap->getDN()); + unset($og->member[$this->dn]); + $og->save (); + } + + } + + + /* Save data to object */ + function save_object() + { + plugin::save_object(); + + /* Save base, since this is no LDAP attribute */ + if (isset($_POST['base']) && chkacl($this->acl, "create") == ""){ + $this->base= $_POST['base']; + } + + /* Save terminal path to parent since it is used by termstartup, too */ + $this->parent->by_object['termstartup']->gotoTerminalPath= + $this->gotoTerminalPath; + } + + + /* Check supplied data */ + function check() + { + $message= array(); + + $ui= get_userinfo(); + $this->dn= "cn=".$this->cn.",ou=workstations,ou=systems,".$this->base; + $acl= get_permissions ($this->dn, $ui->subtreeACL); + $acl= get_module_permission($acl, "group", $this->dn); + if (chkacl($acl, "create") != ""){ + $message[]= _("You have no permissions to create a workstation on this 'Base'."); + } + + if ($this->cn == "" && chkacl ($this->acl, "cn") == ""){ + $message[]= _("The required field 'Workstation name' is not set."); + } + + if ($this->orig_dn != $this->dn){ + $ldap= $this->config->get_ldap_link(); + $ldap->cd ($this->base); + $ldap->search ("(cn=".$this->cn.")", array("cn")); + if ($ldap->count() != 0){ + while ($attrs= $ldap->fetch()){ + if (preg_match ("/,ou=incoming,/", $ldap->getDN())){ + continue; + } else { + if ($attrs['dn'] != $this->orig_dn){ + $message[]= sprintf (_("There is already an entry '%s' in the base choosen by you"), $this->cn); + break; + } + } + } + } + } + + return ($message); + } + + + /* Save to LDAP */ + function save() + { + plugin::save(); + + /* Strip out 'default' values */ + foreach (array("gotoTerminalPath", "gotoSwapServer", "gotoSyslogServer") as $val){ + + if ($this->attrs[$val] == "default"){ + $this->attrs[$val]= array(); + } + } + + /* Add missing arrays */ + foreach (array("ghScsiDev", "ghIdeDev", "ghNetNic") as $val){ + if (isset ($this->$val) && count ($this->$val) != 0){ + $this->attrs["$val"]= $this->$val; + } + } + + /* Remove all empty values */ + if ($this->orig_dn == 'new'){ + $attrs= array(); + foreach ($this->attrs as $key => $val){ + if (is_array($val) && count($val) == 0){ + continue; + } + $attrs[$key]= $val; + } + $this->attrs= $attrs; + } + + /* Write back to ldap */ + $ldap= $this->config->get_ldap_link(); + if ($this->orig_dn == 'new'){ + $ldap->cd($this->config->current['BASE']); + $ldap->create_missing_trees(preg_replace('/^[^,]+,/', '', $this->dn)); + $ldap->cd($this->dn); + $ldap->add($this->attrs); + $this->handle_post_events("add"); + } else { + if ($this->orig_dn != $this->dn){ + $this->move($this->orig_dn, $this->dn); + } + $ldap->cd($this->dn); + $ldap->modify($this->attrs); + $this->handle_post_events("modify"); + } + show_ldap_error($ldap->get_error()); + + /* Optionally execute a command after we're done */ + $this->postcreate(); + } + +} + +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/plugins/admin/systems/component.tpl b/plugins/admin/systems/component.tpl new file mode 100644 index 000000000..f830920a1 --- /dev/null +++ b/plugins/admin/systems/component.tpl @@ -0,0 +1,41 @@ + + + + + +
+ + + + + + + + + + + +
{t}Device name{/t}{$must}
 
{t}Base{/t}{$must} + +
+
+ + + + + +
{t}Description{/t}
+
+ +

 

+ +{include file="$netconfig"} + + + diff --git a/plugins/admin/systems/headpage.tpl b/plugins/admin/systems/headpage.tpl new file mode 100644 index 000000000..8f72d69bb --- /dev/null +++ b/plugins/admin/systems/headpage.tpl @@ -0,0 +1,74 @@ + + + + + +
+
+

+ {t}List of systems{/t} {$hint} +

+
+
+

+ +
+   +   +   +   + +

+
+
+
+

[i]{t}Information{/t}

+
+
+

+ {t}Using this menu you can add, remove and change the properties of specific systems. You can only add systems which have already been started once.{/t} +

+

+ {t}-Edit- will execute an assistant to aid you in changing the system properties. -Delete- will ask before really deleting things from your LDAP.{/t} +

+
+
+
+

[F]{t}Filters{/t}

+
+
+

+ + {$alphabet} +
+

+

+ {t}Show servers{/t}
+ {t}Show terminals{/t}
+ {t}Show workstations{/t}
+ {t}Show windows based workstations{/t}
+ {t}Show network printers{/t}
+ {t}Show phones{/t}
+ {t}Show network devices{/t}
+

+

+ +
 {t}Display systems of department{/t}
+

+

+ +
 {t}Display systems matching{/t}
+

+

+ +
 {t}Display terminal(s) of user{/t}
+

+ {$apply} +
+
+ + diff --git a/plugins/admin/systems/info.tpl b/plugins/admin/systems/info.tpl new file mode 100644 index 000000000..9a3872b28 --- /dev/null +++ b/plugins/admin/systems/info.tpl @@ -0,0 +1,135 @@ +

{t}System information{/t}

+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
{t}CPU{/t}{$ghCpuType}
{t}Memory{/t}{$ghMemSize}
{t}Boot MAC{/t}{$macAddress}
{t}USB support{/t}{$ghUsbSupport}
{t}System status{/t}{$status}
{t}Inventary number{/t}{$ghInventoryNumber}
{t}Last login{/t}{$gotoLastUser}
+
+   + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
{t}Network devices{/t} + {foreach item=netcard from=$ghNetNic} + {$netcard}
+ {/foreach} +
{t}IDE devices{/t} + {foreach item=idedev from=$ghIdeDev} + {$idedev}
+ {/foreach} +
{t}SCSI devices{/t} + {foreach item=scsidev from=$ghScsiDev} + {$scsidev}
+ {/foreach} +
{t}Floppy device{/t}{$FloppyDevice}
{t}CDROM device{/t}{$CdromDevice}
{t}Graphic device{/t}{$ghGfxAdapter}
{t}Audio device{/t}{$ghSoundAdapter}
+
+ +{if $active eq "true"} +
+

{t}System status{/t}

+ + + + + + +
+ + + + + + + + + + + + + + + + + {$partitions} +
{t}Up since{/t}{$uptime}
{t}CPU load{/t}
{t}Memory usage{/t}
{t}Swap usage{/t}
 
+
+   + + + + + + + + + + + + + + + + + +
{t}SSH service{/t}{$sshd}
{t}Print service{/t}{$cupsd}
{t}Scan service{/t}{$saned}
{t}Sound service{/t}{$artsd}
{t}GUI{/t}{$X}
+
+{/if} + diff --git a/plugins/admin/systems/main.inc b/plugins/admin/systems/main.inc new file mode 100644 index 000000000..20145a88b --- /dev/null +++ b/plugins/admin/systems/main.inc @@ -0,0 +1,55 @@ +remove_lock(); + del_lock ($ui->dn); + sess_del ('systems'); + } +} else { + /* Create usermanagement object on demand */ + if (!isset($_SESSION['systems']) || (isset($_GET['reset']) && $_GET['reset'] == 1)){ + $_SESSION['systems']= new systems($config, $ui); + } + $systems= $_SESSION['systems']; + $systems->save_object(); + $output= $systems->execute(); + + /* Reset requested? */ + if (isset($_GET['reset']) && $_GET['reset'] == 1){ + del_lock ($ui->dn); + sess_del ('systems'); + } + + /* Page header*/ + if (isset($_SESSION['objectinfo'])){ + $display= print_header(get_template_path('images/system.png'), _("System management"), " ".$_SESSION['objectinfo']); + } else { + $display= print_header(get_template_path('images/system.png'), _("System management")); + } + + /* Show and save dialog */ + $display.= $output; + $_SESSION['systems']= $systems; +} + +?> diff --git a/plugins/admin/systems/network.tpl b/plugins/admin/systems/network.tpl new file mode 100644 index 000000000..1abc75b6d --- /dev/null +++ b/plugins/admin/systems/network.tpl @@ -0,0 +1,23 @@ +

{t}Network settings{/t}

+ + + + + + +
+ + + + + +
{t}IP-address{/t}
+
+ + + + + +
{t}MAC-address{/t}
+
+
diff --git a/plugins/admin/systems/password.tpl b/plugins/admin/systems/password.tpl new file mode 100644 index 000000000..eb2e9205b --- /dev/null +++ b/plugins/admin/systems/password.tpl @@ -0,0 +1,36 @@ +

+ {t}To change the terminal root password use the fields below. The changes take effect during next reboot. Please memorize the new password, because the you would't be able to log in. Leave fields blank for password inheritance from default entries.{/t} +

+ +

+ {t}Changing the password impinges on authentification only.{/t} +

+ + + + + + + + + + +
{t}New password{/t}
{t}Repeat new password{/t}
+ +
+ +

+ +   + +

+ + + diff --git a/plugins/admin/systems/phone.tpl b/plugins/admin/systems/phone.tpl new file mode 100644 index 000000000..50597b121 --- /dev/null +++ b/plugins/admin/systems/phone.tpl @@ -0,0 +1,41 @@ + + + + + +
+ + + + + + + + + + + +
{t}Phone name{/t}{$must}
 
{t}Base{/t}{$must} + +
+
+ + + + + +
{t}Description{/t}
+
+ +

 

+ +{include file="$netconfig"} + + + diff --git a/plugins/admin/systems/printer.tpl b/plugins/admin/systems/printer.tpl new file mode 100644 index 000000000..3df9755b0 --- /dev/null +++ b/plugins/admin/systems/printer.tpl @@ -0,0 +1,53 @@ + + + + + +
+ + + + + + + + + + + + + + + + + + + +
{t}Printer name{/t}{$must}
{t}Description{/t}
{t}Location{/t}
 
{t}Base{/t}{$must} + +
+
+ + + + + + + + + +
{t}Printer URL{/t}
{t}Path to PPD{/t}
+
+ +

 

+ +{include file="$netconfig"} + + + diff --git a/plugins/admin/systems/remove.tpl b/plugins/admin/systems/remove.tpl new file mode 100644 index 000000000..e1740e7af --- /dev/null +++ b/plugins/admin/systems/remove.tpl @@ -0,0 +1,18 @@ +
+ {t}Warning{/t} +
+ +

+ {$warning} + {t}This includes all system and setup informations. Please double check if your really want to do this since there is no way for GOsa to get your data back.{/t} +

+ +

+ {t}Best thing to do before performing this action would be to save the current contents of your LDAP tree in a file. So - if you've done so - press Delete to continue or Cancel to abort.{/t} +

+ +

+ +   + +

diff --git a/plugins/admin/systems/servdb.tpl b/plugins/admin/systems/servdb.tpl new file mode 100644 index 000000000..91645899a --- /dev/null +++ b/plugins/admin/systems/servdb.tpl @@ -0,0 +1,122 @@ +{t}This dialog keeps settings that are used and required by several components within GOsa and are used to find out more about your servers. These settings will be reloaded when you save this component.{/t} +

+  +

+ + + + + + + + + +
+ + {t}Kerberos kadmin access{/t} + + + + + + + + + + + + + + +
{t}Kerberos Realm{/t}
{t}Admin user{/t}
{t}Password{/t}
+ +

 

+
+ + {t}FAX database{/t} + + + + + + + + + + +
{t}FAX DB user{/t}
{t}Password{/t}
+ +

 

+
+ + {t}Asterisk management{/t} + + + + + + + + + + + + + + + + + + +
{t}Asterisk DB user{/t}
{t}Password{/t}
{t}Country dial prefix{/t}
{t}Local dial prefix{/t}
+ + +
+ + {t}IMAP admin access{/t} + + + + + + + + + + + + + + + + + + + + + + +
{t}Server identifier{/t}
{t}Connect URL{/t}
{t}Admin user{/t}
{t}Password{/t}
{t}Sieve port{/t}
+ +

 

+
+ + {t}Logging database{/t} + + + + + + + + + + +
{t}Logging DB user{/t}
{t}Password{/t}
+ +
diff --git a/plugins/admin/systems/servdhcp.tpl b/plugins/admin/systems/servdhcp.tpl new file mode 100644 index 000000000..de9e44474 --- /dev/null +++ b/plugins/admin/systems/servdhcp.tpl @@ -0,0 +1 @@ +DHCP functionality here.. diff --git a/plugins/admin/systems/servdns.tpl b/plugins/admin/systems/servdns.tpl new file mode 100644 index 000000000..449ac7ba2 --- /dev/null +++ b/plugins/admin/systems/servdns.tpl @@ -0,0 +1 @@ +DNS functionality here.. diff --git a/plugins/admin/systems/server.tpl b/plugins/admin/systems/server.tpl new file mode 100644 index 000000000..2d59eeb36 --- /dev/null +++ b/plugins/admin/systems/server.tpl @@ -0,0 +1,59 @@ + + + + + +
+ + + + + + + + + + + +
{t}Server name{/t}{$must}
 
{t}Base{/t}{$must} + +
+
+ + + + + +
{t}Description{/t}
+
+ +

 

+ +{include file="$netconfig"} + +

 

+ +

{t}Action{/t}

+ + + + + +
+ + + +
+ + + + diff --git a/plugins/admin/systems/service.tpl b/plugins/admin/systems/service.tpl new file mode 100644 index 000000000..dca50c264 --- /dev/null +++ b/plugins/admin/systems/service.tpl @@ -0,0 +1,223 @@ + + + + + + + + + + + + + +
+

{t}Keyboard{/t}

+ + + + + + + + + + + + + +
{t}Model{/t} + +
{t}Layout{/t} + +
{t}Variant{/t} + +
+ +
+   + +

{t}Mouse{/t}

+ + + + + + + + + +
{t}Type{/t} + +
{t}Port{/t} + +
+ +
+   + +

{t}Telephone hardware{/t}

+ + + + +
{t}Telephone{/t}  + {$hardware_list} +
+ +
+ + + + + + + + + + + +

+

{t}Graphic device{/t}

+ + + + + + + + + + + + + +
{t}Driver{/t} + +
{t}Resolution{/t} + +
{t}Color depth{/t} + +
+
+   + +

{t}Display device{/t}

+ + + + + + + + + + + + + +
{t}Type{/t}{$gotoXMonitor}
{t}HSync{/t} kHz
{t}VSync{/t} Hz
+ +
+   + +

{t}Remote desktop{/t}

+ + + + + + + + + + + + + + + + +
{t}Connect method{/t} + +
{t}Terminal server{/t} + +
{t}Font server{/t} + +
+ +
+ + + + + + + + + +

+

{t}Print device{/t}

+ + {t}Provide print services{/t} +
+ + + + + + + +
{t}Spool server{/t} + +
+ +
+   + +

{t}Scan device{/t}

+ + {t}Provide scan services{/t} +
+ + + + + + +
{t}Model{/t} + +
+ +
+ +
diff --git a/plugins/admin/systems/servservice.tpl b/plugins/admin/systems/servservice.tpl new file mode 100644 index 000000000..53a90bffa --- /dev/null +++ b/plugins/admin/systems/servservice.tpl @@ -0,0 +1 @@ +Empty diff --git a/plugins/admin/systems/startup.tpl b/plugins/admin/systems/startup.tpl new file mode 100644 index 000000000..075d978a6 --- /dev/null +++ b/plugins/admin/systems/startup.tpl @@ -0,0 +1,102 @@ +

{t}Boot parameters{/t}

+ + + + + + + + +
+ + + + + + + + + + + + + + +
{t}LDAP server{/t} + +
{t}Boot kernel{/t}
{t}Custom options{/t}
+ +
+   + + + {t}use graphical bootup{/t} +
+ + {t}use standard linux textual bootup{/t} +
+ + {t}use debug mode for startup{/t} +
+ + + + + + + + + +

+

+ {t}Kernel modules (format: name parameters){/t} +

+ +
+ +   + +
+

+ {t}Automount devices (format: complete autofs entry){/t} +

+ +
+ +   + +
+ + + + + + + +

+

+ {t}Additional fstab entries{/t} +

+ +
+ +   + +
+ + + diff --git a/plugins/admin/systems/tabs_component.inc b/plugins/admin/systems/tabs_component.inc new file mode 100644 index 000000000..deead42af --- /dev/null +++ b/plugins/admin/systems/tabs_component.inc @@ -0,0 +1,34 @@ +by_object['componentgeneric']; + $this->dn= "cn=$baseobject->cn,ou=netdevices,ou=systems,".$baseobject->base; + + foreach ($this->by_object as $key => $obj){ + $this->by_object[$key]->dn= $this->dn; + } + + tabs::save(TRUE); + } + +} + +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/plugins/admin/systems/tabs_phone.inc b/plugins/admin/systems/tabs_phone.inc new file mode 100644 index 000000000..60ccd3305 --- /dev/null +++ b/plugins/admin/systems/tabs_phone.inc @@ -0,0 +1,34 @@ +by_object['phonegeneric']; + $this->dn= "cn=$baseobject->cn,ou=phones,ou=systems,".$baseobject->base; + + foreach ($this->by_object as $key => $obj){ + $this->by_object[$key]->dn= $this->dn; + } + + tabs::save(TRUE); + } + +} + +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/plugins/admin/systems/tabs_printers.inc b/plugins/admin/systems/tabs_printers.inc new file mode 100644 index 000000000..a1e85ebb6 --- /dev/null +++ b/plugins/admin/systems/tabs_printers.inc @@ -0,0 +1,34 @@ +by_object['printgeneric']; + $this->dn= "cn=$baseobject->cn,ou=printers,ou=systems,".$baseobject->base; + + foreach ($this->by_object as $key => $obj){ + $this->by_object[$key]->dn= $this->dn; + } + + tabs::save(TRUE); + } + +} + +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/plugins/admin/systems/tabs_server.inc b/plugins/admin/systems/tabs_server.inc new file mode 100644 index 000000000..4d4a4f425 --- /dev/null +++ b/plugins/admin/systems/tabs_server.inc @@ -0,0 +1,39 @@ +by_object['servgeneric']; + $this->dn= "cn=$baseobject->cn,ou=servers,ou=systems,".$baseobject->base; + + foreach ($this->by_object as $key => $obj){ + $this->by_object[$key]->dn= $this->dn; + } + + tabs::save(TRUE); + + /* Reload server settings after saving */ + $config= $_SESSION['config']; + $config->load_servers(); + $_SESSION['config']= $config; + } + +} + +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/plugins/admin/systems/tabs_terminal.inc b/plugins/admin/systems/tabs_terminal.inc new file mode 100644 index 000000000..52513f9ee --- /dev/null +++ b/plugins/admin/systems/tabs_terminal.inc @@ -0,0 +1,39 @@ +by_object['termstartup']->gotoTerminalPath= + $this->by_object['termgeneric']->gotoTerminalPath; + } + + + function save() + { + /* Check for new 'dn', in order to propagate the + 'dn' to all plugins */ + $baseobject= $this->by_object['termgeneric']; + $this->dn= "cn=".$baseobject->cn.",ou=terminals,ou=systems,".$baseobject->base; + + foreach ($this->by_object as $key => $obj){ + $this->by_object[$key]->dn= $this->dn; + $this->by_object[$key]->cn= $baseobject->cn; + } + + tabs::save(TRUE); + } + +} + +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/plugins/admin/systems/tabs_winstation.inc b/plugins/admin/systems/tabs_winstation.inc new file mode 100644 index 000000000..062eac6ee --- /dev/null +++ b/plugins/admin/systems/tabs_winstation.inc @@ -0,0 +1,34 @@ +by_object['wingeneric']; + $this->dn= "cn=$baseobject->cn,ou=winstations,ou=systems,".$baseobject->base; + + foreach ($this->by_object as $key => $obj){ + $this->by_object[$key]->dn= $this->dn; + } + + tabs::save(TRUE); + } + +} + +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/plugins/admin/systems/tabs_workstation.inc b/plugins/admin/systems/tabs_workstation.inc new file mode 100644 index 000000000..13df2dc0f --- /dev/null +++ b/plugins/admin/systems/tabs_workstation.inc @@ -0,0 +1,39 @@ +by_object['termstartup']->gotoTerminalPath= + $this->by_object['workgeneric']->gotoTerminalPath; + } + + + function save() + { + /* Check for new 'dn', in order to propagate the + 'dn' to all plugins */ + $baseobject= $this->by_object['workgeneric']; + $this->dn= "cn=".$baseobject->cn.",ou=workstations,ou=systems,".$baseobject->base; + + foreach ($this->by_object as $key => $obj){ + $this->by_object[$key]->dn= $this->dn; + $this->by_object[$key]->cn= $baseobject->cn; + } + + tabs::save(TRUE); + } + +} + +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/plugins/admin/systems/terminal.tpl b/plugins/admin/systems/terminal.tpl new file mode 100644 index 000000000..40d10941c --- /dev/null +++ b/plugins/admin/systems/terminal.tpl @@ -0,0 +1,120 @@ +

{t}Properties{/t}

+ + + + + + + + + + + + +
+ + + + {if $cn eq 'default'} + + {else} + + + {/if} + + + + +
{t}Terminal template{/t}{t}Terminal name{/t}{$must} + +
{t}Base{/t}{$must} + +
+ +
+   + + + + + + + +
{t}Mode{/t} + +
+ +
+ + + + + + + + + + +
{t}Root server{/t} + +
{t}Swap server{/t} + +
+
+ + + + + + + + + + + +
{t}Syslog server{/t} + +
{t}NTP server{/t} + +
+ +
+

 

+ +{include file="$netconfig"} + +

 

+

{t}Action{/t}

+ + + + + +
+ + + +
+ + + + diff --git a/plugins/admin/systems/wingeneric.tpl b/plugins/admin/systems/wingeneric.tpl new file mode 100644 index 000000000..07a6bef59 --- /dev/null +++ b/plugins/admin/systems/wingeneric.tpl @@ -0,0 +1,46 @@ + + + + + +
+ + + + + + + + + + + +
{t}Machine name{/t}{$must}
 
{t}Base{/t}{$must} + +
+
+ + + + + + + + +
{t}Description{/t}
+ as{$uidNumber} +
+
+ +

 

+ +{include file="$netconfig"} + + + diff --git a/plugins/admin/systems/workstation.tpl b/plugins/admin/systems/workstation.tpl new file mode 100644 index 000000000..871a2dac8 --- /dev/null +++ b/plugins/admin/systems/workstation.tpl @@ -0,0 +1,120 @@ +

{t}Properties{/t}

+ + + + + + + + + + + + +
+ + + + {if $cn eq 'wdefault'} + + {else} + + + {/if} + + + + +
{t}Workstation template{/t}{t}Workstation name{/t}{$must} + +
{t}Base{/t}{$must} + +
+ +
+   + + + + + + + +
{t}Mode{/t} + +
+ +
+ + + + + + + + + + +
{t}Root server{/t} + +
{t}Swap server{/t} + +
+
+ + + + + + + + + + + +
{t}Syslog server{/t} + +
{t}NTP server{/t} + +
+ +
+

 

+ +{include file="$netconfig"} + +

 

+

{t}Action{/t}

+ + + + + +
+ + + +
+ + + + diff --git a/plugins/admin/users/class_userManagement.inc b/plugins/admin/users/class_userManagement.inc new file mode 100644 index 000000000..b5f7b2c55 --- /dev/null +++ b/plugins/admin/users/class_userManagement.inc @@ -0,0 +1,671 @@ +config= $config; + $this->ui= $ui; + + /* Get global filter config */ + if (!is_global("userfilter")){ + $base= get_base_from_people($ui->dn); + $userfilter= array( "mailusers" => "checked", + "unixusers" => "checked", + "templates" => "", + "subsearch" => "", + "proxyusers" => "checked", + "sambausers" => "checked", + "ftpusers" => "checked", + "faxusers" => "checked", + "functionalusers" => "checked", + "depselect" => $base, + "regex" => "*"); + register_global("userfilter", $userfilter); + } + } + + function execute() + { + $smarty= get_smarty(); + $userfilter= get_global("userfilter"); + + /* Save filter data if we are in the headpage */ + if (!isset($this->usertab)){ + foreach( array("depselect", "regex") as $type){ + if (isset($_POST[$type])){ + $userfilter[$type]= $_POST[$type]; + } + } + if (isset($_POST['depselect'])){ + foreach( array("functionalusers", "unixusers", "mailusers", + "sambausers", "proxyusers", "ftpusers", + "faxusers", "templates", "subsearch") as $type){ + + if (isset($_POST[$type])) { + $userfilter[$type]= "checked"; + } else { + $userfilter[$type]= ""; + } + } + } + if (isset($_GET['search'])){ + $s= mb_substr($_GET['search'], 0, 1, "UTF8")."*"; + if ($s == "**"){ + $s= "*"; + } + $userfilter['regex']= $s; + } + register_global("userfilter", $userfilter); + } + + /* React on user interaction here */ + if ($_SERVER["REQUEST_METHOD"] == "POST"){ + + /* User wants to edit data? */ + if ( (isset($_POST['select_user']) || (isset($_POST['edit_helper']) && $_POST['edit_helper'] == "1")) && isset($_POST['userlist']) && $_POST['userlist'] != ""){ + + /* Get 'dn' from posted 'uid', must be unique */ + $this->dn= trim($_POST['userlist']); + + /* Check locking, save current plugin in 'back_plugin', so + the dialog knows where to return. */ + if (($user= get_lock($this->dn)) != ""){ + return(gen_locked_message ($user, $this->dn)); + } + + /* Lock the current entry, so everyone will get the + above dialog */ + add_lock ($this->dn, $this->ui->dn); + + /* Set up the users ACL's for this 'dn' */ + $acl= get_permissions ($this->dn, $this->ui->subtreeACL); + + /* Register usertab to trigger edit dialog */ + $this->usertab= new usertabs($this->config, + $this->config->data['TABS']['USERTABS'], $this->dn); + $this->usertab->set_acl($acl); + + $_SESSION['objectinfo']= $this->dn; + } + } + + /* Reset requested? */ + if (isset($_POST['edit_cancel']) || isset($_POST['password_cancel'])){ + del_lock ($this->usertab->dn); + unset ($this->usertab); + $this->usertab= NULL; + $this->lognames= array();; + $this->sn= ""; + $this->givenName= ""; + $this->uid= ""; + unset ($_SESSION['objectinfo']); + } + + /* Password change requested */ + if (isset($_POST['setpass_user']) && isset($_POST['userlist'])){ + + /* Get 'dn' from posted 'uid' */ + $this->dn= trim($_POST['userlist']); + + /* Load permissions for selected 'dn' and check if + we're allowed to remove this 'dn' */ + $acl= get_permissions ($this->dn, $this->ui->subtreeACL); + $acl= get_module_permission($acl, "user", $this->dn); + if (chkacl($acl, "password") == ""){ + + /* User is allowed to change passwords, save 'dn' and 'acl' for next + dialog. */ + $this->acl= $acl; + $_SESSION['objectinfo']= $this->dn; + return ($smarty->fetch(get_template_path('password.tpl', TRUE))); + + } else { + /* User is not allowed. Show message and cancel. */ + print_red (_("You are not allowed to set this users password!")); + } + } + + /* Perform password change */ + if (isset($_POST['password_finish'])){ + + /* For security reasons, check if user is allowed to set password again */ + if (chkacl($this->acl, "password") == "" || chkacl($this->acl, "create")){ + + /* Check input and feed errors into 'message' */ + $message= array(); + + /* Sanity checks... */ + if ($_POST['new_password'] != $_POST['repeated_password']){ + + /* Matching passwords in new and repeated? */ + $message[]= _("The passwords you've entered as 'New password' and 'Repeated new password' do not match."); + } else { + + /* Empty password is not permitted by default. */ + if ($_POST['new_password'] == ""){ + $message[]= _("The password you've entered as 'New password' is empty."); + } + } + + /* Errors, or change password? */ + if (count($message) != 0){ + + /* Show error message and continue editing */ + show_errors ($message); + return($smarty->fetch(get_template_path('password.tpl', TRUE))); + } + + /* Set password, perform required steps */ + if ($this->usertab){ + if ($this->usertab->password_change_needed()){ + $obj= $this->usertab->by_object['user']; + change_password ($this->usertab->dn, $_POST['new_password'], + 0, $obj->pw_storage); + gosa_log ("Password for '".$this->usertab->dn."' has been changed"); + unset($this->usertab); + $this->usertab= NULL; + } + } else { + change_password ($this->dn, $_POST['new_password']); + gosa_log ("Password for '".$this->dn."' has been changed"); + } + } else { + + /* Missing permissions, show message */ + print_red (_("You are not allowed to set this users password!")); + } + + /* Clean session, delete lock */ + del_lock ($this->dn); + $this->reload(); + unset ($this->usertab); + $this->usertab= NULL; + $this->lognames= array();; + $this->sn= ""; + $this->givenName= ""; + $this->uid= ""; + unset ($_SESSION['objectinfo']); + } + + + /* Remove user was requested */ + if (isset($_POST['delete_user']) && isset($_POST['userlist'])){ + + /* Get 'dn' from posted 'uid' */ + $this->dn= trim($_POST['userlist']); + + /* Load permissions for selected 'dn' and check if + we're allowed to remove this 'dn' */ + $acl= get_permissions ($this->dn, $this->ui->subtreeACL); + $this->acl= get_module_permission($acl, "user", $this->dn); + if (chkacl($this->acl, "delete") == ""){ + + /* Check locking, save current plugin in 'back_plugin', so + the dialog knows where to return. */ + if (($user= get_lock($this->dn)) != ""){ + return(gen_locked_message ($user, $this->dn)); + } + + /* Lock the current entry, so nobody will edit it during deletion */ + add_lock ($this->dn, $this->ui->dn); + $smarty->assign("info", sprintf(_("You're about to delete the user %s."), $this->dn)); + return($smarty->fetch(get_template_path('remove.tpl', TRUE))); + } else { + + /* Obviously the user isn't allowed to delete. Show message and + clean session. */ + print_red (_("You are not allowed to delete this user!")); + } + } + + + + /* Confirmation for deletion has been passed. User should be deleted. */ + if (isset($_POST['delete_user_confirm'])){ + + /* Some nice guy may send this as POST, so we've to check + for the permissions again. */ + if (chkacl($this->acl, "delete") == ""){ + + /* Delete request is permitted, perform LDAP action */ + $this->usertab= new usertabs($this->config, $this->config->data['TABS']['USERTABS'], + $this->dn); + $this->usertab->set_acl(array($this->acl)); + $this->usertab->delete (); + gosa_log ("User object '".$this->dn."' has been removed"); + unset ($this->usertab); + $this->usertab= NULL; + + /* User list has changed, reload it. */ + $this->reload (); + } else { + + /* Normally this shouldn't be reached, send some extra + logs to notify the administrator */ + print_red (_("You are not allowed to delete this user!")); + + if(isset($this->ui->uid)){ + gosa_log ("Warning: '".$this->ui->uid."' tried to trick user deletion."); + } + } + + /* Remove lock file after successfull deletion */ + del_lock ($this->dn); + } + + + /* Delete user canceled? */ + if (isset($_POST['delete_cancel'])){ + del_lock ($this->dn); + } + + + /* Finish user edit is triggered by the tabulator dialog, so + the user wants to save edited data. Check and save at this + point. */ + if (isset($_POST['edit_finish'])){ + + /* Check tabs, will feed message array */ + $this->usertab->last= $this->usertab->current; + $this->usertab->save_object(); + $message= $this->usertab->check(); + + /* Save, or display error message? */ + if (count($message) == 0){ + + /* No errors. Go ahead and prepare to ask for a password + in case we're creating a new user. 'dn' will be 'new' + in this case. It is set to the correct value later. */ + if ($this->dn == "new"){ + $set_pass= 1; + } else { + $set_pass= 0; + } + + /* Save user data to ldap */ + if($this->usertab->save() == 1){ + gosa_log ("User object '".$this->dn."' saving failed."); + return; + } + gosa_log ("User object '".$this->dn."' has been saved"); + + /* User has been saved successfully, remove lock from + LDAP. */ + if ($this->dn != "new"){ + del_lock ($this->dn); + } + + /* In case of new users, ask for a password */ + if (($set_pass || $this->usertab->password_change_needed()) && + !$this->is_template){ + + return($smarty->fetch(get_template_path('password.tpl', TRUE))); + } + + /* There's no page reload so we have to read new users at + this point. */ + $this->reload (); + unset ($this->usertab); + $this->usertab= NULL; + unset ($_SESSION['objectinfo']); + + } else { + /* Ok. There seem to be errors regarding to the tab data, + show message and continue as usual. */ + show_errors($message); + } + } + + /* Generate template list */ + if (isset($_POST['new_user'])){ + $this->templates= array(); + $ldap= $this->config->get_ldap_link(); + foreach ($this->config->departments as $key => $value){ + $acl= get_permissions (get_people_ou().$value, $this->ui->subtreeACL); + $acl= get_module_permission($acl, "user", get_people_ou().$value); + if (chkacl($acl, "create") == ""){ + $ldap->cd (get_people_ou().$value); + $ldap->search ("(objectClass=gosaUserTemplate)", array("uid")); + + if ($ldap->count() != 0){ + while ($attrs= $ldap->fetch()){ + $this->templates[$ldap->getDN()]= + $attrs['uid'][0]." - $key"; + } + $this->templates['none']= _("none"); + } + } + } + natcasesort ($this->templates); + reset ($this->templates); + } + + /* New user/template request */ + if (isset($_POST['new_user']) || isset($_POST['new_template'])){ + + /* By default we set 'dn' to 'new', all relevant plugins will + react on this. */ + $this->dn= "new"; + if (isset($this->config->current['IDGEN'])){ + $this->got_uid= false; + } else { + $this->got_uid= true; + } + + /* Create new usertab object */ + $this->usertab= new usertabs($this->config, + $this->config->data['TABS']['USERTABS'], $this->dn); + $this->usertab->set_acl(array(':all')); + + /* Take care about templates */ + if (isset($_POST['new_template'])){ + $this->is_template= TRUE; + $this->usertab->set_template_mode (); + } else { + $this->is_template= FALSE; + } + + /* Use template if there are any of them */ + if (count($this->templates) && !isset($_POST['new_template'])){ + foreach(array("sn", "givenName", "uid", "got_uid", "templates") as $attr){ + $smarty->assign("$attr", $this->$attr); + } + if (isset($_POST['template'])){ + $smarty->assign("template", $_POST['template']); + } + return($smarty->fetch(get_template_path('template.tpl', TRUE))); + } + + } + + /* Continue template editing */ + if (isset($_POST['template_continue']) && $_POST['template'] != 'none' && !isset($_POST['uid'])){ + $this->sn= $_POST['sn']; + $this->givenName= $_POST['givenName']; + + /* Check for requred values */ + $message= array(); + if ($this->sn == "") { + $message[]= _("The required field 'Name' is not set."); + } + if ($this->givenName == "") { + $message[]= _("The required field 'Given name' is not set."); + } + + /* Check if dn is used */ + $dn= preg_replace("/^[^,]+,/i", "", $_POST['template']); + $ldap= $this->config->get_ldap_link(); + $ldap->cd ($dn); + $ldap->search ("(&(sn=".$this->sn.")(givenName=".$this->givenName."))", array("givenName")); + if ($ldap->count () != 0){ + $message[]= _("A person with the choosen name is already used in this tree."); + } + + /* Show error message / continue editing */ + if (count($message) > 0){ + show_errors ($message); + } else { + $attributes= array('sn' => $this->sn, 'givenName' => $this->givenName); + if (isset($this->config->current['IDGEN']) && + $this->config->current['IDGEN'] != ""){ + $uids= gen_uids ($this->config->current['IDGEN'], $attributes); + if (count($uids)){ + $smarty->assign("edit_uid", "false"); + $smarty->assign("uids", $uids); + $this->uid= current($uids); + } + } else { + $this->uid= ""; + } + $this->got_uid= true; + } + + foreach(array("sn", "givenName", "uid", "got_uid", "templates") as $attr){ + $smarty->assign("$attr", $this->$attr); + } + if (isset($_POST['template'])){ + $smarty->assign("template", $_POST['template']); + } + return($smarty->fetch(get_template_path('template.tpl', TRUE))); + } + + /* No template. Ok. Lets fill data into the normal user dialog */ + if (isset($_POST['template_continue']) && $_POST['template'] == 'none'){ + foreach(array("sn", "givenName", "uid") as $attr){ + if (isset($_POST[$attr])){ + $this->usertab->by_object['user']->$attr= $_POST[$attr]; + } + } + } + + /* Finish template preamble */ + if (isset($_POST['template_continue']) && $_POST['template'] != 'none' && (isset($_POST['uid']))){ + + /* Might not be filled if IDGEN is unset */ + $this->sn= $_POST['sn']; + $this->givenName= $_POST['givenName']; + + /* Move user supplied data to sub plugins */ + $this->uid= $_POST['uid']; + $this->usertab->uid= $this->uid; + $this->usertab->sn= $this->sn; + $this->usertab->givenName= $this->givenName; + $template_dn= $_POST['template']; + $this->usertab->adapt_from_template($template_dn); + $template_base= preg_replace("/^[^,]+,".get_people_ou()."/", '', $template_dn); + $this->usertab->by_object['user']->base= $template_base; + + /* Set up the users ACL's for this 'dn' */ + $acl= get_permissions ($template_base, $this->ui->subtreeACL); + $this->usertab->set_acl($acl); + } + + /* Show tab dialog if object is present */ + if ($this->usertab){ + $display= $this->usertab->execute(); + + /* Don't show buttons if tab dialog requests this */ + if (!$this->usertab->by_object[$this->usertab->current]->dialog){ + $display.= "

\n"; + $display.= "\n"; + $display.= " \n"; + $display.= "\n"; + $display.= "

"; + } + return ($display); + } + + $smarty= get_smarty(); + + /* Check sorting variable */ + if (!isset($this->usertab) && + !isset($_POST['new_user']) && + !isset($_POST['new_template']) && + !isset($_POST['delete_user']) && + !isset($_POST['setpass_user']) && + !isset($_POST['select_user'])){ + $this->reload(); + } + + /* Check for exeeded sizelimit */ + if (($message= check_sizelimit()) != ""){ + return($message); + } + + /* Show main page */ + $smarty->assign("userlist", $this->userlist); + $smarty->assign("search_image", get_template_path('images/search.png')); + $smarty->assign("tree_image", get_template_path('images/tree.png')); + $smarty->assign("infoimage", get_template_path('images/info.png')); + $smarty->assign("launchimage", get_template_path('images/launch.png')); + $smarty->assign("deplist", $this->config->idepartments); + foreach( array("depselect", "regex", "functionalusers", "unixusers", + "mailusers", "sambausers", "proxyusers", "ftpusers", + "faxusers", "templates", "subsearch") as $type){ + + $smarty->assign("$type", $userfilter[$type]); + } + + /* Extend if we are not using javascript */ + $smarty->assign("apply", apply_filter()); + $smarty->assign("alphabet", generate_alphabet()); + $smarty->assign("hint", print_sizelimit_warning()); + + return ($smarty->fetch(get_template_path('headpage.tpl', TRUE))); + } + + + function reload() + { + /* Get config */ + $userfilter= get_global('userfilter'); + + /* Set base for all searches */ + $base= $userfilter['depselect']; + + /* Regex filter? */ + if ($userfilter['regex'] != ""){ + $regex= $userfilter['regex']; + } else { + $regex= "*"; + } + + /* Set filter depending on selection */ + if ($this->config->current['SAMBAVERSION'] == 3){ + $samba= "sambaSamAccount"; + } else { + $samba= "sambaAccount"; + } + + $filter=""; + if ($userfilter['functionalusers'] == "checked"){ + $filter.= "(&(objectClass=gosaAccount)(!(|(objectClass=posixAccount)(objectClass=gosaMailAccount)(objectClass=PureFTPdUser)(objectClass=$samba)(objectClass=goFaxAccount)(objectClass=gosaProxyAccount))))"; + } + if ($userfilter['unixusers'] == "checked"){ + $filter.= "(objectClass=posixAccount)"; + } + if ($userfilter['mailusers'] == "checked"){ + $filter.= "(objectClass=gosaMailAccount)"; + } + if ($userfilter['sambausers'] == "checked"){ + $filter.= "(objectClass=$samba)"; + } + if ($userfilter['proxyusers'] == "checked"){ + $filter.= "(objectClass=gosaProxyAccount)"; + } + if ($userfilter['ftpusers'] == "checked"){ + $filter.= "(objectClass=PureFTPdUser)"; + } + if ($userfilter['faxusers'] == "checked"){ + $filter.= "(objectClass=goFaxAccount)"; + } + + if ($userfilter['templates'] == "checked"){ + $filter= "(|(objectClass=gosaUserTemplate)(&(objectClass=gosaAccount)(|$filter)))"; + } else { + $filter= "(&(objectClass=gosaAccount)(!(objectClass=gosaUserTemplate))(|$filter))"; + } + $filter= "(&(|(uid=$regex)(sn=$regex)(givenName=$regex))$filter)"; + + /* Generate userlist */ + $ldap= $this->config->get_ldap_link(TRUE); + if ($userfilter['subsearch'] == "checked"){ + $this->list= get_list($this->ui->subtreeACL, "$filter", TRUE, $base, array("uid", "givenName", "sn", "objectClass"), TRUE); + } else { + $base= get_people_ou().$base; + $this->list= get_list($this->ui->subtreeACL, "$filter", FALSE, $base, array("uid", "givenName", "sn", "objectClass"), TRUE); + } + + $this->userlist= array(); + + foreach ($this->list as $value){ + if (isset($value["uid"][0]) && !preg_match('/\$$/', $value["uid"][0])){ + if (in_array_ics('gosaUserTemplate', $value['objectClass'])){ + $this->userlist[$value["dn"]]= "* ".$value["uid"][0]." ("._("Template").")"; + continue; + } + if (isset($value["givenName"][0]) && isset($value["sn"][0])){ + $this->userlist[$value["dn"]]= $value["sn"][0].", ". + $value["givenName"][0]. + " [".$value["uid"][0]."]"; + } else { + $this->userlist[$value["dn"]]= "[".$value["uid"][0]."]"; + } + } + } + natcasesort ($this->userlist); + reset ($this->userlist); + } + + function remove_from_parent() + { + } + + + /* Check values */ + function check() + { + } + + + /* Save to LDAP */ + function save() + { + } + + function adapt_from_template($dn) + { + } + + function password_change_needed() + { + } + + function show_header($button_text, $text, $disabled= FALSE) + { + } + + function remove_lock() + { + if (isset($this->usertab->dn)){ + del_lock ($this->usertab->dn); + } + } + +} + +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/plugins/admin/users/headpage.tpl b/plugins/admin/users/headpage.tpl new file mode 100644 index 000000000..2a9f3639d --- /dev/null +++ b/plugins/admin/users/headpage.tpl @@ -0,0 +1,75 @@ + + + + + +
+
+

+ {t}List of users{/t} {$hint} +

+
+
+

+ +
+   +   +   +   + + +

+
+
+
+

[i]{t}Information{/t}

+
+
+

+ {t}This menu provides the functionality to create, edit or delete selected users. Having a great number of users, you may want to use the range seletors on top of the user list.{/t} +

+

+ {t}-Edit- and -New user- execute an assistant to aid you in managing your account informations. -Delete- will ask for confirmation before deleting the users from the LDAP server.{/t} +

+
+
+
+

[F]{t}Filters{/t}

+
+
+

+ + {$alphabet} +
+

+

+ {t}Show templates{/t}
+ {t}Show functional users{/t}
+ {t}Show unix users{/t}
+ {t}Show mail users{/t}
+ {t}Show samba users{/t}
+ {t}Show proxy users{/t}
+ {t}Show FTP users{/t}
+ {t}Show FAX users{/t}
+

+

+ {t}Search in subtrees{/t}
+

+

+ +
 {t}Display users of department{/t}
+

+

+ +
 {t}Display users matching{/t}
+

+ {$apply} +
+
+ + diff --git a/plugins/admin/users/main.inc b/plugins/admin/users/main.inc new file mode 100644 index 000000000..4b7dd0a0d --- /dev/null +++ b/plugins/admin/users/main.inc @@ -0,0 +1,63 @@ +remove_lock(); + del_lock ($ui->dn); + sess_del ('userManagement'); + } +} else { + /* Create usermanagement object on demand */ + if (!isset($_SESSION['userManagement']) || + (isset($_GET['reset']) && $_GET['reset'] == 1)){ + $_SESSION['userManagement']= new userManagement ($config, $_SESSION['ui']); + } + $userManagement= $_SESSION['userManagement']; + $output= $userManagement->execute(); + + /* Page header*/ + if (isset($_SESSION['objectinfo'])){ + $display= print_header(get_template_path('images/user.png'), + _("User administration"), + " ".$_SESSION['objectinfo']); + } else { + $display= print_header(get_template_path('images/user.png'), + _("User administration")); + } + + /* Generate dialog output */ + $display.= $output; + + /* Reset requested? */ + if (isset($_GET['reset']) && $_GET['reset'] == 1){ + del_lock ($ui->dn); + sess_del ('userManagement'); + } + + /* Show and save dialog */ + $_SESSION['userManagement']= $userManagement; +} + +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/plugins/admin/users/password.tpl b/plugins/admin/users/password.tpl new file mode 100644 index 000000000..1638f98bc --- /dev/null +++ b/plugins/admin/users/password.tpl @@ -0,0 +1,32 @@ +

+ {t}To change the user password use the fields below. The changes take effect immediately. Please memorize the new password, because the user would't be able to login without it.{/t} +

+ +

+ {t}Changing the password impinges on your authentification on mail, proxy, samba and unix services.{/t} +

+ + + + + + + + + + +
{t}New password{/t}
{t}Repeat new password{/t}
+
+

+ +   + +

+ + + diff --git a/plugins/admin/users/remove.tpl b/plugins/admin/users/remove.tpl new file mode 100644 index 000000000..16177a3c3 --- /dev/null +++ b/plugins/admin/users/remove.tpl @@ -0,0 +1,19 @@ +
+  {t}Warning{/t} +
+ +

+ {$info} + {t}This includes all account data, system access rules, imap settings, etc. for this user. Please double check if your really want to do this since there is no way for GOsa to get your data back.{/t} +

+ +

+ {t}So - if you're sure - press Delete to continue or Cancel to abort.{/t} +

+ +

+ +   + +

+ diff --git a/plugins/admin/users/tabs_user.inc b/plugins/admin/users/tabs_user.inc new file mode 100644 index 000000000..451d9f973 --- /dev/null +++ b/plugins/admin/users/tabs_user.inc @@ -0,0 +1,116 @@ +base= $this->by_object['user']->base; + } + + function save_object($save_current= FALSE) + { + tabs::save_object($save_current); + + /* Update reference, transfer variables */ + $baseobject= $this->by_object['user']; + foreach ($this->by_object as $name => $obj){ + + /* Don't touch base object */ + if ($name != 'user'){ + $obj->parent= &$this; + $obj->uid= $baseobject->uid; + $obj->sn= $baseobject->uid; + $obj->givenName= $baseobject->uid; + $this->by_object[$name]= $obj; + } + + /* Update parent in base object */ + $this->by_object['user']->parent= &$this; + } + + /* Move facsimile / phone number if nessecary */ + if ($this->last == "user" && isset($this->by_object['gofaxAccount'])){ + + /* Move number to fax plugin */ + $this->by_object['gofaxAccount']->facsimileTelephoneNumber= + $this->by_object['user']->facsimileTelephoneNumber; + + /* Move phone number if plugin exists */ + if (isset($this->by_object['phoneAccount']) && + !$this->by_object['phoneAccount']->is_account){ + $this->by_object['phoneAccount']->phoneNumbers= array(); + if ($this->by_object['user']->telephoneNumber != ""){ + $this->by_object['phoneAccount']->phoneNumbers[$this->by_object['user']->telephoneNumber]= $this->by_object['user']->telephoneNumber; + } + } + } + if ($this->last == "gofaxAccount"){ + + /* Move number from fax plugin */ + $this->by_object['user']->facsimileTelephoneNumber= + $this->by_object['gofaxAccount']->facsimileTelephoneNumber; + } + if ($this->last == "phoneAccount" && $this->by_object['phoneAccount']->is_account){ + /* Move number from fax plugin */ + reset($this->by_object['phoneAccount']->phoneNumbers); + $number= key($this->by_object['phoneAccount']->phoneNumbers); + $this->by_object['user']->telephoneNumber= $number; + } + } + + function save() + { + /* Check for new 'dn', in order to propagate the + 'dn' to all plugins */ + $baseobject= $this->by_object['user']; + if ($this->dn == 'new'){ + $baseobject->cn= $baseobject->givenName." ".$baseobject->sn; + $this->by_object['user']= $baseobject; + if (isset($this->config->current['DNMODE']) && $this->config->current['DNMODE'] == "uid"){ + $this->dn= 'uid='.$baseobject->uid.','.get_people_ou().$baseobject->base; + } else { + $this->dn= 'cn='.$baseobject->cn.','.get_people_ou().$baseobject->base; + } + } // != 'new' + else + { + /* Extract cn and compare with actual cn present in 'dn' */ + if (isset($this->config->current['DNMODE']) && $this->config->current['DNMODE'] == "uid"){ + $new_dn= 'uid='.$baseobject->uid.','.get_people_ou().$baseobject->base; + } else { + $new_dn= "cn=".$baseobject->givenName." ".$baseobject->sn.','. + get_people_ou().$baseobject->base; + } + + if ($this->dn != $new_dn){ + + /* Write entry on new 'dn' */ + $baseobject->cn= $baseobject->givenName." ".$baseobject->sn; + $baseobject->move($this->dn, $new_dn); + $this->by_object['user']= $baseobject; + + /* Did we change ourselves? Update ui object. */ + change_ui_dn($this->dn, $new_dn); + + /* Happen to use the new one */ + $this->dn= $new_dn; + } + } + return tabs::save(); + } + + + function set_template_mode() + { + foreach ($this->by_object as $key => $obj){ + $this->by_object[$key]->is_template= TRUE; + } + } + +} + +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/plugins/admin/users/template.tpl b/plugins/admin/users/template.tpl new file mode 100644 index 000000000..229bf3ac8 --- /dev/null +++ b/plugins/admin/users/template.tpl @@ -0,0 +1,58 @@ +
+ {t}Creating a new user using templates{/t} +
+ +

+ {t}Creating a new user can be assisted by using templates. Many database records will be filled automatically. Choose none to skip the usage of templates.{/t} +

+ + + + + + + + + + + + + + + + {if $got_uid eq "true"} + + + + + {/if} + +
{t}Template{/t} + +
{t}Name{/t}
{t}Given name{/t}
{t}Login{/t} + {if $edit_uid eq "false"} + + {else} + + {/if} +
+ +
+

+ +   + +

+ + + + + diff --git a/plugins/generic/references/class_reference.inc b/plugins/generic/references/class_reference.inc new file mode 100644 index 000000000..643076dc3 --- /dev/null +++ b/plugins/generic/references/class_reference.inc @@ -0,0 +1,164 @@ +config= $config; + $this->dn= $dn; + + /* Fill translation array */ + $this->obtypes= array( "gosaAccount" => array( "text" => _("Generic"), + "image" => "penguin.png"), + "posixAccount" => array( "text" =>_("UNIX"), + "image" => "select_user.png"), + "gosaMailAccount" => array("text" => _("Mail"), + "image" => "mailto.png"), + "sambaSamAccount" => array("text" => _("Samba"), + "image" => "select_winstation.png"), + "sambaAccount" => array( "text" => _("Samba"), + "image" => "select_winstation.png"), + "goFaxAccount" => array( "text" => _("FAX"), + "image" => "fax_small.png"), + "gosaProxyAccount" => array("text" => _("Proxy"), + "image" => "select_proxy.png"), + "PureFTPdUser" => array( "text" => _("FTP"), + "image" => "select_proxy.png"), + "posixGroup" => array( "text" => _("Group"), + "image" => "select_groups.png"), + "gosaDepartment" => array( "text" => _("Department"), + "image" => "select_department.png"), + "goFonHardware" => array( "text" => _("Phone"), + "image" => "select_phone.png"), + "gosaApplication" => array("text" => _("Application"), + "image" => "select_application.png"), + "goServer" => array( "text" => _("Server"), + "image" => "select_server.png"), + "gotoTerminal" => array( "text" => _("Thin Client"), + "image" => "select_terminal.png"), + "gotoWorkstation" => array("text" => _("Workstation"), + "image" => "select_workstation.png"), + "gosaGroupOfNames" => array("text" => _("Object group"), + "image" => "select_ogroup.png"), + "gotoPrinter" => array( "text" => _("Printer"), + "image" => "select_printer.png")); + } + + function execute() + { + /* Set government mode */ + $smarty= get_smarty(); + + if (isset($_GET['show'])){ + $dn= base64_decode($_GET['show']); + if (isset($this->fold["$dn"])){ + unset($this->fold["$dn"]); + } else { + $this->fold["$dn"]= "$dn"; + } + } + + /* Fill array */ + $this->reload(); + $smarty->assign("objectList", $this->objectlist); + + /* Show main page */ + return ($smarty->fetch (get_template_path('contents.tpl', TRUE, dirname(__FILE__)))); + } + + function reload() + { + $ldap= $this->config->get_ldap_link(); + $ldap->cd($this->config->current['BASE']); + $ldap->search("(|(member=".$this->dn.")(memberUid=".$this->uid."))"); + + $cycle= array("F5F5F5", "ECECEC"); + $id= 0; + $this->objectlist= ""; + while ($attrs= $ldap->fetch()){ + + /* Add more information? */ + $addon= ""; + if (in_array($attrs['dn'], $this->fold)){ + $memberattr= ""; + if (isset($attrs['memberUid'])){ + unset($attrs['memberUid']['count']); + $memberattr= "memberUid"; + } + if (isset($attrs['member'])){ + unset($attrs['member']['count']); + $memberattr= "member"; + } + if ($memberattr == ""){ + continue; + } + foreach ($attrs[$memberattr] as $uid){ + $content= $this->getCacheObject($uid); + $addon.= '   '.$content['name'].''.$content['description'].''.$content['type'].' '; + } + } + + /* Build final entry */ + if (isset($attrs['description'])){ + $description= $attrs['description'][0]; + } else { + $description= "-"; + } + $content= $this->createContentString($attrs['objectClass']); + if ($addon == ""){ + $img= "images/expand.png"; + } else { + $img= "images/sort_down.png"; + } + $this->objectlist.= ' '.$attrs['cn'][0].''.$description.''.$content.' '.$addon; + + $id++; + } + + } + + function getCacheObject($dn) + { + if (!isset($this->objectCache[$dn])){ + $ldap= $this->config->get_ldap_link(); + if (preg_match('/,/', $dn)){ + $ldap->cat($dn, array("cn", "objectClass", "description")); + } else { + $ldap->search("(uid=$dn)", array("cn", "objectClass", "description")); + } + $attrs= $ldap->fetch(); + if (isset($attrs['description'])){ + $description= $attrs['description'][0]; + } else { + $description= "-"; + } + $this->objectCache[$dn]= array( 'name' => $attrs['cn'][0], + 'description' => "$description", + 'type' => $this->createContentString($attrs['objectClass'])); + } + return ($this->objectCache[$dn]); + } + + function createContentString($classes) + { + $result= ""; + foreach ($classes as $class){ + if (isset($this->obtypes[$class])){ + $result.= " ".$this->obtypes[$class]['text']." "; + } + } + return (preg_replace('/ $/', '', $result)); + } + +} + +?> diff --git a/plugins/generic/references/contents.tpl b/plugins/generic/references/contents.tpl new file mode 100644 index 000000000..72cf5b33d --- /dev/null +++ b/plugins/generic/references/contents.tpl @@ -0,0 +1,19 @@ +{if $objectList ne ""} + + + + + + + + + + + + + {$objectList} + +
{t}Object name{/t}{t}Description{/t}Contents
+{else} +{t}This object has no relationship to other objects.{/t} +{/if} diff --git a/plugins/generic/welcome/main.inc b/plugins/generic/welcome/main.inc new file mode 100644 index 000000000..c0c5f2675 --- /dev/null +++ b/plugins/generic/welcome/main.inc @@ -0,0 +1,29 @@ +assign("iconmenu", $plist->show_iconmenu()); + $smarty->assign("header", print_header(get_template_path('images/hdd_linux_unmount.png'), sprintf(_("Welcome %s!"), $ui->cn))); + $smarty->assign("year", date("Y")); + $display= $smarty->fetch(get_template_path('welcome.tpl', TRUE)); +} + +?> diff --git a/plugins/generic/welcome/welcome.tpl b/plugins/generic/welcome/welcome.tpl new file mode 100644 index 000000000..a4d61173e --- /dev/null +++ b/plugins/generic/welcome/welcome.tpl @@ -0,0 +1,18 @@ +{$header} + +

+ {t}This is the GOsa main screen. You can select your tasks from the menu on the left, or by choosing one of the pictogramms below. All changes apply directly to your companies LDAP-Server.{/t} +

+ +

+ {t}Use Sign out on the upper left to close the connection and Main to get back to the pictogram view.{/t} +

+ +{$iconmenu} + +
+ +
© 2002-{$year} {t}The GOsa team{/t} +
+ + diff --git a/plugins/gofax/blocklists/class_blocklistManagement.inc b/plugins/gofax/blocklists/class_blocklistManagement.inc new file mode 100644 index 000000000..3056fb6af --- /dev/null +++ b/plugins/gofax/blocklists/class_blocklistManagement.inc @@ -0,0 +1,443 @@ + "Eins ist toll", "zwei" => "Zwei ist noch besser"); + + /* blocklist attributes */ + var $cn= ""; + var $description= ""; + var $type= ""; + var $goFaxBlocklist= array(); + var $base= ""; + + /* Headpage attributes */ + var $blocklists= array(); + + /* attribute list for save action */ + var $attributes= array("cn", "description"); + var $objectclasses= array(); + + function blocklist ($config, $ui) + { + $this->ui= $ui; + $this->dn= ""; + $this->config= $config; + + /* Get global filter config */ + if (!is_global("blockfilter")){ + $ui= get_userinfo(); + $base= get_base_from_people($ui->dn); + $blockfilter= array("sendlists" => "checked", + "receivelists" => "checked", + "entry" => "*", + "depselect" => $base, + "regex" => "*"); + register_global("blockfilter", $blockfilter); + } + + } + + function execute() + { + /* Get global smarty instance */ + $smarty= get_smarty(); + + /* Save data */ + $blockfilter= get_global("blockfilter"); + foreach( array("depselect", "entry", "regex") as $type){ + if (isset($_POST[$type])){ + $blockfilter[$type]= $_POST[$type]; + } + } + if (isset($_POST['depselect'])){ + foreach( array("sendlists", "receivelists") as $type){ + + if (isset($_POST[$type])) { + $blockfilter[$type]= "checked"; + } else { + $blockfilter[$type]= ""; + } + } + } + if (isset($_GET['search'])){ + $s= mb_substr($_GET['search'], 0, 1, "UTF8")."*"; + if ($s == "**"){ + $s= "*"; + } + $blockfilter['regex']= $s; + } + register_global("blockfilter", $blockfilter); + + /* Create new blocklist? */ + if (isset($_POST['new_blocklist'])){ + $this->clear_fields(); + $this->acl= "#all#"; + $this->dn= "new"; + plugin::plugin ($this->config, $this->dn); + } + + /* Edit selected blocklist? */ + if ((isset($_POST['select_blocklist']) || (isset($_POST['edit_helper']) && $_POST['edit_helper'] == "1")) && isset($_POST['blocklist']) != ""){ + $this->clear_fields(); + $this->dn= trim($_POST['blocklist']); + $this->acl= get_permissions ($this->dn, $this->ui->subtreeACL); + $this->acl= get_module_permission($this->acl, "blocklists", $this->dn); + plugin::plugin ($this->config, $this->dn); + + /* Load missing lists */ + if (isset($this->attrs["goFaxSBlocklist"])){ + for ($i= 0; $i<$this->attrs["goFaxSBlocklist"]["count"]; $i++){ + $this->goFaxBlocklist[]= $this->attrs["goFaxSBlocklist"][$i]; + } + $this->type= 0; + } elseif (isset($this->attrs["goFaxRBlocklist"])){ + for ($i= 0; $i<$this->attrs["goFaxRBlocklist"]["count"]; $i++){ + $this->goFaxBlocklist[]= $this->attrs["goFaxRBlocklist"][$i]; + } + $this->type= 1; + } + $_SESSION['objectinfo']= trim($this->dn); + } + + /* Delete blocklist requested */ + if (isset($_POST['delete_blocklist']) && isset($_POST['blocklist'])){ + $this->dn= trim($_POST['blocklist']); + + /* Check locking */ + if (($user= get_lock($this->dn)) != ""){ + $_SESSION['dn']= $this->dn; + return(gen_locked_message($user, $this->dn)); + } else { + # Lock this dn for editing + add_lock ($this->dn, $this->ui->dn); + + $smarty->assign("info", sprintf(_("You're about to delete the blocklist '%s'."), $this->dn)); + return($smarty->fetch(get_template_path('remove.tpl', TRUE))); + } + } + + /* Finally delete blocklist */ + if (isset($_POST['delete_blocklist_confirm'])){ + $acl= get_permissions ($this->dn, $this->ui->subtreeACL); + $acl= get_module_permission($acl, "blocklists", $this->dn); + if (chkacl($acl, "all") == ""){ + $this->remove_from_parent(); + gosa_log ("Blocklist object'".$this->dn."' has been removed"); + $this->reload (); + } else { + print_red (_("You have no permission to remove this blocklist.")); + } + } + + /* Cancel dialog */ + if (isset($_POST['edit_cancel']) || isset($_POST['delete_blocklist_cancel']) || + isset($_POST['delete_blocklist_confirm']) || isset($_POST['delete_lock'])){ + + del_lock ($this->dn); + $this->clear_fields(); + unset($_SESSION['objectinfo']); + } + + /* Handle interactions: add */ + if (isset($_POST['add_number']) && $_POST['number'] != ""){ + if (is_phone_nr($_POST['number'])){ + $this->addNumber ($_POST['number']); + } else { + print_red (_("Please specify a valid phone number.")); + } + } + + /* Handle interactions: delete */ + if (isset($_POST['delete_number']) && count($_POST['numbers']) > 0){ + $this->delNumber ($_POST['numbers']); + } + + /* What about finish? */ + if (isset($_POST['edit_finish'])){ + $message= $this->check(); + + /* No errors, save object */ + if (count ($message) == 0){ + + /* Perpare 'dn' in case of new entries */ + if ($this->dn == "new"){ + $this->dn= "cn=$this->cn,ou=gofax,ou=systems,".$this->base; + } + + $this->save (); + gosa_log ("Blocklist object'".$this->dn."' has been saved"); + $this->acl= "#none#"; + $this->dn= ""; + del_lock ($this->ui->dn); + unset($_SESSION['objectinfo']); + } else { + /* Errors found, show message */ + show_errors ($message); + } + } + + /* Headpage or normal plugin screen? */ + if ($this->dn == ""){ + /* Check sorting variable */ + $this->reload(); + + /* Check for exeeded sizelimit */ + if (($message= check_sizelimit()) != ""){ + return($message); + } + + /* Show main page */ + $smarty->assign("blocklists", $this->blocklists); + $smarty->assign("search_image", get_template_path('images/search.png')); + $smarty->assign("tree_image", get_template_path('images/tree.png')); + $smarty->assign("infoimage", get_template_path('images/info.png')); + $smarty->assign("launchimage", get_template_path('images/launch.png')); + $smarty->assign("apply", apply_filter()); + foreach( array("depselect", "entry", "regex", "sendlists", "receivelists") as $type){ + $smarty->assign("$type", $blockfilter[$type]); + } + $smarty->assign("deplist", $this->config->idepartments); + $smarty->assign("alphabet", generate_alphabet()); + $smarty->assign("hint", print_sizelimit_warning()); + + return($smarty->fetch(get_template_path('headpage.tpl', TRUE))); + } + + /* Set base */ + if ($this->base == ""){ + if ($this->dn == "new"){ + $ui= get_userinfo(); + $this->base= dn2base($ui->dn); + } else { + $this->base= preg_replace ("/^[^,]+,[^,]+,[^,]+,/", "", $this->dn); + } + } + + /* Fill templating stuff */ + $smarty->assign("bases", $this->config->idepartments); + $smarty->assign("base_select", $this->base); + $smarty->assign("types", array(0 => _("send"), 1 => _("receive"))); + if ($this->dn == "new" || preg_match ("/,ou=incoming,/", $this->dn)){ + $smarty->assign("selectmode", ""); + $smarty->assign("mode", ""); + } else { + $smarty->assign("selectmode", "disabled"); + $smarty->assign("mode", "readonly"); + } + foreach(array("cn", "description", "type", "goFaxBlocklist") as $val){ + $smarty->assign("$val", $this->$val); + $smarty->assign("$val"."ACL", chkacl($this->acl, "$val")); + } + + /* Show main page */ + return($smarty->fetch (get_template_path('generic.tpl', TRUE))); + } + + function clear_fields() + { + $this->dn= ""; + $this->description= ""; + $this->cn= ""; + $this->base= ""; + $this->goFaxBlocklist= array(); + $this->acl= "#none#"; + } + + function reload() + { + /* Get config */ + $blockfilter= get_global('blockfilter'); + + /* Set base for all searches */ + $base= $blockfilter['depselect']; + $filter= ""; + + /* Regex filter? */ + if ($blockfilter['regex'] != ""){ + $regex= $blockfilter['regex']; + } else { + $regex= "*"; + } + + /* Entry filter? */ + /* Get list of blocklists to be shown */ + if ($blockfilter['sendlists'] == "checked"){ + $filter.= "(objectClass=goFaxSBlock)"; + } + if ($blockfilter['receivelists'] == "checked"){ + $filter.= "(objectClass=goFaxRBlock)"; + } + if ($filter != ""){ + $filter= "(|$filter)"; + } + + if ($blockfilter['entry'] != "" && $blockfilter['entry'] != "*"){ + $filter.= "(|(goFaxSBlocklist=".$blockfilter['entry'].")(goFaxRBlocklist=".$blockfilter['entry']."))"; + } + + /* Generate blocklists */ + $res= get_list($this->ui->subtreeACL, "(&(cn=$regex)$filter)", TRUE, $base, array("cn", "description")); + + $this->blocklists= array(); + foreach ($res as $value){ + + /* Unwanted? */ + $this->blocklists[$value["dn"]]= $value["cn"][0]; + if (isset($value["description"][0])){ + $this->blocklists[$value["dn"]]= $value["cn"][0]." (". + $value["description"][0].")"; + } + } + natcasesort ($this->blocklists); + reset ($this->blocklists); + } + + function remove_from_parent() + { + $ldap= $this->config->get_ldap_link(); + $ldap->rmDir($this->dn); + $this->handle_post_events("remove"); + } + + + /* Save data to object */ + function save_object() + { + plugin::save_object(); + + /* Save type, needed to detect objectClass */ + if (isset($_POST['type']) && chkacl($this->acl, "cn") == ""){ + $this->type= $_POST['type']; + } + + /* Save base, since this is no LDAP attribute */ + if (isset($_POST['base']) && chkacl($this->acl, "create") == ""){ + $this->base= $_POST['base']; + } + } + + + /* Check values */ + function check() + { + $message= array(); + + /* Permissions for that base? */ + if ($this->base != ""){ + $new_dn= "cn=".$this->cn.",ou=gofax,ou=systems,".$this->base; + } else { + $new_dn= $this->dn; + } + + $ui= get_userinfo(); + $acl= get_permissions ($new_dn, $ui->subtreeACL); + $acl= get_module_permission($acl, "blocklist", $new_dn); + if (chkacl($acl, "create") != ""){ + $message[]= _("You have no permissions to create a blocklist on this 'Base'."); + } + + + /* check syntax: must cn */ + if ($this->cn == ""){ + $message[]= _("Required field 'Name' is not set."); + } else { + if (!is_uid($this->cn)){ + $message[]= _("Required field 'Name' contains invalid characters"); + } + if ($this->dn == 'new'){ + $ldap= $this->config->get_ldap_link(); + $ldap->cd ("ou=gofax,ou=systems,".$this->config->current["BASE"]); + $ldap->search ("(&(|(objectClass=goFaxSBlock)(objectClass=goFaxRBlock))". + "(cn=".$this->cn."))", array("cn")); + if ($ldap->count() != 0){ + $message[]= _("Specified name is already used."); + } + } + } + + /* Is user allowed to create in 'base'? */ + if (chkacl($this->acl, "create") != ""){ + $message[]= _("No permission to create a blocklist on this base."); + } + + return $message; + } + + + /* Save to LDAP */ + function save() + { + plugin::save(); + + /* Type selection */ + if ($this->type == 0){ + $type= "goFaxSBlock"; + } else { + $type= "goFaxRBlock"; + } + + /* Add list */ + $this->attrs['objectClass']= $type; + if (count($this->goFaxBlocklist)){ + $this->attrs["$type"."list"]= $this->goFaxBlocklist; + } + + /* Write back to ldap */ + $ldap= $this->config->get_ldap_link(); + $ldap->cd($ldap->getParentDir($this->dn)); + $ldap->search("cn=$this->cn"); + $a= $ldap->fetch(); + if (count($a)){ + if (!isset($this->attrs["$type"."list"])){ + $this->attrs["$type"."list"]= array(); + } + $ldap->cd($this->dn); + $ldap->modify($this->attrs); + $this->handle_post_events("modify"); + } else { + $ldap->cd($this->config->current['BASE']); + $ldap->create_missing_trees(preg_replace('/^[^,]+,/', '', $this->dn)); + $ldap->cd($this->dn); + $ldap->add($this->attrs); + $this->handle_post_events("add"); + } + show_ldap_error($ldap->get_error()); + } + + + function addNumber($number) + { + if (!in_array($number, $this->goFaxBlocklist)){ + $this->goFaxBlocklist[]= $number; + sort($this->goFaxBlocklist); + } + } + + function delNumber($numbers) + { + $tmp= array(); + foreach ($this->goFaxBlocklist as $val){ + if (!in_array($val, $numbers)){ + $tmp[]= $val; + } + } + $this->goFaxBlocklist= $tmp; + } + + function remove_lock() + { + if (isset($this->dn)){ + del_lock ($this->dn); + } + } + +} + +?> diff --git a/plugins/gofax/blocklists/generic.tpl b/plugins/gofax/blocklists/generic.tpl new file mode 100644 index 000000000..17bea618e --- /dev/null +++ b/plugins/gofax/blocklists/generic.tpl @@ -0,0 +1,84 @@ +

{t}Generic{/t}

+ + + + + + + + + +
+ + + + + + + + + +
{t}List name{/t}{$must} + +
{t}Base{/t}{$must} + +
+
+   + + + + + + + + + + +
{t}Type{/t} + +
{t}Description{/t} + +
+
+ +

 

+ + + + + + +
+

{t}Blocked numbers{/t}

+ +
+   +   + +
+

{t}Information{/t}

+

+ {t}Numbers can also contain wild cards.{/t} +

+
+ + +

+ +   + +

+ + + diff --git a/plugins/gofax/blocklists/headpage.tpl b/plugins/gofax/blocklists/headpage.tpl new file mode 100644 index 000000000..5af96e4e3 --- /dev/null +++ b/plugins/gofax/blocklists/headpage.tpl @@ -0,0 +1,68 @@ + + + + + +
+
+

+ {t}List of blocklists{/t} {$hint} +

+
+
+

+ +
+   +   + + +

+
+
+
+

[i]{t}Information{/t}

+
+
+

+ {t}This menu allows to create, delete and edit selected blocklists. Having a large size of lists, you might prefer the range selectors on top of the select box.{/t} +

+

+ {t}-Edit- and -New blocklist- will provide an assistant to aid you when performing changes on your blocklist. -Delete- will ask you for confirmation before really deleting anything.{/t} +

+
+
+
+

[F]{t}Filters{/t}

+
+
+

+ + {$alphabet} +
+

+

+ {t}Show send blocklists{/t}
+ {t}Show receive blocklists{/t}
+

+

+ +
 {t}Display lists of department{/t}
+

+

+ +
 {t}Display lists matching{/t}
+

+

+ +
 {t}Display lists containing{/t}
+

+ {$apply} +
+
+ + diff --git a/plugins/gofax/blocklists/main.inc b/plugins/gofax/blocklists/main.inc new file mode 100644 index 000000000..63d51bb7c --- /dev/null +++ b/plugins/gofax/blocklists/main.inc @@ -0,0 +1,35 @@ +remove_lock(); + del_lock ($ui->dn); + sess_del ('blocklist'); + } +} else { + /* Create blocklist object on demand */ + if (!isset($_SESSION['blocklist']) || (isset($_GET['reset']) && $_GET['reset'] == 1)){ + $_SESSION['blocklist']= new blocklist($config, $ui); + } + $blocklist= $_SESSION['blocklist']; + $blocklist->save_object(); + $output= $blocklist->execute(); + + /* Page header*/ + if (isset($_SESSION['objectinfo'])){ + $display= print_header(get_template_path('images/blocklists.png'), _("Blocklist management"), " ".$_SESSION['objectinfo']); + } else { + $display= print_header(get_template_path('images/blocklists.png'), _("Blocklist management")); + } + + /* Reset requested? */ + if (isset($_GET['reset']) && $_GET['reset'] == 1){ + del_lock ($ui->dn); + sess_del ('blocklist'); + } + + /* Show and save dialog */ + $display.= $output; + $_SESSION['blocklist']= $blocklist; +} +?> diff --git a/plugins/gofax/blocklists/remove.tpl b/plugins/gofax/blocklists/remove.tpl new file mode 100644 index 000000000..6e05dcb5b --- /dev/null +++ b/plugins/gofax/blocklists/remove.tpl @@ -0,0 +1,19 @@ +
+  {t}Warning{/t} +
+ +

+ {$info} + {t}Please double check if your really want to do this since there is no way for GOsa to get your data back.{/t} +

+ +

+ {t}So - if you're sure - press Delete to continue or Cancel to abort.{/t} +

+ +

+ +   + +

+ diff --git a/plugins/gofax/faxaccount/class_gofaxAccount.inc b/plugins/gofax/faxaccount/class_gofaxAccount.inc new file mode 100644 index 000000000..7a2296292 --- /dev/null +++ b/plugins/gofax/faxaccount/class_gofaxAccount.inc @@ -0,0 +1,604 @@ + "Eins ist toll", "zwei" => "Zwei ist noch besser"); + + /* Fax attributes */ + var $goFaxDeliveryMode= ""; + var $facsimileTelephoneNumber= ""; + var $goFaxIsEnabled= 1; + var $goFaxPrinter= ""; + var $goFaxDivertNumber= ""; + var $goFaxLanguage= ""; + var $goFaxFormat= ""; + var $goFaxRBlocklist = array(); + var $goFaxRBlockgroups= array(); + var $goFaxSBlocklist= array(); + var $goFaxSBlockgroups= array(); + var $mail= ""; + var $facsimileAlternateTelephoneNumber= array(); + + /* Internal variables */ + var $printerList= array(); + var $has_mailAccount= FALSE; + var $locals_dialog= FALSE; + var $in_blocklist_dialog= FALSE; + var $out_blocklist_dialog= FALSE; + var $current_blocklist= array(); + + /* attribute list for save action */ + var $attributes= array("goFaxDeliveryMode", "goFaxIsEnabled", + "goFaxPrinter", "goFaxDivertNumber", "goFaxLanguage", "goFaxFormat", "mail"); + var $objectclasses= array("goFaxAccount"); + + function gofaxAccount ($config, $dn= NULL) + { + /* General initialization */ + plugin::plugin ($config, $dn); + + if ($dn != "new"){ + /* Get arrays */ + foreach (array("goFaxRBlocklist", "goFaxRBlockgroups", "goFaxSBlocklist", + "goFaxSBlockgroups", "facsimileAlternateTelephoneNumber") as $val){ + + if (isset($this->attrs["$val"]["count"])){ + for ($i= 0; $i<$this->attrs["$val"]["count"]; $i++){ + array_push($this->$val, $this->attrs["$val"][$i]); + } + } + } + + /* Set up has_mailAccount */ + if (in_array("gosaMailAccount", $this->attrs['objectClass'])){ + $this->has_mailAccount= TRUE; + } + if (isset($this->attrs["facsimileTelephoneNumber"][0])){ + $this->facsimileTelephoneNumber= $this->attrs["facsimileTelephoneNumber"][0]; + } + } + + /* Load printer list */ + if (isset($this->config->data['SERVERS']['CUPS'])){ + $this->printerList= get_printer_list ($this->config->data['SERVERS']['CUPS']); + asort ($this->printerList); + } + + /* Get global filter config */ + if (!is_global("faxfilter")){ + $ui= get_userinfo(); + $base= get_base_from_people($ui->dn); + $faxfilter= array( "depselect" => $base, + "fuser" => "*", + "regex" => ""); + register_global("faxfilter", $faxfilter); + } + } + + function execute() + { + /* Load smarty stuff */ + $smarty= get_smarty(); + + /* Check if mail account is active. We'll display an additional + mail address field if this is not the case. Some people may + want goFax, but have a mailserver which is not managed with + GOsa */ + if (!@isset($this->parent->by_object['mailAccount'])) { + $smarty->assign("has_mailaccount", $this->has_mailAccount?"true":"false"); + } elseif ( !$this->parent->by_object['mailAccount']->is_account){ + $smarty->assign("has_mailaccount", "false"); + $this->has_mailAccount= false; + } + + /* Do we need to flip is_account state? */ + if (isset($_POST['modify_state'])){ + $this->is_account= !$this->is_account; + } + + /* Do we represent a valid account? */ + if (!$this->is_account && $this->parent == NULL){ + $display= " ". + _("This account has no fax extensions.").""; + $display.= back_to_main(); + return ($display); + } + + /* Show tab dialog headers */ + $display= ""; + if ($this->parent != NULL){ + if ($this->is_account){ + $display= $this->show_header(_("Remove fax account"), + _("This account has fax features enabled. You can disable them by clicking below.")); + } else { + $display= $this->show_header(_("Create fax account"), + _("This account has fax features disabled. You can enable them by clicking below.")); + return ($display); + } + } + + /* Trigger Add local fax alternatives dialog */ + if (isset($_POST['add_local_alternate'])){ + $this->locals_dialog= TRUE; + $this->dialog= TRUE; + } + + /* Add alternatives from dialog */ + if (isset($_POST['add_locals_finish'])){ + if (isset($_POST['local_list']) && + chkacl ($this->acl, "facsimileAlternateTelephoneNumber") == ""){ + + foreach ($_POST['local_list'] as $val){ + $this->addAlternate($val); + $this->is_modified= TRUE; + } + } + } + + /* Add alternatives */ + if (isset($_POST['add_alternate'])){ + if ($_POST['forward_address'] != "" && + is_phone_nr($_POST['forward_address']) && + chkacl ($this->acl, "facsimileAlternateTelephoneNumber") == ""){ + + $this->addAlternate($_POST['forward_address']); + } + } + + /* Delete alternate fax number */ + if (isset($_POST['delete_alternate'])){ + if (isset($_POST['alternate_list']) && count($_POST['alternate_list']) && + chkacl ($this->acl, "facsimileAlternateTelephoneNumber") == ""){ + + $this->delAlternate ($_POST['alternate_list']); + } + } + + + /* Edit incoming blocklists */ + if (isset($_POST['edit_incoming'])){ + $this->current_blocklist= array_merge($this->goFaxRBlocklist, + $this->goFaxRBlockgroups); + sort($this->current_blocklist); + reset($this->current_blocklist); + + $this->in_blocklist_dialog= TRUE; + $this->dialog= TRUE; + } + + /* Edit outgoing blocklists */ + if (isset($_POST['edit_outgoing'])){ + $this->current_blocklist= array_merge($this->goFaxSBlocklist, + $this->goFaxSBlockgroups); + sort($this->current_blocklist); + reset($this->current_blocklist); + + $this->out_blocklist_dialog= TRUE; + $this->dialog= TRUE; + } + + /* Add number to blocklist (dialog) */ + if (isset($_POST['add_blocklist_number']) && $_POST['block_number'] != ""){ + if (!is_phone_nr($_POST['block_number'])){ + print_red (_("You're trying to add an invalid phone number.")); + } else { + array_push($this->current_blocklist, $_POST['block_number']); + $this->current_blocklist= array_unique($this->current_blocklist); + sort($this->current_blocklist); + reset($this->current_blocklist); + } + } + + /* Add list to blocklist */ + if (isset($_POST['add_blocklist']) && isset($_POST['predefined_list'])){ + $this->current_blocklist= array_merge($this->current_blocklist, + $_POST['predefined_list']); + $this->current_blocklist= array_unique($this->current_blocklist); + sort($this->current_blocklist); + reset($this->current_blocklist); + } + + /* Delete from blocklist */ + if (isset($_POST['delete_blocklist_number']) && isset($_POST['block_list'])){ + $tmp= array(); + foreach($this->current_blocklist as $val){ + if (!in_array($val, $_POST['block_list'])){ + $tmp[]= $val; + } + } + $this->current_blocklist= $tmp; + } + + /* Blocklist edit finished */ + if (isset($_POST['edit_blocklists_finish'])){ + + /* Incoming or outgoing? */ + if ($this->in_blocklist_dialog){ + $destlist="goFaxRBlocklist"; + $destgroup="goFaxRBlockgroups"; + } else { + $destlist="goFaxSBlocklist"; + $destgroup="goFaxSBlockgroups"; + } + + /* Transfer values to ourself */ + $this->$destlist= array(); + $this->$destgroup= array(); + + foreach ($this->current_blocklist as $val){ + if (is_phone_nr($val)){ + array_push($this->$destlist, $val); + } else { + array_push($this->$destgroups, $val); + } + } + + $this->is_modified= TRUE; + } + + /* Set departments */ + if ($this->locals_dialog || + $this->in_blocklist_dialog || + $this->out_blocklist_dialog){ + + $list= array (); + $ldap= $this->config->get_ldap_link(); + if (isset ($_POST['department'])){ + $ldap->cd ($_POST['department']); + } else { + $ldap->cd ($this->config->current['BASE']); + } + } + + /* Cancel dialogs */ + if (isset($_POST['add_locals_cancel']) || isset($_POST['edit_blocklists_finish']) || + isset($_POST['edit_blocklists_cancel']) || isset($_POST['add_locals_finish'])){ + + $this->locals_dialog= FALSE; + $this->in_blocklist_dialog= FALSE; + $this->out_blocklist_dialog= FALSE; + $this->dialog= FALSE; + } + + /* Manage locals dialog */ + if ($this->locals_dialog){ + + /* Save data */ + $faxfilter= get_global("faxfilter"); + foreach( array("depselect", "fuser", "regex") as $type){ + if (isset($_POST[$type])){ + $faxfilter[$type]= $_POST[$type]; + } + } + if (isset($_GET['search'])){ + $s= mb_substr($_GET['search'], 0, 1, "UTF8")."*"; + if ($s == "**"){ + $s= "*"; + } + $faxfilter['fuser']= $s; + } + register_global("faxfilter", $faxfilter); + + if ($faxfilter['regex'] != '*' && $faxfilter['regex'] != ""){ + $regex= $faxfilter['regex']; + $filter= "(facimileTelephoneNumber=$regex)"; + } else { + $filter= ""; + } + if ($faxfilter['fuser'] != ""){ + $user= $faxfilter['fuser']; + $filter= "$filter(|(uid=$user)(cn=$user)(givenName=$user)(sn=$user))"; + } + + $base= $faxfilter['depselect']; + $acl= array($this->config->current['BASE'] => ":all"); + $res= get_list($acl, "(&(objectClass=goFaxAccount)$filter)", TRUE, $base, array("sn", "givenName", "facsimileTelephoneNumber"), TRUE); + + foreach ($res as $attrs){ + $list[$attrs['facsimileTelephoneNumber'][0]]= + $attrs['sn'][0].", ". + $attrs['givenName'][0]." [". + $attrs['facsimileTelephoneNumber'][0]."]"; + } + + /* Show dialog */ + $smarty->assign("search_image", get_template_path('images/search.png')); + $smarty->assign("tree_image", get_template_path('images/tree.png')); + $smarty->assign("infoimage", get_template_path('images/info.png')); + $smarty->assign("launchimage", get_template_path('images/small_filter.png')); + $smarty->assign("departments", $this->config->idepartments); + $smarty->assign("list", $list); + if (isset($_POST['depselect'])){ + $smarty->assign("depselect", $_POST['depselect']); + } + $smarty->assign("deplist", $this->config->idepartments); + $smarty->assign("apply", apply_filter()); + $smarty->assign("alphabet", generate_alphabet()); + $smarty->assign("hint", print_sizelimit_warning()); + foreach( array("depselect", "fuser", "regex") as $type){ + $smarty->assign("$type", $faxfilter[$type]); + } + $smarty->assign("hint", print_sizelimit_warning()); + + $display.= $smarty->fetch (get_template_path('locals.tpl', TRUE, dirname(__FILE__))); + return ($display); + } + + /* Manage incoming blocklists */ + if ($this->in_blocklist_dialog){ + $ldap->search ("(objectClass=goFaxRBlock)"); + while ($attrs= $ldap->fetch()){ + $list[$attrs['cn'][0]]= + $attrs['description'][0]. + " [".$attrs['cn'][0]."]"; + } + + /* Show dialog */ + $smarty->assign("cblocklist", $this->current_blocklist); + $smarty->assign("goFaxBlockListACL", chkacl($this->acl, "goFaxBlockList")); + $smarty->assign("departments", $this->config->idepartments); + $smarty->assign("list", $list); + if (isset($_POST['department'])){ + $smarty->assign("department", $_POST['department']); + } + $display.= $smarty->fetch (get_template_path('lists.tpl', TRUE, dirname(__FILE__))); + return ($display); + } + + /* Manage outgoing blocklists */ + if ($this->out_blocklist_dialog){ + $ldap->search ("(objectClass=goFaxSBlock)"); + while ($attrs= $ldap->fetch()){ + if (isset($attrs['description'][0])){ + $list[$attrs['cn'][0]]= $attrs['cn'][0]. + " [".$attrs['description'][0]."]"; + } else { + $list[$attrs['cn'][0]]= $attrs['cn'][0]; + } + } + + /* Show dialog */ + $smarty->assign("cblocklist", $this->current_blocklist); + $smarty->assign("goFaxBlockListACL", chkacl($this->acl, "goFaxBlockList")); + $smarty->assign("departments", $this->config->idepartments); + $smarty->assign("list", $list); + if (isset($_POST['department'])){ + $smarty->assign("department", $_POST['department']); + } + $display.= $smarty->fetch (get_template_path('lists.tpl', TRUE, dirname(__FILE__))); + return ($display); + } + + + /* Show main page */ + $smarty->assign("languages", $this->config->data['MAIN']['LANGUAGES']); + $smarty->assign("formats", $this->config->data['MAIN']['FAXFORMATS']); + $smarty->assign("printers", $this->printerList); + + /* Load attributes */ + foreach(array("goFaxIsEnabled", "goFaxDeliveryMode", "facsimileTelephoneNumber", + "goFaxPrinter", "goFaxLanguage", "goFaxFormat", + "facsimileAlternateTelephoneNumber", "mail") as $val){ + + $smarty->assign("$val", $this->$val); + $smarty->assign($val."ACL", chkacl($this->acl, "$val")); + } + $smarty->assign("goFaxRBlockgroupsACL", chkacl($this->acl, "goFaxRBlockgroups")); + $smarty->assign("goFaxSBlockgroupsACL", chkacl($this->acl, "goFaxSBlockgroups")); + + /* Load checkboxes */ + if ($this->goFaxIsEnabled == "1"){ + $smarty->assign("goFaxIsEnabled", ""); + } else { + $smarty->assign("goFaxIsEnabled", "checked"); + } + /* goFaxAccount has "mail" as must! Block if no mailaddress is specified... */ + if ($this->goFaxDeliveryMode & 32) { + $smarty->assign("fax_to_mail", "checked"); + } else { + $smarty->assign("fax_to_mail", ""); + } + if ($this->goFaxDeliveryMode & 64) { + $smarty->assign("fax_to_printer", "checked"); + } else { + $smarty->assign("fax_to_printer", ""); + } + $display.= $smarty->fetch (get_template_path('generic.tpl', TRUE, dirname(__FILE__))); + return ($display); + } + + function remove_from_parent() + { + /* Cancel if there's nothing to do here */ + if (!$this->initially_was_account){ + return; + } + + plugin::remove_from_parent(); + + /* Zero out arrays */ + foreach (array("goFaxRBlocklist", "goFaxRBlockgroups", "goFaxSBlocklist", + "goFaxSBlockgroups", "facsimileAlternateTelephoneNumber") as $val){ + + $this->attrs[$val]= array(); + } + + /* Adapt mail settings if needed */ + if ($this->parent->by_object['mailAccount']->is_account){ + unset($this->attrs['mail']); + } + + $ldap= $this->config->get_ldap_link(); + $ldap->cd($this->dn); + $ldap->modify($this->attrs); + show_ldap_error($ldap->get_error()); + + /* Optionally execute a command after we're done */ + $this->handle_post_events('remove'); + } + + + /* Check formular input */ + function check() + { + /* Reset message array */ + $message= array(); + + /* must: facsimileTelephoneNumber */ + if ($this->facsimileTelephoneNumber == ""){ + $message[]= _("The required field 'Fax' is not set."); + } + + if (!is_phone_nr($this->facsimileTelephoneNumber)){ + $message[]= _("Please enter a valid telephone number in the 'Fax' field."); + } + + /* IF mail is specified (which is only the case if there's no mail account + present), check if it's valid.. */ + if (@isset($this->parent->by_object['mailAccount']) && + $this->goFaxDeliveryMode && 32){ + if ($this->mail == ""){ + $message[]= _("Mail delivery is checked, but no address has been specified."); + } elseif (!is_email($this->mail)){ + $message[]= _("The mail address you've entered is invalid."); + } + } + + return ($message); + } + + /* Save data to object */ + function save_object() + { + if (isset($_POST['faxTab'])){ + plugin::save_object(); + + /* Adapt combobox values */ + $tmp= 0; + if (isset($_POST["fax_to_mail"]) && $_POST["fax_to_mail"] == 1){ + $tmp+= 32; + } + if (isset($_POST["fax_to_printer"]) && $_POST["fax_to_printer"] == 1){ + $tmp+= 64; + } + if (chkacl ($this->acl, "goFaxIsEnabled") == ""){ + if (isset($_POST["goFaxIsEnabled"]) && $_POST["goFaxIsEnabled"] == "1"){ + $this->goFaxIsEnabled= "0"; + } else { + $this->goFaxIsEnabled= "1"; + } + } + + if (isset($_POST['facsimileTelephoneNumber'])){ + if ($_POST['facsimileTelephoneNumber'] != $this->facsimileTelephoneNumber){ + $this->is_modified= TRUE; + } + $this->facsimileTelephoneNumber= $_POST['facsimileTelephoneNumber']; + } + + if (isset($_POST['mail'])){ + if ($this->mail != $_POST['mail']){ + $this->is_modified= TRUE; + } + $this->mail= $_POST['mail']; + } + + /* Write to object */ + if (chkacl ($this->acl, "goFaxDeliveryMode") == ""){ + if ($tmp != $this->goFaxDeliveryMode){ + $this->is_modified= TRUE; + } + $this->goFaxDeliveryMode= "$tmp"; + } + + /* Check if mail account is active and correct the internal + reference to represent the current status. */ + if ($this->parent->by_object['mailAccount']->is_account){ + $this->has_mailAccount= TRUE; + } + } + + } + + + /* Save to LDAP */ + function save() + { + plugin::save(); + + /* Save arrays */ + foreach (array("goFaxRBlocklist", "goFaxRBlockgroups", "goFaxSBlocklist", + "goFaxSBlockgroups", "facsimileAlternateTelephoneNumber") as $val){ + + $this->attrs[$val]= $this->$val; + } + + /* Adapt mail settings if needed */ + unset($this->attrs['mail']); + if (!$this->has_mailAccount && $this->goFaxDeliveryMode && 32){ + $this->attrs['mail']= $this->mail; + } + + /* Write back to ldap */ + $ldap= $this->config->get_ldap_link(); + $ldap->cd($this->dn); + $ldap->modify($this->attrs); + show_ldap_error($ldap->get_error()); + + /* Optionally execute a command after we're done */ + if ($this->initially_was_account == $this->is_account){ + if ($this->is_modified){ + $this->handle_post_events("mofify"); + } + } else { + $this->handle_post_events("add"); + } + + } + + + /* Adapt from template, using 'dn' */ + function adapt_from_template($dn) + { + plugin::adapt_from_template($dn); + + foreach (array("goFaxRBlocklist", "goFaxRBlockgroups", "goFaxSBlocklist", + "goFaxSBlockgroups", "facsimileAlternateTelephoneNumber") as $val){ + + if (isset($this->attrs[$val])){ + $this->$val= $this->attrs[$val]; + } + } + } + + + + /* Add alternate fax recipient */ + function addAlternate($number) + { + $this->facsimileAlternateTelephoneNumber[]= "$number"; + $this->facsimileAlternateTelephoneNumber= + array_unique ($this->facsimileAlternateTelephoneNumber); + + sort ($this->facsimileAlternateTelephoneNumber); + reset ($this->facsimileAlternateTelephoneNumber); + } + + function delAlternate($numbers) + { + $this->facsimileAlternateTelephoneNumber= array_remove_entries ($numbers, + $this->facsimileAlternateTelephoneNumber); + } + + +} + +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/plugins/gofax/faxaccount/generic.tpl b/plugins/gofax/faxaccount/generic.tpl new file mode 100644 index 000000000..4b85204dc --- /dev/null +++ b/plugins/gofax/faxaccount/generic.tpl @@ -0,0 +1,109 @@ + + + + + + + + +
+

{t}Generic{/t}

+ + + + + + + + + + + + + + +
{t}Fax{/t}{$must} + +
{t}Language{/t} + +
{t}Delivery format{/t} + +
+ +
+   + +

{t}Delivery methods{/t}

+ + + {t}Temporary disable fax usage{/t}
+ + {if $has_mailaccount eq "false"} + + {t}Deliver fax as mail to{/t}  + + {else} + + {t}Deliver fax as mail{/t} + {/if} +
+ + + {t}Deliver fax to printer{/t}  + + +
+ +

 

+ + + + + + + + + +
+

{t}Alternate fax numbers{/t}

+
+ +   +   + +
+   + +

{t}Blocklists{/t}

+ + + + + + + + + +
{t}Blocklists for incoming fax{/t} + +
{t}Blocklists for outgoing fax{/t} + +
+
+ + + + + diff --git a/plugins/gofax/faxaccount/lists.tpl b/plugins/gofax/faxaccount/lists.tpl new file mode 100644 index 000000000..a03020446 --- /dev/null +++ b/plugins/gofax/faxaccount/lists.tpl @@ -0,0 +1,41 @@ + + + + + + +
+ {t}Blocked numbers/lists{/t} +
+ +
+ +   + +
+ + + {t}Select a specific department{/t}
+ +
+
+ {if $have_js ne ""} + + {/if} + + {t}List of predefined blocklists{/t} + +
+ +

+ +   + +

+ diff --git a/plugins/gofax/faxaccount/locals.tpl b/plugins/gofax/faxaccount/locals.tpl new file mode 100644 index 000000000..0c286f024 --- /dev/null +++ b/plugins/gofax/faxaccount/locals.tpl @@ -0,0 +1,52 @@ + + + + + +
+
+

+ {t}Select numbers to add{/t} {$hint}
+

+
+
+

+ +

+
+
+
+

[F]{t}Filters{/t}

+
+
+

+ + {$alphabet} +
+

+

+ +
 {t}Display numbers of department{/t}
+

+

+ +
 {t}Display numbers matching{/t}
+

+

+ +
 {t}Display numbers of user{/t}
+

+ {$apply} +
+
+ +

+ +   + +

+ diff --git a/plugins/gofax/faxaccount/main.inc b/plugins/gofax/faxaccount/main.inc new file mode 100644 index 000000000..9cd1f67ca --- /dev/null +++ b/plugins/gofax/faxaccount/main.inc @@ -0,0 +1,108 @@ +dn); + sess_del ('edit'); + sess_del ('gofaxAccount'); + } + + /* Create gofaxAccount object on demand */ + if (!isset($_SESSION['gofaxAccount']) || (isset($_GET['reset']) && $_GET['reset'] == 1)){ + $_SESSION['gofaxAccount']= new gofaxAccount ($config, $ui->dn); + } + $gofaxAccount= $_SESSION['gofaxAccount']; + + /* save changes back to object */ + if (isset ($_SESSION['edit'])){ + $gofaxAccount->save_object (); + } + + /* Enter edit mode? */ + if (isset($_POST['edit'])){ + + /* Check locking */ + if (($username= get_lock($ui->dn)) != ""){ + $_SESSION['back_plugin']= $plug; + gen_locked_message ($username, $ui->dn); + exit (); + } + + /* Lock the current entry */ + add_lock ($ui->dn, $ui->dn); + $_SESSION['dn']= $ui->dn; + $_SESSION['edit']= TRUE; + } + + /* Adjust acl's to mode */ + if (isset($_SESSION['edit'])){ + $acl= get_permissions ($ui->dn, $ui->subtreeACL); + $gofaxAccount->acl= get_module_permission($acl, "gofax", $ui->dn); + } else { + $acl= get_permissions ($ui->dn, $ui->subtreeACL); + $editacl= get_module_permission($acl, "gofax", $ui->dn); + $gofaxAccount->acl= "#none#"; + } + + /* save changes to LDAP and disable edit mode */ + if (isset($_POST['edit_finish'])){ + + /* Perform checks */ + $message= $gofaxAccount->check (); + + /* No errors, save object */ + if (count ($message) == 0){ + $gofaxAccount->save (); + gosa_log ("User/fax object'".$ui->dn."' has been saved"); + $gofaxAccount->acl= "#none#"; + del_lock ($ui->dn); + sess_del ('edit'); + + } else { + /* Errors found, show message */ + show_errors ($message); + } + } + + /* Execute formular */ + $display= $gofaxAccount->execute (); + $info= ""; + + /* Store changes in session */ + if (isset ($_SESSION['edit'])){ + $_SESSION['gofaxAccount']= $gofaxAccount; + } + + /* Show page footer depending on the mode */ + if (!$gofaxAccount->locals_dialog && + !$gofaxAccount->out_blocklist_dialog && + !$gofaxAccount->in_blocklist_dialog && + $gofaxAccount->is_account){ + + $display.= "

\n"; + + /* Are we in edit mode? */ + if (isset($_SESSION['edit'])){ + $display.= "\n"; + $display.= " \n"; + $display.= "\n"; + $info= " ".$ui->dn." "; + } else { + $info= " ".$ui->dn." "; + if (isset($editacl) && $editacl != "#none#"){ + $info.= ""._("Click the 'Edit' button below to change informations in this dialog"); + $display.= ""; + } + $display.= "\n"; + } + $display.= "

"; + } + + /* Page header*/ + $display= print_header(get_template_path('images/fax.png'), _("FAX settings"), $info).$display; + +} +?> diff --git a/plugins/gofax/reports/class_faxreport.inc b/plugins/gofax/reports/class_faxreport.inc new file mode 100644 index 000000000..3b572030a --- /dev/null +++ b/plugins/gofax/reports/class_faxreport.inc @@ -0,0 +1,301 @@ +config= $config; + $this->ui= $ui; + + /* Try to get matching search base for user provided + by 'dn' */ + $tmp= preg_replace ("/^[^,]+,[^,]+,/", "", $ui->dn); + $sb= array_search($tmp, $this->config->departments); + if ($sb === FALSE){ + $sb= "/"; + } + $this->search_base= $sb; + + /* Get global filter config */ + if (!is_global("faxfilter")){ + $ui= get_userinfo(); + $base= get_base_from_people($ui->dn); + $faxfilter= array("year" => date("Y"), + "month" => date("m"), + "search_base" => $base, + "search_for" => "*"); + register_global("faxfilter", $faxfilter); + } + } + + function execute() + { + /* Get template engine */ + $smarty= get_smarty(); + $faxfilter= get_global("faxfilter"); + foreach( array("year", "month", "search_for", "search_base") as $type){ + if (isset($_POST[$type])){ + $faxfilter[$type]= $_POST[$type]; + } + $this->$type= $faxfilter[$type]; + } + register_global("faxfilter", $faxfilter); + + /* Adapt sorting */ + if (isset($_GET['sort'])){ + if ($this->sort == (int)$_GET['sort']){ + if ($this->sort_direction == "down"){ + $this->sort_direction= "up"; + } else { + $this->sort_direction= "down"; + } + } + $this->sort= (int)$_GET['sort']; + if ($this->sort < 0 || $this->sort > 5){ + $this->sort= 0; + } + } + + /* Do detail view? */ + if (isset($_GET['detail'])){ + $query = "SELECT id,uid,date_format(queuing_time, '%Y%m%d%H%i%s') as queuing_time,status,sender_id,sender_msn,receiver_id,". + "receiver_msn,pages,status_message,transfer_time FROM faxlog ". + "WHERE id=".$_GET['detail'].";"; + + /* Connecting, selecting database */ + $cfg= $this->config->data['SERVERS']['FAX']; + $link = @mysql_pconnect($cfg['SERVER'], $cfg['LOGIN'], $cfg['PASSWORD']); + if ($link === FALSE){ + print_red(_("Can't connect to fax database, no reports can be shown!")); + return; + } + if (! @mysql_select_db("gofax")){ + print_red(_("Can't select fax database for report generation!")); + return; + } + + @DEBUG (DEBUG_MYSQL, __LINE__, __FUNCTION__, __FILE__, + $query, "Database query"); + $result = @mysql_query($query); + if ($result === false){ + print_red(_("Query for fax database failed!")); + return; + } + + $line = mysql_fetch_array($result, MYSQL_ASSOC); + mysql_close($link); + + if (!preg_match ("/'".$line["uid"]."'/", $this->userfilter)){ + print_red (_("You have no permission to retrieve informations about this fax id!")); + return; + } + + $parts= array( "id", "uid", "queuing_time", "status", "sender_id", "sender_msn", + "receiver_id", "receiver_msn", "pages", "status_message", "transfer_time" ); + foreach ($parts as $vname) { + $final="fax_$vname"; + if ($line[$vname] != ""){ + $smarty->assign("$final", $line[$vname]); + } else { + $smarty->assign("$final", "-"); + } + } + $queuing_time= $line['queuing_time']; + + $_SESSION['userfilter']= $this->userfilter; + $smarty->assign("plug", validate($_GET['plug'])); + $smarty->assign("detail", validate($_GET['detail'])); + + $format= _("Y-M-D"); + $date= preg_replace("/Y/", substr($queuing_time,0,4), $format); + $date= preg_replace("/M/", substr($queuing_time,4,2), $date); + $date= preg_replace("/D/", substr($queuing_time,6,2), $date); + $smarty->assign("date", $date); + $smarty->assign("time", substr($queuing_time,8,2).":". + substr($queuing_time,10,2).":". + substr($queuing_time,12,2)); + return($smarty->fetch(get_template_path('detail.tpl', TRUE))); + } + + /* Search button has been pressed */ + if ($this->search_for != ""){ + $this->start= 0; + + if (is_integer (strpos($this->search_for, "*"))){ + $s= $this->search_for; + } else { + $s= "*".$this->search_for."*"; + } + $ldap= $this->config->get_ldap_link(); + $ldap->cd ($this->search_base); + + /* Perform ldap search for potential users */ + $ldap->search ("(&(objectClass=gosaAccount)(!(objectClass=gosaUserTemplate))". + "(objectClass=goFaxAccount)". + "(|(uid=$s)(l=$s)(homePhone=$s)". + "(telephoneNumber=$s)(facsimileTelephoneNumber=$s)(mobile=$s)". + "(pager=$s)(cn=$s)(givenName=$s)(sn=$s)(personalTitle=$s)". + "(title=$s)))"); + + $fax_users= array(); + while ($attrs= $ldap->fetch()){ + $acl= get_permissions ($ldap->getDN(), $this->ui->subtreeACL); + $acl= get_module_permission($acl, "fax", $ldap->getDN()); + + if (chkacl ($acl, "faxReport") == ""){ + $fax_users[]= $attrs["uid"][0]; + } + } + + /* Prepare SQL query */ + $this->userfilter= ""; + foreach ($fax_users as $user){ + $this->userfilter.= "uid = '$user' OR "; + } + $this->userfilter= preg_replace("/OR $/", "", $this->userfilter); + } + + + /* Perform SQL query */ + if ($this->userfilter){ + if ($this->sort_direction == "down"){ + $desc= "DESC"; + } else { + $desc= ""; + } + $start= date ("YmdHis", mktime(0,0,0,$this->month,1,$this->year)); + $end= date ("YmdHis", mktime(23,59,59,$this->month+1,0,$this->year)); + $query = "SELECT id,uid,date_format(queuing_time, '%Y%m%d%H%i%s') as queuing_time,status,sender_id,receiver_id,pages FROM faxlog ". + "WHERE ( ".$this->userfilter." ) AND queuing_time <= $end AND ". + "queuing_time >= $start ORDER BY ".$this->fields[$this->sort]." $desc;"; + + /* Connecting, selecting database */ + $cfg= $this->config->data['SERVERS']['FAX']; + $link = @mysql_pconnect($cfg['SERVER'], $cfg['LOGIN'], $cfg['PASSWORD']); + if ($link === FALSE){ + print_red(_("Can't connect to fax database, no reports can be shown!")); + return; + } + if (! @mysql_select_db("gofax")){ + print_red(_("Can't select fax database for report generation!")); + return; + } + + @DEBUG (DEBUG_MYSQL, __LINE__, __FUNCTION__, __FILE__, + $query, "Database query"); + $result = @mysql_query($query); + if ($result === false){ + print_red(_("Query for fax database failed!")); + return; + } + + $report_list= array(); + while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) { + $hour= substr($line["queuing_time"], 8, 2); + $minute=substr($line["queuing_time"], 10, 2); + $format= _("Y-M-D"); + $date= preg_replace("/Y/", substr($line["queuing_time"], 0, 4), $format); + $date= preg_replace("/M/", substr($line["queuing_time"], 4, 2), $date); + $date= preg_replace("/D/", substr($line["queuing_time"], 6, 2), $date); + + + $report_list[]= " ".$line["uid"]."". + "$date $hour:$minute". + "".$this->status[$line["status"]]."". + "".$line["sender_id"]."". + "".$line["receiver_id"]."". + "".$line["pages"].""; + } + + $this->report_list= $report_list; + mysql_close($link); + } + + /* Generate output */ + $mod= 0; + if (isset($_GET['start'])){ + $this->start= (int)$_GET['start']; + } + + $output= ""; + foreach ($this->report_list as $val){ + if ($mod < $this->start) { + $mod++; + continue; + } + if ($mod >= ($this->start + 20)){ + $mod++; + break; + } + if ( ($mod++) & 1){ + $col= "background-color: #ECECEC;"; + } else { + $col= "background-color: #F5F5F5;"; + } + $output.= "$val"; + } + + /* Prepare template */ + $smarty->assign("search_for", $this->search_for); + $smarty->assign("bases", $this->config->idepartments); + $smarty->assign("base_select", $this->search_base); + $months= array(); + $months[1]= _("January"); $months[2]= _("February"); $months[3]= _("March"); $months[4]= _("April"); + $months[5]= _("May"); $months[6]= _("June"); $months[7]= _("July"); $months[8]= _("August"); + $months[9]= _("September"); $months[10]= _("October"); $months[11]= _("November"); $months[12]= _("December"); + $smarty->assign("months", $months); + $smarty->assign("month_select", $this->month); + $current= date("Y"); + $years= array(); + for ($y= $current - 5; $y<=$current; $y++){ + $years[]= $y; + } + $smarty->assign("years", $years); + $smarty->assign("year_select", $this->year); + + if (isset($fax_users) && count($fax_users)){ + $smarty->assign("search_result", $output); + $smarty->assign("range_selector", range_selector(count($this->report_list), $this->start, 20)); + } + + /* Show main page */ + $smarty->assign("plug", validate($_GET['plug'])); + $smarty->assign("launchimage", get_template_path('images/launch.png')); + $smarty->assign("search_image", get_template_path('images/search.png')); + $smarty->assign("mode".$this->sort, "sort_direction. + ".png\" border=0 align=center>"); + return($smarty->fetch(get_template_path('contents.tpl', TRUE))); + } + +} + +?> diff --git a/plugins/gofax/reports/contents.tpl b/plugins/gofax/reports/contents.tpl new file mode 100644 index 000000000..afd139bf9 --- /dev/null +++ b/plugins/gofax/reports/contents.tpl @@ -0,0 +1,59 @@ +
+

[F]{t}Filter{/t}

+
+
+

+  {t}Search for{/t} + + {t}in{/t} + + {t}during{/t} + + {t}in{/t} + +   + +

+
+ +
+ +{if $search_result ne ""} + + + + + + + + + + {$search_result} +
{t}User{/t} {$mode0}{t}Date{/t} {$mode1}{t}Status{/t} {$mode2}{t}Sender{/t} {$mode3}{t}Receiver{/t} {$mode4}{t}# pages{/t} {$mode5}
+ + + + + +
{$range_selector}
+ +{else} + {t}Search returned no results...{/t} +{/if} + +

+   +

+ + + diff --git a/plugins/gofax/reports/detail.tpl b/plugins/gofax/reports/detail.tpl new file mode 100644 index 000000000..c89c6997a --- /dev/null +++ b/plugins/gofax/reports/detail.tpl @@ -0,0 +1,70 @@ + + + + + + +
+ + {t}FAX preview - please wait{/t} + +

+ {t}Click on fax to download{/t} +

+
+   + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
{t}FAX ID{/t}{$fax_id}
{t}User{/t}{$fax_uid}
{t}Date / Time{/t}{$date} / {$time}
{t}Sender MSN{/t}{$fax_sender_msn}
{t}Sender ID{/t}{$fax_sender_id}
{t}Receiver MSN{/t}{$fax_receiver_msn}
{t}Receiver ID{/t}{$fax_receiver_id}
{t}Status{/t}{$fax_status}
{t}Status message{/t}{$fax_status_message}
{t}Transfer time{/t}{$fax_transfer_time}
{t}# pages{/t}{$fax_pages}
+ +
+ +

+ +

+ diff --git a/plugins/gofax/reports/main.inc b/plugins/gofax/reports/main.inc new file mode 100644 index 000000000..cfa7de073 --- /dev/null +++ b/plugins/gofax/reports/main.inc @@ -0,0 +1,20 @@ +execute (); + $display.= "\n"; + + /* Store changes in session */ + $_SESSION['faxreport']= $faxreport; +} +?> diff --git a/plugins/gofon/phoneaccount/class_phoneAccount.inc b/plugins/gofon/phoneaccount/class_phoneAccount.inc new file mode 100644 index 000000000..7f66c29da --- /dev/null +++ b/plugins/gofon/phoneaccount/class_phoneAccount.inc @@ -0,0 +1,421 @@ + "Eins ist toll", "zwei" => "Zwei ist noch besser"); + + /* attribute list for save action */ + var $attributes= array("goFonDeliveryMode", "goFonForwarding", "goFonFormat", + "goFonHardware", "goFonPIN", "telephoneNumber"); + var $objectclasses= array("goFonAccount"); + + function phoneAccount ($config, $dn= NULL) + { + plugin::plugin ($config, $dn); + + /* Set phone hardware */ + if (!isset($this->attrs['goFonHardware'])){ + $this->goFonHardware= "automatic"; + } + + /* Preset voice format */ + if (!isset($this->attrs['goFonFormat'])){ + $this->goFonFormat= "wav"; + } + + /* Assemble phone numbers */ + if (isset($this->attrs['telephoneNumber'])){ + for ($i= 0; $i<$this->attrs['telephoneNumber']['count']; $i++){ + $number= $this->attrs['telephoneNumber'][$i]; + $this->phoneNumbers[$number]= $number; + } + } + + /* Assemble forwarders */ + if (isset($this->attrs['goFonForwarding'])){ + for ($i= 0; $i<$this->attrs['goFonForwarding']['count']; $i++){ + list($num, $v1, $v2) =split(';', $this->attrs['goFonForwarding'][$i]); + $this->forwarders[$num]= "$v1;$v2"; + } + } else { + $this->forwarders= array(""); + } + + /* Set up has_mailAccount */ + if (isset($this->attrs['objectClass'])){ + if (in_array("gosaMailAccount", $this->attrs['objectClass'])){ + $this->has_mailAccount= TRUE; + } + } + + /* Load hardware list */ + $ldap= $this->config->get_ldap_link(); + $ldap->cd($this->config->current['BASE']); + $ldap->search("(objectClass=goFonHardware)", array('cn', 'description')); + while ($attrs= $ldap->fetch()){ + $cn= $attrs['cn'][0]; + if (isset($attrs['description'])){ + $description= " - ".$attrs['description'][0]; + } else { + $description= ""; + } + $this->hardware_list[$cn]= "$cn$description"; + + } + + /* Eventually colorize phones */ + $ldap->cd($this->config->current['BASE']); + foreach ($this->hardware_list as $cn => $desc){ + $ldap->search("(goFonHardware=$cn)", array('cn')); + if ($ldap->count() > 0){ + $ldap->fetch(); + if ($ldap->getDN() != $this->dn){ + $this->used_hardware[$cn]= $ldap->getDN(); + } + } + } + + $this->hardware_list["automatic"]= _("automatic"); + ksort($this->hardware_list); + } + + + function execute() + { + /* Do we need to flip is_account state? */ + if (isset($_POST['modify_state'])){ + $this->is_account= !$this->is_account; + } + + /* Do we represent a valid account? */ + if (!$this->is_account && $this->parent == NULL){ + $display= " ". + _("This account has no phone extensions.").""; + $display.= back_to_main(); + return($display); + } + + $display= ""; + + /* Show tab dialog headers */ + if ($this->parent != NULL){ + if ($this->is_account){ + $display= $this->show_header(_("Remove phone account"), + _("This account has phone features enabled. You can disable them by clicking below.")); + } else { + $display= $this->show_header(_("Create phone account"), + _("This account has phone features disabled. You can enable them by clicking below.")); + return ($display); + } + } + + /* Add phone number */ + if (isset($_POST["add_phonenumber"]) && $_POST['phonenumber']){ + if (is_phone_nr($_POST['phonenumber'])){ + $number= $_POST["phonenumber"]; + $this->phoneNumbers[$number]= $number; + $this->is_modified= TRUE; + } else { + print_red(_("Please enter a valid phone number!")); + } + } + + /* Remove phone number */ + if (isset($_POST["delete_phonenumber"]) && isset($_POST["phonenumber_list"])){ + foreach ($_POST['phonenumber_list'] as $number){ + unset($this->phoneNumbers[$number]); + $this->is_modified= TRUE; + } + } + + /* Check for forwarding action */ + foreach ($this->forwarders as $nr => $fw){ + + /* Buttons pressed? */ + if (isset($_POST["add_fw$nr"])){ + $this->forwarders= $this->insert_after("", $nr, $this->forwarders); + } + if (isset($_POST["remove_fw$nr"])){ + unset($this->forwarders[$nr]); + } + } + + /* Prepare templating */ + $smarty= get_smarty(); + + /* Transfer ACL's */ + foreach($this->attributes as $val){ + $smarty->assign($val."ACL", chkacl($this->acl, "$val")); + } + + /* Fill arrays */ + $smarty->assign ("goFonHardware", $this->goFonHardware); + $smarty->assign ("phoneNumbers", $this->phoneNumbers); + $hl= "\n"; + $smarty->assign ("hardware_list", $hl); + + /* Generate forwarder view */ + $forwarder_list=""; + $acl= chkacl($this->acl, "goFonForwaring"); + foreach ($this->forwarders as $nr => $fw){ + @list($number, $timeout)= split(";", $fw); + $forwarder_list.= ""; + $forwarder_list.= ""; + $forwarder_list.= ""; + $forwarder_list.= ""; + $forwarder_list.= ""; + $forwarder_list.= ""; + if (count($this->forwarders) > 1){ + $forwarder_list.= ""; + } + $forwarder_list.= ""; + } + $smarty->assign("forwarder_list", $forwarder_list); + + + + /* Check box */ + if ($this->parent->by_object['mailAccount'] && + $this->parent->by_object['mailAccount']->is_account && + preg_match("/M/i", $this->goFonDeliveryMode)){ + $smarty->assign("fon_to_mail", "checked"); + } else { + $smarty->assign("fon_to_mail", ""); + } + + if (!isset($this->parent->by_object['mailAccount'])) { + $smarty->assign("has_mailaccount", "false"); + $this->has_mailAccount= false; + } elseif ( !$this->parent->by_object['mailAccount']->is_account){ + $smarty->assign("has_mailaccount", "false"); + $this->has_mailAccount= false; + } + + /* Show main page */ + $display.= $smarty->fetch(get_template_path('generic.tpl', TRUE, dirname(__FILE__))); + return($display); + } + + + function save_object() + { + if (isset($_POST["phoneTab"])){ + plugin::save_object(); + + /* Save checkbox */ + if (isset($_POST['fon_to_mail'])){ + $tmp= "[M]"; + } else { + $tmp= "[]"; + } + if (chkacl ($this->acl, "goFonDeliveryMode") == ""){ + if ($this->goFonDeliveryMode != $tmp){ + $this->is_modified= TRUE; + } + $this->goFonDeliveryMode= $tmp; + } + + /* Save forwarding numbers and timeouts */ + if (chkacl ($this->acl, "goFonForwarder") == ""){ + foreach ($this->forwarders as $nr => $fw){ + $tmp= $_POST["fwn$nr"].";".$_POST["fwt$nr"]; + if ($this->forwarders[$nr] != $tmp){ + $this->is_modified= TRUE; + } + $this->forwarders[$nr]= $tmp; + } + } + + /* Check if mail account is active and correct the internal + reference to represent the current status. */ + if ($this->parent->by_object['mailAccount']->is_account){ + $this->has_mailAccount= TRUE; + } + } + + } + + function check() + { + /* Reset message array */ + $message= array(); + + /* We need at least one phone number */ + if (count($this->phoneNumbers) == 0){ + $message[]= sprintf(_("You need to specify at least one phone number!")); + } + + /* Check timestamps and phonenumbers */ + foreach ($this->forwarders as $fw){ + + /* Skip empty values */ + if ($fw == ";"){ + continue; + } + + /* Check */ + list($number, $timeout)= split(";", $fw); + if (!is_phone_nr($number)){ + $message[]= sprintf(_("The number '%s' is no valid phone number!"), $number); + } + if (!is_id($timeout)){ + $message[]= sprintf(_("The timeout '%s' contains invalid characters!"), $timeout); + } + } + + return ($message); + } + + + + function save() + { + plugin::save(); + + /* goFonAccount has "mail" as must! Block if no mailaddress is specified... */ + if (isset($this->parent->by_object['mailAccount']) && + !$this->parent->by_object['mailAccount']->is_account) { + + $this->goFonDeliveryMode= preg_replace("/M/i", "", $this->goFonDeliveryMode); + } + + /* Save arrays */ + $this->attrs['telephoneNumber']= array(); + foreach ($this->phoneNumbers as $number){ + $this->attrs['telephoneNumber'][]= $number; + } + $this->attrs['goFonForwarding']= array(); + foreach ($this->forwarders as $index => $number){ + $this->attrs['goFonForwarding'][]= "$index;$number"; + } + + /* Write back to ldap */ + $ldap= $this->config->get_ldap_link(); + $ldap->cd($this->dn); + $ldap->modify($this->attrs); + show_ldap_error($ldap->get_error()); + + /* Optionally execute a command after we're done */ + if ($this->initially_was_account == $this->is_account){ + if ($this->is_modified){ + $this->handle_post_events("modify"); + } + } else { + $this->handle_post_events("add"); + } + + } + + + function insert_after($entry, $nr, $list) + { + /* Is the entry free? No? Make it free... */ + if (isset($list[$nr])) { + $dest= array(); + $newidx= 0; + + foreach ($list as $idx => $contents){ + $dest[$newidx++]= $contents; + if ($idx == $nr){ + $dest[$newidx++]= $entry; + } + } + } else { + $dest= $list; + $dest[$nr]= $entry; + } + + return ($dest); + } + + + function adapt_from_template($dn) + { + plugin::adapt_from_template($dn); + + /* Assemble phone numbers */ + if (isset($this->attrs['telephoneNumber'])){ + for ($i= 0; $i<$this->attrs['telephoneNumber']['count']; $i++){ + $number= $this->attrs['telephoneNumber'][$i]; + $this->phoneNumbers[$number]= $number; + } + } + + /* Assemble forwarders */ + if (isset($this->attrs['goFonForwarding'])){ + for ($i= 0; $i<$this->attrs['goFonForwarding']['count']; $i++){ + list($num, $v1, $v2) =split(';', $this->attrs['goFonForwarding'][$i]); + $this->forwarders[$num]= "$v1;$v2"; + } + } else { + $this->forwarders= array(""); + } + } + + + function remove_from_parent() + { + /* Cancel if there's nothing to do here */ + if (!$this->initially_was_account){ + return; + } + + plugin::remove_from_parent(); + + /* Just keep one phone number */ + if (count($this->telephoneNumber) && $this->telephoneNumber != ""){ + $this->attrs['telephoneNumber']= $this->telephoneNumber[0]; + } else { + $this->attrs['telephoneNumber']= array(); + } + + $ldap= $this->config->get_ldap_link(); + $ldap->cd($this->dn); + $ldap->modify($this->attrs); + show_ldap_error($ldap->get_error()); + + /* Optionally execute a command after we're done */ + $this->handle_post_events('remove'); + } + + +} + +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/plugins/gofon/phoneaccount/generic.tpl b/plugins/gofon/phoneaccount/generic.tpl new file mode 100644 index 000000000..0dda5abab --- /dev/null +++ b/plugins/gofon/phoneaccount/generic.tpl @@ -0,0 +1,70 @@ + + + + + + +
+

{t}Telephone hardware{/t}

+ + + + + +
{t}Telephone{/t}  + {$hardware_list} +
+
+

{t}Answering machine{/t}

+ + + + +
+ {if $has_mailaccount eq "false"} + + {t}Deliver missed calls as mail{/t} + {else} + + {t}Deliver missed calls as mail{/t} + {/if} +
+
+ +

 

+ + + + + + + + +
+

{t}Phone numbers{/t}

+ +
+ +   + +
+ + + +
+

{t}Forward calls to{/t}

+ + + + + + {$forwarder_list} +
{t}Phone number{/t}{t}Timeout (s){/t} 
+
+
+ + diff --git a/plugins/gofon/phoneaccount/main.inc b/plugins/gofon/phoneaccount/main.inc new file mode 100644 index 000000000..00c374851 --- /dev/null +++ b/plugins/gofon/phoneaccount/main.inc @@ -0,0 +1,123 @@ +dn); + sess_del ('edit'); + sess_del ('phoneAccount'); + } + + /* Create phoneAccount object on demand */ + if (!isset($_SESSION['phoneAccount']) || (isset($_GET['reset']) && $_GET['reset'] == 1)){ + $_SESSION['phoneAccount']= new phoneAccount ($config, $ui->dn); + } + $phoneAccount= $_SESSION['phoneAccount']; + + /* save changes back to object */ + if (isset ($_SESSION['edit'])){ + $phoneAccount->save_object (); + } + + /* Enter edit mode? */ + if (isset($_POST['edit'])){ + + /* Check locking */ + if (($username= get_lock($ui->dn)) != ""){ + $_SESSION['back_plugin']= $plug; + gen_locked_message ($username, $ui->dn); + exit (); + } + + /* Lock the current entry */ + add_lock ($ui->dn, $ui->dn); + $_SESSION['dn']= $ui->dn; + $_SESSION['edit']= TRUE; + } + + /* Adjust acl's to mode */ + if (isset($_SESSION['edit'])){ + $acl= get_permissions ($ui->dn, $ui->subtreeACL); + $phoneAccount->acl= get_module_permission($acl, "phoneAccount", $ui->dn); + } else { + $acl= get_permissions ($ui->dn, $ui->subtreeACL); + $editacl= get_module_permission($acl, "phoneAccount", $ui->dn); + $phoneAccount->acl= "#none#"; + } + + /* save changes to LDAP and disable edit mode */ + if (isset($_POST['edit_finish'])){ + + /* Perform checks */ + $message= $phoneAccount->check (); + + /* No errors, save object */ + if (count ($message) == 0){ + $phoneAccount->save (); + gosa_log ("User/phone object'".$ui->dn."' has been saved"); + $phoneAccount->acl= "#none#"; + del_lock ($ui->dn); + sess_del ('edit'); + + /* Write back to session */ + $_SESSION['phoneAccount']= $phoneAccount; + } else { + /* Errors found, show message */ + show_errors ($message); + } + } + + /* Execute formular */ + $display= $phoneAccount->execute (); + + /* Store changes in session */ + if (isset ($_SESSION['edit'])){ + $_SESSION['phoneAccount']= $phoneAccount; + } + + $info= ""; + if ($phoneAccount->is_account){ + $display.= "

"; + + /* Are we in edit mode? */ + if (isset($_SESSION['edit'])){ + $display.= "\n"; + $display.= " "; + $display.= "\n"; + $info= " ".$ui->dn." "; + } else { + $info= " ".$ui->dn." "; + if (isset($editacl) && $editacl != "#none#"){ + $info.= ""._("Click the 'Edit' button below to change informations in this dialog"); + $display.= "\n"; + } + $display.= "\n"; + } + $display.= "

\n"; + } + + /* Page header*/ + $display= print_header(get_template_path('images/phone.png'), _("Phone settings"), $info).$display; + +} +?> diff --git a/plugins/gofon/reports/class_fonreport.inc b/plugins/gofon/reports/class_fonreport.inc new file mode 100644 index 000000000..a508b8be8 --- /dev/null +++ b/plugins/gofon/reports/class_fonreport.inc @@ -0,0 +1,248 @@ +config= $config; + $this->ui= $ui; + + /* Try to get matching search base for user provided + by 'dn' */ + $tmp= preg_replace ("/^[^,]+,[^,]+,/", "", $ui->dn); + $sb= array_search($tmp, $this->config->departments); + if ($sb === FALSE){ + $sb= "/"; + } + $this->search_base= $sb; + + /* Get global filter config */ + if (!is_global("fonfilter")){ + $ui= get_userinfo(); + $base= get_base_from_people($ui->dn); + $fonfilter= array("year" => date("Y"), + "month" => date("m"), + "search_base" => $base, + "search_for" => "*"); + register_global("fonfilter", $fonfilter); + } + } + + function execute() + { + /* Get template engine */ + $smarty= get_smarty(); + $fonfilter= get_global("fonfilter"); + foreach( array("year", "month", "search_for", "search_base") as $type){ + if (isset($_POST[$type])){ + $fonfilter[$type]= $_POST[$type]; + } + $this->$type= $fonfilter[$type]; + } + register_global("fonfilter", $fonfilter); + + /* Adapt sorting */ + if (isset($_GET['sort'])){ + if ($this->sort == (int)$_GET['sort']){ + if ($this->sort_direction == "down"){ + $this->sort_direction= "up"; + } else { + $this->sort_direction= "down"; + } + } + $this->sort= (int)$_GET['sort']; + if ($this->sort < 0 || $this->sort > 6){ + $this->sort= 0; + } + } + + /* Search button has been pressed */ + if ($this->search_for != ""){ + $this->start= 0; + + if (is_integer (strpos($this->search_for, "*"))){ + $s= $this->search_for; + } else { + $s= "*".$this->search_for."*"; + } + $ldap= $this->config->get_ldap_link(); + $ldap->cd ($this->search_base); + + /* Perform ldap search for potential users */ + $ldap->search ("(&(objectClass=gosaAccount)(!(objectClass=gosaUserTemplate))". + "(objectClass=gofonAccount)". + "(|(uid=$s)(l=$s)(homePhone=$s)". + "(telephoneNumber=$s)(facsimileTelephoneNumber=$s)(mobile=$s)". + "(pager=$s)(cn=$s)(givenName=$s)(sn=$s)(personalTitle=$s)". + "(title=$s)))"); + + $fon_users= array(); + while ($attrs= $ldap->fetch()){ + $acl= get_permissions ($ldap->getDN(), $this->ui->subtreeACL); + $acl= get_module_permission($acl, "fax", $ldap->getDN()); + + if (chkacl ($acl, "faxReport") == ""){ + $fax_users[]= $attrs["uid"][0]; + } + } + + /* Prepare SQL query */ + $this->userfilter= ""; + foreach ($fon_users as $user){ + $this->userfilter.= "uid = '$user' OR "; + } + $this->userfilter= preg_replace("/OR $/", "", $this->userfilter); + } + + /* Perform SQL query */ +##### FIXME ACL, FILTER ###### +# if ($this->userfilter){ + if ($this->sort_direction == "down"){ + $desc= "DESC"; + } else { + $desc= ""; + } + $start= date ("YmdHis", mktime(0,0,0,$this->month,1,$this->year)); + $end= date ("YmdHis", mktime(23,59,59,$this->month+1,0,$this->year)); + $query = "SELECT calldate, channel, src, clid, lastapp, lastdata, dst, ". + "disposition, duration FROM cdr ". + "WHERE calldate <= $end AND ". + "calldate >= $start ORDER BY ".$this->fields[$this->sort]." $desc;"; + + /* Connecting, selecting database */ + if (!isset($this->config->data['SERVERS']['FON'])){ + return (""); + } + $cfg= $this->config->data['SERVERS']['FON']; + $link = @mysql_pconnect($cfg['SERVER'], $cfg['LOGIN'], $cfg['PASSWORD']); + if ($link === FALSE){ + print_red(_("Can't connect to phone database, no reports can be shown!")); + return; + } + if (! @mysql_select_db("asteriskcdrdb")){ + print_red(_("Can't select phone database for report generation!")); + return; + } + + @DEBUG (DEBUG_MYSQL, __LINE__, __FUNCTION__, __FILE__, + $query, "Database query"); + + $result = @mysql_query($query); + if ($result === false){ + print_red(_("Query for phone database failed!")); + return; + } + $report_list= array(); + while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) { + $hour= substr($line["calldate"], 11, 2); + $minute=substr($line["calldate"], 14, 2); + $format= _("Y-M-D"); + $date= preg_replace("/Y/", substr($line["calldate"], 0, 4), $format); + $date= preg_replace("/M/", substr($line["calldate"], 5, 2), $date); + $date= preg_replace("/D/", substr($line["calldate"], 8, 2), $date); + + $report_list[]= "$date $hour:$minute". + "".$line["src"]."". + "".$line["dst"]."". + "".$line["channel"]."". + "".$line["lastapp"]."". + "".$line["disposition"]."". + "".$this->gen_duration($line["duration"]).""; + } + + $this->report_list= $report_list; + mysql_close($link); +# } + + /* Generate output */ + $mod= 0; + if (isset($_GET['start'])){ + $this->start= (int)$_GET['start']; + } + + $output= ""; + foreach ($this->report_list as $val){ + if ($mod < $this->start) { + $mod++; + continue; + } + if ($mod >= ($this->start + 20)){ + $mod++; + break; + } + if ( ($mod++) & 1){ + $col= "background-color: #ECECEC;"; + } else { + $col= "background-color: #F5F5F5;"; + } + $output.= "$val"; + } + + /* Prepare template */ + $smarty->assign("search_for", $this->search_for); + $smarty->assign("bases", $this->config->idepartments); + $smarty->assign("base_select", $this->search_base); + $months= array(); + $months[1]= _("January"); $months[2]= _("February"); $months[3]= _("March"); $months[4]= _("April"); + $months[5]= _("May"); $months[6]= _("June"); $months[7]= _("July"); $months[8]= _("August"); + $months[9]= _("September"); $months[10]= _("October"); $months[11]= _("November"); $months[12]= _("December"); + $smarty->assign("months", $months); + $smarty->assign("month_select", $this->month); + $current= date("Y"); + $years= array(); + for ($y= $current - 5; $y<=$current; $y++){ + $years[]= $y; + } + $smarty->assign("years", $years); + $smarty->assign("year_select", $this->year); + + if ($output != ""){ + $smarty->assign("search_result", $output); + $smarty->assign("range_selector", range_selector(count($this->report_list), $this->start, 20)); + } + + /* Show main page */ + $smarty->assign("plug", validate($_GET['plug'])); + $smarty->assign("launchimage", get_template_path('images/launch.png')); + $smarty->assign("search_image", get_template_path('images/search.png')); + $smarty->assign("mode".$this->sort, "sort_direction. + ".png\" border=0 align=center>"); + return($smarty->fetch(get_template_path('contents.tpl', TRUE))); + } + + function gen_duration($seconds) + { + if ($seconds / 60 > 1){ + $minutes= (int)($seconds / 60); + $seconds= $seconds % 60; + return ("$minutes’$seconds”"); + } + + return ("$seconds”"); + } + +} + +?> diff --git a/plugins/gofon/reports/contents.tpl b/plugins/gofon/reports/contents.tpl new file mode 100644 index 000000000..c24c95576 --- /dev/null +++ b/plugins/gofon/reports/contents.tpl @@ -0,0 +1,60 @@ +
+

[F]{t}Filter{/t}

+
+
+

+  {t}Search for{/t} + + {t}in{/t} + + {t}during{/t} + + {t}in{/t} + +   + +

+
+ +
+ +{if $search_result ne ""} + + + + + + + + + + + {$search_result} +
{t}Date{/t} {$mode0}{t}Source{/t} {$mode1}{t}Destination{/t} {$mode2}{t}Channel{/t} {$mode3}{t}Application{/t} {$mode4}{t}Status{/t} {$mode5}{t}Duration{/t} {$mode6}
+ + + + + +
{$range_selector}
+ +{else} + {t}Search returned no results...{/t} +{/if} + +

+   +

+ + + diff --git a/plugins/gofon/reports/main.inc b/plugins/gofon/reports/main.inc new file mode 100644 index 000000000..f79641b3d --- /dev/null +++ b/plugins/gofon/reports/main.inc @@ -0,0 +1,20 @@ +execute (); + $display.= "\n"; + + /* Store changes in session */ + $_SESSION['fonreport']= $fonreport; +} +?> diff --git a/plugins/personal/connectivity/class_connectivity.inc b/plugins/personal/connectivity/class_connectivity.inc new file mode 100644 index 000000000..ed5943db3 --- /dev/null +++ b/plugins/personal/connectivity/class_connectivity.inc @@ -0,0 +1,154 @@ + + \version 2.30 + \date 29.03.2005 + + This class provides the functionality to read and write all attributes + relevant for connectivity settings from/to the LDAP. It does syntax checking + and displays the formulars required. + */ + +class connectivity extends plugin +{ + /* Definitions */ + var $plHeadline= "Connectivity"; + var $plDescription= "This does something"; + + /* attribute list for save action */ + var $attributes= array(); + var $objectclasses= array(); + + var $ignore_account= TRUE; + var $plugin= array(); + var $plugin_name= array(); + + function connectivity ($config, $dn= NULL) + { + /* Preseed permissions */ + $this->dn= $dn; + $ui= get_userinfo(); + $acl= get_permissions ($ui->dn, $ui->subtreeACL); + + /* Load accounts */ + foreach ($config->data['TABS']['CONNECTIVITY'] as $plug){ + $name= $plug['CLASS']; + $this->plugin_name[]= $name; + $this->plugin[$name]= new $name($config, $dn); + $this->plugin[$name]->acl= get_module_permission($acl, "$name", $ui->dn); + } + } + + function execute() + { + $display= ""; + + /* Prepare templating */ + $smarty= get_smarty(); + + /* Do we represent a valid account? */ + if ($this->parent == NULL){ + $enabled= false; + foreach ($this->plugin_name as $name){ + if ($this->plugin[$name]->is_account){ + $enabled= true; + break; + } + } + if (!$enabled){ + $display= " ". + _("This account has no connectivity extensions.").""; + $display.= back_to_main(); + return ($display); + } + } + + /* Remove checkboxes in single edit mode */ + if ($this->parent != NULL){ + foreach ($this->plugin_name as $name){ + $this->plugin[$name]->parent= $this->parent; + } + } + + /* Execude objects */ + $is_first= true; + foreach ($this->plugin_name as $name){ + if (!$this->plugin[$name]->is_account && $this->parent == NULL) continue; + if (!$is_first){ + $display.= '

 

'; + } else { + $is_first= false; + } + $display.= $this->plugin[$name]->execute(); + } + + /* Mark me as connectivity tab */ + $display.= ""; + + return($display); + } + + + /* Save data to object */ + function save_object() + { + if (isset($_POST['connectivityTab'])){ + foreach ($this->plugin_name as $name){ + $this->plugin[$name]->save_object(); + } + } + } + + function check() + { + $message= array(); + + foreach ($this->plugin_name as $name){ + $tmp= $this->plugin[$name]->check(); + + $message= array_merge($message, $tmp); + } + + return ($message); + } + + + /* Save to LDAP */ + function save() + { + /* Save objects */ + foreach ($this->plugin_name as $name){ + $this->plugin[$name]->dn= $this->dn; + if ($this->plugin[$name]->is_account){ + $this->plugin[$name]->save(); + $this->plugin[$name]->postcreate(); + } else { + $this->plugin[$name]->remove_from_parent(); + $this->plugin[$name]->postremove(); + } + } + } + + function remove_from_parent() + { + /* Remove objects */ + foreach ($this->plugin_name as $name){ + $this->plugin[$name]->dn= $this->dn; + $this->plugin[$name]->remove_from_parent(); + $this->plugin[$name]->postremove(); + } + } + + function adapt_from_template($dn) + { + /* Adapt objects */ + foreach ($this->plugin_name as $name){ + $this->plugin[$name]->dn= $this->dn; + $this->plugin[$name]->adapt_from_template($dn); + } + } + +} + +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/plugins/personal/connectivity/class_kolabAccount.inc b/plugins/personal/connectivity/class_kolabAccount.inc new file mode 100644 index 000000000..aadc9cd34 --- /dev/null +++ b/plugins/personal/connectivity/class_kolabAccount.inc @@ -0,0 +1,211 @@ + "Eins ist toll", "zwei" => "Zwei ist noch besser"); + + /* Kolab attributes */ + var $kolabInvitationPolicy= "ACT_MANUAL"; + var $kolabFreeBusyFuture= 60; + var $unrestrictedMailSize= 0; + var $calFBURL= ""; + var $kolabDelegate= array(); + + /* attribute list for save action */ + var $attributes= array( "kolabInvitationPolicy", "kolabFreeBusyFuture", + "unrestrictedMailSize", "calFBURL"); + var $objectclasses= array(); + + function kolabAccount ($config, $dn= NULL) + { + plugin::plugin ($config, $dn); + + /* Pull delegation array */ + if (isset($this->attrs["kolabDelegate"]["count"])){ + for ($i= 0; $i<$this->attrs["kolabDelegate"]["count"]; $i++){ + array_push($this->kolabDelegate, $this->attrs["kolabDelegate"][$i]); + } + } + + } + + function execute() + { + /* Show tab dialog headers */ + $display= ""; + + /* Show main page */ + $smarty= get_smarty(); + + /* Load attributes */ + foreach($this->attributes as $val){ + $smarty->assign("$val", $this->$val); + $smarty->assign($val."ACL", chkacl($this->acl, "$val")); + } + + /* Add delegation */ + if (isset($_POST['add_delegation'])){ + if ($_POST['delegate_address'] != ""){ + + /* Valid email address specified? */ + $address= $_POST['delegate_address']; + $valid= FALSE; + if (!is_email($address)){ + if (!is_email($address, TRUE)){ + print_red (_("You're trying to add an invalid email address to the list of delegations.")); + } + } else { + + $ldap= $this->config->get_ldap_link(); + $ldap->cd ($this->config->current['BASE']); + $ldap->search('(mail='.$address.')'); + if ($ldap->count() == 0){ + print_red (_("The mail address you're trying to add is no primary mail address of an existing user.")); + } else { + $valid= TRUE; + } + } + + if ($valid){ + /* Add it */ + if (chkacl ($this->acl, "kolabDelegate") == ""){ + $this->addDelegate ($address); + $this->is_modified= TRUE; + } + + } + } + } + + /* Delete forward email addresses */ + if (isset($_POST['delete_delegation'])){ + if (count($_POST['delegate_list']) + && chkacl ($this->acl, "kolabDelegate") == ""){ + + $this->delDelegate ($_POST['delegate_list']); + } + } + + /* Assemble policies */ + $policies= array( 'ACT_ALWAYS_ACCEPT' => _("Always accept"), + 'ACT_ALWAYS_REJECT' => _("Always reject"), + 'ACT_REJECT_IF_CONFLICTS' => _("Reject if conflicts"), + 'ACT_MANUAL_IF_CONFLICTS' => _("Manual if conflicts"), + 'ACT_MANUAL' => _("Manual")); + $smarty->assign('policies', $policies); + + /* Adjust checkbox */ + if ($this->unrestrictedMailSize){ + $smarty->assign('unrestrictedMailSizeState', "checked"); + } else { + $smarty->assign('unrestrictedMailSizeState', ""); + } + + /* Transfer account states for this union */ + if ($this->parent->by_object['mailAccount']->is_account){ + $smarty->assign('is_account', 'true'); + } else { + $smarty->assign('is_account', ''); + } + + /* Transfer delegation list */ + $smarty->assign("kolabDelegate", $this->kolabDelegate); + + $display.= $smarty->fetch (get_template_path('kolab.tpl', TRUE, dirname(__FILE__))); + return ($display); + } + + function remove_from_parent() + { + /* Optionally execute a command after we're done */ + $this->handle_post_events('remove'); + } + + + function check() + { + $message= array(); + + /* FBFuture is in days... */ + if ($this->kolabFreeBusyFuture != "" && !preg_match('/^[0-9]+$/', $this->kolabFreeBusyFuture)){ + $message[]= _("The value specified as Free Busy future needs to be an integer."); + } + + /* Check for URL scheme... */ + if ($this->calFBURL != "" && !preg_match('/^[^:/]+://[a-z0-9_/.+~-]+$/i', $this->calFBURL)){ + $message[]= _("The value specified as Free Busy Information URL is invalid."); + } + + return ($message); + } + + /* Save data to object */ + function save_object() + { + /* Do we need to flip is_account state? */ + if (isset($_POST['connectivityTab'])){ + if (chkacl('unrestrictedMailSize', $this->acl == "")){ + if (isset($_POST['unrestrictedMailSize']) && $_POST['unrestrictedMailSize'] == 1){ + $this->unrestrictedMailSize= 1; + } else { + $this->unrestrictedMailSize= 0; + } + } + } + + plugin::save_object(); + } + + + /* Save to LDAP */ + function save() + { + plugin::save(); + + /* Transfer delegation array */ + $this->attrs['kolabDelegate']= $this->kolabDelegate; + + /* Write back to ldap */ + $ldap= $this->config->get_ldap_link(); + $ldap->cd($this->dn); + $ldap->modify($this->attrs); + show_ldap_error($ldap->get_error()); + + /* Optionally execute a command after we're done */ + if ($this->initially_was_account == $this->is_account){ + if ($this->is_modified){ + $this->handle_post_events("mofify"); + } + } else { + $this->handle_post_events("add"); + } + } + + + /* Add entry to delegation list */ + function addDelegate($address) + { + $this->kolabDelegate[]= $address; + $this->kolabDelegate= array_unique ($this->kolabDelegate); + + sort ($this->kolabDelegate); + reset ($this->kolabDelegate); + $this->is_modified= TRUE; + } + + function delDelegate($addresses) + { + $this->kolabDelegate= array_remove_entries ($addresses, $this->kolabDelegate); + $this->is_modified= TRUE; + } + +} + +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/plugins/personal/connectivity/class_oxchangeAccount.inc b/plugins/personal/connectivity/class_oxchangeAccount.inc new file mode 100644 index 000000000..e818a9606 --- /dev/null +++ b/plugins/personal/connectivity/class_oxchangeAccount.inc @@ -0,0 +1,785 @@ + "Eins ist toll", "zwei" => "Zwei ist noch besser"); + + /* GW attributes */ + var $OXAppointmentDays="500"; + var $OXTaskDays="5"; + var $OXTimeZone="GMT"; + var $writeGlobalAddressBook="FALSE"; + var $mailEnabled="OK"; + + /* attribute list for save action */ + var $attributes= array("OXAppointmentDays", "OXTaskDays", "OXTimeZone","writeGlobalAddressBook","mailEnabled"); + var $objectclasses= array("OXUserObject"); + + + var $oxconf = array(); + + var $timezones=array( + "Africa/Abidjan", + "Africa/Accra", + "Africa/Addis_Ababa", + "Africa/Algiers", + "Africa/Asmera", + "Africa/Bamako", + "Africa/Bangui", + "Africa/Banjul", + "Africa/Bissau", + "Africa/Blantyre", + "Africa/Brazzaville", + "Africa/Bujumbura", + "Africa/Cairo", + "Africa/Casablanca", + "Africa/Ceuta", + "Africa/Conakry", + "Africa/Dakar", + "Africa/Dar_es_Salaam", + "Africa/Djibouti", + "Africa/Douala", + "Africa/El_Aaiun", + "Africa/Freetown", + "Africa/Gaborone", + "Africa/Harare", + "Africa/Johannesburg", + "Africa/Kampala", + "Africa/Khartoum", + "Africa/Kigali", + "Africa/Kinshasa", + "Africa/Lagos", + "Africa/Libreville", + "Africa/Lome", + "Africa/Luanda", + "Africa/Lubumbashi", + "Africa/Lusaka", + "Africa/Malabo", + "Africa/Maputo", + "Africa/Maseru", + "Africa/Mbabane", + "Africa/Mogadishu", + "Africa/Monrovia", + "Africa/Nairobi", + "Africa/Ndjamena", + "Africa/Niamey", + "Africa/Nouakchott", + "Africa/Ouagadougou", + "Africa/Porto-Novo", + "Africa/Sao_Tome", + "Africa/Timbuktu", + "Africa/Tripoli", + "Africa/Tunis", + "Africa/Windhoek", + "America/Adak", + "America/Anchorage", + "America/Anguilla", + "America/Antigua", + "America/Araguaina", + "America/Aruba", + "America/Asuncion", + "America/Atka", + "America/Barbados", + "America/Belem", + "America/Belize", + "America/Boa_Vista", + "America/Bogota", + "America/Boise", + "America/Buenos_Aires", + "America/Cambridge_Bay", + "America/Cancun", + "America/Caracas", + "America/Catamarca", + "America/Cayenne", + "America/Cayman", + "America/Chicago", + "America/Chihuahua", + "America/Cordoba", + "America/Costa_Rica", + "America/Cuiaba", + "America/Curacao", + "America/Danmarkshavn", + "America/Dawson", + "America/Dawson_Creek", + "America/Denver", + "America/Detroit", + "America/Dominica", + "America/Edmonton", + "America/Eirunepe", + "America/El_Salvador", + "America/Ensenada", + "America/Fortaleza", + "America/Fort_Wayne", + "America/Glace_Bay", + "America/Godthab", + "America/Goose_Bay", + "America/Grand_Turk", + "America/Grenada", + "America/Guadeloupe", + "America/Guatemala", + "America/Guayaquil", + "America/Guyana", + "America/Halifax", + "America/Havana", + "America/Hermosillo", + "America/Indiana", + "America/Indiana/Indianapolis", + "America/Indiana/Knox", + "America/Indiana/Marengo", + "America/Indiana/Vevay", + "America/Indianapolis", + "America/Inuvik", + "America/Iqaluit", + "America/Jamaica", + "America/Jujuy", + "America/Juneau", + "America/Kentucky", + "America/Kentucky/Louisville", + "America/Kentucky/Monticello", + "America/Knox_IN", + "America/La_Paz", + "America/Lima", + "America/Los_Angeles", + "America/Louisville", + "America/Maceio", + "America/Managua", + "America/Manaus", + "America/Martinique", + "America/Mazatlan", + "America/Mendoza", + "America/Menominee", + "America/Merida", + "America/Mexico_City", + "America/Miquelon", + "America/Monterrey", + "America/Montevideo", + "America/Montreal", + "America/Montserrat", + "America/Nassau", + "America/New_York", + "America/Nipigon", + "America/Nome", + "America/Noronha", + "America/North_Dakota", + "America/North_Dakota/Center", + "America/Panama", + "America/Pangnirtung", + "America/Paramaribo", + "America/Phoenix", + "America/Port-au-Prince", + "America/Porto_Acre", + "America/Porto_Velho", + "America/Port_of_Spain", + "America/Puerto_Rico", + "America/Rainy_River", + "America/Rankin_Inlet", + "America/Recife", + "America/Regina", + "America/Rio_Branco", + "America/Rosario", + "America/Santiago", + "America/Santo_Domingo", + "America/Sao_Paulo", + "America/Scoresbysund", + "America/Shiprock", + "America/St_Johns", + "America/St_Kitts", + "America/St_Lucia", + "America/St_Thomas", + "America/St_Vincent", + "America/Swift_Current", + "America/Tegucigalpa", + "America/Thule", + "America/Thunder_Bay", + "America/Tijuana", + "America/Tortola", + "America/Vancouver", + "America/Virgin", + "America/Whitehorse", + "America/Winnipeg", + "America/Yakutat", + "America/Yellowknife", + "Antarctica/Casey", + "Antarctica/Davis", + "Antarctica/DumontDUrville", + "Antarctica/Mawson", + "Antarctica/McMurdo", + "Antarctica/Palmer", + "Antarctica/South_Pole", + "Antarctica/Syowa", + "Antarctica/Vostok", + "Arctic/Longyearbyen", + "Asia/Aden", + "Asia/Almaty", + "Asia/Amman", + "Asia/Anadyr", + "Asia/Aqtau", + "Asia/Aqtobe", + "Asia/Ashgabat", + "Asia/Ashkhabad", + "Asia/Baghdad", + "Asia/Bahrain", + "Asia/Baku", + "Asia/Bangkok", + "Asia/Beirut", + "Asia/Bishkek", + "Asia/Brunei", + "Asia/Calcutta", + "Asia/Choibalsan", + "Asia/Chongqing", + "Asia/Chungking", + "Asia/Colombo", + "Asia/Dacca", + "Asia/Damascus", + "Asia/Dhaka", + "Asia/Dili", + "Asia/Dubai", + "Asia/Dushanbe", + "Asia/Gaza", + "Asia/Harbin", + "Asia/Hong_Kong", + "Asia/Hovd", + "Asia/Irkutsk", + "Asia/Istanbul", + "Asia/Jakarta", + "Asia/Jayapura", + "Asia/Jerusalem", + "Asia/Kabul", + "Asia/Kamchatka", + "Asia/Karachi", + "Asia/Kashgar", + "Asia/Katmandu", + "Asia/Krasnoyarsk", + "Asia/Kuala_Lumpur", + "Asia/Kuching", + "Asia/Kuwait", + "Asia/Macao", + "Asia/Macau", + "Asia/Magadan", + "Asia/Manila", + "Asia/Muscat", + "Asia/Nicosia", + "Asia/Novosibirsk", + "Asia/Omsk", + "Asia/Oral", + "Asia/Phnom_Penh", + "Asia/Pontianak", + "Asia/Pyongyang", + "Asia/Qatar", + "Asia/Qyzylorda", + "Asia/Rangoon", + "Asia/Riyadh", + "Asia/Riyadh87", + "Asia/Riyadh88", + "Asia/Riyadh89", + "Asia/Saigon", + "Asia/Sakhalin", + "Asia/Samarkand", + "Asia/Seoul", + "Asia/Shanghai", + "Asia/Singapore", + "Asia/Taipei", + "Asia/Tashkent", + "Asia/Tbilisi", + "Asia/Tehran", + "Asia/Tel_Aviv", + "Asia/Thimbu", + "Asia/Thimphu", + "Asia/Tokyo", + "Asia/Ujung_Pandang", + "Asia/Ulaanbaatar", + "Asia/Ulan_Bator", + "Asia/Urumqi", + "Asia/Vientiane", + "Asia/Vladivostok", + "Asia/Yakutsk", + "Asia/Yekaterinburg", + "Asia/Yerevan", + "Atlantic/Azores", + "Atlantic/Bermuda", + "Atlantic/Canary", + "Atlantic/Cape_Verde", + "Atlantic/Faeroe", + "Atlantic/Jan_Mayen", + "Atlantic/Madeira", + "Atlantic/Reykjavik", + "Atlantic/South_Georgia", + "Atlantic/Stanley", + "Atlantic/St_Helena", + "Australia/ACT", + "Australia/Adelaide", + "Australia/Brisbane", + "Australia/Broken_Hill", + "Australia/Canberra", + "Australia/Darwin", + "Australia/Hobart", + "Australia/LHI", + "Australia/Lindeman", + "Australia/Lord_Howe", + "Australia/Melbourne", + "Australia/North", + "Australia/NSW", + "Australia/Perth", + "Australia/Queensland", + "Australia/South", + "Australia/Sydney", + "Australia/Tasmania", + "Australia/Victoria", + "Australia/West", + "Australia/Yancowinna", + "Brazil/Acre", + "Brazil/DeNoronha", + "Brazil/East", + "Brazil/West", + "Canada/Atlantic", + "Canada/Central", + "Canada/East-Saskatchewan", + "Canada/Eastern", + "Canada/Mountain", + "Canada/Newfoundland", + "Canada/Pacific", + "Canada/Saskatchewan", + "Canada/Yukon", + "CET", + "Chile/Continental", + "Chile/EasterIsland", + "CST6CDT", + "Cuba", + "EET", + "Egypt", + "Eire", + "EST", + "EST5EDT", + "Etc/GMT", + "Etc/GMT+0", + "Etc/GMT+1", + "Etc/GMT+10", + "Etc/GMT+11", + "Etc/GMT+12", + "Etc/GMT+2", + "Etc/GMT+3", + "Etc/GMT+4", + "Etc/GMT+5", + "Etc/GMT+6", + "Etc/GMT+7", + "Etc/GMT+8", + "Etc/GMT+9", + "Etc/GMT-0", + "Etc/GMT-1", + "Etc/GMT-10", + "Etc/GMT-11", + "Etc/GMT-12", + "Etc/GMT-13", + "Etc/GMT-14", + "Etc/GMT-2", + "Etc/GMT-3", + "Etc/GMT-4", + "Etc/GMT-5", + "Etc/GMT-6", + "Etc/GMT-7", + "Etc/GMT-8", + "Etc/GMT-9", + "Etc/GMT0", + "Etc/Greenwich", + "Etc/UCT", + "Etc/Universal", + "Etc/UTC", + "Etc/Zulu", + "Europe/Amsterdam", + "Europe/Andorra", + "Europe/Athens", + "Europe/Belfast", + "Europe/Belgrade", + "Europe/Berlin", + "Europe/Bratislava", + "Europe/Brussels", + "Europe/Bucharest", + "Europe/Budapest", + "Europe/Chisinau", + "Europe/Copenhagen", + "Europe/Dublin", + "Europe/Gibraltar", + "Europe/Helsinki", + "Europe/Istanbul", + "Europe/Kaliningrad", + "Europe/Kiev", + "Europe/Lisbon", + "Europe/Ljubljana", + "Europe/London", + "Europe/Luxembourg", + "Europe/Madrid", + "Europe/Malta", + "Europe/Minsk", + "Europe/Monaco", + "Europe/Moscow", + "Europe/Nicosia", + "Europe/Oslo", + "Europe/Paris", + "Europe/Prague", + "Europe/Riga", + "Europe/Rome", + "Europe/Samara", + "Europe/San_Marino", + "Europe/Sarajevo", + "Europe/Simferopol", + "Europe/Skopje", + "Europe/Sofia", + "Europe/Stockholm", + "Europe/Tallinn", + "Europe/Tirane", + "Europe/Tiraspol", + "Europe/Uzhgorod", + "Europe/Vaduz", + "Europe/Vatican", + "Europe/Vienna", + "Europe/Vilnius", + "Europe/Warsaw", + "Europe/Zagreb", + "Europe/Zaporozhye", + "Europe/Zurich", + "Factory", + "GB", + "GB-Eire", + "GMT", + "GMT+0", + "GMT-0", + "GMT0", + "Greenwich", + "Hongkong", + "HST", + "Iceland", + "Indian/Antananarivo", + "Indian/Chagos", + "Indian/Christmas", + "Indian/Cocos", + "Indian/Comoro", + "Indian/Kerguelen", + "Indian/Mahe", + "Indian/Maldives", + "Indian/Mauritius", + "Indian/Mayotte", + "Indian/Reunion", + "Iran", + "Israel", + "Jamaica", + "Japan", + "Kwajalein", + "Libya", + "MET", + "Mexico/BajaNorte", + "Mexico/BajaSur", + "Mexico/General", + "Mideast/Riyadh87", + "Mideast/Riyadh88", + "Mideast/Riyadh89", + "MST", + "MST7MDT", + "Navajo", + "NZ", + "NZ-CHAT", + "Pacific/Apia", + "Pacific/Auckland", + "Pacific/Chatham", + "Pacific/Easter", + "Pacific/Efate", + "Pacific/Enderbury", + "Pacific/Fakaofo", + "Pacific/Fiji", + "Pacific/Funafuti", + "Pacific/Galapagos", + "Pacific/Gambier", + "Pacific/Guadalcanal", + "Pacific/Guam", + "Pacific/Honolulu", + "Pacific/Johnston", + "Pacific/Kiritimati", + "Pacific/Kosrae", + "Pacific/Kwajalein", + "Pacific/Majuro", + "Pacific/Marquesas", + "Pacific/Midway", + "Pacific/Nauru", + "Pacific/Niue", + "Pacific/Norfolk", + "Pacific/Noumea", + "Pacific/Pago_Pago", + "Pacific/Palau", + "Pacific/Pitcairn", + "Pacific/Ponape", + "Pacific/Port_Moresby", + "Pacific/Rarotonga", + "Pacific/Saipan", + "Pacific/Samoa", + "Pacific/Tahiti", + "Pacific/Tarawa", + "Pacific/Tongatapu", + "Pacific/Truk", + "Pacific/Wake", + "Pacific/Wallis", + "Pacific/Yap", + "Poland", + "Portugal", + "PRC", + "PST8PDT", + "ROC", + "ROK", + "Singapore", + "SystemV/AST4", + "SystemV/AST4ADT", + "SystemV/CST6", + "SystemV/CST6CDT", + "SystemV/EST5", + "SystemV/EST5EDT", + "SystemV/HST10", + "SystemV/MST7", + "SystemV/MST7MDT", + "SystemV/PST8", + "SystemV/PST8PDT", + "SystemV/YST9", + "SystemV/YST9YDT", + "Turkey", + "UCT", + "Universal", + "US/Alaska", + "US/Aleutian", + "US/Arizona", + "US/Central", + "US/East-Indiana", + "US/Eastern", + "US/Hawaii", + "US/Indiana-Starke", + "US/Michigan", + "US/Mountain", + "US/Pacific", + "US/Samoa", + "UTC", + "W-SU", + "WET", + "Zulu" + ); + + + + function oxchangeAccount ($config, $dn= NULL) + { + plugin::plugin ($config, $dn); + for ($i=0;$iconfig->data['TABS']['CONNECTIVITY']);$i++){ + if($this->config->data['TABS']['CONNECTIVITY'][$i]['CLASS']=='oxchangeAccount') + { + $this->oxconf=$this->config->data['TABS']['CONNECTIVITY'][$i]; + break; + } + } + } + + function execute() + { + + /* Show tab dialog headers */ + $display= ""; + + /* Show main page */ + $smarty= get_smarty(); + + if (function_exists("pg_connect")){ + $smarty->assign("pg", true); + }else{ + $smarty->assign("pg", false); + } + + /* Load attributes */ + foreach($this->attributes as $val){ + $smarty->assign("$val", $this->$val); + $smarty->assign($val."ACL", chkacl($this->acl, "$val")); + } + if ($this->is_account){ + $smarty->assign("oxchangeState", "checked"); + } else { + $smarty->assign("fstate", "disabled"); + } + +// if ($this->is_account){ + $smarty->assign("timezones", $this->timezones); +// } else { +// $smarty->assign("timezones", array("GMT")); +// } + + + if ($this->parent != NULL){ + $smarty->assign("tabbed", 1); + } + + $display.= $smarty->fetch (get_template_path('oxchange.tpl', TRUE, dirname(__FILE__))); + return ($display); + } + + function remove_from_parent() + { + $sqldeluser=array( + "delete from prg_notes where (user_right like '".$this->attrs['uid'][0]."') and (group_right like 's')", + "delete from prg_documents_read where (user_right like '".$this->attrs['uid'][0]."')", + "delete from prg_documents_mod where (user_right like '".$this->attrs['uid'][0]."')", + "delete from prg_docufolders_read where (user_right like '".$this->attrs['uid'][0]."')", + "delete from prg_docufolders_mod where (user_right like '".$this->attrs['uid'][0]."')", + "delete from prg_date_rights where (user_right like '".$this->attrs['uid'][0]."')", + "delete from prg_date_notification where (member_uid like '".$this->attrs['uid'][0]."')", + "delete from prg_dates_members where (member_uid like '".$this->attrs['uid'][0]."')", + "delete from prg_knowledge_read where (user_right like '".$this->attrs['uid'][0]."')", + "delete from prg_knowledge_mod where (user_right like '".$this->attrs['uid'][0]."')", + "delete from prg_knowledge_folder_read where (user_right like '".$this->attrs['uid'][0]."')", + "delete from prg_knowledge_folder_mod where (user_right like '".$this->attrs['uid'][0]."')", + "delete from prg_pin_board_read where (user_right like '".$this->attrs['uid'][0]."')", + "delete from prg_pin_board_mod where (user_right like '".$this->attrs['uid'][0]."')", + "delete from prg_bookmarks_read where (user_right like '".$this->attrs['uid'][0]."')", + "delete from prg_bookmarks_mod where (user_right like '".$this->attrs['uid'][0]."')", + "delete from prg_bookmarks_folder_read where (user_right like '".$this->attrs['uid'][0]."')", + "delete from prg_bookmarks_folder_mod where (user_right like '".$this->attrs['uid'][0]."')", + "delete from prg_tasks_rights where (user_right like '".$this->attrs['uid'][0]."')", + "delete from prg_tasks_notification where (member_uid like '".$this->attrs['uid'][0]."')", + "delete from prg_tasks_members where (member_uid like '".$this->attrs['uid'][0]."')", + "delete from prg_projects_rights where (user_right like '".$this->attrs['uid'][0]."')", + "delete from prg_projects_notification where (member_uid like '".$this->attrs['uid'][0]."')", + "delete from prg_projects_members where (member_uid like '".$this->attrs['uid'][0]."')", + "delete from oxfolder_permissions where (entity like '".$this->attrs['uid'][0]."') AND ((role = 256) OR (role = 1024))", + "delete from oxfolder_standardfolders where owner like '".$this->attrs['uid'][0]."'", + "delete from prg_forum_read where user_right = '".$this->attrs['uid'][0]."'", + "delete from prg_forum_mod where user_right = '".$this->attrs['uid'][0]."'", + "delete from prg_forum_abo where user_right = '".$this->attrs['uid'][0]."'", + "delete from prg_forum_seen where username = '".$this->attrs['uid'][0]."'", + "delete from sys_holiday where (userid like '".$this->attrs['uid'][0]."')", + "delete from usr_holiday where (userid like '".$this->attrs['uid'][0]."')"); + + /* Trying to open a Postgresql Database Server */ + if (function_exists("pg_connect")){ + if(isset($this->oxconf["PGUSER"]) and isset($this->oxconf["PGHOST"]) and isset($this->oxconf["PGDBNAME"]) and isset($this->oxconf["PGPASSWD"])){ + $pgcon = pg_connect("host=".$this->oxconf["PGHOST"]." user=".$this->oxconf["PGUSER"]." password=".$this->oxconf["PGPASSWD"]." dbname=".$this->oxconf["PGDBNAME"]); + if (! $pgcon){ + print_red(_("Couldn't Connect To Postgresql Database")); + return; + } + }else{ + print_red(_("Needed Parameters to openexchange connectivity plugin failed!")); + return; + } + }else{ + print_red(_("PHP4 module for Postgresql Database Failed!")); + return; + } + + plugin::remove_from_parent(); + $ldap= $this->config->get_ldap_link(); + + $ldap->cd($this->dn); + @DEBUG (DEBUG_LDAP, __LINE__, __FUNCTION__, __FILE__, + $this->attributes, "Save"); + $ldap->modify($this->attrs); + show_ldap_error($ldap->get_error()); + + /* Optionally execute a command after we're done */ + $this->postremove(); + + /* Finally remove data from postgresql server */ + foreach ($sqldeluser as $sqls){ + pg_exec($pgcon,$sqls); + } + pg_close(); + } + + /* Save data to object */ + function save_object() + { + /* Do we need to flip is_account state? */ + if (isset($_POST['connectivityTab'])){ + if (isset($_POST['oxchange'])){ + if (!$this->is_account && $_POST['oxchange'] == "B"){ + $this->is_account= TRUE; + } + } else { + $this->is_account= FALSE; + } + } + + plugin::save_object(); + if (isset($_POST["oxchangeStatus"])){ + $this->oxchangeStatus = "disabled"; + } else { + $this->oxchangeStatus = "enabled"; + } + } + + + /* Save to LDAP */ + function save() + { + + /* Trying to open a Postgresql Database Server */ + if (function_exists("pg_connect")){ + if(isset($this->oxconf["PGUSER"]) and isset($this->oxconf["PGHOST"]) and isset($this->oxconf["PGDBNAME"]) and isset($this->oxconf["PGPASSWD"])){ + $pgcon = pg_connect("host=".$this->oxconf["PGHOST"]." user=".$this->oxconf["PGUSER"]." password=".$this->oxconf["PGPASSWD"]." dbname=".$this->oxconf["PGDBNAME"]); + if (! $pgcon){ + print_red(_("Couldn't Connect To Postgresql Database")); + return; + } + }else{ + print_red(_("Needed Parameters to openexchange connectivity plugin failed!")); + return; + } + }else{ + print_red(_("PHP4 module for Postgresql Database Failed!")); + return; + } + + $uid=$this->attrs['uid'][0]; + + plugin::save(); + + /* Write back to ldap */ + $ldap= $this->config->get_ldap_link(); + $ldap->cd($this->dn); + $ldap->modify($this->attrs); + show_ldap_error($ldap->get_error()); + + /* Optionally execute a command after we're done */ + $this->postcreate(); + + /* Finally save data to postgresql server */ + pg_set_client_encoding ("UNICODE"); + $nv = "SELECT nextval ('serial_id')"; + $ot = "insert into oxfolder_tree (fuid, parent, fname, module, type, owner, creator, creating_date, created_from, changing_date, changed_from) VALUES (%d, 1, '%s', '%s', 'private', '%s', '%s', 'now', 'System', 'now', 'System')"; + $op = "INSERT INTO oxfolder_permissions (puid, pid, role, entity, sealed, fp, orp, owp, odp) VALUES (%d, %d, 32768, '%s', 0, 128, 128, 128, 128)"; + $os = "insert into oxfolder_standardfolders (owner,module_calendar,module_contact,module_task) VALUES ('%s',%d,%d,%d)"; + $ugr= "INSERT INTO usr_general_rights SELECT creating_date, created_from, changing_date, changed_from,text('%s'), addr_u, addr_r, addr_d, cont_u, cont_r, cont_d, data_u, data_r, data_d, serie_u, serie_r, serie_d, task_u, task_r, task_d, refer, proj_u, proj_r, proj_d, dfolder_u, dfolder_r, dfolder_d, doc_u, doc_r, doc_d, knowl_u, knowl_r, knowl_d, bfolder_u, bfolder_r, bfolder_d, bookm_u, bookm_r, bookm_d, pin_u, pin_r, pin_d, forum_n, fentrie_n, setup, pin_public, internal, int_groups, kfolder_u, kfolder_r, kfolder_d, webmail FROM sys_gen_rights_template WHERE login LIKE 'default_template'"; + + $res=pg_exec($pgcon,$nv); $calendarid=pg_fetch_row($res); pg_freeresult($res); + $q=sprintf($ot,$calendarid[0],'My Appointments','calendar',$uid,$uid); + pg_exec($pgcon,$q); + $res=pg_exec($pgcon,$nv); $nid=pg_fetch_row($res); pg_freeresult($res); + $q=sprintf($op,$nid[0],$calendarid[0],$uid); + pg_exec($pgcon,$q); + $res=pg_exec($pgcon,$nv); $contactsid=pg_fetch_row($res); pg_freeresult($res); + $q=sprintf($ot,$contactsid[0],'My Contacts','contact',$uid,$uid); + pg_exec($pgcon,$q); + $res=pg_exec($pgcon,$nv); $nid=pg_fetch_row($res); pg_freeresult($res); + $q=sprintf($op,$nid[0],$contactsid[0],$uid); + pg_exec($pgcon,$q); + $res=pg_exec($pgcon,$nv); $tasksid=pg_fetch_row($res); pg_freeresult($res); + $q=sprintf($ot,$tasksid[0],'My Tasks','task',$uid,$uid); + pg_exec($pgcon,$q); + $res=pg_exec($pgcon,$nv); $nid=pg_fetch_row($res); pg_freeresult($res); + $q=sprintf($op,$nid[0],$tasksid[0],$uid); + pg_exec($pgcon,$q); + $q=sprintf($os,$uid,$calendarid[0],$contactsid[0],$tasksid[0]); + pg_exec($pgcon,$q); + $q=sprintf($ugr,$uid); + pg_exec($pgcon,$q); + pg_close($pgcon); + } +} + +?> diff --git a/plugins/personal/connectivity/class_phpgwAccount.inc b/plugins/personal/connectivity/class_phpgwAccount.inc new file mode 100644 index 000000000..451dbfa5f --- /dev/null +++ b/plugins/personal/connectivity/class_phpgwAccount.inc @@ -0,0 +1,122 @@ + "Eins ist toll", "zwei" => "Zwei ist noch besser"); + + /* GW attributes */ + var $phpgwAccountExpires= "-1"; + var $phpgwAccountStatus= "A"; + var $phpgwAccountType= "u"; + + /* attribute list for save action */ + var $attributes= array("phpgwAccountExpires", "phpgwAccountStatus", "phpgwAccountType"); + var $objectclasses= array("phpgwAccount"); + + function phpgwAccount ($config, $dn= NULL) + { + plugin::plugin ($config, $dn); + } + + function execute() + { + /* Show tab dialog headers */ + $display= ""; + + /* Show main page */ + $smarty= get_smarty(); + + /* Load attributes */ + foreach($this->attributes as $val){ + $smarty->assign("$val", $this->$val); + $smarty->assign($val."ACL", chkacl($this->acl, "$val")); + } + if ($this->is_account){ + $smarty->assign("phpgwState", "checked"); + } else { + $smarty->assign("fstate", "disabled"); + } + + if ($this->parent != NULL){ + $smarty->assign("tabbed", 1); + } + + $display.= $smarty->fetch (get_template_path('phpgw.tpl', TRUE, dirname(__FILE__))); + return ($display); + } + + function remove_from_parent() + { + /* Cancel if there's nothing to do here */ + if (!$this->initially_was_account){ + return; + } + + plugin::remove_from_parent(); + $ldap= $this->config->get_ldap_link(); + + $ldap->cd($this->dn); + @DEBUG (DEBUG_LDAP, __LINE__, __FUNCTION__, __FILE__, + $this->attributes, "Save"); + $ldap->modify($this->attrs); + show_ldap_error($ldap->get_error()); + + /* Optionally execute a command after we're done */ + $this->handle_post_events('remove'); + } + + + /* Save data to object */ + function save_object() + { + /* Do we need to flip is_account state? */ + if (isset($_POST['connectivityTab'])){ + if (isset($_POST['phpgw'])){ + if (!$this->is_account && $_POST['phpgw'] == "B"){ + $this->is_account= TRUE; + } + } else { + $this->is_account= FALSE; + } + } + + plugin::save_object(); + if (isset($_POST["phpgwStatus"])){ + $this->phpgwStatus = "disabled"; + } else { + $this->phpgwStatus = "enabled"; + } + } + + + /* Save to LDAP */ + function save() + { + plugin::save(); + + /* Write back to ldap */ + $ldap= $this->config->get_ldap_link(); + $ldap->cd($this->dn); + $ldap->modify($this->attrs); + show_ldap_error($ldap->get_error()); + + /* Optionally execute a command after we're done */ + if ($this->initially_was_account == $this->is_account){ + if ($this->is_modified){ + $this->handle_post_events("mofify"); + } + } else { + $this->handle_post_events("add"); + } + } + +} + +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/plugins/personal/connectivity/class_proxyAccount.inc b/plugins/personal/connectivity/class_proxyAccount.inc new file mode 100644 index 000000000..440f25c75 --- /dev/null +++ b/plugins/personal/connectivity/class_proxyAccount.inc @@ -0,0 +1,190 @@ + "Eins ist toll", "zwei" => "Zwei ist noch besser"); + + /* Proxy attributes */ + var $gosaProxyAcctFlags= "[N ]"; + var $gosaProxyID= ""; + var $gosaProxyWorkingStart= 420; + var $gosaProxyWorkingStop= 1020; + var $gosaProxyQuota= "5g"; + var $gosaProxyQuotaPeriod= "m"; + + /* attribute list for save action */ + var $attributes= array("gosaProxyID", "gosaProxyAcctFlags", "gosaProxyWorkingStart", + "gosaProxyWorkingStop", "gosaProxyQuota", "gosaProxyQuotaPeriod"); + var $objectclasses= array("gosaProxyAccount"); + + function proxyAccount ($config, $dn= NULL) + { + plugin::plugin ($config, $dn); + } + + function execute() + { + $display= ""; + + /* Prepare templating */ + $smarty= get_smarty(); + $smarty->assign("gosaProxyAcctFlagsACL", chkacl($this->acl, "gosaProxyAcctFlags")); + $smarty->assign("gosaProxyWorkingStartACL", chkacl($this->acl, "gosaProxyWorkingStart")); + $smarty->assign("gosaProxyWorkingStopACL", chkacl($this->acl, "gosaProxyWorkingStop")); + $smarty->assign("gosaProxyQuotaACL", chkacl($this->acl, "gosaProxyQuota")); + + /* Show checkbox? */ + if ($this->parent != NULL){ + $smarty->assign("tabbed", "1"); + } + + /* Assign radio boxes */ + foreach (array("F", "T", "B", "N") as $val){ + if (is_integer(strpos($this->gosaProxyAcctFlags, "$val"))) { + $smarty->assign("filter$val", "checked"); + } else { + $smarty->assign("filter$val", ""); + } + } + + /* Assign working time */ + $smarty->assign("starthour", (int)($this->gosaProxyWorkingStart / 60)); + $smarty->assign("startminute", (int)($this->gosaProxyWorkingStart % 60)); + $smarty->assign("stophour", (int)($this->gosaProxyWorkingStop / 60)); + $smarty->assign("stopminute", (int)($this->gosaProxyWorkingStop % 60)); + $hours= array(); + for($i=0; $i<24; $i++){ + $hours[]= sprintf("%02d",$i); + } + $smarty->assign("hours", $hours); + $smarty->assign("minutes", array("00","15","30","45")); + + /* Assign quota values */ + $smarty->assign("quota_unit", array("k" => _("KB"), "m" => _("MB"), "g" => _("GB"))); + $smarty->assign("quota_time", array("h" => _("hour"), "d" => _("day"), "w" => _("week"), "m" => _("month"))); + $smarty->assign("gosaProxyQuotaPeriod", $this->gosaProxyQuotaPeriod); + $smarty->assign("quota_size", preg_replace("/[a-z]$/i", "", $this->gosaProxyQuota)); + $smarty->assign("quota_u", preg_replace("/^[0-9]+/", "", $this->gosaProxyQuota)); + if ($this->is_account){ + $smarty->assign("proxyState", "checked"); + } + + /* Prepare correct state */ + if (!$this->is_account){ + $smarty->assign("pstate", "disabled"); + } + + /* Show main page */ + $display.= $smarty->fetch(get_template_path('proxy.tpl', TRUE, dirname(__FILE__))); + return($display); + } + + function remove_from_parent() + { + /* Cancel if there's nothing to do here */ + if (!$this->initially_was_account){ + return; + } + + plugin::remove_from_parent(); + + $ldap= $this->config->get_ldap_link(); + @DEBUG (DEBUG_LDAP, __LINE__, __FUNCTION__, __FILE__, + $this->attributes, "Save"); + $ldap->cd($this->dn); + $ldap->modify($this->attrs); + show_ldap_error($ldap->get_error()); + + /* Optionally execute a command after we're done */ + $this->handle_post_events("remove"); + } + + + /* Save data to object */ + function save_object() + { + /* Do we need to flip is_account state? */ + if ($this->parent != NULL){ + if (isset($_POST['connectivityTab'])){ + if (isset($_POST['proxy'])){ + if (!$this->is_account && $_POST['proxy'] == "B"){ + $this->is_account= TRUE; + } + } else { + $this->is_account= FALSE; + } + } + } + + /* Save flag value */ + if ($this->is_account){ + if (chkacl ($this->acl, "gosaProxyAcctFlags") == ""){ + $flags= ""; + foreach(array("F", "T", "B") as $key){ + if (isset($_POST["filter$key"])){ + $flags.= $key; + } + } + if ("[$flags]" != $this->gosaProxyAcctFlags){ + $this->is_modified= TRUE; + } + $this->gosaProxyAcctFlags= "[$flags]"; + } + + /* Save time values */ + if (chkacl ($this->acl, "gosaProxyWorkingTime") == "" && isset($_POST['startMinute'])){ + $old= $this->gosaProxyWorkingStart; + $this->gosaProxyWorkingStart= $_POST["startHour"] * 60 + $_POST["startMinute"]; + $this->is_modified= ($old != $this->gosaProxyWorkingStart)?TRUE:$this->is_modified; + $old= $this->gosaProxyWorkingStop; + $this->gosaProxyWorkingStop = $_POST["stopHour"] * 60 + $_POST["stopMinute"]; + $this->is_modified= ($old != $this->gosaProxyWorkingStop)?TRUE:$this->is_modified; + } + + /* Save quota values */ + if (chkacl ($this->acl, "gosaProxyQuota") == ""){ + $old= $this->gosaProxyQuota; + $this->gosaProxyQuota= $_POST["quota_size"].$_POST["quota_unit"]; + $this->is_modified= ($old != $this->gosaProxyQuota)?TRUE:$this->is_modified; + $old= $this->gosaProxyQuotaPeriod; + $this->gosaProxyQuotaPeriod = $_POST["gosaProxyQuotaPeriod"]; + $this->is_modified= ($old != $this->gosaProxyQuotaPeriod)?TRUE:$this->is_modified; + } + } + + } + + + /* Save to LDAP */ + function save() + { + plugin::save(); + + /* Write back to ldap */ + $ldap= $this->config->get_ldap_link(); + $ldap->cd($this->dn); + $ldap->modify($this->attrs); + + show_ldap_error($ldap->get_error()); + + /* Optionally execute a command after we're done */ + if ($this->initially_was_account == $this->is_account){ + if ($this->is_modified){ + $this->handle_post_events("mofify"); + } + } else { + $this->handle_post_events("add"); + } + + } + +} + +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/plugins/personal/connectivity/class_pureftpdAccount.inc b/plugins/personal/connectivity/class_pureftpdAccount.inc new file mode 100644 index 000000000..afc31740e --- /dev/null +++ b/plugins/personal/connectivity/class_pureftpdAccount.inc @@ -0,0 +1,163 @@ + "Eins ist toll", "zwei" => "Zwei ist noch besser"); + + /* FTP attributes */ + var $FTPQuotaFiles = 0; + var $FTPQuotaMBytes = 0; + var $FTPUploadRatio = 0; + var $FTPDownloadRatio = 0; + var $FTPUploadBandwidth = 0; + var $FTPDownloadBandwidth = 0; + var $FTPStatus = "enabled"; + var $FTPuid = ""; + var $FTPgid = ""; + + /* attribute list for save action */ + var $attributes= array("FTPQuotaFiles","FTPQuotaMBytes","FTPUploadRatio","FTPDownloadRatio", + "FTPUploadBandwidth","FTPDownloadBandwidth","FTPStatus","FTPuid","FTPgid"); + var $objectclasses= array("PureFTPdUser"); + + function pureftpdAccount ($config, $dn= NULL) + { + plugin::plugin ($config, $dn); + } + + function execute() + { + /* Show tab dialog headers */ + $display= ""; + + /* Show main page */ + $smarty= get_smarty(); + + /* Load attributes */ + foreach($this->attributes as $val){ + $smarty->assign("$val", $this->$val); + $smarty->assign($val."ACL", chkacl($this->acl, "$val")); + } + if ($this->is_account){ + $smarty->assign("pureftpdState", "checked"); + } else { + $smarty->assign("fstate", "disabled"); + } + $smarty->assign("use_FTPStatus", ($this->FTPStatus == "disabled") ? "checked" : ""); + + if ($this->parent != NULL){ + $smarty->assign("tabbed", 1); + } + + $display.= $smarty->fetch (get_template_path('pureftpd.tpl', TRUE, dirname(__FILE__))); + return ($display); + } + + function remove_from_parent() + { + /* Cancel if there's nothing to do here */ + if (!$this->initially_was_account){ + return; + } + + plugin::remove_from_parent(); + $ldap= $this->config->get_ldap_link(); + + $ldap->cd($this->dn); + @DEBUG (DEBUG_LDAP, __LINE__, __FUNCTION__, __FILE__, + $this->attributes, "Save"); + $ldap->modify($this->attrs); + show_ldap_error($ldap->get_error()); + + /* Optionally execute a command after we're done */ + $this->handle_post_events('remove'); + } + + + /* Save data to object */ + function save_object() + { + /* Do we need to flip is_account state? */ + if (isset($_POST['connectivityTab'])){ + if (isset($_POST['pureftpd'])){ + if (!$this->is_account && $_POST['pureftpd'] == "B"){ + $this->is_account= TRUE; + } + } else { + $this->is_account= FALSE; + } + } + + plugin::save_object(); + + $old= $this->FTPStatus; + if (isset($_POST["FTPStatus"])){ + $this->FTPStatus = "disabled"; + } else { + $this->FTPStatus = "enabled"; + } + $this->is_modified= ($old != $this->FTPStatus)?TRUE:$this->is_modified; + } + + + /* Check values */ + function check() + { + $message= array(); + + /* Check for positive integer values */ + if ($this->is_account){ + if (!is_id($this->FTPUploadBandwidth)){ + $message[]= _("Value specified as 'Upload bandwidth' is not valid."); + } + if (!is_id($this->FTPDownloadBandwidth)){ + $message[]= _("Value specified as 'Download bandwidth' is not valid."); + } + if (!is_id($this->FTPQuotaFiles)){ + $message[]= _("Value specified as 'Files' is not valid."); + } + if (!is_id($this->FTPQuotaMBytes)){ + $message[]= _("Value specified as 'Size' is not valid."); + } + if (!is_id($this->FTPUploadRatio) || !is_id($this->FTPDownloadRatio)){ + $message[]= _("Value specified as 'Ratio' is not valid."); + } + } + + return $message; + } + + + /* Save to LDAP */ + function save() + { + plugin::save(); + + /* Write back to ldap */ + $ldap= $this->config->get_ldap_link(); + $ldap->cd($this->dn); + $ldap->modify($this->attrs); + show_ldap_error($ldap->get_error()); + + /* Optionally execute a command after we're done */ + if ($this->initially_was_account == $this->is_account){ + if ($this->is_modified){ + $this->handle_post_events("mofify"); + } + } else { + $this->handle_post_events("add"); + } + + } + +} + +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/plugins/personal/connectivity/class_webdavAccount.inc b/plugins/personal/connectivity/class_webdavAccount.inc new file mode 100644 index 000000000..1618c5c70 --- /dev/null +++ b/plugins/personal/connectivity/class_webdavAccount.inc @@ -0,0 +1,114 @@ + "Eins ist toll", "zwei" => "Zwei ist noch besser"); + + /* attribute list for save action */ + var $attributes= array(); + var $objectclasses= array("gosaWebdavAccount"); + + function webdavAccount ($config, $dn= NULL) + { + plugin::plugin ($config, $dn); + } + + function execute() + { + /* Show tab dialog headers */ + $display= ""; + + /* Show main page */ + $smarty= get_smarty(); + + if ($this->is_account){ + $smarty->assign("webdavState", "checked"); + } else { + $smarty->assign("wstate", "disabled"); + } + + if ($this->parent != NULL){ + $smarty->assign("tabbed", 1); + } + + $display.= $smarty->fetch (get_template_path('webdav.tpl', TRUE, dirname(__FILE__))); + return ($display); + } + + function remove_from_parent() + { + /* Cancel if there's nothing to do here */ + if (!$this->initially_was_account){ + return; + } + + plugin::remove_from_parent(); + $ldap= $this->config->get_ldap_link(); + + $ldap->cd($this->dn); + @DEBUG (DEBUG_LDAP, __LINE__, __FUNCTION__, __FILE__, + $this->attributes, "Save"); + $ldap->modify($this->attrs); + show_ldap_error($ldap->get_error()); + + /* Optionally execute a command after we're done */ + $this->handle_post_events('remove'); + } + + + /* Save data to object */ + function save_object() + { + /* Do we need to flip is_account state? */ + if (isset($_POST['connectivityTab'])){ + if (isset($_POST['webdav'])){ + if (!$this->is_account && $_POST['webdav'] == "B"){ + $this->is_account= TRUE; + } + } else { + $this->is_account= FALSE; + } + } + + plugin::save_object(); + if (isset($_POST["WEBDAVStatus"])){ + $this->WEBDAVStatus = "disabled"; + } else { + $this->WEBDAVStatus = "enabled"; + } + } + + + /* Save to LDAP */ + function save() + { + plugin::save(); + + /* Write back to ldap */ + $ldap= $this->config->get_ldap_link(); + $ldap->cd($this->dn); + $ldap->modify($this->attrs); + show_ldap_error($ldap->get_error()); + + /* Optionally execute a command after we're done */ + if ($this->initially_was_account == $this->is_account){ + if ($this->is_modified){ + $this->handle_post_events("mofify"); + } + } else { + $this->handle_post_events("add"); + } + + } + +} + +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/plugins/personal/connectivity/kolab.tpl b/plugins/personal/connectivity/kolab.tpl new file mode 100644 index 000000000..d0a02bc3e --- /dev/null +++ b/plugins/personal/connectivity/kolab.tpl @@ -0,0 +1,54 @@ +

{t}Kolab account{/t}

+ +{if $is_account ne 'true'} +{t}The kolab account is currently disabled. It's features can be adjusted if you add a mail account.{/t} +{else} + + + + + + + +
+ {t}Delegations{/t}
+ +
+ +   + +
+   + +

+ {t}Invitation{/t}
+  {t}Policy{/t}   + +

+

+ {t}Free Busy information{/t}
+ + + + + + + + + +
{t}URL{/t}
{t}Future{/t} {t}days{/t}
+

+

+ {t}Misc{/t}
+   {t}No mail size restriction{/t} +

+
+ +{/if} diff --git a/plugins/personal/connectivity/main.inc b/plugins/personal/connectivity/main.inc new file mode 100644 index 000000000..f511faf67 --- /dev/null +++ b/plugins/personal/connectivity/main.inc @@ -0,0 +1,141 @@ +dn); + sess_del ('edit'); + sess_del ('connectivity'); + } + + /* Create connectivity object on demand */ + if (!isset($_SESSION['connectivity']) || (isset($_GET['reset']) && + $_GET['reset'] == 1)){ + $_SESSION['connectivity']= new connectivity ($config, $ui->dn); + } + $connectivity= $_SESSION['connectivity']; + + /* save changes back to object */ + if (isset ($_SESSION['edit'])){ + $connectivity->save_object (); + } + + /* Enter edit mode? */ + if (isset($_POST['edit'])){ + + /* Check locking */ + if (($username= get_lock($ui->dn)) != ""){ + $_SESSION['back_plugin']= $plug; + gen_locked_message ($username, $ui->dn); + exit (); + } + + /* Lock the current entry */ + add_lock ($ui->dn, $ui->dn); + $_SESSION['dn']= $ui->dn; + $_SESSION['edit']= TRUE; + } + + /* save changes to LDAP and disable edit mode */ + if (isset($_POST['edit_finish'])){ + + /* Perform checks */ + $message= $connectivity->check (); + + /* No errors, save object */ + if (count ($message) == 0){ + $connectivity->save (); + gosa_log ("User/connectivity object'".$ui->dn."' has been saved"); + $connectivity->acl= "#none#"; + del_lock ($ui->dn); + sess_del ('edit'); + + /* Write back to session */ + $_SESSION['connectivity']= $connectivity; + } else { + /* Errors found, show message */ + show_errors ($message); + } + } + + /* Adjust acl's to mode */ + if (isset($_SESSION['edit'])){ + $acl= get_permissions ($ui->dn, $ui->subtreeACL); + $connectivity->acl= get_module_permission($acl, "connectivity", $ui->dn); + foreach ($connectivity->plugin_name as $name){ + $connectivity->plugin[$name]->acl= get_module_permission($acl, "$name", $ui->dn); + } + } else { + $acl= get_permissions ($ui->dn, $ui->subtreeACL); + $editacl= get_module_permission($acl, "connectivity", $ui->dn); + $connectivity->acl= "#none#"; + foreach ($connectivity->plugin_name as $name){ + $connectivity->plugin[$name]->acl= "#none#"; + } + } + + /* Execute formular */ + $display= $connectivity->execute (); + + /* Store changes in session */ + if (isset ($_SESSION['edit'])){ + $_SESSION['connectivity']= $connectivity; + } + + $info= ""; + + /* Are we in edit mode? */ + $in_edit_mode= false; + foreach ($connectivity->plugin_name as $name){ + $in_edit_mode|= $connectivity->plugin[$name]->is_account; + } + if ($in_edit_mode){ + $display.= "

"; + + if (isset($_SESSION['edit'])){ + $display.= "\n"; + $display.= " "; + $display.= "\n"; + $info= " ".$ui->dn." "; + } else { + $info= " ".$ui->dn." "; + if ($editacl != "#none#"){ + $info.= ""._("Click the 'Edit' button below to change informations in this dialog"); + $display.= "\n"; + } + $display.= "\n"; + } + } + $display.= "

\n"; + + /* Page header*/ + $display= print_header(get_template_path('images/proxy.png'), + _("Connectivity"), $info).$display; + +} + +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/plugins/personal/connectivity/oxchange.tpl b/plugins/personal/connectivity/oxchange.tpl new file mode 100644 index 000000000..2fe4817ce --- /dev/null +++ b/plugins/personal/connectivity/oxchange.tpl @@ -0,0 +1,53 @@ +{ if !$pg } +

{t}Open-Xchange Account{/t} +
+{t}Disabled by lack of Postgresql Support{/t}

+{else} +

{if $tabbed eq 1}{/if}{t}Open Xchange account{/t}

+ + + + + + + + +
+ + + + + + + + + + + + +
+ {t}Remember{/t} +
{t}Appointment Days{/t} {t}days{/t}
{t}Task Days{/t} {t}days{/t}
+
+   + + + + + + + + + + + + + +
+ {t}User Information{/t} +
{t}User Timezone{/t} +
+
+{/if} \ No newline at end of file diff --git a/plugins/personal/connectivity/phpgw.tpl b/plugins/personal/connectivity/phpgw.tpl new file mode 100644 index 000000000..b6a949e27 --- /dev/null +++ b/plugins/personal/connectivity/phpgw.tpl @@ -0,0 +1 @@ +

{if $tabbed eq 1}{/if}{t}PHPGroupware account{/t}

diff --git a/plugins/personal/connectivity/proxy.tpl b/plugins/personal/connectivity/proxy.tpl new file mode 100644 index 000000000..d9f4657e1 --- /dev/null +++ b/plugins/personal/connectivity/proxy.tpl @@ -0,0 +1,65 @@ +

{if $tabbed eq 1}{/if}{t}Proxy account{/t}

+ + + + +
+ + + + + + + +
+ + {t}Filter unwanted content (i.e. pornographic or violence related){/t} +
+ + {t}Limit proxy access to working time{/t} +
+ + + + +
+ +  :  + +  -  + +  :  + +
+
+   + + + {t}Restrict proxy usage by quota{/t} +
+ + + + +
+ +   + + {t}per{/t} {$pstate} + +
+
+
+ diff --git a/plugins/personal/connectivity/pureftpd.tpl b/plugins/personal/connectivity/pureftpd.tpl new file mode 100644 index 000000000..0506d2be7 --- /dev/null +++ b/plugins/personal/connectivity/pureftpd.tpl @@ -0,0 +1,79 @@ +

{if $tabbed eq 1}{/if}{t}FTP account{/t}

+ + + + + + + + + + + + + +
+ + + + + + + + + + + + +
+ {t}Bandwidth{/t} +
{t}Upload bandwidth{/t} {t}kb/s{/t}
{t}Download bandwidth{/t} {t}kb/s{/t}
+
+   + + + + + + + + + + + + + +
+ {t}Quota{/t} +
{t}Files{/t}
{t}Size{/t} {t}MB{/t}
+
+ + + + + + + + +
+ {t}Ratio{/t} +
{t}Uploaded / downloaded files{/t} + /
+
+ + + + + + +
+ {t}Miscellaneous{/t} +
{t}Temporary disable FTP access{/t}
+
+ + + diff --git a/plugins/personal/connectivity/webdav.tpl b/plugins/personal/connectivity/webdav.tpl new file mode 100644 index 000000000..14fbf3fe9 --- /dev/null +++ b/plugins/personal/connectivity/webdav.tpl @@ -0,0 +1 @@ +

{if $tabbed eq 1}{/if}{t}WebDAV account{/t}

diff --git a/plugins/personal/generic/class_user.inc b/plugins/personal/generic/class_user.inc new file mode 100644 index 000000000..99079e34d --- /dev/null +++ b/plugins/personal/generic/class_user.inc @@ -0,0 +1,1075 @@ + + \version 2.00 + \date 24.07.2003 + + This class provides the functionality to read and write all attributes + relevant for person, organizationalPerson, inetOrgPerson and gosaAccount + from/to the LDAP. It does syntax checking and displays the formulars required. + */ + +class user extends plugin +{ + /* Definitions */ + var $plHeadline= "Generic"; + var $plDescription= "This does something"; + + /* CLI vars */ + var $cli_summary= "Handling of GOsa's user base object"; + var $cli_description= "Some longer text\nfor help"; + var $cli_parameters= array("eins" => "Eins ist toll", "zwei" => "Zwei ist noch besser"); + + /* Plugin specific values */ + var $base= ""; + var $cn= ""; + var $personalTitle= ""; + var $academicTitle= ""; + var $homePostalAddress= ""; + var $homePhone= ""; + var $labeledURI= ""; + var $o= ""; + var $ou= ""; + var $departmentNumber= ""; + var $employeeNumber= ""; + var $employeeType= ""; + var $roomNumber= ""; + var $telephoneNumber= ""; + var $facsimileTelephoneNumber= ""; + var $mobile= ""; + var $pager= ""; + var $l= ""; + var $st= ""; + var $postalAddress= ""; + var $dob= "0"; + var $use_dob= "0"; + var $gender= "0"; + + var $jpegPhoto= "*removed*"; + var $photoData= ""; + var $old_jpegPhoto= ""; + var $old_photoData= ""; + var $cert_dialog= FALSE; + var $picture_dialog= FALSE; + + var $userPKCS12= ""; + var $userSMIMECertificate= ""; + var $userCertificate= ""; + var $certificateSerialNumber= ""; + var $old_certificateSerialNumber= ""; + var $old_userPKCS12= ""; + var $old_userSMIMECertificate= ""; + var $old_userCertificate= ""; + + var $gouvernmentOrganizationalUnit= ""; + var $houseIdentifier= ""; + var $street= ""; + var $postalCode= ""; + var $vocation= ""; + var $ivbbLastDeliveryCollective= ""; + var $gouvernmentOrganizationalPersonLocality= ""; + var $gouvernmentOrganizationalUnitDescription= ""; + var $gouvernmentOrganizationalUnitSubjectArea= ""; + var $functionalTitle= ""; + var $role= ""; + var $publicVisible= ""; + + /* variables to trigger password changes */ + var $pw_storage= "crypt"; + var $last_pw_storage= "unset"; + + /* attribute list for save action */ + var $attributes= array("sn", "givenName", "uid", "personalTitle", "academicTitle", + "homePostalAddress", "homePhone", "labeledURI", "o", "ou", "dob", "gender", + "departmentNumber", "employeeNumber", "employeeType", "l", "st", + "roomNumber", "telephoneNumber", "mobile", "pager", "cn", "userPKCS12", + "postalAddress", "facsimileTelephoneNumber", "userSMIMECertificate"); + + var $objectclasses= array("top", "person", "organizationalPerson", "inetOrgPerson", + "gosaAccount"); + + /* attributes that are part of the government mode */ + var $govattrs= array("gouvernmentOrganizationalUnit", "houseIdentifier", "vocation", + "ivbbLastDeliveryCollective", "gouvernmentOrganizationalPersonLocality", + "gouvernmentOrganizationalUnitDescription","gouvernmentOrganizationalUnitSubjectArea", + "functionalTitle", "certificateSerialNumber", "publicVisible", "street", "role", + "postalCode"); + + + /* constructor, if 'dn' is set, the node loads the given + 'dn' from LDAP */ + function user ($config, $dn= NULL) + { + /* Configuration is fine, allways */ + $this->config= $config; + + /* Load base attributes */ + plugin::plugin ($config, $dn); + + /* Load government mode attributes */ + if ($this->config->current['GOVERNMENTMODE']){ + + /* Copy all attributs */ + foreach ($this->govattrs as $val){ + if (isset($this->attrs["$val"][0])){ + $this->$val= $this->attrs["$val"][0]; + } + } + } + + /* Create me for new accounts */ + if ($dn == "new"){ + $this->is_account= TRUE; + } + + /* Make hash default to md5 if not set in config */ + if (!isset($this->config->current['HASH'])){ + $hash= "md5"; + } else { + $hash= $this->config->current['HASH']; + } + + /* Load data from LDAP? */ + if ($dn != NULL){ + + /* Do base conversation */ + if ($this->dn == "new"){ + $ui= get_userinfo(); + $this->base= dn2base($ui->dn); + } else { + $this->base= dn2base($dn); + } + + /* get password storage type */ + if (isset ($this->attrs['userPassword'][0])){ + if (preg_match ("/^{([^}]+)}(.+)/", $this->attrs['userPassword'][0], $matches)){ + $this->pw_storage= strtolower($matches[1]); + } else { + if ($this->attrs['userPassword'][0] != ""){ + $this->pw_storage= "clear"; + } else { + $this->pw_storage= $hash; + } + } + } else { + /* Preset with vaule from configuration */ + $this->pw_storage= $hash; + } + + /* Load extra attributes: certificate and picture */ + $this->load_cert(); + $this->load_picture(); + } + + /* Reset password storage indicator, used by password_change_needed() */ + if ($dn == "new"){ + $this->last_pw_storage= "unset"; + } else { + $this->last_pw_storage= $this->pw_storage; + } + + /* Generate dob entry */ + if (isset ($this->attrs['dateOfBirth'])){ + /* This entry is ISO 8601 conform */ + list($year, $month, $day)= split("-", $this->attrs['dateOfBirth'][0], 3); + $this->dob= mktime ( 0, 0, 0, $month, $day, $year); + $this->use_dob= "1"; + } else { + $this->use_dob= "0"; + } + + /* Put gender attribute to upper case */ + if (isset ($this->attrs['gender'])){ + $this->gender= strtoupper($this->attrs['gender'][0]); + } + } + + + /* execute generates the html output for this node */ + function execute() + { + $smarty= get_smarty(); + + /* Fill calendar */ + if ($this->dob == "0"){ + $date= getdate(); + } else { + $date= getdate($this->dob); + } + + $days= array(); + for($d= 1; $d<32; $d++){ + $days[$d]= $d; + } + $years= array(); + for($y= $date['year']-100; $y<=$date['year']+100; $y++){ + $years[]= $y; + } + $years['-']= ""; + $months= array(_("January"), _("February"), _("March"), _("April"), + _("May"), _("June"), _("July"), _("August"), _("September"), + _("October"), _("November"), _("December"), '-' => ''); + $smarty->assign("day", $date["mday"]); + $smarty->assign("days", $days); + $smarty->assign("months", $months); + $smarty->assign("month", $date["mon"]-1); + $smarty->assign("years", $years); + $smarty->assign("year", $date["year"]); + + /* Assign sex */ + $sex= array(0 => "", "F" => _("female"), "M" => _("male")); + $smarty->assign("gender_list", $sex); + + /* Get random number for pictures */ + srand((double)microtime()*1000000); + $smarty->assign("rand", rand(0, 10000)); + + /* Do we represent a valid gosaAccount? */ + if (!$this->is_account){ + echo " ". + _("This account has no valid GOsa extensions.").""; + return; + } + + /* Want picture edit dialog? */ + if (isset($_POST['edit_picture'])){ + /* Save values for later recovery, in case some presses + the cancel button. */ + $this->old_jpegPhoto= $this->jpegPhoto; + $this->old_photoData= $this->photoData; + $this->picture_dialog= TRUE; + $this->dialog= TRUE; + } + + /* Remove picture? */ + if (isset($_POST['picture_remove'])){ + $this->jpegPhoto= "*removed*"; + $this->set_picture ("./images/default.jpg"); + $this->is_modified= TRUE; + + return($smarty->fetch (get_template_path('generic_picture.tpl', TRUE, dirname(__FILE__)))); + } + + /* Save picture */ + if (isset($_POST['picture_edit_finish'])){ + + /* Check for clean upload */ + if ($_FILES['picture_file']['name'] != ""){ + if (!is_uploaded_file($_FILES['picture_file']['tmp_name'])) { + print_red(_("The specified file has not been uploaded via HTTP POST! Aborted.")); + exit; + } + + /* Activate new picture */ + $this->set_picture($_FILES['picture_file']['tmp_name']); + } + $this->picture_dialog= FALSE; + $this->dialog= FALSE; + $this->is_modified= TRUE; + } + + + /* Cancel picture */ + if (isset($_POST['picture_edit_cancel'])){ + + /* Restore values */ + $this->jpegPhoto= $this->old_jpegPhoto; + $this->photoData= $this->old_photoData; + + /* Update picture */ + $_SESSION['picture']= $this->photoData; + $this->picture_dialog= FALSE; + $this->dialog= FALSE; + } + + /* Toggle dob information */ + if (isset($_POST['set_dob'])){ + $this->use_dob= ($this->use_dob == "0")?"1":"0"; + } + + + /* Want certificate= */ + if (isset($_POST['edit_cert'])){ + + /* Save original values for later reconstruction */ + foreach (array("certificateSerialNumber", "userCertificate", + "userSMIMECertificate", "userPKCS12") as $val){ + + $oval= "old_$val"; + $this->$oval= $this->$val; + } + + $this->cert_dialog= TRUE; + $this->dialog= TRUE; + } + + + /* Cancel certificate dialog */ + if (isset($_POST['cert_edit_cancel'])){ + + /* Restore original values in case of 'cancel' */ + foreach (array("certificateSerialNumber", "userCertificate", + "userSMIMECertificate", "userPKCS12") as $val){ + + $oval= "old_$val"; + $this->$val= $this->$oval; + } + $this->cert_dialog= FALSE; + $this->dialog= FALSE; + } + + + /* Remove certificate? */ + foreach (array ("userCertificate", "userSMIMECertificate", "userPKCS12") as $val){ + if (isset($_POST["remove_$val"])){ + + /* Reset specified cert*/ + $this->$val= ""; + $this->is_modified= TRUE; + } + } + + + /* Upload new cert and close dialog? */ + if (isset($_POST['cert_edit_finish'])){ + + /* for all certificates do */ + foreach (array ("userCertificate", "userSMIMECertificate", "userPKCS12") + as $val){ + + /* Check for clean upload */ + if ($_FILES[$val."_file"]['name'] != "" && + is_uploaded_file($_FILES[$val."_file"]['tmp_name'])) { + + $this->set_cert("$val", $_FILES[$val."_file"]['tmp_name']); + } + } + + /* Save serial number */ + if (isset($_POST["certificateSerialNumber"]) && + $_POST["certificateSerialNumber"] != ""){ + + if (!is_id($_POST["certificateSerialNumber"])){ + print_red (_("Please enter a valid serial number")); + + foreach(array("userCertificate", "userSMIMECertificate", "userPKCS12") as $cert){ + if ($this->$cert != ""){ + $smarty->assign("$cert"."_state", _("present")); + } else { + $smarty->assign("$cert"."_state", _("absent")); + } + } + return ($smarty->fetch (get_template_path('generic_certs.tpl', TRUE, dirname(__FILE__)))); + } + + $this->certificateSerialNumber= $_POST["certificateSerialNumber"]; + $this->is_modified= TRUE; + } + + $this->cert_dialog= FALSE; + $this->dialog= FALSE; + } + + /* Display picture dialog */ + if ($this->picture_dialog){ + return($smarty->fetch (get_template_path('generic_picture.tpl', TRUE, dirname(__FILE__)))); + } + + /* Display cert dialog */ + if ($this->cert_dialog){ + foreach(array("userCertificate", "userSMIMECertificate", "userPKCS12") as $cert){ + if ($this->$cert != ""){ + $smarty->assign("$cert"."_state", _("present")); + } else { + $smarty->assign("$cert"."_state", _("absent")); + } + } + return($smarty->fetch (get_template_path('generic_certs.tpl', TRUE, dirname(__FILE__)))); + } + + /* Show us the edit screen */ + $smarty->assign("bases", $this->config->idepartments); + $smarty->assign("base_select", $this->base); + $smarty->assign("selectmode", chkacl($this->acl, "create")); + $smarty->assign("certificatesACL", chkacl($this->acl, "certificates")); + $smarty->assign("jpegPhotoACL", chkacl($this->acl, "jpegPhoto")); + + /* Prepare password hashes */ + if ($this->pw_storage == ""){ + $this->pw_storage= $this->config->current['HASH']; + } + + $temp = passwordMethod::get_available_methods(); + $hashes = $temp['name']; + + $smarty->assign("pwmode", $hashes); + $smarty->assign("pwmode_select", $this->pw_storage); + $smarty->assign("passwordStorageACL", chkacl($this->acl, "passwordStorage")); + + /* Load attributes and acl's */ + foreach($this->attributes as $val){ + $smarty->assign("$val", $this->$val); + $smarty->assign("$val"."ACL", chkacl($this->acl,$val)); + } + + /* Save government mode attributes */ + if (isset($this->config->current['GOVERNMENTMODE']) && + preg_match('/true/i', $this->config->current['GOVERNMENTMODE'])){ + $smarty->assign("governmentmode", "true"); + $ivbbmodes= array("nein", "ivbv", "testa", "ivbv,testa", "internet", + "internet,ivbv", "internet,testa", "internet,ivbv,testa", "ja"); + $smarty->assign("ivbbmodes", $ivbbmodes); + foreach ($this->govattrs as $val){ + $smarty->assign("$val", $this->$val); + $smarty->assign("$val"."ACL", chkacl($this->acl,$val)); + } + } else { + $smarty->assign("governmentmode", "false"); + } + + /* Special mode for uid */ + $uidACL= ""; + if (isset ($this->dn)){ + if ($this->dn != "new"){ + $uidACL="readonly"; + } + } else { + $uidACL= "readonly"; + } + if ($uidACL == ""){ + $uidACL= chkacl($this->acl, "uid"); + } + $smarty->assign("uidACL", $uidACL); + $smarty->assign("is_template", $this->is_template); + $smarty->assign("use_dob", $this->use_dob); + + if (isset($this->parent)){ + if (isset($this->parent->by_object['phoneAccount']) && + $this->parent->by_object['phoneAccount']->is_account){ + $smarty->assign("has_phoneaccount", "true"); + } else { + $smarty->assign("has_phoneaccount", "false"); + } + } + + return($smarty->fetch (get_template_path('generic.tpl', TRUE, dirname(__FILE__)))); + } + + + /* remove object from parent */ + function remove_from_parent() + { + $ldap= $this->config->get_ldap_link(); + $ldap->rmdir ($this->dn); + + /* Delete references to groups */ + $ldap->cd ($this->config->current['BASE']); + $ldap->search ("(&(objectClass=posixGroup)(memberUid=".$this->uid."))", array("uid")); + while ($ldap->fetch()){ + $g= new group($this->config, $ldap->getDN()); + $g->removeUser($this->uid); + $g->save (); + } + + /* Delete references to object groups */ + $ldap->cd ($this->config->current['BASE']); + $ldap->search ("(&(objectClass=gosaGroupOfNames)(member=".$this->dn."))", array("cn")); + while ($ldap->fetch()){ + $og= new ogroup($this->config, $ldap->getDN()); + unset($og->member[$this->dn]); + $og->save (); + } + + /* Optionally execute a command after we're done */ + $this->handle_post_events("remove"); + } + + + /* Save data to object */ + function save_object() + { + if (isset($_POST['generic'])){ + + /* Parents save function */ + plugin::save_object (); + + /* Save government mode attributes */ + if ($this->config->current['GOVERNMENTMODE']){ + foreach ($this->govattrs as $val){ + if (chkacl ($this->acl, "$val") == "" && isset ($_POST["$val"])){ + $data= stripcslashes($_POST["$val"]); + if ($data != $this->$val){ + $this->is_modified= TRUE; + } + $this->$val= $data; + } + } + } + + /* In template mode, the uid is autogenerated... */ + if ($this->is_template){ + $this->uid= strtolower($this->sn); + $this->givenName= $this->sn; + } + + /* Save base and pw_storage, since these are no LDAP attributes */ + if (isset($_POST['base'])){ + foreach(array("base", "pw_storage") as $val){ + $data= validate($_POST[$val]); + if ($data != $this->$val){ + $this->is_modified= TRUE; + } + $this->$val= $data; + } + } + } + } + + function rebind($ldap, $referral) + { + $credentials= LDAP::get_credentials($referral, $this->config->current['REFERRAL']); + if (ldap_bind($ldap, $credentials['ADMIN'], $credentials['PASSWORD'])) { + $this->error = "Success"; + $this->hascon=true; + $this->reconnect= true; + return (0); + } else { + $this->error = "Could not bind to " . $binddn; + return NULL; + } + } + + /* Save data to LDAP, depending on is_account we save or delete */ + function save() + { + /* First use parents methods to do some basic fillup in $this->attrs */ + plugin::save (); + + /* Remove additional objectClasses */ + $tmp= array(); + foreach ($this->attrs['objectClass'] as $key => $set){ + $found= false; + foreach (array("ivbbEntry", "gosaUserTemplate") as $val){ + if (preg_match ("/^$set$/i", $val)){ + $found= true; + break; + } + } + if (!$found){ + $tmp[]= $set; + } + } + + /* Replace the objectClass array. This is done because of the + separation into government and normal mode. */ + $this->attrs['objectClass']= $tmp; + + /* Add objectClasss for template mode? */ + if ($this->is_template){ + $this->attrs['objectClass'][]= "gosaUserTemplate"; + } + + /* Hard coded government mode? */ + if ($this->config->current['GOVERNMENTMODE'] != 'false'){ + $this->attrs['objectClass'][]= "ivbbEntry"; + + /* Copy standard attributes */ + foreach ($this->govattrs as $val){ + if ($this->$val != ""){ + $this->attrs["$val"]= $this->$val; + } elseif (!$this->new) { + $this->attrs["$val"]= array(); + } + } + + } + + /* Special handling for attribute userCertificate needed */ + if ($this->userCertificate != ""){ + $this->attrs["userCertificate;binary"]= $this->userCertificate; + $remove_userCertificate= false; + } else { + $remove_userCertificate= true; + } + + /* Special handling for dob value */ + if ($this->use_dob == "1"){ + $this->attrs["dob"]= date("Y-m-d", $this->dob); + } else { + if ($this->new) { + unset($this->attrs["dob"]); + } else { + $this->attrs["dob"]= array(); + } + } + if ($this->gender == "0"){ + if ($this->new) { + unset($this->attrs["gender"]); + } else { + $this->attrs["gender"]= array(); + } + } + + /* Special handling for attribute jpegPhote needed, scale image via + image magick to 147x200 pixels and inject resulting data. */ + if ($this->jpegPhoto != "*removed*"){ + + /* Fallback if there's no image magick inside PHP */ + if (!function_exists("imagick_blob2image")){ + /* Get temporary file name for conversation */ + $fname = tempnam ("/tmp", "GOsa"); + + /* Open file and write out photoData */ + $fp = fopen ($fname, "w"); + fwrite ($fp, $this->photoData); + fclose ($fp); + + /* Build conversation query. Filename is generated automatically, so + we do not need any special security checks. Exec command and save + output. For PHP safe mode, you'll need a configuration which respects + image magick as executable... */ + $query= "convert -size 147x200 $fname -resize 147x200 +profile \"*\" -"; + @DEBUG (DEBUG_SHELL, __LINE__, __FUNCTION__, __FILE__, + $query, "Execute"); + + /* Read data written by convert */ + $output= ""; + $sh= popen($query, 'r'); + while (!feof($sh)){ + $output.= fread($sh, 4096); + } + pclose($sh); + + unlink($fname); + + /* Save attribute */ + $this->attrs["jpegPhoto"] = $output; + + } else { + + /* Load the new uploaded Photo */ + if(!$handle = imagick_blob2image($this->photoData)) { + gosa_log("Can't Load image"); + } + + /* Resizing image to 147x200 and blur */ + if(!imagick_resize($handle,147,200,IMAGICK_FILTER_GAUSSIAN,0)){ + gosa_log("imagick_resize failed"); + } + + /* Converting image to JPEG */ + if(!imagick_convert($handle,"JPEG")) { + gosa_log("Can't Convert to JPEG"); + } + + /* Creating binary Code for the Image */ + if(!$dump = imagick_image2blob($handle)){ + gosa_log("Can't create blob for image"); + } + + /* Sending Image */ + $output= $dump; + + /* Save attribute */ + $this->attrs["jpegPhoto"] = $output; + } + + } elseif(!$this->new) { + $this->attrs["jpegPhoto"] = array(); + } + + /* Build new dn */ + if (isset($this->config->current['DNMODE']) && $this->config->current['DNMODE'] == "uid"){ + $new_dn= 'uid='.$this->uid.','.get_people_ou().$this->base; + } else { + $new_dn= 'cn='.$this->cn.','.get_people_ou().$this->base; + } + + /* This only gets called when user is renaming himself */ + $ldap= $this->config->get_ldap_link(); + if ($this->dn != $new_dn){ + + /* Write entry on new 'dn' */ + $this->move($this->dn, $new_dn); + + /* Happen to use the new one */ + change_ui_dn($this->dn, $new_dn); + $this->dn= $new_dn; + } + + + /* Save data. Using 'modify' implies that the entry is already present, use 'add' for + new entries. So do a check first... */ + $ldap->cat ($this->dn); + if ($ldap->fetch()){ + $mode= "modify"; + } else { + $mode= "add"; + $ldap->cd($this->config->current['BASE']); + $ldap->create_missing_trees(preg_replace('/^[^,]+,/', '', $this->dn)); + } + + /* Set password to some junk stuff in case of templates */ + if ($this->is_template){ + $this->attrs['userPassword']= '{crypt}N0T$3T4N0W'; + } + + @DEBUG (DEBUG_LDAP, __LINE__, __FUNCTION__, __FILE__, + $this->attributes, "Save via $mode"); + + /* Finally write data with selected 'mode' */ + $ldap->cd ($this->dn); + $ldap->$mode ($this->attrs); + if (show_ldap_error($ldap->get_error())){ + return (1); + } + + /* Remove cert? + For some reason, the 'ldap' class doesn't want to remove binary entries, so I need + to work around myself. */ + if ($remove_userCertificate == true && !$this->new){ + + /* Reset array, assemble new, this should be reworked */ + $this->attrs= array(); + $this->attrs['userCertificate;binary']= array(); + + /* Prepare connection */ + if (!($ds = ldap_connect($this->config->current['SERVER']))) { + die ("Could not connect to LDAP server"); + } + ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3); + if (function_exists("ldap_set_rebind_proc") && isset($this->config->current['RECURSIVE']) && $this->config->current['RECURSIVE'] == "true") { + ldap_set_option($this->cid, LDAP_OPT_REFERRALS, 1); + ldap_set_rebind_proc($ds, array(&$this, "rebind")); + } + if(isset($config->current['TLS']) && $config->current['TLS'] == "true"){ + ldap_start_tls($ds); + } + if (!($res = @ldap_bind($ds, $this->config->current['ADMIN'], + $this->config->current['PASSWORD']))) { + die ("Could not bind to LDAP"); + } + + /* Modify using attrs */ + @ldap_mod_del($ds,$this->dn,$this->attrs); + ldap_close($ds); + + } + + /* Kerberos server defined? */ + if (isset($this->config->data['SERVERS']['KERBEROS'])){ + $cfg= $this->config->data['SERVERS']['KERBEROS']; + } + if (isset($cfg['SERVER']) && function_exists('kadm5_init_with_password')){ + + /* Connect to the admin interface */ + $handle = kadm5_init_with_password($cfg['SERVER'], $cfg['REALM'], + $cfg['ADMIN'], $cfg['PASSWORD']); + + /* Errors? */ + if ($handle === FALSE){ + print_red (_("Kerberos database communication failed")); + return (2); + } + + /* Build user principal, get list of existsing principals */ + $principal= $this->uid."@".$cfg['REALM']; + $principals = kadm5_get_principals($handle); + + /* User exists in database? */ + if (in_array($principal, $principals)){ + + /* Ok. User exists. Remove him/her when pw_storage has + changed to be NOT kerberos. */ + if ($this->pw_storage != "kerberos"){ + $ret= kadm5_delete_principal ( $handle, $principal); + + if ($ret === FALSE){ + print_red (_("Can't remove user from kerberos database.")); + } + } + + } else { + + /* User doesn't exists, create it when pw_storage is kerberos. */ + if ($this->pw_storage == "kerberos"){ + $ret= kadm5_create_principal ( $handle, $principal); + + if ($ret === FALSE){ + print_red (_("Can't add user to kerberos database.")); + } + } + + } + + /* Free kerberos admin handle */ + kadm5_destroy($handle); + } + + /* Optionally execute a command after we're done */ + if ($mode == "add"){ + $this->handle_post_events("add"); + } elseif ($this->is_modified){ + $this->handle_post_events("modify"); + } + + return (0); + } + + + /* Check formular input */ + function check() + { + $message= array(); + + /* Assemble cn */ + $this->cn= $this->givenName." ".$this->sn; + + /* Permissions for that base? */ + if (isset($this->config->current['DNMODE']) && $this->config->current['DNMODE'] == "uid"){ + $new_dn= 'uid='.$this->uid.','.get_people_ou().$this->base; + } else { + $new_dn= 'cn='.$this->cn.','.get_people_ou().$this->base; + } + + $ui= get_userinfo(); + $acl= get_permissions ($new_dn, $ui->subtreeACL); + $acl= get_module_permission($acl, "user", $new_dn); + if ($this->dn == "new" && chkacl($acl, "create") != ""){ + $message[]= _("You have no permissions to create a user on this 'Base'."); + } elseif ($this->dn != $new_dn){ + $acl= get_permissions ($this->dn, $ui->subtreeACL); + $acl= get_module_permission($acl, "user", $this->dn); + if (chkacl($acl, "create") != ""){ + $message[]= _("You have no permissions to move a user from the original 'Base'."); + } + } + + /* must: sn, givenName, uid */ + if ($this->sn == "" && chkacl ($this->acl, "sn") == ""){ + $message[]= _("The required field 'Name' is not set."); + } + + /* UID already used? */ + $ldap= $this->config->get_ldap_link(); + $ldap->cd($this->config->current['BASE']); + $ldap->search("(uid=$this->uid)", array("uid")); + $ldap->fetch(); + if ($ldap->count() != 0 && $this->dn == 'new'){ + $message[]= _("There's already a person with this 'Login' in the database."); + } + + /* In template mode, the uid and givenName are autogenerated... */ + if (!$this->is_template){ + if ($this->givenName == "" && chkacl ($this->acl, "givenName") == ""){ + $message[]= _("The required field 'Given name' is not set."); + } + if ($this->uid == "" && chkacl ($this->acl, "uid") == ""){ + $message[]= _("The required field 'Login' is not set."); + } + if (!(isset($this->config->current['DNMODE']) && $this->config->current['DNMODE'] == "uid")){ + $ldap->cd($this->config->current['BASE']); + $ldap->search("(cn=".$this->cn.")", array("uid")); + $ldap->fetch(); + if ($ldap->count() != 0 && $this->dn != $new_dn && $this->dn == 'new'){ + $message[]= _("There's already a person with this 'Name'/'Given name' combination in the database."); + } + } + } + + /* Check for valid input */ + if (!is_uid($this->uid)){ + $message[]= _("The field 'Login' contains invalid characters. Lowercase, numbers and dashes are allowed."); + } + if (!is_url($this->labeledURI)){ + $message[]= _("The field 'Homepage' contains an invalid URL definition."); + } + if (preg_match ("/[\\\\]/", $this->sn)){ + $message[]= _("The field 'Name' contains invalid characters."); + } + if (preg_match ("/[\\\\]/", $this->givenName)){ + $message[]= _("The field 'Given name' contains invalid characters."); + } + + /* Check phone numbers */ + if (!is_phone_nr($this->homePhone)){ + $message[]= _("The field 'Phone' contains an invalid phone number."); + } + if (!is_phone_nr($this->telephoneNumber)){ + $message[]= _("The field 'Phone' contains an invalid phone number."); + } + if (!is_phone_nr($this->facsimileTelephoneNumber)){ + $message[]= _("The field 'Fax' contains an invalid phone number."); + } + if (!is_phone_nr($this->mobile)){ + $message[]= _("The field 'Mobile' contains an invalid phone number."); + } + if (!is_phone_nr($this->pager)){ + $message[]= _("The field 'Pager' contains an invalid phone number."); + } + + /* Check for reserved characers */ + if (preg_match ('/[,+"<>;]/', $this->givenName)){ + $message[]= _("The field 'Given name' contains invalid characters."); + } + if (preg_match ('/[,+"<>;]/', $this->sn)){ + $message[]= _("The field 'Name' contains invalid characters."); + } + + return $message; + } + + + /* Indicate whether a password change is needed or not */ + function password_change_needed() + { + return ($this->pw_storage != $this->last_pw_storage); + } + + + /* Load a jpegPhoto from LDAP, this is going to be simplified later on */ + function load_picture() + { + /* make connection and read jpegPhoto */ + $ds= ldap_connect($this->config->current['SERVER']); + ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3); + if (function_exists("ldap_set_rebind_proc") && isset($this->config->current['RECURSIVE']) && $this->config->current['RECURSIVE'] == "true") { + ldap_set_option($this->cid, LDAP_OPT_REFERRALS, 1); + ldap_set_rebind_proc($ds, array(&$this, "rebind")); + } + + if(isset($this->config->current['TLS']) && + $this->config->current['TLS'] == "true"){ + + ldap_start_tls($ds); + } + + $r= ldap_bind($ds); + $sr= @ldap_read($ds, $this->dn, "jpegPhoto=*", array("jpegPhoto")); + + /* in case we don't get an entry, load a default picture */ + $this->set_picture ("./images/default.jpg"); + $this->jpegPhoto= "*removed*"; + + /* fill data from LDAP */ + if ($sr) { + $ei=ldap_first_entry($ds, $sr); + if ($ei) { + if ($info = ldap_get_values_len($ds, $ei, "jpegPhoto")){ + $this->photoData= $info[0]; + $_SESSION['picture']= $this->photoData; + $this->jpegPhoto= ""; + } + } + } + + /* close conncetion */ + ldap_unbind($ds); + } + + + /* Load a certificate from LDAP, this is going to be simplified later on */ + function load_cert() + { + $ds= ldap_connect($this->config->current['SERVER']); + ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3); + if (function_exists("ldap_set_rebind_proc") && isset($this->config->current['RECURSIVE']) && $this->config->current['RECURSIVE'] == "true") { + ldap_set_option($this->cid, LDAP_OPT_REFERRALS, 1); + ldap_set_rebind_proc($ds, array(&$this, "rebind")); + } + if(isset($this->config->current['TLS']) && + $this->config->current['TLS'] == "true"){ + + ldap_start_tls($ds); + } + + $r= ldap_bind($ds); + $sr= @ldap_read($ds, $this->dn, "userCertificate=*", array("userCertificate")); + + if ($sr) { + $ei= @ldap_first_entry($ds, $sr); + + if ($ei) { + if (!$info = @ldap_get_values_len($ds, $ei, "userCertificate;binary")){ + $this->userCertificate= ""; + } else { + $this->userCertificate= $info[0]; + } + } + } else { + $this->userCertificate= ""; + } + + ldap_unbind($ds); + } + + + /* Load picture from file to object */ + function set_picture($filename) + { + if (!is_file($filename)){ + $filename= "./images/default.jpg"; + $this->jpegPhoto= "*removed*"; + } + + $fd = fopen ($filename, "rb"); + $this->photoData= fread ($fd, filesize ($filename)); + $_SESSION['picture']= $this->photoData; + $this->jpegPhoto= ""; + + fclose ($fd); + } + + + /* Load certificate from file to object */ + function set_cert($cert, $filename) + { + $fd = fopen ($filename, "rb"); + $this->$cert= fread ($fd, filesize ($filename)); + fclose ($fd); + $this->is_modified= TRUE; + } + + /* Adapt from given 'dn' */ + function adapt_from_template($dn) + { + plugin::adapt_from_template($dn); + + /* Get base */ + $this->base= preg_replace('/^[^,]+,'.get_people_ou().'/i', '', $dn); + + if ($this->config->current['GOVERNMENTMODE']){ + + /* Walk through govattrs */ + foreach ($this->govattrs as $val){ + + if (isset($this->attrs["$val"][0])){ + + /* If attribute is set, replace dynamic parts: + %sn, %givenName and %uid. Fill these in our local variables. */ + $value= $this->attrs["$val"][0]; + + foreach (array("sn", "givenName", "uid") as $repl){ + if (preg_match("/%$repl/i", $value)){ + $value= preg_replace ("/%$repl/i", + $this->parent->$repl, $value); + } + } + $this->$val= $value; + } + } + } + + /* Get back uid/sn/givenName */ + if ($this->parent != NULL){ + $this->uid= $this->parent->uid; + $this->sn= $this->parent->sn; + $this->givenName= $this->parent->givenName; + } + } + +} + +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/plugins/personal/generic/generic.tpl b/plugins/personal/generic/generic.tpl new file mode 100644 index 000000000..3890bd021 --- /dev/null +++ b/plugins/personal/generic/generic.tpl @@ -0,0 +1,400 @@ + + + + + + + + + + + + + + + + + + +
+

{t}Personal information{/t}

+
+ {t}Personal picture{/t} +
+ +
+ + + + + + + {if $is_template ne "true"} + + + + + + + + + {/if} + + + + + + + + + + + + + + + + + + + + + +
{t}Name{/t}{$must}
{t}Given name{/t}{$must}
{t}Login{/t}{$must}
+
+ {t}Personal title{/t} +
+
+ +
{t}Academic title{/t} + +
+
+ {t}Date of birth{/t} +
+
+ {if $use_dob eq 1} + + + + + + {else} + + {/if} +
+ {t}Sex{/t} + + +
+
+ {t}Base{/t} +
+
+ +
+
+   + + + + + + + + + + + + + + + + + + + + + + + + + {if $is_template ne "true"} + + + + + + + + + {/if} + +
{t}Address{/t}
{t}Private phone{/t}
{t}Homepage{/t}
+
+
{t}Password storage{/t} + +
{t}Certificates{/t} + +
{t}Kerberos{/t}
+
+ +

 

+ + + + + + + + + + + + {if $governmentmode ne "true"} + + + + + + + + + + + + + + {else} + + + + + + + + + + {/if} + +
+

{t}Organizational information{/t}

+
+ + + + + + + + + + + + + + + + + + + + + +
{t}Organization{/t}
{t}Department{/t}
{t}Department No.{/t} + +
{t}Employee No.{/t} + +
{t}Employee type{/t} + +
+
+   + + + + + + + {if $has_phoneaccount ne "true"} + + + + + {/if} + + + + + + + + + + + + +
{t}Room No.{/t}
{t}Phone{/t} + +
{t}Mobile{/t}
{t}Pager{/t} + +
{t}Fax{/t} +
+
+   + + + + + + + + + + + + + + +
{t}Location{/t}
{t}State{/t}
{t}Address{/t} + +
+
+ + + + + + + + + + + + + + + + + + + + + +
{t}Vocation{/t}
{t}Unit description{/t} + +
{t}Subject area{/t} + +
{t}Functional title{/t} + +
{t}Role{/t} + +
+
+ + + + + + + + + + + + + + + + + + + + + +
{t}Person locality{/t} + +
{t}Unit{/t} +
{t}Street{/t} + +
{t}Postal code{/t} + +
{t}House identifier{/t} + +
+
+ + + + + + + + + + + + + + + + + + + + + +
{t}Room No.{/t}
{t}Phone{/t} + {if $has_phoneaccount ne "true"} + + {else} + {t}Please use the phone tab{/t} + {/if} +
{t}Fax{/t} + +
{t}Last delivery{/t} + +
{t}Public visible{/t} + +
+
+ + + + + + diff --git a/plugins/personal/generic/generic_certs.tpl b/plugins/personal/generic/generic_certs.tpl new file mode 100644 index 000000000..8fadaa0f9 --- /dev/null +++ b/plugins/personal/generic/generic_certs.tpl @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + {if $governmentmode eq "true"} + + + + + {/if} +
+

{t}Certificates{/t}

+
+ {t}Standard certificate{/t} ({$userCertificate_state}) + + +   + +
+ {t}S/MIME certificate{/t} ({$userSMIMECertificate_state}) + + +   + +
+ {t}PKCS12 certificate{/t} ({$userPKCS12_state}) + + +   + +
+ {t}Certificate serial number{/t} + + +
+ +
+

+ +   + +

+ diff --git a/plugins/personal/generic/generic_picture.tpl b/plugins/personal/generic/generic_picture.tpl new file mode 100644 index 000000000..29384aa5d --- /dev/null +++ b/plugins/personal/generic/generic_picture.tpl @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + +
+

{t}Personal picture{/t}

+
+ + + + +   + +
+
+

+ +   + +

+ diff --git a/plugins/personal/generic/main.inc b/plugins/personal/generic/main.inc new file mode 100644 index 000000000..5dc5c8d51 --- /dev/null +++ b/plugins/personal/generic/main.inc @@ -0,0 +1,192 @@ +dn); + sess_del ('edit'); + sess_del ('user'); + } + + /* Create user object on demand */ + if (!isset($_SESSION['user']) || (isset($_GET['reset']) && $_GET['reset'] == 1)){ + $_SESSION['user']= new user ($config, $ui->dn); + } + $user= $_SESSION['user']; + + /* save changes back to object */ + if (isset ($_SESSION['edit'])){ + $user->save_object (); + } + + /* Enter edit mode? */ + if (isset($_POST['edit'])){ + + /* Check locking */ + if (($username= get_lock($ui->dn)) != ""){ + $_SESSION['back_plugin']= $plug; + gen_locked_message ($username, $ui->dn); + exit (); + } + + /* Lock the current entry */ + add_lock ($ui->dn, $ui->dn); + $_SESSION['dn']= $ui->dn; + $_SESSION['edit']= TRUE; + } + + /* Adjust acl's to mode */ + if (isset($_SESSION['edit'])){ + $acl= get_permissions ($ui->dn, $ui->subtreeACL); + $user->acl= get_module_permission($acl, "user", $ui->dn); + } else { + $acl= get_permissions ($ui->dn, $ui->subtreeACL); + $editacl= get_module_permission($acl, "user", $ui->dn); + $user->acl= "#none#"; + } + + /* Perform password change */ + if (isset($_POST['password_finish'])){ + + /* For security reasons, check if user is allowed to set password again */ + if (chkacl($user->acl, "password") == "" || chkacl($user->acl, "create")){ + + /* Check input and feed errors into 'message' */ + $message= array(); + + /* Sanity checks... */ + if ($_POST['new_password'] != $_POST['repeated_password']){ + + /* Matching passwords in new and repeated? */ + $message[]= _("The passwords you've entered as 'New password' and 'Repeated new password' do not match."); + } else { + + /* Empty password is not permitted by default. */ + if ($_POST['new_password'] == ""){ + $message[]= _("The password you've entered as 'New password' is empty."); + } + } + + /* Errors, or change password? */ + if (count($message) != 0){ + + /* Show error message and continue editing */ + show_errors ($message); + $display.= $smarty->fetch(get_template_path('password.tpl', TRUE)); + return ($display); + } + change_password ($user->dn, $_POST['new_password'], 0, $user->pw_storage); + gosa_log ("Password for '".$user->dn."' has been changed"); + + } else { + + /* Missing permissions, show message */ + print_red (_("You are not allowed to set your password!")); + } + + $user->acl= "#none#"; + del_lock ($ui->dn); + } + + /* save changes to LDAP and disable edit mode */ + if (isset($_POST['edit_finish'])){ + + /* Perform checks */ + $message= $user->check (); + + /* No errors, save object */ + if (count ($message) == 0){ + $user->save (); + gosa_log ("User/generic object'".$ui->dn."' has been saved"); + $user->acl= "#none#"; + del_lock ($ui->dn); + sess_del ('edit'); + + /* Save object */ + $_SESSION['user']= $user; + + /* Need to reset the password? */ + if($user->password_change_needed()){ + $display.= $smarty->fetch(get_template_path('password.tpl', TRUE)); + return ($display); + } + + } else { + /* Errors found, show message */ + show_errors ($message); + } + } + + /* Execute formular */ + $display.= $user->execute (); + + /* Store changes in session */ + if (isset ($_SESSION['edit'])){ + $_SESSION['user']= $user; + } + + $info = ""; + /* Show page footer depending on the mode */ + if (!$user->cert_dialog && !$user->picture_dialog && $user->is_account){ + $display.= "

"; + + /* Are we in edit mode? */ + if (isset($_SESSION['edit'])){ + $display.= "\n"; + $display.= " "; + $display.= "\n"; + $info= " ".$ui->dn." "; + } else { + /* 'viewid' may be set by i.e. the phonelist plugin. This + means that we want to go back... */ + if (isset ($viewid)){ + $str= _("Back"); + $fn = "back"; + } else { + $str= _("Edit"); + $fn = "edit"; + $info= " ".$ui->dn." "; + } + if ($fn == "edit" && isset($editacl) && $editacl != "#none#"){ + $info.= " ". + _("Click the 'Edit' button below to change informations in this dialog"); + $display.= "\n"; + } + $display.= "\n"; + } + $display.= "

\n"; + } + + /* Page header*/ + $display= print_header(get_template_path('images/personal.png'), + _("Generic user information"), $info).$display; + +} + +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/plugins/personal/generic/password.tpl b/plugins/personal/generic/password.tpl new file mode 100644 index 000000000..b39727155 --- /dev/null +++ b/plugins/personal/generic/password.tpl @@ -0,0 +1,28 @@ +

+ {t}You have changed the method your password is stored in the ldap database. For that reason you've to enter your password at this point again. GOsa will then encode it with the selected method.{/t} +

+ + + + + + + + + + +
{t}New password{/t}
{t}Repeat new password{/t}
+
+

+ +   + +

+ + + diff --git a/plugins/personal/mail/class_mailAccount.inc b/plugins/personal/mail/class_mailAccount.inc new file mode 100644 index 000000000..365252c3d --- /dev/null +++ b/plugins/personal/mail/class_mailAccount.inc @@ -0,0 +1,800 @@ + + \version 2.00 + \date 24.07.2003 + + This class provides the functionality to read and write all attributes + relevant for gosaMailAccounts from/to the LDAP. It does syntax checking + and displays the formulars required. + */ + +/* Load sieve support */ +@require_once ("class_sieve.inc"); + +/* Load mail methods */ +global $BASE_DIR; +get_dir_list("$BASE_DIR/include"); + +class mailAccount extends plugin +{ + /* Definitions */ + var $plHeadline= "Mail"; + var $plDescription= "This does something"; + var $method= "mailMethod"; + + /* CLI vars */ + var $cli_summary= "Manage users mail account"; + var $cli_description= "Some longer text\nfor help"; + var $cli_parameters= array("eins" => "Eins ist toll", "zwei" => "Zwei ist noch besser"); + + /* plugin specific values */ + var $mail= ""; + var $uid= ""; + var $gosaMailAlternateAddress= array(); + var $gosaMailForwardingAddress= array(); + var $gosaMailDeliveryMode= "[L ]"; + var $gosaMailServer= ""; + var $gosaMailQuota= ""; + var $gosaMailMaxSize= ""; + var $gosaVacationMessage= ""; + var $gosaSpamSortLevel= ""; + var $gosaSpamMailbox= ""; + + var $quotaUsage= 0; + var $forward_dialog= FALSE; + var $folder_prefix= ""; + var $mailboxList= array(); + var $default_permissions= "none"; + var $member_permissions= "post"; + var $members= array(); + var $admins= array(); + var $vacations= array(); + var $perms= array( "lrs" => "read", "lrsp" => "post", "lrsip" => "append", + "lrswipcd" => "write", "lrswipcda" => "all" ); + + /* attribute list for save action */ + var $attributes= array("mail", "gosaMailServer", "gosaMailQuota", "gosaMailMaxSize", + "gosaMailDeliveryMode", "gosaSpamSortLevel", "gosaSpamMailbox", + "gosaVacationMessage", "uid"); + var $objectclasses= array("gosaMailAccount"); + + + /* constructor, if 'dn' is set, the node loads the given + 'dn' from LDAP */ + function mailAccount ($config, $dn= NULL) + { + /* Configuration is fine, allways */ + $this->config= $config; + + /* Load bases attributes */ + plugin::plugin($config, $dn); + + /* Set mailMethod to the one defined in gosa.conf */ + if (isset($this->config->current['MAILMETHOD'])){ + $method= $this->config->current['MAILMETHOD']; + if (class_exists("mailMethod$method")){ + $this->method= "mailMethod$method"; + } else { + print_red(sprintf(_("There is no mail method '%s' specified in your gosa.conf available."), $method)); + } + } + + /* Preset folder prefix. Will change it later to respect + altnamespace. */ + if (isset($this->config->current['CYRUSUNIXSTYLE']) && $this->config->current['CYRUSUNIXSTYLE'] == "true"){ + $this->folder_prefix= "user/"; + } else { + $this->folder_prefix= "user."; + } + + if ($dn != NULL){ + + /* Load attributes containing arrays */ + foreach (array("gosaMailAlternateAddress", "gosaMailForwardingAddress") as $val){ + if (isset($this->attrs["$val"]["count"])){ + for ($i= 0; $i<$this->attrs["$val"]["count"]; $i++){ + array_push($this->$val, $this->attrs["$val"][$i]); + } + } + } + + /* Only do IMAP actions if gosaMailServer attribute is set */ + if (isset ($this->attrs["gosaMailServer"][0])){ + $method= new $this->method($this->config); + $id= $method->uattrib; + if ($method->connect($this->attrs["gosaMailServer"][0])){ + $quota= $method->getQuota($this->folder_prefix.$this->$id); + $this->quotaUsage= $quota['quotaUsage']; + $this->gosaMailQuota= $quota['gosaMailQuota']; + $this->mailboxList= $method->getMailboxList( + $this->folder_prefix.$this->$id, + $this->$id); + $method->disconnect(); + } + + /* Adapt attributes if needed */ + $method->fixAttributesOnLoad($this); + } + } + + /* Fill vacation array */ + $this->vacation= array(); + if (isset($this->config->current['VACATIONDIR'])){ + $dir= $this->config->current['VACATIONDIR']; + if (is_dir($dir) && is_readable($dir)){ + + /* Look for files and build the vacation array */ + $dh= opendir($dir); + while ($file = readdir($dh)){ + $description= $this->parse_vacation("$dir/$file"); + if ($description != ""){ + $this->vacation["$dir/$file"]= $description; + } + } + closedir($dh); + } + } + + /* Get global filter config */ + if (!is_global("mailfilter")){ + $ui= get_userinfo(); + $base= get_base_from_people($ui->dn); + $mailfilter= array( "depselect" => $base, + "muser" => "", + "regex" => "*"); + register_global("mailfilter", $mailfilter); + } + + /* Save initial account state */ + $this->initially_was_account= $this->is_account; + } + + + function parse_vacation($file) + { + $desc= ""; + + if (is_file($file)){ + $fh = fopen($file, "r"); + $line= fgets($fh, 256); + + if (!preg_match('/^DESC:/', $line)){ + print_red (_("No DESC tag in vacation file:")." $file"); + return $desc; + } + fclose ($fh); + + $desc= trim(preg_replace('/^DESC:\s*/', '', $line)); + } + + return $desc; + } + + + function execute() + { + /* Load templating engine */ + $smarty= get_smarty(); + $display= ""; + + /* Do we need to flip is_account state? */ + if (isset($_POST['modify_state'])){ + $this->is_account= !$this->is_account; + } + + /* Do we represent a valid account? */ + if (!$this->is_account && $this->parent == NULL){ + $display= " ". + _("This account has no mail extensions.").""; + $display.= back_to_main(); + return ($display); + } + + /* Show tab dialog headers */ + if ($this->parent != NULL){ + if ($this->is_account){ + $display= $this->show_header(_("Remove mail account"), + _("This account has mail features enabled. You can disable them by clicking below.")); + } else { + $display= $this->show_header(_("Create mail account"), + _("This account has mail features disabled. You can enable them by clicking below.")); + return ($display); + } + } + + /* Trigger forward add dialog? */ + if (isset($_POST['add_local_forwarder'])){ + $this->forward_dialog= TRUE; + $this->dialog= TRUE; + } + + /* Cancel forward add dialog? */ + if (isset($_POST['add_locals_cancel'])){ + $this->forward_dialog= FALSE; + $this->dialog= FALSE; + } + + /* Finished adding of locals? */ + if (isset($_POST['add_locals_finish'])){ + if (count ($_POST['local_list']) && + chkacl ($this->acl, "gosaMailForwardingAddress") == ""){ + + /* Walk through list of forwarders, ignore own addresses */ + foreach ($_POST['local_list'] as $val){ + if (!in_array ($val, $this->gosaMailAlternateAddress) && + $val != $this->mail){ + + $this->addForwarder($val); + $this->is_modified= TRUE; + } + } + } + $this->forward_dialog= FALSE; + $this->dialog= FALSE; + } + + /* Add forward email addresses */ + if (isset($_POST['add_forwarder'])){ + if ($_POST['forward_address'] != ""){ + + /* Valid email address specified? */ + $address= $_POST['forward_address']; + $valid= FALSE; + if (!is_email($address)){ + if (!is_email($address, TRUE)){ + if ($this->is_template){ + $valid= TRUE; + } else { + print_red (_("You're trying to add an invalid email address to the list of forwarders.")); + } + } + } elseif ($address == $this->mail + || in_array($address, $this->gosaMailAlternateAddress)) { + + print_red (_("Adding your one of your own addresses to the forwarders makes no sense.")); + + } else { + $valid= TRUE; + } + + if ($valid){ + /* Add it */ + if (chkacl ($this->acl, "gosaMailForwardingAddress") == ""){ + $this->addForwarder ($address); + $this->is_modified= TRUE; + } + + } + } + } + + /* Delete forward email addresses */ + if (isset($_POST['delete_forwarder'])){ + if (count($_POST['forwarder_list']) + && chkacl ($this->acl, "gosaMailForwardingAddress") == ""){ + + $this->delForwarder ($_POST['forwarder_list']); + } + } + + /* Add alternate email addresses */ + if (isset($_POST['add_alternate'])){ + if ($_POST['alternate_address'] != "" && + chkacl ($this->acl, "gosaMailAlternateAddress") == ""){ + + $valid= FALSE; + if (!is_email($_POST['alternate_address'])){ + if ($this->is_template){ + if (!(is_email($_POST['alternate_address'], TRUE))){ + print_red (_("You're trying to add an invalid email address to the list of alternate addresses.")); + } else { + $valid= TRUE; + } + } else { + print_red (_("You're trying to add an invalid email address to the list of alternate addresses.")); + } + + } else { + $valid= TRUE; + } + + if ($valid && ($user= $this->addAlternate ($_POST['alternate_address'])) != ""){ + $ui= get_userinfo(); + if ($user != $ui->username){ + print_red (_("The address you're trying to add is already used by user")." '$user'."); + } + } + } + } + + /* Delete alternate email addresses */ + if (isset($_POST['delete_alternate']) && isset ($_POST['alternates_list'])){ + if (count($_POST['alternates_list']) && + chkacl ($this->acl, "gosaMailAlternateAddress") == ""){ + + $this->delAlternate ($_POST['alternates_list']); + } + } + + /* Import vacation message? */ + if (isset($_POST["import_vacation"]) && isset($this->vacation[$_POST["vacation_template"]])){ + $contents= ""; + $lines= file($_POST["vacation_template"]); + foreach ($lines as $line){ + if (!preg_match('/^DESC:/', $line)){ + $contents.= $line; + } + } + + /* Replace attributes */ + $attrs= $this->parent->by_object['user']->attributes; + foreach ($attrs as $val){ + $contents= preg_replace("/%$val/", + $this->parent->by_object['user']->$val, $contents); + } + + /* Save message */ + $this->gosaVacationMessage= htmlspecialchars($contents); + } + + /* Show forward add dialog */ + if ($this->forward_dialog){ + $ldap= $this->config->get_ldap_link(); + + /* Save data */ + $mailfilter= get_global("mailfilter"); + foreach( array("depselect", "muser", "regex") as $type){ + if (isset($_POST[$type])){ + $mailfilter[$type]= $_POST[$type]; + } + } + if (isset($_GET['search'])){ + $s= mb_substr($_GET['search'], 0, 1, "UTF8")."*"; + if ($s == "**"){ + $s= "*"; + } + $mailfilter['regex']= $s; + } + register_global("mailfilter", $mailfilter); + + /* Get actual list */ + $mailusers= array (); + if ($mailfilter['regex'] != '*' && $mailfilter['regex'] != ""){ + $regex= $mailfilter['regex']; + $filter= "(|(mail=$regex)(gosaMailAlternateAddress=$regex))"; + } else { + $filter= ""; + } + if ($mailfilter['muser'] != ""){ + $user= $mailfilter['muser']; + $filter= "$filter(|(uid=$user)(cn=$user)(givenName=$user)(sn=$user))"; + } + + /* Add already present people to the filter */ + $exclude= ""; + foreach ($this->gosaMailForwardingAddress as $mail){ + $exclude.= "(mail=$mail)"; + } + if ($exclude != ""){ + $filter.= "(!(|$exclude))"; + } + + $acl= array($this->config->current['BASE'] => ":all"); + $res= get_list($acl, "(&(objectClass=gosaMailAccount)$filter)", TRUE, $mailfilter['depselect'], array("sn", "mail", "givenName"), TRUE); + $ldap->cd($mailfilter['depselect']); + $ldap->search ("(&(objectClass=gosaMailAccount)$filter)", array("sn", "mail", "givenName")); + error_reporting (0); + while ($attrs= $ldap->fetch()){ + if(preg_match('/%/', $attrs['mail'][0])){ + continue; + } + $name= $this->make_name($attrs); + $mailusers[$attrs['mail'][0]]= $name."<". + $attrs['mail'][0].">"; + } + error_reporting (E_ALL); + natcasesort ($mailusers); + reset ($mailusers); + + /* Show dialog */ + $smarty->assign("search_image", get_template_path('images/search.png')); + $smarty->assign("tree_image", get_template_path('images/tree.png')); + $smarty->assign("infoimage", get_template_path('images/info.png')); + $smarty->assign("launchimage", get_template_path('images/small_filter.png')); + $smarty->assign("mailusers", $mailusers); + if (isset($_POST['depselect'])){ + $smarty->assign("depselect", $_POST['depselect']); + } + $smarty->assign("deplist", $this->config->idepartments); + $smarty->assign("apply", apply_filter()); + $smarty->assign("alphabet", generate_alphabet()); + $smarty->assign("hint", print_sizelimit_warning()); + foreach( array("depselect", "muser", "regex") as $type){ + $smarty->assign("$type", $mailfilter[$type]); + } + $smarty->assign("hint", print_sizelimit_warning()); + + $display.= $smarty->fetch (get_template_path('mail_locals.tpl', TRUE, dirname(__FILE__))); + return ($display); + } + + /* Show main page */ + $mailserver= array(); + foreach ($this->config->data['SERVERS']['IMAP'] as $key => $val){ + $mailserver[]= $key; + } + $smarty->assign("mailServers", $mailserver); + foreach(array("gosaMailServer", "gosaMailQuota", "perms", "mail", + "gosaMailAlternateAddress", "gosaMailForwardingAddress", + "gosaVacationMessage", "gosaMailDeliveryMode", + "gosaMailMaxSize", "gosaSpamSortLevel", "gosaSpamMailbox") as $val){ + $smarty->assign("$val", $this->$val); + $smarty->assign("$val"."ACL", chkacl($this->acl, "$val")); + } + if (is_numeric($this->gosaMailQuota) && $this->gosaMailQuota != 0){ + $smarty->assign("quotausage", $this->quotaUsage * 100 / $this->gosaMailQuota); + $smarty->assign("quotadefined", "true"); + } else { + $smarty->assign("quotadefined", "false"); + } + + /* Disable mail field if needed */ + $method= new $this->method($this->config); + if ($method->uattrib == "mail" && $this->initially_was_account){ + $smarty->assign("mailACL", "disabled"); + } + + /* Fill checkboxes */ + if (!preg_match("/L/", $this->gosaMailDeliveryMode)) { + $smarty->assign("drop_own_mails", "checked"); + } + if (preg_match("/V/", $this->gosaMailDeliveryMode)) { + $smarty->assign("use_vacation", "checked"); + } + if (preg_match("/S/", $this->gosaMailDeliveryMode)) { + $smarty->assign("use_spam_filter", "checked"); + } + if (preg_match("/R/", $this->gosaMailDeliveryMode)) { + $smarty->assign("use_mailsize_limit", "checked"); + } + if (preg_match("/I/", $this->gosaMailDeliveryMode)) { + $smarty->assign("only_local", "checked"); + } + if (preg_match("/C/", $this->gosaMailDeliveryMode)) { + $smarty->assign("own_script", "checked"); + } + + /* Have vacation templates? */ + if (count($this->vacation)){ + $smarty->assign("show_templates", "true"); + $smarty->assign("vacationtemplates", $this->vacation); + if (isset($_POST['vacation_template'])){ + $smarty->assign("template", $_POST['vacation_template']); + } + } + + /* Fill spam selector */ + $spamlevel= array(); + for ($i= 0; $i<21; $i++){ + $spamlevel[]= $i; + } + $smarty->assign("spamlevel", $spamlevel); + $smarty->assign("spambox", $this->mailboxList); + $smarty->assign("custom_sieveACL", chkacl($this->acl, "custom_sieve")); + $smarty->assign("only_localACL", chkacl($this->acl, "only_local")); + + $display.= $smarty->fetch (get_template_path('generic.tpl', TRUE, dirname(__FILE__))); + return ($display); + } + + + /* remove object from parent */ + function remove_from_parent() + { + /* Cancel if there's nothing to do here */ + if (!$this->initially_was_account){ + return; + } + + /* include global link_info */ + $ldap= $this->config->get_ldap_link(); + + /* Remove and write to LDAP */ + plugin::remove_from_parent(); + + /* Zero arrays */ + $this->attrs['gosaMailAlternateAddress']= array(); + $this->attrs['gosaMailForwardingAddress']= array(); + + /* Adapt attributes if needed */ + $method= new $this->method($this->config); + $method->fixAttributesOnRemove($this); + + /* Mailmethod wants us to remove the entry from LDAP. Keep uid! */ + unset ($this->attrs['uid']); + @DEBUG (DEBUG_LDAP, __LINE__, __FUNCTION__, __FILE__, + $this->attributes, "Save"); + $ldap->cd($this->dn); + $ldap->modify($this->attrs); + show_ldap_error($ldap->get_error()); + + /* Connect to IMAP server for account deletion */ + if ($this->gosaMailServer != ""){ + $method= new $this->method($this->config); + $id= $method->uattrib; + if ($method->connect($this->gosaMailServer)){ + + /* Remove account from IMAP server */ + $method->deleteMailbox($this->folder_prefix.$this->$id); + $method->disconnect(); + } + } + + /* Optionally execute a command after we're done */ + $this->handle_post_events("remove"); + } + + + /* Save data to object */ + function save_object() + { + if (isset($_POST['mailTab'])){ + /* Save ldap attributes */ + plugin::save_object(); + + /* Assemble mail delivery mode + The mode field in ldap consists of values between braces, this must + be called when 'mail' is set, because checkboxes may not be set when + we're in some other dialog. + + Example for gosaMailDeliveryMode [LR ] + L: Local delivery + R: Reject when exceeding mailsize limit + S: Use spam filter + V: Use vacation message + C: Use custm sieve script + I: Only insider delivery */ + + $tmp= ""; + if (!isset($_POST["drop_own_mails"])){ + $tmp.= "L"; + } + if (isset($_POST["use_mailsize_limit"])){ + $tmp.= "R"; + } + if (isset($_POST["use_spam_filter"])){ + $tmp.= "S"; + } + if (isset($_POST["use_vacation"])){ + $tmp.= "V"; + } + if (isset($_POST["own_script"])){ + $tmp.= "C"; + } + if (isset($_POST["only_local"])){ + $tmp.= "I"; + } + $tmp= "[$tmp]"; + + if (chkacl ($this->acl, "gosaMailDeliveryMode") == ""){ + if ($this->gosaMailDeliveryMode != $tmp){ + $this->is_modified= TRUE; + } + $this->gosaMailDeliveryMode= $tmp; + } + } + } + + + /* Save data to LDAP, depending on is_account we save or delete */ + function save() + { + $ldap= $this->config->get_ldap_link(); + + /* Call parents save to prepare $this->attrs */ + plugin::save(); + + /* Save arrays */ + $this->attrs['gosaMailAlternateAddress']= $this->gosaMailAlternateAddress; + $this->attrs['gosaMailForwardingAddress']= $this->gosaMailForwardingAddress; + + /* Adapt attributes if needed */ + $method= new $this->method($this->config); + $id= $method->uattrib; + $method->fixAttributesOnStore($this); + + /* Save data to LDAP */ + $ldap->cd($this->dn); + $ldap->modify($this->attrs); + show_ldap_error($ldap->get_error()); + + /* Only do IMAP actions if we are not a template */ + if (!$this->is_template){ + if ($method->connect($this->gosaMailServer)){ + $method->updateMailbox($this->folder_prefix.$this->$id); + $method->setQuota($this->folder_prefix.$this->$id, $this->gosaMailQuota); + $method->disconnect(); + + /* Write sieve information only if not in C mode */ + if (!is_integer(strpos($this->gosaMailDeliveryMode, "C"))){ + $method->configureFilter($this->$id, + $this->gosaMailDeliveryMode, + $this->mail, + $this->gosaMailAlternateAddress, + $this->gosaMailMaxSize, + $this->gosaSpamMailbox, + $this->gosaSpamSortLevel, + $this->gosaVacationMessage); + } + } + } + + /* Optionally execute a command after we're done */ + if ($this->initially_was_account == $this->is_account){ + if ($this->is_modified){ + $this->handle_post_events("mofify"); + } + } else { + $this->handle_post_events("add"); + } + + } + + /* Check formular input */ + function check() + { + $ldap= $this->config->get_ldap_link(); + + $message= array(); + + /* must: mail */ + if ($this->mail == ""){ + $message[]= _("The required field 'Primary address' is not set."); + } + if ($this->is_template){ + if (!is_email($this->mail, TRUE)){ + $message[]= _("Please enter a valid email address in 'Primary address' field."); + } + } else { + if (!is_email($this->mail)){ + $message[]= _("Please enter a valid email address in 'Primary address' field."); + } + } + $ldap->cd($this->config->current['BASE']); + $ldap->search ("(&(objectClass=gosaMailAccount)(!(objectClass=gosaUserTemplate))(|(mail=".$this->mail.")(gosaMailAlternateAddress=". + $this->mail."))(!(uid=".$this->uid."))(!(cn=".$this->uid.")))", array("uid")); + if ($ldap->count() != 0){ + $message[]= _("The primary address you've entered is already in use."); + } + + /* Check quota */ + if ($this->gosaMailQuota != '' && chkacl ($this->acl, "gosaMailQuota") == ""){ + if (!is_numeric($this->gosaMailQuota)) { + $message[]= _("Value in 'Quota size' is not valid."); + } else { + $this->gosaMailQuota= (int) $this->gosaMailQuota; + } + } + + /* Check rejectsize for integer */ + if ($this->gosaMailMaxSize != '' && chkacl ($this->acl, "gosaMailQuota") == ""){ + if (!is_numeric($this->gosaMailMaxSize)){ + $message[]= _("Please specify a vaild mail size for mails to be rejected."); + } else { + $this->gosaMailMaxSize= (int) $this->gosaMailMaxSize; + } + } + + /* Need gosaMailMaxSize if use_mailsize_limit is checked */ + if (is_integer(strpos($this->gosaMailDeliveryMode, "R")) && + $this->gosaMailMaxSize == ""){ + + $message[]= _("You need to set the maximum mail size in order to reject anything."); + } + + return ($message); + } + + /* Adapt from template, using 'dn' */ + function adapt_from_template($dn) + { + plugin::adapt_from_template($dn); + + foreach (array("gosaMailAlternateAddress", "gosaMailForwardingAddress") as $val){ + $this->$val= array(); + if (isset($this->attrs["$val"]["count"])){ + for ($i= 0; $i<$this->attrs["$val"]["count"]; $i++){ + $value= $this->attrs["$val"][$i]; + foreach (array("sn", "givenName", "uid") as $repl){ + if (preg_match("/%$repl/i", $value)){ + $value= preg_replace ("/%$repl/i", $this->parent->$repl, $value); + } + } + array_push($this->$val, strtolower(rewrite($value))); + } + } + } + $this->mail= strtolower(rewrite($this->mail)); + } + + /* Add entry to forwarder list */ + function addForwarder($address) + { + $this->gosaMailForwardingAddress[]= $address; + $this->gosaMailForwardingAddress= array_unique ($this->gosaMailForwardingAddress); + + sort ($this->gosaMailForwardingAddress); + reset ($this->gosaMailForwardingAddress); + $this->is_modified= TRUE; + } + + /* Remove list of addresses from forwarder list */ + function delForwarder($addresses) + { + $this->gosaMailForwardingAddress= array_remove_entries ($addresses, $this->gosaMailForwardingAddress); + $this->is_modified= TRUE; + } + + + + function addAlternate($address) + { + $ldap= $this->config->get_ldap_link(); + + $address= strtolower($address); + + /* Is this address already assigned in LDAP? */ + $ldap->cd ($this->config->current['BASE']); + $ldap->search ("(&(objectClass=gosaMailAccount)(|(mail=$address)". + "(gosaMailAlternateAddress=$address)))", array("uid")); + + if ($ldap->count() > 0){ + $attrs= $ldap->fetch (); + return ($attrs["uid"][0]); + } + + /* Add to list of alternates */ + if (!in_array($address, $this->gosaMailAlternateAddress)){ + $this->gosaMailAlternateAddress[]= $address; + $this->is_modified= TRUE; + } + + sort ($this->gosaMailAlternateAddress); + reset ($this->gosaMailAlternateAddress); + + return (""); + } + + + function delAlternate($addresses) + { + $this->gosaMailAlternateAddress= array_remove_entries ($addresses, + $this->gosaMailAlternateAddress); + $this->is_modified= TRUE; + } + + function make_name($attrs) + { + $name= ""; + if (isset($attrs['sn'][0])){ + $name= $attrs['sn'][0]; + } + if (isset($attrs['givenName'][0])){ + if ($name != ""){ + $name.= ", ".$attrs['givenName'][0]; + } else { + $name.= $attrs['givenName'][0]; + } + } + if ($name != ""){ + $name.= " "; + } + + return ($name); + } + +} + +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/plugins/personal/mail/generic.tpl b/plugins/personal/mail/generic.tpl new file mode 100644 index 000000000..8461afcf3 --- /dev/null +++ b/plugins/personal/mail/generic.tpl @@ -0,0 +1,158 @@ + + + + + + + + +
+

{t}Generic{/t}

+ + + + + + + + + + + + + + + + + +
{t}Primary address{/t}{$must}
{t}Server{/t} + +
+
+ {t}Quota usage{/t} +
+
+ {if $quotadefined eq "true"} + + {else} + {t}not defined{/t} + {/if} +
{t}Quota size{/t} + KB +
+
+   + +

{t}Alternate addresses{/t}

+ +
+ +   + +
+ +

 

+ +

{t}Mail options{/t}

+ + + + + + + + + + +
+ {t}No delivery to own mailbox{/t} +
+ {t}Activate vacation message{/t} +
+   + + {t}Move mails tagged with spam level greater than{/t} + + {t}to folder{/t} + +
+ {t}Reject mails bigger than{/t} + {t}MB{/t} +
+

+ {t}Vacation message{/t} +

+ +
+ {if $show_templates eq "true"} + + + {/if} +
+

+ {t}Forward messages to{/t} +

+ +
+ +   +   + +
+ +

 

+ +

{t}Advanced mail options{/t}

+ + + + + + + +
+ + {t}User is only allowed to send and receive local mails{/t} + +   + + + {t}Use custom sieve script{/t} ({t}disables all Mail options!{/t}) +
+ + + + + diff --git a/plugins/personal/mail/mail_locals.tpl b/plugins/personal/mail/mail_locals.tpl new file mode 100644 index 000000000..e390ae34d --- /dev/null +++ b/plugins/personal/mail/mail_locals.tpl @@ -0,0 +1,52 @@ + + + + + +
+
+

+ {t}Select addresses to add{/t} {$hint}
+

+
+
+

+ +

+
+
+
+

[F]{ +t}Filters{/t}

+
+
+

+ + {$alphabet} +
+

+

+ +
 {t}Display addresses of department{/t}
+

+

+ +
 {t}Display addresses matching{/t}
+

+

+ +
 {t}Display addresses of user{/t}
+

+ {$apply} +
+
+ +

+ +   + +

diff --git a/plugins/personal/mail/main.inc b/plugins/personal/mail/main.inc new file mode 100644 index 000000000..aa1d22a79 --- /dev/null +++ b/plugins/personal/mail/main.inc @@ -0,0 +1,129 @@ +dn); + sess_del ('edit'); + sess_del ('mailAccount'); + } + + /* Create mail object on demand */ + if (!isset($_SESSION['mailAccount']) || (isset($_GET['reset']) && $_GET['reset'] == 1)){ + $_SESSION['mailAccount']= new mailAccount ($config, $ui->dn); + } + $mailAccount= $_SESSION['mailAccount']; + + /* save changes back to object */ + if (isset ($_SESSION['edit'])){ + $mailAccount->save_object (); + } + + /* Enter edit mode? */ + if (isset($_POST['edit'])){ + + /* Check locking */ + if (($username= get_lock($ui->dn)) != ""){ + $_SESSION['back_plugin']= $plug; + gen_locked_message ($username, $ui->dn); + exit (); + } + + /* Lock the current entry */ + add_lock ($ui->dn, $ui->dn); + $_SESSION['dn']= $ui->dn; + $_SESSION['edit']= TRUE; + } + + /* Adjust acl's to mode */ + if (isset($_SESSION['edit'])){ + $acl= get_permissions ($ui->dn, $ui->subtreeACL); + $mailAccount->acl= get_module_permission($acl, "mail", $ui->dn); + } else { + $acl= get_permissions ($ui->dn, $ui->subtreeACL); + $editacl= get_module_permission($acl, "mail", $ui->dn); + $mailAccount->acl= "#none#"; + } + + /* save changes to LDAP and disable edit mode */ + if (isset($_POST['edit_finish'])){ + + /* Perform checks */ + $message= $mailAccount->check (); + + /* No errors, save object */ + if (count ($message) == 0){ + $mailAccount->save (); + gosa_log ("User/mail object'".$ui->dn."' has been saved"); + $mailAccount->acl= "#none#"; + del_lock ($ui->dn); + sess_del ('edit'); + + /* Store object */ + $_SESSION['mailAccount']= $mailAccount; + } else { + /* Errors found, show message */ + show_errors ($message); + } + } + + /* Execute formular */ + $display= $mailAccount->execute (); + + /* Store changes in session */ + if (isset ($_SESSION['edit'])){ + $_SESSION['mailAccount']= $mailAccount; + } + + $info= ""; + /* Show page footer depending on the mode */ + if (!$mailAccount->forward_dialog && $mailAccount->is_account){ + $display.= "

"; + + /* Are we in edit mode? */ + if (isset($_SESSION['edit'])){ + $display.= "\n"; + $display.= " "; + $display.= "\n"; + $info= " ".$ui->dn." "; + } else { + $info= " ".$ui->dn." "; + if (isset($editacl) && $editacl != "#none#"){ + $info.= " "._("Click the 'Edit' button below to change informations in this dialog"); + $display.= "\n"; + } + + $display.= "\n"; + } + $display.= "

\n"; + } + + /* Page header*/ + $display= print_header(get_template_path('images/email.png'), _("User mail settings"), $info).$display; + +} + +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/plugins/personal/mail/sieve-discard.txt b/plugins/personal/mail/sieve-discard.txt new file mode 100644 index 000000000..8ac4db68a --- /dev/null +++ b/plugins/personal/mail/sieve-discard.txt @@ -0,0 +1,3 @@ +# Do not deliver to own mailbox +discard; + diff --git a/plugins/personal/mail/sieve-header.txt b/plugins/personal/mail/sieve-header.txt new file mode 100644 index 000000000..5222282e5 --- /dev/null +++ b/plugins/personal/mail/sieve-header.txt @@ -0,0 +1,3 @@ +###GOSA +require ["fileinto", "reject", "vacation"]; + diff --git a/plugins/personal/mail/sieve-mailsize.txt b/plugins/personal/mail/sieve-mailsize.txt new file mode 100644 index 000000000..de639c26c --- /dev/null +++ b/plugins/personal/mail/sieve-mailsize.txt @@ -0,0 +1,17 @@ +# Reject mails with bigger size +if size :over {$maxsize}M{ + reject text: +Dear sender, + +the mail you sent to our mailsystem has been rejected due +to a user configured maximum mail size ($maxsize MB). + +Either ask the user to remove the sizelimit, or send smaller pieces. + +Thank you, + the mailserver +. + ; + discard; +} + diff --git a/plugins/personal/mail/sieve-spam.txt b/plugins/personal/mail/sieve-spam.txt new file mode 100644 index 000000000..63392d011 --- /dev/null +++ b/plugins/personal/mail/sieve-spam.txt @@ -0,0 +1,5 @@ +# Sort mails with higher spam level +if header :contains "X-Spam-Level" "$spamlevel" { + fileinto "$spambox"; +} + diff --git a/plugins/personal/mail/sieve-vacation.txt b/plugins/personal/mail/sieve-vacation.txt new file mode 100644 index 000000000..3aed3a916 --- /dev/null +++ b/plugins/personal/mail/sieve-vacation.txt @@ -0,0 +1,4 @@ +# Vacation message +vacation :addresses [$addrlist] +"$vacmsg" ; + diff --git a/plugins/personal/password/changed.tpl b/plugins/personal/password/changed.tpl new file mode 100644 index 000000000..20846b758 --- /dev/null +++ b/plugins/personal/password/changed.tpl @@ -0,0 +1,15 @@ +
+ {t}Change password{/t} +
+ +

+ {t}You've successfully changed your password. Remember to change all programms configured to use it as well.{/t} +

+ +
+ +

+ +

+ + diff --git a/plugins/personal/password/class_password.inc b/plugins/personal/password/class_password.inc new file mode 100644 index 000000000..f53289ada --- /dev/null +++ b/plugins/personal/password/class_password.inc @@ -0,0 +1,10 @@ + diff --git a/plugins/personal/password/main.inc b/plugins/personal/password/main.inc new file mode 100644 index 000000000..76704c1e5 --- /dev/null +++ b/plugins/personal/password/main.inc @@ -0,0 +1,108 @@ +assign ('headimage', get_template_path('images/password.png')); + $display= ""; + + /* Check for interaction */ + if ($_SERVER["REQUEST_METHOD"] == "POST"){ + if (isset($_POST['password_finish'])){ + $message= array(); + + /* Is current password correct? */ + if ($_POST['current_password'] != ""){ + $tldap = new LDAP($ui->dn, $_POST['current_password'], + $config->current['SERVER'], + isset($config->current['RECURSIVE']) && $config->current['RECURSIVE'] == "true", + isset($config->current['TLS']) + && $config->current['TLS'] == "true"); + if ($tldap->error != "Success"){ + $message[]= _("The password you've entered as your current password doesn't match the real one."); + } + } else { + $message[]= _("You need to specify your current password in order to proceed."); + } + + /* Do new and repeated password fields match? */ + if ($_POST['new_password'] != $_POST['repeated_password']){ + $message[]= _("The passwords you've entered as 'New password' and 'Repeated new password' do not match."); + } else { + if ($_POST['new_password'] == ""){ + $message[]= _("The password you've entered as 'New password' is empty."); + } + } + + /* Password policy fulfilled? */ + if (isset($config->data['MAIN']['PWDIFFER'])){ + $l= $config->data['MAIN']['PWDIFFER']; + if (substr($_POST['current_password'], 0, $l) == substr($_POST['new_password'], 0, $l)){ + $message[]= _("The password used as new and current are too similar."); + } + } + if (isset($config->data['MAIN']['PWMINLEN'])){ + if (strlen($_POST['new_password']) < $config->data['MAIN']['PWMINLEN']){ + $message[]= _("The password used as new is to short."); + } + } + + $ca= get_permissions ($ui->dn, $ui->subtreeACL); + $ca= get_module_permission($ca, "user", $ui->dn); + if (chkacl($ca, "password") != ""){ + $message[]= _("You have no permissions to change your password."); + } + + if (count ($message) != 0){ + /* Show error message and continue editing */ + show_errors($message); + } else { + + /* Passed quality check, just try to change the password now */ + $output= ""; + if (isset($config->data['MAIN']['EXTERNALPWDHOOK'])){ + exec($config->data['MAIN']['EXTERNALPWDHOOK']." ".$ui->username." ". + $_POST['current_password']." ".$_POST['new_password'], $resarr); + if(count($resarr) > 0) { + $output= join('\n', $resarr); + } + } + if ($output != ""){ + $message[]= _("External password changer reported a problem: ".$output); + show_errors($message); + } else { + change_password ($ui->dn, $_POST['new_password']); + gosa_log ("User/password has been changed"); + $ui->password= $_POST['new_password']; + $_SESSION['ui']= $ui; + $display= $smarty->fetch(get_template_path("changed.tpl", TRUE)); + } + } + } + } + + if ($display == ""){ + $display= $smarty->fetch(get_template_path("password.tpl", TRUE)); + } +} + +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/plugins/personal/password/password.tpl b/plugins/personal/password/password.tpl new file mode 100644 index 000000000..33a43e045 --- /dev/null +++ b/plugins/personal/password/password.tpl @@ -0,0 +1,48 @@ +
+ {t}Change password{/t} +
+ +

+ {t}To change your personal password use the fields below. The changes take effect immediately. Please memorize the new password, because you would't be able to login without it.{/t} +

+ +

+ {t}Changing the password impinges on your authentification on mail, proxy, samba and unix services.{/t} +

+ + + + + + + + + + + + + + +
{t}Current password{/t}
{t}New password{/t}
{t}Repeat new password{/t}
+ +
+ +

+ +   + +

+ + + + + + diff --git a/plugins/personal/posix/class_posixAccount.inc b/plugins/personal/posix/class_posixAccount.inc new file mode 100644 index 000000000..f6616018b --- /dev/null +++ b/plugins/personal/posix/class_posixAccount.inc @@ -0,0 +1,988 @@ + + \version 2.00 + \date 24.07.2003 + + This class provides the functionality to read and write all attributes + relevant for posixAccounts and shadowAccounts from/to the LDAP. It + does syntax checking and displays the formulars required. + */ + +class posixAccount extends plugin +{ + /* Definitions */ + var $plHeadline= "UNIX"; + var $plDescription= "This does something"; + + /* CLI vars */ + var $cli_summary= "Manage users posix account"; + var $cli_description= "Some longer text\nfor help"; + var $cli_parameters= array("eins" => "Eins ist toll", "zwei" => "Zwei ist noch besser"); + + /* Plugin specific values */ + var $homeDirectory= ""; + var $loginShell= "/bin/bash"; + var $uidNumber= ""; + var $gidNumber= ""; + var $gecos= ""; + var $shadowMin= "0"; + var $shadowMax= "0"; + var $shadowWarning= "0"; + var $shadowLastChange= "0"; + var $shadowInactive= "0"; + var $shadowExpire= "0"; + var $gosaDefaultPrinter= ""; + var $gosaDefaultLanguage= ""; + var $accessTo= array(); + var $trustModel= ""; + + var $status= ""; + var $loginShellList= array(); + var $groupMembership= array(); + var $savedGroupMembership= array(); + var $savedUidNumber= ""; + var $savedGidNumber= ""; + var $use_shadowMin= "0"; + var $use_shadowMax= "0"; + var $use_shadowWarning= "0"; + var $use_shadowInactive= "0"; + var $use_shadowExpire= "0"; + var $must_change_password= "0"; + var $force_ids= 0; + var $printerList= array(); + var $group_dialog= FALSE; + var $show_ws_dialog= FALSE; + var $secondaryGroups= array(); + var $primaryGroup= 0; + var $was_trust_account= FALSE; + + + /* attribute list for save action */ + var $attributes= array("homeDirectory", "loginShell", "uidNumber", "gidNumber", "gecos", + "shadowMin", "shadowMax", "shadowWarning", "shadowInactive", "shadowLastChange", + "shadowExpire", "gosaDefaultPrinter", "gosaDefaultLanguage", "uid"); + var $objectclasses= array("posixAccount", "shadowAccount"); + + + /* constructor, if 'dn' is set, the node loads the given + 'dn' from LDAP */ + function posixAccount ($config, $dn= NULL) + { + /* Configuration is fine, allways */ + $this->config= $config; + + /* Load bases attributes */ + plugin::plugin($config, $dn); + + $ldap= $this->config->get_ldap_link(); + + if ($dn != NULL){ + + /* Correct is_account. shadowAccount is not required. */ + if (isset($this->attrs['objectClass']) && + in_array ('posixAccount', $this->attrs['objectClass'])){ + + $this->is_account= TRUE; + } + + /* Is this account a trustAccount? */ + if ($this->is_account && isset($this->attrs['trustModel'])){ + $this->trustModel= $this->attrs['trustModel'][0]; + $this->was_trust_account= TRUE; + } else { + $this->was_trust_account= FALSE; + $this->trustModel= ""; + } + if ($this->is_account && isset($this->attrs['accessTo'])){ + for ($i= 0; $i<$this->attrs['accessTo']['count']; $i++){ + $tmp= $this->attrs['accessTo'][$i]; + $this->accessTo[$tmp]= $tmp; + } + } + $this->initially_was_account= $this->is_account; + + /* Fill group */ + $this->primaryGroup= $this->gidNumber; + + /* Generate status text */ + $current= date("U"); + if (($current >= $this->shadowExpire) && $this->shadowExpire){ + $this->status= "expired"; + if (($this->shadowExpire - $current) < $this->shadowInactive){ + $this->status.= ", grace time active"; + } + } elseif (($this->shadowLastChange + $this->shadowMin) >= $current){ + $this->status= "active, password not changable"; + } elseif (($this->shadowLastChange + $this->shadowMax) >= $current){ + $this->status= "active, password expired"; + } else { + $this->status= "active"; + } + + /* Get group membership */ + $ldap->cd($this->config->current['BASE']); + $ldap->search("(&(objectClass=posixGroup)(memberUid=".$this->uid."))", array("cn", "description")); + + while ($this->attrs= $ldap->fetch()){ + if (!isset($this->attrs["description"][0])){ + $entry= $this->attrs["cn"][0]; + } else { + $dsc= preg_replace ('/^Group of user/', _("Group of user"), $this->attrs["description"][0]); + $entry= $this->attrs["cn"][0]." [$dsc]"; + } + $this->groupMembership[$ldap->getDN()]= $entry; + } + asort($this->groupMembership); + reset($this->groupMembership); + $this->savedGroupMembership= $this->groupMembership; + $this->savedUidNumber= $this->uidNumber; + $this->savedGidNumber= $this->gidNumber; + } + + /* Adjust shadow checkboxes */ + foreach (array("shadowMin", "shadowMax", "shadowWarning", "shadowInactive", + "shadowExpire") as $val){ + + if ($this->$val != 0){ + $oval= "use_".$val; + $this->$oval= "1"; + } + } + + /* Convert to seconds */ + if ($this->shadowExpire != 0){ + $this->shadowExpire*= 60 * 60 * 24; + } else { + $date= getdate(); + $this->shadowExpire= floor($date[0] / (60*60*24)) * 60 * 60 * 24; + } + + /* Generate shell list from /etc/gosa/shells */ + if (file_exists('/etc/gosa/shells')){ + $shells = file ('/etc/gosa/shells'); + foreach ($shells as $line){ + if (!preg_match ("/^#/", $line)){ + $this->loginShellList[]= trim($line); + } + } + } else { + if ($this->loginShell == ""){ + $this->loginShellList[]= _("unconfigured"); + } + } + + /* Insert possibly missing loginShell */ + if ($this->loginShell != "" && !in_array($this->loginShell, $this->loginShellList)){ + $this->loginShellList[]= $this->loginShell; + } + + /* Generate printer list */ + if (isset($this->config->data['SERVERS']['CUPS'])){ + $this->printerList= get_printer_list ($this->config->data['SERVERS']['CUPS']); + asort($this->printerList); + } + + /* Generate group list */ + $ldap->cd($this->config->current['BASE']); + $ldap->search("(objectClass=posixGroup)", array("cn", "gidNumber")); + $this->secondaryGroups[]= "- "._("automatic")." -"; + while ($attrs= $ldap->fetch()){ + $this->secondaryGroups[$attrs['gidNumber'][0]]= $attrs['cn'][0]; + } + asort ($this->secondaryGroups); + + /* Get global filter config */ + if (!is_global("sysfilter")){ + $ui= get_userinfo(); + $base= get_base_from_people($ui->dn); + $sysfilter= array( "depselect" => $base, + "regex" => "*"); + register_global("sysfilter", $sysfilter); + } + } + + + /* execute generates the html output for this node */ + function execute() + { + /* Do we need to flip is_account state? */ + if (isset($_POST['modify_state'])){ + $this->is_account= !$this->is_account; + } + + /* Do we represent a valid posixAccount? */ + if (!$this->is_account && $this->parent == NULL ){ + $display= " ". + _("This account has no unix extensions.").""; + $display.= back_to_main(); + return ($display); + } + + $display= ""; + + /* Show tab dialog headers */ + if ($this->parent != NULL){ + if ($this->is_account){ + if (isset($this->parent->by_object['sambaAccount'])){ + $obj= $this->parent->by_object['sambaAccount']; + } + if (isset($obj) && $obj->is_account == TRUE && + isset($this->parent->by_object['sambaAccount'])){ + + /* Samba3 dependency on posix accounts are enabled + in the moment, because I need to rely on unique + uidNumbers. There'll be a better solution later + on. */ + $display= $this->show_header(_("Remove posix account"), + _("This account has unix features enabled. To disable them, you'll need to remove the samba account first."), TRUE); + } else { + $display= $this->show_header(_("Remove posix account"), + _("This account has posix features enabled. You can disable them by clicking below.")); + } + } else { + $display= $this->show_header(_("Create posix account"), + _("This account has posix features disabled. You can enable them by clicking below.")); + return($display); + } + } + + /* Trigger group edit? */ + if (isset($_POST['edit_groupmembership'])){ + $this->group_dialog= TRUE; + $this->dialog= TRUE; + } + + /* Cancel group edit? */ + if (isset($_POST['add_groups_cancel']) || + isset($_POST['add_groups_finish'])){ + $this->group_dialog= FALSE; + $this->dialog= FALSE; + } + + /* Add selected groups */ + if (isset($_POST['add_groups_finish']) && isset($_POST['groups']) && + count($_POST['groups'])){ + + if (chkacl ($this->acl, "memberUid") == ""){ + $this->addGroup ($_POST['groups']); + $this->is_modified= TRUE; + } + } + + /* Delete selected groups */ + if (isset($_POST['delete_groupmembership']) && + isset($_POST['group_list']) && count($_POST['group_list'])){ + + if (chkacl ($this->acl, "memberUid") == ""){ + $this->delGroup ($_POST['group_list']); + $this->is_modified= TRUE; + } + } + + /* Add user workstation? */ + if (isset($_POST["add_ws"])){ + $this->show_ws_dialog= TRUE; + $this->dialog= TRUE; + } + + /* Add user workstation? */ + if (isset($_POST["add_ws_finish"]) && isset($_POST['wslist'])){ + foreach($_POST['wslist'] as $ws){ + $this->accessTo[$ws]= $ws; + } + ksort($this->accessTo); + $this->is_modified= TRUE; + } + + /* Remove user workstations? */ + if (isset($_POST["delete_ws"]) && isset($_POST['workstation_list'])){ + foreach($_POST['workstation_list'] as $name){ + unset ($this->accessTo[$name]); + } + $this->is_modified= TRUE; + } + + /* Add user workstation finished? */ + if (isset($_POST["add_ws_finish"]) || isset($_POST["add_ws_cancel"])){ + $this->show_ws_dialog= FALSE; + $this->dialog= FALSE; + } + + /* Templates now! */ + $smarty= get_smarty(); + + /* Show ws dialog */ + if ($this->show_ws_dialog){ + /* Save data */ + $sysfilter= get_global("sysfilter"); + foreach( array("depselect", "regex") as $type){ + if (isset($_POST[$type])){ + $sysfilter[$type]= $_POST[$type]; + } + } + if (isset($_GET['search'])){ + $s= mb_substr($_GET['search'], 0, 1, "UTF8")."*"; + if ($s == "**"){ + $s= "*"; + } + $sysfilter['regex']= $s; + } + register_global("sysfilter", $sysfilter); + + /* Get workstation list */ + $exclude= ""; + foreach($this->accessTo as $ws){ + $exclude.= "(cn=$ws)"; + } + if ($exclude != ""){ + $exclude= "(!(|$exclude))"; + } + $acl= array($this->config->current['BASE'] => ":all"); + $regex= $sysfilter['regex']; + $filter= "(&(|(objectClass=goServer)(objectClass=gotoWorkstation)(objectClass=gotoTerminal))$exclude(cn=*)(cn=$regex))"; + $res= get_list($acl, "$filter", TRUE, $sysfilter['depselect'], array("cn"), TRUE); + $wslist= array(); + foreach ($res as $attrs){ + $wslist[]= preg_replace('/\$/', '', $attrs['cn'][0]); + } + asort($wslist); + $smarty->assign("search_image", get_template_path('images/search.png')); + $smarty->assign("launchimage", get_template_path('images/small_filter.png')); + $smarty->assign("tree_image", get_template_path('images/tree.png')); + $smarty->assign("deplist", $this->config->idepartments); + $smarty->assign("alphabet", generate_alphabet()); + foreach( array("depselect", "regex") as $type){ + $smarty->assign("$type", $sysfilter[$type]); + } + $smarty->assign("hint", print_sizelimit_warning()); + $smarty->assign("wslist", $wslist); + $display= $smarty->fetch (get_template_path('trust_machines.tpl', TRUE, dirname(__FILE__))); + return ($display); + } + + /* Manage group add dialog */ + if ($this->group_dialog){ + $gd= new groupManagement($this->config, get_userinfo()); + + /* Save data */ + $groupfilter= get_global("groupfilter"); + foreach( array("depselect", "guser", "regex") as $type){ + if (isset($_POST[$type])){ + $groupfilter[$type]= $_POST[$type]; + } + } + if (isset($_POST['depselect'])){ + foreach( array("primarygroups", "sambagroups", "mailgroups", "appgroups", + "functionalgroups") as $type){ + + if (isset($_POST[$type])) { + $groupfilter[$type]= "checked"; + } else { + $groupfilter[$type]= ""; + } + } + } + if (isset($_GET['search'])){ + $s= mb_substr($_GET['search'], 0, 1, "UTF8")."*"; + if ($s == "**"){ + $s= "*"; + } + $groupfilter['regex']= $s; + } + register_global("groupfilter", $groupfilter); + + /* Calculate actual groups */ + $gd->reload(); + $glist= array(); + foreach ($gd->grouplist as $key => $value){ + if (!isset($this->groupMembership[$key])){ + $glist[$key]= $value; + } + } + + /* Show dialog */ + $smarty->assign("groups", $glist); + $smarty->assign("search_image", get_template_path('images/search.png')); + $smarty->assign("launchimage", get_template_path('images/small_filter.png')); + $smarty->assign("tree_image", get_template_path('images/tree.png')); + $smarty->assign("deplist", $this->config->idepartments); + $smarty->assign("alphabet", generate_alphabet()); + foreach( array("depselect", "guser", "regex", "primarygroups", "mailgroups", + "appgroups", "sambagroups", "functionalgroups") as $type){ + $smarty->assign("$type", $groupfilter[$type]); + } + $smarty->assign("hint", print_sizelimit_warning()); + + $display.= $smarty->fetch (get_template_path('posix_groups.tpl', TRUE, dirname(__FILE__))); + return ($display); + } + + /* Show main page */ + $smarty= get_smarty(); + + /* Depending on pwmode, currently hardcoded because there are no other methods */ + if ( 1 == 1 ){ + $smarty->assign("pwmode", dirname(__FILE__)."/posix_shadow"); + $shadowMinACL= chkacl($this->acl, "shadowMin"); + $smarty->assign("shadowmins", sprintf(_("Password can't be changed up to %s days after last change"), "shadowMin."\">")); + $shadowMaxACL= chkacl($this->acl, "shadowMax"); + $smarty->assign("shadowmaxs", sprintf(_("Password must be changed after %s days"), "shadowMax."\">")); + $shadowInactiveACL= chkacl($this->acl, "shadowInactive"); + $smarty->assign("shadowinactives", sprintf(_("Disable account after %s days of inactivity after password expiery"), "shadowInactive."\">")); + $shadowWarningACL= chkacl($this->acl, "shadowWarning"); + $smarty->assign("shadowwarnings", sprintf(_("Warn user %s days before password expiery"), "shadowWarning."\">")); + foreach( array("must_change_password", "use_shadowMin", "use_shadowMax", + "use_shadowExpire", "use_shadowInactive", + "use_shadowWarning") as $val){ + if ($this->$val == 1){ + $smarty->assign("$val", "checked"); + $smarty->assign("$val"."ACL", chkacl($this->acl, $val)); + } + } + } + + /* Fill calendar */ + $date= getdate($this->shadowExpire); + + $days= array(); + for($d= 1; $d<32; $d++){ + $days[$d]= $d; + } + $years= array(); + for($y= $date['year']-10; $y<$date['year']+10; $y++){ + $years[]= $y; + } + $months= array(_("January"), _("February"), _("March"), _("April"), + _("May"), _("June"), _("July"), _("August"), _("September"), + _("October"), _("November"), _("December")); + $smarty->assign("day", $date["mday"]); + $smarty->assign("days", $days); + $smarty->assign("months", $months); + $smarty->assign("month", $date["mon"]-1); + $smarty->assign("years", $years); + $smarty->assign("year", $date["year"]); + + /* Fill arrays */ + $smarty->assign("shells", $this->loginShellList); + $smarty->assign("secondaryGroups", $this->secondaryGroups); + $smarty->assign("primaryGroup", $this->primaryGroup); + $smarty->assign("groupMembership", $this->groupMembership); + if (count($this->groupMembership) > 16){ + $smarty->assign("groups", "too_many_for_nfs"); + } + $smarty->assign("printerList", $this->printerList); + $smarty->assign("languages", $this->config->data['MAIN']['LANGUAGES']); + + /* Checkboxes */ + if ($this->force_ids == 1){ + $smarty->assign("force_ids", "checked"); + } else { + if ($_SESSION["js"]){ + $smarty->assign("forceMode", "disabled"); + } + } + $smarty->assign("force_idsACL", chkacl($this->acl, "force_ids")); + + /* Load attributes and acl's */ + foreach($this->attributes as $val){ + $smarty->assign("$val", $this->$val); + $smarty->assign("$val"."ACL", chkacl($this->acl,$val)); + } + $smarty->assign("groupMembershipACL", chkacl($this->acl, "groupMembership")); + $smarty->assign("must_change_password", chkacl($this->acl, "must_change_password")); + + /* Work on trust modes */ + $smarty->assign("trustmodeACL", chkacl($this->acl, "trustmode")); + if ($this->trustModel == "fullaccess"){ + $trustmode= 1; + $smarty->assign("trusthide", "disabled"); + } elseif ($this->trustModel == "byhost"){ + $trustmode= 2; + $smarty->assign("trusthide", ""); + } else { + $smarty->assign("trusthide", "disabled"); + $trustmode= 0; + } + $smarty->assign("trustmode", $trustmode); + $smarty->assign("trustmodes", array( 0 => _("disabled"), 1 => _("full access"), + 2 => _("allow access to these hosts"))); + $smarty->assign("workstations", $this->accessTo); + + $display.= $smarty->fetch (get_template_path('generic.tpl', TRUE, dirname(__FILE__))); + return($display); + } + + + /* remove object from parent */ + function remove_from_parent() + { + /* Cancel if there's nothing to do here */ + if (!$this->initially_was_account){ + return; + } + + /* include global link_info */ + $ldap= $this->config->get_ldap_link(); + + /* Remove and write to LDAP */ + plugin::remove_from_parent(); + + /* Zero out array */ + $this->attrs['gosaHostACL']= array(); + + /* Keep uid, because we need it for authentification! */ + unset($this->attrs['uid']); + + @DEBUG (DEBUG_LDAP, __LINE__, __FUNCTION__, __FILE__, + $this->attributes, "Save"); + $ldap->cd($this->dn); + $ldap->modify($this->attrs); + show_ldap_error($ldap->get_error()); + + /* Delete group only if cn is uid and there are no other + members inside */ + $ldap->cd ($this->config->current['BASE']); + $ldap->search ("(&(objectClass=posixGroup)(gidNumber=".$this->gidNumber."))", array("cn", "memberUid")); + if ($ldap->count() != 0){ + $attrs= $ldap->fetch(); + if ($attrs['cn'][0] == $this->uid && + !isset($this->attrs['memberUid'])){ + + $ldap->rmDir($ldap->getDN()); + } + } + + /* Optionally execute a command after we're done */ + $this->handle_post_events("remove"); + } + + + function save_object() + { + if (isset($_POST['posixTab'])){ + /* Save values to object */ + plugin::save_object(); + + /* Save force GID attribute */ + if (chkacl ($this->acl, "force_ids") == ""){ + if (isset ($_POST['force_ids'])){ + $data= 1; + } else { + $data= 0; + } + if ($this->force_ids != $data){ + $this->is_modified= TRUE; + } + $this->force_ids= $data; + + $data= $_POST['primaryGroup']; + if ($this->primaryGroup != $data){ + $this->is_modified= TRUE; + } + $this->primaryGroup= $_POST['primaryGroup']; + } + + /* Save pwmode dependent attributes, curently hardcoded because there're + no alternatives */ + if (1 == 1){ + foreach( array("must_change_password", "use_shadowMin", "use_shadowMax", + "use_shadowExpire", "use_shadowInactive", + "use_shadowWarning") as $val){ + if (chkacl($this->acl, "$val") == ""){ + if (isset ($_POST[$val])){ + $data= 1; + } else { + $data= 0; + } + if ($data != $this->$val){ + $this->is_modified= TRUE; + } + $this->$val= $data; + } + } + } + + /* Trust mode - special handling */ + if (isset($_POST['trustmode'])){ + $saved= $this->trustModel; + if ($_POST['trustmode'] == "1"){ + $this->trustModel= "fullaccess"; + } elseif ($_POST['trustmode'] == "2"){ + $this->trustModel= "byhost"; + } else { + $this->trustModel= ""; + } + if ($this->trustModel != $saved){ + $this->is_modified= TRUE; + } + } + } + } + + + /* Save data to LDAP, depending on is_account we save or delete */ + function save() + { + /* include global link_info */ + $ldap= $this->config->get_ldap_link(); + + /* Adapt shadow values */ + if (!$this->use_shadowExpire){ + $this->shadowExpire= "0"; + } else { + /* Transform seconds to days here */ + $this->shadowExpire= (int)($this->shadowExpire / (60 * 60 * 24)) + 1; + } + if (!$this->use_shadowMax){ + $this->shadowMax= "0"; + } + if ($this->must_change_password){ + $this->shadowLastChange= (int)(date("U") / 86400) - $this->shadowMax - 1; + } else { + $this->shadowLastChange= (int)(date("U") / 86400); + } + if (!$this->use_shadowWarning){ + $this->shadowWarning= "0"; + } + + /* Check what to do with ID's */ + if ($this->force_ids == 0){ + + /* Use id's that are already set */ + if ($this->savedUidNumber != ""){ + $this->uidNumber= $this->savedUidNumber; + $this->gidNumber= $this->savedGidNumber; + } else { + + /* Calculate new id's. We need to place a lock before calling get_next_id + to get real unique values. */ + $wait= 10; + while (get_lock("uidnumber") != ""){ + sleep (1); + + /* Oups - timed out */ + if ($wait-- == 0){ + print_red (_("Failed: overriding lock")); + break; + } + } + + add_lock ("uidnumber", "gosa"); + $this->uidNumber= $this->get_next_id("uidNumber"); + if ($this->savedGidNumber != ""){ + $this->gidNumber= $this->savedGidNumber; + } else { + $this->gidNumber= $this->get_next_id("gidNumber"); + } + } + + if ($this->primaryGroup != 0){ + $this->gidNumber= $this->primaryGroup; + } + } + + if ($this->use_shadowMin != "1" ) { + $this->shadowMin = ""; + } + + if (($this->use_shadowMax != "1") && ($this->must_change_password != "1")) { + $this->shadowMax = ""; + } + + if ($this->use_shadowWarning != "1" ) { + $this->shadowWarning = ""; + } + + if ($this->use_shadowInactive != "1" ) { + $this->shadowInactive = ""; + } + + if ($this->use_shadowExpire != "1" ) { + $this->shadowExpire = ""; + } + + /* Call parents save to prepare $this->attrs */ + plugin::save(); + + /* Fill gecos */ + if (isset($this->parent) && $this->parent != NULL){ + $this->gecos= $this->parent->by_object['user']->cn; + } + + /* Trust accounts */ + $objectclasses= array(); + foreach ($this->attrs['objectClass'] as $key => $class){ + if (preg_match('/trustAccount/i', $class)){ + continue; + } + $objectclasses[]= $this->attrs['objectClass'][$key]; + } + $this->attrs['objectClass']= $objectclasses; + if ($this->trustModel != ""){ + $this->attrs['objectClass'][]= "trustAccount"; + $this->attrs['trustModel']= $this->trustModel; + $this->attrs['accessTo']= array(); + if ($this->trustModel == "byhost"){ + foreach ($this->accessTo as $host){ + $this->attrs['accessTo'][]= $host; + } + } + } else { + if ($this->was_trust_account){ + $this->attrs['accessTo']= array(); + $this->attrs['trustModel']= array(); + } + } + + /* Save data to LDAP */ + $ldap->cd($this->dn); + $ldap->modify($this->attrs); + show_ldap_error($ldap->get_error()); + + /* Remove lock needed for unique id generation */ + del_lock ("uidnumber"); + + + /* Posix accounts have group interrelationship, take care about these here. */ + if ($this->force_ids == 0 && $this->primaryGroup == 0){ + $ldap->cd($this->config->current['BASE']); + $ldap->search("(&(objectClass=posixGroup)(gidNumber=".$this->gidNumber."))", array("cn")); + + /* Create group if it doesn't exist */ + if (!$ldap->count()){ + $groupdn= preg_replace ('/^'.$this->config->current['DNMODE'].'=[^,]+,'.get_people_ou().'/i', 'cn='.$this->uid.','.get_groups_ou(), $this->dn); + + $g= new group($this->config, $groupdn); + $g->cn= $this->uid; + $g->force_gid= 1; + $g->gidNumber= $this->gidNumber; + $g->description= "Group of user ".$this->givenName." ".$this->sn; + $g->save (); + } + } + + /* Take care about groupMembership values: add to groups */ + foreach ($this->groupMembership as $key => $value){ + $g= new group($this->config, $key); + $g->addUser ($this->uid); + $g->save(); + + /* May need to save the mail part, too */ + if ($g->has_mailAccount){ + $m= new mailgroup($this->config, $key); + $m->save(); + } + } + + /* Remove from groups not listed in groupMembership */ + foreach ($this->savedGroupMembership as $key => $value){ + if (!array_key_exists ($key, $this->groupMembership)){ + $g= new group($this->config, $key); + $g->removeUser ($this->uid); + $g->save(); + + /* May need to save the mail part, too */ + if ($g->has_mailAccount){ + $m= new mailgroup($this->config, $key); + $m->save(); + } + } + } + + /* Optionally execute a command after we're done */ + if ($this->initially_was_account == $this->is_account){ + if ($this->is_modified){ + $this->handle_post_events("mofify"); + } + } else { + $this->handle_post_events("add"); + } + } + + /* Check formular input */ + function check() + { + /* Include global link_info */ + $ldap= $this->config->get_ldap_link(); + + /* Reset message array */ + $message= array(); + + /* must: homeDirectory */ + if ($this->homeDirectory == ""){ + $message[]= _("The required field 'Home directory' is not set."); + } + if (!is_path($this->homeDirectory)){ + $message[]= _("Please enter a valid path in 'Home directory' field."); + } + + /* Check ID's if they are forced by user */ + if ($this->force_ids == "1"){ + + /* Valid uid/gid? */ + if (!is_id($this->uidNumber)){ + $message[]= _("Value specified as 'UID' is not valid."); + } else { + if ($this->uidNumber < $this->config->current['MINID']){ + $message[]= _("Value specified as 'UID' is too small."); + } + } + if (!is_id($this->gidNumber)){ + $message[]= _("Value specified as 'GID' is not valid."); + } else { + if ($this->gidNumber < $this->config->current['MINID']){ + $message[]= _("Value specified as 'GID' is too small."); + } + } + + } + + /* Check shadow settings, well I like spaghetties... */ + if ($this->use_shadowMin){ + if (!is_id($this->shadowMin)){ + $message[]= _("Value specified as 'shadowMin' is not valid."); + } + } + if ($this->use_shadowMax){ + if (!is_id($this->shadowMax)){ + $message[]= _("Value specified as 'shadowMax' is not valid."); + } + } + if ($this->use_shadowWarning){ + if (!is_id($this->shadowWarning)){ + $message[]= _("Value specified as 'shadowWarning' is not valid."); + } + if (!$this->use_shadowMax){ + $message[]= _("'shadowWarning' without 'shadowMax' makes no sense."); + } + if ($this->shadowWarning > $this->shadowMax){ + $message[]= _("Value specified as 'shadowWarning' should be smaller than 'shadowMax'."); + } + if ($this->use_shadowMin && $this->shadowWarning < $this->shadowMin){ + $message[]= _("Value specified as 'shadowWarning' should be greater than 'shadowMin'."); + } + } + if ($this->use_shadowInactive){ + if (!is_id($this->shadowInactive)){ + $message[]= _("Value specified as 'shadowInactive' is not valid."); + } + if (!$this->use_shadowMax){ + $message[]= _("'shadowInactive' without 'shadowMax' makes no sense."); + } + } + if ($this->use_shadowMin && $this->use_shadowMax){ + if ($this->shadowMin > $this->shadowMax){ + $message[]= _("Value specified as 'shadowMin' should be smaller than 'shadowMax'."); + } + } + + return ($message); + } + + + /* Add posix user to some groups */ + function addGroup ($groups) + { + /* include global link_info */ + $ldap= $this->config->get_ldap_link(); + + /* Walk through groups and add the descriptive entry if not exists */ + foreach ($groups as $value){ + if (!array_key_exists($value, $this->groupMembership)){ + $ldap->cat($value); + $attrs= $ldap->fetch(); + error_reporting (0); + if (!isset($attrs['description'][0])){ + $entry= $attrs["cn"][0]; + } else { + $dsc= preg_replace ('/^Group of user/', _("Group of user"), $attrs["description"][0]); + $entry= $attrs["cn"][0]." [$dsc]"; + } + error_reporting (E_ALL); + $this->groupMembership[$ldap->getDN()]= $entry; + } + } + + /* Sort groups */ + asort ($this->groupMembership); + reset ($this->groupMembership); + } + + + /* Del posix user from some groups */ + function delGroup ($groups) + { + $dest= array(); + + foreach ($this->groupMembership as $key => $value){ + if (!in_array($key, $groups)){ + $dest[$key]= $value; + } + } + $this->groupMembership= $dest; + } + + /* Adapt from template, using 'dn' */ + function adapt_from_template($dn) + { + /* Include global link_info */ + $ldap= $this->config->get_ldap_link(); + + plugin::adapt_from_template($dn); + $template= $this->attrs['uid'][0]; + + /* Adapt group membership */ + $ldap->cd($this->config->current['BASE']); + $ldap->search("(&(objectClass=posixGroup)(memberUid=".$this->attrs["uid"][0]."))", array("description", "cn")); + + while ($this->attrs= $ldap->fetch()){ + if (!isset($this->attrs["description"][0])){ + $entry= $this->attrs["cn"][0]; + } else { + $entry= $this->attrs["cn"][0]." [".$this->attrs["description"][0]."]"; + } + $this->groupMembership[$ldap->getDN()]= $entry; + } + + /* Fix primary group settings */ + $ldap->cd($this->config->current['BASE']); + $ldap->search("(&(objectClass=posixGroup)(cn=$template)(gidNumber=".$this->gidNumber."))", array("cn")); + if ($ldap->count() != 1){ + $this->primaryGroup= $this->gidNumber; + } + } + + function get_next_id($attrib) + { + $ids= array(); + $ldap= $this->config->get_ldap_link(); + + $ldap->cd ($this->config->current['BASE']); + $ldap->search ("($attrib=*)", array("$attrib")); + + /* Get list of ids */ + while ($attrs= $ldap->fetch()){ + $ids[]= (int)$attrs["$attrib"][0]; + } + + /* Find out next free id near to UID_BASE */ + for ($id= $this->config->current['UIDBASE']; $id++; $id<65000){ + if (!in_array($id, $ids)){ + return ($id); + } + } + + /* Should not happen */ + if ($id == 65000){ + print_red(_("Too many users, can't allocate a free ID!")); + exit; + } + + } + +} + +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/plugins/personal/posix/generic.tpl b/plugins/personal/posix/generic.tpl new file mode 100644 index 000000000..7233e3640 --- /dev/null +++ b/plugins/personal/posix/generic.tpl @@ -0,0 +1,137 @@ + + + + + + +
+

{t}Generic{/t}

+ + + + + + + + + + + + + + + + + +
{t}Home directory{/t}{$must} + +
{t}Shell{/t} + +
{t}Primary group{/t} + +
{t}Status{/t}{$status}
+
+ + + + + + + + + + + +
+ + {t}Force UID/GID{/t} + {t}UID{/t}
{t}GID{/t}
+
+   + +

{t}Group membership{/t}

+ {if $groups eq "too_many_for_nfs"} + {t}(Warning: more than 16 groups are not supported by NFS!){/t} +
+ {/if} + +
+   + +
+ +

 

+ + + + + + + + +
+

{t}Account{/t}

+
+ {include file="$pwmode.tpl"} +
+ +

 

+

+ + + + + + +
+

{t}Environment{/t}

+ + + + + + + + + +
{t}Default printer{/t} + +
{t}Default language{/t} + +
+
+   + +

{t}System trust{/t}  + +

+ +
+   + +
+ + + + + diff --git a/plugins/personal/posix/main.inc b/plugins/personal/posix/main.inc new file mode 100644 index 000000000..3cf9623f6 --- /dev/null +++ b/plugins/personal/posix/main.inc @@ -0,0 +1,136 @@ +dn); + sess_del ('edit'); + sess_del ('posixAccount'); + } + + /* Create posixAccount object on demand */ + if (!isset($_SESSION['posixAccount']) || (isset($_GET['reset']) && $_GET['reset'] == 1)){ + $_SESSION['posixAccount']= new posixAccount ($config, $ui->dn); + } + $posixAccount= $_SESSION['posixAccount']; + + /* save changes back to object */ + if (isset ($_SESSION['edit'])){ + $posixAccount->save_object (); + } + + /* Enter edit mode? */ + if (isset($_POST['edit'])){ + + /* Check locking */ + if (($username= get_lock($ui->dn)) != ""){ + $_SESSION['back_plugin']= $plug; + gen_locked_message ($username, $ui->dn); + exit (); + } + + /* Lock the current entry */ + add_lock ($ui->dn, $ui->dn); + $_SESSION['dn']= $ui->dn; + $_SESSION['edit']= TRUE; + } + + /* Adjust acl's to mode */ + if (isset($_SESSION['edit'])){ + $acl= get_permissions ($ui->dn, $ui->subtreeACL); + $posixAccount->acl= get_module_permission($acl, "posix", $ui->dn); + } else { + $acl= get_permissions ($ui->dn, $ui->subtreeACL); + $editacl= get_module_permission($acl, "posix", $ui->dn); + $posixAccount->acl= "#none#"; + } + + /* save changes to LDAP and disable edit mode */ + $info= ""; + if (isset($_POST['edit_finish'])){ + + /* Perform checks */ + $message= $posixAccount->check (); + + /* No errors, save object */ + if (count ($message) == 0){ + $posixAccount->save (); + gosa_log ("User/posix object'".$ui->dn."' has been saved"); + $posixAccount->acl= "#none#"; + del_lock ($ui->dn); + sess_del ('edit'); + + /* Write back to session */ + $_SESSION['posixAccount']= $posixAccount; + } else { + /* Errors found, show message */ + show_errors ($message); + } + } + + /* Execute formular */ + $display.= $posixAccount->execute (); + + /* Store changes in session */ + if (isset ($_SESSION['edit'])){ + $_SESSION['posixAccount']= $posixAccount; + } + + /* Show page footer depending on the mode */ + if (!$posixAccount->group_dialog && $posixAccount->is_account){ + + $display.= "

"; + + /* Are we in edit mode? */ + if (isset($_SESSION['edit'])){ + $display.= "\n"; + $display.= " "; + $display.= "\n"; + $info= " ".$ui->dn." "; + } else { + $info= " ".$ui->dn." "; + if (isset($editacl) && $editacl != "#none#"){ + $info.= " ". + _("Click the 'Edit' button below to change informations in this dialog"); + + $display.= "\n"; + } + $display.= "\n"; + } + $display.= "

\n"; + } + + /* Page header*/ + $display= print_header(get_template_path('images/posix.png'), + _("Unix settings"), $info).$display; + +} + +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/plugins/personal/posix/posix_groups.tpl b/plugins/personal/posix/posix_groups.tpl new file mode 100644 index 000000000..715145a11 --- /dev/null +++ b/plugins/personal/posix/posix_groups.tpl @@ -0,0 +1,60 @@ + + + + + +
+
+

+ {t}Select groups to add{/t} {$hint} +

+
+
+

+ + +

+
+
+
+

[F]{t}Filters{/t}

+
+
+

+ + {$alphabet} +
+

+

+ {t}Show primary groups{/t}
+ {t}Show samba groups{/t}
+ {t}Show application groups{/t}
+ {t}Show mail groups{/t}
+ {t}Show functional groups{/t} +

+

+ +
 {t}Display groups of department{/t}
+

+

+ +
 {t}Display groups matching{/t}
+

+

+ +
 {t}Display groups of user{/t}
+

+ {$apply} +
+
+ +

+ +   + +

+ diff --git a/plugins/personal/posix/posix_shadow.tpl b/plugins/personal/posix/posix_shadow.tpl new file mode 100644 index 000000000..b671e626c --- /dev/null +++ b/plugins/personal/posix/posix_shadow.tpl @@ -0,0 +1,46 @@ + + + + + + +
+ + {t}User must change password on first login{/t} +
+ + {$shadowmins} +
+ + {$shadowmaxs} +
+
+   + + + {t}Password expires on{/t} + + + + +
+ + {$shadowinactives} +
+ + {$shadowwarnings} +
+ + + diff --git a/plugins/personal/posix/trust_machines.tpl b/plugins/personal/posix/trust_machines.tpl new file mode 100644 index 000000000..073b2516a --- /dev/null +++ b/plugins/personal/posix/trust_machines.tpl @@ -0,0 +1,48 @@ + + + + + +
+
+

+ {t}Select systems to add{/t} {$hint}
+

+
+
+

+ +

+
+
+
+

[F]{ +t}Filters{/t}

+
+
+

+ + {$alphabet} +
+

+

+ +
 {t}Display systems of department{/t}
+

+

+ +
 {t}Display systems matching{/t}
+

+ {$apply} +
+
+ +

+ +   + +

diff --git a/plugins/personal/samba/class_sambaAccount.inc b/plugins/personal/samba/class_sambaAccount.inc new file mode 100644 index 000000000..8b5cf10a7 --- /dev/null +++ b/plugins/personal/samba/class_sambaAccount.inc @@ -0,0 +1,924 @@ + "Eins ist toll", "zwei" => "Zwei ist noch besser"); + + /* Switch for Samba version */ + var $samba3= FALSE; + var $uidNumber= 65535; + var $gidNumber= 65535; + + /* Samba 2 attributes */ + var $pwdLastSet= "0"; + var $logonTime= "0"; + var $logoffTime= "2147483647"; + var $kickoffTime= "2147483647"; + var $pwdCanChange= "0"; + var $pwdMustChange= "0"; + var $password_expires= 0; + var $acctFlags= "[UX ]"; + var $smbHome= ""; + var $homeDrive= ""; + var $scriptPath= ""; + var $profilePath= ""; + var $rid= ""; + var $primaryGroupID= ""; + + /* Samba 3 attributes */ + var $SID= ""; + var $ridBase= 0; + var $sambaSID= ""; + var $sambaPwdLastSet= "0"; + var $sambaLogonTime= "0"; + var $sambaLogoffTime= "2147483647"; + var $sambaKickoffTime= "2147483647"; + var $sambaPwdCanChange= "0"; + var $sambaPwdMustChange= "0"; + var $sambaAcctFlags= "[UX ]"; + var $sambaHomePath= ""; + var $sambaHomeDrive= ""; + var $sambaLogonScript= ""; + var $sambaProfilePath= ""; + var $sambaPrimaryGroupSID= ""; + var $sambaDomainName= ""; + var $sambaUserWorkstations= ""; + var $sambaBadPasswordCount= ""; + var $sambaBadPasswordTime= ""; + var $sambaPasswordHistory= ""; + var $sambaLogonHours= ""; + var $orig_sambaDomainName= ""; + var $sambaMungedDial= ""; + var $mungedObject; + + /* Helper */ + var $show_ws_dialog= FALSE; + var $logon_time_set= 0; + var $logoff_time_set= 0; + var $kickoff_time_set= 0; + + /* attribute list for save action */ + var $ctxattributes= array(); + var $attributes= array(); + var $objectclasses= array(); + + function sambaAccount ($config, $dn= NULL) + { + /* Load attributes depending on the samba version */ + $this->samba3= ($config->current['SAMBAVERSION'] == 3); + + if ($this->samba3){ + $this->attributes= array ("sambaSID", "sambaPwdLastSet", "sambaLogonTime", + "sambaLogoffTime", "sambaKickoffTime", "sambaPwdCanChange", + "sambaPwdMustChange", "sambaAcctFlags", "uid", "sambaMungedDial", + "sambaHomePath", "sambaHomeDrive", "sambaLogonScript", + "sambaProfilePath", "sambaPrimaryGroupSID", "sambaDomainName", + "sambaUserWorkstations", "sambaPasswordHistory", + "sambaLogonHours", "sambaBadPasswordTime", + "sambaBadPasswordCount"); + $this->objectclasses= array ("sambaSamAccount"); + $this->mungedObject= new sambaMungedDial; + $this->ctxattributes= $this->mungedObject->ctxattributes; + } else { + $this->attributes= array ("pwdLastSet", "logonTime", "logoffTime", "kickoffTime", + "pwdCanChange", "pwdMustChange", "acctFlags", "profilePath", "uid", + "smbHome", "homeDrive", "scriptPath", "rid", "primaryGroupID"); + $this->objectclasses= array ("sambaAccount"); + } + + plugin::plugin ($config, $dn); + + /* Get samba Domain in case of samba 3 */ + if ($this->samba3 && $this->sambaSID != ""){ + $this->SID= preg_replace ("/-[^-]+$/", "", $this->sambaSID); + $ldap= $this->config->get_ldap_link(); + $ldap->cd($this->config->current['BASE']); + $ldap->search ("(&(objectClass=sambaDomain)(sambaSID=$this->SID))"); + if ($ldap->count() != 0){ + $attrs= $ldap->fetch(); + $this->ridBase= $attrs['sambaAlgorithmicRidBase'][0]; + if ($this->sambaDomainName == ""){ + $this->sambaDomainName= $attrs['sambaDomainName'][0]; + } + } else { + if ($this->sambaDomainName == ""){ + $this->sambaDomainName= "DEFAULT"; + } + $this->ridBase= $this->config->current['RIDBASE']; + $this->SID= $this->config->current['SID']; + } + + /* Save in order to compare later on */ + $this->orig_sambaDomainName= $this->sambaDomainName; + } + + /* Fill mungedDial field */ + if ($this->samba3 && isset($this->attrs['sambaMungedDial'])){ + $this->mungedObject->load($this->sambaMungedDial); + } + + /* Password expiery */ + if(isset($this->attrs['sambaPwdMustChange']) && + $this->attrs['sambaPwdMustChange'][0] != 0){ + $this->password_expires= 1; + } + + if(isset($this->attrs['sambaLogonTime']) && ! ( + $this->attrs['sambaLogonTime'][0] == 0 || + $this->attrs['sambaLogonTime'][0] == 2147483647 + )){ + $this->logon_time_set= 1; + } + if(isset($this->attrs['sambaLogoffTime']) && ! ( + $this->attrs['sambaLogoffTime'][0] == 0 || + $this->attrs['sambaLogoffTime'][0] == 2147483647 + )){ + $this->logoff_time_set= 1; + } + + /* Account expiery */ + if(isset($this->attrs['sambaKickoffTime']) && ! ( + $this->attrs['sambaKickoffTime'][0] == 0 || + $this->attrs['sambaKickoffTime'][0] == 2147483647 + )){ + $this->kickoff_time_set= 1; + } + + /* Get global filter config */ + if (!is_global("sambafilter")){ + $ui= get_userinfo(); + $base= get_base_from_people($ui->dn); + $sambafilter= array( "depselect" => $base, "regex" => "*"); + register_global("sambafilter", $sambafilter); + } + + /* Save initial account state */ + $this->initially_was_account= $this->is_account; + } + + function execute() + { + /* Do we need to flip is_account state? */ + if (isset($_POST['modify_state'])){ + $this->is_account= !$this->is_account; + } + /* Do we represent a valid account? */ + if (!$this->is_account && $this->parent == NULL){ + $display= " ". + _("This account has no samba extensions.").""; + $display.= back_to_main(); + return ($display); + } + + /* Show tab dialog headers */ + $display= ""; + if ($this->parent != NULL){ + if ($this->is_account){ + $display= $this->show_header(_("Remove samba account"), + _("This account has samba features enabled. You can disable them by clicking below.")); + } else { + $obj= $this->parent->by_object['posixAccount']; + + /* Samba3 dependency on posix accounts are enabled + in the moment, because I need to rely on unique + uidNumbers. There'll be a better solution later + on. */ + if ($obj->is_account){ + + $display= $this->show_header(_("Create samba account"), + _("This account has samba features disabled. You can enable them by clicking below.")); + } else { + $display= $this->show_header(_("Create samba account"), + _("This account has samba features disabled. Posix features are needed for samba accounts, enable them first."), TRUE); + } + return ($display); + } + } + + /* Prepare templating */ + $smarty= get_smarty(); + if ($this->sambaPwdMustChange=="0"){ + $date= getdate(); + } else { + $date= getdate($this->sambaPwdMustChange); + } + + if ($this->sambaLogonTime=="2147483647" || $this->sambaLogonTime=="0"){ + $sambaLogonTime_date= getdate(); + } else { + $sambaLogonTime_date= getdate($this->sambaLogonTime); + } + + if ($this->sambaLogoffTime=="2147483647" || $this->sambaLogoffTime=="0"){ + $sambaLogoffTime_date= getdate(); + } else { + $sambaLogoffTime_date= getdate($this->sambaLogoffTime); + } + + if ($this->sambaKickoffTime=="2147483647" || $this->sambaKickoffTime=="0"){ + $sambaKickoffTime_date= getdate(); + } else { + $sambaKickoffTime_date= getdate($this->sambaKickoffTime); + } + + /* Remove user workstations? */ + if (isset($_POST["delete_ws"]) && isset($_POST['workstation_list'])){ + $tmp= $this->sambaUserWorkstations; + foreach($_POST['workstation_list'] as $name){ + $tmp= preg_replace("/$name/", '', $tmp); + $this->is_modified= TRUE; + } + $tmp= preg_replace('/,+/', ',', $tmp); + $this->sambaUserWorkstations= trim($tmp, ','); + } + + /* Add user workstation? */ + if (isset($_POST["add_ws"])){ + $this->show_ws_dialog= TRUE; + $this->dialog= TRUE; + } + + /* Add user workstation finished? */ + if (isset($_POST["add_ws_finish"]) || isset($_POST["add_ws_cancel"])){ + $this->show_ws_dialog= FALSE; + $this->dialog= FALSE; + } + + /* Add user workstation? */ + if (isset($_POST["add_ws_finish"]) && isset($_POST['wslist'])){ + $tmp= $this->sambaUserWorkstations; + foreach($_POST['wslist'] as $ws){ + $tmp.= ",$ws"; + } + $tmp= preg_replace('/,+/', ',', $tmp); + $this->sambaUserWorkstations= trim($tmp, ','); + $this->is_modified= TRUE; + } + + /* Show ws dialog */ + if ($this->show_ws_dialog){ + + /* Save data */ + $sambafilter= get_global("sambafilter"); + foreach( array("depselect", "regex") as $type){ + if (isset($_POST[$type])){ + $sambafilter[$type]= $_POST[$type]; + } + } + if (isset($_GET['search'])){ + $s= mb_substr($_GET['search'], 0, 1, "UTF8")."*"; + if ($s == "**"){ + $s= "*"; + } + $sambafilter['regex']= $s; + } + register_global("sambafilter", $sambafilter); + + /* Get workstation list */ + $exclude= ""; + foreach(split(',', $this->sambaUserWorkstations) as $ws){ + $exclude.= "(cn=$ws$)"; + } + if ($exclude != ""){ + $exclude= "(!(|$exclude))"; + } + $acl= array($this->config->current['BASE'] => ":all"); + $regex= $sambafilter['regex']; + $filter= "(&(objectClass=sambaSAMAccount)$exclude(uid=*$)(|(uid=$regex)(cn=$regex)))"; + $res= get_list($acl, "$filter", TRUE, $sambafilter['depselect'], array("uid"), TRUE); + $wslist= array(); + foreach ($res as $attrs){ + $wslist[]= preg_replace('/\$/', '', $attrs['uid'][0]); + } + asort($wslist); + + $smarty->assign("search_image", get_template_path('images/search.png')); + $smarty->assign("launchimage", get_template_path('images/small_filter.png')); + $smarty->assign("tree_image", get_template_path('images/tree.png')); + $smarty->assign("deplist", $this->config->idepartments); + $smarty->assign("alphabet", generate_alphabet()); + foreach( array("depselect", "regex") as $type){ + $smarty->assign("$type", $sambafilter[$type]); + } + $smarty->assign("hint", print_sizelimit_warning()); + $smarty->assign("wslist", $wslist); + $display= $smarty->fetch (get_template_path('samba3_workstations.tpl', TRUE, + dirname(__FILE__))); + return ($display); + } + + /* Fill calendar */ + $days= array(); + for($d= 1; $d<32; $d++){ + $days[]= $d; + } + $years= array(); + for($y= $date['year']-4; $y<$date['year']+4; $y++){ + $years[]= $y; + } + $months= array(_("January"), _("February"), _("March"), _("April"), + _("May"), _("June"), _("July"), _("August"), _("September"), + _("October"), _("November"), _("December")); + $smarty->assign("day", $date["mday"]); + $smarty->assign("days", $days); + $smarty->assign("months", $months); + $smarty->assign("month", $date["mon"]-1); + $smarty->assign("years", $years); + $smarty->assign("year", $date["year"]); + + $sambaLogonTime_days= array(); + for($d= 1; $d<32; $d++){ + $sambaLogonTime_days[]= $d; + } + $sambaLogonTime_years= array(); + for($y= $date['year']-4; $y<$date['year']+4; $y++){ + $sambaLogonTime_years[]= $y; + } + $sambaLogonTime_months= array(_("January"), _("February"), _("March"), _("April"), + _("May"), _("June"), _("July"), _("August"), _("September"), + _("October"), _("November"), _("December")); + $smarty->assign("sambaLogonTime_day", $sambaLogonTime_date["mday"]); + $smarty->assign("sambaLogonTime_days", $sambaLogonTime_days); + $smarty->assign("sambaLogonTime_months", $sambaLogonTime_months); + $smarty->assign("sambaLogonTime_month", $sambaLogonTime_date["mon"]-1); + $smarty->assign("sambaLogonTime_years", $sambaLogonTime_years); + $smarty->assign("sambaLogonTime_year", $sambaLogonTime_date["year"]); + + $sambaLogoffTime_days= array(); + for($d= 1; $d<32; $d++){ + $sambaLogoffTime_days[]= $d; + } + $sambaLogoffTime_years= array(); + for($y= $date['year']-4; $y<$date['year']+4; $y++){ + $sambaLogoffTime_years[]= $y; + } + $sambaLogoffTime_months= array(_("January"), _("February"), _("March"), _("April"), + _("May"), _("June"), _("July"), _("August"), _("September"), + _("October"), _("November"), _("December")); + $smarty->assign("sambaLogoffTime_day", $sambaLogoffTime_date["mday"]); + $smarty->assign("sambaLogoffTime_days", $sambaLogoffTime_days); + $smarty->assign("sambaLogoffTime_months", $sambaLogoffTime_months); + $smarty->assign("sambaLogoffTime_month", $sambaLogoffTime_date["mon"]-1); + $smarty->assign("sambaLogoffTime_years", $sambaLogoffTime_years); + $smarty->assign("sambaLogoffTime_year", $sambaLogoffTime_date["year"]); + + $sambaKickoffTime_days= array(); + for($d= 1; $d<32; $d++){ + $sambaKickoffTime_days[]= $d; + } + $sambaKickoffTime_years= array(); + for($y= $date['year']-4; $y<$date['year']+4; $y++){ + $sambaKickoffTime_years[]= $y; + } + $sambaKickoffTime_months= array(_("January"), _("February"), _("March"), _("April"), + _("May"), _("June"), _("July"), _("August"), _("September"), + _("October"), _("November"), _("December")); + $smarty->assign("sambaKickoffTime_day", $sambaKickoffTime_date["mday"]-1); + $smarty->assign("sambaKickoffTime_days", $sambaKickoffTime_days); + $smarty->assign("sambaKickoffTime_months", $sambaKickoffTime_months); + $smarty->assign("sambaKickoffTime_month", $sambaKickoffTime_date["mon"]-1); + $smarty->assign("sambaKickoffTime_years", $sambaKickoffTime_years); + $smarty->assign("sambaKickoffTime_year", $sambaKickoffTime_date["year"]); + + /* Fill boxes */ + if ($this->samba3){ + $domains= array(); + foreach($this->config->data['SERVERS']['SAMBA'] as $name => $content){ + $domains[]= $name; + } + $smarty->assign("domains", $domains); + } + $letters= array(); + for ($i= 68; $i<91; $i++){ + $letters[]= chr($i).":"; + } + $smarty->assign("drives", $letters); + + /* Fill terminal server settings */ + if ($this->samba3){ + foreach ($this->ctxattributes as $attr){ + /* Fill common attributes */ + if (isset($this->mungedObject->ctx[$attr])){ + $smarty->assign("$attr", $this->mungedObject->ctx[$attr]); + // Set field to blank if value is 0 + if(in_array($attr, array("CtxMaxConnectionTime", "CtxMaxDisconnectionTime", "CtxMaxIdleTime"))) { + if($this->mungedObject->ctx[$attr] == 0) { + $smarty->assign("$attr", ""); + } + } + } + $smarty->assign("$attr"."ACL", chkacl($this->acl, $attr)); + } + + /* Assign enum values for preset items */ + $shadowModeVals= array( "0" => _("disabled"), + "1" => _("input on, notify on"), + "2" => _("input on, notify off"), + "3" => _("input off, notify on"), + "4" => _("input off, nofify off")); + + $brokenConnModeVals= array( "0" => _("disconnect"), + "1" => _("reset")); + + $reConnModeVals= array( "0" => _("from any client"), + "1" => _("from previous client only")); + + /* Fill preset items */ + $smarty->assign("shadow", $shadowModeVals); + $smarty->assign("brokenconn", $brokenConnModeVals); + $smarty->assign("reconn", $reConnModeVals); + + /* Fill preset items with values */ + $smarty->assign("shadowmode", $this->mungedObject->getShadow()); + $smarty->assign("shadowACL", chkacl($this->acl,"shadow")); + $smarty->assign("brokenconnmode", $this->mungedObject->getBrokenConn()); + $smarty->assign("brokenconnACL", chkacl($this->acl,"brokenconn")); + $smarty->assign("reconnmode", $this->mungedObject->getReConn()); + $smarty->assign("reconnACL", chkacl($this->acl,"reconn")); + + /* Set checkboxes to checked or unchecked state */ + $smarty->assign("tslogin", $this->mungedObject->getTsLogin()?"checked":""); + $smarty->assign("tsloginACL", chkacl($this->acl,"tslogin")); + $smarty->assign("inherit", $this->mungedObject->getInheritMode()?"checked":""); + $smarty->assign("inheritACL", chkacl($this->acl,"inherit")); + $smarty->assign("connectclientdrives", + $this->mungedObject->getConnectClientDrives()?"checked":""); + $smarty->assign("connectclientdrivesACL", chkacl($this->acl,"connectclientdrives")); + $smarty->assign("connectclientprinters", + $this->mungedObject->getConnectClientPrinters()?"checked":""); + $smarty->assign("connectclientprintersACL", chkacl($this->acl,"connectclientprinters")); + $smarty->assign("defaultprinter", + $this->mungedObject->getDefaultPrinter()?"checked":""); + $smarty->assign("defaultprinterACL", chkacl($this->acl,"defaultprinter")); + $smarty->assign("CtxMaxConnectionTimeF", + $this->mungedObject->getCtxMaxConnectionTimeF()?"checked":""); + $smarty->assign("CtxMaxDisconnectionTimeF", + $this->mungedObject->getCtxMaxDisconnectionTimeF()?"checked":""); + $smarty->assign("CtxMaxIdleTimeF", + $this->mungedObject->getCtxMaxIdleTimeF()?"checked":""); + + /* Fill sambaUserWorkstations */ + $ws= split(",", $this->sambaUserWorkstations); + sort($ws); + $smarty->assign("workstations", $ws); + $smarty->assign("sambaUserWorkstationACL", chkacl($this->acl,"sambauserworkstation")); + } + + /* Variables */ + foreach($this->attributes as $val){ + $smarty->assign("$val", $this->$val); + $smarty->assign("$val"."ACL", chkacl($this->acl,$val)); + } + + /* Checkboxes */ + foreach(array( "N" => "no_password_required", + "D" => "temporary_disable") as $key => $val){ + if (is_integer(strpos($this->sambaAcctFlags, "$key"))) { + $smarty->assign("flags$key", "checked"); + } else { + $smarty->assign("flags$key", ""); + } + $smarty->assign("$val"."ACL", chkacl($this->acl, "$val")); + } + if ($this->pwdCanChange=="1"){ + $smarty->assign("flagsP", "checked"); + } + if ($this->password_expires=="1"){ + $smarty->assign("flagsC", "checked"); + } + if ($this->logon_time_set=="1"){ + $smarty->assign("flagsL", "checked"); + } + if ($this->logoff_time_set=="1"){ + $smarty->assign("flagsO", "checked"); + } + if ($this->kickoff_time_set=="1"){ + $smarty->assign("flagsK", "checked"); + } + + $smarty->assign("allow_pwchangeACL", chkacl($this->acl, "allow_pwchange")); + $smarty->assign("password_expiresACL", chkacl($this->acl, "password_expires")); + $smarty->assign("sambaDomainNameACL", chkacl($this->acl, "sambaDomainName")); + $smarty->assign("logon_time_setACL", chkacl($this->acl, "logon_time_set")); + $smarty->assign("logoff_time_setACL", chkacl($this->acl, "logoff_time_set")); + $smarty->assign("kickoff_time_setACL", chkacl($this->acl, "kickoff_time_set")); + $smarty->assign("sambaLogonTimeACL", chkacl($this->acl, "sambaLogonTime")); + $smarty->assign("sambaLogoffTimeACL", chkacl($this->acl, "sambaLogoffTime")); + $smarty->assign("sambaKickoffTimeACL", chkacl($this->acl, "sambaKickoffTime")); + + + /* In case of javascript, disable some fields on demand */ + if ($this->samba3 && $_SESSION['js']){ + foreach($this->mungedObject->getOnDemandFlags() as $key => $value) { + $smarty->assign("$key", "$value"); + } + } + + /* Show main page */ + if ($this->samba3){ + $display.= $smarty->fetch (get_template_path('samba3.tpl', TRUE, dirname(__FILE__))); + } else { + $display.= $smarty->fetch (get_template_path('samba2.tpl', TRUE, dirname(__FILE__))); + } + + return ($display); + } + + function remove_from_parent() + { + /* Cancel if there's nothing to do here */ + if (!$this->initially_was_account){ + return; + } + + /* include global link_info */ + $ldap= $this->config->get_ldap_link(); + + plugin::remove_from_parent(); + + /* Keep uid attribute for gosaAccount */ + unset($this->attrs['uid']); + unset($this->attrs['uidNumber']); + unset($this->attrs['gidNumber']); + @DEBUG (DEBUG_LDAP, __LINE__, __FUNCTION__, __FILE__, + $this->attributes, "Save"); + $ldap->cd($this->dn); + $ldap->modify($this->attrs); + show_ldap_error($ldap->get_error()); + + /* Optionally execute a command after we're done */ + $this->handle_post_events("remove"); + } + + + /* Check for input problems */ + function check() + { + $message= array(); + + if ($this->samba3){ + + /* Strings */ + foreach (array( "sambaHomePath" => _("Home directory"), + "sambaProfilePath" => _("Profile path")) as $key => $val){ + if (!$this->mungedObject->is_samba_path($this->$key)){ + $message[]= sprintf(_("The value specified as '%s' contains invalid characters!"), $val); + } + } + + /* Numeric values */ + foreach (array( "CtxMaxConnectionTime" => _("Connection"), + "CtxMaxDisconnectionTime" => _("Disconnection"), + "CtxMaxIdleTime" => _("IDLE")) as $key => $val){ + + if (isset($this->mungedObject->ctx[$key]) && !is_id($this->mungedObject->ctx[$key]) && $val != 0){ + $message[]= sprintf(_("The timeout property '%s' is checked and contains invalid or no characters!"), $val); + } + } + + /* Too many workstations? Windows usrmgr only supports eight */ + if (substr_count($this->sambaUserWorkstations, ",") >= 8){ + $message[]= _("The windows user manager only allows eight clients. You've specified more than eight."); + } + } + + return ($message); + } + + + /* Save data to object */ + function save_object() + { + /* We only care if we are on the sambaTab... */ + if (isset($_POST['sambaTab'])){ + plugin::save_object(); + + /* Take care about access options */ + if (chkacl ($this->acl, "acctFlags") == ""){ + if ($this->samba3){ + $attrname= "sambaPwdCanChange"; + } else { + $attrname= "pwdCanChange"; + } + if (isset($_POST["allow_pwchange"]) && $_POST["allow_pwchange"] == 1){ + $tmp= 1; + } else { + $tmp= 0; + } + if ($this->$attrname != $tmp){ + $this->is_modified= TRUE; + } + $this->pwdCanChange= $tmp; + $this->sambaPwdCanChange= $tmp; + } + $tmp= "UX"; + if (isset($_POST["no_password_required"])){ + if ($_POST["no_password_required"] == 1){ + $tmp.= "N"; + } + } + if (isset($_POST["password_expires"])){ + if ($_POST["password_expires"] == 1){ + $this->password_expires= 1; + } + } else { + $this->password_expires= 0; + } + if (isset($_POST["temporary_disable"])){ + if ($_POST["temporary_disable"] == 1){ + $tmp.= "D"; + } + } + if (isset($_POST["logon_time_set"])){ + if ($_POST["logon_time_set"] == 1){ + $this->logon_time_set= 1; + } + } else { + $this->logon_time_set= 0; + } + if (isset($_POST["logoff_time_set"])){ + if ($_POST["logoff_time_set"] == 1){ + $this->logoff_time_set= 1; + } + } else { + $this->logoff_time_set= 0; + } + if (isset($_POST["kickoff_time_set"])){ + if ($_POST["kickoff_time_set"] == 1){ + $this->kickoff_time_set= 1; + } + } else { + $this->kickoff_time_set= 0; + } + + $fill= ""; + for ($i= strlen($tmp); $i<12; $i++){ + $fill.= " "; + } + + $tmp= "[$tmp$fill]"; + + /* Only save if acl's are set */ + if (chkacl ($this->acl, "acctFlags") == ""){ + if ($this->samba3){ + $attrname= "sambaAcctFlags"; + } else { + $attrname= "acctFlags"; + } + if ($this->$attrname != $tmp){ + $this->is_modified= TRUE; + } + $this->$attrname= $tmp; + } + + /* Save sambaDomain attribute */ + if (chkacl ($this->acl, "sambaDomainName") == "" && $this->samba3 && + isset ($_POST['sambaDomainName'])){ + + $this->sambaDomainName= validate($_POST['sambaDomainName']); + } + + /* Save CTX values */ + if ($this->samba3){ + /* Save obvious values */ + foreach($this->ctxattributes as $val){ + if (isset($_POST[$val]) && chkacl($this->acl, "$val") == ""){ + if (get_magic_quotes_gpc()) { + $this->mungedObject->ctx[$val]= stripcslashes(validate($_POST[$val])); + } else { + $this->mungedObject->ctx[$val]= validate($_POST[$val]); + } + } + } + + /* Save checkbox states. */ + $this->mungedObject->setTsLogin(!isset($_POST['tslogin']) + && chkacl($this->acl, "tslogin") == ""); + $this->mungedObject->setBrokenConn($_POST['brokenconn'] == '1' + && chkacl($this->acl, "brokenconn") == ""); + $this->mungedObject->setReConn($_POST['reconn'] == '1' + && chkacl($this->acl, "reconn") == ""); + $this->mungedObject->setInheritMode(isset($_POST['inherit']) + && chkacl($this->acl, "inherit") == ""); + $this->mungedObject->setCtxMaxConnectionTimeF(!isset($_POST['CtxMaxConnectionTimeF']) + && chkacl($this->acl, "CtxMaxConnectionTime") == ""); + $this->mungedObject->setCtxMaxDisconnectionTimeF( + !isset($_POST['CtxMaxDisconnectionTimeF']) + && chkacl($this->acl, "CtxMaxDisconnectionTime") == ""); + $this->mungedObject->setCtxMaxIdleTimeF(!isset($_POST['CtxMaxIdleTimeF']) + && chkacl($this->acl, "CtxMaxIdleTime") == ""); + $this->mungedObject->setConnectClientDrives(isset($_POST['connectclientdrives']) + && chkacl($this->acl, "connectclientdrives") == ""); + $this->mungedObject->setConnectClientPrinters(isset($_POST['connectclientprinters']) + && chkacl($this->acl, "connectclientprinters") == ""); + $this->mungedObject->setDefaultPrinter(isset($_POST['defaultprinter']) + && chkacl($this->acl, "defaultprinter") == ""); + + /* Save combo boxes. Takes two values */ + $this->mungedObject->setShadow((isset($_POST['shadow']) + && chkacl($this->acl, "shadow") == ""), $_POST['shadow']); + + /* Check for changes */ + if ($this->sambaMungedDial != $this->mungedObject->getMunged()){ + $this->is_modified= TRUE; + } + } + } + + } + + + /* Save to LDAP */ + function save() + { + /* Load uid and gid of this 'dn' */ + $ldap= $this->config->get_ldap_link(); + $ldap->cat($this->dn); + $tmp= $ldap->fetch(); + $this->uidNumber= $tmp['uidNumber'][0]; + $this->gidNumber= $tmp['gidNumber'][0]; + + plugin::save(); + + /* Remove objectClass for sambaIdmapEntry */ + $tmp= array(); + for ($i= 0; $iattrs["objectClass"]); $i++){ + if ($this->attrs['objectClass'][$i] != 'sambaIdmapEntry'){ + $tmp[]= $this->attrs['objectClass'][$i]; + } + } + $this->attrs['objectClass']= $tmp; + + /* Generate rid / primaryGroupId */ + if ($this->samba3){ + if (!isset($this->config->data['SERVERS']['SAMBA'][$this->sambaDomainName]['SID'])){ + print_red (_("Warning: This account has an undefined samba SID assigned. The problem can not be fixed by GOsa!")); + } else { + $this->SID= $this->config->data['SERVERS']['SAMBA'][$this->sambaDomainName]['SID']; + $this->ridBase= $this->config->data['SERVERS']['SAMBA'][$this->sambaDomainName]['RIDBASE']; + } + + /* Need to generate a new uniqe uid/gid combination? */ + if ($this->sambaSID == "" || $this->orig_sambaDomainName != $this->sambaDomainName){ + $uidNumber= $this->uidNumber; + while(TRUE){ + $sid= $this->SID."-".($uidNumber*2 + $this->ridBase); + $ldap->cd($this->config->current['BASE']); + $ldap->search("(sambaSID=$sid)", array("sambaSID")); + if ($ldap->count() == 0){ + break; + } + $uidNumber++; + } + $this->attrs['sambaSID']= $sid; + + /* Check for users primary group */ + $ldap->cd($this->config->current['BASE']); + $ldap->search("(&(objectClass=posixGroup)(gidNumber=".$this->gidNumber."))", + array("cn")); + if ($ldap->count() != 1){ + print_red(_("Warning: Can't identify users primary group - no conversion to a samba group possible!")); + } else { + $attrs= $ldap->fetch(); + $g= new group($this->config, $ldap->getDN()); + if ($g->sambaSID == ""){ + $g->sambaDomainName= $this->sambaDomainName; + $g->smbgroup= TRUE; + $g->save (); + } + $this->attrs['sambaPrimaryGroupSID']= $g->sambaSID; + } + } + + if ($this->sambaHomeDrive == ""){ + $this->attrs["sambaHomeDrive"]= array(); + } + + /* Generate munged dial value */ + $this->attrs["sambaMungedDial"]= $this->mungedObject->getMunged(); + + /* User wants me to fake the idMappings? This is useful for + making winbind resolve the user names in a reasonable amount + of time in combination with larger databases. */ + if (isset($this->config->current['SAMBAIDMAPPING']) && + preg_match('/true/i', $this->config->current['SAMBAIDMAPPING'])){ + $this->attrs['objectClass'][]= "sambaIdmapEntry"; + } + + + /* Password expiery */ + if ($this->password_expires == "1"){ + $this->attrs['sambaPwdMustChange']= $this->sambaPwdMustChange; + } else { + $this->attrs['sambaPwdMustChange']= array(); + } + /* Account expiery */ + if ($this->logon_time_set == "1"){ + $this->attrs['sambaLogonTime']= $this->sambaLogonTime; + } else { + # $this->attrs['sambaLogonTime']= array(); + # Set more useful default setting + $this->attrs['sambaLogonTime']= 0; + } + if ($this->logoff_time_set == "1"){ + $this->attrs['sambaLogoffTime']= $this->sambaLogoffTime; + } else { + # $this->attrs['sambaLogoffTime']= array(); + # Set more useful default setting + $this->attrs['sambaLogoffTime']= 2147483647; + } + if ($this->kickoff_time_set == "1"){ + # Add one day in unixtime format to be compatible with usrmgr + $this->attrs['sambaKickoffTime']= $this->sambaKickoffTime + 86400; + } else { + # $this->attrs['sambaKickoffTime']= array(); + # Set more useful default setting + $this->attrs['sambaKickoffTime']= 2147483647; + } + + } else { + /* Not samba3 */ + $this->attrs['rid']= $this->uidNumber*2 + 1000; + $this->attrs['primaryGroupID']= $this->gidNumber*2 +1001; + + if ($this->homeDrive == ""){ + $this->attrs["homeDrive"]= array(); + } + + /* Password expiery */ + if ($this->password_expires == "1"){ + $this->attrs['pwdMustChange']= $this->pwdMustChange; + } else { + $this->attrs['pwdMustChange']= 2147483647; + } + /* Account expiery */ + if ($this->logon_time_set == "1"){ + $this->attrs['logonTime']= $this->logonTime; + } else { + $this->attrs['logonTime']= 0; + } + if ($this->logoff_time_set == "1"){ + $this->attrs['logoffTime']= $this->logoffTime; + } else { + $this->attrs['logoffTime']= 2147483647; + } + if ($this->kickoff_time_set == "1"){ + # Add one day in unixtime format to be compatible with usrmgr + $this->attrs['kickoffTime']= $this->kickoffTime + 86400; + } else { + $this->attrs['kickoffTime']= 2147483647; + } + } + + /* Write back to ldap */ + $ldap->cd($this->dn); + $ldap->modify($this->attrs); + show_ldap_error($ldap->get_error()); + + /* Optionally execute a command after we're done */ + if ($this->initially_was_account == $this->is_account){ + if ($this->is_modified){ + $this->handle_post_events("modify"); + } + } else { + $this->handle_post_events("add"); + } + + } + + function adapt_from_template($dn) + { + plugin::adapt_from_template($dn); + $this->sambaSID= ""; + $this->sambaPrimaryGroupSID= ""; + } + +} + +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/plugins/personal/samba/main.inc b/plugins/personal/samba/main.inc new file mode 100644 index 000000000..125402220 --- /dev/null +++ b/plugins/personal/samba/main.inc @@ -0,0 +1,129 @@ +dn); + sess_del ('edit'); + sess_del ('sambaAccount'); + } + + /* Create sambaAccount object on demand */ + if (!isset($_SESSION['sambaAccount']) || (isset($_GET['reset']) && $_GET['reset'] == 1)){ + $_SESSION['sambaAccount']= new sambaAccount ($config, $ui->dn); + } + $sambaAccount= $_SESSION['sambaAccount']; + + /* save changes back to object */ + if (isset ($_SESSION['edit'])){ + $sambaAccount->save_object (); + } + + /* Enter edit mode? */ + if (isset($_POST['edit'])){ + + /* Check locking */ + if (($username= get_lock($ui->dn)) != ""){ + $_SESSION['back_plugin']= $plug; + gen_locked_message ($username, $ui->dn); + exit (); + } + + /* Lock the current entry */ + add_lock ($ui->dn, $ui->dn); + $_SESSION['dn']= $ui->dn; + $_SESSION['edit']= TRUE; + } + + /* Adjust acl's to mode */ + if (isset($_SESSION['edit'])){ + $acl= get_permissions ($ui->dn, $ui->subtreeACL); + $sambaAccount->acl= get_module_permission($acl, "samba", $ui->dn); + } else { + $acl= get_permissions ($ui->dn, $ui->subtreeACL); + $editacl= get_module_permission($acl, "samba", $ui->dn); + $sambaAccount->acl= "#none#"; + } + + /* save changes to LDAP and disable edit mode */ + if (isset($_POST['edit_finish'])){ + + /* Perform checks */ + $message= $sambaAccount->check (); + + /* No errors, save object */ + if (count ($message) == 0){ + $sambaAccount->save (); + gosa_log ("User/samba object'".$ui->dn."' has been saved"); + $sambaAccount->acl= "#none#"; + del_lock ($ui->dn); + sess_del ('edit'); + + /* Reload */ + $_SESSION['sambaAccount']= $sambaAccount; + } else { + /* Errors found, show message */ + show_errors ($message); + } + } + + /* Execute formular */ + $display= $sambaAccount->execute (); + + /* Store changes in session */ + if (isset ($_SESSION['edit'])){ + $_SESSION['sambaAccount']= $sambaAccount; + } + + $info= ""; + if ($sambaAccount->is_account){ + $display.= "

"; + + /* Are we in edit mode? */ + if (isset($_SESSION['edit'])){ + $display.= "\n"; + $display.= " "; + $display.= "\n"; + $info= " ".$ui->dn." "; + } else { + $info= " ".$ui->dn." "; + if (isset($editacl) && $editacl != "#none#"){ + $info.= " ". + _("Click the 'Edit' button below to change informations in this dialog"); + $display.= "\n"; + } + $display.= "\n"; + } + $display.= "

\n"; + } + + /* Page header*/ + $display= print_header(get_template_path('images/samba.png'), _("Samba settings"), + $info).$display; + +} + +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/plugins/personal/samba/samba2.tpl b/plugins/personal/samba/samba2.tpl new file mode 100644 index 000000000..65bd91803 --- /dev/null +++ b/plugins/personal/samba/samba2.tpl @@ -0,0 +1,94 @@ + + + + + + + + + + + +
+

{t}Generic{/t}

+
+ + + + + +
{t}Samba home{/t} + + +
+
+   + + + + + + + + + + +
{t}Script path{/t} + +
{t}Profile path{/t} + +
+
+ +

 

+ +

{t}Access options{/t}

+ + + + + + + +
+ + {t}Allow user to change password from client{/t} +
+ + {t}Login from windows client requires no password{/t} +
+ + {t}Temporary disable samba account{/t} +
+
+   + + + {t}Password expires on{/t} + + + + +
+ + + + + diff --git a/plugins/personal/samba/samba3.tpl b/plugins/personal/samba/samba3.tpl new file mode 100644 index 000000000..ceea6c9f1 --- /dev/null +++ b/plugins/personal/samba/samba3.tpl @@ -0,0 +1,311 @@ + + + + + + + + + + + +
+

{t}Generic{/t}

+
+ + + + + + + + + +
{t}Home directory{/t} + + +
{t}Domain{/t} + +
+
+   + + + + + + + + + + +
{t}Script path{/t} + +
{t}Profile path{/t} + +
+
+ +

 

+ +

{t}Terminal Server{/t}

+ + + + + + + +
+ + {t}Allow login on terminal server{/t} + + + + + + + + + +
{t}Home directory{/t} + + +
{t}Profile path{/t} + +
+
+   + + + {t}Inherit client config{/t} + + + + + + + + + +
{t}Initial program{/t} + +
{t}Working directory{/t} + +
+
+ +

 

+ + + + + + + + + +
+ {t}Timeout settings (in minutes){/t} + + + + + + + + + + + + + +
+ + {t}Connection{/t} + + +
+ + {t}Disconnection{/t} + + +
+ + {t}IDLE{/t} + + +
+
+   + + + {t}Client devices{/t} + + + + + + + + + + +
+ + {t}Connect client drives at logon{/t} +
+ + {t}Connect client printers at logon{/t} +
+ + {t}Default to main client printer{/t} +
+ +
+   + + {t}Miscellaneous{/t} + + + + + + + + + + + + + +
+ {t}Shadowing{/t} + + +
{t}On broken or timed out{/t} + +
{t}Reconnect if disconnected{/t} + +
+ +
+ +

 

+ +

{t}Access options{/t}

+ + + + + + + +
+ + {t}Allow user to change password from client{/t} +
+ + {t}Login from windows client requires no password{/t} +
+ + {t}Temporary disable samba account{/t} +
+ + {t}Password expires on{/t} + + + +
+ + {t}Limit Logon Time{/t} + + + +
+ + {t}Limit Logoff Time{/t} + + + +
+ + {t}Account expires after{/t} + + + +
+ + + + +
+   + + {t}Allow connection from these workstations only{/t} +
+ +
+   + +
+ + + + + diff --git a/plugins/personal/samba/samba3_workstations.tpl b/plugins/personal/samba/samba3_workstations.tpl new file mode 100644 index 000000000..2991fbd80 --- /dev/null +++ b/plugins/personal/samba/samba3_workstations.tpl @@ -0,0 +1,48 @@ + + + + + +
+
+

+ {t}Select workstations to add{/t} {$hint}
+

+
+
+

+ +

+
+
+
+

[F]{ +t}Filters{/t}

+
+
+

+ + {$alphabet} +
+

+

+ +
 {t}Display workstations of department{/t}
+

+

+ +
 {t}Display workstations matching{/t}
+

+ {$apply} +
+
+ +

+ +   + +

-- 2.30.2