From 152e67283ae5f7aba204af6009f11a45166eb847 Mon Sep 17 00:00:00 2001 From: lars Date: Tue, 21 Aug 2007 23:31:35 +0000 Subject: [PATCH] created new tag v0.3.4.5 (based on v0.3.4.3) merged changeset 969 updated list of contributers --- v0.3.4.5/LICENSE | 340 + v0.3.4.5/MANIFEST.in | 15 + v0.3.4.5/README | 195 + v0.3.4.5/README.davfs | 47 + v0.3.4.5/README.proxy | 66 + v0.3.4.5/README.samba | 31 + v0.3.4.5/README.ssl | 116 + v0.3.4.5/bin/CryptoBoxRootActions | 516 + v0.3.4.5/bin/CryptoBoxWebserver | 385 + v0.3.4.5/bin/cryptobox-unittests.conf | 88 + v0.3.4.5/bin/cryptobox.conf | 101 + v0.3.4.5/bin/do_pylint.sh | 35 + v0.3.4.5/bin/do_unittests.sh | 60 + v0.3.4.5/bin/run_webserver.sh | 58 + v0.3.4.5/bin/uml-setup.sh | 37 + v0.3.4.5/changelog | 79 + v0.3.4.5/conf-examples/apache2_dav.conf | 13 + v0.3.4.5/conf-examples/apache_proxypass.conf | 25 + v0.3.4.5/conf-examples/cryptobox.conf | 97 + v0.3.4.5/conf-examples/openssl.cnf | 65 + v0.3.4.5/conf-examples/start_stunnel.sh | 42 + v0.3.4.5/conf-examples/super.tab-example | 3 + v0.3.4.5/copyright | 32 + v0.3.4.5/copyright.graphics | 158 + v0.3.4.5/debian/README.Debian | 32 + v0.3.4.5/debian/changelog | 137 + v0.3.4.5/debian/compat | 1 + v0.3.4.5/debian/control | 22 + v0.3.4.5/debian/copyright | 27 + v0.3.4.5/debian/cryptobox-server.default | 20 + v0.3.4.5/debian/cryptobox-server.dirs | 4 + v0.3.4.5/debian/cryptobox-server.docs | 9 + v0.3.4.5/debian/cryptobox-server.examples | 1 + v0.3.4.5/debian/cryptobox-server.init | 117 + v0.3.4.5/debian/cryptobox-server.lintian | 1 + v0.3.4.5/debian/cryptobox-server.logrotate | 6 + v0.3.4.5/debian/cryptobox-server.manpages | 2 + v0.3.4.5/debian/cryptobox-server.postinst | 78 + v0.3.4.5/debian/cryptobox-server.postrm | 65 + v0.3.4.5/debian/cryptobox-server.preinst | 4 + v0.3.4.5/debian/cryptobox-server.prerm | 4 + v0.3.4.5/debian/patches/00list | 0 v0.3.4.5/debian/pycompat | 1 + v0.3.4.5/debian/rules | 96 + v0.3.4.5/design/cryptobox_backgrounds.svg | 806 + .../icons/applications-system_tango.svg | 245 + v0.3.4.5/design/icons/computer_tango.svg | 738 + v0.3.4.5/design/icons/dialog-error_tango.svg | 316 + .../design/icons/dialog-information_tango.svg | 1145 + .../design/icons/dialog-warning_tango.svg | 290 + v0.3.4.5/design/icons/drive-cdrom_tango.svg | 444 + .../design/icons/drive-harddisk_tango.svg | 469 + .../icons/drive-removable-media_tango.svg | 390 + v0.3.4.5/design/icons/face_smile_big.svg | 257 + v0.3.4.5/design/icons/globe-lips.svg | 525 + .../icons/gnome-dev-removable-usb_nuvola.svg | 1004 + v0.3.4.5/design/icons/gnome-globe_nuvola.svg | 1195 + v0.3.4.5/design/icons/go-down_tango.svg | 199 + v0.3.4.5/design/icons/go-up_tango.svg | 195 + v0.3.4.5/design/icons/gtk-ok_nuvola.svg | 364 + v0.3.4.5/design/icons/gtk-stop_nuvola.svg | 669 + v0.3.4.5/design/icons/gtk-zoom-in_nuvola.svg | 433 + v0.3.4.5/design/icons/help_browser.svg | 213 + .../design/icons/help_browser_disable.svg | 253 + .../inaccessible_tango_emblem-unreadable.svg | 357 + .../icons/locked_tango-emblem-readonly.svg | 298 + .../icons/multimedia-dell-dj-pocket_tango.svg | 4405 ++++ ...multimedia-player-ipod-mini-blue_tango.svg | 4126 +++ .../multimedia-player-motorola-rokr_tango.svg | 1025 + .../icons/network-transmit-receive_design.svg | 1041 + .../design/icons/package-x-generic_tango.svg | 483 + v0.3.4.5/design/icons/pile_of_devices.svg | 21822 ++++++++++++++++ .../design/icons/preferences-system_tango.svg | 396 + .../design/icons/redhat-config-users_wasp.svg | 1904 ++ .../design/icons/system-log-out_tango.svg | 362 + .../design/icons/unlocked-device_tango.svg | 1198 + v0.3.4.5/design/logo/ameisenkopp.svg | 3280 +++ v0.3.4.5/design/logo/boesetest.svg | 429 + v0.3.4.5/design/logo/bubblebutton.svg | 811 + .../design/logo/cryptoboxlogogebastel.svg | 154 + .../cryptoboxlogogebastelhintergrundbild.svg | 194 + v0.3.4.5/design/logo/entwurf.svg | 982 + v0.3.4.5/design/logo/evil_stick.svg | 848 + v0.3.4.5/design/logo/evil_stick2.svg | 857 + v0.3.4.5/design/logo/evil_stick3.svg | 946 + v0.3.4.5/design/what_is_cryptobox.svg | 15724 +++++++++++ v0.3.4.5/doc/html/de/CryptoBox.html | 132 + v0.3.4.5/doc/html/de/CryptoBoxDev.html | 94 + .../doc/html/de/CryptoBoxDevBackground.html | 64 + .../doc/html/de/CryptoBoxDevCustomBuild.html | 85 + .../html/de/CryptoBoxDevCustomConfigure.html | 60 + .../html/de/CryptoBoxDevKnownProblems.html | 46 + .../doc/html/de/CryptoBoxDevPreparation.html | 77 + .../doc/html/de/CryptoBoxDevValidation.html | 78 + .../doc/html/de/CryptoBoxDevWorkFlow.html | 156 + v0.3.4.5/doc/html/de/CryptoBoxUser.html | 59 + .../html/de/CryptoBoxUserConfiguration.html | 125 + .../doc/html/de/CryptoBoxUserDailyUse.html | 139 + .../html/de/CryptoBoxUserGettingStarted.html | 76 + v0.3.4.5/doc/html/en/CryptoBox.html | 154 + v0.3.4.5/doc/html/en/CryptoBoxDev.html | 94 + .../doc/html/en/CryptoBoxDevBackground.html | 64 + .../doc/html/en/CryptoBoxDevCustomBuild.html | 85 + .../html/en/CryptoBoxDevCustomConfigure.html | 60 + .../html/en/CryptoBoxDevKnownProblems.html | 46 + .../doc/html/en/CryptoBoxDevPreparation.html | 77 + .../doc/html/en/CryptoBoxDevValidation.html | 78 + .../doc/html/en/CryptoBoxDevWorkFlow.html | 156 + v0.3.4.5/doc/html/en/CryptoBoxUser.html | 60 + .../html/en/CryptoBoxUserConfiguration.html | 125 + .../doc/html/en/CryptoBoxUserDailyUse.html | 138 + .../html/en/CryptoBoxUserGettingStarted.html | 83 + v0.3.4.5/event-scripts/README | 35 + v0.3.4.5/event-scripts/_event_scripts_ | 6 + v0.3.4.5/event-scripts/apache2_dav | 110 + v0.3.4.5/event-scripts/samba | 127 + v0.3.4.5/intl/cryptobox-server.pot | 143 + v0.3.4.5/intl/cs/cryptobox-server.po | 158 + v0.3.4.5/intl/da/cryptobox-server.po | 158 + v0.3.4.5/intl/de/cryptobox-server.po | 157 + v0.3.4.5/intl/en/cryptobox-server.po | 144 + v0.3.4.5/intl/es/cryptobox-server.po | 158 + v0.3.4.5/intl/fi/cryptobox-server.po | 158 + v0.3.4.5/intl/fr/cryptobox-server.po | 157 + v0.3.4.5/intl/hu/cryptobox-server.po | 158 + v0.3.4.5/intl/it/cryptobox-server.po | 157 + v0.3.4.5/intl/ja/cryptobox-server.po | 157 + v0.3.4.5/intl/nl/cryptobox-server.po | 158 + v0.3.4.5/intl/pl/cryptobox-server.po | 157 + v0.3.4.5/intl/pt/cryptobox-server.po | 158 + v0.3.4.5/intl/ru/cryptobox-server.po | 158 + v0.3.4.5/intl/sl/cryptobox-server.po | 157 + v0.3.4.5/intl/sv/cryptobox-server.po | 158 + v0.3.4.5/intl/ur/cryptobox-server.po | 158 + v0.3.4.5/man/CryptoBoxRootActions.8 | 84 + v0.3.4.5/man/CryptoBoxWebserver.8 | 59 + v0.3.4.5/package.exclude | 4 + v0.3.4.5/plugins/date/date.py | 116 + v0.3.4.5/plugins/date/form_date.cs | 51 + .../intl/cryptobox-server-feature-date.pot | 95 + .../intl/cs/cryptobox-server-feature-date.po | 110 + .../intl/da/cryptobox-server-feature-date.po | 110 + .../intl/de/cryptobox-server-feature-date.po | 109 + .../intl/en/cryptobox-server-feature-date.po | 95 + .../intl/es/cryptobox-server-feature-date.po | 109 + .../intl/fi/cryptobox-server-feature-date.po | 110 + .../intl/fr/cryptobox-server-feature-date.po | 110 + .../intl/hu/cryptobox-server-feature-date.po | 110 + .../intl/it/cryptobox-server-feature-date.po | 109 + .../intl/ja/cryptobox-server-feature-date.po | 109 + .../intl/nl/cryptobox-server-feature-date.po | 110 + .../intl/pl/cryptobox-server-feature-date.po | 109 + .../intl/pt/cryptobox-server-feature-date.po | 110 + .../intl/ru/cryptobox-server-feature-date.po | 110 + .../intl/sl/cryptobox-server-feature-date.po | 109 + .../intl/sv/cryptobox-server-feature-date.po | 110 + .../intl/ur/cryptobox-server-feature-date.po | 110 + v0.3.4.5/plugins/date/language.hdf | 47 + v0.3.4.5/plugins/date/plugin_icon.gif | Bin 0 -> 2116 bytes v0.3.4.5/plugins/date/plugin_icon.png | Bin 0 -> 3285 bytes v0.3.4.5/plugins/date/root_action.py | 58 + v0.3.4.5/plugins/date/unittests.py | 97 + v0.3.4.5/plugins/disks/disks.cs | 19 + v0.3.4.5/plugins/disks/disks.py | 48 + .../intl/cryptobox-server-feature-disks.pot | 15 + .../intl/cs/cryptobox-server-feature-disks.po | 30 + .../intl/da/cryptobox-server-feature-disks.po | 30 + .../intl/de/cryptobox-server-feature-disks.po | 29 + .../intl/en/cryptobox-server-feature-disks.po | 15 + .../intl/es/cryptobox-server-feature-disks.po | 30 + .../intl/fi/cryptobox-server-feature-disks.po | 30 + .../intl/fr/cryptobox-server-feature-disks.po | 30 + .../intl/hu/cryptobox-server-feature-disks.po | 30 + .../intl/it/cryptobox-server-feature-disks.po | 29 + .../intl/ja/cryptobox-server-feature-disks.po | 29 + .../intl/nl/cryptobox-server-feature-disks.po | 30 + .../intl/pl/cryptobox-server-feature-disks.po | 29 + .../intl/pt/cryptobox-server-feature-disks.po | 30 + .../intl/ru/cryptobox-server-feature-disks.po | 30 + .../intl/sl/cryptobox-server-feature-disks.po | 29 + .../intl/sv/cryptobox-server-feature-disks.po | 30 + .../intl/ur/cryptobox-server-feature-disks.po | 30 + v0.3.4.5/plugins/disks/language.hdf | 10 + v0.3.4.5/plugins/disks/plugin_icon.gif | Bin 0 -> 3359 bytes v0.3.4.5/plugins/disks/plugin_icon.png | Bin 0 -> 6279 bytes v0.3.4.5/plugins/disks/unittests.py | 43 + .../encrypted_webinterface.py | 256 + ...-server-feature-encrypted_webinterface.pot | 35 + ...x-server-feature-encrypted_webinterface.po | 50 + ...x-server-feature-encrypted_webinterface.po | 50 + ...x-server-feature-encrypted_webinterface.po | 49 + ...x-server-feature-encrypted_webinterface.po | 36 + ...x-server-feature-encrypted_webinterface.po | 50 + ...x-server-feature-encrypted_webinterface.po | 50 + ...x-server-feature-encrypted_webinterface.po | 50 + ...x-server-feature-encrypted_webinterface.po | 50 + ...x-server-feature-encrypted_webinterface.po | 49 + ...x-server-feature-encrypted_webinterface.po | 49 + ...x-server-feature-encrypted_webinterface.po | 50 + ...x-server-feature-encrypted_webinterface.po | 49 + ...x-server-feature-encrypted_webinterface.po | 50 + ...x-server-feature-encrypted_webinterface.po | 50 + ...x-server-feature-encrypted_webinterface.po | 49 + ...x-server-feature-encrypted_webinterface.po | 50 + ...x-server-feature-encrypted_webinterface.po | 50 + .../encrypted_webinterface/language.hdf | 26 + .../encrypted_webinterface/root_action.py | 92 + .../encrypted_webinterface/unittests.py | 34 + v0.3.4.5/plugins/help/doc.cs | 9 + v0.3.4.5/plugins/help/help.py | 81 + .../intl/cryptobox-server-feature-help.pot | 7 + .../intl/cs/cryptobox-server-feature-help.po | 22 + .../intl/da/cryptobox-server-feature-help.po | 22 + .../intl/de/cryptobox-server-feature-help.po | 21 + .../intl/en/cryptobox-server-feature-help.po | 7 + .../intl/es/cryptobox-server-feature-help.po | 22 + .../intl/fi/cryptobox-server-feature-help.po | 22 + .../intl/fr/cryptobox-server-feature-help.po | 22 + .../intl/hu/cryptobox-server-feature-help.po | 22 + .../intl/it/cryptobox-server-feature-help.po | 21 + .../intl/ja/cryptobox-server-feature-help.po | 21 + .../intl/nl/cryptobox-server-feature-help.po | 22 + .../intl/pl/cryptobox-server-feature-help.po | 21 + .../intl/pt/cryptobox-server-feature-help.po | 22 + .../intl/ru/cryptobox-server-feature-help.po | 22 + .../intl/sl/cryptobox-server-feature-help.po | 21 + .../intl/sv/cryptobox-server-feature-help.po | 22 + .../intl/ur/cryptobox-server-feature-help.po | 22 + v0.3.4.5/plugins/help/language.hdf | 5 + v0.3.4.5/plugins/help/plugin_icon.gif | Bin 0 -> 3461 bytes v0.3.4.5/plugins/help/plugin_icon.png | Bin 0 -> 5072 bytes v0.3.4.5/plugins/help/unittests.py | 94 + ...obox-server-feature-language_selection.pot | 15 + ...tobox-server-feature-language_selection.po | 29 + ...tobox-server-feature-language_selection.po | 29 + ...tobox-server-feature-language_selection.po | 29 + ...tobox-server-feature-language_selection.po | 15 + ...tobox-server-feature-language_selection.po | 30 + ...tobox-server-feature-language_selection.po | 30 + ...tobox-server-feature-language_selection.po | 30 + ...tobox-server-feature-language_selection.po | 30 + ...tobox-server-feature-language_selection.po | 29 + ...tobox-server-feature-language_selection.po | 29 + ...tobox-server-feature-language_selection.po | 30 + ...tobox-server-feature-language_selection.po | 29 + ...tobox-server-feature-language_selection.po | 30 + ...tobox-server-feature-language_selection.po | 30 + ...tobox-server-feature-language_selection.po | 29 + ...tobox-server-feature-language_selection.po | 30 + ...tobox-server-feature-language_selection.po | 30 + .../plugins/language_selection/language.hdf | 8 + .../language_selection/language_selection.cs | 25 + .../language_selection/language_selection.py | 48 + .../language_selection/list_marker_tango.gif | Bin 0 -> 1165 bytes .../language_selection/plugin_icon.gif | Bin 0 -> 2910 bytes .../language_selection/plugin_icon.png | Bin 0 -> 5442 bytes .../plugins/language_selection/unittests.py | 46 + .../intl/cryptobox-server-feature-logs.pot | 59 + .../intl/cs/cryptobox-server-feature-logs.po | 74 + .../intl/da/cryptobox-server-feature-logs.po | 74 + .../intl/de/cryptobox-server-feature-logs.po | 73 + .../intl/en/cryptobox-server-feature-logs.po | 60 + .../intl/es/cryptobox-server-feature-logs.po | 73 + .../intl/fi/cryptobox-server-feature-logs.po | 74 + .../intl/fr/cryptobox-server-feature-logs.po | 74 + .../intl/hu/cryptobox-server-feature-logs.po | 74 + .../intl/it/cryptobox-server-feature-logs.po | 73 + .../intl/ja/cryptobox-server-feature-logs.po | 73 + .../intl/nl/cryptobox-server-feature-logs.po | 74 + .../intl/pl/cryptobox-server-feature-logs.po | 73 + .../intl/pt/cryptobox-server-feature-logs.po | 74 + .../intl/ru/cryptobox-server-feature-logs.po | 74 + .../intl/sl/cryptobox-server-feature-logs.po | 73 + .../intl/sv/cryptobox-server-feature-logs.po | 74 + .../intl/ur/cryptobox-server-feature-logs.po | 74 + v0.3.4.5/plugins/logs/language.hdf | 31 + v0.3.4.5/plugins/logs/logs.css | 15 + v0.3.4.5/plugins/logs/logs.py | 218 + v0.3.4.5/plugins/logs/plugin_icon.gif | Bin 0 -> 2932 bytes v0.3.4.5/plugins/logs/plugin_icon.png | Bin 0 -> 6663 bytes v0.3.4.5/plugins/logs/show_log.cs | 81 + v0.3.4.5/plugins/logs/unittests.py | 65 + v0.3.4.5/plugins/network/form_network.cs | 92 + .../intl/cryptobox-server-feature-network.pot | 111 + .../cs/cryptobox-server-feature-network.po | 126 + .../da/cryptobox-server-feature-network.po | 126 + .../de/cryptobox-server-feature-network.po | 125 + .../en/cryptobox-server-feature-network.po | 111 + .../es/cryptobox-server-feature-network.po | 126 + .../fi/cryptobox-server-feature-network.po | 126 + .../fr/cryptobox-server-feature-network.po | 126 + .../hu/cryptobox-server-feature-network.po | 126 + .../it/cryptobox-server-feature-network.po | 125 + .../ja/cryptobox-server-feature-network.po | 125 + .../nl/cryptobox-server-feature-network.po | 126 + .../pl/cryptobox-server-feature-network.po | 125 + .../pt/cryptobox-server-feature-network.po | 126 + .../ru/cryptobox-server-feature-network.po | 126 + .../sl/cryptobox-server-feature-network.po | 125 + .../sv/cryptobox-server-feature-network.po | 126 + .../ur/cryptobox-server-feature-network.po | 126 + v0.3.4.5/plugins/network/language.hdf | 83 + v0.3.4.5/plugins/network/network.css | 8 + v0.3.4.5/plugins/network/network.py | 356 + v0.3.4.5/plugins/network/plugin_icon.gif | Bin 0 -> 3876 bytes v0.3.4.5/plugins/network/plugin_icon.png | Bin 0 -> 5281 bytes v0.3.4.5/plugins/network/root_action.py | 109 + v0.3.4.5/plugins/network/unittests.py | 78 + .../partition/current_partition_info.cs | 14 + .../cryptobox-server-feature-partition.pot | 219 + .../cs/cryptobox-server-feature-partition.po | 234 + .../da/cryptobox-server-feature-partition.po | 234 + .../de/cryptobox-server-feature-partition.po | 233 + .../en/cryptobox-server-feature-partition.po | 222 + .../es/cryptobox-server-feature-partition.po | 234 + .../fi/cryptobox-server-feature-partition.po | 234 + .../fr/cryptobox-server-feature-partition.po | 234 + .../hu/cryptobox-server-feature-partition.po | 234 + .../it/cryptobox-server-feature-partition.po | 233 + .../ja/cryptobox-server-feature-partition.po | 233 + .../nl/cryptobox-server-feature-partition.po | 234 + .../pl/cryptobox-server-feature-partition.po | 233 + .../pt/cryptobox-server-feature-partition.po | 234 + .../ru/cryptobox-server-feature-partition.po | 234 + .../sl/cryptobox-server-feature-partition.po | 233 + .../sv/cryptobox-server-feature-partition.po | 234 + .../ur/cryptobox-server-feature-partition.po | 234 + v0.3.4.5/plugins/partition/language.hdf | 138 + v0.3.4.5/plugins/partition/partition.css | 4 + v0.3.4.5/plugins/partition/partition.py | 539 + v0.3.4.5/plugins/partition/plugin_icon.gif | Bin 0 -> 2210 bytes v0.3.4.5/plugins/partition/plugin_icon.png | Bin 0 -> 2943 bytes v0.3.4.5/plugins/partition/root_action.py | 118 + v0.3.4.5/plugins/partition/select_device.cs | 49 + v0.3.4.5/plugins/partition/set_partitions.cs | 103 + v0.3.4.5/plugins/partition/unittests.py | 32 + v0.3.4.5/plugins/plugin-interface.txt | 84 + v0.3.4.5/plugins/plugin_icon_unknown.gif | Bin 0 -> 3160 bytes v0.3.4.5/plugins/plugin_icon_unknown.png | Bin 0 -> 6304 bytes ...ryptobox-server-feature-plugin_manager.pot | 75 + ...cryptobox-server-feature-plugin_manager.po | 89 + ...cryptobox-server-feature-plugin_manager.po | 89 + ...cryptobox-server-feature-plugin_manager.po | 89 + ...cryptobox-server-feature-plugin_manager.po | 77 + ...cryptobox-server-feature-plugin_manager.po | 89 + ...cryptobox-server-feature-plugin_manager.po | 89 + ...cryptobox-server-feature-plugin_manager.po | 89 + ...cryptobox-server-feature-plugin_manager.po | 89 + ...cryptobox-server-feature-plugin_manager.po | 89 + ...cryptobox-server-feature-plugin_manager.po | 89 + ...cryptobox-server-feature-plugin_manager.po | 89 + ...cryptobox-server-feature-plugin_manager.po | 90 + ...cryptobox-server-feature-plugin_manager.po | 89 + ...cryptobox-server-feature-plugin_manager.po | 89 + ...cryptobox-server-feature-plugin_manager.po | 89 + ...cryptobox-server-feature-plugin_manager.po | 89 + ...cryptobox-server-feature-plugin_manager.po | 90 + v0.3.4.5/plugins/plugin_manager/language.hdf | 32 + .../plugins/plugin_manager/plugin_icon.gif | Bin 0 -> 2570 bytes .../plugins/plugin_manager/plugin_icon.png | Bin 0 -> 2753 bytes .../plugins/plugin_manager/plugin_list.cs | 142 + .../plugins/plugin_manager/plugin_manager.css | 28 + .../plugins/plugin_manager/plugin_manager.py | 149 + .../plugins/plugin_manager/tango-go-down.png | Bin 0 -> 883 bytes .../plugins/plugin_manager/tango-go-up.png | Bin 0 -> 850 bytes v0.3.4.5/plugins/plugin_manager/unittests.py | 92 + v0.3.4.5/plugins/shutdown/form_shutdown.cs | 23 + v0.3.4.5/plugins/shutdown/gnome-reboot.gif | Bin 0 -> 2225 bytes v0.3.4.5/plugins/shutdown/gnome-reboot.png | Bin 0 -> 3752 bytes v0.3.4.5/plugins/shutdown/gnome-shutdown.gif | Bin 0 -> 2285 bytes v0.3.4.5/plugins/shutdown/gnome-shutdown.png | Bin 0 -> 4532 bytes .../cryptobox-server-feature-shutdown.pot | 63 + .../cs/cryptobox-server-feature-shutdown.po | 78 + .../da/cryptobox-server-feature-shutdown.po | 78 + .../de/cryptobox-server-feature-shutdown.po | 77 + .../en/cryptobox-server-feature-shutdown.po | 63 + .../es/cryptobox-server-feature-shutdown.po | 78 + .../fi/cryptobox-server-feature-shutdown.po | 78 + .../fr/cryptobox-server-feature-shutdown.po | 77 + .../hu/cryptobox-server-feature-shutdown.po | 78 + .../it/cryptobox-server-feature-shutdown.po | 77 + .../ja/cryptobox-server-feature-shutdown.po | 77 + .../nl/cryptobox-server-feature-shutdown.po | 78 + .../pl/cryptobox-server-feature-shutdown.po | 77 + .../pt/cryptobox-server-feature-shutdown.po | 78 + .../ru/cryptobox-server-feature-shutdown.po | 78 + .../sl/cryptobox-server-feature-shutdown.po | 77 + .../sv/cryptobox-server-feature-shutdown.po | 78 + .../ur/cryptobox-server-feature-shutdown.po | 78 + v0.3.4.5/plugins/shutdown/language.hdf | 39 + v0.3.4.5/plugins/shutdown/plugin_icon.gif | Bin 0 -> 3196 bytes v0.3.4.5/plugins/shutdown/plugin_icon.png | Bin 0 -> 3290 bytes v0.3.4.5/plugins/shutdown/progress_reboot.cs | 6 + .../plugins/shutdown/progress_shutdown.cs | 6 + v0.3.4.5/plugins/shutdown/root_action.py | 70 + v0.3.4.5/plugins/shutdown/shutdown.py | 74 + v0.3.4.5/plugins/shutdown/unittests.py | 35 + ...obox-server-feature-system_preferences.pot | 11 + ...tobox-server-feature-system_preferences.po | 26 + ...tobox-server-feature-system_preferences.po | 26 + ...tobox-server-feature-system_preferences.po | 25 + ...tobox-server-feature-system_preferences.po | 11 + ...tobox-server-feature-system_preferences.po | 26 + ...tobox-server-feature-system_preferences.po | 26 + ...tobox-server-feature-system_preferences.po | 26 + ...tobox-server-feature-system_preferences.po | 26 + ...tobox-server-feature-system_preferences.po | 25 + ...tobox-server-feature-system_preferences.po | 25 + ...tobox-server-feature-system_preferences.po | 26 + ...tobox-server-feature-system_preferences.po | 25 + ...tobox-server-feature-system_preferences.po | 26 + ...tobox-server-feature-system_preferences.po | 26 + ...tobox-server-feature-system_preferences.po | 25 + ...tobox-server-feature-system_preferences.po | 26 + ...tobox-server-feature-system_preferences.po | 26 + .../plugins/system_preferences/language.hdf | 6 + .../system_preferences/plugin_icon.gif | Bin 0 -> 2432 bytes .../system_preferences/plugin_icon.png | Bin 0 -> 5570 bytes .../system_preferences/show_plugins.cs | 26 + .../system_preferences/system_preferences.py | 40 + .../plugins/system_preferences/unittests.py | 38 + .../cryptobox-server-feature-user_manager.pot | 103 + .../cryptobox-server-feature-user_manager.po | 118 + .../cryptobox-server-feature-user_manager.po | 118 + .../cryptobox-server-feature-user_manager.po | 117 + .../cryptobox-server-feature-user_manager.po | 103 + .../cryptobox-server-feature-user_manager.po | 118 + .../cryptobox-server-feature-user_manager.po | 118 + .../cryptobox-server-feature-user_manager.po | 118 + .../cryptobox-server-feature-user_manager.po | 118 + .../cryptobox-server-feature-user_manager.po | 117 + .../cryptobox-server-feature-user_manager.po | 117 + .../cryptobox-server-feature-user_manager.po | 118 + .../cryptobox-server-feature-user_manager.po | 117 + .../cryptobox-server-feature-user_manager.po | 118 + .../cryptobox-server-feature-user_manager.po | 118 + .../cryptobox-server-feature-user_manager.po | 117 + .../cryptobox-server-feature-user_manager.po | 118 + .../cryptobox-server-feature-user_manager.po | 118 + v0.3.4.5/plugins/user_manager/language.hdf | 65 + v0.3.4.5/plugins/user_manager/plugin_icon.gif | Bin 0 -> 2902 bytes v0.3.4.5/plugins/user_manager/plugin_icon.png | Bin 0 -> 4227 bytes v0.3.4.5/plugins/user_manager/unittests.py | 196 + v0.3.4.5/plugins/user_manager/user_list.cs | 82 + .../plugins/user_manager/user_manager.css | 6 + v0.3.4.5/plugins/user_manager/user_manager.py | 106 + ...ptobox-server-feature-volume_automount.pot | 47 + ...yptobox-server-feature-volume_automount.po | 62 + ...yptobox-server-feature-volume_automount.po | 62 + ...yptobox-server-feature-volume_automount.po | 61 + ...yptobox-server-feature-volume_automount.po | 49 + ...yptobox-server-feature-volume_automount.po | 62 + ...yptobox-server-feature-volume_automount.po | 62 + ...yptobox-server-feature-volume_automount.po | 62 + ...yptobox-server-feature-volume_automount.po | 62 + ...yptobox-server-feature-volume_automount.po | 61 + ...yptobox-server-feature-volume_automount.po | 61 + ...yptobox-server-feature-volume_automount.po | 62 + ...yptobox-server-feature-volume_automount.po | 61 + ...yptobox-server-feature-volume_automount.po | 62 + ...yptobox-server-feature-volume_automount.po | 62 + ...yptobox-server-feature-volume_automount.po | 61 + ...yptobox-server-feature-volume_automount.po | 62 + ...yptobox-server-feature-volume_automount.po | 62 + .../plugins/volume_automount/language.hdf | 41 + .../plugins/volume_automount/unittests.py | 56 + .../volume_automount/volume_automount.cs | 30 + .../volume_automount/volume_automount.py | 120 + ...yptobox-server-feature-volume_chpasswd.pot | 43 + ...ryptobox-server-feature-volume_chpasswd.po | 58 + ...ryptobox-server-feature-volume_chpasswd.po | 58 + ...ryptobox-server-feature-volume_chpasswd.po | 57 + ...ryptobox-server-feature-volume_chpasswd.po | 44 + ...ryptobox-server-feature-volume_chpasswd.po | 58 + ...ryptobox-server-feature-volume_chpasswd.po | 58 + ...ryptobox-server-feature-volume_chpasswd.po | 58 + ...ryptobox-server-feature-volume_chpasswd.po | 58 + ...ryptobox-server-feature-volume_chpasswd.po | 57 + ...ryptobox-server-feature-volume_chpasswd.po | 57 + ...ryptobox-server-feature-volume_chpasswd.po | 58 + ...ryptobox-server-feature-volume_chpasswd.po | 57 + ...ryptobox-server-feature-volume_chpasswd.po | 58 + ...ryptobox-server-feature-volume_chpasswd.po | 58 + ...ryptobox-server-feature-volume_chpasswd.po | 57 + ...ryptobox-server-feature-volume_chpasswd.po | 58 + ...ryptobox-server-feature-volume_chpasswd.po | 58 + v0.3.4.5/plugins/volume_chpasswd/language.hdf | 38 + v0.3.4.5/plugins/volume_chpasswd/unittests.py | 33 + .../volume_chpasswd/volume_chpasswd.cs | 41 + .../volume_chpasswd/volume_chpasswd.py | 88 + ...ryptobox-server-feature-volume_details.pot | 55 + ...cryptobox-server-feature-volume_details.po | 70 + ...cryptobox-server-feature-volume_details.po | 70 + ...cryptobox-server-feature-volume_details.po | 69 + ...cryptobox-server-feature-volume_details.po | 55 + ...cryptobox-server-feature-volume_details.po | 70 + ...cryptobox-server-feature-volume_details.po | 70 + ...cryptobox-server-feature-volume_details.po | 70 + ...cryptobox-server-feature-volume_details.po | 70 + ...cryptobox-server-feature-volume_details.po | 69 + ...cryptobox-server-feature-volume_details.po | 69 + ...cryptobox-server-feature-volume_details.po | 70 + ...cryptobox-server-feature-volume_details.po | 69 + ...cryptobox-server-feature-volume_details.po | 70 + ...cryptobox-server-feature-volume_details.po | 70 + ...cryptobox-server-feature-volume_details.po | 69 + ...cryptobox-server-feature-volume_details.po | 70 + ...cryptobox-server-feature-volume_details.po | 70 + v0.3.4.5/plugins/volume_details/language.hdf | 22 + .../plugins/volume_details/plugin_icon.gif | Bin 0 -> 1401 bytes .../plugins/volume_details/plugin_icon.png | Bin 0 -> 1972 bytes v0.3.4.5/plugins/volume_details/unittests.py | 32 + .../plugins/volume_details/volume_details.cs | 24 + .../plugins/volume_details/volume_details.py | 41 + ...ptobox-server-feature-volume_format_fs.pot | 99 + ...yptobox-server-feature-volume_format_fs.po | 114 + ...yptobox-server-feature-volume_format_fs.po | 114 + ...yptobox-server-feature-volume_format_fs.po | 113 + ...yptobox-server-feature-volume_format_fs.po | 99 + ...yptobox-server-feature-volume_format_fs.po | 114 + ...yptobox-server-feature-volume_format_fs.po | 114 + ...yptobox-server-feature-volume_format_fs.po | 114 + ...yptobox-server-feature-volume_format_fs.po | 114 + ...yptobox-server-feature-volume_format_fs.po | 113 + ...yptobox-server-feature-volume_format_fs.po | 113 + ...yptobox-server-feature-volume_format_fs.po | 114 + ...yptobox-server-feature-volume_format_fs.po | 114 + ...yptobox-server-feature-volume_format_fs.po | 114 + ...yptobox-server-feature-volume_format_fs.po | 114 + ...yptobox-server-feature-volume_format_fs.po | 113 + ...yptobox-server-feature-volume_format_fs.po | 114 + ...yptobox-server-feature-volume_format_fs.po | 114 + .../plugins/volume_format_fs/language.hdf | 64 + .../plugins/volume_format_fs/plugin_icon.gif | Bin 0 -> 1312 bytes .../plugins/volume_format_fs/plugin_icon.png | Bin 0 -> 1189 bytes .../plugins/volume_format_fs/unittests.py | 101 + .../plugins/volume_format_fs/volume_format.cs | 62 + .../volume_format_fs/volume_format_fs.py | 137 + .../volume_format_fs/volume_format_luks.cs | 37 + .../cryptobox-server-feature-volume_mount.pot | 99 + .../cryptobox-server-feature-volume_mount.po | 114 + .../cryptobox-server-feature-volume_mount.po | 114 + .../cryptobox-server-feature-volume_mount.po | 113 + .../cryptobox-server-feature-volume_mount.po | 103 + .../cryptobox-server-feature-volume_mount.po | 114 + .../cryptobox-server-feature-volume_mount.po | 114 + .../cryptobox-server-feature-volume_mount.po | 114 + .../cryptobox-server-feature-volume_mount.po | 114 + .../cryptobox-server-feature-volume_mount.po | 113 + .../cryptobox-server-feature-volume_mount.po | 113 + .../cryptobox-server-feature-volume_mount.po | 114 + .../cryptobox-server-feature-volume_mount.po | 113 + .../cryptobox-server-feature-volume_mount.po | 114 + .../cryptobox-server-feature-volume_mount.po | 114 + .../cryptobox-server-feature-volume_mount.po | 113 + .../cryptobox-server-feature-volume_mount.po | 114 + .../cryptobox-server-feature-volume_mount.po | 114 + v0.3.4.5/plugins/volume_mount/language.hdf | 76 + v0.3.4.5/plugins/volume_mount/plugin_icon.gif | Bin 0 -> 1400 bytes v0.3.4.5/plugins/volume_mount/plugin_icon.png | Bin 0 -> 984 bytes v0.3.4.5/plugins/volume_mount/unittests.py | 189 + v0.3.4.5/plugins/volume_mount/volume_mount.cs | 38 + v0.3.4.5/plugins/volume_mount/volume_mount.py | 135 + .../plugins/volume_mount/volume_status.cs | 6 + .../plugins/volume_mount/volume_umount.cs | 18 + .../cryptobox-server-feature-volume_props.pot | 11 + .../cryptobox-server-feature-volume_props.po | 26 + .../cryptobox-server-feature-volume_props.po | 26 + .../cryptobox-server-feature-volume_props.po | 25 + .../cryptobox-server-feature-volume_props.po | 11 + .../cryptobox-server-feature-volume_props.po | 26 + .../cryptobox-server-feature-volume_props.po | 26 + .../cryptobox-server-feature-volume_props.po | 26 + .../cryptobox-server-feature-volume_props.po | 26 + .../cryptobox-server-feature-volume_props.po | 25 + .../cryptobox-server-feature-volume_props.po | 25 + .../cryptobox-server-feature-volume_props.po | 26 + .../cryptobox-server-feature-volume_props.po | 25 + .../cryptobox-server-feature-volume_props.po | 26 + .../cryptobox-server-feature-volume_props.po | 26 + .../cryptobox-server-feature-volume_props.po | 25 + .../cryptobox-server-feature-volume_props.po | 26 + .../cryptobox-server-feature-volume_props.po | 26 + v0.3.4.5/plugins/volume_props/language.hdf | 13 + v0.3.4.5/plugins/volume_props/plugin_icon.gif | Bin 0 -> 2432 bytes v0.3.4.5/plugins/volume_props/plugin_icon.png | Bin 0 -> 5570 bytes v0.3.4.5/plugins/volume_props/unittests.py | 32 + .../plugins/volume_props/volume_properties.cs | 15 + v0.3.4.5/plugins/volume_props/volume_props.py | 90 + ...cryptobox-server-feature-volume_rename.pot | 59 + .../cryptobox-server-feature-volume_rename.po | 74 + .../cryptobox-server-feature-volume_rename.po | 74 + .../cryptobox-server-feature-volume_rename.po | 73 + .../cryptobox-server-feature-volume_rename.po | 59 + .../cryptobox-server-feature-volume_rename.po | 74 + .../cryptobox-server-feature-volume_rename.po | 74 + .../cryptobox-server-feature-volume_rename.po | 74 + .../cryptobox-server-feature-volume_rename.po | 74 + .../cryptobox-server-feature-volume_rename.po | 73 + .../cryptobox-server-feature-volume_rename.po | 73 + .../cryptobox-server-feature-volume_rename.po | 74 + .../cryptobox-server-feature-volume_rename.po | 73 + .../cryptobox-server-feature-volume_rename.po | 74 + .../cryptobox-server-feature-volume_rename.po | 74 + .../cryptobox-server-feature-volume_rename.po | 73 + .../cryptobox-server-feature-volume_rename.po | 74 + .../cryptobox-server-feature-volume_rename.po | 74 + v0.3.4.5/plugins/volume_rename/language.hdf | 57 + v0.3.4.5/plugins/volume_rename/unittests.py | 161 + .../plugins/volume_rename/volume_rename.cs | 32 + .../plugins/volume_rename/volume_rename.py | 75 + v0.3.4.5/scripts/fetch_po_files.sh | 88 + v0.3.4.5/scripts/show_TODO.sh | 9 + v0.3.4.5/scripts/update_po_files.py | 209 + v0.3.4.5/scripts/userdocexport.sh | 135 + v0.3.4.5/setup.py | 151 + v0.3.4.5/src/cryptobox/__init__.py | 14 + v0.3.4.5/src/cryptobox/core/__init__.py | 7 + v0.3.4.5/src/cryptobox/core/container.py | 817 + v0.3.4.5/src/cryptobox/core/exceptions.py | 152 + v0.3.4.5/src/cryptobox/core/main.py | 306 + v0.3.4.5/src/cryptobox/core/settings.py | 752 + v0.3.4.5/src/cryptobox/core/tools.py | 248 + v0.3.4.5/src/cryptobox/plugins/__init__.py | 7 + v0.3.4.5/src/cryptobox/plugins/base.py | 313 + v0.3.4.5/src/cryptobox/plugins/manage.py | 107 + v0.3.4.5/src/cryptobox/tests/__init__.py | 8 + v0.3.4.5/src/cryptobox/tests/base.py | 160 + .../src/cryptobox/tests/test.cryptobox.py | 185 + .../cryptobox/tests/test.cryptoboxtools.py | 77 + v0.3.4.5/src/cryptobox/tests/test.plugins.py | 56 + v0.3.4.5/src/cryptobox/tests/test.websites.py | 62 + v0.3.4.5/src/cryptobox/tests/tools.py | 140 + v0.3.4.5/src/cryptobox/web/__init__.py | 7 + v0.3.4.5/src/cryptobox/web/dataset.py | 223 + v0.3.4.5/src/cryptobox/web/languages.py | 49 + v0.3.4.5/src/cryptobox/web/sites.py | 680 + v0.3.4.5/src/pylintrc | 44 + v0.3.4.5/stuff/debian-package.txt | 81 + v0.3.4.5/stuff/known_problems | 4 + v0.3.4.5/stuff/language_specification.txt | 33 + v0.3.4.5/stuff/pootle-updates.txt | 33 + v0.3.4.5/stuff/uml-howto.txt | 5 + v0.3.4.5/stuff/upload_and_release-policy.txt | 23 + v0.3.4.5/templates/access_denied.cs | 6 + v0.3.4.5/templates/empty.cs | 6 + v0.3.4.5/templates/footer.cs | 43 + v0.3.4.5/templates/header.cs | 108 + v0.3.4.5/templates/language.hdf | 98 + v0.3.4.5/templates/macros.cs | 262 + v0.3.4.5/templates/main.cs | 19 + v0.3.4.5/templates/show_volume_footer.cs | 3 + v0.3.4.5/templates/show_volume_header.cs | 26 + v0.3.4.5/templates/volume_busy.cs | 8 + v0.3.4.5/templates/volume_plugins.cs | 41 + v0.3.4.5/www-data/background_frame_corner.png | Bin 0 -> 2355 bytes v0.3.4.5/www-data/background_frame_top.png | Bin 0 -> 2109 bytes v0.3.4.5/www-data/backpane_left.png | Bin 0 -> 211 bytes v0.3.4.5/www-data/backpane_left_top.gif | Bin 0 -> 924 bytes v0.3.4.5/www-data/backpane_left_top.png | Bin 0 -> 274 bytes v0.3.4.5/www-data/backpane_right.png | Bin 0 -> 200 bytes v0.3.4.5/www-data/backpane_right_top.gif | Bin 0 -> 924 bytes v0.3.4.5/www-data/backpane_right_top.png | Bin 0 -> 288 bytes v0.3.4.5/www-data/backpane_top.png | Bin 0 -> 152 bytes v0.3.4.5/www-data/cbx-text-logo1.png | Bin 0 -> 4516 bytes v0.3.4.5/www-data/cbx-text-logo2.png | Bin 0 -> 4609 bytes v0.3.4.5/www-data/cryptobox.css | 507 + v0.3.4.5/www-data/dialog-error_tango.gif | Bin 0 -> 1521 bytes v0.3.4.5/www-data/dialog-error_tango.png | Bin 0 -> 1670 bytes .../www-data/dialog-information_tango.gif | Bin 0 -> 1319 bytes .../www-data/dialog-information_tango.png | Bin 0 -> 1910 bytes v0.3.4.5/www-data/dialog-warning_tango.gif | Bin 0 -> 1365 bytes v0.3.4.5/www-data/dialog-warning_tango.png | Bin 0 -> 1569 bytes .../environment_warning_background.png | Bin 0 -> 29795 bytes v0.3.4.5/www-data/favicon.ico | Bin 0 -> 3638 bytes v0.3.4.5/www-data/footer_line.png | Bin 0 -> 262 bytes v0.3.4.5/www-data/help_background.png | Bin 0 -> 27238 bytes v0.3.4.5/www-data/icon_background_active.png | Bin 0 -> 14372 bytes .../www-data/icon_background_active_060.png | Bin 0 -> 771 bytes .../www-data/icon_background_active_080.png | Bin 0 -> 1177 bytes .../www-data/icon_background_active_100.png | Bin 0 -> 1581 bytes .../www-data/icon_background_active_256.png | Bin 0 -> 7347 bytes .../icon_background_active_orange_100.png | Bin 0 -> 961 bytes .../www-data/icon_background_passive_060.png | Bin 0 -> 665 bytes .../www-data/icon_background_passive_080.png | Bin 0 -> 1108 bytes .../www-data/icon_background_passive_100.png | Bin 0 -> 1538 bytes .../www-data/icon_background_passive_256.png | Bin 0 -> 5624 bytes v0.3.4.5/www-data/icon_get_help.gif | Bin 0 -> 2389 bytes v0.3.4.5/www-data/icon_get_help.png | Bin 0 -> 3428 bytes v0.3.4.5/www-data/icon_get_help_disable.gif | Bin 0 -> 2248 bytes v0.3.4.5/www-data/icon_get_help_disable.png | Bin 0 -> 3092 bytes v0.3.4.5/www-data/list.gif | Bin 0 -> 51 bytes v0.3.4.5/www-data/register_active.gif | Bin 0 -> 16707 bytes v0.3.4.5/www-data/register_active.png | Bin 0 -> 3798 bytes v0.3.4.5/www-data/register_passive.gif | Bin 0 -> 5798 bytes v0.3.4.5/www-data/register_passive.png | Bin 0 -> 1773 bytes v0.3.4.5/www-data/screenshots/de_config.png | Bin 0 -> 80374 bytes v0.3.4.5/www-data/screenshots/de_init.png | Bin 0 -> 62123 bytes v0.3.4.5/www-data/screenshots/de_mount.png | Bin 0 -> 59615 bytes .../www-data/screenshots/de_w98_login.png | Bin 0 -> 3650 bytes .../screenshots/de_w98_network_drive.png | Bin 0 -> 3345 bytes .../screenshots/de_w98_not_logged_in.png | Bin 0 -> 2914 bytes v0.3.4.5/www-data/screenshots/en_config.png | Bin 0 -> 85007 bytes v0.3.4.5/www-data/screenshots/en_mount.png | Bin 0 -> 71564 bytes .../www-data/screenshots/en_w98_login.png | Bin 0 -> 3504 bytes .../screenshots/en_w98_network_drive.png | Bin 0 -> 3013 bytes .../screenshots/en_w98_not_logged_in.png | Bin 0 -> 2853 bytes .../screenshots/v0.3/activate_volume.png | Bin 0 -> 86234 bytes .../screenshots/v0.3/system_preferences.png | Bin 0 -> 89341 bytes v0.3.4.5/www-data/smile.png | Bin 0 -> 356 bytes v0.3.4.5/www-data/smile4.png | Bin 0 -> 275 bytes v0.3.4.5/www-data/volume_active_crypto.gif | Bin 0 -> 5956 bytes v0.3.4.5/www-data/volume_active_crypto.png | Bin 0 -> 6590 bytes .../www-data/volume_active_crypto_busy.gif | Bin 0 -> 5603 bytes .../www-data/volume_active_crypto_busy.png | Bin 0 -> 6085 bytes v0.3.4.5/www-data/volume_active_plain.gif | Bin 0 -> 5299 bytes v0.3.4.5/www-data/volume_active_plain.png | Bin 0 -> 5903 bytes .../www-data/volume_active_plain_busy.gif | Bin 0 -> 5010 bytes .../www-data/volume_active_plain_busy.png | Bin 0 -> 5372 bytes v0.3.4.5/www-data/volume_passive_crypto.gif | Bin 0 -> 8040 bytes v0.3.4.5/www-data/volume_passive_crypto.png | Bin 0 -> 8140 bytes .../www-data/volume_passive_crypto_busy.gif | Bin 0 -> 7941 bytes .../www-data/volume_passive_crypto_busy.png | Bin 0 -> 7608 bytes v0.3.4.5/www-data/volume_passive_plain.gif | Bin 0 -> 7180 bytes v0.3.4.5/www-data/volume_passive_plain.png | Bin 0 -> 7661 bytes .../www-data/volume_passive_plain_busy.gif | Bin 0 -> 7079 bytes .../www-data/volume_passive_plain_busy.png | Bin 0 -> 7092 bytes v0.3.4.5/www-data/volume_property_frame.png | Bin 0 -> 29572 bytes 728 files changed, 120019 insertions(+) create mode 100644 v0.3.4.5/LICENSE create mode 100644 v0.3.4.5/MANIFEST.in create mode 100644 v0.3.4.5/README create mode 100644 v0.3.4.5/README.davfs create mode 100644 v0.3.4.5/README.proxy create mode 100644 v0.3.4.5/README.samba create mode 100644 v0.3.4.5/README.ssl create mode 100755 v0.3.4.5/bin/CryptoBoxRootActions create mode 100755 v0.3.4.5/bin/CryptoBoxWebserver create mode 100644 v0.3.4.5/bin/cryptobox-unittests.conf create mode 100644 v0.3.4.5/bin/cryptobox.conf create mode 100755 v0.3.4.5/bin/do_pylint.sh create mode 100755 v0.3.4.5/bin/do_unittests.sh create mode 100755 v0.3.4.5/bin/run_webserver.sh create mode 100755 v0.3.4.5/bin/uml-setup.sh create mode 100644 v0.3.4.5/changelog create mode 100644 v0.3.4.5/conf-examples/apache2_dav.conf create mode 100644 v0.3.4.5/conf-examples/apache_proxypass.conf create mode 100644 v0.3.4.5/conf-examples/cryptobox.conf create mode 100644 v0.3.4.5/conf-examples/openssl.cnf create mode 100755 v0.3.4.5/conf-examples/start_stunnel.sh create mode 100644 v0.3.4.5/conf-examples/super.tab-example create mode 100644 v0.3.4.5/copyright create mode 100644 v0.3.4.5/copyright.graphics create mode 100644 v0.3.4.5/debian/README.Debian create mode 100644 v0.3.4.5/debian/changelog create mode 100644 v0.3.4.5/debian/compat create mode 100644 v0.3.4.5/debian/control create mode 100644 v0.3.4.5/debian/copyright create mode 100644 v0.3.4.5/debian/cryptobox-server.default create mode 100644 v0.3.4.5/debian/cryptobox-server.dirs create mode 100644 v0.3.4.5/debian/cryptobox-server.docs create mode 100644 v0.3.4.5/debian/cryptobox-server.examples create mode 100644 v0.3.4.5/debian/cryptobox-server.init create mode 100644 v0.3.4.5/debian/cryptobox-server.lintian create mode 100644 v0.3.4.5/debian/cryptobox-server.logrotate create mode 100644 v0.3.4.5/debian/cryptobox-server.manpages create mode 100644 v0.3.4.5/debian/cryptobox-server.postinst create mode 100644 v0.3.4.5/debian/cryptobox-server.postrm create mode 100644 v0.3.4.5/debian/cryptobox-server.preinst create mode 100644 v0.3.4.5/debian/cryptobox-server.prerm create mode 100644 v0.3.4.5/debian/patches/00list create mode 100644 v0.3.4.5/debian/pycompat create mode 100755 v0.3.4.5/debian/rules create mode 100644 v0.3.4.5/design/cryptobox_backgrounds.svg create mode 100644 v0.3.4.5/design/icons/applications-system_tango.svg create mode 100644 v0.3.4.5/design/icons/computer_tango.svg create mode 100644 v0.3.4.5/design/icons/dialog-error_tango.svg create mode 100644 v0.3.4.5/design/icons/dialog-information_tango.svg create mode 100644 v0.3.4.5/design/icons/dialog-warning_tango.svg create mode 100644 v0.3.4.5/design/icons/drive-cdrom_tango.svg create mode 100644 v0.3.4.5/design/icons/drive-harddisk_tango.svg create mode 100644 v0.3.4.5/design/icons/drive-removable-media_tango.svg create mode 100644 v0.3.4.5/design/icons/face_smile_big.svg create mode 100644 v0.3.4.5/design/icons/globe-lips.svg create mode 100644 v0.3.4.5/design/icons/gnome-dev-removable-usb_nuvola.svg create mode 100644 v0.3.4.5/design/icons/gnome-globe_nuvola.svg create mode 100644 v0.3.4.5/design/icons/go-down_tango.svg create mode 100644 v0.3.4.5/design/icons/go-up_tango.svg create mode 100644 v0.3.4.5/design/icons/gtk-ok_nuvola.svg create mode 100644 v0.3.4.5/design/icons/gtk-stop_nuvola.svg create mode 100644 v0.3.4.5/design/icons/gtk-zoom-in_nuvola.svg create mode 100644 v0.3.4.5/design/icons/help_browser.svg create mode 100644 v0.3.4.5/design/icons/help_browser_disable.svg create mode 100644 v0.3.4.5/design/icons/inaccessible_tango_emblem-unreadable.svg create mode 100644 v0.3.4.5/design/icons/locked_tango-emblem-readonly.svg create mode 100644 v0.3.4.5/design/icons/multimedia-dell-dj-pocket_tango.svg create mode 100644 v0.3.4.5/design/icons/multimedia-player-ipod-mini-blue_tango.svg create mode 100644 v0.3.4.5/design/icons/multimedia-player-motorola-rokr_tango.svg create mode 100644 v0.3.4.5/design/icons/network-transmit-receive_design.svg create mode 100644 v0.3.4.5/design/icons/package-x-generic_tango.svg create mode 100644 v0.3.4.5/design/icons/pile_of_devices.svg create mode 100644 v0.3.4.5/design/icons/preferences-system_tango.svg create mode 100644 v0.3.4.5/design/icons/redhat-config-users_wasp.svg create mode 100644 v0.3.4.5/design/icons/system-log-out_tango.svg create mode 100644 v0.3.4.5/design/icons/unlocked-device_tango.svg create mode 100644 v0.3.4.5/design/logo/ameisenkopp.svg create mode 100644 v0.3.4.5/design/logo/boesetest.svg create mode 100644 v0.3.4.5/design/logo/bubblebutton.svg create mode 100644 v0.3.4.5/design/logo/cryptoboxlogogebastel.svg create mode 100644 v0.3.4.5/design/logo/cryptoboxlogogebastelhintergrundbild.svg create mode 100644 v0.3.4.5/design/logo/entwurf.svg create mode 100644 v0.3.4.5/design/logo/evil_stick.svg create mode 100644 v0.3.4.5/design/logo/evil_stick2.svg create mode 100644 v0.3.4.5/design/logo/evil_stick3.svg create mode 100644 v0.3.4.5/design/what_is_cryptobox.svg create mode 100644 v0.3.4.5/doc/html/de/CryptoBox.html create mode 100644 v0.3.4.5/doc/html/de/CryptoBoxDev.html create mode 100644 v0.3.4.5/doc/html/de/CryptoBoxDevBackground.html create mode 100644 v0.3.4.5/doc/html/de/CryptoBoxDevCustomBuild.html create mode 100644 v0.3.4.5/doc/html/de/CryptoBoxDevCustomConfigure.html create mode 100644 v0.3.4.5/doc/html/de/CryptoBoxDevKnownProblems.html create mode 100644 v0.3.4.5/doc/html/de/CryptoBoxDevPreparation.html create mode 100644 v0.3.4.5/doc/html/de/CryptoBoxDevValidation.html create mode 100644 v0.3.4.5/doc/html/de/CryptoBoxDevWorkFlow.html create mode 100644 v0.3.4.5/doc/html/de/CryptoBoxUser.html create mode 100644 v0.3.4.5/doc/html/de/CryptoBoxUserConfiguration.html create mode 100644 v0.3.4.5/doc/html/de/CryptoBoxUserDailyUse.html create mode 100644 v0.3.4.5/doc/html/de/CryptoBoxUserGettingStarted.html create mode 100644 v0.3.4.5/doc/html/en/CryptoBox.html create mode 100644 v0.3.4.5/doc/html/en/CryptoBoxDev.html create mode 100644 v0.3.4.5/doc/html/en/CryptoBoxDevBackground.html create mode 100644 v0.3.4.5/doc/html/en/CryptoBoxDevCustomBuild.html create mode 100644 v0.3.4.5/doc/html/en/CryptoBoxDevCustomConfigure.html create mode 100644 v0.3.4.5/doc/html/en/CryptoBoxDevKnownProblems.html create mode 100644 v0.3.4.5/doc/html/en/CryptoBoxDevPreparation.html create mode 100644 v0.3.4.5/doc/html/en/CryptoBoxDevValidation.html create mode 100644 v0.3.4.5/doc/html/en/CryptoBoxDevWorkFlow.html create mode 100644 v0.3.4.5/doc/html/en/CryptoBoxUser.html create mode 100644 v0.3.4.5/doc/html/en/CryptoBoxUserConfiguration.html create mode 100644 v0.3.4.5/doc/html/en/CryptoBoxUserDailyUse.html create mode 100644 v0.3.4.5/doc/html/en/CryptoBoxUserGettingStarted.html create mode 100644 v0.3.4.5/event-scripts/README create mode 100644 v0.3.4.5/event-scripts/_event_scripts_ create mode 100755 v0.3.4.5/event-scripts/apache2_dav create mode 100755 v0.3.4.5/event-scripts/samba create mode 100644 v0.3.4.5/intl/cryptobox-server.pot create mode 100644 v0.3.4.5/intl/cs/cryptobox-server.po create mode 100644 v0.3.4.5/intl/da/cryptobox-server.po create mode 100644 v0.3.4.5/intl/de/cryptobox-server.po create mode 100644 v0.3.4.5/intl/en/cryptobox-server.po create mode 100644 v0.3.4.5/intl/es/cryptobox-server.po create mode 100644 v0.3.4.5/intl/fi/cryptobox-server.po create mode 100644 v0.3.4.5/intl/fr/cryptobox-server.po create mode 100644 v0.3.4.5/intl/hu/cryptobox-server.po create mode 100644 v0.3.4.5/intl/it/cryptobox-server.po create mode 100644 v0.3.4.5/intl/ja/cryptobox-server.po create mode 100644 v0.3.4.5/intl/nl/cryptobox-server.po create mode 100644 v0.3.4.5/intl/pl/cryptobox-server.po create mode 100644 v0.3.4.5/intl/pt/cryptobox-server.po create mode 100644 v0.3.4.5/intl/ru/cryptobox-server.po create mode 100644 v0.3.4.5/intl/sl/cryptobox-server.po create mode 100644 v0.3.4.5/intl/sv/cryptobox-server.po create mode 100644 v0.3.4.5/intl/ur/cryptobox-server.po create mode 100644 v0.3.4.5/man/CryptoBoxRootActions.8 create mode 100644 v0.3.4.5/man/CryptoBoxWebserver.8 create mode 100644 v0.3.4.5/package.exclude create mode 100644 v0.3.4.5/plugins/date/date.py create mode 100644 v0.3.4.5/plugins/date/form_date.cs create mode 100644 v0.3.4.5/plugins/date/intl/cryptobox-server-feature-date.pot create mode 100644 v0.3.4.5/plugins/date/intl/cs/cryptobox-server-feature-date.po create mode 100644 v0.3.4.5/plugins/date/intl/da/cryptobox-server-feature-date.po create mode 100644 v0.3.4.5/plugins/date/intl/de/cryptobox-server-feature-date.po create mode 100644 v0.3.4.5/plugins/date/intl/en/cryptobox-server-feature-date.po create mode 100644 v0.3.4.5/plugins/date/intl/es/cryptobox-server-feature-date.po create mode 100644 v0.3.4.5/plugins/date/intl/fi/cryptobox-server-feature-date.po create mode 100644 v0.3.4.5/plugins/date/intl/fr/cryptobox-server-feature-date.po create mode 100644 v0.3.4.5/plugins/date/intl/hu/cryptobox-server-feature-date.po create mode 100644 v0.3.4.5/plugins/date/intl/it/cryptobox-server-feature-date.po create mode 100644 v0.3.4.5/plugins/date/intl/ja/cryptobox-server-feature-date.po create mode 100644 v0.3.4.5/plugins/date/intl/nl/cryptobox-server-feature-date.po create mode 100644 v0.3.4.5/plugins/date/intl/pl/cryptobox-server-feature-date.po create mode 100644 v0.3.4.5/plugins/date/intl/pt/cryptobox-server-feature-date.po create mode 100644 v0.3.4.5/plugins/date/intl/ru/cryptobox-server-feature-date.po create mode 100644 v0.3.4.5/plugins/date/intl/sl/cryptobox-server-feature-date.po create mode 100644 v0.3.4.5/plugins/date/intl/sv/cryptobox-server-feature-date.po create mode 100644 v0.3.4.5/plugins/date/intl/ur/cryptobox-server-feature-date.po create mode 100644 v0.3.4.5/plugins/date/language.hdf create mode 100644 v0.3.4.5/plugins/date/plugin_icon.gif create mode 100644 v0.3.4.5/plugins/date/plugin_icon.png create mode 100755 v0.3.4.5/plugins/date/root_action.py create mode 100644 v0.3.4.5/plugins/date/unittests.py create mode 100644 v0.3.4.5/plugins/disks/disks.cs create mode 100644 v0.3.4.5/plugins/disks/disks.py create mode 100644 v0.3.4.5/plugins/disks/intl/cryptobox-server-feature-disks.pot create mode 100644 v0.3.4.5/plugins/disks/intl/cs/cryptobox-server-feature-disks.po create mode 100644 v0.3.4.5/plugins/disks/intl/da/cryptobox-server-feature-disks.po create mode 100644 v0.3.4.5/plugins/disks/intl/de/cryptobox-server-feature-disks.po create mode 100644 v0.3.4.5/plugins/disks/intl/en/cryptobox-server-feature-disks.po create mode 100644 v0.3.4.5/plugins/disks/intl/es/cryptobox-server-feature-disks.po create mode 100644 v0.3.4.5/plugins/disks/intl/fi/cryptobox-server-feature-disks.po create mode 100644 v0.3.4.5/plugins/disks/intl/fr/cryptobox-server-feature-disks.po create mode 100644 v0.3.4.5/plugins/disks/intl/hu/cryptobox-server-feature-disks.po create mode 100644 v0.3.4.5/plugins/disks/intl/it/cryptobox-server-feature-disks.po create mode 100644 v0.3.4.5/plugins/disks/intl/ja/cryptobox-server-feature-disks.po create mode 100644 v0.3.4.5/plugins/disks/intl/nl/cryptobox-server-feature-disks.po create mode 100644 v0.3.4.5/plugins/disks/intl/pl/cryptobox-server-feature-disks.po create mode 100644 v0.3.4.5/plugins/disks/intl/pt/cryptobox-server-feature-disks.po create mode 100644 v0.3.4.5/plugins/disks/intl/ru/cryptobox-server-feature-disks.po create mode 100644 v0.3.4.5/plugins/disks/intl/sl/cryptobox-server-feature-disks.po create mode 100644 v0.3.4.5/plugins/disks/intl/sv/cryptobox-server-feature-disks.po create mode 100644 v0.3.4.5/plugins/disks/intl/ur/cryptobox-server-feature-disks.po create mode 100644 v0.3.4.5/plugins/disks/language.hdf create mode 100644 v0.3.4.5/plugins/disks/plugin_icon.gif create mode 100644 v0.3.4.5/plugins/disks/plugin_icon.png create mode 100644 v0.3.4.5/plugins/disks/unittests.py create mode 100644 v0.3.4.5/plugins/encrypted_webinterface/encrypted_webinterface.py create mode 100644 v0.3.4.5/plugins/encrypted_webinterface/intl/cryptobox-server-feature-encrypted_webinterface.pot create mode 100644 v0.3.4.5/plugins/encrypted_webinterface/intl/cs/cryptobox-server-feature-encrypted_webinterface.po create mode 100644 v0.3.4.5/plugins/encrypted_webinterface/intl/da/cryptobox-server-feature-encrypted_webinterface.po create mode 100644 v0.3.4.5/plugins/encrypted_webinterface/intl/de/cryptobox-server-feature-encrypted_webinterface.po create mode 100644 v0.3.4.5/plugins/encrypted_webinterface/intl/en/cryptobox-server-feature-encrypted_webinterface.po create mode 100644 v0.3.4.5/plugins/encrypted_webinterface/intl/es/cryptobox-server-feature-encrypted_webinterface.po create mode 100644 v0.3.4.5/plugins/encrypted_webinterface/intl/fi/cryptobox-server-feature-encrypted_webinterface.po create mode 100644 v0.3.4.5/plugins/encrypted_webinterface/intl/fr/cryptobox-server-feature-encrypted_webinterface.po create mode 100644 v0.3.4.5/plugins/encrypted_webinterface/intl/hu/cryptobox-server-feature-encrypted_webinterface.po create mode 100644 v0.3.4.5/plugins/encrypted_webinterface/intl/it/cryptobox-server-feature-encrypted_webinterface.po create mode 100644 v0.3.4.5/plugins/encrypted_webinterface/intl/ja/cryptobox-server-feature-encrypted_webinterface.po create mode 100644 v0.3.4.5/plugins/encrypted_webinterface/intl/nl/cryptobox-server-feature-encrypted_webinterface.po create mode 100644 v0.3.4.5/plugins/encrypted_webinterface/intl/pl/cryptobox-server-feature-encrypted_webinterface.po create mode 100644 v0.3.4.5/plugins/encrypted_webinterface/intl/pt/cryptobox-server-feature-encrypted_webinterface.po create mode 100644 v0.3.4.5/plugins/encrypted_webinterface/intl/ru/cryptobox-server-feature-encrypted_webinterface.po create mode 100644 v0.3.4.5/plugins/encrypted_webinterface/intl/sl/cryptobox-server-feature-encrypted_webinterface.po create mode 100644 v0.3.4.5/plugins/encrypted_webinterface/intl/sv/cryptobox-server-feature-encrypted_webinterface.po create mode 100644 v0.3.4.5/plugins/encrypted_webinterface/intl/ur/cryptobox-server-feature-encrypted_webinterface.po create mode 100644 v0.3.4.5/plugins/encrypted_webinterface/language.hdf create mode 100755 v0.3.4.5/plugins/encrypted_webinterface/root_action.py create mode 100644 v0.3.4.5/plugins/encrypted_webinterface/unittests.py create mode 100644 v0.3.4.5/plugins/help/doc.cs create mode 100644 v0.3.4.5/plugins/help/help.py create mode 100644 v0.3.4.5/plugins/help/intl/cryptobox-server-feature-help.pot create mode 100644 v0.3.4.5/plugins/help/intl/cs/cryptobox-server-feature-help.po create mode 100644 v0.3.4.5/plugins/help/intl/da/cryptobox-server-feature-help.po create mode 100644 v0.3.4.5/plugins/help/intl/de/cryptobox-server-feature-help.po create mode 100644 v0.3.4.5/plugins/help/intl/en/cryptobox-server-feature-help.po create mode 100644 v0.3.4.5/plugins/help/intl/es/cryptobox-server-feature-help.po create mode 100644 v0.3.4.5/plugins/help/intl/fi/cryptobox-server-feature-help.po create mode 100644 v0.3.4.5/plugins/help/intl/fr/cryptobox-server-feature-help.po create mode 100644 v0.3.4.5/plugins/help/intl/hu/cryptobox-server-feature-help.po create mode 100644 v0.3.4.5/plugins/help/intl/it/cryptobox-server-feature-help.po create mode 100644 v0.3.4.5/plugins/help/intl/ja/cryptobox-server-feature-help.po create mode 100644 v0.3.4.5/plugins/help/intl/nl/cryptobox-server-feature-help.po create mode 100644 v0.3.4.5/plugins/help/intl/pl/cryptobox-server-feature-help.po create mode 100644 v0.3.4.5/plugins/help/intl/pt/cryptobox-server-feature-help.po create mode 100644 v0.3.4.5/plugins/help/intl/ru/cryptobox-server-feature-help.po create mode 100644 v0.3.4.5/plugins/help/intl/sl/cryptobox-server-feature-help.po create mode 100644 v0.3.4.5/plugins/help/intl/sv/cryptobox-server-feature-help.po create mode 100644 v0.3.4.5/plugins/help/intl/ur/cryptobox-server-feature-help.po create mode 100644 v0.3.4.5/plugins/help/language.hdf create mode 100644 v0.3.4.5/plugins/help/plugin_icon.gif create mode 100644 v0.3.4.5/plugins/help/plugin_icon.png create mode 100644 v0.3.4.5/plugins/help/unittests.py create mode 100644 v0.3.4.5/plugins/language_selection/intl/cryptobox-server-feature-language_selection.pot create mode 100644 v0.3.4.5/plugins/language_selection/intl/cs/cryptobox-server-feature-language_selection.po create mode 100644 v0.3.4.5/plugins/language_selection/intl/da/cryptobox-server-feature-language_selection.po create mode 100644 v0.3.4.5/plugins/language_selection/intl/de/cryptobox-server-feature-language_selection.po create mode 100644 v0.3.4.5/plugins/language_selection/intl/en/cryptobox-server-feature-language_selection.po create mode 100644 v0.3.4.5/plugins/language_selection/intl/es/cryptobox-server-feature-language_selection.po create mode 100644 v0.3.4.5/plugins/language_selection/intl/fi/cryptobox-server-feature-language_selection.po create mode 100644 v0.3.4.5/plugins/language_selection/intl/fr/cryptobox-server-feature-language_selection.po create mode 100644 v0.3.4.5/plugins/language_selection/intl/hu/cryptobox-server-feature-language_selection.po create mode 100644 v0.3.4.5/plugins/language_selection/intl/it/cryptobox-server-feature-language_selection.po create mode 100644 v0.3.4.5/plugins/language_selection/intl/ja/cryptobox-server-feature-language_selection.po create mode 100644 v0.3.4.5/plugins/language_selection/intl/nl/cryptobox-server-feature-language_selection.po create mode 100644 v0.3.4.5/plugins/language_selection/intl/pl/cryptobox-server-feature-language_selection.po create mode 100644 v0.3.4.5/plugins/language_selection/intl/pt/cryptobox-server-feature-language_selection.po create mode 100644 v0.3.4.5/plugins/language_selection/intl/ru/cryptobox-server-feature-language_selection.po create mode 100644 v0.3.4.5/plugins/language_selection/intl/sl/cryptobox-server-feature-language_selection.po create mode 100644 v0.3.4.5/plugins/language_selection/intl/sv/cryptobox-server-feature-language_selection.po create mode 100644 v0.3.4.5/plugins/language_selection/intl/ur/cryptobox-server-feature-language_selection.po create mode 100644 v0.3.4.5/plugins/language_selection/language.hdf create mode 100644 v0.3.4.5/plugins/language_selection/language_selection.cs create mode 100644 v0.3.4.5/plugins/language_selection/language_selection.py create mode 100644 v0.3.4.5/plugins/language_selection/list_marker_tango.gif create mode 100644 v0.3.4.5/plugins/language_selection/plugin_icon.gif create mode 100644 v0.3.4.5/plugins/language_selection/plugin_icon.png create mode 100644 v0.3.4.5/plugins/language_selection/unittests.py create mode 100644 v0.3.4.5/plugins/logs/intl/cryptobox-server-feature-logs.pot create mode 100644 v0.3.4.5/plugins/logs/intl/cs/cryptobox-server-feature-logs.po create mode 100644 v0.3.4.5/plugins/logs/intl/da/cryptobox-server-feature-logs.po create mode 100644 v0.3.4.5/plugins/logs/intl/de/cryptobox-server-feature-logs.po create mode 100644 v0.3.4.5/plugins/logs/intl/en/cryptobox-server-feature-logs.po create mode 100644 v0.3.4.5/plugins/logs/intl/es/cryptobox-server-feature-logs.po create mode 100644 v0.3.4.5/plugins/logs/intl/fi/cryptobox-server-feature-logs.po create mode 100644 v0.3.4.5/plugins/logs/intl/fr/cryptobox-server-feature-logs.po create mode 100644 v0.3.4.5/plugins/logs/intl/hu/cryptobox-server-feature-logs.po create mode 100644 v0.3.4.5/plugins/logs/intl/it/cryptobox-server-feature-logs.po create mode 100644 v0.3.4.5/plugins/logs/intl/ja/cryptobox-server-feature-logs.po create mode 100644 v0.3.4.5/plugins/logs/intl/nl/cryptobox-server-feature-logs.po create mode 100644 v0.3.4.5/plugins/logs/intl/pl/cryptobox-server-feature-logs.po create mode 100644 v0.3.4.5/plugins/logs/intl/pt/cryptobox-server-feature-logs.po create mode 100644 v0.3.4.5/plugins/logs/intl/ru/cryptobox-server-feature-logs.po create mode 100644 v0.3.4.5/plugins/logs/intl/sl/cryptobox-server-feature-logs.po create mode 100644 v0.3.4.5/plugins/logs/intl/sv/cryptobox-server-feature-logs.po create mode 100644 v0.3.4.5/plugins/logs/intl/ur/cryptobox-server-feature-logs.po create mode 100644 v0.3.4.5/plugins/logs/language.hdf create mode 100644 v0.3.4.5/plugins/logs/logs.css create mode 100644 v0.3.4.5/plugins/logs/logs.py create mode 100644 v0.3.4.5/plugins/logs/plugin_icon.gif create mode 100644 v0.3.4.5/plugins/logs/plugin_icon.png create mode 100644 v0.3.4.5/plugins/logs/show_log.cs create mode 100644 v0.3.4.5/plugins/logs/unittests.py create mode 100644 v0.3.4.5/plugins/network/form_network.cs create mode 100644 v0.3.4.5/plugins/network/intl/cryptobox-server-feature-network.pot create mode 100644 v0.3.4.5/plugins/network/intl/cs/cryptobox-server-feature-network.po create mode 100644 v0.3.4.5/plugins/network/intl/da/cryptobox-server-feature-network.po create mode 100644 v0.3.4.5/plugins/network/intl/de/cryptobox-server-feature-network.po create mode 100644 v0.3.4.5/plugins/network/intl/en/cryptobox-server-feature-network.po create mode 100644 v0.3.4.5/plugins/network/intl/es/cryptobox-server-feature-network.po create mode 100644 v0.3.4.5/plugins/network/intl/fi/cryptobox-server-feature-network.po create mode 100644 v0.3.4.5/plugins/network/intl/fr/cryptobox-server-feature-network.po create mode 100644 v0.3.4.5/plugins/network/intl/hu/cryptobox-server-feature-network.po create mode 100644 v0.3.4.5/plugins/network/intl/it/cryptobox-server-feature-network.po create mode 100644 v0.3.4.5/plugins/network/intl/ja/cryptobox-server-feature-network.po create mode 100644 v0.3.4.5/plugins/network/intl/nl/cryptobox-server-feature-network.po create mode 100644 v0.3.4.5/plugins/network/intl/pl/cryptobox-server-feature-network.po create mode 100644 v0.3.4.5/plugins/network/intl/pt/cryptobox-server-feature-network.po create mode 100644 v0.3.4.5/plugins/network/intl/ru/cryptobox-server-feature-network.po create mode 100644 v0.3.4.5/plugins/network/intl/sl/cryptobox-server-feature-network.po create mode 100644 v0.3.4.5/plugins/network/intl/sv/cryptobox-server-feature-network.po create mode 100644 v0.3.4.5/plugins/network/intl/ur/cryptobox-server-feature-network.po create mode 100644 v0.3.4.5/plugins/network/language.hdf create mode 100644 v0.3.4.5/plugins/network/network.css create mode 100644 v0.3.4.5/plugins/network/network.py create mode 100644 v0.3.4.5/plugins/network/plugin_icon.gif create mode 100644 v0.3.4.5/plugins/network/plugin_icon.png create mode 100755 v0.3.4.5/plugins/network/root_action.py create mode 100644 v0.3.4.5/plugins/network/unittests.py create mode 100644 v0.3.4.5/plugins/partition/current_partition_info.cs create mode 100644 v0.3.4.5/plugins/partition/intl/cryptobox-server-feature-partition.pot create mode 100644 v0.3.4.5/plugins/partition/intl/cs/cryptobox-server-feature-partition.po create mode 100644 v0.3.4.5/plugins/partition/intl/da/cryptobox-server-feature-partition.po create mode 100644 v0.3.4.5/plugins/partition/intl/de/cryptobox-server-feature-partition.po create mode 100644 v0.3.4.5/plugins/partition/intl/en/cryptobox-server-feature-partition.po create mode 100644 v0.3.4.5/plugins/partition/intl/es/cryptobox-server-feature-partition.po create mode 100644 v0.3.4.5/plugins/partition/intl/fi/cryptobox-server-feature-partition.po create mode 100644 v0.3.4.5/plugins/partition/intl/fr/cryptobox-server-feature-partition.po create mode 100644 v0.3.4.5/plugins/partition/intl/hu/cryptobox-server-feature-partition.po create mode 100644 v0.3.4.5/plugins/partition/intl/it/cryptobox-server-feature-partition.po create mode 100644 v0.3.4.5/plugins/partition/intl/ja/cryptobox-server-feature-partition.po create mode 100644 v0.3.4.5/plugins/partition/intl/nl/cryptobox-server-feature-partition.po create mode 100644 v0.3.4.5/plugins/partition/intl/pl/cryptobox-server-feature-partition.po create mode 100644 v0.3.4.5/plugins/partition/intl/pt/cryptobox-server-feature-partition.po create mode 100644 v0.3.4.5/plugins/partition/intl/ru/cryptobox-server-feature-partition.po create mode 100644 v0.3.4.5/plugins/partition/intl/sl/cryptobox-server-feature-partition.po create mode 100644 v0.3.4.5/plugins/partition/intl/sv/cryptobox-server-feature-partition.po create mode 100644 v0.3.4.5/plugins/partition/intl/ur/cryptobox-server-feature-partition.po create mode 100644 v0.3.4.5/plugins/partition/language.hdf create mode 100644 v0.3.4.5/plugins/partition/partition.css create mode 100644 v0.3.4.5/plugins/partition/partition.py create mode 100644 v0.3.4.5/plugins/partition/plugin_icon.gif create mode 100644 v0.3.4.5/plugins/partition/plugin_icon.png create mode 100755 v0.3.4.5/plugins/partition/root_action.py create mode 100644 v0.3.4.5/plugins/partition/select_device.cs create mode 100644 v0.3.4.5/plugins/partition/set_partitions.cs create mode 100644 v0.3.4.5/plugins/partition/unittests.py create mode 100644 v0.3.4.5/plugins/plugin-interface.txt create mode 100644 v0.3.4.5/plugins/plugin_icon_unknown.gif create mode 100644 v0.3.4.5/plugins/plugin_icon_unknown.png create mode 100644 v0.3.4.5/plugins/plugin_manager/intl/cryptobox-server-feature-plugin_manager.pot create mode 100644 v0.3.4.5/plugins/plugin_manager/intl/cs/cryptobox-server-feature-plugin_manager.po create mode 100644 v0.3.4.5/plugins/plugin_manager/intl/da/cryptobox-server-feature-plugin_manager.po create mode 100644 v0.3.4.5/plugins/plugin_manager/intl/de/cryptobox-server-feature-plugin_manager.po create mode 100644 v0.3.4.5/plugins/plugin_manager/intl/en/cryptobox-server-feature-plugin_manager.po create mode 100644 v0.3.4.5/plugins/plugin_manager/intl/es/cryptobox-server-feature-plugin_manager.po create mode 100644 v0.3.4.5/plugins/plugin_manager/intl/fi/cryptobox-server-feature-plugin_manager.po create mode 100644 v0.3.4.5/plugins/plugin_manager/intl/fr/cryptobox-server-feature-plugin_manager.po create mode 100644 v0.3.4.5/plugins/plugin_manager/intl/hu/cryptobox-server-feature-plugin_manager.po create mode 100644 v0.3.4.5/plugins/plugin_manager/intl/it/cryptobox-server-feature-plugin_manager.po create mode 100644 v0.3.4.5/plugins/plugin_manager/intl/ja/cryptobox-server-feature-plugin_manager.po create mode 100644 v0.3.4.5/plugins/plugin_manager/intl/nl/cryptobox-server-feature-plugin_manager.po create mode 100644 v0.3.4.5/plugins/plugin_manager/intl/pl/cryptobox-server-feature-plugin_manager.po create mode 100644 v0.3.4.5/plugins/plugin_manager/intl/pt/cryptobox-server-feature-plugin_manager.po create mode 100644 v0.3.4.5/plugins/plugin_manager/intl/ru/cryptobox-server-feature-plugin_manager.po create mode 100644 v0.3.4.5/plugins/plugin_manager/intl/sl/cryptobox-server-feature-plugin_manager.po create mode 100644 v0.3.4.5/plugins/plugin_manager/intl/sv/cryptobox-server-feature-plugin_manager.po create mode 100644 v0.3.4.5/plugins/plugin_manager/intl/ur/cryptobox-server-feature-plugin_manager.po create mode 100644 v0.3.4.5/plugins/plugin_manager/language.hdf create mode 100644 v0.3.4.5/plugins/plugin_manager/plugin_icon.gif create mode 100644 v0.3.4.5/plugins/plugin_manager/plugin_icon.png create mode 100644 v0.3.4.5/plugins/plugin_manager/plugin_list.cs create mode 100644 v0.3.4.5/plugins/plugin_manager/plugin_manager.css create mode 100644 v0.3.4.5/plugins/plugin_manager/plugin_manager.py create mode 100644 v0.3.4.5/plugins/plugin_manager/tango-go-down.png create mode 100644 v0.3.4.5/plugins/plugin_manager/tango-go-up.png create mode 100644 v0.3.4.5/plugins/plugin_manager/unittests.py create mode 100644 v0.3.4.5/plugins/shutdown/form_shutdown.cs create mode 100644 v0.3.4.5/plugins/shutdown/gnome-reboot.gif create mode 100644 v0.3.4.5/plugins/shutdown/gnome-reboot.png create mode 100644 v0.3.4.5/plugins/shutdown/gnome-shutdown.gif create mode 100644 v0.3.4.5/plugins/shutdown/gnome-shutdown.png create mode 100644 v0.3.4.5/plugins/shutdown/intl/cryptobox-server-feature-shutdown.pot create mode 100644 v0.3.4.5/plugins/shutdown/intl/cs/cryptobox-server-feature-shutdown.po create mode 100644 v0.3.4.5/plugins/shutdown/intl/da/cryptobox-server-feature-shutdown.po create mode 100644 v0.3.4.5/plugins/shutdown/intl/de/cryptobox-server-feature-shutdown.po create mode 100644 v0.3.4.5/plugins/shutdown/intl/en/cryptobox-server-feature-shutdown.po create mode 100644 v0.3.4.5/plugins/shutdown/intl/es/cryptobox-server-feature-shutdown.po create mode 100644 v0.3.4.5/plugins/shutdown/intl/fi/cryptobox-server-feature-shutdown.po create mode 100644 v0.3.4.5/plugins/shutdown/intl/fr/cryptobox-server-feature-shutdown.po create mode 100644 v0.3.4.5/plugins/shutdown/intl/hu/cryptobox-server-feature-shutdown.po create mode 100644 v0.3.4.5/plugins/shutdown/intl/it/cryptobox-server-feature-shutdown.po create mode 100644 v0.3.4.5/plugins/shutdown/intl/ja/cryptobox-server-feature-shutdown.po create mode 100644 v0.3.4.5/plugins/shutdown/intl/nl/cryptobox-server-feature-shutdown.po create mode 100644 v0.3.4.5/plugins/shutdown/intl/pl/cryptobox-server-feature-shutdown.po create mode 100644 v0.3.4.5/plugins/shutdown/intl/pt/cryptobox-server-feature-shutdown.po create mode 100644 v0.3.4.5/plugins/shutdown/intl/ru/cryptobox-server-feature-shutdown.po create mode 100644 v0.3.4.5/plugins/shutdown/intl/sl/cryptobox-server-feature-shutdown.po create mode 100644 v0.3.4.5/plugins/shutdown/intl/sv/cryptobox-server-feature-shutdown.po create mode 100644 v0.3.4.5/plugins/shutdown/intl/ur/cryptobox-server-feature-shutdown.po create mode 100644 v0.3.4.5/plugins/shutdown/language.hdf create mode 100644 v0.3.4.5/plugins/shutdown/plugin_icon.gif create mode 100644 v0.3.4.5/plugins/shutdown/plugin_icon.png create mode 100644 v0.3.4.5/plugins/shutdown/progress_reboot.cs create mode 100644 v0.3.4.5/plugins/shutdown/progress_shutdown.cs create mode 100755 v0.3.4.5/plugins/shutdown/root_action.py create mode 100644 v0.3.4.5/plugins/shutdown/shutdown.py create mode 100644 v0.3.4.5/plugins/shutdown/unittests.py create mode 100644 v0.3.4.5/plugins/system_preferences/intl/cryptobox-server-feature-system_preferences.pot create mode 100644 v0.3.4.5/plugins/system_preferences/intl/cs/cryptobox-server-feature-system_preferences.po create mode 100644 v0.3.4.5/plugins/system_preferences/intl/da/cryptobox-server-feature-system_preferences.po create mode 100644 v0.3.4.5/plugins/system_preferences/intl/de/cryptobox-server-feature-system_preferences.po create mode 100644 v0.3.4.5/plugins/system_preferences/intl/en/cryptobox-server-feature-system_preferences.po create mode 100644 v0.3.4.5/plugins/system_preferences/intl/es/cryptobox-server-feature-system_preferences.po create mode 100644 v0.3.4.5/plugins/system_preferences/intl/fi/cryptobox-server-feature-system_preferences.po create mode 100644 v0.3.4.5/plugins/system_preferences/intl/fr/cryptobox-server-feature-system_preferences.po create mode 100644 v0.3.4.5/plugins/system_preferences/intl/hu/cryptobox-server-feature-system_preferences.po create mode 100644 v0.3.4.5/plugins/system_preferences/intl/it/cryptobox-server-feature-system_preferences.po create mode 100644 v0.3.4.5/plugins/system_preferences/intl/ja/cryptobox-server-feature-system_preferences.po create mode 100644 v0.3.4.5/plugins/system_preferences/intl/nl/cryptobox-server-feature-system_preferences.po create mode 100644 v0.3.4.5/plugins/system_preferences/intl/pl/cryptobox-server-feature-system_preferences.po create mode 100644 v0.3.4.5/plugins/system_preferences/intl/pt/cryptobox-server-feature-system_preferences.po create mode 100644 v0.3.4.5/plugins/system_preferences/intl/ru/cryptobox-server-feature-system_preferences.po create mode 100644 v0.3.4.5/plugins/system_preferences/intl/sl/cryptobox-server-feature-system_preferences.po create mode 100644 v0.3.4.5/plugins/system_preferences/intl/sv/cryptobox-server-feature-system_preferences.po create mode 100644 v0.3.4.5/plugins/system_preferences/intl/ur/cryptobox-server-feature-system_preferences.po create mode 100644 v0.3.4.5/plugins/system_preferences/language.hdf create mode 100644 v0.3.4.5/plugins/system_preferences/plugin_icon.gif create mode 100644 v0.3.4.5/plugins/system_preferences/plugin_icon.png create mode 100644 v0.3.4.5/plugins/system_preferences/show_plugins.cs create mode 100644 v0.3.4.5/plugins/system_preferences/system_preferences.py create mode 100644 v0.3.4.5/plugins/system_preferences/unittests.py create mode 100644 v0.3.4.5/plugins/user_manager/intl/cryptobox-server-feature-user_manager.pot create mode 100644 v0.3.4.5/plugins/user_manager/intl/cs/cryptobox-server-feature-user_manager.po create mode 100644 v0.3.4.5/plugins/user_manager/intl/da/cryptobox-server-feature-user_manager.po create mode 100644 v0.3.4.5/plugins/user_manager/intl/de/cryptobox-server-feature-user_manager.po create mode 100644 v0.3.4.5/plugins/user_manager/intl/en/cryptobox-server-feature-user_manager.po create mode 100644 v0.3.4.5/plugins/user_manager/intl/es/cryptobox-server-feature-user_manager.po create mode 100644 v0.3.4.5/plugins/user_manager/intl/fi/cryptobox-server-feature-user_manager.po create mode 100644 v0.3.4.5/plugins/user_manager/intl/fr/cryptobox-server-feature-user_manager.po create mode 100644 v0.3.4.5/plugins/user_manager/intl/hu/cryptobox-server-feature-user_manager.po create mode 100644 v0.3.4.5/plugins/user_manager/intl/it/cryptobox-server-feature-user_manager.po create mode 100644 v0.3.4.5/plugins/user_manager/intl/ja/cryptobox-server-feature-user_manager.po create mode 100644 v0.3.4.5/plugins/user_manager/intl/nl/cryptobox-server-feature-user_manager.po create mode 100644 v0.3.4.5/plugins/user_manager/intl/pl/cryptobox-server-feature-user_manager.po create mode 100644 v0.3.4.5/plugins/user_manager/intl/pt/cryptobox-server-feature-user_manager.po create mode 100644 v0.3.4.5/plugins/user_manager/intl/ru/cryptobox-server-feature-user_manager.po create mode 100644 v0.3.4.5/plugins/user_manager/intl/sl/cryptobox-server-feature-user_manager.po create mode 100644 v0.3.4.5/plugins/user_manager/intl/sv/cryptobox-server-feature-user_manager.po create mode 100644 v0.3.4.5/plugins/user_manager/intl/ur/cryptobox-server-feature-user_manager.po create mode 100644 v0.3.4.5/plugins/user_manager/language.hdf create mode 100644 v0.3.4.5/plugins/user_manager/plugin_icon.gif create mode 100644 v0.3.4.5/plugins/user_manager/plugin_icon.png create mode 100644 v0.3.4.5/plugins/user_manager/unittests.py create mode 100644 v0.3.4.5/plugins/user_manager/user_list.cs create mode 100644 v0.3.4.5/plugins/user_manager/user_manager.css create mode 100644 v0.3.4.5/plugins/user_manager/user_manager.py create mode 100644 v0.3.4.5/plugins/volume_automount/intl/cryptobox-server-feature-volume_automount.pot create mode 100644 v0.3.4.5/plugins/volume_automount/intl/cs/cryptobox-server-feature-volume_automount.po create mode 100644 v0.3.4.5/plugins/volume_automount/intl/da/cryptobox-server-feature-volume_automount.po create mode 100644 v0.3.4.5/plugins/volume_automount/intl/de/cryptobox-server-feature-volume_automount.po create mode 100644 v0.3.4.5/plugins/volume_automount/intl/en/cryptobox-server-feature-volume_automount.po create mode 100644 v0.3.4.5/plugins/volume_automount/intl/es/cryptobox-server-feature-volume_automount.po create mode 100644 v0.3.4.5/plugins/volume_automount/intl/fi/cryptobox-server-feature-volume_automount.po create mode 100644 v0.3.4.5/plugins/volume_automount/intl/fr/cryptobox-server-feature-volume_automount.po create mode 100644 v0.3.4.5/plugins/volume_automount/intl/hu/cryptobox-server-feature-volume_automount.po create mode 100644 v0.3.4.5/plugins/volume_automount/intl/it/cryptobox-server-feature-volume_automount.po create mode 100644 v0.3.4.5/plugins/volume_automount/intl/ja/cryptobox-server-feature-volume_automount.po create mode 100644 v0.3.4.5/plugins/volume_automount/intl/nl/cryptobox-server-feature-volume_automount.po create mode 100644 v0.3.4.5/plugins/volume_automount/intl/pl/cryptobox-server-feature-volume_automount.po create mode 100644 v0.3.4.5/plugins/volume_automount/intl/pt/cryptobox-server-feature-volume_automount.po create mode 100644 v0.3.4.5/plugins/volume_automount/intl/ru/cryptobox-server-feature-volume_automount.po create mode 100644 v0.3.4.5/plugins/volume_automount/intl/sl/cryptobox-server-feature-volume_automount.po create mode 100644 v0.3.4.5/plugins/volume_automount/intl/sv/cryptobox-server-feature-volume_automount.po create mode 100644 v0.3.4.5/plugins/volume_automount/intl/ur/cryptobox-server-feature-volume_automount.po create mode 100644 v0.3.4.5/plugins/volume_automount/language.hdf create mode 100644 v0.3.4.5/plugins/volume_automount/unittests.py create mode 100644 v0.3.4.5/plugins/volume_automount/volume_automount.cs create mode 100644 v0.3.4.5/plugins/volume_automount/volume_automount.py create mode 100644 v0.3.4.5/plugins/volume_chpasswd/intl/cryptobox-server-feature-volume_chpasswd.pot create mode 100644 v0.3.4.5/plugins/volume_chpasswd/intl/cs/cryptobox-server-feature-volume_chpasswd.po create mode 100644 v0.3.4.5/plugins/volume_chpasswd/intl/da/cryptobox-server-feature-volume_chpasswd.po create mode 100644 v0.3.4.5/plugins/volume_chpasswd/intl/de/cryptobox-server-feature-volume_chpasswd.po create mode 100644 v0.3.4.5/plugins/volume_chpasswd/intl/en/cryptobox-server-feature-volume_chpasswd.po create mode 100644 v0.3.4.5/plugins/volume_chpasswd/intl/es/cryptobox-server-feature-volume_chpasswd.po create mode 100644 v0.3.4.5/plugins/volume_chpasswd/intl/fi/cryptobox-server-feature-volume_chpasswd.po create mode 100644 v0.3.4.5/plugins/volume_chpasswd/intl/fr/cryptobox-server-feature-volume_chpasswd.po create mode 100644 v0.3.4.5/plugins/volume_chpasswd/intl/hu/cryptobox-server-feature-volume_chpasswd.po create mode 100644 v0.3.4.5/plugins/volume_chpasswd/intl/it/cryptobox-server-feature-volume_chpasswd.po create mode 100644 v0.3.4.5/plugins/volume_chpasswd/intl/ja/cryptobox-server-feature-volume_chpasswd.po create mode 100644 v0.3.4.5/plugins/volume_chpasswd/intl/nl/cryptobox-server-feature-volume_chpasswd.po create mode 100644 v0.3.4.5/plugins/volume_chpasswd/intl/pl/cryptobox-server-feature-volume_chpasswd.po create mode 100644 v0.3.4.5/plugins/volume_chpasswd/intl/pt/cryptobox-server-feature-volume_chpasswd.po create mode 100644 v0.3.4.5/plugins/volume_chpasswd/intl/ru/cryptobox-server-feature-volume_chpasswd.po create mode 100644 v0.3.4.5/plugins/volume_chpasswd/intl/sl/cryptobox-server-feature-volume_chpasswd.po create mode 100644 v0.3.4.5/plugins/volume_chpasswd/intl/sv/cryptobox-server-feature-volume_chpasswd.po create mode 100644 v0.3.4.5/plugins/volume_chpasswd/intl/ur/cryptobox-server-feature-volume_chpasswd.po create mode 100644 v0.3.4.5/plugins/volume_chpasswd/language.hdf create mode 100644 v0.3.4.5/plugins/volume_chpasswd/unittests.py create mode 100644 v0.3.4.5/plugins/volume_chpasswd/volume_chpasswd.cs create mode 100644 v0.3.4.5/plugins/volume_chpasswd/volume_chpasswd.py create mode 100644 v0.3.4.5/plugins/volume_details/intl/cryptobox-server-feature-volume_details.pot create mode 100644 v0.3.4.5/plugins/volume_details/intl/cs/cryptobox-server-feature-volume_details.po create mode 100644 v0.3.4.5/plugins/volume_details/intl/da/cryptobox-server-feature-volume_details.po create mode 100644 v0.3.4.5/plugins/volume_details/intl/de/cryptobox-server-feature-volume_details.po create mode 100644 v0.3.4.5/plugins/volume_details/intl/en/cryptobox-server-feature-volume_details.po create mode 100644 v0.3.4.5/plugins/volume_details/intl/es/cryptobox-server-feature-volume_details.po create mode 100644 v0.3.4.5/plugins/volume_details/intl/fi/cryptobox-server-feature-volume_details.po create mode 100644 v0.3.4.5/plugins/volume_details/intl/fr/cryptobox-server-feature-volume_details.po create mode 100644 v0.3.4.5/plugins/volume_details/intl/hu/cryptobox-server-feature-volume_details.po create mode 100644 v0.3.4.5/plugins/volume_details/intl/it/cryptobox-server-feature-volume_details.po create mode 100644 v0.3.4.5/plugins/volume_details/intl/ja/cryptobox-server-feature-volume_details.po create mode 100644 v0.3.4.5/plugins/volume_details/intl/nl/cryptobox-server-feature-volume_details.po create mode 100644 v0.3.4.5/plugins/volume_details/intl/pl/cryptobox-server-feature-volume_details.po create mode 100644 v0.3.4.5/plugins/volume_details/intl/pt/cryptobox-server-feature-volume_details.po create mode 100644 v0.3.4.5/plugins/volume_details/intl/ru/cryptobox-server-feature-volume_details.po create mode 100644 v0.3.4.5/plugins/volume_details/intl/sl/cryptobox-server-feature-volume_details.po create mode 100644 v0.3.4.5/plugins/volume_details/intl/sv/cryptobox-server-feature-volume_details.po create mode 100644 v0.3.4.5/plugins/volume_details/intl/ur/cryptobox-server-feature-volume_details.po create mode 100644 v0.3.4.5/plugins/volume_details/language.hdf create mode 100644 v0.3.4.5/plugins/volume_details/plugin_icon.gif create mode 100644 v0.3.4.5/plugins/volume_details/plugin_icon.png create mode 100644 v0.3.4.5/plugins/volume_details/unittests.py create mode 100644 v0.3.4.5/plugins/volume_details/volume_details.cs create mode 100644 v0.3.4.5/plugins/volume_details/volume_details.py create mode 100644 v0.3.4.5/plugins/volume_format_fs/intl/cryptobox-server-feature-volume_format_fs.pot create mode 100644 v0.3.4.5/plugins/volume_format_fs/intl/cs/cryptobox-server-feature-volume_format_fs.po create mode 100644 v0.3.4.5/plugins/volume_format_fs/intl/da/cryptobox-server-feature-volume_format_fs.po create mode 100644 v0.3.4.5/plugins/volume_format_fs/intl/de/cryptobox-server-feature-volume_format_fs.po create mode 100644 v0.3.4.5/plugins/volume_format_fs/intl/en/cryptobox-server-feature-volume_format_fs.po create mode 100644 v0.3.4.5/plugins/volume_format_fs/intl/es/cryptobox-server-feature-volume_format_fs.po create mode 100644 v0.3.4.5/plugins/volume_format_fs/intl/fi/cryptobox-server-feature-volume_format_fs.po create mode 100644 v0.3.4.5/plugins/volume_format_fs/intl/fr/cryptobox-server-feature-volume_format_fs.po create mode 100644 v0.3.4.5/plugins/volume_format_fs/intl/hu/cryptobox-server-feature-volume_format_fs.po create mode 100644 v0.3.4.5/plugins/volume_format_fs/intl/it/cryptobox-server-feature-volume_format_fs.po create mode 100644 v0.3.4.5/plugins/volume_format_fs/intl/ja/cryptobox-server-feature-volume_format_fs.po create mode 100644 v0.3.4.5/plugins/volume_format_fs/intl/nl/cryptobox-server-feature-volume_format_fs.po create mode 100644 v0.3.4.5/plugins/volume_format_fs/intl/pl/cryptobox-server-feature-volume_format_fs.po create mode 100644 v0.3.4.5/plugins/volume_format_fs/intl/pt/cryptobox-server-feature-volume_format_fs.po create mode 100644 v0.3.4.5/plugins/volume_format_fs/intl/ru/cryptobox-server-feature-volume_format_fs.po create mode 100644 v0.3.4.5/plugins/volume_format_fs/intl/sl/cryptobox-server-feature-volume_format_fs.po create mode 100644 v0.3.4.5/plugins/volume_format_fs/intl/sv/cryptobox-server-feature-volume_format_fs.po create mode 100644 v0.3.4.5/plugins/volume_format_fs/intl/ur/cryptobox-server-feature-volume_format_fs.po create mode 100644 v0.3.4.5/plugins/volume_format_fs/language.hdf create mode 100644 v0.3.4.5/plugins/volume_format_fs/plugin_icon.gif create mode 100644 v0.3.4.5/plugins/volume_format_fs/plugin_icon.png create mode 100644 v0.3.4.5/plugins/volume_format_fs/unittests.py create mode 100644 v0.3.4.5/plugins/volume_format_fs/volume_format.cs create mode 100644 v0.3.4.5/plugins/volume_format_fs/volume_format_fs.py create mode 100644 v0.3.4.5/plugins/volume_format_fs/volume_format_luks.cs create mode 100644 v0.3.4.5/plugins/volume_mount/intl/cryptobox-server-feature-volume_mount.pot create mode 100644 v0.3.4.5/plugins/volume_mount/intl/cs/cryptobox-server-feature-volume_mount.po create mode 100644 v0.3.4.5/plugins/volume_mount/intl/da/cryptobox-server-feature-volume_mount.po create mode 100644 v0.3.4.5/plugins/volume_mount/intl/de/cryptobox-server-feature-volume_mount.po create mode 100644 v0.3.4.5/plugins/volume_mount/intl/en/cryptobox-server-feature-volume_mount.po create mode 100644 v0.3.4.5/plugins/volume_mount/intl/es/cryptobox-server-feature-volume_mount.po create mode 100644 v0.3.4.5/plugins/volume_mount/intl/fi/cryptobox-server-feature-volume_mount.po create mode 100644 v0.3.4.5/plugins/volume_mount/intl/fr/cryptobox-server-feature-volume_mount.po create mode 100644 v0.3.4.5/plugins/volume_mount/intl/hu/cryptobox-server-feature-volume_mount.po create mode 100644 v0.3.4.5/plugins/volume_mount/intl/it/cryptobox-server-feature-volume_mount.po create mode 100644 v0.3.4.5/plugins/volume_mount/intl/ja/cryptobox-server-feature-volume_mount.po create mode 100644 v0.3.4.5/plugins/volume_mount/intl/nl/cryptobox-server-feature-volume_mount.po create mode 100644 v0.3.4.5/plugins/volume_mount/intl/pl/cryptobox-server-feature-volume_mount.po create mode 100644 v0.3.4.5/plugins/volume_mount/intl/pt/cryptobox-server-feature-volume_mount.po create mode 100644 v0.3.4.5/plugins/volume_mount/intl/ru/cryptobox-server-feature-volume_mount.po create mode 100644 v0.3.4.5/plugins/volume_mount/intl/sl/cryptobox-server-feature-volume_mount.po create mode 100644 v0.3.4.5/plugins/volume_mount/intl/sv/cryptobox-server-feature-volume_mount.po create mode 100644 v0.3.4.5/plugins/volume_mount/intl/ur/cryptobox-server-feature-volume_mount.po create mode 100644 v0.3.4.5/plugins/volume_mount/language.hdf create mode 100644 v0.3.4.5/plugins/volume_mount/plugin_icon.gif create mode 100644 v0.3.4.5/plugins/volume_mount/plugin_icon.png create mode 100644 v0.3.4.5/plugins/volume_mount/unittests.py create mode 100644 v0.3.4.5/plugins/volume_mount/volume_mount.cs create mode 100644 v0.3.4.5/plugins/volume_mount/volume_mount.py create mode 100644 v0.3.4.5/plugins/volume_mount/volume_status.cs create mode 100644 v0.3.4.5/plugins/volume_mount/volume_umount.cs create mode 100644 v0.3.4.5/plugins/volume_props/intl/cryptobox-server-feature-volume_props.pot create mode 100644 v0.3.4.5/plugins/volume_props/intl/cs/cryptobox-server-feature-volume_props.po create mode 100644 v0.3.4.5/plugins/volume_props/intl/da/cryptobox-server-feature-volume_props.po create mode 100644 v0.3.4.5/plugins/volume_props/intl/de/cryptobox-server-feature-volume_props.po create mode 100644 v0.3.4.5/plugins/volume_props/intl/en/cryptobox-server-feature-volume_props.po create mode 100644 v0.3.4.5/plugins/volume_props/intl/es/cryptobox-server-feature-volume_props.po create mode 100644 v0.3.4.5/plugins/volume_props/intl/fi/cryptobox-server-feature-volume_props.po create mode 100644 v0.3.4.5/plugins/volume_props/intl/fr/cryptobox-server-feature-volume_props.po create mode 100644 v0.3.4.5/plugins/volume_props/intl/hu/cryptobox-server-feature-volume_props.po create mode 100644 v0.3.4.5/plugins/volume_props/intl/it/cryptobox-server-feature-volume_props.po create mode 100644 v0.3.4.5/plugins/volume_props/intl/ja/cryptobox-server-feature-volume_props.po create mode 100644 v0.3.4.5/plugins/volume_props/intl/nl/cryptobox-server-feature-volume_props.po create mode 100644 v0.3.4.5/plugins/volume_props/intl/pl/cryptobox-server-feature-volume_props.po create mode 100644 v0.3.4.5/plugins/volume_props/intl/pt/cryptobox-server-feature-volume_props.po create mode 100644 v0.3.4.5/plugins/volume_props/intl/ru/cryptobox-server-feature-volume_props.po create mode 100644 v0.3.4.5/plugins/volume_props/intl/sl/cryptobox-server-feature-volume_props.po create mode 100644 v0.3.4.5/plugins/volume_props/intl/sv/cryptobox-server-feature-volume_props.po create mode 100644 v0.3.4.5/plugins/volume_props/intl/ur/cryptobox-server-feature-volume_props.po create mode 100644 v0.3.4.5/plugins/volume_props/language.hdf create mode 100644 v0.3.4.5/plugins/volume_props/plugin_icon.gif create mode 100644 v0.3.4.5/plugins/volume_props/plugin_icon.png create mode 100644 v0.3.4.5/plugins/volume_props/unittests.py create mode 100644 v0.3.4.5/plugins/volume_props/volume_properties.cs create mode 100644 v0.3.4.5/plugins/volume_props/volume_props.py create mode 100644 v0.3.4.5/plugins/volume_rename/intl/cryptobox-server-feature-volume_rename.pot create mode 100644 v0.3.4.5/plugins/volume_rename/intl/cs/cryptobox-server-feature-volume_rename.po create mode 100644 v0.3.4.5/plugins/volume_rename/intl/da/cryptobox-server-feature-volume_rename.po create mode 100644 v0.3.4.5/plugins/volume_rename/intl/de/cryptobox-server-feature-volume_rename.po create mode 100644 v0.3.4.5/plugins/volume_rename/intl/en/cryptobox-server-feature-volume_rename.po create mode 100644 v0.3.4.5/plugins/volume_rename/intl/es/cryptobox-server-feature-volume_rename.po create mode 100644 v0.3.4.5/plugins/volume_rename/intl/fi/cryptobox-server-feature-volume_rename.po create mode 100644 v0.3.4.5/plugins/volume_rename/intl/fr/cryptobox-server-feature-volume_rename.po create mode 100644 v0.3.4.5/plugins/volume_rename/intl/hu/cryptobox-server-feature-volume_rename.po create mode 100644 v0.3.4.5/plugins/volume_rename/intl/it/cryptobox-server-feature-volume_rename.po create mode 100644 v0.3.4.5/plugins/volume_rename/intl/ja/cryptobox-server-feature-volume_rename.po create mode 100644 v0.3.4.5/plugins/volume_rename/intl/nl/cryptobox-server-feature-volume_rename.po create mode 100644 v0.3.4.5/plugins/volume_rename/intl/pl/cryptobox-server-feature-volume_rename.po create mode 100644 v0.3.4.5/plugins/volume_rename/intl/pt/cryptobox-server-feature-volume_rename.po create mode 100644 v0.3.4.5/plugins/volume_rename/intl/ru/cryptobox-server-feature-volume_rename.po create mode 100644 v0.3.4.5/plugins/volume_rename/intl/sl/cryptobox-server-feature-volume_rename.po create mode 100644 v0.3.4.5/plugins/volume_rename/intl/sv/cryptobox-server-feature-volume_rename.po create mode 100644 v0.3.4.5/plugins/volume_rename/intl/ur/cryptobox-server-feature-volume_rename.po create mode 100644 v0.3.4.5/plugins/volume_rename/language.hdf create mode 100644 v0.3.4.5/plugins/volume_rename/unittests.py create mode 100644 v0.3.4.5/plugins/volume_rename/volume_rename.cs create mode 100644 v0.3.4.5/plugins/volume_rename/volume_rename.py create mode 100755 v0.3.4.5/scripts/fetch_po_files.sh create mode 100755 v0.3.4.5/scripts/show_TODO.sh create mode 100755 v0.3.4.5/scripts/update_po_files.py create mode 100755 v0.3.4.5/scripts/userdocexport.sh create mode 100644 v0.3.4.5/setup.py create mode 100644 v0.3.4.5/src/cryptobox/__init__.py create mode 100644 v0.3.4.5/src/cryptobox/core/__init__.py create mode 100644 v0.3.4.5/src/cryptobox/core/container.py create mode 100644 v0.3.4.5/src/cryptobox/core/exceptions.py create mode 100644 v0.3.4.5/src/cryptobox/core/main.py create mode 100644 v0.3.4.5/src/cryptobox/core/settings.py create mode 100644 v0.3.4.5/src/cryptobox/core/tools.py create mode 100644 v0.3.4.5/src/cryptobox/plugins/__init__.py create mode 100644 v0.3.4.5/src/cryptobox/plugins/base.py create mode 100644 v0.3.4.5/src/cryptobox/plugins/manage.py create mode 100644 v0.3.4.5/src/cryptobox/tests/__init__.py create mode 100644 v0.3.4.5/src/cryptobox/tests/base.py create mode 100755 v0.3.4.5/src/cryptobox/tests/test.cryptobox.py create mode 100755 v0.3.4.5/src/cryptobox/tests/test.cryptoboxtools.py create mode 100755 v0.3.4.5/src/cryptobox/tests/test.plugins.py create mode 100755 v0.3.4.5/src/cryptobox/tests/test.websites.py create mode 100644 v0.3.4.5/src/cryptobox/tests/tools.py create mode 100644 v0.3.4.5/src/cryptobox/web/__init__.py create mode 100644 v0.3.4.5/src/cryptobox/web/dataset.py create mode 100644 v0.3.4.5/src/cryptobox/web/languages.py create mode 100644 v0.3.4.5/src/cryptobox/web/sites.py create mode 100644 v0.3.4.5/src/pylintrc create mode 100644 v0.3.4.5/stuff/debian-package.txt create mode 100644 v0.3.4.5/stuff/known_problems create mode 100644 v0.3.4.5/stuff/language_specification.txt create mode 100644 v0.3.4.5/stuff/pootle-updates.txt create mode 100644 v0.3.4.5/stuff/uml-howto.txt create mode 100644 v0.3.4.5/stuff/upload_and_release-policy.txt create mode 100644 v0.3.4.5/templates/access_denied.cs create mode 100644 v0.3.4.5/templates/empty.cs create mode 100644 v0.3.4.5/templates/footer.cs create mode 100644 v0.3.4.5/templates/header.cs create mode 100644 v0.3.4.5/templates/language.hdf create mode 100644 v0.3.4.5/templates/macros.cs create mode 100644 v0.3.4.5/templates/main.cs create mode 100644 v0.3.4.5/templates/show_volume_footer.cs create mode 100644 v0.3.4.5/templates/show_volume_header.cs create mode 100644 v0.3.4.5/templates/volume_busy.cs create mode 100644 v0.3.4.5/templates/volume_plugins.cs create mode 100644 v0.3.4.5/www-data/background_frame_corner.png create mode 100644 v0.3.4.5/www-data/background_frame_top.png create mode 100644 v0.3.4.5/www-data/backpane_left.png create mode 100644 v0.3.4.5/www-data/backpane_left_top.gif create mode 100644 v0.3.4.5/www-data/backpane_left_top.png create mode 100644 v0.3.4.5/www-data/backpane_right.png create mode 100644 v0.3.4.5/www-data/backpane_right_top.gif create mode 100644 v0.3.4.5/www-data/backpane_right_top.png create mode 100644 v0.3.4.5/www-data/backpane_top.png create mode 100644 v0.3.4.5/www-data/cbx-text-logo1.png create mode 100644 v0.3.4.5/www-data/cbx-text-logo2.png create mode 100644 v0.3.4.5/www-data/cryptobox.css create mode 100644 v0.3.4.5/www-data/dialog-error_tango.gif create mode 100644 v0.3.4.5/www-data/dialog-error_tango.png create mode 100644 v0.3.4.5/www-data/dialog-information_tango.gif create mode 100644 v0.3.4.5/www-data/dialog-information_tango.png create mode 100644 v0.3.4.5/www-data/dialog-warning_tango.gif create mode 100644 v0.3.4.5/www-data/dialog-warning_tango.png create mode 100644 v0.3.4.5/www-data/environment_warning_background.png create mode 100644 v0.3.4.5/www-data/favicon.ico create mode 100644 v0.3.4.5/www-data/footer_line.png create mode 100644 v0.3.4.5/www-data/help_background.png create mode 100644 v0.3.4.5/www-data/icon_background_active.png create mode 100644 v0.3.4.5/www-data/icon_background_active_060.png create mode 100644 v0.3.4.5/www-data/icon_background_active_080.png create mode 100644 v0.3.4.5/www-data/icon_background_active_100.png create mode 100644 v0.3.4.5/www-data/icon_background_active_256.png create mode 100644 v0.3.4.5/www-data/icon_background_active_orange_100.png create mode 100644 v0.3.4.5/www-data/icon_background_passive_060.png create mode 100644 v0.3.4.5/www-data/icon_background_passive_080.png create mode 100644 v0.3.4.5/www-data/icon_background_passive_100.png create mode 100644 v0.3.4.5/www-data/icon_background_passive_256.png create mode 100644 v0.3.4.5/www-data/icon_get_help.gif create mode 100644 v0.3.4.5/www-data/icon_get_help.png create mode 100644 v0.3.4.5/www-data/icon_get_help_disable.gif create mode 100644 v0.3.4.5/www-data/icon_get_help_disable.png create mode 100644 v0.3.4.5/www-data/list.gif create mode 100644 v0.3.4.5/www-data/register_active.gif create mode 100644 v0.3.4.5/www-data/register_active.png create mode 100644 v0.3.4.5/www-data/register_passive.gif create mode 100644 v0.3.4.5/www-data/register_passive.png create mode 100644 v0.3.4.5/www-data/screenshots/de_config.png create mode 100644 v0.3.4.5/www-data/screenshots/de_init.png create mode 100644 v0.3.4.5/www-data/screenshots/de_mount.png create mode 100644 v0.3.4.5/www-data/screenshots/de_w98_login.png create mode 100644 v0.3.4.5/www-data/screenshots/de_w98_network_drive.png create mode 100644 v0.3.4.5/www-data/screenshots/de_w98_not_logged_in.png create mode 100644 v0.3.4.5/www-data/screenshots/en_config.png create mode 100644 v0.3.4.5/www-data/screenshots/en_mount.png create mode 100644 v0.3.4.5/www-data/screenshots/en_w98_login.png create mode 100644 v0.3.4.5/www-data/screenshots/en_w98_network_drive.png create mode 100644 v0.3.4.5/www-data/screenshots/en_w98_not_logged_in.png create mode 100644 v0.3.4.5/www-data/screenshots/v0.3/activate_volume.png create mode 100644 v0.3.4.5/www-data/screenshots/v0.3/system_preferences.png create mode 100644 v0.3.4.5/www-data/smile.png create mode 100644 v0.3.4.5/www-data/smile4.png create mode 100644 v0.3.4.5/www-data/volume_active_crypto.gif create mode 100644 v0.3.4.5/www-data/volume_active_crypto.png create mode 100644 v0.3.4.5/www-data/volume_active_crypto_busy.gif create mode 100644 v0.3.4.5/www-data/volume_active_crypto_busy.png create mode 100644 v0.3.4.5/www-data/volume_active_plain.gif create mode 100644 v0.3.4.5/www-data/volume_active_plain.png create mode 100644 v0.3.4.5/www-data/volume_active_plain_busy.gif create mode 100644 v0.3.4.5/www-data/volume_active_plain_busy.png create mode 100644 v0.3.4.5/www-data/volume_passive_crypto.gif create mode 100644 v0.3.4.5/www-data/volume_passive_crypto.png create mode 100644 v0.3.4.5/www-data/volume_passive_crypto_busy.gif create mode 100644 v0.3.4.5/www-data/volume_passive_crypto_busy.png create mode 100644 v0.3.4.5/www-data/volume_passive_plain.gif create mode 100644 v0.3.4.5/www-data/volume_passive_plain.png create mode 100644 v0.3.4.5/www-data/volume_passive_plain_busy.gif create mode 100644 v0.3.4.5/www-data/volume_passive_plain_busy.png create mode 100644 v0.3.4.5/www-data/volume_property_frame.png diff --git a/v0.3.4.5/LICENSE b/v0.3.4.5/LICENSE new file mode 100644 index 0000000..b7b5f53 --- /dev/null +++ b/v0.3.4.5/LICENSE @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 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 + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/v0.3.4.5/MANIFEST.in b/v0.3.4.5/MANIFEST.in new file mode 100644 index 0000000..5eb8cfe --- /dev/null +++ b/v0.3.4.5/MANIFEST.in @@ -0,0 +1,15 @@ +include README* +include LICENSE +include changelog +include copyright +graft man +graft scripts +graft doc +graft conf-examples +graft event-scripts +graft www-data +graft templates +graft lang +graft plugins +graft intl +prune package.exclude diff --git a/v0.3.4.5/README b/v0.3.4.5/README new file mode 100644 index 0000000..a6b26d7 --- /dev/null +++ b/v0.3.4.5/README @@ -0,0 +1,195 @@ +******************************************** +* CryptoBox v0.3.xx * +******************************************** + +$Id$ + +This file describes the webserver CryptoBox. +The CryptoBox enables you to control the plaintext or encrypted harddisks of +your server via a webinterface. +Read on if you want to install the CryptoBox-server package on your computer. + +For more information, see the website: + http://cryptobox.org + +Table of contents: + 1) Requirements + 2) Installation + 3) Setup + 4) Usage + 5) Data access + 6) Development + 7) Acknowledgements + 8) Licence + +-------------------------------------------- + +1) Requirements + - Linux 2.6 + - super (to selectively gain root privileges) + - Python 2.4 + - some python packages: + clearsilver 0.10 for python + python-configobj 4.x + cherrypy 2.x + + +2) Installation +For Debian, Ubuntu and other derivates you should use the debian package: + see http://systemausfall.org/toolforge/debian/ + +Please follow the /usr/share/doc/cryptobox-server/README.Debian for +any special steps regarding Debian. + +There are currently no official rpm packages of the CryptoBox. + +For source installation follow these steps: + Get the source: + http://cryptobox.org/download + + Extract tarball and change to the new directory: + tar xzf cryptobox-0.?.?.tar.gz + + Install the program: + python setup.by install + +The installed pyhton modules can be found in your local python installation directory. +The default location should be: + /usr/lib/python2.4/site-packages/cryptobox/ +The data files are (by default) installed to: + /usr/share/cryptobox-server/ + +As some actions of the cryptobox require root privileges, you have to add the +following line to /etc/super.tab: + CryptoBoxRootActions /usr/bin/CryptoBoxRootActions cryptobox +The script /usr/bin/CryptoBoxRootActions is used to execute all actions +requiring root privileges. Please check it to make sure, that your system will +not get compromised. + + +3) Setup + + a) Start at bootup + Set NO_START in /etc/default/cryptobox-server to "0". + The CryptoBox webserver will get started by its runlevel control script + after bootup. + + b) Define managed devices + You may restrict which blockdevices should be accessible to the CryptoBox. + Simply set [Main]->AllowedDevices in /etc/cryptobox-server/cryptobox.conf + to a comma separated list of device prefixes: e.g. /dev/sd gives access to + all SCSI devices, while /dev/hda3 restricts it to this single partition. + The user executing the webserver (by default: 'cryptobox') must have write + access to these devices. Usually the cryptobox user is member of the 'disk' + group. This gives control over most devices. + Be careful with this setting, as you may expose important data to public + read and write access. + + c) Listening port and interface + By default, the CryptoBox webserver listens to tcp port 8080 on all network + interfaces. You can change this setting in /etc/default/cryptobox-server. + Also take a look at your firewall settings. + + d) Disable plugins + The CryptoBox contains a lot of plugins. As some of them could expose + unwanted features to your users, you should carefully select which plugins + to disable. + Quite likely candidates for disabling are: + - shutdown: poweroff or reboot the computer + - network: change IP, gateway or dns settings of the server + - partition: partition blockdevices + - volume_format_fs: format a disk/partition (plaintext/encrypted) + Take a look at /usr/share/cryptobox-server/plugins for the list of + other plugins. + The setting [Main]->DisabledPlugins in /etc/cryptobox-server/cryptobox.conf + is a comma separated list of plugin names. Capitalization is important! + + e) Separate configuration partition + The CryptoBox webserver requires a writeable directory for proper + operation. If your root filesystem is not writeable (e.g. booting from a + cdrom, read-only mounted flash memory, ...) you may use a seperated + partition to store runtime settings. The CryptoBox will automatically + creates it, when you use partition one of your disks with its interface. + The setting [Main]->UseConfigPartition (see + /etc/cryptobox-server/cryptobox.conf) defines, whether you want to use a + separate partition (value "1") or if you want to store your runtime + settings in the root filesystem (typically below + /var/cache/cryptobox-server). + + f) Samba/WebDAV/NFS/??? integration (aka. event script handling) + The CryptoBox allows you to add event handling scripts for most of the + interesting events: bootup/shutdown of the webserver and mount/umount + of single volumes. + If you want to automatically publish your mounted volumes with samba + or similar fileservers, then you should take a closer look at the + example scripts for samba and apache-webdav in + /usr/share/doc/cryptobox-server/event-scripts. + You may also just publish the mount directory of the CryptoBox. This + will expose all mounted volumes very easily. Review the configuration + file for the setting [Locations]->MountParentDir. + + g) Take a close look at the configuration file to check all other options + before you start the CryptoBox webserver. + + +4) Usage +Use your favourite web browser to go to http://localhost:8080 and browse the +webinterface of the CryptoBox. +Some parts of the interface are restricted to administrative access. The +default access combination is the user 'admin' and the password 'admin'. Please +change this setting immediately. +The plugin 'user_manager' allows you to add users and to change passwords. +The plugin 'plugin_manager' lets you configure, which plugins require +administrative authentication. + + +5) Data access +Before you can access your plaintext or encrypted data on a volume, you have to +open it. To accomplish this, you have to go to the webinterface, select the +appropriate volume and click on "Open volume" in the "Activation" tab. + +If you are running the CryptoBox locally, then you can access all open volumes +below the 'MountDir' as specified in the configuration file +(/etc/cryptobox-server/cryptobox.conf). The default mount location is +/var/cache/cryptobox/mnt. + +If the CryptoBox package is running on a networking server, then you have to +configure your favourite fileserver (e.g. samba, webdav, nfs, ftp, ...) to +publish the subdirectories of the 'MountDir' (see above). +If you want to customize the publishing of volumes, then you may use the +event script feature fo the CryptoBox. See event-scripts/README for details. + + +6) Development +bug reports: please use our issue tracker + https://systemausfall.org/trac/cryptobox/newticket + +email: + info@cryptobox.org + +The CryptoBox project is mainly driven by sense.lab (http://senselab.org). + + +7) Acknowledgements +Besides the core development team, these people helped a lot (in order of appearance): +Clavdia Horvat, Tadej Brce & Dušan Rebolj - Slovenian translation +rike - French translation +kinneko - Japanese translation +Fabrizio Tarizzo - Italian translation +Andrzej S. Kaznowski - Polish translation +Fadrique - Spanish translation +Michiel van Dijk - Dutch translation +Raimar - the blender dragon +Gilles Accad - French translation +ASpr - Russian translation + +We also want to thank the numerous developers of the Free Software, the +CryptoBox depends on and that was used in development. + + +8) License +The code is licensed under the GPL v2.0 or above. +The documentation and all graphics are licenced under "Creative Commons Attribution +Share-Alike 2.5" (http://creativecommons.org/licenses/by-sa/2.5/). +See the file 'copyright' for details. + diff --git a/v0.3.4.5/README.davfs b/v0.3.4.5/README.davfs new file mode 100644 index 0000000..6687d23 --- /dev/null +++ b/v0.3.4.5/README.davfs @@ -0,0 +1,47 @@ +Integration of apach2 as a (Web)DAV server into the CryptoBox + +This file describes how to expose the volumes that are managed by the CryptoBox +through WebDAV shares. +Apache2 including the dav_fs module is the most common server for the WebDAV +filesystem. The following description will focus on this server. + +First you have to install apache2 and the dav_fs module. +Use your favourite package manager to install them. +(Note for debian: the dav_fs module is part of the apache2-common package. +Just activate the module via 'a2enmod dav_fs'.) + +There are two different ways to do use dav shares: + + +A) one share for all volumes together + +Just create a file with the following lines to your /etc/apache2/conf.d directory: + Alias "/cryptobox" "/var/cache/cryptobox-server/mnt" + + Dav filesystem + + +Reload the new apache2 configuration by calling: + invoke-rc.d apache2 reload + + + +B) one share for each volume + +Copy the example event script +/usr/share/doc/cryptobox-server/event-script/apache2_dav to +/etc/cryptobox-server/events.d/apache2_dav. This event handler will add and remove +shares whenever a volume is mounted or unmounted via the CryptoBox webinterface. + +Copy the file /usr/share/doc/cryptobox-server/conf-examples/apache2_dav.conf to +/etc/apache2/conf.d/apache2_dav. + +Create a directory for the apache share config files: + mkdir -p /var/cache/cryptobox-server/apache2_dav.conf.d + +Chown it to the cryptobox user: + chown cryptobox /var/cache/cryptobox-server/apache2_dav.conf.d + +Reload the new apache2 configuration by calling: + invoke-rc.d apache2 reload + diff --git a/v0.3.4.5/README.proxy b/v0.3.4.5/README.proxy new file mode 100644 index 0000000..c8a09c0 --- /dev/null +++ b/v0.3.4.5/README.proxy @@ -0,0 +1,66 @@ +Running the CryptoBox behind a proxy + +This describes how to setup the CryptoBox webserver behind a proxy webserver +(e.g.: apache or lighttpd). + + + +-=-=-=- apache in front of the cryptobox-server (cherrypy) -=-=-=- + + +The following section describes how to configure an apache2 webserver to +forward requests to the cherrypy server of the CryptoBox. + + +1) Required modules + - proxy + - header + Both module should be part of usual default installations of apache2. + Activate these modules. For debian you should run: a2enmod MOD_NAME + + +2) Configuration directives + The following example should help you to create your own proxy configuration + for apache2. + + ProxyRequests Off + + + Order Deny,Allow + Allow from all + + + + ProxyPass http://localhost:8080/ + ProxyPassReverse http://localhost:8080/ + RequestHeader set CryptoBox-Location /cryptobox + # uncomment the next line for ssl-enabled virtualhosts + RequestHeader set X-SSL-Request 1 + + + Now you should restart apache2. + + +3) Testing + Now you should point your webserver to the proxy host and check if + the CryptoBox layout ist displayed properly. + + + +-=-=-=- lighttpd in front of the cryptobox-server (cherrypy) -=-=-=- + + +In this section we do the same as above, but with lighttpd. + +Your lighttpd config should contain something like this: + + # selecting modules + server.modules = ( "mod_scgi" ) + + scgi.server = ( "/cryptobox" => + (( "host" => "127.0.0.1", + "port" => 8080, + "check-local" => "disable" + )) + ) + diff --git a/v0.3.4.5/README.samba b/v0.3.4.5/README.samba new file mode 100644 index 0000000..5d87185 --- /dev/null +++ b/v0.3.4.5/README.samba @@ -0,0 +1,31 @@ +Integration of samba into the CryptoBox + +This file describes how to expose the volumes that are managed by the CryptoBox +through samba shares. + +There are two different ways to do this: + + +A) one share for all volumes together + +Just add the following lines to your /etc/samba/smb.conf: + [cryptobox] + path = /var/cache/cryptobox-server/mnt + browseable = yes + read only = no + guest ok = yes + +Reload the new samba configuration by calling: + invoke-rc.d samba reload + + +B) one share for each volume + +Copy the example event script /usr/share/doc/cryptobox-server/event-scripts/samba +to /etc/cryptobox-server/events.d/samba and make sure it is executable +by root. This event handler will add and remove shares whenever a volume is mounted +or unmounted via the CryptoBox webinterface. + +Add the following line to your /etc/samba/smb.conf: + include = /var/cache/cryptobox-server/settings/misc/samba-include.conf + diff --git a/v0.3.4.5/README.ssl b/v0.3.4.5/README.ssl new file mode 100644 index 0000000..7b1c785 --- /dev/null +++ b/v0.3.4.5/README.ssl @@ -0,0 +1,116 @@ +Encrypting the http traffic to the CryptoBox webserver with SSL + +This file describes how to encrypt your connection to the CryptoBox webserver. +This is highly recommended as the encryption password for your data could be +exposed to intruders in your local network otherwise. + +Below you will find detailed descriptions on how to set up an encrypted +connection to the webinterface: + - use the plugin "encrypted_webinterface" + - run the CryptoBox webserver behind an ssl-enabled webserver + - use stunnel or stunnel4 to provide an SSL socket + - use the a proxy server (e.g. pound) + - ... + +At the end of this document you will find some information on how to turn off +SSL detection of the CryptoBox. You should read it, if there is no solution +for your specific setup available or if you are _very_ sure, that you do not +need encrypted http connections. + +------------------------------------------------------------------- + +1) using the plugin 'encrypted_webinterface' + This plugin is disabled by default. You can enable it in your + cryptobox.conf file by removing it from the 'DisabledPlugins' setting. + + The plugin does the following during startup of the CryptoBox: + - create a self-signed X.509 certificate if necessary + - run stunnel4 from port 80 to 443 (https) with this certificate + + Of course, this will not work, if the port 443 is already in use by + another program - in this case, you should better choose one of the + solutions described below. + + Now, you need to point your browser to the URL of the CryptoBox with + 'https' instead of 'http'. Or just follow the "Use encrypted + connection" link that appears, if you use plain http. + + For a finer tuned certifacte follow the steps under "CryptoBox + behind stunnel". + + +------------------------------------------------------------------- + +2) CryptoBox behind an ssl-enabled webserver + Read the documentation of your favourite webserver to learn how to enable + ssl encryption. + + The CryptoBox webserver cannot detect whether the connection is encrypted + or not since it is behind the proxy webserver and does not share its + environment. Thus you have to tell the CryptoBox in the request header + whether the connection is encrypted or not. + + for apache2: + 1) enable the 'headers' module (for debian: "a2enmod headers") + 2) add this line to your ssl-enabled virtualhost: + RequestHeader set X-SSL-Request 1 + 3) restart your webserver + + for lighthttpd: + TODO + + +------------------------------------------------------------------- + +3) CryptoBox behind stunnel (configured manually) + You may want to tunnel the traffic between the cryptobox-server + and your browser. "stunnel" or "stunnel4" are excellent candidates for this job. + + If you do not have an ssl certificate yet, then you should create + one first. On Debian: "apt-get install ssl-cert" and run the following + command (the supplied example openssl.conf file resides in the doc + directory of the cryptobox-server package): + + make-ssl-cert conf-examples/openssl.conf + + In case, that you already have a certificate just run this command: + + stunnel -p -r localhost:80 -d 443 + + And maybe you want to add the last command to your bootup scripts. + + +------------------------------------------------------------------- + +4) CryptoBox behind a proxy server + As there are many proxy servers around, we cannot describe all of them. As + an example, we will explain the setup of the load-balancing proxy 'pound' + (http://www.apsis.ch/pound/). + + Just add the following lines to you /etc/pound/pound.cfg: + # Remove the X-SSL-Request header from incoming + # connections to prevent hackers from spoofing it + HeadRemove "X-SSL-Request" + + # Add an extra header to tell the CryptoBox that + # the external connection is secure + HTTPSHeaders 0 "X-SSL-Request: 1" + + This example is taken from: + http://jamesthornton.com/writing/openacs-pound.html + + +------------------------------------------------------------------- + +5) Problems with SSL detection? + If the CryptoBox continues to complain about the unencrypted connection, even + if it runs behind an ssl-enabled webserver or behind stunnel, then you can do + one of the following things: + - disable the plugin 'encypted_webinterface' in the cryptobox.conf file + if you do not need it + - set the request header value "X-SSL-Request" to "1" (the digit 'one') + - set the environment setting "HTTPS" to a non-empty value during the + startup of the CryptoBox webserver. Maybe + /etc/default/cryptobox-server would be the right place for this. + - let the CryptoBox webserver listen to port 443 + diff --git a/v0.3.4.5/bin/CryptoBoxRootActions b/v0.3.4.5/bin/CryptoBoxRootActions new file mode 100755 index 0000000..0f2afc8 --- /dev/null +++ b/v0.3.4.5/bin/CryptoBoxRootActions @@ -0,0 +1,516 @@ +#!/usr/bin/env python +# +# Copyright 2006 sense.lab e.V. +# +# This file is part of the CryptoBox. +# +# The CryptoBox 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 CryptoBox 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 the CryptoBox; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + + +"""module for executing the programs, that need root privileges + +Syntax: + - TODO + +this script will always return with an exitcode 0 (true), +if "check" is the only argument +""" + +__revision__ = "$Id" + +import os +import sys +import subprocess +import pwd +import grp +import types + +allowedProgs = { + "sfdisk": "/sbin/sfdisk", + "cryptsetup": "/sbin/cryptsetup", + "mount": "/bin/mount", + "umount": "/bin/umount", + "blkid": "/sbin/blkid", + } + +## this line is necessary for running unittests or playing around with a local +## svn working copy - otherwise the security checks would be too strict +OVERRIDE_FILECHECK = False + +DEV_TYPES = { "pipe":1, "char":2, "dir":4, "block":6, "file":8, "link":10, "socket":12} +EVENT_MARKER = '_event_scripts_' +## use this string as device name if you want to mount a ramdisk +MAGIC_TMPFS = "_tmpfs_" + + +def checkIfFileIsSafe(fname): + """check if the file and its parents are only writeable for root""" + ## the override setting may be turned off temporarily to allow unittests + if OVERRIDE_FILECHECK: + return True + ## if the calling user id is 0 (root), then we do not have to check this, + ## as root would be allowed to do this anyway + ## this eases testing with a not-installed working copy in a uml environment + if getCallingUserInfo()[1] == 0: + return True + props = os.stat(fname) + ## check if it is owned by non-root + if props.st_uid != 0: return False + ## check group-write permission if gid is not zero + if (props.st_gid != 0) and (props.st_mode % 32 / 16 > 0): return False + ## check if it is world-writeable + if props.st_mode % 4 / 2 > 0: return False + ## are we at root-level (directory-wise)? If yes, then we are ok ... + if fname == os.path.sep: return True + ## check if the parent directory is ok - recursively :) + return checkIfFileIsSafe(os.path.dirname(os.path.abspath(fname))) + + +def checkIfPluginIsValid(plugin): + import imp + try: + x = imp.load_source("cbox_plugin", plugin) + except (SyntaxError, IOError): + return False + try: + if getattr(x, "PLUGIN_TYPE") == "cryptobox": + return True + else: + return False + except AttributeError: + return False + + +def checkIfEventScriptIsValid(plugin): + event_dir = os.path.dirname(plugin) + if os.path.exists(os.path.join(event_dir, EVENT_MARKER)): + return True + else: + return False + + +def call_plugin(args): + """check if the plugin may be called - and do it finally ...""" + plugin = os.path.abspath(args[0]) + del args[0] + ## check existence and if it is executable + if not os.access(plugin, os.X_OK): + raise Exception, "could not find executable plugin (%s)" % plugin + ## check if the plugin (and its parents) are only writeable for root + ## this can be overridden by OVERRIDE_FILECHECK + if not checkIfFileIsSafe(plugin): + raise Exception, "the plugin (%s) is not safe - check its " % plugin \ + + "(and its parents') permissions" + ## check if the plugin is a python program, that is marked as a cryptobox plugin + if not checkIfPluginIsValid(plugin): + raise Exception, "the plugin (%s) is not a correctly marked python script" % plugin + args.insert(0, plugin) + proc = subprocess.Popen( + shell = False, + args = args) + proc.wait() + return proc.returncode == 0 + + +def call_event(args): + """check if the event script may be called - and do it finally ...""" + event = os.path.abspath(args[0]) + del args[0] + ## check existence and if it is executable + if not os.access(event, os.X_OK): + raise Exception, "could not find executable event script (%s)" % event + ## check if the script is valid (the marker file must be in the same directory) + if not checkIfEventScriptIsValid(event): + raise Exception, "the event script (%s) does not reside in" % event \ + + "a directory with the marker file (%s) - this " % EVENT_MARKER \ + + "is not allowed due to abuse prevention" + ## check if the event (and its parents) are only writeable for root + if not checkIfFileIsSafe(event): + raise Exception, "the event (%s) is not safe - check its " % event \ + + "(and its parents') permissions" + args.insert(0, event) + proc = subprocess.Popen( + shell = False, + args = args) + proc.wait() + return proc.returncode == 0 + + +def isWriteable(path, force_dev_type=None): + """check if the calling user (not root!) has write access to the device/file + + the real (not the effective) user id is used for the check + additionally the permissions of the default groups of the real uid are checked + it is sufficient, if the device/dir is owned by us + this check works nicely together with "super", as it changes (by default) only + the effective uid (not the real uid) + """ + ## first check, if the device/file exists + if not os.path.exists(path): + sys.stderr.write("%s does not exist!\n" % path) + return False + ## check the type of the path - if necessary + if (not force_dev_type is None) and \ + (force_dev_type != os.stat(path).st_mode % 65536 / 4096): + sys.stderr.write("%s does not have the numeric type '%d'!\n" \ + % (path, force_dev_type)) + return False + ## retrieve the information for the real user id + (trustUserName, trustUID, groupsOfTrustUser) = getCallingUserInfo() + ## are we called by the root user? this would be ok + if trustUID == 0: + return True + ## is the path owned by us? + if os.stat(path)[4] == trustUID: + return True + ## set the default groups of the caller for the check (restore them later) + savedGroups = os.getgroups() + os.setgroups(groupsOfTrustUser) + ## check permissions + result = os.access(path, os.W_OK) and os.access(path, os.R_OK) + ## reset the groups of this process + os.setgroups(savedGroups) + return result + + +def run_cryptsetup(args): + """execute cryptsetup as root + + @args: list of arguments - they will be treated accordingly to the first element + of this list (the action)""" + if not args: raise "WrongArguments", "no action for cryptsetup supplied" + if type(args) != types.ListType: + raise "WrongArguments", "invalid arguments supplied: %s" % (args, ) + try: + action = args[0] + del args[0] + device = None + cmd_args = [] + if action == "luksFormat": + device = args[0]; del args[0] + cmd_args.append(action) + cmd_args.append(device) + elif action == "luksUUID": + device = args[0]; del args[0] + cmd_args.append(action) + cmd_args.append(device) + elif action == "luksOpen": + if len(args) < 2: raise "WrongArguments", "missing arguments" + device = args[0]; del args[0] + destination = args[0]; del args[0] + cmd_args.append(action) + cmd_args.append(device) + cmd_args.append(destination) + elif action == "luksClose": + if len(args) < 1: raise "WrongArguments", "missing arguments" + destination = args[0]; del args[0] + # maybe add a check for the mapped device's permissions? + # dmsetup deps self.device + cmd_args.append(action) + cmd_args.append(destination) + elif action == "luksAddKey": + device = args[0]; del args[0] + cmd_args.append(action) + cmd_args.append(device) + elif action == "luksDelKey": + if len(args) < 2: raise "WrongArguments", "missing arguments" + device = args[0]; del args[0] + cmd_args.insert(-1, action) + cmd_args.insert(-1, device) + elif action == "isLuks": + device = args[0]; del args[0] + cmd_args.append(action) + cmd_args.append(device) + else: raise "WrongArguments", "invalid action supplied: %s" % (action, ) + # check if a device was defined - and check it + if (not device is None) and (not isWriteable(device, DEV_TYPES["block"])): + raise "WrongArguments", "%s is not a writeable block device" % (device, ) + cs_args = [allowedProgs["cryptsetup"]] + cs_args.extend(args) + cs_args.extend(cmd_args) + except (TypeError, IndexError): + raise "WrongArguments", "invalid arguments supplied: %s" % (args, ) + # execute cryptsetup with the given parameters + proc = subprocess.Popen( + shell = False, + args = cs_args) + proc.wait() + ## chown the devmapper block device to the cryptobox user + calling_user = getCallingUserInfo() + if (proc.returncode == 0) and (action == "luksOpen"): + os.chown(os.path.join(os.path.sep, "dev", "mapper", destination), + calling_user[1], calling_user[2][0]) + return proc.returncode == 0 + + +def run_sfdisk(sf_args): + """execute sfdisk for partitioning + + not implemented yet + TODO: this is useless, as it is done in root_actions.py of the partition plugin? + """ + print "ok - you are free to call sfdisk ..." + print " not yet implemented ..." + return True + + +def getFSType(device): + """get the filesystem type of a device""" + proc = subprocess.Popen( + shell = False, + stdout = subprocess.PIPE, + args = [ allowedProgs["blkid"], + "-s", "TYPE", + "-o", "value", + "-c", os.devnull, + "-w", os.devnull, + device]) + (stdout, stderr) = proc.communicate() + if proc.returncode != 0: + return None + return stdout.strip() + + +def run_mount(args): + """execute mount + """ + if not args: raise "WrongArguments", "no destination for mount supplied" + if type(args) != types.ListType: + raise "WrongArguments", "invalid arguments supplied: %s" % (args, ) + try: + device = args[0] + del args[0] + destination = args[0] + del args[0] + ## shall we mount a ramdisk? + is_tmpfs = (device == MAGIC_TMPFS) + # check permissions for the device + if (not is_tmpfs) and (not isWriteable(device, DEV_TYPES["block"])): + raise "WrongArguments", "%s is not a writeable block device" % (device, ) + ## check permissions for the mountpoint + if not isWriteable(destination, DEV_TYPES["dir"]): + raise "WrongArguments", "the mountpoint (%s) is not writeable" \ + % (destination, ) + # check for additional (not allowed) arguments + if len(args) != 0: + raise "WrongArguments", "too many arguments for 'mount': %s" % (args, ) + except TypeError: + raise "WrongArguments", "invalid arguments supplied: %s" % (args, ) + # execute mount with the given parameters + # first overwrite the real uid, as 'mount' wants this to be zero (root) + savedUID = os.getuid() + os.setuid(os.geteuid()) + ## we have to change the permissions of the mounted directory - otherwise it will + ## not be writeable for the cryptobox user + ## for 'vfat' we have to do this during mount + ## for ext2/3 we have to do it afterward + ## first: get the user/group of the target + (trustUserName, trustUID, groupsOfTrustUser) = getUserInfo(savedUID) + trustGID = groupsOfTrustUser[0] + if is_tmpfs: + fsType = "tmpfs" + else: + fsType = getFSType(device) + ## define arguments + if fsType == "vfat": + ## add the "uid/gid" arguments to the mount call + mount_args = [ allowedProgs["mount"], + "-o", "uid=%d,gid=%d,umask=0000" % (trustUID, trustGID), + device, + destination ] + elif is_tmpfs: + mount_args = [ allowedProgs["mount"], + "-t", "tmpfs", + "cryptobox-tmpfs", destination ] + else: + ## all other filesystem types will be handled after mount + mount_args = [ allowedProgs["mount"], device, destination ] + # execute mount + proc = subprocess.Popen( + shell = False, + args = mount_args) + proc.wait() + ## return in case of an error + if proc.returncode != 0: + return False + ## for vfat: we are done + if fsType == "vfat": return True + ## for all other filesystem types: chown the mount directory + try: + os.chown(destination, trustUID, groupsOfTrustUser[0]) + except OSError, errMsg: + sys.stderr.write("could not chown the mount destination (%s) " % destination \ + + "to the specified user (%d/%d): " % (trustUID, groupsOfTrustUser[0]) \ + + "%s/n" % str(errMsg)) + sys.stderr.write("UID: %d\n" % (os.geteuid(),)) + return False + ## BEWARE: it would be nice, if we could restore the previous uid (not euid) but + ## this would also override the euid (see 'man 2 setuid') - any ideas? + return True + + +def run_umount(args): + """execute mount + """ + if not args: raise "WrongArguments", "no mountpoint for umount supplied" + if type(args) != types.ListType: + raise "WrongArguments", "invalid arguments supplied" + try: + destination = args[0] + del args[0] + # check permissions for the destination + if not isWriteable(os.path.dirname(destination), DEV_TYPES["dir"]): + raise "WrongArguments", "the parent of the mountpoint " \ + + "(%s) is not writeable" % (destination, ) + if len(args) != 0: raise "WrongArguments", "umount does not allow arguments" + except TypeError: + raise "WrongArguments", "invalid arguments supplied" + # execute umount with the given parameters + # first overwrite the real uid, as 'umount' wants this to be zero (root) + savedUID = os.getuid() + os.setuid(os.geteuid()) + # execute umount (with the parameter '-l' - lazy umount) + proc = subprocess.Popen( + shell = False, + args = [allowedProgs["umount"], "-l", destination]) + proc.wait() + # restore previous real uid + os.setuid(savedUID) + return proc.returncode == 0 + + +def getCallingUserInfo(): + """return information about the user that was calling this program via "super" + + @user: (uid or name) + @return: tuple of (name, uid, (groups)) + """ + ## are we called via 'super'? + if ("SUPERCMD" in os.environ) and ("ORIG_USER" in os.environ): + ## return the user that was calling super + return getUserInfo(os.environ["ORIG_USER"]) + else: + ## return the current user + return getUserInfo(os.getuid()) + + +def getUserInfo(user): + """return information about the specified user + + @user: (uid or name) + @return: tuple of (name, uid, (groups)) + """ + if (user is None) or (user == ""): + raise "KeyError", "no user supplied" + ## if a KeyError is raised again in the following lines, then the supplied + ## user was invalid + if type(user) is int: + # 'user' is a uid + userinfo = pwd.getpwuid(user) + elif type(user) is str: + # 'user' is a name + userinfo = pwd.getpwnam(user) + u_groups = [one_group.gr_gid + for one_group in grp.getgrall() + if userinfo.pw_name in one_group.gr_mem] + if not userinfo.pw_gid in u_groups: + ## put in front of the list + u_groups.insert(0,userinfo.pw_gid) + return (userinfo.pw_name, userinfo.pw_uid, u_groups) + + +# **************** main ********************** + +# prevent import +if __name__ == "__main__": + + # do we have root privileges (effective uid is zero)? + if os.geteuid() != 0: + sys.stderr.write("the effective uid is not zero - you should use " \ + + "'super' to call this script (%s)" % sys.argv[0]) + sys.exit(100) + + # remove program name + args = sys.argv[1:] + + # do not allow to use root permissions (real uid may not be zero) + #if os.getuid() == 0: + # sys.stderr.write("the uid of the caller is zero (root) - this is not allowed\n") + # sys.exit(100) + + # check if there were arguments + if (len(args) == 0): + sys.stderr.write("No arguments supplied\n") + sys.exit(100) + + # did the user call the "check" action? + if (len(args) == 1) and (args[0].lower() == "check"): + # exit silently + sys.exit(0) + + if args[0].lower() == "plugin": + del args[0] + try: + isOK = call_plugin(args) + except Exception, errMsg: + sys.stderr.write("Execution of plugin failed: %s\n" % errMsg) + sys.exit(100) + if isOK: + sys.exit(0) + else: + sys.exit(1) + + if args[0].lower() == "event": + del args[0] + try: + isOK = call_event(args) + except Exception, errMsg: + sys.stderr.write("Execution of event script failed: %s\n" % errMsg) + sys.exit(100) + if isOK: + sys.exit(0) + else: + sys.exit(1) + + # check parameters count + if len(args) < 2: + sys.stderr.write("Not enough arguments supplied (%s)!\n" % " ".join(args)) + sys.exit(100) + + progRequest = args[0] + del args[0] + + if not progRequest in allowedProgs.keys(): + sys.stderr.write("Invalid program requested: %s\n" % progRequest) + sys.exit(100) + + if progRequest == "cryptsetup": runner = run_cryptsetup + elif progRequest == "sfdisk": runner = run_sfdisk + elif progRequest == "mount": runner = run_mount + elif progRequest == "umount": runner = run_umount + else: + sys.stderr.write("The interface for this program (%s) is " \ + + "not yet implemented!\n" % progRequest) + sys.exit(100) + try: + if runner(args): + sys.exit(0) + else: + sys.exit(1) + except "WrongArguments", errstr: + sys.stderr.write("Execution failed: %s\n" % errstr) + sys.exit(100) + diff --git a/v0.3.4.5/bin/CryptoBoxWebserver b/v0.3.4.5/bin/CryptoBoxWebserver new file mode 100755 index 0000000..aecd495 --- /dev/null +++ b/v0.3.4.5/bin/CryptoBoxWebserver @@ -0,0 +1,385 @@ +#!/usr/bin/env python +# +# The daemon script to run the CryptoBox webserver. +# +# run the script with "--help" to see all possible paramters +# +# +# Copyright 2006 sense.lab e.V. +# +# This file is part of the CryptoBox. +# +# The CryptoBox 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 CryptoBox 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 the CryptoBox; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +__revision__ = "$Id" + +REMOVE_ENV_SETTINGS = [ "LANG", "LC", "LC_ALL", "LC_COLLATE", "LC_CTYPE", + "LC_MESSAGES", "LC_NUMERIC", "BASH_ENV", "SHELLOPTS" ] + +import os, sys +import signal, atexit +import cryptobox.web.sites +from cryptobox.core.exceptions import * +from optparse import OptionParser + +## check python version +(ver_major, ver_minor, ver_sub, ver_desc, ver_subsub) = sys.version_info +if (ver_major < 2) or ((ver_major == 2) and (ver_minor < 4)): + sys.stderr.write("You need a python version >= 2.4\n") + sys.stderr.write("Current version is: %s\n" % sys.version) + sys.exit(1) + +## check cherrypy dependency +try: + import cherrypy +except: + sys.stderr.write("Could not import the cherrypy module!\n") + sys.stderr.write("Try 'apt-get install python-cherrypy'.\n") + sys.exit(1) + +## check clearsilver dependency +try: + import neo_cgi, neo_util +except: + sys.stderr.write("Could not import the clearsilver module!\n") + sys.stderr.write("Try 'apt-get install python-clearsilver'.\n") + sys.exit(1) + +## check configobj dependency +try: + import configobj, validate +except: + sys.stderr.write("Could not import the configobj or validate module!\n") + sys.stderr.write("Try 'apt-get install python-configobj'.\n") + sys.exit(1) + + +SERVER_ENVIRONMENT = "production" + +class CryptoBoxWebserver: + '''this class starts the cherrypy webserver and serves the single sites''' + + def __init__(self, opts): + """Configure cherrypy and check the location of the configuration file + """ + self.opts = opts + ## check conffile + if not os.access(opts.conffile, os.R_OK) or not os.path.isfile(opts.conffile): + sys.stderr.write("Error: could not read configuration file (%s)\n" % opts.conffile) + sys.exit(1) + ## store the absolute path as we will chdir later (for daemons) + self.conffile = os.path.realpath(opts.conffile) + ## expose static content and set options + ## beware: + cherrypy.config.update({ + "global": { + "server.socket_port" : int(opts.port), + "server.socket_host" : opts.host, + "server.log_to_screen" : not opts.background and opts.verbose, + "server.log_tracebacks" : opts.verbose, + "server.log_request_headers": opts.verbose, + "server.environment": SERVER_ENVIRONMENT, + "server.log_file" : opts.logfile }, + "/cryptobox-misc": { + "staticFilter.on" : True, + "staticFilter.dir": os.path.realpath(opts.datadir)}, + "/favicon.ico": { + "staticFilter.on" : True, + "staticFilter.file": os.path.realpath(os.path.join(opts.datadir, 'favicon.ico'))} + }) + + + def bootup_cryptobox(self): + ## initialize site class + try: + cherrypy.root = cryptobox.web.sites.WebInterfaceSites(self.conffile) + self.website = cherrypy.root + except (CBConfigError,CBEnvironmentError), err_msg: + sys.stderr.write("Error: the CryptoBox is misconfigured - please fix it!\n") + raise + + + def get_user_info(self): + """Retrieve the uid, gid and additional groups of the given user + """ + import pwd, grp + user_entry = pwd.getpwuid(self.opts.user) + ## get the new uid and gid + pw_name, pw_uid, pw_gid = user_entry[0], user_entry[2], user_entry[3] + ## change the owner of the webserver log file + try: + os.chown(self.opts.logfile, pw_uid, pw_gid) + except OSError: + ## fail silently + pass + ## calculate additional groups of the given user + additional_groups = [ entry[2] + for entry in grp.getgrall() + if pw_name in entry[3] ] + [ pw_gid ] + return (pw_uid, pw_gid, additional_groups) + + + def change_groups(self): + """Change the groups of the current process to the ones of the given user + + we have to do this before we call cherrypy.server.start(), as it somehow + remembers the current setting for any thread it will create later + """ + if self.opts.user is None: + return + (pw_uid, pw_gid, additional_groups) = self.get_user_info() + try: + os.setgroups(additional_groups) + except OSError, err_msg: + sys.stderr.write("Failed to change the groups: %s\n" % err_msg) + + + def drop_privileges_permanently(self): + """Drop all privileges of the current process and acquire the privileges of the + given user instead. + """ + if self.opts.user is None: + return + (pw_uid, pw_gid, additional_groups) = self.get_user_info() + try: + ## setgroups happened before (see 'change_groups') + os.setregid(pw_gid, pw_gid) + os.setreuid(pw_uid, pw_uid) + except OSError, err_msg: + sys.stderr.write("Failed to drop privileges permanently: %s\n" % err_msg) + + + + def start(self): + try: + ## first: change the groups (cherrypy.server.start stores the + ## current setting for creating new threads later) + self.change_groups() + cherrypy.server.start(initOnly=True) + self.drop_privileges_permanently() + ## this must be done with dropped privileges - otherwise there is + ## at least a problem with 'blkid' - see bug #139 + self.bootup_cryptobox() + cherrypy.server.wait_for_http_ready() + except cherrypy._cperror.NotReady, err_msg: + sys.stderr.write("Failed to start CryptoBox: %s\n" % err_msg) + sys.exit(1) + except Exception, err_msg: + if err_msg == "(98, 'Address already in use')": + sys.stderr.write("Failed to start CryptoBox: %s\n" % err_msg) + sys.exit(1) + else: + raise + + + +def fork_to_background(): + ## this is just copy'n'pasted from http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/278731 + ## check the original for exhaustive comments + try: + pid = os.fork() + except OSError, err_msg: + sys.stderr.write("Error: failed to fork cryptobox daemon process!\n") + sys.stderr.write("%s\n" % err_msg) + sys.exit(1) + if pid == 0: # the first child + os.setsid() + try: + pid = os.fork() + except OSError, err_msg: + sys.stderr.write("Error: failed to fork second cryptobox daemon process!\n") + sys.stderr.write("%s\n" % err_msg) + sys.exit(1) + if pid == 0: # the second child + ## we do not change the directory - otherwise there seems to be a race condition with the python interpreter loading this script file + #os.chdir(os.path.sep) + os.umask(0) + else: + os._exit(0) + else: + os._exit(0) + + +def close_open_files(): + """this is only necessary if we want to go into background + we will only close stdin, stdout and stderr + """ + import resource # Resource usage information. + ## use the following lines to close all open files (including the log file) + # maxfd = resource.getrlimit(resource.RLIMIT_NOFILE)[1] + # if (maxfd == resource.RLIM_INFINITY): + # maxfd = 1024 + maxfd = 2 + for fd in range(0, maxfd): + try: + ## close all except for stderr - we will redirect it later + if fd != 2: + os.close(fd) + except OSError: # ERROR, fd wasn't open to begin with (ignored) + pass + os.open(os.devnull, os.O_RDWR) # standard input (0) + os.dup2(0, 1) # standard output (1) + + +def write_pid_file(pid_file): + if os.path.exists(pid_file): + sys.stderr.write( + "Warning: pid file (%s) already exists - overwriting ...\n" % pid_file) + try: + pidf = open(pid_file,"w") + pidf.write(str(os.getpid())) + pidf.close() + except (IOError, OSError), err_msg: + sys.stderr.write( + "Warning: failed to write pid file (%s): %s\n" % (pid_file, err_msg)) + ## it is just a warning - no need to break + + +def parseOptions(): + import cryptobox + import pwd + version = "%prog" + cryptobox.__version__ + parser = OptionParser(version=version) + parser.set_defaults(conffile="/etc/cryptobox-server/cryptobox.conf", + pidfile="/var/run/cryptobox-server/webserver.pid", + background=False, + datadir="/usr/share/cryptobox-server/www-data", + logfile="/var/log/cryptobox-server/webserver.log", + port="8080", + host="", + verbose=True, + profile_file=False, + user=None) + parser.add_option("-c", "--config", dest="conffile", + help="read configuration from FILE", metavar="FILE") + parser.add_option("","--pidfile", dest="pidfile", + help="write process id to FILE", metavar="FILE") + parser.add_option("-B","", dest="background", action="store_true", + help="run webserver in background (as daemon)") + parser.add_option("-q","", dest="verbose", action="store_false", + help="output only errors") + parser.add_option("","--datadir", dest="datadir", metavar="DIR", + help="set data directory to DIR") + parser.add_option("-p","--port", dest="port", metavar="PORT", + help="listen on PORT") + parser.add_option("-l","--logfile", dest="logfile", metavar="FILE", + help="write webserver log to FILE") + parser.add_option("","--host", dest="host", metavar="HOST", + help="attach to HOST") + parser.add_option("-u","--user", dest="user", metavar="USER", + help="change to USER after starting the webserver") + parser.add_option("","--profile", dest="profile_file", metavar="PROFILE_FILE", + help="enable profiling and store results in PROFILE_FILE") + (options, args) = parser.parse_args() + ## we do not expect any remaining arguments + if len(args) != 0: + parser.error("unknown argument: %s" % str(args[0])) + if not ((not os.path.exists(options.logfile) \ + and os.access(os.path.dirname(options.logfile), os.W_OK)) \ + or os.access(options.logfile, os.W_OK)): + parser.error("could not write to logfile (%s)" % options.logfile) + if not os.path.isdir(options.datadir) or not os.access(options.datadir,os.X_OK): + parser.error("could not access the data directory (%s)" % options.datadir) + try: + if (int(options.port) < 0) or (int(options.port) > 65535): + parser.error("invalid port number: %s" % str(options.port)) + except ValueError: + parser.error("invalid port specified (%s) - it must be a number" % (options.port)) + if options.user: + try: + try: + ## check for the user given as uid + uid = pwd.getpwuid(int(options.user))[2] + except ValueError: + ## check for the user given as name + uid = pwd.getpwnam(options.user)[2] + except KeyError: + ## invalid user specified + parser.error("invalid user specified (%s)" % options.user) + ## we will use the uid + options.user = uid + if options.profile_file: + options.profile_file = os.path.abspath(options.profile_file) + try: + import profile + except ImportError: + parser.error("profiling requires the python module 'profile' - debian users should run 'apt-get install python-profiler'") + return options + + +def clean_environment(settings_list): + """Remove some environment settings with side effects (e.g. LANG) + + Useful, as some plugins depend on the output of other commands - localized + output would be quite ugly for them ... + """ + for one_setting in settings_list: + os.unsetenv(one_setting) + + +if __name__ == "__main__": + ## process arguments + options = parseOptions() + ## set umask to 022 (aka 755) - octal value + os.umask(022) + ## initialize the webserver class + cbw = CryptoBoxWebserver(options) + ## remove some environment settings + clean_environment(REMOVE_ENV_SETTINGS) + ## fork to background before cbw.start() - otherwise we lose the socket + if options.background: + fork_to_background() + ## define the default exit handler + def exit_handler(signum, sigframe): + if hasattr(cbw, "website"): + ## are we already up? + cbw.website.cbox.log.info("Shutting down ...") + cbw.website.cleanup() + cherrypy.server.stop() + try: + os.remove(options.pidfile) + except OSError: + pass + os._exit(0) + ## the signal handler gets called by a kill signal (usually in background mode) + signal.signal(signal.SIGTERM, exit_handler) + ## this exit handler gets called by KeyboardInterrupt and similar ones (foreground) + atexit.register(exit_handler, None, None) + ## start the webserver + try: + if options.profile_file: + import profile + profile.run('cbw.start()', options.profile_file) + else: + cbw.start() + except CBError, err_msg: + sys.stderr.write("Failed to start the CryptoBox webserver!\n") + sys.stderr.write("%s\n" % str(err_msg)) + sys.stderr.write("Check the log file for details.\n") + cherrypy.server.stop() + sys.exit(1) + ## redirect stderr to the webserver's logfile + if options.background: + ## replace stdin and stdout by /dev/null + close_open_files() + ## replace stderr by the webserver logfile + os.close(2) + os.open(options.logfile, os.O_APPEND) + ## startup went fine - fork is done - now we may write the pid file + write_pid_file(options.pidfile) + ## this will never exit - one of the above exit handlers will get triggered + cherrypy.server.block() + diff --git a/v0.3.4.5/bin/cryptobox-unittests.conf b/v0.3.4.5/bin/cryptobox-unittests.conf new file mode 100644 index 0000000..5808dba --- /dev/null +++ b/v0.3.4.5/bin/cryptobox-unittests.conf @@ -0,0 +1,88 @@ +[Main] + +# comma separated list of possible prefixes for accesible devices +# beware: .e.g "/dev/hd" grants access to _all_ harddisks +AllowedDevices = /dev/loop, /dev/ubdb + +# use separate config partition? (1=yes / 0=no) +UseConfigPartition = 1 + +# the default name prefix of not unnamed containers +DefaultVolumePrefix = "Disk " + +# which cipher should cryptsetup-luks use? +#TODO: uml does not support this module - DefaultCipher = aes-cbc-essiv:sha256 +DefaultCipher = aes-plain + +# label of the configuration partition (you should never change this) +ConfigVolumeLabel = cbox_config + +# which plugins should be disabled? (comma seperated list) +#DisabledPlugins = network, shutdown, partition + + +[Locations] +# where should we mount volumes? +# this directory must be writeable by the cryptobox user (see above) +#MountParentDir = /var/cache/cryptobox/mnt +MountParentDir = ../ttt/mnt + +# settings directory: contains name database and plugin configuration +#SettingsDir = /var/cache/cryptobox/settings +SettingsDir = ../ttt/settings + +# where are the clearsilver templates? +#TemplateDir = /usr/share/cryptobox/templates +TemplateDir = ../templates + +# path to documentation files +#DocDir = /usr/share/doc/cryptobox/www-data +DocDir = ../doc/html + +# path to the plugin directory +#PluginDir = /usr/share/cryptobox/plugins +PluginDir = ../plugins + +# path to the hook directory (e.g. containing some scripts) +#HookDir = /etc/cryptobox/hooks.d +EventDir = ../event-scripts + + +[Log] +# possible values are "debug", "info", "warn" and "error" or numbers from +# 0 (debug) to 7 (error) +Level = debug + +# where to write the log messages to? +# possible values are: file +# syslog support will be added later +Destination = file + +# depending on the choosen destination (see above) you may select +# details. Possible values for the different destinations are: +# file: $FILENAME +# syslog: $LOG_FACILITY +#Details = /var/log/cryptobox.log +Details = ./cryptobox.log + + +[WebSettings] +# URL of default stylesheet +Stylesheet = cryptobox-misc/cryptobox.css + +# default language +Languages = en, de, sl, fr + + +[Programs] +cryptsetup = /sbin/cryptsetup +mkfs = /sbin/mkfs +blkid = /sbin/blkid +blockdev = /sbin/blockdev +mount = /bin/mount +umount = /bin/umount +nice = /usr/bin/nice +super = /usr/bin/super +# this is the "program" name as defined in /etc/super.tab +CryptoBoxRootActions = CryptoBoxRootActionsLocal + diff --git a/v0.3.4.5/bin/cryptobox.conf b/v0.3.4.5/bin/cryptobox.conf new file mode 100644 index 0000000..0262b23 --- /dev/null +++ b/v0.3.4.5/bin/cryptobox.conf @@ -0,0 +1,101 @@ +[Main] + +# comma separated list of possible prefixes for accesible devices +# beware: .e.g "/dev/hd" grants access to _all_ harddisks +AllowedDevices = /dev/loop, /dev/ubdb, /dev/md_d127 + +# use separate config partition? (1=yes / 0=no) +UseConfigPartition = 1 + +# the default name prefix of not unnamed containers +DefaultVolumePrefix = "Disk " + +# which cipher should cryptsetup-luks use? +#TODO: uml does not support this module - DefaultCipher = aes-cbc-essiv:sha256 +DefaultCipher = aes-plain + +# label of the configuration partition (you should never change this) +ConfigVolumeLabel = cbox_config + +# which plugins should be disabled? (comma seperated list) +#DisabledPlugins = network, shutdown, partition + + +[Locations] +# where should we mount volumes? +# this directory must be writeable by the cryptobox user (see above) +#MountParentDir = /var/cache/cryptobox/mnt +MountParentDir = ../ttt/mnt + +# settings directory: contains name database and plugin configuration +#SettingsDir = /var/cache/cryptobox/settings +SettingsDir = ../ttt/settings + +# where are the clearsilver templates? +#TemplateDir = /usr/share/cryptobox/templates +TemplateDir = ../templates + +# path to documentation files +#DocDir = /usr/share/doc/cryptobox/www-data +DocDir = ../doc/html + +# plugin directories - you may specify more than one directory (comma seperated) +#PluginDir = /usr/share/cryptobox/plugins +PluginDir = ../plugins + +# path to the hook directory (e.g. containing some scripts) +#HookDir = /etc/cryptobox/hooks.d +EventDir = ../event-scripts + + +[Log] +# possible values are "debug", "info", "warn" and "error" or numbers from +# 0 (debug) to 7 (error) +Level = debug + +# where to write the log messages to? +# possible values are: file +# syslog support will be added later +Destination = file + +# depending on the choosen destination (see above) you may select +# details. Possible values for the different destinations are: +# file: $FILENAME +# syslog: $LOG_FACILITY +#Details = /var/log/cryptobox.log +Details = ./cryptobox.log +#Details = SYSLOG + + +[WebSettings] +# URL of default stylesheet +Stylesheet = cryptobox-misc/cryptobox.css + +# default language +Languages = en, de, sl, fr + + +[Programs] +cryptsetup = /sbin/cryptsetup +mkfs = /sbin/mkfs +blkid = /sbin/blkid +blockdev = /sbin/blockdev +mount = /bin/mount +umount = /bin/umount +nice = /usr/bin/nice +super = /usr/bin/super +# this is the "program" name as defined in /etc/super.tab +# "CryptoBoxRootActionsLocal" (in /etc/super.tab) should point to the +# CryptoBoxRootActions.py file in your local sorkign directory - this avoids +# conflicts with a locally (apt-)installed CryptoBoxRootActions.py file +CryptoBoxRootActions = CryptoBoxRootActionsLocal + + +[PluginSettings] +# plugin specific settings +# the section names _must_ be the same as the names of the plugins + +## change the default network interface for the plugin "network" +#[[network]] +#interface = eth0 + diff --git a/v0.3.4.5/bin/do_pylint.sh b/v0.3.4.5/bin/do_pylint.sh new file mode 100755 index 0000000..cefa22b --- /dev/null +++ b/v0.3.4.5/bin/do_pylint.sh @@ -0,0 +1,35 @@ +#!/bin/sh +# +# set some environmental variables for pylint and run it +# + +PROJ_DIR=$(dirname "$0")/.. +PROJ_DIR=$(cd "$PROJ_DIR"; pwd) + +PYLINTRC=$PROJ_DIR/src/pylintrc +PYTHONPATH=$PROJ_DIR/src + +function check_for_filename() +{ + # maybe the argument is a file instead of a module name + if echo "$1" | grep -q "\.py$" && test -e "$1" + then local FILE_DIR=$(dirname "$1") + local MODULE=$(basename "${1%.py}") + ARGS="${ARGS} ${MODULE}" + PYTHONPATH="${PYTHONPATH}:${FILE_DIR}" + else ARGS="${ARGS} ${1}" + fi +} + +while test $# -gt 0 + do check_for_filename "$1" + shift + done + +export PYTHONPATH +export PYLINTRC + +[ ! -x /usr/bin/pylint ] && echo >&2 "please run \"apt-get install pylint\" first" && exit 1 + +pylint $ARGS + diff --git a/v0.3.4.5/bin/do_unittests.sh b/v0.3.4.5/bin/do_unittests.sh new file mode 100755 index 0000000..a9a3803 --- /dev/null +++ b/v0.3.4.5/bin/do_unittests.sh @@ -0,0 +1,60 @@ +#!/bin/sh +# +# run this script _before_ you do a commit and fix errors before uploading +# +# preparations: +# - add the following lines to /etc/super.tab: +# :global_options relative_path=y +# CryptoBoxRootActionsLocal ./CryptoBoxRootActions cryptobox +# + +BASE_DIR=$(cd "$(dirname $0)/.."; pwd) + +export PYTHONPATH=$BASE_DIR/src + +function disable_filecheck() +{ + sed -i "s/^OVERRIDE_FILECHECK = .*$/OVERRIDE_FILECHECK = True/" "$BASE_DIR/bin/CryptoBoxRootActions" +} + +function enable_filecheck() +{ + sed -i "s/^OVERRIDE_FILECHECK = .*$/OVERRIDE_FILECHECK = False/" "$BASE_DIR/bin/CryptoBoxRootActions" +} + +# check if /dev/loop1 is available - otherwise some tests will fail! +if /sbin/losetup /dev/loop1 &>/dev/null || test -e /dev/ubdb + then true + else echo "misconfiguration detected: sorry - you need /dev/loop1 for the tests" >&2 + echo "just do the following:" >&2 + echo " dd if=/dev/zero of=test.img bs=1M count=1 seek=100" >&2 + echo " sudo /sbin/losetup /dev/loop1 test.img" >&2 + echo "then you can run the tests again ..." >&2 + echo >&2 + exit 1 + fi + +dest_files="" +while test $# -gt 0 + do files="${files} $(cd $(dirname $1); pwd)/$(basename $1)" + shift + done + +# chdir to 'bin' - all config settings depend on this +cd "${BASE_DIR}/bin" + +disable_filecheck + +if test -n "$files" + then # do the specified tests + for a in $files + do testoob -v "$a" + done + else # do all tests + for a in ${BASE_DIR}/src/cryptobox/tests/test.*.py + do testoob -v "$a" + done + fi + +enable_filecheck + diff --git a/v0.3.4.5/bin/run_webserver.sh b/v0.3.4.5/bin/run_webserver.sh new file mode 100755 index 0000000..6e5bb8c --- /dev/null +++ b/v0.3.4.5/bin/run_webserver.sh @@ -0,0 +1,58 @@ +#!/bin/sh +# +# example start script to run a local cryptobox webserver +# +# we set some parameters to make it possible to run it without an +# existing cryptobox installation +# +# change your local settings in "cryptobox-local.conf" - if this file +# does not exist, then "cryptobox.conf" is used +# +# the environment variable PORT may override the default (8080) +# +# BEWARE: the super.tab entry must be named "CryptoBoxRootActionsLocal" instead of +# "CryptoBoxRootActions" (useful for development) +# + +BIN_DIR=$(dirname "$0") +BIN_DIR=$(cd "$BIN_DIR"; pwd) + +function disable_filecheck() +{ + sed -i "s/^OVERRIDE_FILECHECK = .*$/OVERRIDE_FILECHECK = True/" "$BIN_DIR/CryptoBoxRootActions" +} + +function enable_filecheck() +{ + sed -i "s/^OVERRIDE_FILECHECK = .*$/OVERRIDE_FILECHECK = False/" "$BIN_DIR/CryptoBoxRootActions" +} + +## add the local python directory to the search path +export PYTHONPATH="$BIN_DIR/../src" +## disable ssl detection +#export HTTPS=1 + +PREFERRED_CONF_FILE=$BIN_DIR/cryptobox-local.conf +FALLBACK_CONF_FILE=$BIN_DIR/cryptobox.conf + +## determine the configuration file +CONFIG_FILE=$FALLBACK_CONF_FILE +test -r "$PREFERRED_CONF_FILE" && CONFIG_FILE=$PREFERRED_CONF_FILE +echo "used config: $CONFIG_FILE" + +## create necessary directories +mkdir -p "$BIN_DIR/../ttt/mnt" +mkdir -p "$BIN_DIR/../ttt/settings" + +cd "$BIN_DIR" + + +# disable strict security checks of CryptoBoxRootActions +disable_filecheck + +## run the webserver +"$BIN_DIR/CryptoBoxWebserver" --config="$CONFIG_FILE" --pidfile=/tmp/cryptoboxwebserver.pid --logfile=/tmp/cryptoboxwebserver.log --port=${PORT:-8080} --datadir="$BIN_DIR/../www-data" "$@" + +# enable strict security checks of CryptoBoxRootActions again +enable_filecheck + diff --git a/v0.3.4.5/bin/uml-setup.sh b/v0.3.4.5/bin/uml-setup.sh new file mode 100755 index 0000000..e73bbca --- /dev/null +++ b/v0.3.4.5/bin/uml-setup.sh @@ -0,0 +1,37 @@ +#!/bin/sh + +PROJ_DIR=$(dirname "$0")/.. +PROJ_DIR=$(cd "$PROJ_DIR"; pwd) +ROOT_IMG=$PROJ_DIR/bin/cryptobox.img +TEST_IMG=$PROJ_DIR/bin/test.img +TEST_SIZE=128 +MEM_SIZE=128M + +if test ! -e "$ROOT_IMG" + then echo "Could not find the cryptobox system image ($ROOT_IMG)" + echo " see stuff/uml-howto.txt for information on how to build a system image" + echo " store (or link) the result as '$ROOT_IMG'" + exit 1 + fi + +# Preparations: +# echo "tun" >>/etc/modules +# follow the instructions in /usr/share/doc/uml-utilities/README.Debian +# add your user to the group 'uml-net' +# + +/sbin/ifconfig tap0 &>/dev/null || { echo "tap0 is not configured - read /usr/share/doc/uml-utilities/README.Debian for hints"; exit 1; } + + +if [ ! -e "$TEST_IMG" ] + then echo "Creating testing image file ..." + dd if=/dev/zero of="$TEST_IMG" bs=1M count=$TEST_SIZE + fi + +if [ ! -w "$ROOT_IMG" ]; then + echo "Make sure \"${ROOT_IMG}\" exists and is writeable" + exit 1; +fi +# "aio=2.4" is necessary, as otherwise sfdiks hangs at "nanosleep({3,0})" +linux ubd0="$ROOT_IMG" ubd1="$TEST_IMG" con=xterm hostfs=$PROJ_DIR fakehd eth0=daemon mem=$MEM_SIZE aio=2.4 + diff --git a/v0.3.4.5/changelog b/v0.3.4.5/changelog new file mode 100644 index 0000000..0baea07 --- /dev/null +++ b/v0.3.4.5/changelog @@ -0,0 +1,79 @@ +Version 0.3.4.3 - 04/01/02007 + * added: Polish translation provided by Andrzej S. Kaznowski + +Version 0.3.4.2 - 03/21/02007 + * added: Italian translation provided by Fabrizio Tarizzo + +Version 0.3.4.1 - 02/27/02007 + * added: Japanese translation provided by kinneko + +Version 0.3.4 - 02/19/02007 + * fixed: unclean uid handling in server wrapper (Closes: #139) + * added: support for partitioning of raid devices + +Version 0.3.3 - 01/26/02007 + * fixed: bug in reinitializing of plugins (Closes: #111) + * fixed: broken group membership changing of webserver (Closes: #114) + * fixed: glitch that delayed the effect of changes made by the plugin_manager + * fixed: disc usage statistic + * completed: Slovenian translation + * completed: German translation + * added: restore network settings during startup + * added: new plugin provides an encrypted (https) connection to the webinterface + * added: support for netmask and gateway setting to 'network' plugin + * added: download of complete log file possible + * added: show/hide help texts + * usablity: ignore devices without read and write permissions + * interface: provide low-quality 'gif' icons instead of default 'png' icons for + IE 5.5/6.0 users due to its lack of support for transparency + * interface: unified layout of plugins + * requires: python module 'm2crypto' for (optional) certificate generation + +Version 0.3.2 - 01/08/02007 + * fixed bug causing ignorance towards group permissions (Closes: #114) + * fixed bug in Plugin manager breaking web interface (Closes: #111) + * fixed delay of Plugin manager settings being committed + +Version 0.3.1 - 12/20/02006 + * fixed broken interface of 'partition' plugin for ie + * fixed rendering bug of volume_properties for ie + * fixed screen width in a mozilla/ie compatible way + * fixed config management of 'plugin_manager' plugin + * fixed filtering of log level messages for 'logs' plugin + * added some german translations + * changed default language to english + * ports lower than 1024 are supported now + +Version 0.3.0 - 12/15/02006 + * new interface + * manage multiple disks + * support custom partitioning + * support plaintext partitions + * use cryptsetup-luks instead of plain cryptsetup + * allow to set time and date + * change of encryption passphrase without data losses + * support for pluggable features + * seperated cryptobox-server package + +Version 0.2.1 - 10/22/02005 + * fixed a critical bug in the initialisation process + * default cipher changed to "aes-cbc-essiv:sha256" (more secure) + * the boot menue (grub) is now protected + * support for usb and firewire harddisks + * new kernel: Linux 2.6.12.6 + * minor language improvements + +Version 0.2 - 10/04/02005 + * first public release + * fully configurable via web interface + * AES encryption via device-mapper + * Samba v3.0.14a-3 + * Linux 2.6.11 + * based on Debian GNU/Linux 3.1 + * documentation languages: + * English + * German + * interface languages: + * English + * German + * Slovenian diff --git a/v0.3.4.5/conf-examples/apache2_dav.conf b/v0.3.4.5/conf-examples/apache2_dav.conf new file mode 100644 index 0000000..e1572ef --- /dev/null +++ b/v0.3.4.5/conf-examples/apache2_dav.conf @@ -0,0 +1,13 @@ +# this file is part of the CryptoBox +# put it into /etc/apache2/conf.d/ +# you MUST create the directory given below - otherwise apache will not like it :( +# do not forget to chown the directory to the cryptobox user + + + # include the dynamically managed configuration directory - IT MUST EXIST + Include /var/cache/cryptobox-server/settings/misc/apache2_dav.conf.d/ + # lock database - should be writeable for www-data + DavLockDB /tmp/dav_lock.db + # a longer value than the default (120) help for high-latency networks + DavMinTimeout 600 + diff --git a/v0.3.4.5/conf-examples/apache_proxypass.conf b/v0.3.4.5/conf-examples/apache_proxypass.conf new file mode 100644 index 0000000..dff6d0d --- /dev/null +++ b/v0.3.4.5/conf-examples/apache_proxypass.conf @@ -0,0 +1,25 @@ +# CryptoBox configuration file +# +# the following directives allow you to use the cryptobox web interface behind apache2 +# +# you need to enable the following modules: +# - proxy +# - headers +# (for debian: run "a2enmod MOD_NAME") +# + +ProxyRequests Off + +# you may restrict access if necessary + + Order Deny,Allow + Allow from all + + + + ProxyPass http://localhost:8080/ + ProxyPassReverse http://localhost:8080/ + # this requestheader is necessary to allow proper redirection to https + RequestHeader set CryptoBox-Location /cryptobox + + diff --git a/v0.3.4.5/conf-examples/cryptobox.conf b/v0.3.4.5/conf-examples/cryptobox.conf new file mode 100644 index 0000000..5174a2a --- /dev/null +++ b/v0.3.4.5/conf-examples/cryptobox.conf @@ -0,0 +1,97 @@ +[Main] + +# comma separated list of possible prefixes for accesible devices +# beware: .e.g "/dev/hd" grants access to _all_ harddisks +# take care, that the user 'cryptobox' has write access to these devices +AllowedDevices = /dev/loop, /dev/ubdb + +# use separate config partition? (1=yes / 0=no) +UseConfigPartition = 0 + +# the default name prefix of not unnamed containers +DefaultVolumePrefix = "Disk " + +# which cipher should cryptsetup-luks use? +# if you lack the appropriate kernel modules, then you could try "aes-plain" - but it is less secure +DefaultCipher = aes-cbc-essiv:sha256 + +# label of the configuration partition (you should never change this) +ConfigVolumeLabel = cbox_config + +# which plugins should be disabled? (comma seperated list) +#DisabledPlugins = encrypted_webinterface, network, shutdown, partition +DisabledPlugins = encrypted_webinterface + + +[Locations] +# where should we mount volumes? +# this directory must be writeable by the cryptobox user (see above) +MountParentDir = /var/cache/cryptobox-server/mnt + +# settings directory: contains name database and plugin configuration +SettingsDir = /var/cache/cryptobox-server/settings + +# where are the clearsilver templates? +TemplateDir = /usr/share/cryptobox-server/templates + +# path to documentation files +DocDir = /usr/share/doc/cryptobox-server/html + +# path to the plugin directory +PluginDir = /usr/share/cryptobox-server/plugins + +# path to the event directory (e.g. containing some scripts) +EventDir = /etc/cryptobox-server/events.d + + +[Log] +# possible values are "debug", "info", "warn" and "error" or numbers from +# 0 (debug) to 7 (error) +Level = info + +# where to write the log messages to? +# possible values are 'file' and 'syslog' +Destination = file + +# depending on the choosen destination (see above) you may select +# details. Possible values for the different destinations are: +# file: $FILENAME +# syslog: KERN | USER | MAIL | DAEMON | AUTH | SYSLOG | LPR | NEWS | UUCP +# | CRON | AUTHPRIV | LOCAL0 .. LOCAL7 +Details = /var/log/cryptobox-server/cryptobox.log + + +[WebSettings] +# URL of default stylesheet +Stylesheet = cryptobox-misc/cryptobox.css + +# comma seperated list of available languages for the web interface +# the first language is the default +# all other languages serve as fallbacks for an incomplete translation +# available languages: cs, da, de, en, es, fi, fr, hu, it, ja, nl, pl, pt, ru, sl, sv, ur +# well supported languages: en, de, sl, ja, it, pl +# partly translated: fr +Languages = en, de, sl, ja, it, pl + + +[Programs] +cryptsetup = /sbin/cryptsetup +mkfs = /sbin/mkfs +blkid = /sbin/blkid +blockdev = /sbin/blockdev +mount = /bin/mount +umount = /bin/umount +nice = /usr/bin/nice +super = /usr/bin/super +# this is the "program" name as defined in /etc/super.tab +CryptoBoxRootActions = CryptoBoxRootActions + + +[PluginSettings] +# plugin specific settings +# the section names _must_ be the same as the names of the plugins + +## change the default network interface for the plugin "network" +#[[network]] +#interface = eth0 + diff --git a/v0.3.4.5/conf-examples/openssl.cnf b/v0.3.4.5/conf-examples/openssl.cnf new file mode 100644 index 0000000..73905e0 --- /dev/null +++ b/v0.3.4.5/conf-examples/openssl.cnf @@ -0,0 +1,65 @@ +# +# OpenSSL configuration file. +# + +# Establish working directory. + +dir = . + +[ ca ] +default_ca = CA_default + +[ CA_default ] +default_days = 3650 +default_md = md5 +policy = policy_match +#serial = $dir/serial +#database = $dir/index.txt +#new_certs_dir = $dir/newcert +#certificate = $dir/cacert.pem +#private_key = $dir/private/cakey.pem +#preserve = no +#email_in_dn = no +#nameopt = default_ca +#certopt = default_ca + +[ policy_match ] +countryName = match +stateOrProvinceName = match +organizationName = match +organizationalUnitName = match +commonName = supplied +emailAddress = optional + +[ req ] +default_bits = 1024 # Size of keys +default_keyfile = stunnel.pem # name of generated keys +default_md = md5 # message digest algorithm +distinguished_name = req_distinguished_name + +[ req_distinguished_name ] +# Variable name Prompt string +#---------------------- ---------------------------------- +0.organizationName = Organization Name (company) +organizationalUnitName = Organizational Unit Name (department, division) +emailAddress = Email Address +emailAddress_max = 40 +localityName = Locality Name (city, district) +stateOrProvinceName = State or Province Name (full name) +#countryName = Country Name (2 letter code) +#countryName_min = 2 +#countryName_max = 2 +#commonName = Common Name (hostname, IP, or your name) +#commonName_max = 64 + +# Default values for the above, for consistency and less typing. +# Variable name Value +#------------------------------ ------------------------------ +0.organizationName_default = CryptoBox +organizationalUnitName_default = Sense.Lab +localityName_default = Kugelmugel +stateOrProvinceName_default = Metropolis +emailAddress_default = info@cryptobox.org + + + diff --git a/v0.3.4.5/conf-examples/start_stunnel.sh b/v0.3.4.5/conf-examples/start_stunnel.sh new file mode 100755 index 0000000..a5cf0a5 --- /dev/null +++ b/v0.3.4.5/conf-examples/start_stunnel.sh @@ -0,0 +1,42 @@ +#!/bin/sh +# +# This script creates a stunnel certificate for https +# and starts a tunnel from :80 to :443. It's meant as en example so +# use it with care. +# +# An example for the openssl config file can be found in +# conf-examples/openssl.cnf . +# + +set -eu + +test $# -ne 2 && echo "Usage: $(basename $0) OPENSSL_CONF_FILE CERT_FILE" && exit 1 + +TMP_FILE=/tmp/cryptobox-cert.tmp +## vcert values are in openssl.conf +#OPENSSL_CONF_FILE="../conf-examples/openssl.cnf" +OPENSSL_CONF_FILE="$1" +## filename for the created cert +#CERTFILE="cryptobox.cert" +CERTFILE="$2" +## source & destination ports +SRC_PORT="8080" +DST_PORT="443" + + +[ ! -f "$OPENSSL_CONF_FILE" ] && echo "`basename $0`: $OPENSSL_CONF_FILE not found" && exit 2 +# this command creates the certificate +# the "\n" are required, because the certbuilding asks for 5 returns +echo -ne "\n\n\n\n\n" | openssl req -new -x509 -nodes -days 3650 -config "$OPENSSL_CONF_FILE" -out "$CERTFILE" -keyout "$CERTFILE" +chmod 600 "$CERTFILE" + +# next step needs a lot of randomdata +dd if=/dev/urandom of="$TMP_FILE" bs=1024 count=1024 +openssl dhparam -rand "$TMP_FILE" 512 >> "$CERTFILE" +rm "$TMP_FILE" + +## print out cert values +#openssl x509 -subject -dates -fingerprint -in stunnel.pem + +stunnel -p ${CERTFILE} -r localhost:${SRC_PORT} -d ${DST_PORT} + diff --git a/v0.3.4.5/conf-examples/super.tab-example b/v0.3.4.5/conf-examples/super.tab-example new file mode 100644 index 0000000..43eae00 --- /dev/null +++ b/v0.3.4.5/conf-examples/super.tab-example @@ -0,0 +1,3 @@ +# adapt the following line to your local setup and add it to /etc/super.tab +# 'yourUserName' is typically 'cryptobox' +CryptoBoxRootActions /your/local/path/to/CryptoBoxRootActions.py yourUserName diff --git a/v0.3.4.5/copyright b/v0.3.4.5/copyright new file mode 100644 index 0000000..3c331f2 --- /dev/null +++ b/v0.3.4.5/copyright @@ -0,0 +1,32 @@ +Copyright (c) 02005-2007 sense.lab + +Documentation: + The documentation is licensed under the Creative Commons Attribution + ShareAlike 2.5 license (http://creativecommons.org/licenses/by-sa/2.5/). + + +Graphics: + All graphics are licensed under the Creative Commons Attribution + ShareAlike 2.5 license (http://creativecommons.org/licenses/by-sa/2.5/). + + See detailed information for all pictures in 'copyright.pictures'. + + +Code: + 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, version 2. + + 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 with + your Debian GNU/Linux system, in /usr/share/common-licenses/GPL, or with the + Debian GNU/Linux hello source package as the file COPYING. If not, + write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + Boston, MA 02110-1301 USA + +$Id$ + diff --git a/v0.3.4.5/copyright.graphics b/v0.3.4.5/copyright.graphics new file mode 100644 index 0000000..eeac3c0 --- /dev/null +++ b/v0.3.4.5/copyright.graphics @@ -0,0 +1,158 @@ +This file lists detailed information about the licenses and the original authors +of the graphics that are used as a part of the CryptoBox. + + +******************** Creative Commons graphics ************************* + +The graphics listed below are licensed under the Creative Commons Attribution +ShareAlike 2.5 license (http://creativecommons.org/licenses/by-sa/2.5/). + +1) Sense.Lab e.V. (http://senselab.org) + design/cryptobox_backgrounds.svg + all graphics in the directory design/logo/ + all graphics in the directory www-data/screenshots + all graphics not listed below + +2) Tango Desktop Project (http://tango.freedesktop.org) + design/icons/applications-system_tango.svg + design/icons/computer_tango.svg + design/icons/dialog-error_tango.svg + design/icons/dialog-information_tango.svg + design/icons/dialog-warning_tango.svg + design/icons/drive-cdrom_tango.svg + design/icons/drive-harddisk_tango.svg + design/icons/drive-removable-media_tango.svg + design/icons/go-down_tango.svg + design/icons/go-up_tango.svg + design/icons/inaccessible_tango_emblem-unreadable.svg + design/icons/locked_tango-emblem-readonly.svg + design/icons/multimedia-dell-dj-pocket_tango.svg + design/icons/multimedia-player-ipod-mini-blue_tango.svg + design/icons/multimedia-player-motorola-rokr_tango.svg + design/icons/package-x-generic_tango.svg + design/icons/preferences-system_tango.svg + design/icons/system-log-out_tango.svg + design/icons/face_smile_big.svg + design/icons/help_browser.svg + design/icons/help_browser_disable.svg [derived] + design/icons/globe-lips.svg [derived] + design/icons/network-transmit-receive_design.svg + design/icons/unlocked-device_tango.svg [derived] + design/icons/pile_of_devices.svg [derived] + www-data/dialog-error_tango.gif + www-data/dialog-error_tango.png + www-data/dialog-information_tango.gif + www-data/dialog-information_tango.png + www-data/dialog-warning_tango.gif + www-data/dialog-warning_tango.png + www-data/icon_get_help.gif + www-data/icon_get_help.png + www-data/icon_get_help_disable.gif [derived] + www-data/icon_get_help_disable.png [derived] + www-data/smile.gif + www-data/smile.png + www-data/smile4.gif + www-data/smile4.png + www-data/volume_active_crypto.gif [derived] + www-data/volume_active_crypto.png [derived] + www-data/volume_active_crypto_busy.gif [derived] + www-data/volume_active_crypto_busy.png [derived] + www-data/volume_active_plain.gif [derived] + www-data/volume_active_plain.png [derived] + www-data/volume_active_plain_busy.gif [derived] + www-data/volume_active_plain_busy.png [derived] + www-data/volume_passive_crypto.gif [derived] + www-data/volume_passive_crypto.png [derived] + www-data/volume_passive_crypto_busy.gif [derived] + www-data/volume_passive_crypto_busy.png [derived] + www-data/volume_passive_plain.gif [derived] + www-data/volume_passive_plain.png [derived] + www-data/volume_passive_plain_busy.gif [derived] + www-data/volume_passive_plain_busy.png [derived] + plugins/language_selection/list_marker_tango.gif + plugins/volume_format_fs/plugin_icon.gif + plugins/volume_format_fs/plugin_icon.png + plugins/disks/plugin_icon.gif [derived] + plugins/disks/plugin_icon.png [derived] + plugins/shutdown/plugin_icon.gif + plugins/shutdown/plugin_icon.png + plugins/volume_props/plugin_icon.gif + plugins/volume_props/plugin_icon.png + plugins/system_preferences/plugin_icon.gif + plugins/system_preferences/plugin_icon.png + plugins/network/plugin_icon.gif + plugins/network/plugin_icon.png + plugins/volume_mount/plugin_icon.gif + plugins/volume_mount/plugin_icon.png + plugins/plugin_manager/plugin_icon.gif + plugins/plugin_manager/plugin_icon.png + plugins/plugin_manager/tango-go-up.png + plugins/plugin_manager/tango-go-down.png + plugins/plugin_icon_unknown.gif + plugins/plugin_icon_unknown.png + + +3) David Vignoni + design/icons/gnome-dev-removable-usb_nuvola.svg + design/icons/gnome-globe_nuvola.svg + design/icons/gtk-ok_nuvola.svg + design/icons/gtk-stop_nuvola.svg + design/icons/gtk-zoom-in_nuvola.svg + plugins/volume_details/plugin_icon.gif + plugins/volume_details/plugin_icon.png + +4) Andy Fitzsimon + design/icons/pile_of_devices.svg [derived] + plugins/disks/plugin_icon.gif [derived] + plugins/disks/plugin_icon.png [derived] + +5) Matthew McClintock + design/icons/redhat-config-users_wasp.svg + +3) David Vignoni + design/icons/gnome-dev-removable-usb_nuvola.svg + design/icons/gnome-globe_nuvola.svg + design/icons/gtk-ok_nuvola.svg + design/icons/gtk-stop_nuvola.svg + design/icons/gtk-zoom-in_nuvola.svg + +4) Andy Fitzsimon + design/icons/pile_of_devices.svg [derived] + plugins/disks/plugin_icon.gif [derived] + plugins/disks/plugin_icon.png [derived] + +5) Matthew McClintock + design/icons/redhat-config-users_wasp.svg + plugins/user_manager/plugin_icon.gif + plugins/user_manager/plugin_icon.png + +6) Nicu Buculei + design/icons/globe-lips.svg [derived] + plugins/language_selection/plugin_icon.gif [derived] + plugins/language_selection/plugin_icon.png [derived] + + +*********************** GPL graphics ****************************** + +The graphics listed below are licensed under the GNU General Public License (GPL) +v2.0 or later (http://www.gnu.org/licenses/gpl.html). + +1) Gnome Project (http://www.gnome.org/) + plugins/shutdown/gnome-reboot.gif + plugins/shutdown/gnome-reboot.png + plugins/shutdown/gnome-shutdown.gif + plugins/shutdown/gnome-shutdown.png + plugins/date/plugin_icon.gif + plugins/date/plugin_icon.png + plugins/partition/plugin_icon.gif + plugins/partition/plugin_icon.png + plugins/help/plugin_icon.gif + plugins/help/plugin_icon.png + + +********** Creative Commons Public Domain Dedications ************** + +1) http://openclipart.org + plugins/logs/plugin_icon.gif + plugins/logs/plugin_icon.png + diff --git a/v0.3.4.5/debian/README.Debian b/v0.3.4.5/debian/README.Debian new file mode 100644 index 0000000..93cec3d --- /dev/null +++ b/v0.3.4.5/debian/README.Debian @@ -0,0 +1,32 @@ +CryptoBox for Debian - installation notes + +The main configuration file of the CryptoBox webserver is: + /etc/cryptobox-server/cryptobox.conf +All settings named [Foo]->Bar are defined in this file. + +1) Configure startup and network settings in /etc/default/cryptobox-server. +Set 'NO_START' to "0" if the CryptoBox should start at every bootup. +Set the port on which the cryptobox-server should listen. + +2) Define [Main]->AllowedDevices according to the devices that you want to +publish via the cryptobox webinterface. Be careful: the data on these drives +can be overwritten by front-end users! + +3) Choose a list of plugins to disable in [Main]->DisabledPlugins. + +4) Use the username 'admin' and the password 'admin' to access protected +parts of the CryptoBox. Please change the password soon in the 'user_manager'. +You can use the 'plugin_manager' to define which parts of the CryptoBox should +be restricted to administrative access. + +5) Read /usr/share/doc/cryptobox-server/event-scripts/README for information +about event handlers. They can be used to integrate fileservers (samba, +apache2-dav, nfs, ...) into the CryptoBox. Detailed information about +integration with samba and apach2-dav can be found in README.samba and +README.davfs. + +6) A line was automatically added to /etc/super.tab. +This is necessary to gain root privileges for certain actions. +Please inspect /usr/sbin/CryptoBoxRootActions carefully to make sure, that your +system can not get compromised by this. + diff --git a/v0.3.4.5/debian/changelog b/v0.3.4.5/debian/changelog new file mode 100644 index 0000000..ec0f639 --- /dev/null +++ b/v0.3.4.5/debian/changelog @@ -0,0 +1,137 @@ +cryptobox (0.3.4.4-2) unstable; urgency=low + + * new upstream release: + * added French translation provided by Gilles Accad + * added Dutch translation provided by Michiel van Dijk + * fixed bug related to change of IP address + + -- Lars Kruse Wed, 22 Aug 2007 01:22:02 +0200 + +cryptobox (0.3.4.4-1) unstable; urgency=low + + * new upstream release: added Spanish translation provided by Fadrique + + -- Henning Wed, 23 May 2007 01:50:00 +0200 + +cryptobox (0.3.4.3-1) unstable; urgency=low + + * new upstream release: added Polish translation provided by Andrzej S. Kaznowski + + -- Lars Kruse Sun, 1 Apr 2007 15:05:41 +0200 + +cryptobox (0.3.4.2-1) unstable; urgency=low + + * new upstream release: added Italian translation provided by Fabrizio Tarizzo + + -- Lars Kruse Wed, 21 Mar 2007 19:16:59 +0100 + +cryptobox (0.3.4.1-1) unstable; urgency=low + + * added: Japanese translation provided by kinneko + + -- Lars Kruse Tue, 27 Feb 2007 01:00:39 +0100 + +cryptobox (0.3.4-1) unstable; urgency=low + + * new upstream release + + -- Lars Kruse Mon, 19 Feb 2007 02:39:52 +0100 + +cryptobox (0.3.3-1) unstable; urgency=low + + * new upstream release + + -- Lars Kruse Thu, 8 Feb 2007 01:53:00 +0100 + +cryptobox (0.3.2-1) unstable; urgency=low + + * new upstream release + + -- Lars Kruse Fri, 26 Jan 2007 01:58:27 +0100 + +cryptobox (0.3.1-1) unstable; urgency=low + + * new upstream release + * reduced pyton-central dependency to v0.5.6 + + -- Lars Kruse Tue, 19 Dec 2006 18:21:43 +0100 + +cryptobox (0.3.0-1) unstable; urgency=low + + * first release of the CryptoBox as a seperate package + + -- Lars Kruse Fri, 15 Dec 2006 14:37:07 +0100 + +cryptobox (0.2.59-1) unstable; urgency=low + + * remove leading white lines to improve standard complicance of html + + -- Lars Kruse Thu, 14 Dec 2006 14:19:12 +0100 + +cryptobox (0.2.58-1) unstable; urgency=low + + * fixed small layout bug + + -- Lars Kruse Thu, 14 Dec 2006 01:57:05 +0100 + +cryptobox (0.2.57-1) unstable; urgency=low + + * added some documentation + * fixed ssl issue + * turn on some ownership checks of CryptoBoxRootActions + + -- Lars Kruse Thu, 14 Dec 2006 00:36:26 +0100 + +cryptobox (0.2.56-1) unstable; urgency=low + + * added inline help texts + * fixed 'encryption status' in 'volume_details' + * improved rendering of 'volume_properties' and 'user_manager' + * chmod mount directory to 0777 - this should avoid permission problems + * + + -- Lars Kruse Wed, 13 Dec 2006 02:14:35 +0100 + +cryptobox (0.2.55-1) unstable; urgency=low + + * more unittests + * new help system + + -- Lars Kruse Tue, 12 Dec 2006 04:47:47 +0100 + +cryptobox (0.2.54-1) unstable; urgency=low + + * log plugin improved + * samba plugin fixed + * syslog support added + * improved output of 'logs' plugin + * finished 'volume_automount' plugin + + -- Lars Kruse Mon, 11 Dec 2006 11:52:38 +0100 + +cryptobox (0.2.53-1) unstable; urgency=low + + * constant screen width + * improved documentation + * improved event scripts + * changed default setting of 'UseConfigPartition' + + -- Lars Kruse Thu, 7 Dec 2006 05:10:43 +0100 + +cryptobox (0.2.52-1) unstable; urgency=low + + * format partitions in background + * mark busy partitions + + -- Lars Kruse Wed, 6 Dec 2006 14:57:43 +0100 + +cryptobox (0.2.51-1) unstable; urgency=low + + * favicon included + * first pre-official test release + + -- Lars Kruse Thu, 05 December 2006 19:51:24 +0100 + +cryptobox (0.2.50-1) unstable; urgency=low + * Initial release + -- Lars Kruse Wed, 30 November 2006 20:26:47 +0100 diff --git a/v0.3.4.5/debian/compat b/v0.3.4.5/debian/compat new file mode 100644 index 0000000..7ed6ff8 --- /dev/null +++ b/v0.3.4.5/debian/compat @@ -0,0 +1 @@ +5 diff --git a/v0.3.4.5/debian/control b/v0.3.4.5/debian/control new file mode 100644 index 0000000..c3f65e1 --- /dev/null +++ b/v0.3.4.5/debian/control @@ -0,0 +1,22 @@ +Source: cryptobox +Section: admin +Priority: extra +Maintainer: Lars Kruse +Build-Depends: debhelper (>= 5.0.38), dpatch, python-all-dev (>= 2.4), python-central (>= 0.5.6), gettext +XS-Python-Version: >= 2.4 +Standards-Version: 3.7.2 + +Package: cryptobox-server +Architecture: any +Pre-Depends: adduser +Depends: python-central (>= 0.5.6), cryptsetup (>=20050111), e2fsprogs (>= 1.27), python (>=2.4), python-clearsilver, super, dosfstools, python-cherrypy, python-configobj, python-m2crypto +Suggests: samba, apache2, stunnel +Replaces: cryptobox +XB-Python-Version: ${python:Versions} +Description: Web interface for an encrypting fileserver + This web interface allows you to manage encrypted and plaintext + disks. + This package is especially useful for non-desktop systems. + Even non-technical users are able to encrypt their private data with + the CryptoBox. + diff --git a/v0.3.4.5/debian/copyright b/v0.3.4.5/debian/copyright new file mode 100644 index 0000000..0219b29 --- /dev/null +++ b/v0.3.4.5/debian/copyright @@ -0,0 +1,27 @@ +This package was debianized by Lars Kruse on +Wed, May 10 21:23:16 CEST 2006 + +It was downloaded from http://cryptobox.org/ + +Upstream Authors: + sense.lab development + +Copyright: + 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., + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. + +On Debian GNU/Linux systems, the complete text of the GNU General +Public License can be found in `/usr/share/common-licenses/GPL'. + diff --git a/v0.3.4.5/debian/cryptobox-server.default b/v0.3.4.5/debian/cryptobox-server.default new file mode 100644 index 0000000..4e40894 --- /dev/null +++ b/v0.3.4.5/debian/cryptobox-server.default @@ -0,0 +1,20 @@ +# boot configuration file for the CryptoBox +# +# the default state of the cryptobox is disabled + +# set to "0" to enable the startup of the cryptobox - otherwise "1" +NO_START=1 + +# the user that should execute the cryptobox +RUNAS=cryptobox + +# listening port +PORT=8080 + +# some more server options (rarely necessary) +#SERVER_OPTS="--host localhost --datadir=/usr/share/cryptobox-server/html" + +# if the CryptoBox keeps complaining about a non-encrypted connection, then +# you can override this warning by uncommenting the following line: +#export HTTPS=1 + diff --git a/v0.3.4.5/debian/cryptobox-server.dirs b/v0.3.4.5/debian/cryptobox-server.dirs new file mode 100644 index 0000000..b12a5dc --- /dev/null +++ b/v0.3.4.5/debian/cryptobox-server.dirs @@ -0,0 +1,4 @@ +usr/sbin +usr/share/cryptobox-server +var/log/cryptobox-server +var/run/cryptobox-server diff --git a/v0.3.4.5/debian/cryptobox-server.docs b/v0.3.4.5/debian/cryptobox-server.docs new file mode 100644 index 0000000..3285b8a --- /dev/null +++ b/v0.3.4.5/debian/cryptobox-server.docs @@ -0,0 +1,9 @@ +README +README.samba +README.davfs +README.ssl +README.proxy +copyright +changelog +doc/html +event-scripts diff --git a/v0.3.4.5/debian/cryptobox-server.examples b/v0.3.4.5/debian/cryptobox-server.examples new file mode 100644 index 0000000..c50cf7e --- /dev/null +++ b/v0.3.4.5/debian/cryptobox-server.examples @@ -0,0 +1 @@ +conf-examples diff --git a/v0.3.4.5/debian/cryptobox-server.init b/v0.3.4.5/debian/cryptobox-server.init new file mode 100644 index 0000000..874d13d --- /dev/null +++ b/v0.3.4.5/debian/cryptobox-server.init @@ -0,0 +1,117 @@ +#!/bin/sh +# +# runlevel script of the cryptobox package +# +# Copyright (c) 02006, senselab +# +# see LICENSE file in this package for details +# + +### BEGIN INIT INFO +# Provides: cryptobox-server +# Required-Start: $network $local_fs $remote_fs +# Required-Stop: $network $local_fs $remote_fs +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: start CryptoBox webserver +### END INIT INFO + +# include some useful functions to unify our output format +. /lib/lsb/init-functions + +# read the default setting file, if it exists +[ -r /etc/default/cryptobox-server ] && . /etc/default/cryptobox-server + +# set default values (if not defined in /etc/default/cryptobox-server) +NO_START=${NO_START:-0} +RUNAS=${RUNAS:-cryptobox} +PORT=${PORT:-8080} +HOST=${HOST:-} +LOGFILE=/var/log/cryptobox-server/webserver.log +SERVER_OPTS=${SERVER_OPTS:-} +CONF_FILE=/etc/cryptobox-server/cryptobox.conf + +DAEMON=/usr/sbin/CryptoBoxWebserver +# default install location is /usr/bin/ - debian installation requires /usr/sbin/ +test -x "$DAEMON" || DAEMON=/usr/bin/CryptoBoxWebserver +PYTHON_EXEC=/usr/bin/python +PIDFILE=/var/run/cryptobox-server/webserver.pid +DESC="CryptoBox Daemon (webinterface)" +OPTIONS="-B --pidfile=$PIDFILE --config=$CONF_FILE --logfile=$LOGFILE --host=$HOST --port=$PORT --user=$RUNAS $SERVER_OPTS" + +# quit if NO_START is 1 (see /etc/default/cryptobox-server) +[ "$NO_START" = "1" ] && log_daemon_msg "Not starting $DESC please edit /etc/default/cryptobox-server!" && exit 0 + +# check if the package is installed +test -e "$DAEMON" || exit 0 + + +case "$1" in + start ) + # create the directory of the pid file if necessary + PIDDIR=$(dirname "$PIDFILE") + if [ ! -d "$PIDDIR" ] + then mkdir -p "$PIDDIR" + # necessary: the cryptobox server needs the permission to remove the pid file + chown $RUNAS:root "$PIDDIR" + chmod 755 "$PIDDIR" + fi + # create the directory of the pid file if necessary + LOGDIR=$(dirname "$LOGFILE") + if [ ! -d "$LOGDIR" ] + then mkdir -p "$LOGDIR" + chown $RUNAS:root "$LOGDIR" + chmod 750 "$LOGDIR" + fi + log_daemon_msg "Starting $DESC" + if start-stop-daemon \ + --quiet --start --user $RUNAS --pidfile "$PIDFILE" \ + --startas "$PYTHON_EXEC" -- "$DAEMON" $OPTIONS + then log_end_msg 0 + else log_end_msg 1 + fi + ;; + stop ) + log_daemon_msg "Stopping $DESC" + # if there is no pid file for some reason, then we try to find the process + if test ! -e "$PIDFILE" + then if start-stop-daemon --quiet --stop --user "$RUNAS" --exec "$PYTHON_EXEC" + then log_end_msg 0 + else log_end_msg 1 + fi + # there is a pid file - great! + elif start-stop-daemon --quiet --stop \ + --pidfile "$PIDFILE" \ + --user "$RUNAS" + then test -e "$PIDFILE" && rm "$PIDFILE" + log_end_msg 0 + else log_end_msg 1 + fi + ;; + reload | force-reload | restart ) + "$0" stop + sleep 3 + "$0" start + ;; + status ) + echo -n "$DESC " + if start-stop-daemon --stop --signal 0 --quiet \ + --pidfile "$PIDFILE" --user "$RUNAS" + then echo "running" + exit 0 + else if [ -e "$PIDFILE" ] + then echo "failed" + exit 1 + else echo "not running" + exit 0 + fi + fi + ;; + * ) + echo "Usage: $0 {start|stop|restart|force-reload|status}" >&2 + exit 1 + ;; + esac + +exit 0 + diff --git a/v0.3.4.5/debian/cryptobox-server.lintian b/v0.3.4.5/debian/cryptobox-server.lintian new file mode 100644 index 0000000..2b4a0e9 --- /dev/null +++ b/v0.3.4.5/debian/cryptobox-server.lintian @@ -0,0 +1 @@ +cryptobox-server: package-has-a-duplicate-relation diff --git a/v0.3.4.5/debian/cryptobox-server.logrotate b/v0.3.4.5/debian/cryptobox-server.logrotate new file mode 100644 index 0000000..35ae3e7 --- /dev/null +++ b/v0.3.4.5/debian/cryptobox-server.logrotate @@ -0,0 +1,6 @@ +/var/log/cryptobox-server/cryptobox.log /var/log/cryptobox-server/webserver.log { + rotate 2 + size 100k + copytruncate + nocompress +} diff --git a/v0.3.4.5/debian/cryptobox-server.manpages b/v0.3.4.5/debian/cryptobox-server.manpages new file mode 100644 index 0000000..70d5772 --- /dev/null +++ b/v0.3.4.5/debian/cryptobox-server.manpages @@ -0,0 +1,2 @@ +man/CryptoBoxWebserver.8 +man/CryptoBoxRootActions.8 diff --git a/v0.3.4.5/debian/cryptobox-server.postinst b/v0.3.4.5/debian/cryptobox-server.postinst new file mode 100644 index 0000000..145f0fa --- /dev/null +++ b/v0.3.4.5/debian/cryptobox-server.postinst @@ -0,0 +1,78 @@ +#!/bin/sh + +set -u + +# check the current cryptobox user - maybe it was changed manually +test -r /etc/default/cryptobox-server && . /etc/default/cryptobox-server + +# RUNAS was probably imported from /etc/default/cryptobox-server - otherwise use the default +CRYPTOBOX_USER=${RUNAS:-cryptobox} +LOG_FILE=/var/log/cryptobox-server/cryptobox.log +WEBLOG_FILE=/var/log/cryptobox-server/webserver.log +PID_DIR=/var/run/cryptobox-server +USER_HOME=/var/cache/cryptobox-server +SUPER_FILE=/etc/super.tab +ADDITIONAL_GROUP=disk + + +create_user_home() +{ + # if the user already exists -> do nothing + getent passwd "$CRYPTOBOX_USER" 2>/dev/null >/dev/null && return 0 + # create cryptobox user + echo "Creating new user '$CRYPTOBOX_USER' ..." + adduser --system --group --home "$USER_HOME" "$CRYPTOBOX_USER" + adduser "$CRYPTOBOX_USER" "$ADDITIONAL_GROUP" + mkdir -p "$USER_HOME/mnt" + mkdir -p "$USER_HOME/settings" + chown -R ${CRYPTOBOX_USER}: "$USER_HOME" + # only members of the cryptobox group may access the user directory + chmod 755 "$USER_HOME" +} + +create_add_super_permission() +{ + ## this will add some lines to the configuration file of 'super' + ## do nothing, if there is already a CryptoBox line + grep -q "CRYPTOBOX_MARKER" "$SUPER_FILE" && return 0 + echo >>"$SUPER_FILE" "## CRYPTOBOX_MARKER - please do not remove!" + echo >>"$SUPER_FILE" "CryptoBoxRootActions /usr/sbin/CryptoBoxRootActions $CRYPTOBOX_USER" +} + +create_dirs_and_files() +{ + # pid file + test ! -e "$PID_DIR" && mkdir -p "$PID_DIR" + chown "$CRYPTOBOX_USER" "$PID_DIR" + # create config directories with appropriate permissions + test ! -e "$LOG_FILE" && mkdir -p "$(dirname $LOG_FILE)" && touch "$LOG_FILE" + chown "$CRYPTOBOX_USER" "$LOG_FILE" + test ! -e "$WEBLOG_FILE" && mkdir -p "$(dirname $WEBLOG_FILE)" && touch "$WEBLOG_FILE" + chown "$CRYPTOBOX_USER" "$WEBLOG_FILE" +} + + +#################### main ###################### + +case "$1" in + reconfigure|configure) + create_user_home + create_dirs_and_files + create_add_super_permission + # continue at the end + ;; + abort-upgrade|abort-remove|abort-deconfigure) + # nothing to be done + exit 0 + ;; + *) + echo "postinst called with unknown argument \`$1'" >&2 + exit 0 + ;; + esac + + +#DEBHELPER# + +exit 0 + diff --git a/v0.3.4.5/debian/cryptobox-server.postrm b/v0.3.4.5/debian/cryptobox-server.postrm new file mode 100644 index 0000000..01e4b4b --- /dev/null +++ b/v0.3.4.5/debian/cryptobox-server.postrm @@ -0,0 +1,65 @@ +#!/bin/sh + +set -u + +CRYPTOBOX_USER=cryptobox +LOG_FILE=/var/log/cryptobox-server/cryptobox.log +WEBLOG_FILE=/var/log/cryptobox-server/webserver.log +PID_DIR=/var/run/cryptobox-server +SUPER_FILE=/etc/super.tab +MNT_DIR=/var/cache/cryptobox-server/mnt +SETTINGS_DIR=/var/cache/cryptobox-server/settings + +remove_super_lines() +{ + ## do nothing, if there is no CryptoBox line + grep -q "CRYPTOBOX_MARKER" "$SUPER_FILE" || return 0 + sed -i /CRYPTOBOX_MARKER/d "$SUPER_FILE" + sed -i /^CryptoBoxRootActions/d "$SUPER_FILE" +} + + +umount_all() +{ + test -d "$SETTINGS_DIR" && mountpoint -q "$SETTINGS_DIR" && umount "$SETTINGS_DIR" + test -d "$MNT_DIR" && ls "$MNT_DIR" | while read dir + do if test -d "$MNT_DIR/$dir" + then mountpoint -q "$MNT_DIR/$dir" && umount "$MNT_DIR/$dir" + rm -r "$MNT_DIR/$dir" + fi + done +} + + +remove_stuff() +{ + #TODO: remove old log files too (created by logrotate) + test -e "$LOG_FILE" && rm "$LOG_FILE" + test -e "$WEBLOG_FILE" && rm "$WEBLOG_FILE" + test -e "$PID_DIR" && rm -r "$PID_DIR" + test -e "$SETTINGS_DIR" && rm -r "$SETTINGS_DIR" +} + + +################## main ################### + +# umount everything that is still active +umount_all + +# remove the user +if test "$1" = "purge" && getent passwd "$CRYPTOBOX_USER" 2>/dev/null >/dev/null \ + && test "$(getent passwd $CRYPTOBOX_USER | cut -d : -f 6)" = /var/cache/cryptobox-server + then echo "Removing user 'cryptobox' ..." + userdel -r "$CRYPTOBOX_USER" + fi + +# always remove the lines from the 'super' configuration file +remove_super_lines + +# remove obsolete files +test "$1" = "purge" && remove_stuff + +#DEBHELPER# + +# return without error +true diff --git a/v0.3.4.5/debian/cryptobox-server.preinst b/v0.3.4.5/debian/cryptobox-server.preinst new file mode 100644 index 0000000..dadbb97 --- /dev/null +++ b/v0.3.4.5/debian/cryptobox-server.preinst @@ -0,0 +1,4 @@ +#!/bin/sh + +#DEBHELPER# + diff --git a/v0.3.4.5/debian/cryptobox-server.prerm b/v0.3.4.5/debian/cryptobox-server.prerm new file mode 100644 index 0000000..dadbb97 --- /dev/null +++ b/v0.3.4.5/debian/cryptobox-server.prerm @@ -0,0 +1,4 @@ +#!/bin/sh + +#DEBHELPER# + diff --git a/v0.3.4.5/debian/patches/00list b/v0.3.4.5/debian/patches/00list new file mode 100644 index 0000000..e69de29 diff --git a/v0.3.4.5/debian/pycompat b/v0.3.4.5/debian/pycompat new file mode 100644 index 0000000..0cfbf08 --- /dev/null +++ b/v0.3.4.5/debian/pycompat @@ -0,0 +1 @@ +2 diff --git a/v0.3.4.5/debian/rules b/v0.3.4.5/debian/rules new file mode 100755 index 0000000..7543328 --- /dev/null +++ b/v0.3.4.5/debian/rules @@ -0,0 +1,96 @@ +#!/usr/bin/make -f +# -*- makefile -*- +# Sample debian/rules that uses debhelper. +# This file was originally written by Joey Hess and Craig Small. +# As a special exception, when this file is copied by dh-make into a +# dh-make output file, you may use that output file without restriction. +# This special exception was added by Craig Small in version 0.37 of dh-make. + +# Uncomment this to turn on verbose mode. +#export DH_VERBOSE=1 + +# necessary for dpatch +.NOTPARALLEL: + +DEB_BUILD_DIR=$(CURDIR)/debian/cryptobox-server +CB_PYDIR=$(DEB_BUILD_DIR)/usr/lib/python$(shell pyversions -vr)/site-packages/cryptobox + + +build: build-stamp + +build-stamp: + dh_testdir + python setup.py build + touch build-stamp + +clean: clean-patched unpatch + +clean-patched: + dh_testdir + dh_testroot + python setup.py clean + rm -f build-stamp + rm -rf build + find -type f -name '*.mo' -print0 | xargs -0 rm -f + find -type f -name '*.py[co]' -print0 | xargs -0 rm -f + rm -f MANIFEST + dh_clean + +patch: patch-stamp +patch-stamp: + dpatch apply-all + touch patch-stamp + +unpatch: + dpatch deapply-all + rm -rf patch-stamp debian/patched + +install: build + dh_testdir + dh_testroot + dh_clean -k + dh_installdirs + python setup.py install --root=$(DEB_BUILD_DIR) + # compile language files + find $(DEB_BUILD_DIR) -type f -name \*.po | while read pofile; \ + do msgfmt -o "$${pofile%.po}.mo" "$$pofile"; rm "$$pofile"; done + # the cryptobox is a webserver - it should be installed in /usr/sbin + mv $(DEB_BUILD_DIR)/usr/bin/CryptoBoxWebserver $(DEB_BUILD_DIR)/usr/sbin/ + mv $(DEB_BUILD_DIR)/usr/bin/CryptoBoxRootActions $(DEB_BUILD_DIR)/usr/sbin/ + # remove tests + rm -r $(CB_PYDIR)/tests + # remove doc directory (installed by debian scripts anyway) + rm -r $(DEB_BUILD_DIR)/usr/share/doc/cryptobox-server + # install lintian override file: for multiple dependency caused by {python:Depends} + install -D -m 644 debian/cryptobox-server.lintian \ + $(DEB_BUILD_DIR)/usr/share/lintian/overrides/cryptobox-server + + +# Build architecture-independent files here. +binary-indep: build install + +# Build architecture-dependent files here. +binary-arch: build install + dh_testdir + dh_testroot + dh_installchangelogs + dh_installdocs + dh_installexamples + dh_installlogrotate + dh_installdirs + dh_installman + dh_install + dh_pycentral + @# pycentral must be called before installinit - otherwise the DEBHELPER part + @# in the postinst script is filled in the wrong order - this causes a failing + @# shutdown after removal, as the "pycentral pkgremove" call stops the daemon before + dh_installinit + dh_compress + dh_fixperms + dh_installdeb + dh_gencontrol + dh_md5sums + dh_builddeb + +binary: binary-indep binary-arch +.PHONY: build clean binary-indep binary-arch binary install clean-patched patch patch-stamp unpatch diff --git a/v0.3.4.5/design/cryptobox_backgrounds.svg b/v0.3.4.5/design/cryptobox_backgrounds.svg new file mode 100644 index 0000000..a289b74 --- /dev/null +++ b/v0.3.4.5/design/cryptobox_backgrounds.svg @@ -0,0 +1,806 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + CryptoBox: background items + 02006-09-01 + + + Sense.Lab e.V. (http://senselab.org) + + + + + + Sense.Lab e.V. (http://senselab.org) + + + + + Sense.Lab e.V. (http://senselab.org) + + + https://systemausfall.org/svn/cryptobox/tags/v0.3.3/design/cryptobox_backgrounds.svgh + https://systemausfall.org/svn/cryptobox/tags/v0.3.3/design/cryptobox_backgrounds.svg + + + backgrounds cryptobox + + + + + + + + + + + + + + + + + + + icon_background_active60x7980x106100x132256x338 + icon_background_passive60x7980x106100x132256x338 + register_active2240x120 + register_passive2240x120 + footer_line494x3 + + volume_property_frame1800x1600 + backpane_left250x3 + + backpane_right250x3 + + + backpane_left_top90dpi + backpane_right_top90dpi + + backpane_top8x3 + + + + help_background1600x600 + + environment_warning_background1600x400 + + diff --git a/v0.3.4.5/design/icons/applications-system_tango.svg b/v0.3.4.5/design/icons/applications-system_tango.svg new file mode 100644 index 0000000..35e2ffa --- /dev/null +++ b/v0.3.4.5/design/icons/applications-system_tango.svg @@ -0,0 +1,245 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + System Applications + + + Jakub Steiner + + + http://jimmac.musichall.cz/ + + + system + applications + group + category + admin + root + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.3.4.5/design/icons/computer_tango.svg b/v0.3.4.5/design/icons/computer_tango.svg new file mode 100644 index 0000000..d6e0f6b --- /dev/null +++ b/v0.3.4.5/design/icons/computer_tango.svg @@ -0,0 +1,738 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Computer + 2005-03-08 + + + Jakub Steiner + + + + + workstation + computer + node + client + + + + http://jimmac.musichall.cz/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.3.4.5/design/icons/dialog-error_tango.svg b/v0.3.4.5/design/icons/dialog-error_tango.svg new file mode 100644 index 0000000..602fa79 --- /dev/null +++ b/v0.3.4.5/design/icons/dialog-error_tango.svg @@ -0,0 +1,316 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Rodney Dawes + + + + + Jakub Steiner, Garrett LeSage + + + + Dialog Error + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.3.4.5/design/icons/dialog-information_tango.svg b/v0.3.4.5/design/icons/dialog-information_tango.svg new file mode 100644 index 0000000..1e957cc --- /dev/null +++ b/v0.3.4.5/design/icons/dialog-information_tango.svg @@ -0,0 +1,1145 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Info + + + Jakub Steiner + + + + + dialog + info + + + http://jimmac.musichall.cz + + + + Garrett LeSage + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.3.4.5/design/icons/dialog-warning_tango.svg b/v0.3.4.5/design/icons/dialog-warning_tango.svg new file mode 100644 index 0000000..3870db2 --- /dev/null +++ b/v0.3.4.5/design/icons/dialog-warning_tango.svg @@ -0,0 +1,290 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Dialog Warning + 2005-10-14 + + + Andreas Nilsson + + + + + Jakub Steiner, Garrett LeSage + + + + + dialog + warning + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.3.4.5/design/icons/drive-cdrom_tango.svg b/v0.3.4.5/design/icons/drive-cdrom_tango.svg new file mode 100644 index 0000000..6588a65 --- /dev/null +++ b/v0.3.4.5/design/icons/drive-cdrom_tango.svg @@ -0,0 +1,444 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Drive - CD-ROM + + + Jakub Steiner + + + + + cdrom + cd-rom + optical + drive + + + + + http://jimmac.musichall.cz + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.3.4.5/design/icons/drive-harddisk_tango.svg b/v0.3.4.5/design/icons/drive-harddisk_tango.svg new file mode 100644 index 0000000..406c4ac --- /dev/null +++ b/v0.3.4.5/design/icons/drive-harddisk_tango.svg @@ -0,0 +1,469 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Drive - Hard Disk + + + Jakub Steiner + + + + + hdd + hard drive + fixed + media + solid + + + + + http://jimmac.musichall.cz + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.3.4.5/design/icons/drive-removable-media_tango.svg b/v0.3.4.5/design/icons/drive-removable-media_tango.svg new file mode 100644 index 0000000..e448605 --- /dev/null +++ b/v0.3.4.5/design/icons/drive-removable-media_tango.svg @@ -0,0 +1,390 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Drive - Removable + + + Jakub Steiner + + + + + media + removable + + + + + http://jimmac.musichall.cz + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.3.4.5/design/icons/face_smile_big.svg b/v0.3.4.5/design/icons/face_smile_big.svg new file mode 100644 index 0000000..9c275b6 --- /dev/null +++ b/v0.3.4.5/design/icons/face_smile_big.svg @@ -0,0 +1,257 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Face - Laughing + + + emoticon + emote + smiley + laughing + :-D + :D + + + + + + Jakub Steiner + + + http://jimmac.musichall.cz + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.3.4.5/design/icons/globe-lips.svg b/v0.3.4.5/design/icons/globe-lips.svg new file mode 100644 index 0000000..c1cec26 --- /dev/null +++ b/v0.3.4.5/design/icons/globe-lips.svg @@ -0,0 +1,525 @@ + + + + + + + GlobeLips + + + + bodypart + mouth + globe + + + + + Open Clip Art Library + + + + + Nicu Buculei + + + + + Nicu Buculei + + + 20.10.02007 + image/svg+xml + + + en + + + Lars Kruse +Clavdia Horvat + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.3.4.5/design/icons/gnome-dev-removable-usb_nuvola.svg b/v0.3.4.5/design/icons/gnome-dev-removable-usb_nuvola.svg new file mode 100644 index 0000000..a2c624a --- /dev/null +++ b/v0.3.4.5/design/icons/gnome-dev-removable-usb_nuvola.svg @@ -0,0 +1,1004 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + Adobe PDF library 6.66 + + + + + + + + + + 2004-10-01T14:58:15+02:00 + + 2005-02-15T09:49:25Z + + Illustrator + + 2004-10-01T14:58:15+02:00 + + + + + JPEG + + 256 + + 256 + + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA +AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK +DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f +Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER +AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA +AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB +UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE +1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ +qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy +obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp +0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo ++DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 +FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F +XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX +Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY +q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq +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 +rF+j9Kff61cAxoy+KJ9uT/iPuM1mo1/Qn4BmIvavJn5QeUfLJS4WH9Iamm/125AYq3jHH9lPnu3v +mqyaiUvIMwGcZQl2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KvnX82fJH+Hda+u +2kdNI1Fi0QA2il6vF7D9pfbbtmywz8SNHmGB2Zn+UfnE32m/oS8k5XdktbV26yQDYD5x9PlmHkhR +ZBl19rSopFsnrsNjJWkYPf4v2iPBfppkEvMPO3mlUJS9ufVmG6WybAf7Cvw/Nt/nlmPFKfLkgli/ +l/yV5r86XHOyt/q+nBqPeTVWIeIBpWRvZR86Zk8OPFz3kx3KX+d/J2oeUNabTrl/XgkUSWt0F4rK +h6mlWoVOxFf4Zm6XUA7sSEsLX99YQ2d7f3EumQ1EGncykC/EWPJVpzPIk1b5ZsYaWBPEWFrTd2dp +GIoEWg6IgAUfdkp6iEBQWmS+WPy087+a+EqQ/o/S33+t3AKIy+KL9uT/AIj75rNRr+hPwDMRey+U +Pyb8oeXeE8kP6U1FaH61dAFVbxji3RfatSPHNVk1MpeQbAGd5jpdirsVdirsVdirsVdirsVdirsV +dirsVdirsVdirsVdirsVdirsVdiqV+ZvL1j5g0W50q8H7udfgkH2o5Bujr7qcnjmYmwpD568uxQ+ +VvPcdp5jpDDYSSC5JUupUxtSigEsrggjbeubDLHjjcWA2ZDq/nrzH5vv20ryfYSpFsDPQepx6cmb +7EK/M/TlcdPGAuZTbJvJ/wCR+m2brfeZZBqd8TyNsCfQU/5RPxSn50HscryaonaOwUReoRRRxRrF +EixxoAqIoAVQNgAB0GYjJiX5peUo/MnlO5iSPnqFmpubBgPi5oKsg/4yL8NPGnhl2DJwy8kEPFvK +/wCT3nTXkje4T9FacaH1roEOVPdIRRj/ALLiPfNll1oAq7YCL2Lyn+UPk/y9xm+r/pG/Xf61dgPx +P+RHTgvsaV9812TUSl5BmAzbKEuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2K +uxV2KuxV2KsT84flroPmm/s72+aSKW2BSUw0Bmj6hGJBpQ9/n9F2LPKAICCE/wBI0XStHs1s9MtY +7S2X9iMUqfFid2PuTXK5TMjZSjcirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsV +dirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVd +irsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdi +rsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir +sVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs +VdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsV +dirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVd +irsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdi +rsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir//Z + + + + + + + + + + + + uuid:74d5a603-9ab8-427f-9735-c474bf2487a1 + + + + + + image/svg+xml + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.3.4.5/design/icons/gnome-globe_nuvola.svg b/v0.3.4.5/design/icons/gnome-globe_nuvola.svg new file mode 100644 index 0000000..3a5a620 --- /dev/null +++ b/v0.3.4.5/design/icons/gnome-globe_nuvola.svg @@ -0,0 +1,1195 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +2004-03-28T20:03:13Z + +2004-03-28T20:03:13Z + +Illustrator + + + + +JPEG + +256 + +256 + +/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA +AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK +DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f +Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER +AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA +AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB +UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE +1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ +qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy +obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp +0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo ++DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 +FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqlvmDzFo +3l7TJdT1e5W1tItuTbszHoiKN2Y+AxV4j5g/5ydvTcMnl/SYlgU0Se/LOzDxMcTIF/4M4qk//QzP +nv8A5YNL/wCRVx/2UYq7/oZnz3/ywaX/AMirj/soxV3/AEMz57/5YNL/AORVx/2UYq7/AKGZ89/8 +sGl/8irj/soxV3/QzPnv/lg0v/kVcf8AZRirv+hmfPf/ACwaX/yKuP8AsoxV3/QzPnv/AJYNL/5F +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 +4lCRoEQdFUAD8MVXYq7FXYq//9k= + + + + + + +image/svg+xml + + + + + + + + + +2004-03-28T20:07:21Z + +2004-03-28T20:07:21Z + +Illustrator + + + + +JPEG + +256 + +256 + +/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA +AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK +DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f +Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER +AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA +AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB +UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE +1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ +qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy +obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp +0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo ++DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 +FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqlvmDzFo +3l7TJdT1e5W1tItuTbszHoiKN2Y+AxV4j5g/5ydvTcMnl/SYlgU0Se/LOzDxMcTIF/4M4qk//QzP +nv8A5YNL/wCRVx/2UYq7/oZnz3/ywaX/AMirj/soxV3/AEMz57/5YNL/AORVx/2UYq7/AKGZ89/8 +sGl/8irj/soxV3/QzPnv/lg0v/kVcf8AZRirv+hmfPf/ACwaX/yKuP8AsoxV3/QzPnv/AJYNL/5F +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 + + + + + + +image/svg+xml + + + + +begin='' id='W5M0MpCehiHzreSzNTczkc9d' + + + + + + +2004-03-28T20:10:24Z + +2004-03-28T20:13:14Z + +Illustrator + + + + +JPEG + +256 + +256 + +/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA +AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK +DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f +Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER +AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA +AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB +UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE +1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ +qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy +obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp +0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo ++DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 +FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqlvmDzFo +3l7TJdT1e5W1tItuTbszHoiKN2Y+AxV4j5g/5ydvTcMnl/SYlgU0Se/LOzDxMcTIF/4M4qk//QzP +nv8A5YNL/wCRVx/2UYq7/oZnz3/ywaX/AMirj/soxV3/AEMz57/5YNL/AORVx/2UYq7/AKGZ89/8 +sGl/8irj/soxV3/QzPnv/lg0v/kVcf8AZRirv+hmfPf/ACwaX/yKuP8AsoxV3/QzPnv/AJYNL/5F +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 +/9k= + + + + + + +image/svg+xml + + + + +end='w' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.3.4.5/design/icons/go-down_tango.svg b/v0.3.4.5/design/icons/go-down_tango.svg new file mode 100644 index 0000000..18dadc4 --- /dev/null +++ b/v0.3.4.5/design/icons/go-down_tango.svg @@ -0,0 +1,199 @@ + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Jakub Steiner + + + http://jimmac.musichall.cz + + Go Down + + + go + lower + down + arrow + pointer + > + + + + + Andreas Nilsson + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.3.4.5/design/icons/go-up_tango.svg b/v0.3.4.5/design/icons/go-up_tango.svg new file mode 100644 index 0000000..0e3d01d --- /dev/null +++ b/v0.3.4.5/design/icons/go-up_tango.svg @@ -0,0 +1,195 @@ + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Jakub Steiner + + + http://jimmac.musichall.cz + + Go Up + + + go + higher + up + arrow + pointer + > + + + + + Andreas Nilsson + + + + + + + + + + + + + + + + + + + + diff --git a/v0.3.4.5/design/icons/gtk-ok_nuvola.svg b/v0.3.4.5/design/icons/gtk-ok_nuvola.svg new file mode 100644 index 0000000..b0b07ea --- /dev/null +++ b/v0.3.4.5/design/icons/gtk-ok_nuvola.svg @@ -0,0 +1,364 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + begin='' id='W5M0MpCehiHzreSzNTczkc9d' + + + + +Adobe PDF library 5.00 + + + + + +2003-12-22T22:34:35+02:00 + +2004-04-17T21:25:50Z + +Adobe Illustrator 10.0 + +2004-01-19T17:51:02+01:00 + + + + +JPEG + +256 + +256 + +/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA +AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK +DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f +Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER +AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA +AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB +UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE +1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ +qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy +obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp +0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo ++DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 +FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F +XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX +Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY +q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq +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 + + + + + + +uuid:4b4d592f-95b8-4bcd-a892-74a536c5e52f + + + +image/svg+xml + + + +test.ai + + + + + + end='w' + + + + + + + + + + diff --git a/v0.3.4.5/design/icons/gtk-stop_nuvola.svg b/v0.3.4.5/design/icons/gtk-stop_nuvola.svg new file mode 100644 index 0000000..e7d9883 --- /dev/null +++ b/v0.3.4.5/design/icons/gtk-stop_nuvola.svg @@ -0,0 +1,669 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Adobe PDF library 6.66 + + + + + + + + + + 2004-03-30T11:24:24+02:00 + + 2005-02-15T10:20:28Z + + Illustrator + + 2004-07-28T16:45:02+02:00 + + + + + JPEG + + 256 + + 256 + + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA +AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK +DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f +Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER +AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA +AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB +UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE +1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ +qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy +obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp +0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo ++DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 +FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F +XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX +Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY +q7FXYq7FXYqxfzx+ZXlLyXaiXWrulxIOUFhDR7iQeKpUUH+UxA98qyZow5udouzc2pNQG3f0eG+Y +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 +7FXYq7FXYq7FX//Z + + + + + + + + + + + + uuid:74d5a603-9ab8-427f-9735-c474bf2487a1 + + + + + + image/svg+xml + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.3.4.5/design/icons/gtk-zoom-in_nuvola.svg b/v0.3.4.5/design/icons/gtk-zoom-in_nuvola.svg new file mode 100644 index 0000000..1737355 --- /dev/null +++ b/v0.3.4.5/design/icons/gtk-zoom-in_nuvola.svg @@ -0,0 +1,433 @@ + + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/v0.3.4.5/design/icons/help_browser.svg b/v0.3.4.5/design/icons/help_browser.svg new file mode 100644 index 0000000..669dda3 --- /dev/null +++ b/v0.3.4.5/design/icons/help_browser.svg @@ -0,0 +1,213 @@ + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Help Browser + 2005-11-06 + + + Tuomas Kuosmanen + + + + + help + browser + documentation + docs + man + info + + + + + + Jakub Steiner, Andreas Nilsson + + + http://tigert.com + + + + + + + + + + + + + + + + + + diff --git a/v0.3.4.5/design/icons/help_browser_disable.svg b/v0.3.4.5/design/icons/help_browser_disable.svg new file mode 100644 index 0000000..74299ba --- /dev/null +++ b/v0.3.4.5/design/icons/help_browser_disable.svg @@ -0,0 +1,253 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/v0.3.4.5/design/icons/inaccessible_tango_emblem-unreadable.svg b/v0.3.4.5/design/icons/inaccessible_tango_emblem-unreadable.svg new file mode 100644 index 0000000..82a4a4f --- /dev/null +++ b/v0.3.4.5/design/icons/inaccessible_tango_emblem-unreadable.svg @@ -0,0 +1,357 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Jakub Steiner + + + http://jimmac.musichall.cz + + Unreadable + + + emblem + access + denied + unreadable + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.3.4.5/design/icons/locked_tango-emblem-readonly.svg b/v0.3.4.5/design/icons/locked_tango-emblem-readonly.svg new file mode 100644 index 0000000..10cdd97 --- /dev/null +++ b/v0.3.4.5/design/icons/locked_tango-emblem-readonly.svg @@ -0,0 +1,298 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Jakub Steiner + + + http://jimmac.musichall.cz + + Read Only Emblem + + + emblem + read-only + nowrite + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.3.4.5/design/icons/multimedia-dell-dj-pocket_tango.svg b/v0.3.4.5/design/icons/multimedia-dell-dj-pocket_tango.svg new file mode 100644 index 0000000..0e25751 --- /dev/null +++ b/v0.3.4.5/design/icons/multimedia-dell-dj-pocket_tango.svg @@ -0,0 +1,4405 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Portable Media - iPod Mini Silver + October 2005 + + + Ryan Collier (pseudo) + + + + + http://www.tango-project.org + + + http://www.pseudocode.org + + + media + device + ipod + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + R + + + + + + + + + + diff --git a/v0.3.4.5/design/icons/multimedia-player-ipod-mini-blue_tango.svg b/v0.3.4.5/design/icons/multimedia-player-ipod-mini-blue_tango.svg new file mode 100644 index 0000000..0c35cf8 --- /dev/null +++ b/v0.3.4.5/design/icons/multimedia-player-ipod-mini-blue_tango.svg @@ -0,0 +1,4126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Portable Media - iPod Mini Blue + October 2005 + + + Ryan Collier (pseudo) + + + http://www.pseudocode.org + + + media + device + ipod + + + + + + http://www.tango-project.org + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + MENU + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + R + + + + + + + + + + + diff --git a/v0.3.4.5/design/icons/multimedia-player-motorola-rokr_tango.svg b/v0.3.4.5/design/icons/multimedia-player-motorola-rokr_tango.svg new file mode 100644 index 0000000..207e27f --- /dev/null +++ b/v0.3.4.5/design/icons/multimedia-player-motorola-rokr_tango.svg @@ -0,0 +1,1025 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Portable Media - Motorola ROKR + October 2005 + + + Ryan Collier (pseudo) + + + + + http://www.tango-project.org + + + http://www.pseudocode.org + + + media + device + ipod + phone + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + R + + + + + + + + + + diff --git a/v0.3.4.5/design/icons/network-transmit-receive_design.svg b/v0.3.4.5/design/icons/network-transmit-receive_design.svg new file mode 100644 index 0000000..dd48cc4 --- /dev/null +++ b/v0.3.4.5/design/icons/network-transmit-receive_design.svg @@ -0,0 +1,1041 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Computer + 2005-03-08 + + + Jakub Steiner + + + + + workstation + computer + node + client + + + + http://jimmac.musichall.cz/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.3.4.5/design/icons/package-x-generic_tango.svg b/v0.3.4.5/design/icons/package-x-generic_tango.svg new file mode 100644 index 0000000..dced3c4 --- /dev/null +++ b/v0.3.4.5/design/icons/package-x-generic_tango.svg @@ -0,0 +1,483 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Package + + + Jakub Steiner + + + http://jimmac.musichall.cz/ + + + package + archive + tarball + tar + bzip + gzip + zip + arj + tar + jar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.3.4.5/design/icons/pile_of_devices.svg b/v0.3.4.5/design/icons/pile_of_devices.svg new file mode 100644 index 0000000..b646e3b --- /dev/null +++ b/v0.3.4.5/design/icons/pile_of_devices.svg @@ -0,0 +1,21822 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + MENU + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + R + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + R + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.3.4.5/design/icons/preferences-system_tango.svg b/v0.3.4.5/design/icons/preferences-system_tango.svg new file mode 100644 index 0000000..a6183e8 --- /dev/null +++ b/v0.3.4.5/design/icons/preferences-system_tango.svg @@ -0,0 +1,396 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Jakub Steiner + + + http://jimmac.musichall.cz + + Preferences System + + + preferences + settings + control panel + tweaks + system + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.3.4.5/design/icons/redhat-config-users_wasp.svg b/v0.3.4.5/design/icons/redhat-config-users_wasp.svg new file mode 100644 index 0000000..4668db8 --- /dev/null +++ b/v0.3.4.5/design/icons/redhat-config-users_wasp.svg @@ -0,0 +1,1904 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.3.4.5/design/icons/system-log-out_tango.svg b/v0.3.4.5/design/icons/system-log-out_tango.svg new file mode 100644 index 0000000..c04625a --- /dev/null +++ b/v0.3.4.5/design/icons/system-log-out_tango.svg @@ -0,0 +1,362 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Jakub Steiner + + + http://jimmac.musichall.cz + + System Log Out + + + log out + logout + exit + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.3.4.5/design/icons/unlocked-device_tango.svg b/v0.3.4.5/design/icons/unlocked-device_tango.svg new file mode 100644 index 0000000..963467d --- /dev/null +++ b/v0.3.4.5/design/icons/unlocked-device_tango.svg @@ -0,0 +1,1198 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Drive - Hard Disk + + + Jakub Steiner + + + + + hdd + hard drive + fixed + media + solid + + + + + http://jimmac.musichall.cz + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.3.4.5/design/logo/ameisenkopp.svg b/v0.3.4.5/design/logo/ameisenkopp.svg new file mode 100644 index 0000000..e1d9c98 --- /dev/null +++ b/v0.3.4.5/design/logo/ameisenkopp.svg @@ -0,0 +1,3280 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Sense.Lab (http://senselab.org) + + + + + Sense.Lab (http://senselab.org) + + + + + Sense.Lab (http://senselab.org) + + + 2005-09-01 + + CryptoBox: ant logo drafts + https://svn.systemausfall.org/svn/cryptobox/tags/v0.3.3/design/logo/ameisenkopp.svg + https://svn.systemausfall.org/svn/cryptobox/tags/v0.3.3/design/logo/ameisenkopp.svg + + + + ant head cd + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.3.4.5/design/logo/boesetest.svg b/v0.3.4.5/design/logo/boesetest.svg new file mode 100644 index 0000000..984f240 --- /dev/null +++ b/v0.3.4.5/design/logo/boesetest.svg @@ -0,0 +1,429 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Sense.Lab (http://senselab.org) + + + + + Sense.Lab (http://senselab.org) + + + + + Sense.Lab (http://senselab.org) + + + 2005-09-01 + + https://svn.systemausfall.org/svn/cryptobox/tags/v0.3.3/design/logo/boesetest.svg + https://svn.systemausfall.org/svn/cryptobox/tags/v0.3.3/design/logo/boesetest.svg + + + CryptoBox penguin evil + + + CryptoBox: evil penguin (draft) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.3.4.5/design/logo/bubblebutton.svg b/v0.3.4.5/design/logo/bubblebutton.svg new file mode 100644 index 0000000..3885fcd --- /dev/null +++ b/v0.3.4.5/design/logo/bubblebutton.svg @@ -0,0 +1,811 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Sense.Lab (http://senselab.org) + + + + + Sense.Lab (http://senselab.org) + + + + + Sense.Lab (http://senselab.org) + + + 2005-09-01 + + https://svn.systemausfall.org/svn/cryptobox/tags/v0.3.3/design/logo/bubblebutton.svgh + https://svn.systemausfall.org/svn/cryptobox/tags/v0.3.3/design/logo/bubblebutton.svgh + + + penguin + + + CryptoBox: penguin bubblebutton + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.3.4.5/design/logo/cryptoboxlogogebastel.svg b/v0.3.4.5/design/logo/cryptoboxlogogebastel.svg new file mode 100644 index 0000000..a9ec2d0 --- /dev/null +++ b/v0.3.4.5/design/logo/cryptoboxlogogebastel.svg @@ -0,0 +1,154 @@ + + + + + + + + + image/svg+xml + + + + Sense.Lab (http://senselab.org) + + + + + Sense.Lab (http://senselab.org) + + + + + Sense.Lab (http://senselab.org) + + + 2006-12-15 + + https://svn.systemausfall.org/svn/cryptobox/tags/v0.3.3/design/logo/cryptoboxlogogebastel.svp + https://svn.systemausfall.org/svn/cryptobox/tags/v0.3.3/design/logo/cryptoboxlogogebastel.svp + + + cryptobox text logo + + + CryptoBox: text logo draft + + + + + + + + + + + + + Crypto + Box + + Crypto + Box + + + + diff --git a/v0.3.4.5/design/logo/cryptoboxlogogebastelhintergrundbild.svg b/v0.3.4.5/design/logo/cryptoboxlogogebastelhintergrundbild.svg new file mode 100644 index 0000000..e3bbe7b --- /dev/null +++ b/v0.3.4.5/design/logo/cryptoboxlogogebastelhintergrundbild.svg @@ -0,0 +1,194 @@ + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Sense.Lab (http://senselab.org) + + + + + Sense.Lab (http://senselab.org) + + + + + Sense.Lab (http://senselab.org) + + + 2006-12-15 + + https://svn.systemausfall.org/svn/cryptobox/tags/v0.3.3/design/logo/cryptoboxlogogebastel.svp + https://svn.systemausfall.org/svn/cryptobox/tags/v0.3.3/design/logo/cryptoboxlogogebastelhintergrund.svg + https://svn.systemausfall.org/svn/cryptobox/tags/v0.3.3/design/logo/cryptoboxlogogebastelhintergrund.svg + + + CryptoBox logo text background + + + CryptoBox: text logo background + + + + + + + + + + + + + Crypto + Box + + Privacy for the rest of us. + Privacy for the rest of us. + + diff --git a/v0.3.4.5/design/logo/entwurf.svg b/v0.3.4.5/design/logo/entwurf.svg new file mode 100644 index 0000000..2f4fc0b --- /dev/null +++ b/v0.3.4.5/design/logo/entwurf.svg @@ -0,0 +1,982 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Sense.Lab (http://senselab.org) + + + + + Sense.Lab (http://senselab.org) + + + + + Sense.Lab (http://senselab.org) + + + 2005-09-01 + https://svn.systemausfall.org/svn/cryptobox/tags/v0.3.3/design/logo/entwurf.` + https://svn.systemausfall.org/svn/cryptobox/tags/v0.3.3/design/logo/entwurf.` + https://svn.systemausfall.org/svn/cryptobox/tags/v0.3.3/design/logo/boesetest.svg + + + penguin vault guard + + + CryptoBox: penguin in a vault (draft) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + doire wrote to mention a Physicsweb piecerevealing some of the first bits of data fromthe Deep Impact mission. From the article:"Based on data from the flyby spacecraft andthe impactor, Michael O'Hearn of theUniversity of Maryland and colleagues saythat Tempel 1 belongs to the Jupiter family ofcomets, although its overall shape and surfacefeatures are quite different from the nuclei ofthe two other comets that have been studiedin detail -- Wild 2 and Borelly. They also reportthat Tempel 1 consists largely of extremelyfine particles that seem to be very looselybound together: in other words, the comet ismore like a pile of powder than a solid rock."Looks like the Electric Universe folks were off.Yours sincerely,Big Brother + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.3.4.5/design/logo/evil_stick.svg b/v0.3.4.5/design/logo/evil_stick.svg new file mode 100644 index 0000000..6e2096d --- /dev/null +++ b/v0.3.4.5/design/logo/evil_stick.svg @@ -0,0 +1,848 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Sense.Lab (http://senselab.org) + + + + + Sense.Lab (http://senselab.org) + + + + + Sense.Lab (http://senselab.org) + + + 2005-09-01 + + https://svn.systemausfall.org/svn/cryptobox/tags/v0.3.3/design/logo/boesetest.svg + https://svn.systemausfall.org/svn/cryptobox/tags/v0.3.3/design/logo/evil_stick.svg + https://svn.systemausfall.org/svn/cryptobox/tags/v0.3.3/design/logo/evil_stick.svg + + + CryptoBox penguin evil stick logo + + + CryptoBox: logo evil stick (draft) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + During the course of our ongoing review of the Secure Flight program,we found that TSA did not fully disclose to the public its use of personalinformation in its fall 2004 privacy notices as required by the Privacy Act.In particular, the public was not made fully aware of, nor had theopportunity to comment on, TSA's use of personal information drawnfrom commercial sources to test aspects of the Secure Flight program.In September 2004 and November 2004, TSA issued privacy notices inthe Federal Register that included descriptions of how such informationwould be used. However, these notices did not fully inform the publicbefore testing began about the procedures that TSA and its contractorswould follow for collecting, using, and storing commercial data. Inaddition, the scope of the data used during commercial data testing wasnot fully disclosed in the notices. Specifically, a TSA contractor, acting onbehalf of the agency, collected more than 100 million commercial datarecords containing personal information such as name, date of birth, andtelephone number without informing the public. As a result of TSA'sactions, the public did not receive the full protections of the Privacy Act.Yours sincerely,Big Brother + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.3.4.5/design/logo/evil_stick2.svg b/v0.3.4.5/design/logo/evil_stick2.svg new file mode 100644 index 0000000..1039516 --- /dev/null +++ b/v0.3.4.5/design/logo/evil_stick2.svg @@ -0,0 +1,857 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Sense.Lab (http://senselab.org) + + + + + Sense.Lab (http://senselab.org) + + + + + Sense.Lab (http://senselab.org) + + + 2005-09-01 + + https://svn.systemausfall.org/svn/cryptobox/tags/v0.3.3/design/logo/boesetest.svg + https://svn.systemausfall.org/svn/cryptobox/tags/v0.3.3/design/logo/evil_stick2.svg + https://svn.systemausfall.org/svn/cryptobox/tags/v0.3.3/design/logo/evil_stick2.svg + CryptoBox: logo evil stick2 + + + CryptoBox evil stick logo + + + + + + + + + + + + + + + + + + + + + + + + + + + + During the course of our ongoing review of the Secure Flight program,we found that TSA did not fully disclose to the public its use of personalinformation in its fall 2004 privacy notices as required by the Privacy Act.In particular, the public was not made fully aware of, nor had theopportunity to comment on, TSA's use of personal information drawnfrom commercial sources to test aspects of the Secure Flight program.In September 2004 and November 2004, TSA issued privacy notices inthe Federal Register that included descriptions of how such informationwould be used. However, these notices did not fully inform the publicbefore testing began about the procedures that TSA and its contractorswould follow for collecting, using, and storing commercial data. Inaddition, the scope of the data used during commercial data testing wasnot fully disclosed in the notices. Specifically, a TSA contractor, acting onbehalf of the agency, collected more than 100 million commercial datarecords containing personal information such as name, date of birth, andtelephone number without informing the public. As a result of TSA'sactions, the public did not receive the full protections of the Privacy Act.Yours sincerely,Big Brother + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.3.4.5/design/logo/evil_stick3.svg b/v0.3.4.5/design/logo/evil_stick3.svg new file mode 100644 index 0000000..cf7741b --- /dev/null +++ b/v0.3.4.5/design/logo/evil_stick3.svg @@ -0,0 +1,946 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Sense.Lab (http://senselab.org) + + + + + Sense.Lab (http://senselab.org) + + + + + Sense.Lab (http://senselab.org) + + + 2005-09-01 + + https://svn.systemausfall.org/svn/cryptobox/tags/v0.3.3/design/logo/boesetest.svg + https://svn.systemausfall.org/svn/cryptobox/tags/v0.3.3/design/logo/evil_stick3.svg + https://svn.systemausfall.org/svn/cryptobox/tags/v0.3.3/design/logo/evil_stick3.svg + CryptoBox: logo evil stick3 + + + CryptoBox logo penguin evil stick + + + + + + + + + + + + + + + + + + + + + + + + + + + + During the course of our ongoing review of the Secure Flight program,we found that TSA did not fully disclose to the public its use of personalinformation in its fall 2004 privacy notices as required by the Privacy Act.In particular, the public was not made fully aware of, nor had theopportunity to comment on, TSA's use of personal information drawnfrom commercial sources to test aspects of the Secure Flight program.In September 2004 and November 2004, TSA issued privacy notices inthe Federal Register that included descriptions of how such informationwould be used. However, these notices did not fully inform the publicbefore testing began about the procedures that TSA and its contractorswould follow for collecting, using, and storing commercial data. Inaddition, the scope of the data used during commercial data testing wasnot fully disclosed in the notices. Specifically, a TSA contractor, acting onbehalf of the agency, collected more than 100 million commercial datarecords containing personal information such as name, date of birth, andtelephone number without informing the public. As a result of TSA'sactions, the public did not receive the full protections of the Privacy Act.Yours sincerely,Big Brother + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.3.4.5/design/what_is_cryptobox.svg b/v0.3.4.5/design/what_is_cryptobox.svg new file mode 100644 index 0000000..00781c7 --- /dev/null +++ b/v0.3.4.5/design/what_is_cryptobox.svg @@ -0,0 +1,15724 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + Design drafts: What is the CryptoBox? + 2007-02-10 + + + Sense.Lab e.V. - http://senselab.org + + + + + Sense.Lab e.V. - http://senselab.org + + + + + Sense.Lab e.V. - http://senselab.org + + + https://systemausfall.org/svn/cryptobox/trunk/design/what_is_cryptobox.svg + + + CryptoBox comic strip + + + + + most of the graphics used were taken from the openclipart gallery of graphics dedicated to the public domain + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Anne - the admin + the fileserver + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + tux@linux# + + + + + + + + + + + + + + + the users + computers of the network + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + tux@linux# + + + + + + + + + + + + + + + + + + + + + + + + + + + sharing the dataof the fileserver + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + tux@linux# + + + + + + + + + + + + + + + + + + + + + + + + + Password:***** + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + There are a lot of dangers for theprivacy of your data out there... + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Crypto + Box + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + If your data gets lostit will still be private ... + + + + + + + ?????? + + server package - current reality: + server package -better future: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + tux@linux# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + There are a lot of dangers for theprivacy of your data out there... + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + tux@linux# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Susan and her computer + + + + + + + + + + Susan hos an old computer that is not in use anymore + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Crypto + Box + + + live-cd - current reality: + live-cd -better future: + + diff --git a/v0.3.4.5/doc/html/de/CryptoBox.html b/v0.3.4.5/doc/html/de/CryptoBox.html new file mode 100644 index 0000000..fe28780 --- /dev/null +++ b/v0.3.4.5/doc/html/de/CryptoBox.html @@ -0,0 +1,132 @@ + + + + + +
+

+

+ +

+

Die CryptoBox

+

+English version +

+

Neuigkeiten

+
  • [14.04.02006] Leider ist codecoop.org wahrscheinlich noch bis 17. April offline. Update: der Download funktioniert wieder, die aktuellste Version findest du hier. +
  • [07.03.02006] Wir strukturieren die CryptoBox gerade um. Zukünftig wird es das CryptoBox-Webfrontend als einzelnes Paket geben, so dass du es in ein bestehendes Linuxsystem installieren kannst. stay tuned.. +
  • [30.10.02005] Die neue CryptoBox Version 0.2.1 ist verfügbar: codecoop.org +
  • [21.10.02005] Wir haben einen Fehler im Release v0.2 entdeckt, der unter bestimmten Umständen die Initialisierung fehlschlagen lässt. Die Veröffentlichung der v0.2.1 behebt diesen Fehler. Wir raten sehr, nur noch v0.2.1 und nachfolgende Versionen zu benutzen und entschuldigen uns, euch Umstände bereitet zu haben. +
  • [04.10.02005] Das erste Release (v0.2) der CryptoBox ist unter Codecoop.org verfügbar. +

Überblick

+

+Die CryptoBox ist eine Live-CD mit der sich jeder alte Rechner in Sekundenschnelle in einen verschlüsselnden Server umwandeln lässt. Damit kannst du sensible Daten speichern, ohne dass du etwas über Kryptografie wissen musst. +

+

+Damit sprechen wir hauptsächlich Menschen an, die ihre Daten (Ideen, Werke, Geheimnisse ...) auf einfachem Wege vor unbefugtem Zugriff sichern wollen. Kurzum: Privatsphäre, als grundlegendes Menschenrecht sichern! +

+

+Die Bedienung erfolgt vollständig per Webbrowser. Wirf einen Blick auf die ScreenShots. +

+

+Nutze das Web-Interface der CryptoBox in deiner Lieblingssprache: +

+
  • deutsch +
  • englisch +
  • slowenisch +

Spezifikation

+

+einige eher technische Details: +

+ +
SystemDebian GNU/Linux-basierte Live-CD +
benötigter Computer"ausrangierter" PC (i386 ab p1 mind. 32MB RAM) +
unterstützte Clients*nix; *bsd; Windows; Mac OS +
interner Fileserversamba (Netzwerkfreigaben) +
Benutzerschnittstelleper Browser bedienbares Web-Interface +
VerschlüsselungAES via device-mapper +
+

Download

+

+Wenn du die CryptoBox benutzen möchtest, kannst du ein aktuelles Image herunterladen und auf eine CD brennen. +

+

+Denk bitte daran, dass dies ein Open Source Projekt ist! Wir bitten dich deshalb, deine Erfahrungen (vor allem auch negative) im Umgang mit der CryptoBox, mit uns zu teilen. So können wir etwaige Fehler schneller beheben und letztlich der Community ein besseres "Produkt" bereitstellen. +

+
  • Zur aktuellsten Version führt dich dieser Link +
    • Vielen Dank an die Menschen der Codecoop für die Bereitstellung der Download-Möglichkeit! +

Für dich von uns

+

+Wir wollen dir, soweit wir können, beim Umgang mit der CryptoBox helfen. +

+
  • Im Nutzerhandbuch findest du eine ausführliche Hilfe. +
  • Schreibe eine eMail an cryptobox[at]systemausfall.org, wenn du weitere Fragen hast. +

Von dir für andere

+

+Du bist nicht nur Konsument. Durch deine Taten kannst du anderen Menschen helfen. + +

+
  • Wir suchen noch Übersetzungen in andere Sprachen. Wenn du dich beteiligen möchtest, wirf einen Blick in die Übersetzungen-Sektion. Dort gibt es eine "README" Datei in der genauere Beschreibungen stehen. +
  • Probleme und Anregungen kannst du in unserer Fehlerdatenbank melden. (Dabei kannst du alle Eingabefelder, die dir unklar sind, getrost ignorieren.) +

Entwicklung

+

+Beteilige dich an der Entwicklung der CryptoBox und werde reich und schön! ;)
+Nee im Ernst, wir freuen uns über jeden partizipierenden Menschen. Du wirst in einem entspannten Team reichlich Erfahrungen sammeln, eine nützliche Sache voranbringen und - wer weiß - vielleicht macht dich das auch schön.
+Trage dich einfach in die Entwickler-Mailingliste ein: cryptobox-dev-subscribe@lists.systemausfall.org und hab Spaß. +

+

+Das Mailinglisten-Archiv ist verfügbar unter https://systemausfall.org/mail-archive. +

+

+Die englischsprachige Entwickler-Doku findest du unter CryptoBoxDev. Dort wird detailiert beschrieben, wie du die Entwicklungsumgebung der CryptoBox verwenden kannst. +

+

+Unsere Enwticklungspläne kannst du dir in der Roadmap anschauen. +

+

Mitwirkende

+

+Vielen Dank an alle HelferInnen - ihr macht die CryptoBox erst richtig rund! :) +

+

+

  • Clavdia Horvat, Tadej Brce & Dušan Rebolj - slovenian translation +
  • http://codecoop.org - webspace +
+

+

Rechtliches

+
  1. Alle Skripte unterliegen der GPL - sie sind also quasi vollständig frei. +
  2. Die Dokumentation unterliegt einer Creative Commons-Lizenz, damit wird die Möglichkeit der freien Verbreitung des gesammelten Wissens gewährleistet. +
  3. Wir übernehmen keinerlei Haftung für eventuelle Folgen, die durch die Nutzung einer CryptoBox entstehen könnten. +

+

Kommentare

+

Comment by anonymous on Tue Nov 29 10:54:06 2005

+

+Ein feines Projekt! +

+

+Das würde ich gerne in meinen Server integrieren. +Ein Howto für Debian wäre nicht schlecht. +

+
+

+den Rest der Diskussion findest du in Ticket #84* +

+
+

+ +

+
diff --git a/v0.3.4.5/doc/html/de/CryptoBoxDev.html b/v0.3.4.5/doc/html/de/CryptoBoxDev.html new file mode 100644 index 0000000..98072d8 --- /dev/null +++ b/v0.3.4.5/doc/html/de/CryptoBoxDev.html @@ -0,0 +1,94 @@ + + + + + +
+

+

+ +

+

+Navigation: ( CryptoBox/de, CryptoBox/en) + +

+
+

Development documentation

+

+The following pages are written for developers only.
+Users of the CryptoBox should read CryptoBoxUser instead. +

+

Source

+

+You may browse the source code. +

+

Contact

+

+Join the mailing list: cryptobox-dev-subscribe@lists.systemausfall.org. +

+

Bug reports

+

+If you think you found a bug or you get an error message, please help us to fix the problem and file a ticket (a bug report). Follow these steps: +

+
  1. Have a look at Open bugs that need to be fixed +
  2. Create a New Ticket +
+
+ + + diff --git a/v0.3.4.5/doc/html/de/CryptoBoxDevBackground.html b/v0.3.4.5/doc/html/de/CryptoBoxDevBackground.html new file mode 100644 index 0000000..2c1ae1b --- /dev/null +++ b/v0.3.4.5/doc/html/de/CryptoBoxDevBackground.html @@ -0,0 +1,64 @@ + + + + + +
+

+

+

Table of Contents

+
    +
  1. dfsbuild
  2. +
  3. the kernel
  4. +
  5. qemu
  6. +
  7. alternative LiveCDs
  8. +
  9. Comments
  10. +
+
+ +

+

+Navigation: ( CryptoBoxDev) + +

+
+

Details of the CryptoBox

+

dfsbuild

+

+The base system of the CryptoBox Live-CD is created by dfsbuild. +

+

+It is recommended to use some kind of caching tool for the retrieval of the debian packages (e.g.: apt-cacher, apt-proxy or approx). This saves a lot of bandwidth and time. +

+

+The documentation for dfsbuild is sparse. But it is quite unlikely, that you will get in direct contact with it, as it is wrapped by cbox-build. However the following links may help you for specific problems: +

+

the kernel

+

+The linux kernel for the CryptoBox is compiled statically. If you want to change it, you could follow this steps: +

+
  1. get the sources: apt-get install kernel-tree-2.6.11 (or the version of your choice) +
  2. copy the exisiting config file kernel/config-2.6.11 as .config into your kernel source directory +
  3. build the debian kernel package make-kpkg --revision=1.dfs --rootcmd=fakeroot kernel_image +
  4. change the kernel in the unpackdebs setting in dfs-cbox.conf (see CryptoBoxDevCustomBuild for details) +

+See source:trunk/hints/kernel-build.txt for more details. +

+

qemu

+

+Qemu is a portable system emulator. It is a convenient tool to ease the development workflow, as you do not need to burn LiveCDs for testing. +

+

alternative LiveCDs

+

+We tried some other LiveCDs before we decided to use dfsbuild. The following pages describe their advantages and disadvantages as the base system for the CryptoBox: +

+
+

Comments

+

+ +

+
diff --git a/v0.3.4.5/doc/html/de/CryptoBoxDevCustomBuild.html b/v0.3.4.5/doc/html/de/CryptoBoxDevCustomBuild.html new file mode 100644 index 0000000..1abfd92 --- /dev/null +++ b/v0.3.4.5/doc/html/de/CryptoBoxDevCustomBuild.html @@ -0,0 +1,85 @@ + + + + + +
+

+

+ +

+

+Navigation: ( CryptoBoxDev, CryptoBoxDevBackground, CryptoBoxDevPreparation, CryptoBoxDevWorkFlow) + +

+
+

Custom builds of the CryptoBox

+

Overview

+

+The following sections are useful, if you want to change the default settings of your personal CryptoBox development environment. +

+

+You should have completed the steps described in CryptoBoxDevPreparation. +

+

Settings

+

dfsbuild settings

+

+All settings for dfsbuild can be found in etc-defaults.d/dfs-cbox.conf. +

+

+If you want to change any of them, you should do the following: +

+
  1. copy etc-defaults.d/dfs-cbox.conf file to etc-local.d/ +
  2. change etc-local.d/dfs-cbox.conf according to your needs +

+This allows you to use your own (personal) settings, without interfering with files under version control. +

+

CryptoBox development configuration

+

+Some settings regarding the building, configuring and validating of the CryptoBox can be found in etc-defaults.d/cbox-dev.conf. +

+

+If you want to change any of them, you should do the following: +

+
  1. copy etc-defaults.d/cbox-dev.conf file to etc-local.d/ +
  2. change etc-local.d/cbox-dev.conf according to your needs +

SSH connection

+

+The file ssh_config is used to establish a connection to a running CryptoBox system. +

+

+It can be necessary to change these settings, if: +

+
  • you do not want to use the default IP for the CryptoBox +
  • or the CryptoBox is not within your local network. +

+If you want to change some settings, you should do the following: +

+
  1. copy etc-defaults.d/ssh_config file to etc-local.d/ +
  2. change etc-local.d/ssh_config according to your needs +

qemu network configuration

+

+The file etc-defauolts.d/qemu-ifup is used for the CryptoBox emulation with qemu. See man qemu for details. +

+

+If you want to change some settings, you should do the following: +

+
  1. copy etc-defaults.d/qemu-ifup file to etc-local.d/ +
  2. change etc-local.d/qemu-ifup according to your needs +

+

Comments

+

+ +

+
diff --git a/v0.3.4.5/doc/html/de/CryptoBoxDevCustomConfigure.html b/v0.3.4.5/doc/html/de/CryptoBoxDevCustomConfigure.html new file mode 100644 index 0000000..67d3fb1 --- /dev/null +++ b/v0.3.4.5/doc/html/de/CryptoBoxDevCustomConfigure.html @@ -0,0 +1,60 @@ + + + + + +
+

+

+

Table of Contents

+
    +
  1. Overview
  2. +
  3. Locations
  4. +
  5. Examples
  6. +
  7. Comments
  8. +
+
+ +

+

+Navigation: ( CryptoBoxDev) + +

+
+

Custom configuration of the CryptoBox

+

Overview

+

+You may change nearly every aspect of the CryptoBox by using the custom configuration hook directory. +

+

+Any script inside of this directory will be executed after the default configuration procedure (see CryptoBoxDevWorkFlow). +

+

+The order of execution is defined by the names of the scripts (alphabetically). +

+

Locations

+

+Some example customization scripts can be found in configure-examples.d/. +

+

+You may put your scripts into configure-local.d/. They will be sourced by cbox-build.sh. +

+

Examples

+

+The examples in configure-examples.d/ can be copied to configure-local.d/ and adjusted to your needs. +

+ +
set_default_ipchange the default IP address of the CryptoBox +
set_default_languageset the default language +
set_default_timeoutset the default idle time for automatic unmounting +
set_hostnamechange the default hostname +
set_root_pwchange the password of root (only useful for a development CryptoBox) +
import_authorized_keysupload a ssh key for passwordless access to a development CryptoBox +
set_scan_deviceswhere to look for usable harddisks +
+
+

Comments

+

+ +

+
diff --git a/v0.3.4.5/doc/html/de/CryptoBoxDevKnownProblems.html b/v0.3.4.5/doc/html/de/CryptoBoxDevKnownProblems.html new file mode 100644 index 0000000..861b783 --- /dev/null +++ b/v0.3.4.5/doc/html/de/CryptoBoxDevKnownProblems.html @@ -0,0 +1,46 @@ + + + + + +
+

+

+ +

+

+Navigation: ( CryptoBoxDev) + +

+
+

Known problems

+

qemu

+

interleaved files not (yet) supported

+

+You should update qemu to version 0.7 or higher. +

+

smbd: segfault

+

+This happens under certain circumstances. We do not know a solution for this problem. +

+

dfsbuild

+

can't cd to _builddir/target/var/lib/apt/lists

+

+Try to downgrade cdebootstrap to v0.3.4 (for debian: apt-get install cdebootstrap/stable). This problem occours at least up to v0.3.8 of cdebootstrap. +

+
+

Comments

+

+ +

+
diff --git a/v0.3.4.5/doc/html/de/CryptoBoxDevPreparation.html b/v0.3.4.5/doc/html/de/CryptoBoxDevPreparation.html new file mode 100644 index 0000000..849b714 --- /dev/null +++ b/v0.3.4.5/doc/html/de/CryptoBoxDevPreparation.html @@ -0,0 +1,77 @@ + + + + + +
+

+

+ +

+

+Navigation: ( CryptoBoxDev, CryptoBoxDevCustomBuild, CryptoBoxDevWorkFlow) + +

+
+

Preparations for developers

+

Software requirements

+

Packages

+

+We use Debian as our development environment. This was a natural choice, as the CryptoBox-LiveCD is also based on Debian. Other distributions should work too, of course - your mileage may vary. +

+

+required: +

+

+recommended: +

+

Kernel

+

+If you want to use qemu to test your CryptoBox in a virtual environment, then you will need the tun/tap kernel feature. +

+
CONFIG_TUN=m
+

Get the source

+

+Download the latest release from our subversion-Repository: +

+
svn checkout https://svn.systemausfall.org/svn/cryptobox/trunk
+

First build

+

+run scripts/cbox-build.sh release as root - hopefully, there should be no errors :) +

+

+Hint: This step will fail, if you did not install apt-cacher. See CryptoBoxDevCustomBuild for details on how to change the build-configuration settings (in this case: mirror in dfs-cbox.conf). +

+

Finished

+

+Now you can start to pariticipate in the development of the CryptoBox or simply customize your own CryptoBox-LiveCD. +

+

+See CryptoBoxDevWorkFlow for details of how to use the developer's tools of the CryptoBox. +

+

+CryptoBoxDevCustomBuild shows some examples for local customizations of the CryptoBox. +

+
+

Comments

+

+ +

+
diff --git a/v0.3.4.5/doc/html/de/CryptoBoxDevValidation.html b/v0.3.4.5/doc/html/de/CryptoBoxDevValidation.html new file mode 100644 index 0000000..df9c2e2 --- /dev/null +++ b/v0.3.4.5/doc/html/de/CryptoBoxDevValidation.html @@ -0,0 +1,78 @@ + + + + + +
+

+

+

Table of Contents

+
    +
  1. Overview
  2. +
  3. Validate
  4. +
  5. How to create a test
  6. +
  7. Comments
  8. +
+
+ +

+

+Navigation: ( CryptoBoxDev) + +

+
+

Validation of the CryptoBox

+

Overview

+

+The validation feature helps you to check the programming logic of the CryptoBox. A lot of test cases are defined to verify as many functions of the CryptoBox as possible. +

+

+The requests are processed with curl. +

+

+The received web page is saved to allow a later design review or css debugging. +

+

+The current state of the CryptoBox is represented by ten single values (e.g.: box is configured, IP of the box, current language setting, ...), which are invisibly a part of each html page (as comments). The returned status of every request is compared to the predicted value of the test case. +

+

+Similar test cases are pooled into test groups (e.g.: initialization, configuration and mounting). +

+

Validate

+

+Run scripts/validate.sh] to conduct all tests of all groups. See scripts/validate.sh help for other actions. +

+

+The results will be saved in validation/report. +

+

+In addition to every single retrieved page, a html page called summary-?.html is created, which contains the state checks of all tests in a group. +

+

How to create a test

+

+All test cases can be found in validation/test-cases. +

+

+Every test consists of the following files: +

+ +
input.curlthe configuration file for the curl request +
outputthe predicted state of the CryptoBox after the call +
descriptiona short description of the test (will be used for the summary) +
delay[optional] time to wait after this test +
+

+Use the existing test cases as templates for new tests. +

+

+Read validation/test-cases/README for details. +

+

+Every logical path of the web interface CGI should be validated by a test case. +

+
+

Comments

+

+ +

+
diff --git a/v0.3.4.5/doc/html/de/CryptoBoxDevWorkFlow.html b/v0.3.4.5/doc/html/de/CryptoBoxDevWorkFlow.html new file mode 100644 index 0000000..015bf8c --- /dev/null +++ b/v0.3.4.5/doc/html/de/CryptoBoxDevWorkFlow.html @@ -0,0 +1,156 @@ + + + + + +
+

+

+ +

+

+Navigation: ( CryptoBoxDev, CryptoBoxDevCustomConfigure, CryptoBoxDevPreparation) + +

+
+

Development workflow

+

Preparations

+

+You should have completed the steps described in CryptoBoxDevPreparation. +

+

Create a CryptoBox-LiveCD

+

+The following steps can be executed in the order of their appearance. +

+

+Usually there is no need to repeat the whole process, after you changed some parts of the CryptoBox. Especially the first step (building of the base system with dfsbuild) may usually be skipped. +

+

+Every step of the building process must be executed as root. +

+

Build the base system

+

+Run scripts/cbox-build.sh dfsbuild to create the base system for the LiveCD. +

+

+The result can be found in _builddir/cd1/image. +

+

+If you do not want to use the apt-cacher to save bandwidth and time, then you should modify the mirror-setting in dfs-cbox.conf (see CryptoBoxDevCustomBuild for details). +

+

Configure the base image

+

+Run scripts/cbox-build.sh config to copy the CryptoBox-specific files to the base image. +

+

+TODO: link to cbox-build.sh-manpage +

+

Remove development features

+

+The original base system, that was created by dfsbuild contains a lot packages and some scripts, that are only useful during development. You should remove them, as they cause severe security implications. +

+

+To reduce the CryptoBox-LiveCD to the usable minimum for operational use, you should run scripts/cbox-build.sh harden. +

+

Create an iso image

+

+To burn a CryptoBox-LiveCD, you need an bootable iso9660-image. +

+

+Create the iso image with scripts/cbox-build.sh iso. The resulting file can be found at _builddir/cd1/cryptobox.iso. +

+

Burn the CD

+

+Do it manually: +

+
cdrecord -v dev=0,0,0 _builddir/cryptobox.iso
+

+(change the dev setting according to your setup). +

+

+Let the script do it for you: scripts/cbox-build.sh burn (maybe you have to change the CDWRITER setting in cbox-dev.conf - see CryptoBoxDevCustomBuild). +

+

+Of course, it is not wise to use CD-R media. CD-RW consume less resources. +

+

Test the CryptoBox-LiveCD

+

+This section is only useful for developers, who want to improve or change the CryptoBox system. +

+

Chroot: quick & dirty tests

+

+If you modified the perl- or shell-scripts of the CryptoBox, then you can check for syntax errors by running them in a chroot environment. Be careful: you have access to all ressources of your computer, while you are working within a chroot environment - so you can easily repartition your real disk ... +

+

+To start a chroot environment, you can execute scripts/cbox-dev.sh chroot. +

+

+For more intensive tests, you may use qemu (see below) or burn real LiveCDs - of course this would take much more time. +

+

Qemu: nearly complete emulation

+

+The processor emulator qemu allows you test the CryptoBox in a virtual environment, that is completely separated from your real computer's resources. It is the tool of choice, if you do nat have a real computer around for testing. +

+

+Beware - there are some problems, when using qemu: +

+
  • smbd does not start (segfault) +
  • ??? +

+To start a qemu emulation of the iso image, you may type: +

+
scripts/cbox-dev.sh qemu
+

Debugging and merging

+

+This section is only useful for developers, who want to develop on a running CryptoBox system (emulated or real). +

+

+You may access the CryptoBox directly or you can use ssh to open a remote session: +

+
./cbox-dev.sh ssh
+

Development on a running system

+

+When you run an emulation or test a real LiveCD, you may encounter problems and bugs. To test your fixes for these problems, it is convenient, to change the running test system. Afterwards you can merge these changes to your local development copy. +

+

+Type scripts/cbox-dev.sh diff to see the changes, you made on the running CryptoBox system. +

+

+Type scripts/cbox-dev.sh merge to merge these changes to your local working copy. +

+

Copying a testversion

+

+Alternatively you may also upload a new version of your local working copy to the running CryptoBox system. +

+

+Type scripts/cbox-dev.sh upload - beware: all recent changes you made to the running CryptoBox system, are lost. +

+

Setting up a new Release

+

+Once you finished your development, you surely want to make a new release. Please read the instructions in the releas-policy.txt it will save you a lot of time! Then you basically just have to run scripts/cbox-build.sh release and get yourself a good coffee. After the command has finished you'll see the releasefiles in _buildir. +

+
+

Comments

+

+ +

+
diff --git a/v0.3.4.5/doc/html/de/CryptoBoxUser.html b/v0.3.4.5/doc/html/de/CryptoBoxUser.html new file mode 100644 index 0000000..4687081 --- /dev/null +++ b/v0.3.4.5/doc/html/de/CryptoBoxUser.html @@ -0,0 +1,59 @@ + + + + + +
+

+

+ +

+

+Navigation: ( CryptoBox/de) + +

+
+

Nutzerhandbuch

+

+Die folgenden Seiten beschreiben die Nutzung der CryptoBox. +

+

+Die online-Version dieses Handbuchs ist ein Wiki. Das bedeutet, dass du diese Seiten verändern kannst. Falls du also Fragen oder Anregungen hast, schreibe bitte deine Anmerkungen in den Kommentar-Abschnitt am Ende der jeweiligen Seite. Die Entwickler werden deine Fragen beantworten und das Handbuch schnellstmöglich aktualisieren. Auf diese Art und Weise kannst du die Nutzbarkeit der CryptoBox für alle Nutzer verbessern! +

+
  1. CryptoBoxUserGettingStarted -- die Vorbereitung der Hardware +
  2. CryptoBoxUserConfiguration -- die Einrichtung deines neuen verschlüsselten Dateiservers +
  3. CryptoBoxUserDailyUse -- die tägliche Nutzung der CryptoBox +

+Die online-Version dieses Handbuchs befindet sich unter https://systemausfall.org/trac/cryptobox/wiki/CryptoBoxUser/de. +

+
+

+ +

+
diff --git a/v0.3.4.5/doc/html/de/CryptoBoxUserConfiguration.html b/v0.3.4.5/doc/html/de/CryptoBoxUserConfiguration.html new file mode 100644 index 0000000..5ee43de --- /dev/null +++ b/v0.3.4.5/doc/html/de/CryptoBoxUserConfiguration.html @@ -0,0 +1,125 @@ + + + + + +
+

+

+ +

+

+Navigation: ( CryptoBoxUser/de) + +

+
+

Die Konfiguration deiner CryptoBox

+

Überblick

+

+Alle Funktionen der CryptoBox können durch das komfortable Web-Interface bedient werden. Zur Erst-Einrichtung der CryptoBox folge einfach den folgenden Schritten. +

+

+Falls du in Eile bist, kannst du das Vorwort überspringen. +

+

+Die Initialisierung erklärt die Einrichtung der Festplatte. Dieser Schritt ist nur bei der ersten Einrichtung oder nach einem Festplattenwechsel notwendig. +

+

+Im Konfigurations-Abschnitt werden die verfügbaren Einstellungen der CryptoBox beschrieben. Hier kannst du beispielsweise die Sprache des Web-Interfaces oder die Netzwerkadresse deiner CryptoBox einstellen. +

+

+Vergiss nicht, auch den Hinweise/Fallstricke-Abschnitt zu lesen. +

+

Vorwort

+

+Du bist den Anweisungen aus CryptoBoxUserGettingStarted gefolgt und sitzt nun vor deinem Arbeits-Rechner. Nun kannst du in deinem Web-Browser das Web-Interface der CryptoBox ansteuern: https://192.168.0.23. +

+

+Bevor du Daten auf deiner CryptoBox speichern kannst, muss die Festplatte mit einem verschlüsselten Dateisystem versehen werden. Das klingt kompliziert, ist jedoch mit einem Klick erledigt. :) +

+

Initialisierung

+

+Klicke auf Initialisierung in der Menü-Zeile. +

+

+Jetzt wirst du zur Eingabe zweier Passworte aufgefordert (jeweils mit Wiederholung - zum Training deiner Tipp-Fertigkeiten ;)). +

+

+de_init.png +

+
  • Das erste Passwort ist das Administrations-Password. +
    • Es schützt die Konfiguration deiner CryptoBox. +
    • Dies ist notwendig, um zu verhindern, dass jemand unerlaubt die Daten auf deiner CryptoBox durch eine erneute Initialisierung löscht. +
    • Wahrscheinlich wirst du dieses Passwort nie wieder benötigen. +
    • Du kannst das Administrations-Passwort leer lassen - dies wird jedoch nicht empfohlen. +
  • Das Crypto-Passwort ist wesentlich wichtiger, da es der einzige Schutz der Daten auf der verschlüsselten Festplatte ist. Wähle es mit Sorgfalt! +
    • Du benötigst es, um auf deine Daten zuzugreifen. +
    • Ein sicheres Passwort sollte aus mindestens 15 Zeichen (einschließlich Ziffern und Sonderzeichen) bestehen. Die Sicherheit deiner Daten steht und fällt mit der Qualität dieses Passworts. +
  • Um dich daran zu erinnern, dass dieser Schritt die Festplatte der CryptoBox komplett löschen wird, musst du den angezeigten roten Warnhinweis im letzten Formularfeld eingeben. +
  • Nun kannst du die Initialisierung durch einen Klick auf Initialisiere die CryptoBox abschließen. +

+Das war es dann auch schon. Kryptographie war wohl nie einfacher zu verwenden, oder? ;) +

+

+Der Initialisierungsvorgang läuft nun im Hintergrund ab und wird nach wenigen Minuten (abhängig von der Größe deiner Festplatte) abgeschlossen. +

+

Konfiguration

+

+Im Gegensatz zur Initialisierung, die nur einmal durchgeführt werden muss, kannst du die Konfiguration jederzeit deinen Wünschen anpassen. Dazu klickst du einfach auf Konfiguration in der Menü-Zeile des Web-Interfaces. Nun wird dir ein Formular mit vier Feldern präsentiert: +

+

+de_config.png +

+
  • Falls du ein Administrator-Passwort während der Initialisierung festgelegt hast, musst du es nun eingeben. Andernfalls wird dieses Formularfeld nicht angezeigt. +
  • Du kannst die voreingestellte Netzwerk-Adresse (IP) verändern, falls sie nicht zu deiner Netzwerk-Struktur passt. +
  • Die Zeitabschaltung sorgt dafür, dass nach einer festgelegten Dauer von Inaktivität (in Minuten), das Crypto-Dateisystem deaktiviert wird (damit sind deine Daten wieder geschützt). Laufende Dateiübertragungen werden dadurch natürlich nicht gestört. +
    • Es ist ratsam, eine kurze Abschalt-Zeit einzustellen (wenige Minuten). +
    • Der Wert 0 deaktiviert die automatische Abschaltung. +
  • Die Sprache ist der Standard für alle Nutzer des CryptoBox-Web-Interfaces. Sie kann individuell durch die Sprach-Links am rechten oberen Bildschirmrand überschrieben werden. +

+Speichere deine neuen Einstellungen durch einen Klick auf Speichere Konfiguration. +

+

+Das ist alles - deine CryptoBox ist jetzt bereit für die tägliche Nutzung! +

+

Hinweise / Fallstricke

+
  • Alle Daten auf der Festplatte in der CryptoBox werden bei der Initialisierung gelöscht. +
  • Die Passworte müssen jeweils zweimal eingegeben werden, um die Gefahr von Tipp-Fehlern zu vermindern. +
  • Das optionale Administrations-Passwort ist nur für die Konfiguration oder eine erneute Initialisierung erforderlich. +
  • Das Crypto-Passwort beschützt deine sensiblen Daten. +
  • Falls die CryptoBox nicht über die Adresse 192.168.0.23 erreichbar ist, musst du die Netzwerk-Adresse deines Arbeits-Rechners für die Dauer der Initialisierung der CryptoBox vorübergehend ändern. +

+zurück zu CryptoBoxUser +

+
+

Kommentare

+

+ +

+
diff --git a/v0.3.4.5/doc/html/de/CryptoBoxUserDailyUse.html b/v0.3.4.5/doc/html/de/CryptoBoxUserDailyUse.html new file mode 100644 index 0000000..8f214ac --- /dev/null +++ b/v0.3.4.5/doc/html/de/CryptoBoxUserDailyUse.html @@ -0,0 +1,139 @@ + + + + + +
+

+

+ +

+

+Navigation: ( CryptoBoxUser/de, CryptoBoxUserConfiguration/de) + +

+
+

Tägliche Nutzung

+

Aktivieren des verschlüsselten Dateisystems

+

+Du kannst dein verschlüsseltes Dateisystem mit folgenden Schritten aktivieren: +

+
  • Wähle mit deinem Web-Browser die Adresse deiner CryptoBox an. Die Voreinstellung ist https://192.168.0.23. +
  • Klicke auf Aktivieren der Crypto-Daten. Daraufhin erscheint ein Formular zur Eingabe des Crypto-Passworts. +
  • Gib dein Crypto-Passwort ein und klicke auf die darunterliegende Schaltfläche. +

+de_mount.png +

+

+Nun ist das verschlüsselte Dateisystem verfügbar. Um es zu nutzen, suche in deiner Netzwerkumgebung nach der Netzwerk-Adresse deiner CryptoBox (Voreinstellung: 192.168.0.23). Nun kannst du das Netzlaufwerk wie üblich verwenden. +

+

Zugriff auf die verschlüsselten Daten

+

Linux - Kommandozeile

+

+Um als normaler Nutzer auf die Crypto-Partition zuzugreifen, solltest du folgende Zeile zur /etc/fstab hinzufügen: +

+
//192.168.0.23/public   /mnt/    smbfs   defaults,noexec,noauto,user,guest      0       0
+

+Nun kannst du die Crypto-Partition nach /mnt mounten: +

+
mount /mnt/
+

+bzw. unmounten: +

+
smbumount /mnt
+

Windows

+

+Starte den Windows Explorer und wähle im Menü unter Extras die Option Netzlaufwerke verbinden aus. +

+

+de_w98_network_drive.png +

+

+Trage unter Pfad die Adresse des Verzeichnisse der CryptoBox ein, auf das du zugreifen willst (Standard: \\192.168.0.23\public). Soll die Verbindung beim jedem Start von Windows wiederhergestellt werden, aktiviere Verbindung beim Start wiederherstellen. +

+

+Nun kannst du auf das verschlüsselte Dateisystem wie jedes andere Laufwerk benutzen. +

+

Abschalten des verschlüsselten Dateisystems

+

+Du kannst das verschlüsselte Dateisystem abschalten, indem du in der Menü-Zeile des Web-Interfaces der CryptoBox auf Deaktivierung der Crypto-Daten klickst. +

+

+Deine Daten sind nun wieder vor jedem Zugriff geschützt. +

+

Abschaltung der CryptoBox

+

+Klicke auf System in der Menü-Zeile des Web-Interfaces. Nun kannst du zwischen Abschaltung und Neustart wählen. Die Abschaltung dauert einige Sekunden. +

+

+Falls dein CryptoBox-Rechner relativ neu ist (ungefähr ab Baujahr 02000), wird er sich nun selbständig abschalten. Andernfalls musst du dies per Hand tun. +

+

Notfall-Abschaltung

+

+Falls du deine Daten wirklich schnell vor neugierigen Augen schützen musst, dann ziehe einfach den Stecker der CryptoBox. Dies ist nicht besonders sauber und kann (in sehr seltenen Ausnahmefällen) geöffnete Dateien beschädigen. Es ist jedoch die schnellste Methode zur Sicherung deiner Daten vor unbefugtem Zugriff. +

+

+zurück zu CryptoBoxUser +

+
+

Fragen und Antworten

+

Windows: Netzlaufwerk kann nicht verbunden werden

+

+de_w98_not_logged_in.png +

+

+Erscheint diese Fehlermeldung, hast du dich beim Start von Windows nicht angemeldet bzw. das Anmeldefenster mit der Taste Esc (Escape) verschwinden lassen. Klicke auf Start und Abmelden und melde dich neu an - sobald das Anmeldefenster erscheint, klicke auf OK: +

+

+de_w98_login.png +

+

Linux: only root can unmount //192.168.0.23/public

+

+Das Unmounten der Crypto-Partition mit umount funktioniert nicht. +

+

+Lösung: Verwende stattdessen: +

+
smbumount /mnt
+

Linux: Operation not permitted / smbmnt failed: 1

+

+Der Versuch die Partition als normaler Nutzer zu mounten schlägt fehl: +

+
cannot mount on /mnt/: Operation not permitted
+smbmnt failed: 1
+

+Lösung: Das Mount-Verzeichnis muss dem selben Nutzer gehören, der den mount-Befehl ausführt (bspw. phil): +

+
chown phil. /mnt
+

+

Kommentare

+

+ +

+
diff --git a/v0.3.4.5/doc/html/de/CryptoBoxUserGettingStarted.html b/v0.3.4.5/doc/html/de/CryptoBoxUserGettingStarted.html new file mode 100644 index 0000000..04ffe7a --- /dev/null +++ b/v0.3.4.5/doc/html/de/CryptoBoxUserGettingStarted.html @@ -0,0 +1,76 @@ + + + + + +
+

+

+ +

+

+Navigation: ( CryptoBoxUser/de, CryptoBoxUserConfiguration/de, CryptoBoxUserDailyUse/de) + +

+
+

Wie geht es los

+

Erste Schritte

+

+Die CryptoBox ist schnell aufgebaut: +

+
  1. Du brauchst einen alten Computer (mindestens 100MHZ, 48MB RAM) (Faustregel: nach 1996 gekauft). Dazu eine passende Netzwerkkarte, ein CD-ROM Laufwerk und eine riesige Festplatte. +
    • Die Festplatte muss nicht riesig sein, je nachdem was du speichern willst, reicht auch 'ne kleine ;) +
    • Du brauchst keinen Monitor, keine Tastatur und keine Maus, um die CryptoBox zu benutzen (bzw. nur für die Erst-Einrichtung). +
    • Du kannst natürlich einen schnelleren Rechner verwenden - der unbedeutende Performance-Zuwachs wird jedoch wohl nicht durch den erhöhten Energiebedarf gerechtfertigt. +
  2. Lade die aktuellste Version der CryptoBox als iso-image herunter und brenne dieses auf einen CD-Rohling. +
  3. Konfiguriere den PC, so dass er vom CD Laufwerk bootet. Dazu solltest du im BIOS als "boot device" "CD-ROM" einstellen. +
  4. Pack die frisch gebrannte CryptoBox CD ins Laufwerk und starte den Computer. +

+Wenn der Computer jetzt von der CD startet, hast du alle Anforderungen erfüllt. +

+

+Du kannst nun zu deinem Arbeits-Rechner in demselben Netzwerk gehen und "https://192.168.0.23" ansurfen. Dort sollte die CryptoBox-Konfigurationsseite erscheinen. Ist doch kinderleicht, oder? +

+

+Die weiteren Schritte werden unter CryptoBoxUserConfiguration beschrieben. +

+

Hinweise / Fallstricke

+
  • Eventuell musst du für die Einrichtung der CryptoBox kurzzeitig deine Netzwerkaddresse (IP) ändern. Falls du nicht weißt, wie und warum, dann frage jemanden um Rat ... (wahrscheinlich klappt es aber ohne Änderungen) +
  • Falls du eine neue Festplatte kaufen willst, beachte, dass alte PCs nicht mit modernen Festplattengrößen klarkommen. +
  • Einige alte PCs können nicht vom CD-ROM-Laufwerk booten. +
  • Falls dir der Begriff "BIOS" nichts sagt, bitte Menschen um Hilfe, bevor du was veränderst ;) +
  • Vergiss nicht, den CryptoBox-Rechner ans Netzwerk anzuschliessen! +
  • Du brauchst einen Monitor und eine Tastatur für die Konfiguration des BIOS. +

+

Kommentare

+

+ +

+
diff --git a/v0.3.4.5/doc/html/en/CryptoBox.html b/v0.3.4.5/doc/html/en/CryptoBox.html new file mode 100644 index 0000000..9c514e5 --- /dev/null +++ b/v0.3.4.5/doc/html/en/CryptoBox.html @@ -0,0 +1,154 @@ + + + + + +
+

+

+ +

+

The CryptoBox

+

+deutschsprachige Version +

+

News

+
  • [14/04/02006] Sorry folks, codecoop.org is temporarly down. Update: it's up and running again. Fetch the latest version here +
  • [07/03/02006] We're currently splitting the CryptoBox up in the CryptoBox-Webfrontend and the Cryptobox-CD. This will let you use the CryptoBox-Webfrontend in your favourite Linux Installation. stay tuned.. +
  • [30/10/02005] The new CryptoBox version 0.2.1 is available at codecoop.org! +
  • [21/10/02005] We discovered a bug in v0.2, which in some cases prevents the intialization of the CryptoBox. Please wait for v0.2.1 to obtain a working release. We recommend not using v0.2 and are very sorry for the inconvenience. +
  • [04/10/02005] The first release (v0.2) of the CryptoBox is available at Codecoop.org. +

Overview

+

+The CryptoBox is a Debian/Linux based live-cd. This CD boots up, starting a secure fileserver. Even non-technical users are able to store their data on its encrypted harddisk. There is no special knowledge about cryptography or servers required at all.
+The CryptoBox is fully controllable via your web browser. Have a look at the ScreenShots. +

+

+Use the web interface of the CryptoBox in your favourite language: +

+
  • English +
  • German +
  • Slovenian +

Specifications

+

+some rather technical details: +

+ +
systemDebian/Linux based Live-CD +
needed hardware "outdated" PC (i386 p1-100 32MB RAM minimum) +
supported clients*nix; *bsd; Windows; Mac OS +
fileserversamba (network shares) +
userinterfacefully remote controlled via webbrowser +
encryptionAES via device-mapper +
+

Download

+

What we share

+

+We do our best to help you using the CryptoBox. +

+
  • You can find detailed information in the user manual. +
  • For further questions write an email to cryptobox[at]systemausfall.org +

What you might share

+

+You are not just a consumer. You can help others with your knowledge. + +

+
  • We are looking for more translations. Take a look at the "README"-file in our language section. There you can find further instructions if you'd like to contribute. +
  • Open up a ticket for your feature requests and bugs. +

Development

+

Acknowledgements

+

+

  • Clavdia Horvat, Tadej Brce & Dušan Rebolj - slovenian translation +
  • http://codecoop.org - webspace +
+

+

Legal stuff

+
  1. All scripts are GPL licensed +
  2. The documentation is licensed under a Creative Commons License +
  3. We do not take any warranty for the functionality or usability of the CryptoBox. +

+

Comments

+

Comment by anonymous on Tue Nov 29 13:54:27 2005

+

+Let me just make sure I understand correctly. +The protected data is encrypted on the Cryptobox drive, +but is available in clear on the network, between the cryptobox and the user. Right? +

+
+

+see the whole discussion at ticket #83* +

+
+

Comment by anonymous on Sun Dec 4 06:51:50 2005

+

+Do you have suggestions on how to secure the file transfer in a platform independent way? +

+

+Perhaps the simplest thing to do would be make (one version of) CryptoBox be a https (secure web server). +(Instead of, or in addition to, being a samba file server). +

+

+Web browsers use encryption when they upload a file to a "https:// " web server, right? +(using a <FORM> with <INPUT type="file" name="name_of_files">, see +http://www.w3.org/TR/html4/interact/forms.html#h-17.4 +). +Then one (static) web page on that server asks users to upload files using such a form. +

+

+All https servers use encryption when they download files, right? +So another (dynamic) web page on that server lists all of that user's files. Each one is hotlinked, so the user simply clicks on it to download / view it. +

+

+Perhaps a bit kludgy, but I think even unexperienced users could figure it out. +

+
+

+see the whole discussion at ticket #83*, too +

+
+

Comment by anonymous on Sat Dec 10 12:15:55 2005

+

+What happens when there are multiple hard drives in the machine? Will it erase all? Does it combine them to one share with something like raid or lvm, or will they be mountable as different shares? I'd try myself, but I currently only have one free hdd to test with. +btw, wonderful tool, keep up the good work, and tell us if you need more testers :-) +

+
+

+If there are multiple harddisks available, then it will use only the first.
+We are going to implement an interface to manually partition harddisks and choose more than one of them for (seperated) encrypted containers. This feature should be available in the next release (v0.3).
+If you would like to help us (e.g. by testing), then you could subscribe to the mailing list. +

+
+

Comment by anonymous on Sat May 6 10:41:21 2006

+

+Could the hdd be external usb or firewire? +

+
+

+yes - version 2.1 should support usb drives (firewire will work with 3.0) +

+
+

+ +

+
diff --git a/v0.3.4.5/doc/html/en/CryptoBoxDev.html b/v0.3.4.5/doc/html/en/CryptoBoxDev.html new file mode 100644 index 0000000..4690ee3 --- /dev/null +++ b/v0.3.4.5/doc/html/en/CryptoBoxDev.html @@ -0,0 +1,94 @@ + + + + + +
+

+

+ +

+

+Navigation: ( CryptoBox/de, CryptoBox/en) + +

+
+

Development documentation

+

+The following pages are written for developers only.
+Users of the CryptoBox should read CryptoBoxUser instead. +

+

Source

+

+You may browse the source code. +

+

Contact

+

+Join the mailing list: cryptobox-dev-subscribe@lists.systemausfall.org. +

+

Bug reports

+

+If you think you found a bug or you get an error message, please help us to fix the problem and file a ticket (a bug report). Follow these steps: +

+
  1. Have a look at Open bugs that need to be fixed +
  2. Create a New Ticket +
+
+ + + diff --git a/v0.3.4.5/doc/html/en/CryptoBoxDevBackground.html b/v0.3.4.5/doc/html/en/CryptoBoxDevBackground.html new file mode 100644 index 0000000..9caa67c --- /dev/null +++ b/v0.3.4.5/doc/html/en/CryptoBoxDevBackground.html @@ -0,0 +1,64 @@ + + + + + +
+

+

+

Table of Contents

+
    +
  1. dfsbuild
  2. +
  3. the kernel
  4. +
  5. qemu
  6. +
  7. alternative LiveCDs
  8. +
  9. Comments
  10. +
+
+ +

+

+Navigation: ( CryptoBoxDev) + +

+
+

Details of the CryptoBox

+

dfsbuild

+

+The base system of the CryptoBox Live-CD is created by dfsbuild. +

+

+It is recommended to use some kind of caching tool for the retrieval of the debian packages (e.g.: apt-cacher, apt-proxy or approx). This saves a lot of bandwidth and time. +

+

+The documentation for dfsbuild is sparse. But it is quite unlikely, that you will get in direct contact with it, as it is wrapped by cbox-build. However the following links may help you for specific problems: +

+

the kernel

+

+The linux kernel for the CryptoBox is compiled statically. If you want to change it, you could follow this steps: +

+
  1. get the sources: apt-get install kernel-tree-2.6.11 (or the version of your choice) +
  2. copy the exisiting config file kernel/config-2.6.11 as .config into your kernel source directory +
  3. build the debian kernel package make-kpkg --revision=1.dfs --rootcmd=fakeroot kernel_image +
  4. change the kernel in the unpackdebs setting in dfs-cbox.conf (see CryptoBoxDevCustomBuild for details) +

+See source:trunk/hints/kernel-build.txt for more details. +

+

qemu

+

+Qemu is a portable system emulator. It is a convenient tool to ease the development workflow, as you do not need to burn LiveCDs for testing. +

+

alternative LiveCDs

+

+We tried some other LiveCDs before we decided to use dfsbuild. The following pages describe their advantages and disadvantages as the base system for the CryptoBox: +

+
+

Comments

+

+ +

+
diff --git a/v0.3.4.5/doc/html/en/CryptoBoxDevCustomBuild.html b/v0.3.4.5/doc/html/en/CryptoBoxDevCustomBuild.html new file mode 100644 index 0000000..f364dbe --- /dev/null +++ b/v0.3.4.5/doc/html/en/CryptoBoxDevCustomBuild.html @@ -0,0 +1,85 @@ + + + + + +
+

+

+ +

+

+Navigation: ( CryptoBoxDev, CryptoBoxDevBackground, CryptoBoxDevPreparation, CryptoBoxDevWorkFlow) + +

+
+

Custom builds of the CryptoBox

+

Overview

+

+The following sections are useful, if you want to change the default settings of your personal CryptoBox development environment. +

+

+You should have completed the steps described in CryptoBoxDevPreparation. +

+

Settings

+

dfsbuild settings

+

+All settings for dfsbuild can be found in etc-defaults.d/dfs-cbox.conf. +

+

+If you want to change any of them, you should do the following: +

+
  1. copy etc-defaults.d/dfs-cbox.conf file to etc-local.d/ +
  2. change etc-local.d/dfs-cbox.conf according to your needs +

+This allows you to use your own (personal) settings, without interfering with files under version control. +

+

CryptoBox development configuration

+

+Some settings regarding the building, configuring and validating of the CryptoBox can be found in etc-defaults.d/cbox-dev.conf. +

+

+If you want to change any of them, you should do the following: +

+
  1. copy etc-defaults.d/cbox-dev.conf file to etc-local.d/ +
  2. change etc-local.d/cbox-dev.conf according to your needs +

SSH connection

+

+The file ssh_config is used to establish a connection to a running CryptoBox system. +

+

+It can be necessary to change these settings, if: +

+
  • you do not want to use the default IP for the CryptoBox +
  • or the CryptoBox is not within your local network. +

+If you want to change some settings, you should do the following: +

+
  1. copy etc-defaults.d/ssh_config file to etc-local.d/ +
  2. change etc-local.d/ssh_config according to your needs +

qemu network configuration

+

+The file etc-defauolts.d/qemu-ifup is used for the CryptoBox emulation with qemu. See man qemu for details. +

+

+If you want to change some settings, you should do the following: +

+
  1. copy etc-defaults.d/qemu-ifup file to etc-local.d/ +
  2. change etc-local.d/qemu-ifup according to your needs +

+

Comments

+

+ +

+
diff --git a/v0.3.4.5/doc/html/en/CryptoBoxDevCustomConfigure.html b/v0.3.4.5/doc/html/en/CryptoBoxDevCustomConfigure.html new file mode 100644 index 0000000..536ae8a --- /dev/null +++ b/v0.3.4.5/doc/html/en/CryptoBoxDevCustomConfigure.html @@ -0,0 +1,60 @@ + + + + + +
+

+

+

Table of Contents

+
    +
  1. Overview
  2. +
  3. Locations
  4. +
  5. Examples
  6. +
  7. Comments
  8. +
+
+ +

+

+Navigation: ( CryptoBoxDev) + +

+
+

Custom configuration of the CryptoBox

+

Overview

+

+You may change nearly every aspect of the CryptoBox by using the custom configuration hook directory. +

+

+Any script inside of this directory will be executed after the default configuration procedure (see CryptoBoxDevWorkFlow). +

+

+The order of execution is defined by the names of the scripts (alphabetically). +

+

Locations

+

+Some example customization scripts can be found in configure-examples.d/. +

+

+You may put your scripts into configure-local.d/. They will be sourced by cbox-build.sh. +

+

Examples

+

+The examples in configure-examples.d/ can be copied to configure-local.d/ and adjusted to your needs. +

+ +
set_default_ipchange the default IP address of the CryptoBox +
set_default_languageset the default language +
set_default_timeoutset the default idle time for automatic unmounting +
set_hostnamechange the default hostname +
set_root_pwchange the password of root (only useful for a development CryptoBox) +
import_authorized_keysupload a ssh key for passwordless access to a development CryptoBox +
set_scan_deviceswhere to look for usable harddisks +
+
+

Comments

+

+ +

+
diff --git a/v0.3.4.5/doc/html/en/CryptoBoxDevKnownProblems.html b/v0.3.4.5/doc/html/en/CryptoBoxDevKnownProblems.html new file mode 100644 index 0000000..3dcc08e --- /dev/null +++ b/v0.3.4.5/doc/html/en/CryptoBoxDevKnownProblems.html @@ -0,0 +1,46 @@ + + + + + +
+

+

+ +

+

+Navigation: ( CryptoBoxDev) + +

+
+

Known problems

+

qemu

+

interleaved files not (yet) supported

+

+You should update qemu to version 0.7 or higher. +

+

smbd: segfault

+

+This happens under certain circumstances. We do not know a solution for this problem. +

+

dfsbuild

+

can't cd to _builddir/target/var/lib/apt/lists

+

+Try to downgrade cdebootstrap to v0.3.4 (for debian: apt-get install cdebootstrap/stable). This problem occours at least up to v0.3.8 of cdebootstrap. +

+
+

Comments

+

+ +

+
diff --git a/v0.3.4.5/doc/html/en/CryptoBoxDevPreparation.html b/v0.3.4.5/doc/html/en/CryptoBoxDevPreparation.html new file mode 100644 index 0000000..a5e9ba8 --- /dev/null +++ b/v0.3.4.5/doc/html/en/CryptoBoxDevPreparation.html @@ -0,0 +1,77 @@ + + + + + +
+

+

+ +

+

+Navigation: ( CryptoBoxDev, CryptoBoxDevCustomBuild, CryptoBoxDevWorkFlow) + +

+
+

Preparations for developers

+

Software requirements

+

Packages

+

+We use Debian as our development environment. This was a natural choice, as the CryptoBox-LiveCD is also based on Debian. Other distributions should work too, of course - your mileage may vary. +

+

+required: +

+

+recommended: +

+

Kernel

+

+If you want to use qemu to test your CryptoBox in a virtual environment, then you will need the tun/tap kernel feature. +

+
CONFIG_TUN=m
+

Get the source

+

+Download the latest release from our subversion-Repository: +

+
svn checkout https://svn.systemausfall.org/svn/cryptobox/trunk
+

First build

+

+run scripts/cbox-build.sh release as root - hopefully, there should be no errors :) +

+

+Hint: This step will fail, if you did not install apt-cacher. See CryptoBoxDevCustomBuild for details on how to change the build-configuration settings (in this case: mirror in dfs-cbox.conf). +

+

Finished

+

+Now you can start to pariticipate in the development of the CryptoBox or simply customize your own CryptoBox-LiveCD. +

+

+See CryptoBoxDevWorkFlow for details of how to use the developer's tools of the CryptoBox. +

+

+CryptoBoxDevCustomBuild shows some examples for local customizations of the CryptoBox. +

+
+

Comments

+

+ +

+
diff --git a/v0.3.4.5/doc/html/en/CryptoBoxDevValidation.html b/v0.3.4.5/doc/html/en/CryptoBoxDevValidation.html new file mode 100644 index 0000000..2f62d45 --- /dev/null +++ b/v0.3.4.5/doc/html/en/CryptoBoxDevValidation.html @@ -0,0 +1,78 @@ + + + + + +
+

+

+

Table of Contents

+
    +
  1. Overview
  2. +
  3. Validate
  4. +
  5. How to create a test
  6. +
  7. Comments
  8. +
+
+ +

+

+Navigation: ( CryptoBoxDev) + +

+
+

Validation of the CryptoBox

+

Overview

+

+The validation feature helps you to check the programming logic of the CryptoBox. A lot of test cases are defined to verify as many functions of the CryptoBox as possible. +

+

+The requests are processed with curl. +

+

+The received web page is saved to allow a later design review or css debugging. +

+

+The current state of the CryptoBox is represented by ten single values (e.g.: box is configured, IP of the box, current language setting, ...), which are invisibly a part of each html page (as comments). The returned status of every request is compared to the predicted value of the test case. +

+

+Similar test cases are pooled into test groups (e.g.: initialization, configuration and mounting). +

+

Validate

+

+Run scripts/validate.sh] to conduct all tests of all groups. See scripts/validate.sh help for other actions. +

+

+The results will be saved in validation/report. +

+

+In addition to every single retrieved page, a html page called summary-?.html is created, which contains the state checks of all tests in a group. +

+

How to create a test

+

+All test cases can be found in validation/test-cases. +

+

+Every test consists of the following files: +

+ +
input.curlthe configuration file for the curl request +
outputthe predicted state of the CryptoBox after the call +
descriptiona short description of the test (will be used for the summary) +
delay[optional] time to wait after this test +
+

+Use the existing test cases as templates for new tests. +

+

+Read validation/test-cases/README for details. +

+

+Every logical path of the web interface CGI should be validated by a test case. +

+
+

Comments

+

+ +

+
diff --git a/v0.3.4.5/doc/html/en/CryptoBoxDevWorkFlow.html b/v0.3.4.5/doc/html/en/CryptoBoxDevWorkFlow.html new file mode 100644 index 0000000..f70a97e --- /dev/null +++ b/v0.3.4.5/doc/html/en/CryptoBoxDevWorkFlow.html @@ -0,0 +1,156 @@ + + + + + +
+

+

+ +

+

+Navigation: ( CryptoBoxDev, CryptoBoxDevCustomConfigure, CryptoBoxDevPreparation) + +

+
+

Development workflow

+

Preparations

+

+You should have completed the steps described in CryptoBoxDevPreparation. +

+

Create a CryptoBox-LiveCD

+

+The following steps can be executed in the order of their appearance. +

+

+Usually there is no need to repeat the whole process, after you changed some parts of the CryptoBox. Especially the first step (building of the base system with dfsbuild) may usually be skipped. +

+

+Every step of the building process must be executed as root. +

+

Build the base system

+

+Run scripts/cbox-build.sh dfsbuild to create the base system for the LiveCD. +

+

+The result can be found in _builddir/cd1/image. +

+

+If you do not want to use the apt-cacher to save bandwidth and time, then you should modify the mirror-setting in dfs-cbox.conf (see CryptoBoxDevCustomBuild for details). +

+

Configure the base image

+

+Run scripts/cbox-build.sh config to copy the CryptoBox-specific files to the base image. +

+

+TODO: link to cbox-build.sh-manpage +

+

Remove development features

+

+The original base system, that was created by dfsbuild contains a lot packages and some scripts, that are only useful during development. You should remove them, as they cause severe security implications. +

+

+To reduce the CryptoBox-LiveCD to the usable minimum for operational use, you should run scripts/cbox-build.sh harden. +

+

Create an iso image

+

+To burn a CryptoBox-LiveCD, you need an bootable iso9660-image. +

+

+Create the iso image with scripts/cbox-build.sh iso. The resulting file can be found at _builddir/cd1/cryptobox.iso. +

+

Burn the CD

+

+Do it manually: +

+
cdrecord -v dev=0,0,0 _builddir/cryptobox.iso
+

+(change the dev setting according to your setup). +

+

+Let the script do it for you: scripts/cbox-build.sh burn (maybe you have to change the CDWRITER setting in cbox-dev.conf - see CryptoBoxDevCustomBuild). +

+

+Of course, it is not wise to use CD-R media. CD-RW consume less resources. +

+

Test the CryptoBox-LiveCD

+

+This section is only useful for developers, who want to improve or change the CryptoBox system. +

+

Chroot: quick & dirty tests

+

+If you modified the perl- or shell-scripts of the CryptoBox, then you can check for syntax errors by running them in a chroot environment. Be careful: you have access to all ressources of your computer, while you are working within a chroot environment - so you can easily repartition your real disk ... +

+

+To start a chroot environment, you can execute scripts/cbox-dev.sh chroot. +

+

+For more intensive tests, you may use qemu (see below) or burn real LiveCDs - of course this would take much more time. +

+

Qemu: nearly complete emulation

+

+The processor emulator qemu allows you test the CryptoBox in a virtual environment, that is completely separated from your real computer's resources. It is the tool of choice, if you do nat have a real computer around for testing. +

+

+Beware - there are some problems, when using qemu: +

+
  • smbd does not start (segfault) +
  • ??? +

+To start a qemu emulation of the iso image, you may type: +

+
scripts/cbox-dev.sh qemu
+

Debugging and merging

+

+This section is only useful for developers, who want to develop on a running CryptoBox system (emulated or real). +

+

+You may access the CryptoBox directly or you can use ssh to open a remote session: +

+
./cbox-dev.sh ssh
+

Development on a running system

+

+When you run an emulation or test a real LiveCD, you may encounter problems and bugs. To test your fixes for these problems, it is convenient, to change the running test system. Afterwards you can merge these changes to your local development copy. +

+

+Type scripts/cbox-dev.sh diff to see the changes, you made on the running CryptoBox system. +

+

+Type scripts/cbox-dev.sh merge to merge these changes to your local working copy. +

+

Copying a testversion

+

+Alternatively you may also upload a new version of your local working copy to the running CryptoBox system. +

+

+Type scripts/cbox-dev.sh upload - beware: all recent changes you made to the running CryptoBox system, are lost. +

+

Setting up a new Release

+

+Once you finished your development, you surely want to make a new release. Please read the instructions in the releas-policy.txt it will save you a lot of time! Then you basically just have to run scripts/cbox-build.sh release and get yourself a good coffee. After the command has finished you'll see the releasefiles in _buildir. +

+
+

Comments

+

+ +

+
diff --git a/v0.3.4.5/doc/html/en/CryptoBoxUser.html b/v0.3.4.5/doc/html/en/CryptoBoxUser.html new file mode 100644 index 0000000..4f8ccbc --- /dev/null +++ b/v0.3.4.5/doc/html/en/CryptoBoxUser.html @@ -0,0 +1,60 @@ + + + + + +
+

+

+ +

+

+Navigation: ( CryptoBox/en, CryptoBoxUser) + +

+
+

User Documentation

+

+The following pages describe the easy use of the CryptoBox. +

+

+The online version of this manual is a wiki, which means you can edit the pages. So if you have a question or you perceive a description as unclear, please post it on the bottom of the relevant page. The developers will answer your questions and update the manual as fast as possible. This way you can contribute in making the CryptoBox a better experience for everyone! +

+
  1. CryptoBoxUserGettingStarted -- first steps to get the Cryptobox up and running +
  2. CryptoBoxUserConfiguration -- configure the details of your new encrypted fileserver +
  3. CryptoBoxUserDailyUse -- daily use of your CryptoBox +

+The online version of this manual can be found at https://systemausfall.org/trac/cryptobox/wiki/CryptoBoxUser/en. +

+
+

Comments

+

+ +

+
diff --git a/v0.3.4.5/doc/html/en/CryptoBoxUserConfiguration.html b/v0.3.4.5/doc/html/en/CryptoBoxUserConfiguration.html new file mode 100644 index 0000000..7664310 --- /dev/null +++ b/v0.3.4.5/doc/html/en/CryptoBoxUserConfiguration.html @@ -0,0 +1,125 @@ + + + + + +
+

+

+ +

+

+Navigation: ( CryptoBoxUser/en, CryptoBoxUserConfiguration) + +

+
+

Configuration of your CryptoBox

+

Overview

+

+All parts of administration of the CryptoBox are done through a comfortable web interface. If this is the first time you use the CryptoBox, just follow the steps below. +

+

+You can safely ignore the Foreword if you are in a hurry. +

+

+Initialization describes the process of integrating a new harddisk. You usually have to perform this steps if you start with a new CryptoBox or after replacing the harddisk. +

+

+In the Configuration section, you can configure the CryptoBox according to your personal needs, e.g. change your desired language for the web interface or change the IP address of the CryptoBox. +

+

+Do not forget to read the Hints / Caveats section too. +

+

Foreword

+

+Okay, you finished the CryptoBoxUserGettingStarted and are now sitting in front of a computer that is connected via network with your CryptoBox. You point a browser to "https://192.168.0.23" and the CryptoBox interface appears. +

+

+Before you can save data on your CryptoBox, its harddisk has to be formatted with a cryptographic filesystem. Sounds complicated but don't be scared - it's really a "one click" thing. :) +

+

Initialization

+

+Click on Initialize CryptoBox in the title bar. +

+

+en_init.png +

+

+Now you are promted to enter two passwords twice (because we want to train your typing skills ;). +

+
  • The first password is the administration password. +
    • It is used to protect the configuration of the CryptoBox. +
    • This is necessary to make sure, that no one without your permission can destroy your data by re-initializing the CryptoBox. +
    • Chances are good, that you will only need it once. +
    • You may leave it empty, but this is not recommended. +
  • The crypto password is the more important password, protecting the data on your harddisk. Choose it wisely! +
    • You will need it, whenever you want to access your encrypted data. +
    • For a secure password consider a length of at least 15 characters including digits and special characters. The security of your encrypted data stands or falls with a good password. +
  • To avoid mistakes and to remind you on what you're going to do, you have to type the displayed red phrase into the last field. +
  • Now you can complete the initialization by clicking on the Initialize !CryptoBox button at the bottom of the form. +

+That's all. Wasn't it a real "one click" thing? Cryptography has never been easier to use. ;) +

+

+The initialization process takes place in the background and will be completed after a few minutes, depending on your harddisk's size. +

+

Configuration

+

+While the initialization is usually done only once, the configuration can be changed at any time you want. You can reach it by clicking at Configuration in the menu bar of the website. Now you see a form with four fields: +

+

+en_config.png +

+
  • If you defined an administration password during Initialization, you have to enter it first. Otherwise this field does not appear. +
  • If the default network address (IP) doesn't fit into your network infrastructure, you can change it in the second field. +
  • The timeout defines the amount of time (in minutes) after that the CryptoBox deactivates the access to the encrypted data. If you e.g. copy a file on the box, it starts counting at zero, so down-/uploads won't be interrupted. +
  • It's good choice to enter a small number (few minutes). +
  • A timeout of 0 turns off the automatic deactivation - this is not recommended. +
  • At language preferences you can select the default language for the CryptoBox interface. +

+Complete your changes by clicking on Save configuration. +

+

+That's all - your CryptoBox is now ready for daily use! +

+

Hints / Caveats

+
  • All data on the CryptoBox harddisk will be erased during Initialization. +
  • All passwords have to be typed twice to reduce the chance of a typo. +
  • The optional adminstration password is necessary for configuration only. +
  • The crypto password protects your beloved data. +
  • If the cryptobox is not reachable by browsing to 192.168.0.23, you may have to adjust the network settings of your computer for initialization of the CryptoBox. +

+back to CryptoBoxUser +

+
+

Comments

+

+ +

+
diff --git a/v0.3.4.5/doc/html/en/CryptoBoxUserDailyUse.html b/v0.3.4.5/doc/html/en/CryptoBoxUserDailyUse.html new file mode 100644 index 0000000..8d0a00d --- /dev/null +++ b/v0.3.4.5/doc/html/en/CryptoBoxUserDailyUse.html @@ -0,0 +1,138 @@ + + + + + +
+

+

+ +

+

+Navigation: ( CryptoBoxUser/en, CryptoBoxUserConfiguration/en, CryptoBoxUserDailyUse) + +

+
+

Daily use of the CryptoBox

+

Activate your encrypted filesystem

+

+You can activate your encrypted filesystem by doing following these steps: +

+
  • Point your web browser at the address of your CryptoBox. The default is https://192.168.0.23. +
  • Click on Activation of encrypted data. A new page asking for your crypto password appears. +
  • Enter your crypto password and click on the button below labeled activate encrypted filesystem. +

+Now the filesystem is accessible. To use it, search for a computer in your network neighborhood. When asked for the name, enter the above IP address (default: 192.168.0.23). Now you can use it like any other network resource. +

+

Use your encrypted data

+

Linux - command line

+

+To use the encrypted data partition with regular user rights add the line below to your /etc/fstab: +

+
//192.168.0.23/public   /mnt/    smbfs   defaults,noexec,noauto,user,guest      0       0
+

+Now you can mount the encrypted data partition to /mnt: +

+
mount /mnt
+

+resp. unmount: +

+
smbumount /mnt
+

Windows

+

+Run the the Windows Explorer and choose Map network drive in the Tools menu: +

+
  • select a drive of your choice +
  • enter \\192.168.0.23\public (default setting) as target +

+en_w98_network_drive.png +

+

+Now you can use your encrypted data like any other network resource. +

+

Deactivate your encrypted filesystem

+

+You can deactivate the encrypted filesystem by clicking at Deactivation of encrypted data in the web interface of your CryptoBox. +

+

+Your data is now protected again. +

+

Shut down your CryptoBox

+

+Click at the Shutdown link in the menu of the web interface. There you can choose poweroff or reboot. The shutdown takes some seconds. +

+

+If the hardware of your CryptoBox is quite recent, it will power-off automatically. Otherwise you have to do it manually. +

+

In case of emergency

+

+If you have to protect the drive really fast, just power-off the CryptoBox machine instantly by pulling the plug or pushing the power button. This is not very clean and can (in very rare circumstances) corrupt open files, but it is the fastest method to secure your data. +

+

+back to CryptoBoxUser +

+
+

Questions and Answers

+

Windows: network drive cannot be mapped

+

+en_w98_not_logged_in.png +

+

+This error message may appear, if you did not login during the booting of you windows machine (or you closed the login dialog by pressing ESC). +

+

+Solution: Choose Logout in the Start menu and login again. +

+

+en_w98_login.png +

+

Linux: only root can unmount //192.168.0.23/public

+

+You can't unmount the partition with umount. +

+

+Solution: Use smbumount instead: +

+
smbumount /mnt
+

Linux: Operation not permitted / smbmnt failed: 1

+

+The attempt to mount the partition as a regular user ends up with: +

+
cannot mount on /mnt/: Operation not permitted
+smbmnt failed: 1
+

+Solution: Set the directory's owner to the same user that mounts the share (e.g. phil): +

+
chown phil. /mnt
+

+

Comments

+

+ +

+
diff --git a/v0.3.4.5/doc/html/en/CryptoBoxUserGettingStarted.html b/v0.3.4.5/doc/html/en/CryptoBoxUserGettingStarted.html new file mode 100644 index 0000000..3a37b84 --- /dev/null +++ b/v0.3.4.5/doc/html/en/CryptoBoxUserGettingStarted.html @@ -0,0 +1,83 @@ + + + + + +
+

+

+ +

+

+Navigation: ( CryptoBoxUser/en, CryptoBoxUserConfiguration/en, CryptoBoxUserDailyUse/en, CryptoBoxUserGettingStarted) + +

+
+

Getting started

+

First Steps

+

+Getting the CryptoBox started doesn't take much: +

+
  1. You need an old Computer (at least 100MHz, 48MB RAM) (rule of thumb: bought at least after 1996). This PC needs a network card, a CD-ROM drive and a huge harddisk. +
    • Well the disk doesn't need to be huge, it should just suit your filestorage needs ;) +
    • You don't need a monitor or a keyboard to use your CryptoBox (with one exception, see below). +
    • Of course, you may use a faster computer, but they usually consume much more energy and do not provide signifcant advantages. +
  2. Then download the latest version of the CryptoBox as an iso-image and burn this image onto a CD. +
  3. Configure your PC, so it can boot from the CD. Therefore you have to enter the BIOS and configure the CD-ROM as boot device. +
  4. Insert the shiny new CryptoBox CD you've just burned and start the computer. +

+ +If it now boots from the CD, you accomplished all of the requirements. +

+

+Now you can just go to your current desktop computer and point your browser to https://192.168.0.23 where the CryptoBox interface should be displayed. Easy - isn't it? +

+

+For further steps go to CryptoBoxUserConfiguration. +

+

Hints / Caveats

+

+ +

+
  • Maybe you need to change the network address (IP) of your PC to configure the CryptoBox for the first time. Ask someone for help, if you don't know how and why ... +
  • If you're going to buy a new harddisk keep in mind that very old hardware can't handle current disk sizes! +
  • Some old PCs are not able to boot from CD. +
  • If you don't know what a BIOS is, better ask someone, before you try to change something. ;) +
  • Don't forget to connect your PC to your local area network! +
  • To configure the BIOS, you need a keyboard and a monitor. But this has to be done only once. +

+back to CryptoBoxUser +

+
+

Comments

+

+ +

+
diff --git a/v0.3.4.5/event-scripts/README b/v0.3.4.5/event-scripts/README new file mode 100644 index 0000000..c6f82ba --- /dev/null +++ b/v0.3.4.5/event-scripts/README @@ -0,0 +1,35 @@ +Event scripts for CryptoBox events + +If you want to execute specific actions according to changes of the cryptobox, +then you can just add your own scripts to this directory. +These scripts are called with root user permissions. + +The common synopsis for all event scripts is: + SCRIPTNAME EVENT [[EVENT_INFOS]...] + + +1) Possible events +Supported events: + premount|postmount|preumount|postumount: + called before and after (u)mounting of a volume + arguments (in this order): + - device: name of the underlying device + - vol_name: name of the (u)mounted volume + - vol_type: type of the volume (plain|luks) + - mount_dir: mountpoint of the volume + + +2) Preperation of event scripts +Every event script has to fulfill the following conditions: + - be executable (for the cryptobox user and for root) + - be writeable for root only + - its parent directories must be writeable for root only + - the directory of the script must contain a file called '_event_scripts_' (to prevent abuse) + + +3) Storing settings +If your custom event script needs to write information to a file, then it +should create this file below /var/cache/cryptobox-server/settings/misc/. +(adapt this directory to your setup, if you changed the default settings of +[Locations]->SettingsDir) + diff --git a/v0.3.4.5/event-scripts/_event_scripts_ b/v0.3.4.5/event-scripts/_event_scripts_ new file mode 100644 index 0000000..28ad2c4 --- /dev/null +++ b/v0.3.4.5/event-scripts/_event_scripts_ @@ -0,0 +1,6 @@ +DO NOT REMOVE THIS FILE + +This file is part of the CryptoBox package. +Event scripts in this directory will not get executed, if this file is missing. +It is just a marker ... + diff --git a/v0.3.4.5/event-scripts/apache2_dav b/v0.3.4.5/event-scripts/apache2_dav new file mode 100755 index 0000000..2e8dd19 --- /dev/null +++ b/v0.3.4.5/event-scripts/apache2_dav @@ -0,0 +1,110 @@ +#!/bin/sh +# +# Manage apache webdav +# - after mounting: add the new webdav share +# - before umounting: disable and remove the webdav share +# +# This script assumes, that you added the apache2_dav.conf file +# (/usr/share/doc/cryptobox/conf-examples/) to your apache configuration directory +# (e.g. /etc/apache2/conf.d) +# +# +# Params: $event $device $volume_name $volume_type $mount_dir +# +# event: premount | postmount | preumount | postumount +# device: name of the device +# volume_name: name of the volume +# volume_type: plain | luks +# mount_dir: mount directory +# + +set -eu + +# ------------=-=-=- some settings -=-=-=----------------- +# adapt this part of the file to your setup + +APACHE_SCRIPT=/etc/init.d/apache2 +APACHE_CONF_DIR=/var/cache/cryptobox/settings/misc/apache2_dav.conf.d + +# this apache config snippet is used for every published volume +# _VOLUME_NAME_ and _SHARE_DIR_ are replaced by their actual values +APACHE_SHARE_TEMPLATE=$(cat - <<-"EOF" + # this file is part of the CryptoBox + Alias "/cryptobox/_VOLUME_NAME_" "_SHARE_DIR_" + + Dav filesystem + +EOF +) + +# -----=-=-=- check arguments and the environment -=-=-=---- + +# exit if apache2 is not installed +if test -x "$APACHE_SCRIPT" + then true + else echo "apache2 is not installed ('$APACHE_SCRIPT' not found)" >&2 + exit 1 + fi + +# create include-file directory +mkdir -p "$APACHE_CONF_DIR" + +# check event argument +if test "$#" -eq 0 + then echo "Syntax: $(basename $0) EVENT [EVENT_INFORMATION]" >&2 + exit 1 + fi + +event=$1 + +# ------------=-=-=- some functions -=-=-=----------------- + +# remove invalid config files +update_include_conf_dir() +{ + find "$APACHE_CONF_DIR" -type f -name "*.conf" | while read fname + do mdir=$(head -1 "$fname" | cut -f 4 -d '"') + test ! -d "$mdir" && rm "$fname" + done +} + +empty_conf_dir() +{ + find "$APACHE_CONF_DIR" -type f -name "*.conf" -print0 | xargs -0 rm +} + +send_reload_command() +{ + # reload config files + "$APACHE_SCRIPT" reload +} + +# -----------------=-=-=- main -=-=-=---------------------- + +case "$event" in + premount|postumount ) + ;; + postmount ) + vol_name=$3 + mount_dir=$5 + echo "$APACHE_SHARE_TEMPLATE" | sed "s#_SHARE_DIR_#$mount_dir#g; s#_VOLUME_NAME_#$vol_name#g" >"$APACHE_CONF_DIR/${vol_name}.conf" + update_include_conf_dir + send_reload_command + ;; + preumount ) + vol_name=$3 + rm "$APACHE_CONF_DIR/${vol_name}.conf" || true + update_include_conf_dir + send_reload_command + ;; + shutdown | bootup ) + empty_conf_dir + ;; + * ) + # ignore all events that we do not support + exit 0 + ;; + esac + +exit 0 + diff --git a/v0.3.4.5/event-scripts/samba b/v0.3.4.5/event-scripts/samba new file mode 100755 index 0000000..a096625 --- /dev/null +++ b/v0.3.4.5/event-scripts/samba @@ -0,0 +1,127 @@ +#!/bin/sh +# +# Manage samba shares +# - after mounting: add the new samba share +# - before umounting: disable and remove the samba share +# +# The following line _must_ be added to your /etc/samba/smb.conf: +# include = /var/cache/cryptobox-server/settings/misc/samba-include.conf +# and you should create this file and chown it to the cryptobox user: +# touch /var/cache/cryptobox-server/settings/misc/samba-include.conf +# +# +# Params: $event $device $volume_name $volume_type $mount_dir +# +# event: premount | postmount | preumount | postumount +# device: name of the device +# volume_name: name of the volume +# volume_type: plain | luks +# mount_dir: mount directory +# + +set -eu + +# --------------=-=-=- some settings -=-=-=---------------- +# adapt this part of the file to your needs + +SAMBA_CONTROL=smbcontrol +SAMBA_CONF_DIR=/var/cache/cryptobox-server/settings/misc/samba.conf.d +MAIN_SAMBA_CONF_FILE=/var/cache/cryptobox-server/settings/misc/samba-include.conf + +# this smb.conf snippet will get used for every published share +# _VOLUME_NAME and _SHARE_DIR_ are replaced by their actual values +SAMBA_SHARE_TEMPLATE=$(cat - <<-"EOF" + [_VOLUME_NAME_] + comment = CryptoBox share + path = _SHARE_DIR_ + read only = no + guest ok = yes +EOF +) + +# -----=-=-=- check environment and parameters -=-=-=------ + +# check if samba is installed +if which "$SAMBA_CONTROL" + then true + else echo "samba not installed ('$SAMBA_CONTROL' not found)" >&2 + exit 1 + fi + +# create include-file directory +mkdir -p "$SAMBA_CONF_DIR" + +# create the main include file +touch "$MAIN_SAMBA_CONF_FILE" + +# check event argument +if test "$#" -eq 0 + then echo "Syntax: $(basename $0) EVENT [EVENT_INFORMATION]" >&2 + exit 1 + fi + +event=$1 + +# ------------=-=-=- some functions -=-=-=----------------- + +update_include_conf_file() +{ + ( echo "# this file was automatically generated by the CryptoBox" + echo "# DO NOT EDIT - all changes will get lost!" + find "$SAMBA_CONF_DIR" -type f -name "*.conf" | while read fname + do mdir=$(grep "path.*=" "$fname" | cut -f 2 -d "=" | sed 's/^[ \t]*//') + # check if the mount directory still exists + if test -d "$mdir" + then echo "include = $fname" + else rm "$fname" + fi + done ) >"$MAIN_SAMBA_CONF_FILE" +} + +send_reload_command() +{ + # reload config files + "$SAMBA_CONTROL" smbd reload-config +} + +empty_conf_dir() +{ + find "$SAMBA_CONF_DIR" -type f -name "*.conf" -print0 | xargs -0 rm +} + +send_close_share_command() +{ + # close all connections and deny further requests + "$SAMBA_CONTROL" smbd close-share "$1" +} + +# -----------------=-=-=- main -=-=-=---------------------- + +case "$event" in + premount|postumount ) + ;; + postmount ) + vol_name=$3 + mount_dir=$5 + echo "$SAMBA_SHARE_TEMPLATE" | sed "s#_SHARE_DIR_#$mount_dir#g; s#_VOLUME_NAME_#$vol_name#g" >"$SAMBA_CONF_DIR/${vol_name}.conf" + update_include_conf_file + send_reload_command + ;; + preumount ) + vol_name=$3 + send_close_share_command "$vol_name" + rm "$SAMBA_CONF_DIR/${vol_name}.conf" || true + update_include_conf_file + send_reload_command + ;; + shutdown|bootup ) + empty_conf_dir + ;; + * ) + # ignore all unsupported events + exit 0 + ;; + esac + +exit 0 + diff --git a/v0.3.4.5/intl/cryptobox-server.pot b/v0.3.4.5/intl/cryptobox-server.pot new file mode 100644 index 0000000..c5789ee --- /dev/null +++ b/v0.3.4.5/intl/cryptobox-server.pot @@ -0,0 +1,143 @@ +#: Title.Top +msgid "The CryptoBox" +msgstr "" + +#: Title.Slogan +msgid "Privacy for the rest of us." +msgstr "" + +#: Title.Volume +msgid "Volume" +msgstr "" + +#: Title.AccessDenied +msgid "Access denied" +msgstr "" + +#: Text.EnterCurrentPassword +msgid "Enter the current password" +msgstr "" + +#: Text.EnterNewPassword +msgid "Enter new password" +msgstr "" + +#: Text.EnterSamePassword +msgid "Repeat new password" +msgstr "" + +#: Text.RedirectNote +msgid "Click here if your browser does not support automatic redirection." +msgstr "" + +#: Text.ProjectHomePage +msgid "Website of project" +msgstr "" + +#: Text.ProjectNote +msgid "The CryptoBox is a project of" +msgstr "" + +#: Text.ContainerName +msgid "Volume's name" +msgstr "" + +#: Button.EnableHelp +msgid "Enable help" +msgstr "" + +#: Button.DisableHelp +msgid "Disable help" +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Title +msgid "Busy volume" +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Text +msgid "This volume is currently busy. Please wait for a moment." +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Link.Text +msgid "Show all disks" +msgstr "" + +#: WarningMessage.AccessDenied.Title +msgid "Invalid access credentials" +msgstr "" + +#: WarningMessage.AccessDenied.Text +msgid "Sorry - you did not enter the right credentials! Maybe you should try the default setting: username=>'admin' / password=>'admin'." +msgstr "" + +#: WarningMessage.EmptyPassword.Title +msgid "Missing password" +msgstr "" + +#: WarningMessage.EmptyPassword.Text +msgid "You have to enter a password!" +msgstr "" + +#: WarningMessage.EmptyNewPassword.Title +msgid "Missing new password" +msgstr "" + +#: WarningMessage.EmptyNewPassword.Text +msgid "You have to enter a new password!" +msgstr "" + +#: WarningMessage.DifferentPasswords.Title +msgid "Different passwords" +msgstr "" + +#: WarningMessage.DifferentPasswords.Text +msgid "The passwords you entered did not match." +msgstr "" + +#: WarningMessage.InvalidDevice.Title +msgid "Invalid device" +msgstr "" + +#: WarningMessage.InvalidDevice.Text +msgid "The device you have chosen is invalid!" +msgstr "" + +#: WarningMessage.VolumeMayNotBeMounted.Title +msgid "The volume is open" +msgstr "" + +#: WarningMessage.VolumeMayNotBeMounted.Text +msgid "This action is not available while the volume is active. Please close it first." +msgstr "" + +#: WarningMessage.VolumeMayNotBeMounted.Link.Text +msgid "Close volume" +msgstr "" + +#: WarningMessage.InvalidAction.Title +msgid "Invalid request" +msgstr "" + +#: WarningMessage.InvalidAction.Text +msgid "Sorry - I do not know how to handle this request. If you think, that this is a bug, then you should send the most recent part of the CryptoBox log to info@cryptobox.org." +msgstr "" + +#: WarningMessage.InvalidAction.Link.Text +msgid "View log" +msgstr "" + +#: WarningMessage.RuntimeError.Title +msgid "Something weird happened" +msgstr "" + +#: WarningMessage.RuntimeError.Text +msgid "We (the developer of the CryptoBox) would like to fix this problem for you and others. Please send the most recent part of the CryptoBox log to info@cryptobox.org. Thanks for your contribution!" +msgstr "" + +#: WarningMessage.DeviceNotWriteable.Title +msgid "No write permissions" +msgstr "" + +#: WarningMessage.DeviceNotWriteable.Text +msgid "Sorry - the CryptoBox is not allowed to write on this device. Anyway it is still possible, that you can open it and change its content. Please ask the administrator of the CryptoBox in case you believe, that this is a mistake." +msgstr "" diff --git a/v0.3.4.5/intl/cs/cryptobox-server.po b/v0.3.4.5/intl/cs/cryptobox-server.po new file mode 100644 index 0000000..f69729f --- /dev/null +++ b/v0.3.4.5/intl/cs/cryptobox-server.po @@ -0,0 +1,158 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 11:59+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Title.Top +msgid "The CryptoBox" +msgstr "" + +#: Title.Slogan +msgid "Privacy for the rest of us." +msgstr "" + +#: Title.Volume +msgid "Volume" +msgstr "" + +#: Title.AccessDenied +msgid "Access denied" +msgstr "" + +#: Text.EnterCurrentPassword +msgid "Enter the current password" +msgstr "" + +#: Text.EnterNewPassword +msgid "Enter new password" +msgstr "" + +#: Text.EnterSamePassword +msgid "Repeat new password" +msgstr "" + +#: Text.RedirectNote +msgid "Click here if your browser does not support automatic redirection." +msgstr "" + +#: Text.ProjectHomePage +msgid "Website of project" +msgstr "" + +#: Text.ProjectNote +msgid "The CryptoBox is a project of" +msgstr "" + +#: Text.ContainerName +msgid "Volume's name" +msgstr "" + +#: Button.EnableHelp +msgid "Enable help" +msgstr "" + +#: Button.DisableHelp +msgid "Disable help" +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Title +msgid "Busy volume" +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Text +msgid "This volume is currently busy. Please wait for a moment." +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Link.Text +msgid "Show all disks" +msgstr "" + +#: WarningMessage.AccessDenied.Title +msgid "Invalid access credentials" +msgstr "" + +#: WarningMessage.AccessDenied.Text +msgid "Sorry - you did not enter the right credentials! Maybe you should try the default setting: username=>'admin' / password=>'admin'." +msgstr "" + +#: WarningMessage.EmptyPassword.Title +msgid "Missing password" +msgstr "" + +#: WarningMessage.EmptyPassword.Text +msgid "You have to enter a password!" +msgstr "" + +#: WarningMessage.EmptyNewPassword.Title +msgid "Missing new password" +msgstr "" + +#: WarningMessage.EmptyNewPassword.Text +msgid "You have to enter a new password!" +msgstr "" + +#: WarningMessage.DifferentPasswords.Title +msgid "Different passwords" +msgstr "" + +#: WarningMessage.DifferentPasswords.Text +msgid "The passwords you entered did not match." +msgstr "" + +#: WarningMessage.InvalidDevice.Title +msgid "Invalid device" +msgstr "" + +#: WarningMessage.InvalidDevice.Text +msgid "The device you have chosen is invalid!" +msgstr "" + +#: WarningMessage.VolumeMayNotBeMounted.Title +msgid "The volume is open" +msgstr "" + +#: WarningMessage.VolumeMayNotBeMounted.Text +msgid "This action is not available while the volume is active. Please close it first." +msgstr "" + +#: WarningMessage.VolumeMayNotBeMounted.Link.Text +msgid "Close volume" +msgstr "" + +#: WarningMessage.InvalidAction.Title +msgid "Invalid request" +msgstr "" + +#: WarningMessage.InvalidAction.Text +msgid "Sorry - I do not know how to handle this request. If you think, that this is a bug, then you should send the most recent part of the CryptoBox log to info@cryptobox.org." +msgstr "" + +#: WarningMessage.InvalidAction.Link.Text +msgid "View log" +msgstr "" + +#: WarningMessage.RuntimeError.Title +msgid "Something weird happened" +msgstr "" + +#: WarningMessage.RuntimeError.Text +msgid "We (the developer of the CryptoBox) would like to fix this problem for you and others. Please send the most recent part of the CryptoBox log to info@cryptobox.org. Thanks for your contribution!" +msgstr "" + +#: WarningMessage.DeviceNotWriteable.Title +msgid "No write permissions" +msgstr "" + +#: WarningMessage.DeviceNotWriteable.Text +msgid "Sorry - the CryptoBox is not allowed to write on this device. Anyway it is still possible, that you can open it and change its content. Please ask the administrator of the CryptoBox in case you believe, that this is a mistake." +msgstr "" diff --git a/v0.3.4.5/intl/da/cryptobox-server.po b/v0.3.4.5/intl/da/cryptobox-server.po new file mode 100644 index 0000000..f69729f --- /dev/null +++ b/v0.3.4.5/intl/da/cryptobox-server.po @@ -0,0 +1,158 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 11:59+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Title.Top +msgid "The CryptoBox" +msgstr "" + +#: Title.Slogan +msgid "Privacy for the rest of us." +msgstr "" + +#: Title.Volume +msgid "Volume" +msgstr "" + +#: Title.AccessDenied +msgid "Access denied" +msgstr "" + +#: Text.EnterCurrentPassword +msgid "Enter the current password" +msgstr "" + +#: Text.EnterNewPassword +msgid "Enter new password" +msgstr "" + +#: Text.EnterSamePassword +msgid "Repeat new password" +msgstr "" + +#: Text.RedirectNote +msgid "Click here if your browser does not support automatic redirection." +msgstr "" + +#: Text.ProjectHomePage +msgid "Website of project" +msgstr "" + +#: Text.ProjectNote +msgid "The CryptoBox is a project of" +msgstr "" + +#: Text.ContainerName +msgid "Volume's name" +msgstr "" + +#: Button.EnableHelp +msgid "Enable help" +msgstr "" + +#: Button.DisableHelp +msgid "Disable help" +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Title +msgid "Busy volume" +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Text +msgid "This volume is currently busy. Please wait for a moment." +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Link.Text +msgid "Show all disks" +msgstr "" + +#: WarningMessage.AccessDenied.Title +msgid "Invalid access credentials" +msgstr "" + +#: WarningMessage.AccessDenied.Text +msgid "Sorry - you did not enter the right credentials! Maybe you should try the default setting: username=>'admin' / password=>'admin'." +msgstr "" + +#: WarningMessage.EmptyPassword.Title +msgid "Missing password" +msgstr "" + +#: WarningMessage.EmptyPassword.Text +msgid "You have to enter a password!" +msgstr "" + +#: WarningMessage.EmptyNewPassword.Title +msgid "Missing new password" +msgstr "" + +#: WarningMessage.EmptyNewPassword.Text +msgid "You have to enter a new password!" +msgstr "" + +#: WarningMessage.DifferentPasswords.Title +msgid "Different passwords" +msgstr "" + +#: WarningMessage.DifferentPasswords.Text +msgid "The passwords you entered did not match." +msgstr "" + +#: WarningMessage.InvalidDevice.Title +msgid "Invalid device" +msgstr "" + +#: WarningMessage.InvalidDevice.Text +msgid "The device you have chosen is invalid!" +msgstr "" + +#: WarningMessage.VolumeMayNotBeMounted.Title +msgid "The volume is open" +msgstr "" + +#: WarningMessage.VolumeMayNotBeMounted.Text +msgid "This action is not available while the volume is active. Please close it first." +msgstr "" + +#: WarningMessage.VolumeMayNotBeMounted.Link.Text +msgid "Close volume" +msgstr "" + +#: WarningMessage.InvalidAction.Title +msgid "Invalid request" +msgstr "" + +#: WarningMessage.InvalidAction.Text +msgid "Sorry - I do not know how to handle this request. If you think, that this is a bug, then you should send the most recent part of the CryptoBox log to info@cryptobox.org." +msgstr "" + +#: WarningMessage.InvalidAction.Link.Text +msgid "View log" +msgstr "" + +#: WarningMessage.RuntimeError.Title +msgid "Something weird happened" +msgstr "" + +#: WarningMessage.RuntimeError.Text +msgid "We (the developer of the CryptoBox) would like to fix this problem for you and others. Please send the most recent part of the CryptoBox log to info@cryptobox.org. Thanks for your contribution!" +msgstr "" + +#: WarningMessage.DeviceNotWriteable.Title +msgid "No write permissions" +msgstr "" + +#: WarningMessage.DeviceNotWriteable.Text +msgid "Sorry - the CryptoBox is not allowed to write on this device. Anyway it is still possible, that you can open it and change its content. Please ask the administrator of the CryptoBox in case you believe, that this is a mistake." +msgstr "" diff --git a/v0.3.4.5/intl/de/cryptobox-server.po b/v0.3.4.5/intl/de/cryptobox-server.po new file mode 100644 index 0000000..8c7a0bc --- /dev/null +++ b/v0.3.4.5/intl/de/cryptobox-server.po @@ -0,0 +1,157 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 11:59+0100\n" +"PO-Revision-Date: 2007-02-03 21:34+0100\n" +"Last-Translator: Lars Kruse \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Title.Top +msgid "The CryptoBox" +msgstr "Die CryptoBox" + +#: Title.Slogan +msgid "Privacy for the rest of us." +msgstr "... und 1984 war gestern!" + +#: Title.Volume +msgid "Volume" +msgstr "Datenträger" + +#: Title.AccessDenied +msgid "Access denied" +msgstr "Zugriff verweigert" + +#: Text.EnterCurrentPassword +msgid "Enter the current password" +msgstr "Das aktuelle Passwort eingeben" + +#: Text.EnterNewPassword +msgid "Enter new password" +msgstr "Das neue Passwort eingeben" + +#: Text.EnterSamePassword +msgid "Repeat new password" +msgstr "Das neue Passwort wiederholen" + +#: Text.RedirectNote +msgid "Click here if your browser does not support automatic redirection." +msgstr "Klicke hier, falls dein Browser automatische Weiterleitungen nicht unterstützt." + +#: Text.ProjectHomePage +msgid "Website of project" +msgstr "Homepage des Projekts" + +#: Text.ProjectNote +msgid "The CryptoBox is a project of" +msgstr "Die CryptoBox ist ein Projekt von" + +#: Text.ContainerName +msgid "Volume's name" +msgstr "Name des Datenträgers" + +#: Button.EnableHelp +msgid "Enable help" +msgstr "Hilfe aktivieren" + +#: Button.DisableHelp +msgid "Disable help" +msgstr "Hilfe deaktivieren" + +#: AdviceMessage.VolumeIsBusy.Title +msgid "Busy volume" +msgstr "Datenträger beschäftigt" + +#: AdviceMessage.VolumeIsBusy.Text +msgid "This volume is currently busy. Please wait for a moment." +msgstr "Der Datenträger ist noch beschäftigt. Warte bitte einen Moment." + +#: AdviceMessage.VolumeIsBusy.Link.Text +msgid "Show all disks" +msgstr "Zeige alle Datenträger" + +#: WarningMessage.AccessDenied.Title +msgid "Invalid access credentials" +msgstr "Ungültige Zugangsdaten" + +#: WarningMessage.AccessDenied.Text +msgid "Sorry - you did not enter the right credentials! Maybe you should try the default setting: username=>'admin' / password=>'admin'." +msgstr "Tut mir Leid, du hast nicht die richtigen Zugangsdaten eingegeben! (Versuch es mit \"admin\" als Benutzername und als Passwort und ändere das Passwort bald.)" + +#: WarningMessage.EmptyPassword.Title +msgid "Missing password" +msgstr "Das Passwort fehlt" + +#: WarningMessage.EmptyPassword.Text +msgid "You have to enter a password!" +msgstr "Du musst ein Passwort eingeben!" + +#: WarningMessage.EmptyNewPassword.Title +msgid "Missing new password" +msgstr "Das neue Passwort fehlt" + +#: WarningMessage.EmptyNewPassword.Text +msgid "You have to enter a new password!" +msgstr "Du musst ein neues Passwort eingeben!" + +#: WarningMessage.DifferentPasswords.Title +msgid "Different passwords" +msgstr "Verschiedene Passworte" + +#: WarningMessage.DifferentPasswords.Text +msgid "The passwords you entered did not match." +msgstr "Die eingegebenen Passworte stimmen nicht überein." + +#: WarningMessage.InvalidDevice.Title +msgid "Invalid device" +msgstr "Ungültiger Datenträger" + +#: WarningMessage.InvalidDevice.Text +msgid "The device you have chosen is invalid!" +msgstr "Der ausgewählte Datenträger kann nicht verwendet werden." + +#: WarningMessage.VolumeMayNotBeMounted.Title +msgid "The volume is open" +msgstr "Der Datenträger ist geöffnet" + +#: WarningMessage.VolumeMayNotBeMounted.Text +msgid "This action is not available while the volume is active. Please close it first." +msgstr "Diese Aktion kann nicht durchgeführt werden, solange der Datenträger geöffnet ist. Bitte schließe ihn zuvor." + +#: WarningMessage.VolumeMayNotBeMounted.Link.Text +msgid "Close volume" +msgstr "Schließe Datenträger" + +#: WarningMessage.InvalidAction.Title +msgid "Invalid request" +msgstr "Ungültige Anfrage" + +#: WarningMessage.InvalidAction.Text +msgid "Sorry - I do not know how to handle this request. If you think, that this is a bug, then you should send the most recent part of the CryptoBox log to info@cryptobox.org." +msgstr "Entschuldigung - Ich weiss nicht, wie ich mit dieser Anfrage umgehen soll. Falls du denkst, dass dies ein Fehler der CryptoBox ist, dann sende den aktuellen Inhalt des CryptoBox-Protokolls an info@cryptobox.org." + +#: WarningMessage.InvalidAction.Link.Text +msgid "View log" +msgstr "Protokoll anzeigen" + +#: WarningMessage.RuntimeError.Title +msgid "Something weird happened" +msgstr "Unerwartete Ausnahmesituation" + +#: WarningMessage.RuntimeError.Text +msgid "We (the developer of the CryptoBox) would like to fix this problem for you and others. Please send the most recent part of the CryptoBox log to info@cryptobox.org. Thanks for your contribution!" +msgstr "Wir (die Entwickler der CryptoBox) würden das gerade aufgetretene Problem gern für dich und andere Nutzer beheben. Bitte sende dafür den aktuellen Inhalt des CryptoBox-Protokolls an info@cryptobox.org. Danke für deine Mithilfe!" + +#: WarningMessage.DeviceNotWriteable.Title +msgid "No write permissions" +msgstr "Keine Schreibrechte" + +#: WarningMessage.DeviceNotWriteable.Text +msgid "Sorry - the CryptoBox is not allowed to write on this device. Anyway it is still possible, that you can open it and change its content. Please ask the administrator of the CryptoBox in case you believe, that this is a mistake." +msgstr "Entschuldigung - die CryptoBox darf nicht auf diesen Datenträger schreiben. Dennoch ist es weiterhin möglich ihn zu öffnen und den Inhalt zu ändern. Wende dich an den Administrator, falls du denkst, dass es sich hierbei um einen Fehler handelt." diff --git a/v0.3.4.5/intl/en/cryptobox-server.po b/v0.3.4.5/intl/en/cryptobox-server.po new file mode 100644 index 0000000..35f79f5 --- /dev/null +++ b/v0.3.4.5/intl/en/cryptobox-server.po @@ -0,0 +1,144 @@ +#: Title.Top +msgid "The CryptoBox" +msgstr "The CryptoBox" + +#: Title.Slogan +msgid "Privacy for the rest of us." +msgstr "Privacy for the rest of us." + +#: Title.Volume +msgid "Volume" +msgstr "Volume" + +#: Title.AccessDenied +msgid "Access denied" +msgstr "Access denied" + +#: Text.EnterCurrentPassword +msgid "Enter the current password" +msgstr "Enter the current password" + +#: Text.EnterNewPassword +msgid "Enter new password" +msgstr "Enter new password" + +#: Text.EnterSamePassword +msgid "Repeat new password" +msgstr "Repeat new password" + +#: Text.RedirectNote +msgid "Click here if your browser does not support automatic redirection." +msgstr "Click here if your browser does not support automatic redirection." + +#: Text.ProjectHomePage +msgid "Website of project" +msgstr "Website of project" + +#: Text.ProjectNote +msgid "The CryptoBox is a project of" +msgstr "The CryptoBox is a project of" + +#: Text.ContainerName +msgid "Volume's name" +msgstr "Volume's name" + +#: Button.EnableHelp +msgid "Enable help" +msgstr "Enable help" + +#: Button.DisableHelp +msgid "Disable help" +msgstr "Disable help" + +#: AdviceMessage.VolumeIsBusy.Title +msgid "Busy volume" +msgstr "Busy volume" + +#: AdviceMessage.VolumeIsBusy.Text +#, fuzzy +msgid "This volume is currently busy. Please wait for a moment." +msgstr "This volume is currently busy. Please wait for a moment." + +#: AdviceMessage.VolumeIsBusy.Link.Text +msgid "Show all disks" +msgstr "Show all disks" + +#: WarningMessage.AccessDenied.Title +msgid "Invalid access credentials" +msgstr "Invalid access credentials" + +#: WarningMessage.AccessDenied.Text +msgid "Sorry - you did not enter the right credentials! Maybe you should try the default setting: username=>'admin' / password=>'admin'." +msgstr "Sorry - you did not enter the right credentials! Maybe you should try the default setting: username=>'admin' / password=>'admin'." + +#: WarningMessage.EmptyPassword.Title +msgid "Missing password" +msgstr "Missing password" + +#: WarningMessage.EmptyPassword.Text +msgid "You have to enter a password!" +msgstr "You have to enter a password!" + +#: WarningMessage.EmptyNewPassword.Title +msgid "Missing new password" +msgstr "Missing new password" + +#: WarningMessage.EmptyNewPassword.Text +msgid "You have to enter a new password!" +msgstr "You have to enter a new password!" + +#: WarningMessage.DifferentPasswords.Title +msgid "Different passwords" +msgstr "Different passwords" + +#: WarningMessage.DifferentPasswords.Text +msgid "The passwords you entered did not match." +msgstr "The passwords you entered did not match." + +#: WarningMessage.InvalidDevice.Title +msgid "Invalid device" +msgstr "Invalid device" + +#: WarningMessage.InvalidDevice.Text +msgid "The device you have chosen is invalid!" +msgstr "The device you have chosen is invalid!" + +#: WarningMessage.VolumeMayNotBeMounted.Title +msgid "The volume is open" +msgstr "The volume is open" + +#: WarningMessage.VolumeMayNotBeMounted.Text +msgid "This action is not available while the volume is active. Please close it first." +msgstr "This action is not available while the volume is active. Please close it first." + +#: WarningMessage.VolumeMayNotBeMounted.Link.Text +msgid "Close volume" +msgstr "Close volume" + +#: WarningMessage.InvalidAction.Title +msgid "Invalid request" +msgstr "Invalid request" + +#: WarningMessage.InvalidAction.Text +msgid "Sorry - I do not know how to handle this request. If you think, that this is a bug, then you should send the most recent part of the CryptoBox log to info@cryptobox.org." +msgstr "Sorry - I do not know how to handle this request. If you think, that this is a bug, then you should send the most recent part of the CryptoBox log to info@cryptobox.org." + +#: WarningMessage.InvalidAction.Link.Text +msgid "View log" +msgstr "View log" + +#: WarningMessage.RuntimeError.Title +msgid "Something weird happened" +msgstr "Something weird happened" + +#: WarningMessage.RuntimeError.Text +msgid "We (the developer of the CryptoBox) would like to fix this problem for you and others. Please send the most recent part of the CryptoBox log to info@cryptobox.org. Thanks for your contribution!" +msgstr "We (the developer of the CryptoBox) would like to fix this problem for you and others. Please send the most recent part of the CryptoBox log to info@cryptobox.org. Thanks for your contribution!" + +#: WarningMessage.DeviceNotWriteable.Title +msgid "No write permissions" +msgstr "No write permissions" + +#: WarningMessage.DeviceNotWriteable.Text +msgid "Sorry - the CryptoBox is not allowed to write on this device. Anyway it is still possible, that you can open it and change its content. Please ask the administrator of the CryptoBox in case you believe, that this is a mistake." +msgstr "Sorry - the CryptoBox is not allowed to write on this device. Anyway it is still possible, that you can open it and change its content. Please ask the administrator of the CryptoBox in case you believe, that this is a mistake." diff --git a/v0.3.4.5/intl/es/cryptobox-server.po b/v0.3.4.5/intl/es/cryptobox-server.po new file mode 100644 index 0000000..c7eb023 --- /dev/null +++ b/v0.3.4.5/intl/es/cryptobox-server.po @@ -0,0 +1,158 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:00+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Title.Top +msgid "The CryptoBox" +msgstr "" + +#: Title.Slogan +msgid "Privacy for the rest of us." +msgstr "" + +#: Title.Volume +msgid "Volume" +msgstr "" + +#: Title.AccessDenied +msgid "Access denied" +msgstr "" + +#: Text.EnterCurrentPassword +msgid "Enter the current password" +msgstr "" + +#: Text.EnterNewPassword +msgid "Enter new password" +msgstr "" + +#: Text.EnterSamePassword +msgid "Repeat new password" +msgstr "" + +#: Text.RedirectNote +msgid "Click here if your browser does not support automatic redirection." +msgstr "" + +#: Text.ProjectHomePage +msgid "Website of project" +msgstr "" + +#: Text.ProjectNote +msgid "The CryptoBox is a project of" +msgstr "" + +#: Text.ContainerName +msgid "Volume's name" +msgstr "" + +#: Button.EnableHelp +msgid "Enable help" +msgstr "" + +#: Button.DisableHelp +msgid "Disable help" +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Title +msgid "Busy volume" +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Text +msgid "This volume is currently busy. Please wait for a moment." +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Link.Text +msgid "Show all disks" +msgstr "" + +#: WarningMessage.AccessDenied.Title +msgid "Invalid access credentials" +msgstr "" + +#: WarningMessage.AccessDenied.Text +msgid "Sorry - you did not enter the right credentials! Maybe you should try the default setting: username=>'admin' / password=>'admin'." +msgstr "" + +#: WarningMessage.EmptyPassword.Title +msgid "Missing password" +msgstr "" + +#: WarningMessage.EmptyPassword.Text +msgid "You have to enter a password!" +msgstr "" + +#: WarningMessage.EmptyNewPassword.Title +msgid "Missing new password" +msgstr "" + +#: WarningMessage.EmptyNewPassword.Text +msgid "You have to enter a new password!" +msgstr "" + +#: WarningMessage.DifferentPasswords.Title +msgid "Different passwords" +msgstr "" + +#: WarningMessage.DifferentPasswords.Text +msgid "The passwords you entered did not match." +msgstr "" + +#: WarningMessage.InvalidDevice.Title +msgid "Invalid device" +msgstr "" + +#: WarningMessage.InvalidDevice.Text +msgid "The device you have chosen is invalid!" +msgstr "" + +#: WarningMessage.VolumeMayNotBeMounted.Title +msgid "The volume is open" +msgstr "" + +#: WarningMessage.VolumeMayNotBeMounted.Text +msgid "This action is not available while the volume is active. Please close it first." +msgstr "" + +#: WarningMessage.VolumeMayNotBeMounted.Link.Text +msgid "Close volume" +msgstr "" + +#: WarningMessage.InvalidAction.Title +msgid "Invalid request" +msgstr "" + +#: WarningMessage.InvalidAction.Text +msgid "Sorry - I do not know how to handle this request. If you think, that this is a bug, then you should send the most recent part of the CryptoBox log to info@cryptobox.org." +msgstr "" + +#: WarningMessage.InvalidAction.Link.Text +msgid "View log" +msgstr "" + +#: WarningMessage.RuntimeError.Title +msgid "Something weird happened" +msgstr "" + +#: WarningMessage.RuntimeError.Text +msgid "We (the developer of the CryptoBox) would like to fix this problem for you and others. Please send the most recent part of the CryptoBox log to info@cryptobox.org. Thanks for your contribution!" +msgstr "" + +#: WarningMessage.DeviceNotWriteable.Title +msgid "No write permissions" +msgstr "" + +#: WarningMessage.DeviceNotWriteable.Text +msgid "Sorry - the CryptoBox is not allowed to write on this device. Anyway it is still possible, that you can open it and change its content. Please ask the administrator of the CryptoBox in case you believe, that this is a mistake." +msgstr "" diff --git a/v0.3.4.5/intl/fi/cryptobox-server.po b/v0.3.4.5/intl/fi/cryptobox-server.po new file mode 100644 index 0000000..c7eb023 --- /dev/null +++ b/v0.3.4.5/intl/fi/cryptobox-server.po @@ -0,0 +1,158 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:00+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Title.Top +msgid "The CryptoBox" +msgstr "" + +#: Title.Slogan +msgid "Privacy for the rest of us." +msgstr "" + +#: Title.Volume +msgid "Volume" +msgstr "" + +#: Title.AccessDenied +msgid "Access denied" +msgstr "" + +#: Text.EnterCurrentPassword +msgid "Enter the current password" +msgstr "" + +#: Text.EnterNewPassword +msgid "Enter new password" +msgstr "" + +#: Text.EnterSamePassword +msgid "Repeat new password" +msgstr "" + +#: Text.RedirectNote +msgid "Click here if your browser does not support automatic redirection." +msgstr "" + +#: Text.ProjectHomePage +msgid "Website of project" +msgstr "" + +#: Text.ProjectNote +msgid "The CryptoBox is a project of" +msgstr "" + +#: Text.ContainerName +msgid "Volume's name" +msgstr "" + +#: Button.EnableHelp +msgid "Enable help" +msgstr "" + +#: Button.DisableHelp +msgid "Disable help" +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Title +msgid "Busy volume" +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Text +msgid "This volume is currently busy. Please wait for a moment." +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Link.Text +msgid "Show all disks" +msgstr "" + +#: WarningMessage.AccessDenied.Title +msgid "Invalid access credentials" +msgstr "" + +#: WarningMessage.AccessDenied.Text +msgid "Sorry - you did not enter the right credentials! Maybe you should try the default setting: username=>'admin' / password=>'admin'." +msgstr "" + +#: WarningMessage.EmptyPassword.Title +msgid "Missing password" +msgstr "" + +#: WarningMessage.EmptyPassword.Text +msgid "You have to enter a password!" +msgstr "" + +#: WarningMessage.EmptyNewPassword.Title +msgid "Missing new password" +msgstr "" + +#: WarningMessage.EmptyNewPassword.Text +msgid "You have to enter a new password!" +msgstr "" + +#: WarningMessage.DifferentPasswords.Title +msgid "Different passwords" +msgstr "" + +#: WarningMessage.DifferentPasswords.Text +msgid "The passwords you entered did not match." +msgstr "" + +#: WarningMessage.InvalidDevice.Title +msgid "Invalid device" +msgstr "" + +#: WarningMessage.InvalidDevice.Text +msgid "The device you have chosen is invalid!" +msgstr "" + +#: WarningMessage.VolumeMayNotBeMounted.Title +msgid "The volume is open" +msgstr "" + +#: WarningMessage.VolumeMayNotBeMounted.Text +msgid "This action is not available while the volume is active. Please close it first." +msgstr "" + +#: WarningMessage.VolumeMayNotBeMounted.Link.Text +msgid "Close volume" +msgstr "" + +#: WarningMessage.InvalidAction.Title +msgid "Invalid request" +msgstr "" + +#: WarningMessage.InvalidAction.Text +msgid "Sorry - I do not know how to handle this request. If you think, that this is a bug, then you should send the most recent part of the CryptoBox log to info@cryptobox.org." +msgstr "" + +#: WarningMessage.InvalidAction.Link.Text +msgid "View log" +msgstr "" + +#: WarningMessage.RuntimeError.Title +msgid "Something weird happened" +msgstr "" + +#: WarningMessage.RuntimeError.Text +msgid "We (the developer of the CryptoBox) would like to fix this problem for you and others. Please send the most recent part of the CryptoBox log to info@cryptobox.org. Thanks for your contribution!" +msgstr "" + +#: WarningMessage.DeviceNotWriteable.Title +msgid "No write permissions" +msgstr "" + +#: WarningMessage.DeviceNotWriteable.Text +msgid "Sorry - the CryptoBox is not allowed to write on this device. Anyway it is still possible, that you can open it and change its content. Please ask the administrator of the CryptoBox in case you believe, that this is a mistake." +msgstr "" diff --git a/v0.3.4.5/intl/fr/cryptobox-server.po b/v0.3.4.5/intl/fr/cryptobox-server.po new file mode 100644 index 0000000..8c4fbae --- /dev/null +++ b/v0.3.4.5/intl/fr/cryptobox-server.po @@ -0,0 +1,157 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:00+0100\n" +"PO-Revision-Date: 2006-12-20 21:00+0100\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Title.Top +msgid "The CryptoBox" +msgstr "La CryptoBox" + +#: Title.Slogan +msgid "Privacy for the rest of us." +msgstr "La vie privée pour nous autres." + +#: Title.Volume +msgid "Volume" +msgstr "" + +#: Title.AccessDenied +msgid "Access denied" +msgstr "" + +#: Text.EnterCurrentPassword +msgid "Enter the current password" +msgstr "" + +#: Text.EnterNewPassword +msgid "Enter new password" +msgstr "" + +#: Text.EnterSamePassword +msgid "Repeat new password" +msgstr "" + +#: Text.RedirectNote +msgid "Click here if your browser does not support automatic redirection." +msgstr "Cliquez ici si votre navigateur ne supporte pas la redirection automatique." + +#: Text.ProjectHomePage +msgid "Website of project" +msgstr "Site web du projet" + +#: Text.ProjectNote +msgid "The CryptoBox is a project of" +msgstr "La CryptoBox est un projet de" + +#: Text.ContainerName +msgid "Volume's name" +msgstr "Nom du conteneur" + +#: Button.EnableHelp +msgid "Enable help" +msgstr "" + +#: Button.DisableHelp +msgid "Disable help" +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Title +msgid "Busy volume" +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Text +msgid "This volume is currently busy. Please wait for a moment." +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Link.Text +msgid "Show all disks" +msgstr "" + +#: WarningMessage.AccessDenied.Title +msgid "Invalid access credentials" +msgstr "" + +#: WarningMessage.AccessDenied.Text +msgid "Sorry - you did not enter the right credentials! Maybe you should try the default setting: username=>'admin' / password=>'admin'." +msgstr "" + +#: WarningMessage.EmptyPassword.Title +msgid "Missing password" +msgstr "" + +#: WarningMessage.EmptyPassword.Text +msgid "You have to enter a password!" +msgstr "" + +#: WarningMessage.EmptyNewPassword.Title +msgid "Missing new password" +msgstr "" + +#: WarningMessage.EmptyNewPassword.Text +msgid "You have to enter a new password!" +msgstr "" + +#: WarningMessage.DifferentPasswords.Title +msgid "Different passwords" +msgstr "" + +#: WarningMessage.DifferentPasswords.Text +msgid "The passwords you entered did not match." +msgstr "" + +#: WarningMessage.InvalidDevice.Title +msgid "Invalid device" +msgstr "Device invalide" + +#: WarningMessage.InvalidDevice.Text +msgid "The device you have chosen is invalid!" +msgstr "Le device que vous avez choisi est invalide!" + +#: WarningMessage.VolumeMayNotBeMounted.Title +msgid "The volume is open" +msgstr "Le conteneur est monté" + +#: WarningMessage.VolumeMayNotBeMounted.Text +msgid "This action is not available while the volume is active. Please close it first." +msgstr "Cette action n'est pas disponible pendant que le conteneur est actif. Désactivez-le d'abord." + +#: WarningMessage.VolumeMayNotBeMounted.Link.Text +msgid "Close volume" +msgstr "" + +#: WarningMessage.InvalidAction.Title +msgid "Invalid request" +msgstr "" + +#: WarningMessage.InvalidAction.Text +msgid "Sorry - I do not know how to handle this request. If you think, that this is a bug, then you should send the most recent part of the CryptoBox log to info@cryptobox.org." +msgstr "" + +#: WarningMessage.InvalidAction.Link.Text +msgid "View log" +msgstr "" + +#: WarningMessage.RuntimeError.Title +msgid "Something weird happened" +msgstr "" + +#: WarningMessage.RuntimeError.Text +msgid "We (the developer of the CryptoBox) would like to fix this problem for you and others. Please send the most recent part of the CryptoBox log to info@cryptobox.org. Thanks for your contribution!" +msgstr "" + +#: WarningMessage.DeviceNotWriteable.Title +msgid "No write permissions" +msgstr "" + +#: WarningMessage.DeviceNotWriteable.Text +msgid "Sorry - the CryptoBox is not allowed to write on this device. Anyway it is still possible, that you can open it and change its content. Please ask the administrator of the CryptoBox in case you believe, that this is a mistake." +msgstr "" diff --git a/v0.3.4.5/intl/hu/cryptobox-server.po b/v0.3.4.5/intl/hu/cryptobox-server.po new file mode 100644 index 0000000..c7eb023 --- /dev/null +++ b/v0.3.4.5/intl/hu/cryptobox-server.po @@ -0,0 +1,158 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:00+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Title.Top +msgid "The CryptoBox" +msgstr "" + +#: Title.Slogan +msgid "Privacy for the rest of us." +msgstr "" + +#: Title.Volume +msgid "Volume" +msgstr "" + +#: Title.AccessDenied +msgid "Access denied" +msgstr "" + +#: Text.EnterCurrentPassword +msgid "Enter the current password" +msgstr "" + +#: Text.EnterNewPassword +msgid "Enter new password" +msgstr "" + +#: Text.EnterSamePassword +msgid "Repeat new password" +msgstr "" + +#: Text.RedirectNote +msgid "Click here if your browser does not support automatic redirection." +msgstr "" + +#: Text.ProjectHomePage +msgid "Website of project" +msgstr "" + +#: Text.ProjectNote +msgid "The CryptoBox is a project of" +msgstr "" + +#: Text.ContainerName +msgid "Volume's name" +msgstr "" + +#: Button.EnableHelp +msgid "Enable help" +msgstr "" + +#: Button.DisableHelp +msgid "Disable help" +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Title +msgid "Busy volume" +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Text +msgid "This volume is currently busy. Please wait for a moment." +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Link.Text +msgid "Show all disks" +msgstr "" + +#: WarningMessage.AccessDenied.Title +msgid "Invalid access credentials" +msgstr "" + +#: WarningMessage.AccessDenied.Text +msgid "Sorry - you did not enter the right credentials! Maybe you should try the default setting: username=>'admin' / password=>'admin'." +msgstr "" + +#: WarningMessage.EmptyPassword.Title +msgid "Missing password" +msgstr "" + +#: WarningMessage.EmptyPassword.Text +msgid "You have to enter a password!" +msgstr "" + +#: WarningMessage.EmptyNewPassword.Title +msgid "Missing new password" +msgstr "" + +#: WarningMessage.EmptyNewPassword.Text +msgid "You have to enter a new password!" +msgstr "" + +#: WarningMessage.DifferentPasswords.Title +msgid "Different passwords" +msgstr "" + +#: WarningMessage.DifferentPasswords.Text +msgid "The passwords you entered did not match." +msgstr "" + +#: WarningMessage.InvalidDevice.Title +msgid "Invalid device" +msgstr "" + +#: WarningMessage.InvalidDevice.Text +msgid "The device you have chosen is invalid!" +msgstr "" + +#: WarningMessage.VolumeMayNotBeMounted.Title +msgid "The volume is open" +msgstr "" + +#: WarningMessage.VolumeMayNotBeMounted.Text +msgid "This action is not available while the volume is active. Please close it first." +msgstr "" + +#: WarningMessage.VolumeMayNotBeMounted.Link.Text +msgid "Close volume" +msgstr "" + +#: WarningMessage.InvalidAction.Title +msgid "Invalid request" +msgstr "" + +#: WarningMessage.InvalidAction.Text +msgid "Sorry - I do not know how to handle this request. If you think, that this is a bug, then you should send the most recent part of the CryptoBox log to info@cryptobox.org." +msgstr "" + +#: WarningMessage.InvalidAction.Link.Text +msgid "View log" +msgstr "" + +#: WarningMessage.RuntimeError.Title +msgid "Something weird happened" +msgstr "" + +#: WarningMessage.RuntimeError.Text +msgid "We (the developer of the CryptoBox) would like to fix this problem for you and others. Please send the most recent part of the CryptoBox log to info@cryptobox.org. Thanks for your contribution!" +msgstr "" + +#: WarningMessage.DeviceNotWriteable.Title +msgid "No write permissions" +msgstr "" + +#: WarningMessage.DeviceNotWriteable.Text +msgid "Sorry - the CryptoBox is not allowed to write on this device. Anyway it is still possible, that you can open it and change its content. Please ask the administrator of the CryptoBox in case you believe, that this is a mistake." +msgstr "" diff --git a/v0.3.4.5/intl/it/cryptobox-server.po b/v0.3.4.5/intl/it/cryptobox-server.po new file mode 100644 index 0000000..7066455 --- /dev/null +++ b/v0.3.4.5/intl/it/cryptobox-server.po @@ -0,0 +1,157 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:00+0100\n" +"PO-Revision-Date: 2007-02-26 11:05+0100\n" +"Last-Translator: Fabrizio Tarizzo \n" +"Language-Team: Italian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Title.Top +msgid "The CryptoBox" +msgstr "La CryptoBox" + +#: Title.Slogan +msgid "Privacy for the rest of us." +msgstr "Privacy per tutti noi." + +#: Title.Volume +msgid "Volume" +msgstr "Volume" + +#: Title.AccessDenied +msgid "Access denied" +msgstr "Accesso non consentito" + +#: Text.EnterCurrentPassword +msgid "Enter the current password" +msgstr "Inserire la password attuale" + +#: Text.EnterNewPassword +msgid "Enter new password" +msgstr "Inserire la nuova password" + +#: Text.EnterSamePassword +msgid "Repeat new password" +msgstr "Ripetere la nuova password" + +#: Text.RedirectNote +msgid "Click here if your browser does not support automatic redirection." +msgstr "Fare clic qui se il browser non supporta la redirezione automatica." + +#: Text.ProjectHomePage +msgid "Website of project" +msgstr "Sito web del progetto" + +#: Text.ProjectNote +msgid "The CryptoBox is a project of" +msgstr "La CryptoBox è un progetto di" + +#: Text.ContainerName +msgid "Volume's name" +msgstr "Nome del volume" + +#: Button.EnableHelp +msgid "Enable help" +msgstr "Attiva aiuto" + +#: Button.DisableHelp +msgid "Disable help" +msgstr "Disattiva aiuto" + +#: AdviceMessage.VolumeIsBusy.Title +msgid "Busy volume" +msgstr "Volume occupato" + +#: AdviceMessage.VolumeIsBusy.Text +msgid "This volume is currently busy. Please wait for a moment." +msgstr "Questo volume è attualmente occupato. Attendere." + +#: AdviceMessage.VolumeIsBusy.Link.Text +msgid "Show all disks" +msgstr "Mostra tutti i dischi" + +#: WarningMessage.AccessDenied.Title +msgid "Invalid access credentials" +msgstr "Credenziali di accesso non valide" + +#: WarningMessage.AccessDenied.Text +msgid "Sorry - you did not enter the right credentials! Maybe you should try the default setting: username=>'admin' / password=>'admin'." +msgstr "Non sono state inserite credenziali di accesso corrette. Tentare con le impostazioni predefinite: username=>'admin' / password=>'admin'." + +#: WarningMessage.EmptyPassword.Title +msgid "Missing password" +msgstr "Password mancante" + +#: WarningMessage.EmptyPassword.Text +msgid "You have to enter a password!" +msgstr "È necessario inserire una password!" + +#: WarningMessage.EmptyNewPassword.Title +msgid "Missing new password" +msgstr "Nuova password mancante" + +#: WarningMessage.EmptyNewPassword.Text +msgid "You have to enter a new password!" +msgstr "È necessario inserire una nuova password!" + +#: WarningMessage.DifferentPasswords.Title +msgid "Different passwords" +msgstr "Password differenti" + +#: WarningMessage.DifferentPasswords.Text +msgid "The passwords you entered did not match." +msgstr "Le password inserite non corrispondono." + +#: WarningMessage.InvalidDevice.Title +msgid "Invalid device" +msgstr "Dispositivo non valido" + +#: WarningMessage.InvalidDevice.Text +msgid "The device you have chosen is invalid!" +msgstr "Il dispositivo scelto non è valido!" + +#: WarningMessage.VolumeMayNotBeMounted.Title +msgid "The volume is open" +msgstr "Il volume è aperto" + +#: WarningMessage.VolumeMayNotBeMounted.Text +msgid "This action is not available while the volume is active. Please close it first." +msgstr "Questa azione non è disponibile quando il volume è aperto. Chiuderlo prima di ritentare." + +#: WarningMessage.VolumeMayNotBeMounted.Link.Text +msgid "Close volume" +msgstr "Chiusura volume" + +#: WarningMessage.InvalidAction.Title +msgid "Invalid request" +msgstr "Richiesta non valida" + +#: WarningMessage.InvalidAction.Text +msgid "Sorry - I do not know how to handle this request. If you think, that this is a bug, then you should send the most recent part of the CryptoBox log to info@cryptobox.org." +msgstr "Non è possibile eseguire la richiesta. Se si ritiene che questo sia un malfunzionamento, inviare l'ultima parte del registro degli eventi della CryptoBox a info@cryptobox.org." + +#: WarningMessage.InvalidAction.Link.Text +msgid "View log" +msgstr "Mostra il registro degli eventi" + +#: WarningMessage.RuntimeError.Title +msgid "Something weird happened" +msgstr "Si è verificato un errore imprevisto" + +#: WarningMessage.RuntimeError.Text +msgid "We (the developer of the CryptoBox) would like to fix this problem for you and others. Please send the most recent part of the CryptoBox log to info@cryptobox.org. Thanks for your contribution!" +msgstr "Gli sviluppatori della CryptoBox intendono risolvere questo problema. Inviare l'ultima parte del registro degli eventi della CryptoBox a info@cryptobox.org. Grazie per il contributo!" + +#: WarningMessage.DeviceNotWriteable.Title +msgid "No write permissions" +msgstr "Permesso di scrittura mancante" + +#: WarningMessage.DeviceNotWriteable.Text +msgid "Sorry - the CryptoBox is not allowed to write on this device. Anyway it is still possible, that you can open it and change its content. Please ask the administrator of the CryptoBox in case you believe, that this is a mistake." +msgstr "La CryptoBox non è autorizzata a scrivere su questo dispositivo. Ciò nonostante è ancora possibile aprirlo e modificarlo. Rivolgersi all'amministratore del sistema se si ritiene che questo sia un errore." diff --git a/v0.3.4.5/intl/ja/cryptobox-server.po b/v0.3.4.5/intl/ja/cryptobox-server.po new file mode 100644 index 0000000..6205da4 --- /dev/null +++ b/v0.3.4.5/intl/ja/cryptobox-server.po @@ -0,0 +1,157 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:00+0100\n" +"PO-Revision-Date: 2007-02-26 08:37+0100\n" +"Last-Translator: kinneko \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 0.10.1\n" + +#: Title.Top +msgid "The CryptoBox" +msgstr "クリプトボックス" + +#: Title.Slogan +msgid "Privacy for the rest of us." +msgstr "プライバシーを我等に" + +#: Title.Volume +msgid "Volume" +msgstr "ボリューム" + +#: Title.AccessDenied +msgid "Access denied" +msgstr "アクセスが拒否されました" + +#: Text.EnterCurrentPassword +msgid "Enter the current password" +msgstr "現在のパスワードを入力してください" + +#: Text.EnterNewPassword +msgid "Enter new password" +msgstr "新しいパスワードを入力してください" + +#: Text.EnterSamePassword +msgid "Repeat new password" +msgstr "もう一度新しいパスワードを入力してください" + +#: Text.RedirectNote +msgid "Click here if your browser does not support automatic redirection." +msgstr "お使いのブラウザが自動的に画面移動できない場合は、以下をクリックしてください。" + +#: Text.ProjectHomePage +msgid "Website of project" +msgstr "プロジェクトのWebサイト" + +#: Text.ProjectNote +msgid "The CryptoBox is a project of" +msgstr "The CryptoBox is a project of" + +#: Text.ContainerName +msgid "Volume's name" +msgstr "領域名" + +#: Button.EnableHelp +msgid "Enable help" +msgstr "ヘルプを有効にする" + +#: Button.DisableHelp +msgid "Disable help" +msgstr "ヘルプを無効にする" + +#: AdviceMessage.VolumeIsBusy.Title +msgid "Busy volume" +msgstr "領域は使用中です" + +#: AdviceMessage.VolumeIsBusy.Text +msgid "This volume is currently busy. Please wait for a moment." +msgstr "この領域は現在使用中です。しばらく待ってやり直してください。" + +#: AdviceMessage.VolumeIsBusy.Link.Text +msgid "Show all disks" +msgstr "全てのディスクを表示する" + +#: WarningMessage.AccessDenied.Title +msgid "Invalid access credentials" +msgstr "無効なアクセス証明書です" + +#: WarningMessage.AccessDenied.Text +msgid "Sorry - you did not enter the right credentials! Maybe you should try the default setting: username=>'admin' / password=>'admin'." +msgstr "ごめんなさい - あなたは正当な証明書を使っていません。最初から設定されている、ユーザー名:'admin'、パスワード:'admin'を試してみてください。" + +#: WarningMessage.EmptyPassword.Title +msgid "Missing password" +msgstr "パスワードが一致しません" + +#: WarningMessage.EmptyPassword.Text +msgid "You have to enter a password!" +msgstr "パスワードは必須です" + +#: WarningMessage.EmptyNewPassword.Title +msgid "Missing new password" +msgstr "新しいパスワードが一致しません" + +#: WarningMessage.EmptyNewPassword.Text +msgid "You have to enter a new password!" +msgstr "新しいパスワードは必須です" + +#: WarningMessage.DifferentPasswords.Title +msgid "Different passwords" +msgstr "パスワードが違います" + +#: WarningMessage.DifferentPasswords.Text +msgid "The passwords you entered did not match." +msgstr "パスワードが一致しませんでした" + +#: WarningMessage.InvalidDevice.Title +msgid "Invalid device" +msgstr "不正なデバイスです" + +#: WarningMessage.InvalidDevice.Text +msgid "The device you have chosen is invalid!" +msgstr "選択されたデバイスが正しくありません。" + +#: WarningMessage.VolumeMayNotBeMounted.Title +msgid "The volume is open" +msgstr "その領域はもう開かれています" + +#: WarningMessage.VolumeMayNotBeMounted.Text +msgid "This action is not available while the volume is active. Please close it first." +msgstr "この操作は領域が有効な間は機能しません。まず領域を閉じてください。" + +#: WarningMessage.VolumeMayNotBeMounted.Link.Text +msgid "Close volume" +msgstr "領域を無効にする" + +#: WarningMessage.InvalidAction.Title +msgid "Invalid request" +msgstr "不正なリクエストです" + +#: WarningMessage.InvalidAction.Text +msgid "Sorry - I do not know how to handle this request. If you think, that this is a bug, then you should send the most recent part of the CryptoBox log to info@cryptobox.org." +msgstr "すいません - このリクエストを扱う方法がわかりませんでした。 もし、これがバグだと思われましたら、最近のクリプトボックスのログを添えて、info@cryptobox.orgにお問い合わせください。" + +#: WarningMessage.InvalidAction.Link.Text +msgid "View log" +msgstr "ログを閲覧する" + +#: WarningMessage.RuntimeError.Title +msgid "Something weird happened" +msgstr "原因不明の障害です" + +#: WarningMessage.RuntimeError.Text +msgid "We (the developer of the CryptoBox) would like to fix this problem for you and others. Please send the most recent part of the CryptoBox log to info@cryptobox.org. Thanks for your contribution!" +msgstr "わたしたちクリプトボックスの開発者は、あなたや、他の利用者のためにもこの問題の解決を望んでいます。クリプトボックスのログのうち最近の部分をinfo@cryptobox.org.までお送りください。あなたのご協力に感謝します。" + +#: WarningMessage.DeviceNotWriteable.Title +msgid "No write permissions" +msgstr "書き込み権限がありません" + +#: WarningMessage.DeviceNotWriteable.Text +msgid "Sorry - the CryptoBox is not allowed to write on this device. Anyway it is still possible, that you can open it and change its content. Please ask the administrator of the CryptoBox in case you believe, that this is a mistake." +msgstr "ごめんなさい - クリプトボックスは、この装置に書き込む許可を持っていません。とにかく、あなたがこの領域を開いて読み書きできる可能性がまだ残っています。これが間違いでないかどうか、クリプトボックスの管理者に問い合わせてください。" diff --git a/v0.3.4.5/intl/nl/cryptobox-server.po b/v0.3.4.5/intl/nl/cryptobox-server.po new file mode 100644 index 0000000..c7eb023 --- /dev/null +++ b/v0.3.4.5/intl/nl/cryptobox-server.po @@ -0,0 +1,158 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:00+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Title.Top +msgid "The CryptoBox" +msgstr "" + +#: Title.Slogan +msgid "Privacy for the rest of us." +msgstr "" + +#: Title.Volume +msgid "Volume" +msgstr "" + +#: Title.AccessDenied +msgid "Access denied" +msgstr "" + +#: Text.EnterCurrentPassword +msgid "Enter the current password" +msgstr "" + +#: Text.EnterNewPassword +msgid "Enter new password" +msgstr "" + +#: Text.EnterSamePassword +msgid "Repeat new password" +msgstr "" + +#: Text.RedirectNote +msgid "Click here if your browser does not support automatic redirection." +msgstr "" + +#: Text.ProjectHomePage +msgid "Website of project" +msgstr "" + +#: Text.ProjectNote +msgid "The CryptoBox is a project of" +msgstr "" + +#: Text.ContainerName +msgid "Volume's name" +msgstr "" + +#: Button.EnableHelp +msgid "Enable help" +msgstr "" + +#: Button.DisableHelp +msgid "Disable help" +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Title +msgid "Busy volume" +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Text +msgid "This volume is currently busy. Please wait for a moment." +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Link.Text +msgid "Show all disks" +msgstr "" + +#: WarningMessage.AccessDenied.Title +msgid "Invalid access credentials" +msgstr "" + +#: WarningMessage.AccessDenied.Text +msgid "Sorry - you did not enter the right credentials! Maybe you should try the default setting: username=>'admin' / password=>'admin'." +msgstr "" + +#: WarningMessage.EmptyPassword.Title +msgid "Missing password" +msgstr "" + +#: WarningMessage.EmptyPassword.Text +msgid "You have to enter a password!" +msgstr "" + +#: WarningMessage.EmptyNewPassword.Title +msgid "Missing new password" +msgstr "" + +#: WarningMessage.EmptyNewPassword.Text +msgid "You have to enter a new password!" +msgstr "" + +#: WarningMessage.DifferentPasswords.Title +msgid "Different passwords" +msgstr "" + +#: WarningMessage.DifferentPasswords.Text +msgid "The passwords you entered did not match." +msgstr "" + +#: WarningMessage.InvalidDevice.Title +msgid "Invalid device" +msgstr "" + +#: WarningMessage.InvalidDevice.Text +msgid "The device you have chosen is invalid!" +msgstr "" + +#: WarningMessage.VolumeMayNotBeMounted.Title +msgid "The volume is open" +msgstr "" + +#: WarningMessage.VolumeMayNotBeMounted.Text +msgid "This action is not available while the volume is active. Please close it first." +msgstr "" + +#: WarningMessage.VolumeMayNotBeMounted.Link.Text +msgid "Close volume" +msgstr "" + +#: WarningMessage.InvalidAction.Title +msgid "Invalid request" +msgstr "" + +#: WarningMessage.InvalidAction.Text +msgid "Sorry - I do not know how to handle this request. If you think, that this is a bug, then you should send the most recent part of the CryptoBox log to info@cryptobox.org." +msgstr "" + +#: WarningMessage.InvalidAction.Link.Text +msgid "View log" +msgstr "" + +#: WarningMessage.RuntimeError.Title +msgid "Something weird happened" +msgstr "" + +#: WarningMessage.RuntimeError.Text +msgid "We (the developer of the CryptoBox) would like to fix this problem for you and others. Please send the most recent part of the CryptoBox log to info@cryptobox.org. Thanks for your contribution!" +msgstr "" + +#: WarningMessage.DeviceNotWriteable.Title +msgid "No write permissions" +msgstr "" + +#: WarningMessage.DeviceNotWriteable.Text +msgid "Sorry - the CryptoBox is not allowed to write on this device. Anyway it is still possible, that you can open it and change its content. Please ask the administrator of the CryptoBox in case you believe, that this is a mistake." +msgstr "" diff --git a/v0.3.4.5/intl/pl/cryptobox-server.po b/v0.3.4.5/intl/pl/cryptobox-server.po new file mode 100644 index 0000000..f7a80a4 --- /dev/null +++ b/v0.3.4.5/intl/pl/cryptobox-server.po @@ -0,0 +1,157 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-04-01 15:51+0200\n" +"PO-Revision-Date: 2007-03-29 00:33+0200\n" +"Last-Translator: Andrzej S. Kaznowski \n" +"Language-Team: POLSKI \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Title.Top +msgid "The CryptoBox" +msgstr "CryptoBox" + +#: Title.Slogan +msgid "Privacy for the rest of us." +msgstr "Prywatność dla każdego." + +#: Title.Volume +msgid "Volume" +msgstr "Wolumin" + +#: Title.AccessDenied +msgid "Access denied" +msgstr "Odmówiono dostępu" + +#: Text.EnterCurrentPassword +msgid "Enter the current password" +msgstr "Wpisz aktualne hasło" + +#: Text.EnterNewPassword +msgid "Enter new password" +msgstr "Wpisz nowe hasło" + +#: Text.EnterSamePassword +msgid "Repeat new password" +msgstr "Powtórz nowe hasło" + +#: Text.RedirectNote +msgid "Click here if your browser does not support automatic redirection." +msgstr "Kliknij tutaj, jeśli Twoja przeglądarka nie obsługuje automatycznego przekierowania." + +#: Text.ProjectHomePage +msgid "Website of project" +msgstr "Witryna projektu" + +#: Text.ProjectNote +msgid "The CryptoBox is a project of" +msgstr "CryptoBox został zaprojektowany przez" + +#: Text.ContainerName +msgid "Volume's name" +msgstr "Nazwa woluminu" + +#: Button.EnableHelp +msgid "Enable help" +msgstr "Włącz pomoc" + +#: Button.DisableHelp +msgid "Disable help" +msgstr "Wyłącz pomoc" + +#: AdviceMessage.VolumeIsBusy.Title +msgid "Busy volume" +msgstr "Wolumin zajęty" + +#: AdviceMessage.VolumeIsBusy.Text +msgid "This volume is currently busy. Please wait for a moment." +msgstr "Wybrany wolumin jest zajęty. Proszę spróbować ponownie za chwilę." + +#: AdviceMessage.VolumeIsBusy.Link.Text +msgid "Show all disks" +msgstr "Pokazuj wszystkie dyski" + +#: WarningMessage.AccessDenied.Title +msgid "Invalid access credentials" +msgstr "Nieprawidłowe dane użytkownika" + +#: WarningMessage.AccessDenied.Text +msgid "Sorry - you did not enter the right credentials! Maybe you should try the default setting: username=>'admin' / password=>'admin'." +msgstr "Przepraszamy - nie wpisałeś poprawnych danych! Możesz spróbować domyślne ustawienia: użytkownik=>'admin' / hasło=>'admin'." + +#: WarningMessage.EmptyPassword.Title +msgid "Missing password" +msgstr "Brak hasła" + +#: WarningMessage.EmptyPassword.Text +msgid "You have to enter a password!" +msgstr "Musisz wpisać hasło!" + +#: WarningMessage.EmptyNewPassword.Title +msgid "Missing new password" +msgstr "Brak nowego hasła" + +#: WarningMessage.EmptyNewPassword.Text +msgid "You have to enter a new password!" +msgstr "Musisz wpisać nowe hasło!" + +#: WarningMessage.DifferentPasswords.Title +msgid "Different passwords" +msgstr "Hasła różnią się" + +#: WarningMessage.DifferentPasswords.Text +msgid "The passwords you entered did not match." +msgstr "Wpisane hasła nie zgadzają się." + +#: WarningMessage.InvalidDevice.Title +msgid "Invalid device" +msgstr "Nieprawidłowe urządzenie" + +#: WarningMessage.InvalidDevice.Text +msgid "The device you have chosen is invalid!" +msgstr "Wybrane urządzenie jest nieprawidłowe!" + +#: WarningMessage.VolumeMayNotBeMounted.Title +msgid "The volume is open" +msgstr "Wolumin jest otwarty" + +#: WarningMessage.VolumeMayNotBeMounted.Text +msgid "This action is not available while the volume is active. Please close it first." +msgstr "Funkcja ta nie jest dostępna póki wolumin jest aktywny. Proszę go najpierw zamknąć." + +#: WarningMessage.VolumeMayNotBeMounted.Link.Text +msgid "Close volume" +msgstr "Zamknij wolumin" + +#: WarningMessage.InvalidAction.Title +msgid "Invalid request" +msgstr "Nieprawidłowe polecenie" + +#: WarningMessage.InvalidAction.Text +msgid "Sorry - I do not know how to handle this request. If you think, that this is a bug, then you should send the most recent part of the CryptoBox log to info@cryptobox.org." +msgstr "Przepraszam - nie rozumiem tego polecenia. Jeśli sądzisz, że to bład programu proszę przesłać ostatnią część rejestru systemu CryptoBox na adres: info@cryptobox.org." + +#: WarningMessage.InvalidAction.Link.Text +msgid "View log" +msgstr "Pokaż rejestr" + +#: WarningMessage.RuntimeError.Title +msgid "Something weird happened" +msgstr "Zdarzyło się coś dziwnego" + +#: WarningMessage.RuntimeError.Text +msgid "We (the developer of the CryptoBox) would like to fix this problem for you and others. Please send the most recent part of the CryptoBox log to info@cryptobox.org. Thanks for your contribution!" +msgstr "Chcielibyśmy (twórcy systemu CryptoBox) naprawić ten błąd dla Ciebie i innych. Proszę przesłać ostatnią część rejestru systemu CryptoBox na adres: info@cryptobox.org. Dziękujemy za pomoc!" + +#: WarningMessage.DeviceNotWriteable.Title +msgid "No write permissions" +msgstr "Brak pozwoleń zapisu" + +#: WarningMessage.DeviceNotWriteable.Text +msgid "Sorry - the CryptoBox is not allowed to write on this device. Anyway it is still possible, that you can open it and change its content. Please ask the administrator of the CryptoBox in case you believe, that this is a mistake." +msgstr "Przepraszamy - system CryptoBox nie może zapisywać na tym urządzeniu. Możesz jednak otwierac go i zmieniać jego zawartość. Proszę zwrócić się do administratora systemu CryptoBox, jeśli sądzisz, że to błąd." diff --git a/v0.3.4.5/intl/pt/cryptobox-server.po b/v0.3.4.5/intl/pt/cryptobox-server.po new file mode 100644 index 0000000..c7eb023 --- /dev/null +++ b/v0.3.4.5/intl/pt/cryptobox-server.po @@ -0,0 +1,158 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:00+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Title.Top +msgid "The CryptoBox" +msgstr "" + +#: Title.Slogan +msgid "Privacy for the rest of us." +msgstr "" + +#: Title.Volume +msgid "Volume" +msgstr "" + +#: Title.AccessDenied +msgid "Access denied" +msgstr "" + +#: Text.EnterCurrentPassword +msgid "Enter the current password" +msgstr "" + +#: Text.EnterNewPassword +msgid "Enter new password" +msgstr "" + +#: Text.EnterSamePassword +msgid "Repeat new password" +msgstr "" + +#: Text.RedirectNote +msgid "Click here if your browser does not support automatic redirection." +msgstr "" + +#: Text.ProjectHomePage +msgid "Website of project" +msgstr "" + +#: Text.ProjectNote +msgid "The CryptoBox is a project of" +msgstr "" + +#: Text.ContainerName +msgid "Volume's name" +msgstr "" + +#: Button.EnableHelp +msgid "Enable help" +msgstr "" + +#: Button.DisableHelp +msgid "Disable help" +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Title +msgid "Busy volume" +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Text +msgid "This volume is currently busy. Please wait for a moment." +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Link.Text +msgid "Show all disks" +msgstr "" + +#: WarningMessage.AccessDenied.Title +msgid "Invalid access credentials" +msgstr "" + +#: WarningMessage.AccessDenied.Text +msgid "Sorry - you did not enter the right credentials! Maybe you should try the default setting: username=>'admin' / password=>'admin'." +msgstr "" + +#: WarningMessage.EmptyPassword.Title +msgid "Missing password" +msgstr "" + +#: WarningMessage.EmptyPassword.Text +msgid "You have to enter a password!" +msgstr "" + +#: WarningMessage.EmptyNewPassword.Title +msgid "Missing new password" +msgstr "" + +#: WarningMessage.EmptyNewPassword.Text +msgid "You have to enter a new password!" +msgstr "" + +#: WarningMessage.DifferentPasswords.Title +msgid "Different passwords" +msgstr "" + +#: WarningMessage.DifferentPasswords.Text +msgid "The passwords you entered did not match." +msgstr "" + +#: WarningMessage.InvalidDevice.Title +msgid "Invalid device" +msgstr "" + +#: WarningMessage.InvalidDevice.Text +msgid "The device you have chosen is invalid!" +msgstr "" + +#: WarningMessage.VolumeMayNotBeMounted.Title +msgid "The volume is open" +msgstr "" + +#: WarningMessage.VolumeMayNotBeMounted.Text +msgid "This action is not available while the volume is active. Please close it first." +msgstr "" + +#: WarningMessage.VolumeMayNotBeMounted.Link.Text +msgid "Close volume" +msgstr "" + +#: WarningMessage.InvalidAction.Title +msgid "Invalid request" +msgstr "" + +#: WarningMessage.InvalidAction.Text +msgid "Sorry - I do not know how to handle this request. If you think, that this is a bug, then you should send the most recent part of the CryptoBox log to info@cryptobox.org." +msgstr "" + +#: WarningMessage.InvalidAction.Link.Text +msgid "View log" +msgstr "" + +#: WarningMessage.RuntimeError.Title +msgid "Something weird happened" +msgstr "" + +#: WarningMessage.RuntimeError.Text +msgid "We (the developer of the CryptoBox) would like to fix this problem for you and others. Please send the most recent part of the CryptoBox log to info@cryptobox.org. Thanks for your contribution!" +msgstr "" + +#: WarningMessage.DeviceNotWriteable.Title +msgid "No write permissions" +msgstr "" + +#: WarningMessage.DeviceNotWriteable.Text +msgid "Sorry - the CryptoBox is not allowed to write on this device. Anyway it is still possible, that you can open it and change its content. Please ask the administrator of the CryptoBox in case you believe, that this is a mistake." +msgstr "" diff --git a/v0.3.4.5/intl/ru/cryptobox-server.po b/v0.3.4.5/intl/ru/cryptobox-server.po new file mode 100644 index 0000000..c7eb023 --- /dev/null +++ b/v0.3.4.5/intl/ru/cryptobox-server.po @@ -0,0 +1,158 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:00+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Title.Top +msgid "The CryptoBox" +msgstr "" + +#: Title.Slogan +msgid "Privacy for the rest of us." +msgstr "" + +#: Title.Volume +msgid "Volume" +msgstr "" + +#: Title.AccessDenied +msgid "Access denied" +msgstr "" + +#: Text.EnterCurrentPassword +msgid "Enter the current password" +msgstr "" + +#: Text.EnterNewPassword +msgid "Enter new password" +msgstr "" + +#: Text.EnterSamePassword +msgid "Repeat new password" +msgstr "" + +#: Text.RedirectNote +msgid "Click here if your browser does not support automatic redirection." +msgstr "" + +#: Text.ProjectHomePage +msgid "Website of project" +msgstr "" + +#: Text.ProjectNote +msgid "The CryptoBox is a project of" +msgstr "" + +#: Text.ContainerName +msgid "Volume's name" +msgstr "" + +#: Button.EnableHelp +msgid "Enable help" +msgstr "" + +#: Button.DisableHelp +msgid "Disable help" +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Title +msgid "Busy volume" +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Text +msgid "This volume is currently busy. Please wait for a moment." +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Link.Text +msgid "Show all disks" +msgstr "" + +#: WarningMessage.AccessDenied.Title +msgid "Invalid access credentials" +msgstr "" + +#: WarningMessage.AccessDenied.Text +msgid "Sorry - you did not enter the right credentials! Maybe you should try the default setting: username=>'admin' / password=>'admin'." +msgstr "" + +#: WarningMessage.EmptyPassword.Title +msgid "Missing password" +msgstr "" + +#: WarningMessage.EmptyPassword.Text +msgid "You have to enter a password!" +msgstr "" + +#: WarningMessage.EmptyNewPassword.Title +msgid "Missing new password" +msgstr "" + +#: WarningMessage.EmptyNewPassword.Text +msgid "You have to enter a new password!" +msgstr "" + +#: WarningMessage.DifferentPasswords.Title +msgid "Different passwords" +msgstr "" + +#: WarningMessage.DifferentPasswords.Text +msgid "The passwords you entered did not match." +msgstr "" + +#: WarningMessage.InvalidDevice.Title +msgid "Invalid device" +msgstr "" + +#: WarningMessage.InvalidDevice.Text +msgid "The device you have chosen is invalid!" +msgstr "" + +#: WarningMessage.VolumeMayNotBeMounted.Title +msgid "The volume is open" +msgstr "" + +#: WarningMessage.VolumeMayNotBeMounted.Text +msgid "This action is not available while the volume is active. Please close it first." +msgstr "" + +#: WarningMessage.VolumeMayNotBeMounted.Link.Text +msgid "Close volume" +msgstr "" + +#: WarningMessage.InvalidAction.Title +msgid "Invalid request" +msgstr "" + +#: WarningMessage.InvalidAction.Text +msgid "Sorry - I do not know how to handle this request. If you think, that this is a bug, then you should send the most recent part of the CryptoBox log to info@cryptobox.org." +msgstr "" + +#: WarningMessage.InvalidAction.Link.Text +msgid "View log" +msgstr "" + +#: WarningMessage.RuntimeError.Title +msgid "Something weird happened" +msgstr "" + +#: WarningMessage.RuntimeError.Text +msgid "We (the developer of the CryptoBox) would like to fix this problem for you and others. Please send the most recent part of the CryptoBox log to info@cryptobox.org. Thanks for your contribution!" +msgstr "" + +#: WarningMessage.DeviceNotWriteable.Title +msgid "No write permissions" +msgstr "" + +#: WarningMessage.DeviceNotWriteable.Text +msgid "Sorry - the CryptoBox is not allowed to write on this device. Anyway it is still possible, that you can open it and change its content. Please ask the administrator of the CryptoBox in case you believe, that this is a mistake." +msgstr "" diff --git a/v0.3.4.5/intl/sl/cryptobox-server.po b/v0.3.4.5/intl/sl/cryptobox-server.po new file mode 100644 index 0000000..189fe99 --- /dev/null +++ b/v0.3.4.5/intl/sl/cryptobox-server.po @@ -0,0 +1,157 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:00+0100\n" +"PO-Revision-Date: 2007-02-06 15:44+0100\n" +"Last-Translator: tenzin \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Title.Top +msgid "The CryptoBox" +msgstr "The CryptoBox" + +#: Title.Slogan +msgid "Privacy for the rest of us." +msgstr "Zasebnost za vse" + +#: Title.Volume +msgid "Volume" +msgstr "Posamezen del " + +#: Title.AccessDenied +msgid "Access denied" +msgstr "Dostop zavrnjen " + +#: Text.EnterCurrentPassword +msgid "Enter the current password" +msgstr "Vnesite trenutno veljavno geslo" + +#: Text.EnterNewPassword +msgid "Enter new password" +msgstr "Vnesite novo geslo" + +#: Text.EnterSamePassword +msgid "Repeat new password" +msgstr "Ponovite novo geslo" + +#: Text.RedirectNote +msgid "Click here if your browser does not support automatic redirection." +msgstr "Kliknite če vaš iskalnik ne podpira avtomatične preusmeritve." + +#: Text.ProjectHomePage +msgid "Website of project" +msgstr "Spletna stran projekta" + +#: Text.ProjectNote +msgid "The CryptoBox is a project of" +msgstr "CryptoBox je projekt" + +#: Text.ContainerName +msgid "Volume's name" +msgstr "Ime posameznega dela" + +#: Button.EnableHelp +msgid "Enable help" +msgstr "Omogoči pomoč" + +#: Button.DisableHelp +msgid "Disable help" +msgstr "Onesposobi pomoč" + +#: AdviceMessage.VolumeIsBusy.Title +msgid "Busy volume" +msgstr "nosilec je zaposlen" + +#: AdviceMessage.VolumeIsBusy.Text +msgid "This volume is currently busy. Please wait for a moment." +msgstr "Ta nosilec je trenutno zaposlen. Prosimo počakajte trenutek." + +#: AdviceMessage.VolumeIsBusy.Link.Text +msgid "Show all disks" +msgstr "Prikaži vse diske" + +#: WarningMessage.AccessDenied.Title +msgid "Invalid access credentials" +msgstr "Neveljavno vstopno priporočilo" + +#: WarningMessage.AccessDenied.Text +msgid "Sorry - you did not enter the right credentials! Maybe you should try the default setting: username=>'admin' / password=>'admin'." +msgstr "Oprostite - niste vnesli pravilnega priporočila.poskusite z: uporabniško ime=>'admin' / geslo=>'admin'." + +#: WarningMessage.EmptyPassword.Title +msgid "Missing password" +msgstr "Manjka geslo" + +#: WarningMessage.EmptyPassword.Text +msgid "You have to enter a password!" +msgstr "Vnesti morate geslo!" + +#: WarningMessage.EmptyNewPassword.Title +msgid "Missing new password" +msgstr "Novo geslo manjka" + +#: WarningMessage.EmptyNewPassword.Text +msgid "You have to enter a new password!" +msgstr "Vnesti morate novo geslo" + +#: WarningMessage.DifferentPasswords.Title +msgid "Different passwords" +msgstr "Gesli sta različni" + +#: WarningMessage.DifferentPasswords.Text +msgid "The passwords you entered did not match." +msgstr "Gesli, ki ste ju vnesli se ne ujemata. " + +#: WarningMessage.InvalidDevice.Title +msgid "Invalid device" +msgstr "Neveljavna naprava" + +#: WarningMessage.InvalidDevice.Text +msgid "The device you have chosen is invalid!" +msgstr "Naprava, ki ste jo izbrali ni veljavna!" + +#: WarningMessage.VolumeMayNotBeMounted.Title +msgid "The volume is open" +msgstr "Ta vsebina je odprta" + +#: WarningMessage.VolumeMayNotBeMounted.Text +msgid "This action is not available while the volume is active. Please close it first." +msgstr "Ta dejavnost je onemogočena, dokler imate vsebino odprto. Prosimo zaprite ta del." + +#: WarningMessage.VolumeMayNotBeMounted.Link.Text +msgid "Close volume" +msgstr "Zapri vsebino" + +#: WarningMessage.InvalidAction.Title +msgid "Invalid request" +msgstr "Neveljavna zahteva" + +#: WarningMessage.InvalidAction.Text +msgid "Sorry - I do not know how to handle this request. If you think, that this is a bug, then you should send the most recent part of the CryptoBox log to info@cryptobox.org." +msgstr "Oprostite - zahteve ne morem izvesti.Če menite, da je v igri hrošč, prosimo, pošljite nedaven del Cryptobox log na naslov:info@cryptobox.org." + +#: WarningMessage.InvalidAction.Link.Text +msgid "View log" +msgstr "Poglej log" + +#: WarningMessage.RuntimeError.Title +msgid "Something weird happened" +msgstr "Nekaj nenavadno čudaškega se je zgodilo" + +#: WarningMessage.RuntimeError.Text +msgid "We (the developer of the CryptoBox) would like to fix this problem for you and others. Please send the most recent part of the CryptoBox log to info@cryptobox.org. Thanks for your contribution!" +msgstr "Razvijalci Cryptoboxa želimo rešiti ta problem za vas in vse ostale. Prosimo pošljite najnovejši - trenutni del CryptoBox log na naslov:info@cryptobox.org. Hvala za vaše sodelovanje!" + +#: WarningMessage.DeviceNotWriteable.Title +msgid "No write permissions" +msgstr "Ni dovoljenja za zapisovanje" + +#: WarningMessage.DeviceNotWriteable.Text +msgid "Sorry - the CryptoBox is not allowed to write on this device. Anyway it is still possible, that you can open it and change its content. Please ask the administrator of the CryptoBox in case you believe, that this is a mistake." +msgstr "Oprostite - Cryptobox-u ni dovoljeno zapisovati na to napravo. Možen pa je dostop do podatkov in spreminjanje njih vsebine. Prosimo vprašajte o tem administratorja Cryptoboxa, vkolikor menite da gre za napako." diff --git a/v0.3.4.5/intl/sv/cryptobox-server.po b/v0.3.4.5/intl/sv/cryptobox-server.po new file mode 100644 index 0000000..c7eb023 --- /dev/null +++ b/v0.3.4.5/intl/sv/cryptobox-server.po @@ -0,0 +1,158 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:00+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Title.Top +msgid "The CryptoBox" +msgstr "" + +#: Title.Slogan +msgid "Privacy for the rest of us." +msgstr "" + +#: Title.Volume +msgid "Volume" +msgstr "" + +#: Title.AccessDenied +msgid "Access denied" +msgstr "" + +#: Text.EnterCurrentPassword +msgid "Enter the current password" +msgstr "" + +#: Text.EnterNewPassword +msgid "Enter new password" +msgstr "" + +#: Text.EnterSamePassword +msgid "Repeat new password" +msgstr "" + +#: Text.RedirectNote +msgid "Click here if your browser does not support automatic redirection." +msgstr "" + +#: Text.ProjectHomePage +msgid "Website of project" +msgstr "" + +#: Text.ProjectNote +msgid "The CryptoBox is a project of" +msgstr "" + +#: Text.ContainerName +msgid "Volume's name" +msgstr "" + +#: Button.EnableHelp +msgid "Enable help" +msgstr "" + +#: Button.DisableHelp +msgid "Disable help" +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Title +msgid "Busy volume" +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Text +msgid "This volume is currently busy. Please wait for a moment." +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Link.Text +msgid "Show all disks" +msgstr "" + +#: WarningMessage.AccessDenied.Title +msgid "Invalid access credentials" +msgstr "" + +#: WarningMessage.AccessDenied.Text +msgid "Sorry - you did not enter the right credentials! Maybe you should try the default setting: username=>'admin' / password=>'admin'." +msgstr "" + +#: WarningMessage.EmptyPassword.Title +msgid "Missing password" +msgstr "" + +#: WarningMessage.EmptyPassword.Text +msgid "You have to enter a password!" +msgstr "" + +#: WarningMessage.EmptyNewPassword.Title +msgid "Missing new password" +msgstr "" + +#: WarningMessage.EmptyNewPassword.Text +msgid "You have to enter a new password!" +msgstr "" + +#: WarningMessage.DifferentPasswords.Title +msgid "Different passwords" +msgstr "" + +#: WarningMessage.DifferentPasswords.Text +msgid "The passwords you entered did not match." +msgstr "" + +#: WarningMessage.InvalidDevice.Title +msgid "Invalid device" +msgstr "" + +#: WarningMessage.InvalidDevice.Text +msgid "The device you have chosen is invalid!" +msgstr "" + +#: WarningMessage.VolumeMayNotBeMounted.Title +msgid "The volume is open" +msgstr "" + +#: WarningMessage.VolumeMayNotBeMounted.Text +msgid "This action is not available while the volume is active. Please close it first." +msgstr "" + +#: WarningMessage.VolumeMayNotBeMounted.Link.Text +msgid "Close volume" +msgstr "" + +#: WarningMessage.InvalidAction.Title +msgid "Invalid request" +msgstr "" + +#: WarningMessage.InvalidAction.Text +msgid "Sorry - I do not know how to handle this request. If you think, that this is a bug, then you should send the most recent part of the CryptoBox log to info@cryptobox.org." +msgstr "" + +#: WarningMessage.InvalidAction.Link.Text +msgid "View log" +msgstr "" + +#: WarningMessage.RuntimeError.Title +msgid "Something weird happened" +msgstr "" + +#: WarningMessage.RuntimeError.Text +msgid "We (the developer of the CryptoBox) would like to fix this problem for you and others. Please send the most recent part of the CryptoBox log to info@cryptobox.org. Thanks for your contribution!" +msgstr "" + +#: WarningMessage.DeviceNotWriteable.Title +msgid "No write permissions" +msgstr "" + +#: WarningMessage.DeviceNotWriteable.Text +msgid "Sorry - the CryptoBox is not allowed to write on this device. Anyway it is still possible, that you can open it and change its content. Please ask the administrator of the CryptoBox in case you believe, that this is a mistake." +msgstr "" diff --git a/v0.3.4.5/intl/ur/cryptobox-server.po b/v0.3.4.5/intl/ur/cryptobox-server.po new file mode 100644 index 0000000..83f0a4b --- /dev/null +++ b/v0.3.4.5/intl/ur/cryptobox-server.po @@ -0,0 +1,158 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-02-05 23:27+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Title.Top +msgid "The CryptoBox" +msgstr "" + +#: Title.Slogan +msgid "Privacy for the rest of us." +msgstr "" + +#: Title.Volume +msgid "Volume" +msgstr "" + +#: Title.AccessDenied +msgid "Access denied" +msgstr "" + +#: Text.EnterCurrentPassword +msgid "Enter the current password" +msgstr "" + +#: Text.EnterNewPassword +msgid "Enter new password" +msgstr "" + +#: Text.EnterSamePassword +msgid "Repeat new password" +msgstr "" + +#: Text.RedirectNote +msgid "Click here if your browser does not support automatic redirection." +msgstr "" + +#: Text.ProjectHomePage +msgid "Website of project" +msgstr "" + +#: Text.ProjectNote +msgid "The CryptoBox is a project of" +msgstr "" + +#: Text.ContainerName +msgid "Volume's name" +msgstr "" + +#: Button.EnableHelp +msgid "Enable help" +msgstr "" + +#: Button.DisableHelp +msgid "Disable help" +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Title +msgid "Busy volume" +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Text +msgid "This volume is currently busy. Please wait for a moment." +msgstr "" + +#: AdviceMessage.VolumeIsBusy.Link.Text +msgid "Show all disks" +msgstr "" + +#: WarningMessage.AccessDenied.Title +msgid "Invalid access credentials" +msgstr "" + +#: WarningMessage.AccessDenied.Text +msgid "Sorry - you did not enter the right credentials! Maybe you should try the default setting: username=>'admin' / password=>'admin'." +msgstr "" + +#: WarningMessage.EmptyPassword.Title +msgid "Missing password" +msgstr "" + +#: WarningMessage.EmptyPassword.Text +msgid "You have to enter a password!" +msgstr "" + +#: WarningMessage.EmptyNewPassword.Title +msgid "Missing new password" +msgstr "" + +#: WarningMessage.EmptyNewPassword.Text +msgid "You have to enter a new password!" +msgstr "" + +#: WarningMessage.DifferentPasswords.Title +msgid "Different passwords" +msgstr "" + +#: WarningMessage.DifferentPasswords.Text +msgid "The passwords you entered did not match." +msgstr "" + +#: WarningMessage.InvalidDevice.Title +msgid "Invalid device" +msgstr "" + +#: WarningMessage.InvalidDevice.Text +msgid "The device you have chosen is invalid!" +msgstr "" + +#: WarningMessage.VolumeMayNotBeMounted.Title +msgid "The volume is open" +msgstr "" + +#: WarningMessage.VolumeMayNotBeMounted.Text +msgid "This action is not available while the volume is active. Please close it first." +msgstr "" + +#: WarningMessage.VolumeMayNotBeMounted.Link.Text +msgid "Close volume" +msgstr "" + +#: WarningMessage.InvalidAction.Title +msgid "Invalid request" +msgstr "" + +#: WarningMessage.InvalidAction.Text +msgid "Sorry - I do not know how to handle this request. If you think, that this is a bug, then you should send the most recent part of the CryptoBox log to info@cryptobox.org." +msgstr "" + +#: WarningMessage.InvalidAction.Link.Text +msgid "View log" +msgstr "" + +#: WarningMessage.RuntimeError.Title +msgid "Something weird happened" +msgstr "" + +#: WarningMessage.RuntimeError.Text +msgid "We (the developer of the CryptoBox) would like to fix this problem for you and others. Please send the most recent part of the CryptoBox log to info@cryptobox.org. Thanks for your contribution!" +msgstr "" + +#: WarningMessage.DeviceNotWriteable.Title +msgid "No write permissions" +msgstr "" + +#: WarningMessage.DeviceNotWriteable.Text +msgid "Sorry - the CryptoBox is not allowed to write on this device. Anyway it is still possible, that you can open it and change its content. Please ask the administrator of the CryptoBox in case you believe, that this is a mistake." +msgstr "" diff --git a/v0.3.4.5/man/CryptoBoxRootActions.8 b/v0.3.4.5/man/CryptoBoxRootActions.8 new file mode 100644 index 0000000..856db91 --- /dev/null +++ b/v0.3.4.5/man/CryptoBoxRootActions.8 @@ -0,0 +1,84 @@ +.TH CryptoBoxRootActions 1 "November 02006" "cryptobox" "suid script" +.SH NAME +CryptoBoxRootActions \- The CryptoBoxWebserver calls this script in order to execute various programs which require root privileges. +.SH SYNOPSIS +.B CryptoBoxRootActions +check +.br +.B CryptoBoxRootActions +plugin \fIFEATURE_SCRIPT\fR [\fIARGS\fR] +.br +.B CryptoBoxRootActions +hook \fIEVENT_SCRIPT\fR [\fIARGS\fR] +.br +.B CryptoBoxRootActions +hook \fIPROG\fR [\fIARGS\fR] +.SH DESCRIPTION +CryptoBoxRootActions is a script that is called by the \fBCryptoBox\fR to execute +programs which require root privileges. You will never call this program directly. This +manpage should only be useful as a reference for developers of the CryptoBox. +.PP +To let the CryptoBox gain root permissions you need the program \fBsuper\fR. +It is configured properly if it \fI/etc/super.tab\fR contains the following line: +.RS +.PP +CryptoBoxRootActions /usr/sbin/CryptoBoxRootActions cryptobox +.RE +.PP +We assume that the CryptoBoxRootActions script is located at +\fI/usr/sbin/CryptoBoxRootActions\fR. Furthermore the user running the CryptoBox +server is assumed to be \fIcryptobox\fR. +.SH CONFIGURATION CHECK +Call the CryptoBoxRootActions script with the argument \fIcheck\fR to test if +\fBsuper\fR is configured properly. Just type the following: +.RS +.PP +super CryptoBoxRootActions check; echo $? +.RE +.PP +This should output '0' for success. Any other value indicates a problem and should +be accompanied by a descriptive error message. +.SH FEATURE SCRIPTS +The CryptoBox can be easily extended with new features. Refer to the developer +documentation of the CryptoBox for more details. +.PP +If a feature needs root privileges to accomplish its function, then you have to write +a separate python script for these actions. This script mus fulfill the following +conditions: +.TP +writable only for root +The script and all its parent directories may not be writable for anyone except root. +.TP +must be executable +The execution permission bit of the script must be set. +.TP +marking member +The script must contain a member called \fBPLUGIN_TYPE\fR with the string value +\fIcryptobox\fR. This prevents the execution of arbitrary scripts. +.SH EVENT SCRIPTS +The CryptoBox calls all scripts within a given directory whenever specific events +occour. Possible events are mounting and unmounting of disks or the bootup or shutdown +of the CryptoBox. Refer to \fI/usr/share/doc/cryptobox/event-scripts/README\fR +for further details. +.PP +An event script must fulfill the following conditions: +.TP +writable only for root +The script and all its parent directories must not be writable for anyone except root. +.TP +must be executable +The execution permission bit of the script must be set. +.TP +marked directory +The directory of the script must also contain a file called \fI_cryptobox_events_\fR to prevent the execution of arbitrary scripts. +.SH SELECTED PROGRAMS +Very few selected programs may be called via CryptoBoxRootActions. Examples +are \fBcryptsetup\fR and \fBmount\fR. Refer to the source of CryptoBoxRootActions +for details. +.SH AUTHOR +Written by Lars Kruse +.SH "REPORTING BUGS" +Report bugs to +.SH COPYRIGHT +Copyright \(co 02006 Lars Kruse + diff --git a/v0.3.4.5/man/CryptoBoxWebserver.8 b/v0.3.4.5/man/CryptoBoxWebserver.8 new file mode 100644 index 0000000..7e3f539 --- /dev/null +++ b/v0.3.4.5/man/CryptoBoxWebserver.8 @@ -0,0 +1,59 @@ +.TH CryptoBoxWebserver 1 "November 02006" "cryptobox" "daemon" +.SH NAME +CryptoBoxWebserver \- start the webserver of the \fBCryptoBox\fR package. +.SH SYNOPSIS +.B CryptoBoxWebserver +[\fIOPTIONS\fR] +.SH DESCRIPTION +.PP +The CryptoBoxWebserver is a web interface that allows you to manage encrypted and +plaintext disks of your computer without using the commandline interface. It works +easily together with \fBsamba\fR, \fBapache2-dav\fI and \fBftp\fR servers to provide +simple access to your data. +.SH OPTIONS +The following options control the behaviour of the CryptoBoxWebserver: +.TP +\fB\-c\fR, \fB\-\-config\fR=\fBFILE\fR +Use the specified configuration file. +.TP +\fB\-p\fR, \fB\-\-port\fR=\fBPORT\fR +Specify a port to listen to. The default port is 8080. +.TP +\fB\-\-host\fR=\fBHOST\fR +Specify the interface to listen to by providing a resolvable name or an ip. The server +listens to all interfaces by default. +.TP +\fB\-B\fR +Run the webserver in the background. By default the process will stay attached to the +terminal. +.TP +\fB\-u\fR, \fB\-\-user\fR=\fBUSER\fR +Run with the permissions of the given user after connecting to the port. You may use a +uid or a name. +.TP +\fB\-q\fR +Quiet output - only errors will get reported. +.TP +\fB\-\-pidfile\fR=\fBFILE\fR +Specify a pid file for the webserver. +.TP +\fB\-\-datadir\fR=\fBDIRECTORY\fR +Specify the location of the data directory of the webserver. The default location is +\fI/usr/share/cryptobox/www-data\fR. +.TP +\fB\-\-version\fR +Show the version of the \fBCryptoBox\fR and exit immediately. +.TP +\fB\-h\fR, \fB\-\-help\fR +Show the help message and exit. +.SH ENVIRONMENT VARIABLES +.IP PYTHONPATH +You may want to define this variable in case that you installed the \fBCryptoBox\fR +python package in a non-default location. +.SH AUTHOR +Written by Lars Kruse +.SH "REPORTING BUGS" +Report bugs to +.SH COPYRIGHT +Copyright \(co 02006 Lars Kruse + diff --git a/v0.3.4.5/package.exclude b/v0.3.4.5/package.exclude new file mode 100644 index 0000000..7f6fad0 --- /dev/null +++ b/v0.3.4.5/package.exclude @@ -0,0 +1,4 @@ +debian +design +stuff +package.exclude diff --git a/v0.3.4.5/plugins/date/date.py b/v0.3.4.5/plugins/date/date.py new file mode 100644 index 0000000..d3b2408 --- /dev/null +++ b/v0.3.4.5/plugins/date/date.py @@ -0,0 +1,116 @@ +# +# Copyright 2006 sense.lab e.V. +# +# This file is part of the CryptoBox. +# +# The CryptoBox 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 CryptoBox 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 the CryptoBox; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +"""Change date and time. + +requires: + - date + - ntpdate (planned) +""" + +__revision__ = "$Id" + +import cryptobox.plugins.base + + +class date(cryptobox.plugins.base.CryptoBoxPlugin): + """The date feature of the CryptoBox. + """ + + plugin_capabilities = [ "system" ] + plugin_visibility = [ "preferences" ] + request_auth = False + rank = 10 + + def do_action(self, store=None, year=0, month=0, day=0, hour=0, minute=0): + """The action handler. + """ + import datetime + if store: + try: + year, month, day = int(year), int(month), int(day) + hour, minute = int(hour), int(minute) + ## check if the values are valid + datetime.datetime(year, month, day, hour, minute) + except ValueError: + self.hdf["Data.Warning"] = "Plugins.date.InvalidDate" + else: + new_date = "%02d%02d%02d%02d%d" % (month, day, hour, minute, year) + if self.__set_date(new_date): + self.cbox.log.info("changed date to: %s" % new_date) + self.hdf["Data.Success"] = "Plugins.date.DateChanged" + else: + ## a failure should usually be an invalid date (we do not check it really) + self.cbox.log.info("failed to set date: %s" % new_date) + self.hdf["Data.Warning"] = "Plugins.date.InvalidDate" + self.__prepare_form_data() + return "form_date" + + + def get_status(self): + """Retrieve the status of the feature. + """ + now = self.__get_current_date() + return "%d/%d/%d/%d/%d/%d" % \ + (now.year, now.month, now.day, now.hour, now.minute, now.second) + + + def get_warnings(self): + import os + warnings = [] + if not os.path.isfile(self.root_action.DATE_BIN): + warnings.append((48, "Plugins.%s.MissingProgramDate" % self.get_name())) + return warnings + + + def __prepare_form_data(self): + """Set some hdf values. + """ + cur_date = self.__get_current_date() + self.hdf[self.hdf_prefix + "year"] = cur_date.year + self.hdf[self.hdf_prefix + "month"] = cur_date.month + self.hdf[self.hdf_prefix + "day"] = cur_date.day + self.hdf[self.hdf_prefix + "hour"] = cur_date.hour + self.hdf[self.hdf_prefix + "minute"] = cur_date.minute + + + def __get_current_date(self): + """Retrieve the current date and time. + """ + import datetime + return datetime.datetime(2000, 1, 1).now() + + + def __set_date(self, new_date): + """Set a new date and time. + """ + import subprocess + import os + proc = subprocess.Popen( + shell = False, + args = [ + self.cbox.prefs["Programs"]["super"], + self.cbox.prefs["Programs"]["CryptoBoxRootActions"], + "plugin", + os.path.join(self.plugin_dir, "root_action.py"), + new_date]) + proc.wait() + return proc.returncode == 0 + diff --git a/v0.3.4.5/plugins/date/form_date.cs b/v0.3.4.5/plugins/date/form_date.cs new file mode 100644 index 0000000..71d0d47 --- /dev/null +++ b/v0.3.4.5/plugins/date/form_date.cs @@ -0,0 +1,51 @@ + + + + +
+ + + + + + + + + +


+ + +

+ +


+  :  +

+ +

+ +

+ + +
+ diff --git a/v0.3.4.5/plugins/date/intl/cryptobox-server-feature-date.pot b/v0.3.4.5/plugins/date/intl/cryptobox-server-feature-date.pot new file mode 100644 index 0000000..6a75e64 --- /dev/null +++ b/v0.3.4.5/plugins/date/intl/cryptobox-server-feature-date.pot @@ -0,0 +1,95 @@ +#: Name +msgid "Change date and time" +msgstr "" + +#: Link +msgid "Date" +msgstr "" + +#: Title +msgid "Date and time setting" +msgstr "" + +#: Button.ConfigDate +msgid "Set date and time" +msgstr "" + +#: Text.Time +msgid "Time" +msgstr "" + +#: Text.Months.1 +msgid "January" +msgstr "" + +#: Text.Months.2 +msgid "February" +msgstr "" + +#: Text.Months.3 +msgid "March" +msgstr "" + +#: Text.Months.4 +msgid "April" +msgstr "" + +#: Text.Months.5 +msgid "May" +msgstr "" + +#: Text.Months.6 +msgid "June" +msgstr "" + +#: Text.Months.7 +msgid "July" +msgstr "" + +#: Text.Months.8 +msgid "August" +msgstr "" + +#: Text.Months.9 +msgid "September" +msgstr "" + +#: Text.Months.10 +msgid "October" +msgstr "" + +#: Text.Months.11 +msgid "November" +msgstr "" + +#: Text.Months.12 +msgid "December" +msgstr "" + +#: Help.ChangeDate +msgid "Change the time and date for the CryptoBox server." +msgstr "" + +#: SuccessMessage.DateChanged.Title +msgid "Date changed" +msgstr "" + +#: SuccessMessage.DateChanged.Text +msgid "The date was changed successfully." +msgstr "" + +#: WarningMessage.InvalidDate.Title +msgid "Invalid value" +msgstr "" + +#: WarningMessage.InvalidDate.Text +msgid "An invalid value for date or time was supplied. Please try again." +msgstr "" + +#: EnvironmentWarning.MissingProgramDate.Title +msgid "Missing program" +msgstr "" + +#: EnvironmentWarning.MissingProgramDate.Text +msgid "The program 'date' is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "" diff --git a/v0.3.4.5/plugins/date/intl/cs/cryptobox-server-feature-date.po b/v0.3.4.5/plugins/date/intl/cs/cryptobox-server-feature-date.po new file mode 100644 index 0000000..b8856ef --- /dev/null +++ b/v0.3.4.5/plugins/date/intl/cs/cryptobox-server-feature-date.po @@ -0,0 +1,110 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:02+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Change date and time" +msgstr "" + +#: Link +msgid "Date" +msgstr "" + +#: Title +msgid "Date and time setting" +msgstr "" + +#: Button.ConfigDate +msgid "Set date and time" +msgstr "" + +#: Text.Time +msgid "Time" +msgstr "" + +#: Text.Months.1 +msgid "January" +msgstr "" + +#: Text.Months.2 +msgid "February" +msgstr "" + +#: Text.Months.3 +msgid "March" +msgstr "" + +#: Text.Months.4 +msgid "April" +msgstr "" + +#: Text.Months.5 +msgid "May" +msgstr "" + +#: Text.Months.6 +msgid "June" +msgstr "" + +#: Text.Months.7 +msgid "July" +msgstr "" + +#: Text.Months.8 +msgid "August" +msgstr "" + +#: Text.Months.9 +msgid "September" +msgstr "" + +#: Text.Months.10 +msgid "October" +msgstr "" + +#: Text.Months.11 +msgid "November" +msgstr "" + +#: Text.Months.12 +msgid "December" +msgstr "" + +#: Help.ChangeDate +msgid "Change the time and date for the CryptoBox server." +msgstr "" + +#: SuccessMessage.DateChanged.Title +msgid "Date changed" +msgstr "" + +#: SuccessMessage.DateChanged.Text +msgid "The date was changed successfully." +msgstr "" + +#: WarningMessage.InvalidDate.Title +msgid "Invalid value" +msgstr "" + +#: WarningMessage.InvalidDate.Text +msgid "An invalid value for date or time was supplied. Please try again." +msgstr "" + +#: EnvironmentWarning.MissingProgramDate.Title +msgid "Missing program" +msgstr "" + +#: EnvironmentWarning.MissingProgramDate.Text +msgid "The program 'date' is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "" diff --git a/v0.3.4.5/plugins/date/intl/da/cryptobox-server-feature-date.po b/v0.3.4.5/plugins/date/intl/da/cryptobox-server-feature-date.po new file mode 100644 index 0000000..b8856ef --- /dev/null +++ b/v0.3.4.5/plugins/date/intl/da/cryptobox-server-feature-date.po @@ -0,0 +1,110 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:02+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Change date and time" +msgstr "" + +#: Link +msgid "Date" +msgstr "" + +#: Title +msgid "Date and time setting" +msgstr "" + +#: Button.ConfigDate +msgid "Set date and time" +msgstr "" + +#: Text.Time +msgid "Time" +msgstr "" + +#: Text.Months.1 +msgid "January" +msgstr "" + +#: Text.Months.2 +msgid "February" +msgstr "" + +#: Text.Months.3 +msgid "March" +msgstr "" + +#: Text.Months.4 +msgid "April" +msgstr "" + +#: Text.Months.5 +msgid "May" +msgstr "" + +#: Text.Months.6 +msgid "June" +msgstr "" + +#: Text.Months.7 +msgid "July" +msgstr "" + +#: Text.Months.8 +msgid "August" +msgstr "" + +#: Text.Months.9 +msgid "September" +msgstr "" + +#: Text.Months.10 +msgid "October" +msgstr "" + +#: Text.Months.11 +msgid "November" +msgstr "" + +#: Text.Months.12 +msgid "December" +msgstr "" + +#: Help.ChangeDate +msgid "Change the time and date for the CryptoBox server." +msgstr "" + +#: SuccessMessage.DateChanged.Title +msgid "Date changed" +msgstr "" + +#: SuccessMessage.DateChanged.Text +msgid "The date was changed successfully." +msgstr "" + +#: WarningMessage.InvalidDate.Title +msgid "Invalid value" +msgstr "" + +#: WarningMessage.InvalidDate.Text +msgid "An invalid value for date or time was supplied. Please try again." +msgstr "" + +#: EnvironmentWarning.MissingProgramDate.Title +msgid "Missing program" +msgstr "" + +#: EnvironmentWarning.MissingProgramDate.Text +msgid "The program 'date' is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "" diff --git a/v0.3.4.5/plugins/date/intl/de/cryptobox-server-feature-date.po b/v0.3.4.5/plugins/date/intl/de/cryptobox-server-feature-date.po new file mode 100644 index 0000000..47bb9b8 --- /dev/null +++ b/v0.3.4.5/plugins/date/intl/de/cryptobox-server-feature-date.po @@ -0,0 +1,109 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:02+0100\n" +"PO-Revision-Date: 2007-02-03 21:17+0100\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Change date and time" +msgstr "Datum und Uhrzeit ändern" + +#: Link +msgid "Date" +msgstr "Datum" + +#: Title +msgid "Date and time setting" +msgstr "Datum und Uhrzeit einstellen" + +#: Button.ConfigDate +msgid "Set date and time" +msgstr "Uhrzeit und Datum ändern" + +#: Text.Time +msgid "Time" +msgstr "Uhrzeit" + +#: Text.Months.1 +msgid "January" +msgstr "Januar" + +#: Text.Months.2 +msgid "February" +msgstr "Februar" + +#: Text.Months.3 +msgid "March" +msgstr "März" + +#: Text.Months.4 +msgid "April" +msgstr "April" + +#: Text.Months.5 +msgid "May" +msgstr "Mai" + +#: Text.Months.6 +msgid "June" +msgstr "Juni" + +#: Text.Months.7 +msgid "July" +msgstr "Juli" + +#: Text.Months.8 +msgid "August" +msgstr "August" + +#: Text.Months.9 +msgid "September" +msgstr "September" + +#: Text.Months.10 +msgid "October" +msgstr "Oktober" + +#: Text.Months.11 +msgid "November" +msgstr "November" + +#: Text.Months.12 +msgid "December" +msgstr "Dezember" + +#: Help.ChangeDate +msgid "Change the time and date for the CryptoBox server." +msgstr "Einstellen der Uhrzeit und des Datums des CryptoBox-Servers." + +#: SuccessMessage.DateChanged.Title +msgid "Date changed" +msgstr "Datum gesetzt" + +#: SuccessMessage.DateChanged.Text +msgid "The date was changed successfully." +msgstr "Das Datum wurde erfolgreich geändert." + +#: WarningMessage.InvalidDate.Title +msgid "Invalid value" +msgstr "Ungültiger Eingabewert" + +#: WarningMessage.InvalidDate.Text +msgid "An invalid value for date or time was supplied. Please try again." +msgstr "Es wurde ein ungültiger Wert für das Datum oder die Uhrzeit eingegeben. Bitte versuche es erneut." + +#: EnvironmentWarning.MissingProgramDate.Title +msgid "Missing program" +msgstr "Fehlendes Programm" + +#: EnvironmentWarning.MissingProgramDate.Text +msgid "The program 'date' is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "Das Programm 'date' ist nicht installiert. Bitte den Administrator des CryptoBox Servers dieses Programm zu installieren." diff --git a/v0.3.4.5/plugins/date/intl/en/cryptobox-server-feature-date.po b/v0.3.4.5/plugins/date/intl/en/cryptobox-server-feature-date.po new file mode 100644 index 0000000..5069bae --- /dev/null +++ b/v0.3.4.5/plugins/date/intl/en/cryptobox-server-feature-date.po @@ -0,0 +1,95 @@ +#: Name +msgid "Change date and time" +msgstr "Change date and time" + +#: Link +msgid "Date" +msgstr "Date" + +#: Title +msgid "Date and time setting" +msgstr "Date and time setting" + +#: Button.ConfigDate +msgid "Set date and time" +msgstr "Set date and time" + +#: Text.Time +msgid "Time" +msgstr "Time" + +#: Text.Months.1 +msgid "January" +msgstr "January" + +#: Text.Months.2 +msgid "February" +msgstr "February" + +#: Text.Months.3 +msgid "March" +msgstr "March" + +#: Text.Months.4 +msgid "April" +msgstr "April" + +#: Text.Months.5 +msgid "May" +msgstr "May" + +#: Text.Months.6 +msgid "June" +msgstr "June" + +#: Text.Months.7 +msgid "July" +msgstr "July" + +#: Text.Months.8 +msgid "August" +msgstr "August" + +#: Text.Months.9 +msgid "September" +msgstr "September" + +#: Text.Months.10 +msgid "October" +msgstr "October" + +#: Text.Months.11 +msgid "November" +msgstr "November" + +#: Text.Months.12 +msgid "December" +msgstr "December" + +#: Help.ChangeDate +msgid "Change the time and date for the CryptoBox server." +msgstr "Change the time and date for the CryptoBox server." + +#: SuccessMessage.DateChanged.Title +msgid "Date changed" +msgstr "Date changed" + +#: SuccessMessage.DateChanged.Text +msgid "The date was changed successfully." +msgstr "The date was changed successfully." + +#: WarningMessage.InvalidDate.Title +msgid "Invalid value" +msgstr "Invalid value" + +#: WarningMessage.InvalidDate.Text +msgid "An invalid value for date or time was supplied. Please try again." +msgstr "An invalid value for date or time was supplied. Please try again." + +#: EnvironmentWarning.MissingProgramDate.Title +msgid "Missing program" +msgstr "Missing program" + +#: EnvironmentWarning.MissingProgramDate.Text +msgid "The program 'date' is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "The program 'date' is not installed. Please ask the administrator of the CryptoBox server to configure it properly." diff --git a/v0.3.4.5/plugins/date/intl/es/cryptobox-server-feature-date.po b/v0.3.4.5/plugins/date/intl/es/cryptobox-server-feature-date.po new file mode 100644 index 0000000..158a4f3 --- /dev/null +++ b/v0.3.4.5/plugins/date/intl/es/cryptobox-server-feature-date.po @@ -0,0 +1,109 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:02+0100\n" +"PO-Revision-Date: 2007-01-30 19:31+0100\n" +"Last-Translator: kessel \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Change date and time" +msgstr "" + +#: Link +msgid "Date" +msgstr "fecha" + +#: Title +msgid "Date and time setting" +msgstr "" + +#: Button.ConfigDate +msgid "Set date and time" +msgstr "cambiar fecha y tiempo" + +#: Text.Time +msgid "Time" +msgstr "tiempo" + +#: Text.Months.1 +msgid "January" +msgstr "enero" + +#: Text.Months.2 +msgid "February" +msgstr "febrero" + +#: Text.Months.3 +msgid "March" +msgstr "marzo" + +#: Text.Months.4 +msgid "April" +msgstr "abril" + +#: Text.Months.5 +msgid "May" +msgstr "mayo" + +#: Text.Months.6 +msgid "June" +msgstr "junio" + +#: Text.Months.7 +msgid "July" +msgstr "julio" + +#: Text.Months.8 +msgid "August" +msgstr "agosto" + +#: Text.Months.9 +msgid "September" +msgstr "septiembre" + +#: Text.Months.10 +msgid "October" +msgstr "octubre" + +#: Text.Months.11 +msgid "November" +msgstr "noviembre" + +#: Text.Months.12 +msgid "December" +msgstr "diciembre" + +#: Help.ChangeDate +msgid "Change the time and date for the CryptoBox server." +msgstr "" + +#: SuccessMessage.DateChanged.Title +msgid "Date changed" +msgstr "" + +#: SuccessMessage.DateChanged.Text +msgid "The date was changed successfully." +msgstr "" + +#: WarningMessage.InvalidDate.Title +msgid "Invalid value" +msgstr "" + +#: WarningMessage.InvalidDate.Text +msgid "An invalid value for date or time was supplied. Please try again." +msgstr "" + +#: EnvironmentWarning.MissingProgramDate.Title +msgid "Missing program" +msgstr "" + +#: EnvironmentWarning.MissingProgramDate.Text +msgid "The program 'date' is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "" diff --git a/v0.3.4.5/plugins/date/intl/fi/cryptobox-server-feature-date.po b/v0.3.4.5/plugins/date/intl/fi/cryptobox-server-feature-date.po new file mode 100644 index 0000000..b8856ef --- /dev/null +++ b/v0.3.4.5/plugins/date/intl/fi/cryptobox-server-feature-date.po @@ -0,0 +1,110 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:02+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Change date and time" +msgstr "" + +#: Link +msgid "Date" +msgstr "" + +#: Title +msgid "Date and time setting" +msgstr "" + +#: Button.ConfigDate +msgid "Set date and time" +msgstr "" + +#: Text.Time +msgid "Time" +msgstr "" + +#: Text.Months.1 +msgid "January" +msgstr "" + +#: Text.Months.2 +msgid "February" +msgstr "" + +#: Text.Months.3 +msgid "March" +msgstr "" + +#: Text.Months.4 +msgid "April" +msgstr "" + +#: Text.Months.5 +msgid "May" +msgstr "" + +#: Text.Months.6 +msgid "June" +msgstr "" + +#: Text.Months.7 +msgid "July" +msgstr "" + +#: Text.Months.8 +msgid "August" +msgstr "" + +#: Text.Months.9 +msgid "September" +msgstr "" + +#: Text.Months.10 +msgid "October" +msgstr "" + +#: Text.Months.11 +msgid "November" +msgstr "" + +#: Text.Months.12 +msgid "December" +msgstr "" + +#: Help.ChangeDate +msgid "Change the time and date for the CryptoBox server." +msgstr "" + +#: SuccessMessage.DateChanged.Title +msgid "Date changed" +msgstr "" + +#: SuccessMessage.DateChanged.Text +msgid "The date was changed successfully." +msgstr "" + +#: WarningMessage.InvalidDate.Title +msgid "Invalid value" +msgstr "" + +#: WarningMessage.InvalidDate.Text +msgid "An invalid value for date or time was supplied. Please try again." +msgstr "" + +#: EnvironmentWarning.MissingProgramDate.Title +msgid "Missing program" +msgstr "" + +#: EnvironmentWarning.MissingProgramDate.Text +msgid "The program 'date' is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "" diff --git a/v0.3.4.5/plugins/date/intl/fr/cryptobox-server-feature-date.po b/v0.3.4.5/plugins/date/intl/fr/cryptobox-server-feature-date.po new file mode 100644 index 0000000..b8856ef --- /dev/null +++ b/v0.3.4.5/plugins/date/intl/fr/cryptobox-server-feature-date.po @@ -0,0 +1,110 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:02+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Change date and time" +msgstr "" + +#: Link +msgid "Date" +msgstr "" + +#: Title +msgid "Date and time setting" +msgstr "" + +#: Button.ConfigDate +msgid "Set date and time" +msgstr "" + +#: Text.Time +msgid "Time" +msgstr "" + +#: Text.Months.1 +msgid "January" +msgstr "" + +#: Text.Months.2 +msgid "February" +msgstr "" + +#: Text.Months.3 +msgid "March" +msgstr "" + +#: Text.Months.4 +msgid "April" +msgstr "" + +#: Text.Months.5 +msgid "May" +msgstr "" + +#: Text.Months.6 +msgid "June" +msgstr "" + +#: Text.Months.7 +msgid "July" +msgstr "" + +#: Text.Months.8 +msgid "August" +msgstr "" + +#: Text.Months.9 +msgid "September" +msgstr "" + +#: Text.Months.10 +msgid "October" +msgstr "" + +#: Text.Months.11 +msgid "November" +msgstr "" + +#: Text.Months.12 +msgid "December" +msgstr "" + +#: Help.ChangeDate +msgid "Change the time and date for the CryptoBox server." +msgstr "" + +#: SuccessMessage.DateChanged.Title +msgid "Date changed" +msgstr "" + +#: SuccessMessage.DateChanged.Text +msgid "The date was changed successfully." +msgstr "" + +#: WarningMessage.InvalidDate.Title +msgid "Invalid value" +msgstr "" + +#: WarningMessage.InvalidDate.Text +msgid "An invalid value for date or time was supplied. Please try again." +msgstr "" + +#: EnvironmentWarning.MissingProgramDate.Title +msgid "Missing program" +msgstr "" + +#: EnvironmentWarning.MissingProgramDate.Text +msgid "The program 'date' is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "" diff --git a/v0.3.4.5/plugins/date/intl/hu/cryptobox-server-feature-date.po b/v0.3.4.5/plugins/date/intl/hu/cryptobox-server-feature-date.po new file mode 100644 index 0000000..b8856ef --- /dev/null +++ b/v0.3.4.5/plugins/date/intl/hu/cryptobox-server-feature-date.po @@ -0,0 +1,110 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:02+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Change date and time" +msgstr "" + +#: Link +msgid "Date" +msgstr "" + +#: Title +msgid "Date and time setting" +msgstr "" + +#: Button.ConfigDate +msgid "Set date and time" +msgstr "" + +#: Text.Time +msgid "Time" +msgstr "" + +#: Text.Months.1 +msgid "January" +msgstr "" + +#: Text.Months.2 +msgid "February" +msgstr "" + +#: Text.Months.3 +msgid "March" +msgstr "" + +#: Text.Months.4 +msgid "April" +msgstr "" + +#: Text.Months.5 +msgid "May" +msgstr "" + +#: Text.Months.6 +msgid "June" +msgstr "" + +#: Text.Months.7 +msgid "July" +msgstr "" + +#: Text.Months.8 +msgid "August" +msgstr "" + +#: Text.Months.9 +msgid "September" +msgstr "" + +#: Text.Months.10 +msgid "October" +msgstr "" + +#: Text.Months.11 +msgid "November" +msgstr "" + +#: Text.Months.12 +msgid "December" +msgstr "" + +#: Help.ChangeDate +msgid "Change the time and date for the CryptoBox server." +msgstr "" + +#: SuccessMessage.DateChanged.Title +msgid "Date changed" +msgstr "" + +#: SuccessMessage.DateChanged.Text +msgid "The date was changed successfully." +msgstr "" + +#: WarningMessage.InvalidDate.Title +msgid "Invalid value" +msgstr "" + +#: WarningMessage.InvalidDate.Text +msgid "An invalid value for date or time was supplied. Please try again." +msgstr "" + +#: EnvironmentWarning.MissingProgramDate.Title +msgid "Missing program" +msgstr "" + +#: EnvironmentWarning.MissingProgramDate.Text +msgid "The program 'date' is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "" diff --git a/v0.3.4.5/plugins/date/intl/it/cryptobox-server-feature-date.po b/v0.3.4.5/plugins/date/intl/it/cryptobox-server-feature-date.po new file mode 100644 index 0000000..f7c6c40 --- /dev/null +++ b/v0.3.4.5/plugins/date/intl/it/cryptobox-server-feature-date.po @@ -0,0 +1,109 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:02+0100\n" +"PO-Revision-Date: 2007-02-24 10:08+0100\n" +"Last-Translator: Fabrizio Tarizzo \n" +"Language-Team: Italian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Change date and time" +msgstr "Modificare data e ora" + +#: Link +msgid "Date" +msgstr "Data" + +#: Title +msgid "Date and time setting" +msgstr "Impostazioni di data e ora" + +#: Button.ConfigDate +msgid "Set date and time" +msgstr "Imposta data e ora" + +#: Text.Time +msgid "Time" +msgstr "Ora" + +#: Text.Months.1 +msgid "January" +msgstr "Gennaio" + +#: Text.Months.2 +msgid "February" +msgstr "Febbraio" + +#: Text.Months.3 +msgid "March" +msgstr "Marzo" + +#: Text.Months.4 +msgid "April" +msgstr "Aprile" + +#: Text.Months.5 +msgid "May" +msgstr "Maggio" + +#: Text.Months.6 +msgid "June" +msgstr "Giugno" + +#: Text.Months.7 +msgid "July" +msgstr "Luglio" + +#: Text.Months.8 +msgid "August" +msgstr "Agosto" + +#: Text.Months.9 +msgid "September" +msgstr "Settembre" + +#: Text.Months.10 +msgid "October" +msgstr "Ottobre" + +#: Text.Months.11 +msgid "November" +msgstr "Novembre" + +#: Text.Months.12 +msgid "December" +msgstr "Dicembre" + +#: Help.ChangeDate +msgid "Change the time and date for the CryptoBox server." +msgstr "Modificare ora e data per il server CryptoBox." + +#: SuccessMessage.DateChanged.Title +msgid "Date changed" +msgstr "Data modificata" + +#: SuccessMessage.DateChanged.Text +msgid "The date was changed successfully." +msgstr "La data è stata modificata con succeso." + +#: WarningMessage.InvalidDate.Title +msgid "Invalid value" +msgstr "Valore non valido" + +#: WarningMessage.InvalidDate.Text +msgid "An invalid value for date or time was supplied. Please try again." +msgstr "È stato inserito un valore non valido per la data o per l'ora. Riprovare." + +#: EnvironmentWarning.MissingProgramDate.Title +msgid "Missing program" +msgstr "Programma mancante" + +#: EnvironmentWarning.MissingProgramDate.Text +msgid "The program 'date' is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "Il programma 'date' non è installato. Rivolgersi all'amministratore del server CryptoBox per installarlo e configurarlo opportunamente." diff --git a/v0.3.4.5/plugins/date/intl/ja/cryptobox-server-feature-date.po b/v0.3.4.5/plugins/date/intl/ja/cryptobox-server-feature-date.po new file mode 100644 index 0000000..9efdbf7 --- /dev/null +++ b/v0.3.4.5/plugins/date/intl/ja/cryptobox-server-feature-date.po @@ -0,0 +1,109 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:02+0100\n" +"PO-Revision-Date: 2007-02-26 03:06+0100\n" +"Last-Translator: kinneko \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Change date and time" +msgstr "日付と時刻の変更" + +#: Link +msgid "Date" +msgstr "日付" + +#: Title +msgid "Date and time setting" +msgstr "日付と時刻の設定" + +#: Button.ConfigDate +msgid "Set date and time" +msgstr "日付と時刻を設定する" + +#: Text.Time +msgid "Time" +msgstr "時刻" + +#: Text.Months.1 +msgid "January" +msgstr "1月" + +#: Text.Months.2 +msgid "February" +msgstr "2月" + +#: Text.Months.3 +msgid "March" +msgstr "3月" + +#: Text.Months.4 +msgid "April" +msgstr "4月" + +#: Text.Months.5 +msgid "May" +msgstr "5月" + +#: Text.Months.6 +msgid "June" +msgstr "6月" + +#: Text.Months.7 +msgid "July" +msgstr "7月" + +#: Text.Months.8 +msgid "August" +msgstr "8月" + +#: Text.Months.9 +msgid "September" +msgstr "9月" + +#: Text.Months.10 +msgid "October" +msgstr "10月" + +#: Text.Months.11 +msgid "November" +msgstr "11月" + +#: Text.Months.12 +msgid "December" +msgstr "12月" + +#: Help.ChangeDate +msgid "Change the time and date for the CryptoBox server." +msgstr "クリプトボックスサーバーの日付と時刻を変更します。" + +#: SuccessMessage.DateChanged.Title +msgid "Date changed" +msgstr "日付を変更しました" + +#: SuccessMessage.DateChanged.Text +msgid "The date was changed successfully." +msgstr "日付の変更に成功しました。" + +#: WarningMessage.InvalidDate.Title +msgid "Invalid value" +msgstr "無効な値です" + +#: WarningMessage.InvalidDate.Text +msgid "An invalid value for date or time was supplied. Please try again." +msgstr "日付や時刻に無効な値が入力されました。もう一度試してください。" + +#: EnvironmentWarning.MissingProgramDate.Title +msgid "Missing program" +msgstr "外部プログラムがありません" + +#: EnvironmentWarning.MissingProgramDate.Text +msgid "The program 'date' is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "'date'コマンドがインストールされていないようです。クリプトボックスの管理者に、インストールを依頼してください。" diff --git a/v0.3.4.5/plugins/date/intl/nl/cryptobox-server-feature-date.po b/v0.3.4.5/plugins/date/intl/nl/cryptobox-server-feature-date.po new file mode 100644 index 0000000..b8856ef --- /dev/null +++ b/v0.3.4.5/plugins/date/intl/nl/cryptobox-server-feature-date.po @@ -0,0 +1,110 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:02+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Change date and time" +msgstr "" + +#: Link +msgid "Date" +msgstr "" + +#: Title +msgid "Date and time setting" +msgstr "" + +#: Button.ConfigDate +msgid "Set date and time" +msgstr "" + +#: Text.Time +msgid "Time" +msgstr "" + +#: Text.Months.1 +msgid "January" +msgstr "" + +#: Text.Months.2 +msgid "February" +msgstr "" + +#: Text.Months.3 +msgid "March" +msgstr "" + +#: Text.Months.4 +msgid "April" +msgstr "" + +#: Text.Months.5 +msgid "May" +msgstr "" + +#: Text.Months.6 +msgid "June" +msgstr "" + +#: Text.Months.7 +msgid "July" +msgstr "" + +#: Text.Months.8 +msgid "August" +msgstr "" + +#: Text.Months.9 +msgid "September" +msgstr "" + +#: Text.Months.10 +msgid "October" +msgstr "" + +#: Text.Months.11 +msgid "November" +msgstr "" + +#: Text.Months.12 +msgid "December" +msgstr "" + +#: Help.ChangeDate +msgid "Change the time and date for the CryptoBox server." +msgstr "" + +#: SuccessMessage.DateChanged.Title +msgid "Date changed" +msgstr "" + +#: SuccessMessage.DateChanged.Text +msgid "The date was changed successfully." +msgstr "" + +#: WarningMessage.InvalidDate.Title +msgid "Invalid value" +msgstr "" + +#: WarningMessage.InvalidDate.Text +msgid "An invalid value for date or time was supplied. Please try again." +msgstr "" + +#: EnvironmentWarning.MissingProgramDate.Title +msgid "Missing program" +msgstr "" + +#: EnvironmentWarning.MissingProgramDate.Text +msgid "The program 'date' is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "" diff --git a/v0.3.4.5/plugins/date/intl/pl/cryptobox-server-feature-date.po b/v0.3.4.5/plugins/date/intl/pl/cryptobox-server-feature-date.po new file mode 100644 index 0000000..3dd1a27 --- /dev/null +++ b/v0.3.4.5/plugins/date/intl/pl/cryptobox-server-feature-date.po @@ -0,0 +1,109 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-04-01 15:52+0200\n" +"PO-Revision-Date: 2007-03-28 18:00+0100\n" +"Last-Translator: KAZNOWSKI & ASSOCIATES \n" +"Language-Team: POLSKI \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Change date and time" +msgstr "Zmień datę i godzinę" + +#: Link +msgid "Date" +msgstr "Data" + +#: Title +msgid "Date and time setting" +msgstr "Ustawienia daty i godziny" + +#: Button.ConfigDate +msgid "Set date and time" +msgstr "Ustaw datę i godzinę" + +#: Text.Time +msgid "Time" +msgstr "Czas" + +#: Text.Months.1 +msgid "January" +msgstr "styczeń" + +#: Text.Months.2 +msgid "February" +msgstr "luty" + +#: Text.Months.3 +msgid "March" +msgstr "marzec" + +#: Text.Months.4 +msgid "April" +msgstr "kwiecień" + +#: Text.Months.5 +msgid "May" +msgstr "maj" + +#: Text.Months.6 +msgid "June" +msgstr "czerwiec" + +#: Text.Months.7 +msgid "July" +msgstr "lipiec" + +#: Text.Months.8 +msgid "August" +msgstr "sierpień" + +#: Text.Months.9 +msgid "September" +msgstr "wrzesień" + +#: Text.Months.10 +msgid "October" +msgstr "październik" + +#: Text.Months.11 +msgid "November" +msgstr "listopad" + +#: Text.Months.12 +msgid "December" +msgstr "grudzień" + +#: Help.ChangeDate +msgid "Change the time and date for the CryptoBox server." +msgstr "Zmień datę i godzinę serwera CryptoBox." + +#: SuccessMessage.DateChanged.Title +msgid "Date changed" +msgstr "Datę zmieniono" + +#: SuccessMessage.DateChanged.Text +msgid "The date was changed successfully." +msgstr "Zmieniono datę." + +#: WarningMessage.InvalidDate.Title +msgid "Invalid value" +msgstr "Nieprawidłowe dane" + +#: WarningMessage.InvalidDate.Text +msgid "An invalid value for date or time was supplied. Please try again." +msgstr "Podano nieprawidłowe dane godziny lub daty. Proszę spróbować ponownie." + +#: EnvironmentWarning.MissingProgramDate.Title +msgid "Missing program" +msgstr "Brak programu" + +#: EnvironmentWarning.MissingProgramDate.Text +msgid "The program 'date' is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "Program 'data' nie został zainstalowany. Proszę zwrócić się do administratora serwera CryptoBox, aby prawidłowo skonfigurał go." diff --git a/v0.3.4.5/plugins/date/intl/pt/cryptobox-server-feature-date.po b/v0.3.4.5/plugins/date/intl/pt/cryptobox-server-feature-date.po new file mode 100644 index 0000000..b8856ef --- /dev/null +++ b/v0.3.4.5/plugins/date/intl/pt/cryptobox-server-feature-date.po @@ -0,0 +1,110 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:02+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Change date and time" +msgstr "" + +#: Link +msgid "Date" +msgstr "" + +#: Title +msgid "Date and time setting" +msgstr "" + +#: Button.ConfigDate +msgid "Set date and time" +msgstr "" + +#: Text.Time +msgid "Time" +msgstr "" + +#: Text.Months.1 +msgid "January" +msgstr "" + +#: Text.Months.2 +msgid "February" +msgstr "" + +#: Text.Months.3 +msgid "March" +msgstr "" + +#: Text.Months.4 +msgid "April" +msgstr "" + +#: Text.Months.5 +msgid "May" +msgstr "" + +#: Text.Months.6 +msgid "June" +msgstr "" + +#: Text.Months.7 +msgid "July" +msgstr "" + +#: Text.Months.8 +msgid "August" +msgstr "" + +#: Text.Months.9 +msgid "September" +msgstr "" + +#: Text.Months.10 +msgid "October" +msgstr "" + +#: Text.Months.11 +msgid "November" +msgstr "" + +#: Text.Months.12 +msgid "December" +msgstr "" + +#: Help.ChangeDate +msgid "Change the time and date for the CryptoBox server." +msgstr "" + +#: SuccessMessage.DateChanged.Title +msgid "Date changed" +msgstr "" + +#: SuccessMessage.DateChanged.Text +msgid "The date was changed successfully." +msgstr "" + +#: WarningMessage.InvalidDate.Title +msgid "Invalid value" +msgstr "" + +#: WarningMessage.InvalidDate.Text +msgid "An invalid value for date or time was supplied. Please try again." +msgstr "" + +#: EnvironmentWarning.MissingProgramDate.Title +msgid "Missing program" +msgstr "" + +#: EnvironmentWarning.MissingProgramDate.Text +msgid "The program 'date' is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "" diff --git a/v0.3.4.5/plugins/date/intl/ru/cryptobox-server-feature-date.po b/v0.3.4.5/plugins/date/intl/ru/cryptobox-server-feature-date.po new file mode 100644 index 0000000..b8856ef --- /dev/null +++ b/v0.3.4.5/plugins/date/intl/ru/cryptobox-server-feature-date.po @@ -0,0 +1,110 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:02+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Change date and time" +msgstr "" + +#: Link +msgid "Date" +msgstr "" + +#: Title +msgid "Date and time setting" +msgstr "" + +#: Button.ConfigDate +msgid "Set date and time" +msgstr "" + +#: Text.Time +msgid "Time" +msgstr "" + +#: Text.Months.1 +msgid "January" +msgstr "" + +#: Text.Months.2 +msgid "February" +msgstr "" + +#: Text.Months.3 +msgid "March" +msgstr "" + +#: Text.Months.4 +msgid "April" +msgstr "" + +#: Text.Months.5 +msgid "May" +msgstr "" + +#: Text.Months.6 +msgid "June" +msgstr "" + +#: Text.Months.7 +msgid "July" +msgstr "" + +#: Text.Months.8 +msgid "August" +msgstr "" + +#: Text.Months.9 +msgid "September" +msgstr "" + +#: Text.Months.10 +msgid "October" +msgstr "" + +#: Text.Months.11 +msgid "November" +msgstr "" + +#: Text.Months.12 +msgid "December" +msgstr "" + +#: Help.ChangeDate +msgid "Change the time and date for the CryptoBox server." +msgstr "" + +#: SuccessMessage.DateChanged.Title +msgid "Date changed" +msgstr "" + +#: SuccessMessage.DateChanged.Text +msgid "The date was changed successfully." +msgstr "" + +#: WarningMessage.InvalidDate.Title +msgid "Invalid value" +msgstr "" + +#: WarningMessage.InvalidDate.Text +msgid "An invalid value for date or time was supplied. Please try again." +msgstr "" + +#: EnvironmentWarning.MissingProgramDate.Title +msgid "Missing program" +msgstr "" + +#: EnvironmentWarning.MissingProgramDate.Text +msgid "The program 'date' is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "" diff --git a/v0.3.4.5/plugins/date/intl/sl/cryptobox-server-feature-date.po b/v0.3.4.5/plugins/date/intl/sl/cryptobox-server-feature-date.po new file mode 100644 index 0000000..c46cb1b --- /dev/null +++ b/v0.3.4.5/plugins/date/intl/sl/cryptobox-server-feature-date.po @@ -0,0 +1,109 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:02+0100\n" +"PO-Revision-Date: 2007-02-06 10:07+0100\n" +"Last-Translator: tenzin \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Change date and time" +msgstr "Spremeni datum in čas" + +#: Link +msgid "Date" +msgstr "Datum" + +#: Title +msgid "Date and time setting" +msgstr "Nastavitve datum/čas" + +#: Button.ConfigDate +msgid "Set date and time" +msgstr "Nastavi datum/čas" + +#: Text.Time +msgid "Time" +msgstr "Čas" + +#: Text.Months.1 +msgid "January" +msgstr "Januar" + +#: Text.Months.2 +msgid "February" +msgstr "Februar" + +#: Text.Months.3 +msgid "March" +msgstr "Marec" + +#: Text.Months.4 +msgid "April" +msgstr "April" + +#: Text.Months.5 +msgid "May" +msgstr "Maj" + +#: Text.Months.6 +msgid "June" +msgstr "Junij" + +#: Text.Months.7 +msgid "July" +msgstr "Julij" + +#: Text.Months.8 +msgid "August" +msgstr "Avgust" + +#: Text.Months.9 +msgid "September" +msgstr "September" + +#: Text.Months.10 +msgid "October" +msgstr "Oktober" + +#: Text.Months.11 +msgid "November" +msgstr "November" + +#: Text.Months.12 +msgid "December" +msgstr "December" + +#: Help.ChangeDate +msgid "Change the time and date for the CryptoBox server." +msgstr "Spremeni čas in datum za Cryptobox server" + +#: SuccessMessage.DateChanged.Title +msgid "Date changed" +msgstr "Datum je spremenjen" + +#: SuccessMessage.DateChanged.Text +msgid "The date was changed successfully." +msgstr "Datum je bil uspešno spremenjen" + +#: WarningMessage.InvalidDate.Title +msgid "Invalid value" +msgstr "Neveljavna vrednost" + +#: WarningMessage.InvalidDate.Text +msgid "An invalid value for date or time was supplied. Please try again." +msgstr "Nepravilen vnos datuma ali časa. Prosimo poskusite ponovno." + +#: EnvironmentWarning.MissingProgramDate.Title +msgid "Missing program" +msgstr "Program manjka" + +#: EnvironmentWarning.MissingProgramDate.Text +msgid "The program 'date' is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "Program \"datum\" ni nameščen. Prosite Cryptobox server administratorja naj program pravilno namesti. " diff --git a/v0.3.4.5/plugins/date/intl/sv/cryptobox-server-feature-date.po b/v0.3.4.5/plugins/date/intl/sv/cryptobox-server-feature-date.po new file mode 100644 index 0000000..b8856ef --- /dev/null +++ b/v0.3.4.5/plugins/date/intl/sv/cryptobox-server-feature-date.po @@ -0,0 +1,110 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:02+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Change date and time" +msgstr "" + +#: Link +msgid "Date" +msgstr "" + +#: Title +msgid "Date and time setting" +msgstr "" + +#: Button.ConfigDate +msgid "Set date and time" +msgstr "" + +#: Text.Time +msgid "Time" +msgstr "" + +#: Text.Months.1 +msgid "January" +msgstr "" + +#: Text.Months.2 +msgid "February" +msgstr "" + +#: Text.Months.3 +msgid "March" +msgstr "" + +#: Text.Months.4 +msgid "April" +msgstr "" + +#: Text.Months.5 +msgid "May" +msgstr "" + +#: Text.Months.6 +msgid "June" +msgstr "" + +#: Text.Months.7 +msgid "July" +msgstr "" + +#: Text.Months.8 +msgid "August" +msgstr "" + +#: Text.Months.9 +msgid "September" +msgstr "" + +#: Text.Months.10 +msgid "October" +msgstr "" + +#: Text.Months.11 +msgid "November" +msgstr "" + +#: Text.Months.12 +msgid "December" +msgstr "" + +#: Help.ChangeDate +msgid "Change the time and date for the CryptoBox server." +msgstr "" + +#: SuccessMessage.DateChanged.Title +msgid "Date changed" +msgstr "" + +#: SuccessMessage.DateChanged.Text +msgid "The date was changed successfully." +msgstr "" + +#: WarningMessage.InvalidDate.Title +msgid "Invalid value" +msgstr "" + +#: WarningMessage.InvalidDate.Text +msgid "An invalid value for date or time was supplied. Please try again." +msgstr "" + +#: EnvironmentWarning.MissingProgramDate.Title +msgid "Missing program" +msgstr "" + +#: EnvironmentWarning.MissingProgramDate.Text +msgid "The program 'date' is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "" diff --git a/v0.3.4.5/plugins/date/intl/ur/cryptobox-server-feature-date.po b/v0.3.4.5/plugins/date/intl/ur/cryptobox-server-feature-date.po new file mode 100644 index 0000000..1add937 --- /dev/null +++ b/v0.3.4.5/plugins/date/intl/ur/cryptobox-server-feature-date.po @@ -0,0 +1,110 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-02-05 23:28+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Change date and time" +msgstr "" + +#: Link +msgid "Date" +msgstr "" + +#: Title +msgid "Date and time setting" +msgstr "" + +#: Button.ConfigDate +msgid "Set date and time" +msgstr "" + +#: Text.Time +msgid "Time" +msgstr "" + +#: Text.Months.1 +msgid "January" +msgstr "" + +#: Text.Months.2 +msgid "February" +msgstr "" + +#: Text.Months.3 +msgid "March" +msgstr "" + +#: Text.Months.4 +msgid "April" +msgstr "" + +#: Text.Months.5 +msgid "May" +msgstr "" + +#: Text.Months.6 +msgid "June" +msgstr "" + +#: Text.Months.7 +msgid "July" +msgstr "" + +#: Text.Months.8 +msgid "August" +msgstr "" + +#: Text.Months.9 +msgid "September" +msgstr "" + +#: Text.Months.10 +msgid "October" +msgstr "" + +#: Text.Months.11 +msgid "November" +msgstr "" + +#: Text.Months.12 +msgid "December" +msgstr "" + +#: Help.ChangeDate +msgid "Change the time and date for the CryptoBox server." +msgstr "" + +#: SuccessMessage.DateChanged.Title +msgid "Date changed" +msgstr "" + +#: SuccessMessage.DateChanged.Text +msgid "The date was changed successfully." +msgstr "" + +#: WarningMessage.InvalidDate.Title +msgid "Invalid value" +msgstr "" + +#: WarningMessage.InvalidDate.Text +msgid "An invalid value for date or time was supplied. Please try again." +msgstr "" + +#: EnvironmentWarning.MissingProgramDate.Title +msgid "Missing program" +msgstr "" + +#: EnvironmentWarning.MissingProgramDate.Text +msgid "The program 'date' is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "" diff --git a/v0.3.4.5/plugins/date/language.hdf b/v0.3.4.5/plugins/date/language.hdf new file mode 100644 index 0000000..610ca89 --- /dev/null +++ b/v0.3.4.5/plugins/date/language.hdf @@ -0,0 +1,47 @@ +Name = Change date and time +Link = Date + +Title = Date and time setting + +Button.ConfigDate = Set date and time + +Text.Date = Date +Text.Time = Time +Text.Months { + 1 = January + 2 = February + 3 = March + 4 = April + 5 = May + 6 = June + 7 = July + 8 = August + 9 = September + 10 = October + 11 = November + 12 = December +} + +Help.ChangeDate = Change the time and date for the CryptoBox server. + +SuccessMessage { + DateChanged { + Title = Date changed + Text = The date was changed successfully. + } +} + +WarningMessage { + InvalidDate { + Title = Invalid value + Text = An invalid value for date or time was supplied. Please try again. + } +} + +EnvironmentWarning { + MissingProgramDate { + Title = Missing program + Text = The program 'date' is not installed. Please ask the administrator of the CryptoBox server to configure it properly. + } +} + diff --git a/v0.3.4.5/plugins/date/plugin_icon.gif b/v0.3.4.5/plugins/date/plugin_icon.gif new file mode 100644 index 0000000000000000000000000000000000000000..7b660d0a4f6d8fcf7331cd0a5e32db7475f65a98 GIT binary patch literal 2116 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 1: + sys.stderr.write("%s: too many arguments (%s)\n" % (self_bin, args)) + sys.exit(1) + + if len(args) == 0: + sys.stderr.write("%s: no argument supplied\n" % self_bin) + sys.exit(1) + + if re.search(r'\D', args[0]): + sys.stderr.write("%s: illegal argument (%s)\n" % (self_bin, args[0])) + sys.exit(1) + + proc = subprocess.Popen( + shell = False, + stdout = subprocess.PIPE, + args = [DATE_BIN, args[0]]) + proc.wait() + sys.exit(proc.returncode) + diff --git a/v0.3.4.5/plugins/date/unittests.py b/v0.3.4.5/plugins/date/unittests.py new file mode 100644 index 0000000..604276c --- /dev/null +++ b/v0.3.4.5/plugins/date/unittests.py @@ -0,0 +1,97 @@ +# +# Copyright 2006 sense.lab e.V. +# +# This file is part of the CryptoBox. +# +# The CryptoBox 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 CryptoBox 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 the CryptoBox; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +__revision__ = "$Id" + +from cryptobox.tests.base import WebInterfaceTestClass + +class unittests(WebInterfaceTestClass): + + def test_get_date(self): + """retrieve the current date""" + date = self._get_current_date() + + + def test_change_date(self): + """set the date back and forth""" + now = self._get_current_date() + ## copy current time + new_date = dict(now) + ## move three minutes forward (more is not nice because of screensavers) + new_date["minute"] = (now["minute"] + 3) % 60 + ## in case of minute-overflow we also have to move the hour a little bit forward + new_date["hour"] = now["hour"] + ((now["minute"] + 3) / 60) + ## move forward ... + self._setDate(new_date) + self.assertEquals(new_date, self._get_current_date()) + ## ... and backward + self._setDate(now) + self.assertEquals(now, self._get_current_date()) + + + def test_try_broken_date(self): + """expect error messages for invalid dates""" + self._setDate({"hour":12, "minute":40, "year":2004, "month":7, "day":0}) + self.cmd.find("invalid value for date") + self._setDate({"hour":12, "minute":40, "year":"x", "month":7, "day":2}) + self.cmd.find("invalid value for date") + self._setDate({"hour":12, "minute":40, "year":2004, "month":2, "day":31}) + self.cmd.find("invalid value for date") + + + def _get_current_date(self): + date_url = self.url + "date" + self.register_auth(date_url) + self.cmd.go(date_url) + self.cmd.find("Data.Status.Plugins.date=([0-9]+/[0-9]+/[0-9]+/[0-9]+/[0-9]+/[0-9]+)$", "m") + dateNumbers = self.locals["__match__"].split("/") + self.assertEquals(len(dateNumbers), 6) + ## we ignore seconds + dateField = { + "year" : int(dateNumbers[0]), + "month" : int(dateNumbers[1]), + "day" : int(dateNumbers[2]), + "hour" : int(dateNumbers[3]), + "minute" : int(dateNumbers[4])} + return dateField + + + def _setDate(self, date): + """for now we have to use this function instead of the one below""" + date_url = self.url + "date?weblang=en&store=1&year=%s&month=%s&day=%s&hour=%s&minute=%s"\ + % (str(date["year"]), str(date["month"]), str(date["day"]), + str(date["hour"]), str(date["minute"])) + self.register_auth(date_url) + self.cmd.go(date_url) + + + def _setDateBroken(self, date): + """this should work, but the parsing of twill seems to be broken + as soon as the twill bug is fixed, we should use this function""" + date_url = self.url + "date" + self.register_auth(date_url) + self.cmd.go(date_url) + self.cmd.formvalue("set_date", "year", str(date["year"])) + self.cmd.formvalue("set_date", "month", str(date["month"])) + self.cmd.formvalue("set_date", "day", str(date["day"])) + self.cmd.formvalue("set_date", "hour", str(date["hour"])) + self.cmd.formvalue("set_date", "minute", str(date["minute"])) + self.cmd.submit() + diff --git a/v0.3.4.5/plugins/disks/disks.cs b/v0.3.4.5/plugins/disks/disks.cs new file mode 100644 index 0000000..7fa7e38 --- /dev/null +++ b/v0.3.4.5/plugins/disks/disks.cs @@ -0,0 +1,19 @@ + + + + +
+ + + + + + + + + + + + +
+ diff --git a/v0.3.4.5/plugins/disks/disks.py b/v0.3.4.5/plugins/disks/disks.py new file mode 100644 index 0000000..f7e4b06 --- /dev/null +++ b/v0.3.4.5/plugins/disks/disks.py @@ -0,0 +1,48 @@ +# +# Copyright 2006 sense.lab e.V. +# +# This file is part of the CryptoBox. +# +# The CryptoBox 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 CryptoBox 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 the CryptoBox; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +"""The disks feature of the CryptoBox. +""" + +__revision__ = "$Id" + +import cryptobox.plugins.base + +class disks(cryptobox.plugins.base.CryptoBoxPlugin): + """The disk feature of the CryptoBox. + """ + + plugin_capabilities = [ "system" ] + plugin_visibility = [ "menu" ] + request_auth = False + rank = 10 + + def do_action(self): + """The action handler. + """ + self.cbox.reread_container_list() + return "disks" + + + def get_status(self): + """Retrieve the current status of the feature. + """ + return ":".join([e.get_device() for e in self.cbox.get_container_list()]) + diff --git a/v0.3.4.5/plugins/disks/intl/cryptobox-server-feature-disks.pot b/v0.3.4.5/plugins/disks/intl/cryptobox-server-feature-disks.pot new file mode 100644 index 0000000..39262b7 --- /dev/null +++ b/v0.3.4.5/plugins/disks/intl/cryptobox-server-feature-disks.pot @@ -0,0 +1,15 @@ +#: Name +msgid "Disk overview" +msgstr "" + +#: Link +msgid "Disks" +msgstr "" + +#: Title +msgid "Available disks" +msgstr "" + +#: AdviceMessage.NoDisksAvailable.Text +msgid "No available disks were found!" +msgstr "" diff --git a/v0.3.4.5/plugins/disks/intl/cs/cryptobox-server-feature-disks.po b/v0.3.4.5/plugins/disks/intl/cs/cryptobox-server-feature-disks.po new file mode 100644 index 0000000..6667390 --- /dev/null +++ b/v0.3.4.5/plugins/disks/intl/cs/cryptobox-server-feature-disks.po @@ -0,0 +1,30 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:02+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Disk overview" +msgstr "" + +#: Link +msgid "Disks" +msgstr "" + +#: Title +msgid "Available disks" +msgstr "" + +#: AdviceMessage.NoDisksAvailable.Text +msgid "No available disks were found!" +msgstr "" diff --git a/v0.3.4.5/plugins/disks/intl/da/cryptobox-server-feature-disks.po b/v0.3.4.5/plugins/disks/intl/da/cryptobox-server-feature-disks.po new file mode 100644 index 0000000..6667390 --- /dev/null +++ b/v0.3.4.5/plugins/disks/intl/da/cryptobox-server-feature-disks.po @@ -0,0 +1,30 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:02+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Disk overview" +msgstr "" + +#: Link +msgid "Disks" +msgstr "" + +#: Title +msgid "Available disks" +msgstr "" + +#: AdviceMessage.NoDisksAvailable.Text +msgid "No available disks were found!" +msgstr "" diff --git a/v0.3.4.5/plugins/disks/intl/de/cryptobox-server-feature-disks.po b/v0.3.4.5/plugins/disks/intl/de/cryptobox-server-feature-disks.po new file mode 100644 index 0000000..74540e4 --- /dev/null +++ b/v0.3.4.5/plugins/disks/intl/de/cryptobox-server-feature-disks.po @@ -0,0 +1,29 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:02+0100\n" +"PO-Revision-Date: 2006-12-14 03:46+0100\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Disk overview" +msgstr "Datenträgerübersicht" + +#: Link +msgid "Disks" +msgstr "Datenträger" + +#: Title +msgid "Available disks" +msgstr "Verfügbare Datenträger" + +#: AdviceMessage.NoDisksAvailable.Text +msgid "No available disks were found!" +msgstr "Keine verfügbaren Daträger gefunden!" diff --git a/v0.3.4.5/plugins/disks/intl/en/cryptobox-server-feature-disks.po b/v0.3.4.5/plugins/disks/intl/en/cryptobox-server-feature-disks.po new file mode 100644 index 0000000..98a4ba0 --- /dev/null +++ b/v0.3.4.5/plugins/disks/intl/en/cryptobox-server-feature-disks.po @@ -0,0 +1,15 @@ +#: Name +msgid "Disk overview" +msgstr "Disk overview" + +#: Link +msgid "Disks" +msgstr "Disks" + +#: Title +msgid "Available disks" +msgstr "Available disks" + +#: AdviceMessage.NoDisksAvailable.Text +msgid "No available disks were found!" +msgstr "No available disks were found!" diff --git a/v0.3.4.5/plugins/disks/intl/es/cryptobox-server-feature-disks.po b/v0.3.4.5/plugins/disks/intl/es/cryptobox-server-feature-disks.po new file mode 100644 index 0000000..6667390 --- /dev/null +++ b/v0.3.4.5/plugins/disks/intl/es/cryptobox-server-feature-disks.po @@ -0,0 +1,30 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:02+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Disk overview" +msgstr "" + +#: Link +msgid "Disks" +msgstr "" + +#: Title +msgid "Available disks" +msgstr "" + +#: AdviceMessage.NoDisksAvailable.Text +msgid "No available disks were found!" +msgstr "" diff --git a/v0.3.4.5/plugins/disks/intl/fi/cryptobox-server-feature-disks.po b/v0.3.4.5/plugins/disks/intl/fi/cryptobox-server-feature-disks.po new file mode 100644 index 0000000..6667390 --- /dev/null +++ b/v0.3.4.5/plugins/disks/intl/fi/cryptobox-server-feature-disks.po @@ -0,0 +1,30 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:02+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Disk overview" +msgstr "" + +#: Link +msgid "Disks" +msgstr "" + +#: Title +msgid "Available disks" +msgstr "" + +#: AdviceMessage.NoDisksAvailable.Text +msgid "No available disks were found!" +msgstr "" diff --git a/v0.3.4.5/plugins/disks/intl/fr/cryptobox-server-feature-disks.po b/v0.3.4.5/plugins/disks/intl/fr/cryptobox-server-feature-disks.po new file mode 100644 index 0000000..6667390 --- /dev/null +++ b/v0.3.4.5/plugins/disks/intl/fr/cryptobox-server-feature-disks.po @@ -0,0 +1,30 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:02+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Disk overview" +msgstr "" + +#: Link +msgid "Disks" +msgstr "" + +#: Title +msgid "Available disks" +msgstr "" + +#: AdviceMessage.NoDisksAvailable.Text +msgid "No available disks were found!" +msgstr "" diff --git a/v0.3.4.5/plugins/disks/intl/hu/cryptobox-server-feature-disks.po b/v0.3.4.5/plugins/disks/intl/hu/cryptobox-server-feature-disks.po new file mode 100644 index 0000000..6667390 --- /dev/null +++ b/v0.3.4.5/plugins/disks/intl/hu/cryptobox-server-feature-disks.po @@ -0,0 +1,30 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:02+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Disk overview" +msgstr "" + +#: Link +msgid "Disks" +msgstr "" + +#: Title +msgid "Available disks" +msgstr "" + +#: AdviceMessage.NoDisksAvailable.Text +msgid "No available disks were found!" +msgstr "" diff --git a/v0.3.4.5/plugins/disks/intl/it/cryptobox-server-feature-disks.po b/v0.3.4.5/plugins/disks/intl/it/cryptobox-server-feature-disks.po new file mode 100644 index 0000000..bccf287 --- /dev/null +++ b/v0.3.4.5/plugins/disks/intl/it/cryptobox-server-feature-disks.po @@ -0,0 +1,29 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-04-01 15:55+0200\n" +"PO-Revision-Date: 2007-02-26 11:41+0100\n" +"Last-Translator: Fabrizio Tarizzo \n" +"Language-Team: Italian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Disk overview" +msgstr "Elenco dei dischi" + +#: Link +msgid "Disks" +msgstr "Dischi" + +#: Title +msgid "Available disks" +msgstr "Dischi disponibili" + +#: AdviceMessage.NoDisksAvailable.Text +msgid "No available disks were found!" +msgstr "Non è stato trovato alcun disco disponibile!" diff --git a/v0.3.4.5/plugins/disks/intl/ja/cryptobox-server-feature-disks.po b/v0.3.4.5/plugins/disks/intl/ja/cryptobox-server-feature-disks.po new file mode 100644 index 0000000..31afa0e --- /dev/null +++ b/v0.3.4.5/plugins/disks/intl/ja/cryptobox-server-feature-disks.po @@ -0,0 +1,29 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:02+0100\n" +"PO-Revision-Date: 2007-02-23 11:37+0100\n" +"Last-Translator: kinneko \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Disk overview" +msgstr "ディスクの状態" + +#: Link +msgid "Disks" +msgstr "ディスク" + +#: Title +msgid "Available disks" +msgstr "利用可能なディスク" + +#: AdviceMessage.NoDisksAvailable.Text +msgid "No available disks were found!" +msgstr "利用可能なディスクがありません!" diff --git a/v0.3.4.5/plugins/disks/intl/nl/cryptobox-server-feature-disks.po b/v0.3.4.5/plugins/disks/intl/nl/cryptobox-server-feature-disks.po new file mode 100644 index 0000000..6667390 --- /dev/null +++ b/v0.3.4.5/plugins/disks/intl/nl/cryptobox-server-feature-disks.po @@ -0,0 +1,30 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:02+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Disk overview" +msgstr "" + +#: Link +msgid "Disks" +msgstr "" + +#: Title +msgid "Available disks" +msgstr "" + +#: AdviceMessage.NoDisksAvailable.Text +msgid "No available disks were found!" +msgstr "" diff --git a/v0.3.4.5/plugins/disks/intl/pl/cryptobox-server-feature-disks.po b/v0.3.4.5/plugins/disks/intl/pl/cryptobox-server-feature-disks.po new file mode 100644 index 0000000..9c33dee --- /dev/null +++ b/v0.3.4.5/plugins/disks/intl/pl/cryptobox-server-feature-disks.po @@ -0,0 +1,29 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-04-01 15:55+0200\n" +"PO-Revision-Date: 2007-03-29 09:30+0200\n" +"Last-Translator: Andrzej S. Kaznowski \n" +"Language-Team: POLSKI \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Disk overview" +msgstr "Przegląd dysków" + +#: Link +msgid "Disks" +msgstr "Dyski" + +#: Title +msgid "Available disks" +msgstr "Dostępne dyski" + +#: AdviceMessage.NoDisksAvailable.Text +msgid "No available disks were found!" +msgstr "Nie znaleziono dostępnych dysków!" diff --git a/v0.3.4.5/plugins/disks/intl/pt/cryptobox-server-feature-disks.po b/v0.3.4.5/plugins/disks/intl/pt/cryptobox-server-feature-disks.po new file mode 100644 index 0000000..6667390 --- /dev/null +++ b/v0.3.4.5/plugins/disks/intl/pt/cryptobox-server-feature-disks.po @@ -0,0 +1,30 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:02+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Disk overview" +msgstr "" + +#: Link +msgid "Disks" +msgstr "" + +#: Title +msgid "Available disks" +msgstr "" + +#: AdviceMessage.NoDisksAvailable.Text +msgid "No available disks were found!" +msgstr "" diff --git a/v0.3.4.5/plugins/disks/intl/ru/cryptobox-server-feature-disks.po b/v0.3.4.5/plugins/disks/intl/ru/cryptobox-server-feature-disks.po new file mode 100644 index 0000000..6667390 --- /dev/null +++ b/v0.3.4.5/plugins/disks/intl/ru/cryptobox-server-feature-disks.po @@ -0,0 +1,30 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:02+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Disk overview" +msgstr "" + +#: Link +msgid "Disks" +msgstr "" + +#: Title +msgid "Available disks" +msgstr "" + +#: AdviceMessage.NoDisksAvailable.Text +msgid "No available disks were found!" +msgstr "" diff --git a/v0.3.4.5/plugins/disks/intl/sl/cryptobox-server-feature-disks.po b/v0.3.4.5/plugins/disks/intl/sl/cryptobox-server-feature-disks.po new file mode 100644 index 0000000..1d2fd8d --- /dev/null +++ b/v0.3.4.5/plugins/disks/intl/sl/cryptobox-server-feature-disks.po @@ -0,0 +1,29 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:02+0100\n" +"PO-Revision-Date: 2006-12-21 15:01+0100\n" +"Last-Translator: tenzin \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Disk overview" +msgstr "Pregled diska" + +#: Link +msgid "Disks" +msgstr "Diski" + +#: Title +msgid "Available disks" +msgstr "Razpoložljivi diski" + +#: AdviceMessage.NoDisksAvailable.Text +msgid "No available disks were found!" +msgstr "Noben disk ni na razpolago" diff --git a/v0.3.4.5/plugins/disks/intl/sv/cryptobox-server-feature-disks.po b/v0.3.4.5/plugins/disks/intl/sv/cryptobox-server-feature-disks.po new file mode 100644 index 0000000..6667390 --- /dev/null +++ b/v0.3.4.5/plugins/disks/intl/sv/cryptobox-server-feature-disks.po @@ -0,0 +1,30 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:02+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Disk overview" +msgstr "" + +#: Link +msgid "Disks" +msgstr "" + +#: Title +msgid "Available disks" +msgstr "" + +#: AdviceMessage.NoDisksAvailable.Text +msgid "No available disks were found!" +msgstr "" diff --git a/v0.3.4.5/plugins/disks/intl/ur/cryptobox-server-feature-disks.po b/v0.3.4.5/plugins/disks/intl/ur/cryptobox-server-feature-disks.po new file mode 100644 index 0000000..018caa2 --- /dev/null +++ b/v0.3.4.5/plugins/disks/intl/ur/cryptobox-server-feature-disks.po @@ -0,0 +1,30 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-02-05 23:28+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Disk overview" +msgstr "" + +#: Link +msgid "Disks" +msgstr "" + +#: Title +msgid "Available disks" +msgstr "" + +#: AdviceMessage.NoDisksAvailable.Text +msgid "No available disks were found!" +msgstr "" diff --git a/v0.3.4.5/plugins/disks/language.hdf b/v0.3.4.5/plugins/disks/language.hdf new file mode 100644 index 0000000..80acea4 --- /dev/null +++ b/v0.3.4.5/plugins/disks/language.hdf @@ -0,0 +1,10 @@ +Name = Disk overview +Link = Disks + +Title = Available disks + +AdviceMessage { + NoDisksAvailable { + Text = No available disks were found! + } +} diff --git a/v0.3.4.5/plugins/disks/plugin_icon.gif b/v0.3.4.5/plugins/disks/plugin_icon.gif new file mode 100644 index 0000000000000000000000000000000000000000..88fd171eee487c249d58351f8ee68a59cfb5ceb5 GIT binary patch literal 3359 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 + self.assertTrue(self.device in devices) + diff --git a/v0.3.4.5/plugins/encrypted_webinterface/encrypted_webinterface.py b/v0.3.4.5/plugins/encrypted_webinterface/encrypted_webinterface.py new file mode 100644 index 0000000..7b5c012 --- /dev/null +++ b/v0.3.4.5/plugins/encrypted_webinterface/encrypted_webinterface.py @@ -0,0 +1,256 @@ +# +# Copyright 2007 sense.lab e.V. +# +# This file is part of the CryptoBox. +# +# The CryptoBox 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 CryptoBox 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 the CryptoBox; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +"""Create an SSL certificate to encrypt the webinterface connection via stunnel + +requires: + - stunnel (>= 4.0) + - "M2Crypto" python module +""" + +__revision__ = "$Id" + +import cryptobox.plugins.base +import subprocess +import os +import cherrypy + +CERT_FILENAME = 'cryptobox-ssl-certificate.pem' +KEY_BITS = 1024 +ISSUER_INFOS = { + "ST": "SomeIssuerState", + "L": "SomeIssuerLocality", + "O": "SomeIssuerOrganization", + "OU": "CryptoBox-ServerIssuer", + "CN": "cryptoboxIssuer", + "emailAddress": "infoIssuer@cryptobox.org"} +CERT_INFOS = { + "ST": "SomeState", + "L": "SomeLocality", + "O": "SomeOrganization", + "OU": "CryptoBox-Server", + "CN": "*", + "emailAddress": "info@cryptobox.org"} +EXPIRE_TIME = 60*60*24*365*20 # 20 years forward and backward +SIGN_DIGEST = "md5" +PID_FILE = os.path.join("/tmp/cryptobox-stunnel.pid") + + +class encrypted_webinterface(cryptobox.plugins.base.CryptoBoxPlugin): + """Provide an encrypted webinterface connection via stunnel + """ + + plugin_capabilities = [ "system" ] + plugin_visibility = [] + request_auth = True + rank = 80 + + def do_action(self): + """The action handler. + """ + return None + + + def get_status(self): + """Retrieve the current state of the webinterface connection + """ + if self.__is_encrypted(): + return "1" + else: + return "0" + + + def get_warnings(self): + """check if the connection is encrypted + """ + warnings = [] + ## check if m2crypto is available + try: + import M2Crypto + except ImportError: + warnings.append((45, "Plugins.%s.MissingModuleM2Crypto" % self.get_name())) + if not os.path.isfile(self.root_action.STUNNEL_BIN): + warnings.append((44, "Plugins.%s.MissingProgramStunnel" % self.get_name())) + if not self.__is_encrypted(): + ## plaintext connection -> "heavy security risk" (priority=20..39) + warnings.append((25, "Plugins.%s.NoSSL" % self.get_name())) + return warnings + + + def __is_encrypted(self): + """perform some checks for encrypted connections + """ + if cherrypy.request.scheme == "https": + return True + ## check an environment setting - this is quite common behind proxies + if os.environ.has_key("HTTPS"): + return True + ## check if it is a local connection (or via stunnel) + if cherrypy.request.headers.has_key("Remote-Host") \ + and (cherrypy.request.headers["Remote-Host"] == "127.0.0.1"): + return True + ## the arbitrarily chosen header is documented in README.proxy + if cherrypy.request.headers.has_key("X-SSL-Request") \ + and (cherrypy.request.headers["X-SSL-Request"] == "1"): + return True + ## it looks like a plain connection + return False + + + def handle_event(self, event, event_info=None): + """Create a certificate during startup (if it does not exist) and run stunnel + """ + if event == "bootup": + cert_abs_name = self.cbox.prefs.get_misc_config_filename(CERT_FILENAME) + if not os.path.isfile(cert_abs_name): + try: + cert = self.__get_certificate() + self.cbox.prefs.create_misc_config_file(CERT_FILENAME, cert) + self.cbox.log.info("Created new SSL certificate: %s" % \ + cert_abs_name) + ## make it non-readable for other users + try: + os.chmod(cert_abs_name, 0600) + except OSError, err_msg: + self.cbox.log.warn("Failed to change permissions of secret " \ + + "certificate file (%s): %s" % \ + (cert_abs_name, err_msg)) + except IOError, err_msg: + ## do not run stunnel without a certificate + self.cbox.log.warn("Failed to create new SSL certificate (%s): %s" \ + % (cert_abs_name, err_msg)) + return + self.__run_stunnel(cert_abs_name) + elif event == "shutdown": + self.__kill_stunnel() + + + def __kill_stunnel(self): + """try to kill a running stunnel daemon + """ + if not os.path.isfile(PID_FILE): + self.cbox.log.warn("Could not find the pid file of a running stunnel " \ + + "daemon: %s" % PID_FILE) + return + try: + pfile = open(PID_FILE, "r") + try: + pid = pfile.read().strip() + except IOError, err_msg: + self.cbox.log.warn("Failed to read the pid file (%s): %s" % (PID_FILE, err_msg)) + pfile.close() + return + pfile.close() + except IOError, err_msg: + self.cbox.log.warn("Failed to open the pid file (%s): %s" % (PID_FILE, err_msg)) + return + if pid.isdigit(): + pid = int(pid) + else: + return + try: + ## SIGTERM = 15 + os.kill(pid, 15) + self.cbox.log.info("Successfully stopped stunnel") + try: + os.remove(PID_FILE) + except OSError, err_msg: + self.cbox.log.warn("Failed to remove the pid file (%s) of stunnel: %s" \ + % (PID_FILE, err_msg)) + except OSError, err_msg: + self.cbox.log.warn("Failed to kill stunnel process (PID: %d): %s" % \ + (pid, err_msg)) + + + def __run_stunnel(self, cert_name, dest_port=443): + ## retrieve currently requested port (not necessarily the port served + ## by cherrypy - e.g. in a proxy setup) + request_port = cherrypy.config.get("server.socket_port", 80) + self.cbox.log.debug("[encrypted_webinterface] starting " \ + + "%s on port %s for %s" % \ + (self.root_action.STUNNEL_BIN, dest_port, request_port)) + proc = subprocess.Popen( + shell = False, + stdout = subprocess.PIPE, + stderr = subprocess.PIPE, + args = [ + self.cbox.prefs["Programs"]["super"], + self.cbox.prefs["Programs"]["CryptoBoxRootActions"], + "plugin", os.path.join(self.plugin_dir, "root_action.py"), + cert_name, + str(request_port), + str(dest_port), + PID_FILE ]) + (output, error) = proc.communicate() + if proc.returncode == 0: + self.cbox.log.info("Successfully started 'stunnel'") + return True + else: + self.cbox.log.warn("Failed to run 'stunnel': %s" % error) + return False + + + def __get_certificate(self): + """Create a self-signed certificate and return its pem content + + The code is mainly inspired by: + https://dev.tribler.org/browser/m2crypto/trunk/contrib/SimpleX509create.py + """ + import M2Crypto + import time + string_type = 0x1000 | 1 # see http://www.koders.com/python/.. + # ../fid07A99E089F55187896A06CD4E0B6F21B9B8F5B0B.aspx?s=bavaria + key_gen_number = 0x10001 # commonly used for key generation: 65537 + rsa_key = M2Crypto.RSA.gen_key(KEY_BITS, key_gen_number, callback=lambda: None) + rsa_key2 = M2Crypto.RSA.gen_key(KEY_BITS, key_gen_number, callback=lambda: None) + pkey = M2Crypto.EVP.PKey(md=SIGN_DIGEST) + pkey.assign_rsa(rsa_key) + sign_key = M2Crypto.EVP.PKey(md=SIGN_DIGEST) + sign_key.assign_rsa(rsa_key2) + subject = M2Crypto.X509.X509_Name() + for (key, value) in CERT_INFOS.items(): + subject.add_entry_by_txt(key, string_type, value, -1, -1, 0) + issuer = M2Crypto.X509.X509_Name(M2Crypto.m2.x509_name_new()) + for (key, value) in ISSUER_INFOS.items(): + issuer.add_entry_by_txt(key, string_type, value, -1, -1, 0) + ## time object + asn_time1 = M2Crypto.ASN1.ASN1_UTCTIME() + asn_time1.set_time(long(time.time()) - EXPIRE_TIME) + asn_time2 = M2Crypto.ASN1.ASN1_UTCTIME() + asn_time2.set_time(long(time.time()) + EXPIRE_TIME) + request = M2Crypto.X509.Request() + request.set_subject_name(subject) + request.set_pubkey(pkey) + request.sign(pkey=pkey, md=SIGN_DIGEST) + cert = M2Crypto.X509.X509() + ## always create a unique version number + cert.set_version(0) + cert.set_serial_number(long(time.time())) + cert.set_pubkey(pkey) + cert.set_not_before(asn_time1) + cert.set_not_after(asn_time2) + cert.set_subject_name(request.get_subject()) + cert.set_issuer_name(issuer) + cert.sign(pkey, SIGN_DIGEST) + result = "" + result += cert.as_pem() + result += pkey.as_pem(cipher=None) + return result + diff --git a/v0.3.4.5/plugins/encrypted_webinterface/intl/cryptobox-server-feature-encrypted_webinterface.pot b/v0.3.4.5/plugins/encrypted_webinterface/intl/cryptobox-server-feature-encrypted_webinterface.pot new file mode 100644 index 0000000..3185d2e --- /dev/null +++ b/v0.3.4.5/plugins/encrypted_webinterface/intl/cryptobox-server-feature-encrypted_webinterface.pot @@ -0,0 +1,35 @@ +#: Name +msgid "Encrypted webinterface" +msgstr "" + +#: Title +msgid "Create encryption certificate" +msgstr "" + +#: Button.CreateCertificate +msgid "Create certificate" +msgstr "" + +#: EnvironmentWarning.NoSSL.Text +msgid "The connection is not encrypted - passwords can be easily intercepted." +msgstr "" + +#: EnvironmentWarning.NoSSL.Link.Text +msgid "Use encrypted connection" +msgstr "" + +#: EnvironmentWarning.MissingModuleM2Crypto.Title +msgid "Missing module" +msgstr "" + +#: EnvironmentWarning.MissingModuleM2Crypto.Text +msgid "The python module 'M2Crypto' is missing. It is required for an encrypted connection to the CryptoBox webinterface. Please ask the administrator of the CryptoBox server to install the module." +msgstr "" + +#: EnvironmentWarning.MissingProgramStunnel.Title +msgid "Missing program" +msgstr "" + +#: EnvironmentWarning.MissingProgramStunnel.Text +msgid "The program 'stunnel4' is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "" diff --git a/v0.3.4.5/plugins/encrypted_webinterface/intl/cs/cryptobox-server-feature-encrypted_webinterface.po b/v0.3.4.5/plugins/encrypted_webinterface/intl/cs/cryptobox-server-feature-encrypted_webinterface.po new file mode 100644 index 0000000..9ae9758 --- /dev/null +++ b/v0.3.4.5/plugins/encrypted_webinterface/intl/cs/cryptobox-server-feature-encrypted_webinterface.po @@ -0,0 +1,50 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-02-10 01:24+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Encrypted webinterface" +msgstr "" + +#: Title +msgid "Create encryption certificate" +msgstr "" + +#: Button.CreateCertificate +msgid "Create certificate" +msgstr "" + +#: EnvironmentWarning.NoSSL.Text +msgid "The connection is not encrypted - passwords can be easily intercepted." +msgstr "" + +#: EnvironmentWarning.NoSSL.Link.Text +msgid "Use encrypted connection" +msgstr "" + +#: EnvironmentWarning.MissingModuleM2Crypto.Title +msgid "Missing module" +msgstr "" + +#: EnvironmentWarning.MissingModuleM2Crypto.Text +msgid "The python module 'M2Crypto' is missing. It is required for an encrypted connection to the CryptoBox webinterface. Please ask the administrator of the CryptoBox server to install the module." +msgstr "" + +#: EnvironmentWarning.MissingProgramStunnel.Title +msgid "Missing program" +msgstr "" + +#: EnvironmentWarning.MissingProgramStunnel.Text +msgid "The program 'stunnel4' is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "" diff --git a/v0.3.4.5/plugins/encrypted_webinterface/intl/da/cryptobox-server-feature-encrypted_webinterface.po b/v0.3.4.5/plugins/encrypted_webinterface/intl/da/cryptobox-server-feature-encrypted_webinterface.po new file mode 100644 index 0000000..9ae9758 --- /dev/null +++ b/v0.3.4.5/plugins/encrypted_webinterface/intl/da/cryptobox-server-feature-encrypted_webinterface.po @@ -0,0 +1,50 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-02-10 01:24+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Encrypted webinterface" +msgstr "" + +#: Title +msgid "Create encryption certificate" +msgstr "" + +#: Button.CreateCertificate +msgid "Create certificate" +msgstr "" + +#: EnvironmentWarning.NoSSL.Text +msgid "The connection is not encrypted - passwords can be easily intercepted." +msgstr "" + +#: EnvironmentWarning.NoSSL.Link.Text +msgid "Use encrypted connection" +msgstr "" + +#: EnvironmentWarning.MissingModuleM2Crypto.Title +msgid "Missing module" +msgstr "" + +#: EnvironmentWarning.MissingModuleM2Crypto.Text +msgid "The python module 'M2Crypto' is missing. It is required for an encrypted connection to the CryptoBox webinterface. Please ask the administrator of the CryptoBox server to install the module." +msgstr "" + +#: EnvironmentWarning.MissingProgramStunnel.Title +msgid "Missing program" +msgstr "" + +#: EnvironmentWarning.MissingProgramStunnel.Text +msgid "The program 'stunnel4' is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "" diff --git a/v0.3.4.5/plugins/encrypted_webinterface/intl/de/cryptobox-server-feature-encrypted_webinterface.po b/v0.3.4.5/plugins/encrypted_webinterface/intl/de/cryptobox-server-feature-encrypted_webinterface.po new file mode 100644 index 0000000..e42985c --- /dev/null +++ b/v0.3.4.5/plugins/encrypted_webinterface/intl/de/cryptobox-server-feature-encrypted_webinterface.po @@ -0,0 +1,49 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-02-10 01:24+0100\n" +"PO-Revision-Date: 2007-02-19 02:49+0100\n" +"Last-Translator: Lars Kruse \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Encrypted webinterface" +msgstr "Verschlüsseltes Web-Interface" + +#: Title +msgid "Create encryption certificate" +msgstr "Erzeuge Verschlüsselungszertifikat" + +#: Button.CreateCertificate +msgid "Create certificate" +msgstr "Erzeuge Zertifikat" + +#: EnvironmentWarning.NoSSL.Text +msgid "The connection is not encrypted - passwords can be easily intercepted." +msgstr "Die Verbindung ist unverschlüsselt - Passworte sind leicht abhörbar. " + +#: EnvironmentWarning.NoSSL.Link.Text +msgid "Use encrypted connection" +msgstr "Nutze verschlüsselte Verbindung" + +#: EnvironmentWarning.MissingModuleM2Crypto.Title +msgid "Missing module" +msgstr "Fehlendes Modul" + +#: EnvironmentWarning.MissingModuleM2Crypto.Text +msgid "The python module 'M2Crypto' is missing. It is required for an encrypted connection to the CryptoBox webinterface. Please ask the administrator of the CryptoBox server to install the module." +msgstr "Das Python-Modul 'M2Crypto' fehlt. Es ist für eine automatisierte Verschlüsselung der Verbindung zum CryptoBox-Web-Interface erforderlich. Du solltest den Administrator des CryptoBox-Servers um die Installation dieses Moduls bitten." + +#: EnvironmentWarning.MissingProgramStunnel.Title +msgid "Missing program" +msgstr "Fehlendes Programm" + +#: EnvironmentWarning.MissingProgramStunnel.Text +msgid "The program 'stunnel4' is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "Das Programm 'stunnel4' fehlt. Du solltest den Administrator des CryptoBox-Servers darum bitten, die Konfiguration zu prüfen." diff --git a/v0.3.4.5/plugins/encrypted_webinterface/intl/en/cryptobox-server-feature-encrypted_webinterface.po b/v0.3.4.5/plugins/encrypted_webinterface/intl/en/cryptobox-server-feature-encrypted_webinterface.po new file mode 100644 index 0000000..eb683c3 --- /dev/null +++ b/v0.3.4.5/plugins/encrypted_webinterface/intl/en/cryptobox-server-feature-encrypted_webinterface.po @@ -0,0 +1,36 @@ +#: Name +msgid "Encrypted webinterface" +msgstr "Encrypted webinterface" + +#: Title +msgid "Create encryption certificate" +msgstr "Create encryption certificate" + +#: Button.CreateCertificate +msgid "Create certificate" +msgstr "Create certificate" + +#: EnvironmentWarning.NoSSL.Text +msgid "The connection is not encrypted - passwords can be easily intercepted." +msgstr "The connection is not encrypted - passwords can be easily intercepted." + +#: EnvironmentWarning.NoSSL.Link.Text +msgid "Use encrypted connection" +msgstr "Use encrypted connection" + +#: EnvironmentWarning.MissingModuleM2Crypto.Title +msgid "Missing module" +msgstr "Missing module" + +#: EnvironmentWarning.MissingModuleM2Crypto.Text +msgid "The python module 'M2Crypto' is missing. It is required for an encrypted connection to the CryptoBox webinterface. Please ask the administrator of the CryptoBox server to install the module." +msgstr "The python module 'M2Crypto' is missing. It is required for an encrypted connection to the CryptoBox webinterface. Please ask the administrator of the CryptoBox server to install the module." + +#: EnvironmentWarning.MissingProgramStunnel.Title +msgid "Missing program" +msgstr "Missing program" + +#: EnvironmentWarning.MissingProgramStunnel.Text +#, fuzzy +msgid "The program 'stunnel4' is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "The program 'stunnel4' is not installed. Please ask the administrator of the CryptoBox server to configure it properly." diff --git a/v0.3.4.5/plugins/encrypted_webinterface/intl/es/cryptobox-server-feature-encrypted_webinterface.po b/v0.3.4.5/plugins/encrypted_webinterface/intl/es/cryptobox-server-feature-encrypted_webinterface.po new file mode 100644 index 0000000..9ae9758 --- /dev/null +++ b/v0.3.4.5/plugins/encrypted_webinterface/intl/es/cryptobox-server-feature-encrypted_webinterface.po @@ -0,0 +1,50 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-02-10 01:24+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Encrypted webinterface" +msgstr "" + +#: Title +msgid "Create encryption certificate" +msgstr "" + +#: Button.CreateCertificate +msgid "Create certificate" +msgstr "" + +#: EnvironmentWarning.NoSSL.Text +msgid "The connection is not encrypted - passwords can be easily intercepted." +msgstr "" + +#: EnvironmentWarning.NoSSL.Link.Text +msgid "Use encrypted connection" +msgstr "" + +#: EnvironmentWarning.MissingModuleM2Crypto.Title +msgid "Missing module" +msgstr "" + +#: EnvironmentWarning.MissingModuleM2Crypto.Text +msgid "The python module 'M2Crypto' is missing. It is required for an encrypted connection to the CryptoBox webinterface. Please ask the administrator of the CryptoBox server to install the module." +msgstr "" + +#: EnvironmentWarning.MissingProgramStunnel.Title +msgid "Missing program" +msgstr "" + +#: EnvironmentWarning.MissingProgramStunnel.Text +msgid "The program 'stunnel4' is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "" diff --git a/v0.3.4.5/plugins/encrypted_webinterface/intl/fi/cryptobox-server-feature-encrypted_webinterface.po b/v0.3.4.5/plugins/encrypted_webinterface/intl/fi/cryptobox-server-feature-encrypted_webinterface.po new file mode 100644 index 0000000..9ae9758 --- /dev/null +++ b/v0.3.4.5/plugins/encrypted_webinterface/intl/fi/cryptobox-server-feature-encrypted_webinterface.po @@ -0,0 +1,50 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-02-10 01:24+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Encrypted webinterface" +msgstr "" + +#: Title +msgid "Create encryption certificate" +msgstr "" + +#: Button.CreateCertificate +msgid "Create certificate" +msgstr "" + +#: EnvironmentWarning.NoSSL.Text +msgid "The connection is not encrypted - passwords can be easily intercepted." +msgstr "" + +#: EnvironmentWarning.NoSSL.Link.Text +msgid "Use encrypted connection" +msgstr "" + +#: EnvironmentWarning.MissingModuleM2Crypto.Title +msgid "Missing module" +msgstr "" + +#: EnvironmentWarning.MissingModuleM2Crypto.Text +msgid "The python module 'M2Crypto' is missing. It is required for an encrypted connection to the CryptoBox webinterface. Please ask the administrator of the CryptoBox server to install the module." +msgstr "" + +#: EnvironmentWarning.MissingProgramStunnel.Title +msgid "Missing program" +msgstr "" + +#: EnvironmentWarning.MissingProgramStunnel.Text +msgid "The program 'stunnel4' is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "" diff --git a/v0.3.4.5/plugins/encrypted_webinterface/intl/fr/cryptobox-server-feature-encrypted_webinterface.po b/v0.3.4.5/plugins/encrypted_webinterface/intl/fr/cryptobox-server-feature-encrypted_webinterface.po new file mode 100644 index 0000000..9ae9758 --- /dev/null +++ b/v0.3.4.5/plugins/encrypted_webinterface/intl/fr/cryptobox-server-feature-encrypted_webinterface.po @@ -0,0 +1,50 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-02-10 01:24+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Encrypted webinterface" +msgstr "" + +#: Title +msgid "Create encryption certificate" +msgstr "" + +#: Button.CreateCertificate +msgid "Create certificate" +msgstr "" + +#: EnvironmentWarning.NoSSL.Text +msgid "The connection is not encrypted - passwords can be easily intercepted." +msgstr "" + +#: EnvironmentWarning.NoSSL.Link.Text +msgid "Use encrypted connection" +msgstr "" + +#: EnvironmentWarning.MissingModuleM2Crypto.Title +msgid "Missing module" +msgstr "" + +#: EnvironmentWarning.MissingModuleM2Crypto.Text +msgid "The python module 'M2Crypto' is missing. It is required for an encrypted connection to the CryptoBox webinterface. Please ask the administrator of the CryptoBox server to install the module." +msgstr "" + +#: EnvironmentWarning.MissingProgramStunnel.Title +msgid "Missing program" +msgstr "" + +#: EnvironmentWarning.MissingProgramStunnel.Text +msgid "The program 'stunnel4' is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "" diff --git a/v0.3.4.5/plugins/encrypted_webinterface/intl/hu/cryptobox-server-feature-encrypted_webinterface.po b/v0.3.4.5/plugins/encrypted_webinterface/intl/hu/cryptobox-server-feature-encrypted_webinterface.po new file mode 100644 index 0000000..9ae9758 --- /dev/null +++ b/v0.3.4.5/plugins/encrypted_webinterface/intl/hu/cryptobox-server-feature-encrypted_webinterface.po @@ -0,0 +1,50 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-02-10 01:24+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Encrypted webinterface" +msgstr "" + +#: Title +msgid "Create encryption certificate" +msgstr "" + +#: Button.CreateCertificate +msgid "Create certificate" +msgstr "" + +#: EnvironmentWarning.NoSSL.Text +msgid "The connection is not encrypted - passwords can be easily intercepted." +msgstr "" + +#: EnvironmentWarning.NoSSL.Link.Text +msgid "Use encrypted connection" +msgstr "" + +#: EnvironmentWarning.MissingModuleM2Crypto.Title +msgid "Missing module" +msgstr "" + +#: EnvironmentWarning.MissingModuleM2Crypto.Text +msgid "The python module 'M2Crypto' is missing. It is required for an encrypted connection to the CryptoBox webinterface. Please ask the administrator of the CryptoBox server to install the module." +msgstr "" + +#: EnvironmentWarning.MissingProgramStunnel.Title +msgid "Missing program" +msgstr "" + +#: EnvironmentWarning.MissingProgramStunnel.Text +msgid "The program 'stunnel4' is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "" diff --git a/v0.3.4.5/plugins/encrypted_webinterface/intl/it/cryptobox-server-feature-encrypted_webinterface.po b/v0.3.4.5/plugins/encrypted_webinterface/intl/it/cryptobox-server-feature-encrypted_webinterface.po new file mode 100644 index 0000000..2162287 --- /dev/null +++ b/v0.3.4.5/plugins/encrypted_webinterface/intl/it/cryptobox-server-feature-encrypted_webinterface.po @@ -0,0 +1,49 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-10 01:24+0100\n" +"PO-Revision-Date: 2007-02-24 10:01+0100\n" +"Last-Translator: Fabrizio Tarizzo \n" +"Language-Team: Italian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Encrypted webinterface" +msgstr "Interfaccia web cifrata" + +#: Title +msgid "Create encryption certificate" +msgstr "Crea certificato di cifratura" + +#: Button.CreateCertificate +msgid "Create certificate" +msgstr "Crea certificato" + +#: EnvironmentWarning.NoSSL.Text +msgid "The connection is not encrypted - passwords can be easily intercepted." +msgstr "La connessione non è cifrata: le password possono essere facilmente intercettate." + +#: EnvironmentWarning.NoSSL.Link.Text +msgid "Use encrypted connection" +msgstr "Usa connessione cifrata" + +#: EnvironmentWarning.MissingModuleM2Crypto.Title +msgid "Missing module" +msgstr "Modulo mancante" + +#: EnvironmentWarning.MissingModuleM2Crypto.Text +msgid "The python module 'M2Crypto' is missing. It is required for an encrypted connection to the CryptoBox webinterface. Please ask the administrator of the CryptoBox server to install the module." +msgstr "Il modulo python 'M2Crypto' non è stato trovato. Questo modulo è richiesto per la connessione cifrata alla CryptoBox. Rivolgersi all'amministratore del server CryptoBox per installare questo modulo." + +#: EnvironmentWarning.MissingProgramStunnel.Title +msgid "Missing program" +msgstr "Programma mancante" + +#: EnvironmentWarning.MissingProgramStunnel.Text +msgid "The program 'stunnel4' is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "Il programma 'stunnel4' non è installato. Rivolgersi all'amministratore del server CryptoBox per installarlo e configurarlo opportunamente." diff --git a/v0.3.4.5/plugins/encrypted_webinterface/intl/ja/cryptobox-server-feature-encrypted_webinterface.po b/v0.3.4.5/plugins/encrypted_webinterface/intl/ja/cryptobox-server-feature-encrypted_webinterface.po new file mode 100644 index 0000000..7d5734b --- /dev/null +++ b/v0.3.4.5/plugins/encrypted_webinterface/intl/ja/cryptobox-server-feature-encrypted_webinterface.po @@ -0,0 +1,49 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-02-10 01:24+0100\n" +"PO-Revision-Date: 2007-02-23 12:11+0100\n" +"Last-Translator: kinneko \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Encrypted webinterface" +msgstr "暗号化されたWebインターフェイス" + +#: Title +msgid "Create encryption certificate" +msgstr "暗号化された証明書を作成する" + +#: Button.CreateCertificate +msgid "Create certificate" +msgstr "証明書を作成する" + +#: EnvironmentWarning.NoSSL.Text +msgid "The connection is not encrypted - passwords can be easily intercepted." +msgstr "現在の接続は暗号化されていません。パスワードは簡単に奪われてしまう可能性があります。" + +#: EnvironmentWarning.NoSSL.Link.Text +msgid "Use encrypted connection" +msgstr "暗号化された接続を使用する" + +#: EnvironmentWarning.MissingModuleM2Crypto.Title +msgid "Missing module" +msgstr "モジュールがありません" + +#: EnvironmentWarning.MissingModuleM2Crypto.Text +msgid "The python module 'M2Crypto' is missing. It is required for an encrypted connection to the CryptoBox webinterface. Please ask the administrator of the CryptoBox server to install the module." +msgstr "Pythonモジュール\"M2Crypto\"がありません。それは、クリプトボックスのWebインターフェイスに暗号化した接続を行うために必要です。クリプトボックスの管理者にモジュールをインストールするよう依頼してください。" + +#: EnvironmentWarning.MissingProgramStunnel.Title +msgid "Missing program" +msgstr "プログラムがありません" + +#: EnvironmentWarning.MissingProgramStunnel.Text +msgid "The program 'stunnel4' is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "\"stunnel4\"がインストールされていません。クリプトボックスサーバーの管理者に、この項目を設定するよう依頼してください。" diff --git a/v0.3.4.5/plugins/encrypted_webinterface/intl/nl/cryptobox-server-feature-encrypted_webinterface.po b/v0.3.4.5/plugins/encrypted_webinterface/intl/nl/cryptobox-server-feature-encrypted_webinterface.po new file mode 100644 index 0000000..9ae9758 --- /dev/null +++ b/v0.3.4.5/plugins/encrypted_webinterface/intl/nl/cryptobox-server-feature-encrypted_webinterface.po @@ -0,0 +1,50 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-02-10 01:24+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Encrypted webinterface" +msgstr "" + +#: Title +msgid "Create encryption certificate" +msgstr "" + +#: Button.CreateCertificate +msgid "Create certificate" +msgstr "" + +#: EnvironmentWarning.NoSSL.Text +msgid "The connection is not encrypted - passwords can be easily intercepted." +msgstr "" + +#: EnvironmentWarning.NoSSL.Link.Text +msgid "Use encrypted connection" +msgstr "" + +#: EnvironmentWarning.MissingModuleM2Crypto.Title +msgid "Missing module" +msgstr "" + +#: EnvironmentWarning.MissingModuleM2Crypto.Text +msgid "The python module 'M2Crypto' is missing. It is required for an encrypted connection to the CryptoBox webinterface. Please ask the administrator of the CryptoBox server to install the module." +msgstr "" + +#: EnvironmentWarning.MissingProgramStunnel.Title +msgid "Missing program" +msgstr "" + +#: EnvironmentWarning.MissingProgramStunnel.Text +msgid "The program 'stunnel4' is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "" diff --git a/v0.3.4.5/plugins/encrypted_webinterface/intl/pl/cryptobox-server-feature-encrypted_webinterface.po b/v0.3.4.5/plugins/encrypted_webinterface/intl/pl/cryptobox-server-feature-encrypted_webinterface.po new file mode 100644 index 0000000..01e0c14 --- /dev/null +++ b/v0.3.4.5/plugins/encrypted_webinterface/intl/pl/cryptobox-server-feature-encrypted_webinterface.po @@ -0,0 +1,49 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-04-01 15:54+0200\n" +"PO-Revision-Date: 2007-03-29 09:35+0200\n" +"Last-Translator: Andrzej S. Kaznowski \n" +"Language-Team: POLSKI \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Encrypted webinterface" +msgstr "Szyfrowane połączenie z przeglądarką" + +#: Title +msgid "Create encryption certificate" +msgstr "Stwórz certyfikat szyfrowania" + +#: Button.CreateCertificate +msgid "Create certificate" +msgstr "Stwórz certyfikat" + +#: EnvironmentWarning.NoSSL.Text +msgid "The connection is not encrypted - passwords can be easily intercepted." +msgstr "Połączenie nie jest szyfrowane - hasło może zostać łatwo przechwycone." + +#: EnvironmentWarning.NoSSL.Link.Text +msgid "Use encrypted connection" +msgstr "Korzystaj z szyfrowanego połączenia" + +#: EnvironmentWarning.MissingModuleM2Crypto.Title +msgid "Missing module" +msgstr "Brakujący moduł" + +#: EnvironmentWarning.MissingModuleM2Crypto.Text +msgid "The python module 'M2Crypto' is missing. It is required for an encrypted connection to the CryptoBox webinterface. Please ask the administrator of the CryptoBox server to install the module." +msgstr "Brakuje modułu python 'M2Crypto'. Jest on potrzebny do szyfrowanego połączenia z przeglądarką zarządzającą systemem CryptoBox. Proszę, poproś administratora serwera CryptoBox o zainstalownie modułu." + +#: EnvironmentWarning.MissingProgramStunnel.Title +msgid "Missing program" +msgstr "Brak programu" + +#: EnvironmentWarning.MissingProgramStunnel.Text +msgid "The program 'stunnel4' is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "Program 'stunnel4' nie jest instalowany. Proszę zwrócić się do administratora serwera CryptoBox, aby prawidłowo skonfigurał go." diff --git a/v0.3.4.5/plugins/encrypted_webinterface/intl/pt/cryptobox-server-feature-encrypted_webinterface.po b/v0.3.4.5/plugins/encrypted_webinterface/intl/pt/cryptobox-server-feature-encrypted_webinterface.po new file mode 100644 index 0000000..9ae9758 --- /dev/null +++ b/v0.3.4.5/plugins/encrypted_webinterface/intl/pt/cryptobox-server-feature-encrypted_webinterface.po @@ -0,0 +1,50 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-02-10 01:24+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Encrypted webinterface" +msgstr "" + +#: Title +msgid "Create encryption certificate" +msgstr "" + +#: Button.CreateCertificate +msgid "Create certificate" +msgstr "" + +#: EnvironmentWarning.NoSSL.Text +msgid "The connection is not encrypted - passwords can be easily intercepted." +msgstr "" + +#: EnvironmentWarning.NoSSL.Link.Text +msgid "Use encrypted connection" +msgstr "" + +#: EnvironmentWarning.MissingModuleM2Crypto.Title +msgid "Missing module" +msgstr "" + +#: EnvironmentWarning.MissingModuleM2Crypto.Text +msgid "The python module 'M2Crypto' is missing. It is required for an encrypted connection to the CryptoBox webinterface. Please ask the administrator of the CryptoBox server to install the module." +msgstr "" + +#: EnvironmentWarning.MissingProgramStunnel.Title +msgid "Missing program" +msgstr "" + +#: EnvironmentWarning.MissingProgramStunnel.Text +msgid "The program 'stunnel4' is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "" diff --git a/v0.3.4.5/plugins/encrypted_webinterface/intl/ru/cryptobox-server-feature-encrypted_webinterface.po b/v0.3.4.5/plugins/encrypted_webinterface/intl/ru/cryptobox-server-feature-encrypted_webinterface.po new file mode 100644 index 0000000..9ae9758 --- /dev/null +++ b/v0.3.4.5/plugins/encrypted_webinterface/intl/ru/cryptobox-server-feature-encrypted_webinterface.po @@ -0,0 +1,50 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-02-10 01:24+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Encrypted webinterface" +msgstr "" + +#: Title +msgid "Create encryption certificate" +msgstr "" + +#: Button.CreateCertificate +msgid "Create certificate" +msgstr "" + +#: EnvironmentWarning.NoSSL.Text +msgid "The connection is not encrypted - passwords can be easily intercepted." +msgstr "" + +#: EnvironmentWarning.NoSSL.Link.Text +msgid "Use encrypted connection" +msgstr "" + +#: EnvironmentWarning.MissingModuleM2Crypto.Title +msgid "Missing module" +msgstr "" + +#: EnvironmentWarning.MissingModuleM2Crypto.Text +msgid "The python module 'M2Crypto' is missing. It is required for an encrypted connection to the CryptoBox webinterface. Please ask the administrator of the CryptoBox server to install the module." +msgstr "" + +#: EnvironmentWarning.MissingProgramStunnel.Title +msgid "Missing program" +msgstr "" + +#: EnvironmentWarning.MissingProgramStunnel.Text +msgid "The program 'stunnel4' is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "" diff --git a/v0.3.4.5/plugins/encrypted_webinterface/intl/sl/cryptobox-server-feature-encrypted_webinterface.po b/v0.3.4.5/plugins/encrypted_webinterface/intl/sl/cryptobox-server-feature-encrypted_webinterface.po new file mode 100644 index 0000000..52878b9 --- /dev/null +++ b/v0.3.4.5/plugins/encrypted_webinterface/intl/sl/cryptobox-server-feature-encrypted_webinterface.po @@ -0,0 +1,49 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-02-10 01:24+0100\n" +"PO-Revision-Date: 2007-02-16 14:21+0100\n" +"Last-Translator: tenzin \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Encrypted webinterface" +msgstr "Šifriran spletni vmesnik" + +#: Title +msgid "Create encryption certificate" +msgstr "Ustvari šifriran certifikat (potrdilo)" + +#: Button.CreateCertificate +msgid "Create certificate" +msgstr "Ustvari certifikat" + +#: EnvironmentWarning.NoSSL.Text +msgid "The connection is not encrypted - passwords can be easily intercepted." +msgstr "Povezava ni šifrirana - gesla je možno prestreči!" + +#: EnvironmentWarning.NoSSL.Link.Text +msgid "Use encrypted connection" +msgstr "Uporabi šifrirano povezavo" + +#: EnvironmentWarning.MissingModuleM2Crypto.Title +msgid "Missing module" +msgstr "Manjka modul" + +#: EnvironmentWarning.MissingModuleM2Crypto.Text +msgid "The python module 'M2Crypto' is missing. It is required for an encrypted connection to the CryptoBox webinterface. Please ask the administrator of the CryptoBox server to install the module." +msgstr "Python modul \"M2Crypto\" manjka. Potreben je vkolikor želite imeti šifrirano povezavo s spletnim vmesnikom Cryptobox. Prosite administratorja Cryptobox strežnika naj namesti modul " + +#: EnvironmentWarning.MissingProgramStunnel.Title +msgid "Missing program" +msgstr "Manjka program" + +#: EnvironmentWarning.MissingProgramStunnel.Text +msgid "The program 'stunnel4' is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "Program \"stunnel\" ni nameščen. Prosite administratorja Cryptobox strežnika naj program pravilno namesti" diff --git a/v0.3.4.5/plugins/encrypted_webinterface/intl/sv/cryptobox-server-feature-encrypted_webinterface.po b/v0.3.4.5/plugins/encrypted_webinterface/intl/sv/cryptobox-server-feature-encrypted_webinterface.po new file mode 100644 index 0000000..9ae9758 --- /dev/null +++ b/v0.3.4.5/plugins/encrypted_webinterface/intl/sv/cryptobox-server-feature-encrypted_webinterface.po @@ -0,0 +1,50 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-02-10 01:24+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Encrypted webinterface" +msgstr "" + +#: Title +msgid "Create encryption certificate" +msgstr "" + +#: Button.CreateCertificate +msgid "Create certificate" +msgstr "" + +#: EnvironmentWarning.NoSSL.Text +msgid "The connection is not encrypted - passwords can be easily intercepted." +msgstr "" + +#: EnvironmentWarning.NoSSL.Link.Text +msgid "Use encrypted connection" +msgstr "" + +#: EnvironmentWarning.MissingModuleM2Crypto.Title +msgid "Missing module" +msgstr "" + +#: EnvironmentWarning.MissingModuleM2Crypto.Text +msgid "The python module 'M2Crypto' is missing. It is required for an encrypted connection to the CryptoBox webinterface. Please ask the administrator of the CryptoBox server to install the module." +msgstr "" + +#: EnvironmentWarning.MissingProgramStunnel.Title +msgid "Missing program" +msgstr "" + +#: EnvironmentWarning.MissingProgramStunnel.Text +msgid "The program 'stunnel4' is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "" diff --git a/v0.3.4.5/plugins/encrypted_webinterface/intl/ur/cryptobox-server-feature-encrypted_webinterface.po b/v0.3.4.5/plugins/encrypted_webinterface/intl/ur/cryptobox-server-feature-encrypted_webinterface.po new file mode 100644 index 0000000..9ae9758 --- /dev/null +++ b/v0.3.4.5/plugins/encrypted_webinterface/intl/ur/cryptobox-server-feature-encrypted_webinterface.po @@ -0,0 +1,50 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-02-10 01:24+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Encrypted webinterface" +msgstr "" + +#: Title +msgid "Create encryption certificate" +msgstr "" + +#: Button.CreateCertificate +msgid "Create certificate" +msgstr "" + +#: EnvironmentWarning.NoSSL.Text +msgid "The connection is not encrypted - passwords can be easily intercepted." +msgstr "" + +#: EnvironmentWarning.NoSSL.Link.Text +msgid "Use encrypted connection" +msgstr "" + +#: EnvironmentWarning.MissingModuleM2Crypto.Title +msgid "Missing module" +msgstr "" + +#: EnvironmentWarning.MissingModuleM2Crypto.Text +msgid "The python module 'M2Crypto' is missing. It is required for an encrypted connection to the CryptoBox webinterface. Please ask the administrator of the CryptoBox server to install the module." +msgstr "" + +#: EnvironmentWarning.MissingProgramStunnel.Title +msgid "Missing program" +msgstr "" + +#: EnvironmentWarning.MissingProgramStunnel.Text +msgid "The program 'stunnel4' is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "" diff --git a/v0.3.4.5/plugins/encrypted_webinterface/language.hdf b/v0.3.4.5/plugins/encrypted_webinterface/language.hdf new file mode 100644 index 0000000..a5bad29 --- /dev/null +++ b/v0.3.4.5/plugins/encrypted_webinterface/language.hdf @@ -0,0 +1,26 @@ +Name = Encrypted webinterface +Link = Encrypted webinterface + +Title = Create encryption certificate + +Button.CreateCertificate = Create certificate + + +EnvironmentWarning { + NoSSL { + Text = The connection is not encrypted - passwords can be easily intercepted. + Link.Text = Use encrypted connection + Link.Prot = https + } + + MissingModuleM2Crypto { + Title = Missing module + Text = The python module 'M2Crypto' is missing. It is required for an encrypted connection to the CryptoBox webinterface. Please ask the administrator of the CryptoBox server to install the module. + } + + MissingProgramStunnel { + Title = Missing program + Text = The program 'stunnel4' is not installed. Please ask the administrator of the CryptoBox server to configure it properly. + } +} + diff --git a/v0.3.4.5/plugins/encrypted_webinterface/root_action.py b/v0.3.4.5/plugins/encrypted_webinterface/root_action.py new file mode 100755 index 0000000..6bd176e --- /dev/null +++ b/v0.3.4.5/plugins/encrypted_webinterface/root_action.py @@ -0,0 +1,92 @@ +#!/usr/bin/env python +# +# Copyright 2007 sense.lab e.V. +# +# This file is part of the CryptoBox. +# +# The CryptoBox 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 CryptoBox 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 the CryptoBox; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +__revision__ = "$Id" + + +## necessary: otherwise CryptoBoxRootActions.py will refuse to execute this script +PLUGIN_TYPE = "cryptobox" + +STUNNEL_BIN = "/usr/bin/stunnel4" + +import sys +import os + + +def _get_username(): + if ("SUPERCMD" in os.environ) and ("ORIG_USER" in os.environ): + return os.environ["ORIG_USER"] + elif "USER" in os.environ: + return os.environ["USER"] + else: + return "cryptobox" + + +def run_stunnel(cert_file, src_port, dst_port, pid_file): + import subprocess + if not src_port.isdigit(): + sys.stderr.write("Source port is not a number: %s" % src_port) + return False + if not dst_port.isdigit(): + sys.stderr.write("Destination port is not a number: %s" % dst_port) + return False + if not os.path.isfile(cert_file): + sys.stderr.write("The certificate file (%s) does not exist!" % cert_file) + return False + username = _get_username() + if not username: + sys.stderr.write("Could not retrieve the username with uid=%d." % os.getuid()) + return False + ## the environment (especially PATH) should be clean, as 'stunnel' cares about + ## this in a setuid situation + proc = subprocess.Popen( + shell = False, + env = {}, + stdin = subprocess.PIPE, + args = [ STUNNEL_BIN, + "-fd", + "0"]) + proc.stdin.write("setuid = %s\n" % username) + proc.stdin.write("pid = %s\n" % pid_file) + proc.stdin.write("[cryptobox-server]\n") + proc.stdin.write("connect = %s\n" % src_port) + proc.stdin.write("accept = %s\n" % dst_port) + proc.stdin.write("cert = %s\n" % cert_file) + (output, error) = proc.communicate() + return proc.returncode == 0 + + +if __name__ == "__main__": + args = sys.argv[1:] + + self_bin = sys.argv[0] + + if len(args) != 4: + sys.stderr.write("%s: invalid number of arguments (%d instead of %d))\n" % \ + (self_bin, len(args), 4)) + sys.exit(1) + + if not run_stunnel(args[0], args[1], args[2], args[3]): + sys.stderr.write("%s: failed to run 'stunnel'!" % self_bin) + sys.exit(100) + + sys.exit(0) + diff --git a/v0.3.4.5/plugins/encrypted_webinterface/unittests.py b/v0.3.4.5/plugins/encrypted_webinterface/unittests.py new file mode 100644 index 0000000..4bf09f9 --- /dev/null +++ b/v0.3.4.5/plugins/encrypted_webinterface/unittests.py @@ -0,0 +1,34 @@ +# +# Copyright 2007 sense.lab e.V. +# +# This file is part of the CryptoBox. +# +# The CryptoBox 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 CryptoBox 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 the CryptoBox; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +__revision__ = "$Id" + +from cryptobox.tests.base import WebInterfaceTestClass + +class unittests(WebInterfaceTestClass): + + def test_get_cert_form(self): + """retrieve the default form of the certificate manager""" + url = self.url + "encrypted_webinterface" + self.register_auth(url) + self.cmd.go(url) + ## TODO: enable it, as soon as the plugin is enabled by default + #self.cmd.find("Data.Status.Plugins.encrypted_webinterface") + diff --git a/v0.3.4.5/plugins/help/doc.cs b/v0.3.4.5/plugins/help/doc.cs new file mode 100644 index 0000000..2d539e2 --- /dev/null +++ b/v0.3.4.5/plugins/help/doc.cs @@ -0,0 +1,9 @@ + + + + +
+ + + +
diff --git a/v0.3.4.5/plugins/help/help.py b/v0.3.4.5/plugins/help/help.py new file mode 100644 index 0000000..dd6800e --- /dev/null +++ b/v0.3.4.5/plugins/help/help.py @@ -0,0 +1,81 @@ +# +# Copyright 2006 sense.lab e.V. +# +# This file is part of the CryptoBox. +# +# The CryptoBox 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 CryptoBox 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 the CryptoBox; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +"""The help feature of the CryptoBox. +""" + +__revision__ = "$Id" + +import cryptobox.plugins.base + +class help(cryptobox.plugins.base.CryptoBoxPlugin): + """The help feature of the CryptoBox. + """ + + #plugin_capabilities = [ "system" ] + #TODO: enable this plugin as soon as the user documentation is ready again + plugin_capabilities = [ ] + plugin_visibility = [ "menu" ] + request_auth = False + rank = 80 + + default_lang = 'en' + default_page = "CryptoBoxUser" + + def do_action(self, page=""): + '''prints the offline wikipage + ''' + import re, os + ## check for invalid characters and if the page exists in the default language + if page and \ + not re.search(r'\W', page) and \ + os.path.isfile(os.path.join(self.cbox.prefs["Locations"]["DocDir"], + self.default_lang, page + '.html')): + ## everything is ok + pass + else: + ## display this page as default help page + page = self.default_page + if page: + ## issue warning + self.cbox.log.info("could not find the selected documentation page: %s" % str(page)) + ## store the name of the page + self.hdf[self.hdf_prefix + "Page"] = page + ## choose the right language + for lang in self.site.lang_order: + if os.path.isfile(os.path.join(self.cbox.prefs["Locations"]["DocDir"], + lang, page + '.html')): + doc_lang = lang + break + else: + doc_lang = self.default_lang + self.hdf[self.hdf_prefix + "Language"] = doc_lang + ## store the current setting for a later "getStatus" call + self.current_lang = doc_lang + self.current_page = page + return "doc" + + + def get_status(self): + """Retrieve the current status of the feature. + """ + return "%s:%s" % (self.current_lang, self.current_page) + + diff --git a/v0.3.4.5/plugins/help/intl/cryptobox-server-feature-help.pot b/v0.3.4.5/plugins/help/intl/cryptobox-server-feature-help.pot new file mode 100644 index 0000000..e159aa9 --- /dev/null +++ b/v0.3.4.5/plugins/help/intl/cryptobox-server-feature-help.pot @@ -0,0 +1,7 @@ +#: Name +msgid "User manual" +msgstr "" + +#: Link +msgid "Help" +msgstr "" diff --git a/v0.3.4.5/plugins/help/intl/cs/cryptobox-server-feature-help.po b/v0.3.4.5/plugins/help/intl/cs/cryptobox-server-feature-help.po new file mode 100644 index 0000000..ec68aa6 --- /dev/null +++ b/v0.3.4.5/plugins/help/intl/cs/cryptobox-server-feature-help.po @@ -0,0 +1,22 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-12-18 11:39+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "User manual" +msgstr "" + +#: Link +msgid "Help" +msgstr "" diff --git a/v0.3.4.5/plugins/help/intl/da/cryptobox-server-feature-help.po b/v0.3.4.5/plugins/help/intl/da/cryptobox-server-feature-help.po new file mode 100644 index 0000000..ec68aa6 --- /dev/null +++ b/v0.3.4.5/plugins/help/intl/da/cryptobox-server-feature-help.po @@ -0,0 +1,22 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-12-18 11:39+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "User manual" +msgstr "" + +#: Link +msgid "Help" +msgstr "" diff --git a/v0.3.4.5/plugins/help/intl/de/cryptobox-server-feature-help.po b/v0.3.4.5/plugins/help/intl/de/cryptobox-server-feature-help.po new file mode 100644 index 0000000..626ecee --- /dev/null +++ b/v0.3.4.5/plugins/help/intl/de/cryptobox-server-feature-help.po @@ -0,0 +1,21 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-12-18 11:39+0100\n" +"PO-Revision-Date: 2006-12-14 03:47+0100\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "User manual" +msgstr "Nutzerhandbuch" + +#: Link +msgid "Help" +msgstr "Hilfe" diff --git a/v0.3.4.5/plugins/help/intl/en/cryptobox-server-feature-help.po b/v0.3.4.5/plugins/help/intl/en/cryptobox-server-feature-help.po new file mode 100644 index 0000000..cfbbcfe --- /dev/null +++ b/v0.3.4.5/plugins/help/intl/en/cryptobox-server-feature-help.po @@ -0,0 +1,7 @@ +#: Name +msgid "User manual" +msgstr "User manual" + +#: Link +msgid "Help" +msgstr "Help" diff --git a/v0.3.4.5/plugins/help/intl/es/cryptobox-server-feature-help.po b/v0.3.4.5/plugins/help/intl/es/cryptobox-server-feature-help.po new file mode 100644 index 0000000..ec68aa6 --- /dev/null +++ b/v0.3.4.5/plugins/help/intl/es/cryptobox-server-feature-help.po @@ -0,0 +1,22 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-12-18 11:39+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "User manual" +msgstr "" + +#: Link +msgid "Help" +msgstr "" diff --git a/v0.3.4.5/plugins/help/intl/fi/cryptobox-server-feature-help.po b/v0.3.4.5/plugins/help/intl/fi/cryptobox-server-feature-help.po new file mode 100644 index 0000000..ec68aa6 --- /dev/null +++ b/v0.3.4.5/plugins/help/intl/fi/cryptobox-server-feature-help.po @@ -0,0 +1,22 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-12-18 11:39+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "User manual" +msgstr "" + +#: Link +msgid "Help" +msgstr "" diff --git a/v0.3.4.5/plugins/help/intl/fr/cryptobox-server-feature-help.po b/v0.3.4.5/plugins/help/intl/fr/cryptobox-server-feature-help.po new file mode 100644 index 0000000..ec68aa6 --- /dev/null +++ b/v0.3.4.5/plugins/help/intl/fr/cryptobox-server-feature-help.po @@ -0,0 +1,22 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-12-18 11:39+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "User manual" +msgstr "" + +#: Link +msgid "Help" +msgstr "" diff --git a/v0.3.4.5/plugins/help/intl/hu/cryptobox-server-feature-help.po b/v0.3.4.5/plugins/help/intl/hu/cryptobox-server-feature-help.po new file mode 100644 index 0000000..ec68aa6 --- /dev/null +++ b/v0.3.4.5/plugins/help/intl/hu/cryptobox-server-feature-help.po @@ -0,0 +1,22 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-12-18 11:39+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "User manual" +msgstr "" + +#: Link +msgid "Help" +msgstr "" diff --git a/v0.3.4.5/plugins/help/intl/it/cryptobox-server-feature-help.po b/v0.3.4.5/plugins/help/intl/it/cryptobox-server-feature-help.po new file mode 100644 index 0000000..a657992 --- /dev/null +++ b/v0.3.4.5/plugins/help/intl/it/cryptobox-server-feature-help.po @@ -0,0 +1,21 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-12-18 11:39+0100\n" +"PO-Revision-Date: 2007-02-22 11:45+0100\n" +"Last-Translator: Fabrizio Tarizzo \n" +"Language-Team: Italian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "User manual" +msgstr "Manuale utente" + +#: Link +msgid "Help" +msgstr "Aiuto" diff --git a/v0.3.4.5/plugins/help/intl/ja/cryptobox-server-feature-help.po b/v0.3.4.5/plugins/help/intl/ja/cryptobox-server-feature-help.po new file mode 100644 index 0000000..3bb79b6 --- /dev/null +++ b/v0.3.4.5/plugins/help/intl/ja/cryptobox-server-feature-help.po @@ -0,0 +1,21 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-12-18 11:39+0100\n" +"PO-Revision-Date: 2007-02-23 11:36+0100\n" +"Last-Translator: kinneko \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "User manual" +msgstr "ユーザーマニュアル" + +#: Link +msgid "Help" +msgstr "ヘルプ" diff --git a/v0.3.4.5/plugins/help/intl/nl/cryptobox-server-feature-help.po b/v0.3.4.5/plugins/help/intl/nl/cryptobox-server-feature-help.po new file mode 100644 index 0000000..ec68aa6 --- /dev/null +++ b/v0.3.4.5/plugins/help/intl/nl/cryptobox-server-feature-help.po @@ -0,0 +1,22 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-12-18 11:39+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "User manual" +msgstr "" + +#: Link +msgid "Help" +msgstr "" diff --git a/v0.3.4.5/plugins/help/intl/pl/cryptobox-server-feature-help.po b/v0.3.4.5/plugins/help/intl/pl/cryptobox-server-feature-help.po new file mode 100644 index 0000000..1a43de0 --- /dev/null +++ b/v0.3.4.5/plugins/help/intl/pl/cryptobox-server-feature-help.po @@ -0,0 +1,21 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-04-01 15:51+0200\n" +"PO-Revision-Date: 2007-03-28 18:00+0100\n" +"Last-Translator: KAZNOWSKI & ASSOCIATES \n" +"Language-Team: POLSKI \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "User manual" +msgstr "Podręcznik użytkownika" + +#: Link +msgid "Help" +msgstr "Pomoc" diff --git a/v0.3.4.5/plugins/help/intl/pt/cryptobox-server-feature-help.po b/v0.3.4.5/plugins/help/intl/pt/cryptobox-server-feature-help.po new file mode 100644 index 0000000..ec68aa6 --- /dev/null +++ b/v0.3.4.5/plugins/help/intl/pt/cryptobox-server-feature-help.po @@ -0,0 +1,22 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-12-18 11:39+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "User manual" +msgstr "" + +#: Link +msgid "Help" +msgstr "" diff --git a/v0.3.4.5/plugins/help/intl/ru/cryptobox-server-feature-help.po b/v0.3.4.5/plugins/help/intl/ru/cryptobox-server-feature-help.po new file mode 100644 index 0000000..ec68aa6 --- /dev/null +++ b/v0.3.4.5/plugins/help/intl/ru/cryptobox-server-feature-help.po @@ -0,0 +1,22 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-12-18 11:39+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "User manual" +msgstr "" + +#: Link +msgid "Help" +msgstr "" diff --git a/v0.3.4.5/plugins/help/intl/sl/cryptobox-server-feature-help.po b/v0.3.4.5/plugins/help/intl/sl/cryptobox-server-feature-help.po new file mode 100644 index 0000000..600ef42 --- /dev/null +++ b/v0.3.4.5/plugins/help/intl/sl/cryptobox-server-feature-help.po @@ -0,0 +1,21 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-12-18 11:39+0100\n" +"PO-Revision-Date: 2006-12-09 16:28+0100\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "User manual" +msgstr "Uporabniški priročnik" + +#: Link +msgid "Help" +msgstr "Pomoč" diff --git a/v0.3.4.5/plugins/help/intl/sv/cryptobox-server-feature-help.po b/v0.3.4.5/plugins/help/intl/sv/cryptobox-server-feature-help.po new file mode 100644 index 0000000..ec68aa6 --- /dev/null +++ b/v0.3.4.5/plugins/help/intl/sv/cryptobox-server-feature-help.po @@ -0,0 +1,22 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-12-18 11:39+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "User manual" +msgstr "" + +#: Link +msgid "Help" +msgstr "" diff --git a/v0.3.4.5/plugins/help/intl/ur/cryptobox-server-feature-help.po b/v0.3.4.5/plugins/help/intl/ur/cryptobox-server-feature-help.po new file mode 100644 index 0000000..953ee2d --- /dev/null +++ b/v0.3.4.5/plugins/help/intl/ur/cryptobox-server-feature-help.po @@ -0,0 +1,22 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-02-05 23:27+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "User manual" +msgstr "" + +#: Link +msgid "Help" +msgstr "" diff --git a/v0.3.4.5/plugins/help/language.hdf b/v0.3.4.5/plugins/help/language.hdf new file mode 100644 index 0000000..f2eb3fc --- /dev/null +++ b/v0.3.4.5/plugins/help/language.hdf @@ -0,0 +1,5 @@ +Name = User manual +Link = Help + +Title.Help = User manual + diff --git a/v0.3.4.5/plugins/help/plugin_icon.gif b/v0.3.4.5/plugins/help/plugin_icon.gif new file mode 100644 index 0000000000000000000000000000000000000000..950e6d1ab565882a7fdab0595117595b13316218 GIT binary patch literal 3461 zcmV;04SMoNNk%w1VL$*t0O$VzOH4{nQBG4;QdU@2T3lINUR!onS7TpYUtwNoU0rNj zU14HiW?^7(USDHnVt-j&iB(r^Vq$4zV`XM!XK7}9U|?-%XL4s~YHVqZUSG6LQ*3T) zo?2aVZf&?wR&Q}`dTed8Q(Kr~WYS4az))IqbaK2^Th&Zf)=g2wR9$y@c7}9z+E7%F zadFvDS-D?hgLinzSYgytUV40a+)`V$WNCeWe9l~7&0J;PRb7XCeA8NH+F4!7U}e=? zV&GO^fP#OkBruDcbbZf$##0$Z*#1JhVf-=w|{}q zba~)ybdZvd>}hfIXKty9iSuZ5l9Z9}YjgH$aQ13;m6w#Fk(1DUf%9&6_-%NXnU=eW zi^+qD-+F-hZhD%Vn5mYTo1L2daeUr@h4FZR`E`E(bAGy#l%AlS+J=hje}tf-pQ5Cp z%#xI(rlanLji#uj`+|z!kCNq$k=>J&vZkh~tEkGKqP3~1tgfrko}c!Pl<1b4g?(J=IHD0>h|gC@$BmD@9gvK?Cwqxtg5+n3bn&!qO`$%~o~Xg+=R?&ZUGfB-}^SJkO&N0wbXvt-@1gGUygySH!Q z#gnJ@tUI&p(3Y*c&&~meZ1CNaMy;^5!-u6=D@+ZsHE!I#Jw6Qi@HKANzFk8M`5QND z`uu*~>bP{{#*`yt_N?0RwbzHgee(v{+h%;CAF|13@3n8=)HXlt)hpbw* zWZZurf|bY28nf%nt{I+;xiD?X$-VwbwkFxL_{iKLLmzDq`)_NPA7^fD?fY!c_iJWSAj<4rPIlKGsO{8)lVJ zBjRS|;ddT4;_L?wbL!Nl;fA?&c#l1b8ORMakvW&yaQe-t;eOtL15SoVil-rm4S9Ia zV!l}>oQllNCge9s8d;=R-GC!jlKY?$U5A2c2cLZPiRT|{GisTnl}E;DB$h9N)7O{{ zDS?kX!MzsQHMV^N;e-=bNTDf<Ji^iB1^jhG+}`k)HBch8bm=5i<;S%4|xEF~m5- zj55p^vk4kXsGvg@jNqaSss2UA+Lxpc>4}eTpIxTfklq9XNgRW00_Y|S46uL_wGiVC zGq%{VzyS+L0Zxms{NaiccrrvOiMCzloRyn!)KLcvln@V5Kl!7sx=iKs2?GlVf(tIS zT%v?m4kWoe0tqe{A0S6jOa-N~P*Cmj&N2tE5h)|VD3Rwr^1w!(jNafe2qX(;u|PTg>@vwd z>sGaoK0YDskJ9-RVMICMkV`8r8ZV@SQnT$$WH-tP(ny9%NT4ngLOAg>&i2G(k3H~2 zB~`>#<=_GevV>#F{sIC$0t>zg>99{c@D-OKH-8LrO~D|zoI~1I>_Hbh>7+x><(0QH z*HVEv@dFJfbfHZu(GAnVLO|eS&tq&JZU-aY9Ab7jEKG658E4e-jXL7cw%>kYk&})) z@tko*6hhqXLp6>d@XscUEMx<3zRTF;$ z#=wpjje!F!U?B~B7~&LIFoF>zLnRAQfj;6PBXD%-gfO_oJ_h)OGvt8}X_$f$Zjb^G zXkb&!z(px+Q5|kLA_X`wf*1~HyeSBQ1$3atI{4N^dEBEmbUKna7T~l{oPiH{NCO#g za03%~AOuvP!Uo_~f(0-D0gxa>C1PL%CSc);Ybe7M@}1=KzycZgP=|031t0F9P6!F⃁ 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\n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Choose interface language" +msgstr "" + +#: Link +msgid "Languages" +msgstr "" + +#: Title.Lang +msgid "Choose your tongue" +msgstr "" + +#: Help.Select +msgid "Choose your preferred interface language. This setting will be kept for your browsing session." +msgstr "" diff --git a/v0.3.4.5/plugins/language_selection/intl/da/cryptobox-server-feature-language_selection.po b/v0.3.4.5/plugins/language_selection/intl/da/cryptobox-server-feature-language_selection.po new file mode 100644 index 0000000..5b96258 --- /dev/null +++ b/v0.3.4.5/plugins/language_selection/intl/da/cryptobox-server-feature-language_selection.po @@ -0,0 +1,29 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:00+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Choose interface language" +msgstr "" + +#: Link +msgid "Languages" +msgstr "" + +#: Title.Lang +msgid "Choose your tongue" +msgstr "" + +#: Help.Select +msgid "Choose your preferred interface language. This setting will be kept for your browsing session." +msgstr "" diff --git a/v0.3.4.5/plugins/language_selection/intl/de/cryptobox-server-feature-language_selection.po b/v0.3.4.5/plugins/language_selection/intl/de/cryptobox-server-feature-language_selection.po new file mode 100644 index 0000000..1e512af --- /dev/null +++ b/v0.3.4.5/plugins/language_selection/intl/de/cryptobox-server-feature-language_selection.po @@ -0,0 +1,29 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:00+0100\n" +"PO-Revision-Date: 2007-02-03 21:16+0100\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Choose interface language" +msgstr "Wähle eine Nutzersprache" + +#: Link +msgid "Languages" +msgstr "Sprachen" + +#: Title.Lang +msgid "Choose your tongue" +msgstr "Wähle deine Sprache" + +#: Help.Select +msgid "Choose your preferred interface language. This setting will be kept for your browsing session." +msgstr "Wähle deine bevorzugte Nutzersprache. Diese Einstellung wird für die Dauer deiner Sitzung gepeichert." diff --git a/v0.3.4.5/plugins/language_selection/intl/en/cryptobox-server-feature-language_selection.po b/v0.3.4.5/plugins/language_selection/intl/en/cryptobox-server-feature-language_selection.po new file mode 100644 index 0000000..4e022b0 --- /dev/null +++ b/v0.3.4.5/plugins/language_selection/intl/en/cryptobox-server-feature-language_selection.po @@ -0,0 +1,15 @@ +#: Name +msgid "Choose interface language" +msgstr "Choose interface language" + +#: Link +msgid "Languages" +msgstr "Languages" + +#: Title.Lang +msgid "Choose your tongue" +msgstr "Choose your tongue" + +#: Help.Select +msgid "Choose your preferred interface language. This setting will be kept for your browsing session." +msgstr "Choose your preferred interface language. This setting will be kept for your browsing session." diff --git a/v0.3.4.5/plugins/language_selection/intl/es/cryptobox-server-feature-language_selection.po b/v0.3.4.5/plugins/language_selection/intl/es/cryptobox-server-feature-language_selection.po new file mode 100644 index 0000000..bb85544 --- /dev/null +++ b/v0.3.4.5/plugins/language_selection/intl/es/cryptobox-server-feature-language_selection.po @@ -0,0 +1,30 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:00+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Choose interface language" +msgstr "" + +#: Link +msgid "Languages" +msgstr "" + +#: Title.Lang +msgid "Choose your tongue" +msgstr "" + +#: Help.Select +msgid "Choose your preferred interface language. This setting will be kept for your browsing session." +msgstr "" diff --git a/v0.3.4.5/plugins/language_selection/intl/fi/cryptobox-server-feature-language_selection.po b/v0.3.4.5/plugins/language_selection/intl/fi/cryptobox-server-feature-language_selection.po new file mode 100644 index 0000000..bb85544 --- /dev/null +++ b/v0.3.4.5/plugins/language_selection/intl/fi/cryptobox-server-feature-language_selection.po @@ -0,0 +1,30 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:00+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Choose interface language" +msgstr "" + +#: Link +msgid "Languages" +msgstr "" + +#: Title.Lang +msgid "Choose your tongue" +msgstr "" + +#: Help.Select +msgid "Choose your preferred interface language. This setting will be kept for your browsing session." +msgstr "" diff --git a/v0.3.4.5/plugins/language_selection/intl/fr/cryptobox-server-feature-language_selection.po b/v0.3.4.5/plugins/language_selection/intl/fr/cryptobox-server-feature-language_selection.po new file mode 100644 index 0000000..bb85544 --- /dev/null +++ b/v0.3.4.5/plugins/language_selection/intl/fr/cryptobox-server-feature-language_selection.po @@ -0,0 +1,30 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:00+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Choose interface language" +msgstr "" + +#: Link +msgid "Languages" +msgstr "" + +#: Title.Lang +msgid "Choose your tongue" +msgstr "" + +#: Help.Select +msgid "Choose your preferred interface language. This setting will be kept for your browsing session." +msgstr "" diff --git a/v0.3.4.5/plugins/language_selection/intl/hu/cryptobox-server-feature-language_selection.po b/v0.3.4.5/plugins/language_selection/intl/hu/cryptobox-server-feature-language_selection.po new file mode 100644 index 0000000..bb85544 --- /dev/null +++ b/v0.3.4.5/plugins/language_selection/intl/hu/cryptobox-server-feature-language_selection.po @@ -0,0 +1,30 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:00+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Choose interface language" +msgstr "" + +#: Link +msgid "Languages" +msgstr "" + +#: Title.Lang +msgid "Choose your tongue" +msgstr "" + +#: Help.Select +msgid "Choose your preferred interface language. This setting will be kept for your browsing session." +msgstr "" diff --git a/v0.3.4.5/plugins/language_selection/intl/it/cryptobox-server-feature-language_selection.po b/v0.3.4.5/plugins/language_selection/intl/it/cryptobox-server-feature-language_selection.po new file mode 100644 index 0000000..2ab3a10 --- /dev/null +++ b/v0.3.4.5/plugins/language_selection/intl/it/cryptobox-server-feature-language_selection.po @@ -0,0 +1,29 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:00+0100\n" +"PO-Revision-Date: 2007-03-20 09:36+0100\n" +"Last-Translator: Fabrizio Tarizzo \n" +"Language-Team: Italian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Choose interface language" +msgstr "Scegliere la lingua dell'interfaccia" + +#: Link +msgid "Languages" +msgstr "Lingue" + +#: Title.Lang +msgid "Choose your tongue" +msgstr "Scegliere la propria lingua" + +#: Help.Select +msgid "Choose your preferred interface language. This setting will be kept for your browsing session." +msgstr "Scegliere la propria lingua predefinita per l'interfaccia. L'impostazione sarà mantenuta per la durata della sessione." diff --git a/v0.3.4.5/plugins/language_selection/intl/ja/cryptobox-server-feature-language_selection.po b/v0.3.4.5/plugins/language_selection/intl/ja/cryptobox-server-feature-language_selection.po new file mode 100644 index 0000000..8d9d8e6 --- /dev/null +++ b/v0.3.4.5/plugins/language_selection/intl/ja/cryptobox-server-feature-language_selection.po @@ -0,0 +1,29 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:00+0100\n" +"PO-Revision-Date: 2007-02-23 12:04+0100\n" +"Last-Translator: kinneko \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Choose interface language" +msgstr "メニューの表示言語を選択する" + +#: Link +msgid "Languages" +msgstr "言語" + +#: Title.Lang +msgid "Choose your tongue" +msgstr "あなたの使う言語を選んでください" + +#: Help.Select +msgid "Choose your preferred interface language. This setting will be kept for your browsing session." +msgstr "あなたの使用する言語を選んでください。この設定は保存されますので、次回以降設定する必要はありません。" diff --git a/v0.3.4.5/plugins/language_selection/intl/nl/cryptobox-server-feature-language_selection.po b/v0.3.4.5/plugins/language_selection/intl/nl/cryptobox-server-feature-language_selection.po new file mode 100644 index 0000000..bb85544 --- /dev/null +++ b/v0.3.4.5/plugins/language_selection/intl/nl/cryptobox-server-feature-language_selection.po @@ -0,0 +1,30 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:00+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Choose interface language" +msgstr "" + +#: Link +msgid "Languages" +msgstr "" + +#: Title.Lang +msgid "Choose your tongue" +msgstr "" + +#: Help.Select +msgid "Choose your preferred interface language. This setting will be kept for your browsing session." +msgstr "" diff --git a/v0.3.4.5/plugins/language_selection/intl/pl/cryptobox-server-feature-language_selection.po b/v0.3.4.5/plugins/language_selection/intl/pl/cryptobox-server-feature-language_selection.po new file mode 100644 index 0000000..d1806e2 --- /dev/null +++ b/v0.3.4.5/plugins/language_selection/intl/pl/cryptobox-server-feature-language_selection.po @@ -0,0 +1,29 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-04-01 15:51+0200\n" +"PO-Revision-Date: 2007-03-29 08:48+0200\n" +"Last-Translator: Andrzej S. Kaznowski \n" +"Language-Team: POLSKI \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Choose interface language" +msgstr "Wybierz język interfejsu" + +#: Link +msgid "Languages" +msgstr "Języki" + +#: Title.Lang +msgid "Choose your tongue" +msgstr "Wybierz język" + +#: Help.Select +msgid "Choose your preferred interface language. This setting will be kept for your browsing session." +msgstr "Wybierz język interfejsu. To ustawienie będzie zachowane tylko do zamknięcia sesji w przeglądarce." diff --git a/v0.3.4.5/plugins/language_selection/intl/pt/cryptobox-server-feature-language_selection.po b/v0.3.4.5/plugins/language_selection/intl/pt/cryptobox-server-feature-language_selection.po new file mode 100644 index 0000000..bb85544 --- /dev/null +++ b/v0.3.4.5/plugins/language_selection/intl/pt/cryptobox-server-feature-language_selection.po @@ -0,0 +1,30 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:00+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Choose interface language" +msgstr "" + +#: Link +msgid "Languages" +msgstr "" + +#: Title.Lang +msgid "Choose your tongue" +msgstr "" + +#: Help.Select +msgid "Choose your preferred interface language. This setting will be kept for your browsing session." +msgstr "" diff --git a/v0.3.4.5/plugins/language_selection/intl/ru/cryptobox-server-feature-language_selection.po b/v0.3.4.5/plugins/language_selection/intl/ru/cryptobox-server-feature-language_selection.po new file mode 100644 index 0000000..bb85544 --- /dev/null +++ b/v0.3.4.5/plugins/language_selection/intl/ru/cryptobox-server-feature-language_selection.po @@ -0,0 +1,30 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:00+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Choose interface language" +msgstr "" + +#: Link +msgid "Languages" +msgstr "" + +#: Title.Lang +msgid "Choose your tongue" +msgstr "" + +#: Help.Select +msgid "Choose your preferred interface language. This setting will be kept for your browsing session." +msgstr "" diff --git a/v0.3.4.5/plugins/language_selection/intl/sl/cryptobox-server-feature-language_selection.po b/v0.3.4.5/plugins/language_selection/intl/sl/cryptobox-server-feature-language_selection.po new file mode 100644 index 0000000..366487d --- /dev/null +++ b/v0.3.4.5/plugins/language_selection/intl/sl/cryptobox-server-feature-language_selection.po @@ -0,0 +1,29 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:00+0100\n" +"PO-Revision-Date: 2007-02-06 11:28+0100\n" +"Last-Translator: tenzin \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Choose interface language" +msgstr "Izberite jezik" + +#: Link +msgid "Languages" +msgstr "Jezik" + +#: Title.Lang +msgid "Choose your tongue" +msgstr "Izberite svoj jezik" + +#: Help.Select +msgid "Choose your preferred interface language. This setting will be kept for your browsing session." +msgstr "Izberite jezik, ki ga želite nastaviti. Nastavitve bodo shranjene med vašim smukanjem po strani :)" diff --git a/v0.3.4.5/plugins/language_selection/intl/sv/cryptobox-server-feature-language_selection.po b/v0.3.4.5/plugins/language_selection/intl/sv/cryptobox-server-feature-language_selection.po new file mode 100644 index 0000000..bb85544 --- /dev/null +++ b/v0.3.4.5/plugins/language_selection/intl/sv/cryptobox-server-feature-language_selection.po @@ -0,0 +1,30 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:00+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Choose interface language" +msgstr "" + +#: Link +msgid "Languages" +msgstr "" + +#: Title.Lang +msgid "Choose your tongue" +msgstr "" + +#: Help.Select +msgid "Choose your preferred interface language. This setting will be kept for your browsing session." +msgstr "" diff --git a/v0.3.4.5/plugins/language_selection/intl/ur/cryptobox-server-feature-language_selection.po b/v0.3.4.5/plugins/language_selection/intl/ur/cryptobox-server-feature-language_selection.po new file mode 100644 index 0000000..feab6b8 --- /dev/null +++ b/v0.3.4.5/plugins/language_selection/intl/ur/cryptobox-server-feature-language_selection.po @@ -0,0 +1,30 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-02-05 23:27+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Choose interface language" +msgstr "" + +#: Link +msgid "Languages" +msgstr "" + +#: Title.Lang +msgid "Choose your tongue" +msgstr "" + +#: Help.Select +msgid "Choose your preferred interface language. This setting will be kept for your browsing session." +msgstr "" diff --git a/v0.3.4.5/plugins/language_selection/language.hdf b/v0.3.4.5/plugins/language_selection/language.hdf new file mode 100644 index 0000000..657b09b --- /dev/null +++ b/v0.3.4.5/plugins/language_selection/language.hdf @@ -0,0 +1,8 @@ +Name = Choose interface language +Link = Languages + +Title = Languages +Title.Lang = Choose your tongue + +Help.Select = Choose your preferred interface language. This setting will be kept for your browsing session. + diff --git a/v0.3.4.5/plugins/language_selection/language_selection.cs b/v0.3.4.5/plugins/language_selection/language_selection.cs new file mode 100644 index 0000000..9cccf57 --- /dev/null +++ b/v0.3.4.5/plugins/language_selection/language_selection.cs @@ -0,0 +1,25 @@ + + + + +
+ + + + + + + + +
diff --git a/v0.3.4.5/plugins/language_selection/language_selection.py b/v0.3.4.5/plugins/language_selection/language_selection.py new file mode 100644 index 0000000..6436bba --- /dev/null +++ b/v0.3.4.5/plugins/language_selection/language_selection.py @@ -0,0 +1,48 @@ +# +# Copyright 2006 sense.lab e.V. +# +# This file is part of the CryptoBox. +# +# The CryptoBox 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 CryptoBox 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 the CryptoBox; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +"""The language_selection feature of the CryptoBox. +""" + +__revision__ = "$Id" + +import cryptobox.plugins.base + + +class language_selection(cryptobox.plugins.base.CryptoBoxPlugin): + """The language_selection feature of the CryptoBox. + """ + + plugin_capabilities = [ "system" ] + plugin_visibility = [ "menu", "preferences" ] + request_auth = False + rank = 60 + + def do_action(self): + """Show all available languages. + """ + return "language_selection" + + + def get_status(self): + """The current status of the feature is defined as the current language. + """ + return ":".join(self.site.lang_order) + diff --git a/v0.3.4.5/plugins/language_selection/list_marker_tango.gif b/v0.3.4.5/plugins/language_selection/list_marker_tango.gif new file mode 100644 index 0000000000000000000000000000000000000000..33d079da8c173c0c576b4de8197a25b1ea1fb815 GIT binary patch literal 1165 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 literal 0 HcmV?d00001 diff --git a/v0.3.4.5/plugins/language_selection/unittests.py b/v0.3.4.5/plugins/language_selection/unittests.py new file mode 100644 index 0000000..ed96bfd --- /dev/null +++ b/v0.3.4.5/plugins/language_selection/unittests.py @@ -0,0 +1,46 @@ +# +# Copyright 2006 sense.lab e.V. +# +# This file is part of the CryptoBox. +# +# The CryptoBox 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 CryptoBox 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 the CryptoBox; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +__revision__ = "$Id" + +from cryptobox.tests.base import WebInterfaceTestClass + +class unittests(WebInterfaceTestClass): + + def test_read_form(self): + """Check if the 'language_selection' plugin works. + """ + url = self.url + "language_selection?weblang=en" + self.register_auth(url) + self.cmd.go(url) + self.cmd.find('Choose your tongue') + + + def test_check_language_list(self): + """Check the list of available languages. + """ + url = self.url + "language_selection?weblang=en" + self.register_auth(url) + self.cmd.go(url) + self.cmd.find(r'Data.Status.Plugins.language_selection=(.*)$', "m") + langs = self.locals["__match__"].split(":") + self.assertTrue(len(langs)>1) + self.assertTrue(langs[0] == "en") + diff --git a/v0.3.4.5/plugins/logs/intl/cryptobox-server-feature-logs.pot b/v0.3.4.5/plugins/logs/intl/cryptobox-server-feature-logs.pot new file mode 100644 index 0000000..130bf43 --- /dev/null +++ b/v0.3.4.5/plugins/logs/intl/cryptobox-server-feature-logs.pot @@ -0,0 +1,59 @@ +#: Name +msgid "Event log" +msgstr "" + +#: Text.ShowAll +msgid "Show all messages" +msgstr "" + +#: Text.AtLeastWarnings +msgid "Show warnings and errors" +msgstr "" + +#: Text.OnlyErrors +msgid "Show errors only" +msgstr "" + +#: Text.DownloadLogFile +msgid "Download complete log" +msgstr "" + +#: Text.AgeOfEvent +msgid "Time passed" +msgstr "" + +#: Text.EventText +msgid "Description" +msgstr "" + +#: Text.TimeUnits.Days +msgid "days" +msgstr "" + +#: Text.TimeUnits.Hours +msgid "hours" +msgstr "" + +#: Text.TimeUnits.Minutes +msgid "minutes" +msgstr "" + +#: Text.TimeUnits.Seconds +msgid "seconds" +msgstr "" + +#: Help.EventLog +msgid "Here you can see the event log of the CryptoBox. Every message belongs to one of the following groups: information/warning/error as represented by the symbol in the leftmost column. You may choose to see all or only some selected messages. If you encounter any problems with the CryptoBox then you should send the most recent warnings and errors besides a detailed description to info@cryptobox.org." +msgstr "" + +#: AdviceMessage.EmptyLog.Text +msgid "There are no messages available." +msgstr "" + +#: AdviceMessage.NoLogFileConfigured.Title +msgid "No log file configured" +msgstr "" + +#: AdviceMessage.NoLogFileConfigured.Text +msgid "The CryptoBox is not configured to log events to a file. Thus it is not possible to review log events." +msgstr "" diff --git a/v0.3.4.5/plugins/logs/intl/cs/cryptobox-server-feature-logs.po b/v0.3.4.5/plugins/logs/intl/cs/cryptobox-server-feature-logs.po new file mode 100644 index 0000000..8aedc3f --- /dev/null +++ b/v0.3.4.5/plugins/logs/intl/cs/cryptobox-server-feature-logs.po @@ -0,0 +1,74 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-07 09:21+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Event log" +msgstr "" + +#: Text.ShowAll +msgid "Show all messages" +msgstr "" + +#: Text.AtLeastWarnings +msgid "Show warnings and errors" +msgstr "" + +#: Text.OnlyErrors +msgid "Show errors only" +msgstr "" + +#: Text.DownloadLogFile +msgid "Download complete log" +msgstr "" + +#: Text.AgeOfEvent +msgid "Time passed" +msgstr "" + +#: Text.EventText +msgid "Description" +msgstr "" + +#: Text.TimeUnits.Days +msgid "days" +msgstr "" + +#: Text.TimeUnits.Hours +msgid "hours" +msgstr "" + +#: Text.TimeUnits.Minutes +msgid "minutes" +msgstr "" + +#: Text.TimeUnits.Seconds +msgid "seconds" +msgstr "" + +#: Help.EventLog +msgid "Here you can see the event log of the CryptoBox. Every message belongs to one of the following groups: information/warning/error as represented by the symbol in the leftmost column. You may choose to see all or only some selected messages. If you encounter any problems with the CryptoBox then you should send the most recent warnings and errors besides a detailed description to info@cryptobox.org." +msgstr "" + +#: AdviceMessage.EmptyLog.Text +msgid "There are no messages available." +msgstr "" + +#: AdviceMessage.NoLogFileConfigured.Title +msgid "No log file configured" +msgstr "" + +#: AdviceMessage.NoLogFileConfigured.Text +msgid "The CryptoBox is not configured to log events to a file. Thus it is not possible to review log events." +msgstr "" diff --git a/v0.3.4.5/plugins/logs/intl/da/cryptobox-server-feature-logs.po b/v0.3.4.5/plugins/logs/intl/da/cryptobox-server-feature-logs.po new file mode 100644 index 0000000..8aedc3f --- /dev/null +++ b/v0.3.4.5/plugins/logs/intl/da/cryptobox-server-feature-logs.po @@ -0,0 +1,74 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-07 09:21+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Event log" +msgstr "" + +#: Text.ShowAll +msgid "Show all messages" +msgstr "" + +#: Text.AtLeastWarnings +msgid "Show warnings and errors" +msgstr "" + +#: Text.OnlyErrors +msgid "Show errors only" +msgstr "" + +#: Text.DownloadLogFile +msgid "Download complete log" +msgstr "" + +#: Text.AgeOfEvent +msgid "Time passed" +msgstr "" + +#: Text.EventText +msgid "Description" +msgstr "" + +#: Text.TimeUnits.Days +msgid "days" +msgstr "" + +#: Text.TimeUnits.Hours +msgid "hours" +msgstr "" + +#: Text.TimeUnits.Minutes +msgid "minutes" +msgstr "" + +#: Text.TimeUnits.Seconds +msgid "seconds" +msgstr "" + +#: Help.EventLog +msgid "Here you can see the event log of the CryptoBox. Every message belongs to one of the following groups: information/warning/error as represented by the symbol in the leftmost column. You may choose to see all or only some selected messages. If you encounter any problems with the CryptoBox then you should send the most recent warnings and errors besides a detailed description to info@cryptobox.org." +msgstr "" + +#: AdviceMessage.EmptyLog.Text +msgid "There are no messages available." +msgstr "" + +#: AdviceMessage.NoLogFileConfigured.Title +msgid "No log file configured" +msgstr "" + +#: AdviceMessage.NoLogFileConfigured.Text +msgid "The CryptoBox is not configured to log events to a file. Thus it is not possible to review log events." +msgstr "" diff --git a/v0.3.4.5/plugins/logs/intl/de/cryptobox-server-feature-logs.po b/v0.3.4.5/plugins/logs/intl/de/cryptobox-server-feature-logs.po new file mode 100644 index 0000000..73167e1 --- /dev/null +++ b/v0.3.4.5/plugins/logs/intl/de/cryptobox-server-feature-logs.po @@ -0,0 +1,73 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-07 09:21+0100\n" +"PO-Revision-Date: 2007-02-19 02:55+0100\n" +"Last-Translator: Lars Kruse \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Event log" +msgstr "Protokoll" + +#: Text.ShowAll +msgid "Show all messages" +msgstr "Zeige alle Ereignisse" + +#: Text.AtLeastWarnings +msgid "Show warnings and errors" +msgstr "Zeige Warnungen und Fehler" + +#: Text.OnlyErrors +msgid "Show errors only" +msgstr "Zeige nur Fehler" + +#: Text.DownloadLogFile +msgid "Download complete log" +msgstr "Speichere das vollständige Ereignis-Protokoll" + +#: Text.AgeOfEvent +msgid "Time passed" +msgstr "vergangene Zeit" + +#: Text.EventText +msgid "Description" +msgstr "Beschreibung" + +#: Text.TimeUnits.Days +msgid "days" +msgstr "Tage" + +#: Text.TimeUnits.Hours +msgid "hours" +msgstr "Stunden" + +#: Text.TimeUnits.Minutes +msgid "minutes" +msgstr "Minuten" + +#: Text.TimeUnits.Seconds +msgid "seconds" +msgstr "Sekunden" + +#: Help.EventLog +msgid "Here you can see the event log of the CryptoBox. Every message belongs to one of the following groups: information/warning/error as represented by the symbol in the leftmost column. You may choose to see all or only some selected messages. If you encounter any problems with the CryptoBox then you should send the most recent warnings and errors besides a detailed description to info@cryptobox.org." +msgstr "Hier kannst du das Ereignis-Protokoll der CryptoBox verfolgen. Jedes Ereignis gehört zu einer der folgenden Gruppen: Information / Warnung / Fehler - sie werden durch die Symbole in der linke Spalte repräsentiert. Du kannst wählen, ob (1) alle Ereignisse, (2) Warnungen und Fehler oder (3) nur Fehler angezeigt werden sollen. Falls du irgendwelche Probleme mit der CryptoBox hast, dann sende bitte die aktuellsten Warnungen und Fehler inklusive einer detaillierten Beschreibung des Problems an info@cryptobox.org." + +#: AdviceMessage.EmptyLog.Text +msgid "There are no messages available." +msgstr "Es sind keine Ereignisse vorhanden." + +#: AdviceMessage.NoLogFileConfigured.Title +msgid "No log file configured" +msgstr "Keine Protokoll-Datei konfiguriert" + +#: AdviceMessage.NoLogFileConfigured.Text +msgid "The CryptoBox is not configured to log events to a file. Thus it is not possible to review log events." +msgstr "Die CryptoBox ist nicht konfiguriert, um das Ereignis-Protokoll in einer Datei abzuspeichern. Deshalb ist es nicht möglich, das Ereignis-Protokoll nachzuvollziehen." diff --git a/v0.3.4.5/plugins/logs/intl/en/cryptobox-server-feature-logs.po b/v0.3.4.5/plugins/logs/intl/en/cryptobox-server-feature-logs.po new file mode 100644 index 0000000..618dd54 --- /dev/null +++ b/v0.3.4.5/plugins/logs/intl/en/cryptobox-server-feature-logs.po @@ -0,0 +1,60 @@ +#: Name +msgid "Event log" +msgstr "Event log" + +#: Text.ShowAll +msgid "Show all messages" +msgstr "Show all messages" + +#: Text.AtLeastWarnings +msgid "Show warnings and errors" +msgstr "Show warnings and errors" + +#: Text.OnlyErrors +msgid "Show errors only" +msgstr "Show errors only" + +#: Text.DownloadLogFile +msgid "Download complete log" +msgstr "Download complete log" + +#: Text.AgeOfEvent +msgid "Time passed" +msgstr "Time passed" + +#: Text.EventText +msgid "Description" +msgstr "Description" + +#: Text.TimeUnits.Days +msgid "days" +msgstr "days" + +#: Text.TimeUnits.Hours +msgid "hours" +msgstr "hours" + +#: Text.TimeUnits.Minutes +msgid "minutes" +msgstr "minutes" + +#: Text.TimeUnits.Seconds +msgid "seconds" +msgstr "seconds" + +#: Help.EventLog +#, fuzzy +msgid "Here you can see the event log of the CryptoBox. Every message belongs to one of the following groups: information/warning/error as represented by the symbol in the leftmost column. You may choose to see all or only some selected messages. If you encounter any problems with the CryptoBox then you should send the most recent warnings and errors besides a detailed description to info@cryptobox.org." +msgstr "Here you can see the event log of the CryptoBox. Every message belongs to one of the following groups: information/warning/error as represented by the symbol in the leftmost column. You may choose to see all or only some selected messages. If you encounter any problems with the CryptoBox then you should send the most recent warnings and errors besides a detailed description to info@cryptobox.org." + +#: AdviceMessage.EmptyLog.Text +msgid "There are no messages available." +msgstr "There are no messages available." + +#: AdviceMessage.NoLogFileConfigured.Title +msgid "No log file configured" +msgstr "No log file configured" + +#: AdviceMessage.NoLogFileConfigured.Text +msgid "The CryptoBox is not configured to log events to a file. Thus it is not possible to review log events." +msgstr "The CryptoBox is not configured to log events to a file. Thus it is not possible to review log events." diff --git a/v0.3.4.5/plugins/logs/intl/es/cryptobox-server-feature-logs.po b/v0.3.4.5/plugins/logs/intl/es/cryptobox-server-feature-logs.po new file mode 100644 index 0000000..f60cd60 --- /dev/null +++ b/v0.3.4.5/plugins/logs/intl/es/cryptobox-server-feature-logs.po @@ -0,0 +1,73 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-07 09:21+0100\n" +"PO-Revision-Date: 2007-01-30 19:40+0100\n" +"Last-Translator: kessel \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Event log" +msgstr "" + +#: Text.ShowAll +msgid "Show all messages" +msgstr "" + +#: Text.AtLeastWarnings +msgid "Show warnings and errors" +msgstr "" + +#: Text.OnlyErrors +msgid "Show errors only" +msgstr "" + +#: Text.DownloadLogFile +msgid "Download complete log" +msgstr "" + +#: Text.AgeOfEvent +msgid "Time passed" +msgstr "" + +#: Text.EventText +msgid "Description" +msgstr "" + +#: Text.TimeUnits.Days +msgid "days" +msgstr "días" + +#: Text.TimeUnits.Hours +msgid "hours" +msgstr "horas" + +#: Text.TimeUnits.Minutes +msgid "minutes" +msgstr "minuto" + +#: Text.TimeUnits.Seconds +msgid "seconds" +msgstr "segundo" + +#: Help.EventLog +msgid "Here you can see the event log of the CryptoBox. Every message belongs to one of the following groups: information/warning/error as represented by the symbol in the leftmost column. You may choose to see all or only some selected messages. If you encounter any problems with the CryptoBox then you should send the most recent warnings and errors besides a detailed description to info@cryptobox.org." +msgstr "" + +#: AdviceMessage.EmptyLog.Text +msgid "There are no messages available." +msgstr "" + +#: AdviceMessage.NoLogFileConfigured.Title +msgid "No log file configured" +msgstr "" + +#: AdviceMessage.NoLogFileConfigured.Text +msgid "The CryptoBox is not configured to log events to a file. Thus it is not possible to review log events." +msgstr "" diff --git a/v0.3.4.5/plugins/logs/intl/fi/cryptobox-server-feature-logs.po b/v0.3.4.5/plugins/logs/intl/fi/cryptobox-server-feature-logs.po new file mode 100644 index 0000000..8aedc3f --- /dev/null +++ b/v0.3.4.5/plugins/logs/intl/fi/cryptobox-server-feature-logs.po @@ -0,0 +1,74 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-07 09:21+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Event log" +msgstr "" + +#: Text.ShowAll +msgid "Show all messages" +msgstr "" + +#: Text.AtLeastWarnings +msgid "Show warnings and errors" +msgstr "" + +#: Text.OnlyErrors +msgid "Show errors only" +msgstr "" + +#: Text.DownloadLogFile +msgid "Download complete log" +msgstr "" + +#: Text.AgeOfEvent +msgid "Time passed" +msgstr "" + +#: Text.EventText +msgid "Description" +msgstr "" + +#: Text.TimeUnits.Days +msgid "days" +msgstr "" + +#: Text.TimeUnits.Hours +msgid "hours" +msgstr "" + +#: Text.TimeUnits.Minutes +msgid "minutes" +msgstr "" + +#: Text.TimeUnits.Seconds +msgid "seconds" +msgstr "" + +#: Help.EventLog +msgid "Here you can see the event log of the CryptoBox. Every message belongs to one of the following groups: information/warning/error as represented by the symbol in the leftmost column. You may choose to see all or only some selected messages. If you encounter any problems with the CryptoBox then you should send the most recent warnings and errors besides a detailed description to info@cryptobox.org." +msgstr "" + +#: AdviceMessage.EmptyLog.Text +msgid "There are no messages available." +msgstr "" + +#: AdviceMessage.NoLogFileConfigured.Title +msgid "No log file configured" +msgstr "" + +#: AdviceMessage.NoLogFileConfigured.Text +msgid "The CryptoBox is not configured to log events to a file. Thus it is not possible to review log events." +msgstr "" diff --git a/v0.3.4.5/plugins/logs/intl/fr/cryptobox-server-feature-logs.po b/v0.3.4.5/plugins/logs/intl/fr/cryptobox-server-feature-logs.po new file mode 100644 index 0000000..8aedc3f --- /dev/null +++ b/v0.3.4.5/plugins/logs/intl/fr/cryptobox-server-feature-logs.po @@ -0,0 +1,74 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-07 09:21+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Event log" +msgstr "" + +#: Text.ShowAll +msgid "Show all messages" +msgstr "" + +#: Text.AtLeastWarnings +msgid "Show warnings and errors" +msgstr "" + +#: Text.OnlyErrors +msgid "Show errors only" +msgstr "" + +#: Text.DownloadLogFile +msgid "Download complete log" +msgstr "" + +#: Text.AgeOfEvent +msgid "Time passed" +msgstr "" + +#: Text.EventText +msgid "Description" +msgstr "" + +#: Text.TimeUnits.Days +msgid "days" +msgstr "" + +#: Text.TimeUnits.Hours +msgid "hours" +msgstr "" + +#: Text.TimeUnits.Minutes +msgid "minutes" +msgstr "" + +#: Text.TimeUnits.Seconds +msgid "seconds" +msgstr "" + +#: Help.EventLog +msgid "Here you can see the event log of the CryptoBox. Every message belongs to one of the following groups: information/warning/error as represented by the symbol in the leftmost column. You may choose to see all or only some selected messages. If you encounter any problems with the CryptoBox then you should send the most recent warnings and errors besides a detailed description to info@cryptobox.org." +msgstr "" + +#: AdviceMessage.EmptyLog.Text +msgid "There are no messages available." +msgstr "" + +#: AdviceMessage.NoLogFileConfigured.Title +msgid "No log file configured" +msgstr "" + +#: AdviceMessage.NoLogFileConfigured.Text +msgid "The CryptoBox is not configured to log events to a file. Thus it is not possible to review log events." +msgstr "" diff --git a/v0.3.4.5/plugins/logs/intl/hu/cryptobox-server-feature-logs.po b/v0.3.4.5/plugins/logs/intl/hu/cryptobox-server-feature-logs.po new file mode 100644 index 0000000..8aedc3f --- /dev/null +++ b/v0.3.4.5/plugins/logs/intl/hu/cryptobox-server-feature-logs.po @@ -0,0 +1,74 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-07 09:21+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Event log" +msgstr "" + +#: Text.ShowAll +msgid "Show all messages" +msgstr "" + +#: Text.AtLeastWarnings +msgid "Show warnings and errors" +msgstr "" + +#: Text.OnlyErrors +msgid "Show errors only" +msgstr "" + +#: Text.DownloadLogFile +msgid "Download complete log" +msgstr "" + +#: Text.AgeOfEvent +msgid "Time passed" +msgstr "" + +#: Text.EventText +msgid "Description" +msgstr "" + +#: Text.TimeUnits.Days +msgid "days" +msgstr "" + +#: Text.TimeUnits.Hours +msgid "hours" +msgstr "" + +#: Text.TimeUnits.Minutes +msgid "minutes" +msgstr "" + +#: Text.TimeUnits.Seconds +msgid "seconds" +msgstr "" + +#: Help.EventLog +msgid "Here you can see the event log of the CryptoBox. Every message belongs to one of the following groups: information/warning/error as represented by the symbol in the leftmost column. You may choose to see all or only some selected messages. If you encounter any problems with the CryptoBox then you should send the most recent warnings and errors besides a detailed description to info@cryptobox.org." +msgstr "" + +#: AdviceMessage.EmptyLog.Text +msgid "There are no messages available." +msgstr "" + +#: AdviceMessage.NoLogFileConfigured.Title +msgid "No log file configured" +msgstr "" + +#: AdviceMessage.NoLogFileConfigured.Text +msgid "The CryptoBox is not configured to log events to a file. Thus it is not possible to review log events." +msgstr "" diff --git a/v0.3.4.5/plugins/logs/intl/it/cryptobox-server-feature-logs.po b/v0.3.4.5/plugins/logs/intl/it/cryptobox-server-feature-logs.po new file mode 100644 index 0000000..5bc34e5 --- /dev/null +++ b/v0.3.4.5/plugins/logs/intl/it/cryptobox-server-feature-logs.po @@ -0,0 +1,73 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-07 09:21+0100\n" +"PO-Revision-Date: 2007-03-16 12:43+0100\n" +"Last-Translator: Fabrizio Tarizzo \n" +"Language-Team: Italian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Event log" +msgstr "Registro degli eventi" + +#: Text.ShowAll +msgid "Show all messages" +msgstr "Mostra tutti i messaggi" + +#: Text.AtLeastWarnings +msgid "Show warnings and errors" +msgstr "Mostra gli avvisi e gli errori" + +#: Text.OnlyErrors +msgid "Show errors only" +msgstr "Mostra solo gli errori" + +#: Text.DownloadLogFile +msgid "Download complete log" +msgstr "Scarica tutto il registro" + +#: Text.AgeOfEvent +msgid "Time passed" +msgstr "Tempo trascorso" + +#: Text.EventText +msgid "Description" +msgstr "Descrizione" + +#: Text.TimeUnits.Days +msgid "days" +msgstr "giorni" + +#: Text.TimeUnits.Hours +msgid "hours" +msgstr "ore" + +#: Text.TimeUnits.Minutes +msgid "minutes" +msgstr "minuti" + +#: Text.TimeUnits.Seconds +msgid "seconds" +msgstr "secondi" + +#: Help.EventLog +msgid "Here you can see the event log of the CryptoBox. Every message belongs to one of the following groups: information/warning/error as represented by the symbol in the leftmost column. You may choose to see all or only some selected messages. If you encounter any problems with the CryptoBox then you should send the most recent warnings and errors besides a detailed description to info@cryptobox.org." +msgstr "È possibile consultare il registro degli eventi della CryptoBox. Ogni messaggio appartiene a uno dei seguenti gruppi: informativo/avvertimento/errore, rappresentato dal simbolo nella colonna a sinistra. È possibile scegliere se mostrare tutti i messaggi o solo quelli appartenenti ai gruppi selezionati. Se si incorre in un problema nell'utilizzo della CryptoBox inviare gli avvertimenti e gli errori più recenti, insieme alla dettagliata descrizione del problema riscontrato, all'indirizzo info@cryptobox.org." + +#: AdviceMessage.EmptyLog.Text +msgid "There are no messages available." +msgstr "Non ci sono messaggi disponibili." + +#: AdviceMessage.NoLogFileConfigured.Title +msgid "No log file configured" +msgstr "Nessun file di registro configurato" + +#: AdviceMessage.NoLogFileConfigured.Text +msgid "The CryptoBox is not configured to log events to a file. Thus it is not possible to review log events." +msgstr "La CryptoBox non è configurata per registrare gli eventi in un file. Non è quindi possibile riesaminare il registro degli eventi." diff --git a/v0.3.4.5/plugins/logs/intl/ja/cryptobox-server-feature-logs.po b/v0.3.4.5/plugins/logs/intl/ja/cryptobox-server-feature-logs.po new file mode 100644 index 0000000..b57d252 --- /dev/null +++ b/v0.3.4.5/plugins/logs/intl/ja/cryptobox-server-feature-logs.po @@ -0,0 +1,73 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-07 09:21+0100\n" +"PO-Revision-Date: 2007-02-23 12:51+0100\n" +"Last-Translator: kinneko \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Event log" +msgstr "イベントログ" + +#: Text.ShowAll +msgid "Show all messages" +msgstr "すべてのメッセージを表示する" + +#: Text.AtLeastWarnings +msgid "Show warnings and errors" +msgstr "エラーと警告メッセージを表示する" + +#: Text.OnlyErrors +msgid "Show errors only" +msgstr "エラーメッセージだけを表示する" + +#: Text.DownloadLogFile +msgid "Download complete log" +msgstr "完全なログをダウンロードする" + +#: Text.AgeOfEvent +msgid "Time passed" +msgstr "経過時間" + +#: Text.EventText +msgid "Description" +msgstr "詳細" + +#: Text.TimeUnits.Days +msgid "days" +msgstr "日付" + +#: Text.TimeUnits.Hours +msgid "hours" +msgstr "時間" + +#: Text.TimeUnits.Minutes +msgid "minutes" +msgstr "分" + +#: Text.TimeUnits.Seconds +msgid "seconds" +msgstr "秒" + +#: Help.EventLog +msgid "Here you can see the event log of the CryptoBox. Every message belongs to one of the following groups: information/warning/error as represented by the symbol in the leftmost column. You may choose to see all or only some selected messages. If you encounter any problems with the CryptoBox then you should send the most recent warnings and errors besides a detailed description to info@cryptobox.org." +msgstr "ここでは、CryptoBoxのイベントログを見ることができます。メッセージは、以下のグループのうちの1つに属し、左端のマークで判別します:インフォメーション/警告/エラー。メッセージは、すべてか選択した項目だけを表示できます。もし、CryptoBoxに問題を見つけたら、info@cryptobox.orgにエラーと警告のログとともに、詳細な状況説明を送ってください。" + +#: AdviceMessage.EmptyLog.Text +msgid "There are no messages available." +msgstr "メッセージがありません。" + +#: AdviceMessage.NoLogFileConfigured.Title +msgid "No log file configured" +msgstr "ログファイルが設定されていません" + +#: AdviceMessage.NoLogFileConfigured.Text +msgid "The CryptoBox is not configured to log events to a file. Thus it is not possible to review log events." +msgstr "くりぷとぼっくは、ログイベントをファイルに保存するように設定されていません。そのため、ログイベントを見ることができません。" diff --git a/v0.3.4.5/plugins/logs/intl/nl/cryptobox-server-feature-logs.po b/v0.3.4.5/plugins/logs/intl/nl/cryptobox-server-feature-logs.po new file mode 100644 index 0000000..8aedc3f --- /dev/null +++ b/v0.3.4.5/plugins/logs/intl/nl/cryptobox-server-feature-logs.po @@ -0,0 +1,74 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-07 09:21+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Event log" +msgstr "" + +#: Text.ShowAll +msgid "Show all messages" +msgstr "" + +#: Text.AtLeastWarnings +msgid "Show warnings and errors" +msgstr "" + +#: Text.OnlyErrors +msgid "Show errors only" +msgstr "" + +#: Text.DownloadLogFile +msgid "Download complete log" +msgstr "" + +#: Text.AgeOfEvent +msgid "Time passed" +msgstr "" + +#: Text.EventText +msgid "Description" +msgstr "" + +#: Text.TimeUnits.Days +msgid "days" +msgstr "" + +#: Text.TimeUnits.Hours +msgid "hours" +msgstr "" + +#: Text.TimeUnits.Minutes +msgid "minutes" +msgstr "" + +#: Text.TimeUnits.Seconds +msgid "seconds" +msgstr "" + +#: Help.EventLog +msgid "Here you can see the event log of the CryptoBox. Every message belongs to one of the following groups: information/warning/error as represented by the symbol in the leftmost column. You may choose to see all or only some selected messages. If you encounter any problems with the CryptoBox then you should send the most recent warnings and errors besides a detailed description to info@cryptobox.org." +msgstr "" + +#: AdviceMessage.EmptyLog.Text +msgid "There are no messages available." +msgstr "" + +#: AdviceMessage.NoLogFileConfigured.Title +msgid "No log file configured" +msgstr "" + +#: AdviceMessage.NoLogFileConfigured.Text +msgid "The CryptoBox is not configured to log events to a file. Thus it is not possible to review log events." +msgstr "" diff --git a/v0.3.4.5/plugins/logs/intl/pl/cryptobox-server-feature-logs.po b/v0.3.4.5/plugins/logs/intl/pl/cryptobox-server-feature-logs.po new file mode 100644 index 0000000..c9e4315 --- /dev/null +++ b/v0.3.4.5/plugins/logs/intl/pl/cryptobox-server-feature-logs.po @@ -0,0 +1,73 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-04-01 15:52+0200\n" +"PO-Revision-Date: 2007-03-29 09:06+0200\n" +"Last-Translator: Andrzej S. Kaznowski \n" +"Language-Team: POLSKI \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Event log" +msgstr "Rejestr wydarzeń" + +#: Text.ShowAll +msgid "Show all messages" +msgstr "Pokazuj wszystkie komunikaty" + +#: Text.AtLeastWarnings +msgid "Show warnings and errors" +msgstr "Pokazuj błędy i ostrzeżenia" + +#: Text.OnlyErrors +msgid "Show errors only" +msgstr "Pokazuj wyłącznie błędy" + +#: Text.DownloadLogFile +msgid "Download complete log" +msgstr "Pobierz cały rejestr" + +#: Text.AgeOfEvent +msgid "Time passed" +msgstr "Upłynęło" + +#: Text.EventText +msgid "Description" +msgstr "Opis" + +#: Text.TimeUnits.Days +msgid "days" +msgstr "dni" + +#: Text.TimeUnits.Hours +msgid "hours" +msgstr "godziny" + +#: Text.TimeUnits.Minutes +msgid "minutes" +msgstr "minuty" + +#: Text.TimeUnits.Seconds +msgid "seconds" +msgstr "sekundy" + +#: Help.EventLog +msgid "Here you can see the event log of the CryptoBox. Every message belongs to one of the following groups: information/warning/error as represented by the symbol in the leftmost column. You may choose to see all or only some selected messages. If you encounter any problems with the CryptoBox then you should send the most recent warnings and errors besides a detailed description to info@cryptobox.org." +msgstr "Tutaj możesz sprawdzić rejstr wydarzeń CryptoBox. Każda wiadomość należy do jednej z następujących grup: powiadomienie/ostrzeżenie/błąd jak przedstawiono na symbolach w najdalszej kolumnie po lewej stronie. Możesz obejrzeć wszystkie lub tylko niektóre wybrane wiadomości. Jeśli zauważysz jakiś problem z CryptoBox, wyślij najświerzsze ostrzeżenia i błędy wraz ze szczegółowym opisem do info@cryptobox.org." + +#: AdviceMessage.EmptyLog.Text +msgid "There are no messages available." +msgstr "Brak komunikatów." + +#: AdviceMessage.NoLogFileConfigured.Title +msgid "No log file configured" +msgstr "Brak konfiguracji rejestru wydarzeń" + +#: AdviceMessage.NoLogFileConfigured.Text +msgid "The CryptoBox is not configured to log events to a file. Thus it is not possible to review log events." +msgstr "CryptoBox nie jest skonfigurowany, aby rejestrować wydarzenia w pliku. Z tego powodu nie można przeglądać rejestru wydarzeń." diff --git a/v0.3.4.5/plugins/logs/intl/pt/cryptobox-server-feature-logs.po b/v0.3.4.5/plugins/logs/intl/pt/cryptobox-server-feature-logs.po new file mode 100644 index 0000000..8aedc3f --- /dev/null +++ b/v0.3.4.5/plugins/logs/intl/pt/cryptobox-server-feature-logs.po @@ -0,0 +1,74 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-07 09:21+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Event log" +msgstr "" + +#: Text.ShowAll +msgid "Show all messages" +msgstr "" + +#: Text.AtLeastWarnings +msgid "Show warnings and errors" +msgstr "" + +#: Text.OnlyErrors +msgid "Show errors only" +msgstr "" + +#: Text.DownloadLogFile +msgid "Download complete log" +msgstr "" + +#: Text.AgeOfEvent +msgid "Time passed" +msgstr "" + +#: Text.EventText +msgid "Description" +msgstr "" + +#: Text.TimeUnits.Days +msgid "days" +msgstr "" + +#: Text.TimeUnits.Hours +msgid "hours" +msgstr "" + +#: Text.TimeUnits.Minutes +msgid "minutes" +msgstr "" + +#: Text.TimeUnits.Seconds +msgid "seconds" +msgstr "" + +#: Help.EventLog +msgid "Here you can see the event log of the CryptoBox. Every message belongs to one of the following groups: information/warning/error as represented by the symbol in the leftmost column. You may choose to see all or only some selected messages. If you encounter any problems with the CryptoBox then you should send the most recent warnings and errors besides a detailed description to info@cryptobox.org." +msgstr "" + +#: AdviceMessage.EmptyLog.Text +msgid "There are no messages available." +msgstr "" + +#: AdviceMessage.NoLogFileConfigured.Title +msgid "No log file configured" +msgstr "" + +#: AdviceMessage.NoLogFileConfigured.Text +msgid "The CryptoBox is not configured to log events to a file. Thus it is not possible to review log events." +msgstr "" diff --git a/v0.3.4.5/plugins/logs/intl/ru/cryptobox-server-feature-logs.po b/v0.3.4.5/plugins/logs/intl/ru/cryptobox-server-feature-logs.po new file mode 100644 index 0000000..8aedc3f --- /dev/null +++ b/v0.3.4.5/plugins/logs/intl/ru/cryptobox-server-feature-logs.po @@ -0,0 +1,74 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-07 09:21+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Event log" +msgstr "" + +#: Text.ShowAll +msgid "Show all messages" +msgstr "" + +#: Text.AtLeastWarnings +msgid "Show warnings and errors" +msgstr "" + +#: Text.OnlyErrors +msgid "Show errors only" +msgstr "" + +#: Text.DownloadLogFile +msgid "Download complete log" +msgstr "" + +#: Text.AgeOfEvent +msgid "Time passed" +msgstr "" + +#: Text.EventText +msgid "Description" +msgstr "" + +#: Text.TimeUnits.Days +msgid "days" +msgstr "" + +#: Text.TimeUnits.Hours +msgid "hours" +msgstr "" + +#: Text.TimeUnits.Minutes +msgid "minutes" +msgstr "" + +#: Text.TimeUnits.Seconds +msgid "seconds" +msgstr "" + +#: Help.EventLog +msgid "Here you can see the event log of the CryptoBox. Every message belongs to one of the following groups: information/warning/error as represented by the symbol in the leftmost column. You may choose to see all or only some selected messages. If you encounter any problems with the CryptoBox then you should send the most recent warnings and errors besides a detailed description to info@cryptobox.org." +msgstr "" + +#: AdviceMessage.EmptyLog.Text +msgid "There are no messages available." +msgstr "" + +#: AdviceMessage.NoLogFileConfigured.Title +msgid "No log file configured" +msgstr "" + +#: AdviceMessage.NoLogFileConfigured.Text +msgid "The CryptoBox is not configured to log events to a file. Thus it is not possible to review log events." +msgstr "" diff --git a/v0.3.4.5/plugins/logs/intl/sl/cryptobox-server-feature-logs.po b/v0.3.4.5/plugins/logs/intl/sl/cryptobox-server-feature-logs.po new file mode 100644 index 0000000..1bf652a --- /dev/null +++ b/v0.3.4.5/plugins/logs/intl/sl/cryptobox-server-feature-logs.po @@ -0,0 +1,73 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-07 09:21+0100\n" +"PO-Revision-Date: 2007-02-16 14:25+0100\n" +"Last-Translator: tenzin \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Event log" +msgstr "Dnevnik dogodkov" + +#: Text.ShowAll +msgid "Show all messages" +msgstr "Prikaži vsa sporočila" + +#: Text.AtLeastWarnings +msgid "Show warnings and errors" +msgstr "Prikaži opozorila in napake" + +#: Text.OnlyErrors +msgid "Show errors only" +msgstr "Prikaži samo napake" + +#: Text.DownloadLogFile +msgid "Download complete log" +msgstr "Download complete log" + +#: Text.AgeOfEvent +msgid "Time passed" +msgstr "Čas je potekel" + +#: Text.EventText +msgid "Description" +msgstr "Opis" + +#: Text.TimeUnits.Days +msgid "days" +msgstr "dnevi" + +#: Text.TimeUnits.Hours +msgid "hours" +msgstr "ure" + +#: Text.TimeUnits.Minutes +msgid "minutes" +msgstr "minute" + +#: Text.TimeUnits.Seconds +msgid "seconds" +msgstr "sekunde" + +#: Help.EventLog +msgid "Here you can see the event log of the CryptoBox. Every message belongs to one of the following groups: information/warning/error as represented by the symbol in the leftmost column. You may choose to see all or only some selected messages. If you encounter any problems with the CryptoBox then you should send the most recent warnings and errors besides a detailed description to info@cryptobox.org." +msgstr "Tu lahko vidite dnevnik dogodkov Cryptobox. Vsako sporočilo pripada eni izmed sledečih skupi: informacije/opozorila/napake kot je prikazano s simbolom v skrajno levem stolpiču. Lahko izberete gledavši vse ali le izbrana sporočila. V kolikor naletite na kakršenkoli problem v zvezi s Cryptoboxom, prosimo pošljite poročilo z vsemi opozorili, napakami s podrobnim opisom na:info@cryptobox.org." + +#: AdviceMessage.EmptyLog.Text +msgid "There are no messages available." +msgstr "Na razpolago ni nobenih sporočil." + +#: AdviceMessage.NoLogFileConfigured.Title +msgid "No log file configured" +msgstr "dnevnik ni konfiguriran" + +#: AdviceMessage.NoLogFileConfigured.Text +msgid "The CryptoBox is not configured to log events to a file. Thus it is not possible to review log events." +msgstr "The CryptoBox ni konfiguriran za vodenje dnevnika dogodkov. Zatorej pregled dnevnika dogodkov ni možen." diff --git a/v0.3.4.5/plugins/logs/intl/sv/cryptobox-server-feature-logs.po b/v0.3.4.5/plugins/logs/intl/sv/cryptobox-server-feature-logs.po new file mode 100644 index 0000000..8aedc3f --- /dev/null +++ b/v0.3.4.5/plugins/logs/intl/sv/cryptobox-server-feature-logs.po @@ -0,0 +1,74 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-07 09:21+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Event log" +msgstr "" + +#: Text.ShowAll +msgid "Show all messages" +msgstr "" + +#: Text.AtLeastWarnings +msgid "Show warnings and errors" +msgstr "" + +#: Text.OnlyErrors +msgid "Show errors only" +msgstr "" + +#: Text.DownloadLogFile +msgid "Download complete log" +msgstr "" + +#: Text.AgeOfEvent +msgid "Time passed" +msgstr "" + +#: Text.EventText +msgid "Description" +msgstr "" + +#: Text.TimeUnits.Days +msgid "days" +msgstr "" + +#: Text.TimeUnits.Hours +msgid "hours" +msgstr "" + +#: Text.TimeUnits.Minutes +msgid "minutes" +msgstr "" + +#: Text.TimeUnits.Seconds +msgid "seconds" +msgstr "" + +#: Help.EventLog +msgid "Here you can see the event log of the CryptoBox. Every message belongs to one of the following groups: information/warning/error as represented by the symbol in the leftmost column. You may choose to see all or only some selected messages. If you encounter any problems with the CryptoBox then you should send the most recent warnings and errors besides a detailed description to info@cryptobox.org." +msgstr "" + +#: AdviceMessage.EmptyLog.Text +msgid "There are no messages available." +msgstr "" + +#: AdviceMessage.NoLogFileConfigured.Title +msgid "No log file configured" +msgstr "" + +#: AdviceMessage.NoLogFileConfigured.Text +msgid "The CryptoBox is not configured to log events to a file. Thus it is not possible to review log events." +msgstr "" diff --git a/v0.3.4.5/plugins/logs/intl/ur/cryptobox-server-feature-logs.po b/v0.3.4.5/plugins/logs/intl/ur/cryptobox-server-feature-logs.po new file mode 100644 index 0000000..2e27e81 --- /dev/null +++ b/v0.3.4.5/plugins/logs/intl/ur/cryptobox-server-feature-logs.po @@ -0,0 +1,74 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-02-07 09:21+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Event log" +msgstr "" + +#: Text.ShowAll +msgid "Show all messages" +msgstr "" + +#: Text.AtLeastWarnings +msgid "Show warnings and errors" +msgstr "" + +#: Text.OnlyErrors +msgid "Show errors only" +msgstr "" + +#: Text.DownloadLogFile +msgid "Download complete log" +msgstr "" + +#: Text.AgeOfEvent +msgid "Time passed" +msgstr "" + +#: Text.EventText +msgid "Description" +msgstr "" + +#: Text.TimeUnits.Days +msgid "days" +msgstr "" + +#: Text.TimeUnits.Hours +msgid "hours" +msgstr "" + +#: Text.TimeUnits.Minutes +msgid "minutes" +msgstr "" + +#: Text.TimeUnits.Seconds +msgid "seconds" +msgstr "" + +#: Help.EventLog +msgid "Here you can see the event log of the CryptoBox. Every message belongs to one of the following groups: information/warning/error as represented by the symbol in the leftmost column. You may choose to see all or only some selected messages. If you encounter any problems with the CryptoBox then you should send the most recent warnings and errors besides a detailed description to info@cryptobox.org." +msgstr "" + +#: AdviceMessage.EmptyLog.Text +msgid "There are no messages available." +msgstr "" + +#: AdviceMessage.NoLogFileConfigured.Title +msgid "No log file configured" +msgstr "" + +#: AdviceMessage.NoLogFileConfigured.Text +msgid "The CryptoBox is not configured to log events to a file. Thus it is not possible to review log events." +msgstr "" diff --git a/v0.3.4.5/plugins/logs/language.hdf b/v0.3.4.5/plugins/logs/language.hdf new file mode 100644 index 0000000..6af1d81 --- /dev/null +++ b/v0.3.4.5/plugins/logs/language.hdf @@ -0,0 +1,31 @@ +Name = Event log +Link = Event log + +Title = Event log + +Text { + ShowAll = Show all messages + AtLeastWarnings = Show warnings and errors + OnlyErrors = Show errors only + DownloadLogFile = Download complete log + AgeOfEvent = Time passed + EventText = Description + TimeUnits { + Days = days + Hours = hours + Minutes = minutes + Seconds = seconds + } +} + +Help.EventLog = Here you can see the event log of the CryptoBox. Every message belongs to one of the following groups: information/warning/error as represented by the symbol in the leftmost column. You may choose to see all or only some selected messages. If you encounter any problems with the CryptoBox then you should send the most recent warnings and errors besides a detailed description to info@cryptobox.org. + +AdviceMessage { + EmptyLog.Text = There are no messages available. + + NoLogFileConfigured { + Title = No log file configured + Text = The CryptoBox is not configured to log events to a file. Thus it is not possible to review log events. + } +} + diff --git a/v0.3.4.5/plugins/logs/logs.css b/v0.3.4.5/plugins/logs/logs.css new file mode 100644 index 0000000..e71d72d --- /dev/null +++ b/v0.3.4.5/plugins/logs/logs.css @@ -0,0 +1,15 @@ +#log table.log td.level img { + width: 24px; + height: 24px; + vertical-align: middle; +} + +#log table.log td.time { + padding: 0 5px 0 3px; +} + +#log table.log td.text { + font-size: 0.9em; + font-family: monospace; +} + diff --git a/v0.3.4.5/plugins/logs/logs.py b/v0.3.4.5/plugins/logs/logs.py new file mode 100644 index 0000000..6b61a03 --- /dev/null +++ b/v0.3.4.5/plugins/logs/logs.py @@ -0,0 +1,218 @@ +# +# Copyright 2006 sense.lab e.V. +# +# This file is part of the CryptoBox. +# +# The CryptoBox 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 CryptoBox 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 the CryptoBox; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + + +"""The logs feature of the CryptoBox. +""" + +__revision__ = "$Id" + +import cryptobox.plugins.base +import re +import datetime +import cherrypy + +LOG_LEVELS = [ 'DEBUG', 'INFO', 'NOTICE', 'WARNING', 'ERROR' ] + +LINE_REGEX = re.compile(r"(?P\d{4})-(?P\d{2})-(?P\d{2}) " \ + + r"(?P\d{2}):(?P\d{2}):\d{2},\d{3} (?P" \ + + "|".join([ "(?:%s)" % e for e in LOG_LEVELS]) + r"): (?P.*)$") + +class logs(cryptobox.plugins.base.CryptoBoxPlugin): + """The logs feature of the CryptoBox. + """ + + plugin_capabilities = [ "system" ] + plugin_visibility = [ "preferences" ] + request_auth = False + rank = 90 + + def do_action(self, lines=50, size=3000, level=None): + """Show the latest part of the log file. + """ + ## filter input + try: + lines = int(lines) + if lines <= 0: + raise(ValueError) + except ValueError: + self.cbox.log.info("[logs] invalid line number: %s" % str(lines)) + lines = 50 + try: + size = int(size) + if size <= 0: + raise(ValueError) + except ValueError: + self.cbox.log.info("[logs] invalid log size: %s" % str(size)) + size = 3000 + if not level is None: + level = str(level) + if not level in LOG_LEVELS: + self.cbox.log.info("[logs] invalid log level: %s" % str(level)) + level = None + for (index, line) in enumerate(self.__filter_log_content(lines, size, level)): + self.__set_line_hdf_data(self.hdf_prefix + "Content.%d" % index, line) + self.hdf[self.hdf_prefix + "Destination"] = \ + self.cbox.prefs["Log"]["Destination"].lower() + return "show_log" + + + @cherrypy.expose + def download(self, **kargs): + """Download the complete log file + + **kargs are necessary - we have to ignore 'weblang' and so on ... + """ + log_file = self.__get_log_destination_file() + if log_file is None: + return "" + else: + return cherrypy.lib.cptools.serveFile(log_file, + disposition="attachment", name="cryptobox_logfile.txt") + + + def get_status(self): + """The current status includes the log configuration details. + """ + return "%s:%s:%s" % ( + self.cbox.prefs["Log"]["Level"], + self.cbox.prefs["Log"]["Destination"], + self.cbox.prefs["Log"]["Details"]) + + + def __filter_log_content(self, lines, max_size, level): + """Filter, sort and shorten the log content. + """ + if level and level in LOG_LEVELS: + filtered_levels = LOG_LEVELS[:] + ## only the given and higher levels are accepted + while filtered_levels[0] != level: + del filtered_levels[0] + content = [] + current_length = 0 + for line in self.__get_log_data(): + ## search for matching lines for the given log level + for one_level in filtered_levels: + if line.find(" %s: " % one_level) != -1: + break + else: + ## the line does not contain an appropriate level name + continue + ## we found a line that fits + content.append(line) + current_length += len(line) + if lines and len(content) >= lines: + break + if max_size and current_length >= max_size: + break + else: + content = self.__get_log_data(lines, max_size) + return content + + + def __set_line_hdf_data(self, hdf_prefix, line): + """Parse the log line for time and log level. + + If parsing fails, then the output line is simply displayed without + meta information. + """ + self.hdf[hdf_prefix + ".Text"] = line.strip() + match = LINE_REGEX.match(line) + if not match: + ## we could not parse the line - just return the text without meta info + return + ## matching was successful - we can parse the line for details + ## calculate time difference of log line (aka: age of event) + try: + (year, month, day, hour, minute) = match.group( + 'year', 'month', 'day', 'hour', 'minute') + (year, month, day, hour, minute) = \ + (int(year), int(month), int(day), int(hour), int(minute)) + ## timediff is a timedelta object + timediff = datetime.datetime.today() - \ + datetime.datetime(year, month, day, hour, minute) + ## the time units (see below) correspond to the names within the language + ## file: Text.TimeUnits.Days ... + if timediff.days >= 1: + self.hdf[hdf_prefix + ".TimeDiff.Unit"] = 'Days' + self.hdf[hdf_prefix + ".TimeDiff.Value"] = timediff.days + elif timediff.seconds >= 3600: + self.hdf[hdf_prefix + ".TimeDiff.Unit"] = 'Hours' + self.hdf[hdf_prefix + ".TimeDiff.Value"] = timediff.seconds / 3600 + elif timediff.seconds >= 60: + self.hdf[hdf_prefix + ".TimeDiff.Unit"] = 'Minutes' + self.hdf[hdf_prefix + ".TimeDiff.Value"] = timediff.seconds / 60 + else: + self.hdf[hdf_prefix + ".TimeDiff.Unit"] = 'Seconds' + self.hdf[hdf_prefix + ".TimeDiff.Value"] = timediff.seconds + except (OverflowError, TypeError, ValueError, IndexError), err_msg: + pass + ## retrieve the level + try: + self.hdf[hdf_prefix + ".Level"] = match.group('level') + except IndexError: + pass + try: + self.hdf[hdf_prefix + ".Text"] = match.group('text').strip() + except IndexError: + pass + + + def __get_log_destination_file(self): + """For non-file log destinations return 'None' and output a warning + """ + try: + if self.cbox.prefs["Log"]["Destination"].upper() == "FILE": + import os + return os.path.abspath(self.cbox.prefs["Log"]["Details"]) + else: + return None + except KeyError: + self.cbox.log.error( + "could not evaluate one of the following config settings: " + + "[Log]->Destination or [Log]->Details") + return None + + + def __get_log_data(self, lines=None, max_size=None): + """get the most recent log entries of the log file + + the maximum number and size of these entries can be limited by + 'lines' and 'max_size' + """ + log_file = self.__get_log_destination_file() + ## return nothing if the currently selected log output is not a file + if log_file is None: + return [] + try: + fdesc = open(log_file, "r") + if max_size: + fdesc.seek(-max_size, 2) # seek relative to the end of the file + content = fdesc.readlines() + fdesc.close() + except IOError: + self.cbox.log.warn("failed to read the log file (%s)" % log_file) + return [] + if lines: + content = content[-lines:] + content.reverse() + return content + + diff --git a/v0.3.4.5/plugins/logs/plugin_icon.gif b/v0.3.4.5/plugins/logs/plugin_icon.gif new file mode 100644 index 0000000000000000000000000000000000000000..9baccec21e0a3c47f2ccc8fb2c13202450c90977 GIT binary patch literal 2932 zcmV-)3ybteNk%w1VL$*t0O$Vz0096A0RRLC0}BcO5fBIz5da<)02~(rA{YP}8W<@W z8Y~?OCm#?*6bdaO0U#tMB_$a&Cjcob7C|KiJ1hV}G5|+40G(0d7|da9IIfQ&eVN40}jQb6gN`UJ+zlP<>tikW~QUB`RuJ zTX5rky`gJcSFX&!KFGLB~haAakQY6G=LQHgE^ zk!cf{Rc?!4UX*MAgm4*=Zvc8~V2^SDY;bd$U0jxP1h8oUly?UHJR-SQTAFqVn|J_U zglLv{8J%uEq+@S%gh-%#0&Ry?s%2-JeGz+sRCs)Sy>S4afCY((6Oe)`pKN)ge+is$ zdY5%}gojS4g8-z350ipV$aeswg&gKyN2-Yhu7?Mhi8_jqNrQ-r|5`Pyd2_Ce4YH2_ z(|`cObaQ^2WvG%Xwvz~vl$3X-d!vqvyqFUIaYL$~N1UIPxuZDngirT^RG*}$v8QtX ziBY<(RkpBJ#H~WEwqLcch~|};io~Aio^7)!2sN*KOF@furfYwd1eN z($%l%xvA^A%-*Ba)5_o7c;w|kz2vd2?X}F~pxEJ#>FGMQ?6%d}$kpPQ%jKy3)P2_3 z+q>_x;?>pv$;jW~qu%C>9As+u`EO^Q`^U*3k5);OEQO^r`aiiQ(tz z|LTeE@SWZGrsV73;rXHd-`@1|mFW4R@bkL$=;-?Qk?s7S^!%Xr{hIyn+yDHP{rsK$ z|Cjyr^Z)<_CX>@2HRA^-&M@dak03rDV0SW;B04x9i002M$KmY&; z{s8|897wR>KL7{;7+lD(p~Hs@6Ba0t5TeD47!Lx7uw=@VARGoDY*;ZP#)Jw7BCIf_ z$&@NEmuwK3k|4^FCLaPIz@!Gwg8`1b^thx7(V0I12v{@e4~CyP4FXV5E1o|EI00lJ z3e)IIqcUkCtTAZ~Qx!F%+5}K2SUhcWq$CU=Bc?}~9*0g5V}by}KY#uSNR&uGTD3q| z1vBTPo;eT*2Y7{m4)O7LLPqyUH20tj$J3XDzN>REvjfCAp4 z&g@}I(~O+9-_3jp?<{MSaV$^~9~6+q)T&jWB+P;m;ck^L`}*ZWw{G3Lb>w{hH~aKS zxGY(T{3!~Eb7KE%2;Sj)3IE6Cj?3axY_TGi@O+sLO}FW9N4sHiN?vF#%d800t0BjW0}3Kq;~$dPAmR9d^N=p1{`^k z0Z?>`hYg=9;YI?1JTec4{GgiMKKw*l=Q|$0gTrJmQG^%(ECpcz9(VxpDFka=kWDqh z%#+W!+cX-fJnf9TY+(!8#ctyN<9te$WJuk?#B-_x?s~zJIT^X z4?2C^rNtCrRB=F{I!RWAOFJOY!3&~{qmK%yHX%?zz}g1c4N z!w)e-FyMj!66`Y#C!7$Yb~wH0($2Bvy3?kP{kTG}%uUpslm1dJ4Rwf={Nxi!2@nK8 z3oUA=a!cTWFC)x7#75~3oqaSx^%O`%fb~KFI1rN-O}xTSIl_q3#VP!dVhb_?-*e0| z`S26CGLKsscRnm=Au||7h_v?!cX>38e)%vH1vZiLGmkLU=*Q1J!oW`FF##hh4kt70 zUIo0H7laU|U)cffJo}u|MU>@?+t2dbs0zLG+0lNFj*bNJMI2u|p|_w2SXMZpv7MBxcBu@gxdQ(F|v6iA`saL+z>IekMXGr zed=0X8JZA>I>g}#4(Oiu?t_;qWTJFB>Ov=k5sfy@5R@bHrG8K~E_<-xhBz#OVJf*b z|1Cis`ACN_m>~pqtPyr16XG%O5x9LIQIM$qa>WeVP|Poo05yUVKv6#U26sS86mk&9 zv6iQdddib-`4}a+&VYnEw4n}F*k48f;JM&oB5wTvL?zB4C1t^bjXHW@(a7jad*lEN zc8G%=p5Qw{eIO<RTYQXOT-5JlL79Jx>dWfCL+2WTc3AR*6tG@=o`43`?q zaSQ}T>ZHxnPg(Z?geC|=5PW#T#P(L5DLiZnuMinNlmUld_zPSHogwMOLA+B6QW&W? z!5;Xq2Rjr2pe6}G1-hsOEqp;4N9F#?AXTY! zw6%7y#{-uk2|yr=cK+%IW+8RJcxo~qNg(DP1c6Mq+GGF`o5B~qPy|ctV;*wwgjokU zPhMiyW$H}he%xV;71)6ff{24Sy{nP{d_ZR7B`*#vA%t)YRbBE7rF6S$$dc~EZusRx z8~(}Pfe2s#mIJUEv=9U$SYmw#R@M+_m{)PN2~~Y~!eIr$1X2r?qF`~>yfc_8f>KnA!_Og=w#20$=xj^jzRd|Vm7h_J&CQ2XfqhM5a{ z;Ab89zy~g1`Vt^sM#4U62qPfk)^@;RsW}$_Nq=Dvqs^}%ns8?GdbS@x;DR7-&4tD8 znsbxPKpXITSp14%20yTbSe=0bK`??5+%4{%CyC@~4?+-wIQJ8B@PjnZLlHT+H6!fc z0dYSX%o~Wqiuo{zJv;%^mY~8Dz|Dv>IKYn2wuoT}kbylQ0^C~WE)H;Dhi@}N43kVa zMhqhW4^*5H4@blvK#E}TJ+#2y8vn?-qujbJK0RTJZ*fa?M literal 0 HcmV?d00001 diff --git a/v0.3.4.5/plugins/logs/plugin_icon.png b/v0.3.4.5/plugins/logs/plugin_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..11813bb38b82251a12df4ac8ec6b2818d515b498 GIT binary patch literal 6663 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 RTWSCR002ovPDHLkV1iZcm*oHe literal 0 HcmV?d00001 diff --git a/v0.3.4.5/plugins/logs/show_log.cs b/v0.3.4.5/plugins/logs/show_log.cs new file mode 100644 index 0000000..96c8dcb --- /dev/null +++ b/v0.3.4.5/plugins/logs/show_log.cs @@ -0,0 +1,81 @@ + + + + +
+ + + + + + + + + + +
+ + + + + + + +
+ +
+ + + + 0 ?> + + + + + + + + + + +
" + alt="symbol: " /> 
+ +

+ +

+ + +

+ +

+ + +
+
+ diff --git a/v0.3.4.5/plugins/logs/unittests.py b/v0.3.4.5/plugins/logs/unittests.py new file mode 100644 index 0000000..af477d1 --- /dev/null +++ b/v0.3.4.5/plugins/logs/unittests.py @@ -0,0 +1,65 @@ +# +# Copyright 2006 sense.lab e.V. +# +# This file is part of the CryptoBox. +# +# The CryptoBox 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 CryptoBox 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 the CryptoBox; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +__revision__ = "$Id" + +from cryptobox.tests.base import WebInterfaceTestClass + +class unittests(WebInterfaceTestClass): + + def test_read_logs(self): + """Read the log files. + """ + log_url = self.url + "logs" + self.register_auth(log_url) + self.cmd.go(log_url) + self.cmd.find('') + + def test_write_logs(self): + """Send a log message and read it again. + """ + log_text = "unittest - just a marker - please ignore" + self.cbox.log.error(log_text) + log_url = self.url + "logs" + self.register_auth(log_url) + self.cmd.go(log_url + "?level=ERROR") + self.cmd.find(log_text) + + def test_invalid_args(self): + """Send various invalid input combinations to the 'log' plugin. + """ + log_url = self.url + "logs" + self.cmd.go(log_url + "?lines=10") + self.cmd.find('
') + self.cmd.go(log_url + "?lines=0") + self.cmd.find('
') + self.cmd.go(log_url + "?lines=x") + self.cmd.find('
') + self.cmd.go(log_url + "?size=1000") + self.cmd.find('
') + self.cmd.go(log_url + "?size=0") + self.cmd.find('
') + self.cmd.go(log_url + "?size=x") + self.cmd.find('
') + self.cmd.go(log_url + "?level=foobar") + self.cmd.find('
') + self.cmd.go(log_url + r"?level=kfj!^(]") + self.cmd.find('
') + diff --git a/v0.3.4.5/plugins/network/form_network.cs b/v0.3.4.5/plugins/network/form_network.cs new file mode 100644 index 0000000..88fb2bb --- /dev/null +++ b/v0.3.4.5/plugins/network/form_network.cs @@ -0,0 +1,92 @@ + + + + +
+ + + + + + + +
+ +
+ : + + + ... +
+ : + + ... +
+
+

+ + +

+ + + + +
+ + + + + + + + +
+ : + + ... +
+

+ + +

+ + + + +
+ diff --git a/v0.3.4.5/plugins/network/intl/cryptobox-server-feature-network.pot b/v0.3.4.5/plugins/network/intl/cryptobox-server-feature-network.pot new file mode 100644 index 0000000..d97c484 --- /dev/null +++ b/v0.3.4.5/plugins/network/intl/cryptobox-server-feature-network.pot @@ -0,0 +1,111 @@ +#: Name +msgid "Configure network" +msgstr "" + +#: Link +msgid "Network" +msgstr "" + +#: Title +msgid "Network settings" +msgstr "" + +#: Title.IP +msgid "CryptoBox server IP" +msgstr "" + +#: Title.GW +msgid "Gateway address" +msgstr "" + +#: Text.IP +msgid "Address" +msgstr "" + +#: Text.NM +msgid "Netmask" +msgstr "" + +#: Text.GW +msgid "Gateway" +msgstr "" + +#: Text.DHCP +msgid "Automatic configuration (Caution!)" +msgstr "" + +#: Button.Network +msgid "Change server address" +msgstr "" + +#: Button.Gateway +msgid "Change default gateway" +msgstr "" + +#: Help.Network +msgid "Insert the network address of the CryptoBox server, the network mask and the default gateway. Be aware that you may lose your connection to the server under some circumstances. The actual values are visible in the form fields." +msgstr "" + +#: Help.Gateway +msgid "If you have a gateway in your LAN and want to make use of it, type it's address in here. It will be added as default route. A quadruple of zeros means, there is no gateway set." +msgstr "" + +#: Help.DHCP +msgid "If you enable automatic network configuration make sure you have a well configured DHCP server running. All values will be overridden by the settings from the DHCP server. If you don't know what DHCP means leave this box unchecked." +msgstr "" + +#: WarningMessage.AddressChangeFailed.Title +msgid "Failure" +msgstr "" + +#: WarningMessage.AddressChangeFailed.Text +msgid "The address of the CryptoBox server could not be changed." +msgstr "" + +#: WarningMessage.GatewayChangeFailed.Text +msgid "The gateway of the CryptoBox server could not be set. Maybe the address you entered is unreachable?" +msgstr "" + +#: WarningMessage.InvalidServerIP.Title +msgid "Invalid value" +msgstr "" + +#: WarningMessage.InvalidServerIP.Text +msgid "The server address is not valid." +msgstr "" + +#: WarningMessage.InvalidNetmask.Text +msgid "The netmask is not valid." +msgstr "" + +#: WarningMessage.InvalidGatewayIP.Text +msgid "The gateway address is not valid." +msgstr "" + +#: SuccessMessage.IPChanged.Title +msgid "Network address changed" +msgstr "" + +#: SuccessMessage.IPChanged.Text +msgid "The network address has been changed. In a few seconds you will get redirected to the new address." +msgstr "" + +#: SuccessMessage.GWChanged.Title +msgid "Gateway address changed" +msgstr "" + +#: SuccessMessage.GWChanged.Text +msgid "The gateway was added to your default route." +msgstr "" + +#: EnvironmentWarning.MissingProgramIfconfig.Title +msgid "Missing program" +msgstr "" + +#: EnvironmentWarning.MissingProgramIfconfig.Text +msgid "The 'ifconfig' program is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "" + +#: EnvironmentWarning.MissingProgramRoute.Text +msgid "The 'route' program is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "" diff --git a/v0.3.4.5/plugins/network/intl/cs/cryptobox-server-feature-network.po b/v0.3.4.5/plugins/network/intl/cs/cryptobox-server-feature-network.po new file mode 100644 index 0000000..de1f68e --- /dev/null +++ b/v0.3.4.5/plugins/network/intl/cs/cryptobox-server-feature-network.po @@ -0,0 +1,126 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-07 09:21+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Configure network" +msgstr "" + +#: Link +msgid "Network" +msgstr "" + +#: Title +msgid "Network settings" +msgstr "" + +#: Title.IP +msgid "CryptoBox server IP" +msgstr "" + +#: Title.GW +msgid "Gateway address" +msgstr "" + +#: Text.IP +msgid "Address" +msgstr "" + +#: Text.NM +msgid "Netmask" +msgstr "" + +#: Text.GW +msgid "Gateway" +msgstr "" + +#: Text.DHCP +msgid "Automatic configuration (Caution!)" +msgstr "" + +#: Button.Network +msgid "Change server address" +msgstr "" + +#: Button.Gateway +msgid "Change default gateway" +msgstr "" + +#: Help.Network +msgid "Insert the network address of the CryptoBox server, the network mask and the default gateway. Be aware that you may lose your connection to the server under some circumstances. The actual values are visible in the form fields." +msgstr "" + +#: Help.Gateway +msgid "If you have a gateway in your LAN and want to make use of it, type it's address in here. It will be added as default route. A quadruple of zeros means, there is no gateway set." +msgstr "" + +#: Help.DHCP +msgid "If you enable automatic network configuration make sure you have a well configured DHCP server running. All values will be overridden by the settings from the DHCP server. If you don't know what DHCP means leave this box unchecked." +msgstr "" + +#: WarningMessage.AddressChangeFailed.Title +msgid "Failure" +msgstr "" + +#: WarningMessage.AddressChangeFailed.Text +msgid "The address of the CryptoBox server could not be changed." +msgstr "" + +#: WarningMessage.GatewayChangeFailed.Text +msgid "The gateway of the CryptoBox server could not be set. Maybe the address you entered is unreachable?" +msgstr "" + +#: WarningMessage.InvalidServerIP.Title +msgid "Invalid value" +msgstr "" + +#: WarningMessage.InvalidServerIP.Text +msgid "The server address is not valid." +msgstr "" + +#: WarningMessage.InvalidNetmask.Text +msgid "The netmask is not valid." +msgstr "" + +#: WarningMessage.InvalidGatewayIP.Text +msgid "The gateway address is not valid." +msgstr "" + +#: SuccessMessage.IPChanged.Title +msgid "Network address changed" +msgstr "" + +#: SuccessMessage.IPChanged.Text +msgid "The network address has been changed. In a few seconds you will get redirected to the new address." +msgstr "" + +#: SuccessMessage.GWChanged.Title +msgid "Gateway address changed" +msgstr "" + +#: SuccessMessage.GWChanged.Text +msgid "The gateway was added to your default route." +msgstr "" + +#: EnvironmentWarning.MissingProgramIfconfig.Title +msgid "Missing program" +msgstr "" + +#: EnvironmentWarning.MissingProgramIfconfig.Text +msgid "The 'ifconfig' program is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "" + +#: EnvironmentWarning.MissingProgramRoute.Text +msgid "The 'route' program is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "" diff --git a/v0.3.4.5/plugins/network/intl/da/cryptobox-server-feature-network.po b/v0.3.4.5/plugins/network/intl/da/cryptobox-server-feature-network.po new file mode 100644 index 0000000..de1f68e --- /dev/null +++ b/v0.3.4.5/plugins/network/intl/da/cryptobox-server-feature-network.po @@ -0,0 +1,126 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-07 09:21+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Configure network" +msgstr "" + +#: Link +msgid "Network" +msgstr "" + +#: Title +msgid "Network settings" +msgstr "" + +#: Title.IP +msgid "CryptoBox server IP" +msgstr "" + +#: Title.GW +msgid "Gateway address" +msgstr "" + +#: Text.IP +msgid "Address" +msgstr "" + +#: Text.NM +msgid "Netmask" +msgstr "" + +#: Text.GW +msgid "Gateway" +msgstr "" + +#: Text.DHCP +msgid "Automatic configuration (Caution!)" +msgstr "" + +#: Button.Network +msgid "Change server address" +msgstr "" + +#: Button.Gateway +msgid "Change default gateway" +msgstr "" + +#: Help.Network +msgid "Insert the network address of the CryptoBox server, the network mask and the default gateway. Be aware that you may lose your connection to the server under some circumstances. The actual values are visible in the form fields." +msgstr "" + +#: Help.Gateway +msgid "If you have a gateway in your LAN and want to make use of it, type it's address in here. It will be added as default route. A quadruple of zeros means, there is no gateway set." +msgstr "" + +#: Help.DHCP +msgid "If you enable automatic network configuration make sure you have a well configured DHCP server running. All values will be overridden by the settings from the DHCP server. If you don't know what DHCP means leave this box unchecked." +msgstr "" + +#: WarningMessage.AddressChangeFailed.Title +msgid "Failure" +msgstr "" + +#: WarningMessage.AddressChangeFailed.Text +msgid "The address of the CryptoBox server could not be changed." +msgstr "" + +#: WarningMessage.GatewayChangeFailed.Text +msgid "The gateway of the CryptoBox server could not be set. Maybe the address you entered is unreachable?" +msgstr "" + +#: WarningMessage.InvalidServerIP.Title +msgid "Invalid value" +msgstr "" + +#: WarningMessage.InvalidServerIP.Text +msgid "The server address is not valid." +msgstr "" + +#: WarningMessage.InvalidNetmask.Text +msgid "The netmask is not valid." +msgstr "" + +#: WarningMessage.InvalidGatewayIP.Text +msgid "The gateway address is not valid." +msgstr "" + +#: SuccessMessage.IPChanged.Title +msgid "Network address changed" +msgstr "" + +#: SuccessMessage.IPChanged.Text +msgid "The network address has been changed. In a few seconds you will get redirected to the new address." +msgstr "" + +#: SuccessMessage.GWChanged.Title +msgid "Gateway address changed" +msgstr "" + +#: SuccessMessage.GWChanged.Text +msgid "The gateway was added to your default route." +msgstr "" + +#: EnvironmentWarning.MissingProgramIfconfig.Title +msgid "Missing program" +msgstr "" + +#: EnvironmentWarning.MissingProgramIfconfig.Text +msgid "The 'ifconfig' program is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "" + +#: EnvironmentWarning.MissingProgramRoute.Text +msgid "The 'route' program is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "" diff --git a/v0.3.4.5/plugins/network/intl/de/cryptobox-server-feature-network.po b/v0.3.4.5/plugins/network/intl/de/cryptobox-server-feature-network.po new file mode 100644 index 0000000..98c2cc6 --- /dev/null +++ b/v0.3.4.5/plugins/network/intl/de/cryptobox-server-feature-network.po @@ -0,0 +1,125 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-07 09:21+0100\n" +"PO-Revision-Date: 2007-02-19 02:51+0100\n" +"Last-Translator: Lars Kruse \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Configure network" +msgstr "Netzwerk einrichten" + +#: Link +msgid "Network" +msgstr "Netzwerk" + +#: Title +msgid "Network settings" +msgstr "Netzwerkeinstellungen" + +#: Title.IP +msgid "CryptoBox server IP" +msgstr "CryptoBox Server IP-Adresse" + +#: Title.GW +msgid "Gateway address" +msgstr "Gateway Adresse" + +#: Text.IP +msgid "Address" +msgstr "Adresse" + +#: Text.NM +msgid "Netmask" +msgstr "Netzmaske" + +#: Text.GW +msgid "Gateway" +msgstr "Gateway" + +#: Text.DHCP +msgid "Automatic configuration (Caution!)" +msgstr "Automatische Einrichtung (Achtung!)" + +#: Button.Network +msgid "Change server address" +msgstr "Ändere Server-Adresse" + +#: Button.Gateway +msgid "Change default gateway" +msgstr "Ändere Standard-Gateway" + +#: Help.Network +msgid "Insert the network address of the CryptoBox server, the network mask and the default gateway. Be aware that you may lose your connection to the server under some circumstances. The actual values are visible in the form fields." +msgstr "Gebe die Netzwerk-Adresse des CryptoBox Servers, die Netzwerkmaske und das Standard-Gateway ein. Bedenke, dass du unter Umständen die Verbindung zum Server verlieren kannst. Die aktuellen Werte werden in den Feldern angezeigt." + +#: Help.Gateway +msgid "If you have a gateway in your LAN and want to make use of it, type it's address in here. It will be added as default route. A quadruple of zeros means, there is no gateway set." +msgstr "Falls du ein Gateway in deinem LAN hast und es benutzen willst, gebe die entsprechende Adresse hier ein. Es wird als Standard-Route hinzugefügt." + +#: Help.DHCP +msgid "If you enable automatic network configuration make sure you have a well configured DHCP server running. All values will be overridden by the settings from the DHCP server. If you don't know what DHCP means leave this box unchecked." +msgstr "Wenn du die automatische Netzwerkeinstellung aktivierst, stelle sicher, dass ein korrekt konfigurierter DHCP-Server läuft. Alle Werte werden durch die vom DHCP-Server ersetzt. Falls du nicht weisst, was DHCP bedeutet, lasse diese Checkbox deaktiviert." + +#: WarningMessage.AddressChangeFailed.Title +msgid "Failure" +msgstr "Fehler" + +#: WarningMessage.AddressChangeFailed.Text +msgid "The address of the CryptoBox server could not be changed." +msgstr "Die Adresse des CryptoBox-Servers konnte nicht geändert werden." + +#: WarningMessage.GatewayChangeFailed.Text +msgid "The gateway of the CryptoBox server could not be set. Maybe the address you entered is unreachable?" +msgstr "Die Gateway-Adresse des CryptoBox-Servers konnte nicht geändert werden. Vielleicht ist die neue Gateway-Adresse nicht erreichbar?" + +#: WarningMessage.InvalidServerIP.Title +msgid "Invalid value" +msgstr "Ungültige Adresseingabe" + +#: WarningMessage.InvalidServerIP.Text +msgid "The server address is not valid." +msgstr "Die Adresse des Servers ist nicht gültig." + +#: WarningMessage.InvalidNetmask.Text +msgid "The netmask is not valid." +msgstr "Die Netzwerkmaske ist nicht gültig." + +#: WarningMessage.InvalidGatewayIP.Text +msgid "The gateway address is not valid." +msgstr "Die Adresse des Gateways ist nicht gültig." + +#: SuccessMessage.IPChanged.Title +msgid "Network address changed" +msgstr "Netzwerkadresse geändert" + +#: SuccessMessage.IPChanged.Text +msgid "The network address has been changed. In a few seconds you will get redirected to the new address." +msgstr "Die Netzwerkadresse wurde geändert. In wenigen Sekunden wirst du zu der neuen Adresse umgeleitet." + +#: SuccessMessage.GWChanged.Title +msgid "Gateway address changed" +msgstr "Gateway-Adresse wurde geändert" + +#: SuccessMessage.GWChanged.Text +msgid "The gateway was added to your default route." +msgstr "Das Gateway wurde als deine Standard-Route hinzugefügt." + +#: EnvironmentWarning.MissingProgramIfconfig.Title +msgid "Missing program" +msgstr "Fehlendes Programm" + +#: EnvironmentWarning.MissingProgramIfconfig.Text +msgid "The 'ifconfig' program is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "Das Programm 'ifconfig' ist nicht installiert. Bitte den Administrator des CryptoBox Servers dieses Programm zu installieren." + +#: EnvironmentWarning.MissingProgramRoute.Text +msgid "The 'route' program is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "Das Programm 'route' ist nicht installiert. Bitte den Administrator des CryptoBox Servers dieses Programm zu installieren." diff --git a/v0.3.4.5/plugins/network/intl/en/cryptobox-server-feature-network.po b/v0.3.4.5/plugins/network/intl/en/cryptobox-server-feature-network.po new file mode 100644 index 0000000..93bdbcb --- /dev/null +++ b/v0.3.4.5/plugins/network/intl/en/cryptobox-server-feature-network.po @@ -0,0 +1,111 @@ +#: Name +msgid "Configure network" +msgstr "Configure network" + +#: Link +msgid "Network" +msgstr "Network" + +#: Title +msgid "Network settings" +msgstr "Network settings" + +#: Title.IP +msgid "CryptoBox server IP" +msgstr "CryptoBox server IP" + +#: Title.GW +msgid "Gateway address" +msgstr "Gateway address" + +#: Text.IP +msgid "Address" +msgstr "Address" + +#: Text.NM +msgid "Netmask" +msgstr "Netmask" + +#: Text.GW +msgid "Gateway" +msgstr "Gateway" + +#: Text.DHCP +msgid "Automatic configuration (Caution!)" +msgstr "Automatic configuration (Caution!)" + +#: Button.Network +msgid "Change server address" +msgstr "Change server address" + +#: Button.Gateway +msgid "Change default gateway" +msgstr "Change default gateway" + +#: Help.Network +msgid "Insert the network address of the CryptoBox server, the network mask and the default gateway. Be aware that you may lose your connection to the server under some circumstances. The actual values are visible in the form fields." +msgstr "Insert the network address of the CryptoBox server, the network mask and the default gateway. Be aware that you may lose your connection to the server under some circumstances. The actual values are visible in the form fields." + +#: Help.Gateway +msgid "If you have a gateway in your LAN and want to make use of it, type it's address in here. It will be added as default route. A quadruple of zeros means, there is no gateway set." +msgstr "If you have a gateway in your LAN and want to make use of it, type it's address in here. It will be added as default route. A quadruple of zeros means, there is no gateway set." + +#: Help.DHCP +msgid "If you enable automatic network configuration make sure you have a well configured DHCP server running. All values will be overridden by the settings from the DHCP server. If you don't know what DHCP means leave this box unchecked." +msgstr "If you enable automatic network configuration make sure you have a well configured DHCP server running. All values will be overridden by the settings from the DHCP server. If you don't know what DHCP means leave this box unchecked." + +#: WarningMessage.AddressChangeFailed.Title +msgid "Failure" +msgstr "Failure" + +#: WarningMessage.AddressChangeFailed.Text +msgid "The address of the CryptoBox server could not be changed." +msgstr "The address of the CryptoBox server could not be changed." + +#: WarningMessage.GatewayChangeFailed.Text +msgid "The gateway of the CryptoBox server could not be set. Maybe the address you entered is unreachable?" +msgstr "The gateway of the CryptoBox server could not be set. Maybe the address you entered is unreachable?" + +#: WarningMessage.InvalidServerIP.Title +msgid "Invalid value" +msgstr "Invalid value" + +#: WarningMessage.InvalidServerIP.Text +msgid "The server address is not valid." +msgstr "The server address is not valid." + +#: WarningMessage.InvalidNetmask.Text +msgid "The netmask is not valid." +msgstr "The netmask is not valid." + +#: WarningMessage.InvalidGatewayIP.Text +msgid "The gateway address is not valid." +msgstr "The gateway address is not valid." + +#: SuccessMessage.IPChanged.Title +msgid "Network address changed" +msgstr "Network address changed" + +#: SuccessMessage.IPChanged.Text +msgid "The network address has been changed. In a few seconds you will get redirected to the new address." +msgstr "The network address has been changed. In a few seconds you will get redirected to the new address." + +#: SuccessMessage.GWChanged.Title +msgid "Gateway address changed" +msgstr "Gateway address changed" + +#: SuccessMessage.GWChanged.Text +msgid "The gateway was added to your default route." +msgstr "The gateway was added to your default route." + +#: EnvironmentWarning.MissingProgramIfconfig.Title +msgid "Missing program" +msgstr "Missing program" + +#: EnvironmentWarning.MissingProgramIfconfig.Text +msgid "The 'ifconfig' program is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "The 'ifconfig' program is not installed. Please ask the administrator of the CryptoBox server to configure it properly." + +#: EnvironmentWarning.MissingProgramRoute.Text +msgid "The 'route' program is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "The 'route' program is not installed. Please ask the administrator of the CryptoBox server to configure it properly." diff --git a/v0.3.4.5/plugins/network/intl/es/cryptobox-server-feature-network.po b/v0.3.4.5/plugins/network/intl/es/cryptobox-server-feature-network.po new file mode 100644 index 0000000..de1f68e --- /dev/null +++ b/v0.3.4.5/plugins/network/intl/es/cryptobox-server-feature-network.po @@ -0,0 +1,126 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-07 09:21+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Configure network" +msgstr "" + +#: Link +msgid "Network" +msgstr "" + +#: Title +msgid "Network settings" +msgstr "" + +#: Title.IP +msgid "CryptoBox server IP" +msgstr "" + +#: Title.GW +msgid "Gateway address" +msgstr "" + +#: Text.IP +msgid "Address" +msgstr "" + +#: Text.NM +msgid "Netmask" +msgstr "" + +#: Text.GW +msgid "Gateway" +msgstr "" + +#: Text.DHCP +msgid "Automatic configuration (Caution!)" +msgstr "" + +#: Button.Network +msgid "Change server address" +msgstr "" + +#: Button.Gateway +msgid "Change default gateway" +msgstr "" + +#: Help.Network +msgid "Insert the network address of the CryptoBox server, the network mask and the default gateway. Be aware that you may lose your connection to the server under some circumstances. The actual values are visible in the form fields." +msgstr "" + +#: Help.Gateway +msgid "If you have a gateway in your LAN and want to make use of it, type it's address in here. It will be added as default route. A quadruple of zeros means, there is no gateway set." +msgstr "" + +#: Help.DHCP +msgid "If you enable automatic network configuration make sure you have a well configured DHCP server running. All values will be overridden by the settings from the DHCP server. If you don't know what DHCP means leave this box unchecked." +msgstr "" + +#: WarningMessage.AddressChangeFailed.Title +msgid "Failure" +msgstr "" + +#: WarningMessage.AddressChangeFailed.Text +msgid "The address of the CryptoBox server could not be changed." +msgstr "" + +#: WarningMessage.GatewayChangeFailed.Text +msgid "The gateway of the CryptoBox server could not be set. Maybe the address you entered is unreachable?" +msgstr "" + +#: WarningMessage.InvalidServerIP.Title +msgid "Invalid value" +msgstr "" + +#: WarningMessage.InvalidServerIP.Text +msgid "The server address is not valid." +msgstr "" + +#: WarningMessage.InvalidNetmask.Text +msgid "The netmask is not valid." +msgstr "" + +#: WarningMessage.InvalidGatewayIP.Text +msgid "The gateway address is not valid." +msgstr "" + +#: SuccessMessage.IPChanged.Title +msgid "Network address changed" +msgstr "" + +#: SuccessMessage.IPChanged.Text +msgid "The network address has been changed. In a few seconds you will get redirected to the new address." +msgstr "" + +#: SuccessMessage.GWChanged.Title +msgid "Gateway address changed" +msgstr "" + +#: SuccessMessage.GWChanged.Text +msgid "The gateway was added to your default route." +msgstr "" + +#: EnvironmentWarning.MissingProgramIfconfig.Title +msgid "Missing program" +msgstr "" + +#: EnvironmentWarning.MissingProgramIfconfig.Text +msgid "The 'ifconfig' program is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "" + +#: EnvironmentWarning.MissingProgramRoute.Text +msgid "The 'route' program is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "" diff --git a/v0.3.4.5/plugins/network/intl/fi/cryptobox-server-feature-network.po b/v0.3.4.5/plugins/network/intl/fi/cryptobox-server-feature-network.po new file mode 100644 index 0000000..de1f68e --- /dev/null +++ b/v0.3.4.5/plugins/network/intl/fi/cryptobox-server-feature-network.po @@ -0,0 +1,126 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-07 09:21+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Configure network" +msgstr "" + +#: Link +msgid "Network" +msgstr "" + +#: Title +msgid "Network settings" +msgstr "" + +#: Title.IP +msgid "CryptoBox server IP" +msgstr "" + +#: Title.GW +msgid "Gateway address" +msgstr "" + +#: Text.IP +msgid "Address" +msgstr "" + +#: Text.NM +msgid "Netmask" +msgstr "" + +#: Text.GW +msgid "Gateway" +msgstr "" + +#: Text.DHCP +msgid "Automatic configuration (Caution!)" +msgstr "" + +#: Button.Network +msgid "Change server address" +msgstr "" + +#: Button.Gateway +msgid "Change default gateway" +msgstr "" + +#: Help.Network +msgid "Insert the network address of the CryptoBox server, the network mask and the default gateway. Be aware that you may lose your connection to the server under some circumstances. The actual values are visible in the form fields." +msgstr "" + +#: Help.Gateway +msgid "If you have a gateway in your LAN and want to make use of it, type it's address in here. It will be added as default route. A quadruple of zeros means, there is no gateway set." +msgstr "" + +#: Help.DHCP +msgid "If you enable automatic network configuration make sure you have a well configured DHCP server running. All values will be overridden by the settings from the DHCP server. If you don't know what DHCP means leave this box unchecked." +msgstr "" + +#: WarningMessage.AddressChangeFailed.Title +msgid "Failure" +msgstr "" + +#: WarningMessage.AddressChangeFailed.Text +msgid "The address of the CryptoBox server could not be changed." +msgstr "" + +#: WarningMessage.GatewayChangeFailed.Text +msgid "The gateway of the CryptoBox server could not be set. Maybe the address you entered is unreachable?" +msgstr "" + +#: WarningMessage.InvalidServerIP.Title +msgid "Invalid value" +msgstr "" + +#: WarningMessage.InvalidServerIP.Text +msgid "The server address is not valid." +msgstr "" + +#: WarningMessage.InvalidNetmask.Text +msgid "The netmask is not valid." +msgstr "" + +#: WarningMessage.InvalidGatewayIP.Text +msgid "The gateway address is not valid." +msgstr "" + +#: SuccessMessage.IPChanged.Title +msgid "Network address changed" +msgstr "" + +#: SuccessMessage.IPChanged.Text +msgid "The network address has been changed. In a few seconds you will get redirected to the new address." +msgstr "" + +#: SuccessMessage.GWChanged.Title +msgid "Gateway address changed" +msgstr "" + +#: SuccessMessage.GWChanged.Text +msgid "The gateway was added to your default route." +msgstr "" + +#: EnvironmentWarning.MissingProgramIfconfig.Title +msgid "Missing program" +msgstr "" + +#: EnvironmentWarning.MissingProgramIfconfig.Text +msgid "The 'ifconfig' program is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "" + +#: EnvironmentWarning.MissingProgramRoute.Text +msgid "The 'route' program is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "" diff --git a/v0.3.4.5/plugins/network/intl/fr/cryptobox-server-feature-network.po b/v0.3.4.5/plugins/network/intl/fr/cryptobox-server-feature-network.po new file mode 100644 index 0000000..de1f68e --- /dev/null +++ b/v0.3.4.5/plugins/network/intl/fr/cryptobox-server-feature-network.po @@ -0,0 +1,126 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-07 09:21+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Configure network" +msgstr "" + +#: Link +msgid "Network" +msgstr "" + +#: Title +msgid "Network settings" +msgstr "" + +#: Title.IP +msgid "CryptoBox server IP" +msgstr "" + +#: Title.GW +msgid "Gateway address" +msgstr "" + +#: Text.IP +msgid "Address" +msgstr "" + +#: Text.NM +msgid "Netmask" +msgstr "" + +#: Text.GW +msgid "Gateway" +msgstr "" + +#: Text.DHCP +msgid "Automatic configuration (Caution!)" +msgstr "" + +#: Button.Network +msgid "Change server address" +msgstr "" + +#: Button.Gateway +msgid "Change default gateway" +msgstr "" + +#: Help.Network +msgid "Insert the network address of the CryptoBox server, the network mask and the default gateway. Be aware that you may lose your connection to the server under some circumstances. The actual values are visible in the form fields." +msgstr "" + +#: Help.Gateway +msgid "If you have a gateway in your LAN and want to make use of it, type it's address in here. It will be added as default route. A quadruple of zeros means, there is no gateway set." +msgstr "" + +#: Help.DHCP +msgid "If you enable automatic network configuration make sure you have a well configured DHCP server running. All values will be overridden by the settings from the DHCP server. If you don't know what DHCP means leave this box unchecked." +msgstr "" + +#: WarningMessage.AddressChangeFailed.Title +msgid "Failure" +msgstr "" + +#: WarningMessage.AddressChangeFailed.Text +msgid "The address of the CryptoBox server could not be changed." +msgstr "" + +#: WarningMessage.GatewayChangeFailed.Text +msgid "The gateway of the CryptoBox server could not be set. Maybe the address you entered is unreachable?" +msgstr "" + +#: WarningMessage.InvalidServerIP.Title +msgid "Invalid value" +msgstr "" + +#: WarningMessage.InvalidServerIP.Text +msgid "The server address is not valid." +msgstr "" + +#: WarningMessage.InvalidNetmask.Text +msgid "The netmask is not valid." +msgstr "" + +#: WarningMessage.InvalidGatewayIP.Text +msgid "The gateway address is not valid." +msgstr "" + +#: SuccessMessage.IPChanged.Title +msgid "Network address changed" +msgstr "" + +#: SuccessMessage.IPChanged.Text +msgid "The network address has been changed. In a few seconds you will get redirected to the new address." +msgstr "" + +#: SuccessMessage.GWChanged.Title +msgid "Gateway address changed" +msgstr "" + +#: SuccessMessage.GWChanged.Text +msgid "The gateway was added to your default route." +msgstr "" + +#: EnvironmentWarning.MissingProgramIfconfig.Title +msgid "Missing program" +msgstr "" + +#: EnvironmentWarning.MissingProgramIfconfig.Text +msgid "The 'ifconfig' program is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "" + +#: EnvironmentWarning.MissingProgramRoute.Text +msgid "The 'route' program is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "" diff --git a/v0.3.4.5/plugins/network/intl/hu/cryptobox-server-feature-network.po b/v0.3.4.5/plugins/network/intl/hu/cryptobox-server-feature-network.po new file mode 100644 index 0000000..de1f68e --- /dev/null +++ b/v0.3.4.5/plugins/network/intl/hu/cryptobox-server-feature-network.po @@ -0,0 +1,126 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-07 09:21+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Configure network" +msgstr "" + +#: Link +msgid "Network" +msgstr "" + +#: Title +msgid "Network settings" +msgstr "" + +#: Title.IP +msgid "CryptoBox server IP" +msgstr "" + +#: Title.GW +msgid "Gateway address" +msgstr "" + +#: Text.IP +msgid "Address" +msgstr "" + +#: Text.NM +msgid "Netmask" +msgstr "" + +#: Text.GW +msgid "Gateway" +msgstr "" + +#: Text.DHCP +msgid "Automatic configuration (Caution!)" +msgstr "" + +#: Button.Network +msgid "Change server address" +msgstr "" + +#: Button.Gateway +msgid "Change default gateway" +msgstr "" + +#: Help.Network +msgid "Insert the network address of the CryptoBox server, the network mask and the default gateway. Be aware that you may lose your connection to the server under some circumstances. The actual values are visible in the form fields." +msgstr "" + +#: Help.Gateway +msgid "If you have a gateway in your LAN and want to make use of it, type it's address in here. It will be added as default route. A quadruple of zeros means, there is no gateway set." +msgstr "" + +#: Help.DHCP +msgid "If you enable automatic network configuration make sure you have a well configured DHCP server running. All values will be overridden by the settings from the DHCP server. If you don't know what DHCP means leave this box unchecked." +msgstr "" + +#: WarningMessage.AddressChangeFailed.Title +msgid "Failure" +msgstr "" + +#: WarningMessage.AddressChangeFailed.Text +msgid "The address of the CryptoBox server could not be changed." +msgstr "" + +#: WarningMessage.GatewayChangeFailed.Text +msgid "The gateway of the CryptoBox server could not be set. Maybe the address you entered is unreachable?" +msgstr "" + +#: WarningMessage.InvalidServerIP.Title +msgid "Invalid value" +msgstr "" + +#: WarningMessage.InvalidServerIP.Text +msgid "The server address is not valid." +msgstr "" + +#: WarningMessage.InvalidNetmask.Text +msgid "The netmask is not valid." +msgstr "" + +#: WarningMessage.InvalidGatewayIP.Text +msgid "The gateway address is not valid." +msgstr "" + +#: SuccessMessage.IPChanged.Title +msgid "Network address changed" +msgstr "" + +#: SuccessMessage.IPChanged.Text +msgid "The network address has been changed. In a few seconds you will get redirected to the new address." +msgstr "" + +#: SuccessMessage.GWChanged.Title +msgid "Gateway address changed" +msgstr "" + +#: SuccessMessage.GWChanged.Text +msgid "The gateway was added to your default route." +msgstr "" + +#: EnvironmentWarning.MissingProgramIfconfig.Title +msgid "Missing program" +msgstr "" + +#: EnvironmentWarning.MissingProgramIfconfig.Text +msgid "The 'ifconfig' program is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "" + +#: EnvironmentWarning.MissingProgramRoute.Text +msgid "The 'route' program is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "" diff --git a/v0.3.4.5/plugins/network/intl/it/cryptobox-server-feature-network.po b/v0.3.4.5/plugins/network/intl/it/cryptobox-server-feature-network.po new file mode 100644 index 0000000..cd7d724 --- /dev/null +++ b/v0.3.4.5/plugins/network/intl/it/cryptobox-server-feature-network.po @@ -0,0 +1,125 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-07 09:21+0100\n" +"PO-Revision-Date: 2007-03-05 12:22+0100\n" +"Last-Translator: Fabrizio Tarizzo \n" +"Language-Team: Italian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Configure network" +msgstr "Configurazione della rete" + +#: Link +msgid "Network" +msgstr "Rete" + +#: Title +msgid "Network settings" +msgstr "Impostazioni di rete" + +#: Title.IP +msgid "CryptoBox server IP" +msgstr "Indirizzo IP del server CryptoBox" + +#: Title.GW +msgid "Gateway address" +msgstr "Indirizzo del gateway" + +#: Text.IP +msgid "Address" +msgstr "Indirizzo" + +#: Text.NM +msgid "Netmask" +msgstr "Maschera di rete" + +#: Text.GW +msgid "Gateway" +msgstr "Gateway" + +#: Text.DHCP +msgid "Automatic configuration (Caution!)" +msgstr "Configurazione automatica (Attenzione!)" + +#: Button.Network +msgid "Change server address" +msgstr "Modifica l'indirizzo del server" + +#: Button.Gateway +msgid "Change default gateway" +msgstr "Modifica il gateway predefinito" + +#: Help.Network +msgid "Insert the network address of the CryptoBox server, the network mask and the default gateway. Be aware that you may lose your connection to the server under some circumstances. The actual values are visible in the form fields." +msgstr "Inserire l'indirizzo di rete del server CryptoBox, la maschera di rete e il gateway predefinito. Prestare attenzione al fatto che in alcune circostanze è possibile perdere la connessione col server. I valori attuali sono visibili nei campi." + +#: Help.Gateway +msgid "If you have a gateway in your LAN and want to make use of it, type it's address in here. It will be added as default route. A quadruple of zeros means, there is no gateway set." +msgstr "Se nella rete locale è presente un gateway e si intende utilizzarlo, inserire l'indirizzo, che sarà aggiunto alla route predefinita. Il valore '0.0.0.0' significa che non c'è alcun gateway impostato." + +#: Help.DHCP +msgid "If you enable automatic network configuration make sure you have a well configured DHCP server running. All values will be overridden by the settings from the DHCP server. If you don't know what DHCP means leave this box unchecked." +msgstr "Se si attiva la configurazione automatica della rete accertarsi della presenza di un server DHCP funzionante. Tutti i parametri saranno sovrascritti con le impostazioni ricevute dal server DHCP. Se non si sa cos'è il DHCP non impostare questa opzione." + +#: WarningMessage.AddressChangeFailed.Title +msgid "Failure" +msgstr "Errore" + +#: WarningMessage.AddressChangeFailed.Text +msgid "The address of the CryptoBox server could not be changed." +msgstr "Non è stato possibile modificare l'indirizzo del server CryptoBox." + +#: WarningMessage.GatewayChangeFailed.Text +msgid "The gateway of the CryptoBox server could not be set. Maybe the address you entered is unreachable?" +msgstr "Il gateway del server CryptoBox non può essere impostato. Accertarsi che l'indirizzo inserito sia corretto e raggiungibile." + +#: WarningMessage.InvalidServerIP.Title +msgid "Invalid value" +msgstr "Valore non valido" + +#: WarningMessage.InvalidServerIP.Text +msgid "The server address is not valid." +msgstr "L'indirizzo del server inserito non è valido." + +#: WarningMessage.InvalidNetmask.Text +msgid "The netmask is not valid." +msgstr "La maschera di rete non è valida." + +#: WarningMessage.InvalidGatewayIP.Text +msgid "The gateway address is not valid." +msgstr "L'indirizzo del gateway non è valido." + +#: SuccessMessage.IPChanged.Title +msgid "Network address changed" +msgstr "Indirizzo di rete modificato" + +#: SuccessMessage.IPChanged.Text +msgid "The network address has been changed. In a few seconds you will get redirected to the new address." +msgstr "L'indirizzo di rete è stato modificato. In pochi secondi si verrà rediretti al nuovo indirizzo." + +#: SuccessMessage.GWChanged.Title +msgid "Gateway address changed" +msgstr "Indirizzo del gateway modificato" + +#: SuccessMessage.GWChanged.Text +msgid "The gateway was added to your default route." +msgstr "Il gateway è stato aggiunto alla route predefinita." + +#: EnvironmentWarning.MissingProgramIfconfig.Title +msgid "Missing program" +msgstr "Programma mancante" + +#: EnvironmentWarning.MissingProgramIfconfig.Text +msgid "The 'ifconfig' program is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "Il programma 'ifconfig' non è installato. Rivolgersi all'amministratore del server CryptoBox per installarlo e configurarlo opportunamente." + +#: EnvironmentWarning.MissingProgramRoute.Text +msgid "The 'route' program is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "Il programma 'route' non è installato. Rivolgersi all'amministratore del server CryptoBox per installarlo e configurarlo opportunamente." diff --git a/v0.3.4.5/plugins/network/intl/ja/cryptobox-server-feature-network.po b/v0.3.4.5/plugins/network/intl/ja/cryptobox-server-feature-network.po new file mode 100644 index 0000000..b93e0e2 --- /dev/null +++ b/v0.3.4.5/plugins/network/intl/ja/cryptobox-server-feature-network.po @@ -0,0 +1,125 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-07 09:21+0100\n" +"PO-Revision-Date: 2007-02-24 02:31+0100\n" +"Last-Translator: kinneko \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Configure network" +msgstr "ネットワーク設定" + +#: Link +msgid "Network" +msgstr "ネットワーク" + +#: Title +msgid "Network settings" +msgstr "ネットワーク設定" + +#: Title.IP +msgid "CryptoBox server IP" +msgstr "クリプトボックスサーバーのIPアドレス" + +#: Title.GW +msgid "Gateway address" +msgstr "ゲイトウエイアドレス" + +#: Text.IP +msgid "Address" +msgstr "IPアドレス" + +#: Text.NM +msgid "Netmask" +msgstr "ネットマスク" + +#: Text.GW +msgid "Gateway" +msgstr "ゲイトウエイ" + +#: Text.DHCP +msgid "Automatic configuration (Caution!)" +msgstr "自動設定(DHCP) 注意!" + +#: Button.Network +msgid "Change server address" +msgstr "サーバーのIPアドレス変更" + +#: Button.Gateway +msgid "Change default gateway" +msgstr "デフォルトゲイトウエイの変更" + +#: Help.Network +msgid "Insert the network address of the CryptoBox server, the network mask and the default gateway. Be aware that you may lose your connection to the server under some circumstances. The actual values are visible in the form fields." +msgstr "CryptoBoxサーバーのIPアドレス、ネットマスク、デフォルトゲートウェイを設定してください。いくつかの条件のもとでは、うまく接続ができなくなる可能性があります。現在有効な値は、各項目に表示されています。" + +#: Help.Gateway +msgid "If you have a gateway in your LAN and want to make use of it, type it's address in here. It will be added as default route. A quadruple of zeros means, there is no gateway set." +msgstr "ネットワークが他のネットワークと接続している場合は、ゲイトウエイのアドレスを設定してください。設定されたアドレスは、デフォルトルートに追加されます。すべての値がゼロである場合は、ゲイトウエイは設定されません。" + +#: Help.DHCP +msgid "If you enable automatic network configuration make sure you have a well configured DHCP server running. All values will be overridden by the settings from the DHCP server. If you don't know what DHCP means leave this box unchecked." +msgstr "ネットワークにDHCPサーバーがあって、アドレスの解決を自動にしたい場合は有効にしてください。設定されているすべての値は、DHCPサーバーの通知する値で上書きされます。DHCPの意味がわからない場合は、設定しないでください。" + +#: WarningMessage.AddressChangeFailed.Title +msgid "Failure" +msgstr "失敗しました" + +#: WarningMessage.AddressChangeFailed.Text +msgid "The address of the CryptoBox server could not be changed." +msgstr "クリプトボックスサーバーのIPアドレスを変更することができませんでした。" + +#: WarningMessage.GatewayChangeFailed.Text +msgid "The gateway of the CryptoBox server could not be set. Maybe the address you entered is unreachable?" +msgstr "クリプトボックスサーバーのゲイトウエイを設定できませんでした。指定されたアドレスは有効でない可能性があります。" + +#: WarningMessage.InvalidServerIP.Title +msgid "Invalid value" +msgstr "無効な値です" + +#: WarningMessage.InvalidServerIP.Text +msgid "The server address is not valid." +msgstr "サーバーのIPアドレスは無効な値です。" + +#: WarningMessage.InvalidNetmask.Text +msgid "The netmask is not valid." +msgstr "ネットマスクは無効な値です。" + +#: WarningMessage.InvalidGatewayIP.Text +msgid "The gateway address is not valid." +msgstr "ゲイトウエイは無効な値です。" + +#: SuccessMessage.IPChanged.Title +msgid "Network address changed" +msgstr "IPアドレスを変更しました" + +#: SuccessMessage.IPChanged.Text +msgid "The network address has been changed. In a few seconds you will get redirected to the new address." +msgstr "IPアドレスは変更されました。数秒後に自動的に変更したアドレスの設定画面に移動します。" + +#: SuccessMessage.GWChanged.Title +msgid "Gateway address changed" +msgstr "ゲイトウエイを変更しました" + +#: SuccessMessage.GWChanged.Text +msgid "The gateway was added to your default route." +msgstr "ゲイトウエイをデフォルトルートに追加しました。" + +#: EnvironmentWarning.MissingProgramIfconfig.Title +msgid "Missing program" +msgstr "設定用のプログラムがありません" + +#: EnvironmentWarning.MissingProgramIfconfig.Text +msgid "The 'ifconfig' program is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "'ifconfig'プログラムがインストールされていないようです。クリプトボックスサーバーの管理者にインストールを依頼してください。" + +#: EnvironmentWarning.MissingProgramRoute.Text +msgid "The 'route' program is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "'route'プログラムがインストールされていないようです。クリプトボックスサーバーの管理者にインストールを依頼してください。" diff --git a/v0.3.4.5/plugins/network/intl/nl/cryptobox-server-feature-network.po b/v0.3.4.5/plugins/network/intl/nl/cryptobox-server-feature-network.po new file mode 100644 index 0000000..de1f68e --- /dev/null +++ b/v0.3.4.5/plugins/network/intl/nl/cryptobox-server-feature-network.po @@ -0,0 +1,126 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-07 09:21+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Configure network" +msgstr "" + +#: Link +msgid "Network" +msgstr "" + +#: Title +msgid "Network settings" +msgstr "" + +#: Title.IP +msgid "CryptoBox server IP" +msgstr "" + +#: Title.GW +msgid "Gateway address" +msgstr "" + +#: Text.IP +msgid "Address" +msgstr "" + +#: Text.NM +msgid "Netmask" +msgstr "" + +#: Text.GW +msgid "Gateway" +msgstr "" + +#: Text.DHCP +msgid "Automatic configuration (Caution!)" +msgstr "" + +#: Button.Network +msgid "Change server address" +msgstr "" + +#: Button.Gateway +msgid "Change default gateway" +msgstr "" + +#: Help.Network +msgid "Insert the network address of the CryptoBox server, the network mask and the default gateway. Be aware that you may lose your connection to the server under some circumstances. The actual values are visible in the form fields." +msgstr "" + +#: Help.Gateway +msgid "If you have a gateway in your LAN and want to make use of it, type it's address in here. It will be added as default route. A quadruple of zeros means, there is no gateway set." +msgstr "" + +#: Help.DHCP +msgid "If you enable automatic network configuration make sure you have a well configured DHCP server running. All values will be overridden by the settings from the DHCP server. If you don't know what DHCP means leave this box unchecked." +msgstr "" + +#: WarningMessage.AddressChangeFailed.Title +msgid "Failure" +msgstr "" + +#: WarningMessage.AddressChangeFailed.Text +msgid "The address of the CryptoBox server could not be changed." +msgstr "" + +#: WarningMessage.GatewayChangeFailed.Text +msgid "The gateway of the CryptoBox server could not be set. Maybe the address you entered is unreachable?" +msgstr "" + +#: WarningMessage.InvalidServerIP.Title +msgid "Invalid value" +msgstr "" + +#: WarningMessage.InvalidServerIP.Text +msgid "The server address is not valid." +msgstr "" + +#: WarningMessage.InvalidNetmask.Text +msgid "The netmask is not valid." +msgstr "" + +#: WarningMessage.InvalidGatewayIP.Text +msgid "The gateway address is not valid." +msgstr "" + +#: SuccessMessage.IPChanged.Title +msgid "Network address changed" +msgstr "" + +#: SuccessMessage.IPChanged.Text +msgid "The network address has been changed. In a few seconds you will get redirected to the new address." +msgstr "" + +#: SuccessMessage.GWChanged.Title +msgid "Gateway address changed" +msgstr "" + +#: SuccessMessage.GWChanged.Text +msgid "The gateway was added to your default route." +msgstr "" + +#: EnvironmentWarning.MissingProgramIfconfig.Title +msgid "Missing program" +msgstr "" + +#: EnvironmentWarning.MissingProgramIfconfig.Text +msgid "The 'ifconfig' program is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "" + +#: EnvironmentWarning.MissingProgramRoute.Text +msgid "The 'route' program is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "" diff --git a/v0.3.4.5/plugins/network/intl/pl/cryptobox-server-feature-network.po b/v0.3.4.5/plugins/network/intl/pl/cryptobox-server-feature-network.po new file mode 100644 index 0000000..13000d8 --- /dev/null +++ b/v0.3.4.5/plugins/network/intl/pl/cryptobox-server-feature-network.po @@ -0,0 +1,125 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-04-01 15:55+0200\n" +"PO-Revision-Date: 2007-03-29 10:17+0200\n" +"Last-Translator: Andrzej S. Kaznowski \n" +"Language-Team: POLSKI \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Configure network" +msgstr "Konfiguruj sieć" + +#: Link +msgid "Network" +msgstr "Sieć" + +#: Title +msgid "Network settings" +msgstr "Ustawienia sieci" + +#: Title.IP +msgid "CryptoBox server IP" +msgstr "Numer IP serwera CryptoBox" + +#: Title.GW +msgid "Gateway address" +msgstr "Adres bramki" + +#: Text.IP +msgid "Address" +msgstr "Adres" + +#: Text.NM +msgid "Netmask" +msgstr "Maska sieciowa" + +#: Text.GW +msgid "Gateway" +msgstr "Bramka" + +#: Text.DHCP +msgid "Automatic configuration (Caution!)" +msgstr "Konfiguruj automatycznie (Uwaga!)" + +#: Button.Network +msgid "Change server address" +msgstr "Zmień adres serwera" + +#: Button.Gateway +msgid "Change default gateway" +msgstr "Zmień domyślną bramkę" + +#: Help.Network +msgid "Insert the network address of the CryptoBox server, the network mask and the default gateway. Be aware that you may lose your connection to the server under some circumstances. The actual values are visible in the form fields." +msgstr "Wpisz adres sieci serwera CryptoBox, maski sieciowej i domyślnej bramki. Weź pod uwagę, że możesz stracić połączenie z serwerem. Aktualne parametry są domyślnie wyświetlone w polach." + +#: Help.Gateway +msgid "If you have a gateway in your LAN and want to make use of it, type it's address in here. It will be added as default route. A quadruple of zeros means, there is no gateway set." +msgstr "Jeśli masz bramkę w twojej lokalnej sieci i chcesz jej użyć, wpisz jej adres tutaj. Będzie dodany jako domyślna bramka. Cztery zera oznaczają, że nie wpisano żadnej bramki." + +#: Help.DHCP +msgid "If you enable automatic network configuration make sure you have a well configured DHCP server running. All values will be overridden by the settings from the DHCP server. If you don't know what DHCP means leave this box unchecked." +msgstr "Jeśli włączasz automatyczną konfigurację sieci, upewnij się, że twój serwer DHCP działa poprawnie. Wszystkie dane zostaną zastąpione danymi z serwera DHCP. Jeśli nie wiesz, co oznacza DHCP, pozostaw to pole niezaznaczone." + +#: WarningMessage.AddressChangeFailed.Title +msgid "Failure" +msgstr "Błąd" + +#: WarningMessage.AddressChangeFailed.Text +msgid "The address of the CryptoBox server could not be changed." +msgstr "Nie można zmienić adresu serwera CryptoBox." + +#: WarningMessage.GatewayChangeFailed.Text +msgid "The gateway of the CryptoBox server could not be set. Maybe the address you entered is unreachable?" +msgstr "Nie można ustlić bramki serwera CryptoBox. Może wpisany przez ciebie adres jest niedostępny." + +#: WarningMessage.InvalidServerIP.Title +msgid "Invalid value" +msgstr "Nieprawidłowe dane" + +#: WarningMessage.InvalidServerIP.Text +msgid "The server address is not valid." +msgstr "Nieprawidłowy adres serwera." + +#: WarningMessage.InvalidNetmask.Text +msgid "The netmask is not valid." +msgstr "Nieprawidłowa maska sieciowa." + +#: WarningMessage.InvalidGatewayIP.Text +msgid "The gateway address is not valid." +msgstr "Nieprawidłowy adres bramki." + +#: SuccessMessage.IPChanged.Title +msgid "Network address changed" +msgstr "Zmieniono adres sieciowy" + +#: SuccessMessage.IPChanged.Text +msgid "The network address has been changed. In a few seconds you will get redirected to the new address." +msgstr "Zmieniono adres sieciowy. Za chwilę zostaniesz przekierowany na nowy adres." + +#: SuccessMessage.GWChanged.Title +msgid "Gateway address changed" +msgstr "Zmieniono adres bramki" + +#: SuccessMessage.GWChanged.Text +msgid "The gateway was added to your default route." +msgstr "Dodano bramkę do domyślnej trasy." + +#: EnvironmentWarning.MissingProgramIfconfig.Title +msgid "Missing program" +msgstr "Brak programu" + +#: EnvironmentWarning.MissingProgramIfconfig.Text +msgid "The 'ifconfig' program is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "Program 'ifconfig' nie jest instalowany. Proszę zwrócić się do administratora serwera CryptoBox, aby prawidłowo skonfigurał go." + +#: EnvironmentWarning.MissingProgramRoute.Text +msgid "The 'route' program is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "Program 'route' nie jest instalowany. Proszę zwrócić się do administratora serwera CryptoBox, aby prawidłowo skonfigurał go." diff --git a/v0.3.4.5/plugins/network/intl/pt/cryptobox-server-feature-network.po b/v0.3.4.5/plugins/network/intl/pt/cryptobox-server-feature-network.po new file mode 100644 index 0000000..de1f68e --- /dev/null +++ b/v0.3.4.5/plugins/network/intl/pt/cryptobox-server-feature-network.po @@ -0,0 +1,126 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-07 09:21+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Configure network" +msgstr "" + +#: Link +msgid "Network" +msgstr "" + +#: Title +msgid "Network settings" +msgstr "" + +#: Title.IP +msgid "CryptoBox server IP" +msgstr "" + +#: Title.GW +msgid "Gateway address" +msgstr "" + +#: Text.IP +msgid "Address" +msgstr "" + +#: Text.NM +msgid "Netmask" +msgstr "" + +#: Text.GW +msgid "Gateway" +msgstr "" + +#: Text.DHCP +msgid "Automatic configuration (Caution!)" +msgstr "" + +#: Button.Network +msgid "Change server address" +msgstr "" + +#: Button.Gateway +msgid "Change default gateway" +msgstr "" + +#: Help.Network +msgid "Insert the network address of the CryptoBox server, the network mask and the default gateway. Be aware that you may lose your connection to the server under some circumstances. The actual values are visible in the form fields." +msgstr "" + +#: Help.Gateway +msgid "If you have a gateway in your LAN and want to make use of it, type it's address in here. It will be added as default route. A quadruple of zeros means, there is no gateway set." +msgstr "" + +#: Help.DHCP +msgid "If you enable automatic network configuration make sure you have a well configured DHCP server running. All values will be overridden by the settings from the DHCP server. If you don't know what DHCP means leave this box unchecked." +msgstr "" + +#: WarningMessage.AddressChangeFailed.Title +msgid "Failure" +msgstr "" + +#: WarningMessage.AddressChangeFailed.Text +msgid "The address of the CryptoBox server could not be changed." +msgstr "" + +#: WarningMessage.GatewayChangeFailed.Text +msgid "The gateway of the CryptoBox server could not be set. Maybe the address you entered is unreachable?" +msgstr "" + +#: WarningMessage.InvalidServerIP.Title +msgid "Invalid value" +msgstr "" + +#: WarningMessage.InvalidServerIP.Text +msgid "The server address is not valid." +msgstr "" + +#: WarningMessage.InvalidNetmask.Text +msgid "The netmask is not valid." +msgstr "" + +#: WarningMessage.InvalidGatewayIP.Text +msgid "The gateway address is not valid." +msgstr "" + +#: SuccessMessage.IPChanged.Title +msgid "Network address changed" +msgstr "" + +#: SuccessMessage.IPChanged.Text +msgid "The network address has been changed. In a few seconds you will get redirected to the new address." +msgstr "" + +#: SuccessMessage.GWChanged.Title +msgid "Gateway address changed" +msgstr "" + +#: SuccessMessage.GWChanged.Text +msgid "The gateway was added to your default route." +msgstr "" + +#: EnvironmentWarning.MissingProgramIfconfig.Title +msgid "Missing program" +msgstr "" + +#: EnvironmentWarning.MissingProgramIfconfig.Text +msgid "The 'ifconfig' program is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "" + +#: EnvironmentWarning.MissingProgramRoute.Text +msgid "The 'route' program is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "" diff --git a/v0.3.4.5/plugins/network/intl/ru/cryptobox-server-feature-network.po b/v0.3.4.5/plugins/network/intl/ru/cryptobox-server-feature-network.po new file mode 100644 index 0000000..de1f68e --- /dev/null +++ b/v0.3.4.5/plugins/network/intl/ru/cryptobox-server-feature-network.po @@ -0,0 +1,126 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-07 09:21+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Configure network" +msgstr "" + +#: Link +msgid "Network" +msgstr "" + +#: Title +msgid "Network settings" +msgstr "" + +#: Title.IP +msgid "CryptoBox server IP" +msgstr "" + +#: Title.GW +msgid "Gateway address" +msgstr "" + +#: Text.IP +msgid "Address" +msgstr "" + +#: Text.NM +msgid "Netmask" +msgstr "" + +#: Text.GW +msgid "Gateway" +msgstr "" + +#: Text.DHCP +msgid "Automatic configuration (Caution!)" +msgstr "" + +#: Button.Network +msgid "Change server address" +msgstr "" + +#: Button.Gateway +msgid "Change default gateway" +msgstr "" + +#: Help.Network +msgid "Insert the network address of the CryptoBox server, the network mask and the default gateway. Be aware that you may lose your connection to the server under some circumstances. The actual values are visible in the form fields." +msgstr "" + +#: Help.Gateway +msgid "If you have a gateway in your LAN and want to make use of it, type it's address in here. It will be added as default route. A quadruple of zeros means, there is no gateway set." +msgstr "" + +#: Help.DHCP +msgid "If you enable automatic network configuration make sure you have a well configured DHCP server running. All values will be overridden by the settings from the DHCP server. If you don't know what DHCP means leave this box unchecked." +msgstr "" + +#: WarningMessage.AddressChangeFailed.Title +msgid "Failure" +msgstr "" + +#: WarningMessage.AddressChangeFailed.Text +msgid "The address of the CryptoBox server could not be changed." +msgstr "" + +#: WarningMessage.GatewayChangeFailed.Text +msgid "The gateway of the CryptoBox server could not be set. Maybe the address you entered is unreachable?" +msgstr "" + +#: WarningMessage.InvalidServerIP.Title +msgid "Invalid value" +msgstr "" + +#: WarningMessage.InvalidServerIP.Text +msgid "The server address is not valid." +msgstr "" + +#: WarningMessage.InvalidNetmask.Text +msgid "The netmask is not valid." +msgstr "" + +#: WarningMessage.InvalidGatewayIP.Text +msgid "The gateway address is not valid." +msgstr "" + +#: SuccessMessage.IPChanged.Title +msgid "Network address changed" +msgstr "" + +#: SuccessMessage.IPChanged.Text +msgid "The network address has been changed. In a few seconds you will get redirected to the new address." +msgstr "" + +#: SuccessMessage.GWChanged.Title +msgid "Gateway address changed" +msgstr "" + +#: SuccessMessage.GWChanged.Text +msgid "The gateway was added to your default route." +msgstr "" + +#: EnvironmentWarning.MissingProgramIfconfig.Title +msgid "Missing program" +msgstr "" + +#: EnvironmentWarning.MissingProgramIfconfig.Text +msgid "The 'ifconfig' program is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "" + +#: EnvironmentWarning.MissingProgramRoute.Text +msgid "The 'route' program is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "" diff --git a/v0.3.4.5/plugins/network/intl/sl/cryptobox-server-feature-network.po b/v0.3.4.5/plugins/network/intl/sl/cryptobox-server-feature-network.po new file mode 100644 index 0000000..83eb6c2 --- /dev/null +++ b/v0.3.4.5/plugins/network/intl/sl/cryptobox-server-feature-network.po @@ -0,0 +1,125 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-07 09:21+0100\n" +"PO-Revision-Date: 2007-02-09 14:25+0100\n" +"Last-Translator: tenzin \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Configure network" +msgstr "Mrežna konfiguracija" + +#: Link +msgid "Network" +msgstr "Mreža" + +#: Title +msgid "Network settings" +msgstr "Mrežne nastavitve" + +#: Title.IP +msgid "CryptoBox server IP" +msgstr "CryptoBox server IP" + +#: Title.GW +msgid "Gateway address" +msgstr "Naslov prehoda" + +#: Text.IP +msgid "Address" +msgstr "Naslov" + +#: Text.NM +msgid "Netmask" +msgstr "Omrežna maska" + +#: Text.GW +msgid "Gateway" +msgstr "Prehod" + +#: Text.DHCP +msgid "Automatic configuration (Caution!)" +msgstr "Samodejna konfiguracija (opozorilo!)" + +#: Button.Network +msgid "Change server address" +msgstr "Spremeni naslov strežnika" + +#: Button.Gateway +msgid "Change default gateway" +msgstr "Spremeni privzet prehod" + +#: Help.Network +msgid "Insert the network address of the CryptoBox server, the network mask and the default gateway. Be aware that you may lose your connection to the server under some circumstances. The actual values are visible in the form fields." +msgstr "Vstavi nov mrežni naslov Cryptobox strežnika, mrežne maske in naslov privzetega prehoda. Vedi, da lahko izgubiš povezavo s strežnikom, (pod nekimi pogoji). Dejanske vrednosti so vidne v polju obrazci. " + +#: Help.Gateway +msgid "If you have a gateway in your LAN and want to make use of it, type it's address in here. It will be added as default route. A quadruple of zeros means, there is no gateway set." +msgstr "Če imate ustvarjen prehod v LAN, in ga želite uporabiti, potem sem vpišite ta naslov. Dodan bo kot privzeta smer. Ničle označujejo, da prehos ni ustvarjen " + +#: Help.DHCP +msgid "If you enable automatic network configuration make sure you have a well configured DHCP server running. All values will be overridden by the settings from the DHCP server. If you don't know what DHCP means leave this box unchecked." +msgstr "V kolikor omogočite samodejno (avtomatično) mrežno konfiguracijo, se prepričajte, da imate dobro konfiguriran DHCP strežnik. Vse vrednosti bodo povožene z nastavitvami DHCP strežnika. Če ne veste kaj pomeni DHCP, pustite to polje neoznačeno." + +#: WarningMessage.AddressChangeFailed.Title +msgid "Failure" +msgstr "Napaka" + +#: WarningMessage.AddressChangeFailed.Text +msgid "The address of the CryptoBox server could not be changed." +msgstr "Naslov Crytobox strežnika ne more biti spremenjen" + +#: WarningMessage.GatewayChangeFailed.Text +msgid "The gateway of the CryptoBox server could not be set. Maybe the address you entered is unreachable?" +msgstr "Prehod preko Cryptobox strežnika na more biti vzpostavljen. Morda ste vnesli naslov, ki ni na voljo?" + +#: WarningMessage.InvalidServerIP.Title +msgid "Invalid value" +msgstr "Neveljavna vrednost" + +#: WarningMessage.InvalidServerIP.Text +msgid "The server address is not valid." +msgstr "Naslov strežnika ni veljaven" + +#: WarningMessage.InvalidNetmask.Text +msgid "The netmask is not valid." +msgstr "Mrežna maska ni veljavna" + +#: WarningMessage.InvalidGatewayIP.Text +msgid "The gateway address is not valid." +msgstr "Naslov prehoda ni veljaven" + +#: SuccessMessage.IPChanged.Title +msgid "Network address changed" +msgstr "Mrežni naslov spremenjen." + +#: SuccessMessage.IPChanged.Text +msgid "The network address has been changed. In a few seconds you will get redirected to the new address." +msgstr "Mrežni naslov je bil spremenjen. the CryptoBox server. V nekaj sekundah boste preusmerjeni na novi naslov." + +#: SuccessMessage.GWChanged.Title +msgid "Gateway address changed" +msgstr "Naslov prehoda spremenjen" + +#: SuccessMessage.GWChanged.Text +msgid "The gateway was added to your default route." +msgstr "Prehod je dodan privzeti smeri" + +#: EnvironmentWarning.MissingProgramIfconfig.Title +msgid "Missing program" +msgstr "Manjka program" + +#: EnvironmentWarning.MissingProgramIfconfig.Text +msgid "The 'ifconfig' program is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "\"Ifconfig\" program ni nameščen. Prosite administratorja Cryptobox strežnika naj ga pravilno namesti" + +#: EnvironmentWarning.MissingProgramRoute.Text +msgid "The 'route' program is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "Program \"smer\" ni nameščen. Prosite administratorja Cryptobox strežnika naj ga pravilno namesti." diff --git a/v0.3.4.5/plugins/network/intl/sv/cryptobox-server-feature-network.po b/v0.3.4.5/plugins/network/intl/sv/cryptobox-server-feature-network.po new file mode 100644 index 0000000..de1f68e --- /dev/null +++ b/v0.3.4.5/plugins/network/intl/sv/cryptobox-server-feature-network.po @@ -0,0 +1,126 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-07 09:21+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Configure network" +msgstr "" + +#: Link +msgid "Network" +msgstr "" + +#: Title +msgid "Network settings" +msgstr "" + +#: Title.IP +msgid "CryptoBox server IP" +msgstr "" + +#: Title.GW +msgid "Gateway address" +msgstr "" + +#: Text.IP +msgid "Address" +msgstr "" + +#: Text.NM +msgid "Netmask" +msgstr "" + +#: Text.GW +msgid "Gateway" +msgstr "" + +#: Text.DHCP +msgid "Automatic configuration (Caution!)" +msgstr "" + +#: Button.Network +msgid "Change server address" +msgstr "" + +#: Button.Gateway +msgid "Change default gateway" +msgstr "" + +#: Help.Network +msgid "Insert the network address of the CryptoBox server, the network mask and the default gateway. Be aware that you may lose your connection to the server under some circumstances. The actual values are visible in the form fields." +msgstr "" + +#: Help.Gateway +msgid "If you have a gateway in your LAN and want to make use of it, type it's address in here. It will be added as default route. A quadruple of zeros means, there is no gateway set." +msgstr "" + +#: Help.DHCP +msgid "If you enable automatic network configuration make sure you have a well configured DHCP server running. All values will be overridden by the settings from the DHCP server. If you don't know what DHCP means leave this box unchecked." +msgstr "" + +#: WarningMessage.AddressChangeFailed.Title +msgid "Failure" +msgstr "" + +#: WarningMessage.AddressChangeFailed.Text +msgid "The address of the CryptoBox server could not be changed." +msgstr "" + +#: WarningMessage.GatewayChangeFailed.Text +msgid "The gateway of the CryptoBox server could not be set. Maybe the address you entered is unreachable?" +msgstr "" + +#: WarningMessage.InvalidServerIP.Title +msgid "Invalid value" +msgstr "" + +#: WarningMessage.InvalidServerIP.Text +msgid "The server address is not valid." +msgstr "" + +#: WarningMessage.InvalidNetmask.Text +msgid "The netmask is not valid." +msgstr "" + +#: WarningMessage.InvalidGatewayIP.Text +msgid "The gateway address is not valid." +msgstr "" + +#: SuccessMessage.IPChanged.Title +msgid "Network address changed" +msgstr "" + +#: SuccessMessage.IPChanged.Text +msgid "The network address has been changed. In a few seconds you will get redirected to the new address." +msgstr "" + +#: SuccessMessage.GWChanged.Title +msgid "Gateway address changed" +msgstr "" + +#: SuccessMessage.GWChanged.Text +msgid "The gateway was added to your default route." +msgstr "" + +#: EnvironmentWarning.MissingProgramIfconfig.Title +msgid "Missing program" +msgstr "" + +#: EnvironmentWarning.MissingProgramIfconfig.Text +msgid "The 'ifconfig' program is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "" + +#: EnvironmentWarning.MissingProgramRoute.Text +msgid "The 'route' program is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "" diff --git a/v0.3.4.5/plugins/network/intl/ur/cryptobox-server-feature-network.po b/v0.3.4.5/plugins/network/intl/ur/cryptobox-server-feature-network.po new file mode 100644 index 0000000..b07b614 --- /dev/null +++ b/v0.3.4.5/plugins/network/intl/ur/cryptobox-server-feature-network.po @@ -0,0 +1,126 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-02-07 09:21+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Configure network" +msgstr "" + +#: Link +msgid "Network" +msgstr "" + +#: Title +msgid "Network settings" +msgstr "" + +#: Title.IP +msgid "CryptoBox server IP" +msgstr "" + +#: Title.GW +msgid "Gateway address" +msgstr "" + +#: Text.IP +msgid "Address" +msgstr "" + +#: Text.NM +msgid "Netmask" +msgstr "" + +#: Text.GW +msgid "Gateway" +msgstr "" + +#: Text.DHCP +msgid "Automatic configuration (Caution!)" +msgstr "" + +#: Button.Network +msgid "Change server address" +msgstr "" + +#: Button.Gateway +msgid "Change default gateway" +msgstr "" + +#: Help.Network +msgid "Insert the network address of the CryptoBox server, the network mask and the default gateway. Be aware that you may lose your connection to the server under some circumstances. The actual values are visible in the form fields." +msgstr "" + +#: Help.Gateway +msgid "If you have a gateway in your LAN and want to make use of it, type it's address in here. It will be added as default route. A quadruple of zeros means, there is no gateway set." +msgstr "" + +#: Help.DHCP +msgid "If you enable automatic network configuration make sure you have a well configured DHCP server running. All values will be overridden by the settings from the DHCP server. If you don't know what DHCP means leave this box unchecked." +msgstr "" + +#: WarningMessage.AddressChangeFailed.Title +msgid "Failure" +msgstr "" + +#: WarningMessage.AddressChangeFailed.Text +msgid "The address of the CryptoBox server could not be changed." +msgstr "" + +#: WarningMessage.GatewayChangeFailed.Text +msgid "The gateway of the CryptoBox server could not be set. Maybe the address you entered is unreachable?" +msgstr "" + +#: WarningMessage.InvalidServerIP.Title +msgid "Invalid value" +msgstr "" + +#: WarningMessage.InvalidServerIP.Text +msgid "The server address is not valid." +msgstr "" + +#: WarningMessage.InvalidNetmask.Text +msgid "The netmask is not valid." +msgstr "" + +#: WarningMessage.InvalidGatewayIP.Text +msgid "The gateway address is not valid." +msgstr "" + +#: SuccessMessage.IPChanged.Title +msgid "Network address changed" +msgstr "" + +#: SuccessMessage.IPChanged.Text +msgid "The network address has been changed. In a few seconds you will get redirected to the new address." +msgstr "" + +#: SuccessMessage.GWChanged.Title +msgid "Gateway address changed" +msgstr "" + +#: SuccessMessage.GWChanged.Text +msgid "The gateway was added to your default route." +msgstr "" + +#: EnvironmentWarning.MissingProgramIfconfig.Title +msgid "Missing program" +msgstr "" + +#: EnvironmentWarning.MissingProgramIfconfig.Text +msgid "The 'ifconfig' program is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "" + +#: EnvironmentWarning.MissingProgramRoute.Text +msgid "The 'route' program is not installed. Please ask the administrator of the CryptoBox server to configure it properly." +msgstr "" diff --git a/v0.3.4.5/plugins/network/language.hdf b/v0.3.4.5/plugins/network/language.hdf new file mode 100644 index 0000000..6115809 --- /dev/null +++ b/v0.3.4.5/plugins/network/language.hdf @@ -0,0 +1,83 @@ +Name = Configure network +Link = Network + +Title = Network settings +Title { + IP = CryptoBox server IP + GW = Gateway address +} + +Text { + IP = Address + NM = Netmask + GW = Gateway + DHCP = Automatic configuration (Caution!) +} + +Button { + Network = Change server address + Gateway = Change default gateway +} + +Help { + Network = Insert the network address of the CryptoBox server, the network mask and the default gateway. Be aware that you may lose your connection to the server under some circumstances. The actual values are visible in the form fields. + Gateway = If you have a gateway in your LAN and want to make use of it, type it's address in here. It will be added as default route. A quadruple of zeros means, there is no gateway set. + DHCP = If you enable automatic network configuration make sure you have a well configured DHCP server running. All values will be overridden by the settings from the DHCP server. If you don't know what DHCP means leave this box unchecked. +} + +WarningMessage { + AddressChangeFailed { + Title = Failure + Text = The address of the CryptoBox server could not be changed. + } + + GatewayChangeFailed { + Title = Failure + Text = The gateway of the CryptoBox server could not be set. Maybe the address you entered is unreachable? + } + + InvalidServerIP { + Title = Invalid value + Text = The server address is not valid. + } + + InvalidNetmask { + Title = Invalid value + Text = The netmask is not valid. + } + + InvalidGatewayIP { + Title = Invalid value + Text = The gateway address is not valid. + } +} + +SuccessMessage { + IPChanged { + Title = Network address changed + Text = The network address has been changed. In a few seconds you will get redirected to the new address. + } + GWChanged { + Title = Gateway address changed + Text = The gateway was added to your default route. + } +} + +EnvironmentWarning { + MissingProgramIfconfig { + Title = Missing program + Text = The 'ifconfig' program is not installed. Please ask the administrator of the CryptoBox server to install it. + } + + + MissingProgramIfconfig { + Title = Missing program + Text = The 'ifconfig' program is not installed. Please ask the administrator of the CryptoBox server to configure it properly. + } + + MissingProgramRoute { + Title = Missing program + Text = The 'route' program is not installed. Please ask the administrator of the CryptoBox server to configure it properly. + } +} + diff --git a/v0.3.4.5/plugins/network/network.css b/v0.3.4.5/plugins/network/network.css new file mode 100644 index 0000000..cc7ca11 --- /dev/null +++ b/v0.3.4.5/plugins/network/network.css @@ -0,0 +1,8 @@ +input.ipnum { + text-align: center; +} + +#words p { + text-align: left; +} + diff --git a/v0.3.4.5/plugins/network/network.py b/v0.3.4.5/plugins/network/network.py new file mode 100644 index 0000000..b59990a --- /dev/null +++ b/v0.3.4.5/plugins/network/network.py @@ -0,0 +1,356 @@ +# +# Copyright 2006 sense.lab e.V. +# +# This file is part of the CryptoBox. +# +# The CryptoBox 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 CryptoBox 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 the CryptoBox; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +"""The network feature of the CryptoBox. + +requires: + - ifconfig + - route +""" + +__revision__ = "$Id" + +import subprocess +import os +import cryptobox.plugins.base + + +## specify (in seconds), how long we should wait before redirecting and ip change +REDIRECT_DELAY = 10 +CHANGE_IP_DELAY = 5 +## default network interface (if none is given via cryptobox.conf) +DEFAULT_INTERFACE = "eth0" + +class network(cryptobox.plugins.base.CryptoBoxPlugin): + """The network feature of the CryptoBox. + """ + + plugin_capabilities = [ "system" ] + plugin_visibility = [ "preferences" ] + request_auth = True + rank = 30 + + def do_action(self, store=None, redirected="", ip1="", ip2="", ip3="", ip4="", + nm1="", nm2="", nm3="", nm4=""): + """Show a form containing the current IP - change it if requested. + """ + ## if we were redirected, then we should display the default page + self.cbox.log.debug("executing network plugin") + if redirected == "1": + self.cbox.log.debug("network plugin: redirected") + return "form_network" + ## check possible actions + if store is None: + ## no action was requested -> just show the form + self.cbox.log.debug("network plugin: show form (interface %s)" \ + % self.__get_interface()) + self.__prepare_form_data() + return "form_network" + ## change of ip address and/or netmask requested + elif store == "set_ip": + self.cbox.log.debug("network plugin: changing server IP") + if self.__IP_is_valid(ip1, ip2, ip3, ip4): + new_ip = "%d.%d.%d.%d" % (int(ip1), int(ip2), int(ip3), int(ip4)) + else: + self.hdf["Data.Warning"] = "Plugins.network.InvalidServerIP" + self.__prepare_form_data() + return "form_network" + if self.__IP_is_valid(nm1, nm2, nm3, nm4): + new_nm = "%d.%d.%d.%d" % (int(nm1), int(nm2), int(nm3), int(nm4)) + else: + self.hdf["Data.Warning"] = "Plugins.network.InvalidNetmask" + self.__prepare_form_data() + return "form_network" + if self.__set_ip(new_ip, new_nm): + self.cbox.log.info("[network] the IP was successfully changed: %s" % new_ip) + self.hdf["Data.Success"] = "Plugins.network.IPChanged" + self.hdf["Data.Redirect.URL"] = self.__get_redirect_destination(new_ip) + self.hdf["Data.Redirect.Delay"] = REDIRECT_DELAY + self.prefs["_address"] = new_ip + self.prefs["_netmask"] = new_nm + try: + self.cbox.prefs.plugin_conf.write() + except IOError: + self.cbox.log.warn("Could not write plugin configuration") + self.__prepare_form_data() + return "empty" + else: + self.cbox.log.warn("[network] failed to change IP address to: %s" % \ + new_ip) + self.hdf["Data.Warning"] = "Plugins.network.AddressChangeFailed" + self.__prepare_form_data() + return "form_network" + ## request for default gateway change + elif store == "set_gateway": + old_gw = self.__get_current_gw() + old_gw_str = ".".join([str(e) for e in old_gw]) + if self.__IP_is_valid(ip1, ip2, ip3, ip4): + new_gw = (int(ip1), int(ip2), int(ip3), int(ip4)) + new_gw_str = ".".join([str(e) for e in new_gw]) + else: + self.hdf["Data.Warning"] = "Plugins.network.InvalidGatewayIP" + self.__prepare_form_data() + return "form_network" + if self.__set_gw(old_gw_str, new_gw_str): + self.cbox.log.info( "[network] successfully changed gateway address:" \ + + new_gw_str) + self.hdf["Data.Success"] = "Plugins.network.GWChanged" + self.prefs["_gateway"] = new_gw_str + try: + self.cbox.prefs.plugin_conf.write() + except IOError: + self.cbox.log.warn("Could not write plugin configuration") + else: + self.cbox.log.warn("[network] failed to change gateway address to: %s" \ + % new_gw_str) + self.hdf["Data.Warning"] = "Plugins.network.GatewayChangeFailed" + self.__prepare_form_data() + return "form_network" + else: + ## invalid action was requested -> show default form + self.cbox.log.debug("network plugin: invalid request (%s)" % str(store)) + self.__prepare_form_data() + return "form_network" + + + def get_status(self): + """The current IP is the status of this feature. + """ + return "%d.%d.%d.%d" % self.__get_current_ip() + + + def handle_event(self, event, event_info=None): + """Override bootup behaviour + + Apply the configured network settings + """ + if event == "bootup": + if "_address" in self.prefs: + if "_netmask" in self.prefs: + self.__set_ip(self.prefs["_address"], self.prefs["_netmask"], delay=0) + else: + ## no netmask setting stored + self.__set_ip(self.prefs["_address"]) + if "_gateway" in self.prefs: + self.__set_gw(".".join([str(e) for e in self.__get_current_gw()]), + self.prefs["_gateway"]) + + + def get_warnings(self): + """Check for missing programs + """ + warnings = [] + if not os.path.isfile(self.root_action.IFCONFIG_BIN): + warnings.append((55, "Plugins.%s.MissingProgramIfconfig" % self.get_name())) + if not os.path.isfile(self.root_action.ROUTE_BIN): + warnings.append((52, "Plugins.%s.MissingProgramRoute" % self.get_name())) + return warnings + + + def __get_redirect_destination(self, ip): + """Put the new URL together. + """ + import cherrypy + req = cherrypy.request + base_parts = req.base.split(":") + dest = "%s://%s" % (base_parts[0], ip) + if len(base_parts) == 3: + dest += ":%s" % base_parts[2] + return dest + + + def __prepare_form_data(self): + """Set some hdf values. + """ + #TODO: the following looks nicer in a loop + (oc1, oc2, oc3, oc4) = self.__get_current_ip("ip") + self.hdf[self.hdf_prefix + "ip.oc1"] = oc1 + self.hdf[self.hdf_prefix + "ip.oc2"] = oc2 + self.hdf[self.hdf_prefix + "ip.oc3"] = oc3 + self.hdf[self.hdf_prefix + "ip.oc4"] = oc4 + (oc1, oc2, oc3, oc4) = self.__get_current_ip("nm") + self.hdf[self.hdf_prefix + "nm.oc1"] = oc1 + self.hdf[self.hdf_prefix + "nm.oc2"] = oc2 + self.hdf[self.hdf_prefix + "nm.oc3"] = oc3 + self.hdf[self.hdf_prefix + "nm.oc4"] = oc4 + (oc1, oc2, oc3, oc4) = self.__get_current_gw() + self.hdf[self.hdf_prefix + "gw.oc1"] = oc1 + self.hdf[self.hdf_prefix + "gw.oc2"] = oc2 + self.hdf[self.hdf_prefix + "gw.oc3"] = oc3 + self.hdf[self.hdf_prefix + "gw.oc4"] = oc4 + + + def __get_current_ip(self, address_type="ip"): + """Retrieve the current IP. + + TODO: do not use "address_type" for ip and netmask, but return both in + two tuples + """ + import re + ## get the current IP of the network interface + proc = subprocess.Popen( + shell = False, + stdout = subprocess.PIPE, + args = [ + self.root_action.IFCONFIG_BIN, + self.__get_interface()]) + (stdout, stderr) = proc.communicate() + if proc.returncode != 0: + return (0, 0, 0, 0) + if address_type == "ip": + ## this regex matches the four numbers of the IP + match = re.search(r'inet [\w]+:(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\s', stdout) + if match: + ## use the previously matched numbers + return tuple([int(e) for e in match.groups()]) + else: + return (0, 0, 0, 0) + elif address_type == "nm": + ## this greps the netmask + match = re.search( + r'inet [\w]+:.*Mask:(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\s', + stdout) + if match: + ## use the previously matched numbers + return tuple([int(e) for e in match.groups()]) + else: + return (0, 0, 0, 0) + + + def __get_current_gw(self): + proc = subprocess.Popen( + shell = False, + stdout = subprocess.PIPE, + stderr = subprocess.PIPE, + args = [ + self.root_action.ROUTE_BIN, + "-n"]) + (stdout, stderr) = proc.communicate() + if proc.returncode != 0: + self.cbox.log.warn( + "[network] failed to retrieve gateway address: %s" % stdout) + return (0, 0, 0, 0) + current_interface = self.__get_interface() + ## skip the first two heading lines + for line in stdout.splitlines()[2:]: + attrs = line.split() + if len(attrs) != 8: + self.cbox.log.info("[network] misformed route entry: %s" % line) + continue + interface = attrs[7] + netmask = attrs[2] + gateway = attrs[1] + destination = attrs[0] + if (destination == "0.0.0.0") and (netmask == "0.0.0.0") and \ + (interface == current_interface): + gw_octet = tuple(gateway.split(".")) + if len(gw_octet) != 4: + self.cbox.log.info( + "[network] ignored invalid gateway setting: %s" % gateway) + else: + return gw_octet + return (0, 0, 0, 0) + + + def __set_ip(self, new_ip, new_nm="255.255.255.0", delay=None): + """Change the IP, additionally a netmask can be applied + """ + import threading + if delay is None: + delay = CHANGE_IP_DELAY + ## call the root_action script after some seconds - so we can deliver the page before + def delayed_ip_change(): + """A threaded function to change the IP. + """ + import time + if delay > 0: + time.sleep(delay) + proc = subprocess.Popen( + shell = False, + stderr = subprocess.PIPE, + args = [ + self.cbox.prefs["Programs"]["super"], + self.cbox.prefs["Programs"]["CryptoBoxRootActions"], + "plugin", + os.path.join(self.plugin_dir, "root_action.py"), + "change_ip", + self.__get_interface(), + new_ip, + new_nm]) + proc.wait() + if proc.returncode != 0: + self.cbox.log.warn("failed to change IP address: %s" % new_ip) + self.cbox.log.warn("error output: %s" % str(proc.stderr.read())) + return + thread = threading.Thread() + thread.run = delayed_ip_change + thread.setDaemon(True) + thread.start() + # TODO: how could we guess, if it failed? + return True + + + def __set_gw(self, old_ip, new_ip): + """Change the gateway IP adress + """ + proc = subprocess.Popen( + shell = False, + stdout = subprocess.PIPE, + stderr = subprocess.PIPE, + args = [ + self.cbox.prefs["Programs"]["super"], + self.cbox.prefs["Programs"]["CryptoBoxRootActions"], + "plugin", + os.path.join(self.plugin_dir, "root_action.py"), + "change_gw", + old_ip, + new_ip]) + (output, error) = proc.communicate() + if proc.returncode != 0: + self.cbox.log.warn("[network] gateway setting failed: %s" % str(error)) + return False + else: + return True + + + def __get_interface(self): + """Return the name of the configured network interface + """ + if "interface" in self.defaults: + return self.defaults["interface"] + else: + return DEFAULT_INTERFACE + + + def __IP_is_valid(self, ip1, ip2, ip3, ip4): + try: + for ip_in in (ip1, ip2, ip3, ip4): + if (int(ip_in) < 0) or (int(ip_in) > 255): + ## we give an info only and a webwarning + ## further reaction depends on the case + self.cbox.log.info("IP number is invalid: %s" % \ + str((ip1, ip2, ip3, ip4))) + raise ValueError + except ValueError: + ## handled by individual caller + #self.hdf["Data.Warning"] = "Plugins.network.InvalidIP" + return False + return True + diff --git a/v0.3.4.5/plugins/network/plugin_icon.gif b/v0.3.4.5/plugins/network/plugin_icon.gif new file mode 100644 index 0000000000000000000000000000000000000000..5dc465ee627f4796f9ca1bbe4d236f896ad588f7 GIT binary patch literal 3876 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 literal 0 HcmV?d00001 diff --git a/v0.3.4.5/plugins/network/plugin_icon.png b/v0.3.4.5/plugins/network/plugin_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..56a3b9feab68f09ea28fe9d2627e2906d387cc46 GIT binary patch literal 5281 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 literal 0 HcmV?d00001 diff --git a/v0.3.4.5/plugins/network/root_action.py b/v0.3.4.5/plugins/network/root_action.py new file mode 100755 index 0000000..28e2839 --- /dev/null +++ b/v0.3.4.5/plugins/network/root_action.py @@ -0,0 +1,109 @@ +#!/usr/bin/env python +# +# Copyright 2006 sense.lab e.V. +# +# This file is part of the CryptoBox. +# +# The CryptoBox 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 CryptoBox 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 the CryptoBox; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +__revision__ = "$Id" + + +## necessary: otherwise CryptoBoxRootActions.py will refuse to execute this script +PLUGIN_TYPE = "cryptobox" + +IFCONFIG_BIN = "/sbin/ifconfig" +ROUTE_BIN = "/sbin/route" + +import subprocess +import re +import sys + +def __changeIP(interface, ipaddress, netmask="0"): + __check_address(ipaddress) + if netmask == "0": + ## change the IP only + proc = subprocess.Popen( + shell = False, + args = [IFCONFIG_BIN, interface, ipaddress]) + proc.wait() + else: + ## someone wants to change the netmask too + __check_address(netmask) + proc = subprocess.Popen( + shell = False, + args = [IFCONFIG_BIN, interface, ipaddress, "netmask", netmask]) + proc.wait() + return proc.returncode == 0 + + +def __changeGW(old_gw, new_gw): + __check_address(old_gw) + __check_address(new_gw) + if old_gw != "0.0.0.0": + ## assume that a default route exists and delete it + proc = subprocess.Popen( + shell = False, + args = [ROUTE_BIN, "del", "default", "gw", old_gw]) + proc.wait() + ## ignore errors + proc = subprocess.Popen( + shell = False, + args = [ROUTE_BIN, "add", "default", "gw", new_gw]) + proc.wait() + return proc.returncode == 0 + + +def __check_address(address): + """Check for correct numbers in given address + """ + match = re.search(r'^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$', address) + ## did we match? If yes, then: are there wrong values inside? + if not match or [e for e in match.groups() if int(e) > 255]: + sys.stderr.write("%s: illegal argument (%s)\n" % (self_bin, address)) + sys.exit(1) + return + + +if __name__ == "__main__": + args = sys.argv[1:] + + self_bin = sys.argv[0] + + if len(args) == 0: + sys.stderr.write("%s: no argument supplied\n" % self_bin) + sys.exit(1) + + try: + if args[0] == "change_ip": + if len(args) != 4: raise "InvalidArgNum" + result = __changeIP(args[1], args[2], args[3]) + elif args[0] == "change_gw": + if len(args) != 3: raise "InvalidArgNum" + result = __changeGW(args[1], args[2]) + else: + sys.stderr.write("%s: invalid action (%s)\n" % (self_bin, args[0])) + sys.exit(1) + if result: + sys.exit(0) + else: + sys.exit(1) + except "InvalidArgNum": + sys.stderr.write("%s: invalid number of arguments (%s)\n" % (self_bin, args)) + sys.exit(1) + + + diff --git a/v0.3.4.5/plugins/network/unittests.py b/v0.3.4.5/plugins/network/unittests.py new file mode 100644 index 0000000..3e5e587 --- /dev/null +++ b/v0.3.4.5/plugins/network/unittests.py @@ -0,0 +1,78 @@ +# +# Copyright 2006 sense.lab e.V. +# +# This file is part of the CryptoBox. +# +# The CryptoBox 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 CryptoBox 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 the CryptoBox; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +__revision__ = "$Id" + +from cryptobox.tests.base import WebInterfaceTestClass +from network import CHANGE_IP_DELAY + + +class unittests(WebInterfaceTestClass): + + def test_ip_change(self): + '''Change network address.''' + ## the time module is necessary for the CHANGE_IP_DELAY + import time + self.register_auth(self.url + "network") + ## do not follow redirects - they would break the test otherwise + self.cmd.config("acknowledge_equiv_refresh", 0) + self.cmd.go(self.url + "network") + ## extract the current IP from the network plugin output + def get_current_ip(): + self.register_auth(self.url + "network") + self.cmd.go(self.url + "network") + self.cmd.find(r'Data.Status.Plugins.network=([0-9\.]*)$', "m") + return self.locals["__match__"] + orig_ip_text = get_current_ip() + orig_ip_octs = orig_ip_text.split(".") + ## check, if the original IP is valid (contains four octets) + self.assertEquals(4, len(orig_ip_octs)) + def set_ip((ip1, ip2, ip3, ip4)): + self.cmd.go(self.url + "network") + self.cmd.formvalue("network_address", "ip1", str(ip1)) + self.cmd.formvalue("network_address", "ip2", str(ip2)) + self.cmd.formvalue("network_address", "ip3", str(ip3)) + self.cmd.formvalue("network_address", "ip4", str(ip4)) + self.cmd.submit() + ## sleep a little bit longer than the delay necessary for ip-change + time.sleep(CHANGE_IP_DELAY + 3) + set_ip([1,-2,0,1]) + self.assertEquals(orig_ip_text, get_current_ip()) + set_ip([1,0,0,256]) + self.assertEquals(orig_ip_text, get_current_ip()) + set_ip([1,"foo",0,1]) + self.assertEquals(orig_ip_text, get_current_ip()) + new_ip = orig_ip_octs[:] + new_ip[3] = str((int(orig_ip_octs[3]) + 128) % 256) + set_ip(new_ip) + self.assertEquals(".".join(new_ip), get_current_ip()) + set_ip(orig_ip_octs) + self.assertEquals(orig_ip_text, get_current_ip()) + + + def test_inputs(self): + """Check various input patterns for 'network' plugin. + """ + self.register_auth(self.url + "network") + self.cmd.go(self.url + "network" + "?redirected=1") + self.cmd.notfind("problem") + self.cmd.go(self.url + "network" + "?store=set_ip") + self.cmd.find("server address is not valid") + diff --git a/v0.3.4.5/plugins/partition/current_partition_info.cs b/v0.3.4.5/plugins/partition/current_partition_info.cs new file mode 100644 index 0000000..960a425 --- /dev/null +++ b/v0.3.4.5/plugins/partition/current_partition_info.cs @@ -0,0 +1,14 @@ + + + + + + + + + + + + + diff --git a/v0.3.4.5/plugins/partition/intl/cryptobox-server-feature-partition.pot b/v0.3.4.5/plugins/partition/intl/cryptobox-server-feature-partition.pot new file mode 100644 index 0000000..16b95d9 --- /dev/null +++ b/v0.3.4.5/plugins/partition/intl/cryptobox-server-feature-partition.pot @@ -0,0 +1,219 @@ +#: Name +msgid "Partition manager" +msgstr "" + +#: Link +msgid "Partitions" +msgstr "" + +#: Title +msgid "Manage partitions" +msgstr "" + +#: Button.SelectDevice +msgid "Partition manually" +msgstr "" + +#: Button.EasySetup +msgid "Automatic setup" +msgstr "" + +#: Button.AddPartition +msgid "Add partition" +msgstr "" + +#: Button.DelPartition +msgid "Remove partition" +msgstr "" + +#: Button.SavePartitions +msgid "Write new partition table" +msgstr "" + +#: Button.AbortPartitions +msgid "Cancel" +msgstr "" + +#: Text.Confirm +msgid "Yes, I know what I am doing!" +msgstr "" + +#: Text.FS.Type +msgid "Filesystem type" +msgstr "" + +#: Text.FS.Fat +msgid "FAT (Windows)" +msgstr "" + +#: Text.FS.Ext2 +msgid "Ext2" +msgstr "" + +#: Text.FS.Ext3 +msgid "Ext3" +msgstr "" + +#: Text.FS.Reiser +msgid "Reiser" +msgstr "" + +#: Text.PartNum +msgid "Id" +msgstr "" + +#: Text.PartType +msgid "Type" +msgstr "" + +#: Text.Size +msgid "Size (MB)" +msgstr "" + +#: Text.SelectDevice +msgid "Choose a disk for partitioning" +msgstr "" + +#: Text.ProgressInfo +msgid "Progress of formatting:" +msgstr "" + +#: Text.CreateConfigPartition +msgid "Automatically creating a configuration partition." +msgstr "" + +#: Text.RemovalContainers +msgid "These volumes will be removed:" +msgstr "" + +#: Text.SpecifyPartitions +msgid "Add partitions" +msgstr "" + +#: Help.Partitioning +msgid "You can split every disk into one ore more parts, which are called 'partitions'. This is useful if you want to separate your data or if you want to encrypt only a part of your disk." +msgstr "" + +#: Help.SelectDevice +msgid "Choose one of the disks given in the list. Be aware that you lose all data on the partitions of this disk." +msgstr "" + +#: Help.PartMode +msgid "You may choose between 'automatic' and 'manual' partitioning. Automatic partitioning creates only one partition for the whole disk. With manual partition you can split the disk into multiple parts of different size." +msgstr "" + +#: Help.ConfigPartition +msgid "This CryptoBox is configured to store its runtime settings on a separate disk partition. It will be created automatically if necessary. This reduces the available size of the disk by 5 megabyte." +msgstr "" + +#: Help.RemoveExistingContainers +msgid "Whenever you change the partition table of a disk, you will loose all volumes that were previously defined inside of it." +msgstr "" + +#: Help.PartitionList +msgid "Choose the size for a new partition and add it to the list by clicking on 'Add partition'. Nothing will get written to your disk until you click on 'Write new partition table' below. Be very careful: you will erase all data on this disk." +msgstr "" + +#: AdviceMessage.DeviceDataIsLost.Text +msgid "If you continue, you will destroy all data on the choosen disk. Please be VERY careful!" +msgstr "" + +#: EnvironmentWarning.ReadOnlyConfig.Text +msgid "Read-only setup detected - probably you should create a configuration partition." +msgstr "" + +#: EnvironmentWarning.ReadOnlyConfig.Link.Text +msgid "Initialize partition" +msgstr "" + +#: EnvironmentWarning.MissingProgramSfdisk.Title +msgid "Missing program" +msgstr "" + +#: EnvironmentWarning.MissingProgramSfdisk.Text +msgid "The program 'sfdisk' is not installed. Please ask the administrator of the CryptoBox to configure it properly." +msgstr "" + +#: EnvironmentWarning.MissingProgramMkfs.Text +msgid "The program 'mkfs' is not installed. Please ask the administrator of the CryptoBox to configure it properly." +msgstr "" + +#: EnvironmentWarning.MissingProgramE2label.Text +msgid "The program 'e2label' is not installed. Please ask the administrator of the CryptoBox to configure it properly." +msgstr "" + +#: SuccessMessage.Partitioned.Title +msgid "Partitioning complete" +msgstr "" + +#: SuccessMessage.Partitioned.Text +msgid "The disk was partitioned successfully." +msgstr "" + +#: SuccessMessage.EasySetup.Title +msgid "Initialization completed" +msgstr "" + +#: SuccessMessage.EasySetup.Text +msgid "Automatic initialization was finished successfully." +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Title +msgid "Confirmation missing" +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Text +msgid "You did not confirm this action by activating the checkbox." +msgstr "" + +#: WarningMessage.NoDisksAvailable.Title +msgid "No disks found" +msgstr "" + +#: WarningMessage.NoDisksAvailable.Text +msgid "No suitable disks found - please check your configuration and hardware setup." +msgstr "" + +#: WarningMessage.PartitioningFailed.Title +msgid "Partitioning failed" +msgstr "" + +#: WarningMessage.PartitioningFailed.Text +msgid "The partitioning of the device failed for some reason - sorry!" +msgstr "" + +#: WarningMessage.PartitioningFailed.Link.Text +msgid "Show log messages" +msgstr "" + +#: WarningMessage.FormattingFailed.Title +msgid "Formatting failed" +msgstr "" + +#: WarningMessage.FormattingFailed.Text +msgid "Formatting of at least one volume failed - sorry!" +msgstr "" + +#: WarningMessage.DiskIsBusy.Title +msgid "This disk is busy" +msgstr "" + +#: WarningMessage.DiskIsBusy.Text +msgid "Please close all volumes of this disk before partitioning." +msgstr "" + +#: WarningMessage.DiskIsBusy.Link.Text +msgid "Show all disks" +msgstr "" + +#: WarningMessage.PartitionTooBig.Title +msgid "Invalid size" +msgstr "" + +#: WarningMessage.PartitionTooBig.Text +msgid "The volume size you entered exceeded the available size of the disk." +msgstr "" + +#: WarningMessage.PartitionTooSmall.Text +msgid "The minimum size of a volume is 10 megabytes." +msgstr "" diff --git a/v0.3.4.5/plugins/partition/intl/cs/cryptobox-server-feature-partition.po b/v0.3.4.5/plugins/partition/intl/cs/cryptobox-server-feature-partition.po new file mode 100644 index 0000000..78f0c5b --- /dev/null +++ b/v0.3.4.5/plugins/partition/intl/cs/cryptobox-server-feature-partition.po @@ -0,0 +1,234 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-05 17:02+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Partition manager" +msgstr "" + +#: Link +msgid "Partitions" +msgstr "" + +#: Title +msgid "Manage partitions" +msgstr "" + +#: Button.SelectDevice +msgid "Partition manually" +msgstr "" + +#: Button.EasySetup +msgid "Automatic setup" +msgstr "" + +#: Button.AddPartition +msgid "Add partition" +msgstr "" + +#: Button.DelPartition +msgid "Remove partition" +msgstr "" + +#: Button.SavePartitions +msgid "Write new partition table" +msgstr "" + +#: Button.AbortPartitions +msgid "Cancel" +msgstr "" + +#: Text.Confirm +msgid "Yes, I know what I am doing!" +msgstr "" + +#: Text.FS.Type +msgid "Filesystem type" +msgstr "" + +#: Text.FS.Fat +msgid "FAT (Windows)" +msgstr "" + +#: Text.FS.Ext2 +msgid "Ext2" +msgstr "" + +#: Text.FS.Ext3 +msgid "Ext3" +msgstr "" + +#: Text.FS.Reiser +msgid "Reiser" +msgstr "" + +#: Text.PartNum +msgid "Id" +msgstr "" + +#: Text.PartType +msgid "Type" +msgstr "" + +#: Text.Size +msgid "Size (MB)" +msgstr "" + +#: Text.SelectDevice +msgid "Choose a disk for partitioning" +msgstr "" + +#: Text.ProgressInfo +msgid "Progress of formatting:" +msgstr "" + +#: Text.CreateConfigPartition +msgid "Automatically creating a configuration partition." +msgstr "" + +#: Text.RemovalContainers +msgid "These volumes will be removed:" +msgstr "" + +#: Text.SpecifyPartitions +msgid "Add partitions" +msgstr "" + +#: Help.Partitioning +msgid "You can split every disk into one ore more parts, which are called 'partitions'. This is useful if you want to separate your data or if you want to encrypt only a part of your disk." +msgstr "" + +#: Help.SelectDevice +msgid "Choose one of the disks given in the list. Be aware that you lose all data on the partitions of this disk." +msgstr "" + +#: Help.PartMode +msgid "You may choose between 'automatic' and 'manual' partitioning. Automatic partitioning creates only one partition for the whole disk. With manual partition you can split the disk into multiple parts of different size." +msgstr "" + +#: Help.ConfigPartition +msgid "This CryptoBox is configured to store its runtime settings on a separate disk partition. It will be created automatically if necessary. This reduces the available size of the disk by 5 megabyte." +msgstr "" + +#: Help.RemoveExistingContainers +msgid "Whenever you change the partition table of a disk, you will loose all volumes that were previously defined inside of it." +msgstr "" + +#: Help.PartitionList +msgid "Choose the size for a new partition and add it to the list by clicking on 'Add partition'. Nothing will get written to your disk until you click on 'Write new partition table' below. Be very careful: you will erase all data on this disk." +msgstr "" + +#: AdviceMessage.DeviceDataIsLost.Text +msgid "If you continue, you will destroy all data on the choosen disk. Please be VERY careful!" +msgstr "" + +#: EnvironmentWarning.ReadOnlyConfig.Text +msgid "Read-only setup detected - probably you should create a configuration partition." +msgstr "" + +#: EnvironmentWarning.ReadOnlyConfig.Link.Text +msgid "Initialize partition" +msgstr "" + +#: EnvironmentWarning.MissingProgramSfdisk.Title +msgid "Missing program" +msgstr "" + +#: EnvironmentWarning.MissingProgramSfdisk.Text +msgid "The program 'sfdisk' is not installed. Please ask the administrator of the CryptoBox to configure it properly." +msgstr "" + +#: EnvironmentWarning.MissingProgramMkfs.Text +msgid "The program 'mkfs' is not installed. Please ask the administrator of the CryptoBox to configure it properly." +msgstr "" + +#: EnvironmentWarning.MissingProgramE2label.Text +msgid "The program 'e2label' is not installed. Please ask the administrator of the CryptoBox to configure it properly." +msgstr "" + +#: SuccessMessage.Partitioned.Title +msgid "Partitioning complete" +msgstr "" + +#: SuccessMessage.Partitioned.Text +msgid "The disk was partitioned successfully." +msgstr "" + +#: SuccessMessage.EasySetup.Title +msgid "Initialization completed" +msgstr "" + +#: SuccessMessage.EasySetup.Text +msgid "Automatic initialization was finished successfully." +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Title +msgid "Confirmation missing" +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Text +msgid "You did not confirm this action by activating the checkbox." +msgstr "" + +#: WarningMessage.NoDisksAvailable.Title +msgid "No disks found" +msgstr "" + +#: WarningMessage.NoDisksAvailable.Text +msgid "No suitable disks found - please check your configuration and hardware setup." +msgstr "" + +#: WarningMessage.PartitioningFailed.Title +msgid "Partitioning failed" +msgstr "" + +#: WarningMessage.PartitioningFailed.Text +msgid "The partitioning of the device failed for some reason - sorry!" +msgstr "" + +#: WarningMessage.PartitioningFailed.Link.Text +msgid "Show log messages" +msgstr "" + +#: WarningMessage.FormattingFailed.Title +msgid "Formatting failed" +msgstr "" + +#: WarningMessage.FormattingFailed.Text +msgid "Formatting of at least one volume failed - sorry!" +msgstr "" + +#: WarningMessage.DiskIsBusy.Title +msgid "This disk is busy" +msgstr "" + +#: WarningMessage.DiskIsBusy.Text +msgid "Please close all volumes of this disk before partitioning." +msgstr "" + +#: WarningMessage.DiskIsBusy.Link.Text +msgid "Show all disks" +msgstr "" + +#: WarningMessage.PartitionTooBig.Title +msgid "Invalid size" +msgstr "" + +#: WarningMessage.PartitionTooBig.Text +msgid "The volume size you entered exceeded the available size of the disk." +msgstr "" + +#: WarningMessage.PartitionTooSmall.Text +msgid "The minimum size of a volume is 10 megabytes." +msgstr "" diff --git a/v0.3.4.5/plugins/partition/intl/da/cryptobox-server-feature-partition.po b/v0.3.4.5/plugins/partition/intl/da/cryptobox-server-feature-partition.po new file mode 100644 index 0000000..78f0c5b --- /dev/null +++ b/v0.3.4.5/plugins/partition/intl/da/cryptobox-server-feature-partition.po @@ -0,0 +1,234 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-05 17:02+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Partition manager" +msgstr "" + +#: Link +msgid "Partitions" +msgstr "" + +#: Title +msgid "Manage partitions" +msgstr "" + +#: Button.SelectDevice +msgid "Partition manually" +msgstr "" + +#: Button.EasySetup +msgid "Automatic setup" +msgstr "" + +#: Button.AddPartition +msgid "Add partition" +msgstr "" + +#: Button.DelPartition +msgid "Remove partition" +msgstr "" + +#: Button.SavePartitions +msgid "Write new partition table" +msgstr "" + +#: Button.AbortPartitions +msgid "Cancel" +msgstr "" + +#: Text.Confirm +msgid "Yes, I know what I am doing!" +msgstr "" + +#: Text.FS.Type +msgid "Filesystem type" +msgstr "" + +#: Text.FS.Fat +msgid "FAT (Windows)" +msgstr "" + +#: Text.FS.Ext2 +msgid "Ext2" +msgstr "" + +#: Text.FS.Ext3 +msgid "Ext3" +msgstr "" + +#: Text.FS.Reiser +msgid "Reiser" +msgstr "" + +#: Text.PartNum +msgid "Id" +msgstr "" + +#: Text.PartType +msgid "Type" +msgstr "" + +#: Text.Size +msgid "Size (MB)" +msgstr "" + +#: Text.SelectDevice +msgid "Choose a disk for partitioning" +msgstr "" + +#: Text.ProgressInfo +msgid "Progress of formatting:" +msgstr "" + +#: Text.CreateConfigPartition +msgid "Automatically creating a configuration partition." +msgstr "" + +#: Text.RemovalContainers +msgid "These volumes will be removed:" +msgstr "" + +#: Text.SpecifyPartitions +msgid "Add partitions" +msgstr "" + +#: Help.Partitioning +msgid "You can split every disk into one ore more parts, which are called 'partitions'. This is useful if you want to separate your data or if you want to encrypt only a part of your disk." +msgstr "" + +#: Help.SelectDevice +msgid "Choose one of the disks given in the list. Be aware that you lose all data on the partitions of this disk." +msgstr "" + +#: Help.PartMode +msgid "You may choose between 'automatic' and 'manual' partitioning. Automatic partitioning creates only one partition for the whole disk. With manual partition you can split the disk into multiple parts of different size." +msgstr "" + +#: Help.ConfigPartition +msgid "This CryptoBox is configured to store its runtime settings on a separate disk partition. It will be created automatically if necessary. This reduces the available size of the disk by 5 megabyte." +msgstr "" + +#: Help.RemoveExistingContainers +msgid "Whenever you change the partition table of a disk, you will loose all volumes that were previously defined inside of it." +msgstr "" + +#: Help.PartitionList +msgid "Choose the size for a new partition and add it to the list by clicking on 'Add partition'. Nothing will get written to your disk until you click on 'Write new partition table' below. Be very careful: you will erase all data on this disk." +msgstr "" + +#: AdviceMessage.DeviceDataIsLost.Text +msgid "If you continue, you will destroy all data on the choosen disk. Please be VERY careful!" +msgstr "" + +#: EnvironmentWarning.ReadOnlyConfig.Text +msgid "Read-only setup detected - probably you should create a configuration partition." +msgstr "" + +#: EnvironmentWarning.ReadOnlyConfig.Link.Text +msgid "Initialize partition" +msgstr "" + +#: EnvironmentWarning.MissingProgramSfdisk.Title +msgid "Missing program" +msgstr "" + +#: EnvironmentWarning.MissingProgramSfdisk.Text +msgid "The program 'sfdisk' is not installed. Please ask the administrator of the CryptoBox to configure it properly." +msgstr "" + +#: EnvironmentWarning.MissingProgramMkfs.Text +msgid "The program 'mkfs' is not installed. Please ask the administrator of the CryptoBox to configure it properly." +msgstr "" + +#: EnvironmentWarning.MissingProgramE2label.Text +msgid "The program 'e2label' is not installed. Please ask the administrator of the CryptoBox to configure it properly." +msgstr "" + +#: SuccessMessage.Partitioned.Title +msgid "Partitioning complete" +msgstr "" + +#: SuccessMessage.Partitioned.Text +msgid "The disk was partitioned successfully." +msgstr "" + +#: SuccessMessage.EasySetup.Title +msgid "Initialization completed" +msgstr "" + +#: SuccessMessage.EasySetup.Text +msgid "Automatic initialization was finished successfully." +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Title +msgid "Confirmation missing" +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Text +msgid "You did not confirm this action by activating the checkbox." +msgstr "" + +#: WarningMessage.NoDisksAvailable.Title +msgid "No disks found" +msgstr "" + +#: WarningMessage.NoDisksAvailable.Text +msgid "No suitable disks found - please check your configuration and hardware setup." +msgstr "" + +#: WarningMessage.PartitioningFailed.Title +msgid "Partitioning failed" +msgstr "" + +#: WarningMessage.PartitioningFailed.Text +msgid "The partitioning of the device failed for some reason - sorry!" +msgstr "" + +#: WarningMessage.PartitioningFailed.Link.Text +msgid "Show log messages" +msgstr "" + +#: WarningMessage.FormattingFailed.Title +msgid "Formatting failed" +msgstr "" + +#: WarningMessage.FormattingFailed.Text +msgid "Formatting of at least one volume failed - sorry!" +msgstr "" + +#: WarningMessage.DiskIsBusy.Title +msgid "This disk is busy" +msgstr "" + +#: WarningMessage.DiskIsBusy.Text +msgid "Please close all volumes of this disk before partitioning." +msgstr "" + +#: WarningMessage.DiskIsBusy.Link.Text +msgid "Show all disks" +msgstr "" + +#: WarningMessage.PartitionTooBig.Title +msgid "Invalid size" +msgstr "" + +#: WarningMessage.PartitionTooBig.Text +msgid "The volume size you entered exceeded the available size of the disk." +msgstr "" + +#: WarningMessage.PartitionTooSmall.Text +msgid "The minimum size of a volume is 10 megabytes." +msgstr "" diff --git a/v0.3.4.5/plugins/partition/intl/de/cryptobox-server-feature-partition.po b/v0.3.4.5/plugins/partition/intl/de/cryptobox-server-feature-partition.po new file mode 100644 index 0000000..caa6f39 --- /dev/null +++ b/v0.3.4.5/plugins/partition/intl/de/cryptobox-server-feature-partition.po @@ -0,0 +1,233 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-05 17:02+0100\n" +"PO-Revision-Date: 2007-02-05 16:54+0100\n" +"Last-Translator: Lars Kruse \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Partition manager" +msgstr "Partitionsmanager" + +#: Link +msgid "Partitions" +msgstr "Partitionen" + +#: Title +msgid "Manage partitions" +msgstr "Partitionen verwalten" + +#: Button.SelectDevice +msgid "Partition manually" +msgstr "Manuelle Partitionierung" + +#: Button.EasySetup +msgid "Automatic setup" +msgstr "Automatische Einrichtung" + +#: Button.AddPartition +msgid "Add partition" +msgstr "Partition hinzufügen" + +#: Button.DelPartition +msgid "Remove partition" +msgstr "Partition entfernen" + +#: Button.SavePartitions +msgid "Write new partition table" +msgstr "Neue Partitionstabelle schreiben" + +#: Button.AbortPartitions +msgid "Cancel" +msgstr "Abbrechen" + +#: Text.Confirm +msgid "Yes, I know what I am doing!" +msgstr "Ja, ich weiß was ich tue!" + +#: Text.FS.Type +msgid "Filesystem type" +msgstr "Art des Dateisystems" + +#: Text.FS.Fat +msgid "FAT (Windows)" +msgstr "FAT (Windows)" + +#: Text.FS.Ext2 +msgid "Ext2" +msgstr "Ext2" + +#: Text.FS.Ext3 +msgid "Ext3" +msgstr "Ext3" + +#: Text.FS.Reiser +msgid "Reiser" +msgstr "Reiser" + +#: Text.PartNum +msgid "Id" +msgstr "ID" + +#: Text.PartType +msgid "Type" +msgstr "Art" + +#: Text.Size +msgid "Size (MB)" +msgstr "Größe (MB)" + +#: Text.SelectDevice +msgid "Choose a disk for partitioning" +msgstr "Wähle eine Platte zur Partitionierung aus" + +#: Text.ProgressInfo +msgid "Progress of formatting:" +msgstr "Fortschritt der Formatierung:" + +#: Text.CreateConfigPartition +msgid "Automatically creating a configuration partition." +msgstr "Automatisches Erstellen einer Konfigurationspartition" + +#: Text.RemovalContainers +msgid "These volumes will be removed:" +msgstr "Diese Datenträger werden entfernt:" + +#: Text.SpecifyPartitions +msgid "Add partitions" +msgstr "Partitionen hinzufügen" + +#: Help.Partitioning +msgid "You can split every disk into one ore more parts, which are called 'partitions'. This is useful if you want to separate your data or if you want to encrypt only a part of your disk." +msgstr "Du kannst jede Platte in mehrere Teile aufteilen, den sogenannten Partitionen. Dies ist nützlich, wenn du deine Daten teilen oder nur einen Teil deiner Platte verschlüsseln willst." + +#: Help.SelectDevice +msgid "Choose one of the disks given in the list. Be aware that you lose all data on the partitions of this disk." +msgstr "Wähle eine der Platten aus der Liste aus. Sei dir bewusst, dass sämtliche Daten auf der Platte während der Partitionierung verloren gehen." + +#: Help.PartMode +msgid "You may choose between 'automatic' and 'manual' partitioning. Automatic partitioning creates only one partition for the whole disk. With manual partition you can split the disk into multiple parts of different size." +msgstr "Du kannst zwischen automatischer und manueller Partitionierung wählen. Automatische Partitionierung erstellt nur eine Partition für die gesamte Platte. Mit Hilfe der manuellen Partitionierung kannst du die Platte in unterschiedliche große Bereiche aufteilen." + +#: Help.ConfigPartition +msgid "This CryptoBox is configured to store its runtime settings on a separate disk partition. It will be created automatically if necessary. This reduces the available size of the disk by 5 megabyte." +msgstr "Die CryptoBox wurde so konfiguriert, dass sie ihre Einstellungen auf einer gesonderten Partition speichert. Falls sie nicht existiert, wird sie automatisch erstellt. Dadurch ist der verfügbare Speicherplatz um 5 MB kleiner." + +#: Help.RemoveExistingContainers +msgid "Whenever you change the partition table of a disk, you will loose all volumes that were previously defined inside of it." +msgstr "Immer wenn du die Partitionstabelle einer Platte änderst, verlierst du alle Datenträger die vorher darauf angelegt wurden." + +#: Help.PartitionList +msgid "Choose the size for a new partition and add it to the list by clicking on 'Add partition'. Nothing will get written to your disk until you click on 'Write new partition table' below. Be very careful: you will erase all data on this disk." +msgstr "Wähle die Größe einer neuen Partition und füge sie mit einem Klick auf \"Partition hinzufügen\" zur Liste hinzu. Die Änderungen werden erst übernommen, wenn du auf \"Schreibe neue Partitionstabelle\" klickst. Sei bitte vorsichtig: alle Daten auf dem Datentäger gehen verloren." + +#: AdviceMessage.DeviceDataIsLost.Text +msgid "If you continue, you will destroy all data on the choosen disk. Please be VERY careful!" +msgstr "Wenn du weitermachst, werden alle Daten auf der ausgewählten Platte zerstört. Sei bitte sehr vorsichtig!" + +#: EnvironmentWarning.ReadOnlyConfig.Text +msgid "Read-only setup detected - probably you should create a configuration partition." +msgstr "Nur-Lese-Konfiguration erkannt - wahrscheinlich solltest du eine Konfigurations-Partition anlegen." + +#: EnvironmentWarning.ReadOnlyConfig.Link.Text +msgid "Initialize partition" +msgstr "Partition initialisieren" + +#: EnvironmentWarning.MissingProgramSfdisk.Title +msgid "Missing program" +msgstr "Fehlendes Programm" + +#: EnvironmentWarning.MissingProgramSfdisk.Text +msgid "The program 'sfdisk' is not installed. Please ask the administrator of the CryptoBox to configure it properly." +msgstr "Das Programm 'sfdisk' ist nicht installiert. Bitte den Administrator der CryptoBox dieses Programm zu installieren." + +#: EnvironmentWarning.MissingProgramMkfs.Text +msgid "The program 'mkfs' is not installed. Please ask the administrator of the CryptoBox to configure it properly." +msgstr "Das Programm 'mkfs' ist nicht installiert. Bitte den Administrator der CryptoBox dieses Programm zu installieren." + +#: EnvironmentWarning.MissingProgramE2label.Text +msgid "The program 'e2label' is not installed. Please ask the administrator of the CryptoBox to configure it properly." +msgstr "Das Programm 'e2label' ist nicht installiert. Bitte den Administrator der CryptoBox dieses Programm zu installieren." + +#: SuccessMessage.Partitioned.Title +msgid "Partitioning complete" +msgstr "Partitionierung abgeschlossen" + +#: SuccessMessage.Partitioned.Text +msgid "The disk was partitioned successfully." +msgstr "Die Platte wurde erfolgreich partitioniert." + +#: SuccessMessage.EasySetup.Title +msgid "Initialization completed" +msgstr "Initialisierung abgeschlossen" + +#: SuccessMessage.EasySetup.Text +msgid "Automatic initialization was finished successfully." +msgstr "Die automatische Initialisierung wurde erfolgreich abgeschlossen." + +#: WarningMessage.FormatNotConfirmed.Title +msgid "Confirmation missing" +msgstr "Bestätigung fehlt" + +#: WarningMessage.FormatNotConfirmed.Text +msgid "You did not confirm this action by activating the checkbox." +msgstr "Du hast diesen Vorgang nicht durch Aktivierung der Checkbox bestätigt." + +#: WarningMessage.NoDisksAvailable.Title +msgid "No disks found" +msgstr "Keine Platten gefunden" + +#: WarningMessage.NoDisksAvailable.Text +msgid "No suitable disks found - please check your configuration and hardware setup." +msgstr "Keine passenden Platte gefunden - bitte überprüfe deine Konfiguration und deine Hardware." + +#: WarningMessage.PartitioningFailed.Title +msgid "Partitioning failed" +msgstr "Partitionierung fehlgeschlagen" + +#: WarningMessage.PartitioningFailed.Text +msgid "The partitioning of the device failed for some reason - sorry!" +msgstr "Die Partitionierung der Platte ist fehlgeschlagen - Entschuldigung!" + +#: WarningMessage.PartitioningFailed.Link.Text +msgid "Show log messages" +msgstr "Nachrichtenprotokoll anzeigen" + +#: WarningMessage.FormattingFailed.Title +msgid "Formatting failed" +msgstr "Formatierung fehlgeschlagen" + +#: WarningMessage.FormattingFailed.Text +msgid "Formatting of at least one volume failed - sorry!" +msgstr "Die Formatierung mindestens eines Datenträgers ist fehlgeschlagen - Entschuldigung!" + +#: WarningMessage.DiskIsBusy.Title +msgid "This disk is busy" +msgstr "Die Platte ist beschäftigt" + +#: WarningMessage.DiskIsBusy.Text +msgid "Please close all volumes of this disk before partitioning." +msgstr "Bitte schließe alle Datenträger der Platte vor der Partitionierung." + +#: WarningMessage.DiskIsBusy.Link.Text +msgid "Show all disks" +msgstr "Alle Platten anzeigen" + +#: WarningMessage.PartitionTooBig.Title +msgid "Invalid size" +msgstr "Ungültige Größe" + +#: WarningMessage.PartitionTooBig.Text +msgid "The volume size you entered exceeded the available size of the disk." +msgstr "Die eingegebene Größe des Datenträgers überschreitet die verfügbare Größe der Platte." + +#: WarningMessage.PartitionTooSmall.Text +msgid "The minimum size of a volume is 10 megabytes." +msgstr "Die Mindestgröße eines Datenträgers beträgt 10 MB." diff --git a/v0.3.4.5/plugins/partition/intl/en/cryptobox-server-feature-partition.po b/v0.3.4.5/plugins/partition/intl/en/cryptobox-server-feature-partition.po new file mode 100644 index 0000000..46ab0d7 --- /dev/null +++ b/v0.3.4.5/plugins/partition/intl/en/cryptobox-server-feature-partition.po @@ -0,0 +1,222 @@ +#: Name +msgid "Partition manager" +msgstr "Partition manager" + +#: Link +msgid "Partitions" +msgstr "Partitions" + +#: Title +msgid "Manage partitions" +msgstr "Manage partitions" + +#: Button.SelectDevice +msgid "Partition manually" +msgstr "Partition manually" + +#: Button.EasySetup +msgid "Automatic setup" +msgstr "Automatic setup" + +#: Button.AddPartition +#, fuzzy +msgid "Add partition" +msgstr "Add partition" + +#: Button.DelPartition +msgid "Remove partition" +msgstr "Remove partition" + +#: Button.SavePartitions +msgid "Write new partition table" +msgstr "Write new partition table" + +#: Button.AbortPartitions +msgid "Cancel" +msgstr "Cancel" + +#: Text.Confirm +msgid "Yes, I know what I am doing!" +msgstr "Yes, I know what I am doing!" + +#: Text.FS.Type +msgid "Filesystem type" +msgstr "Filesystem type" + +#: Text.FS.Fat +msgid "FAT (Windows)" +msgstr "FAT (Windows)" + +#: Text.FS.Ext2 +msgid "Ext2" +msgstr "Ext2" + +#: Text.FS.Ext3 +msgid "Ext3" +msgstr "Ext3" + +#: Text.FS.Reiser +msgid "Reiser" +msgstr "Reiser" + +#: Text.PartNum +msgid "Id" +msgstr "Id" + +#: Text.PartType +msgid "Type" +msgstr "Type" + +#: Text.Size +msgid "Size (MB)" +msgstr "Size (MB)" + +#: Text.SelectDevice +msgid "Choose a disk for partitioning" +msgstr "Choose a disk for partitioning" + +#: Text.ProgressInfo +msgid "Progress of formatting:" +msgstr "Progress of formatting:" + +#: Text.CreateConfigPartition +msgid "Automatically creating a configuration partition." +msgstr "Automatically creating a configuration partition." + +#: Text.RemovalContainers +msgid "These volumes will be removed:" +msgstr "These volumes will be removed:" + +#: Text.SpecifyPartitions +msgid "Add partitions" +msgstr "Add partitions" + +#: Help.Partitioning +#, fuzzy +msgid "You can split every disk into one ore more parts, which are called 'partitions'. This is useful if you want to separate your data or if you want to encrypt only a part of your disk." +msgstr "You can split every disk into one ore more parts, which are called 'partitions'. This is useful if you want to separate your data or if you want to encrypt only a part of your disk." + +#: Help.SelectDevice +msgid "Choose one of the disks given in the list. Be aware that you lose all data on the partitions of this disk." +msgstr "Choose one of the disks given in the list. Be aware that you lose all data on the partitions of this disk." + +#: Help.PartMode +msgid "You may choose between 'automatic' and 'manual' partitioning. Automatic partitioning creates only one partition for the whole disk. With manual partition you can split the disk into multiple parts of different size." +msgstr "You may choose between 'automatic' and 'manual' partitioning. Automatic partitioning creates only one partition for the whole disk. With manual partition you can split the disk into multiple parts of different size." + +#: Help.ConfigPartition +msgid "This CryptoBox is configured to store its runtime settings on a separate disk partition. It will be created automatically if necessary. This reduces the available size of the disk by 5 megabyte." +msgstr "This CryptoBox is configured to store its runtime settings on a separate disk partition. It will be created automatically if necessary. This reduces the available size of the disk by 5 megabyte." + +#: Help.RemoveExistingContainers +msgid "Whenever you change the partition table of a disk, you will loose all volumes that were previously defined inside of it." +msgstr "Whenever you change the partition table of a disk, you will loose all volumes that were previously defined inside of it." + +#: Help.PartitionList +#, fuzzy +msgid "Choose the size for a new partition and add it to the list by clicking on 'Add partition'. Nothing will get written to your disk until you click on 'Write new partition table' below. Be very careful: you will erase all data on this disk." +msgstr "Choose the size for a new partition and add it to the list by clicking on 'Add partition'. Nothing will get written to your disk until you click on 'Write new partition table' below. Be very careful: you will erase all data on this disk." + +#: AdviceMessage.DeviceDataIsLost.Text +msgid "If you continue, you will destroy all data on the choosen disk. Please be VERY careful!" +msgstr "If you continue, you will destroy all data on the choosen disk. Please be VERY careful!" + +#: EnvironmentWarning.ReadOnlyConfig.Text +msgid "Read-only setup detected - probably you should create a configuration partition." +msgstr "Read-only setup detected - probably you should create a configuration partition." + +#: EnvironmentWarning.ReadOnlyConfig.Link.Text +msgid "Initialize partition" +msgstr "Initialize partition" + +#: EnvironmentWarning.MissingProgramSfdisk.Title +msgid "Missing program" +msgstr "Missing program" + +#: EnvironmentWarning.MissingProgramSfdisk.Text +msgid "The program 'sfdisk' is not installed. Please ask the administrator of the CryptoBox to configure it properly." +msgstr "The program 'sfdisk' is not installed. Please ask the administrator of the CryptoBox to configure it properly." + +#: EnvironmentWarning.MissingProgramMkfs.Text +msgid "The program 'mkfs' is not installed. Please ask the administrator of the CryptoBox to configure it properly." +msgstr "The program 'mkfs' is not installed. Please ask the administrator of the CryptoBox to configure it properly." + +#: EnvironmentWarning.MissingProgramE2label.Text +msgid "The program 'e2label' is not installed. Please ask the administrator of the CryptoBox to configure it properly." +msgstr "The program 'e2label' is not installed. Please ask the administrator of the CryptoBox to configure it properly." + +#: SuccessMessage.Partitioned.Title +msgid "Partitioning complete" +msgstr "Partitioning complete" + +#: SuccessMessage.Partitioned.Text +msgid "The disk was partitioned successfully." +msgstr "The disk was partitioned successfully." + +#: SuccessMessage.EasySetup.Title +msgid "Initialization completed" +msgstr "Initialization completed" + +#: SuccessMessage.EasySetup.Text +msgid "Automatic initialization was finished successfully." +msgstr "Automatic initialization was finished successfully." + +#: WarningMessage.FormatNotConfirmed.Title +msgid "Confirmation missing" +msgstr "Confirmation missing" + +#: WarningMessage.FormatNotConfirmed.Text +msgid "You did not confirm this action by activating the checkbox." +msgstr "You did not confirm this action by activating the checkbox." + +#: WarningMessage.NoDisksAvailable.Title +msgid "No disks found" +msgstr "No disks found" + +#: WarningMessage.NoDisksAvailable.Text +msgid "No suitable disks found - please check your configuration and hardware setup." +msgstr "No suitable disks found - please check your configuration and hardware setup." + +#: WarningMessage.PartitioningFailed.Title +msgid "Partitioning failed" +msgstr "Partitioning failed" + +#: WarningMessage.PartitioningFailed.Text +msgid "The partitioning of the device failed for some reason - sorry!" +msgstr "The partitioning of the device failed for some reason - sorry!" + +#: WarningMessage.PartitioningFailed.Link.Text +msgid "Show log messages" +msgstr "Show log messages" + +#: WarningMessage.FormattingFailed.Title +msgid "Formatting failed" +msgstr "Formatting failed" + +#: WarningMessage.FormattingFailed.Text +msgid "Formatting of at least one volume failed - sorry!" +msgstr "Formatting of at least one volume failed - sorry!" + +#: WarningMessage.DiskIsBusy.Title +msgid "This disk is busy" +msgstr "This disk is busy" + +#: WarningMessage.DiskIsBusy.Text +msgid "Please close all volumes of this disk before partitioning." +msgstr "Please close all volumes of this disk before partitioning." + +#: WarningMessage.DiskIsBusy.Link.Text +msgid "Show all disks" +msgstr "Show all disks" + +#: WarningMessage.PartitionTooBig.Title +msgid "Invalid size" +msgstr "Invalid size" + +#: WarningMessage.PartitionTooBig.Text +msgid "The volume size you entered exceeded the available size of the disk." +msgstr "The volume size you entered exceeded the available size of the disk." + +#: WarningMessage.PartitionTooSmall.Text +msgid "The minimum size of a volume is 10 megabytes." +msgstr "The minimum size of a volume is 10 megabytes." diff --git a/v0.3.4.5/plugins/partition/intl/es/cryptobox-server-feature-partition.po b/v0.3.4.5/plugins/partition/intl/es/cryptobox-server-feature-partition.po new file mode 100644 index 0000000..78f0c5b --- /dev/null +++ b/v0.3.4.5/plugins/partition/intl/es/cryptobox-server-feature-partition.po @@ -0,0 +1,234 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-05 17:02+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Partition manager" +msgstr "" + +#: Link +msgid "Partitions" +msgstr "" + +#: Title +msgid "Manage partitions" +msgstr "" + +#: Button.SelectDevice +msgid "Partition manually" +msgstr "" + +#: Button.EasySetup +msgid "Automatic setup" +msgstr "" + +#: Button.AddPartition +msgid "Add partition" +msgstr "" + +#: Button.DelPartition +msgid "Remove partition" +msgstr "" + +#: Button.SavePartitions +msgid "Write new partition table" +msgstr "" + +#: Button.AbortPartitions +msgid "Cancel" +msgstr "" + +#: Text.Confirm +msgid "Yes, I know what I am doing!" +msgstr "" + +#: Text.FS.Type +msgid "Filesystem type" +msgstr "" + +#: Text.FS.Fat +msgid "FAT (Windows)" +msgstr "" + +#: Text.FS.Ext2 +msgid "Ext2" +msgstr "" + +#: Text.FS.Ext3 +msgid "Ext3" +msgstr "" + +#: Text.FS.Reiser +msgid "Reiser" +msgstr "" + +#: Text.PartNum +msgid "Id" +msgstr "" + +#: Text.PartType +msgid "Type" +msgstr "" + +#: Text.Size +msgid "Size (MB)" +msgstr "" + +#: Text.SelectDevice +msgid "Choose a disk for partitioning" +msgstr "" + +#: Text.ProgressInfo +msgid "Progress of formatting:" +msgstr "" + +#: Text.CreateConfigPartition +msgid "Automatically creating a configuration partition." +msgstr "" + +#: Text.RemovalContainers +msgid "These volumes will be removed:" +msgstr "" + +#: Text.SpecifyPartitions +msgid "Add partitions" +msgstr "" + +#: Help.Partitioning +msgid "You can split every disk into one ore more parts, which are called 'partitions'. This is useful if you want to separate your data or if you want to encrypt only a part of your disk." +msgstr "" + +#: Help.SelectDevice +msgid "Choose one of the disks given in the list. Be aware that you lose all data on the partitions of this disk." +msgstr "" + +#: Help.PartMode +msgid "You may choose between 'automatic' and 'manual' partitioning. Automatic partitioning creates only one partition for the whole disk. With manual partition you can split the disk into multiple parts of different size." +msgstr "" + +#: Help.ConfigPartition +msgid "This CryptoBox is configured to store its runtime settings on a separate disk partition. It will be created automatically if necessary. This reduces the available size of the disk by 5 megabyte." +msgstr "" + +#: Help.RemoveExistingContainers +msgid "Whenever you change the partition table of a disk, you will loose all volumes that were previously defined inside of it." +msgstr "" + +#: Help.PartitionList +msgid "Choose the size for a new partition and add it to the list by clicking on 'Add partition'. Nothing will get written to your disk until you click on 'Write new partition table' below. Be very careful: you will erase all data on this disk." +msgstr "" + +#: AdviceMessage.DeviceDataIsLost.Text +msgid "If you continue, you will destroy all data on the choosen disk. Please be VERY careful!" +msgstr "" + +#: EnvironmentWarning.ReadOnlyConfig.Text +msgid "Read-only setup detected - probably you should create a configuration partition." +msgstr "" + +#: EnvironmentWarning.ReadOnlyConfig.Link.Text +msgid "Initialize partition" +msgstr "" + +#: EnvironmentWarning.MissingProgramSfdisk.Title +msgid "Missing program" +msgstr "" + +#: EnvironmentWarning.MissingProgramSfdisk.Text +msgid "The program 'sfdisk' is not installed. Please ask the administrator of the CryptoBox to configure it properly." +msgstr "" + +#: EnvironmentWarning.MissingProgramMkfs.Text +msgid "The program 'mkfs' is not installed. Please ask the administrator of the CryptoBox to configure it properly." +msgstr "" + +#: EnvironmentWarning.MissingProgramE2label.Text +msgid "The program 'e2label' is not installed. Please ask the administrator of the CryptoBox to configure it properly." +msgstr "" + +#: SuccessMessage.Partitioned.Title +msgid "Partitioning complete" +msgstr "" + +#: SuccessMessage.Partitioned.Text +msgid "The disk was partitioned successfully." +msgstr "" + +#: SuccessMessage.EasySetup.Title +msgid "Initialization completed" +msgstr "" + +#: SuccessMessage.EasySetup.Text +msgid "Automatic initialization was finished successfully." +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Title +msgid "Confirmation missing" +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Text +msgid "You did not confirm this action by activating the checkbox." +msgstr "" + +#: WarningMessage.NoDisksAvailable.Title +msgid "No disks found" +msgstr "" + +#: WarningMessage.NoDisksAvailable.Text +msgid "No suitable disks found - please check your configuration and hardware setup." +msgstr "" + +#: WarningMessage.PartitioningFailed.Title +msgid "Partitioning failed" +msgstr "" + +#: WarningMessage.PartitioningFailed.Text +msgid "The partitioning of the device failed for some reason - sorry!" +msgstr "" + +#: WarningMessage.PartitioningFailed.Link.Text +msgid "Show log messages" +msgstr "" + +#: WarningMessage.FormattingFailed.Title +msgid "Formatting failed" +msgstr "" + +#: WarningMessage.FormattingFailed.Text +msgid "Formatting of at least one volume failed - sorry!" +msgstr "" + +#: WarningMessage.DiskIsBusy.Title +msgid "This disk is busy" +msgstr "" + +#: WarningMessage.DiskIsBusy.Text +msgid "Please close all volumes of this disk before partitioning." +msgstr "" + +#: WarningMessage.DiskIsBusy.Link.Text +msgid "Show all disks" +msgstr "" + +#: WarningMessage.PartitionTooBig.Title +msgid "Invalid size" +msgstr "" + +#: WarningMessage.PartitionTooBig.Text +msgid "The volume size you entered exceeded the available size of the disk." +msgstr "" + +#: WarningMessage.PartitionTooSmall.Text +msgid "The minimum size of a volume is 10 megabytes." +msgstr "" diff --git a/v0.3.4.5/plugins/partition/intl/fi/cryptobox-server-feature-partition.po b/v0.3.4.5/plugins/partition/intl/fi/cryptobox-server-feature-partition.po new file mode 100644 index 0000000..78f0c5b --- /dev/null +++ b/v0.3.4.5/plugins/partition/intl/fi/cryptobox-server-feature-partition.po @@ -0,0 +1,234 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-05 17:02+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Partition manager" +msgstr "" + +#: Link +msgid "Partitions" +msgstr "" + +#: Title +msgid "Manage partitions" +msgstr "" + +#: Button.SelectDevice +msgid "Partition manually" +msgstr "" + +#: Button.EasySetup +msgid "Automatic setup" +msgstr "" + +#: Button.AddPartition +msgid "Add partition" +msgstr "" + +#: Button.DelPartition +msgid "Remove partition" +msgstr "" + +#: Button.SavePartitions +msgid "Write new partition table" +msgstr "" + +#: Button.AbortPartitions +msgid "Cancel" +msgstr "" + +#: Text.Confirm +msgid "Yes, I know what I am doing!" +msgstr "" + +#: Text.FS.Type +msgid "Filesystem type" +msgstr "" + +#: Text.FS.Fat +msgid "FAT (Windows)" +msgstr "" + +#: Text.FS.Ext2 +msgid "Ext2" +msgstr "" + +#: Text.FS.Ext3 +msgid "Ext3" +msgstr "" + +#: Text.FS.Reiser +msgid "Reiser" +msgstr "" + +#: Text.PartNum +msgid "Id" +msgstr "" + +#: Text.PartType +msgid "Type" +msgstr "" + +#: Text.Size +msgid "Size (MB)" +msgstr "" + +#: Text.SelectDevice +msgid "Choose a disk for partitioning" +msgstr "" + +#: Text.ProgressInfo +msgid "Progress of formatting:" +msgstr "" + +#: Text.CreateConfigPartition +msgid "Automatically creating a configuration partition." +msgstr "" + +#: Text.RemovalContainers +msgid "These volumes will be removed:" +msgstr "" + +#: Text.SpecifyPartitions +msgid "Add partitions" +msgstr "" + +#: Help.Partitioning +msgid "You can split every disk into one ore more parts, which are called 'partitions'. This is useful if you want to separate your data or if you want to encrypt only a part of your disk." +msgstr "" + +#: Help.SelectDevice +msgid "Choose one of the disks given in the list. Be aware that you lose all data on the partitions of this disk." +msgstr "" + +#: Help.PartMode +msgid "You may choose between 'automatic' and 'manual' partitioning. Automatic partitioning creates only one partition for the whole disk. With manual partition you can split the disk into multiple parts of different size." +msgstr "" + +#: Help.ConfigPartition +msgid "This CryptoBox is configured to store its runtime settings on a separate disk partition. It will be created automatically if necessary. This reduces the available size of the disk by 5 megabyte." +msgstr "" + +#: Help.RemoveExistingContainers +msgid "Whenever you change the partition table of a disk, you will loose all volumes that were previously defined inside of it." +msgstr "" + +#: Help.PartitionList +msgid "Choose the size for a new partition and add it to the list by clicking on 'Add partition'. Nothing will get written to your disk until you click on 'Write new partition table' below. Be very careful: you will erase all data on this disk." +msgstr "" + +#: AdviceMessage.DeviceDataIsLost.Text +msgid "If you continue, you will destroy all data on the choosen disk. Please be VERY careful!" +msgstr "" + +#: EnvironmentWarning.ReadOnlyConfig.Text +msgid "Read-only setup detected - probably you should create a configuration partition." +msgstr "" + +#: EnvironmentWarning.ReadOnlyConfig.Link.Text +msgid "Initialize partition" +msgstr "" + +#: EnvironmentWarning.MissingProgramSfdisk.Title +msgid "Missing program" +msgstr "" + +#: EnvironmentWarning.MissingProgramSfdisk.Text +msgid "The program 'sfdisk' is not installed. Please ask the administrator of the CryptoBox to configure it properly." +msgstr "" + +#: EnvironmentWarning.MissingProgramMkfs.Text +msgid "The program 'mkfs' is not installed. Please ask the administrator of the CryptoBox to configure it properly." +msgstr "" + +#: EnvironmentWarning.MissingProgramE2label.Text +msgid "The program 'e2label' is not installed. Please ask the administrator of the CryptoBox to configure it properly." +msgstr "" + +#: SuccessMessage.Partitioned.Title +msgid "Partitioning complete" +msgstr "" + +#: SuccessMessage.Partitioned.Text +msgid "The disk was partitioned successfully." +msgstr "" + +#: SuccessMessage.EasySetup.Title +msgid "Initialization completed" +msgstr "" + +#: SuccessMessage.EasySetup.Text +msgid "Automatic initialization was finished successfully." +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Title +msgid "Confirmation missing" +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Text +msgid "You did not confirm this action by activating the checkbox." +msgstr "" + +#: WarningMessage.NoDisksAvailable.Title +msgid "No disks found" +msgstr "" + +#: WarningMessage.NoDisksAvailable.Text +msgid "No suitable disks found - please check your configuration and hardware setup." +msgstr "" + +#: WarningMessage.PartitioningFailed.Title +msgid "Partitioning failed" +msgstr "" + +#: WarningMessage.PartitioningFailed.Text +msgid "The partitioning of the device failed for some reason - sorry!" +msgstr "" + +#: WarningMessage.PartitioningFailed.Link.Text +msgid "Show log messages" +msgstr "" + +#: WarningMessage.FormattingFailed.Title +msgid "Formatting failed" +msgstr "" + +#: WarningMessage.FormattingFailed.Text +msgid "Formatting of at least one volume failed - sorry!" +msgstr "" + +#: WarningMessage.DiskIsBusy.Title +msgid "This disk is busy" +msgstr "" + +#: WarningMessage.DiskIsBusy.Text +msgid "Please close all volumes of this disk before partitioning." +msgstr "" + +#: WarningMessage.DiskIsBusy.Link.Text +msgid "Show all disks" +msgstr "" + +#: WarningMessage.PartitionTooBig.Title +msgid "Invalid size" +msgstr "" + +#: WarningMessage.PartitionTooBig.Text +msgid "The volume size you entered exceeded the available size of the disk." +msgstr "" + +#: WarningMessage.PartitionTooSmall.Text +msgid "The minimum size of a volume is 10 megabytes." +msgstr "" diff --git a/v0.3.4.5/plugins/partition/intl/fr/cryptobox-server-feature-partition.po b/v0.3.4.5/plugins/partition/intl/fr/cryptobox-server-feature-partition.po new file mode 100644 index 0000000..78f0c5b --- /dev/null +++ b/v0.3.4.5/plugins/partition/intl/fr/cryptobox-server-feature-partition.po @@ -0,0 +1,234 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-05 17:02+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Partition manager" +msgstr "" + +#: Link +msgid "Partitions" +msgstr "" + +#: Title +msgid "Manage partitions" +msgstr "" + +#: Button.SelectDevice +msgid "Partition manually" +msgstr "" + +#: Button.EasySetup +msgid "Automatic setup" +msgstr "" + +#: Button.AddPartition +msgid "Add partition" +msgstr "" + +#: Button.DelPartition +msgid "Remove partition" +msgstr "" + +#: Button.SavePartitions +msgid "Write new partition table" +msgstr "" + +#: Button.AbortPartitions +msgid "Cancel" +msgstr "" + +#: Text.Confirm +msgid "Yes, I know what I am doing!" +msgstr "" + +#: Text.FS.Type +msgid "Filesystem type" +msgstr "" + +#: Text.FS.Fat +msgid "FAT (Windows)" +msgstr "" + +#: Text.FS.Ext2 +msgid "Ext2" +msgstr "" + +#: Text.FS.Ext3 +msgid "Ext3" +msgstr "" + +#: Text.FS.Reiser +msgid "Reiser" +msgstr "" + +#: Text.PartNum +msgid "Id" +msgstr "" + +#: Text.PartType +msgid "Type" +msgstr "" + +#: Text.Size +msgid "Size (MB)" +msgstr "" + +#: Text.SelectDevice +msgid "Choose a disk for partitioning" +msgstr "" + +#: Text.ProgressInfo +msgid "Progress of formatting:" +msgstr "" + +#: Text.CreateConfigPartition +msgid "Automatically creating a configuration partition." +msgstr "" + +#: Text.RemovalContainers +msgid "These volumes will be removed:" +msgstr "" + +#: Text.SpecifyPartitions +msgid "Add partitions" +msgstr "" + +#: Help.Partitioning +msgid "You can split every disk into one ore more parts, which are called 'partitions'. This is useful if you want to separate your data or if you want to encrypt only a part of your disk." +msgstr "" + +#: Help.SelectDevice +msgid "Choose one of the disks given in the list. Be aware that you lose all data on the partitions of this disk." +msgstr "" + +#: Help.PartMode +msgid "You may choose between 'automatic' and 'manual' partitioning. Automatic partitioning creates only one partition for the whole disk. With manual partition you can split the disk into multiple parts of different size." +msgstr "" + +#: Help.ConfigPartition +msgid "This CryptoBox is configured to store its runtime settings on a separate disk partition. It will be created automatically if necessary. This reduces the available size of the disk by 5 megabyte." +msgstr "" + +#: Help.RemoveExistingContainers +msgid "Whenever you change the partition table of a disk, you will loose all volumes that were previously defined inside of it." +msgstr "" + +#: Help.PartitionList +msgid "Choose the size for a new partition and add it to the list by clicking on 'Add partition'. Nothing will get written to your disk until you click on 'Write new partition table' below. Be very careful: you will erase all data on this disk." +msgstr "" + +#: AdviceMessage.DeviceDataIsLost.Text +msgid "If you continue, you will destroy all data on the choosen disk. Please be VERY careful!" +msgstr "" + +#: EnvironmentWarning.ReadOnlyConfig.Text +msgid "Read-only setup detected - probably you should create a configuration partition." +msgstr "" + +#: EnvironmentWarning.ReadOnlyConfig.Link.Text +msgid "Initialize partition" +msgstr "" + +#: EnvironmentWarning.MissingProgramSfdisk.Title +msgid "Missing program" +msgstr "" + +#: EnvironmentWarning.MissingProgramSfdisk.Text +msgid "The program 'sfdisk' is not installed. Please ask the administrator of the CryptoBox to configure it properly." +msgstr "" + +#: EnvironmentWarning.MissingProgramMkfs.Text +msgid "The program 'mkfs' is not installed. Please ask the administrator of the CryptoBox to configure it properly." +msgstr "" + +#: EnvironmentWarning.MissingProgramE2label.Text +msgid "The program 'e2label' is not installed. Please ask the administrator of the CryptoBox to configure it properly." +msgstr "" + +#: SuccessMessage.Partitioned.Title +msgid "Partitioning complete" +msgstr "" + +#: SuccessMessage.Partitioned.Text +msgid "The disk was partitioned successfully." +msgstr "" + +#: SuccessMessage.EasySetup.Title +msgid "Initialization completed" +msgstr "" + +#: SuccessMessage.EasySetup.Text +msgid "Automatic initialization was finished successfully." +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Title +msgid "Confirmation missing" +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Text +msgid "You did not confirm this action by activating the checkbox." +msgstr "" + +#: WarningMessage.NoDisksAvailable.Title +msgid "No disks found" +msgstr "" + +#: WarningMessage.NoDisksAvailable.Text +msgid "No suitable disks found - please check your configuration and hardware setup." +msgstr "" + +#: WarningMessage.PartitioningFailed.Title +msgid "Partitioning failed" +msgstr "" + +#: WarningMessage.PartitioningFailed.Text +msgid "The partitioning of the device failed for some reason - sorry!" +msgstr "" + +#: WarningMessage.PartitioningFailed.Link.Text +msgid "Show log messages" +msgstr "" + +#: WarningMessage.FormattingFailed.Title +msgid "Formatting failed" +msgstr "" + +#: WarningMessage.FormattingFailed.Text +msgid "Formatting of at least one volume failed - sorry!" +msgstr "" + +#: WarningMessage.DiskIsBusy.Title +msgid "This disk is busy" +msgstr "" + +#: WarningMessage.DiskIsBusy.Text +msgid "Please close all volumes of this disk before partitioning." +msgstr "" + +#: WarningMessage.DiskIsBusy.Link.Text +msgid "Show all disks" +msgstr "" + +#: WarningMessage.PartitionTooBig.Title +msgid "Invalid size" +msgstr "" + +#: WarningMessage.PartitionTooBig.Text +msgid "The volume size you entered exceeded the available size of the disk." +msgstr "" + +#: WarningMessage.PartitionTooSmall.Text +msgid "The minimum size of a volume is 10 megabytes." +msgstr "" diff --git a/v0.3.4.5/plugins/partition/intl/hu/cryptobox-server-feature-partition.po b/v0.3.4.5/plugins/partition/intl/hu/cryptobox-server-feature-partition.po new file mode 100644 index 0000000..78f0c5b --- /dev/null +++ b/v0.3.4.5/plugins/partition/intl/hu/cryptobox-server-feature-partition.po @@ -0,0 +1,234 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-05 17:02+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Partition manager" +msgstr "" + +#: Link +msgid "Partitions" +msgstr "" + +#: Title +msgid "Manage partitions" +msgstr "" + +#: Button.SelectDevice +msgid "Partition manually" +msgstr "" + +#: Button.EasySetup +msgid "Automatic setup" +msgstr "" + +#: Button.AddPartition +msgid "Add partition" +msgstr "" + +#: Button.DelPartition +msgid "Remove partition" +msgstr "" + +#: Button.SavePartitions +msgid "Write new partition table" +msgstr "" + +#: Button.AbortPartitions +msgid "Cancel" +msgstr "" + +#: Text.Confirm +msgid "Yes, I know what I am doing!" +msgstr "" + +#: Text.FS.Type +msgid "Filesystem type" +msgstr "" + +#: Text.FS.Fat +msgid "FAT (Windows)" +msgstr "" + +#: Text.FS.Ext2 +msgid "Ext2" +msgstr "" + +#: Text.FS.Ext3 +msgid "Ext3" +msgstr "" + +#: Text.FS.Reiser +msgid "Reiser" +msgstr "" + +#: Text.PartNum +msgid "Id" +msgstr "" + +#: Text.PartType +msgid "Type" +msgstr "" + +#: Text.Size +msgid "Size (MB)" +msgstr "" + +#: Text.SelectDevice +msgid "Choose a disk for partitioning" +msgstr "" + +#: Text.ProgressInfo +msgid "Progress of formatting:" +msgstr "" + +#: Text.CreateConfigPartition +msgid "Automatically creating a configuration partition." +msgstr "" + +#: Text.RemovalContainers +msgid "These volumes will be removed:" +msgstr "" + +#: Text.SpecifyPartitions +msgid "Add partitions" +msgstr "" + +#: Help.Partitioning +msgid "You can split every disk into one ore more parts, which are called 'partitions'. This is useful if you want to separate your data or if you want to encrypt only a part of your disk." +msgstr "" + +#: Help.SelectDevice +msgid "Choose one of the disks given in the list. Be aware that you lose all data on the partitions of this disk." +msgstr "" + +#: Help.PartMode +msgid "You may choose between 'automatic' and 'manual' partitioning. Automatic partitioning creates only one partition for the whole disk. With manual partition you can split the disk into multiple parts of different size." +msgstr "" + +#: Help.ConfigPartition +msgid "This CryptoBox is configured to store its runtime settings on a separate disk partition. It will be created automatically if necessary. This reduces the available size of the disk by 5 megabyte." +msgstr "" + +#: Help.RemoveExistingContainers +msgid "Whenever you change the partition table of a disk, you will loose all volumes that were previously defined inside of it." +msgstr "" + +#: Help.PartitionList +msgid "Choose the size for a new partition and add it to the list by clicking on 'Add partition'. Nothing will get written to your disk until you click on 'Write new partition table' below. Be very careful: you will erase all data on this disk." +msgstr "" + +#: AdviceMessage.DeviceDataIsLost.Text +msgid "If you continue, you will destroy all data on the choosen disk. Please be VERY careful!" +msgstr "" + +#: EnvironmentWarning.ReadOnlyConfig.Text +msgid "Read-only setup detected - probably you should create a configuration partition." +msgstr "" + +#: EnvironmentWarning.ReadOnlyConfig.Link.Text +msgid "Initialize partition" +msgstr "" + +#: EnvironmentWarning.MissingProgramSfdisk.Title +msgid "Missing program" +msgstr "" + +#: EnvironmentWarning.MissingProgramSfdisk.Text +msgid "The program 'sfdisk' is not installed. Please ask the administrator of the CryptoBox to configure it properly." +msgstr "" + +#: EnvironmentWarning.MissingProgramMkfs.Text +msgid "The program 'mkfs' is not installed. Please ask the administrator of the CryptoBox to configure it properly." +msgstr "" + +#: EnvironmentWarning.MissingProgramE2label.Text +msgid "The program 'e2label' is not installed. Please ask the administrator of the CryptoBox to configure it properly." +msgstr "" + +#: SuccessMessage.Partitioned.Title +msgid "Partitioning complete" +msgstr "" + +#: SuccessMessage.Partitioned.Text +msgid "The disk was partitioned successfully." +msgstr "" + +#: SuccessMessage.EasySetup.Title +msgid "Initialization completed" +msgstr "" + +#: SuccessMessage.EasySetup.Text +msgid "Automatic initialization was finished successfully." +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Title +msgid "Confirmation missing" +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Text +msgid "You did not confirm this action by activating the checkbox." +msgstr "" + +#: WarningMessage.NoDisksAvailable.Title +msgid "No disks found" +msgstr "" + +#: WarningMessage.NoDisksAvailable.Text +msgid "No suitable disks found - please check your configuration and hardware setup." +msgstr "" + +#: WarningMessage.PartitioningFailed.Title +msgid "Partitioning failed" +msgstr "" + +#: WarningMessage.PartitioningFailed.Text +msgid "The partitioning of the device failed for some reason - sorry!" +msgstr "" + +#: WarningMessage.PartitioningFailed.Link.Text +msgid "Show log messages" +msgstr "" + +#: WarningMessage.FormattingFailed.Title +msgid "Formatting failed" +msgstr "" + +#: WarningMessage.FormattingFailed.Text +msgid "Formatting of at least one volume failed - sorry!" +msgstr "" + +#: WarningMessage.DiskIsBusy.Title +msgid "This disk is busy" +msgstr "" + +#: WarningMessage.DiskIsBusy.Text +msgid "Please close all volumes of this disk before partitioning." +msgstr "" + +#: WarningMessage.DiskIsBusy.Link.Text +msgid "Show all disks" +msgstr "" + +#: WarningMessage.PartitionTooBig.Title +msgid "Invalid size" +msgstr "" + +#: WarningMessage.PartitionTooBig.Text +msgid "The volume size you entered exceeded the available size of the disk." +msgstr "" + +#: WarningMessage.PartitionTooSmall.Text +msgid "The minimum size of a volume is 10 megabytes." +msgstr "" diff --git a/v0.3.4.5/plugins/partition/intl/it/cryptobox-server-feature-partition.po b/v0.3.4.5/plugins/partition/intl/it/cryptobox-server-feature-partition.po new file mode 100644 index 0000000..918e3ae --- /dev/null +++ b/v0.3.4.5/plugins/partition/intl/it/cryptobox-server-feature-partition.po @@ -0,0 +1,233 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-05 17:02+0100\n" +"PO-Revision-Date: 2007-03-20 15:49+0100\n" +"Last-Translator: Fabrizio Tarizzo \n" +"Language-Team: Italian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Partition manager" +msgstr "Gestore delle partizioni" + +#: Link +msgid "Partitions" +msgstr "Partizioni" + +#: Title +msgid "Manage partitions" +msgstr "Gestione delle partizioni" + +#: Button.SelectDevice +msgid "Partition manually" +msgstr "Partizionamento manuale" + +#: Button.EasySetup +msgid "Automatic setup" +msgstr "Impostazioni automatica" + +#: Button.AddPartition +msgid "Add partition" +msgstr "Aggiungi partizione" + +#: Button.DelPartition +msgid "Remove partition" +msgstr "Rimuovi partizione" + +#: Button.SavePartitions +msgid "Write new partition table" +msgstr "Scrivi la nuova tabella delle partizioni" + +#: Button.AbortPartitions +msgid "Cancel" +msgstr "Annulla" + +#: Text.Confirm +msgid "Yes, I know what I am doing!" +msgstr "Sì, so cosa sto facendo!" + +#: Text.FS.Type +msgid "Filesystem type" +msgstr "Tipo di filesystem" + +#: Text.FS.Fat +msgid "FAT (Windows)" +msgstr "FAT (Windows)" + +#: Text.FS.Ext2 +msgid "Ext2" +msgstr "Ext2" + +#: Text.FS.Ext3 +msgid "Ext3" +msgstr "Ext3" + +#: Text.FS.Reiser +msgid "Reiser" +msgstr "Reiser" + +#: Text.PartNum +msgid "Id" +msgstr "Id" + +#: Text.PartType +msgid "Type" +msgstr "Tipo" + +#: Text.Size +msgid "Size (MB)" +msgstr "Dimensione (MB)" + +#: Text.SelectDevice +msgid "Choose a disk for partitioning" +msgstr "Scegliere un disco per il partizionamento" + +#: Text.ProgressInfo +msgid "Progress of formatting:" +msgstr "Avanzamento della formattazione:" + +#: Text.CreateConfigPartition +msgid "Automatically creating a configuration partition." +msgstr "Configurazione automatica delle partizioni." + +#: Text.RemovalContainers +msgid "These volumes will be removed:" +msgstr "Questi volumi saranno rimossi:" + +#: Text.SpecifyPartitions +msgid "Add partitions" +msgstr "Aggiungi partizioni" + +#: Help.Partitioning +msgid "You can split every disk into one ore more parts, which are called 'partitions'. This is useful if you want to separate your data or if you want to encrypt only a part of your disk." +msgstr "È possibile suddividere un disco in più sezioni denominate 'partizioni'. È utile se si desidera separare i dati o cifrare solo una parte del disco." + +#: Help.SelectDevice +msgid "Choose one of the disks given in the list. Be aware that you lose all data on the partitions of this disk." +msgstr "Scegliere un disco dalla lista. Prestare attenzione al fatto che saranno persi tutti i dati sulle partizioni del disco scelto." + +#: Help.PartMode +msgid "You may choose between 'automatic' and 'manual' partitioning. Automatic partitioning creates only one partition for the whole disk. With manual partition you can split the disk into multiple parts of different size." +msgstr "È possibile scegliere tra partizionamento 'automatico' e 'manuale'. Il partizionamento automatico crea una sola partizione che occupa l'intero disco. Col partizionamento manuale è possibile suddividere il disco in più partizioni di diversa dimensione." + +#: Help.ConfigPartition +msgid "This CryptoBox is configured to store its runtime settings on a separate disk partition. It will be created automatically if necessary. This reduces the available size of the disk by 5 megabyte." +msgstr "La CryptoBox è configurata per memorizzare le proprie impostazioni su una partizione separata del disco, che viene creata automaticamente. La capacità del disco è ridotta di circa 5 megabyte." + +#: Help.RemoveExistingContainers +msgid "Whenever you change the partition table of a disk, you will loose all volumes that were previously defined inside of it." +msgstr "Ogni volta che si modifica la tabella delle partizioni di un disco, si perdono tutti i volumi precedentemente definiti in esso." + +#: Help.PartitionList +msgid "Choose the size for a new partition and add it to the list by clicking on 'Add partition'. Nothing will get written to your disk until you click on 'Write new partition table' below. Be very careful: you will erase all data on this disk." +msgstr "Scegliere la dimensione della nuova partizione e aggiungerla alla lista facendo clic su 'Aggiungi partizione'. Non sarà scritto nulla sul disco finché non si fa clic su 'Scrivi la nuova tabella delle partizioni'. Prestare molta attenzione: saranno cancellati tutti i dati sul disco." + +#: AdviceMessage.DeviceDataIsLost.Text +msgid "If you continue, you will destroy all data on the choosen disk. Please be VERY careful!" +msgstr "Se si prosegue, saranno cancellati tutti i dati sul disco scelto. Prestare MOLTA attenzione!" + +#: EnvironmentWarning.ReadOnlyConfig.Text +msgid "Read-only setup detected - probably you should create a configuration partition." +msgstr "È stata rilevata un'impostazione di sola lettura - è probabilmente necessario creare una partizione di configurazione." + +#: EnvironmentWarning.ReadOnlyConfig.Link.Text +msgid "Initialize partition" +msgstr "Inizializza partizioni" + +#: EnvironmentWarning.MissingProgramSfdisk.Title +msgid "Missing program" +msgstr "Programma mancante" + +#: EnvironmentWarning.MissingProgramSfdisk.Text +msgid "The program 'sfdisk' is not installed. Please ask the administrator of the CryptoBox to configure it properly." +msgstr "Il programma 'sfdisk' non è installato. Rivolgersi all'amministratore del server CryptoBox per installarlo e configurarlo opportunamente." + +#: EnvironmentWarning.MissingProgramMkfs.Text +msgid "The program 'mkfs' is not installed. Please ask the administrator of the CryptoBox to configure it properly." +msgstr "Il programma 'mkfs' non è installato. Rivolgersi all'amministratore del server CryptoBox per installarlo e configurarlo opportunamente." + +#: EnvironmentWarning.MissingProgramE2label.Text +msgid "The program 'e2label' is not installed. Please ask the administrator of the CryptoBox to configure it properly." +msgstr "Il programma 'e2label' non è installato. Rivolgersi all'amministratore del server CryptoBox per installarlo e configurarlo opportunamente." + +#: SuccessMessage.Partitioned.Title +msgid "Partitioning complete" +msgstr "Partizionamento completato" + +#: SuccessMessage.Partitioned.Text +msgid "The disk was partitioned successfully." +msgstr "Il disco è stato partizionato con successo." + +#: SuccessMessage.EasySetup.Title +msgid "Initialization completed" +msgstr "Inizializzazione completata" + +#: SuccessMessage.EasySetup.Text +msgid "Automatic initialization was finished successfully." +msgstr "L'inizializzazione automatica è stata completata con successo." + +#: WarningMessage.FormatNotConfirmed.Title +msgid "Confirmation missing" +msgstr "Conferma mancante" + +#: WarningMessage.FormatNotConfirmed.Text +msgid "You did not confirm this action by activating the checkbox." +msgstr "Non è stata confermata l'operazione attivando l'apposita checkbox." + +#: WarningMessage.NoDisksAvailable.Title +msgid "No disks found" +msgstr "Non è stato trovato alcun disco" + +#: WarningMessage.NoDisksAvailable.Text +msgid "No suitable disks found - please check your configuration and hardware setup." +msgstr "Nessun disco adatto trovato - controllare la configurazione e le impostazioni dell'hardware." + +#: WarningMessage.PartitioningFailed.Title +msgid "Partitioning failed" +msgstr "Partizionamento fallito" + +#: WarningMessage.PartitioningFailed.Text +msgid "The partitioning of the device failed for some reason - sorry!" +msgstr "Il partizionamento del disco è fallito." + +#: WarningMessage.PartitioningFailed.Link.Text +msgid "Show log messages" +msgstr "Mostra il registro degli eventi" + +#: WarningMessage.FormattingFailed.Title +msgid "Formatting failed" +msgstr "Formattazione fallita" + +#: WarningMessage.FormattingFailed.Text +msgid "Formatting of at least one volume failed - sorry!" +msgstr "La formattazione di almeno un volume è fallita." + +#: WarningMessage.DiskIsBusy.Title +msgid "This disk is busy" +msgstr "Questo disco è occupato" + +#: WarningMessage.DiskIsBusy.Text +msgid "Please close all volumes of this disk before partitioning." +msgstr "Chiudere tutti i volumi su questo disco prima di procedere col partizionamento." + +#: WarningMessage.DiskIsBusy.Link.Text +msgid "Show all disks" +msgstr "Mostra tutti i dischi" + +#: WarningMessage.PartitionTooBig.Title +msgid "Invalid size" +msgstr "Dimensione non valida" + +#: WarningMessage.PartitionTooBig.Text +msgid "The volume size you entered exceeded the available size of the disk." +msgstr "La dimensione inserita per il volume supera lo spazio disponibile sul disco." + +#: WarningMessage.PartitionTooSmall.Text +msgid "The minimum size of a volume is 10 megabytes." +msgstr "La dimensione minima per un volume è pari a 10 megabyte." diff --git a/v0.3.4.5/plugins/partition/intl/ja/cryptobox-server-feature-partition.po b/v0.3.4.5/plugins/partition/intl/ja/cryptobox-server-feature-partition.po new file mode 100644 index 0000000..4498870 --- /dev/null +++ b/v0.3.4.5/plugins/partition/intl/ja/cryptobox-server-feature-partition.po @@ -0,0 +1,233 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-05 17:02+0100\n" +"PO-Revision-Date: 2007-02-26 10:51+0100\n" +"Last-Translator: kinneko \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Partition manager" +msgstr "ドライブ区画の管理" + +#: Link +msgid "Partitions" +msgstr "ドライブ区画" + +#: Title +msgid "Manage partitions" +msgstr "ドライブ区画の管理" + +#: Button.SelectDevice +msgid "Partition manually" +msgstr "ドライブ区画を自分で設定する" + +#: Button.EasySetup +msgid "Automatic setup" +msgstr "ドライブ区画を自動設定する" + +#: Button.AddPartition +msgid "Add partition" +msgstr "ドライブ区画を追加する" + +#: Button.DelPartition +msgid "Remove partition" +msgstr "ドライブ区画を削除する" + +#: Button.SavePartitions +msgid "Write new partition table" +msgstr "設定したドライブ区画表を書き込む" + +#: Button.AbortPartitions +msgid "Cancel" +msgstr "キャンセル" + +#: Text.Confirm +msgid "Yes, I know what I am doing!" +msgstr "もちろん、この操作が何を意味するのか理解しています!" + +#: Text.FS.Type +msgid "Filesystem type" +msgstr "ファイルシステムタイプ" + +#: Text.FS.Fat +msgid "FAT (Windows)" +msgstr "FAT (Windows)" + +#: Text.FS.Ext2 +msgid "Ext2" +msgstr "Ext2" + +#: Text.FS.Ext3 +msgid "Ext3" +msgstr "Ext3" + +#: Text.FS.Reiser +msgid "Reiser" +msgstr "Reiser" + +#: Text.PartNum +msgid "Id" +msgstr "区画ID" + +#: Text.PartType +msgid "Type" +msgstr "タイプ" + +#: Text.Size +msgid "Size (MB)" +msgstr "サイズ(MB)" + +#: Text.SelectDevice +msgid "Choose a disk for partitioning" +msgstr "区画分けするドライブを選択する" + +#: Text.ProgressInfo +msgid "Progress of formatting:" +msgstr "初期化中:" + +#: Text.CreateConfigPartition +msgid "Automatically creating a configuration partition." +msgstr "区画設定を自動作成しています。" + +#: Text.RemovalContainers +msgid "These volumes will be removed:" +msgstr "この領域は削除されます:" + +#: Text.SpecifyPartitions +msgid "Add partitions" +msgstr "区画を追加します" + +#: Help.Partitioning +msgid "You can split every disk into one ore more parts, which are called 'partitions'. This is useful if you want to separate your data or if you want to encrypt only a part of your disk." +msgstr "ディスクは、1つもしくは複数の「区画」と呼ばれる部分に分割することができます。この機能は、データを分けて管理したい場合や、ディスクの一部だけを暗号化したい場合に役に立ちます。" + +#: Help.SelectDevice +msgid "Choose one of the disks given in the list. Be aware that you lose all data on the partitions of this disk." +msgstr "一覧で表示されるディスクのうち1つを選んでください。操作を行うと、このディスク上の区画にあるすべてのデータが削除されることに注意してください。" + +#: Help.PartMode +msgid "You may choose between 'automatic' and 'manual' partitioning. Automatic partitioning creates only one partition for the whole disk. With manual partition you can split the disk into multiple parts of different size." +msgstr "「自動」と「手動」による区画分割を選ぶことができます。自動での区画分割は、ディスクに1つだけの区画を作成します。手動での区画分割は、ちがったいくつかの大きさの区画を作ることができます。" + +#: Help.ConfigPartition +msgid "This CryptoBox is configured to store its runtime settings on a separate disk partition. It will be created automatically if necessary. This reduces the available size of the disk by 5 megabyte." +msgstr "クリプトボックスは、保管の必要な設定情報を独立した区画に保存します。区画は必要に応じて自動的に作成され、その大きさは5MB程度です。" + +#: Help.RemoveExistingContainers +msgid "Whenever you change the partition table of a disk, you will loose all volumes that were previously defined inside of it." +msgstr "以前にどのような内容が設定されていたとしても、ディスクの分割構成を変更するときは、すべての領域は失われてしまいます。" + +#: Help.PartitionList +msgid "Choose the size for a new partition and add it to the list by clicking on 'Add partition'. Nothing will get written to your disk until you click on 'Write new partition table' below. Be very careful: you will erase all data on this disk." +msgstr "新しい区画の大きさを入力して、「区画の追加」で選んだリストに区画を追加します。「設定したドライブ区画表を書き込む」を選択するまで、この情報がディスクに書き込まれることはありません。慎重に作業してください:あなたは、このディスク上にあるすべてのデータを消去しようとしています。" + +#: AdviceMessage.DeviceDataIsLost.Text +msgid "If you continue, you will destroy all data on the choosen disk. Please be VERY careful!" +msgstr "操作を続けると、選択されたディスク上にあるすべてのデータは破壊されます。特別に注意をはらってください!" + +#: EnvironmentWarning.ReadOnlyConfig.Text +msgid "Read-only setup detected - probably you should create a configuration partition." +msgstr "読み出し専用の設定を検知しました - おそらく、区画の設定を行う必要があるのではないでしょうか。" + +#: EnvironmentWarning.ReadOnlyConfig.Link.Text +msgid "Initialize partition" +msgstr "区画を初期化します" + +#: EnvironmentWarning.MissingProgramSfdisk.Title +msgid "Missing program" +msgstr "外部プログラムがありません" + +#: EnvironmentWarning.MissingProgramSfdisk.Text +msgid "The program 'sfdisk' is not installed. Please ask the administrator of the CryptoBox to configure it properly." +msgstr "'sfdisk'プログラムがインストールされていないようです。クリプトボックスの管理者に、インストールを依頼してください。" + +#: EnvironmentWarning.MissingProgramMkfs.Text +msgid "The program 'mkfs' is not installed. Please ask the administrator of the CryptoBox to configure it properly." +msgstr "'mkfs'プログラムがインストールされていないようです。クリプトボックスの管理者に、インストールを依頼してください。" + +#: EnvironmentWarning.MissingProgramE2label.Text +msgid "The program 'e2label' is not installed. Please ask the administrator of the CryptoBox to configure it properly." +msgstr "'e2label'プログラムがインストールされていないようです。クリプトボックスの管理者に、インストールを依頼してください。" + +#: SuccessMessage.Partitioned.Title +msgid "Partitioning complete" +msgstr "区画分割は完了しました" + +#: SuccessMessage.Partitioned.Text +msgid "The disk was partitioned successfully." +msgstr "ディスクは区画分割されました。" + +#: SuccessMessage.EasySetup.Title +msgid "Initialization completed" +msgstr "初期化は完了しました" + +#: SuccessMessage.EasySetup.Text +msgid "Automatic initialization was finished successfully." +msgstr "自動での初期化は完了しました" + +#: WarningMessage.FormatNotConfirmed.Title +msgid "Confirmation missing" +msgstr "作業開始の確認ができませんでした" + +#: WarningMessage.FormatNotConfirmed.Text +msgid "You did not confirm this action by activating the checkbox." +msgstr "この操作の作業開始の確認ができませんでした。必要であれば、チェックボックスにチェックマークを入れてください。" + +#: WarningMessage.NoDisksAvailable.Title +msgid "No disks found" +msgstr "ディスクがありませんでした" + +#: WarningMessage.NoDisksAvailable.Text +msgid "No suitable disks found - please check your configuration and hardware setup." +msgstr "取り付けられたディスクは見つかりませんでした - ハードウエアの接続とBIOS設定を確認してください。" + +#: WarningMessage.PartitioningFailed.Title +msgid "Partitioning failed" +msgstr "区画作成に失敗しました" + +#: WarningMessage.PartitioningFailed.Text +msgid "The partitioning of the device failed for some reason - sorry!" +msgstr "なんらかの理由で、装置の初期化に失敗しました。" + +#: WarningMessage.PartitioningFailed.Link.Text +msgid "Show log messages" +msgstr "ログメッセージの表示" + +#: WarningMessage.FormattingFailed.Title +msgid "Formatting failed" +msgstr "初期化に失敗しました" + +#: WarningMessage.FormattingFailed.Text +msgid "Formatting of at least one volume failed - sorry!" +msgstr "すくなくとも、1つの領域の初期化に失敗しました。" + +#: WarningMessage.DiskIsBusy.Title +msgid "This disk is busy" +msgstr "このディスクは使用中です" + +#: WarningMessage.DiskIsBusy.Text +msgid "Please close all volumes of this disk before partitioning." +msgstr "このディスクの区画を作成する前には、このディスクのすべての領域を選択する必要があります。" + +#: WarningMessage.DiskIsBusy.Link.Text +msgid "Show all disks" +msgstr "すべてのディスクを表示する" + +#: WarningMessage.PartitionTooBig.Title +msgid "Invalid size" +msgstr "領域の容量指定が大きすぎるため無効です" + +#: WarningMessage.PartitionTooBig.Text +msgid "The volume size you entered exceeded the available size of the disk." +msgstr "入力された領域の容量は、このディスクで利用できる容量を上回っています。" + +#: WarningMessage.PartitionTooSmall.Text +msgid "The minimum size of a volume is 10 megabytes." +msgstr "領域の最小容量は10MBです。" diff --git a/v0.3.4.5/plugins/partition/intl/nl/cryptobox-server-feature-partition.po b/v0.3.4.5/plugins/partition/intl/nl/cryptobox-server-feature-partition.po new file mode 100644 index 0000000..78f0c5b --- /dev/null +++ b/v0.3.4.5/plugins/partition/intl/nl/cryptobox-server-feature-partition.po @@ -0,0 +1,234 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-05 17:02+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Partition manager" +msgstr "" + +#: Link +msgid "Partitions" +msgstr "" + +#: Title +msgid "Manage partitions" +msgstr "" + +#: Button.SelectDevice +msgid "Partition manually" +msgstr "" + +#: Button.EasySetup +msgid "Automatic setup" +msgstr "" + +#: Button.AddPartition +msgid "Add partition" +msgstr "" + +#: Button.DelPartition +msgid "Remove partition" +msgstr "" + +#: Button.SavePartitions +msgid "Write new partition table" +msgstr "" + +#: Button.AbortPartitions +msgid "Cancel" +msgstr "" + +#: Text.Confirm +msgid "Yes, I know what I am doing!" +msgstr "" + +#: Text.FS.Type +msgid "Filesystem type" +msgstr "" + +#: Text.FS.Fat +msgid "FAT (Windows)" +msgstr "" + +#: Text.FS.Ext2 +msgid "Ext2" +msgstr "" + +#: Text.FS.Ext3 +msgid "Ext3" +msgstr "" + +#: Text.FS.Reiser +msgid "Reiser" +msgstr "" + +#: Text.PartNum +msgid "Id" +msgstr "" + +#: Text.PartType +msgid "Type" +msgstr "" + +#: Text.Size +msgid "Size (MB)" +msgstr "" + +#: Text.SelectDevice +msgid "Choose a disk for partitioning" +msgstr "" + +#: Text.ProgressInfo +msgid "Progress of formatting:" +msgstr "" + +#: Text.CreateConfigPartition +msgid "Automatically creating a configuration partition." +msgstr "" + +#: Text.RemovalContainers +msgid "These volumes will be removed:" +msgstr "" + +#: Text.SpecifyPartitions +msgid "Add partitions" +msgstr "" + +#: Help.Partitioning +msgid "You can split every disk into one ore more parts, which are called 'partitions'. This is useful if you want to separate your data or if you want to encrypt only a part of your disk." +msgstr "" + +#: Help.SelectDevice +msgid "Choose one of the disks given in the list. Be aware that you lose all data on the partitions of this disk." +msgstr "" + +#: Help.PartMode +msgid "You may choose between 'automatic' and 'manual' partitioning. Automatic partitioning creates only one partition for the whole disk. With manual partition you can split the disk into multiple parts of different size." +msgstr "" + +#: Help.ConfigPartition +msgid "This CryptoBox is configured to store its runtime settings on a separate disk partition. It will be created automatically if necessary. This reduces the available size of the disk by 5 megabyte." +msgstr "" + +#: Help.RemoveExistingContainers +msgid "Whenever you change the partition table of a disk, you will loose all volumes that were previously defined inside of it." +msgstr "" + +#: Help.PartitionList +msgid "Choose the size for a new partition and add it to the list by clicking on 'Add partition'. Nothing will get written to your disk until you click on 'Write new partition table' below. Be very careful: you will erase all data on this disk." +msgstr "" + +#: AdviceMessage.DeviceDataIsLost.Text +msgid "If you continue, you will destroy all data on the choosen disk. Please be VERY careful!" +msgstr "" + +#: EnvironmentWarning.ReadOnlyConfig.Text +msgid "Read-only setup detected - probably you should create a configuration partition." +msgstr "" + +#: EnvironmentWarning.ReadOnlyConfig.Link.Text +msgid "Initialize partition" +msgstr "" + +#: EnvironmentWarning.MissingProgramSfdisk.Title +msgid "Missing program" +msgstr "" + +#: EnvironmentWarning.MissingProgramSfdisk.Text +msgid "The program 'sfdisk' is not installed. Please ask the administrator of the CryptoBox to configure it properly." +msgstr "" + +#: EnvironmentWarning.MissingProgramMkfs.Text +msgid "The program 'mkfs' is not installed. Please ask the administrator of the CryptoBox to configure it properly." +msgstr "" + +#: EnvironmentWarning.MissingProgramE2label.Text +msgid "The program 'e2label' is not installed. Please ask the administrator of the CryptoBox to configure it properly." +msgstr "" + +#: SuccessMessage.Partitioned.Title +msgid "Partitioning complete" +msgstr "" + +#: SuccessMessage.Partitioned.Text +msgid "The disk was partitioned successfully." +msgstr "" + +#: SuccessMessage.EasySetup.Title +msgid "Initialization completed" +msgstr "" + +#: SuccessMessage.EasySetup.Text +msgid "Automatic initialization was finished successfully." +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Title +msgid "Confirmation missing" +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Text +msgid "You did not confirm this action by activating the checkbox." +msgstr "" + +#: WarningMessage.NoDisksAvailable.Title +msgid "No disks found" +msgstr "" + +#: WarningMessage.NoDisksAvailable.Text +msgid "No suitable disks found - please check your configuration and hardware setup." +msgstr "" + +#: WarningMessage.PartitioningFailed.Title +msgid "Partitioning failed" +msgstr "" + +#: WarningMessage.PartitioningFailed.Text +msgid "The partitioning of the device failed for some reason - sorry!" +msgstr "" + +#: WarningMessage.PartitioningFailed.Link.Text +msgid "Show log messages" +msgstr "" + +#: WarningMessage.FormattingFailed.Title +msgid "Formatting failed" +msgstr "" + +#: WarningMessage.FormattingFailed.Text +msgid "Formatting of at least one volume failed - sorry!" +msgstr "" + +#: WarningMessage.DiskIsBusy.Title +msgid "This disk is busy" +msgstr "" + +#: WarningMessage.DiskIsBusy.Text +msgid "Please close all volumes of this disk before partitioning." +msgstr "" + +#: WarningMessage.DiskIsBusy.Link.Text +msgid "Show all disks" +msgstr "" + +#: WarningMessage.PartitionTooBig.Title +msgid "Invalid size" +msgstr "" + +#: WarningMessage.PartitionTooBig.Text +msgid "The volume size you entered exceeded the available size of the disk." +msgstr "" + +#: WarningMessage.PartitionTooSmall.Text +msgid "The minimum size of a volume is 10 megabytes." +msgstr "" diff --git a/v0.3.4.5/plugins/partition/intl/pl/cryptobox-server-feature-partition.po b/v0.3.4.5/plugins/partition/intl/pl/cryptobox-server-feature-partition.po new file mode 100644 index 0000000..c70b5d7 --- /dev/null +++ b/v0.3.4.5/plugins/partition/intl/pl/cryptobox-server-feature-partition.po @@ -0,0 +1,233 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-04-01 15:52+0200\n" +"PO-Revision-Date: 2007-03-30 09:44+0200\n" +"Last-Translator: Andrzej S. Kaznowski \n" +"Language-Team: POLSKI \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Partition manager" +msgstr "Zarządzanie partycjami" + +#: Link +msgid "Partitions" +msgstr "Partycje" + +#: Title +msgid "Manage partitions" +msgstr "Zarządzaj partycjami" + +#: Button.SelectDevice +msgid "Partition manually" +msgstr "Partycjonowanie ręczne" + +#: Button.EasySetup +msgid "Automatic setup" +msgstr "Ustawiaj automatycznie" + +#: Button.AddPartition +msgid "Add partition" +msgstr "Dodaj partycję" + +#: Button.DelPartition +msgid "Remove partition" +msgstr "Usuń partycję" + +#: Button.SavePartitions +msgid "Write new partition table" +msgstr "Zapisz nową tablicę partycji" + +#: Button.AbortPartitions +msgid "Cancel" +msgstr "Anuluj" + +#: Text.Confirm +msgid "Yes, I know what I am doing!" +msgstr "Wykonaj, wiem, co robię!" + +#: Text.FS.Type +msgid "Filesystem type" +msgstr "System plików" + +#: Text.FS.Fat +msgid "FAT (Windows)" +msgstr "FAT (Windows)" + +#: Text.FS.Ext2 +msgid "Ext2" +msgstr "Ext2" + +#: Text.FS.Ext3 +msgid "Ext3" +msgstr "Ext3" + +#: Text.FS.Reiser +msgid "Reiser" +msgstr "Reiser" + +#: Text.PartNum +msgid "Id" +msgstr "Id" + +#: Text.PartType +msgid "Type" +msgstr "Rodzaj" + +#: Text.Size +msgid "Size (MB)" +msgstr "Pojemność (MB)" + +#: Text.SelectDevice +msgid "Choose a disk for partitioning" +msgstr "Wybierz dysk do partycjonowania" + +#: Text.ProgressInfo +msgid "Progress of formatting:" +msgstr "Postęp w formatowaniu:" + +#: Text.CreateConfigPartition +msgid "Automatically creating a configuration partition." +msgstr "Automatyczne tworzenie konfiguracji partycji" + +#: Text.RemovalContainers +msgid "These volumes will be removed:" +msgstr "Usunięte zostaną następujące woluminy:" + +#: Text.SpecifyPartitions +msgid "Add partitions" +msgstr "Dodaj partycje" + +#: Help.Partitioning +msgid "You can split every disk into one ore more parts, which are called 'partitions'. This is useful if you want to separate your data or if you want to encrypt only a part of your disk." +msgstr "Można podzielić każdy dysk na jedną lub więcej częsci zwanych 'partycjami'. To jest przydatne w przypadku potrzeby rozdzielenia danych lub jeśli chcesz zaszyfrować tylko część dysku." + +#: Help.SelectDevice +msgid "Choose one of the disks given in the list. Be aware that you lose all data on the partitions of this disk." +msgstr "Wybierz jeden z dysków podanych w liście. Bądź świadomy, że stracisz wszystkie dane o partycjach z tego dysku." + +#: Help.PartMode +msgid "You may choose between 'automatic' and 'manual' partitioning. Automatic partitioning creates only one partition for the whole disk. With manual partition you can split the disk into multiple parts of different size." +msgstr "Możesz wybrać między partycjonowaniem \"automatycznym\" i \"ręcznym\". Partycjonowanie automatyczne tworzy tylko jedną partycję dla całego dysku. Używając ręcznego partycjonowania możesz podzielić dysk na wiele części różnych wielkości." + +#: Help.ConfigPartition +msgid "This CryptoBox is configured to store its runtime settings on a separate disk partition. It will be created automatically if necessary. This reduces the available size of the disk by 5 megabyte." +msgstr "CryptoBox przechowuje swoje bieżące ustawienia na osobnej partycji dysku. Jęsli zajdzie taka potrzeba, zostanie utworzony automatycznie. Zmniejsza to dostępną pojemność dysku o 5 begabajtów." + +#: Help.RemoveExistingContainers +msgid "Whenever you change the partition table of a disk, you will loose all volumes that were previously defined inside of it." +msgstr "Jeśli kiedykolwiek zmienisz tablicę partycjonowania dysku, stracisz wszystkie woluminy, które zostały wcześniej w nim zdefiniowane." + +#: Help.PartitionList +msgid "Choose the size for a new partition and add it to the list by clicking on 'Add partition'. Nothing will get written to your disk until you click on 'Write new partition table' below. Be very careful: you will erase all data on this disk." +msgstr "Wybierz rozmiar nowej partycji i dodaj ją do listy klikając na 'Dodaj partycję'. Nic nie zostanie zapisane na twoim dysku, dopóki nie klikniesz poniżej na 'Napisz nową tablicę partycjonowania'." + +#: AdviceMessage.DeviceDataIsLost.Text +msgid "If you continue, you will destroy all data on the choosen disk. Please be VERY careful!" +msgstr "Jeśli będziesz kontynuował, stracisz wszystkie dane z wybranego dysku. Proszę BARDZO uważać!" + +#: EnvironmentWarning.ReadOnlyConfig.Text +msgid "Read-only setup detected - probably you should create a configuration partition." +msgstr "System tylko do odczytu - powinnieneś utworzyć partycję konfiguracyjną." + +#: EnvironmentWarning.ReadOnlyConfig.Link.Text +msgid "Initialize partition" +msgstr "Zainicjuj partycję" + +#: EnvironmentWarning.MissingProgramSfdisk.Title +msgid "Missing program" +msgstr "Brak programu" + +#: EnvironmentWarning.MissingProgramSfdisk.Text +msgid "The program 'sfdisk' is not installed. Please ask the administrator of the CryptoBox to configure it properly." +msgstr "Program 'sfdisk' nie jest instalowany. Proszę zwrócić się do administratora serwera CryptoBox, aby prawidłowo skonfigurał go." + +#: EnvironmentWarning.MissingProgramMkfs.Text +msgid "The program 'mkfs' is not installed. Please ask the administrator of the CryptoBox to configure it properly." +msgstr "Program 'mkfs' nie jest instalowany. Proszę zwrócić się do administratora serwera CryptoBox, aby prawidłowo skonfigurał go." + +#: EnvironmentWarning.MissingProgramE2label.Text +msgid "The program 'e2label' is not installed. Please ask the administrator of the CryptoBox to configure it properly." +msgstr "Program 'e2label' nie jest instalowany. Proszę zwrócić się do administratora serwera CryptoBox, aby prawidłowo skonfigurał go." + +#: SuccessMessage.Partitioned.Title +msgid "Partitioning complete" +msgstr "Partycjonowanie skończone" + +#: SuccessMessage.Partitioned.Text +msgid "The disk was partitioned successfully." +msgstr "Partycjonowanie dysku powiodło się." + +#: SuccessMessage.EasySetup.Title +msgid "Initialization completed" +msgstr "Zakończono inicjalizację" + +#: SuccessMessage.EasySetup.Text +msgid "Automatic initialization was finished successfully." +msgstr "Automatyczną inicjalizację zakończono pomyślnie." + +#: WarningMessage.FormatNotConfirmed.Title +msgid "Confirmation missing" +msgstr "Brak potwierdzenia" + +#: WarningMessage.FormatNotConfirmed.Text +msgid "You did not confirm this action by activating the checkbox." +msgstr "Nie potwierdziłeś tego polecenia - zaznacz właściwe pole." + +#: WarningMessage.NoDisksAvailable.Title +msgid "No disks found" +msgstr "Nie znaleziono żadnych dysków" + +#: WarningMessage.NoDisksAvailable.Text +msgid "No suitable disks found - please check your configuration and hardware setup." +msgstr "Nie znaleziono odpowiednich dysków - proszę sprawdzić konfigurację i ustawienia komputera." + +#: WarningMessage.PartitioningFailed.Title +msgid "Partitioning failed" +msgstr "Partycjonowanie nie powiodło się" + +#: WarningMessage.PartitioningFailed.Text +msgid "The partitioning of the device failed for some reason - sorry!" +msgstr "Partycjonowanie urządzenia nie powiodło się - przepraszamy!" + +#: WarningMessage.PartitioningFailed.Link.Text +msgid "Show log messages" +msgstr "Pokazuj komunikaty rejestru" + +#: WarningMessage.FormattingFailed.Title +msgid "Formatting failed" +msgstr "Formatowanie nie powiodło się" + +#: WarningMessage.FormattingFailed.Text +msgid "Formatting of at least one volume failed - sorry!" +msgstr "Formatowanie przynajmniej jednego woluminu nie powiodło się - przepraszamy!" + +#: WarningMessage.DiskIsBusy.Title +msgid "This disk is busy" +msgstr "Wybrany dysk jest zajęty" + +#: WarningMessage.DiskIsBusy.Text +msgid "Please close all volumes of this disk before partitioning." +msgstr "Proszę zamknąć wszystkie woluminy tego dysku przed partycjonowaniem." + +#: WarningMessage.DiskIsBusy.Link.Text +msgid "Show all disks" +msgstr "Pokazuj wszystkie dyski" + +#: WarningMessage.PartitionTooBig.Title +msgid "Invalid size" +msgstr "Nieprawidłowa pojemność" + +#: WarningMessage.PartitionTooBig.Text +msgid "The volume size you entered exceeded the available size of the disk." +msgstr "Podana przez Ciebie pojemność woluminu jest większa niż dostępna pojemność dysku." + +#: WarningMessage.PartitionTooSmall.Text +msgid "The minimum size of a volume is 10 megabytes." +msgstr "Minimalna pojemność woluminu jest 10 megabajtów." diff --git a/v0.3.4.5/plugins/partition/intl/pt/cryptobox-server-feature-partition.po b/v0.3.4.5/plugins/partition/intl/pt/cryptobox-server-feature-partition.po new file mode 100644 index 0000000..78f0c5b --- /dev/null +++ b/v0.3.4.5/plugins/partition/intl/pt/cryptobox-server-feature-partition.po @@ -0,0 +1,234 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-05 17:02+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Partition manager" +msgstr "" + +#: Link +msgid "Partitions" +msgstr "" + +#: Title +msgid "Manage partitions" +msgstr "" + +#: Button.SelectDevice +msgid "Partition manually" +msgstr "" + +#: Button.EasySetup +msgid "Automatic setup" +msgstr "" + +#: Button.AddPartition +msgid "Add partition" +msgstr "" + +#: Button.DelPartition +msgid "Remove partition" +msgstr "" + +#: Button.SavePartitions +msgid "Write new partition table" +msgstr "" + +#: Button.AbortPartitions +msgid "Cancel" +msgstr "" + +#: Text.Confirm +msgid "Yes, I know what I am doing!" +msgstr "" + +#: Text.FS.Type +msgid "Filesystem type" +msgstr "" + +#: Text.FS.Fat +msgid "FAT (Windows)" +msgstr "" + +#: Text.FS.Ext2 +msgid "Ext2" +msgstr "" + +#: Text.FS.Ext3 +msgid "Ext3" +msgstr "" + +#: Text.FS.Reiser +msgid "Reiser" +msgstr "" + +#: Text.PartNum +msgid "Id" +msgstr "" + +#: Text.PartType +msgid "Type" +msgstr "" + +#: Text.Size +msgid "Size (MB)" +msgstr "" + +#: Text.SelectDevice +msgid "Choose a disk for partitioning" +msgstr "" + +#: Text.ProgressInfo +msgid "Progress of formatting:" +msgstr "" + +#: Text.CreateConfigPartition +msgid "Automatically creating a configuration partition." +msgstr "" + +#: Text.RemovalContainers +msgid "These volumes will be removed:" +msgstr "" + +#: Text.SpecifyPartitions +msgid "Add partitions" +msgstr "" + +#: Help.Partitioning +msgid "You can split every disk into one ore more parts, which are called 'partitions'. This is useful if you want to separate your data or if you want to encrypt only a part of your disk." +msgstr "" + +#: Help.SelectDevice +msgid "Choose one of the disks given in the list. Be aware that you lose all data on the partitions of this disk." +msgstr "" + +#: Help.PartMode +msgid "You may choose between 'automatic' and 'manual' partitioning. Automatic partitioning creates only one partition for the whole disk. With manual partition you can split the disk into multiple parts of different size." +msgstr "" + +#: Help.ConfigPartition +msgid "This CryptoBox is configured to store its runtime settings on a separate disk partition. It will be created automatically if necessary. This reduces the available size of the disk by 5 megabyte." +msgstr "" + +#: Help.RemoveExistingContainers +msgid "Whenever you change the partition table of a disk, you will loose all volumes that were previously defined inside of it." +msgstr "" + +#: Help.PartitionList +msgid "Choose the size for a new partition and add it to the list by clicking on 'Add partition'. Nothing will get written to your disk until you click on 'Write new partition table' below. Be very careful: you will erase all data on this disk." +msgstr "" + +#: AdviceMessage.DeviceDataIsLost.Text +msgid "If you continue, you will destroy all data on the choosen disk. Please be VERY careful!" +msgstr "" + +#: EnvironmentWarning.ReadOnlyConfig.Text +msgid "Read-only setup detected - probably you should create a configuration partition." +msgstr "" + +#: EnvironmentWarning.ReadOnlyConfig.Link.Text +msgid "Initialize partition" +msgstr "" + +#: EnvironmentWarning.MissingProgramSfdisk.Title +msgid "Missing program" +msgstr "" + +#: EnvironmentWarning.MissingProgramSfdisk.Text +msgid "The program 'sfdisk' is not installed. Please ask the administrator of the CryptoBox to configure it properly." +msgstr "" + +#: EnvironmentWarning.MissingProgramMkfs.Text +msgid "The program 'mkfs' is not installed. Please ask the administrator of the CryptoBox to configure it properly." +msgstr "" + +#: EnvironmentWarning.MissingProgramE2label.Text +msgid "The program 'e2label' is not installed. Please ask the administrator of the CryptoBox to configure it properly." +msgstr "" + +#: SuccessMessage.Partitioned.Title +msgid "Partitioning complete" +msgstr "" + +#: SuccessMessage.Partitioned.Text +msgid "The disk was partitioned successfully." +msgstr "" + +#: SuccessMessage.EasySetup.Title +msgid "Initialization completed" +msgstr "" + +#: SuccessMessage.EasySetup.Text +msgid "Automatic initialization was finished successfully." +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Title +msgid "Confirmation missing" +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Text +msgid "You did not confirm this action by activating the checkbox." +msgstr "" + +#: WarningMessage.NoDisksAvailable.Title +msgid "No disks found" +msgstr "" + +#: WarningMessage.NoDisksAvailable.Text +msgid "No suitable disks found - please check your configuration and hardware setup." +msgstr "" + +#: WarningMessage.PartitioningFailed.Title +msgid "Partitioning failed" +msgstr "" + +#: WarningMessage.PartitioningFailed.Text +msgid "The partitioning of the device failed for some reason - sorry!" +msgstr "" + +#: WarningMessage.PartitioningFailed.Link.Text +msgid "Show log messages" +msgstr "" + +#: WarningMessage.FormattingFailed.Title +msgid "Formatting failed" +msgstr "" + +#: WarningMessage.FormattingFailed.Text +msgid "Formatting of at least one volume failed - sorry!" +msgstr "" + +#: WarningMessage.DiskIsBusy.Title +msgid "This disk is busy" +msgstr "" + +#: WarningMessage.DiskIsBusy.Text +msgid "Please close all volumes of this disk before partitioning." +msgstr "" + +#: WarningMessage.DiskIsBusy.Link.Text +msgid "Show all disks" +msgstr "" + +#: WarningMessage.PartitionTooBig.Title +msgid "Invalid size" +msgstr "" + +#: WarningMessage.PartitionTooBig.Text +msgid "The volume size you entered exceeded the available size of the disk." +msgstr "" + +#: WarningMessage.PartitionTooSmall.Text +msgid "The minimum size of a volume is 10 megabytes." +msgstr "" diff --git a/v0.3.4.5/plugins/partition/intl/ru/cryptobox-server-feature-partition.po b/v0.3.4.5/plugins/partition/intl/ru/cryptobox-server-feature-partition.po new file mode 100644 index 0000000..78f0c5b --- /dev/null +++ b/v0.3.4.5/plugins/partition/intl/ru/cryptobox-server-feature-partition.po @@ -0,0 +1,234 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-05 17:02+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Partition manager" +msgstr "" + +#: Link +msgid "Partitions" +msgstr "" + +#: Title +msgid "Manage partitions" +msgstr "" + +#: Button.SelectDevice +msgid "Partition manually" +msgstr "" + +#: Button.EasySetup +msgid "Automatic setup" +msgstr "" + +#: Button.AddPartition +msgid "Add partition" +msgstr "" + +#: Button.DelPartition +msgid "Remove partition" +msgstr "" + +#: Button.SavePartitions +msgid "Write new partition table" +msgstr "" + +#: Button.AbortPartitions +msgid "Cancel" +msgstr "" + +#: Text.Confirm +msgid "Yes, I know what I am doing!" +msgstr "" + +#: Text.FS.Type +msgid "Filesystem type" +msgstr "" + +#: Text.FS.Fat +msgid "FAT (Windows)" +msgstr "" + +#: Text.FS.Ext2 +msgid "Ext2" +msgstr "" + +#: Text.FS.Ext3 +msgid "Ext3" +msgstr "" + +#: Text.FS.Reiser +msgid "Reiser" +msgstr "" + +#: Text.PartNum +msgid "Id" +msgstr "" + +#: Text.PartType +msgid "Type" +msgstr "" + +#: Text.Size +msgid "Size (MB)" +msgstr "" + +#: Text.SelectDevice +msgid "Choose a disk for partitioning" +msgstr "" + +#: Text.ProgressInfo +msgid "Progress of formatting:" +msgstr "" + +#: Text.CreateConfigPartition +msgid "Automatically creating a configuration partition." +msgstr "" + +#: Text.RemovalContainers +msgid "These volumes will be removed:" +msgstr "" + +#: Text.SpecifyPartitions +msgid "Add partitions" +msgstr "" + +#: Help.Partitioning +msgid "You can split every disk into one ore more parts, which are called 'partitions'. This is useful if you want to separate your data or if you want to encrypt only a part of your disk." +msgstr "" + +#: Help.SelectDevice +msgid "Choose one of the disks given in the list. Be aware that you lose all data on the partitions of this disk." +msgstr "" + +#: Help.PartMode +msgid "You may choose between 'automatic' and 'manual' partitioning. Automatic partitioning creates only one partition for the whole disk. With manual partition you can split the disk into multiple parts of different size." +msgstr "" + +#: Help.ConfigPartition +msgid "This CryptoBox is configured to store its runtime settings on a separate disk partition. It will be created automatically if necessary. This reduces the available size of the disk by 5 megabyte." +msgstr "" + +#: Help.RemoveExistingContainers +msgid "Whenever you change the partition table of a disk, you will loose all volumes that were previously defined inside of it." +msgstr "" + +#: Help.PartitionList +msgid "Choose the size for a new partition and add it to the list by clicking on 'Add partition'. Nothing will get written to your disk until you click on 'Write new partition table' below. Be very careful: you will erase all data on this disk." +msgstr "" + +#: AdviceMessage.DeviceDataIsLost.Text +msgid "If you continue, you will destroy all data on the choosen disk. Please be VERY careful!" +msgstr "" + +#: EnvironmentWarning.ReadOnlyConfig.Text +msgid "Read-only setup detected - probably you should create a configuration partition." +msgstr "" + +#: EnvironmentWarning.ReadOnlyConfig.Link.Text +msgid "Initialize partition" +msgstr "" + +#: EnvironmentWarning.MissingProgramSfdisk.Title +msgid "Missing program" +msgstr "" + +#: EnvironmentWarning.MissingProgramSfdisk.Text +msgid "The program 'sfdisk' is not installed. Please ask the administrator of the CryptoBox to configure it properly." +msgstr "" + +#: EnvironmentWarning.MissingProgramMkfs.Text +msgid "The program 'mkfs' is not installed. Please ask the administrator of the CryptoBox to configure it properly." +msgstr "" + +#: EnvironmentWarning.MissingProgramE2label.Text +msgid "The program 'e2label' is not installed. Please ask the administrator of the CryptoBox to configure it properly." +msgstr "" + +#: SuccessMessage.Partitioned.Title +msgid "Partitioning complete" +msgstr "" + +#: SuccessMessage.Partitioned.Text +msgid "The disk was partitioned successfully." +msgstr "" + +#: SuccessMessage.EasySetup.Title +msgid "Initialization completed" +msgstr "" + +#: SuccessMessage.EasySetup.Text +msgid "Automatic initialization was finished successfully." +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Title +msgid "Confirmation missing" +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Text +msgid "You did not confirm this action by activating the checkbox." +msgstr "" + +#: WarningMessage.NoDisksAvailable.Title +msgid "No disks found" +msgstr "" + +#: WarningMessage.NoDisksAvailable.Text +msgid "No suitable disks found - please check your configuration and hardware setup." +msgstr "" + +#: WarningMessage.PartitioningFailed.Title +msgid "Partitioning failed" +msgstr "" + +#: WarningMessage.PartitioningFailed.Text +msgid "The partitioning of the device failed for some reason - sorry!" +msgstr "" + +#: WarningMessage.PartitioningFailed.Link.Text +msgid "Show log messages" +msgstr "" + +#: WarningMessage.FormattingFailed.Title +msgid "Formatting failed" +msgstr "" + +#: WarningMessage.FormattingFailed.Text +msgid "Formatting of at least one volume failed - sorry!" +msgstr "" + +#: WarningMessage.DiskIsBusy.Title +msgid "This disk is busy" +msgstr "" + +#: WarningMessage.DiskIsBusy.Text +msgid "Please close all volumes of this disk before partitioning." +msgstr "" + +#: WarningMessage.DiskIsBusy.Link.Text +msgid "Show all disks" +msgstr "" + +#: WarningMessage.PartitionTooBig.Title +msgid "Invalid size" +msgstr "" + +#: WarningMessage.PartitionTooBig.Text +msgid "The volume size you entered exceeded the available size of the disk." +msgstr "" + +#: WarningMessage.PartitionTooSmall.Text +msgid "The minimum size of a volume is 10 megabytes." +msgstr "" diff --git a/v0.3.4.5/plugins/partition/intl/sl/cryptobox-server-feature-partition.po b/v0.3.4.5/plugins/partition/intl/sl/cryptobox-server-feature-partition.po new file mode 100644 index 0000000..7c44434 --- /dev/null +++ b/v0.3.4.5/plugins/partition/intl/sl/cryptobox-server-feature-partition.po @@ -0,0 +1,233 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-05 17:02+0100\n" +"PO-Revision-Date: 2007-02-06 14:15+0100\n" +"Last-Translator: tenzin \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Partition manager" +msgstr "Upravnik particije (porazdelitve)" + +#: Link +msgid "Partitions" +msgstr "Particije (porazdelitve)" + +#: Title +msgid "Manage partitions" +msgstr "Upravljanje porazdelitev" + +#: Button.SelectDevice +msgid "Partition manually" +msgstr "Ročna porazdelitev" + +#: Button.EasySetup +msgid "Automatic setup" +msgstr "Samodejna nastavitev" + +#: Button.AddPartition +msgid "Add partition" +msgstr "Dodaj razdelitev" + +#: Button.DelPartition +msgid "Remove partition" +msgstr "Odstrani razdelitev" + +#: Button.SavePartitions +msgid "Write new partition table" +msgstr "Napiši novo porazdelitev" + +#: Button.AbortPartitions +msgid "Cancel" +msgstr "Razveljavi" + +#: Text.Confirm +msgid "Yes, I know what I am doing!" +msgstr "Da, vem kaj počnem!" + +#: Text.FS.Type +msgid "Filesystem type" +msgstr "Tip datotečnega sistema" + +#: Text.FS.Fat +msgid "FAT (Windows)" +msgstr "FAT (Windows)" + +#: Text.FS.Ext2 +msgid "Ext2" +msgstr "Ext2" + +#: Text.FS.Ext3 +msgid "Ext3" +msgstr "Ext3" + +#: Text.FS.Reiser +msgid "Reiser" +msgstr "Reiser" + +#: Text.PartNum +msgid "Id" +msgstr "Id" + +#: Text.PartType +msgid "Type" +msgstr "Tip" + +#: Text.Size +msgid "Size (MB)" +msgstr "Velikost (MB)" + +#: Text.SelectDevice +msgid "Choose a disk for partitioning" +msgstr "Izberi disk, ki ga nameravaš razdeliti " + +#: Text.ProgressInfo +msgid "Progress of formatting:" +msgstr "Potek formatiranja" + +#: Text.CreateConfigPartition +msgid "Automatically creating a configuration partition." +msgstr "Samodejna konfiguracija razdelitve" + +#: Text.RemovalContainers +msgid "These volumes will be removed:" +msgstr "Te vsebine bodo odstranjene" + +#: Text.SpecifyPartitions +msgid "Add partitions" +msgstr "Dodaj razdelitev" + +#: Help.Partitioning +msgid "You can split every disk into one ore more parts, which are called 'partitions'. This is useful if you want to separate your data or if you want to encrypt only a part of your disk." +msgstr "Vsak disk lahko razdelite na več delov, imenovanih \"deli\". Razdelitev diska je koristna, kadar želite ločiti podatke, ali kadar želite zakodirati le del vašega diska" + +#: Help.SelectDevice +msgid "Choose one of the disks given in the list. Be aware that you lose all data on the partitions of this disk." +msgstr "Izberite enega izmed diskov, podanih spodaj. Vedite, da boste izgubili vse podatke, ko boste disk porazdelili. " + +#: Help.PartMode +msgid "You may choose between 'automatic' and 'manual' partitioning. Automatic partitioning creates only one partition for the whole disk. With manual partition you can split the disk into multiple parts of different size." +msgstr "Lahko izbirate med \"samodejno\" (Avtomatično) ali \"ročno\" porazdelitvijo. Samodejna razdelitev ustvari le eno porazdelitev za celoten disk. Z ročno porazdelitvijo lahko razdelite disk na več manjših enot, različnih velikosti " + +#: Help.ConfigPartition +msgid "This CryptoBox is configured to store its runtime settings on a separate disk partition. It will be created automatically if necessary. This reduces the available size of the disk by 5 megabyte." +msgstr "Cryptobox je konfiguriran tako, da spravi nastavitve na ločen del razdeljenega diska. Če je potrebno, bo ustvarjen avtomatično, kar zmanjša velikost dika za 5 megabytov. " + +#: Help.RemoveExistingContainers +msgid "Whenever you change the partition table of a disk, you will loose all volumes that were previously defined inside of it." +msgstr "Kadarkoli spremenite porazdelitev diska, izgubite vse prejšnje enote diska." + +#: Help.PartitionList +msgid "Choose the size for a new partition and add it to the list by clicking on 'Add partition'. Nothing will get written to your disk until you click on 'Write new partition table' below. Be very careful: you will erase all data on this disk." +msgstr "Iberite velikost posamezne enote diska, in jo dodajte s klikom na \"Dodaj\". Dokler ne kliknete na \"Ustvari novo porazdelitev\", na disk ne bo nič zapisano.Bodite zelo previdni: Izbrisali boste vse podatke na tem disku. " + +#: AdviceMessage.DeviceDataIsLost.Text +msgid "If you continue, you will destroy all data on the choosen disk. Please be VERY careful!" +msgstr "Če boste nadaljevali, boste izbrisali vse podatke na izbranem disku. Prosimo, bodite ZELO previdni! " + +#: EnvironmentWarning.ReadOnlyConfig.Text +msgid "Read-only setup detected - probably you should create a configuration partition." +msgstr "Zaznana je nastavitev \"samo za branje\". Verjetno morate ustvariti konfiguracijo particije - porazdelitve. " + +#: EnvironmentWarning.ReadOnlyConfig.Link.Text +msgid "Initialize partition" +msgstr "Inicializirajte porazdelitev" + +#: EnvironmentWarning.MissingProgramSfdisk.Title +msgid "Missing program" +msgstr "Manjka program" + +#: EnvironmentWarning.MissingProgramSfdisk.Text +msgid "The program 'sfdisk' is not installed. Please ask the administrator of the CryptoBox to configure it properly." +msgstr "Program \"sfdisk\" ni nameščen. Prosite administratorja Cryptobox strežnika naj pravilno namesti program" + +#: EnvironmentWarning.MissingProgramMkfs.Text +msgid "The program 'mkfs' is not installed. Please ask the administrator of the CryptoBox to configure it properly." +msgstr "Program \"mkfs\" ni nameščen. Prosite administratorja Cryptobox strežnika naj pravilno namesti program" + +#: EnvironmentWarning.MissingProgramE2label.Text +msgid "The program 'e2label' is not installed. Please ask the administrator of the CryptoBox to configure it properly." +msgstr "Program \"e2label\" ni nameščen. Prosite administratorja Cryptobox strežnika naj pravilno namesti program" + +#: SuccessMessage.Partitioned.Title +msgid "Partitioning complete" +msgstr "Razdelitev končana" + +#: SuccessMessage.Partitioned.Text +msgid "The disk was partitioned successfully." +msgstr "Disk je uspešno razdeljen." + +#: SuccessMessage.EasySetup.Title +msgid "Initialization completed" +msgstr "Inicializacija končana" + +#: SuccessMessage.EasySetup.Text +msgid "Automatic initialization was finished successfully." +msgstr "Avtomatična inicializacija je uspešno zaključena" + +#: WarningMessage.FormatNotConfirmed.Title +msgid "Confirmation missing" +msgstr "Manjka potrditev" + +#: WarningMessage.FormatNotConfirmed.Text +msgid "You did not confirm this action by activating the checkbox." +msgstr "Niste potrdili akcije s klikom na potrdilno polje" + +#: WarningMessage.NoDisksAvailable.Title +msgid "No disks found" +msgstr "Ne najdem nobenega diska" + +#: WarningMessage.NoDisksAvailable.Text +msgid "No suitable disks found - please check your configuration and hardware setup." +msgstr "Ne najdem primernega diska - Prosim, preverite konfiguracijo in nastavitve programske opreme" + +#: WarningMessage.PartitioningFailed.Title +msgid "Partitioning failed" +msgstr "Razdelitev ni uspela" + +#: WarningMessage.PartitioningFailed.Text +msgid "The partitioning of the device failed for some reason - sorry!" +msgstr "Razdelitev diska zaradi (ne)znanega razloga ni uspela - žal." + +#: WarningMessage.PartitioningFailed.Link.Text +msgid "Show log messages" +msgstr "Prikaži log - sporočila" + +#: WarningMessage.FormattingFailed.Title +msgid "Formatting failed" +msgstr "Formatiranje ni uspelo" + +#: WarningMessage.FormattingFailed.Text +msgid "Formatting of at least one volume failed - sorry!" +msgstr "Formatiranje vsaj ene enote, žal ni uspelo." + +#: WarningMessage.DiskIsBusy.Title +msgid "This disk is busy" +msgstr "Disk je zaposlen/aktiven" + +#: WarningMessage.DiskIsBusy.Text +msgid "Please close all volumes of this disk before partitioning." +msgstr "Prosim, zaprite vse enote diska pred razdelitvijo diska" + +#: WarningMessage.DiskIsBusy.Link.Text +msgid "Show all disks" +msgstr "Prikaži vse diske" + +#: WarningMessage.PartitionTooBig.Title +msgid "Invalid size" +msgstr "Neustrezna velikost" + +#: WarningMessage.PartitionTooBig.Text +msgid "The volume size you entered exceeded the available size of the disk." +msgstr "Velikost enote, ki ste jo vpisali, presega razpoložljivo velikost diska" + +#: WarningMessage.PartitionTooSmall.Text +msgid "The minimum size of a volume is 10 megabytes." +msgstr "Minimalna velikost diska je 10 megabytov." diff --git a/v0.3.4.5/plugins/partition/intl/sv/cryptobox-server-feature-partition.po b/v0.3.4.5/plugins/partition/intl/sv/cryptobox-server-feature-partition.po new file mode 100644 index 0000000..78f0c5b --- /dev/null +++ b/v0.3.4.5/plugins/partition/intl/sv/cryptobox-server-feature-partition.po @@ -0,0 +1,234 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-05 17:02+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Partition manager" +msgstr "" + +#: Link +msgid "Partitions" +msgstr "" + +#: Title +msgid "Manage partitions" +msgstr "" + +#: Button.SelectDevice +msgid "Partition manually" +msgstr "" + +#: Button.EasySetup +msgid "Automatic setup" +msgstr "" + +#: Button.AddPartition +msgid "Add partition" +msgstr "" + +#: Button.DelPartition +msgid "Remove partition" +msgstr "" + +#: Button.SavePartitions +msgid "Write new partition table" +msgstr "" + +#: Button.AbortPartitions +msgid "Cancel" +msgstr "" + +#: Text.Confirm +msgid "Yes, I know what I am doing!" +msgstr "" + +#: Text.FS.Type +msgid "Filesystem type" +msgstr "" + +#: Text.FS.Fat +msgid "FAT (Windows)" +msgstr "" + +#: Text.FS.Ext2 +msgid "Ext2" +msgstr "" + +#: Text.FS.Ext3 +msgid "Ext3" +msgstr "" + +#: Text.FS.Reiser +msgid "Reiser" +msgstr "" + +#: Text.PartNum +msgid "Id" +msgstr "" + +#: Text.PartType +msgid "Type" +msgstr "" + +#: Text.Size +msgid "Size (MB)" +msgstr "" + +#: Text.SelectDevice +msgid "Choose a disk for partitioning" +msgstr "" + +#: Text.ProgressInfo +msgid "Progress of formatting:" +msgstr "" + +#: Text.CreateConfigPartition +msgid "Automatically creating a configuration partition." +msgstr "" + +#: Text.RemovalContainers +msgid "These volumes will be removed:" +msgstr "" + +#: Text.SpecifyPartitions +msgid "Add partitions" +msgstr "" + +#: Help.Partitioning +msgid "You can split every disk into one ore more parts, which are called 'partitions'. This is useful if you want to separate your data or if you want to encrypt only a part of your disk." +msgstr "" + +#: Help.SelectDevice +msgid "Choose one of the disks given in the list. Be aware that you lose all data on the partitions of this disk." +msgstr "" + +#: Help.PartMode +msgid "You may choose between 'automatic' and 'manual' partitioning. Automatic partitioning creates only one partition for the whole disk. With manual partition you can split the disk into multiple parts of different size." +msgstr "" + +#: Help.ConfigPartition +msgid "This CryptoBox is configured to store its runtime settings on a separate disk partition. It will be created automatically if necessary. This reduces the available size of the disk by 5 megabyte." +msgstr "" + +#: Help.RemoveExistingContainers +msgid "Whenever you change the partition table of a disk, you will loose all volumes that were previously defined inside of it." +msgstr "" + +#: Help.PartitionList +msgid "Choose the size for a new partition and add it to the list by clicking on 'Add partition'. Nothing will get written to your disk until you click on 'Write new partition table' below. Be very careful: you will erase all data on this disk." +msgstr "" + +#: AdviceMessage.DeviceDataIsLost.Text +msgid "If you continue, you will destroy all data on the choosen disk. Please be VERY careful!" +msgstr "" + +#: EnvironmentWarning.ReadOnlyConfig.Text +msgid "Read-only setup detected - probably you should create a configuration partition." +msgstr "" + +#: EnvironmentWarning.ReadOnlyConfig.Link.Text +msgid "Initialize partition" +msgstr "" + +#: EnvironmentWarning.MissingProgramSfdisk.Title +msgid "Missing program" +msgstr "" + +#: EnvironmentWarning.MissingProgramSfdisk.Text +msgid "The program 'sfdisk' is not installed. Please ask the administrator of the CryptoBox to configure it properly." +msgstr "" + +#: EnvironmentWarning.MissingProgramMkfs.Text +msgid "The program 'mkfs' is not installed. Please ask the administrator of the CryptoBox to configure it properly." +msgstr "" + +#: EnvironmentWarning.MissingProgramE2label.Text +msgid "The program 'e2label' is not installed. Please ask the administrator of the CryptoBox to configure it properly." +msgstr "" + +#: SuccessMessage.Partitioned.Title +msgid "Partitioning complete" +msgstr "" + +#: SuccessMessage.Partitioned.Text +msgid "The disk was partitioned successfully." +msgstr "" + +#: SuccessMessage.EasySetup.Title +msgid "Initialization completed" +msgstr "" + +#: SuccessMessage.EasySetup.Text +msgid "Automatic initialization was finished successfully." +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Title +msgid "Confirmation missing" +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Text +msgid "You did not confirm this action by activating the checkbox." +msgstr "" + +#: WarningMessage.NoDisksAvailable.Title +msgid "No disks found" +msgstr "" + +#: WarningMessage.NoDisksAvailable.Text +msgid "No suitable disks found - please check your configuration and hardware setup." +msgstr "" + +#: WarningMessage.PartitioningFailed.Title +msgid "Partitioning failed" +msgstr "" + +#: WarningMessage.PartitioningFailed.Text +msgid "The partitioning of the device failed for some reason - sorry!" +msgstr "" + +#: WarningMessage.PartitioningFailed.Link.Text +msgid "Show log messages" +msgstr "" + +#: WarningMessage.FormattingFailed.Title +msgid "Formatting failed" +msgstr "" + +#: WarningMessage.FormattingFailed.Text +msgid "Formatting of at least one volume failed - sorry!" +msgstr "" + +#: WarningMessage.DiskIsBusy.Title +msgid "This disk is busy" +msgstr "" + +#: WarningMessage.DiskIsBusy.Text +msgid "Please close all volumes of this disk before partitioning." +msgstr "" + +#: WarningMessage.DiskIsBusy.Link.Text +msgid "Show all disks" +msgstr "" + +#: WarningMessage.PartitionTooBig.Title +msgid "Invalid size" +msgstr "" + +#: WarningMessage.PartitionTooBig.Text +msgid "The volume size you entered exceeded the available size of the disk." +msgstr "" + +#: WarningMessage.PartitionTooSmall.Text +msgid "The minimum size of a volume is 10 megabytes." +msgstr "" diff --git a/v0.3.4.5/plugins/partition/intl/ur/cryptobox-server-feature-partition.po b/v0.3.4.5/plugins/partition/intl/ur/cryptobox-server-feature-partition.po new file mode 100644 index 0000000..2e43001 --- /dev/null +++ b/v0.3.4.5/plugins/partition/intl/ur/cryptobox-server-feature-partition.po @@ -0,0 +1,234 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-02-05 23:28+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Partition manager" +msgstr "" + +#: Link +msgid "Partitions" +msgstr "" + +#: Title +msgid "Manage partitions" +msgstr "" + +#: Button.SelectDevice +msgid "Partition manually" +msgstr "" + +#: Button.EasySetup +msgid "Automatic setup" +msgstr "" + +#: Button.AddPartition +msgid "Add partition" +msgstr "" + +#: Button.DelPartition +msgid "Remove partition" +msgstr "" + +#: Button.SavePartitions +msgid "Write new partition table" +msgstr "" + +#: Button.AbortPartitions +msgid "Cancel" +msgstr "" + +#: Text.Confirm +msgid "Yes, I know what I am doing!" +msgstr "" + +#: Text.FS.Type +msgid "Filesystem type" +msgstr "" + +#: Text.FS.Fat +msgid "FAT (Windows)" +msgstr "" + +#: Text.FS.Ext2 +msgid "Ext2" +msgstr "" + +#: Text.FS.Ext3 +msgid "Ext3" +msgstr "" + +#: Text.FS.Reiser +msgid "Reiser" +msgstr "" + +#: Text.PartNum +msgid "Id" +msgstr "" + +#: Text.PartType +msgid "Type" +msgstr "" + +#: Text.Size +msgid "Size (MB)" +msgstr "" + +#: Text.SelectDevice +msgid "Choose a disk for partitioning" +msgstr "" + +#: Text.ProgressInfo +msgid "Progress of formatting:" +msgstr "" + +#: Text.CreateConfigPartition +msgid "Automatically creating a configuration partition." +msgstr "" + +#: Text.RemovalContainers +msgid "These volumes will be removed:" +msgstr "" + +#: Text.SpecifyPartitions +msgid "Add partitions" +msgstr "" + +#: Help.Partitioning +msgid "You can split every disk into one ore more parts, which are called 'partitions'. This is useful if you want to separate your data or if you want to encrypt only a part of your disk." +msgstr "" + +#: Help.SelectDevice +msgid "Choose one of the disks given in the list. Be aware that you lose all data on the partitions of this disk." +msgstr "" + +#: Help.PartMode +msgid "You may choose between 'automatic' and 'manual' partitioning. Automatic partitioning creates only one partition for the whole disk. With manual partition you can split the disk into multiple parts of different size." +msgstr "" + +#: Help.ConfigPartition +msgid "This CryptoBox is configured to store its runtime settings on a separate disk partition. It will be created automatically if necessary. This reduces the available size of the disk by 5 megabyte." +msgstr "" + +#: Help.RemoveExistingContainers +msgid "Whenever you change the partition table of a disk, you will loose all volumes that were previously defined inside of it." +msgstr "" + +#: Help.PartitionList +msgid "Choose the size for a new partition and add it to the list by clicking on 'Add partition'. Nothing will get written to your disk until you click on 'Write new partition table' below. Be very careful: you will erase all data on this disk." +msgstr "" + +#: AdviceMessage.DeviceDataIsLost.Text +msgid "If you continue, you will destroy all data on the choosen disk. Please be VERY careful!" +msgstr "" + +#: EnvironmentWarning.ReadOnlyConfig.Text +msgid "Read-only setup detected - probably you should create a configuration partition." +msgstr "" + +#: EnvironmentWarning.ReadOnlyConfig.Link.Text +msgid "Initialize partition" +msgstr "" + +#: EnvironmentWarning.MissingProgramSfdisk.Title +msgid "Missing program" +msgstr "" + +#: EnvironmentWarning.MissingProgramSfdisk.Text +msgid "The program 'sfdisk' is not installed. Please ask the administrator of the CryptoBox to configure it properly." +msgstr "" + +#: EnvironmentWarning.MissingProgramMkfs.Text +msgid "The program 'mkfs' is not installed. Please ask the administrator of the CryptoBox to configure it properly." +msgstr "" + +#: EnvironmentWarning.MissingProgramE2label.Text +msgid "The program 'e2label' is not installed. Please ask the administrator of the CryptoBox to configure it properly." +msgstr "" + +#: SuccessMessage.Partitioned.Title +msgid "Partitioning complete" +msgstr "" + +#: SuccessMessage.Partitioned.Text +msgid "The disk was partitioned successfully." +msgstr "" + +#: SuccessMessage.EasySetup.Title +msgid "Initialization completed" +msgstr "" + +#: SuccessMessage.EasySetup.Text +msgid "Automatic initialization was finished successfully." +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Title +msgid "Confirmation missing" +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Text +msgid "You did not confirm this action by activating the checkbox." +msgstr "" + +#: WarningMessage.NoDisksAvailable.Title +msgid "No disks found" +msgstr "" + +#: WarningMessage.NoDisksAvailable.Text +msgid "No suitable disks found - please check your configuration and hardware setup." +msgstr "" + +#: WarningMessage.PartitioningFailed.Title +msgid "Partitioning failed" +msgstr "" + +#: WarningMessage.PartitioningFailed.Text +msgid "The partitioning of the device failed for some reason - sorry!" +msgstr "" + +#: WarningMessage.PartitioningFailed.Link.Text +msgid "Show log messages" +msgstr "" + +#: WarningMessage.FormattingFailed.Title +msgid "Formatting failed" +msgstr "" + +#: WarningMessage.FormattingFailed.Text +msgid "Formatting of at least one volume failed - sorry!" +msgstr "" + +#: WarningMessage.DiskIsBusy.Title +msgid "This disk is busy" +msgstr "" + +#: WarningMessage.DiskIsBusy.Text +msgid "Please close all volumes of this disk before partitioning." +msgstr "" + +#: WarningMessage.DiskIsBusy.Link.Text +msgid "Show all disks" +msgstr "" + +#: WarningMessage.PartitionTooBig.Title +msgid "Invalid size" +msgstr "" + +#: WarningMessage.PartitionTooBig.Text +msgid "The volume size you entered exceeded the available size of the disk." +msgstr "" + +#: WarningMessage.PartitionTooSmall.Text +msgid "The minimum size of a volume is 10 megabytes." +msgstr "" diff --git a/v0.3.4.5/plugins/partition/language.hdf b/v0.3.4.5/plugins/partition/language.hdf new file mode 100644 index 0000000..9299fc0 --- /dev/null +++ b/v0.3.4.5/plugins/partition/language.hdf @@ -0,0 +1,138 @@ +Name = Partition manager +Link = Partitions + +Title = Manage partitions + +Button { + SelectDevice = Partition manually + EasySetup = Automatic setup + AddPartition = Add partition + DelPartition = Remove partition + SavePartitions = Write new partition table + AbortPartitions = Cancel +} + +Text { + Confirm = Yes, I know what I am doing! + FS { + Type = Filesystem type + Fat = FAT (Windows) + Ext2 = Ext2 + Ext3 = Ext3 + Reiser = Reiser + } + PartNum = Id + PartType = Type + Size = Size (MB) + SelectDevice = Choose a disk for partitioning + ProgressInfo = Progress of formatting: + CreateConfigPartition = Automatically creating a configuration partition. + RemovalContainers = These volumes will be removed: + SpecifyPartitions = Add partitions +} + + +Help { + Partitioning = You can split every disk into one ore more parts, which are called 'partitions'. This is useful if you want to separate your data or if you want to encrypt only a part of your disk. + SelectDevice = Choose one of the disks given in the list. Be aware that you lose all data on the partitions of this disk. + PartMode = You may choose between 'automatic' and 'manual' partitioning. Automatic partitioning creates only one partition for the whole disk. With manual partition you can split the disk into multiple parts of different size. + ConfigPartition = This CryptoBox is configured to store its runtime settings on a separate disk partition. It will be created automatically if necessary. This reduces the available size of the disk by 5 megabyte. + RemoveExistingContainers = Whenever you change the partition table of a disk, you will loose all volumes that were previously defined inside of it. + PartitionList = Choose the size for a new partition and add it to the list by clicking on 'Add partition'. Nothing will get written to your disk until you click on 'Write new partition table' below. Be very careful: you will erase all data on this disk. +} + + +AdviceMessage { + DeviceDataIsLost { + Text = If you continue, you will destroy all data on the choosen disk. Please be VERY careful! + } +} + + +EnvironmentWarning { + ReadOnlyConfig { + Text = Read-only setup detected - probably you should create a configuration partition. + Link.Text = Initialize partition + Link.Rel = partition + } + + + + MissingProgramSfdisk { + Title = Missing program + Text = The program 'sfdisk' is not installed. Please ask the administrator of the CryptoBox to configure it properly. + } + + MissingProgramMkfs { + Title = Missing program + Text = The program 'mkfs' is not installed. Please ask the administrator of the CryptoBox to configure it properly. + } + + MissingProgramE2label { + Title = Missing program + Text = The program 'e2label' is not installed. Please ask the administrator of the CryptoBox to configure it properly. + } +} + + +SuccessMessage { + Partitioned { + Title = Partitioning complete + Text = The disk was partitioned successfully. + } + + EasySetup { + Title = Initialization completed + Text = Automatic initialization was finished successfully. + + } +} + + +WarningMessage { + FormatNotConfirmed { + Title = Confirmation missing + Text = You did not confirm this action by activating the checkbox. + } + + NoDisksAvailable { + Title = No disks found + Text = No suitable disks found - please check your configuration and hardware setup. + } + + PartitioningFailed { + Title = Partitioning failed + Text = The partitioning of the device failed for some reason - sorry! + Link.Text = Show log messages + Link.Rel = logs + Link.Attr1.name = level + Link.Attr1.value = ERROR + } + + FormattingFailed { + Title = Formatting failed + Text = Formatting of at least one volume failed - sorry! + Link.Text = Show log messages + Link.Rel = logs + Link.Attr1.name = level + Link.Attr1.value = ERROR + } + + DiskIsBusy { + Title = This disk is busy + Text = Please close all volumes of this disk before partitioning. + Link.Text = Show all disks + Link.Rel = disks + } + + PartitionTooBig { + Title = Invalid size + Text = The volume size you entered exceeded the available size of the disk. + } + + PartitionTooSmall { + Title = Invalid size + Text = The minimum size of a volume is 10 megabytes. + } +} + diff --git a/v0.3.4.5/plugins/partition/partition.css b/v0.3.4.5/plugins/partition/partition.css new file mode 100644 index 0000000..4c47c37 --- /dev/null +++ b/v0.3.4.5/plugins/partition/partition.css @@ -0,0 +1,4 @@ +table.partition tr td{ + text-align: center + } + diff --git a/v0.3.4.5/plugins/partition/partition.py b/v0.3.4.5/plugins/partition/partition.py new file mode 100644 index 0000000..6cf3712 --- /dev/null +++ b/v0.3.4.5/plugins/partition/partition.py @@ -0,0 +1,539 @@ +# +# Copyright 2006 sense.lab e.V. +# +# This file is part of the CryptoBox. +# +# The CryptoBox 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 CryptoBox 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 the CryptoBox; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +"""The partition feature of the CryptoBox. +""" + +__revision__ = "$Id" + +import subprocess +import os +import re +import logging +import cryptobox.core.tools as cbox_tools +import cryptobox.plugins.base +from cryptobox.core.exceptions import * + + +PARTTYPES = { + "windows" : ["0xC", "vfat"], + "linux" : ["L", "ext3"]} + +CONFIGPARTITION = { + "size" : 5, # size of configuration partition (if necessary) in MB + "type" : "L", + "fs" : "ext2"} + + +class partition(cryptobox.plugins.base.CryptoBoxPlugin): + """The partition feature of the CryptoBox. + """ + + plugin_capabilities = [ "system" ] + plugin_visibility = [ "preferences" ] + request_auth = True + rank = 80 + + def do_action(self, **args): + """Show the partitioning form and execute the requested action. + """ + ## load default hdf values + self.__prepare_dataset() + ## retrieve some values from 'args' - defaults are empty + self.blockdevice = self.__get_selected_device(args) + self.with_config_partition = self.__is_with_config_partition() + self.cbox.log.debug( + "partition plugin: selected device=%s" % str(self.blockdevice)) + self.blockdevice_size = self.__get_available_device_size(self.blockdevice) + ## no (or invalid) device was supplied + if not self.blockdevice: + return self.__action_select_device() + ## exit if the blockdevice is not writeable + if not os.access(self.blockdevice, os.W_OK): + self.hdf["Data.Warning"] = "DeviceNotWriteable" + return self.__action_select_device() + ## no confirm setting? + if not args.has_key("confirm") or (args["confirm"] != "1"): + self.hdf["Data.Warning"] = "Plugins.partition.FormatNotConfirmed" + return self.__action_select_device() + elif args.has_key("easy"): + return self.__action_easy_setup() + elif args.has_key("add_part"): + return self.__action_add_partition(args) + elif args.has_key("finish"): + return self.__action_finish(args) + elif args.has_key("cancel"): + return self.__action_select_device() + ## check if we should remove a partition + del_args = [ e for e in args.keys() if re.match(r"del_part_[\d]+$", e) ] + if len(del_args) == 1: + try: + num_part = int(del_args[0][9:]) + except ValueError: + self.cbox.log.warn( + "partition: invalid partition number to delete (%s)" % del_args[0]) + return self.__action_select_device() + return self.__action_del_partition(args, num_part) + else: # for "select_device" and for invalid targets + return self.__action_select_device() + + + def get_status(self): + """The status of this plugin is the selected device and some information. + """ + return "%s / %s / %s" % (self.blockdevice, self.blockdevice_size, + self.with_config_partition) + + + def get_warnings(self): + warnings = [] + ## this check is done _after_ "reset_dataset" -> if there is + ## a config partition, then it was loaded before + if self.cbox.prefs.requires_partition() \ + and not self.cbox.prefs.get_active_partition(): + warnings.append((50, "Plugins.%s.ReadOnlyConfig" % self.get_name())) + ## check required programs + if not os.path.isfile(self.root_action.SFDISK_BIN): + warnings.append((53, "Plugins.%s.MissingProgramSfdisk" % self.get_name())) + if not os.path.isfile(self.root_action.MKFS_BIN): + warnings.append((56, "Plugins.%s.MissingProgramMkfs" % self.get_name())) + if not os.path.isfile(self.root_action.LABEL_BIN): + warnings.append((40, "Plugins.%s.MissingProgramE2label" % self.get_name())) + return warnings + + + def __prepare_dataset(self): + """Set some hdf values. + """ + self.hdf["Data.AdditionalStylesheets.%s" % self.get_name()] = \ + os.path.join(self.plugin_dir, "partition.css") + self.hdf[self.hdf_prefix + "PluginDir"] = self.plugin_dir + + + def __get_selected_device(self, args): + """Check the selected device (valid, not busy, ...). + """ + try: + blockdevice = args["block_device"] + except KeyError: + return None + if not self.__is_device_valid(blockdevice): + return None + if self.__is_device_busy(blockdevice): + self.hdf["Data.Warning"] = "Plugins.partition.DiskIsBusy" + return None + return blockdevice + + + def __is_device_valid(self, blockdevice): + """Check if the device is valid and allowed. + """ + if not blockdevice: + return False + if not self.cbox.is_device_allowed(blockdevice): + return False + if not blockdevice in cbox_tools.get_parent_blockdevices(): + return False + return True + + + def __is_device_busy(self, blockdevice): + """check if the device (or one of its partitions) is mounted + """ + ## the config partition is ignored, as it will get unmounted if necessary + for cont in self.cbox.get_container_list(): + if cbox_tools.is_part_of_blockdevice(blockdevice, cont.get_device()) \ + and cont.is_mounted(): + return True + return False + + + def __action_select_device(self): + """Show a form to select the device for partitioning. + """ + block_devices = [e + for e in cbox_tools.get_parent_blockdevices() + if self.cbox.is_device_allowed(e)] + counter = 0 + for dev in block_devices: + self.hdf[self.hdf_prefix + "BlockDevices.%d.name" % counter] = dev + self.hdf[self.hdf_prefix + "BlockDevices.%d.size" % counter] = \ + cbox_tools.get_blockdevice_size_humanly(dev) + self.cbox.log.debug("found a suitable block device: %s" % dev) + counter += 1 + if self.with_config_partition: + self.hdf[self.hdf_prefix + "CreateConfigPartition"] = "1" + ## there is no disk available + if not block_devices: + self.hdf["Data.Warning"] = "Plugins.partition.NoDisksAvailable" + return "select_device" + + + def __action_add_partition(self, args): + """Add a selected partition to the currently proposed partition table. + """ + self.hdf[self.hdf_prefix + "Device"] = self.blockdevice + self.hdf[self.hdf_prefix + "Device.Size"] = self.blockdevice_size + parts = self.__get_partitions_from_args(args) + self.__set_partition_data(parts) + return "set_partitions" + + + def __action_del_partition(self, args, part_num): + """Remove a partition from the proposed partition table. + """ + self.hdf[self.hdf_prefix + "Device"] = self.blockdevice + self.hdf[self.hdf_prefix + "Device.Size"] = self.blockdevice_size + parts = self.__get_partitions_from_args(args) + ## valid partition number to be deleted? + if part_num < len(parts): + del parts[part_num] + self.__set_partition_data(parts) + return "set_partitions" + + + def __action_finish(self, args): + """Write the partition table. + """ + parts = self.__get_partitions_from_args(args) + if parts: + self.__set_partition_data(parts) + if cbox_tools.is_part_of_blockdevice(self.blockdevice, + self.cbox.prefs.get_active_partition()): + self.cbox.prefs.umount_partition() + if not self.__run_fdisk(parts): + self.hdf["Data.Warning"] = "Plugins.partition.PartitioningFailed" + self.cbox.log.warn( + "partition: failed to partition device: %s" % self.blockdevice) + return self.__action_add_partition(args) + else: + ## tricky problem: if the device was partitioned, then a created config + ## partition is still part of the containerlist, as the label is not + ## checked again - very ugly!!! So we will call reReadContainerList + ## after formatting the last partition - see below + #self.cbox.reread_container_list() + format_ok = True + counter = 0 + ## initialize the generator + format_part_gen = self.__format_partitions(parts) + while counter < len(parts): + ## first part: get the device name + counter += 1 + ## second part: do the real formatting of a partition + result = format_part_gen.next() + ## after the first partiton, we can reRead the containerList + ## (as the possible config partition was already created) + if self.with_config_partition and (counter == 1): + ## important: reRead the containerList - but somehow it + ## breaks the flow (hanging process) + #self.cbox.reReadContainerList() + ## write config data + self.cbox.prefs.mount_partition() + try: + self.cbox.prefs.write() + self.cbox.log.info("settings stored on config partition") + except IOError: + self.cbox.log.warn( + "Failed to store settings on new config partition") + ## return the result + if not result: + format_ok = False + if format_ok: + self.hdf["Data.Success"] = "Plugins.partition.Partitioned" + else: + self.hdf["Data.Warning"] = "Plugins.partition.FormattingFailed" + return "empty" + else: + return self.__action_add_partition(args) + + + def __action_easy_setup(self): + """Do automatic partitioning (create only one big partition). + """ + import types + ## we do not have to take special care for a possible config partition + parts = [ { "size": self.blockdevice_size, "type": "windows" } ] + ## umount partition if necessary + if cbox_tools.is_part_of_blockdevice(self.blockdevice, + self.cbox.prefs.get_active_partition()): + self.cbox.prefs.umount_partition() + ## partition it + if not self.__run_fdisk(parts): + self.hdf["Data.Warning"] = "Plugins.partition.PartitioningFailed" + return None + ## "formatPartitions" is a generator, returning device names and bolean values + result = [e for e in self.__format_partitions(parts) + if type(e) == types.BooleanType] + if self.with_config_partition: + self.cbox.prefs.mount_partition() + if not self.cbox.prefs.write(): + self.cbox.log.warn("Failed to store settings on new config partition") + ## check if there is a "False" return value + if False in result: + ## operation failed + self.hdf["Data.Warning"] = "Plugins.partition.FormattingFailed" + self.cbox.log.info("easy partitioning failed") + return "select_partitions" + else: + ## operation was successful + self.hdf["Data.Success"] = "Plugins.partition.EasySetup" + self.cbox.log.info("easy partitioning succeeded") + ## do not show the disk overview immediately + ## it does not get updated that fast + return { "plugin":"system_preferences", "values":[] } + + + def __set_partition_data(self, parts): + """Set some hdf values for the currently proposed partition table. + """ + avail_size = self.blockdevice_size + i = 0 + for part in parts: + self.cbox.log.debug(part) + self.hdf[self.hdf_prefix + "Parts.%d.Size" % i] = part["size"] + self.hdf[self.hdf_prefix + "Parts.%d.Type" % i] = part["type"] + avail_size -= part["size"] + i += 1 + self.hdf[self.hdf_prefix + "availSize"] = avail_size + if self.with_config_partition: + self.hdf[self.hdf_prefix + "CreateConfigPartition"] = "1" + for ptype in PARTTYPES.keys(): + self.hdf[self.hdf_prefix + "Types.%s" % ptype] = ptype + ## store the currently existing partitions of the choosen block device + current_containers = [ e for e in self.cbox.get_container_list() + if cbox_tools.is_part_of_blockdevice(self.blockdevice, e.get_device()) ] + for (index, cont) in enumerate(current_containers): + self.hdf[self.hdf_prefix + "ExistingContainers.%d" % index] = \ + cont.get_device() + + + def __get_partitions_from_args(self, args): + """Filter the given arguments and construct a partition table. + """ + parts = [] + done = False + avail_size = self.blockdevice_size + i = -1 + while not done: + i += 1 + try: + ## skip every unconfirmed (probably the last) partition if we should not add it + if args.has_key("part%d_unconfirmed" % i) and \ + not args.has_key("add_part"): + continue + size = int(args["part%d_size" % i]) + part_type = args["part%d_type" % i] + if int(size) > avail_size: + self.hdf["Data.Warning"] = "Plugins.partition.PartitionTooBig" + continue + if int(size) < 10: + self.hdf["Data.Warning"] = "Plugins.partition.PartitionTooSmall" + continue + if not part_type in PARTTYPES.keys(): + continue + parts.append({"size":size, "type":part_type}) + avail_size -= size + except TypeError: + pass + except KeyError: + done = True + return parts + + + def __get_available_device_size(self, device): + """calculate the available size (MB) of the device + also consider a (possible) configuration partition + """ + device_size = cbox_tools.get_blockdevice_size(device) + if device_size < 0: + return 0 + if self.with_config_partition: + device_size -= CONFIGPARTITION["size"] + return device_size + + + def __is_with_config_partition(self): + """check if we have to create a configuration partition + """ + if self.cbox.prefs.requires_partition(): + active = self.cbox.prefs.get_active_partition() + ## we need a partition, if there is no active one + if not active: + return True + ## check if the active one is part of the current device + return cbox_tools.is_part_of_blockdevice(self.blockdevice, active) + return False + + + def __run_fdisk(self, parts): + """Call fdisk to partition the device. + """ + ## check if the device is completely filled (to avoid some empty last blocks) + avail_size = self.blockdevice_size + for one_part in parts: + avail_size -= one_part["size"] + self.cbox.log.debug("remaining size: %d" % avail_size) + is_filled = avail_size == 0 + proc = subprocess.Popen( + shell = False, + stdin = subprocess.PIPE, + stdout = subprocess.PIPE, + stderr = subprocess.PIPE, + args = [ + self.cbox.prefs["Programs"]["super"], + self.cbox.prefs["Programs"]["CryptoBoxRootActions"], + "plugin", + os.path.join(self.plugin_dir, "root_action.py"), + "partition", + self.blockdevice]) + for line in self.__get_sfdisk_layout(parts, is_filled): + proc.stdin.write(line + "\n") + #TODO: if running inside of an uml, then sfdisk hangs at "nanosleep({3,0})" + # very ugly - maybe a uml bug? + # it seems, like this can be avoided by running uml with the param "aio=2.4" + (output, error) = proc.communicate() + if proc.returncode != 0: + self.cbox.log.debug("partitioning failed: %s" % error) + return proc.returncode == 0 + + + def __get_sfdisk_layout(self, param_parts, is_filled): + """this generator returns the input lines for sfdisk + """ + parts = param_parts[:] + ## first a (possible) configuration partition - so it will be reusable + if self.with_config_partition: + ## fill the main table (including a config partition) + yield ",%d,%s" % (CONFIGPARTITION["size"], CONFIGPARTITION["type"]) + ## one primary partition + if is_filled and (len(parts) == 1): + ## fill the rest of the device + yield ",,%s,*" % PARTTYPES[parts[0]["type"]][0] + else: + ## only use the specified size + yield ",%d,%s,*" % (parts[0]["size"], PARTTYPES[parts[0]["type"]][0]) + del parts[0] + ## no extended partition, if there is only one disk + if not parts: + return + ## an extended container for the rest + yield ",,E" + ## an empty partition in main table + yield ";" + ## maybe another empty partition if there is no config partition + if not self.with_config_partition: + yield ";" + while parts: + if is_filled and (len(parts) == 1): + yield ",,%s" % (PARTTYPES[parts[0]["type"]][0],) + else: + yield ",%d,%s" % (parts[0]["size"], PARTTYPES[parts[0]["type"]][0]) + del parts[0] + + + def __format_partitions(self, param_parts): + """Format all partitions of the device. + """ + parts = param_parts[:] + part_num = 1 + ## maybe a config partition? + if self.with_config_partition: + dev_name = self.__get_partition_name(self.blockdevice, part_num) + self.cbox.log.info("formatting config partition (%s)" % dev_name) + if self.__format_one_partition(dev_name, CONFIGPARTITION["fs"]): + self.__set_label_of_partition(dev_name, + self.cbox.prefs["Main"]["ConfigVolumeLabel"]) + part_num += 1 + ## the first data partition + dev_name = self.__get_partition_name(self.blockdevice, part_num) + part_type = PARTTYPES[parts[0]["type"]][1] + self.cbox.log.info("formatting partition (%s) as '%s'" % (dev_name, part_type)) + yield self.__format_one_partition(dev_name, part_type) + del parts[0] + ## other data partitions + part_num = 5 + while parts: + dev_name = self.__get_partition_name(self.blockdevice, part_num) + part_type = PARTTYPES[parts[0]["type"]][1] + self.cbox.log.info("formatting partition (%s) as '%s'" % \ + (dev_name, part_type)) + yield self.__format_one_partition(dev_name, part_type) + part_num += 1 + del parts[0] + return + + + def __get_partition_name(self, blockdev, number): + """Return the name of a specific partition of a device + + """ + ## do we need to put a "p" between name and number? + ## TODO: should we check for existence? + if re.search("[0-9]$", blockdev): + ## blockdev endswith a digit - we need a 'p' + return "%sp%d" % (blockdev, number) + else: + ## no 'p' necessary + return "%s%d" % (blockdev, number) + + + + def __format_one_partition(self, dev_name, fs_type): + """Format a single partition + """ + import cryptobox.core.container + ## first: retrieve UUID - it can be removed from the database afterwards + prev_name = [e.get_name() for e in self.cbox.get_container_list() + if e.get_device() == dev_name] + ## call "mkfs" + try: + cont = cryptobox.core.container.CryptoBoxContainer(dev_name, self.cbox) + cont.create(cryptobox.core.container.CONTAINERTYPES["plain"], fs_type=fs_type) + except (CBInvalidType, CBCreateError, CBVolumeIsActive), err_msg: + self.cbox.log.warn(err_msg) + return False + ## remove unused volume entry + if prev_name: + del self.cbox.prefs.volumes_db[prev_name[0]] + return True + + + def __set_label_of_partition(self, dev_name, label): + """Set the label of a partition - useful for the config partition. + """ + proc = subprocess.Popen( + shell = False, + stdout = subprocess.PIPE, + stderr = subprocess.PIPE, + args = [ + self.cbox.prefs["Programs"]["super"], + self.cbox.prefs["Programs"]["CryptoBoxRootActions"], + "plugin", + os.path.join(self.plugin_dir, "root_action.py"), + "label", + dev_name, + label]) + (output, error) = proc.communicate() + if proc.returncode == 0: + return True + else: + self.cbox.log.warn("failed to create filesystem on %s: %s" % (dev_name, error)) + return False + diff --git a/v0.3.4.5/plugins/partition/plugin_icon.gif b/v0.3.4.5/plugins/partition/plugin_icon.gif new file mode 100644 index 0000000000000000000000000000000000000000..136e6d099a2f708af2d3fd73609f364f4270cb78 GIT binary patch literal 2210 zcmV;T2wnF_Nk%w1VK4wN0O$Vz009672NDAc4Fd-t2@M(*79AcO9~vGhCL}Q?Cpjo7 zF)1xXFEBVQE=w*gP%th=Ff>6kG(0soG&VR@IyX=bN`pN+Uq3%mK0sW#LOcxLj6pc93^@c6M{8dU}MsU|?y8i+p&ket>1kPwiLzp?aqDYfjElOCpH6G7a*vO(k&&m9m6DKoe`J|%1yUf?gL-(kiyT8uCz0SYD%DcbY zy}{AJ!@tGC$H2tYz{B9j#mU9T#Kgqg!^hUL&gIF)*T~Ap%Es8m$=S%s)62=t$;ja4 z)=$gK*2vA=&&<)w%j3<@%g)c)&d%l0)6mh-=+x5I($d}4(c{$C)6>)H*4WkA)#vQw zW7^l;)Y$0Q+SmN&Kit^r+}_*X+U(!m;oINu-{Ic<>s{mF<>BMt;^XcA>viDd^yTN{ z=IG_==j-R`=I7}0>Fen0?Dp;N?Emty{PeNz@A>cX?(p;P^7Zld^!W7m^Y{7o`TO|& z`v3d=`v3p`A^sIZa%Ew3Wn>_CX>@2HRA^-&M@dak03rDV0SW;B04x9i001xmFaQ7u z{s8|897wRB!Gj1BDqP60p+kosDoC98u%bdT!9uLqn8Kn*gBUw(T+#8P$$uC%ZWM9S zWXg>p@_3R(QeVysaabZF6JR+3um z0S68rP@_hXB1P*6EIK)ajA#)1wiyB=7M@vEoV01f zEaN6jXt}GEBCt^N!eI}-jX=?gr3zQAT})=t86qUdkS^4y0gHR}#1k9{G&r0xX_BQ; zgKOauTzGWaAz`RhBbM$l(Q?TyooeN#fdPg!)L@#_sn)2@wRAJN(`Ltx96PZ7Jfp@; z&Z0La}!T<{0 zKu9N(jFL)zs^}INExQ0y%reVRqf9lr5WxTib$sH-Bk1_!&ozEX@<|;HBm_h!osg1W zD!ZxjONO5T1B@}m5Hlhd1zdp0FV`S*iXq`NV@NB_G=t118_Z{r6gYN5ODd{_g-a}h z*;0!xL>i-vh#bIxNjB&#$jvWCJkd-z?<|N8D=GkBkQ$wUqGNusV3?g}zw9CmFv2Wj zOa^-tqE0{kra}6Vs zToXBkDEx1T)Ofebof{Gul+;U19jI`299eCVw%O`lWlE}i8ywlD( z?U-Y;Ip~NZ4mRj)(+xG&Y%|R>&m5D%FWgjvM;U1_dCfQ1pt408g?#f(xCjEnp5 zlMg=l+>?(y`M@JjJ7>4!&N^(1qlFE(^lQW;2-Z{2JKx~(#r`{IwXWRJag?Cq>my*T8E z!^|NOVDQN|?>wT)xrHoHfB*+s(vOSm5AM%C`!L^p*YOt)zdrihv(76VOz;Ub*T@Dm z{D1%sxIh61d4@mS@i@pi5ONKCp!M9*4t6lGg5nqk8xrt?Pe`H!21o)Y4uO|~Q~`3` zNFg><*bQvBFoiAb#x_dLjdO=P%tk#`s%@37`hmSFfU=u zeCz{phRX*t(`h(8#K8{vScffWX%IwMgKev8ROKSqu{K98l7fzl9RnxGPeryPlk1oU zB2aLUEFhv6$B3vzAqvrmR+JeM&8S9?VT_Ji6cJKLNDZ7&1t*Y{q*X|1Nl{vbBB=DG kC^e}Qq(IY^Rt6_H&8bdz%F~|u^rt`#s!)fzkbnRHJ99Eh`2YX_ literal 0 HcmV?d00001 diff --git a/v0.3.4.5/plugins/partition/plugin_icon.png b/v0.3.4.5/plugins/partition/plugin_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..235cf749af525c5bb20666ea96e2c01763bfb927 GIT binary patch literal 2943 zcmV-_3xM>AP)N-}n4}zwf!{z;%4S5Q`1C8r1Ii+r9rY;YBHx)vhTM zr%F6E@yZkby}+xV7>>mTTn$=oUcTd}U%s6`{-?JwTr*RN_!!#Q#eG+J^%FxbHsETI zS$EUQ(R*#CzBd1|AcW0g&MZ<`IA#2r%>9{$P$t3Dj0aK^ll*w|J|g8K50^jkpeNgnyr z`(f&>CQ?V6rdt8%8ycrCI`XM<ip=AhRPb~yUDG@?&>F8l7uYmLISOP2o4IM`q9O~!J!lihtZ$juA zlOrjFQlRGBB&DRbHWJP+aE6n~1f8AdzBDkvbc9$SP7w91e#a3D(TI{-x@J;Xc}zG_myddy!HS8=pYY3C#C^Whq=PNo(sf zEMHzrW8< z=U4m6aCgsN!a7i%$%a(0n%a$e{fBa{EHZZW)KRG${ zP2du<+;^oUu1|*#fMMua-!yY`aL1|$=RJO?UWX+lLX$X@LP$YgVM!*`q;#-#>-}85 z+{ga?tsFV>5o^|b30-eukAchOKq-jFQ{?68Y}l|BpRe$b+S>N~OETH}B#_xB z7W|mox%00++`Rd=^1M7dX#)Z8bkZ^_d1oiH-L7eJx?N^+C!Od*2u4Svw6*;wue|aq zPG=eS+;bnHP>9QyKgQ{F(9%*%MMVJs?d_L1bf}$z0zZL39v^(r&2!KFlK0;~_-$Yh zFrwu${{H(P4H$;;_qDaF5JI5qnyoT(Aac-8lSzkJdQ4h+Uw-*Nc=p*{R8*{D=gyt1 zT^nZU(tJuw^RX<&AO6tIk|hByTo~l&(JsQ_QmU$o2nIcbLM22Z%|xTt`ktQdpk+1Z*w_egQ%(X(S(yZOIJB(fwUOx->?t}^#MfYH%7LcoR%HC((n!hr*)7#o|Sxp@Vt zltq7klxQ?YUYS zxuGB7aC@#7abeYzXSu@49#!d|b}&@?S$NE&GpGsP7YN=Y;t zqqFlP>gy|!Qd@|Cj6@=YO-<|Ay?ZbB-n)Z}ihS<4Bf`^9xADa<)>2&T#p5w>I&HHiCzH5bIt2v* zVzD?aEvreTOirEZ=DFv70njsVBU`s_(|5LQyLGwW?_qZMOq08+IzVl0Ex-HS3+&$g z?-Um=$L;oD820DG;9!i($^r@s+&G;MdV4?St+zT@yY_~REFV1h29G`Vt^TgAH-8K4 zo=2d$`L>_kdFK|7t~(Yr=+o8#G)*HE3NbNpnSJ|SV02W+?=N8e`jxodPL3b%qO>$X zN5=p?JyGiGmm#I(^y!QI`qz7DZGGxeEY`al_$_cUi@-wr4 zfzRiouC9*K(g1C3dpLi7n3|d}m6e6m)Rgd>-<-kWkgQ%^PCRb%=9}-cYu8Wd>N>*s z_~4#YDzz7Q54fC_14799nwqNVXTe-0TFAiJ?TbC9e@jYAC@CqSy1JUDpZ+;dKKUaa ze)xOT)GX!Zn?nG6^wAiH55LE=&pytI6(!WwZRX_36Uj4Y-aQM91Lhn8Vr@8FMJknI zcz8Hx2wY1@DXFQc;rrkJ4u=mP=DXkhCYv^Woo(A%h{dLO{`r67$u%+wr}4~b8|B< zzW5^J<384}-%3?g70Z?_qp+}$p`j?6=5PQ8Fa>i62m!;xBNP|=|6d8Dk)NNB+wJDQ z`|e|GYz&{zM=%(~<#J8$#ACBQ-)&?OkWvzlCs9ge4lsRveIybIlv30EaSX#C9*?8z zI*CLAUDrt_lNpt%t*zz%3d1n)dcE`7l~NdnbKa%FTopno6Qxwf13sURcs!12nz&pp z`uqFwcs#`8ahy&krfCB9p}()Mk7zW?nl)><7BEdSqlC$1a{5?$MFRGzXEuSnyga0o zq*5uQv=2A4ix2{b!;$ft)9JkG@Utw7e?0sQH`IjaKG(yew|#>|B7vFXntrYa;_-L_ z%d#>dB<2R)BG9zl=jTrY(=-{B104VG1D1&Znxad-ps2`$ z!{IyOOeI7`r z`{u<*I2`deHg5UnV6eDBh#dEXp97S#tbu_`r}poEX3x~r002ovPDHLkV1jI`ov8o- literal 0 HcmV?d00001 diff --git a/v0.3.4.5/plugins/partition/root_action.py b/v0.3.4.5/plugins/partition/root_action.py new file mode 100755 index 0000000..b0a8a71 --- /dev/null +++ b/v0.3.4.5/plugins/partition/root_action.py @@ -0,0 +1,118 @@ +#!/usr/bin/env python +# +# Copyright 2006 sense.lab e.V. +# +# This file is part of the CryptoBox. +# +# The CryptoBox 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 CryptoBox 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 the CryptoBox; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +__revision__ = "$Id" + + +## necessary: otherwise CryptoBoxRootActions.py will refuse to execute this script +PLUGIN_TYPE = "cryptobox" + +SFDISK_BIN = "/sbin/sfdisk" +MKFS_BIN = "/sbin/mkfs" +LABEL_BIN = "/sbin/e2label" + +import subprocess +import re +import sys +import os + + +def __partitionDevice(device): + ## do not use the "-q" flag, as this spoils the exit code of sfdisk (seems to be a bug) + proc = subprocess.Popen( + shell = False, + args = [ + SFDISK_BIN, + "-uM", + device]) + proc.wait() + return proc.returncode == 0 + + +def __formatPartition(device, type): + import time, threading + result = True + def formatting(): + proc = subprocess.Popen( + shell = False, + stdin = subprocess.PIPE, + stdout = subprocess.PIPE, + stderr = subprocess.PIPE, + args = [ + MKFS_BIN, + "-t", type, + device]) + proc.wait() + ## TODO: very ugly way of communication: it assumes, that failures are fast - success is slow + if proc.returncode == 0: + time.sleep(1) + return True + else: + return False + thread = threading.Thread() + thread.setDaemon(True) + thread.run = formatting + thread.start() + time.sleep(0.5) + return thread.isAlive() + + +def __labelPartition(device, label): + proc = subprocess.Popen( + shell = False, + args = [ + LABEL_BIN, + device, + label]) + proc.wait() + return proc.returncode == 0 + + +if __name__ == "__main__": + args = sys.argv[1:] + + self_bin =sys.argv[0] + + if len(args) == 0: + sys.stderr.write("%s: no argument supplied\n" % self_bin) + sys.exit(1) + + try: + if args[0] == "partition": + if len(args) != 2: raise "InvalidArgNum" + result = __partitionDevice(args[1]) + elif args[0] == "format": + if len(args) != 3: raise "InvalidArgNum" + result = __formatPartition(args[1], args[2]) + elif args[0] == "label": + if len(args) != 3: raise "InvalidArgNum" + result = __labelPartition(args[1], args[2]) + else: + sys.stderr.write("%s: invalid action (%s)\n" % (self_bin, args[0])) + sys.exit(1) + if result: + sys.exit(0) + else: + sys.exit(1) + except "InvalidArgNum": + sys.stderr.write("%s: invalid number of arguments (%s)\n" % (self_bin, args)) + sys.exit(1) + diff --git a/v0.3.4.5/plugins/partition/select_device.cs b/v0.3.4.5/plugins/partition/select_device.cs new file mode 100644 index 0000000..dcda799 --- /dev/null +++ b/v0.3.4.5/plugins/partition/select_device.cs @@ -0,0 +1,49 @@ + + + + +
+ + + + + + + + 0 ?> + + + + + + + +


+

+ +

+ +

+ + +

+ + + +
+ + + + + +
+ + + diff --git a/v0.3.4.5/plugins/partition/set_partitions.cs b/v0.3.4.5/plugins/partition/set_partitions.cs new file mode 100644 index 0000000..26b4628 --- /dev/null +++ b/v0.3.4.5/plugins/partition/set_partitions.cs @@ -0,0 +1,103 @@ + + + + +
+ + + + + + + 0) || (subcount(Data.Plugins.partition.Parts) > 0) ?> + +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + 0 ?> + + + + + + + + +
+ +
+ + +
+
+ + + +

+ + +
+ + + +
+ + + +
+ + + 0 ?> + + + + +
+ + + + +
+ + + + +
+ diff --git a/v0.3.4.5/plugins/partition/unittests.py b/v0.3.4.5/plugins/partition/unittests.py new file mode 100644 index 0000000..eded740 --- /dev/null +++ b/v0.3.4.5/plugins/partition/unittests.py @@ -0,0 +1,32 @@ +# +# Copyright 2006 sense.lab e.V. +# +# This file is part of the CryptoBox. +# +# The CryptoBox 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 CryptoBox 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 the CryptoBox; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +__revision__ = "$Id" + +from cryptobox.tests.base import WebInterfaceTestClass + +class unittests(WebInterfaceTestClass): + + def test_read_form(self): + url = self.url + "partition?weblang=en" + self.register_auth(url) + self.cmd.go(url) + self.cmd.find('VERY careful') + diff --git a/v0.3.4.5/plugins/plugin-interface.txt b/v0.3.4.5/plugins/plugin-interface.txt new file mode 100644 index 0000000..fd058a5 --- /dev/null +++ b/v0.3.4.5/plugins/plugin-interface.txt @@ -0,0 +1,84 @@ +The following directory structure is required: + - python code: plugins/PLUGINNAME/PLUGINNAME.py (all lower case is recommended) + - language file: plugins/PLUGINNAME/language.hdf + - clearsilver templates: plugins/PLUGINNAME/*.cs + - icon (128x128px recommended): plugins/PLUGINNAME/plugin_icon.png + - css stylesheets (optional): plugins/PLUGINNAME/PLUGINNAME.css + + +Python code interface: + - create a class with the same name as the plugin - it must inherit CryptoBoxPlugin + - method "do_action": + - this function will get called whenever this plugins is involved in a request + - all arguments should be optional (e.g. for displaying a form without previous input values) + - if the processing failed for some reason (invalid input, ...), it should manually set + "Data.Warning" or "Data.Success") to a value of your choice (preferably + you may want to use messages of the namespace of your plugin + (e.g. "Plugins.PLUGINNAME.InvalidInput")) + - the return value should be the name of the template that should be displayed after processing + (a template file in the plugin directory takes precedence over global template files) + - the return value may also be a dictionary with the following elements: + * template: the name of the template file (mandatory) + * generator: a generator object ("yield") - its content will replace every + occurrence of "" in the template (useful for pages that + are displayed step by step (as for formatting of filesystems)) + - the return value may also be a dictionary with the following elements: + * plugin: the name of a plugin + * values: a dictionary of variables that should be defined for this plugin + - an empty (e.g. None) return value can be used to go to the default page ("disks" + or "volume_mount" (for volume plugins)) + - access the plugin's state as self.prefs + - store user supplied values in the dictionary self.prefs with indices starting with "_" (e.g.: self.prefs["_automount_uuids"]) + - system wide readonly plugin settings can be specified in the main cryptobox.conf - + these settings are available as self.defaults["..."] + - method "get_status": + - returns a string, that describes a state connected to this plugin (e.g. the current date and + time (for the "date" plugin)) + - method "handle_event(event, event_info)": + - may be overridden to specify event handling (e.g. "bootup", "shutdown") + - see src/cryptobox/plugins/base.py for details + - the class variable "plugin_capabilities" must be an array of strings (supported: "system" and + "volume") + - method "is_useful(self, device)": defaults to "True" - overwrite it, if there could be circumstances, which could make the plugin useless - e.g. "automount" is not useful for encrypted containers + - method "get_warnings(self)": return a tuple of (Priority, WarningName) or None if + no problems exist + - "WarningName" should be something like "Plugins.PLUGINNAME.NoSSL" + - the class variable "plugin_visibility" may contain one or more of the following items: + menu/preferences/volume. This should fit to the 'plugin_capabilities' variable. + An empty list is interpreted as an invisible plugin. + - the class variable "request_auth" is boolean and defines, if admin authentication is necessary + for this plugin + - the class variable "rank" is an integer in the range of 0..100 - it determines the order + of plugins in listings (lower value -> higher priority) + - the class variable "root_action" is None or the module as sourced out of "root_actions.py" + in the directory of the plugin - this allows to access constant settings in this file + - volume plugins contain the attribute "device" (you may trust this value - a volume plugin will + never get called with an invalid device) + - the python module which contains the plugin's class should also contain a class called + 'unittests' - it should inherit WebInterfaceTestClass.WebInterfaceTestClass + - method "download" is exposed as "downloads/PLUGINNAME" + + +Language file structure: + - the content of the language file will be added to the hdf dataset below "Lang.Plugins.PLUGINNAME" + (this avoids namespace conflicts) + - the following top level settings _must_ be defined: + Name (a short description) + Link (the visible text for links to this plugin) + - only system plugins: "Title" is necessary, too + - all warnings, hints and success messages as well as environment warnings should + be stored below WarningMessage/AdviceMessage/SuccessMessage/EnvironmentWarning + + +Clearsilver template: + - volume plugins do not have a title + - system plugins should contain '' at the + top of the template + - the title should be followd by '' + this will display important messages + - usually you should supply some helpful information afterwards (only displayed + if the user enabled inline-help before): + "" + - links to the plugin (e.g. in form headers) could look like the following: + + diff --git a/v0.3.4.5/plugins/plugin_icon_unknown.gif b/v0.3.4.5/plugins/plugin_icon_unknown.gif new file mode 100644 index 0000000000000000000000000000000000000000..d5722d8bcc2126102e9ea85178a91a9765cf2101 GIT binary patch literal 3160 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 literal 0 HcmV?d00001 diff --git a/v0.3.4.5/plugins/plugin_icon_unknown.png b/v0.3.4.5/plugins/plugin_icon_unknown.png new file mode 100644 index 0000000000000000000000000000000000000000..769723d8b21ba6cf5122cef4b5da65d3cf3da1f1 GIT binary patch literal 6304 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\n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Plugin manager" +msgstr "" + +#: Link +msgid "Plugins" +msgstr "" + +#: Title +msgid "Plugin Manager" +msgstr "" + +#: Title.VolumePlugins +msgid "Volume plugins" +msgstr "" + +#: Title.SystemPlugins +msgid "System plugins" +msgstr "" + +#: Button.SaveSettings +msgid "Save all settings" +msgstr "" + +#: Button.Up +msgid "move up" +msgstr "" + +#: Button.Down +msgid "move down" +msgstr "" + +#: Text.PluginName +msgid "Plugin" +msgstr "" + +#: Text.PluginRank +msgid "Order" +msgstr "" + +#: Text.RequestsAuth +msgid "Requires admin?" +msgstr "" + +#: Text.InMenu +msgid "Main menu" +msgstr "" + +#: Text.InPreferences +msgid "Preferences" +msgstr "" + +#: Text.InVolumeRegister +msgid "Register" +msgstr "" + +#: Text.InVolumeProperties +msgid "Properties" +msgstr "" + +#: Text.WhereVisible +msgid "Where visible?" +msgstr "" + +#: Help.PluginManager +msgid "All features of the CryptoBox are provided by plugins. This makes it possible to extend the CryptoBox easily. Here you may disable some of the available plugins to prevent unwanted user actions. Alternatively you can demand administrative privileges (see 'User manager') to protect dangerous actions from random access. The rightmost column 'order' can be used to change the order of appearance of the plugins. Don't forget to save the settings." +msgstr "" + +#: Help.VolumePlugins +msgid "Volume plugins are used for configuration, activation and generall handling of volumes. 'Register' is the tab-based main interface for volume management which appears if you click on a volume. 'Preferences' is one of these tabs can be be filled with volume plugins to reduce the tabs in the volumes interface." +msgstr "" + +#: Help.SystemPlugins +msgid "System plugins can change various aspects of the CryptoBox. They may be listed in the main navigation bar (the leftmost part of every page) and/or in the 'System preferences' container. You should never disable the 'Plugin manager'." +msgstr "" diff --git a/v0.3.4.5/plugins/plugin_manager/intl/da/cryptobox-server-feature-plugin_manager.po b/v0.3.4.5/plugins/plugin_manager/intl/da/cryptobox-server-feature-plugin_manager.po new file mode 100644 index 0000000..faccaaf --- /dev/null +++ b/v0.3.4.5/plugins/plugin_manager/intl/da/cryptobox-server-feature-plugin_manager.po @@ -0,0 +1,89 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-07 09:21+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Plugin manager" +msgstr "" + +#: Link +msgid "Plugins" +msgstr "" + +#: Title +msgid "Plugin Manager" +msgstr "" + +#: Title.VolumePlugins +msgid "Volume plugins" +msgstr "" + +#: Title.SystemPlugins +msgid "System plugins" +msgstr "" + +#: Button.SaveSettings +msgid "Save all settings" +msgstr "" + +#: Button.Up +msgid "move up" +msgstr "" + +#: Button.Down +msgid "move down" +msgstr "" + +#: Text.PluginName +msgid "Plugin" +msgstr "" + +#: Text.PluginRank +msgid "Order" +msgstr "" + +#: Text.RequestsAuth +msgid "Requires admin?" +msgstr "" + +#: Text.InMenu +msgid "Main menu" +msgstr "" + +#: Text.InPreferences +msgid "Preferences" +msgstr "" + +#: Text.InVolumeRegister +msgid "Register" +msgstr "" + +#: Text.InVolumeProperties +msgid "Properties" +msgstr "" + +#: Text.WhereVisible +msgid "Where visible?" +msgstr "" + +#: Help.PluginManager +msgid "All features of the CryptoBox are provided by plugins. This makes it possible to extend the CryptoBox easily. Here you may disable some of the available plugins to prevent unwanted user actions. Alternatively you can demand administrative privileges (see 'User manager') to protect dangerous actions from random access. The rightmost column 'order' can be used to change the order of appearance of the plugins. Don't forget to save the settings." +msgstr "" + +#: Help.VolumePlugins +msgid "Volume plugins are used for configuration, activation and generall handling of volumes. 'Register' is the tab-based main interface for volume management which appears if you click on a volume. 'Preferences' is one of these tabs can be be filled with volume plugins to reduce the tabs in the volumes interface." +msgstr "" + +#: Help.SystemPlugins +msgid "System plugins can change various aspects of the CryptoBox. They may be listed in the main navigation bar (the leftmost part of every page) and/or in the 'System preferences' container. You should never disable the 'Plugin manager'." +msgstr "" diff --git a/v0.3.4.5/plugins/plugin_manager/intl/de/cryptobox-server-feature-plugin_manager.po b/v0.3.4.5/plugins/plugin_manager/intl/de/cryptobox-server-feature-plugin_manager.po new file mode 100644 index 0000000..35f1ad9 --- /dev/null +++ b/v0.3.4.5/plugins/plugin_manager/intl/de/cryptobox-server-feature-plugin_manager.po @@ -0,0 +1,89 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-07 09:21+0100\n" +"PO-Revision-Date: 2007-02-10 00:49+0100\n" +"Last-Translator: Lars Kruse \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Plugin manager" +msgstr "Plugin-Verwaltung" + +#: Link +msgid "Plugins" +msgstr "Plugins" + +#: Title +msgid "Plugin Manager" +msgstr "Plugin-Verwaltung" + +#: Title.VolumePlugins +msgid "Volume plugins" +msgstr "Datenträger-Plugins" + +#: Title.SystemPlugins +msgid "System plugins" +msgstr "System-Plugins" + +#: Button.SaveSettings +msgid "Save all settings" +msgstr "Alle Einstellungen speichern" + +#: Button.Up +msgid "move up" +msgstr "hoch" + +#: Button.Down +msgid "move down" +msgstr "runter" + +#: Text.PluginName +msgid "Plugin" +msgstr "Plugin" + +#: Text.PluginRank +msgid "Order" +msgstr "Reihenfolge" + +#: Text.RequestsAuth +msgid "Requires admin?" +msgstr "Administrator erforderlich?" + +#: Text.InMenu +msgid "Main menu" +msgstr "Hauptmenü" + +#: Text.InPreferences +msgid "Preferences" +msgstr "Einstellungen" + +#: Text.InVolumeRegister +msgid "Register" +msgstr "Register" + +#: Text.InVolumeProperties +msgid "Properties" +msgstr "Eigenschaften" + +#: Text.WhereVisible +msgid "Where visible?" +msgstr "Wo sichtbar?" + +#: Help.PluginManager +msgid "All features of the CryptoBox are provided by plugins. This makes it possible to extend the CryptoBox easily. Here you may disable some of the available plugins to prevent unwanted user actions. Alternatively you can demand administrative privileges (see 'User manager') to protect dangerous actions from random access. The rightmost column 'order' can be used to change the order of appearance of the plugins. Don't forget to save the settings." +msgstr "Alle Fähigkeiten der CryptoBox werden durch Plugins bereit gestellt. Dadurch ist es möglich, die CryptoBox auf einfache Art und Weise zu erweitern. Hier kannst du Plugins abschalten, um sie vor ungewollter Nutzung zu schützen. Außerdem können ausgewählte Plugins nur für AdministratorInnnen freigeschaltet werden, um unauthorisierten Zugriff auf gefährliche Aktionen zu verhindern (siehe Nutzerverwaltung). In der rechten Spalte \"Reihenfolge\" kannst du die Sortierung der Plugins verändern. Vergiss nicht, deine Einstellungen zu speichern." + +#: Help.VolumePlugins +msgid "Volume plugins are used for configuration, activation and generall handling of volumes. 'Register' is the tab-based main interface for volume management which appears if you click on a volume. 'Preferences' is one of these tabs can be be filled with volume plugins to reduce the tabs in the volumes interface." +msgstr "Datenträger-Erweiterungen werden für die Konfiguration, die Nutzung und den Zugriff auf Datenträger im Allgemeinen verwendet. 'Register' ist das tab-basierte Haupt-Menü zur Datenträger-Verwaltung. 'Eigenschaften' ist ein Container für andere Erweiterungen, um das Haupt-Menü übersichtlicher zu gestalten." + +#: Help.SystemPlugins +msgid "System plugins can change various aspects of the CryptoBox. They may be listed in the main navigation bar (the leftmost part of every page) and/or in the 'System preferences' container. You should never disable the 'Plugin manager'." +msgstr "System-Plugins können verschiedenste Aspekte der CryptoBox konfigurieren. Sie können im Hauptmenü (am linken Bildschirmrand) oder in den \"Einstellungen\" aufgelistet werden. Bitte achte darauf, nicht die \"Plugin-Verwaltung\" abzuschalten, sonst wirst du keine Änderungen rückgängig machen können." diff --git a/v0.3.4.5/plugins/plugin_manager/intl/en/cryptobox-server-feature-plugin_manager.po b/v0.3.4.5/plugins/plugin_manager/intl/en/cryptobox-server-feature-plugin_manager.po new file mode 100644 index 0000000..d4df12a --- /dev/null +++ b/v0.3.4.5/plugins/plugin_manager/intl/en/cryptobox-server-feature-plugin_manager.po @@ -0,0 +1,77 @@ +#: Name +msgid "Plugin manager" +msgstr "Plugin manager" + +#: Link +#, fuzzy +msgid "Plugins" +msgstr "Plugins" + +#: Title +msgid "Plugin Manager" +msgstr "Plugin Manager" + +#: Title.VolumePlugins +msgid "Volume plugins" +msgstr "Volume plugins" + +#: Title.SystemPlugins +msgid "System plugins" +msgstr "System plugins" + +#: Button.SaveSettings +#, fuzzy +msgid "Save all settings" +msgstr "Save all settings" + +#: Button.Up +msgid "move up" +msgstr "move up" + +#: Button.Down +msgid "move down" +msgstr "move down" + +#: Text.PluginName +msgid "Plugin" +msgstr "Plugin" + +#: Text.PluginRank +msgid "Order" +msgstr "Order" + +#: Text.RequestsAuth +msgid "Requires admin?" +msgstr "Requires admin?" + +#: Text.InMenu +msgid "Main menu" +msgstr "Main menu" + +#: Text.InPreferences +msgid "Preferences" +msgstr "Preferences" + +#: Text.InVolumeRegister +msgid "Register" +msgstr "Register" + +#: Text.InVolumeProperties +msgid "Properties" +msgstr "Properties" + +#: Text.WhereVisible +msgid "Where visible?" +msgstr "Where visible?" + +#: Help.PluginManager +msgid "All features of the CryptoBox are provided by plugins. This makes it possible to extend the CryptoBox easily. Here you may disable some of the available plugins to prevent unwanted user actions. Alternatively you can demand administrative privileges (see 'User manager') to protect dangerous actions from random access. The rightmost column 'order' can be used to change the order of appearance of the plugins. Don't forget to save the settings." +msgstr "All features of the CryptoBox are provided by plugins. This makes it possible to extend the CryptoBox easily. Here you may disable some of the available plugins to prevent unwanted user actions. Alternatively you can demand administrative privileges (see 'User manager') to protect dangerous actions from random access. The rightmost column 'order' can be used to change the order of appearance of the plugins. Don't forget to save the settings." + +#: Help.VolumePlugins +msgid "Volume plugins are used for configuration, activation and generall handling of volumes. 'Register' is the tab-based main interface for volume management which appears if you click on a volume. 'Preferences' is one of these tabs can be be filled with volume plugins to reduce the tabs in the volumes interface." +msgstr "Volume plugins are used for configuration, activation and generall handling of volumes. 'Register' is the tab-based main interface for volume management which appears if you click on a volume. 'Preferences' is one of these tabs can be be filled with volume plugins to reduce the tabs in the volumes interface." + +#: Help.SystemPlugins +msgid "System plugins can change various aspects of the CryptoBox. They may be listed in the main navigation bar (the leftmost part of every page) and/or in the 'System preferences' container. You should never disable the 'Plugin manager'." +msgstr "System plugins can change various aspects of the CryptoBox. They may be listed in the main navigation bar (the leftmost part of every page) and/or in the 'System preferences' container. You should never disable the 'Plugin manager'." diff --git a/v0.3.4.5/plugins/plugin_manager/intl/es/cryptobox-server-feature-plugin_manager.po b/v0.3.4.5/plugins/plugin_manager/intl/es/cryptobox-server-feature-plugin_manager.po new file mode 100644 index 0000000..faccaaf --- /dev/null +++ b/v0.3.4.5/plugins/plugin_manager/intl/es/cryptobox-server-feature-plugin_manager.po @@ -0,0 +1,89 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-07 09:21+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Plugin manager" +msgstr "" + +#: Link +msgid "Plugins" +msgstr "" + +#: Title +msgid "Plugin Manager" +msgstr "" + +#: Title.VolumePlugins +msgid "Volume plugins" +msgstr "" + +#: Title.SystemPlugins +msgid "System plugins" +msgstr "" + +#: Button.SaveSettings +msgid "Save all settings" +msgstr "" + +#: Button.Up +msgid "move up" +msgstr "" + +#: Button.Down +msgid "move down" +msgstr "" + +#: Text.PluginName +msgid "Plugin" +msgstr "" + +#: Text.PluginRank +msgid "Order" +msgstr "" + +#: Text.RequestsAuth +msgid "Requires admin?" +msgstr "" + +#: Text.InMenu +msgid "Main menu" +msgstr "" + +#: Text.InPreferences +msgid "Preferences" +msgstr "" + +#: Text.InVolumeRegister +msgid "Register" +msgstr "" + +#: Text.InVolumeProperties +msgid "Properties" +msgstr "" + +#: Text.WhereVisible +msgid "Where visible?" +msgstr "" + +#: Help.PluginManager +msgid "All features of the CryptoBox are provided by plugins. This makes it possible to extend the CryptoBox easily. Here you may disable some of the available plugins to prevent unwanted user actions. Alternatively you can demand administrative privileges (see 'User manager') to protect dangerous actions from random access. The rightmost column 'order' can be used to change the order of appearance of the plugins. Don't forget to save the settings." +msgstr "" + +#: Help.VolumePlugins +msgid "Volume plugins are used for configuration, activation and generall handling of volumes. 'Register' is the tab-based main interface for volume management which appears if you click on a volume. 'Preferences' is one of these tabs can be be filled with volume plugins to reduce the tabs in the volumes interface." +msgstr "" + +#: Help.SystemPlugins +msgid "System plugins can change various aspects of the CryptoBox. They may be listed in the main navigation bar (the leftmost part of every page) and/or in the 'System preferences' container. You should never disable the 'Plugin manager'." +msgstr "" diff --git a/v0.3.4.5/plugins/plugin_manager/intl/fi/cryptobox-server-feature-plugin_manager.po b/v0.3.4.5/plugins/plugin_manager/intl/fi/cryptobox-server-feature-plugin_manager.po new file mode 100644 index 0000000..faccaaf --- /dev/null +++ b/v0.3.4.5/plugins/plugin_manager/intl/fi/cryptobox-server-feature-plugin_manager.po @@ -0,0 +1,89 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-07 09:21+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Plugin manager" +msgstr "" + +#: Link +msgid "Plugins" +msgstr "" + +#: Title +msgid "Plugin Manager" +msgstr "" + +#: Title.VolumePlugins +msgid "Volume plugins" +msgstr "" + +#: Title.SystemPlugins +msgid "System plugins" +msgstr "" + +#: Button.SaveSettings +msgid "Save all settings" +msgstr "" + +#: Button.Up +msgid "move up" +msgstr "" + +#: Button.Down +msgid "move down" +msgstr "" + +#: Text.PluginName +msgid "Plugin" +msgstr "" + +#: Text.PluginRank +msgid "Order" +msgstr "" + +#: Text.RequestsAuth +msgid "Requires admin?" +msgstr "" + +#: Text.InMenu +msgid "Main menu" +msgstr "" + +#: Text.InPreferences +msgid "Preferences" +msgstr "" + +#: Text.InVolumeRegister +msgid "Register" +msgstr "" + +#: Text.InVolumeProperties +msgid "Properties" +msgstr "" + +#: Text.WhereVisible +msgid "Where visible?" +msgstr "" + +#: Help.PluginManager +msgid "All features of the CryptoBox are provided by plugins. This makes it possible to extend the CryptoBox easily. Here you may disable some of the available plugins to prevent unwanted user actions. Alternatively you can demand administrative privileges (see 'User manager') to protect dangerous actions from random access. The rightmost column 'order' can be used to change the order of appearance of the plugins. Don't forget to save the settings." +msgstr "" + +#: Help.VolumePlugins +msgid "Volume plugins are used for configuration, activation and generall handling of volumes. 'Register' is the tab-based main interface for volume management which appears if you click on a volume. 'Preferences' is one of these tabs can be be filled with volume plugins to reduce the tabs in the volumes interface." +msgstr "" + +#: Help.SystemPlugins +msgid "System plugins can change various aspects of the CryptoBox. They may be listed in the main navigation bar (the leftmost part of every page) and/or in the 'System preferences' container. You should never disable the 'Plugin manager'." +msgstr "" diff --git a/v0.3.4.5/plugins/plugin_manager/intl/fr/cryptobox-server-feature-plugin_manager.po b/v0.3.4.5/plugins/plugin_manager/intl/fr/cryptobox-server-feature-plugin_manager.po new file mode 100644 index 0000000..faccaaf --- /dev/null +++ b/v0.3.4.5/plugins/plugin_manager/intl/fr/cryptobox-server-feature-plugin_manager.po @@ -0,0 +1,89 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-07 09:21+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Plugin manager" +msgstr "" + +#: Link +msgid "Plugins" +msgstr "" + +#: Title +msgid "Plugin Manager" +msgstr "" + +#: Title.VolumePlugins +msgid "Volume plugins" +msgstr "" + +#: Title.SystemPlugins +msgid "System plugins" +msgstr "" + +#: Button.SaveSettings +msgid "Save all settings" +msgstr "" + +#: Button.Up +msgid "move up" +msgstr "" + +#: Button.Down +msgid "move down" +msgstr "" + +#: Text.PluginName +msgid "Plugin" +msgstr "" + +#: Text.PluginRank +msgid "Order" +msgstr "" + +#: Text.RequestsAuth +msgid "Requires admin?" +msgstr "" + +#: Text.InMenu +msgid "Main menu" +msgstr "" + +#: Text.InPreferences +msgid "Preferences" +msgstr "" + +#: Text.InVolumeRegister +msgid "Register" +msgstr "" + +#: Text.InVolumeProperties +msgid "Properties" +msgstr "" + +#: Text.WhereVisible +msgid "Where visible?" +msgstr "" + +#: Help.PluginManager +msgid "All features of the CryptoBox are provided by plugins. This makes it possible to extend the CryptoBox easily. Here you may disable some of the available plugins to prevent unwanted user actions. Alternatively you can demand administrative privileges (see 'User manager') to protect dangerous actions from random access. The rightmost column 'order' can be used to change the order of appearance of the plugins. Don't forget to save the settings." +msgstr "" + +#: Help.VolumePlugins +msgid "Volume plugins are used for configuration, activation and generall handling of volumes. 'Register' is the tab-based main interface for volume management which appears if you click on a volume. 'Preferences' is one of these tabs can be be filled with volume plugins to reduce the tabs in the volumes interface." +msgstr "" + +#: Help.SystemPlugins +msgid "System plugins can change various aspects of the CryptoBox. They may be listed in the main navigation bar (the leftmost part of every page) and/or in the 'System preferences' container. You should never disable the 'Plugin manager'." +msgstr "" diff --git a/v0.3.4.5/plugins/plugin_manager/intl/hu/cryptobox-server-feature-plugin_manager.po b/v0.3.4.5/plugins/plugin_manager/intl/hu/cryptobox-server-feature-plugin_manager.po new file mode 100644 index 0000000..faccaaf --- /dev/null +++ b/v0.3.4.5/plugins/plugin_manager/intl/hu/cryptobox-server-feature-plugin_manager.po @@ -0,0 +1,89 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-07 09:21+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Plugin manager" +msgstr "" + +#: Link +msgid "Plugins" +msgstr "" + +#: Title +msgid "Plugin Manager" +msgstr "" + +#: Title.VolumePlugins +msgid "Volume plugins" +msgstr "" + +#: Title.SystemPlugins +msgid "System plugins" +msgstr "" + +#: Button.SaveSettings +msgid "Save all settings" +msgstr "" + +#: Button.Up +msgid "move up" +msgstr "" + +#: Button.Down +msgid "move down" +msgstr "" + +#: Text.PluginName +msgid "Plugin" +msgstr "" + +#: Text.PluginRank +msgid "Order" +msgstr "" + +#: Text.RequestsAuth +msgid "Requires admin?" +msgstr "" + +#: Text.InMenu +msgid "Main menu" +msgstr "" + +#: Text.InPreferences +msgid "Preferences" +msgstr "" + +#: Text.InVolumeRegister +msgid "Register" +msgstr "" + +#: Text.InVolumeProperties +msgid "Properties" +msgstr "" + +#: Text.WhereVisible +msgid "Where visible?" +msgstr "" + +#: Help.PluginManager +msgid "All features of the CryptoBox are provided by plugins. This makes it possible to extend the CryptoBox easily. Here you may disable some of the available plugins to prevent unwanted user actions. Alternatively you can demand administrative privileges (see 'User manager') to protect dangerous actions from random access. The rightmost column 'order' can be used to change the order of appearance of the plugins. Don't forget to save the settings." +msgstr "" + +#: Help.VolumePlugins +msgid "Volume plugins are used for configuration, activation and generall handling of volumes. 'Register' is the tab-based main interface for volume management which appears if you click on a volume. 'Preferences' is one of these tabs can be be filled with volume plugins to reduce the tabs in the volumes interface." +msgstr "" + +#: Help.SystemPlugins +msgid "System plugins can change various aspects of the CryptoBox. They may be listed in the main navigation bar (the leftmost part of every page) and/or in the 'System preferences' container. You should never disable the 'Plugin manager'." +msgstr "" diff --git a/v0.3.4.5/plugins/plugin_manager/intl/it/cryptobox-server-feature-plugin_manager.po b/v0.3.4.5/plugins/plugin_manager/intl/it/cryptobox-server-feature-plugin_manager.po new file mode 100644 index 0000000..92af4dc --- /dev/null +++ b/v0.3.4.5/plugins/plugin_manager/intl/it/cryptobox-server-feature-plugin_manager.po @@ -0,0 +1,89 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-04-01 15:55+0200\n" +"PO-Revision-Date: 2007-03-20 21:03+0100\n" +"Last-Translator: Fabrizio Tarizzo \n" +"Language-Team: Italian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Plugin manager" +msgstr "Gestore dei plugin" + +#: Link +msgid "Plugins" +msgstr "Plugin" + +#: Title +msgid "Plugin Manager" +msgstr "Gestore dei plugin" + +#: Title.VolumePlugins +msgid "Volume plugins" +msgstr "Plugin per le operazioni sui volumi" + +#: Title.SystemPlugins +msgid "System plugins" +msgstr "Plugin di sistema" + +#: Button.SaveSettings +msgid "Save all settings" +msgstr "Salva tutte le impostazioni" + +#: Button.Up +msgid "move up" +msgstr "sposta verso l'alto" + +#: Button.Down +msgid "move down" +msgstr "sposta verso il basso" + +#: Text.PluginName +msgid "Plugin" +msgstr "Plugin" + +#: Text.PluginRank +msgid "Order" +msgstr "Ordinamento" + +#: Text.RequestsAuth +msgid "Requires admin?" +msgstr "Richiede i privilegi amministrativi?" + +#: Text.InMenu +msgid "Main menu" +msgstr "Menu principale" + +#: Text.InPreferences +msgid "Preferences" +msgstr "Preferenze" + +#: Text.InVolumeRegister +msgid "Register" +msgstr "Registra" + +#: Text.InVolumeProperties +msgid "Properties" +msgstr "Proprietà" + +#: Text.WhereVisible +msgid "Where visible?" +msgstr "Visibile dove?" + +#: Help.PluginManager +msgid "All features of the CryptoBox are provided by plugins. This makes it possible to extend the CryptoBox easily. Here you may disable some of the available plugins to prevent unwanted user actions. Alternatively you can demand administrative privileges (see 'User manager') to protect dangerous actions from random access. The rightmost column 'order' can be used to change the order of appearance of the plugins. Don't forget to save the settings." +msgstr "Tutte le funzionalità della CryptoBox sono fornite dai plugin. Questo rende possibile migliorare la CryptoBox con maggiore facilità. È possibile disattivare alcuni plugin per impedire agli utenti determinate azioni, oppure richiedere i privilegi amministrativi (vedi 'Gestione utenti') per proteggere dall'accesso casuale le azioni potenzialmente pericolose. La colonna a destra 'Ordinamanto' può essere usata per modificare l'ordine in cui i plugin vengono mostrati. Non dimenticare di salvare le impostazioni." + +#: Help.VolumePlugins +msgid "Volume plugins are used for configuration, activation and generall handling of volumes. 'Register' is the tab-based main interface for volume management which appears if you click on a volume. 'Preferences' is one of these tabs can be be filled with volume plugins to reduce the tabs in the volumes interface." +msgstr "" + +#: Help.SystemPlugins +msgid "System plugins can change various aspects of the CryptoBox. They may be listed in the main navigation bar (the leftmost part of every page) and/or in the 'System preferences' container. You should never disable the 'Plugin manager'." +msgstr "I plugin di sistema gestiscono i vari aspetti della CryptoBox. Possono essere mostrati nella barra di navigazione principale (a sinistra di ogni pagina) e/o nel contenitore 'Preferenze di sistema'. Non si dovrebbe mai disattivare il 'Gestore dei plugin'." diff --git a/v0.3.4.5/plugins/plugin_manager/intl/ja/cryptobox-server-feature-plugin_manager.po b/v0.3.4.5/plugins/plugin_manager/intl/ja/cryptobox-server-feature-plugin_manager.po new file mode 100644 index 0000000..87a3d3d --- /dev/null +++ b/v0.3.4.5/plugins/plugin_manager/intl/ja/cryptobox-server-feature-plugin_manager.po @@ -0,0 +1,89 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-07 09:21+0100\n" +"PO-Revision-Date: 2007-02-26 03:39+0100\n" +"Last-Translator: kinneko \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Plugin manager" +msgstr "プラグインの管理" + +#: Link +msgid "Plugins" +msgstr "プラグイン" + +#: Title +msgid "Plugin Manager" +msgstr "プラグインの管理" + +#: Title.VolumePlugins +msgid "Volume plugins" +msgstr "領域管理関連のプラグイン" + +#: Title.SystemPlugins +msgid "System plugins" +msgstr "システム管理関連のプラグイン" + +#: Button.SaveSettings +msgid "Save all settings" +msgstr "すべての設定を保存する" + +#: Button.Up +msgid "move up" +msgstr "表示順を上に移動" + +#: Button.Down +msgid "move down" +msgstr "表示順を下に移動" + +#: Text.PluginName +msgid "Plugin" +msgstr "プラグイン" + +#: Text.PluginRank +msgid "Order" +msgstr "順番" + +#: Text.RequestsAuth +msgid "Requires admin?" +msgstr "管理者権限を必須に" + +#: Text.InMenu +msgid "Main menu" +msgstr "メインメニュー" + +#: Text.InPreferences +msgid "Preferences" +msgstr "設定" + +#: Text.InVolumeRegister +msgid "Register" +msgstr "レジスター" + +#: Text.InVolumeProperties +msgid "Properties" +msgstr "属性" + +#: Text.WhereVisible +msgid "Where visible?" +msgstr "表示階層" + +#: Help.PluginManager +msgid "All features of the CryptoBox are provided by plugins. This makes it possible to extend the CryptoBox easily. Here you may disable some of the available plugins to prevent unwanted user actions. Alternatively you can demand administrative privileges (see 'User manager') to protect dangerous actions from random access. The rightmost column 'order' can be used to change the order of appearance of the plugins. Don't forget to save the settings." +msgstr "クリプトボックスのすべての機能は、プラグインによって提供されます。この仕組みによって、クリプトボックスは拡張を簡単にしています。この画面では、不要な操作を防ぐために、利用できるプラグインを無効にできます。また、ランダムアクセスによる不用意な操作を防止するために、操作に管理者権限を必須とすることもできます(\"ユーザーマネージャ\"機能を確認してください)。一番右側に表示される「順番」では、プラグインの表示順序や表示階層を変更することができます。設定を変更した後に、保存するのを忘れないでください。" + +#: Help.VolumePlugins +msgid "Volume plugins are used for configuration, activation and generall handling of volumes. 'Register' is the tab-based main interface for volume management which appears if you click on a volume. 'Preferences' is one of these tabs can be be filled with volume plugins to reduce the tabs in the volumes interface." +msgstr "領域プラグインは、設定と有効化、領域の一般的な操作を行います。領域アイコンを押すと表示される「登録」画面は、タブ型の画面構成を持った領域管理メニューです。これらのタブのうち、「設定」では、領域画面に表示されるタブ項目を減らすことができます。" + +#: Help.SystemPlugins +msgid "System plugins can change various aspects of the CryptoBox. They may be listed in the main navigation bar (the leftmost part of every page) and/or in the 'System preferences' container. You should never disable the 'Plugin manager'." +msgstr "システムプラグインは、クリプトボックスのさまざまな部分を変更することができます。それは、主な操作メニュー(あらゆる画面の左側に表示されています)や、システム設定枠に表示されます。プラグインマネージャは絶対に無効にしないでください。" diff --git a/v0.3.4.5/plugins/plugin_manager/intl/nl/cryptobox-server-feature-plugin_manager.po b/v0.3.4.5/plugins/plugin_manager/intl/nl/cryptobox-server-feature-plugin_manager.po new file mode 100644 index 0000000..faccaaf --- /dev/null +++ b/v0.3.4.5/plugins/plugin_manager/intl/nl/cryptobox-server-feature-plugin_manager.po @@ -0,0 +1,89 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-07 09:21+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Plugin manager" +msgstr "" + +#: Link +msgid "Plugins" +msgstr "" + +#: Title +msgid "Plugin Manager" +msgstr "" + +#: Title.VolumePlugins +msgid "Volume plugins" +msgstr "" + +#: Title.SystemPlugins +msgid "System plugins" +msgstr "" + +#: Button.SaveSettings +msgid "Save all settings" +msgstr "" + +#: Button.Up +msgid "move up" +msgstr "" + +#: Button.Down +msgid "move down" +msgstr "" + +#: Text.PluginName +msgid "Plugin" +msgstr "" + +#: Text.PluginRank +msgid "Order" +msgstr "" + +#: Text.RequestsAuth +msgid "Requires admin?" +msgstr "" + +#: Text.InMenu +msgid "Main menu" +msgstr "" + +#: Text.InPreferences +msgid "Preferences" +msgstr "" + +#: Text.InVolumeRegister +msgid "Register" +msgstr "" + +#: Text.InVolumeProperties +msgid "Properties" +msgstr "" + +#: Text.WhereVisible +msgid "Where visible?" +msgstr "" + +#: Help.PluginManager +msgid "All features of the CryptoBox are provided by plugins. This makes it possible to extend the CryptoBox easily. Here you may disable some of the available plugins to prevent unwanted user actions. Alternatively you can demand administrative privileges (see 'User manager') to protect dangerous actions from random access. The rightmost column 'order' can be used to change the order of appearance of the plugins. Don't forget to save the settings." +msgstr "" + +#: Help.VolumePlugins +msgid "Volume plugins are used for configuration, activation and generall handling of volumes. 'Register' is the tab-based main interface for volume management which appears if you click on a volume. 'Preferences' is one of these tabs can be be filled with volume plugins to reduce the tabs in the volumes interface." +msgstr "" + +#: Help.SystemPlugins +msgid "System plugins can change various aspects of the CryptoBox. They may be listed in the main navigation bar (the leftmost part of every page) and/or in the 'System preferences' container. You should never disable the 'Plugin manager'." +msgstr "" diff --git a/v0.3.4.5/plugins/plugin_manager/intl/pl/cryptobox-server-feature-plugin_manager.po b/v0.3.4.5/plugins/plugin_manager/intl/pl/cryptobox-server-feature-plugin_manager.po new file mode 100644 index 0000000..25c0b38 --- /dev/null +++ b/v0.3.4.5/plugins/plugin_manager/intl/pl/cryptobox-server-feature-plugin_manager.po @@ -0,0 +1,90 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-04-01 15:55+0200\n" +"PO-Revision-Date: 2007-03-30 09:44+0200\n" +"Last-Translator: Andrzej S. Kaznowski \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Plugin manager" +msgstr "Zarządzanie wtyczkami" + +#: Link +msgid "Plugins" +msgstr "Wtyczki" + +#: Title +msgid "Plugin Manager" +msgstr "Zarządzanie wtyczkami" + +#: Title.VolumePlugins +msgid "Volume plugins" +msgstr "Wtyczki woluminów" + +#: Title.SystemPlugins +msgid "System plugins" +msgstr "Wtyczki systemu" + +#: Button.SaveSettings +msgid "Save all settings" +msgstr "Zapamiętaj wszystkie ustawienia" + +#: Button.Up +msgid "move up" +msgstr "przesuń w górę" + +#: Button.Down +msgid "move down" +msgstr "przesuń w dół" + +#: Text.PluginName +msgid "Plugin" +msgstr "Wtyczka" + +#: Text.PluginRank +msgid "Order" +msgstr "Kolejność" + +#: Text.RequestsAuth +msgid "Requires admin?" +msgstr "Wymaga admin?" + +#: Text.InMenu +msgid "Main menu" +msgstr "Menu główne" + +#: Text.InPreferences +msgid "Preferences" +msgstr "Ustawienia" + +#: Text.InVolumeRegister +msgid "Register" +msgstr "Rejestr" + +#: Text.InVolumeProperties +msgid "Properties" +msgstr "Właściwości" + +#: Text.WhereVisible +msgid "Where visible?" +msgstr "Widoczne w ..." + +#: Help.PluginManager +msgid "All features of the CryptoBox are provided by plugins. This makes it possible to extend the CryptoBox easily. Here you may disable some of the available plugins to prevent unwanted user actions. Alternatively you can demand administrative privileges (see 'User manager') to protect dangerous actions from random access. The rightmost column 'order' can be used to change the order of appearance of the plugins. Don't forget to save the settings." +msgstr "Wszystkie funkcje systemu CryptoBox działają dzięki wtyczkom. Umożliwia to łatwe poszerzenie systemu CryptoBox. Tutaj możesz wyłączyć niektóre wtyczki, aby zapobiec nieporządanym czynnościom uzytkowników. Możesz również wymagać przywilejów administratora (patrz \"Zatządzanie użytkownikami\"), aby zapobiec niebezpiecznym czynnościom wynikających z nieograniczonego dostępu. Najdalej wysunięta kolumna po prawej stronie 'kolejność' może być użyta do zmiany kolejności wtyczek. Nie zapomij zapisać ustawień." + +#: Help.VolumePlugins +#, fuzzy +msgid "Volume plugins are used for configuration, activation and generall handling of volumes. 'Register' is the tab-based main interface for volume management which appears if you click on a volume. 'Preferences' is one of these tabs can be be filled with volume plugins to reduce the tabs in the volumes interface." +msgstr "Wtyczki woluminów są używane do konfigyracji, aktywacji i ogólnego obsługiwania woluminów. 'Rejestr\" jest opartym na tabach głównym interfejsem do zarządzania woluminami, który się wyświetla, gdy klikniesz na wolumin. 'Ustawienia' jest jednym z tych tabów, które może być wypełnione wtyczkami woluminów w celu zredukowania tabów w interfejsie woluminów." + +#: Help.SystemPlugins +msgid "System plugins can change various aspects of the CryptoBox. They may be listed in the main navigation bar (the leftmost part of every page) and/or in the 'System preferences' container. You should never disable the 'Plugin manager'." +msgstr "System woluminów może mieć wpływ na różne aspekty sytemu CryptoBox. Mogą być one umieszczone w głównym pasku nawigacyjnym (najbardziej na lewo wysunięta część każdej strony) i/lub w sekcji 'Ustawienia systemu'. Nigdy nie wyłączaj 'Zarządzanie wtyczkami'." diff --git a/v0.3.4.5/plugins/plugin_manager/intl/pt/cryptobox-server-feature-plugin_manager.po b/v0.3.4.5/plugins/plugin_manager/intl/pt/cryptobox-server-feature-plugin_manager.po new file mode 100644 index 0000000..faccaaf --- /dev/null +++ b/v0.3.4.5/plugins/plugin_manager/intl/pt/cryptobox-server-feature-plugin_manager.po @@ -0,0 +1,89 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-07 09:21+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Plugin manager" +msgstr "" + +#: Link +msgid "Plugins" +msgstr "" + +#: Title +msgid "Plugin Manager" +msgstr "" + +#: Title.VolumePlugins +msgid "Volume plugins" +msgstr "" + +#: Title.SystemPlugins +msgid "System plugins" +msgstr "" + +#: Button.SaveSettings +msgid "Save all settings" +msgstr "" + +#: Button.Up +msgid "move up" +msgstr "" + +#: Button.Down +msgid "move down" +msgstr "" + +#: Text.PluginName +msgid "Plugin" +msgstr "" + +#: Text.PluginRank +msgid "Order" +msgstr "" + +#: Text.RequestsAuth +msgid "Requires admin?" +msgstr "" + +#: Text.InMenu +msgid "Main menu" +msgstr "" + +#: Text.InPreferences +msgid "Preferences" +msgstr "" + +#: Text.InVolumeRegister +msgid "Register" +msgstr "" + +#: Text.InVolumeProperties +msgid "Properties" +msgstr "" + +#: Text.WhereVisible +msgid "Where visible?" +msgstr "" + +#: Help.PluginManager +msgid "All features of the CryptoBox are provided by plugins. This makes it possible to extend the CryptoBox easily. Here you may disable some of the available plugins to prevent unwanted user actions. Alternatively you can demand administrative privileges (see 'User manager') to protect dangerous actions from random access. The rightmost column 'order' can be used to change the order of appearance of the plugins. Don't forget to save the settings." +msgstr "" + +#: Help.VolumePlugins +msgid "Volume plugins are used for configuration, activation and generall handling of volumes. 'Register' is the tab-based main interface for volume management which appears if you click on a volume. 'Preferences' is one of these tabs can be be filled with volume plugins to reduce the tabs in the volumes interface." +msgstr "" + +#: Help.SystemPlugins +msgid "System plugins can change various aspects of the CryptoBox. They may be listed in the main navigation bar (the leftmost part of every page) and/or in the 'System preferences' container. You should never disable the 'Plugin manager'." +msgstr "" diff --git a/v0.3.4.5/plugins/plugin_manager/intl/ru/cryptobox-server-feature-plugin_manager.po b/v0.3.4.5/plugins/plugin_manager/intl/ru/cryptobox-server-feature-plugin_manager.po new file mode 100644 index 0000000..faccaaf --- /dev/null +++ b/v0.3.4.5/plugins/plugin_manager/intl/ru/cryptobox-server-feature-plugin_manager.po @@ -0,0 +1,89 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-07 09:21+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Plugin manager" +msgstr "" + +#: Link +msgid "Plugins" +msgstr "" + +#: Title +msgid "Plugin Manager" +msgstr "" + +#: Title.VolumePlugins +msgid "Volume plugins" +msgstr "" + +#: Title.SystemPlugins +msgid "System plugins" +msgstr "" + +#: Button.SaveSettings +msgid "Save all settings" +msgstr "" + +#: Button.Up +msgid "move up" +msgstr "" + +#: Button.Down +msgid "move down" +msgstr "" + +#: Text.PluginName +msgid "Plugin" +msgstr "" + +#: Text.PluginRank +msgid "Order" +msgstr "" + +#: Text.RequestsAuth +msgid "Requires admin?" +msgstr "" + +#: Text.InMenu +msgid "Main menu" +msgstr "" + +#: Text.InPreferences +msgid "Preferences" +msgstr "" + +#: Text.InVolumeRegister +msgid "Register" +msgstr "" + +#: Text.InVolumeProperties +msgid "Properties" +msgstr "" + +#: Text.WhereVisible +msgid "Where visible?" +msgstr "" + +#: Help.PluginManager +msgid "All features of the CryptoBox are provided by plugins. This makes it possible to extend the CryptoBox easily. Here you may disable some of the available plugins to prevent unwanted user actions. Alternatively you can demand administrative privileges (see 'User manager') to protect dangerous actions from random access. The rightmost column 'order' can be used to change the order of appearance of the plugins. Don't forget to save the settings." +msgstr "" + +#: Help.VolumePlugins +msgid "Volume plugins are used for configuration, activation and generall handling of volumes. 'Register' is the tab-based main interface for volume management which appears if you click on a volume. 'Preferences' is one of these tabs can be be filled with volume plugins to reduce the tabs in the volumes interface." +msgstr "" + +#: Help.SystemPlugins +msgid "System plugins can change various aspects of the CryptoBox. They may be listed in the main navigation bar (the leftmost part of every page) and/or in the 'System preferences' container. You should never disable the 'Plugin manager'." +msgstr "" diff --git a/v0.3.4.5/plugins/plugin_manager/intl/sl/cryptobox-server-feature-plugin_manager.po b/v0.3.4.5/plugins/plugin_manager/intl/sl/cryptobox-server-feature-plugin_manager.po new file mode 100644 index 0000000..8000821 --- /dev/null +++ b/v0.3.4.5/plugins/plugin_manager/intl/sl/cryptobox-server-feature-plugin_manager.po @@ -0,0 +1,89 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-07 09:21+0100\n" +"PO-Revision-Date: 2007-02-16 14:38+0100\n" +"Last-Translator: tenzin \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Plugin manager" +msgstr "Upravnik vtičnega prevajalca (plug-in)" + +#: Link +msgid "Plugins" +msgstr "Vtičniki" + +#: Title +msgid "Plugin Manager" +msgstr "Upravnik vtičnega prevajalca (plug-in)" + +#: Title.VolumePlugins +msgid "Volume plugins" +msgstr "Vtični prevajalci (plug-in) za posamezne dele" + +#: Title.SystemPlugins +msgid "System plugins" +msgstr "Sistem vtičnih prevajalcev (plug-in)" + +#: Button.SaveSettings +msgid "Save all settings" +msgstr "Shrani vse nastavitve" + +#: Button.Up +msgid "move up" +msgstr "Premakni gor" + +#: Button.Down +msgid "move down" +msgstr "Premakni dol" + +#: Text.PluginName +msgid "Plugin" +msgstr "Vključi" + +#: Text.PluginRank +msgid "Order" +msgstr "Ureditev" + +#: Text.RequestsAuth +msgid "Requires admin?" +msgstr "Zahtevate admin?" + +#: Text.InMenu +msgid "Main menu" +msgstr "Glavni meni" + +#: Text.InPreferences +msgid "Preferences" +msgstr "Nastavitev" + +#: Text.InVolumeRegister +msgid "Register" +msgstr "Register" + +#: Text.InVolumeProperties +msgid "Properties" +msgstr "Lastnosti" + +#: Text.WhereVisible +msgid "Where visible?" +msgstr "Kje vidno?" + +#: Help.PluginManager +msgid "All features of the CryptoBox are provided by plugins. This makes it possible to extend the CryptoBox easily. Here you may disable some of the available plugins to prevent unwanted user actions. Alternatively you can demand administrative privileges (see 'User manager') to protect dangerous actions from random access. The rightmost column 'order' can be used to change the order of appearance of the plugins. Don't forget to save the settings." +msgstr "vse lastnosti cryptoboxa so oskrbovane preko vtičnih prevajalnikov, kar omogoča lažjo širitev Cryptoboxa. Tu lahko izklopite nekatere izmed vtičnih prevajalnikov, v kolikor želite preprečiti nezaželjene akcije uporabnikov. Druga možnost je, da zahtevate privilegije administratorja (glej Uporabniški upravnik, alias: user manager) v želji, da bi se zavarovali pred nevarnimi akcijami naključnega dostopa. Skrajno desno kolono \"ureditev\" uporabite, če želite spremeniti videz, prikaz vtičnih prevajalnikov. Ne pozabite shraniti nastavitev." + +#: Help.VolumePlugins +msgid "Volume plugins are used for configuration, activation and generall handling of volumes. 'Register' is the tab-based main interface for volume management which appears if you click on a volume. 'Preferences' is one of these tabs can be be filled with volume plugins to reduce the tabs in the volumes interface." +msgstr "Vtičniki imenovani vtičniki delov se uporabljajo za konfiguracijo, aktivacijo in na splošno za ravnanje z deli, enotami (volumes). \"Register\" je glavni vmesnik za delo z enotami (deli, volumes), pojavi se ko kliknete na \"deli\" \"Prilagoditve\" je eden tistih zavihkov, preko katerega lahko urejate vse v zvezi z vtičniki in deli, enotami vašega računalnika" + +#: Help.SystemPlugins +msgid "System plugins can change various aspects of the CryptoBox. They may be listed in the main navigation bar (the leftmost part of every page) and/or in the 'System preferences' container. You should never disable the 'Plugin manager'." +msgstr "Sistem vtičnih prevajalnikov lahko spremeni različne aspekte Cryptoboxa. Lahko so zabeleženi v krmilni letvi (navigation bar) skrajno levi del vsake strani in/ali v sistemskih nastavitvah. Upravljalca vtičnih prevajalnikov (Plug-in manager) ni priporočljivo onemogočati/odklopiti" diff --git a/v0.3.4.5/plugins/plugin_manager/intl/sv/cryptobox-server-feature-plugin_manager.po b/v0.3.4.5/plugins/plugin_manager/intl/sv/cryptobox-server-feature-plugin_manager.po new file mode 100644 index 0000000..faccaaf --- /dev/null +++ b/v0.3.4.5/plugins/plugin_manager/intl/sv/cryptobox-server-feature-plugin_manager.po @@ -0,0 +1,89 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-07 09:21+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Plugin manager" +msgstr "" + +#: Link +msgid "Plugins" +msgstr "" + +#: Title +msgid "Plugin Manager" +msgstr "" + +#: Title.VolumePlugins +msgid "Volume plugins" +msgstr "" + +#: Title.SystemPlugins +msgid "System plugins" +msgstr "" + +#: Button.SaveSettings +msgid "Save all settings" +msgstr "" + +#: Button.Up +msgid "move up" +msgstr "" + +#: Button.Down +msgid "move down" +msgstr "" + +#: Text.PluginName +msgid "Plugin" +msgstr "" + +#: Text.PluginRank +msgid "Order" +msgstr "" + +#: Text.RequestsAuth +msgid "Requires admin?" +msgstr "" + +#: Text.InMenu +msgid "Main menu" +msgstr "" + +#: Text.InPreferences +msgid "Preferences" +msgstr "" + +#: Text.InVolumeRegister +msgid "Register" +msgstr "" + +#: Text.InVolumeProperties +msgid "Properties" +msgstr "" + +#: Text.WhereVisible +msgid "Where visible?" +msgstr "" + +#: Help.PluginManager +msgid "All features of the CryptoBox are provided by plugins. This makes it possible to extend the CryptoBox easily. Here you may disable some of the available plugins to prevent unwanted user actions. Alternatively you can demand administrative privileges (see 'User manager') to protect dangerous actions from random access. The rightmost column 'order' can be used to change the order of appearance of the plugins. Don't forget to save the settings." +msgstr "" + +#: Help.VolumePlugins +msgid "Volume plugins are used for configuration, activation and generall handling of volumes. 'Register' is the tab-based main interface for volume management which appears if you click on a volume. 'Preferences' is one of these tabs can be be filled with volume plugins to reduce the tabs in the volumes interface." +msgstr "" + +#: Help.SystemPlugins +msgid "System plugins can change various aspects of the CryptoBox. They may be listed in the main navigation bar (the leftmost part of every page) and/or in the 'System preferences' container. You should never disable the 'Plugin manager'." +msgstr "" diff --git a/v0.3.4.5/plugins/plugin_manager/intl/ur/cryptobox-server-feature-plugin_manager.po b/v0.3.4.5/plugins/plugin_manager/intl/ur/cryptobox-server-feature-plugin_manager.po new file mode 100644 index 0000000..3b194b4 --- /dev/null +++ b/v0.3.4.5/plugins/plugin_manager/intl/ur/cryptobox-server-feature-plugin_manager.po @@ -0,0 +1,90 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-02-07 09:21+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Plugin manager" +msgstr "" + +#: Link +msgid "Plugins" +msgstr "" + +#: Title +msgid "Plugin Manager" +msgstr "" + +#: Title.VolumePlugins +msgid "Volume plugins" +msgstr "" + +#: Title.SystemPlugins +msgid "System plugins" +msgstr "" + +#: Button.SaveSettings +msgid "Save all settings" +msgstr "" + +#: Button.Up +msgid "move up" +msgstr "" + +#: Button.Down +msgid "move down" +msgstr "" + +#: Text.PluginName +msgid "Plugin" +msgstr "" + +#: Text.PluginRank +msgid "Order" +msgstr "" + +#: Text.RequestsAuth +msgid "Requires admin?" +msgstr "" + +#: Text.InMenu +msgid "Main menu" +msgstr "" + +#: Text.InPreferences +msgid "Preferences" +msgstr "" + +#: Text.InVolumeRegister +msgid "Register" +msgstr "" + +#: Text.InVolumeProperties +msgid "Properties" +msgstr "" + +#: Text.WhereVisible +msgid "Where visible?" +msgstr "" + +#: Help.PluginManager +msgid "All features of the CryptoBox are provided by plugins. This makes it possible to extend the CryptoBox easily. Here you may disable some of the available plugins to prevent unwanted user actions. Alternatively you can demand administrative privileges (see 'User manager') to protect dangerous actions from random access. The rightmost column 'order' can be used to change the order of appearance of the plugins. Don't forget to save the settings." +msgstr "" + +#: Help.VolumePlugins +msgid "Volume plugins are used for configuration, activation and generall handling of volumes. 'Register' is the tab-based main interface for volume management which appears if you click on a volume. 'Preferences' is one of these tabs can be be filled with volume plugins to reduce the tabs in the volumes interface." +msgstr "" + +#: Help.SystemPlugins +msgid "System plugins can change various aspects of the CryptoBox. They may be listed in the main navigation bar (the leftmost part of every page) and/or in the 'System preferences' container. You should never disable the 'Plugin manager'." +msgstr "" diff --git a/v0.3.4.5/plugins/plugin_manager/language.hdf b/v0.3.4.5/plugins/plugin_manager/language.hdf new file mode 100644 index 0000000..24ce9d3 --- /dev/null +++ b/v0.3.4.5/plugins/plugin_manager/language.hdf @@ -0,0 +1,32 @@ +Name = Plugin manager +Link = Plugins + +Title = Plugin Manager +Title { + VolumePlugins = Volume plugins + SystemPlugins = System plugins +} + +Button { + SaveSettings = Save all settings + Up = move up + Down = move down +} + +Text { + PluginName = Plugin + PluginRank = Order + RequestsAuth = Requires admin? + InMenu = Main menu + InPreferences = Preferences + InVolumeRegister = Register + InVolumeProperties = Properties + WhereVisible = Where visible? +} + +Help { + PluginManager = All features of the CryptoBox are provided by plugins. This makes it possible to extend the CryptoBox easily. Here you may disable some of the available plugins to prevent unwanted user actions. Alternatively you can demand administrative privileges (see 'User manager') to protect dangerous actions from random access. The rightmost column 'order' can be used to change the order of appearance of the plugins. Don't forget to save the settings. + VolumePlugins = Volume plugins are used for configuration, activation and generall handling of volumes. 'Register' is the tab-based main interface for volume management which appears if you click on a volume. 'Preferences' is one of these tabs can be be filled with volume plugins to reduce the tabs in the volumes interface. + SystemPlugins = System plugins can change various aspects of the CryptoBox. They may be listed in the main navigation bar (the leftmost part of every page) and/or in the 'System preferences' container. You should never disable the 'Plugin manager'. +} + diff --git a/v0.3.4.5/plugins/plugin_manager/plugin_icon.gif b/v0.3.4.5/plugins/plugin_manager/plugin_icon.gif new file mode 100644 index 0000000000000000000000000000000000000000..8d1e41ce5851f3a00560b71f69b3997924fdf161 GIT binary patch literal 2570 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 literal 0 HcmV?d00001 diff --git a/v0.3.4.5/plugins/plugin_manager/plugin_icon.png b/v0.3.4.5/plugins/plugin_manager/plugin_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..50fe0f72cd5748c14fa12a612ca6a6f337c4178a GIT binary patch literal 2753 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 + + + + + + + + starts here ?> + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
" alt="" class="logo" /> checked="checked" />checked="checked" />checked="checked" /> + &x=#volume_plugins"><?cs
+					var:html_escape(Lang.Plugins.plugin_manager.Button.Down) ?> + + &x=#volume_plugins" ><?cs
+					var:html_escape(Lang.Plugins.plugin_manager.Button.Up) ?> + +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
" alt="" class="logo" /> checked="checked" />checked="checked" />checked="checked" /> + &x=#system_plugins"><?cs
+					var:html_escape(Lang.Plugins.plugin_manager.Button.Down) ?> + + &x=#system_plugins" ><?cs
+					var:html_escape(Lang.Plugins.plugin_manager.Button.Up) ?> + +
+ +
+ +

+ + +

+ + + diff --git a/v0.3.4.5/plugins/plugin_manager/plugin_manager.css b/v0.3.4.5/plugins/plugin_manager/plugin_manager.css new file mode 100644 index 0000000..2660497 --- /dev/null +++ b/v0.3.4.5/plugins/plugin_manager/plugin_manager.css @@ -0,0 +1,28 @@ +table.plugin_list { + text-align: center; +} + +table.plugin_list td, table.plugin_list th { + padding-left: 5px; + padding-right: 5px; +} + +table.plugin_list td img { + vertical-align: middle; +} + +table.plugin_list td img.logo { + width: 32px; + height: 32px; +} + +table.plugin_list a img { +moved + border: none; +} + +table.plugin_list td.updown { + /* we have to force the width to more than the double width of one arrow icon */ + width: 60px; +} + diff --git a/v0.3.4.5/plugins/plugin_manager/plugin_manager.py b/v0.3.4.5/plugins/plugin_manager/plugin_manager.py new file mode 100644 index 0000000..09327bd --- /dev/null +++ b/v0.3.4.5/plugins/plugin_manager/plugin_manager.py @@ -0,0 +1,149 @@ +# +# Copyright 2006 sense.lab e.V. +# +# This file is part of the CryptoBox. +# +# The CryptoBox 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 CryptoBox 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 the CryptoBox; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +__revision__ = "$Id" + +import cryptobox.plugins.base +import cryptobox.plugins.manage + + +class plugin_manager(cryptobox.plugins.base.CryptoBoxPlugin): + + plugin_capabilities = [ "system" ] + plugin_visibility = [ "preferences" ] + request_auth = True + rank = 90 + + def do_action(self, store=None, action=None, plugin_name=None, **args): + import re + if plugin_name: + ## check for invalid characters + if re.search(r'\W', plugin_name): return "plugin_list" + plugin_manager = cryptobox.plugins.manage.PluginManager( + self.cbox, self.cbox.prefs["Locations"]["PluginDir"]) + plugin = plugin_manager.get_plugin(plugin_name) + if not plugin: return "plugin_list" + ## take only plugins, that are of the same type as the choosen one + self.plugins = [e for e in plugin_manager.get_plugins() + if e.plugin_capabilities == plugin.plugin_capabilities and \ + e != "volume_props" ] + if action == "up": + self.__move_up(plugin) + elif action == "down": + self.__move_down(plugin) + return "plugin_list" + elif store: + for key in args.keys(): + if key.endswith("_listed"): + if not re.search(r'\W',key): + self.__set_config(key[:-7], args) + else: + self.cbox.log.info("plugin_manager: invalid plugin name (%s)" % \ + str(key[:-7])) + try: + self.cbox.prefs.plugin_conf.write() + self.cbox.log.info("Successfully stored plugin configuration") + except IOError, err_msg: + self.cbox.log.warn("Failed to write plugin configuration: %s" % err_msg) + return "plugin_list" + + + def get_status(self): + plugin_manager = cryptobox.plugins.manage.PluginManager( + self.cbox, self.cbox.prefs["Locations"]["PluginDir"]) + return ":".join([e.get_name() for e in plugin_manager.get_plugins()]) + + + def __sort_plugins(self): + """sort all plugins in the list according to their rank""" + def cmp_func(x,y): + x_rank = x.get_rank() + y_rank = y.get_rank() + if x_rank < y_rank: + return -1 + elif x_rank == y_rank: + return 0 + else: + return 1 + self.plugins.sort(cmp = cmp_func) + + + def __distribute_ranks(self): + """evenly distribute the 'rank' values according to the current order of + the list""" + dist = 100 / (len(self.plugins) - 1) + for (index, pl) in enumerate(self.plugins): + pl.set_rank(dist*index) + try: + self.cbox.prefs.plugin_conf.write() + except IOError: + self.cbox.log.warn("failed to write plugin configuration") + + + def __move_up(self, plugin): + self.__sort_plugins() + try: + index = self.plugins.index(plugin) + ## first elements may not move up + if index == 0: + return + except ValueError: + return + self.plugins.remove(plugin) + self.plugins.insert(index-1, plugin) + self.__distribute_ranks() + + + def __move_down(self, plugin): + self.__sort_plugins() + try: + index = self.plugins.index(plugin) + ## last elements may not move down + if index == len(self.plugins) - 1: + return + except ValueError: + return + self.plugins.remove(plugin) + self.plugins.insert(index+1, plugin) + self.__distribute_ranks() + + + def __set_config(self, name, args): + import re + if not self.cbox.prefs.plugin_conf.has_key(name): + self.cbox.prefs.plugin_conf[name] = {} + setting = self.cbox.prefs.plugin_conf[name] + setting["visibility"] = [] + ## look for "_visible_" values and apply them + pattern = re.compile(r'%s_visible_([\w]+)$' % name) + for key in args.keys(): + if key.startswith(name + "_visible_"): + (vis_type, ) = pattern.match(key).groups() + if vis_type: + setting["visibility"].append(vis_type) + ## the plugin_manager _must_ always be visible + if (self.get_name() == name) and (not setting["visibility"]): + ## reset to default + setting["visibility"] = self.plugin_visibility[:] + if args.has_key("%s_auth" % name): + setting["requestAuth"] = True + else: + setting["requestAuth"] = False + diff --git a/v0.3.4.5/plugins/plugin_manager/tango-go-down.png b/v0.3.4.5/plugins/plugin_manager/tango-go-down.png new file mode 100644 index 0000000000000000000000000000000000000000..7c9b51b7530517923071f9b0fe6f35ae0fb25d0d GIT binary patch literal 883 zcmV-(1C0EMP)RjEPGV_PQ__(-kgE zTsLV_7S7Qc%D|=|>n*Bmsp{Ko}XAf%$mv-FuD;9%eFuLD7v#&&xmWzI$%| zzx&QRHxGEbwOQ|TH4ieLrVk?d1Adqjgwp z-`ZF`nE1mnl!woG_>@N~pFqw}gP0MmZ-bkZa~^rQGQCMZemb)G+3e`q{wwzCs$GRFfHpp@fTZvC94w_VE_FADi z0I0%;sa~YHW$ez5>gI3Dw}i`GN`r)lg!>p7o`cj3W&z;@Iw8t#v6g4Fv}u z(&t`J->vU|znHnQ-Z@Yu=EDHW#s{F5oMczs2en6QYOAWYsVMdQ+1vF?$J{vpAplNL z2@X^epabJbfy(DcU^7SzH8t!x5{o?;`}OinNkR`+Kxw z(Z1QP>8bdWe+5vSBtJ4Zc5+jDTi4|q)0Aqzx{>a&0eYv)GiS5&cLf+aMl{$tbY^&P z^ntnS-{O5noK?8xOHrZyp}pb2%=fcr?T7VxApQ4rA0OL&VAtIB?~qkxU#?zdS?2E_ z>fQJL_>o-yx&Q~?-2C3-k34hm=j983W)`{a@0Ic_;l{MHuY2dm#Yysa1lWHxeC4T$ z=U=)S&jy*LfYn!Q)f|4h_BHv=&HY=p^?W*XjHoF<@o4bq;o^&LCvLg5mfl31p#iv@ z;36T21PM}bDeBHNUVAsxSe}=WZR6Xcfy?>nsoH020(OjVnAtz_q*kl7n}KhM`#K&D7vhWR zC1xr8g{m!~fuT-N6&~F3822WHrF>K + + + +
+ + + + + + + +
+ + icon: shutdown
+ +
+ + icon: reboot
+ +
diff --git a/v0.3.4.5/plugins/shutdown/gnome-reboot.gif b/v0.3.4.5/plugins/shutdown/gnome-reboot.gif new file mode 100644 index 0000000000000000000000000000000000000000..36eb686137c9771b03f53945c9de4c2124ab826f GIT binary patch literal 2225 zcmV;i2u}A$Nk%w1VK4wN0O$Vz009682?YZR4F?Vo2@)6@9v~hc9UmhlB_<>$C?zK; zCMhc@Dl924F)lJQF(o)mH#jyrJ2^Q$KRrJ^Ktew-QE5s`NkdLqE>&|!PE}1$Ofgt? zPf<@ZS$8yAcu`YOQ&dt;Ra`e-d{$UhI$?h}Wr;dxid|n^JZOwsVQ4*RjbUS8Kx~jh zZk8ZE8h#p+q)B_FadU8NbbL#Fr%ZmRUwV&Cf2nVF zesp$oPJpU#cz{rWt8RIPQG%>@d3JMpf>ML6ZG4VXgsypecyWA*RE4iqhOvBodwG6< zR)?~5e~ed%vsj6=S&FqujFV}Txq*$Eij0YBl)7t`yN8dKY?i!)ke!W>jBS^_iIJFYn7(hB zzmSrTaGJn}mYj@~n~;>3cbmMEm6D5=qpF-YkC&g7my~&)zn7VolA5BBo2Y%F!prW6iqNSXqtevH;imJw=rJ{?g$E2pCpQo>k ztjM6Ku#K(Cqo}K_w7I*txwfLd)wsI1 zq`%g)yTiG=xTe9`xV^xq!rHvPyR5_2t;E)@#n-^XzpuvFu*ccL#KE!2+r-Agv&-GZ z$HcVE-nGr&$H~UF&fv+*$jZ#gzs};o(BsX|%f->(&d|-r)8Ww4&&br`(bLe%*5uRG z($v<|)z{R`+2_{S)!5qB+1uFL-P+vV+uh&X-r(Ke;ojNe>fqwv;pE`s<>BP!E_|;^62X4>Fem~?CI<7>h16A@A2*M^6&2R_VM%Z^7QfZ_44%h^Yi%o_W1Pm z`u+L)_y7O@A^sIZa%Ew3Wn>_CX>@2HRA^-&M@dak03rDV0SW;B04x9i001xmFaQ7u z{s8|897wRB!Gj1BDqP60p~Hs|BmM(Gv7*I`7%xg32moI`efsdxqnNIpyn7!(s$8ir zA2t9R0pznslO{U=cmQYq(B>IBHKON|br8UcGql)B*Ta2mm&4|R+!^;SP@kd301OoF3 z8)o!KMi)R*A;lC}^nd~YsL;Y<78U7XL5&z{QeZHuypcv4U0^|m8DwBFMi*Obfkg`d zl%ixVl}&Mj2^Bf?U4p>GaU~X5067L3b9O<+k*L6u3op5lq8$)|V8H^E2?6klCaP${ z29R9^l2kGZ8(7Fd!bSdD0J+7HickW| zDyx8U2qAR<&3;{qDbZTk`b&pu$NFV{6AqD{3 zEI~jok}${+05X_?2O?Mi5XBP!3}FNSRBWN?6=hr-NFZ$l0KgSN03gm80AwQz9h&mj z0TXZF@m?d0_)8HK&06Gd00LYCfW+V20)T6($WUxS=;BdGPQLI04m#ujaHKEEU=vO` z=ae&{CIH0z4LcGRh)Wg3DtrVUp8&81HQ0Ew4Mn^(P0iEP0I<&}xRl8YH@+<47Bs(* z(d@Z0bb-hKQSg%VO~*)6i!S&$EInYZg;E%z&;uJX5Kw>v2spq1@KVcy3ou;Mrg|`t_YyZEO$d=We=f_w-~ke3 zF987dOk;d|!w}O8G~y@ri!7QjA%)1d`%O?|6q#c@>|6t*dfahCqe&H0FfoOu6ge0C z0)PcNbU_VfhyxzdV1`Sn;YYFRUlN$G1!sW)cL)K%J>~%qcA%piC7B0Q0N?>42;m4o zAOaDRz(OXtun8`dLKUh&CU^xfgZYRDO!4}{Q!Ca4eyD0lz>p0K?e9)u$Ih=(+U0grLG!ye3_ z2`}W>2zD&Z14tBt^e%FNER@0p5>Nmfb%>80`l1!=Foh@Bfe9yIgDuG*VGnw+0|4Bi z6ucp#27nH1suZng+ALb3mQZAZ0_prm@DRX&m9})H z4mbbz|4umG5@^Z@CEpHPPizl|96s7Ot!QkTlqraDz20RaFzu6PZN literal 0 HcmV?d00001 diff --git a/v0.3.4.5/plugins/shutdown/gnome-reboot.png b/v0.3.4.5/plugins/shutdown/gnome-reboot.png new file mode 100644 index 0000000000000000000000000000000000000000..1556089ccfb1ae03d2b839fb003e3f52c23306a5 GIT binary patch literal 3752 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 H5)c48|D@+* literal 0 HcmV?d00001 diff --git a/v0.3.4.5/plugins/shutdown/gnome-shutdown.png b/v0.3.4.5/plugins/shutdown/gnome-shutdown.png new file mode 100644 index 0000000000000000000000000000000000000000..244330e964f576ee47f5efee7e9b5c26c605c125 GIT binary patch literal 4532 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 SnSu2H0000Ul5 literal 0 HcmV?d00001 diff --git a/v0.3.4.5/plugins/shutdown/intl/cryptobox-server-feature-shutdown.pot b/v0.3.4.5/plugins/shutdown/intl/cryptobox-server-feature-shutdown.pot new file mode 100644 index 0000000..2c5cc48 --- /dev/null +++ b/v0.3.4.5/plugins/shutdown/intl/cryptobox-server-feature-shutdown.pot @@ -0,0 +1,63 @@ +#: Name +msgid "Shutdown or reboot the computer" +msgstr "" + +#: Link +msgid "Shutdown" +msgstr "" + +#: Title +msgid "Shutdown computer" +msgstr "" + +#: Title.ProgressShutdown +msgid "The CryptoBox is shutting down" +msgstr "" + +#: Title.ProgressReboot +msgid "The CryptoBox is rebooting" +msgstr "" + +#: Button.Shutdown +msgid "Poweroff" +msgstr "" + +#: Button.Reboot +msgid "Reboot" +msgstr "" + +#: Help.Shutdown +msgid "You can poweroff or reboot the CryptoBox server. You should close all open files before." +msgstr "" + +#: SuccessMessage.Shutdown.Title +msgid "Shutting down the system" +msgstr "" + +#: SuccessMessage.Shutdown.Text +msgid "If the computer does not turn off itself within a minute, then you should plug it off manually." +msgstr "" + +#: SuccessMessage.Reboot.Title +msgid "Rebooting the system" +msgstr "" + +#: SuccessMessage.Reboot.Text +msgid "This may take a while (depending on your hardware) ..." +msgstr "" + +#: WarningMessage.ShutdownFailed.Title +msgid "Shutdown failed" +msgstr "" + +#: WarningMessage.ShutdownFailed.Text +msgid "Shutting down of the system failed for some reason - sorry!" +msgstr "" + +#: WarningMessage.RebootFailed.Title +msgid "Reboot failed" +msgstr "" + +#: WarningMessage.RebootFailed.Text +msgid "Reboot of the system failed for some reason - sorry!" +msgstr "" diff --git a/v0.3.4.5/plugins/shutdown/intl/cs/cryptobox-server-feature-shutdown.po b/v0.3.4.5/plugins/shutdown/intl/cs/cryptobox-server-feature-shutdown.po new file mode 100644 index 0000000..dc8e598 --- /dev/null +++ b/v0.3.4.5/plugins/shutdown/intl/cs/cryptobox-server-feature-shutdown.po @@ -0,0 +1,78 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:02+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Shutdown or reboot the computer" +msgstr "" + +#: Link +msgid "Shutdown" +msgstr "" + +#: Title +msgid "Shutdown computer" +msgstr "" + +#: Title.ProgressShutdown +msgid "The CryptoBox is shutting down" +msgstr "" + +#: Title.ProgressReboot +msgid "The CryptoBox is rebooting" +msgstr "" + +#: Button.Shutdown +msgid "Poweroff" +msgstr "" + +#: Button.Reboot +msgid "Reboot" +msgstr "" + +#: Help.Shutdown +msgid "You can poweroff or reboot the CryptoBox server. You should close all open files before." +msgstr "" + +#: SuccessMessage.Shutdown.Title +msgid "Shutting down the system" +msgstr "" + +#: SuccessMessage.Shutdown.Text +msgid "If the computer does not turn off itself within a minute, then you should plug it off manually." +msgstr "" + +#: SuccessMessage.Reboot.Title +msgid "Rebooting the system" +msgstr "" + +#: SuccessMessage.Reboot.Text +msgid "This may take a while (depending on your hardware) ..." +msgstr "" + +#: WarningMessage.ShutdownFailed.Title +msgid "Shutdown failed" +msgstr "" + +#: WarningMessage.ShutdownFailed.Text +msgid "Shutting down of the system failed for some reason - sorry!" +msgstr "" + +#: WarningMessage.RebootFailed.Title +msgid "Reboot failed" +msgstr "" + +#: WarningMessage.RebootFailed.Text +msgid "Reboot of the system failed for some reason - sorry!" +msgstr "" diff --git a/v0.3.4.5/plugins/shutdown/intl/da/cryptobox-server-feature-shutdown.po b/v0.3.4.5/plugins/shutdown/intl/da/cryptobox-server-feature-shutdown.po new file mode 100644 index 0000000..dc8e598 --- /dev/null +++ b/v0.3.4.5/plugins/shutdown/intl/da/cryptobox-server-feature-shutdown.po @@ -0,0 +1,78 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:02+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Shutdown or reboot the computer" +msgstr "" + +#: Link +msgid "Shutdown" +msgstr "" + +#: Title +msgid "Shutdown computer" +msgstr "" + +#: Title.ProgressShutdown +msgid "The CryptoBox is shutting down" +msgstr "" + +#: Title.ProgressReboot +msgid "The CryptoBox is rebooting" +msgstr "" + +#: Button.Shutdown +msgid "Poweroff" +msgstr "" + +#: Button.Reboot +msgid "Reboot" +msgstr "" + +#: Help.Shutdown +msgid "You can poweroff or reboot the CryptoBox server. You should close all open files before." +msgstr "" + +#: SuccessMessage.Shutdown.Title +msgid "Shutting down the system" +msgstr "" + +#: SuccessMessage.Shutdown.Text +msgid "If the computer does not turn off itself within a minute, then you should plug it off manually." +msgstr "" + +#: SuccessMessage.Reboot.Title +msgid "Rebooting the system" +msgstr "" + +#: SuccessMessage.Reboot.Text +msgid "This may take a while (depending on your hardware) ..." +msgstr "" + +#: WarningMessage.ShutdownFailed.Title +msgid "Shutdown failed" +msgstr "" + +#: WarningMessage.ShutdownFailed.Text +msgid "Shutting down of the system failed for some reason - sorry!" +msgstr "" + +#: WarningMessage.RebootFailed.Title +msgid "Reboot failed" +msgstr "" + +#: WarningMessage.RebootFailed.Text +msgid "Reboot of the system failed for some reason - sorry!" +msgstr "" diff --git a/v0.3.4.5/plugins/shutdown/intl/de/cryptobox-server-feature-shutdown.po b/v0.3.4.5/plugins/shutdown/intl/de/cryptobox-server-feature-shutdown.po new file mode 100644 index 0000000..d1ea32a --- /dev/null +++ b/v0.3.4.5/plugins/shutdown/intl/de/cryptobox-server-feature-shutdown.po @@ -0,0 +1,77 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:02+0100\n" +"PO-Revision-Date: 2006-12-17 15:24+0100\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Shutdown or reboot the computer" +msgstr "Computer ausschalten oder neustarten" + +#: Link +msgid "Shutdown" +msgstr "Ausschalten" + +#: Title +msgid "Shutdown computer" +msgstr "Computer ausschalten" + +#: Title.ProgressShutdown +msgid "The CryptoBox is shutting down" +msgstr "DIe CryptoBox schaltet sich gerade aus." + +#: Title.ProgressReboot +msgid "The CryptoBox is rebooting" +msgstr "Die CryptoBox startet neu" + +#: Button.Shutdown +msgid "Poweroff" +msgstr "Ausschalten" + +#: Button.Reboot +msgid "Reboot" +msgstr "Neustarten" + +#: Help.Shutdown +msgid "You can poweroff or reboot the CryptoBox server. You should close all open files before." +msgstr "Du kannst den CryptoBox-Server abschalten oder neustarten. Schliesse vorher alle offenen Dateien." + +#: SuccessMessage.Shutdown.Title +msgid "Shutting down the system" +msgstr "Abschaltung des Systems" + +#: SuccessMessage.Shutdown.Text +msgid "If the computer does not turn off itself within a minute, then you should plug it off manually." +msgstr "Falls der Computer sich nicht innerhalb der nächsten Minuten ausschaltet, dann solltest du es per Hand abschalten." + +#: SuccessMessage.Reboot.Title +msgid "Rebooting the system" +msgstr "Neustart des System" + +#: SuccessMessage.Reboot.Text +msgid "This may take a while (depending on your hardware) ..." +msgstr "Dies kann (abhängig von deinem Rechner) eine Weile dauern ..." + +#: WarningMessage.ShutdownFailed.Title +msgid "Shutdown failed" +msgstr "Abschaltung schlug fehl" + +#: WarningMessage.ShutdownFailed.Text +msgid "Shutting down of the system failed for some reason - sorry!" +msgstr "Aus unklaren Gründen schlug die Abschaltung fehl!" + +#: WarningMessage.RebootFailed.Title +msgid "Reboot failed" +msgstr "Neustart fehlgeschlagen" + +#: WarningMessage.RebootFailed.Text +msgid "Reboot of the system failed for some reason - sorry!" +msgstr "Aus unklaren Gründen schlug der Neustart fehl!" diff --git a/v0.3.4.5/plugins/shutdown/intl/en/cryptobox-server-feature-shutdown.po b/v0.3.4.5/plugins/shutdown/intl/en/cryptobox-server-feature-shutdown.po new file mode 100644 index 0000000..2199325 --- /dev/null +++ b/v0.3.4.5/plugins/shutdown/intl/en/cryptobox-server-feature-shutdown.po @@ -0,0 +1,63 @@ +#: Name +msgid "Shutdown or reboot the computer" +msgstr "Shutdown or reboot the computer" + +#: Link +msgid "Shutdown" +msgstr "Shutdown" + +#: Title +msgid "Shutdown computer" +msgstr "Shutdown computer" + +#: Title.ProgressShutdown +msgid "The CryptoBox is shutting down" +msgstr "The CryptoBox is shutting down" + +#: Title.ProgressReboot +msgid "The CryptoBox is rebooting" +msgstr "The CryptoBox is rebooting" + +#: Button.Shutdown +msgid "Poweroff" +msgstr "Poweroff" + +#: Button.Reboot +msgid "Reboot" +msgstr "Reboot" + +#: Help.Shutdown +msgid "You can poweroff or reboot the CryptoBox server. You should close all open files before." +msgstr "You can poweroff or reboot the CryptoBox server. You should close all open files before." + +#: SuccessMessage.Shutdown.Title +msgid "Shutting down the system" +msgstr "Shutting down the system" + +#: SuccessMessage.Shutdown.Text +msgid "If the computer does not turn off itself within a minute, then you should plug it off manually." +msgstr "If the computer does not turn off itself within a minute, then you should plug it off manually." + +#: SuccessMessage.Reboot.Title +msgid "Rebooting the system" +msgstr "Rebooting the system" + +#: SuccessMessage.Reboot.Text +msgid "This may take a while (depending on your hardware) ..." +msgstr "This may take a while (depending on your hardware) ..." + +#: WarningMessage.ShutdownFailed.Title +msgid "Shutdown failed" +msgstr "Shutdown failed" + +#: WarningMessage.ShutdownFailed.Text +msgid "Shutting down of the system failed for some reason - sorry!" +msgstr "Shutting down of the system failed for some reason - sorry!" + +#: WarningMessage.RebootFailed.Title +msgid "Reboot failed" +msgstr "Reboot failed" + +#: WarningMessage.RebootFailed.Text +msgid "Reboot of the system failed for some reason - sorry!" +msgstr "Reboot of the system failed for some reason - sorry!" diff --git a/v0.3.4.5/plugins/shutdown/intl/es/cryptobox-server-feature-shutdown.po b/v0.3.4.5/plugins/shutdown/intl/es/cryptobox-server-feature-shutdown.po new file mode 100644 index 0000000..dc8e598 --- /dev/null +++ b/v0.3.4.5/plugins/shutdown/intl/es/cryptobox-server-feature-shutdown.po @@ -0,0 +1,78 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:02+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Shutdown or reboot the computer" +msgstr "" + +#: Link +msgid "Shutdown" +msgstr "" + +#: Title +msgid "Shutdown computer" +msgstr "" + +#: Title.ProgressShutdown +msgid "The CryptoBox is shutting down" +msgstr "" + +#: Title.ProgressReboot +msgid "The CryptoBox is rebooting" +msgstr "" + +#: Button.Shutdown +msgid "Poweroff" +msgstr "" + +#: Button.Reboot +msgid "Reboot" +msgstr "" + +#: Help.Shutdown +msgid "You can poweroff or reboot the CryptoBox server. You should close all open files before." +msgstr "" + +#: SuccessMessage.Shutdown.Title +msgid "Shutting down the system" +msgstr "" + +#: SuccessMessage.Shutdown.Text +msgid "If the computer does not turn off itself within a minute, then you should plug it off manually." +msgstr "" + +#: SuccessMessage.Reboot.Title +msgid "Rebooting the system" +msgstr "" + +#: SuccessMessage.Reboot.Text +msgid "This may take a while (depending on your hardware) ..." +msgstr "" + +#: WarningMessage.ShutdownFailed.Title +msgid "Shutdown failed" +msgstr "" + +#: WarningMessage.ShutdownFailed.Text +msgid "Shutting down of the system failed for some reason - sorry!" +msgstr "" + +#: WarningMessage.RebootFailed.Title +msgid "Reboot failed" +msgstr "" + +#: WarningMessage.RebootFailed.Text +msgid "Reboot of the system failed for some reason - sorry!" +msgstr "" diff --git a/v0.3.4.5/plugins/shutdown/intl/fi/cryptobox-server-feature-shutdown.po b/v0.3.4.5/plugins/shutdown/intl/fi/cryptobox-server-feature-shutdown.po new file mode 100644 index 0000000..dc8e598 --- /dev/null +++ b/v0.3.4.5/plugins/shutdown/intl/fi/cryptobox-server-feature-shutdown.po @@ -0,0 +1,78 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:02+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Shutdown or reboot the computer" +msgstr "" + +#: Link +msgid "Shutdown" +msgstr "" + +#: Title +msgid "Shutdown computer" +msgstr "" + +#: Title.ProgressShutdown +msgid "The CryptoBox is shutting down" +msgstr "" + +#: Title.ProgressReboot +msgid "The CryptoBox is rebooting" +msgstr "" + +#: Button.Shutdown +msgid "Poweroff" +msgstr "" + +#: Button.Reboot +msgid "Reboot" +msgstr "" + +#: Help.Shutdown +msgid "You can poweroff or reboot the CryptoBox server. You should close all open files before." +msgstr "" + +#: SuccessMessage.Shutdown.Title +msgid "Shutting down the system" +msgstr "" + +#: SuccessMessage.Shutdown.Text +msgid "If the computer does not turn off itself within a minute, then you should plug it off manually." +msgstr "" + +#: SuccessMessage.Reboot.Title +msgid "Rebooting the system" +msgstr "" + +#: SuccessMessage.Reboot.Text +msgid "This may take a while (depending on your hardware) ..." +msgstr "" + +#: WarningMessage.ShutdownFailed.Title +msgid "Shutdown failed" +msgstr "" + +#: WarningMessage.ShutdownFailed.Text +msgid "Shutting down of the system failed for some reason - sorry!" +msgstr "" + +#: WarningMessage.RebootFailed.Title +msgid "Reboot failed" +msgstr "" + +#: WarningMessage.RebootFailed.Text +msgid "Reboot of the system failed for some reason - sorry!" +msgstr "" diff --git a/v0.3.4.5/plugins/shutdown/intl/fr/cryptobox-server-feature-shutdown.po b/v0.3.4.5/plugins/shutdown/intl/fr/cryptobox-server-feature-shutdown.po new file mode 100644 index 0000000..f288fab --- /dev/null +++ b/v0.3.4.5/plugins/shutdown/intl/fr/cryptobox-server-feature-shutdown.po @@ -0,0 +1,77 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:02+0100\n" +"PO-Revision-Date: 2006-12-20 21:03+0100\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Shutdown or reboot the computer" +msgstr "" + +#: Link +msgid "Shutdown" +msgstr "" + +#: Title +msgid "Shutdown computer" +msgstr "" + +#: Title.ProgressShutdown +msgid "The CryptoBox is shutting down" +msgstr "" + +#: Title.ProgressReboot +msgid "The CryptoBox is rebooting" +msgstr "" + +#: Button.Shutdown +msgid "Poweroff" +msgstr "Arrêt" + +#: Button.Reboot +msgid "Reboot" +msgstr "Redémarrage" + +#: Help.Shutdown +msgid "You can poweroff or reboot the CryptoBox server. You should close all open files before." +msgstr "" + +#: SuccessMessage.Shutdown.Title +msgid "Shutting down the system" +msgstr "" + +#: SuccessMessage.Shutdown.Text +msgid "If the computer does not turn off itself within a minute, then you should plug it off manually." +msgstr "" + +#: SuccessMessage.Reboot.Title +msgid "Rebooting the system" +msgstr "" + +#: SuccessMessage.Reboot.Text +msgid "This may take a while (depending on your hardware) ..." +msgstr "" + +#: WarningMessage.ShutdownFailed.Title +msgid "Shutdown failed" +msgstr "" + +#: WarningMessage.ShutdownFailed.Text +msgid "Shutting down of the system failed for some reason - sorry!" +msgstr "" + +#: WarningMessage.RebootFailed.Title +msgid "Reboot failed" +msgstr "" + +#: WarningMessage.RebootFailed.Text +msgid "Reboot of the system failed for some reason - sorry!" +msgstr "" diff --git a/v0.3.4.5/plugins/shutdown/intl/hu/cryptobox-server-feature-shutdown.po b/v0.3.4.5/plugins/shutdown/intl/hu/cryptobox-server-feature-shutdown.po new file mode 100644 index 0000000..dc8e598 --- /dev/null +++ b/v0.3.4.5/plugins/shutdown/intl/hu/cryptobox-server-feature-shutdown.po @@ -0,0 +1,78 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:02+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Shutdown or reboot the computer" +msgstr "" + +#: Link +msgid "Shutdown" +msgstr "" + +#: Title +msgid "Shutdown computer" +msgstr "" + +#: Title.ProgressShutdown +msgid "The CryptoBox is shutting down" +msgstr "" + +#: Title.ProgressReboot +msgid "The CryptoBox is rebooting" +msgstr "" + +#: Button.Shutdown +msgid "Poweroff" +msgstr "" + +#: Button.Reboot +msgid "Reboot" +msgstr "" + +#: Help.Shutdown +msgid "You can poweroff or reboot the CryptoBox server. You should close all open files before." +msgstr "" + +#: SuccessMessage.Shutdown.Title +msgid "Shutting down the system" +msgstr "" + +#: SuccessMessage.Shutdown.Text +msgid "If the computer does not turn off itself within a minute, then you should plug it off manually." +msgstr "" + +#: SuccessMessage.Reboot.Title +msgid "Rebooting the system" +msgstr "" + +#: SuccessMessage.Reboot.Text +msgid "This may take a while (depending on your hardware) ..." +msgstr "" + +#: WarningMessage.ShutdownFailed.Title +msgid "Shutdown failed" +msgstr "" + +#: WarningMessage.ShutdownFailed.Text +msgid "Shutting down of the system failed for some reason - sorry!" +msgstr "" + +#: WarningMessage.RebootFailed.Title +msgid "Reboot failed" +msgstr "" + +#: WarningMessage.RebootFailed.Text +msgid "Reboot of the system failed for some reason - sorry!" +msgstr "" diff --git a/v0.3.4.5/plugins/shutdown/intl/it/cryptobox-server-feature-shutdown.po b/v0.3.4.5/plugins/shutdown/intl/it/cryptobox-server-feature-shutdown.po new file mode 100644 index 0000000..ce19b03 --- /dev/null +++ b/v0.3.4.5/plugins/shutdown/intl/it/cryptobox-server-feature-shutdown.po @@ -0,0 +1,77 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:02+0100\n" +"PO-Revision-Date: 2007-03-20 15:47+0100\n" +"Last-Translator: Fabrizio Tarizzo \n" +"Language-Team: Italian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Shutdown or reboot the computer" +msgstr "Arresta o riavvia il sistema" + +#: Link +msgid "Shutdown" +msgstr "Arresta" + +#: Title +msgid "Shutdown computer" +msgstr "Arresta il sistema" + +#: Title.ProgressShutdown +msgid "The CryptoBox is shutting down" +msgstr "La CryptoBox è in fase di arresto" + +#: Title.ProgressReboot +msgid "The CryptoBox is rebooting" +msgstr "La CryptoBox è in fase di riavvio" + +#: Button.Shutdown +msgid "Poweroff" +msgstr "Spegnimento" + +#: Button.Reboot +msgid "Reboot" +msgstr "Riavvio" + +#: Help.Shutdown +msgid "You can poweroff or reboot the CryptoBox server. You should close all open files before." +msgstr "È possibile spegnere o riavviare la CryptoBox. È necessario chiudere tutti i file aperti prima di eseguire l'operazione." + +#: SuccessMessage.Shutdown.Title +msgid "Shutting down the system" +msgstr "Arresto del sistema in corso" + +#: SuccessMessage.Shutdown.Text +msgid "If the computer does not turn off itself within a minute, then you should plug it off manually." +msgstr "Se il computer non si spegna automaticamente entro un minuto, è possibile scollegare l'alimentazione manualmente." + +#: SuccessMessage.Reboot.Title +msgid "Rebooting the system" +msgstr "Riavvio del sistema in corso" + +#: SuccessMessage.Reboot.Text +msgid "This may take a while (depending on your hardware) ..." +msgstr "Questa operazione potrebbe richiedere un po' di tempo (a seconda dell'hardware) ..." + +#: WarningMessage.ShutdownFailed.Title +msgid "Shutdown failed" +msgstr "Spegnimento fallito" + +#: WarningMessage.ShutdownFailed.Text +msgid "Shutting down of the system failed for some reason - sorry!" +msgstr "Lo spegnimento del sistema è fallito." + +#: WarningMessage.RebootFailed.Title +msgid "Reboot failed" +msgstr "Riavvio fallito" + +#: WarningMessage.RebootFailed.Text +msgid "Reboot of the system failed for some reason - sorry!" +msgstr "Il riavvio del sistema è fallito." diff --git a/v0.3.4.5/plugins/shutdown/intl/ja/cryptobox-server-feature-shutdown.po b/v0.3.4.5/plugins/shutdown/intl/ja/cryptobox-server-feature-shutdown.po new file mode 100644 index 0000000..092ce4d --- /dev/null +++ b/v0.3.4.5/plugins/shutdown/intl/ja/cryptobox-server-feature-shutdown.po @@ -0,0 +1,77 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:02+0100\n" +"PO-Revision-Date: 2007-02-26 03:40+0100\n" +"Last-Translator: kinneko \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Shutdown or reboot the computer" +msgstr "コンピュータの電源断もしくは再起動" + +#: Link +msgid "Shutdown" +msgstr "電源断" + +#: Title +msgid "Shutdown computer" +msgstr "コンピュータの電源を切る" + +#: Title.ProgressShutdown +msgid "The CryptoBox is shutting down" +msgstr "クリプトボックスは電源を切っています" + +#: Title.ProgressReboot +msgid "The CryptoBox is rebooting" +msgstr "クリプトボックスは再起動中です" + +#: Button.Shutdown +msgid "Poweroff" +msgstr "電源を切る" + +#: Button.Reboot +msgid "Reboot" +msgstr "再起動" + +#: Help.Shutdown +msgid "You can poweroff or reboot the CryptoBox server. You should close all open files before." +msgstr "クリプトボックスの電源を切ったり、再起動することができます。操作を行う前に、開いているファイルがあれば、すべて閉じてください。" + +#: SuccessMessage.Shutdown.Title +msgid "Shutting down the system" +msgstr "システムの電源を切っています" + +#: SuccessMessage.Shutdown.Text +msgid "If the computer does not turn off itself within a minute, then you should plug it off manually." +msgstr "もし、しばらくたってもコンピュータの電源が切れない場合は、手動で電源を落としてください。" + +#: SuccessMessage.Reboot.Title +msgid "Rebooting the system" +msgstr "システムの再起動中" + +#: SuccessMessage.Reboot.Text +msgid "This may take a while (depending on your hardware) ..." +msgstr "少し時間がかかるかもしれません(あなたのハードウエアに依存します)..." + +#: WarningMessage.ShutdownFailed.Title +msgid "Shutdown failed" +msgstr "電源断に失敗しました" + +#: WarningMessage.ShutdownFailed.Text +msgid "Shutting down of the system failed for some reason - sorry!" +msgstr "なんらかの理由によって、システムの電源を切るのに失敗しました。" + +#: WarningMessage.RebootFailed.Title +msgid "Reboot failed" +msgstr "再起動に失敗しました" + +#: WarningMessage.RebootFailed.Text +msgid "Reboot of the system failed for some reason - sorry!" +msgstr "なんらかの理由によって、システムの再起動に失敗しました。" diff --git a/v0.3.4.5/plugins/shutdown/intl/nl/cryptobox-server-feature-shutdown.po b/v0.3.4.5/plugins/shutdown/intl/nl/cryptobox-server-feature-shutdown.po new file mode 100644 index 0000000..dc8e598 --- /dev/null +++ b/v0.3.4.5/plugins/shutdown/intl/nl/cryptobox-server-feature-shutdown.po @@ -0,0 +1,78 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:02+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Shutdown or reboot the computer" +msgstr "" + +#: Link +msgid "Shutdown" +msgstr "" + +#: Title +msgid "Shutdown computer" +msgstr "" + +#: Title.ProgressShutdown +msgid "The CryptoBox is shutting down" +msgstr "" + +#: Title.ProgressReboot +msgid "The CryptoBox is rebooting" +msgstr "" + +#: Button.Shutdown +msgid "Poweroff" +msgstr "" + +#: Button.Reboot +msgid "Reboot" +msgstr "" + +#: Help.Shutdown +msgid "You can poweroff or reboot the CryptoBox server. You should close all open files before." +msgstr "" + +#: SuccessMessage.Shutdown.Title +msgid "Shutting down the system" +msgstr "" + +#: SuccessMessage.Shutdown.Text +msgid "If the computer does not turn off itself within a minute, then you should plug it off manually." +msgstr "" + +#: SuccessMessage.Reboot.Title +msgid "Rebooting the system" +msgstr "" + +#: SuccessMessage.Reboot.Text +msgid "This may take a while (depending on your hardware) ..." +msgstr "" + +#: WarningMessage.ShutdownFailed.Title +msgid "Shutdown failed" +msgstr "" + +#: WarningMessage.ShutdownFailed.Text +msgid "Shutting down of the system failed for some reason - sorry!" +msgstr "" + +#: WarningMessage.RebootFailed.Title +msgid "Reboot failed" +msgstr "" + +#: WarningMessage.RebootFailed.Text +msgid "Reboot of the system failed for some reason - sorry!" +msgstr "" diff --git a/v0.3.4.5/plugins/shutdown/intl/pl/cryptobox-server-feature-shutdown.po b/v0.3.4.5/plugins/shutdown/intl/pl/cryptobox-server-feature-shutdown.po new file mode 100644 index 0000000..5d39618 --- /dev/null +++ b/v0.3.4.5/plugins/shutdown/intl/pl/cryptobox-server-feature-shutdown.po @@ -0,0 +1,77 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-04-01 15:56+0200\n" +"PO-Revision-Date: 2007-03-29 20:50+0200\n" +"Last-Translator: Andrzej S. Kaznowski \n" +"Language-Team: POLSKI \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Shutdown or reboot the computer" +msgstr "Wyłącz lub zresetuj komputer" + +#: Link +msgid "Shutdown" +msgstr "Wyłącz" + +#: Title +msgid "Shutdown computer" +msgstr "Wyłącz komputer" + +#: Title.ProgressShutdown +msgid "The CryptoBox is shutting down" +msgstr "Wyłączenie systemu CryptoBox" + +#: Title.ProgressReboot +msgid "The CryptoBox is rebooting" +msgstr "Zresetowanie systemu CryptoBox" + +#: Button.Shutdown +msgid "Poweroff" +msgstr "Wyłącz" + +#: Button.Reboot +msgid "Reboot" +msgstr "Zresetuj" + +#: Help.Shutdown +msgid "You can poweroff or reboot the CryptoBox server. You should close all open files before." +msgstr "Możesz wyłączyć lub zresetować serwer CryptoBox. Wcześniej zamknij wszystkie otwarte pliki." + +#: SuccessMessage.Shutdown.Title +msgid "Shutting down the system" +msgstr "Wyłączenie systemu" + +#: SuccessMessage.Shutdown.Text +msgid "If the computer does not turn off itself within a minute, then you should plug it off manually." +msgstr "Jeśli komputer sam się nie wyłączy w ciągu minuty wyciągnij wtyczkę z kontaktu. " + +#: SuccessMessage.Reboot.Title +msgid "Rebooting the system" +msgstr "Zresetowanie systemu" + +#: SuccessMessage.Reboot.Text +msgid "This may take a while (depending on your hardware) ..." +msgstr "W zależności od komputera może to dłużej potrwać." + +#: WarningMessage.ShutdownFailed.Title +msgid "Shutdown failed" +msgstr "Wyłączenie nie powiodło się" + +#: WarningMessage.ShutdownFailed.Text +msgid "Shutting down of the system failed for some reason - sorry!" +msgstr "Zamknięcie systemu nie powiodło się - przepraszamy!" + +#: WarningMessage.RebootFailed.Title +msgid "Reboot failed" +msgstr "Zresetowanie nie powiodło się" + +#: WarningMessage.RebootFailed.Text +msgid "Reboot of the system failed for some reason - sorry!" +msgstr "Zresetowanie systemu nie powiodło się - przepraszamy!" diff --git a/v0.3.4.5/plugins/shutdown/intl/pt/cryptobox-server-feature-shutdown.po b/v0.3.4.5/plugins/shutdown/intl/pt/cryptobox-server-feature-shutdown.po new file mode 100644 index 0000000..dc8e598 --- /dev/null +++ b/v0.3.4.5/plugins/shutdown/intl/pt/cryptobox-server-feature-shutdown.po @@ -0,0 +1,78 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:02+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Shutdown or reboot the computer" +msgstr "" + +#: Link +msgid "Shutdown" +msgstr "" + +#: Title +msgid "Shutdown computer" +msgstr "" + +#: Title.ProgressShutdown +msgid "The CryptoBox is shutting down" +msgstr "" + +#: Title.ProgressReboot +msgid "The CryptoBox is rebooting" +msgstr "" + +#: Button.Shutdown +msgid "Poweroff" +msgstr "" + +#: Button.Reboot +msgid "Reboot" +msgstr "" + +#: Help.Shutdown +msgid "You can poweroff or reboot the CryptoBox server. You should close all open files before." +msgstr "" + +#: SuccessMessage.Shutdown.Title +msgid "Shutting down the system" +msgstr "" + +#: SuccessMessage.Shutdown.Text +msgid "If the computer does not turn off itself within a minute, then you should plug it off manually." +msgstr "" + +#: SuccessMessage.Reboot.Title +msgid "Rebooting the system" +msgstr "" + +#: SuccessMessage.Reboot.Text +msgid "This may take a while (depending on your hardware) ..." +msgstr "" + +#: WarningMessage.ShutdownFailed.Title +msgid "Shutdown failed" +msgstr "" + +#: WarningMessage.ShutdownFailed.Text +msgid "Shutting down of the system failed for some reason - sorry!" +msgstr "" + +#: WarningMessage.RebootFailed.Title +msgid "Reboot failed" +msgstr "" + +#: WarningMessage.RebootFailed.Text +msgid "Reboot of the system failed for some reason - sorry!" +msgstr "" diff --git a/v0.3.4.5/plugins/shutdown/intl/ru/cryptobox-server-feature-shutdown.po b/v0.3.4.5/plugins/shutdown/intl/ru/cryptobox-server-feature-shutdown.po new file mode 100644 index 0000000..dc8e598 --- /dev/null +++ b/v0.3.4.5/plugins/shutdown/intl/ru/cryptobox-server-feature-shutdown.po @@ -0,0 +1,78 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:02+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Shutdown or reboot the computer" +msgstr "" + +#: Link +msgid "Shutdown" +msgstr "" + +#: Title +msgid "Shutdown computer" +msgstr "" + +#: Title.ProgressShutdown +msgid "The CryptoBox is shutting down" +msgstr "" + +#: Title.ProgressReboot +msgid "The CryptoBox is rebooting" +msgstr "" + +#: Button.Shutdown +msgid "Poweroff" +msgstr "" + +#: Button.Reboot +msgid "Reboot" +msgstr "" + +#: Help.Shutdown +msgid "You can poweroff or reboot the CryptoBox server. You should close all open files before." +msgstr "" + +#: SuccessMessage.Shutdown.Title +msgid "Shutting down the system" +msgstr "" + +#: SuccessMessage.Shutdown.Text +msgid "If the computer does not turn off itself within a minute, then you should plug it off manually." +msgstr "" + +#: SuccessMessage.Reboot.Title +msgid "Rebooting the system" +msgstr "" + +#: SuccessMessage.Reboot.Text +msgid "This may take a while (depending on your hardware) ..." +msgstr "" + +#: WarningMessage.ShutdownFailed.Title +msgid "Shutdown failed" +msgstr "" + +#: WarningMessage.ShutdownFailed.Text +msgid "Shutting down of the system failed for some reason - sorry!" +msgstr "" + +#: WarningMessage.RebootFailed.Title +msgid "Reboot failed" +msgstr "" + +#: WarningMessage.RebootFailed.Text +msgid "Reboot of the system failed for some reason - sorry!" +msgstr "" diff --git a/v0.3.4.5/plugins/shutdown/intl/sl/cryptobox-server-feature-shutdown.po b/v0.3.4.5/plugins/shutdown/intl/sl/cryptobox-server-feature-shutdown.po new file mode 100644 index 0000000..714d8b0 --- /dev/null +++ b/v0.3.4.5/plugins/shutdown/intl/sl/cryptobox-server-feature-shutdown.po @@ -0,0 +1,77 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:02+0100\n" +"PO-Revision-Date: 2007-01-09 12:16+0100\n" +"Last-Translator: tenzin \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Shutdown or reboot the computer" +msgstr "Ugasni ali ponovno zaženi računalnik" + +#: Link +msgid "Shutdown" +msgstr "Ugasni" + +#: Title +msgid "Shutdown computer" +msgstr "Ugasni računalnik" + +#: Title.ProgressShutdown +msgid "The CryptoBox is shutting down" +msgstr "The Cryptobox se ugaša" + +#: Title.ProgressReboot +msgid "The CryptoBox is rebooting" +msgstr "The Cryptobox se ponovno zaganja" + +#: Button.Shutdown +msgid "Poweroff" +msgstr "Ugasni" + +#: Button.Reboot +msgid "Reboot" +msgstr "Ponovni zagon" + +#: Help.Shutdown +msgid "You can poweroff or reboot the CryptoBox server. You should close all open files before." +msgstr "Lahko ugasnete ali ponovno zaženete the CryptoBox server. Predtem zaprite vse odprte dokumente." + +#: SuccessMessage.Shutdown.Title +msgid "Shutting down the system" +msgstr "Omrežje se ugaša." + +#: SuccessMessage.Shutdown.Text +msgid "If the computer does not turn off itself within a minute, then you should plug it off manually." +msgstr "V kolikor se računalnik ne ugasne avtomatično v roku ene minute, ga morate ugasniti ročno. " + +#: SuccessMessage.Reboot.Title +msgid "Rebooting the system" +msgstr "Sistem se ponovno zaganja" + +#: SuccessMessage.Reboot.Text +msgid "This may take a while (depending on your hardware) ..." +msgstr "Tole pa lahko malce traja (odvisno od vaše strojne opreme)..." + +#: WarningMessage.ShutdownFailed.Title +msgid "Shutdown failed" +msgstr "Neuspela ustavitev" + +#: WarningMessage.ShutdownFailed.Text +msgid "Shutting down of the system failed for some reason - sorry!" +msgstr "oprostite, izključitev sistema ni uspela." + +#: WarningMessage.RebootFailed.Title +msgid "Reboot failed" +msgstr "Ponovni zagon ni uspel." + +#: WarningMessage.RebootFailed.Text +msgid "Reboot of the system failed for some reason - sorry!" +msgstr "Oprostite - ponovni zagon sistema, zaradi nekega vzroka žal ni uspel." diff --git a/v0.3.4.5/plugins/shutdown/intl/sv/cryptobox-server-feature-shutdown.po b/v0.3.4.5/plugins/shutdown/intl/sv/cryptobox-server-feature-shutdown.po new file mode 100644 index 0000000..dc8e598 --- /dev/null +++ b/v0.3.4.5/plugins/shutdown/intl/sv/cryptobox-server-feature-shutdown.po @@ -0,0 +1,78 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:02+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Shutdown or reboot the computer" +msgstr "" + +#: Link +msgid "Shutdown" +msgstr "" + +#: Title +msgid "Shutdown computer" +msgstr "" + +#: Title.ProgressShutdown +msgid "The CryptoBox is shutting down" +msgstr "" + +#: Title.ProgressReboot +msgid "The CryptoBox is rebooting" +msgstr "" + +#: Button.Shutdown +msgid "Poweroff" +msgstr "" + +#: Button.Reboot +msgid "Reboot" +msgstr "" + +#: Help.Shutdown +msgid "You can poweroff or reboot the CryptoBox server. You should close all open files before." +msgstr "" + +#: SuccessMessage.Shutdown.Title +msgid "Shutting down the system" +msgstr "" + +#: SuccessMessage.Shutdown.Text +msgid "If the computer does not turn off itself within a minute, then you should plug it off manually." +msgstr "" + +#: SuccessMessage.Reboot.Title +msgid "Rebooting the system" +msgstr "" + +#: SuccessMessage.Reboot.Text +msgid "This may take a while (depending on your hardware) ..." +msgstr "" + +#: WarningMessage.ShutdownFailed.Title +msgid "Shutdown failed" +msgstr "" + +#: WarningMessage.ShutdownFailed.Text +msgid "Shutting down of the system failed for some reason - sorry!" +msgstr "" + +#: WarningMessage.RebootFailed.Title +msgid "Reboot failed" +msgstr "" + +#: WarningMessage.RebootFailed.Text +msgid "Reboot of the system failed for some reason - sorry!" +msgstr "" diff --git a/v0.3.4.5/plugins/shutdown/intl/ur/cryptobox-server-feature-shutdown.po b/v0.3.4.5/plugins/shutdown/intl/ur/cryptobox-server-feature-shutdown.po new file mode 100644 index 0000000..f369b8f --- /dev/null +++ b/v0.3.4.5/plugins/shutdown/intl/ur/cryptobox-server-feature-shutdown.po @@ -0,0 +1,78 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-02-05 23:28+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Shutdown or reboot the computer" +msgstr "" + +#: Link +msgid "Shutdown" +msgstr "" + +#: Title +msgid "Shutdown computer" +msgstr "" + +#: Title.ProgressShutdown +msgid "The CryptoBox is shutting down" +msgstr "" + +#: Title.ProgressReboot +msgid "The CryptoBox is rebooting" +msgstr "" + +#: Button.Shutdown +msgid "Poweroff" +msgstr "" + +#: Button.Reboot +msgid "Reboot" +msgstr "" + +#: Help.Shutdown +msgid "You can poweroff or reboot the CryptoBox server. You should close all open files before." +msgstr "" + +#: SuccessMessage.Shutdown.Title +msgid "Shutting down the system" +msgstr "" + +#: SuccessMessage.Shutdown.Text +msgid "If the computer does not turn off itself within a minute, then you should plug it off manually." +msgstr "" + +#: SuccessMessage.Reboot.Title +msgid "Rebooting the system" +msgstr "" + +#: SuccessMessage.Reboot.Text +msgid "This may take a while (depending on your hardware) ..." +msgstr "" + +#: WarningMessage.ShutdownFailed.Title +msgid "Shutdown failed" +msgstr "" + +#: WarningMessage.ShutdownFailed.Text +msgid "Shutting down of the system failed for some reason - sorry!" +msgstr "" + +#: WarningMessage.RebootFailed.Title +msgid "Reboot failed" +msgstr "" + +#: WarningMessage.RebootFailed.Text +msgid "Reboot of the system failed for some reason - sorry!" +msgstr "" diff --git a/v0.3.4.5/plugins/shutdown/language.hdf b/v0.3.4.5/plugins/shutdown/language.hdf new file mode 100644 index 0000000..bb05590 --- /dev/null +++ b/v0.3.4.5/plugins/shutdown/language.hdf @@ -0,0 +1,39 @@ +Name = Shutdown or reboot the computer +Link = Shutdown + +Title = Shutdown computer +Title { + ProgressShutdown = The CryptoBox is shutting down + ProgressReboot = The CryptoBox is rebooting +} + +Button.Shutdown = Poweroff +Button.Reboot = Reboot + + +Help.Shutdown = You can poweroff or reboot the CryptoBox server. You should close all open files before. + + +SuccessMessage { + Shutdown { + Title = Shutting down the system + Text = If the computer does not turn off itself within a minute, then you should plug it off manually. + } + + Reboot { + Title = Rebooting the system + Text = This may take a while (depending on your hardware) ... + } +} + +WarningMessage { + ShutdownFailed { + Title = Shutdown failed + Text = Shutting down of the system failed for some reason - sorry! + } + + RebootFailed { + Title = Reboot failed + Text = Reboot of the system failed for some reason - sorry! + } +} diff --git a/v0.3.4.5/plugins/shutdown/plugin_icon.gif b/v0.3.4.5/plugins/shutdown/plugin_icon.gif new file mode 100644 index 0000000000000000000000000000000000000000..4c0a92d1f9365ad4d6aa822e8891189e8f9c3b1a GIT binary patch literal 3196 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 Y0gk(-zKH02umAu607*qoM6N<$f+o&KI{*Lx literal 0 HcmV?d00001 diff --git a/v0.3.4.5/plugins/shutdown/progress_reboot.cs b/v0.3.4.5/plugins/shutdown/progress_reboot.cs new file mode 100644 index 0000000..d36ce78 --- /dev/null +++ b/v0.3.4.5/plugins/shutdown/progress_reboot.cs @@ -0,0 +1,6 @@ + + +

+ + + diff --git a/v0.3.4.5/plugins/shutdown/progress_shutdown.cs b/v0.3.4.5/plugins/shutdown/progress_shutdown.cs new file mode 100644 index 0000000..a4afd10 --- /dev/null +++ b/v0.3.4.5/plugins/shutdown/progress_shutdown.cs @@ -0,0 +1,6 @@ + + +

+ + + diff --git a/v0.3.4.5/plugins/shutdown/root_action.py b/v0.3.4.5/plugins/shutdown/root_action.py new file mode 100755 index 0000000..94ae47a --- /dev/null +++ b/v0.3.4.5/plugins/shutdown/root_action.py @@ -0,0 +1,70 @@ +#!/usr/bin/env python +# +# Copyright 2006 sense.lab e.V. +# +# This file is part of the CryptoBox. +# +# The CryptoBox 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 CryptoBox 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 the CryptoBox; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +__revision__ = "$Id" + + +## necessary: otherwise CryptoBoxRootActions.py will refuse to execute this script +PLUGIN_TYPE = "cryptobox" + +SHUTDOWN_BIN = "/sbin/shutdown" + +## delay (in seconds) before shutdown +SHUTDOWN_DELAY = 3 + +import subprocess +import sys + + +def call_prog(progy): + proc = subprocess.Popen( + shell = False, + args = progy) + proc.communicate() + return proc.returncode == 0 + + +if __name__ == "__main__": + args = sys.argv[1:] + + self_bin = sys.argv[0] + + if len(args) > 1: + sys.stderr.write("%s: too many arguments (%s)\n" % (self_bin, args)) + sys.exit(1) + + if len(args) == 0: + sys.stderr.write("%s: no argument supplied\n" % self_bin) + sys.exit(1) + + if args[0] == "reboot": + result = call_prog([SHUTDOWN_BIN, "-t", str(SHUTDOWN_DELAY), "-r", "now"]) + elif args[0] == "shutdown": + result = call_prog([SHUTDOWN_BIN, "-t", str(SHUTDOWN_DELAY), "-h", "now"]) + else: + sys.stderr.write("%s: illegal argument (%s)\n" % (self_bin, args[0])) + sys.exit(1) + + if result: + sys.exit(0) + else: + sys.exit(1) + diff --git a/v0.3.4.5/plugins/shutdown/shutdown.py b/v0.3.4.5/plugins/shutdown/shutdown.py new file mode 100644 index 0000000..051a9ef --- /dev/null +++ b/v0.3.4.5/plugins/shutdown/shutdown.py @@ -0,0 +1,74 @@ +# +# Copyright 2006 sense.lab e.V. +# +# This file is part of the CryptoBox. +# +# The CryptoBox 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 CryptoBox 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 the CryptoBox; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +__revision__ = "$Id" + +import cryptobox.plugins.base + +REDIRECT_DELAY = 120 + +class shutdown(cryptobox.plugins.base.CryptoBoxPlugin): + + plugin_capabilities = [ "system" ] + plugin_visibility = [ "menu" ] + request_auth = False + rank = 90 + + def do_action(self, type=None): + if not type: + return "form_shutdown" + elif type == "shutdown": + if self.__do_shutdown("shutdown"): + self.hdf["Data.Success"] = "Plugins.shutdown.Shutdown" + return "progress_shutdown" + else: + self.hdf["Data.Warning"] = "Plugins.shutdown.ShutdownFailed" + return "form_shutdown" + elif type == "reboot": + if self.__do_shutdown("reboot"): + self.hdf["Data.Success"] = "Plugins.shutdown.Reboot" + self.hdf["Data.Redirect.URL"] = "/" + self.hdf["Data.Redirect.Delay"] = REDIRECT_DELAY + return "progress_reboot" + else: + self.hdf["Data.Warning"] = "Plugins.shutdown.RebootFailed" + return "form_shutdown" + else: + return "form_shutdown" + + + def get_status(self): + return "the box is up'n'running" + + + def __do_shutdown(self, action): + import subprocess + import os + proc = subprocess.Popen( + shell = False, + args = [ + self.cbox.prefs["Programs"]["super"], + self.cbox.prefs["Programs"]["CryptoBoxRootActions"], + "plugin", + os.path.join(self.plugin_dir, "root_action.py"), + action]) + proc.wait() + return proc.returncode == 0 + diff --git a/v0.3.4.5/plugins/shutdown/unittests.py b/v0.3.4.5/plugins/shutdown/unittests.py new file mode 100644 index 0000000..bfb4127 --- /dev/null +++ b/v0.3.4.5/plugins/shutdown/unittests.py @@ -0,0 +1,35 @@ +# +# Copyright 2006 sense.lab e.V. +# +# This file is part of the CryptoBox. +# +# The CryptoBox 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 CryptoBox 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 the CryptoBox; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +__revision__ = "$Id" + +from cryptobox.tests.base import WebInterfaceTestClass + +class unittests(WebInterfaceTestClass): + + def test_read_form(self): + """just read the form - I do not know of a way how to check success""" + url = self.url + "shutdown" + self.register_auth(url) + self.cmd.go(url) + self.cmd.find('shutdown') + self.cmd.find('type=reboot') + self.cmd.find('type=shutdown') + diff --git a/v0.3.4.5/plugins/system_preferences/intl/cryptobox-server-feature-system_preferences.pot b/v0.3.4.5/plugins/system_preferences/intl/cryptobox-server-feature-system_preferences.pot new file mode 100644 index 0000000..3f3cbc3 --- /dev/null +++ b/v0.3.4.5/plugins/system_preferences/intl/cryptobox-server-feature-system_preferences.pot @@ -0,0 +1,11 @@ +#: Name +msgid "System preferences" +msgstr "" + +#: Link +msgid "Preferences" +msgstr "" + +#: Title.Prefs +msgid "Configure your CryptoBox" +msgstr "" diff --git a/v0.3.4.5/plugins/system_preferences/intl/cs/cryptobox-server-feature-system_preferences.po b/v0.3.4.5/plugins/system_preferences/intl/cs/cryptobox-server-feature-system_preferences.po new file mode 100644 index 0000000..8334372 --- /dev/null +++ b/v0.3.4.5/plugins/system_preferences/intl/cs/cryptobox-server-feature-system_preferences.po @@ -0,0 +1,26 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:01+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "System preferences" +msgstr "" + +#: Link +msgid "Preferences" +msgstr "" + +#: Title.Prefs +msgid "Configure your CryptoBox" +msgstr "" diff --git a/v0.3.4.5/plugins/system_preferences/intl/da/cryptobox-server-feature-system_preferences.po b/v0.3.4.5/plugins/system_preferences/intl/da/cryptobox-server-feature-system_preferences.po new file mode 100644 index 0000000..8334372 --- /dev/null +++ b/v0.3.4.5/plugins/system_preferences/intl/da/cryptobox-server-feature-system_preferences.po @@ -0,0 +1,26 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:01+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "System preferences" +msgstr "" + +#: Link +msgid "Preferences" +msgstr "" + +#: Title.Prefs +msgid "Configure your CryptoBox" +msgstr "" diff --git a/v0.3.4.5/plugins/system_preferences/intl/de/cryptobox-server-feature-system_preferences.po b/v0.3.4.5/plugins/system_preferences/intl/de/cryptobox-server-feature-system_preferences.po new file mode 100644 index 0000000..0c8234d --- /dev/null +++ b/v0.3.4.5/plugins/system_preferences/intl/de/cryptobox-server-feature-system_preferences.po @@ -0,0 +1,25 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:01+0100\n" +"PO-Revision-Date: 2007-02-03 21:25+0100\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "System preferences" +msgstr "Systemsteuerung" + +#: Link +msgid "Preferences" +msgstr "Einstellungen" + +#: Title.Prefs +msgid "Configure your CryptoBox" +msgstr "Deine CryptoBox konfigurieren" diff --git a/v0.3.4.5/plugins/system_preferences/intl/en/cryptobox-server-feature-system_preferences.po b/v0.3.4.5/plugins/system_preferences/intl/en/cryptobox-server-feature-system_preferences.po new file mode 100644 index 0000000..1bfa208 --- /dev/null +++ b/v0.3.4.5/plugins/system_preferences/intl/en/cryptobox-server-feature-system_preferences.po @@ -0,0 +1,11 @@ +#: Name +msgid "System preferences" +msgstr "System preferences" + +#: Link +msgid "Preferences" +msgstr "Preferences" + +#: Title.Prefs +msgid "Configure your CryptoBox" +msgstr "Configure your CryptoBox" diff --git a/v0.3.4.5/plugins/system_preferences/intl/es/cryptobox-server-feature-system_preferences.po b/v0.3.4.5/plugins/system_preferences/intl/es/cryptobox-server-feature-system_preferences.po new file mode 100644 index 0000000..8334372 --- /dev/null +++ b/v0.3.4.5/plugins/system_preferences/intl/es/cryptobox-server-feature-system_preferences.po @@ -0,0 +1,26 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:01+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "System preferences" +msgstr "" + +#: Link +msgid "Preferences" +msgstr "" + +#: Title.Prefs +msgid "Configure your CryptoBox" +msgstr "" diff --git a/v0.3.4.5/plugins/system_preferences/intl/fi/cryptobox-server-feature-system_preferences.po b/v0.3.4.5/plugins/system_preferences/intl/fi/cryptobox-server-feature-system_preferences.po new file mode 100644 index 0000000..8334372 --- /dev/null +++ b/v0.3.4.5/plugins/system_preferences/intl/fi/cryptobox-server-feature-system_preferences.po @@ -0,0 +1,26 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:01+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "System preferences" +msgstr "" + +#: Link +msgid "Preferences" +msgstr "" + +#: Title.Prefs +msgid "Configure your CryptoBox" +msgstr "" diff --git a/v0.3.4.5/plugins/system_preferences/intl/fr/cryptobox-server-feature-system_preferences.po b/v0.3.4.5/plugins/system_preferences/intl/fr/cryptobox-server-feature-system_preferences.po new file mode 100644 index 0000000..8334372 --- /dev/null +++ b/v0.3.4.5/plugins/system_preferences/intl/fr/cryptobox-server-feature-system_preferences.po @@ -0,0 +1,26 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:01+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "System preferences" +msgstr "" + +#: Link +msgid "Preferences" +msgstr "" + +#: Title.Prefs +msgid "Configure your CryptoBox" +msgstr "" diff --git a/v0.3.4.5/plugins/system_preferences/intl/hu/cryptobox-server-feature-system_preferences.po b/v0.3.4.5/plugins/system_preferences/intl/hu/cryptobox-server-feature-system_preferences.po new file mode 100644 index 0000000..8334372 --- /dev/null +++ b/v0.3.4.5/plugins/system_preferences/intl/hu/cryptobox-server-feature-system_preferences.po @@ -0,0 +1,26 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:01+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "System preferences" +msgstr "" + +#: Link +msgid "Preferences" +msgstr "" + +#: Title.Prefs +msgid "Configure your CryptoBox" +msgstr "" diff --git a/v0.3.4.5/plugins/system_preferences/intl/it/cryptobox-server-feature-system_preferences.po b/v0.3.4.5/plugins/system_preferences/intl/it/cryptobox-server-feature-system_preferences.po new file mode 100644 index 0000000..0607a35 --- /dev/null +++ b/v0.3.4.5/plugins/system_preferences/intl/it/cryptobox-server-feature-system_preferences.po @@ -0,0 +1,25 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:01+0100\n" +"PO-Revision-Date: 2007-03-05 11:45+0100\n" +"Last-Translator: Fabrizio Tarizzo \n" +"Language-Team: Italian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "System preferences" +msgstr "Preferenze di sistema" + +#: Link +msgid "Preferences" +msgstr "Preferenze" + +#: Title.Prefs +msgid "Configure your CryptoBox" +msgstr "Configurazione della CryptoBox" diff --git a/v0.3.4.5/plugins/system_preferences/intl/ja/cryptobox-server-feature-system_preferences.po b/v0.3.4.5/plugins/system_preferences/intl/ja/cryptobox-server-feature-system_preferences.po new file mode 100644 index 0000000..d4146ac --- /dev/null +++ b/v0.3.4.5/plugins/system_preferences/intl/ja/cryptobox-server-feature-system_preferences.po @@ -0,0 +1,25 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:01+0100\n" +"PO-Revision-Date: 2007-02-23 11:35+0100\n" +"Last-Translator: kinneko \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "System preferences" +msgstr "システム設定" + +#: Link +msgid "Preferences" +msgstr "設定" + +#: Title.Prefs +msgid "Configure your CryptoBox" +msgstr "クリプトボックスを設定する" diff --git a/v0.3.4.5/plugins/system_preferences/intl/nl/cryptobox-server-feature-system_preferences.po b/v0.3.4.5/plugins/system_preferences/intl/nl/cryptobox-server-feature-system_preferences.po new file mode 100644 index 0000000..8334372 --- /dev/null +++ b/v0.3.4.5/plugins/system_preferences/intl/nl/cryptobox-server-feature-system_preferences.po @@ -0,0 +1,26 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:01+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "System preferences" +msgstr "" + +#: Link +msgid "Preferences" +msgstr "" + +#: Title.Prefs +msgid "Configure your CryptoBox" +msgstr "" diff --git a/v0.3.4.5/plugins/system_preferences/intl/pl/cryptobox-server-feature-system_preferences.po b/v0.3.4.5/plugins/system_preferences/intl/pl/cryptobox-server-feature-system_preferences.po new file mode 100644 index 0000000..25e42c0 --- /dev/null +++ b/v0.3.4.5/plugins/system_preferences/intl/pl/cryptobox-server-feature-system_preferences.po @@ -0,0 +1,25 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-04-01 15:53+0200\n" +"PO-Revision-Date: 2007-03-28 22:07+0200\n" +"Last-Translator: Andrzej S. Kaznowski \n" +"Language-Team: POLSKI \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "System preferences" +msgstr "Ustawienia systemu" + +#: Link +msgid "Preferences" +msgstr "Ustawienia" + +#: Title.Prefs +msgid "Configure your CryptoBox" +msgstr "Konfiguruj system CryptoBox" diff --git a/v0.3.4.5/plugins/system_preferences/intl/pt/cryptobox-server-feature-system_preferences.po b/v0.3.4.5/plugins/system_preferences/intl/pt/cryptobox-server-feature-system_preferences.po new file mode 100644 index 0000000..8334372 --- /dev/null +++ b/v0.3.4.5/plugins/system_preferences/intl/pt/cryptobox-server-feature-system_preferences.po @@ -0,0 +1,26 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:01+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "System preferences" +msgstr "" + +#: Link +msgid "Preferences" +msgstr "" + +#: Title.Prefs +msgid "Configure your CryptoBox" +msgstr "" diff --git a/v0.3.4.5/plugins/system_preferences/intl/ru/cryptobox-server-feature-system_preferences.po b/v0.3.4.5/plugins/system_preferences/intl/ru/cryptobox-server-feature-system_preferences.po new file mode 100644 index 0000000..8334372 --- /dev/null +++ b/v0.3.4.5/plugins/system_preferences/intl/ru/cryptobox-server-feature-system_preferences.po @@ -0,0 +1,26 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:01+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "System preferences" +msgstr "" + +#: Link +msgid "Preferences" +msgstr "" + +#: Title.Prefs +msgid "Configure your CryptoBox" +msgstr "" diff --git a/v0.3.4.5/plugins/system_preferences/intl/sl/cryptobox-server-feature-system_preferences.po b/v0.3.4.5/plugins/system_preferences/intl/sl/cryptobox-server-feature-system_preferences.po new file mode 100644 index 0000000..da74241 --- /dev/null +++ b/v0.3.4.5/plugins/system_preferences/intl/sl/cryptobox-server-feature-system_preferences.po @@ -0,0 +1,25 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:01+0100\n" +"PO-Revision-Date: 2007-02-06 12:10+0100\n" +"Last-Translator: tenzin \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "System preferences" +msgstr "Sistemske možnosti" + +#: Link +msgid "Preferences" +msgstr "Možnosti" + +#: Title.Prefs +msgid "Configure your CryptoBox" +msgstr "konfigurirajte svoj Cryptobox" diff --git a/v0.3.4.5/plugins/system_preferences/intl/sv/cryptobox-server-feature-system_preferences.po b/v0.3.4.5/plugins/system_preferences/intl/sv/cryptobox-server-feature-system_preferences.po new file mode 100644 index 0000000..8334372 --- /dev/null +++ b/v0.3.4.5/plugins/system_preferences/intl/sv/cryptobox-server-feature-system_preferences.po @@ -0,0 +1,26 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:01+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "System preferences" +msgstr "" + +#: Link +msgid "Preferences" +msgstr "" + +#: Title.Prefs +msgid "Configure your CryptoBox" +msgstr "" diff --git a/v0.3.4.5/plugins/system_preferences/intl/ur/cryptobox-server-feature-system_preferences.po b/v0.3.4.5/plugins/system_preferences/intl/ur/cryptobox-server-feature-system_preferences.po new file mode 100644 index 0000000..1b5d80b --- /dev/null +++ b/v0.3.4.5/plugins/system_preferences/intl/ur/cryptobox-server-feature-system_preferences.po @@ -0,0 +1,26 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-02-05 23:27+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "System preferences" +msgstr "" + +#: Link +msgid "Preferences" +msgstr "" + +#: Title.Prefs +msgid "Configure your CryptoBox" +msgstr "" diff --git a/v0.3.4.5/plugins/system_preferences/language.hdf b/v0.3.4.5/plugins/system_preferences/language.hdf new file mode 100644 index 0000000..f42bfa7 --- /dev/null +++ b/v0.3.4.5/plugins/system_preferences/language.hdf @@ -0,0 +1,6 @@ +Name = System preferences +Link = Preferences + +Title = Preferences +Title.Prefs = Configure your CryptoBox + diff --git a/v0.3.4.5/plugins/system_preferences/plugin_icon.gif b/v0.3.4.5/plugins/system_preferences/plugin_icon.gif new file mode 100644 index 0000000000000000000000000000000000000000..ef2cc1b4f7b5eeebda10ef3be94c5026b35db53e GIT binary patch literal 2432 zcmV-`34iuSNk%w1VL$*t0O$Vz7dvkuLU$TPe;r4H6ibUANrNIuiXuvdBuj@TO^7E> zi78KuB2$zuQ;#QDlQ2|~HdlfxT9r9jggRPU6?momo;6DH(rl9V39Lom^5LX zKVOSIVVO2%nmA;jL1c+OWtA~$q&R1sKxCUcX`e%8o;_%#MQETnY_30Qr#Nn^M{1%$ zY^g_Vo;z`^LT{!+ZmUFbs6TYDNO7-7bgN2stxbZDhmV$o zke!W>jA@q1ijJLzk)Cgs!-;qmY!Nm6nr@n5A}| z%8r?)d7sUgnwOBAse7T%lAWr6p~;q>rhTK)oSvJMpRIzU%zmWOo}itOqq~}-s)eS{ zhp5q+rLv-=p`NC$iK^43r=*Ll)u*YZj;`0EtFw}>(x9xls;sG|uC|r2)vT_om$TQd zu&t@Fxu&weudlhQv%9jiv7ETvt+l?Yw!@*g*R-~?ueZOox3sOf#-qF0vAMyoyU4h@ zx3Ij*r@r00y}Gr&#mCQ$;-IQe<`Z*WBOQ+}YCJ?AzVi+}_*W-`v&V@ZR9v-{Ici;@{!q;N#`t%?< z=<4U@>+b36=<4k0+bOF?D6#P@$T^Q@A32S^7QfZ_44%h^Y-}k`1_CX>@2HRA^-&M@dak03rDV0SW;B04x9i002M$KmY&; z{s8|897wRB!Gj1BDqP60p~Hs|BTAe|v7*I`7&B_z$g!hGfmf<<5ff6&$BbAEsbjZJ zT{TTyu3#)vhGP{&?bwl1x6a+TL^3JTyws=WMl5{Vwd2N(+`4s|f<`PuM$|H6kBn;M z@Z?T?cmDI!GoP zmMQe?8M4QGg^|&ku?e-WOx+!;qBxVay~dEKMOKJRM=Z|RaZ@+09XTuv%V5&B44JUo z!gdAg6egn7gj$Zx^SVtb=Y?s4AWJJN{oIr5JnT5bjXn9i14kBR z91;yH!R&IzM_6D147KdGs}4Q=*b~h*`OuRMH~I9#4H$(K8w@U!q67ys@32b`H<$>P zk3ab^l}|k`vhxNe&9D;9E?S;6kYMS;@kP3@!2w4-{mhe%I^8<+MjyZI^2;x8oU3s| zZ{<7BYVAyn%rC+Gf=044GbA#+?>M7}9>ly1b0u#EtM+(XYBdhF`*8>IB(43thE zWWWO)4Ex5;S7SmCyufhXwLk|vz`_n47!X7>JxB9~DqgjdPyRl)sO@wDMM#p2CwaJF zz#F?x+)h31gwswx^rX^s&;}Uc$0)`45(OPB7!U{^r2II~I^57oPbiDdjKB_qSV0Bh zJrvP};bh!1x>)b5LykN4*fYr&T@z439#lASgb+RGpaT$6JOBYC(5~r~SM$)bh+P^Z z;K3lp69EJeJ|hBGuwp{c*N$w=D;w8f ziZt3G4KYvz0S6Gl9rBO|NyK7sHvj7$E|Zl#eS~6b)`rgBshQhBVZ14D2}s z0bkR>ApF1xRQO^Vj;H|yRyl$k7{LNLq}d0PlnrTcLmJM|7B5nl5CR}T21W1#B8;gG zZqNY-5|H5uYVZUN%<&;#kcB#;5e;YT3KOaR-~~BM!Oepl00u@F#3o`f4RMHr3OdLD z1UfK+8W>>&(S!&VQjx1;0K*iCfCMIv5f0!rBmqNE1VOn0k5~|)2O)Uk2U@@c9Tb2f zShxi@UWN&3_yZG_;07eZn2-ew!Vv})2OVgj0~oB51S}ZB1}*Z1TVz8PnD~S<3_*%; zKw=6FLBJiTfQUN?0em=kq6S1@10y`(rA*aDG+coRLukSo+knF_i$I4XfKLZD2muB< zzycaDK?P{N$QO8Vjbj`Gu9)CyLIUsrHdrBf1s+sXcdwG6PRHLH1L25RFDE9xO8m~Ie-b6V1yd1 y76?XIfB=B|5ClBn224nT6M7JV0WcRL1weoT9-sgNEcd$L4X=2|OJ3jx1OPj;3ZYs6 literal 0 HcmV?d00001 diff --git a/v0.3.4.5/plugins/system_preferences/plugin_icon.png b/v0.3.4.5/plugins/system_preferences/plugin_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..944e66c885ccbc2cbf1b549ffe076d271faae547 GIT binary patch literal 5570 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 + + + +
+ + + + + + + +
<?cs
+				var:html_escape('icon: ' + x.Name) ?>
+ +
+ diff --git a/v0.3.4.5/plugins/system_preferences/system_preferences.py b/v0.3.4.5/plugins/system_preferences/system_preferences.py new file mode 100644 index 0000000..7cc3420 --- /dev/null +++ b/v0.3.4.5/plugins/system_preferences/system_preferences.py @@ -0,0 +1,40 @@ +# +# Copyright 2006 sense.lab e.V. +# +# This file is part of the CryptoBox. +# +# The CryptoBox 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 CryptoBox 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 the CryptoBox; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +__revision__ = "$Id" + +import cryptobox.plugins.base + +class system_preferences(cryptobox.plugins.base.CryptoBoxPlugin): + + plugin_capabilities = [ "system" ] + plugin_visibility = [ "menu" ] + request_auth = False + rank = 25 + + def do_action(self): + return "show_plugins" + + + def get_status(self): + plugin_manager = cryptobox.plugins.manage.PluginManager( + self.cbox, self.cbox.prefs["Locations"]["PluginDir"]) + return ":".join([p.get_name() for p in plugin_manager.get_plugins()]) + diff --git a/v0.3.4.5/plugins/system_preferences/unittests.py b/v0.3.4.5/plugins/system_preferences/unittests.py new file mode 100644 index 0000000..b653127 --- /dev/null +++ b/v0.3.4.5/plugins/system_preferences/unittests.py @@ -0,0 +1,38 @@ +# +# Copyright 2006 sense.lab e.V. +# +# This file is part of the CryptoBox. +# +# The CryptoBox 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 CryptoBox 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 the CryptoBox; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +__revision__ = "$Id" + +from cryptobox.tests.base import WebInterfaceTestClass + +class unittests(WebInterfaceTestClass): + + def test_read_form(self): + self.cmd.go(self.url + "system_preferences") + self.cmd.find("Preferences") + + + def test_check_plugins(self): + self.cmd.go(self.url + "system_preferences") + self.cmd.find(r'Data.Status.Plugins.system_preferences=(.*)$', "m") + plugins = self.locals["__match__"].split(":") + self.assertTrue(len(plugins) > 1) + self.assertTrue("disks" in plugins) + diff --git a/v0.3.4.5/plugins/user_manager/intl/cryptobox-server-feature-user_manager.pot b/v0.3.4.5/plugins/user_manager/intl/cryptobox-server-feature-user_manager.pot new file mode 100644 index 0000000..f17a1a2 --- /dev/null +++ b/v0.3.4.5/plugins/user_manager/intl/cryptobox-server-feature-user_manager.pot @@ -0,0 +1,103 @@ +#: Name +msgid "User manager" +msgstr "" + +#: Link +msgid "Users" +msgstr "" + +#: Title +msgid "User Manager" +msgstr "" + +#: Title.AddUser +msgid "Add new user" +msgstr "" + +#: Title.DelUser +msgid "Remove user" +msgstr "" + +#: Title.ChangePassword +msgid "Change password" +msgstr "" + +#: Button.DelUser +msgid "Remove" +msgstr "" + +#: Text.NewUser +msgid "Name of the new user" +msgstr "" + +#: Text.DelUser +msgid "User to remove" +msgstr "" + +#: Text.ChangePasswordUser +msgid "Change user's password" +msgstr "" + +#: Help.UserManagement +msgid "Some settings and actions of the CryptoBox are restricted to authenticated users. Common actions like opening and closing of volumes are usually possible without administrative permissions. Be careful when adding new users as they will have control over all features of the CryptoBox including partitioning, formatting and user management." +msgstr "" + +#: Help.AddUser +msgid "Add a new administrative user and define its password by entering it twice." +msgstr "" + +#: Help.ChangePassword +msgid "Choose a user of the following list and enter the new password twice." +msgstr "" + +#: Help.DelUser +msgid "Remove an administrative user. The user 'admin' is reserved and can not be removed." +msgstr "" + +#: SuccessMessage.UserAdded.Title +msgid "User added" +msgstr "" + +#: SuccessMessage.UserAdded.Text +msgid "The new user was added successfully." +msgstr "" + +#: SuccessMessage.UserRemoved.Title +msgid "User removed" +msgstr "" + +#: SuccessMessage.UserRemoved.Text +msgid "The user was removed successfully." +msgstr "" + +#: SuccessMessage.PasswordChanged.Title +msgid "Password changed" +msgstr "" + +#: SuccessMessage.PasswordChanged.Text +msgid "The password was changed successfully." +msgstr "" + +#: WarningMessage.InvalidUserName.Title +msgid "Invalid username" +msgstr "" + +#: WarningMessage.InvalidUserName.Text +msgid "The choosen username is invalid: only letters and digits are allowed." +msgstr "" + +#: WarningMessage.NeverRemoveReservedUser.Title +msgid "Reserved user" +msgstr "" + +#: WarningMessage.NeverRemoveReservedUser.Text +msgid "You may not remove a reserved user. Sorry!" +msgstr "" + +#: WarningMessage.UserAlreadyExists.Title +msgid "User exists" +msgstr "" + +#: WarningMessage.UserAlreadyExists.Text +msgid "The choosen username does already exist. Please choose another one." +msgstr "" diff --git a/v0.3.4.5/plugins/user_manager/intl/cs/cryptobox-server-feature-user_manager.po b/v0.3.4.5/plugins/user_manager/intl/cs/cryptobox-server-feature-user_manager.po new file mode 100644 index 0000000..4b87bd6 --- /dev/null +++ b/v0.3.4.5/plugins/user_manager/intl/cs/cryptobox-server-feature-user_manager.po @@ -0,0 +1,118 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:01+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "User manager" +msgstr "" + +#: Link +msgid "Users" +msgstr "" + +#: Title +msgid "User Manager" +msgstr "" + +#: Title.AddUser +msgid "Add new user" +msgstr "" + +#: Title.DelUser +msgid "Remove user" +msgstr "" + +#: Title.ChangePassword +msgid "Change password" +msgstr "" + +#: Button.DelUser +msgid "Remove" +msgstr "" + +#: Text.NewUser +msgid "Name of the new user" +msgstr "" + +#: Text.DelUser +msgid "User to remove" +msgstr "" + +#: Text.ChangePasswordUser +msgid "Change user's password" +msgstr "" + +#: Help.UserManagement +msgid "Some settings and actions of the CryptoBox are restricted to authenticated users. Common actions like opening and closing of volumes are usually possible without administrative permissions. Be careful when adding new users as they will have control over all features of the CryptoBox including partitioning, formatting and user management." +msgstr "" + +#: Help.AddUser +msgid "Add a new administrative user and define its password by entering it twice." +msgstr "" + +#: Help.ChangePassword +msgid "Choose a user of the following list and enter the new password twice." +msgstr "" + +#: Help.DelUser +msgid "Remove an administrative user. The user 'admin' is reserved and can not be removed." +msgstr "" + +#: SuccessMessage.UserAdded.Title +msgid "User added" +msgstr "" + +#: SuccessMessage.UserAdded.Text +msgid "The new user was added successfully." +msgstr "" + +#: SuccessMessage.UserRemoved.Title +msgid "User removed" +msgstr "" + +#: SuccessMessage.UserRemoved.Text +msgid "The user was removed successfully." +msgstr "" + +#: SuccessMessage.PasswordChanged.Title +msgid "Password changed" +msgstr "" + +#: SuccessMessage.PasswordChanged.Text +msgid "The password was changed successfully." +msgstr "" + +#: WarningMessage.InvalidUserName.Title +msgid "Invalid username" +msgstr "" + +#: WarningMessage.InvalidUserName.Text +msgid "The choosen username is invalid: only letters and digits are allowed." +msgstr "" + +#: WarningMessage.NeverRemoveReservedUser.Title +msgid "Reserved user" +msgstr "" + +#: WarningMessage.NeverRemoveReservedUser.Text +msgid "You may not remove a reserved user. Sorry!" +msgstr "" + +#: WarningMessage.UserAlreadyExists.Title +msgid "User exists" +msgstr "" + +#: WarningMessage.UserAlreadyExists.Text +msgid "The choosen username does already exist. Please choose another one." +msgstr "" diff --git a/v0.3.4.5/plugins/user_manager/intl/da/cryptobox-server-feature-user_manager.po b/v0.3.4.5/plugins/user_manager/intl/da/cryptobox-server-feature-user_manager.po new file mode 100644 index 0000000..4b87bd6 --- /dev/null +++ b/v0.3.4.5/plugins/user_manager/intl/da/cryptobox-server-feature-user_manager.po @@ -0,0 +1,118 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:01+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "User manager" +msgstr "" + +#: Link +msgid "Users" +msgstr "" + +#: Title +msgid "User Manager" +msgstr "" + +#: Title.AddUser +msgid "Add new user" +msgstr "" + +#: Title.DelUser +msgid "Remove user" +msgstr "" + +#: Title.ChangePassword +msgid "Change password" +msgstr "" + +#: Button.DelUser +msgid "Remove" +msgstr "" + +#: Text.NewUser +msgid "Name of the new user" +msgstr "" + +#: Text.DelUser +msgid "User to remove" +msgstr "" + +#: Text.ChangePasswordUser +msgid "Change user's password" +msgstr "" + +#: Help.UserManagement +msgid "Some settings and actions of the CryptoBox are restricted to authenticated users. Common actions like opening and closing of volumes are usually possible without administrative permissions. Be careful when adding new users as they will have control over all features of the CryptoBox including partitioning, formatting and user management." +msgstr "" + +#: Help.AddUser +msgid "Add a new administrative user and define its password by entering it twice." +msgstr "" + +#: Help.ChangePassword +msgid "Choose a user of the following list and enter the new password twice." +msgstr "" + +#: Help.DelUser +msgid "Remove an administrative user. The user 'admin' is reserved and can not be removed." +msgstr "" + +#: SuccessMessage.UserAdded.Title +msgid "User added" +msgstr "" + +#: SuccessMessage.UserAdded.Text +msgid "The new user was added successfully." +msgstr "" + +#: SuccessMessage.UserRemoved.Title +msgid "User removed" +msgstr "" + +#: SuccessMessage.UserRemoved.Text +msgid "The user was removed successfully." +msgstr "" + +#: SuccessMessage.PasswordChanged.Title +msgid "Password changed" +msgstr "" + +#: SuccessMessage.PasswordChanged.Text +msgid "The password was changed successfully." +msgstr "" + +#: WarningMessage.InvalidUserName.Title +msgid "Invalid username" +msgstr "" + +#: WarningMessage.InvalidUserName.Text +msgid "The choosen username is invalid: only letters and digits are allowed." +msgstr "" + +#: WarningMessage.NeverRemoveReservedUser.Title +msgid "Reserved user" +msgstr "" + +#: WarningMessage.NeverRemoveReservedUser.Text +msgid "You may not remove a reserved user. Sorry!" +msgstr "" + +#: WarningMessage.UserAlreadyExists.Title +msgid "User exists" +msgstr "" + +#: WarningMessage.UserAlreadyExists.Text +msgid "The choosen username does already exist. Please choose another one." +msgstr "" diff --git a/v0.3.4.5/plugins/user_manager/intl/de/cryptobox-server-feature-user_manager.po b/v0.3.4.5/plugins/user_manager/intl/de/cryptobox-server-feature-user_manager.po new file mode 100644 index 0000000..212949f --- /dev/null +++ b/v0.3.4.5/plugins/user_manager/intl/de/cryptobox-server-feature-user_manager.po @@ -0,0 +1,117 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:01+0100\n" +"PO-Revision-Date: 2007-02-05 16:55+0100\n" +"Last-Translator: Lars Kruse \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "User manager" +msgstr "Nutzerverwaltung" + +#: Link +msgid "Users" +msgstr "Nutzer" + +#: Title +msgid "User Manager" +msgstr "Nutzerverwaltung" + +#: Title.AddUser +msgid "Add new user" +msgstr "Neuen Nutzer hinzufügen" + +#: Title.DelUser +msgid "Remove user" +msgstr "Nutzer entfernen" + +#: Title.ChangePassword +msgid "Change password" +msgstr "Passwort ändern" + +#: Button.DelUser +msgid "Remove" +msgstr "Entfernen" + +#: Text.NewUser +msgid "Name of the new user" +msgstr "Name des neuen Nutzers" + +#: Text.DelUser +msgid "User to remove" +msgstr "Zu entfernender Nutzer" + +#: Text.ChangePasswordUser +msgid "Change user's password" +msgstr "Ändere das Passwort des Nutzers" + +#: Help.UserManagement +msgid "Some settings and actions of the CryptoBox are restricted to authenticated users. Common actions like opening and closing of volumes are usually possible without administrative permissions. Be careful when adding new users as they will have control over all features of the CryptoBox including partitioning, formatting and user management." +msgstr "Einige Einstellungen und Aktionen der CryptoBox sind reservierten Nutzern vorenthalten. Gängige Aktionen wie das Öffnen oder Schließen von Volumes sind ohne administrative Rechte möglich. Füge neue Nutzer mit Bedacht hinzu, da sie auf alle Funktionen der CryptoBox zugreifen können, einschließlich Partitionierung, Formatierung und Nutzerverwaltung." + +#: Help.AddUser +msgid "Add a new administrative user and define its password by entering it twice." +msgstr "Füge einen neuen administrativen Nutzer hinzu und lege sein Passwort fest, indem du es zweimal eingibst." + +#: Help.ChangePassword +msgid "Choose a user of the following list and enter the new password twice." +msgstr "Wähle einen Nutzer aus der folgenden Liste aus und gib das neue Passwort zweimal ein." + +#: Help.DelUser +msgid "Remove an administrative user. The user 'admin' is reserved and can not be removed." +msgstr "Einen administrativen Nutzer entfernen. Der Nutzer 'admin' ist reserviert und kann nicht entfernt werden." + +#: SuccessMessage.UserAdded.Title +msgid "User added" +msgstr "Nutzer hinzugefügt" + +#: SuccessMessage.UserAdded.Text +msgid "The new user was added successfully." +msgstr "Der neue Nutzer wurde erfolgreich hinzugefügt." + +#: SuccessMessage.UserRemoved.Title +msgid "User removed" +msgstr "Nutzer entfernt" + +#: SuccessMessage.UserRemoved.Text +msgid "The user was removed successfully." +msgstr "Der Nutzer wurde erfolgreich entfernt." + +#: SuccessMessage.PasswordChanged.Title +msgid "Password changed" +msgstr "Passwort geändert" + +#: SuccessMessage.PasswordChanged.Text +msgid "The password was changed successfully." +msgstr "Das Passwort wurde erfolgreich geändert." + +#: WarningMessage.InvalidUserName.Title +msgid "Invalid username" +msgstr "Ungültiger Nutzername" + +#: WarningMessage.InvalidUserName.Text +msgid "The choosen username is invalid: only letters and digits are allowed." +msgstr "Der gewählte Nutzername ist ungültig: nur Buchstaben und Zahlen sind erlaubt." + +#: WarningMessage.NeverRemoveReservedUser.Title +msgid "Reserved user" +msgstr "Reservierter Nutzer" + +#: WarningMessage.NeverRemoveReservedUser.Text +msgid "You may not remove a reserved user. Sorry!" +msgstr "Du kannst einen reservierten Nutzer nicht entfernen. Entschuldige!" + +#: WarningMessage.UserAlreadyExists.Title +msgid "User exists" +msgstr "Nutzer existiert bereits" + +#: WarningMessage.UserAlreadyExists.Text +msgid "The choosen username does already exist. Please choose another one." +msgstr "Der gewählte Nutzername existiert bereits. Bitte wähle einen anderen Namen." diff --git a/v0.3.4.5/plugins/user_manager/intl/en/cryptobox-server-feature-user_manager.po b/v0.3.4.5/plugins/user_manager/intl/en/cryptobox-server-feature-user_manager.po new file mode 100644 index 0000000..5343bae --- /dev/null +++ b/v0.3.4.5/plugins/user_manager/intl/en/cryptobox-server-feature-user_manager.po @@ -0,0 +1,103 @@ +#: Name +msgid "User manager" +msgstr "User manager" + +#: Link +msgid "Users" +msgstr "Users" + +#: Title +msgid "User Manager" +msgstr "User Manager" + +#: Title.AddUser +msgid "Add new user" +msgstr "Add new user" + +#: Title.DelUser +msgid "Remove user" +msgstr "Remove user" + +#: Title.ChangePassword +msgid "Change password" +msgstr "Change password" + +#: Button.DelUser +msgid "Remove" +msgstr "Remove" + +#: Text.NewUser +msgid "Name of the new user" +msgstr "Name of the new user" + +#: Text.DelUser +msgid "User to remove" +msgstr "User to remove" + +#: Text.ChangePasswordUser +msgid "Change user's password" +msgstr "Change user's password" + +#: Help.UserManagement +msgid "Some settings and actions of the CryptoBox are restricted to authenticated users. Common actions like opening and closing of volumes are usually possible without administrative permissions. Be careful when adding new users as they will have control over all features of the CryptoBox including partitioning, formatting and user management." +msgstr "Some settings and actions of the CryptoBox are restricted to authenticated users. Common actions like opening and closing of volumes are usually possible without administrative permissions. Be careful when adding new users as they will have control over all features of the CryptoBox including partitioning, formatting and user management." + +#: Help.AddUser +msgid "Add a new administrative user and define its password by entering it twice." +msgstr "Add a new administrative user and define its password by entering it twice." + +#: Help.ChangePassword +msgid "Choose a user of the following list and enter the new password twice." +msgstr "Choose a user of the following list and enter the new password twice." + +#: Help.DelUser +msgid "Remove an administrative user. The user 'admin' is reserved and can not be removed." +msgstr "Remove an administrative user. The user 'admin' is reserved and can not be removed." + +#: SuccessMessage.UserAdded.Title +msgid "User added" +msgstr "User added" + +#: SuccessMessage.UserAdded.Text +msgid "The new user was added successfully." +msgstr "The new user was added successfully." + +#: SuccessMessage.UserRemoved.Title +msgid "User removed" +msgstr "User removed" + +#: SuccessMessage.UserRemoved.Text +msgid "The user was removed successfully." +msgstr "The user was removed successfully." + +#: SuccessMessage.PasswordChanged.Title +msgid "Password changed" +msgstr "Password changed" + +#: SuccessMessage.PasswordChanged.Text +msgid "The password was changed successfully." +msgstr "The password was changed successfully." + +#: WarningMessage.InvalidUserName.Title +msgid "Invalid username" +msgstr "Invalid username" + +#: WarningMessage.InvalidUserName.Text +msgid "The choosen username is invalid: only letters and digits are allowed." +msgstr "The choosen username is invalid: only letters and digits are allowed." + +#: WarningMessage.NeverRemoveReservedUser.Title +msgid "Reserved user" +msgstr "Reserved user" + +#: WarningMessage.NeverRemoveReservedUser.Text +msgid "You may not remove a reserved user. Sorry!" +msgstr "You may not remove a reserved user. Sorry!" + +#: WarningMessage.UserAlreadyExists.Title +msgid "User exists" +msgstr "User exists" + +#: WarningMessage.UserAlreadyExists.Text +msgid "The choosen username does already exist. Please choose another one." +msgstr "The choosen username does already exist. Please choose another one." diff --git a/v0.3.4.5/plugins/user_manager/intl/es/cryptobox-server-feature-user_manager.po b/v0.3.4.5/plugins/user_manager/intl/es/cryptobox-server-feature-user_manager.po new file mode 100644 index 0000000..4b87bd6 --- /dev/null +++ b/v0.3.4.5/plugins/user_manager/intl/es/cryptobox-server-feature-user_manager.po @@ -0,0 +1,118 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:01+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "User manager" +msgstr "" + +#: Link +msgid "Users" +msgstr "" + +#: Title +msgid "User Manager" +msgstr "" + +#: Title.AddUser +msgid "Add new user" +msgstr "" + +#: Title.DelUser +msgid "Remove user" +msgstr "" + +#: Title.ChangePassword +msgid "Change password" +msgstr "" + +#: Button.DelUser +msgid "Remove" +msgstr "" + +#: Text.NewUser +msgid "Name of the new user" +msgstr "" + +#: Text.DelUser +msgid "User to remove" +msgstr "" + +#: Text.ChangePasswordUser +msgid "Change user's password" +msgstr "" + +#: Help.UserManagement +msgid "Some settings and actions of the CryptoBox are restricted to authenticated users. Common actions like opening and closing of volumes are usually possible without administrative permissions. Be careful when adding new users as they will have control over all features of the CryptoBox including partitioning, formatting and user management." +msgstr "" + +#: Help.AddUser +msgid "Add a new administrative user and define its password by entering it twice." +msgstr "" + +#: Help.ChangePassword +msgid "Choose a user of the following list and enter the new password twice." +msgstr "" + +#: Help.DelUser +msgid "Remove an administrative user. The user 'admin' is reserved and can not be removed." +msgstr "" + +#: SuccessMessage.UserAdded.Title +msgid "User added" +msgstr "" + +#: SuccessMessage.UserAdded.Text +msgid "The new user was added successfully." +msgstr "" + +#: SuccessMessage.UserRemoved.Title +msgid "User removed" +msgstr "" + +#: SuccessMessage.UserRemoved.Text +msgid "The user was removed successfully." +msgstr "" + +#: SuccessMessage.PasswordChanged.Title +msgid "Password changed" +msgstr "" + +#: SuccessMessage.PasswordChanged.Text +msgid "The password was changed successfully." +msgstr "" + +#: WarningMessage.InvalidUserName.Title +msgid "Invalid username" +msgstr "" + +#: WarningMessage.InvalidUserName.Text +msgid "The choosen username is invalid: only letters and digits are allowed." +msgstr "" + +#: WarningMessage.NeverRemoveReservedUser.Title +msgid "Reserved user" +msgstr "" + +#: WarningMessage.NeverRemoveReservedUser.Text +msgid "You may not remove a reserved user. Sorry!" +msgstr "" + +#: WarningMessage.UserAlreadyExists.Title +msgid "User exists" +msgstr "" + +#: WarningMessage.UserAlreadyExists.Text +msgid "The choosen username does already exist. Please choose another one." +msgstr "" diff --git a/v0.3.4.5/plugins/user_manager/intl/fi/cryptobox-server-feature-user_manager.po b/v0.3.4.5/plugins/user_manager/intl/fi/cryptobox-server-feature-user_manager.po new file mode 100644 index 0000000..4b87bd6 --- /dev/null +++ b/v0.3.4.5/plugins/user_manager/intl/fi/cryptobox-server-feature-user_manager.po @@ -0,0 +1,118 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:01+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "User manager" +msgstr "" + +#: Link +msgid "Users" +msgstr "" + +#: Title +msgid "User Manager" +msgstr "" + +#: Title.AddUser +msgid "Add new user" +msgstr "" + +#: Title.DelUser +msgid "Remove user" +msgstr "" + +#: Title.ChangePassword +msgid "Change password" +msgstr "" + +#: Button.DelUser +msgid "Remove" +msgstr "" + +#: Text.NewUser +msgid "Name of the new user" +msgstr "" + +#: Text.DelUser +msgid "User to remove" +msgstr "" + +#: Text.ChangePasswordUser +msgid "Change user's password" +msgstr "" + +#: Help.UserManagement +msgid "Some settings and actions of the CryptoBox are restricted to authenticated users. Common actions like opening and closing of volumes are usually possible without administrative permissions. Be careful when adding new users as they will have control over all features of the CryptoBox including partitioning, formatting and user management." +msgstr "" + +#: Help.AddUser +msgid "Add a new administrative user and define its password by entering it twice." +msgstr "" + +#: Help.ChangePassword +msgid "Choose a user of the following list and enter the new password twice." +msgstr "" + +#: Help.DelUser +msgid "Remove an administrative user. The user 'admin' is reserved and can not be removed." +msgstr "" + +#: SuccessMessage.UserAdded.Title +msgid "User added" +msgstr "" + +#: SuccessMessage.UserAdded.Text +msgid "The new user was added successfully." +msgstr "" + +#: SuccessMessage.UserRemoved.Title +msgid "User removed" +msgstr "" + +#: SuccessMessage.UserRemoved.Text +msgid "The user was removed successfully." +msgstr "" + +#: SuccessMessage.PasswordChanged.Title +msgid "Password changed" +msgstr "" + +#: SuccessMessage.PasswordChanged.Text +msgid "The password was changed successfully." +msgstr "" + +#: WarningMessage.InvalidUserName.Title +msgid "Invalid username" +msgstr "" + +#: WarningMessage.InvalidUserName.Text +msgid "The choosen username is invalid: only letters and digits are allowed." +msgstr "" + +#: WarningMessage.NeverRemoveReservedUser.Title +msgid "Reserved user" +msgstr "" + +#: WarningMessage.NeverRemoveReservedUser.Text +msgid "You may not remove a reserved user. Sorry!" +msgstr "" + +#: WarningMessage.UserAlreadyExists.Title +msgid "User exists" +msgstr "" + +#: WarningMessage.UserAlreadyExists.Text +msgid "The choosen username does already exist. Please choose another one." +msgstr "" diff --git a/v0.3.4.5/plugins/user_manager/intl/fr/cryptobox-server-feature-user_manager.po b/v0.3.4.5/plugins/user_manager/intl/fr/cryptobox-server-feature-user_manager.po new file mode 100644 index 0000000..4b87bd6 --- /dev/null +++ b/v0.3.4.5/plugins/user_manager/intl/fr/cryptobox-server-feature-user_manager.po @@ -0,0 +1,118 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:01+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "User manager" +msgstr "" + +#: Link +msgid "Users" +msgstr "" + +#: Title +msgid "User Manager" +msgstr "" + +#: Title.AddUser +msgid "Add new user" +msgstr "" + +#: Title.DelUser +msgid "Remove user" +msgstr "" + +#: Title.ChangePassword +msgid "Change password" +msgstr "" + +#: Button.DelUser +msgid "Remove" +msgstr "" + +#: Text.NewUser +msgid "Name of the new user" +msgstr "" + +#: Text.DelUser +msgid "User to remove" +msgstr "" + +#: Text.ChangePasswordUser +msgid "Change user's password" +msgstr "" + +#: Help.UserManagement +msgid "Some settings and actions of the CryptoBox are restricted to authenticated users. Common actions like opening and closing of volumes are usually possible without administrative permissions. Be careful when adding new users as they will have control over all features of the CryptoBox including partitioning, formatting and user management." +msgstr "" + +#: Help.AddUser +msgid "Add a new administrative user and define its password by entering it twice." +msgstr "" + +#: Help.ChangePassword +msgid "Choose a user of the following list and enter the new password twice." +msgstr "" + +#: Help.DelUser +msgid "Remove an administrative user. The user 'admin' is reserved and can not be removed." +msgstr "" + +#: SuccessMessage.UserAdded.Title +msgid "User added" +msgstr "" + +#: SuccessMessage.UserAdded.Text +msgid "The new user was added successfully." +msgstr "" + +#: SuccessMessage.UserRemoved.Title +msgid "User removed" +msgstr "" + +#: SuccessMessage.UserRemoved.Text +msgid "The user was removed successfully." +msgstr "" + +#: SuccessMessage.PasswordChanged.Title +msgid "Password changed" +msgstr "" + +#: SuccessMessage.PasswordChanged.Text +msgid "The password was changed successfully." +msgstr "" + +#: WarningMessage.InvalidUserName.Title +msgid "Invalid username" +msgstr "" + +#: WarningMessage.InvalidUserName.Text +msgid "The choosen username is invalid: only letters and digits are allowed." +msgstr "" + +#: WarningMessage.NeverRemoveReservedUser.Title +msgid "Reserved user" +msgstr "" + +#: WarningMessage.NeverRemoveReservedUser.Text +msgid "You may not remove a reserved user. Sorry!" +msgstr "" + +#: WarningMessage.UserAlreadyExists.Title +msgid "User exists" +msgstr "" + +#: WarningMessage.UserAlreadyExists.Text +msgid "The choosen username does already exist. Please choose another one." +msgstr "" diff --git a/v0.3.4.5/plugins/user_manager/intl/hu/cryptobox-server-feature-user_manager.po b/v0.3.4.5/plugins/user_manager/intl/hu/cryptobox-server-feature-user_manager.po new file mode 100644 index 0000000..4b87bd6 --- /dev/null +++ b/v0.3.4.5/plugins/user_manager/intl/hu/cryptobox-server-feature-user_manager.po @@ -0,0 +1,118 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:01+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "User manager" +msgstr "" + +#: Link +msgid "Users" +msgstr "" + +#: Title +msgid "User Manager" +msgstr "" + +#: Title.AddUser +msgid "Add new user" +msgstr "" + +#: Title.DelUser +msgid "Remove user" +msgstr "" + +#: Title.ChangePassword +msgid "Change password" +msgstr "" + +#: Button.DelUser +msgid "Remove" +msgstr "" + +#: Text.NewUser +msgid "Name of the new user" +msgstr "" + +#: Text.DelUser +msgid "User to remove" +msgstr "" + +#: Text.ChangePasswordUser +msgid "Change user's password" +msgstr "" + +#: Help.UserManagement +msgid "Some settings and actions of the CryptoBox are restricted to authenticated users. Common actions like opening and closing of volumes are usually possible without administrative permissions. Be careful when adding new users as they will have control over all features of the CryptoBox including partitioning, formatting and user management." +msgstr "" + +#: Help.AddUser +msgid "Add a new administrative user and define its password by entering it twice." +msgstr "" + +#: Help.ChangePassword +msgid "Choose a user of the following list and enter the new password twice." +msgstr "" + +#: Help.DelUser +msgid "Remove an administrative user. The user 'admin' is reserved and can not be removed." +msgstr "" + +#: SuccessMessage.UserAdded.Title +msgid "User added" +msgstr "" + +#: SuccessMessage.UserAdded.Text +msgid "The new user was added successfully." +msgstr "" + +#: SuccessMessage.UserRemoved.Title +msgid "User removed" +msgstr "" + +#: SuccessMessage.UserRemoved.Text +msgid "The user was removed successfully." +msgstr "" + +#: SuccessMessage.PasswordChanged.Title +msgid "Password changed" +msgstr "" + +#: SuccessMessage.PasswordChanged.Text +msgid "The password was changed successfully." +msgstr "" + +#: WarningMessage.InvalidUserName.Title +msgid "Invalid username" +msgstr "" + +#: WarningMessage.InvalidUserName.Text +msgid "The choosen username is invalid: only letters and digits are allowed." +msgstr "" + +#: WarningMessage.NeverRemoveReservedUser.Title +msgid "Reserved user" +msgstr "" + +#: WarningMessage.NeverRemoveReservedUser.Text +msgid "You may not remove a reserved user. Sorry!" +msgstr "" + +#: WarningMessage.UserAlreadyExists.Title +msgid "User exists" +msgstr "" + +#: WarningMessage.UserAlreadyExists.Text +msgid "The choosen username does already exist. Please choose another one." +msgstr "" diff --git a/v0.3.4.5/plugins/user_manager/intl/it/cryptobox-server-feature-user_manager.po b/v0.3.4.5/plugins/user_manager/intl/it/cryptobox-server-feature-user_manager.po new file mode 100644 index 0000000..0d18af9 --- /dev/null +++ b/v0.3.4.5/plugins/user_manager/intl/it/cryptobox-server-feature-user_manager.po @@ -0,0 +1,117 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:01+0100\n" +"PO-Revision-Date: 2007-03-05 11:50+0100\n" +"Last-Translator: Fabrizio Tarizzo \n" +"Language-Team: Italian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "User manager" +msgstr "Gestione degli utenti" + +#: Link +msgid "Users" +msgstr "Utenti" + +#: Title +msgid "User Manager" +msgstr "Gestione degli utenti" + +#: Title.AddUser +msgid "Add new user" +msgstr "Aggiungi nuovo utente" + +#: Title.DelUser +msgid "Remove user" +msgstr "Rimuovi utente" + +#: Title.ChangePassword +msgid "Change password" +msgstr "Modifica password" + +#: Button.DelUser +msgid "Remove" +msgstr "Rimuovi" + +#: Text.NewUser +msgid "Name of the new user" +msgstr "Nome del nuovo utente" + +#: Text.DelUser +msgid "User to remove" +msgstr "Utente da rimuovere" + +#: Text.ChangePasswordUser +msgid "Change user's password" +msgstr "Modifica la password dell'utente" + +#: Help.UserManagement +msgid "Some settings and actions of the CryptoBox are restricted to authenticated users. Common actions like opening and closing of volumes are usually possible without administrative permissions. Be careful when adding new users as they will have control over all features of the CryptoBox including partitioning, formatting and user management." +msgstr "Alcune impostazioni e azioni della CryptoBox sono riservate agli utenti autenticati. Le azioni comuni come l'apertura e la chiusura dei volumi sono di norma consentite senza privilegi amministrativi. Prestare attenzione quando si aggiungono nuovi utenti in quanto questi avranno il controllo completo delle funzionalità della CryptoBox compresi partizionamento, formattazione e gestione degli utenti." + +#: Help.AddUser +msgid "Add a new administrative user and define its password by entering it twice." +msgstr "Aggiungi un nuovo utente amministrativo e inserisci due volte la sua password." + +#: Help.ChangePassword +msgid "Choose a user of the following list and enter the new password twice." +msgstr "Scegliere un utente dalla lista seguente e inserire due volte la nuova password." + +#: Help.DelUser +msgid "Remove an administrative user. The user 'admin' is reserved and can not be removed." +msgstr "Rimuove un utente amministrativo. L'utente 'admin' è riservato e non può essere rimosso." + +#: SuccessMessage.UserAdded.Title +msgid "User added" +msgstr "Utente aggiunto" + +#: SuccessMessage.UserAdded.Text +msgid "The new user was added successfully." +msgstr "Il nuovo utente è stato aggiunto con successo." + +#: SuccessMessage.UserRemoved.Title +msgid "User removed" +msgstr "Utente rimosso" + +#: SuccessMessage.UserRemoved.Text +msgid "The user was removed successfully." +msgstr "Il nuovo utente è stato rimosso con successo." + +#: SuccessMessage.PasswordChanged.Title +msgid "Password changed" +msgstr "Password modificata" + +#: SuccessMessage.PasswordChanged.Text +msgid "The password was changed successfully." +msgstr "La password è stata modificata con successo." + +#: WarningMessage.InvalidUserName.Title +msgid "Invalid username" +msgstr "Nome utente non valido" + +#: WarningMessage.InvalidUserName.Text +msgid "The choosen username is invalid: only letters and digits are allowed." +msgstr "Il nome scelto per l'utente non è valido: sono consentite esclusivamente lettere e cifre." + +#: WarningMessage.NeverRemoveReservedUser.Title +msgid "Reserved user" +msgstr "Utente riservato" + +#: WarningMessage.NeverRemoveReservedUser.Text +msgid "You may not remove a reserved user. Sorry!" +msgstr "Non è possibile rimuovere un utente riservato." + +#: WarningMessage.UserAlreadyExists.Title +msgid "User exists" +msgstr "Utente esistente" + +#: WarningMessage.UserAlreadyExists.Text +msgid "The choosen username does already exist. Please choose another one." +msgstr "Il nome scelto per l'utente esiste già. Sceglierne un altro." diff --git a/v0.3.4.5/plugins/user_manager/intl/ja/cryptobox-server-feature-user_manager.po b/v0.3.4.5/plugins/user_manager/intl/ja/cryptobox-server-feature-user_manager.po new file mode 100644 index 0000000..79d4e5b --- /dev/null +++ b/v0.3.4.5/plugins/user_manager/intl/ja/cryptobox-server-feature-user_manager.po @@ -0,0 +1,117 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:01+0100\n" +"PO-Revision-Date: 2007-02-26 03:42+0100\n" +"Last-Translator: kinneko \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "User manager" +msgstr "利用者の管理" + +#: Link +msgid "Users" +msgstr "利用者" + +#: Title +msgid "User Manager" +msgstr "利用者の管理" + +#: Title.AddUser +msgid "Add new user" +msgstr "新しい利用者を追加する" + +#: Title.DelUser +msgid "Remove user" +msgstr "利用者を削除する" + +#: Title.ChangePassword +msgid "Change password" +msgstr "パスワードを変更する" + +#: Button.DelUser +msgid "Remove" +msgstr "削除" + +#: Text.NewUser +msgid "Name of the new user" +msgstr "新らしい利用者の名前" + +#: Text.DelUser +msgid "User to remove" +msgstr "削除する利用者" + +#: Text.ChangePasswordUser +msgid "Change user's password" +msgstr "利用者のパスワードを変更する" + +#: Help.UserManagement +msgid "Some settings and actions of the CryptoBox are restricted to authenticated users. Common actions like opening and closing of volumes are usually possible without administrative permissions. Be careful when adding new users as they will have control over all features of the CryptoBox including partitioning, formatting and user management." +msgstr "クリプトボックスのいくつかの設定や操作は、認証された利用者だけに制限されています。ボリュームの開閉のような一般的な操作は、通常管理の許可なしで可能です。区画作成、初期化、利用者管理を含む、すべての権限を持つような新しい利用者を追加する場合は、慎重におこなってください。" + +#: Help.AddUser +msgid "Add a new administrative user and define its password by entering it twice." +msgstr "新しく管理権限のある利用者を追加し、パスワードを2度入力して設定します。" + +#: Help.ChangePassword +msgid "Choose a user of the following list and enter the new password twice." +msgstr "リストのなかから利用者を選び、パスワードを2度入力して設定します。" + +#: Help.DelUser +msgid "Remove an administrative user. The user 'admin' is reserved and can not be removed." +msgstr "管理権限のある利用者を削除します。'admin'利用者は予約されていますので、削除することはできません。" + +#: SuccessMessage.UserAdded.Title +msgid "User added" +msgstr "利用者を追加しました" + +#: SuccessMessage.UserAdded.Text +msgid "The new user was added successfully." +msgstr "新しい利用者を追加することに成功しました。" + +#: SuccessMessage.UserRemoved.Title +msgid "User removed" +msgstr "利用者を削除しました" + +#: SuccessMessage.UserRemoved.Text +msgid "The user was removed successfully." +msgstr "利用者を削除することに成功しました。" + +#: SuccessMessage.PasswordChanged.Title +msgid "Password changed" +msgstr "パスワードを変更しました" + +#: SuccessMessage.PasswordChanged.Text +msgid "The password was changed successfully." +msgstr "パスワードの変更に成功しました。" + +#: WarningMessage.InvalidUserName.Title +msgid "Invalid username" +msgstr "無効な利用者名です" + +#: WarningMessage.InvalidUserName.Text +msgid "The choosen username is invalid: only letters and digits are allowed." +msgstr "登録しようとした利用者名は無効です:使用できるのは英数字だけです。" + +#: WarningMessage.NeverRemoveReservedUser.Title +msgid "Reserved user" +msgstr "予約された利用者名です" + +#: WarningMessage.NeverRemoveReservedUser.Text +msgid "You may not remove a reserved user. Sorry!" +msgstr "予約された利用者名は削除できません。" + +#: WarningMessage.UserAlreadyExists.Title +msgid "User exists" +msgstr "同名の利用者がすでに存在します" + +#: WarningMessage.UserAlreadyExists.Text +msgid "The choosen username does already exist. Please choose another one." +msgstr "登録しようとした利用者名と同名の利用者がすでに存在します。他の名前を選んでください。" diff --git a/v0.3.4.5/plugins/user_manager/intl/nl/cryptobox-server-feature-user_manager.po b/v0.3.4.5/plugins/user_manager/intl/nl/cryptobox-server-feature-user_manager.po new file mode 100644 index 0000000..4b87bd6 --- /dev/null +++ b/v0.3.4.5/plugins/user_manager/intl/nl/cryptobox-server-feature-user_manager.po @@ -0,0 +1,118 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:01+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "User manager" +msgstr "" + +#: Link +msgid "Users" +msgstr "" + +#: Title +msgid "User Manager" +msgstr "" + +#: Title.AddUser +msgid "Add new user" +msgstr "" + +#: Title.DelUser +msgid "Remove user" +msgstr "" + +#: Title.ChangePassword +msgid "Change password" +msgstr "" + +#: Button.DelUser +msgid "Remove" +msgstr "" + +#: Text.NewUser +msgid "Name of the new user" +msgstr "" + +#: Text.DelUser +msgid "User to remove" +msgstr "" + +#: Text.ChangePasswordUser +msgid "Change user's password" +msgstr "" + +#: Help.UserManagement +msgid "Some settings and actions of the CryptoBox are restricted to authenticated users. Common actions like opening and closing of volumes are usually possible without administrative permissions. Be careful when adding new users as they will have control over all features of the CryptoBox including partitioning, formatting and user management." +msgstr "" + +#: Help.AddUser +msgid "Add a new administrative user and define its password by entering it twice." +msgstr "" + +#: Help.ChangePassword +msgid "Choose a user of the following list and enter the new password twice." +msgstr "" + +#: Help.DelUser +msgid "Remove an administrative user. The user 'admin' is reserved and can not be removed." +msgstr "" + +#: SuccessMessage.UserAdded.Title +msgid "User added" +msgstr "" + +#: SuccessMessage.UserAdded.Text +msgid "The new user was added successfully." +msgstr "" + +#: SuccessMessage.UserRemoved.Title +msgid "User removed" +msgstr "" + +#: SuccessMessage.UserRemoved.Text +msgid "The user was removed successfully." +msgstr "" + +#: SuccessMessage.PasswordChanged.Title +msgid "Password changed" +msgstr "" + +#: SuccessMessage.PasswordChanged.Text +msgid "The password was changed successfully." +msgstr "" + +#: WarningMessage.InvalidUserName.Title +msgid "Invalid username" +msgstr "" + +#: WarningMessage.InvalidUserName.Text +msgid "The choosen username is invalid: only letters and digits are allowed." +msgstr "" + +#: WarningMessage.NeverRemoveReservedUser.Title +msgid "Reserved user" +msgstr "" + +#: WarningMessage.NeverRemoveReservedUser.Text +msgid "You may not remove a reserved user. Sorry!" +msgstr "" + +#: WarningMessage.UserAlreadyExists.Title +msgid "User exists" +msgstr "" + +#: WarningMessage.UserAlreadyExists.Text +msgid "The choosen username does already exist. Please choose another one." +msgstr "" diff --git a/v0.3.4.5/plugins/user_manager/intl/pl/cryptobox-server-feature-user_manager.po b/v0.3.4.5/plugins/user_manager/intl/pl/cryptobox-server-feature-user_manager.po new file mode 100644 index 0000000..7ea1d4d --- /dev/null +++ b/v0.3.4.5/plugins/user_manager/intl/pl/cryptobox-server-feature-user_manager.po @@ -0,0 +1,117 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-04-01 15:53+0200\n" +"PO-Revision-Date: 2007-03-30 09:44+0200\n" +"Last-Translator: Andrzej S. Kaznowski \n" +"Language-Team: POLSKI \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "User manager" +msgstr "Zarządzanie użytkownikami" + +#: Link +msgid "Users" +msgstr "Użytkownicy" + +#: Title +msgid "User Manager" +msgstr "Zarządzanie użytkownikami" + +#: Title.AddUser +msgid "Add new user" +msgstr "Dodaj użytkownika" + +#: Title.DelUser +msgid "Remove user" +msgstr "Usuń użytkownika" + +#: Title.ChangePassword +msgid "Change password" +msgstr "Zmień hasło" + +#: Button.DelUser +msgid "Remove" +msgstr "Usuń" + +#: Text.NewUser +msgid "Name of the new user" +msgstr "Nazwa nowego użytkownika" + +#: Text.DelUser +msgid "User to remove" +msgstr "Użytkownik do usunięcia" + +#: Text.ChangePasswordUser +msgid "Change user's password" +msgstr "Zmień hasło użytkownika" + +#: Help.UserManagement +msgid "Some settings and actions of the CryptoBox are restricted to authenticated users. Common actions like opening and closing of volumes are usually possible without administrative permissions. Be careful when adding new users as they will have control over all features of the CryptoBox including partitioning, formatting and user management." +msgstr "Niektóre ustawienia i czynności w systemie CryptoBox są ograniczone tylko dla zatwierdzonych użytkowników. Zwyczajne czynności, takie jak otwieranie i zamykanie woluminów są normalnie możliwe bez zgody administratora. Uważaj przy dodawaniu nowych użytkowników, ponieważ będą oni mieli kontrolę nad wszystkimi funkcjami systemu CryptoBox włącznie z partycjonowaniem, formatowaniem oraz zarządzaniem użytkownikami." + +#: Help.AddUser +msgid "Add a new administrative user and define its password by entering it twice." +msgstr "Dodaj nowego zatwierdzonego użytkownika oraz zdefiniuj jego hasło wpisukąc je dwa razy." + +#: Help.ChangePassword +msgid "Choose a user of the following list and enter the new password twice." +msgstr "Wybierz użytkownika z podanej listy i wpisz nowe hasło dwa razy." + +#: Help.DelUser +msgid "Remove an administrative user. The user 'admin' is reserved and can not be removed." +msgstr "Usuń zatwierdzonego użytkownika. Użytkownik 'admin' jest zastrzeżony i nie może być usunięty." + +#: SuccessMessage.UserAdded.Title +msgid "User added" +msgstr "Dodano użytkownika" + +#: SuccessMessage.UserAdded.Text +msgid "The new user was added successfully." +msgstr "Nowy użytkownik został pomyślnie dodany." + +#: SuccessMessage.UserRemoved.Title +msgid "User removed" +msgstr "Usunięto użytkownika" + +#: SuccessMessage.UserRemoved.Text +msgid "The user was removed successfully." +msgstr "Pomyślnie usunieto użytkownika." + +#: SuccessMessage.PasswordChanged.Title +msgid "Password changed" +msgstr "Zmieniono hasło" + +#: SuccessMessage.PasswordChanged.Text +msgid "The password was changed successfully." +msgstr "Pomyślnie zmieniono hasło." + +#: WarningMessage.InvalidUserName.Title +msgid "Invalid username" +msgstr "Nieprawidłowa nazwa użytkownika" + +#: WarningMessage.InvalidUserName.Text +msgid "The choosen username is invalid: only letters and digits are allowed." +msgstr "Nazwa użytkownika jest nieprawidłowa: dozwolone są tylko litery i cyfry." + +#: WarningMessage.NeverRemoveReservedUser.Title +msgid "Reserved user" +msgstr "Zastrzeżony użytkownik" + +#: WarningMessage.NeverRemoveReservedUser.Text +msgid "You may not remove a reserved user. Sorry!" +msgstr "Nie możesz usunąć użytkownika zastrzeżonego." + +#: WarningMessage.UserAlreadyExists.Title +msgid "User exists" +msgstr "Użytkownik już istnieje" + +#: WarningMessage.UserAlreadyExists.Text +msgid "The choosen username does already exist. Please choose another one." +msgstr "Wybrana nazwa użytkownika już istnieje. Proszę wybrać inną nazwę." diff --git a/v0.3.4.5/plugins/user_manager/intl/pt/cryptobox-server-feature-user_manager.po b/v0.3.4.5/plugins/user_manager/intl/pt/cryptobox-server-feature-user_manager.po new file mode 100644 index 0000000..4b87bd6 --- /dev/null +++ b/v0.3.4.5/plugins/user_manager/intl/pt/cryptobox-server-feature-user_manager.po @@ -0,0 +1,118 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:01+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "User manager" +msgstr "" + +#: Link +msgid "Users" +msgstr "" + +#: Title +msgid "User Manager" +msgstr "" + +#: Title.AddUser +msgid "Add new user" +msgstr "" + +#: Title.DelUser +msgid "Remove user" +msgstr "" + +#: Title.ChangePassword +msgid "Change password" +msgstr "" + +#: Button.DelUser +msgid "Remove" +msgstr "" + +#: Text.NewUser +msgid "Name of the new user" +msgstr "" + +#: Text.DelUser +msgid "User to remove" +msgstr "" + +#: Text.ChangePasswordUser +msgid "Change user's password" +msgstr "" + +#: Help.UserManagement +msgid "Some settings and actions of the CryptoBox are restricted to authenticated users. Common actions like opening and closing of volumes are usually possible without administrative permissions. Be careful when adding new users as they will have control over all features of the CryptoBox including partitioning, formatting and user management." +msgstr "" + +#: Help.AddUser +msgid "Add a new administrative user and define its password by entering it twice." +msgstr "" + +#: Help.ChangePassword +msgid "Choose a user of the following list and enter the new password twice." +msgstr "" + +#: Help.DelUser +msgid "Remove an administrative user. The user 'admin' is reserved and can not be removed." +msgstr "" + +#: SuccessMessage.UserAdded.Title +msgid "User added" +msgstr "" + +#: SuccessMessage.UserAdded.Text +msgid "The new user was added successfully." +msgstr "" + +#: SuccessMessage.UserRemoved.Title +msgid "User removed" +msgstr "" + +#: SuccessMessage.UserRemoved.Text +msgid "The user was removed successfully." +msgstr "" + +#: SuccessMessage.PasswordChanged.Title +msgid "Password changed" +msgstr "" + +#: SuccessMessage.PasswordChanged.Text +msgid "The password was changed successfully." +msgstr "" + +#: WarningMessage.InvalidUserName.Title +msgid "Invalid username" +msgstr "" + +#: WarningMessage.InvalidUserName.Text +msgid "The choosen username is invalid: only letters and digits are allowed." +msgstr "" + +#: WarningMessage.NeverRemoveReservedUser.Title +msgid "Reserved user" +msgstr "" + +#: WarningMessage.NeverRemoveReservedUser.Text +msgid "You may not remove a reserved user. Sorry!" +msgstr "" + +#: WarningMessage.UserAlreadyExists.Title +msgid "User exists" +msgstr "" + +#: WarningMessage.UserAlreadyExists.Text +msgid "The choosen username does already exist. Please choose another one." +msgstr "" diff --git a/v0.3.4.5/plugins/user_manager/intl/ru/cryptobox-server-feature-user_manager.po b/v0.3.4.5/plugins/user_manager/intl/ru/cryptobox-server-feature-user_manager.po new file mode 100644 index 0000000..4b87bd6 --- /dev/null +++ b/v0.3.4.5/plugins/user_manager/intl/ru/cryptobox-server-feature-user_manager.po @@ -0,0 +1,118 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:01+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "User manager" +msgstr "" + +#: Link +msgid "Users" +msgstr "" + +#: Title +msgid "User Manager" +msgstr "" + +#: Title.AddUser +msgid "Add new user" +msgstr "" + +#: Title.DelUser +msgid "Remove user" +msgstr "" + +#: Title.ChangePassword +msgid "Change password" +msgstr "" + +#: Button.DelUser +msgid "Remove" +msgstr "" + +#: Text.NewUser +msgid "Name of the new user" +msgstr "" + +#: Text.DelUser +msgid "User to remove" +msgstr "" + +#: Text.ChangePasswordUser +msgid "Change user's password" +msgstr "" + +#: Help.UserManagement +msgid "Some settings and actions of the CryptoBox are restricted to authenticated users. Common actions like opening and closing of volumes are usually possible without administrative permissions. Be careful when adding new users as they will have control over all features of the CryptoBox including partitioning, formatting and user management." +msgstr "" + +#: Help.AddUser +msgid "Add a new administrative user and define its password by entering it twice." +msgstr "" + +#: Help.ChangePassword +msgid "Choose a user of the following list and enter the new password twice." +msgstr "" + +#: Help.DelUser +msgid "Remove an administrative user. The user 'admin' is reserved and can not be removed." +msgstr "" + +#: SuccessMessage.UserAdded.Title +msgid "User added" +msgstr "" + +#: SuccessMessage.UserAdded.Text +msgid "The new user was added successfully." +msgstr "" + +#: SuccessMessage.UserRemoved.Title +msgid "User removed" +msgstr "" + +#: SuccessMessage.UserRemoved.Text +msgid "The user was removed successfully." +msgstr "" + +#: SuccessMessage.PasswordChanged.Title +msgid "Password changed" +msgstr "" + +#: SuccessMessage.PasswordChanged.Text +msgid "The password was changed successfully." +msgstr "" + +#: WarningMessage.InvalidUserName.Title +msgid "Invalid username" +msgstr "" + +#: WarningMessage.InvalidUserName.Text +msgid "The choosen username is invalid: only letters and digits are allowed." +msgstr "" + +#: WarningMessage.NeverRemoveReservedUser.Title +msgid "Reserved user" +msgstr "" + +#: WarningMessage.NeverRemoveReservedUser.Text +msgid "You may not remove a reserved user. Sorry!" +msgstr "" + +#: WarningMessage.UserAlreadyExists.Title +msgid "User exists" +msgstr "" + +#: WarningMessage.UserAlreadyExists.Text +msgid "The choosen username does already exist. Please choose another one." +msgstr "" diff --git a/v0.3.4.5/plugins/user_manager/intl/sl/cryptobox-server-feature-user_manager.po b/v0.3.4.5/plugins/user_manager/intl/sl/cryptobox-server-feature-user_manager.po new file mode 100644 index 0000000..a0ddbce --- /dev/null +++ b/v0.3.4.5/plugins/user_manager/intl/sl/cryptobox-server-feature-user_manager.po @@ -0,0 +1,117 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:01+0100\n" +"PO-Revision-Date: 2007-02-06 15:47+0100\n" +"Last-Translator: tenzin \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "User manager" +msgstr "Upravitelj uporabnika" + +#: Link +msgid "Users" +msgstr "Uporabniki" + +#: Title +msgid "User Manager" +msgstr "Upravitelj uporabnika" + +#: Title.AddUser +msgid "Add new user" +msgstr "Dodaj novega uporabnika" + +#: Title.DelUser +msgid "Remove user" +msgstr "Odstrani uporabnika" + +#: Title.ChangePassword +msgid "Change password" +msgstr "Spremeni geslo" + +#: Button.DelUser +msgid "Remove" +msgstr "Odstrani" + +#: Text.NewUser +msgid "Name of the new user" +msgstr "Ime novega uporabnika" + +#: Text.DelUser +msgid "User to remove" +msgstr "Uporabnik za odstranitev" + +#: Text.ChangePasswordUser +msgid "Change user's password" +msgstr "Spremeni uporabnikovo geslo" + +#: Help.UserManagement +msgid "Some settings and actions of the CryptoBox are restricted to authenticated users. Common actions like opening and closing of volumes are usually possible without administrative permissions. Be careful when adding new users as they will have control over all features of the CryptoBox including partitioning, formatting and user management." +msgstr "Nekatere nastavitve in aktivnosti so pridržane zgolj za poverjene uporabnike. Obče dejavnosti, kot so odpiranje in zapiranje vsebin, so navadno omogočene brez dovoljenja skrbnika sistema. Bodite previdni, ko dodajate nove uporabnike, saj bodo le ti imeli nadzor nad vsemi funkcijami Cryptoboxa, vključno s porazdelitvijo diskov , formatiranjem in upravljanju z uporabniki." + +#: Help.AddUser +msgid "Add a new administrative user and define its password by entering it twice." +msgstr "Dodaj novega uporabnika - administratorja in definiraj njegovo geslo z dvojnim vnosom." + +#: Help.ChangePassword +msgid "Choose a user of the following list and enter the new password twice." +msgstr "Izberi uporabnika z liste in dvakrat vnesi geslo." + +#: Help.DelUser +msgid "Remove an administrative user. The user 'admin' is reserved and can not be removed." +msgstr "Odstrani uporabnika-administratorja. Uporabnik \"admin\" je rezerviran in ne more biti odstranjen." + +#: SuccessMessage.UserAdded.Title +msgid "User added" +msgstr "Uporabnik dodan" + +#: SuccessMessage.UserAdded.Text +msgid "The new user was added successfully." +msgstr "Nov uporabnik uspešno dodan." + +#: SuccessMessage.UserRemoved.Title +msgid "User removed" +msgstr "Uporabnik odstranjen." + +#: SuccessMessage.UserRemoved.Text +msgid "The user was removed successfully." +msgstr "Uporabnik je bil uspešno odstranjen." + +#: SuccessMessage.PasswordChanged.Title +msgid "Password changed" +msgstr "Geslo spremenjeno" + +#: SuccessMessage.PasswordChanged.Text +msgid "The password was changed successfully." +msgstr "Geslo uspešno spremenjeno." + +#: WarningMessage.InvalidUserName.Title +msgid "Invalid username" +msgstr "Neveljavno uporabniško ime" + +#: WarningMessage.InvalidUserName.Text +msgid "The choosen username is invalid: only letters and digits are allowed." +msgstr "Izbrano uporabniško ime je neveljavno. Dovoljene so zgolj črke in številke." + +#: WarningMessage.NeverRemoveReservedUser.Title +msgid "Reserved user" +msgstr "Uporabnik rezerviran" + +#: WarningMessage.NeverRemoveReservedUser.Text +msgid "You may not remove a reserved user. Sorry!" +msgstr "Rezerviranega uporabnika ne morete odstraniti - oprostite! " + +#: WarningMessage.UserAlreadyExists.Title +msgid "User exists" +msgstr "Uporabnik že obstaja" + +#: WarningMessage.UserAlreadyExists.Text +msgid "The choosen username does already exist. Please choose another one." +msgstr "Izbrano uporabniško ime že obstaja. Prosimo izberite novega." diff --git a/v0.3.4.5/plugins/user_manager/intl/sv/cryptobox-server-feature-user_manager.po b/v0.3.4.5/plugins/user_manager/intl/sv/cryptobox-server-feature-user_manager.po new file mode 100644 index 0000000..4b87bd6 --- /dev/null +++ b/v0.3.4.5/plugins/user_manager/intl/sv/cryptobox-server-feature-user_manager.po @@ -0,0 +1,118 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:01+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "User manager" +msgstr "" + +#: Link +msgid "Users" +msgstr "" + +#: Title +msgid "User Manager" +msgstr "" + +#: Title.AddUser +msgid "Add new user" +msgstr "" + +#: Title.DelUser +msgid "Remove user" +msgstr "" + +#: Title.ChangePassword +msgid "Change password" +msgstr "" + +#: Button.DelUser +msgid "Remove" +msgstr "" + +#: Text.NewUser +msgid "Name of the new user" +msgstr "" + +#: Text.DelUser +msgid "User to remove" +msgstr "" + +#: Text.ChangePasswordUser +msgid "Change user's password" +msgstr "" + +#: Help.UserManagement +msgid "Some settings and actions of the CryptoBox are restricted to authenticated users. Common actions like opening and closing of volumes are usually possible without administrative permissions. Be careful when adding new users as they will have control over all features of the CryptoBox including partitioning, formatting and user management." +msgstr "" + +#: Help.AddUser +msgid "Add a new administrative user and define its password by entering it twice." +msgstr "" + +#: Help.ChangePassword +msgid "Choose a user of the following list and enter the new password twice." +msgstr "" + +#: Help.DelUser +msgid "Remove an administrative user. The user 'admin' is reserved and can not be removed." +msgstr "" + +#: SuccessMessage.UserAdded.Title +msgid "User added" +msgstr "" + +#: SuccessMessage.UserAdded.Text +msgid "The new user was added successfully." +msgstr "" + +#: SuccessMessage.UserRemoved.Title +msgid "User removed" +msgstr "" + +#: SuccessMessage.UserRemoved.Text +msgid "The user was removed successfully." +msgstr "" + +#: SuccessMessage.PasswordChanged.Title +msgid "Password changed" +msgstr "" + +#: SuccessMessage.PasswordChanged.Text +msgid "The password was changed successfully." +msgstr "" + +#: WarningMessage.InvalidUserName.Title +msgid "Invalid username" +msgstr "" + +#: WarningMessage.InvalidUserName.Text +msgid "The choosen username is invalid: only letters and digits are allowed." +msgstr "" + +#: WarningMessage.NeverRemoveReservedUser.Title +msgid "Reserved user" +msgstr "" + +#: WarningMessage.NeverRemoveReservedUser.Text +msgid "You may not remove a reserved user. Sorry!" +msgstr "" + +#: WarningMessage.UserAlreadyExists.Title +msgid "User exists" +msgstr "" + +#: WarningMessage.UserAlreadyExists.Text +msgid "The choosen username does already exist. Please choose another one." +msgstr "" diff --git a/v0.3.4.5/plugins/user_manager/intl/ur/cryptobox-server-feature-user_manager.po b/v0.3.4.5/plugins/user_manager/intl/ur/cryptobox-server-feature-user_manager.po new file mode 100644 index 0000000..35e05f6 --- /dev/null +++ b/v0.3.4.5/plugins/user_manager/intl/ur/cryptobox-server-feature-user_manager.po @@ -0,0 +1,118 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-02-05 23:28+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "User manager" +msgstr "" + +#: Link +msgid "Users" +msgstr "" + +#: Title +msgid "User Manager" +msgstr "" + +#: Title.AddUser +msgid "Add new user" +msgstr "" + +#: Title.DelUser +msgid "Remove user" +msgstr "" + +#: Title.ChangePassword +msgid "Change password" +msgstr "" + +#: Button.DelUser +msgid "Remove" +msgstr "" + +#: Text.NewUser +msgid "Name of the new user" +msgstr "" + +#: Text.DelUser +msgid "User to remove" +msgstr "" + +#: Text.ChangePasswordUser +msgid "Change user's password" +msgstr "" + +#: Help.UserManagement +msgid "Some settings and actions of the CryptoBox are restricted to authenticated users. Common actions like opening and closing of volumes are usually possible without administrative permissions. Be careful when adding new users as they will have control over all features of the CryptoBox including partitioning, formatting and user management." +msgstr "" + +#: Help.AddUser +msgid "Add a new administrative user and define its password by entering it twice." +msgstr "" + +#: Help.ChangePassword +msgid "Choose a user of the following list and enter the new password twice." +msgstr "" + +#: Help.DelUser +msgid "Remove an administrative user. The user 'admin' is reserved and can not be removed." +msgstr "" + +#: SuccessMessage.UserAdded.Title +msgid "User added" +msgstr "" + +#: SuccessMessage.UserAdded.Text +msgid "The new user was added successfully." +msgstr "" + +#: SuccessMessage.UserRemoved.Title +msgid "User removed" +msgstr "" + +#: SuccessMessage.UserRemoved.Text +msgid "The user was removed successfully." +msgstr "" + +#: SuccessMessage.PasswordChanged.Title +msgid "Password changed" +msgstr "" + +#: SuccessMessage.PasswordChanged.Text +msgid "The password was changed successfully." +msgstr "" + +#: WarningMessage.InvalidUserName.Title +msgid "Invalid username" +msgstr "" + +#: WarningMessage.InvalidUserName.Text +msgid "The choosen username is invalid: only letters and digits are allowed." +msgstr "" + +#: WarningMessage.NeverRemoveReservedUser.Title +msgid "Reserved user" +msgstr "" + +#: WarningMessage.NeverRemoveReservedUser.Text +msgid "You may not remove a reserved user. Sorry!" +msgstr "" + +#: WarningMessage.UserAlreadyExists.Title +msgid "User exists" +msgstr "" + +#: WarningMessage.UserAlreadyExists.Text +msgid "The choosen username does already exist. Please choose another one." +msgstr "" diff --git a/v0.3.4.5/plugins/user_manager/language.hdf b/v0.3.4.5/plugins/user_manager/language.hdf new file mode 100644 index 0000000..b4d43bc --- /dev/null +++ b/v0.3.4.5/plugins/user_manager/language.hdf @@ -0,0 +1,65 @@ +Name = User manager +Link = Users + +Title = User Manager +Title { + AddUser = Add new user + DelUser = Remove user + ChangePassword = Change password +} + +Button { + AddUser = Add new user + DelUser = Remove + ChangePassword = Change password +} + +Text { + NewUser = Name of the new user + DelUser = User to remove + ChangePasswordUser = Change user's password +} + + +Help { + UserManagement = Some settings and actions of the CryptoBox are restricted to authenticated users. Common actions like opening and closing of volumes are usually possible without administrative permissions. Be careful when adding new users as they will have control over all features of the CryptoBox including partitioning, formatting and user management. + AddUser = Add a new administrative user and define its password by entering it twice. + ChangePassword = Choose a user of the following list and enter the new password twice. + DelUser = Remove an administrative user. The user 'admin' is reserved and can not be removed. +} + + +SuccessMessage { + UserAdded { + Title = User added + Text = The new user was added successfully. + } + + UserRemoved { + Title = User removed + Text = The user was removed successfully. + } + + PasswordChanged { + Title = Password changed + Text = The password was changed successfully. + } +} + + +WarningMessage { + InvalidUserName { + Title = Invalid username + Text = The choosen username is invalid: only letters and digits are allowed. + } + + NeverRemoveReservedUser { + Title = Reserved user + Text = You may not remove a reserved user. Sorry! + } + + UserAlreadyExists { + Title = User exists + Text = The choosen username does already exist. Please choose another one. + } +} diff --git a/v0.3.4.5/plugins/user_manager/plugin_icon.gif b/v0.3.4.5/plugins/user_manager/plugin_icon.gif new file mode 100644 index 0000000000000000000000000000000000000000..cc17170feacf2586aeaa229d250f8ad41157ae88 GIT binary patch literal 2902 zcmV-c3#s%+Nk%w1VL$*t0O$Vz00968000031_1;B0|o&K2Mh-a1`!1f6Au6#2@Meu z4-pX}8x{Z+6&x%K6(kh^GYJ?M7#2SV9UB`X8XGJf9vmMaC`k+=A|5&)A}~H40U;qm zFeU&vA_6uZC?+Q*DJLsMB>-j(E-Nf5fCL*iE&(YjNlzvKiUJ}oEj>{v30EF5g$f{X z5j8I_P((BUWEwUzG%}3{DM}|gl>{uC05mT%TY(fQmIyM15-?XX12;J~VIw^>Hd8k@ zN;NZRpb0%hJtK=4IX60MKR`ZZEki#)Qe87hJU?fb8#_WkWTX^DeJDmmMnjbxNkv6i zLqc?)97#w@N1!1_svS?U8c{__eritwXHf%bQUFj?g%Syoq7c~$^V zQizUD0Bu<*SyzdaQ~;S$0EkFsr#WG!O#okDUR+#!&^Z9QGGt+3k+xF!^!^73CPOF_p;Fc$Vbb~%Ky|Q^1RjD%hUeXInmS5^3{9R*wxk5?Ah7s z`^)0+-mCxMd;i{s|Kf7r;ojlo^5o{@|LmUs?xz3lvFz>l?(h2k^TGA<_x}3p`uzX? z{qz0*{Qv*|A^sIZa%Ew3Wn>_CX>@2HRA^-&M@dak03rDV0SW;B04x9i002M$KmY&; z{s8|897s^$00ILJ4k*a5p~Hs|BmN^m07MflF%%?}=uqK8jvxgJs9@=rNmQVkPz?F+ zAb|!SDj+1lG9rNpuey~x*Nxb#PFe(n91tKzCtSE#b!sAjW=)3${3x5JFJ8KCzfd{) z;8fxOEyT2S>lv$)ngCs&4kS<^mbQ5D?xnNlv(p!$1ru%*Sn=1ld-LWhQ%VG{+JORM z#Oij=YB{=P@q9Emz(9lu1`;-vnr_~_c-@rYBIPIZ;eiE+pd!{yTsLc2UpbQeaex9f zok(?Z^hIL;QpC!|)0a+MGF+$*fk>-Xzz0&elu1{XRq0uS6+jW2j*8Tu3Q<}9yMC=K z7AfVE58L+BDVE9Vmj1+8IG}(cWx~^GOZF2E+gGe!_1W3IRl*g&J^tL1Y0+C_zAtH=dJ@e$*)ihX4)uVF@Ut zSkj3fO$4x4O#-08k3aaV!%Ghb2ynmw0R%t+5>{B@0s()-!rEA&p`?g^0aWmXAAaDW z#s~s9z=N74N+iG&+34esKlc>l1`;lq-~tqVS^)(T1!w_^pu{9Y%rE}2fTD;N1YCe; z01Y6J=LJhp;RO?vh9rOyv)CfdJ#XH_OCopN;YPEGT(ZVUxy6DMDy*QwCQ=me44AAY~FYpui4VXhB4sDtPiq2Te7h3_CN^ z3`q?&=v-+-!)_e3#u^_x!T|g5vrj(sK=XzMw-%s58m_dWcm66I6i`$*>@*Y1EmhEf z0}fQ|43*D77i+J^76_orJ09<2&o;SuGRPpF=xwsoG3~RJ{XE`P&!AFupdwQZms}1(@ONfOf>A^S>la`A#CIjKOIw~B%nG6X)0%+&U zU%qmav8={5VFAipJ}?S50B7|CaKSrV&=y_(XuuTRc*S%Q(;L||VIy~uM<67D1UE1Y zNW{6ZMErmcX0ri_z)(eWT63LtjD!G+K+q}3fCMDSff+jz0HCSjp@96s0usc9O`=nl z>ZBz=zc>mV3}6K$0KyGG8q$&4kC(+dDMW(?g&$yG09T;KA%A#HZm`pYu6V!zJb(rk zSd|4bkby`MRMKLJ0;Omx>IMREg=#XjsWVmJDbgT-BN!tOSMUUjKD4?FkuD(5El}uWnFSZGD)<(HfXWEY+19o z2{u%hn3QNlBettRF?cr^c|6?e#tV`JxfZO&N^bzL5XbhummA&~#da}a!ZO^Ko25kV zV+q30pgt6P=_No*rR!c=UgH|BU~mx~YzX}7QMD5u2vL3}RC1}p5 z2Lwx-$kiV9j0k|11I7Cx0`MCH0#S)+7x{~FV6;O24U)(TKm~okw+ShMHE%PVAe!Mo zD2QofJMi1$7l*9hB1*7vSezmRR|>hxBddTHl)(V}R=Lb4^6{D5{2vRyct8LEJ5faK A{{R30 literal 0 HcmV?d00001 diff --git a/v0.3.4.5/plugins/user_manager/plugin_icon.png b/v0.3.4.5/plugins/user_manager/plugin_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..dc8ef9b8a5b59d985dd9e15acd162615c6572048 GIT binary patch literal 4227 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 + + + + +
+ + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+ + +
+ + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+ + + 1 ?> +
+ + + + + +
+ + + + +
+
+ + diff --git a/v0.3.4.5/plugins/user_manager/user_manager.css b/v0.3.4.5/plugins/user_manager/user_manager.css new file mode 100644 index 0000000..1959d1f --- /dev/null +++ b/v0.3.4.5/plugins/user_manager/user_manager.css @@ -0,0 +1,6 @@ +table.user_manager td.left_column { + text-align:right; + padding-left:30px; + padding-right:5px; + } + diff --git a/v0.3.4.5/plugins/user_manager/user_manager.py b/v0.3.4.5/plugins/user_manager/user_manager.py new file mode 100644 index 0000000..1d3f4a0 --- /dev/null +++ b/v0.3.4.5/plugins/user_manager/user_manager.py @@ -0,0 +1,106 @@ +# +# Copyright 2006 sense.lab e.V. +# +# This file is part of the CryptoBox. +# +# The CryptoBox 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 CryptoBox 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 the CryptoBox; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +__revision__ = "$Id" + +import cryptobox.plugins.base + +RESERVED_USERS = [ "admin" ] + +class user_manager(cryptobox.plugins.base.CryptoBoxPlugin): + + plugin_capabilities = [ "system" ] + plugin_visibility = [ "preferences" ] + request_auth = True + rank = 45 + + def do_action(self, store=None, user=None, new_pw=None, new_pw2=None): + import re + admin_dict = self.cbox.prefs.user_db["admins"] + self.__clean_hdf() + if store is None: + pass + elif store == "add_user": + if (user is None) or (re.search(r'\W', user)): + self.hdf["Data.Warning"] = "Plugins.user_manager.InvalidUserName" + elif not new_pw: + self.hdf["Data.Warning"] = "EmptyNewPassword" + elif new_pw != new_pw2: + self.hdf["Data.Warning"] = "DifferentPasswords" + elif user in admin_dict.keys(): + self.hdf["Data.Warning"] = "Plugins.user_manager.UserAlreadyExists" + else: + admin_dict[user] = self.cbox.prefs.user_db.get_digest(new_pw) + self.hdf["Data.Success"] = "Plugins.user_manager.UserAdded" + try: + self.cbox.prefs.user_db.write() + except IOError: + self.cbox.log.warn("failed to write user database") + elif store == "change_password": + if not new_pw: + self.hdf["Data.Warning"] = "EmptyNewPassword" + elif new_pw != new_pw2: + self.hdf["Data.Warning"] = "DifferentPasswords" + elif user in admin_dict.keys(): + admin_dict[user] = self.cbox.prefs.user_db.get_digest(new_pw) + self.hdf["Data.Success"] = "Plugins.user_manager.PasswordChanged" + try: + self.cbox.prefs.user_db.write() + except IOError: + self.cbox.log.warn("failed to write user database") + else: + self.cbox.log.info("user_manager: invalid user choosen (%s)" % str(user)) + elif store == "del_user": + if user in RESERVED_USERS: + self.cbox.log.info("user_manager: tried to remove reserved user (%s)" % user) + self.hdf["Data.Warning"] = "NeverRemoveReservedUser" + elif user in admin_dict.keys(): + del admin_dict[user] + self.hdf["Data.Success"] = "Plugins.user_manager.UserRemoved" + try: + self.cbox.prefs.user_db.write() + except IOError: + self.cbox.log.warn("failed to write user database") + else: + self.cbox.log.info("user_manager: tried to remove non-existing user (%s)" \ + % str(user)) + else: + self.cbox.log.info("user_manager: invalid value of 'store' (%s)" % store) + self.__prepare_hdf(admin_dict) + return "user_list" + + + def get_status(self): + return ":".join(self.cbox.prefs.user_db["admins"].keys()) + + + def __clean_hdf(self): + for key in self.hdf.keys(): + del self.hdf[key] + + + def __prepare_hdf(self, dataset): + ## sort by name + users = dataset.keys() + users.sort() + ## export all users + for name in users: + self.hdf[self.hdf_prefix + "Users." + name] = name + diff --git a/v0.3.4.5/plugins/volume_automount/intl/cryptobox-server-feature-volume_automount.pot b/v0.3.4.5/plugins/volume_automount/intl/cryptobox-server-feature-volume_automount.pot new file mode 100644 index 0000000..153526a --- /dev/null +++ b/v0.3.4.5/plugins/volume_automount/intl/cryptobox-server-feature-volume_automount.pot @@ -0,0 +1,47 @@ +#: Name +msgid "Automatic opening" +msgstr "" + +#: Title.AutoMountVolume +msgid "Open during startup" +msgstr "" + +#: Help.AutoMount +msgid "You may enable automatic activation for any non-encrypted volume. It will get opened automatically when you turn on the CryptoBox server." +msgstr "" + +#: Button.AutoMountOn +msgid "Enable automatic opening" +msgstr "" + +#: Button.AutoMountOff +msgid "Disable automatic opening" +msgstr "" + +#: Text.AutoIsOn +msgid "Currently automatic opening is enabled" +msgstr "" + +#: Text.AutoIsOff +msgid "Currently automatic opening is disabled" +msgstr "" + +#: SuccessMessage.AutoMountEnabled.Title +msgid "Automatic activation enabled" +msgstr "" + +#: SuccessMessage.AutoMountEnabled.Text +msgid "This volume will get opened during startup." +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Title +msgid "Automatic activation disabled" +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Text +msgid "This volume will not get opened during startup." +msgstr "" + +#: AdviceMessage.NoAutoMountForEncryptedVolumes.Text +msgid "Automatic activation is not possible for encrypted volumes." +msgstr "" diff --git a/v0.3.4.5/plugins/volume_automount/intl/cs/cryptobox-server-feature-volume_automount.po b/v0.3.4.5/plugins/volume_automount/intl/cs/cryptobox-server-feature-volume_automount.po new file mode 100644 index 0000000..0c8dcb7 --- /dev/null +++ b/v0.3.4.5/plugins/volume_automount/intl/cs/cryptobox-server-feature-volume_automount.po @@ -0,0 +1,62 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-12-18 11:50+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Automatic opening" +msgstr "" + +#: Title.AutoMountVolume +msgid "Open during startup" +msgstr "" + +#: Help.AutoMount +msgid "You may enable automatic activation for any non-encrypted volume. It will get opened automatically when you turn on the CryptoBox server." +msgstr "" + +#: Button.AutoMountOn +msgid "Enable automatic opening" +msgstr "" + +#: Button.AutoMountOff +msgid "Disable automatic opening" +msgstr "" + +#: Text.AutoIsOn +msgid "Currently automatic opening is enabled" +msgstr "" + +#: Text.AutoIsOff +msgid "Currently automatic opening is disabled" +msgstr "" + +#: SuccessMessage.AutoMountEnabled.Title +msgid "Automatic activation enabled" +msgstr "" + +#: SuccessMessage.AutoMountEnabled.Text +msgid "This volume will get opened during startup." +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Title +msgid "Automatic activation disabled" +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Text +msgid "This volume will not get opened during startup." +msgstr "" + +#: AdviceMessage.NoAutoMountForEncryptedVolumes.Text +msgid "Automatic activation is not possible for encrypted volumes." +msgstr "" diff --git a/v0.3.4.5/plugins/volume_automount/intl/da/cryptobox-server-feature-volume_automount.po b/v0.3.4.5/plugins/volume_automount/intl/da/cryptobox-server-feature-volume_automount.po new file mode 100644 index 0000000..0c8dcb7 --- /dev/null +++ b/v0.3.4.5/plugins/volume_automount/intl/da/cryptobox-server-feature-volume_automount.po @@ -0,0 +1,62 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-12-18 11:50+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Automatic opening" +msgstr "" + +#: Title.AutoMountVolume +msgid "Open during startup" +msgstr "" + +#: Help.AutoMount +msgid "You may enable automatic activation for any non-encrypted volume. It will get opened automatically when you turn on the CryptoBox server." +msgstr "" + +#: Button.AutoMountOn +msgid "Enable automatic opening" +msgstr "" + +#: Button.AutoMountOff +msgid "Disable automatic opening" +msgstr "" + +#: Text.AutoIsOn +msgid "Currently automatic opening is enabled" +msgstr "" + +#: Text.AutoIsOff +msgid "Currently automatic opening is disabled" +msgstr "" + +#: SuccessMessage.AutoMountEnabled.Title +msgid "Automatic activation enabled" +msgstr "" + +#: SuccessMessage.AutoMountEnabled.Text +msgid "This volume will get opened during startup." +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Title +msgid "Automatic activation disabled" +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Text +msgid "This volume will not get opened during startup." +msgstr "" + +#: AdviceMessage.NoAutoMountForEncryptedVolumes.Text +msgid "Automatic activation is not possible for encrypted volumes." +msgstr "" diff --git a/v0.3.4.5/plugins/volume_automount/intl/de/cryptobox-server-feature-volume_automount.po b/v0.3.4.5/plugins/volume_automount/intl/de/cryptobox-server-feature-volume_automount.po new file mode 100644 index 0000000..68daf70 --- /dev/null +++ b/v0.3.4.5/plugins/volume_automount/intl/de/cryptobox-server-feature-volume_automount.po @@ -0,0 +1,61 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-12-18 11:50+0100\n" +"PO-Revision-Date: 2006-12-18 08:28+0100\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Automatic opening" +msgstr "Automatisches Öffnen" + +#: Title.AutoMountVolume +msgid "Open during startup" +msgstr "Öffnen beim CryptoBox-Start" + +#: Help.AutoMount +msgid "You may enable automatic activation for any non-encrypted volume. It will get opened automatically when you turn on the CryptoBox server." +msgstr "Die automatische Öffnung kann für jeden unverschlüsselten Datenträger aktiviert werden. Der Datenträger wird dadurch automatisch geöffnet, wenn die CryptoBox eingeschaltet wird." + +#: Button.AutoMountOn +msgid "Enable automatic opening" +msgstr "Aktiviere automatisches Öffnen" + +#: Button.AutoMountOff +msgid "Disable automatic opening" +msgstr "Deaktiviere automatisches Öffnen" + +#: Text.AutoIsOn +msgid "Currently automatic opening is enabled" +msgstr "Das automatische Öffnen ist derzeit eingeschaltet" + +#: Text.AutoIsOff +msgid "Currently automatic opening is disabled" +msgstr "Das automatische Öffnen ist derzeit abgeschaltet" + +#: SuccessMessage.AutoMountEnabled.Title +msgid "Automatic activation enabled" +msgstr "Automatisches Öffnen aktiviert" + +#: SuccessMessage.AutoMountEnabled.Text +msgid "This volume will get opened during startup." +msgstr "Der Datenträger wird nun bei jedem Start des CryptoBox-Servers geöffnet." + +#: SuccessMessage.AutoMountDisabled.Title +msgid "Automatic activation disabled" +msgstr "Automatisches Öffnen deaktiviert" + +#: SuccessMessage.AutoMountDisabled.Text +msgid "This volume will not get opened during startup." +msgstr "Der Datenträger wird nun nicht mehr automatisch beim Start des CryptoBox-Servers geöffnet." + +#: AdviceMessage.NoAutoMountForEncryptedVolumes.Text +msgid "Automatic activation is not possible for encrypted volumes." +msgstr "Das automatische Öffnen ist für verschlüsselte Datenträger nicht verfügbar." diff --git a/v0.3.4.5/plugins/volume_automount/intl/en/cryptobox-server-feature-volume_automount.po b/v0.3.4.5/plugins/volume_automount/intl/en/cryptobox-server-feature-volume_automount.po new file mode 100644 index 0000000..1a12ddb --- /dev/null +++ b/v0.3.4.5/plugins/volume_automount/intl/en/cryptobox-server-feature-volume_automount.po @@ -0,0 +1,49 @@ +#: Name +msgid "Automatic opening" +msgstr "Automatic opening" + +#: Title.AutoMountVolume +msgid "Open during startup" +msgstr "Open during startup" + +#: Help.AutoMount +msgid "You may enable automatic activation for any non-encrypted volume. It will get opened automatically when you turn on the CryptoBox server." +msgstr "You may enable automatic activation for any non-encrypted volume. It will get opened automatically when you turn on the CryptoBox server." + +#: Button.AutoMountOn +msgid "Enable automatic opening" +msgstr "Enable automatic opening" + +#: Button.AutoMountOff +msgid "Disable automatic opening" +msgstr "Disable automatic opening" + +#: Text.AutoIsOn +msgid "Currently automatic opening is enabled" +msgstr "Currently automatic opening is enabled" + +#: Text.AutoIsOff +msgid "Currently automatic opening is disabled" +msgstr "Currently automatic opening is disabled" + +#: SuccessMessage.AutoMountEnabled.Title +msgid "Automatic activation enabled" +msgstr "Automatic activation enabled" + +#: SuccessMessage.AutoMountEnabled.Text +#, fuzzy +msgid "This volume will get opened during startup." +msgstr "This volume will get opened during startup." + +#: SuccessMessage.AutoMountDisabled.Title +msgid "Automatic activation disabled" +msgstr "Automatic activation disabled" + +#: SuccessMessage.AutoMountDisabled.Text +#, fuzzy +msgid "This volume will not get opened during startup." +msgstr "This volume will not get opened during startup." + +#: AdviceMessage.NoAutoMountForEncryptedVolumes.Text +msgid "Automatic activation is not possible for encrypted volumes." +msgstr "Automatic activation is not possible for encrypted volumes." diff --git a/v0.3.4.5/plugins/volume_automount/intl/es/cryptobox-server-feature-volume_automount.po b/v0.3.4.5/plugins/volume_automount/intl/es/cryptobox-server-feature-volume_automount.po new file mode 100644 index 0000000..0c8dcb7 --- /dev/null +++ b/v0.3.4.5/plugins/volume_automount/intl/es/cryptobox-server-feature-volume_automount.po @@ -0,0 +1,62 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-12-18 11:50+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Automatic opening" +msgstr "" + +#: Title.AutoMountVolume +msgid "Open during startup" +msgstr "" + +#: Help.AutoMount +msgid "You may enable automatic activation for any non-encrypted volume. It will get opened automatically when you turn on the CryptoBox server." +msgstr "" + +#: Button.AutoMountOn +msgid "Enable automatic opening" +msgstr "" + +#: Button.AutoMountOff +msgid "Disable automatic opening" +msgstr "" + +#: Text.AutoIsOn +msgid "Currently automatic opening is enabled" +msgstr "" + +#: Text.AutoIsOff +msgid "Currently automatic opening is disabled" +msgstr "" + +#: SuccessMessage.AutoMountEnabled.Title +msgid "Automatic activation enabled" +msgstr "" + +#: SuccessMessage.AutoMountEnabled.Text +msgid "This volume will get opened during startup." +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Title +msgid "Automatic activation disabled" +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Text +msgid "This volume will not get opened during startup." +msgstr "" + +#: AdviceMessage.NoAutoMountForEncryptedVolumes.Text +msgid "Automatic activation is not possible for encrypted volumes." +msgstr "" diff --git a/v0.3.4.5/plugins/volume_automount/intl/fi/cryptobox-server-feature-volume_automount.po b/v0.3.4.5/plugins/volume_automount/intl/fi/cryptobox-server-feature-volume_automount.po new file mode 100644 index 0000000..0c8dcb7 --- /dev/null +++ b/v0.3.4.5/plugins/volume_automount/intl/fi/cryptobox-server-feature-volume_automount.po @@ -0,0 +1,62 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-12-18 11:50+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Automatic opening" +msgstr "" + +#: Title.AutoMountVolume +msgid "Open during startup" +msgstr "" + +#: Help.AutoMount +msgid "You may enable automatic activation for any non-encrypted volume. It will get opened automatically when you turn on the CryptoBox server." +msgstr "" + +#: Button.AutoMountOn +msgid "Enable automatic opening" +msgstr "" + +#: Button.AutoMountOff +msgid "Disable automatic opening" +msgstr "" + +#: Text.AutoIsOn +msgid "Currently automatic opening is enabled" +msgstr "" + +#: Text.AutoIsOff +msgid "Currently automatic opening is disabled" +msgstr "" + +#: SuccessMessage.AutoMountEnabled.Title +msgid "Automatic activation enabled" +msgstr "" + +#: SuccessMessage.AutoMountEnabled.Text +msgid "This volume will get opened during startup." +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Title +msgid "Automatic activation disabled" +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Text +msgid "This volume will not get opened during startup." +msgstr "" + +#: AdviceMessage.NoAutoMountForEncryptedVolumes.Text +msgid "Automatic activation is not possible for encrypted volumes." +msgstr "" diff --git a/v0.3.4.5/plugins/volume_automount/intl/fr/cryptobox-server-feature-volume_automount.po b/v0.3.4.5/plugins/volume_automount/intl/fr/cryptobox-server-feature-volume_automount.po new file mode 100644 index 0000000..0c8dcb7 --- /dev/null +++ b/v0.3.4.5/plugins/volume_automount/intl/fr/cryptobox-server-feature-volume_automount.po @@ -0,0 +1,62 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-12-18 11:50+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Automatic opening" +msgstr "" + +#: Title.AutoMountVolume +msgid "Open during startup" +msgstr "" + +#: Help.AutoMount +msgid "You may enable automatic activation for any non-encrypted volume. It will get opened automatically when you turn on the CryptoBox server." +msgstr "" + +#: Button.AutoMountOn +msgid "Enable automatic opening" +msgstr "" + +#: Button.AutoMountOff +msgid "Disable automatic opening" +msgstr "" + +#: Text.AutoIsOn +msgid "Currently automatic opening is enabled" +msgstr "" + +#: Text.AutoIsOff +msgid "Currently automatic opening is disabled" +msgstr "" + +#: SuccessMessage.AutoMountEnabled.Title +msgid "Automatic activation enabled" +msgstr "" + +#: SuccessMessage.AutoMountEnabled.Text +msgid "This volume will get opened during startup." +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Title +msgid "Automatic activation disabled" +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Text +msgid "This volume will not get opened during startup." +msgstr "" + +#: AdviceMessage.NoAutoMountForEncryptedVolumes.Text +msgid "Automatic activation is not possible for encrypted volumes." +msgstr "" diff --git a/v0.3.4.5/plugins/volume_automount/intl/hu/cryptobox-server-feature-volume_automount.po b/v0.3.4.5/plugins/volume_automount/intl/hu/cryptobox-server-feature-volume_automount.po new file mode 100644 index 0000000..0c8dcb7 --- /dev/null +++ b/v0.3.4.5/plugins/volume_automount/intl/hu/cryptobox-server-feature-volume_automount.po @@ -0,0 +1,62 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-12-18 11:50+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Automatic opening" +msgstr "" + +#: Title.AutoMountVolume +msgid "Open during startup" +msgstr "" + +#: Help.AutoMount +msgid "You may enable automatic activation for any non-encrypted volume. It will get opened automatically when you turn on the CryptoBox server." +msgstr "" + +#: Button.AutoMountOn +msgid "Enable automatic opening" +msgstr "" + +#: Button.AutoMountOff +msgid "Disable automatic opening" +msgstr "" + +#: Text.AutoIsOn +msgid "Currently automatic opening is enabled" +msgstr "" + +#: Text.AutoIsOff +msgid "Currently automatic opening is disabled" +msgstr "" + +#: SuccessMessage.AutoMountEnabled.Title +msgid "Automatic activation enabled" +msgstr "" + +#: SuccessMessage.AutoMountEnabled.Text +msgid "This volume will get opened during startup." +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Title +msgid "Automatic activation disabled" +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Text +msgid "This volume will not get opened during startup." +msgstr "" + +#: AdviceMessage.NoAutoMountForEncryptedVolumes.Text +msgid "Automatic activation is not possible for encrypted volumes." +msgstr "" diff --git a/v0.3.4.5/plugins/volume_automount/intl/it/cryptobox-server-feature-volume_automount.po b/v0.3.4.5/plugins/volume_automount/intl/it/cryptobox-server-feature-volume_automount.po new file mode 100644 index 0000000..9dc7278 --- /dev/null +++ b/v0.3.4.5/plugins/volume_automount/intl/it/cryptobox-server-feature-volume_automount.po @@ -0,0 +1,61 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-12-18 11:50+0100\n" +"PO-Revision-Date: 2007-03-20 12:50+0100\n" +"Last-Translator: Fabrizio Tarizzo \n" +"Language-Team: Italian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Automatic opening" +msgstr "Apertura automatica" + +#: Title.AutoMountVolume +msgid "Open during startup" +msgstr "Apertura durante l'avvio del sistema" + +#: Help.AutoMount +msgid "You may enable automatic activation for any non-encrypted volume. It will get opened automatically when you turn on the CryptoBox server." +msgstr "È possibile attivare l'apertura automatica per ogni volume non cifrato. Il volume sarà aperto automaticamente all'avvio del server CryptoBox." + +#: Button.AutoMountOn +msgid "Enable automatic opening" +msgstr "Attiva l'apertura automatica." + +#: Button.AutoMountOff +msgid "Disable automatic opening" +msgstr "Disattiva l'apertura automatica." + +#: Text.AutoIsOn +msgid "Currently automatic opening is enabled" +msgstr "L'apertura automatica è attualmente attivata" + +#: Text.AutoIsOff +msgid "Currently automatic opening is disabled" +msgstr "L'apertura automatica è attualmente disattivata" + +#: SuccessMessage.AutoMountEnabled.Title +msgid "Automatic activation enabled" +msgstr "Apertura automatica attivata" + +#: SuccessMessage.AutoMountEnabled.Text +msgid "This volume will get opened during startup." +msgstr "Il volume sarà aperto automaticamente durante l'avvio del sistema." + +#: SuccessMessage.AutoMountDisabled.Title +msgid "Automatic activation disabled" +msgstr "Apertura automatica disattivata" + +#: SuccessMessage.AutoMountDisabled.Text +msgid "This volume will not get opened during startup." +msgstr "Il volume non sarà aperto automaticamente durante l'avvio del sistema." + +#: AdviceMessage.NoAutoMountForEncryptedVolumes.Text +msgid "Automatic activation is not possible for encrypted volumes." +msgstr "L'attivazione automatica non è possibile per i volumi cifrati." diff --git a/v0.3.4.5/plugins/volume_automount/intl/ja/cryptobox-server-feature-volume_automount.po b/v0.3.4.5/plugins/volume_automount/intl/ja/cryptobox-server-feature-volume_automount.po new file mode 100644 index 0000000..3281df4 --- /dev/null +++ b/v0.3.4.5/plugins/volume_automount/intl/ja/cryptobox-server-feature-volume_automount.po @@ -0,0 +1,61 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-12-18 11:50+0100\n" +"PO-Revision-Date: 2007-02-26 07:38+0100\n" +"Last-Translator: kinneko \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Automatic opening" +msgstr "自動で開く" + +#: Title.AutoMountVolume +msgid "Open during startup" +msgstr "起動時に開く" + +#: Help.AutoMount +msgid "You may enable automatic activation for any non-encrypted volume. It will get opened automatically when you turn on the CryptoBox server." +msgstr "暗号化されていない領域は、自動的に有効にすることができます。クリプトボックスを起動すると、それらは自動的に開かれます。" + +#: Button.AutoMountOn +msgid "Enable automatic opening" +msgstr "自動的に開くのを有効にする" + +#: Button.AutoMountOff +msgid "Disable automatic opening" +msgstr "自動的に開くのを無効にする" + +#: Text.AutoIsOn +msgid "Currently automatic opening is enabled" +msgstr "自動的に開くのは有効です" + +#: Text.AutoIsOff +msgid "Currently automatic opening is disabled" +msgstr "自動的に開くのは無効です" + +#: SuccessMessage.AutoMountEnabled.Title +msgid "Automatic activation enabled" +msgstr "自動的に有効化するよう設定しました" + +#: SuccessMessage.AutoMountEnabled.Text +msgid "This volume will get opened during startup." +msgstr "この領域は、起動時に自動的に開かれます。" + +#: SuccessMessage.AutoMountDisabled.Title +msgid "Automatic activation disabled" +msgstr "自動的に有効化しないよう設定しました" + +#: SuccessMessage.AutoMountDisabled.Text +msgid "This volume will not get opened during startup." +msgstr "この領域は、起動時に自動的には開かれません。" + +#: AdviceMessage.NoAutoMountForEncryptedVolumes.Text +msgid "Automatic activation is not possible for encrypted volumes." +msgstr "自動での有効化は、暗号化した領域には適用することができません。" diff --git a/v0.3.4.5/plugins/volume_automount/intl/nl/cryptobox-server-feature-volume_automount.po b/v0.3.4.5/plugins/volume_automount/intl/nl/cryptobox-server-feature-volume_automount.po new file mode 100644 index 0000000..0c8dcb7 --- /dev/null +++ b/v0.3.4.5/plugins/volume_automount/intl/nl/cryptobox-server-feature-volume_automount.po @@ -0,0 +1,62 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-12-18 11:50+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Automatic opening" +msgstr "" + +#: Title.AutoMountVolume +msgid "Open during startup" +msgstr "" + +#: Help.AutoMount +msgid "You may enable automatic activation for any non-encrypted volume. It will get opened automatically when you turn on the CryptoBox server." +msgstr "" + +#: Button.AutoMountOn +msgid "Enable automatic opening" +msgstr "" + +#: Button.AutoMountOff +msgid "Disable automatic opening" +msgstr "" + +#: Text.AutoIsOn +msgid "Currently automatic opening is enabled" +msgstr "" + +#: Text.AutoIsOff +msgid "Currently automatic opening is disabled" +msgstr "" + +#: SuccessMessage.AutoMountEnabled.Title +msgid "Automatic activation enabled" +msgstr "" + +#: SuccessMessage.AutoMountEnabled.Text +msgid "This volume will get opened during startup." +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Title +msgid "Automatic activation disabled" +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Text +msgid "This volume will not get opened during startup." +msgstr "" + +#: AdviceMessage.NoAutoMountForEncryptedVolumes.Text +msgid "Automatic activation is not possible for encrypted volumes." +msgstr "" diff --git a/v0.3.4.5/plugins/volume_automount/intl/pl/cryptobox-server-feature-volume_automount.po b/v0.3.4.5/plugins/volume_automount/intl/pl/cryptobox-server-feature-volume_automount.po new file mode 100644 index 0000000..2565661 --- /dev/null +++ b/v0.3.4.5/plugins/volume_automount/intl/pl/cryptobox-server-feature-volume_automount.po @@ -0,0 +1,61 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-04-01 15:54+0200\n" +"PO-Revision-Date: 2007-03-29 20:42+0200\n" +"Last-Translator: Andrzej S. Kaznowski \n" +"Language-Team: POLSKI \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Automatic opening" +msgstr "Otwieranie automatyczne" + +#: Title.AutoMountVolume +msgid "Open during startup" +msgstr "Otwieranie podczas uruchomienia" + +#: Help.AutoMount +msgid "You may enable automatic activation for any non-encrypted volume. It will get opened automatically when you turn on the CryptoBox server." +msgstr "Możesz włączyć automatyczną aktywację dla dowolnego nieszyfrowanego woluminu. Wolumin otworzy się automatycznie podczas uruchomienia serwera CryptoBox." + +#: Button.AutoMountOn +msgid "Enable automatic opening" +msgstr "Włącz automatyczne otwieranie" + +#: Button.AutoMountOff +msgid "Disable automatic opening" +msgstr "Wyłącz automatyczne otwieranie" + +#: Text.AutoIsOn +msgid "Currently automatic opening is enabled" +msgstr "Automatyczne otwieranie jest włączone" + +#: Text.AutoIsOff +msgid "Currently automatic opening is disabled" +msgstr "Automatyczne otwieranie jest wyłączone" + +#: SuccessMessage.AutoMountEnabled.Title +msgid "Automatic activation enabled" +msgstr "Automatyczna aktywacja jest włączona" + +#: SuccessMessage.AutoMountEnabled.Text +msgid "This volume will get opened during startup." +msgstr "Ten wolumin otworzy się podczas uruchomienia." + +#: SuccessMessage.AutoMountDisabled.Title +msgid "Automatic activation disabled" +msgstr "Automatyczna aktywacja jest wyłączona" + +#: SuccessMessage.AutoMountDisabled.Text +msgid "This volume will not get opened during startup." +msgstr "Ten wolumin nie otworzy się podczas uruchomienia." + +#: AdviceMessage.NoAutoMountForEncryptedVolumes.Text +msgid "Automatic activation is not possible for encrypted volumes." +msgstr "Automatyczna aktywacja nie jest możliwa dla szyfrowanych woluminów." diff --git a/v0.3.4.5/plugins/volume_automount/intl/pt/cryptobox-server-feature-volume_automount.po b/v0.3.4.5/plugins/volume_automount/intl/pt/cryptobox-server-feature-volume_automount.po new file mode 100644 index 0000000..0c8dcb7 --- /dev/null +++ b/v0.3.4.5/plugins/volume_automount/intl/pt/cryptobox-server-feature-volume_automount.po @@ -0,0 +1,62 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-12-18 11:50+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Automatic opening" +msgstr "" + +#: Title.AutoMountVolume +msgid "Open during startup" +msgstr "" + +#: Help.AutoMount +msgid "You may enable automatic activation for any non-encrypted volume. It will get opened automatically when you turn on the CryptoBox server." +msgstr "" + +#: Button.AutoMountOn +msgid "Enable automatic opening" +msgstr "" + +#: Button.AutoMountOff +msgid "Disable automatic opening" +msgstr "" + +#: Text.AutoIsOn +msgid "Currently automatic opening is enabled" +msgstr "" + +#: Text.AutoIsOff +msgid "Currently automatic opening is disabled" +msgstr "" + +#: SuccessMessage.AutoMountEnabled.Title +msgid "Automatic activation enabled" +msgstr "" + +#: SuccessMessage.AutoMountEnabled.Text +msgid "This volume will get opened during startup." +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Title +msgid "Automatic activation disabled" +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Text +msgid "This volume will not get opened during startup." +msgstr "" + +#: AdviceMessage.NoAutoMountForEncryptedVolumes.Text +msgid "Automatic activation is not possible for encrypted volumes." +msgstr "" diff --git a/v0.3.4.5/plugins/volume_automount/intl/ru/cryptobox-server-feature-volume_automount.po b/v0.3.4.5/plugins/volume_automount/intl/ru/cryptobox-server-feature-volume_automount.po new file mode 100644 index 0000000..0c8dcb7 --- /dev/null +++ b/v0.3.4.5/plugins/volume_automount/intl/ru/cryptobox-server-feature-volume_automount.po @@ -0,0 +1,62 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-12-18 11:50+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Automatic opening" +msgstr "" + +#: Title.AutoMountVolume +msgid "Open during startup" +msgstr "" + +#: Help.AutoMount +msgid "You may enable automatic activation for any non-encrypted volume. It will get opened automatically when you turn on the CryptoBox server." +msgstr "" + +#: Button.AutoMountOn +msgid "Enable automatic opening" +msgstr "" + +#: Button.AutoMountOff +msgid "Disable automatic opening" +msgstr "" + +#: Text.AutoIsOn +msgid "Currently automatic opening is enabled" +msgstr "" + +#: Text.AutoIsOff +msgid "Currently automatic opening is disabled" +msgstr "" + +#: SuccessMessage.AutoMountEnabled.Title +msgid "Automatic activation enabled" +msgstr "" + +#: SuccessMessage.AutoMountEnabled.Text +msgid "This volume will get opened during startup." +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Title +msgid "Automatic activation disabled" +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Text +msgid "This volume will not get opened during startup." +msgstr "" + +#: AdviceMessage.NoAutoMountForEncryptedVolumes.Text +msgid "Automatic activation is not possible for encrypted volumes." +msgstr "" diff --git a/v0.3.4.5/plugins/volume_automount/intl/sl/cryptobox-server-feature-volume_automount.po b/v0.3.4.5/plugins/volume_automount/intl/sl/cryptobox-server-feature-volume_automount.po new file mode 100644 index 0000000..d31846d --- /dev/null +++ b/v0.3.4.5/plugins/volume_automount/intl/sl/cryptobox-server-feature-volume_automount.po @@ -0,0 +1,61 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-12-18 11:50+0100\n" +"PO-Revision-Date: 2007-01-09 13:55+0100\n" +"Last-Translator: tenzin \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Automatic opening" +msgstr "Odpri avtomatično" + +#: Title.AutoMountVolume +msgid "Open during startup" +msgstr "Odpri med zagonom" + +#: Help.AutoMount +msgid "You may enable automatic activation for any non-encrypted volume. It will get opened automatically when you turn on the CryptoBox server." +msgstr "Omogočite lahko avtomatičen zagon za katerokoli ne-kriptirano vsebino. Odprta bo samodejno ko boste zagnali cryptobox strežnik." + +#: Button.AutoMountOn +msgid "Enable automatic opening" +msgstr "omogoči samodejno (avtomatično) odpiranje" + +#: Button.AutoMountOff +msgid "Disable automatic opening" +msgstr "Onemogoči samodejno (avtomatično) odpiranje" + +#: Text.AutoIsOn +msgid "Currently automatic opening is enabled" +msgstr "Samodejno (avtomatično) odpiranje je trenutno omogočeno." + +#: Text.AutoIsOff +msgid "Currently automatic opening is disabled" +msgstr "Samodejno (avtomatično) odpiranje je trenutno onemogočeno." + +#: SuccessMessage.AutoMountEnabled.Title +msgid "Automatic activation enabled" +msgstr "Samodejna (avtomatična) aktivacija omogočena" + +#: SuccessMessage.AutoMountEnabled.Text +msgid "This volume will get opened during startup." +msgstr "Ta vsebina bo odprta med zagonom" + +#: SuccessMessage.AutoMountDisabled.Title +msgid "Automatic activation disabled" +msgstr "Samodejna (avtomatična) aktivacija onemogočena" + +#: SuccessMessage.AutoMountDisabled.Text +msgid "This volume will not get opened during startup." +msgstr "Ta vsebina ne bo odprta med zagonom" + +#: AdviceMessage.NoAutoMountForEncryptedVolumes.Text +msgid "Automatic activation is not possible for encrypted volumes." +msgstr "Samodejna (avtomatična) aktivacija ni mogoča za kriptirane vsebine" diff --git a/v0.3.4.5/plugins/volume_automount/intl/sv/cryptobox-server-feature-volume_automount.po b/v0.3.4.5/plugins/volume_automount/intl/sv/cryptobox-server-feature-volume_automount.po new file mode 100644 index 0000000..0c8dcb7 --- /dev/null +++ b/v0.3.4.5/plugins/volume_automount/intl/sv/cryptobox-server-feature-volume_automount.po @@ -0,0 +1,62 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-12-18 11:50+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Automatic opening" +msgstr "" + +#: Title.AutoMountVolume +msgid "Open during startup" +msgstr "" + +#: Help.AutoMount +msgid "You may enable automatic activation for any non-encrypted volume. It will get opened automatically when you turn on the CryptoBox server." +msgstr "" + +#: Button.AutoMountOn +msgid "Enable automatic opening" +msgstr "" + +#: Button.AutoMountOff +msgid "Disable automatic opening" +msgstr "" + +#: Text.AutoIsOn +msgid "Currently automatic opening is enabled" +msgstr "" + +#: Text.AutoIsOff +msgid "Currently automatic opening is disabled" +msgstr "" + +#: SuccessMessage.AutoMountEnabled.Title +msgid "Automatic activation enabled" +msgstr "" + +#: SuccessMessage.AutoMountEnabled.Text +msgid "This volume will get opened during startup." +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Title +msgid "Automatic activation disabled" +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Text +msgid "This volume will not get opened during startup." +msgstr "" + +#: AdviceMessage.NoAutoMountForEncryptedVolumes.Text +msgid "Automatic activation is not possible for encrypted volumes." +msgstr "" diff --git a/v0.3.4.5/plugins/volume_automount/intl/ur/cryptobox-server-feature-volume_automount.po b/v0.3.4.5/plugins/volume_automount/intl/ur/cryptobox-server-feature-volume_automount.po new file mode 100644 index 0000000..fc72ba5 --- /dev/null +++ b/v0.3.4.5/plugins/volume_automount/intl/ur/cryptobox-server-feature-volume_automount.po @@ -0,0 +1,62 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-02-05 23:28+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Automatic opening" +msgstr "" + +#: Title.AutoMountVolume +msgid "Open during startup" +msgstr "" + +#: Help.AutoMount +msgid "You may enable automatic activation for any non-encrypted volume. It will get opened automatically when you turn on the CryptoBox server." +msgstr "" + +#: Button.AutoMountOn +msgid "Enable automatic opening" +msgstr "" + +#: Button.AutoMountOff +msgid "Disable automatic opening" +msgstr "" + +#: Text.AutoIsOn +msgid "Currently automatic opening is enabled" +msgstr "" + +#: Text.AutoIsOff +msgid "Currently automatic opening is disabled" +msgstr "" + +#: SuccessMessage.AutoMountEnabled.Title +msgid "Automatic activation enabled" +msgstr "" + +#: SuccessMessage.AutoMountEnabled.Text +msgid "This volume will get opened during startup." +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Title +msgid "Automatic activation disabled" +msgstr "" + +#: SuccessMessage.AutoMountDisabled.Text +msgid "This volume will not get opened during startup." +msgstr "" + +#: AdviceMessage.NoAutoMountForEncryptedVolumes.Text +msgid "Automatic activation is not possible for encrypted volumes." +msgstr "" diff --git a/v0.3.4.5/plugins/volume_automount/language.hdf b/v0.3.4.5/plugins/volume_automount/language.hdf new file mode 100644 index 0000000..a98a42b --- /dev/null +++ b/v0.3.4.5/plugins/volume_automount/language.hdf @@ -0,0 +1,41 @@ +Name = Automatic opening +Link = Automatic opening + +Title { + AutoMountVolume = Open during startup +} + + +Help.AutoMount = You may enable automatic activation for any non-encrypted volume. It will get opened automatically when you turn on the CryptoBox server. + + +Button { + AutoMountOn = Enable automatic opening + AutoMountOff = Disable automatic opening +} + + +Text { + AutoIsOn = Currently automatic opening is enabled + AutoIsOff = Currently automatic opening is disabled +} + + +SuccessMessage { + AutoMountEnabled { + Title = Automatic activation enabled + Text = This volume will get opened during startup. + } + + AutoMountDisabled { + Title = Automatic activation disabled + Text = This volume will not get opened during startup. + } +} + +AdviceMessage { + NoAutoMountForEncryptedVolumes { + Text = Automatic activation is not possible for encrypted volumes. + } +} + diff --git a/v0.3.4.5/plugins/volume_automount/unittests.py b/v0.3.4.5/plugins/volume_automount/unittests.py new file mode 100644 index 0000000..2b6503e --- /dev/null +++ b/v0.3.4.5/plugins/volume_automount/unittests.py @@ -0,0 +1,56 @@ +# +# Copyright 2006 sense.lab e.V. +# +# This file is part of the CryptoBox. +# +# The CryptoBox 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 CryptoBox 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 the CryptoBox; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +__revision__ = "$Id" + +from cryptobox.tests.base import WebInterfaceTestClass + +class unittests(WebInterfaceTestClass): + + def test_read_form(self): + """try to read automount form""" + url = self.url + "volume_automount?weblang=en&device=" + self.device_html + self.register_auth(url) + ## first: turn it off + self.cmd.go(url + "&action=disable") + self.cmd.go(url) + self.cmd.find('is disabled') + + + def test_toggle(self): + """try to toggle automount property""" + url = self.url + "volume_automount" + self.register_auth(url) + self.cmd.go(url + "?device=%s&action=disable" % self.device_html) + self.cmd.find("Automatic activation disabled") + self.cmd.find("is disabled") + self.cmd.go(url + "?device=%s&action=enable" % self.device_html) + self.cmd.find("Automatic activation enabled") + self.cmd.find("is enabled") + + + def test_invalid_input(self): + """check invalid inputs""" + url = self.url + "volume_automount" + self.register_auth(url) + self.cmd.go(url + "?device=%s&action=foobar" % self.device_html) + self.cmd.notfind("Automatic activation disabled") + self.cmd.notfind("Automatic activation enabled") + diff --git a/v0.3.4.5/plugins/volume_automount/volume_automount.cs b/v0.3.4.5/plugins/volume_automount/volume_automount.cs new file mode 100644 index 0000000..ea098bb --- /dev/null +++ b/v0.3.4.5/plugins/volume_automount/volume_automount.cs @@ -0,0 +1,30 @@ + + + + +
+ + + + + + +

+ +
+ + + + + + +

+ + + + +
+ diff --git a/v0.3.4.5/plugins/volume_automount/volume_automount.py b/v0.3.4.5/plugins/volume_automount/volume_automount.py new file mode 100644 index 0000000..62cbd11 --- /dev/null +++ b/v0.3.4.5/plugins/volume_automount/volume_automount.py @@ -0,0 +1,120 @@ +# +# Copyright 2006 sense.lab e.V. +# +# This file is part of the CryptoBox. +# +# The CryptoBox 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 CryptoBox 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 the CryptoBox; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +__revision__ = "$Id" + +import cryptobox.plugins.base +import cryptobox.core.container +from cryptobox.core.exceptions import * + + +class volume_automount(cryptobox.plugins.base.CryptoBoxPlugin): + + plugin_capabilities = [ "volume" ] + plugin_visibility = [ "properties" ] + request_auth = False + rank = 80 + + true_string = "yes" + false_string = "no" + + + def do_action(self, action=None): + container = self.cbox.get_container(self.device) + if action is None: + pass + elif action == "enable": + self.__set_auto_mount(container, True) + self.hdf["Data.Success"] = "Plugins.volume_automount.AutoMountEnabled" + self.cbox.log.info("volume_automount: enabled for device '%s'" % self.device) + elif action == "disable": + self.__set_auto_mount(container, False) + self.hdf["Data.Success"] = "Plugins.volume_automount.AutoMountDisabled" + self.cbox.log.info("volume_automount: disabled for device '%s'" % self.device) + else: + self.cbox.log.info("volume_automount: invalid action (%s)" % str(action)) + self.__prepare_hdf() + return "volume_automount" + + + def handle_event(self, event, event_info=None): + """Override bootup behaviour. + + Mount all volumes marked as 'automount'. + """ + cryptobox.plugins.base.CryptoBoxPlugin.handle_event(self, event, event_info) + if event == "bootup": + for cont in self.cbox.get_container_list(): + if self.__is_auto_mount(cont) and not cont.is_mounted(): + cont.mount() + + + def is_useful(self, device): + """Automount does not work for encrypted volumes. + """ + cont = self.cbox.get_container(device) + if not cont: + return False + if cont.get_type() != cryptobox.core.container.CONTAINERTYPES["luks"]: + return True + return False + + + def get_status(self): + return str(self.__is_auto_mount(self.cbox.get_container(self.device))) + + + def __prepare_hdf(self): + if self.__is_auto_mount(self.cbox.get_container(self.device)): + self.hdf[self.hdf_prefix + "automount_setting"] = "1" + else: + self.hdf[self.hdf_prefix + "automount_setting"] = "0" + + + def __is_auto_mount(self, container): + if not container: + return False + ## only valid for plain volumes + if container.get_type() != cryptobox.core.container.CONTAINERTYPES["plain"]: + return False + if "_automount_names" in self.prefs: + if container.get_name() in self.prefs["_automount_names"]: + return True + else: + return False + else: + return False + + + def __set_auto_mount(self, container, state): + if state == self.__is_auto_mount(container): + return + name = container.get_name() + if not "_automount_names" in self.prefs: + self.prefs["_automount_names"] = [] + if state: + self.prefs["_automount_names"].append(name) + else: + self.prefs["_automount_names"].remove(name) + try: + self.cbox.prefs.plugin_conf.write() + except IOError: + self.cbox.log.warn("Failed to store plugin configuration") + diff --git a/v0.3.4.5/plugins/volume_chpasswd/intl/cryptobox-server-feature-volume_chpasswd.pot b/v0.3.4.5/plugins/volume_chpasswd/intl/cryptobox-server-feature-volume_chpasswd.pot new file mode 100644 index 0000000..145ae4c --- /dev/null +++ b/v0.3.4.5/plugins/volume_chpasswd/intl/cryptobox-server-feature-volume_chpasswd.pot @@ -0,0 +1,43 @@ +#: Name +msgid "Change volume password" +msgstr "" + +#: Link +msgid "Password" +msgstr "" + +#: Title.ChangePassword +msgid "Change the password of this volume" +msgstr "" + +#: Button.ChangePassword +msgid "Change password" +msgstr "" + +#: Help.Password +msgid "You can easily change the password of an encrypted volume. Just enter the current password and type your new password twice. No data will get lost." +msgstr "" + +#: AdviceMessage.FormatForEncryptionSupport.Text +msgid "This volume is not encrypted. If you want to turn on encryption, then you have to format the volume. Beware: this will erase all data from this volume." +msgstr "" + +#: AdviceMessage.FormatForEncryptionSupport.Link.Text +msgid "Format this volume" +msgstr "" + +#: AdviceMessage.SuccessMessage.PasswordChange.Title +msgid "Password changed" +msgstr "" + +#: AdviceMessage.SuccessMessage.PasswordChange.Text +msgid "The password of this volume was changed successfully." +msgstr "" + +#: AdviceMessage.WarningMessage.PasswordChange.Title +msgid "Could not change password" +msgstr "" + +#: AdviceMessage.WarningMessage.PasswordChange.Text +msgid "The password of this volume could not be changed - sorry!" +msgstr "" diff --git a/v0.3.4.5/plugins/volume_chpasswd/intl/cs/cryptobox-server-feature-volume_chpasswd.po b/v0.3.4.5/plugins/volume_chpasswd/intl/cs/cryptobox-server-feature-volume_chpasswd.po new file mode 100644 index 0000000..dbad806 --- /dev/null +++ b/v0.3.4.5/plugins/volume_chpasswd/intl/cs/cryptobox-server-feature-volume_chpasswd.po @@ -0,0 +1,58 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:03+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Change volume password" +msgstr "" + +#: Link +msgid "Password" +msgstr "" + +#: Title.ChangePassword +msgid "Change the password of this volume" +msgstr "" + +#: Button.ChangePassword +msgid "Change password" +msgstr "" + +#: Help.Password +msgid "You can easily change the password of an encrypted volume. Just enter the current password and type your new password twice. No data will get lost." +msgstr "" + +#: AdviceMessage.FormatForEncryptionSupport.Text +msgid "This volume is not encrypted. If you want to turn on encryption, then you have to format the volume. Beware: this will erase all data from this volume." +msgstr "" + +#: AdviceMessage.FormatForEncryptionSupport.Link.Text +msgid "Format this volume" +msgstr "" + +#: AdviceMessage.SuccessMessage.PasswordChange.Title +msgid "Password changed" +msgstr "" + +#: AdviceMessage.SuccessMessage.PasswordChange.Text +msgid "The password of this volume was changed successfully." +msgstr "" + +#: AdviceMessage.WarningMessage.PasswordChange.Title +msgid "Could not change password" +msgstr "" + +#: AdviceMessage.WarningMessage.PasswordChange.Text +msgid "The password of this volume could not be changed - sorry!" +msgstr "" diff --git a/v0.3.4.5/plugins/volume_chpasswd/intl/da/cryptobox-server-feature-volume_chpasswd.po b/v0.3.4.5/plugins/volume_chpasswd/intl/da/cryptobox-server-feature-volume_chpasswd.po new file mode 100644 index 0000000..dbad806 --- /dev/null +++ b/v0.3.4.5/plugins/volume_chpasswd/intl/da/cryptobox-server-feature-volume_chpasswd.po @@ -0,0 +1,58 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:03+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Change volume password" +msgstr "" + +#: Link +msgid "Password" +msgstr "" + +#: Title.ChangePassword +msgid "Change the password of this volume" +msgstr "" + +#: Button.ChangePassword +msgid "Change password" +msgstr "" + +#: Help.Password +msgid "You can easily change the password of an encrypted volume. Just enter the current password and type your new password twice. No data will get lost." +msgstr "" + +#: AdviceMessage.FormatForEncryptionSupport.Text +msgid "This volume is not encrypted. If you want to turn on encryption, then you have to format the volume. Beware: this will erase all data from this volume." +msgstr "" + +#: AdviceMessage.FormatForEncryptionSupport.Link.Text +msgid "Format this volume" +msgstr "" + +#: AdviceMessage.SuccessMessage.PasswordChange.Title +msgid "Password changed" +msgstr "" + +#: AdviceMessage.SuccessMessage.PasswordChange.Text +msgid "The password of this volume was changed successfully." +msgstr "" + +#: AdviceMessage.WarningMessage.PasswordChange.Title +msgid "Could not change password" +msgstr "" + +#: AdviceMessage.WarningMessage.PasswordChange.Text +msgid "The password of this volume could not be changed - sorry!" +msgstr "" diff --git a/v0.3.4.5/plugins/volume_chpasswd/intl/de/cryptobox-server-feature-volume_chpasswd.po b/v0.3.4.5/plugins/volume_chpasswd/intl/de/cryptobox-server-feature-volume_chpasswd.po new file mode 100644 index 0000000..90254d9 --- /dev/null +++ b/v0.3.4.5/plugins/volume_chpasswd/intl/de/cryptobox-server-feature-volume_chpasswd.po @@ -0,0 +1,57 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:03+0100\n" +"PO-Revision-Date: 2007-02-03 21:51+0100\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Change volume password" +msgstr "Datenträger-Passwort ändern" + +#: Link +msgid "Password" +msgstr "Passwort" + +#: Title.ChangePassword +msgid "Change the password of this volume" +msgstr "Änderung des Datenträger-Passworts" + +#: Button.ChangePassword +msgid "Change password" +msgstr "Passwort ändern" + +#: Help.Password +msgid "You can easily change the password of an encrypted volume. Just enter the current password and type your new password twice. No data will get lost." +msgstr "Das Passwort eines verschlüsselten Datenträgers lässt sich problemlos ändern. Gib einfach das aktuelle Passwort und zweimal das neue Passwort ein. Dabei gehen keinerlei Daten verloren." + +#: AdviceMessage.FormatForEncryptionSupport.Text +msgid "This volume is not encrypted. If you want to turn on encryption, then you have to format the volume. Beware: this will erase all data from this volume." +msgstr "Dieser Datenträger ist nicht verschlüsselt. Falls die Verschlüsselung eingeschaltet werden soll, dann muss der Datenträger formatiert werden. Beachte, dass dabei alle Daten des Datenträgers gelöscht werden." + +#: AdviceMessage.FormatForEncryptionSupport.Link.Text +msgid "Format this volume" +msgstr "Datenträger formatieren" + +#: AdviceMessage.SuccessMessage.PasswordChange.Title +msgid "Password changed" +msgstr "Passwort geändert" + +#: AdviceMessage.SuccessMessage.PasswordChange.Text +msgid "The password of this volume was changed successfully." +msgstr "Das Passwort des Datenträgers wurde erfolgreich geändert." + +#: AdviceMessage.WarningMessage.PasswordChange.Title +msgid "Could not change password" +msgstr "Passwortänderung fehlgeschlagen" + +#: AdviceMessage.WarningMessage.PasswordChange.Text +msgid "The password of this volume could not be changed - sorry!" +msgstr "Das Passwort des Datenträgers konnte nicht verändert werden!" diff --git a/v0.3.4.5/plugins/volume_chpasswd/intl/en/cryptobox-server-feature-volume_chpasswd.po b/v0.3.4.5/plugins/volume_chpasswd/intl/en/cryptobox-server-feature-volume_chpasswd.po new file mode 100644 index 0000000..e4a8c1f --- /dev/null +++ b/v0.3.4.5/plugins/volume_chpasswd/intl/en/cryptobox-server-feature-volume_chpasswd.po @@ -0,0 +1,44 @@ +#: Name +msgid "Change volume password" +msgstr "Change volume password" + +#: Link +msgid "Password" +msgstr "Password" + +#: Title.ChangePassword +msgid "Change the password of this volume" +msgstr "Change the password of this volume" + +#: Button.ChangePassword +msgid "Change password" +msgstr "Change password" + +#: Help.Password +#, fuzzy +msgid "You can easily change the password of an encrypted volume. Just enter the current password and type your new password twice. No data will get lost." +msgstr "You can easily change the password of an encrypted volume. Just enter the current password and type your new password twice. No data will get lost." + +#: AdviceMessage.FormatForEncryptionSupport.Text +msgid "This volume is not encrypted. If you want to turn on encryption, then you have to format the volume. Beware: this will erase all data from this volume." +msgstr "This volume is not encrypted. If you want to turn on encryption, then you have to format the volume. Beware: this will erase all data from this volume." + +#: AdviceMessage.FormatForEncryptionSupport.Link.Text +msgid "Format this volume" +msgstr "Format this volume" + +#: AdviceMessage.SuccessMessage.PasswordChange.Title +msgid "Password changed" +msgstr "Password changed" + +#: AdviceMessage.SuccessMessage.PasswordChange.Text +msgid "The password of this volume was changed successfully." +msgstr "The password of this volume was changed successfully." + +#: AdviceMessage.WarningMessage.PasswordChange.Title +msgid "Could not change password" +msgstr "Could not change password" + +#: AdviceMessage.WarningMessage.PasswordChange.Text +msgid "The password of this volume could not be changed - sorry!" +msgstr "The password of this volume could not be changed - sorry!" diff --git a/v0.3.4.5/plugins/volume_chpasswd/intl/es/cryptobox-server-feature-volume_chpasswd.po b/v0.3.4.5/plugins/volume_chpasswd/intl/es/cryptobox-server-feature-volume_chpasswd.po new file mode 100644 index 0000000..dbad806 --- /dev/null +++ b/v0.3.4.5/plugins/volume_chpasswd/intl/es/cryptobox-server-feature-volume_chpasswd.po @@ -0,0 +1,58 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:03+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Change volume password" +msgstr "" + +#: Link +msgid "Password" +msgstr "" + +#: Title.ChangePassword +msgid "Change the password of this volume" +msgstr "" + +#: Button.ChangePassword +msgid "Change password" +msgstr "" + +#: Help.Password +msgid "You can easily change the password of an encrypted volume. Just enter the current password and type your new password twice. No data will get lost." +msgstr "" + +#: AdviceMessage.FormatForEncryptionSupport.Text +msgid "This volume is not encrypted. If you want to turn on encryption, then you have to format the volume. Beware: this will erase all data from this volume." +msgstr "" + +#: AdviceMessage.FormatForEncryptionSupport.Link.Text +msgid "Format this volume" +msgstr "" + +#: AdviceMessage.SuccessMessage.PasswordChange.Title +msgid "Password changed" +msgstr "" + +#: AdviceMessage.SuccessMessage.PasswordChange.Text +msgid "The password of this volume was changed successfully." +msgstr "" + +#: AdviceMessage.WarningMessage.PasswordChange.Title +msgid "Could not change password" +msgstr "" + +#: AdviceMessage.WarningMessage.PasswordChange.Text +msgid "The password of this volume could not be changed - sorry!" +msgstr "" diff --git a/v0.3.4.5/plugins/volume_chpasswd/intl/fi/cryptobox-server-feature-volume_chpasswd.po b/v0.3.4.5/plugins/volume_chpasswd/intl/fi/cryptobox-server-feature-volume_chpasswd.po new file mode 100644 index 0000000..dbad806 --- /dev/null +++ b/v0.3.4.5/plugins/volume_chpasswd/intl/fi/cryptobox-server-feature-volume_chpasswd.po @@ -0,0 +1,58 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:03+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Change volume password" +msgstr "" + +#: Link +msgid "Password" +msgstr "" + +#: Title.ChangePassword +msgid "Change the password of this volume" +msgstr "" + +#: Button.ChangePassword +msgid "Change password" +msgstr "" + +#: Help.Password +msgid "You can easily change the password of an encrypted volume. Just enter the current password and type your new password twice. No data will get lost." +msgstr "" + +#: AdviceMessage.FormatForEncryptionSupport.Text +msgid "This volume is not encrypted. If you want to turn on encryption, then you have to format the volume. Beware: this will erase all data from this volume." +msgstr "" + +#: AdviceMessage.FormatForEncryptionSupport.Link.Text +msgid "Format this volume" +msgstr "" + +#: AdviceMessage.SuccessMessage.PasswordChange.Title +msgid "Password changed" +msgstr "" + +#: AdviceMessage.SuccessMessage.PasswordChange.Text +msgid "The password of this volume was changed successfully." +msgstr "" + +#: AdviceMessage.WarningMessage.PasswordChange.Title +msgid "Could not change password" +msgstr "" + +#: AdviceMessage.WarningMessage.PasswordChange.Text +msgid "The password of this volume could not be changed - sorry!" +msgstr "" diff --git a/v0.3.4.5/plugins/volume_chpasswd/intl/fr/cryptobox-server-feature-volume_chpasswd.po b/v0.3.4.5/plugins/volume_chpasswd/intl/fr/cryptobox-server-feature-volume_chpasswd.po new file mode 100644 index 0000000..dbad806 --- /dev/null +++ b/v0.3.4.5/plugins/volume_chpasswd/intl/fr/cryptobox-server-feature-volume_chpasswd.po @@ -0,0 +1,58 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:03+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Change volume password" +msgstr "" + +#: Link +msgid "Password" +msgstr "" + +#: Title.ChangePassword +msgid "Change the password of this volume" +msgstr "" + +#: Button.ChangePassword +msgid "Change password" +msgstr "" + +#: Help.Password +msgid "You can easily change the password of an encrypted volume. Just enter the current password and type your new password twice. No data will get lost." +msgstr "" + +#: AdviceMessage.FormatForEncryptionSupport.Text +msgid "This volume is not encrypted. If you want to turn on encryption, then you have to format the volume. Beware: this will erase all data from this volume." +msgstr "" + +#: AdviceMessage.FormatForEncryptionSupport.Link.Text +msgid "Format this volume" +msgstr "" + +#: AdviceMessage.SuccessMessage.PasswordChange.Title +msgid "Password changed" +msgstr "" + +#: AdviceMessage.SuccessMessage.PasswordChange.Text +msgid "The password of this volume was changed successfully." +msgstr "" + +#: AdviceMessage.WarningMessage.PasswordChange.Title +msgid "Could not change password" +msgstr "" + +#: AdviceMessage.WarningMessage.PasswordChange.Text +msgid "The password of this volume could not be changed - sorry!" +msgstr "" diff --git a/v0.3.4.5/plugins/volume_chpasswd/intl/hu/cryptobox-server-feature-volume_chpasswd.po b/v0.3.4.5/plugins/volume_chpasswd/intl/hu/cryptobox-server-feature-volume_chpasswd.po new file mode 100644 index 0000000..dbad806 --- /dev/null +++ b/v0.3.4.5/plugins/volume_chpasswd/intl/hu/cryptobox-server-feature-volume_chpasswd.po @@ -0,0 +1,58 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:03+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Change volume password" +msgstr "" + +#: Link +msgid "Password" +msgstr "" + +#: Title.ChangePassword +msgid "Change the password of this volume" +msgstr "" + +#: Button.ChangePassword +msgid "Change password" +msgstr "" + +#: Help.Password +msgid "You can easily change the password of an encrypted volume. Just enter the current password and type your new password twice. No data will get lost." +msgstr "" + +#: AdviceMessage.FormatForEncryptionSupport.Text +msgid "This volume is not encrypted. If you want to turn on encryption, then you have to format the volume. Beware: this will erase all data from this volume." +msgstr "" + +#: AdviceMessage.FormatForEncryptionSupport.Link.Text +msgid "Format this volume" +msgstr "" + +#: AdviceMessage.SuccessMessage.PasswordChange.Title +msgid "Password changed" +msgstr "" + +#: AdviceMessage.SuccessMessage.PasswordChange.Text +msgid "The password of this volume was changed successfully." +msgstr "" + +#: AdviceMessage.WarningMessage.PasswordChange.Title +msgid "Could not change password" +msgstr "" + +#: AdviceMessage.WarningMessage.PasswordChange.Text +msgid "The password of this volume could not be changed - sorry!" +msgstr "" diff --git a/v0.3.4.5/plugins/volume_chpasswd/intl/it/cryptobox-server-feature-volume_chpasswd.po b/v0.3.4.5/plugins/volume_chpasswd/intl/it/cryptobox-server-feature-volume_chpasswd.po new file mode 100644 index 0000000..c119e23 --- /dev/null +++ b/v0.3.4.5/plugins/volume_chpasswd/intl/it/cryptobox-server-feature-volume_chpasswd.po @@ -0,0 +1,57 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-04-01 15:53+0200\n" +"PO-Revision-Date: 2007-02-26 11:06+0100\n" +"Last-Translator: Fabrizio Tarizzo \n" +"Language-Team: Italian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Change volume password" +msgstr "Modifica la password del volume" + +#: Link +msgid "Password" +msgstr "Password" + +#: Title.ChangePassword +msgid "Change the password of this volume" +msgstr "Modifica la password di questo volume" + +#: Button.ChangePassword +msgid "Change password" +msgstr "Modifica password" + +#: Help.Password +msgid "You can easily change the password of an encrypted volume. Just enter the current password and type your new password twice. No data will get lost." +msgstr "È possibile modificare la password di un volume cifrato. Inserire la password attuale e due volte la password nuova. Nessun dato sarà perso." + +#: AdviceMessage.FormatForEncryptionSupport.Text +msgid "This volume is not encrypted. If you want to turn on encryption, then you have to format the volume. Beware: this will erase all data from this volume." +msgstr "Questo volume non è cifrato. Per attivare la cifratura, è necessario formattare il volume. Prestare atenzione al fatto che questa operazione cancellerà tutti i dati presenti nel volume." + +#: AdviceMessage.FormatForEncryptionSupport.Link.Text +msgid "Format this volume" +msgstr "Formatta questo volume" + +#: AdviceMessage.SuccessMessage.PasswordChange.Title +msgid "Password changed" +msgstr "Password modificata" + +#: AdviceMessage.SuccessMessage.PasswordChange.Text +msgid "The password of this volume was changed successfully." +msgstr "La password di questo volume è stata modificata con successo." + +#: AdviceMessage.WarningMessage.PasswordChange.Title +msgid "Could not change password" +msgstr "Impossibile modificare la password" + +#: AdviceMessage.WarningMessage.PasswordChange.Text +msgid "The password of this volume could not be changed - sorry!" +msgstr "" diff --git a/v0.3.4.5/plugins/volume_chpasswd/intl/ja/cryptobox-server-feature-volume_chpasswd.po b/v0.3.4.5/plugins/volume_chpasswd/intl/ja/cryptobox-server-feature-volume_chpasswd.po new file mode 100644 index 0000000..3e2a305 --- /dev/null +++ b/v0.3.4.5/plugins/volume_chpasswd/intl/ja/cryptobox-server-feature-volume_chpasswd.po @@ -0,0 +1,57 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:03+0100\n" +"PO-Revision-Date: 2007-02-24 02:47+0100\n" +"Last-Translator: kinneko \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Change volume password" +msgstr "領域パスワードの変更" + +#: Link +msgid "Password" +msgstr "パスワード" + +#: Title.ChangePassword +msgid "Change the password of this volume" +msgstr "この領域のパスワードを変更する" + +#: Button.ChangePassword +msgid "Change password" +msgstr "パスワード変更" + +#: Help.Password +msgid "You can easily change the password of an encrypted volume. Just enter the current password and type your new password twice. No data will get lost." +msgstr "暗号化された領域のパスワード変更は簡単です。現在のパスワードと新しいパスワードを2回記入するだけです。この操作でデータがなくなることはありません。" + +#: AdviceMessage.FormatForEncryptionSupport.Text +msgid "This volume is not encrypted. If you want to turn on encryption, then you have to format the volume. Beware: this will erase all data from this volume." +msgstr "この領域は暗号化されていません。暗号化を有効にするには、領域を初期化する必要があります。注意:この操作を行うと、格納されているすべてのデータは消去されます。" + +#: AdviceMessage.FormatForEncryptionSupport.Link.Text +msgid "Format this volume" +msgstr "領域の初期化" + +#: AdviceMessage.SuccessMessage.PasswordChange.Title +msgid "Password changed" +msgstr "パスワードを変更しました" + +#: AdviceMessage.SuccessMessage.PasswordChange.Text +msgid "The password of this volume was changed successfully." +msgstr "この領域のパスワード変更に成功しました。" + +#: AdviceMessage.WarningMessage.PasswordChange.Title +msgid "Could not change password" +msgstr "パスワードを変更することができませんでした" + +#: AdviceMessage.WarningMessage.PasswordChange.Text +msgid "The password of this volume could not be changed - sorry!" +msgstr "この領域のパスワードを変更することができませんでした。" diff --git a/v0.3.4.5/plugins/volume_chpasswd/intl/nl/cryptobox-server-feature-volume_chpasswd.po b/v0.3.4.5/plugins/volume_chpasswd/intl/nl/cryptobox-server-feature-volume_chpasswd.po new file mode 100644 index 0000000..dbad806 --- /dev/null +++ b/v0.3.4.5/plugins/volume_chpasswd/intl/nl/cryptobox-server-feature-volume_chpasswd.po @@ -0,0 +1,58 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:03+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Change volume password" +msgstr "" + +#: Link +msgid "Password" +msgstr "" + +#: Title.ChangePassword +msgid "Change the password of this volume" +msgstr "" + +#: Button.ChangePassword +msgid "Change password" +msgstr "" + +#: Help.Password +msgid "You can easily change the password of an encrypted volume. Just enter the current password and type your new password twice. No data will get lost." +msgstr "" + +#: AdviceMessage.FormatForEncryptionSupport.Text +msgid "This volume is not encrypted. If you want to turn on encryption, then you have to format the volume. Beware: this will erase all data from this volume." +msgstr "" + +#: AdviceMessage.FormatForEncryptionSupport.Link.Text +msgid "Format this volume" +msgstr "" + +#: AdviceMessage.SuccessMessage.PasswordChange.Title +msgid "Password changed" +msgstr "" + +#: AdviceMessage.SuccessMessage.PasswordChange.Text +msgid "The password of this volume was changed successfully." +msgstr "" + +#: AdviceMessage.WarningMessage.PasswordChange.Title +msgid "Could not change password" +msgstr "" + +#: AdviceMessage.WarningMessage.PasswordChange.Text +msgid "The password of this volume could not be changed - sorry!" +msgstr "" diff --git a/v0.3.4.5/plugins/volume_chpasswd/intl/pl/cryptobox-server-feature-volume_chpasswd.po b/v0.3.4.5/plugins/volume_chpasswd/intl/pl/cryptobox-server-feature-volume_chpasswd.po new file mode 100644 index 0000000..8b16f74 --- /dev/null +++ b/v0.3.4.5/plugins/volume_chpasswd/intl/pl/cryptobox-server-feature-volume_chpasswd.po @@ -0,0 +1,57 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-04-01 15:53+0200\n" +"PO-Revision-Date: 2007-03-29 20:58+0200\n" +"Last-Translator: Andrzej S. Kaznowski \n" +"Language-Team: POLSKI \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Change volume password" +msgstr "Zmień hasło dla woluminu" + +#: Link +msgid "Password" +msgstr "Hasło" + +#: Title.ChangePassword +msgid "Change the password of this volume" +msgstr "Zmień hasło dla wybranego woluminu" + +#: Button.ChangePassword +msgid "Change password" +msgstr "Zmień hasło" + +#: Help.Password +msgid "You can easily change the password of an encrypted volume. Just enter the current password and type your new password twice. No data will get lost." +msgstr "Możesz łatwo zmieniać hasło szyfrowanego woluminu. Wystarczy wpisać aktualne hasło i wpisać nowe hasło dwa razy. Nie ma ryzyka utraty danych." + +#: AdviceMessage.FormatForEncryptionSupport.Text +msgid "This volume is not encrypted. If you want to turn on encryption, then you have to format the volume. Beware: this will erase all data from this volume." +msgstr "Wolumin nie jest szyfrowany. Jeśli chcesz włączyć szyfrowanie, musisz sformatować ten wolumin. Uwaga: wszystkie dane z tego woluminu zostaną wykreślone!" + +#: AdviceMessage.FormatForEncryptionSupport.Link.Text +msgid "Format this volume" +msgstr "Formatuj wybrany wolumin" + +#: AdviceMessage.SuccessMessage.PasswordChange.Title +msgid "Password changed" +msgstr "Zmieniono hasło" + +#: AdviceMessage.SuccessMessage.PasswordChange.Text +msgid "The password of this volume was changed successfully." +msgstr "Zmieniono hasło dla wybranego woluminu." + +#: AdviceMessage.WarningMessage.PasswordChange.Title +msgid "Could not change password" +msgstr "Zmiana hasła nie powiodła się" + +#: AdviceMessage.WarningMessage.PasswordChange.Text +msgid "The password of this volume could not be changed - sorry!" +msgstr "Nie można zmienić hasła tego woluminu - przepraszamy!" diff --git a/v0.3.4.5/plugins/volume_chpasswd/intl/pt/cryptobox-server-feature-volume_chpasswd.po b/v0.3.4.5/plugins/volume_chpasswd/intl/pt/cryptobox-server-feature-volume_chpasswd.po new file mode 100644 index 0000000..dbad806 --- /dev/null +++ b/v0.3.4.5/plugins/volume_chpasswd/intl/pt/cryptobox-server-feature-volume_chpasswd.po @@ -0,0 +1,58 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:03+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Change volume password" +msgstr "" + +#: Link +msgid "Password" +msgstr "" + +#: Title.ChangePassword +msgid "Change the password of this volume" +msgstr "" + +#: Button.ChangePassword +msgid "Change password" +msgstr "" + +#: Help.Password +msgid "You can easily change the password of an encrypted volume. Just enter the current password and type your new password twice. No data will get lost." +msgstr "" + +#: AdviceMessage.FormatForEncryptionSupport.Text +msgid "This volume is not encrypted. If you want to turn on encryption, then you have to format the volume. Beware: this will erase all data from this volume." +msgstr "" + +#: AdviceMessage.FormatForEncryptionSupport.Link.Text +msgid "Format this volume" +msgstr "" + +#: AdviceMessage.SuccessMessage.PasswordChange.Title +msgid "Password changed" +msgstr "" + +#: AdviceMessage.SuccessMessage.PasswordChange.Text +msgid "The password of this volume was changed successfully." +msgstr "" + +#: AdviceMessage.WarningMessage.PasswordChange.Title +msgid "Could not change password" +msgstr "" + +#: AdviceMessage.WarningMessage.PasswordChange.Text +msgid "The password of this volume could not be changed - sorry!" +msgstr "" diff --git a/v0.3.4.5/plugins/volume_chpasswd/intl/ru/cryptobox-server-feature-volume_chpasswd.po b/v0.3.4.5/plugins/volume_chpasswd/intl/ru/cryptobox-server-feature-volume_chpasswd.po new file mode 100644 index 0000000..dbad806 --- /dev/null +++ b/v0.3.4.5/plugins/volume_chpasswd/intl/ru/cryptobox-server-feature-volume_chpasswd.po @@ -0,0 +1,58 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:03+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Change volume password" +msgstr "" + +#: Link +msgid "Password" +msgstr "" + +#: Title.ChangePassword +msgid "Change the password of this volume" +msgstr "" + +#: Button.ChangePassword +msgid "Change password" +msgstr "" + +#: Help.Password +msgid "You can easily change the password of an encrypted volume. Just enter the current password and type your new password twice. No data will get lost." +msgstr "" + +#: AdviceMessage.FormatForEncryptionSupport.Text +msgid "This volume is not encrypted. If you want to turn on encryption, then you have to format the volume. Beware: this will erase all data from this volume." +msgstr "" + +#: AdviceMessage.FormatForEncryptionSupport.Link.Text +msgid "Format this volume" +msgstr "" + +#: AdviceMessage.SuccessMessage.PasswordChange.Title +msgid "Password changed" +msgstr "" + +#: AdviceMessage.SuccessMessage.PasswordChange.Text +msgid "The password of this volume was changed successfully." +msgstr "" + +#: AdviceMessage.WarningMessage.PasswordChange.Title +msgid "Could not change password" +msgstr "" + +#: AdviceMessage.WarningMessage.PasswordChange.Text +msgid "The password of this volume could not be changed - sorry!" +msgstr "" diff --git a/v0.3.4.5/plugins/volume_chpasswd/intl/sl/cryptobox-server-feature-volume_chpasswd.po b/v0.3.4.5/plugins/volume_chpasswd/intl/sl/cryptobox-server-feature-volume_chpasswd.po new file mode 100644 index 0000000..2cc6dfa --- /dev/null +++ b/v0.3.4.5/plugins/volume_chpasswd/intl/sl/cryptobox-server-feature-volume_chpasswd.po @@ -0,0 +1,57 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:03+0100\n" +"PO-Revision-Date: 2007-02-06 15:20+0100\n" +"Last-Translator: tenzin \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Change volume password" +msgstr "Spremenite geslo nosilca" + +#: Link +msgid "Password" +msgstr "Geslo" + +#: Title.ChangePassword +msgid "Change the password of this volume" +msgstr "Spremenite geslo tega nosilca" + +#: Button.ChangePassword +msgid "Change password" +msgstr "Spremeni geslo" + +#: Help.Password +msgid "You can easily change the password of an encrypted volume. Just enter the current password and type your new password twice. No data will get lost." +msgstr "Z lahkoto lahko spremeniš geslo kriptiranega nosiulca (vsebine, dela). Vse kar moraš storiti je, da vneseš trenutno geslo, nato vneseš novo geslo - dvakrat. S tem dejanjem ne boste izgubili nobenega podatka." + +#: AdviceMessage.FormatForEncryptionSupport.Text +msgid "This volume is not encrypted. If you want to turn on encryption, then you have to format the volume. Beware: this will erase all data from this volume." +msgstr "Ta vsebina ni kriptirana. V kolikor želite vključiti inkripcijo, morate ta del, vsebino formatirati. Vendar POZOR: s tem boste zbrisali vse podatke, ki so trenutno na tem nosilcu. " + +#: AdviceMessage.FormatForEncryptionSupport.Link.Text +msgid "Format this volume" +msgstr "Formatiraj to vsebino" + +#: AdviceMessage.SuccessMessage.PasswordChange.Title +msgid "Password changed" +msgstr "Geslo spremenjeno" + +#: AdviceMessage.SuccessMessage.PasswordChange.Text +msgid "The password of this volume was changed successfully." +msgstr "Geslo tega nosilca je bilo uspešno spremenjeno." + +#: AdviceMessage.WarningMessage.PasswordChange.Title +msgid "Could not change password" +msgstr "Ne morem spremeniti gesla." + +#: AdviceMessage.WarningMessage.PasswordChange.Text +msgid "The password of this volume could not be changed - sorry!" +msgstr "Geslo tega nosilca/vsebine ne more biti spremenjeno - oprosti!" diff --git a/v0.3.4.5/plugins/volume_chpasswd/intl/sv/cryptobox-server-feature-volume_chpasswd.po b/v0.3.4.5/plugins/volume_chpasswd/intl/sv/cryptobox-server-feature-volume_chpasswd.po new file mode 100644 index 0000000..dbad806 --- /dev/null +++ b/v0.3.4.5/plugins/volume_chpasswd/intl/sv/cryptobox-server-feature-volume_chpasswd.po @@ -0,0 +1,58 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:03+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Change volume password" +msgstr "" + +#: Link +msgid "Password" +msgstr "" + +#: Title.ChangePassword +msgid "Change the password of this volume" +msgstr "" + +#: Button.ChangePassword +msgid "Change password" +msgstr "" + +#: Help.Password +msgid "You can easily change the password of an encrypted volume. Just enter the current password and type your new password twice. No data will get lost." +msgstr "" + +#: AdviceMessage.FormatForEncryptionSupport.Text +msgid "This volume is not encrypted. If you want to turn on encryption, then you have to format the volume. Beware: this will erase all data from this volume." +msgstr "" + +#: AdviceMessage.FormatForEncryptionSupport.Link.Text +msgid "Format this volume" +msgstr "" + +#: AdviceMessage.SuccessMessage.PasswordChange.Title +msgid "Password changed" +msgstr "" + +#: AdviceMessage.SuccessMessage.PasswordChange.Text +msgid "The password of this volume was changed successfully." +msgstr "" + +#: AdviceMessage.WarningMessage.PasswordChange.Title +msgid "Could not change password" +msgstr "" + +#: AdviceMessage.WarningMessage.PasswordChange.Text +msgid "The password of this volume could not be changed - sorry!" +msgstr "" diff --git a/v0.3.4.5/plugins/volume_chpasswd/intl/ur/cryptobox-server-feature-volume_chpasswd.po b/v0.3.4.5/plugins/volume_chpasswd/intl/ur/cryptobox-server-feature-volume_chpasswd.po new file mode 100644 index 0000000..e3f1910 --- /dev/null +++ b/v0.3.4.5/plugins/volume_chpasswd/intl/ur/cryptobox-server-feature-volume_chpasswd.po @@ -0,0 +1,58 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-02-05 23:28+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Change volume password" +msgstr "" + +#: Link +msgid "Password" +msgstr "" + +#: Title.ChangePassword +msgid "Change the password of this volume" +msgstr "" + +#: Button.ChangePassword +msgid "Change password" +msgstr "" + +#: Help.Password +msgid "You can easily change the password of an encrypted volume. Just enter the current password and type your new password twice. No data will get lost." +msgstr "" + +#: AdviceMessage.FormatForEncryptionSupport.Text +msgid "This volume is not encrypted. If you want to turn on encryption, then you have to format the volume. Beware: this will erase all data from this volume." +msgstr "" + +#: AdviceMessage.FormatForEncryptionSupport.Link.Text +msgid "Format this volume" +msgstr "" + +#: AdviceMessage.SuccessMessage.PasswordChange.Title +msgid "Password changed" +msgstr "" + +#: AdviceMessage.SuccessMessage.PasswordChange.Text +msgid "The password of this volume was changed successfully." +msgstr "" + +#: AdviceMessage.WarningMessage.PasswordChange.Title +msgid "Could not change password" +msgstr "" + +#: AdviceMessage.WarningMessage.PasswordChange.Text +msgid "The password of this volume could not be changed - sorry!" +msgstr "" diff --git a/v0.3.4.5/plugins/volume_chpasswd/language.hdf b/v0.3.4.5/plugins/volume_chpasswd/language.hdf new file mode 100644 index 0000000..777042e --- /dev/null +++ b/v0.3.4.5/plugins/volume_chpasswd/language.hdf @@ -0,0 +1,38 @@ +Name = Change volume password +Link = Password + +Title { + ChangePassword = Change the password of this volume +} + + +Button { + ChangePassword = Change password +} + + +Help.Password = You can easily change the password of an encrypted volume. Just enter the current password and type your new password twice. No data will get lost. + + +AdviceMessage { + FormatForEncryptionSupport { + Text = This volume is not encrypted. If you want to turn on encryption, then you have to format the volume. Beware: this will erase all data from this volume. + Link.Text = Format this volume + Link.Rel = volume_format_fs +} + + +SuccessMessage { + PasswordChange { + Title = Password changed + Text = The password of this volume was changed successfully. + } +} + + +WarningMessage { + PasswordChange { + Title = Could not change password + Text = The password of this volume could not be changed - sorry! + } +} diff --git a/v0.3.4.5/plugins/volume_chpasswd/unittests.py b/v0.3.4.5/plugins/volume_chpasswd/unittests.py new file mode 100644 index 0000000..d001dbc --- /dev/null +++ b/v0.3.4.5/plugins/volume_chpasswd/unittests.py @@ -0,0 +1,33 @@ +# +# Copyright 2006 sense.lab e.V. +# +# This file is part of the CryptoBox. +# +# The CryptoBox 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 CryptoBox 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 the CryptoBox; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +__revision__ = "$Id" + +from cryptobox.tests.base import WebInterfaceTestClass + +class unittests(WebInterfaceTestClass): + + def test_read_form(self): + url = self.url + "volume_chpasswd?weblang=en&device=" + self.device_html + self.register_auth(url) + self.cmd.go(url) + self.cmd.find('hange') + self.cmd.find('password') + diff --git a/v0.3.4.5/plugins/volume_chpasswd/volume_chpasswd.cs b/v0.3.4.5/plugins/volume_chpasswd/volume_chpasswd.cs new file mode 100644 index 0000000..8795e6c --- /dev/null +++ b/v0.3.4.5/plugins/volume_chpasswd/volume_chpasswd.cs @@ -0,0 +1,41 @@ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + +
+ diff --git a/v0.3.4.5/plugins/volume_chpasswd/volume_chpasswd.py b/v0.3.4.5/plugins/volume_chpasswd/volume_chpasswd.py new file mode 100644 index 0000000..2fb4505 --- /dev/null +++ b/v0.3.4.5/plugins/volume_chpasswd/volume_chpasswd.py @@ -0,0 +1,88 @@ +# +# Copyright 2006 sense.lab e.V. +# +# This file is part of the CryptoBox. +# +# The CryptoBox 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 CryptoBox 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 the CryptoBox; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +__revision__ = "$Id" + +import cryptobox.plugins.base +from cryptobox.core.exceptions import * + + +class volume_chpasswd(cryptobox.plugins.base.CryptoBoxPlugin): + + plugin_capabilities = [ "volume" ] + plugin_visibility = [ "properties" ] + request_auth = False + rank = 70 + + + def do_action(self, store=None, old_pw=None, new_pw=None, new_pw2=None): + self.container = self.cbox.get_container(self.device) + if not self.container: + return None + elif store == "change_pw": + return self.__change_password(old_pw, new_pw, new_pw2) + elif not store: + return "volume_chpasswd" + else: + self.cbox.log.info("plugin 'volume_chpasswd' - unknown action: %s" % store) + return "volume_chpasswd" + + + def get_status(self): + return "TODO" + + + def is_useful(self, device): + from cryptobox.core.container import CONTAINERTYPES as cont_types + cont = self.cbox.get_container(device) + if not cont: + return False + if cont.get_type() == cont_types["luks"]: + return True + return False + + + def __change_password(self, old_pw, new_pw, new_pw2): + if not old_pw: + self.hdf["Data.Warning"] = "EmptyPassword" + elif not new_pw: + self.hdf["Data.Warning"] = "EmptyNewPassword" + elif new_pw != new_pw2: + self.hdf["Data.Warning"] = "DifferentPasswords" + elif old_pw == new_pw: + ## do nothing + pass + else: + try: + self.container.change_password(old_pw, new_pw) + except CBInvalidType, err_msg: + self.cbox.log.info("plugin 'volume_chpasswd' - cannot change " \ + + "passphrase for non-encrypted container (%s): %s" \ + % (self.device, err_msg)) + except CBVolumeIsActive: + self.hdf["Data.Warning"] = "VolumeMayNotBeMounted" + except CBChangePasswordError, err_msg: + self.cbox.log.warn("plugin 'volume_chpasswd' - cannot change " \ + + "password for device (%s): %s" % (self.device, err_msg)) + self.hdf["Data.Warning"] = "Plugins.volume_chpasswd.PasswordChange" + else: + self.hdf["Data.Success"] = "Plugins.volume_chpasswd.PasswordChange" + return "volume_chpasswd" + diff --git a/v0.3.4.5/plugins/volume_details/intl/cryptobox-server-feature-volume_details.pot b/v0.3.4.5/plugins/volume_details/intl/cryptobox-server-feature-volume_details.pot new file mode 100644 index 0000000..82574c0 --- /dev/null +++ b/v0.3.4.5/plugins/volume_details/intl/cryptobox-server-feature-volume_details.pot @@ -0,0 +1,55 @@ +#: Name +msgid "Technical details of a volume" +msgstr "" + +#: Link +msgid "Details" +msgstr "" + +#: Title.Details +msgid "Technical details" +msgstr "" + +#: Help.Details +msgid "Here are some deep technical details. You'll mostly need them in case you are confused with your volumes." +msgstr "" + +#: Text.DeviceName +msgid "Name of device" +msgstr "" + +#: Text.Status +msgid "Status" +msgstr "" + +#: Text.StatusActive +msgid "open" +msgstr "" + +#: Text.StatusPassive +msgid "closed" +msgstr "" + +#: Text.EncryptionStatus +msgid "Encryption" +msgstr "" + +#: Text.Yes +msgid "Yes" +msgstr "" + +#: Text.No +msgid "No" +msgstr "" + +#: Text.Size.All +msgid "Space of volume" +msgstr "" + +#: Text.Size.Avail +msgid "Available space of volume" +msgstr "" + +#: Text.Size.Used +msgid "Used space of volume" +msgstr "" diff --git a/v0.3.4.5/plugins/volume_details/intl/cs/cryptobox-server-feature-volume_details.po b/v0.3.4.5/plugins/volume_details/intl/cs/cryptobox-server-feature-volume_details.po new file mode 100644 index 0000000..ec167b6 --- /dev/null +++ b/v0.3.4.5/plugins/volume_details/intl/cs/cryptobox-server-feature-volume_details.po @@ -0,0 +1,70 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:02+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Technical details of a volume" +msgstr "" + +#: Link +msgid "Details" +msgstr "" + +#: Title.Details +msgid "Technical details" +msgstr "" + +#: Help.Details +msgid "Here are some deep technical details. You'll mostly need them in case you are confused with your volumes." +msgstr "" + +#: Text.DeviceName +msgid "Name of device" +msgstr "" + +#: Text.Status +msgid "Status" +msgstr "" + +#: Text.StatusActive +msgid "open" +msgstr "" + +#: Text.StatusPassive +msgid "closed" +msgstr "" + +#: Text.EncryptionStatus +msgid "Encryption" +msgstr "" + +#: Text.Yes +msgid "Yes" +msgstr "" + +#: Text.No +msgid "No" +msgstr "" + +#: Text.Size.All +msgid "Space of volume" +msgstr "" + +#: Text.Size.Avail +msgid "Available space of volume" +msgstr "" + +#: Text.Size.Used +msgid "Used space of volume" +msgstr "" diff --git a/v0.3.4.5/plugins/volume_details/intl/da/cryptobox-server-feature-volume_details.po b/v0.3.4.5/plugins/volume_details/intl/da/cryptobox-server-feature-volume_details.po new file mode 100644 index 0000000..ec167b6 --- /dev/null +++ b/v0.3.4.5/plugins/volume_details/intl/da/cryptobox-server-feature-volume_details.po @@ -0,0 +1,70 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:02+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Technical details of a volume" +msgstr "" + +#: Link +msgid "Details" +msgstr "" + +#: Title.Details +msgid "Technical details" +msgstr "" + +#: Help.Details +msgid "Here are some deep technical details. You'll mostly need them in case you are confused with your volumes." +msgstr "" + +#: Text.DeviceName +msgid "Name of device" +msgstr "" + +#: Text.Status +msgid "Status" +msgstr "" + +#: Text.StatusActive +msgid "open" +msgstr "" + +#: Text.StatusPassive +msgid "closed" +msgstr "" + +#: Text.EncryptionStatus +msgid "Encryption" +msgstr "" + +#: Text.Yes +msgid "Yes" +msgstr "" + +#: Text.No +msgid "No" +msgstr "" + +#: Text.Size.All +msgid "Space of volume" +msgstr "" + +#: Text.Size.Avail +msgid "Available space of volume" +msgstr "" + +#: Text.Size.Used +msgid "Used space of volume" +msgstr "" diff --git a/v0.3.4.5/plugins/volume_details/intl/de/cryptobox-server-feature-volume_details.po b/v0.3.4.5/plugins/volume_details/intl/de/cryptobox-server-feature-volume_details.po new file mode 100644 index 0000000..e26c274 --- /dev/null +++ b/v0.3.4.5/plugins/volume_details/intl/de/cryptobox-server-feature-volume_details.po @@ -0,0 +1,69 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:02+0100\n" +"PO-Revision-Date: 2007-02-03 21:26+0100\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Technical details of a volume" +msgstr "Technische Details eines Datenträgers" + +#: Link +msgid "Details" +msgstr "Details" + +#: Title.Details +msgid "Technical details" +msgstr "Technische Details" + +#: Help.Details +msgid "Here are some deep technical details. You'll mostly need them in case you are confused with your volumes." +msgstr "Hier findest du einige genauere technische Angaben. Du wirst sie brauchen, für den Fall, dass etwas mit deinem Datenträgern schief gelaufen ist." + +#: Text.DeviceName +msgid "Name of device" +msgstr "Name des Geräts" + +#: Text.Status +msgid "Status" +msgstr "Status" + +#: Text.StatusActive +msgid "open" +msgstr "geöffnet" + +#: Text.StatusPassive +msgid "closed" +msgstr "geschlossen" + +#: Text.EncryptionStatus +msgid "Encryption" +msgstr "Verschlüsselung" + +#: Text.Yes +msgid "Yes" +msgstr "Ja" + +#: Text.No +msgid "No" +msgstr "Nein" + +#: Text.Size.All +msgid "Space of volume" +msgstr "Kapazität des Datenträgers" + +#: Text.Size.Avail +msgid "Available space of volume" +msgstr "Verfügbarer Speicherplatz des Datenträgers" + +#: Text.Size.Used +msgid "Used space of volume" +msgstr "Belegter Speicherplatz des Datenträgers" diff --git a/v0.3.4.5/plugins/volume_details/intl/en/cryptobox-server-feature-volume_details.po b/v0.3.4.5/plugins/volume_details/intl/en/cryptobox-server-feature-volume_details.po new file mode 100644 index 0000000..78cd1a3 --- /dev/null +++ b/v0.3.4.5/plugins/volume_details/intl/en/cryptobox-server-feature-volume_details.po @@ -0,0 +1,55 @@ +#: Name +msgid "Technical details of a volume" +msgstr "Technical details of a volume" + +#: Link +msgid "Details" +msgstr "Details" + +#: Title.Details +msgid "Technical details" +msgstr "Technical details" + +#: Help.Details +msgid "Here are some deep technical details. You'll mostly need them in case you are confused with your volumes." +msgstr "Here are some deep technical details. You'll mostly need them in case you are confused with your volumes." + +#: Text.DeviceName +msgid "Name of device" +msgstr "Name of device" + +#: Text.Status +msgid "Status" +msgstr "Status" + +#: Text.StatusActive +msgid "open" +msgstr "open" + +#: Text.StatusPassive +msgid "closed" +msgstr "closed" + +#: Text.EncryptionStatus +msgid "Encryption" +msgstr "Encryption" + +#: Text.Yes +msgid "Yes" +msgstr "Yes" + +#: Text.No +msgid "No" +msgstr "No" + +#: Text.Size.All +msgid "Space of volume" +msgstr "Space of volume" + +#: Text.Size.Avail +msgid "Available space of volume" +msgstr "Available space of volume" + +#: Text.Size.Used +msgid "Used space of volume" +msgstr "Used space of volume" diff --git a/v0.3.4.5/plugins/volume_details/intl/es/cryptobox-server-feature-volume_details.po b/v0.3.4.5/plugins/volume_details/intl/es/cryptobox-server-feature-volume_details.po new file mode 100644 index 0000000..ec167b6 --- /dev/null +++ b/v0.3.4.5/plugins/volume_details/intl/es/cryptobox-server-feature-volume_details.po @@ -0,0 +1,70 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:02+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Technical details of a volume" +msgstr "" + +#: Link +msgid "Details" +msgstr "" + +#: Title.Details +msgid "Technical details" +msgstr "" + +#: Help.Details +msgid "Here are some deep technical details. You'll mostly need them in case you are confused with your volumes." +msgstr "" + +#: Text.DeviceName +msgid "Name of device" +msgstr "" + +#: Text.Status +msgid "Status" +msgstr "" + +#: Text.StatusActive +msgid "open" +msgstr "" + +#: Text.StatusPassive +msgid "closed" +msgstr "" + +#: Text.EncryptionStatus +msgid "Encryption" +msgstr "" + +#: Text.Yes +msgid "Yes" +msgstr "" + +#: Text.No +msgid "No" +msgstr "" + +#: Text.Size.All +msgid "Space of volume" +msgstr "" + +#: Text.Size.Avail +msgid "Available space of volume" +msgstr "" + +#: Text.Size.Used +msgid "Used space of volume" +msgstr "" diff --git a/v0.3.4.5/plugins/volume_details/intl/fi/cryptobox-server-feature-volume_details.po b/v0.3.4.5/plugins/volume_details/intl/fi/cryptobox-server-feature-volume_details.po new file mode 100644 index 0000000..ec167b6 --- /dev/null +++ b/v0.3.4.5/plugins/volume_details/intl/fi/cryptobox-server-feature-volume_details.po @@ -0,0 +1,70 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:02+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Technical details of a volume" +msgstr "" + +#: Link +msgid "Details" +msgstr "" + +#: Title.Details +msgid "Technical details" +msgstr "" + +#: Help.Details +msgid "Here are some deep technical details. You'll mostly need them in case you are confused with your volumes." +msgstr "" + +#: Text.DeviceName +msgid "Name of device" +msgstr "" + +#: Text.Status +msgid "Status" +msgstr "" + +#: Text.StatusActive +msgid "open" +msgstr "" + +#: Text.StatusPassive +msgid "closed" +msgstr "" + +#: Text.EncryptionStatus +msgid "Encryption" +msgstr "" + +#: Text.Yes +msgid "Yes" +msgstr "" + +#: Text.No +msgid "No" +msgstr "" + +#: Text.Size.All +msgid "Space of volume" +msgstr "" + +#: Text.Size.Avail +msgid "Available space of volume" +msgstr "" + +#: Text.Size.Used +msgid "Used space of volume" +msgstr "" diff --git a/v0.3.4.5/plugins/volume_details/intl/fr/cryptobox-server-feature-volume_details.po b/v0.3.4.5/plugins/volume_details/intl/fr/cryptobox-server-feature-volume_details.po new file mode 100644 index 0000000..ec167b6 --- /dev/null +++ b/v0.3.4.5/plugins/volume_details/intl/fr/cryptobox-server-feature-volume_details.po @@ -0,0 +1,70 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:02+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Technical details of a volume" +msgstr "" + +#: Link +msgid "Details" +msgstr "" + +#: Title.Details +msgid "Technical details" +msgstr "" + +#: Help.Details +msgid "Here are some deep technical details. You'll mostly need them in case you are confused with your volumes." +msgstr "" + +#: Text.DeviceName +msgid "Name of device" +msgstr "" + +#: Text.Status +msgid "Status" +msgstr "" + +#: Text.StatusActive +msgid "open" +msgstr "" + +#: Text.StatusPassive +msgid "closed" +msgstr "" + +#: Text.EncryptionStatus +msgid "Encryption" +msgstr "" + +#: Text.Yes +msgid "Yes" +msgstr "" + +#: Text.No +msgid "No" +msgstr "" + +#: Text.Size.All +msgid "Space of volume" +msgstr "" + +#: Text.Size.Avail +msgid "Available space of volume" +msgstr "" + +#: Text.Size.Used +msgid "Used space of volume" +msgstr "" diff --git a/v0.3.4.5/plugins/volume_details/intl/hu/cryptobox-server-feature-volume_details.po b/v0.3.4.5/plugins/volume_details/intl/hu/cryptobox-server-feature-volume_details.po new file mode 100644 index 0000000..ec167b6 --- /dev/null +++ b/v0.3.4.5/plugins/volume_details/intl/hu/cryptobox-server-feature-volume_details.po @@ -0,0 +1,70 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:02+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Technical details of a volume" +msgstr "" + +#: Link +msgid "Details" +msgstr "" + +#: Title.Details +msgid "Technical details" +msgstr "" + +#: Help.Details +msgid "Here are some deep technical details. You'll mostly need them in case you are confused with your volumes." +msgstr "" + +#: Text.DeviceName +msgid "Name of device" +msgstr "" + +#: Text.Status +msgid "Status" +msgstr "" + +#: Text.StatusActive +msgid "open" +msgstr "" + +#: Text.StatusPassive +msgid "closed" +msgstr "" + +#: Text.EncryptionStatus +msgid "Encryption" +msgstr "" + +#: Text.Yes +msgid "Yes" +msgstr "" + +#: Text.No +msgid "No" +msgstr "" + +#: Text.Size.All +msgid "Space of volume" +msgstr "" + +#: Text.Size.Avail +msgid "Available space of volume" +msgstr "" + +#: Text.Size.Used +msgid "Used space of volume" +msgstr "" diff --git a/v0.3.4.5/plugins/volume_details/intl/it/cryptobox-server-feature-volume_details.po b/v0.3.4.5/plugins/volume_details/intl/it/cryptobox-server-feature-volume_details.po new file mode 100644 index 0000000..fdea184 --- /dev/null +++ b/v0.3.4.5/plugins/volume_details/intl/it/cryptobox-server-feature-volume_details.po @@ -0,0 +1,69 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-04-01 15:55+0200\n" +"PO-Revision-Date: 2007-03-07 10:15+0100\n" +"Last-Translator: Fabrizio Tarizzo \n" +"Language-Team: Italian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Technical details of a volume" +msgstr "Dettagli tecnici su un volume" + +#: Link +msgid "Details" +msgstr "Dettagli" + +#: Title.Details +msgid "Technical details" +msgstr "Dettagli tecnici" + +#: Help.Details +msgid "Here are some deep technical details. You'll mostly need them in case you are confused with your volumes." +msgstr "In questa pagina sono mostrati alcuni dettagli tecnici approfonditi. Possono essere utili in caso di dubbi sulla configurazione dei volumi." + +#: Text.DeviceName +msgid "Name of device" +msgstr "Nome del dispositivo" + +#: Text.Status +msgid "Status" +msgstr "Stato" + +#: Text.StatusActive +msgid "open" +msgstr "aperto" + +#: Text.StatusPassive +msgid "closed" +msgstr "chiuso" + +#: Text.EncryptionStatus +msgid "Encryption" +msgstr "Cifratura" + +#: Text.Yes +msgid "Yes" +msgstr "Sì" + +#: Text.No +msgid "No" +msgstr "No" + +#: Text.Size.All +msgid "Space of volume" +msgstr "Dimensione del volume" + +#: Text.Size.Avail +msgid "Available space of volume" +msgstr "Spazio disponibile sul volume" + +#: Text.Size.Used +msgid "Used space of volume" +msgstr "Spazio utilizzato sul volume" diff --git a/v0.3.4.5/plugins/volume_details/intl/ja/cryptobox-server-feature-volume_details.po b/v0.3.4.5/plugins/volume_details/intl/ja/cryptobox-server-feature-volume_details.po new file mode 100644 index 0000000..ad88537 --- /dev/null +++ b/v0.3.4.5/plugins/volume_details/intl/ja/cryptobox-server-feature-volume_details.po @@ -0,0 +1,69 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:02+0100\n" +"PO-Revision-Date: 2007-02-26 07:44+0100\n" +"Last-Translator: kinneko \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Technical details of a volume" +msgstr "領域の詳細情報" + +#: Link +msgid "Details" +msgstr "詳細" + +#: Title.Details +msgid "Technical details" +msgstr "詳細情報" + +#: Help.Details +msgid "Here are some deep technical details. You'll mostly need them in case you are confused with your volumes." +msgstr "技術的な詳細な情報はここにあります。領域の管理で混乱したら、おそらくこの情報が必要になるでしょう。" + +#: Text.DeviceName +msgid "Name of device" +msgstr "デバイス名" + +#: Text.Status +msgid "Status" +msgstr "現在の状況" + +#: Text.StatusActive +msgid "open" +msgstr "開いています" + +#: Text.StatusPassive +msgid "closed" +msgstr "閉じられています" + +#: Text.EncryptionStatus +msgid "Encryption" +msgstr "暗号化されています" + +#: Text.Yes +msgid "Yes" +msgstr "はい" + +#: Text.No +msgid "No" +msgstr "いいえ" + +#: Text.Size.All +msgid "Space of volume" +msgstr "領域全体の容量" + +#: Text.Size.Avail +msgid "Available space of volume" +msgstr "利用できる容量" + +#: Text.Size.Used +msgid "Used space of volume" +msgstr "使用済み容量" diff --git a/v0.3.4.5/plugins/volume_details/intl/nl/cryptobox-server-feature-volume_details.po b/v0.3.4.5/plugins/volume_details/intl/nl/cryptobox-server-feature-volume_details.po new file mode 100644 index 0000000..ec167b6 --- /dev/null +++ b/v0.3.4.5/plugins/volume_details/intl/nl/cryptobox-server-feature-volume_details.po @@ -0,0 +1,70 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:02+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Technical details of a volume" +msgstr "" + +#: Link +msgid "Details" +msgstr "" + +#: Title.Details +msgid "Technical details" +msgstr "" + +#: Help.Details +msgid "Here are some deep technical details. You'll mostly need them in case you are confused with your volumes." +msgstr "" + +#: Text.DeviceName +msgid "Name of device" +msgstr "" + +#: Text.Status +msgid "Status" +msgstr "" + +#: Text.StatusActive +msgid "open" +msgstr "" + +#: Text.StatusPassive +msgid "closed" +msgstr "" + +#: Text.EncryptionStatus +msgid "Encryption" +msgstr "" + +#: Text.Yes +msgid "Yes" +msgstr "" + +#: Text.No +msgid "No" +msgstr "" + +#: Text.Size.All +msgid "Space of volume" +msgstr "" + +#: Text.Size.Avail +msgid "Available space of volume" +msgstr "" + +#: Text.Size.Used +msgid "Used space of volume" +msgstr "" diff --git a/v0.3.4.5/plugins/volume_details/intl/pl/cryptobox-server-feature-volume_details.po b/v0.3.4.5/plugins/volume_details/intl/pl/cryptobox-server-feature-volume_details.po new file mode 100644 index 0000000..3785f9d --- /dev/null +++ b/v0.3.4.5/plugins/volume_details/intl/pl/cryptobox-server-feature-volume_details.po @@ -0,0 +1,69 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-04-01 15:55+0200\n" +"PO-Revision-Date: 2007-03-29 09:27+0200\n" +"Last-Translator: Andrzej S. Kaznowski \n" +"Language-Team: POLSKI \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Technical details of a volume" +msgstr "Dane techniczne woluminu" + +#: Link +msgid "Details" +msgstr "Szczegóły" + +#: Title.Details +msgid "Technical details" +msgstr "Dane techniczne" + +#: Help.Details +msgid "Here are some deep technical details. You'll mostly need them in case you are confused with your volumes." +msgstr "Jest tu więcej danych technicznych. Możesz ich potrzebować, gdy będziesz miał problemy z woluminami." + +#: Text.DeviceName +msgid "Name of device" +msgstr "Nazwa urządzenia" + +#: Text.Status +msgid "Status" +msgstr "Status" + +#: Text.StatusActive +msgid "open" +msgstr "otwarty" + +#: Text.StatusPassive +msgid "closed" +msgstr "zamknięty" + +#: Text.EncryptionStatus +msgid "Encryption" +msgstr "Szyfrowanie" + +#: Text.Yes +msgid "Yes" +msgstr "Tak" + +#: Text.No +msgid "No" +msgstr "Nie" + +#: Text.Size.All +msgid "Space of volume" +msgstr "Całkowita pojemność woluminu" + +#: Text.Size.Avail +msgid "Available space of volume" +msgstr "Dostępna pojemność woluminu" + +#: Text.Size.Used +msgid "Used space of volume" +msgstr "Wykorzystana pojemność woluminu" diff --git a/v0.3.4.5/plugins/volume_details/intl/pt/cryptobox-server-feature-volume_details.po b/v0.3.4.5/plugins/volume_details/intl/pt/cryptobox-server-feature-volume_details.po new file mode 100644 index 0000000..ec167b6 --- /dev/null +++ b/v0.3.4.5/plugins/volume_details/intl/pt/cryptobox-server-feature-volume_details.po @@ -0,0 +1,70 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:02+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Technical details of a volume" +msgstr "" + +#: Link +msgid "Details" +msgstr "" + +#: Title.Details +msgid "Technical details" +msgstr "" + +#: Help.Details +msgid "Here are some deep technical details. You'll mostly need them in case you are confused with your volumes." +msgstr "" + +#: Text.DeviceName +msgid "Name of device" +msgstr "" + +#: Text.Status +msgid "Status" +msgstr "" + +#: Text.StatusActive +msgid "open" +msgstr "" + +#: Text.StatusPassive +msgid "closed" +msgstr "" + +#: Text.EncryptionStatus +msgid "Encryption" +msgstr "" + +#: Text.Yes +msgid "Yes" +msgstr "" + +#: Text.No +msgid "No" +msgstr "" + +#: Text.Size.All +msgid "Space of volume" +msgstr "" + +#: Text.Size.Avail +msgid "Available space of volume" +msgstr "" + +#: Text.Size.Used +msgid "Used space of volume" +msgstr "" diff --git a/v0.3.4.5/plugins/volume_details/intl/ru/cryptobox-server-feature-volume_details.po b/v0.3.4.5/plugins/volume_details/intl/ru/cryptobox-server-feature-volume_details.po new file mode 100644 index 0000000..ec167b6 --- /dev/null +++ b/v0.3.4.5/plugins/volume_details/intl/ru/cryptobox-server-feature-volume_details.po @@ -0,0 +1,70 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:02+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Technical details of a volume" +msgstr "" + +#: Link +msgid "Details" +msgstr "" + +#: Title.Details +msgid "Technical details" +msgstr "" + +#: Help.Details +msgid "Here are some deep technical details. You'll mostly need them in case you are confused with your volumes." +msgstr "" + +#: Text.DeviceName +msgid "Name of device" +msgstr "" + +#: Text.Status +msgid "Status" +msgstr "" + +#: Text.StatusActive +msgid "open" +msgstr "" + +#: Text.StatusPassive +msgid "closed" +msgstr "" + +#: Text.EncryptionStatus +msgid "Encryption" +msgstr "" + +#: Text.Yes +msgid "Yes" +msgstr "" + +#: Text.No +msgid "No" +msgstr "" + +#: Text.Size.All +msgid "Space of volume" +msgstr "" + +#: Text.Size.Avail +msgid "Available space of volume" +msgstr "" + +#: Text.Size.Used +msgid "Used space of volume" +msgstr "" diff --git a/v0.3.4.5/plugins/volume_details/intl/sl/cryptobox-server-feature-volume_details.po b/v0.3.4.5/plugins/volume_details/intl/sl/cryptobox-server-feature-volume_details.po new file mode 100644 index 0000000..0f06c1f --- /dev/null +++ b/v0.3.4.5/plugins/volume_details/intl/sl/cryptobox-server-feature-volume_details.po @@ -0,0 +1,69 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:02+0100\n" +"PO-Revision-Date: 2007-02-06 15:23+0100\n" +"Last-Translator: tenzin \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Technical details of a volume" +msgstr "Tehnične podrobnosti nosilca" + +#: Link +msgid "Details" +msgstr "Podrobnosti" + +#: Title.Details +msgid "Technical details" +msgstr "Tehnične podrobnosti" + +#: Help.Details +msgid "Here are some deep technical details. You'll mostly need them in case you are confused with your volumes." +msgstr "Tu se nahajajo tehnične podrobnosti. V glavnem jih boste potrebovali v primeru nejasnosti v zvezi z nosilci." + +#: Text.DeviceName +msgid "Name of device" +msgstr "Ime naprave" + +#: Text.Status +msgid "Status" +msgstr "Status" + +#: Text.StatusActive +msgid "open" +msgstr "odprto" + +#: Text.StatusPassive +msgid "closed" +msgstr "zaprto" + +#: Text.EncryptionStatus +msgid "Encryption" +msgstr "Enkripcija (šifriranje)" + +#: Text.Yes +msgid "Yes" +msgstr "Da" + +#: Text.No +msgid "No" +msgstr "Ne" + +#: Text.Size.All +msgid "Space of volume" +msgstr "Prostornost nosilca" + +#: Text.Size.Avail +msgid "Available space of volume" +msgstr "Razpoložljiv prostor nosilca" + +#: Text.Size.Used +msgid "Used space of volume" +msgstr "Uporabljen prostor nosilca" diff --git a/v0.3.4.5/plugins/volume_details/intl/sv/cryptobox-server-feature-volume_details.po b/v0.3.4.5/plugins/volume_details/intl/sv/cryptobox-server-feature-volume_details.po new file mode 100644 index 0000000..ec167b6 --- /dev/null +++ b/v0.3.4.5/plugins/volume_details/intl/sv/cryptobox-server-feature-volume_details.po @@ -0,0 +1,70 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:02+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Technical details of a volume" +msgstr "" + +#: Link +msgid "Details" +msgstr "" + +#: Title.Details +msgid "Technical details" +msgstr "" + +#: Help.Details +msgid "Here are some deep technical details. You'll mostly need them in case you are confused with your volumes." +msgstr "" + +#: Text.DeviceName +msgid "Name of device" +msgstr "" + +#: Text.Status +msgid "Status" +msgstr "" + +#: Text.StatusActive +msgid "open" +msgstr "" + +#: Text.StatusPassive +msgid "closed" +msgstr "" + +#: Text.EncryptionStatus +msgid "Encryption" +msgstr "" + +#: Text.Yes +msgid "Yes" +msgstr "" + +#: Text.No +msgid "No" +msgstr "" + +#: Text.Size.All +msgid "Space of volume" +msgstr "" + +#: Text.Size.Avail +msgid "Available space of volume" +msgstr "" + +#: Text.Size.Used +msgid "Used space of volume" +msgstr "" diff --git a/v0.3.4.5/plugins/volume_details/intl/ur/cryptobox-server-feature-volume_details.po b/v0.3.4.5/plugins/volume_details/intl/ur/cryptobox-server-feature-volume_details.po new file mode 100644 index 0000000..5591c4c --- /dev/null +++ b/v0.3.4.5/plugins/volume_details/intl/ur/cryptobox-server-feature-volume_details.po @@ -0,0 +1,70 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-02-05 23:28+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Technical details of a volume" +msgstr "" + +#: Link +msgid "Details" +msgstr "" + +#: Title.Details +msgid "Technical details" +msgstr "" + +#: Help.Details +msgid "Here are some deep technical details. You'll mostly need them in case you are confused with your volumes." +msgstr "" + +#: Text.DeviceName +msgid "Name of device" +msgstr "" + +#: Text.Status +msgid "Status" +msgstr "" + +#: Text.StatusActive +msgid "open" +msgstr "" + +#: Text.StatusPassive +msgid "closed" +msgstr "" + +#: Text.EncryptionStatus +msgid "Encryption" +msgstr "" + +#: Text.Yes +msgid "Yes" +msgstr "" + +#: Text.No +msgid "No" +msgstr "" + +#: Text.Size.All +msgid "Space of volume" +msgstr "" + +#: Text.Size.Avail +msgid "Available space of volume" +msgstr "" + +#: Text.Size.Used +msgid "Used space of volume" +msgstr "" diff --git a/v0.3.4.5/plugins/volume_details/language.hdf b/v0.3.4.5/plugins/volume_details/language.hdf new file mode 100644 index 0000000..cd78a80 --- /dev/null +++ b/v0.3.4.5/plugins/volume_details/language.hdf @@ -0,0 +1,22 @@ +Name = Technical details of a volume +Link = Details + +Title.Details = Technical details + +Help.Details = Here are some deep technical details. You'll mostly need them in case you are confused with your volumes. + +Text { + DeviceName = Name of device + Status = Status + StatusActive = open + StatusPassive = closed + EncryptionStatus = Encryption + Yes = Yes + No = No + Size { + All = Space of volume + Avail = Available space of volume + Used = Used space of volume + } +} + diff --git a/v0.3.4.5/plugins/volume_details/plugin_icon.gif b/v0.3.4.5/plugins/volume_details/plugin_icon.gif new file mode 100644 index 0000000000000000000000000000000000000000..5261c0670ad5b3db0fb4c83aa03905f624e61a80 GIT binary patch literal 1401 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 +<>> --> + + + +
+ + + + +
    +
  • :
  • +
  • :
  • +
  • :
  • +
  • :
  • + +
  • : MB
  • +
  • : MB
  • +
  • : %
  • + +
+ +
+ diff --git a/v0.3.4.5/plugins/volume_details/volume_details.py b/v0.3.4.5/plugins/volume_details/volume_details.py new file mode 100644 index 0000000..4bfbdde --- /dev/null +++ b/v0.3.4.5/plugins/volume_details/volume_details.py @@ -0,0 +1,41 @@ +# +# Copyright 2006 sense.lab e.V. +# +# This file is part of the CryptoBox. +# +# The CryptoBox 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 CryptoBox 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 the CryptoBox; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +__revision__ = "$Id" + +import cryptobox.plugins.base + + +class volume_details(cryptobox.plugins.base.CryptoBoxPlugin): + + plugin_capabilities = [ "volume" ] + plugin_visibility = [ "volume" ] + request_auth = False + rank = 100 + + + def do_action(self): + ## all variables are already set somewhere else + return "volume_details" + + + def get_status(self): + return "no status" + diff --git a/v0.3.4.5/plugins/volume_format_fs/intl/cryptobox-server-feature-volume_format_fs.pot b/v0.3.4.5/plugins/volume_format_fs/intl/cryptobox-server-feature-volume_format_fs.pot new file mode 100644 index 0000000..0b039a4 --- /dev/null +++ b/v0.3.4.5/plugins/volume_format_fs/intl/cryptobox-server-feature-volume_format_fs.pot @@ -0,0 +1,99 @@ +#: Name +msgid "Create filesystems" +msgstr "" + +#: Link +msgid "Format" +msgstr "" + +#: Title.Format +msgid "Initializing filesystem" +msgstr "" + +#: Button.Format +msgid "Initialize filesystem" +msgstr "" + +#: Text.Confirm +msgid "Yes, I know what I am doing!" +msgstr "" + +#: Text.FSType +msgid "Filesystem type" +msgstr "" + +#: Text.IsEncrypted +msgid "Encryption" +msgstr "" + +#: Text.Yes +msgid "Yes" +msgstr "" + +#: Text.No +msgid "No" +msgstr "" + +#: Help.Format +msgid "Usually you will only have to format a volume if you want to turn encryption on or off. Be aware, that you will erase all data from this volume." +msgstr "" + +#: Help.LuksFormat +msgid "In the last step you have choosen encryption for this volume. Now you have to enter a corresponding password." +msgstr "" + +#: Help.Filesystem +msgid "Use a filesystem of your choice. The linux filesystem (ext3) should be a good choice. The windows filesystem (Fat32) is only useful, if you plan to connect your harddisk directly to a computer running the windows operating system." +msgstr "" + +#: Help.Encryption +msgid "Enable encryption if you want to keep your data private. You have to enter the password to open an encrypted container. Be aware that your encrypted data is accessible for your local network. Close it, whenever you do not need it anymore." +msgstr "" + +#: Help.Password +msgid "Please choose a very good password consisting of letters, digits and special characters. There is no minimal length required, but you should not use less than ten characters. Twenty or more are recommended." +msgstr "" + +#: Help.Confirm +msgid "Don't forget to confirm your action with this checkbox. Nothing happens otherwise." +msgstr "" + +#: AdviceMessage.FormatWarning.Text +msgid "All data of the selected filesystem will get lost!" +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Text +msgid "You must close this volume before you may initialize it." +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Link.Text +msgid "Close volume now" +msgstr "" + +#: SuccessMessage.FormatSuccess.Title +msgid "Formatting is running" +msgstr "" + +#: SuccessMessage.FormatSuccess.Text +msgid "The selected filesystem is being formatted in the background. This may take some time (depending on the size of your disk)." +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Title +msgid "Confirmation missing" +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Text +msgid "You did not confirm this action by activating the checkbox." +msgstr "" + +#: WarningMessage.FormatFailed.Title +msgid "Formatting failed" +msgstr "" + +#: WarningMessage.FormatFailed.Text +msgid "Formatting of the selected filesystem failed for unknown reasons - sorry!" +msgstr "" + +#: WarningMessage.FormatFailed.Link.Text +msgid "View log messages" +msgstr "" diff --git a/v0.3.4.5/plugins/volume_format_fs/intl/cs/cryptobox-server-feature-volume_format_fs.po b/v0.3.4.5/plugins/volume_format_fs/intl/cs/cryptobox-server-feature-volume_format_fs.po new file mode 100644 index 0000000..560f16e --- /dev/null +++ b/v0.3.4.5/plugins/volume_format_fs/intl/cs/cryptobox-server-feature-volume_format_fs.po @@ -0,0 +1,114 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:02+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Create filesystems" +msgstr "" + +#: Link +msgid "Format" +msgstr "" + +#: Title.Format +msgid "Initializing filesystem" +msgstr "" + +#: Button.Format +msgid "Initialize filesystem" +msgstr "" + +#: Text.Confirm +msgid "Yes, I know what I am doing!" +msgstr "" + +#: Text.FSType +msgid "Filesystem type" +msgstr "" + +#: Text.IsEncrypted +msgid "Encryption" +msgstr "" + +#: Text.Yes +msgid "Yes" +msgstr "" + +#: Text.No +msgid "No" +msgstr "" + +#: Help.Format +msgid "Usually you will only have to format a volume if you want to turn encryption on or off. Be aware, that you will erase all data from this volume." +msgstr "" + +#: Help.LuksFormat +msgid "In the last step you have choosen encryption for this volume. Now you have to enter a corresponding password." +msgstr "" + +#: Help.Filesystem +msgid "Use a filesystem of your choice. The linux filesystem (ext3) should be a good choice. The windows filesystem (Fat32) is only useful, if you plan to connect your harddisk directly to a computer running the windows operating system." +msgstr "" + +#: Help.Encryption +msgid "Enable encryption if you want to keep your data private. You have to enter the password to open an encrypted container. Be aware that your encrypted data is accessible for your local network. Close it, whenever you do not need it anymore." +msgstr "" + +#: Help.Password +msgid "Please choose a very good password consisting of letters, digits and special characters. There is no minimal length required, but you should not use less than ten characters. Twenty or more are recommended." +msgstr "" + +#: Help.Confirm +msgid "Don't forget to confirm your action with this checkbox. Nothing happens otherwise." +msgstr "" + +#: AdviceMessage.FormatWarning.Text +msgid "All data of the selected filesystem will get lost!" +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Text +msgid "You must close this volume before you may initialize it." +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Link.Text +msgid "Close volume now" +msgstr "" + +#: SuccessMessage.FormatSuccess.Title +msgid "Formatting is running" +msgstr "" + +#: SuccessMessage.FormatSuccess.Text +msgid "The selected filesystem is being formatted in the background. This may take some time (depending on the size of your disk)." +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Title +msgid "Confirmation missing" +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Text +msgid "You did not confirm this action by activating the checkbox." +msgstr "" + +#: WarningMessage.FormatFailed.Title +msgid "Formatting failed" +msgstr "" + +#: WarningMessage.FormatFailed.Text +msgid "Formatting of the selected filesystem failed for unknown reasons - sorry!" +msgstr "" + +#: WarningMessage.FormatFailed.Link.Text +msgid "View log messages" +msgstr "" diff --git a/v0.3.4.5/plugins/volume_format_fs/intl/da/cryptobox-server-feature-volume_format_fs.po b/v0.3.4.5/plugins/volume_format_fs/intl/da/cryptobox-server-feature-volume_format_fs.po new file mode 100644 index 0000000..560f16e --- /dev/null +++ b/v0.3.4.5/plugins/volume_format_fs/intl/da/cryptobox-server-feature-volume_format_fs.po @@ -0,0 +1,114 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:02+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Create filesystems" +msgstr "" + +#: Link +msgid "Format" +msgstr "" + +#: Title.Format +msgid "Initializing filesystem" +msgstr "" + +#: Button.Format +msgid "Initialize filesystem" +msgstr "" + +#: Text.Confirm +msgid "Yes, I know what I am doing!" +msgstr "" + +#: Text.FSType +msgid "Filesystem type" +msgstr "" + +#: Text.IsEncrypted +msgid "Encryption" +msgstr "" + +#: Text.Yes +msgid "Yes" +msgstr "" + +#: Text.No +msgid "No" +msgstr "" + +#: Help.Format +msgid "Usually you will only have to format a volume if you want to turn encryption on or off. Be aware, that you will erase all data from this volume." +msgstr "" + +#: Help.LuksFormat +msgid "In the last step you have choosen encryption for this volume. Now you have to enter a corresponding password." +msgstr "" + +#: Help.Filesystem +msgid "Use a filesystem of your choice. The linux filesystem (ext3) should be a good choice. The windows filesystem (Fat32) is only useful, if you plan to connect your harddisk directly to a computer running the windows operating system." +msgstr "" + +#: Help.Encryption +msgid "Enable encryption if you want to keep your data private. You have to enter the password to open an encrypted container. Be aware that your encrypted data is accessible for your local network. Close it, whenever you do not need it anymore." +msgstr "" + +#: Help.Password +msgid "Please choose a very good password consisting of letters, digits and special characters. There is no minimal length required, but you should not use less than ten characters. Twenty or more are recommended." +msgstr "" + +#: Help.Confirm +msgid "Don't forget to confirm your action with this checkbox. Nothing happens otherwise." +msgstr "" + +#: AdviceMessage.FormatWarning.Text +msgid "All data of the selected filesystem will get lost!" +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Text +msgid "You must close this volume before you may initialize it." +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Link.Text +msgid "Close volume now" +msgstr "" + +#: SuccessMessage.FormatSuccess.Title +msgid "Formatting is running" +msgstr "" + +#: SuccessMessage.FormatSuccess.Text +msgid "The selected filesystem is being formatted in the background. This may take some time (depending on the size of your disk)." +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Title +msgid "Confirmation missing" +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Text +msgid "You did not confirm this action by activating the checkbox." +msgstr "" + +#: WarningMessage.FormatFailed.Title +msgid "Formatting failed" +msgstr "" + +#: WarningMessage.FormatFailed.Text +msgid "Formatting of the selected filesystem failed for unknown reasons - sorry!" +msgstr "" + +#: WarningMessage.FormatFailed.Link.Text +msgid "View log messages" +msgstr "" diff --git a/v0.3.4.5/plugins/volume_format_fs/intl/de/cryptobox-server-feature-volume_format_fs.po b/v0.3.4.5/plugins/volume_format_fs/intl/de/cryptobox-server-feature-volume_format_fs.po new file mode 100644 index 0000000..4764a57 --- /dev/null +++ b/v0.3.4.5/plugins/volume_format_fs/intl/de/cryptobox-server-feature-volume_format_fs.po @@ -0,0 +1,113 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:02+0100\n" +"PO-Revision-Date: 2007-02-03 21:29+0100\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Create filesystems" +msgstr "Dateisystem erstellen" + +#: Link +msgid "Format" +msgstr "Formatieren" + +#: Title.Format +msgid "Initializing filesystem" +msgstr "Dateisystem wird initialisiert" + +#: Button.Format +msgid "Initialize filesystem" +msgstr "Initialisiere Dateisystem" + +#: Text.Confirm +msgid "Yes, I know what I am doing!" +msgstr "Ja, ich weiß was ich tue!" + +#: Text.FSType +msgid "Filesystem type" +msgstr "Art des Dateisystems" + +#: Text.IsEncrypted +msgid "Encryption" +msgstr "Verschlüsselung" + +#: Text.Yes +msgid "Yes" +msgstr "Ja" + +#: Text.No +msgid "No" +msgstr "Nein" + +#: Help.Format +msgid "Usually you will only have to format a volume if you want to turn encryption on or off. Be aware, that you will erase all data from this volume." +msgstr "Normalerweise muss ein Datenträger nur formatiert werden, wenn du die Verschlüsselung ein- oder ausschalten willst. Bedenke, dass dabei alle Daten dieses Datenträgers gelöscht werden." + +#: Help.LuksFormat +msgid "In the last step you have choosen encryption for this volume. Now you have to enter a corresponding password." +msgstr "Im voherigen Schritt hast du die Datenträgerverschlüsselung ausgewählt. Nun musst du dafür ein Passwort festlegen:" + +#: Help.Filesystem +msgid "Use a filesystem of your choice. The linux filesystem (ext3) should be a good choice. The windows filesystem (Fat32) is only useful, if you plan to connect your harddisk directly to a computer running the windows operating system." +msgstr "Benutze ein Dateisystem deiner Wahl. Das Linux-Dateisystem (ext3) sollte eine gute Wahl sein. Das Windows-Dateisystem (Fat32) ist nur dann sinnvoll, wenn du die Festplatte direkt an einen Computer anschließen willst, auf dem Windows läuft." + +#: Help.Encryption +msgid "Enable encryption if you want to keep your data private. You have to enter the password to open an encrypted container. Be aware that your encrypted data is accessible for your local network. Close it, whenever you do not need it anymore." +msgstr "Aktiviere die Verschlüsselung, wenn du deine Daten schützen willst. Um einen Datenträger zu öffnen, musst du dann ein Passwort eingeben. Beachte, dass die entschlüsselten Daten über dein lokales Netzwerks lesbar sind. Schließe den Datenträger sobald du ihn nicht mehr benötigst." + +#: Help.Password +msgid "Please choose a very good password consisting of letters, digits and special characters. There is no minimal length required, but you should not use less than ten characters. Twenty or more are recommended." +msgstr "Bitte wähle eine sehr gutes Passwort, bestehend aus Buchstaben, Zahlen und Sonderzeichen. Eine Mindestlänge ist nicht vorgeschrieben, du solltest aber mindestens 10 Stellen verwenden. Empfehlenswert sind 20 und mehr Stellen." + +#: Help.Confirm +msgid "Don't forget to confirm your action with this checkbox. Nothing happens otherwise." +msgstr "Vergiss nicht deine Auswahl durch Aktivierung dieser Checkbox zu bestätigen. Andernfalls wird nichts passieren." + +#: AdviceMessage.FormatWarning.Text +msgid "All data of the selected filesystem will get lost!" +msgstr "Sämtlichen Daten des gewählten Dateisystems gehen verloren!" + +#: AdviceMessage.UnmountBeforeInit.Text +msgid "You must close this volume before you may initialize it." +msgstr "Du musst diesen Datenträger schließen, bevor du ihn initialisieren kannst." + +#: AdviceMessage.UnmountBeforeInit.Link.Text +msgid "Close volume now" +msgstr "Den Datenträger jetzt schließen" + +#: SuccessMessage.FormatSuccess.Title +msgid "Formatting is running" +msgstr "Die Formatierung wird durchgeführt" + +#: SuccessMessage.FormatSuccess.Text +msgid "The selected filesystem is being formatted in the background. This may take some time (depending on the size of your disk)." +msgstr "Das gewählte Dateisystem wird im Hintergrund formartiert. Dieser Vorgang kann einige Zeit dauern (abhängig von der Größe der Festplatte)." + +#: WarningMessage.FormatNotConfirmed.Title +msgid "Confirmation missing" +msgstr "Fehlende Bestätigung" + +#: WarningMessage.FormatNotConfirmed.Text +msgid "You did not confirm this action by activating the checkbox." +msgstr "Du hast diese Aktion nicht durch Anhacken der Checkbox bestätigt." + +#: WarningMessage.FormatFailed.Title +msgid "Formatting failed" +msgstr "Formatierung fehlgeschlagen" + +#: WarningMessage.FormatFailed.Text +msgid "Formatting of the selected filesystem failed for unknown reasons - sorry!" +msgstr "Die Formatierung des gewählten Dateisystems konnte aufgrund eines unbekannten Fehlers nicht durchgeführt werden - Entschuldige!" + +#: WarningMessage.FormatFailed.Link.Text +msgid "View log messages" +msgstr "Ereignisprotokoll anschauen" diff --git a/v0.3.4.5/plugins/volume_format_fs/intl/en/cryptobox-server-feature-volume_format_fs.po b/v0.3.4.5/plugins/volume_format_fs/intl/en/cryptobox-server-feature-volume_format_fs.po new file mode 100644 index 0000000..d15163d --- /dev/null +++ b/v0.3.4.5/plugins/volume_format_fs/intl/en/cryptobox-server-feature-volume_format_fs.po @@ -0,0 +1,99 @@ +#: Name +msgid "Create filesystems" +msgstr "Create filesystems" + +#: Link +msgid "Format" +msgstr "Format" + +#: Title.Format +msgid "Initializing filesystem" +msgstr "Initializing filesystem" + +#: Button.Format +msgid "Initialize filesystem" +msgstr "Initialize filesystem" + +#: Text.Confirm +msgid "Yes, I know what I am doing!" +msgstr "Yes, I know what I am doing!" + +#: Text.FSType +msgid "Filesystem type" +msgstr "Filesystem type" + +#: Text.IsEncrypted +msgid "Encryption" +msgstr "Encryption" + +#: Text.Yes +msgid "Yes" +msgstr "Yes" + +#: Text.No +msgid "No" +msgstr "No" + +#: Help.Format +msgid "Usually you will only have to format a volume if you want to turn encryption on or off. Be aware, that you will erase all data from this volume." +msgstr "Usually you will only have to format a volume if you want to turn encryption on or off. Be aware, that you will erase all data from this volume." + +#: Help.LuksFormat +msgid "In the last step you have choosen encryption for this volume. Now you have to enter a corresponding password." +msgstr "In the last step you have choosen encryption for this volume. Now you have to enter a corresponding password." + +#: Help.Filesystem +msgid "Use a filesystem of your choice. The linux filesystem (ext3) should be a good choice. The windows filesystem (Fat32) is only useful, if you plan to connect your harddisk directly to a computer running the windows operating system." +msgstr "Use a filesystem of your choice. The linux filesystem (ext3) should be a good choice. The windows filesystem (Fat32) is only useful, if you plan to connect your harddisk directly to a computer running the windows operating system." + +#: Help.Encryption +msgid "Enable encryption if you want to keep your data private. You have to enter the password to open an encrypted container. Be aware that your encrypted data is accessible for your local network. Close it, whenever you do not need it anymore." +msgstr "Enable encryption if you want to keep your data private. You have to enter the password to open an encrypted container. Be aware that your encrypted data is accessible for your local network. Close it, whenever you do not need it anymore." + +#: Help.Password +msgid "Please choose a very good password consisting of letters, digits and special characters. There is no minimal length required, but you should not use less than ten characters. Twenty or more are recommended." +msgstr "Please choose a very good password consisting of letters, digits and special characters. There is no minimal length required, but you should not use less than ten characters. Twenty or more are recommended." + +#: Help.Confirm +msgid "Don't forget to confirm your action with this checkbox. Nothing happens otherwise." +msgstr "Don't forget to confirm your action with this checkbox. Nothing happens otherwise." + +#: AdviceMessage.FormatWarning.Text +msgid "All data of the selected filesystem will get lost!" +msgstr "All data of the selected filesystem will get lost!" + +#: AdviceMessage.UnmountBeforeInit.Text +msgid "You must close this volume before you may initialize it." +msgstr "You must close this volume before you may initialize it." + +#: AdviceMessage.UnmountBeforeInit.Link.Text +msgid "Close volume now" +msgstr "Close volume now" + +#: SuccessMessage.FormatSuccess.Title +msgid "Formatting is running" +msgstr "Formatting is running" + +#: SuccessMessage.FormatSuccess.Text +msgid "The selected filesystem is being formatted in the background. This may take some time (depending on the size of your disk)." +msgstr "The selected filesystem is being formatted in the background. This may take some time (depending on the size of your disk)." + +#: WarningMessage.FormatNotConfirmed.Title +msgid "Confirmation missing" +msgstr "Confirmation missing" + +#: WarningMessage.FormatNotConfirmed.Text +msgid "You did not confirm this action by activating the checkbox." +msgstr "You did not confirm this action by activating the checkbox." + +#: WarningMessage.FormatFailed.Title +msgid "Formatting failed" +msgstr "Formatting failed" + +#: WarningMessage.FormatFailed.Text +msgid "Formatting of the selected filesystem failed for unknown reasons - sorry!" +msgstr "Formatting of the selected filesystem failed for unknown reasons - sorry!" + +#: WarningMessage.FormatFailed.Link.Text +msgid "View log messages" +msgstr "View log messages" diff --git a/v0.3.4.5/plugins/volume_format_fs/intl/es/cryptobox-server-feature-volume_format_fs.po b/v0.3.4.5/plugins/volume_format_fs/intl/es/cryptobox-server-feature-volume_format_fs.po new file mode 100644 index 0000000..095808c --- /dev/null +++ b/v0.3.4.5/plugins/volume_format_fs/intl/es/cryptobox-server-feature-volume_format_fs.po @@ -0,0 +1,114 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:03+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Create filesystems" +msgstr "" + +#: Link +msgid "Format" +msgstr "" + +#: Title.Format +msgid "Initializing filesystem" +msgstr "" + +#: Button.Format +msgid "Initialize filesystem" +msgstr "" + +#: Text.Confirm +msgid "Yes, I know what I am doing!" +msgstr "" + +#: Text.FSType +msgid "Filesystem type" +msgstr "" + +#: Text.IsEncrypted +msgid "Encryption" +msgstr "" + +#: Text.Yes +msgid "Yes" +msgstr "" + +#: Text.No +msgid "No" +msgstr "" + +#: Help.Format +msgid "Usually you will only have to format a volume if you want to turn encryption on or off. Be aware, that you will erase all data from this volume." +msgstr "" + +#: Help.LuksFormat +msgid "In the last step you have choosen encryption for this volume. Now you have to enter a corresponding password." +msgstr "" + +#: Help.Filesystem +msgid "Use a filesystem of your choice. The linux filesystem (ext3) should be a good choice. The windows filesystem (Fat32) is only useful, if you plan to connect your harddisk directly to a computer running the windows operating system." +msgstr "" + +#: Help.Encryption +msgid "Enable encryption if you want to keep your data private. You have to enter the password to open an encrypted container. Be aware that your encrypted data is accessible for your local network. Close it, whenever you do not need it anymore." +msgstr "" + +#: Help.Password +msgid "Please choose a very good password consisting of letters, digits and special characters. There is no minimal length required, but you should not use less than ten characters. Twenty or more are recommended." +msgstr "" + +#: Help.Confirm +msgid "Don't forget to confirm your action with this checkbox. Nothing happens otherwise." +msgstr "" + +#: AdviceMessage.FormatWarning.Text +msgid "All data of the selected filesystem will get lost!" +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Text +msgid "You must close this volume before you may initialize it." +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Link.Text +msgid "Close volume now" +msgstr "" + +#: SuccessMessage.FormatSuccess.Title +msgid "Formatting is running" +msgstr "" + +#: SuccessMessage.FormatSuccess.Text +msgid "The selected filesystem is being formatted in the background. This may take some time (depending on the size of your disk)." +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Title +msgid "Confirmation missing" +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Text +msgid "You did not confirm this action by activating the checkbox." +msgstr "" + +#: WarningMessage.FormatFailed.Title +msgid "Formatting failed" +msgstr "" + +#: WarningMessage.FormatFailed.Text +msgid "Formatting of the selected filesystem failed for unknown reasons - sorry!" +msgstr "" + +#: WarningMessage.FormatFailed.Link.Text +msgid "View log messages" +msgstr "" diff --git a/v0.3.4.5/plugins/volume_format_fs/intl/fi/cryptobox-server-feature-volume_format_fs.po b/v0.3.4.5/plugins/volume_format_fs/intl/fi/cryptobox-server-feature-volume_format_fs.po new file mode 100644 index 0000000..095808c --- /dev/null +++ b/v0.3.4.5/plugins/volume_format_fs/intl/fi/cryptobox-server-feature-volume_format_fs.po @@ -0,0 +1,114 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:03+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Create filesystems" +msgstr "" + +#: Link +msgid "Format" +msgstr "" + +#: Title.Format +msgid "Initializing filesystem" +msgstr "" + +#: Button.Format +msgid "Initialize filesystem" +msgstr "" + +#: Text.Confirm +msgid "Yes, I know what I am doing!" +msgstr "" + +#: Text.FSType +msgid "Filesystem type" +msgstr "" + +#: Text.IsEncrypted +msgid "Encryption" +msgstr "" + +#: Text.Yes +msgid "Yes" +msgstr "" + +#: Text.No +msgid "No" +msgstr "" + +#: Help.Format +msgid "Usually you will only have to format a volume if you want to turn encryption on or off. Be aware, that you will erase all data from this volume." +msgstr "" + +#: Help.LuksFormat +msgid "In the last step you have choosen encryption for this volume. Now you have to enter a corresponding password." +msgstr "" + +#: Help.Filesystem +msgid "Use a filesystem of your choice. The linux filesystem (ext3) should be a good choice. The windows filesystem (Fat32) is only useful, if you plan to connect your harddisk directly to a computer running the windows operating system." +msgstr "" + +#: Help.Encryption +msgid "Enable encryption if you want to keep your data private. You have to enter the password to open an encrypted container. Be aware that your encrypted data is accessible for your local network. Close it, whenever you do not need it anymore." +msgstr "" + +#: Help.Password +msgid "Please choose a very good password consisting of letters, digits and special characters. There is no minimal length required, but you should not use less than ten characters. Twenty or more are recommended." +msgstr "" + +#: Help.Confirm +msgid "Don't forget to confirm your action with this checkbox. Nothing happens otherwise." +msgstr "" + +#: AdviceMessage.FormatWarning.Text +msgid "All data of the selected filesystem will get lost!" +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Text +msgid "You must close this volume before you may initialize it." +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Link.Text +msgid "Close volume now" +msgstr "" + +#: SuccessMessage.FormatSuccess.Title +msgid "Formatting is running" +msgstr "" + +#: SuccessMessage.FormatSuccess.Text +msgid "The selected filesystem is being formatted in the background. This may take some time (depending on the size of your disk)." +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Title +msgid "Confirmation missing" +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Text +msgid "You did not confirm this action by activating the checkbox." +msgstr "" + +#: WarningMessage.FormatFailed.Title +msgid "Formatting failed" +msgstr "" + +#: WarningMessage.FormatFailed.Text +msgid "Formatting of the selected filesystem failed for unknown reasons - sorry!" +msgstr "" + +#: WarningMessage.FormatFailed.Link.Text +msgid "View log messages" +msgstr "" diff --git a/v0.3.4.5/plugins/volume_format_fs/intl/fr/cryptobox-server-feature-volume_format_fs.po b/v0.3.4.5/plugins/volume_format_fs/intl/fr/cryptobox-server-feature-volume_format_fs.po new file mode 100644 index 0000000..095808c --- /dev/null +++ b/v0.3.4.5/plugins/volume_format_fs/intl/fr/cryptobox-server-feature-volume_format_fs.po @@ -0,0 +1,114 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:03+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Create filesystems" +msgstr "" + +#: Link +msgid "Format" +msgstr "" + +#: Title.Format +msgid "Initializing filesystem" +msgstr "" + +#: Button.Format +msgid "Initialize filesystem" +msgstr "" + +#: Text.Confirm +msgid "Yes, I know what I am doing!" +msgstr "" + +#: Text.FSType +msgid "Filesystem type" +msgstr "" + +#: Text.IsEncrypted +msgid "Encryption" +msgstr "" + +#: Text.Yes +msgid "Yes" +msgstr "" + +#: Text.No +msgid "No" +msgstr "" + +#: Help.Format +msgid "Usually you will only have to format a volume if you want to turn encryption on or off. Be aware, that you will erase all data from this volume." +msgstr "" + +#: Help.LuksFormat +msgid "In the last step you have choosen encryption for this volume. Now you have to enter a corresponding password." +msgstr "" + +#: Help.Filesystem +msgid "Use a filesystem of your choice. The linux filesystem (ext3) should be a good choice. The windows filesystem (Fat32) is only useful, if you plan to connect your harddisk directly to a computer running the windows operating system." +msgstr "" + +#: Help.Encryption +msgid "Enable encryption if you want to keep your data private. You have to enter the password to open an encrypted container. Be aware that your encrypted data is accessible for your local network. Close it, whenever you do not need it anymore." +msgstr "" + +#: Help.Password +msgid "Please choose a very good password consisting of letters, digits and special characters. There is no minimal length required, but you should not use less than ten characters. Twenty or more are recommended." +msgstr "" + +#: Help.Confirm +msgid "Don't forget to confirm your action with this checkbox. Nothing happens otherwise." +msgstr "" + +#: AdviceMessage.FormatWarning.Text +msgid "All data of the selected filesystem will get lost!" +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Text +msgid "You must close this volume before you may initialize it." +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Link.Text +msgid "Close volume now" +msgstr "" + +#: SuccessMessage.FormatSuccess.Title +msgid "Formatting is running" +msgstr "" + +#: SuccessMessage.FormatSuccess.Text +msgid "The selected filesystem is being formatted in the background. This may take some time (depending on the size of your disk)." +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Title +msgid "Confirmation missing" +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Text +msgid "You did not confirm this action by activating the checkbox." +msgstr "" + +#: WarningMessage.FormatFailed.Title +msgid "Formatting failed" +msgstr "" + +#: WarningMessage.FormatFailed.Text +msgid "Formatting of the selected filesystem failed for unknown reasons - sorry!" +msgstr "" + +#: WarningMessage.FormatFailed.Link.Text +msgid "View log messages" +msgstr "" diff --git a/v0.3.4.5/plugins/volume_format_fs/intl/hu/cryptobox-server-feature-volume_format_fs.po b/v0.3.4.5/plugins/volume_format_fs/intl/hu/cryptobox-server-feature-volume_format_fs.po new file mode 100644 index 0000000..095808c --- /dev/null +++ b/v0.3.4.5/plugins/volume_format_fs/intl/hu/cryptobox-server-feature-volume_format_fs.po @@ -0,0 +1,114 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:03+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Create filesystems" +msgstr "" + +#: Link +msgid "Format" +msgstr "" + +#: Title.Format +msgid "Initializing filesystem" +msgstr "" + +#: Button.Format +msgid "Initialize filesystem" +msgstr "" + +#: Text.Confirm +msgid "Yes, I know what I am doing!" +msgstr "" + +#: Text.FSType +msgid "Filesystem type" +msgstr "" + +#: Text.IsEncrypted +msgid "Encryption" +msgstr "" + +#: Text.Yes +msgid "Yes" +msgstr "" + +#: Text.No +msgid "No" +msgstr "" + +#: Help.Format +msgid "Usually you will only have to format a volume if you want to turn encryption on or off. Be aware, that you will erase all data from this volume." +msgstr "" + +#: Help.LuksFormat +msgid "In the last step you have choosen encryption for this volume. Now you have to enter a corresponding password." +msgstr "" + +#: Help.Filesystem +msgid "Use a filesystem of your choice. The linux filesystem (ext3) should be a good choice. The windows filesystem (Fat32) is only useful, if you plan to connect your harddisk directly to a computer running the windows operating system." +msgstr "" + +#: Help.Encryption +msgid "Enable encryption if you want to keep your data private. You have to enter the password to open an encrypted container. Be aware that your encrypted data is accessible for your local network. Close it, whenever you do not need it anymore." +msgstr "" + +#: Help.Password +msgid "Please choose a very good password consisting of letters, digits and special characters. There is no minimal length required, but you should not use less than ten characters. Twenty or more are recommended." +msgstr "" + +#: Help.Confirm +msgid "Don't forget to confirm your action with this checkbox. Nothing happens otherwise." +msgstr "" + +#: AdviceMessage.FormatWarning.Text +msgid "All data of the selected filesystem will get lost!" +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Text +msgid "You must close this volume before you may initialize it." +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Link.Text +msgid "Close volume now" +msgstr "" + +#: SuccessMessage.FormatSuccess.Title +msgid "Formatting is running" +msgstr "" + +#: SuccessMessage.FormatSuccess.Text +msgid "The selected filesystem is being formatted in the background. This may take some time (depending on the size of your disk)." +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Title +msgid "Confirmation missing" +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Text +msgid "You did not confirm this action by activating the checkbox." +msgstr "" + +#: WarningMessage.FormatFailed.Title +msgid "Formatting failed" +msgstr "" + +#: WarningMessage.FormatFailed.Text +msgid "Formatting of the selected filesystem failed for unknown reasons - sorry!" +msgstr "" + +#: WarningMessage.FormatFailed.Link.Text +msgid "View log messages" +msgstr "" diff --git a/v0.3.4.5/plugins/volume_format_fs/intl/it/cryptobox-server-feature-volume_format_fs.po b/v0.3.4.5/plugins/volume_format_fs/intl/it/cryptobox-server-feature-volume_format_fs.po new file mode 100644 index 0000000..1b12f84 --- /dev/null +++ b/v0.3.4.5/plugins/volume_format_fs/intl/it/cryptobox-server-feature-volume_format_fs.po @@ -0,0 +1,113 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-04-01 15:54+0200\n" +"PO-Revision-Date: 2007-03-20 10:21+0100\n" +"Last-Translator: Fabrizio Tarizzo \n" +"Language-Team: Italian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Create filesystems" +msgstr "Crea filesystem" + +#: Link +msgid "Format" +msgstr "Formattazione" + +#: Title.Format +msgid "Initializing filesystem" +msgstr "Inizializzazione del filesystem" + +#: Button.Format +msgid "Initialize filesystem" +msgstr "Inizializza filesystem" + +#: Text.Confirm +msgid "Yes, I know what I am doing!" +msgstr "Sì, so cosa sto facendo!" + +#: Text.FSType +msgid "Filesystem type" +msgstr "Tipo di filesystem" + +#: Text.IsEncrypted +msgid "Encryption" +msgstr "Cifratura" + +#: Text.Yes +msgid "Yes" +msgstr "Sì" + +#: Text.No +msgid "No" +msgstr "No" + +#: Help.Format +msgid "Usually you will only have to format a volume if you want to turn encryption on or off. Be aware, that you will erase all data from this volume." +msgstr "Di norma è necessario formattare un volume soltanto quando si desidera attivare o disattivare la cifratura. Prestare attenzione al fatto che l'operazione cancellerà tutti i dati dal volume." + +#: Help.LuksFormat +msgid "In the last step you have choosen encryption for this volume. Now you have to enter a corresponding password." +msgstr "" + +#: Help.Filesystem +msgid "Use a filesystem of your choice. The linux filesystem (ext3) should be a good choice. The windows filesystem (Fat32) is only useful, if you plan to connect your harddisk directly to a computer running the windows operating system." +msgstr "Scegliere il filesystem da usare. Il filesystem di Linux (ext3) dovrebbe essere una scelta adatta. Il filesystem di Windows (Fat32) è utile soltanto se si prevede di collegare il disco rigido direttamente ad un computer con sistema operativo Windows." + +#: Help.Encryption +msgid "Enable encryption if you want to keep your data private. You have to enter the password to open an encrypted container. Be aware that your encrypted data is accessible for your local network. Close it, whenever you do not need it anymore." +msgstr "Attivare la cifrature per mantenere la riservatezza dei dati. Sarà necessario inserire una password per aprire un volume cifrato. Prestare attenzione al fatto che i dati cifrati saranno accessibili dalla rete locale. È quindi consigliabile chiudere il volume quando non viene utilizzato." + +#: Help.Password +msgid "Please choose a very good password consisting of letters, digits and special characters. There is no minimal length required, but you should not use less than ten characters. Twenty or more are recommended." +msgstr "Scegliere una buona password composta da lettere, cifre e caratteri speciali. Non c'è una lunghezza minima richiesta, ma è opportuno che si usino almeno dieci caratteri. Si raccomanda di usare venti o più caratteri." + +#: Help.Confirm +msgid "Don't forget to confirm your action with this checkbox. Nothing happens otherwise." +msgstr "Non dimenticare di confermare l'azione usando questa checkbox, altrimenti non accadrà nulla." + +#: AdviceMessage.FormatWarning.Text +msgid "All data of the selected filesystem will get lost!" +msgstr "Tutti i dati sul filesystem selezionato saranno cancellati!" + +#: AdviceMessage.UnmountBeforeInit.Text +msgid "You must close this volume before you may initialize it." +msgstr "È necessario chiudere un volume prima di inizializzarlo." + +#: AdviceMessage.UnmountBeforeInit.Link.Text +msgid "Close volume now" +msgstr "Chiudi il volume adesso" + +#: SuccessMessage.FormatSuccess.Title +msgid "Formatting is running" +msgstr "Formattazione in corso" + +#: SuccessMessage.FormatSuccess.Text +msgid "The selected filesystem is being formatted in the background. This may take some time (depending on the size of your disk)." +msgstr "Il filesystem selezionato sarà formattato in background. L'operazione potrebbe richiedere un po' di tempo (a seconda della dimensione dei dischi)." + +#: WarningMessage.FormatNotConfirmed.Title +msgid "Confirmation missing" +msgstr "Conferma mancante" + +#: WarningMessage.FormatNotConfirmed.Text +msgid "You did not confirm this action by activating the checkbox." +msgstr "Non è stata confermata l'operazione attivando l'apposita checkbox." + +#: WarningMessage.FormatFailed.Title +msgid "Formatting failed" +msgstr "Formattazione fallita" + +#: WarningMessage.FormatFailed.Text +msgid "Formatting of the selected filesystem failed for unknown reasons - sorry!" +msgstr "La formattazione del filesystem selezionato è fallita per motivi sconosciuti." + +#: WarningMessage.FormatFailed.Link.Text +msgid "View log messages" +msgstr "Mostra il registro degli eventi" diff --git a/v0.3.4.5/plugins/volume_format_fs/intl/ja/cryptobox-server-feature-volume_format_fs.po b/v0.3.4.5/plugins/volume_format_fs/intl/ja/cryptobox-server-feature-volume_format_fs.po new file mode 100644 index 0000000..6130fed --- /dev/null +++ b/v0.3.4.5/plugins/volume_format_fs/intl/ja/cryptobox-server-feature-volume_format_fs.po @@ -0,0 +1,113 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:03+0100\n" +"PO-Revision-Date: 2007-02-26 11:20+0100\n" +"Last-Translator: kinneko \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Create filesystems" +msgstr "ファイルシステムの作成" + +#: Link +msgid "Format" +msgstr "初期化" + +#: Title.Format +msgid "Initializing filesystem" +msgstr "ファイルシステムの初期化中" + +#: Button.Format +msgid "Initialize filesystem" +msgstr "ファイルシステムの初期化" + +#: Text.Confirm +msgid "Yes, I know what I am doing!" +msgstr "もちろん、これから何をするのか、よくわかっていますよ!" + +#: Text.FSType +msgid "Filesystem type" +msgstr "ファイルシステムタイプ" + +#: Text.IsEncrypted +msgid "Encryption" +msgstr "暗号化" + +#: Text.Yes +msgid "Yes" +msgstr "はい" + +#: Text.No +msgid "No" +msgstr "いいえ" + +#: Help.Format +msgid "Usually you will only have to format a volume if you want to turn encryption on or off. Be aware, that you will erase all data from this volume." +msgstr "もし、暗号化の状態を変更したいのであれば、領域は常に初期化する必要があります。そのような操作を行うと、この領域のすべてのデータが消去されることを了承してください。" + +#: Help.LuksFormat +msgid "In the last step you have choosen encryption for this volume. Now you have to enter a corresponding password." +msgstr "最後のステップで、この領域の暗号化を行うことが選択されていますので、ここではパスワードを入力してください。" + +#: Help.Filesystem +msgid "Use a filesystem of your choice. The linux filesystem (ext3) should be a good choice. The windows filesystem (Fat32) is only useful, if you plan to connect your harddisk directly to a computer running the windows operating system." +msgstr "使用するファイルシステムを選んでください。Linuxの標準的なファイルシステムであるext3を選ぶのはよい選択でしょう。ハードディスクを取り外してWindowsが動作するコンピュータに接続して使う予定があれば、WindowsのファイルシステムであるFat32が便利です。" + +#: Help.Encryption +msgid "Enable encryption if you want to keep your data private. You have to enter the password to open an encrypted container. Be aware that your encrypted data is accessible for your local network. Close it, whenever you do not need it anymore." +msgstr "データを第三者に秘密にしておきたいのであれば、暗号化を有効にしてください。暗号化された部分を開くには、パスワードを入力する必要があります。開いている間は、ローカルネットワーク上で暗号化された領域が利用可能になりますので、注意してください。必要でない時には、暗号化された領域を閉じてください。" + +#: Help.Password +msgid "Please choose a very good password consisting of letters, digits and special characters. There is no minimal length required, but you should not use less than ten characters. Twenty or more are recommended." +msgstr "文字と数字の両方を使い記号を含んだ、わかりにくいパスワードを設定してください。パスワードの文字数に決まりはありませんが、10桁以下のものを使わないでください。20桁以上がおすすめです。" + +#: Help.Confirm +msgid "Don't forget to confirm your action with this checkbox. Nothing happens otherwise." +msgstr "このチェックボックスで、作業の最終確認するのを忘れないでください。チェックしなければ何も起こりません。" + +#: AdviceMessage.FormatWarning.Text +msgid "All data of the selected filesystem will get lost!" +msgstr "選択されたファイルシステムにあるすべてのデータは失われます!" + +#: AdviceMessage.UnmountBeforeInit.Text +msgid "You must close this volume before you may initialize it." +msgstr "初期化の前に、この領域を必ず閉じてください。" + +#: AdviceMessage.UnmountBeforeInit.Link.Text +msgid "Close volume now" +msgstr "すぐに領域を閉じてください" + +#: SuccessMessage.FormatSuccess.Title +msgid "Formatting is running" +msgstr "初期化中" + +#: SuccessMessage.FormatSuccess.Text +msgid "The selected filesystem is being formatted in the background. This may take some time (depending on the size of your disk)." +msgstr "選択されたファイルシステムでの初期化は、バックグラウンドで行われます。終了にはやや時間がかかるでしょう(ディスクのサイズによって違います)。" + +#: WarningMessage.FormatNotConfirmed.Title +msgid "Confirmation missing" +msgstr "確認に失敗しました" + +#: WarningMessage.FormatNotConfirmed.Text +msgid "You did not confirm this action by activating the checkbox." +msgstr "チェックボックスを有効にして、この作業の最終確認を行ってください。" + +#: WarningMessage.FormatFailed.Title +msgid "Formatting failed" +msgstr "初期化に失敗しました" + +#: WarningMessage.FormatFailed.Text +msgid "Formatting of the selected filesystem failed for unknown reasons - sorry!" +msgstr "なんらかの理由で、選択されたファイルシステムでの初期化に失敗しました。" + +#: WarningMessage.FormatFailed.Link.Text +msgid "View log messages" +msgstr "ログメッセージを見る" diff --git a/v0.3.4.5/plugins/volume_format_fs/intl/nl/cryptobox-server-feature-volume_format_fs.po b/v0.3.4.5/plugins/volume_format_fs/intl/nl/cryptobox-server-feature-volume_format_fs.po new file mode 100644 index 0000000..095808c --- /dev/null +++ b/v0.3.4.5/plugins/volume_format_fs/intl/nl/cryptobox-server-feature-volume_format_fs.po @@ -0,0 +1,114 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:03+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Create filesystems" +msgstr "" + +#: Link +msgid "Format" +msgstr "" + +#: Title.Format +msgid "Initializing filesystem" +msgstr "" + +#: Button.Format +msgid "Initialize filesystem" +msgstr "" + +#: Text.Confirm +msgid "Yes, I know what I am doing!" +msgstr "" + +#: Text.FSType +msgid "Filesystem type" +msgstr "" + +#: Text.IsEncrypted +msgid "Encryption" +msgstr "" + +#: Text.Yes +msgid "Yes" +msgstr "" + +#: Text.No +msgid "No" +msgstr "" + +#: Help.Format +msgid "Usually you will only have to format a volume if you want to turn encryption on or off. Be aware, that you will erase all data from this volume." +msgstr "" + +#: Help.LuksFormat +msgid "In the last step you have choosen encryption for this volume. Now you have to enter a corresponding password." +msgstr "" + +#: Help.Filesystem +msgid "Use a filesystem of your choice. The linux filesystem (ext3) should be a good choice. The windows filesystem (Fat32) is only useful, if you plan to connect your harddisk directly to a computer running the windows operating system." +msgstr "" + +#: Help.Encryption +msgid "Enable encryption if you want to keep your data private. You have to enter the password to open an encrypted container. Be aware that your encrypted data is accessible for your local network. Close it, whenever you do not need it anymore." +msgstr "" + +#: Help.Password +msgid "Please choose a very good password consisting of letters, digits and special characters. There is no minimal length required, but you should not use less than ten characters. Twenty or more are recommended." +msgstr "" + +#: Help.Confirm +msgid "Don't forget to confirm your action with this checkbox. Nothing happens otherwise." +msgstr "" + +#: AdviceMessage.FormatWarning.Text +msgid "All data of the selected filesystem will get lost!" +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Text +msgid "You must close this volume before you may initialize it." +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Link.Text +msgid "Close volume now" +msgstr "" + +#: SuccessMessage.FormatSuccess.Title +msgid "Formatting is running" +msgstr "" + +#: SuccessMessage.FormatSuccess.Text +msgid "The selected filesystem is being formatted in the background. This may take some time (depending on the size of your disk)." +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Title +msgid "Confirmation missing" +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Text +msgid "You did not confirm this action by activating the checkbox." +msgstr "" + +#: WarningMessage.FormatFailed.Title +msgid "Formatting failed" +msgstr "" + +#: WarningMessage.FormatFailed.Text +msgid "Formatting of the selected filesystem failed for unknown reasons - sorry!" +msgstr "" + +#: WarningMessage.FormatFailed.Link.Text +msgid "View log messages" +msgstr "" diff --git a/v0.3.4.5/plugins/volume_format_fs/intl/pl/cryptobox-server-feature-volume_format_fs.po b/v0.3.4.5/plugins/volume_format_fs/intl/pl/cryptobox-server-feature-volume_format_fs.po new file mode 100644 index 0000000..0c53802 --- /dev/null +++ b/v0.3.4.5/plugins/volume_format_fs/intl/pl/cryptobox-server-feature-volume_format_fs.po @@ -0,0 +1,114 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-04-01 15:54+0200\n" +"PO-Revision-Date: 2007-03-30 09:45+0200\n" +"Last-Translator: Andrzej S. Kaznowski \n" +"Language-Team: POLSKI \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Create filesystems" +msgstr "Tworzenie systemów plików" + +#: Link +msgid "Format" +msgstr "Formatuj" + +#: Title.Format +msgid "Initializing filesystem" +msgstr "Inicjowanie systemu plików" + +#: Button.Format +msgid "Initialize filesystem" +msgstr "Inicjowanie systemu plików" + +#: Text.Confirm +msgid "Yes, I know what I am doing!" +msgstr "Wykonaj, wiem, co robię!" + +#: Text.FSType +msgid "Filesystem type" +msgstr "System plików" + +#: Text.IsEncrypted +msgid "Encryption" +msgstr "Szyfrowanie" + +#: Text.Yes +msgid "Yes" +msgstr "Tak" + +#: Text.No +msgid "No" +msgstr "Nie" + +#: Help.Format +msgid "Usually you will only have to format a volume if you want to turn encryption on or off. Be aware, that you will erase all data from this volume." +msgstr "Jeśli będziesz chciał włączyć lub wyłączyć szyfrowanie, będziesz musiał przeważnie tylko sformatować wolumin. Weź pod uwagę, że wykreślisz wszystkie dane z tego woluminu." + +#: Help.LuksFormat +#, fuzzy +msgid "In the last step you have choosen encryption for this volume. Now you have to enter a corresponding password." +msgstr "Na ostatnim etapie wybrałeś szyfrowanie dla tego woluminu. Teraz musisz wpisać wybrane hasło." + +#: Help.Filesystem +msgid "Use a filesystem of your choice. The linux filesystem (ext3) should be a good choice. The windows filesystem (Fat32) is only useful, if you plan to connect your harddisk directly to a computer running the windows operating system." +msgstr "Wybierz dowolny system plików. System plików linux (ext3) będzie dobrym wyborem. System plików windows (Fat32) jest tylko wtedy użyteczny, jeśli zamierzasz udostępnić bezpośrednio swój twardy dysk komputerowi pracującemu w systemie operacyjnym windows." + +#: Help.Encryption +msgid "Enable encryption if you want to keep your data private. You have to enter the password to open an encrypted container. Be aware that your encrypted data is accessible for your local network. Close it, whenever you do not need it anymore." +msgstr "Włącz szyfrowanie, jeśli chcesz zachować prywatność swoich danych. Musisz wpisać hasło, aby otworzyć zaszyfrowaną część. Weź pod uwagę, że twoje zaszyfrowane dane będą ogólnie dostępne w twojej lokalnej sieci. Zamknij je, jeśli ich już nie potrzebujesz." + +#: Help.Password +msgid "Please choose a very good password consisting of letters, digits and special characters. There is no minimal length required, but you should not use less than ten characters. Twenty or more are recommended." +msgstr "Proszę wybrać dobre hasło składające się z liter, cyfr i znaków specjalnych. Nie wymagana jest minimalna długość, ale nie powinieneś użyć mniej niż dziesięć znaków. Zalecane jest dwadzieścia lub więcej znaków." + +#: Help.Confirm +msgid "Don't forget to confirm your action with this checkbox. Nothing happens otherwise." +msgstr "Nie zapomnij potwierdzić swojego polecenia poprzez zaznaczenie odpowiedniego pola. W przeciwnym wypadku twoje polecenie nie zostanie wykonane." + +#: AdviceMessage.FormatWarning.Text +msgid "All data of the selected filesystem will get lost!" +msgstr "Wszystkie dane z wybranego systemu plików zostaną wykreślone!" + +#: AdviceMessage.UnmountBeforeInit.Text +msgid "You must close this volume before you may initialize it." +msgstr "Musisz zamknąć ten wolumin, zanim go zainicjujesz." + +#: AdviceMessage.UnmountBeforeInit.Link.Text +msgid "Close volume now" +msgstr "Zamknij wolumin teraz" + +#: SuccessMessage.FormatSuccess.Title +msgid "Formatting is running" +msgstr "Trwa formatowanie" + +#: SuccessMessage.FormatSuccess.Text +msgid "The selected filesystem is being formatted in the background. This may take some time (depending on the size of your disk)." +msgstr "Wybrany system plików jest formatowany w tle. Może to zająć trochę czasu (w zależności od wielkości twojego dysku)." + +#: WarningMessage.FormatNotConfirmed.Title +msgid "Confirmation missing" +msgstr "Brak potwierdzenia" + +#: WarningMessage.FormatNotConfirmed.Text +msgid "You did not confirm this action by activating the checkbox." +msgstr "Nie potwierdziłeś tego polecenia poprzez zaznaczenie odpowiedniego pola." + +#: WarningMessage.FormatFailed.Title +msgid "Formatting failed" +msgstr "Formatowanie nie powiodło się" + +#: WarningMessage.FormatFailed.Text +msgid "Formatting of the selected filesystem failed for unknown reasons - sorry!" +msgstr "Formatowanie wybranego systemu plików nie powiodło się - przepraszamy!" + +#: WarningMessage.FormatFailed.Link.Text +msgid "View log messages" +msgstr "Pokazuj wszystkie komunikaty rejestru" diff --git a/v0.3.4.5/plugins/volume_format_fs/intl/pt/cryptobox-server-feature-volume_format_fs.po b/v0.3.4.5/plugins/volume_format_fs/intl/pt/cryptobox-server-feature-volume_format_fs.po new file mode 100644 index 0000000..095808c --- /dev/null +++ b/v0.3.4.5/plugins/volume_format_fs/intl/pt/cryptobox-server-feature-volume_format_fs.po @@ -0,0 +1,114 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:03+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Create filesystems" +msgstr "" + +#: Link +msgid "Format" +msgstr "" + +#: Title.Format +msgid "Initializing filesystem" +msgstr "" + +#: Button.Format +msgid "Initialize filesystem" +msgstr "" + +#: Text.Confirm +msgid "Yes, I know what I am doing!" +msgstr "" + +#: Text.FSType +msgid "Filesystem type" +msgstr "" + +#: Text.IsEncrypted +msgid "Encryption" +msgstr "" + +#: Text.Yes +msgid "Yes" +msgstr "" + +#: Text.No +msgid "No" +msgstr "" + +#: Help.Format +msgid "Usually you will only have to format a volume if you want to turn encryption on or off. Be aware, that you will erase all data from this volume." +msgstr "" + +#: Help.LuksFormat +msgid "In the last step you have choosen encryption for this volume. Now you have to enter a corresponding password." +msgstr "" + +#: Help.Filesystem +msgid "Use a filesystem of your choice. The linux filesystem (ext3) should be a good choice. The windows filesystem (Fat32) is only useful, if you plan to connect your harddisk directly to a computer running the windows operating system." +msgstr "" + +#: Help.Encryption +msgid "Enable encryption if you want to keep your data private. You have to enter the password to open an encrypted container. Be aware that your encrypted data is accessible for your local network. Close it, whenever you do not need it anymore." +msgstr "" + +#: Help.Password +msgid "Please choose a very good password consisting of letters, digits and special characters. There is no minimal length required, but you should not use less than ten characters. Twenty or more are recommended." +msgstr "" + +#: Help.Confirm +msgid "Don't forget to confirm your action with this checkbox. Nothing happens otherwise." +msgstr "" + +#: AdviceMessage.FormatWarning.Text +msgid "All data of the selected filesystem will get lost!" +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Text +msgid "You must close this volume before you may initialize it." +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Link.Text +msgid "Close volume now" +msgstr "" + +#: SuccessMessage.FormatSuccess.Title +msgid "Formatting is running" +msgstr "" + +#: SuccessMessage.FormatSuccess.Text +msgid "The selected filesystem is being formatted in the background. This may take some time (depending on the size of your disk)." +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Title +msgid "Confirmation missing" +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Text +msgid "You did not confirm this action by activating the checkbox." +msgstr "" + +#: WarningMessage.FormatFailed.Title +msgid "Formatting failed" +msgstr "" + +#: WarningMessage.FormatFailed.Text +msgid "Formatting of the selected filesystem failed for unknown reasons - sorry!" +msgstr "" + +#: WarningMessage.FormatFailed.Link.Text +msgid "View log messages" +msgstr "" diff --git a/v0.3.4.5/plugins/volume_format_fs/intl/ru/cryptobox-server-feature-volume_format_fs.po b/v0.3.4.5/plugins/volume_format_fs/intl/ru/cryptobox-server-feature-volume_format_fs.po new file mode 100644 index 0000000..095808c --- /dev/null +++ b/v0.3.4.5/plugins/volume_format_fs/intl/ru/cryptobox-server-feature-volume_format_fs.po @@ -0,0 +1,114 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:03+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Create filesystems" +msgstr "" + +#: Link +msgid "Format" +msgstr "" + +#: Title.Format +msgid "Initializing filesystem" +msgstr "" + +#: Button.Format +msgid "Initialize filesystem" +msgstr "" + +#: Text.Confirm +msgid "Yes, I know what I am doing!" +msgstr "" + +#: Text.FSType +msgid "Filesystem type" +msgstr "" + +#: Text.IsEncrypted +msgid "Encryption" +msgstr "" + +#: Text.Yes +msgid "Yes" +msgstr "" + +#: Text.No +msgid "No" +msgstr "" + +#: Help.Format +msgid "Usually you will only have to format a volume if you want to turn encryption on or off. Be aware, that you will erase all data from this volume." +msgstr "" + +#: Help.LuksFormat +msgid "In the last step you have choosen encryption for this volume. Now you have to enter a corresponding password." +msgstr "" + +#: Help.Filesystem +msgid "Use a filesystem of your choice. The linux filesystem (ext3) should be a good choice. The windows filesystem (Fat32) is only useful, if you plan to connect your harddisk directly to a computer running the windows operating system." +msgstr "" + +#: Help.Encryption +msgid "Enable encryption if you want to keep your data private. You have to enter the password to open an encrypted container. Be aware that your encrypted data is accessible for your local network. Close it, whenever you do not need it anymore." +msgstr "" + +#: Help.Password +msgid "Please choose a very good password consisting of letters, digits and special characters. There is no minimal length required, but you should not use less than ten characters. Twenty or more are recommended." +msgstr "" + +#: Help.Confirm +msgid "Don't forget to confirm your action with this checkbox. Nothing happens otherwise." +msgstr "" + +#: AdviceMessage.FormatWarning.Text +msgid "All data of the selected filesystem will get lost!" +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Text +msgid "You must close this volume before you may initialize it." +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Link.Text +msgid "Close volume now" +msgstr "" + +#: SuccessMessage.FormatSuccess.Title +msgid "Formatting is running" +msgstr "" + +#: SuccessMessage.FormatSuccess.Text +msgid "The selected filesystem is being formatted in the background. This may take some time (depending on the size of your disk)." +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Title +msgid "Confirmation missing" +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Text +msgid "You did not confirm this action by activating the checkbox." +msgstr "" + +#: WarningMessage.FormatFailed.Title +msgid "Formatting failed" +msgstr "" + +#: WarningMessage.FormatFailed.Text +msgid "Formatting of the selected filesystem failed for unknown reasons - sorry!" +msgstr "" + +#: WarningMessage.FormatFailed.Link.Text +msgid "View log messages" +msgstr "" diff --git a/v0.3.4.5/plugins/volume_format_fs/intl/sl/cryptobox-server-feature-volume_format_fs.po b/v0.3.4.5/plugins/volume_format_fs/intl/sl/cryptobox-server-feature-volume_format_fs.po new file mode 100644 index 0000000..4f2a277 --- /dev/null +++ b/v0.3.4.5/plugins/volume_format_fs/intl/sl/cryptobox-server-feature-volume_format_fs.po @@ -0,0 +1,113 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:03+0100\n" +"PO-Revision-Date: 2007-02-06 15:29+0100\n" +"Last-Translator: tenzin \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Create filesystems" +msgstr "Ustvari datotečni sistem" + +#: Link +msgid "Format" +msgstr "Oblika" + +#: Title.Format +msgid "Initializing filesystem" +msgstr "Inicializiraj datotečni sistem" + +#: Button.Format +msgid "Initialize filesystem" +msgstr "Inicializiraj datotečni sistem" + +#: Text.Confirm +msgid "Yes, I know what I am doing!" +msgstr "Da, vem kaj počenjam!" + +#: Text.FSType +msgid "Filesystem type" +msgstr "Tip datotečnega sistema" + +#: Text.IsEncrypted +msgid "Encryption" +msgstr "Enkripcija (šifriranje)" + +#: Text.Yes +msgid "Yes" +msgstr "Da" + +#: Text.No +msgid "No" +msgstr "Ne" + +#: Help.Format +msgid "Usually you will only have to format a volume if you want to turn encryption on or off. Be aware, that you will erase all data from this volume." +msgstr "Navadno boste morali formatirati nosilec/vsebino, če boste želeli vključiti ali izključiti šifriranje. Zavedajte se, da boste s formatiranjem izbrisali vse obstoječe podatke na nosilcu." + +#: Help.LuksFormat +msgid "In the last step you have choosen encryption for this volume. Now you have to enter a corresponding password." +msgstr "V prejšnjem koraku ste izbrali šifriranje tega nosilca (dela) Zdaj morate vnesti ustrezno geslo" + +#: Help.Filesystem +msgid "Use a filesystem of your choice. The linux filesystem (ext3) should be a good choice. The windows filesystem (Fat32) is only useful, if you plan to connect your harddisk directly to a computer running the windows operating system." +msgstr "Uporabljajte datotečni sistem po vaši izbiri. Linux datotečni sistem (ext3) bi lahko bila dobra izbira. Datotečni sistem Windows (Fat32) je uporaben le, če nameravate priključiti trdi disk neposredno na računalnik, ki deluje preko operacijskega sistema windows." + +#: Help.Encryption +msgid "Enable encryption if you want to keep your data private. You have to enter the password to open an encrypted container. Be aware that your encrypted data is accessible for your local network. Close it, whenever you do not need it anymore." +msgstr "omogočite šifriranje, če želite da vaši podatki (p)ostanejo osebni. Vnesti morate geslo, s katerim boste odprli šifrirane vsebine. Zavedajte se, da so šifrirane datoteke dostopne vaši lokalni mreži. zaprite jih, kadar jih ne potrebujete. " + +#: Help.Password +msgid "Please choose a very good password consisting of letters, digits and special characters. There is no minimal length required, but you should not use less than ten characters. Twenty or more are recommended." +msgstr "Prosimo izberite dobro geslo, ki naj vsebuje črke, številke in posebne znake. Minimalna dolžina ni zahtevana, vendar naj ne bi uporabljali gesla z manj kot desetimi znaki. Priporočljivo je, da jih uporabljate dvajset ali več." + +#: Help.Confirm +msgid "Don't forget to confirm your action with this checkbox. Nothing happens otherwise." +msgstr "Ne pozabite potrditi akcije v potrdilnem polju! V nasprotnem primeru se ne bo zgodilo prav nič." + +#: AdviceMessage.FormatWarning.Text +msgid "All data of the selected filesystem will get lost!" +msgstr "Vsi podatki datotečnega sistema bodo izbrisani!" + +#: AdviceMessage.UnmountBeforeInit.Text +msgid "You must close this volume before you may initialize it." +msgstr "Ta nosilec morate zapreti preden ga inicializirate." + +#: AdviceMessage.UnmountBeforeInit.Link.Text +msgid "Close volume now" +msgstr "Zapri nosilec" + +#: SuccessMessage.FormatSuccess.Title +msgid "Formatting is running" +msgstr "Formatiranje poteka" + +#: SuccessMessage.FormatSuccess.Text +msgid "The selected filesystem is being formatted in the background. This may take some time (depending on the size of your disk)." +msgstr "Izbrani nosilec je bil formatiran v ozadju. ta akcija lahko vzame nekaj časa (odvisno od velikosti vašega diska)." + +#: WarningMessage.FormatNotConfirmed.Title +msgid "Confirmation missing" +msgstr "Manjka potrditev" + +#: WarningMessage.FormatNotConfirmed.Text +msgid "You did not confirm this action by activating the checkbox." +msgstr "Niste potrdili akcije s klikom na potrdilno polje" + +#: WarningMessage.FormatFailed.Title +msgid "Formatting failed" +msgstr "Formatiranje ni uspelo" + +#: WarningMessage.FormatFailed.Text +msgid "Formatting of the selected filesystem failed for unknown reasons - sorry!" +msgstr "Formatiranje izbranega nosilca/vsebine ni uspelo iz (ne)znanega vzroka - oprostite!" + +#: WarningMessage.FormatFailed.Link.Text +msgid "View log messages" +msgstr "Preglej dnevniška sporočila" diff --git a/v0.3.4.5/plugins/volume_format_fs/intl/sv/cryptobox-server-feature-volume_format_fs.po b/v0.3.4.5/plugins/volume_format_fs/intl/sv/cryptobox-server-feature-volume_format_fs.po new file mode 100644 index 0000000..095808c --- /dev/null +++ b/v0.3.4.5/plugins/volume_format_fs/intl/sv/cryptobox-server-feature-volume_format_fs.po @@ -0,0 +1,114 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 12:03+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Create filesystems" +msgstr "" + +#: Link +msgid "Format" +msgstr "" + +#: Title.Format +msgid "Initializing filesystem" +msgstr "" + +#: Button.Format +msgid "Initialize filesystem" +msgstr "" + +#: Text.Confirm +msgid "Yes, I know what I am doing!" +msgstr "" + +#: Text.FSType +msgid "Filesystem type" +msgstr "" + +#: Text.IsEncrypted +msgid "Encryption" +msgstr "" + +#: Text.Yes +msgid "Yes" +msgstr "" + +#: Text.No +msgid "No" +msgstr "" + +#: Help.Format +msgid "Usually you will only have to format a volume if you want to turn encryption on or off. Be aware, that you will erase all data from this volume." +msgstr "" + +#: Help.LuksFormat +msgid "In the last step you have choosen encryption for this volume. Now you have to enter a corresponding password." +msgstr "" + +#: Help.Filesystem +msgid "Use a filesystem of your choice. The linux filesystem (ext3) should be a good choice. The windows filesystem (Fat32) is only useful, if you plan to connect your harddisk directly to a computer running the windows operating system." +msgstr "" + +#: Help.Encryption +msgid "Enable encryption if you want to keep your data private. You have to enter the password to open an encrypted container. Be aware that your encrypted data is accessible for your local network. Close it, whenever you do not need it anymore." +msgstr "" + +#: Help.Password +msgid "Please choose a very good password consisting of letters, digits and special characters. There is no minimal length required, but you should not use less than ten characters. Twenty or more are recommended." +msgstr "" + +#: Help.Confirm +msgid "Don't forget to confirm your action with this checkbox. Nothing happens otherwise." +msgstr "" + +#: AdviceMessage.FormatWarning.Text +msgid "All data of the selected filesystem will get lost!" +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Text +msgid "You must close this volume before you may initialize it." +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Link.Text +msgid "Close volume now" +msgstr "" + +#: SuccessMessage.FormatSuccess.Title +msgid "Formatting is running" +msgstr "" + +#: SuccessMessage.FormatSuccess.Text +msgid "The selected filesystem is being formatted in the background. This may take some time (depending on the size of your disk)." +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Title +msgid "Confirmation missing" +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Text +msgid "You did not confirm this action by activating the checkbox." +msgstr "" + +#: WarningMessage.FormatFailed.Title +msgid "Formatting failed" +msgstr "" + +#: WarningMessage.FormatFailed.Text +msgid "Formatting of the selected filesystem failed for unknown reasons - sorry!" +msgstr "" + +#: WarningMessage.FormatFailed.Link.Text +msgid "View log messages" +msgstr "" diff --git a/v0.3.4.5/plugins/volume_format_fs/intl/ur/cryptobox-server-feature-volume_format_fs.po b/v0.3.4.5/plugins/volume_format_fs/intl/ur/cryptobox-server-feature-volume_format_fs.po new file mode 100644 index 0000000..e7a8e85 --- /dev/null +++ b/v0.3.4.5/plugins/volume_format_fs/intl/ur/cryptobox-server-feature-volume_format_fs.po @@ -0,0 +1,114 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-02-05 23:28+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Create filesystems" +msgstr "" + +#: Link +msgid "Format" +msgstr "" + +#: Title.Format +msgid "Initializing filesystem" +msgstr "" + +#: Button.Format +msgid "Initialize filesystem" +msgstr "" + +#: Text.Confirm +msgid "Yes, I know what I am doing!" +msgstr "" + +#: Text.FSType +msgid "Filesystem type" +msgstr "" + +#: Text.IsEncrypted +msgid "Encryption" +msgstr "" + +#: Text.Yes +msgid "Yes" +msgstr "" + +#: Text.No +msgid "No" +msgstr "" + +#: Help.Format +msgid "Usually you will only have to format a volume if you want to turn encryption on or off. Be aware, that you will erase all data from this volume." +msgstr "" + +#: Help.LuksFormat +msgid "In the last step you have choosen encryption for this volume. Now you have to enter a corresponding password." +msgstr "" + +#: Help.Filesystem +msgid "Use a filesystem of your choice. The linux filesystem (ext3) should be a good choice. The windows filesystem (Fat32) is only useful, if you plan to connect your harddisk directly to a computer running the windows operating system." +msgstr "" + +#: Help.Encryption +msgid "Enable encryption if you want to keep your data private. You have to enter the password to open an encrypted container. Be aware that your encrypted data is accessible for your local network. Close it, whenever you do not need it anymore." +msgstr "" + +#: Help.Password +msgid "Please choose a very good password consisting of letters, digits and special characters. There is no minimal length required, but you should not use less than ten characters. Twenty or more are recommended." +msgstr "" + +#: Help.Confirm +msgid "Don't forget to confirm your action with this checkbox. Nothing happens otherwise." +msgstr "" + +#: AdviceMessage.FormatWarning.Text +msgid "All data of the selected filesystem will get lost!" +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Text +msgid "You must close this volume before you may initialize it." +msgstr "" + +#: AdviceMessage.UnmountBeforeInit.Link.Text +msgid "Close volume now" +msgstr "" + +#: SuccessMessage.FormatSuccess.Title +msgid "Formatting is running" +msgstr "" + +#: SuccessMessage.FormatSuccess.Text +msgid "The selected filesystem is being formatted in the background. This may take some time (depending on the size of your disk)." +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Title +msgid "Confirmation missing" +msgstr "" + +#: WarningMessage.FormatNotConfirmed.Text +msgid "You did not confirm this action by activating the checkbox." +msgstr "" + +#: WarningMessage.FormatFailed.Title +msgid "Formatting failed" +msgstr "" + +#: WarningMessage.FormatFailed.Text +msgid "Formatting of the selected filesystem failed for unknown reasons - sorry!" +msgstr "" + +#: WarningMessage.FormatFailed.Link.Text +msgid "View log messages" +msgstr "" diff --git a/v0.3.4.5/plugins/volume_format_fs/language.hdf b/v0.3.4.5/plugins/volume_format_fs/language.hdf new file mode 100644 index 0000000..3d27ca1 --- /dev/null +++ b/v0.3.4.5/plugins/volume_format_fs/language.hdf @@ -0,0 +1,64 @@ +Name = Create filesystems +Link = Format + +Title.Format = Initializing filesystem + +Button.Format = Initialize filesystem + +Text { + Confirm = Yes, I know what I am doing! + FSType = Filesystem type + IsEncrypted = Encryption + Yes = Yes + No = No +} + + +Help { + Format = Usually you will only have to format a volume if you want to turn encryption on or off. Be aware, that you will erase all data from this volume. + LuksFormat = In the last step you have choosen encryption for this volume. Now you have to enter a corresponding password. + Filesystem = Use a filesystem of your choice. The linux filesystem (ext3) should be a good choice. The windows filesystem (Fat32) is only useful, if you plan to connect your harddisk directly to a computer running the windows operating system. + Encryption = Enable encryption if you want to keep your data private. You have to enter the password to open an encrypted container. Be aware that your encrypted data is accessible for your local network. Close it, whenever you do not need it anymore. + Password = Please choose a very good password consisting of letters, digits and special characters. There is no minimal length required, but you should not use less than ten characters. Twenty or more are recommended. + Confirm = Don't forget to confirm your action with this checkbox. Nothing happens otherwise. +} + + +AdviceMessage { + FormatWarning { + Text = All data of the selected filesystem will get lost! + } + + UnmountBeforeInit { + Text = You must close this volume before you may initialize it. + Link.Text = Close volume now + Link.Rel = volume_mount + Link.Attr1.name = action + Link.Attr1.value = umount + Link.Attr2.name = redirect + Link.Attr2.value = volume_format_fs + } +} + +SuccessMessage { + FormatSuccess { + Title = Formatting is running + Text = The selected filesystem is being formatted in the background. This may take some time (depending on the size of your disk). + } +} + +WarningMessage { + FormatNotConfirmed { + Title = Confirmation missing + Text = You did not confirm this action by activating the checkbox. + } + + FormatFailed { + Title = Formatting failed + Text = Formatting of the selected filesystem failed for unknown reasons - sorry! + Link.Text = View log messages + Link.Rel = logs + Link.Attr1.name = level + Link.Attr1.value = ERROR + } +} diff --git a/v0.3.4.5/plugins/volume_format_fs/plugin_icon.gif b/v0.3.4.5/plugins/volume_format_fs/plugin_icon.gif new file mode 100644 index 0000000000000000000000000000000000000000..9a159b0fa7371728633c659689fefcaca106c7c9 GIT binary patch literal 1312 zcmbu;2Uk;P0D$4|j@*&lB+RIc8V~^$Ee=#hD=TPhkOaa(XlX@?;4DimYBfXz2YOJ1 zrYe{~7z(li76ln$S{GVNtG0DitD;t{D5Bw`H@~6pdH%w?R2s6_J5CJ5;PDV(Ls$qv zQNY0f2L~hvPz2zTfT4jU1FZOn$O25ULO!x(p;JYOcoO1bhfKFaT{*PjC#4E zi`-D38Q2mJ%zq9N2BdX1)>g`0$cCuy%QM-ev z`;MsJNi^&t3@WlwMK)!UXIW~pc{h13i#%^ewd|oP?v5xU>ALHF&9q0XS#{6-Dxm(2CE8^cPW*(em@&D2?4_P|qk&gMhgvEbc z%73EgKh^V}mGPgK^Ixzk_=Bec|EUnXtP~8hP6_@!EqKkU5{y&{-c++JM$ZUF&j`nA zh3{*He>Q~PX^47XC;U(+G}T+08Z5^ftVRs3!;N#t4c6lZn}BOP+s{t0aV6t?@r4u9AwdC;SVMkzFY28}Y<6$-oMuv-axqhW6h?2Co{ ztKm;A= zIm@fxsY09;#U24e@zb#09Dp{8r&kqLMd;>uJ0DF9QSTQZREN{EN%gBc({=BaQpHrC z5D|!7`ARZt)s^bF{DqebPstAAw-gbj0Az!iDr3U)+l!L#XkG>WGQ&#eyTO>N*3S#`ZKx~nqfbz$hOnurr(zR|v%OSBP4l6GXD zZEgJZ^4ZwibvMf-sv-SY;3IrU4TAlQ3x)<4r}tkgnjcl;;2oK8c3JeR<6>aF*JY!+ zU`5gB%ez&N_I2Lqmb}RXex{3?W(*npK*Ej@zDO z<~XJ`$AwIek?FdH9 zewp1u?__aV2$0{~Z5ySJ?y(7T55R?s(mh?b0rxz$mCQpIY#BI`hcQ;IHcAPTr43}} eRr?!pJDePBWU@1o|pZxyf+XaY*WFwhSi1ET+mYyj*Ajsp&mS@dt<0C3NZ2Hy(wRe`id z+FGRlz_J_8zG-x2U~XB|4f1oAgSeg*i8K?eY6sUYI8B3MVJ#e$;k z7RBLH7UyUN&I3nh0_iyjya23eZPD!A5um*scqQ-~A>Rar7RW6Fe-U^EJPn>wcp8+t zqIa&=Y`ZVB@lBvuD}iSLUVA#g_tHoy4|EQ^`h<+mgYuK_>Pj#bYU(S`Jm?YR09Xz@ zSqp(xz~(|89^dTa1Vk*j5bR}$FF-U3_7d0%xCjxZsARPWP%OZP+cKEWS_o_e)ZJ@6 z^0_3Q&cyjLB0>9@oxl>nxrpBnKF_6Jy0K1h4jN0@hUQublmH4jhz;m8p(H3# zTy#g4{d3i_M;*b^^%&coRYcC8e)hEp352&aC_ z2z*&fC$wp{wmX52R-I+GaaDIG$r)P+Q{c=4)#sGR&waw76WMUu4UE*%h~5FD`+Gyr zprafLlWC8?942e^y&Sr920$ei!bp-ehDrpVewTqC1b(b_77PLFoUq||kK^HX53Rx2 zM60olY}I;Fi?4(sHgMo8%jsUJdUeN4>#s%t;0W;4_#{hD_BuA*uF3f`2&6z+7)(ke zhL68-966oE{uQ8mKKFsPlt@!!33fi}^H94&Yn4_<(rBy$lU79Uu<*&Zj-J5`{5{~s z>$#M+0A0WqfE9~j%Q{VKi=v^Jbjh&^=>JnV-7EAAN_7rcU=Q%_jkpu$ftP^MIWD6! z^^4j1{*Abn7t@j2nF2IVxt5%42WY+sNCnM?iwlQUyqQ7d1q00000NkvXXu0mjf Dr*0B7 literal 0 HcmV?d00001 diff --git a/v0.3.4.5/plugins/volume_format_fs/unittests.py b/v0.3.4.5/plugins/volume_format_fs/unittests.py new file mode 100644 index 0000000..0e0d04b --- /dev/null +++ b/v0.3.4.5/plugins/volume_format_fs/unittests.py @@ -0,0 +1,101 @@ +# +# Copyright 2006 sense.lab e.V. +# +# This file is part of the CryptoBox. +# +# The CryptoBox 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 CryptoBox 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 the CryptoBox; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +__revision__ = "$Id" + +from cryptobox.tests.base import WebInterfaceTestClass +import cryptobox.tests.tools as cbox_tools + +class unittests(WebInterfaceTestClass): + + + def test_read_form(self): + """Simply check if the plugin works. + """ + url = self.url + "volume_format_fs?weblang=en&device=" + self.device_html + self.register_auth(url) + self.cmd.go(url) + self.cmd.find('Initializing filesystem') + + + def test_invalid_actions(self): + """Try to issue some invalid orders. + """ + url = self.url + "volume_format_fs?weblang=en&device=" + self.device_html + self.register_auth(url) + ## make sure, it is not mounted + cbox_tools.umount(self.device) + ## try invalid filesystem type + self.cmd.go(url + "&fs_type=foo") + self.cmd.find('Initializing filesystem') + ## try invalid container type + self.cmd.go(url + "&container_type=foo") + self.cmd.find('Initializing filesystem') + ## missing confirmation + self.cmd.go(url + "&store=step1") + self.cmd.find('Confirmation missing') + ## call luks form + self.cmd.go(url + "&store=step1&confirm=1&container_type=luks") + self.cmd.find('name="crypto_password2"') + ## try 'step2' with plain container type + self.cmd.go(url + "&store=step2&confirm=1&container_type=plain") + self.cmd.find('Initializing filesystem') + ## try invalid 'store' + self.cmd.go(url + "&store=foo") + self.cmd.find('Initializing filesystem') + ## try without password + self.cmd.go(url + "&store=step2&container_type=luks&fs_type=windows" \ + + "&crypto_password=&crypto_password2=foo") + self.cmd.find('Missing password') + ## try with different passwords + self.cmd.go(url + "&store=step2&container_type=luks&fs_type=windows" \ + + "&crypto_password=bar&crypto_password2=foo") + self.cmd.find('Different passwords') + + + def test_format_open_device(self): + """Try to format an open device. + """ + url_format = self.url + "volume_format_fs?weblang=en&device=" \ + + self.device_html + self.register_auth(url_format) + url_mount = self.url + "volume_mount?weblang=en&device=" \ + + self.device_html + self.register_auth(url_mount) + ## mount device - do not care, if it was mounted before + self.cmd.go(url_mount + "&action=mount_plain") + self.cmd.find('Data.Status.Plugins.volume_mount=active') + ## try plain device + self.cmd.go(url_format + "&store=step1&confirm=1&container_type=plain&" \ + + "fs_type=linux") + self.cmd.find('This action is not available while the volume is active.') + ## try luks device + self.cmd.go(url_format + "&store=step2&container_type=luks&fs_type=" \ + + "windows&crypto_password=foo&crypto_password2=foo") + self.cmd.find('This action is not available while the volume is active.') + ## umount + cbox_tools.umount(self.device) + + + def test_format_device(self): + """Formatting of a device was done in 'volume_mount' plugin tests. + """ + pass + diff --git a/v0.3.4.5/plugins/volume_format_fs/volume_format.cs b/v0.3.4.5/plugins/volume_format_fs/volume_format.cs new file mode 100644 index 0000000..bda6d19 --- /dev/null +++ b/v0.3.4.5/plugins/volume_format_fs/volume_format.cs @@ -0,0 +1,62 @@ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

+

+ +
+ + + +
+ +
+ + +
+ diff --git a/v0.3.4.5/plugins/volume_format_fs/volume_format_fs.py b/v0.3.4.5/plugins/volume_format_fs/volume_format_fs.py new file mode 100644 index 0000000..cb67603 --- /dev/null +++ b/v0.3.4.5/plugins/volume_format_fs/volume_format_fs.py @@ -0,0 +1,137 @@ +# +# Copyright 2006 sense.lab e.V. +# +# This file is part of the CryptoBox. +# +# The CryptoBox 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 CryptoBox 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 the CryptoBox; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +__revision__ = "$Id" + +import cryptobox.plugins.base +from cryptobox.core.exceptions import * +import cryptobox.core.container as cbx_container + +## map filesystem types to the appropriate arguments for 'mkfs' +FSTYPES = { + "windows": "vfat", + "linux": "ext3" } + + +class volume_format_fs(cryptobox.plugins.base.CryptoBoxPlugin): + + plugin_capabilities = [ "volume" ] + plugin_visibility = [ "volume" ] + request_auth = True + rank = 60 + + + def do_action(self, store=None, fs_type="windows", container_type="luks", + crypto_password=None, crypto_password2=None, confirm=None): + container = self.cbox.get_container(self.device) + ## exit immediately if the device is not writeable + if not container.is_writeable(): + self.hdf["Data.Warning"] = "DeviceNotWriteable" + return "empty" + if not fs_type in FSTYPES.keys(): + self.cbox.log.info("Invalid filesystem type choosen: %s" % str(fs_type)) + return "volume_format" + self.hdf[self.hdf_prefix + "fs_type"] = fs_type + if not container_type in ['plain', 'luks']: + self.cbox.log.info("Invalid container type type choosen: %s" % \ + str(container_type)) + return "volume_format" + self.hdf[self.hdf_prefix + "container_type"] = container_type + for t in FSTYPES.keys(): + self.hdf[self.hdf_prefix + "fs_types." + t] = t + if store == "step1": + if not confirm: + self.cbox.log.info("Missing confirmation for formatting of " + \ + "filesystem: %s" % self.device) + self.hdf["Data.Warning"] = "Plugins.volume_format_fs.FormatNotConfirmed" + return "volume_format" + if container_type == "luks": + return "volume_format_luks" + elif container_type == "plain": + return self.__format_plain(FSTYPES[fs_type]) + elif store == "step2": + if container_type == "luks": + return self.__format_luks(FSTYPES[fs_type], + crypto_password, crypto_password2) + else: + self.cbox.log.info("Invalid input value for 'container_type': %s" \ + % container_type) + return "volume_format" + elif store: + self.cbox.log.info("Invalid input value for 'store': %s" % store) + return "volume_format" + else: + return "volume_format" + + + def get_status(self): + return "no status" + + + def __format_plain(self, fs_type): + try: + container = self.cbox.get_container(self.device) + container.create(cbx_container.CONTAINERTYPES["plain"], fs_type=fs_type) + except CBVolumeIsActive: + self.hdf["Data.Warning"] = "VolumeMayNotBeMounted" + self.cbox.log.info("Initialization is not possible as long as the device " \ + + "(%s) is mounted" % self.device) + return "volume_format" + except CBContainerError, err_msg: + self.hdf["Data.Warning"] = "Plugins.volume_format_fs.FormatFailed" + self.cbox.log.error("Initialization of the device (%s) failed: %s" % \ + (self.device, err_msg)) + return "volume_format" + else: + self.hdf["Data.Success"] = "Plugins.volume_format_fs.FormatSuccess" + self.cbox.log.info("Successfully initialized device '%s'" % self.device) + return { "plugin":"disks", "values":{} } + + + def __format_luks(self, fs_type, pw, pw2): + if not pw: + self.hdf["Data.Warning"] = "EmptyPassword" + self.cbox.log.info("No crypto password was supplied for initialization " \ + + "of device '%s'" % self.device) + return "volume_format" + if pw != pw2: + self.hdf["Data.Warning"] = "DifferentPasswords" + self.cbox.log.info("The crypto password was not repeated correctly for " \ + + "initialization of device '%s'" % self.device) + return "volume_format" + container = self.cbox.get_container(self.device) + try: + container.create(cbx_container.CONTAINERTYPES["luks"], + fs_type=fs_type, password=pw) + except CBVolumeIsActive: + self.hdf["Data.Warning"] = "VolumeMayNotBeMounted" + self.cbox.log.info("Initialization is not possible as long as the device " \ + + "(%s) is mounted" % self.device) + return "volume_format" + except CBContainerError, err_msg: + self.hdf["Data.Warning"] = "Plugins.volume_format_fs.FormatFailed" + self.cbox.log.error("Initialization of the device (%s) failed: %s" % \ + (self.device, err_msg)) + return "volume_format" + else: + self.hdf["Data.Success"] = "Plugins.volume_format_fs.FormatSuccess" + self.cbox.log.info("Successfully initialized device '%s'" % self.device) + return { "plugin":"disks", "values":{} } + diff --git a/v0.3.4.5/plugins/volume_format_fs/volume_format_luks.cs b/v0.3.4.5/plugins/volume_format_fs/volume_format_luks.cs new file mode 100644 index 0000000..ac7a6dd --- /dev/null +++ b/v0.3.4.5/plugins/volume_format_fs/volume_format_luks.cs @@ -0,0 +1,37 @@ + + + + +
+ + + + + + + + + + + + +

:

+

:

+ + +

+

+

+ + + +

+ + + +
+ diff --git a/v0.3.4.5/plugins/volume_mount/intl/cryptobox-server-feature-volume_mount.pot b/v0.3.4.5/plugins/volume_mount/intl/cryptobox-server-feature-volume_mount.pot new file mode 100644 index 0000000..bd7a34e --- /dev/null +++ b/v0.3.4.5/plugins/volume_mount/intl/cryptobox-server-feature-volume_mount.pot @@ -0,0 +1,99 @@ +#: Name +msgid "Open and close volumes" +msgstr "" + +#: Link +msgid "Activation" +msgstr "" + +#: Title.Umount +msgid "Deactivation" +msgstr "" + +#: Text.EnterCurrentPassword +msgid "Volume's encryption password" +msgstr "" + +#: Button.Mount +msgid "Open this volume" +msgstr "" + +#: Button.Umount +msgid "Close this volume" +msgstr "" + +#: Help.Open +msgid "This volume is currently closed. If you open the volume, then you will be able to access the data of this volume. Just search in your network environment for the server and browse through its shares. In case the volume is encrypted you have to enter the corresponding password first." +msgstr "" + +#: Help.Close +msgid "This volume is currently open. All files are accessible for everyone who has access to your local network. Just search in your network environment for the server and browse through its shares. Before you close the volume you should quit all programs with open files on it." +msgstr "" + +#: SuccessMessage.MountDone.Title +msgid "Volume opened" +msgstr "" + +#: SuccessMessage.MountDone.Text +msgid "The content of this volume is available now." +msgstr "" + +#: SuccessMessage.UmountDone.Title +msgid "Volume closed" +msgstr "" + +#: SuccessMessage.UmountDone.Text +msgid "The content of this volume is protected from access now." +msgstr "" + +#: WarningMessage.MountFailed.Title +msgid "Opening failed" +msgstr "" + +#: WarningMessage.MountFailed.Text +msgid "The volume could not be opened for some reason. Sorry!" +msgstr "" + +#: WarningMessage.MountFailed.Link.Text +msgid "View event log" +msgstr "" + +#: WarningMessage.MountCryptoFailed.Text +msgid "Maybe you entered a wrong password?" +msgstr "" + +#: WarningMessage.InvalidContainerType.Title +msgid "Unknown format" +msgstr "" + +#: WarningMessage.InvalidContainerType.Text +msgid "The type of this volume ist not known. Maybe you want to initialize it first?" +msgstr "" + +#: WarningMessage.InvalidContainerType.Link.Text +msgid "Format volume" +msgstr "" + +#: WarningMessage.UmountFailed.Title +msgid "Closing failed" +msgstr "" + +#: WarningMessage.UmountFailed.Text +msgid "The volume could not be closed. Probably some files are still in use." +msgstr "" + +#: WarningMessage.IsAlreadyMounted.Title +msgid "Already open" +msgstr "" + +#: WarningMessage.IsAlreadyMounted.Text +msgid "The volume is already open." +msgstr "" + +#: WarningMessage.IsNotMounted.Title +msgid "Already closed" +msgstr "" + +#: WarningMessage.IsNotMounted.Text +msgid "The volume is already closed." +msgstr "" diff --git a/v0.3.4.5/plugins/volume_mount/intl/cs/cryptobox-server-feature-volume_mount.po b/v0.3.4.5/plugins/volume_mount/intl/cs/cryptobox-server-feature-volume_mount.po new file mode 100644 index 0000000..759771d --- /dev/null +++ b/v0.3.4.5/plugins/volume_mount/intl/cs/cryptobox-server-feature-volume_mount.po @@ -0,0 +1,114 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 19:19+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Open and close volumes" +msgstr "" + +#: Link +msgid "Activation" +msgstr "" + +#: Title.Umount +msgid "Deactivation" +msgstr "" + +#: Text.EnterCurrentPassword +msgid "Volume's encryption password" +msgstr "" + +#: Button.Mount +msgid "Open this volume" +msgstr "" + +#: Button.Umount +msgid "Close this volume" +msgstr "" + +#: Help.Open +msgid "This volume is currently closed. If you open the volume, then you will be able to access the data of this volume. Just search in your network environment for the server and browse through its shares. In case the volume is encrypted you have to enter the corresponding password first." +msgstr "" + +#: Help.Close +msgid "This volume is currently open. All files are accessible for everyone who has access to your local network. Just search in your network environment for the server and browse through its shares. Before you close the volume you should quit all programs with open files on it." +msgstr "" + +#: SuccessMessage.MountDone.Title +msgid "Volume opened" +msgstr "" + +#: SuccessMessage.MountDone.Text +msgid "The content of this volume is available now." +msgstr "" + +#: SuccessMessage.UmountDone.Title +msgid "Volume closed" +msgstr "" + +#: SuccessMessage.UmountDone.Text +msgid "The content of this volume is protected from access now." +msgstr "" + +#: WarningMessage.MountFailed.Title +msgid "Opening failed" +msgstr "" + +#: WarningMessage.MountFailed.Text +msgid "The volume could not be opened for some reason. Sorry!" +msgstr "" + +#: WarningMessage.MountFailed.Link.Text +msgid "View event log" +msgstr "" + +#: WarningMessage.MountCryptoFailed.Text +msgid "Maybe you entered a wrong password?" +msgstr "" + +#: WarningMessage.InvalidContainerType.Title +msgid "Unknown format" +msgstr "" + +#: WarningMessage.InvalidContainerType.Text +msgid "The type of this volume ist not known. Maybe you want to initialize it first?" +msgstr "" + +#: WarningMessage.InvalidContainerType.Link.Text +msgid "Format volume" +msgstr "" + +#: WarningMessage.UmountFailed.Title +msgid "Closing failed" +msgstr "" + +#: WarningMessage.UmountFailed.Text +msgid "The volume could not be closed. Probably some files are still in use." +msgstr "" + +#: WarningMessage.IsAlreadyMounted.Title +msgid "Already open" +msgstr "" + +#: WarningMessage.IsAlreadyMounted.Text +msgid "The volume is already open." +msgstr "" + +#: WarningMessage.IsNotMounted.Title +msgid "Already closed" +msgstr "" + +#: WarningMessage.IsNotMounted.Text +msgid "The volume is already closed." +msgstr "" diff --git a/v0.3.4.5/plugins/volume_mount/intl/da/cryptobox-server-feature-volume_mount.po b/v0.3.4.5/plugins/volume_mount/intl/da/cryptobox-server-feature-volume_mount.po new file mode 100644 index 0000000..759771d --- /dev/null +++ b/v0.3.4.5/plugins/volume_mount/intl/da/cryptobox-server-feature-volume_mount.po @@ -0,0 +1,114 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 19:19+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Open and close volumes" +msgstr "" + +#: Link +msgid "Activation" +msgstr "" + +#: Title.Umount +msgid "Deactivation" +msgstr "" + +#: Text.EnterCurrentPassword +msgid "Volume's encryption password" +msgstr "" + +#: Button.Mount +msgid "Open this volume" +msgstr "" + +#: Button.Umount +msgid "Close this volume" +msgstr "" + +#: Help.Open +msgid "This volume is currently closed. If you open the volume, then you will be able to access the data of this volume. Just search in your network environment for the server and browse through its shares. In case the volume is encrypted you have to enter the corresponding password first." +msgstr "" + +#: Help.Close +msgid "This volume is currently open. All files are accessible for everyone who has access to your local network. Just search in your network environment for the server and browse through its shares. Before you close the volume you should quit all programs with open files on it." +msgstr "" + +#: SuccessMessage.MountDone.Title +msgid "Volume opened" +msgstr "" + +#: SuccessMessage.MountDone.Text +msgid "The content of this volume is available now." +msgstr "" + +#: SuccessMessage.UmountDone.Title +msgid "Volume closed" +msgstr "" + +#: SuccessMessage.UmountDone.Text +msgid "The content of this volume is protected from access now." +msgstr "" + +#: WarningMessage.MountFailed.Title +msgid "Opening failed" +msgstr "" + +#: WarningMessage.MountFailed.Text +msgid "The volume could not be opened for some reason. Sorry!" +msgstr "" + +#: WarningMessage.MountFailed.Link.Text +msgid "View event log" +msgstr "" + +#: WarningMessage.MountCryptoFailed.Text +msgid "Maybe you entered a wrong password?" +msgstr "" + +#: WarningMessage.InvalidContainerType.Title +msgid "Unknown format" +msgstr "" + +#: WarningMessage.InvalidContainerType.Text +msgid "The type of this volume ist not known. Maybe you want to initialize it first?" +msgstr "" + +#: WarningMessage.InvalidContainerType.Link.Text +msgid "Format volume" +msgstr "" + +#: WarningMessage.UmountFailed.Title +msgid "Closing failed" +msgstr "" + +#: WarningMessage.UmountFailed.Text +msgid "The volume could not be closed. Probably some files are still in use." +msgstr "" + +#: WarningMessage.IsAlreadyMounted.Title +msgid "Already open" +msgstr "" + +#: WarningMessage.IsAlreadyMounted.Text +msgid "The volume is already open." +msgstr "" + +#: WarningMessage.IsNotMounted.Title +msgid "Already closed" +msgstr "" + +#: WarningMessage.IsNotMounted.Text +msgid "The volume is already closed." +msgstr "" diff --git a/v0.3.4.5/plugins/volume_mount/intl/de/cryptobox-server-feature-volume_mount.po b/v0.3.4.5/plugins/volume_mount/intl/de/cryptobox-server-feature-volume_mount.po new file mode 100644 index 0000000..f1de4d0 --- /dev/null +++ b/v0.3.4.5/plugins/volume_mount/intl/de/cryptobox-server-feature-volume_mount.po @@ -0,0 +1,113 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 19:19+0100\n" +"PO-Revision-Date: 2007-02-03 21:47+0100\n" +"Last-Translator: Lars Kruse \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Open and close volumes" +msgstr "Datenträger öffnen und schließen" + +#: Link +msgid "Activation" +msgstr "Aktivierung" + +#: Title.Umount +msgid "Deactivation" +msgstr "Deaktivierung" + +#: Text.EnterCurrentPassword +msgid "Volume's encryption password" +msgstr "Passwort der Datenträgerverschlüsselung" + +#: Button.Mount +msgid "Open this volume" +msgstr "Datenträger öffnen" + +#: Button.Umount +msgid "Close this volume" +msgstr "Datenträger schließen" + +#: Help.Open +msgid "This volume is currently closed. If you open the volume, then you will be able to access the data of this volume. Just search in your network environment for the server and browse through its shares. In case the volume is encrypted you have to enter the corresponding password first." +msgstr "Dieder Datenträger ist momentan geschlossen. Wenn du diesen Datenträger öffnest, kannst du auf seine Daten zugreifen. Suche einfach in deiner Netzwerkumgebung nach dem Server und durchstöber seine Freigaben. Falls der Datenträger verschlüsselt wurde, musst du erst das entsprechende Passwort eingeben." + +#: Help.Close +msgid "This volume is currently open. All files are accessible for everyone who has access to your local network. Just search in your network environment for the server and browse through its shares. Before you close the volume you should quit all programs with open files on it." +msgstr "Dieser Datenträger ist momentan geöffnet. Alle Dateien sind über das lokale Netzwerk verfügbar. Suche einfach in deiner Netzwerkumgebung nach dem Server und durchstöber seine Freigaben. Bevor du den Datenträger schließt, sollten alle Programme beendet sein, die auf dessen Dateien zugreifen." + +#: SuccessMessage.MountDone.Title +msgid "Volume opened" +msgstr "Datenträger wurde geöffnet" + +#: SuccessMessage.MountDone.Text +msgid "The content of this volume is available now." +msgstr "Der Inhalt dieses Datenträgers ist nun verfügbar." + +#: SuccessMessage.UmountDone.Title +msgid "Volume closed" +msgstr "Datenträger wurde geschlossen" + +#: SuccessMessage.UmountDone.Text +msgid "The content of this volume is protected from access now." +msgstr "Der Inhalt dieses Datenträgers ist vor Zugriffen geschützt." + +#: WarningMessage.MountFailed.Title +msgid "Opening failed" +msgstr "Öffnen fehlgeschlagen" + +#: WarningMessage.MountFailed.Text +msgid "The volume could not be opened for some reason. Sorry!" +msgstr "Der Datenträger konnte nicht geöffnet werden. Entschuldigung!" + +#: WarningMessage.MountFailed.Link.Text +msgid "View event log" +msgstr "Nachrichtenprotokoll anzeigen" + +#: WarningMessage.MountCryptoFailed.Text +msgid "Maybe you entered a wrong password?" +msgstr "Vielleicht hast du ein falsches Passwort eingegeben?" + +#: WarningMessage.InvalidContainerType.Title +msgid "Unknown format" +msgstr "Unbekanntes Format" + +#: WarningMessage.InvalidContainerType.Text +msgid "The type of this volume ist not known. Maybe you want to initialize it first?" +msgstr "Der Datenträgertyp ist unbekannt. Willst du ihn jetzt initialisieren?" + +#: WarningMessage.InvalidContainerType.Link.Text +msgid "Format volume" +msgstr "Datenträger formatieren" + +#: WarningMessage.UmountFailed.Title +msgid "Closing failed" +msgstr "Schließen fehlgeschlagen" + +#: WarningMessage.UmountFailed.Text +msgid "The volume could not be closed. Probably some files are still in use." +msgstr "Der Datenträger konnte nicht geschlossen werden. Vielleicht werden einige seiner Daten noch verwendet." + +#: WarningMessage.IsAlreadyMounted.Title +msgid "Already open" +msgstr "Bereits geöffnet" + +#: WarningMessage.IsAlreadyMounted.Text +msgid "The volume is already open." +msgstr "Der Datenträger wurde bereits geöffnet." + +#: WarningMessage.IsNotMounted.Title +msgid "Already closed" +msgstr "Bereits geschlossen" + +#: WarningMessage.IsNotMounted.Text +msgid "The volume is already closed." +msgstr "Dieser Datenträger wurde bereits geschlossen." diff --git a/v0.3.4.5/plugins/volume_mount/intl/en/cryptobox-server-feature-volume_mount.po b/v0.3.4.5/plugins/volume_mount/intl/en/cryptobox-server-feature-volume_mount.po new file mode 100644 index 0000000..b4d09d3 --- /dev/null +++ b/v0.3.4.5/plugins/volume_mount/intl/en/cryptobox-server-feature-volume_mount.po @@ -0,0 +1,103 @@ +#: Name +msgid "Open and close volumes" +msgstr "Open and close volumes" + +#: Link +msgid "Activation" +msgstr "Activation" + +#: Title.Umount +#, fuzzy +msgid "Deactivation" +msgstr "Deactivation" + +#: Text.EnterCurrentPassword +msgid "Volume's encryption password" +msgstr "Volume's encryption password" + +#: Button.Mount +msgid "Open this volume" +msgstr "Open this volume" + +#: Button.Umount +msgid "Close this volume" +msgstr "Close this volume" + +#: Help.Open +msgid "This volume is currently closed. If you open the volume, then you will be able to access the data of this volume. Just search in your network environment for the server and browse through its shares. In case the volume is encrypted you have to enter the corresponding password first." +msgstr "This volume is currently closed. If you open the volume, then you will be able to access the data of this volume. Just search in your network environment for the server and browse through its shares. In case the volume is encrypted you have to enter the corresponding password first." + +#: Help.Close +#, fuzzy +msgid "This volume is currently open. All files are accessible for everyone who has access to your local network. Just search in your network environment for the server and browse through its shares. Before you close the volume you should quit all programs with open files on it." +msgstr "This volume is currently open. All files are accessible for everyone who has access to your local network. Just search in your network environment for the server and browse through its shares. Before you close the volume you should quit all programs with open files on it." + +#: SuccessMessage.MountDone.Title +msgid "Volume opened" +msgstr "Volume opened" + +#: SuccessMessage.MountDone.Text +msgid "The content of this volume is available now." +msgstr "The content of this volume is available now." + +#: SuccessMessage.UmountDone.Title +msgid "Volume closed" +msgstr "Volume closed" + +#: SuccessMessage.UmountDone.Text +msgid "The content of this volume is protected from access now." +msgstr "The content of this volume is protected from access now." + +#: WarningMessage.MountFailed.Title +msgid "Opening failed" +msgstr "Opening failed" + +#: WarningMessage.MountFailed.Text +msgid "The volume could not be opened for some reason. Sorry!" +msgstr "The volume could not be opened for some reason. Sorry!" + +#: WarningMessage.MountFailed.Link.Text +msgid "View event log" +msgstr "View event log" + +#: WarningMessage.MountCryptoFailed.Text +#, fuzzy +msgid "Maybe you entered a wrong password?" +msgstr "Maybe you entered a wrong password?" + +#: WarningMessage.InvalidContainerType.Title +msgid "Unknown format" +msgstr "Unknown format" + +#: WarningMessage.InvalidContainerType.Text +#, fuzzy +msgid "The type of this volume ist not known. Maybe you want to initialize it first?" +msgstr "The type of this volume ist not known. Maybe you want to initialize it first?" + +#: WarningMessage.InvalidContainerType.Link.Text +msgid "Format volume" +msgstr "Format volume" + +#: WarningMessage.UmountFailed.Title +msgid "Closing failed" +msgstr "Closing failed" + +#: WarningMessage.UmountFailed.Text +msgid "The volume could not be closed. Probably some files are still in use." +msgstr "The volume could not be closed. Probably some files are still in use." + +#: WarningMessage.IsAlreadyMounted.Title +msgid "Already open" +msgstr "Already open" + +#: WarningMessage.IsAlreadyMounted.Text +msgid "The volume is already open." +msgstr "The volume is already open." + +#: WarningMessage.IsNotMounted.Title +msgid "Already closed" +msgstr "Already closed" + +#: WarningMessage.IsNotMounted.Text +msgid "The volume is already closed." +msgstr "The volume is already closed." diff --git a/v0.3.4.5/plugins/volume_mount/intl/es/cryptobox-server-feature-volume_mount.po b/v0.3.4.5/plugins/volume_mount/intl/es/cryptobox-server-feature-volume_mount.po new file mode 100644 index 0000000..759771d --- /dev/null +++ b/v0.3.4.5/plugins/volume_mount/intl/es/cryptobox-server-feature-volume_mount.po @@ -0,0 +1,114 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 19:19+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Open and close volumes" +msgstr "" + +#: Link +msgid "Activation" +msgstr "" + +#: Title.Umount +msgid "Deactivation" +msgstr "" + +#: Text.EnterCurrentPassword +msgid "Volume's encryption password" +msgstr "" + +#: Button.Mount +msgid "Open this volume" +msgstr "" + +#: Button.Umount +msgid "Close this volume" +msgstr "" + +#: Help.Open +msgid "This volume is currently closed. If you open the volume, then you will be able to access the data of this volume. Just search in your network environment for the server and browse through its shares. In case the volume is encrypted you have to enter the corresponding password first." +msgstr "" + +#: Help.Close +msgid "This volume is currently open. All files are accessible for everyone who has access to your local network. Just search in your network environment for the server and browse through its shares. Before you close the volume you should quit all programs with open files on it." +msgstr "" + +#: SuccessMessage.MountDone.Title +msgid "Volume opened" +msgstr "" + +#: SuccessMessage.MountDone.Text +msgid "The content of this volume is available now." +msgstr "" + +#: SuccessMessage.UmountDone.Title +msgid "Volume closed" +msgstr "" + +#: SuccessMessage.UmountDone.Text +msgid "The content of this volume is protected from access now." +msgstr "" + +#: WarningMessage.MountFailed.Title +msgid "Opening failed" +msgstr "" + +#: WarningMessage.MountFailed.Text +msgid "The volume could not be opened for some reason. Sorry!" +msgstr "" + +#: WarningMessage.MountFailed.Link.Text +msgid "View event log" +msgstr "" + +#: WarningMessage.MountCryptoFailed.Text +msgid "Maybe you entered a wrong password?" +msgstr "" + +#: WarningMessage.InvalidContainerType.Title +msgid "Unknown format" +msgstr "" + +#: WarningMessage.InvalidContainerType.Text +msgid "The type of this volume ist not known. Maybe you want to initialize it first?" +msgstr "" + +#: WarningMessage.InvalidContainerType.Link.Text +msgid "Format volume" +msgstr "" + +#: WarningMessage.UmountFailed.Title +msgid "Closing failed" +msgstr "" + +#: WarningMessage.UmountFailed.Text +msgid "The volume could not be closed. Probably some files are still in use." +msgstr "" + +#: WarningMessage.IsAlreadyMounted.Title +msgid "Already open" +msgstr "" + +#: WarningMessage.IsAlreadyMounted.Text +msgid "The volume is already open." +msgstr "" + +#: WarningMessage.IsNotMounted.Title +msgid "Already closed" +msgstr "" + +#: WarningMessage.IsNotMounted.Text +msgid "The volume is already closed." +msgstr "" diff --git a/v0.3.4.5/plugins/volume_mount/intl/fi/cryptobox-server-feature-volume_mount.po b/v0.3.4.5/plugins/volume_mount/intl/fi/cryptobox-server-feature-volume_mount.po new file mode 100644 index 0000000..759771d --- /dev/null +++ b/v0.3.4.5/plugins/volume_mount/intl/fi/cryptobox-server-feature-volume_mount.po @@ -0,0 +1,114 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 19:19+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Open and close volumes" +msgstr "" + +#: Link +msgid "Activation" +msgstr "" + +#: Title.Umount +msgid "Deactivation" +msgstr "" + +#: Text.EnterCurrentPassword +msgid "Volume's encryption password" +msgstr "" + +#: Button.Mount +msgid "Open this volume" +msgstr "" + +#: Button.Umount +msgid "Close this volume" +msgstr "" + +#: Help.Open +msgid "This volume is currently closed. If you open the volume, then you will be able to access the data of this volume. Just search in your network environment for the server and browse through its shares. In case the volume is encrypted you have to enter the corresponding password first." +msgstr "" + +#: Help.Close +msgid "This volume is currently open. All files are accessible for everyone who has access to your local network. Just search in your network environment for the server and browse through its shares. Before you close the volume you should quit all programs with open files on it." +msgstr "" + +#: SuccessMessage.MountDone.Title +msgid "Volume opened" +msgstr "" + +#: SuccessMessage.MountDone.Text +msgid "The content of this volume is available now." +msgstr "" + +#: SuccessMessage.UmountDone.Title +msgid "Volume closed" +msgstr "" + +#: SuccessMessage.UmountDone.Text +msgid "The content of this volume is protected from access now." +msgstr "" + +#: WarningMessage.MountFailed.Title +msgid "Opening failed" +msgstr "" + +#: WarningMessage.MountFailed.Text +msgid "The volume could not be opened for some reason. Sorry!" +msgstr "" + +#: WarningMessage.MountFailed.Link.Text +msgid "View event log" +msgstr "" + +#: WarningMessage.MountCryptoFailed.Text +msgid "Maybe you entered a wrong password?" +msgstr "" + +#: WarningMessage.InvalidContainerType.Title +msgid "Unknown format" +msgstr "" + +#: WarningMessage.InvalidContainerType.Text +msgid "The type of this volume ist not known. Maybe you want to initialize it first?" +msgstr "" + +#: WarningMessage.InvalidContainerType.Link.Text +msgid "Format volume" +msgstr "" + +#: WarningMessage.UmountFailed.Title +msgid "Closing failed" +msgstr "" + +#: WarningMessage.UmountFailed.Text +msgid "The volume could not be closed. Probably some files are still in use." +msgstr "" + +#: WarningMessage.IsAlreadyMounted.Title +msgid "Already open" +msgstr "" + +#: WarningMessage.IsAlreadyMounted.Text +msgid "The volume is already open." +msgstr "" + +#: WarningMessage.IsNotMounted.Title +msgid "Already closed" +msgstr "" + +#: WarningMessage.IsNotMounted.Text +msgid "The volume is already closed." +msgstr "" diff --git a/v0.3.4.5/plugins/volume_mount/intl/fr/cryptobox-server-feature-volume_mount.po b/v0.3.4.5/plugins/volume_mount/intl/fr/cryptobox-server-feature-volume_mount.po new file mode 100644 index 0000000..759771d --- /dev/null +++ b/v0.3.4.5/plugins/volume_mount/intl/fr/cryptobox-server-feature-volume_mount.po @@ -0,0 +1,114 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 19:19+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Open and close volumes" +msgstr "" + +#: Link +msgid "Activation" +msgstr "" + +#: Title.Umount +msgid "Deactivation" +msgstr "" + +#: Text.EnterCurrentPassword +msgid "Volume's encryption password" +msgstr "" + +#: Button.Mount +msgid "Open this volume" +msgstr "" + +#: Button.Umount +msgid "Close this volume" +msgstr "" + +#: Help.Open +msgid "This volume is currently closed. If you open the volume, then you will be able to access the data of this volume. Just search in your network environment for the server and browse through its shares. In case the volume is encrypted you have to enter the corresponding password first." +msgstr "" + +#: Help.Close +msgid "This volume is currently open. All files are accessible for everyone who has access to your local network. Just search in your network environment for the server and browse through its shares. Before you close the volume you should quit all programs with open files on it." +msgstr "" + +#: SuccessMessage.MountDone.Title +msgid "Volume opened" +msgstr "" + +#: SuccessMessage.MountDone.Text +msgid "The content of this volume is available now." +msgstr "" + +#: SuccessMessage.UmountDone.Title +msgid "Volume closed" +msgstr "" + +#: SuccessMessage.UmountDone.Text +msgid "The content of this volume is protected from access now." +msgstr "" + +#: WarningMessage.MountFailed.Title +msgid "Opening failed" +msgstr "" + +#: WarningMessage.MountFailed.Text +msgid "The volume could not be opened for some reason. Sorry!" +msgstr "" + +#: WarningMessage.MountFailed.Link.Text +msgid "View event log" +msgstr "" + +#: WarningMessage.MountCryptoFailed.Text +msgid "Maybe you entered a wrong password?" +msgstr "" + +#: WarningMessage.InvalidContainerType.Title +msgid "Unknown format" +msgstr "" + +#: WarningMessage.InvalidContainerType.Text +msgid "The type of this volume ist not known. Maybe you want to initialize it first?" +msgstr "" + +#: WarningMessage.InvalidContainerType.Link.Text +msgid "Format volume" +msgstr "" + +#: WarningMessage.UmountFailed.Title +msgid "Closing failed" +msgstr "" + +#: WarningMessage.UmountFailed.Text +msgid "The volume could not be closed. Probably some files are still in use." +msgstr "" + +#: WarningMessage.IsAlreadyMounted.Title +msgid "Already open" +msgstr "" + +#: WarningMessage.IsAlreadyMounted.Text +msgid "The volume is already open." +msgstr "" + +#: WarningMessage.IsNotMounted.Title +msgid "Already closed" +msgstr "" + +#: WarningMessage.IsNotMounted.Text +msgid "The volume is already closed." +msgstr "" diff --git a/v0.3.4.5/plugins/volume_mount/intl/hu/cryptobox-server-feature-volume_mount.po b/v0.3.4.5/plugins/volume_mount/intl/hu/cryptobox-server-feature-volume_mount.po new file mode 100644 index 0000000..759771d --- /dev/null +++ b/v0.3.4.5/plugins/volume_mount/intl/hu/cryptobox-server-feature-volume_mount.po @@ -0,0 +1,114 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 19:19+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Open and close volumes" +msgstr "" + +#: Link +msgid "Activation" +msgstr "" + +#: Title.Umount +msgid "Deactivation" +msgstr "" + +#: Text.EnterCurrentPassword +msgid "Volume's encryption password" +msgstr "" + +#: Button.Mount +msgid "Open this volume" +msgstr "" + +#: Button.Umount +msgid "Close this volume" +msgstr "" + +#: Help.Open +msgid "This volume is currently closed. If you open the volume, then you will be able to access the data of this volume. Just search in your network environment for the server and browse through its shares. In case the volume is encrypted you have to enter the corresponding password first." +msgstr "" + +#: Help.Close +msgid "This volume is currently open. All files are accessible for everyone who has access to your local network. Just search in your network environment for the server and browse through its shares. Before you close the volume you should quit all programs with open files on it." +msgstr "" + +#: SuccessMessage.MountDone.Title +msgid "Volume opened" +msgstr "" + +#: SuccessMessage.MountDone.Text +msgid "The content of this volume is available now." +msgstr "" + +#: SuccessMessage.UmountDone.Title +msgid "Volume closed" +msgstr "" + +#: SuccessMessage.UmountDone.Text +msgid "The content of this volume is protected from access now." +msgstr "" + +#: WarningMessage.MountFailed.Title +msgid "Opening failed" +msgstr "" + +#: WarningMessage.MountFailed.Text +msgid "The volume could not be opened for some reason. Sorry!" +msgstr "" + +#: WarningMessage.MountFailed.Link.Text +msgid "View event log" +msgstr "" + +#: WarningMessage.MountCryptoFailed.Text +msgid "Maybe you entered a wrong password?" +msgstr "" + +#: WarningMessage.InvalidContainerType.Title +msgid "Unknown format" +msgstr "" + +#: WarningMessage.InvalidContainerType.Text +msgid "The type of this volume ist not known. Maybe you want to initialize it first?" +msgstr "" + +#: WarningMessage.InvalidContainerType.Link.Text +msgid "Format volume" +msgstr "" + +#: WarningMessage.UmountFailed.Title +msgid "Closing failed" +msgstr "" + +#: WarningMessage.UmountFailed.Text +msgid "The volume could not be closed. Probably some files are still in use." +msgstr "" + +#: WarningMessage.IsAlreadyMounted.Title +msgid "Already open" +msgstr "" + +#: WarningMessage.IsAlreadyMounted.Text +msgid "The volume is already open." +msgstr "" + +#: WarningMessage.IsNotMounted.Title +msgid "Already closed" +msgstr "" + +#: WarningMessage.IsNotMounted.Text +msgid "The volume is already closed." +msgstr "" diff --git a/v0.3.4.5/plugins/volume_mount/intl/it/cryptobox-server-feature-volume_mount.po b/v0.3.4.5/plugins/volume_mount/intl/it/cryptobox-server-feature-volume_mount.po new file mode 100644 index 0000000..6353afa --- /dev/null +++ b/v0.3.4.5/plugins/volume_mount/intl/it/cryptobox-server-feature-volume_mount.po @@ -0,0 +1,113 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 19:19+0100\n" +"PO-Revision-Date: 2007-03-20 15:42+0100\n" +"Last-Translator: Fabrizio Tarizzo \n" +"Language-Team: Italian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Open and close volumes" +msgstr "Apertura e chiusura volumi" + +#: Link +msgid "Activation" +msgstr "Attivazione" + +#: Title.Umount +msgid "Deactivation" +msgstr "Disattivazione" + +#: Text.EnterCurrentPassword +msgid "Volume's encryption password" +msgstr "Password di cifratura del volume" + +#: Button.Mount +msgid "Open this volume" +msgstr "Apri questo volume" + +#: Button.Umount +msgid "Close this volume" +msgstr "Chiudi questo volume" + +#: Help.Open +msgid "This volume is currently closed. If you open the volume, then you will be able to access the data of this volume. Just search in your network environment for the server and browse through its shares. In case the volume is encrypted you have to enter the corresponding password first." +msgstr "Il volume è attualmente chiuso. Se si apre il volume, sarà possibile accedere ai dati contenuti in esso semplicemente cercando il server nella propria rete e navigando tra le sue condivisioni. Se il volume è cifrato è necessario inserire la password corrispondente." + +#: Help.Close +msgid "This volume is currently open. All files are accessible for everyone who has access to your local network. Just search in your network environment for the server and browse through its shares. Before you close the volume you should quit all programs with open files on it." +msgstr "Il volume è attualmente aperto. I dati in esso contenuti sono accessibili da chiunque ha accesso alla propria rete locale semplicemente cercando il server nella rete e navigando tra le sue condivisioni. Prima di chiudere il volume sarà necessario chiudere tutti i file aperti." + +#: SuccessMessage.MountDone.Title +msgid "Volume opened" +msgstr "Volume aperto" + +#: SuccessMessage.MountDone.Text +msgid "The content of this volume is available now." +msgstr "Il contenuto di questo volume è ora disponibile." + +#: SuccessMessage.UmountDone.Title +msgid "Volume closed" +msgstr "Volume chiuso" + +#: SuccessMessage.UmountDone.Text +msgid "The content of this volume is protected from access now." +msgstr "Il contenuto del volume è ora protetto dall'accesso." + +#: WarningMessage.MountFailed.Title +msgid "Opening failed" +msgstr "Apertura fallita" + +#: WarningMessage.MountFailed.Text +msgid "The volume could not be opened for some reason. Sorry!" +msgstr "Non è stato possibile aprire il volume." + +#: WarningMessage.MountFailed.Link.Text +msgid "View event log" +msgstr "Mostra registro degli eventi" + +#: WarningMessage.MountCryptoFailed.Text +msgid "Maybe you entered a wrong password?" +msgstr "Probabilmente è stata inserita una password errata." + +#: WarningMessage.InvalidContainerType.Title +msgid "Unknown format" +msgstr "Formato sconosciuto" + +#: WarningMessage.InvalidContainerType.Text +msgid "The type of this volume ist not known. Maybe you want to initialize it first?" +msgstr "Questo volume è di un tipo sconosciuto. Si desidera inizializzarlo?" + +#: WarningMessage.InvalidContainerType.Link.Text +msgid "Format volume" +msgstr "Formatta volume" + +#: WarningMessage.UmountFailed.Title +msgid "Closing failed" +msgstr "Chiusura fallita" + +#: WarningMessage.UmountFailed.Text +msgid "The volume could not be closed. Probably some files are still in use." +msgstr "Non è stato possibile chiudere il volume. Probabilmente alcuni file sono ancora aperti." + +#: WarningMessage.IsAlreadyMounted.Title +msgid "Already open" +msgstr "Già aperto" + +#: WarningMessage.IsAlreadyMounted.Text +msgid "The volume is already open." +msgstr "Il volume è già aperto." + +#: WarningMessage.IsNotMounted.Title +msgid "Already closed" +msgstr "Già chiuso" + +#: WarningMessage.IsNotMounted.Text +msgid "The volume is already closed." +msgstr "Il volume è già chiuso." diff --git a/v0.3.4.5/plugins/volume_mount/intl/ja/cryptobox-server-feature-volume_mount.po b/v0.3.4.5/plugins/volume_mount/intl/ja/cryptobox-server-feature-volume_mount.po new file mode 100644 index 0000000..da245d4 --- /dev/null +++ b/v0.3.4.5/plugins/volume_mount/intl/ja/cryptobox-server-feature-volume_mount.po @@ -0,0 +1,113 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 19:19+0100\n" +"PO-Revision-Date: 2007-02-26 11:21+0100\n" +"Last-Translator: kinneko \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Open and close volumes" +msgstr "領域の開閉" + +#: Link +msgid "Activation" +msgstr "有効化" + +#: Title.Umount +msgid "Deactivation" +msgstr "無効化" + +#: Text.EnterCurrentPassword +msgid "Volume's encryption password" +msgstr "領域の暗号化パスワード" + +#: Button.Mount +msgid "Open this volume" +msgstr "領域を開く" + +#: Button.Umount +msgid "Close this volume" +msgstr "領域を閉じる" + +#: Help.Open +msgid "This volume is currently closed. If you open the volume, then you will be able to access the data of this volume. Just search in your network environment for the server and browse through its shares. In case the volume is encrypted you have to enter the corresponding password first." +msgstr "この領域は、現在は閉じています。この領域を開く設定に変更すると、この領域のデータを読み出すことができます。そうすれば、ネットワーク内でサーバーを検索して、共有領域を使うことができます。領域が暗号化されている場合は、まずパスワードを入力しなければなりません。" + +#: Help.Close +msgid "This volume is currently open. All files are accessible for everyone who has access to your local network. Just search in your network environment for the server and browse through its shares. Before you close the volume you should quit all programs with open files on it." +msgstr "この領域は、現在、開いています。すべてのファイルはLAN上にいる誰からでも利用可能です。ネットワーク内でサーバーを検索して、共有領域を使うことができます。領域を閉じる前には、その領域にあるファイルを利用しているすべてのプログラムを終了させる必要があります。" + +#: SuccessMessage.MountDone.Title +msgid "Volume opened" +msgstr "領域を開きました" + +#: SuccessMessage.MountDone.Text +msgid "The content of this volume is available now." +msgstr "この領域は準備ができました。" + +#: SuccessMessage.UmountDone.Title +msgid "Volume closed" +msgstr "領域は閉じました" + +#: SuccessMessage.UmountDone.Text +msgid "The content of this volume is protected from access now." +msgstr "いまのところ、この領域は利用することができません。" + +#: WarningMessage.MountFailed.Title +msgid "Opening failed" +msgstr "領域を開くのに失敗しました" + +#: WarningMessage.MountFailed.Text +msgid "The volume could not be opened for some reason. Sorry!" +msgstr "なんらかの理由で、この領域を開くことができませんでした。" + +#: WarningMessage.MountFailed.Link.Text +msgid "View event log" +msgstr "イベントログを見る" + +#: WarningMessage.MountCryptoFailed.Text +msgid "Maybe you entered a wrong password?" +msgstr "パスワードが間違っていませんか?" + +#: WarningMessage.InvalidContainerType.Title +msgid "Unknown format" +msgstr "未知のフォーマットです" + +#: WarningMessage.InvalidContainerType.Text +msgid "The type of this volume ist not known. Maybe you want to initialize it first?" +msgstr "この領域のタイプIDは登録されていないものです。最初に初期化が必要かもしれません。" + +#: WarningMessage.InvalidContainerType.Link.Text +msgid "Format volume" +msgstr "領域のフォーマット" + +#: WarningMessage.UmountFailed.Title +msgid "Closing failed" +msgstr "領域を閉じるのに失敗しました" + +#: WarningMessage.UmountFailed.Text +msgid "The volume could not be closed. Probably some files are still in use." +msgstr "領域を閉じることができませんでした。おそらく、ファイルが使われているのではないかと思われます。" + +#: WarningMessage.IsAlreadyMounted.Title +msgid "Already open" +msgstr "領域はすでに開いています" + +#: WarningMessage.IsAlreadyMounted.Text +msgid "The volume is already open." +msgstr "その領域は、すでに開いています。" + +#: WarningMessage.IsNotMounted.Title +msgid "Already closed" +msgstr "領域はすでに閉じています" + +#: WarningMessage.IsNotMounted.Text +msgid "The volume is already closed." +msgstr "その領域は、すでに閉じています。" diff --git a/v0.3.4.5/plugins/volume_mount/intl/nl/cryptobox-server-feature-volume_mount.po b/v0.3.4.5/plugins/volume_mount/intl/nl/cryptobox-server-feature-volume_mount.po new file mode 100644 index 0000000..759771d --- /dev/null +++ b/v0.3.4.5/plugins/volume_mount/intl/nl/cryptobox-server-feature-volume_mount.po @@ -0,0 +1,114 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 19:19+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Open and close volumes" +msgstr "" + +#: Link +msgid "Activation" +msgstr "" + +#: Title.Umount +msgid "Deactivation" +msgstr "" + +#: Text.EnterCurrentPassword +msgid "Volume's encryption password" +msgstr "" + +#: Button.Mount +msgid "Open this volume" +msgstr "" + +#: Button.Umount +msgid "Close this volume" +msgstr "" + +#: Help.Open +msgid "This volume is currently closed. If you open the volume, then you will be able to access the data of this volume. Just search in your network environment for the server and browse through its shares. In case the volume is encrypted you have to enter the corresponding password first." +msgstr "" + +#: Help.Close +msgid "This volume is currently open. All files are accessible for everyone who has access to your local network. Just search in your network environment for the server and browse through its shares. Before you close the volume you should quit all programs with open files on it." +msgstr "" + +#: SuccessMessage.MountDone.Title +msgid "Volume opened" +msgstr "" + +#: SuccessMessage.MountDone.Text +msgid "The content of this volume is available now." +msgstr "" + +#: SuccessMessage.UmountDone.Title +msgid "Volume closed" +msgstr "" + +#: SuccessMessage.UmountDone.Text +msgid "The content of this volume is protected from access now." +msgstr "" + +#: WarningMessage.MountFailed.Title +msgid "Opening failed" +msgstr "" + +#: WarningMessage.MountFailed.Text +msgid "The volume could not be opened for some reason. Sorry!" +msgstr "" + +#: WarningMessage.MountFailed.Link.Text +msgid "View event log" +msgstr "" + +#: WarningMessage.MountCryptoFailed.Text +msgid "Maybe you entered a wrong password?" +msgstr "" + +#: WarningMessage.InvalidContainerType.Title +msgid "Unknown format" +msgstr "" + +#: WarningMessage.InvalidContainerType.Text +msgid "The type of this volume ist not known. Maybe you want to initialize it first?" +msgstr "" + +#: WarningMessage.InvalidContainerType.Link.Text +msgid "Format volume" +msgstr "" + +#: WarningMessage.UmountFailed.Title +msgid "Closing failed" +msgstr "" + +#: WarningMessage.UmountFailed.Text +msgid "The volume could not be closed. Probably some files are still in use." +msgstr "" + +#: WarningMessage.IsAlreadyMounted.Title +msgid "Already open" +msgstr "" + +#: WarningMessage.IsAlreadyMounted.Text +msgid "The volume is already open." +msgstr "" + +#: WarningMessage.IsNotMounted.Title +msgid "Already closed" +msgstr "" + +#: WarningMessage.IsNotMounted.Text +msgid "The volume is already closed." +msgstr "" diff --git a/v0.3.4.5/plugins/volume_mount/intl/pl/cryptobox-server-feature-volume_mount.po b/v0.3.4.5/plugins/volume_mount/intl/pl/cryptobox-server-feature-volume_mount.po new file mode 100644 index 0000000..87e0d27 --- /dev/null +++ b/v0.3.4.5/plugins/volume_mount/intl/pl/cryptobox-server-feature-volume_mount.po @@ -0,0 +1,113 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-04-01 15:52+0200\n" +"PO-Revision-Date: 2007-03-29 21:48+0200\n" +"Last-Translator: Andrzej S. Kaznowski \n" +"Language-Team: POLSKI \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Open and close volumes" +msgstr "Otwieranie i zamykanie woluminów" + +#: Link +msgid "Activation" +msgstr "Włączenie" + +#: Title.Umount +msgid "Deactivation" +msgstr "Wyłączenie" + +#: Text.EnterCurrentPassword +msgid "Volume's encryption password" +msgstr "Hasło szyfrowania woluminu" + +#: Button.Mount +msgid "Open this volume" +msgstr "Otwórz wybrany wolumin" + +#: Button.Umount +msgid "Close this volume" +msgstr "Zamknij wybrany wolumin" + +#: Help.Open +msgid "This volume is currently closed. If you open the volume, then you will be able to access the data of this volume. Just search in your network environment for the server and browse through its shares. In case the volume is encrypted you have to enter the corresponding password first." +msgstr "Wolumin jest aktualnie zamknięty. Jeśli otworzysz wolumin, będziesz mógł mieć dostęp do danych na tym woluminie. Poszukaj tylko w swojej sieci serwera i przejrzyj udostępnione woluminy. Jeśli wolumin jest zaszyfrowany, musisz najpierw wpisać odpowiednie hasło." + +#: Help.Close +msgid "This volume is currently open. All files are accessible for everyone who has access to your local network. Just search in your network environment for the server and browse through its shares. Before you close the volume you should quit all programs with open files on it." +msgstr "Ten wolumin jest aktualnie otwarty. Wszystkie pliki są dostępne dla każdego, kto ma dostęp do twojej lokalnej sieci. Poszukaj tylko w sieci serwera i przejrzyj udostępnione woluminy. Zanim zamkniesz wolumin, powinieneś najpierw zamknąć na nim wszystkie programy z otwartymi plikami." + +#: SuccessMessage.MountDone.Title +msgid "Volume opened" +msgstr "Wolumin otwarty" + +#: SuccessMessage.MountDone.Text +msgid "The content of this volume is available now." +msgstr "Zawartość tego woluminu jest teraz dostępna." + +#: SuccessMessage.UmountDone.Title +msgid "Volume closed" +msgstr "Wolumin zamknięty" + +#: SuccessMessage.UmountDone.Text +msgid "The content of this volume is protected from access now." +msgstr "Zawartość tego woluminu jest teraz zabezpieczona przed dostępem." + +#: WarningMessage.MountFailed.Title +msgid "Opening failed" +msgstr "Otwieranie nie powiodło się" + +#: WarningMessage.MountFailed.Text +msgid "The volume could not be opened for some reason. Sorry!" +msgstr "Nie można było otworzyć woluminu - Przepraszamy!" + +#: WarningMessage.MountFailed.Link.Text +msgid "View event log" +msgstr "Obejrzyj rejestr wydarzeń" + +#: WarningMessage.MountCryptoFailed.Text +msgid "Maybe you entered a wrong password?" +msgstr "Może wpisałeś niewłaściwe hasło?" + +#: WarningMessage.InvalidContainerType.Title +msgid "Unknown format" +msgstr "Nieznany format" + +#: WarningMessage.InvalidContainerType.Text +msgid "The type of this volume ist not known. Maybe you want to initialize it first?" +msgstr "Nieznany rodzaj tego woluminu. Może chcesz go najpierw inicjować?" + +#: WarningMessage.InvalidContainerType.Link.Text +msgid "Format volume" +msgstr "Formatuj wolumin" + +#: WarningMessage.UmountFailed.Title +msgid "Closing failed" +msgstr "Zamykanie nie powiodło się" + +#: WarningMessage.UmountFailed.Text +msgid "The volume could not be closed. Probably some files are still in use." +msgstr "Nie można było zamknąć woluminu. Prawdopodobnie niektóre pliki są jeszcze w użyciu." + +#: WarningMessage.IsAlreadyMounted.Title +msgid "Already open" +msgstr "Wolumin otwarty" + +#: WarningMessage.IsAlreadyMounted.Text +msgid "The volume is already open." +msgstr "Wolumin jest już otwarty." + +#: WarningMessage.IsNotMounted.Title +msgid "Already closed" +msgstr "Wolumin zamknięty" + +#: WarningMessage.IsNotMounted.Text +msgid "The volume is already closed." +msgstr "Wolumin jest już zamknięty." diff --git a/v0.3.4.5/plugins/volume_mount/intl/pt/cryptobox-server-feature-volume_mount.po b/v0.3.4.5/plugins/volume_mount/intl/pt/cryptobox-server-feature-volume_mount.po new file mode 100644 index 0000000..759771d --- /dev/null +++ b/v0.3.4.5/plugins/volume_mount/intl/pt/cryptobox-server-feature-volume_mount.po @@ -0,0 +1,114 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 19:19+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Open and close volumes" +msgstr "" + +#: Link +msgid "Activation" +msgstr "" + +#: Title.Umount +msgid "Deactivation" +msgstr "" + +#: Text.EnterCurrentPassword +msgid "Volume's encryption password" +msgstr "" + +#: Button.Mount +msgid "Open this volume" +msgstr "" + +#: Button.Umount +msgid "Close this volume" +msgstr "" + +#: Help.Open +msgid "This volume is currently closed. If you open the volume, then you will be able to access the data of this volume. Just search in your network environment for the server and browse through its shares. In case the volume is encrypted you have to enter the corresponding password first." +msgstr "" + +#: Help.Close +msgid "This volume is currently open. All files are accessible for everyone who has access to your local network. Just search in your network environment for the server and browse through its shares. Before you close the volume you should quit all programs with open files on it." +msgstr "" + +#: SuccessMessage.MountDone.Title +msgid "Volume opened" +msgstr "" + +#: SuccessMessage.MountDone.Text +msgid "The content of this volume is available now." +msgstr "" + +#: SuccessMessage.UmountDone.Title +msgid "Volume closed" +msgstr "" + +#: SuccessMessage.UmountDone.Text +msgid "The content of this volume is protected from access now." +msgstr "" + +#: WarningMessage.MountFailed.Title +msgid "Opening failed" +msgstr "" + +#: WarningMessage.MountFailed.Text +msgid "The volume could not be opened for some reason. Sorry!" +msgstr "" + +#: WarningMessage.MountFailed.Link.Text +msgid "View event log" +msgstr "" + +#: WarningMessage.MountCryptoFailed.Text +msgid "Maybe you entered a wrong password?" +msgstr "" + +#: WarningMessage.InvalidContainerType.Title +msgid "Unknown format" +msgstr "" + +#: WarningMessage.InvalidContainerType.Text +msgid "The type of this volume ist not known. Maybe you want to initialize it first?" +msgstr "" + +#: WarningMessage.InvalidContainerType.Link.Text +msgid "Format volume" +msgstr "" + +#: WarningMessage.UmountFailed.Title +msgid "Closing failed" +msgstr "" + +#: WarningMessage.UmountFailed.Text +msgid "The volume could not be closed. Probably some files are still in use." +msgstr "" + +#: WarningMessage.IsAlreadyMounted.Title +msgid "Already open" +msgstr "" + +#: WarningMessage.IsAlreadyMounted.Text +msgid "The volume is already open." +msgstr "" + +#: WarningMessage.IsNotMounted.Title +msgid "Already closed" +msgstr "" + +#: WarningMessage.IsNotMounted.Text +msgid "The volume is already closed." +msgstr "" diff --git a/v0.3.4.5/plugins/volume_mount/intl/ru/cryptobox-server-feature-volume_mount.po b/v0.3.4.5/plugins/volume_mount/intl/ru/cryptobox-server-feature-volume_mount.po new file mode 100644 index 0000000..759771d --- /dev/null +++ b/v0.3.4.5/plugins/volume_mount/intl/ru/cryptobox-server-feature-volume_mount.po @@ -0,0 +1,114 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 19:19+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Open and close volumes" +msgstr "" + +#: Link +msgid "Activation" +msgstr "" + +#: Title.Umount +msgid "Deactivation" +msgstr "" + +#: Text.EnterCurrentPassword +msgid "Volume's encryption password" +msgstr "" + +#: Button.Mount +msgid "Open this volume" +msgstr "" + +#: Button.Umount +msgid "Close this volume" +msgstr "" + +#: Help.Open +msgid "This volume is currently closed. If you open the volume, then you will be able to access the data of this volume. Just search in your network environment for the server and browse through its shares. In case the volume is encrypted you have to enter the corresponding password first." +msgstr "" + +#: Help.Close +msgid "This volume is currently open. All files are accessible for everyone who has access to your local network. Just search in your network environment for the server and browse through its shares. Before you close the volume you should quit all programs with open files on it." +msgstr "" + +#: SuccessMessage.MountDone.Title +msgid "Volume opened" +msgstr "" + +#: SuccessMessage.MountDone.Text +msgid "The content of this volume is available now." +msgstr "" + +#: SuccessMessage.UmountDone.Title +msgid "Volume closed" +msgstr "" + +#: SuccessMessage.UmountDone.Text +msgid "The content of this volume is protected from access now." +msgstr "" + +#: WarningMessage.MountFailed.Title +msgid "Opening failed" +msgstr "" + +#: WarningMessage.MountFailed.Text +msgid "The volume could not be opened for some reason. Sorry!" +msgstr "" + +#: WarningMessage.MountFailed.Link.Text +msgid "View event log" +msgstr "" + +#: WarningMessage.MountCryptoFailed.Text +msgid "Maybe you entered a wrong password?" +msgstr "" + +#: WarningMessage.InvalidContainerType.Title +msgid "Unknown format" +msgstr "" + +#: WarningMessage.InvalidContainerType.Text +msgid "The type of this volume ist not known. Maybe you want to initialize it first?" +msgstr "" + +#: WarningMessage.InvalidContainerType.Link.Text +msgid "Format volume" +msgstr "" + +#: WarningMessage.UmountFailed.Title +msgid "Closing failed" +msgstr "" + +#: WarningMessage.UmountFailed.Text +msgid "The volume could not be closed. Probably some files are still in use." +msgstr "" + +#: WarningMessage.IsAlreadyMounted.Title +msgid "Already open" +msgstr "" + +#: WarningMessage.IsAlreadyMounted.Text +msgid "The volume is already open." +msgstr "" + +#: WarningMessage.IsNotMounted.Title +msgid "Already closed" +msgstr "" + +#: WarningMessage.IsNotMounted.Text +msgid "The volume is already closed." +msgstr "" diff --git a/v0.3.4.5/plugins/volume_mount/intl/sl/cryptobox-server-feature-volume_mount.po b/v0.3.4.5/plugins/volume_mount/intl/sl/cryptobox-server-feature-volume_mount.po new file mode 100644 index 0000000..3afdc24 --- /dev/null +++ b/v0.3.4.5/plugins/volume_mount/intl/sl/cryptobox-server-feature-volume_mount.po @@ -0,0 +1,113 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 19:19+0100\n" +"PO-Revision-Date: 2007-02-06 15:36+0100\n" +"Last-Translator: tenzin \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Open and close volumes" +msgstr "Odpri in Zapri vsebino" + +#: Link +msgid "Activation" +msgstr "Aktiviraj" + +#: Title.Umount +msgid "Deactivation" +msgstr "de-aktiviraj" + +#: Text.EnterCurrentPassword +msgid "Volume's encryption password" +msgstr "Geslo šifriranega nosilca " + +#: Button.Mount +msgid "Open this volume" +msgstr "Odpri nosilec" + +#: Button.Umount +msgid "Close this volume" +msgstr "Zapri nosilec" + +#: Help.Open +msgid "This volume is currently closed. If you open the volume, then you will be able to access the data of this volume. Just search in your network environment for the server and browse through its shares. In case the volume is encrypted you have to enter the corresponding password first." +msgstr "Ta nosilec je trenutno zaprt. Če ga odprete boste imeli dostop do podatkov na nosilcu. Poiščite strežnik v omrežnem okolju. Vkolikor je nosilec šifriran morate najprej vnesti ustrezno geslo." + +#: Help.Close +msgid "This volume is currently open. All files are accessible for everyone who has access to your local network. Just search in your network environment for the server and browse through its shares. Before you close the volume you should quit all programs with open files on it." +msgstr "Vsebina je trenutno odprta. Vsi dokumenti so dosegljivi vsem, ki imajo dostop v vaše lokalno omrežje. V mrežnem okolju poiščite s kom delite podatke. Preden zaprete vsebine morate zapreti vse programe z odprtimi dokumenti." + +#: SuccessMessage.MountDone.Title +msgid "Volume opened" +msgstr "Vsebina odprta" + +#: SuccessMessage.MountDone.Text +msgid "The content of this volume is available now." +msgstr "vsebina tega dela je zdaj na voljo." + +#: SuccessMessage.UmountDone.Title +msgid "Volume closed" +msgstr "Vsebina zaprta" + +#: SuccessMessage.UmountDone.Text +msgid "The content of this volume is protected from access now." +msgstr "Vsebina tega dela je zdaj zaščitena pred vstopom." + +#: WarningMessage.MountFailed.Title +msgid "Opening failed" +msgstr "Odpiranje ni uspelo" + +#: WarningMessage.MountFailed.Text +msgid "The volume could not be opened for some reason. Sorry!" +msgstr "Ta vsebina zaradi (ne)znanega razloga ne morem odpreti - Oprosti!" + +#: WarningMessage.MountFailed.Link.Text +msgid "View event log" +msgstr "Preglej dnevnik dogodkov" + +#: WarningMessage.MountCryptoFailed.Text +msgid "Maybe you entered a wrong password?" +msgstr "Morda ste vnesli napačno geslo?" + +#: WarningMessage.InvalidContainerType.Title +msgid "Unknown format" +msgstr "Neznan format" + +#: WarningMessage.InvalidContainerType.Text +msgid "The type of this volume ist not known. Maybe you want to initialize it first?" +msgstr "Tip te vsebine ni znan. Morda želite zadevo najprej inicializirati?" + +#: WarningMessage.InvalidContainerType.Link.Text +msgid "Format volume" +msgstr "Format vsebine" + +#: WarningMessage.UmountFailed.Title +msgid "Closing failed" +msgstr "Zapiranje ni uspelo" + +#: WarningMessage.UmountFailed.Text +msgid "The volume could not be closed. Probably some files are still in use." +msgstr "Te vsebine ne morem zapreti. Verjetno je katera od datotek še vedno v rabi." + +#: WarningMessage.IsAlreadyMounted.Title +msgid "Already open" +msgstr "Že odprto " + +#: WarningMessage.IsAlreadyMounted.Text +msgid "The volume is already open." +msgstr "Ta vsebina je že odprta" + +#: WarningMessage.IsNotMounted.Title +msgid "Already closed" +msgstr "Že zaprto" + +#: WarningMessage.IsNotMounted.Text +msgid "The volume is already closed." +msgstr "Ta vsebina je že zaprta" diff --git a/v0.3.4.5/plugins/volume_mount/intl/sv/cryptobox-server-feature-volume_mount.po b/v0.3.4.5/plugins/volume_mount/intl/sv/cryptobox-server-feature-volume_mount.po new file mode 100644 index 0000000..759771d --- /dev/null +++ b/v0.3.4.5/plugins/volume_mount/intl/sv/cryptobox-server-feature-volume_mount.po @@ -0,0 +1,114 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-03 19:19+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Open and close volumes" +msgstr "" + +#: Link +msgid "Activation" +msgstr "" + +#: Title.Umount +msgid "Deactivation" +msgstr "" + +#: Text.EnterCurrentPassword +msgid "Volume's encryption password" +msgstr "" + +#: Button.Mount +msgid "Open this volume" +msgstr "" + +#: Button.Umount +msgid "Close this volume" +msgstr "" + +#: Help.Open +msgid "This volume is currently closed. If you open the volume, then you will be able to access the data of this volume. Just search in your network environment for the server and browse through its shares. In case the volume is encrypted you have to enter the corresponding password first." +msgstr "" + +#: Help.Close +msgid "This volume is currently open. All files are accessible for everyone who has access to your local network. Just search in your network environment for the server and browse through its shares. Before you close the volume you should quit all programs with open files on it." +msgstr "" + +#: SuccessMessage.MountDone.Title +msgid "Volume opened" +msgstr "" + +#: SuccessMessage.MountDone.Text +msgid "The content of this volume is available now." +msgstr "" + +#: SuccessMessage.UmountDone.Title +msgid "Volume closed" +msgstr "" + +#: SuccessMessage.UmountDone.Text +msgid "The content of this volume is protected from access now." +msgstr "" + +#: WarningMessage.MountFailed.Title +msgid "Opening failed" +msgstr "" + +#: WarningMessage.MountFailed.Text +msgid "The volume could not be opened for some reason. Sorry!" +msgstr "" + +#: WarningMessage.MountFailed.Link.Text +msgid "View event log" +msgstr "" + +#: WarningMessage.MountCryptoFailed.Text +msgid "Maybe you entered a wrong password?" +msgstr "" + +#: WarningMessage.InvalidContainerType.Title +msgid "Unknown format" +msgstr "" + +#: WarningMessage.InvalidContainerType.Text +msgid "The type of this volume ist not known. Maybe you want to initialize it first?" +msgstr "" + +#: WarningMessage.InvalidContainerType.Link.Text +msgid "Format volume" +msgstr "" + +#: WarningMessage.UmountFailed.Title +msgid "Closing failed" +msgstr "" + +#: WarningMessage.UmountFailed.Text +msgid "The volume could not be closed. Probably some files are still in use." +msgstr "" + +#: WarningMessage.IsAlreadyMounted.Title +msgid "Already open" +msgstr "" + +#: WarningMessage.IsAlreadyMounted.Text +msgid "The volume is already open." +msgstr "" + +#: WarningMessage.IsNotMounted.Title +msgid "Already closed" +msgstr "" + +#: WarningMessage.IsNotMounted.Text +msgid "The volume is already closed." +msgstr "" diff --git a/v0.3.4.5/plugins/volume_mount/intl/ur/cryptobox-server-feature-volume_mount.po b/v0.3.4.5/plugins/volume_mount/intl/ur/cryptobox-server-feature-volume_mount.po new file mode 100644 index 0000000..8eb71ea --- /dev/null +++ b/v0.3.4.5/plugins/volume_mount/intl/ur/cryptobox-server-feature-volume_mount.po @@ -0,0 +1,114 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-02-05 23:27+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Open and close volumes" +msgstr "" + +#: Link +msgid "Activation" +msgstr "" + +#: Title.Umount +msgid "Deactivation" +msgstr "" + +#: Text.EnterCurrentPassword +msgid "Volume's encryption password" +msgstr "" + +#: Button.Mount +msgid "Open this volume" +msgstr "" + +#: Button.Umount +msgid "Close this volume" +msgstr "" + +#: Help.Open +msgid "This volume is currently closed. If you open the volume, then you will be able to access the data of this volume. Just search in your network environment for the server and browse through its shares. In case the volume is encrypted you have to enter the corresponding password first." +msgstr "" + +#: Help.Close +msgid "This volume is currently open. All files are accessible for everyone who has access to your local network. Just search in your network environment for the server and browse through its shares. Before you close the volume you should quit all programs with open files on it." +msgstr "" + +#: SuccessMessage.MountDone.Title +msgid "Volume opened" +msgstr "" + +#: SuccessMessage.MountDone.Text +msgid "The content of this volume is available now." +msgstr "" + +#: SuccessMessage.UmountDone.Title +msgid "Volume closed" +msgstr "" + +#: SuccessMessage.UmountDone.Text +msgid "The content of this volume is protected from access now." +msgstr "" + +#: WarningMessage.MountFailed.Title +msgid "Opening failed" +msgstr "" + +#: WarningMessage.MountFailed.Text +msgid "The volume could not be opened for some reason. Sorry!" +msgstr "" + +#: WarningMessage.MountFailed.Link.Text +msgid "View event log" +msgstr "" + +#: WarningMessage.MountCryptoFailed.Text +msgid "Maybe you entered a wrong password?" +msgstr "" + +#: WarningMessage.InvalidContainerType.Title +msgid "Unknown format" +msgstr "" + +#: WarningMessage.InvalidContainerType.Text +msgid "The type of this volume ist not known. Maybe you want to initialize it first?" +msgstr "" + +#: WarningMessage.InvalidContainerType.Link.Text +msgid "Format volume" +msgstr "" + +#: WarningMessage.UmountFailed.Title +msgid "Closing failed" +msgstr "" + +#: WarningMessage.UmountFailed.Text +msgid "The volume could not be closed. Probably some files are still in use." +msgstr "" + +#: WarningMessage.IsAlreadyMounted.Title +msgid "Already open" +msgstr "" + +#: WarningMessage.IsAlreadyMounted.Text +msgid "The volume is already open." +msgstr "" + +#: WarningMessage.IsNotMounted.Title +msgid "Already closed" +msgstr "" + +#: WarningMessage.IsNotMounted.Text +msgid "The volume is already closed." +msgstr "" diff --git a/v0.3.4.5/plugins/volume_mount/language.hdf b/v0.3.4.5/plugins/volume_mount/language.hdf new file mode 100644 index 0000000..14e3387 --- /dev/null +++ b/v0.3.4.5/plugins/volume_mount/language.hdf @@ -0,0 +1,76 @@ +Name = Open and close volumes +Link = Activation + + +Title { + Mount = Activation + Umount = Deactivation +} + +Text { + EnterCurrentPassword = Volume's encryption password +} + +Button { + Mount = Open this volume + Umount = Close this volume +} + + +Help { + Open = This volume is currently closed. If you open the volume, then you will be able to access the data of this volume. Just search in your network environment for the server and browse through its shares. In case the volume is encrypted you have to enter the corresponding password first. + Close = This volume is currently open. All files are accessible for everyone who has access to your local network. Just search in your network environment for the server and browse through its shares. Before you close the volume you should quit all programs with open files on it. +} + + +SuccessMessage { + MountDone { + Title = Volume opened + Text = The content of this volume is available now. + } + + UmountDone { + Title = Volume closed + Text = The content of this volume is protected from access now. + } +} + + +WarningMessage { + MountFailed { + Title = Opening failed + Text = The volume could not be opened for some reason. Sorry! + Link.Text = View event log + Link.Rel = logs + Link.Attr1.name = level + Link.Attr1.value = ERROR + } + + MountCryptoFailed { + Title = Opening failed + Text = Maybe you entered a wrong password? + } + + InvalidContainerType { + Title = Unknown format + Text = The type of this volume ist not known. Maybe you want to initialize it first? + Link.Text = Format volume + Link.Rel = volume_format_fs + } + + UmountFailed { + Title = Closing failed + Text = The volume could not be closed. Probably some files are still in use. + } + + IsAlreadyMounted { + Title = Already open + Text = The volume is already open. + } + + IsNotMounted { + Title = Already closed + Text = The volume is already closed. + } + +} diff --git a/v0.3.4.5/plugins/volume_mount/plugin_icon.gif b/v0.3.4.5/plugins/volume_mount/plugin_icon.gif new file mode 100644 index 0000000000000000000000000000000000000000..bec3e7fa3069d8fd9f2373cd1f37a9de3304c063 GIT binary patch literal 1400 zcmeH`c{Ae&0ET}dY#cj8s&4xuOwHCznd$0c+z}f`M!Qy)%^I=QVpu|G>WD-VEJ7S{ zUy(TDiu-7hM2I_y`(B-$U1yIO?ea&dev1Cn=M%j1%=`FY(2pGnAOHd%vH&z1jlp1i zeSQ7>{QUj>u~=+SP*8AiFb;cEYGMSv3nwplDmY$xTk&!{6P%<+!sZ=VBM$5{|qSNUN27}3DW@l&T^qpn%0<6&4m26&11B?Be3$l9H0r($ccBG7g7RUS3{NQBhf0Syfe4 zU0q#MQ&U@8TUS?CUtizQ(9qb}$mMdInwoe#9-q%|ZfRsU0vPX-90@$y}i9cp|G#7ufM;4U|?WyaByg7Xn1&dWMpJ?baZTNYGCe&ll}cx3W@cw+Wir{^+}!;9{KCS*;^N}c($ezs^2*AJTrO8A z6iTIXb#--ZZEbyhePd%|b8~ZRYioOZduL~7cXxMhZ*PBp|KQ-@@bK{H=;-+P_~hi| z^z`)X?Ckvf{PutTBLfyU`d*2V1XAR;;1AKHC@?5067<0Y1OgV

3dQ3)lj8{2L1Z zy8&)BOrP{Nis&%JL%gh)E6LGCI`9L(FEV!_|GHL%xQ8`yh*_?*K(zS5vR}8rLX6(| z=$Ji@S)?9Ccxxi8un8e;)RlRTd+NE2Kt~rC*ap?wSg1e|TAHPdYoqCVMW$ax$*775 zHBAK4lN`=PS(qbjUy92xtM4`REL}-*J8OtoE0LmZ7J3<_Yz}aVl?C$D#9usn9xCnN z2ynd-j!}2#ofE14sGKNp?EfxrnD`;W@NWst!{ilJ(>mspcBLND9ky&|OxG}1-?xH) z^XDnc_{BKo{+UPOg#xXu8w<{O5$8(n@gw0P&$}H~DC+Nx;~x_#udlK0cK!9%40 zr-MV~e*6t{3APEbX3kd^d)p0%g&9tyMf)66BI$C*gluQWen5r(@|Lda3X?GqHv}$| za;2D6Q5`Mz{`5KiYc>6+PaskR_Ddl{4+9cVaFn(MRM+iF?xllGun9DI;9xJ&e)03$ zEG^qkwz=kKmEkI}mLr>DR>1L1aSTbwv1pa literal 0 HcmV?d00001 diff --git a/v0.3.4.5/plugins/volume_mount/plugin_icon.png b/v0.3.4.5/plugins/volume_mount/plugin_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..c69537b704e3f98f8d801eb21b5c9a019994a810 GIT binary patch literal 984 zcmV;}11J26P) zK~z}7?N`rBBS{qgs;d%{*v9B8LIwrLjG!wHBDn}zgk{+U@gS1jIn4|M;%ON6G*|rx z<}m-koR+28+c0-?oKr;namZm?#n3E9BWWGeT~%|K>88`Ej&Xj#!pwuF-g}kQ_w{?P zUR49%D&fV0(M}=grN{sY<1Sv$Heb9|Y%|cQsN< zQ79BL<#PEEfR|w`O+}!$xA#eZe}4;jn1H9>G+tj{qgJbtiHV6nRajJ!`~KC{)mKtV z?fm?_4LqEJZb)2RU1559I^(+ToBjR$la3LPQa+fQo1;fZN0H#SB~z=_kW40JB9U0X zF$K9??rF2xgzLJW6#6JKhlhtGpU*!m7K?f$ft8h&simc*A5GKzBBA$mDJ81aD#pjh znGoXlNCL4~>~S`m#p&tk7YV&L2LP_?qF%3)Y&QE$S%iy=i)?v$`JcYNzPMNYw++2& zE+~%UAeYOH#N%;eZ*T9vmIw?E4*t5Zu%I6wA4i7%wh;*vxVX4LDwUE_%C)veG%_;s zw9#l_cX!wCdfkj3km^y1X_{nqc6OZ*^4u_tCi_@?KNJduU#itAhK7cef8?CQahw|) zf3w+aA*WhrbaXUPE|*sT{LKJ>Qu{H%*@PuIHgGIITf_S3wyR|RO!iNQkF`k zKYRj0h&$=gk@PY$TnC^pJJEb$z%IEy@^!X_{>fiUA;w<0QfhSeA9`{C2V_r5GCD>>*O(e?h<~KpHZ5sy%2mT!AoB_}o0D5_O`LAi3WO8ycvi){yx#8Rf z?}VPM>$(qKuh(7Mw)X%~2H@S+*4FEuo}PP*vHMa=tgbzk9t%3mA*sx_fN6^oxBHVM$inp&=5rc0000 finish_time): + self.fail("timeout for plain formatting expired") + time.sleep(5) + + + def __is_device_busy(self): + """Check if the device is busy. + """ + url = self.url + "volume_format_fs?weblang=en&device=" + self.device_html + self.register_auth(url) + self.cmd.go(url) + try: + self.cmd.find("Disk is busy") + return True + except twill.errors.TwillAssertionError: + return False + diff --git a/v0.3.4.5/plugins/volume_mount/volume_mount.cs b/v0.3.4.5/plugins/volume_mount/volume_mount.cs new file mode 100644 index 0000000..538ab7d --- /dev/null +++ b/v0.3.4.5/plugins/volume_mount/volume_mount.cs @@ -0,0 +1,38 @@ + + + + + +

+ + + + + + + + + + + + + +
+ + + + + + + + + + + + +
+ +
+ diff --git a/v0.3.4.5/plugins/volume_mount/volume_mount.py b/v0.3.4.5/plugins/volume_mount/volume_mount.py new file mode 100644 index 0000000..12f89c5 --- /dev/null +++ b/v0.3.4.5/plugins/volume_mount/volume_mount.py @@ -0,0 +1,135 @@ +# +# Copyright 2006 sense.lab e.V. +# +# This file is part of the CryptoBox. +# +# The CryptoBox 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 CryptoBox 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 the CryptoBox; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +__revision__ = "$Id" + +import cryptobox.plugins.base +from cryptobox.core.exceptions import * +import cryptobox.core.container as cbxContainer + + +class volume_mount(cryptobox.plugins.base.CryptoBoxPlugin): + + plugin_capabilities = [ "volume" ] + plugin_visibility = [ "volume" ] + request_auth = False + rank = 0 + + + def do_action(self, action=None, pw=None): + self.hdf[self.hdf_prefix + "PluginDir"] = self.plugin_dir + self.container = self.cbox.get_container(self.device) + if action == "mount_plain": + return self.__do_mount_plain() + elif action == "mount_luks": + return self.__do_mount_luks(pw) + elif action == "umount": + return self.__do_umount() + elif not action: + return "volume_status" + else: + self.cbox.log.info("plugin 'volume_mount' - unknown action: %s" % action) + return "volume_status" + + + def get_status(self): + container = self.cbox.get_container(self.device) + if not self.container: + return "invalid device" + if container.is_mounted(): + return "active" + else: + return "passive" + + + def __do_mount_plain(self): + if self.container.is_mounted(): + self.hdf["Data.Warning"] = "Plugins.volume_mount.IsAlreadyMounted" + self.cbox.log.info("the device (%s) is already mounted" % self.device) + return "volume_status" + if self.container.get_type() != cbxContainer.CONTAINERTYPES["plain"]: + ## not a plain container + self.cbox.log.info("plugin 'volume_mount' - invalid container type") + self.hdf["Data.Warning"] = "Plugins.volume_mount.InvalidContainerType" + return "volume_status" + try: + self.container.mount() + except CBMountError, err_msg: + self.hdf["Data.Warning"] = "Plugins.volume_mount.MountFailed" + self.cbox.log.warn("failed to mount the device (%s): %s" \ + % (self.device, err_msg)) + return "volume_status" + except CBContainerError, err_msg: + self.hdf["Data.Warning"] = "Plugins.volume_mount.MountFailed" + self.cbox.log.warn("failed to mount the device (%s): %s" \ + % (self.device, err_msg)) + return "volume_status" + self.cbox.log.info("successfully mounted the volume: %s" % self.device) + self.hdf["Data.Success"] = "Plugins.volume_mount.MountDone" + return "volume_status" + + + def __do_mount_luks(self, pw): + if self.container.get_type() != cbxContainer.CONTAINERTYPES["luks"]: + ## not a luks container - fail silently + self.cbox.log.info("plugin 'volume_mount' - invalid container type") + return "volume_status" + if self.container.is_mounted(): + self.hdf["Data.Warning"] = "Plugins.volume_mount.IsAlreadyMounted" + self.cbox.log.info("the device (%s) is already mounted" % self.device) + return "volume_status" + if not pw: + self.hdf["Data.Warning"] = "EmptyPassword" + self.cbox.log.info("no password was supplied for mounting of device: '%s'" \ + % self.device) + return "volume_status" + try: + self.container.mount(pw) + except CBMountError, err_msg: + self.hdf["Data.Warning"] = "Plugins.volume_mount.MountCryptoFailed" + self.cbox.log.warn("failed to mount the device (%s): %s" \ + % (self.device, err_msg)) + return "volume_status" + except CBContainerError, err_msg: + self.hdf["Data.Warning"] = "Plugins.volume_mount.MountCryptoFailed" + self.cbox.log.warn("failed to mount the device (%s): %s" \ + % (self.device, err_msg)) + return "volume_status" + self.cbox.log.info("successfully mounted the volume: %s" % self.device) + self.hdf["Data.Success"] = "Plugins.volume_mount.MountDone" + return "volume_status" + + + def __do_umount(self): + if not self.container.is_mounted(): + self.hdf["Data.Warning"] = "Plugins.volume_mount.IsNotMounted" + self.cbox.log.info("the device (%s) is currently not mounted" % self.device) + return "volume_status" + try: + self.container.umount() + except CBUmountError, err_msg: + self.hdf["Data.Warning"] = "UmountFailed" + self.cbox.log.warn("could not umount the volume (%s): %s" \ + % (self.device, err_msg)) + return "volume_status" + self.cbox.log.info("successfully unmounted the container: %s" % self.device) + self.hdf["Data.Success"] = "Plugins.volume_mount.UmountDone" + return "volume_status" + diff --git a/v0.3.4.5/plugins/volume_mount/volume_status.cs b/v0.3.4.5/plugins/volume_mount/volume_status.cs new file mode 100644 index 0000000..6c0175d --- /dev/null +++ b/v0.3.4.5/plugins/volume_mount/volume_status.cs @@ -0,0 +1,6 @@ + + + + + + diff --git a/v0.3.4.5/plugins/volume_mount/volume_umount.cs b/v0.3.4.5/plugins/volume_mount/volume_umount.cs new file mode 100644 index 0000000..4d65c76 --- /dev/null +++ b/v0.3.4.5/plugins/volume_mount/volume_umount.cs @@ -0,0 +1,18 @@ + + + + +
+ + + + + +
+ + + +
+ +
+ diff --git a/v0.3.4.5/plugins/volume_props/intl/cryptobox-server-feature-volume_props.pot b/v0.3.4.5/plugins/volume_props/intl/cryptobox-server-feature-volume_props.pot new file mode 100644 index 0000000..be90498 --- /dev/null +++ b/v0.3.4.5/plugins/volume_props/intl/cryptobox-server-feature-volume_props.pot @@ -0,0 +1,11 @@ +#: Name +msgid "Volume properties" +msgstr "" + +#: Link +msgid "Properties" +msgstr "" + +#: AdviceMessage.NoPropertyPlugins.Text +msgid "No volume property plugins are available." +msgstr "" diff --git a/v0.3.4.5/plugins/volume_props/intl/cs/cryptobox-server-feature-volume_props.po b/v0.3.4.5/plugins/volume_props/intl/cs/cryptobox-server-feature-volume_props.po new file mode 100644 index 0000000..394dbd5 --- /dev/null +++ b/v0.3.4.5/plugins/volume_props/intl/cs/cryptobox-server-feature-volume_props.po @@ -0,0 +1,26 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-12-18 11:40+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Volume properties" +msgstr "" + +#: Link +msgid "Properties" +msgstr "" + +#: AdviceMessage.NoPropertyPlugins.Text +msgid "No volume property plugins are available." +msgstr "" diff --git a/v0.3.4.5/plugins/volume_props/intl/da/cryptobox-server-feature-volume_props.po b/v0.3.4.5/plugins/volume_props/intl/da/cryptobox-server-feature-volume_props.po new file mode 100644 index 0000000..394dbd5 --- /dev/null +++ b/v0.3.4.5/plugins/volume_props/intl/da/cryptobox-server-feature-volume_props.po @@ -0,0 +1,26 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-12-18 11:40+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Volume properties" +msgstr "" + +#: Link +msgid "Properties" +msgstr "" + +#: AdviceMessage.NoPropertyPlugins.Text +msgid "No volume property plugins are available." +msgstr "" diff --git a/v0.3.4.5/plugins/volume_props/intl/de/cryptobox-server-feature-volume_props.po b/v0.3.4.5/plugins/volume_props/intl/de/cryptobox-server-feature-volume_props.po new file mode 100644 index 0000000..14c5c5f --- /dev/null +++ b/v0.3.4.5/plugins/volume_props/intl/de/cryptobox-server-feature-volume_props.po @@ -0,0 +1,25 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-12-18 11:40+0100\n" +"PO-Revision-Date: 2006-12-14 03:56+0100\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Volume properties" +msgstr "Datenträgereigenschaften" + +#: Link +msgid "Properties" +msgstr "Eigenschaften" + +#: AdviceMessage.NoPropertyPlugins.Text +msgid "No volume property plugins are available." +msgstr "Es sind keine Datenträger-Erweiterungen verfügbar." diff --git a/v0.3.4.5/plugins/volume_props/intl/en/cryptobox-server-feature-volume_props.po b/v0.3.4.5/plugins/volume_props/intl/en/cryptobox-server-feature-volume_props.po new file mode 100644 index 0000000..65f7204 --- /dev/null +++ b/v0.3.4.5/plugins/volume_props/intl/en/cryptobox-server-feature-volume_props.po @@ -0,0 +1,11 @@ +#: Name +msgid "Volume properties" +msgstr "Volume properties" + +#: Link +msgid "Properties" +msgstr "Properties" + +#: AdviceMessage.NoPropertyPlugins.Text +msgid "No volume property plugins are available." +msgstr "No volume property plugins are available." diff --git a/v0.3.4.5/plugins/volume_props/intl/es/cryptobox-server-feature-volume_props.po b/v0.3.4.5/plugins/volume_props/intl/es/cryptobox-server-feature-volume_props.po new file mode 100644 index 0000000..394dbd5 --- /dev/null +++ b/v0.3.4.5/plugins/volume_props/intl/es/cryptobox-server-feature-volume_props.po @@ -0,0 +1,26 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-12-18 11:40+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Volume properties" +msgstr "" + +#: Link +msgid "Properties" +msgstr "" + +#: AdviceMessage.NoPropertyPlugins.Text +msgid "No volume property plugins are available." +msgstr "" diff --git a/v0.3.4.5/plugins/volume_props/intl/fi/cryptobox-server-feature-volume_props.po b/v0.3.4.5/plugins/volume_props/intl/fi/cryptobox-server-feature-volume_props.po new file mode 100644 index 0000000..394dbd5 --- /dev/null +++ b/v0.3.4.5/plugins/volume_props/intl/fi/cryptobox-server-feature-volume_props.po @@ -0,0 +1,26 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-12-18 11:40+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Volume properties" +msgstr "" + +#: Link +msgid "Properties" +msgstr "" + +#: AdviceMessage.NoPropertyPlugins.Text +msgid "No volume property plugins are available." +msgstr "" diff --git a/v0.3.4.5/plugins/volume_props/intl/fr/cryptobox-server-feature-volume_props.po b/v0.3.4.5/plugins/volume_props/intl/fr/cryptobox-server-feature-volume_props.po new file mode 100644 index 0000000..394dbd5 --- /dev/null +++ b/v0.3.4.5/plugins/volume_props/intl/fr/cryptobox-server-feature-volume_props.po @@ -0,0 +1,26 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-12-18 11:40+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Volume properties" +msgstr "" + +#: Link +msgid "Properties" +msgstr "" + +#: AdviceMessage.NoPropertyPlugins.Text +msgid "No volume property plugins are available." +msgstr "" diff --git a/v0.3.4.5/plugins/volume_props/intl/hu/cryptobox-server-feature-volume_props.po b/v0.3.4.5/plugins/volume_props/intl/hu/cryptobox-server-feature-volume_props.po new file mode 100644 index 0000000..394dbd5 --- /dev/null +++ b/v0.3.4.5/plugins/volume_props/intl/hu/cryptobox-server-feature-volume_props.po @@ -0,0 +1,26 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-12-18 11:40+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Volume properties" +msgstr "" + +#: Link +msgid "Properties" +msgstr "" + +#: AdviceMessage.NoPropertyPlugins.Text +msgid "No volume property plugins are available." +msgstr "" diff --git a/v0.3.4.5/plugins/volume_props/intl/it/cryptobox-server-feature-volume_props.po b/v0.3.4.5/plugins/volume_props/intl/it/cryptobox-server-feature-volume_props.po new file mode 100644 index 0000000..178f291 --- /dev/null +++ b/v0.3.4.5/plugins/volume_props/intl/it/cryptobox-server-feature-volume_props.po @@ -0,0 +1,25 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-12-18 11:40+0100\n" +"PO-Revision-Date: 2007-02-22 15:10+0100\n" +"Last-Translator: Fabrizio Tarizzo \n" +"Language-Team: Italian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Volume properties" +msgstr "Proprietà del volume" + +#: Link +msgid "Properties" +msgstr "Proprietà" + +#: AdviceMessage.NoPropertyPlugins.Text +msgid "No volume property plugins are available." +msgstr "Non è disponibile alcun plugin per le proprietà del volume." diff --git a/v0.3.4.5/plugins/volume_props/intl/ja/cryptobox-server-feature-volume_props.po b/v0.3.4.5/plugins/volume_props/intl/ja/cryptobox-server-feature-volume_props.po new file mode 100644 index 0000000..cd697e0 --- /dev/null +++ b/v0.3.4.5/plugins/volume_props/intl/ja/cryptobox-server-feature-volume_props.po @@ -0,0 +1,25 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-12-18 11:40+0100\n" +"PO-Revision-Date: 2007-02-23 11:34+0100\n" +"Last-Translator: kinneko \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Volume properties" +msgstr "ボリューム属性" + +#: Link +msgid "Properties" +msgstr "属性" + +#: AdviceMessage.NoPropertyPlugins.Text +msgid "No volume property plugins are available." +msgstr "ボリューム属性のプラグインがありません" diff --git a/v0.3.4.5/plugins/volume_props/intl/nl/cryptobox-server-feature-volume_props.po b/v0.3.4.5/plugins/volume_props/intl/nl/cryptobox-server-feature-volume_props.po new file mode 100644 index 0000000..394dbd5 --- /dev/null +++ b/v0.3.4.5/plugins/volume_props/intl/nl/cryptobox-server-feature-volume_props.po @@ -0,0 +1,26 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-12-18 11:40+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Volume properties" +msgstr "" + +#: Link +msgid "Properties" +msgstr "" + +#: AdviceMessage.NoPropertyPlugins.Text +msgid "No volume property plugins are available." +msgstr "" diff --git a/v0.3.4.5/plugins/volume_props/intl/pl/cryptobox-server-feature-volume_props.po b/v0.3.4.5/plugins/volume_props/intl/pl/cryptobox-server-feature-volume_props.po new file mode 100644 index 0000000..86a6a3a --- /dev/null +++ b/v0.3.4.5/plugins/volume_props/intl/pl/cryptobox-server-feature-volume_props.po @@ -0,0 +1,25 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-04-01 15:54+0200\n" +"PO-Revision-Date: 2007-03-29 20:43+0200\n" +"Last-Translator: Andrzej S. Kaznowski \n" +"Language-Team: POLSKI \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Volume properties" +msgstr "Właściwości woluminu" + +#: Link +msgid "Properties" +msgstr "Właściwości" + +#: AdviceMessage.NoPropertyPlugins.Text +msgid "No volume property plugins are available." +msgstr "Brak wtyczek dla właściwości woluminu." diff --git a/v0.3.4.5/plugins/volume_props/intl/pt/cryptobox-server-feature-volume_props.po b/v0.3.4.5/plugins/volume_props/intl/pt/cryptobox-server-feature-volume_props.po new file mode 100644 index 0000000..394dbd5 --- /dev/null +++ b/v0.3.4.5/plugins/volume_props/intl/pt/cryptobox-server-feature-volume_props.po @@ -0,0 +1,26 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-12-18 11:40+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Volume properties" +msgstr "" + +#: Link +msgid "Properties" +msgstr "" + +#: AdviceMessage.NoPropertyPlugins.Text +msgid "No volume property plugins are available." +msgstr "" diff --git a/v0.3.4.5/plugins/volume_props/intl/ru/cryptobox-server-feature-volume_props.po b/v0.3.4.5/plugins/volume_props/intl/ru/cryptobox-server-feature-volume_props.po new file mode 100644 index 0000000..394dbd5 --- /dev/null +++ b/v0.3.4.5/plugins/volume_props/intl/ru/cryptobox-server-feature-volume_props.po @@ -0,0 +1,26 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-12-18 11:40+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Volume properties" +msgstr "" + +#: Link +msgid "Properties" +msgstr "" + +#: AdviceMessage.NoPropertyPlugins.Text +msgid "No volume property plugins are available." +msgstr "" diff --git a/v0.3.4.5/plugins/volume_props/intl/sl/cryptobox-server-feature-volume_props.po b/v0.3.4.5/plugins/volume_props/intl/sl/cryptobox-server-feature-volume_props.po new file mode 100644 index 0000000..609fc2a --- /dev/null +++ b/v0.3.4.5/plugins/volume_props/intl/sl/cryptobox-server-feature-volume_props.po @@ -0,0 +1,25 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-12-18 11:40+0100\n" +"PO-Revision-Date: 2007-01-10 11:37+0100\n" +"Last-Translator: tenzin \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Volume properties" +msgstr "Lastnosti nosilca" + +#: Link +msgid "Properties" +msgstr "Lastnosti" + +#: AdviceMessage.NoPropertyPlugins.Text +msgid "No volume property plugins are available." +msgstr "Nerazpoložljive lastnosti za vtični prevajalnik " diff --git a/v0.3.4.5/plugins/volume_props/intl/sv/cryptobox-server-feature-volume_props.po b/v0.3.4.5/plugins/volume_props/intl/sv/cryptobox-server-feature-volume_props.po new file mode 100644 index 0000000..394dbd5 --- /dev/null +++ b/v0.3.4.5/plugins/volume_props/intl/sv/cryptobox-server-feature-volume_props.po @@ -0,0 +1,26 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2006-12-18 11:40+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Volume properties" +msgstr "" + +#: Link +msgid "Properties" +msgstr "" + +#: AdviceMessage.NoPropertyPlugins.Text +msgid "No volume property plugins are available." +msgstr "" diff --git a/v0.3.4.5/plugins/volume_props/intl/ur/cryptobox-server-feature-volume_props.po b/v0.3.4.5/plugins/volume_props/intl/ur/cryptobox-server-feature-volume_props.po new file mode 100644 index 0000000..378364b --- /dev/null +++ b/v0.3.4.5/plugins/volume_props/intl/ur/cryptobox-server-feature-volume_props.po @@ -0,0 +1,26 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-02-05 23:27+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Volume properties" +msgstr "" + +#: Link +msgid "Properties" +msgstr "" + +#: AdviceMessage.NoPropertyPlugins.Text +msgid "No volume property plugins are available." +msgstr "" diff --git a/v0.3.4.5/plugins/volume_props/language.hdf b/v0.3.4.5/plugins/volume_props/language.hdf new file mode 100644 index 0000000..7dd3a27 --- /dev/null +++ b/v0.3.4.5/plugins/volume_props/language.hdf @@ -0,0 +1,13 @@ +Name = Volume properties +Link = Properties + +Title { + Properties = Properties +} + + +AdviceMessage { + NoPropertyPlugins { + Text = No volume property plugins are available. + } +} diff --git a/v0.3.4.5/plugins/volume_props/plugin_icon.gif b/v0.3.4.5/plugins/volume_props/plugin_icon.gif new file mode 100644 index 0000000000000000000000000000000000000000..ef2cc1b4f7b5eeebda10ef3be94c5026b35db53e GIT binary patch literal 2432 zcmV-`34iuSNk%w1VL$*t0O$Vz7dvkuLU$TPe;r4H6ibUANrNIuiXuvdBuj@TO^7E> zi78KuB2$zuQ;#QDlQ2|~HdlfxT9r9jggRPU6?momo;6DH(rl9V39Lom^5LX zKVOSIVVO2%nmA;jL1c+OWtA~$q&R1sKxCUcX`e%8o;_%#MQETnY_30Qr#Nn^M{1%$ zY^g_Vo;z`^LT{!+ZmUFbs6TYDNO7-7bgN2stxbZDhmV$o zke!W>jA@q1ijJLzk)Cgs!-;qmY!Nm6nr@n5A}| z%8r?)d7sUgnwOBAse7T%lAWr6p~;q>rhTK)oSvJMpRIzU%zmWOo}itOqq~}-s)eS{ zhp5q+rLv-=p`NC$iK^43r=*Ll)u*YZj;`0EtFw}>(x9xls;sG|uC|r2)vT_om$TQd zu&t@Fxu&weudlhQv%9jiv7ETvt+l?Yw!@*g*R-~?ueZOox3sOf#-qF0vAMyoyU4h@ zx3Ij*r@r00y}Gr&#mCQ$;-IQe<`Z*WBOQ+}YCJ?AzVi+}_*W-`v&V@ZR9v-{Ici;@{!q;N#`t%?< z=<4U@>+b36=<4k0+bOF?D6#P@$T^Q@A32S^7QfZ_44%h^Y-}k`1_CX>@2HRA^-&M@dak03rDV0SW;B04x9i002M$KmY&; z{s8|897wRB!Gj1BDqP60p~Hs|BTAe|v7*I`7&B_z$g!hGfmf<<5ff6&$BbAEsbjZJ zT{TTyu3#)vhGP{&?bwl1x6a+TL^3JTyws=WMl5{Vwd2N(+`4s|f<`PuM$|H6kBn;M z@Z?T?cmDI!GoP zmMQe?8M4QGg^|&ku?e-WOx+!;qBxVay~dEKMOKJRM=Z|RaZ@+09XTuv%V5&B44JUo z!gdAg6egn7gj$Zx^SVtb=Y?s4AWJJN{oIr5JnT5bjXn9i14kBR z91;yH!R&IzM_6D147KdGs}4Q=*b~h*`OuRMH~I9#4H$(K8w@U!q67ys@32b`H<$>P zk3ab^l}|k`vhxNe&9D;9E?S;6kYMS;@kP3@!2w4-{mhe%I^8<+MjyZI^2;x8oU3s| zZ{<7BYVAyn%rC+Gf=044GbA#+?>M7}9>ly1b0u#EtM+(XYBdhF`*8>IB(43thE zWWWO)4Ex5;S7SmCyufhXwLk|vz`_n47!X7>JxB9~DqgjdPyRl)sO@wDMM#p2CwaJF zz#F?x+)h31gwswx^rX^s&;}Uc$0)`45(OPB7!U{^r2II~I^57oPbiDdjKB_qSV0Bh zJrvP};bh!1x>)b5LykN4*fYr&T@z439#lASgb+RGpaT$6JOBYC(5~r~SM$)bh+P^Z z;K3lp69EJeJ|hBGuwp{c*N$w=D;w8f ziZt3G4KYvz0S6Gl9rBO|NyK7sHvj7$E|Zl#eS~6b)`rgBshQhBVZ14D2}s z0bkR>ApF1xRQO^Vj;H|yRyl$k7{LNLq}d0PlnrTcLmJM|7B5nl5CR}T21W1#B8;gG zZqNY-5|H5uYVZUN%<&;#kcB#;5e;YT3KOaR-~~BM!Oepl00u@F#3o`f4RMHr3OdLD z1UfK+8W>>&(S!&VQjx1;0K*iCfCMIv5f0!rBmqNE1VOn0k5~|)2O)Uk2U@@c9Tb2f zShxi@UWN&3_yZG_;07eZn2-ew!Vv})2OVgj0~oB51S}ZB1}*Z1TVz8PnD~S<3_*%; zKw=6FLBJiTfQUN?0em=kq6S1@10y`(rA*aDG+coRLukSo+knF_i$I4XfKLZD2muB< zzycaDK?P{N$QO8Vjbj`Gu9)CyLIUsrHdrBf1s+sXcdwG6PRHLH1L25RFDE9xO8m~Ie-b6V1yd1 y76?XIfB=B|5ClBn224nT6M7JV0WcRL1weoT9-sgNEcd$L4X=2|OJ3jx1OPj;3ZYs6 literal 0 HcmV?d00001 diff --git a/v0.3.4.5/plugins/volume_props/plugin_icon.png b/v0.3.4.5/plugins/volume_props/plugin_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..0156714dee587bf8f3d327711a49efbea6855f4e GIT binary patch literal 5570 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 + + + + + + + + + + + + + + diff --git a/v0.3.4.5/plugins/volume_props/volume_props.py b/v0.3.4.5/plugins/volume_props/volume_props.py new file mode 100644 index 0000000..ae0eb5b --- /dev/null +++ b/v0.3.4.5/plugins/volume_props/volume_props.py @@ -0,0 +1,90 @@ +# +# Copyright 2006 sense.lab e.V. +# +# This file is part of the CryptoBox. +# +# The CryptoBox 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 CryptoBox 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 the CryptoBox; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +__revision__ = "$Id" + +import cryptobox.plugins.base +import cryptobox.plugins.manage +from cryptobox.core.exceptions import * + + +class volume_props(cryptobox.plugins.base.CryptoBoxPlugin): + + plugin_capabilities = [ "volume" ] + plugin_visibility = [ "volume" ] + request_auth = False + rank = 30 + + + def do_action(self, **args): + import os + ## include all plugins marked as "properties" + ## skip ourselves to prevent recursion + self.props_plugins = [e for e in cryptobox.plugins.manage.PluginManager(self.cbox, + self.cbox.prefs["Locations"]["PluginDir"]).get_plugins() + if ("properties") in (e.get_visibility()) \ + and (e.get_name() != self.get_name())] + ## sort plugins by rank + self.props_plugins.sort(cmp = self.__cmp_plugins_rank) + ## set the name of the templates for every plugin + load_string = "" + for p in self.props_plugins: + ## skip all volume plugins that are not suitable + ## (e.g. chpasswd for plain containers) + if not p.is_useful(self.device): + continue + p.device = self.device + plfname = os.path.join(p.plugin_dir, str(p.do_action(**args)) + ".cs") + load_string += "" % plfname + ## this is a little bit ugly: as it is not possible, to load cs files via + ## 'linclude' (see clearsilver doc) if they use previously defined macros + ## (see clearsilver mailing list thread + ## 'linclude file which calls a macro' - 27th December 02005) + ## our workaround: define the appropriate "include" (not 'linclude') + ## command as a hdf variable - then we can include it via 'evar' + self.hdf[self.hdf_prefix + 'includePlugins'] = load_string + return "volume_properties" + + + def get_status(self): + return ":".join([ e.get_name() for e in self.props_plugins ]) + + + def load_dataset(self, hdf): + """Override the parent's function + + we have to get the data from all included plugins + """ + for plugin in self.props_plugins: + ## retrieve the results of an included plugin + plugin.load_dataset(hdf) + ## call our parent's method + cryptobox.plugins.base.CryptoBoxPlugin.load_dataset(self, hdf) + + + def __cmp_plugins_rank(self, p1, p2): + order = p1.get_rank() - p2.get_rank() + if order < 0: + return -1 + elif order == 0: + return 0 + else: + return 1 + diff --git a/v0.3.4.5/plugins/volume_rename/intl/cryptobox-server-feature-volume_rename.pot b/v0.3.4.5/plugins/volume_rename/intl/cryptobox-server-feature-volume_rename.pot new file mode 100644 index 0000000..eb2cce9 --- /dev/null +++ b/v0.3.4.5/plugins/volume_rename/intl/cryptobox-server-feature-volume_rename.pot @@ -0,0 +1,59 @@ +#: Name +msgid "Rename volume" +msgstr "" + +#: Link +msgid "Rename" +msgstr "" + +#: Button.ContainerNameSet +msgid "Change name" +msgstr "" + +#: Help.Rename +msgid "Define a name for the volume. This should help you to manage multiple volumes easily. (Only alphanumeric characters are allowed and one of the following: \". _ -\")" +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Text +msgid "You can not rename a volume while it is open." +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Link.Text +msgid "Close volume now" +msgstr "" + +#: SuccessMessage.VolumeNameChanged.Title +msgid "Name changed" +msgstr "" + +#: SuccessMessage.VolumeNameChanged.Text +msgid "The name of this volume was changed successfully." +msgstr "" + +#: WarningMessage.NoRenameIfActive.Title +msgid "Failed to rename the volume" +msgstr "" + +#: WarningMessage.NoRenameIfActive.Text +msgid "You may not rename a volume while it is open." +msgstr "" + +#: WarningMessage.InvalidVolumeName.Title +msgid "Changing of volume's name failed" +msgstr "" + +#: WarningMessage.InvalidVolumeName.Text +msgid "The supplied new name of the volume was invalid. Please try again!" +msgstr "" + +#: WarningMessage.SetVolumeNameFailed.Text +msgid "Could not change the name of the volume. Take a look at the log files for details." +msgstr "" + +#: WarningMessage.VolumeNameIsInUse.Title +msgid "Could not change volume name" +msgstr "" + +#: WarningMessage.VolumeNameIsInUse.Text +msgid "The new name is already in use by another volume." +msgstr "" diff --git a/v0.3.4.5/plugins/volume_rename/intl/cs/cryptobox-server-feature-volume_rename.po b/v0.3.4.5/plugins/volume_rename/intl/cs/cryptobox-server-feature-volume_rename.po new file mode 100644 index 0000000..4df4b3a --- /dev/null +++ b/v0.3.4.5/plugins/volume_rename/intl/cs/cryptobox-server-feature-volume_rename.po @@ -0,0 +1,74 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-10 01:24+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Rename volume" +msgstr "" + +#: Link +msgid "Rename" +msgstr "" + +#: Button.ContainerNameSet +msgid "Change name" +msgstr "" + +#: Help.Rename +msgid "Define a name for the volume. This should help you to manage multiple volumes easily. (Only alphanumeric characters are allowed and one of the following: \". _ -\")" +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Text +msgid "You can not rename a volume while it is open." +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Link.Text +msgid "Close volume now" +msgstr "" + +#: SuccessMessage.VolumeNameChanged.Title +msgid "Name changed" +msgstr "" + +#: SuccessMessage.VolumeNameChanged.Text +msgid "The name of this volume was changed successfully." +msgstr "" + +#: WarningMessage.NoRenameIfActive.Title +msgid "Failed to rename the volume" +msgstr "" + +#: WarningMessage.NoRenameIfActive.Text +msgid "You may not rename a volume while it is open." +msgstr "" + +#: WarningMessage.InvalidVolumeName.Title +msgid "Changing of volume's name failed" +msgstr "" + +#: WarningMessage.InvalidVolumeName.Text +msgid "The supplied new name of the volume was invalid. Please try again!" +msgstr "" + +#: WarningMessage.SetVolumeNameFailed.Text +msgid "Could not change the name of the volume. Take a look at the log files for details." +msgstr "" + +#: WarningMessage.VolumeNameIsInUse.Title +msgid "Could not change volume name" +msgstr "" + +#: WarningMessage.VolumeNameIsInUse.Text +msgid "The new name is already in use by another volume." +msgstr "" diff --git a/v0.3.4.5/plugins/volume_rename/intl/da/cryptobox-server-feature-volume_rename.po b/v0.3.4.5/plugins/volume_rename/intl/da/cryptobox-server-feature-volume_rename.po new file mode 100644 index 0000000..4df4b3a --- /dev/null +++ b/v0.3.4.5/plugins/volume_rename/intl/da/cryptobox-server-feature-volume_rename.po @@ -0,0 +1,74 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-10 01:24+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Rename volume" +msgstr "" + +#: Link +msgid "Rename" +msgstr "" + +#: Button.ContainerNameSet +msgid "Change name" +msgstr "" + +#: Help.Rename +msgid "Define a name for the volume. This should help you to manage multiple volumes easily. (Only alphanumeric characters are allowed and one of the following: \". _ -\")" +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Text +msgid "You can not rename a volume while it is open." +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Link.Text +msgid "Close volume now" +msgstr "" + +#: SuccessMessage.VolumeNameChanged.Title +msgid "Name changed" +msgstr "" + +#: SuccessMessage.VolumeNameChanged.Text +msgid "The name of this volume was changed successfully." +msgstr "" + +#: WarningMessage.NoRenameIfActive.Title +msgid "Failed to rename the volume" +msgstr "" + +#: WarningMessage.NoRenameIfActive.Text +msgid "You may not rename a volume while it is open." +msgstr "" + +#: WarningMessage.InvalidVolumeName.Title +msgid "Changing of volume's name failed" +msgstr "" + +#: WarningMessage.InvalidVolumeName.Text +msgid "The supplied new name of the volume was invalid. Please try again!" +msgstr "" + +#: WarningMessage.SetVolumeNameFailed.Text +msgid "Could not change the name of the volume. Take a look at the log files for details." +msgstr "" + +#: WarningMessage.VolumeNameIsInUse.Title +msgid "Could not change volume name" +msgstr "" + +#: WarningMessage.VolumeNameIsInUse.Text +msgid "The new name is already in use by another volume." +msgstr "" diff --git a/v0.3.4.5/plugins/volume_rename/intl/de/cryptobox-server-feature-volume_rename.po b/v0.3.4.5/plugins/volume_rename/intl/de/cryptobox-server-feature-volume_rename.po new file mode 100644 index 0000000..81488a5 --- /dev/null +++ b/v0.3.4.5/plugins/volume_rename/intl/de/cryptobox-server-feature-volume_rename.po @@ -0,0 +1,73 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-10 01:24+0100\n" +"PO-Revision-Date: 2007-02-19 02:54+0100\n" +"Last-Translator: Lars Kruse \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Rename volume" +msgstr "Datenträger umbenennen" + +#: Link +msgid "Rename" +msgstr "Umbenennen" + +#: Button.ContainerNameSet +msgid "Change name" +msgstr "Namen ändern" + +#: Help.Rename +msgid "Define a name for the volume. This should help you to manage multiple volumes easily. (Only alphanumeric characters are allowed and one of the following: \". _ -\")" +msgstr "Lege einen Namen für den Datenträger fest. Dies sollte dir helfen, mehrere Datenträger mühelos zu verwalten. (Es sind nur Buchstaben, Ziffern und die folgenden Sonderzeichen erlaubt: \"._-\")" + +#: AdviceMessage.NoRenameIfActive.Text +msgid "You can not rename a volume while it is open." +msgstr "Der Datenträger kann nicht umbenannt werden, solange er geöffnet ist." + +#: AdviceMessage.NoRenameIfActive.Link.Text +msgid "Close volume now" +msgstr "Datenträger schließen" + +#: SuccessMessage.VolumeNameChanged.Title +msgid "Name changed" +msgstr "Name geändert" + +#: SuccessMessage.VolumeNameChanged.Text +msgid "The name of this volume was changed successfully." +msgstr "Der Name des Datenträgers wurde erfolgreich geändert." + +#: WarningMessage.NoRenameIfActive.Title +msgid "Failed to rename the volume" +msgstr "Namensänderung fehlgeschlagen" + +#: WarningMessage.NoRenameIfActive.Text +msgid "You may not rename a volume while it is open." +msgstr "Der Name des Datenträgers kann nicht geändert werden, solange er geöffnet ist." + +#: WarningMessage.InvalidVolumeName.Title +msgid "Changing of volume's name failed" +msgstr "Änderung des Datenträgernamens fehlgeschlagen" + +#: WarningMessage.InvalidVolumeName.Text +msgid "The supplied new name of the volume was invalid. Please try again!" +msgstr "Der angegebene neue Name des Datenträgers ist ungültig. Versuche es bitte erneut!" + +#: WarningMessage.SetVolumeNameFailed.Text +msgid "Could not change the name of the volume. Take a look at the log files for details." +msgstr "Der Name des Datenträgers konnte nicht geändert werden. Im Ereignis-Protokoll solltest du genauere Informationen finden." + +#: WarningMessage.VolumeNameIsInUse.Title +msgid "Could not change volume name" +msgstr "Namensänderung fehlgeschlagen" + +#: WarningMessage.VolumeNameIsInUse.Text +msgid "The new name is already in use by another volume." +msgstr "Der Name wird bereits von einem anderen Datenträger verwendet." diff --git a/v0.3.4.5/plugins/volume_rename/intl/en/cryptobox-server-feature-volume_rename.po b/v0.3.4.5/plugins/volume_rename/intl/en/cryptobox-server-feature-volume_rename.po new file mode 100644 index 0000000..8509402 --- /dev/null +++ b/v0.3.4.5/plugins/volume_rename/intl/en/cryptobox-server-feature-volume_rename.po @@ -0,0 +1,59 @@ +#: Name +msgid "Rename volume" +msgstr "Rename volume" + +#: Link +msgid "Rename" +msgstr "Rename" + +#: Button.ContainerNameSet +msgid "Change name" +msgstr "Change name" + +#: Help.Rename +msgid "Define a name for the volume. This should help you to manage multiple volumes easily. (Only alphanumeric characters are allowed and one of the following: \". _ -\")" +msgstr "Define a name for the volume. This should help you to manage multiple volumes easily. (Only alphanumeric characters are allowed and one of the following: \". _ -\")" + +#: AdviceMessage.NoRenameIfActive.Text +msgid "You can not rename a volume while it is open." +msgstr "You can not rename a volume while it is open." + +#: AdviceMessage.NoRenameIfActive.Link.Text +msgid "Close volume now" +msgstr "Close volume now" + +#: SuccessMessage.VolumeNameChanged.Title +msgid "Name changed" +msgstr "Name changed" + +#: SuccessMessage.VolumeNameChanged.Text +msgid "The name of this volume was changed successfully." +msgstr "The name of this volume was changed successfully." + +#: WarningMessage.NoRenameIfActive.Title +msgid "Failed to rename the volume" +msgstr "Failed to rename the volume" + +#: WarningMessage.NoRenameIfActive.Text +msgid "You may not rename a volume while it is open." +msgstr "You may not rename a volume while it is open." + +#: WarningMessage.InvalidVolumeName.Title +msgid "Changing of volume's name failed" +msgstr "Changing of volume's name failed" + +#: WarningMessage.InvalidVolumeName.Text +msgid "The supplied new name of the volume was invalid. Please try again!" +msgstr "The supplied new name of the volume was invalid. Please try again!" + +#: WarningMessage.SetVolumeNameFailed.Text +msgid "Could not change the name of the volume. Take a look at the log files for details." +msgstr "Could not change the name of the volume. Take a look at the log files for details." + +#: WarningMessage.VolumeNameIsInUse.Title +msgid "Could not change volume name" +msgstr "Could not change volume name" + +#: WarningMessage.VolumeNameIsInUse.Text +msgid "The new name is already in use by another volume." +msgstr "The new name is already in use by another volume." diff --git a/v0.3.4.5/plugins/volume_rename/intl/es/cryptobox-server-feature-volume_rename.po b/v0.3.4.5/plugins/volume_rename/intl/es/cryptobox-server-feature-volume_rename.po new file mode 100644 index 0000000..4df4b3a --- /dev/null +++ b/v0.3.4.5/plugins/volume_rename/intl/es/cryptobox-server-feature-volume_rename.po @@ -0,0 +1,74 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-10 01:24+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Rename volume" +msgstr "" + +#: Link +msgid "Rename" +msgstr "" + +#: Button.ContainerNameSet +msgid "Change name" +msgstr "" + +#: Help.Rename +msgid "Define a name for the volume. This should help you to manage multiple volumes easily. (Only alphanumeric characters are allowed and one of the following: \". _ -\")" +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Text +msgid "You can not rename a volume while it is open." +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Link.Text +msgid "Close volume now" +msgstr "" + +#: SuccessMessage.VolumeNameChanged.Title +msgid "Name changed" +msgstr "" + +#: SuccessMessage.VolumeNameChanged.Text +msgid "The name of this volume was changed successfully." +msgstr "" + +#: WarningMessage.NoRenameIfActive.Title +msgid "Failed to rename the volume" +msgstr "" + +#: WarningMessage.NoRenameIfActive.Text +msgid "You may not rename a volume while it is open." +msgstr "" + +#: WarningMessage.InvalidVolumeName.Title +msgid "Changing of volume's name failed" +msgstr "" + +#: WarningMessage.InvalidVolumeName.Text +msgid "The supplied new name of the volume was invalid. Please try again!" +msgstr "" + +#: WarningMessage.SetVolumeNameFailed.Text +msgid "Could not change the name of the volume. Take a look at the log files for details." +msgstr "" + +#: WarningMessage.VolumeNameIsInUse.Title +msgid "Could not change volume name" +msgstr "" + +#: WarningMessage.VolumeNameIsInUse.Text +msgid "The new name is already in use by another volume." +msgstr "" diff --git a/v0.3.4.5/plugins/volume_rename/intl/fi/cryptobox-server-feature-volume_rename.po b/v0.3.4.5/plugins/volume_rename/intl/fi/cryptobox-server-feature-volume_rename.po new file mode 100644 index 0000000..4df4b3a --- /dev/null +++ b/v0.3.4.5/plugins/volume_rename/intl/fi/cryptobox-server-feature-volume_rename.po @@ -0,0 +1,74 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-10 01:24+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Rename volume" +msgstr "" + +#: Link +msgid "Rename" +msgstr "" + +#: Button.ContainerNameSet +msgid "Change name" +msgstr "" + +#: Help.Rename +msgid "Define a name for the volume. This should help you to manage multiple volumes easily. (Only alphanumeric characters are allowed and one of the following: \". _ -\")" +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Text +msgid "You can not rename a volume while it is open." +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Link.Text +msgid "Close volume now" +msgstr "" + +#: SuccessMessage.VolumeNameChanged.Title +msgid "Name changed" +msgstr "" + +#: SuccessMessage.VolumeNameChanged.Text +msgid "The name of this volume was changed successfully." +msgstr "" + +#: WarningMessage.NoRenameIfActive.Title +msgid "Failed to rename the volume" +msgstr "" + +#: WarningMessage.NoRenameIfActive.Text +msgid "You may not rename a volume while it is open." +msgstr "" + +#: WarningMessage.InvalidVolumeName.Title +msgid "Changing of volume's name failed" +msgstr "" + +#: WarningMessage.InvalidVolumeName.Text +msgid "The supplied new name of the volume was invalid. Please try again!" +msgstr "" + +#: WarningMessage.SetVolumeNameFailed.Text +msgid "Could not change the name of the volume. Take a look at the log files for details." +msgstr "" + +#: WarningMessage.VolumeNameIsInUse.Title +msgid "Could not change volume name" +msgstr "" + +#: WarningMessage.VolumeNameIsInUse.Text +msgid "The new name is already in use by another volume." +msgstr "" diff --git a/v0.3.4.5/plugins/volume_rename/intl/fr/cryptobox-server-feature-volume_rename.po b/v0.3.4.5/plugins/volume_rename/intl/fr/cryptobox-server-feature-volume_rename.po new file mode 100644 index 0000000..4df4b3a --- /dev/null +++ b/v0.3.4.5/plugins/volume_rename/intl/fr/cryptobox-server-feature-volume_rename.po @@ -0,0 +1,74 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-10 01:24+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Rename volume" +msgstr "" + +#: Link +msgid "Rename" +msgstr "" + +#: Button.ContainerNameSet +msgid "Change name" +msgstr "" + +#: Help.Rename +msgid "Define a name for the volume. This should help you to manage multiple volumes easily. (Only alphanumeric characters are allowed and one of the following: \". _ -\")" +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Text +msgid "You can not rename a volume while it is open." +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Link.Text +msgid "Close volume now" +msgstr "" + +#: SuccessMessage.VolumeNameChanged.Title +msgid "Name changed" +msgstr "" + +#: SuccessMessage.VolumeNameChanged.Text +msgid "The name of this volume was changed successfully." +msgstr "" + +#: WarningMessage.NoRenameIfActive.Title +msgid "Failed to rename the volume" +msgstr "" + +#: WarningMessage.NoRenameIfActive.Text +msgid "You may not rename a volume while it is open." +msgstr "" + +#: WarningMessage.InvalidVolumeName.Title +msgid "Changing of volume's name failed" +msgstr "" + +#: WarningMessage.InvalidVolumeName.Text +msgid "The supplied new name of the volume was invalid. Please try again!" +msgstr "" + +#: WarningMessage.SetVolumeNameFailed.Text +msgid "Could not change the name of the volume. Take a look at the log files for details." +msgstr "" + +#: WarningMessage.VolumeNameIsInUse.Title +msgid "Could not change volume name" +msgstr "" + +#: WarningMessage.VolumeNameIsInUse.Text +msgid "The new name is already in use by another volume." +msgstr "" diff --git a/v0.3.4.5/plugins/volume_rename/intl/hu/cryptobox-server-feature-volume_rename.po b/v0.3.4.5/plugins/volume_rename/intl/hu/cryptobox-server-feature-volume_rename.po new file mode 100644 index 0000000..4df4b3a --- /dev/null +++ b/v0.3.4.5/plugins/volume_rename/intl/hu/cryptobox-server-feature-volume_rename.po @@ -0,0 +1,74 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-10 01:24+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Rename volume" +msgstr "" + +#: Link +msgid "Rename" +msgstr "" + +#: Button.ContainerNameSet +msgid "Change name" +msgstr "" + +#: Help.Rename +msgid "Define a name for the volume. This should help you to manage multiple volumes easily. (Only alphanumeric characters are allowed and one of the following: \". _ -\")" +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Text +msgid "You can not rename a volume while it is open." +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Link.Text +msgid "Close volume now" +msgstr "" + +#: SuccessMessage.VolumeNameChanged.Title +msgid "Name changed" +msgstr "" + +#: SuccessMessage.VolumeNameChanged.Text +msgid "The name of this volume was changed successfully." +msgstr "" + +#: WarningMessage.NoRenameIfActive.Title +msgid "Failed to rename the volume" +msgstr "" + +#: WarningMessage.NoRenameIfActive.Text +msgid "You may not rename a volume while it is open." +msgstr "" + +#: WarningMessage.InvalidVolumeName.Title +msgid "Changing of volume's name failed" +msgstr "" + +#: WarningMessage.InvalidVolumeName.Text +msgid "The supplied new name of the volume was invalid. Please try again!" +msgstr "" + +#: WarningMessage.SetVolumeNameFailed.Text +msgid "Could not change the name of the volume. Take a look at the log files for details." +msgstr "" + +#: WarningMessage.VolumeNameIsInUse.Title +msgid "Could not change volume name" +msgstr "" + +#: WarningMessage.VolumeNameIsInUse.Text +msgid "The new name is already in use by another volume." +msgstr "" diff --git a/v0.3.4.5/plugins/volume_rename/intl/it/cryptobox-server-feature-volume_rename.po b/v0.3.4.5/plugins/volume_rename/intl/it/cryptobox-server-feature-volume_rename.po new file mode 100644 index 0000000..df1a63c --- /dev/null +++ b/v0.3.4.5/plugins/volume_rename/intl/it/cryptobox-server-feature-volume_rename.po @@ -0,0 +1,73 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-10 01:24+0100\n" +"PO-Revision-Date: 2007-03-20 10:10+0100\n" +"Last-Translator: Fabrizio Tarizzo \n" +"Language-Team: Italian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Rename volume" +msgstr "Rinomina volume" + +#: Link +msgid "Rename" +msgstr "Rinomina" + +#: Button.ContainerNameSet +msgid "Change name" +msgstr "Modifica nome" + +#: Help.Rename +msgid "Define a name for the volume. This should help you to manage multiple volumes easily. (Only alphanumeric characters are allowed and one of the following: \". _ -\")" +msgstr "Definire un nome per il volume. I nomi aiutano a gestire più facilmente volumi multipli. (Sono ammessi solo caratteri alfanumerici e uno tra i seguente: \". _ -\")." + +#: AdviceMessage.NoRenameIfActive.Text +msgid "You can not rename a volume while it is open." +msgstr "Non è possibile rinominare un volume mentre questo è aperto." + +#: AdviceMessage.NoRenameIfActive.Link.Text +msgid "Close volume now" +msgstr "Chiudi il volume adesso" + +#: SuccessMessage.VolumeNameChanged.Title +msgid "Name changed" +msgstr "Nome modificato" + +#: SuccessMessage.VolumeNameChanged.Text +msgid "The name of this volume was changed successfully." +msgstr "Il nome di questo volume è stato modificato con successo." + +#: WarningMessage.NoRenameIfActive.Title +msgid "Failed to rename the volume" +msgstr "Modifica del nome del volume fallita" + +#: WarningMessage.NoRenameIfActive.Text +msgid "You may not rename a volume while it is open." +msgstr "Non è possibile rinominare un volume mentre questo è aperto." + +#: WarningMessage.InvalidVolumeName.Title +msgid "Changing of volume's name failed" +msgstr "Modifica del nome del volume fallita" + +#: WarningMessage.InvalidVolumeName.Text +msgid "The supplied new name of the volume was invalid. Please try again!" +msgstr "Il nuovo nome assegnato al volume non è valido. Riprovare." + +#: WarningMessage.SetVolumeNameFailed.Text +msgid "Could not change the name of the volume. Take a look at the log files for details." +msgstr "Impossibile modificare il nome del volume. Consultare il registro degli eventi per i detagli." + +#: WarningMessage.VolumeNameIsInUse.Title +msgid "Could not change volume name" +msgstr "Impossibile modificare il nome del volume" + +#: WarningMessage.VolumeNameIsInUse.Text +msgid "The new name is already in use by another volume." +msgstr "Il nuovo nome è già usato da un altro volume." diff --git a/v0.3.4.5/plugins/volume_rename/intl/ja/cryptobox-server-feature-volume_rename.po b/v0.3.4.5/plugins/volume_rename/intl/ja/cryptobox-server-feature-volume_rename.po new file mode 100644 index 0000000..efec2ce --- /dev/null +++ b/v0.3.4.5/plugins/volume_rename/intl/ja/cryptobox-server-feature-volume_rename.po @@ -0,0 +1,73 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-10 01:24+0100\n" +"PO-Revision-Date: 2007-02-23 11:48+0100\n" +"Last-Translator: kinneko \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Rename volume" +msgstr "ボリューム名を変更する" + +#: Link +msgid "Rename" +msgstr "名前の変更" + +#: Button.ContainerNameSet +msgid "Change name" +msgstr "名前を変更する" + +#: Help.Rename +msgid "Define a name for the volume. This should help you to manage multiple volumes easily. (Only alphanumeric characters are allowed and one of the following: \". _ -\")" +msgstr "ボリューム名を定義します。これは、複数のボリュームを管理しやすくします。(ボリューム名には、英数字とピリオド\".\"、アンダースコア\"_\"、ハイフン\"-\"が利用できます)" + +#: AdviceMessage.NoRenameIfActive.Text +msgid "You can not rename a volume while it is open." +msgstr "ボリュームがオープンされているので、名前の変更ができませんでした。" + +#: AdviceMessage.NoRenameIfActive.Link.Text +msgid "Close volume now" +msgstr "すぐにボリュームを閉じる" + +#: SuccessMessage.VolumeNameChanged.Title +msgid "Name changed" +msgstr "名前を変更しました" + +#: SuccessMessage.VolumeNameChanged.Text +msgid "The name of this volume was changed successfully." +msgstr "このボリューム名の変更に成功しました。" + +#: WarningMessage.NoRenameIfActive.Title +msgid "Failed to rename the volume" +msgstr "ボリューム名の変更に失敗しました" + +#: WarningMessage.NoRenameIfActive.Text +msgid "You may not rename a volume while it is open." +msgstr "ボリュームをオープンしている状態では、名前の変更はできません。" + +#: WarningMessage.InvalidVolumeName.Title +msgid "Changing of volume's name failed" +msgstr "ボリューム名の変更に失敗しました" + +#: WarningMessage.InvalidVolumeName.Text +msgid "The supplied new name of the volume was invalid. Please try again!" +msgstr "入力された新しい名前は使うことができないものです。もう一度お試しください。" + +#: WarningMessage.SetVolumeNameFailed.Text +msgid "Could not change the name of the volume. Take a look at the log files for details." +msgstr "ボリューム名を変更することができませんでした。詳細はログファイルを参照してください。" + +#: WarningMessage.VolumeNameIsInUse.Title +msgid "Could not change volume name" +msgstr "ボリューム名を変更できませんでした" + +#: WarningMessage.VolumeNameIsInUse.Text +msgid "The new name is already in use by another volume." +msgstr "この名前はすでに別のボリュームで使用されています。" diff --git a/v0.3.4.5/plugins/volume_rename/intl/nl/cryptobox-server-feature-volume_rename.po b/v0.3.4.5/plugins/volume_rename/intl/nl/cryptobox-server-feature-volume_rename.po new file mode 100644 index 0000000..4df4b3a --- /dev/null +++ b/v0.3.4.5/plugins/volume_rename/intl/nl/cryptobox-server-feature-volume_rename.po @@ -0,0 +1,74 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-10 01:24+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Rename volume" +msgstr "" + +#: Link +msgid "Rename" +msgstr "" + +#: Button.ContainerNameSet +msgid "Change name" +msgstr "" + +#: Help.Rename +msgid "Define a name for the volume. This should help you to manage multiple volumes easily. (Only alphanumeric characters are allowed and one of the following: \". _ -\")" +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Text +msgid "You can not rename a volume while it is open." +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Link.Text +msgid "Close volume now" +msgstr "" + +#: SuccessMessage.VolumeNameChanged.Title +msgid "Name changed" +msgstr "" + +#: SuccessMessage.VolumeNameChanged.Text +msgid "The name of this volume was changed successfully." +msgstr "" + +#: WarningMessage.NoRenameIfActive.Title +msgid "Failed to rename the volume" +msgstr "" + +#: WarningMessage.NoRenameIfActive.Text +msgid "You may not rename a volume while it is open." +msgstr "" + +#: WarningMessage.InvalidVolumeName.Title +msgid "Changing of volume's name failed" +msgstr "" + +#: WarningMessage.InvalidVolumeName.Text +msgid "The supplied new name of the volume was invalid. Please try again!" +msgstr "" + +#: WarningMessage.SetVolumeNameFailed.Text +msgid "Could not change the name of the volume. Take a look at the log files for details." +msgstr "" + +#: WarningMessage.VolumeNameIsInUse.Title +msgid "Could not change volume name" +msgstr "" + +#: WarningMessage.VolumeNameIsInUse.Text +msgid "The new name is already in use by another volume." +msgstr "" diff --git a/v0.3.4.5/plugins/volume_rename/intl/pl/cryptobox-server-feature-volume_rename.po b/v0.3.4.5/plugins/volume_rename/intl/pl/cryptobox-server-feature-volume_rename.po new file mode 100644 index 0000000..ba0ec05 --- /dev/null +++ b/v0.3.4.5/plugins/volume_rename/intl/pl/cryptobox-server-feature-volume_rename.po @@ -0,0 +1,73 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-04-01 15:53+0200\n" +"PO-Revision-Date: 2007-03-29 21:16+0200\n" +"Last-Translator: Andrzej S. Kaznowski \n" +"Language-Team: POLSKI \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Rename volume" +msgstr "Zmień nazwę woluminu" + +#: Link +msgid "Rename" +msgstr "Zmień nazwę" + +#: Button.ContainerNameSet +msgid "Change name" +msgstr "Zmień nazwę" + +#: Help.Rename +msgid "Define a name for the volume. This should help you to manage multiple volumes easily. (Only alphanumeric characters are allowed and one of the following: \". _ -\")" +msgstr "Zdefiniuj nazwę woluminu. Powinno ci to ułatwić zarządzanie wieloma woluminami. (Dozwolone są tylko litery i cyfry oraz jeden z następujących znaków: \". _ -\")" + +#: AdviceMessage.NoRenameIfActive.Text +msgid "You can not rename a volume while it is open." +msgstr "Nie można zmienić nazwy woluminu, gdy jest on otwarty." + +#: AdviceMessage.NoRenameIfActive.Link.Text +msgid "Close volume now" +msgstr "Zamknij wolumin teraz" + +#: SuccessMessage.VolumeNameChanged.Title +msgid "Name changed" +msgstr "Nazwę zmieniono" + +#: SuccessMessage.VolumeNameChanged.Text +msgid "The name of this volume was changed successfully." +msgstr "Pomyślnie zmieniono nazwę woluminu." + +#: WarningMessage.NoRenameIfActive.Title +msgid "Failed to rename the volume" +msgstr "Zmiana nazwy woluminu nie powiodła się." + +#: WarningMessage.NoRenameIfActive.Text +msgid "You may not rename a volume while it is open." +msgstr "Nie możesz zmienić nazwy woluminu, gdy jest on otwarty." + +#: WarningMessage.InvalidVolumeName.Title +msgid "Changing of volume's name failed" +msgstr "Zmiana nazwy woluminu nie powiodła się." + +#: WarningMessage.InvalidVolumeName.Text +msgid "The supplied new name of the volume was invalid. Please try again!" +msgstr "Podana nowa nazwa woluminu jest nieprawidłowa. Proszę spróbować ponownie." + +#: WarningMessage.SetVolumeNameFailed.Text +msgid "Could not change the name of the volume. Take a look at the log files for details." +msgstr "Nie można było zmienić nazwy woluminu. Sprawdź szczegóły w rejestrze wydarzeń ." + +#: WarningMessage.VolumeNameIsInUse.Title +msgid "Could not change volume name" +msgstr "Nie można było zmienić nazwy woluminu." + +#: WarningMessage.VolumeNameIsInUse.Text +msgid "The new name is already in use by another volume." +msgstr "Nowa nazwa woluminu jest już używana przez inny wolumin." diff --git a/v0.3.4.5/plugins/volume_rename/intl/pt/cryptobox-server-feature-volume_rename.po b/v0.3.4.5/plugins/volume_rename/intl/pt/cryptobox-server-feature-volume_rename.po new file mode 100644 index 0000000..4df4b3a --- /dev/null +++ b/v0.3.4.5/plugins/volume_rename/intl/pt/cryptobox-server-feature-volume_rename.po @@ -0,0 +1,74 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-10 01:24+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Rename volume" +msgstr "" + +#: Link +msgid "Rename" +msgstr "" + +#: Button.ContainerNameSet +msgid "Change name" +msgstr "" + +#: Help.Rename +msgid "Define a name for the volume. This should help you to manage multiple volumes easily. (Only alphanumeric characters are allowed and one of the following: \". _ -\")" +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Text +msgid "You can not rename a volume while it is open." +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Link.Text +msgid "Close volume now" +msgstr "" + +#: SuccessMessage.VolumeNameChanged.Title +msgid "Name changed" +msgstr "" + +#: SuccessMessage.VolumeNameChanged.Text +msgid "The name of this volume was changed successfully." +msgstr "" + +#: WarningMessage.NoRenameIfActive.Title +msgid "Failed to rename the volume" +msgstr "" + +#: WarningMessage.NoRenameIfActive.Text +msgid "You may not rename a volume while it is open." +msgstr "" + +#: WarningMessage.InvalidVolumeName.Title +msgid "Changing of volume's name failed" +msgstr "" + +#: WarningMessage.InvalidVolumeName.Text +msgid "The supplied new name of the volume was invalid. Please try again!" +msgstr "" + +#: WarningMessage.SetVolumeNameFailed.Text +msgid "Could not change the name of the volume. Take a look at the log files for details." +msgstr "" + +#: WarningMessage.VolumeNameIsInUse.Title +msgid "Could not change volume name" +msgstr "" + +#: WarningMessage.VolumeNameIsInUse.Text +msgid "The new name is already in use by another volume." +msgstr "" diff --git a/v0.3.4.5/plugins/volume_rename/intl/ru/cryptobox-server-feature-volume_rename.po b/v0.3.4.5/plugins/volume_rename/intl/ru/cryptobox-server-feature-volume_rename.po new file mode 100644 index 0000000..4df4b3a --- /dev/null +++ b/v0.3.4.5/plugins/volume_rename/intl/ru/cryptobox-server-feature-volume_rename.po @@ -0,0 +1,74 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-10 01:24+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Rename volume" +msgstr "" + +#: Link +msgid "Rename" +msgstr "" + +#: Button.ContainerNameSet +msgid "Change name" +msgstr "" + +#: Help.Rename +msgid "Define a name for the volume. This should help you to manage multiple volumes easily. (Only alphanumeric characters are allowed and one of the following: \". _ -\")" +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Text +msgid "You can not rename a volume while it is open." +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Link.Text +msgid "Close volume now" +msgstr "" + +#: SuccessMessage.VolumeNameChanged.Title +msgid "Name changed" +msgstr "" + +#: SuccessMessage.VolumeNameChanged.Text +msgid "The name of this volume was changed successfully." +msgstr "" + +#: WarningMessage.NoRenameIfActive.Title +msgid "Failed to rename the volume" +msgstr "" + +#: WarningMessage.NoRenameIfActive.Text +msgid "You may not rename a volume while it is open." +msgstr "" + +#: WarningMessage.InvalidVolumeName.Title +msgid "Changing of volume's name failed" +msgstr "" + +#: WarningMessage.InvalidVolumeName.Text +msgid "The supplied new name of the volume was invalid. Please try again!" +msgstr "" + +#: WarningMessage.SetVolumeNameFailed.Text +msgid "Could not change the name of the volume. Take a look at the log files for details." +msgstr "" + +#: WarningMessage.VolumeNameIsInUse.Title +msgid "Could not change volume name" +msgstr "" + +#: WarningMessage.VolumeNameIsInUse.Text +msgid "The new name is already in use by another volume." +msgstr "" diff --git a/v0.3.4.5/plugins/volume_rename/intl/sl/cryptobox-server-feature-volume_rename.po b/v0.3.4.5/plugins/volume_rename/intl/sl/cryptobox-server-feature-volume_rename.po new file mode 100644 index 0000000..f08266d --- /dev/null +++ b/v0.3.4.5/plugins/volume_rename/intl/sl/cryptobox-server-feature-volume_rename.po @@ -0,0 +1,73 @@ +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-10 01:24+0100\n" +"PO-Revision-Date: 2007-02-16 14:42+0100\n" +"Last-Translator: tenzin \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" +"X-Generator: Pootle 0.10.1\n" + +#: Name +msgid "Rename volume" +msgstr "Preimenuj nosilec" + +#: Link +msgid "Rename" +msgstr "Preimenuj" + +#: Button.ContainerNameSet +msgid "Change name" +msgstr "Spremeni ime" + +#: Help.Rename +msgid "Define a name for the volume. This should help you to manage multiple volumes easily. (Only alphanumeric characters are allowed and one of the following: \". _ -\")" +msgstr "Določi ime enote. Poimenovanje enot bo pripomoglo k lažjemu upravljanju z več enotami hkrati. (uporabljate lahko črke, številke in nasledje znake: \". _ -\")" + +#: AdviceMessage.NoRenameIfActive.Text +msgid "You can not rename a volume while it is open." +msgstr "Medtem, ko je nosilec oz. ko je vsebina odprta, je ne morete preimenovati." + +#: AdviceMessage.NoRenameIfActive.Link.Text +msgid "Close volume now" +msgstr "Zapri nosilec" + +#: SuccessMessage.VolumeNameChanged.Title +msgid "Name changed" +msgstr "Ime spremenjeno" + +#: SuccessMessage.VolumeNameChanged.Text +msgid "The name of this volume was changed successfully." +msgstr "Ime nosilca je uspešno spremenjeno" + +#: WarningMessage.NoRenameIfActive.Title +msgid "Failed to rename the volume" +msgstr "Preimenovanje ni uspelo" + +#: WarningMessage.NoRenameIfActive.Text +msgid "You may not rename a volume while it is open." +msgstr "Ne morete preimenovati nosilca medtem, ko je odprt." + +#: WarningMessage.InvalidVolumeName.Title +msgid "Changing of volume's name failed" +msgstr "Sprememba imena nosilca ni uspela." + +#: WarningMessage.InvalidVolumeName.Text +msgid "The supplied new name of the volume was invalid. Please try again!" +msgstr "Izbrano novo ime nosilca ni veljavno. Prosimo poskusite znova!" + +#: WarningMessage.SetVolumeNameFailed.Text +msgid "Could not change the name of the volume. Take a look at the log files for details." +msgstr "Ne morem spremeniti imena nosilca. Preveri dnevniške zapise za podrobnosti. " + +#: WarningMessage.VolumeNameIsInUse.Title +msgid "Could not change volume name" +msgstr "Ne morem spremeniti imena nosilca" + +#: WarningMessage.VolumeNameIsInUse.Text +msgid "The new name is already in use by another volume." +msgstr "Novo ime je že v uporabi za drug nosilec." diff --git a/v0.3.4.5/plugins/volume_rename/intl/sv/cryptobox-server-feature-volume_rename.po b/v0.3.4.5/plugins/volume_rename/intl/sv/cryptobox-server-feature-volume_rename.po new file mode 100644 index 0000000..4df4b3a --- /dev/null +++ b/v0.3.4.5/plugins/volume_rename/intl/sv/cryptobox-server-feature-volume_rename.po @@ -0,0 +1,74 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: CryptoBox-Server 0.3\n" +"Report-Msgid-Bugs-To: translate@cryptobox.org\n" +"POT-Creation-Date: 2007-02-10 01:24+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Rename volume" +msgstr "" + +#: Link +msgid "Rename" +msgstr "" + +#: Button.ContainerNameSet +msgid "Change name" +msgstr "" + +#: Help.Rename +msgid "Define a name for the volume. This should help you to manage multiple volumes easily. (Only alphanumeric characters are allowed and one of the following: \". _ -\")" +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Text +msgid "You can not rename a volume while it is open." +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Link.Text +msgid "Close volume now" +msgstr "" + +#: SuccessMessage.VolumeNameChanged.Title +msgid "Name changed" +msgstr "" + +#: SuccessMessage.VolumeNameChanged.Text +msgid "The name of this volume was changed successfully." +msgstr "" + +#: WarningMessage.NoRenameIfActive.Title +msgid "Failed to rename the volume" +msgstr "" + +#: WarningMessage.NoRenameIfActive.Text +msgid "You may not rename a volume while it is open." +msgstr "" + +#: WarningMessage.InvalidVolumeName.Title +msgid "Changing of volume's name failed" +msgstr "" + +#: WarningMessage.InvalidVolumeName.Text +msgid "The supplied new name of the volume was invalid. Please try again!" +msgstr "" + +#: WarningMessage.SetVolumeNameFailed.Text +msgid "Could not change the name of the volume. Take a look at the log files for details." +msgstr "" + +#: WarningMessage.VolumeNameIsInUse.Title +msgid "Could not change volume name" +msgstr "" + +#: WarningMessage.VolumeNameIsInUse.Text +msgid "The new name is already in use by another volume." +msgstr "" diff --git a/v0.3.4.5/plugins/volume_rename/intl/ur/cryptobox-server-feature-volume_rename.po b/v0.3.4.5/plugins/volume_rename/intl/ur/cryptobox-server-feature-volume_rename.po new file mode 100644 index 0000000..fd7f067 --- /dev/null +++ b/v0.3.4.5/plugins/volume_rename/intl/ur/cryptobox-server-feature-volume_rename.po @@ -0,0 +1,74 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-02-10 01:24+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Translate Toolkit 0.10.1\n" + +#: Name +msgid "Rename volume" +msgstr "" + +#: Link +msgid "Rename" +msgstr "" + +#: Button.ContainerNameSet +msgid "Change name" +msgstr "" + +#: Help.Rename +msgid "Define a name for the volume. This should help you to manage multiple volumes easily. (Only alphanumeric characters are allowed and one of the following: \". _ -\")" +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Text +msgid "You can not rename a volume while it is open." +msgstr "" + +#: AdviceMessage.NoRenameIfActive.Link.Text +msgid "Close volume now" +msgstr "" + +#: SuccessMessage.VolumeNameChanged.Title +msgid "Name changed" +msgstr "" + +#: SuccessMessage.VolumeNameChanged.Text +msgid "The name of this volume was changed successfully." +msgstr "" + +#: WarningMessage.NoRenameIfActive.Title +msgid "Failed to rename the volume" +msgstr "" + +#: WarningMessage.NoRenameIfActive.Text +msgid "You may not rename a volume while it is open." +msgstr "" + +#: WarningMessage.InvalidVolumeName.Title +msgid "Changing of volume's name failed" +msgstr "" + +#: WarningMessage.InvalidVolumeName.Text +msgid "The supplied new name of the volume was invalid. Please try again!" +msgstr "" + +#: WarningMessage.SetVolumeNameFailed.Text +msgid "Could not change the name of the volume. Take a look at the log files for details." +msgstr "" + +#: WarningMessage.VolumeNameIsInUse.Title +msgid "Could not change volume name" +msgstr "" + +#: WarningMessage.VolumeNameIsInUse.Text +msgid "The new name is already in use by another volume." +msgstr "" diff --git a/v0.3.4.5/plugins/volume_rename/language.hdf b/v0.3.4.5/plugins/volume_rename/language.hdf new file mode 100644 index 0000000..f7c839a --- /dev/null +++ b/v0.3.4.5/plugins/volume_rename/language.hdf @@ -0,0 +1,57 @@ +Name = Rename volume +Link = Rename + +Title { + ChangeVolumeName = Rename +} + + +Button { + ContainerNameSet = Change name +} + +Help.Rename = Define a name for the volume. This should help you to manage multiple volumes easily. (Only alphanumeric characters are allowed and one of the following: ". _ -") + +AdviceMessage { + NoRenameIfActive { + Text = You can not rename a volume while it is open. + Link.Text = Close volume now + Link.Rel = volume_mount + Link.Attr1.name = action + Link.Attr1.value = umount + Link.Attr2.name = redirect + Link.Attr2.value = volume_rename + } +} + + +SuccessMessage { + VolumeNameChanged { + Title = Name changed + Text = The name of this volume was changed successfully. + } +} + + +WarningMessage { + NoRenameIfActive { + Title = Failed to rename the volume + Text = You may not rename a volume while it is open. + } + + InvalidVolumeName { + Title = Changing of volume's name failed + Text = The supplied new name of the volume was invalid. Please try again! + } + + SetVolumeNameFailed { + Title = Changing of volume's name failed + Text = Could not change the name of the volume. Take a look at the log files for details. + } + + VolumeNameIsInUse { + Title = Could not change volume name + Text = The new name is already in use by another volume. + } +} + diff --git a/v0.3.4.5/plugins/volume_rename/unittests.py b/v0.3.4.5/plugins/volume_rename/unittests.py new file mode 100644 index 0000000..7038b57 --- /dev/null +++ b/v0.3.4.5/plugins/volume_rename/unittests.py @@ -0,0 +1,161 @@ +# +# Copyright 2006 sense.lab e.V. +# +# This file is part of the CryptoBox. +# +# The CryptoBox 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 CryptoBox 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 the CryptoBox; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +__revision__ = "$Id" + +from cryptobox.tests.base import WebInterfaceTestClass +import cryptobox.tests.tools as cbox_tools + +class unittests(WebInterfaceTestClass): + + def test_read_form(self): + """Check if the 'volume_rename' plugin works. + """ + url = self.url + "volume_rename?weblang=en&device=" + self.device_html + self.register_auth(url) + ## umount, if necessary + cbox_tools.umount(self.device) + ## check a language string + self.cmd.go(url) + self.cmd.find('Change name') + + + def test_rename(self): + """Try to rename the volume. + """ + ## umount, if necessary + cbox_tools.umount(self.device) + save_name = self.__get_name() + ## rename if the name is already "foo" + if save_name == "foo": + self.__set_name("bar") + ## set 'foo' + self.__set_name("foo") + self.cmd.find('The name of this volume was changed successfully.') + self.assertEquals("foo", self.__get_name()) + ## set 'bar' + self.__set_name("bar") + self.cmd.find('The name of this volume was changed successfully.') + self.assertEquals("bar", self.__get_name()) + ## set the same name twice to catch all lines of code + self.__set_name("bar") + self.cmd.notfind('The name of this volume was changed successfully.') + self.assertEquals("bar", self.__get_name()) + self.__set_name(save_name) + self.assertEquals(save_name, self.__get_name()) + + + def test_invalid_names(self): + """Setting of invalid names should fail. + """ + ## umount, if necessary + cbox_tools.umount(self.device) + save_name = self.__get_name() + ## we want to avoid, that if the previous name is (by accident) 'foo' + ## then the later search for "changed successfully" would fail + if save_name == "foo": + self.__set_name("bar") + self.__set_name("foo") + self.cmd.find('The name of this volume was changed successfully.') + self.assertEquals("foo", self.__get_name()) + self.__set_name("foo:") + self.cmd.find("Changing of volume's name failed") + self.assertEquals("foo", self.__get_name()) + self.__set_name("foo/") + self.cmd.find("Changing of volume's name failed") + self.assertEquals("foo", self.__get_name()) + self.__set_name("foo/") + self.cmd.find("Changing of volume's name failed") + self.assertEquals("foo", self.__get_name()) + self.__set_name("foo*") + self.cmd.find("Changing of volume's name failed") + self.assertEquals("foo", self.__get_name()) + self.__set_name("foo(") + self.cmd.find("Changing of volume's name failed") + self.assertEquals("foo", self.__get_name()) + self.__set_name("") + self.cmd.notfind("Changing of volume's name failed") + self.assertEquals("foo", self.__get_name()) + self.__set_name(save_name) + self.assertEquals(save_name, self.__get_name()) + + + def test_rename_while_open(self): + """Try to change the name of the volume while it is open. + """ + ## umount, if necessary + cbox_tools.umount(self.device) + save_name = self.__get_name() + ## first set the name to 'bar' + self.__set_name("bar") + mount_url = self.url + "volume_mount?weblang=en&device=" + self.device_html + self.register_auth(mount_url) + name_url = self.url + "volume_rename?weblang=en&device=" + self.device_html + self.register_auth(name_url) + self.cmd.go(mount_url + "&action=mount_plain") + self.cmd.find('Volume opened') + ## we have to do it manually, as there is no form when it is open + self.cmd.go(name_url + "&store=1&vol_name=foo") + self.cmd.find('You may not rename a volume while it is open.') + self.assertEquals("bar", self.__get_name()) + self.cmd.go(mount_url + "&action=umount") + self.__set_name(save_name) + self.assertEquals(save_name, self.__get_name()) + + + def test_name_in_use(self): + """Try to set a name that is already in use. + """ + ## umount, if necessary + cbox_tools.umount(self.device) + used_name = [ e.get_name() for e in self.cbox.get_container_list() + if e.get_device() != self.device ] + if not used_name: + self.fail("could not find another device for this test") + old_name = self.__get_name() + self.assertNotEquals(old_name, used_name[0]) + self.__set_name(used_name[0]) + self.cmd.find('The new name is already in use by another volume.') + self.assertEquals(old_name, self.__get_name()) + + + def __set_name(self, name): + """Set the name of a volume. + """ + name = name.replace(" ", "%20") + url = self.url + "volume_rename?weblang=en&device=" + self.device_html + self.register_auth(url) + # the following should work, but twill seems to have problems to recognize + # the form - fix this later + #self.cmd.go(url) + #self.cmd.formvalue("set_name", "vol_name", name) + #self.cmd.submit() + self.cmd.go(url + "&vol_name=%s&store=1" % name) + + + def __get_name(self): + """Retrieve the current name of the volume. + """ + url = self.url + "volume_rename?weblang=en&device=" + self.device_html + self.register_auth(url) + self.cmd.go(url) + self.cmd.find("Data.Status.Plugins.volume_rename=(.*)$", "m") + return self.locals["__match__"] + diff --git a/v0.3.4.5/plugins/volume_rename/volume_rename.cs b/v0.3.4.5/plugins/volume_rename/volume_rename.cs new file mode 100644 index 0000000..f538b14 --- /dev/null +++ b/v0.3.4.5/plugins/volume_rename/volume_rename.cs @@ -0,0 +1,32 @@ + + + + +
+ + + + + + + + + + + + + + +
+ + + + + + + +
+ + +
+ diff --git a/v0.3.4.5/plugins/volume_rename/volume_rename.py b/v0.3.4.5/plugins/volume_rename/volume_rename.py new file mode 100644 index 0000000..f7c6e3d --- /dev/null +++ b/v0.3.4.5/plugins/volume_rename/volume_rename.py @@ -0,0 +1,75 @@ +# +# Copyright 2006 sense.lab e.V. +# +# This file is part of the CryptoBox. +# +# The CryptoBox 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 CryptoBox 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 the CryptoBox; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +__revision__ = "$Id" + +import cryptobox.plugins.base +from cryptobox.core.exceptions import * + + +class volume_rename(cryptobox.plugins.base.CryptoBoxPlugin): + + plugin_capabilities = [ "volume" ] + plugin_visibility = [ "properties" ] + request_auth = False + rank = 60 + + + def do_action(self, store=None, vol_name=None): + self.container = self.cbox.get_container(self.device) + if not self.container: + return None + self.__prepare_hdf() + if store and vol_name: + return self.__set_volume_name(vol_name) + else: + return "volume_rename" + + + def get_status(self): + self.container = self.cbox.get_container(self.device) + if not self.container: + return "invalid device" + return "%s" % self.container.get_name() + + + def __prepare_hdf(self): + self.hdf[self.hdf_prefix + "vol_name"] = self.container.get_name() + + + def __set_volume_name(self, vol_name): + if vol_name == self.container.get_name(): + ## nothing has to be done + return "volume_rename" + try: + self.container.set_name(vol_name) + self.hdf["Data.Success"] = "Plugins.volume_rename.VolumeNameChanged" + except CBVolumeIsActive: + self.hdf["Data.Warning"] = "Plugins.volume_rename.NoRenameIfActive" + except CBInvalidName: + self.hdf["Data.Warning"] = "Plugins.volume_rename.InvalidVolumeName" + except CBNameIsInUse: + self.hdf["Data.Warning"] = "Plugins.volume_rename.VolumeNameIsInUse" + except CBContainerError: + self.hdf["Data.Warning"] = "Plugins.volume_rename.SetVolumeNameFailed" + ## reread the volume name + self.__prepare_hdf() + return "volume_rename" + diff --git a/v0.3.4.5/scripts/fetch_po_files.sh b/v0.3.4.5/scripts/fetch_po_files.sh new file mode 100755 index 0000000..d151ce5 --- /dev/null +++ b/v0.3.4.5/scripts/fetch_po_files.sh @@ -0,0 +1,88 @@ +#!/bin/sh +# +# this script symlinks all cbx po files to a language directory structure, as +# it is used by the pootle translation server +# +# all language files are chgrp'ed to the 'pootle' group and group write +# permissions are added +# +# call this script whenever you add _new_ languages to your translation server +# +# it is useful to be root while calling it - otherwise chgrp will fail +# +# +# Copyright 2006 sense.lab e.V. +# +# This file is part of the CryptoBox. +# +# The CryptoBox 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 CryptoBox 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 the CryptoBox; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + + +set -eu + +test $# -ne 1 && echo "Usage: $(basename $0) TARGET_DIR" && exit 1 + +test ! -d "$1" && echo "target directory does not exist: '$1'" && exit 1 + +if test "$(id -u)" == 0 + then is_root=1 + else is_root=0 + echo "$(basename $0) not running as root: the language files will not be writeable for pootle" >&2 + echo " run this script as root to change the permissions of the language files appropriately" >&2 + fi + +DEST_GROUP=pootle +TARGETPATH=${1%/} +BASEPATH=$(cd $(dirname "$0")/..; pwd) + +############# functions ############### + +# symlink a language file and chgrp if possible +# Paramters: LANG_FILE LANGUAGE +process_language_file() +{ + test ! -d "${TARGETPATH}/$2" && mkdir -p "${TARGETPATH}/$2" + ln -sfn "$1" "${TARGETPATH}/$2/" + if test "$is_root" == 1 + then chgrp "$DEST_GROUP" "$1" "$TARGETPATH/$2" + chmod g+w "$1" "$TARGETPATH/$2" + fi +} + + +############# main ################# + + +for language in $(ls ${BASEPATH}/intl/) ; do + test ! -d "${BASEPATH}/intl/${language}" && continue + echo "Processing $language ..." + [ ! -d ${TARGETPATH}/${language} ] && mkdir -p ${TARGETPATH}/${language} + ## base translation + find "${BASEPATH}/intl/${language}" -name \*.po | while read fname + do process_language_file "$fname" "$language" + done + ## plugin translations + find "${BASEPATH}/plugins/" -name \*.po | \ + grep "/intl/$language/" | while read fname + do process_language_file "$fname" "$language" + done +done + +echo "Processing template files ..." +find ${BASEPATH}/intl ${BASEPATH}/plugins -type f -name \*.pot | while read fname + do process_language_file "$fname" "template" + done + diff --git a/v0.3.4.5/scripts/show_TODO.sh b/v0.3.4.5/scripts/show_TODO.sh new file mode 100755 index 0000000..a2904ec --- /dev/null +++ b/v0.3.4.5/scripts/show_TODO.sh @@ -0,0 +1,9 @@ +#!/bin/sh +# +# Copyright (c) 02005 sense.lab +# +# License: This script is distributed under the terms of version 2 +# of the GNU GPL. See the LICENSE file included with the package. +# + +grep "TODO" $(find "$(dirname $0)/.." -type f | grep -v "\.svn" | grep -v "$(basename $0)") diff --git a/v0.3.4.5/scripts/update_po_files.py b/v0.3.4.5/scripts/update_po_files.py new file mode 100755 index 0000000..7d05674 --- /dev/null +++ b/v0.3.4.5/scripts/update_po_files.py @@ -0,0 +1,209 @@ +#!/usr/bin/env python +# +# Copyright 2006-2007 sense.lab e.V. +# +# This file is part of the CryptoBox. +# +# All available hdf language files are parsed for creating pot (po-template) files. +# All existing po-file are merged with these templates to remove obsolete msgids. +# Additionally every msgstr of the english original is set to the value of the +# respective msgid. +# All resulting po files are chmod'ed to 0666 - this is useful if you locally use +# services like pootle. +# If there were no changes besides the "POT-Creation-Date" header, then the file +# is reverted via svn to avoid unnecessary commits. +# +# +# The CryptoBox 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 CryptoBox 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 the CryptoBox; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + + +import os +import sys +try: + import translate.storage.po, translate.convert.pot2po, translate.tools.pocompile +except ImportError, errMsg: + sys.stderr.write("Failed to import a python module of the 'translate' package!\n") + sys.stderr.write("Please install the appropriate files - for debian just do 'apt-get install translate-toolkit'.\n") + sys.stderr.write("\tOriginal error message: %s\n\n" % errMsg) + sys.exit(1) +try: + import neo_cgi, neo_util +except ImportError, errMsg: + sys.stderr.write("Failed to import a python module of the 'clearsilver' package!\n") + sys.stderr.write("Please install the appropriate files - for debian just do 'apt-get install python-clearsilver'.\n") + sys.stderr.write("\tOriginal error message: %s\n\n" % errMsg) + sys.exit(1) +try: + import subprocess +except ImportError, errMsg: + sys.stderr.write("Failed to import the python module 'subprocess'!\n") + sys.stderr.write("Please install python v2.4 or higher.\n") + sys.stderr.write("\tOriginal error message: %s\n\n" % errMsg) + sys.exit(1) + + +LANGUAGE_FILE = 'language.hdf' +## name of the main domain and prefix for all plugin domains +GETTEXT_DOMAIN = 'cryptobox-server' +## set the msgstrs for this language to the value of the respective msgids +DEFAULT_LANG = 'en' +LANG_DIR = 'intl' +## mail adress for translation bugs +MAIL_ADDRESS = 'info@cryptobox.org' +## the complete list of languages wastes a lot of space - for now we use only a few +#ALL_LANGUAGES = "af aka am ar bn ca cs da de el en es et eu fa fi fr fur gl he hi hr hu hy is it ja ka kg ko ku lt lv mr ms mt nb ne nl nn ns pa pl pt ru sl sr st sv tr uk ve vi xh".split(" ") +ALL_LANGUAGES = "cs da de en es fi fr hu it ja nl pl pt ru sl sv ur".split(" ") + +# --------------=-=-=- functions -=-=-=-------------------- + +def revert_if_unchanged(po_file): + try: + proc = subprocess.Popen( + shell = False, + stdout = subprocess.PIPE, + args = [ "svn", "diff", po_file ] ) + except OSError, err_msg: + sys.stderr.write("Failed to execute subversion's diff: %s\n" % err_msg) + return + (stdout, stderr) = proc.communicate() + if proc.returncode != 0: + sys.stderr.write("Subversion returned an error: %d\n" % proc.returncode) + return + ## no changes at all? + if not stdout: + return + lines = [ l for l in stdout.splitlines() + if ((l.find("POT-Creation-Date:") < 0 ) and \ + ((l.startswith("+") and (not l.startswith("+++"))) or \ + (l.startswith("-") and (not l.startswith("---"))))) ] + ## are there relevant changes? then we should not revert ... + if lines: + return + ## revert to previous state + proc = subprocess.Popen( + shell = False, + args = [ "svn", "revert", po_file ] ) + proc.wait() + + +def process_language_file(hdf_file, po_dir, textDomain): + ## prepare hdf + if not os.path.isfile(hdf_file) or not os.access(hdf_file, os.R_OK): + sys.stderr.write("Unable to read the hdf file: %s" % hdf_file) + return + if not os.path.isdir(po_dir): + os.mkdir(po_dir) + pot_file = os.path.join(po_dir, "%s.pot" % textDomain) + hdf = neo_util.HDF() + hdf.readFile(hdf_file) + ## update pot + if not os.path.isfile(pot_file): + sys.stdout.write("Creating: %s\n" % pot_file) + pot = translate.storage.po.pofile(encoding="utf-8") + pot.makeheader(pot_creation_date=True) + pot.updateheader(add=True, Project_Id_Version='CryptoBox-Server 0.3', pot_creation_date=True, language_team='sense.lab <%s>' % MAIL_ADDRESS, Report_Msgid_Bugs_To=MAIL_ADDRESS, encoding='utf-8', Plural_Forms=['nplurals=2','plural=(n != 1)']) + #TODO: somehow we need 'updateheaderplural' + else: + sys.stdout.write("Loading: %s\n" % pot_file) + pot = translate.storage.po.pofile.parsefile(pot_file) + ## remove all msgids - we will add them later + pot.units = [] + ## add new entries + def walk_hdf(prefix, node): + def addPoItem(hdf_node): + ## ignore hdf values with a "LINK" attribute + for (key,value) in hdf_node.attrs(): + if key == "LINK": + return + if not hdf_node.value(): + return + item = pot.findunit(hdf_node.value()) + if not item: + item = pot.addsourceunit(hdf_node.value()) + item.addlocation("%s%s" % (prefix, hdf_node.name())) + while node: + if node.name(): + new_prefix = prefix + node.name() + '.' + else: + new_prefix = prefix + ## as the attribute feature of clearsilver does not work yet, we + ## have to rely on magic names to prevent the translation of links + if not (new_prefix.endswith(".Link.Rel.") \ + or new_prefix.endswith(".Link.Prot.") \ + or new_prefix.endswith(".Link.Abs.") \ + or new_prefix.endswith(".Link.Attr1.name.") \ + or new_prefix.endswith(".Link.Attr1.value.") \ + or new_prefix.endswith(".Link.Attr2.name.") \ + or new_prefix.endswith(".Link.Attr2.value.")): + addPoItem(node) + walk_hdf(new_prefix, node.child()) + node = node.next() + walk_hdf("",hdf) + pot.savefile(pot_file) + p = translate.storage.po.pofile(pot_file) + for ld in ALL_LANGUAGES: + if not os.path.isdir(os.path.join(po_dir,ld)): + os.mkdir(os.path.join(po_dir, ld)) + po_file = os.path.join(po_dir, ld, "%s.po" % textDomain) + if not os.path.isfile(po_file): + translate.convert.pot2po.convertpot(file(pot_file), file(po_file,'w'), None) + else: + po2_file = po_file + '.new' + translate.convert.pot2po.convertpot(file(pot_file), file(po2_file,'w'), file(po_file)) + os.rename(po2_file, po_file) + if ld == DEFAULT_LANG: + ## set every msgstr to the respective msgid + po_data = translate.storage.po.pofile.parsefile(po_file) + for po_unit in po_data.units: + po_unit.settarget(po_unit.getsource()) + po_data.removeduplicates() + po_data.removeblanks() + po_data.savefile(po_file) + else: + po_content = translate.storage.po.pofile.parsefile(po_file) + po_content.removeduplicates() + po_content.removeblanks() + po_content.savefile(po_file) + revert_if_unchanged(po_file) + ## make it writeable for pootle + os.chmod(po_file, 0666) + ## compile po file + mo_file = po_file[:-3] + '.mo' + translate.tools.pocompile.convertmo(file(po_file), file(mo_file,'w'), file(pot_file)) + + + + +# ----------------=-=-=- main -=-=-=----------------------- + + +if __name__ == "__main__": + + ## the project directory is the parent of the directory of this script + PROJECT_DIR = os.path.abspath(os.path.join(os.path.dirname(sys.argv[0]),os.path.pardir)) + + process_language_file( + os.path.join(PROJECT_DIR, 'templates', LANGUAGE_FILE), + os.path.join(PROJECT_DIR, LANG_DIR), + GETTEXT_DOMAIN) + + for root, dirs, files in os.walk(os.path.join(PROJECT_DIR, 'plugins')): + if LANGUAGE_FILE in files: + process_language_file( + os.path.join(root,LANGUAGE_FILE), + os.path.join(root,LANG_DIR), + "%s-feature-%s" % (GETTEXT_DOMAIN,os.path.basename(root))) + diff --git a/v0.3.4.5/scripts/userdocexport.sh b/v0.3.4.5/scripts/userdocexport.sh new file mode 100755 index 0000000..299df52 --- /dev/null +++ b/v0.3.4.5/scripts/userdocexport.sh @@ -0,0 +1,135 @@ +#!/bin/sh +# +# Copyright (c) 02005 sense.lab +# +# License: This script is distributed under the terms of version 2 +# of the GNU GPL. See the LICENSE file included with the package. +# +# $Id$ +# +# export wiki pages to the cryptobox development tree +# this creates static and integrated pages +# + +set -ue + +# root directory of the cryptobox development environment +ROOT_DIR="$(dirname $0)/.." + +# retrieve these pages from the wiki +PAGES="CryptoBox CryptoBoxUser CryptoBoxUserGettingStarted + CryptoBoxUserConfiguration CryptoBoxUserDailyUse CryptoBoxDev + CryptoBoxDevPreparation CryptoBoxDevCustomBuild CryptoBoxDevWorkFlow + CryptoBoxDevValidation CryptoBoxDevCustomConfigure CryptoBoxDevBackground + CryptoBoxDevKnownProblems" +#PAGES="CryptoBox" + +# base URL +WIKI_HOST="https://systemausfall.org" +# the trailing slash is important +WIKI_URL=/trac/cryptobox/wiki/ + +CBOX_CGI="/doc?page=" + +LANGUAGES="de en" + +DEST_DIR="$ROOT_DIR/doc/html" +OFFLINE_DIR="$ROOT_DIR/../live-cd/live-cd-tree.d/_offline/doc" +IMAGE_DIR="$ROOT_DIR/cbox-tree.d/var/www/cryptobox-misc" +TMP_DIR=/tmp/$(basename $0)-$$.d + +HEADER_FILE=doc_header.inc +FOOTER_FILE=doc_footer.inc + +WGET_OPTS="--quiet --no-check-certificate" + +[ ! -e "$DEST_DIR" ] && echo "$DEST_DIR does not exist" && exit 1 + +for LANG in $LANGUAGES; do + for PAGE in $PAGES; do + PAGE_SRC="$WIKI_HOST$WIKI_URL$PAGE/$LANG" + echo "Importing $PAGE/$LANG:" + + # replace sub-page-style '/' like moin does it (by '_2f') + TMP_FILE=$TMP_DIR/${PAGE}.html + mkdir -p "$TMP_DIR" + + echo " downloading the page ..." + wget $WGET_OPTS --output-document="$TMP_FILE" "$PAGE_SRC" || { echo "Downloading ($PAGE_SRC) failed!"; exit 1; } + + # check if this page exists + if grep -q "^describe $PAGE/$LANG here$" "$TMP_FILE" + then rm "$TMP_FILE" + PAGE_SRC=$(dirname $PAGE_SRC) + echo " trying to download default language page instead" + wget $WGET_OPTS --output-document="$TMP_FILE" "$PAGE_SRC" || { echo "Downloading ($PAGE_SRC) failed!" >&2; exit 1; } + # check, if there is even no default page + grep -q "^describe $PAGE/$LANG here$" "$TMP_FILE" && echo "This page ($PAGE_SRC) was not found!" >&2 && exit 1 + fi + + echo " removing header and footer ..." + # break lines before start of content + sed -i 's#
#_END_OF_HEADER_\n#' "$TMP_FILE" + # the 'edit' buttons mark the end of the page + sed -i 's#
#\n_START_OF_FOOTER_#' "$TMP_FILE" + # cut off a possible comment - section + sed -i "s#
]*\#commentpreview#\n_START_OF_FOOTER_#" "$TMP_FILE" + # remove all lines before and after "body" + sed -i '1,/_END_OF_HEADER_/d; /_START_OF_FOOTER_/,$d' "$TMP_FILE" + + # close open divs + while [ "$(grep '' "$TMP_FILE" | wc -l)" ] + do echo "
" >>"$TMP_FILE" + done + + #echo " removing link images (moin specific) ..." + # remove inter-wiki images + #sed -i 's#<[^<]*moin-inter.png[^>]*>##g' "$TMP_FILE" + # remove moin-www images + #sed -i 's#<[^<]*moin-www.png[^>]*> ##g' "$TMP_FILE" + + # not necessary, because everything is a part of the repository + #echo " downloading requisites ..." + #wget --quiet --ignore-tags=a --no-clobber --page-requisites --convert-links --no-directories --base="$WIKI_HOST$WIKI_URL" --directory-prefix="$TMP_DIR" --html-extension --force-html --input-file="$TMP_FILE" || { echo "Downloading requisites for ($PAGE_SRC) failed!"; exit 1; } + + echo " adjusting links for images ..." + sed -i "s#='[^']*/cryptobox-misc/\([^']*\)'#='/cryptobox-misc/\1'#g" "$TMP_FILE" + + echo " adjusting wiki links ..." + # redirect wiki links to cryptobox cgi + sed -i "s#=\"$WIKI_URL\([^\.]*\)\"#=\"$CBOX_CGI\1\"#g" "$TMP_FILE" + # do it twice - somehow, the "g" flag does not work (it should replace multiple occurrences on a line) + sed -i "s#=\"$WIKI_URL\([^\.]*\)\"#=\"$CBOX_CGI\1\"#g" "$TMP_FILE" + # remove language specific part of moin link + for TLANG in $LANGUAGES + do sed -i "s#=\"$CBOX_CGI\([^\"]*\)/$TLANG#=\"$CBOX_CGI\1#g" "$TMP_FILE" + done + + + # build the static pages + echo " building static doc page" + offline_file=$OFFLINE_DIR/$LANG/$(basename $TMP_FILE) + mkdir -p "$OFFLINE_DIR/$LANG" + cat "$OFFLINE_DIR/$HEADER_FILE" "$OFFLINE_DIR/$LANG/$HEADER_FILE" "$TMP_FILE" "$OFFLINE_DIR/$LANG/$FOOTER_FILE" "$OFFLINE_DIR/$FOOTER_FILE" >"$offline_file" + sed -i "s%=\"$CBOX_CGI\([^\"#]*\)%=\"\1.html%g" "$offline_file" + # do it twice - this should not be necessary + sed -i "s%=\"$CBOX_CGI\([^#\"]*\)%=\"\1.html%g" "$offline_file" + sed -i "s#='/cryptobox-misc#='../../../var/www/cryptobox-misc#g" "$offline_file" + + # split language specific part of moin link and replace it by current language + for TLANG in $LANGUAGES + do sed -i "s#=\"\([^/]*\)/${TLANG}.html\"#=\"\1.html\"#g" "$offline_file" + done + + # some last changes to the dynamic pages (must be done _after_ the static pages) + # add weblang for current language to query string + sed -i "s;=\"$CBOX_CGI\([^#\"]*\)\([#\"]\);=\"$CBOX_CGI\1\&weblang=$LANG\2;g" "$TMP_FILE" + # move cgi-doc + mv "$TMP_FILE" "$DEST_DIR/$LANG" + + echo " finished!" + done + done + +[ -n "$(find "$TMP_DIR" -type f)" ] && mv "$TMP_DIR"/* "$IMAGE_DIR" +rmdir "$TMP_DIR" diff --git a/v0.3.4.5/setup.py b/v0.3.4.5/setup.py new file mode 100644 index 0000000..d04a247 --- /dev/null +++ b/v0.3.4.5/setup.py @@ -0,0 +1,151 @@ +#!/usr/bin/env python +# +# Copyright 2006 sense.lab e.V. +# +# This file is part of the CryptoBox. +# +# The CryptoBox 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 CryptoBox 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 the CryptoBox; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# Dependencies: clearsilver(python), cherrypy, python-configobj +# + +from distutils.core import setup +import distutils.sysconfig +import os + +## define some strings (not patterns) to exclude specific files or directories +IGNORE_FILES = [ '.svn', 'intl' ] + +## define the data destination directory (below the python directory - for debian this gets overridden the rules file) +pydir = distutils.sysconfig.get_python_lib() +## remove installation prefix to get relative path +pydir = pydir.replace(distutils.sysconfig.get_config_var("prefix") + os.path.sep, '') +pydir = os.path.join(pydir, 'cryptobox') + +## shared data dir +datadir = os.path.join('share', 'cryptobox-server') +## doc dir +docdir = os.path.join('share', 'doc', 'cryptobox-server') +## configuration directory +confdir = os.path.join(os.path.sep, 'etc', 'cryptobox-server') + + +def listfiles(prefix, src): + """create a list of files below a directory recursively + + If the src contains more then one path element (multiple levels), then only the + last one (basename part) is added to the prefix path (e.g.: 'dest','src1/src2' will + create a list below 'dest/src2'). + The result is a list of tuples: (destination, [srcfiles,...]). + This is the datatype expected by 'data_files' in setup.""" + ## we will not add the 'dirname' part of srcdir to the destination + src_dir, src_base = os.path.split(src) + ## add the files of this directory + result = [(os.path.join(prefix, src_base), [ os.path.join(src, f) + for f in os.listdir(src) + if os.path.isfile(os.path.join(src, f)) \ + and not f in IGNORE_FILES ])] + ## add the files in subdirectories + for d in os.listdir(src): + if os.path.isdir(os.path.join(src,d)) and not d in IGNORE_FILES: + result.extend(listfiles( + os.path.join(prefix,src_base), os.path.join(src, d))) + return result + + +def getdatafiles(prefix, dirs): + filelist = [] + for d in dirs: + if os.path.isdir(d): + filelist.extend(listfiles(prefix, d)) + else: + filelist.append((prefix, [d])) + return filelist + + +def get_language_files(prefix): + """return a destination-file mapping for all compiled language files (*.po) + """ + import sys + mapping = [] + ## find all language directories + intl_dirs = [] + for (root, dirs, files) in os.walk(os.getcwd()): + if 'intl' in dirs: + intl_dirs.append(os.path.join(root, 'intl')) + for i_dir in intl_dirs: + for lang_dir in [os.path.join(i_dir, e) + for e in os.listdir(i_dir) + if os.path.isdir(os.path.join(i_dir, e)) and (not e in IGNORE_FILES)]: + po_files = [ os.path.join(lang_dir, e) + for e in os.listdir(lang_dir) + if os.path.isfile(os.path.join(lang_dir, e)) \ + and (e[-3:] == '.po') ] + lang_files = [] + for po_file in po_files: + if compile_po_file(po_file): + lang_files.append(po_file[:-3] + ".mo") + else: + sys.stderr.write("Failed to compile language file: %s\n" % po_file) + mapping.append((os.path.join( + prefix, os.path.basename(lang_dir), 'LC_MESSAGES'), lang_files)) + return mapping + + +def compile_po_file(po_file): + """compile the binary mo file out of a po file + """ + import subprocess + return subprocess.call( [ "msgfmt", "-o", po_file[:-3] + ".mo", po_file ] ) == 0 + + +setup( + name = 'cryptobox-server', + version = '0.3.0', + description = 'webinterface for handling encrypted disks', + author = 'Sense.Lab e.V.', + author_email = 'info@cryptobox.org', + maintainer = 'Lars Kruse', + maintainer_email = 'devel@sumpfralle.de', + license = 'GPL', + url = 'http://cryptobox.org', + packages = [ 'cryptobox', 'cryptobox.core', 'cryptobox.web', + 'cryptobox.plugins', 'cryptobox.tests' ], + data_files = getdatafiles(datadir, ['templates', 'www-data', 'plugins']) + + getdatafiles(confdir, [os.path.join('conf-examples', 'cryptobox.conf')]) + + getdatafiles(os.path.join(confdir, 'events.d'), [ + os.path.join('event-scripts', 'README'), + os.path.join('event-scripts', '_event_scripts_')]) + + getdatafiles(docdir, ['conf-examples', 'event-scripts', 'README', 'changelog', + 'LICENSE', 'copyright', os.path.join('doc', 'html'), 'README.davfs', + 'README.samba', 'README.proxy', 'README.ssl' ]) + + getdatafiles(os.path.join(docdir, 'conf-examples'), + [os.path.join('debian', 'cryptobox-server.init')]) + + get_language_files(os.path.join('share', 'locale')), + package_dir = { '': 'src' }, + scripts = [ os.path.join('bin', 'CryptoBoxWebserver'), + os.path.join('bin', 'CryptoBoxRootActions') ], + classifiers = [ + 'Development Status :: 2 - Beta', + 'Environment :: Web Environment', + 'Intended Audience :: End Users/Desktop', + 'Intended Audience :: System Administrators', + 'License :: OSI Approved :: GNU General Public License (GPL)', + 'Topic :: System :: Systems Administration', + 'Operating System :: POSIX', + 'Operating System :: Unix', + 'Programming Language :: Python'], + ) + diff --git a/v0.3.4.5/src/cryptobox/__init__.py b/v0.3.4.5/src/cryptobox/__init__.py new file mode 100644 index 0000000..14996fb --- /dev/null +++ b/v0.3.4.5/src/cryptobox/__init__.py @@ -0,0 +1,14 @@ +"""CryptoBox package + +The CryptoBox is a webserver. It enables you to control your encrypted +(cryptsetup-luks) and plaintext disks via an easy to use web interface. +The CryptoBox is especially suitable for non-desktop fileservers with +encrypted partitions. +""" + +__all__ = ['core', 'web', 'plugins', 'tests'] +__revision__ = "$Id$" + + +__version__ = "0.3.4.3" + diff --git a/v0.3.4.5/src/cryptobox/core/__init__.py b/v0.3.4.5/src/cryptobox/core/__init__.py new file mode 100644 index 0000000..3b001bf --- /dev/null +++ b/v0.3.4.5/src/cryptobox/core/__init__.py @@ -0,0 +1,7 @@ +"""Core management functions of the CryptoBox. +""" + +__revision__ = "$Id" + +__all__ = [ 'main', 'container', 'exceptions', 'tools', 'settings' ] + diff --git a/v0.3.4.5/src/cryptobox/core/container.py b/v0.3.4.5/src/cryptobox/core/container.py new file mode 100644 index 0000000..106e277 --- /dev/null +++ b/v0.3.4.5/src/cryptobox/core/container.py @@ -0,0 +1,817 @@ +# +# Copyright 2006 sense.lab e.V. +# +# This file is part of the CryptoBox. +# +# The CryptoBox 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 CryptoBox 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 the CryptoBox; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +"""Manage a single container of the CryptoBox +""" + +__revision__ = "$Id" + +import subprocess +import os +import re +import time +from cryptobox.core.exceptions import * + + +CONTAINERTYPES = { + "unused":0, + "plain":1, + "luks":2, + "swap":3, + } + +FSTYPES = { + "plain":["ext3", "ext2", "vfat", "reiserfs"], + "swap":["swap"]} + + +## we use this marker to make sure, that we do not remove a non-cryptobox directory +## below the mount directory +MOUNT_DIR_MARKER = '_cryptobox_mount_dir_' + + +class CryptoBoxContainer: + """Manage a container of the CryptoBox + """ + + __dmDir = "/dev/mapper" + + + def __init__(self, device, cbox): + self.device = device + self.cbox = cbox + self.uuid = None + self.name = None + self.cont_type = None + self.mount = None + self.umount = None + self.attributes = None + self.reset_object() + + + def get_name(self): + """Return a humanly readable name for the container. + + Available since: 0.3.0 + """ + return self.name + + + def __set_attributes(self): + """Define the default attributes of a container. + + At least there should be a uuid. + Other attributes may be added by features (e.g. automount). + Available since: 0.3.0 + """ + try: + ## is there already an entry in the database? + self.attributes = self.cbox.prefs.volumes_db[self.get_name()] + self.attributes["uuid"] = self.uuid + except KeyError: + ## set default values + self.attributes = { "uuid": self.uuid } + self.cbox.prefs.volumes_db[self.get_name()] = self.attributes + + + def set_name(self, new_name): + """Define a humanly readable name of this container. + + this also manages the name database + Available since: 0.3.0 + """ + old_name = self.get_name() + if new_name == self.name: + return + ## renaming is not possible, if the volume is active, as the mountpoint name + ## is the same as the volume name + if self.is_mounted(): + raise CBVolumeIsActive("the container must not be active during renaming") + if not re.search(r'^[a-zA-Z0-9_\.\- ]+$', new_name): + raise CBInvalidName("the supplied new name contains illegal characters") + ## check for another partition with the same name + if self.cbox.get_container_list(filter_name=new_name): + raise CBNameIsInUse("the supplied new name is already in use for anonther partition") + ## maybe there a is an entry in the volumes database (but the partition is not active) + try: + ## remove possibly existing inactive database item + del self.cbox.prefs.volumes_db[new_name] + except KeyError: + ## no entry - so nothing happens + pass + ## set new name + self.name = new_name + ## remove old database entry + try: + del self.cbox.prefs.volumes_db[old_name] + except KeyError: + pass + ## set new volumes database entry + self.cbox.prefs.volumes_db[new_name] = self.attributes + try: + self.cbox.prefs.volumes_db.write() + except IOError: + self.cbox.log.warn("Failed to store volumes database after set_name") + + + def is_writeable(self): + """Return if the container is writeable + + this only affects actions like formatting or partitioning + write access for the mounted content is not considered + Available since: 0.3.3 + """ + ## symlinks are followed automatically + return os.access(self.get_device(), os.W_OK) + + + def get_device(self): + """Return the device name of the container + + e.g.: /dev/hdc1 + Available since: 0.3.0 + """ + return self.device + + + def get_type(self): + """Return the type (int) of this container. + + Available since: 0.3.0 + """ + return self.cont_type + + + def is_mounted(self): + """Check if the container is currently mounted. + + Available since: 0.3.0 + """ + return os.path.ismount(self.__get_mount_point()) + + + def get_capacity(self): + """Return the current capacity state of the volume. + + the volume may not be mounted + the result is a tuple of values in megabyte: + (size, available, used) + Available since: 0.3.0 + """ + info = os.statvfs(self.__get_mount_point()) + return ( + int(info.f_bsize*info.f_blocks/1024/1024), + int(info.f_bsize*info.f_bavail/1024/1024), + int(info.f_bsize*(info.f_blocks-info.f_bavail)/1024/1024)) + + + def get_size(self): + """return the size of the block device (_not_ of the filesystem) + + the result is a value in megabyte + an error is indicated by "-1" + Available since: 0.3.0 + """ + import cryptobox.core.tools as cbxtools + return cbxtools.get_blockdevice_size(self.device) + + + def reset_object(self): + """ recheck the information about this container + + this is especially useful after changing the type via 'create' + Available since: 0.3.0 + """ + self.uuid = self.__get_uuid() + self.cont_type = self.__get_type_of_partition() + self.name = self.__get_name_of_container() + self.__set_attributes() + if self.cont_type == CONTAINERTYPES["luks"]: + self.mount = self.__mount_luks + self.umount = self.__umount_luks + elif self.cont_type == CONTAINERTYPES["plain"]: + self.mount = self.__mount_plain + self.umount = self.__umount_plain + + + def create(self, cont_type, password=None, fs_type="ext3"): + """Format a container. + + Also set a password for encrypted container. + Available since: 0.3.0 + """ + if not fs_type in FSTYPES["plain"]: + raise CBInvalidType("invalid filesystem type supplied: %s" % str(fs_type)) + old_name = self.get_name() + if cont_type == CONTAINERTYPES["luks"]: + self.__create_luks(password, fs_type) + elif cont_type == CONTAINERTYPES["plain"]: + self.__create_plain(fs_type) + else: + raise CBInvalidType("invalid container type (%d) supplied" % (cont_type, )) + ## no exception was raised during creation -> we can continue + ## reset the properties (encryption state, ...) of the device + self.reset_object() + ## restore the old name (must be after reset_object) + try: + self.set_name(old_name) + except CBNameIsInUse: + ## failure is okay + pass + + + def change_password(self, oldpw, newpw): + """Change the password of an encrypted container. + + Raises an exception for plaintext container. + Available since: 0.3.0 + """ + if self.cont_type != CONTAINERTYPES["luks"]: + raise CBInvalidType("changing of password is possible only for luks containers") + if not oldpw: + raise CBInvalidPassword("no old password supplied for password change") + if not newpw: + raise CBInvalidPassword("no new password supplied for password change") + ## return if new and old passwords are the same + if oldpw == newpw: + return + if self.is_mounted(): + raise CBVolumeIsActive("this container is currently active") + ## remove any potential open luks mapping + self.__umount_luks() + ## create the luks header + proc = subprocess.Popen( + shell = False, + stdin = subprocess.PIPE, + stdout = subprocess.PIPE, + stderr = subprocess.PIPE, + args = [ + self.cbox.prefs["Programs"]["super"], + self.cbox.prefs["Programs"]["CryptoBoxRootActions"], + "cryptsetup", + "luksAddKey", + self.device, + "--batch-mode"]) + proc.stdin.write("%s\n%s" % (oldpw, newpw)) + (output, errout) = proc.communicate() + if proc.returncode != 0: + error_msg = "Could not add a new luks key: %s - %s" \ + % (output.strip(), errout.strip(), ) + self.cbox.log.error(error_msg) + raise CBChangePasswordError(error_msg) + ## retrieve the key slot we used for unlocking + keys_found = re.search(r'key slot (\d{1,3}) unlocked', output).groups() + if keys_found: + keyslot = int(keys_found[0]) + else: + raise CBChangePasswordError("could not get the old key slot") + ## remove the old key + proc = subprocess.Popen( + shell = False, + stdin = None, + stdout = subprocess.PIPE, + stderr = subprocess.PIPE, + args = [ + self.cbox.prefs["Programs"]["cryptsetup"], + "--batch-mode", + "luksDelKey", + self.device, + "%d" % (keyslot, )]) + proc.wait() + if proc.returncode != 0: + error_msg = "Could not remove the old luks key: %s" % (proc.stderr.read().strip(), ) + self.cbox.log.error(error_msg) + raise CBChangePasswordError(error_msg) + + + def is_busy(self): + """Return the current state of the busy flag of this device. + + The busy flag is mainly used to indicate that the device may not be used + while it is being formatted or similar. + Available since: 0.3.1 + """ + return self.cbox.get_device_busy_state(self.device) + + + def set_busy(self, new_state, timeout=300): + """Set the busy state of this device. + + Either set or remove this flag. + The timeout is optional and defaults to five minutes. + Available since: 0.3.1 + """ + self.cbox.set_device_busy_state(self.device, new_state, timeout) + + + ## ****************** internal stuff ********************* + + def __get_name_of_container(self): + """retrieve the name of the container by querying the database + call this function only for the initial setup of the container object""" + found_name = None + for key in self.cbox.prefs.volumes_db.keys(): + if self.cbox.prefs.volumes_db[key]["uuid"] == self.uuid: + found_name = key + if found_name: + return found_name + ## there is no name defined for this uuid - we will propose a good one + prefix = self.cbox.prefs["Main"]["DefaultVolumePrefix"] + unused_found = False + counter = 1 + while not unused_found: + guess = prefix + str(counter) + if self.cbox.prefs.volumes_db.has_key(guess): + counter += 1 + else: + unused_found = True + return guess + + + def __get_uuid(self): + """Retrieve the uuid of the container device. + """ + if self.__get_type_of_partition() == CONTAINERTYPES["luks"]: + guess = self.__get_luks_uuid() + else: + guess = self.__get_non_luks_uuid() + ## did we get a valid value? + if guess: + return guess + else: + ## emergency default value + return self.device.replace(os.path.sep, "_") + + + def __get_luks_uuid(self): + """get uuid for luks devices""" + proc = subprocess.Popen( + shell = False, + stdout = subprocess.PIPE, + stderr = subprocess.PIPE, + args = [self.cbox.prefs["Programs"]["cryptsetup"], + "luksUUID", + self.device]) + (stdout, stderr) = proc.communicate() + if proc.returncode != 0: + self.cbox.log.info("could not retrieve luks uuid (%s): %s", + (self.device, stderr.strip())) + return None + return stdout.strip() + + + def __get_non_luks_uuid(self): + """return UUID for ext2/3 and vfat filesystems""" + proc = subprocess.Popen( + shell=False, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + args=[self.cbox.prefs["Programs"]["blkid"], + "-s", "UUID", + "-o", "value", + "-c", os.devnull, + "-w", os.devnull, + self.device]) + (stdout, stderr) = proc.communicate() + ## execution failed? + if proc.returncode != 0: + self.cbox.log.info("retrieving of partition type (" + str(self.device) \ + + ") via 'blkid' failed: " + str(stderr.strip()) \ + + " - maybe it is encrypted?") + return None + ## return output of blkid + return stdout.strip() + + + def __get_type_of_partition(self): + """Retrieve the type of the given partition. + + see cryptobox.core.container.CONTAINERTYPES + """ + if self.__is_luks_partition(): + return CONTAINERTYPES["luks"] + type_of_partition = self.__get_type_id_of_partition() + if type_of_partition in FSTYPES["plain"]: + return CONTAINERTYPES["plain"] + if type_of_partition in FSTYPES["swap"]: + return CONTAINERTYPES["swap"] + return CONTAINERTYPES["unused"] + + + def __get_type_id_of_partition(self): + "returns the type of the partition (see 'man blkid')" + proc = subprocess.Popen( + shell = False, + stdout = subprocess.PIPE, + stderr = subprocess.PIPE, + args = [ self.cbox.prefs["Programs"]["blkid"], + "-s", "TYPE", + "-o", "value", + "-c", os.devnull, + "-w", os.devnull, + self.device ]) + (stdout, stderr) = proc.communicate() + if proc.returncode == 0: + ## we found a uuid + return stdout.strip() + elif proc.returncode == 2: + ## failed to find the attribute - no problem + return None + else: + ## something strange happened + self.cbox.log.warn("retrieving of partition type via 'blkid' failed: %s" % \ + (stderr.strip(), )) + return None + + + def __is_luks_partition(self): + "check if the given device is a luks partition" + proc = subprocess.Popen( + shell = False, + stdin = None, + stdout = subprocess.PIPE, + stderr = subprocess.PIPE, + args = [ + self.cbox.prefs["Programs"]["cryptsetup"], + "--batch-mode", + "isLuks", + self.device]) + proc.wait() + return proc.returncode == 0 + + + def __get_mount_point(self): + "return the name of the mountpoint of this volume" + return os.path.join(self.cbox.prefs["Locations"]["MountParentDir"], self.name) + + + def __mount_luks(self, password): + "mount a luks partition" + if not password: + raise CBInvalidPassword("no password supplied for luksOpen") + if self.is_mounted(): + raise CBVolumeIsActive("this container is already active") + self.__umount_luks() + self.__clean_mount_dirs() + if not os.path.exists(self.__get_mount_point()): + self.__create_mount_directory(self.__get_mount_point()) + if not os.path.exists(self.__get_mount_point()): + err_msg = "Could not create mountpoint (%s)" % (self.__get_mount_point(), ) + self.cbox.log.error(err_msg) + raise CBMountError(err_msg) + self.cbox.send_event_notification("premount", self.__get_event_args()) + proc = subprocess.Popen( + shell = False, + stdin = subprocess.PIPE, + stdout = subprocess.PIPE, + stderr = subprocess.PIPE, + args = [ + self.cbox.prefs["Programs"]["super"], + self.cbox.prefs["Programs"]["CryptoBoxRootActions"], + "cryptsetup", + "luksOpen", + self.device, + self.name, + "--batch-mode"]) + proc.stdin.write(password) + (output, errout) = proc.communicate() + if proc.returncode != 0: + err_msg = "Could not open the luks mapping: %s" % (errout.strip(), ) + self.cbox.log.warn(err_msg) + raise CBMountError(err_msg) + proc = subprocess.Popen( + shell = False, + stdin = None, + stdout = subprocess.PIPE, + stderr = subprocess.PIPE, + args = [ + self.cbox.prefs["Programs"]["super"], + self.cbox.prefs["Programs"]["CryptoBoxRootActions"], + "mount", + os.path.join(self.__dmDir, self.name), + self.__get_mount_point()]) + proc.wait() + if proc.returncode != 0: + err_msg = "Could not mount the filesystem: %s" % (proc.stderr.read().strip(), ) + self.cbox.log.warn(err_msg) + raise CBMountError(err_msg) + ## chmod the mount directory to 0777 - this is the easy way to avoid problems + ## this only works for ext2/3 - vfat silently ignore it + ## we mounted vfat partitions with umask=0000 + try: + os.chmod(self.__get_mount_point(), 0777) + except OSError: + self.cbox.log.warn("Failed to set write permission for the mount directory") + self.cbox.send_event_notification("postmount", self.__get_event_args()) + + + def __umount_luks(self): + "umount a luks partition" + self.cbox.send_event_notification("preumount", self.__get_event_args()) + if self.is_mounted(): + proc = subprocess.Popen( + shell = False, + stdin = None, + stdout = subprocess.PIPE, + stderr = subprocess.PIPE, + args = [ + self.cbox.prefs["Programs"]["super"], + self.cbox.prefs["Programs"]["CryptoBoxRootActions"], + "umount", + self.__get_mount_point()]) + proc.wait() + if proc.returncode != 0: + err_msg = "Could not umount the filesystem: %s" % (proc.stderr.read().strip(), ) + self.cbox.log.warn(err_msg) + raise CBUmountError(err_msg) + if os.path.exists(os.path.join(self.__dmDir, self.name)): + proc = subprocess.Popen( + shell = False, + stdin = None, + stdout = subprocess.PIPE, + stderr = subprocess.PIPE, + args = [ + self.cbox.prefs["Programs"]["super"], + self.cbox.prefs["Programs"]["CryptoBoxRootActions"], + "cryptsetup", + "luksClose", + self.name, + "--batch-mode"]) + proc.wait() + if proc.returncode != 0: + err_msg = "Could not remove the luks mapping: %s" % (proc.stderr.read().strip(), ) + self.cbox.log.warn(err_msg) + raise CBUmountError(err_msg) + self.cbox.send_event_notification("postumount", self.__get_event_args()) + + + def __mount_plain(self): + "mount a plaintext partition" + if self.is_mounted(): + raise CBVolumeIsActive("this container is already active") + self.__clean_mount_dirs() + if not os.path.exists(self.__get_mount_point()): + self.__create_mount_directory(self.__get_mount_point()) + if not os.path.exists(self.__get_mount_point()): + err_msg = "Could not create mountpoint (%s)" % (self.__get_mount_point(), ) + self.cbox.log.error(err_msg) + raise CBMountError(err_msg) + self.cbox.send_event_notification("premount", self.__get_event_args()) + proc = subprocess.Popen( + shell = False, + stdin = None, + stdout = subprocess.PIPE, + stderr = subprocess.PIPE, + args = [ + self.cbox.prefs["Programs"]["super"], + self.cbox.prefs["Programs"]["CryptoBoxRootActions"], + "mount", + self.device, + self.__get_mount_point()]) + proc.wait() + if proc.returncode != 0: + err_msg = "Could not mount the filesystem: %s" % (proc.stderr.read().strip(), ) + self.cbox.log.warn(err_msg) + raise CBMountError(err_msg) + ## chmod the mount directory to 0777 - this is the easy way to avoid problems + ## this only works for ext2/3 - vfat silently ignore it + ## we mounted vfat partitions with umask=0000 + try: + os.chmod(self.__get_mount_point(), 0777) + except OSError: + self.cbox.log.warn("Failed to set write permission for the mount directory") + self.cbox.send_event_notification("postmount", self.__get_event_args()) + + + def __umount_plain(self): + "umount a plaintext partition" + if not self.is_mounted(): + self.cbox.log.info("trying to umount while volume (%s) is not mounted" % \ + self.get_device()) + return + self.cbox.send_event_notification("preumount", self.__get_event_args()) + proc = subprocess.Popen( + shell = False, + stdin = None, + stdout = subprocess.PIPE, + stderr = subprocess.PIPE, + args = [ + self.cbox.prefs["Programs"]["super"], + self.cbox.prefs["Programs"]["CryptoBoxRootActions"], + "umount", + self.__get_mount_point()]) + proc.wait() + if proc.returncode != 0: + err_msg = "Could not umount the filesystem: %s" % (proc.stderr.read().strip(), ) + self.cbox.log.warn(err_msg) + raise CBUmountError(err_msg) + self.cbox.send_event_notification("postumount", self.__get_event_args()) + + + def __create_plain(self, fs_type="ext3"): + "make a plaintext partition" + import threading + if self.is_mounted(): + raise CBVolumeIsActive( + "deactivate the partition before filesystem initialization") + def format(): + """This function will get called as a seperate thread. + + To avoid the non-sharing cpu distribution between the formatting thread + and the main interface, we fork and let the parent wait for the child. + This should be handled using the kernel's threading features. + """ + ## create a local object - to store different values for each thread + loc_data = threading.local() + loc_data.old_name = self.get_name() + self.set_busy(True, 600) + ## give the main thread a chance to continue + loc_data.child_pid = os.fork() + if loc_data.child_pid == 0: + loc_data.proc = subprocess.Popen( + shell = False, + stdin = None, + stdout = subprocess.PIPE, + stderr = subprocess.PIPE, + args = [ + self.cbox.prefs["Programs"]["nice"], + self.cbox.prefs["Programs"]["mkfs"], + "-t", fs_type, self.device]) + loc_data.proc.wait() + ## wait to allow error detection + if loc_data.proc.returncode == 0: + time.sleep(5) + ## skip cleanup stuff (as common for sys.exit) + os._exit(0) + else: + os.waitpid(loc_data.child_pid, 0) + try: + self.set_name(loc_data.old_name) + except CBNameIsInUse: + pass + self.set_busy(False) + bg_task = threading.Thread(target=format) + bg_task.setDaemon(True) + bg_task.start() + time.sleep(3) + ## if the thread exited very fast, then it failed + if not bg_task.isAlive(): + raise CBCreateError("formatting of device (%s) failed out " % self.device \ + + "of unknown reasons") + + + def __create_luks(self, password, fs_type="ext3"): + """Create a luks partition. + """ + import threading + if not password: + raise CBInvalidPassword("no password supplied for new luks mapping") + if self.is_mounted(): + raise CBVolumeIsActive("deactivate the partition before filesystem initialization") + ## remove any potential open luks mapping + self.__umount_luks() + ## create the luks header + proc = subprocess.Popen( + shell = False, + stdin = subprocess.PIPE, + stdout = subprocess.PIPE, + stderr = subprocess.PIPE, + args = [ + self.cbox.prefs["Programs"]["super"], + self.cbox.prefs["Programs"]["CryptoBoxRootActions"], + "cryptsetup", + "luksFormat", + self.device, + "--batch-mode", + "--cipher", self.cbox.prefs["Main"]["DefaultCipher"], + "--iter-time", "2000"]) + proc.stdin.write(password) + (output, errout) = proc.communicate() + if proc.returncode != 0: + err_msg = "Could not create the luks header: %s" % (errout.strip(), ) + self.cbox.log.error(err_msg) + raise CBCreateError(err_msg) + ## open the luks container for mkfs + proc = subprocess.Popen( + shell = False, + stdin = subprocess.PIPE, + stdout = subprocess.PIPE, + stderr = subprocess.PIPE, + args = [ + self.cbox.prefs["Programs"]["super"], + self.cbox.prefs["Programs"]["CryptoBoxRootActions"], + "cryptsetup", + "luksOpen", + self.device, + self.name, + "--batch-mode"]) + proc.stdin.write(password) + (output, errout) = proc.communicate() + if proc.returncode != 0: + err_msg = "Could not open the new luks mapping: %s" % (errout.strip(), ) + self.cbox.log.error(err_msg) + raise CBCreateError(err_msg) + def format_luks(): + """This function will get called as a seperate thread. + + To avoid the non-sharing cpu distribution between the formatting thread + and the main interface, we fork and let the parent wait for the child. + This should be handled using the kernel's threading features. + """ + ## create a local object - to store different values for each thread + loc_data = threading.local() + loc_data.old_name = self.get_name() + self.set_busy(True, 600) + loc_data.child_pid = os.fork() + if loc_data.child_pid == 0: + ## make the filesystem + loc_data.proc = subprocess.Popen( + shell = False, + stdin = None, + stdout = subprocess.PIPE, + stderr = subprocess.PIPE, + args = [ + self.cbox.prefs["Programs"]["nice"], + self.cbox.prefs["Programs"]["mkfs"], + "-t", fs_type, + os.path.join(self.__dmDir, self.name)]) + loc_data.proc.wait() + ## wait to allow error detection + if loc_data.proc.returncode == 0: + time.sleep(5) + ## skip cleanup stuff (as common for sys.exit) + os._exit(0) + else: + os.waitpid(loc_data.child_pid, 0) + self.set_name(loc_data.old_name) + self.set_busy(False) + ## remove the mapping - for every exit status + self.__umount_luks() + bg_task = threading.Thread(target=format_luks) + bg_task.setDaemon(True) + bg_task.start() + time.sleep(3) + ## if the thread exited very fast, then it failed + if not bg_task.isAlive(): + raise CBCreateError("formatting of device (%s) failed out " % self.device \ + + "of unknown reasons") + + + def __clean_mount_dirs(self): + """ remove all unnecessary subdirs of the mount parent directory + this should be called for every (u)mount """ + subdirs = os.listdir(self.cbox.prefs["Locations"]["MountParentDir"]) + for one_dir in subdirs: + abs_dir = os.path.join(self.cbox.prefs["Locations"]["MountParentDir"], one_dir) + if (not os.path.islink(abs_dir)) \ + and os.path.isdir(abs_dir) \ + and (not os.path.ismount(abs_dir)) \ + and (os.path.isfile(os.path.join(abs_dir,MOUNT_DIR_MARKER))) \ + and (len(os.listdir(abs_dir)) == 1): + try: + os.remove(os.path.join(abs_dir, MOUNT_DIR_MARKER)) + os.rmdir(abs_dir) + except OSError, err_msg: + ## we do not care too much about unclean cleaning ... + self.cbox.log.info("failed to clean a mountpoint (%s): %s" % \ + (abs_dir, str(err_msg))) + + + def __create_mount_directory(self, dirname): + """create and mark a mount directory + this marking helps to remove old mountdirs safely""" + os.mkdir(dirname) + try: + mark_file = file(os.path.join(dirname, MOUNT_DIR_MARKER), "w") + mark_file.close() + except OSError, err_msg: + ## we do not care too much about the marking + self.cbox.log.info("failed to mark a mountpoint (%s): %s" % (dirname, str(err_msg))) + + + def __get_event_args(self): + """Return an array of arguments for event scripts. + + for now supported: pre/post-mount/umount events + """ + type_text = [e for e in CONTAINERTYPES.keys() + if CONTAINERTYPES[e] == self.get_type()][0] + return [self.get_device(), self.get_name(), type_text, self.__get_mount_point()] + diff --git a/v0.3.4.5/src/cryptobox/core/exceptions.py b/v0.3.4.5/src/cryptobox/core/exceptions.py new file mode 100644 index 0000000..c3f0343 --- /dev/null +++ b/v0.3.4.5/src/cryptobox/core/exceptions.py @@ -0,0 +1,152 @@ +# +# Copyright 2006 sense.lab e.V. +# +# This file is part of the CryptoBox. +# +# The CryptoBox 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 CryptoBox 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 the CryptoBox; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +""" +exceptions of the cryptobox package +""" + +__revision__ = "$Id" + + +class CBError(Exception): + """base class for exceptions of the cryptobox""" + pass + + +class CBConfigError(CBError): + """any kind of error related to the configuration of a cryptobox""" + pass + + +class CBConfigUnavailableError(CBConfigError): + """config file/input was not available at all""" + + def __init__(self, source=None): + self.source = source + + def __str__(self): + if self.source: + return "failed to access the configuration of the cryptobox: %s" % self.source + else: + return "failed to access the configuration of the cryptobox" + + +class CBConfigUndefinedError(CBConfigError): + """a specific configuration setting was not defined""" + + def __init__(self, section, name=None): + self.section = section + self.name = name + + def __str__(self): + """Output the appropriate string: for a setting or a section. + """ + if self.name: + # setting + return "undefined configuration setting: [" + str(self.section) \ + + "]->" + str(self.name) + " - please check your configuration file" + else: + # section + return "undefined configuration section: [" + str(self.section) \ + + "] - please check your configuration file" + + + +class CBConfigInvalidValueError(CBConfigError): + """a configuration setting was invalid somehow""" + + def __init__(self, section, name, value, reason): + self.section = section + self.name = name + self.value = value + self.reason = reason + + + def __str__(self): + """Return the error description. + """ + return "invalid configuration setting [%s]->%s (%s): %s" % \ + (self.section, self.name, self.value, self.reason) + + +class CBEnvironmentError(CBError): + """some part of the environment of the cryptobox is broken + e.g. the wrong version of a required program + """ + + def __init__(self, desc): + self.desc = desc + + def __str__(self): + """Return the error description. + """ + return "misconfiguration detected: %s" % self.desc + + +class CBContainerError(CBError): + """Any error raised while manipulating a cryptobox container. + """ + + +class CBCreateError(CBContainerError): + """Raised if a container could not be created (formatted). + """ + pass + +class CBVolumeIsActive(CBContainerError): + """Raised if a container was active even if it may not for a specific action. + """ + pass + +class CBInvalidName(CBContainerError): + """Raised if someone tried to set an invalid container name. + """ + pass + +class CBNameIsInUse(CBContainerError): + """Raised if the new name of a container is already in use. + """ + pass + +class CBInvalidType(CBContainerError): + """Raised if a container is of an invalid type for a choosen action. + """ + pass + +class CBInvalidPassword(CBContainerError): + """Someone tried to open an ecnrypted container with the wrong password. + """ + pass + +class CBChangePasswordError(CBContainerError): + """Changing of the password of an encrypted container failed. + """ + pass + +class CBMountError(CBContainerError): + """Failed to mount a container. + """ + pass + +class CBUmountError(CBContainerError): + """Failed to umount a container. + """ + pass + diff --git a/v0.3.4.5/src/cryptobox/core/main.py b/v0.3.4.5/src/cryptobox/core/main.py new file mode 100644 index 0000000..fe04c89 --- /dev/null +++ b/v0.3.4.5/src/cryptobox/core/main.py @@ -0,0 +1,306 @@ +# +# Copyright 2006 sense.lab e.V. +# +# This file is part of the CryptoBox. +# +# The CryptoBox 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 CryptoBox 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 the CryptoBox; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +''' +This is the web interface for a fileserver managing encrypted filesystems. +''' + +__revision__ = "$Id" + +import sys +import cryptobox.core.container as cbxContainer +from cryptobox.core.exceptions import CBEnvironmentError, CBConfigUndefinedError +import re +import os +import cryptobox.core.tools as cbxTools +import subprocess +import threading + + +class CryptoBox: + '''this class rules them all! + + put things like logging, conf and other stuff in here, + that might be used by more classes, it will be passed on to them''' + + + def __init__(self, config_file=None): + import cryptobox.core.settings as cbxSettings + self.log = self.__get_startup_logger() + self.prefs = cbxSettings.CryptoBoxSettings(config_file) + self.__run_tests() + self.__containers = [] + self.__busy_devices = {} + self.__busy_devices_sema = threading.BoundedSemaphore() + self.reread_container_list() + + + def setup(self): + """Initialize the cryptobox. + """ + self.log.info("Starting up the CryptoBox ...") + + + def cleanup(self): + """Umount all containers and shutdown everything safely. + """ + self.log.info("Shutting down the CryptoBox ...") + ## umount all containers + self.log.info("Umounting all volumes ...") + self.reread_container_list() + for cont in self.get_container_list(): + if cont.is_mounted(): + cont.umount() + ## save all settings + self.log.info("Storing local settings ...") + ## problems with storing are logged automatically + self.prefs.write() + # TODO: improve the configuration partition handling + self.prefs.umount_partition() + ## shutdown logging as the last step + try: + self.log.info("Turning off logging ...") + self.log.close() + except AttributeError: + ## there should be 'close' action - but it may fail silently + pass + + + def __get_startup_logger(self): + """Initialize the configured logging facility of the CryptoBox. + + use it with: 'self.log.[debug|info|warning|error|critical](logmessage)' + all classes should get the logging instance during __init__: + self.log = logging.getLogger("CryptoBox") + + first we output all warnings/errors to stderr + as soon as we opened the config file successfully, we redirect debug output + to the configured destination + """ + import logging + ## basicConfig(...) needs python >= 2.4 + try: + log_handler = logging.getLogger("CryptoBox") + logging.basicConfig( + format = '%(asctime)s CryptoBox %(levelname)s: %(message)s', + stderr = sys.stderr) + log_handler.setLevel(logging.ERROR) + log_handler.info("loggingsystem is up'n running") + ## from now on everything can be logged via self.log... + except: + raise CBEnvironmentError("couldn't initialise the loggingsystem. I give up.") + return log_handler + + + def __run_tests(self): + """Do some initial tests. + """ + self.__run_test_root_priv() + + + def __run_test_root_priv(self): + """Try to run 'super' with 'CryptoBoxRootActions'. + """ + try: + devnull = open(os.devnull, "w") + except IOError: + raise CBEnvironmentError("could not open %s for writing!" % os.devnull) + try: + prog_super = self.prefs["Programs"]["super"] + except KeyError: + raise CBConfigUndefinedError("Programs", "super") + try: + prog_rootactions = self.prefs["Programs"]["CryptoBoxRootActions"] + except KeyError: + raise CBConfigUndefinedError("Programs", "CryptoBoxRootActions") + try: + proc = subprocess.Popen( + shell = False, + stdout = devnull, + stderr = devnull, + args = [prog_super, prog_rootactions, "check"]) + except OSError: + raise CBEnvironmentError( + "failed to execute 'super' (%s)" % self.prefs["Programs"]["super"]) + proc.wait() + if proc.returncode != 0: + raise CBEnvironmentError("failed to call CryptoBoxRootActions (" + + prog_rootactions + ") via 'super' - maybe you did not add the " + + "appropriate line to '/etc/super.tab'?") + + + def reread_container_list(self): + """Reinitialize the list of available containers. + + This should be called whenever the available containers may have changed. + E.g.: after partitioning and after device addition/removal + """ + self.log.debug("rereading container list") + self.__containers = [] + for device in cbxTools.get_available_partitions(): + if self.is_device_allowed(device) and not self.is_config_partition(device): + self.__containers.append(cbxContainer.CryptoBoxContainer(device, self)) + ## sort by container name + self.__containers.sort(cmp = lambda x, y: x.get_name() < y.get_name() and -1 or 1) + + + def get_device_busy_state(self, device): + """Return whether a device is currently marked as busy or not. + + The busy flag can be turned off manually (recommended) or the timeout + can expire. + """ + import time + self.__busy_devices_sema.acquire() + ## not marked as busy + if not self.__busy_devices.has_key(device): + self.__busy_devices_sema.release() + return False + ## timer is expired + if time.time() > self.__busy_devices[device]: + del self.__busy_devices[device] + self.__busy_devices_sema.release() + return False + self.__busy_devices_sema.release() + return True + + + def set_device_busy_state(self, device, new_state, timeout=300): + """Mark a device as busy. + + This is especially useful during formatting, as this may take a long time. + """ + import time + self.__busy_devices_sema.acquire() + self.log.debug("Turn busy flag %s: %s" % (new_state and "on" or "off", device)) + if new_state: + self.__busy_devices[device] = time.time() + timeout + else: + if self.__busy_devices.has_key(device): + del self.__busy_devices[device] + self.log.debug("Current busy flags: %s" % str(self.__busy_devices)) + self.__busy_devices_sema.release() + + + def is_config_partition(self, device): + """Check if a given partition contains configuration informations. + + The check is done by comparing the label of the filesystem with a string. + """ + proc = subprocess.Popen( + shell = False, + stdout = subprocess.PIPE, + stderr = subprocess.PIPE, + args = [ + self.prefs["Programs"]["blkid"], + "-c", os.path.devnull, + "-o", "value", + "-s", "LABEL", + device]) + (output, error) = proc.communicate() + return output.strip() == self.prefs["Main"]["ConfigVolumeLabel"] + + + def is_device_allowed(self, devicename): + """check if a device is white-listed for being used as cryptobox containers + + also check, if the device is readable and writeable for the current user + """ + import types + devicename = os.path.abspath(devicename) + if not os.access(devicename, os.R_OK): + self.log.debug("Skipping device without read permissions: %s" % devicename) + return False + if not os.access(devicename, os.W_OK): + self.log.debug("Skipping device without write permissions: %s" % devicename) + return False + allowed = self.prefs["Main"]["AllowedDevices"] + if type(allowed) == types.StringType: + allowed = [allowed] + for a_dev in allowed: + if not a_dev: + continue + ## double dots are not allowed (e.g. /dev/ide/../sda) + if re.search("/\.\./", devicename): + continue + ## it is not possible to check for 'realpath' - that does not work + ## for the cryptobox as /dev/ is bind-mounted (real hda-name is /opt/...) + if re.search('^%s' % a_dev, devicename): + self.log.debug("Adding valid device: %s" % devicename) + return True + self.log.debug("Skipping device not listed in Main->AllowedDevices: %s" \ + % devicename) + return False + + + def get_container_list(self, filter_type=None, filter_name=None): + "retrieve the list of all containers of this cryptobox" + try: + result = self.__containers[:] + if filter_type != None: + if filter_type in range(len(cbxContainer.CONTAINERTYPES)): + return [e for e in self.__containers if e.get_type() == filter_type] + else: + self.log.info("invalid filter_type (%d)" % filter_type) + result.clear() + if filter_name != None: + result = [e for e in self.__containers if e.get_name() == filter_name] + return result + except AttributeError: + return [] + + + def get_container(self, device): + "retrieve the container element for this device" + all = [e for e in self.get_container_list() if e.device == device] + if all: + return all[0] + else: + return None + + + def send_event_notification(self, event, event_infos): + """call all available scripts in the event directory with some event information""" + event_dir = self.prefs["Locations"]["EventDir"] + for fname in os.listdir(event_dir): + real_fname = os.path.join(event_dir, fname) + if os.path.isfile(real_fname) and os.access(real_fname, os.X_OK): + cmd_args = [ self.prefs["Programs"]["super"], + self.prefs["Programs"]["CryptoBoxRootActions"], + "event", real_fname, event] + cmd_args.extend(event_infos) + proc = subprocess.Popen( + shell = False, + stdout = subprocess.PIPE, + stderr = subprocess.PIPE, + args = cmd_args) + (stdout, stderr) = proc.communicate() + if proc.returncode != 0: + self.log.warn( + "an event script (%s) failed (exitcode=%d) to handle an event (%s): %s" % + (real_fname, proc.returncode, event, stderr.strip())) + else: + self.log.info("event handler (%s) finished successfully: %s" % + (real_fname, event)) + + +if __name__ == "__main__": + CryptoBox() + diff --git a/v0.3.4.5/src/cryptobox/core/settings.py b/v0.3.4.5/src/cryptobox/core/settings.py new file mode 100644 index 0000000..a0c6bd1 --- /dev/null +++ b/v0.3.4.5/src/cryptobox/core/settings.py @@ -0,0 +1,752 @@ +# +# Copyright 2006 sense.lab e.V. +# +# This file is part of the CryptoBox. +# +# The CryptoBox 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 CryptoBox 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 the CryptoBox; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +"""Manage the configuration of a CryptoBox +""" + +__revision__ = "$Id" + +from cryptobox.core.exceptions import * +import logging +import subprocess +import os +import configobj, validate +import syslog + + +CONF_LOCATIONS = [ + "./cryptobox.conf", + "~/.cryptobox.conf", + "/etc/cryptobox-server/cryptobox.conf"] + +VOLUMESDB_FILE = "cryptobox_volumes.db" +PLUGINCONF_FILE = "cryptobox_plugins.conf" +USERDB_FILE = "cryptobox_users.db" + + +class CryptoBoxSettings: + """Manage the various configuration files of the CryptoBox + """ + + def __init__(self, config_file=None): + self.__is_initialized = False + self.log = logging.getLogger("CryptoBox") + config_file = self.__get_config_filename(config_file) + self.log.info("loading config file: %s" % config_file) + self.prefs = self.__get_preferences(config_file) + if not "PluginSettings" in self.prefs: + self.prefs["PluginSettings"] = {} + self.__validate_config() + self.__configure_log_handler() + self.__check_unknown_preferences() + self.prepare_partition() + self.volumes_db = self.__get_volumes_database() + self.plugin_conf = self.__get_plugin_config() + self.user_db = self.__get_user_db() + self.misc_files = [] + self.reload_misc_files() + self.__is_initialized = True + + + def reload_misc_files(self): + """Call this method after creating or removing a 'misc' configuration file + """ + self.misc_files = self.__get_misc_files() + + + def write(self): + """ + write all local setting files including the content of the "misc" subdirectory + """ + status = True + try: + self.volumes_db.write() + except IOError: + self.log.warn("Could not save the volume database") + status = False + try: + self.plugin_conf.write() + except IOError: + self.log.warn("Could not save the plugin configuration") + status = False + try: + self.user_db.write() + except IOError: + self.log.warn("Could not save the user database") + status = False + for misc_file in self.misc_files: + if not misc_file.save(): + self.log.warn("Could not save a misc setting file (%s)" % misc_file.filename) + status = False + return status + + + def get_misc_config_filename(self, name): + """Return an absolute filename for a given filename 'name' + + 'name' should not contain slashes (no directory part!) + """ + return os.path.join(self.prefs["Locations"]["SettingsDir"], "misc", name) + + + def create_misc_config_file(self, name, content): + """Create a new configuration file in the 'settings' directory + + "name" should be the basename (without a directory) + "content" will be directly written to the file + this method may throw an IOException + """ + misc_conf_file = self.get_misc_config_filename(name) + misc_conf_dir = os.path.dirname(misc_conf_file) + if not os.path.isdir(misc_conf_dir): + try: + os.mkdir(misc_conf_dir) + except OSError, err_msg: + ## the caller expects only IOError + raise IOError, err_msg + cfile = open(misc_conf_file, "w") + try: + cfile.write(content) + except IOError: + cfile.close() + raise + cfile.close() + ## reread all misc files automatically - this should be ok + self.reload_misc_files() + + + def requires_partition(self): + return bool(self.prefs["Main"]["UseConfigPartition"]) + + + def get_active_partition(self): + """Return the currently active cnfiguration partition. + """ + settings_dir = self.prefs["Locations"]["SettingsDir"] + if not os.path.ismount(settings_dir): + return None + for line in file("/proc/mounts"): + fields = line.split(" ") + mount_dir = fields[1] + fs_type = fields[2] + if fs_type == "tmpfs": + ## skip ramdisks - these are not really "active partitions" + continue + try: + if os.path.samefile(mount_dir, settings_dir): + return fields[0] + except OSError: + pass + ## no matching entry found + return None + + + def mount_partition(self): + """Mount a config partition. + """ + self.log.debug("trying to mount configuration partition") + if not self.requires_partition(): + self.log.warn("mountConfigPartition: configuration partition is " + + "not required - mounting anyway") + if self.get_active_partition(): + self.log.warn("mountConfigPartition: configuration partition already " + + "mounted - not mounting again") + return False + conf_partitions = self.get_available_partitions() + mount_dir = self.prefs["Locations"]["SettingsDir"] + if not conf_partitions: + ## return, if tmpfs is already mounted + if os.path.ismount(mount_dir): + self.log.info("A ramdisk seems to be already mounted as a config " \ + + "partition - doing nothing ...") + ## return without any actions + return True + self.log.warn("no configuration partition found - you have to create " + + "it first") + ## mount tmpfs instead to provide a place for storing stuff + ## "_tmpfs_" as parameter for mount is interpreted as a magic word + ## by CryptoBoxRootActions + proc = subprocess.Popen( + shell = False, + stdout = subprocess.PIPE, + stderr = subprocess.PIPE, + args = [ + self.prefs["Programs"]["super"], + self.prefs["Programs"]["CryptoBoxRootActions"], + "mount", + "_tmpfs_", + mount_dir ]) + (stdout, stderr) = proc.communicate() + if proc.returncode != 0: + self.log.error("Failed to mount a ramdisk for storing settings: %s" \ + % stderr) + return False + self.log.info("Ramdisk (tmpfs) mounted as config partition ...") + else: + partition = conf_partitions[0] + ## umount tmpfs in case it is active + if os.path.ismount(mount_dir): + self.umount_partition() + proc = subprocess.Popen( + shell = False, + stdout = subprocess.PIPE, + stderr = subprocess.PIPE, + args = [ + self.prefs["Programs"]["super"], + self.prefs["Programs"]["CryptoBoxRootActions"], + "mount", + partition, + mount_dir ]) + (stdout, stderr) = proc.communicate() + if proc.returncode != 0: + self.log.error("Failed to mount the configuration partition (%s): %s" % \ + (partition, stderr)) + return False + self.log.info("configuration partition mounted: %s" % partition) + ## write config files (not during first initialization of this object) + if self.__is_initialized: + self.write() + return True + + + def umount_partition(self): + """Umount the currently active configuration partition. + """ + mount_dir = self.prefs["Locations"]["SettingsDir"] + if not os.path.ismount(mount_dir): + self.log.warn("umountConfigPartition: no configuration partition mounted") + return False + self.reload_misc_files() + proc = subprocess.Popen( + shell = False, + stdout = subprocess.PIPE, + stderr = subprocess.PIPE, + args = [ + self.prefs["Programs"]["super"], + self.prefs["Programs"]["CryptoBoxRootActions"], + "umount", + mount_dir ]) + (stdout, stderr) = proc.communicate() + if proc.returncode != 0: + self.log.error("Failed to unmount the configuration partition: %s" % stderr) + return False + self.log.info("configuration partition unmounted") + return True + + + def get_available_partitions(self): + """returns a sequence of found config partitions""" + self.log.debug("Retrieving available configuration partitions ...") + proc = subprocess.Popen( + shell = False, + stdout = subprocess.PIPE, + stderr = subprocess.PIPE, + args = [ + self.prefs["Programs"]["blkid"], + "-c", os.path.devnull, + "-t", "LABEL=%s" % self.prefs["Main"]["ConfigVolumeLabel"] ]) + (output, error) = proc.communicate() + if proc.returncode == 2: + self.log.info("No configuration partitions found") + return [] + elif proc.returncode == 4: + self.log.warn("Failed to call 'blkid' for unknown reasons.") + return [] + elif proc.returncode == 0: + if output: + return [e.strip().split(":", 1)[0] for e in output.splitlines()] + else: + return [] + else: + self.log.warn("Unknown exit code of 'blkid': %d - %s" \ + % (proc.returncode, error)) + + + def prepare_partition(self): + """Mount a config partition if necessary. + """ + if self.requires_partition() and not self.get_active_partition(): + self.mount_partition() + + + def __getitem__(self, key): + """redirect all requests to the 'prefs' attribute""" + return self.prefs[key] + + + def __get_preferences(self, config_file): + """Load the CryptoBox configuration. + """ + import StringIO + config_rules = StringIO.StringIO(self.validation_spec) + try: + prefs = configobj.ConfigObj(config_file, configspec=config_rules) + if prefs: + self.log.info("found config: %s" % prefs.items()) + else: + raise CBConfigUnavailableError( + "failed to load the config file: %s" % config_file) + except IOError: + raise CBConfigUnavailableError( + "unable to open the config file: %s" % config_file) + return prefs + + + def __validate_config(self): + """Check the configuration settings and cast value types. + """ + result = self.prefs.validate(CryptoBoxSettingsValidator(), preserve_errors=True) + error_list = configobj.flatten_errors(self.prefs, result) + if not error_list: + return + error_msgs = [] + for sections, key, text in error_list: + section_name = "->".join(sections) + if not text: + error_msg = "undefined configuration value (%s) in section '%s'" % \ + (key, section_name) + else: + error_msg = "invalid configuration value (%s) in section '%s': %s" % \ + (key, section_name, text) + error_msgs.append(error_msg) + raise CBConfigError, "\n".join(error_msgs) + + + def __check_unknown_preferences(self): + """Check the configuration file for unknown settings to avoid spelling mistakes. + """ + import StringIO + config_rules = configobj.ConfigObj(StringIO.StringIO(self.validation_spec), + list_values=False) + self.__recursive_section_check("", self.prefs, config_rules) + + + def __recursive_section_check(self, section_path, section_config, section_rules): + """should be called by '__check_unknown_preferences' for every section + sends a warning message to the logger for every undefined (see validation_spec) + configuration setting + """ + for section in section_config.keys(): + element_path = section_path + section + if section in section_rules.keys(): + if isinstance(section_config[section], configobj.Section): + if isinstance(section_rules[section], configobj.Section): + self.__recursive_section_check(element_path + "->", + section_config[section], section_rules[section]) + else: + self.log.warn("configuration setting should be a value " + + "instead of a section name: %s" % element_path) + else: + if not isinstance(section_rules[section], configobj.Section): + pass # good - the setting is valid + else: + self.log.warn("configuration setting should be a section " + + "name instead of a value: %s" % element_path) + elif element_path.startswith("PluginSettings->"): + ## ignore plugin settings + pass + else: + self.log.warn("unknown configuration setting: %s" % element_path) + + + def __get_plugin_config(self): + """Load the plugin configuration file if it exists. + """ + import StringIO + plugin_rules = StringIO.StringIO(self.pluginValidationSpec) + try: + try: + plugin_conf_file = os.path.join( + self.prefs["Locations"]["SettingsDir"], PLUGINCONF_FILE) + except KeyError: + raise CBConfigUndefinedError("Locations", "SettingsDir") + except SyntaxError: + raise CBConfigInvalidValueError("Locations", "SettingsDir", plugin_conf_file, + "failed to interprete the filename of the plugin config file " + + "correctly (%s)" % plugin_conf_file) + ## create plugin_conf_file if necessary + if os.path.exists(plugin_conf_file): + plugin_conf = configobj.ConfigObj(plugin_conf_file, configspec=plugin_rules) + else: + try: + plugin_conf = configobj.ConfigObj(plugin_conf_file, + configspec=plugin_rules, create_empty=True) + except IOError: + plugin_conf = configobj.ConfigObj(configspec=plugin_rules) + plugin_conf.filename = plugin_conf_file + ## validate and convert values according to the spec + plugin_conf.validate(validate.Validator()) + return plugin_conf + + + def __get_volumes_database(self): + """Load the volume database file if it exists. + """ + #TODO: add configuration specification and validation + try: + try: + conf_file = os.path.join( + self.prefs["Locations"]["SettingsDir"], VOLUMESDB_FILE) + except KeyError: + raise CBConfigUndefinedError("Locations", "SettingsDir") + except SyntaxError: + raise CBConfigInvalidValueError("Locations", "SettingsDir", conf_file, + "failed to interprete the filename of the volume database " + + "correctly (%s)" % conf_file) + ## create conf_file if necessary + if os.path.exists(conf_file): + conf = configobj.ConfigObj(conf_file) + else: + try: + conf = configobj.ConfigObj(conf_file, create_empty=True) + except IOError: + conf = configobj.ConfigObj() + conf.filename = conf_file + return conf + + + def __get_user_db(self): + """Load the user database file if it exists. + """ + import StringIO, sha + user_db_rules = StringIO.StringIO(self.userDatabaseSpec) + try: + try: + user_db_file = os.path.join( + self.prefs["Locations"]["SettingsDir"], USERDB_FILE) + except KeyError: + raise CBConfigUndefinedError("Locations", "SettingsDir") + except SyntaxError: + raise CBConfigInvalidValueError("Locations", "SettingsDir", user_db_file, + "failed to interprete the filename of the users database file " + + "correctly (%s)" % user_db_file) + ## create user_db_file if necessary + if os.path.exists(user_db_file): + user_db = configobj.ConfigObj(user_db_file, configspec=user_db_rules) + else: + try: + user_db = configobj.ConfigObj(user_db_file, + configspec=user_db_rules, create_empty=True) + except IOError: + user_db = configobj.ConfigObj(configspec=user_db_rules) + user_db.filename = user_db_file + ## validate and set default value for "admin" user + user_db.validate(validate.Validator()) + ## define password hash function - never use "sha" directly - SPOT + user_db.get_digest = lambda password: sha.new(password).hexdigest() + return user_db + + + def __get_misc_files(self): + """Load miscelleanous configuration files. + + e.g.: an ssl certificate, ... + """ + misc_dir = os.path.join(self.prefs["Locations"]["SettingsDir"], "misc") + if (not os.path.isdir(misc_dir)) or (not os.access(misc_dir, os.X_OK)): + return [] + misc_files = [] + for root, dirs, files in os.walk(misc_dir): + misc_files.extend([os.path.join(root, e) for e in files]) + return [MiscConfigFile(os.path.join(misc_dir, f), self.log) for f in misc_files] + + + def __get_config_filename(self, config_file): + """Search for the configuration file. + """ + import types + if config_file is None: + # no config file was specified - we will look for it in the ususal locations + conf_file_list = [os.path.expanduser(f) + for f in CONF_LOCATIONS + if os.path.exists(os.path.expanduser(f))] + if not conf_file_list: + # no possible config file found in the usual locations + raise CBConfigUnavailableError() + config_file = conf_file_list[0] + else: + # a config file was specified (e.g. via command line) + if type(config_file) != types.StringType: + raise CBConfigUnavailableError( + "invalid config file specified: %s" % config_file) + if not os.path.exists(config_file): + raise CBConfigUnavailableError( + "could not find the specified configuration file (%s)" % config_file) + return config_file + + + def __configure_log_handler(self): + """Configure the log handler of the CryptoBox according to the config. + """ + log_level = self.prefs["Log"]["Level"].upper() + log_level_avail = ["DEBUG", "INFO", "WARN", "ERROR"] + if not log_level in log_level_avail: + raise CBConfigInvalidValueError("Log", "Level", log_level, + "invalid log level: only %s are allowed" % str(log_level_avail)) + log_destination = self.prefs["Log"]["Destination"].lower() + ## keep this in sync with the spec and the log_destination branches below + log_dest_avail = ['file', 'syslog'] + if not log_destination in log_dest_avail: + raise CBConfigInvalidValueError("Log", "Destination", log_destination, + "invalid log destination: only %s are allowed" % str(log_dest_avail)) + if log_destination == 'file': + try: + log_handler = logging.FileHandler(self.prefs["Log"]["Details"]) + except IOError: + raise CBEnvironmentError("could not write to log file (%s)" % \ + self.prefs["Log"]["Details"]) + log_handler.setFormatter( + logging.Formatter('%(asctime)s %(levelname)s: %(message)s')) + elif log_destination == 'syslog': + log_facility = self.prefs["Log"]["Details"].upper() + log_facil_avail = ['KERN', 'USER', 'MAIL', 'DAEMON', 'AUTH', 'SYSLOG', + 'LPR', 'NEWS', 'UUCP', 'CRON', 'AUTHPRIV', 'LOCAL0', 'LOCAL1', + 'LOCAL2', 'LOCAL3', 'LOCAL4', 'LOCAL5', 'LOCAL6', 'LOCAL7'] + if not log_facility in log_facil_avail: + raise CBConfigInvalidValueError("Log", "Details", log_facility, + "invalid log details for 'syslog': only %s are allowed" % \ + str(log_facil_avail)) + ## retrive the log priority from the syslog module + log_handler = LocalSysLogHandler("CryptoBox", + getattr(syslog, 'LOG_%s' % log_facility)) + log_handler.setFormatter( + logging.Formatter('%(asctime)s CryptoBox %(levelname)s: %(message)s')) + else: + ## this should never happen - we just have it in case someone forgets + ## to update the spec, the 'log_dest_avail' or the above branches + raise CBConfigInvalidValueError("Log", "Destination", log_destination, + "invalid log destination: only %s are allowed" % str(log_dest_avail)) + cbox_log = logging.getLogger("CryptoBox") + ## remove previous handlers (from 'basicConfig') + cbox_log.handlers = [] + ## add new one + cbox_log.addHandler(log_handler) + ## do not call parent's handlers + cbox_log.propagate = False + ## 'log_level' is a string -> use 'getattr' + cbox_log.setLevel(getattr(logging, log_level)) + ## the logger named "CryptoBox" is configured now + + + validation_spec = """ +[Main] +AllowedDevices = list(min=1) +DefaultVolumePrefix = string(min=1) +DefaultCipher = string(default="aes-cbc-essiv:sha256") +ConfigVolumeLabel = string(min=1, default="cbox_config") +UseConfigPartition = integer(min=0, max=1, default=0) +DisabledPlugins = list(default=list()) + +[Locations] +MountParentDir = directoryExists(default="/var/cache/cryptobox-server/mnt") +SettingsDir = directoryExists(default="/var/cache/cryptobox-server/settings") +TemplateDir = directoryExists(default="/usr/share/cryptobox-server/template") +DocDir = directoryExists(default="/usr/share/doc/cryptobox-server/www-data") +PluginDir = listOfExistingDirectories(default=list("/usr/share/cryptobox-server/plugins")) +EventDir = string(default="/etc/cryptobox-server/events.d") + +[Log] +Level = option("debug", "info", "warn", "error", default="warn") +Destination = option("file", "syslog", default="file") +Details = string(min=1, default="/var/log/cryptobox-server/cryptobox.log") + +[WebSettings] +Stylesheet = string(min=1) +Languages = list(min=1,default=list("en")) + +[Programs] +cryptsetup = fileExecutable(default="/sbin/cryptsetup") +mkfs = fileExecutable(default="/sbin/mkfs") +nice = fileExecutable(default="/usr/bin/nice") +blkid = fileExecutable(default="/sbin/blkid") +blockdev = fileExecutable(default="/sbin/blockdev") +mount = fileExecutable(default="/bin/mount") +umount = fileExecutable(default="/bin/umount") +super = fileExecutable(default="/usr/bin/super") +# this is the "program" name as defined in /etc/super.tab +CryptoBoxRootActions = string(min=1) + +[PluginSettings] +[[__many__]] + """ + + pluginValidationSpec = """ +[__many__] +visibility = boolean(default=None) +requestAuth = boolean(default=None) +rank = integer(default=None) + """ + + userDatabaseSpec = """ +[admins] +admin = string(default=d033e22ae348aeb5660fc2140aec35850c4da997) + """ + + +class CryptoBoxSettingsValidator(validate.Validator): + """Some custom configuration check functions. + """ + + def __init__(self): + validate.Validator.__init__(self) + self.functions["directoryExists"] = self.check_directory_exists + self.functions["fileExecutable"] = self.check_file_executable + self.functions["fileWriteable"] = self.check_file_writeable + self.functions["listOfExistingDirectories"] = self.check_existing_directories + + + def check_directory_exists(self, value): + """Is the directory accessible? + """ + dir_path = os.path.abspath(value) + if not os.path.isdir(dir_path): + raise validate.VdtValueError("%s (not found)" % value) + if not os.access(dir_path, os.X_OK): + raise validate.VdtValueError("%s (access denied)" % value) + return dir_path + + + def check_file_executable(self, value): + """Is the file executable? + """ + file_path = os.path.abspath(value) + if not os.path.isfile(file_path): + raise validate.VdtValueError("%s (not found)" % value) + if not os.access(file_path, os.X_OK): + raise validate.VdtValueError("%s (access denied)" % value) + return file_path + + + def check_file_writeable(self, value): + """Is the file writeable? + """ + file_path = os.path.abspath(value) + if os.path.isfile(file_path): + if not os.access(file_path, os.W_OK): + raise validate.VdtValueError("%s (not found)" % value) + else: + parent_dir = os.path.dirname(file_path) + if os.path.isdir(parent_dir) and os.access(parent_dir, os.W_OK): + return file_path + raise validate.VdtValueError("%s (directory does not exist)" % value) + return file_path + + + def check_existing_directories(self, value): + """Are these directories accessible? + """ + if not value: + raise validate.VdtValueError("no plugin directory specified") + if not isinstance(value, list): + value = [value] + result = [] + for one_dir in value: + dir_path = os.path.abspath(one_dir) + if not os.path.isdir(dir_path): + raise validate.VdtValueError( + "%s (plugin directory not found)" % one_dir) + if not os.access(dir_path, os.X_OK): + raise validate.VdtValueError( + "%s (access denied for plugin directory)" % one_dir) + result.append(dir_path) + return result + + +class MiscConfigFile: + """all other config files (e.g. a ssl certificate) to be stored""" + + maxSize = 20480 + + def __init__(self, filename, logger): + self.filename = filename + self.log = logger + self.content = None + self.load() + + + def load(self): + """Load a configuration file into memory. + """ + fdesc = open(self.filename, "rb") + ## limit the maximum size + self.content = fdesc.read(self.maxSize) + if fdesc.tell() == self.maxSize: + self.log.warn("file in misc settings directory (" + str(self.filename) \ + + ") is bigger than allowed (" + str(self.maxSize) + ")") + fdesc.close() + + + def save(self): + """Save a configuration file to disk. + """ + ## overriding of ro-files is not necessary (e.g. samba-include.conf) + if os.path.exists(self.filename) and not os.access(self.filename, os.W_OK): + return True + save_dir = os.path.dirname(self.filename) + ## create the directory, if necessary + if not os.path.isdir(save_dir): + try: + os.mkdir(save_dir) + except IOError: + return False + ## save the content of the file + try: + fdesc = open(self.filename, "wb") + except IOError: + return False + try: + fdesc.write(self.content) + fdesc.close() + return True + except IOError: + fdesc.close() + return False + + + +class LocalSysLogHandler(logging.Handler): + """Pass logging messages to a local syslog server without unix sockets. + + derived from: logging.SysLogHandler + """ + + def __init__(self, prepend='CryptoBox', facility=syslog.LOG_USER): + logging.Handler.__init__(self) + self.formatter = None + self.facility = facility + syslog.openlog(prepend, 0, facility) + + + def close(self): + """close the syslog connection + """ + syslog.closelog() + logging.Handler.close(self) + + + def emit(self, record): + """format and send the log message + """ + msg = "%s: %s" % (record.levelname, record.getMessage()) + try: + syslog.syslog(record.levelno, msg) + except Exception: + self.handleError(record) + diff --git a/v0.3.4.5/src/cryptobox/core/tools.py b/v0.3.4.5/src/cryptobox/core/tools.py new file mode 100644 index 0000000..f1500d2 --- /dev/null +++ b/v0.3.4.5/src/cryptobox/core/tools.py @@ -0,0 +1,248 @@ +# +# Copyright 2006 sense.lab e.V. +# +# This file is part of the CryptoBox. +# +# The CryptoBox 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 CryptoBox 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 the CryptoBox; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +"""Some useful functions for the CryptoBox. +""" + +__revision__ = "$Id" + +import logging +import os +import re + +LOGGER = logging.getLogger("CryptoBox") + + +def get_available_partitions(): + "retrieve a list of all available containers" + ret_list = [] + try: + ## the following reads all lines of /proc/partitions and adds the mentioned devices + fpart = open("/proc/partitions", "r") + try: + line = fpart.readline() + while line: + p_details = line.split() + if (len(p_details) == 4): + ## the following code prevents double entries like /dev/hda and /dev/hda1 + (p_major, p_minor, p_size, p_device) = p_details + ## ignore lines with: invalid minor/major or extend partitions (size=1) + if re.search('^[0-9]*$', p_major) and \ + re.search('^[0-9]*$', p_minor) and (p_size != "1"): + ## for some parent devices we have to remove a 'p' (partition) + ## an example are partitionable mdadm raid devices (e.g. md1p1) + p_parent = re.sub('p?[1-9]?[0-9]$', '', p_device) + if p_parent == p_device: + if [e for e in ret_list + if re.search('^' + p_parent + 'p?[1-9]?[0-9]$', e)]: + ## major partition - its children are already in the list + pass + else: + ## major partition - but there are no children for now + ret_list.append(p_device) + else: + ## minor partition - remove parent if necessary + if p_parent in ret_list: + ret_list.remove(p_parent) + ret_list.append(p_device) + line = fpart.readline() + finally: + fpart.close() + return [ get_absolute_devicename(e) for e in ret_list ] + except IOError: + LOGGER.warning("Could not read /proc/partitions") + return [] + + +def get_absolute_devicename(shortname): + """ returns the absolute file name of a device (e.g.: "hda1" -> "/dev/hda1") + this does also work for device mapper devices + if the result is non-unique, one arbitrary value is returned + """ + if re.search('^/', shortname): + return shortname + default = os.path.join("/dev", shortname) + if os.path.exists(default): + return default + result = find_major_minor_of_device(shortname) + ## if no valid major/minor was found -> exit + if not result: + return default + (major, minor) = result + ## for device-mapper devices (major == 254) ... + if major == 254: + result = find_major_minor_device("/dev/mapper", major, minor) + if result: + return result[0] + ## now check all files in /dev + result = find_major_minor_device("/dev", major, minor) + if result: + return result[0] + return default + + +def find_major_minor_of_device(device): + """Return the major/minor numbers of a block device. + """ + if re.match("/", device) or \ + not os.path.exists(os.path.join(os.path.sep, "sys", "block", device)): + ## maybe it is an absolute device name + if not os.path.exists(device): + return None + ## okay - it seems to to a device node + rdev = os.stat(device).st_rdev + return (os.major(rdev), os.minor(rdev)) + blockdev_info_file = os.path.join(os.path.join( + os.path.sep,"sys","block", device), "dev") + try: + f_blockdev_info = open(blockdev_info_file, "r") + blockdev_info = f_blockdev_info.read() + f_blockdev_info.close() + (str_major, str_minor) = blockdev_info.split(":") + ## numeric conversion + try: + major = int(str_major) + minor = int(str_minor) + return (major, minor) + except ValueError: + ## unknown device numbers -> stop guessing + return None + except IOError: + pass + return None + + +def find_major_minor_device(dirpath, major, minor): + """Returns the names of devices with the specified major and minor number. + """ + collected = [] + try: + subdirs = [os.path.join(dirpath, e) for e in os.listdir(dirpath) + if (not os.path.islink(os.path.join(dirpath, e))) and \ + os.path.isdir(os.path.join(dirpath, e))] + ## do a recursive call to parse the directory tree + for dirs in subdirs: + collected.extend(find_major_minor_device(dirs, major, minor)) + ## filter all device inodes in this directory + collected.extend([os.path.realpath(os.path.join(dirpath, e)) + for e in os.listdir(dirpath) + if (os.major(os.stat(os.path.join(dirpath, e)).st_rdev) == major) \ + and (os.minor(os.stat(os.path.join(dirpath, e)).st_rdev) == minor)]) + ## remove double entries + result = [] + for item in collected: + if item not in result: + result.append(item) + return result + except OSError: + return [] + + +def get_parent_blockdevices(): + """Return a list of all block devices that contain other devices. + """ + devs = [] + for line in file("/proc/partitions"): + p_details = line.split() + ## we expect four values - otherwise continue with next iteration + if len(p_details) != 4: + continue + (p_major, p_minor, p_size, p_device) = p_details + ## we expect numeric values in the first two columns + if re.search(r'\D', p_major) or re.search(r'\D', p_minor): + continue + ## now let us check, if it is a (parent) block device or a partition + if not os.path.isdir(os.path.join(os.path.sep, "sys", "block", p_device)): + continue + devs.append(p_device) + return [ get_absolute_devicename(e) for e in devs ] + + +def is_part_of_blockdevice(parent, subdevice): + """Check if the given block device is a parent of 'subdevice'. + + e.g. for checking if a partition belongs to a block device + """ + try: + (par_major, par_minor) = find_major_minor_of_device(parent) + (sub_major, sub_minor) = find_major_minor_of_device(subdevice) + except TypeError: + ## at least one of these devices did not return a valid major/minor combination + return False + ## search the entry below '/sys/block' belonging to the parent + root = os.path.join(os.path.sep, 'sys', 'block') + for bldev in os.listdir(root): + blpath = os.path.join(root, bldev, 'dev') + if os.access(blpath, os.R_OK): + try: + if (str(par_major), str(par_minor)) == tuple([e + for e in file(blpath)][0].strip().split(":",1)): + parent_path = os.path.join(root, bldev) + break + except (IndexError, OSError): + pass + else: + ## no block device with this major/minor combination found below '/sys/block' + return False + for subbldev in os.listdir(parent_path): + subblpath = os.path.join(parent_path, subbldev, "dev") + if os.access(subblpath, os.R_OK): + try: + if (str(sub_major), str(sub_minor)) == tuple([e + for e in file(subblpath)][0].strip().split(":",1)): + ## the name of the subdevice node is not important - we found it! + return True + except (IndexError, OSError): + pass + return False + + +def get_blockdevice_size(device): + """Return the size of a blockdevice in megabyte. + """ + if not device: + return -1 + try: + rdev = os.stat(device).st_rdev + except OSError: + return -1 + minor = os.minor(rdev) + major = os.major(rdev) + for line in file("/proc/partitions"): + try: + elements = line.split() + if len(elements) != 4: + continue + if (int(elements[0]) == major) and (int(elements[1]) == minor): + return int(elements[2])/1024 + except ValueError: + pass + return -1 + + +def get_blockdevice_size_humanly(device): + """Return a human readable size of a blockdevice. + """ + size = get_blockdevice_size(device) + if size > 5120: + return "%dGB" % int(size/1024) + else: + return "%dMB" % size + diff --git a/v0.3.4.5/src/cryptobox/plugins/__init__.py b/v0.3.4.5/src/cryptobox/plugins/__init__.py new file mode 100644 index 0000000..eedeafc --- /dev/null +++ b/v0.3.4.5/src/cryptobox/plugins/__init__.py @@ -0,0 +1,7 @@ +"""Features may be easily added to the CryptoBox. +""" + +__revision__ = "$Id" + +__all__ = [ 'base', 'manage' ] + diff --git a/v0.3.4.5/src/cryptobox/plugins/base.py b/v0.3.4.5/src/cryptobox/plugins/base.py new file mode 100644 index 0000000..e6391c9 --- /dev/null +++ b/v0.3.4.5/src/cryptobox/plugins/base.py @@ -0,0 +1,313 @@ +# $Id$ +# +# parent class for all plugins of the CryptoBox +# +# Copyright 2006 sense.lab e.V. +# +# This file is part of the CryptoBox. +# +# The CryptoBox 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 CryptoBox 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 the CryptoBox; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +"""All features should inherit from this class. +""" + +__revision__ = "$Id" + +import os +import cherrypy +import imp + + +class CryptoBoxPlugin: + """The base class of all features. + """ + + ## default capability is "system" - the other supported capability is: "volume" + plugin_capabilities = [ "system" ] + + ## where should the plugin be visible by default? + plugin_visibility = [ "preferences" ] + + ## does this plugin require admin authentification? + request_auth = False + + ## default rank (0..100) of the plugin in listings (lower value means higher priority) + rank = 80 + + + ## default icon of this plugin (relative path) + default_icon_filename = "plugin_icon" + + ## fallback icon file (in the common plugin directory) + fallback_icon_filename = "plugin_icon_unknown" + + + def __init__(self, cbox, plugin_dir, site_class=None): + if cbox: + self.cbox = cbox + else: + ## define empty dummy class as a replacement for a cbox instance + class CBoxPrefs(dict): + plugin_conf = {} + class CBoxLogger: + def debug(self, text): + pass + info = debug + warn = debug + error = debug + class CBoxMinimal: + prefs = CBoxPrefs() + prefs["PluginSettings"] = {} + log = CBoxLogger() + self.cbox = CBoxMinimal() + self.hdf = {} + self.plugin_dir = plugin_dir + self.hdf_prefix = "Data.Plugins.%s." % self.get_name() + self.site = site_class + if not self.get_name() in self.cbox.prefs.plugin_conf: + ## initialize plugin configuration + self.cbox.prefs.plugin_conf[self.get_name()] = {} + self.prefs = self.cbox.prefs.plugin_conf[self.get_name()] + self.cbox.log.debug("Plugin '%s': settings " % self.get_name() + \ + "loaded from plugin configuration file: %s" % str(self.prefs)) + if self.get_name() in self.cbox.prefs["PluginSettings"]: + self.defaults = self.cbox.prefs["PluginSettings"][self.get_name()] + else: + self.defaults = {} + self.cbox.log.debug("Plugin '%s': configuration " % self.get_name() + \ + "settings imported from global config file: %s" % str(self.defaults)) + ## load a possibly existing "root_action.py" scripts as self.root_action + if os.path.isfile(os.path.join(self.plugin_dir, "root_action.py")): + self.root_action = imp.load_source("root_action", + os.path.join(self.plugin_dir, "root_action.py")) + else: + self.root_action = None + + + def do_action(self, **args): + """Override do_action with your plugin code + """ + raise Exception, \ + "undefined action handler ('do_action') in plugin '%s'" % self.get_name() + + + def get_status(self): + """you should override this, to supply useful state information + """ + raise Exception, \ + "undefined state handler ('get_status') in plugin '%s'" % self.get_name() + + def is_useful(self, device): + """Return if this plugin is useful for a specific device. + + This should only be used for volume plugins. Nice for output filtering. + """ + return True + + + def get_name(self): + """the name of the python file (module) should be the name of the plugin + """ + return self.__module__ + + + def handle_event(self, event_name, event_info=None): + """Any plugin that wants to define event actions may override this. + + currently only the following events are defined: + - "bootup" (the cryptobox server is starting) + - "shutdown" (the cryptobox server is stopping) + """ + pass + + + def get_warnings(self): + """Return a priority and a warning, if the plugin detects a misconfiguration + + valid prioritie ranges are: + - 80..99 loss of data is possible + - 60..79 the cryptobox will probably not work at all + - 40..59 important features will propably not work + - 20..39 heavy security risk OR broken recommended features + - 00..19 possible mild security risk OR broken/missing optional features + """ + return [] + + + @cherrypy.expose + def download(self, **kargs): + """Deliver a downloadable file - by default return nothing + """ + return "" + + + @cherrypy.expose + def get_icon(self, image=None, **kargs): + """return the image data of the icon of the plugin + + the parameter 'image' may be used for alternative image locations (relative + to the directory of the plugin) + '**kargs' is necessary, as a 'weblang' attribute may be specified (and ignored) + """ + import re + icon_ext = self.__get_default_icon_extension() + if (image is None) or (not re.match(r'[\w\-\.]*$', image)): + plugin_icon_file = os.path.join(self.plugin_dir, + "%s.%s" % (self.default_icon_filename, icon_ext)) + else: + plugin_icon_file = os.path.join(self.plugin_dir, image) + ## check if we can find the fallback plugin icon in one of the + ## plugin directories + if not os.access(plugin_icon_file, os.R_OK): + for ppath in self.cbox.prefs["Locations"]["PluginDir"]: + plugin_icon_file = os.path.join(ppath, + "%s.%s" % (self.fallback_icon_filename, icon_ext)) + if plugin_icon_file: + break + return cherrypy.lib.cptools.serveFile(plugin_icon_file) + + + def __get_default_icon_extension(self): + """Return 'png' or 'gif' depending on the 'User-Agent' request header + + This is useful, as IE 5.5/6.0 does not render transparent png graphics properly + Internet Explorer 5.5/6.0: return 'gif' + everything else: return 'png' + """ + if ("User-Agent" in cherrypy.request.headers) and \ + ((cherrypy.request.headers["User-Agent"].find("MSIE 5.5;") != -1) or \ + (cherrypy.request.headers["User-Agent"].find("MSIE 6.0;") != -1)): + return "gif" + else: + return "png" + + + def get_template_filename(self, template_name): + """return the filename of the template, if it is part of this plugin + + use this function to check, if the plugin provides the specified template + """ + result_file = os.path.join(self.plugin_dir, template_name + ".cs") + if os.access(result_file, os.R_OK) and os.path.isfile(result_file): + return result_file + else: + return None + + + def get_language_data(self): + """Retrieve the language data of the feature. + + Typically this is the content of the language.hdf file as a HDF object. + """ + import neo_cgi, neo_util + lang_hdf = neo_util.HDF() + lang_file = os.path.join(self.plugin_dir, 'language.hdf') + try: + lang_hdf.readFile(lang_file) + except (neo_util.Error, neo_util.ParseError): + self.cbox.log.error("failed to load language file (%s) of plugin (%s):" % \ + (lang_file, self.get_name())) + return lang_hdf + + + def load_dataset(self, hdf): + """Add the local values of the feature to the hdf dataset. + """ + for (key, value) in self.hdf.items(): + hdf.setValue(key, str(value)) + ## add the stylesheet file if it exists + css_file = os.path.join(self.plugin_dir, self.get_name() + ".css") + if os.path.exists(css_file): + hdf.setValue("Data.StylesheetFiles.%s" % self.get_name(), css_file) + + + + def is_auth_required(self): + """check if this plugin requires authentication + first step: check plugin configuration + second step: check default value of plugin + """ + if ("requestAuth" in self.prefs) and (not self.prefs["requestAuth"] is None): + return bool(self.prefs["requestAuth"]) + else: + return self.request_auth + + + def is_enabled(self): + """check if this plugin is enabled + first step: check plugin configuration + second step: check default value of plugin + """ + if ("visibility" in self.prefs) and (not self.prefs["visibility"] is None): + return bool(self.prefs["visibility"]) + else: + return bool(self.plugin_visibility) + + + def get_rank(self): + """check the rank of this plugin + first step: check plugin configuration + second step: check default value of plugin + """ + if ("rank" in self.prefs) and (not self.prefs["rank"] is None): + return int(self.prefs["rank"]) + else: + return int(self.rank) + + + def set_rank(self, rank): + """change the current rank of the plugin in plugin_conf + 'rank' should be an integer + """ + self.prefs["rank"] = rank + + + def get_visibility(self): + """Check which visibility flags of the plugin are set. + """ + try: + if self.prefs["visibility"] is None: + return self.plugin_visibility[:] + return self.prefs["visibility"] + except KeyError: + return self.plugin_visibility + + + def reset(self): + """Reinitialize the plugin. + + This function should be called before every run + """ + self.hdf = {} + + + def get_test_class(self): + """Return the unittest class of the feature. + """ + import imp + pl_file = os.path.join(self.plugin_dir, "unittests.py") + if os.access(pl_file, os.R_OK) and os.path.isfile(pl_file): + try: + return imp.load_source("unittests_%s" % self.get_name(), pl_file).unittests + except AttributeError: + pass + try: + self.cbox.log.info("could not load unittests for plugin: %s" % \ + self.get_name()) + except AttributeError: + pass + return None + diff --git a/v0.3.4.5/src/cryptobox/plugins/manage.py b/v0.3.4.5/src/cryptobox/plugins/manage.py new file mode 100644 index 0000000..79c1838 --- /dev/null +++ b/v0.3.4.5/src/cryptobox/plugins/manage.py @@ -0,0 +1,107 @@ +# $Id$ +# +# Copyright 2006 sense.lab e.V. +# +# This file is part of the CryptoBox. +# +# The CryptoBox 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 CryptoBox 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 the CryptoBox; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +"""Manages the pluggable features of the CryptoBox. +""" + +__revision__ = "$Id" + +import os + + +class PluginManager: + """manage available plugins""" + + def __init__(self, cbox, plugin_dirs=".", site_class=None): + self.cbox = cbox + self.site = site_class + if hasattr(plugin_dirs, "__iter__"): + self.plugin_dirs = [os.path.abspath(d) for d in plugin_dirs] + else: + self.plugin_dirs = [os.path.abspath(plugin_dirs)] + self.plugin_list = self.__get_all_plugins() + + + def get_plugins(self): + """Return a list of all feature instances. + """ + return self.plugin_list[:] + + + def get_plugin(self, name): + """Return the specified feature as an instance. + """ + for plugin in self.plugin_list[:]: + if plugin.get_name() == name: + return plugin + return None + + + def __get_all_plugins(self): + """Return all available features as instances. + """ + plist = [] + for plfile in self.__get_plugin_files(): + plist.append(self.__get_plugin_class(plfile)) + return plist + + + def __get_plugin_class(self, plfile): + """Return a instance object of the give feature. + """ + import imp + name = os.path.basename(plfile)[:-3] + try: + pl_class = getattr(imp.load_source(name, plfile), name) + except AttributeError: + return None + return pl_class(self.cbox, os.path.dirname(plfile), self.site) + + + def __get_plugin_files(self): + """Retrieve all python files that may potentially be a feature. + """ + result = [] + if self.cbox and self.cbox.prefs["Main"]["DisabledPlugins"]: + disabled = self.cbox.prefs["Main"]["DisabledPlugins"] + else: + disabled = [] + for pdir in [os.path.abspath(e) for e in self.plugin_dirs + if os.access(e, os.R_OK) and os.path.isdir(e)]: + for plname in [f for f in os.listdir(pdir)]: + if plname in disabled: + if self.cbox: + self.cbox.log.info( + "Skipping plugin '%s' (disabled via config)" % plname) + continue + pldir = os.path.join(pdir, plname) + plfile = os.path.join(pldir, plname + ".py") + if os.path.isfile(plfile) and os.access(plfile, os.R_OK): + result.append(plfile) + return result + + +if __name__ == "__main__": + MANAGER = PluginManager(None, "../plugins") + for one_plugin in MANAGER.get_plugins(): + if not one_plugin is None: + print "Plugin: %s" % one_plugin.get_name() + diff --git a/v0.3.4.5/src/cryptobox/tests/__init__.py b/v0.3.4.5/src/cryptobox/tests/__init__.py new file mode 100644 index 0000000..57b82a9 --- /dev/null +++ b/v0.3.4.5/src/cryptobox/tests/__init__.py @@ -0,0 +1,8 @@ +"""Some unittests for the CryptoBox. +""" + +__revision__ = "$Id" + +__all__ = [ 'test.cryptobox', 'test.cryptoboxtools', 'test.plugins', 'test.websites', + 'base', 'tools' ] + diff --git a/v0.3.4.5/src/cryptobox/tests/base.py b/v0.3.4.5/src/cryptobox/tests/base.py new file mode 100644 index 0000000..9b77a35 --- /dev/null +++ b/v0.3.4.5/src/cryptobox/tests/base.py @@ -0,0 +1,160 @@ +# +# Copyright 2006 sense.lab e.V. +# +# This file is part of the CryptoBox. +# +# The CryptoBox 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 CryptoBox 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 the CryptoBox; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +""" +this module contains all super classes for different tests + +just inherit one of its classes and add some test functions + +All testclasses based on the classes of this module may assume the following: + - there is one valid parent blockdevice (self.blockdevice) + - the blockdevice contains exactly two partitions: + - part1: vfat, 50MB, formatted (devicename: self.device) + - part2: ext3, 50MB, formatted + - self.blockdevice_html and self.device_html are url-escaped strings + - all databases (pluginconf, volume names, users) are empty + +Additional hints: + - if the current state of self.device is important, then you should umount + it before any of these tests: cryptobox.tests.tools.umount(self.device) +""" + +__revision__ = "$Id" + +import unittest +import twill +import cherrypy +import cryptobox.web.sites +import cryptobox.tests.base + + + +## commands api: http://twill.idyll.org/commands.html +CBXHOST = "localhost" +CBXPORT = 8081 +CBX_URL = "http://%s:%d/" % (CBXHOST, CBXPORT) +LOG_FILE = "/tmp/cryptobox-twill.log" +WEBLOG_FILE = "/tmp/cryptobox-cherrypy.log" +CONF_FILE = 'cryptobox-unittests.conf' + + +class CommonTestClass(unittest.TestCase): + """Super class of all tests of the CryptoBox + + prepare environment, set some values ... + """ + + def __init__(self, methodName='runTest'): + unittest.TestCase.__init__(self, methodName) + import cryptobox.core.settings as cbox_settings + import cryptobox.tests.tools as testtools + import os + ## search for a usable block device + ## use /dev/ubd? if possible - otherwise /dev/hd? + ## so it will be possible to use these tests inside of a uml + self.blockdevice = testtools.find_test_device() + ## umount the partitions of this device (just to be sure) + for num in range(12): + testtools.umount("%s%d" % (self.blockdevice, num)) + ## format device and partition block device if necessary + testtools.prepare_partition(self.blockdevice) + self.blockdevice = testtools.find_test_device() + self.device = self.blockdevice + "1" + self.blockdevice_html = self.blockdevice.replace("/", "%2F") + self.device_html = self.device.replace("/", "%2F") + + ## remove configuration files + ## first: retrieve the settings directory + settings_dir = cbox_settings.CryptoBoxSettings(CONF_FILE)\ + ["Locations"]["SettingsDir"] + for filename in [ + cbox_settings.VOLUMESDB_FILE, + cbox_settings.PLUGINCONF_FILE, + cbox_settings.USERDB_FILE]: + try: + os.unlink(os.path.join(settings_dir, filename)) + except OSError: + pass + + + +class WebInterfaceTestClass(CommonTestClass): + '''this class checks the webserver, using "twill" + + the tests in this class are from the browsers point of view, so not + really unittests. + fetch twill from: http://twill.idyll.org + ''' + + def __init__(self, methodName='runTest'): + CommonTestClass.__init__(self, methodName) + + + def setUp(self): + '''configures the cherrypy server that it works nice with twill + ''' + CommonTestClass.setUp(self) + cherrypy.config.update({ + 'server.logToScreen' : False, + 'autoreload.on': False, + 'server.threadPool': 1, + 'server.environment': 'development', + 'server.log_tracebacks': True, + 'server.log_file': WEBLOG_FILE, + }) + cherrypy.root = cryptobox.web.sites.WebInterfaceSites(CONF_FILE) + + cherrypy.server.start(initOnly=True, serverClass=None) + + from cherrypy._cpwsgi import wsgiApp + twill.add_wsgi_intercept(CBXHOST, CBXPORT, lambda: wsgiApp) + + # grab the output of twill commands + self.output = open(LOG_FILE,"a") + twill.set_output(self.output) + self.cmd = twill.commands + self.url = CBX_URL + self.cbox = cherrypy.root.cbox + self.globals, self.locals = twill.namespaces.get_twill_glocals() + + + def tearDown(self): + '''clean up the room when leaving''' + ## remove intercept. + twill.remove_wsgi_intercept(CBXHOST, CBXPORT) + ## stop the cryptobox + cherrypy.root.cleanup() + ## shut down the cherrypy server. + cherrypy.server.stop() + self.output.close() + ## inform the parent + CommonTestClass.tearDown(self) + + + + def __get_soup(): + browser = twill.commands.get_browser() + soup = BeautifulSoup(browser.get_html()) + return soup + + + def register_auth(self, url, user="admin", password="admin"): + self.cmd.add_auth("CryptoBox", url, user, password) + diff --git a/v0.3.4.5/src/cryptobox/tests/test.cryptobox.py b/v0.3.4.5/src/cryptobox/tests/test.cryptobox.py new file mode 100755 index 0000000..a05b7c5 --- /dev/null +++ b/v0.3.4.5/src/cryptobox/tests/test.cryptobox.py @@ -0,0 +1,185 @@ +#!/usr/bin/env python +# +# Copyright 2006 sense.lab e.V. +# +# This file is part of the CryptoBox. +# +# The CryptoBox 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 CryptoBox 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 the CryptoBox; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +"""Some unittests for the core CryptoBox modules. +""" + +__revision__ = "$Id" + + +import cryptobox.core.main +from cryptobox.core.exceptions import * +import cryptobox.core.settings +from cryptobox.tests.base import CommonTestClass +import os + + +class CryptoBoxDeviceTests(CommonTestClass): + """Some unittests for the CryptoBox + """ + + cb = cryptobox.core.main.CryptoBox() + + + def test_allowed_devices(self): + '''is_device_allowed should accept permitted devices''' + self.assertTrue(self.cb.is_device_allowed("/dev/loop1")) + self.assertTrue(self.cb.is_device_allowed("/dev/usb/../loop1")) + + + def test_denied_devices(self): + '''is_device_allowed should fail with not explicitly allowed devices''' + self.assertFalse(self.cb.is_device_allowed("/dev/hda")) + self.assertFalse(self.cb.is_device_allowed("/dev/loopa/../hda")) + self.assertFalse(self.cb.is_device_allowed("/")) + ## this device does not exist -> no permission check possible + self.assertFalse(self.cb.is_device_allowed("/dev/loop")) + + + +class CryptoBoxConfigTests(CommonTestClass): + '''test here if everything with the config turns right''' + files = { + "configFileOK" : "cbox-test_ok.conf", + "configFileBroken" : "cbox-test_broken.conf", + "nameDBFile" : "cryptobox_volumes.db", + "pluginConf" : "cryptobox_plugins.conf", + "userDB" : "cryptobox_users.db", + "logFile" : "cryptobox.log", + "tmpdir" : "cryptobox-mnt" } + tmpdirname = "" + filenames = {} + configContentOK = """ +[Main] +AllowedDevices = /dev/loop +DefaultVolumePrefix = "Data " +DefaultCipher = aes-cbc-essiv:sha256 +[Locations] +SettingsDir = %s +MountParentDir = %s +TemplateDir = ../templates +LangDir = ../lang +DocDir = ../doc/html +PluginDir = ../plugins +EventDir = ../event-scripts +[Log] +Level = debug +Destination = file +Details = %s/cryptobox.log +[WebSettings] +Stylesheet = /cryptobox-misc/cryptobox.css +[Programs] +blkid = /sbin/blkid +cryptsetup = /sbin/cryptsetup +super = /usr/bin/super +CryptoBoxRootActions = CryptoBoxRootActions +""" + + + def setUp(self): + '''prepare the test + ''' + CommonTestClass.setUp(self) + ## generate all files in tmp and remember the names + import tempfile + self.tmpdirname = tempfile.mkdtemp(prefix="cbox-") + for tfile in self.files.keys(): + self.filenames[tfile] = os.path.join(self.tmpdirname, self.files[tfile]) + self.write_config() + + + def tearDown(self): + '''remove the created tmpfiles''' + # remove temp files + for tfile in self.filenames.values(): + compl_name = os.path.join(self.tmpdirname, tfile) + if os.path.exists(compl_name): + os.remove(compl_name) + # remove temp dir + os.rmdir(self.tmpdirname) + CommonTestClass.tearDown(self) + + + def test_config_init(self): + '''Check various branches of config file loading''' + self.assertRaises(CBConfigUnavailableError, + cryptobox.core.main.CryptoBox,"/invalid/path/to/config/file") + self.assertRaises(CBConfigUnavailableError, + cryptobox.core.main.CryptoBox,"/etc/shadow") + ## check one of the following things: + ## 1) are we successfully using an existing config file? + ## 2) do we break, if no config file is there? + ## depending on the existence of a config file, only one of these conditions + ## can be checked - hints for more comprehensive tests are appreciated :) + for cfile in ['cryptobox.conf']: + if os.path.exists(cfile): + cryptobox.core.main.CryptoBox() + break # this skips the 'else' clause + else: + self.assertRaises(CBConfigUnavailableError, + cryptobox.core.main.CryptoBox) + self.assertRaises(CBConfigUnavailableError, + cryptobox.core.main.CryptoBox,[]) + + + def test_broken_configs(self): + """Check various broken configurations + """ + self.write_config("SettingsDir", "SettingsDir=/foo/bar", + filename=self.filenames["configFileBroken"]) + self.assertRaises(CBConfigError, cryptobox.core.main.CryptoBox, + self.filenames["configFileBroken"]) + self.write_config("Level", "Level = ho", + filename=self.filenames["configFileBroken"]) + self.assertRaises(CBConfigError, cryptobox.core.main.CryptoBox, + self.filenames["configFileBroken"]) + self.write_config("Destination", "Destination = foobar", + filename=self.filenames["configFileBroken"]) + self.assertRaises(CBConfigError, cryptobox.core.main.CryptoBox, + self.filenames["configFileBroken"]) + self.write_config("super", "super=/bin/invalid/no", + filename=self.filenames["configFileBroken"]) + self.assertRaises(CBConfigError, cryptobox.core.main.CryptoBox, + self.filenames["configFileBroken"]) + self.write_config("CryptoBoxRootActions", "#not here", + filename=self.filenames["configFileBroken"]) + self.assertRaises(CBConfigError, cryptobox.core.main.CryptoBox, + self.filenames["configFileBroken"]) + self.write_config("CryptoBoxRootActions", "CryptoBoxRootActions = /bin/false", + filename=self.filenames["configFileBroken"]) + self.assertRaises(CBEnvironmentError, cryptobox.core.main.CryptoBox, + self.filenames["configFileBroken"]) + + + def write_config(self, replace=None, newline=None, filename=None): + """write a config file and (optional) replace a line in it""" + import re + if not filename: + filename = self.filenames["configFileOK"] + content = self.configContentOK % \ + (self.tmpdirname, self.tmpdirname, self.tmpdirname) + if replace: + pattern = re.compile('^' + replace + '\\s*=.*$', flags=re.M) + content = re.sub(pattern, newline, content) + cfile = open(filename, "w") + cfile.write(content) + cfile.close() + diff --git a/v0.3.4.5/src/cryptobox/tests/test.cryptoboxtools.py b/v0.3.4.5/src/cryptobox/tests/test.cryptoboxtools.py new file mode 100755 index 0000000..20aad25 --- /dev/null +++ b/v0.3.4.5/src/cryptobox/tests/test.cryptoboxtools.py @@ -0,0 +1,77 @@ +#!/usr/bin/env python +# +# Copyright 2006 sense.lab e.V. +# +# This file is part of the CryptoBox. +# +# The CryptoBox 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 CryptoBox 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 the CryptoBox; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +"""Unittests for cryptobox.core.tools +""" + +__revision__ = "$Id" + + +import cryptobox.core.tools as cbx_tools +from cryptobox.tests.base import CommonTestClass +import os + + +class CryptoBoxToolsTests(CommonTestClass): + """All unittests for cryptoboxtools + """ + + def test_get_absolute_devicename(self): + """check the get_absolute_devicename function + """ + func = cbx_tools.get_absolute_devicename + self.assertTrue(func(os.path.basename(self.device)) == self.device) + self.assertTrue(func("loop0") == "/dev/loop0") + self.assertTrue(func(os.path.devnull) == os.path.devnull) + + + def test_find_major_minor_of_device(self): + """check the find_major_minor_of_device function + """ + func = cbx_tools.find_major_minor_of_device + self.assertTrue(func(os.path.devnull) == (1, 3)) + self.assertTrue(func("/dev/nothere") is None) + + + def test_find_major_minor_device(self): + """check the find_major_minor_device function + """ + func = cbx_tools.find_major_minor_device + path = os.path.join(os.path.sep, "dev") + self.assertTrue(os.path.devnull in func(path, 1, 3)) + self.assertFalse(os.path.devnull in func(path, 2, 3)) + self.assertFalse(None in func(path, 17, 23)) + + + def test_is_part_of_blockdevice(self): + """check the is_part_of_blockdevice function + """ + func = cbx_tools.is_part_of_blockdevice + self.assertTrue(func(self.blockdevice, self.device)) + self.assertFalse(func(self.blockdevice, self.blockdevice)) + self.assertFalse(func(self.device, self.blockdevice)) + self.assertFalse(func(self.device, self.device)) + self.assertFalse(func(self.blockdevice, "/dev/hde1")) + self.assertFalse(func(None, self.blockdevice)) + self.assertFalse(func(self.blockdevice, None)) + self.assertFalse(func(None, "")) + self.assertFalse(func("loop0", "loop1")) + diff --git a/v0.3.4.5/src/cryptobox/tests/test.plugins.py b/v0.3.4.5/src/cryptobox/tests/test.plugins.py new file mode 100755 index 0000000..723d540 --- /dev/null +++ b/v0.3.4.5/src/cryptobox/tests/test.plugins.py @@ -0,0 +1,56 @@ +#!/usr/bin/env python +# +# Copyright 2006 sense.lab e.V. +# +# This file is part of the CryptoBox. +# +# The CryptoBox 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 CryptoBox 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 the CryptoBox; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +"""This module handles the unittests of all features. +""" + +__revision__ = "$Id" + +from cryptobox.tests.base import CommonTestClass +import cryptobox.plugins.manage + +class CheckForUndefinedTestCases(CommonTestClass): + """here we will add failing test functions for every non-existing testcase""" + + +def create_testcases(): + """Create functions that execute unittests for all features. + """ + plugins = cryptobox.plugins.manage.PluginManager(None, "../plugins").get_plugins() + glob_dict = globals() + loc_dict = locals() + for plugin in plugins: + test_class = plugin.get_test_class() + if test_class: + ## add the testclass to the global dictionary + glob_dict["unittest" + plugin.get_name()] = test_class + else: + subname = "test_existence_%s" % plugin.get_name() + def test_existence(self): + """check if the plugin (%s) contains tests""" % plugin.get_name() + self.fail("no tests defined for plugin: %s" % plugin.get_name()) + ## add this function to the class above + setattr(CheckForUndefinedTestCases, subname, test_existence) + #FIXME: the failure output always contains the same name for all plugins + + +create_testcases() + diff --git a/v0.3.4.5/src/cryptobox/tests/test.websites.py b/v0.3.4.5/src/cryptobox/tests/test.websites.py new file mode 100755 index 0000000..0621778 --- /dev/null +++ b/v0.3.4.5/src/cryptobox/tests/test.websites.py @@ -0,0 +1,62 @@ +#!/usr/bin/env python +# +# Copyright 2006 sense.lab e.V. +# +# This file is part of the CryptoBox. +# +# The CryptoBox 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 CryptoBox 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 the CryptoBox; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +"""Base class for all unittests involving the webserver. + +This class uses twill. +""" + +__revision__ = "$Id" + +from cryptobox.tests.base import WebInterfaceTestClass + + + +class WebServer(WebInterfaceTestClass): + """Basic tests for the webserver. + """ + + def test_is_server_running(self): + '''the server should run under given name and port''' + self.register_auth(self.url) + self.cmd.go(self.url) + self.cmd.find("CBOX-STATUS") + ## other URLs must not be checked, as we do not know, if they are valid + + + +class BuiltinPages(WebInterfaceTestClass): + """Basic test of builtin pages (no features). + """ + + + def test_goto_index(self): + '''display all devices''' + self.register_auth(self.url) + self.cmd.go(self.url) + self.cmd.find("The CryptoBox") + self.cmd.go(self.url + "?weblang=de") + self.cmd.find("Die CryptoBox") + self.cmd.go(self.url + "?weblang=sl") + self.cmd.find("Privatnost v vsako vas") + self.cmd.go(self.url + "?weblang=fr") + self.cmd.find("La CryptoBox") + diff --git a/v0.3.4.5/src/cryptobox/tests/tools.py b/v0.3.4.5/src/cryptobox/tests/tools.py new file mode 100644 index 0000000..51dfe36 --- /dev/null +++ b/v0.3.4.5/src/cryptobox/tests/tools.py @@ -0,0 +1,140 @@ +# +# Copyright 2006 sense.lab e.V. +# +# This file is part of the CryptoBox. +# +# The CryptoBox 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 CryptoBox 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 the CryptoBox; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +""" +this module contains some useful tools to be used during the tests + +just inherit one of its classes and add some test functions +""" + +__revision__ = "$Id" + +TEST_DEVICE_LIST = ["ubdb", "loop", "ubda", "udbc", "ubdd", "sd"] + + +import os +import subprocess + +def find_test_device(): + """Search for a valid test device - the data will get lost ... + + the result is the parent blockdevice (containing the partition table) + and the single partition + """ + for dev in TEST_DEVICE_LIST: + if os.path.exists("/dev/%s" % dev) \ + and os.access("/dev/%s" % dev, os.W_OK): + try: + ## try if it is a symlink + return os.readlink("/dev/%s" % dev) + except OSError: + ## not a symlink (usual) + return "/dev/%s" % dev + else: + raise Exception, "no valid device for testing found" + + +def is_config_partition(device): + """Check if the device is a configuration partition. + """ + proc = subprocess.Popen( + shell = False, + stdout = subprocess.PIPE, + stderr = subprocess.PIPE, + args = [ '/sbin/e2label', + device ]) + (stdout, stderr) = proc.communicate() + return stdout.strip() == "cbox_config" + + +def umount(device): + """Umount the specified device if possible - ignore errors + """ + proc = subprocess.Popen( + shell = False, + stdout = subprocess.PIPE, + stderr = subprocess.PIPE, + args = [ '/bin/umount', '-d', device ]) + proc.wait() + + +def prepare_partition(blockdevice): + """Prepare the expected partition in the device (destroy all data) + + Check if 'device' is a vfat partition - if not, then + partition 'blockdevice' and format 'device' as vfat + """ + if (get_fs_type(blockdevice + "1") == "vfat") \ + and (get_fs_type(blockdevice + "2") == "ext3") \ + and (get_fs_type(blockdevice + "3") is None) \ + and (get_fs_type(blockdevice + "5") is None): + ## everything is fine + return + else: + ## repartitioning + proc = subprocess.Popen( + shell = False, + stdin = subprocess.PIPE, + stdout = subprocess.PIPE, + stderr = subprocess.PIPE, + args = [ '/sbin/sfdisk', blockdevice ]) + proc.stdin.write(",50,0xC\n,50,L\n") + (output, error) = proc.communicate() + if proc.returncode != 0: + raise Exception, "could not partition the device (%s): %s" \ + % (blockdevice, output.strip()) + ## formatting + format_device(blockdevice + "1", "vfat") + format_device(blockdevice + "2", "ext3") + + +def get_fs_type(device): + proc = subprocess.Popen( + shell = False, + stdout = subprocess.PIPE, + stderr = subprocess.PIPE, + args = [ '/sbin/blkid', + '-c', os.path.devnull, + '-w', os.path.devnull, + '-o', 'value', + '-s', 'TYPE', + device]) + (output, error) = proc.communicate() + if (proc.returncode == 0) and output.strip(): + ## everything is fine + return output.strip() + else: + return None + + +def format_device(device, fs_type="vfat"): + proc = subprocess.Popen( + shell = False, + stdout = subprocess.PIPE, + stderr = subprocess.PIPE, + args = [ '/sbin/mkfs', + '-t', fs_type, + device ]) + (output, error) = proc.communicate() + if proc.returncode != 0: + raise OSError, "could not format the device (%s): %s" \ + % (device, output.strip()) + + diff --git a/v0.3.4.5/src/cryptobox/web/__init__.py b/v0.3.4.5/src/cryptobox/web/__init__.py new file mode 100644 index 0000000..f524565 --- /dev/null +++ b/v0.3.4.5/src/cryptobox/web/__init__.py @@ -0,0 +1,7 @@ +"""The webinterface of the CryptoBox. +""" + +__revision__ = "$Id" + +__all__ = [ 'dataset', 'languages', 'sites', 'testclass' ] + diff --git a/v0.3.4.5/src/cryptobox/web/dataset.py b/v0.3.4.5/src/cryptobox/web/dataset.py new file mode 100644 index 0000000..bce10a1 --- /dev/null +++ b/v0.3.4.5/src/cryptobox/web/dataset.py @@ -0,0 +1,223 @@ +# +# Copyright 2006 sense.lab e.V. +# +# This file is part of the CryptoBox. +# +# The CryptoBox 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 CryptoBox 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 the CryptoBox; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +"""Manage the hdf dataset of the cryptobox web sites. +""" + +__revision__ = "$Id" + +import os +import cryptobox.core.container as cbxContainer +import cryptobox.core.tools as cbxTools + + +class WebInterfaceDataset(dict): + """this class contains all data that should be available for the clearsilver + templates + """ + + def __init__(self, cbox, prefs, plugin_manager): + super(WebInterfaceDataset, self).__init__() + self.prefs = prefs + self.cbox = cbox + self.__set_config_values() + self.plugin_manager = plugin_manager + self.set_crypto_box_state() + self.set_plugin_data() + self.set_containers_state() + + + def set_crypto_box_state(self): + """Set some hdf values according to the cryptobox as a whole. + """ + import cherrypy + import cryptobox.core.main + import cryptobox.web.languages + import cryptobox + self["Data.Version"] = cryptobox.__version__ + ## first: clean the dataset up - necessary if we were called more than once + for key in self.keys(): + if key.startswith("Data.Languages."): + del self[key] + langs = self.cbox.prefs["WebSettings"]["Languages"][:] + langs.sort() + for (index, lang) in enumerate(langs): + try: + (langname, plural_info) = cryptobox.web.languages.LANGUAGE_INFO[lang] + self["Data.Languages.%d.link" % index] = langname + self["Data.Languages.%d.name" % index] = lang + self.cbox.log.info("language loaded: %s" % lang) + except KeyError: + ## language was not found + self.cbox.log.warn( + "invalid language specified in configuration: %s" % lang) + + ## check the help setting + try: + if cherrypy.request.params["help"] == "1": + self["Settings.Help"] = "1" + self["Settings.LinkAttrs.help"] = "1" + except (AttributeError, KeyError): + ## no setting or first start before request + ## reset values - just in case we are called more than once + self["Settings.Help"] = "0" + if "Settings.LinkAttrs.help" in self: + del self["Settings.LinkAttrs.help"] + + try: + self["Data.ScriptURL.Prot"] = cherrypy.request.scheme + host = cherrypy.request.headers["Host"] + self["Data.ScriptURL.Host"] = host.split(":", 1)[0] + complete_url = "%s://%s" % \ + (self["Data.ScriptURL.Prot"], self["Data.ScriptURL.Host"]) + try: + port = int(host.split(":", 1)[1]) + complete_url += ":%s" % port + except (IndexError, ValueError): + if cherrypy.request.scheme == "http": + port = 80 + elif cherrypy.request.scheme == "https": + port = 443 + else: + ## unknown scheme -> port 0 + self.cbox.log.info("unknown protocol scheme used: %s" % \ + (cherrypy.request.scheme,)) + port = 0 + self["Data.ScriptURL.Port"] = port + ## retrieve the relative address of the CGI (or the cherrypy base address) + ## remove the last part of the url and add a slash + path = "/".join(cherrypy.request.path.split("/")[:-1]) + "/" + self["Data.ScriptURL.Path"] = path + complete_url += path + self["Data.ScriptURL"] = complete_url + for (key, value) in cherrypy.request.params.items(): + if isinstance(value, list): + self["Data.ScriptParams.%s" % key] = value[0] + else: + self["Data.ScriptParams.%s" % key] = str(value) + if cherrypy.request.headers.has_key("CRYPTOBOX-Location"): + self.cbox.log.debug("ProxyLocation: %s" % \ + cherrypy.request.headers["CRYPTOBOX-Location"]) + self["Data.Proxy.ScriptPath"] = \ + cherrypy.request.headers["CRYPTOBOX-Location"] + if cherrypy.request.headers.has_key("X-Forwarded-Host"): + self.cbox.log.debug("ProxyHost: %s" % cherrypy.request.headers["X-Forwarded-Host"]) + self["Data.Proxy.Host"] = cherrypy.request.headers["X-Forwarded-Host"] + except AttributeError: + self["Data.ScriptURL"] = "" + + + def set_current_disk_state(self, device): + """Set some hdf values according to the currently active disk. + """ + for container in self.cbox.get_container_list(): + if container.get_device() == device: + is_encrypted = (container.get_type() == \ + cbxContainer.CONTAINERTYPES["luks"]) and 1 or 0 + is_plain = (container.get_type() == \ + cbxContainer.CONTAINERTYPES["plain"]) and 1 or 0 + is_mounted = container.is_mounted() and 1 or 0 + is_busy = container.is_busy() and 1 or 0 + self["Data.CurrentDisk.device"] = container.get_device() + self["Data.CurrentDisk.name"] = container.get_name() + self["Data.CurrentDisk.encryption"] = is_encrypted + self["Data.CurrentDisk.plaintext"] = is_plain + self["Data.CurrentDisk.active"] = is_mounted + self["Data.CurrentDisk.busy"] = is_busy + self["Data.CurrentDisk.size"] = cbxTools.get_blockdevice_size_humanly( + container.get_device()) + if is_mounted: + self.cbox.log.debug("Retrieving container's data: %s" % \ + container.get_name()) + (size, avail, used) = container.get_capacity() + percent = int(used)*100 / int(size) + self.cbox.log.debug(percent) + self["Data.CurrentDisk.capacity.used"] = used + self["Data.CurrentDisk.capacity.free"] = avail + self["Data.CurrentDisk.capacity.size"] = size + self["Data.CurrentDisk.capacity.percent"] = percent + else: + for key in self.keys(): + if key.startswith("Data.CurrentDisk.capacity."): + del self[key] + self["Settings.LinkAttrs.device"] = device + + + def set_containers_state(self): + """Set some hdf values according to the list of available containers. + """ + ## first: clean the dataset up - necessary if we were called more than once + for key in self.keys(): + if key.startswith("Data.Disks."): + del self[key] + avail_counter = 0 + active_counter = 0 + self.cbox.reread_container_list() + for container in self.cbox.get_container_list(): + ## useful if the container was changed during an action + container.reset_object() + is_encrypted = (container.get_type() == \ + cbxContainer.CONTAINERTYPES["luks"]) and 1 or 0 + is_plain = (container.get_type() == \ + cbxContainer.CONTAINERTYPES["plain"]) and 1 or 0 + is_mounted = container.is_mounted() and 1 or 0 + is_busy = container.is_busy() and 1 or 0 + self["Data.Disks.%d.device" % avail_counter] = container.get_device() + self["Data.Disks.%d.name" % avail_counter] = container.get_name() + self["Data.Disks.%d.encryption" % avail_counter] = is_encrypted + self["Data.Disks.%d.plaintext" % avail_counter] = is_plain + self["Data.Disks.%d.busy" % avail_counter] = is_busy + self["Data.Disks.%d.active" % avail_counter] = is_mounted + self["Data.Disks.%d.size" % avail_counter] = \ + cbxTools.get_blockdevice_size_humanly(container.get_device()) + if is_mounted: + active_counter += 1 + avail_counter += 1 + self["Data.activeDisksCount"] = active_counter + + + def set_plugin_data(self): + """Set some hdf values according to the available features. + """ + ## first: clean the dataset up - necessary if we were called more than once + for key in self.keys(): + if key.startswith("Settings.PluginList."): + del self[key] + for plugin in self.plugin_manager.get_plugins(): + entry_name = "Settings.PluginList." + plugin.get_name() + self[entry_name] = plugin.get_name() + self[entry_name + ".Rank"] = plugin.get_rank() + self[entry_name + ".RequestAuth"] = plugin.is_auth_required() and "1" or "0" + for capy in plugin.plugin_capabilities: + self[entry_name + ".Types." + capy] = "1" + for visi in plugin.get_visibility(): + self[entry_name + ".Visible." + visi] = "1" + + + def __set_config_values(self): + """Set some hdf values according to configuration settings. + """ + self["Settings.TemplateDir"] = os.path.abspath( + self.prefs["Locations"]["TemplateDir"]) + self["Settings.DocDir"] = os.path.abspath(self.prefs["Locations"]["DocDir"]) + self["Settings.Stylesheet"] = self.prefs["WebSettings"]["Stylesheet"] + self["Settings.Language"] = self.prefs["WebSettings"]["Languages"][0] + self["Settings.SettingsDir"] = self.prefs["Locations"]["SettingsDir"] + diff --git a/v0.3.4.5/src/cryptobox/web/languages.py b/v0.3.4.5/src/cryptobox/web/languages.py new file mode 100644 index 0000000..e55a2f1 --- /dev/null +++ b/v0.3.4.5/src/cryptobox/web/languages.py @@ -0,0 +1,49 @@ +#-*- coding: utf-8 -*- +# +# Copyright 2006 sense.lab e.V. +# +# This file is part of the CryptoBox. +# +# The CryptoBox 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 CryptoBox 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 the CryptoBox; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +"""supply information about existing languages +""" + +__revision__ = "$Id" + +## every language information should contain (name, pluralformat) +LANGUAGE_INFO = { + "cs": ('Český', ('3', '(n==1) ? 0 : (n>=2 && n< =4) ? 1 : 2')), + "da": ('Dansk', ('2', '(n != 1)')), + "de": ('Deutsch', ('2', '(n != 1)')), + "en": ('English', ('2', '(n != 1)')), + "es": ('Español', ('2', '(n != 1)')), + "fi": ('Suomi', ('2', '(n != 1)')), + "fr": ('Français', ('2', '(n != 1)')), + "hu": ('Magyar', ('1', '0')), + "it": ('Italiano', ('2', '(n != 1)')), + "ja": ('日本語', ('1', '0')), + "nl": ('Nederlands', ('2', '(n != 1)')), + "pl": ('Polski', ('3', '(n==1 ? 0 : n%10>=2 && n%10< =4 ' + + '&& (n%100<10 || n%100>=20) ? 1 : 2)')), + "pt": ('Português', ('2', '(n != 1)')), + "ru": ('Русский', ('3', '(n%10==1 && n%100!=11 ? 0 : ' + + 'n%10>=2 && n%10< =4 && (n%100<10 || n%100>=20) ? 1 : 2)')), + "sl": ('Slovensko', ('4', '(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || ' + + 'n%100==4 ? 2 : 3)')), + "sv": ('Svenska', ('2', '(n != 1)')), + } + diff --git a/v0.3.4.5/src/cryptobox/web/sites.py b/v0.3.4.5/src/cryptobox/web/sites.py new file mode 100644 index 0000000..68bf92b --- /dev/null +++ b/v0.3.4.5/src/cryptobox/web/sites.py @@ -0,0 +1,680 @@ +# +# Copyright 2006 sense.lab e.V. +# +# This file is part of the CryptoBox. +# +# The CryptoBox 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 CryptoBox 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 the CryptoBox; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +""" this module handles all http requests and renders a website """ + +__revision__ = "$Id$" + +import cryptobox.core.main +import cryptobox.web.dataset +import cryptobox.plugins.manage +import cryptobox.core.exceptions +import re +import cherrypy +import os +import sys + +try: + import neo_cgi, neo_util, neo_cs +except ImportError: + _ERRMSG = "Could not import clearsilver module. \ + Try 'apt-get install python-clearsilver'." + sys.stderr.write(_ERRMSG) + raise ImportError, _ERRMSG + + +GETTEXT_DOMAIN = 'cryptobox-server' + + +class PluginIconHandler: + """deliver the icons of available plugins via cherrypy + + the state (enabled/disabled) and the require-auth setting is ignored to + avoid repetitive reloading""" + + def __init__(self, plugins): + for plugin in plugins.get_plugins(): + if not plugin: + continue + plname = plugin.get_name() + ## expose the get_icon function of this plugin + setattr(self, plname, plugin.get_icon) + + + +class PluginDownloadHandler: + """deliver downloadable files of available plugins via cherrypy + + the state (enabled/disabled) and the require-auth setting is ignored + """ + + def __init__(self, plugins): + for plugin in plugins.get_plugins(): + if not plugin: + continue + plname = plugin.get_name() + ## expose the get_icon function of this plugin + setattr(self, plname, plugin.download) + + + +class WebInterfaceSites: + """handle all http requests and render pages + + this includes: + - filtering common arguments + - calling feature actions + - translating content + + all available features are dynamically exposed + """ + + ## this template is used under strange circumstances + defaultTemplate = "empty" + + + def __init__(self, conf_file=None): + ## we should only use variables preceded by "__" to avoid name conflicts + ## when loading features + self.cbox = cryptobox.core.main.CryptoBox(conf_file) + self.__cached_language_data = None + self.__dataset = None + ## load the plugin manager - we will not try to detect new plugins on + ## the fly ... + self.__plugin_manager = cryptobox.plugins.manage.PluginManager( + self.cbox, self.cbox.prefs["Locations"]["PluginDir"], self) + self.__reset_dataset() + ## store the original http error handler + self._cp_on_http_error = self.new_http_error_handler + ## set initial language order + self.lang_order = self.cbox.prefs["WebSettings"]["Languages"][:] + ## publish plugin icons + self.icons = PluginIconHandler(self.__plugin_manager) + self.icons.exposed = True + ## publish plugin downloads + self.downloads = PluginDownloadHandler(self.__plugin_manager) + self.downloads.exposed = True + ## announce that the server started up + self.setup() + + + def setup(self): + """Prepare the webinterface. + """ + self.cbox.setup() + for plugin in self.__plugin_manager.get_plugins(): + if plugin: + plugin.handle_event("bootup") + + + def cleanup(self): + """Shutdown the webinterface safely. + """ + self.cbox.log.info("Shutting down webinterface ...") + for plugin in self.__plugin_manager.get_plugins(): + if plugin: + self.cbox.log.info("Cleaning up plugin '%s' ..." % plugin.get_name()) + plugin.handle_event("shutdown") + self.cbox.cleanup() + + + def __reset_dataset(self): + """this method has to be called at the beginning of every "site" action + important: only at the beginning of an action (to not loose information) + important: for _every_ "site" action (cherrypy is stateful) + also take care for the plugins, as they also contain datasets + """ + self.__load_plugins() + self.__dataset = cryptobox.web.dataset.WebInterfaceDataset( + self.cbox, self.cbox.prefs, self.__plugin_manager) + ## check, if a configuration partition has become available + self.cbox.prefs.prepare_partition() + + + def __load_plugins(self): + """reinitialize the list of available plugins + + this includes the following: + - reload all plugins and check their state (disabled or not) + - reinitilize the datasets of all plugins + """ + #TODO: in the long-term we should create a separate object that only + # contains the plugin handlers - this avoids some hassle of namespace + # conflicts - this object will be the cherrypy.server.root + # finish this for v0.4 + for plugin in self.__plugin_manager.get_plugins(): + if not plugin: + continue + plname = plugin.get_name() + ## remove the old plugin handler and attach a new one + try: + ## check if there are name conflicts: e.g. a local variable has + ## the same name as a plugin to be loaded -> skip these plugins + ## if we would not check this here, nasty effects could occour + prev_obj = getattr(self, plname) + if not callable(prev_obj) or not prev_obj.exposed: + ## name conflict - see below + raise NameError + ## remove the plugin handler + delattr(self, plname) + except AttributeError: + ## "self" does not contain the given "plname" element + ## this is ok, as we are just cleaning up + pass + except NameError: + ## the attribute "exposed" of the element self."plname" does + ## not exist - it seems, that we have a name conflict + self.cbox.log.error("Skipping feature (%s) as its" % plname + + " name conflicts with a local variable - see" + + " module cryptobox.web.sites") + ## skip this plugin + continue + ## the old attribute was cleaned up - we can reinitialize it now + if plugin.is_enabled(): + self.cbox.log.info("Plugin '%s' loaded" % plname) + ## expose all features as URLs + setattr(self, plname, self.return_plugin_action(plugin)) + getattr(self, plname).exposed = True + #TODO: check, if the stream_response feature really works + #for now the "stream_response" feature seems to be broken + #setattr(getattr(self, plname), "stream_respones", True) + else: + self.cbox.log.info("Plugin '%s' is disabled" % plname) + ## nothing else has to be done + + + ## sub pages requiring authentication may not be defined above + def __request_auth(self=None): + """ this is a function decorator to check authentication + """ + def check_credentials(site): + """ see description of _inner_wrapper - please simplify this! + """ + def _inner_wrapper(self, *args, **kargs): + """this function was necessary while trying around with the + function decorator - if someone can implement the decorator + with less effort, then any suggestions are welcome! + """ + import base64 + ## define a "non-allowed" function + user, password = None, None + try: + ## ignore the "Basic " (first six letters) part + resp = cherrypy.request.headers["Authorization"][6:] + (user, password) = base64.b64decode(resp).split(":", 1) + except KeyError: + ## no "authorization" header was sent + pass + except TypeError: + ## invalid base64 string + pass + except AttributeError: + ## no cherrypy request header defined + pass + auth_dict = self.cbox.prefs.user_db["admins"] + if user in auth_dict.keys(): + if self.cbox.prefs.user_db.get_digest(password) == auth_dict[user]: + ## ok: return the choosen page + self.cbox.log.info("access granted for: %s" % user) + return site(self, *args, **kargs) + else: + self.cbox.log.info( + "wrong password supplied for: %s" % user) + else: + self.cbox.log.info("unknown user: %s" % str(user)) + ## wrong credentials: return "access denied" + cherrypy.response.headers["WWW-Authenticate"] = \ + '''Basic realm="CryptoBox"''' + cherrypy.response.status = 401 + return self.__render("access_denied") + return _inner_wrapper + return check_credentials + + + ###################################################################### + ## put real sites down here and don't forget to expose them at the end + + + @cherrypy.expose + def index(self, weblang="", help="0", device=None): + """the default page on startup - we show the list of available disks + """ + self.__reset_dataset() + self.__set_web_lang(weblang) + self.__check_environment() + ## do not forget the language! + param_dict = {"weblang":weblang} + ## render "disks" plugin by default + return self.return_plugin_action( + self.__plugin_manager.get_plugin("disks"))(**param_dict) + + + def new_http_error_handler(self, error_code, message): + """handle http errors gracefully + + 404 - not found errors: ignored if url is below /cryptobox-misc/ + other 404 errors: send the error code and return a nice informative page + 500 - runtime errors: return "ok" exit code and show a polite excuse + others: are there any other possible http errors? + """ + import traceback + ## we ignore uninteresting not-found errors + if (error_code == 404) and \ + (cherrypy.request.path.startswith("/cryptobox-misc/") or \ + cherrypy.request.path in ['/robots.txt','/favicon.ico']): + cherrypy.response.status = error_code + return + ## an invalid action was requested + if error_code == 404: + ## we send a not-found error (with the usual interface) + cherrypy.response.status = error_code + self.__dataset["Data.Warning"] = "InvalidAction" + cherrypy.response.body = self.__render("empty") + return + ## are there still bugs in the code? + if error_code == 500: + ## we fix the error code (200 is "OK") + cherrypy.response.status = 200 + self.cbox.log.error( + "HTTP-ERROR[500] - runtime error: %s" % str(message)) + ## add a traceback and exception information to the lo + for log_line in traceback.format_exception(*sys.exc_info()): + self.cbox.log.error("\t%s" % log_line) + self.__dataset["Data.Warning"] = "RuntimeError" + cherrypy.response.body = self.__render("empty") + return + ## unknown error type + cherrypy.response.status = error_code + self.cbox.log.warn("HTTP-ERROR[%d] - an unknown error occoured: %s" \ + % (error_code, message)) + cherrypy.response.body = self.__render("empty") + + + def return_plugin_action(self, plugin): + """ returns a function that is suitable for handling a cherrypy + page request + """ + def handler(self, weblang="", device=None, help="0", redirect=None, + message_keep=None, **args): + """this function handles a cherrypy page request + """ + plugin.reset() + self.__reset_dataset() + self.__check_environment() + self.__set_web_lang(weblang) + ## we always read the "device" setting - otherwise volume-plugin + ## links would not work easily + ## (see "volume_props" linking to "volume_format_fs") + ## it will get ignored for non-volume plugins + plugin.device = None + if device and self.__set_device(device): + plugin.device = device + ## check the device argument of volume plugins + if "volume" in plugin.plugin_capabilities: + ## initialize the dataset of the selected device if necessary + if plugin.device: + self.__dataset.set_current_disk_state(plugin.device) + else: + ## invalid (or missing) device setting + return self.__render(self.defaultTemplate) + ## check if there is a "redirect" setting - this will override + ## the return value of the do_action function + ## (e.g. useful for umount-before-format) + override_next_template = None + if redirect: + override_next_template = { "plugin": redirect } + if "volume" in plugin.plugin_capabilities: + override_next_template["values"] = {"device":plugin.device} + ## check for information to be kept after the last call + if message_keep: + for (key, value) in message_keep["dataset"].items(): + self.__dataset[key] = value + ## check if the device is busy + if plugin.device and self.cbox.get_container(plugin.device).is_busy(): + return self.__render("volume_busy") + ## call the plugin handler + next_template = plugin.do_action(**args) + ## for 'volume' plugins: reread the dataset of the current disk + ## additionally: set the default template for plugins + if "volume" in plugin.plugin_capabilities: + ## maybe the state of the current volume was changed? + self.__dataset.set_current_disk_state(plugin.device) + if not next_template: + next_template = { "plugin":"volume_mount", + "values":{"device":plugin.device}} + else: + ## some non-volume plugins change the internal state of other + ## plugins - e.g.: plugin_manager + ## if we do not call __load_plugins now, then it is possible + ## to call a plugin directly after disabling it (only once) + self.__load_plugins() + self.__dataset.set_plugin_data() + ## default page for non-volume plugins is the disk selection + if not next_template: + next_template = { "plugin":"disks", "values":{} } + #TODO: there is a lot of piece-by-piece updating around here + # for v0.4 we should just call __reset_dataset - but this would + # require to store the currently changed dataset values (e.g.i + # weblang) somewhere else to not override it + ## some non-volume plugins may change the state of containers + ## the mount plugin may change the number of active disks - for the logo + self.__dataset.set_containers_state() + ## was a redirect requested? + if override_next_template: + next_template = override_next_template + ## if another plugins was choosen for 'next_template', then do it! + if isinstance(next_template, dict) \ + and "plugin" in next_template.keys() \ + and "values" in next_template.keys() \ + and self.__plugin_manager.get_plugin(next_template["plugin"]): + value_dict = dict(next_template["values"]) + ## force the current weblang attribute - otherwise it gets lost + value_dict["weblang"] = self.lang_order[0] + ## check for warnings/success messages, that should be kept + if "Data.Success" in plugin.hdf.keys() \ + or "Data.Warning" in plugin.hdf.keys(): + value_dict["message_keep"] = {"plugin":plugin, "dataset":{}} + for keep_key in ("Data.Warning", "Data.Success"): + if keep_key in plugin.hdf.keys(): + self.cbox.log.info("keeping message: %s" % \ + plugin.hdf[keep_key]) + value_dict["message_keep"]["dataset"][keep_key] = \ + plugin.hdf[keep_key] + new_plugin = self.__plugin_manager.get_plugin(next_template["plugin"]) + return self.return_plugin_action(new_plugin)(**value_dict) + ## save the currently active plugin name + self.__dataset["Data.ActivePlugin"] = plugin.get_name() + return self.__render(next_template, plugin) + ## apply authentication? + if plugin.is_auth_required(): + return lambda **args: self.__request_auth()(handler)(self, **args) + else: + return lambda **args: handler(self, **args) + + + @cherrypy.expose + def test(self, weblang="", help="0", device=None): + """test authentication - this function may be safely removed + """ + self.__reset_dataset() + self.__set_web_lang(weblang) + self.__check_environment() + result = "Test
    " + for key in cherrypy.request.headers: + result += "
  • %s - %s
  • " % (str(key), str(cherrypy.request.headers[key])) + result += "
" + return result + + + @cherrypy.expose + def test_stream(self, weblang="", help="0", device=None): + """just for testing purposes - to check if the "stream_response" feature + actually works - for now (September 02006) it does not seem to be ok + """ + import time + yield "neu

    " + for num in range(10): + yield "
  • yes: %d - %s
  • " % (num, str(time.time())) + time.sleep(1) + yield "

" + + + + ##################### input checker ########################## + + def __check_environment(self): + """inform the user of suspicious environmental problems + + examples are: non-https, readonly-config, ... + """ + warnings = [] + for pl in self.__plugin_manager.get_plugins(): + warnings.extend(pl.get_warnings()) + warnings.sort(reverse=True) + for (index, (warn_prio, warn_text)) in enumerate(warnings): + self.__dataset["Data.EnvironmentWarning.%d" % index] = warn_text + + + def __set_web_lang(self, value): + """set the preferred priority of languages according to this order: + 1. language selected via web interface + 2. preferred browser language setting + 3. languages defined in the config file + """ + ## start with the configured language order + lang_order = self.cbox.prefs["WebSettings"]["Languages"][:] + self.cbox.log.debug( + "updating language preferences (default: %s)" % str(lang_order)) + ## put the preferred browser language in front + guess = self.__get_browser_language(lang_order) + if guess: + lang_order.remove(guess) + lang_order.insert(0, guess) + self.cbox.log.debug( + "raised priority of preferred browser language: %s" % guess) + ## check if the 'weblang' setting is necessary (does it change the result + ## of the language preference calculation?) + override_by_weblang = False + ## is the chosen language (via web interface) valid? - put it in front + if value and (value in lang_order) and (not re.search(r'\W', value)): + ## skip if the 'weblang' value is already at the top of the list + if lang_order.index(value) != 0: + override_by_weblang = True + lang_order.remove(value) + lang_order.insert(0, value) + self.cbox.log.debug( + "raised priority of selected language: %s" % value) + elif value: + self.cbox.log.info("invalid language selected: %s" % value) + ## store current language setting + self.cbox.log.info( + "current language preference: %s" % str(lang_order)) + self.lang_order = lang_order + self.__dataset["Settings.Language"] = lang_order[0] + ## we do not have to add the LinkAttr if it is irrelevant + if override_by_weblang: + self.__dataset["Settings.LinkAttrs.weblang"] = lang_order[0] + + + def __get_browser_language(self, avail_langs): + """guess the preferred language of the user (as sent by the browser) + take the first language, that is part of 'avail_langs' + """ + try: + pref_lang_header = cherrypy.request.headers["Accept-Language"] + except KeyError: + ## no language header was specified + return None + ## this could be a typical 'Accept-Language' header: + ## de-de,de;q=0.8,en-us;q=0.5,en;q=0.3 + regex = re.compile(r"\w+(-\w+)?(;q=[\d\.]+)?$") + pref_langs = [e.split(";", 1)[0] + for e in pref_lang_header.split(",") + if regex.match(e)] + ## is one of these preferred languages available? + for lang in pref_langs: + if lang in avail_langs: + return lang + ## we try to be nice: also look for "de" if "de-de" was specified ... + for lang in pref_langs: + ## use only the first part of the language + short_lang = lang.split("-", 1)[0] + if short_lang in avail_langs: + return short_lang + ## we give up + return None + + + def __set_device(self, device): + """check a device name that was chosen via the web interface + issue a warning if the device is invalid""" + if device and re.match(r'[\w /\-]+$', device) \ + and self.cbox.get_container(device): + self.cbox.log.debug("Select device: %s" % device) + return True + else: + self.cbox.log.warn("Invalid device: %s" % device) + self.__dataset["Data.Warning"] = "InvalidDevice" + return False + + + def __substitute_gettext(self, languages, text_domain, hdf): + """substitute all texts in the hdf dataset with their translated + counterparts as returned by gettext + """ + import gettext + try: + translator = gettext.translation(text_domain, languages=languages) + except IOError, err_msg: + ## no translation found + self.cbox.log.warn("unable to load language file: %s" % err_msg) + return hdf + def walk_tree(parent_name, hdf_node): + """iterate through all nodes""" + def translate_node(node): + """turn one single string into unicode""" + if not node.value(): + return + for (key, value) in node.attrs(): + ## ignore all nodes with the 'LINK' attribute + ## for now clearsilver is buggy regarding attributes + ## buggy -> parsing of a hdf file fails silently + if key == "LINK": + return + ## as long as the attributes do not work, we have to rely on + ## some magic names to ignore translations + if (parent_name == "Link") and \ + (node.name() in ["Rel", "Prot", "Abs"]): + return + try: + #TODO: we should use unicode - or not? - turn it on later + #node.setValue("", translator.ugettext(node.value())) + ## quite obscure: ugettext can handle None - gettext breaks instead + node.setValue("", translator.gettext(node.value())) + except UnicodeEncodeError, err_msg: + self.cbox.log.info( + "Failed unicode encoding for gettext: %s - %s" \ + % (node.value(),err_msg)) + ## fallback to default encoding + node.setValue("", translator.gettext(node.value())) + while hdf_node: + translate_node(hdf_node) + walk_tree(hdf_node.name(), hdf_node.child()) + hdf_node = hdf_node.next() + walk_tree("", hdf) + + + def __get_language_data(self): + """return the hdf dataset of the main interface and all plugins + translations are done according to self.lang_order + """ + ## check if the language setting has changed - use cache if possible + if self.__cached_language_data and \ + self.__cached_language_data["lang_order"] == self.lang_order: + self.cbox.log.debug( + "using cached language data: %s" % str(self.lang_order)) + return self.__cached_language_data["hdf"] + self.cbox.log.debug("generating language data") + hdf = neo_util.HDF() + hdf.readFile(os.path.join( + self.cbox.prefs["Locations"]["TemplateDir"],"language.hdf")) + self.__substitute_gettext(self.lang_order, GETTEXT_DOMAIN, hdf) + ## load the language data of all plugins + for plugin in self.__plugin_manager.get_plugins(): + pl_lang = plugin.get_language_data() + self.__substitute_gettext(self.lang_order, "%s-feature-%s" % \ + (GETTEXT_DOMAIN, plugin.get_name()), pl_lang) + hdf.copy("Plugins.%s" % plugin.get_name(), pl_lang) + self.cbox.log.debug( + "language data for plugin loaded: %s" % plugin.get_name()) + ## cache result for later retrieval + self.__cached_language_data = \ + {"lang_order": self.lang_order, "hdf": hdf} + return hdf + + + def __render(self, render_info, plugin=None): + '''renders from clearsilver templates and returns the resulting html + ''' + ## is render_info a string (filename of the template) or a dictionary? + if isinstance(render_info, dict): + template = render_info["template"] + if render_info.has_key("generator"): + generator = render_info["generator"] + else: + generator = None + else: + (template, generator) = (render_info, None) + + ## load the language data + hdf = neo_util.HDF() + hdf.copy("Lang", self.__get_language_data()) + + ## first: assume, that the template file is in the global + ## template directory + self.__dataset["Settings.TemplateFile"] = os.path.abspath(os.path.join( + self.cbox.prefs["Locations"]["TemplateDir"], + template + ".cs")) + + if plugin: + ## check, if the plugin provides the template file -> overriding + plugin_cs_file = plugin.get_template_filename(template) + if plugin_cs_file: + self.__dataset["Settings.TemplateFile"] = plugin_cs_file + + ## add the current state of the plugins to the hdf dataset + self.__dataset["Data.Status.Plugins.%s" % plugin.get_name()] = \ + plugin.get_status() + ## load the dataset of the plugin + plugin.load_dataset(hdf) + + self.cbox.log.info("rendering site: " + template) + + cs_path = os.path.abspath(os.path.join( + self.cbox.prefs["Locations"]["TemplateDir"], "main.cs")) + if not os.access(cs_path, os.R_OK): + self.cbox.log.error( + "Couldn't read clearsilver file: %s" % cs_path) + yield "Couldn't read clearsilver file: %s" % cs_path + return + + self.cbox.log.debug(self.__dataset) + for key in self.__dataset.keys(): + hdf.setValue(key, str(self.__dataset[key])) + cs_data = neo_cs.CS(hdf) + cs_data.parseFile(cs_path) + + ## is there a generator containing additional information? + if not generator: + ## all content in one flush + result_data = cs_data.render().splitlines() + ## remove empty leading lines (avoids html warnings) + while not result_data[0].strip(): + del result_data[0] + yield "\n".join(result_data) + else: + content_generate = generator() + dummy_line = """""" + ## now we do it linewise - checking for the content marker + for line in cs_data.render().splitlines(): + if line.find(dummy_line) != -1: + yield line.replace(dummy_line, content_generate.next()) + else: + yield line + "\n" + diff --git a/v0.3.4.5/src/pylintrc b/v0.3.4.5/src/pylintrc new file mode 100644 index 0000000..bdcf546 --- /dev/null +++ b/v0.3.4.5/src/pylintrc @@ -0,0 +1,44 @@ +# this is a local configuration file for pylint to be used for checking the +# quality of the CryptoBox code +# +# just run: +# bin/do_pylint.sh cryptobox.core.main +# to check the module cryptobox.core.main + + +[MASTER] +# Add to the black list. It should be a base name, not a +# path. You may set this option multiple times. +ignore=CVS +ignore=.svn + + +[BASIC] + +# Required attributes for module, separated by a comma +required-attributes=__revision__ + +# Good variable names which should always be accepted, separated by a comma +good-names=i,j,k,ex,Run,_ + +# Bad variable names which should always be refused, separated by a comma +bad-names=foo,bar,baz,toto,tutu,tata + + +[FORMAT] + +# Maximum number of characters on a single line. +max-line-length=88 + +# Maximum number of lines in a module +max-module-lines=1000 + +# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1 +# tab). +indent-string='\t' + + +[MISCELLANEOUS] + +# List of note tags to take in consideration, separated by a comma. +notes=FIXME,XXX,TODO diff --git a/v0.3.4.5/stuff/debian-package.txt b/v0.3.4.5/stuff/debian-package.txt new file mode 100644 index 0000000..a69e7d4 --- /dev/null +++ b/v0.3.4.5/stuff/debian-package.txt @@ -0,0 +1,81 @@ +HOW TO UPLOAD A FRESH DEBIAN PACKAGE + +1) update the debian changelog +Run "debchange -i" to create a new changelog entry. Leave some useful notes. + +BEWARE: all development releases must have the debian release no. "1" (the last +part of the version following the dash) - e.g.: 0.2.50-1. + +You MUST increase the upstream version (before the dash) by one whenever you +want to upload a new debian package to the repository - otherwise you will +inevitably mess up the package repository - and you know, who will have to +figure out, how to fix this :) + + +2) create the package +Change to the trunk directory of the project and run the followin: + ../tags/make-deb.sh UPSTREAM_VERSION . +(do not forget the final dot) + +The UPSTREAM_VERSION is the one, that you were using for the new debian +changelog entry. Again: _never_ upload two different debian packages with the +same upstream version number or you will go to hell! + +The package files will get copied to ../tags/packages/debian/. + +The version number in src/cryptobox/__init__.py gets updated automatically by +the make-deb.sh script. + +3) double check the package +Run the two testing programs "lintian" and "linda" with the new +package. + lintian ../tags/packages/debian/cryptobox-server...deb + linda ../tags/packages/debian/cryptobox-server...deb + +Try to install the new package on a system with dpkg and see if it went fine. + +4) upload the package +You should use dupload - it is the preferred uploading program for debian +packages: + apt-get install dupload +See http://www.debian-administration.org/articles/286 for more details. + +Create the following configuration file as ~/.dupload.conf: + package config; + $preupload{'changes'} = ""; + $default_host = "sao"; + $cfg{"sao"} = { + fqdn => "sao", + login => "uml-www", + method => "scpb", + incoming => "/data/deb-repo/incoming/unstable", + dinstall_runs => 1, + }; + 1; + +Furthermore you need the following entry in your ~/.ssh/config: + Host sao + Hostname systemausfall.org + Port 2200 +(otherwise it is impossible to change the ssh port in dupload) + +To upload the latest debian package you could do the following: + dupload $(ls -tr ../tags/packages/debian/*.changes | tail -1) +(this will only use the latest changes-file) + + +5) import the package into the repository +It would be nice, if the web interface would work - but it does not. +Please wait for etch - then we will update reprepro. + +For now you have to login to the www-uml: + ssh uml-www@sao + +Switch to the deb-repo user: + su - deb-repo + +Import all incoming packages: + scripts/import.sh + +You did it! + diff --git a/v0.3.4.5/stuff/known_problems b/v0.3.4.5/stuff/known_problems new file mode 100644 index 0000000..5c6a830 --- /dev/null +++ b/v0.3.4.5/stuff/known_problems @@ -0,0 +1,4 @@ +Bug-Report: twill/other-packages/ClientForm.py: uncomment line 846 ("XHTMLCompatibleFormParser" instead of default parser) - this solves an eternal loop-problem caused by line 958 ("fp.feed(ch)") + +Bug-Report: testoob - loading of a TestSuite (as advertised by the commandline help) does not work (due to unittest.py/loadTestsFromModule) + diff --git a/v0.3.4.5/stuff/language_specification.txt b/v0.3.4.5/stuff/language_specification.txt new file mode 100644 index 0000000..706ea87 --- /dev/null +++ b/v0.3.4.5/stuff/language_specification.txt @@ -0,0 +1,33 @@ +Some important notes regarding the language files: + +1) warning/success messages + +Attributes: + Title - title of the message + Text - text of the message + Link.Text - textual representation of a link + Link.Abs - absolute URL e.g. http://cryptobox.org/trac + Link.Prot - 'http' or 'https' + Link.Rel - relative url (based on the cgi root) + Link.Attr[12].[name|value] - arguments to be added to the link + + The "Link" attributes are only necessary if the (warning) message can be resolved by + some action. Otherwise it is not necessary to define any "Link" attribute. + + All values are optional, but you should follow these rules: + - at least one of "Title" and "Text" should be defined + - if there are "Link" attributes, then you should also define "Link.Text" + - "Link.Abs" can not be combined with "Link.Prot", "Link.Rel" or "Link.Attr..." + - "Link.Rel" and "Link.Prot" may be used together + (see plugin/volume_format_fs/lang/en.hdf for a good example for links) + + +2) adding a new language + - add the language code (e.g. "de") to the ALL_LANGUAGES setting in + scripts/update_po_files.py + - run "scripts/update_po_files.py && scripts/revert_unchanged_po_files.sh" + - svn add plugins/*/intl/NEW_LANG_CODE intl/NEW_LANG_CODE + - svn revert plugins/*/intl/NEW_LANG_CODE/*.mo intl/NEW_LANG_CODE/*.mo + - svn propset svn:ignore "*.mo" plugins/*/intl/NEW_LANG_CODE intl/NEW_LANG_CODE + - add it to /etc/pootle/pootle.prefs in the translation pootle server + diff --git a/v0.3.4.5/stuff/pootle-updates.txt b/v0.3.4.5/stuff/pootle-updates.txt new file mode 100644 index 0000000..020edde --- /dev/null +++ b/v0.3.4.5/stuff/pootle-updates.txt @@ -0,0 +1,33 @@ +We use a pootle server to allow online translation of our language data + +The following text should give you guide lines on how to: + - update and merge language data to (A) and from (B) the pootle server + - change english original texts (C) + +------------------------------------------------------------------------------ + +A) update the pootle language files via svn + - log in to the pootle server (thorax) + - become root + - su - pootle + - svn up svn + - svn stat svn + - resolve potential conflicts + + +B) commit pootle translations to svn + - log in to the pootle server (thorax) + - become root + - su - pootle + - use "svn stat" and "svn diff" to check local changes + - svn up + - resolve potential conflicts (svn stat) + - svn commit + + +C) update language template files (after changing english texts) + - change the language.hdf file (of the base cryptobox or of a plugin) + - run scripts/update_po_files.py + - review the changes + - commit the changes + diff --git a/v0.3.4.5/stuff/uml-howto.txt b/v0.3.4.5/stuff/uml-howto.txt new file mode 100644 index 0000000..908b499 --- /dev/null +++ b/v0.3.4.5/stuff/uml-howto.txt @@ -0,0 +1,5 @@ +debootstrap etch _builddir +chroot _builddir + sed -i "/respawn:\/sbin\/getty/d" /etc/inittab + echo "0:1235:respawn:/sbin/getty 38400 console linux" >>/etc/inittab + diff --git a/v0.3.4.5/stuff/upload_and_release-policy.txt b/v0.3.4.5/stuff/upload_and_release-policy.txt new file mode 100644 index 0000000..c01366a --- /dev/null +++ b/v0.3.4.5/stuff/upload_and_release-policy.txt @@ -0,0 +1,23 @@ +This file describes common procedures for commiting code and for releasing a +new version. + +1) day-to-day commits: + +The usual steps before commit: + - scripts/update_po_files.py && scripts/revert_unchanged_po_files.sh + - run unittests: + - bin/uml-setup.py + - log into uml + - install the previously build package + - invoke-rc.d cryptobox-server stop + - hostfs/bin/do_unittests.sh + - check that CryptoBoxRootActions has OVERRIDE_FILECHECK = False + + +2) release a new version + + - follow the instructions in "debian-package-policy.txt" + - upload the tar/deb/iso to codecoop + - update the website: index and download + - announce the release on freshmeat: http://freshmeat.net/projects/cryptobox + diff --git a/v0.3.4.5/templates/access_denied.cs b/v0.3.4.5/templates/access_denied.cs new file mode 100644 index 0000000..2b1ec9d --- /dev/null +++ b/v0.3.4.5/templates/access_denied.cs @@ -0,0 +1,6 @@ +

+ + + + + diff --git a/v0.3.4.5/templates/empty.cs b/v0.3.4.5/templates/empty.cs new file mode 100644 index 0000000..0447a4d --- /dev/null +++ b/v0.3.4.5/templates/empty.cs @@ -0,0 +1,6 @@ + + + + + + diff --git a/v0.3.4.5/templates/footer.cs b/v0.3.4.5/templates/footer.cs new file mode 100644 index 0000000..f75bbc6 --- /dev/null +++ b/v0.3.4.5/templates/footer.cs @@ -0,0 +1,43 @@ + + + +

+ + +
+ + + + +

+ + +

+ +

+ + + + + + + + + + + +MESSAGES WERE NOT HANDLED PROPERLY - PLEASE FIX THIS! + + + + diff --git a/v0.3.4.5/templates/header.cs b/v0.3.4.5/templates/header.cs new file mode 100644 index 0000000..f0814bc --- /dev/null +++ b/v0.3.4.5/templates/header.cs @@ -0,0 +1,108 @@ + + + + + + + + CryptoBox + + + + + + + + + 0 + ?> + + + + + +

+ + + + + + +
+ + + + + 0 + ?> + + + + + 0 + ?>
+ +
+
+ diff --git a/v0.3.4.5/templates/language.hdf b/v0.3.4.5/templates/language.hdf new file mode 100644 index 0000000..e5b0ff9 --- /dev/null +++ b/v0.3.4.5/templates/language.hdf @@ -0,0 +1,98 @@ +Title { + Top = The CryptoBox + Slogan = Privacy for the rest of us. + Volume = Volume + AccessDenied = Access denied +} + + +Text { + EnterCurrentPassword = Enter the current password + EnterNewPassword = Enter new password + EnterSamePassword = Repeat new password + RedirectNote = Click here if your browser does not support automatic redirection. + ProjectHomePage = Website of project + ProjectNote = The CryptoBox is a project of + ContainerName = Volume's name + +} + + +Button { + EnableHelp = Enable help + DisableHelp = Disable help +} + + +AdviceMessage { + + VolumeIsBusy { + Title = Busy volume + Text = This volume is currently busy. Please wait for a moment. + Link.Rel = / + Link.Text = Show all disks + } +} + + +WarningMessage { + + AccessDenied { + Title = Invalid access credentials + Text = Sorry - you did not enter the right credentials! Maybe you should try the default setting: username=>'admin' / password=>'admin'. + } + + EmptyPassword { + Title = Missing password + Text = You have to enter a password! + } + + EmptyNewPassword { + Title = Missing new password + Text = You have to enter a new password! + } + + DifferentPasswords { + Title = Different passwords + Text = The passwords you entered did not match. + } + + InvalidDevice { + Title = Invalid device + Text = The device you have chosen is invalid! + } + + VolumeMayNotBeMounted { + Title = The volume is open + Text = This action is not available while the volume is active. Please close it first. + Link.Text = Close volume + Link.Rel = volume_mount + Link.Attr1.name = action + Link.Attr1.value = umount + } + + InvalidAction { + Title = Invalid request + Text = Sorry - I do not know how to handle this request. If you think, that this is a bug, then you should send the most recent part of the CryptoBox log to info@cryptobox.org. + Link.Text = View log + Link.Rel = logs + Link.Attr1.name = lines + Link.Attr1.value = 50 + + } + + RuntimeError { + Title = Something weird happened + Text = We (the developer of the CryptoBox) would like to fix this problem for you and others. Please send the most recent part of the CryptoBox log to info@cryptobox.org. Thanks for your contribution! + Link.Text = View log + Link.Rel = logs + Link.Attr1.name = level + Link.Attr1.value = ERROR + } + + DeviceNotWriteable { + Title = No write permissions + Text = Sorry - the CryptoBox is not allowed to write on this device. Anyway it is still possible, that you can open it and change its content. Please ask the administrator of the CryptoBox in case you believe, that this is a mistake. + } +} + diff --git a/v0.3.4.5/templates/macros.cs b/v0.3.4.5/templates/macros.cs new file mode 100644 index 0000000..2ca3e5a --- /dev/null +++ b/v0.3.4.5/templates/macros.cs @@ -0,0 +1,262 @@ + 0 + ?>?&=./

0 ?> 0 ?> +
icon: info

unknown message

+ could not find message: ''
" method="post" enctype="application/x-www-form-urlencoded" accept-charset="utf-8">icon: volume + ?&= +
+
+ icon: <?cs var:html_escape(Data.ActivePlugin) ?> +

+
+ icon: <?cs var:html_escape(Data.ActivePlugin) ?> +
+ + <?cs
+					var:html_escape('icon: ' + x.Name) ?> + +
+ + diff --git a/v0.3.4.5/templates/main.cs b/v0.3.4.5/templates/main.cs new file mode 100644 index 0000000..b4b20a3 --- /dev/null +++ b/v0.3.4.5/templates/main.cs @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + diff --git a/v0.3.4.5/templates/show_volume_footer.cs b/v0.3.4.5/templates/show_volume_footer.cs new file mode 100644 index 0000000..301725b --- /dev/null +++ b/v0.3.4.5/templates/show_volume_footer.cs @@ -0,0 +1,3 @@ + +
+ diff --git a/v0.3.4.5/templates/show_volume_header.cs b/v0.3.4.5/templates/show_volume_header.cs new file mode 100644 index 0000000..90fb266 --- /dev/null +++ b/v0.3.4.5/templates/show_volume_header.cs @@ -0,0 +1,26 @@ + + +
+ "> + +

+
+ + + + + + + +
 
+ +
+ + + + diff --git a/v0.3.4.5/templates/volume_busy.cs b/v0.3.4.5/templates/volume_busy.cs new file mode 100644 index 0000000..0222bca --- /dev/null +++ b/v0.3.4.5/templates/volume_busy.cs @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/v0.3.4.5/templates/volume_plugins.cs b/v0.3.4.5/templates/volume_plugins.cs new file mode 100644 index 0000000..61424ba --- /dev/null +++ b/v0.3.4.5/templates/volume_plugins.cs @@ -0,0 +1,41 @@ + + + + + + + + + 0 ?> + mark it + - the rest: mark 'volume_props' ?> + class="volume_plugin_active"class="volume_plugin_passive">" alt="icon: " />   + + diff --git a/v0.3.4.5/www-data/background_frame_corner.png b/v0.3.4.5/www-data/background_frame_corner.png new file mode 100644 index 0000000000000000000000000000000000000000..2d0da076b9aaf7764c0f7f71d0d3177dc1edce64 GIT binary patch literal 2355 zcmeAS@N?(olHy`uVBq!ia0y~yU2n7*a9k?OnsXDd8dw7k}6FD&1fR&Em4^3R$_SFNL`zQT0M9bE0U(DW;$eoMwp= zW{6yiV6kK|n*Xt)$j|iHqpArGHC6dv?r**SK0WQ(qeqXH&#bgF_D_HId*{KZ*URGn zX+1YtJgeBxc$FoXp#@|tHv)=)7-=0f15-9UrT%T z_ROA{GsUyl+NY&mtJ^=nySrQ5`15P~zw3hkcGpfX_Dgj$eIAk)QhY8G$e06TfJ9zN zE|(CxpY<*F&!5|K%DLm#ZJoFN`uh0)Hpctw|IGcxJLi#o-|l%}C#BsvH>bE-|DVlv z^W#0|&;MBeKXZOkNX@%1&+ObTUEjCQb^n{RXEz_NcJG%v`}lbO^MlRo_aC)0Gu(-8 z?+>nhax*Wj&Z6e)larHgzAd}|#g~!cj(hf6|HrS|bJO-&*93KC$r zA@Vq|L&YUlW+X_aa6Wl%@2d=)2G+(mfG{uI3oVH6vKo12ixC1Jlwwi zT9khJx}+D6C;Ym!;@9%~>4{S;$DvPL<_eA8#oM}u6{1-oD!M$FjA1pb zfNYG#AwE~YY%W`(6R^|C?5ML#knw7r2~jK+y0SJiVw=2ZJ88!DQdqDXAkGZH5hg4~Ct~mJA@mck&6kuUpie`>z83U9 zQC;|+7U2)!FQ<0Zkvw$Bt=(B#`%aC#mZ;EF0YMO(l&WfNWrezGQ;kOP<$cjgfF(ak z3U-v#8E2fE_jf8^(Yt7w>gd+Av~j&|T>o*4bRca-cFTEbYq{&SA9}9kZ`|lB`TWBw z!;ThhhA$x6liy@%$mLl~=_$=5Ss%FXbd&Yl`Nay)2qk(I^uluo9E0LRLs@*fLVm|i z*-Q%i_G{Gp0)fCmnS01CMJNZR+7qNfmyI&two|8Hx&;2wrnMp8&qh)l;M0FR6m)fU z(SDb8&}=rgwYAY7A=aUbXb1hlAfbRe{OIeiH{!DZl!sS{y6BkFc%PWKtKCu(En>VxCG$4fgA8|z`DAp>X@zQdOLv*OAVc9X8&23 zxu>m*13j-f0~QwTNk=VdFqO;MXSM)zM3IbY)|v`1og?BbFxrRpb7LyUD!xG)MkyP` ziPrxNqx~__{|kpQ-O?#Yjojf+tFOdTg6VEndk|&X z#CbPSmyV5M+qLM~`^w6giwvFDj=jCX8WSC%QS3W`4a-`GtMieTcG+dfwoB&VD>AHb-ejqgT2|mlnHBTHQH-(zLLXk3}(r?65 zQIAtM zyy2GtE>_maJr8ukk!`$`&lH}&DN#3>!KbGhCedrea&MGsI8FxmTGIi?FiBeAiy|p^ TZz!lnbwIMSsNigV`Qd*66>Yk? literal 0 HcmV?d00001 diff --git a/v0.3.4.5/www-data/backpane_left.png b/v0.3.4.5/www-data/backpane_left.png new file mode 100644 index 0000000000000000000000000000000000000000..2d7cc017799bab2a0e988bc923bffaf8a78bd856 GIT binary patch literal 211 zcmeAS@N?(olHy`uVBq!ia0vp^%s~8`gAGWof2nsGNU;<6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^sIZa%Ew3Wn>_CX>@2HRA^-&M@dak03rDV0SW;B04x9i001liCIA2k zU;zK^8c1;9zk>)9DqP5rVZnzDBT8)eu;9dt7YSnAxKSg=j}bkB9GOrgNs=Z{f=sEB yBg>W;U&5RybEeIkICJXU$+M@=pFo2O9ZIyQ(W6L{DqYI7sne%Wqe^WV5CA)*v$}}@ literal 0 HcmV?d00001 diff --git a/v0.3.4.5/www-data/backpane_left_top.png b/v0.3.4.5/www-data/backpane_left_top.png new file mode 100644 index 0000000000000000000000000000000000000000..3611dc7b0ca8175069f30051a543d84dcddbdebb GIT binary patch literal 274 zcmeAS@N?(olHy`uVBq!ia0vp^IzX((!3HGv%U7lYDVAa<&kznEsNqQI0P;BtJR*yM z>aT+^qm#z$3ZS55iEBhjaDG}zd16s2LwR|*US?i)adKios$PCk`s{Z$Qb0xho-U3d z5v^}8Y~*b);BmQV{E4BbDPw`pM8(Vq73mFvCM{AdK^lD=FYD5GS8iH5#maa#1J929 zPQyO_?dOY)XET1;s<_njhoBh4AEWK>_QjU{4xcf}FQNRt6GyhLkEd_$f!i!;>IT-0 zHzUvO-1abZ|L+Y4-ath-&-f*jF>Mx}F&8c*%P@;i{@;pQH-S!L@O1TaS?83{1OTfy BU;O|8 literal 0 HcmV?d00001 diff --git a/v0.3.4.5/www-data/backpane_right.png b/v0.3.4.5/www-data/backpane_right.png new file mode 100644 index 0000000000000000000000000000000000000000..17b3337defeb75e1502535a1ec3c97696439df36 GIT binary patch literal 200 zcmeAS@N?(olHy`uVBq!ia0vp^%s_mJgAGXbdsUeNDVAa<&kznEsNqQI0P;BtJR*yM z>aT+^qm#z$3ZS55iEBhjaDG}zd16s2LwR|*US?i)adKios$PCk`s{Z$Qb0wno-U3d z9-YZ|_EvwdXVXYXa$tH=5FsHc`Ep_Ul}iV6UtTErni0?&W!0p+bo%O-OLHbzrkn7v o#Y!wV@!(m{tA*R-io8@9WGdK{zcKuM4>XX$)78&qol`;+01a6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^sIZa%Ew3Wn>_CX>@2HRA^-&M@dak03rDV0SW;B04x9i001liCIA2k zU;zIK97wRB!Gi>MDO|{K7s7`S4K|$UFrr0-6dPXLxN#xJj}SeA99d8#$&)5ej!dcY yBg>W@6~bI8bEeIkICJXU$+M@=pFo2O9ZIyQ(W6L{DqYI7sne%Wqe|@=5CA&}cDW@0 literal 0 HcmV?d00001 diff --git a/v0.3.4.5/www-data/backpane_right_top.png b/v0.3.4.5/www-data/backpane_right_top.png new file mode 100644 index 0000000000000000000000000000000000000000..0a5094e4c49e222cf32feec01a64308d0ebd37e4 GIT binary patch literal 288 zcmeAS@N?(olHy`uVBq!ia0vp^IzX((!3HGv%U7lYDVAa<&kznEsNqQI0P;BtJR*yM z>aT+^qm#z$3ZS55iEBhjaDG}zd16s2LwR|*US?i)adKios$PCk`s{Z$Qb0v>JzX3_ zB3j>GG2}XIz|;D0xsu1VxTW6P=BZDAItU1H?U=CMWu)%D&&|b!= X%Vm|X#O=KcbSQ(TtDnm{r-UW|42N+l literal 0 HcmV?d00001 diff --git a/v0.3.4.5/www-data/backpane_top.png b/v0.3.4.5/www-data/backpane_top.png new file mode 100644 index 0000000000000000000000000000000000000000..2d9446b8eb21fed52f190b4116ad482549977c65 GIT binary patch literal 152 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 literal 0 HcmV?d00001 diff --git a/v0.3.4.5/www-data/cryptobox.css b/v0.3.4.5/www-data/cryptobox.css new file mode 100644 index 0000000..01e981e --- /dev/null +++ b/v0.3.4.5/www-data/cryptobox.css @@ -0,0 +1,507 @@ +/* + * CryptoBox CSS stylesheet file + * + * Copyright 2005-2007 sense.lab e.V. + * + * This file is part of the CryptoBox. + * + * The CryptoBox 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 CryptoBox 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 the CryptoBox; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +body { + text-align: center; + font-size: 0.9em; + margin: 0; + padding: 0; + font-family: verdana, lucida, arial, helvetica, sans-serif; + } + +a, a:hover, a:link, a:visited { + text-decoration: none; + color: #515151; + } + +img { + border:none; + } + +div#main { + text-align: left; + background: none; + padding: 20px; + margin-left: 140px; + } + +legend img { + width: 32px; + height: 32px; + padding-right: 8px; + vertical-align: middle; +} + +#main h1, h2, h3, legend { + font-family: sans-serif, arial; + font-weight: normal; + letter-spacing: 0.05em; + color: #acacac; + font-variant: small-caps; + /* RFC: what is this padding for? */ + padding: 0 1em; + text-align: left; + } + +#main h1 { + font-size: 2em; + } + +#main h2 { + font-size: 1.5em; + } + +#main h3, legend { + font-size: 1.2em; + } + +div#head table { + width: 100%; + } + +div#head div.logo { + text-align: right; + margin: 0 0 20px 0; + } + +#words { + min-height: 260px; + padding: 1.1em; + margin-top: 0; + } + +#words h1{ + font-size: 1.8em; + } + +#words h2{ + font-size: 1.4em; + } + +#words ol, #words ul { + font-size: 0.9em; + } + +#words ol li { + padding: 0 1em; + line-height: 1.7em; + } + +#words ul li { + padding: 0 1em; + line-height: 1.7em; + list-style-image: url(list.gif); + } + +#words ul.lang li { + list-style-image: url(face_smile_big.png); + } + +div#footer { + clear: both; + text-align: center; + background-image: url(footer_line.png); + background-repeat: no-repeat; + background-position: top center; + font-size: 0.8em; + color: #5e5e5e; + } + +div#footer a:link, #footer a:visited { + color: #5e5e5e; + margin: 5px; + text-decoration: none; + border: none; + padding: 4px; + } + +div#footer a:hover { + text-decoration: underline; + } + + +/* -------=-=-=- operational messages -=-=-=-------- */ + +fieldset.message table { + width: 100%; + } + +fieldset.message td { + padding: 0 2px 0 2px; + } + +#words fieldset.message { + text-align: left; + margin: 20px; + padding: 0 10px 0 0; + border: 1px solid #bbb; + color: #5e5e5e; + font-size: 0.9em; + } + + +#words fieldset.message td.text h1 { + font-size: 1.5em; + padding: 0px; + margin: 2px 0 2px 0; + } + +#words fieldset.message td.message_symbol img { + width: 32px; + height: 32px; + padding: 5px 20px 5px 10px; + border: none; + vertical-align: middle; + } + +#words fieldset.message td.link { + text-align: right; +} + +#words fieldset.message td.link a { + color: #87ae3c; + font-weight: 600; + font-style: italic; + text-decoration: none; +} + +#words fieldset.message td.link a:hover { + text-decoration: underline; +} + +/* -------=-=-=- environmental messages -=-=-=-------- */ + +div.EnvironmentWarning fieldset.message { + text-align: left; + margin: 0 2px 8px 2px; + padding: 5px; + border: 1px solid #bbb; + color: #5e5e5e; + font-size: 0.9em; + /* background-color: #eea; */ + background-image: url(environment_warning_background.png); + } + +div.EnvironmentWarning fieldset.message td.message_symbol img { + width: 16px; + height: 16px; + padding: 2px; + border: none; + vertical-align: middle; + } + +div.EnvironmentWarning fieldset.message td.link { + text-align: right; +} + +div.EnvironmentWarning fieldset.message td.link a { + color: #55b; + font-style: italic; + text-decoration: none; +} + +div.EnvironmentWarning fieldset.message td.link a:hover { + text-decoration: underline; +} + +/* ----------------------=-=-=- Forms -=-=-=--------------------- */ +/* pretty forms and buttons */ +input { + border: 1px solid #BFBFBF; + color: #949494; + background-color: white; + padding: 2px 5px 1px 5px; + font-size: 1em; + } + +input:hover { + border: 1px solid #ACE149; + color: #7DA721; + background-color: white; + font-size: 1em; + } + +textarea { + font-family: arial, verdana, helvetica, sans-serif; + font-size: 1.1em; + border: 1px solid #BFBFBF; + color: #949494; + padding: 2px 5px 1px 5px; + width: 450px; + } + +textarea:hover { + color: #7DA721; + background-color: white; + border: 1px solid #ACE149; + } + +button, input.button { + color: #4e4e4e; + background-color: #86E460; + border: 1px solid #6Ca139; + font-size: 0.8em; + font-weight: bold; + cursor: pointer; + margin: 2px 10px 2px 10px; + } + +button:hover, input.button:hover { + color: #233908; + background-color: #94D73A; + border: 1px solid #233908; + } + +#words form label { + min-width: 20em; + } + +#words p { + text-align: center; + } + +/* -------------=-=-=- main menu -=-=-=-------------- */ + +div#main_menu { + position: absolute; + float: left; + top: 5px; + left: 5px; + width: 130px; + } + + +/* -------------=-=-=- plugin icons -=-=-=--------------- */ + + +div.plugin_menu, div.plugin_system, div.volume { + text-align: center; + margin: 10px 15px 10px 15px; + vertical-align: center; + padding: none; +} + +div.plugin_menu img, div.plugin_system img, div.volume img { + border: none; + padding: none; + margin-top: 10px; +} + +div.plugin_menu { + width: 100px; + min-height: 110px; + background-position: center; + border: 1px solid #aaa; +} + +div.plugin_menu_passive { + background-image: url(icon_background_passive_100.png); +} + +div.plugin_menu_active { + background-image: url(icon_background_active_100.png); +} + +div.plugin_menu img { + width: 64px; + height: 64px; +} + +div.plugin_system { + float: left; + width: 80px; + /* It is necessary to define a unified height - otherwise a strange + * effect may appear, if the last element of the first line has only a + * one-lined description (and others have more than one line): the next + * element will not appear to the left of the next line, but right below + * the last element of the first line. */ + height: 110px; +} + +div.plugin_system img { + width: 48px; + height: 48px; +} + +div.plugin_system_title img { + float: left; + width: 48px; + height: 48px; + padding-right: 10px; +} + +div.plugin_system_overview img { + float: left; + width: 24px; + height: 24px; + padding-left: 15px; + padding-bottom: 5px; +} + +div.volume { + /* FIXME: float-left breaks the background image in firefox */ + float: left; + width: 80px; +} + +div.volume img { + width: 48px; + height: 48px; +} + +/* -------------=-=-=- help -=-=-=------------------ */ + +div.help_link { + text-align: right; + } + +div.help_link a { + color: #555; + font-size: 0.9em; +} + +div.help_link img { + width: 24px; + height: 24px; + vertical-align: middle; + border: none; +} + +div.help_text { + font-family: sans-serif, helvetica, sans-serif; + /* background-color: #E89F4F; */ + background-image: url(help_background.png); + border-color: #2EB8BC; + border-width: 1px; + border-style: solid; + padding: 4px; + margin: 3px 0 3px 0; + clear: left; +} + + +/* --------------=-=-=- new volume pane -=-=-=----------- */ + +div#volume_content { + padding: 20px; + border: 1px solid #ccc; + background-image: url(volume_property_frame.png); + background-repeat: no-repeat; + background-position: top left; +} + +fieldset { + clear: left; + margin: 10px 0 10px 0; + padding: 25px; +} + +table#volume_area { + clear: both; + margin: 0; + padding: 0; + border: 0; +} + +table#volume_area td.volume_plugin_active, table#volume_area td.volume_plugin_passive { + height: 40px; + text-align: left; + border-right: 1px solid #ccc; + border-bottom: 1px solid #ccc; + padding: 4px 10px 0 10px; + background-repeat: no-repeat; + background-position: top left; +} + +table#volume_area td.volume_plugin_active { + background-image: url(register_active.png); +} + +table#volume_area td.volume_plugin_passive { + background-image: url(register_passive.png); +} + +table#volume_area td.volume_plugin_active img, table#volume_area td.volume_plugin_passive img { + width: 32px; + height: 32px; + vertical-align: middle; + border: 0; +} + +a.disk_symbol img { + margin-left: 20px; + width: 64px; + height: 64px; +} + +div#pane_div { + width: 100%; +} + +div#pane_div table#pane { + border: none; + border-collapse: collapse; + width: 100%; +} + +td#pane_left_top { + width: 6px; + height: 6px; + background-image: url(backpane_left_top.gif); + background-position: left top; + background-repeat: no-repeat; +} + +td#pane_top { + height: 6px; + background-image: url(backpane_top.png); + background-position: top; + background-repeat: repeat-x; +} + +td#pane_right_top { + width: 6px; + height: 6px; + background-image: url(backpane_right_top.gif); + background-position: right top; + background-repeat: no-repeat; +} + +td#pane_left { + width: 6px; + background-image: url(backpane_left.png); + background-position: left top; + background-repeat: no-repeat; +} + +td#pane_content { + padding: 0 10px 10px 10px; +} + +td#pane_right { + width: 6px; + background-image: url(backpane_right.png); + background-position: right top; + background-repeat: no-repeat; +} + diff --git a/v0.3.4.5/www-data/dialog-error_tango.gif b/v0.3.4.5/www-data/dialog-error_tango.gif new file mode 100644 index 0000000000000000000000000000000000000000..80be5158bcdd076cd84244e49b617e7ff735f25c GIT binary patch literal 1521 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 Qj{pDw07*qoM6N<$f*z_Qs{jB1 literal 0 HcmV?d00001 diff --git a/v0.3.4.5/www-data/dialog-information_tango.gif b/v0.3.4.5/www-data/dialog-information_tango.gif new file mode 100644 index 0000000000000000000000000000000000000000..1b99d1ad0fd30d2cdc919bda8497e66b57475ad6 GIT binary patch literal 1319 zcmbu;k2li^008h!j!rn$xn6hNje7Tqpz>MpPz&OJ!e1vO9A&U1q3+W54acjz&R*55EkO}5EdN%$o)}- zM?}PB*yH4oCn=$kY4AuycyxNivyA6)G10Ne$T;-VKMEof3gZ&8Qd5266VXX2i1=h& zdZt%K7BnucG$9p_NW~_l6(G_HsaaS|p3k3XYGy7n15=fq`?3i42v-=7ENm$$4$myC z&&L&GaMY-m=2Q+Ok*7*4Uty{S5hNwLnwL%) z%c}+|Nw|!fw{^6KsM_%~st`q4Ora`h^q?%-R93Abzji8{szlfGa~cE~x)9YoL#Q9b z)N3fT4ou4wu0e@y7Ui`H3R=XB7Gz12D8Efu%n-J>CX<_n@eD;NW1i49+s@1+GDW5B z;-XFofvIk6WtKDL%np2gX9J-}THdK`WdY=FaYe7Bx=YRKY^U@{D%o>2uji`z=Igs9 zo!uR;-bicN^G&^z)%~&t_H6g-uHH8lls76)e=abPSJyA6_o-_D1)Za;16F{ciY7qC z0A#~lB8N+92SkIz4K3UyCU>Eq+shc%^aBFch+=S<*DOp0tq28_foXLgU&j$F^Tkwwun!Pw#gdA_na!b@74GaR zZ&p1b(urjBQSlmIJjau)kIijN%xR@Erbw)uoL`YE8m6Q=sgf}v-6&0+ zU9_MTE^a6_%`=M41r>i*xg}lP5~;T5R63brdr_g2EWMX&Hq{#C!t&Olc3Y*@t!%Ot zt2?V(eVSGM=1$N0PXEp>dux}o{SkQgiM#P`clVQUYj^Mc-txyi#k)QI{{Lq4+0rdG z4E7={6q4}x1sviF4}*Ak-t-39=ncUppnZ@7=wJV30Ui7d+W*q(x;G@t#M(Es-n*3y zWLt)l$f%JCihJrU7uj_js_e{zNmJ$!8d?kucZf-bbFjs3ZIN=id!A*ZebiN$e}DyW z{8W21pW@dDKOIacy_eT-e6 z5%&0bU*s|i#-iFCv5GPk8_-P4pFUy#{J?g|c(#ys5orZuefx4PN{XDb;=(P?VO=~v zX=35=F(IrMVP3=ZyC>o473DT4jrqB7>F9dVpqud|**!CM7W~&)6zO8hHP^;3HZXcG z1p9)XV7-3uMmov$l{?xZtsQoWLUx+&cK$QRlxYHm){ETjQ@heQkjg&sPk9e8XmM6T7lZ1FxS%6425W zBL`)MSt8tL)WY^^>(Uhm!}r*;1Q%OR(?db}+hDKCy9G`QO+H3uW;y!X#Kp)S6WhzI z#IWLUqT1|C*aye-3WrhE1QA~X=76I=pFkQMzCaoP8Js+2ap2k46ju=5+z@PN7^-_r J1A{@o`~#0r{t5s9 literal 0 HcmV?d00001 diff --git a/v0.3.4.5/www-data/dialog-information_tango.png b/v0.3.4.5/www-data/dialog-information_tango.png new file mode 100644 index 0000000000000000000000000000000000000000..63be7c3bdf5dd86789f100026ed9bf98945d9ef6 GIT binary patch literal 1910 zcmV-+2Z{KJP)Rng9R*8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H12J=ZoK~z|UwU%3KRM!=T|F!qI&78TIaSR6AAqGq#tpp7vjf9#s zO(|(ZQItxpP#=m+{m`l}^-~odnktIa2V^O#)TlTnz3@_zC{h|J1PVf=Nx4@QF$8RE zWAJURo-=c9`&@P(JeFt#W}MO`E$w}d&aCyVf31DykdzY5T5n(fc2dn3LHrv@GqpOE zN+m0$(tHpGpUKcWfmj?pJUCElIv@aQ2B5dEKSNsjt+hQ{zqNYp<`ylHK_~$cg;-%K zP!J*#w!HMoshLuK`sJZFUi;HS1K9tw1G^Ju_Khz;_5F@olqL}hv}PGHCLyU4s*XU( z@?m=+wsg0lGCkpbeERr>$g^H*MvWx_di(k}wyx><$NFu1+KROho7ZYsol_wZ0YD5O zmXK0P$S9U{{(2!c4NcwLZnD4rW$2SXy#C6L2LZ4pk}GPW<=yVByV{EN5Z~OAMte>{ zEJFz(U_^ou1S94%BEcE?Th`@**@|slovHiJ?|yOH{+}QC%Q`tRa zc50oEC{TEeXd!vP7%f!K$YYFooH37c@;GBI=j5(PYo4L<`sJI2$}`VC+e%vEr^^QD z?d#8GR;5@N7;~z2Fs*C6rmNi6RpwM}-|Fh> zO7-^jo6Ax_hVHNwH32fUV$~CE86zNCn0!v;F-9Ke%x8=O1_Tlm*F;cr{jg%F+#o&|uJUC!4O923vo$8F0)Fo!iu4{XtOIVov#tbY}&&Vdie9a9;sW&wRatYx@Rfgy&~sl|wgLb! z^!wLd|MbE~SGrrcp{qPn7>V0O`&PnGl!?6a@#w5GIAg^J=Y{f{ko0#HO`jk}MP1=e zi>W74JlcHx!w>&Fbm-vl7XknPr&|8rxl@0;)7_%BamGSVL{=0_TUS`9D$LVWW*Zu> zn>sT^5S`Z*?j$q?Ih~##dh^Y5zUv%VD*gij4i64g%lWzIMy_0xt!X{U8AWr&N+I%V zX_b?&Dcm(QUZ1)>(GmpVsHQM4mr86scI*SITq?eFcyJ*4p8y&V#fgdWPm?@eK}4}D zWNG@=SdKFmDx5^QFo*H6n{{1Rs|qLKyUycRhp!!NCONRg5Z-OpeC3_Ut^YcPlCC@D zt@v>g|0?OBn)ISt>8R|qi?_G4iAs+9y&B|s#$=h6aau&&VIG0`zoC|?Z7lwVa=L$ zw69u;@|1g0O5&4H^+)U_{qK(kV@xJC^(p${0ym7 zj4y4NN8}YTHd=Aco!g)S@EX(y>26) zFC&(bymfm@mdoYw@$rI1L^=_vL_`maeZOPa__2zGIZ*&8J9eynCY?_HIGb(Vlg%bo z%d#LPgX09XdcE|!OP8kJvMk>L5Z=QBd5>iG1Rx^TNUk;3#k~o@+`D)0yZiR->k7jV zCr_RXE?&I&_L(zh{s_PYU;}U(s{jx*TmTTChgj+q(C7B7;r!aQYX^@UIr0n6c}uBO z8aaRd{QC{apb>NN+5c)m(+V_HSZu+f3d&up(b)4wq8LEb0PxU|ys`QKd@1EU|D2k7 w6*pSK8VMJD@frYR10ZhrV&CPxs=nL)18xCn1Uf_kJOBUy07*qoM6N<$f;mfqcmMzZ literal 0 HcmV?d00001 diff --git a/v0.3.4.5/www-data/dialog-warning_tango.gif b/v0.3.4.5/www-data/dialog-warning_tango.gif new file mode 100644 index 0000000000000000000000000000000000000000..dc0d7fd5c945acba063b02facb49594dc42cab28 GIT binary patch literal 1365 zcmcJO{ZG;f9LK+ah!O$r7Qfp<}6w+j&AkXq7KH#%fcGY(ILmmAQ_ugl(y+5DN_Wtd?FQ1d1QAP&H zz_J(c2?m2Etm=mLN{03ZbbnU5fl91NC1ATr-Tp>ilx=I^h7!Q^nb z0uJwi!|x&x3IsxqM9Q{rm!VK{6iSLl-$x>|va%+82|+>9&QQ?Gxxi22??)~k_>dZH9mecHPygi zSQ8S|>FE>6$&*P*HagwLVAv89ZOO?~DJh1GjH%SrF(z{=EzPuNk3BPUDl1FNX4{!e z$KJgrHe1i-+SzPpUY>=^b#gcc9?!w!Ie9$ufdf`P-|nM8FeMP!1p>Fv6c*Oi)maW7 zb{7`fi;7%DMb6@4S8=hkq{LNHVy&ofl$T$+bjfw{q(maI)YMqcpKot(x7F9%nwsoa zuGm^yq*7^jcXv-ukNw6CXGce0U!UX7ooTszU|?WyaM0P?J2W&jJUpyct7jiScK7#> zj*gCvjcGI*w@NjyQjL#~do&u8$>h=NmnJ4G7K_Vlc3G`%hr{D=tXi$pE|=Two}Qle zcs#Qn&&p zz627v%G+vj02VHku)1H*JTA>VQ&6jy#9`U!qyAgQr^vd>38{}NQsZ@ zNdEq6=gT4a`bbMAk+jDBpyr=EZn_K#pc9Kz^TO@QQ;J#R_Mk!0XWpN|$cBdMsr%Is zPWeR=6yA*9+T=d3JOTMuIw>!3rSigSf6C1XU>y_(4ztd7raayJ`&PXh_r4K+y1!C_ zsTVagH+B`7wH5szo+8txYq44wfAf?CeC;`1O!uBSr;EM%3|!Xip;bTvkE09u__HEl z|7B%Y+Lc|>(xix%nT8}SEZ#xX{|ah z_z<7bgyW|h*;wJfED4C9VnL9MQRNGG>`nfQfE_y<05FVrOquN;TH5dn6w79@gew2t K8@V75u;)K<&WsBH literal 0 HcmV?d00001 diff --git a/v0.3.4.5/www-data/dialog-warning_tango.png b/v0.3.4.5/www-data/dialog-warning_tango.png new file mode 100644 index 0000000000000000000000000000000000000000..bac45dd4ecfc2137ec02aaeb96bc5fea3b64da6e GIT binary patch literal 1569 zcmV++2HyFJP)FC zuA>ksSb+c%G^rxBq7o7fc{T8%l`6L%P}DXO6@940v77b_{bCR*An^&wgjga0B?fGy zh;Cdb#A1zc;(gBThkamUyTm3DBORT&ckZ13@18SrXRauv_&yI~wKx7#q#gL30+oRy zKUV6(YU0RhGVnK%wH1NDNb}B}L6qXdH{bm4%+yr-L8Y#(G?unvb-)8JM!LHLvqMA7 zzWzF!wr#66;18>bwPJwNA`O-I-M5X;K9kH>Uy+%f#`xk3sR)I342W#F>i~|f|0&ec zQgL%+1WXfjoty8yN2sMGV8Bav6<|Q5y?XQJmh|W-DwV=Hb`0m)XK~|kR5VIpaZSt6cGWy zdGblLwQGrg{4w{`)s-2h`QjY~7!cW4+tE=Q9~l9qa1I?pjO-dFB8X+-IeZvgm*nUu zwM|Xy21FjeBLKe^(HxKG1%DvmOMLn%dP4*DLl1o|p3lO=52M%Dlelt)s>;d|$F_g_ ziirN50mAT;d$(+Q(yt`#F93G*eSkplNuI9|s_D`7(7)P1Q;G z*>?hXMZ~g7OMh8jT*C`ud2)Vu%R#u3ea$H#5$hWof*$zIiU3{~Dfb402RzB7k%`5ydU`Nh zTMOa<#l^({*tU&nnhW5pwlQ0X+<)D-1`KufapT64We^e896gE@6_K2npvLd_Ti^Ix7XSuDTK$no ztGaR}`?IlsKU#J5lHvfnckkxp$&;Kqb&9Us`mj_Pj9`$Gr=9}Wh0i~yG8haGi2QKT zGw=_?IQN6z-j18Ez6y>***ou`S5zztxZF&aYl{f(^fdozZN>faOU%YbE`RdLr6)3( z=0XPgMYhy5HEqm{kE1dfte&1F#lOv#8VjJ8mEqg72LN^bI+cF^xlzCV;p~34qFaQQ3y5 zuluqB**1WZ+y#~GP%^Jyxvo;_bTXbyzV#P4qm)W5T8Ko%1Z~brndD66 zEHls2Kq{MH62Ke~2NFstx1jfJdqWY?a$-yQ{A;WLH)ol7KBJV%{NMQB_xAjMsE!Z+ T&+p=?00000NkvXXu0mjf2Fv~( literal 0 HcmV?d00001 diff --git a/v0.3.4.5/www-data/environment_warning_background.png b/v0.3.4.5/www-data/environment_warning_background.png new file mode 100644 index 0000000000000000000000000000000000000000..fef227d0a3e1fd8aa74270db342abfb8e07a34e7 GIT binary patch literal 29795 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 E0N6)d+W-In literal 0 HcmV?d00001 diff --git a/v0.3.4.5/www-data/help_background.png b/v0.3.4.5/www-data/help_background.png new file mode 100644 index 0000000000000000000000000000000000000000..b044efdfb1e287cebb4a234ee711cc9f85b8ba75 GIT binary patch literal 27238 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 literal 0 HcmV?d00001 diff --git a/v0.3.4.5/www-data/icon_background_active_080.png b/v0.3.4.5/www-data/icon_background_active_080.png new file mode 100644 index 0000000000000000000000000000000000000000..dce86363ecf37352363e3eeae9f7b31af69242ca GIT binary patch literal 1177 zcmV;K1ZMk*P)|F|k0iSob@Pj(hghXiKFFi$-ar+f;RF67!s*wRX*ULw+k zqtq6bla$7A9Z1;HYNIeIjS1l~(K*$mF{tv04j?ONCyE2(XS63KB}*TNy5dI59g z6g`a@rM7BLk4s1NGn-Zxm8drmHZAh$V z8q+jz$8o(MI;%j}fjf?Cg>h{zm_-^>HL$_BL+r;QjagQ0)KQzp+#Wa>cH4fmY0T|` zmE&4rTpJeamBus=+-Y13B{p5(D~(x6ZB2dONn^M+-AK*EX%|>3Iqd>V<+!`RQi<&X zOC`1oES1M?;i0l=B3F0^i5c9utuhkf;wy0J#f2NJUm#j=hroL^6e=J@ts3 zF3JO;K&}G`dx{bPB6uKPBBMPfirVs@N%etviKN?8)mHR92nu{3x9|PgIOV<1pLf2- zJVl8BGi_0!Kr2#9_#Oxk^dJ>kZItf;jPHR6;P$;w-^&9>p0E8H^Asfl71I{kO2nGf za=r&fflpK0ZQnx{KySh`_#U#~iz^Xt!Vua>n3wOB5@_}%5=n_3oPb8pLt!OiMVM)#DefrzK1M;UW6gEkuY!H%dz50Wcyy*3xxce$jWMyd{47qRw5RJXYf5y zT{XK$8pE}bu+YATEPz&oN2@LWxts4H3*d@sGxa@W0qjY5Cf{qGuEaH`RT{&!kuY!H z>k&w^G{(!@hWH+c0BQ*Ly5VVj4_N>sPQB2+hb(|OfoLy*Rtzxqz4Y3d3M|9;Ub@dz zU|EB?_#TJ=a-^(pxF_c3d&mO#6yF1LUZu?F1(rR1uiFZ<8;)&fhQO+{eNYm^BH3T(OI-dJe{-0?lrl}NfpR9iUTOZV9dEJ56a zr|*#g+`iYY%*%gk-nrqKd=JcdjWXYTntjrbFZbN(ZM+xOb~yaYIMfn`|VOZTV+mZ-e}<*x2CVu2+Jq=$TY=Jsd>mKxvdsjljm rQnUigDSR(IAF03+4L6|Kd-jRn{vmA_UfQex00000NkvXXu0mjf5C literal 0 HcmV?d00001 diff --git a/v0.3.4.5/www-data/icon_background_active_100.png b/v0.3.4.5/www-data/icon_background_active_100.png new file mode 100644 index 0000000000000000000000000000000000000000..8f02fd7ff454c577a236d681ea8c063bb13a3125 GIT binary patch literal 1581 zcmX|>3pmqj7{DjDu|!J~f5aMxEGn`cx}0HSln`qRnakh3l;2O{#d4oFuDYax5vOgSJr{NJ7AYUuNgO&_~ty^6amEpmtyHL=ONu)B5 zoQ!0qg(iWpw6rwa7)D%jcxVD>don4iVrH)q45nU3b|d(wU!D#MEC$Ti`zHyFEspl8 zA5oshB*F&@P2sYf%KUkw)-5p(%-e0GkgV0^r7No^Lw>$i^GXvq_r>$oA^TAVwUJ1F zx&JS%L3FLkRDGP6Ozlt$Md@`6#X%vfPUxQ&;x z04xo#w9-V4wxg?71S*yI{5dmh4c5cmgxYAn5_hA%hU)}@JyTv7km$75NGvC8_P6sT zI@{rGC1Nc1m~fCl`|LJ%lt>E-oT)_?2*rCJy!NAf;xmMB-GK(qpB}(zA62p-MK`7q5*~#0eF~U zPcx|R9A3IP?^lm4`dxoyCT|?Q$%~H+EmfQ^daMH1a!uFkvqCIJ66tp}2qK!Y3@a}@ zXI_s*4WIcRHJ|Ay%ufms6(7pg9c8Ot5(TlUS6ip= z)j6(Vol5KL+97wxt=<<)2nHnq=2i$4C(JH|wZ4Rn>gTP+*rxq05*atZ);L=zc33Eo z5HzHH$NMM7u~?(7Iwngp(l28T9mkbteX@I9#zn{W`YEDUj^Ka53Dh%cfQb{c-jdMv z$VrWlgWd9R>marN2I;-VF0HcZ@oL~>-l>ZR*s3rn(FuXF%AO^rxAt*bGQ3C8bPK>P zHILy_dTBdZPQeX{eo4sQ3furroYB@?7VKk=2~Jr^i{tOfqZMzS^pg!6tXj2unxTUn zbP=;oF~cv3(NMOF&pD_9Z(1?O08s<%XhDLB4RwqlOLe8kaEwIu@aXhc>V-}ia<_A> zJFbMvl)fEGl@NkmA~hDrb8X49ztweq-f=> zm*!+LS?x1aJpVGI$%HMwlUle|`USqJV#{+*%Ta4%VKbv?_O`Vb^hUiVNzS=0v_UGm z?eNh=T5ft8aawI!ZdulUg(f5n}Sa>4my_%~LH=9c58H@=llzOmeqRz literal 0 HcmV?d00001 diff --git a/v0.3.4.5/www-data/icon_background_active_256.png b/v0.3.4.5/www-data/icon_background_active_256.png new file mode 100644 index 0000000000000000000000000000000000000000..75c649583bd754791e3a90b92d0bc312f41004f8 GIT binary patch literal 7347 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 literal 0 HcmV?d00001 diff --git a/v0.3.4.5/www-data/icon_background_active_orange_100.png b/v0.3.4.5/www-data/icon_background_active_orange_100.png new file mode 100644 index 0000000000000000000000000000000000000000..9e8b993f8ddf5764ff0df8d21ac4be7d848535e0 GIT binary patch literal 961 zcmeAS@N?(olHy`uVBq!ia0vp^DL~x9!3HGLmi1i&Qfx`y?k)`fL2$v|<&%LToCO|{ z#S9Ege?geBEWzyxP>{XE)7O>#8V?79n9%cUA&(gtnEgCm978H@y}jd`cgKLI?VF>aDj>0v(gB)NNDO-=p3Uzg^GUppWE^6%97s^6T} zWd1Jw;{D}8zv{LR_q68ls_aNwGjU18Mz={xN2NTwM6*>i)n2J^Ug=~l4Nw=m;y5=V zfW1_R=hXtgNe*CklA|m{^56nKf(o;bKAS17uJmfwjv}KK?ADU$F197!TR10+>{4}e ztj#jt5!@g8cGgF~y|brf04*(C{K0nHedZm8+^=G{xhQ*X^jmRl#bY=1@>jvT4UJyi z-3}IWQ}$fwckGCdZG&|8_nR%!fvaqDLpeM@b)G%V)fuoVc=yNeua7rPNSHs_P)a_QOTN3Q;PB1f#cPG{ zWV~rBE2}O%e6rVi#p7e$c{<`p)x3ft%)NBE&1LRb>^gO*_gLPGCqA;~Qacw;HZHxB z@#L87mBPoa=HK){+IU6NUhR1JppB0$WXHuDyt!|_J#w=)?-IRy+5MJV;o^=xoaT4# z-pGywTD4hvjs^=|$yHeFlom;0?{1uDH~?nO~aCow1|Pva>z+`AH_JypVEb`$&hwy!GZ^3YOV5ORroi z9mTt%;PHQzXVdazVpAWwC7Xv-1n>cUy`$MG&qNMr{9@^%IV&F@JIN@TXYuCEyql*F z^;U6LyuNWw!Bf)woc!+PGk3L1uWXgJs@NuOF0+114ukoo#nM-`kFgavv*#^&k@sfn zn!vj|l3Kc@qnTIDyvtG8zV1*lFlu%*m~}|6OgAri82{(%Be!=qdP~Gg?-blfGQ88V zwV_QqRBXeojlAZobP~2EOXnTQs%(>9s5dor$H!O4dDiJ9Oj~ka=Bi@I%Qq*M05cnd Mr>mdKI;Vst0De-pl>h($ literal 0 HcmV?d00001 diff --git a/v0.3.4.5/www-data/icon_background_passive_060.png b/v0.3.4.5/www-data/icon_background_passive_060.png new file mode 100644 index 0000000000000000000000000000000000000000..11aa83bd8e17d09433229e7aa659bfacad4ae9e1 GIT binary patch literal 665 zcmV;K0%rY*P)SmS)SHZn%1ljtH{ALINOhUtN;eSKUAhdT7w-zKR?#fJr|zLN zQgCR6$gNgnXbn^PNfe8nQP)x$DLAykiw5C%Ux)_i8iPA{Hp%po|;h;73;r&C) zP;j#%zOR-uwH&m}9^N-V>x0rGqB2ucM{44QgBAt!qC#t!(k-G{d{52Z#G`{&h}>#L zg4T3OKZ#>v*x*#Kf@mx zMla4Jx1vmYHu3Iq%dH;BS4(T1w?PFh)7;8!htZ2O&#j*G&M+jm@&K(RbF0Tn-^1D5 z>baGmRXon(^gj&Gt)BCsw6&^?N@j-{j%G`p%k7bvTLN0S9ZiilXw4QwZj-xgMQKZA zcQ0`bftJ-#ZZdjZM}$^QZmXa*DyH04K?|ANmSbFNG_}hI%d2HcJw}rw3ba~s+XSt< z7|izMHhG*SVR&XPOR~&uc89W0j=4h%B>!#CZ4-d zafB8;x4K3^%RRSx&bx^R$*rFAY~n$UUh91UcisKk%OO^L00000NkvXXu0mjfuS_w! literal 0 HcmV?d00001 diff --git a/v0.3.4.5/www-data/icon_background_passive_080.png b/v0.3.4.5/www-data/icon_background_passive_080.png new file mode 100644 index 0000000000000000000000000000000000000000..9cee0c261fa91a274e753c3650d863b809c264ca GIT binary patch literal 1108 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 ilKYmtUfjz4HBMg%qQMvEv-;pIEleM0sGF literal 0 HcmV?d00001 diff --git a/v0.3.4.5/www-data/icon_get_help.gif b/v0.3.4.5/www-data/icon_get_help.gif new file mode 100644 index 0000000000000000000000000000000000000000..b7ff14b3d7316837aa97b1b480b56d464c0c0f13 GIT binary patch literal 2389 zcmV-b399x-Nk%w1VK4wN0O$Vz2OKjEH)IhxW+FRl8b56mLw6uSb|FG{BSUx{M}ZSd ziWN+ZAxVT6O^qT-g(FLbB}|7VO^7Q|j3ZT$EmDp*T$4CmlsR6NJ7AYQVVFK*nKx#f zKVzCWXPrP~n>uKoL1mmmWt}@|pF?JzL1>vgYM@DFm_%ovJ!_#vYMVZ6qCah;L2jf% zZ>2+Urb=(2L~*A}aH2(Ws7!IAO>(48bEQvorciaKQFf?Pcd1l(s#STcR(h>hd#+e~ zuUUPtT7I!qg0owHvQ>k$T!6D%g05YGv|NL*UV^n_fv#PIv0sC>UWKw{gRx(Rvu1>{ zV28A2hOK9Xvtfv}Y=o_1iMDQruVjk1WsA6GjJa`%vS*FDY>l*Nj=OD+wrP*NYLLBe zkhp7+zigAhagw@il)-M5!gG|oZf$A_N0gP+2GpvZ`yy?~*~g`vcOqRNV)zk;L7 zgQU!iqrrrw&5fkOiKWPerq7P0!-l8OkEXg}0&yTCmi>%d?tI3qC%8{+mm95K?uF{sS%#*Lvjk462ug#RO)R?f&nX%88v)7)o z%8|C%oU_rNv&){f)1tM`mb%@bx7MY&(Ve~7r@GUnyxXX})u+GRqr>2-!QiCC;jzHf zt-;!|!PTt8;z|iBt(d5F?=Ely)Yh)-R17y=I`I< z@Zjn3=jrC*>hkF7=i=-0>Fem@?DXdB?&|F6F)67@A&HP^6T*P z?D6#N^7ZiY@9y*V@$>NV^zrZY_w)7g@b>uh_w(}i`SbYu_W1Pl`TY0!_VxPx`1<$x z`}q3&`Tzg_A^sIZa%Ew3Wn>_CX>@2HRA^-&M@dak03rDV0SW;B04x9i001xmFaQ7u z{s8|897wRB!Gj1BDqP60p~Hs|BPxX8U;#x35EfvR7}0@)5O;1JyVkB9wqm&Ugs8}I zp@RyKqTS1FcLYoE57a9VpV74_lZE890OpF=B*?6C_TU*t;g1&3%s` zaFnpi=DR}|#`67uB1H-pFHXF0kz&P(6OriA+1 zF<$)DLe6F{#SRrHvMKEaYZE0j%eb8*2MrrGa^RpLqxy>yNuJeww4k8_D);pMX?t-Y z#0SkMpy#-8V@LBGI^5&9L1Tty9_eUmft!%RH+}C=fk6m?ZFYkUP)PDiG}@4(%`?Ny zQG^c7v6q_`Gkr6GOT+C`NCsoQutE$qZ}9LJNMkv&y)PzgO4^+BoRaoJgj#DH~O@5K|&5NVpAL$ zd;l8^2llXoI_}I9k3Rdv`Q%Z{{P4q-&7FXVO_g+aPy^ENBTZx@)J6k*K>)$#JnN`~ z4T}4)dY~O zl|kr0AuKkTaF7Fg*hIw!no*ZS5k&;?ge!EsDux(gT*6LN_t1)m6t`Nb0}X4?1PG7+ zFmOwkLYDA?4L4w!L=sYH0mid$ydlOgF6wiSJL-U;#T2&|!GjDryu;6L1}$(*T^@V} z!=XAPA;c6|d;xD9bPSV^KP$%b&M;(%u?4n30MP>t+U%1|143bQk1`)z25_!JEU|>d zY{WtFGw&tQfrc3RLUBYAm_EY~Hk}UCz&iTm5&{b^Imlq;6IN?sGyWa1yc176^UQOPI+qZF zM;vO1p#>IB93ey!!SM4AxDKeLj0rK=AOjCQBr$~)SgY}d9?!%B&)@T?BMKyg{6R+? zKW8z85JlwhOg`M8T#y3F?1N1SEJUZn4?|Sp?iq2sF-SV?yyN#fz-$7EA%VP}_!d_f z0YnliKjSAs4&c(ZayJB_>=avofkqtFufq;I@1*mNE|^^6NFRT^!G;)SA5laP>DWgv zA|Mn$fJzH5ph3EXumtplVSRKk#3e4#ida~%6rjMwBnA9P!h*TpxzLby%yfGi1h)xhZhlMKAfez{5hAz4I3NZFT z4|HHd8N?t3D74}p`xr&i4k7_{1OWfjK HB_IGh7`>f8 literal 0 HcmV?d00001 diff --git a/v0.3.4.5/www-data/icon_get_help.png b/v0.3.4.5/www-data/icon_get_help.png new file mode 100644 index 0000000000000000000000000000000000000000..d18bbf0d313c5ecfa67721f9bf33b0146af23338 GIT binary patch literal 3428 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 literal 0 HcmV?d00001 diff --git a/v0.3.4.5/www-data/list.gif b/v0.3.4.5/www-data/list.gif new file mode 100644 index 0000000000000000000000000000000000000000..fe15cc981a0a53fdc20bd0c3328b9bbbd21f5a3c GIT binary patch literal 51 zcmZ?wbhEHbWM^P!XkcVWOH2Fz|G(l-7DfgJMg|=QAOOiQFmd(tOCI2OJ!{r71_o;Y DMwJZ7 literal 0 HcmV?d00001 diff --git a/v0.3.4.5/www-data/register_active.gif b/v0.3.4.5/www-data/register_active.gif new file mode 100644 index 0000000000000000000000000000000000000000..f0e8b878935b66c6c20bd8f46162fa531f941ef3 GIT binary patch literal 16707 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 z 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 M07*qoM6N<$f`fbQ&;S4c literal 0 HcmV?d00001 diff --git a/v0.3.4.5/www-data/register_passive.gif b/v0.3.4.5/www-data/register_passive.gif new file mode 100644 index 0000000000000000000000000000000000000000..c362012b6f5a8ba97ba2d158f88411d269ef6284 GIT binary patch literal 5798 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 P00000NkvXXu0mjfoDf68 literal 0 HcmV?d00001 diff --git a/v0.3.4.5/www-data/screenshots/de_config.png b/v0.3.4.5/www-data/screenshots/de_config.png new file mode 100644 index 0000000000000000000000000000000000000000..3dc322843e4b935ea8c69715599d8aa1b4c4995e GIT binary patch literal 80374 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ΜsRXIC1#n&pprc<09P}Zpz9)OZ(&PsnQNZ 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 literal 0 HcmV?d00001 diff --git a/v0.3.4.5/www-data/screenshots/de_mount.png b/v0.3.4.5/www-data/screenshots/de_mount.png new file mode 100644 index 0000000000000000000000000000000000000000..37920b2a84c3e58f2e3e6f5daa71ddee7c96f403 GIT binary patch literal 59615 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≷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 XaV-V*&95nVfceSGD8DO{GX3;FA-Y=@ literal 0 HcmV?d00001 diff --git a/v0.3.4.5/www-data/screenshots/de_w98_login.png b/v0.3.4.5/www-data/screenshots/de_w98_login.png new file mode 100644 index 0000000000000000000000000000000000000000..f7cef41a9ae80ede89214576240a27c976593058 GIT binary patch literal 3650 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 X9V5$V4_wF*+XW2uP4qB#oTC2&4=6S3 literal 0 HcmV?d00001 diff --git a/v0.3.4.5/www-data/screenshots/de_w98_network_drive.png b/v0.3.4.5/www-data/screenshots/de_w98_network_drive.png new file mode 100644 index 0000000000000000000000000000000000000000..da72c6f775a04e7464021358e94b4a0cba7b0704 GIT binary patch literal 3345 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 literal 0 HcmV?d00001 diff --git a/v0.3.4.5/www-data/screenshots/en_config.png b/v0.3.4.5/www-data/screenshots/en_config.png new file mode 100644 index 0000000000000000000000000000000000000000..e74b416611de7dd79374aef35e0ca0c66166b6a6 GIT binary patch literal 85007 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

bOYcng$e1vDCm6v@0ZTVKP0A9*TrCyd$ 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 Woy

f5@mVO``-y~LWzi`r>8G3FLAN3eos$_ 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 IZusf{0AAebWdHyG literal 0 HcmV?d00001 diff --git a/v0.3.4.5/www-data/screenshots/en_w98_login.png b/v0.3.4.5/www-data/screenshots/en_w98_login.png new file mode 100644 index 0000000000000000000000000000000000000000..9ff45fb6404b7138b8056994cf65c2f3a3d8a740 GIT binary patch literal 3504 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 V=9Tk1rR~3)mgcr*wSRiW{ttxk2L}KE literal 0 HcmV?d00001 diff --git a/v0.3.4.5/www-data/screenshots/en_w98_network_drive.png b/v0.3.4.5/www-data/screenshots/en_w98_network_drive.png new file mode 100644 index 0000000000000000000000000000000000000000..d1e89d7e4a90c89a870745b9511960bfb5113aff GIT binary patch literal 3013 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 literal 0 HcmV?d00001 diff --git a/v0.3.4.5/www-data/screenshots/v0.3/activate_volume.png b/v0.3.4.5/www-data/screenshots/v0.3/activate_volume.png new file mode 100644 index 0000000000000000000000000000000000000000..d18fe906252b93d6ae682d4ca408a25f4bf32bef GIT binary patch literal 86234 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 literal 0 HcmV?d00001 diff --git a/v0.3.4.5/www-data/screenshots/v0.3/system_preferences.png b/v0.3.4.5/www-data/screenshots/v0.3/system_preferences.png new file mode 100644 index 0000000000000000000000000000000000000000..60fbbb942f046f769e218e0cf62be25f1e03c262 GIT binary patch literal 89341 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ဃSgM|1igPOiz06n^&~B z-O25Y1g%r?9aAn7bL%{8UcHiuU4o|8@297@+S~3Lol(|9$gzrXi^c$;|2`JImuAsNB~||>wj+Kb^#pCTe`qz z!iv1Em?@jB@=bHD-hk*{&+6k&1|i0zBs_*9!Dulup6J`K^HqK1{+&x82 zq8vz7E1LOQT$MXDl>~X-oX?=O%EDTnEnPQy$lQj?PNKq}MOg>v)QIB9#u@0i3#I9~ z3qRG@N;hMU)v}icQXH!luDCD!o}DA*4sBTO*x6OZCl>Wh;<8VWHJIhn$#xiejzobF z8p!wfN`!sE${|UyORaIz0lTnp_s{Dh+#!L-U9i-qDkxV1nX*~#=6P%2k7Q|GEafXe zp~g_D?T3gWpColzIABD>m$6F@&gX8O4iGs(hC|hga+9S$_DetzLQLSlfbmq#n$-L& zg5Cef{Amg3&tL^!OEzsmDt$b}+R-r663!1$7EWMZAqxIWThe%R9Z7(Q!q|I{P0w)3 zu<0LJZ-i2eNsw573(f85Z#+^O{TtJTN88TxeusIZtDZs13dl{~{*zc~ZZe86(Z1mo zdY*01EfWmQ)&(K*nYVO!(Gz4C(+w$fW8^*x-~~bYx(;$SL+FH+hF0$HoI7d?-E%s3 z>*8fMWj~2u>6gjP|1o=BnxB3;W2z`h=EiZ)lB=}wzNw7@Z))I!rn43m*IrPtaw^jH z1swBl3$SbuQkuABdptbd@%!-SOKw@da#C+DJw?4ZANAS_9mpX-rou>%XQ!db~ra6Q?6V!G`mu2(D7rO z^=F;p7X6N{QTmgyt1aojWjt{_8?9O|p&TT#{P0xG8Be+<$!D2%yQXr=rG{HnkAaiplJ8PI~yJGVR=H|F{#lO>b&Ps zROpV+uUpk?FDVbl;>b?ip;71fF}GLvlAnXx^tP_G{IEwT2@aAmjhw&|nIu<8#*k8N z(Ff9vJk4e@qqiMIZ@Bs&3sCScAPuA?B_$(O*wvx>)cJ`kE^GmY@I@wGz#II)kdacz zbq#e=QSu+ItkTKp46c&G68FTRL+Ns+4Ztloye9v@^DUNGT^q7om-|+mJ`c_F z&7mfB;cN(cn6~bBl2Ft%@g#vBAyLMV%mhAtqAqOcQ9+7Esqbsz&)721($m}1Kq_i% zNoy8Fux+0?{5ER$!R+ISr>!=0yp1$5I&Ff-1gLT-yHDonWTF)UQJNx*nLot4jod6` zm>3Zqi6A1e+m&*-P(!TUojS<(uL!H1)KD|d`j+5M@BRX z)rk1xktVzvt-tnZpNyycucQP&uJi&Y;Jf=y5r+Wp33c8zu2e;rFuuB)>_CKsG~`8) z2#%D*1&c~`c4-3=$Kh`E!8#CPtH#`vPYnVZ9?2qvr)P?}!FODwi3Fjhx^xy{ zSLasHCNXrwZ&sZuKDZ_z*@1DpEIfjH-dM)2DAGhx8%;W^j=~pQ7pZbQ!GXN(jpp~N z&@~}`3AA5@_pQk|esM7aK@>1lp;%A)R?H=DE6RH7oXCZ%dJ0Jd<(Fk&Z@l6| zP!xFekk?2E?XeoX1>$Od|71i~7vT9Xrno7`w~P!>B$!wc!4Ek!8b3{n3ii^)vpkip zD_^tYkegu`b^?hsyMhSw6)GgLhJuvD0^1<^83{nEqVO+LvmXb}ye*;v#9EPZ{F`oV z0Us@nM&o!)=IpGF;}?%*`CEVNq<@j4vbmotpeT^EyWHdfv`m4hF$}z`!FCQZc7^Rj zQA9zH9r-SL;zZ4Vko$`%JJk4A4m;wH&b1_|QGHi1zU1)a*qt*yXT#d*j{A#F43nW5 zbg=?>7%FEC=3#hJgp|g`{>c@NSPMN=+Fe)lbMzJOw%>PFR^s@HIJ^$ZIi3UtCr_UAIj_kWDb&6V3(azjMkkF|DI{V6vizq?%7X7FaeO@C91f1)=v zJw3gw>=6hZro^|a#hd6};QJTP`oMu&0rCgP5~6jCf?)yrP~%L!bZYaUC~@I@Bfp+g zJ9LwVoSgjVaP`O+SQf-iP#O?wIsFd${VKsN3wS|vlYEu8ZlPR(2n1vne7&Vc&jUBN z6t4-2xOSK!+uPOk>A`ecXSu7F*DgqY_6~Qd^K+}i<6_mhPo0zd2hEM^SYnQ$jH-UF zyE$W+;`xs9*UZf;Y^w_k&=O9Bb|<{YvotDK*qCrYU4&dpu$sDN33t(Tnd-UXS5OT`GFra&2q zih=g_Av8Ge50@6adxsb88yS(!9R_;M+Iaobr%yq40+h}y&15jBgs+#19MGFVr2-Sf z?`X#_D;oOh^AnAs(DN_P7y-EuvIg(?C4m4(2HLZ0fb|1C254l!5PO}>Eia!Ux(zB6WsZpdq3s_h4FD~P zL%&ed07L;Gc16Boq=o{TMeI1c7Dz2qtG+uGNlC0tulpD8-@6ymJQU5L zj2i_aHguJ%!Ofy%DEYru>J~Ij^TEX%PSXp;w2BHJ;9S5K0+KXrzw+OpC_DVO*Vd+n zsA_5XZM5}V93G>GygLehAX{-|GQ0*s=fRF@WzaJ+Q_$u2%VFxnQ8RrD{v%H&evpZb* z+QYL_Hv8r{6(cVUJIMl;G2M#>fRY}X_NxefbanUiOw8N^*&IY@-7L+UYRhLDKsR=h z$d-Y79!7%N+1WjOcoBCO$l05F=1D+~0)Ef09xvci!>2RJyTG(-LAa>Fg26!S1ByKk zrF7Gg0)|fm+Xs#*EEUlBGVMV$n3R+h#iIo%aV0DQ47Ek0h!5)E5EvUEn>;}pQ2qBk z%muNiWiY=EBSf8eLf2*tA4>IJW@Q?ik^Cr+?=p-5w7gql`Aff9dNgo)d=~_PTJ@jy zDMshAgalsH3|Zb`DE<9-^T3G^3V-_ zN)nB`pG;uC>gYV!l8Ci!v=VLqjK<~WdRLmkFdv6S5SOv}{af$+#cPLA{*OyPK49s? z%kX#E*>C?#{*z_5mywGeAsl#61;q-R`?ADS5egzAB0$RX!#P5oTcc;wyAtlS2vu!0 zT3qpwi-avl#3umrDe?ZnMD1tU5YarNROsmLmc|fPmC@YVSBLu3>Ur zk)sw17i)!V{=w00z`glG@4R#jn-~D*aEZrW7q4SAv-h`oHB6+kE($Qs`tW zuKm(wI)c{E(3CMA_xvgODc}_THjB8*_XMJhEL*rN(|P>v2NuqV7UI%Yu0C;Idf@TB zY&pMz`}EhgEtyFSH?E~r@FcK|-n9PNKS-y#^L^y+|we8=|7TXJV8gI4~i&#eb9Nng@X@5 zBiQ^zO$1yRAa~O8-JmC|w+mOpcr%z(?jYY)8~~JSkVLLRfcan;k(lT+*M*I1*EceH zv@{@EF9L+7zJUR05fN=8qcQ-VEJOxi=DUf>SGd4$lDv9G>&p*ZUC@{m7&>k({Dh{( zX9Y+>OdF?Ujscg=*Y^-E7%*w*g4w;QT*_PA%r6-k7(fOxQxk9uvIdBS#Vs&BeQ=OC zw+rZ^v%ugZ3SL2R0@1VogOS_llbxJge*EspsxJ&i-U;8zbl$3$B zFeE)kZvohypiu1i{#{5|817-1fxi9jM@!4|OnbSMRY(FL8bM11LBg90f$j`L4CCUY z%E>hopr5D6vBxl&Fx-sA3$)i^4D|F+Sd2CNeu(Zr;Iqj{o@^R;vt8)vYFb9<5usMP zshp3(LYyzKO3@X@!+imKr;i^6IXTloc$Jw6ld1n692UGkPl4SIU5Ttm(Z7HL11U<3 z7z6;Wk{XU8nNe-tB3QwmEG>wf+PuBMfQ^guoKCog11e+{n78sW+yjEDKs!y`PjE&L zZ49in0JQ-SnBmF=0%)c^yfpvg$Fpb7*gH6cHWO0}ws0O0hEKIdZ7W*Cj9mzAEt$_{ z26!DE9DG2FAkbd!{n!A50 zN_VAxdtK`(0*Q;MwNV`yfN@<{ysBqoYm3F(eNQ?=^9;0!mu7(wnIQM%GVVFr%6R}m zvU=uSq?;0+dJ=XiuyilTW``v-2nC(9ENAbFG{GmX%oc;;G$B^c&Jd49}d}OGH6agDx`H~z2SX+)!(P*{vn9(Ub{J*UkK-(z@di>i% z)c+EZX1{;U=l+e6165r3XhRqjU)Ii|kKuAfVTp+oe+&m6*oYr*e^ER9kD1guwZi$; zlr-e`BRBl?^fZj!>H?>Los|(|ef=$?Ryg$MD1*$r=QAL7ryMNZv6hF?+d$d00G1ZK z9}vDdk;gq+Z)74Fb2I$_OZR|WghH~5;gaoqxqjDn-|x(=xa8#JbuXgMMM9zhv%h&Y z91Xc0h-#r;fv_-q0(=MlY;0U%(}MWJACn+ztt`!YIN0f1{BZHsJ_FZ(L@4PmdTY8{ ztCt17%GkGwu+j{P=fv@!w)SaVG5i9;2Df9IhyuhB&+7e=XXkte7PqQ^W53~Y0^U%w zTa;#Y$|j4vLDNd)0Ug++c}TN9qd9vUh6&CYKy#Z8w=`Htj)m*j94M#|VL({C15%>o z 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 XwPSzRFbCIl&aLa+SwAa<0-XLo&vCla literal 0 HcmV?d00001 diff --git a/v0.3.4.5/www-data/volume_active_crypto.png b/v0.3.4.5/www-data/volume_active_crypto.png new file mode 100644 index 0000000000000000000000000000000000000000..faa165607fa363022d28953624f715af0e839f37 GIT binary patch literal 6590 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 CL1i5P literal 0 HcmV?d00001 diff --git a/v0.3.4.5/www-data/volume_active_crypto_busy.gif b/v0.3.4.5/www-data/volume_active_crypto_busy.gif new file mode 100644 index 0000000000000000000000000000000000000000..488a84ff859bb063c7d0aaf0596e2ddd3a66b2c8 GIT binary patch literal 5603 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 EKRr+EeE=qdS0F>%#N_yZN{NEsfg0@A@st25) z)|#qH!1aG$c2i*zxI*fxX6yj~`V;>Rf=BW9MZiU3Pjzi&;y)Bna&h()=e#-qVANAr zLOk=C*hHzvu`UN*j}DDakFLkrQ7qc-`0OaOS7xNPJxu-OD=v*7yLq2ff>n8;lXD?7 z)crT_m=dcFPadE09uc!7UeBB)6c9oN!zX`Ka<}-%xIka5u9lU&?D~9ut&4i zja^$gI{M;(m8eB)5v^1{*;~~gVH+J`R28Wi3tnrZad4TOEWoy{`Gu@_sqCZ z&t6M)b#?RJp75=B6~-LW@tWzLj&&(uz_IpgRaK~UWfZq+0=;JbP;6f%csP=tPmAp7 zA3xHFX}`5%lI0Zce&jp`1UuHobakog(zh-4RmMy{M8xE%0aQ0qq44Qfkgp95XFLD? z*_VtudU3XEPx-$(rt?Ipe%1+g_>?rM0kE}R^9IW|vd}ykuopF>VNs&cjlxxZDSy6+ zb(s8Fv2QvhPN+j4PQ1eqEWb8{kfBDvWa2+b)A(c_(~rqFIzUbCv5h-@b7{9^Wh#K2 z+*Q0fI1n{|bEvPSt&R9#YmwKuxqWD~@-vX_@%ep=pBr75-%}WNFOO$)2a8&&1b1W- z^@`)p3#mUp6A0%Dm7KzsL9+R~odGgnW1^ParRk92aexl4<&n=yO9yG5Q`BtX$?G%1NV{to9i9J~0I9u<`54Owh~y0gAXs8HAc@mr%u6&) zJGEf-biis9VN?uL&IxOZ*#BO>Zi>d%8~<9^R0e{1)bX`1DZ&E?STK}d%F1#^9p@Wo zQ7tDY&Ut!wo`i+ZU$NyA(kssc=|sWN(WF{Pq%ene^II%pRo`dz`bG8TEj=X8A-l`HoSSm367`GC4k8fq zo@j>&NSE>=s}cmgKjJ91BSYO&<)?@=TcUc)pKj*B^h%m94TD-FG)|MC*FW>gShPh` zJta&hL_>pDvVtZ#s_XD}a1m-2*X+I=f39{y6pf&J}T)u*b-V!B{Ap+{n zsGdH33POth=XEJ^z?VjW6^W;M$3b)&sQW80GOWe*T7gtSH@OM80s!;CQ`?<@$(b*s zj#>vEti-zXA16nIuw%Wh?zhqpCVOL!J*pSt3TKKIcQ&kmO;%Z7(gKHtKV?LswbaG*0kJ8` zDVNC}UP{_=q~gwdh4Qiecl?1N*>J3U3>jN8|)R zlUlnyN!D#CokE%*TsZ*UcQm=3tSBn(FWeaqySTXEcP>bS#FbP*l>s{kE-DT=ik_Mk~FOGv2+*cH5Gbix#UM5(c zAlNR`7h3#`OrcSrP1Ey{EJ5bVI3L-gedGw0k05yPC3FEl3^;SAaqK>A$3z?=SjDJRhJYKv+GMZ;kY#Y$D-A?)2Pk+vFvP zU?A3^x245#3SSvf25rpF9uXtJ`oatf9XqfbW&k9l;_2@0Nub&Gr7=L z0?9TkoCK!)5M7<)n$0+-8r`UR^Vm&43`LYTyxJK8mmvMvm-jrf^jsaVBY>y%E?k{& zyF`lVW9oel1_E#5nxX7z=u8q;cM(wrA)dp!oT|~Me{B~R&HTPP}j0nZ&u#k7}bmJ1vyrGY1wvz)8 zGo26OaKoNue3?F>t6GiQF5de&T#Z?OnzH1;9lvuQPW2~yV@c)&2g;8*SXewpFOSHw z&F@`GF33f#=fafH2T>-gODT1`8dplZ!F{sd(nmaWi*opf0V)8eDb&=8*7OaM*nQdm zsXn>}&fQ(f7A_A0pGCvf zX+NZ-l$n&h&aVKeA%y40_kJV`Ea!JZr=(#$07?rsN1DWj12g#_?1a01{1=z+Q7!c6P8uCyQl zn0EjCaT{MzD-h?!(U!V@mpry=mg-XhVpud;gV(IVlQdEGh>40_27efLsRf+gi~{K^ zKAtk*WIl3jwAAqW@ZxmetA@@?04U{vxH16k?d@NKf*RBE%`3bymTs)X>hI0;716O` zMff*p$@tiSMtT^80L03yz_UAYr%QBG{@YFb46z};p${13+3c90vDGA@*&eKRLrnVm zZOzSupiJ0&OD%VDc)pFjW}DC?bbIp-h{=f~ltli-HvJn;u=n5OpcF5nyzAuPnI2_k zhPw4zY>%d7!0O!D-*o3-YWPH2Km>J5X&f}hdHzsPrLM% zDlo73{_|q52lH~QTwjW{g23KO&OrVdt^(L$?U-+krUNFHQ6(kLG|CZH@C;^)BbM*2+p`n~R1Idli z07LSGD~k5_D&xX=ctE2-w~eqCVNppp2~K?@kX8e{Yqc>*`D3ljWxTFu2Mz&;qlN&S z^^yA$erRZjSe$T9daC@joQee@sFq{^OAbKhc*?^GYx zC>WOL6rjF))YRU-FXLX%>Rvzfq3Qs>L>?L(AV;0B2uiFq4Pe}f;iDEbH#avmGqW9x z)X?ey$PdG>{#6AoCayy>i2&md4@E?7WTOtBGey`5V9p3^jH#CU>WOUA(=|wVJdPIpJ!ekiYv2w|zIxAqWLf^}$Ip1xB|V zU~Zr!>s9DpeZU47NDdt}(~lhQBraU@LR>FSq7AIfs7_PC6$Duu8fDjo#ZwaToQJMq^%1 z&d$PYcY1_{KWbS_Jp@5Mdi8u-1ex!edivG$Fub|H?0H&R+UGw{21Mg&#C@&py`T3} zh5_`-%*3t~_TT-bS>#$y);<+{)+>H6or)}c*S}(n(P4eF#lUsAK2H9U2kQ3Ku+0s> zs80L-7jcat(ygHfp#%U)Nl8o`9Eo3`IU2ztfTa3+*A4tbalk)Wh=Q}m7(fx)IMD`D_};0^&}xm#;Nyz%26NbU_{D?gi@xk& zW-PmZES5`H%wCr=Ff?Qq&Mms>FL{Eme123ZGwnj^%7kkIT>t)NZqG1hleY@xZzzBM z<_#MQ3(IfAzrO5Xa-_>n zPG_Dy{Z`?dC0d5q{{`DCx#?Z}nF=7d>oNQ0*o!wXhiXbY?($&xiD`@)kGkS#9fe9G zrQ1oQ8#g_x&st#C^jS0OJ}a_Old38zIszCYqm=AHdrMzm-&g{+!jT@N4BwN?yj~fp zb&*p)4$ih9C~k4-oX&89PF`sh)DofauQ}*!(W1*=rK19$dT;Mj{qsS<(7i9-^}euT zf>uj=q7rQe+PntSJCA9%4=zTwwqBc6k1LfKtapD5)8$z8yanRMRA@;FO5pLZsM`Cm z)l~-&ex010(6>(FUG@ZixAgb*WkOwJR(#W?y%WMc$3W*RCh=4eAru5K*5eN(?#zpw z7C0#C>)%HG^K11=w(PPIM%yy4dN!1P7IoZ^6Wm+9$}1_ta%Lc_(Jr@>tSBt8KdqRG zMjeeTEL5A!6Ki-9Y>hit_R+QnJa^iwGZUwsewj2JG&r{HEgk(<)2^(KF{k8N_57r6Wi6VyvODmYdOkN%E++st z3|#Sw6Y$5p-(m`u^xeyQ*;3dvA(5a8YyJ4l_OY>Wqok*FW<$LHV5wWMl1KIUM$Bl3 z^3OLnZ%SYmYy`E3(OovK{j$e%bHCo!xh+BgnF%@q0RI+=y$-oSj1Nv{ZZaurr4;$F*=xb!@l2xHEei|QhDG^|gqDMO;KSLyK5n|vJJ;;KNabvz=Rf3IbIJ}x z@eS;SB3Kmym}an%z{X@8w+0p7ZK$vBS{waghJ}1fv|m|Ssr>PS^^Eo58l@+yV_|_y zTtWgwr};zV6e7AV(A*op;EP_TEGmgflW@t=;a8H9c&+c6uQ#q&z9DvkaGAY#993-; z{*;oQEL<(DMHK_+-djKjmV9M9W@-002)(FV9H-f)nu&&Z@X4skN5MZpNJC z#k3NkOh+Z%Fr3`%|P+c?c8RJAvmI{w)VT4_$|!~D#637M$4 z$?y@ZD#hQX-<>}jlp^SrkNnaxn44e9%L##(*~X@(E#2K@f<4V(E`WloWK_U;+7YYk zX>Cmyu1N5yz$!41{e!KQwRLFte1!#eraF16i;{u`?@((}=XWSj>QNY;y~z>N`}A*u z^-*6RX9bdrkLD5S+iy*wPm|BQXf^Ql+13W#Y&x^tqnhrl9g0IoDo?uU^**IlMJh-) zX{(E!v#2#O{F!3lexUV3MyoFXKUi-Oqg%&4rEq@!`gQ0VH$Ik3?=Lj}3|haUSZ6C_ zE|ITqrQ4J<415&<|Ws8xV`VpH@l|#Z4gx(gM2RBVy zKY7PR;wJGUd*ct|rov4IGe45znm4I-Cg5aU`w;`dk>5iy1)`20mA^2HH{Gs zB=GJQ@F5HC(*xTWln0q#N{UQhU$@L)T#Ih-$6C71KH>nmKPGx}d-0FYyA zY=)MYtL^3sf3*5tBu}$9iM69Lv)-?1%ha=BI`9H{sCHpZP*OrGH_t;jNPPByditIX7wIV}}`4X2i(@2sk z;QH@s?E#RUsuRg1g=O{AfSDAHmM_g#L3f$F=IuYV-x4k2?zoyP^YD>I*P|Re-+ioI z#9R$zKorPH_Y)FJeW(dr9=IN^=^Jw2Q^SP$+Oo3I)!=I^h@S{;nk@Yp@{=1$RbM|J zWYv+&Gq0$2Ht$w^AEGs@(0Ev8UIBtSgQ~86Z7JPk|CW2&SOR^a{^QlO8qRCgrH&#NGyzuELU`w?_*ph z6HP5F>^l3F-8bYw1^GD>^S5n=S-<$%2$h_6$M;{-bwNFaqmB=UCa0!sPMuBQdns^a zq*r2Qu3t`Px$4cy54NK&Q+2xg%@t`h_(N3jGX@8%1sCik!xOnv9-qvPk&$PHDXyvB zmr9S?pVXY+JEK3EL2UC<`330?tiQwQdg4CTnI6Ks334; z^(c!`IMkXFVYVf)s~dGsQ1~*>0HzyemCCOKwqOJ>WaSpvgxXrM_Djb5W+(orF;lj& z{(nZ-PH7%YAvv;8OTI9>tT#vf9`#cmYI6xd%YzRUsK%p2!*Vm@Z=5qVG{ICjdNU_r ztRL(_c<1Y_UfUS|j9fW&7jBalXUrD66@PtlvEP4v`nNZYg)MJVK4Oz4otyyQhDF`_ z`o{lgPkAeV-!1m6Q1pb4uoh9VN;JqH%M$J~IR2dIKPZh02;Fz=2*j4kbIF4Kalw zT;VfU2reRMXn?fb1_u|UC7eV{qR+drXp*w2&fFEA>3xz)x<{-Dan{4RBYr$3JJHjJ zagyA(p4BGAF}y@(C*BTDq<5tap*uBTs-*n@OZVgWwhdWr;U&=N=lKie~(cetw2c1^Zy#iHFcI$KuC_M#Y3>+4yY?5 KmC6+@L;nX!E|J^- literal 0 HcmV?d00001 diff --git a/v0.3.4.5/www-data/volume_active_plain.gif b/v0.3.4.5/www-data/volume_active_plain.gif new file mode 100644 index 0000000000000000000000000000000000000000..e06958a37f09a099c46e2326f7aabb186f0275bd GIT binary patch literal 5299 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 Dn!9<| literal 0 HcmV?d00001 diff --git a/v0.3.4.5/www-data/volume_active_plain.png b/v0.3.4.5/www-data/volume_active_plain.png new file mode 100644 index 0000000000000000000000000000000000000000..61b0d92bac32fc89539541b2d957afe838cc08a4 GIT binary patch literal 5903 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 YqSwrL9j}=iEM5bes(LC_O13Zm51+r}2mk;8 literal 0 HcmV?d00001 diff --git a/v0.3.4.5/www-data/volume_active_plain_busy.gif b/v0.3.4.5/www-data/volume_active_plain_busy.gif new file mode 100644 index 0000000000000000000000000000000000000000..1c617fc7e30bdd60f66b105d5bbb44a32d5d0215 GIT binary patch literal 5010 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 Tb}x?h?2Yo2pQ=eC0JHxA>lo|z literal 0 HcmV?d00001 diff --git a/v0.3.4.5/www-data/volume_active_plain_busy.png b/v0.3.4.5/www-data/volume_active_plain_busy.png new file mode 100644 index 0000000000000000000000000000000000000000..92fc87ec5a63caac33eb5dadcc835da76e16a622 GIT binary patch literal 5372 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 EKh~We%m4rY literal 0 HcmV?d00001 diff --git a/v0.3.4.5/www-data/volume_passive_crypto.gif b/v0.3.4.5/www-data/volume_passive_crypto.gif new file mode 100644 index 0000000000000000000000000000000000000000..55eac46b20856cfbf882a2114a69aeca7b33f96a GIT binary patch literal 8040 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 literal 0 HcmV?d00001 diff --git a/v0.3.4.5/www-data/volume_passive_crypto.png b/v0.3.4.5/www-data/volume_passive_crypto.png new file mode 100644 index 0000000000000000000000000000000000000000..de0da42c2aff6376c54a752b0013f709253b60e9 GIT binary patch literal 8140 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 literal 0 HcmV?d00001 diff --git a/v0.3.4.5/www-data/volume_passive_crypto_busy.gif b/v0.3.4.5/www-data/volume_passive_crypto_busy.gif new file mode 100644 index 0000000000000000000000000000000000000000..c1b8e1598497b64789ed74cfb7ad951a252f02a3 GIT binary patch literal 7941 zcmV+gANt@&Nk%w1VSoUD0O$VzCMYE~I5j#uIXpf)KR`Y~LO?`CLq$hKM@U9VOGrvg zN=;8pPf<=&RZ>@3R--&RT3lJBK0I7rTc$reU0+GK3-s5u0KFvVqdU8L1ANH zvO+^+WnyGyW3xj!fa^4Y;A>ygu`uV!fkGbh=s#$Z-1bd8UU#&>m&kd4Q9c8`&c!+U*@l8?lE zevy-q#(jCkeSeaak;Z<2la-Rke}R;ilf;67%7A>xfP$5ml*xgEmY9{rgo2lumdk>K z#)X5JnwQ6hgvf`5nwyx)h=#_Bhnt<5%ZZ1ao}0&vh|G$Jou8b|i;2gLkDj2N$c~Vo zp`OH%k;#vdprW6}l9HjLpvsYw$CHzyq@l=^l%u7h$(5C)rlZW3kjj>prKhCEnwO@i zrOTL?$D5d^siw@Cn8=)&sH&&UnwiI)psA~<%AK0eo13bvsmY$9#i63Bt*XkOqQ;`5 ztgfraqol2`tjwXL$fTvNu&vOdpv0%9%B7~osHd>9uEwdTv9qtos;RQHvCXKd#I35y ztE#iLvb46d&#J4#ud>FkthKka$FQxoxV6Qyw70po!L_x{u&=nfx4FBx!?(A(yt%}< zxVyc&!MnP=zPrY{y1l==!o9o0zP!G{y}-i0&Az$8!@t7B!NbME#KyzX!Mw%C#LLCR z#>mCT$;Qmb#mLIX$;-&j$;Zmf$;-~l&Ckou(9F-#&d}1&(bLe<)X~$`($v<|)z{S4 z*wxtD*8l(iA^sIZa%Ew3Wn>_CX>@2HRA^-&M@dak03rDV0SW;B04x9i004jhfB*mp z{s8|897wRB!Gj1BDqP60p~Hs|BTAe|v7*I`7&B_z$g!ixk03*e97(dI$&)Bks$9vk zrOTHvW6GRKv!>0PICJXU$ zc!d?de)0N&6&rS}*|KQKsyz#~lh&;juW0MHZk;!~b@S@o%eU{|c>1Vmfje;uBD(9w zjVl+fakzEd);*pqxiaO+jvap+Ct01oI7mSr7)`pg>C>oFs~&B@K$Ugz#C2=DuAI4Y z<;3OAt=QZ+-{pP_AE(=#@!R4gZw{A_+u)C_qf4Joy}I@5(Gh6ZqHo>pao;NbuS>3% zvtDz1%jtc*t{d+0d7pPQpxpzWX0@p4Y9@m^i)Y<8P7iV09K_wRpwJAKK8_uPnY3@5l=h0 ziDzRu=cMV~I_R{yW}6|Rx6V0ro#UH1$<Ns)LR?+}J@z7-XDrMi|&OGL5wA zc!yqaX>BQY|~9Q@j|vuHtWb6FR=WE^G!J0Y!h!b++1@_!3Jlu z%{1IJlWbxz<`v>zuY{p(8rq(b2FBY`Q&+fix@lfrv~tv%H|@%JVmBvFrrtKmg)>_? z!PB=Idx0#GJ!$`BgbaV5K-2vyFu>QdZ8$7hb`|vd_)9kFn z4j>nMY z$9~a|I<|$aS38C~o`x>=w9`)S?SxCr#%l=w~F+wkpoumn#7cwK{Y?Yr;qgtPG)A>zJ{{O_!z`#AOcUO3kid)Yiit-(RN za^@S*)yzhgQP1>F=Pz!|%Yix**uApBw}QdWX#F_e;`ZXStRVt-y<3Mp>>kl|!!q(RMg57;e;R4ctq{|VZG;CMjj37aLKm^*gbIN*QrU}S z^u2(^i(VxX$2O?JE*7c}cj|ZtJGh}ODRPmDbwNZM)?keg<_~x62oYfZClMZTZXMZ} zS#r+N!fHg0f)kTdbN{n&Pq#pH{hi&6vS*&taqIvzRG5<W3 z?lg^x?GWS@&+)`H_@OT9VH55O_e(7z@^|w7izIBAr!E6{AW;ppo6NSsHd)DOV$Sjn zc*KDxQvyp^-a8Rv7&D%3P$O9+)L>rNVaqezl4EPg)<@UyhDF|z4AkJ|EP2@_bY+A` zKI(@#>~^=A{cAksupFIkvnFfSrFwKs<>%fN4)mZ%M%1`McV^v{KbXJmT?G5!O$cUUmM6cIMKLaoo{?w)vr*#C5Z5uJxueyPL4s7LMS+ z2u3-x(TpV14PAtRA5Z;V6|WeNU!wN3m>A(=L#SPsTBJ1%P;6`(%MJA~bh6L1A#zFi zFPdI&jX(Y2&GJRZ#_(~qdm*8h5D|x}w&A}3_ABJL1e*}T_9EKh+&SVUFwUgNM!HFE zTPxcbntF3>j9G6v;>eh`uB{u_cw#?B=+qJ7W3kPkDu7qK;#;=i4XIcyYcnOnF1-+d z^igK(O`SbR%O z;Df;TXzeqzk$ z0DJ{k{Fe-0NCTD^>E-R}w@d5rE=9D{41Mq;9DXw{0(CQ<&uTBY-utFx^28b4>?S!a zQ`5yUENmiO z=7jKw4Ex~6I{cO=@_5!pvvHfuQkO;r{?w?a{zh(Kq{ar;bQ`$%0$_I8CDvl`3@c8z z#(C{)zyw>nOo~Sr{+x#ZZw!fbuIseS@Fg=c1YlxGm^@f+ z!bvxN2{)Az1<&Xzs$>K%2JJS>83eK3urSc&ieWzSiQ_@4(wqMDr{_jkJTCaAcXjGH z?oQ7lLtH0!bMvaMjKWKep3NYTpt%xwg}E&-YghvpZZF}}0rRCUoj6I9BDSH7^ksY8 z1NvWA7$5B3Ws4Es4L!+e(`cJ1j9PkkW~71Ma~BpS(p}U zfrb9<0)wI#cvG?tHV6^g;SH`9EDR$ovvdxvqcGgiGC5RAMF>QR!Gs01e!&ug1Ves4 za}Cqb1%y~}qGyGOc!*p$iv|dWm|}I0=n$=O0>p+6X*dnQxQ5*DTEX&79f%wYwLP*y zGiw8FOjt&x*oRL@K|a$sGW2Jwg%8SPh*=nbbfFfw0v1}bT3yl)p}+(Y0aHezh6U4( z(=b@*(2P#DW|qerY_m$XS0Y5jU_C>AMWl+ofCy1w4`5+}gXfLm*bn}Y4lbA$tLJK9 zXnkR^4&65p$2Mk=p^8JZkqk3fxKldnkuwbB7-|F_jR%5xLybaHL9D|K`Vk6u$Nmmt zVQH>5i(ugoH|Y-xiIcLp7D3W3QBX+;Pz6JB4h*A;NcoHJSQli%T#>Gh00IC2IQDD%{;&cgxNX?!=8Q9ItXJ8(LfEo zKn()oAo%eL)R2bD@C??_3m7sX_Sp&hX`cd03b;TGNl*X;V465ECARep(IBGPkcL7k zEWo&$bIDb4CvRStk{rs1Li3(lxspOdL9Vlr4pbLfB|_-H4a7hVVX6$qAf}}krXyOW zVtNhZ)EWm+Nd`a-lc)?5`Z3~g4I;Xl6;zjNC=TjCage4Cwl$^xvqzZi$eUT2l|rKo zm=Fit(gl$Tsa@~|T0p5?P^n*V1xuj?kog5+@C996AGxXA#BP=TGC2!D7X$}Pz7IQ0I$F$)8MVq0Iqe>4I)Y`(_nl< z8Vx?PhWnToVCW@GB5dTTOHD^wK*y~25Dr=(Hjp7in}z;Uq9P}?gAQL~F5*BZkMUTP zkq_%29}J-#^Twbp`V8AJE_)O#<9f8J6AcR*EP6T(0TT{PqhF(Ef*#9S7PnZV7iRT? z2(qAW)7CG-;tgW!4cZVaV@tN&aJFv+ESpgy{cxGvq3`LJFP{+Mo{0 zps&jfbSjrED!Wy{T8v@3_{q7OtGU0x3%}sG!~Vbv!Eg)K`wPFIxyXPFquUImQeI=$ zeXS7|_8<l3k#eJxj+lK@Cy*ky}UrZzreYeiw);eZ_gu!FL*ZnU??K|f`W3wVsSPl z?1Cb!!Y$~+C%nQY{B2W!59UV=-|M*)Ji!p$z_&mPvjD`jKnu1o#I(@Bw7|U%+`YiC zxzd0h$D|M+Tp3$9!&ZF7Se(ULyn<7Z7t+AJ6wJLxObe?p3ubJ_u3*NcFbipn3THeE ztKh@jtGUw9!41J929QqNpb1~u$B6Ki{s9`uf;`BBJO}(GoW+^Q#(9}*z+WZx23_z< z;?NAgaKu0S#-~ zh){HIfM}CBXkBnufu_c#01DI036{VKqoB>(yv+&i(4NrH37rX?Pzs!o#br8T(D1#8g7_7D!g zPzte-38m}`mT(D|;0e`m44xnfOwH7e(A1+)4ZeWTmtYB&0L_~`4B;|{Qp_Xhz)=7y z2p!T1ek{mq;0h;wLPiImFV@J5beS!EnabJ7kZfrG^_f=I2Hdd@>TnA}oe7rU2#!Dr zmH-Ou0}sBC2#KHwh9C)wpa{nx5A7fi>EH;LFxX5@3DnFBuo1=OoJ?Pe2$+Bgh#=Cp zT+4!N$ik`Gb1(-fz0#LioP#FUkNncf%y$-}(oCVufx`~JAPSt|2%K;Uk|5Z-5D)MG z5AOgEvtS5@@CSpC2*Cc3+{rBuuu$B^ZPnYH3w1%x2w^K}^3lQx$iis{C$IxWkOWA; z1Ww=tQQ!nwQ3a4GnT~S?o_YpTVAqA_A%^zOb8Rt-^kU_PEo)E((Ye#Fqz+{qmadvM{qAmJ1q53oQ8jV%d`z|@vt3ti&b-`yH>vJ9ln&cb;DI8XyP zume6&1W1qsOyHRE4XKjp3Q-_cpPFm8W@U<|NN?Z@TF}~8rkN&129Ubbu<;JG(9{pU z2ZS&Pk^m19PTle_3U}ZO$erc#unvFl2YJv3itymYJqxfQX%9Y(Pz6O`3I3jX1yf)#QUze`=Gt>G&n4wS_-u5A_FpQt2J8|K>@W+Dy$6aw<$tgT zcMuEIjok4d57i(K^1$iw;0~9N2YbK=7oO^pPzojP!6K8r=YwpV0F%F|L-haHDw6FuCc>*<11iOyo zS1_ucifC7Gu+iC>#wp;&nRoN7oO!3@c)bRAt=Dvc4xnJ|m@WtC?gnlE2dXgcp}y(x z;0}@i{s(Bl26TY#b#MpQz6Y+*>J1Sci4p66tj>t=;xS(5NU+`jUvx!)Ey>R0Ven## zR^&skYsJ0>8uJDom1SBG=u(viQ{ZavkO`Px2XNp9YTyQRzy@Y823xQR)ji?k?hb<> z24ye?Wl#nvkM3}g2Xw#*`y}rO5Dx4#$gWTXJ3!|rUKXs`BY zu=Q{t2ba)NuI}dLK=Y?9oOr+lKCt_@egZww4S-=HePzGGE_O0&*bwCLR*0aep z4zg_Xzr^ExADZgT^HDGbSI`AhzytuH#fhskX~J|NLncfZL~*{jdb7r%D@1J&t*Lm$ zRhu;(*R(lErj3?<>+D@ZQ$|b~FlD%Kk%C3aD0uSX!NYkIC%i;Uq-4qR5==`pYA)G} zr*FzXrcIqTH4ru2IBJNjUcE}DN|z{Cx-db4gh`YrmV|Wq@+HidDqlQ)e3Pb4#4{E@ zBK(-fRh2YqJ-WK$G0l{H>)uIHgJvaA##u()lm`#;PMq_4E@|w=OBpnh*2VtoxAf`g ze+3X27&lH>rK`=ZwrSQ;i>okzEip+V#EI9mVaS|`;>sh(G>G2B=^{K1a*77!w$ZpI z94Njo)dV4b+Cny_Mx z1CcrGm;(_!ta>AiDz3Oqt>3=TB8)WvoA3&YoV#d^FUYv44G+)2>#e=cm?EBhvSSR2 zESgwCi811_X}opV_~DOuV3Z7=b*N}U2_l++&og|Ky6-6h3_zfpZ>mBBlh&+i#i;bc()r@GNx}xhy&4gV^V-1oV?W2h&vdy*!9*FP;9(ueHLk1XNh#>|V zU~uCzc&g#y1|5RvAqZ`gebl~41vrhHb(lOi=l>2o(5eCB{)mXKg3cf#jpcAn!__lE zlyD8ErHhcnc=)j=VkLqIA_pFVaP|f^__zUv6=WDe1{78hThNYa$U%mbv2L%?eZB?v zpCb`4rkiP;d{Squ@Hnu*IhL~uj{x5=E^&(nUoN>f&g|&ckMe5x;dcJGT8SL8mLX&r zRsbDz6i_e$bQR7veQX(WVBKXU8jZPbrlP_moN%bor5RQ};n!b(&FzFr*Z4(5_?)Hm z+YYN-Q63Rj0$d&==fjwSpLp!4Lvzk$ut5eD%pO676vi*Xgc3>^--PjHNI`WOxX;0e zJEo?)ZgD-xW}R-h$%Y$lrdb9z0;r7taYGy2pvE))s9_9cP=gx8pawUv;Xn%3>t3CT zk}RTRuTM0C6rV^%2Ro4pEBVJ<#Y03D`Vo(I$N_8b>)hu^w}KRqfCL~Qfe3V{!yMue z1nq0z`+~5wJ~#?eb(_=)aIwE|_>UXbxP~>XF%4^Q;~LS31~;C8KxH&g84P3~F@({J zPjN~XXJmyeQjv;RtTA1zXhyn1L5hBLa1xr(1o1R+g{j4Z4pXkdpTAVCR8AU+ku;C(l!LpAx0=wj;2Oj=r4>+{#eJWUi3QDlUMQT6;7=R`QG++T| ze&CQII3F@ou(}?&!HAp$R{@X|6>^r-oaaPm0n~|3a*C6kh0iqVW-bfO*g zXhz$)P6JHJ0OFJ=0!U&KRdj9yG+bs1Ebz~n0<;1Xz$s2=O3i6rvji##pABNMj@Zf0 zs7FO=Qb|*yd^k!8?;Al1_<2ZbS^%dHz-m?>FafL5)B-ykq!CP1m@g>RtY<~*Q)68`su+qDtRMv_7-0!UFai*Upybyc0O1EZ*y~>Lx`ZV_AtqS>Lo9Bzj(%_>3TcIG zWRLmY>Secq<>B)kkQ(7218|V{ZG|7shagHN0UCci6-A4F~``tmE^e literal 0 HcmV?d00001 diff --git a/v0.3.4.5/www-data/volume_passive_crypto_busy.png b/v0.3.4.5/www-data/volume_passive_crypto_busy.png new file mode 100644 index 0000000000000000000000000000000000000000..2c5255ada30c385b90ca27334ac5e1a32dbf8c57 GIT binary patch literal 7608 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 N8$wlErB=y0;(uvTD6Rki literal 0 HcmV?d00001 diff --git a/v0.3.4.5/www-data/volume_passive_plain.gif b/v0.3.4.5/www-data/volume_passive_plain.gif new file mode 100644 index 0000000000000000000000000000000000000000..575e517b77a2ecec37804b118344abe7c8c4a5ee GIT binary patch literal 7180 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 literal 0 HcmV?d00001 diff --git a/v0.3.4.5/www-data/volume_passive_plain_busy.gif b/v0.3.4.5/www-data/volume_passive_plain_busy.gif new file mode 100644 index 0000000000000000000000000000000000000000..6fc4be78fb742671ebf6bbd1e0f0e5574081876f GIT binary patch literal 7079 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 literal 0 HcmV?d00001 diff --git a/v0.3.4.5/www-data/volume_passive_plain_busy.png b/v0.3.4.5/www-data/volume_passive_plain_busy.png new file mode 100644 index 0000000000000000000000000000000000000000..d251040e70c20c8e72992c76a021d6f8d857b716 GIT binary patch literal 7092 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 literal 0 HcmV?d00001 diff --git a/v0.3.4.5/www-data/volume_property_frame.png b/v0.3.4.5/www-data/volume_property_frame.png new file mode 100644 index 0000000000000000000000000000000000000000..50478b70934589f4dca87fbcfce6cd2c232e7819 GIT binary patch literal 29572 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